ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1jbGFzcy1iYWNrbGlnaHQgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtY2xhc3MtYmFja2xpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjM3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtY2xhc3MtYmFja2xpZ2h0CkBAIC0wLDAgKzEsMzYgQEAKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9ibF9wb3dlcgorRGF0ZToJCUFwcmlsIDIwMDUKK0tlcm5lbFZlcnNpb246CTIuNi4xMgorQ29udGFjdDoJUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PgorRGVzY3JpcHRpb246CisJCUNvbnRyb2wgQkFDS0xJR0hUIHBvd2VyLCB2YWx1ZXMgYXJlIEZCX0JMQU5LXyogZnJvbSBmYi5oCisJCSAtIEZCX0JMQU5LX1VOQkxBTksgKDApICAgOiBwb3dlciBvbi4KKwkJIC0gRkJfQkxBTktfUE9XRVJET1dOICg0KSA6IHBvd2VyIG9mZgorVXNlcnM6CQlIQUwKKworV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2JyaWdodG5lc3MKK0RhdGU6CQlBcHJpbCAyMDA1CitLZXJuZWxWZXJzaW9uOgkyLjYuMTIKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDb250cm9sIHRoZSBicmlnaHRuZXNzIGZvciB0aGlzIDxiYWNrbGlnaHQ+LiBWYWx1ZXMKKwkJYXJlIGJldHdlZW4gMCBhbmQgbWF4X2JyaWdodG5lc3MuIFRoaXMgZmlsZSB3aWxsIGFsc28KKwkJc2hvdyB0aGUgYnJpZ2h0bmVzcyBsZXZlbCBzdG9yZWQgaW4gdGhlIGRyaXZlciwgd2hpY2gKKwkJbWF5IG5vdCBiZSB0aGUgYWN0dWFsIGJyaWdodG5lc3MgKHNlZSBhY3R1YWxfYnJpZ2h0bmVzcykuCitVc2VyczoJCUhBTAorCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vYWN0dWFsX2JyaWdodG5lc3MKK0RhdGU6CQlNYXJjaCAyMDA2CitLZXJuZWxWZXJzaW9uOgkyLjYuMTcKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlTaG93IHRoZSBhY3R1YWwgYnJpZ2h0bmVzcyBieSBxdWVyeWluZyB0aGUgaGFyZHdhcmUuCitVc2VyczoJCUhBTAorCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbWF4X2JyaWdodG5lc3MKK0RhdGU6CQlBcHJpbCAyMDA1CitLZXJuZWxWZXJzaW9uOgkyLjYuMTIKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlNYXhpbXVtIGJyaWdodG5lc3MgZm9yIDxiYWNrbGlnaHQ+LgorVXNlcnM6CQlIQUwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGNkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sY2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MDZiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGNkCkBAIC0wLDAgKzEsMjMgQEAKK1doYXQ6CQkvc3lzL2NsYXNzL2xjZC88bGNkPi9sY2RfcG93ZXIKK0RhdGU6CQlBcHJpbCAyMDA1CitLZXJuZWxWZXJzaW9uOgkyLjYuMTIKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDb250cm9sIExDRCBwb3dlciwgdmFsdWVzIGFyZSBGQl9CTEFOS18qIGZyb20gZmIuaAorCQkgLSBGQl9CTEFOS19VTkJMQU5LICgwKSAgIDogcG93ZXIgb24uCisJCSAtIEZCX0JMQU5LX1BPV0VSRE9XTiAoNCkgOiBwb3dlciBvZmYKKworV2hhdDoJCS9zeXMvY2xhc3MvbGNkLzxsY2Q+L2NvbnRyYXN0CitEYXRlOgkJQXByaWwgMjAwNQorS2VybmVsVmVyc2lvbjoJMi42LjEyCitDb250YWN0OglSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ3VycmVudCBjb250cmFzdCBvZiB0aGlzIExDRCBkZXZpY2UuIFZhbHVlIGlzIGJldHdlZW4gMCBhbmQKKwkJL3N5cy9jbGFzcy9sY2QvPGxjZD4vbWF4X2NvbnRyYXN0LgorCitXaGF0OgkJL3N5cy9jbGFzcy9sY2QvPGxjZD4vbWF4X2NvbnRyYXN0CitEYXRlOgkJQXByaWwgMjAwNQorS2VybmVsVmVyc2lvbjoJMi42LjEyCitDb250YWN0OglSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJTWF4aW11bSBjb250cmFzdCBmb3IgdGhpcyBMQ0QgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ1NDFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKQEAgLTAsMCArMSwyOCBAQAorV2hhdDoJCS9zeXMvY2xhc3MvbGVkcy88bGVkPi9icmlnaHRuZXNzCitEYXRlOgkJTWFyY2ggMjAwNgorS2VybmVsVmVyc2lvbjoJMi42LjE3CitDb250YWN0OglSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJU2V0IHRoZSBicmlnaHRuZXNzIG9mIHRoZSBMRUQuIE1vc3QgTEVEcyBkb24ndAorCQloYXZlIGhhcmR3YXJlIGJyaWdodG5lc3Mgc3VwcG9ydCBzbyB3aWxsIGp1c3QgYmUgdHVybmVkIG9uIGZvcgorCQlub24temVybyBicmlnaHRuZXNzIHNldHRpbmdzLiBUaGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZAorCQkvc3lzL2NsYXNzL2xlZHMvPGxlZD4vbWF4X2JyaWdodG5lc3MuCisKK1doYXQ6CQkvc3lzL2NsYXNzL2xlZHMvPGxlZD4vbWF4X2JyaWdodG5lc3MKK0RhdGU6CQlNYXJjaCAyMDA2CitLZXJuZWxWZXJzaW9uOgkyLjYuMTcKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlNYXhpbXVtIGJyaWdodG5lc3MgbGV2ZWwgZm9yIHRoaXMgbGVkLCBkZWZhdWx0IGlzIDI1NSAoTEVEX0ZVTEwpLgorCitXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLzxsZWQ+L3RyaWdnZXIKK0RhdGU6CQlNYXJjaCAyMDA2CitLZXJuZWxWZXJzaW9uOgkyLjYuMTcKK0NvbnRhY3Q6CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlTZXQgdGhlIHRyaWdnZXIgZm9yIHRoaXMgTEVELiBBIHRyaWdnZXIgaXMgYSBrZXJuZWwgYmFzZWQgc291cmNlCisJCW9mIGxlZCBldmVudHMuCisJCVlvdSBjYW4gY2hhbmdlIHRyaWdnZXJzIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gdGhlIHdheSBhbiBJTworCQlzY2hlZHVsZXIgaXMgY2hvc2VuLiBUcmlnZ2VyIHNwZWNpZmljIHBhcmFtZXRlcnMgY2FuIGFwcGVhciBpbgorCQkvc3lzL2NsYXNzL2xlZHMvPGxlZD4gb25jZSBhIGdpdmVuIHRyaWdnZXIgaXMgc2VsZWN0ZWQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZ3BpbyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZ3BpbwppbmRleCA4YWFiODA5Li44MGY0Yzk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWdwaW8KKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1ncGlvCkBAIC0xOSw2ICsxOSw3IEBACiAJL2dwaW9OIC4uLiBmb3IgZWFjaCBleHBvcnRlZCBHUElPICNOCiAJICAgIC92YWx1ZSAuLi4gYWx3YXlzIHJlYWRhYmxlLCB3cml0ZXMgZmFpbCBmb3IgaW5wdXQgR1BJT3MKIAkgICAgL2RpcmVjdGlvbiAuLi4gci93IGFzOiBpbiwgb3V0IChkZWZhdWx0IGxvdyk7IHdyaXRlOiBoaWdoLCBsb3cKKwkgICAgL2VkZ2UgLi4uIHIvdyBhczogbm9uZSwgZmFsbGluZywgcmlzaW5nLCBib3RoCiAJL2dwaW9jaGlwTiAuLi4gZm9yIGVhY2ggZ3Bpb2NoaXA7ICNOIGlzIGl0cyBmaXJzdCBHUElPCiAJICAgIC9iYXNlIC4uLiAoci9vKSBzYW1lIGFzIE4KIAkgICAgL2xhYmVsIC4uLiAoci9vKSBkZXNjcmlwdGl2ZSwgbm90IG5lY2Vzc2FyaWx5IHVuaXF1ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hc3VzLWxhcHRvcCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjYjY2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AKQEAgLTAsMCArMSw1MiBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9kaXNwbGF5CitEYXRlOgkJSmFudWFyeSAyMDA3CitLZXJuZWxWZXJzaW9uOgkyLjYuMjAKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgYWxsb3dzIGRpc3BsYXkgc3dpdGNoaW5nLiBUaGUgdmFsdWUKKwkJaXMgY29tcG9zZWQgYnkgNCBiaXRzIGFuZCBkZWZpbmVkIGFzIGZvbGxvdzoKKwkJNDMyMQorCQl8fHxgLSBMQ0QKKwkJfHxgLS0gQ1JUCisJCXxgLS0tIFRWCisJCWAtLS0tIERWSQorCQlFeDogLSAwICgwMDAwYikgbWVhbnMgbm8gZGlzcGxheQorCQkgICAgLSAzICgwMDExYikgQ1JUK0xDRC4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9ncHMKK0RhdGU6CQlKYW51YXJ5IDIwMDcKK0tlcm5lbFZlcnNpb246CTIuNi4yMAorQ29udGFjdDoJIkNvcmVudGluIENoYXJ5IiA8Y29yZW50aW5jakBpa3NhaWYubmV0PgorRGVzY3JpcHRpb246CisJCUNvbnRyb2wgdGhlIGdwcyBkZXZpY2UuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgorVXNlcnM6CQlMYXBzdXMKKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9sZWRkCitEYXRlOgkJSmFudWFyeSAyMDA3CitLZXJuZWxWZXJzaW9uOgkyLjYuMjAKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlTb21lIG1vZGVscyBsaWtlIHRoZSBXMU4gaGF2ZSBhIExFRCBkaXNwbGF5IHRoYXQgY2FuIGJlCisJCXVzZWQgdG8gZGlzcGxheSBzZXZlcmFsIGluZm9ybWF0aW9ucy4KKwkJVG8gY29udHJvbCB0aGUgTEVEIGRpc3BsYXksIHVzZSB0aGUgZm9sbG93aW5nIDoKKwkJICAgIGVjaG8gMHgwVDAwMERERCA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC8KKwkJd2hlcmUgVCBjb250cm9sIHRoZSAzIGxldHRlcnMgZGlzcGxheSwgYW5kIERERCB0aGUgMyBkaWdpdHMgZGlzcGxheS4KKwkJVGhlIERERCB0YWJsZSBjYW4gYmUgZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FzdXMtbGFwdG9wLnR4dAorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wL2JsdWV0b290aAorRGF0ZToJCUphbnVhcnkgMjAwNworS2VybmVsVmVyc2lvbjoJMi42LjIwCitDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgYmx1ZXRvb3RoIGRldmljZS4gMSBtZWFucyBvbiwgMCBtZWFucyBvZmYuCisJCVRoaXMgbWF5IGNvbnRyb2wgdGhlIGxlZCwgdGhlIGRldmljZSBvciBib3RoLgorVXNlcnM6CQlMYXBzdXMKKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC93bGFuCitEYXRlOgkJSmFudWFyeSAyMDA3CitLZXJuZWxWZXJzaW9uOgkyLjYuMjAKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDb250cm9sIHRoZSBibHVldG9vdGggZGV2aWNlLiAxIG1lYW5zIG9uLCAwIG1lYW5zIG9mZi4KKwkJVGhpcyBtYXkgY29udHJvbCB0aGUgbGVkLCB0aGUgZGV2aWNlIG9yIGJvdGguCitVc2VyczoJCUxhcHN1cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1lZWVwYy1sYXB0b3AgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQ1ZGZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1lZWVwYy1sYXB0b3AKQEAgLTAsMCArMSw1MCBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy1sYXB0b3AvZGlzcAorRGF0ZToJCU1heSAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgYWxsb3dzIGRpc3BsYXkgc3dpdGNoaW5nLgorCQktIDEgPSBMQ0QKKwkJLSAyID0gQ1JUCisJCS0gMyA9IExDRCtDUlQKKwkJSWYgeW91IHJ1biBYMTEsIHlvdSBzaG91bGQgdXNlIHhyYW5kciBpbnN0ZWFkLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLWxhcHRvcC9jYW1lcmEKK0RhdGU6CQlNYXkgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI2CitDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgY2FtZXJhLiAxIG1lYW5zIG9uLCAwIG1lYW5zIG9mZi4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy1sYXB0b3AvY2FyZHIKK0RhdGU6CQlNYXkgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI2CitDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgY2FyZCByZWFkZXIuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLWxhcHRvcC9jcHVmdgorRGF0ZToJCUp1biAyMDA5CitLZXJuZWxWZXJzaW9uOgkyLjYuMzEKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlDaGFuZ2UgQ1BVIGNsb2NrIGNvbmZpZ3VyYXRpb24uCisJCU9uIHRoZSBFZWUgUEMgMTAwMEggdGhlcmUgYXJlIHRocmVlIGF2YWlsYWJsZSBjbG9jayBjb25maWd1cmF0aW9uOgorCQkgICAgKiAwIC0+IFN1cGVyIFBlcmZvcm1hbmNlIE1vZGUKKwkJICAgICogMSAtPiBIaWdoIFBlcmZvcm1hbmNlIE1vZGUKKwkJICAgICogMiAtPiBQb3dlciBTYXZpbmcgTW9kZQorCQlPbiBFZWUgUEMgNzAxIHRoZXJlIGlzIG9ubHkgMiBhdmFpbGFibGUgY2xvY2sgY29uZmlndXJhdGlvbnMuCisJCUF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGFyZSBsaXN0ZWQgaW4gYXZhaWxhYmxlX2NwdWZ2IGZpbGUuCisJCVJlYWRpbmcgdGhpcyBmaWxlIHdpbGwgc2hvdyB0aGUgcmF3IGhleGFkZWNpbWFsIHZhbHVlIHdoaWNoCisJCWlzIGRlZmluZWQgYXMgZm9sbG93OgorCQl8IDggYml0IHwgOCBiaXQgfAorCQkgICAgfCAgICAgICBgLS0tLSBDdXJyZW50IG1vZGUKKwkJICAgIGAtLS0tLS0tLS0tLS0gQXZhaWxhYmxlcyBtb2RlcworCQlGb3IgZXhhbXBsZSwgMHgzMDEgbWVhbnM6IG1vZGUgMSBzZWxlY3RlZCwgMyBhdmFpbGFibGUgbW9kZXMuCisKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2F2YWlsYWJsZV9jcHVmdgorRGF0ZToJCUp1biAyMDA5CitLZXJuZWxWZXJzaW9uOgkyLjYuMzEKK0NvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK0Rlc2NyaXB0aW9uOgorCQlMaXN0IGF2YWlsYWJsZSBjcHVmdiBtb2Rlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCA5NjMyNDQ0Li5hYjgzMDBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCiAJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKIAkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbCBcCi0JICAgIHRyYWNlcG9pbnQueG1sCisJICAgIHRyYWNlcG9pbnQueG1sIG1lZGlhLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CkBAIC0zMiw3ICszMiw3IEBACiAKICMjIwogIyBUaGUgdGFyZ2V0cyB0aGF0IG1heSBiZSB1c2VkLgotUEhPTlkgKz0geG1sZG9jcyBzZ21sZG9jcyBwc2RvY3MgcGRmZG9jcyBodG1sZG9jcyBtYW5kb2NzIGluc3RhbGxtYW5kb2NzIGNsZWFuZG9jcworUEhPTlkgKz0geG1sZG9jcyBzZ21sZG9jcyBwc2RvY3MgcGRmZG9jcyBodG1sZG9jcyBtYW5kb2NzIGluc3RhbGxtYW5kb2NzIGNsZWFuZG9jcyBtZWRpYQogCiBCT09LUyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoRE9DQk9PS1MpKQogeG1sZG9jczogJChCT09LUykKQEAgLTQ1LDEyICs0NSwxNiBAQAogcGRmZG9jczogJChQREYpCiAKIEhUTUwgOj0gJChzb3J0ICQocGF0c3Vic3QgJS54bWwsICUuaHRtbCwgJChCT09LUykpKQotaHRtbGRvY3M6ICQoSFRNTCkKK2h0bWxkb2NzOiBtZWRpYSAkKEhUTUwpCiAJJChjYWxsIGJ1aWxkX21haW5faW5kZXgpCiAKIE1BTiA6PSAkKHBhdHN1YnN0ICUueG1sLCAlLjksICQoQk9PS1MpKQogbWFuZG9jczogJChNQU4pCiAKK21lZGlhOgorCW1rZGlyIC1wICQoc3JjdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLworCWNwICQoc3JjdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi8qLnBuZyAkKHNyY3RyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvKi5naWYgJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvCisKIGluc3RhbGxtYW5kb2NzOiBtYW5kb2NzCiAJbWtkaXIgLXAgL3Vzci9sb2NhbC9tYW4vbWFuOS8KIAlpbnN0YWxsIERvY3VtZW50YXRpb24vRG9jQm9vay9tYW4vKi45Lmd6IC91c3IvbG9jYWwvbWFuL21hbjkvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiLy5naXRpZ25vcmUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlYzMyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACishKi54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvYXVkaW8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9hdWRpby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViOTZiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvYXVkaW8ueG1sCkBAIC0wLDAgKzEsMTQ3MyBAQAorPHRpdGxlPkRWQiBBdWRpbyBEZXZpY2U8L3RpdGxlPgorPHBhcmE+VGhlIERWQiBhdWRpbyBkZXZpY2UgY29udHJvbHMgdGhlIE1QRUcyIGF1ZGlvIGRlY29kZXIgb2YgdGhlIERWQiBoYXJkd2FyZS4gSXQKK2NhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIDxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlcjAvYXVkaW8wPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZAoraW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi92aWRlby5oPC9lbXBoYXNpcz4gaW4geW91cgorYXBwbGljYXRpb24uCis8L3BhcmE+Cis8cGFyYT5QbGVhc2Ugbm90ZSB0aGF0IHNvbWUgRFZCIGNhcmRzIGRvbiYjODIxNzt0IGhhdmUgdGhlaXIgb3duIE1QRUcgZGVjb2Rlciwgd2hpY2ggcmVzdWx0cyBpbgordGhlIG9taXNzaW9uIG9mIHRoZSBhdWRpbyBhbmQgdmlkZW8gZGV2aWNlLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0iYXVkaW9fZGF0YV90eXBlcyI+Cis8dGl0bGU+QXVkaW8gRGF0YSBUeXBlczwvdGl0bGU+Cis8cGFyYT5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBzdHJ1Y3R1cmVzLCBkYXRhIHR5cGVzIGFuZCBkZWZpbmVzIHVzZWQgd2hlbiB0YWxraW5nIHRvIHRoZQorYXVkaW8gZGV2aWNlLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0iYXVkaW9fc3RyZWFtX3NvdXJjZV90Ij4KKzx0aXRsZT5hdWRpb19zdHJlYW1fc291cmNlX3Q8L3RpdGxlPgorPHBhcmE+VGhlIGF1ZGlvIHN0cmVhbSBzb3VyY2UgaXMgc2V0IHRocm91Z2ggdGhlIEFVRElPX1NFTEVDVF9TT1VSQ0UgY2FsbCBhbmQgY2FuIHRha2UKK3RoZSBmb2xsb3dpbmcgdmFsdWVzLCBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBhcmUgcmVwbGF5aW5nIGZyb20gYW4gaW50ZXJuYWwgKGRlbXV4KSBvcgorZXh0ZXJuYWwgKHVzZXIgd3JpdGUpIHNvdXJjZS4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0geworCSBBVURJT19TT1VSQ0VfREVNVVgsCisJIEFVRElPX1NPVVJDRV9NRU1PUlkKKyB9IGF1ZGlvX3N0cmVhbV9zb3VyY2VfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5BVURJT19TT1VSQ0VfREVNVVggc2VsZWN0cyB0aGUgZGVtdWx0aXBsZXhlciAoZmVkIGVpdGhlciBieSB0aGUgZnJvbnRlbmQgb3IgdGhlCitEVlIgZGV2aWNlKSBhcyB0aGUgc291cmNlIG9mIHRoZSB2aWRlbyBzdHJlYW0uIElmIEFVRElPX1NPVVJDRV9NRU1PUlkKK2lzIHNlbGVjdGVkIHRoZSBzdHJlYW0gY29tZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gdGhyb3VnaCB0aGUgPGVtcGhhc2lzIHJvbGU9InR0Ij53cml0ZSgpPC9lbXBoYXNpcz4gc3lzdGVtCitjYWxsLgorPC9wYXJhPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fcGxheV9zdGF0ZV90Ij4KKzx0aXRsZT5hdWRpb19wbGF5X3N0YXRlX3Q8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBBVURJT19HRVRfU1RBVFVTIGNhbGwgcmVwcmVzZW50aW5nIHRoZQorc3RhdGUgb2YgYXVkaW8gcGxheWJhY2suCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgQVVESU9fU1RPUFBFRCwKKwkgQVVESU9fUExBWUlORywKKwkgQVVESU9fUEFVU0VECisgfSBhdWRpb19wbGF5X3N0YXRlX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fY2hhbm5lbF9zZWxlY3RfdCI+Cis8dGl0bGU+YXVkaW9fY2hhbm5lbF9zZWxlY3RfdDwvdGl0bGU+Cis8cGFyYT5UaGUgYXVkaW8gY2hhbm5lbCBzZWxlY3RlZCB2aWEgQVVESU9fQ0hBTk5FTF9TRUxFQ1QgaXMgZGV0ZXJtaW5lZCBieSB0aGUKK2ZvbGxvd2luZyB2YWx1ZXMuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgQVVESU9fU1RFUkVPLAorCSBBVURJT19NT05PX0xFRlQsCisJIEFVRElPX01PTk9fUklHSFQsCisgfSBhdWRpb19jaGFubmVsX3NlbGVjdF90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InN0cnVjdF9hdWRpb19zdGF0dXMiPgorPHRpdGxlPnN0cnVjdCBhdWRpb19zdGF0dXM8L3RpdGxlPgorPHBhcmE+VGhlIEFVRElPX0dFVF9TVEFUVVMgY2FsbCByZXR1cm5zIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluZm9ybWluZyBhYm91dCB2YXJpb3VzCitzdGF0ZXMgb2YgdGhlIHBsYXliYWNrIG9wZXJhdGlvbi4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBhdWRpb19zdGF0dXMgeworCSBib29sZWFuIEFWX3N5bmNfc3RhdGU7CisJIGJvb2xlYW4gbXV0ZV9zdGF0ZTsKKwkgYXVkaW9fcGxheV9zdGF0ZV90IHBsYXlfc3RhdGU7CisJIGF1ZGlvX3N0cmVhbV9zb3VyY2VfdCBzdHJlYW1fc291cmNlOworCSBhdWRpb19jaGFubmVsX3NlbGVjdF90IGNoYW5uZWxfc2VsZWN0OworCSBib29sZWFuIGJ5cGFzc19tb2RlOworIH0gYXVkaW9fc3RhdHVzX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0ic3RydWN0X2F1ZGlvX21peGVyIj4KKzx0aXRsZT5zdHJ1Y3QgYXVkaW9fbWl4ZXI8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgQVVESU9fU0VUX01JWEVSIGNhbGwgdG8gc2V0IHRoZSBhdWRpbwordm9sdW1lLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IGF1ZGlvX21peGVyIHsKKwkgdW5zaWduZWQgaW50IHZvbHVtZV9sZWZ0OworCSB1bnNpZ25lZCBpbnQgdm9sdW1lX3JpZ2h0OworIH0gYXVkaW9fbWl4ZXJfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJhdWRpb19lbmNvZGluZ3MiPgorPHRpdGxlPmF1ZGlvIGVuY29kaW5nczwvdGl0bGU+Cis8cGFyYT5BIGNhbGwgdG8gQVVESU9fR0VUX0NBUEFCSUxJVElFUyByZXR1cm5zIGFuIHVuc2lnbmVkIGludGVnZXIgd2l0aCB0aGUgZm9sbG93aW5nCitiaXRzIHNldCBhY2NvcmRpbmcgdG8gdGhlIGhhcmR3YXJlcyBjYXBhYmlsaXRpZXMuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgI2RlZmluZSBBVURJT19DQVBfRFRTICAgIDEKKyAjZGVmaW5lIEFVRElPX0NBUF9MUENNICAgMgorICNkZWZpbmUgQVVESU9fQ0FQX01QMSAgICA0CisgI2RlZmluZSBBVURJT19DQVBfTVAyICAgIDgKKyAjZGVmaW5lIEFVRElPX0NBUF9NUDMgICAxNgorICNkZWZpbmUgQVVESU9fQ0FQX0FBQyAgIDMyCisgI2RlZmluZSBBVURJT19DQVBfT0dHICAgNjQKKyAjZGVmaW5lIEFVRElPX0NBUF9TRERTIDEyOAorICNkZWZpbmUgQVVESU9fQ0FQX0FDMyAgMjU2Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0ic3RydWN0X2F1ZGlvX2thcmFva2UiPgorPHRpdGxlPnN0cnVjdCBhdWRpb19rYXJhb2tlPC90aXRsZT4KKzxwYXJhPlRoZSBpb2N0bCBBVURJT19TRVRfS0FSQU9LRSB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYKKyBzdHJ1Y3QgYXVkaW9fa2FyYW9rZXsKKwkgaW50IHZvY2FsMTsKKwkgaW50IHZvY2FsMjsKKwkgaW50IG1lbG9keTsKKyB9IGF1ZGlvX2thcmFva2VfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5JZiBWb2NhbDEgb3IgVm9jYWwyIGFyZSBub24temVybywgdGhleSBnZXQgbWl4ZWQgaW50byBsZWZ0IGFuZCByaWdodCB0IGF0IDcwJSBlYWNoLiBJZiBib3RoLAorVm9jYWwxIGFuZCBWb2NhbDIgYXJlIG5vbi16ZXJvLCBWb2NhbDEgZ2V0cyBtaXhlZCBpbnRvIHRoZSBsZWZ0IGNoYW5uZWwgYW5kIFZvY2FsMiBpbnRvIHRoZQorcmlnaHQgY2hhbm5lbCBhdCAxMDAlIGVhY2guIEZmIE1lbG9keSBpcyBub24temVybywgdGhlIG1lbG9keSBjaGFubmVsIGdldHMgbWl4ZWQgaW50byBsZWZ0CithbmQgcmlnaHQuCis8L3BhcmE+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJhdWRpb19hdHRyaWJ1dGVzIj4KKzx0aXRsZT5hdWRpbyBhdHRyaWJ1dGVzPC90aXRsZT4KKzxwYXJhPlRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBjYW4gYmUgc2V0IGJ5IGEgY2FsbCB0byBBVURJT19TRVRfQVRUUklCVVRFUzoKKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHVpbnQxNl90IGF1ZGlvX2F0dHJpYnV0ZXNfdDsKKyAvJiN4MjJDNjsgICBiaXRzOiBkZXNjci4gJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgMTUtMTMgYXVkaW8gY29kaW5nIG1vZGUgKDA9YWMzLCAyPW1wZWcxLCAzPW1wZWcyZXh0LCA0PUxQQ00sIDY9RFRTLCAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAxMiAgICBtdWx0aWNoYW5uZWwgZXh0ZW5zaW9uICYjeDIyQzY7LworIC8mI3gyMkM2OyAgIDExLTEwIGF1ZGlvIHR5cGUgKDA9bm90IHNwZWMsIDE9bGFuZ3VhZ2UgaW5jbHVkZWQpICYjeDIyQzY7LworIC8mI3gyMkM2OyAgICA5LSA4IGF1ZGlvIGFwcGxpY2F0aW9uIG1vZGUgKDA9bm90IHNwZWMsIDE9a2FyYW9rZSwgMj1zdXJyb3VuZCkgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDctIDYgUXVhbnRpemF0aW9uIC8gRFJDIChtcGVnIGF1ZGlvOiAxPURSQyBleGlzdHMpKGxwY206IDA9MTZiaXQsICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAgNS0gNCBTYW1wbGUgZnJlcXVlbmN5IGZzICgwPTQ4a0h6LCAxPTk2a0h6KSAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAgMi0gMCBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMgKG4rMSBjaGFubmVscykgJiN4MjJDNjsvCis8L3Byb2dyYW1saXN0aW5nPgorIDwvc2VjdGlvbj48L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fZnVuY3Rpb25fY2FsbHMiPgorPHRpdGxlPkF1ZGlvIEZ1bmN0aW9uIENhbGxzPC90aXRsZT4KKworCis8c2VjdGlvbiBpZD0iYXVkaW9fZm9wZW4iPgorPHRpdGxlPm9wZW4oKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIG9wZW5zIGEgbmFtZWQgYXVkaW8gZGV2aWNlIChlLmcuIC9kZXYvZHZiL2FkYXB0ZXIwL2F1ZGlvMCkKKyBmb3Igc3Vic2VxdWVudCB1c2UuIFdoZW4gYW4gb3BlbigpIGNhbGwgaGFzIHN1Y2NlZWRlZCwgdGhlIGRldmljZSB3aWxsIGJlIHJlYWR5CisgZm9yIHVzZS4gVGhlIHNpZ25pZmljYW5jZSBvZiBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBpcyBkZXNjcmliZWQgaW4gdGhlCisgZG9jdW1lbnRhdGlvbiBmb3IgZnVuY3Rpb25zIHdoZXJlIHRoZXJlIGlzIGEgZGlmZmVyZW5jZS4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZQorIHNlbWFudGljcyBvZiB0aGUgb3BlbigpIGNhbGwgaXRzZWxmLiBBIGRldmljZSBvcGVuZWQgaW4gYmxvY2tpbmcgbW9kZSBjYW4gbGF0ZXIKKyBiZSBwdXQgaW50byBub24tYmxvY2tpbmcgbW9kZSAoYW5kIHZpY2UgdmVyc2EpIHVzaW5nIHRoZSBGX1NFVEZMIGNvbW1hbmQKKyBvZiB0aGUgZmNudGwgc3lzdGVtIGNhbGwuIFRoaXMgaXMgYSBzdGFuZGFyZCBzeXN0ZW0gY2FsbCwgZG9jdW1lbnRlZCBpbiB0aGUgTGludXgKKyBtYW51YWwgcGFnZSBmb3IgZmNudGwuIE9ubHkgb25lIHVzZXIgY2FuIG9wZW4gdGhlIEF1ZGlvIERldmljZSBpbiBPX1JEV1IKKyBtb2RlLiBBbGwgb3RoZXIgYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZGV2aWNlIGluIHRoaXMgbW9kZSB3aWxsIGZhaWwsIGFuZCBhbiBlcnJvcgorIGNvZGUgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhlIEF1ZGlvIERldmljZSBpcyBvcGVuZWQgaW4gT19SRE9OTFkgbW9kZSwgdGhlCisgb25seSBpb2N0bCBjYWxsIHRoYXQgY2FuIGJlIHVzZWQgaXMgQVVESU9fR0VUX1NUQVRVUy4gQWxsIG90aGVyIGNhbGwgd2lsbAorIHJldHVybiB3aXRoIGFuIGVycm9yIGNvZGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuKGNvbnN0IGNoYXIgJiN4MjJDNjtkZXZpY2VOYW1lLCBpbnQgZmxhZ3MpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNvbnN0IGNoYXIKKyAqZGV2aWNlTmFtZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TmFtZSBvZiBzcGVjaWZpYyBhdWRpbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmbGFnczwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QSBiaXQtd2lzZSBPUiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fUkRPTkxZIHJlYWQtb25seSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JEV1IgcmVhZC93cml0ZSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX05PTkJMT0NLIG9wZW4gaW4gbm9uLWJsb2NraW5nIG1vZGU8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4oYmxvY2tpbmcgbW9kZSBpcyB0aGUgZGVmYXVsdCk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RGV2aWNlIGRyaXZlciBub3QgbG9hZGVkL2F2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBvciByZXNvdXJjZSBidXN5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImF1ZGlvX2ZjbG9zZSI+Cis8dGl0bGU+Y2xvc2UoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGNsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIGF1ZGlvIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGludCBmZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iYXVkaW9fZndyaXRlIj4KKzx0aXRsZT53cml0ZSgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgY2FuIG9ubHkgYmUgdXNlZCBpZiBBVURJT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkCisgaW4gdGhlIGlvY3RsIGNhbGwgQVVESU9fU0VMRUNUX1NPVVJDRS4gVGhlIGRhdGEgcHJvdmlkZWQgc2hhbGwgYmUgaW4KKyBQRVMgZm9ybWF0LiBJZiBPX05PTkJMT0NLIGlzIG5vdCBzcGVjaWZpZWQgdGhlIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwKKyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLiBUaGUgYW1vdW50IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaXMgaW1wbGllZCBieQorIGNvdW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3Qgd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICYjeDIyQzY7YnVmLCBzaXplX3QgY291bnQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZvaWQgKmJ1ZjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFBFUyBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QgY291bnQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNpemUgb2YgYnVmLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk1vZGUgQVVESU9fU09VUkNFX01FTU9SWSBub3Qgc2VsZWN0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QXR0ZW1wdGVkIHRvIHdyaXRlIG1vcmUgZGF0YSB0aGFuIHRoZSBpbnRlcm5hbCBidWZmZXIgY2FuCisgaG9sZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NUT1A8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGFza3MgdGhlIEF1ZGlvIERldmljZSB0byBzdG9wIHBsYXlpbmcgdGhlIGN1cnJlbnQgc3RyZWFtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX1NUT1ApOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgQVVESU9fU1RPUCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fUExBWTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgQXVkaW8gRGV2aWNlIHRvIHN0YXJ0IHBsYXlpbmcgYW4gYXVkaW8gc3RyZWFtIGZyb20gdGhlCisgc2VsZWN0ZWQgc291cmNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX1BMQVkpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgQVVESU9fUExBWSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fUEFVU0U8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHN1c3BlbmRzIHRoZSBhdWRpbyBzdHJlYW0gYmVpbmcgcGxheWVkLiBEZWNvZGluZyBhbmQgcGxheWluZworIGFyZSBwYXVzZWQuIEl0IGlzIHRoZW4gcG9zc2libGUgdG8gcmVzdGFydCBhZ2FpbiBkZWNvZGluZyBhbmQgcGxheWluZyBwcm9jZXNzIG9mCisgdGhlIGF1ZGlvIHN0cmVhbSB1c2luZyBBVURJT19DT05USU5VRSBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JZiBBVURJT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkIGluIHRoZSBpb2N0bCBjYWxsCisgQVVESU9fU0VMRUNUX1NPVVJDRSwgdGhlIERWQi1zdWJzeXN0ZW0gd2lsbCBub3QgZGVjb2RlIChjb25zdW1lKQorIGFueSBtb3JlIGRhdGEgdW50aWwgdGhlIGlvY3RsIGNhbGwgQVVESU9fQ09OVElOVUUgb3IgQVVESU9fUExBWSBpcworIHBlcmZvcm1lZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19QQVVTRSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19QQVVTRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFTEVDVF9TT1VSQ0U8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGluZm9ybXMgdGhlIGF1ZGlvIGRldmljZSB3aGljaCBzb3VyY2Ugc2hhbGwgYmUgdXNlZAorIGZvciB0aGUgaW5wdXQgZGF0YS4gVGhlIHBvc3NpYmxlIHNvdXJjZXMgYXJlIGRlbXV4IG9yIG1lbW9yeS4gSWYKKyBBVURJT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkLCB0aGUgZGF0YSBpcyBmZWQgdG8gdGhlIEF1ZGlvIERldmljZQorIHRocm91Z2ggdGhlIHdyaXRlIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VMRUNUX1NPVVJDRSwKKyBhdWRpb19zdHJlYW1fc291cmNlX3Qgc291cmNlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFTEVDVF9TT1VSQ0UgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+YXVkaW9fc3RyZWFtX3NvdXJjZV90Cisgc291cmNlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgdGhlIHNvdXJjZSB0aGF0IHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBBdWRpbworIHN0cmVhbS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbGxlZ2FsIGlucHV0IHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfTVVURTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgYXVkaW8gZGV2aWNlIHRvIG11dGUgdGhlIHN0cmVhbSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZworIHBsYXllZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfTVVURSwKKyBib29sZWFuIHN0YXRlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9NVVRFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJvb2xlYW4gc3RhdGU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyBpZiBhdWRpbyBkZXZpY2Ugc2hhbGwgbXV0ZSBvciBub3QuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VFJVRSBBdWRpbyBNdXRlPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RkFMU0UgQXVkaW8gVW4tbXV0ZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9BVl9TWU5DPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gdHVybiBPTiBvciBPRkYgQS9WIHN5bmNocm9uaXphdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfQVZfU1lOQywKKyBib29sZWFuIHN0YXRlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX0FWX1NZTkMgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Ym9vbGVhbiBzdGF0ZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGVsbHMgdGhlIERWQiBzdWJzeXN0ZW0gaWYgQS9WIHN5bmNocm9uaXphdGlvbiBzaGFsbCBiZQorIE9OIG9yIE9GRi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UUlVFIEFWLXN5bmMgT048L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GQUxTRSBBVi1zeW5jIE9GRjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9CWVBBU1NfTU9ERTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgQXVkaW8gRGV2aWNlIHRvIGJ5cGFzcyB0aGUgQXVkaW8gZGVjb2RlciBhbmQgZm9yd2FyZAorIHRoZSBzdHJlYW0gd2l0aG91dCBkZWNvZGluZy4gVGhpcyBtb2RlIHNoYWxsIGJlIHVzZWQgaWYgc3RyZWFtcyB0aGF0IGNhbiYjODIxNzt0IGJlCisgaGFuZGxlZCBieSB0aGUgRFZCIHN5c3RlbSBzaGFsbCBiZSBkZWNvZGVkLiBEb2xieSBEaWdpdGFsVE0gc3RyZWFtcyBhcmUKKyBhdXRvbWF0aWNhbGx5IGZvcndhcmRlZCBieSB0aGUgRFZCIHN1YnN5c3RlbSBpZiB0aGUgaGFyZHdhcmUgY2FuIGhhbmRsZSBpdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEFVRElPX1NFVF9CWVBBU1NfTU9ERSwgYm9vbGVhbiBtb2RlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9CWVBBU1NfTU9ERSBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJvb2xlYW4gbW9kZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZGVjb2Rpbmcgb2YgdGhlIGN1cnJlbnQgQXVkaW8KKyBzdHJlYW0gaW4gdGhlIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VFJVRSBCeXBhc3MgaXMgZGlzYWJsZWQ8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GQUxTRSBCeXBhc3MgaXMgZW5hYmxlZDwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX0NIQU5ORUxfU0VMRUNUPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gc2VsZWN0IHRoZSByZXF1ZXN0ZWQgY2hhbm5lbCBpZiBwb3NzaWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEFVRElPX0NIQU5ORUxfU0VMRUNULCBhdWRpb19jaGFubmVsX3NlbGVjdF90KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX0NIQU5ORUxfU0VMRUNUIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+YXVkaW9fY2hhbm5lbF9zZWxlY3RfdAorIGNoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TZWxlY3QgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGF1ZGlvIChtb25vIGxlZnQvcmlnaHQsCisgc3RlcmVvKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbGxlZ2FsIGlucHV0IHBhcmFtZXRlciBjaC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19HRVRfU1RBVFVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBBdWRpbworIERldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19HRVRfU1RBVFVTLAorIHN0cnVjdCBhdWRpb19zdGF0dXMgJiN4MjJDNjtzdGF0dXMpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgQVVESU9fR0VUX1NUQVRVUyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgYXVkaW9fc3RhdHVzCisgKnN0YXR1czwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBBdWRpbyBEZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RhdHVzIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fR0VUX0NBUEFCSUxJVElFUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgQXVkaW8gRGV2aWNlIHRvIHRlbGwgdXMgYWJvdXQgdGhlIGRlY29kaW5nIGNhcGFiaWxpdGllcworIG9mIHRoZSBhdWRpbyBoYXJkd2FyZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEFVRElPX0dFVF9DQVBBQklMSVRJRVMsIHVuc2lnbmVkIGludCAmI3gyMkM2O2NhcCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19HRVRfQ0FQQUJJTElUSUVTIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dW5zaWduZWQgaW50ICpjYXA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlJldHVybnMgYSBiaXQgYXJyYXkgb2Ygc3VwcG9ydGVkIHNvdW5kIGZvcm1hdHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Y2FwIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fQ0xFQVJfQlVGRkVSPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBBdWRpbyBEZXZpY2UgdG8gY2xlYXIgYWxsIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBidWZmZXJzCisgb2YgdGhlIGF1ZGlvIGRlY29kZXIgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX0NMRUFSX0JVRkZFUik7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19DTEVBUl9CVUZGRVIgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfSUQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBzZWxlY3RzIHdoaWNoIHN1Yi1zdHJlYW0gaXMgdG8gYmUgZGVjb2RlZCBpZiBhIHByb2dyYW0gb3Igc3lzdGVtCisgc3RyZWFtIGlzIHNlbnQgdG8gdGhlIHZpZGVvIGRldmljZS4gSWYgbm8gYXVkaW8gc3RyZWFtIHR5cGUgaXMgc2V0IHRoZSBpZCBoYXMgdG8gYmUKKyBpbiBbMHhDMCwweERGXSBmb3IgTVBFRyBzb3VuZCwgaW4gWzB4ODAsMHg4N10gZm9yIEFDMyBhbmQgaW4gWzB4QTAsMHhBN10KKyBmb3IgTFBDTS4gTW9yZSBzcGVjaWZpY2F0aW9ucyBtYXkgZm9sbG93IGZvciBvdGhlciBzdHJlYW0gdHlwZXMuIElmIHRoZSBzdHJlYW0KKyB0eXBlIGlzIHNldCB0aGUgaWQganVzdCBzcGVjaWZpZXMgdGhlIHN1YnN0cmVhbSBpZCBvZiB0aGUgYXVkaW8gc3RyZWFtIGFuZCBvbmx5CisgdGhlIGZpcnN0IDUgYml0cyBhcmUgcmVjb2duaXplZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfSUQsIGludAorIGlkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9JRCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvIHN1Yi1zdHJlYW0gaWQ8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIHN1Yi1zdHJlYW0gaWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU0VUX01JWEVSPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgbGV0cyB5b3UgYWRqdXN0IHRoZSBtaXhlciBzZXR0aW5ncyBvZiB0aGUgYXVkaW8gZGVjb2Rlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfTUlYRVIsCisgYXVkaW9fbWl4ZXJfdCAmI3gyMkM2O21peCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19TRVRfSUQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+YXVkaW9fbWl4ZXJfdCAqbWl4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5taXhlciBzZXR0aW5ncy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5taXggcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfU1RSRUFNVFlQRTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIHRlbGxzIHRoZSBkcml2ZXIgd2hpY2gga2luZCBvZiBhdWRpbyBzdHJlYW0gdG8gZXhwZWN0LiBUaGlzIGlzIHVzZWZ1bAorIGlmIHRoZSBzdHJlYW0gb2ZmZXJzIHNldmVyYWwgYXVkaW8gc3ViLXN0cmVhbXMgbGlrZSBMUENNIGFuZCBBQzMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBBVURJT19TRVRfU1RSRUFNVFlQRSwKKyBpbnQgdHlwZSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19TRVRfU1RSRUFNVFlQRSBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCB0eXBlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJlYW0gdHlwZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dHlwZSBpcyBub3QgYSB2YWxpZCBvciBzdXBwb3J0ZWQgc3RyZWFtIHR5cGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU0VUX0VYVF9JRDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZXh0ZW5zaW9uIGlkIGZvciBNUEVHIHN0cmVhbXMgaW4gRFZECisgcGxheWJhY2suIE9ubHkgdGhlIGZpcnN0IDMgYml0cyBhcmUgcmVjb2duaXplZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IEFVRElPX1NFVF9FWFRfSUQsIGludAorIGlkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9FWFRfSUQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5hdWRpbyBzdWJfc3RyZWFtX2lkPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pZCBpcyBub3QgYSB2YWxpZCBpZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfQVRUUklCVVRFUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGlzIGludGVuZGVkIGZvciBEVkQgcGxheWJhY2sgYW5kIGFsbG93cyB5b3UgdG8gc2V0IGNlcnRhaW4KKyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXVkaW8gc3RyZWFtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VUX0FUVFJJQlVURVMsCisgYXVkaW9fYXR0cmlidXRlc190IGF0dHIgKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9BVFRSSUJVVEVTIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvX2F0dHJpYnV0ZXNfdAorIGF0dHI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvIGF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIHNlY3Rpb24gPz88L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF0dHIgaXMgbm90IGEgdmFsaWQgb3Igc3VwcG9ydGVkIGF0dHJpYnV0ZSBzZXR0aW5nLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9LQVJBT0tFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgYWxsb3dzIG9uZSB0byBzZXQgdGhlIG1peGVyIHNldHRpbmdzIGZvciBhIGthcmFva2UgRFZELjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VUX1NUUkVBTVRZUEUsCisgYXVkaW9fa2FyYW9rZV90ICYjeDIyQzY7a2FyYW9rZSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19TRVRfU1RSRUFNVFlQRSBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmF1ZGlvX2thcmFva2VfdAorICprYXJhb2tlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5rYXJhb2tlIHNldHRpbmdzIGFjY29yZGluZyB0byBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+a2FyYW9rZSBpcyBub3QgYSB2YWxpZCBvciBzdXBwb3J0ZWQga2FyYW9rZSBzZXR0aW5nLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9jYS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2NhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWYxZDJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9jYS54bWwKQEAgLTAsMCArMSwyMjEgQEAKKzx0aXRsZT5EVkIgQ0EgRGV2aWNlPC90aXRsZT4KKzxwYXJhPlRoZSBEVkIgQ0EgZGV2aWNlIGNvbnRyb2xzIHRoZSBjb25kaXRpb25hbCBhY2Nlc3MgaGFyZHdhcmUuIEl0IGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoCis8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvZHZiL2FkYXB0ZXIwL2NhMDwvZW1waGFzaXM+LiBEYXRhIHR5cGVzIGFuZCBhbmQgaW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5CitpbmNsdWRpbmcgPGVtcGhhc2lzIHJvbGU9InR0Ij5saW51eC9kdmIvY2EuaDwvZW1waGFzaXM+IGluIHlvdXIgYXBwbGljYXRpb24uCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSJjYV9kYXRhX3R5cGVzIj4KKzx0aXRsZT5DQSBEYXRhIFR5cGVzPC90aXRsZT4KKworCis8c2VjdGlvbiBpZD0iY2Ffc2xvdF9pbmZvX3QiPgorPHRpdGxlPmNhX3Nsb3RfaW5mb190PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgLyYjeDIyQzY7IHNsb3QgaW50ZXJmYWNlIHR5cGVzIGFuZCBpbmZvICYjeDIyQzY7LworCisgdHlwZWRlZiBzdHJ1Y3QgY2Ffc2xvdF9pbmZvX3MgeworCSBpbnQgbnVtOyAgICAgICAgICAgICAgIC8mI3gyMkM2OyBzbG90IG51bWJlciAmI3gyMkM2Oy8KKworCSBpbnQgdHlwZTsgICAgICAgICAgIC8mI3gyMkM2OyBDQSBpbnRlcmZhY2UgdGhpcyBzbG90IHN1cHBvcnRzICYjeDIyQzY7LworICNkZWZpbmUgQ0FfQ0kgICAgICAgICAgICAxICAvJiN4MjJDNjsgQ0kgaGlnaCBsZXZlbCBpbnRlcmZhY2UgJiN4MjJDNjsvCisgI2RlZmluZSBDQV9DSV9MSU5LICAgICAgIDIgIC8mI3gyMkM2OyBDSSBsaW5rIGxheWVyIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KKyAjZGVmaW5lIENBX0NJX1BIWVMgICAgICAgNCAgLyYjeDIyQzY7IENJIHBoeXNpY2FsIGxheWVyIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KKyAjZGVmaW5lIENBX1NDICAgICAgICAgIDEyOCAgLyYjeDIyQzY7IHNpbXBsZSBzbWFydCBjYXJkIGludGVyZmFjZSAmI3gyMkM2Oy8KKworCSB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgI2RlZmluZSBDQV9DSV9NT0RVTEVfUFJFU0VOVCAxIC8mI3gyMkM2OyBtb2R1bGUgKG9yIGNhcmQpIGluc2VydGVkICYjeDIyQzY7LworICNkZWZpbmUgQ0FfQ0lfTU9EVUxFX1JFQURZICAgMgorIH0gY2Ffc2xvdF9pbmZvX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iY2FfZGVzY3JfaW5mb190Ij4KKzx0aXRsZT5jYV9kZXNjcl9pbmZvX3Q8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBjYV9kZXNjcl9pbmZvX3MgeworCSB1bnNpZ25lZCBpbnQgbnVtOyAgLyYjeDIyQzY7IG51bWJlciBvZiBhdmFpbGFibGUgZGVzY3JhbWJsZXJzIChrZXlzKSAmI3gyMkM2Oy8KKwkgdW5zaWduZWQgaW50IHR5cGU7IC8mI3gyMkM2OyB0eXBlIG9mIHN1cHBvcnRlZCBzY3JhbWJsaW5nIHN5c3RlbSAmI3gyMkM2Oy8KKyAjZGVmaW5lIENBX0VDRCAgICAgICAgICAgMQorICNkZWZpbmUgQ0FfTkRTICAgICAgICAgICAyCisgI2RlZmluZSBDQV9EU1MgICAgICAgICAgIDQKKyB9IGNhX2Rlc2NyX2luZm9fdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJjYV9jYXBfdCI+Cis8dGl0bGU+Y2FfY2FwX3Q8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBjYV9jYXBfcyB7CisJIHVuc2lnbmVkIGludCBzbG90X251bTsgIC8mI3gyMkM2OyB0b3RhbCBudW1iZXIgb2YgQ0EgY2FyZCBhbmQgbW9kdWxlIHNsb3RzICYjeDIyQzY7LworCSB1bnNpZ25lZCBpbnQgc2xvdF90eXBlOyAvJiN4MjJDNjsgT1Igb2YgYWxsIHN1cHBvcnRlZCB0eXBlcyAmI3gyMkM2Oy8KKwkgdW5zaWduZWQgaW50IGRlc2NyX251bTsgLyYjeDIyQzY7IHRvdGFsIG51bWJlciBvZiBkZXNjcmFtYmxlciBzbG90cyAoa2V5cykgJiN4MjJDNjsvCisJIHVuc2lnbmVkIGludCBkZXNjcl90eXBlOy8mI3gyMkM2OyBPUiBvZiBhbGwgc3VwcG9ydGVkIHR5cGVzICYjeDIyQzY7LworIH0gY2FfY2FwX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iY2FfbXNnX3QiPgorPHRpdGxlPmNhX21zZ190PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgLyYjeDIyQzY7IGEgbWVzc2FnZSB0by9mcm9tIGEgQ0ktQ0FNICYjeDIyQzY7LworIHR5cGVkZWYgc3RydWN0IGNhX21zZ19zIHsKKwkgdW5zaWduZWQgaW50IGluZGV4OworCSB1bnNpZ25lZCBpbnQgdHlwZTsKKwkgdW5zaWduZWQgaW50IGxlbmd0aDsKKwkgdW5zaWduZWQgY2hhciBtc2dbMjU2XTsKKyB9IGNhX21zZ190OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImNhX2Rlc2NyX3QiPgorPHRpdGxlPmNhX2Rlc2NyX3Q8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIHN0cnVjdCBjYV9kZXNjcl9zIHsKKwkgdW5zaWduZWQgaW50IGluZGV4OworCSB1bnNpZ25lZCBpbnQgcGFyaXR5OworCSB1bnNpZ25lZCBjaGFyIGN3WzhdOworIH0gY2FfZGVzY3JfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJjYV9mdW5jdGlvbl9jYWxscyI+Cis8dGl0bGU+Q0EgRnVuY3Rpb24gQ2FsbHM8L3RpdGxlPgorCisKKzxzZWN0aW9uIGlkPSJjYV9mb3BlbiI+Cis8dGl0bGU+b3BlbigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgb3BlbnMgYSBuYW1lZCBjYSBkZXZpY2UgKGUuZy4gL2Rldi9vc3QvY2EpIGZvciBzdWJzZXF1ZW50IHVzZS48L3BhcmE+Cis8cGFyYT5XaGVuIGFuIG9wZW4oKSBjYWxsIGhhcyBzdWNjZWVkZWQsIHRoZSBkZXZpY2Ugd2lsbCBiZSByZWFkeSBmb3IgdXNlLgorIFRoZSBzaWduaWZpY2FuY2Ugb2YgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIG1vZGUgaXMgZGVzY3JpYmVkIGluIHRoZQorIGRvY3VtZW50YXRpb24gZm9yIGZ1bmN0aW9ucyB3aGVyZSB0aGVyZSBpcyBhIGRpZmZlcmVuY2UuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUKKyBzZW1hbnRpY3Mgb2YgdGhlIG9wZW4oKSBjYWxsIGl0c2VsZi4gQSBkZXZpY2Ugb3BlbmVkIGluIGJsb2NraW5nIG1vZGUgY2FuIGxhdGVyCisgYmUgcHV0IGludG8gbm9uLWJsb2NraW5nIG1vZGUgKGFuZCB2aWNlIHZlcnNhKSB1c2luZyB0aGUgRl9TRVRGTCBjb21tYW5kCisgb2YgdGhlIGZjbnRsIHN5c3RlbSBjYWxsLiBUaGlzIGlzIGEgc3RhbmRhcmQgc3lzdGVtIGNhbGwsIGRvY3VtZW50ZWQgaW4gdGhlIExpbnV4CisgbWFudWFsIHBhZ2UgZm9yIGZjbnRsLiBPbmx5IG9uZSB1c2VyIGNhbiBvcGVuIHRoZSBDQSBEZXZpY2UgaW4gT19SRFdSCisgbW9kZS4gQWxsIG90aGVyIGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRldmljZSBpbiB0aGlzIG1vZGUgd2lsbCBmYWlsLCBhbmQgYW4gZXJyb3IKKyBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuKGNvbnN0IGNoYXIgJiN4MjJDNjtkZXZpY2VOYW1lLCBpbnQgZmxhZ3MpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNvbnN0IGNoYXIKKyAqZGV2aWNlTmFtZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TmFtZSBvZiBzcGVjaWZpYyB2aWRlbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmbGFnczwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QSBiaXQtd2lzZSBPUiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fUkRPTkxZIHJlYWQtb25seSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JEV1IgcmVhZC93cml0ZSBhY2Nlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX05PTkJMT0NLIG9wZW4gaW4gbm9uLWJsb2NraW5nIG1vZGU8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4oYmxvY2tpbmcgbW9kZSBpcyB0aGUgZGVmYXVsdCk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RGV2aWNlIGRyaXZlciBub3QgbG9hZGVkL2F2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBvciByZXNvdXJjZSBidXN5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImNhX2ZjbG9zZSI+Cis8dGl0bGU+Y2xvc2UoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGNsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIGF1ZGlvIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGludCBmZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZGVtdXgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kZW11eC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4YzRlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZGVtdXgueG1sCkBAIC0wLDAgKzEsOTczIEBACis8dGl0bGU+RFZCIERlbXV4IERldmljZTwvdGl0bGU+CisKKzxwYXJhPlRoZSBEVkIgZGVtdXggZGV2aWNlIGNvbnRyb2xzIHRoZSBmaWx0ZXJzIG9mIHRoZSBEVkIgaGFyZHdhcmUvc29mdHdhcmUuIEl0IGNhbiBiZQorYWNjZXNzZWQgdGhyb3VnaCA8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvYWRhcHRlcjAvZGVtdXgwPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZCBpb2N0bCBkZWZpbml0aW9ucyBjYW4gYmUKK2FjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi9kbXguaDwvZW1waGFzaXM+IGluIHlvdXIgYXBwbGljYXRpb24uCis8L3BhcmE+Cis8c2VjdGlvbiBpZD0iZG14X3R5cGVzIj4KKzx0aXRsZT5EZW11eCBEYXRhIFR5cGVzPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9ImRteF9vdXRwdXRfdCI+Cis8dGl0bGU+ZG14X291dHB1dF90PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtCisgeworCSBETVhfT1VUX0RFQ09ERVIsCisJIERNWF9PVVRfVEFQLAorCSBETVhfT1VUX1RTX1RBUAorIH0gZG14X291dHB1dF90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPjxlbXBoYXNpcyByb2xlPSJ0dCI+RE1YX09VVF9UQVA8L2VtcGhhc2lzPiBkZWxpdmVycyB0aGUgc3RyZWFtIG91dHB1dCB0byB0aGUgZGVtdXggZGV2aWNlIG9uIHdoaWNoIHRoZSBpb2N0bCBpcworY2FsbGVkLgorPC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij5ETVhfT1VUX1RTX1RBUDwvZW1waGFzaXM+IHJvdXRlcyBvdXRwdXQgdG8gdGhlIGxvZ2ljYWwgRFZSIGRldmljZSA8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvZHZiL2FkYXB0ZXIwL2R2cjA8L2VtcGhhc2lzPiwKK3doaWNoIGRlbGl2ZXJzIGEgVFMgbXVsdGlwbGV4ZWQgZnJvbSBhbGwgZmlsdGVycyBmb3Igd2hpY2ggPGVtcGhhc2lzIHJvbGU9InR0Ij5ETVhfT1VUX1RTX1RBUDwvZW1waGFzaXM+IHdhcworc3BlY2lmaWVkLgorPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X2lucHV0X3QiPgorPHRpdGxlPmRteF9pbnB1dF90PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtCisgeworCSBETVhfSU5fRlJPTlRFTkQsCisJIERNWF9JTl9EVlIKKyB9IGRteF9pbnB1dF90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9wZXNfdHlwZV90Ij4KKzx0aXRsZT5kbXhfcGVzX3R5cGVfdDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bQorIHsKKwkgRE1YX1BFU19BVURJTywKKwkgRE1YX1BFU19WSURFTywKKwkgRE1YX1BFU19URUxFVEVYVCwKKwkgRE1YX1BFU19TVUJUSVRMRSwKKwkgRE1YX1BFU19QQ1IsCisJIERNWF9QRVNfT1RIRVIKKyB9IGRteF9wZXNfdHlwZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9ldmVudF90Ij4KKzx0aXRsZT5kbXhfZXZlbnRfdDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bQorIHsKKwkgRE1YX1NDUkFNQkxJTkdfRVYsCisJIERNWF9GUk9OVEVORF9FVgorIH0gZG14X2V2ZW50X3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X3NjcmFtYmxpbmdfc3RhdHVzX3QiPgorPHRpdGxlPmRteF9zY3JhbWJsaW5nX3N0YXR1c190PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtCisgeworCSBETVhfU0NSQU1CTElOR19PRkYsCisJIERNWF9TQ1JBTUJMSU5HX09OCisgfSBkbXhfc2NyYW1ibGluZ19zdGF0dXNfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfZmlsdGVyIj4KKzx0aXRsZT5zdHJ1Y3QgZG14X2ZpbHRlcjwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IGRteF9maWx0ZXIKKyB7CisJIHVpbnQ4X3QgICAgICAgICBmaWx0ZXJbRE1YX0ZJTFRFUl9TSVpFXTsKKwkgdWludDhfdCAgICAgICAgIG1hc2tbRE1YX0ZJTFRFUl9TSVpFXTsKKyB9IGRteF9maWx0ZXJfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc2N0X2ZpbHRlcl9wYXJhbXMiPgorPHRpdGxlPnN0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXM8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zCisgeworCSB1aW50MTZfdCAgICAgICAgICAgIHBpZDsKKwkgZG14X2ZpbHRlcl90ICAgICAgICBmaWx0ZXI7CisJIHVpbnQzMl90ICAgICAgICAgICAgdGltZW91dDsKKwkgdWludDMyX3QgICAgICAgICAgICBmbGFnczsKKyAjZGVmaW5lIERNWF9DSEVDS19DUkMgICAgICAgMQorICNkZWZpbmUgRE1YX09ORVNIT1QgICAgICAgICAyCisgI2RlZmluZSBETVhfSU1NRURJQVRFX1NUQVJUIDQKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9wZXNfZmlsdGVyX3BhcmFtcyI+Cis8dGl0bGU+c3RydWN0IGRteF9wZXNfZmlsdGVyX3BhcmFtczwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMKKyB7CisJIHVpbnQxNl90ICAgICAgICAgICAgcGlkOworCSBkbXhfaW5wdXRfdCAgICAgICAgIGlucHV0OworCSBkbXhfb3V0cHV0X3QgICAgICAgIG91dHB1dDsKKwkgZG14X3Blc190eXBlX3QgICAgICBwZXNfdHlwZTsKKwkgdWludDMyX3QgICAgICAgICAgICBmbGFnczsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9ldmVudCI+Cis8dGl0bGU+c3RydWN0IGRteF9ldmVudDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkbXhfZXZlbnQKKyB7CisJIGRteF9ldmVudF90ICAgICAgICAgIGV2ZW50OworCSB0aW1lX3QgICAgICAgICAgICAgICB0aW1lU3RhbXA7CisJIHVuaW9uCisJIHsKKwkJIGRteF9zY3JhbWJsaW5nX3N0YXR1c190IHNjcmFtYmxpbmc7CisJIH0gdTsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9zdGMiPgorPHRpdGxlPnN0cnVjdCBkbXhfc3RjPC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGRteF9zdGMgeworCSB1bnNpZ25lZCBpbnQgbnVtOyAgICAgICAvJiN4MjJDNjsgaW5wdXQgOiB3aGljaCBTVEM/IDAuLk4gJiN4MjJDNjsvCisJIHVuc2lnbmVkIGludCBiYXNlOyAgICAgIC8mI3gyMkM2OyBvdXRwdXQ6IGRpdmlzb3IgZm9yIHN0YyB0byBnZXQgOTAga0h6IGNsb2NrICYjeDIyQzY7LworCSB1aW50NjRfdCBzdGM7ICAgICAgICAgICAvJiN4MjJDNjsgb3V0cHV0OiBzdGMgaW4gJ2Jhc2UnJiN4MjJDNjs5MCBrSHogdW5pdHMgJiN4MjJDNjsvCisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPC9zZWN0aW9uPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfZmNhbGxzIj4KKzx0aXRsZT5EZW11eCBGdW5jdGlvbiBDYWxsczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSJkbXhfZm9wZW4iPgorPHRpdGxlPm9wZW4oKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsLCB1c2VkIHdpdGggYSBkZXZpY2UgbmFtZSBvZiAvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDAsCisgYWxsb2NhdGVzIGEgbmV3IGZpbHRlciBhbmQgcmV0dXJucyBhIGhhbmRsZSB3aGljaCBjYW4gYmUgdXNlZCBmb3Igc3Vic2VxdWVudAorIGNvbnRyb2wgb2YgdGhhdCBmaWx0ZXIuIFRoaXMgY2FsbCBoYXMgdG8gYmUgbWFkZSBmb3IgZWFjaCBmaWx0ZXIgdG8gYmUgdXNlZCwgaS5lLiBldmVyeQorIHJldHVybmVkIGZpbGUgZGVzY3JpcHRvciBpcyBhIHJlZmVyZW5jZSB0byBhIHNpbmdsZSBmaWx0ZXIuIC9kZXYvZHZiL2FkYXB0ZXIwL2R2cjAKKyBpcyBhIGxvZ2ljYWwgZGV2aWNlIHRvIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgVHJhbnNwb3J0IFN0cmVhbXMgZm9yIGRpZ2l0YWwKKyB2aWRlbyByZWNvcmRpbmcuIFdoZW4gcmVhZGluZyBmcm9tIHRoaXMgZGV2aWNlIGEgdHJhbnNwb3J0IHN0cmVhbSBjb250YWluaW5nCisgdGhlIHBhY2tldHMgZnJvbSBhbGwgUEVTIGZpbHRlcnMgc2V0IGluIHRoZSBjb3JyZXNwb25kaW5nIGRlbXV4IGRldmljZQorICgvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDApIGhhdmluZyB0aGUgb3V0cHV0IHNldCB0byBETVhfT1VUX1RTX1RBUC4gQQorIHJlY29yZGVkIFRyYW5zcG9ydCBTdHJlYW0gaXMgcmVwbGF5ZWQgYnkgd3JpdGluZyB0byB0aGlzIGRldmljZS4gPC9wYXJhPgorPHBhcmE+VGhlIHNpZ25pZmljYW5jZSBvZiBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBpcyBkZXNjcmliZWQgaW4gdGhlCisgZG9jdW1lbnRhdGlvbiBmb3IgZnVuY3Rpb25zIHdoZXJlIHRoZXJlIGlzIGEgZGlmZmVyZW5jZS4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZQorIHNlbWFudGljcyBvZiB0aGUgb3BlbigpIGNhbGwgaXRzZWxmLiBBIGRldmljZSBvcGVuZWQgaW4gYmxvY2tpbmcgbW9kZSBjYW4gbGF0ZXIKKyBiZSBwdXQgaW50byBub24tYmxvY2tpbmcgbW9kZSAoYW5kIHZpY2UgdmVyc2EpIHVzaW5nIHRoZSBGX1NFVEZMIGNvbW1hbmQKKyBvZiB0aGUgZmNudGwgc3lzdGVtIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuKGNvbnN0IGNoYXIgJiN4MjJDNjtkZXZpY2VOYW1lLCBpbnQgZmxhZ3MpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNvbnN0IGNoYXIKKyAqZGV2aWNlTmFtZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TmFtZSBvZiBkZW11eCBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmbGFnczwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QSBiaXQtd2lzZSBPUiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fUkRXUiByZWFkL3dyaXRlIGFjY2VzczwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk9fTk9OQkxPQ0sgb3BlbiBpbiBub24tYmxvY2tpbmcgbW9kZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPihibG9ja2luZyBtb2RlIGlzIHRoZSBkZWZhdWx0KTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PREVWPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2UgZHJpdmVyIG5vdCBsb2FkZWQvYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVNRklMRTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+JiM4MjIwO1RvbyBtYW55IG9wZW4gZmlsZXMmIzgyMjE7LCBpLmUuIG5vIG1vcmUgZmlsdGVycyBhdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRyaXZlciBmYWlsZWQgdG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X2ZjbG9zZSI+Cis8dGl0bGU+Y2xvc2UoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGRlYWN0aXZhdGVzIGFuZCBkZWFsbG9jYXRlcyBhIGZpbHRlciB0aGF0IHdhcyBwcmV2aW91c2x5CisgYWxsb2NhdGVkIHZpYSB0aGUgb3BlbigpIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBjbG9zZShpbnQgZmQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9mcmVhZCI+Cis8dGl0bGU+cmVhZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgcmV0dXJucyBmaWx0ZXJlZCBkYXRhLCB3aGljaCBtaWdodCBiZSBzZWN0aW9uIG9yIFBFUyBkYXRhLiBUaGUKKyBmaWx0ZXJlZCBkYXRhIGlzIHRyYW5zZmVycmVkIGZyb20gdGhlIGRyaXZlciYjODIxNztzIGludGVybmFsIGNpcmN1bGFyIGJ1ZmZlciB0byBidWYuIFRoZQorIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaXMgaW1wbGllZCBieSBjb3VudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+V2hlbiByZXR1cm5pbmcgc2VjdGlvbiBkYXRhIHRoZSBkcml2ZXIgYWx3YXlzIHRyaWVzIHRvIHJldHVybiBhIGNvbXBsZXRlIHNpbmdsZQorIHNlY3Rpb24gKGV2ZW4gdGhvdWdoIGJ1ZiB3b3VsZCBwcm92aWRlIGJ1ZmZlciBzcGFjZSBmb3IgbW9yZSBkYXRhKS4gSWYgdGhlIHNpemUKKyBvZiB0aGUgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2VjdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgcmV0dXJuZWQsCisgYW5kIHRoZSByZW1haW5pbmcgZGF0YSB3aWxsIGJlIHByb3ZpZGVkIGluIHN1YnNlcXVlbnQgY2FsbHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgMiAqIDQwOTYgYnl0ZXMgKHRoZSBzaXplIG9mIHR3byBtYXhpbXVtCisgc2l6ZWQgc2VjdGlvbnMpIGJ5IGRlZmF1bHQuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIG1heSBiZSBjaGFuZ2VkIGJ5IHVzaW5nIHRoZQorIERNWF9TRVRfQlVGRkVSX1NJWkUgZnVuY3Rpb24uIElmIHRoZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCwgb3IgaWYKKyB0aGUgcmVhZCBvcGVyYXRpb25zIGFyZSBub3QgcGVyZm9ybWVkIGZhc3QgZW5vdWdoLCB0aGlzIG1heSByZXN1bHQgaW4gYSBidWZmZXIKKyBvdmVyZmxvdyBlcnJvci4gSW4gdGhpcyBjYXNlIEVPVkVSRkxPVyB3aWxsIGJlIHJldHVybmVkLCBhbmQgdGhlIGNpcmN1bGFyCisgYnVmZmVyIHdpbGwgYmUgZW1wdGllZC4gVGhpcyBjYWxsIGlzIGJsb2NraW5nIGlmIHRoZXJlIGlzIG5vIGRhdGEgdG8gcmV0dXJuLCBpLmUuIHRoZQorIHByb2Nlc3Mgd2lsbCBiZSBwdXQgdG8gc2xlZXAgd2FpdGluZyBmb3IgZGF0YSwgdW5sZXNzIHRoZSBPX05PTkJMT0NLIGZsYWcKKyBpcyBzcGVjaWZpZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vdGUgdGhhdCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlYWQsIHRoZSBmaWx0ZXJpbmcgcHJvY2VzcyBoYXMgdG8gYmUgc3RhcnRlZAorIGJ5IGRlZmluaW5nIGVpdGhlciBhIHNlY3Rpb24gb3IgYSBQRVMgZmlsdGVyIGJ5IG1lYW5zIG9mIHRoZSBpb2N0bCBmdW5jdGlvbnMsCisgYW5kIHRoZW4gc3RhcnRpbmcgdGhlIGZpbHRlcmluZyBwcm9jZXNzIHZpYSB0aGUgRE1YX1NUQVJUIGlvY3RsIGZ1bmN0aW9uCisgb3IgYnkgc2V0dGluZyB0aGUgRE1YX0lNTUVESUFURV9TVEFSVCBmbGFnLiBJZiB0aGUgcmVhZGluZyBpcyBkb25lCisgZnJvbSBhIGxvZ2ljYWwgRFZSIGRlbXV4IGRldmljZSwgdGhlIGRhdGEgd2lsbCBjb25zdGl0dXRlIGEgVHJhbnNwb3J0IFN0cmVhbQorIGluY2x1ZGluZyB0aGUgcGFja2V0cyBmcm9tIGFsbCBQRVMgZmlsdGVycyBpbiB0aGUgY29ycmVzcG9uZGluZyBkZW11eCBkZXZpY2UKKyAvZGV2L2R2Yi9hZGFwdGVyMC9kZW11eDAgaGF2aW5nIHRoZSBvdXRwdXQgc2V0IHRvIERNWF9PVVRfVFNfVEFQLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QgcmVhZChpbnQgZmQsIHZvaWQgJiN4MjJDNjtidWYsIHNpemVfdCBjb3VudCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dm9pZCAqYnVmPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gYmUgdXNlZCBmb3IgcmV0dXJuZWQgZmlsdGVyZWQgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGNvdW50PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TaXplIG9mIGJ1Zi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVXT1VMREJMT0NLPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ObyBkYXRhIHRvIHJldHVybiBhbmQgT19OT05CTE9DSyB3YXMgc3BlY2lmaWVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVDUkM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkxhc3Qgc2VjdGlvbiBoYWQgYSBDUkMgZXJyb3IgLSBubyBkYXRhIHJldHVybmVkLiBUaGUKKyBidWZmZXIgaXMgZmx1c2hlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU9WRVJGTE9XPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZmlsdGVyZWQgZGF0YSB3YXMgbm90IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGluIGR1ZQorIHRpbWUsIHJlc3VsdGluZyBpbiBub24tcmVhZCBkYXRhIGJlaW5nIGxvc3QuIFRoZSBidWZmZXIgaXMKKyBmbHVzaGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FVElNRURPVVQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzZWN0aW9uIHdhcyBub3QgbG9hZGVkIHdpdGhpbiB0aGUgc3RhdGVkIHRpbWVvdXQKKyBwZXJpb2QuIFNlZSBpb2N0bCBETVhfU0VUX0ZJTFRFUiBmb3IgaG93IHRvIHNldCBhCisgdGltZW91dC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZHJpdmVyIGZhaWxlZCB0byB3cml0ZSB0byB0aGUgY2FsbGVycyBidWZmZXIgZHVlIHRvIGFuCisgaW52YWxpZCAqYnVmIHBvaW50ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9md3JpdGUiPgorPHRpdGxlPndyaXRlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBzeXN0ZW0gY2FsbCBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBsb2dpY2FsIGRldmljZSAvZGV2L2R2Yi9hZGFwdGVyMC9kdnIwLAorIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGh5c2ljYWwgZGVtdXggZGV2aWNlIHRoYXQgcHJvdmlkZXMgdGhlIGFjdHVhbCBEVlIKKyBmdW5jdGlvbmFsaXR5LiBJdCBpcyB1c2VkIGZvciByZXBsYXkgb2YgYSBkaWdpdGFsbHkgcmVjb3JkZWQgVHJhbnNwb3J0IFN0cmVhbS4KKyBNYXRjaGluZyBmaWx0ZXJzIGhhdmUgdG8gYmUgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZyBwaHlzaWNhbCBkZW11eAorIGRldmljZSwgL2Rldi9kdmIvYWRhcHRlcjAvZGVtdXgwLiBUaGUgYW1vdW50IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaXMKKyBpbXBsaWVkIGJ5IGNvdW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zc2l6ZV90IHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAmI3gyMkM2O2J1Ziwgc2l6ZV90CisgY291bnQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZvaWQgKmJ1ZjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRyYW5zcG9ydCBTdHJlYW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBjb3VudDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U2l6ZSBvZiBidWYuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGF0YSB3YXMgd3JpdHRlbi4gVGhpcworIG1pZ2h0IGhhcHBlbiBpZiBPX05PTkJMT0NLIHdhcyBzcGVjaWZpZWQgYW5kIHRoZXJlCisgaXMgbm8gbW9yZSBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIChpZiBPX05PTkJMT0NLIGlzCisgbm90IHNwZWNpZmllZCB0aGUgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBidWZmZXIgc3BhY2UgaXMKKyBhdmFpbGFibGUpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBlcnJvciBjb2RlIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBjb25mbGljdGluZworIHJlcXVlc3RzLiBUaGUgY29ycmVzcG9uZGluZyBkZW11eCBkZXZpY2UgaXMgc2V0dXAgdG8KKyByZWNlaXZlIGRhdGEgZnJvbSB0aGUgZnJvbnQtIGVuZC4gTWFrZSBzdXJlIHRoYXQgdGhlc2UKKyBmaWx0ZXJzIGFyZSBzdG9wcGVkIGFuZCB0aGF0IHRoZSBmaWx0ZXJzIHdpdGggaW5wdXQgc2V0IHRvCisgRE1YX0lOX0RWUiBhcmUgc3RhcnRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc3RhcnQiPgorPHRpdGxlPkRNWF9TVEFSVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgaXMgdXNlZCB0byBzdGFydCB0aGUgYWN0dWFsIGZpbHRlcmluZyBvcGVyYXRpb24gZGVmaW5lZCB2aWEgdGhlIGlvY3RsCisgY2FsbHMgRE1YX1NFVF9GSUxURVIgb3IgRE1YX1NFVF9QRVNfRklMVEVSLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoIGludCBmZCwgaW50IHJlcXVlc3QgPSBETVhfU1RBUlQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRE1YX1NUQVJUIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludmFsaWQgYXJndW1lbnQsIGkuZS4gbm8gZmlsdGVyaW5nIHBhcmFtZXRlcnMgcHJvdmlkZWQgdmlhCisgdGhlIERNWF9TRVRfRklMVEVSIG9yIERNWF9TRVRfUEVTX0ZJTFRFUgorIGZ1bmN0aW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgY29uZmxpY3RpbmcKKyByZXF1ZXN0cy4gVGhlcmUgYXJlIGFjdGl2ZSBmaWx0ZXJzIGZpbHRlcmluZyBkYXRhIGZyb20KKyBhbm90aGVyIGlucHV0IHNvdXJjZS4gTWFrZSBzdXJlIHRoYXQgdGhlc2UgZmlsdGVycyBhcmUKKyBzdG9wcGVkIGJlZm9yZSBzdGFydGluZyB0aGlzIGZpbHRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X3N0b3AiPgorPHRpdGxlPkRNWF9TVE9QPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBpcyB1c2VkIHRvIHN0b3AgdGhlIGFjdHVhbCBmaWx0ZXJpbmcgb3BlcmF0aW9uIGRlZmluZWQgdmlhIHRoZQorIGlvY3RsIGNhbGxzIERNWF9TRVRfRklMVEVSIG9yIERNWF9TRVRfUEVTX0ZJTFRFUiBhbmQgc3RhcnRlZCB2aWEKKyB0aGUgRE1YX1NUQVJUIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9IERNWF9TVE9QKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIERNWF9TVE9QIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc2V0X2ZpbHRlciI+Cis8dGl0bGU+RE1YX1NFVF9GSUxURVI8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHNldHMgdXAgYSBmaWx0ZXIgYWNjb3JkaW5nIHRvIHRoZSBmaWx0ZXIgYW5kIG1hc2sgcGFyYW1ldGVycworIHByb3ZpZGVkLiBBIHRpbWVvdXQgbWF5IGJlIGRlZmluZWQgc3RhdGluZyBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBhCisgc2VjdGlvbiB0byBiZSBsb2FkZWQuIEEgdmFsdWUgb2YgMCBtZWFucyB0aGF0IG5vIHRpbWVvdXQgc2hvdWxkIGJlIGFwcGxpZWQuCisgRmluYWxseSB0aGVyZSBpcyBhIGZsYWcgZmllbGQgd2hlcmUgaXQgaXMgcG9zc2libGUgdG8gc3RhdGUgd2hldGhlciBhIHNlY3Rpb24gc2hvdWxkCisgYmUgQ1JDLWNoZWNrZWQsIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91bGQgYmUgYSAmIzgyMjE7b25lLXNob3QmIzgyMjE7IGZpbHRlciwgaS5lLiBpZiB0aGUKKyBmaWx0ZXJpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBzdG9wcGVkIGFmdGVyIHRoZSBmaXJzdCBzZWN0aW9uIGlzIHJlY2VpdmVkLCBhbmQKKyB3aGV0aGVyIHRoZSBmaWx0ZXJpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBzdGFydGVkIGltbWVkaWF0ZWx5ICh3aXRob3V0IHdhaXRpbmcKKyBmb3IgYSBETVhfU1RBUlQgaW9jdGwgY2FsbCkuIElmIGEgZmlsdGVyIHdhcyBwcmV2aW91c2x5IHNldC11cCwgdGhpcyBmaWx0ZXIgd2lsbAorIGJlIGNhbmNlbGVkLCBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHdpbGwgYmUgZmx1c2hlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKCBpbnQgZmQsIGludCByZXF1ZXN0ID0gRE1YX1NFVF9GSUxURVIsCisgc3RydWN0IGRteF9zY3RfZmlsdGVyX3BhcmFtcyAmI3gyMkM2O3BhcmFtcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBETVhfU0VUX0ZJTFRFUiBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMKKyAqcGFyYW1zPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIGZpbHRlciBwYXJhbWV0ZXJzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXhfc2V0X3Blc19maWx0ZXIiPgorPHRpdGxlPkRNWF9TRVRfUEVTX0ZJTFRFUjwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgc2V0cyB1cCBhIFBFUyBmaWx0ZXIgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkLiBCeSBhCisgUEVTIGZpbHRlciBpcyBtZWFudCBhIGZpbHRlciB0aGF0IGlzIGJhc2VkIGp1c3Qgb24gdGhlIHBhY2tldCBpZGVudGlmaWVyIChQSUQpLCBpLmUuCisgbm8gUEVTIGhlYWRlciBvciBwYXlsb2FkIGZpbHRlcmluZyBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHRyYW5zcG9ydCBzdHJlYW0gZGVzdGluYXRpb24gZm9yIHRoZSBmaWx0ZXJlZCBvdXRwdXQgbWF5IGJlIHNldC4gQWxzbyB0aGUKKyBQRVMgdHlwZSBtYXkgYmUgc3RhdGVkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZS5nLiBkaXJlY3QgYSB2aWRlbyBzdHJlYW0gZGlyZWN0bHkKKyB0byB0aGUgdmlkZW8gZGVjb2Rlci4gRmluYWxseSB0aGVyZSBpcyBhIGZsYWcgZmllbGQgd2hlcmUgaXQgaXMgcG9zc2libGUgdG8gc3RhdGUKKyB3aGV0aGVyIHRoZSBmaWx0ZXJpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSBzdGFydGVkIGltbWVkaWF0ZWx5ICh3aXRob3V0IHdhaXRpbmcKKyBmb3IgYSBETVhfU1RBUlQgaW9jdGwgY2FsbCkuIElmIGEgZmlsdGVyIHdhcyBwcmV2aW91c2x5IHNldC11cCwgdGhpcyBmaWx0ZXIgd2lsbAorIGJlIGNhbmNlbGxlZCwgYW5kIHRoZSByZWNlaXZlIGJ1ZmZlciB3aWxsIGJlIGZsdXNoZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9IERNWF9TRVRfUEVTX0ZJTFRFUiwKKyBzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zICYjeDIyQzY7cGFyYW1zKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIERNWF9TRVRfUEVTX0ZJTFRFUiBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMKKyAqcGFyYW1zPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIGZpbHRlciBwYXJhbWV0ZXJzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBlcnJvciBjb2RlIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBjb25mbGljdGluZworIHJlcXVlc3RzLiBUaGVyZSBhcmUgYWN0aXZlIGZpbHRlcnMgZmlsdGVyaW5nIGRhdGEgZnJvbQorIGFub3RoZXIgaW5wdXQgc291cmNlLiBNYWtlIHN1cmUgdGhhdCB0aGVzZSBmaWx0ZXJzIGFyZQorIHN0b3BwZWQgYmVmb3JlIHN0YXJ0aW5nIHRoaXMgZmlsdGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXNfc2V0X2J1ZmZlcl9zaXplIj4KKzx0aXRsZT5ETVhfU0VUX0JVRkZFUl9TSVpFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBpcyB1c2VkIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIHVzZWQgZm9yIGZpbHRlcmVkIGRhdGEuCisgVGhlIGRlZmF1bHQgc2l6ZSBpcyB0d28gbWF4aW11bSBzaXplZCBzZWN0aW9ucywgaS5lLiBpZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQKKyBhIGJ1ZmZlciBzaXplIG9mIDIgKiA0MDk2IGJ5dGVzIHdpbGwgYmUgdXNlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKCBpbnQgZmQsIGludCByZXF1ZXN0ID0KKyBETVhfU0VUX0JVRkZFUl9TSVpFLCB1bnNpZ25lZCBsb25nIHNpemUpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRE1YX1NFVF9CVUZGRVJfU0laRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT51bnNpZ25lZCBsb25nIHNpemU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNpemUgb2YgY2lyY3VsYXIgYnVmZmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PTUVNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZHJpdmVyIHdhcyBub3QgYWJsZSB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiB0aGUKKyByZXF1ZXN0ZWQgc2l6ZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZG14X2dldF9ldmVudCI+Cis8dGl0bGU+RE1YX0dFVF9FVkVOVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyBhbiBldmVudCBpZiBhdmFpbGFibGUuIElmIGFuIGV2ZW50IGlzIG5vdCBhdmFpbGFibGUsCisgdGhlIGJlaGF2aW9yIGRlcGVuZHMgb24gd2hldGhlciB0aGUgZGV2aWNlIGlzIGluIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZworIG1vZGUuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGNhbGwgZmFpbHMgaW1tZWRpYXRlbHkgd2l0aCBlcnJubyBzZXQgdG8KKyBFV09VTERCTE9DSy4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgY2FsbCBibG9ja3MgdW50aWwgYW4gZXZlbnQgYmVjb21lcworIGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHN0YW5kYXJkIExpbnV4IHBvbGwoKSBhbmQvb3Igc2VsZWN0KCkgc3lzdGVtIGNhbGxzIGNhbiBiZSB1c2VkIHdpdGggdGhlCisgZGV2aWNlIGZpbGUgZGVzY3JpcHRvciB0byB3YXRjaCBmb3IgbmV3IGV2ZW50cy4gRm9yIHNlbGVjdCgpLCB0aGUgZmlsZSBkZXNjcmlwdG9yCisgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBleGNlcHRmZHMgYXJndW1lbnQsIGFuZCBmb3IgcG9sbCgpLCBQT0xMUFJJIHNob3VsZAorIGJlIHNwZWNpZmllZCBhcyB0aGUgd2FrZS11cCBjb25kaXRpb24uIE9ubHkgdGhlIGxhdGVzdCBldmVudCBmb3IgZWFjaCBmaWx0ZXIgaXMKKyBzYXZlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKCBpbnQgZmQsIGludCByZXF1ZXN0ID0gRE1YX0dFVF9FVkVOVCwKKyBzdHJ1Y3QgZG14X2V2ZW50ICYjeDIyQzY7ZXYpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRE1YX0dFVF9FVkVOVCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgZG14X2V2ZW50ICpldjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGV2ZW50IGlzIHRvIGJlIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZXYgcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVdPVUxEQkxPQ0s8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZXJlIGlzIG5vIGV2ZW50IHBlbmRpbmcsIGFuZCB0aGUgZGV2aWNlIGlzIGluCisgbm9uLWJsb2NraW5nIG1vZGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRteF9nZXRfc3RjIj4KKzx0aXRsZT5ETVhfR0VUX1NUQzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3lzdGVtIHRpbWUgY291bnRlciAod2hpY2ggaXMgZHJpdmVuCisgYnkgYSBQRVMgZmlsdGVyIG9mIHR5cGUgRE1YX1BFU19QQ1IpLiBTb21lIGhhcmR3YXJlIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUKKyBTVEMsIHNvIHlvdSBtdXN0IHNwZWNpZnkgd2hpY2ggb25lIGJ5IHNldHRpbmcgdGhlIG51bSBmaWVsZCBvZiBzdGMgYmVmb3JlIHRoZSBpb2N0bAorIChyYW5nZSAwLi4ubikuIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gZm9ybSBvZiBhIHJhdGlvIHdpdGggYSA2NCBiaXQgbnVtZXJhdG9yCisgYW5kIGEgMzIgYml0IGRlbm9taW5hdG9yLCBzbyB0aGUgcmVhbCA5MGtIeiBTVEMgdmFsdWUgaXMgc3RjLSYjeDAwM0U7c3RjIC8KKyBzdGMtJiN4MDAzRTtiYXNlCisgLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoIGludCBmZCwgaW50IHJlcXVlc3QgPSBETVhfR0VUX1NUQywgc3RydWN0CisgZG14X3N0YyAmI3gyMkM2O3N0Yyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBETVhfR0VUX1NUQyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgZG14X3N0YyAqc3RjPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgc3RjIGlzIHRvIGJlIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RjIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW52YWxpZCBzdGMgbnVtYmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZiYXBpLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZiYXBpLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmM1YjIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJhcGkueG1sCkBAIC0wLDAgKzEsODcgQEAKKzxwYXJ0aW5mbz4KKzxhdXRob3Jncm91cD4KKzxhdXRob3I+Cis8Zmlyc3RuYW1lPlJhbHBoPC9maXJzdG5hbWU+Cis8c3VybmFtZT5NZXR6bGVyPC9zdXJuYW1lPgorPG90aGVybmFtZSByb2xlPSJtaSI+Si4gSy48L290aGVybmFtZT4KKzxhZmZpbGlhdGlvbj48YWRkcmVzcz48ZW1haWw+cmprbUBtZXR6bGVyYnJvcy5kZTwvZW1haWw+PC9hZGRyZXNzPjwvYWZmaWxpYXRpb24+Cis8L2F1dGhvcj4KKzxhdXRob3I+Cis8Zmlyc3RuYW1lPk1hcmN1czwvZmlyc3RuYW1lPgorPHN1cm5hbWU+TWV0emxlcjwvc3VybmFtZT4KKzxvdGhlcm5hbWUgcm9sZT0ibWkiPk8uIEMuPC9vdGhlcm5hbWU+Cis8YWZmaWxpYXRpb24+PGFkZHJlc3M+PGVtYWlsPnJqa21AbWV0emxlcmJyb3MuZGU8L2VtYWlsPjwvYWRkcmVzcz48L2FmZmlsaWF0aW9uPgorPC9hdXRob3I+Cis8YXV0aG9yPgorPGZpcnN0bmFtZT5NYXVybzwvZmlyc3RuYW1lPgorPHN1cm5hbWU+Q2hlaGFiPC9zdXJuYW1lPgorPG90aGVybmFtZSByb2xlPSJtaSI+Q2FydmFsaG88L290aGVybmFtZT4KKzxhZmZpbGlhdGlvbj48YWRkcmVzcz48ZW1haWw+bWNoZWhhYkByZWRoYXQuY29tPC9lbWFpbD48L2FkZHJlc3M+PC9hZmZpbGlhdGlvbj4KKzxjb250cmliPlBvcnRlZCBkb2N1bWVudCB0byBEb2Nib29rIFhNTC48L2NvbnRyaWI+Cis8L2F1dGhvcj4KKzwvYXV0aG9yZ3JvdXA+Cis8Y29weXJpZ2h0PgorCTx5ZWFyPjIwMDI8L3llYXI+CisJPHllYXI+MjAwMzwveWVhcj4KKwk8eWVhcj4yMDA5PC95ZWFyPgorCTxob2xkZXI+Q29udmVyZ2VuY2UgR21iSDwvaG9sZGVyPgorPC9jb3B5cmlnaHQ+CisKKzxyZXZoaXN0b3J5PgorPCEtLSBQdXQgZG9jdW1lbnQgcmV2aXNpb25zIGhlcmUsIG5ld2VzdCBmaXJzdC4gLS0+Cis8cmV2aXNpb24+Cis8cmV2bnVtYmVyPjIuMC4xPC9yZXZudW1iZXI+Cis8ZGF0ZT4yMDA5LTA5LTE2PC9kYXRlPgorPGF1dGhvcmluaXRpYWxzPm1jYzwvYXV0aG9yaW5pdGlhbHM+Cis8cmV2cmVtYXJrPgorQWRkZWQgSVNEQi1UIHRlc3Qgb3JpZ2luYWxseSB3cml0dGVuIGJ5IFBhdHJpY2sgQm9ldHRjaGVyCis8L3JldnJlbWFyaz4KKzwvcmV2aXNpb24+Cis8cmV2aXNpb24+Cis8cmV2bnVtYmVyPjIuMC4wPC9yZXZudW1iZXI+Cis8ZGF0ZT4yMDA5LTA5LTA2PC9kYXRlPgorPGF1dGhvcmluaXRpYWxzPm1jYzwvYXV0aG9yaW5pdGlhbHM+Cis8cmV2cmVtYXJrPkNvbnZlcnNpb24gZnJvbSBMYVRleCB0byBEb2NCb29rIFhNTC4gVGhlCisJY29udGVudHMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIExhVGV4IHZlcnNpb24uPC9yZXZyZW1hcms+Cis8L3JldmlzaW9uPgorPHJldmlzaW9uPgorPHJldm51bWJlcj4xLjAuMDwvcmV2bnVtYmVyPgorPGRhdGU+MjAwMy0wNy0yNDwvZGF0ZT4KKzxhdXRob3Jpbml0aWFscz5yamttPC9hdXRob3Jpbml0aWFscz4KKzxyZXZyZW1hcms+SW5pdGlhbCByZXZpc2lvbiBvbiBMYVRFWC48L3JldnJlbWFyaz4KKzwvcmV2aXNpb24+Cis8L3Jldmhpc3Rvcnk+Cis8L3BhcnRpbmZvPgorCisKKzx0aXRsZT5MSU5VWCBEVkIgQVBJPC90aXRsZT4KKzxzdWJ0aXRsZT5WZXJzaW9uIDM8L3N1YnRpdGxlPgorPCEtLSBBREQgVEhFIENIQVBURVJTIEhFUkUgLS0+CisgIDxjaGFwdGVyIGlkPSJkdmJfaW50cm9kdXRpb24iPgorICAgICZzdWItaW50cm87CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9ImR2Yl9mcm9udGVuZCI+CisgICAgJnN1Yi1mcm9udGVuZDsKKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iZHZiX2RlbXV4Ij4KKyAgICAmc3ViLWRlbXV4OworICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJkdmJfdmlkZW8iPgorICAgICZzdWItdmlkZW87CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9ImR2Yl9hdWRpbyI+CisgICAgJnN1Yi1hdWRpbzsKKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iZHZiX2NhIj4KKyAgICAmc3ViLWNhOworICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJkdmJfbmV0Ij4KKyAgICAmc3ViLW5ldDsKKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iZHZiX2tkYXBpIj4KKyAgICAmc3ViLWtkYXBpOworICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJkdmJfZXhhbXBsZXMiPgorICAgICZzdWItZXhhbXBsZXM7CisgIDwvY2hhcHRlcj4KKzwhLS0gRU5EIE9GIENIQVBURVJTIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucGRmIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYTc1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnN0Yi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucG5nIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOGYzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnN0Yi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9leGFtcGxlcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2V4YW1wbGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDM3ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9leGFtcGxlcy54bWwKQEAgLTAsMCArMSwzNjUgQEAKKzx0aXRsZT5FeGFtcGxlczwvdGl0bGU+Cis8cGFyYT5JbiB0aGlzIHNlY3Rpb24gd2Ugd291bGQgbGlrZSB0byBwcmVzZW50IHNvbWUgZXhhbXBsZXMgZm9yIHVzaW5nIHRoZSBEVkIgQVBJLgorPC9wYXJhPgorPHBhcmE+TWFpbnRhaW5lciBub3RlOiBUaGlzIHNlY3Rpb24gaXMgb3V0IG9mIGRhdGUuIFBsZWFzZSByZWZlciB0byB0aGUgc2FtcGxlIHByb2dyYW1zIHBhY2thZ2VkCit3aXRoIHRoZSBkcml2ZXIgZGlzdHJpYnV0aW9uIGZyb20gPHVsaW5rIHVybD0iaHR0cDovL2xpbnV4dHYub3JnL2hnL2R2Yi1hcHBzIiAvPi4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9InR1bmluZyI+Cis8dGl0bGU+VHVuaW5nPC90aXRsZT4KKzxwYXJhPldlIHdpbGwgc3RhcnQgd2l0aCBhIGdlbmVyaWMgdHVuaW5nIHN1YnJvdXRpbmUgdGhhdCB1c2VzIHRoZSBmcm9udGVuZCBhbmQgU0VDLCBhcyB3ZWxsIGFzCit0aGUgZGVtdXggZGV2aWNlcy4gVGhlIGV4YW1wbGUgaXMgZ2l2ZW4gZm9yIFFQU0sgdHVuZXJzLCBidXQgY2FuIGVhc2lseSBiZSBhZGp1c3RlZCBmb3IKK1FBTS4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyAjaW5jbHVkZSAmI3gwMDNDO3N5cy9pb2N0bC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3N0ZGlvLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3RkaW50LmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3lzL3R5cGVzLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3lzL3N0YXQuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztmY250bC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3RpbWUuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQzt1bmlzdGQuaCYjeDAwM0U7CisKKyAjaW5jbHVkZSAmI3gwMDNDO2xpbnV4L2R2Yi9kbXguaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztsaW51eC9kdmIvZnJvbnRlbmQuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztsaW51eC9kdmIvc2VjLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3lzL3BvbGwuaCYjeDAwM0U7CisKKyAjZGVmaW5lIERNWCAiL2Rldi9kdmIvYWRhcHRlcjAvZGVtdXgxIgorICNkZWZpbmUgRlJPTlQgIi9kZXYvZHZiL2FkYXB0ZXIwL2Zyb250ZW5kMSIKKyAjZGVmaW5lIFNFQyAiL2Rldi9kdmIvYWRhcHRlcjAvc2VjMSIKKworIC8mI3gyMkM2OyByb3V0aW5lIGZvciBjaGVja2luZyBpZiB3ZSBoYXZlIGEgc2lnbmFsIGFuZCBvdGhlciBzdGF0dXMgaW5mb3JtYXRpb24mI3gyMkM2Oy8KKyBpbnQgRkVSZWFkU3RhdHVzKGludCBmZCwgZmVfc3RhdHVzX3QgJiN4MjJDNjtzdGF0KQorIHsKKwkgaW50IGFuczsKKworCSBpZiAoIChhbnMgPSBpb2N0bChmZCxGRV9SRUFEX1NUQVRVUyxzdGF0KSAmI3gwMDNDOyAwKSl7CisJCSBwZXJyb3IoIkZFIFJFQUQgU1RBVFVTOiAiKTsKKwkJIHJldHVybiAtMTsKKwkgfQorCisJIGlmICgmI3gyMkM2O3N0YXQgJmFtcDsgRkVfSEFTX1BPV0VSKQorCQkgcHJpbnRmKCJGRSBIQVMgUE9XRVJcbiIpOworCisJIGlmICgmI3gyMkM2O3N0YXQgJmFtcDsgRkVfSEFTX1NJR05BTCkKKwkJIHByaW50ZigiRkUgSEFTIFNJR05BTFxuIik7CisKKwkgaWYgKCYjeDIyQzY7c3RhdCAmYW1wOyBGRV9TUEVDVFJVTV9JTlYpCisJCSBwcmludGYoIlNQRUtUUlVNIElOVlxuIik7CisKKwkgcmV0dXJuIDA7CisgfQorCisKKyAvJiN4MjJDNjsgdHVuZSBxcHNrICYjeDIyQzY7LworIC8mI3gyMkM2OyBmcmVxOiAgICAgICAgICAgICBmcmVxdWVuY3kgb2YgdHJhbnNwb25kZXIgICAgICAgICAgICAgICAgICAgICAgJiN4MjJDNjsvCisgLyYjeDIyQzY7IHZwaWQsIGFwaWQsIHRwaWQ6IFBJRHMgb2YgdmlkZW8sIGF1ZGlvIGFuZCB0ZWxldGV4dCBUUyBwYWNrZXRzICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgZGlzZXFjOiAgICAgICAgICAgRGlTRXFDIGFkZHJlc3Mgb2YgdGhlIHVzZWQgTE5CICAgICAgICAgICAgICAgICYjeDIyQzY7LworIC8mI3gyMkM2OyBwb2w6ICAgICAgICAgICAgICBQb2xhcmlzYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiN4MjJDNjsvCisgLyYjeDIyQzY7IHNyYXRlOiAgICAgICAgICAgIFN5bWJvbCBSYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgZmVjLiAgICAgICAgICAgICAgRkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjeDIyQzY7LworIC8mI3gyMkM2OyBsbmJfbG9mMTogICAgICAgICBsb2NhbCBmcmVxdWVuY3kgb2YgbG93ZXIgTE5CIGJhbmQgICAgICAgICAgICAgJiN4MjJDNjsvCisgLyYjeDIyQzY7IGxuYl9sb2YyOiAgICAgICAgIGxvY2FsIGZyZXF1ZW5jeSBvZiB1cHBlciBMTkIgYmFuZCAgICAgICAgICAgICAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgbG5iX3Nsb2Y6ICAgICAgICAgc3dpdGNoIGZyZXF1ZW5jeSBvZiBMTkIgICAgICAgICAgICAgICAgICAgICAgICYjeDIyQzY7LworCisgaW50IHNldF9xcHNrX2NoYW5uZWwoaW50IGZyZXEsIGludCB2cGlkLCBpbnQgYXBpZCwgaW50IHRwaWQsCisJCSBpbnQgZGlzZXFjLCBpbnQgcG9sLCBpbnQgc3JhdGUsIGludCBmZWMsIGludCBsbmJfbG9mMSwKKwkJIGludCBsbmJfbG9mMiwgaW50IGxuYl9zbG9mKQorIHsKKwkgc3RydWN0IHNlY0NvbW1hbmQgc2NtZDsKKwkgc3RydWN0IHNlY0NtZFNlcXVlbmNlIHNjbWRzOworCSBzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zIHBlc0ZpbHRlclBhcmFtczsKKwkgRnJvbnRlbmRQYXJhbWV0ZXJzIGZycDsKKwkgc3RydWN0IHBvbGxmZCBwZmRbMV07CisJIEZyb250ZW5kRXZlbnQgZXZlbnQ7CisJIGludCBkZW11eDEsIGRlbXV4MiwgZGVtdXgzLCBmcm9udDsKKworCSBmcmVxdWVuY3kgPSAodWludDMyX3QpIGZyZXE7CisJIHN5bWJvbHJhdGUgPSAodWludDMyX3QpIHNyYXRlOworCisJIGlmKChmcm9udCA9IG9wZW4oRlJPTlQsT19SRFdSKSkgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIkZST05URU5EIERFVklDRTogIik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBpZigoc2VjID0gb3BlbihTRUMsT19SRFdSKSkgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIlNFQyBERVZJQ0U6ICIpOworCQkgcmV0dXJuIC0xOworCSB9CisKKwkgaWYgKGRlbXV4MSAmI3gwMDNDOyAwKXsKKwkJIGlmICgoZGVtdXgxPW9wZW4oRE1YLCBPX1JEV1J8T19OT05CTE9DSykpCisJCSAgICAgJiN4MDAzQzsgMCl7CisJCQkgcGVycm9yKCJERU1VWCBERVZJQ0U6ICIpOworCQkJIHJldHVybiAtMTsKKwkJIH0KKwkgfQorCisJIGlmIChkZW11eDIgJiN4MDAzQzsgMCl7CisJCSBpZiAoKGRlbXV4Mj1vcGVuKERNWCwgT19SRFdSfE9fTk9OQkxPQ0spKQorCQkgICAgICYjeDAwM0M7IDApeworCQkJIHBlcnJvcigiREVNVVggREVWSUNFOiAiKTsKKwkJCSByZXR1cm4gLTE7CisJCSB9CisJIH0KKworCSBpZiAoZGVtdXgzICYjeDAwM0M7IDApeworCQkgaWYgKChkZW11eDM9b3BlbihETVgsIE9fUkRXUnxPX05PTkJMT0NLKSkKKwkJICAgICAmI3gwMDNDOyAwKXsKKwkJCSBwZXJyb3IoIkRFTVVYIERFVklDRTogIik7CisJCQkgcmV0dXJuIC0xOworCQkgfQorCSB9CisKKwkgaWYgKGZyZXEgJiN4MDAzQzsgbG5iX3Nsb2YpIHsKKwkJIGZycC5GcmVxdWVuY3kgPSAoZnJlcSAtIGxuYl9sb2YxKTsKKwkJIHNjbWRzLmNvbnRpbnVvdXNUb25lID0gU0VDX1RPTkVfT0ZGOworCSB9IGVsc2UgeworCQkgZnJwLkZyZXF1ZW5jeSA9IChmcmVxIC0gbG5iX2xvZjIpOworCQkgc2NtZHMuY29udGludW91c1RvbmUgPSBTRUNfVE9ORV9PTjsKKwkgfQorCSBmcnAuSW52ZXJzaW9uID0gSU5WRVJTSU9OX0FVVE87CisJIGlmIChwb2wpIHNjbWRzLnZvbHRhZ2UgPSBTRUNfVk9MVEFHRV8xODsKKwkgZWxzZSBzY21kcy52b2x0YWdlID0gU0VDX1ZPTFRBR0VfMTM7CisKKwkgc2NtZC50eXBlPTA7CisJIHNjbWQudS5kaXNlcWMuYWRkcj0weDEwOworCSBzY21kLnUuZGlzZXFjLmNtZD0weDM4OworCSBzY21kLnUuZGlzZXFjLm51bVBhcmFtcz0xOworCSBzY21kLnUuZGlzZXFjLnBhcmFtc1swXSA9IDB4RjAgfCAoKGRpc2VxYyAmI3gyMkM2OyA0KSAmYW1wOyAweDBGKSB8CisJCSAoc2NtZHMuY29udGludW91c1RvbmUgPT0gU0VDX1RPTkVfT04gPyAxIDogMCkgfAorCQkgKHNjbWRzLnZvbHRhZ2U9PVNFQ19WT0xUQUdFXzE4ID8gMiA6IDApOworCisJIHNjbWRzLm1pbmlDb21tYW5kPVNFQ19NSU5JX05PTkU7CisJIHNjbWRzLm51bUNvbW1hbmRzPTE7CisJIHNjbWRzLmNvbW1hbmRzPSZhbXA7c2NtZDsKKwkgaWYgKGlvY3RsKHNlYywgU0VDX1NFTkRfU0VRVUVOQ0UsICZhbXA7c2NtZHMpICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJTRUMgU0VORDogIik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBpZiAoaW9jdGwoc2VjLCBTRUNfU0VORF9TRVFVRU5DRSwgJmFtcDtzY21kcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIlNFQyBTRU5EOiAiKTsKKwkJIHJldHVybiAtMTsKKwkgfQorCisJIGZycC51LnFwc2suU3ltYm9sUmF0ZSA9IHNyYXRlOworCSBmcnAudS5xcHNrLkZFQ19pbm5lciA9IGZlYzsKKworCSBpZiAoaW9jdGwoZnJvbnQsIEZFX1NFVF9GUk9OVEVORCwgJmFtcDtmcnApICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJRUFNLIFRVTkU6ICIpOworCQkgcmV0dXJuIC0xOworCSB9CisKKwkgcGZkWzBdLmZkID0gZnJvbnQ7CisJIHBmZFswXS5ldmVudHMgPSBQT0xMSU47CisKKwkgaWYgKHBvbGwocGZkLDEsMzAwMCkpeworCQkgaWYgKHBmZFswXS5yZXZlbnRzICZhbXA7IFBPTExJTil7CisJCQkgcHJpbnRmKCJHZXR0aW5nIFFQU0sgZXZlbnRcbiIpOworCQkJIGlmICggaW9jdGwoZnJvbnQsIEZFX0dFVF9FVkVOVCwgJmFtcDtldmVudCkKKworCQkJICAgICAgPT0gLUVPVkVSRkxPVyl7CisJCQkJIHBlcnJvcigicXBzayBnZXQgZXZlbnQiKTsKKwkJCQkgcmV0dXJuIC0xOworCQkJIH0KKwkJCSBwcmludGYoIlJlY2VpdmVkICIpOworCQkJIHN3aXRjaChldmVudC50eXBlKXsKKwkJCSBjYXNlIEZFX1VORVhQRUNURURfRVY6CisJCQkJIHByaW50ZigidW5leHBlY3RlZCBldmVudFxuIik7CisJCQkJIHJldHVybiAtMTsKKwkJCSBjYXNlIEZFX0ZBSUxVUkVfRVY6CisJCQkJIHByaW50ZigiZmFpbHVyZSBldmVudFxuIik7CisJCQkJIHJldHVybiAtMTsKKworCQkJIGNhc2UgRkVfQ09NUExFVElPTl9FVjoKKwkJCQkgcHJpbnRmKCJjb21wbGV0aW9uIGV2ZW50XG4iKTsKKwkJCSB9CisJCSB9CisJIH0KKworCisJIHBlc0ZpbHRlclBhcmFtcy5waWQgICAgID0gdnBpZDsKKwkgcGVzRmlsdGVyUGFyYW1zLmlucHV0ICAgPSBETVhfSU5fRlJPTlRFTkQ7CisJIHBlc0ZpbHRlclBhcmFtcy5vdXRwdXQgID0gRE1YX09VVF9ERUNPREVSOworCSBwZXNGaWx0ZXJQYXJhbXMucGVzX3R5cGUgPSBETVhfUEVTX1ZJREVPOworCSBwZXNGaWx0ZXJQYXJhbXMuZmxhZ3MgICA9IERNWF9JTU1FRElBVEVfU1RBUlQ7CisJIGlmIChpb2N0bChkZW11eDEsIERNWF9TRVRfUEVTX0ZJTFRFUiwgJmFtcDtwZXNGaWx0ZXJQYXJhbXMpICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJzZXRfdnBpZCIpOworCQkgcmV0dXJuIC0xOworCSB9CisKKwkgcGVzRmlsdGVyUGFyYW1zLnBpZCAgICAgPSBhcGlkOworCSBwZXNGaWx0ZXJQYXJhbXMuaW5wdXQgICA9IERNWF9JTl9GUk9OVEVORDsKKwkgcGVzRmlsdGVyUGFyYW1zLm91dHB1dCAgPSBETVhfT1VUX0RFQ09ERVI7CisJIHBlc0ZpbHRlclBhcmFtcy5wZXNfdHlwZSA9IERNWF9QRVNfQVVESU87CisJIHBlc0ZpbHRlclBhcmFtcy5mbGFncyAgID0gRE1YX0lNTUVESUFURV9TVEFSVDsKKwkgaWYgKGlvY3RsKGRlbXV4MiwgRE1YX1NFVF9QRVNfRklMVEVSLCAmYW1wO3Blc0ZpbHRlclBhcmFtcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoInNldF9hcGlkIik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBwZXNGaWx0ZXJQYXJhbXMucGlkICAgICA9IHRwaWQ7CisJIHBlc0ZpbHRlclBhcmFtcy5pbnB1dCAgID0gRE1YX0lOX0ZST05URU5EOworCSBwZXNGaWx0ZXJQYXJhbXMub3V0cHV0ICA9IERNWF9PVVRfREVDT0RFUjsKKwkgcGVzRmlsdGVyUGFyYW1zLnBlc190eXBlID0gRE1YX1BFU19URUxFVEVYVDsKKwkgcGVzRmlsdGVyUGFyYW1zLmZsYWdzICAgPSBETVhfSU1NRURJQVRFX1NUQVJUOworCSBpZiAoaW9jdGwoZGVtdXgzLCBETVhfU0VUX1BFU19GSUxURVIsICZhbXA7cGVzRmlsdGVyUGFyYW1zKSAmI3gwMDNDOyAwKXsKKwkJIHBlcnJvcigic2V0X3RwaWQiKTsKKwkJIHJldHVybiAtMTsKKwkgfQorCisJIHJldHVybiBoYXNfc2lnbmFsKGZkcyk7CisgfQorCis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+VGhlIHByb2dyYW0gYXNzdW1lcyB0aGF0IHlvdSBhcmUgdXNpbmcgYSB1bml2ZXJzYWwgTE5CIGFuZCBhIHN0YW5kYXJkIERpU0VxQworc3dpdGNoIHdpdGggdXAgdG8gNCBhZGRyZXNzZXMuIE9mIGNvdXJzZSwgeW91IGNvdWxkIGJ1aWxkIGluIHNvbWUgbW9yZSBjaGVja2luZyBpZgordHVuaW5nIHdhcyBzdWNjZXNzZnVsIGFuZCBtYXliZSB0cnkgdG8gcmVwZWF0IHRoZSB0dW5pbmcgcHJvY2Vzcy4gRGVwZW5kaW5nIG9uIHRoZQorZXh0ZXJuYWwgaGFyZHdhcmUsIGkuZS4gTE5CIGFuZCBEaVNFcUMgc3dpdGNoLCBhbmQgd2VhdGhlciBjb25kaXRpb25zIHRoaXMgbWF5IGJlCituZWNlc3NhcnkuCis8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ0aGVfZHZyX2RldmljZSI+Cis8dGl0bGU+VGhlIERWUiBkZXZpY2U8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBwcm9ncmFtIGNvZGUgc2hvd3MgaG93IHRvIHVzZSB0aGUgRFZSIGRldmljZSBmb3IgcmVjb3JkaW5nLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorICNpbmNsdWRlICYjeDAwM0M7c3lzL2lvY3RsLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7c3RkaW8uaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztzdGRpbnQuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztzeXMvdHlwZXMuaCYjeDAwM0U7CisgI2luY2x1ZGUgJiN4MDAzQztzeXMvc3RhdC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO2ZjbnRsLmgmI3gwMDNFOworICNpbmNsdWRlICYjeDAwM0M7dGltZS5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3VuaXN0ZC5oJiN4MDAzRTsKKworICNpbmNsdWRlICYjeDAwM0M7bGludXgvZHZiL2RteC5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO2xpbnV4L2R2Yi92aWRlby5oJiN4MDAzRTsKKyAjaW5jbHVkZSAmI3gwMDNDO3N5cy9wb2xsLmgmI3gwMDNFOworICNkZWZpbmUgRFZSICIvZGV2L2R2Yi9hZGFwdGVyMC9kdnIxIgorICNkZWZpbmUgQVVESU8gIi9kZXYvZHZiL2FkYXB0ZXIwL2F1ZGlvMSIKKyAjZGVmaW5lIFZJREVPICIvZGV2L2R2Yi9hZGFwdGVyMC92aWRlbzEiCisKKyAjZGVmaW5lIEJVRkZZICgxODgmI3gyMkM2OzIwKQorICNkZWZpbmUgTUFYX0xFTkdUSCAoMTAyNCYjeDIyQzY7MTAyNCYjeDIyQzY7NSkgLyYjeDIyQzY7IHJlY29yZCA1TUIgJiN4MjJDNjsvCisKKworIC8mI3gyMkM2OyBzd2l0Y2ggdGhlIGRlbXV4ZXMgdG8gcmVjb3JkaW5nLCBhc3N1bWluZyB0aGUgdHJhbnNwb25kZXIgaXMgdHVuZWQgJiN4MjJDNjsvCisKKyAvJiN4MjJDNjsgZGVtdXgxLCBkZW11eDI6IGZpbGUgZGVzY3JpcHRvciBvZiB2aWRlbyBhbmQgYXVkaW8gZmlsdGVycyAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgdnBpZCwgYXBpZDogICAgIFBJRHMgb2YgdmlkZW8gYW5kIGF1ZGlvIGNoYW5uZWxzICAgICAgICAgICAmI3gyMkM2Oy8KKworIGludCBzd2l0Y2hfdG9fcmVjb3JkKGludCBkZW11eDEsIGludCBkZW11eDIsIHVpbnQxNl90IHZwaWQsIHVpbnQxNl90IGFwaWQpCisgeworCSBzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zIHBlc0ZpbHRlclBhcmFtczsKKworCSBpZiAoZGVtdXgxICYjeDAwM0M7IDApeworCQkgaWYgKChkZW11eDE9b3BlbihETVgsIE9fUkRXUnxPX05PTkJMT0NLKSkKKwkJICAgICAmI3gwMDNDOyAwKXsKKwkJCSBwZXJyb3IoIkRFTVVYIERFVklDRTogIik7CisJCQkgcmV0dXJuIC0xOworCQkgfQorCSB9CisKKwkgaWYgKGRlbXV4MiAmI3gwMDNDOyAwKXsKKwkJIGlmICgoZGVtdXgyPW9wZW4oRE1YLCBPX1JEV1J8T19OT05CTE9DSykpCisJCSAgICAgJiN4MDAzQzsgMCl7CisJCQkgcGVycm9yKCJERU1VWCBERVZJQ0U6ICIpOworCQkJIHJldHVybiAtMTsKKwkJIH0KKwkgfQorCisJIHBlc0ZpbHRlclBhcmFtcy5waWQgPSB2cGlkOworCSBwZXNGaWx0ZXJQYXJhbXMuaW5wdXQgPSBETVhfSU5fRlJPTlRFTkQ7CisJIHBlc0ZpbHRlclBhcmFtcy5vdXRwdXQgPSBETVhfT1VUX1RTX1RBUDsKKwkgcGVzRmlsdGVyUGFyYW1zLnBlc190eXBlID0gRE1YX1BFU19WSURFTzsKKwkgcGVzRmlsdGVyUGFyYW1zLmZsYWdzID0gRE1YX0lNTUVESUFURV9TVEFSVDsKKwkgaWYgKGlvY3RsKGRlbXV4MSwgRE1YX1NFVF9QRVNfRklMVEVSLCAmYW1wO3Blc0ZpbHRlclBhcmFtcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIkRFTVVYIERFVklDRSIpOworCQkgcmV0dXJuIC0xOworCSB9CisJIHBlc0ZpbHRlclBhcmFtcy5waWQgPSBhcGlkOworCSBwZXNGaWx0ZXJQYXJhbXMuaW5wdXQgPSBETVhfSU5fRlJPTlRFTkQ7CisJIHBlc0ZpbHRlclBhcmFtcy5vdXRwdXQgPSBETVhfT1VUX1RTX1RBUDsKKwkgcGVzRmlsdGVyUGFyYW1zLnBlc190eXBlID0gRE1YX1BFU19BVURJTzsKKwkgcGVzRmlsdGVyUGFyYW1zLmZsYWdzID0gRE1YX0lNTUVESUFURV9TVEFSVDsKKwkgaWYgKGlvY3RsKGRlbXV4MiwgRE1YX1NFVF9QRVNfRklMVEVSLCAmYW1wO3Blc0ZpbHRlclBhcmFtcykgJiN4MDAzQzsgMCl7CisJCSBwZXJyb3IoIkRFTVVYIERFVklDRSIpOworCQkgcmV0dXJuIC0xOworCSB9CisJIHJldHVybiAwOworIH0KKworIC8mI3gyMkM2OyBzdGFydCByZWNvcmRpbmcgTUFYX0xFTkdUSCAsIGFzc3VtaW5nIHRoZSB0cmFuc3BvbmRlciBpcyB0dW5lZCAmI3gyMkM2Oy8KKworIC8mI3gyMkM2OyBkZW11eDEsIGRlbXV4MjogZmlsZSBkZXNjcmlwdG9yIG9mIHZpZGVvIGFuZCBhdWRpbyBmaWx0ZXJzICYjeDIyQzY7LworIC8mI3gyMkM2OyB2cGlkLCBhcGlkOiAgICAgUElEcyBvZiB2aWRlbyBhbmQgYXVkaW8gY2hhbm5lbHMgICAgICAgICAgICYjeDIyQzY7LworIGludCByZWNvcmRfZHZyKGludCBkZW11eDEsIGludCBkZW11eDIsIHVpbnQxNl90IHZwaWQsIHVpbnQxNl90IGFwaWQpCisgeworCSBpbnQgaTsKKwkgaW50IGxlbjsKKwkgaW50IHdyaXR0ZW47CisJIHVpbnQ4X3QgYnVmW0JVRkZZXTsKKwkgdWludDY0X3QgbGVuZ3RoOworCSBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsKKwkgaW50IGR2ciwgZHZyX291dDsKKworCSAvJiN4MjJDNjsgb3BlbiBkdnIgZGV2aWNlICYjeDIyQzY7LworCSBpZiAoKGR2ciA9IG9wZW4oRFZSLCBPX1JET05MWXxPX05PTkJMT0NLKSkgJiN4MDAzQzsgMCl7CisJCQkgcGVycm9yKCJEVlIgREVWSUNFIik7CisJCQkgcmV0dXJuIC0xOworCSB9CisKKwkgLyYjeDIyQzY7IHN3aXRjaCB2aWRlbyBhbmQgYXVkaW8gZGVtdXhlcyB0byBkdnIgJiN4MjJDNjsvCisJIHByaW50ZiAoIlN3aXRjaGluZyBkdnIgb25cbiIpOworCSBpID0gc3dpdGNoX3RvX3JlY29yZChkZW11eDEsIGRlbXV4MiwgdnBpZCwgYXBpZCk7CisJIHByaW50ZigiZmluaXNoZWQ6ICIpOworCisJIHByaW50ZigiUmVjb3JkaW5nICUyLjBmIE1CIG9mIHRlc3QgZmlsZSBpbiBUUyBmb3JtYXRcbiIsCisJCU1BWF9MRU5HVEgvKDEwMjQuMCYjeDIyQzY7MTAyNC4wKSk7CisJIGxlbmd0aCA9IDA7CisKKwkgLyYjeDIyQzY7IG9wZW4gb3V0cHV0IGZpbGUgJiN4MjJDNjsvCisJIGlmICgoZHZyX291dCA9IG9wZW4oRFZSX0ZJTEUsT19XUk9OTFl8T19DUkVBVAorCQkJCSAgfE9fVFJVTkMsIFNfSVJVU1J8U19JV1VTUgorCQkJCSAgfFNfSVJHUlB8U19JV0dSUHxTX0lST1RIfAorCQkJCSAgU19JV09USCkpICYjeDAwM0M7IDApeworCQkgcGVycm9yKCJDYW4ndCBvcGVuIGZpbGUgZm9yIGR2ciB0ZXN0Iik7CisJCSByZXR1cm4gLTE7CisJIH0KKworCSBwZmRbMF0uZmQgPSBkdnI7CisJIHBmZFswXS5ldmVudHMgPSBQT0xMSU47CisKKwkgLyYjeDIyQzY7IHBvbGwgZm9yIGR2ciBkYXRhIGFuZCB3cml0ZSB0byBmaWxlICYjeDIyQzY7LworCSB3aGlsZSAobGVuZ3RoICYjeDAwM0M7IE1BWF9MRU5HVEggKSB7CisJCSBpZiAocG9sbChwZmQsMSwxKSl7CisJCQkgaWYgKHBmZFswXS5yZXZlbnRzICZhbXA7IFBPTExJTil7CisJCQkJIGxlbiA9IHJlYWQoZHZyLCBidWYsIEJVRkZZKTsKKwkJCQkgaWYgKGxlbiAmI3gwMDNDOyAwKXsKKwkJCQkJIHBlcnJvcigicmVjb3JkaW5nIik7CisJCQkJCSByZXR1cm4gLTE7CisJCQkJIH0KKwkJCQkgaWYgKGxlbiAmI3gwMDNFOyAwKXsKKwkJCQkJIHdyaXR0ZW4gPSAwOworCQkJCQkgd2hpbGUgKHdyaXR0ZW4gJiN4MDAzQzsgbGVuKQorCQkJCQkJIHdyaXR0ZW4gKz0KKwkJCQkJCQkgd3JpdGUgKGR2cl9vdXQsCisJCQkJCQkJCWJ1ZiwgbGVuKTsKKwkJCQkJIGxlbmd0aCArPSBsZW47CisJCQkJCSBwcmludGYoIndyaXR0ZW4gJTIuMGYgTUJcciIsCisJCQkJCQlsZW5ndGgvMTAyNC4vMTAyNC4pOworCQkJCSB9CisJCQkgfQorCQkgfQorCSB9CisJIHJldHVybiAwOworIH0KKworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDg5YTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwKQEAgLTAsMCArMSwxNzY2IEBACis8dGl0bGU+RFZCIEZyb250ZW5kIEFQSTwvdGl0bGU+CisKKzxwYXJhPlRoZSBEVkIgZnJvbnRlbmQgZGV2aWNlIGNvbnRyb2xzIHRoZSB0dW5lciBhbmQgRFZCIGRlbW9kdWxhdG9yCitoYXJkd2FyZS4gSXQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggPGVtcGhhc2lzCityb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlcjAvZnJvbnRlbmQwPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZAoraW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMKK3JvbGU9InR0Ij5saW51eC9kdmIvZnJvbnRlbmQuaDwvZW1waGFzaXM+IGluIHlvdXIgYXBwbGljYXRpb24uPC9wYXJhPgorCis8cGFyYT5EVkIgZnJvbnRlbmRzIGNvbWUgaW4gdGhyZWUgdmFyaWV0aWVzOiBEVkItUyAoc2F0ZWxsaXRlKSwgRFZCLUMKKyhjYWJsZSkgYW5kIERWQi1UICh0ZXJyZXN0cmlhbCkuIFRyYW5zbWlzc2lvbiB2aWEgdGhlIGludGVybmV0IChEVkItSVApCitpcyBub3QgeWV0IGhhbmRsZWQgYnkgdGhpcyBBUEkgYnV0IGEgZnV0dXJlIGV4dGVuc2lvbiBpcyBwb3NzaWJsZS4gRm9yCitEVkItUyB0aGUgZnJvbnRlbmQgZGV2aWNlIGFsc28gc3VwcG9ydHMgc2F0ZWxsaXRlIGVxdWlwbWVudCBjb250cm9sCisoU0VDKSB2aWEgRGlTRXFDIGFuZCBWLVNFQyBwcm90b2NvbHMuIFRoZSBEaVNFcUMgKGRpZ2l0YWwgU0VDKQorc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgZnJvbQorPHVsaW5rIHVybD0iaHR0cDovL3d3dy5ldXRlbHNhdC5jb20vc2F0ZWxsaXRlcy80XzVfNS5odG1sIj5FdXRlbHNhdDwvdWxpbms+LjwvcGFyYT4KKworPHBhcmE+Tm90ZSB0aGF0IHRoZSBEVkIgQVBJIG1heSBhbHNvIGJlIHVzZWQgZm9yIE1QRUcgZGVjb2Rlci1vbmx5IFBDSQorY2FyZHMsIGluIHdoaWNoIGNhc2UgdGhlcmUgZXhpc3RzIG5vIGZyb250ZW5kIGRldmljZS48L3BhcmE+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF90eXBlcyI+Cis8dGl0bGU+RnJvbnRlbmQgRGF0YSBUeXBlczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF90eXBlIj4KKzx0aXRsZT5mcm9udGVuZCB0eXBlPC90aXRsZT4KKworPHBhcmE+Rm9yIGhpc3RvcmljYWwgcmVhc29ucyBmcm9udGVuZCB0eXBlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHR5cGUgb2YgbW9kdWxhdGlvbiB1c2VkIGluCit0cmFuc21pc3Npb24uPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXR5cGVkZWYgZW51bSBmZV90eXBlIHsKKwlGRV9RUFNLLCAgIC8mI3gyMkM2OyBEVkItUyAmI3gyMkM2Oy8KKwlGRV9RQU0sICAgIC8mI3gyMkM2OyBEVkItQyAmI3gyMkM2Oy8KKwlGRV9PRkRNICAgIC8mI3gyMkM2OyBEVkItVCAmI3gyMkM2Oy8KKwl9IGZlX3R5cGVfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2NhcHMiPgorPHRpdGxlPmZyb250ZW5kIGNhcGFiaWxpdGllczwvdGl0bGU+CisKKzxwYXJhPkNhcGFiaWxpdGllcyBkZXNjcmliZSB3aGF0IGEgZnJvbnRlbmQgY2FuIGRvLiBTb21lIGNhcGFiaWxpdGllcyBjYW4gb25seSBiZSBzdXBwb3J0ZWQgZm9yCithIHNwZWNpZmljIGZyb250ZW5kIHR5cGUuPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXR5cGVkZWYgZW51bSBmZV9jYXBzIHsKKwlGRV9JU19TVFVQSUQgICAgICAgICAgICAgICAgICA9IDAsCisJRkVfQ0FOX0lOVkVSU0lPTl9BVVRPICAgICAgICAgPSAweDEsCisJRkVfQ0FOX0ZFQ18xXzIgICAgICAgICAgICAgICAgPSAweDIsCisJRkVfQ0FOX0ZFQ18yXzMgICAgICAgICAgICAgICAgPSAweDQsCisJRkVfQ0FOX0ZFQ18zXzQgICAgICAgICAgICAgICAgPSAweDgsCisJRkVfQ0FOX0ZFQ180XzUgICAgICAgICAgICAgICAgPSAweDEwLAorCUZFX0NBTl9GRUNfNV82ICAgICAgICAgICAgICAgID0gMHgyMCwKKwlGRV9DQU5fRkVDXzZfNyAgICAgICAgICAgICAgICA9IDB4NDAsCisJRkVfQ0FOX0ZFQ183XzggICAgICAgICAgICAgICAgPSAweDgwLAorCUZFX0NBTl9GRUNfOF85ICAgICAgICAgICAgICAgID0gMHgxMDAsCisJRkVfQ0FOX0ZFQ19BVVRPICAgICAgICAgICAgICAgPSAweDIwMCwKKwlGRV9DQU5fUVBTSyAgICAgICAgICAgICAgICAgICA9IDB4NDAwLAorCUZFX0NBTl9RQU1fMTYgICAgICAgICAgICAgICAgID0gMHg4MDAsCisJRkVfQ0FOX1FBTV8zMiAgICAgICAgICAgICAgICAgPSAweDEwMDAsCisJRkVfQ0FOX1FBTV82NCAgICAgICAgICAgICAgICAgPSAweDIwMDAsCisJRkVfQ0FOX1FBTV8xMjggICAgICAgICAgICAgICAgPSAweDQwMDAsCisJRkVfQ0FOX1FBTV8yNTYgICAgICAgICAgICAgICAgPSAweDgwMDAsCisJRkVfQ0FOX1FBTV9BVVRPICAgICAgICAgICAgICAgPSAweDEwMDAwLAorCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPID0gMHgyMDAwMCwKKwlGRV9DQU5fQkFORFdJRFRIX0FVVE8gICAgICAgICA9IDB4NDAwMDAsCisJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gICAgPSAweDgwMDAwLAorCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyAgICAgICAgID0gMHgxMDAwMDAsCisJRkVfQ0FOX01VVEVfVFMgICAgICAgICAgICAgICAgPSAweDgwMDAwMDAwLAorCUZFX0NBTl9DTEVBTl9TRVRVUCAgICAgICAgICAgID0gMHg0MDAwMDAwMAorCX0gZmVfY2Fwc190OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2luZm8iPgorPHRpdGxlPmZyb250ZW5kIGluZm9ybWF0aW9uPC90aXRsZT4KKworPHBhcmE+SW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyb250ZW5kIGNhIGJlIHF1ZXJpZWQgd2l0aCBGRV9HRVRfSU5GTy48L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8geworCWNoYXIgICAgICAgbmFtZVsxMjhdOworCWZlX3R5cGVfdCAgdHlwZTsKKwl1aW50MzJfdCAgIGZyZXF1ZW5jeV9taW47CisJdWludDMyX3QgICBmcmVxdWVuY3lfbWF4OworCXVpbnQzMl90ICAgZnJlcXVlbmN5X3N0ZXBzaXplOworCXVpbnQzMl90ICAgZnJlcXVlbmN5X3RvbGVyYW5jZTsKKwl1aW50MzJfdCAgIHN5bWJvbF9yYXRlX21pbjsKKwl1aW50MzJfdCAgIHN5bWJvbF9yYXRlX21heDsKKwl1aW50MzJfdCAgIHN5bWJvbF9yYXRlX3RvbGVyYW5jZTsgICAgIC8mI3gyMkM2OyBwcG0gJiN4MjJDNjsvCisJdWludDMyX3QgICBub3RpZmllcl9kZWxheTsgICAgICAgICAgICAvJiN4MjJDNjsgbXMgJiN4MjJDNjsvCisJZmVfY2Fwc190ICBjYXBzOworCX07Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZGlzZXFjIj4KKzx0aXRsZT5kaXNlcWMgbWFzdGVyIGNvbW1hbmQ8L3RpdGxlPgorCis8cGFyYT5BIG1lc3NhZ2Ugc2VudCBmcm9tIHRoZSBmcm9udGVuZCB0byBEaVNFcUMgY2FwYWJsZSBlcXVpcG1lbnQuPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgeworCXVpbnQ4X3QgbXNnIFs2XTsgLyYjeDIyQzY7ICB7IGZyYW1pbmcsIGFkZHJlc3MsIGNvbW1hbmQsIGRhdGFbM10gfSAmI3gyMkM2Oy8KKwl1aW50OF90IG1zZ19sZW47IC8mI3gyMkM2OyAgdmFsaWQgdmFsdWVzIGFyZSAzLi4uNiAgJiN4MjJDNjsvCisJfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+Cis8c2VjdGlvbiByb2xlPSJzdWJzZWN0aW9uIj4KKzx0aXRsZT5kaXNlcWMgc2xhdmUgcmVwbHk8L3RpdGxlPgorCis8cGFyYT5BIHJlcGx5IHRvIHRoZSBmcm9udGVuZCBmcm9tIERpU0VxQyAyLjAgY2FwYWJsZSBlcXVpcG1lbnQuPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorCXN0cnVjdCBkdmJfZGlzZXFjX3NsYXZlX3JlcGx5IHsKKwl1aW50OF90IG1zZyBbNF07IC8mI3gyMkM2OyAgeyBmcmFtaW5nLCBkYXRhIFszXSB9ICYjeDIyQzY7LworCXVpbnQ4X3QgbXNnX2xlbjsgLyYjeDIyQzY7ICB2YWxpZCB2YWx1ZXMgYXJlIDAuLi40LCAwIG1lYW5zIG5vIG1zZyAgJiN4MjJDNjsvCisJaW50ICAgICB0aW1lb3V0OyAvJiN4MjJDNjsgIHJldHVybiBmcm9tIGlvY3RsIGFmdGVyIHRpbWVvdXQgbXMgd2l0aCAmI3gyMkM2Oy8KKwl9OyAgICAgICAgICAgICAgICAgICAgICAgLyYjeDIyQzY7ICBlcnJvcmNvZGUgd2hlbiBubyBtZXNzYWdlIHdhcyByZWNlaXZlZCAgJiN4MjJDNjsvCis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZGlzZXFjX3NsYXZlX3JlcGx5Ij4KKzx0aXRsZT5kaXNlcWMgc2xhdmUgcmVwbHk8L3RpdGxlPgorPHBhcmE+VGhlIHZvbHRhZ2UgaXMgdXN1YWxseSB1c2VkIHdpdGggbm9uLURpU0VxQyBjYXBhYmxlIExOQnMgdG8gc3dpdGNoIHRoZSBwb2xhcnphdGlvbgorKGhvcml6b250YWwvdmVydGljYWwpLiBXaGVuIHVzaW5nIERpU0VxQyBlcHVpcG1lbnQgdGhpcyB2b2x0YWdlIGhhcyB0byBiZSBzd2l0Y2hlZAorY29uc2lzdGVudGx5IHRvIHRoZSBEaVNFcUMgY29tbWFuZHMgYXMgZGVzY3JpYmVkIGluIHRoZSBEaVNFcUMgc3BlYy48L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisJdHlwZWRlZiBlbnVtIGZlX3NlY192b2x0YWdlIHsKKwlTRUNfVk9MVEFHRV8xMywKKwlTRUNfVk9MVEFHRV8xOAorCX0gZmVfc2VjX3ZvbHRhZ2VfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9zZWNfdG9uZSI+Cis8dGl0bGU+U0VDIGNvbnRpbnVvdXMgdG9uZTwvdGl0bGU+CisKKzxwYXJhPlRoZSBjb250aW5vdXMgMjJLSHogdG9uZSBpcyB1c3VhbGx5IHVzZWQgd2l0aCBub24tRGlTRXFDIGNhcGFibGUgTE5CcyB0byBzd2l0Y2ggdGhlCitoaWdoL2xvdyBiYW5kIG9mIGEgZHVhbC1iYW5kIExOQi4gV2hlbiB1c2luZyBEaVNFcUMgZXB1aXBtZW50IHRoaXMgdm9sdGFnZSBoYXMgdG8KK2JlIHN3aXRjaGVkIGNvbnNpc3RlbnRseSB0byB0aGUgRGlTRXFDIGNvbW1hbmRzIGFzIGRlc2NyaWJlZCBpbiB0aGUgRGlTRXFDCitzcGVjLjwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKwl0eXBlZGVmIGVudW0gZmVfc2VjX3RvbmVfbW9kZSB7CisJU0VDX1RPTkVfT04sCisJU0VDX1RPTkVfT0ZGCisJfSBmZV9zZWNfdG9uZV9tb2RlX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfc2VjX2J1cnN0Ij4KKzx0aXRsZT5TRUMgdG9uZSBidXJzdDwvdGl0bGU+CisKKzxwYXJhPlRoZSAyMktIeiB0b25lIGJ1cnN0IGlzIHVzdWFsbHkgdXNlZCB3aXRoIG5vbi1EaVNFcUMgY2FwYWJsZSBzd2l0Y2hlcyB0byBzZWxlY3QKK2JldHdlZW4gdHdvIGNvbm5lY3RlZCBMTkJzL3NhdGVsbGl0ZXMuIFdoZW4gdXNpbmcgRGlTRXFDIGVwdWlwbWVudCB0aGlzIHZvbHRhZ2UgaGFzIHRvCitiZSBzd2l0Y2hlZCBjb25zaXN0ZW50bHkgdG8gdGhlIERpU0VxQyBjb21tYW5kcyBhcyBkZXNjcmliZWQgaW4gdGhlIERpU0VxQworc3BlYy48L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisJdHlwZWRlZiBlbnVtIGZlX3NlY19taW5pX2NtZCB7CisJU0VDX01JTklfQSwKKwlTRUNfTUlOSV9CCisJfSBmZV9zZWNfbWluaV9jbWRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzxwYXJhPjwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX3N0YXR1cyI+Cis8dGl0bGU+ZnJvbnRlbmQgc3RhdHVzPC90aXRsZT4KKzxwYXJhPlNldmVyYWwgZnVuY3Rpb25zIG9mIHRoZSBmcm9udGVuZCBkZXZpY2UgdXNlIHRoZSBmZV9zdGF0dXMgZGF0YSB0eXBlIGRlZmluZWQKK2J5PC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSBmZV9zdGF0dXMgeworCSBGRV9IQVNfU0lHTkFMICAgICA9IDB4MDEsICAgLyYjeDIyQzY7ICBmb3VuZCBzb21ldGhpbmcgYWJvdmUgdGhlIG5vaXNlIGxldmVsICYjeDIyQzY7LworCSBGRV9IQVNfQ0FSUklFUiAgICA9IDB4MDIsICAgLyYjeDIyQzY7ICBmb3VuZCBhIERWQiBzaWduYWwgICYjeDIyQzY7LworCSBGRV9IQVNfVklURVJCSSAgICA9IDB4MDQsICAgLyYjeDIyQzY7ICBGRUMgaXMgc3RhYmxlICAmI3gyMkM2Oy8KKwkgRkVfSEFTX1NZTkMgICAgICAgPSAweDA4LCAgIC8mI3gyMkM2OyAgZm91bmQgc3luYyBieXRlcyAgJiN4MjJDNjsvCisJIEZFX0hBU19MT0NLICAgICAgID0gMHgxMCwgICAvJiN4MjJDNjsgIGV2ZXJ5dGhpbmcncyB3b3JraW5nLi4uICYjeDIyQzY7LworCSBGRV9USU1FRE9VVCAgICAgICA9IDB4MjAsICAgLyYjeDIyQzY7ICBubyBsb2NrIHdpdGhpbiB0aGUgbGFzdCB+MiBzZWNvbmRzICYjeDIyQzY7LworCSBGRV9SRUlOSVQgICAgICAgICA9IDB4NDAgICAgLyYjeDIyQzY7ICBmcm9udGVuZCB3YXMgcmVpbml0aWFsaXplZCwgICYjeDIyQzY7LworIH0gZmVfc3RhdHVzX3Q7ICAgICAgICAgICAgICAgICAgICAgIC8mI3gyMkM2OyAgYXBwbGljYXRpb24gaXMgcmVjb21tbmVkIHRvIHJlc2V0ICYjeDIyQzY7LworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPnRvIGluZGljYXRlIHRoZSBjdXJyZW50IHN0YXRlIGFuZC9vciBzdGF0ZSBjaGFuZ2VzIG9mIHRoZSBmcm9udGVuZCBoYXJkd2FyZS4KKzwvcGFyYT4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcGFyYW1zIj4KKzx0aXRsZT5mcm9udGVuZCBwYXJhbWV0ZXJzPC90aXRsZT4KKzxwYXJhPlRoZSBraW5kIG9mIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBmcm9udGVuZCBkZXZpY2UgZm9yIHR1bmluZyBkZXBlbmQgb24KK3RoZSBraW5kIG9mIGhhcmR3YXJlIHlvdSBhcmUgdXNpbmcuIEFsbCBraW5kcyBvZiBwYXJhbWV0ZXJzIGFyZSBjb21iaW5lZCBhcyBhbgordW5pb24gaW4gdGhlIEZyb250ZW5kUGFyYW1ldGVycyBzdHJ1Y3R1cmU6PC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyB7CisJIHVpbnQzMl90IGZyZXF1ZW5jeTsgICAgICAgLyYjeDIyQzY7IChhYnNvbHV0ZSkgZnJlcXVlbmN5IGluIEh6IGZvciBRQU0vT0ZETSAmI3gyMkM2Oy8KKwkJCQkgICAvJiN4MjJDNjsgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpbiBrSHogZm9yIFFQU0sgJiN4MjJDNjsvCisJIGZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbjsKKwkgdW5pb24geworCQkgc3RydWN0IGR2Yl9xcHNrX3BhcmFtZXRlcnMgcXBzazsKKwkJIHN0cnVjdCBkdmJfcWFtX3BhcmFtZXRlcnMgIHFhbTsKKwkJIHN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzIG9mZG07CisJIH0gdTsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPkZvciBzYXRlbGxpdGUgUVBTSyBmcm9udGVuZHMgeW91IGhhdmUgdG8gdXNlIHRoZSA8Y29uc3RhbnQ+UVBTS1BhcmFtZXRlcnM8L2NvbnN0YW50PiBtZW1iZXIgZGVmaW5lZCBieTwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgZHZiX3Fwc2tfcGFyYW1ldGVycyB7CisJIHVpbnQzMl90ICAgICAgICBzeW1ib2xfcmF0ZTsgIC8mI3gyMkM2OyBzeW1ib2wgcmF0ZSBpbiBTeW1ib2xzIHBlciBzZWNvbmQgJiN4MjJDNjsvCisJIGZlX2NvZGVfcmF0ZV90ICBmZWNfaW5uZXI7ICAgIC8mI3gyMkM2OyBmb3J3YXJkIGVycm9yIGNvcnJlY3Rpb24gKHNlZSBhYm92ZSkgJiN4MjJDNjsvCisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5mb3IgY2FibGUgUUFNIGZyb250ZW5kIHlvdSB1c2UgdGhlIDxjb25zdGFudD5RQU1QYXJhbWV0ZXJzPC9jb25zdGFudD4gc3RydWN0dXJlPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHN0cnVjdCBkdmJfcWFtX3BhcmFtZXRlcnMgeworCSB1aW50MzJfdCAgICAgICAgIHN5bWJvbF9yYXRlOyAvJiN4MjJDNjsgc3ltYm9sIHJhdGUgaW4gU3ltYm9scyBwZXIgc2Vjb25kICYjeDIyQzY7LworCSBmZV9jb2RlX3JhdGVfdCAgIGZlY19pbm5lcjsgICAvJiN4MjJDNjsgZm9yd2FyZCBlcnJvciBjb3JyZWN0aW9uIChzZWUgYWJvdmUpICYjeDIyQzY7LworCSBmZV9tb2R1bGF0aW9uX3QgIG1vZHVsYXRpb247ICAvJiN4MjJDNjsgbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICYjeDIyQzY7LworIH07Cis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+RFZCLVQgZnJvbnRlbmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxjb25zdGFudD5PRkRNUGFyYW10ZXJzPC9jb25zdGFudD4gc3RydWN0dXJlCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgeworCSBmZV9iYW5kd2lkdGhfdCAgICAgIGJhbmR3aWR0aDsKKwkgZmVfY29kZV9yYXRlX3QgICAgICBjb2RlX3JhdGVfSFA7ICAvJiN4MjJDNjsgaGlnaCBwcmlvcml0eSBzdHJlYW0gY29kZSByYXRlICYjeDIyQzY7LworCSBmZV9jb2RlX3JhdGVfdCAgICAgIGNvZGVfcmF0ZV9MUDsgIC8mI3gyMkM2OyBsb3cgcHJpb3JpdHkgc3RyZWFtIGNvZGUgcmF0ZSAmI3gyMkM2Oy8KKwkgZmVfbW9kdWxhdGlvbl90ICAgICBjb25zdGVsbGF0aW9uOyAvJiN4MjJDNjsgbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICYjeDIyQzY7LworCSBmZV90cmFuc21pdF9tb2RlX3QgIHRyYW5zbWlzc2lvbl9tb2RlOworCSBmZV9ndWFyZF9pbnRlcnZhbF90IGd1YXJkX2ludGVydmFsOworCSBmZV9oaWVyYXJjaHlfdCAgICAgIGhpZXJhcmNoeV9pbmZvcm1hdGlvbjsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPkluIHRoZSBjYXNlIG9mIFFQU0sgZnJvbnRlbmRzIHRoZSA8Y29uc3RhbnQ+RnJlcXVlbmN5PC9jb25zdGFudD4gZmllbGQgc3BlY2lmaWVzIHRoZSBpbnRlcm1lZGlhdGUKK2ZyZXF1ZW5jeSwgaS5lLiB0aGUgb2Zmc2V0IHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGFkZGVkIHRvIHRoZSBsb2NhbCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAoTE9GKSBvZgordGhlIExOQi4gVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaGFzIHRvIGJlIHNwZWNpZmllZCBpbiB1bml0cyBvZiBrSHouIEZvciBRQU0gYW5kCitPRkRNIGZyb250ZW5kcyB0aGUgRnJlcXVlbmN5IHNwZWNpZmllcyB0aGUgYWJzb2x1dGUgZnJlcXVlbmN5IGFuZCBpcyBnaXZlbiBpbgorSHouCis8L3BhcmE+Cis8cGFyYT5UaGUgSW52ZXJzaW9uIGZpZWxkIGNhbiB0YWtlIG9uZSBvZiB0aGVzZSB2YWx1ZXM6Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIGZlX3NwZWN0cmFsX2ludmVyc2lvbiB7CisJIElOVkVSU0lPTl9PRkYsCisJIElOVkVSU0lPTl9PTiwKKwkgSU5WRVJTSU9OX0FVVE8KKyB9IGZlX3NwZWN0cmFsX2ludmVyc2lvbl90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPkl0IGluZGljYXRlcyBpZiBzcGVjdHJhbCBpbnZlcnNpb24gc2hvdWxkIGJlIHByZXN1bWVkIG9yIG5vdC4gSW4gdGhlIGF1dG9tYXRpYyBzZXR0aW5nCisoPGNvbnN0YW50PklOVkVSU0lPTl9BVVRPPC9jb25zdGFudD4pIHRoZSBoYXJkd2FyZSB3aWxsIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IHNldHRpbmcgYnkKK2l0c2VsZi4KKzwvcGFyYT4KKzxwYXJhPlRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSA8Y29uc3RhbnQ+RkVDX2lubmVyPC9jb25zdGFudD4gZmllbGQgYXJlCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIGZlX2NvZGVfcmF0ZSB7CisJIEZFQ19OT05FID0gMCwKKwkgRkVDXzFfMiwKKwkgRkVDXzJfMywKKwkgRkVDXzNfNCwKKwkgRkVDXzRfNSwKKwkgRkVDXzVfNiwKKwkgRkVDXzZfNywKKwkgRkVDXzdfOCwKKwkgRkVDXzhfOSwKKwkgRkVDX0FVVE8KKyB9IGZlX2NvZGVfcmF0ZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPndoaWNoIGNvcnJlc3BvbmQgdG8gZXJyb3IgY29ycmVjdGlvbiByYXRlcyBvZiAxLzIsIDIvMywgZXRjLiwgbm8gZXJyb3IgY29ycmVjdGlvbiBvciBhdXRvCitkZXRlY3Rpb24uCis8L3BhcmE+Cis8cGFyYT5Gb3IgY2FibGUgYW5kIHRlcnJlc3RyaWFsIGZyb250ZW5kcyAoUUFNIGFuZCBPRkRNKSBvbmUgYWxzbyBoYXMgdG8gc3BlY2lmeSB0aGUgcXVhZHJhdHVyZQorbW9kdWxhdGlvbiBtb2RlIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0gZmVfbW9kdWxhdGlvbiB7CisgUVBTSywKKwkgUUFNXzE2LAorCSBRQU1fMzIsCisJIFFBTV82NCwKKwkgUUFNXzEyOCwKKwkgUUFNXzI1NiwKKwkgUUFNX0FVVE8KKyB9IGZlX21vZHVsYXRpb25fdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5GaW5hbGx5LCB0aGVyZSBhcmUgc2V2ZXJhbCBtb3JlIHBhcmFtZXRlcnMgZm9yIE9GRE06Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIGZlX3RyYW5zbWl0X21vZGUgeworCSBUUkFOU01JU1NJT05fTU9ERV8ySywKKwkgVFJBTlNNSVNTSU9OX01PREVfOEssCisJIFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8KKyB9IGZlX3RyYW5zbWl0X21vZGVfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSBmZV9iYW5kd2lkdGggeworCSBCQU5EV0lEVEhfOF9NSFosCisJIEJBTkRXSURUSF83X01IWiwKKwkgQkFORFdJRFRIXzZfTUhaLAorCSBCQU5EV0lEVEhfQVVUTworIH0gZmVfYmFuZHdpZHRoX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorIDxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0gZmVfZ3VhcmRfaW50ZXJ2YWwgeworCSBHVUFSRF9JTlRFUlZBTF8xXzMyLAorCSBHVUFSRF9JTlRFUlZBTF8xXzE2LAorCSBHVUFSRF9JTlRFUlZBTF8xXzgsCisJIEdVQVJEX0lOVEVSVkFMXzFfNCwKKwkgR1VBUkRfSU5URVJWQUxfQVVUTworIH0gZmVfZ3VhcmRfaW50ZXJ2YWxfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSBmZV9oaWVyYXJjaHkgeworCSBISUVSQVJDSFlfTk9ORSwKKwkgSElFUkFSQ0hZXzEsCisJIEhJRVJBUkNIWV8yLAorCSBISUVSQVJDSFlfNCwKKwkgSElFUkFSQ0hZX0FVVE8KKyB9IGZlX2hpZXJhcmNoeV90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZXZlbnRzIj4KKzx0aXRsZT5mcm9udGVuZCBldmVudHM8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX2V2ZW50IHsKKwkgZmVfc3RhdHVzX3Qgc3RhdHVzOworCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyB9OworPC9wcm9ncmFtbGlzdGluZz4KKyA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2ZjYWxscyI+Cis8dGl0bGU+RnJvbnRlbmQgRnVuY3Rpb24gQ2FsbHM8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZl9vcGVuIj4KKzx0aXRsZT5vcGVuKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT048L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PgorPGVudHJ5IGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgb3BlbnMgYSBuYW1lZCBmcm9udGVuZCBkZXZpY2UgKC9kZXYvZHZiL2FkYXB0ZXIwL2Zyb250ZW5kMCkKKyBmb3Igc3Vic2VxdWVudCB1c2UuIFVzdWFsbHkgdGhlIGZpcnN0IHRoaW5nIHRvIGRvIGFmdGVyIGEgc3VjY2Vzc2Z1bCBvcGVuIGlzIHRvCisgZmluZCBvdXQgdGhlIGZyb250ZW5kIHR5cGUgd2l0aCBGRV9HRVRfSU5GTy48L3BhcmE+Cis8cGFyYT5UaGUgZGV2aWNlIGNhbiBiZSBvcGVuZWQgaW4gcmVhZC1vbmx5IG1vZGUsIHdoaWNoIG9ubHkgYWxsb3dzIG1vbml0b3Jpbmcgb2YKKyBkZXZpY2Ugc3RhdHVzIGFuZCBzdGF0aXN0aWNzLCBvciByZWFkL3dyaXRlIG1vZGUsIHdoaWNoIGFsbG93cyBhbnkga2luZCBvZiB1c2UKKyAoZS5nLiBwZXJmb3JtaW5nIHR1bmluZyBvcGVyYXRpb25zLikKKzwvcGFyYT4KKzxwYXJhPkluIGEgc3lzdGVtIHdpdGggbXVsdGlwbGUgZnJvbnQtZW5kcywgaXQgaXMgdXN1YWxseSB0aGUgY2FzZSB0aGF0IG11bHRpcGxlIGRldmljZXMKKyBjYW5ub3QgYmUgb3BlbiBpbiByZWFkL3dyaXRlIG1vZGUgc2ltdWx0YW5lb3VzbHkuIEFzIGxvbmcgYXMgYSBmcm9udC1lbmQKKyBkZXZpY2UgaXMgb3BlbmVkIGluIHJlYWQvd3JpdGUgbW9kZSwgb3RoZXIgb3BlbigpIGNhbGxzIGluIHJlYWQvd3JpdGUgbW9kZSB3aWxsCisgZWl0aGVyIGZhaWwgb3IgYmxvY2ssIGRlcGVuZGluZyBvbiB3aGV0aGVyIG5vbi1ibG9ja2luZyBvciBibG9ja2luZyBtb2RlIHdhcworIHNwZWNpZmllZC4gQSBmcm9udC1lbmQgZGV2aWNlIG9wZW5lZCBpbiBibG9ja2luZyBtb2RlIGNhbiBsYXRlciBiZSBwdXQgaW50bworIG5vbi1ibG9ja2luZyBtb2RlIChhbmQgdmljZSB2ZXJzYSkgdXNpbmcgdGhlIEZfU0VURkwgY29tbWFuZCBvZiB0aGUgZmNudGwKKyBzeXN0ZW0gY2FsbC4gVGhpcyBpcyBhIHN0YW5kYXJkIHN5c3RlbSBjYWxsLCBkb2N1bWVudGVkIGluIHRoZSBMaW51eCBtYW51YWwKKyBwYWdlIGZvciBmY250bC4gV2hlbiBhbiBvcGVuKCkgY2FsbCBoYXMgc3VjY2VlZGVkLCB0aGUgZGV2aWNlIHdpbGwgYmUgcmVhZHkKKyBmb3IgdXNlIGluIHRoZSBzcGVjaWZpZWQgbW9kZS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgaGFyZHdhcmUgaXMKKyBwb3dlcmVkIHVwLCBhbmQgdGhhdCBvdGhlciBmcm9udC1lbmRzIG1heSBoYXZlIGJlZW4gcG93ZXJlZCBkb3duIHRvIG1ha2UKKyB0aGF0IHBvc3NpYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlNZTk9QU0lTPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgb3Blbihjb25zdCBjaGFyICYjeDIyQzY7ZGV2aWNlTmFtZSwgaW50IGZsYWdzKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5jb25zdCBjaGFyCisgKmRldmljZU5hbWU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5hbWUgb2Ygc3BlY2lmaWMgdmlkZW8gZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmxhZ3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgYml0LXdpc2UgT1Igb2YgdGhlIGZvbGxvd2luZyBmbGFnczo8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JET05MWSByZWFkLW9ubHkgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19SRFdSIHJlYWQvd3JpdGUgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19OT05CTE9DSyBvcGVuIGluIG5vbi1ibG9ja2luZyBtb2RlPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+KGJsb2NraW5nIG1vZGUgaXMgdGhlIGRlZmF1bHQpPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9mX2Nsb3NlIj4KKzx0aXRsZT5jbG9zZSgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgY2xvc2VzIGEgcHJldmlvdXNseSBvcGVuZWQgZnJvbnQtZW5kIGRldmljZS4gQWZ0ZXIgY2xvc2luZworIGEgZnJvbnQtZW5kIGRldmljZSwgaXRzIGNvcnJlc3BvbmRpbmcgaGFyZHdhcmUgbWlnaHQgYmUgcG93ZXJlZCBkb3duCisgYXV0b21hdGljYWxseS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGludCBmZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcmVhZF9zdGF0dXMiPgorPHRpdGxlPkZFX1JFQURfU1RBVFVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZnJvbnQtZW5kLiBUaGlzIGNhbGwgb25seQorIHJlcXVpcmVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBGRV9SRUFEX1NUQVRVUywKKyBmZV9zdGF0dXNfdCAmI3gyMkM2O3N0YXR1cyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKworPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1JFQURfU1RBVFVTIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdCBmZV9zdGF0dXNfdAorICpzdGF0dXM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGZyb250LWVuZCBzdGF0dXMgd29yZCBpcworIHRvIGJlIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdGF0dXMgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcmVhZF9iZXIiPgorPHRpdGxlPkZFX1JFQURfQkVSPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIHRoZSBiaXQgZXJyb3IgcmF0ZSBmb3IgdGhlIHNpZ25hbCBjdXJyZW50bHkKKyByZWNlaXZlZC9kZW1vZHVsYXRlZCBieSB0aGUgZnJvbnQtZW5kLiBGb3IgdGhpcyBjb21tYW5kLCByZWFkLW9ubHkgYWNjZXNzIHRvCisgdGhlIGRldmljZSBpcyBzdWZmaWNpZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX1JFQURfQkVSLAorIHVpbnQzMl90ICYjeDIyQzY7YmVyKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1JFQURfQkVSIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnVpbnQzMl90ICpiZXI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBiaXQgZXJyb3IgcmF0ZSBpcyBzdG9yZWQgaW50byAqYmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJlciBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TSUdOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZXJlIGlzIG5vIHNpZ25hbCwgdGh1cyBubyBtZWFuaW5nZnVsIGJpdCBlcnJvciByYXRlLiBBbHNvCisgcmV0dXJuZWQgaWYgdGhlIGZyb250LWVuZCBpcyBub3QgdHVybmVkIG9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9yZWFkX3NuciI+Cis8dGl0bGU+RkVfUkVBRF9TTlI8L3RpdGxlPgorCis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyB0aGUgc2lnbmFsLXRvLW5vaXNlIHJhdGlvIGZvciB0aGUgc2lnbmFsIGN1cnJlbnRseSByZWNlaXZlZAorIGJ5IHRoZSBmcm9udC1lbmQuIEZvciB0aGlzIGNvbW1hbmQsIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBzdWZmaWNpZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX1JFQURfU05SLCBpbnQxNl90CisgJiN4MjJDNjtzbnIpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfUkVBRF9TTlIgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50MTZfdCAqc25yPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgc2lnbmFsLXRvLW5vaXNlIHJhdGlvIGlzIHN0b3JlZCBpbnRvICpzbnIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zbnIgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PU0lHTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGVyZSBpcyBubyBzaWduYWwsIHRodXMgbm8gbWVhbmluZ2Z1bCBzaWduYWwgc3RyZW5ndGgKKyB2YWx1ZS4gQWxzbyByZXR1cm5lZCBpZiBmcm9udC1lbmQgaXMgbm90IHR1cm5lZCBvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PU1lTPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfcmVhZF9zaWduYWxfc3RyZW5ndGgiPgorPHRpdGxlPkZFX1JFQURfU0lHTkFMX1NUUkVOR1RIPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIHRoZSBzaWduYWwgc3RyZW5ndGggdmFsdWUgZm9yIHRoZSBzaWduYWwgY3VycmVudGx5IHJlY2VpdmVkCisgYnkgdGhlIGZyb250LWVuZC4gRm9yIHRoaXMgY29tbWFuZCwgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN1ZmZpY2llbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9CisgRkVfUkVBRF9TSUdOQUxfU1RSRU5HVEgsIGludDE2X3QgJiN4MjJDNjtzdHJlbmd0aCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1JFQURfU0lHTkFMX1NUUkVOR1RIIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50MTZfdCAqc3RyZW5ndGg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzaWduYWwgc3RyZW5ndGggdmFsdWUgaXMgc3RvcmVkIGludG8gKnN0cmVuZ3RoLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0YXR1cyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TSUdOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZXJlIGlzIG5vIHNpZ25hbCwgdGh1cyBubyBtZWFuaW5nZnVsIHNpZ25hbCBzdHJlbmd0aAorIHZhbHVlLiBBbHNvIHJldHVybmVkIGlmIGZyb250LWVuZCBpcyBub3QgdHVybmVkIG9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9yZWFkX3ViIj4KKzx0aXRsZT5GRV9SRUFEX1VOQ09SUkVDVEVEX0JMT0NLUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29ycmVjdGVkIGJsb2NrcyBkZXRlY3RlZCBieSB0aGUgZGV2aWNlCisgZHJpdmVyIGR1cmluZyBpdHMgbGlmZXRpbWUuIEZvciBtZWFuaW5nZnVsIG1lYXN1cmVtZW50cywgdGhlIGluY3JlbWVudCBpbiBibG9jaworIGNvdW50IGR1cmluZyBhIHNwZWNpZmljIHRpbWUgaW50ZXJ2YWwgc2hvdWxkIGJlIGNhbGN1bGF0ZWQuIEZvciB0aGlzIGNvbW1hbmQsCisgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHN1ZmZpY2llbnQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vdGUgdGhhdCB0aGUgY291bnRlciB3aWxsIHdyYXAgdG8gemVybyBhZnRlciBpdHMgbWF4aW11bSBjb3VudCBoYXMgYmVlbgorIHJlYWNoZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bCggaW50IGZkLCBpbnQgcmVxdWVzdCA9CisgRkVfUkVBRF9VTkNPUlJFQ1RFRF9CTE9DS1MsIHVpbnQzMl90ICYjeDIyQzY7dWJsb2Nrcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9SRUFEX1VOQ09SUkVDVEVEX0JMT0NLUyBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnVpbnQzMl90ICp1YmxvY2tzPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgdG90YWwgbnVtYmVyIG9mIHVuY29ycmVjdGVkIGJsb2NrcyBzZWVuIGJ5IHRoZSBkcml2ZXIKKyBzbyBmYXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dWJsb2NrcyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9zZXRfZmUiPgorPHRpdGxlPkZFX1NFVF9GUk9OVEVORDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgc3RhcnRzIGEgdHVuaW5nIG9wZXJhdGlvbiB1c2luZyBzcGVjaWZpZWQgcGFyYW1ldGVycy4gVGhlIHJlc3VsdAorIG9mIHRoaXMgY2FsbCB3aWxsIGJlIHN1Y2Nlc3NmdWwgaWYgdGhlIHBhcmFtZXRlcnMgd2VyZSB2YWxpZCBhbmQgdGhlIHR1bmluZyBjb3VsZAorIGJlIGluaXRpYXRlZC4gVGhlIHJlc3VsdCBvZiB0aGUgdHVuaW5nIG9wZXJhdGlvbiBpbiBpdHNlbGYsIGhvd2V2ZXIsIHdpbGwgYXJyaXZlCisgYXN5bmNocm9ub3VzbHkgYXMgYW4gZXZlbnQgKHNlZSBkb2N1bWVudGF0aW9uIGZvciBGRV9HRVRfRVZFTlQgYW5kCisgRnJvbnRlbmRFdmVudC4pIElmIGEgbmV3IEZFX1NFVF9GUk9OVEVORCBvcGVyYXRpb24gaXMgaW5pdGlhdGVkIGJlZm9yZQorIHRoZSBwcmV2aW91cyBvbmUgd2FzIGNvbXBsZXRlZCwgdGhlIHByZXZpb3VzIG9wZXJhdGlvbiB3aWxsIGJlIGFib3J0ZWQgaW4gZmF2b3IKKyBvZiB0aGUgbmV3IG9uZS4gVGhpcyBjb21tYW5kIHJlcXVpcmVzIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBGRV9TRVRfRlJPTlRFTkQsCisgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICYjeDIyQzY7cCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9TRVRfRlJPTlRFTkQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RydWN0CisgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMKKyAqcDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRzIHRvIHBhcmFtZXRlcnMgZm9yIHR1bmluZyBvcGVyYXRpb24uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+cCBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk1heGltdW0gc3VwcG9ydGVkIHN5bWJvbCByYXRlIHJlYWNoZWQuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZ2V0X2ZlIj4KKzx0aXRsZT5GRV9HRVRfRlJPTlRFTkQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHF1ZXJpZXMgdGhlIGN1cnJlbnRseSBlZmZlY3RpdmUgZnJvbnRlbmQgcGFyYW1ldGVycy4gRm9yIHRoaXMKKyBjb21tYW5kLCByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBkZXZpY2UgaXMgc3VmZmljaWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX0dFVF9GUk9OVEVORCwKKyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgJiN4MjJDNjtwKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfU0VUX0ZST05URU5EIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdAorIGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzCisgKnA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50cyB0byBwYXJhbWV0ZXJzIGZvciB0dW5pbmcgb3BlcmF0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPkVSUk9SUworPC9wYXJhPgorCis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5wIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TWF4aW11bSBzdXBwb3J0ZWQgc3ltYm9sIHJhdGUgcmVhY2hlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9nZXRfZXZlbnQiPgorPHRpdGxlPkZFX0dFVF9FVkVOVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyBhIGZyb250ZW5kIGV2ZW50IGlmIGF2YWlsYWJsZS4gSWYgYW4gZXZlbnQgaXMgbm90CisgYXZhaWxhYmxlLCB0aGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgaW4gYmxvY2tpbmcgb3IKKyBub24tYmxvY2tpbmcgbW9kZS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgY2FsbCBmYWlscyBpbW1lZGlhdGVseSB3aXRoIGVycm5vCisgc2V0IHRvIEVXT1VMREJMT0NLLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBjYWxsIGJsb2NrcyB1bnRpbCBhbiBldmVudAorIGJlY29tZXMgYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgc3RhbmRhcmQgTGludXggcG9sbCgpIGFuZC9vciBzZWxlY3QoKSBzeXN0ZW0gY2FsbHMgY2FuIGJlIHVzZWQgd2l0aCB0aGUKKyBkZXZpY2UgZmlsZSBkZXNjcmlwdG9yIHRvIHdhdGNoIGZvciBuZXcgZXZlbnRzLiBGb3Igc2VsZWN0KCksIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGV4Y2VwdGZkcyBhcmd1bWVudCwgYW5kIGZvciBwb2xsKCksIFBPTExQUkkgc2hvdWxkCisgYmUgc3BlY2lmaWVkIGFzIHRoZSB3YWtlLXVwIGNvbmRpdGlvbi4gU2luY2UgdGhlIGV2ZW50IHF1ZXVlIGFsbG9jYXRlZCBpcworIHJhdGhlciBzbWFsbCAocm9vbSBmb3IgOCBldmVudHMpLCB0aGUgcXVldWUgbXVzdCBiZSBzZXJ2aWNlZCByZWd1bGFybHkgdG8gYXZvaWQKKyBvdmVyZmxvdy4gSWYgYW4gb3ZlcmZsb3cgaGFwcGVucywgdGhlIG9sZGVzdCBldmVudCBpcyBkaXNjYXJkZWQgZnJvbSB0aGUgcXVldWUsCisgYW5kIGFuIGVycm9yIChFT1ZFUkZMT1cpIG9jY3VycyB0aGUgbmV4dCB0aW1lIHRoZSBxdWV1ZSBpcyByZWFkLiBBZnRlcgorIHJlcG9ydGluZyB0aGUgZXJyb3IgY29uZGl0aW9uIGluIHRoaXMgZmFzaGlvbiwgc3Vic2VxdWVudCBGRV9HRVRfRVZFTlQKKyBjYWxscyB3aWxsIHJldHVybiBldmVudHMgZnJvbSB0aGUgcXVldWUgYXMgdXN1YWwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZvciB0aGUgc2FrZSBvZiBpbXBsZW1lbnRhdGlvbiBzaW1wbGljaXR5LCB0aGlzIGNvbW1hbmQgcmVxdWlyZXMgcmVhZC93cml0ZQorIGFjY2VzcyB0byB0aGUgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gUVBTS19HRVRfRVZFTlQsCisgc3RydWN0IGR2Yl9mcm9udGVuZF9ldmVudCAmI3gyMkM2O2V2KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfR0VUX0VWRU5UIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdAorIGR2Yl9mcm9udGVuZF9ldmVudAorICpldjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgZXZlbnQsPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aWYgYW55LCBpcyB0byBiZSBzdG9yZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ldiBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlcmUgaXMgbm8gZXZlbnQgcGVuZGluZywgYW5kIHRoZSBkZXZpY2UgaXMgaW4KKyBub24tYmxvY2tpbmcgbW9kZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU9WRVJGTE9XPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PdmVyZmxvdyBpbiBldmVudCBxdWV1ZSAtIG9uZSBvciBtb3JlIGV2ZW50cyB3ZXJlIGxvc3QuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZ2V0X2luZm8iPgorPHRpdGxlPkZFX0dFVF9JTkZPPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmcm9udC1lbmQuIFRoaXMgY2FsbCBvbmx5IHJlcXVpcmVzCisgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorCis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX0dFVF9JTkZPLCBzdHJ1Y3QKKyBkdmJfZnJvbnRlbmRfaW5mbyAmI3gyMkM2O2luZm8pOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+CisKKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9HRVRfSU5GTyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkdmJfZnJvbnRlbmRfaW5mbworICppbmZvPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBmcm9udC1lbmQgaW5mb3JtYXRpb24gaXMKKyB0byBiZSBzdG9yZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW5mbyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+Cis8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2Rpc2VxY19yZXNldF9vdmVybG9hZCI+Cis8dGl0bGU+RkVfRElTRVFDX1JFU0VUX09WRVJMT0FEPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklmIHRoZSBidXMgaGFzIGJlZW4gYXV0b21hdGljYWxseSBwb3dlcmVkIG9mZiBkdWUgdG8gcG93ZXIgb3ZlcmxvYWQsIHRoaXMgaW9jdGwKKyBjYWxsIHJlc3RvcmVzIHRoZSBwb3dlciB0byB0aGUgYnVzLiBUaGUgY2FsbCByZXF1aXJlcyByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUKKyBkZXZpY2UuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBkZXZpY2UgaXMgbWFudWFsbHkgcG93ZXJlZCBvZmYuIE5vdCBhbGwKKyBEVkIgYWRhcHRlcnMgc3VwcG9ydCB0aGlzIGlvY3RsLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0KKyBGRV9ESVNFUUNfUkVTRVRfT1ZFUkxPQUQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgRkVfRElTRVFDX1JFU0VUX09WRVJMT0FEIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBlcm1pc3Npb24gZGVuaWVkIChuZWVkcyByZWFkL3dyaXRlIGFjY2VzcykuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IgaW4gdGhlIGRldmljZSBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCI+Cis8dGl0bGU+RkVfRElTRVFDX1NFTkRfTUFTVEVSX0NNRDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgaXMgdXNlZCB0byBzZW5kIGEgYSBEaVNFcUMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEZFX0RJU0VRQ19TRU5EX01BU1RFUl9DTUQsIHN0cnVjdAorIGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAmI3gyMkM2O2NtZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX0RJU0VRQ19TRU5EX01BU1RFUl9DTUQgZm9yIHRoaXMKKyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QKKyBkdmJfZGlzZXFjX21hc3Rlcl9jbWQKKyAqY21kPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBjb21tYW5kIHRvIGJlIHRyYW5zbWl0dGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNlcSBwb2ludHMgdG8gYW4gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBkYXRhIHN0cnVjdHVyZSByZWZlcnJlZCB0byBieSBzZXEgaXMgaW52YWxpZCBpbiBzb21lCisgd2F5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FUEVSTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UGVybWlzc2lvbiBkZW5pZWQgKG5lZWRzIHJlYWQvd3JpdGUgYWNjZXNzKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Cis8L2VudHJ5PgorPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9kaXNlcWNfcmVjdl9zbGF2ZV9yZXBseSI+Cis8dGl0bGU+RkVfRElTRVFDX1JFQ1ZfU0xBVkVfUkVQTFk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGlzIHVzZWQgdG8gcmVjZWl2ZSByZXBseSB0byBhIERpU0VxQyAyLjAgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9CisgRkVfRElTRVFDX1JFQ1ZfU0xBVkVfUkVQTFksIHN0cnVjdAorIGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkgJiN4MjJDNjtyZXBseSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX0RJU0VRQ19SRUNWX1NMQVZFX1JFUExZIGZvciB0aGlzCisgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RydWN0CisgZHZiX2Rpc2VxY19zbGF2ZV9yZXBseQorICpyZXBseTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgY29tbWFuZCB0byBiZSByZWNlaXZlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U2VxIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRhdGEgc3RydWN0dXJlIHJlZmVycmVkIHRvIGJ5IHNlcSBpcyBpbnZhbGlkIGluIHNvbWUKKyB3YXkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVQRVJNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5QZXJtaXNzaW9uIGRlbmllZCAobmVlZHMgcmVhZC93cml0ZSBhY2Nlc3MpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yIGluIHRoZSBkZXZpY2UgZHJpdmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmcm9udGVuZF9kaXNlcWNfc2VuZF9idXJzdCI+Cis8dGl0bGU+RkVfRElTRVFDX1NFTkRfQlVSU1Q8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGlzIHVzZWQgdG8gc2VuZCBhIDIyS0h6IHRvbmUgYnVyc3QuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEZFX0RJU0VRQ19TRU5EX0JVUlNULCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX0RJU0VRQ19TRU5EX0JVUlNUIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZlX3NlY19taW5pX2NtZF90CisgYnVyc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJ1cnN0IEEgb3IgQi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TZXEgcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZGF0YSBzdHJ1Y3R1cmUgcmVmZXJyZWQgdG8gYnkgc2VxIGlzIGludmFsaWQgaW4gc29tZQorIHdheS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBlcm1pc3Npb24gZGVuaWVkIChuZWVkcyByZWFkL3dyaXRlIGFjY2VzcykuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IgaW4gdGhlIGRldmljZSBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKzwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZnJvbnRlbmRfc2V0X3RvbmUiPgorPHRpdGxlPkZFX1NFVF9UT05FPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgY2FsbCBpcyB1c2VkIHRvIHNldCB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgY29udGludW91cyAyMmtIeiB0b25lLiBUaGlzIGNhbGwKKyByZXF1aXJlcyByZWFkL3dyaXRlIHBlcm1pc3Npb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCA9IEZFX1NFVF9UT05FLAorIGZlX3NlY190b25lX21vZGVfdCB0b25lKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1NFVF9UT05FIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZlX3NlY190b25lX21vZGVfdAorIHRvbmU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSByZXF1ZXN0ZWQgdG9uZSBnZW5lcmF0aW9uIG1vZGUgKG9uL29mZikuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FUEVSTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBub3Qgb3BlbmVkIHdpdGggcmVhZCBwZXJtaXNzaW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Cis8L2VudHJ5PgorPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJmZV9zZXRfdm9sdGFnZSI+Cis8dGl0bGU+RkVfU0VUX1ZPTFRBR0U8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBjYWxsIGlzIHVzZWQgdG8gc2V0IHRoZSBidXMgdm9sdGFnZS4gVGhpcyBjYWxsIHJlcXVpcmVzIHJlYWQvd3JpdGUKKyBwZXJtaXNzaW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBGRV9TRVRfVk9MVEFHRSwKKyBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBGRV9TRVRfVk9MVEFHRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZV9zZWNfdm9sdGFnZV90Cisgdm9sdGFnZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHJlcXVlc3RlZCBidXMgdm9sdGFnZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PREVWPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2UgZHJpdmVyIG5vdCBsb2FkZWQvYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RGV2aWNlIG9yIHJlc291cmNlIGJ1c3kuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW52YWxpZCBhcmd1bWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgbm90IG9wZW5lZCB3aXRoIHJlYWQgcGVybWlzc2lvbnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IgaW4gdGhlIGRldmljZSBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2VuYWJsZV9oaWdoX2xuYl92b2x0Ij4KKzx0aXRsZT5GRV9FTkFCTEVfSElHSF9MTkJfVk9MVEFHRTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JZiBoaWdoICE9IDAgZW5hYmxlcyBzbGlnaHRseSBoaWdoZXIgdm9sdGFnZXMgaW5zdGVhZCBvZiAxMy8xOFYgKHRvIGNvbXBlbnNhdGUKKyBmb3IgbG9uZyBjYWJsZXMpLiBUaGlzIGNhbGwgcmVxdWlyZXMgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gTm90IGFsbCBEVkIKKyBhZGFwdGVycyBzdXBwb3J0IHRoaXMgaW9jdGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPQorIEZFX0VOQUJMRV9ISUdIX0xOQl9WT0xUQUdFLCBpbnQgaGlnaCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIEZFX1NFVF9WT0xUQUdFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBoaWdoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgcmVxdWVzdGVkIGJ1cyB2b2x0YWdlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FUEVSTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBub3Qgb3BlbmVkIHdpdGggcmVhZCBwZXJtaXNzaW9ucy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorJnN1Yi1pc2RidDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvaW50cm8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjODNmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvaW50cm8ueG1sCkBAIC0wLDAgKzEsMTkxIEBACis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9InJlcXVpc2l0ZXMiPgorPHRpdGxlPldoYXQgeW91IG5lZWQgdG8ga25vdzwvdGl0bGU+CisKKzxwYXJhPlRoZSByZWFkZXIgb2YgdGhpcyBkb2N1bWVudCBpcyByZXF1aXJlZCB0byBoYXZlIHNvbWUga25vd2xlZGdlIGluCit0aGUgYXJlYSBvZiBkaWdpdGFsIHZpZGVvIGJyb2FkY2FzdGluZyAoRFZCKSBhbmQgc2hvdWxkIGJlIGZhbWlsaWFyIHdpdGgKK3BhcnQgSSBvZiB0aGUgTVBFRzIgc3BlY2lmaWNhdGlvbiBJU08vSUVDIDEzODE4IChha2EgSVRVLVQgSC4yMjIpLCBpLmUKK3lvdSBzaG91bGQga25vdyB3aGF0IGEgcHJvZ3JhbS90cmFuc3BvcnQgc3RyZWFtIChQUy9UUykgaXMgYW5kIHdoYXQgaXMKK21lYW50IGJ5IGEgcGFja2V0aXplZCBlbGVtZW50YXJ5IHN0cmVhbSAoUEVTKSBvciBhbiBJLWZyYW1lLjwvcGFyYT4KKworPHBhcmE+VmFyaW91cyBEVkIgc3RhbmRhcmRzIGRvY3VtZW50cyBhcmUgYXZhaWxhYmxlIGZyb20KKzx1bGluayB1cmw9Imh0dHA6Ly93d3cuZHZiLm9yZyIgLz4gYW5kL29yCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIiAvPi48L3BhcmE+CisKKzxwYXJhPkl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIGtub3cgaG93IHRvIGFjY2VzcyB1bml4L2xpbnV4IGRldmljZXMgYW5kCitob3cgdG8gdXNlIGlvY3RsIGNhbGxzLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIGtub3dsZWRnZSBvZiBDIG9yIEMrKy4KKzwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9Imhpc3RvcnkiPgorPHRpdGxlPkhpc3Rvcnk8L3RpdGxlPgorCis8cGFyYT5UaGUgZmlyc3QgQVBJIGZvciBEVkIgY2FyZHMgd2UgdXNlZCBhdCBDb252ZXJnZW5jZSBpbiBsYXRlIDE5OTkKK3dhcyBhbiBleHRlbnNpb24gb2YgdGhlIFZpZGVvNExpbnV4IEFQSSB3aGljaCB3YXMgcHJpbWFyaWx5IGRldmVsb3BlZAorZm9yIGZyYW1lIGdyYWJiZXIgY2FyZHMuIEFzIHN1Y2ggaXQgd2FzIG5vdCByZWFsbHkgd2VsbCBzdWl0ZWQgdG8gYmUKK3VzZWQgZm9yIERWQiBjYXJkcyBhbmQgdGhlaXIgbmV3IGZlYXR1cmVzIGxpa2UgcmVjb3JkaW5nIE1QRUcgc3RyZWFtcworYW5kIGZpbHRlcmluZyBzZXZlcmFsIHNlY3Rpb24gYW5kIFBFUyBkYXRhIHN0cmVhbXMgYXQgdGhlIHNhbWUgdGltZS4KKzwvcGFyYT4KKworPHBhcmE+SW4gZWFybHkgMjAwMCwgd2Ugd2VyZSBhcHByb2FjaGVkIGJ5IE5va2lhIHdpdGggYSBwcm9wb3NhbCBmb3IgYQorbmV3IHN0YW5kYXJkIExpbnV4IERWQiBBUEkuIEFzIGEgY29tbWl0bWVudCB0byB0aGUgZGV2ZWxvcG1lbnQgb2YKK3Rlcm1pbmFscyBiYXNlZCBvbiBvcGVuIHN0YW5kYXJkcywgTm9raWEgYW5kIENvbnZlcmdlbmNlIG1hZGUgaXQKK2F2YWlsYWJsZSB0byBhbGwgTGludXggZGV2ZWxvcGVycyBhbmQgcHVibGlzaGVkIGl0IG9uCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxpbnV4dHYub3JnLyIgLz4gaW4gU2VwdGVtYmVyIDIwMDAuCitDb252ZXJnZW5jZSBpcyB0aGUgbWFpbnRhaW5lciBvZiB0aGUgTGludXggRFZCIEFQSS4gVG9nZXRoZXIgd2l0aCB0aGUKK0xpbnV4VFYgY29tbXVuaXR5IChpLmUuIHlvdSwgdGhlIHJlYWRlciBvZiB0aGlzIGRvY3VtZW50KSwgdGhlIExpbnV4IERWQgorQVBJIHdpbGwgYmUgY29uc3RhbnRseSByZXZpZXdlZCBhbmQgaW1wcm92ZWQuIFdpdGggdGhlIExpbnV4IGRyaXZlciBmb3IKK3RoZSBTaWVtZW5zL0hhdXBwYXVnZSBEVkIgUENJIGNhcmQgQ29udmVyZ2VuY2UgcHJvdmlkZXMgYSBmaXJzdAoraW1wbGVtZW50YXRpb24gb2YgdGhlIExpbnV4IERWQiBBUEkuPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ib3ZlcnZpZXciPgorPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworPGZpZ3VyZSBpZD0ic3RiX2NvbXBvbmVudHMiPgorPHRpdGxlPkNvbXBvbmVudHMgb2YgYSBEVkIgY2FyZC9TVEI8L3RpdGxlPgorPG1lZGlhb2JqZWN0PgorPGltYWdlb2JqZWN0PgorPGltYWdlZGF0YSBmaWxlcmVmPSJkdmJzdGIucGRmIiBmb3JtYXQ9IlBTIiAvPgorPC9pbWFnZW9iamVjdD4KKzxpbWFnZW9iamVjdD4KKzxpbWFnZWRhdGEgZmlsZXJlZj0iZHZic3RiLnBuZyIgZm9ybWF0PSJQTkciIC8+Cis8L2ltYWdlb2JqZWN0PgorPC9tZWRpYW9iamVjdD4KKzwvZmlndXJlPgorCis8cGFyYT5BIERWQiBQQ0kgY2FyZCBvciBEVkIgc2V0LXRvcC1ib3ggKFNUQikgdXN1YWxseSBjb25zaXN0cyBvZiB0aGUKK2ZvbGxvd2luZyBtYWluIGhhcmR3YXJlIGNvbXBvbmVudHM6IDwvcGFyYT4KKworPGl0ZW1pemVkbGlzdD4KKyA8bGlzdGl0ZW0+CisKKzxwYXJhPkZyb250ZW5kIGNvbnNpc3Rpbmcgb2YgdHVuZXIgYW5kIERWQiBkZW1vZHVsYXRvcjwvcGFyYT4KKworPHBhcmE+SGVyZSB0aGUgcmF3IHNpZ25hbCByZWFjaGVzIHRoZSBEVkIgaGFyZHdhcmUgZnJvbSBhIHNhdGVsbGl0ZSBkaXNoCitvciBhbnRlbm5hIG9yIGRpcmVjdGx5IGZyb20gY2FibGUuIFRoZSBmcm9udGVuZCBkb3duLWNvbnZlcnRzIGFuZAorZGVtb2R1bGF0ZXMgdGhpcyBzaWduYWwgaW50byBhbiBNUEVHIHRyYW5zcG9ydCBzdHJlYW0gKFRTKS4gSW4gY2FzZSBvZiBhCitzYXRlbGxpdGUgZnJvbnRlbmQsIHRoaXMgaW5jbHVkZXMgYSBmYWNpbGl0eSBmb3Igc2F0ZWxsaXRlIGVxdWlwbWVudAorY29udHJvbCAoU0VDKSwgd2hpY2ggYWxsb3dzIGNvbnRyb2wgb2YgTE5CIHBvbGFyaXphdGlvbiwgbXVsdGkgZmVlZAorc3dpdGNoZXMgb3IgZGlzaCByb3RvcnMuPC9wYXJhPgorCis8L2xpc3RpdGVtPgorIDxsaXN0aXRlbT4KKworPHBhcmE+Q29uZGl0aW9uYWwgQWNjZXNzIChDQSkgaGFyZHdhcmUgbGlrZSBDSSBhZGFwdGVycyBhbmQgc21hcnRjYXJkIHNsb3RzCis8L3BhcmE+CisKKzxwYXJhPlRoZSBjb21wbGV0ZSBUUyBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgQ0EgaGFyZHdhcmUuIFByb2dyYW1zIHRvCit3aGljaCB0aGUgdXNlciBoYXMgYWNjZXNzIChjb250cm9sbGVkIGJ5IHRoZSBzbWFydCBjYXJkKSBhcmUgZGVjb2RlZCBpbgorcmVhbCB0aW1lIGFuZCByZS1pbnNlcnRlZCBpbnRvIHRoZSBUUy48L3BhcmE+CisKKzwvbGlzdGl0ZW0+CisgPGxpc3RpdGVtPgorIDxwYXJhPkRlbXVsdGlwbGV4ZXIgd2hpY2ggZmlsdGVycyB0aGUgaW5jb21pbmcgRFZCIHN0cmVhbTwvcGFyYT4KKworPHBhcmE+VGhlIGRlbXVsdGlwbGV4ZXIgc3BsaXRzIHRoZSBUUyBpbnRvIGl0cyBjb21wb25lbnRzIGxpa2UgYXVkaW8gYW5kCit2aWRlbyBzdHJlYW1zLiBCZXNpZGVzIHVzdWFsbHkgc2V2ZXJhbCBvZiBzdWNoIGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zCitpdCBhbHNvIGNvbnRhaW5zIGRhdGEgc3RyZWFtcyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9ncmFtcworb2ZmZXJlZCBpbiB0aGlzIG9yIG90aGVyIHN0cmVhbXMgb2YgdGhlIHNhbWUgcHJvdmlkZXIuPC9wYXJhPgorCis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCis8cGFyYT5NUEVHMiBhdWRpbyBhbmQgdmlkZW8gZGVjb2RlcjwvcGFyYT4KKworPHBhcmE+VGhlIG1haW4gdGFyZ2V0cyBvZiB0aGUgZGVtdWx0aXBsZXhlciBhcmUgdGhlIE1QRUcyIGF1ZGlvIGFuZAordmlkZW8gZGVjb2RlcnMuIEFmdGVyIGRlY29kaW5nIHRoZXkgcGFzcyBvbiB0aGUgdW5jb21wcmVzc2VkIGF1ZGlvIGFuZAordmlkZW8gdG8gdGhlIGNvbXB1dGVyIHNjcmVlbiBvciAodGhyb3VnaCBhIFBBTC9OVFNDIGVuY29kZXIpIHRvIGEgVFYKK3NldC48L3BhcmE+CisKKworPC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCis8cGFyYT48eHJlZiBsaW5rZW5kPSJzdGJfY29tcG9uZW50cyIgLz4gc2hvd3MgYSBjcnVkZSBzY2hlbWF0aWMgb2YgdGhlIGNvbnRyb2wgYW5kIGRhdGEgZmxvdworYmV0d2VlbiB0aG9zZSBjb21wb25lbnRzLjwvcGFyYT4KKworPHBhcmE+T24gYSBEVkIgUENJIGNhcmQgbm90IGFsbCBvZiB0aGVzZSBoYXZlIHRvIGJlIHByZXNlbnQgc2luY2Ugc29tZQorZnVuY3Rpb25hbGl0eSBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIG1haW4gQ1BVIG9mIHRoZSBQQyAoZS5nLiBNUEVHCitwaWN0dXJlIGFuZCBzb3VuZCBkZWNvZGluZykgb3IgaXMgbm90IG5lZWRlZCAoZS5nLiBmb3IgZGF0YS1vbmx5IHVzZXMKK2xpa2UgJiM4MjIwO2ludGVybmV0IG92ZXIgc2F0ZWxsaXRlJiM4MjIxOykuIEFsc28gbm90IGV2ZXJ5IGNhcmQgb3IgU1RCCitwcm92aWRlcyBjb25kaXRpb25hbCBhY2Nlc3MgaGFyZHdhcmUuPC9wYXJhPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkdmJfZGV2aWNlcyI+Cis8dGl0bGU+TGludXggRFZCIERldmljZXM8L3RpdGxlPgorCis8cGFyYT5UaGUgTGludXggRFZCIEFQSSBsZXRzIHlvdSBjb250cm9sIHRoZXNlIGhhcmR3YXJlIGNvbXBvbmVudHMKK3Rocm91Z2ggY3VycmVudGx5IHNpeCBVbml4LXN0eWxlIGNoYXJhY3RlciBkZXZpY2VzIGZvciB2aWRlbywgYXVkaW8sCitmcm9udGVuZCwgZGVtdXgsIENBIGFuZCBJUC1vdmVyLURWQiBuZXR3b3JraW5nLiBUaGUgdmlkZW8gYW5kIGF1ZGlvCitkZXZpY2VzIGNvbnRyb2wgdGhlIE1QRUcyIGRlY29kZXIgaGFyZHdhcmUsIHRoZSBmcm9udGVuZCBkZXZpY2UgdGhlCit0dW5lciBhbmQgdGhlIERWQiBkZW1vZHVsYXRvci4gVGhlIGRlbXV4IGRldmljZSBnaXZlcyB5b3UgY29udHJvbCBvdmVyCit0aGUgUEVTIGFuZCBzZWN0aW9uIGZpbHRlcnMgb2YgdGhlIGhhcmR3YXJlLiBJZiB0aGUgaGFyZHdhcmUgZG9lcyBub3QKK3N1cHBvcnQgZmlsdGVyaW5nIHRoZXNlIGZpbHRlcnMgY2FuIGJlIGltcGxlbWVudGVkIGluIHNvZnR3YXJlLiBGaW5hbGx5LAordGhlIENBIGRldmljZSBjb250cm9scyBhbGwgdGhlIGNvbmRpdGlvbmFsIGFjY2VzcyBjYXBhYmlsaXRpZXMgb2YgdGhlCitoYXJkd2FyZS4gSXQgY2FuIGRlcGVuZCBvbiB0aGUgaW5kaXZpZHVhbCBzZWN1cml0eSByZXF1aXJlbWVudHMgb2YgdGhlCitwbGF0Zm9ybSwgaWYgYW5kIGhvdyBtYW55IG9mIHRoZSBDQSBmdW5jdGlvbnMgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZQorYXBwbGljYXRpb24gdGhyb3VnaCB0aGlzIGRldmljZS48L3BhcmE+CisKKzxwYXJhPkFsbCBkZXZpY2VzIGNhbiBiZSBmb3VuZCBpbiB0aGUgPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2PC9lbXBoYXNpcz4KK3RyZWUgdW5kZXIgPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2YjwvZW1waGFzaXM+LiBUaGUgaW5kaXZpZHVhbCBkZXZpY2VzCithcmUgY2FsbGVkOjwvcGFyYT4KKworPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT4KKworPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi9hdWRpb008L2VtcGhhc2lzPiw8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi92aWRlb008L2VtcGhhc2lzPiw8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi9mcm9udGVuZE08L2VtcGhhc2lzPiw8L3BhcmE+Cis8L2xpc3RpdGVtPgorIDxsaXN0aXRlbT4KKworPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi9uZXRNPC9lbXBoYXNpcz4sPC9wYXJhPgorPC9saXN0aXRlbT4KKyA8bGlzdGl0ZW0+CisKKzxwYXJhPjxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlck4vZGVtdXhNPC9lbXBoYXNpcz4sPC9wYXJhPgorPC9saXN0aXRlbT4KKyA8bGlzdGl0ZW0+CisKKzxwYXJhPjxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlck4vY2FNPC9lbXBoYXNpcz4sPC9wYXJhPjwvbGlzdGl0ZW0+PC9pdGVtaXplZGxpc3Q+CisKKzxwYXJhPndoZXJlIE4gZW51bWVyYXRlcyB0aGUgRFZCIFBDSSBjYXJkcyBpbiBhIHN5c3RlbSBzdGFydGluZworZnJvbSYjeDAwQTA7MCwgYW5kIE0gZW51bWVyYXRlcyB0aGUgZGV2aWNlcyBvZiBlYWNoIHR5cGUgd2l0aGluIGVhY2gKK2FkYXB0ZXIsIHN0YXJ0aW5nIGZyb20mI3gwMEEwOzAsIHRvby4gV2Ugd2lsbCBvbWl0IHRoZSAmIzgyMjA7PGVtcGhhc2lzCityb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlck4vPC9lbXBoYXNpcz4mIzgyMjE7IGluIHRoZSBmdXJ0aGVyIGRpY3Vzc2lvbgorb2YgdGhlc2UgZGV2aWNlcy4gVGhlIG5hbWluZyBzY2hlbWUgZm9yIHRoZSBkZXZpY2VzIGlzIHRoZSBzYW1lIHdoZXRlcgorZGV2ZnMgaXMgdXNlZCBvciBub3QuPC9wYXJhPgorCis8cGFyYT5Nb3JlIGRldGFpbHMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gY2FsbHMgb2YgYWxsCit0aGUgZGV2aWNlcyBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgY2hhcHRlcnMuPC9wYXJhPgorCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJpbmNsdWRlX2ZpbGVzIj4KKzx0aXRsZT5BUEkgaW5jbHVkZSBmaWxlczwvdGl0bGU+CisKKzxwYXJhPkZvciBlYWNoIG9mIHRoZSBEVkIgZGV2aWNlcyBhIGNvcnJlc3BvbmRpbmcgaW5jbHVkZSBmaWxlIGV4aXN0cy4KK1RoZSBEVkIgQVBJIGluY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFwcGxpY2F0aW9uIHNvdXJjZXMgd2l0aAorYSBwYXJ0aWFsIHBhdGggbGlrZTo8L3BhcmE+CisKKworPHByb2dyYW1saXN0aW5nPgorCSNpbmNsdWRlICYjeDAwM0M7bGludXgvZHZiL2Zyb250ZW5kLmgmI3gwMDNFOworPC9wcm9ncmFtbGlzdGluZz4KKworPHBhcmE+VG8gZW5hYmxlIGFwcGxpY2F0aW9ucyB0byBzdXBwb3J0IGRpZmZlcmVudCBBUEkgdmVyc2lvbiwgYW4KK2FkZGl0aW9uYWwgaW5jbHVkZSBmaWxlIDxlbXBoYXNpcworcm9sZT0idHQiPmxpbnV4L2R2Yi92ZXJzaW9uLmg8L2VtcGhhc2lzPiBleGlzdHMsIHdoaWNoIGRlZmluZXMgdGhlCitjb25zdGFudCA8ZW1waGFzaXMgcm9sZT0idHQiPkRWQl9BUElfVkVSU0lPTjwvZW1waGFzaXM+LiBUaGlzIGRvY3VtZW50CitkZXNjcmliZXMgPGVtcGhhc2lzIHJvbGU9InR0Ij5EVkJfQVBJX1ZFUlNJT04mI3gwMEEwOzM8L2VtcGhhc2lzPi4KKzwvcGFyYT4KKworPC9zZWN0aW9uPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2lzZGJ0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvaXNkYnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2lzZGJ0LnhtbApAQCAtMCwwICsxLDMxNCBAQAorPHNlY3Rpb24gaWQ9ImlzZGJ0Ij4KKwk8dGl0bGU+SVNEQi1UIGZyb250ZW5kPC90aXRsZT4KKwk8cGFyYT5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNob3J0bHkgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIHBhcmFtZXRlcnMgaW4gdGhlIExpbnV4CisJCURWQi1BUEkgY2FsbGVkICJTMkFQSSIgYW5kIG5vdyBEVkIgQVBJIDUgaW4gb3JkZXIgdG8gdHVuZSBhbiBJU0RCLVQvSVNEQi1Uc2IKKwkJZGVtb2R1bGF0b3I6PC9wYXJhPgorCisJPHBhcmE+VGhpcyBJU0RCLVQvSVNEQi1Uc2IgQVBJIGV4dGVuc2lvbiBzaG91bGQgcmVmbGVjdCBhbGwgaW5mb3JtYXRpb24KKwkJbmVlZGVkIHRvIHR1bmUgYW55IElTREItVC9JU0RCLVRzYiBoYXJkd2FyZS4gT2YgY291cnNlIGl0IGlzIHBvc3NpYmxlCisJCXRoYXQgc29tZSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgZGV2aWNlcyB3b24ndCBuZWVkIGNlcnRhaW4gcGFyYW1ldGVycyB0bworCQl0dW5lLjwvcGFyYT4KKworCTxwYXJhPlRoZSBpbmZvcm1hdGlvbiBnaXZlbiBoZXJlIHNob3VsZCBoZWxwIGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8ga25vdyBob3cKKwkJdG8gaGFuZGxlIElTREItVCBhbmQgSVNEQi1Uc2IgaGFyZHdhcmUgdXNpbmcgdGhlIExpbnV4IERWQi1BUEkuPC9wYXJhPgorCisJPHBhcmE+VGhlIGRldGFpbHMgZ2l2ZW4gaGVyZSBhYm91dCBJU0RCLVQgYW5kIElTREItVHNiIGFyZSBqdXN0IGVub3VnaCB0bworCQliYXNpY2FsbHkgc2hvdyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIG5lZWRlZCBwYXJhbWV0ZXIgdmFsdWVzLAorCQlidXQgc3VyZWx5IHNvbWUgaW5mb3JtYXRpb24gaXMgbGVmdCBvdXQuIEZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uCisJCXNlZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3BhcmE+CisKKwk8cGFyYT5BUklCIFNURC1CMzEgLSAiVHJhbnNtaXNzaW9uIFN5c3RlbSBmb3IgRGlnaXRhbCBUZXJyZXN0cmlhbAorCQlUZWxldmlzaW9uIEJyb2FkY2FzdGluZyIgYW5kPC9wYXJhPgorCTxwYXJhPkFSSUIgVFItQjE0IC0gIk9wZXJhdGlvbmFsIEd1aWRlbGluZXMgZm9yIERpZ2l0YWwgVGVycmVzdHJpYWwKKwkJVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmciLjwvcGFyYT4KKworCTxwYXJhPkluIG9yZGVyIHRvIHJlYWQgdGhpcyBkb2N1bWVudCBvbmUgaGFzIHRvIGhhdmUgc29tZSBrbm93bGVkZ2UgdGhlCisJCWNoYW5uZWwgc3RydWN0dXJlIGluIElTREItVCBhbmQgSVNEQi1Uc2IuIEkuZS4gaXQgaGFzIHRvIGJlIGtub3duIHRvCisJCXRoZSByZWFkZXIgdGhhdCBhbiBJU0RCLVQgY2hhbm5lbCBjb25zaXN0cyBvZiAxMyBzZWdtZW50cywgdGhhdCBpdCBjYW4KKwkJaGF2ZSB1cCB0byAzIGxheWVyIHNoYXJpbmcgdGhvc2Ugc2VnbWVudHMsIGFuZCB0aGluZ3MgbGlrZSB0aGF0LjwvcGFyYT4KKworCTxwYXJhPlBhcmFtZXRlcnMgdXNlZCBieSBJU0RCLVQgYW5kIElTREItVHNiLjwvcGFyYT4KKworCTxzZWN0aW9uIGlkPSJpc2RidC1wYXJtcyI+CisJCTx0aXRsZT5QYXJhbWV0ZXJzIHRoYXQgYXJlIGNvbW1vbiB3aXRoIERWQi1UIGFuZCBBVFNDPC90aXRsZT4KKworCQk8c2VjdGlvbiBpZD0iaXNkYnQtZnJlcSI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9GUkVRVUVOQ1k8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJCTxwYXJhPkNlbnRyYWwgZnJlcXVlbmN5IG9mIHRoZSBjaGFubmVsLjwvcGFyYT4KKworCQkJPHBhcmE+Rm9yIElTREItVCB0aGUgY2hhbm5lbHMgYXJlIHVzYWxseSB0cmFuc21pdHRlZCB3aXRoIGFuIG9mZnNldCBvZiAxNDNrSHouIEUuZy4gYQorCQkJCXZhbGlkIGZyZXF1bmN5IGNvdWxkIGJlIDQ3NDE0MyBrSHouIFRoZSBzdGVwcGluZyBpcyBib3VuZCB0byB0aGUgYmFuZHdpZHRoIG9mCisJCQkJdGhlIGNoYW5uZWwgd2hpY2ggaXMgNk1Iei48L3BhcmE+CisKKwkJCTxwYXJhPkFzIGluIElTREItVHNiIHRoZSBjaGFubmVsIGNvbnNpc3RzIG9mIG9ubHkgb25lIG9yIHRocmVlIHNlZ21lbnRzIHRoZQorCQkJCWZyZXF1ZW5jeSBzdGVwIGlzIDQyOWtIeiwgMyo0MjkgcmVzcGVjdGl2ZWx5LiBBcyBmb3IgSVNEQi1UIHRoZQorCQkJCWNlbnRyYWwgZnJlcXVlbmN5IG9mIHRoZSBjaGFubmVsIGlzIGV4cGVjdGVkLjwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RidC1idyI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9CQU5EV0lEVEhfSFo8L2NvbnN0YW50PiAob3B0aW9uYWwpPC90aXRsZT4KKworCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOjwvcGFyYT4KKworCQkJPHBhcmE+Rm9yIElTREItVCBpdCBzaG91bGQgYmUgYWx3YXlzIDYwMDAwMDBIeiAoNk1Ieik8L3BhcmE+CisJCQk8cGFyYT5Gb3IgSVNEQi1Uc2IgaXQgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29ubmVjdGVkIHNlZ21lbnRzPC9wYXJhPgorCisJCQk8cGFyYT5Ob3RlOiBIYXJkd2FyZSBzcGVjaWZpYyB2YWx1ZXMgbWlnaHQgYmUgZ2l2ZW4gaGVyZSwgYnV0IHN0YW5kYXJkCisJCQkJYXBwbGljYXRpb25zIHNob3VsZCBub3QgYm90aGVyIHRvIHNldCBhIHZhbHVlIHRvIHRoaXMgZmllbGQgYXMKKwkJCQlzdGFuZGFyZCBkZW1vZHMgYXJlIGlnbm9yaW5nIGl0IGFueXdheS48L3BhcmE+CisKKwkJCTxwYXJhPkJhbmR3aWR0aCBpbiBJU0RCLVQgaXMgZml4ZWQgKDZNSHopIG9yIGNhbiBiZSBlYXNpbHkgZGVyaXZlZCBmcm9tCisJCQkJb3RoZXIgcGFyYW1ldGVycyAoRFRWX0lTREJUX1NCX1NFR01FTlRfSURYLAorCQkJCURUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UKS48L3BhcmE+CisJCTwvc2VjdGlvbj4KKworCQk8c2VjdGlvbiBpZD0iaXNkYnQtZGVsaXZlcnktc3lzIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0RFTElWRVJZX1NZU1RFTTwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiA8Y29uc3RhbnQ+U1lTX0lTREJUPC9jb25zdGFudD48L3BhcmE+CisJCTwvc2VjdGlvbj4KKworCQk8c2VjdGlvbiBpZD0iaXNkYnQtdHgtbW9kZSI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9UUkFOU01JU1NJT05fTU9ERTwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+SVNEQi1UIHN1cHBvcnRzIHRocmVlIGNhcnJpZXIvc3ltYm9sLXNpemU6IDhLLCA0SywgMksuIEl0IGlzIGNhbGxlZAorCQkJCSdtb2RlJyBpbiB0aGUgc3RhbmRhcmQ6IE1vZGUgMSBpcyAySywgbW9kZSAyIGlzIDRLLCBtb2RlIDMgaXMgOEs8L3BhcmE+CisKKwkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogPGNvbnN0YW50PlRSQU5TTUlTU0lPTl9NT0RFXzJLPC9jb25zdGFudD4sIDxjb25zdGFudD5UUkFOU01JU1NJT05fTU9ERV84SzwvY29uc3RhbnQ+LAorCQkJCTxjb25zdGFudD5UUkFOU01JU1NJT05fTU9ERV9BVVRPPC9jb25zdGFudD4sIDxjb25zdGFudD5UUkFOU01JU1NJT05fTU9ERV80SzwvY29uc3RhbnQ+PC9wYXJhPgorCisJCQk8cGFyYT5JZiA8Y29uc3RhbnQ+RFRWX1RSQU5TTUlTU0lPTl9NT0RFPC9jb25zdGFudD4gaXMgc2V0IHRoZSA8Y29uc3RhbnQ+VFJBTlNNSVNTSU9OX01PREVfQVVUTzwvY29uc3RhbnQ+IHRoZQorCQkJCWhhcmR3YXJlIHdpbGwgdHJ5IHRvIGZpbmQgdGhlIGNvcnJlY3QgRkZULXNpemUgKGlmIGNhcGFibGUpIGFuZCB3aWxsCisJCQkJdXNlIFRNQ0MgdG8gZmlsbCBpbiB0aGUgbWlzc2luZyBwYXJhbWV0ZXJzLjwvcGFyYT4KKworCQkJPHBhcmE+PGNvbnN0YW50PlRSQU5TTUlTU0lPTl9NT0RFXzRLPC9jb25zdGFudD4gaXMgYWRkZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgb3RoZXIgbmV3IHBhcmFtZXRlcnMuPC9wYXJhPgorCQk8L3NlY3Rpb24+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LWd1YXJkLWludGVydmFsIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0dVQVJEX0lOVEVSVkFMPC9jb25zdGFudD48L3RpdGxlPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF8xXzMyPC9jb25zdGFudD4sIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF8xXzE2PC9jb25zdGFudD4sIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF8xXzg8L2NvbnN0YW50PiwKKwkJCQk8Y29uc3RhbnQ+R1VBUkRfSU5URVJWQUxfMV80PC9jb25zdGFudD4sIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF9BVVRPPC9jb25zdGFudD48L3BhcmE+CisKKwkJCTxwYXJhPklmIDxjb25zdGFudD5EVFZfR1VBUkRfSU5URVJWQUw8L2NvbnN0YW50PiBpcyBzZXQgdGhlIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF9BVVRPPC9jb25zdGFudD4gdGhlIGhhcmR3YXJlIHdpbGwKKwkJCQl0cnkgdG8gZmluZCB0aGUgY29ycmVjdCBndWFyZCBpbnRlcnZhbCAoaWYgY2FwYWJsZSkgYW5kIHdpbGwgdXNlIFRNQ0MgdG8gZmlsbAorCQkJCWluIHRoZSBtaXNzaW5nIHBhcmFtZXRlcnMuPC9wYXJhPgorCQk8L3NlY3Rpb24+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJpc2RidC1uZXctcGFybXMiPgorCQk8dGl0bGU+SVNEQi1UIG9ubHkgcGFyYW1ldGVyczwvdGl0bGU+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LXBhcnQtcmVjIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD48L3RpdGxlPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+SWYgRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGlzICcwJyB0aGlzIGJpdC1maWVsZCByZXByZXNlbnRzIHdoZXRoZXIKKwkJCQl0aGUgY2hhbm5lbCBpcyBpbiBwYXJ0aWFsIHJlY2VwdGlvbiBtb2RlIG9yIG5vdC48L3BhcmE+CisKKwkJCTxwYXJhPklmICcxJyA8Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSQV8qPC9jb25zdGFudD4gdmFsdWVzIGFyZSBhc3NpZ25lZCB0byB0aGUgY2VudGVyIHNlZ21lbnQgYW5kCisJCQkJPGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUkFfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+IGhhcyB0byBiZSAnMScuPC9wYXJhPgorCisJCQk8cGFyYT5JZiBpbiBhZGRpdGlvbiA8Y29uc3RhbnQ+RFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGlzICcxJworCQkJCTxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50PiByZXByZXNlbnRzIHdoZXRoZXIgdGhpcyBJU0RCLVRzYiBjaGFubmVsCisJCQkJaXMgY29uc2lzdGluZyBvZiBvbmUgc2VnbWVudCBhbmQgbGF5ZXIgb3IgdGhyZWUgc2VnbWVudHMgYW5kIHR3byBsYXllcnMuPC9wYXJhPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIC0xIChBVVRPKTwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RidC1zb3VuZC1iY2FzdCI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJCTxwYXJhPlRoaXMgZmllbGQgcmVwcmVzZW50cyB3aGV0aGVyIHRoZSBvdGhlciBEVFZfSVNEQlRfKi1wYXJhbWV0ZXJzIGFyZQorCQkJCXJlZmVycmluZyB0byBhbiBJU0RCLVQgYW5kIGFuIElTREItVHNiIGNoYW5uZWwuIChTZWUgYWxzbworCQkJCTxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50PikuPC9wYXJhPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIC0xIChBVVRPKTwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RidC1zYi1jaC1pZCI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lEPC9jb25zdGFudD48L3RpdGxlPgorCisJCQk8cGFyYT5UaGlzIGZpZWxkIG9ubHkgYXBwbGllcyBpZiA8Y29uc3RhbnQ+RFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGlzICcxJy48L3BhcmE+CisKKwkJCTxwYXJhPihOb3RlIG9mIHRoZSBhdXRob3I6IFRoaXMgbWlnaHQgbm90IGJlIHRoZSBjb3JyZWN0IGRlc2NyaXB0aW9uIG9mIHRoZQorCQkJCTxjb25zdGFudD5TVUJDSEFOTkVMLUlEPC9jb25zdGFudD4gaW4gYWxsIGRldGFpbHMsIGJ1dCBpdCBpcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0ZWNobmljYWwKKwkJCQliYWNrZ3JvdW5kIG5lZWRlZCB0byBwcm9ncmFtIGEgZGV2aWNlKTwvcGFyYT4KKworCQkJPHBhcmE+QW4gSVNEQi1Uc2IgY2hhbm5lbCAoMSBvciAzIHNlZ21lbnRzKSBjYW4gYmUgYnJvYWRjYXN0ZWQgYWxvbmUgb3IgaW4gYQorCQkJCXNldCBvZiBjb25uZWN0ZWQgSVNEQi1Uc2IgY2hhbm5lbHMuIEluIHRoaXMgc2V0IG9mIGNoYW5uZWxzIGV2ZXJ5CisJCQkJY2hhbm5lbCBjYW4gYmUgcmVjZWl2ZWQgaW5kZXBlbmRlbnRseS4gVGhlIG51bWJlciBvZiBjb25uZWN0ZWQKKwkJCQlJU0RCLVRzYiBzZWdtZW50IGNhbiB2YXJ5LCBlLmcuIGRlcGVuZGluZyBvbiB0aGUgZnJlcXVlbmN5IHNwZWN0cnVtCisJCQkJYmFuZHdpZHRoIGF2YWlsYWJsZS48L3BhcmE+CisKKwkJCTxwYXJhPkV4YW1wbGU6IEFzc3VtZSA4IElTREItVHNiIGNvbm5lY3RlZCBzZWdtZW50cyBhcmUgYnJvYWRjYXN0ZWQuIFRoZQorCQkJCWJyb2FkY2FzdGVyIGhhcyBzZXZlcmFsIHBvc3NpYmlsaXRpZXMgdG8gcHV0IHRob3NlIGNoYW5uZWxzIGluIHRoZQorCQkJCWFpcjogQXNzdW1pbmcgYSBub3JtYWwgMTMtc2VnbWVudCBJU0RCLVQgc3BlY3RydW0gaGUgY2FuIGFsaWduIHRoZSA4CisJCQkJc2VnbWVudHMgZnJvbSBwb3NpdGlvbiAxLTggdG8gNS0xMyBvciBhbnl0aGluZyBpbiBiZXR3ZWVuLjwvcGFyYT4KKworCQkJPHBhcmE+VGhlIHVuZGVybHlpbmcgbGF5ZXIgb2Ygc2VnbWVudHMgYXJlIHN1YmNoYW5uZWxzOiBlYWNoIHNlZ21lbnQgaXMKKwkJCQljb25zaXN0aW5nIG9mIHNldmVyYWwgc3ViY2hhbm5lbHMgd2l0aCBhIHByZWRlZmluZWQgSURzLiBBIHN1Yi1jaGFubmVsCisJCQkJaXMgdXNlZCB0byBoZWxwIHRoZSBkZW1vZHVsYXRvciB0byBzeW5jaHJvbml6ZSBvbiB0aGUgY2hhbm5lbC48L3BhcmE+CisKKwkJCTxwYXJhPkFuIElTREItVCBjaGFubmVsIGlzIGFsd2F5cyBjZW50ZXJlZCBvdmVyIGFsbCBzdWItY2hhbm5lbHMuIEFzIGZvcgorCQkJCXRoZSBleGFtcGxlIGFib3ZlLCBpbiBJU0RCLVRzYiBpdCBpcyBubyBsb25nZXIgYXMgc2ltcGxlIGFzIHRoYXQuPC9wYXJhPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+VGhlIERUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lEPC9jb25zdGFudD4gcGFyYW1ldGVyIGlzIHVzZWQgdG8gZ2l2ZSB0aGUKKwkJCQlzdWItY2hhbm5lbCBJRCBvZiB0aGUgc2VnbWVudCB0byBiZSBkZW1vZHVsYXRlZC48L3BhcmE+CisKKwkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCAuLiA0MSwgLTEgKEFVVE8pPC9wYXJhPgorCQk8L3NlY3Rpb24+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LXNiLXNlZy1pZHgiPgorCisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+VGhpcyBmaWVsZCBvbmx5IGFwcGxpZXMgaWYgPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMScuPC9wYXJhPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfSURYPC9jb25zdGFudD4gZ2l2ZXMgdGhlIGluZGV4IG9mIHRoZSBzZWdtZW50IHRvIGJlCisJCQkJZGVtb2R1bGF0ZWQgZm9yIGFuIElTREItVHNiIGNoYW5uZWwgd2hlcmUgc2V2ZXJhbCBvZiB0aGVtIGFyZQorCQkJCXRyYW5zbWl0dGVkIGluIHRoZSBjb25uZWN0ZWQgbWFubmVyLjwvcGFyYT4KKworCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiAwIC4uIDxjb25zdGFudD5EVFZfSVNEQlRfU0JfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+IC0gMTwvcGFyYT4KKworCQkJPHBhcmE+Tm90ZTogVGhpcyB2YWx1ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBhbiBhdXRvbWF0aWMgY2hhbm5lbCBzZWFyY2guPC9wYXJhPgorCQk8L3NlY3Rpb24+CisKKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0LXNiLXNlZy1jbnQiPgorCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfU0JfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJPHBhcmE+VGhpcyBmaWVsZCBvbmx5IGFwcGxpZXMgaWYgPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMScuPC9wYXJhPgorCisJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBnaXZlcyB0aGUgdG90YWwgY291bnQgb2YgY29ubmVjdGVkIElTREItVHNiCisJCQkJY2hhbm5lbHMuPC9wYXJhPgorCisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDEgLi4gMTM8L3BhcmE+CisKKwkJCTxwYXJhPk5vdGU6IFRoaXMgdmFsdWUgY2Fubm90IGJlIGRldGVybWluZWQgYnkgYW4gYXV0b21hdGljIGNoYW5uZWwgc2VhcmNoLjwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCisJCTxzZWN0aW9uIGlkPSJpc2RiLWhpZXJxLWxheWVycyI+CisJCQk8dGl0bGU+SGllcmFyY2hpY2FsIGxheWVyczwvdGl0bGU+CisKKwkJCTxwYXJhPklTREItVCBjaGFubmVscyBjYW4gYmUgY29kZWQgaGllcmFyY2hpY2FsbHkuIEFzIG9wcG9zZWQgdG8gRFZCLVQgaW4KKwkJCQlJU0RCLVQgaGllcmFyY2hpY2FsIGxheWVycyBjYW4gYmUgZGVjb2RlZCBzaW11bHRhbmVvdXNseS4gRm9yIHRoYXQKKwkJCQlyZWFzb24gYSBJU0RCLVQgZGVtb2R1bGF0b3IgaGFzIDMgdml0ZXJiaSBhbmQgMyByZWVkLXNvbG9tb24tZGVjb2RlcnMuPC9wYXJhPgorCisJCQk8cGFyYT5JU0RCLVQgaGFzIDMgaGllcmFyY2hpY2FsIGxheWVycyB3aGljaCBlYWNoIGNhbiB1c2UgYSBwYXJ0IG9mIHRoZQorCQkJCWF2YWlsYWJsZSBzZWdtZW50cy4gVGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cyBvdmVyIGFsbCBsYXllcnMgaGFzCisJCQkJdG8gMTMgaW4gSVNEQi1ULjwvcGFyYT4KKworCQkJPHNlY3Rpb24gaWQ9ImlzZGJ0LWxheWVyLWVuYSI+CisJCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJfRU5BQkxFRDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPkhpZXJhcmNoaWNhbCByZWNlcHRpb24gaW4gSVNEQi1UIGlzIGFjaGlldmVkIGJ5IGVuYWJsaW5nIG9yIGRpc2FibGluZworCQkJCQlsYXllcnMgaW4gdGhlIGRlY29kaW5nIHByb2Nlc3MuIFNldHRpbmcgYWxsIGJpdHMgb2YKKwkJCQkJPGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEPC9jb25zdGFudD4gdG8gJzEnIGZvcmNlcyBhbGwgbGF5ZXJzIChpZiBhcHBsaWNhYmxlKSB0byBiZQorCQkJCQlkZW1vZHVsYXRlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdC48L3BhcmE+CisKKwkJCQk8cGFyYT5JZiB0aGUgY2hhbm5lbCBpcyBpbiB0aGUgcGFydGlhbCByZWNlcHRpb24gbW9kZQorCQkJCQkoPGNvbnN0YW50PkRUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTjwvY29uc3RhbnQ+ID0gMSkgdGhlIGNlbnRyYWwgc2VnbWVudCBjYW4gYmUgZGVjb2RlZAorCQkJCQlpbmRlcGVuZGVudGx5IG9mIHRoZSBvdGhlciAxMiBzZWdtZW50cy4gSW4gdGhhdCBtb2RlIGxheWVyIEEgaGFzIHRvCisJCQkJCWhhdmUgYSA8Y29uc3RhbnQ+U0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+IG9mIDEuPC9wYXJhPgorCisJCQkJPHBhcmE+SW4gSVNEQi1Uc2Igb25seSBsYXllciBBIGlzIHVzZWQsIGl0IGNhbiBiZSAxIG9yIDMgaW4gSVNEQi1Uc2IKKwkJCQkJYWNjb3JkaW5nIHRvIDxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50Pi4gPGNvbnN0YW50PlNFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBtdXN0IGJlIGZpbGxlZAorCQkJCQlhY2NvcmRpbmdseS48L3BhcmE+CisKKwkJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDB4MSwgMHgyLCAweDQgKHwtYWJsZSk8L3BhcmE+CisKKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMDowXTwvY29uc3RhbnQ+IC0gbGF5ZXIgQTwvcGFyYT4KKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMToxXTwvY29uc3RhbnQ+IC0gbGF5ZXIgQjwvcGFyYT4KKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMjoyXTwvY29uc3RhbnQ+IC0gbGF5ZXIgQzwvcGFyYT4KKwkJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMzE6M108L2NvbnN0YW50PiB1bnVzZWQ8L3BhcmE+CisJCQk8L3NlY3Rpb24+CisKKwkJCTxzZWN0aW9uIGlkPSJpc2RidC1sYXllci1mZWMiPgorCQkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSKl9GRUM8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDxjb25zdGFudD5GRUNfQVVUTzwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzFfMjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzJfMzwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzNfNDwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzVfNjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RkVDXzdfODwvY29uc3RhbnQ+PC9wYXJhPgorCQkJPC9zZWN0aW9uPgorCisJCQk8c2VjdGlvbiBpZD0iaXNkYnQtbGF5ZXItbW9kIj4KKwkJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfTU9EVUxBVElPTjwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogPGNvbnN0YW50PlFBTV9BVVRPPC9jb25zdGFudD4sIFFQPGNvbnN0YW50PlNLLCBRQU1fMTY8L2NvbnN0YW50PiwgPGNvbnN0YW50PlFBTV82NDwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RFFQU0s8L2NvbnN0YW50PjwvcGFyYT4KKworCQkJCTxwYXJhPk5vdGU6IElmIGxheWVyIEMgaXMgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD4gbGF5ZXIgQiBoYXMgdG8gYmUgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD4uIElmIGxheWVyIEIgaXMgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD4KKwkJCQkJYW5kIDxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50Pj0wIGxheWVyIGhhcyB0byBiZSA8Y29uc3RhbnQ+RFFQU0s8L2NvbnN0YW50Pi48L3BhcmE+CisJCQk8L3NlY3Rpb24+CisKKwkJCTxzZWN0aW9uIGlkPSJpc2RidC1sYXllci1zZWctY250Ij4KKwkJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIC0xIChBVVRPKTwvcGFyYT4KKworCQkJCTxwYXJhPk5vdGU6IFRydXRoIHRhYmxlIGZvciA8Y29uc3RhbnQ+RFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGFuZAorCQkJCQk8Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5MQVlFUjwvY29uc3RhbnQ+Kl9TRUdNRU5UX0NPVU5UPC9wYXJhPgorCisJCQkJPGluZm9ybWFsdGFibGUgaWQ9ImlzZGJ0LWxheWVyX3NlZy1jbnQtdGFibGUiPgorCQkJCQk8dGdyb3VwIGNvbHM9IjYiPgorCisJCQkJCQk8dGJvZHk+CisJCQkJCQkJPHJvdz4KKwkJCQkJCQkJPGVudHJ5PlBSPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PlNCPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PkxheWVyIEEgd2lkdGg8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+TGF5ZXIgQiB3aWR0aDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT5MYXllciBDIHdpZHRoPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PnRvdGFsIHdpZHRoPC9lbnRyeT4KKwkJCQkJCQk8L3Jvdz4KKworCQkJCQkJCTxyb3c+CisJCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MSAuLiAxMzwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xIC4uIDEzPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MTM8L2VudHJ5PgorCQkJCQkJCTwvcm93PgorCisJCQkJCQkJPHJvdz4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MSAuLiAxMzwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xMzwvZW50cnk+CisJCQkJCQkJPC9yb3c+CisKKwkJCQkJCQk8cm93PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCTwvcm93PgorCisJCQkJCQkJPHJvdz4KKwkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MTwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQkJPGVudHJ5PjI8L2VudHJ5PgorCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJCTxlbnRyeT4xMzwvZW50cnk+CisJCQkJCQkJPC9yb3c+CisJCQkJCQk8L3Rib2R5PgorCisJCQkJCTwvdGdyb3VwPgorCQkJCTwvaW5mb3JtYWx0YWJsZT4KKworCQkJPC9zZWN0aW9uPgorCisJCQk8c2VjdGlvbiBpZD0iaXNkYnRfbGF5ZXJfdF9pbnRlcmwiPgorCQkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSKl9USU1FX0lOVEVSTEVBVklORzwvY29uc3RhbnQ+PC90aXRsZT4KKworCQkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCwgMSwgMiwgMywgLTEgKEFVVE8pPC9wYXJhPgorCisJCQkJPHBhcmE+Tm90ZTogVGhlIHJlYWwgaW50ZXItbGVhdmVyIGRlcHRoLW5hbWVzIGRlcGVuZCBvbiB0aGUgbW9kZSAoZmZ0LXNpemUpOyB0aGUgdmFsdWVzCisJCQkJCWhlcmUgYXJlIHJlZmVycmluZyB0byB3aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgVE1DQy1zdHJ1Y3R1cmUgLQorCQkJCQlpbmRlcGVuZGVudCBvZiB0aGUgbW9kZS48L3BhcmE+CisJCQk8L3NlY3Rpb24+CisJCTwvc2VjdGlvbj4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2tkYXBpLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIva2RhcGkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjc0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2tkYXBpLnhtbApAQCAtMCwwICsxLDIzMDkgQEAKKzx0aXRsZT5LZXJuZWwgRGVtdXggQVBJPC90aXRsZT4KKzxwYXJhPlRoZSBrZXJuZWwgZGVtdXggQVBJIGRlZmluZXMgYSBkcml2ZXItaW50ZXJuYWwgaW50ZXJmYWNlIGZvciByZWdpc3RlcmluZyBsb3ctbGV2ZWwsCitoYXJkd2FyZSBzcGVjaWZpYyBkcml2ZXIgdG8gYSBoYXJkd2FyZSBpbmRlcGVuZGVudCBkZW11eCBsYXllci4gSXQgaXMgb25seSBvZiBpbnRlcmVzdCBmb3IKK0RWQiBkZXZpY2UgZHJpdmVyIHdyaXRlcnMuIFRoZSBoZWFkZXIgZmlsZSBmb3IgdGhpcyBBUEkgaXMgbmFtZWQgPGVtcGhhc2lzIHJvbGU9InR0Ij5kZW11eC5oPC9lbXBoYXNpcz4gYW5kIGxvY2F0ZWQgaW4KKzxlbXBoYXNpcyByb2xlPSJ0dCI+ZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmU8L2VtcGhhc2lzPi4KKzwvcGFyYT4KKzxwYXJhPk1haW50YWluZXIgbm90ZTogVGhpcyBzZWN0aW9uIG11c3QgYmUgcmV2aWV3ZWQuIEl0IGlzIHByb2JhYmx5IG91dCBvZiBkYXRlLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ia2VybmVsX2RlbXV4X2RhdGFfdHlwZXMiPgorPHRpdGxlPktlcm5lbCBEZW11eCBEYXRhIFR5cGVzPC90aXRsZT4KKworCis8c2VjdGlvbiBpZD0iZG14X3N1Y2Nlc3NfdCI+Cis8dGl0bGU+ZG14X3N1Y2Nlc3NfdDwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSB7CisgICBETVhfT0sgPSAwLCAvJiN4MjJDNjsgUmVjZWl2ZWQgT2sgJiN4MjJDNjsvCisgICBETVhfTEVOR1RIX0VSUk9SLCAvJiN4MjJDNjsgSW5jb3JyZWN0IGxlbmd0aCAmI3gyMkM2Oy8KKyAgIERNWF9PVkVSUlVOX0VSUk9SLCAvJiN4MjJDNjsgUmVjZWl2ZXIgcmluZyBidWZmZXIgb3ZlcnJ1biAmI3gyMkM2Oy8KKyAgIERNWF9DUkNfRVJST1IsIC8mI3gyMkM2OyBJbmNvcnJlY3QgQ1JDICYjeDIyQzY7LworICAgRE1YX0ZSQU1FX0VSUk9SLCAvJiN4MjJDNjsgRnJhbWUgYWxpZ25tZW50IGVycm9yICYjeDIyQzY7LworICAgRE1YX0ZJRk9fRVJST1IsIC8mI3gyMkM2OyBSZWNlaXZlciBGSUZPIG92ZXJydW4gJiN4MjJDNjsvCisgICBETVhfTUlTU0VEX0VSUk9SIC8mI3gyMkM2OyBSZWNlaXZlciBtaXNzZWQgcGFja2V0ICYjeDIyQzY7LworIH0gZG14X3N1Y2Nlc3NfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJ0c19maWx0ZXJfdHlwZXMiPgorPHRpdGxlPlRTIGZpbHRlciB0eXBlczwvdGl0bGU+CisgPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisgLyYjeDIyQzY7IFRTIHBhY2tldCByZWNlcHRpb24gJiN4MjJDNjsvCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKworIC8mI3gyMkM2OyBUUyBmaWx0ZXIgdHlwZSBmb3Igc2V0X3R5cGUoKSAmI3gyMkM2Oy8KKworICNkZWZpbmUgVFNfUEFDS0VUICAgICAgIDEgICAvJiN4MjJDNjsgc2VuZCBUUyBwYWNrZXRzICgxODggYnl0ZXMpIHRvIGNhbGxiYWNrIChkZWZhdWx0KSAmI3gyMkM2Oy8KKyAjZGVmaW5lIFRTX1BBWUxPQURfT05MWSAyICAgLyYjeDIyQzY7IGluIGNhc2UgVFNfUEFDS0VUIGlzIHNldCwgb25seSBzZW5kIHRoZSBUUworCQkJCXBheWxvYWQgKCYjeDAwM0M7PTE4NCBieXRlcyBwZXIgcGFja2V0KSB0byBjYWxsYmFjayAmI3gyMkM2Oy8KKyAjZGVmaW5lIFRTX0RFQ09ERVIgICAgICA0ICAgLyYjeDIyQzY7IHNlbmQgc3RyZWFtIHRvIGJ1aWx0LWluIGRlY29kZXIgKGlmIHByZXNlbnQpICYjeDIyQzY7LworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImRteF90c19wZXNfdCI+Cis8dGl0bGU+ZG14X3RzX3Blc190PC90aXRsZT4KKzxwYXJhPlRoZSBzdHJ1Y3R1cmUKKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0KKyB7CisJIERNWF9UU19QRVNfQVVESU8sICAgLyYjeDIyQzY7IGFsc28gc2VuZCBwYWNrZXRzIHRvIGF1ZGlvIGRlY29kZXIgKGlmIGl0IGV4aXN0cykgJiN4MjJDNjsvCisJIERNWF9UU19QRVNfVklERU8sICAgLyYjeDIyQzY7IC4uLiAmI3gyMkM2Oy8KKwkgRE1YX1RTX1BFU19URUxFVEVYVCwKKwkgRE1YX1RTX1BFU19TVUJUSVRMRSwKKwkgRE1YX1RTX1BFU19QQ1IsCisJIERNWF9UU19QRVNfT1RIRVIsCisgfSBkbXhfdHNfcGVzX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+ZGVzY3JpYmVzIHRoZSBQRVMgdHlwZSBmb3IgZmlsdGVycyB3aGljaCB3cml0ZSB0byBhIGJ1aWx0LWluIGRlY29kZXIuIFRoZSBjb3JyZXNwb25kIChhbmQKK3Nob3VsZCBiZSBrZXB0IGlkZW50aWNhbCkgdG8gdGhlIHR5cGVzIGluIHRoZSBkZW11eCBkZXZpY2UuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGRteF90c19mZWVkX3MgeworCSBpbnQgaXNfZmlsdGVyaW5nOyAvJiN4MjJDNjsgU2V0IHRvIG5vbi16ZXJvIHdoZW4gZmlsdGVyaW5nIGluIHByb2dyZXNzICYjeDIyQzY7LworCSBzdHJ1Y3QgZG14X2RlbXV4X3MmI3gyMkM2OyBwYXJlbnQ7IC8mI3gyMkM2OyBCYWNrLXBvaW50ZXIgJiN4MjJDNjsvCisJIHZvaWQmI3gyMkM2OyBwcml2OyAvJiN4MjJDNjsgUG9pbnRlciB0byBwcml2YXRlIGRhdGEgb2YgdGhlIEFQSSBjbGllbnQgJiN4MjJDNjsvCisJIGludCAoJiN4MjJDNjtzZXQpIChzdHJ1Y3QgZG14X3RzX2ZlZWRfcyYjeDIyQzY7IGZlZWQsCisJCSAgICAgX191MTYgcGlkLAorCQkgICAgIHNpemVfdCBjYWxsYmFja19sZW5ndGgsCisJCSAgICAgc2l6ZV90IGNpcmN1bGFyX2J1ZmZlcl9zaXplLAorCQkgICAgIGludCBkZXNjcmFtYmxlLAorCQkgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0KTsKKwkgaW50ICgmI3gyMkM2O3N0YXJ0X2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfdHNfZmVlZF9zJiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjtzdG9wX2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfdHNfZmVlZF9zJiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjtzZXRfdHlwZSkgKHN0cnVjdCBkbXhfdHNfZmVlZF9zJiN4MjJDNjsgZmVlZCwKKwkJCSAgaW50IHR5cGUsCisJCQkgIGRteF90c19wZXNfdCBwZXNfdHlwZSk7CisgfTsKKworIHR5cGVkZWYgc3RydWN0IGRteF90c19mZWVkX3MgZG14X3RzX2ZlZWRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisgLyYjeDIyQzY7IFBFUyBwYWNrZXQgcmVjZXB0aW9uIChub3Qgc3VwcG9ydGVkIHlldCkgJiN4MjJDNjsvCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKworIHR5cGVkZWYgc3RydWN0IGRteF9wZXNfZmlsdGVyX3MgeworCSBzdHJ1Y3QgZG14X3Blc19zJiN4MjJDNjsgcGFyZW50OyAvJiN4MjJDNjsgQmFjay1wb2ludGVyICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgLyYjeDIyQzY7IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIG9mIHRoZSBBUEkgY2xpZW50ICYjeDIyQzY7LworIH0gZG14X3Blc19maWx0ZXJfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IGRteF9wZXNfZmVlZF9zIHsKKwkgaW50IGlzX2ZpbHRlcmluZzsgLyYjeDIyQzY7IFNldCB0byBub24temVybyB3aGVuIGZpbHRlcmluZyBpbiBwcm9ncmVzcyAmI3gyMkM2Oy8KKwkgc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgcGFyZW50OyAvJiN4MjJDNjsgQmFjay1wb2ludGVyICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgLyYjeDIyQzY7IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIG9mIHRoZSBBUEkgY2xpZW50ICYjeDIyQzY7LworCSBpbnQgKCYjeDIyQzY7c2V0KSAoc3RydWN0IGRteF9wZXNfZmVlZF9zJiN4MjJDNjsgZmVlZCwKKwkJICAgICBfX3UxNiBwaWQsCisJCSAgICAgc2l6ZV90IGNpcmN1bGFyX2J1ZmZlcl9zaXplLAorCQkgICAgIGludCBkZXNjcmFtYmxlLAorCQkgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0KTsKKwkgaW50ICgmI3gyMkM2O3N0YXJ0X2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfcGVzX2ZlZWRfcyYjeDIyQzY7IGZlZWQpOworCSBpbnQgKCYjeDIyQzY7c3RvcF9maWx0ZXJpbmcpIChzdHJ1Y3QgZG14X3Blc19mZWVkX3MmI3gyMkM2OyBmZWVkKTsKKwkgaW50ICgmI3gyMkM2O2FsbG9jYXRlX2ZpbHRlcikgKHN0cnVjdCBkbXhfcGVzX2ZlZWRfcyYjeDIyQzY7IGZlZWQsCisJCQkJIGRteF9wZXNfZmlsdGVyX3QmI3gyMkM2OyYjeDIyQzY7IGZpbHRlcik7CisJIGludCAoJiN4MjJDNjtyZWxlYXNlX2ZpbHRlcikgKHN0cnVjdCBkbXhfcGVzX2ZlZWRfcyYjeDIyQzY7IGZlZWQsCisJCQkJZG14X3Blc19maWx0ZXJfdCYjeDIyQzY7IGZpbHRlcik7CisgfSBkbXhfcGVzX2ZlZWRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgc3RydWN0IHsKKwkgX191OCBmaWx0ZXJfdmFsdWUgW0RNWF9NQVhfRklMVEVSX1NJWkVdOworCSBfX3U4IGZpbHRlcl9tYXNrIFtETVhfTUFYX0ZJTFRFUl9TSVpFXTsKKwkgc3RydWN0IGRteF9zZWN0aW9uX2ZlZWRfcyYjeDIyQzY7IHBhcmVudDsgLyYjeDIyQzY7IEJhY2stcG9pbnRlciAmI3gyMkM2Oy8KKwkgdm9pZCYjeDIyQzY7IHByaXY7IC8mI3gyMkM2OyBQb2ludGVyIHRvIHByaXZhdGUgZGF0YSBvZiB0aGUgQVBJIGNsaWVudCAmI3gyMkM2Oy8KKyB9IGRteF9zZWN0aW9uX2ZpbHRlcl90OworPC9wcm9ncmFtbGlzdGluZz4KKyA8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IGRteF9zZWN0aW9uX2ZlZWRfcyB7CisJIGludCBpc19maWx0ZXJpbmc7IC8mI3gyMkM2OyBTZXQgdG8gbm9uLXplcm8gd2hlbiBmaWx0ZXJpbmcgaW4gcHJvZ3Jlc3MgJiN4MjJDNjsvCisJIHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IHBhcmVudDsgLyYjeDIyQzY7IEJhY2stcG9pbnRlciAmI3gyMkM2Oy8KKwkgdm9pZCYjeDIyQzY7IHByaXY7IC8mI3gyMkM2OyBQb2ludGVyIHRvIHByaXZhdGUgZGF0YSBvZiB0aGUgQVBJIGNsaWVudCAmI3gyMkM2Oy8KKwkgaW50ICgmI3gyMkM2O3NldCkgKHN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkX3MmI3gyMkM2OyBmZWVkLAorCQkgICAgIF9fdTE2IHBpZCwKKwkJICAgICBzaXplX3QgY2lyY3VsYXJfYnVmZmVyX3NpemUsCisJCSAgICAgaW50IGRlc2NyYW1ibGUsCisJCSAgICAgaW50IGNoZWNrX2NyYyk7CisJIGludCAoJiN4MjJDNjthbGxvY2F0ZV9maWx0ZXIpIChzdHJ1Y3QgZG14X3NlY3Rpb25fZmVlZF9zJiN4MjJDNjsgZmVlZCwKKwkJCQkgZG14X3NlY3Rpb25fZmlsdGVyX3QmI3gyMkM2OyYjeDIyQzY7IGZpbHRlcik7CisJIGludCAoJiN4MjJDNjtyZWxlYXNlX2ZpbHRlcikgKHN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkX3MmI3gyMkM2OyBmZWVkLAorCQkJCWRteF9zZWN0aW9uX2ZpbHRlcl90JiN4MjJDNjsgZmlsdGVyKTsKKwkgaW50ICgmI3gyMkM2O3N0YXJ0X2ZpbHRlcmluZykgKHN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkX3MmI3gyMkM2OyBmZWVkKTsKKwkgaW50ICgmI3gyMkM2O3N0b3BfZmlsdGVyaW5nKSAoc3RydWN0IGRteF9zZWN0aW9uX2ZlZWRfcyYjeDIyQzY7IGZlZWQpOworIH07CisgdHlwZWRlZiBzdHJ1Y3QgZG14X3NlY3Rpb25fZmVlZF9zIGRteF9zZWN0aW9uX2ZlZWRfdDsKKworIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisgLyYjeDIyQzY7IENhbGxiYWNrIGZ1bmN0aW9ucyAmI3gyMkM2Oy8KKyAvJiN4MjJDNjstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjeDIyQzY7LworCisgdHlwZWRlZiBpbnQgKCYjeDIyQzY7ZG14X3RzX2NiKSAoIF9fdTggJiN4MjJDNjsgYnVmZmVyMSwKKwkJCSAgICBzaXplX3QgYnVmZmVyMV9sZW5ndGgsCisJCQkgICAgX191OCAmI3gyMkM2OyBidWZmZXIyLAorCQkJICAgIHNpemVfdCBidWZmZXIyX2xlbmd0aCwKKwkJCSAgICBkbXhfdHNfZmVlZF90JiN4MjJDNjsgc291cmNlLAorCQkJICAgIGRteF9zdWNjZXNzX3Qgc3VjY2Vzcyk7CisKKyB0eXBlZGVmIGludCAoJiN4MjJDNjtkbXhfc2VjdGlvbl9jYikgKCBfX3U4ICYjeDIyQzY7IGJ1ZmZlcjEsCisJCQkJIHNpemVfdCBidWZmZXIxX2xlbiwKKwkJCQkgX191OCAmI3gyMkM2OyBidWZmZXIyLAorCQkJCSBzaXplX3QgYnVmZmVyMl9sZW4sCisJCQkJIGRteF9zZWN0aW9uX2ZpbHRlcl90ICYjeDIyQzY7IHNvdXJjZSwKKwkJCQkgZG14X3N1Y2Nlc3NfdCBzdWNjZXNzKTsKKworIHR5cGVkZWYgaW50ICgmI3gyMkM2O2RteF9wZXNfY2IpICggX191OCAmI3gyMkM2OyBidWZmZXIxLAorCQkJICAgICBzaXplX3QgYnVmZmVyMV9sZW4sCisJCQkgICAgIF9fdTggJiN4MjJDNjsgYnVmZmVyMiwKKwkJCSAgICAgc2l6ZV90IGJ1ZmZlcjJfbGVuLAorCQkJICAgICBkbXhfcGVzX2ZpbHRlcl90JiN4MjJDNjsgc291cmNlLAorCQkJICAgICBkbXhfc3VjY2Vzc190IHN1Y2Nlc3MpOworCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKyAvJiN4MjJDNjsgRFZCIEZyb250LUVuZCAmI3gyMkM2Oy8KKyAvJiN4MjJDNjstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjeDIyQzY7LworCisgdHlwZWRlZiBlbnVtIHsKKwkgRE1YX09USEVSX0ZFID0gMCwKKwkgRE1YX1NBVEVMTElURV9GRSwKKwkgRE1YX0NBQkxFX0ZFLAorCSBETVhfVEVSUkVTVFJJQUxfRkUsCisJIERNWF9MVkRTX0ZFLAorCSBETVhfQVNJX0ZFLCAvJiN4MjJDNjsgRFZCLUFTSSBpbnRlcmZhY2UgJiN4MjJDNjsvCisJIERNWF9NRU1PUllfRkUKKyB9IGRteF9mcm9udGVuZF9zb3VyY2VfdDsKKworIHR5cGVkZWYgc3RydWN0IHsKKwkgLyYjeDIyQzY7IFRoZSBmb2xsb3dpbmcgY2hhciYjeDIyQzY7IGZpZWxkcyBwb2ludCB0byBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5ncyAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IGlkOyAgICAgICAgICAgICAgICAgICAgLyYjeDIyQzY7IFVuaXF1ZSBmcm9udC1lbmQgaWRlbnRpZmllciAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IHZlbmRvcjsgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE5hbWUgb2YgdGhlIGZyb250LWVuZCB2ZW5kb3IgJiN4MjJDNjsvCisJIGNoYXImI3gyMkM2OyBtb2RlbDsgICAgICAgICAgICAgICAgIC8mI3gyMkM2OyBOYW1lIG9mIHRoZSBmcm9udC1lbmQgbW9kZWwgJiN4MjJDNjsvCisJIHN0cnVjdCBsaXN0X2hlYWQgY29ubmVjdGl2aXR5X2xpc3Q7IC8mI3gyMkM2OyBMaXN0IG9mIGZyb250LWVuZHMgdGhhdCBjYW4KKwkJCQkJCWJlIGNvbm5lY3RlZCB0byBhIHBhcnRpY3VsYXIKKwkJCQkJCWRlbXV4ICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgICAgIC8mI3gyMkM2OyBQb2ludGVyIHRvIHByaXZhdGUgZGF0YSBvZiB0aGUgQVBJIGNsaWVudCAmI3gyMkM2Oy8KKwkgZG14X2Zyb250ZW5kX3NvdXJjZV90IHNvdXJjZTsKKyB9IGRteF9mcm9udGVuZF90OworCisgLyYjeDIyQzY7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mI3gyMkM2Oy8KKyAvJiN4MjJDNjsgTVBFRy0yIFRTIERlbXV4ICYjeDIyQzY7LworIC8mI3gyMkM2Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiN4MjJDNjsvCisKKyAvJiN4MjJDNjsKKyAgJiN4MjJDNjsgRmxhZ3MgT1InZWQgaW4gdGhlIGNhcGFiaWxpdGVzIGZpZWxkIG9mIHN0cnVjdCBkbXhfZGVtdXhfcy4KKyAgJiN4MjJDNjsvCisKKyAjZGVmaW5lIERNWF9UU19GSUxURVJJTkcgICAgICAgICAgICAgICAgICAgICAgICAxCisgI2RlZmluZSBETVhfUEVTX0ZJTFRFUklORyAgICAgICAgICAgICAgICAgICAgICAgMgorICNkZWZpbmUgRE1YX1NFQ1RJT05fRklMVEVSSU5HICAgICAgICAgICAgICAgICAgIDQKKyAjZGVmaW5lIERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HICAgICAgICAgICAgICA4ICAgIC8mI3gyMkM2OyB3cml0ZSgpIGF2YWlsYWJsZSAmI3gyMkM2Oy8KKyAjZGVmaW5lIERNWF9DUkNfQ0hFQ0tJTkcgICAgICAgICAgICAgICAgICAgICAgICAxNgorICNkZWZpbmUgRE1YX1RTX0RFU0NSQU1CTElORyAgICAgICAgICAgICAgICAgICAgIDMyCisgI2RlZmluZSBETVhfU0VDVElPTl9QQVlMT0FEX0RFU0NSQU1CTElORyAgICAgICAgNjQKKyAjZGVmaW5lIERNWF9NQUNfQUREUkVTU19ERVNDUkFNQkxJTkcgICAgICAgICAgICAxMjgKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkZW11eF9kZW11eF90Ij4KKzx0aXRsZT5kZW11eF9kZW11eF90PC90aXRsZT4KKyA8cHJvZ3JhbWxpc3Rpbmc+CisgLyYjeDIyQzY7CisgICYjeDIyQzY7IERNWF9GRV9FTlRSWSgpOiBDYXN0cyBlbGVtZW50cyBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkCisgICYjeDIyQzY7IGZyb250LWVuZHMgZnJvbSB0aGUgZ2VuZXJpYyB0eXBlIHN0cnVjdCBsaXN0X2hlYWQKKyAgJiN4MjJDNjsgdG8gdGhlIHR5cGUgJiN4MjJDNjsgZG14X2Zyb250ZW5kX3QKKyAgJiN4MjJDNjsuCisgJiN4MjJDNjsvCisKKyAjZGVmaW5lIERNWF9GRV9FTlRSWShsaXN0KSBsaXN0X2VudHJ5KGxpc3QsIGRteF9mcm9udGVuZF90LCBjb25uZWN0aXZpdHlfbGlzdCkKKworIHN0cnVjdCBkbXhfZGVtdXhfcyB7CisJIC8mI3gyMkM2OyBUaGUgZm9sbG93aW5nIGNoYXImI3gyMkM2OyBmaWVsZHMgcG9pbnQgdG8gTlVMTCB0ZXJtaW5hdGVkIHN0cmluZ3MgJiN4MjJDNjsvCisJIGNoYXImI3gyMkM2OyBpZDsgICAgICAgICAgICAgICAgICAgIC8mI3gyMkM2OyBVbmlxdWUgZGVtdXggaWRlbnRpZmllciAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IHZlbmRvcjsgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE5hbWUgb2YgdGhlIGRlbXV4IHZlbmRvciAmI3gyMkM2Oy8KKwkgY2hhciYjeDIyQzY7IG1vZGVsOyAgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE5hbWUgb2YgdGhlIGRlbXV4IG1vZGVsICYjeDIyQzY7LworCSBfX3UzMiBjYXBhYmlsaXRpZXM7ICAgICAgICAgIC8mI3gyMkM2OyBCaXRmaWVsZCBvZiBjYXBhYmlsaXR5IGZsYWdzICYjeDIyQzY7LworCSBkbXhfZnJvbnRlbmRfdCYjeDIyQzY7IGZyb250ZW5kOyAgICAvJiN4MjJDNjsgRnJvbnQtZW5kIGNvbm5lY3RlZCB0byB0aGUgZGVtdXggJiN4MjJDNjsvCisJIHN0cnVjdCBsaXN0X2hlYWQgcmVnX2xpc3Q7ICAgLyYjeDIyQzY7IExpc3Qgb2YgcmVnaXN0ZXJlZCBkZW11eGVzICYjeDIyQzY7LworCSB2b2lkJiN4MjJDNjsgcHJpdjsgICAgICAgICAgICAgICAgICAvJiN4MjJDNjsgUG9pbnRlciB0byBwcml2YXRlIGRhdGEgb2YgdGhlIEFQSSBjbGllbnQgJiN4MjJDNjsvCisJIGludCB1c2VyczsgICAgICAgICAgICAgICAgICAgLyYjeDIyQzY7IE51bWJlciBvZiB1c2VycyAmI3gyMkM2Oy8KKwkgaW50ICgmI3gyMkM2O29wZW4pIChzdHJ1Y3QgZG14X2RlbXV4X3MmI3gyMkM2OyBkZW11eCk7CisJIGludCAoJiN4MjJDNjtjbG9zZSkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4KTsKKwkgaW50ICgmI3gyMkM2O3dyaXRlKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsIGNvbnN0IGNoYXImI3gyMkM2OyBidWYsIHNpemVfdCBjb3VudCk7CisJIGludCAoJiN4MjJDNjthbGxvY2F0ZV90c19mZWVkKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsCisJCQkJICBkbXhfdHNfZmVlZF90JiN4MjJDNjsmI3gyMkM2OyBmZWVkLAorCQkJCSAgZG14X3RzX2NiIGNhbGxiYWNrKTsKKwkgaW50ICgmI3gyMkM2O3JlbGVhc2VfdHNfZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSBkbXhfdHNfZmVlZF90JiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjthbGxvY2F0ZV9wZXNfZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgIGRteF9wZXNfZmVlZF90JiN4MjJDNjsmI3gyMkM2OyBmZWVkLAorCQkJCSAgIGRteF9wZXNfY2IgY2FsbGJhY2spOworCSBpbnQgKCYjeDIyQzY7cmVsZWFzZV9wZXNfZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgZG14X3Blc19mZWVkX3QmI3gyMkM2OyBmZWVkKTsKKwkgaW50ICgmI3gyMkM2O2FsbG9jYXRlX3NlY3Rpb25fZmVlZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgICAgICBkbXhfc2VjdGlvbl9mZWVkX3QmI3gyMkM2OyYjeDIyQzY7IGZlZWQsCisJCQkJICAgICAgIGRteF9zZWN0aW9uX2NiIGNhbGxiYWNrKTsKKwkgaW50ICgmI3gyMkM2O3JlbGVhc2Vfc2VjdGlvbl9mZWVkKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsCisJCQkJICAgICAgZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCk7CisJIGludCAoJiN4MjJDNjtkZXNjcmFtYmxlX21hY19hZGRyZXNzKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgsCisJCQkJCV9fdTgmI3gyMkM2OyBidWZmZXIxLAorCQkJCQlzaXplX3QgYnVmZmVyMV9sZW5ndGgsCisJCQkJCV9fdTgmI3gyMkM2OyBidWZmZXIyLAorCQkJCQlzaXplX3QgYnVmZmVyMl9sZW5ndGgsCisJCQkJCV9fdTE2IHBpZCk7CisJIGludCAoJiN4MjJDNjtkZXNjcmFtYmxlX3NlY3Rpb25fcGF5bG9hZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCQkgICAgX191OCYjeDIyQzY7IGJ1ZmZlcjEsCisJCQkJCSAgICBzaXplX3QgYnVmZmVyMV9sZW5ndGgsCisJCQkJCSAgICBfX3U4JiN4MjJDNjsgYnVmZmVyMiwgc2l6ZV90IGJ1ZmZlcjJfbGVuZ3RoLAorCQkJCQkgICAgX191MTYgcGlkKTsKKwkgaW50ICgmI3gyMkM2O2FkZF9mcm9udGVuZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJICAgICAgZG14X2Zyb250ZW5kX3QmI3gyMkM2OyBmcm9udGVuZCk7CisJIGludCAoJiN4MjJDNjtyZW1vdmVfZnJvbnRlbmQpIChzdHJ1Y3QgZG14X2RlbXV4X3MmI3gyMkM2OyBkZW11eCwKKwkJCQkgZG14X2Zyb250ZW5kX3QmI3gyMkM2OyBmcm9udGVuZCk7CisJIHN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyAoJiN4MjJDNjtnZXRfZnJvbnRlbmRzKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgpOworCSBpbnQgKCYjeDIyQzY7Y29ubmVjdF9mcm9udGVuZCkgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LAorCQkJCSAgZG14X2Zyb250ZW5kX3QmI3gyMkM2OyBmcm9udGVuZCk7CisJIGludCAoJiN4MjJDNjtkaXNjb25uZWN0X2Zyb250ZW5kKSAoc3RydWN0IGRteF9kZW11eF9zJiN4MjJDNjsgZGVtdXgpOworCisKKwkgLyYjeDIyQzY7IGFkZGVkIGJlY2F1c2UganMgY2Fubm90IGtlZXAgdHJhY2sgb2YgdGhlc2UgaGltc2VsZiAmI3gyMkM2Oy8KKwkgaW50ICgmI3gyMkM2O2dldF9wZXNfcGlkcykgKHN0cnVjdCBkbXhfZGVtdXhfcyYjeDIyQzY7IGRlbXV4LCBfX3UxNiAmI3gyMkM2O3BpZHMpOworIH07CisgdHlwZWRlZiBzdHJ1Y3QgZG14X2RlbXV4X3MgZG14X2RlbXV4X3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iZGVtdXhfZGlyZWN0b3J5Ij4KKzx0aXRsZT5EZW11eCBkaXJlY3Rvcnk8L3RpdGxlPgorIDxwcm9ncmFtbGlzdGluZz4KKyAvJiN4MjJDNjsKKyAgJiN4MjJDNjsgRE1YX0RJUl9FTlRSWSgpOiBDYXN0cyBlbGVtZW50cyBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkCisgICYjeDIyQzY7IGRlbXV4ZXMgZnJvbSB0aGUgZ2VuZXJpYyB0eXBlIHN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyB0byB0aGUgdHlwZSBkbXhfZGVtdXhfdAorICAmI3gyMkM2Oy4KKyAgJiN4MjJDNjsvCisKKyAjZGVmaW5lIERNWF9ESVJfRU5UUlkobGlzdCkgbGlzdF9lbnRyeShsaXN0LCBkbXhfZGVtdXhfdCwgcmVnX2xpc3QpCisKKyBpbnQgZG14X3JlZ2lzdGVyX2RlbXV4IChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4KTsKKyBpbnQgZG14X3VucmVnaXN0ZXJfZGVtdXggKGRteF9kZW11eF90JiN4MjJDNjsgZGVtdXgpOworIHN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyBkbXhfZ2V0X2RlbXV4ZXMgKHZvaWQpOworPC9wcm9ncmFtbGlzdGluZz4KKyA8L3NlY3Rpb24+PC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImRlbXV4X2RpcmVjdG9yeV9hcGkiPgorPHRpdGxlPkRlbXV4IERpcmVjdG9yeSBBUEk8L3RpdGxlPgorPHBhcmE+VGhlIGRlbXV4IGRpcmVjdG9yeSBpcyBhIExpbnV4IGtlcm5lbC13aWRlIGZhY2lsaXR5IGZvciByZWdpc3RlcmluZyBhbmQgYWNjZXNzaW5nIHRoZQorTVBFRy0yIFRTIGRlbXV4ZXMgaW4gdGhlIHN5c3RlbS4gUnVuLXRpbWUgcmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcgb2YgZGVtdXggZHJpdmVycworaXMgcG9zc2libGUgdXNpbmcgdGhpcyBBUEkuCis8L3BhcmE+Cis8cGFyYT5BbGwgZGVtdXggZHJpdmVycyBpbiB0aGUgZGlyZWN0b3J5IGltcGxlbWVudCB0aGUgYWJzdHJhY3QgaW50ZXJmYWNlIGRteF9kZW11eF90LgorPC9wYXJhPgorCis8c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmRteF9yZWdpc3Rlcl9kZW11eCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gbWFrZXMgYSBkZW11eCBkcml2ZXIgaW50ZXJmYWNlIGF2YWlsYWJsZSB0byB0aGUgTGludXgga2VybmVsLiBJdCBpcworIHVzdWFsbHkgY2FsbGVkIGJ5IHRoZSBpbml0X21vZHVsZSgpIGZ1bmN0aW9uIG9mIHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyB0aGUgZGVtdXggZHJpdmVyLiBUaGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcKKyBkeW5hbWljIG9yIHN0YXRpYyBtZW1vcnkgZm9yIHRoZSBkZW11eCBzdHJ1Y3R1cmUgYW5kIGZvciBpbml0aWFsaXppbmcgaXRzIGZpZWxkcworIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgZGVtdXggc3RydWN0dXJlCisgbXVzdCBub3QgYmUgZnJlZWQgYmVmb3JlIGNhbGxpbmcgZG14X3VucmVnaXN0ZXJfZGVtdXgoKSw8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRteF9yZWdpc3Rlcl9kZW11eCAoIGRteF9kZW11eF90ICYjeDIyQzY7ZGVtdXggKTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9kZW11eF90KgorIGRlbXV4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBkZW11eCBzdHJ1Y3R1cmUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHdhcyBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FRVhJU1Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgZGVtdXggd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgaWQgZmllbGQgYWxyZWFkeSBzdG9yZWQKKyBpbiB0aGUgZGlyZWN0b3J5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRU5PU1BDPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ObyBzcGFjZSBsZWZ0IGluIHRoZSBkaXJlY3RvcnkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+ZG14X3VucmVnaXN0ZXJfZGVtdXgoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBnaXZlbiBkZW11eCBpbnRlcmZhY2UgaXMgbm8KKyBsb25nZXIgYXZhaWxhYmxlLiBUaGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlCisgbWVtb3J5IG9mIHRoZSBkZW11eCBzdHJ1Y3R1cmUsIGlmIGl0IHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmVmb3JlIGNhbGxpbmcKKyBkbXhfcmVnaXN0ZXJfZGVtdXgoKS4gVGhlIGNsZWFudXBfbW9kdWxlKCkgZnVuY3Rpb24gb2YgdGhlIGtlcm5lbCBtb2R1bGUKKyB0aGF0IGNvbnRhaW5zIHRoZSBkZW11eCBkcml2ZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyBmYWlscyBpZiB0aGUgZGVtdXggaXMgY3VycmVudGx5IGluIHVzZSwgaS5lLiwgcmVsZWFzZV9kZW11eCgpIGhhcyBub3QgYmVlbiBjYWxsZWQKKyBmb3IgdGhlIGludGVyZmFjZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRteF91bnJlZ2lzdGVyX2RlbXV4ICggZG14X2RlbXV4X3QgJiN4MjJDNjtkZW11eCApPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QqCisgZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IHN0cnVjdHVyZSB3aGljaCBpcyB0byBiZQorIHVucmVnaXN0ZXJlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU5PREVWPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgc3BlY2lmaWVkIGRlbXV4IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBkZW11eAorIGRpcmVjdG9yeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBzcGVjaWZpZWQgZGVtdXggaXMgY3VycmVudGx5IGluIHVzZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kbXhfZ2V0X2RlbXV4ZXMoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qcm92aWRlcyB0aGUgY2FsbGVyIHdpdGggdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZW11eCBpbnRlcmZhY2VzLCB1c2luZyB0aGUKKyBzdGFuZGFyZCBsaXN0IHN0cnVjdHVyZSBkZWZpbmVkIGluIHRoZSBpbmNsdWRlIGZpbGUgbGludXgvbGlzdC5oLiBUaGUgaW5jbHVkZSBmaWxlCisgZGVtdXguaCBkZWZpbmVzIHRoZSBtYWNybyBETVhfRElSX0VOVFJZKCkgZm9yIGNvbnZlcnRpbmcgYW4gZWxlbWVudCBvZgorIHRoZSBnZW5lcmljIHR5cGUgc3RydWN0IGxpc3RfaGVhZCogdG8gdGhlIHR5cGUgZG14X2RlbXV4X3QqLiBUaGUgY2FsbGVyIG11c3QKKyBub3QgZnJlZSB0aGUgbWVtb3J5IG9mIGFueSBvZiB0aGUgZWxlbWVudHMgb2J0YWluZWQgdmlhIHRoaXMgZnVuY3Rpb24gY2FsbC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RydWN0IGxpc3RfaGVhZCAmI3gyMkM2O2RteF9nZXRfZGVtdXhlcyAoKTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPm5vbmU8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgbGlzdF9oZWFkICo8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgbGlzdCBvZiBkZW11eCBpbnRlcmZhY2VzLCBvciBOVUxMIGluIHRoZSBjYXNlIG9mIGFuCisgZW1wdHkgbGlzdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorIDwvc2VjdGlvbj48L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iZGVtdXhfYXBpIj4KKzx0aXRsZT5EZW11eCBBUEk8L3RpdGxlPgorPHBhcmE+VGhlIGRlbXV4IEFQSSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgZm9yIGVhY2ggZGVtdXggaW4gdGhlIHN5c3RlbS4gSXQgaXMgdXNlZCB0byBzZWxlY3QKK3RoZSBUUyBzb3VyY2Ugb2YgYSBkZW11eCBhbmQgdG8gbWFuYWdlIHRoZSBkZW11eCByZXNvdXJjZXMuIFdoZW4gdGhlIGRlbXV4CitjbGllbnQgYWxsb2NhdGVzIGEgcmVzb3VyY2UgdmlhIHRoZSBkZW11eCBBUEksIGl0IHJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgQVBJIG9mIHRoYXQKK3Jlc291cmNlLgorPC9wYXJhPgorPHBhcmE+RWFjaCBkZW11eCByZWNlaXZlcyBpdHMgVFMgaW5wdXQgZnJvbSBhIERWQiBmcm9udC1lbmQgb3IgZnJvbSBtZW1vcnksIGFzIHNldCB2aWEgdGhlCitkZW11eCBBUEkuIEluIGEgc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBmcm9udC1lbmQsIHRoZSBBUEkgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvZgordGhlIERWQiBmcm9udC1lbmRzIGFzIGEgVFMgc291cmNlIGZvciBhIGRlbXV4LCB1bmxlc3MgdGhpcyBpcyBmaXhlZCBpbiB0aGUgSFcgcGxhdGZvcm0uIFRoZQorZGVtdXggQVBJIG9ubHkgY29udHJvbHMgZnJvbnQtZW5kcyByZWdhcmRpbmcgdGhlaXIgY29ubmVjdGlvbnMgd2l0aCBkZW11eGVzOyB0aGUgQVBJcwordXNlZCB0byBzZXQgdGhlIG90aGVyIGZyb250LWVuZCBwYXJhbWV0ZXJzLCBzdWNoIGFzIHR1bmluZywgYXJlIG5vdCBkZWZpbmVkIGluIHRoaXMKK2RvY3VtZW50LgorPC9wYXJhPgorPHBhcmE+VGhlIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgYWJzdHJhY3QgaW50ZXJmYWNlIGRlbXV4IHNob3VsZCBiZSBkZWZpbmVkIHN0YXRpYyBvcgorbW9kdWxlIHByaXZhdGUgYW5kIHJlZ2lzdGVyZWQgdG8gdGhlIERlbXV4IERpcmVjdG9yeSBmb3IgZXh0ZXJuYWwgYWNjZXNzLiBJdCBpcyBub3QgbmVjZXNzYXJ5Cit0byBpbXBsZW1lbnQgZXZlcnkgZnVuY3Rpb24gaW4gdGhlIGRlbXV4X3Qgc3RydWN0LCBob3dldmVyIChmb3IgZXhhbXBsZSwgYSBkZW11eCBpbnRlcmZhY2UKK21pZ2h0IHN1cHBvcnQgU2VjdGlvbiBmaWx0ZXJpbmcsIGJ1dCBub3QgVFMgb3IgUEVTIGZpbHRlcmluZykuIFRoZSBBUEkgY2xpZW50IGlzIGV4cGVjdGVkIHRvCitjaGVjayB0aGUgdmFsdWUgb2YgYW55IGZ1bmN0aW9uIHBvaW50ZXIgYmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uOiB0aGUgdmFsdWUgb2YgTlVMTCBtZWFucworJiM4MjIwO2Z1bmN0aW9uIG5vdCBhdmFpbGFibGUmIzgyMjE7LgorPC9wYXJhPgorPHBhcmE+V2hlbmV2ZXIgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgZGVtdXggQVBJIG1vZGlmeSBzaGFyZWQgZGF0YSwgdGhlIHBvc3NpYmlsaXRpZXMgb2YgbG9zdAordXBkYXRlIGFuZCByYWNlIGNvbmRpdGlvbiBwcm9ibGVtcyBzaG91bGQgYmUgYWRkcmVzc2VkLCBlLmcuIGJ5IHByb3RlY3RpbmcgcGFydHMgb2YgY29kZSB3aXRoCittdXRleGVzLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IG9uIG11bHRpLXByb2Nlc3NvciBob3N0cy4KKzwvcGFyYT4KKzxwYXJhPk5vdGUgdGhhdCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gYSBib3R0b20gaGFsZiBjb250ZXh0IG11c3Qgbm90IHNsZWVwLCBhdCBsZWFzdCBpbiB0aGUgMi4yLngKK2tlcm5lbHMuIEV2ZW4gYSBzaW1wbGUgbWVtb3J5IGFsbG9jYXRpb24gY2FuIHJlc3VsdCBpbiBhIGtlcm5lbCB0aHJlYWQgYmVpbmcgcHV0IHRvIHNsZWVwIGlmCitzd2FwcGluZyBpcyBuZWVkZWQuIEZvciBleGFtcGxlLCB0aGUgTGludXgga2VybmVsIGNhbGxzIHRoZSBmdW5jdGlvbnMgb2YgYSBuZXR3b3JrIGRldmljZQoraW50ZXJmYWNlIGZyb20gYSBib3R0b20gaGFsZiBjb250ZXh0LiBUaHVzLCBpZiBhIGRlbXV4IEFQSSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBuZXR3b3JrCitkZXZpY2UgY29kZSwgdGhlIGZ1bmN0aW9uIG11c3Qgbm90IHNsZWVwLgorPC9wYXJhPgorCisKKzxzZWN0aW9uIGlkPSJrZGFwaV9mb3BlbiI+Cis8dGl0bGU+b3BlbigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gcmVzZXJ2ZXMgdGhlIGRlbXV4IGZvciB1c2UgYnkgdGhlIGNhbGxlciBhbmQsIGlmIG5lY2Vzc2FyeSwKKyBpbml0aWFsaXplcyB0aGUgZGVtdXguIFdoZW4gdGhlIGRlbXV4IGlzIG5vIGxvbmdlciBuZWVkZWQsIHRoZSBmdW5jdGlvbiBjbG9zZSgpCisgc2hvdWxkIGJlIGNhbGxlZC4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBtdWx0aXBsZSBjbGllbnRzIHRvIGFjY2VzcyB0aGUgZGVtdXgKKyBhdCB0aGUgc2FtZSB0aW1lLiBUaHVzLCB0aGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gc2hvdWxkIGluY3JlbWVudCB0aGUKKyBkZW11eCB1c2FnZSBjb3VudCB3aGVuIG9wZW4oKSBpcyBjYWxsZWQgYW5kIGRlY3JlbWVudCBpdCB3aGVuIGNsb3NlKCkgaXMKKyBjYWxsZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBvcGVuICggZGVtdXhfdCYjeDIyQzY7IGRlbXV4ICk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCogZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVVU0VSUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TWF4aW11bSB1c2FnZSBjb3VudCByZWFjaGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJrZGFwaV9mY2xvc2UiPgorPHRpdGxlPmNsb3NlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBmdW5jdGlvbiByZXNlcnZlcyB0aGUgZGVtdXggZm9yIHVzZSBieSB0aGUgY2FsbGVyIGFuZCwgaWYgbmVjZXNzYXJ5LAorIGluaXRpYWxpemVzIHRoZSBkZW11eC4gV2hlbiB0aGUgZGVtdXggaXMgbm8gbG9uZ2VyIG5lZWRlZCwgdGhlIGZ1bmN0aW9uIGNsb3NlKCkKKyBzaG91bGQgYmUgY2FsbGVkLiBJdCBzaG91bGQgYmUgcG9zc2libGUgZm9yIG11bHRpcGxlIGNsaWVudHMgdG8gYWNjZXNzIHRoZSBkZW11eAorIGF0IHRoZSBzYW1lIHRpbWUuIFRodXMsIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaW5jcmVtZW50IHRoZQorIGRlbXV4IHVzYWdlIGNvdW50IHdoZW4gb3BlbigpIGlzIGNhbGxlZCBhbmQgZGVjcmVtZW50IGl0IHdoZW4gY2xvc2UoKSBpcworIGNhbGxlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNsb3NlKGRlbXV4X3QmI3gyMkM2OyBkZW11eCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCogZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRlbXV4IHdhcyBub3QgaW4gdXNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJrZGFwaV9md3JpdGUiPgorPHRpdGxlPndyaXRlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUgZGVtdXggZHJpdmVyIHdpdGggYSBtZW1vcnkgYnVmZmVyIGNvbnRhaW5pbmcgVFMKKyBwYWNrZXRzLiBJbnN0ZWFkIG9mIHJlY2VpdmluZyBUUyBwYWNrZXRzIGZyb20gdGhlIERWQiBmcm9udC1lbmQsIHRoZSBkZW11eAorIGRyaXZlciBzb2Z0d2FyZSB3aWxsIHJlYWQgcGFja2V0cyBmcm9tIG1lbW9yeS4gQW55IGNsaWVudHMgb2YgdGhpcyBkZW11eAorIHdpdGggYWN0aXZlIFRTLCBQRVMgb3IgU2VjdGlvbiBmaWx0ZXJzIHdpbGwgcmVjZWl2ZSBmaWx0ZXJlZCBkYXRhIHZpYSB0aGUgRGVtdXgKKyBjYWxsYmFjayBBUEkgKHNlZSAwKS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hlbiBhbGwgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciBoYXMKKyBiZWVuIGNvbnN1bWVkIGJ5IHRoZSBkZW11eC4gRGVtdXggaGFyZHdhcmUgdHlwaWNhbGx5IGNhbm5vdCByZWFkIFRTIGZyb20KKyBtZW1vcnkuIElmIHRoaXMgaXMgdGhlIGNhc2UsIG1lbW9yeS1iYXNlZCBmaWx0ZXJpbmcgaGFzIHRvIGJlIGltcGxlbWVudGVkCisgZW50aXJlbHkgaW4gc29mdHdhcmUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCB3cml0ZShkZW11eF90JiN4MjJDNjsgZGVtdXgsIGNvbnN0IGNoYXImI3gyMkM2OyBidWYsIHNpemVfdAorIGNvdW50KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kZW11eF90KiBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5jb25zdCBjaGFyKiBidWY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGRhdGEgaW4ga2VybmVsLXNwYWNlIG1lbW9yeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGxlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBUUyBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRU5PU1lTPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgY29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+YWxsb2NhdGVfdHNfZmVlZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkFsbG9jYXRlcyBhIG5ldyBUUyBmZWVkLCB3aGljaCBpcyB1c2VkIHRvIGZpbHRlciB0aGUgVFMgcGFja2V0cyBjYXJyeWluZyBhCisgY2VydGFpbiBQSUQuIFRoZSBUUyBmZWVkIG5vcm1hbGx5IGNvcnJlc3BvbmRzIHRvIGEgaGFyZHdhcmUgUElEIGZpbHRlciBvbiB0aGUKKyBkZW11eCBjaGlwLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgYWxsb2NhdGVfdHNfZmVlZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4LAorIGRteF90c19mZWVkX3QmI3gyMkM2OyYjeDIyQzY7IGZlZWQsIGRteF90c19jYiBjYWxsYmFjayk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCogZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3RzX2ZlZWRfdCoqCisgZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgVFMgZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19jYiBjYWxsYmFjazwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBhc3NpbmcgcmVjZWl2ZWQgVFMKKyBwYWNrZXQ8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5ObyBtb3JlIFRTIGZlZWRzIGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGNvbW1hbmQgaXMgbm90IGltcGxlbWVudGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnJlbGVhc2VfdHNfZmVlZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlJlbGVhc2VzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHdpdGggYWxsb2NhdGVfdHNfZmVlZCgpLiBBbnkgZmlsdGVyaW5nIGluCisgcHJvZ3Jlc3Mgb24gdGhlIFRTIGZlZWQgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlbGVhc2VfdHNfZmVlZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4LAorIGRteF90c19mZWVkX3QmI3gyMkM2OyBmZWVkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kZW11eF90KiBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfdHNfZmVlZF90KiBmZWVkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBUUyBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5hbGxvY2F0ZV9zZWN0aW9uX2ZlZWQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BbGxvY2F0ZXMgYSBuZXcgc2VjdGlvbiBmZWVkLCBpLmUuIGEgZGVtdXggcmVzb3VyY2UgZm9yIGZpbHRlcmluZyBhbmQgcmVjZWl2aW5nCisgc2VjdGlvbnMuIE9uIHBsYXRmb3JtcyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHNlY3Rpb24gZmlsdGVyaW5nLCBhIHNlY3Rpb24KKyBmZWVkIGlzIGRpcmVjdGx5IG1hcHBlZCB0byB0aGUgZGVtdXggSFcuIE9uIG90aGVyIHBsYXRmb3JtcywgVFMgcGFja2V0cyBhcmUKKyBmaXJzdCBQSUQgZmlsdGVyZWQgaW4gaGFyZHdhcmUgYW5kIGEgaGFyZHdhcmUgc2VjdGlvbiBmaWx0ZXIgdGhlbiBlbXVsYXRlZCBpbgorIHNvZnR3YXJlLiBUaGUgY2FsbGVyIG9idGFpbnMgYW4gQVBJIHBvaW50ZXIgb2YgdHlwZSBkbXhfc2VjdGlvbl9mZWVkX3QgYXMgYW4KKyBvdXQgcGFyYW1ldGVyLiBVc2luZyB0aGlzIEFQSSB0aGUgY2FsbGVyIGNhbiBzZXQgZmlsdGVyaW5nIHBhcmFtZXRlcnMgYW5kIHN0YXJ0CisgcmVjZWl2aW5nIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgYWxsb2NhdGVfc2VjdGlvbl9mZWVkKGRteF9kZW11eF90JiN4MjJDNjsgZGVtdXgsCisgZG14X3NlY3Rpb25fZmVlZF90ICYjeDIyQzY7JiN4MjJDNjtmZWVkLCBkbXhfc2VjdGlvbl9jYiBjYWxsYmFjayk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZGVtdXhfdCAqZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90CisgKipmZWVkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBzZWN0aW9uIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9jYgorIGNhbGxiYWNrPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcGFzc2luZyByZWNlaXZlZAorIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUJVU1k8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vIG1vcmUgc2VjdGlvbiBmZWVkcyBhdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5yZWxlYXNlX3NlY3Rpb25fZmVlZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlJlbGVhc2VzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHdpdGggYWxsb2NhdGVfc2VjdGlvbl9mZWVkKCksIGluY2x1ZGluZworIGFsbG9jYXRlZCBmaWx0ZXJzLiBBbnkgZmlsdGVyaW5nIGluIHByb2dyZXNzIG9uIHRoZSBzZWN0aW9uIGZlZWQgc2hvdWxkIGJlIHN0b3BwZWQKKyBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVsZWFzZV9zZWN0aW9uX2ZlZWQoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwKKyBkbXhfc2VjdGlvbl9mZWVkX3QgJiN4MjJDNjtmZWVkKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kZW11eF90ICpkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9mZWVkX3QKKyAqZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc2VjdGlvbiBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kZXNjcmFtYmxlX21hY19hZGRyZXNzKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBmdW5jdGlvbiBydW5zIGEgZGVzY3JhbWJsaW5nIGFsZ29yaXRobSBvbiB0aGUgZGVzdGluYXRpb24gTUFDCisgYWRkcmVzcyBmaWVsZCBvZiBhIERWQiBEYXRhZ3JhbSBTZWN0aW9uLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIGFkZHJlc3MKKyB3aXRoIGl0cyB1bi1lbmNyeXB0ZWQgdmVyc2lvbi4gT3RoZXJ3aXNlLCB0aGUgZGVzY3JpcHRpb24gb24gdGhlIGZ1bmN0aW9uCisgZGVzY3JhbWJsZV9zZWN0aW9uX3BheWxvYWQoKSBhcHBsaWVzIGFsc28gdG8gdGhpcyBmdW5jdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRlc2NyYW1ibGVfbWFjX2FkZHJlc3MoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwgX191OAorICYjeDIyQzY7YnVmZmVyMSwgc2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoLCBfX3U4ICYjeDIyQzY7YnVmZmVyMiwKKyBzaXplX3QgYnVmZmVyMl9sZW5ndGgsIF9fdTE2IHBpZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QKKyAqZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191OCAqYnVmZmVyMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc2VjdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5MZW5ndGggb2YgdGhlIHNlY3Rpb24gZGF0YSwgaW5jbHVkaW5nIGhlYWRlcnMgYW5kIENSQywKKyBpbiBidWZmZXIxLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4KiBidWZmZXIyPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBzZWN0aW9uIGRhdGEsIG9yIE5VTEwuIFRoZQorIHBvaW50ZXIgaGFzIGEgbm9uLU5VTEwgdmFsdWUgaWYgdGhlIHNlY3Rpb24gd3JhcHMgcGFzdAorIHRoZSBlbmQgb2YgYSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBzZWN0aW9uIGRhdGEsIGluY2x1ZGluZyBoZWFkZXJzIGFuZCBDUkMsCisgaW4gYnVmZmVyMi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191MTYgcGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgUElEIG9uIHdoaWNoIHRoZSBzZWN0aW9uIHdhcyByZWNlaXZlZC4gVXNlZnVsCisgZm9yIG9idGFpbmluZyB0aGUgZGVzY3JhbWJsaW5nIGtleSwgZS5nLiBmcm9tIGEgRFZCCisgQ29tbW9uIEFjY2VzcyBmYWNpbGl0eS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGVzY3JhbWJsaW5nIGZhY2lsaXR5IGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kZXNjcmFtYmxlX3NlY3Rpb25fcGF5bG9hZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gcnVucyBhIGRlc2NyYW1ibGluZyBhbGdvcml0aG0gb24gdGhlIHBheWxvYWQgb2YgYSBEVkIKKyBEYXRhZ3JhbSBTZWN0aW9uLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIHBheWxvYWQgd2l0aCBpdHMgdW4tZW5jcnlwdGVkCisgdmVyc2lvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGRlbXV4IEFQSSBpbXBsZW1lbnRhdGlvbjsKKyB0aGUgQVBJIGNsaWVudCBuZWVkIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuIFNlY3Rpb24tbGV2ZWwgc2NyYW1ibGluZworIGFsZ29yaXRobXMgYXJlIGN1cnJlbnRseSBzdGFuZGFyZGl6ZWQgb25seSBmb3IgRFZCLVJDQyAocmV0dXJuIGNoYW5uZWwKKyBvdmVyIDItZGlyZWN0aW9uYWwgY2FibGUgVFYgbmV0d29yaykgc3lzdGVtcy4gRm9yIGFsbCBvdGhlciBEVkIgbmV0d29ya3MsCisgZW5jcnlwdGlvbiBzY2hlbWVzIGFyZSBsaWtlbHkgdG8gYmUgcHJvcHJpZXRhcnkgdG8gZWFjaCBkYXRhIGJyb2FkY2FzdGVyLiBUaHVzLAorIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBmdW5jdGlvbiBwb2ludGVyIHdpbGwgaGF2ZSB0aGUgdmFsdWUgb2YgTlVMTCAoaS5lLiwKKyBmdW5jdGlvbiBub3QgYXZhaWxhYmxlKSBpbiBtb3N0IGRlbXV4IEFQSSBpbXBsZW1lbnRhdGlvbnMuIE5ldmVydGhlbGVzcywgaXQKKyBzaG91bGQgYmUgcG9zc2libGUgdG8gdXNlIHRoZSBmdW5jdGlvbiBwb2ludGVyIGFzIGEgaG9vayBmb3IgZHluYW1pY2FsbHkgYWRkaW5nCisgYSAmIzgyMjA7cGx1Zy1pbiYjODIyMTsgZGVzY3JhbWJsaW5nIGZhY2lsaXR5IHRvIGEgZGVtdXggZHJpdmVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5XaGlsZSB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBuZWVkZWQgd2l0aCBoYXJkd2FyZS1iYXNlZCBzZWN0aW9uIGRlc2NyYW1ibGluZywKKyB0aGUgZGVzY3JhbWJsZV9zZWN0aW9uX3BheWxvYWQgZnVuY3Rpb24gcG9pbnRlciBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUKKyBkZWZhdWx0IGhhcmR3YXJlLWJhc2VkIGRlc2NyYW1ibGluZyBhbGdvcml0aG06IGlmIHRoZSBmdW5jdGlvbiBwb2ludGVyIGhhcyBhCisgbm9uLU5VTEwgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgYW55CisgZGVzY3JhbWJsaW5nIGhhcmR3YXJlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZGVzY3JhbWJsZV9zZWN0aW9uX3BheWxvYWQoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwKKyBfX3U4ICYjeDIyQzY7YnVmZmVyMSwgc2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoLCBfX3U4ICYjeDIyQzY7YnVmZmVyMiwKKyBzaXplX3QgYnVmZmVyMl9sZW5ndGgsIF9fdTE2IHBpZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QKKyAqZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191OCAqYnVmZmVyMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc2VjdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90IGJ1ZmZlcjFfbGVuZ3RoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5MZW5ndGggb2YgdGhlIHNlY3Rpb24gZGF0YSwgaW5jbHVkaW5nIGhlYWRlcnMgYW5kIENSQywKKyBpbiBidWZmZXIxLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4ICpidWZmZXIyPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBzZWN0aW9uIGRhdGEsIG9yIE5VTEwuIFRoZQorIHBvaW50ZXIgaGFzIGEgbm9uLU5VTEwgdmFsdWUgaWYgdGhlIHNlY3Rpb24gd3JhcHMgcGFzdAorIHRoZSBlbmQgb2YgYSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBzZWN0aW9uIGRhdGEsIGluY2x1ZGluZyBoZWFkZXJzIGFuZCBDUkMsCisgaW4gYnVmZmVyMi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191MTYgcGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgUElEIG9uIHdoaWNoIHRoZSBzZWN0aW9uIHdhcyByZWNlaXZlZC4gVXNlZnVsCisgZm9yIG9idGFpbmluZyB0aGUgZGVzY3JhbWJsaW5nIGtleSwgZS5nLiBmcm9tIGEgRFZCCisgQ29tbW9uIEFjY2VzcyBmYWNpbGl0eS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGVzY3JhbWJsaW5nIGZhY2lsaXR5IGF2YWlsYWJsZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5hZGRfZnJvbnRlbmQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5SZWdpc3RlcnMgYSBjb25uZWN0aXZpdHkgYmV0d2VlbiBhIGRlbXV4IGFuZCBhIGZyb250LWVuZCwgaS5lLiwgaW5kaWNhdGVzIHRoYXQKKyB0aGUgZGVtdXggY2FuIGJlIGNvbm5lY3RlZCB2aWEgYSBjYWxsIHRvIGNvbm5lY3RfZnJvbnRlbmQoKSB0byB1c2UgdGhlIGdpdmVuCisgZnJvbnQtZW5kIGFzIGEgVFMgc291cmNlLiBUaGUgY2xpZW50IG9mIHRoaXMgZnVuY3Rpb24gaGFzIHRvIGFsbG9jYXRlIGR5bmFtaWMgb3IKKyBzdGF0aWMgbWVtb3J5IGZvciB0aGUgZnJvbnRlbmQgc3RydWN0dXJlIGFuZCBpbml0aWFsaXplIGl0cyBmaWVsZHMgYmVmb3JlIGNhbGxpbmcKKyB0aGlzIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IGNhbGxlZCBkdXJpbmcgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbi4KKyBUaGUgY2FsbGVyIG11c3Qgbm90IGZyZWUgdGhlIG1lbW9yeSBvZiB0aGUgZnJvbnRlbmQgc3RydWN0IGJlZm9yZSBzdWNjZXNzZnVsbHkKKyBjYWxsaW5nIHJlbW92ZV9mcm9udGVuZCgpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgYWRkX2Zyb250ZW5kKGRteF9kZW11eF90ICYjeDIyQzY7ZGVtdXgsIGRteF9mcm9udGVuZF90CisgJiN4MjJDNjtmcm9udGVuZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QqCisgZGVtdXg8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGRlbXV4IEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2Zyb250ZW5kX3QqCisgZnJvbnRlbmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIGZyb250LWVuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUVYSVNUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BIGZyb250LWVuZCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIHRoZSBpZCBmaWVsZCBhbHJlYWR5CisgcmVnaXN0ZXJlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlVTRTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGRlbXV4IGlzIGluIHVzZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gbW9yZSBmcm9udC1lbmRzIGNhbiBiZSBhZGRlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5yZW1vdmVfZnJvbnRlbmQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgdGhhdCB0aGUgZ2l2ZW4gZnJvbnQtZW5kLCByZWdpc3RlcmVkIGJ5IGEgY2FsbCB0byBhZGRfZnJvbnRlbmQoKSwgY2FuCisgbm8gbG9uZ2VyIGJlIGNvbm5lY3RlZCBhcyBhIFRTIHNvdXJjZSBieSB0aGlzIGRlbXV4LiBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlCisgY2FsbGVkIHdoZW4gYSBmcm9udC1lbmQgZHJpdmVyIG9yIGEgZGVtdXggZHJpdmVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorIElmIHRoZSBmcm9udC1lbmQgaXMgaW4gdXNlLCB0aGUgZnVuY3Rpb24gZmFpbHMgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIC1FQlVTWS4KKyBBZnRlciBzdWNjZXNzZnVsbHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgY2FsbGVyIGNhbiBmcmVlIHRoZSBtZW1vcnkgb2YKKyB0aGUgZnJvbnRlbmQgc3RydWN0IGlmIGl0IHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBhZGRfZnJvbnRlbmQoKQorIG9wZXJhdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlbW92ZV9mcm9udGVuZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4LAorIGRteF9mcm9udGVuZF90JiN4MjJDNjsgZnJvbnRlbmQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9kZW11eF90KgorIGRlbXV4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBkZW11eCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9mcm9udGVuZF90KgorIGZyb250ZW5kPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBmcm9udC1lbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnJvbnQtZW5kIGlzIGluIHVzZSwgaS5lLiBhIGNhbGwgdG8gY29ubmVjdF9mcm9udGVuZCgpCisgaGFzIG5vdCBiZWVuIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBkaXNjb25uZWN0X2Zyb250ZW5kKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+Z2V0X2Zyb250ZW5kcygpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlByb3ZpZGVzIHRoZSBBUElzIG9mIHRoZSBmcm9udC1lbmRzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgZm9yIHRoaXMgZGVtdXguCisgQW55IG9mIHRoZSBmcm9udC1lbmRzIG9idGFpbmVkIHdpdGggdGhpcyBjYWxsIGNhbiBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyIGZvcgorIGNvbm5lY3RfZnJvbnRlbmQoKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGluY2x1ZGUgZmlsZSBkZW11eC5oIGNvbnRhaW5zIHRoZSBtYWNybyBETVhfRkVfRU5UUlkoKSBmb3IKKyBjb252ZXJ0aW5nIGFuIGVsZW1lbnQgb2YgdGhlIGdlbmVyaWMgdHlwZSBzdHJ1Y3QgbGlzdF9oZWFkKiB0byB0aGUgdHlwZQorIGRteF9mcm9udGVuZF90Ki4gVGhlIGNhbGxlciBtdXN0IG5vdCBmcmVlIHRoZSBtZW1vcnkgb2YgYW55IG9mIHRoZSBlbGVtZW50cworIG9idGFpbmVkIHZpYSB0aGlzIGZ1bmN0aW9uIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdCBsaXN0X2hlYWQmI3gyMkM2OyBnZXRfZnJvbnRlbmRzKGRteF9kZW11eF90JiN4MjJDNjsgZGVtdXgpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9kZW11eF90KgorIGRlbXV4PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBkZW11eCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X2RlbXV4X3QqPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BIGxpc3Qgb2YgZnJvbnQtZW5kIGludGVyZmFjZXMsIG9yIE5VTEwgaW4gdGhlIGNhc2Ugb2YgYW4KKyBlbXB0eSBsaXN0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmNvbm5lY3RfZnJvbnRlbmQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Db25uZWN0cyB0aGUgVFMgb3V0cHV0IG9mIHRoZSBmcm9udC1lbmQgdG8gdGhlIGlucHV0IG9mIHRoZSBkZW11eC4gQSBkZW11eAorIGNhbiBvbmx5IGJlIGNvbm5lY3RlZCB0byBhIGZyb250LWVuZCByZWdpc3RlcmVkIHRvIHRoZSBkZW11eCB3aXRoIHRoZSBmdW5jdGlvbgorIGFkZF9mcm9udGVuZCgpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JdCBtYXkgb3IgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBjb25uZWN0IG11bHRpcGxlIGRlbXV4ZXMgdG8gdGhlIHNhbWUKKyBmcm9udC1lbmQsIGRlcGVuZGluZyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBIVyBwbGF0Zm9ybS4gV2hlbiBub3QgdXNlZCwKKyB0aGUgZnJvbnQtZW5kIHNob3VsZCBiZSByZWxlYXNlZCBieSBjYWxsaW5nIGRpc2Nvbm5lY3RfZnJvbnRlbmQoKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNvbm5lY3RfZnJvbnRlbmQoZG14X2RlbXV4X3QmI3gyMkM2OyBkZW11eCwKKyBkbXhfZnJvbnRlbmRfdCYjeDIyQzY7IGZyb250ZW5kKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfZGVtdXhfdCoKKyBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfZnJvbnRlbmRfdCoKKyBmcm9udGVuZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZnJvbnQtZW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHdhcyBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FQlVTWTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZyb250LWVuZCBpcyBpbiB1c2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+ZGlzY29ubmVjdF9mcm9udGVuZCgpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRpc2Nvbm5lY3RzIHRoZSBkZW11eCBhbmQgYSBmcm9udC1lbmQgcHJldmlvdXNseSBjb25uZWN0ZWQgYnkgYQorIGNvbm5lY3RfZnJvbnRlbmQoKSBjYWxsLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZGlzY29ubmVjdF9mcm9udGVuZChkbXhfZGVtdXhfdCYjeDIyQzY7IGRlbXV4KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfZGVtdXhfdCoKKyBkZW11eDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgZGVtdXggQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkZW11eF9jYWxsYmFja19hcGkiPgorPHRpdGxlPkRlbXV4IENhbGxiYWNrIEFQSTwvdGl0bGU+Cis8cGFyYT5UaGlzIGtlcm5lbC1zcGFjZSBBUEkgY29tcHJpc2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCBkZWxpdmVyIGZpbHRlcmVkIGRhdGEgdG8gdGhlCitkZW11eCBjbGllbnQuIFVubGlrZSB0aGUgb3RoZXIgQVBJcywgdGhlc2UgQVBJIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCBhbmQgY2FsbGVkCitmcm9tIHRoZSBkZW11eCBjb2RlLgorPC9wYXJhPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHBvaW50ZXJzIG9mIHRoaXMgYWJzdHJhY3QgaW50ZXJmYWNlIGFyZSBub3QgcGFja2VkIGludG8gYSBzdHJ1Y3R1cmUgYXMgaW4gdGhlCitvdGhlciBkZW11eCBBUElzLCBiZWNhdXNlIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVzZWQgaW5kZXBlbmRlbnQKK29mIGVhY2ggb3RoZXIuIEFzIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgQVBJIGNsaWVudCB0byBwcm92aWRlIHNldmVyYWwKK2NhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgcmVjZWl2aW5nIFRTIHBhY2tldHMgYW5kIG5vIGNhbGxiYWNrcyBmb3IgUEVTIHBhY2tldHMgb3IKK3NlY3Rpb25zLgorPC9wYXJhPgorPHBhcmE+VGhlIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgQVBJIG5lZWQgbm90IGJlIHJlLWVudHJhbnQ6IHdoZW4gYSBkZW11eAorZHJpdmVyIGNhbGxzIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoZSBkcml2ZXIgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gYWdhaW4gYmVmb3JlCit0aGUgb3JpZ2luYWwgY2FsbCByZXR1cm5zLiBJZiBhIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCBieSBhIGhhcmR3YXJlIGludGVycnVwdCwgaXQgaXMgcmVjb21tZW5kZWQKK3RvIHVzZSB0aGUgTGludXggJiM4MjIwO2JvdHRvbSBoYWxmJiM4MjIxOyBtZWNoYW5pc20gb3Igc3RhcnQgYSB0YXNrbGV0IGluc3RlYWQgb2YgbWFraW5nIHRoZSBjYWxsYmFjaworZnVuY3Rpb24gY2FsbCBkaXJlY3RseSBmcm9tIGEgaGFyZHdhcmUgaW50ZXJydXB0LgorPC9wYXJhPgorCis8c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmRteF90c19jYigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24sIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgb2YgdGhlIGRlbXV4IEFQSSwgaXMgY2FsbGVkIGZyb20gdGhlCisgZGVtdXggY29kZS4gVGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gZmlsdGVyaW5nIG9uIHRoaXMgVFMgZmVlZCBoYXMKKyBiZWVuIGVuYWJsZWQgdXNpbmcgdGhlIHN0YXJ0X2ZpbHRlcmluZygpIGZ1bmN0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5BbnkgVFMgcGFja2V0cyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIgc2V0dGluZ3MgYXJlIGNvcGllZCB0byBhIGNpcmN1bGFyIGJ1ZmZlci4gVGhlCisgZmlsdGVyZWQgVFMgcGFja2V0cyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBjbGllbnQgdXNpbmcgdGhpcyBjYWxsYmFjayBmdW5jdGlvbi4gVGhlCisgc2l6ZSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGNpcmN1bGFyX2J1ZmZlcl9zaXplIHBhcmFtZXRlcgorIG9mIHRoZSBzZXQoKSBmdW5jdGlvbiBpbiB0aGUgVFMgRmVlZCBBUEkuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGJ1ZmZlcjEgYW5kCisgYnVmZmVyMiBjYWxsYmFjayBwYXJhbWV0ZXJzIHBvaW50IHRvIGFkZHJlc3NlcyB3aXRoaW4gdGhlIGNpcmN1bGFyIGJ1ZmZlciwgYnV0Cisgb3RoZXIgaW1wbGVtZW50YXRpb25zIGFyZSBhbHNvIHBvc3NpYmxlLiBOb3RlIHRoYXQgdGhlIGNhbGxlZCBwYXJ0eSBzaG91bGQgbm90CisgdHJ5IHRvIGZyZWUgdGhlIG1lbW9yeSB0aGUgYnVmZmVyMSBhbmQgYnVmZmVyMiBwYXJhbWV0ZXJzIHBvaW50IHRvLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5XaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgYnVmZmVyMSBwYXJhbWV0ZXIgdHlwaWNhbGx5IHBvaW50cyB0byB0aGUKKyBzdGFydCBvZiB0aGUgZmlyc3QgdW5kZWxpdmVyZWQgVFMgcGFja2V0IHdpdGhpbiBhIGNpcmN1bGFyIGJ1ZmZlci4gVGhlIGJ1ZmZlcjIKKyBidWZmZXIgcGFyYW1ldGVyIGlzIG5vcm1hbGx5IE5VTEwsIGV4Y2VwdCB3aGVuIHRoZSByZWNlaXZlZCBUUyBwYWNrZXRzIGhhdmUKKyBjcm9zc2VkIHRoZSBsYXN0IGFkZHJlc3Mgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgJiM4MjIxO3dyYXBwZWQmIzgyMjE7IHRvIHRoZSBiZWdpbm5pbmcKKyBvZiB0aGUgYnVmZmVyLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlIGJ1ZmZlcjEgcGFyYW1ldGVyIHdvdWxkIGNvbnRhaW4gYW4gYWRkcmVzcworIHdpdGhpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLCB3aGlsZSB0aGUgYnVmZmVyMiBwYXJhbWV0ZXIgd291bGQgY29udGFpbiB0aGUgZmlyc3QKKyBhZGRyZXNzIG9mIHRoZSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBudW1iZXIgb2YgYnl0ZXMgZGVsaXZlcmVkIHdpdGggdGhpcyBmdW5jdGlvbiAoaS5lLiBidWZmZXIxX2xlbmd0aCArCisgYnVmZmVyMl9sZW5ndGgpIGlzIHVzdWFsbHkgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGNhbGxiYWNrX2xlbmd0aCBwYXJhbWV0ZXIKKyBnaXZlbiBpbiB0aGUgc2V0KCkgZnVuY3Rpb24sIHdpdGggb25lIGV4Y2VwdGlvbjogaWYgYSB0aW1lb3V0IG9jY3VycyBiZWZvcmUKKyByZWNlaXZpbmcgY2FsbGJhY2tfbGVuZ3RoIGJ5dGVzIG9mIFRTIGRhdGEsIGFueSB1bmRlbGl2ZXJlZCBwYWNrZXRzIGFyZQorIGltbWVkaWF0ZWx5IGRlbGl2ZXJlZCB0byB0aGUgY2xpZW50IGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVGhlIHRpbWVvdXQKKyBkdXJhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZXQoKSBmdW5jdGlvbiBpbiB0aGUgVFMgRmVlZCBBUEkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklmIGEgVFMgcGFja2V0IGlzIHJlY2VpdmVkIHdpdGggZXJyb3JzIHRoYXQgY291bGQgbm90IGJlIGZpeGVkIGJ5IHRoZSBUUy1sZXZlbAorIGZvcndhcmQgZXJyb3IgY29ycmVjdGlvbiAoRkVDKSwgdGhlIFRyYW5zcG9ydF9lcnJvcl9pbmRpY2F0b3IgZmxhZyBvZiB0aGUgVFMKKyBwYWNrZXQgaGVhZGVyIHNob3VsZCBiZSBzZXQuIFRoZSBUUyBwYWNrZXQgc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQsIGFzCisgdGhlIGVycm9yIGNhbiBwb3NzaWJseSBiZSBjb3JyZWN0ZWQgYnkgYSBoaWdoZXIgbGF5ZXIgcHJvdG9jb2wuIElmIHRoZSBjYWxsZWQKKyBwYXJ0eSBpcyBzbG93IGluIHByb2Nlc3NpbmcgdGhlIGNhbGxiYWNrLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjaXJjdWxhciBidWZmZXIKKyBldmVudHVhbGx5IGZpbGxzIHVwLiBJZiB0aGlzIGhhcHBlbnMsIHRoZSBkZW11eCBkcml2ZXIgc2hvdWxkIGRpc2NhcmQgYW55IFRTCisgcGFja2V0cyByZWNlaXZlZCB3aGlsZSB0aGUgYnVmZmVyIGlzIGZ1bGwuIFRoZSBlcnJvciBzaG91bGQgYmUgaW5kaWNhdGVkIHRvIHRoZQorIGNsaWVudCBvbiB0aGUgbmV4dCBjYWxsYmFjayBieSBzZXR0aW5nIHRoZSBzdWNjZXNzIHBhcmFtZXRlciB0byB0aGUgdmFsdWUgb2YKKyBETVhfT1ZFUlJVTl9FUlJPUi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIHR5cGUgb2YgZGF0YSByZXR1cm5lZCB0byB0aGUgY2FsbGJhY2sgY2FuIGJlIHNlbGVjdGVkIGJ5IHRoZSBuZXcKKyBmdW5jdGlvbiBpbnQgKCpzZXRfdHlwZSkgKHN0cnVjdCBkbXhfdHNfZmVlZF9zKiBmZWVkLCBpbnQgdHlwZSwgZG14X3RzX3Blc190CisgcGVzX3R5cGUpIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRteF90c19mZWVkX3Mgc3RydWN0IChhbHNvIGNmLiB0byB0aGUKKyBpbmNsdWRlIGZpbGUgb3N0L2RlbXV4LmgpIFRoZSB0eXBlIHBhcmFtZXRlciBkZWNpZGVzIGlmIHRoZSByYXcgVFMgcGFja2V0CisgKFRTX1BBQ0tFVCkgb3IganVzdCB0aGUgcGF5bG9hZCAoVFNfUEFDS0VUJiM4MjEyO1RTX1BBWUxPQURfT05MWSkKKyBzaG91bGQgYmUgcmV0dXJuZWQuIElmIGFkZGl0aW9uYWxseSB0aGUgVFNfREVDT0RFUiBiaXQgaXMgc2V0IHRoZSBzdHJlYW0KKyB3aWxsIGFsc28gYmUgc2VudCB0byB0aGUgaGFyZHdhcmUgTVBFRyBkZWNvZGVyLiBJbiB0aGlzIGNhc2UsIHRoZSBzZWNvbmQKKyBmbGFnIGRlY2lkZXMgYXMgd2hhdCBraW5kIG9mIGRhdGEgdGhlIHN0cmVhbSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQuIFRoZQorIHBvc3NpYmxlIGNob2ljZXMgYXJlIG9uZSBvZiBETVhfVFNfUEVTX0FVRElPLCBETVhfVFNfUEVTX1ZJREVPLAorIERNWF9UU19QRVNfVEVMRVRFWFQsIERNWF9UU19QRVNfU1VCVElUTEUsCisgRE1YX1RTX1BFU19QQ1IsIG9yIERNWF9UU19QRVNfT1RIRVIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBkbXhfdHNfY2IoX191OCYjeDIyQzY7IGJ1ZmZlcjEsIHNpemVfdCBidWZmZXIxX2xlbmd0aCwKKyBfX3U4JiN4MjJDNjsgYnVmZmVyMiwgc2l6ZV90IGJ1ZmZlcjJfbGVuZ3RoLCBkbXhfdHNfZmVlZF90JiN4MjJDNjsKKyBzb3VyY2UsIGRteF9zdWNjZXNzX3Qgc3VjY2Vzcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+X191OCogYnVmZmVyMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbHRlcmVkIFRTIHBhY2tldHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIxX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBUUyBkYXRhIGluIGJ1ZmZlcjEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPl9fdTgqIGJ1ZmZlcjI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGZpbHRlcmVkIFRTIHBhY2tldHMsIG9yIE5VTEwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBUUyBkYXRhIGluIGJ1ZmZlcjIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqCisgc291cmNlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgd2hpY2ggVFMgZmVlZCBpcyB0aGUgc291cmNlIG9mIHRoZSBjYWxsYmFjay48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3N1Y2Nlc3NfdAorIHN1Y2Nlc3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gVFMgcmVjZXB0aW9uLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkNvbnRpbnVlIGZpbHRlcmluZy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LTE8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlN0b3AgZmlsdGVyaW5nIC0gaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBhIGNhbGwgdG8KKyBzdG9wX2ZpbHRlcmluZygpIG9uIHRoZSBUUyBGZWVkIEFQSS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5kbXhfc2VjdGlvbl9jYigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24sIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgb2YgdGhlIGRlbXV4IEFQSSwgaXMgY2FsbGVkIGZyb20gdGhlCisgZGVtdXggY29kZS4gVGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gZmlsdGVyaW5nIG9mIHNlY3Rpb25zIGhhcyBiZWVuCisgZW5hYmxlZCB1c2luZyB0aGUgZnVuY3Rpb24gc3RhcnRfZmlsdGVyaW5nKCkgb2YgdGhlIHNlY3Rpb24gZmVlZCBBUEkuIFdoZW4gdGhlCisgZGVtdXggZHJpdmVyIGhhcyByZWNlaXZlZCBhIGNvbXBsZXRlIHNlY3Rpb24gdGhhdCBtYXRjaGVzIGF0IGxlYXN0IG9uZSBzZWN0aW9uCisgZmlsdGVyLCB0aGUgY2xpZW50IGlzIG5vdGlmaWVkIHZpYSB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uLiBOb3JtYWxseSB0aGlzIGZ1bmN0aW9uIGlzCisgY2FsbGVkIGZvciBlYWNoIHJlY2VpdmVkIHNlY3Rpb247IGhvd2V2ZXIsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gZGVsaXZlciBtdWx0aXBsZQorIHNlY3Rpb25zIHdpdGggb25lIGNhbGxiYWNrLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBzeXN0ZW0gbG9hZCBpcyBoaWdoLiBJZiBhbgorIGVycm9yIG9jY3VycyB3aGlsZSByZWNlaXZpbmcgYSBzZWN0aW9uLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aAorIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIHR5cGUgc2V0IGluIHRoZSBzdWNjZXNzIGZpZWxkLCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcworIGRhdGEgdG8gZGVsaXZlci4gVGhlIFNlY3Rpb24gRmVlZCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbWFpbnRhaW4gYSBjaXJjdWxhcgorIGJ1ZmZlciBmb3IgcmVjZWl2ZWQgc2VjdGlvbnMuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpZiB0aGUgU2VjdGlvbiBGZWVkCisgQVBJIGlzIGltcGxlbWVudGVkIGFzIGEgY2xpZW50IG9mIHRoZSBUUyBGZWVkIEFQSSwgYmVjYXVzZSB0aGUgVFMgRmVlZAorIGltcGxlbWVudGF0aW9uIHRoZW4gYnVmZmVycyB0aGUgcmVjZWl2ZWQgZGF0YS4gVGhlIHNpemUgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlcgorIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSBzZXQoKSBmdW5jdGlvbiBpbiB0aGUgU2VjdGlvbiBGZWVkIEFQSS4gSWYgdGhlcmUKKyBpcyBubyByb29tIGluIHRoZSBjaXJjdWxhciBidWZmZXIgd2hlbiBhIG5ldyBzZWN0aW9uIGlzIHJlY2VpdmVkLCB0aGUgc2VjdGlvbgorIG11c3QgYmUgZGlzY2FyZGVkLiBJZiB0aGlzIGhhcHBlbnMsIHRoZSB2YWx1ZSBvZiB0aGUgc3VjY2VzcyBwYXJhbWV0ZXIgc2hvdWxkCisgYmUgRE1YX09WRVJSVU5fRVJST1Igb24gdGhlIG5leHQgY2FsbGJhY2suPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBkbXhfc2VjdGlvbl9jYihfX3U4JiN4MjJDNjsgYnVmZmVyMSwgc2l6ZV90CisgYnVmZmVyMV9sZW5ndGgsIF9fdTgmI3gyMkM2OyBidWZmZXIyLCBzaXplX3QKKyBidWZmZXIyX2xlbmd0aCwgZG14X3NlY3Rpb25fZmlsdGVyX3QmI3gyMkM2OyBzb3VyY2UsCisgZG14X3N1Y2Nlc3NfdCBzdWNjZXNzKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4KiBidWZmZXIxPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsdGVyZWQgc2VjdGlvbiwgZS5nLiB3aXRoaW4gdGhlCisgY2lyY3VsYXIgYnVmZmVyIG9mIHRoZSBkZW11eCBkcml2ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIxX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBmaWx0ZXJlZCBzZWN0aW9uIGRhdGEgaW4gYnVmZmVyMSwgaW5jbHVkaW5nCisgaGVhZGVycyBhbmQgQ1JDLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3U4KiBidWZmZXIyPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBmaWx0ZXJlZCBzZWN0aW9uIGRhdGEsIG9yIE5VTEwuCisgVXNlZnVsIHRvIGhhbmRsZSB0aGUgd3JhcHBpbmcgb2YgYSBjaXJjdWxhciBidWZmZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdCBidWZmZXIyX2xlbmd0aDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+TGVuZ3RoIG9mIHRoZSBmaWx0ZXJlZCBzZWN0aW9uIGRhdGEgaW4gYnVmZmVyMiwgaW5jbHVkaW5nCisgaGVhZGVycyBhbmQgQ1JDLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9maWx0ZXJfdCoKKyBmaWx0ZXI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyB0aGUgZmlsdGVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsYmFjay48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3N1Y2Nlc3NfdAorIHN1Y2Nlc3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gc2VjdGlvbiByZWNlcHRpb24uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Q29udGludWUgZmlsdGVyaW5nLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tMTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U3RvcCBmaWx0ZXJpbmcgLSBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGEgY2FsbCB0bworIHN0b3BfZmlsdGVyaW5nKCkgb24gdGhlIFNlY3Rpb24gRmVlZCBBUEkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyA8L3NlY3Rpb24+PC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InRzX2ZlZWRfYXBpIj4KKzx0aXRsZT5UUyBGZWVkIEFQSTwvdGl0bGU+Cis8cGFyYT5BIFRTIGZlZWQgaXMgdHlwaWNhbGx5IG1hcHBlZCB0byBhIGhhcmR3YXJlIFBJRCBmaWx0ZXIgb24gdGhlIGRlbXV4IGNoaXAuCitVc2luZyB0aGlzIEFQSSwgdGhlIGNsaWVudCBjYW4gc2V0IHRoZSBmaWx0ZXJpbmcgcHJvcGVydGllcyB0byBzdGFydC9zdG9wIGZpbHRlcmluZyBUUworcGFja2V0cyBvbiBhIHBhcnRpY3VsYXIgVFMgZmVlZC4gVGhlIEFQSSBpcyBkZWZpbmVkIGFzIGFuIGFic3RyYWN0IGludGVyZmFjZSBvZiB0aGUgdHlwZQorZG14X3RzX2ZlZWRfdC4KKzwvcGFyYT4KKzxwYXJhPlRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBzaG91bGQgYmUgZGVmaW5lZCBzdGF0aWMgb3IgbW9kdWxlIHByaXZhdGUuIFRoZQorY2xpZW50IGNhbiBnZXQgdGhlIGhhbmRsZSBvZiBhIFRTIGZlZWQgQVBJIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGFsbG9jYXRlX3RzX2ZlZWQoKSBpbiB0aGUKK2RlbXV4IEFQSS4KKzwvcGFyYT4KKworPHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5zZXQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBhcmFtZXRlcnMgb2YgYSBUUyBmZWVkLiBBbnkgZmlsdGVyaW5nIGluIHByb2dyZXNzIG9uIHRoZQorIFRTIGZlZWQgbXVzdCBiZSBzdG9wcGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzZXQgKCBkbXhfdHNfZmVlZF90JiN4MjJDNjsgZmVlZCwgX191MTYgcGlkLCBzaXplX3QKKyBjYWxsYmFja19sZW5ndGgsIHNpemVfdCBjaXJjdWxhcl9idWZmZXJfc2l6ZSwgaW50CisgZGVzY3JhbWJsZSwgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5fX3UxNiBwaWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBJRCB2YWx1ZSB0byBmaWx0ZXIuIE9ubHkgdGhlIFRTIHBhY2tldHMgY2FycnlpbmcgdGhlCisgc3BlY2lmaWVkIFBJRCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgQVBJIGNsaWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c2l6ZV90CisgY2FsbGJhY2tfbGVuZ3RoPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5OdW1iZXIgb2YgYnl0ZXMgdG8gZGVsaXZlciB3aXRoIGVhY2ggY2FsbCB0byB0aGUKKyBkbXhfdHNfY2IoKSBjYWxsYmFjayBmdW5jdGlvbi4gVGhlIHZhbHVlIG9mIHRoaXMKKyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMTg4LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QKKyBjaXJjdWxhcl9idWZmZXJfc2l6ZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U2l6ZSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIGZvciB0aGUgZmlsdGVyZWQgVFMgcGFja2V0cy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGRlc2NyYW1ibGU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklmIG5vbi16ZXJvLCBkZXNjcmFtYmxlIHRoZSBmaWx0ZXJlZCBUUyBwYWNrZXRzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgdGltZXNwZWMKKyB0aW1lb3V0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5NYXhpbXVtIHRpbWUgdG8gd2FpdCBiZWZvcmUgZGVsaXZlcmluZyByZWNlaXZlZCBUUworIHBhY2tldHMgdG8gdGhlIGNsaWVudC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FTk9TWVM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5vIGRlc2NyYW1ibGluZyBmYWNpbGl0eSBhdmFpbGFibGUgZm9yIFRTLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnN0YXJ0X2ZpbHRlcmluZygpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlN0YXJ0cyBmaWx0ZXJpbmcgVFMgcGFja2V0cyBvbiB0aGlzIFRTIGZlZWQsIGFjY29yZGluZyB0byBpdHMgc2V0dGluZ3MuIFRoZSBQSUQKKyB2YWx1ZSB0byBmaWx0ZXIgY2FuIGJlIHNldCBieSB0aGUgQVBJIGNsaWVudC4gQWxsIG1hdGNoaW5nIFRTIHBhY2tldHMgYXJlCisgZGVsaXZlcmVkIGFzeW5jaHJvbm91c2x5IHRvIHRoZSBjbGllbnQsIHVzaW5nIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkCisgd2l0aCBhbGxvY2F0ZV90c19mZWVkKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzdGFydF9maWx0ZXJpbmcoZG14X3RzX2ZlZWRfdCYjeDIyQzY7IGZlZWQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnN0b3BfZmlsdGVyaW5nKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U3RvcHMgZmlsdGVyaW5nIFRTIHBhY2tldHMgb24gdGhpcyBUUyBmZWVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgc3RvcF9maWx0ZXJpbmcoZG14X3RzX2ZlZWRfdCYjeDIyQzY7IGZlZWQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF90c19mZWVkX3QqIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIFRTIGZlZWQgQVBJIGFuZCBpbnN0YW5jZSBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisgPC9zZWN0aW9uPjwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJzZWN0aW9uX2ZlZWRfYXBpIj4KKzx0aXRsZT5TZWN0aW9uIEZlZWQgQVBJPC90aXRsZT4KKzxwYXJhPkEgc2VjdGlvbiBmZWVkIGlzIGEgcmVzb3VyY2UgY29uc2lzdGluZyBvZiBhIFBJRCBmaWx0ZXIgYW5kIGEgc2V0IG9mIHNlY3Rpb24gZmlsdGVycy4gVXNpbmcgdGhpcworQVBJLCB0aGUgY2xpZW50IGNhbiBzZXQgdGhlIHByb3BlcnRpZXMgb2YgYSBzZWN0aW9uIGZlZWQgYW5kIHRvIHN0YXJ0L3N0b3AgZmlsdGVyaW5nLiBUaGUgQVBJIGlzCitkZWZpbmVkIGFzIGFuIGFic3RyYWN0IGludGVyZmFjZSBvZiB0aGUgdHlwZSBkbXhfc2VjdGlvbl9mZWVkX3QuIFRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQKK3RoZSBpbnRlcmZhY2Ugc2hvdWxkIGJlIGRlZmluZWQgc3RhdGljIG9yIG1vZHVsZSBwcml2YXRlLiBUaGUgY2xpZW50IGNhbiBnZXQgdGhlIGhhbmRsZSBvZgorYSBzZWN0aW9uIGZlZWQgQVBJIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGFsbG9jYXRlX3NlY3Rpb25fZmVlZCgpIGluIHRoZSBkZW11eAorQVBJLgorPC9wYXJhPgorPHBhcmE+T24gZGVtdXggcGxhdGZvcm1zIHRoYXQgcHJvdmlkZSBzZWN0aW9uIGZpbHRlcmluZyBpbiBoYXJkd2FyZSwgdGhlIFNlY3Rpb24gRmVlZCBBUEkKK2ltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgc29mdHdhcmUgd3JhcHBlciBmb3IgdGhlIGRlbXV4IGhhcmR3YXJlLiBPdGhlciBwbGF0Zm9ybXMgbWF5CitzdXBwb3J0IG9ubHkgUElEIGZpbHRlcmluZyBpbiBoYXJkd2FyZSwgcmVxdWlyaW5nIHRoYXQgVFMgcGFja2V0cyBhcmUgY29udmVydGVkIHRvIHNlY3Rpb25zIGluCitzb2Z0d2FyZS4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZSBTZWN0aW9uIEZlZWQgQVBJIGltcGxlbWVudGF0aW9uIGNhbiBiZSBhIGNsaWVudCBvZiB0aGUgVFMKK0ZlZWQgQVBJLgorPC9wYXJhPgorCis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0ia2RhcGlfc2V0Ij4KKzx0aXRsZT5zZXQoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBhcmFtZXRlcnMgb2YgYSBzZWN0aW9uIGZlZWQuIEFueSBmaWx0ZXJpbmcgaW4gcHJvZ3Jlc3Mgb24KKyB0aGUgc2VjdGlvbiBmZWVkIG11c3QgYmUgc3RvcHBlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBJZiBkZXNjcmFtYmxpbmcKKyBpcyBlbmFibGVkLCB0aGUgcGF5bG9hZF9zY3JhbWJsaW5nX2NvbnRyb2wgYW5kIGFkZHJlc3Nfc2NyYW1ibGluZ19jb250cm9sCisgZmllbGRzIG9mIHJlY2VpdmVkIERWQiBkYXRhZ3JhbSBzZWN0aW9ucyBzaG91bGQgYmUgb2JzZXJ2ZWQuIElmIGVpdGhlciBvbmUgaXMKKyBub24temVybywgdGhlIHNlY3Rpb24gc2hvdWxkIGJlIGRlc2NyYW1ibGVkIGVpdGhlciBpbiBoYXJkd2FyZSBvciB1c2luZyB0aGUKKyBmdW5jdGlvbnMgZGVzY3JhbWJsZV9tYWNfYWRkcmVzcygpIGFuZCBkZXNjcmFtYmxlX3NlY3Rpb25fcGF5bG9hZCgpIG9mIHRoZQorIGRlbXV4IEFQSS4gTm90ZSB0aGF0IGFjY29yZGluZyB0byB0aGUgTVBFRy0yIFN5c3RlbXMgc3BlY2lmaWNhdGlvbiwgb25seQorIHRoZSBwYXlsb2FkcyBvZiBwcml2YXRlIHNlY3Rpb25zIGNhbiBiZSBzY3JhbWJsZWQgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIHNlY3Rpb24KKyBkYXRhIG11c3QgYmUgc2VudCBpbiB0aGUgY2xlYXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzZXQoZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCwgX191MTYgcGlkLCBzaXplX3QKKyBjaXJjdWxhcl9idWZmZXJfc2l6ZSwgaW50IGRlc2NyYW1ibGUsIGludAorIGNoZWNrX2NyYyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90KgorIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPl9fdTE2IHBpZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UElEIHZhbHVlIHRvIGZpbHRlcjsgb25seSB0aGUgVFMgcGFja2V0cyBjYXJyeWluZyB0aGUKKyBzcGVjaWZpZWQgUElEIHdpbGwgYmUgYWNjZXB0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNpemVfdAorIGNpcmN1bGFyX2J1ZmZlcl9zaXplPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TaXplIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgZm9yIGZpbHRlcmVkIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZGVzY3JhbWJsZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SWYgbm9uLXplcm8sIGRlc2NyYW1ibGUgYW55IHNlY3Rpb25zIHRoYXQgYXJlIHNjcmFtYmxlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGNoZWNrX2NyYzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SWYgbm9uLXplcm8sIGNoZWNrIHRoZSBDUkMgdmFsdWVzIG9mIGZpbHRlcmVkIHNlY3Rpb25zLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5SRVRVUk5TCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPjA8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBmdW5jdGlvbiB3YXMgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRU5PTUVNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Ob3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NZUzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZGVzY3JhbWJsaW5nIGZhY2lsaXR5IGF2YWlsYWJsZSBmb3Igc2VjdGlvbnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXJzLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPmFsbG9jYXRlX2ZpbHRlcigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBhIHNlY3Rpb24gZmlsdGVyIG9uIHRoZSBkZW11eC4gSXQgc2hvdWxkIG9ubHkgYmUKKyBjYWxsZWQgd2hlbiBubyBmaWx0ZXJpbmcgaXMgaW4gcHJvZ3Jlc3Mgb24gdGhpcyBzZWN0aW9uIGZlZWQuIElmIGEgZmlsdGVyIGNhbm5vdCBiZQorIGFsbG9jYXRlZCwgdGhlIGZ1bmN0aW9uIGZhaWxzIHdpdGggLUVOT1NQQy4gU2VlIGluIHNlY3Rpb24gPz8gZm9yIHRoZSBmb3JtYXQgb2YKKyB0aGUgc2VjdGlvbiBmaWx0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoZSBiaXRmaWVsZHMgZmlsdGVyX21hc2sgYW5kIGZpbHRlcl92YWx1ZSBzaG91bGQgb25seSBiZSBtb2RpZmllZCB3aGVuIG5vCisgZmlsdGVyaW5nIGlzIGluIHByb2dyZXNzIG9uIHRoaXMgc2VjdGlvbiBmZWVkLiBmaWx0ZXJfbWFzayBjb250cm9scyB3aGljaCBiaXRzIG9mCisgZmlsdGVyX3ZhbHVlIGFyZSBjb21wYXJlZCB3aXRoIHRoZSBzZWN0aW9uIGhlYWRlcnMvcGF5bG9hZC4gT24gYSBiaW5hcnkgdmFsdWUKKyBvZiAxIGluIGZpbHRlcl9tYXNrLCB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBjb21wYXJlZC4gVGhlIGZpbHRlciBvbmx5IGFjY2VwdHMKKyBzZWN0aW9ucyB0aGF0IGFyZSBlcXVhbCB0byBmaWx0ZXJfdmFsdWUgaW4gYWxsIHRoZSB0ZXN0ZWQgYml0IHBvc2l0aW9ucy4gQW55IGNoYW5nZXMKKyB0byB0aGUgdmFsdWVzIG9mIGZpbHRlcl9tYXNrIGFuZCBmaWx0ZXJfdmFsdWUgYXJlIGd1YXJhbnRlZWQgdG8gdGFrZSBlZmZlY3Qgb25seQorIHdoZW4gdGhlIHN0YXJ0X2ZpbHRlcmluZygpIGZ1bmN0aW9uIGlzIGNhbGxlZCBuZXh0IHRpbWUuIFRoZSBwYXJlbnQgcG9pbnRlciBpbgorIHRoZSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIEFQSSBpbXBsZW1lbnRhdGlvbiB0byB0aGUgdmFsdWUgb2YgdGhlIGZlZWQKKyBwYXJhbWV0ZXIuIFRoZSBwcml2IHBvaW50ZXIgaXMgbm90IHVzZWQgYnkgdGhlIEFQSSBpbXBsZW1lbnRhdGlvbiwgYW5kIGNhbgorIHRodXMgYmUgZnJlZWx5IHV0aWxpemVkIGJ5IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbi4gQW55IGRhdGEgcG9pbnRlZCB0byBieSB0aGUKKyBwcml2IHBvaW50ZXIgaXMgYXZhaWxhYmxlIHRvIHRoZSByZWNpcGllbnQgb2YgdGhlIGRteF9zZWN0aW9uX2NiKCkgZnVuY3Rpb24gY2FsbC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+V2hpbGUgdGhlIG1heGltdW0gc2VjdGlvbiBmaWx0ZXIgbGVuZ3RoIChETVhfTUFYX0ZJTFRFUl9TSVpFKSBpcworIGN1cnJlbnRseSBzZXQgYXQgMTYgYnl0ZXMsIGhhcmR3YXJlIGZpbHRlcnMgb2YgdGhhdCBzaXplIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbAorIHBsYXRmb3Jtcy4gVGhlcmVmb3JlLCBzZWN0aW9uIGZpbHRlcmluZyB3aWxsIG9mdGVuIHRha2UgcGxhY2UgZmlyc3QgaW4gaGFyZHdhcmUsCisgZm9sbG93ZWQgYnkgZmlsdGVyaW5nIGluIHNvZnR3YXJlIGZvciB0aGUgaGVhZGVyIGJ5dGVzIHRoYXQgd2VyZSBub3QgY292ZXJlZAorIGJ5IGEgaGFyZHdhcmUgZmlsdGVyLiBUaGUgZmlsdGVyX21hc2sgZmllbGQgY2FuIGJlIGNoZWNrZWQgdG8gZGV0ZXJtaW5lIGhvdworIG1hbnkgYnl0ZXMgb2YgdGhlIHNlY3Rpb24gZmlsdGVyIGFyZSBhY3R1YWxseSB1c2VkLCBhbmQgaWYgdGhlIGhhcmR3YXJlIGZpbHRlciB3aWxsCisgc3VmZmljZS4gQWRkaXRpb25hbGx5LCBzb2Z0d2FyZS1vbmx5IHNlY3Rpb24gZmlsdGVycyBjYW4gb3B0aW9uYWxseSBiZSBhbGxvY2F0ZWQKKyB0byBjbGllbnRzIHdoZW4gYWxsIGhhcmR3YXJlIHNlY3Rpb24gZmlsdGVycyBhcmUgaW4gdXNlLiBOb3RlIHRoYXQgb24gbW9zdCBkZW11eAorIGhhcmR3YXJlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBmaWx0ZXIgb24gdGhlIHNlY3Rpb25fbGVuZ3RoIGZpZWxkIG9mIHRoZSBzZWN0aW9uCisgaGVhZGVyICYjODIxMTsgdGh1cyB0aGlzIGZpZWxkIGlzIGlnbm9yZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIGluY2x1ZGVkIGluIGZpbHRlcl92YWx1ZSBhbmQKKyBmaWx0ZXJfbWFzayBmaWVsZHMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBhbGxvY2F0ZV9maWx0ZXIoZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCwKKyBkbXhfc2VjdGlvbl9maWx0ZXJfdCYjeDIyQzY7JiN4MjJDNjsgZmlsdGVyKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9mZWVkX3QqCisgZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc2VjdGlvbiBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmlsdGVyX3QqKgorIGZpbHRlcjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZpbHRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT1NQQzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gZmlsdGVycyBvZiBnaXZlbiB0eXBlIGFuZCBsZW5ndGggYXZhaWxhYmxlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5yZWxlYXNlX2ZpbHRlcigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYWxsIHRoZSByZXNvdXJjZXMgb2YgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBzZWN0aW9uIGZpbHRlci4KKyBUaGUgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgZmlsdGVyaW5nIGlzIGluIHByb2dyZXNzIG9uIHRoaXMgc2VjdGlvbgorIGZlZWQuIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxlciBzaG91bGQgbm90IHRyeSB0byBkZXJlZmVyZW5jZSB0aGUKKyBmaWx0ZXIgcG9pbnRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlbGVhc2VfZmlsdGVyICggZG14X3NlY3Rpb25fZmVlZF90JiN4MjJDNjsgZmVlZCwKKyBkbXhfc2VjdGlvbl9maWx0ZXJfdCYjeDIyQzY7IGZpbHRlcik7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90KgorIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmRteF9zZWN0aW9uX2ZpbHRlcl90KgorIGZpbHRlcjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SS9PIFBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIGRhdGEgb2YgYSBzZWN0aW9uIGZpbHRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVOT0RFVjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Tm8gc3VjaCBmaWx0ZXIgYWxsb2NhdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4tRUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5CYWQgcGFyYW1ldGVyLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPnN0YXJ0X2ZpbHRlcmluZygpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlN0YXJ0cyBmaWx0ZXJpbmcgc2VjdGlvbnMgb24gdGhpcyBzZWN0aW9uIGZlZWQsIGFjY29yZGluZyB0byBpdHMgc2V0dGluZ3MuIFNlY3Rpb25zCisgYXJlIGZpcnN0IGZpbHRlcmVkIGJhc2VkIG9uIHRoZWlyIFBJRCBhbmQgdGhlbiBtYXRjaGVkIHdpdGggdGhlIHNlY3Rpb24KKyBmaWx0ZXJzIGFsbG9jYXRlZCBmb3IgdGhpcyBmZWVkLiBJZiB0aGUgc2VjdGlvbiBtYXRjaGVzIHRoZSBQSUQgZmlsdGVyIGFuZAorIGF0IGxlYXN0IG9uZSBzZWN0aW9uIGZpbHRlciwgaXQgaXMgZGVsaXZlcmVkIHRvIHRoZSBBUEkgY2xpZW50LiBUaGUgc2VjdGlvbgorIGlzIGRlbGl2ZXJlZCBhc3luY2hyb25vdXNseSB1c2luZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoCisgYWxsb2NhdGVfc2VjdGlvbl9mZWVkKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzdGFydF9maWx0ZXJpbmcgKCBkbXhfc2VjdGlvbl9mZWVkX3QmI3gyMkM2OyBmZWVkICk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZG14X3NlY3Rpb25fZmVlZF90KgorIGZlZWQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gZmVlZCBBUEkgYW5kIGluc3RhbmNlIGRhdGEuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlJFVFVSTlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+MDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlIGZ1bmN0aW9uIHdhcyBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPi1FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkJhZCBwYXJhbWV0ZXIuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+c3RvcF9maWx0ZXJpbmcoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5TdG9wcyBmaWx0ZXJpbmcgc2VjdGlvbnMgb24gdGhpcyBzZWN0aW9uIGZlZWQuIE5vdGUgdGhhdCBhbnkgY2hhbmdlcyB0byB0aGUKKyBmaWx0ZXJpbmcgcGFyYW1ldGVycyAoZmlsdGVyX3ZhbHVlLCBmaWx0ZXJfbWFzaywgZXRjLikgc2hvdWxkIG9ubHkgYmUgbWFkZSB3aGVuCisgZmlsdGVyaW5nIGlzIHN0b3BwZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBzdG9wX2ZpbHRlcmluZyAoIGRteF9zZWN0aW9uX2ZlZWRfdCYjeDIyQzY7IGZlZWQgKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kbXhfc2VjdGlvbl9mZWVkX3QqCisgZmVlZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgc2VjdGlvbiBmZWVkIEFQSSBhbmQgaW5zdGFuY2UgZGF0YS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UkVUVVJOUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4wPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgZnVuY3Rpb24gd2FzIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+LUVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QmFkIHBhcmFtZXRlci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL25ldC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL25ldC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlMzg4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvbmV0LnhtbApAQCAtMCwwICsxLDEyIEBACis8dGl0bGU+RFZCIE5ldHdvcmsgQVBJPC90aXRsZT4KKzxwYXJhPlRoZSBEVkIgbmV0IGRldmljZSBlbmFibGVzIGZlZWRpbmcgb2YgTVBFIChtdWx0aSBwcm90b2NvbCBlbmNhcHN1bGF0aW9uKSBwYWNrZXRzCityZWNlaXZlZCB2aWEgRFZCIGludG8gdGhlIExpbnV4IG5ldHdvcmsgcHJvdG9jb2wgc3RhY2ssIGUuZy4gZm9yIGludGVybmV0IHZpYSBzYXRlbGxpdGUKK2FwcGxpY2F0aW9ucy4gSXQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyMC9uZXQwPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kCithbmQgaW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi9uZXQuaDwvZW1waGFzaXM+IGluIHlvdXIKK2FwcGxpY2F0aW9uLgorPC9wYXJhPgorPHNlY3Rpb24gaWQ9ImR2Yl9uZXRfdHlwZXMiPgorPHRpdGxlPkRWQiBOZXQgRGF0YSBUeXBlczwvdGl0bGU+Cis8cGFyYT5UbyBiZSB3cml0dGVuJiN4MjAyNjsKKzwvcGFyYT4KKzwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvdmlkZW8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi92aWRlby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiMjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvdmlkZW8ueG1sCkBAIC0wLDAgKzEsMTk3MSBAQAorPHRpdGxlPkRWQiBWaWRlbyBEZXZpY2U8L3RpdGxlPgorPHBhcmE+VGhlIERWQiB2aWRlbyBkZXZpY2UgY29udHJvbHMgdGhlIE1QRUcyIHZpZGVvIGRlY29kZXIgb2YgdGhlIERWQiBoYXJkd2FyZS4gSXQKK2NhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIDxlbXBoYXNpcyByb2xlPSJ0dCI+L2Rldi9kdmIvYWRhcHRlcjAvdmlkZW8wPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYW5kIGFuZAoraW9jdGwgZGVmaW5pdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluY2x1ZGluZyA8ZW1waGFzaXMgcm9sZT0idHQiPmxpbnV4L2R2Yi92aWRlby5oPC9lbXBoYXNpcz4gaW4geW91cgorYXBwbGljYXRpb24uCis8L3BhcmE+Cis8cGFyYT5Ob3RlIHRoYXQgdGhlIERWQiB2aWRlbyBkZXZpY2Ugb25seSBjb250cm9scyBkZWNvZGluZyBvZiB0aGUgTVBFRyB2aWRlbyBzdHJlYW0sIG5vdAoraXRzIHByZXNlbnRhdGlvbiBvbiB0aGUgVFYgb3IgY29tcHV0ZXIgc2NyZWVuLiBPbiBQQ3MgdGhpcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBieSBhbgorYXNzb2NpYXRlZCB2aWRlbzRsaW51eCBkZXZpY2UsIGUuZy4gPGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L3ZpZGVvPC9lbXBoYXNpcz4sIHdoaWNoIGFsbG93cyBzY2FsaW5nIGFuZCBkZWZpbmluZyBvdXRwdXQKK3dpbmRvd3MuCis8L3BhcmE+Cis8cGFyYT5Tb21lIERWQiBjYXJkcyBkb24mIzgyMTc7dCBoYXZlIHRoZWlyIG93biBNUEVHIGRlY29kZXIsIHdoaWNoIHJlc3VsdHMgaW4gdGhlIG9taXNzaW9uIG9mCit0aGUgYXVkaW8gYW5kIHZpZGVvIGRldmljZSBhcyB3ZWxsIGFzIHRoZSB2aWRlbzRsaW51eCBkZXZpY2UuCis8L3BhcmE+Cis8cGFyYT5UaGUgaW9jdGxzIHRoYXQgZGVhbCB3aXRoIFNQVXMgKHN1YiBwaWN0dXJlIHVuaXRzKSBhbmQgbmF2aWdhdGlvbiBwYWNrZXRzIGFyZSBvbmx5CitzdXBwb3J0ZWQgb24gc29tZSBNUEVHIGRlY29kZXJzIG1hZGUgZm9yIERWRCBwbGF5YmFjay4KKzwvcGFyYT4KKzxzZWN0aW9uIGlkPSJ2aWRlb190eXBlcyI+Cis8dGl0bGU+VmlkZW8gRGF0YSBUeXBlczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19mb3JtYXRfdCI+Cis8dGl0bGU+dmlkZW9fZm9ybWF0X3Q8L3RpdGxlPgorPHBhcmE+VGhlIDxlbXBoYXNpcyByb2xlPSJ0dCI+dmlkZW9fZm9ybWF0X3Q8L2VtcGhhc2lzPiBkYXRhIHR5cGUgZGVmaW5lZCBieQorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSB7CisJIFZJREVPX0ZPUk1BVF80XzMsCisJIFZJREVPX0ZPUk1BVF8xNl85CisgfSB2aWRlb19mb3JtYXRfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5pcyB1c2VkIGluIHRoZSBWSURFT19TRVRfRk9STUFUIGZ1bmN0aW9uICg/PykgdG8gdGVsbCB0aGUgZHJpdmVyIHdoaWNoIGFzcGVjdCByYXRpbwordGhlIG91dHB1dCBoYXJkd2FyZSAoZS5nLiBUVikgaGFzLiBJdCBpcyBhbHNvIHVzZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB2aWRlb19zdGF0dXMKKyg/PykgcmV0dXJuZWQgYnkgVklERU9fR0VUX1NUQVRVUyAoPz8pIGFuZCB2aWRlb19ldmVudCAoPz8pIHJldHVybmVkIGJ5CitWSURFT19HRVRfRVZFTlQgKD8/KSB3aGljaCByZXBvcnQgYWJvdXQgdGhlIGRpc3BsYXkgZm9ybWF0IG9mIHRoZSBjdXJyZW50IHZpZGVvCitzdHJlYW0uCis8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19kaXNwbGF5X2Zvcm1hdF90Ij4KKzx0aXRsZT52aWRlb19kaXNwbGF5X2Zvcm1hdF90PC90aXRsZT4KKzxwYXJhPkluIGNhc2UgdGhlIGRpc3BsYXkgZm9ybWF0IG9mIHRoZSB2aWRlbyBzdHJlYW0gYW5kIG9mIHRoZSBkaXNwbGF5IGhhcmR3YXJlIGRpZmZlciB0aGUKK2FwcGxpY2F0aW9uIGhhcyB0byBzcGVjaWZ5IGhvdyB0byBoYW5kbGUgdGhlIGNyb3BwaW5nIG9mIHRoZSBwaWN0dXJlLiBUaGlzIGNhbiBiZSBkb25lIHVzaW5nCit0aGUgVklERU9fU0VUX0RJU1BMQVlfRk9STUFUIGNhbGwgKD8/KSB3aGljaCBhY2NlcHRzCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgVklERU9fUEFOX1NDQU4sCisJIFZJREVPX0xFVFRFUl9CT1gsCisJIFZJREVPX0NFTlRFUl9DVVRfT1VUCisgfSB2aWRlb19kaXNwbGF5X2Zvcm1hdF90OworPC9wcm9ncmFtbGlzdGluZz4KKzxwYXJhPmFzIGFyZ3VtZW50LgorPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0idmlkZW9fc3RyZWFtX3NvdXJjZSI+Cis8dGl0bGU+dmlkZW8gc3RyZWFtIHNvdXJjZTwvdGl0bGU+Cis8cGFyYT5UaGUgdmlkZW8gc3RyZWFtIHNvdXJjZSBpcyBzZXQgdGhyb3VnaCB0aGUgVklERU9fU0VMRUNUX1NPVVJDRSBjYWxsIGFuZCBjYW4gdGFrZQordGhlIGZvbGxvd2luZyB2YWx1ZXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSByZXBsYXlpbmcgZnJvbSBhbiBpbnRlcm5hbCAoZGVtdXhlcikgb3IKK2V4dGVybmFsICh1c2VyIHdyaXRlKSBzb3VyY2UuCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgVklERU9fU09VUkNFX0RFTVVYLAorCSBWSURFT19TT1VSQ0VfTUVNT1JZCisgfSB2aWRlb19zdHJlYW1fc291cmNlX3Q7Cis8L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+VklERU9fU09VUkNFX0RFTVVYIHNlbGVjdHMgdGhlIGRlbXVsdGlwbGV4ZXIgKGZlZCBlaXRoZXIgYnkgdGhlIGZyb250ZW5kIG9yIHRoZQorRFZSIGRldmljZSkgYXMgdGhlIHNvdXJjZSBvZiB0aGUgdmlkZW8gc3RyZWFtLiBJZiBWSURFT19TT1VSQ0VfTUVNT1JZCitpcyBzZWxlY3RlZCB0aGUgc3RyZWFtIGNvbWVzIGZyb20gdGhlIGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlIDxlbXBoYXNpcyByb2xlPSJ0dCI+d3JpdGUoKTwvZW1waGFzaXM+IHN5c3RlbQorY2FsbC4KKzwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX3BsYXlfc3RhdGUiPgorPHRpdGxlPnZpZGVvIHBsYXkgc3RhdGU8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBWSURFT19HRVRfU1RBVFVTIGNhbGwgcmVwcmVzZW50aW5nIHRoZQorc3RhdGUgb2YgdmlkZW8gcGxheWJhY2suCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBlbnVtIHsKKwkgVklERU9fU1RPUFBFRCwKKwkgVklERU9fUExBWUlORywKKwkgVklERU9fRlJFRVpFRAorIH0gdmlkZW9fcGxheV9zdGF0ZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX2V2ZW50Ij4KKzx0aXRsZT5zdHJ1Y3QgdmlkZW9fZXZlbnQ8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBpcyB0aGUgc3RydWN0dXJlIG9mIGEgdmlkZW8gZXZlbnQgYXMgaXQgaXMgcmV0dXJuZWQgYnkgdGhlIFZJREVPX0dFVF9FVkVOVAorY2FsbC4KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyBzdHJ1Y3QgdmlkZW9fZXZlbnQgeworCSBpbnQzMl90IHR5cGU7CisJIHRpbWVfdCB0aW1lc3RhbXA7CisJIHVuaW9uIHsKKwkJIHZpZGVvX2Zvcm1hdF90IHZpZGVvX2Zvcm1hdDsKKwkgfSB1OworIH07Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0idmlkZW9fc3RhdHVzIj4KKzx0aXRsZT5zdHJ1Y3QgdmlkZW9fc3RhdHVzPC90aXRsZT4KKzxwYXJhPlRoZSBWSURFT19HRVRfU1RBVFVTIGNhbGwgcmV0dXJucyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbmZvcm1pbmcgYWJvdXQgdmFyaW91cworc3RhdGVzIG9mIHRoZSBwbGF5YmFjayBvcGVyYXRpb24uCis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cisgc3RydWN0IHZpZGVvX3N0YXR1cyB7CisJIGJvb2xlYW4gdmlkZW9fYmxhbms7CisJIHZpZGVvX3BsYXlfc3RhdGVfdCBwbGF5X3N0YXRlOworCSB2aWRlb19zdHJlYW1fc291cmNlX3Qgc3RyZWFtX3NvdXJjZTsKKwkgdmlkZW9fZm9ybWF0X3QgdmlkZW9fZm9ybWF0OworCSB2aWRlb19kaXNwbGF5Zm9ybWF0X3QgZGlzcGxheV9mb3JtYXQ7CisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cGFyYT5JZiB2aWRlb19ibGFuayBpcyBzZXQgdmlkZW8gd2lsbCBiZSBibGFua2VkIG91dCBpZiB0aGUgY2hhbm5lbCBpcyBjaGFuZ2VkIG9yIGlmIHBsYXliYWNrIGlzCitzdG9wcGVkLiBPdGhlcndpc2UsIHRoZSBsYXN0IHBpY3R1cmUgd2lsbCBiZSBkaXNwbGF5ZWQuIHBsYXlfc3RhdGUgaW5kaWNhdGVzIGlmIHRoZSB2aWRlbyBpcworY3VycmVudGx5IGZyb3plbiwgc3RvcHBlZCwgb3IgYmVpbmcgcGxheWVkIGJhY2suIFRoZSBzdHJlYW1fc291cmNlIGNvcnJlc3BvbmRzIHRvIHRoZSBzZWxldGVkCitzb3VyY2UgZm9yIHRoZSB2aWRlbyBzdHJlYW0uIEl0IGNhbiBjb21lIGVpdGhlciBmcm9tIHRoZSBkZW11bHRpcGxleGVyIG9yIGZyb20gbWVtb3J5LgorVGhlIHZpZGVvX2Zvcm1hdCBpbmRpY2F0ZXMgdGhlIGFzcGVjdCByYXRpbyAob25lIG9mIDQ6MyBvciAxNjo5KSBvZiB0aGUgY3VycmVudGx5CitwbGF5ZWQgdmlkZW8gc3RyZWFtLiBGaW5hbGx5LCBkaXNwbGF5X2Zvcm1hdCBjb3JyZXNwb25kcyB0byB0aGUgc2VsZWN0ZWQgY3JvcHBpbmcKK21vZGUgaW4gY2FzZSB0aGUgc291cmNlIHZpZGVvIGZvcm1hdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0CitkZXZpY2UuCis8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19zdGlsbF9waWN0dXJlIj4KKzx0aXRsZT5zdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZTwvdGl0bGU+Cis8cGFyYT5BbiBJLWZyYW1lIGRpc3BsYXllZCB2aWEgdGhlIFZJREVPX1NUSUxMUElDVFVSRSBjYWxsIGlzIHBhc3NlZCBvbiB3aXRoaW4gdGhlCitmb2xsb3dpbmcgc3RydWN0dXJlLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2OyBwb2ludGVyIHRvIGFuZCBzaXplIG9mIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgJiN4MjJDNjsvCisgc3RydWN0IHZpZGVvX3N0aWxsX3BpY3R1cmUgeworCSBjaGFyICYjeDIyQzY7aUZyYW1lOworCSBpbnQzMl90IHNpemU7CisgfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ2aWRlb19jYXBzIj4KKzx0aXRsZT52aWRlbyBjYXBhYmlsaXRpZXM8L3RpdGxlPgorPHBhcmE+QSBjYWxsIHRvIFZJREVPX0dFVF9DQVBBQklMSVRJRVMgcmV0dXJucyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHdpdGggdGhlIGZvbGxvd2luZworYml0cyBzZXQgYWNjb3JkaW5nIHRvIHRoZSBoYXJkd2FyZXMgY2FwYWJpbGl0aWVzLgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIC8mI3gyMkM2OyBiaXQgZGVmaW5pdGlvbnMgZm9yIGNhcGFiaWxpdGllczogJiN4MjJDNjsvCisgLyYjeDIyQzY7IGNhbiB0aGUgaGFyZHdhcmUgZGVjb2RlIE1QRUcxIGFuZC9vciBNUEVHMj8gJiN4MjJDNjsvCisgI2RlZmluZSBWSURFT19DQVBfTVBFRzEgICAxCisgI2RlZmluZSBWSURFT19DQVBfTVBFRzIgICAyCisgLyYjeDIyQzY7IGNhbiB5b3Ugc2VuZCBhIHN5c3RlbSBhbmQvb3IgcHJvZ3JhbSBzdHJlYW0gdG8gdmlkZW8gZGV2aWNlPworICAgICh5b3Ugc3RpbGwgaGF2ZSB0byBvcGVuIHRoZSB2aWRlbyBhbmQgdGhlIGF1ZGlvIGRldmljZSBidXQgb25seQorICAgICBzZW5kIHRoZSBzdHJlYW0gdG8gdGhlIHZpZGVvIGRldmljZSkgJiN4MjJDNjsvCisgI2RlZmluZSBWSURFT19DQVBfU1lTICAgICA0CisgI2RlZmluZSBWSURFT19DQVBfUFJPRyAgICA4CisgLyYjeDIyQzY7IGNhbiB0aGUgZHJpdmVyIGFsc28gaGFuZGxlIFNQVSwgTkFWSSBhbmQgQ1NTIGVuY29kZWQgZGF0YT8KKyAgICAoQ1NTIEFQSSBpcyBub3QgcHJlc2VudCB5ZXQpICYjeDIyQzY7LworICNkZWZpbmUgVklERU9fQ0FQX1NQVSAgICAxNgorICNkZWZpbmUgVklERU9fQ0FQX05BVkkgICAzMgorICNkZWZpbmUgVklERU9fQ0FQX0NTUyAgICA2NAorPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX3N5c3RlbSI+Cis8dGl0bGU+dmlkZW8gc3lzdGVtPC90aXRsZT4KKzxwYXJhPkEgY2FsbCB0byBWSURFT19TRVRfU1lTVEVNIHNldHMgdGhlIGRlc2lyZWQgdmlkZW8gc3lzdGVtIGZvciBUViBvdXRwdXQuIFRoZQorZm9sbG93aW5nIHN5c3RlbSB0eXBlcyBjYW4gYmUgc2V0OgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgZW51bSB7CisJICBWSURFT19TWVNURU1fUEFMLAorCSAgVklERU9fU1lTVEVNX05UU0MsCisJICBWSURFT19TWVNURU1fUEFMTiwKKwkgIFZJREVPX1NZU1RFTV9QQUxOYywKKwkgIFZJREVPX1NZU1RFTV9QQUxNLAorCSAgVklERU9fU1lTVEVNX05UU0M2MCwKKwkgIFZJREVPX1NZU1RFTV9QQUw2MCwKKwkgIFZJREVPX1NZU1RFTV9QQUxNNjAKKyB9IHZpZGVvX3N5c3RlbV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InZpZGVvX2hpZ2hsaWdodCI+Cis8dGl0bGU+c3RydWN0IHZpZGVvX2hpZ2hsaWdodDwvdGl0bGU+Cis8cGFyYT5DYWxsaW5nIHRoZSBpb2N0bCBWSURFT19TRVRfSElHSExJR0hUUyBwb3N0cyB0aGUgU1BVIGhpZ2hsaWdodCBpbmZvcm1hdGlvbi4gVGhlCitjYWxsIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBmb3JtYXQgZm9yIHRoYXQgaW5mb3JtYXRpb246Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZgorIHN0cnVjdCB2aWRlb19oaWdobGlnaHQgeworCSBib29sZWFuIGFjdGl2ZTsgICAgICAvJiN4MjJDNjsgICAgMT1zaG93IGhpZ2hsaWdodCwgMD1oaWRlIGhpZ2hsaWdodCAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb250cmFzdDE7ICAgLyYjeDIyQzY7ICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29udHJhc3QgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb250cmFzdCAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb250cmFzdDI7ICAgLyYjeDIyQzY7ICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29udHJhc3QgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb250cmFzdCAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb2xvcjE7ICAgICAgLyYjeDIyQzY7ICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29sb3IgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb2xvciAmI3gyMkM2Oy8KKwkgdWludDhfdCBjb2xvcjI7ICAgICAgLyYjeDIyQzY7ICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29sb3IgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb2xvciAmI3gyMkM2Oy8KKwkgdWludDMyX3QgeXBvczsgICAgICAgLyYjeDIyQzY7ICAgMjMtMjIgIGF1dG8gYWN0aW9uIG1vZGUgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAyMS0xMiAgc3RhcnQgeSAmI3gyMkM2Oy8KKwkJCSAgICAgIC8mI3gyMkM2OyAgICA5LSAwICBlbmQgeSAmI3gyMkM2Oy8KKwkgdWludDMyX3QgeHBvczsgICAgICAgLyYjeDIyQzY7ICAgMjMtMjIgIGJ1dHRvbiBjb2xvciBudW1iZXIgJiN4MjJDNjsvCisJCQkgICAgICAvJiN4MjJDNjsgICAyMS0xMiAgc3RhcnQgeCAmI3gyMkM2Oy8KKwkJCSAgICAgIC8mI3gyMkM2OyAgICA5LSAwICBlbmQgeCAmI3gyMkM2Oy8KKyB9IHZpZGVvX2hpZ2hsaWdodF90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InZpZGVvX3NwdSI+Cis8dGl0bGU+dmlkZW8gU1BVPC90aXRsZT4KKzxwYXJhPkNhbGxpbmcgVklERU9fU0VUX1NQVSBkZWFjdGl2YXRlcyBvciBhY3RpdmF0ZXMgU1BVIGRlY29kaW5nLCBhY2NvcmRpbmcgdG8gdGhlCitmb2xsb3dpbmcgZm9ybWF0OgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYKKyBzdHJ1Y3QgdmlkZW9fc3B1IHsKKwkgYm9vbGVhbiBhY3RpdmU7CisJIGludCBzdHJlYW1faWQ7CisgfSB2aWRlb19zcHVfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJ2aWRlb19zcHVfcGFsZXR0ZSI+Cis8dGl0bGU+dmlkZW8gU1BVIHBhbGV0dGU8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZXQgdGhlIFNQVSBwYWxldHRlIGJ5IGNhbGxpbmcgVklERU9fU1BVX1BBTEVUVEU6Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZgorIHN0cnVjdCB2aWRlb19zcHVfcGFsZXR0ZXsKKwkgaW50IGxlbmd0aDsKKwkgdWludDhfdCAmI3gyMkM2O3BhbGV0dGU7CisgfSB2aWRlb19zcHVfcGFsZXR0ZV90OworPC9wcm9ncmFtbGlzdGluZz4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InZpZGVvX25hdmlfcGFjayI+Cis8dGl0bGU+dmlkZW8gTkFWSSBwYWNrPC90aXRsZT4KKzxwYXJhPkluIG9yZGVyIHRvIGdldCB0aGUgbmF2aWdhdGlvbmFsIGRhdGEgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaGFzIHRvIGJlIHBhc3NlZCB0byB0aGUgaW9jdGwKK1ZJREVPX0dFVF9OQVZJOgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYKKyBzdHJ1Y3QgdmlkZW9fbmF2aV9wYWNreworCSBpbnQgbGVuZ3RoOyAgICAgICAgIC8mI3gyMkM2OyAwIC4uLiAxMDI0ICYjeDIyQzY7LworCSB1aW50OF90IGRhdGFbMTAyNF07CisgfSB2aWRlb19uYXZpX3BhY2tfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKworPHNlY3Rpb24gaWQ9InZpZGVvX2F0dHJpYnV0ZXMiPgorPHRpdGxlPnZpZGVvIGF0dHJpYnV0ZXM8L3RpdGxlPgorPHBhcmE+VGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQgYnkgYSBjYWxsIHRvIFZJREVPX1NFVF9BVFRSSUJVVEVTOgorPC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorIHR5cGVkZWYgdWludDE2X3QgdmlkZW9fYXR0cmlidXRlc190OworIC8mI3gyMkM2OyAgIGJpdHM6IGRlc2NyLiAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAxNS0xNCBWaWRlbyBjb21wcmVzc2lvbiBtb2RlICgwPU1QRUctMSwgMT1NUEVHLTIpICYjeDIyQzY7LworIC8mI3gyMkM2OyAgIDEzLTEyIFRWIHN5c3RlbSAoMD01MjUvNjAsIDE9NjI1LzUwKSAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAxMS0xMCBBc3BlY3QgcmF0aW8gKDA9NDozLCAzPTE2OjkpICYjeDIyQzY7LworIC8mI3gyMkM2OyAgICA5LSA4IHBlcm1pdHRlZCBkaXNwbGF5IG1vZGUgb24gNDozIG1vbml0b3IgKDA9Ym90aCwgMT1vbmx5IHBhbi1zY2EgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDcgICAgbGluZSAyMS0xIGRhdGEgcHJlc2VudCBpbiBHT1AgKDE9eWVzLCAwPW5vKSAmI3gyMkM2Oy8KKyAvJiN4MjJDNjsgICAgNiAgICBsaW5lIDIxLTIgZGF0YSBwcmVzZW50IGluIEdPUCAoMT15ZXMsIDA9bm8pICYjeDIyQzY7LworIC8mI3gyMkM2OyAgICA1LSAzIHNvdXJjZSByZXNvbHV0aW9uICgwPTcyMHg0ODAvNTc2LCAxPTcwNHg0ODAvNTc2LCAyPTM1Mng0ODAvNTcgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDIgICAgc291cmNlIGxldHRlcmJveGVkICgxPXllcywgMD1ubykgJiN4MjJDNjsvCisgLyYjeDIyQzY7ICAgIDAgICAgZmlsbS9jYW1lcmEgbW9kZSAoMD1jYW1lcmEsIDE9ZmlsbSAoNjI1LzUwIG9ubHkpKSAmI3gyMkM2Oy8KKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+PC9zZWN0aW9uPgorCisKKzxzZWN0aW9uIGlkPSJ2aWRlb19mdW5jdGlvbl9jYWxscyI+Cis8dGl0bGU+VmlkZW8gRnVuY3Rpb24gQ2FsbHM8L3RpdGxlPgorCisKKzxzZWN0aW9uIGlkPSJ2aWRlb19mb3BlbiI+Cis8dGl0bGU+b3BlbigpPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgc3lzdGVtIGNhbGwgb3BlbnMgYSBuYW1lZCB2aWRlbyBkZXZpY2UgKGUuZy4gL2Rldi9kdmIvYWRhcHRlcjAvdmlkZW8wKQorIGZvciBzdWJzZXF1ZW50IHVzZS48L3BhcmE+Cis8cGFyYT5XaGVuIGFuIG9wZW4oKSBjYWxsIGhhcyBzdWNjZWVkZWQsIHRoZSBkZXZpY2Ugd2lsbCBiZSByZWFkeSBmb3IgdXNlLgorIFRoZSBzaWduaWZpY2FuY2Ugb2YgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIG1vZGUgaXMgZGVzY3JpYmVkIGluIHRoZQorIGRvY3VtZW50YXRpb24gZm9yIGZ1bmN0aW9ucyB3aGVyZSB0aGVyZSBpcyBhIGRpZmZlcmVuY2UuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUKKyBzZW1hbnRpY3Mgb2YgdGhlIG9wZW4oKSBjYWxsIGl0c2VsZi4gQSBkZXZpY2Ugb3BlbmVkIGluIGJsb2NraW5nIG1vZGUgY2FuIGxhdGVyCisgYmUgcHV0IGludG8gbm9uLWJsb2NraW5nIG1vZGUgKGFuZCB2aWNlIHZlcnNhKSB1c2luZyB0aGUgRl9TRVRGTCBjb21tYW5kCisgb2YgdGhlIGZjbnRsIHN5c3RlbSBjYWxsLiBUaGlzIGlzIGEgc3RhbmRhcmQgc3lzdGVtIGNhbGwsIGRvY3VtZW50ZWQgaW4gdGhlIExpbnV4CisgbWFudWFsIHBhZ2UgZm9yIGZjbnRsLiBPbmx5IG9uZSB1c2VyIGNhbiBvcGVuIHRoZSBWaWRlbyBEZXZpY2UgaW4gT19SRFdSCisgbW9kZS4gQWxsIG90aGVyIGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRldmljZSBpbiB0aGlzIG1vZGUgd2lsbCBmYWlsLCBhbmQgYW4KKyBlcnJvci1jb2RlIHdpbGwgYmUgcmV0dXJuZWQuIElmIHRoZSBWaWRlbyBEZXZpY2UgaXMgb3BlbmVkIGluIE9fUkRPTkxZCisgbW9kZSwgdGhlIG9ubHkgaW9jdGwgY2FsbCB0aGF0IGNhbiBiZSB1c2VkIGlzIFZJREVPX0dFVF9TVEFUVVMuIEFsbCBvdGhlcgorIGNhbGwgd2lsbCByZXR1cm4gYW4gZXJyb3IgY29kZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgb3Blbihjb25zdCBjaGFyICYjeDIyQzY7ZGV2aWNlTmFtZSwgaW50IGZsYWdzKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5jb25zdCBjaGFyCisgKmRldmljZU5hbWU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk5hbWUgb2Ygc3BlY2lmaWMgdmlkZW8gZGV2aWNlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmxhZ3M8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkEgYml0LXdpc2UgT1Igb2YgdGhlIGZvbGxvd2luZyBmbGFnczo8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PX1JET05MWSByZWFkLW9ubHkgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19SRFdSIHJlYWQvd3JpdGUgYWNjZXNzPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+T19OT05CTE9DSyBvcGVuIGluIG5vbi1ibG9ja2luZyBtb2RlPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+KGJsb2NraW5nIG1vZGUgaXMgdGhlIGRlZmF1bHQpPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FTk9ERVY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCVVNZPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJ2aWRlb19mY2xvc2UiPgorPHRpdGxlPmNsb3NlKCk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBzeXN0ZW0gY2FsbCBjbG9zZXMgYSBwcmV2aW91c2x5IG9wZW5lZCB2aWRlbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBjbG9zZShpbnQgZmQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9InZpZGVvX2Z3cml0ZSI+Cis8dGl0bGU+d3JpdGUoKTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIHN5c3RlbSBjYWxsIGNhbiBvbmx5IGJlIHVzZWQgaWYgVklERU9fU09VUkNFX01FTU9SWSBpcyBzZWxlY3RlZAorIGluIHRoZSBpb2N0bCBjYWxsIFZJREVPX1NFTEVDVF9TT1VSQ0UuIFRoZSBkYXRhIHByb3ZpZGVkIHNoYWxsIGJlIGluCisgUEVTIGZvcm1hdCwgdW5sZXNzIHRoZSBjYXBhYmlsaXR5IGFsbG93cyBvdGhlciBmb3JtYXRzLiBJZiBPX05PTkJMT0NLIGlzCisgbm90IHNwZWNpZmllZCB0aGUgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLiBUaGUgYW1vdW50Cisgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBpcyBpbXBsaWVkIGJ5IGNvdW50LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3Qgd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICYjeDIyQzY7YnVmLCBzaXplX3QgY291bnQpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZvaWQgKmJ1ZjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFBFUyBkYXRhLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zaXplX3QgY291bnQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNpemUgb2YgYnVmLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RVBFUk08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPk1vZGUgVklERU9fU09VUkNFX01FTU9SWSBub3Qgc2VsZWN0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVOT01FTTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+QXR0ZW1wdGVkIHRvIHdyaXRlIG1vcmUgZGF0YSB0aGFuIHRoZSBpbnRlcm5hbCBidWZmZXIgY2FuCisgaG9sZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NUT1A8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGFza3MgdGhlIFZpZGVvIERldmljZSB0byBzdG9wIHBsYXlpbmcgdGhlIGN1cnJlbnQgc3RyZWFtLgorIERlcGVuZGluZyBvbiB0aGUgaW5wdXQgcGFyYW1ldGVyLCB0aGUgc2NyZWVuIGNhbiBiZSBibGFua2VkIG91dCBvciBkaXNwbGF5aW5nCisgdGhlIGxhc3QgZGVjb2RlZCBmcmFtZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NUT1AsIGJvb2xlYW4KKyBtb2RlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NUT1AgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+Qm9vbGVhbiBtb2RlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgaG93IHRoZSBzY3JlZW4gc2hhbGwgYmUgaGFuZGxlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UUlVFOiBCbGFuayBzY3JlZW4gd2hlbiBzdG9wLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZBTFNFOiBTaG93IGxhc3QgZGVjb2RlZCBmcmFtZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fUExBWTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIHN0YXJ0IHBsYXlpbmcgYSB2aWRlbyBzdHJlYW0gZnJvbSB0aGUKKyBzZWxlY3RlZCBzb3VyY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19QTEFZKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1BMQVkgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fRlJFRVpFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBzdXNwZW5kcyB0aGUgbGl2ZSB2aWRlbyBzdHJlYW0gYmVpbmcgcGxheWVkLiBEZWNvZGluZworIGFuZCBwbGF5aW5nIGFyZSBmcm96ZW4uIEl0IGlzIHRoZW4gcG9zc2libGUgdG8gcmVzdGFydCB0aGUgZGVjb2RpbmcKKyBhbmQgcGxheWluZyBwcm9jZXNzIG9mIHRoZSB2aWRlbyBzdHJlYW0gdXNpbmcgdGhlIFZJREVPX0NPTlRJTlVFCisgY29tbWFuZC4gSWYgVklERU9fU09VUkNFX01FTU9SWSBpcyBzZWxlY3RlZCBpbiB0aGUgaW9jdGwgY2FsbAorIFZJREVPX1NFTEVDVF9TT1VSQ0UsIHRoZSBEVkIgc3Vic3lzdGVtIHdpbGwgbm90IGRlY29kZSBhbnkgbW9yZQorIGRhdGEgdW50aWwgdGhlIGlvY3RsIGNhbGwgVklERU9fQ09OVElOVUUgb3IgVklERU9fUExBWSBpcyBwZXJmb3JtZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19GUkVFWkUpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fRlJFRVpFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciwgcG9zc2libHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUKKyBEVkIgc3Vic3lzdGVtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0NPTlRJTlVFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCByZXN0YXJ0cyBkZWNvZGluZyBhbmQgcGxheWluZyBwcm9jZXNzZXMgb2YgdGhlIHZpZGVvIHN0cmVhbQorIHdoaWNoIHdhcyBwbGF5ZWQgYmVmb3JlIGEgY2FsbCB0byBWSURFT19GUkVFWkUgd2FzIG1hZGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19DT05USU5VRSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19DT05USU5VRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IsIHBvc3NpYmx5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlCisgRFZCIHN1YnN5c3RlbS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRUxFQ1RfU09VUkNFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBpbmZvcm1zIHRoZSB2aWRlbyBkZXZpY2Ugd2hpY2ggc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBpbnB1dAorIGRhdGEuIFRoZSBwb3NzaWJsZSBzb3VyY2VzIGFyZSBkZW11eCBvciBtZW1vcnkuIElmIG1lbW9yeSBpcyBzZWxlY3RlZCwgdGhlCisgZGF0YSBpcyBmZWQgdG8gdGhlIHZpZGVvIGRldmljZSB0aHJvdWdoIHRoZSB3cml0ZSBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VMRUNUX1NPVVJDRSwKKyB2aWRlb19zdHJlYW1fc291cmNlX3Qgc291cmNlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFTEVDVF9TT1VSQ0UgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9fc3RyZWFtX3NvdXJjZV90Cisgc291cmNlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbmRpY2F0ZXMgd2hpY2ggc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBWaWRlbyBzdHJlYW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciwgcG9zc2libHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUKKyBEVkIgc3Vic3lzdGVtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9CTEFOSzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIGJsYW5rIG91dCB0aGUgcGljdHVyZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9CTEFOSywgYm9vbGVhbgorIG1vZGUpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fU0VUX0JMQU5LIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmJvb2xlYW4gbW9kZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VFJVRTogQmxhbmsgc2NyZWVuIHdoZW4gc3RvcC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GQUxTRTogU2hvdyBsYXN0IGRlY29kZWQgZnJhbWUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5JbnRlcm5hbCBlcnJvciwgcG9zc2libHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUKKyBEVkIgc3Vic3lzdGVtLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fR0VUX1NUQVRVUzwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIHJldHVybiB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19HRVRfU1RBVFVTLCBzdHJ1Y3QKKyB2aWRlb19zdGF0dXMgJiN4MjJDNjtzdGF0dXMpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fR0VUX1NUQVRVUyBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgdmlkZW9fc3RhdHVzCisgKnN0YXR1czwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+UmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIFZpZGVvIERldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RhdHVzIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3M8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19HRVRfRVZFTlQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHJldHVybnMgYW4gZXZlbnQgb2YgdHlwZSB2aWRlb19ldmVudCBpZiBhdmFpbGFibGUuIElmIGFuIGV2ZW50IGlzCisgbm90IGF2YWlsYWJsZSwgdGhlIGJlaGF2aW9yIGRlcGVuZHMgb24gd2hldGhlciB0aGUgZGV2aWNlIGlzIGluIGJsb2NraW5nIG9yCisgbm9uLWJsb2NraW5nIG1vZGUuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGNhbGwgZmFpbHMgaW1tZWRpYXRlbHkgd2l0aCBlcnJubworIHNldCB0byBFV09VTERCTE9DSy4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgY2FsbCBibG9ja3MgdW50aWwgYW4gZXZlbnQKKyBiZWNvbWVzIGF2YWlsYWJsZS4gVGhlIHN0YW5kYXJkIExpbnV4IHBvbGwoKSBhbmQvb3Igc2VsZWN0KCkgc3lzdGVtIGNhbGxzIGNhbgorIGJlIHVzZWQgd2l0aCB0aGUgZGV2aWNlIGZpbGUgZGVzY3JpcHRvciB0byB3YXRjaCBmb3IgbmV3IGV2ZW50cy4gRm9yIHNlbGVjdCgpLAorIHRoZSBmaWxlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBleGNlcHRmZHMgYXJndW1lbnQsIGFuZCBmb3IKKyBwb2xsKCksIFBPTExQUkkgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyB0aGUgd2FrZS11cCBjb25kaXRpb24uIFJlYWQtb25seQorIHBlcm1pc3Npb25zIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGlvY3RsIGNhbGwuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fR0VUX0VWRU5ULCBzdHJ1Y3QKKyB2aWRlb19ldmVudCAmI3gyMkM2O2V2KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX0dFVF9FVkVOVCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJ1Y3QgdmlkZW9fZXZlbnQKKyAqZXY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGV2ZW50LCBpZiBhbnksIGlzIHRvIGJlCisgc3RvcmVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVGQVVMVDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZXYgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzczwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhlcmUgaXMgbm8gZXZlbnQgcGVuZGluZywgYW5kIHRoZSBkZXZpY2UgaXMgaW4KKyBub24tYmxvY2tpbmcgbW9kZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RU9WRVJGTE9XPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5PdmVyZmxvdyBpbiBldmVudCBxdWV1ZSAtIG9uZSBvciBtb3JlIGV2ZW50cyB3ZXJlIGxvc3QuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0RJU1BMQVlfRk9STUFUPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSBWaWRlbyBEZXZpY2UgdG8gc2VsZWN0IHRoZSB2aWRlbyBmb3JtYXQgdG8gYmUgYXBwbGllZAorIGJ5IHRoZSBNUEVHIGNoaXAgb24gdGhlIHZpZGVvLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4gaW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9CisgVklERU9fU0VUX0RJU1BMQVlfRk9STUFULCB2aWRlb19kaXNwbGF5X2Zvcm1hdF90CisgZm9ybWF0KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9ESVNQTEFZX0ZPUk1BVCBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX2Rpc3BsYXlfZm9ybWF0X3QKKyBmb3JtYXQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNlbGVjdHMgdGhlIHZpZGVvIGZvcm1hdCB0byBiZSB1c2VkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SWxsZWdhbCBwYXJhbWV0ZXIgZm9ybWF0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NUSUxMUElDVFVSRTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgYXNrcyB0aGUgVmlkZW8gRGV2aWNlIHRvIGRpc3BsYXkgYSBzdGlsbCBwaWN0dXJlIChJLWZyYW1lKS4gVGhlCisgaW5wdXQgZGF0YSBzaGFsbCBjb250YWluIGFuIEktZnJhbWUuIElmIHRoZSBwb2ludGVyIGlzIE5VTEwsIHRoZW4gdGhlIGN1cnJlbnQKKyBkaXNwbGF5ZWQgc3RpbGwgcGljdHVyZSBpcyBibGFua2VkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU1RJTExQSUNUVVJFLAorIHN0cnVjdCB2aWRlb19zdGlsbF9waWN0dXJlICYjeDIyQzY7c3ApOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fU1RJTExQSUNUVVJFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdAorIHZpZGVvX3N0aWxsX3BpY3R1cmUKKyAqc3A8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50ZXIgdG8gYSBsb2NhdGlvbiB3aGVyZSBhbiBJLWZyYW1lIGFuZCBzaXplIGlzIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5URVJOQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnNwIHBvaW50cyB0byBhbiBpbnZhbGlkIGlmcmFtZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19GQVNUX0ZPUldBUkQ8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIGFza3MgdGhlIFZpZGVvIERldmljZSB0byBza2lwIGRlY29kaW5nIG9mIE4gbnVtYmVyIG9mIEktZnJhbWVzLgorIFRoaXMgY2FsbCBjYW4gb25seSBiZSB1c2VkIGlmIFZJREVPX1NPVVJDRV9NRU1PUlkgaXMgc2VsZWN0ZWQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19GQVNUX0ZPUldBUkQsIGludAorIG5GcmFtZXMpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fRkFTVF9GT1JXQVJEIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBuRnJhbWVzPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVQRVJNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Nb2RlIFZJREVPX1NPVVJDRV9NRU1PUlkgbm90IHNlbGVjdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgcGFyYW1ldGVyIGZvcm1hdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TTE9XTU9USU9OPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSB2aWRlbyBkZXZpY2UgdG8gcmVwZWF0IGRlY29kaW5nIGZyYW1lcyBOIG51bWJlciBvZgorIHRpbWVzLiBUaGlzIGNhbGwgY2FuIG9ubHkgYmUgdXNlZCBpZiBWSURFT19TT1VSQ0VfTUVNT1JZIGlzIHNlbGVjdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0xPV01PVElPTiwgaW50CisgbkZyYW1lcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TTE9XTU9USU9OIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBuRnJhbWVzPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCBlYWNoIGZyYW1lLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVQRVJNPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Nb2RlIFZJREVPX1NPVVJDRV9NRU1PUlkgbm90IHNlbGVjdGVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FSU5WQUw8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPklsbGVnYWwgcGFyYW1ldGVyIGZvcm1hdC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19HRVRfQ0FQQUJJTElUSUVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgY2FsbCBhc2tzIHRoZSB2aWRlbyBkZXZpY2UgYWJvdXQgaXRzIGRlY29kaW5nIGNhcGFiaWxpdGllcy4gT24gc3VjY2VzcworIGl0IHJldHVybnMgYW5kIGludGVnZXIgd2hpY2ggaGFzIGJpdHMgc2V0IGFjY29yZGluZyB0byB0aGUgZGVmaW5lcyBpbiBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fR0VUX0NBUEFCSUxJVElFUywKKyB1bnNpZ25lZCBpbnQgJiN4MjJDNjtjYXApOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCByZXF1ZXN0PC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgVklERU9fR0VUX0NBUEFCSUxJVElFUyBmb3IgdGhpcworIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnVuc2lnbmVkIGludCAqY2FwPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludGVyIHRvIGEgbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgdGhlIGNhcGFiaWxpdHkKKyBpbmZvcm1hdGlvbi48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FRkFVTFQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmNhcCBwb2ludHMgdG8gYW4gaW52YWxpZCBpZnJhbWUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0lEPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgc2VsZWN0cyB3aGljaCBzdWItc3RyZWFtIGlzIHRvIGJlIGRlY29kZWQgaWYgYSBwcm9ncmFtIG9yIHN5c3RlbQorIHN0cmVhbSBpcyBzZW50IHRvIHRoZSB2aWRlbyBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VUX0lELCBpbnQKKyBpZCk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TRVRfSUQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT52aWRlbyBzdWItc3RyZWFtIGlkPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+SW52YWxpZCBzdWItc3RyZWFtIGlkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0NMRUFSX0JVRkZFUjwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgY2xlYXJzIGFsbCB2aWRlbyBidWZmZXJzIGluIHRoZSBkcml2ZXIgYW5kIGluIHRoZSBkZWNvZGVyIGhhcmR3YXJlLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fQ0xFQVJfQlVGRkVSKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX0NMRUFSX0JVRkZFUiBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX1NUUkVBTVRZUEU8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCB0ZWxscyB0aGUgZHJpdmVyIHdoaWNoIGtpbmQgb2Ygc3RyZWFtIHRvIGV4cGVjdCBiZWluZyB3cml0dGVuIHRvIGl0LiBJZgorIHRoaXMgY2FsbCBpcyBub3QgdXNlZCB0aGUgZGVmYXVsdCBvZiB2aWRlbyBQRVMgaXMgdXNlZC4gU29tZSBkcml2ZXJzIG1pZ2h0IG5vdAorIHN1cHBvcnQgdGhpcyBjYWxsIGFuZCBhbHdheXMgZXhwZWN0IFBFUy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9TVFJFQU1UWVBFLAorIGludCB0eXBlKTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9TVFJFQU1UWVBFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCB0eXBlPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5zdHJlYW0gdHlwZTwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dHlwZSBpcyBub3QgYSB2YWxpZCBvciBzdXBwb3J0ZWQgc3RyZWFtIHR5cGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0ZPUk1BVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIHNldHMgdGhlIHNjcmVlbiBmb3JtYXQgKGFzcGVjdCByYXRpbykgb2YgdGhlIGNvbm5lY3RlZCBvdXRwdXQgZGV2aWNlCisgKFRWKSBzbyB0aGF0IHRoZSBvdXRwdXQgb2YgdGhlIGRlY29kZXIgY2FuIGJlIGFkanVzdGVkIGFjY29yZGluZ2x5LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4gaW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9GT1JNQVQsCisgdmlkZW9fZm9ybWF0X3QgZm9ybWF0KTs8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9GT1JNQVQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9fZm9ybWF0X3QKKyBmb3JtYXQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvIGZvcm1hdCBvZiBUViBhcyBkZWZpbmVkIGluIHNlY3Rpb24gPz8uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mb3JtYXQgaXMgbm90IGEgdmFsaWQgdmlkZW8gZm9ybWF0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9TWVNURU08L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBzZXRzIHRoZSB0ZWxldmlzaW9uIG91dHB1dCBmb3JtYXQuIFRoZSBmb3JtYXQgKHNlZSBzZWN0aW9uID8/KSBtYXkKKyB2YXJ5IGZyb20gdGhlIGNvbG9yIGZvcm1hdCBvZiB0aGUgZGlzcGxheWVkIE1QRUcgc3RyZWFtLiBJZiB0aGUgaGFyZHdhcmUgaXMKKyBub3QgYWJsZSB0byBkaXNwbGF5IHRoZSByZXF1ZXN0ZWQgZm9ybWF0IHRoZSBjYWxsIHdpbGwgcmV0dXJuIGFuIGVycm9yLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5TWU5PUFNJUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT4gaW50IGlvY3RsKGZkLCBpbnQgcmVxdWVzdCA9IFZJREVPX1NFVF9TWVNURU0gLAorIHZpZGVvX3N5c3RlbV90IHN5c3RlbSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TRVRfRk9STUFUIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX3N5c3RlbV90Cisgc3lzdGVtPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT52aWRlbyBzeXN0ZW0gb2YgVFYgb3V0cHV0LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3lzdGVtIGlzIG5vdCBhIHZhbGlkIG9yIHN1cHBvcnRlZCB2aWRlbyBzeXN0ZW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0hJR0hMSUdIVDwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIHNldHMgdGhlIFNQVSBoaWdobGlnaHQgaW5mb3JtYXRpb24gZm9yIHRoZSBtZW51IGFjY2VzcyBvZiBhIERWRC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19TRVRfSElHSExJR0hUCisgLHZpZGVvX2hpZ2hsaWdodF90ICYjeDIyQzY7dmhpbGl0ZSk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9ISUdITElHSFQgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9faGlnaGxpZ2h0X3QKKyAqdmhpbGl0ZTwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+U1BVIEhpZ2hsaWdodCBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gc2VjdGlvbiA/Py48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+RVJST1JTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVCQURGPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnB1dCBpcyBub3QgYSB2YWxpZCBoaWdobGlnaHQgc2V0dGluZy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3Rpb24+PHNlY3Rpb24KK3JvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfU1BVPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIFNQVSBkZWNvZGluZyBpbiBhIERWRCBpbnB1dCBzdHJlYW0uIEl0IGNhbgorIG9ubHkgYmUgdXNlZCwgaWYgdGhlIGRyaXZlciBpcyBhYmxlIHRvIGhhbmRsZSBhIERWRCBzdHJlYW0uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VUX1NQVSAsCisgdmlkZW9fc3B1X3QgJiN4MjJDNjtzcHUpPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBWSURFT19TRVRfU1BVIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX3NwdV90ICpzcHU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNQVSBkZWNvZGluZyAoZGUpYWN0aXZhdGlvbiBhbmQgc3ViaWQgc2V0dGluZyBhY2NvcmRpbmcKKyB0byBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW5wdXQgaXMgbm90IGEgdmFsaWQgc3B1IHNldHRpbmcgb3IgZHJpdmVyIGNhbm5vdCBoYW5kbGUKKyBTUFUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKworPC9zZWN0aW9uPjxzZWN0aW9uCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX1NQVV9QQUxFVFRFPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgc2V0cyB0aGUgU1BVIGNvbG9yIHBhbGV0dGUuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPiBpbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gVklERU9fU0VUX1NQVV9QQUxFVFRFCisgLHZpZGVvX3NwdV9wYWxldHRlX3QgJiN4MjJDNjtwYWxldHRlICk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9TUFVfUEFMRVRURSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT52aWRlb19zcHVfcGFsZXR0ZV90CisgKnBhbGV0dGU8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlNQVSBwYWxldHRlIGFjY29yZGluZyB0byBzZWN0aW9uID8/LjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5FUlJPUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUJBREY8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVJTlZBTDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW5wdXQgaXMgbm90IGEgdmFsaWQgcGFsZXR0ZSBvciBkcml2ZXIgZG9lc24mIzgyMTc7dCBoYW5kbGUgU1BVLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0dFVF9OQVZJPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgcmV0dXJucyBuYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb24gZnJvbSB0aGUgRFZEIHN0cmVhbS4gVGhpcyBpcworIGVzcGVjaWFsbHkgbmVlZGVkIGlmIGFuIGVuY29kZWQgc3RyZWFtIGhhcyB0byBiZSBkZWNvZGVkIGJ5IHRoZSBoYXJkd2FyZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19HRVRfTkFWSSAsCisgdmlkZW9fbmF2aV9wYWNrX3QgJiN4MjJDNjtuYXZpcGFjayk8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX0dFVF9OQVZJIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvX25hdmlfcGFja190CisgKm5hdmlwYWNrPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5QQ0kgb3IgRFNJIHBhY2sgKHByaXZhdGUgc3RyZWFtIDIpIGFjY29yZGluZyB0byBzZWN0aW9uCisgPz8uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUZBVUxUPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5kcml2ZXIgaXMgbm90IGFibGUgdG8gcmV0dXJuIG5hdmlnYXRpb25hbCBpbmZvcm1hdGlvbjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKzwvc2VjdGlvbj48c2VjdGlvbgorcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9BVFRSSUJVVEVTPC90aXRsZT4KKzxwYXJhPkRFU0NSSVBUSU9OCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlRoaXMgaW9jdGwgaXMgaW50ZW5kZWQgZm9yIERWRCBwbGF5YmFjayBhbmQgYWxsb3dzIHlvdSB0byBzZXQgY2VydGFpbgorIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJlYW0uIFNvbWUgaGFyZHdhcmUgbWF5IG5vdCBuZWVkIHRoaXMgaW5mb3JtYXRpb24sCisgYnV0IHRoZSBjYWxsIGFsc28gdGVsbHMgdGhlIGhhcmR3YXJlIHRvIHByZXBhcmUgZm9yIERWRCBwbGF5YmFjay48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+IGludCBpb2N0bChmZCwgaW50IHJlcXVlc3QgPSBWSURFT19TRVRfQVRUUklCVVRFCisgLHZpZGVvX2F0dHJpYnV0ZXNfdCB2YXR0cik8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+UEFSQU1FVEVSUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RXF1YWxzIFZJREVPX1NFVF9BVFRSSUJVVEUgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+dmlkZW9fYXR0cmlidXRlc190CisgdmF0dHI8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnZpZGVvIGF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIHNlY3Rpb24gPz8uPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPkVSUk9SUworPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FQkFERjwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RUlOVkFMPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnB1dCBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgc2V0dGluZy48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorIDwvc2VjdGlvbj48L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYjQzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbApAQCAtMCwwICsxLDM2NCBAQAorPCEtLSBHZW5lcmF0ZWQgZmlsZSEgRG8gbm90IGVkaXQuIC0tPgorCis8IS0tIEZ1bmN0aW9ucyAtLT4KKzwhRU5USVRZIGZ1bmMtY2xvc2UgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtY2xvc2UnPjxmdW5jdGlvbj5jbG9zZSgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtaW9jdGwgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtaW9jdGwnPjxmdW5jdGlvbj5pb2N0bCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtbW1hcCAiPGxpbmsgbGlua2VuZD0nZnVuYy1tbWFwJz48ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtbXVubWFwICI8bGluayBsaW5rZW5kPSdmdW5jLW11bm1hcCc+PGZ1bmN0aW9uPm11bm1hcCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtb3BlbiAiPGxpbmsgbGlua2VuZD0nZnVuYy1vcGVuJz48ZnVuY3Rpb24+b3BlbigpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtcG9sbCAiPGxpbmsgbGlua2VuZD0nZnVuYy1wb2xsJz48ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtcmVhZCAiPGxpbmsgbGlua2VuZD0nZnVuYy1yZWFkJz48ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtc2VsZWN0ICI8bGluayBsaW5rZW5kPSdmdW5jLXNlbGVjdCc+PGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKzwhRU5USVRZIGZ1bmMtd3JpdGUgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtd3JpdGUnPjxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj48L2xpbms+Ij4KKworPCEtLSBJb2N0bHMgLS0+Cis8IUVOVElUWSBWSURJT0MtQ1JPUENBUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWNyb3BjYXAnPjxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtREJHLUctQ0hJUC1JREVOVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQnPjxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtREJHLUctUkVHSVNURVIgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1kYmctZy1yZWdpc3Rlcic+PGNvbnN0YW50PlZJRElPQ19EQkdfR19SRUdJU1RFUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtREJHLVMtUkVHSVNURVIgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1kYmctZy1yZWdpc3Rlcic+PGNvbnN0YW50PlZJRElPQ19EQkdfU19SRUdJU1RFUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRFFCVUYgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xYnVmJz48Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1FTkNPREVSLUNNRCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVuY29kZXItY21kJz48Y29uc3RhbnQ+VklESU9DX0VOQ09ERVJfQ01EPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1FTlVNQVVESU8gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtYXVkaW8nPjxjb25zdGFudD5WSURJT0NfRU5VTUFVRElPPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1FTlVNQVVET1VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bWF1ZGlvb3V0Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1BVURPVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU1JTlBVVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW1pbnB1dCc+PGNvbnN0YW50PlZJRElPQ19FTlVNSU5QVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU1PVVRQVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtb3V0cHV0Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1PVVRQVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU1TVEQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtc3RkJz48Y29uc3RhbnQ+VklESU9DX0VOVU1TVEQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU0tRk1UICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bS1mbXQnPjxjb25zdGFudD5WSURJT0NfRU5VTV9GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU0tRlJBTUVJTlRFUlZBTFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzJz48Y29uc3RhbnQ+VklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU0tRlJBTUVTSVpFUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZnJhbWVzaXplcyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctQVVESU8gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWF1ZGlvJz48Y29uc3RhbnQ+VklESU9DX0dfQVVESU88L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctQVVET1VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1hdWRpb291dCc+PGNvbnN0YW50PlZJRElPQ19HX0FVRE9VVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1DUk9QICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jcm9wJz48Y29uc3RhbnQ+VklESU9DX0dfQ1JPUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1DVFJMICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jdHJsJz48Y29uc3RhbnQ+VklESU9DX0dfQ1RSTDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1FTkMtSU5ERVggIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWVuYy1pbmRleCc+PGNvbnN0YW50PlZJRElPQ19HX0VOQ19JTkRFWDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1FWFQtQ1RSTFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWV4dC1jdHJscyc+PGNvbnN0YW50PlZJRElPQ19HX0VYVF9DVFJMUzwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1GQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mYnVmJz48Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1GTVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1GUkVRVUVOQ1kgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZyZXF1ZW5jeSc+PGNvbnN0YW50PlZJRElPQ19HX0ZSRVFVRU5DWTwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1JTlBVVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctaW5wdXQnPjxjb25zdGFudD5WSURJT0NfR19JTlBVVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1KUEVHQ09NUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctanBlZ2NvbXAnPjxjb25zdGFudD5WSURJT0NfR19KUEVHQ09NUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1NUEVHQ09NUCAiPGxpbmsgbGlua2VuZD0nJz48Y29uc3RhbnQ+VklESU9DX0dfTVBFR0NPTVA8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctTU9EVUxBVE9SICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1tb2R1bGF0b3InPjxjb25zdGFudD5WSURJT0NfR19NT0RVTEFUT1I8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctT1VUUFVUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1vdXRwdXQnPjxjb25zdGFudD5WSURJT0NfR19PVVRQVVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctUEFSTSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctcGFybSc+PGNvbnN0YW50PlZJRElPQ19HX1BBUk08L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctUFJJT1JJVFkgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXByaW9yaXR5Jz48Y29uc3RhbnQ+VklESU9DX0dfUFJJT1JJVFk8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctU0xJQ0VELVZCSS1DQVAgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwJz48Y29uc3RhbnQ+VklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctU1REICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1zdGQnPjxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUctVFVORVIgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXR1bmVyJz48Y29uc3RhbnQ+VklESU9DX0dfVFVORVI8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUxPRy1TVEFUVVMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1sb2ctc3RhdHVzJz48Y29uc3RhbnQ+VklESU9DX0xPR19TVEFUVVM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLU9WRVJMQVkgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1vdmVybGF5Jz48Y29uc3RhbnQ+VklESU9DX09WRVJMQVk8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFCVUYgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xYnVmJz48Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnlidWYnPjxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZQ0FQICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnljYXAnPjxjb25zdGFudD5WSURJT0NfUVVFUllDQVA8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZQ1RSTCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXF1ZXJ5Y3RybCc+PGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZTUVOVSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXF1ZXJ5Y3RybCc+PGNvbnN0YW50PlZJRElPQ19RVUVSWU1FTlU8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVFVRVJZU1REICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnlzdGQnPjxjb25zdGFudD5WSURJT0NfUVVFUllTVEQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVJFUUJVRlMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1yZXFidWZzJz48Y29uc3RhbnQ+VklESU9DX1JFUUJVRlM8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVNUUkVBTU9GRiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN0cmVhbW9uJz48Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9GRjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtU1RSRUFNT04gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1zdHJlYW1vbic+PGNvbnN0YW50PlZJRElPQ19TVFJFQU1PTjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1BVURJTyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctYXVkaW8nPjxjb25zdGFudD5WSURJT0NfU19BVURJTzwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1BVURPVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWF1ZGlvb3V0Jz48Y29uc3RhbnQ+VklESU9DX1NfQVVET1VUPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUNST1AgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWNyb3AnPjxjb25zdGFudD5WSURJT0NfU19DUk9QPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUNUUkwgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWN0cmwnPjxjb25zdGFudD5WSURJT0NfU19DVFJMPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUVYVC1DVFJMUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZXh0LWN0cmxzJz48Y29uc3RhbnQ+VklESU9DX1NfRVhUX0NUUkxTPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUZCVUYgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZidWYnPjxjb25zdGFudD5WSURJT0NfU19GQlVGPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUZNVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZm10Jz48Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUZSRVFVRU5DWSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZnJlcXVlbmN5Jz48Y29uc3RhbnQ+VklESU9DX1NfRlJFUVVFTkNZPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUhXLUZSRVEtU0VFSyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXMtaHctZnJlcS1zZWVrJz48Y29uc3RhbnQ+VklESU9DX1NfSFdfRlJFUV9TRUVLPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUlOUFVUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1pbnB1dCc+PGNvbnN0YW50PlZJRElPQ19TX0lOUFVUPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLUpQRUdDT01QICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1qcGVnY29tcCc+PGNvbnN0YW50PlZJRElPQ19TX0pQRUdDT01QPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1TLU1QRUdDT01QICI8bGluayBsaW5rZW5kPScnPjxjb25zdGFudD5WSURJT0NfU19NUEVHQ09NUDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1NT0RVTEFUT1IgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLW1vZHVsYXRvcic+PGNvbnN0YW50PlZJRElPQ19TX01PRFVMQVRPUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1PVVRQVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLW91dHB1dCc+PGNvbnN0YW50PlZJRElPQ19TX09VVFBVVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1QQVJNICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1wYXJtJz48Y29uc3RhbnQ+VklESU9DX1NfUEFSTTwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1QUklPUklUWSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctcHJpb3JpdHknPjxjb25zdGFudD5WSURJT0NfU19QUklPUklUWTwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1TVEQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXN0ZCc+PGNvbnN0YW50PlZJRElPQ19TX1NURDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUy1UVU5FUiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctdHVuZXInPjxjb25zdGFudD5WSURJT0NfU19UVU5FUjwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtVFJZLUVOQ09ERVItQ01EICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW5jb2Rlci1jbWQnPjxjb25zdGFudD5WSURJT0NfVFJZX0VOQ09ERVJfQ01EPC9jb25zdGFudD48L2xpbms+Ij4KKzwhRU5USVRZIFZJRElPQy1UUlktRVhULUNUUkxTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1leHQtY3RybHMnPjxjb25zdGFudD5WSURJT0NfVFJZX0VYVF9DVFJMUzwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtVFJZLUZNVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZm10Jz48Y29uc3RhbnQ+VklESU9DX1RSWV9GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgorCis8IS0tIFR5cGVzIC0tPgorPCFFTlRJVFkgdjRsMi1zdGQtaWQgIjxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RkLWlkJz52NGwyX3N0ZF9pZDwvbGluaz4iPgorCis8IS0tIEVudW1zIC0tPgorPCFFTlRJVFkgdjRsMi1idWYtdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYnVmLXR5cGUnPnY0bDJfYnVmX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY29sb3JzcGFjZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY29sb3JzcGFjZSc+djRsMl9jb2xvcnNwYWNlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLWN0cmwtdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY3RybC10eXBlJz52NGwyX2N0cmxfdHlwZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1leHBvc3VyZS1hdXRvLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV4cG9zdXJlLWF1dG8tdHlwZSc+djRsMl9leHBvc3VyZV9hdXRvX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZmllbGQgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZpZWxkJz52NGwyX2ZpZWxkPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLWZybWl2YWx0eXBlcyAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtaXZhbHR5cGVzJz52NGwyX2ZybWl2YWx0eXBlczwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1mcm1zaXpldHlwZXMgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybXNpemV0eXBlcyc+djRsMl9mcm1zaXpldHlwZXM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbWVtb3J5ICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tZW1vcnknPnY0bDJfbWVtb3J5PC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tYWMzLWJpdHJhdGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tYWMzLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLWNyYyAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1jcmMnPnY0bDJfbXBlZ19hdWRpb19jcmM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1lbXBoYXNpcyAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1lbXBoYXNpcyc+djRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmcgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmcnPnY0bDJfbXBlZ19hdWRpb19lbmNvZGluZzwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLWwxLWJpdHJhdGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSc+djRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1sMi1iaXRyYXRlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWwyLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tbDMtYml0cmF0ZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1sMy1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fbDNfYml0cmF0ZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLW1vZGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbW9kZSc+djRsMl9tcGVnX2F1ZGlvX21vZGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbiAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbic+djRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tc2FtcGxpbmctZnJlcSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1zYW1wbGluZy1mcmVxJz52NGwyX21wZWdfYXVkaW9fc2FtcGxpbmdfZnJlcTwvbGluaz4iPgorPCFFTlRJVFkgY2hyb21hLXNwYXRpYWwtZmlsdGVyLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSdjaHJvbWEtc3BhdGlhbC1maWx0ZXItdHlwZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fY2hyb21hX3NwYXRpYWxfZmlsdGVyX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIGx1bWEtc3BhdGlhbC1maWx0ZXItdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J2x1bWEtc3BhdGlhbC1maWx0ZXItdHlwZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tc3BhdGlhbC1maWx0ZXItbW9kZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXNwYXRpYWwtZmlsdGVyLW1vZGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXRlbXBvcmFsLWZpbHRlci1tb2RlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tdGVtcG9yYWwtZmlsdGVyLW1vZGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlPC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctc3RyZWFtLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctc3RyZWFtLXR5cGUnPnY0bDJfbXBlZ19zdHJlYW1fdHlwZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLXN0cmVhbS12YmktZm10ICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXN0cmVhbS12YmktZm10Jz52NGwyX21wZWdfc3RyZWFtX3ZiaV9mbXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy12aWRlby1hc3BlY3QgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmlkZW8tYXNwZWN0Jz52NGwyX21wZWdfdmlkZW9fYXNwZWN0PC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLW1wZWctdmlkZW8tYml0cmF0ZS1tb2RlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZpZGVvLWJpdHJhdGUtbW9kZSc+djRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nJz52NGwyX21wZWdfdmlkZW9fZW5jb2Rpbmc8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcG93ZXItbGluZS1mcmVxdWVuY3kgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXBvd2VyLWxpbmUtZnJlcXVlbmN5Jz52NGwyX3Bvd2VyX2xpbmVfZnJlcXVlbmN5PC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLXByaW9yaXR5ICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1wcmlvcml0eSc+djRsMl9wcmlvcml0eTwvbGluaz4iPgorPCFFTlRJVFkgdjRsMi10dW5lci10eXBlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi10dW5lci10eXBlJz52NGwyX3R1bmVyX3R5cGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcHJlZW1waGFzaXMgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXByZWVtcGhhc2lzJz52NGwyX3ByZWVtcGhhc2lzPC9saW5rPiI+CisKKzwhLS0gU3RydWN0dXJlcyAtLT4KKzwhRU5USVRZIHY0bDItYXVkaW8gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW8nPnY0bDJfYXVkaW88L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItYXVkaW9vdXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW9vdXQnPnY0bDJfYXVkaW9vdXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItYnVmZmVyICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWJ1ZmZlcic+djRsMl9idWZmZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY2FwYWJpbGl0eSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jYXBhYmlsaXR5Jz52NGwyX2NhcGFiaWxpdHk8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY2FwdHVyZXBhcm0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwdHVyZXBhcm0nPnY0bDJfY2FwdHVyZXBhcm08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY2xpcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jbGlwJz52NGwyX2NsaXA8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY29udHJvbCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jb250cm9sJz52NGwyX2NvbnRyb2w8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY3JvcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jcm9wJz52NGwyX2Nyb3A8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItY3JvcGNhcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jcm9wY2FwJz52NGwyX2Nyb3BjYXA8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZGJnLWNoaXAtaWRlbnQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLWNoaXAtaWRlbnQnPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZGJnLW1hdGNoICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1tYXRjaCc+djRsMl9kYmdfbWF0Y2g8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZGJnLXJlZ2lzdGVyICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1yZWdpc3Rlcic+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZW5jLWlkeCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4Jz52NGwyX2VuY19pZHg8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZW5jLWlkeC1lbnRyeSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4LWVudHJ5Jz52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZW5jb2Rlci1jbWQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jb2Rlci1jbWQnPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZXh0LWNvbnRyb2wgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXh0LWNvbnRyb2wnPnY0bDJfZXh0X2NvbnRyb2w8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZXh0LWNvbnRyb2xzICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV4dC1jb250cm9scyc+djRsMl9leHRfY29udHJvbHM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZm10ZGVzYyAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mbXRkZXNjJz52NGwyX2ZtdGRlc2M8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZm9ybWF0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZvcm1hdCc+djRsMl9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJhY3QgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhY3QnPnY0bDJfZnJhY3Q8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJhbWVidWZmZXIgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhbWVidWZmZXInPnY0bDJfZnJhbWVidWZmZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJlcXVlbmN5ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZyZXF1ZW5jeSc+djRsMl9mcmVxdWVuY3k8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtaXZhbC1zdGVwd2lzZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1pdmFsLXN0ZXB3aXNlJz52NGwyX2ZybWl2YWxfc3RlcHdpc2U8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtaXZhbGVudW0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtaXZhbGVudW0nPnY0bDJfZnJtaXZhbGVudW08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtc2l6ZS1kaXNjcmV0ZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplLWRpc2NyZXRlJz52NGwyX2ZybXNpemVfZGlzY3JldGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtc2l6ZS1zdGVwd2lzZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplLXN0ZXB3aXNlJz52NGwyX2ZybXNpemVfc3RlcHdpc2U8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZnJtc2l6ZWVudW0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZWVudW0nPnY0bDJfZnJtc2l6ZWVudW08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItaHctZnJlcS1zZWVrICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWh3LWZyZXEtc2Vlayc+djRsMl9od19mcmVxX3NlZWs8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItaW5wdXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItaW5wdXQnPnY0bDJfaW5wdXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItanBlZ2NvbXByZXNzaW9uICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWpwZWdjb21wcmVzc2lvbic+djRsMl9qcGVnY29tcHJlc3Npb248L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbW9kdWxhdG9yICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1vZHVsYXRvcic+djRsMl9tb2R1bGF0b3I8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItbXBlZy12YmktZm10LWl2dHYgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy12YmktZm10LWl2dHYnPnY0bDJfbXBlZ192YmlfZm10X2l2dHY8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItb3V0cHV0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW91dHB1dCc+djRsMl9vdXRwdXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItb3V0cHV0cGFybSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1vdXRwdXRwYXJtJz52NGwyX291dHB1dHBhcm08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcGl4LWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1waXgtZm9ybWF0Jz52NGwyX3BpeF9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcXVlcnljdHJsICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5Y3RybCc+djRsMl9xdWVyeWN0cmw8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcXVlcnltZW51ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5bWVudSc+djRsMl9xdWVyeW1lbnU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcmVjdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1yZWN0Jz52NGwyX3JlY3Q8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItcmVxdWVzdGJ1ZmZlcnMgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcmVxdWVzdGJ1ZmZlcnMnPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1jYXAgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1jYXAnPnY0bDJfc2xpY2VkX3ZiaV9jYXA8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1kYXRhICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktZGF0YSc+djRsMl9zbGljZWRfdmJpX2RhdGE8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1mb3JtYXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1mb3JtYXQnPnY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc3RhbmRhcmQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RhbmRhcmQnPnY0bDJfc3RhbmRhcmQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItc3RyZWFtcGFybSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdHJlYW1wYXJtJz52NGwyX3N0cmVhbXBhcm08L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItdGltZWNvZGUgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdGltZWNvZGUnPnY0bDJfdGltZWNvZGU8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItdHVuZXIgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdHVuZXInPnY0bDJfdHVuZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItdmJpLWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi12YmktZm9ybWF0Jz52NGwyX3ZiaV9mb3JtYXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItd2luZG93ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXdpbmRvdyc+djRsMl93aW5kb3c8L2xpbms+Ij4KKworPCEtLSBFcnJvciBDb2RlcyAtLT4KKzwhRU5USVRZIEVBQ0NFUyAiPGVycm9yY29kZT5FQUNDRVM8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFQUdBSU4gIjxlcnJvcmNvZGU+RUFHQUlOPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRUJBREYgIjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFQlVTWSAiPGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVGQVVMVCAiPGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFSU8gIjxlcnJvcmNvZGU+RUlPPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRUlOVFIgIjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFSU5WQUwgIjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRU5GSUxFICI8ZXJyb3Jjb2RlPkVORklMRTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVOT01FTSAiPGVycm9yY29kZT5FTk9NRU08L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Cis8IUVOVElUWSBFTk9TUEMgIjxlcnJvcmNvZGU+RU5PU1BDPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRU5PVFRZICI8ZXJyb3Jjb2RlPkVOT1RUWTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVOWElPICI8ZXJyb3Jjb2RlPkVOWElPPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRU1GSUxFICI8ZXJyb3Jjb2RlPkVNRklMRTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKzwhRU5USVRZIEVQRVJNICI8ZXJyb3Jjb2RlPkVQRVJNPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgorPCFFTlRJVFkgRVJBTkdFICI8ZXJyb3Jjb2RlPkVSQU5HRTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KKworPCEtLSBTdWJzZWN0aW9ucyAtLT4KKzwhRU5USVRZIHN1Yi1iaWJsaW8gU1lTVEVNICJ2NGwvYmlibGlvLnhtbCI+Cis8IUVOVElUWSBzdWItY29tbW9uIFNZU1RFTSAidjRsL2NvbW1vbi54bWwiPgorPCFFTlRJVFkgc3ViLWNvbXBhdCBTWVNURU0gInY0bC9jb21wYXQueG1sIj4KKzwhRU5USVRZIHN1Yi1jb250cm9scyBTWVNURU0gInY0bC9jb250cm9scy54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1jYXB0dXJlIFNZU1RFTSAidjRsL2Rldi1jYXB0dXJlLnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LWNvZGVjIFNZU1RFTSAidjRsL2Rldi1jb2RlYy54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1lZmZlY3QgU1lTVEVNICJ2NGwvZGV2LWVmZmVjdC54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1vc2QgU1lTVEVNICJ2NGwvZGV2LW9zZC54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1vdXRwdXQgU1lTVEVNICJ2NGwvZGV2LW91dHB1dC54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1vdmVybGF5IFNZU1RFTSAidjRsL2Rldi1vdmVybGF5LnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LXJhZGlvIFNZU1RFTSAidjRsL2Rldi1yYWRpby54bWwiPgorPCFFTlRJVFkgc3ViLWRldi1yYXctdmJpIFNZU1RFTSAidjRsL2Rldi1yYXctdmJpLnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LXJkcyBTWVNURU0gInY0bC9kZXYtcmRzLnhtbCI+Cis8IUVOVElUWSBzdWItZGV2LXNsaWNlZC12YmkgU1lTVEVNICJ2NGwvZGV2LXNsaWNlZC12YmkueG1sIj4KKzwhRU5USVRZIHN1Yi1kZXYtdGVsZXRleHQgU1lTVEVNICJ2NGwvZGV2LXRlbGV0ZXh0LnhtbCI+Cis8IUVOVElUWSBzdWItZHJpdmVyIFNZU1RFTSAidjRsL2RyaXZlci54bWwiPgorPCFFTlRJVFkgc3ViLWxpYnY0bCBTWVNURU0gInY0bC9saWJ2NGwueG1sIj4KKzwhRU5USVRZIHN1Yi1yZW1vdGVfY29udHJvbGxlcnMgU1lTVEVNICJ2NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbCI+Cis8IUVOVElUWSBzdWItZmRsLWFwcGVuZGl4IFNZU1RFTSAidjRsL2ZkbC1hcHBlbmRpeC54bWwiPgorPCFFTlRJVFkgc3ViLWNsb3NlIFNZU1RFTSAidjRsL2Z1bmMtY2xvc2UueG1sIj4KKzwhRU5USVRZIHN1Yi1pb2N0bCBTWVNURU0gInY0bC9mdW5jLWlvY3RsLnhtbCI+Cis8IUVOVElUWSBzdWItbW1hcCBTWVNURU0gInY0bC9mdW5jLW1tYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1tdW5tYXAgU1lTVEVNICJ2NGwvZnVuYy1tdW5tYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1vcGVuIFNZU1RFTSAidjRsL2Z1bmMtb3Blbi54bWwiPgorPCFFTlRJVFkgc3ViLXBvbGwgU1lTVEVNICJ2NGwvZnVuYy1wb2xsLnhtbCI+Cis8IUVOVElUWSBzdWItcmVhZCBTWVNURU0gInY0bC9mdW5jLXJlYWQueG1sIj4KKzwhRU5USVRZIHN1Yi1zZWxlY3QgU1lTVEVNICJ2NGwvZnVuYy1zZWxlY3QueG1sIj4KKzwhRU5USVRZIHN1Yi13cml0ZSBTWVNURU0gInY0bC9mdW5jLXdyaXRlLnhtbCI+Cis8IUVOVElUWSBzdWItaW8gU1lTVEVNICJ2NGwvaW8ueG1sIj4KKzwhRU5USVRZIHN1Yi1ncmV5IFNZU1RFTSAidjRsL3BpeGZtdC1ncmV5LnhtbCI+Cis8IUVOVElUWSBzdWItbnYxMiBTWVNURU0gInY0bC9waXhmbXQtbnYxMi54bWwiPgorPCFFTlRJVFkgc3ViLW52MTYgU1lTVEVNICJ2NGwvcGl4Zm10LW52MTYueG1sIj4KKzwhRU5USVRZIHN1Yi1wYWNrZWQtcmdiIFNZU1RFTSAidjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbCI+Cis8IUVOVElUWSBzdWItcGFja2VkLXl1diBTWVNURU0gInY0bC9waXhmbXQtcGFja2VkLXl1di54bWwiPgorPCFFTlRJVFkgc3ViLXNiZ2dyMTYgU1lTVEVNICJ2NGwvcGl4Zm10LXNiZ2dyMTYueG1sIj4KKzwhRU5USVRZIHN1Yi1zYmdncjggU1lTVEVNICJ2NGwvcGl4Zm10LXNiZ2dyOC54bWwiPgorPCFFTlRJVFkgc3ViLXNnYnJnOCBTWVNURU0gInY0bC9waXhmbXQtc2dicmc4LnhtbCI+Cis8IUVOVElUWSBzdWItc2dyYmc4IFNZU1RFTSAidjRsL3BpeGZtdC1zZ3JiZzgueG1sIj4KKzwhRU5USVRZIHN1Yi11eXZ5IFNZU1RFTSAidjRsL3BpeGZtdC11eXZ5LnhtbCI+Cis8IUVOVElUWSBzdWItdnl1eSBTWVNURU0gInY0bC9waXhmbXQtdnl1eS54bWwiPgorPCFFTlRJVFkgc3ViLXkxNiBTWVNURU0gInY0bC9waXhmbXQteTE2LnhtbCI+Cis8IUVOVElUWSBzdWIteTQxcCBTWVNURU0gInY0bC9waXhmbXQteTQxcC54bWwiPgorPCFFTlRJVFkgc3ViLXl1djQxMCBTWVNURU0gInY0bC9waXhmbXQteXV2NDEwLnhtbCI+Cis8IUVOVElUWSBzdWIteXV2NDExcCBTWVNURU0gInY0bC9waXhmbXQteXV2NDExcC54bWwiPgorPCFFTlRJVFkgc3ViLXl1djQyMCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIwLnhtbCI+Cis8IUVOVElUWSBzdWIteXV2NDIycCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIycC54bWwiPgorPCFFTlRJVFkgc3ViLXl1eXYgU1lTVEVNICJ2NGwvcGl4Zm10LXl1eXYueG1sIj4KKzwhRU5USVRZIHN1Yi15dnl1IFNZU1RFTSAidjRsL3BpeGZtdC15dnl1LnhtbCI+Cis8IUVOVElUWSBzdWItcGl4Zm10IFNZU1RFTSAidjRsL3BpeGZtdC54bWwiPgorPCFFTlRJVFkgc3ViLWNyb3BjYXAgU1lTVEVNICJ2NGwvdmlkaW9jLWNyb3BjYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1kYmctZy1yZWdpc3RlciBTWVNURU0gInY0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sIj4KKzwhRU5USVRZIHN1Yi1lbmNvZGVyLWNtZCBTWVNURU0gInY0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtLWZtdCBTWVNURU0gInY0bC92aWRpb2MtZW51bS1mbXQueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtLWZyYW1laW50ZXJ2YWxzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbCI+Cis8IUVOVElUWSBzdWItZW51bS1mcmFtZXNpemVzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1hdWRpby54bWwiPgorPCFFTlRJVFkgc3ViLWVudW1hdWRpb291dCBTWVNURU0gInY0bC92aWRpb2MtZW51bWF1ZGlvb3V0LnhtbCI+Cis8IUVOVElUWSBzdWItZW51bWlucHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtaW5wdXQueG1sIj4KKzwhRU5USVRZIHN1Yi1lbnVtb3V0cHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtb3V0cHV0LnhtbCI+Cis8IUVOVElUWSBzdWItZW51bXN0ZCBTWVNURU0gInY0bC92aWRpb2MtZW51bXN0ZC54bWwiPgorPCFFTlRJVFkgc3ViLWctYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW8ueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWF1ZGlvb3V0IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbCI+Cis8IUVOVElUWSBzdWItZGJnLWctY2hpcC1pZGVudCBTWVNURU0gInY0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwiPgorPCFFTlRJVFkgc3ViLWctY3JvcCBTWVNURU0gInY0bC92aWRpb2MtZy1jcm9wLnhtbCI+Cis8IUVOVElUWSBzdWItZy1jdHJsIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWN0cmwueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWVuYy1pbmRleCBTWVNURU0gInY0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWV4dC1jdHJscyBTWVNURU0gInY0bC92aWRpb2MtZy1leHQtY3RybHMueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWZidWYgU1lTVEVNICJ2NGwvdmlkaW9jLWctZmJ1Zi54bWwiPgorPCFFTlRJVFkgc3ViLWctZm10IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZtdC54bWwiPgorPCFFTlRJVFkgc3ViLWctZnJlcXVlbmN5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwiPgorPCFFTlRJVFkgc3ViLWctaW5wdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctaW5wdXQueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWpwZWdjb21wIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWpwZWdjb21wLnhtbCI+Cis8IUVOVElUWSBzdWItZy1tb2R1bGF0b3IgU1lTVEVNICJ2NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbCI+Cis8IUVOVElUWSBzdWItZy1vdXRwdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctb3V0cHV0LnhtbCI+Cis8IUVOVElUWSBzdWItZy1wYXJtIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXBhcm0ueG1sIj4KKzwhRU5USVRZIHN1Yi1nLXByaW9yaXR5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbCI+Cis8IUVOVElUWSBzdWItZy1zbGljZWQtdmJpLWNhcCBTWVNURU0gInY0bC92aWRpb2MtZy1zbGljZWQtdmJpLWNhcC54bWwiPgorPCFFTlRJVFkgc3ViLWctc3RkIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXN0ZC54bWwiPgorPCFFTlRJVFkgc3ViLWctdHVuZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWctdHVuZXIueG1sIj4KKzwhRU5USVRZIHN1Yi1sb2ctc3RhdHVzIFNZU1RFTSAidjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbCI+Cis8IUVOVElUWSBzdWItb3ZlcmxheSBTWVNURU0gInY0bC92aWRpb2Mtb3ZlcmxheS54bWwiPgorPCFFTlRJVFkgc3ViLXFidWYgU1lTVEVNICJ2NGwvdmlkaW9jLXFidWYueG1sIj4KKzwhRU5USVRZIHN1Yi1xdWVyeWJ1ZiBTWVNURU0gInY0bC92aWRpb2MtcXVlcnlidWYueG1sIj4KKzwhRU5USVRZIHN1Yi1xdWVyeWNhcCBTWVNURU0gInY0bC92aWRpb2MtcXVlcnljYXAueG1sIj4KKzwhRU5USVRZIHN1Yi1xdWVyeWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwiPgorPCFFTlRJVFkgc3ViLXF1ZXJ5c3RkIFNZU1RFTSAidjRsL3ZpZGlvYy1xdWVyeXN0ZC54bWwiPgorPCFFTlRJVFkgc3ViLXJlcWJ1ZnMgU1lTVEVNICJ2NGwvdmlkaW9jLXJlcWJ1ZnMueG1sIj4KKzwhRU5USVRZIHN1Yi1zLWh3LWZyZXEtc2VlayBTWVNURU0gInY0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sIj4KKzwhRU5USVRZIHN1Yi1zdHJlYW1vbiBTWVNURU0gInY0bC92aWRpb2Mtc3RyZWFtb24ueG1sIj4KKzwhRU5USVRZIHN1Yi1jYXB0dXJlLWMgU1lTVEVNICJ2NGwvY2FwdHVyZS5jLnhtbCI+Cis8IUVOVElUWSBzdWIta2V5dGFibGUtYyBTWVNURU0gInY0bC9rZXl0YWJsZS5jLnhtbCI+Cis8IUVOVElUWSBzdWItdjRsMmdyYWItYyBTWVNURU0gInY0bC92NGwyZ3JhYi5jLnhtbCI+Cis8IUVOVElUWSBzdWItdmlkZW9kZXYyLWggU1lTVEVNICJ2NGwvdmlkZW9kZXYyLmgueG1sIj4KKzwhRU5USVRZIHN1Yi12NGwyIFNZU1RFTSAidjRsL3Y0bDIueG1sIj4KKzwhRU5USVRZIHN1Yi1pbnRybyBTWVNURU0gImR2Yi9pbnRyby54bWwiPgorPCFFTlRJVFkgc3ViLWZyb250ZW5kIFNZU1RFTSAiZHZiL2Zyb250ZW5kLnhtbCI+Cis8IUVOVElUWSBzdWItaXNkYnQgU1lTVEVNICJkdmIvaXNkYnQueG1sIj4KKzwhRU5USVRZIHN1Yi1kZW11eCBTWVNURU0gImR2Yi9kZW11eC54bWwiPgorPCFFTlRJVFkgc3ViLXZpZGVvIFNZU1RFTSAiZHZiL3ZpZGVvLnhtbCI+Cis8IUVOVElUWSBzdWItYXVkaW8gU1lTVEVNICJkdmIvYXVkaW8ueG1sIj4KKzwhRU5USVRZIHN1Yi1jYSBTWVNURU0gImR2Yi9jYS54bWwiPgorPCFFTlRJVFkgc3ViLW5ldCBTWVNURU0gImR2Yi9uZXQueG1sIj4KKzwhRU5USVRZIHN1Yi1rZGFwaSBTWVNURU0gImR2Yi9rZGFwaS54bWwiPgorPCFFTlRJVFkgc3ViLWV4YW1wbGVzIFNZU1RFTSAiZHZiL2V4YW1wbGVzLnhtbCI+Cis8IUVOVElUWSBzdWItZHZiYXBpIFNZU1RFTSAiZHZiL2R2YmFwaS54bWwiPgorPCFFTlRJVFkgc3ViLW1lZGlhIFNZU1RFTSAibWVkaWEueG1sIj4KKzwhRU5USVRZIHN1Yi1tZWRpYS1lbnRpdGllcyBTWVNURU0gIm1lZGlhLWVudGl0aWVzLnRtcGwiPgorPCFFTlRJVFkgc3ViLW1lZGlhLWluZGljZXMgU1lTVEVNICJtZWRpYS1pbmRpY2VzLnRtcGwiPgorCis8IS0tIEZ1bmN0aW9uIFJlZmVyZW5jZSAtLT4KKzwhRU5USVRZIGNsb3NlIFNZU1RFTSAidjRsL2Z1bmMtY2xvc2UueG1sIj4KKzwhRU5USVRZIGlvY3RsIFNZU1RFTSAidjRsL2Z1bmMtaW9jdGwueG1sIj4KKzwhRU5USVRZIG1tYXAgU1lTVEVNICJ2NGwvZnVuYy1tbWFwLnhtbCI+Cis8IUVOVElUWSBtdW5tYXAgU1lTVEVNICJ2NGwvZnVuYy1tdW5tYXAueG1sIj4KKzwhRU5USVRZIG9wZW4gU1lTVEVNICJ2NGwvZnVuYy1vcGVuLnhtbCI+Cis8IUVOVElUWSBwb2xsIFNZU1RFTSAidjRsL2Z1bmMtcG9sbC54bWwiPgorPCFFTlRJVFkgcmVhZCBTWVNURU0gInY0bC9mdW5jLXJlYWQueG1sIj4KKzwhRU5USVRZIHNlbGVjdCBTWVNURU0gInY0bC9mdW5jLXNlbGVjdC54bWwiPgorPCFFTlRJVFkgd3JpdGUgU1lTVEVNICJ2NGwvZnVuYy13cml0ZS54bWwiPgorPCFFTlRJVFkgZ3JleSBTWVNURU0gInY0bC9waXhmbXQtZ3JleS54bWwiPgorPCFFTlRJVFkgbnYxMiBTWVNURU0gInY0bC9waXhmbXQtbnYxMi54bWwiPgorPCFFTlRJVFkgbnYxNiBTWVNURU0gInY0bC9waXhmbXQtbnYxNi54bWwiPgorPCFFTlRJVFkgcGFja2VkLXJnYiBTWVNURU0gInY0bC9waXhmbXQtcGFja2VkLXJnYi54bWwiPgorPCFFTlRJVFkgcGFja2VkLXl1diBTWVNURU0gInY0bC9waXhmbXQtcGFja2VkLXl1di54bWwiPgorPCFFTlRJVFkgc2JnZ3IxNiBTWVNURU0gInY0bC9waXhmbXQtc2JnZ3IxNi54bWwiPgorPCFFTlRJVFkgc2JnZ3I4IFNZU1RFTSAidjRsL3BpeGZtdC1zYmdncjgueG1sIj4KKzwhRU5USVRZIHNnYnJnOCBTWVNURU0gInY0bC9waXhmbXQtc2dicmc4LnhtbCI+Cis8IUVOVElUWSBzZ3JiZzggU1lTVEVNICJ2NGwvcGl4Zm10LXNncmJnOC54bWwiPgorPCFFTlRJVFkgdXl2eSBTWVNURU0gInY0bC9waXhmbXQtdXl2eS54bWwiPgorPCFFTlRJVFkgdnl1eSBTWVNURU0gInY0bC9waXhmbXQtdnl1eS54bWwiPgorPCFFTlRJVFkgeTE2IFNZU1RFTSAidjRsL3BpeGZtdC15MTYueG1sIj4KKzwhRU5USVRZIHk0MXAgU1lTVEVNICJ2NGwvcGl4Zm10LXk0MXAueG1sIj4KKzwhRU5USVRZIHl1djQxMCBTWVNURU0gInY0bC9waXhmbXQteXV2NDEwLnhtbCI+Cis8IUVOVElUWSB5dXY0MTFwIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MTFwLnhtbCI+Cis8IUVOVElUWSB5dXY0MjAgU1lTVEVNICJ2NGwvcGl4Zm10LXl1djQyMC54bWwiPgorPCFFTlRJVFkgeXV2NDIycCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIycC54bWwiPgorPCFFTlRJVFkgeXV5diBTWVNURU0gInY0bC9waXhmbXQteXV5di54bWwiPgorPCFFTlRJVFkgeXZ5dSBTWVNURU0gInY0bC9waXhmbXQteXZ5dS54bWwiPgorPCFFTlRJVFkgY3JvcGNhcCBTWVNURU0gInY0bC92aWRpb2MtY3JvcGNhcC54bWwiPgorPCFFTlRJVFkgZGJnLWctcmVnaXN0ZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbCI+Cis8IUVOVElUWSBlbmNvZGVyLWNtZCBTWVNURU0gInY0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sIj4KKzwhRU5USVRZIGVudW0tZm10IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZtdC54bWwiPgorPCFFTlRJVFkgZW51bS1mcmFtZWludGVydmFscyBTWVNURU0gInY0bC92aWRpb2MtZW51bS1mcmFtZWludGVydmFscy54bWwiPgorPCFFTlRJVFkgZW51bS1mcmFtZXNpemVzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sIj4KKzwhRU5USVRZIGVudW1hdWRpbyBTWVNURU0gInY0bC92aWRpb2MtZW51bWF1ZGlvLnhtbCI+Cis8IUVOVElUWSBlbnVtYXVkaW9vdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1hdWRpb291dC54bWwiPgorPCFFTlRJVFkgZW51bWlucHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtaW5wdXQueG1sIj4KKzwhRU5USVRZIGVudW1vdXRwdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sIj4KKzwhRU5USVRZIGVudW1zdGQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1zdGQueG1sIj4KKzwhRU5USVRZIGctYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW8ueG1sIj4KKzwhRU5USVRZIGctYXVkaW9vdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sIj4KKzwhRU5USVRZIGRiZy1nLWNoaXAtaWRlbnQgU1lTVEVNICJ2NGwvdmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQueG1sIj4KKzwhRU5USVRZIGctY3JvcCBTWVNURU0gInY0bC92aWRpb2MtZy1jcm9wLnhtbCI+Cis8IUVOVElUWSBnLWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLWctY3RybC54bWwiPgorPCFFTlRJVFkgZy1lbmMtaW5kZXggU1lTVEVNICJ2NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbCI+Cis8IUVOVElUWSBnLWV4dC1jdHJscyBTWVNURU0gInY0bC92aWRpb2MtZy1leHQtY3RybHMueG1sIj4KKzwhRU5USVRZIGctZmJ1ZiBTWVNURU0gInY0bC92aWRpb2MtZy1mYnVmLnhtbCI+Cis8IUVOVElUWSBnLWZtdCBTWVNURU0gInY0bC92aWRpb2MtZy1mbXQueG1sIj4KKzwhRU5USVRZIGctZnJlcXVlbmN5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwiPgorPCFFTlRJVFkgZy1pbnB1dCBTWVNURU0gInY0bC92aWRpb2MtZy1pbnB1dC54bWwiPgorPCFFTlRJVFkgZy1qcGVnY29tcCBTWVNURU0gInY0bC92aWRpb2MtZy1qcGVnY29tcC54bWwiPgorPCFFTlRJVFkgZy1tb2R1bGF0b3IgU1lTVEVNICJ2NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbCI+Cis8IUVOVElUWSBnLW91dHB1dCBTWVNURU0gInY0bC92aWRpb2MtZy1vdXRwdXQueG1sIj4KKzwhRU5USVRZIGctcGFybSBTWVNURU0gInY0bC92aWRpb2MtZy1wYXJtLnhtbCI+Cis8IUVOVElUWSBnLXByaW9yaXR5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbCI+Cis8IUVOVElUWSBnLXNsaWNlZC12YmktY2FwIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbCI+Cis8IUVOVElUWSBnLXN0ZCBTWVNURU0gInY0bC92aWRpb2MtZy1zdGQueG1sIj4KKzwhRU5USVRZIGctdHVuZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWctdHVuZXIueG1sIj4KKzwhRU5USVRZIGxvZy1zdGF0dXMgU1lTVEVNICJ2NGwvdmlkaW9jLWxvZy1zdGF0dXMueG1sIj4KKzwhRU5USVRZIG92ZXJsYXkgU1lTVEVNICJ2NGwvdmlkaW9jLW92ZXJsYXkueG1sIj4KKzwhRU5USVRZIHFidWYgU1lTVEVNICJ2NGwvdmlkaW9jLXFidWYueG1sIj4KKzwhRU5USVRZIHF1ZXJ5YnVmIFNZU1RFTSAidjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwiPgorPCFFTlRJVFkgcXVlcnljYXAgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y2FwLnhtbCI+Cis8IUVOVElUWSBxdWVyeWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwiPgorPCFFTlRJVFkgcXVlcnlzdGQgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbCI+Cis8IUVOVElUWSByZXFidWZzIFNZU1RFTSAidjRsL3ZpZGlvYy1yZXFidWZzLnhtbCI+Cis8IUVOVElUWSBzLWh3LWZyZXEtc2VlayBTWVNURU0gInY0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sIj4KKzwhRU5USVRZIHN0cmVhbW9uIFNZU1RFTSAidjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWluZGljZXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzMGEyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwKQEAgLTAsMCArMSw4NSBAQAorPCEtLSBHZW5lcmF0ZWQgZmlsZSEgRG8gbm90IGVkaXQuIC0tPgorCis8aW5kZXg+PHRpdGxlPkxpc3Qgb2YgVHlwZXM8L3RpdGxlPgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT48bGluayBsaW5rZW5kPSd2NGwyLXN0ZC1pZCc+djRsMl9zdGRfaWQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1idWYtdHlwZSc+djRsMl9idWZfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNvbG9yc3BhY2UnPnY0bDJfY29sb3JzcGFjZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWN0cmwtdHlwZSc+djRsMl9jdHJsX3R5cGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1leHBvc3VyZS1hdXRvLXR5cGUnPnY0bDJfZXhwb3N1cmVfYXV0b190eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZmllbGQnPnY0bDJfZmllbGQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1pdmFsdHlwZXMnPnY0bDJfZnJtaXZhbHR5cGVzPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZXR5cGVzJz52NGwyX2ZybXNpemV0eXBlczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1lbW9yeSc+djRsMl9tZW1vcnk8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWFjMy1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWNyYyc+djRsMl9tcGVnX2F1ZGlvX2NyYzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tZW1waGFzaXMnPnY0bDJfbXBlZ19hdWRpb19lbXBoYXNpczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmcnPnY0bDJfbXBlZ19hdWRpb19lbmNvZGluZzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSc+djRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWwyLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1sMy1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fbDNfYml0cmF0ZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbW9kZSc+djRsMl9tcGVnX2F1ZGlvX21vZGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLW1vZGUtZXh0ZW5zaW9uJz52NGwyX21wZWdfYXVkaW9fbW9kZV9leHRlbnNpb248L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLXNhbXBsaW5nLWZyZXEnPnY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J2Nocm9tYS1zcGF0aWFsLWZpbHRlci10eXBlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSdsdW1hLXNwYXRpYWwtZmlsdGVyLXR5cGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctY3gyMzQxeC12aWRlby1zcGF0aWFsLWZpbHRlci1tb2RlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXRlbXBvcmFsLWZpbHRlci1tb2RlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctc3RyZWFtLXR5cGUnPnY0bDJfbXBlZ19zdHJlYW1fdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQnPnY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmlkZW8tYXNwZWN0Jz52NGwyX21wZWdfdmlkZW9fYXNwZWN0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy12aWRlby1iaXRyYXRlLW1vZGUnPnY0bDJfbXBlZ192aWRlb19iaXRyYXRlX21vZGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nJz52NGwyX21wZWdfdmlkZW9fZW5jb2Rpbmc8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1wb3dlci1saW5lLWZyZXF1ZW5jeSc+djRsMl9wb3dlcl9saW5lX2ZyZXF1ZW5jeTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXByaW9yaXR5Jz52NGwyX3ByaW9yaXR5PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdHVuZXItdHlwZSc+djRsMl90dW5lcl90eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcHJlZW1waGFzaXMnPnY0bDJfcHJlZW1waGFzaXM8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWF1ZGlvJz52NGwyX2F1ZGlvPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1hdWRpb291dCc+djRsMl9hdWRpb291dDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYnVmZmVyJz52NGwyX2J1ZmZlcjwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwYWJpbGl0eSc+djRsMl9jYXBhYmlsaXR5PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jYXB0dXJlcGFybSc+djRsMl9jYXB0dXJlcGFybTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2xpcCc+djRsMl9jbGlwPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jb250cm9sJz52NGwyX2NvbnRyb2w8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNyb3AnPnY0bDJfY3JvcDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY3JvcGNhcCc+djRsMl9jcm9wY2FwPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kYmctY2hpcC1pZGVudCc+djRsMl9kYmdfY2hpcF9pZGVudDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLW1hdGNoJz52NGwyX2RiZ19tYXRjaDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLXJlZ2lzdGVyJz52NGwyX2RiZ19yZWdpc3RlcjwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jLWlkeCc+djRsMl9lbmNfaWR4PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4LWVudHJ5Jz52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWVuY29kZXItY21kJz52NGwyX2VuY29kZXJfY21kPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1leHQtY29udHJvbCc+djRsMl9leHRfY29udHJvbDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXh0LWNvbnRyb2xzJz52NGwyX2V4dF9jb250cm9sczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZm10ZGVzYyc+djRsMl9mbXRkZXNjPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mb3JtYXQnPnY0bDJfZm9ybWF0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcmFjdCc+djRsMl9mcmFjdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhbWVidWZmZXInPnY0bDJfZnJhbWVidWZmZXI8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZyZXF1ZW5jeSc+djRsMl9mcmVxdWVuY3k8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybWl2YWwtc3RlcHdpc2UnPnY0bDJfZnJtaXZhbF9zdGVwd2lzZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtaXZhbGVudW0nPnY0bDJfZnJtaXZhbGVudW08L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybXNpemUtZGlzY3JldGUnPnY0bDJfZnJtc2l6ZV9kaXNjcmV0ZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZS1zdGVwd2lzZSc+djRsMl9mcm1zaXplX3N0ZXB3aXNlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplZW51bSc+djRsMl9mcm1zaXplZW51bTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItaHctZnJlcS1zZWVrJz52NGwyX2h3X2ZyZXFfc2VlazwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItaW5wdXQnPnY0bDJfaW5wdXQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWpwZWdjb21wcmVzc2lvbic+djRsMl9qcGVnY29tcHJlc3Npb248L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1vZHVsYXRvcic+djRsMl9tb2R1bGF0b3I8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmJpLWZtdC1pdnR2Jz52NGwyX21wZWdfdmJpX2ZtdF9pdnR2PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1vdXRwdXQnPnY0bDJfb3V0cHV0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1vdXRwdXRwYXJtJz52NGwyX291dHB1dHBhcm08L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXBpeC1mb3JtYXQnPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcXVlcnljdHJsJz52NGwyX3F1ZXJ5Y3RybDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcXVlcnltZW51Jz52NGwyX3F1ZXJ5bWVudTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcmVjdCc+djRsMl9yZWN0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1yZXF1ZXN0YnVmZmVycyc+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1jYXAnPnY0bDJfc2xpY2VkX3ZiaV9jYXA8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktZGF0YSc+djRsMl9zbGljZWRfdmJpX2RhdGE8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktZm9ybWF0Jz52NGwyX3NsaWNlZF92YmlfZm9ybWF0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdGFuZGFyZCc+djRsMl9zdGFuZGFyZDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RyZWFtcGFybSc+djRsMl9zdHJlYW1wYXJtPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi10aW1lY29kZSc+djRsMl90aW1lY29kZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdHVuZXInPnY0bDJfdHVuZXI8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgorPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXZiaS1mb3JtYXQnPnY0bDJfdmJpX2Zvcm1hdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItd2luZG93Jz52NGwyX3dpbmRvdzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8L2luZGV4PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWE1NjRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLnRtcGwKQEAgLTAsMCArMSwxMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbCis8IUVOVElUWSAlIG1lZGlhLWVudGl0aWVzIFNZU1RFTSAiLi9tZWRpYS1lbnRpdGllcy50bXBsIj4gJW1lZGlhLWVudGl0aWVzOworPCFFTlRJVFkgbWVkaWEtaW5kaWNlcyBTWVNURU0gIi4vbWVkaWEtaW5kaWNlcy50bXBsIj4KKworPCFFTlRJVFkgZWcgICAgICAgICAgICAgICAgICAgICAiZS4mbmJzcDtnLiI+Cis8IUVOVElUWSBpZSAgICAgICAgICAgICAgICAgICAgICJpLiZuYnNwO2UuIj4KKzwhRU5USVRZIGZkICAgICAgICAgICAgICAgICAgICAgIkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSA8bGluayBsaW5rZW5kPSdmdW5jLW9wZW4nPjxmdW5jdGlvbj5vcGVuKCk8L2Z1bmN0aW9uPjwvbGluaz4uIj4KKzwhRU5USVRZIGkyYyAgICAgICAgICAgICAgICAgICAgIkk8c3VwZXJzY3JpcHQ+Mjwvc3VwZXJzY3JpcHQ+QyI+Cis8IUVOVElUWSByZXR1cm4tdmFsdWUJCSI8dGl0bGU+UmV0dXJuIFZhbHVlPC90aXRsZT48cGFyYT5PbiBzdWNjZXNzIDxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4gaXMgcmV0dXJuZWQsIG9uIGVycm9yIDxyZXR1cm52YWx1ZT4tMTwvcmV0dXJudmFsdWU+IGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5OjwvcGFyYT4iPgorPCFFTlRJVFkgbWFudm9sICAgICAgICAgICAgICAgICAiPG1hbnZvbG51bT4yPC9tYW52b2xudW0+Ij4KKworPCEtLSBUYWJsZSB0ZW1wbGF0ZXM6IHN0cnVjdHMsIHN0cnVjdHMgdy91bmlvbiwgZGVmaW5lcy4gLS0+Cis8IUVOVElUWSBjcy1zdHIgICAgICAgICAgICAgICAgICI8Y29sc3BlYyBjb2xuYW1lPSdjMScgY29sd2lkdGg9JzEqJyAvPjxjb2xzcGVjIGNvbG5hbWU9J2MyJyBjb2x3aWR0aD0nMSonIC8+PGNvbHNwZWMgY29sbmFtZT0nYzMnIGNvbHdpZHRoPScyKicgLz48c3BhbnNwZWMgc3Bhbm5hbWU9J2hzcGFuJyBuYW1lc3Q9J2MxJyBuYW1lZW5kPSdjMycgLz4iPgorPCFFTlRJVFkgY3MtdXN0ciAgICAgICAgICAgICAgICAiPGNvbHNwZWMgY29sbmFtZT0nYzEnIGNvbHdpZHRoPScxKicgLz48Y29sc3BlYyBjb2xuYW1lPSdjMicgY29sd2lkdGg9JzEqJyAvPjxjb2xzcGVjIGNvbG5hbWU9J2MzJyBjb2x3aWR0aD0nMSonIC8+PGNvbHNwZWMgY29sbmFtZT0nYzQnIGNvbHdpZHRoPScyKicgLz48c3BhbnNwZWMgc3Bhbm5hbWU9J2hzcGFuJyBuYW1lc3Q9J2MxJyBuYW1lZW5kPSdjNCcgLz4iPgorPCFFTlRJVFkgY3MtZGVmICAgICAgICAgICAgICAgICAiPGNvbHNwZWMgY29sbmFtZT0nYzEnIGNvbHdpZHRoPSczKicgLz48Y29sc3BlYyBjb2xuYW1lPSdjMicgY29sd2lkdGg9JzEqJyAvPjxjb2xzcGVjIGNvbG5hbWU9J2MzJyBjb2x3aWR0aD0nNConIC8+PHNwYW5zcGVjIHNwYW5uYW1lPSdoc3BhbicgbmFtZXN0PSdjMScgbmFtZWVuZD0nYzMnIC8+Ij4KKworPCEtLSBWaWRlbyBmb3IgTGludXggbWFpbGluZyBsaXN0IGFkZHJlc3MuIC0tPgorPCFFTlRJVFkgdjRsLW1sICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cDovL3d3dy5saW51eHR2Lm9yZy9saXN0cy5waHAnPmh0dHA6Ly93d3cubGludXh0di5vcmcvbGlzdHMucGhwPC91bGluaz4iPgorCis8IS0tIExpbnV4VFYgdjRsLWR2YiByZXBvc2l0b3J5LiAtLT4KKzwhRU5USVRZIHY0bC1kdmIJCSI8dWxpbmsgdXJsPSdodHRwOi8vbGludXh0di5vcmcvcmVwby8nPmh0dHA6Ly9saW51eHR2Lm9yZy9yZXBvLzwvdWxpbms+Ij4KK10+CisKKzxib29rIGlkPSJtZWRpYV9hcGkiPgorPGJvb2tpbmZvPgorPHRpdGxlPkxJTlVYIE1FRElBIElORlJBU1RSVUNUVVJFIEFQSTwvdGl0bGU+CisKKzxjb3B5cmlnaHQ+CisJPHllYXI+MjAwOTwveWVhcj4KKwk8aG9sZGVyPkxpbnV4VFYgRGV2ZWxvcGVyczwvaG9sZGVyPgorPC9jb3B5cmlnaHQ+CisKKzxsZWdhbG5vdGljZT4KKworPHBhcmE+UGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeQordGhpcyBkb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwKK1ZlcnNpb24gMS4xIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBjaGFwdGVyIGVudGl0bGVkCisiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIjwvcGFyYT4KKzwvbGVnYWxub3RpY2U+CisKKzwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+IDwhLS0gYXV0b2dlbmVyYXRlZCAtLT4KKworPHByZWZhY2U+CisJPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5UaGlzIGRvY3VtZW50IGNvdmVycyB0aGUgTGludXggS2VybmVsIHRvIFVzZXJzcGFjZSBBUEkncyB1c2VkIGJ5CisJCXZpZGVvIGFuZCByYWRpbyBzdHJhbWluZyBkZXZpY2VzLCBpbmNsdWRpbmcgdmlkZW8gY2FtZXJhcywKKwkJYW5hbG9nIGFuZCBkaWdpdGFsIFRWIHJlY2VpdmVyIGNhcmRzLCBBTS9GTSByZWNlaXZlciBjYXJkcywKKwkJc3RyZWFtaW5nIGNhcHR1cmUgZGV2aWNlcy48L3BhcmE+CisJPHBhcmE+SXQgaXMgZGl2aWRlZCBpbnRvIHRocmVlIHBhcnRzLjwvcGFyYT4KKwk8cGFyYT5UaGUgZmlyc3QgcGFydCBjb3ZlcnMgcmFkaW8sIGNhcHR1cmUsCisJCWNhbWVyYXMgYW5kIGFuYWxvZyBUViBkZXZpY2VzLjwvcGFyYT4KKwk8cGFyYT5UaGUgc2Vjb25kIHBhcnQgY292ZXJzIHRoZQorCQlBUEkgdXNlZCBmb3IgZGlnaXRhbCBUViBhbmQgSW50ZXJuZXQgcmVjZXB0aW9uIHZpYSBvbmUgb2YgdGhlCisJCXNldmVyYWwgZGlnaXRhbCB0diBzdGFuZGFyZHMuIFdoaWxlIGl0IGlzIGNhbGxlZCBhcyBEVkIgQVBJLAorCQlpbiBmYWN0IGl0IGNvdmVycyBzZXZlcmFsIGRpZmZlcmVudCB2aWRlbyBzdGFuZGFyZHMgaW5jbHVkaW5nCisJCURWQi1ULCBEVkItUywgRFZCLUMgYW5kIEFUU0MuIFRoZSBBUEkgaXMgY3VycmVudGx5IGJlaW5nIHVwZGF0ZWQKKwkJdG8gZG9jdW1tZW50IHN1cHBvcnQgYWxzbyBmb3IgRFZCLVMyLCBJU0RCLVQgYW5kIElTREItUy48L3BhcmE+CisJPHBhcmE+VGhlIHRoaXJkIHBhcnQgY292ZXJzIG90aGVyIEFQSSdzIHVzZWQgYnkgYWxsIG1lZGlhIGluZnJhc3RydWN0dXJlIGRldmljZXM8L3BhcmE+CisJPHBhcmE+Rm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIGZvciB0aGUgbGF0ZXN0IGRldmVsb3BtZW50IGNvZGUsCisJCXNlZTogPHVsaW5rIHVybD0iaHR0cDovL2xpbnV4dHYub3JnIj5odHRwOi8vbGludXh0di5vcmc8L3VsaW5rPi48L3BhcmE+CisJPHBhcmE+Rm9yIGRpc2N1c3NpbmcgaW1wcm92ZW1lbnRzLCByZXBvcnRpbmcgdHJvdWJsZXMsIHNlbmRpbmcgbmV3IGRyaXZlcnMsIGV0YywgcGxlYXNlIG1haWwgdG86IDx1bGluayB1cmw9Imh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sI2xpbnV4LW1lZGlhIj5MaW51eCBNZWRpYSBNYWlsaW5nIExpc3QgKExNTUwpLjwvdWxpbms+LjwvcGFyYT4KKworPC9wcmVmYWNlPgorCis8cGFydCBpZD0idjRsMnNwZWMiPgorJnN1Yi12NGwyOworPC9wYXJ0PgorPHBhcnQgaWQ9ImR2YmFwaSI+Cismc3ViLWR2YmFwaTsKKzwvcGFydD4KKzxwYXJ0IGlkPSJ2NGxkdmJfY29tbW9uIj4KKzxwYXJ0aW5mbz4KKzxhdXRob3Jncm91cD4KKzxhdXRob3I+Cis8Zmlyc3RuYW1lPk1hdXJvPC9maXJzdG5hbWU+Cis8c3VybmFtZT5DaGVoYWI8L3N1cm5hbWU+Cis8b3RoZXJuYW1lIHJvbGU9Im1pIj5DYXJ2YWxobzwvb3RoZXJuYW1lPgorPGFmZmlsaWF0aW9uPjxhZGRyZXNzPjxlbWFpbD5tY2hlaGFiQHJlZGhhdC5jb208L2VtYWlsPjwvYWRkcmVzcz48L2FmZmlsaWF0aW9uPgorPGNvbnRyaWI+SW5pdGlhbCB2ZXJzaW9uLjwvY29udHJpYj4KKzwvYXV0aG9yPgorPC9hdXRob3Jncm91cD4KKzxjb3B5cmlnaHQ+CisJPHllYXI+MjAwOTwveWVhcj4KKwk8aG9sZGVyPk1hdXJvIENhcnZhbGhvIENoZWhhYjwvaG9sZGVyPgorPC9jb3B5cmlnaHQ+CisKKzxyZXZoaXN0b3J5PgorPCEtLSBQdXQgZG9jdW1lbnQgcmV2aXNpb25zIGhlcmUsIG5ld2VzdCBmaXJzdC4gLS0+Cis8cmV2aXNpb24+Cis8cmV2bnVtYmVyPjEuMC4wPC9yZXZudW1iZXI+Cis8ZGF0ZT4yMDA5LTA5LTA2PC9kYXRlPgorPGF1dGhvcmluaXRpYWxzPm1jYzwvYXV0aG9yaW5pdGlhbHM+Cis8cmV2cmVtYXJrPkluaXRpYWwgcmV2aXNpb248L3JldnJlbWFyaz4KKzwvcmV2aXNpb24+Cis8L3Jldmhpc3Rvcnk+Cis8L3BhcnRpbmZvPgorCis8dGl0bGU+T3RoZXIgQVBJJ3MgdXNlZCBieSBtZWRpYSBpbmZyYXN0cnVjdHVyZSBkcml2ZXJzPC90aXRsZT4KKzxjaGFwdGVyIGlkPSJyZW1vdGVfY29udHJvbGxlcnMiPgorJnN1Yi1yZW1vdGVfY29udHJvbGxlcnM7Cis8L2NoYXB0ZXI+Cis8L3BhcnQ+CisKKyZzdWItZmRsLWFwcGVuZGl4OworCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbAppbmRleCA4ZTE0NTg1Li5kZjBkMDg5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKQEAgLTU2OCw3ICs1NjgsNyBAQAogCQkJPHBhcmE+CiAJCQkJVGhlIGJsb2NrcyBpbiB3aGljaCB0aGUgdGFibGVzIGFyZSBzdG9yZWQgYXJlIHByb2N0ZXRlZCBhZ2FpbnN0CiAJCQkJYWNjaWRlbnRhbCBhY2Nlc3MgYnkgbWFya2luZyB0aGVtIGJhZCBpbiB0aGUgbWVtb3J5IGJhZCBibG9jawotCQkJCXRhYmxlLiBUaGUgYmFkIGJsb2NrIHRhYmxlIG1hbmFnbWVudCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQKKwkJCQl0YWJsZS4gVGhlIGJhZCBibG9jayB0YWJsZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhcmUgYWxsb3dlZAogCQkJCXRvIGNpcmN1bXZlcm50IHRoaXMgcHJvdGVjdGlvbi4KIAkJCTwvcGFyYT4KIAkJCTxwYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2kudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zY3NpLnRtcGwKaW5kZXggMTBhMTUwYS4uZDg3ZjQ1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2kudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc2NzaS50bXBsCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgVGhlIFNBUyB0cmFuc3BvcnQgY2xhc3MgY29udGFpbnMgY29tbW9uIGNvZGUgdG8gZGVhbCB3aXRoIFNBUyBIQkFzLAogICAgICAgICAgIGFuIGFwcm94aW1hdGVkIHJlcHJlc2VudGF0aW9uIG9mIFNBUyB0b3BvbG9naWVzIGluIHRoZSBkcml2ZXIgbW9kZWwsCi0gICAgICAgICAgYW5kIHZhcmlvdXMgc3lzZnMgYXR0cmlidXRlcyB0byBleHBvc2UgdGhlc2UgdG9wb2xvZ2llcyBhbmQgbWFuYWdtZW50CisgICAgICAgICAgYW5kIHZhcmlvdXMgc3lzZnMgYXR0cmlidXRlcyB0byBleHBvc2UgdGhlc2UgdG9wb2xvZ2llcyBhbmQgbWFuYWdlbWVudAogICAgICAgICAgIGludGVyZmFjZXMgdG8gdXNlcnNwYWNlLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3N0eWxlc2hlZXQueHNsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3N0eWxlc2hlZXQueHNsCmluZGV4IDk3NGUxN2MuLjI1NGMxZDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc3R5bGVzaGVldC54c2wKQEAgLTMsNiArMyw3IEBACiA8cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSI+MTwvcGFyYW0+CiA8cGFyYW0gbmFtZT0iZnVuY3N5bm9wc2lzLnN0eWxlIj5hbnNpPC9wYXJhbT4KIDxwYXJhbSBuYW1lPSJmdW5jc3lub3BzaXMudGFidWxhci50aHJlc2hvbGQiPjgwPC9wYXJhbT4KKzxwYXJhbSBuYW1lPSJjYWxsb3V0LmdyYXBoaWNzIj4wPC9wYXJhbT4KIDwhLS0gPHBhcmFtIG5hbWU9InBhcGVyLnR5cGUiPkE0PC9wYXJhbT4gLS0+CiA8cGFyYW0gbmFtZT0iZ2VuZXJhdGUuc2VjdGlvbi50b2MubGV2ZWwiPjI8L3BhcmFtPgogPC9zdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWMzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorISoueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2JpYmxpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2JpYmxpby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjOGEwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvYmlibGlvLnhtbApAQCAtMCwwICsxLDE4OCBAQAorICA8YmlibGlvZ3JhcGh5PgorICAgIDx0aXRsZT5SZWZlcmVuY2VzPC90aXRsZT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0iZWlhNjA4Ij4KKyAgICAgIDxhYmJyZXY+RUlBJm5ic3A7NjA4LUI8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5FbGVjdHJvbmljIEluZHVzdHJpZXMgQWxsaWFuY2UgKDx1bGluawordXJsPSJodHRwOi8vd3d3LmVpYS5vcmciPmh0dHA6Ly93d3cuZWlhLm9yZzwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+RUlBIDYwOC1CICJSZWNvbW1lbmRlZCBQcmFjdGljZSBmb3IgTGluZSAyMSBEYXRhCitTZXJ2aWNlIjwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0iZW4zMDAyOTQiPgorICAgICAgPGFiYnJldj5FTiZuYnNwOzMwMCZuYnNwOzI5NDwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkV1cm9wZWFuIFRlbGVjb21tdW5pY2F0aW9uIFN0YW5kYXJkcyBJbnN0aXR1dGUKKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIj5odHRwOi8vd3d3LmV0c2kub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5FTiAzMDAgMjk0ICI2MjUtbGluZSB0ZWxldmlzaW9uIFdpZGUgU2NyZWVuIFNpZ25hbGxpbmcKKyhXU1MpIjwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0iZXRzMzAwMjMxIj4KKyAgICAgIDxhYmJyZXY+RVRTJm5ic3A7MzAwJm5ic3A7MjMxPC9hYmJyZXY+CisgICAgICA8YXV0aG9yZ3JvdXA+CisJPGNvcnBhdXRob3I+RXVyb3BlYW4gVGVsZWNvbW11bmljYXRpb24gU3RhbmRhcmRzIEluc3RpdHV0ZQorKDx1bGluawordXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIj5odHRwOi8vd3d3LmV0c2kub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5FVFMgMzAwIDIzMSAiU3BlY2lmaWNhdGlvbiBvZiB0aGUgZG9tZXN0aWMgdmlkZW8KK1Byb2dyYW1tZSBEZWxpdmVyeSBDb250cm9sIHN5c3RlbSAoUERDKSI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9ImV0czMwMDcwNiI+CisgICAgICA8YWJicmV2PkVUUyZuYnNwOzMwMCZuYnNwOzcwNjwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkV1cm9wZWFuIFRlbGVjb21tdW5pY2F0aW9uIFN0YW5kYXJkcyBJbnN0aXR1dGUKKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmV0c2kub3JnIj5odHRwOi8vd3d3LmV0c2kub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5FVFMgMzAwIDcwNiAiRW5oYW5jZWQgVGVsZXRleHQgc3BlY2lmaWNhdGlvbiI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Im1wZWcycGFydDEiPgorICAgICAgPGFiYnJldj5JU08mbmJzcDsxMzgxOC0xPC9hYmJyZXY+CisgICAgICA8YXV0aG9yZ3JvdXA+CisJPGNvcnBhdXRob3I+SW50ZXJuYXRpb25hbCBUZWxlY29tbXVuaWNhdGlvbiBVbmlvbiAoPHVsaW5rCit1cmw9Imh0dHA6Ly93d3cuaXR1LmNoIj5odHRwOi8vd3d3Lml0dS5jaDwvdWxpbms+KSwgSW50ZXJuYXRpb25hbAorT3JnYW5pc2F0aW9uIGZvciBTdGFuZGFyZGlzYXRpb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lmlzby5jaCI+aHR0cDovL3d3dy5pc28uY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1UIFJlYy4gSC4yMjIuMCB8IElTTy9JRUMgMTM4MTgtMSAiSW5mb3JtYXRpb24KK3RlY2hub2xvZ3kgJm1kYXNoOyBHZW5lcmljIGNvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQKK2F1ZGlvIGluZm9ybWF0aW9uOiBTeXN0ZW1zIjwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0ibXBlZzJwYXJ0MiI+CisgICAgICA8YWJicmV2PklTTyZuYnNwOzEzODE4LTI8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5JbnRlcm5hdGlvbmFsIFRlbGVjb21tdW5pY2F0aW9uIFVuaW9uICg8dWxpbmsKK3VybD0iaHR0cDovL3d3dy5pdHUuY2giPmh0dHA6Ly93d3cuaXR1LmNoPC91bGluaz4pLCBJbnRlcm5hdGlvbmFsCitPcmdhbmlzYXRpb24gZm9yIFN0YW5kYXJkaXNhdGlvbiAoPHVsaW5rCit1cmw9Imh0dHA6Ly93d3cuaXNvLmNoIj5odHRwOi8vd3d3Lmlzby5jaDwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+SVRVLVQgUmVjLiBILjI2MiB8IElTTy9JRUMgMTM4MTgtMiAiSW5mb3JtYXRpb24KK3RlY2hub2xvZ3kgJm1kYXNoOyBHZW5lcmljIGNvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQKK2F1ZGlvIGluZm9ybWF0aW9uOiBWaWRlbyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Iml0dTQ3MCI+CisgICAgICA8YWJicmV2PklUVSZuYnNwO0JULjQ3MDwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjQ3MC02ICJDb252ZW50aW9uYWwgVGVsZXZpc2lvbgorU3lzdGVtcyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Iml0dTYwMSI+CisgICAgICA8YWJicmV2PklUVSZuYnNwO0JULjYwMTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjYwMS01ICJTdHVkaW8gRW5jb2RpbmcgUGFyYW1ldGVycworb2YgRGlnaXRhbCBUZWxldmlzaW9uIGZvciBTdGFuZGFyZCA0OjMgYW5kIFdpZGUtU2NyZWVuIDE2OjkgQXNwZWN0CitSYXRpb3MiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJpdHU2NTMiPgorICAgICAgPGFiYnJldj5JVFUmbmJzcDtCVC42NTM8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5JbnRlcm5hdGlvbmFsIFRlbGVjb21tdW5pY2F0aW9uIFVuaW9uICg8dWxpbmsKK3VybD0iaHR0cDovL3d3dy5pdHUuY2giPmh0dHA6Ly93d3cuaXR1LmNoPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5JVFUtUiBSZWNvbW1lbmRhdGlvbiBCVC42NTMtMyAiVGVsZXRleHQgc3lzdGVtcyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9Iml0dTcwOSI+CisgICAgICA8YWJicmV2PklUVSZuYnNwO0JULjcwOTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjcwOS01ICJQYXJhbWV0ZXIgdmFsdWVzIGZvciB0aGUKK0hEVFYgc3RhbmRhcmRzIGZvciBwcm9kdWN0aW9uIGFuZCBpbnRlcm5hdGlvbmFsIHByb2dyYW1tZQorZXhjaGFuZ2UiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJpdHUxMTE5Ij4KKyAgICAgIDxhYmJyZXY+SVRVJm5ic3A7QlQuMTExOTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkludGVybmF0aW9uYWwgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKDx1bGluawordXJsPSJodHRwOi8vd3d3Lml0dS5jaCI+aHR0cDovL3d3dy5pdHUuY2g8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPklUVS1SIFJlY29tbWVuZGF0aW9uIEJULjExMTkgIjYyNS1saW5lCit0ZWxldmlzaW9uIFdpZGUgU2NyZWVuIFNpZ25hbGxpbmcgKFdTUykiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJqZmlmIj4KKyAgICAgIDxhYmJyZXY+SkZJRjwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkluZGVwZW5kZW50IEpQRUcgR3JvdXAgKDx1bGluawordXJsPSJodHRwOi8vd3d3LmlqZy5vcmciPmh0dHA6Ly93d3cuaWpnLm9yZzwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+SlBFRyBGaWxlIEludGVyY2hhbmdlIEZvcm1hdDwvdGl0bGU+CisgICAgICA8c3VidGl0bGU+VmVyc2lvbiAxLjAyPC9zdWJ0aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJzbXB0ZTEybSI+CisgICAgICA8YWJicmV2PlNNUFRFJm5ic3A7MTJNPC9hYmJyZXY+CisgICAgICA8YXV0aG9yZ3JvdXA+CisJPGNvcnBhdXRob3I+U29jaWV0eSBvZiBNb3Rpb24gUGljdHVyZSBhbmQgVGVsZXZpc2lvbiBFbmdpbmVlcnMKKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnNtcHRlLm9yZyI+aHR0cDovL3d3dy5zbXB0ZS5vcmc8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPlNNUFRFIDEyTS0xOTk5ICJUZWxldmlzaW9uLCBBdWRpbyBhbmQgRmlsbSAtIFRpbWUgYW5kCitDb250cm9sIENvZGUiPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJzbXB0ZTE3MG0iPgorICAgICAgPGFiYnJldj5TTVBURSZuYnNwOzE3ME08L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5Tb2NpZXR5IG9mIE1vdGlvbiBQaWN0dXJlIGFuZCBUZWxldmlzaW9uIEVuZ2luZWVycworKDx1bGluayB1cmw9Imh0dHA6Ly93d3cuc21wdGUub3JnIj5odHRwOi8vd3d3LnNtcHRlLm9yZzwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+U01QVEUgMTcwTS0xOTk5ICJUZWxldmlzaW9uIC0gQ29tcG9zaXRlIEFuYWxvZyBWaWRlbworU2lnbmFsIC0gTlRTQyBmb3IgU3R1ZGlvIEFwcGxpY2F0aW9ucyI8L3RpdGxlPgorICAgIDwvYmlibGlvZW50cnk+CisKKyAgICA8YmlibGlvZW50cnkgaWQ9InNtcHRlMjQwbSI+CisgICAgICA8YWJicmV2PlNNUFRFJm5ic3A7MjQwTTwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPlNvY2lldHkgb2YgTW90aW9uIFBpY3R1cmUgYW5kIFRlbGV2aXNpb24gRW5naW5lZXJzCisoPHVsaW5rIHVybD0iaHR0cDovL3d3dy5zbXB0ZS5vcmciPmh0dHA6Ly93d3cuc21wdGUub3JnPC91bGluaz4pPC9jb3JwYXV0aG9yPgorICAgICAgPC9hdXRob3Jncm91cD4KKyAgICAgIDx0aXRsZT5TTVBURSAyNDBNLTE5OTkgIlRlbGV2aXNpb24gLSBTaWduYWwgUGFyYW1ldGVycyAtCisxMTI1LUxpbmUgSGlnaC1EZWZpbml0aW9uIFByb2R1Y3Rpb24iPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgICAgPGJpYmxpb2VudHJ5IGlkPSJlbjUwMDY3Ij4KKyAgICAgIDxhYmJyZXY+RU4mbmJzcDs1MDA2NzwvYWJicmV2PgorICAgICAgPGF1dGhvcmdyb3VwPgorCTxjb3JwYXV0aG9yPkV1cm9wZWFuIENvbW1pdHRlZSBmb3IgRWxlY3Ryb3RlY2huaWNhbCBTdGFuZGFyZGl6YXRpb24KKyg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmNlbmVsZWMuZXUiPmh0dHA6Ly93d3cuY2VuZWxlYy5ldTwvdWxpbms+KTwvY29ycGF1dGhvcj4KKyAgICAgIDwvYXV0aG9yZ3JvdXA+CisgICAgICA8dGl0bGU+U3BlY2lmaWNhdGlvbiBvZiB0aGUgcmFkaW8gZGF0YSBzeXN0ZW0gKFJEUykgZm9yIFZIRi9GTSBzb3VuZCBicm9hZGNhc3RpbmcKK2luIHRoZSBmcmVxdWVuY3kgcmFuZ2UgZnJvbSA4Nyw1IHRvIDEwOCwwIE1IejwvdGl0bGU+CisgICAgPC9iaWJsaW9lbnRyeT4KKworICAgIDxiaWJsaW9lbnRyeSBpZD0ibnJzYzQiPgorICAgICAgPGFiYnJldj5OUlNDLTQ8L2FiYnJldj4KKyAgICAgIDxhdXRob3Jncm91cD4KKwk8Y29ycGF1dGhvcj5OYXRpb25hbCBSYWRpbyBTeXN0ZW1zIENvbW1pdHRlZQorKDx1bGluayB1cmw9Imh0dHA6Ly93d3cubnJzY3N0YW5kYXJkcy5vcmciPmh0dHA6Ly93d3cubnJzY3N0YW5kYXJkcy5vcmc8L3VsaW5rPik8L2NvcnBhdXRob3I+CisgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPHRpdGxlPk5UU0MtNDogVW5pdGVkIFN0YXRlcyBSQkRTIFN0YW5kYXJkPC90aXRsZT4KKyAgICA8L2JpYmxpb2VudHJ5PgorCisgIDwvYmlibGlvZ3JhcGh5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jYXB0dXJlLmMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jYXB0dXJlLmMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWM0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NhcHR1cmUuYy54bWwKQEAgLTAsMCArMSw2NTkgQEAKKzxwcm9ncmFtbGlzdGluZz4KKy8qCisgKiAgVjRMMiB2aWRlbyBjYXB0dXJlIGV4YW1wbGUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGNhbiBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9ucy4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBwcm92aWRlZCB3aXRoIHRoZSBWNEwyIEFQSQorICogc2VlIGh0dHA6Ly9saW51eHR2Lm9yZy9kb2NzLnBocCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCisKKyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OworCisjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7ICAgICAgICAgICAgIC8qIGdldG9wdF9sb25nKCkgKi8KKworI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7ICAgICAgICAgICAgICAvKiBsb3ctbGV2ZWwgaS9vICovCisjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy90aW1lLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKKworI2luY2x1ZGUgJmx0O2xpbnV4L3ZpZGVvZGV2Mi5oJmd0OworCisjZGVmaW5lIENMRUFSKHgpIG1lbXNldCgmYW1wOyh4KSwgMCwgc2l6ZW9mKHgpKQorCitlbnVtIGlvX21ldGhvZCB7CisgICAgICAgIElPX01FVEhPRF9SRUFELAorICAgICAgICBJT19NRVRIT0RfTU1BUCwKKyAgICAgICAgSU9fTUVUSE9EX1VTRVJQVFIsCit9OworCitzdHJ1Y3QgYnVmZmVyIHsKKyAgICAgICAgdm9pZCAgICpzdGFydDsKKyAgICAgICAgc2l6ZV90ICBsZW5ndGg7Cit9OworCitzdGF0aWMgY2hhciAgICAgICAgICAgICpkZXZfbmFtZTsKK3N0YXRpYyBlbnVtIGlvX21ldGhvZCAgIGlvID0gSU9fTUVUSE9EX01NQVA7CitzdGF0aWMgaW50ICAgICAgICAgICAgICBmZCA9IC0xOworc3RydWN0IGJ1ZmZlciAgICAgICAgICAqYnVmZmVyczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgICAgIG5fYnVmZmVyczsKK3N0YXRpYyBpbnQgICAgICAgICAgICAgIG91dF9idWY7CitzdGF0aWMgaW50ICAgICAgICAgICAgICBmb3JjZV9mb3JtYXQ7CitzdGF0aWMgaW50ICAgICAgICAgICAgICBmcmFtZV9jb3VudCA9IDcwOworCitzdGF0aWMgdm9pZCBlcnJub19leGl0KGNvbnN0IGNoYXIgKnMpCit7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZXJyb3IgJWQsICVzXG4iLCBzLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgaW50IHhpb2N0bChpbnQgZmgsIGludCByZXF1ZXN0LCB2b2lkICphcmcpCit7CisgICAgICAgIGludCByOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByID0gaW9jdGwoZmgsIHJlcXVlc3QsIGFyZyk7CisgICAgICAgIH0gd2hpbGUgKC0xID09IHIgJmFtcDsmYW1wOyBFSU5UUiA9PSBlcnJubyk7CisKKyAgICAgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfaW1hZ2UoY29uc3Qgdm9pZCAqcCwgaW50IHNpemUpCit7CisgICAgICAgIGlmIChvdXRfYnVmKQorICAgICAgICAgICAgICAgIGZ3cml0ZShwLCBzaXplLCAxLCBzdGRvdXQpOworCisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9mcmFtZSh2b2lkKQoreworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1idWZmZXIiPnY0bDJfYnVmZmVyPC9saW5rPiBidWY7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgIHN3aXRjaCAoaW8pIHsKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfUkVBRDoKKyAgICAgICAgICAgICAgICBpZiAoLTEgPT0gcmVhZChmZCwgYnVmZmVyc1swXS5zdGFydCwgYnVmZmVyc1swXS5sZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVBR0FJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUlPOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VsZCBpZ25vcmUgRUlPLCBzZWUgc3BlYy4gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgicmVhZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHByb2Nlc3NfaW1hZ2UoYnVmZmVyc1swXS5zdGFydCwgYnVmZmVyc1swXS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSU9fTUVUSE9EX01NQVA6CisgICAgICAgICAgICAgICAgQ0xFQVIoYnVmKTsKKworICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX0RRQlVGLCAmYW1wO2J1ZikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUFHQUlOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFSU86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkIGlnbm9yZSBFSU8sIHNlZSBzcGVjLiAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfRFFCVUYiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhc3NlcnQoYnVmLmluZGV4ICZsdDsgbl9idWZmZXJzKTsKKworICAgICAgICAgICAgICAgIHByb2Nlc3NfaW1hZ2UoYnVmZmVyc1tidWYuaW5kZXhdLnN0YXJ0LCBidWYuYnl0ZXN1c2VkKTsKKworICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfUUJVRiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1VTRVJQVFI6CisgICAgICAgICAgICAgICAgQ0xFQVIoYnVmKTsKKworICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOworCisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX0RRQlVGLCAmYW1wO2J1ZikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUFHQUlOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFSU86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkIGlnbm9yZSBFSU8sIHNlZSBzcGVjLiAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfRFFCVUYiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgbl9idWZmZXJzOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmLm0udXNlcnB0ciA9PSAodW5zaWduZWQgbG9uZylidWZmZXJzW2ldLnN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFtcDsmYW1wOyBidWYubGVuZ3RoID09IGJ1ZmZlcnNbaV0ubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGFzc2VydChpICZsdDsgbl9idWZmZXJzKTsKKworICAgICAgICAgICAgICAgIHByb2Nlc3NfaW1hZ2UoKHZvaWQgKilidWYubS51c2VycHRyLCBidWYuYnl0ZXN1c2VkKTsKKworICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfUUJVRiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG1haW5sb29wKHZvaWQpCit7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3VudDsKKworICAgICAgICBjb3VudCA9IGZyYW1lX2NvdW50OworCisgICAgICAgIHdoaWxlIChjb3VudC0tICZndDsgMCkgeworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCBmZHM7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByOworCisgICAgICAgICAgICAgICAgICAgICAgICBGRF9aRVJPKCZhbXA7ZmRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZEX1NFVChmZCwgJmFtcDtmZHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdHYudHZfc2VjID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR2LnR2X3VzZWMgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICByID0gc2VsZWN0KGZkICsgMSwgJmFtcDtmZHMsIE5VTEwsIE5VTEwsICZhbXA7dHYpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgPT0gcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRUlOVFIgPT0gZXJybm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoInNlbGVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSByKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2VsZWN0IHRpbWVvdXRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2ZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgLyogRUFHQUlOIC0gY29udGludWUgc2VsZWN0IGxvb3AuICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BfY2FwdHVyaW5nKHZvaWQpCit7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkby4gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9NTUFQOgorICAgICAgICBjYXNlIElPX01FVEhPRF9VU0VSUFRSOgorICAgICAgICAgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9GRiwgJmFtcDt0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19TVFJFQU1PRkYiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9jYXB0dXJpbmcodm9pZCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkby4gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9NTUFQOgorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBuX2J1ZmZlcnM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4gYnVmOworCisgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUihidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5pbmRleCA9IGk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19RQlVGIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9OLCAmYW1wO3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1NUUkVBTU9OIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfVVNFUlBUUjoKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgbl9idWZmZXJzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+IGJ1ZjsKKworICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQVIoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX1VTRVJQVFI7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYuaW5kZXggPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmLm0udXNlcnB0ciA9ICh1bnNpZ25lZCBsb25nKWJ1ZmZlcnNbaV0uc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYubGVuZ3RoID0gYnVmZmVyc1tpXS5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RQlVGLCAmYW1wO2J1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19RQlVGIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9OLCAmYW1wO3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1NUUkVBTU9OIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdW5pbml0X2RldmljZSh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgZnJlZShidWZmZXJzWzBdLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9NTUFQOgorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBuX2J1ZmZlcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSBtdW5tYXAoYnVmZmVyc1tpXS5zdGFydCwgYnVmZmVyc1tpXS5sZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJtdW5tYXAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9VU0VSUFRSOgorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBuX2J1ZmZlcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoYnVmZmVyc1tpXS5zdGFydCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKGJ1ZmZlcnMpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3JlYWQodW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplKQoreworICAgICAgICBidWZmZXJzID0gY2FsbG9jKDEsIHNpemVvZigqYnVmZmVycykpOworCisgICAgICAgIGlmICghYnVmZmVycykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyc1swXS5sZW5ndGggPSBidWZmZXJfc2l6ZTsKKyAgICAgICAgYnVmZmVyc1swXS5zdGFydCA9IG1hbGxvYyhidWZmZXJfc2l6ZSk7CisKKyAgICAgICAgaWYgKCFidWZmZXJzWzBdLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5pdF9tbWFwKHZvaWQpCit7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj52NGwyX3JlcXVlc3RidWZmZXJzPC9saW5rPiByZXE7CisKKyAgICAgICAgQ0xFQVIocmVxKTsKKworICAgICAgICByZXEuY291bnQgPSA0OworICAgICAgICByZXEudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKyAgICAgICAgcmVxLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisKKyAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX1JFUUJVRlMsICZhbXA7cmVxKSkgeworICAgICAgICAgICAgICAgIGlmIChFSU5WQUwgPT0gZXJybm8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3Qgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IG1hcHBpbmdcbiIsIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1JFUUJVRlMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVxLmNvdW50ICZsdDsgMikgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW5zdWZmaWNpZW50IGJ1ZmZlciBtZW1vcnkgb24gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZmZlcnMgPSBjYWxsb2MocmVxLmNvdW50LCBzaXplb2YoKmJ1ZmZlcnMpKTsKKworICAgICAgICBpZiAoIWJ1ZmZlcnMpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAobl9idWZmZXJzID0gMDsgbl9idWZmZXJzICZsdDsgcmVxLmNvdW50OyArK25fYnVmZmVycykgeworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+IGJ1ZjsKKworICAgICAgICAgICAgICAgIENMRUFSKGJ1Zik7CisKKyAgICAgICAgICAgICAgICBidWYudHlwZSAgICAgICAgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgYnVmLm1lbW9yeSAgICAgID0gVjRMMl9NRU1PUllfTU1BUDsKKyAgICAgICAgICAgICAgICBidWYuaW5kZXggICAgICAgPSBuX2J1ZmZlcnM7CisKKyAgICAgICAgICAgICAgICBpZiAoLTEgPT0geGlvY3RsKGZkLCBWSURJT0NfUVVFUllCVUYsICZhbXA7YnVmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQoIlZJRElPQ19RVUVSWUJVRiIpOworCisgICAgICAgICAgICAgICAgYnVmZmVyc1tuX2J1ZmZlcnNdLmxlbmd0aCA9IGJ1Zi5sZW5ndGg7CisgICAgICAgICAgICAgICAgYnVmZmVyc1tuX2J1ZmZlcnNdLnN0YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1tYXAoTlVMTCAvKiBzdGFydCBhbnl3aGVyZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIC8qIHJlcXVpcmVkICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRCAvKiByZWNvbW1lbmRlZCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLCBidWYubS5vZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKE1BUF9GQUlMRUQgPT0gYnVmZmVyc1tuX2J1ZmZlcnNdLnN0YXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgibW1hcCIpOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdXNlcnAodW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplKQoreworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz4gcmVxOworCisgICAgICAgIENMRUFSKHJlcSk7CisKKyAgICAgICAgcmVxLmNvdW50ICA9IDQ7CisgICAgICAgIHJlcS50eXBlICAgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIHJlcS5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOworCisgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19SRVFCVUZTLCAmYW1wO3JlcSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoRUlOVkFMID09IGVycm5vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGRvZXMgbm90IHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZXIgcG9pbnRlciBpL29cbiIsIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1JFUUJVRlMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBidWZmZXJzID0gY2FsbG9jKDQsIHNpemVvZigqYnVmZmVycykpOworCisgICAgICAgIGlmICghYnVmZmVycykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChuX2J1ZmZlcnMgPSAwOyBuX2J1ZmZlcnMgJmx0OyA0OyArK25fYnVmZmVycykgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbbl9idWZmZXJzXS5sZW5ndGggPSBidWZmZXJfc2l6ZTsKKyAgICAgICAgICAgICAgICBidWZmZXJzW25fYnVmZmVyc10uc3RhcnQgPSBtYWxsb2MoYnVmZmVyX3NpemUpOworCisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXJzW25fYnVmZmVyc10uc3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZGV2aWNlKHZvaWQpCit7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcGFiaWxpdHkiPnY0bDJfY2FwYWJpbGl0eTwvbGluaz4gY2FwOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wY2FwIj52NGwyX2Nyb3BjYXA8L2xpbms+IGNyb3BjYXA7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3AiPnY0bDJfY3JvcDwvbGluaz4gY3JvcDsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm9ybWF0Ij52NGwyX2Zvcm1hdDwvbGluaz4gZm10OworICAgICAgICB1bnNpZ25lZCBpbnQgbWluOworCisgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19RVUVSWUNBUCwgJmFtcDtjYXApKSB7CisgICAgICAgICAgICAgICAgaWYgKEVJTlZBTCA9PSBlcnJubykgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBubyBWNEwyIGRldmljZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1FVRVJZQ0FQIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoY2FwLmNhcGFiaWxpdGllcyAmYW1wOyBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgbm8gdmlkZW8gY2FwdHVyZSBkZXZpY2VcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoaW8pIHsKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfUkVBRDoKKyAgICAgICAgICAgICAgICBpZiAoIShjYXAuY2FwYWJpbGl0aWVzICZhbXA7IFY0TDJfQ0FQX1JFQURXUklURSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3Qgc3VwcG9ydCByZWFkIGkvb1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfTU1BUDoKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfVVNFUlBUUjoKKyAgICAgICAgICAgICAgICBpZiAoIShjYXAuY2FwYWJpbGl0aWVzICZhbXA7IFY0TDJfQ0FQX1NUUkVBTUlORykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgaS9vXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyogU2VsZWN0IHZpZGVvIGlucHV0LCB2aWRlbyBzdGFuZGFyZCBhbmQgdHVuZSBoZXJlLiAqLworCisKKyAgICAgICAgQ0xFQVIoY3JvcGNhcCk7CisKKyAgICAgICAgY3JvcGNhcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisgICAgICAgIGlmICgwID09IHhpb2N0bChmZCwgVklESU9DX0NST1BDQVAsICZhbXA7Y3JvcGNhcCkpIHsKKyAgICAgICAgICAgICAgICBjcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgY3JvcC5jID0gY3JvcGNhcC5kZWZyZWN0OyAvKiByZXNldCB0byBkZWZhdWx0ICovCisKKyAgICAgICAgICAgICAgICBpZiAoLTEgPT0geGlvY3RsKGZkLCBWSURJT0NfU19DUk9QLCAmYW1wO2Nyb3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVJTlZBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JvcHBpbmcgbm90IHN1cHBvcnRlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvcnMgaWdub3JlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEVycm9ycyBpZ25vcmVkLiAqLworICAgICAgICB9CisKKworICAgICAgICBDTEVBUihmbXQpOworCisgICAgICAgIGZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICBpZiAoZm9yY2VfZm9ybWF0KSB7CisgICAgICAgICAgICAgICAgZm10LmZtdC5waXgud2lkdGggICAgICAgPSA2NDA7CisgICAgICAgICAgICAgICAgZm10LmZtdC5waXguaGVpZ2h0ICAgICAgPSA0ODA7CisgICAgICAgICAgICAgICAgZm10LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKyAgICAgICAgICAgICAgICBmbXQuZm10LnBpeC5maWVsZCAgICAgICA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKworICAgICAgICAgICAgICAgIGlmICgtMSA9PSB4aW9jdGwoZmQsIFZJRElPQ19TX0ZNVCwgJmFtcDtmbXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fZXhpdCgiVklESU9DX1NfRk1UIik7CisKKyAgICAgICAgICAgICAgICAvKiBOb3RlIFZJRElPQ19TX0ZNVCBtYXkgY2hhbmdlIHdpZHRoIGFuZCBoZWlnaHQuICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogUHJlc2VydmUgb3JpZ2luYWwgc2V0dGluZ3MgYXMgc2V0IGJ5IHY0bDItY3RsIGZvciBleGFtcGxlICovCisgICAgICAgICAgICAgICAgaWYgKC0xID09IHhpb2N0bChmZCwgVklESU9DX0dfRk1ULCAmYW1wO2ZtdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19leGl0KCJWSURJT0NfR19GTVQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEJ1Z2d5IGRyaXZlciBwYXJhbm9pYS4gKi8KKyAgICAgICAgbWluID0gZm10LmZtdC5waXgud2lkdGggKiAyOworICAgICAgICBpZiAoZm10LmZtdC5waXguYnl0ZXNwZXJsaW5lICZsdDsgbWluKQorICAgICAgICAgICAgICAgIGZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSA9IG1pbjsKKyAgICAgICAgbWluID0gZm10LmZtdC5waXguYnl0ZXNwZXJsaW5lICogZm10LmZtdC5waXguaGVpZ2h0OworICAgICAgICBpZiAoZm10LmZtdC5waXguc2l6ZWltYWdlICZsdDsgbWluKQorICAgICAgICAgICAgICAgIGZtdC5mbXQucGl4LnNpemVpbWFnZSA9IG1pbjsKKworICAgICAgICBzd2l0Y2ggKGlvKSB7CisgICAgICAgIGNhc2UgSU9fTUVUSE9EX1JFQUQ6CisgICAgICAgICAgICAgICAgaW5pdF9yZWFkKGZtdC5mbXQucGl4LnNpemVpbWFnZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT19NRVRIT0RfTU1BUDoKKyAgICAgICAgICAgICAgICBpbml0X21tYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPX01FVEhPRF9VU0VSUFRSOgorICAgICAgICAgICAgICAgIGluaXRfdXNlcnAoZm10LmZtdC5waXguc2l6ZWltYWdlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBjbG9zZV9kZXZpY2Uodm9pZCkKK3sKKyAgICAgICAgaWYgKC0xID09IGNsb3NlKGZkKSkKKyAgICAgICAgICAgICAgICBlcnJub19leGl0KCJjbG9zZSIpOworCisgICAgICAgIGZkID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkIG9wZW5fZGV2aWNlKHZvaWQpCit7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgICAgIGlmICgtMSA9PSBzdGF0KGRldl9uYW1lLCAmYW1wO3N0KSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGlkZW50aWZ5ICclcyc6ICVkLCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfbmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFTX0lTQ0hSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBubyBkZXZpY2VcbiIsIGRldl9uYW1lKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBmZCA9IG9wZW4oZGV2X25hbWUsIE9fUkRXUiAvKiByZXF1aXJlZCAqLyB8IE9fTk9OQkxPQ0ssIDApOworCisgICAgICAgIGlmICgtMSA9PSBmZCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IG9wZW4gJyVzJzogJWQsICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9uYW1lLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdXNhZ2UoRklMRSAqZnAsIGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICAgICAgZnByaW50ZihmcCwKKyAgICAgICAgICAgICAgICAgIlVzYWdlOiAlcyBbb3B0aW9uc11cblxuIgorICAgICAgICAgICAgICAgICAiVmVyc2lvbiAxLjNcbiIKKyAgICAgICAgICAgICAgICAgIk9wdGlvbnM6XG4iCisgICAgICAgICAgICAgICAgICItZCB8IC0tZGV2aWNlIG5hbWUgICBWaWRlbyBkZXZpY2UgbmFtZSBbJXNdXG4iCisgICAgICAgICAgICAgICAgICItaCB8IC0taGVscCAgICAgICAgICBQcmludCB0aGlzIG1lc3NhZ2VcbiIKKyAgICAgICAgICAgICAgICAgIi1tIHwgLS1tbWFwICAgICAgICAgIFVzZSBtZW1vcnkgbWFwcGVkIGJ1ZmZlcnMgW2RlZmF1bHRdXG4iCisgICAgICAgICAgICAgICAgICItciB8IC0tcmVhZCAgICAgICAgICBVc2UgcmVhZCgpIGNhbGxzXG4iCisgICAgICAgICAgICAgICAgICItdSB8IC0tdXNlcnAgICAgICAgICBVc2UgYXBwbGljYXRpb24gYWxsb2NhdGVkIGJ1ZmZlcnNcbiIKKyAgICAgICAgICAgICAgICAgIi1vIHwgLS1vdXRwdXQgICAgICAgIE91dHB1dHMgc3RyZWFtIHRvIHN0ZG91dFxuIgorICAgICAgICAgICAgICAgICAiLWYgfCAtLWZvcm1hdCAgICAgICAgRm9yY2UgZm9ybWF0IHRvIDY0MHg0ODAgWVVZVlxuIgorICAgICAgICAgICAgICAgICAiLWMgfCAtLWNvdW50ICAgICAgICAgTnVtYmVyIG9mIGZyYW1lcyB0byBncmFiIFslaV1cbiIKKyAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGRldl9uYW1lLCBmcmFtZV9jb3VudCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHNob3J0X29wdGlvbnNbXSA9ICJkOmhtcnVvZmM6IjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24KK2xvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJkZXZpY2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2QnIH0sCisgICAgICAgIHsgImhlbHAiLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnaCcgfSwKKyAgICAgICAgeyAibW1hcCIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdtJyB9LAorICAgICAgICB7ICJyZWFkIiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InIH0sCisgICAgICAgIHsgInVzZXJwIiwgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAndScgfSwKKyAgICAgICAgeyAib3V0cHV0Iiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdvJyB9LAorICAgICAgICB7ICJmb3JtYXQiLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2YnIH0sCisgICAgICAgIHsgImNvdW50IiwgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnYycgfSwKKyAgICAgICAgeyAwLCAwLCAwLCAwIH0KK307CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICAgICAgZGV2X25hbWUgPSAiL2Rldi92aWRlbzAiOworCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBpbnQgaWR4OworICAgICAgICAgICAgICAgIGludCBjOworCisgICAgICAgICAgICAgICAgYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X29wdGlvbnMsIGxvbmdfb3B0aW9ucywgJmFtcDtpZHgpOworCisgICAgICAgICAgICAgICAgaWYgKC0xID09IGMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgICAgIGNhc2UgMDogLyogZ2V0b3B0X2xvbmcoKSBmbGFnICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgICAgICAgICAgZGV2X25hbWUgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0LCBhcmdjLCBhcmd2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAgICAgICAgICAgICAgaW8gPSBJT19NRVRIT0RfTU1BUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICBpbyA9IElPX01FVEhPRF9SRUFEOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlvID0gSU9fTUVUSE9EX1VTRVJQVFI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2J1ZisrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2Zvcm1hdCsrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2NvdW50ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vX2V4aXQob3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlKHN0ZGVyciwgYXJnYywgYXJndik7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3Blbl9kZXZpY2UoKTsKKyAgICAgICAgaW5pdF9kZXZpY2UoKTsKKyAgICAgICAgc3RhcnRfY2FwdHVyaW5nKCk7CisgICAgICAgIG1haW5sb29wKCk7CisgICAgICAgIHN0b3BfY2FwdHVyaW5nKCk7CisgICAgICAgIHVuaW5pdF9kZXZpY2UoKTsKKyAgICAgICAgY2xvc2VfZGV2aWNlKCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTgxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKQEAgLTAsMCArMSwxMTYwIEBACisgIDx0aXRsZT5Db21tb24gQVBJIEVsZW1lbnRzPC90aXRsZT4KKworICA8cGFyYT5Qcm9ncmFtbWluZyBhIFY0TDIgZGV2aWNlIGNvbnNpc3RzIG9mIHRoZXNlCitzdGVwczo8L3BhcmE+CisKKyAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5PcGVuaW5nIHRoZSBkZXZpY2U8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5DaGFuZ2luZyBkZXZpY2UgcHJvcGVydGllcywgc2VsZWN0aW5nIGEgdmlkZW8gYW5kIGF1ZGlvCitpbnB1dCwgdmlkZW8gc3RhbmRhcmQsIHBpY3R1cmUgYnJpZ2h0bmVzcyBhLiZuYnNwO28uPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+TmVnb3RpYXRpbmcgYSBkYXRhIGZvcm1hdDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPk5lZ290aWF0aW5nIGFuIGlucHV0L291dHB1dCBtZXRob2Q8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5UaGUgYWN0dWFsIGlucHV0L291dHB1dCBsb29wPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+Q2xvc2luZyB0aGUgZGV2aWNlPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorCisgIDxwYXJhPkluIHByYWN0aWNlIG1vc3Qgc3RlcHMgYXJlIG9wdGlvbmFsIGFuZCBjYW4gYmUgZXhlY3V0ZWQgb3V0IG9mCitvcmRlci4gSXQgZGVwZW5kcyBvbiB0aGUgVjRMMiBkZXZpY2UgdHlwZSwgeW91IGNhbiByZWFkIGFib3V0IHRoZQorZGV0YWlscyBpbiA8eHJlZiBsaW5rZW5kPSJkZXZpY2VzIiAvPi4gSW4gdGhpcyBjaGFwdGVyIHdlIHdpbGwgZGlzY3VzcwordGhlIGJhc2ljIGNvbmNlcHRzIGFwcGxpY2FibGUgdG8gYWxsIGRldmljZXMuPC9wYXJhPgorCisgIDxzZWN0aW9uIGlkPSJvcGVuIj4KKyAgICA8dGl0bGU+T3BlbmluZyBhbmQgQ2xvc2luZyBEZXZpY2VzPC90aXRsZT4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkRldmljZSBOYW1pbmc8L3RpdGxlPgorCisgICAgICA8cGFyYT5WNEwyIGRyaXZlcnMgYXJlIGltcGxlbWVudGVkIGFzIGtlcm5lbCBtb2R1bGVzLCBsb2FkZWQKK21hbnVhbGx5IGJ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBhdXRvbWF0aWNhbGx5IHdoZW4gYSBkZXZpY2UgaXMKK2ZpcnN0IG9wZW5lZC4gVGhlIGRyaXZlciBtb2R1bGVzIHBsdWcgaW50byB0aGUgInZpZGVvZGV2IiBrZXJuZWwKK21vZHVsZS4gSXQgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBhbmQgYSBjb21tb24gYXBwbGljYXRpb24KK2ludGVyZmFjZSBzcGVjaWZpZWQgaW4gdGhpcyBkb2N1bWVudC48L3BhcmE+CisKKyAgICAgIDxwYXJhPkVhY2ggZHJpdmVyIHRodXMgbG9hZGVkIHJlZ2lzdGVycyBvbmUgb3IgbW9yZSBkZXZpY2Ugbm9kZXMKK3dpdGggbWFqb3IgbnVtYmVyIDgxIGFuZCBhIG1pbm9yIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS4gQXNzaWduaW5nCittaW5vciBudW1iZXJzIHRvIFY0TDIgZGV2aWNlcyBpcyBlbnRpcmVseSB1cCB0byB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IsCit0aGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBzb2x2ZSBjb25mbGljdHMgYmV0d2VlbiBkZXZpY2VzLjxmb290bm90ZT4KKwkgIDxwYXJhPkFjY2VzcyBwZXJtaXNzaW9ucyBhcmUgYXNzb2NpYXRlZCB3aXRoIGNoYXJhY3RlcgorZGV2aWNlIHNwZWNpYWwgZmlsZXMsIGhlbmNlIHdlIG11c3QgZW5zdXJlIGRldmljZSBudW1iZXJzIGNhbm5vdAorY2hhbmdlIHdpdGggdGhlIG1vZHVsZSBsb2FkIG9yZGVyLiBUbyB0aGlzIGVuZCBtaW5vciBudW1iZXJzIGFyZSBubworbG9uZ2VyIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYnkgdGhlICJ2aWRlb2RldiIgbW9kdWxlIGFzIGluIFY0TCBidXQKK3JlcXVlc3RlZCBieSB0aGUgZHJpdmVyLiBUaGUgZGVmYXVsdHMgd2lsbCBzdWZmaWNlIGZvciBtb3N0IHBlb3BsZQordW5sZXNzIHR3byBkcml2ZXJzIGNvbXBldGUgZm9yIHRoZSBzYW1lIG1pbm9yIG51bWJlcnMuPC9wYXJhPgorCTwvZm9vdG5vdGU+IFRoZSBtb2R1bGUgb3B0aW9ucyB0byBzZWxlY3QgbWlub3IgbnVtYmVycyBhcmUgbmFtZWQKK2FmdGVyIHRoZSBkZXZpY2Ugc3BlY2lhbCBmaWxlIHdpdGggYSAiX25yIiBzdWZmaXguIEZvciBleGFtcGxlICJ2aWRlb19uciIKK2ZvciA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IHZpZGVvIGNhcHR1cmUgZGV2aWNlcy4gVGhlIG51bWJlciBpcworYW4gb2Zmc2V0IHRvIHRoZSBiYXNlIG1pbm9yIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSB0eXBlLgorPGZvb3Rub3RlPgorCSAgPHBhcmE+SW4gZWFybGllciB2ZXJzaW9ucyBvZiB0aGUgVjRMMiBBUEkgdGhlIG1vZHVsZSBvcHRpb25zCit3aGVyZSBuYW1lZCBhZnRlciB0aGUgZGV2aWNlIHNwZWNpYWwgZmlsZSB3aXRoIGEgInVuaXRfIiBwcmVmaXgsIGV4cHJlc3NpbmcKK3RoZSBtaW5vciBudW1iZXIgaXRzZWxmLCBub3QgYW4gb2Zmc2V0LiBSYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGlzIHVua25vd24uCitMYXN0bHkgdGhlIG5hbWluZyBhbmQgc2VtYW50aWNzIGFyZSBqdXN0IGEgY29udmVudGlvbiBhbW9uZyBkcml2ZXIgd3JpdGVycywKK3RoZSBwb2ludCB0byBub3RlIGlzIHRoYXQgbWlub3IgbnVtYmVycyBhcmUgbm90IHN1cHBvc2VkIHRvIGJlIGhhcmRjb2RlZAoraW50byBkcml2ZXJzLjwvcGFyYT4KKwk8L2Zvb3Rub3RlPiBXaGVuIHRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcyBvZiB0aGUgc2FtZQordHlwZSBtb3JlIHRoYW4gb25lIG1pbm9yIG51bWJlciBjYW4gYmUgYXNzaWduZWQsIHNlcGFyYXRlZCBieSBjb21tYXM6Cis8aW5mb3JtYWxleGFtcGxlPgorCSAgPHNjcmVlbj4KKyZndDsgaW5zbW9kIG15ZHJpdmVyLm8gdmlkZW9fbnI9MCwxIHJhZGlvX25yPTAsMTwvc2NyZWVuPgorCTwvaW5mb3JtYWxleGFtcGxlPjwvcGFyYT4KKworICAgICAgPHBhcmE+SW4gPGZpbGVuYW1lPi9ldGMvbW9kdWxlcy5jb25mPC9maWxlbmFtZT4gdGhpcyBtYXkgYmUKK3dyaXR0ZW4gYXM6IDxpbmZvcm1hbGV4YW1wbGU+CisJICA8c2NyZWVuPgorYWxpYXMgY2hhci1tYWpvci04MS0wIG15ZHJpdmVyCithbGlhcyBjaGFyLW1ham9yLTgxLTEgbXlkcml2ZXIKK2FsaWFzIGNoYXItbWFqb3ItODEtNjQgbXlkcml2ZXIgICAgICAgICAgICAgIDxjbyBpZD0iYWxpYXMiIC8+CitvcHRpb25zIG15ZHJpdmVyIHZpZGVvX25yPTAsMSByYWRpb19ucj0wLDEgICA8Y28gaWQ9Im9wdGlvbnMiIC8+CisJICA8L3NjcmVlbj4KKwkgIDxjYWxsb3V0bGlzdD4KKwkgICAgPGNhbGxvdXQgYXJlYXJlZnM9ImFsaWFzIj4KKwkgICAgICA8cGFyYT5XaGVuIGFuIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIG9wZW4gYSBkZXZpY2UKK3NwZWNpYWwgZmlsZSB3aXRoIG1ham9yIG51bWJlciA4MSBhbmQgbWlub3IgbnVtYmVyIDAsIDEsIG9yIDY0LCBsb2FkCisibXlkcml2ZXIiIChhbmQgdGhlICJ2aWRlb2RldiIgbW9kdWxlIGl0IGRlcGVuZHMgdXBvbikuPC9wYXJhPgorCSAgICA8L2NhbGxvdXQ+CisJICAgIDxjYWxsb3V0IGFyZWFyZWZzPSJvcHRpb25zIj4KKwkgICAgICA8cGFyYT5SZWdpc3RlciB0aGUgZmlyc3QgdHdvIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyB3aXRoCittaW5vciBudW1iZXIgMCBhbmQgMSAoYmFzZSBudW1iZXIgaXMgMCksIHRoZSBmaXJzdCB0d28gcmFkaW8gZGV2aWNlCit3aXRoIG1pbm9yIG51bWJlciA2NCBhbmQgNjUgKGJhc2UgNjQpLjwvcGFyYT4KKwkgICAgPC9jYWxsb3V0PgorCSAgPC9jYWxsb3V0bGlzdD4KKwk8L2luZm9ybWFsZXhhbXBsZT4gV2hlbiBubyBtaW5vciBudW1iZXIgaXMgZ2l2ZW4gYXMgbW9kdWxlCitvcHRpb24gdGhlIGRyaXZlciBzdXBwbGllcyBhIGRlZmF1bHQuIDx4cmVmIGxpbmtlbmQ9ImRldmljZXMiIC8+CityZWNvbW1lbmRzIHRoZSBiYXNlIG1pbm9yIG51bWJlcnMgdG8gYmUgdXNlZCBmb3IgdGhlIHZhcmlvdXMgZGV2aWNlCit0eXBlcy4gT2J2aW91c2x5IG1pbm9yIG51bWJlcnMgbXVzdCBiZSB1bmlxdWUuIFdoZW4gdGhlIG51bWJlciBpcworYWxyZWFkeSBpbiB1c2UgdGhlIDxlbXBoYXNpcz5vZmZlbmRpbmcgZGV2aWNlPC9lbXBoYXNpcz4gd2lsbCBub3QgYmUKK3JlZ2lzdGVyZWQuIDwhLS0gQmxlc3NlZCBieSBMaW51cyBUb3J2YWxkcyBvbgorbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZywgMjAwMi0xMS0yMC4gLS0+PC9wYXJhPgorCisgICAgICA8cGFyYT5CeSBjb252ZW50aW9uIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBjcmVhdGUgdmFyaW91cworY2hhcmFjdGVyIGRldmljZSBzcGVjaWFsIGZpbGVzIHdpdGggdGhlc2UgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgaW4KK3RoZSA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4gVGhlIG5hbWVzIHJlY29tZW5kZWQgZm9yIHRoZQorZGlmZmVyZW50IFY0TDIgZGV2aWNlIHR5cGVzIGFyZSBsaXN0ZWQgaW4gPHhyZWYgbGlua2VuZD0iZGV2aWNlcyIgLz4uCis8L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSBjcmVhdGlvbiBvZiBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlcyAod2l0aAorPGFwcGxpY2F0aW9uPm1rbm9kPC9hcHBsaWNhdGlvbj4pIGlzIGEgcHJpdmlsZWdlZCBvcGVyYXRpb24gYW5kCitkZXZpY2VzIGNhbm5vdCBiZSBvcGVuZWQgYnkgbWFqb3IgYW5kIG1pbm9yIG51bWJlci4gVGhhdCBtZWFucworYXBwbGljYXRpb25zIGNhbm5vdCA8ZW1waGFzaXM+cmVsaWFibGU8L2VtcGhhc2lzPiBzY2FuIGZvciBsb2FkZWQgb3IKK2luc3RhbGxlZCBkcml2ZXJzLiBUaGUgdXNlciBtdXN0IGVudGVyIGEgZGV2aWNlIG5hbWUsIG9yIHRoZQorYXBwbGljYXRpb24gY2FuIHRyeSB0aGUgY29udmVudGlvbmFsIGRldmljZSBuYW1lcy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlVuZGVyIHRoZSBkZXZpY2UgZmlsZXN5c3RlbSAoZGV2ZnMpIHRoZSBtaW5vciBudW1iZXIKK29wdGlvbnMgYXJlIGlnbm9yZWQuIFY0TDIgZHJpdmVycyAob3IgYnkgcHJveHkgdGhlICJ2aWRlb2RldiIgbW9kdWxlKQorYXV0b21hdGljYWxseSBjcmVhdGUgdGhlIHJlcXVpcmVkIGRldmljZSBmaWxlcyBpbiB0aGUKKzxmaWxlbmFtZT4vZGV2L3Y0bDwvZmlsZW5hbWU+IGRpcmVjdG9yeSB1c2luZyB0aGUgY29udmVudGlvbmFsIGRldmljZQorbmFtZXMgYWJvdmUuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyZWxhdGVkIj4KKyAgICAgIDx0aXRsZT5SZWxhdGVkIERldmljZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5EZXZpY2VzIGNhbiBzdXBwb3J0IHNldmVyYWwgcmVsYXRlZCBmdW5jdGlvbnMuIEZvciBleGFtcGxlCit2aWRlbyBjYXB0dXJpbmcsIHZpZGVvIG92ZXJsYXkgYW5kIFZCSSBjYXB0dXJpbmcgYXJlIHJlbGF0ZWQgYmVjYXVzZQordGhlc2UgZnVuY3Rpb25zIHNoYXJlLCBhbW9uZ3N0IG90aGVyLCB0aGUgc2FtZSB2aWRlbyBpbnB1dCBhbmQgdHVuZXIKK2ZyZXF1ZW5jeS4gVjRMIGFuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIgdXNlZCB0aGUgc2FtZSBkZXZpY2UgbmFtZQorYW5kIG1pbm9yIG51bWJlciBmb3IgdmlkZW8gY2FwdHVyaW5nIGFuZCBvdmVybGF5LCBidXQgZGlmZmVyZW50IG9uZXMKK2ZvciBWQkkuIEV4cGVyaWVuY2Ugc2hvd2VkIHRoaXMgYXBwcm9hY2ggaGFzIHNldmVyYWwgcHJvYmxlbXM8Zm9vdG5vdGU+CisJICA8cGFyYT5HaXZlbiBhIGRldmljZSBmaWxlIG5hbWUgb25lIGNhbm5vdCByZWxpYWJsZSBmaW5kCityZWxhdGVkIGRldmljZXMuIEZvciBvbmNlIG5hbWVzIGFyZSBhcmJpdHJhcnkgYW5kIGluIGEgc3lzdGVtIHdpdGgKK211bHRpcGxlIGRldmljZXMsIHdoZXJlIG9ubHkgc29tZSBzdXBwb3J0IFZCSSBjYXB0dXJpbmcsIGEKKzxmaWxlbmFtZT4vZGV2L3ZpZGVvMjwvZmlsZW5hbWU+IGlzIG5vdCBuZWNlc3NhcmlseSByZWxhdGVkIHRvCis8ZmlsZW5hbWU+L2Rldi92YmkyPC9maWxlbmFtZT4uIFRoZSBWNEwKKzxjb25zdGFudD5WSURJT0NHVU5JVDwvY29uc3RhbnQ+IGlvY3RsIHdvdWxkIHJlcXVpcmUgYSBzZWFyY2ggZm9yIGEKK2RldmljZSBmaWxlIHdpdGggYSBwYXJ0aWN1bGFyIG1ham9yIGFuZCBtaW5vciBudW1iZXIuPC9wYXJhPgorCTwvZm9vdG5vdGU+LCBhbmQgdG8gbWFrZSB0aGluZ3Mgd29yc2UgdGhlIFY0TCB2aWRlb2RldiBtb2R1bGUKK3VzZWQgdG8gcHJvaGliaXQgbXVsdGlwbGUgb3BlbnMgb2YgYSBkZXZpY2UuPC9wYXJhPgorCisgICAgICA8cGFyYT5BcyBhIHJlbWVkeSB0aGUgcHJlc2VudCB2ZXJzaW9uIG9mIHRoZSBWNEwyIEFQSSByZWxheGVkIHRoZQorY29uY2VwdCBvZiBkZXZpY2UgdHlwZXMgd2l0aCBzcGVjaWZpYyBuYW1lcyBhbmQgbWlub3IgbnVtYmVycy4gRm9yCitjb21wYXRpYmlsaXR5IHdpdGggb2xkIGFwcGxpY2F0aW9ucyBkcml2ZXJzIG11c3Qgc3RpbGwgcmVnaXN0ZXIgZGlmZmVyZW50CittaW5vciBudW1iZXJzIHRvIGFzc2lnbiBhIGRlZmF1bHQgZnVuY3Rpb24gdG8gdGhlIGRldmljZS4gQnV0IGlmIHJlbGF0ZWQKK2Z1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgdGhleSBtdXN0IGJlIGF2YWlsYWJsZSB1bmRlciBhbGwKK3JlZ2lzdGVyZWQgbWlub3IgbnVtYmVycy4gVGhlIGRlc2lyZWQgZnVuY3Rpb24gY2FuIGJlIHNlbGVjdGVkIGFmdGVyCitvcGVuaW5nIHRoZSBkZXZpY2UgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImRldmljZXMiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+SW1hZ2luZSBhIGRyaXZlciBzdXBwb3J0aW5nIHZpZGVvIGNhcHR1cmluZywgdmlkZW8KK292ZXJsYXksIHJhdyBWQkkgY2FwdHVyaW5nLCBhbmQgRk0gcmFkaW8gcmVjZXB0aW9uLiBJdCByZWdpc3RlcnMgdGhyZWUKK2RldmljZXMgd2l0aCBtaW5vciBudW1iZXIgMCwgNjQgYW5kIDIyNCAodGhpcyBudW1iZXJpbmcgc2NoZW1lIGlzCitpbmhlcml0ZWQgZnJvbSB0aGUgVjRMIEFQSSkuIFJlZ2FyZGxlc3MgaWYKKzxmaWxlbmFtZT4vZGV2L3ZpZGVvPC9maWxlbmFtZT4gKDgxLCAwKSBvcgorPGZpbGVuYW1lPi9kZXYvdmJpPC9maWxlbmFtZT4gKDgxLCAyMjQpIGlzIG9wZW5lZCB0aGUgYXBwbGljYXRpb24gY2FuCitzZWxlY3QgYW55IG9uZSBvZiB0aGUgdmlkZW8gY2FwdHVyaW5nLCBvdmVybGF5IG9yIFZCSSBjYXB0dXJpbmcKK2Z1bmN0aW9ucy4gV2l0aG91dCBwcm9ncmFtbWluZyAoZS4mbmJzcDtnLiByZWFkaW5nIGZyb20gdGhlIGRldmljZQord2l0aCA8YXBwbGljYXRpb24+ZGQ8L2FwcGxpY2F0aW9uPiBvciA8YXBwbGljYXRpb24+Y2F0PC9hcHBsaWNhdGlvbj4pCis8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IGNhcHR1cmVzIHZpZGVvIGltYWdlcywgd2hpbGUKKzxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+IGNhcHR1cmVzIHJhdyBWQkkgZGF0YS4KKzxmaWxlbmFtZT4vZGV2L3JhZGlvPC9maWxlbmFtZT4gKDgxLCA2NCkgaXMgaW52YXJpYWJsZSBhIHJhZGlvIGRldmljZSwKK3VucmVsYXRlZCB0byB0aGUgdmlkZW8gZnVuY3Rpb25zLiBCZWluZyB1bnJlbGF0ZWQgZG9lcyBub3QgaW1wbHkgdGhlCitkZXZpY2VzIGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIGhvd2V2ZXIuIFRoZSAmZnVuYy1vcGVuOworZnVuY3Rpb24gbWF5IHZlcnkgd2VsbCByZXR1cm4gYW4gJkVCVVNZOy48L3BhcmE+CisKKyAgICAgIDxwYXJhPkJlc2lkZXMgdmlkZW8gaW5wdXQgb3Igb3V0cHV0IHRoZSBoYXJkd2FyZSBtYXkgYWxzbworc3VwcG9ydCBhdWRpbyBzYW1wbGluZyBvciBwbGF5YmFjay4gSWYgc28sIHRoZXNlIGZ1bmN0aW9ucyBhcmUKK2ltcGxlbWVudGVkIGFzIE9TUyBvciBBTFNBIFBDTSBkZXZpY2VzIGFuZCBldmVudHVhbGx5IE9TUyBvciBBTFNBCithdWRpbyBtaXhlci4gVGhlIFY0TDIgQVBJIG1ha2VzIG5vIHByb3Zpc2lvbnMgeWV0IHRvIGZpbmQgdGhlc2UKK3JlbGF0ZWQgZGV2aWNlcy4gSWYgeW91IGhhdmUgYW4gaWRlYSBwbGVhc2Ugd3JpdGUgdG8gdGhlIGxpbnV4LW1lZGlhCittYWlsaW5nIGxpc3Q6ICZ2NGwtbWw7LjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5NdWx0aXBsZSBPcGVuczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkluIGdlbmVyYWwsIFY0TDIgZGV2aWNlcyBjYW4gYmUgb3BlbmVkIG1vcmUgdGhhbiBvbmNlLgorV2hlbiB0aGlzIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLCB1c2VycyBjYW4gZm9yIGV4YW1wbGUgc3RhcnQgYQorInBhbmVsIiBhcHBsaWNhdGlvbiB0byBjaGFuZ2UgY29udHJvbHMgbGlrZSBicmlnaHRuZXNzIG9yIGF1ZGlvCit2b2x1bWUsIHdoaWxlIGFub3RoZXIgYXBwbGljYXRpb24gY2FwdHVyZXMgdmlkZW8gYW5kIGF1ZGlvLiBJbiBvdGhlciB3b3JkcywgcGFuZWwKK2FwcGxpY2F0aW9ucyBhcmUgY29tcGFyYWJsZSB0byBhbiBPU1Mgb3IgQUxTQSBhdWRpbyBtaXhlciBhcHBsaWNhdGlvbi4KK1doZW4gYSBkZXZpY2Ugc3VwcG9ydHMgbXVsdGlwbGUgZnVuY3Rpb25zIGxpa2UgY2FwdHVyaW5nIGFuZCBvdmVybGF5Cis8ZW1waGFzaXM+c2ltdWx0YW5lb3VzbHk8L2VtcGhhc2lzPiwgbXVsdGlwbGUgb3BlbnMgYWxsb3cgY29uY3VycmVudAordXNlIG9mIHRoZSBkZXZpY2UgYnkgZm9ya2VkIHByb2Nlc3NlcyBvciBzcGVjaWFsaXplZCBhcHBsaWNhdGlvbnMuPC9wYXJhPgorCisgICAgICA8cGFyYT5NdWx0aXBsZSBvcGVucyBhcmUgb3B0aW9uYWwsIGFsdGhvdWdoIGRyaXZlcnMgc2hvdWxkCitwZXJtaXQgYXQgbGVhc3QgY29uY3VycmVudCBhY2Nlc3NlcyB3aXRob3V0IGRhdGEgZXhjaGFuZ2UsICZpZTsgcGFuZWwKK2FwcGxpY2F0aW9ucy4gVGhpcyBpbXBsaWVzICZmdW5jLW9wZW47IGNhbiByZXR1cm4gYW4gJkVCVVNZOyB3aGVuIHRoZQorZGV2aWNlIGlzIGFscmVhZHkgaW4gdXNlLCBhcyB3ZWxsIGFzICZmdW5jLWlvY3RsOyBmdW5jdGlvbnMgaW5pdGlhdGluZworZGF0YSBleGNoYW5nZSAobmFtZWx5IHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bCksIGFuZCB0aGUgJmZ1bmMtcmVhZDsKK2FuZCAmZnVuYy13cml0ZTsgZnVuY3Rpb25zLjwvcGFyYT4KKworICAgICAgPHBhcmE+TWVyZSBvcGVuaW5nIGEgVjRMMiBkZXZpY2UgZG9lcyBub3QgZ3JhbnQgZXhjbHVzaXZlCithY2Nlc3MuPGZvb3Rub3RlPgorCSAgPHBhcmE+RHJpdmVycyBjb3VsZCByZWNvZ25pemUgdGhlCis8Y29uc3RhbnQ+T19FWENMPC9jb25zdGFudD4gb3BlbiBmbGFnLiBQcmVzZW50bHkgdGhpcyBpcyBub3QgcmVxdWlyZWQsCitzbyBhcHBsaWNhdGlvbnMgY2Fubm90IGtub3cgaWYgaXQgcmVhbGx5IHdvcmtzLjwvcGFyYT4KKwk8L2Zvb3Rub3RlPiBJbml0aWF0aW5nIGRhdGEgZXhjaGFuZ2UgaG93ZXZlciBhc3NpZ25zIHRoZSByaWdodAordG8gcmVhZCBvciB3cml0ZSB0aGUgcmVxdWVzdGVkIHR5cGUgb2YgZGF0YSwgYW5kIHRvIGNoYW5nZSByZWxhdGVkCitwcm9wZXJ0aWVzLCB0byB0aGlzIGZpbGUgZGVzY3JpcHRvci4gQXBwbGljYXRpb25zIGNhbiByZXF1ZXN0CithZGRpdGlvbmFsIGFjY2VzcyBwcml2aWxlZ2VzIHVzaW5nIHRoZSBwcmlvcml0eSBtZWNoYW5pc20gZGVzY3JpYmVkIGluCis8eHJlZiBsaW5rZW5kPSJhcHAtcHJpIiAvPi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+U2hhcmVkIERhdGEgU3RyZWFtczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlY0TDIgZHJpdmVycyBzaG91bGQgbm90IHN1cHBvcnQgbXVsdGlwbGUgYXBwbGljYXRpb25zCityZWFkaW5nIG9yIHdyaXRpbmcgdGhlIHNhbWUgZGF0YSBzdHJlYW0gb24gYSBkZXZpY2UgYnkgY29weWluZworYnVmZmVycywgdGltZSBtdWx0aXBsZXhpbmcgb3Igc2ltaWxhciBtZWFucy4gVGhpcyBpcyBiZXR0ZXIgaGFuZGxlZCBieQorYSBwcm94eSBhcHBsaWNhdGlvbiBpbiB1c2VyIHNwYWNlLiBXaGVuIHRoZSBkcml2ZXIgc3VwcG9ydHMgc3RyZWFtCitzaGFyaW5nIGFueXdheSBpdCBtdXN0IGJlIGltcGxlbWVudGVkIHRyYW5zcGFyZW50bHkuIFRoZSBWNEwyIEFQSSBkb2VzCitub3Qgc3BlY2lmeSBob3cgY29uZmxpY3RzIGFyZSBzb2x2ZWQuIDwhLS0gRm9yIGV4YW1wbGUgT19FWENMIHdoZW4gdGhlCithcHBsaWNhdGlvbiBkb2VzIG5vdCB3YW50IHRvIGJlIHByZWVtcHRlZCwgUFJPVF9SRUFEIG1tYXBwZWQgYnVmZmVycword2hpY2ggY2FuIGJlIG1hcHBlZCB0d2ljZSwgd2hhdCBoYXBwZW5zIHdoZW4gaW1hZ2UgZm9ybWF0cyBkbyBub3QKK21hdGNoIGV0Yy4tLT48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4KKworICAgIDxwYXJhPlRvIG9wZW4gYW5kIGNsb3NlIFY0TDIgZGV2aWNlcyBhcHBsaWNhdGlvbnMgdXNlIHRoZQorJmZ1bmMtb3BlbjsgYW5kICZmdW5jLWNsb3NlOyBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LiBEZXZpY2VzIGFyZQorcHJvZ3JhbW1lZCB1c2luZyB0aGUgJmZ1bmMtaW9jdGw7IGZ1bmN0aW9uIGFzIGV4cGxhaW5lZCBpbiB0aGUKK2ZvbGxvd2luZyBzZWN0aW9ucy48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InF1ZXJ5Y2FwIj4KKyAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgIDxwYXJhPkJlY2F1c2UgVjRMMiBjb3ZlcnMgYSB3aWRlIHZhcmlldHkgb2YgZGV2aWNlcyBub3QgYWxsCithc3BlY3RzIG9mIHRoZSBBUEkgYXJlIGVxdWFsbHkgYXBwbGljYWJsZSB0byBhbGwgdHlwZXMgb2YgZGV2aWNlcy4KK0Z1cnRoZXJtb3JlIGRldmljZXMgb2YgdGhlIHNhbWUgdHlwZSBoYXZlIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMgYW5kCit0aGlzIHNwZWNpZmljYXRpb24gcGVybWl0cyB0aGUgb21pc3Npb24gb2YgYSBmZXcgY29tcGxpY2F0ZWQgYW5kIGxlc3MKK2ltcG9ydGFudCBwYXJ0cyBvZiB0aGUgQVBJLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bCBpcyBhdmFpbGFibGUgdG8gY2hlY2sgaWYgdGhlIGtlcm5lbAorZGV2aWNlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIHNwZWNpZmljYXRpb24sIGFuZCB0byBxdWVyeSB0aGUgPGxpbmsKK2xpbmtlbmQ9ImRldmljZXMiPmZ1bmN0aW9uczwvbGluaz4gYW5kIDxsaW5rIGxpbmtlbmQ9ImlvIj5JL08KK21ldGhvZHM8L2xpbms+IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLiBPdGhlciBmZWF0dXJlcyBjYW4gYmUgcXVlcmllZAorYnkgY2FsbGluZyB0aGUgcmVzcGVjdGl2ZSBpb2N0bCwgZm9yIGV4YW1wbGUgJlZJRElPQy1FTlVNSU5QVVQ7Cit0byBsZWFybiBhYm91dCB0aGUgbnVtYmVyLCB0eXBlcyBhbmQgbmFtZXMgb2YgdmlkZW8gY29ubmVjdG9ycyBvbiB0aGUKK2RldmljZS4gQWx0aG91Z2ggYWJzdHJhY3Rpb24gaXMgYSBtYWpvciBvYmplY3RpdmUgb2YgdGhpcyBBUEksIHRoZQoraW9jdGwgYWxzbyBhbGxvd3MgZHJpdmVyIHNwZWNpZmljIGFwcGxpY2F0aW9ucyB0byByZWxpYWJsZSBpZGVudGlmeQordGhlIGRyaXZlci48L3BhcmE+CisKKyAgICA8cGFyYT5BbGwgVjRMMiBkcml2ZXJzIG11c3Qgc3VwcG9ydAorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNBUDwvY29uc3RhbnQ+LiBBcHBsaWNhdGlvbnMgc2hvdWxkIGFsd2F5cyBjYWxsCit0aGlzIGlvY3RsIGFmdGVyIG9wZW5pbmcgdGhlIGRldmljZS48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iYXBwLXByaSI+CisgICAgPHRpdGxlPkFwcGxpY2F0aW9uIFByaW9yaXR5PC90aXRsZT4KKworICAgIDxwYXJhPldoZW4gbXVsdGlwbGUgYXBwbGljYXRpb25zIHNoYXJlIGEgZGV2aWNlIGl0IG1heSBiZQorZGVzaXJhYmxlIHRvIGFzc2lnbiB0aGVtIGRpZmZlcmVudCBwcmlvcml0aWVzLiBDb250cmFyeSB0byB0aGUKK3RyYWRpdGlvbmFsICJybSAtcmYgLyIgc2Nob29sIG9mIHRob3VnaHQgYSB2aWRlbyByZWNvcmRpbmcgYXBwbGljYXRpb24KK2NvdWxkIGZvciBleGFtcGxlIGJsb2NrIG90aGVyIGFwcGxpY2F0aW9ucyBmcm9tIGNoYW5naW5nIHZpZGVvCitjb250cm9scyBvciBzd2l0Y2hpbmcgdGhlIGN1cnJlbnQgVFYgY2hhbm5lbC4gQW5vdGhlciBvYmplY3RpdmUgaXMgdG8KK3Blcm1pdCBsb3cgcHJpb3JpdHkgYXBwbGljYXRpb25zIHdvcmtpbmcgaW4gYmFja2dyb3VuZCwgd2hpY2ggY2FuIGJlCitwcmVlbXB0ZWQgYnkgdXNlciBjb250cm9sbGVkIGFwcGxpY2F0aW9ucyBhbmQgYXV0b21hdGljYWxseSByZWdhaW4KK2NvbnRyb2wgb2YgdGhlIGRldmljZSBhdCBhIGxhdGVyIHRpbWUuPC9wYXJhPgorCisgICAgPHBhcmE+U2luY2UgdGhlc2UgZmVhdHVyZXMgY2Fubm90IGJlIGltcGxlbWVudGVkIGVudGlyZWx5IGluIHVzZXIKK3NwYWNlIFY0TDIgZGVmaW5lcyB0aGUgJlZJRElPQy1HLVBSSU9SSVRZOyBhbmQgJlZJRElPQy1TLVBSSU9SSVRZOworaW9jdGxzIHRvIHJlcXVlc3QgYW5kIHF1ZXJ5IHRoZSBhY2Nlc3MgcHJpb3JpdHkgYXNzb2NpYXRlIHdpdGggYSBmaWxlCitkZXNjcmlwdG9yLiBPcGVuaW5nIGEgZGV2aWNlIGFzc2lnbnMgYSBtZWRpdW0gcHJpb3JpdHksIGNvbXBhdGlibGUKK3dpdGggZWFybGllciB2ZXJzaW9ucyBvZiBWNEwyIGFuZCBkcml2ZXJzIG5vdCBzdXBwb3J0aW5nIHRoZXNlIGlvY3Rscy4KK0FwcGxpY2F0aW9ucyByZXF1aXJpbmcgYSBkaWZmZXJlbnQgcHJpb3JpdHkgd2lsbCB1c3VhbGx5IGNhbGwKKzxjb25zdGFudD5WSURJT0NfU19QUklPUklUWTwvY29uc3RhbnQ+IGFmdGVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIHdpdGgKK3RoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5Jb2N0bHMgY2hhbmdpbmcgZHJpdmVyIHByb3BlcnRpZXMsIHN1Y2ggYXMgJlZJRElPQy1TLUlOUFVUOywKK3JldHVybiBhbiAmRUJVU1k7IGFmdGVyIGFub3RoZXIgYXBwbGljYXRpb24gb2J0YWluZWQgaGlnaGVyIHByaW9yaXR5LgorQW4gZXZlbnQgbWVjaGFuaXNtIHRvIG5vdGlmeSBhcHBsaWNhdGlvbnMgYWJvdXQgYXN5bmNocm9ub3VzIHByb3BlcnR5CitjaGFuZ2VzIGhhcyBiZWVuIHByb3Bvc2VkIGJ1dCBub3QgYWRkZWQgeWV0LjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJ2aWRlbyI+CisgICAgPHRpdGxlPlZpZGVvIElucHV0cyBhbmQgT3V0cHV0czwvdGl0bGU+CisKKyAgICA8cGFyYT5WaWRlbyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlIHBoeXNpY2FsIGNvbm5lY3RvcnMgb2YgYQorZGV2aWNlLiBUaGVzZSBjYW4gYmUgZm9yIGV4YW1wbGUgUkYgY29ubmVjdG9ycyAoYW50ZW5uYS9jYWJsZSksIENWQlMKK2Euay5hLiBDb21wb3NpdGUgVmlkZW8sIFMtVmlkZW8gb3IgUkdCIGNvbm5lY3RvcnMuIE9ubHkgdmlkZW8gYW5kIFZCSQorY2FwdHVyZSBkZXZpY2VzIGhhdmUgaW5wdXRzLCBvdXRwdXQgZGV2aWNlcyBoYXZlIG91dHB1dHMsIGF0IGxlYXN0IG9uZQorZWFjaC4gUmFkaW8gZGV2aWNlcyBoYXZlIG5vIHZpZGVvIGlucHV0cyBvciBvdXRwdXRzLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGxlYXJuIGFib3V0IHRoZSBudW1iZXIgYW5kIGF0dHJpYnV0ZXMgb2YgdGhlCithdmFpbGFibGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFwcGxpY2F0aW9ucyBjYW4gZW51bWVyYXRlIHRoZW0gd2l0aCB0aGUKKyZWSURJT0MtRU5VTUlOUFVUOyBhbmQgJlZJRElPQy1FTlVNT1VUUFVUOyBpb2N0bCwgcmVzcGVjdGl2ZWx5LiBUaGUKKyZ2NGwyLWlucHV0OyByZXR1cm5lZCBieSB0aGUgPGNvbnN0YW50PlZJRElPQ19FTlVNSU5QVVQ8L2NvbnN0YW50PgoraW9jdGwgYWxzbyBjb250YWlucyBzaWduYWwgc3RhdHVzIGluZm9ybWF0aW9uIGFwcGxpY2FibGUgd2hlbiB0aGUKK2N1cnJlbnQgdmlkZW8gaW5wdXQgaXMgcXVlcmllZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgJlZJRElPQy1HLUlOUFVUOyBhbmQgJlZJRElPQy1HLU9VVFBVVDsgaW9jdGwgcmV0dXJuIHRoZQoraW5kZXggb2YgdGhlIGN1cnJlbnQgdmlkZW8gaW5wdXQgb3Igb3V0cHV0LiBUbyBzZWxlY3QgYSBkaWZmZXJlbnQKK2lucHV0IG9yIG91dHB1dCBhcHBsaWNhdGlvbnMgY2FsbCB0aGUgJlZJRElPQy1TLUlOUFVUOyBhbmQKKyZWSURJT0MtUy1PVVRQVVQ7IGlvY3RsLiBEcml2ZXJzIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgaW5wdXQgaW9jdGxzCit3aGVuIHRoZSBkZXZpY2UgaGFzIG9uZSBvciBtb3JlIGlucHV0cywgYWxsIHRoZSBvdXRwdXQgaW9jdGxzIHdoZW4gdGhlCitkZXZpY2UgaGFzIG9uZSBvciBtb3JlIG91dHB1dHMuPC9wYXJhPgorCisgICAgPCEtLQorICAgIDxmaWd1cmUgaWQ9aW8tdHJlZT4KKyAgICAgIDx0aXRsZT5JbnB1dCBhbmQgb3V0cHV0IGVudW1lcmF0aW9uIGlzIHRoZSByb290IG9mIG1vc3QgZGV2aWNlIHByb3BlcnRpZXMuPC90aXRsZT4KKyAgICAgIDxtZWRpYW9iamVjdD4KKwk8aW1hZ2VvYmplY3Q+CisJICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImxpbmtzLnBkZiIgZm9ybWF0PSJwcyIgLz4KKwk8L2ltYWdlb2JqZWN0PgorCTxpbWFnZW9iamVjdD4KKwkgIDxpbWFnZWRhdGEgZmlsZXJlZj0ibGlua3MuZ2lmIiBmb3JtYXQ9ImdpZiIgLz4KKwk8L2ltYWdlb2JqZWN0PgorCTx0ZXh0b2JqZWN0PgorCSAgPHBocmFzZT5MaW5rcyBiZXR3ZWVuIHZhcmlvdXMgZGV2aWNlIHByb3BlcnR5IHN0cnVjdHVyZXMuPC9waHJhc2U+CisJPC90ZXh0b2JqZWN0PgorICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICA8L2ZpZ3VyZT4KKyAgICAtLT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHZpZGVvIGlucHV0PC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItaW5wdXQ7IGlucHV0OworaW50IGluZGV4OworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUctSU5QVVQ7LCAmYW1wO2luZGV4KSkgeworCXBlcnJvciAoIlZJRElPQ19HX0lOUFVUIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworbWVtc2V0ICgmYW1wO2lucHV0LCAwLCBzaXplb2YgKGlucHV0KSk7CitpbnB1dC5pbmRleCA9IGluZGV4OworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUVOVU1JTlBVVDssICZhbXA7aW5wdXQpKSB7CisJcGVycm9yICgiVklESU9DX0VOVU1JTlBVVCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK3ByaW50ZiAoIkN1cnJlbnQgaW5wdXQ6ICVzXG4iLCBpbnB1dC5uYW1lKTsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+U3dpdGNoaW5nIHRvIHRoZSBmaXJzdCB2aWRlbyBpbnB1dDwvdGl0bGU+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2ludCBpbmRleDsKKworaW5kZXggPSAwOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLVMtSU5QVVQ7LCAmYW1wO2luZGV4KSkgeworCXBlcnJvciAoIlZJRElPQ19TX0lOUFVUIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9ImF1ZGlvIj4KKyAgICA8dGl0bGU+QXVkaW8gSW5wdXRzIGFuZCBPdXRwdXRzPC90aXRsZT4KKworICAgIDxwYXJhPkF1ZGlvIGlucHV0cyBhbmQgb3V0cHV0cyBhcmUgcGh5c2ljYWwgY29ubmVjdG9ycyBvZiBhCitkZXZpY2UuIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyBoYXZlIGlucHV0cywgb3V0cHV0IGRldmljZXMgaGF2ZQorb3V0cHV0cywgemVybyBvciBtb3JlIGVhY2guIFJhZGlvIGRldmljZXMgaGF2ZSBubyBhdWRpbyBpbnB1dHMgb3IKK291dHB1dHMuIFRoZXkgaGF2ZSBleGFjdGx5IG9uZSB0dW5lciB3aGljaCBpbiBmYWN0Cis8ZW1waGFzaXM+aXM8L2VtcGhhc2lzPiBhbiBhdWRpbyBzb3VyY2UsIGJ1dCB0aGlzIEFQSSBhc3NvY2lhdGVzCit0dW5lcnMgd2l0aCB2aWRlbyBpbnB1dHMgb3Igb3V0cHV0cyBvbmx5LCBhbmQgcmFkaW8gZGV2aWNlcyBoYXZlCitub25lIG9mIHRoZXNlLjxmb290bm90ZT4KKwk8cGFyYT5BY3R1YWxseSAmdjRsMi1hdWRpbzsgb3VnaHQgdG8gaGF2ZSBhCis8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBsaWtlICZ2NGwyLWlucHV0Oywgbm90IG9ubHkKK21ha2luZyB0aGUgQVBJIG1vcmUgY29uc2lzdGVudCBidXQgYWxzbyBwZXJtaXR0aW5nIHJhZGlvIGRldmljZXMgd2l0aAorbXVsdGlwbGUgdHVuZXJzLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+IEEgY29ubmVjdG9yIG9uIGEgVFYgY2FyZCB0byBsb29wIGJhY2sgdGhlIHJlY2VpdmVkCithdWRpbyBzaWduYWwgdG8gYSBzb3VuZCBjYXJkIGlzIG5vdCBjb25zaWRlcmVkIGFuIGF1ZGlvIG91dHB1dC48L3BhcmE+CisKKyAgICA8cGFyYT5BdWRpbyBhbmQgdmlkZW8gaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBhc3NvY2lhdGVkLiBTZWxlY3RpbmcKK2EgdmlkZW8gc291cmNlIGFsc28gc2VsZWN0cyBhbiBhdWRpbyBzb3VyY2UuIFRoaXMgaXMgbW9zdCBldmlkZW50IHdoZW4KK3RoZSB2aWRlbyBhbmQgYXVkaW8gc291cmNlIGlzIGEgdHVuZXIuIEZ1cnRoZXIgYXVkaW8gY29ubmVjdG9ycyBjYW4KK2NvbWJpbmUgd2l0aCBtb3JlIHRoYW4gb25lIHZpZGVvIGlucHV0IG9yIG91dHB1dC4gQXNzdW1lZCB0d28KK2NvbXBvc2l0ZSB2aWRlbyBpbnB1dHMgYW5kIHR3byBhdWRpbyBpbnB1dHMgZXhpc3QsIHRoZXJlIG1heSBiZSB1cCB0bworZm91ciB2YWxpZCBjb21iaW5hdGlvbnMuIFRoZSByZWxhdGlvbiBvZiB2aWRlbyBhbmQgYXVkaW8gY29ubmVjdG9ycworaXMgZGVmaW5lZCBpbiB0aGUgPHN0cnVjdGZpZWxkPmF1ZGlvc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgdGhlCityZXNwZWN0aXZlICZ2NGwyLWlucHV0OyBvciAmdjRsMi1vdXRwdXQ7LCB3aGVyZSBlYWNoIGJpdCByZXByZXNlbnRzCit0aGUgaW5kZXggbnVtYmVyLCBzdGFydGluZyBhdCB6ZXJvLCBvZiBvbmUgYXVkaW8gaW5wdXQgb3Igb3V0cHV0LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGxlYXJuIGFib3V0IHRoZSBudW1iZXIgYW5kIGF0dHJpYnV0ZXMgb2YgdGhlCithdmFpbGFibGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFwcGxpY2F0aW9ucyBjYW4gZW51bWVyYXRlIHRoZW0gd2l0aCB0aGUKKyZWSURJT0MtRU5VTUFVRElPOyBhbmQgJlZJRElPQy1FTlVNQVVET1VUOyBpb2N0bCwgcmVzcGVjdGl2ZWx5LiBUaGUKKyZ2NGwyLWF1ZGlvOyByZXR1cm5lZCBieSB0aGUgPGNvbnN0YW50PlZJRElPQ19FTlVNQVVESU88L2NvbnN0YW50PiBpb2N0bAorYWxzbyBjb250YWlucyBzaWduYWwgc3RhdHVzIGluZm9ybWF0aW9uIGFwcGxpY2FibGUgd2hlbiB0aGUgY3VycmVudAorYXVkaW8gaW5wdXQgaXMgcXVlcmllZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgJlZJRElPQy1HLUFVRElPOyBhbmQgJlZJRElPQy1HLUFVRE9VVDsgaW9jdGwgcmVwb3J0Cit0aGUgY3VycmVudCBhdWRpbyBpbnB1dCBhbmQgb3V0cHV0LCByZXNwZWN0aXZlbHkuIE5vdGUgdGhhdCwgdW5saWtlCismVklESU9DLUctSU5QVVQ7IGFuZCAmVklESU9DLUctT1VUUFVUOyB0aGVzZSBpb2N0bHMgcmV0dXJuIGEgc3RydWN0dXJlCithcyA8Y29uc3RhbnQ+VklESU9DX0VOVU1BVURJTzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19FTlVNQVVET1VUPC9jb25zdGFudD4gZG8sIG5vdCBqdXN0IGFuIGluZGV4LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHNlbGVjdCBhbiBhdWRpbyBpbnB1dCBhbmQgY2hhbmdlIGl0cyBwcm9wZXJ0aWVzCithcHBsaWNhdGlvbnMgY2FsbCB0aGUgJlZJRElPQy1TLUFVRElPOyBpb2N0bC4gVG8gc2VsZWN0IGFuIGF1ZGlvCitvdXRwdXQgKHdoaWNoIHByZXNlbnRseSBoYXMgbm8gY2hhbmdlYWJsZSBwcm9wZXJ0aWVzKSBhcHBsaWNhdGlvbnMKK2NhbGwgdGhlICZWSURJT0MtUy1BVURPVVQ7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPkRyaXZlcnMgbXVzdCBpbXBsZW1lbnQgYWxsIGlucHV0IGlvY3RscyB3aGVuIHRoZSBkZXZpY2UKK2hhcyBvbmUgb3IgbW9yZSBpbnB1dHMsIGFsbCBvdXRwdXQgaW9jdGxzIHdoZW4gdGhlIGRldmljZSBoYXMgb25lCitvciBtb3JlIG91dHB1dHMuIFdoZW4gdGhlIGRldmljZSBoYXMgYW55IGF1ZGlvIGlucHV0cyBvciBvdXRwdXRzIHRoZQorZHJpdmVyIG11c3Qgc2V0IHRoZSA8Y29uc3RhbnQ+VjRMMl9DQVBfQVVESU88L2NvbnN0YW50PiBmbGFnIGluIHRoZQorJnY0bDItY2FwYWJpbGl0eTsgcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsLjwvcGFyYT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGF1ZGlvIGlucHV0PC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItYXVkaW87IGF1ZGlvOworCittZW1zZXQgKCZhbXA7YXVkaW8sIDAsIHNpemVvZiAoYXVkaW8pKTsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1HLUFVRElPOywgJmFtcDthdWRpbykpIHsKKwlwZXJyb3IgKCJWSURJT0NfR19BVURJTyIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK3ByaW50ZiAoIkN1cnJlbnQgaW5wdXQ6ICVzXG4iLCBhdWRpby5uYW1lKTsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+U3dpdGNoaW5nIHRvIHRoZSBmaXJzdCBhdWRpbyBpbnB1dDwvdGl0bGU+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyZ2NGwyLWF1ZGlvOyBhdWRpbzsKKworbWVtc2V0ICgmYW1wO2F1ZGlvLCAwLCBzaXplb2YgKGF1ZGlvKSk7IC8qIGNsZWFyIGF1ZGlvLm1vZGUsIGF1ZGlvLnJlc2VydmVkICovCisKK2F1ZGlvLmluZGV4ID0gMDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLUFVRElPOywgJmFtcDthdWRpbykpIHsKKwlwZXJyb3IgKCJWSURJT0NfU19BVURJTyIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJ0dW5lciI+CisgICAgPHRpdGxlPlR1bmVycyBhbmQgTW9kdWxhdG9yczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5UdW5lcnM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WaWRlbyBpbnB1dCBkZXZpY2VzIGNhbiBoYXZlIG9uZSBvciBtb3JlIHR1bmVycworZGVtb2R1bGF0aW5nIGEgUkYgc2lnbmFsLiBFYWNoIHR1bmVyIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmUgb3IgbW9yZQordmlkZW8gaW5wdXRzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBSRiBjb25uZWN0b3JzIG9uIHRoZSB0dW5lci4KK1RoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHRoZSByZXNwZWN0aXZlCismdjRsMi1pbnB1dDsgcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtRU5VTUlOUFVUOyBpb2N0bCBpcyBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0lOUFVUX1RZUEVfVFVORVI8L2NvbnN0YW50PiBhbmQgaXRzCis8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgaW5kZXggbnVtYmVyIG9mCit0aGUgdHVuZXIuPC9wYXJhPgorCisgICAgICA8cGFyYT5SYWRpbyBkZXZpY2VzIGhhdmUgZXhhY3RseSBvbmUgdHVuZXIgd2l0aCBpbmRleCB6ZXJvLCBubwordmlkZW8gaW5wdXRzLjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gcXVlcnkgYW5kIGNoYW5nZSB0dW5lciBwcm9wZXJ0aWVzIGFwcGxpY2F0aW9ucyB1c2UgdGhlCismVklESU9DLUctVFVORVI7IGFuZCAmVklESU9DLVMtVFVORVI7IGlvY3RsLCByZXNwZWN0aXZlbHkuIFRoZQorJnY0bDItdHVuZXI7IHJldHVybmVkIGJ5IDxjb25zdGFudD5WSURJT0NfR19UVU5FUjwvY29uc3RhbnQ+IGFsc28KK2NvbnRhaW5zIHNpZ25hbCBzdGF0dXMgaW5mb3JtYXRpb24gYXBwbGljYWJsZSB3aGVuIHRoZSB0dW5lciBvZiB0aGUKK2N1cnJlbnQgdmlkZW8gaW5wdXQsIG9yIGEgcmFkaW8gdHVuZXIgaXMgcXVlcmllZC4gTm90ZSB0aGF0Cis8Y29uc3RhbnQ+VklESU9DX1NfVFVORVI8L2NvbnN0YW50PiBkb2VzIG5vdCBzd2l0Y2ggdGhlIGN1cnJlbnQgdHVuZXIsCit3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYXQgYWxsLiBUaGUgdHVuZXIgaXMgc29sZWx5IGRldGVybWluZWQgYnkKK3RoZSBjdXJyZW50IHZpZGVvIGlucHV0LiBEcml2ZXJzIG11c3Qgc3VwcG9ydCBib3RoIGlvY3RscyBhbmQgc2V0IHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX1RVTkVSPC9jb25zdGFudD4gZmxhZyBpbiB0aGUgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bCB3aGVuIHRoZSBkZXZpY2UgaGFzIG9uZSBvcgorbW9yZSB0dW5lcnMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPk1vZHVsYXRvcnM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WaWRlbyBvdXRwdXQgZGV2aWNlcyBjYW4gaGF2ZSBvbmUgb3IgbW9yZSBtb2R1bGF0b3JzLCB1aCwKK21vZHVsYXRpbmcgYSB2aWRlbyBzaWduYWwgZm9yIHJhZGlhdGlvbiBvciBjb25uZWN0aW9uIHRvIHRoZSBhbnRlbm5hCitpbnB1dCBvZiBhIFRWIHNldCBvciB2aWRlbyByZWNvcmRlci4gRWFjaCBtb2R1bGF0b3IgaXMgYXNzb2NpYXRlZCB3aXRoCitvbmUgb3IgbW9yZSB2aWRlbyBvdXRwdXRzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBSRiBjb25uZWN0b3JzIG9uCit0aGUgbW9kdWxhdG9yLiBUaGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0aGUKK3Jlc3BlY3RpdmUgJnY0bDItb3V0cHV0OyByZXR1cm5lZCBieSB0aGUgJlZJRElPQy1FTlVNT1VUUFVUOyBpb2N0bCBpcworc2V0IHRvIDxjb25zdGFudD5WNEwyX09VVFBVVF9UWVBFX01PRFVMQVRPUjwvY29uc3RhbnQ+IGFuZCBpdHMKKzxzdHJ1Y3RmaWVsZD5tb2R1bGF0b3I8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgaW5kZXggbnVtYmVyCitvZiB0aGUgbW9kdWxhdG9yLiBUaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIHJhZGlvIG91dHB1dAorZGV2aWNlcy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRvIHF1ZXJ5IGFuZCBjaGFuZ2UgbW9kdWxhdG9yIHByb3BlcnRpZXMgYXBwbGljYXRpb25zIHVzZQordGhlICZWSURJT0MtRy1NT0RVTEFUT1I7IGFuZCAmVklESU9DLVMtTU9EVUxBVE9SOyBpb2N0bC4gTm90ZSB0aGF0Cis8Y29uc3RhbnQ+VklESU9DX1NfTU9EVUxBVE9SPC9jb25zdGFudD4gZG9lcyBub3Qgc3dpdGNoIHRoZSBjdXJyZW50Cittb2R1bGF0b3IsIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBhdCBhbGwuIFRoZSBtb2R1bGF0b3IgaXMgc29sZWx5CitkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvIG91dHB1dC4gRHJpdmVycyBtdXN0IHN1cHBvcnQgYm90aAoraW9jdGxzIGFuZCBzZXQgdGhlIDxjb25zdGFudD5WNEwyX0NBUF9NT0RVTEFUT1I8L2NvbnN0YW50PiBmbGFnIGluCit0aGUgJnY0bDItY2FwYWJpbGl0eTsgcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsIHdoZW4gdGhlCitkZXZpY2UgaGFzIG9uZSBvciBtb3JlIG1vZHVsYXRvcnMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlJhZGlvIEZyZXF1ZW5jeTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRvIGdldCBhbmQgc2V0IHRoZSB0dW5lciBvciBtb2R1bGF0b3IgcmFkaW8gZnJlcXVlbmN5CithcHBsaWNhdGlvbnMgdXNlIHRoZSAmVklESU9DLUctRlJFUVVFTkNZOyBhbmQgJlZJRElPQy1TLUZSRVFVRU5DWTsKK2lvY3RsIHdoaWNoIGJvdGggdGFrZSBhIHBvaW50ZXIgdG8gYSAmdjRsMi1mcmVxdWVuY3k7LiBUaGVzZSBpb2N0bHMKK2FyZSB1c2VkIGZvciBUViBhbmQgcmFkaW8gZGV2aWNlcyBhbGlrZS4gRHJpdmVycyBtdXN0IHN1cHBvcnQgYm90aAoraW9jdGxzIHdoZW4gdGhlIHR1bmVyIG9yIG1vZHVsYXRvciBpb2N0bHMgYXJlIHN1cHBvcnRlZCwgb3IKK3doZW4gdGhlIGRldmljZSBpcyBhIHJhZGlvIGRldmljZS48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InN0YW5kYXJkIj4KKyAgICA8dGl0bGU+VmlkZW8gU3RhbmRhcmRzPC90aXRsZT4KKworICAgIDxwYXJhPlZpZGVvIGRldmljZXMgdHlwaWNhbGx5IHN1cHBvcnQgb25lIG9yIG1vcmUgZGlmZmVyZW50IHZpZGVvCitzdGFuZGFyZHMgb3IgdmFyaWF0aW9ucyBvZiBzdGFuZGFyZHMuIEVhY2ggdmlkZW8gaW5wdXQgYW5kIG91dHB1dCBtYXkKK3N1cHBvcnQgYW5vdGhlciBzZXQgb2Ygc3RhbmRhcmRzLiBUaGlzIHNldCBpcyByZXBvcnRlZCBieSB0aGUKKzxzdHJ1Y3RmaWVsZD5zdGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1pbnB1dDsgYW5kCismdjRsMi1vdXRwdXQ7IHJldHVybmVkIGJ5IHRoZSAmVklESU9DLUVOVU1JTlBVVDsgYW5kCismVklESU9DLUVOVU1PVVRQVVQ7IGlvY3RsLCByZXNwZWN0aXZlbHkuPC9wYXJhPgorCisgICAgPHBhcmE+VjRMMiBkZWZpbmVzIG9uZSBiaXQgZm9yIGVhY2ggYW5hbG9nIHZpZGVvIHN0YW5kYXJkCitjdXJyZW50bHkgaW4gdXNlIHdvcmxkd2lkZSwgYW5kIHNldHMgYXNpZGUgYml0cyBmb3IgZHJpdmVyIGRlZmluZWQKK3N0YW5kYXJkcywgJmVnOyBoeWJyaWQgc3RhbmRhcmRzIHRvIHdhdGNoIE5UU0MgdmlkZW8gdGFwZXMgb24gUEFMIFRWcworYW5kIHZpY2UgdmVyc2EuIEFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZSBwcmVkZWZpbmVkIGJpdHMgdG8gc2VsZWN0IGEKK3BhcnRpY3VsYXIgc3RhbmRhcmQsIGFsdGhvdWdoIHByZXNlbnRpbmcgdGhlIHVzZXIgYSBtZW51IG9mIHN1cHBvcnRlZAorc3RhbmRhcmRzIGlzIHByZWZlcnJlZC4gVG8gZW51bWVyYXRlIGFuZCBxdWVyeSB0aGUgYXR0cmlidXRlcyBvZiB0aGUKK3N1cHBvcnRlZCBzdGFuZGFyZHMgYXBwbGljYXRpb25zIHVzZSB0aGUgJlZJRElPQy1FTlVNU1REOyBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5NYW55IG9mIHRoZSBkZWZpbmVkIHN0YW5kYXJkcyBhcmUgYWN0dWFsbHkganVzdCB2YXJpYXRpb25zCitvZiBhIGZldyBtYWpvciBzdGFuZGFyZHMuIFRoZSBoYXJkd2FyZSBtYXkgaW4gZmFjdCBub3QgZGlzdGluZ3Vpc2gKK2JldHdlZW4gdGhlbSwgb3IgZG8gc28gaW50ZXJuYWwgYW5kIHN3aXRjaCBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcmUKK2VudW1lcmF0ZWQgc3RhbmRhcmRzIGFsc28gY29udGFpbiBzZXRzIG9mIG9uZSBvciBtb3JlIHN0YW5kYXJkCitiaXRzLjwvcGFyYT4KKworICAgIDxwYXJhPkFzc3VtZSBhIGh5cG90aGV0aWMgdHVuZXIgY2FwYWJsZSBvZiBkZW1vZHVsYXRpbmcgQi9QQUwsCitHL1BBTCBhbmQgSS9QQUwgc2lnbmFscy4gVGhlIGZpcnN0IGVudW1lcmF0ZWQgc3RhbmRhcmQgaXMgYSBzZXQgb2YgQgorYW5kIEcvUEFMLCBzd2l0Y2hlZCBhdXRvbWF0aWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQgcmFkaW8KK2ZyZXF1ZW5jeSBpbiBVSEYgb3IgVkhGIGJhbmQuIEVudW1lcmF0aW9uIGdpdmVzIGEgIlBBTC1CL0ciIG9yICJQQUwtSSIKK2Nob2ljZS4gU2ltaWxhciBhIENvbXBvc2l0ZSBpbnB1dCBtYXkgY29sbGFwc2Ugc3RhbmRhcmRzLCBlbnVtZXJhdGluZworIlBBTC1CL0cvSC9JIiwgIk5UU0MtTSIgYW5kICJTRUNBTS1EL0siLjxmb290bm90ZT4KKwk8cGFyYT5Tb21lIHVzZXJzIGFyZSBhbHJlYWR5IGNvbmZ1c2VkIGJ5IHRlY2huaWNhbCB0ZXJtcyBQQUwsCitOVFNDIGFuZCBTRUNBTS4gVGhlcmUgaXMgbm8gcG9pbnQgYXNraW5nIHRoZW0gdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorQiwgRywgRCwgb3IgSyB3aGVuIHRoZSBzb2Z0d2FyZSBvciBoYXJkd2FyZSBjYW4gZG8gdGhhdAorYXV0b21hdGljYWxseS48L3BhcmE+CisgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBxdWVyeSBhbmQgc2VsZWN0IHRoZSBzdGFuZGFyZCB1c2VkIGJ5IHRoZSBjdXJyZW50IHZpZGVvCitpbnB1dCBvciBvdXRwdXQgYXBwbGljYXRpb25zIGNhbGwgdGhlICZWSURJT0MtRy1TVEQ7IGFuZAorJlZJRElPQy1TLVNURDsgaW9jdGwsIHJlc3BlY3RpdmVseS4gVGhlIDxlbXBoYXNpcz5yZWNlaXZlZDwvZW1waGFzaXM+CitzdGFuZGFyZCBjYW4gYmUgc2Vuc2VkIHdpdGggdGhlICZWSURJT0MtUVVFUllTVEQ7IGlvY3RsLiBOb3RlIHBhcmFtZXRlciBvZiBhbGwgdGhlc2UgaW9jdGxzIGlzIGEgcG9pbnRlciB0byBhICZ2NGwyLXN0ZC1pZDsgdHlwZSAoYSBzdGFuZGFyZCBzZXQpLCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYW4gaW5kZXggaW50byB0aGUgc3RhbmRhcmQgZW51bWVyYXRpb24uPGZvb3Rub3RlPgorCTxwYXJhPkFuIGFsdGVybmF0aXZlIHRvIHRoZSBjdXJyZW50IHNjaGVtZSBpcyB0byB1c2UgcG9pbnRlcnMKK3RvIGluZGljZXMgYXMgYXJndW1lbnRzIG9mIDxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19TVEQ8L2NvbnN0YW50PiwgdGhlICZ2NGwyLWlucHV0OyBhbmQKKyZ2NGwyLW91dHB1dDsgPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdvdWxkIGJlIGEgc2V0IG9mCitpbmRpY2VzIGxpa2UgPHN0cnVjdGZpZWxkPmF1ZGlvc2V0PC9zdHJ1Y3RmaWVsZD4uPC9wYXJhPgorCTxwYXJhPkluZGljZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQVBJCithbmQgaWRlbnRpZnkgdGhlIHN0YW5kYXJkIHVuYW1iaWd1b3VzbHkuIEluIHRoZSBwcmVzZW50IHNjaGVtZSBvZgordGhpbmdzIGFuIGVudW1lcmF0ZWQgc3RhbmRhcmQgaXMgbG9va2VkIHVwIGJ5ICZ2NGwyLXN0ZC1pZDsuIE5vdyB0aGUKK3N0YW5kYXJkcyBzdXBwb3J0ZWQgYnkgdGhlIGlucHV0cyBvZiBhIGRldmljZSBjYW4gb3ZlcmxhcC4gSnVzdAorYXNzdW1lIHRoZSB0dW5lciBhbmQgY29tcG9zaXRlIGlucHV0IGluIHRoZSBleGFtcGxlIGFib3ZlIGJvdGgKK2V4aXN0IG9uIGEgZGV2aWNlLiBBbiBlbnVtZXJhdGlvbiBvZiAiUEFMLUIvRyIsICJQQUwtSC9JIiBzdWdnZXN0cworYSBjaG9pY2Ugd2hpY2ggZG9lcyBub3QgZXhpc3QuIFdlIGNhbm5vdCBtZXJnZSBvciBvbWl0IHNldHMsIGJlY2F1c2UKK2FwcGxpY2F0aW9ucyB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCB0aGUgc3RhbmRhcmRzIHJlcG9ydGVkIGJ5Cis8Y29uc3RhbnQ+VklESU9DX0dfU1REPC9jb25zdGFudD4uIFRoYXQgbGVhdmVzIHNlcGFyYXRlIGVudW1lcmF0aW9ucworZm9yIGVhY2ggaW5wdXQuIEFsc28gc2VsZWN0aW5nIGEgc3RhbmRhcmQgYnkgJnY0bDItc3RkLWlkOyBjYW4gYmUKK2FtYmlndW91cy4gQWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlzIHRoYXQgYXBwbGljYXRpb25zIG5lZWQgbm90CitpZGVudGlmeSB0aGUgc3RhbmRhcmQgaW5kaXJlY3RseSwgYWZ0ZXIgZW51bWVyYXRpbmcuPC9wYXJhPjxwYXJhPlNvIGluCitzdW1tYXJ5LCB0aGUgbG9va3VwIGl0c2VsZiBpcyB1bmF2b2lkYWJsZS4gVGhlIGRpZmZlcmVuY2UgaXMgb25seQord2hldGhlciB0aGUgbG9va3VwIGlzIG5lY2Vzc2FyeSB0byBmaW5kIGFuIGVudW1lcmF0ZWQgc3RhbmRhcmQgb3IgdG8KK3N3aXRjaCB0byBhIHN0YW5kYXJkIGJ5ICZ2NGwyLXN0ZC1pZDsuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT4gRHJpdmVycyBtdXN0IGltcGxlbWVudCBhbGwgdmlkZW8gc3RhbmRhcmQgaW9jdGxzCit3aGVuIHRoZSBkZXZpY2UgaGFzIG9uZSBvciBtb3JlIHZpZGVvIGlucHV0cyBvciBvdXRwdXRzLjwvcGFyYT4KKworICAgIDxwYXJhPlNwZWNpYWwgcnVsZXMgYXBwbHkgdG8gVVNCIGNhbWVyYXMgd2hlcmUgdGhlIG5vdGlvbiBvZiB2aWRlbworc3RhbmRhcmRzIG1ha2VzIGxpdHRsZSBzZW5zZS4gTW9yZSBnZW5lcmFsbHkgYW55IGNhcHR1cmUgZGV2aWNlLAorb3V0cHV0IGRldmljZXMgYWNjb3JkaW5nbHksIHdoaWNoIGlzIDxpdGVtaXplZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+aW5jYXBhYmxlIG9mIGNhcHR1cmluZyBmaWVsZHMgb3IgZnJhbWVzIGF0IHRoZSBub21pbmFsCityYXRlIG9mIHRoZSB2aWRlbyBzdGFuZGFyZCwgb3I8L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT53aGVyZSA8bGluayBsaW5rZW5kPSJidWZmZXIiPnRpbWVzdGFtcHM8L2xpbms+IHJlZmVyCit0byB0aGUgaW5zdGFudCB0aGUgZmllbGQgb3IgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZSBkcml2ZXIsIG5vdCB0aGUKK2NhcHR1cmUgdGltZSwgb3I8L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT53aGVyZSA8bGluayBsaW5rZW5kPSJidWZmZXIiPnNlcXVlbmNlIG51bWJlcnM8L2xpbms+CityZWZlciB0byB0aGUgZnJhbWVzIHJlY2VpdmVkIGJ5IHRoZSBkcml2ZXIsIG5vdCB0aGUgY2FwdHVyZWQKK2ZyYW1lcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PiBIZXJlIHRoZSBkcml2ZXIgc2hhbGwgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWlucHV0OyBhbmQgJnY0bDItb3V0cHV0OwordG8gemVybywgdGhlIDxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfU19TVEQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfUVVFUllTVEQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfRU5VTVNURDwvY29uc3RhbnQ+IGlvY3RscyBzaGFsbCByZXR1cm4gdGhlCismRUlOVkFMOy48Zm9vdG5vdGU+CisJPHBhcmE+U2VlIDx4cmVmIGxpbmtlbmQ9ImJ1ZmZlciIgLz4gZm9yIGEgcmF0aW9uYWxlLiBQcm9iYWJseQorZXZlbiBVU0IgY2FtZXJhcyBmb2xsb3cgc29tZSB3ZWxsIGtub3duIHZpZGVvIHN0YW5kYXJkLiBJdCBtaWdodCBoYXZlCitiZWVuIGJldHRlciB0byBleHBsaWNpdGx5IGluZGljYXRlIGVsc2V3aGVyZSBpZiBhIGRldmljZSBjYW5ub3QgbGl2ZQordXAgdG8gbm9ybWFsIGV4cGVjdGF0aW9ucywgaW5zdGVhZCBvZiB0aGlzIGV4Y2VwdGlvbi48L3BhcmE+CisJICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+SW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQ8L3RpdGxlPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CismdjRsMi1zdGQtaWQ7IHN0ZF9pZDsKKyZ2NGwyLXN0YW5kYXJkOyBzdGFuZGFyZDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1HLVNURDssICZhbXA7c3RkX2lkKSkgeworCS8qIE5vdGUgd2hlbiBWSURJT0NfRU5VTVNURCBhbHdheXMgcmV0dXJucyBFSU5WQUwgdGhpcworCSAgIGlzIG5vIHZpZGVvIGRldmljZSBvciBpdCBmYWxscyB1bmRlciB0aGUgVVNCIGV4Y2VwdGlvbiwKKwkgICBhbmQgVklESU9DX0dfU1REIHJldHVybmluZyBFSU5WQUwgaXMgbm8gZXJyb3IuICovCisKKwlwZXJyb3IgKCJWSURJT0NfR19TVEQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCittZW1zZXQgKCZhbXA7c3RhbmRhcmQsIDAsIHNpemVvZiAoc3RhbmRhcmQpKTsKK3N0YW5kYXJkLmluZGV4ID0gMDsKKword2hpbGUgKDAgPT0gaW9jdGwgKGZkLCAmVklESU9DLUVOVU1TVEQ7LCAmYW1wO3N0YW5kYXJkKSkgeworCWlmIChzdGFuZGFyZC5pZCAmYW1wOyBzdGRfaWQpIHsKKwkgICAgICAgcHJpbnRmICgiQ3VycmVudCB2aWRlbyBzdGFuZGFyZDogJXNcbiIsIHN0YW5kYXJkLm5hbWUpOworCSAgICAgICBleGl0IChFWElUX1NVQ0NFU1MpOworCX0KKworCXN0YW5kYXJkLmluZGV4Kys7Cit9CisKKy8qIEVJTlZBTCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgZW51bWVyYXRpb24sIHdoaWNoIGNhbm5vdCBiZQorICAgZW1wdHkgdW5sZXNzIHRoaXMgZGV2aWNlIGZhbGxzIHVuZGVyIHRoZSBVU0IgZXhjZXB0aW9uLiAqLworCitpZiAoZXJybm8gPT0gRUlOVkFMIHx8IHN0YW5kYXJkLmluZGV4ID09IDApIHsKKwlwZXJyb3IgKCJWSURJT0NfRU5VTVNURCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkxpc3RpbmcgdGhlIHZpZGVvIHN0YW5kYXJkcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKK2lucHV0PC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItaW5wdXQ7IGlucHV0OworJnY0bDItc3RhbmRhcmQ7IHN0YW5kYXJkOworCittZW1zZXQgKCZhbXA7aW5wdXQsIDAsIHNpemVvZiAoaW5wdXQpKTsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1HLUlOUFVUOywgJmFtcDtpbnB1dC5pbmRleCkpIHsKKwlwZXJyb3IgKCJWSURJT0NfR19JTlBVVCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK2lmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtRU5VTUlOUFVUOywgJmFtcDtpbnB1dCkpIHsKKwlwZXJyb3IgKCJWSURJT0NfRU5VTV9JTlBVVCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK3ByaW50ZiAoIkN1cnJlbnQgaW5wdXQgJXMgc3VwcG9ydHM6XG4iLCBpbnB1dC5uYW1lKTsKKworbWVtc2V0ICgmYW1wO3N0YW5kYXJkLCAwLCBzaXplb2YgKHN0YW5kYXJkKSk7CitzdGFuZGFyZC5pbmRleCA9IDA7CisKK3doaWxlICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1FTlVNU1REOywgJmFtcDtzdGFuZGFyZCkpIHsKKwlpZiAoc3RhbmRhcmQuaWQgJmFtcDsgaW5wdXQuc3RkKQorCQlwcmludGYgKCIlc1xuIiwgc3RhbmRhcmQubmFtZSk7CisKKwlzdGFuZGFyZC5pbmRleCsrOworfQorCisvKiBFSU5WQUwgaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIGVudW1lcmF0aW9uLCB3aGljaCBjYW5ub3QgYmUKKyAgIGVtcHR5IHVubGVzcyB0aGlzIGRldmljZSBmYWxscyB1bmRlciB0aGUgVVNCIGV4Y2VwdGlvbi4gKi8KKworaWYgKGVycm5vICE9IEVJTlZBTCB8fCBzdGFuZGFyZC5pbmRleCA9PSAwKSB7CisJcGVycm9yICgiVklESU9DX0VOVU1TVEQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDx0aXRsZT5TZWxlY3RpbmcgYSBuZXcgdmlkZW8gc3RhbmRhcmQ8L3RpdGxlPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CismdjRsMi1pbnB1dDsgaW5wdXQ7CismdjRsMi1zdGQtaWQ7IHN0ZF9pZDsKKworbWVtc2V0ICgmYW1wO2lucHV0LCAwLCBzaXplb2YgKGlucHV0KSk7CisKK2lmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtRy1JTlBVVDssICZhbXA7aW5wdXQuaW5kZXgpKSB7CisJcGVycm9yICgiVklESU9DX0dfSU5QVVQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUVOVU1JTlBVVDssICZhbXA7aW5wdXQpKSB7CisJcGVycm9yICgiVklESU9DX0VOVU1fSU5QVVQiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitpZiAoMCA9PSAoaW5wdXQuc3RkICZhbXA7IFY0TDJfU1REX1BBTF9CRykpIHsKKwlmcHJpbnRmIChzdGRlcnIsICJPb3BzLiBCL0cgUEFMIGlzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCisvKiBOb3RlIHRoaXMgaXMgYWxzbyBzdXBwb3NlZCB0byB3b3JrIHdoZW4gb25seSBCCisgICA8ZW1waGFzaXM+b3I8L2VtcGhhc2lzPiBHL1BBTCBpcyBzdXBwb3J0ZWQuICovCisKK3N0ZF9pZCA9IFY0TDJfU1REX1BBTF9CRzsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLVNURDssICZhbXA7c3RkX2lkKSkgeworCXBlcnJvciAoIlZJRElPQ19TX1NURCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKyAgPC9zZWN0aW9uPgorCisgICZzdWItY29udHJvbHM7CisKKyAgPHNlY3Rpb24gaWQ9ImZvcm1hdCI+CisgICAgPHRpdGxlPkRhdGEgRm9ybWF0czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5EYXRhIEZvcm1hdCBOZWdvdGlhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkRpZmZlcmVudCBkZXZpY2VzIGV4Y2hhbmdlIGRpZmZlcmVudCBraW5kcyBvZiBkYXRhIHdpdGgKK2FwcGxpY2F0aW9ucywgZm9yIGV4YW1wbGUgdmlkZW8gaW1hZ2VzLCByYXcgb3Igc2xpY2VkIFZCSSBkYXRhLCBSRFMKK2RhdGFncmFtcy4gRXZlbiB3aXRoaW4gb25lIGtpbmQgbWFueSBkaWZmZXJlbnQgZm9ybWF0cyBhcmUgcG9zc2libGUsCitpbiBwYXJ0aWN1bGFyIGFuIGFidW5kYW5jZSBvZiBpbWFnZSBmb3JtYXRzLiBBbHRob3VnaCBkcml2ZXJzIG11c3QKK3Byb3ZpZGUgYSBkZWZhdWx0IGFuZCB0aGUgc2VsZWN0aW9uIHBlcnNpc3RzIGFjcm9zcyBjbG9zaW5nIGFuZAorcmVvcGVuaW5nIGEgZGV2aWNlLCBhcHBsaWNhdGlvbnMgc2hvdWxkIGFsd2F5cyBuZWdvdGlhdGUgYSBkYXRhIGZvcm1hdAorYmVmb3JlIGVuZ2FnaW5nIGluIGRhdGEgZXhjaGFuZ2UuIE5lZ290aWF0aW9uIG1lYW5zIHRoZSBhcHBsaWNhdGlvbgorYXNrcyBmb3IgYSBwYXJ0aWN1bGFyIGZvcm1hdCBhbmQgdGhlIGRyaXZlciBzZWxlY3RzIGFuZCByZXBvcnRzIHRoZQorYmVzdCB0aGUgaGFyZHdhcmUgY2FuIGRvIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuIE9mIGNvdXJzZQorYXBwbGljYXRpb25zIGNhbiBhbHNvIGp1c3QgcXVlcnkgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLjwvcGFyYT4KKworICAgICAgPHBhcmE+QSBzaW5nbGUgbWVjaGFuaXNtIGV4aXN0cyB0byBuZWdvdGlhdGUgYWxsIGRhdGEgZm9ybWF0cwordXNpbmcgdGhlIGFnZ3JlZ2F0ZSAmdjRsMi1mb3JtYXQ7IGFuZCB0aGUgJlZJRElPQy1HLUZNVDsgYW5kCismVklESU9DLVMtRk1UOyBpb2N0bHMuIEFkZGl0aW9uYWxseSB0aGUgJlZJRElPQy1UUlktRk1UOyBpb2N0bCBjYW4gYmUKK3VzZWQgdG8gZXhhbWluZSB3aGF0IHRoZSBoYXJkd2FyZSA8ZW1waGFzaXM+Y291bGQ8L2VtcGhhc2lzPiBkbywKK3dpdGhvdXQgYWN0dWFsbHkgc2VsZWN0aW5nIGEgbmV3IGRhdGEgZm9ybWF0LiBUaGUgZGF0YSBmb3JtYXRzCitzdXBwb3J0ZWQgYnkgdGhlIFY0TDIgQVBJIGFyZSBjb3ZlcmVkIGluIHRoZSByZXNwZWN0aXZlIGRldmljZSBzZWN0aW9uCitpbiA8eHJlZiBsaW5rZW5kPSJkZXZpY2VzIiAvPi4gRm9yIGEgY2xvc2VyIGxvb2sgYXQgaW1hZ2UgZm9ybWF0cyBzZWUKKzx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIGlzIGEgbWFqb3IKK3R1cm5pbmctcG9pbnQgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBQcmlvciB0byB0aGlzIHBvaW50CittdWx0aXBsZSBwYW5lbCBhcHBsaWNhdGlvbnMgY2FuIGFjY2VzcyB0aGUgc2FtZSBkZXZpY2UgY29uY3VycmVudGx5IHRvCitzZWxlY3QgdGhlIGN1cnJlbnQgaW5wdXQsIGNoYW5nZSBjb250cm9scyBvciBtb2RpZnkgb3RoZXIgcHJvcGVydGllcy4KK1RoZSBmaXJzdCA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gYXNzaWducyBhIGxvZ2ljYWwgc3RyZWFtCisodmlkZW8gZGF0YSwgVkJJIGRhdGEgZXRjLikgZXhjbHVzaXZlbHkgdG8gb25lIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+CisKKyAgICAgIDxwYXJhPkV4Y2x1c2l2ZSBtZWFucyBubyBvdGhlciBhcHBsaWNhdGlvbiwgbW9yZSBwcmVjaXNlbHkgbm8KK290aGVyIGZpbGUgZGVzY3JpcHRvciwgY2FuIGdyYWIgdGhpcyBzdHJlYW0gb3IgY2hhbmdlIGRldmljZQorcHJvcGVydGllcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbmVnb3RpYXRlZCBwYXJhbWV0ZXJzLiBBIHZpZGVvCitzdGFuZGFyZCBjaGFuZ2UgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIG5ldyBzdGFuZGFyZCB1c2VzIGEgZGlmZmVyZW50CitudW1iZXIgb2Ygc2NhbiBsaW5lcywgY2FuIGludmFsaWRhdGUgdGhlIHNlbGVjdGVkIGltYWdlIGZvcm1hdC4KK1RoZXJlZm9yZSBvbmx5IHRoZSBmaWxlIGRlc2NyaXB0b3Igb3duaW5nIHRoZSBzdHJlYW0gY2FuIG1ha2UKK2ludmFsaWRhdGluZyBjaGFuZ2VzLiBBY2NvcmRpbmdseSBtdWx0aXBsZSBmaWxlIGRlc2NyaXB0b3JzIHdoaWNoCitncmFiYmVkIGRpZmZlcmVudCBsb2dpY2FsIHN0cmVhbXMgcHJldmVudCBlYWNoIG90aGVyIGZyb20gaW50ZXJmZXJpbmcKK3dpdGggdGhlaXIgc2V0dGluZ3MuIFdoZW4gZm9yIGV4YW1wbGUgdmlkZW8gb3ZlcmxheSBpcyBhYm91dCB0byBzdGFydAorb3IgYWxyZWFkeSBpbiBwcm9ncmVzcywgc2ltdWx0YW5lb3VzIHZpZGVvIGNhcHR1cmluZyBtYXkgYmUgcmVzdHJpY3RlZAordG8gdGhlIHNhbWUgY3JvcHBpbmcgYW5kIGltYWdlIHNpemUuPC9wYXJhPgorCisgICAgICA8cGFyYT5XaGVuIGFwcGxpY2F0aW9ucyBvbWl0IHRoZQorPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIGl0cyBsb2NraW5nIHNpZGUgZWZmZWN0cyBhcmUKK2ltcGxpZWQgYnkgdGhlIG5leHQgc3RlcCwgdGhlIHNlbGVjdGlvbiBvZiBhbiBJL08gbWV0aG9kIHdpdGggdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsIG9yIGltcGxpY2l0IHdpdGggdGhlIGZpcnN0ICZmdW5jLXJlYWQ7IG9yCismZnVuYy13cml0ZTsgY2FsbC48L3BhcmE+CisKKyAgICAgIDxwYXJhPkdlbmVyYWxseSBvbmx5IG9uZSBsb2dpY2FsIHN0cmVhbSBjYW4gYmUgYXNzaWduZWQgdG8gYQorZmlsZSBkZXNjcmlwdG9yLCB0aGUgZXhjZXB0aW9uIGJlaW5nIGRyaXZlcnMgcGVybWl0dGluZyBzaW11bHRhbmVvdXMKK3ZpZGVvIGNhcHR1cmluZyBhbmQgb3ZlcmxheSB1c2luZyB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggVjRMIGFuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIuIFN3aXRjaGluZyB0aGUKK2xvZ2ljYWwgc3RyZWFtIG9yIHJldHVybmluZyBpbnRvICJwYW5lbCBtb2RlIiBpcyBwb3NzaWJsZSBieSBjbG9zaW5nCithbmQgcmVvcGVuaW5nIHRoZSBkZXZpY2UuIERyaXZlcnMgPGVtcGhhc2lzPm1heTwvZW1waGFzaXM+IHN1cHBvcnQgYQorc3dpdGNoIHVzaW5nIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50Pi48L3BhcmE+CisKKyAgICAgIDxwYXJhPkFsbCBkcml2ZXJzIGV4Y2hhbmdpbmcgZGF0YSB3aXRoCithcHBsaWNhdGlvbnMgbXVzdCBzdXBwb3J0IHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwuIEltcGxlbWVudGF0aW9uIG9mIHRoZQorPGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD4gaXMgaGlnaGx5IHJlY29tbWVuZGVkIGJ1dAorb3B0aW9uYWwuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkltYWdlIEZvcm1hdCBFbnVtZXJhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkFwYXJ0IG9mIHRoZSBnZW5lcmljIGZvcm1hdCBuZWdvdGlhdGlvbiBmdW5jdGlvbnMKK2Egc3BlY2lhbCBpb2N0bCB0byBlbnVtZXJhdGUgYWxsIGltYWdlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHZpZGVvCitjYXB0dXJlLCBvdmVybGF5IG9yIG91dHB1dCBkZXZpY2VzIGlzIGF2YWlsYWJsZS48Zm9vdG5vdGU+CisJICA8cGFyYT5FbnVtZXJhdGluZyBmb3JtYXRzIGFuIGFwcGxpY2F0aW9uIGhhcyBubyBhLXByaW9yaQora25vd2xlZGdlIG9mIChvdGhlcndpc2UgaXQgY291bGQgZXhwbGljaXRseSBhc2sgZm9yIHRoZW0gYW5kIG5lZWQgbm90CitlbnVtZXJhdGUpIHNlZW1zIHVzZWxlc3MsIGJ1dCB0aGVyZSBhcmUgYXBwbGljYXRpb25zIHNlcnZpbmcgYXMgcHJveHkKK2JldHdlZW4gZHJpdmVycyBhbmQgdGhlIGFjdHVhbCB2aWRlbyBhcHBsaWNhdGlvbnMgZm9yIHdoaWNoIHRoaXMgaXMKK3VzZWZ1bC48L3BhcmE+CisJPC9mb290bm90ZT48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSAmVklESU9DLUVOVU0tRk1UOyBpb2N0bCBtdXN0IGJlIHN1cHBvcnRlZAorYnkgYWxsIGRyaXZlcnMgZXhjaGFuZ2luZyBpbWFnZSBkYXRhIHdpdGggYXBwbGljYXRpb25zLjwvcGFyYT4KKworICAgICAgPGltcG9ydGFudD4KKwk8cGFyYT5Ecml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gY29udmVydCBpbWFnZSBmb3JtYXRzIGluCitrZXJuZWwgc3BhY2UuIFRoZXkgbXVzdCBlbnVtZXJhdGUgb25seSBmb3JtYXRzIGRpcmVjdGx5IHN1cHBvcnRlZCBieQordGhlIGhhcmR3YXJlLiBJZiBuZWNlc3NhcnkgZHJpdmVyIHdyaXRlcnMgc2hvdWxkIHB1Ymxpc2ggYW4gZXhhbXBsZQorY29udmVyc2lvbiByb3V0aW5lIG9yIGxpYnJhcnkgZm9yIGludGVncmF0aW9uIGludG8gYXBwbGljYXRpb25zLjwvcGFyYT4KKyAgICAgIDwvaW1wb3J0YW50PgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJjcm9wIj4KKyAgICA8dGl0bGU+SW1hZ2UgQ3JvcHBpbmcsIEluc2VydGlvbiBhbmQgU2NhbGluZzwvdGl0bGU+CisKKyAgICA8cGFyYT5Tb21lIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyBjYW4gc2FtcGxlIGEgc3Vic2VjdGlvbiBvZiB0aGUKK3BpY3R1cmUgYW5kIHNocmluayBvciBlbmxhcmdlIGl0IHRvIGFuIGltYWdlIG9mIGFyYml0cmFyeSBzaXplLiBXZQorY2FsbCB0aGVzZSBhYmlsaXRpZXMgY3JvcHBpbmcgYW5kIHNjYWxpbmcuIFNvbWUgdmlkZW8gb3V0cHV0IGRldmljZXMKK2NhbiBzY2FsZSBhbiBpbWFnZSB1cCBvciBkb3duIGFuZCBpbnNlcnQgaXQgYXQgYW4gYXJiaXRyYXJ5IHNjYW4gbGluZQorYW5kIGhvcml6b250YWwgb2Zmc2V0IGludG8gYSB2aWRlbyBzaWduYWwuPC9wYXJhPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBBUEkgdG8gc2VsZWN0IGFuIGFyZWEgaW4KK3RoZSB2aWRlbyBzaWduYWwsIHF1ZXJ5IHRoZSBkZWZhdWx0IGFyZWEgYW5kIHRoZSBoYXJkd2FyZSBsaW1pdHMuCis8ZW1waGFzaXM+RGVzcGl0ZSB0aGVpciBuYW1lLCB0aGUgJlZJRElPQy1DUk9QQ0FQOywgJlZJRElPQy1HLUNST1A7CithbmQgJlZJRElPQy1TLUNST1A7IGlvY3RscyBhcHBseSB0byBpbnB1dCBhcyB3ZWxsIGFzIG91dHB1dAorZGV2aWNlcy48L2VtcGhhc2lzPjwvcGFyYT4KKworICAgIDxwYXJhPlNjYWxpbmcgcmVxdWlyZXMgYSBzb3VyY2UgYW5kIGEgdGFyZ2V0LiBPbiBhIHZpZGVvIGNhcHR1cmUKK29yIG92ZXJsYXkgZGV2aWNlIHRoZSBzb3VyY2UgaXMgdGhlIHZpZGVvIHNpZ25hbCwgYW5kIHRoZSBjcm9wcGluZworaW9jdGxzIGRldGVybWluZSB0aGUgYXJlYSBhY3R1YWxseSBzYW1wbGVkLiBUaGUgdGFyZ2V0IGFyZSBpbWFnZXMKK3JlYWQgYnkgdGhlIGFwcGxpY2F0aW9uIG9yIG92ZXJsYWlkIG9udG8gdGhlIGdyYXBoaWNzIHNjcmVlbi4gVGhlaXIKK3NpemUgKGFuZCBwb3NpdGlvbiBmb3IgYW4gb3ZlcmxheSkgaXMgbmVnb3RpYXRlZCB3aXRoIHRoZQorJlZJRElPQy1HLUZNVDsgYW5kICZWSURJT0MtUy1GTVQ7IGlvY3Rscy48L3BhcmE+CisKKyAgICA8cGFyYT5PbiBhIHZpZGVvIG91dHB1dCBkZXZpY2UgdGhlIHNvdXJjZSBhcmUgdGhlIGltYWdlcyBwYXNzZWQgaW4KK2J5IHRoZSBhcHBsaWNhdGlvbiwgYW5kIHRoZWlyIHNpemUgaXMgYWdhaW4gbmVnb3RpYXRlZCB3aXRoIHRoZQorPGNvbnN0YW50PlZJRElPQ19HL1NfRk1UPC9jb25zdGFudD4gaW9jdGxzLCBvciBtYXkgYmUgZW5jb2RlZCBpbiBhCitjb21wcmVzc2VkIHZpZGVvIHN0cmVhbS4gVGhlIHRhcmdldCBpcyB0aGUgdmlkZW8gc2lnbmFsLCBhbmQgdGhlCitjcm9wcGluZyBpb2N0bHMgZGV0ZXJtaW5lIHRoZSBhcmVhIHdoZXJlIHRoZSBpbWFnZXMgYXJlCitpbnNlcnRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5Tb3VyY2UgYW5kIHRhcmdldCByZWN0YW5nbGVzIGFyZSBkZWZpbmVkIGV2ZW4gaWYgdGhlIGRldmljZQorZG9lcyBub3Qgc3VwcG9ydCBzY2FsaW5nIG9yIHRoZSA8Y29uc3RhbnQ+VklESU9DX0cvU19DUk9QPC9jb25zdGFudD4KK2lvY3Rscy4gVGhlaXIgc2l6ZSAoYW5kIHBvc2l0aW9uIHdoZXJlIGFwcGxpY2FibGUpIHdpbGwgYmUgZml4ZWQgaW4KK3RoaXMgY2FzZS4gPGVtcGhhc2lzPkFsbCBjYXB0dXJlIGFuZCBvdXRwdXQgZGV2aWNlIG11c3Qgc3VwcG9ydCB0aGUKKzxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+IGlvY3RsIHN1Y2ggdGhhdCBhcHBsaWNhdGlvbnMgY2FuCitkZXRlcm1pbmUgaWYgc2NhbGluZyB0YWtlcyBwbGFjZS48L2VtcGhhc2lzPjwvcGFyYT4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkNyb3BwaW5nIFN0cnVjdHVyZXM8L3RpdGxlPgorCisgICAgICA8ZmlndXJlIGlkPSJjcm9wLXNjYWxlIj4KKwk8dGl0bGU+SW1hZ2UgQ3JvcHBpbmcsIEluc2VydGlvbiBhbmQgU2NhbGluZzwvdGl0bGU+CisJPG1lZGlhb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImNyb3AucGRmIiBmb3JtYXQ9IlBTIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJjcm9wLmdpZiIgZm9ybWF0PSJHSUYiIC8+CisJICA8L2ltYWdlb2JqZWN0PgorCSAgPHRleHRvYmplY3Q+CisJICAgIDxwaHJhc2U+VGhlIGNyb3BwaW5nLCBpbnNlcnRpb24gYW5kIHNjYWxpbmcgcHJvY2VzczwvcGhyYXNlPgorCSAgPC90ZXh0b2JqZWN0PgorCTwvbWVkaWFvYmplY3Q+CisgICAgICA8L2ZpZ3VyZT4KKworICAgICAgPHBhcmE+Rm9yIGNhcHR1cmUgZGV2aWNlcyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRvcCBsZWZ0Citjb3JuZXIsIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFyZWEgd2hpY2ggY2FuIGJlIHNhbXBsZWQgaXMgZ2l2ZW4gYnkKK3RoZSA8c3RydWN0ZmllbGQ+Ym91bmRzPC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIG9mIHRoZQorJnY0bDItY3JvcGNhcDsgcmV0dXJuZWQgYnkgdGhlIDxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+Citpb2N0bC4gVG8gc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgdGhpcyBzcGVjaWZpY2F0aW9uIGRvZXMgbm90CitkZWZpbmUgYW4gb3JpZ2luIG9yIHVuaXRzLiBIb3dldmVyIGJ5IGNvbnZlbnRpb24gZHJpdmVycyBzaG91bGQKK2hvcml6b250YWxseSBjb3VudCB1bnNjYWxlZCBzYW1wbGVzIHJlbGF0aXZlIHRvIDBIICh0aGUgbGVhZGluZyBlZGdlCitvZiB0aGUgaG9yaXpvbnRhbCBzeW5jIHB1bHNlLCBzZWUgPHhyZWYgbGlua2VuZD0idmJpLWhzeW5jIiAvPikuCitWZXJ0aWNhbGx5IElUVS1SIGxpbmUKK251bWJlcnMgb2YgdGhlIGZpcnN0IGZpZWxkICg8eHJlZiBsaW5rZW5kPSJ2YmktNTI1IiAvPiwgPHhyZWYKK2xpbmtlbmQ9InZiaS02MjUiIC8+KSwgbXVsdGlwbGllZCBieSB0d28gaWYgdGhlIGRyaXZlciBjYW4gY2FwdHVyZSBib3RoCitmaWVsZHMuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgdG9wIGxlZnQgY29ybmVyLCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzb3VyY2UKK3JlY3RhbmdsZSwgdGhhdCBpcyB0aGUgYXJlYSBhY3R1YWxseSBzYW1wbGVkLCBpcyBnaXZlbiBieSAmdjRsMi1jcm9wOwordXNpbmcgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0gYXMgJnY0bDItY3JvcGNhcDsuIEFwcGxpY2F0aW9ucyBjYW4KK3VzZSB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0NST1A8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19DUk9QPC9jb25zdGFudD4gaW9jdGxzIHRvIGdldCBhbmQgc2V0IHRoaXMKK3JlY3RhbmdsZS4gSXQgbXVzdCBsaWUgY29tcGxldGVseSB3aXRoaW4gdGhlIGNhcHR1cmUgYm91bmRhcmllcyBhbmQKK3RoZSBkcml2ZXIgbWF5IGZ1cnRoZXIgYWRqdXN0IHRoZSByZXF1ZXN0ZWQgc2l6ZSBhbmQvb3IgcG9zaXRpb24KK2FjY29yZGluZyB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucy48L3BhcmE+CisKKyAgICAgIDxwYXJhPkVhY2ggY2FwdHVyZSBkZXZpY2UgaGFzIGEgZGVmYXVsdCBzb3VyY2UgcmVjdGFuZ2xlLCBnaXZlbgorYnkgdGhlIDxzdHJ1Y3RmaWVsZD5kZWZyZWN0PC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIG9mCismdjRsMi1jcm9wY2FwOy4gVGhlIGNlbnRlciBvZiB0aGlzIHJlY3RhbmdsZSBzaGFsbCBhbGlnbiB3aXRoIHRoZQorY2VudGVyIG9mIHRoZSBhY3RpdmUgcGljdHVyZSBhcmVhIG9mIHRoZSB2aWRlbyBzaWduYWwsIGFuZCBjb3ZlciB3aGF0Cit0aGUgZHJpdmVyIHdyaXRlciBjb25zaWRlcnMgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIERyaXZlcnMgc2hhbGwgcmVzZXQKK3RoZSBzb3VyY2UgcmVjdGFuZ2xlIHRvIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGRyaXZlciBpcyBmaXJzdCBsb2FkZWQsCitidXQgbm90IGxhdGVyLjwvcGFyYT4KKworICAgICAgPHBhcmE+Rm9yIG91dHB1dCBkZXZpY2VzIHRoZXNlIHN0cnVjdHVyZXMgYW5kIGlvY3RscyBhcmUgdXNlZAorYWNjb3JkaW5nbHksIGRlZmluaW5nIHRoZSA8ZW1waGFzaXM+dGFyZ2V0PC9lbXBoYXNpcz4gcmVjdGFuZ2xlIHdoZXJlCit0aGUgaW1hZ2VzIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgdmlkZW8gc2lnbmFsLjwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlNjYWxpbmcgQWRqdXN0bWVudHM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WaWRlbyBoYXJkd2FyZSBjYW4gaGF2ZSB2YXJpb3VzIGNyb3BwaW5nLCBpbnNlcnRpb24gYW5kCitzY2FsaW5nIGxpbWl0YXRpb25zLiBJdCBtYXkgb25seSBzY2FsZSB1cCBvciBkb3duLCBzdXBwb3J0IG9ubHkKK2Rpc2NyZXRlIHNjYWxpbmcgZmFjdG9ycywgb3IgaGF2ZSBkaWZmZXJlbnQgc2NhbGluZyBhYmlsaXRpZXMgaW4KK2hvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpcmVjdGlvbi4gQWxzbyBpdCBtYXkgbm90IHN1cHBvcnQgc2NhbGluZyBhdAorYWxsLiBBdCB0aGUgc2FtZSB0aW1lIHRoZSAmdjRsMi1jcm9wOyByZWN0YW5nbGUgbWF5IGhhdmUgdG8gYmUKK2FsaWduZWQsIGFuZCBib3RoIHRoZSBzb3VyY2UgYW5kIHRhcmdldCByZWN0YW5nbGVzIG1heSBoYXZlIGFyYml0cmFyeQordXBwZXIgYW5kIGxvd2VyIHNpemUgbGltaXRzLiBJbiBwYXJ0aWN1bGFyIHRoZSBtYXhpbXVtCis8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPmhlaWdodDwvc3RydWN0ZmllbGQ+CitpbiAmdjRsMi1jcm9wOyBtYXkgYmUgc21hbGxlciB0aGFuIHRoZQorJnY0bDItY3JvcGNhcDsuPHN0cnVjdGZpZWxkPmJvdW5kczwvc3RydWN0ZmllbGQ+IGFyZWEuIFRoZXJlZm9yZSwgYXMKK3VzdWFsLCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byBhZGp1c3QgdGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXJzIGFuZAorcmV0dXJuIHRoZSBhY3R1YWwgdmFsdWVzIHNlbGVjdGVkLjwvcGFyYT4KKworICAgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiBjaGFuZ2UgdGhlIHNvdXJjZSBvciB0aGUgdGFyZ2V0IHJlY3RhbmdsZQorZmlyc3QsIGFzIHRoZXkgbWF5IHByZWZlciBhIHBhcnRpY3VsYXIgaW1hZ2Ugc2l6ZSBvciBhIGNlcnRhaW4gYXJlYSBpbgordGhlIHZpZGVvIHNpZ25hbC4gSWYgdGhlIGRyaXZlciBoYXMgdG8gYWRqdXN0IGJvdGggdG8gc2F0aXNmeSBoYXJkd2FyZQorbGltaXRhdGlvbnMsIHRoZSBsYXN0IHJlcXVlc3RlZCByZWN0YW5nbGUgc2hhbGwgdGFrZSBwcmlvcml0eSwgYW5kIHRoZQorZHJpdmVyIHNob3VsZCBwcmVmZXJhYmx5IGFkanVzdCB0aGUgb3Bwb3NpdGUgb25lLiBUaGUgJlZJRElPQy1UUlktRk1UOworaW9jdGwgaG93ZXZlciBzaGFsbCBub3QgY2hhbmdlIHRoZSBkcml2ZXIgc3RhdGUgYW5kIHRoZXJlZm9yZSBvbmx5CithZGp1c3QgdGhlIHJlcXVlc3RlZCByZWN0YW5nbGUuPC9wYXJhPgorCisgICAgICA8cGFyYT5TdXBwb3NlIHNjYWxpbmcgb24gYSB2aWRlbyBjYXB0dXJlIGRldmljZSBpcyByZXN0cmljdGVkIHRvCithIGZhY3RvciAxOjEgb3IgMjoxIGluIGVpdGhlciBkaXJlY3Rpb24gYW5kIHRoZSB0YXJnZXQgaW1hZ2Ugc2l6ZSBtdXN0CitiZSBhIG11bHRpcGxlIG9mIDE2Jm5ic3A7JnRpbWVzOyZuYnNwOzE2IHBpeGVscy4gVGhlIHNvdXJjZSBjcm9wcGluZworcmVjdGFuZ2xlIGlzIHNldCB0byBkZWZhdWx0cywgd2hpY2ggYXJlIGFsc28gdGhlIHVwcGVyIGxpbWl0IGluIHRoaXMKK2V4YW1wbGUsIG9mIDY0MCZuYnNwOyZ0aW1lczsmbmJzcDs0MDAgcGl4ZWxzIGF0IG9mZnNldCAwLCZuYnNwOzAuIEFuCithcHBsaWNhdGlvbiByZXF1ZXN0cyBhbiBpbWFnZSBzaXplIG9mIDMwMCZuYnNwOyZ0aW1lczsmbmJzcDsyMjUKK3BpeGVscywgYXNzdW1pbmcgdmlkZW8gd2lsbCBiZSBzY2FsZWQgZG93biBmcm9tIHRoZSAiZnVsbCBwaWN0dXJlIgorYWNjb3JkaW5nbHkuIFRoZSBkcml2ZXIgc2V0cyB0aGUgaW1hZ2Ugc2l6ZSB0byB0aGUgY2xvc2VzdCBwb3NzaWJsZQordmFsdWVzIDMwNCZuYnNwOyZ0aW1lczsmbmJzcDsyMjQsIHRoZW4gY2hvb3NlcyB0aGUgY3JvcHBpbmcgcmVjdGFuZ2xlCitjbG9zZXN0IHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZSwgdGhhdCBpcyA2MDgmbmJzcDsmdGltZXM7Jm5ic3A7MjI0CisoMjI0Jm5ic3A7JnRpbWVzOyZuYnNwOzI6MSB3b3VsZCBleGNlZWQgdGhlIGxpbWl0IDQwMCkuIFRoZSBvZmZzZXQKKzAsJm5ic3A7MCBpcyBzdGlsbCB2YWxpZCwgdGh1cyB1bm1vZGlmaWVkLiBHaXZlbiB0aGUgZGVmYXVsdCBjcm9wcGluZworcmVjdGFuZ2xlIHJlcG9ydGVkIGJ5IDxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+IHRoZQorYXBwbGljYXRpb24gY2FuIGVhc2lseSBwcm9wb3NlIGFub3RoZXIgb2Zmc2V0IHRvIGNlbnRlciB0aGUgY3JvcHBpbmcKK3JlY3RhbmdsZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPk5vdyB0aGUgYXBwbGljYXRpb24gbWF5IGluc2lzdCBvbiBjb3ZlcmluZyBhbiBhcmVhIHVzaW5nIGEKK3BpY3R1cmUgYXNwZWN0IHJhdGlvIGNsb3NlciB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCwgc28gaXQgYXNrcyBmb3IgYQorY3JvcHBpbmcgcmVjdGFuZ2xlIG9mIDYwOCZuYnNwOyZ0aW1lczsmbmJzcDs0NTYgcGl4ZWxzLiBUaGUgcHJlc2VudAorc2NhbGluZyBmYWN0b3JzIGxpbWl0IGNyb3BwaW5nIHRvIDY0MCZuYnNwOyZ0aW1lczsmbmJzcDszODQsIHNvIHRoZQorZHJpdmVyIHJldHVybnMgdGhlIGNyb3BwaW5nIHNpemUgNjA4Jm5ic3A7JnRpbWVzOyZuYnNwOzM4NCBhbmQgYWRqdXN0cwordGhlIGltYWdlIHNpemUgdG8gY2xvc2VzdCBwb3NzaWJsZSAzMDQmbmJzcDsmdGltZXM7Jm5ic3A7MTkyLjwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICAgICAgPHBhcmE+U291cmNlIGFuZCB0YXJnZXQgcmVjdGFuZ2xlcyBzaGFsbCByZW1haW4gdW5jaGFuZ2VkIGFjcm9zcworY2xvc2luZyBhbmQgcmVvcGVuaW5nIGEgZGV2aWNlLCBzdWNoIHRoYXQgcGlwaW5nIGRhdGEgaW50byBvciBvdXQgb2YgYQorZGV2aWNlIHdpbGwgd29yayB3aXRob3V0IHNwZWNpYWwgcHJlcGFyYXRpb25zLiBNb3JlIGFkdmFuY2VkCithcHBsaWNhdGlvbnMgc2hvdWxkIGVuc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgc3VpdGFibGUgYmVmb3JlIHN0YXJ0aW5nCitJL08uPC9wYXJhPgorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+UmVzZXR0aW5nIHRoZSBjcm9wcGluZyBwYXJhbWV0ZXJzPC90aXRsZT4KKworCTxwYXJhPihBIHZpZGVvIGNhcHR1cmUgZGV2aWNlIGlzIGFzc3VtZWQ7IGNoYW5nZQorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+IGZvciBvdGhlcgorZGV2aWNlcy4pPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItY3JvcGNhcDsgY3JvcGNhcDsKKyZ2NGwyLWNyb3A7IGNyb3A7CisKK21lbXNldCAoJmFtcDtjcm9wY2FwLCAwLCBzaXplb2YgKGNyb3BjYXApKTsKK2Nyb3BjYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1DUk9QQ0FQOywgJmFtcDtjcm9wY2FwKSkgeworCXBlcnJvciAoIlZJRElPQ19DUk9QQ0FQIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworbWVtc2V0ICgmYW1wO2Nyb3AsIDAsIHNpemVvZiAoY3JvcCkpOworY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworY3JvcC5jID0gY3JvcGNhcC5kZWZyZWN0OworCisvKiBJZ25vcmUgaWYgY3JvcHBpbmcgaXMgbm90IHN1cHBvcnRlZCAoRUlOVkFMKS4gKi8KKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLUNST1A7LCAmYW1wO2Nyb3ApCisgICAgJmFtcDsmYW1wOyBlcnJubyAhPSBFSU5WQUwpIHsKKwlwZXJyb3IgKCJWSURJT0NfU19DUk9QIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2V4YW1wbGU+CisKKyAgICAgIDxleGFtcGxlPgorCTx0aXRsZT5TaW1wbGUgZG93bnNjYWxpbmc8L3RpdGxlPgorCisJPHBhcmE+KEEgdmlkZW8gY2FwdHVyZSBkZXZpY2UgaXMgYXNzdW1lZC4pPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItY3JvcGNhcDsgY3JvcGNhcDsKKyZ2NGwyLWZvcm1hdDsgZm9ybWF0OworCityZXNldF9jcm9wcGluZ19wYXJhbWV0ZXJzICgpOworCisvKiBTY2FsZSBkb3duIHRvIDEvNCBzaXplIG9mIGZ1bGwgcGljdHVyZS4gKi8KKworbWVtc2V0ICgmYW1wO2Zvcm1hdCwgMCwgc2l6ZW9mIChmb3JtYXQpKTsgLyogZGVmYXVsdHMgKi8KKworZm9ybWF0LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKK2Zvcm1hdC5mbXQucGl4LndpZHRoID0gY3JvcGNhcC5kZWZyZWN0LndpZHRoICZndDsmZ3Q7IDE7Citmb3JtYXQuZm10LnBpeC5oZWlnaHQgPSBjcm9wY2FwLmRlZnJlY3QuaGVpZ2h0ICZndDsmZ3Q7IDE7Citmb3JtYXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLVMtRk1UOywgJmFtcDtmb3JtYXQpKSB7CisJcGVycm9yICgiVklESU9DX1NfRk9STUFUIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworLyogV2UgY291bGQgY2hlY2sgdGhlIGFjdHVhbCBpbWFnZSBzaXplIG5vdywgdGhlIGFjdHVhbCBzY2FsaW5nIGZhY3RvcgorICAgb3IgaWYgdGhlIGRyaXZlciBjYW4gc2NhbGUgYXQgYWxsLiAqLworCTwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2V4YW1wbGU+CisKKyAgICAgIDxleGFtcGxlPgorCTx0aXRsZT5TZWxlY3RpbmcgYW4gb3V0cHV0IGFyZWE8L3RpdGxlPgorCisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItY3JvcGNhcDsgY3JvcGNhcDsKKyZ2NGwyLWNyb3A7IGNyb3A7CisKK21lbXNldCAoJmFtcDtjcm9wY2FwLCAwLCBzaXplb2YgKGNyb3BjYXApKTsKK2Nyb3BjYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCBWSURJT0NfQ1JPUENBUDssICZhbXA7Y3JvcGNhcCkpIHsKKwlwZXJyb3IgKCJWSURJT0NfQ1JPUENBUCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK21lbXNldCAoJmFtcDtjcm9wLCAwLCBzaXplb2YgKGNyb3ApKTsKKworY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Citjcm9wLmMgPSBjcm9wY2FwLmRlZnJlY3Q7CisKKy8qIFNjYWxlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIDUwICUgb2YgdGhlaXIgb3JpZ2luYWwgc2l6ZQorICAgYW5kIGNlbnRlciB0aGUgb3V0cHV0LiAqLworCitjcm9wLmMud2lkdGggLz0gMjsKK2Nyb3AuYy5oZWlnaHQgLz0gMjsKK2Nyb3AuYy5sZWZ0ICs9IGNyb3AuYy53aWR0aCAvIDI7Citjcm9wLmMudG9wICs9IGNyb3AuYy5oZWlnaHQgLyAyOworCisvKiBJZ25vcmUgaWYgY3JvcHBpbmcgaXMgbm90IHN1cHBvcnRlZCAoRUlOVkFMKS4gKi8KKworaWYgKC0xID09IGlvY3RsIChmZCwgVklESU9DX1NfQ1JPUCwgJmFtcDtjcm9wKQorICAgICZhbXA7JmFtcDsgZXJybm8gIT0gRUlOVkFMKSB7CisJcGVycm9yICgiVklESU9DX1NfQ1JPUCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+Q3VycmVudCBzY2FsaW5nIGZhY3RvciBhbmQgcGl4ZWwgYXNwZWN0PC90aXRsZT4KKworCTxwYXJhPihBIHZpZGVvIGNhcHR1cmUgZGV2aWNlIGlzIGFzc3VtZWQuKTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KKyZ2NGwyLWNyb3BjYXA7IGNyb3BjYXA7CismdjRsMi1jcm9wOyBjcm9wOworJnY0bDItZm9ybWF0OyBmb3JtYXQ7Citkb3VibGUgaHNjYWxlLCB2c2NhbGU7Citkb3VibGUgYXNwZWN0OworaW50IGR3aWR0aCwgZGhlaWdodDsKKworbWVtc2V0ICgmYW1wO2Nyb3BjYXAsIDAsIHNpemVvZiAoY3JvcGNhcCkpOworY3JvcGNhcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUNST1BDQVA7LCAmYW1wO2Nyb3BjYXApKSB7CisJcGVycm9yICgiVklESU9DX0NST1BDQVAiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCittZW1zZXQgKCZhbXA7Y3JvcCwgMCwgc2l6ZW9mIChjcm9wKSk7Citjcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKK2lmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtRy1DUk9QOywgJmFtcDtjcm9wKSkgeworCWlmIChlcnJubyAhPSBFSU5WQUwpIHsKKwkJcGVycm9yICgiVklESU9DX0dfQ1JPUCIpOworCQlleGl0IChFWElUX0ZBSUxVUkUpOworCX0KKworCS8qIENyb3BwaW5nIG5vdCBzdXBwb3J0ZWQuICovCisJY3JvcC5jID0gY3JvcGNhcC5kZWZyZWN0OworfQorCittZW1zZXQgKCZhbXA7Zm9ybWF0LCAwLCBzaXplb2YgKGZvcm1hdCkpOworZm9ybWF0LmZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCitpZiAoLTEgPT0gaW9jdGwgKGZkLCAmVklESU9DLUctRk1UOywgJmFtcDtmb3JtYXQpKSB7CisJcGVycm9yICgiVklESU9DX0dfRk1UIik7CisJZXhpdCAoRVhJVF9GQUlMVVJFKTsKK30KKworLyogVGhlIHNjYWxpbmcgYXBwbGllZCBieSB0aGUgZHJpdmVyLiAqLworCitoc2NhbGUgPSBmb3JtYXQuZm10LnBpeC53aWR0aCAvIChkb3VibGUpIGNyb3AuYy53aWR0aDsKK3ZzY2FsZSA9IGZvcm1hdC5mbXQucGl4LmhlaWdodCAvIChkb3VibGUpIGNyb3AuYy5oZWlnaHQ7CisKK2FzcGVjdCA9IGNyb3BjYXAucGl4ZWxhc3BlY3QubnVtZXJhdG9yIC8KKwkgKGRvdWJsZSkgY3JvcGNhcC5waXhlbGFzcGVjdC5kZW5vbWluYXRvcjsKK2FzcGVjdCA9IGFzcGVjdCAqIGhzY2FsZSAvIHZzY2FsZTsKKworLyogRGV2aWNlcyBmb2xsb3dpbmcgSVRVLVIgQlQuNjAxIGRvIG5vdCBjYXB0dXJlCisgICBzcXVhcmUgcGl4ZWxzLiBGb3IgcGxheWJhY2sgb24gYSBjb21wdXRlciBtb25pdG9yCisgICB3ZSBzaG91bGQgc2NhbGUgdGhlIGltYWdlcyB0byB0aGlzIHNpemUuICovCisKK2R3aWR0aCA9IGZvcm1hdC5mbXQucGl4LndpZHRoIC8gYXNwZWN0OworZGhlaWdodCA9IGZvcm1hdC5mbXQucGl4LmhlaWdodDsKKwk8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJzdHJlYW1pbmctcGFyIj4KKyAgICA8dGl0bGU+U3RyZWFtaW5nIFBhcmFtZXRlcnM8L3RpdGxlPgorCisgICAgPHBhcmE+U3RyZWFtaW5nIHBhcmFtZXRlcnMgYXJlIGludGVuZGVkIHRvIG9wdGltaXplIHRoZSB2aWRlbworY2FwdHVyZSBwcm9jZXNzIGFzIHdlbGwgYXMgSS9PLiBQcmVzZW50bHkgYXBwbGljYXRpb25zIGNhbiByZXF1ZXN0IGEKK2hpZ2ggcXVhbGl0eSBjYXB0dXJlIG1vZGUgd2l0aCB0aGUgJlZJRElPQy1TLVBBUk07IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkIGRldGVybWluZXMgYSBub21pbmFsIG51bWJlciBvZgorZnJhbWVzIHBlciBzZWNvbmQuIElmIGxlc3MgdGhhbiB0aGlzIG51bWJlciBvZiBmcmFtZXMgaXMgdG8gYmUKK2NhcHR1cmVkIG9yIG91dHB1dCwgYXBwbGljYXRpb25zIGNhbiByZXF1ZXN0IGZyYW1lIHNraXBwaW5nIG9yCitkdXBsaWNhdGluZyBvbiB0aGUgZHJpdmVyIHNpZGUuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiB1c2luZwordGhlICZmdW5jLXJlYWQ7IG9yICZmdW5jLXdyaXRlOywgd2hpY2ggYXJlIG5vdCBhdWdtZW50ZWQgYnkgdGltZXN0YW1wcworb3Igc2VxdWVuY2UgY291bnRlcnMsIGFuZCB0byBhdm9pZCB1bm5lY2Nlc3NhcnkgZGF0YSBjb3B5aW5nLjwvcGFyYT4KKworICAgIDxwYXJhPkZpbmFsbHkgdGhlc2UgaW9jdGxzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mCitidWZmZXJzIHVzZWQgaW50ZXJuYWxseSBieSBhIGRyaXZlciBpbiByZWFkL3dyaXRlIG1vZGUuIEZvcgoraW1wbGljYXRpb25zIHNlZSB0aGUgc2VjdGlvbiBkaXNjdXNzaW5nIHRoZSAmZnVuYy1yZWFkOworZnVuY3Rpb24uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gZ2V0IGFuZCBzZXQgdGhlIHN0cmVhbWluZyBwYXJhbWV0ZXJzIGFwcGxpY2F0aW9ucyBjYWxsCit0aGUgJlZJRElPQy1HLVBBUk07IGFuZCAmVklESU9DLVMtUEFSTTsgaW9jdGwsIHJlc3BlY3RpdmVseS4gVGhleSB0YWtlCithIHBvaW50ZXIgdG8gYSAmdjRsMi1zdHJlYW1wYXJtOywgd2hpY2ggY29udGFpbnMgYSB1bmlvbiBob2xkaW5nCitzZXBhcmF0ZSBwYXJhbWV0ZXJzIGZvciBpbnB1dCBhbmQgb3V0cHV0IGRldmljZXMuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlc2UgaW9jdGxzIGFyZSBvcHRpb25hbCwgZHJpdmVycyBuZWVkIG5vdCBpbXBsZW1lbnQKK3RoZW0uIElmIHNvLCB0aGV5IHJldHVybiB0aGUgJkVJTlZBTDsuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbXBhdC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbXBhdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxOTAyYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbApAQCAtMCwwICsxLDI0NTcgQEAKKyAgPHRpdGxlPkNoYW5nZXM8L3RpdGxlPgorCisgIDxwYXJhPlRoZSBmb2xsb3dpbmcgY2hhcHRlcnMgZG9jdW1lbnQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgVjRMMiBBUEksCitlcnJhdGEgb3IgZXh0ZW5zaW9ucy4gVGhleSBhcmUgYWxzbyBpbnRlbmRlZCB0byBoZWxwIGFwcGxpY2F0aW9uIGFuZAorZHJpdmVyIHdyaXRlcnMgdG8gcG9ydCBvciB1cGRhdGUgdGhlaXIgY29kZS48L3BhcmE+CisKKyAgPHNlY3Rpb24gaWQ9ImRpZmYtdjRsIj4KKyAgICA8dGl0bGU+RGlmZmVyZW5jZXMgYmV0d2VlbiBWNEwgYW5kIFY0TDI8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIFZpZGVvIEZvciBMaW51eCBBUEkgd2FzIGZpcnN0IGludHJvZHVjZWQgaW4gTGludXggMi4xIHRvCit1bmlmeSBhbmQgcmVwbGFjZSB2YXJpb3VzIFRWIGFuZCByYWRpbyBkZXZpY2UgcmVsYXRlZCBpbnRlcmZhY2VzLAorZGV2ZWxvcGVkIGluZGVwZW5kZW50bHkgYnkgZHJpdmVyIHdyaXRlcnMgaW4gcHJpb3IgeWVhcnMuIFN0YXJ0aW5nCit3aXRoIExpbnV4IDIuNSB0aGUgbXVjaCBpbXByb3ZlZCBWNEwyIEFQSSByZXBsYWNlcyB0aGUgVjRMIEFQSSwKK2FsdGhvdWdoIGV4aXN0aW5nIGRyaXZlcnMgd2lsbCBjb250aW51ZSB0byBzdXBwb3J0IFY0TCBhcHBsaWNhdGlvbnMgaW4KK3RoZSBmdXR1cmUsIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoIHRoZSBWNEwyIGNvbXBhdGliaWxpdHkgbGF5ZXIgaW4KK3RoZSA8ZmlsZW5hbWU+dmlkZW9kZXY8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlIHRyYW5zbGF0aW5nIGlvY3RscyBvbgordGhlIGZseS4gRm9yIGEgdHJhbnNpdGlvbiBwZXJpb2Qgbm90IGFsbCBkcml2ZXJzIHdpbGwgc3VwcG9ydCB0aGUgVjRMMgorQVBJLjwvcGFyYT4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPk9wZW5pbmcgYW5kIENsb3NpbmcgRGV2aWNlczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgdGhlIGNoYXJhY3RlciBkZXZpY2UgZmlsZSBuYW1lcworcmVjb21tZW5kZWQgZm9yIFY0TDIgdmlkZW8gY2FwdHVyZSwgb3ZlcmxheSwgcmFkaW8sIHRlbGV0ZXh0IGFuZCByYXcKK3ZiaSBjYXB0dXJlIGRldmljZXMgZGlkIG5vdCBjaGFuZ2UgZnJvbSB0aG9zZSB1c2VkIGJ5IFY0TC4gVGhleSBhcmUKK2xpc3RlZCBpbiA8eHJlZiBsaW5rZW5kPSJkZXZpY2VzIiAvPiBhbmQgYmVsb3cgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9InY0bC1kZXYiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIFY0TCA8ZmlsZW5hbWU+dmlkZW9kZXY8L2ZpbGVuYW1lPiBtb2R1bGUgYXV0b21hdGljYWxseQorYXNzaWducyBtaW5vciBudW1iZXJzIHRvIGRyaXZlcnMgaW4gbG9hZCBvcmRlciwgZGVwZW5kaW5nIG9uIHRoZQorcmVnaXN0ZXJlZCBkZXZpY2UgdHlwZS4gV2UgcmVjb21tZW5kIHRoYXQgVjRMMiBkcml2ZXJzIGJ5IGRlZmF1bHQKK3JlZ2lzdGVyIGRldmljZXMgd2l0aCB0aGUgc2FtZSBudW1iZXJzLCBidXQgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yCitjYW4gYXNzaWduIGFyYml0cmFyeSBtaW5vciBudW1iZXJzIHVzaW5nIGRyaXZlciBtb2R1bGUgb3B0aW9ucy4gVGhlCittYWpvciBkZXZpY2UgbnVtYmVyIHJlbWFpbnMgODEuPC9wYXJhPgorCisgICAgICA8dGFibGUgaWQ9InY0bC1kZXYiPgorCTx0aXRsZT5WNEwgRGV2aWNlIFR5cGVzLCBOYW1lcyBhbmQgTnVtYmVyczwvdGl0bGU+CisJPHRncm91cCBjb2xzPSIzIj4KKwkgIDx0aGVhZD4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+RGV2aWNlIFR5cGU8L2VudHJ5PgorCSAgICAgIDxlbnRyeT5GaWxlIE5hbWU8L2VudHJ5PgorCSAgICAgIDxlbnRyeT5NaW5vciBOdW1iZXJzPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8L3RoZWFkPgorCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+VmlkZW8gY2FwdHVyZSBhbmQgb3ZlcmxheTwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPjxmaWxlbmFtZT4vZGV2L3ZpZGVvPC9maWxlbmFtZT4gYW5kCis8ZmlsZW5hbWU+L2Rldi9idHR2MDwvZmlsZW5hbWU+PGZvb3Rub3RlPiA8cGFyYT5BY2NvcmRpbmcgdG8KK0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQgdGhlc2Ugc2hvdWxkIGJlIHN5bWJvbGljIGxpbmtzIHRvCis8ZmlsZW5hbWU+L2Rldi92aWRlbzA8L2ZpbGVuYW1lPi4gTm90ZSB0aGUgb3JpZ2luYWwgYnR0diBpbnRlcmZhY2UgaXMKK25vdCBjb21wYXRpYmxlIHdpdGggVjRMIG9yIFY0TDIuPC9wYXJhPiA8L2Zvb3Rub3RlPiwKKzxmaWxlbmFtZT4vZGV2L3ZpZGVvMDwvZmlsZW5hbWU+IHRvCis8ZmlsZW5hbWU+L2Rldi92aWRlbzYzPC9maWxlbmFtZT48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MC02MzwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5SYWRpbyByZWNlaXZlcjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPjxmaWxlbmFtZT4vZGV2L3JhZGlvPC9maWxlbmFtZT48Zm9vdG5vdGU+CisJCSAgICA8cGFyYT5BY2NvcmRpbmcgdG8KKzxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0PC9maWxlbmFtZT4gYSBzeW1ib2xpYyBsaW5rIHRvCis8ZmlsZW5hbWU+L2Rldi9yYWRpbzA8L2ZpbGVuYW1lPi48L3BhcmE+CisJCSAgPC9mb290bm90ZT4sIDxmaWxlbmFtZT4vZGV2L3JhZGlvMDwvZmlsZW5hbWU+IHRvCis8ZmlsZW5hbWU+L2Rldi9yYWRpbzYzPC9maWxlbmFtZT48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+NjQtMTI3PC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5PlRlbGV0ZXh0IGRlY29kZXI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48cGFyYT48ZmlsZW5hbWU+L2Rldi92dHg8L2ZpbGVuYW1lPiwKKzxmaWxlbmFtZT4vZGV2L3Z0eDA8L2ZpbGVuYW1lPiB0bworPGZpbGVuYW1lPi9kZXYvdnR4MzE8L2ZpbGVuYW1lPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4xOTItMjIzPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5PlJhdyBWQkkgY2FwdHVyZTwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPjxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+LAorPGZpbGVuYW1lPi9kZXYvdmJpMDwvZmlsZW5hbWU+IHRvCis8ZmlsZW5hbWU+L2Rldi92YmkzMTwvZmlsZW5hbWU+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPGVudHJ5PjIyNC0yNTU8L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8cGFyYT5WNEwgcHJvaGliaXRzIChvciB1c2VkIHRvIHByb2hpYml0KSBtdWx0aXBsZSBvcGVucyBvZiBhCitkZXZpY2UgZmlsZS4gVjRMMiBkcml2ZXJzIDxlbXBoYXNpcz5tYXk8L2VtcGhhc2lzPiBzdXBwb3J0IG11bHRpcGxlCitvcGVucywgc2VlIDx4cmVmIGxpbmtlbmQ9Im9wZW4iIC8+IGZvciBkZXRhaWxzIGFuZCBjb25zZXF1ZW5jZXMuPC9wYXJhPgorCisgICAgICA8cGFyYT5WNEwgZHJpdmVycyByZXNwb25kIHRvIFY0TDIgaW9jdGxzIHdpdGggYW4gJkVJTlZBTDsuIFRoZQorY29tcGF0aWJpbGl0eSBsYXllciBpbiB0aGUgVjRMMiA8ZmlsZW5hbWU+dmlkZW9kZXY8L2ZpbGVuYW1lPiBtb2R1bGUKK2NhbiB0cmFuc2xhdGUgVjRMIGlvY3RsIHJlcXVlc3RzIHRvIHRoZWlyIFY0TDIgY291bnRlcnBhcnQsIGhvd2V2ZXIgYQorVjRMMiBkcml2ZXIgdXN1YWxseSBuZWVkcyBtb3JlIHByZXBhcmF0aW9uIHRvIGJlY29tZSBmdWxseSBWNEwKK2NvbXBhdGlibGUuIFRoaXMgaXMgY292ZXJlZCBpbiBtb3JlIGRldGFpbCBpbiA8eHJlZgorCSAgbGlua2VuZD0iZHJpdmVyIiAvPi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIFY0TCA8Y29uc3RhbnQ+VklESU9DR0NBUDwvY29uc3RhbnQ+IGlvY3RsIGlzCitlcXVpdmFsZW50IHRvIFY0TDIncyAmVklESU9DLVFVRVJZQ0FQOy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fY2FwYWJpbGl0eTwvc3RydWN0bmFtZT4gYmVjYW1lCis8c3RydWN0ZmllbGQ+Y2FyZDwvc3RydWN0ZmllbGQ+IGluICZ2NGwyLWNhcGFiaWxpdHk7LAorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiB3YXMgcmVwbGFjZWQgYnkKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXRpZXM8L3N0cnVjdGZpZWxkPi4gTm90ZSBWNEwyIGRvZXMgbm90CitkaXN0aW5ndWlzaCBiZXR3ZWVuIGRldmljZSB0eXBlcyBsaWtlIHRoaXMsIGJldHRlciB0aGluayBvZiBiYXNpYwordmlkZW8gaW5wdXQsIHZpZGVvIG91dHB1dCBhbmQgcmFkaW8gZGV2aWNlcyBzdXBwb3J0aW5nIGEgc2V0IG9mCityZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIHZpZGVvIGNhcHR1cmluZywgdmlkZW8gb3ZlcmxheSBhbmQgVkJJCitjYXB0dXJpbmcuIFNlZSA8eHJlZiBsaW5rZW5kPSJvcGVuIiAvPiBmb3IgYW4KK2ludHJvZHVjdGlvbi48aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMyI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19jYXBhYmlsaXR5PC9zdHJ1Y3RuYW1lPgorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJCTxlbnRyeT4mdjRsMi1jYXBhYmlsaXR5OworPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZsYWdzPC9lbnRyeT4KKwkJPGVudHJ5PlB1cnBvc2U8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3RoZWFkPgorCSAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfQ0FQVFVSRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WSURFT19DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+VGhlIDxsaW5rIGxpbmtlbmQ9ImNhcHR1cmUiPnZpZGVvCitjYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PlRoZSBkZXZpY2UgaGFzIGEgPGxpbmsgbGlua2VuZD0idHVuZXIiPnR1bmVyIG9yCittb2R1bGF0b3I8L2xpbms+LjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9URUxFVEVYVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PlRoZSA8bGluayBsaW5rZW5kPSJyYXctdmJpIj5yYXcgVkJJCitjYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9PVkVSTEFZPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT5UaGUgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+dmlkZW8KK292ZXJsYXk8L2xpbms+IGludGVyZmFjZSBpcyBzdXBwb3J0ZWQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX0NIUk9NQUtFWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWTwvY29uc3RhbnQ+IGluCitmaWVsZCA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+IG9mCismdjRsMi1mcmFtZWJ1ZmZlcjs8L2VudHJ5PgorCQk8ZW50cnk+V2hldGhlciBjaHJvbWFrZXkgb3ZlcmxheSBpcyBzdXBwb3J0ZWQuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiBvbiBvdmVybGF5IHNlZQorPHhyZWYgbGlua2VuZD0ib3ZlcmxheSIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX0NMSVBQSU5HPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfQklUTUFQX0NMSVBQSU5HPC9jb25zdGFudD4gaW4gZmllbGQKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gb2YgJnY0bDItZnJhbWVidWZmZXI7PC9lbnRyeT4KKwkJPGVudHJ5PldoZXRoZXIgY2xpcHBpbmcgdGhlIG92ZXJsYWlkIGltYWdlIGlzCitzdXBwb3J0ZWQsIHNlZSA8eHJlZiBsaW5rZW5kPSJvdmVybGF5IiAvPi48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfRlJBTUVSQU08L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9FWFRFUk5PVkVSTEFZPC9jb25zdGFudD4KKzxlbXBoYXNpcz5ub3Qgc2V0PC9lbXBoYXNpcz4gaW4gZmllbGQKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gb2YgJnY0bDItZnJhbWVidWZmZXI7PC9lbnRyeT4KKwkJPGVudHJ5PldoZXRoZXIgb3ZlcmxheSBvdmVyd3JpdGVzIGZyYW1lIGJ1ZmZlciBtZW1vcnksCitzZWUgPHhyZWYgbGlua2VuZD0ib3ZlcmxheSIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX1NDQUxFUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+VGhpcyBmbGFnIGluZGljYXRlcyBpZiB0aGUgaGFyZHdhcmUgY2FuIHNjYWxlCitpbWFnZXMuIFRoZSBWNEwyIEFQSSBpbXBsaWVzIHRoZSBzY2FsZSBmYWN0b3IgYnkgc2V0dGluZyB0aGUgY3JvcHBpbmcKK2RpbWVuc2lvbnMgYW5kIGltYWdlIHNpemUgd2l0aCB0aGUgJlZJRElPQy1TLUNST1A7IGFuZCAmVklESU9DLVMtRk1UOworaW9jdGwsIHJlc3BlY3RpdmVseS4gVGhlIGRyaXZlciByZXR1cm5zIHRoZSBjbG9zZXN0IHNpemVzIHBvc3NpYmxlLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JvcHBpbmcgYW5kIHNjYWxpbmcgc2VlIDx4cmVmCisJCSAgICBsaW5rZW5kPSJjcm9wIiAvPi48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfTU9OT0NIUk9NRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+QXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgdGhlIHN1cHBvcnRlZCBpbWFnZQorZm9ybWF0cyB3aXRoIHRoZSAmVklESU9DLUVOVU0tRk1UOyBpb2N0bCB0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZQorc3VwcG9ydHMgZ3JleSBzY2FsZSBjYXB0dXJpbmcgb25seS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaW1hZ2UKK2Zvcm1hdHMgc2VlIDx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX1NVQkNBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PkFwcGxpY2F0aW9ucyBjYW4gY2FsbCB0aGUgJlZJRElPQy1HLUNST1A7IGlvY3RsCit0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBjYXB0dXJpbmcgYSBzdWJzZWN0aW9uIG9mIHRoZSBmdWxsCitwaWN0dXJlICgiY3JvcHBpbmciIGluIFY0TDIpLiBJZiBub3QsIHRoZSBpb2N0bCByZXR1cm5zIHRoZSAmRUlOVkFMOy4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyb3BwaW5nIGFuZCBzY2FsaW5nIHNlZSA8eHJlZgorCQkgICAgbGlua2VuZD0iY3JvcCIgLz4uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJRF9UWVBFX01QRUdfREVDT0RFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+QXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgdGhlIHN1cHBvcnRlZCBpbWFnZQorZm9ybWF0cyB3aXRoIHRoZSAmVklESU9DLUVOVU0tRk1UOyBpb2N0bCB0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZQorc3VwcG9ydHMgTVBFRyBzdHJlYW1zLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9NUEVHX0VOQ09ERVI8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PlNlZSBhYm92ZS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklEX1RZUEVfTUpQRUdfREVDT0RFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+U2VlIGFib3ZlLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURfVFlQRV9NSlBFR19FTkNPREVSPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT5TZWUgYWJvdmUuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90Ym9keT4KKwkgIDwvdGdyb3VwPgorCTwvaW5mb3JtYWx0YWJsZT48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+YXVkaW9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2FzIHJlcGxhY2VkCitieSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmxhZworPGNvbnN0YW50PlY0TDJfQ0FQX0FVRElPPC9jb25zdGFudD4sIGluZGljYXRpbmcKKzxlbXBoYXNpcz5pZjwvZW1waGFzaXM+IHRoZSBkZXZpY2UgaGFzIGFueSBhdWRpbyBpbnB1dHMgb3Igb3V0cHV0cy4gVG8KK2RldGVybWluZSB0aGVpciBudW1iZXIgYXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgYXVkaW8gaW5wdXRzIHdpdGgKK3RoZSAmVklESU9DLUctQVVESU87IGlvY3RsLiBUaGUgYXVkaW8gaW9jdGxzIGFyZSBkZXNjcmliZWQgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9ImF1ZGlvIiAvPi48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+bWF4d2lkdGg8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5tYXhoZWlnaHQ8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5taW53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPm1pbmhlaWdodDwvc3RydWN0ZmllbGQ+IGZpZWxkcyB3ZXJlIHJlbW92ZWQuIENhbGxpbmcgdGhlCismVklESU9DLVMtRk1UOyBvciAmVklESU9DLVRSWS1GTVQ7IGlvY3RsIHdpdGggdGhlIGRlc2lyZWQgZGltZW5zaW9ucworcmV0dXJucyB0aGUgY2xvc2VzdCBzaXplIHBvc3NpYmxlLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBjdXJyZW50Cit2aWRlbyBzdGFuZGFyZCwgY3JvcHBpbmcgYW5kIHNjYWxpbmcgbGltaXRhdGlvbnMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlZpZGVvIFNvdXJjZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WNEwgcHJvdmlkZXMgdGhlIDxjb25zdGFudD5WSURJT0NHQ0hBTjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ1NDSEFOPC9jb25zdGFudD4gaW9jdGwgdXNpbmcgc3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19jaGFubmVsPC9zdHJ1Y3RuYW1lPiB0byBlbnVtZXJhdGUKK3RoZSB2aWRlbyBpbnB1dHMgb2YgYSBWNEwgZGV2aWNlLiBUaGUgZXF1aXZhbGVudCBWNEwyIGlvY3RscworYXJlICZWSURJT0MtRU5VTUlOUFVUOywgJlZJRElPQy1HLUlOUFVUOyBhbmQgJlZJRElPQy1TLUlOUFVUOwordXNpbmcgJnY0bDItaW5wdXQ7IGFzIGRpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJ2aWRlbyIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmNoYW5uZWw8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb3VudGluZworaW5wdXRzIHdhcyByZW5hbWVkIHRvIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+LCB0aGUgdmlkZW8KK2lucHV0IHR5cGVzIHdlcmUgcmVuYW1lZCBhcyBmb2xsb3dzOiA8aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMiI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0IDxzdHJ1Y3RuYW1lPnZpZGVvX2NoYW5uZWw8L3N0cnVjdG5hbWU+Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5PiZ2NGwyLWlucHV0OworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGhlYWQ+CisJICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19UWVBFX1RWPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1RZUEVfQ0FNRVJBPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGJvZHk+CisJICA8L3Rncm91cD4KKwk8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCisgICAgICA8cGFyYT5Vbmxpa2UgdGhlIDxzdHJ1Y3RmaWVsZD50dW5lcnM8L3N0cnVjdGZpZWxkPiBmaWVsZAorZXhwcmVzc2luZyB0aGUgbnVtYmVyIG9mIHR1bmVycyBvZiB0aGlzIGlucHV0LCBWNEwyIGFzc3VtZXMgZWFjaCB2aWRlbworaW5wdXQgaXMgY29ubmVjdGVkIHRvIGF0IG1vc3Qgb25lIHR1bmVyLiBIb3dldmVyIGEgdHVuZXIgY2FuIGhhdmUgbW9yZQordGhhbiBvbmUgaW5wdXQsICZpZTsgUkYgY29ubmVjdG9ycywgYW5kIGEgZGV2aWNlIGNhbiBoYXZlIG11bHRpcGxlCit0dW5lcnMuIFRoZSBpbmRleCBudW1iZXIgb2YgdGhlIHR1bmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQsIGlmCithbnksIGlzIHN0b3JlZCBpbiBmaWVsZCA8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBvZgorJnY0bDItaW5wdXQ7LiBFbnVtZXJhdGlvbiBvZiB0dW5lcnMgaXMgZGlzY3Vzc2VkIGluIDx4cmVmCisJICBsaW5rZW5kPSJ0dW5lciIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgcmVkdW5kYW50IDxjb25zdGFudD5WSURFT19WQ19UVU5FUjwvY29uc3RhbnQ+IGZsYWcgd2FzCitkcm9wcGVkLiBWaWRlbyBpbnB1dHMgYXNzb2NpYXRlZCB3aXRoIGEgdHVuZXIgYXJlIG9mIHR5cGUKKzxjb25zdGFudD5WNEwyX0lOUFVUX1RZUEVfVFVORVI8L2NvbnN0YW50Pi4gVGhlCis8Y29uc3RhbnQ+VklERU9fVkNfQVVESU88L2NvbnN0YW50PiBmbGFnIHdhcyByZXBsYWNlZCBieSB0aGUKKzxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+IGZpZWxkLiBWNEwyIGNvbnNpZGVycyBkZXZpY2VzIHdpdGgKK3VwIHRvIDMyIGF1ZGlvIGlucHV0cy4gRWFjaCBzZXQgYml0IGluIHRoZQorPHN0cnVjdGZpZWxkPmF1ZGlvc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgcmVwcmVzZW50cyBvbmUgYXVkaW8gaW5wdXQKK3RoaXMgdmlkZW8gaW5wdXQgY29tYmluZXMgd2l0aC4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGF1ZGlvIGlucHV0cyBhbmQKK2hvdyB0byBzd2l0Y2ggYmV0d2VlbiB0aGVtIHNlZSA8eHJlZiBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPm5vcm08L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXNjcmliaW5nIHRoZQorc3VwcG9ydGVkIHZpZGVvIHN0YW5kYXJkcyB3YXMgcmVwbGFjZWQgYnkKKzxzdHJ1Y3RmaWVsZD5zdGQ8L3N0cnVjdGZpZWxkPi4gVGhlIFY0TCBzcGVjaWZpY2F0aW9uIG1lbnRpb25zIGEgZmxhZworPGNvbnN0YW50PlZJREVPX1ZDX05PUk08L2NvbnN0YW50PiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0YW5kYXJkIGNhbgorYmUgY2hhbmdlZC4gVGhpcyBmbGFnIHdhcyBhIGxhdGVyIGFkZGl0aW9uIHRvZ2V0aGVyIHdpdGggdGhlCis8c3RydWN0ZmllbGQ+bm9ybTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCBoYXMgYmVlbiByZW1vdmVkIGluIHRoZQorbWVhbnRpbWUuIFY0TDIgaGFzIGEgc2ltaWxhciwgYWxiZWl0IG1vcmUgY29tcHJlaGVuc2l2ZSBhcHByb2FjaAordG8gdmlkZW8gc3RhbmRhcmRzLCBzZWUgPHhyZWYgbGlua2VuZD0ic3RhbmRhcmQiIC8+IGZvciBtb3JlCitpbmZvcm1hdGlvbi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VHVuaW5nPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIFY0TCA8Y29uc3RhbnQ+VklESU9DR1RVTkVSPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DU1RVTkVSPC9jb25zdGFudD4gaW9jdGwgYW5kIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fdHVuZXI8L3N0cnVjdG5hbWU+IGNhbiBiZSB1c2VkIHRvIGVudW1lcmF0ZSB0aGUKK3R1bmVycyBvZiBhIFY0TCBUViBvciByYWRpbyBkZXZpY2UuIFRoZSBlcXVpdmFsZW50IFY0TDIgaW9jdGxzIGFyZQorJlZJRElPQy1HLVRVTkVSOyBhbmQgJlZJRElPQy1TLVRVTkVSOyB1c2luZyAmdjRsMi10dW5lcjsuIFR1bmVycyBhcmUKK2NvdmVyZWQgaW4gPHhyZWYgbGlua2VuZD0idHVuZXIiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvdW50aW5nIHR1bmVycword2FzIHJlbmFtZWQgdG8gPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4uIFRoZSBmaWVsZHMKKzxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4sIDxzdHJ1Y3RmaWVsZD5yYW5nZWxvdzwvc3RydWN0ZmllbGQ+CithbmQgPHN0cnVjdGZpZWxkPnJhbmdlaGlnaDwvc3RydWN0ZmllbGQ+IHJlbWFpbmVkIHVuY2hhbmdlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8Y29uc3RhbnQ+VklERU9fVFVORVJfUEFMPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklERU9fVFVORVJfTlRTQzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJREVPX1RVTkVSX1NFQ0FNPC9jb25zdGFudD4gZmxhZ3MgaW5kaWNhdGluZyB0aGUgc3VwcG9ydGVkCit2aWRlbyBzdGFuZGFyZHMgd2VyZSBkcm9wcGVkLiBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdyBjb250YWluZWQgaW4gdGhlCithc3NvY2lhdGVkICZ2NGwyLWlucHV0Oy4gTm8gcmVwbGFjZW1lbnQgZXhpc3RzIGZvciB0aGUKKzxjb25zdGFudD5WSURFT19UVU5FUl9OT1JNPC9jb25zdGFudD4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlCit2aWRlbyBzdGFuZGFyZCBjYW4gYmUgc3dpdGNoZWQuIFRoZSA8c3RydWN0ZmllbGQ+bW9kZTwvc3RydWN0ZmllbGQ+CitmaWVsZCB0byBzZWxlY3QgYSBkaWZmZXJlbnQgdmlkZW8gc3RhbmRhcmQgd2FzIHJlcGxhY2VkIGJ5IGEgd2hvbGUgbmV3CitzZXQgb2YgaW9jdGxzIGFuZCBzdHJ1Y3R1cmVzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJzdGFuZGFyZCIgLz4uCitEdWUgdG8gaXRzIHViaXF1aXR5IGl0IHNob3VsZCBiZSBtZW50aW9uZWQgdGhlIEJUVFYgZHJpdmVyIHN1cHBvcnRzCitzZXZlcmFsIHN0YW5kYXJkcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVndWxhcgorPGNvbnN0YW50PlZJREVPX01PREVfUEFMPC9jb25zdGFudD4gKDApLAorPGNvbnN0YW50PlZJREVPX01PREVfTlRTQzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJREVPX01PREVfU0VDQU08L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURFT19NT0RFX0FVVE88L2NvbnN0YW50PiAoMykuIE5hbWVseSBOL1BBTCBBcmdlbnRpbmEsCitNL1BBTCwgTi9QQUwsIGFuZCBOVFNDIEphcGFuIHdpdGggbnVtYmVycyAzLTYgKHNpYykuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJREVPX1RVTkVSX1NURVJFT19PTjwvY29uc3RhbnQ+IGZsYWcKK2luZGljYXRpbmcgc3RlcmVvIHJlY2VwdGlvbiBiZWNhbWUKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TVEVSRU88L2NvbnN0YW50PiBpbiBmaWVsZAorPHN0cnVjdGZpZWxkPnJ4c3ViY2hhbnM8L3N0cnVjdGZpZWxkPi4gVGhpcyBmaWVsZCBhbHNvIHBlcm1pdHMgdGhlCitkZXRlY3Rpb24gb2YgbW9uYXVyYWwgYW5kIGJpbGluZ3VhbCBhdWRpbywgc2VlIHRoZSBkZWZpbml0aW9uIG9mCismdjRsMi10dW5lcjsgZm9yIGRldGFpbHMuIFByZXNlbnRseSBubyByZXBsYWNlbWVudCBleGlzdHMgZm9yIHRoZQorPGNvbnN0YW50PlZJREVPX1RVTkVSX1JEU19PTjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJREVPX1RVTkVSX01CU19PTjwvY29uc3RhbnQ+IGZsYWdzLjwvcGFyYT4KKworICAgICAgPHBhcmE+IFRoZSA8Y29uc3RhbnQ+VklERU9fVFVORVJfTE9XPC9jb25zdGFudD4gZmxhZyB3YXMgcmVuYW1lZAordG8gPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX0xPVzwvY29uc3RhbnQ+IGluIHRoZSAmdjRsMi10dW5lcjsKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ0dGUkVRPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DU0ZSRVE8L2NvbnN0YW50PiBpb2N0bCB0byBjaGFuZ2UgdGhlIHR1bmVyIGZyZXF1ZW5jeQord2hlcmUgcmVuYW1lZCB0byAmVklESU9DLUctRlJFUVVFTkNZOyBhbmQgICZWSURJT0MtUy1GUkVRVUVOQ1k7LiBUaGV5Cit0YWtlIGEgcG9pbnRlciB0byBhICZ2NGwyLWZyZXF1ZW5jeTsgaW5zdGVhZCBvZiBhbiB1bnNpZ25lZCBsb25nCitpbnRlZ2VyLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idjRsLWltYWdlLXByb3BlcnRpZXMiPgorICAgICAgPHRpdGxlPkltYWdlIFByb3BlcnRpZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WNEwyIGhhcyBubyBlcXVpdmFsZW50IG9mIHRoZQorPGNvbnN0YW50PlZJRElPQ0dQSUNUPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5WSURJT0NTUElDVDwvY29uc3RhbnQ+Citpb2N0bCBhbmQgc3RydWN0IDxzdHJ1Y3RuYW1lPnZpZGVvX3BpY3R1cmU8L3N0cnVjdG5hbWU+LiBUaGUgZm9sbG93aW5nCitmaWVsZHMgd2hlcmUgcmVwbGFjZWQgYnkgVjRMMiBjb250cm9scyBhY2Nlc3NpYmxlIHdpdGggdGhlCismVklESU9DLVFVRVJZQ1RSTDssICZWSURJT0MtRy1DVFJMOyBhbmQgJlZJRElPQy1TLUNUUkw7IGlvY3Rsczo8aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMiI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0IDxzdHJ1Y3RuYW1lPnZpZGVvX3BpY3R1cmU8L3N0cnVjdG5hbWU+PC9lbnRyeT4KKwkJPGVudHJ5PlY0TDIgQ29udHJvbCBJRDwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGhlYWQ+CisJICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5icmlnaHRuZXNzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0JSSUdIVE5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5odWU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfSFVFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48c3RydWN0ZmllbGQ+Y29sb3VyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1NBVFVSQVRJT048L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jb250cmFzdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9DT05UUkFTVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHN0cnVjdGZpZWxkPndoaXRlbmVzczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9XSElURU5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGJvZHk+CisJICA8L3Rncm91cD4KKwk8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgVjRMIHBpY3R1cmUgY29udHJvbHMgYXJlIGFzc3VtZWQgdG8gcmFuZ2UgZnJvbSAwIHRvCis2NTUzNSB3aXRoIG5vIHBhcnRpY3VsYXIgcmVzZXQgdmFsdWUuIFRoZSBWNEwyIEFQSSBwZXJtaXRzIGFyYml0cmFyeQorbGltaXRzIGFuZCBkZWZhdWx0cyB3aGljaCBjYW4gYmUgcXVlcmllZCB3aXRoIHRoZSAmVklESU9DLVFVRVJZQ1RSTDsKK2lvY3RsLiBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBjb250cm9scyBzZWUgPHhyZWYKK2xpbmtlbmQ9ImNvbnRyb2wiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxzdHJ1Y3RmaWVsZD5kZXB0aDwvc3RydWN0ZmllbGQ+IChhdmVyYWdlIG51bWJlciBvZgorYml0cyBwZXIgcGl4ZWwpIG9mIGEgdmlkZW8gaW1hZ2UgaXMgaW1wbGllZCBieSB0aGUgc2VsZWN0ZWQgaW1hZ2UKK2Zvcm1hdC4gVjRMMiBkb2VzIG5vdCBleHBsaWNpdGVseSBwcm92aWRlIHN1Y2ggaW5mb3JtYXRpb24gYXNzdW1pbmcKK2FwcGxpY2F0aW9ucyByZWNvZ25pemluZyB0aGUgZm9ybWF0IGFyZSBhd2FyZSBvZiB0aGUgaW1hZ2UgZGVwdGggYW5kCitvdGhlcnMgbmVlZCBub3Qga25vdy4gVGhlIDxzdHJ1Y3RmaWVsZD5wYWxldHRlPC9zdHJ1Y3RmaWVsZD4gZmllbGQKK21vdmVkIGludG8gdGhlICZ2NGwyLXBpeC1mb3JtYXQ7OjxpbmZvcm1hbHRhYmxlPgorCSAgPHRncm91cCBjb2xzPSIyIj4KKwkgICAgPHRoZWFkPgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT5zdHJ1Y3QgPHN0cnVjdG5hbWU+dmlkZW9fcGljdHVyZTwvc3RydWN0bmFtZT4KKzxzdHJ1Y3RmaWVsZD5wYWxldHRlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+JnY0bDItcGl4LWZvcm1hdDsKKzxzdHJ1Y3RmaWVsZD5waXhmbXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgIDwvdGhlYWQ+CisJICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX0dSRVk8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULUdSRVkiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfR1JFWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ISTI0MDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJwaXhmbXQtcmVzZXJ2ZWQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSEkyNDA8L2NvbnN0YW50PjwvbGluaz48Zm9vdG5vdGU+CisJCSAgICAgIDxwYXJhPlRoaXMgaXMgYSBjdXN0b20gZm9ybWF0IHVzZWQgYnkgdGhlIEJUVFYKK2RyaXZlciwgbm90IG9uZSBvZiB0aGUgVjRMMiBzdGFuZGFyZCBmb3JtYXRzLjwvcGFyYT4KKwkJICAgIDwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1JHQjU2NTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJwaXhmbXQtcmdiIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjU2NTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SR0I1NTU8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0icGl4Zm10LXJnYiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I1NTU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1BBTEVUVEVfUkdCMjQ8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0icGl4Zm10LXJnYiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SR0IzMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJwaXhmbXQtcmdiIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjMyPC9jb25zdGFudD48L2xpbms+PGZvb3Rub3RlPgorCQkgICAgICA8cGFyYT5QcmVzdW1hYmx5IGFsbCBWNEwgUkdCIGZvcm1hdHMgYXJlCitsaXR0bGUtZW5kaWFuLCBhbHRob3VnaCBzb21lIGRyaXZlcnMgbWlnaHQgaW50ZXJwcmV0IHRoZW0gYWNjb3JkaW5nIHRvIG1hY2hpbmUgZW5kaWFuZXNzLiBWNEwyIGRlZmluZXMgbGl0dGxlLWVuZGlhbiwgYmlnLWVuZGlhbiBhbmQgcmVkL2JsdWUKK3N3YXBwZWQgdmFyaWFudHMuIEZvciBkZXRhaWxzIHNlZSA8eHJlZiBsaW5rZW5kPSJwaXhmbXQtcmdiIiAvPi48L3BhcmE+CisJCSAgICA8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjI8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVWVYiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48cGFyYT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVlWPC9jb25zdGFudD48Zm9vdG5vdGU+CisJCSAgICAgIDxwYXJhPjxjb25zdGFudD5WSURFT19QQUxFVFRFX1lVVjQyMjwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlZJREVPX1BBTEVUVEVfWVVZVjwvY29uc3RhbnQ+IGFyZSB0aGUgc2FtZSBmb3JtYXRzLiBTb21lCitWNEwgZHJpdmVycyByZXNwb25kIHRvIG9uZSwgc29tZSB0byB0aGUgb3RoZXIuPC9wYXJhPgorCQkgICAgPC9mb290bm90ZT48L3BhcmE+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVZViI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVlWPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1VZVlk8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVVZVlkiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfVVlWWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjA8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT5Ob25lPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1BBTEVUVEVfWVVWNDExPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PHBhcmE+PGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1ZNDFQIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1k0MVA8L2NvbnN0YW50PjwvbGluaz48Zm9vdG5vdGU+CisJCSAgICAgIDxwYXJhPk5vdCB0byBiZSBjb25mdXNlZCB3aXRoCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQxMVA8L2NvbnN0YW50Piwgd2hpY2ggaXMgYSBwbGFuYXIKK2Zvcm1hdC48L3BhcmE+IDwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1JBVzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPk5vbmU8Zm9vdG5vdGU+IDxwYXJhPlY0TCBleHBsYWlucyB0aGlzCithczogIlJBVyBjYXB0dXJlIChCVDg0OCkiPC9wYXJhPiA8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjJQPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PHBhcmE+PGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY0MjJQIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQyMlA8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PGNvbnN0YW50PlZJREVPX1BBTEVUVEVfWVVWNDExUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPjxsaW5rCitsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDExUCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MTFQPC9jb25zdGFudD48L2xpbms+PGZvb3Rub3RlPgorCQkgICAgICA8cGFyYT5Ob3QgdG8gYmUgY29uZnVzZWQgd2l0aAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD4sIHdoaWNoIGlzIGEgcGFja2VkCitmb3JtYXQuPC9wYXJhPiA8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48Y29uc3RhbnQ+VklERU9fUEFMRVRURV9ZVVY0MjBQPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+PHBhcmE+PGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVlU0MjAiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDIwPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5Pjxjb25zdGFudD5WSURFT19QQUxFVFRFX1lVVjQxMFA8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT48bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQxMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MTA8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90Ym9keT4KKwkgIDwvdGdyb3VwPgorCTwvaW5mb3JtYWx0YWJsZT48L3BhcmE+CisKKyAgICAgIDxwYXJhPlY0TDIgaW1hZ2UgZm9ybWF0cyBhcmUgZGVmaW5lZCBpbiA8eHJlZgorbGlua2VuZD0icGl4Zm10IiAvPi4gVGhlIGltYWdlIGZvcm1hdCBjYW4gYmUgc2VsZWN0ZWQgd2l0aCB0aGUKKyZWSURJT0MtUy1GTVQ7IGlvY3RsLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5BdWRpbzwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoZSA8Y29uc3RhbnQ+VklESU9DR0FVRElPPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DU0FVRElPPC9jb25zdGFudD4gaW9jdGwgYW5kIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fYXVkaW88L3N0cnVjdG5hbWU+IGFyZSB1c2VkIHRvIGVudW1lcmF0ZSB0aGUKK2F1ZGlvIGlucHV0cyBvZiBhIFY0TCBkZXZpY2UuIFRoZSBlcXVpdmFsZW50IFY0TDIgaW9jdGxzIGFyZQorJlZJRElPQy1HLUFVRElPOyBhbmQgJlZJRElPQy1TLUFVRElPOyB1c2luZyAmdjRsMi1hdWRpbzsgYXMKK2Rpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmF1ZGlvPC9zdHJ1Y3RmaWVsZD4gImNoYW5uZWwgbnVtYmVyIgorZmllbGQgY291bnRpbmcgYXVkaW8gaW5wdXRzIHdhcyByZW5hbWVkIHRvCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPi48L3BhcmE+CisKKyAgICAgIDxwYXJhPk9uIDxjb25zdGFudD5WSURJT0NTQVVESU88L2NvbnN0YW50PiB0aGUKKzxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc2VsZWN0cyA8ZW1waGFzaXM+b25lPC9lbXBoYXNpcz4KK29mIHRoZSA8Y29uc3RhbnQ+VklERU9fU09VTkRfTU9OTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJREVPX1NPVU5EX1NURVJFTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJREVPX1NPVU5EX0xBTkcxPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WSURFT19TT1VORF9MQU5HMjwvY29uc3RhbnQ+IGF1ZGlvIGRlbW9kdWxhdGlvbiBtb2Rlcy4gV2hlbgordGhlIGN1cnJlbnQgYXVkaW8gc3RhbmRhcmQgaXMgQlRTQworPGNvbnN0YW50PlZJREVPX1NPVU5EX0xBTkcyPC9jb25zdGFudD4gcmVmZXJzIHRvIFNBUCBhbmQKKzxjb25zdGFudD5WSURFT19TT1VORF9MQU5HMTwvY29uc3RhbnQ+IGlzIG1lYW5pbmdsZXNzLiBBbHNvCit1bmRvY3VtZW50ZWQgaW4gdGhlIFY0TCBzcGVjaWZpY2F0aW9uLCB0aGVyZSBpcyBubyB3YXkgdG8gcXVlcnkgdGhlCitzZWxlY3RlZCBtb2RlLiBPbiA8Y29uc3RhbnQ+VklESU9DR0FVRElPPC9jb25zdGFudD4gdGhlIGRyaXZlciByZXR1cm5zCit0aGUgPGVtcGhhc2lzPmFjdHVhbGx5IHJlY2VpdmVkPC9lbXBoYXNpcz4gYXVkaW8gcHJvZ3JhbW1lcyBpbiB0aGlzCitmaWVsZC4gSW4gdGhlIFY0TDIgQVBJIHRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZSAmdjRsMi10dW5lcjsKKzxzdHJ1Y3RmaWVsZD5yeHN1YmNoYW5zPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+YXVkbW9kZTwvc3RydWN0ZmllbGQ+IGZpZWxkcywgcmVzcGVjdGl2ZWx5LiBTZWUgPHhyZWYKK2xpbmtlbmQ9InR1bmVyIiAvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0dW5lcnMuIFJlbGF0ZWQgdG8gYXVkaW8KK21vZGVzICZ2NGwyLWF1ZGlvOyBhbHNvIHJlcG9ydHMgaWYgdGhpcyBpcyBhIG1vbm8gb3Igc3RlcmVvCitpbnB1dCwgcmVnYXJkbGVzcyBpZiB0aGUgc291cmNlIGlzIGEgdHVuZXIuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGZpZWxkcyB3aGVyZSByZXBsYWNlZCBieSBWNEwyIGNvbnRyb2xzCithY2Nlc3NpYmxlIHdpdGggdGhlICZWSURJT0MtUVVFUllDVFJMOywgJlZJRElPQy1HLUNUUkw7IGFuZAorJlZJRElPQy1TLUNUUkw7IGlvY3Rsczo8aW5mb3JtYWx0YWJsZT4KKwkgIDx0Z3JvdXAgY29scz0iMiI+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+c3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19hdWRpbzwvc3RydWN0bmFtZT48L2VudHJ5PgorCQk8ZW50cnk+VjRMMiBDb250cm9sIElEPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90aGVhZD4KKwkgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHN0cnVjdGZpZWxkPnZvbHVtZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19WT0xVTUU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD5iYXNzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0JBU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxzdHJ1Y3RmaWVsZD50cmVibGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJCTxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fVFJFQkxFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeT48c3RydWN0ZmllbGQ+YmFsYW5jZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19CQUxBTkNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3Rib2R5PgorCSAgPC90Z3JvdXA+CisJPC9pbmZvcm1hbHRhYmxlPjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIGNvbnRyb2xzIGFyZSBzdXBwb3J0ZWQgYnkgYQorZHJpdmVyIFY0TCBwcm92aWRlcyB0aGUgPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4KKzxjb25zdGFudD5WSURFT19BVURJT19WT0xVTUU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURFT19BVURJT19CQVNTPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklERU9fQVVESU9fVFJFQkxFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklERU9fQVVESU9fQkFMQU5DRTwvY29uc3RhbnQ+LiBJbiB0aGUgVjRMMiBBUEkgdGhlCismVklESU9DLVFVRVJZQ1RSTDsgaW9jdGwgcmVwb3J0cyBpZiB0aGUgcmVzcGVjdGl2ZSBjb250cm9sIGlzCitzdXBwb3J0ZWQuIEFjY29yZGluZ2x5IHRoZSA8Y29uc3RhbnQ+VklERU9fQVVESU9fTVVUQUJMRTwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlZJREVPX0FVRElPX01VVEU8L2NvbnN0YW50PiBmbGFncyB3aGVyZSByZXBsYWNlZCBieSB0aGUKK2Jvb2xlYW4gPGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX01VVEU8L2NvbnN0YW50PiBjb250cm9sLjwvcGFyYT4KKworICAgICAgPHBhcmE+QWxsIFY0TDIgY29udHJvbHMgaGF2ZSBhIDxzdHJ1Y3RmaWVsZD5zdGVwPC9zdHJ1Y3RmaWVsZD4KK2F0dHJpYnV0ZSByZXBsYWNpbmcgdGhlIHN0cnVjdCA8c3RydWN0bmFtZT52aWRlb19hdWRpbzwvc3RydWN0bmFtZT4KKzxzdHJ1Y3RmaWVsZD5zdGVwPC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFRoZSBWNEwgYXVkaW8gY29udHJvbHMgYXJlCithc3N1bWVkIHRvIHJhbmdlIGZyb20gMCB0byA2NTUzNSB3aXRoIG5vIHBhcnRpY3VsYXIgcmVzZXQgdmFsdWUuIFRoZQorVjRMMiBBUEkgcGVybWl0cyBhcmJpdHJhcnkgbGltaXRzIGFuZCBkZWZhdWx0cyB3aGljaCBjYW4gYmUgcXVlcmllZAord2l0aCB0aGUgJlZJRElPQy1RVUVSWUNUUkw7IGlvY3RsLiBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dAorY29udHJvbHMgc2VlIDx4cmVmIGxpbmtlbmQ9ImNvbnRyb2wiIC8+LjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5GcmFtZSBCdWZmZXIgT3ZlcmxheTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoZSBWNEwyIGlvY3RscyBlcXVpdmFsZW50IHRvCis8Y29uc3RhbnQ+VklESU9DR0ZCVUY8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlZJRElPQ1NGQlVGPC9jb25zdGFudD4KK2FyZSAmVklESU9DLUctRkJVRjsgYW5kICZWSURJT0MtUy1GQlVGOy4gVGhlCis8c3RydWN0ZmllbGQ+YmFzZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fYnVmZmVyPC9zdHJ1Y3RuYW1lPiByZW1haW5lZCB1bmNoYW5nZWQsIGV4Y2VwdCBWNEwyCitkZWZpbmVzIGEgZmxhZyB0byBpbmRpY2F0ZSBub24tZGVzdHJ1Y3RpdmUgb3ZlcmxheXMgaW5zdGVhZCBvZiBhCis8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+IHBvaW50ZXIuIEFsbCBvdGhlciBmaWVsZHMgbW92ZWQgaW50byB0aGUKKyZ2NGwyLXBpeC1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPiBzdWJzdHJ1Y3R1cmUgb2YKKyZ2NGwyLWZyYW1lYnVmZmVyOy4gVGhlIDxzdHJ1Y3RmaWVsZD5kZXB0aDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcworcmVwbGFjZWQgYnkgPHN0cnVjdGZpZWxkPnBpeGVsZm9ybWF0PC9zdHJ1Y3RmaWVsZD4uIFNlZSA8eHJlZgorCSAgbGlua2VuZD0icGl4Zm10LXJnYiIgLz4gZm9yIGEgbGlzdCBvZiBSR0IgZm9ybWF0cyBhbmQgdGhlaXIKK3Jlc3BlY3RpdmUgY29sb3IgZGVwdGhzLjwvcGFyYT4KKworICAgICAgPHBhcmE+SW5zdGVhZCBvZiB0aGUgc3BlY2lhbCBpb2N0bHMKKzxjb25zdGFudD5WSURJT0NHV0lOPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5WSURJT0NTV0lOPC9jb25zdGFudD4KK1Y0TDIgdXNlcyB0aGUgZ2VuZXJhbC1wdXJwb3NlIGRhdGEgZm9ybWF0IG5lZ290aWF0aW9uIGlvY3RscworJlZJRElPQy1HLUZNVDsgYW5kICZWSURJT0MtUy1GTVQ7LiBUaGV5IHRha2UgYSBwb2ludGVyIHRvIGEKKyZ2NGwyLWZvcm1hdDsgYXMgYXJndW1lbnQuIEhlcmUgdGhlIDxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPgorbWVtYmVyIG9mIHRoZSA8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gdW5pb24gaXMgdXNlZCwgYQorJnY0bDItd2luZG93Oy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+eDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnk8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gZmllbGRzIG9mIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fd2luZG93PC9zdHJ1Y3RuYW1lPiBtb3ZlZCBpbnRvICZ2NGwyLXJlY3Q7CitzdWJzdHJ1Y3R1cmUgPHN0cnVjdGZpZWxkPnc8L3N0cnVjdGZpZWxkPiBvZiBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfd2luZG93PC9zdHJ1Y3RuYW1lPi4gVGhlCis8c3RydWN0ZmllbGQ+Y2hyb21ha2V5PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+Y2xpcHM8L3N0cnVjdGZpZWxkPiwgYW5kCis8c3RydWN0ZmllbGQ+Y2xpcGNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGRzIHJlbWFpbmVkIHVuY2hhbmdlZC4gU3RydWN0Cis8c3RydWN0bmFtZT52aWRlb19jbGlwPC9zdHJ1Y3RuYW1lPiB3YXMgcmVuYW1lZCB0byAmdjRsMi1jbGlwOywgYWxzbworY29udGFpbmluZyBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3JlY3Q8L3N0cnVjdG5hbWU+LCBidXQgdGhlCitzZW1hbnRpY3MgYXJlIHN0aWxsIHRoZSBzYW1lLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURFT19XSU5ET1dfSU5URVJMQUNFPC9jb25zdGFudD4gZmxhZyB3YXMKK2Ryb3BwZWQuIEluc3RlYWQgYXBwbGljYXRpb25zIG11c3Qgc2V0IHRoZQorPHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8KKzxjb25zdGFudD5WNEwyX0ZJRUxEX0FOWTwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9JTlRFUkxBQ0VEPC9jb25zdGFudD4uIFRoZQorPGNvbnN0YW50PlZJREVPX1dJTkRPV19DSFJPTUFLRVk8L2NvbnN0YW50PiBmbGFnIG1vdmVkIGludG8KKyZ2NGwyLWZyYW1lYnVmZmVyOywgdW5kZXIgdGhlIG5ldyBuYW1lCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZPC9jb25zdGFudD4uPC9wYXJhPgorCisgICAgICA8cGFyYT5JbiBWNEwsIHN0b3JpbmcgYSBiaXRtYXAgcG9pbnRlciBpbgorPHN0cnVjdGZpZWxkPmNsaXBzPC9zdHJ1Y3RmaWVsZD4gYW5kIHNldHRpbmcKKzxzdHJ1Y3RmaWVsZD5jbGlwY291bnQ8L3N0cnVjdGZpZWxkPiB0bworPGNvbnN0YW50PlZJREVPX0NMSVBfQklUTUFQPC9jb25zdGFudD4gKC0xKSByZXF1ZXN0cyBiaXRtYXAKK2NsaXBwaW5nLCB1c2luZyBhIGZpeGVkIHNpemUgYml0bWFwIG9mIDEwMjQgJnRpbWVzOyA2MjUgYml0cy4gU3RydWN0Cis8c3RydWN0bmFtZT52NGwyX3dpbmRvdzwvc3RydWN0bmFtZT4gaGFzIGEgc2VwYXJhdGUKKzxzdHJ1Y3RmaWVsZD5iaXRtYXA8L3N0cnVjdGZpZWxkPiBwb2ludGVyIGZpZWxkIGZvciB0aGlzIHB1cnBvc2UgYW5kCit0aGUgYml0bWFwIHNpemUgaXMgZGV0ZXJtaW5lZCBieSA8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPncuaGVpZ2h0PC9zdHJ1Y3RmaWVsZD4uPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ0NBUFRVUkU8L2NvbnN0YW50PiBpb2N0bCB0byBlbmFibGUgb3IKK2Rpc2FibGUgb3ZlcmxheSB3YXMgcmVuYW1lZCB0byAmVklESU9DLU9WRVJMQVk7LjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5Dcm9wcGluZzwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRvIGNhcHR1cmUgb25seSBhIHN1YnNlY3Rpb24gb2YgdGhlIGZ1bGwgcGljdHVyZSBWNEwKK2RlZmluZXMgdGhlIDxjb25zdGFudD5WSURJT0NHQ0FQVFVSRTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ1NDQVBUVVJFPC9jb25zdGFudD4gaW9jdGxzIHVzaW5nIHN0cnVjdAorPHN0cnVjdG5hbWU+dmlkZW9fY2FwdHVyZTwvc3RydWN0bmFtZT4uIFRoZSBlcXVpdmFsZW50IFY0TDIgaW9jdGxzIGFyZQorJlZJRElPQy1HLUNST1A7IGFuZCAmVklESU9DLVMtQ1JPUDsgdXNpbmcgJnY0bDItY3JvcDssIGFuZCB0aGUgcmVsYXRlZAorJlZJRElPQy1DUk9QQ0FQOyBpb2N0bC4gVGhpcyBpcyBhIHJhdGhlciBjb21wbGV4IG1hdHRlciwgc2VlCis8eHJlZiBsaW5rZW5kPSJjcm9wIiAvPiBmb3IgZGV0YWlscy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSA8c3RydWN0ZmllbGQ+eDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnk8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gZmllbGRzIG1vdmVkIGludG8gJnY0bDItcmVjdDsKK3N1YnN0cnVjdHVyZSA8c3RydWN0ZmllbGQ+Yzwvc3RydWN0ZmllbGQ+IG9mIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9jcm9wPC9zdHJ1Y3RuYW1lPi4gVGhlCis8c3RydWN0ZmllbGQ+ZGVjaW1hdGlvbjwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBkcm9wcGVkLiBJbiB0aGUgVjRMMgorQVBJIHRoZSBzY2FsaW5nIGZhY3RvciBpcyBpbXBsaWVkIGJ5IHRoZSBzaXplIG9mIHRoZSBjcm9wcGluZworcmVjdGFuZ2xlIGFuZCB0aGUgc2l6ZSBvZiB0aGUgY2FwdHVyZWQgb3Igb3ZlcmxhaWQgaW1hZ2UuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJREVPX0NBUFRVUkVfT0REPC9jb25zdGFudD4KK2FuZCA8Y29uc3RhbnQ+VklERU9fQ0FQVFVSRV9FVkVOPC9jb25zdGFudD4gZmxhZ3MgdG8gY2FwdHVyZSBvbmx5IHRoZQorb2RkIG9yIGV2ZW4gZmllbGQsIHJlc3BlY3RpdmVseSwgd2VyZSByZXBsYWNlZCBieQorPGNvbnN0YW50PlY0TDJfRklFTERfVE9QPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9CT1RUT008L2NvbnN0YW50PiBpbiB0aGUgZmllbGQgbmFtZWQKKzxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IG9mICZ2NGwyLXBpeC1mb3JtYXQ7IGFuZAorJnY0bDItd2luZG93Oy4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCB0byBzZWxlY3QgYSBjYXB0dXJlIG9yCitvdmVybGF5IGZvcm1hdCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bC48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UmVhZGluZyBJbWFnZXMsIE1lbW9yeSBNYXBwaW5nPC90aXRsZT4KKworICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkNhcHR1cmluZyB1c2luZyB0aGUgcmVhZCBtZXRob2Q8L3RpdGxlPgorCisJPHBhcmE+VGhlcmUgaXMgbm8gZXNzZW50aWFsIGRpZmZlcmVuY2UgYmV0d2VlbiByZWFkaW5nIGltYWdlcworZnJvbSBhIFY0TCBvciBWNEwyIGRldmljZSB1c2luZyB0aGUgJmZ1bmMtcmVhZDsgZnVuY3Rpb24sIGhvd2V2ZXIgVjRMMgorZHJpdmVycyBhcmUgbm90IHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhpcyBJL08gbWV0aG9kLiBBcHBsaWNhdGlvbnMgY2FuCitkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSB3aXRoIHRoZSAmVklESU9DLVFVRVJZQ0FQOworaW9jdGwuIEFsbCBWNEwyIGRldmljZXMgZXhjaGFuZ2luZyBkYXRhIHdpdGggYXBwbGljYXRpb25zIG11c3Qgc3VwcG9ydAordGhlICZmdW5jLXNlbGVjdDsgYW5kICZmdW5jLXBvbGw7IGZ1bmN0aW9ucy48L3BhcmE+CisKKwk8cGFyYT5UbyBzZWxlY3QgYW4gaW1hZ2UgZm9ybWF0IGFuZCBzaXplLCBWNEwgcHJvdmlkZXMgdGhlCis8Y29uc3RhbnQ+VklESU9DU1BJQ1Q8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlZJRElPQ1NXSU48L2NvbnN0YW50PgoraW9jdGxzLiBWNEwyIHVzZXMgdGhlIGdlbmVyYWwtcHVycG9zZSBkYXRhIGZvcm1hdCBuZWdvdGlhdGlvbiBpb2N0bHMKKyZWSURJT0MtRy1GTVQ7IGFuZCAmVklESU9DLVMtRk1UOy4gVGhleSB0YWtlIGEgcG9pbnRlciB0byBhCismdjRsMi1mb3JtYXQ7IGFzIGFyZ3VtZW50LCBoZXJlIHRoZSAmdjRsMi1waXgtZm9ybWF0OyBuYW1lZAorPHN0cnVjdGZpZWxkPnBpeDwvc3RydWN0ZmllbGQ+IG9mIGl0cyA8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4KK3VuaW9uIGlzIHVzZWQuPC9wYXJhPgorCisJPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFY0TDIgcmVhZCBpbnRlcmZhY2Ugc2VlCis8eHJlZiBsaW5rZW5kPSJydyIgLz4uPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkNhcHR1cmluZyB1c2luZyBtZW1vcnkgbWFwcGluZzwvdGl0bGU+CisKKwk8cGFyYT5BcHBsaWNhdGlvbnMgY2FuIHJlYWQgZnJvbSBWNEwgZGV2aWNlcyBieSBtYXBwaW5nCitidWZmZXJzIGluIGRldmljZSBtZW1vcnksIG9yIG1vcmUgb2Z0ZW4ganVzdCBidWZmZXJzIGFsbG9jYXRlZCBpbgorRE1BLWFibGUgc3lzdGVtIG1lbW9yeSwgaW50byB0aGVpciBhZGRyZXNzIHNwYWNlLiBUaGlzIGF2b2lkcyB0aGUgZGF0YQorY29weWluZyBvdmVyaGVhZCBvZiB0aGUgcmVhZCBtZXRob2QuIFY0TDIgc3VwcG9ydHMgbWVtb3J5IG1hcHBpbmcgYXMKK3dlbGwsIHdpdGggYSBmZXcgZGlmZmVyZW5jZXMuPC9wYXJhPgorCisJPGluZm9ybWFsdGFibGU+CisJICA8dGdyb3VwIGNvbHM9IjIiPgorCSAgICA8dGhlYWQ+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PlY0TDwvZW50cnk+CisJCTxlbnRyeT5WNEwyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90aGVhZD4KKwkgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PC9lbnRyeT4KKwkJPGVudHJ5PlRoZSBpbWFnZSBmb3JtYXQgbXVzdCBiZSBzZWxlY3RlZCBiZWZvcmUKK2J1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgd2l0aCB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuIFdoZW4gbm8gZm9ybWF0CitpcyBzZWxlY3RlZCB0aGUgZHJpdmVyIG1heSB1c2UgdGhlIGxhc3QsIHBvc3NpYmx5IGJ5IGFub3RoZXIKK2FwcGxpY2F0aW9uIHJlcXVlc3RlZCBmb3JtYXQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHBhcmE+QXBwbGljYXRpb25zIGNhbm5vdCBjaGFuZ2UgdGhlIG51bWJlciBvZgorYnVmZmVycy4gVGhlIGl0IGlzIGJ1aWx0IGludG8gdGhlIGRyaXZlciwgdW5sZXNzIGl0IGhhcyBhIG1vZHVsZQorb3B0aW9uIHRvIGNoYW5nZSB0aGUgbnVtYmVyIHdoZW4gdGhlIGRyaXZlciBtb2R1bGUgaXMKK2xvYWRlZC48L3BhcmE+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPlRoZSAmVklESU9DLVJFUUJVRlM7IGlvY3RsIGFsbG9jYXRlcyB0aGUKK2Rlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMsIHRoaXMgaXMgYSByZXF1aXJlZCBzdGVwIGluIHRoZSBpbml0aWFsaXphdGlvbgorc2VxdWVuY2UuPC9wYXJhPjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5PjxwYXJhPkRyaXZlcnMgbWFwIGFsbCBidWZmZXJzIGFzIG9uZSBjb250aWd1b3VzCityYW5nZSBvZiBtZW1vcnkuIFRoZSA8Y29uc3RhbnQ+VklESU9DR01CVUY8L2NvbnN0YW50PiBpb2N0bCBpcworYXZhaWxhYmxlIHRvIHF1ZXJ5IHRoZSBudW1iZXIgb2YgYnVmZmVycywgdGhlIG9mZnNldCBvZiBlYWNoIGJ1ZmZlcgorZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHZpcnR1YWwgZmlsZSwgYW5kIHRoZSBvdmVyYWxsIGFtb3VudCBvZiBtZW1vcnkKK3VzZWQsIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGFyZ3VtZW50cyBmb3IgdGhlICZmdW5jLW1tYXA7CitmdW5jdGlvbi48L3BhcmE+PC9lbnRyeT4KKwkJPGVudHJ5PjxwYXJhPkJ1ZmZlcnMgYXJlIGluZGl2aWR1YWxseSBtYXBwZWQuIFRoZQorb2Zmc2V0IGFuZCBzaXplIG9mIGVhY2ggYnVmZmVyIGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggdGhlCismVklESU9DLVFVRVJZQlVGOyBpb2N0bC48L3BhcmE+PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnk+PHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NNQ0FQVFVSRTwvY29uc3RhbnQ+Citpb2N0bCBwcmVwYXJlcyBhIGJ1ZmZlciBmb3IgY2FwdHVyaW5nLiBJdCBhbHNvIGRldGVybWluZXMgdGhlIGltYWdlCitmb3JtYXQgZm9yIHRoaXMgYnVmZmVyLiBUaGUgaW9jdGwgcmV0dXJucyBpbW1lZGlhdGVseSwgZXZlbnR1YWxseSB3aXRoCithbiAmRUFHQUlOOyBpZiBubyB2aWRlbyBzaWduYWwgaGFkIGJlZW4gZGV0ZWN0ZWQuIFdoZW4gdGhlIGRyaXZlcgorc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSBidWZmZXIgYXBwbGljYXRpb25zIGNhbiBjYWxsIHRoZSBpb2N0bCBtdWx0aXBsZQordGltZXMgYW5kIHRodXMgaGF2ZSBtdWx0aXBsZSBvdXRzdGFuZGluZyBjYXB0dXJlCityZXF1ZXN0cy48L3BhcmE+PHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NTWU5DPC9jb25zdGFudD4gaW9jdGwKK3N1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBhIHBhcnRpY3VsYXIgYnVmZmVyIGhhcyBiZWVuCitmaWxsZWQuPC9wYXJhPjwvZW50cnk+CisJCTxlbnRyeT48cGFyYT5Ecml2ZXJzIG1haW50YWluIGFuIGluY29taW5nIGFuZCBvdXRnb2luZworcXVldWUuICZWSURJT0MtUUJVRjsgZW5xdWV1ZXMgYW55IGVtcHR5IGJ1ZmZlciBpbnRvIHRoZSBpbmNvbWluZworcXVldWUuIEZpbGxlZCBidWZmZXJzIGFyZSBkZXF1ZXVlZCBmcm9tIHRoZSBvdXRnb2luZyBxdWV1ZSB3aXRoIHRoZQorJlZJRElPQy1EUUJVRjsgaW9jdGwuIFRvIHdhaXQgdW50aWwgZmlsbGVkIGJ1ZmZlcnMgYmVjb21lIGF2YWlsYWJsZSB0aGlzCitmdW5jdGlvbiwgJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBjYW4gYmUgdXNlZC4gVGhlCismVklESU9DLVNUUkVBTU9OOyBpb2N0bCBtdXN0IGJlIGNhbGxlZCBvbmNlIGFmdGVyIGVucXVldWluZyBvbmUgb3IKK21vcmUgYnVmZmVycyB0byBzdGFydCBjYXB0dXJpbmcuIEl0cyBjb3VudGVycGFydAorJlZJRElPQy1TVFJFQU1PRkY7IHN0b3BzIGNhcHR1cmluZyBhbmQgZGVxdWV1ZXMgYWxsIGJ1ZmZlcnMgZnJvbSBib3RoCitxdWV1ZXMuIEFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgdGhlIHNpZ25hbCBzdGF0dXMsIGlmIGtub3duLCB3aXRoIHRoZQorJlZJRElPQy1FTlVNSU5QVVQ7IGlvY3RsLjwvcGFyYT48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3Rib2R5PgorCSAgPC90Z3JvdXA+CisJPC9pbmZvcm1hbHRhYmxlPgorCisJPHBhcmE+Rm9yIGEgbW9yZSBpbi1kZXB0aCBkaXNjdXNzaW9uIG9mIG1lbW9yeSBtYXBwaW5nIGFuZAorZXhhbXBsZXMsIHNlZSA8eHJlZiBsaW5rZW5kPSJtbWFwIiAvPi48L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UmVhZGluZyBSYXcgVkJJIERhdGE8L3RpdGxlPgorCisgICAgICA8cGFyYT5PcmlnaW5hbGx5IHRoZSBWNEwgQVBJIGRpZCBub3Qgc3BlY2lmeSBhIHJhdyBWQkkgY2FwdHVyZQoraW50ZXJmYWNlLCBvbmx5IHRoZSBkZXZpY2UgZmlsZSA8ZmlsZW5hbWU+L2Rldi92Ymk8L2ZpbGVuYW1lPiB3YXMKK3Jlc2VydmVkIGZvciB0aGlzIHB1cnBvc2UuIFRoZSBvbmx5IGRyaXZlciBzdXBwb3J0aW5nIHRoaXMgaW50ZXJmYWNlCit3YXMgdGhlIEJUVFYgZHJpdmVyLCBkZS1mYWN0byBkZWZpbmluZyB0aGUgVjRMIFZCSSBpbnRlcmZhY2UuIFJlYWRpbmcKK2Zyb20gdGhlIGRldmljZSB5aWVsZHMgYSByYXcgVkJJIGltYWdlIHdpdGggdGhlIGZvbGxvd2luZworcGFyYW1ldGVyczo8aW5mb3JtYWx0YWJsZT4KKwkgICAgPHRncm91cCBjb2xzPSIyIj4KKwkgICAgICA8dGhlYWQ+CisJCTxyb3c+CisJCSAgPGVudHJ5PiZ2NGwyLXZiaS1mb3JtYXQ7PC9lbnRyeT4KKwkJICA8ZW50cnk+VjRMLCBCVFRWIGRyaXZlcjwvZW50cnk+CisJCTwvcm93PgorCSAgICAgIDwvdGhlYWQ+CisJICAgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c2FtcGxpbmdfcmF0ZTwvZW50cnk+CisJCSAgPGVudHJ5PjI4NjM2MzYzJm5ic3A7SHogTlRTQyAob3IgYW55IG90aGVyIDUyNS1saW5lCitzdGFuZGFyZCk7IDM1NDY4OTUwJm5ic3A7SHogUEFMIGFuZCBTRUNBTSAoNjI1LWxpbmUgc3RhbmRhcmRzKTwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5vZmZzZXQ8L2VudHJ5PgorCQkgIDxlbnRyeT4/PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnNhbXBsZXNfcGVyX2xpbmU8L2VudHJ5PgorCQkgIDxlbnRyeT4yMDQ4PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnNhbXBsZV9mb3JtYXQ8L2VudHJ5PgorCQkgIDxlbnRyeT5WNEwyX1BJWF9GTVRfR1JFWS4gVGhlIGxhc3QgZm91ciBieXRlcyAoYQorbWFjaGluZSBlbmRpYW5lc3MgaW50ZWdlcikgY29udGFpbiBhIGZyYW1lIGNvdW50ZXIuPC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0W108L2VudHJ5PgorCQkgIDxlbnRyeT4xMCwgMjczIE5UU0M7IDIyLCAzMzUgUEFMIGFuZCBTRUNBTTwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5jb3VudFtdPC9lbnRyeT4KKwkJICA8ZW50cnk+PHBhcmE+MTYsIDE2PGZvb3Rub3RlPjxwYXJhPk9sZCBkcml2ZXIKK3ZlcnNpb25zIHVzZWQgZGlmZmVyZW50IHZhbHVlcywgZXZlbnR1YWxseSB0aGUgY3VzdG9tCis8Y29uc3RhbnQ+QlRUVl9WQklTSVpFPC9jb25zdGFudD4gaW9jdGwgd2FzIGFkZGVkIHRvIHF1ZXJ5IHRoZQorY29ycmVjdCB2YWx1ZXMuPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5mbGFnczwvZW50cnk+CisJCSAgPGVudHJ5PjA8L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L3Rncm91cD4KKwk8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCisgICAgICA8cGFyYT5VbmRvY3VtZW50ZWQgaW4gdGhlIFY0TCBzcGVjaWZpY2F0aW9uLCBpbiBMaW51eCAyLjMgdGhlCis8Y29uc3RhbnQ+VklESU9DR1ZCSUZNVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ1NWQklGTVQ8L2NvbnN0YW50PiBpb2N0bHMgdXNpbmcgc3RydWN0Cis8c3RydWN0bmFtZT52YmlfZm9ybWF0PC9zdHJ1Y3RuYW1lPiB3ZXJlIGFkZGVkIHRvIGRldGVybWluZSB0aGUgVkJJCitpbWFnZSBwYXJhbWV0ZXJzLiBUaGVzZSBpb2N0bHMgYXJlIG9ubHkgcGFydGlhbGx5IGNvbXBhdGlibGUgd2l0aCB0aGUKK1Y0TDIgVkJJIGludGVyZmFjZSBzcGVjaWZpZWQgaW4gPHhyZWYgbGlua2VuZD0icmF3LXZiaSIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5BbiA8c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgZG9lcyBub3QKK2V4aXN0LCA8c3RydWN0ZmllbGQ+c2FtcGxlX2Zvcm1hdDwvc3RydWN0ZmllbGQ+IGlzIHN1cHBvc2VkIHRvIGJlCis8Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SQVc8L2NvbnN0YW50PiwgZXF1aXZhbGVudCB0bworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9HUkVZPC9jb25zdGFudD4uIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZQorcHJvYmFibHkgZXF1aXZhbGVudCB0byAmdjRsMi12YmktZm9ybWF0Oy48L3BhcmE+CisKKyAgICAgIDxwYXJhPkFwcGFyZW50bHkgb25seSB0aGUgWm9yYW4gKFpSIDM2MTIwKSBkcml2ZXIgaW1wbGVtZW50cwordGhlc2UgaW9jdGxzLiBUaGUgc2VtYW50aWNzIGRpZmZlciBmcm9tIHRob3NlIHNwZWNpZmllZCBmb3IgVjRMMiBpbiB0d28KK3dheXMuIFRoZSBwYXJhbWV0ZXJzIGFyZSByZXNldCBvbiAmZnVuYy1vcGVuOyBhbmQKKzxjb25zdGFudD5WSURJT0NTVkJJRk1UPC9jb25zdGFudD4gYWx3YXlzIHJldHVybnMgYW4gJkVJTlZBTDsgaWYgdGhlCitwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzPC90aXRsZT4KKworICAgICAgPHBhcmE+VjRMMiBoYXMgbm8gZXF1aXZhbGVudCBvZiB0aGUKKzxjb25zdGFudD5WSURJT0NHVU5JVDwvY29uc3RhbnQ+IGlvY3RsLiBBcHBsaWNhdGlvbnMgY2FuIGZpbmQgdGhlIFZCSQorZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIHZpZGVvIGNhcHR1cmUgZGV2aWNlIChvciB2aWNlIHZlcnNhKSBieQorcmVvcGVuaW5nIHRoZSBkZXZpY2UgYW5kIHJlcXVlc3RpbmcgVkJJIGRhdGEuIEZvciBkZXRhaWxzIHNlZQorPHhyZWYgbGlua2VuZD0ib3BlbiIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5ObyByZXBsYWNlbWVudCBleGlzdHMgZm9yIDxjb25zdGFudD5WSURJT0NLRVk8L2NvbnN0YW50PiwKK2FuZCB0aGUgVjRMIGZ1bmN0aW9ucyBmb3IgbWljcm9jb2RlIHByb2dyYW1taW5nLiBBIG5ldyBpbnRlcmZhY2UgZm9yCitNUEVHIGNvbXByZXNzaW9uIGFuZCBwbGF5YmFjayBkZXZpY2VzIGlzIGRvY3VtZW50ZWQgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9ImV4dGVuZGVkLWNvbnRyb2xzIiAvPi48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iaGlzdC12NGwyIj4KKyAgICA8dGl0bGU+Q2hhbmdlcyBvZiB0aGUgVjRMMiBBUEk8L3RpdGxlPgorCisgICAgPHBhcmE+U29vbiBhZnRlciB0aGUgVjRMIEFQSSB3YXMgYWRkZWQgdG8gdGhlIGtlcm5lbCBpdCB3YXMKK2NyaXRpY2lzZWQgYXMgdG9vIGluZmxleGlibGUuIEluIEF1Z3VzdCAxOTk4IEJpbGwgRGlya3MgcHJvcG9zZWQgYQorbnVtYmVyIG9mIGltcHJvdmVtZW50cyBhbmQgYmVnYW4gdG8gd29yayBvbiBkb2N1bWVudGF0aW9uLCBleGFtcGxlCitkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMuIFdpdGggdGhlIGhlbHAgb2Ygb3RoZXIgdm9sdW50ZWVycyB0aGlzCitldmVudHVhbGx5IGJlY2FtZSB0aGUgVjRMMiBBUEksIG5vdCBqdXN0IGFuIGV4dGVuc2lvbiBidXQgYQorcmVwbGFjZW1lbnQgZm9yIHRoZSBWNEwgQVBJLiBIb3dldmVyIGl0IHRvb2sgYW5vdGhlciBmb3VyIHllYXJzIGFuZAordHdvIHN0YWJsZSBrZXJuZWwgcmVsZWFzZXMgdW50aWwgdGhlIG5ldyBBUEkgd2FzIGZpbmFsbHkgYWNjZXB0ZWQgZm9yCitpbmNsdXNpb24gaW50byB0aGUga2VybmVsIGluIGl0cyBwcmVzZW50IGZvcm0uPC9wYXJhPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+RWFybHkgVmVyc2lvbnM8L3RpdGxlPgorICAgICAgPHBhcmE+MTk5OC0wOC0yMDogRmlyc3QgdmVyc2lvbi48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMDgtMjc6IFRoZSAmZnVuYy1zZWxlY3Q7IGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkLjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0wOS0xMDogTmV3IHZpZGVvIHN0YW5kYXJkIGludGVyZmFjZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMDktMTg6IFRoZSA8Y29uc3RhbnQ+VklESU9DX05PTkNBUDwvY29uc3RhbnQ+IGlvY3RsCit3YXMgcmVwbGFjZWQgYnkgdGhlIG90aGVyd2lzZSBtZWFuaW5nbGVzcyA8Y29uc3RhbnQ+T19UUlVOQzwvY29uc3RhbnQ+CismZnVuYy1vcGVuOyBmbGFnLCBhbmQgdGhlIGFsaWFzZXMgPGNvbnN0YW50Pk9fTk9OQ0FQPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+T19OT0lPPC9jb25zdGFudD4gd2VyZSBkZWZpbmVkLiBBcHBsaWNhdGlvbnMgY2FuIHNldCB0aGlzCitmbGFnIGlmIHRoZXkgaW50ZW5kIHRvIGFjY2VzcyBjb250cm9scyBvbmx5LCBhcyBvcHBvc2VkIHRvIGNhcHR1cmUKK2FwcGxpY2F0aW9ucyB3aGljaCBuZWVkIGV4Y2x1c2l2ZSBhY2Nlc3MuIFRoZQorPGNvbnN0YW50PlZJREVPX1NURF9YWFg8L2NvbnN0YW50PiBpZGVudGlmaWVycyBhcmUgbm93IG9yZGluYWxzCitpbnN0ZWFkIG9mIGZsYWdzLCBhbmQgdGhlIDxmdW5jdGlvbj52aWRlb19zdGRfY29uc3RydWN0KCk8L2Z1bmN0aW9uPgoraGVscGVyIGZ1bmN0aW9uIHRha2VzIGlkIGFuZCB0cmFuc21pc3Npb24gYXJndW1lbnRzLjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0wOS0yODogUmV2YW1wZWQgdmlkZW8gc3RhbmRhcmQuIE1hZGUgdmlkZW8gY29udHJvbHMKK2luZGl2aWR1YWxseSBlbnVtZXJhYmxlLjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0xMC0wMjogVGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcworcmVtb3ZlZCBmcm9tIHN0cnVjdCA8c3RydWN0bmFtZT52aWRlb19zdGFuZGFyZDwvc3RydWN0bmFtZT4gYW5kIHRoZQorY29sb3Igc3ViY2FycmllciBmaWVsZHMgd2VyZSByZW5hbWVkLiBUaGUgJlZJRElPQy1RVUVSWVNURDsgaW9jdGwgd2FzCityZW5hbWVkIHRvICZWSURJT0MtRU5VTVNURDssICZWSURJT0MtRy1JTlBVVDsgdG8gJlZJRElPQy1FTlVNSU5QVVQ7LiBBCitmaXJzdCBkcmFmdCBvZiB0aGUgQ29kZWMgQVBJIHdhcyByZWxlYXNlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMTEtMDg6IE1hbnkgbWlub3IgY2hhbmdlcy4gTW9zdCBzeW1ib2xzIGhhdmUgYmVlbgorcmVuYW1lZC4gU29tZSBtYXRlcmlhbCBjaGFuZ2VzIHRvICZ2NGwyLWNhcGFiaWxpdHk7LjwvcGFyYT4KKworICAgICAgPHBhcmE+MTk5OC0xMS0xMjogVGhlIHJlYWQvd3JpdGUgZGlyZWN0b24gb2Ygc29tZSBpb2N0bHMgd2FzIG1pc2RlZmluZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT4xOTk4LTExLTE0OiA8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjI0PC9jb25zdGFudD4KK2NoYW5nZWQgdG8gPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+LCBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMzI8L2NvbnN0YW50PiBjaGFuZ2VkIHRvCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjMyPC9jb25zdGFudD4uIEF1ZGlvIGNvbnRyb2xzIGFyZSBub3cKK2FjY2Vzc2libGUgd2l0aCB0aGUgJlZJRElPQy1HLUNUUkw7IGFuZCAmVklESU9DLVMtQ1RSTDsgaW9jdGxzIHVuZGVyCituYW1lcyBzdGFydGluZyB3aXRoIDxjb25zdGFudD5WNEwyX0NJRF9BVURJTzwvY29uc3RhbnQ+LiBUaGUKKzxjb25zdGFudD5WNEwyX01BSk9SPC9jb25zdGFudD4gZGVmaW5lIHdhcyByZW1vdmVkIGZyb20KKzxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gc2luY2UgaXQgd2FzIG9ubHkgdXNlZCBvbmNlIGluIHRoZQorPGZpbGVuYW1lPnZpZGVvZGV2PC9maWxlbmFtZT4ga2VybmVsIG1vZHVsZS4gVGhlCis8Y29uc3RhbnQ+WVVWNDIyPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5ZVVY0MTE8L2NvbnN0YW50PiBwbGFuYXIKK2ltYWdlIGZvcm1hdHMgd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTgtMTEtMjg6IEEgZmV3IGlvY3RsIHN5bWJvbHMgY2hhbmdlZC4gSW50ZXJmYWNlcyBmb3IgY29kZWNzIGFuZAordmlkZW8gb3V0cHV0IGRldmljZXMgd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjE5OTktMDEtMTQ6IEEgcmF3IFZCSSBjYXB0dXJlIGludGVyZmFjZSB3YXMgYWRkZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT4xOTk5LTAxLTE5OiBUaGUgPGNvbnN0YW50PlZJRElPQ19ORVhUQlVGPC9jb25zdGFudD4gaW9jdGwKKyAgICAgIHdhcyByZW1vdmVkLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIFZlcnNpb24gMC4xNiAxOTk5LTAxLTMxPC90aXRsZT4KKyAgICAgIDxwYXJhPjE5OTktMDEtMjc6IFRoZXJlIGlzIG5vdyBvbmUgUUJVRiBpb2N0bCwgVklESU9DX1FXQlVGIGFuZCBWSURJT0NfUVJCVUYKK2FyZSBnb25lLiBWSURJT0NfUUJVRiB0YWtlcyBhIHY0bDJfYnVmZmVyIGFzIGEgcGFyYW1ldGVyLiBBZGRlZAorZGlnaXRhbCB6b29tIChjcm9wcGluZykgY29udHJvbHMuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDwhLS0gV2hlcmUncyAwLjE3PyBtaHMgY291bGRuJ3QgZmluZCB0aGF0IHZpZGVvZGV2LmgsIHBlcmhhcHMgQmlsbAorCSBmb3Jnb3QgdG8gYnVtcCB0aGUgdmVyc2lvbiBudW1iZXIgb3IgbmV2ZXIgcmVsZWFzZWQgaXQuIC0tPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMTggMTk5OS0wMy0xNjwvdGl0bGU+CisgICAgICA8cGFyYT5BZGRlZCBhIHY0bCB0byBWNEwyIGlvY3RsIGNvbXBhdGliaWxpdHkgbGF5ZXIgdG8KK3ZpZGVvZGV2LmMuIERyaXZlciB3cml0ZXJzLCB0aGlzIGNoYW5nZXMgaG93IHlvdSBpbXBsZW1lbnQgeW91ciBpb2N0bAoraGFuZGxlci4gU2VlIHRoZSBEcml2ZXIgV3JpdGVyJ3MgR3VpZGUuIEFkZGVkIHNvbWUgbW9yZSBjb250cm9sIGlkCitjb2Rlcy48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMTkgMTk5OS0wNi0wNTwvdGl0bGU+CisgICAgICA8cGFyYT4xOTk5LTAzLTE4OiBGaWxsIGluIHRoZSBjYXRlZ29yeSBhbmQgY2F0bmFtZSBmaWVsZHMgb2YKK3Y0bDJfcXVlcnljdHJsIG9iamVjdHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyLiBSZXF1aXJlZCBhCittaW5vciBjaGFuZ2UgdG8gdGhlIFZJRElPQ19RVUVSWUNUUkwgaGFuZGxlcnMgaW4gdGhlIHNhbXBsZQorZHJpdmVycy48L3BhcmE+CisgICAgICA8cGFyYT4xOTk5LTAzLTMxOiBCZXR0ZXIgY29tcGF0aWJpbGl0eSBmb3IgdjRsIG1lbW9yeSBjYXB0dXJlCitpb2N0bHMuIFJlcXVpcmVzIGNoYW5nZXMgdG8gZHJpdmVycyB0byBmdWxseSBzdXBwb3J0IG5ldyBjb21wYXRpYmlsaXR5CitmZWF0dXJlcywgc2VlIERyaXZlciBXcml0ZXIncyBHdWlkZSBhbmQgdjRsMmNhcC5jLiBBZGRlZCBuZXcgY29udHJvbAorSURzOiBWNEwyX0NJRF9IRkxJUCwgX1ZGTElQLiBDaGFuZ2VkIFY0TDJfUElYX0ZNVF9ZVVY0MjJQIHRvIF9ZVVY0MjJQLAorYW5kIF9ZVVY0MTFQIHRvIF9ZVVY0MTFQLjwvcGFyYT4KKyAgICAgIDxwYXJhPjE5OTktMDQtMDQ6IEFkZGVkIGEgZmV3IG1vcmUgY29udHJvbCBJRHMuPC9wYXJhPgorICAgICAgPHBhcmE+MTk5OS0wNC0wNzogQWRkZWQgdGhlIGJ1dHRvbiBjb250cm9sIHR5cGUuPC9wYXJhPgorICAgICAgPHBhcmE+MTk5OS0wNS0wMjogRml4ZWQgYSB0eXBvIGluIHZpZGVvZGV2LmgsIGFuZCBhZGRlZCB0aGUKK1Y0TDJfQ1RSTF9GTEFHX0dSQVlFRCAobGF0ZXIgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCkgZmxhZy48L3BhcmE+CisgICAgICA8cGFyYT4xOTk5LTA1LTIwOiBEZWZpbml0aW9uIG9mIFZJRElPQ19HX0NUUkwgd2FzIHdyb25nIGNhdXNpbmcKK2EgbWFsZnVuY3Rpb24gb2YgdGhpcyBpb2N0bC48L3BhcmE+CisgICAgICA8cGFyYT4xOTk5LTA2LTA1OiBDaGFuZ2VkIHRoZSB2YWx1ZSBvZgorVjRMMl9DSURfV0hJVEVORVNTLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIFZlcnNpb24gMC4yMCAoMTk5OS0wOS0xMCk8L3RpdGxlPgorCisgICAgICA8cGFyYT5WZXJzaW9uIDAuMjAgaW50cm9kdWNlZCBhIG51bWJlciBvZiBjaGFuZ2VzIHdoaWNoIHdlcmUKKzxlbXBoYXNpcz5ub3QgYmFja3dhcmQgY29tcGF0aWJsZTwvZW1waGFzaXM+IHdpdGggMC4xOSBhbmQgZWFybGllcgordmVyc2lvbnMuIFB1cnBvc2Ugb2YgdGhlc2UgY2hhbmdlcyB3YXMgdG8gc2ltcGxpZnkgdGhlIEFQSSwgd2hpbGUKK21ha2luZyBpdCBtb3JlIGV4dGVuc2libGUgYW5kIGZvbGxvd2luZyBjb21tb24gTGludXggZHJpdmVyIEFQSQorY29udmVudGlvbnMuPC9wYXJhPgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+U29tZSB0eXBvcyBpbiA8Y29uc3RhbnQ+VjRMMl9GTVRfRkxBRzwvY29uc3RhbnQ+CitzeW1ib2xzIHdlcmUgZml4ZWQuICZ2NGwyLWNsaXA7IHdhcyBjaGFuZ2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKK3Y0bC4gKDE5OTktMDgtMzApPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTEFORzE8L2NvbnN0YW50PiB3YXMgYWRkZWQuCisoMTk5OS0wOS0wNSk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFsbCBpb2N0bCgpIGNvbW1hbmRzIHRoYXQgdXNlZCBhbiBpbnRlZ2VyIGFyZ3VtZW50IG5vdwordGFrZSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlci4gV2hlcmUgaXQgbWFrZXMgc2Vuc2UsIGlvY3RscyB3aWxsIHJldHVybgordGhlIGFjdHVhbCBuZXcgdmFsdWUgaW4gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSB0aGUgYXJndW1lbnQsIGEKK2NvbW1vbiBjb252ZW50aW9uIGluIHRoZSBWNEwyIEFQSS4gVGhlIGFmZmVjdGVkIGlvY3RscyBhcmU6CitWSURJT0NfUFJFVklFVywgVklESU9DX1NUUkVBTU9OLCBWSURJT0NfU1RSRUFNT0ZGLCBWSURJT0NfU19GUkVRLAorVklESU9DX1NfSU5QVVQsIFZJRElPQ19TX09VVFBVVCwgVklESU9DX1NfRUZGRUNULiBGb3IgZXhhbXBsZQorPHByb2dyYW1saXN0aW5nPgorZXJyID0gaW9jdGwgKGZkLCBWSURJT0NfWFhYLCBWNEwyX1hYWCk7Cis8L3Byb2dyYW1saXN0aW5nPiBiZWNvbWVzIDxwcm9ncmFtbGlzdGluZz4KK2ludCBhID0gVjRMMl9YWFg7IGVyciA9IGlvY3RsKGZkLCBWSURJT0NfWFhYLCAmYW1wO2EpOworPC9wcm9ncmFtbGlzdGluZz4KKwkgIDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWxsIHRoZSBkaWZmZXJlbnQgZ2V0LSBhbmQgc2V0LWZvcm1hdCBjb21tYW5kcyB3ZXJlCitzd2VwdCBpbnRvIG9uZSAmVklESU9DLUctRk1UOyBhbmQgJlZJRElPQy1TLUZNVDsgaW9jdGwgdGFraW5nIGEgdW5pb24KK2FuZCBhIHR5cGUgZmllbGQgc2VsZWN0aW5nIHRoZSB1bmlvbiBtZW1iZXIgYXMgcGFyYW1ldGVyLiBQdXJwb3NlIGlzIHRvCitzaW1wbGlmeSB0aGUgQVBJIGJ5IGVsaW1pbmF0aW5nIHNldmVyYWwgaW9jdGxzIGFuZCB0byBhbGxvdyBuZXcgYW5kCitkcml2ZXIgcHJpdmF0ZSBkYXRhIHN0cmVhbXMgd2l0aG91dCBhZGRpbmcgbmV3IGlvY3Rscy48L3BhcmE+CisKKwkgIDxwYXJhPlRoaXMgY2hhbmdlIG9ic29sZXRlcyB0aGUgZm9sbG93aW5nIGlvY3RsczoKKzxjb25zdGFudD5WSURJT0NfU19JTkZNVDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJRElPQ19HX0lORk1UPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX1NfT1VURk1UPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX0dfT1VURk1UPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX1NfVkJJRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX0dfVkJJRk1UPC9jb25zdGFudD4uIFRoZSBpbWFnZSBmb3JtYXQgc3RydWN0dXJlCis8c3RydWN0bmFtZT52NGwyX2Zvcm1hdDwvc3RydWN0bmFtZT4gd2FzIHJlbmFtZWQgdG8gJnY0bDItcGl4LWZvcm1hdDssCit3aGlsZSAmdjRsMi1mb3JtYXQ7IGlzIG5vdyB0aGUgZW52ZWxvcHBpbmcgc3RydWN0dXJlIGZvciBhbGwgZm9ybWF0CituZWdvdGlhdGlvbnMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5TaW1pbGFyIHRvIHRoZSBjaGFuZ2VzIGFib3ZlLCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19QQVJNPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfUEFSTTwvY29uc3RhbnQ+IGlvY3RscyB3ZXJlIG1lcmdlZCB3aXRoCis8Y29uc3RhbnQ+VklESU9DX0dfT1VUUEFSTTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX09VVFBBUk08L2NvbnN0YW50Pi4gQQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiB0aGUgbmV3ICZ2NGwyLXN0cmVhbXBhcm07CitzZWxlY3RzIHRoZSByZXNwZWN0aXZlIHVuaW9uIG1lbWJlci48L3BhcmE+CisKKwkgIDxwYXJhPlRoaXMgY2hhbmdlIG9ic29sZXRlcyB0aGUKKzxjb25zdGFudD5WSURJT0NfR19PVVRQQVJNPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfT1VUUEFSTTwvY29uc3RhbnQ+IGlvY3Rscy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkNvbnRyb2wgZW51bWVyYXRpb24gd2FzIHNpbXBsaWZpZWQsIGFuZCB0d28gbmV3Citjb250cm9sIGZsYWdzIHdlcmUgaW50cm9kdWNlZCBhbmQgb25lIGRyb3BwZWQuIFRoZQorPHN0cnVjdGZpZWxkPmNhdG5hbWU8L3N0cnVjdGZpZWxkPiBmaWVsZCB3YXMgcmVwbGFjZWQgYnkgYQorPHN0cnVjdGZpZWxkPmdyb3VwPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCisJICA8cGFyYT5Ecml2ZXJzIGNhbiBub3cgZmxhZyB1bnN1cHBvcnRlZCBhbmQgdGVtcG9yYXJpbHkKK3VuYXZhaWxhYmxlIGNvbnRyb2xzIHdpdGggPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4KK2FuZCA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfR1JBQkJFRDwvY29uc3RhbnQ+IHJlc3BlY3RpdmVseS4gVGhlCis8c3RydWN0ZmllbGQ+Z3JvdXA8L3N0cnVjdGZpZWxkPiBuYW1lIGluZGljYXRlcyBhIHBvc3NpYmx5IG5hcnJvd2VyCitjbGFzc2lmaWNhdGlvbiB0aGFuIHRoZSA8c3RydWN0ZmllbGQ+Y2F0ZWdvcnk8L3N0cnVjdGZpZWxkPi4gSW4gb3RoZXIKK3dvcmRzLCB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgZ3JvdXBzIHdpdGhpbiBhIGNhdGVnb3J5LiBDb250cm9scyB3aXRoaW4KK2EgZ3JvdXAgd291bGQgdHlwaWNhbGx5IGJlIGRyYXduIHdpdGhpbiBhIGdyb3VwIGJveC4gQ29udHJvbHMgaW4KK2RpZmZlcmVudCBjYXRlZ29yaWVzIG1pZ2h0IGhhdmUgYSBncmVhdGVyIHNlcGFyYXRpb24sIG9yIG1heSBldmVuCithcHBlYXIgaW4gc2VwYXJhdGUgd2luZG93cy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1idWZmZXI7IDxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPgord2FzIGNoYW5nZWQgdG8gYSA2NCBiaXQgaW50ZWdlciwgY29udGFpbmluZyB0aGUgc2FtcGxpbmcgb3Igb3V0cHV0Cit0aW1lIG9mIHRoZSBmcmFtZSBpbiBuYW5vc2Vjb25kcy4gQWRkaXRpb25hbGx5IHRpbWVzdGFtcHMgd2lsbCBiZSBpbgorYWJzb2x1dGUgc3lzdGVtIHRpbWUsIG5vdCBzdGFydGluZyBmcm9tIHplcm8gYXQgdGhlIGJlZ2lubmluZyBvZiBhCitzdHJlYW0uIFRoZSBkYXRhIHR5cGUgbmFtZSBmb3IgdGltZXN0YW1wcyBpcyBzdGFtcF90LCBkZWZpbmVkIGFzIGEKK3NpZ25lZCA2NC1iaXQgaW50ZWdlci4gT3V0cHV0IGRldmljZXMgc2hvdWxkIG5vdCBzZW5kIGEgYnVmZmVyIG91dAordW50aWwgdGhlIHRpbWUgaW4gdGhlIHRpbWVzdGFtcCBmaWVsZCBoYXMgYXJyaXZlZC4gSSB3b3VsZCBsaWtlIHRvCitmb2xsb3cgU0dJJ3MgbGVhZCwgYW5kIGFkb3B0IGEgbXVsdGltZWRpYSB0aW1lc3RhbXBpbmcgc3lzdGVtIGxpa2UKK3RoZWlyIFVTVCAoVW5hZGp1c3RlZCBTeXN0ZW0gVGltZSkuIFNlZQoraHR0cDovL3JlYWxpdHkuc2dpLmNvbS9jcGlyYXp6aV9lbmdyL2xnL3RpbWUvaW50cm8uaHRtbC4gW1RoaXMgbGluayBpcworbm8gbG9uZ2VyIHZhbGlkLl0gVVNUIHVzZXMgdGltZXN0YW1wcyB0aGF0IGFyZSA2NC1iaXQgc2lnbmVkIGludGVnZXJzCisobm90IHN0cnVjdCB0aW1ldmFsJ3MpIGFuZCBnaXZlbiBpbiBuYW5vc2Vjb25kIHVuaXRzLiBUaGUgVVNUIGNsb2NrCitzdGFydHMgYXQgemVybyB3aGVuIHRoZSBzeXN0ZW0gaXMgYm9vdGVkIGFuZCBydW5zIGNvbnRpbnVvdXNseSBhbmQKK3VuaWZvcm1seS4gSXQgdGFrZXMgYSBsaXR0bGUgb3ZlciAyOTIgeWVhcnMgZm9yIFVTVCB0byBvdmVyZmxvdy4gVGhlcmUKK2lzIG5vIHdheSB0byBzZXQgdGhlIFVTVCBjbG9jay4gVGhlIHJlZ3VsYXIgTGludXggdGltZS1vZi1kYXkgY2xvY2sKK2NhbiBiZSBjaGFuZ2VkIHBlcmlvZGljYWxseSwgd2hpY2ggd291bGQgY2F1c2UgZXJyb3JzIGlmIGl0IHdlcmUgYmVpbmcKK3VzZWQgZm9yIHRpbWVzdGFtcGluZyBhIG11bHRpbWVkaWEgc3RyZWFtLiBBIHJlYWwgVVNUIHN0eWxlIGNsb2NrIHdpbGwKK3JlcXVpcmUgc29tZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgdGhhdCBpcyBub3QgdGhlcmUgeWV0LiBCdXQgaW4KK2FudGljaXBhdGlvbiwgSSB3aWxsIGNoYW5nZSB0aGUgdGltZXN0YW1wIGZpZWxkIHRvIGEgNjQtYml0IGludGVnZXIsCithbmQgSSB3aWxsIGNoYW5nZSB0aGUgdjRsMl9tYXN0ZXJjbG9ja19nZXR0aW1lKCkgZnVuY3Rpb24gKHVzZWQgb25seQorYnkgZHJpdmVycykgdG8gcmV0dXJuIGEgNjQtYml0IGludGVnZXIuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BIDxzdHJ1Y3RmaWVsZD5zZXF1ZW5jZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBhZGRlZAordG8gJnY0bDItYnVmZmVyOy4gVGhlIDxzdHJ1Y3RmaWVsZD5zZXF1ZW5jZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvdW50cworY2FwdHVyZWQgZnJhbWVzLCBpdCBpcyBpZ25vcmVkIGJ5IG91dHB1dCBkZXZpY2VzLiBXaGVuIGEgY2FwdHVyZQorZHJpdmVyIGRyb3BzIGEgZnJhbWUsIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhhdCBmcmFtZSBpcworc2tpcHBlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMjAgaW5jcmVtZW50YWwgY2hhbmdlczwvdGl0bGU+CisgICAgICA8IS0tIFZlcnNpb24gbnVtYmVyIGRpZG4ndCBjaGFuZ2UgYW55bW9yZSwgcmVhc29uIHVua25vd24uIC0tPgorCisgICAgICA8cGFyYT4xOTk5LTEyLTIzOiBJbiAmdjRsMi12YmktZm9ybWF0OyB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDE8L3N0cnVjdGZpZWxkPiBmaWVsZCBiZWNhbWUKKzxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPi4gUHJldmlvdXNseSBkcml2ZXJzIHdlcmUgcmVxdWlyZWQgdG8KK2NsZWFyIHRoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQxPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCisgICAgICA8cGFyYT4yMDAwLTAxLTEzOiBUaGUKKyAgICAgIDxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX05PVF9JTlRFUkxBQ0VEPC9jb25zdGFudD4gZmxhZyB3YXMgYWRkZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT4yMDAwLTA3LTMxOiBUaGUgPGZpbGVuYW1lPmxpbnV4L3BvbGwuaDwvZmlsZW5hbWU+IGhlYWRlcgoraXMgbm93IGluY2x1ZGVkIGJ5IDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggdGhlIG9yaWdpbmFsIDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMTEtMjA6IDxjb25zdGFudD5WNEwyX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD4gd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMTEtMjU6IDxjb25zdGFudD5WNEwyX1RZUEVfVkJJX0lOUFVUPC9jb25zdGFudD4gd2FzCithZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMTItMDQ6IEEgY291cGxlIHR5cG9zIGluIHN5bWJvbCBuYW1lcyB3ZXJlIGZpeGVkLjwvcGFyYT4KKworICAgICAgPHBhcmE+MjAwMS0wMS0xODogVG8gYXZvaWQgbmFtZXNwYWNlIGNvbmZsaWN0cyB0aGUKKzxjb25zdGFudD5mb3VyY2M8L2NvbnN0YW50PiBtYWNybyBkZWZpbmVkIGluIHRoZQorPGZpbGVuYW1lPnZpZGVvZGV2Lmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSB3YXMgcmVuYW1lZCB0bworPGNvbnN0YW50PnY0bDJfZm91cmNjPC9jb25zdGFudD4uPC9wYXJhPgorCisgICAgICA8cGFyYT4yMDAxLTAxLTI1OiBBIHBvc3NpYmxlIGRyaXZlci1sZXZlbCBjb21wYXRpYmlsaXR5IHByb2JsZW0KK2JldHdlZW4gdGhlIDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZSBpbiBMaW51eCAyLjQuMCBhbmQKK3RoZSA8ZmlsZW5hbWU+dmlkZW9kZXYuaDwvZmlsZW5hbWU+IGZpbGUgaW5jbHVkZWQgaW4gdGhlCis8ZmlsZW5hbWU+dmlkZW9kZXZYPC9maWxlbmFtZT4gcGF0Y2ggd2FzIGZpeGVkLiBVc2VycyBvZiBhbiBlYXJsaWVyCit2ZXJzaW9uIG9mIDxmaWxlbmFtZT52aWRlb2Rldlg8L2ZpbGVuYW1lPiBvbiBMaW51eCAyLjQuMCBzaG91bGQKK3JlY29tcGlsZSB0aGVpciBWNEwgYW5kIFY0TDIgZHJpdmVycy48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDEtMDEtMjY6IEEgcG9zc2libGUga2VybmVsLWxldmVsIGluY29tcGF0aWJpbGl0eQorYmV0d2VlbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Lmg8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorPGZpbGVuYW1lPnZpZGVvZGV2WDwvZmlsZW5hbWU+IHBhdGNoIGFuZCB0aGUKKzxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZSBpbiBMaW51eCAyLjIueCB3aXRoIGRldmZzIHBhdGNoZXMKK2FwcGxpZWQgd2FzIGZpeGVkLjwvcGFyYT4KKworICAgICAgPHBhcmE+MjAwMS0wMy0wMjogQ2VydGFpbiBWNEwgaW9jdGxzIHdoaWNoIHBhc3MgZGF0YSBpbiBib3RoCitkaXJlY3Rpb24gYWx0aG91Z2ggdGhleSBhcmUgZGVmaW5lZCB3aXRoIHJlYWQtb25seSBwYXJhbWV0ZXIsIGRpZCBub3QKK3dvcmsgY29ycmVjdGx5IHRocm91Z2ggdGhlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbGF5ZXIuCitbU29sdXRpb24/XTwvcGFyYT4KKworICAgICAgPHBhcmE+MjAwMS0wNC0xMzogQmlnIGVuZGlhbiAxNi1iaXQgUkdCIGZvcm1hdHMgd2VyZSBhZGRlZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDEtMDktMTc6IE5ldyBZVVYgZm9ybWF0cyBhbmQgdGhlICZWSURJT0MtRy1GUkVRVUVOQ1k7IGFuZAorJlZJRElPQy1TLUZSRVFVRU5DWTsgaW9jdGxzIHdlcmUgYWRkZWQuIChUaGUgb2xkCis8Y29uc3RhbnQ+VklESU9DX0dfRlJFUTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX0ZSRVE8L2NvbnN0YW50PiBpb2N0bHMgZGlkIG5vdCB0YWtlIG11bHRpcGxlIHR1bmVycworaW50byBhY2NvdW50Lik8L3BhcmE+CisKKyAgICAgIDxwYXJhPjIwMDAtMDktMTg6IDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZCSTwvY29uc3RhbnQ+IHdhcworYWRkZWQuIFRoaXMgbWF5IDxlbXBoYXNpcz5icmVhayBjb21wYXRpYmlsaXR5PC9lbXBoYXNpcz4gYXMgdGhlCismVklESU9DLUctRk1UOyBhbmQgJlZJRElPQy1TLUZNVDsgaW9jdGxzIG1heSBmYWlsIG5vdyBpZiB0aGUgc3RydWN0Cis8c3RydWN0bmFtZT52NGwyX2ZtdDwvc3RydWN0bmFtZT4gPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgorZmllbGQgZG9lcyBub3QgY29udGFpbiA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WQkk8L2NvbnN0YW50Pi4gSW4gdGhlCitkb2N1bWVudGF0aW9uIG9mIHRoZSAmdjRsMi12YmktZm9ybWF0OworPHN0cnVjdGZpZWxkPm9mZnNldDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRoZSBhbWJpZ3VvdXMgcGhyYXNlICJyaXNpbmcKK2VkZ2UiIHdhcyBjaGFuZ2VkIHRvICJsZWFkaW5nIGVkZ2UiLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIFZlcnNpb24gMC4yMCAyMDAwLTExLTIzPC90aXRsZT4KKworICAgICAgPHBhcmE+QSBudW1iZXIgb2YgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIHJhdyBWQkkKK2ludGVyZmFjZS48L3BhcmE+CisKKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5GaWd1cmVzIGNsYXJpZnlpbmcgdGhlIGxpbmUgbnVtYmVyaW5nIHNjaGVtZSB3ZXJlCithZGRlZCB0byB0aGUgVjRMMiBBUEkgc3BlY2lmaWNhdGlvbi4gVGhlCis8c3RydWN0ZmllbGQ+c3RhcnQ8L3N0cnVjdGZpZWxkPlswXSBhbmQKKzxzdHJ1Y3RmaWVsZD5zdGFydDwvc3RydWN0ZmllbGQ+WzFdIGZpZWxkcyBubyBsb25nZXIgY291bnQgbGluZQorbnVtYmVycyBiZWdpbm5pbmcgYXQgemVyby4gUmF0aW9uYWxlOiBhKSBUaGUgcHJldmlvdXMgZGVmaW5pdGlvbiB3YXMKK3VuY2xlYXIuIGIpIFRoZSA8c3RydWN0ZmllbGQ+c3RhcnQ8L3N0cnVjdGZpZWxkPltdIHZhbHVlcyBhcmUgb3JkaW5hbAorbnVtYmVycy4gYykgVGhlcmUgaXMgbm8gcG9pbnQgaW4gaW52ZW50aW5nIGEgbmV3IGxpbmUgbnVtYmVyaW5nCitzY2hlbWUuIFdlIG5vdyB1c2UgbGluZSBudW1iZXIgYXMgZGVmaW5lZCBieSBJVFUtUiwgcGVyaW9kLgorQ29tcGF0aWJpbGl0eTogQWRkIG9uZSB0byB0aGUgc3RhcnQgdmFsdWVzLiBBcHBsaWNhdGlvbnMgZGVwZW5kaW5nIG9uCit0aGUgcHJldmlvdXMgc2VtYW50aWNzIG1heSBub3QgZnVuY3Rpb24gY29ycmVjdGx5LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHJlc3RyaWN0aW9uICJjb3VudFswXSAmZ3Q7IDAgYW5kIGNvdW50WzFdICZndDsgMCIKK2hhcyBiZWVuIHJlbGF4ZWQgIHRvICIoY291bnRbMF0gKyBjb3VudFsxXSkgJmd0OyAwIi4gUmF0aW9uYWxlOgorRHJpdmVycyBtYXkgYWxsb2NhdGUgcmVzb3VyY2VzIGF0IHNjYW4gbGluZSBncmFudWxhcml0eSBhbmQgc29tZSBkYXRhCitzZXJ2aWNlcyBhcmUgdHJhbnNtaXR0ZWQgb25seSBvbiB0aGUgZmlyc3QgZmllbGQuIFRoZSBjb21tZW50IHRoYXQKK2JvdGggPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gdmFsdWVzIHdpbGwgdXN1YWxseSBiZSBlcXVhbCBpcworbWlzbGVhZGluZyBhbmQgcG9pbnRsZXNzIGFuZCBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGNoYW5nZQorPGVtcGhhc2lzPmJyZWFrcyBjb21wYXRpYmlsaXR5PC9lbXBoYXNpcz4gd2l0aCBlYXJsaWVyIHZlcnNpb25zOgorRHJpdmVycyBtYXkgcmV0dXJuIEVJTlZBTCwgYXBwbGljYXRpb25zIG1heSBub3QgZnVuY3Rpb24KK2NvcnJlY3RseS48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkRyaXZlcnMgYXJlIGFnYWluIHBlcm1pdHRlZCB0byByZXR1cm4gbmVnYXRpdmUKKyh1bmtub3duKSBzdGFydCB2YWx1ZXMgYXMgcHJvcG9zZWQgZWFybGllci4gV2h5IHRoaXMgZmVhdHVyZSB3YXMKK2Ryb3BwZWQgaXMgdW5jbGVhci4gVGhpcyBjaGFuZ2UgbWF5IDxlbXBoYXNpcz5icmVhaworY29tcGF0aWJpbGl0eTwvZW1waGFzaXM+IHdpdGggYXBwbGljYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgc3RhcnQKK3ZhbHVlcyBiZWluZyBwb3NpdGl2ZS4gVGhlIHVzZSBvZiA8Y29uc3RhbnQ+RUJVU1k8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5FSU5WQUw8L2NvbnN0YW50PiBlcnJvciBjb2RlcyB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bAord2FzIGNsYXJpZmllZC4gVGhlICZFQlVTWTsgd2FzIGZpbmFsbHkgZG9jdW1lbnRlZCwgYW5kIHRoZQorPHN0cnVjdGZpZWxkPnJlc2VydmVkMjwvc3RydWN0ZmllbGQ+IGZpZWxkIHdoaWNoIHdhcyBwcmV2aW91c2x5CittZW50aW9uZWQgb25seSBpbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Lmg8L2ZpbGVuYW1lPiBoZWFkZXIKK2ZpbGUuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5OZXcgYnVmZmVyIHR5cGVzCis8Y29uc3RhbnQ+VjRMMl9UWVBFX1ZCSV9JTlBVVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfVFlQRV9WQklfT1VUUFVUPC9jb25zdGFudD4gd2VyZSBhZGRlZC4gVGhlIGZvcm1lciBpcyBhbgorYWxpYXMgZm9yIHRoZSBvbGQgPGNvbnN0YW50PlY0TDJfVFlQRV9WQkk8L2NvbnN0YW50PiwgdGhlIGxhdHRlciB3YXMKK21pc3NpbmcgaW4gdGhlIDxmaWxlbmFtZT52aWRlb2Rldi5oPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBWZXJzaW9uIDAuMjAgMjAwMi0wNy0yNTwvdGl0bGU+CisgICAgICA8cGFyYT5BZGRlZCBzbGljZWQgVkJJIGludGVyZmFjZSBwcm9wb3NhbC48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjUuNDYsIDIwMDItMTA8L3RpdGxlPgorCisgICAgICA8cGFyYT5Bcm91bmQgT2N0b2Jlci1Ob3ZlbWJlciAyMDAyLCBwcmlvciB0byBhbiBhbm5vdW5jZWQKK2ZlYXR1cmUgZnJlZXplIG9mIExpbnV4IDIuNSwgdGhlIEFQSSB3YXMgcmV2aXNlZCwgZHJhd2luZyBmcm9tCitleHBlcmllbmNlIHdpdGggVjRMMiAwLjIwLiBUaGlzIHVubmFtZWQgdmVyc2lvbiB3YXMgZmluYWxseSBtZXJnZWQKK2ludG8gTGludXggMi41LjQ2LjwvcGFyYT4KKworICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFzIHNwZWNpZmllZCBpbiA8eHJlZiBsaW5rZW5kPSJyZWxhdGVkIiAvPiwgZHJpdmVycworbXVzdCBtYWtlIHJlbGF0ZWQgZGV2aWNlIGZ1bmN0aW9ucyBhdmFpbGFibGUgdW5kZXIgYWxsIG1pbm9yIGRldmljZQorbnVtYmVycy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmZnVuYy1vcGVuOyBmdW5jdGlvbiByZXF1aXJlcyBhY2Nlc3MgbW9kZQorPGNvbnN0YW50Pk9fUkRXUjwvY29uc3RhbnQ+IHJlZ2FyZGxlc3Mgb2YgdGhlIGRldmljZSB0eXBlLiBBbGwgVjRMMgorZHJpdmVycyBleGNoYW5naW5nIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMgbXVzdCBzdXBwb3J0IHRoZQorPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnLiBUaGUgPGNvbnN0YW50Pk9fTk9JTzwvY29uc3RhbnQ+CitmbGFnLCBhIFY0TDIgc3ltYm9sIHdoaWNoIGFsaWFzZWQgdGhlIG1lYW5pbmdsZXNzCis8Y29uc3RhbnQ+T19UUlVOQzwvY29uc3RhbnQ+IHRvIGluZGljYXRlIGFjY2Vzc2VzIHdpdGhvdXQgZGF0YQorZXhjaGFuZ2UgKHBhbmVsIGFwcGxpY2F0aW9ucykgd2FzIGRyb3BwZWQuIERyaXZlcnMgbXVzdCBzdGF5IGluICJwYW5lbAorbW9kZSIgdW50aWwgdGhlIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIGluaXRpYXRlIGEgZGF0YSBleGNoYW5nZSwgc2VlCis8eHJlZiBsaW5rZW5kPSJvcGVuIiAvPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1jYXBhYmlsaXR5OyBjaGFuZ2VkIGRyYW1hdGljYWxseS4gTm90ZSB0aGF0CithbHNvIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgY2hhbmdlZCwgd2hpY2ggaXMgZW5jb2RlZCBpbiB0aGUgaW9jdGwKK3JlcXVlc3QgY29kZSwgdGh1cyBvbGRlciBWNEwyIGRldmljZXMgd2lsbCByZXNwb25kIHdpdGggYW4gJkVJTlZBTDsgdG8KK3RoZSBuZXcgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuPC9wYXJhPgorCisJICA8cGFyYT5UaGVyZSBhcmUgbmV3IGZpZWxkcyB0byBpZGVudGlmeSB0aGUgZHJpdmVyLCBhIG5ldyBSRFMKK2RldmljZSBmdW5jdGlvbiA8Y29uc3RhbnQ+VjRMMl9DQVBfUkRTX0NBUFRVUkU8L2NvbnN0YW50PiwgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfQVVESU88L2NvbnN0YW50PiBmbGFnIGluZGljYXRlcyBpZiB0aGUgZGV2aWNlIGhhcworYW55IGF1ZGlvIGNvbm5lY3RvcnMsIGFub3RoZXIgSS9PIGNhcGFiaWxpdHkKKzxjb25zdGFudD5WNEwyX0NBUF9BU1lOQ0lPPC9jb25zdGFudD4gY2FuIGJlIGZsYWdnZWQuIEluIHJlc3BvbnNlIHRvCit0aGVzZSBjaGFuZ2VzIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGJlY2FtZSBhIGJpdAorc2V0IGFuZCB3YXMgbWVyZ2VkIGludG8gdGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkLgorPGNvbnN0YW50PlY0TDJfRkxBR19UVU5FUjwvY29uc3RhbnQ+IHdhcyByZW5hbWVkIHRvCis8Y29uc3RhbnQ+VjRMMl9DQVBfVFVORVI8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVkVSTEFZPC9jb25zdGFudD4gcmVwbGFjZWQKKzxjb25zdGFudD5WNEwyX0ZMQUdfUFJFVklFVzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfQ0FQX1ZCSV9DQVBUVVJFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DQVBfVkJJX09VVFBVVDwvY29uc3RhbnQ+IHJlcGxhY2VkCis8Y29uc3RhbnQ+VjRMMl9GTEFHX0RBVEFfU0VSVklDRTwvY29uc3RhbnQ+LgorPGNvbnN0YW50PlY0TDJfRkxBR19SRUFEPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GTEFHX1dSSVRFPC9jb25zdGFudD4gd2VyZSBtZXJnZWQgaW50bworPGNvbnN0YW50PlY0TDJfQ0FQX1JFQURXUklURTwvY29uc3RhbnQ+LjwvcGFyYT4KKworCSAgPHBhcmE+VGhlIHJlZHVuZGFudCBmaWVsZHMKKzxzdHJ1Y3RmaWVsZD5pbnB1dHM8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPm91dHB1dHM8L3N0cnVjdGZpZWxkPgorYW5kIDxzdHJ1Y3RmaWVsZD5hdWRpb3M8L3N0cnVjdGZpZWxkPiB3ZXJlIHJlbW92ZWQuIFRoZXNlIHByb3BlcnRpZXMKK2NhbiBiZSBkZXRlcm1pbmVkIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJ2aWRlbyIgLz4gYW5kIDx4cmVmCitsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPgorCisJICA8cGFyYT5UaGUgc29tZXdoYXQgdm9sYXRpbGUgYW5kIHRoZXJlZm9yZSBiYXJlbHkgdXNlZnVsCitmaWVsZHMgPHN0cnVjdGZpZWxkPm1heHdpZHRoPC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+bWF4aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+bWlud2lkdGg8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5taW5oZWlnaHQ8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5tYXhmcmFtZXJhdGU8L3N0cnVjdGZpZWxkPiB3ZXJlIHJlbW92ZWQuIFRoaXMgaW5mb3JtYXRpb24KK2lzIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iZm9ybWF0IiAvPiBhbmQKKzx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkIiAvPi48L3BhcmE+CisKKwkgIDxwYXJhPjxjb25zdGFudD5WNEwyX0ZMQUdfU0VMRUNUPC9jb25zdGFudD4gd2FzIHJlbW92ZWQuIFdlCitiZWxpZXZlIHRoZSBzZWxlY3QoKSBmdW5jdGlvbiBpcyBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcXVpcmUgc3VwcG9ydAorb2YgaXQgaW4gYWxsIFY0TDIgZHJpdmVycyBleGNoYW5naW5nIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMuIFRoZQorcmVkdW5kYW50IDxjb25zdGFudD5WNEwyX0ZMQUdfTU9OT0NIUk9NRTwvY29uc3RhbnQ+IGZsYWcgd2FzIHJlbW92ZWQsCit0aGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gPHhyZWYKKwkgICAgICBsaW5rZW5kPSJmb3JtYXQiIC8+LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItaW5wdXQ7IHRoZQorPHN0cnVjdGZpZWxkPmFzc29jX2F1ZGlvPC9zdHJ1Y3RmaWVsZD4gZmllbGQgYW5kIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgaXRzIG9ubHkgZmxhZworPGNvbnN0YW50PlY0TDJfSU5QVVRfQ0FQX0FVRElPPC9jb25zdGFudD4gd2FzIHJlcGxhY2VkIGJ5IHRoZSBuZXcKKzxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJbnN0ZWFkIG9mIGxpbmtpbmcgb25lCit2aWRlbyBpbnB1dCB0byBvbmUgYXVkaW8gaW5wdXQgdGhpcyBmaWVsZCByZXBvcnRzIGFsbCBhdWRpbyBpbnB1dHMKK3RoaXMgdmlkZW8gaW5wdXQgY29tYmluZXMgd2l0aC48L3BhcmE+CisKKwkgIDxwYXJhPk5ldyBmaWVsZHMgYXJlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+CisocmV2ZXJzaW5nIHRoZSBmb3JtZXIgbGluayBmcm9tIHR1bmVycyB0byB2aWRlbyBpbnB1dHMpLAorPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnN0YXR1czwvc3RydWN0ZmllbGQ+LjwvcGFyYT4KKworCSAgPHBhcmE+QWNjb3JkaW5nbHkgJnY0bDItb3V0cHV0OyBsb3N0IGl0cworPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5hc3NvY19hdWRpbzwvc3RydWN0ZmllbGQ+IGZpZWxkcy4KKzxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPm1vZHVsYXRvcjwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+IHdoZXJlIGFkZGVkIGluc3RlYWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItYXVkaW87IGZpZWxkCis8c3RydWN0ZmllbGQ+YXVkaW88L3N0cnVjdGZpZWxkPiB3YXMgcmVuYW1lZCB0bworPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4sIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyCitzdHJ1Y3R1cmVzLiBBIG5ldyBjYXBhYmlsaXR5IGZsYWcKKzxjb25zdGFudD5WNEwyX0FVRENBUF9TVEVSRU88L2NvbnN0YW50PiB3YXMgYWRkZWQgdG8gaW5kaWNhdGVkIGlmIHRoZQorYXVkaW8gaW5wdXQgaW4gcXVlc3Rpb24gc3VwcG9ydHMgc3RlcmVvIHNvdW5kLgorPGNvbnN0YW50PlY0TDJfQVVEQ0FQX0VGRkVDVFM8L2NvbnN0YW50PiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKzxjb25zdGFudD5WNEwyX0FVRE1PREU8L2NvbnN0YW50PiBmbGFncyB3aGVyZSByZW1vdmVkLiBUaGlzIGNhbiBiZQorZWFzaWx5IGltcGxlbWVudGVkIHVzaW5nIGNvbnRyb2xzLiAoSG93ZXZlciB0aGUgc2FtZSBhcHBsaWVzIHRvIEFWTAord2hpY2ggaXMgc3RpbGwgdGhlcmUuKTwvcGFyYT4KKworCSAgPHBhcmE+QWdhaW4gZm9yIGNvbnNpc3RlbmN5IHRoZSAmdjRsMi1hdWRpb291dDsgZmllbGQKKzxzdHJ1Y3RmaWVsZD5hdWRpbzwvc3RydWN0ZmllbGQ+IHdhcyByZW5hbWVkIHRvCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi10dW5lcjsKKzxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyByZXBsYWNlZCBieSBhbgorPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQsIHBlcm1pdHRpbmcgZGV2aWNlcyB3aXRoCittdWx0aXBsZSB0dW5lcnMuIFRoZSBsaW5rIGJldHdlZW4gdmlkZW8gaW5wdXRzIGFuZCB0dW5lcnMgaXMgbm93CityZXZlcnNlZCwgaW5wdXRzIHBvaW50IHRvIHRoZWlyIHR1bmVyLiBUaGUKKzxzdHJ1Y3RmaWVsZD5zdGQ8L3N0cnVjdGZpZWxkPiBzdWJzdHJ1Y3R1cmUgYmVjYW1lIGEKK3NpbXBsZSBzZXQgKG1vcmUgYWJvdXQgdGhpcyBiZWxvdykgYW5kIG1vdmVkIGludG8gJnY0bDItaW5wdXQ7LiBBCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBhZGRlZC48L3BhcmE+CisKKwkgIDxwYXJhPkFjY29yZGluZ2x5IGluICZ2NGwyLW1vZHVsYXRvcjsgdGhlCis8c3RydWN0ZmllbGQ+b3V0cHV0PC9zdHJ1Y3RmaWVsZD4gd2FzIHJlcGxhY2VkIGJ5IGFuCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKwkgIDxwYXJhPkluICZ2NGwyLWZyZXF1ZW5jeTsgdGhlCis8c3RydWN0ZmllbGQ+cG9ydDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyByZXBsYWNlZCBieSBhCis8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWluaW5nIHRoZSByZXNwZWN0aXZlIHR1bmVyCitvciBtb2R1bGF0b3IgaW5kZXggbnVtYmVyLiBBIHR1bmVyIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHdhcyBhZGRlZCBhbmQgdGhlIDxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkCitiZWNhbWUgbGFyZ2VyIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyAoc2F0ZWxsaXRlIHR1bmVycyBpbgorcGFydGljdWxhcikuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgaWRlYSBvZiBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHZpZGVvIHN0YW5kYXJkcyB3YXMKK2Ryb3BwZWQuIEV4cGVyaWVuY2Ugc2hvd2VkIHRoYXQgYXBwbGljYXRpb25zIG11c3QgYmUgYWJsZSB0byB3b3JrIHdpdGgKK3ZpZGVvIHN0YW5kYXJkcyBiZXlvbmQgcHJlc2VudGluZyB0aGUgdXNlciBhIG1lbnUuIEluc3RlYWQgb2YKK2VudW1lcmF0aW5nIHN1cHBvcnRlZCBzdGFuZGFyZHMgd2l0aCBhbiBpb2N0bCBhcHBsaWNhdGlvbnMgY2FuIG5vdworcmVmZXIgdG8gc3RhbmRhcmRzIGJ5ICZ2NGwyLXN0ZC1pZDsgYW5kIHN5bWJvbHMgZGVmaW5lZCBpbiB0aGUKKzxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlLiBGb3IgZGV0YWlscyBzZWUgPHhyZWYKKwkgICAgICBsaW5rZW5kPSJzdGFuZGFyZCIgLz4uIFRoZSAmVklESU9DLUctU1REOyBhbmQKKyZWSURJT0MtUy1TVEQ7IG5vdyB0YWtlIGEgcG9pbnRlciB0byB0aGlzIHR5cGUgYXMgYXJndW1lbnQuCismVklESU9DLVFVRVJZU1REOyB3YXMgYWRkZWQgdG8gYXV0b2RldGVjdCB0aGUgcmVjZWl2ZWQgc3RhbmRhcmQsIGlmCit0aGUgaGFyZHdhcmUgaGFzIHRoaXMgY2FwYWJpbGl0eS4gSW4gJnY0bDItc3RhbmRhcmQ7IGFuCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCB3YXMgYWRkZWQgZm9yICZWSURJT0MtRU5VTVNURDsuCitBICZ2NGwyLXN0ZC1pZDsgZmllbGQgbmFtZWQgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gd2FzIGFkZGVkIGFzCittYWNoaW5lIHJlYWRhYmxlIGlkZW50aWZpZXIsIGFsc28gcmVwbGFjaW5nIHRoZQorPHN0cnVjdGZpZWxkPnRyYW5zbWlzc2lvbjwvc3RydWN0ZmllbGQ+IGZpZWxkLiBUaGUgbWlzbGVhZGluZworPHN0cnVjdGZpZWxkPmZyYW1lcmF0ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyByZW5hbWVkCit0byA8c3RydWN0ZmllbGQ+ZnJhbWVwZXJpb2Q8L3N0cnVjdGZpZWxkPi4gVGhlIG5vdyBvYnNvbGV0ZQorPHN0cnVjdGZpZWxkPmNvbG9yc3RhbmRhcmQ8L3N0cnVjdGZpZWxkPiBpbmZvcm1hdGlvbiwgb3JpZ2luYWxseQorbmVlZGVkIHRvIGRpc3RndWlzaCBiZXR3ZWVuIHZhcmlhdGlvbnMgb2Ygc3RhbmRhcmRzLCB3ZXJlCityZW1vdmVkLjwvcGFyYT4KKworCSAgPHBhcmE+U3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZW51bXN0ZDwvc3RydWN0bmFtZT4gY2Vhc2VkIHRvCitiZS4gJlZJRElPQy1FTlVNU1REOyBub3cgdGFrZXMgYSBwb2ludGVyIHRvIGEgJnY0bDItc3RhbmRhcmQ7CitkaXJlY3RseS4gVGhlIGluZm9ybWF0aW9uIHdoaWNoIHN0YW5kYXJkcyBhcmUgc3VwcG9ydGVkIGJ5IGEKK3BhcnRpY3VsYXIgdmlkZW8gaW5wdXQgb3Igb3V0cHV0IG1vdmVkIGludG8gJnY0bDItaW5wdXQ7IGFuZAorJnY0bDItb3V0cHV0OyBmaWVsZHMgbmFtZWQgPHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+LAorcmVzcGVjdGl2ZWx5LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLXF1ZXJ5Y3RybDsgZmllbGRzCis8c3RydWN0ZmllbGQ+Y2F0ZWdvcnk8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5ncm91cDwvc3RydWN0ZmllbGQ+IGRpZCBub3QgY2F0Y2ggb24gYW5kL29yIHdlcmUgbm90CitpbXBsZW1lbnRlZCBhcyBleHBlY3RlZCBhbmQgdGhlcmVmb3JlIHJlbW92ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJlZJRElPQy1UUlktRk1UOyBpb2N0bCB3YXMgYWRkZWQgdG8gbmVnb3RpYXRlIGRhdGEKK2Zvcm1hdHMgYXMgd2l0aCAmVklESU9DLVMtRk1UOywgYnV0IHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mCitwcm9ncmFtbWluZyB0aGUgaGFyZHdhcmUgYW5kIHJlZ2FyZGxlc3Mgb2YgSS9PIGluIHByb2dyZXNzLjwvcGFyYT4KKworCSAgPHBhcmE+SW4gJnY0bDItZm9ybWF0OyB0aGUgPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+Cit1bmlvbiB3YXMgZXh0ZW5kZWQgdG8gY29udGFpbiAmdjRsMi13aW5kb3c7LiBBbGwgaW1hZ2UgZm9ybWF0CituZWdvdGlhdGlvbnMgYXJlIG5vdyBwb3NzaWJsZSB3aXRoIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+OyBpb2N0bC4gVGhlCis8Y29uc3RhbnQ+VklESU9DX0dfV0lOPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfV0lOPC9jb25zdGFudD4gaW9jdGxzIHRvIHByZXBhcmUgZm9yIGEgdmlkZW8KK292ZXJsYXkgd2VyZSByZW1vdmVkLiBUaGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZAorY2hhbmdlZCB0byB0eXBlICZ2NGwyLWJ1Zi10eXBlOyBhbmQgdGhlIGJ1ZmZlciB0eXBlIG5hbWVzIGNoYW5nZWQgYXMKK2ZvbGxvd3MuPGluZm9ybWFsdGFibGU+CisJICAgICAgPHRncm91cCBjb2xzPSIyIj4KKwkJPHRoZWFkPgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+T2xkIGRlZmluZXM8L2VudHJ5PgorCQkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJCSAgPC9yb3c+CisJCTwvdGhlYWQ+CisJCTx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9DT0RFQ0lOPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9DT0RFQ09VVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT5PbWl0dGVkIGZvciBub3c8L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfRUZGRUNUU0lOPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9FRkZFQ1RTSU4yPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9FRkZFQ1RTT1VUPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pk9taXR0ZWQgZm9yIG5vdzwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT09VVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+LTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50Pi08L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFX0JBU0U8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90Ym9keT4KKwkgICAgICA8L3Rncm91cD4KKwkgICAgPC9pbmZvcm1hbHRhYmxlPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItZm10ZGVzYzsgYSAmdjRsMi1idWYtdHlwZTsgZmllbGQgbmFtZWQKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gd2FzIGFkZGVkIGFzIGluICZ2NGwyLWZvcm1hdDsuIFRoZQorPGNvbnN0YW50PlZJRElPQ19FTlVNX0ZCVUZGTVQ8L2NvbnN0YW50PiBpb2N0bCBpcyBubyBsb25nZXIgbmVlZGVkIGFuZAord2FzIHJlbW92ZWQuIFRoZXNlIGNhbGxzIGNhbiBiZSByZXBsYWNlZCBieSAmVklESU9DLUVOVU0tRk1UOyB3aXRoCit0eXBlIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLXBpeC1mb3JtYXQ7IHRoZQorPHN0cnVjdGZpZWxkPmRlcHRoPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2FzIHJlbW92ZWQsIGFzc3VtaW5nCithcHBsaWNhdGlvbnMgd2hpY2ggcmVjb2duaXplIHRoZSBmb3JtYXQgYnkgaXRzIGZvdXItY2hhcmFjdGVyLWNvZGUKK2FscmVhZHkga25vdyB0aGUgY29sb3IgZGVwdGgsIGFuZCBvdGhlcnMgZG8gbm90IGNhcmUgYWJvdXQgaXQuIFRoZQorc2FtZSByYXRpb25hbGUgbGVhZCB0byB0aGUgcmVtb3ZhbCBvZiB0aGUKKzxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ8L2NvbnN0YW50PiBmbGFnLiBUaGUKKzxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX1NXQ09OVkVDT01QUkVTU0VEPC9jb25zdGFudD4gZmxhZyB3YXMgcmVtb3ZlZAorYmVjYXVzZSBkcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gY29udmVydCBpbWFnZXMgaW4ga2VybmVsIHNwYWNlLiBBCit1c2VyIGxpYnJhcnkgb2YgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHByb3ZpZGVkIGluc3RlYWQuIFRoZQorPGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfQllURVNQRVJMSU5FPC9jb25zdGFudD4gZmxhZyB3YXMgcmVkdW5kYW50LgorQXBwbGljYXRpb25zIGNhbiBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPiBmaWVsZAordG8gemVybyB0byBnZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuIFNpbmNlIHRoZSByZW1haW5pbmcgZmxhZ3Mgd2VyZQorcmVwbGFjZWQgYXMgd2VsbCwgdGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIGl0c2VsZgord2FzIHJlbW92ZWQuPC9wYXJhPgorCSAgPHBhcmE+VGhlIGludGVybGFjZSBmbGFncyB3ZXJlIHJlcGxhY2VkIGJ5IGEgJnY0bDItZmllbGQ7Cit2YWx1ZSBpbiBhIG5ld2x5IGFkZGVkIDxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+CitmaWVsZC48aW5mb3JtYWx0YWJsZT4KKwkgICAgICA8dGdyb3VwIGNvbHM9IjIiPgorCQk8dGhlYWQ+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT5PbGQgZmxhZzwvZW50cnk+CisJCSAgICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90aGVhZD4KKwkJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX05PVF9JTlRFUkxBQ0VEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pj88L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfSU5URVJMQUNFRDwvY29uc3RhbnQ+Cis9IDxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0NPTUJJTkVEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTVRfRkxBR19UT1BGSUVMRDwvY29uc3RhbnQ+Cis9IDxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX09EREZJRUxEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0JPVEZJRUxEPC9jb25zdGFudD4KKz0gPGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfRVZFTkZJRUxEPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0JPVFRPTTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9UQjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9CVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD4tPC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0FMVEVSTkFURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90Ym9keT4KKwkgICAgICA8L3Rncm91cD4KKwkgICAgPC9pbmZvcm1hbHRhYmxlPjwvcGFyYT4KKworCSAgPHBhcmE+VGhlIGNvbG9yIHNwYWNlIGZsYWdzIHdlcmUgcmVwbGFjZWQgYnkgYQorJnY0bDItY29sb3JzcGFjZTsgdmFsdWUgaW4gYSBuZXdseSBhZGRlZAorPHN0cnVjdGZpZWxkPmNvbG9yc3BhY2U8L3N0cnVjdGZpZWxkPiBmaWVsZCwgd2hlcmUgb25lIG9mCis8Y29uc3RhbnQ+VjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9CVDg3ODwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX008L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHPC9jb25zdGFudD4gcmVwbGFjZXMKKzxjb25zdGFudD5WNEwyX0ZNVF9DU182MDFZVVY8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLXJlcXVlc3RidWZmZXJzOyB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2FzIHByb3Blcmx5IGRlZmluZWQgYXMKKyZ2NGwyLWJ1Zi10eXBlOy4gQnVmZmVyIHR5cGVzIGNoYW5nZWQgYXMgbWVudGlvbmVkIGFib3ZlLiBBIG5ldworPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHR5cGUgJnY0bDItbWVtb3J5OyB3YXMKK2FkZGVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gSS9PIG1ldGhvZHMgdXNpbmcgYnVmZmVycyBhbGxvY2F0ZWQKK2J5IHRoZSBkcml2ZXIgb3IgdGhlIGFwcGxpY2F0aW9uLiBTZWUgPHhyZWYgbGlua2VuZD0iaW8iIC8+IGZvcgorZGV0YWlscy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLWJ1ZmZlcjsgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHdhcyBwcm9wZXJseSBkZWZpbmVkIGFzICZ2NGwyLWJ1Zi10eXBlOy4gQnVmZmVyIHR5cGVzIGNoYW5nZWQgYXMKK21lbnRpb25lZCBhYm92ZS4gQSA8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0eXBlCismdjRsMi1maWVsZDsgd2FzIGFkZGVkIHRvIGluZGljYXRlIGlmIGEgYnVmZmVyIGNvbnRhaW5zIGEgdG9wIG9yCitib3R0b20gZmllbGQuIFRoZSBvbGQgZmllbGQgZmxhZ3Mgd2VyZSByZW1vdmVkLiBTaW5jZSBubyB1bmFkanVzdGVkCitzeXN0ZW0gdGltZSBjbG9jayB3YXMgYWRkZWQgdG8gdGhlIGtlcm5lbCBhcyBwbGFubmVkLCB0aGUKKzxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZCBjaGFuZ2VkIGJhY2sgZnJvbSB0eXBlCitzdGFtcF90LCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBleHByZXNzaW5nIHRoZSBzYW1wbGUgdGltZSBpbgorbmFub3NlY29uZHMsIHRvIHN0cnVjdCA8c3RydWN0bmFtZT50aW1ldmFsPC9zdHJ1Y3RuYW1lPi4gV2l0aCB0aGUKK2FkZGl0aW9uIG9mIGEgc2Vjb25kIG1lbW9yeSBtYXBwaW5nIG1ldGhvZCB0aGUKKzxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBtb3ZlZCBpbnRvIHVuaW9uCis8c3RydWN0ZmllbGQ+bTwvc3RydWN0ZmllbGQ+LCBhbmQgYSBuZXcKKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0eXBlICZ2NGwyLW1lbW9yeTsgd2FzCithZGRlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIEkvTyBtZXRob2RzLiBTZWUgPHhyZWYgbGlua2VuZD0iaW8iIC8+Citmb3IgZGV0YWlscy48L3BhcmE+CisKKwkgIDxwYXJhPlRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfUkVRX0NPTlRJRzwvY29uc3RhbnQ+CitmbGFnIHdhcyB1c2VkIGJ5IHRoZSBWNEwgY29tcGF0aWJpbGl0eSBsYXllciwgYWZ0ZXIgY2hhbmdlcyB0byB0aGlzCitjb2RlIGl0IHdhcyBubyBsb25nZXIgbmVlZGVkLiBUaGUKKzxjb25zdGFudD5WNEwyX0JVRl9BVFRSX0RFVklDRU1FTTwvY29uc3RhbnQ+IGZsYWcgd291bGQgaW5kaWNhdGUgaWYKK3RoZSBidWZmZXIgd2FzIGluZGVlZCBhbGxvY2F0ZWQgaW4gZGV2aWNlIG1lbW9yeSByYXRoZXIgdGhhbiBETUEtYWJsZQorc3lzdGVtIG1lbW9yeS4gSXQgd2FzIGJhcmVseSB1c2VmdWwgYW5kIHNvIHdhcyByZW1vdmVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItZnJhbWVidWZmZXI7IHRoZQorPHN0cnVjdGZpZWxkPmJhc2VbM108L3N0cnVjdGZpZWxkPiBhcnJheSBhbnRpY2lwYXRpbmcgZG91YmxlLSBhbmQKK3RyaXBsZS1idWZmZXJpbmcgaW4gb2ZmLXNjcmVlbiB2aWRlbyBtZW1vcnksIGhvd2V2ZXIgd2l0aG91dCBkZWZpbmluZworYSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtLCB3YXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgcG9pbnRlci4gVGhlCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9TQ0FMRVVQPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9TQ0FMRURPV048L2NvbnN0YW50PiBmbGFncyB3ZXJlIHJlbW92ZWQuCitBcHBsaWNhdGlvbnMgY2FuIGRldGVybWluZSB0aGlzIGNhcGFiaWxpdHkgbW9yZSBhY2N1cmF0ZWx5IHVzaW5nIHRoZQorbmV3IGNyb3BwaW5nIGFuZCBzY2FsaW5nIGludGVyZmFjZS4gVGhlCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9DTElQUElORzwvY29uc3RhbnQ+IGZsYWcgd2FzIHJlcGxhY2VkIGJ5Cis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9CSVRNQVBfQ0xJUFBJTkc8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLWNsaXA7IHRoZSA8c3RydWN0ZmllbGQ+eDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnk8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgbW92ZWQgaW50byBhCis8c3RydWN0ZmllbGQ+Yzwvc3RydWN0ZmllbGQ+IHN1YnN0cnVjdHVyZSBvZiB0eXBlICZ2NGwyLXJlY3Q7LiBUaGUKKzxzdHJ1Y3RmaWVsZD54PC9zdHJ1Y3RmaWVsZD4gYW5kIDxzdHJ1Y3RmaWVsZD55PC9zdHJ1Y3RmaWVsZD4gZmllbGRzCit3ZXJlIHJlbmFtZWQgdG8gPHN0cnVjdGZpZWxkPmxlZnQ8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD50b3A8L3N0cnVjdGZpZWxkPiwgJmllOyBvZmZzZXRzIHRvIGEgY29udGV4dCBkZXBlbmRlbnQKK29yaWdpbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLXdpbmRvdzsgdGhlIDxzdHJ1Y3RmaWVsZD54PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+eTwvc3RydWN0ZmllbGQ+LCA8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5oZWlnaHQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBtb3ZlZCBpbnRvIGEKKzxzdHJ1Y3RmaWVsZD53PC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIGFzIGFib3ZlLiBBCis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiB0eXBlICV2NGwyLWZpZWxkOyB3YXMgYWRkZWQKK3RvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZmllbGQgYW5kIGZyYW1lIChpbnRlcmxhY2VkKSBvdmVybGF5LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRpZ2l0YWwgem9vbSBpbnRlcmZhY2UsIGluY2x1ZGluZyBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfem9vbWNhcDwvc3RydWN0bmFtZT4sIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl96b29tPC9zdHJ1Y3RuYW1lPiwKKzxjb25zdGFudD5WNEwyX1pPT01fTk9OQ0FQPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9aT09NX1dISUxFU1RSRUFNSU5HPC9jb25zdGFudD4gd2FzIHJlcGxhY2VkIGJ5IGEgbmV3Citjcm9wcGluZyBhbmQgc2NhbGluZyBpbnRlcmZhY2UuIFRoZSBwcmV2aW91c2x5IHVudXNlZCBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfY3JvcGNhcDwvc3RydWN0bmFtZT4gYW5kCis8c3RydWN0bmFtZT52NGwyX2Nyb3A8L3N0cnVjdG5hbWU+IHdoZXJlIHJlZGVmaW5lZCBmb3IgdGhpcyBwdXJwb3NlLgorU2VlIDx4cmVmIGxpbmtlbmQ9ImNyb3AiIC8+IGZvciBkZXRhaWxzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gJnY0bDItdmJpLWZvcm1hdDsgdGhlCis8c3RydWN0ZmllbGQ+U0FNUExFX0ZPUk1BVDwvc3RydWN0ZmllbGQ+IGZpZWxkIG5vdyBjb250YWlucyBhCitmb3VyLWNoYXJhY3Rlci1jb2RlIGFzIHVzZWQgdG8gaWRlbnRpZnkgdmlkZW8gaW1hZ2UgZm9ybWF0cyBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfR1JFWTwvY29uc3RhbnQ+IHJlcGxhY2VzIHRoZQorPGNvbnN0YW50PlY0TDJfVkJJX1NGX1VCWVRFPC9jb25zdGFudD4gZGVmaW5lLiBUaGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBleHRlbmRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluICZ2NGwyLWNhcHR1cmVwYXJtOyB0aGUgdHlwZSBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD50aW1lcGVyZnJhbWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBjaGFuZ2VkIGZyb20gdW5zaWduZWQKK2xvbmcgdG8gJnY0bDItZnJhY3Q7LiBUaGlzIGFsbG93cyB0aGUgYWNjdXJhdGUgZXhwcmVzc2lvbiBvZiBtdWx0aXBsZXMKK29mIHRoZSBOVFNDLU0gZnJhbWUgcmF0ZSAzMDAwMCAvIDEwMDEuIEEgbmV3IGZpZWxkCis8c3RydWN0ZmllbGQ+cmVhZGJ1ZmZlcnM8L3N0cnVjdGZpZWxkPiB3YXMgYWRkZWQgdG8gY29udHJvbCB0aGUgZHJpdmVyCitiZWhhdmlvdXIgaW4gcmVhZCBJL08gbW9kZS48L3BhcmE+CisKKwkgIDxwYXJhPlNpbWlsYXIgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gJnY0bDItb3V0cHV0cGFybTsuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgc3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfcGVyZm9ybWFuY2U8L3N0cnVjdG5hbWU+CithbmQgPGNvbnN0YW50PlZJRElPQ19HX1BFUkY8L2NvbnN0YW50PiBpb2N0bCB3ZXJlIGRyb3BwZWQuIEV4Y2VwdCB3aGVuCit1c2luZyB0aGUgPGxpbmsgbGlua2VuZD0icnciPnJlYWQvd3JpdGUgSS9PIG1ldGhvZDwvbGluaz4sIHdoaWNoIGlzCitsaW1pdGVkIGFueXdheSwgdGhpcyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSB0bworYXBwbGljYXRpb25zLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGV4YW1wbGUgdHJhbnNmb3JtYXRpb24gZnJvbSBSR0IgdG8gWUNiQ3IgY29sb3IKK3NwYWNlIGluIHRoZSBvbGQgVjRMMiBkb2N1bWVudGF0aW9uIHdhcyBpbmFjY3VyYXRlLCB0aGlzIGhhcyBiZWVuCitjb3JyZWN0ZWQgaW4gPHhyZWYgbGlua2VuZD0icGl4Zm10IiAvPi48IS0tIDAuNTY3MEcgc2hvdWxkIGJlCiswLjU4NywgYW5kIDEyNy8xMTIgIT0gMjU1LzIyNCAtLT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiAyMDAzLTA2LTE5PC90aXRsZT4KKworICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IGNhcGFiaWxpdHkgZmxhZworPGNvbnN0YW50PlY0TDJfQ0FQX1JBRElPPC9jb25zdGFudD4gd2FzIGFkZGVkIGZvciByYWRpbyBkZXZpY2VzLiBQcmlvcgordG8gdGhpcyBjaGFuZ2UgcmFkaW8gZGV2aWNlcyB3b3VsZCBpZGVudGlmeSBzb2xlbHkgYnkgaGF2aW5nIGV4YWN0bHkgb25lCit0dW5lciB3aG9zZSB0eXBlIGZpZWxkIHJlYWRzIDxjb25zdGFudD5WNEwyX1RVTkVSX1JBRElPPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BbiBvcHRpb25hbCBkcml2ZXIgYWNjZXNzIHByaW9yaXR5IG1lY2hhbmlzbSB3YXMKK2FkZGVkLCBzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXByaSIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYXVkaW8gaW5wdXQgYW5kIG91dHB1dCBpbnRlcmZhY2Ugd2FzIGZvdW5kIHRvIGJlCitpbmNvbXBsZXRlLjwvcGFyYT4KKwkgIDxwYXJhPlByZXZpb3VzbHkgdGhlICZWSURJT0MtRy1BVURJTzsKK2lvY3RsIHdvdWxkIGVudW1lcmF0ZSB0aGUgYXZhaWxhYmxlIGF1ZGlvIGlucHV0cy4gQW4gaW9jdGwgdG8KK2RldGVybWluZSB0aGUgY3VycmVudCBhdWRpbyBpbnB1dCwgaWYgbW9yZSB0aGFuIG9uZSBjb21iaW5lcyB3aXRoIHRoZQorY3VycmVudCB2aWRlbyBpbnB1dCwgZGlkIG5vdCBleGlzdC4gU28KKzxjb25zdGFudD5WSURJT0NfR19BVURJTzwvY29uc3RhbnQ+IHdhcyByZW5hbWVkIHRvCis8Y29uc3RhbnQ+VklESU9DX0dfQVVESU9fT0xEPC9jb25zdGFudD4sIHRoaXMgaW9jdGwgd2lsbCBiZSByZW1vdmVkIGluCit0aGUgZnV0dXJlLiBUaGUgJlZJRElPQy1FTlVNQVVESU87IGlvY3RsIHdhcyBhZGRlZCB0byBlbnVtZXJhdGUKK2F1ZGlvIGlucHV0cywgd2hpbGUgJlZJRElPQy1HLUFVRElPOyBub3cgcmVwb3J0cyB0aGUgY3VycmVudCBhdWRpbworaW5wdXQuPC9wYXJhPgorCSAgPHBhcmE+VGhlIHNhbWUgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gJlZJRElPQy1HLUFVRE9VVDsgYW5kCismVklESU9DLUVOVU1BVURPVVQ7LjwvcGFyYT4KKwkgIDxwYXJhPlVudGlsIGZ1cnRoZXIgdGhlICJ2aWRlb2RldiIgbW9kdWxlIHdpbGwgYXV0b21hdGljYWxseQordHJhbnNsYXRlIGJldHdlZW4gdGhlIG9sZCBhbmQgbmV3IGlvY3RscywgYnV0IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucworbXVzdCBiZSB1cGRhdGVkIHRvIHN1Y2Nlc3NmdWxseSBjb21waWxlIGFnYWluLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZWSURJT0MtT1ZFUkxBWTsgaW9jdGwgd2FzIGluY29ycmVjdGx5IGRlZmluZWQgd2l0aAord3JpdGUtcmVhZCBwYXJhbWV0ZXIuIEl0IHdhcyBjaGFuZ2VkIHRvIHdyaXRlLW9ubHksIHdoaWxlIHRoZSB3cml0ZS1yZWFkCit2ZXJzaW9uIHdhcyByZW5hbWVkIHRvIDxjb25zdGFudD5WSURJT0NfT1ZFUkxBWV9PTEQ8L2NvbnN0YW50Pi4gVGhlIG9sZAoraW9jdGwgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFVudGlsIGZ1cnRoZXIgdGhlICJ2aWRlb2RldiIKK2tlcm5lbCBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZSB0byB0aGUgbmV3IHZlcnNpb24sIHNvIGRyaXZlcnMKK211c3QgYmUgcmVjb21waWxlZCwgYnV0IG5vdCBhcHBsaWNhdGlvbnMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48eHJlZiBsaW5rZW5kPSJvdmVybGF5IiAvPiBpbmNvcnJlY3RseSBzdGF0ZWQgdGhhdAorY2xpcHBpbmcgcmVjdGFuZ2xlcyBkZWZpbmUgcmVnaW9ucyB3aGVyZSB0aGUgdmlkZW8gY2FuIGJlIHNlZW4uCitDb3JyZWN0IGlzIHRoYXQgY2xpcHBpbmcgcmVjdGFuZ2xlcyBkZWZpbmUgcmVnaW9ucyB3aGVyZQorPGVtcGhhc2lzPm5vPC9lbXBoYXNpcz4gdmlkZW8gc2hhbGwgYmUgZGlzcGxheWVkIGFuZCBzbyB0aGUgZ3JhcGhpY3MKK3N1cmZhY2UgY2FuIGJlIHNlZW4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJlZJRElPQy1TLVBBUk07IGFuZCAmVklESU9DLVMtQ1RSTDsgaW9jdGxzIHdlcmUKK2RlZmluZWQgd2l0aCB3cml0ZS1vbmx5IHBhcmFtZXRlciwgaW5jb25zaXN0ZW50IHdpdGggb3RoZXIgaW9jdGxzCittb2RpZnlpbmcgdGhlaXIgYXJndW1lbnQuIFRoZXkgd2VyZSBjaGFuZ2VkIHRvIHdyaXRlLXJlYWQsIHdoaWxlIGEKKzxjb25zdGFudD5fT0xEPC9jb25zdGFudD4gc3VmZml4IHdhcyBhZGRlZCB0byB0aGUgd3JpdGUtb25seSB2ZXJzaW9ucy4KK1RoZSBvbGQgaW9jdGxzIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBEcml2ZXJzIGFuZAorYXBwbGljYXRpb25zIGFzc3VtaW5nIGEgY29uc3RhbnQgcGFyYW1ldGVyIG5lZWQgYW4gdXBkYXRlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIDIwMDMtMTEtMDU8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluIDx4cmVmIGxpbmtlbmQ9InBpeGZtdC1yZ2IiIC8+IHRoZSBmb2xsb3dpbmcgcGl4ZWwKK2Zvcm1hdHMgd2VyZSBpbmNvcnJlY3RseSB0cmFuc2ZlcnJlZCBmcm9tIEJpbGwgRGlya3MnIFY0TDIKK3NwZWNpZmljYXRpb24uIERlc2NyaXB0aW9ucyBiZWxvdyByZWZlciB0byBieXRlcyBpbiBtZW1vcnksIGluCithc2NlbmRpbmcgYWRkcmVzcyBvcmRlci48aW5mb3JtYWx0YWJsZT4KKwkgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCQk8dGhlYWQ+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT5TeW1ib2w8L2VudHJ5PgorCQkgICAgPGVudHJ5PkluIHRoaXMgZG9jdW1lbnQgcHJpb3IgdG8gcmV2aXNpb24KKzAuNTwvZW50cnk+CisJCSAgICA8ZW50cnk+Q29ycmVjdGVkPC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJPC90aGVhZD4KKwkJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMjQ8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+QiwgRywgUjwvZW50cnk+CisJCSAgICA8ZW50cnk+UiwgRywgQjwvZW50cnk+CisJCSAgPC9yb3c+CisJCSAgPHJvdz4KKwkJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjI0PC9jb25zdGFudD48L2VudHJ5PgorCQkgICAgPGVudHJ5PlIsIEcsIEI8L2VudHJ5PgorCQkgICAgPGVudHJ5PkIsIEcsIFI8L2VudHJ5PgorCQkgIDwvcm93PgorCQkgIDxyb3c+CisJCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0IzMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICAgIDxlbnRyeT5CLCBHLCBSLCBYPC9lbnRyeT4KKwkJICAgIDxlbnRyeT5SLCBHLCBCLCBYPC9lbnRyeT4KKwkJICA8L3Jvdz4KKwkJICA8cm93PgorCQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMzI8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgICA8ZW50cnk+UiwgRywgQiwgWDwvZW50cnk+CisJCSAgICA8ZW50cnk+QiwgRywgUiwgWDwvZW50cnk+CisJCSAgPC9yb3c+CisJCTwvdGJvZHk+CisJICAgICAgPC90Z3JvdXA+CisJICAgIDwvaW5mb3JtYWx0YWJsZT4gVGhlCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjI0PC9jb25zdGFudD4gZXhhbXBsZSB3YXMgYWx3YXlzCitjb3JyZWN0LjwvcGFyYT4KKwkgIDxwYXJhPkluIDx4cmVmIGxpbmtlbmQ9InY0bC1pbWFnZS1wcm9wZXJ0aWVzIiAvPiB0aGUgbWFwcGluZworb2YgdGhlIFY0TCA8Y29uc3RhbnQ+VklERU9fUEFMRVRURV9SR0IyNDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJREVPX1BBTEVUVEVfUkdCMzI8L2NvbnN0YW50PiBmb3JtYXRzIHRvIFY0TDIgcGl4ZWwgZm9ybWF0cword2FzIGFjY29yZGluZ2x5IGNvcnJlY3RlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlVucmVsYXRlZCB0byB0aGUgZml4ZXMgYWJvdmUsIGRyaXZlcnMgbWF5IHN0aWxsCitpbnRlcnByZXQgc29tZSBWNEwyIFJHQiBwaXhlbCBmb3JtYXRzIGRpZmZlcmVudGx5LiBUaGVzZSBpc3N1ZXMgaGF2ZQoreWV0IHRvIGJlIGFkZHJlc3NlZCwgZm9yIGRldGFpbHMgc2VlIDx4cmVmCisJICAgICAgbGlua2VuZD0icGl4Zm10LXJnYiIgLz4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42LjYsIDIwMDQtMDUtMDk8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmVklESU9DLUNST1BDQVA7IGlvY3RsIHdhcyBpbmNvcnJlY3RseSBkZWZpbmVkCit3aXRoIHJlYWQtb25seSBwYXJhbWV0ZXIuIEl0IGlzIG5vdyBkZWZpbmVkIGFzIHdyaXRlLXJlYWQgaW9jdGwsIHdoaWxlCit0aGUgcmVhZC1vbmx5IHZlcnNpb24gd2FzIHJlbmFtZWQgdG8KKzxjb25zdGFudD5WSURJT0NfQ1JPUENBUF9PTEQ8L2NvbnN0YW50Pi4gVGhlIG9sZCBpb2N0bCB3aWxsIGJlIHJlbW92ZWQKK2luIHRoZSBmdXR1cmUuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42Ljg8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IGZpZWxkIDxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+IChmb3JtZXIKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZFswXTwvc3RydWN0ZmllbGQ+KSB3YXMgYWRkZWQgdG8gdGhlICZ2NGwyLWJ1ZmZlcjsKK3N0cnVjdHVyZS4gUHVycG9zZSBvZiB0aGlzIGZpZWxkIGlzIHRvIGFsdGVybmF0ZSBiZXR3ZWVuIHZpZGVvIGlucHV0cworKCZlZzsgY2FtZXJhcykgaW4gc3RlcCB3aXRoIHRoZSB2aWRlbyBjYXB0dXJpbmcgcHJvY2Vzcy4gVGhpcyBmdW5jdGlvbgorbXVzdCBiZSBlbmFibGVkIHdpdGggdGhlIG5ldyA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19JTlBVVDwvY29uc3RhbnQ+CitmbGFnLiBUaGUgPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgbm8gbG9uZ2VyCityZWFkLW9ubHkuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgc3BlYyBlcnJhdHVtIDIwMDQtMDgtMDE8L3RpdGxlPgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKKzx4cmVmIGxpbmtlbmQ9ImZ1bmMtb3BlbiIgLz4gZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IGRvY3VtZW50ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BdWRpbyBvdXRwdXQgaW9jdGxzIGVuZCBpbiAtQVVET1VULCBub3QgLUFVRElPT1VULjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gdGhlIEN1cnJlbnQgQXVkaW8gSW5wdXQgZXhhbXBsZSB0aGUKKzxjb25zdGFudD5WSURJT0NfR19BVURJTzwvY29uc3RhbnQ+IGlvY3RsIHRvb2sgdGhlIHdyb25nCithcmd1bWVudC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSAmVklESU9DLVFCVUY7IGFuZAorJlZJRElPQy1EUUJVRjsgaW9jdGxzIGRpZCBub3QgbWVudGlvbiB0aGUgJnY0bDItYnVmZmVyOworPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJdCB3YXMgYWxzbyBtaXNzaW5nIGZyb20KK2V4YW1wbGVzLiBBbHNvIG9uIHRoZSA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gcGFnZSB0aGUgJkVJTzsKK3dhcyBub3QgZG9jdW1lbnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTQ8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IHNsaWNlZCBWQkkgaW50ZXJmYWNlIHdhcyBhZGRlZC4gSXQgaXMgZG9jdW1lbnRlZAoraW4gPHhyZWYgbGlua2VuZD0ic2xpY2VkIiAvPiBhbmQgcmVwbGFjZXMgdGhlIGludGVyZmFjZSBmaXJzdAorcHJvcG9zZWQgaW4gVjRMMiBzcGVjaWZpY2F0aW9uIDAuOC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTU8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmVklESU9DLUxPRy1TVEFUVVM7IGlvY3RsIHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyB2aWRlbyBzdGFuZGFyZHMKKzxjb25zdGFudD5WNEwyX1NURF9OVFNDXzQ0MzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfU1REX1NFQ0FNX0xDPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9TVERfU0VDQU1fREs8L2NvbnN0YW50PiAoYSBzZXQgb2YgU0VDQU0gRCwgSyBhbmQgSzEpLAorYW5kIDxjb25zdGFudD5WNEwyX1NURF9BVFNDPC9jb25zdGFudD4gKGEgc2V0IG9mCis8Y29uc3RhbnQ+VjRMMl9TVERfQVRTQ184X1ZTQjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfU1REX0FUU0NfMTZfVlNCPC9jb25zdGFudD4pIHdlcmUgZGVmaW5lZC4gTm90ZSB0aGUKKzxjb25zdGFudD5WNEwyX1NURF81MjVfNjA8L2NvbnN0YW50PiBzZXQgbm93IGluY2x1ZGVzCis8Y29uc3RhbnQ+VjRMMl9TVERfTlRTQ180NDM8L2NvbnN0YW50Pi4gU2VlIGFsc28gPHhyZWYKKwkgICAgICBsaW5rZW5kPSJ2NGwyLXN0ZC1pZCIgLz4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ19HX0NPTVA8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19DT01QPC9jb25zdGFudD4gaW9jdGwgd2VyZSByZW5hbWVkIHRvCis8Y29uc3RhbnQ+VklESU9DX0dfTVBFR0NPTVA8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19NUEVHQ09NUDwvY29uc3RhbnQ+IHJlc3BlY3RpdmVseS4gVGhlaXIgYXJndW1lbnQKK3dhcyByZXBsYWNlZCBieSBhIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9tcGVnX2NvbXByZXNzaW9uPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLiAoVGhlCis8Y29uc3RhbnQ+VklESU9DX0dfTVBFR0NPTVA8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19NUEVHQ09NUDwvY29uc3RhbnQ+IGlvY3RscyB3aGVyZSByZW1vdmVkIGluIExpbnV4CisyLjYuMjUuKTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIHNwZWMgZXJyYXR1bSAyMDA1LTExLTI3PC90aXRsZT4KKyAgICAgIDxwYXJhPlRoZSBjYXB0dXJlIGV4YW1wbGUgaW4gPHhyZWYgbGlua2VuZD0iY2FwdHVyZS1leGFtcGxlIiAvPgorY2FsbGVkIHRoZSAmVklESU9DLVMtQ1JPUDsgaW9jdGwgd2l0aG91dCBjaGVja2luZyBpZiBjcm9wcGluZyBpcworc3VwcG9ydGVkLiBJbiB0aGUgdmlkZW8gc3RhbmRhcmQgc2VsZWN0aW9uIGV4YW1wbGUgaW4KKzx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkIiAvPiB0aGUgJlZJRElPQy1TLVNURDsgY2FsbCB1c2VkIHRoZSB3cm9uZworYXJndW1lbnQgdHlwZS48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBzcGVjIGVycmF0dW0gMjAwNi0wMS0xMDwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxjb25zdGFudD5WNEwyX0lOX1NUX0NPTE9SX0tJTEw8L2NvbnN0YW50PiBmbGFnIGluCismdjRsMi1pbnB1dDsgbm90IG9ubHkgaW5kaWNhdGVzIGlmIHRoZSBjb2xvciBraWxsZXIgaXMgZW5hYmxlZCwgYnV0CithbHNvIGlmIGl0IGlzIGFjdGl2ZS4gKFRoZSBjb2xvciBraWxsZXIgZGlzYWJsZXMgY29sb3IgZGVjb2Rpbmcgd2hlbgoraXQgZGV0ZWN0cyBubyBjb2xvciBpbiB0aGUgdmlkZW8gc2lnbmFsIHRvIGltcHJvdmUgdGhlIGltYWdlCitxdWFsaXR5Lik8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZWSURJT0MtUy1QQVJNOyBpcyBhIHdyaXRlLXJlYWQgaW9jdGwsIG5vdCB3cml0ZS1vbmx5IGFzCitzdGF0ZWQgb24gaXRzIHJlZmVyZW5jZSBwYWdlLiBUaGUgaW9jdGwgY2hhbmdlZCBpbiAyMDAzIGFzIG5vdGVkIGFib3ZlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIHNwZWMgZXJyYXR1bSAyMDA2LTAyLTAzPC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiAmdjRsMi1jYXB0dXJlcGFybTsgYW5kICZ2NGwyLW91dHB1dHBhcm07IHRoZQorPHN0cnVjdGZpZWxkPnRpbWVwZXJmcmFtZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGdpdmVzIHRoZSB0aW1lIGluCitzZWNvbmRzLCBub3QgbWljcm9zZWNvbmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIHNwZWMgZXJyYXR1bSAyMDA2LTAyLTA0PC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmNsaXBzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4KKyZ2NGwyLXdpbmRvdzsgbXVzdCBwb2ludCB0byBhbiBhcnJheSBvZiAmdjRsMi1jbGlwOywgbm90IGEgbGlua2VkCitsaXN0LCBiZWNhdXNlIGRyaXZlcnMgaWdub3JlIHRoZSBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfY2xpcDwvc3RydWN0bmFtZT4uPHN0cnVjdGZpZWxkPm5leHQ8L3N0cnVjdGZpZWxkPgorcG9pbnRlci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTc8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyB2aWRlbyBzdGFuZGFyZCBtYWNyb3Mgd2VyZSBhZGRlZDoKKzxjb25zdGFudD5WNEwyX1NURF9OVFNDX01fS1I8L2NvbnN0YW50PiAoTlRTQyBNIFNvdXRoIEtvcmVhKSwgYW5kIHRoZQorc2V0cyA8Y29uc3RhbnQ+VjRMMl9TVERfTU48L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1NURF9CPC9jb25zdGFudD4sIDxjb25zdGFudD5WNEwyX1NURF9HSDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfU1REX0RLPC9jb25zdGFudD4uIFRoZQorPGNvbnN0YW50PlY0TDJfU1REX05UU0M8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1NURF9TRUNBTTwvY29uc3RhbnQ+IHNldHMgbm93IGluY2x1ZGUKKzxjb25zdGFudD5WNEwyX1NURF9OVFNDX01fS1I8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1NURF9TRUNBTV9MQzwvY29uc3RhbnQ+IHJlc3BlY3RpdmVseS48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkEgbmV3IDxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI8L2NvbnN0YW50Pgord2FzIGRlZmluZWQgdG8gcmVjb3JkIGJvdGggbGFuZ3VhZ2VzIG9mIGEgYmlsaW5ndWFsIHByb2dyYW0uIFRoZQordXNlIG9mIDxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfU1RFUkVPPC9jb25zdGFudD4gZm9yIHRoaXMgcHVycG9zZQoraXMgZGVwcmVjYXRlZCBub3cuIFNlZSB0aGUgJlZJRElPQy1HLVRVTkVSOyBzZWN0aW9uIGZvcgorZGV0YWlscy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBzcGVjIGVycmF0dW0gMjAwNi0wOS0yMyAoRHJhZnQgMC4xNSk8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluIHZhcmlvdXMgcGxhY2VzCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUPC9jb25zdGFudD4gb2YgdGhlIHNsaWNlZCBWQkkKK2ludGVyZmFjZSB3ZXJlIG5vdCBtZW50aW9uZWQgYWxvbmcgd2l0aCBvdGhlciBidWZmZXIgdHlwZXMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1hdWRpbyIgLz4gaXQgd2FzIGNsYXJpZmllZAordGhhdCB0aGUgJnY0bDItYXVkaW87IDxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgYSBmbGFncworZmllbGQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48eHJlZiBsaW5rZW5kPSJ2aWRpb2MtcXVlcnljYXAiIC8+IGRpZCBub3QgbWVudGlvbiB0aGUKK3NsaWNlZCBWQkkgYW5kIHJhZGlvIGNhcGFiaWxpdHkgZmxhZ3MuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1mcmVxdWVuY3kiIC8+IGl0IHdhcworY2xhcmlmaWVkIHRoYXQgYXBwbGljYXRpb25zIG11c3QgaW5pdGlhbGl6ZSB0aGUgdHVuZXIKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItZnJlcXVlbmN5OyBiZWZvcmUKK2NhbGxpbmcgJlZJRElPQy1TLUZSRVFVRU5DWTsuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkKK2luICZ2NGwyLXJlcXVlc3RidWZmZXJzOyBoYXMgMiBlbGVtZW50cywgbm90IDMyLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SW4gPHhyZWYgbGlua2VuZD0ib3V0cHV0IiAvPiBhbmQgPHhyZWYKKwkgICAgICBsaW5rZW5kPSJyYXctdmJpIiAvPiB0aGUgZGV2aWNlIGZpbGUgbmFtZXMKKzxmaWxlbmFtZT4vZGV2L3ZvdXQ8L2ZpbGVuYW1lPiB3aGljaCBuZXZlciBjYXVnaHQgb24gd2VyZSByZXBsYWNlZAorYnkgPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPldpdGggTGludXggMi42LjE1IHRoZSBwb3NzaWJsZSByYW5nZSBmb3IgVkJJIGRldmljZSBtaW5vcgorbnVtYmVycyB3YXMgZXh0ZW5kZWQgZnJvbSAyMjQtMjM5IHRvIDIyNC0yNTUuIEFjY29yZGluZ2x5IGRldmljZSBmaWxlIG5hbWVzCis8ZmlsZW5hbWU+L2Rldi92YmkwPC9maWxlbmFtZT4gdG8gPGZpbGVuYW1lPi9kZXYvdmJpMzE8L2ZpbGVuYW1lPiBhcmUKK3Bvc3NpYmxlIG5vdy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMTg8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyBpb2N0bHMgJlZJRElPQy1HLUVYVC1DVFJMUzssICZWSURJT0MtUy1FWFQtQ1RSTFM7CithbmQgJlZJRElPQy1UUlktRVhULUNUUkxTOyB3ZXJlIGFkZGVkLCBhIGZsYWcgdG8gc2tpcCB1bnN1cHBvcnRlZAorY29udHJvbHMgd2l0aCAmVklESU9DLVFVRVJZQ1RSTDssIG5ldyBjb250cm9sIHR5cGVzCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0PC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUzwvY29uc3RhbnQ+ICg8eHJlZgorCSAgICAgIGxpbmtlbmQ9InY0bDItY3RybC10eXBlIiAvPiksIGFuZCBuZXcgY29udHJvbCBmbGFncworPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX1VQREFURTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfU0xJREVSPC9jb25zdGFudD4gKDx4cmVmCisJICAgICAgbGlua2VuZD0iY29udHJvbC1mbGFncyIgLz4pLiBTZWUgPHhyZWYKKwkgICAgICBsaW5rZW5kPSJleHRlbmRlZC1jb250cm9scyIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42LjE5PC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbiAmdjRsMi1zbGljZWQtdmJpLWNhcDsgYSBidWZmZXIgdHlwZSBmaWVsZCB3YXMgYWRkZWQKK3JlcGxhY2luZyBhIHJlc2VydmVkIGZpZWxkLiBOb3RlIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgdGhlIHNpemUgb2YKK2VudW0gdHlwZXMgZGlmZmVycyBmcm9tIGludCB0eXBlcyB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGNoYW5nZWQuCitUaGUgJlZJRElPQy1HLVNMSUNFRC1WQkktQ0FQOyBpb2N0bCB3YXMgcmVkZWZpbmVkIGZyb20gYmVpbmcgcmVhZC1vbmx5Cit0byB3cml0ZS1yZWFkLiBBcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIHRoZSB0eXBlIGZpZWxkIGFuZCBjbGVhcgordGhlIHJlc2VydmVkIGZpZWxkcyBub3cuIFRoZXNlIGNoYW5nZXMgbWF5IDxlbXBoYXNpcz5icmVhayB0aGUKK2NvbXBhdGliaWxpdHk8L2VtcGhhc2lzPiB3aXRoIG9sZGVyIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucy48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBpb2N0bHMgJlZJRElPQy1FTlVNLUZSQU1FU0laRVM7IGFuZAorJlZJRElPQy1FTlVNLUZSQU1FSU5URVJWQUxTOyB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QSBuZXcgcGl4ZWwgZm9ybWF0IDxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNDQ0PC9jb25zdGFudD4gKDx4cmVmCitsaW5rZW5kPSJyZ2ItZm9ybWF0cyIgLz4pIHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBzcGVjIGVycmF0dW0gMjAwNi0xMC0xMiAoRHJhZnQgMC4xNyk8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSE0xMjwvY29uc3RhbnQ+ICg8eHJlZgorbGlua2VuZD0icmVzZXJ2ZWQtZm9ybWF0cyIgLz4pIGlzIGEgWVVWIDQ6MjowLCBub3QgNDoyOjIgZm9ybWF0LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yMTwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlIGlzCitub3cgZHVhbCBsaWNlbnNlZCB1bmRlciBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIHR3byBvcgorbGF0ZXIsIGFuZCB1bmRlciBhIDMtY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yMjwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VHdvIG5ldyBmaWVsZCBvcmRlcnMKKwkgIDxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEI8L2NvbnN0YW50PiBhbmQKKwkgIDxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQ8L2NvbnN0YW50PiB3ZXJlCisJICBhZGRlZC4gU2VlIDx4cmVmIGxpbmtlbmQ9InY0bDItZmllbGQiIC8+IGZvciBkZXRhaWxzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhyZWUgbmV3IGNsaXBwaW5nL2JsZW5kaW5nIG1ldGhvZHMgd2l0aCBhIGdsb2JhbCBvcgorc3RyYWlnaHQgb3IgaW52ZXJ0ZWQgbG9jYWwgYWxwaGEgdmFsdWUgd2VyZSBhZGRlZCB0byB0aGUgdmlkZW8gb3ZlcmxheQoraW50ZXJmYWNlLiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAmVklESU9DLUctRkJVRjsgYW5kCismVklESU9DLVMtRkJVRjsgaW9jdGxzIGZvciBkZXRhaWxzLjwvcGFyYT4KKwkgIDxwYXJhPkEgbmV3IDxzdHJ1Y3RmaWVsZD5nbG9iYWxfYWxwaGE8L3N0cnVjdGZpZWxkPiBmaWVsZAord2FzIGFkZGVkIHRvIDxsaW5rCitsaW5rZW5kPSJ2NGwyLXdpbmRvdyI+PHN0cnVjdG5hbWU+djRsMl93aW5kb3c8L3N0cnVjdG5hbWU+PC9saW5rPiwKK2V4dGVuZGluZyB0aGUgc3RydWN0dXJlLiBUaGlzIG1heSA8ZW1waGFzaXM+YnJlYWsKK2NvbXBhdGliaWxpdHk8L2VtcGhhc2lzPiB3aXRoIGFwcGxpY2F0aW9ucyB1c2luZyBhIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl93aW5kb3c8L3N0cnVjdG5hbWU+IGRpcmVjdGx5LiBIb3dldmVyIHRoZSA8bGluaworbGlua2VuZD0idmlkaW9jLWctZm10Ij5WSURJT0NfRy9TL1RSWV9GTVQ8L2xpbms+IGlvY3Rscywgd2hpY2ggdGFrZSBhCitwb2ludGVyIHRvIGEgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPiBwYXJlbnQKK3N0cnVjdHVyZSB3aXRoIHBhZGRpbmcgYnl0ZXMgYXQgdGhlIGVuZCwgYXJlIG5vdCBhZmZlY3RlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBmb3JtYXQgb2YgdGhlIDxzdHJ1Y3RmaWVsZD5jaHJvbWFrZXk8L3N0cnVjdGZpZWxkPgorZmllbGQgaW4gJnY0bDItd2luZG93OyBjaGFuZ2VkIGZyb20gImhvc3Qgb3JkZXIgUkdCMzIiIHRvIGEgcGl4ZWwKK3ZhbHVlIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgZnJhbWVidWZmZXIuIFRoaXMgbWF5IDxlbXBoYXNpcz5icmVhaworY29tcGF0aWJpbGl0eTwvZW1waGFzaXM+IHdpdGggZXhpc3RpbmcgYXBwbGljYXRpb25zLiBEcml2ZXJzCitzdXBwb3J0aW5nIHRoZSAiaG9zdCBvcmRlciBSR0IzMiIgZm9ybWF0IGFyZSBub3Qga25vd24uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMjQ8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBwaXhlbCBmb3JtYXRzCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BBTDg8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDQ0PC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjU1NTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY1NjU8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWMzI8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yNTwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHBpeGVsIGZvcm1hdHMgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVkxNiI+Cis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1kxNjwvY29uc3RhbnQ+PC9saW5rPiBhbmQgPGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1TQkdHUjE2Ij4KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0JHR1IxNjwvY29uc3RhbnQ+PC9saW5rPiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5ldyA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sczwvbGluaz4KKzxjb25zdGFudD5WNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0hVRV9BVVRPPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1NIQVJQTkVTUzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT048L2NvbnN0YW50PiB3ZXJlIGFkZGVkLiBUaGUKK2NvbnRyb2xzIDxjb25zdGFudD5WNEwyX0NJRF9CTEFDS19MRVZFTDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1dISVRFTkVTUzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0hDRU5URVI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0NJRF9WQ0VOVEVSPC9jb25zdGFudD4gd2VyZSBkZXByZWNhdGVkLgorPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QSA8bGluayBsaW5rZW5kPSJjYW1lcmEtY29udHJvbHMiPkNhbWVyYSBjb250cm9scworY2xhc3M8L2xpbms+IHdhcyBhZGRlZCwgd2l0aCB0aGUgbmV3IGNvbnRyb2xzCis8Y29uc3RhbnQ+VjRMMl9DSURfRVhQT1NVUkVfQVVUTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1BBTl9SRUxBVElWRTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1RJTFRfUkVMQVRJVkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9QQU5fUkVTRVQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9USUxUX1JFU0VUPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9BQlNPTFVURTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX0ZPQ1VTX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfRk9DVVNfUkVMQVRJVkU8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0NJRF9GT0NVU19BVVRPPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfR19NUEVHQ09NUDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX01QRUdDT01QPC9jb25zdGFudD4gaW9jdGxzLCB3aGljaCB3ZXJlIHN1cGVyc2VkZWQKK2J5IHRoZSA8bGluayBsaW5rZW5kPSJleHRlbmRlZC1jb250cm9scyI+ZXh0ZW5kZWQgY29udHJvbHM8L2xpbms+CitpbnRlcmZhY2UgaW4gTGludXggMi42LjE4LCB3aGVyZSBmaW5hbGx5IHJlbW92ZWQgZnJvbSB0aGUKKzxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yNjwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHBpeGVsIGZvcm1hdHMKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWTE2PC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSMTY8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIHVzZXIgY29udHJvbHMKKzxjb25zdGFudD5WNEwyX0NJRF9DSFJPTUFfQUdDPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DSURfQ09MT1JfS0lMTEVSPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42LjI3PC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJlZJRElPQy1TLUhXLUZSRVEtU0VFSzsgaW9jdGwgYW5kIHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX0hXX0ZSRVFfU0VFSzwvY29uc3RhbnQ+IGNhcGFiaWxpdHkgd2VyZSBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgcGl4ZWwgZm9ybWF0cworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVllVPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BDQTUwMTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9QQ0E1MDU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUENBNTA4PC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BDQTU2MTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR0JSRzg8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFDMjA3PC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BKUEc8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yODwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkZWQgPGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUM8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzPC9jb25zdGFudD4gTVBFRyBhdWRpbyBlbmNvZGluZ3MuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkZWQgPGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDPC9jb25zdGFudD4gTVBFRwordmlkZW8gZW5jb2RpbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIHBpeGVsIGZvcm1hdHMKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0dSQkcxMDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR1JCRzEwRFBDTTg8L2NvbnN0YW50PiB3ZXJlIGFkZGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4yOTwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfR19DSElQX0lERU5UPC9jb25zdGFudD4gaW9jdGwgd2FzIHJlbmFtZWQKK3RvIDxjb25zdGFudD5WSURJT0NfR19DSElQX0lERU5UX09MRDwvY29uc3RhbnQ+IGFuZCAmVklESU9DLURCRy1HLUNISVAtSURFTlQ7Cit3YXMgaW50cm9kdWNlZCBpbiBpdHMgcGxhY2UuIFRoZSBvbGQgc3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfY2hpcF9pZGVudDwvc3RydWN0bmFtZT4KK3dhcyByZW5hbWVkIHRvIDxzdHJ1Y3RuYW1lIGlkPSJ2NGwyLWNoaXAtaWRlbnQtb2xkIj52NGwyX2NoaXBfaWRlbnRfb2xkPC9zdHJ1Y3RuYW1lPi48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgcGl4ZWwgZm9ybWF0cworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9WWVVZPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WMTY8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfTlY2MTwvY29uc3RhbnQ+IHdlcmUgYWRkZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkZWQgY2FtZXJhIGNvbnRyb2xzCis8Y29uc3RhbnQ+VjRMMl9DSURfWk9PTV9BQlNPTFVURTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQ0lEX1pPT01fUkVMQVRJVkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9aT09NX0NPTlRJTlVPVVM8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0NJRF9QUklWQUNZPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4zMDwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+TmV3IGNvbnRyb2wgZmxhZyA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTwvY29uc3RhbnQ+IHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5OZXcgY29udHJvbCA8Y29uc3RhbnQ+VjRMMl9DSURfQ09MT1JGWDwvY29uc3RhbnQ+IHdhcyBhZGRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+VjRMMiBpbiBMaW51eCAyLjYuMzI8L3RpdGxlPgorICAgICAgPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkluIG9yZGVyIHRvIGJlIGVhc2llciB0byBjb21wYXJlIGEgVjRMMiBBUEkgYW5kIGEga2VybmVsCit2ZXJzaW9uLCBub3cgVjRMMiBBUEkgaXMgbnVtYmVyZWQgdXNpbmcgdGhlIExpbnV4IEtlcm5lbCB2ZXJzaW9uIG51bWVyYXRpb24uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+RmluYWxpemVkIHRoZSBSRFMgY2FwdHVyZSBBUEkuIFNlZSA8eHJlZiBsaW5rZW5kPSJyZHMiIC8+IGZvcgorbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BZGRlZCBuZXcgY2FwYWJpbGl0aWVzIGZvciBtb2R1bGF0b3JzIGFuZCBSRFMgZW5jb2RlcnMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkIGRlc2NyaXB0aW9uIGZvciBsaWJ2NGwgQVBJLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIHN1cHBvcnQgZm9yIHN0cmluZyBjb250cm9scyB2aWEgbmV3IHR5cGUgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX1NUUklORzwvY29uc3RhbnQ+LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIDxjb25zdGFudD5WNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSPC9jb25zdGFudD4gZG9jdW1lbnRhdGlvbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BZGRlZCBGTSBNb2R1bGF0b3IgKEZNIFRYKSBFeHRlbmRlZCBDb250cm9sIENsYXNzOiA8Y29uc3RhbnQ+VjRMMl9DVFJMX0NMQVNTX0ZNX1RYPC9jb25zdGFudD4gYW5kIHRoZWlyIENvbnRyb2wgSURzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZGVkIFJlbW90ZSBDb250cm9sbGVyIGNoYXB0ZXIsIGRlc2NyaWJpbmcgdGhlIGRlZmF1bHQgUmVtb3RlIENvbnRyb2xsZXIgbWFwcGluZyBmb3IgbWVkaWEgZGV2aWNlcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICA8L3NlY3Rpb24+CisgICA8L3NlY3Rpb24+CisKKyAgIDxzZWN0aW9uIGlkPSJvdGhlciI+CisgICAgIDx0aXRsZT5SZWxhdGlvbiBvZiBWNEwyIHRvIG90aGVyIExpbnV4IG11bHRpbWVkaWEgQVBJczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ieHZpZGVvIj4KKyAgICAgIDx0aXRsZT5YIFZpZGVvIEV4dGVuc2lvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoZSBYIFZpZGVvIEV4dGVuc2lvbiAoYWJicmV2aWF0ZWQgWFZpZGVvIG9yIGp1c3QgWHYpIGlzCithbiBleHRlbnNpb24gb2YgdGhlIFggV2luZG93IHN5c3RlbSwgaW1wbGVtZW50ZWQgZm9yIGV4YW1wbGUgYnkgdGhlCitYRnJlZTg2IHByb2plY3QuIEl0cyBzY29wZSBpcyBzaW1pbGFyIHRvIFY0TDIsIGFuIEFQSSB0byB2aWRlbyBjYXB0dXJlCithbmQgb3V0cHV0IGRldmljZXMgZm9yIFggY2xpZW50cy4gWHYgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBkaXNwbGF5CitsaXZlIHZpZGVvIGluIGEgd2luZG93LCBzZW5kIHdpbmRvdyBjb250ZW50cyB0byBhIFRWIG91dHB1dCwgYW5kCitjYXB0dXJlIG9yIG91dHB1dCBzdGlsbCBpbWFnZXMgaW4gWFBpeG1hcHM8Zm9vdG5vdGU+CisJICA8cGFyYT5UaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBYRnJlZTg2LjwvcGFyYT4KKwk8L2Zvb3Rub3RlPi4gV2l0aCB0aGVpciBpbXBsZW1lbnRhdGlvbiBYRnJlZTg2IG1ha2VzIHRoZQorZXh0ZW5zaW9uIGF2YWlsYWJsZSBhY3Jvc3MgbWFueSBvcGVyYXRpbmcgc3lzdGVtcyBhbmQKK2FyY2hpdGVjdHVyZXMuPC9wYXJhPgorCisgICAgICA8cGFyYT5CZWNhdXNlIHRoZSBkcml2ZXIgaXMgZW1iZWRkZWQgaW50byB0aGUgWCBzZXJ2ZXIgWHYgaGFzIGEKK251bWJlciBvZiBhZHZhbnRhZ2VzIG92ZXIgdGhlIFY0TDIgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+dmlkZW8KK292ZXJsYXkgaW50ZXJmYWNlPC9saW5rPi4gVGhlIGRyaXZlciBjYW4gZWFzaWx5IGRldGVybWluZSB0aGUgb3ZlcmxheQordGFyZ2V0LCAmaWU7IHZpc2libGUgZ3JhcGhpY3MgbWVtb3J5IG9yIG9mZi1zY3JlZW4gYnVmZmVycyBmb3IgYQorZGVzdHJ1Y3RpdmUgb3ZlcmxheS4gSXQgY2FuIHByb2dyYW0gdGhlIFJBTURBQyBmb3IgYSBub24tZGVzdHJ1Y3RpdmUKK292ZXJsYXksIHNjYWxpbmcgb3IgY29sb3Ita2V5aW5nLCBvciB0aGUgY2xpcHBpbmcgZnVuY3Rpb25zIG9mIHRoZQordmlkZW8gY2FwdHVyZSBoYXJkd2FyZSwgYWx3YXlzIGluIHN5bmMgd2l0aCBkcmF3aW5nIG9wZXJhdGlvbnMgb3IKK3dpbmRvd3MgbW92aW5nIG9yIGNoYW5naW5nIHRoZWlyIHN0YWNraW5nIG9yZGVyLjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gY29tYmluZSB0aGUgYWR2YW50YWdlcyBvZiBYdiBhbmQgVjRMIGEgc3BlY2lhbCBYdgorZHJpdmVyIGV4aXN0cyBpbiBYRnJlZTg2IGFuZCBYT3JnLCBqdXN0IHByb2dyYW1taW5nIGFueSBvdmVybGF5IGNhcGFibGUKK1ZpZGVvNExpbnV4IGRldmljZSBpdCBmaW5kcy4gVG8gZW5hYmxlIGl0Cis8ZmlsZW5hbWU+L2V0Yy9YMTEvWEY4NkNvbmZpZzwvZmlsZW5hbWU+IG11c3QgY29udGFpbiB0aGVzZSBsaW5lczo8L3BhcmE+CisgICAgICA8cGFyYT48c2NyZWVuPgorU2VjdGlvbiAiTW9kdWxlIgorICAgIExvYWQgInY0bCIKK0VuZFNlY3Rpb248L3NjcmVlbj48L3BhcmE+CisKKyAgICAgIDxwYXJhPkFzIG9mIFhGcmVlODYgNC4yIHRoaXMgZHJpdmVyIHN0aWxsIHN1cHBvcnRzIG9ubHkgVjRMCitpb2N0bHMsIGhvd2V2ZXIgaXQgc2hvdWxkIHdvcmsganVzdCBmaW5lIHdpdGggYWxsIFY0TDIgZGV2aWNlcyB0aHJvdWdoCit0aGUgVjRMMiBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGxheWVyLiBTaW5jZSBWNEwyIHBlcm1pdHMgbXVsdGlwbGUKK29wZW5zIGl0IGlzIHBvc3NpYmxlIChpZiBzdXBwb3J0ZWQgYnkgdGhlIFY0TDIgZHJpdmVyKSB0byBjYXB0dXJlCit2aWRlbyB3aGlsZSBhbiBYIGNsaWVudCByZXF1ZXN0ZWQgdmlkZW8gb3ZlcmxheS4gUmVzdHJpY3Rpb25zIG9mCitzaW11bHRhbmVvdXMgY2FwdHVyaW5nIGFuZCBvdmVybGF5IGFyZSBkaXNjdXNzZWQgaW4gPHhyZWYKKwkgIGxpbmtlbmQ9Im92ZXJsYXkiIC8+IGFwcGx5LjwvcGFyYT4KKworICAgICAgPHBhcmE+T25seSBtYXJnaW5hbGx5IHJlbGF0ZWQgdG8gVjRMMiwgWEZyZWU4NiBleHRlbmRlZCBYdiB0bworc3VwcG9ydCBoYXJkd2FyZSBZVVYgdG8gUkdCIGNvbnZlcnNpb24gYW5kIHNjYWxpbmcgZm9yIGZhc3RlciB2aWRlbworcGxheWJhY2ssIGFuZCBhZGRlZCBhbiBpbnRlcmZhY2UgdG8gTVBFRy0yIGRlY29kaW5nIGhhcmR3YXJlLiBUaGlzIEFQSQoraXMgdXNlZnVsIHRvIGRpc3BsYXkgaW1hZ2VzIGNhcHR1cmVkIHdpdGggVjRMMiBkZXZpY2VzLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5EaWdpdGFsIFZpZGVvPC90aXRsZT4KKworICAgICAgPHBhcmE+VjRMMiBkb2VzIG5vdCBzdXBwb3J0IGRpZ2l0YWwgdGVycmVzdHJpYWwsIGNhYmxlIG9yCitzYXRlbGxpdGUgYnJvYWRjYXN0LiBBIHNlcGFyYXRlIHByb2plY3QgYWltaW5nIGF0IGRpZ2l0YWwgcmVjZWl2ZXJzCitleGlzdHMuIFlvdSBjYW4gZmluZCBpdHMgaG9tZXBhZ2UgYXQgPHVsaW5rCit1cmw9Imh0dHA6Ly9saW51eHR2Lm9yZyI+aHR0cDovL2xpbnV4dHYub3JnPC91bGluaz4uIFRoZSBMaW51eCBEVkIgQVBJCitoYXMgbm8gY29ubmVjdGlvbiB0byB0aGUgVjRMMiBBUEkgZXhjZXB0IHRoYXQgZHJpdmVycyBmb3IgaHlicmlkCitoYXJkd2FyZSBtYXkgc3VwcG9ydCBib3RoLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5BdWRpbyBJbnRlcmZhY2VzPC90aXRsZT4KKworICAgICAgPHBhcmE+W3RvIGRvIC0gT1NTL0FMU0FdPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJleHBlcmltZW50YWwiPgorICAgIDx0aXRsZT5FeHBlcmltZW50YWwgQVBJIEVsZW1lbnRzPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgVjRMMiBBUEkgZWxlbWVudHMgYXJlIGN1cnJlbnRseSBleHBlcmltZW50YWwKK2FuZCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuPC9wYXJhPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT5WaWRlbyBPdXRwdXQgT3ZlcmxheSAoT1NEKSBJbnRlcmZhY2UsIDx4cmVmCisJICAgIGxpbmtlbmQ9Im9zZCIgLz4uPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJPHBhcmE+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVk8L2NvbnN0YW50PiwKKwkmdjRsMi1idWYtdHlwZTssIDx4cmVmIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiIC8+LjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZPC9jb25zdGFudD4sCismVklESU9DLVFVRVJZQ0FQOyBpb2N0bCwgPHhyZWYgbGlua2VuZD0iZGV2aWNlLWNhcGFiaWxpdGllcyIgLz4uPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4mVklESU9DLUVOVU0tRlJBTUVTSVpFUzsgYW5kCismVklESU9DLUVOVU0tRlJBTUVJTlRFUlZBTFM7IGlvY3Rscy48L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPiZWSURJT0MtRy1FTkMtSU5ERVg7IGlvY3RsLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+JlZJRElPQy1FTkNPREVSLUNNRDsgYW5kICZWSURJT0MtVFJZLUVOQ09ERVItQ01EOworaW9jdGxzLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+JlZJRElPQy1EQkctRy1SRUdJU1RFUjsgYW5kICZWSURJT0MtREJHLVMtUkVHSVNURVI7Citpb2N0bHMuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4mVklESU9DLURCRy1HLUNISVAtSURFTlQ7IGlvY3RsLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0ib2Jzb2xldGUiPgorICAgIDx0aXRsZT5PYnNvbGV0ZSBBUEkgRWxlbWVudHM8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBWNEwyIEFQSSBlbGVtZW50cyB3ZXJlIHN1cGVyc2VkZWQgYnkgbmV3CitpbnRlcmZhY2VzIGFuZCBzaG91bGQgbm90IGJlIGltcGxlbWVudGVkIGluIG5ldyBkcml2ZXJzLjwvcGFyYT4KKworICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGNvbnN0YW50PlZJRElPQ19HX01QRUdDT01QPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfTVBFR0NPTVA8L2NvbnN0YW50PiBpb2N0bHMuIFVzZSBFeHRlbmRlZCBDb250cm9scywKKzx4cmVmIGxpbmtlbmQ9ImV4dGVuZGVkLWNvbnRyb2xzIiAvPi48L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29udHJvbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTJhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbApAQCAtMCwwICsxLDIwNDkgQEAKKyAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wiPgorICAgIDx0aXRsZT5Vc2VyIENvbnRyb2xzPC90aXRsZT4KKworICAgIDxwYXJhPkRldmljZXMgdHlwaWNhbGx5IGhhdmUgYSBudW1iZXIgb2YgdXNlci1zZXR0YWJsZSBjb250cm9scworc3VjaCBhcyBicmlnaHRuZXNzLCBzYXR1cmF0aW9uIGFuZCBzbyBvbiwgd2hpY2ggd291bGQgYmUgcHJlc2VudGVkIHRvCit0aGUgdXNlciBvbiBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZS4gQnV0LCBkaWZmZXJlbnQgZGV2aWNlcword2lsbCBoYXZlIGRpZmZlcmVudCBjb250cm9scyBhdmFpbGFibGUsIGFuZCBmdXJ0aGVybW9yZSwgdGhlIHJhbmdlIG9mCitwb3NzaWJsZSB2YWx1ZXMsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSB3aWxsIHZhcnkgZnJvbSBkZXZpY2UgdG8KK2RldmljZS4gVGhlIGNvbnRyb2wgaW9jdGxzIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIGFuZCBhIG1lY2hhbmlzbSB0bworY3JlYXRlIGEgbmljZSB1c2VyIGludGVyZmFjZSBmb3IgdGhlc2UgY29udHJvbHMgdGhhdCB3aWxsIHdvcmsKK2NvcnJlY3RseSB3aXRoIGFueSBkZXZpY2UuPC9wYXJhPgorCisgICAgPHBhcmE+QWxsIGNvbnRyb2xzIGFyZSBhY2Nlc3NlZCB1c2luZyBhbiBJRCB2YWx1ZS4gVjRMMiBkZWZpbmVzCitzZXZlcmFsIElEcyBmb3Igc3BlY2lmaWMgcHVycG9zZXMuIERyaXZlcnMgY2FuIGFsc28gaW1wbGVtZW50IHRoZWlyCitvd24gY3VzdG9tIGNvbnRyb2xzIHVzaW5nIDxjb25zdGFudD5WNEwyX0NJRF9QUklWQVRFX0JBU0U8L2NvbnN0YW50PgorYW5kIGhpZ2hlciB2YWx1ZXMuIFRoZSBwcmUtZGVmaW5lZCBjb250cm9sIElEcyBoYXZlIHRoZSBwcmVmaXgKKzxjb25zdGFudD5WNEwyX0NJRF88L2NvbnN0YW50PiwgYW5kIGFyZSBsaXN0ZWQgaW4gPHhyZWYKK2xpbmtlbmQ9ImNvbnRyb2wtaWQiIC8+LiBUaGUgSUQgaXMgdXNlZCB3aGVuIHF1ZXJ5aW5nIHRoZSBhdHRyaWJ1dGVzIG9mCithIGNvbnRyb2wsIGFuZCB3aGVuIGdldHRpbmcgb3Igc2V0dGluZyB0aGUgY3VycmVudCB2YWx1ZS48L3BhcmE+CisKKyAgICA8cGFyYT5HZW5lcmFsbHkgYXBwbGljYXRpb25zIHNob3VsZCBwcmVzZW50IGNvbnRyb2xzIHRvIHRoZSB1c2VyCit3aXRob3V0IGFzc3VtcHRpb25zIGFib3V0IHRoZWlyIHB1cnBvc2UuIEVhY2ggY29udHJvbCBjb21lcyB3aXRoIGEKK25hbWUgc3RyaW5nIHRoZSB1c2VyIGlzIHN1cHBvc2VkIHRvIHVuZGVyc3RhbmQuIFdoZW4gdGhlIHB1cnBvc2UgaXMKK25vbi1pbnR1aXRpdmUgdGhlIGRyaXZlciB3cml0ZXIgc2hvdWxkIHByb3ZpZGUgYSB1c2VyIG1hbnVhbCwgYSB1c2VyCitpbnRlcmZhY2UgcGx1Zy1pbiBvciBhIGRyaXZlciBzcGVjaWZpYyBwYW5lbCBhcHBsaWNhdGlvbi4gUHJlZGVmaW5lZAorSURzIHdlcmUgaW50cm9kdWNlZCB0byBjaGFuZ2UgYSBmZXcgY29udHJvbHMgcHJvZ3JhbW1hdGljYWxseSwgZm9yCitleGFtcGxlIHRvIG11dGUgYSBkZXZpY2UgZHVyaW5nIGEgY2hhbm5lbCBzd2l0Y2guPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBtYXkgZW51bWVyYXRlIGRpZmZlcmVudCBjb250cm9scyBhZnRlciBzd2l0Y2hpbmcKK3RoZSBjdXJyZW50IHZpZGVvIGlucHV0IG9yIG91dHB1dCwgdHVuZXIgb3IgbW9kdWxhdG9yLCBvciBhdWRpbyBpbnB1dAorb3Igb3V0cHV0LiBEaWZmZXJlbnQgaW4gdGhlIHNlbnNlIG9mIG90aGVyIGJvdW5kcywgYW5vdGhlciBkZWZhdWx0IGFuZAorY3VycmVudCB2YWx1ZSwgc3RlcCBzaXplIG9yIG90aGVyIG1lbnUgaXRlbXMuIEEgY29udHJvbCB3aXRoIGEgY2VydGFpbgorPGVtcGhhc2lzPmN1c3RvbTwvZW1waGFzaXM+IElEIGNhbiBhbHNvIGNoYW5nZSBuYW1lIGFuZAordHlwZS48Zm9vdG5vdGU+CisJPHBhcmE+SXQgd2lsbCBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIGFwcGxpY2F0aW9ucyBpZiBkcml2ZXJzCittYWtlIHVzZSBvZiB0aGUgPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4gZmxhZywgYnV0Cit0aGF0IHdhcyBuZXZlciByZXF1aXJlZC48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPiBDb250cm9sIHZhbHVlcyBhcmUgc3RvcmVkIGdsb2JhbGx5LCB0aGV5IGRvIG5vdAorY2hhbmdlIHdoZW4gc3dpdGNoaW5nIGV4Y2VwdCB0byBzdGF5IHdpdGhpbiB0aGUgcmVwb3J0ZWQgYm91bmRzLiBUaGV5CithbHNvIGRvIG5vdCBjaGFuZ2UgJmVnOyB3aGVuIHRoZSBkZXZpY2UgaXMgb3BlbmVkIG9yIGNsb3NlZCwgd2hlbiB0aGUKK3R1bmVyIHJhZGlvIGZyZXF1ZW5jeSBpcyBjaGFuZ2VkIG9yIGdlbmVyYWxseSBuZXZlciB3aXRob3V0CithcHBsaWNhdGlvbiByZXF1ZXN0LiBTaW5jZSBWNEwyIHNwZWNpZmllcyBubyBldmVudCBtZWNoYW5pc20sIHBhbmVsCithcHBsaWNhdGlvbnMgaW50ZW5kZWQgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIgcGFuZWwgYXBwbGljYXRpb25zIChiZQordGhleSBidWlsdCBpbnRvIGEgbGFyZ2VyIGFwcGxpY2F0aW9uLCBhcyBhIFRWIHZpZXdlcikgbWF5IG5lZWQgdG8KK3JlZ3VsYXJseSBwb2xsIGNvbnRyb2wgdmFsdWVzIHRvIHVwZGF0ZSB0aGVpciB1c2VyCitpbnRlcmZhY2UuPGZvb3Rub3RlPgorCTxwYXJhPkFwcGxpY2F0aW9ucyBjb3VsZCBjYWxsIGFuIGlvY3RsIHRvIHJlcXVlc3QgZXZlbnRzLgorQWZ0ZXIgYW5vdGhlciBwcm9jZXNzIGNhbGxlZCAmVklESU9DLVMtQ1RSTDsgb3IgYW5vdGhlciBpb2N0bCBjaGFuZ2luZworc2hhcmVkIHByb3BlcnRpZXMgdGhlICZmdW5jLXNlbGVjdDsgZnVuY3Rpb24gd291bGQgaW5kaWNhdGUKK3JlYWRhYmlsaXR5IHVudGlsIGFueSBpb2N0bCAocXVlcnlpbmcgdGhlIHByb3BlcnRpZXMpIGlzCitjYWxsZWQuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImNvbnRyb2wtaWQiPgorICAgICAgPHRpdGxlPkNvbnRyb2wgSURzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SUQ8L2VudHJ5PgorCSAgICA8ZW50cnk+VHlwZTwvZW50cnk+CisJICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0JBU0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Rmlyc3QgcHJlZGVmaW5lZCBJRCwgZXF1YWwgdG8KKzxjb25zdGFudD5WNEwyX0NJRF9CUklHSFRORVNTPC9jb25zdGFudD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9VU0VSX0JBU0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+U3lub255bSBvZiA8Y29uc3RhbnQ+VjRMMl9DSURfQkFTRTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQlJJR0hUTkVTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+UGljdHVyZSBicmlnaHRuZXNzLCBvciBtb3JlIHByZWNpc2VseSwgdGhlIGJsYWNrCitsZXZlbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0NPTlRSQVNUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5QaWN0dXJlIGNvbnRyYXN0IG9yIGx1bWEgZ2Fpbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1NBVFVSQVRJT048L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBpY3R1cmUgY29sb3Igc2F0dXJhdGlvbiBvciBjaHJvbWEgZ2Fpbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0hVRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+SHVlIG9yIGNvbG9yIGJhbGFuY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19WT0xVTUU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk92ZXJhbGwgYXVkaW8gdm9sdW1lLiBOb3RlIHNvbWUgZHJpdmVycyBhbHNvCitwcm92aWRlIGFuIE9TUyBvciBBTFNBIG1peGVyIGludGVyZmFjZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkF1ZGlvIHN0ZXJlbyBiYWxhbmNlLiBNaW5pbXVtIGNvcnJlc3BvbmRzIHRvIGFsbAordGhlIHdheSBsZWZ0LCBtYXhpbXVtIHRvIHJpZ2h0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fQkFTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+QXVkaW8gYmFzcyBhZGp1c3RtZW50LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fVFJFQkxFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5BdWRpbyB0cmVibGUgYWRqdXN0bWVudC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX01VVEU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk11dGUgYXVkaW8sICZpZTsgc2V0IHRoZSB2b2x1bWUgdG8gemVybywgaG93ZXZlcgord2l0aG91dCBhZmZlY3RpbmcgPGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX1ZPTFVNRTwvY29uc3RhbnQ+LiBMaWtlCitBTFNBIGRyaXZlcnMsIFY0TDIgZHJpdmVycyBtdXN0IG11dGUgYXQgbG9hZCB0aW1lIHRvIGF2b2lkIGV4Y2Vzc2l2ZQorbm9pc2UuIEFjdHVhbGx5IHRoZSBlbnRpcmUgZGV2aWNlIHNob3VsZCBiZSByZXNldCB0byBhIGxvdyBwb3dlcgorY29uc3VtcHRpb24gc3RhdGUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19MT1VETkVTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+TG91ZG5lc3MgbW9kZSAoYmFzcyBib29zdCkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9CTEFDS19MRVZFTDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+QW5vdGhlciBuYW1lIGZvciBicmlnaHRuZXNzIChub3QgYSBzeW5vbnltIG9mCis8Y29uc3RhbnQ+VjRMMl9DSURfQlJJR0hUTkVTUzwvY29uc3RhbnQ+KS4gVGhpcyBjb250cm9sIGlzIGRlcHJlY2F0ZWQKK2FuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbmV3IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+QXV0b21hdGljIHdoaXRlIGJhbGFuY2UgKGNhbWVyYXMpLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJ1dHRvbjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGFuIGFjdGlvbiBjb250cm9sLiBXaGVuIHNldCAodGhlIHZhbHVlIGlzCitpZ25vcmVkKSwgdGhlIGRldmljZSB3aWxsIGRvIGEgd2hpdGUgYmFsYW5jZSBhbmQgdGhlbiBob2xkIHRoZSBjdXJyZW50CitzZXR0aW5nLiBDb250cmFzdCB0aGlzIHdpdGggdGhlIGJvb2xlYW4KKzxjb25zdGFudD5WNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U8L2NvbnN0YW50Piwgd2hpY2gsIHdoZW4KK2FjdGl2YXRlZCwga2VlcHMgYWRqdXN0aW5nIHRoZSB3aGl0ZSBiYWxhbmNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfUkVEX0JBTEFOQ0U8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlZCBjaHJvbWEgYmFsYW5jZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0JMVUVfQkFMQU5DRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+Qmx1ZSBjaHJvbWEgYmFsYW5jZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0dBTU1BPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5HYW1tYSBhZGp1c3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9XSElURU5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PldoaXRlbmVzcyBmb3IgZ3JleS1zY2FsZSBkZXZpY2VzLiBUaGlzIGlzIGEgc3lub255bQorZm9yIDxjb25zdGFudD5WNEwyX0NJRF9HQU1NQTwvY29uc3RhbnQ+LiBUaGlzIGNvbnRyb2wgaXMgZGVwcmVjYXRlZAorYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXcgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfRVhQT1NVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkV4cG9zdXJlIChjYW1lcmFzKS4gW1VuaXQ/XTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQVVUT0dBSU48L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgPGVudHJ5PkF1dG9tYXRpYyBnYWluL2V4cG9zdXJlIGNvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9HQUlOPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5HYWluIGNvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9IRkxJUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+TWlycm9yIHRoZSBwaWN0dXJlIGhvcml6b250YWxseS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1ZGTElQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgIDxlbnRyeT5NaXJyb3IgdGhlIHBpY3R1cmUgdmVydGljYWxseS48L2VudHJ5PgorCSAgPC9yb3c+CisJPHJvdz4KKwkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfSENFTlRFUl9ERVBSRUNBVEVEPC9jb25zdGFudD4gKGZvcm1lcmx5IDxjb25zdGFudD5WNEwyX0NJRF9IQ0VOVEVSPC9jb25zdGFudD4pPC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICA8ZW50cnk+SG9yaXpvbnRhbCBpbWFnZSBjZW50ZXJpbmcuIFRoaXMgY29udHJvbCBpcworZGVwcmVjYXRlZC4gTmV3IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSA8bGluaworbGlua2VuZD0iY2FtZXJhLWNvbnRyb2xzIj5DYW1lcmEgY2xhc3MgY29udHJvbHM8L2xpbms+Cis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX0FCU09MVVRFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX1JFTEFUSVZFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DSURfUEFOX1JFU0VUPC9jb25zdGFudD4gaW5zdGVhZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1ZDRU5URVJfREVQUkVDQVRFRDwvY29uc3RhbnQ+CisJICAgIChmb3JtZXJseSA8Y29uc3RhbnQ+VjRMMl9DSURfVkNFTlRFUjwvY29uc3RhbnQ+KTwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlZlcnRpY2FsIGltYWdlIGNlbnRlcmluZy4gQ2VudGVyaW5nIGlzIGludGVuZGVkIHRvCis8ZW1waGFzaXM+cGh5c2ljYWxseTwvZW1waGFzaXM+IGFkanVzdCBjYW1lcmFzLiBGb3IgaW1hZ2UgY3JvcHBpbmcgc2VlCis8eHJlZiBsaW5rZW5kPSJjcm9wIiAvPiwgZm9yIGNsaXBwaW5nIDx4cmVmIGxpbmtlbmQ9Im92ZXJsYXkiIC8+LiBUaGlzCitjb250cm9sIGlzIGRlcHJlY2F0ZWQuIE5ldyBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUKKzxsaW5rIGxpbmtlbmQ9ImNhbWVyYS1jb250cm9scyI+Q2FtZXJhIGNsYXNzIGNvbnRyb2xzPC9saW5rPgorPGNvbnN0YW50PlY0TDJfQ0lEX1RJTFRfQUJTT0xVVEU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0NJRF9USUxUX1JFTEFUSVZFPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9SRVNFVDwvY29uc3RhbnQ+IGluc3RlYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0idjRsMi1wb3dlci1saW5lLWZyZXF1ZW5jeSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5lbnVtPC9lbnRyeT4KKwkgICAgPGVudHJ5PkVuYWJsZXMgYSBwb3dlciBsaW5lIGZyZXF1ZW5jeSBmaWx0ZXIgdG8gYXZvaWQKK2ZsaWNrZXIuIFBvc3NpYmxlIHZhbHVlcyBmb3IgPGNvbnN0YW50PmVudW0gdjRsMl9wb3dlcl9saW5lX2ZyZXF1ZW5jeTwvY29uc3RhbnQ+IGFyZToKKzxjb25zdGFudD5WNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRDwvY29uc3RhbnQ+ICgwKSwKKzxjb25zdGFudD5WNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaPC9jb25zdGFudD4gKDEpIGFuZAorPGNvbnN0YW50PlY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFo8L2NvbnN0YW50PiAoMikuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9IVUVfQVVUTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICA8ZW50cnk+RW5hYmxlcyBhdXRvbWF0aWMgaHVlIGNvbnRyb2wgYnkgdGhlIGRldmljZS4gVGhlCitlZmZlY3Qgb2Ygc2V0dGluZyA8Y29uc3RhbnQ+VjRMMl9DSURfSFVFPC9jb25zdGFudD4gd2hpbGUgYXV0b21hdGljCitodWUgY29udHJvbCBpcyBlbmFibGVkIGlzIHVuZGVmaW5lZCwgZHJpdmVycyBzaG91bGQgaWdub3JlIHN1Y2gKK3JlcXVlc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGNvbnRyb2wgc3BlY2lmaWVzIHRoZSB3aGl0ZSBiYWxhbmNlIHNldHRpbmdzCithcyBhIGNvbG9yIHRlbXBlcmF0dXJlIGluIEtlbHZpbi4gQSBkcml2ZXIgc2hvdWxkIGhhdmUgYSBtaW5pbXVtIG9mCisyODAwIChpbmNhbmRlc2NlbnQpIHRvIDY1MDAgKGRheWxpZ2h0KS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK2NvbG9yIHRlbXBlcmF0dXJlIHNlZSA8dWxpbmsKK3VybD0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2xvcl90ZW1wZXJhdHVyZSI+V2lraXBlZGlhPC91bGluaz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9TSEFSUE5FU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkFkanVzdHMgdGhlIHNoYXJwbmVzcyBmaWx0ZXJzIGluIGEgY2FtZXJhLiBUaGUKK21pbmltdW0gdmFsdWUgZGlzYWJsZXMgdGhlIGZpbHRlcnMsIGhpZ2hlciB2YWx1ZXMgZ2l2ZSBhIHNoYXJwZXIKK3BpY3R1cmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5BZGp1c3RzIHRoZSBiYWNrbGlnaHQgY29tcGVuc2F0aW9uIGluIGEgY2FtZXJhLiBUaGUKK21pbmltdW0gdmFsdWUgZGlzYWJsZXMgYmFja2xpZ2h0IGNvbXBlbnNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0NIUk9NQV9BR0M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNocm9tYSBhdXRvbWF0aWMgZ2FpbiBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfQ09MT1JfS0lMTEVSPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgIDxlbnRyeT5FbmFibGUgdGhlIGNvbG9yIGtpbGxlciAoJmllOyBmb3JjZSBhIGJsYWNrICZhbXA7IHdoaXRlIGltYWdlIGluIGNhc2Ugb2YgYSB3ZWFrIHZpZGVvIHNpZ25hbCkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0idjRsMi1jb2xvcmZ4Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9DT0xPUkZYPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZW51bTwvZW50cnk+CisJICAgIDxlbnRyeT5TZWxlY3RzIGEgY29sb3IgZWZmZWN0LiBQb3NzaWJsZSB2YWx1ZXMgZm9yCis8Y29uc3RhbnQ+ZW51bSB2NGwyX2NvbG9yZng8L2NvbnN0YW50PiBhcmU6Cis8Y29uc3RhbnQ+VjRMMl9DT0xPUkZYX05PTkU8L2NvbnN0YW50PiAoMCksCis8Y29uc3RhbnQ+VjRMMl9DT0xPUkZYX0JXPC9jb25zdGFudD4gKDEpIGFuZAorPGNvbnN0YW50PlY0TDJfQ09MT1JGWF9TRVBJQTwvY29uc3RhbnQ+ICgyKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX0xBU1RQMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5FbmQgb2YgdGhlIHByZWRlZmluZWQgY29udHJvbCBJRHMgKGN1cnJlbnRseQorPGNvbnN0YW50PlY0TDJfQ0lEX0NPTE9SRlg8L2NvbnN0YW50PiArIDEpLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfUFJJVkFURV9CQVNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklEIG9mIHRoZSBmaXJzdCBjdXN0b20gKGRyaXZlciBzcGVjaWZpYykgY29udHJvbC4KK0FwcGxpY2F0aW9ucyBkZXBlbmRpbmcgb24gcGFydGljdWxhciBjdXN0b20gY29udHJvbHMgc2hvdWxkIGNoZWNrIHRoZQorZHJpdmVyIG5hbWUgYW5kIHZlcnNpb24sIHNlZSA8eHJlZiBsaW5rZW5kPSJxdWVyeWNhcCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiBlbnVtZXJhdGUgdGhlIGF2YWlsYWJsZSBjb250cm9scyB3aXRoIHRoZQorJlZJRElPQy1RVUVSWUNUUkw7IGFuZCAmVklESU9DLVFVRVJZTUVOVTsgaW9jdGxzLCBnZXQgYW5kIHNldCBhCitjb250cm9sIHZhbHVlIHdpdGggdGhlICZWSURJT0MtRy1DVFJMOyBhbmQgJlZJRElPQy1TLUNUUkw7IGlvY3Rscy4KK0RyaXZlcnMgbXVzdCBpbXBsZW1lbnQgPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfR19DVFJMPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfQ1RSTDwvY29uc3RhbnQ+IHdoZW4gdGhlIGRldmljZSBoYXMgb25lIG9yIG1vcmUKK2NvbnRyb2xzLCA8Y29uc3RhbnQ+VklESU9DX1FVRVJZTUVOVTwvY29uc3RhbnQ+IHdoZW4gaXQgaGFzIG9uZSBvcgorbW9yZSBtZW51IHR5cGUgY29udHJvbHMuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+RW51bWVyYXRpbmcgYWxsIGNvbnRyb2xzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcXVlcnljdHJsOyBxdWVyeWN0cmw7CismdjRsMi1xdWVyeW1lbnU7IHF1ZXJ5bWVudTsKKworc3RhdGljIHZvaWQKK2VudW1lcmF0ZV9tZW51ICh2b2lkKQoreworCXByaW50ZiAoIiAgTWVudSBpdGVtczpcbiIpOworCisJbWVtc2V0ICgmYW1wO3F1ZXJ5bWVudSwgMCwgc2l6ZW9mIChxdWVyeW1lbnUpKTsKKwlxdWVyeW1lbnUuaWQgPSBxdWVyeWN0cmwuaWQ7CisKKwlmb3IgKHF1ZXJ5bWVudS5pbmRleCA9IHF1ZXJ5Y3RybC5taW5pbXVtOworCSAgICAgcXVlcnltZW51LmluZGV4ICZsdDs9IHF1ZXJ5Y3RybC5tYXhpbXVtOworCSAgICAgIHF1ZXJ5bWVudS5pbmRleCsrKSB7CisJCWlmICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1RVUVSWU1FTlU7LCAmYW1wO3F1ZXJ5bWVudSkpIHsKKwkJCXByaW50ZiAoIiAgJXNcbiIsIHF1ZXJ5bWVudS5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXBlcnJvciAoIlZJRElPQ19RVUVSWU1FTlUiKTsKKwkJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9Cit9CisKK21lbXNldCAoJmFtcDtxdWVyeWN0cmwsIDAsIHNpemVvZiAocXVlcnljdHJsKSk7CisKK2ZvciAocXVlcnljdHJsLmlkID0gVjRMMl9DSURfQkFTRTsKKyAgICAgcXVlcnljdHJsLmlkICZsdDsgVjRMMl9DSURfTEFTVFAxOworICAgICBxdWVyeWN0cmwuaWQrKykgeworCWlmICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1RVUVSWUNUUkw7LCAmYW1wO3F1ZXJ5Y3RybCkpIHsKKwkJaWYgKHF1ZXJ5Y3RybC5mbGFncyAmYW1wOyBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ZiAoIkNvbnRyb2wgJXNcbiIsIHF1ZXJ5Y3RybC5uYW1lKTsKKworCQlpZiAocXVlcnljdHJsLnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkKKwkJCWVudW1lcmF0ZV9tZW51ICgpOworCX0gZWxzZSB7CisJCWlmIChlcnJubyA9PSBFSU5WQUwpCisJCQljb250aW51ZTsKKworCQlwZXJyb3IgKCJWSURJT0NfUVVFUllDVFJMIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorfQorCitmb3IgKHF1ZXJ5Y3RybC5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTs7CisgICAgIHF1ZXJ5Y3RybC5pZCsrKSB7CisJaWYgKDAgPT0gaW9jdGwgKGZkLCAmVklESU9DLVFVRVJZQ1RSTDssICZhbXA7cXVlcnljdHJsKSkgeworCQlpZiAocXVlcnljdHJsLmZsYWdzICZhbXA7IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmICgiQ29udHJvbCAlc1xuIiwgcXVlcnljdHJsLm5hbWUpOworCisJCWlmIChxdWVyeWN0cmwudHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKQorCQkJZW51bWVyYXRlX21lbnUgKCk7CisJfSBlbHNlIHsKKwkJaWYgKGVycm5vID09IEVJTlZBTCkKKwkJCWJyZWFrOworCisJCXBlcnJvciAoIlZJRElPQ19RVUVSWUNUUkwiKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPkNoYW5naW5nIGNvbnRyb2xzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcXVlcnljdHJsOyBxdWVyeWN0cmw7CismdjRsMi1jb250cm9sOyBjb250cm9sOworCittZW1zZXQgKCZhbXA7cXVlcnljdHJsLCAwLCBzaXplb2YgKHF1ZXJ5Y3RybCkpOworcXVlcnljdHJsLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUzsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1RVUVSWUNUUkw7LCAmYW1wO3F1ZXJ5Y3RybCkpIHsKKwlpZiAoZXJybm8gIT0gRUlOVkFMKSB7CisJCXBlcnJvciAoIlZJRElPQ19RVUVSWUNUUkwiKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9IGVsc2UgeworCQlwcmludGYgKCJWNEwyX0NJRF9CUklHSFRORVNTIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCX0KK30gZWxzZSBpZiAocXVlcnljdHJsLmZsYWdzICZhbXA7IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSB7CisJcHJpbnRmICgiVjRMMl9DSURfQlJJR0hUTkVTUyBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKK30gZWxzZSB7CisJbWVtc2V0ICgmYW1wO2NvbnRyb2wsIDAsIHNpemVvZiAoY29udHJvbCkpOworCWNvbnRyb2wuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOworCWNvbnRyb2wudmFsdWUgPSBxdWVyeWN0cmwuZGVmYXVsdF92YWx1ZTsKKworCWlmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtUy1DVFJMOywgJmFtcDtjb250cm9sKSkgeworCQlwZXJyb3IgKCJWSURJT0NfU19DVFJMIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorfQorCittZW1zZXQgKCZhbXA7Y29udHJvbCwgMCwgc2l6ZW9mIChjb250cm9sKSk7Citjb250cm9sLmlkID0gVjRMMl9DSURfQ09OVFJBU1Q7CisKK2lmICgwID09IGlvY3RsIChmZCwgJlZJRElPQy1HLUNUUkw7LCAmYW1wO2NvbnRyb2wpKSB7CisJY29udHJvbC52YWx1ZSArPSAxOworCisJLyogVGhlIGRyaXZlciBtYXkgY2xhbXAgdGhlIHZhbHVlIG9yIHJldHVybiBFUkFOR0UsIGlnbm9yZWQgaGVyZSAqLworCisJaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1TLUNUUkw7LCAmYW1wO2NvbnRyb2wpCisJICAgICZhbXA7JmFtcDsgZXJybm8gIT0gRVJBTkdFKSB7CisJCXBlcnJvciAoIlZJRElPQ19TX0NUUkwiKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9CisvKiBJZ25vcmUgaWYgVjRMMl9DSURfQ09OVFJBU1QgaXMgdW5zdXBwb3J0ZWQgKi8KK30gZWxzZSBpZiAoZXJybm8gIT0gRUlOVkFMKSB7CisJcGVycm9yICgiVklESU9DX0dfQ1RSTCIpOworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKK2NvbnRyb2wuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFOworY29udHJvbC52YWx1ZSA9IFRSVUU7IC8qIHNpbGVuY2UgKi8KKworLyogRXJyb3JzIGlnbm9yZWQgKi8KK2lvY3RsIChmZCwgVklESU9DX1NfQ1RSTCwgJmFtcDtjb250cm9sKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9leGFtcGxlPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9ImV4dGVuZGVkLWNvbnRyb2xzIj4KKyAgICA8dGl0bGU+RXh0ZW5kZWQgQ29udHJvbHM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIGNvbnRyb2wgbWVjaGFuaXNtIGFzIG9yaWdpbmFsbHkgZGVzaWduZWQgd2FzIG1lYW50Cit0byBiZSB1c2VkIGZvciB1c2VyIHNldHRpbmdzIChicmlnaHRuZXNzLCBzYXR1cmF0aW9uLCBldGMpLiBIb3dldmVyLAoraXQgdHVybmVkIG91dCB0byBiZSBhIHZlcnkgdXNlZnVsIG1vZGVsIGZvciBpbXBsZW1lbnRpbmcgbW9yZQorY29tcGxpY2F0ZWQgZHJpdmVyIEFQSXMgd2hlcmUgZWFjaCBkcml2ZXIgaW1wbGVtZW50cyBvbmx5IGEgc3Vic2V0IG9mCithIGxhcmdlciBBUEkuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgTVBFRyBlbmNvZGluZyBBUEkgd2FzIHRoZSBkcml2aW5nIGZvcmNlIGJlaGluZAorZGVzaWduaW5nIGFuZCBpbXBsZW1lbnRpbmcgdGhpcyBleHRlbmRlZCBjb250cm9sIG1lY2hhbmlzbTogdGhlIE1QRUcKK3N0YW5kYXJkIGlzIHF1aXRlIGxhcmdlIGFuZCB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBoYXJkd2FyZSBNUEVHCitlbmNvZGVycyBlYWNoIG9ubHkgaW1wbGVtZW50IGEgc3Vic2V0IG9mIHRoaXMgc3RhbmRhcmQuIEZ1cnRoZXIgbW9yZSwKK21hbnkgcGFyYW1ldGVycyByZWxhdGluZyB0byBob3cgdGhlIHZpZGVvIGlzIGVuY29kZWQgaW50byBhbiBNUEVHCitzdHJlYW0gYXJlIHNwZWNpZmljIHRvIHRoZSBNUEVHIGVuY29kaW5nIGNoaXAgc2luY2UgdGhlIE1QRUcgc3RhbmRhcmQKK29ubHkgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSByZXN1bHRpbmcgTVBFRyBzdHJlYW0sIG5vdCBob3cgdGhlCit2aWRlbyBpcyBhY3R1YWxseSBlbmNvZGVkIGludG8gdGhhdCBmb3JtYXQuPC9wYXJhPgorCisgICAgICA8cGFyYT5VbmZvcnR1bmF0ZWx5LCB0aGUgb3JpZ2luYWwgY29udHJvbCBBUEkgbGFja2VkIHNvbWUKK2ZlYXR1cmVzIG5lZWRlZCBmb3IgdGhlc2UgbmV3IHVzZXMgYW5kIHNvIGl0IHdhcyBleHRlbmRlZCBpbnRvIHRoZQorKG5vdCB0ZXJyaWJseSBvcmlnaW5hbGx5IG5hbWVkKSBleHRlbmRlZCBjb250cm9sIEFQSS48L3BhcmE+CisKKyAgICAgIDxwYXJhPkV2ZW4gdGhvdWdoIHRoZSBNUEVHIGVuY29kaW5nIEFQSSB3YXMgdGhlIGZpcnN0IGVmZm9ydAordG8gdXNlIHRoZSBFeHRlbmRlZCBDb250cm9sIEFQSSwgbm93YWRheXMgdGhlcmUgYXJlIGFsc28gb3RoZXIgY2xhc3Nlcworb2YgRXh0ZW5kZWQgQ29udHJvbHMsIHN1Y2ggYXMgQ2FtZXJhIENvbnRyb2xzIGFuZCBGTSBUcmFuc21pdHRlciBDb250cm9scy4KK1RoZSBFeHRlbmRlZCBDb250cm9scyBBUEkgYXMgd2VsbCBhcyBhbGwgRXh0ZW5kZWQgQ29udHJvbHMgY2xhc3NlcyBhcmUKK2Rlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHRleHQuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlRoZSBFeHRlbmRlZCBDb250cm9sIEFQSTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRocmVlIG5ldyBpb2N0bHMgYXJlIGF2YWlsYWJsZTogJlZJRElPQy1HLUVYVC1DVFJMUzssCismVklESU9DLVMtRVhULUNUUkxTOyBhbmQgJlZJRElPQy1UUlktRVhULUNUUkxTOy4gVGhlc2UgaW9jdGxzIGFjdCBvbgorYXJyYXlzIG9mIGNvbnRyb2xzIChhcyBvcHBvc2VkIHRvIHRoZSAmVklESU9DLUctQ1RSTDsgYW5kCismVklESU9DLVMtQ1RSTDsgaW9jdGxzIHRoYXQgYWN0IG9uIGEgc2luZ2xlIGNvbnRyb2wpLiBUaGlzIGlzIG5lZWRlZAorc2luY2UgaXQgaXMgb2Z0ZW4gcmVxdWlyZWQgdG8gYXRvbWljYWxseSBjaGFuZ2Ugc2V2ZXJhbCBjb250cm9scyBhdAorb25jZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPkVhY2ggb2YgdGhlIG5ldyBpb2N0bHMgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYQorJnY0bDItZXh0LWNvbnRyb2xzOy4gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBjb250cm9sCithcnJheSwgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGNvbnRyb2xzIGluIHRoYXQgYXJyYXkgYW5kIGEgY29udHJvbAorY2xhc3MuIENvbnRyb2wgY2xhc3NlcyBhcmUgdXNlZCB0byBncm91cCBzaW1pbGFyIGNvbnRyb2xzIGludG8gYQorc2luZ2xlIGNsYXNzLiBGb3IgZXhhbXBsZSwgY29udHJvbCBjbGFzcworPGNvbnN0YW50PlY0TDJfQ1RSTF9DTEFTU19VU0VSPC9jb25zdGFudD4gY29udGFpbnMgYWxsIHVzZXIgY29udHJvbHMKKygmaWU7IGFsbCBjb250cm9scyB0aGF0IGNhbiBhbHNvIGJlIHNldCB1c2luZyB0aGUgb2xkCis8Y29uc3RhbnQ+VklESU9DX1NfQ1RSTDwvY29uc3RhbnQ+IGlvY3RsKS4gQ29udHJvbCBjbGFzcworPGNvbnN0YW50PlY0TDJfQ1RSTF9DTEFTU19NUEVHPC9jb25zdGFudD4gY29udGFpbnMgYWxsIGNvbnRyb2xzCityZWxhdGluZyB0byBNUEVHIGVuY29kaW5nLCBldGMuPC9wYXJhPgorCisgICAgICA8cGFyYT5BbGwgY29udHJvbHMgaW4gdGhlIGNvbnRyb2wgYXJyYXkgbXVzdCBiZWxvbmcgdG8gdGhlCitzcGVjaWZpZWQgY29udHJvbCBjbGFzcy4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhpcyBpcyBub3QgdGhlCitjYXNlLjwvcGFyYT4KKworICAgICAgPHBhcmE+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYW4gZW1wdHkgY29udHJvbCBhcnJheSAoY291bnQKKz09IDApIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjb250cm9sIGNsYXNzIGlzCitzdXBwb3J0ZWQuPC9wYXJhPgorCisgICAgICA8cGFyYT5UaGUgY29udHJvbCBhcnJheSBpcyBhICZ2NGwyLWV4dC1jb250cm9sOyBhcnJheS4gVGhlCis8c3RydWN0bmFtZT52NGwyX2V4dF9jb250cm9sPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgaXMgdmVyeSBzaW1pbGFyIHRvCismdjRsMi1jb250cm9sOywgZXhjZXB0IGZvciB0aGUgZmFjdCB0aGF0IGl0IGFsc28gYWxsb3dzIGZvciA2NC1iaXQKK3ZhbHVlcyBhbmQgcG9pbnRlcnMgdG8gYmUgcGFzc2VkLjwvcGFyYT4KKworICAgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBkdWUgdG8gdGhlIGZsZXhpYmlsaXR5IG9mCitjb250cm9scyBpdCBpcyBuZWNlc3NhcnkgdG8gY2hlY2sgd2hldGhlciB0aGUgY29udHJvbCB5b3Ugd2FudCB0byBzZXQKK2FjdHVhbGx5IGlzIHN1cHBvcnRlZCBpbiB0aGUgZHJpdmVyIGFuZCB3aGF0IHRoZSB2YWxpZCByYW5nZSBvZiB2YWx1ZXMKK2lzLiBTbyB1c2UgdGhlICZWSURJT0MtUVVFUllDVFJMOyBhbmQgJlZJRElPQy1RVUVSWU1FTlU7IGlvY3RscyB0bworY2hlY2sgdGhpcy4gQWxzbyBub3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIG9mIHRoZSBtZW51CitpbmRpY2VzIGluIGEgY29udHJvbCBvZiB0eXBlIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9NRU5VPC9jb25zdGFudD4KK21heSBub3QgYmUgc3VwcG9ydGVkICg8Y29uc3RhbnQ+VklESU9DX1FVRVJZTUVOVTwvY29uc3RhbnQ+IHdpbGwKK3JldHVybiBhbiBlcnJvcikuIEEgZ29vZCBleGFtcGxlIGlzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBNUEVHIGF1ZGlvCitiaXRyYXRlcy4gU29tZSBkcml2ZXJzIG9ubHkgc3VwcG9ydCBvbmUgb3IgdHdvIGJpdHJhdGVzLCBvdGhlcnMKK3N1cHBvcnQgYSB3aWRlciByYW5nZS48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+RW51bWVyYXRpbmcgRXh0ZW5kZWQgQ29udHJvbHM8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGUgcmVjb21tZW5kZWQgd2F5IHRvIGVudW1lcmF0ZSBvdmVyIHRoZSBleHRlbmRlZAorY29udHJvbHMgaXMgYnkgdXNpbmcgJlZJRElPQy1RVUVSWUNUUkw7IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCis8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMPC9jb25zdGFudD4gZmxhZzo8L3BhcmE+CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisJPHByb2dyYW1saXN0aW5nPgorJnY0bDItcXVlcnljdHJsOyBxY3RybDsKKworcWN0cmwuaWQgPSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkw7Cit3aGlsZSAoMCA9PSBpb2N0bCAoZmQsICZWSURJT0MtUVVFUllDVFJMOywgJmFtcDtxY3RybCkpIHsKKwkvKiAuLi4gKi8KKwlxY3RybC5pZCB8PSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkw7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIDxwYXJhPlRoZSBpbml0aWFsIGNvbnRyb2wgSUQgaXMgc2V0IHRvIDAgT1JlZCB3aXRoIHRoZQorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDwvY29uc3RhbnQ+IGZsYWcuIFRoZQorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiBpb2N0bCB3aWxsIHJldHVybiB0aGUgZmlyc3QKK2NvbnRyb2wgd2l0aCBhIGhpZ2hlciBJRCB0aGFuIHRoZSBzcGVjaWZpZWQgb25lLiBXaGVuIG5vIHN1Y2ggY29udHJvbHMKK2FyZSBmb3VuZCBhbiBlcnJvciBpcyByZXR1cm5lZC48L3BhcmE+CisKKyAgICAgIDxwYXJhPklmIHlvdSB3YW50IHRvIGdldCBhbGwgY29udHJvbHMgd2l0aGluIGEgc3BlY2lmaWMgY29udHJvbAorY2xhc3MsIHRoZW4geW91IGNhbiBzZXQgdGhlIGluaXRpYWwKKzxzdHJ1Y3RmaWVsZD5xY3RybC5pZDwvc3RydWN0ZmllbGQ+IHZhbHVlIHRvIHRoZSBjb250cm9sIGNsYXNzIGFuZCBhZGQKK2FuIGV4dHJhIGNoZWNrIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCB3aGVuIGEgY29udHJvbCBvZiBhbm90aGVyCitjb250cm9sIGNsYXNzIGlzIGZvdW5kOjwvcGFyYT4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKwk8cHJvZ3JhbWxpc3Rpbmc+CitxY3RybC5pZCA9IFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMOword2hpbGUgKDAgPT0gaW9jdGwgKGZkLCAmVklESU9DLVFVRVJZQ1RSTDssICZhbXA7cWN0cmwpKSB7CisJaWYgKFY0TDJfQ1RSTF9JRDJDTEFTUyAocWN0cmwuaWQpICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQorCQlicmVhazsKKwkJLyogLi4uICovCisJCXFjdHJsLmlkIHw9IFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDsKKwl9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIDxwYXJhPlRoZSAzMi1iaXQgPHN0cnVjdGZpZWxkPnFjdHJsLmlkPC9zdHJ1Y3RmaWVsZD4gdmFsdWUgaXMKK3N1YmRpdmlkZWQgaW50byB0aHJlZSBiaXQgcmFuZ2VzOiB0aGUgdG9wIDQgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yCitmbGFncyAoJmVnOyA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMPC9jb25zdGFudD4pIGFuZCBhcmUgbm90CithY3R1YWxseSBwYXJ0IG9mIHRoZSBJRC4gVGhlIHJlbWFpbmluZyAyOCBiaXRzIGZvcm0gdGhlIGNvbnRyb2wgSUQsIG9mCit3aGljaCB0aGUgbW9zdCBzaWduaWZpY2FudCAxMiBiaXRzIGRlZmluZSB0aGUgY29udHJvbCBjbGFzcyBhbmQgdGhlCitsZWFzdCBzaWduaWZpY2FudCAxNiBiaXRzIGlkZW50aWZ5IHRoZSBjb250cm9sIHdpdGhpbiB0aGUgY29udHJvbAorY2xhc3MuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVzZSBsYXN0IDE2IGJpdHMgYXJlIGFsd2F5cyBub24temVybworZm9yIGNvbnRyb2xzLiBUaGUgcmFuZ2Ugb2YgMHgxMDAwIGFuZCB1cCBhcmUgcmVzZXJ2ZWQgZm9yCitkcml2ZXItc3BlY2lmaWMgY29udHJvbHMuIFRoZSBtYWNybworPGNvbnN0YW50PlY0TDJfQ1RSTF9JRDJDTEFTUyhpZCk8L2NvbnN0YW50PiByZXR1cm5zIHRoZSBjb250cm9sIGNsYXNzCitJRCBiYXNlZCBvbiBhIGNvbnRyb2wgSUQuPC9wYXJhPgorCisgICAgICA8cGFyYT5JZiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5kZWQgY29udHJvbHMsIHRoZW4KKzxjb25zdGFudD5WSURJT0NfUVVFUllDVFJMPC9jb25zdGFudD4gd2lsbCBmYWlsIHdoZW4gdXNlZCBpbgorY29tYmluYXRpb24gd2l0aCA8Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMPC9jb25zdGFudD4uIEluCit0aGF0IGNhc2UgdGhlIG9sZCBtZXRob2Qgb2YgZW51bWVyYXRpbmcgY29udHJvbCBzaG91bGQgYmUgdXNlZCAoc2VlCisxLjgpLiBCdXQgaWYgaXQgaXMgc3VwcG9ydGVkLCB0aGVuIGl0IGlzIGd1YXJhbnRlZWQgdG8gZW51bWVyYXRlIG92ZXIKK2FsbCBjb250cm9scywgaW5jbHVkaW5nIGRyaXZlci1wcml2YXRlIGNvbnRyb2xzLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5DcmVhdGluZyBDb250cm9sIFBhbmVsczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBjb250cm9sIHBhbmVscyBmb3IgYSBncmFwaGljYWwKK3VzZXIgaW50ZXJmYWNlIHdoZXJlIHRoZSB1c2VyIGNhbiBzZWxlY3QgdGhlIHZhcmlvdXMgY29udHJvbHMuCitCYXNpY2FsbHkgeW91IHdpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIGNvbnRyb2xzIHVzaW5nIHRoZSBtZXRob2QKK2Rlc2NyaWJlZCBhYm92ZS4gRWFjaCBjb250cm9sIGNsYXNzIHN0YXJ0cyB3aXRoIGEgY29udHJvbCBvZiB0eXBlCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUzwvY29uc3RhbnQ+LgorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGlzCitjb250cm9sIGNsYXNzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIHRoZSB0aXRsZSBvZiBhIHRhYiBwYWdlIHdpdGhpbiBhCitjb250cm9sIHBhbmVsLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIGZsYWdzIGZpZWxkIG9mICZ2NGwyLXF1ZXJ5Y3RybDsgYWxzbyBjb250YWlucyBoaW50cyBvbgordGhlIGJlaGF2aW9yIG9mIHRoZSBjb250cm9sLiBTZWUgdGhlICZWSURJT0MtUVVFUllDVFJMOyBkb2N1bWVudGF0aW9uCitmb3IgbW9yZSBkZXRhaWxzLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibXBlZy1jb250cm9scyI+CisgICAgICA8dGl0bGU+TVBFRyBDb250cm9sIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPkJlbG93IGFsbCBjb250cm9scyB3aXRoaW4gdGhlIE1QRUcgY29udHJvbCBjbGFzcyBhcmUKK2Rlc2NyaWJlZC4gRmlyc3QgdGhlIGdlbmVyaWMgY29udHJvbHMsIHRoZW4gY29udHJvbHMgc3BlY2lmaWMgZm9yCitjZXJ0YWluIGhhcmR3YXJlLjwvcGFyYT4KKworICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkdlbmVyaWMgTVBFRyBDb250cm9sczwvdGl0bGU+CisKKwk8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9Im1wZWctY29udHJvbC1pZCI+CisJICA8dGl0bGU+TVBFRyBDb250cm9sIElEczwvdGl0bGU+CisJICA8dGdyb3VwIGNvbHM9IjQiPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjYqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjIqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjYqIiAvPgorCSAgICA8c3BhbnNwZWMgbmFtZXN0PSJjMSIgbmFtZWVuZD0iYzIiIHNwYW5uYW1lPSJpZCIgLz4KKwkgICAgPHNwYW5zcGVjIG5hbWVzdD0iYzIiIG5hbWVlbmQ9ImM0IiBzcGFubmFtZT0iZGVzY3IiIC8+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIiBhbGlnbj0ibGVmdCI+SUQ8L2VudHJ5PgorCQk8ZW50cnkgYWxpZ249ImxlZnQiPlR5cGU8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3cgcm93c2VwPSIxIj48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIiBhbGlnbj0ibGVmdCI+RGVzY3JpcHRpb248L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3RoZWFkPgorCSAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ0xBU1M8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5jbGFzczwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgTVBFRyBjbGFzcworZGVzY3JpcHRvci4gQ2FsbGluZyAmVklESU9DLVFVRVJZQ1RSTDsgZm9yIHRoaXMgY29udHJvbCB3aWxsIHJldHVybiBhCitkZXNjcmlwdGlvbiBvZiB0aGlzIGNvbnRyb2wgY2xhc3MuIFRoaXMgZGVzY3JpcHRpb24gY2FuIGJlIHVzZWQgYXMgdGhlCitjYXB0aW9uIG9mIGEgVGFiIHBhZ2UgaW4gYSBHVUksIGZvciBleGFtcGxlLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctc3RyZWFtLXR5cGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfc3RyZWFtX3R5cGU8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIE1QRUctMSwgLTIgb3IgLTQKK291dHB1dCBzdHJlYW0gdHlwZS4gT25lIGNhbm5vdCBhc3N1bWUgYW55dGhpbmcgaGVyZS4gRWFjaCBoYXJkd2FyZQorTVBFRyBlbmNvZGVyIHRlbmRzIHRvIHN1cHBvcnQgZGlmZmVyZW50IHN1YnNldHMgb2YgdGhlIGF2YWlsYWJsZSBNUEVHCitzdHJlYW0gdHlwZXMuIFRoZSBjdXJyZW50bHkgZGVmaW5lZCBzdHJlYW0gdHlwZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0yIHByb2dyYW0gc3RyZWFtPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgdHJhbnNwb3J0IHN0cmVhbTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1NTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xIHN5c3RlbSBzdHJlYW08L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9EVkQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgRFZELWNvbXBhdGlibGUgc3RyZWFtPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfVkNEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xIFZDRC1jb21wYXRpYmxlIHN0cmVhbTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0Q8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgU1ZDRC1jb21wYXRpYmxlIHN0cmVhbTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlByb2dyYW0gTWFwIFRhYmxlCitQYWNrZXQgSUQgZm9yIHRoZSBNUEVHIHRyYW5zcG9ydCBzdHJlYW0gKGRlZmF1bHQgMTYpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkF1ZGlvIFBhY2tldCBJRCBmb3IKK3RoZSBNUEVHIHRyYW5zcG9ydCBzdHJlYW0gKGRlZmF1bHQgMjU2KTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5WaWRlbyBQYWNrZXQgSUQgZm9yCit0aGUgTVBFRyB0cmFuc3BvcnQgc3RyZWFtIChkZWZhdWx0IDI2MCk8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlBhY2tldCBJRCBmb3IgdGhlCitNUEVHIHRyYW5zcG9ydCBzdHJlYW0gY2FycnlpbmcgUENSIGZpZWxkcyAoZGVmYXVsdCAyNTkpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkF1ZGlvIElEIGZvciBNUEVHCitQRVM8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VmlkZW8gSUQgZm9yIE1QRUcKK1BFUzwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfc3RyZWFtX3ZiaV9mbXQ8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U29tZSBjYXJkcyBjYW4gZW1iZWQKK1ZCSSBkYXRhICgmZWc7IENsb3NlZCBDYXB0aW9uLCBUZWxldGV4dCkgaW50byB0aGUgTVBFRyBzdHJlYW0uIFRoaXMKK2NvbnRyb2wgc2VsZWN0cyB3aGV0aGVyIFZCSSBkYXRhIHNob3VsZCBiZSBlbWJlZGRlZCwgYW5kIGlmIHNvLCB3aGF0CitlbWJlZGRpbmcgbWV0aG9kIHNob3VsZCBiZSB1c2VkLiBUaGUgbGlzdCBvZiBwb3NzaWJsZSBWQkkgZm9ybWF0cworZGVwZW5kcyBvbiB0aGUgZHJpdmVyLiBUaGUgY3VycmVudGx5IGRlZmluZWQgVkJJIGZvcm1hdCB0eXBlcworYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ObyBWQkkgaW4gdGhlIE1QRUcgc3RyZWFtPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUVjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlZCSSBpbiBwcml2YXRlIHBhY2tldHMsIElWVFYgZm9ybWF0IChkb2N1bWVudGVkCitpbiB0aGUga2VybmVsIHNvdXJjZXMgaW4gdGhlIGZpbGUgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUudmJpPC9maWxlbmFtZT4pPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctYXVkaW8tc2FtcGxpbmctZnJlcSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXE8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TVBFRyBBdWRpbyBzYW1wbGluZworZnJlcXVlbmN5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40NC4xIGtIejwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40OCBrSHo8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MzIga0h6PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmciPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfYXVkaW9fZW5jb2Rpbmc8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TVBFRyBBdWRpbyBlbmNvZGluZy4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk1QRUctMS8yIExheWVyIEkgZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xLzIgTGF5ZXIgSUkgZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8zPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0xLzIgTGF5ZXIgSUlJIGVuY29kaW5nPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy0yLzQgQUFDIChBZHZhbmNlZCBBdWRpbyBDb2RpbmcpPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QUMtMyBha2EgQVRTQyBBLzUyIGVuY29kaW5nPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGU8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TVBFRy0xLzIgTGF5ZXIgSSBiaXRyYXRlLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+PC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzY0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjY0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfOTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+OTYga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xMjhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTI4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTYwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjE2MCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE5Mks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xOTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yMjRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjI0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI1NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI4OEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yODgga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMjBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MzIwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzUySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjM1MiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM4NEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4zODQga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80MTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDE2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDQ4SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjQ0OCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1sMi1iaXRyYXRlIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5NUEVHLTEvMiBMYXllciBJSSBiaXRyYXRlLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDgga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV81Nks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT41NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzY0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjY0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfODBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+ODAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV85Nks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT45NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzExMks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xMTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMjhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTI4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTYwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjE2MCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE5Mks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xOTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjI0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI1NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMyMEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4zMjAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Mzg0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWF1ZGlvLWwzLWJpdHJhdGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19sM19iaXRyYXRlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1QRUctMS8yIExheWVyIElJSSBiaXRyYXRlLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80OEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40OCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNjRLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NjQga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV84MEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT44MCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzk2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pjk2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTEySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjExMiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzEyOEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xMjgga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xNjBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTYwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjE5MiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzIyNEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yMjQga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yNTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzIwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyMCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BQUMgYml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1hYzMtYml0cmF0ZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BQy0zIGJpdHJhdGUuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjMyIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjQwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjQ4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjY0IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzgwSzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjgwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pjk2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzExMks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xMTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTI4SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjEyOCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xNjBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MTYwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE5Mks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xOTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjIyNCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjU2IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMyMEs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4zMjAga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjM4NCBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80NDhLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NDQ4IGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzUxMks8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT41MTIga2JpdC9zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTc2SzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjU3NiBrYml0L3M8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NDBLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+NjQwIGtiaXQvczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWF1ZGlvLW1vZGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19NT0RFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19tb2RlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1QRUcgQXVkaW8gbW9kZS4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5TdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkpvaW50IFN0ZXJlbzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX01PREVfRFVBTDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkJpbGluZ3VhbDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX01PREVfTU9OTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk1vbm88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbiI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5Kb2ludCBTdGVyZW8KK2F1ZGlvIG1vZGUgZXh0ZW5zaW9uLiBJbiBMYXllciBJIGFuZCBJSSB0aGV5IGluZGljYXRlIHdoaWNoIHN1YmJhbmRzCithcmUgaW4gaW50ZW5zaXR5IHN0ZXJlby4gQWxsIG90aGVyIHN1YmJhbmRzIGFyZSBjb2RlZCBpbiBzdGVyZW8uIExheWVyCitJSUkgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZC4gUG9zc2libGUgdmFsdWVzCithcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlN1YmJhbmRzIDQtMzEgaW4gaW50ZW5zaXR5IHN0ZXJlbzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzg8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5TdWJiYW5kcyA4LTMxIGluIGludGVuc2l0eSBzdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xMjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlN1YmJhbmRzIDEyLTMxIGluIGludGVuc2l0eSBzdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlN1YmJhbmRzIDE2LTMxIGluIGludGVuc2l0eSBzdGVyZW88L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1lbXBoYXNpcyI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19lbXBoYXNpczwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BdWRpbyBFbXBoYXNpcy4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfTk9ORTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vbmU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19FTVBIQVNJU181MF9ESVZfMTVfdVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT41MC8xNSBtaWNyb3NlY29uZCBlbXBoYXNpczwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNDSVRUIEouMTc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1hdWRpby1jcmMiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19DUkM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2F1ZGlvX2NyYzwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5DUkMgbWV0aG9kLiBQb3NzaWJsZQordmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19DUkNfTk9ORTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vbmU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTY8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4xNiBiaXQgcGFyaXR5IGNoZWNrPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19BVURJT19NVVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5NdXRlcyB0aGUgYXVkaW8gd2hlbgorY2FwdHVyaW5nLiBUaGlzIGlzIG5vdCBkb25lIGJ5IG11dGluZyBhdWRpbyBoYXJkd2FyZSwgd2hpY2ggY2FuIHN0aWxsCitwcm9kdWNlIGEgc2xpZ2h0IGhpc3MsIGJ1dCBpbiB0aGUgZW5jb2RlciBpdHNlbGYsIGd1YXJhbnRlZWluZyBhIGZpeGVkCithbmQgcmVwcm9kdWNhYmxlIGF1ZGlvIGJpdHN0cmVhbS4gMCA9IHVubXV0ZWQsIDEgPSBtdXRlZC48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLXZpZGVvLWVuY29kaW5nIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1QRUcgVmlkZW8gZW5jb2RpbmcKK21ldGhvZC4gUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTEgVmlkZW8gZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NUEVHLTIgVmlkZW8gZW5jb2Rpbmc8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TVBFRy00IEFWQyAoSC4yNjQpIFZpZGVvIGVuY29kaW5nPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctdmlkZW8tYXNwZWN0Ij4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ192aWRlb19hc3BlY3Q8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VmlkZW8gYXNwZWN0LgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk51bWJlciBvZiBCLUZyYW1lcworKGRlZmF1bHQgMik8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkdPUCBzaXplIChkZWZhdWx0CisxMik8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkdPUCBjbG9zdXJlIChkZWZhdWx0CisxKTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlIDM6MiBwdWxsZG93bgorKGRlZmF1bHQgMCk8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLXZpZGVvLWJpdHJhdGUtbW9kZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfdmlkZW9fYml0cmF0ZV9tb2RlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlZpZGVvIGJpdHJhdGUgbW9kZS4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlZhcmlhYmxlIGJpdHJhdGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q29uc3RhbnQgYml0cmF0ZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VmlkZW8gYml0cmF0ZSBpbiBiaXRzCitwZXIgc2Vjb25kLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlBlYWsgdmlkZW8gYml0cmF0ZSBpbgorYml0cyBwZXIgc2Vjb25kLiBNdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0byB0aGUgYXZlcmFnZSB2aWRlbyBiaXRyYXRlLgorSXQgaXMgaWdub3JlZCBpZiB0aGUgdmlkZW8gYml0cmF0ZSBtb2RlIGlzIHNldCB0byBjb25zdGFudAorYml0cmF0ZS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Rm9yIGV2ZXJ5IGNhcHR1cmVkCitmcmFtZSwgc2tpcCB0aGlzIG1hbnkgc3Vic2VxdWVudCBmcmFtZXMgKGRlZmF1bHQgMCkuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPiJNdXRlcyIgdGhlIHZpZGVvIHRvIGEKK2ZpeGVkIGNvbG9yIHdoZW4gY2FwdHVyaW5nLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZywgdG8gcHJvZHVjZSBhCitmaXhlZCB2aWRlbyBiaXRzdHJlYW0uIDAgPSB1bm11dGVkLCAxID0gbXV0ZWQuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSAibXV0ZSIgY29sb3IKK29mIHRoZSB2aWRlby4gVGhlIHN1cHBsaWVkIDMyLWJpdCBpbnRlZ2VyIGlzIGludGVycHJldGVkIGFzIGZvbGxvd3MgKGJpdAorMCA9IGxlYXN0IHNpZ25pZmljYW50IGJpdCk6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PkJpdCAwOjc8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+ViBjaHJvbWluYW5jZSBpbmZvcm1hdGlvbjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5CaXQgODoxNTwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5VIGNocm9taW5hbmNlIGluZm9ybWF0aW9uPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PkJpdCAxNjoyMzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZIGx1bWluYW5jZSBpbmZvcm1hdGlvbjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5CaXQgMjQ6MzE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TXVzdCBiZSB6ZXJvLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICA8L3Rib2R5PgorCSAgPC90Z3JvdXA+CisJPC90YWJsZT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24+CisJPHRpdGxlPkNYMjM0MXggTVBFRyBDb250cm9sczwvdGl0bGU+CisKKwk8cGFyYT5UaGUgZm9sbG93aW5nIE1QRUcgY2xhc3MgY29udHJvbHMgZGVhbCB3aXRoIE1QRUcKK2VuY29kaW5nIHNldHRpbmdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBDb25leGFudCBDWDIzNDE1IGFuZAorQ1gyMzQxNiBNUEVHIGVuY29kaW5nIGNoaXBzLjwvcGFyYT4KKworCTx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iY3gyMzQxeC1jb250cm9sLWlkIj4KKwkgIDx0aXRsZT5DWDIzNDF4IENvbnRyb2wgSURzPC90aXRsZT4KKwkgIDx0Z3JvdXAgY29scz0iNCI+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iNioiIC8+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImMzIiBjb2x3aWR0aD0iMioiIC8+CisJICAgIDxjb2xzcGVjIGNvbG5hbWU9ImM0IiBjb2x3aWR0aD0iNioiIC8+CisJICAgIDxzcGFuc3BlYyBuYW1lc3Q9ImMxIiBuYW1lZW5kPSJjMiIgc3Bhbm5hbWU9ImlkIiAvPgorCSAgICA8c3BhbnNwZWMgbmFtZXN0PSJjMiIgbmFtZWVuZD0iYzQiIHNwYW5uYW1lPSJkZXNjciIgLz4KKwkgICAgPHRoZWFkPgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiIGFsaWduPSJsZWZ0Ij5JRDwvZW50cnk+CisJCTxlbnRyeSBhbGlnbj0ibGVmdCI+VHlwZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIiBhbGlnbj0ibGVmdCI+RGVzY3JpcHRpb248L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICA8L3RoZWFkPgorCSAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tc3BhdGlhbC1maWx0ZXItbW9kZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIFNwYXRpYWwKK0ZpbHRlciBtb2RlIChkZWZhdWx0IDxjb25zdGFudD5NQU5VQUw8L2NvbnN0YW50PikuIFBvc3NpYmxlIHZhbHVlcworYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9NQU5VQUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DaG9vc2UgdGhlIGZpbHRlciBtYW51YWxseTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2hvb3NlIHRoZSBmaWx0ZXIgYXV0b21hdGljYWxseTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXImbmJzcDsoMC0xNSk8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIHNldHRpbmcgZm9yIHRoZQorU3BhdGlhbCBGaWx0ZXIuIDAgPSBvZmYsIDE1ID0gbWF4aW11bS4gKERlZmF1bHQgaXMgMC4pPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9Imx1bWEtc3BhdGlhbC1maWx0ZXItdHlwZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZWxlY3QgdGhlIGFsZ29yaXRobQordG8gdXNlIGZvciB0aGUgTHVtYSBTcGF0aWFsIEZpbHRlciAoZGVmYXVsdAorPGNvbnN0YW50PjFEX0hPUjwvY29uc3RhbnQ+KS4gUG9zc2libGUgdmFsdWVzOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk9uZS1kaW1lbnNpb25hbCBob3Jpem9udGFsPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk9uZS1kaW1lbnNpb25hbCB2ZXJ0aWNhbDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX0hWX1NFUEFSQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlR3by1kaW1lbnNpb25hbCBzZXBhcmFibGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9TWU1fTk9OX1NFUEFSQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlR3by1kaW1lbnNpb25hbCBzeW1tZXRyaWNhbAorbm9uLXNlcGFyYWJsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0iY2hyb21hLXNwYXRpYWwtZmlsdGVyLXR5cGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNlbGVjdCB0aGUgYWxnb3JpdGhtCitmb3IgdGhlIENocm9tYSBTcGF0aWFsIEZpbHRlciAoZGVmYXVsdCA8Y29uc3RhbnQ+MURfSE9SPC9jb25zdGFudD4pLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk5vIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+T25lLWRpbWVuc2lvbmFsIGhvcml6b250YWw8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXRlbXBvcmFsLWZpbHRlci1tb2RlIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfY3gyMzQxeF92aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBUZW1wb3JhbAorRmlsdGVyIG1vZGUgKGRlZmF1bHQgPGNvbnN0YW50Pk1BTlVBTDwvY29uc3RhbnQ+KS4gUG9zc2libGUgdmFsdWVzCithcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9NQU5VQUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DaG9vc2UgdGhlIGZpbHRlciBtYW51YWxseTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfQVVUTzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNob29zZSB0aGUgZmlsdGVyIGF1dG9tYXRpY2FsbHk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlciZuYnNwOygwLTMxKTwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgc2V0dGluZyBmb3IgdGhlCitUZW1wb3JhbCBGaWx0ZXIuIDAgPSBvZmYsIDMxID0gbWF4aW11bS4gKERlZmF1bHQgaXMgOCBmb3IgZnVsbC1zY2FsZQorY2FwdHVyaW5nIGFuZCAwIGZvciBzY2FsZWQgY2FwdHVyaW5nLik8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tbWVkaWFuLWZpbHRlci10eXBlIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1lZGlhbiBGaWx0ZXIgVHlwZQorKGRlZmF1bHQgPGNvbnN0YW50Pk9GRjwvY29uc3RhbnQ+KS4gUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkY8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ObyBmaWx0ZXI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1I8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5Ib3Jpem9udGFsIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX1ZFUlQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5WZXJ0aWNhbCBmaWx0ZXI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1JfVkVSVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkhvcml6b250YWwgYW5kIHZlcnRpY2FsIGZpbHRlcjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0RJQUc8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5EaWFnb25hbCBmaWx0ZXI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX0JPVFRPTTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXImbmJzcDsoMC0yNTUpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRocmVzaG9sZCBhYm92ZSB3aGljaAordGhlIGx1bWluYW5jZSBtZWRpYW4gZmlsdGVyIGlzIGVuYWJsZWQgKGRlZmF1bHQgMCk8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlciZuYnNwOygwLTI1NSk8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhyZXNob2xkIGJlbG93IHdoaWNoCit0aGUgbHVtaW5hbmNlIG1lZGlhbiBmaWx0ZXIgaXMgZW5hYmxlZCAoZGVmYXVsdCAyNTUpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfQk9UVE9NPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlciZuYnNwOygwLTI1NSk8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhyZXNob2xkIGFib3ZlIHdoaWNoCit0aGUgY2hyb21hIG1lZGlhbiBmaWx0ZXIgaXMgZW5hYmxlZCAoZGVmYXVsdCAwKTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX1RPUDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXImbmJzcDsoMC0yNTUpPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRocmVzaG9sZCBiZWxvdyB3aGljaAordGhlIGNocm9tYSBtZWRpYW4gZmlsdGVyIGlzIGVuYWJsZWQgKGRlZmF1bHQgMjU1KTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBDWDIzNDFYIE1QRUcgZW5jb2RlcgorY2FuIGluc2VydCBvbmUgZW1wdHkgTVBFRy0yIFBFUyBwYWNrZXQgaW50byB0aGUgc3RyZWFtIGJldHdlZW4gZXZlcnkKK2ZvdXIgdmlkZW8gZnJhbWVzLiBUaGUgcGFja2V0IHNpemUgaXMgMjA0OCBieXRlcywgaW5jbHVkaW5nIHRoZQorcGFja2V0X3N0YXJ0X2NvZGVfcHJlZml4IGFuZCBzdHJlYW1faWQgZmllbGRzLiBUaGUgc3RyZWFtX2lkIGlzIDB4QkYKKyhwcml2YXRlIHN0cmVhbSAyKS4gVGhlIHBheWxvYWQgY29uc2lzdHMgb2YgMHgwMCBieXRlcywgdG8gYmUgZmlsbGVkCitpbiBieSB0aGUgYXBwbGljYXRpb24uIDAgPSBkbyBub3QgaW5zZXJ0LCAxID0gaW5zZXJ0IHBhY2tldHMuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90Ym9keT4KKwkgIDwvdGdyb3VwPgorCTwvdGFibGU+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNhbWVyYS1jb250cm9scyI+CisgICAgICA8dGl0bGU+Q2FtZXJhIENvbnRyb2wgUmVmZXJlbmNlPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIENhbWVyYSBjbGFzcyBpbmNsdWRlcyBjb250cm9scyBmb3IgbWVjaGFuaWNhbCAob3IKK2VxdWl2YWxlbnQgZGlnaXRhbCkgZmVhdHVyZXMgb2YgYSBkZXZpY2Ugc3VjaCBhcyBjb250cm9sbGFibGUgbGVuc2VzCitvciBzZW5zb3JzLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iY2FtZXJhLWNvbnRyb2wtaWQiPgorICAgICAgPHRpdGxlPkNhbWVyYSBDb250cm9sIElEczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSI2KiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiBjb2x3aWR0aD0iNioiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzEiIG5hbWVlbmQ9ImMyIiBzcGFubmFtZT0iaWQiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzIiIG5hbWVlbmQ9ImM0IiBzcGFubmFtZT0iZGVzY3IiIC8+CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCIgYWxpZ249ImxlZnQiPklEPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5UeXBlPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3cgcm93c2VwPSIxIj48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIiBhbGlnbj0ibGVmdCI+RGVzY3JpcHRpb248L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9DQU1FUkFfQ0xBU1M8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5jbGFzczwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBDYW1lcmEgY2xhc3MKK2Rlc2NyaXB0b3IuIENhbGxpbmcgJlZJRElPQy1RVUVSWUNUUkw7IGZvciB0aGlzIGNvbnRyb2wgd2lsbCByZXR1cm4gYQorZGVzY3JpcHRpb24gb2YgdGhpcyBjb250cm9sIGNsYXNzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3cgaWQ9InY0bDItZXhwb3N1cmUtYXV0by10eXBlIj4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FVVE88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5lbnVtJm5ic3A7djRsMl9leHBvc3VyZV9hdXRvX3R5cGU8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbmFibGVzIGF1dG9tYXRpYworYWRqdXN0bWVudHMgb2YgdGhlIGV4cG9zdXJlIHRpbWUgYW5kL29yIGlyaXMgYXBlcnR1cmUuIFRoZSBlZmZlY3Qgb2YKK21hbnVhbCBjaGFuZ2VzIG9mIHRoZSBleHBvc3VyZSB0aW1lIG9yIGlyaXMgYXBlcnR1cmUgd2hpbGUgdGhlc2UKK2ZlYXR1cmVzIGFyZSBlbmFibGVkIGlzIHVuZGVmaW5lZCwgZHJpdmVycyBzaG91bGQgaWdub3JlIHN1Y2gKK3JlcXVlc3RzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCSAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCTxyb3c+CisJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VYUE9TVVJFX0FVVE88L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5BdXRvbWF0aWMgZXhwb3N1cmUgdGltZSwgYXV0b21hdGljIGlyaXMKK2FwZXJ0dXJlLjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FWFBPU1VSRV9NQU5VQUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgPGVudHJ5Pk1hbnVhbCBleHBvc3VyZSB0aW1lLCBtYW51YWwgaXJpcy48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRVhQT1NVUkVfU0hVVFRFUl9QUklPUklUWTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICA8ZW50cnk+TWFudWFsIGV4cG9zdXJlIHRpbWUsIGF1dG8gaXJpcy48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRVhQT1NVUkVfQVBFUlRVUkVfUFJJT1JJVFk8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgPGVudHJ5PkF1dG8gZXhwb3N1cmUgdGltZSwgbWFudWFsIGlyaXMuPC9lbnRyeT4KKwkJPC9yb3c+CisJICAgICAgPC90Ym9keT4KKwkgICAgPC9lbnRyeXRibD4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkRldGVybWluZXMgdGhlIGV4cG9zdXJlCit0aW1lIG9mIHRoZSBjYW1lcmEgc2Vuc29yLiBUaGUgZXhwb3N1cmUgdGltZSBpcyBsaW1pdGVkIGJ5IHRoZSBmcmFtZQoraW50ZXJ2YWwuIERyaXZlcnMgc2hvdWxkIGludGVycHJldCB0aGUgdmFsdWVzIGFzIDEwMCAmbWljcm87cyB1bml0cywKK3doZXJlIHRoZSB2YWx1ZSAxIHN0YW5kcyBmb3IgMS8xMDAwMHRoIG9mIGEgc2Vjb25kLCAxMDAwMCBmb3IgMSBzZWNvbmQKK2FuZCAxMDAwMDAgZm9yIDEwIHNlY29uZHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFk8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+V2hlbgorPGNvbnN0YW50PlY0TDJfQ0lEX0VYUE9TVVJFX0FVVE88L2NvbnN0YW50PiBpcyBzZXQgdG8KKzxjb25zdGFudD5BVVRPPC9jb25zdGFudD4gb3IgPGNvbnN0YW50PkFQRVJUVVJFX1BSSU9SSVRZPC9jb25zdGFudD4sCit0aGlzIGNvbnRyb2wgZGV0ZXJtaW5lcyBpZiB0aGUgZGV2aWNlIG1heSBkeW5hbWljYWxseSB2YXJ5IHRoZSBmcmFtZQorcmF0ZS4gQnkgZGVmYXVsdCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgKDApIGFuZCB0aGUgZnJhbWUgcmF0ZSBtdXN0CityZW1haW4gY29uc3RhbnQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1BBTl9SRUxBVElWRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIGNvbnRyb2wgdHVybnMgdGhlCitjYW1lcmEgaG9yaXpvbnRhbGx5IGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBUaGUgdW5pdCBpcyB1bmRlZmluZWQuIEEKK3Bvc2l0aXZlIHZhbHVlIG1vdmVzIHRoZSBjYW1lcmEgdG8gdGhlIHJpZ2h0IChjbG9ja3dpc2Ugd2hlbiB2aWV3ZWQKK2Zyb20gYWJvdmUpLCBhIG5lZ2F0aXZlIHZhbHVlIHRvIHRoZSBsZWZ0LiBBIHZhbHVlIG9mIHplcm8gZG9lcyBub3QKK2NhdXNlIG1vdGlvbi4gVGhpcyBpcyBhIHdyaXRlLW9ubHkgY29udHJvbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9SRUxBVElWRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIGNvbnRyb2wgdHVybnMgdGhlCitjYW1lcmEgdmVydGljYWxseSBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gVGhlIHVuaXQgaXMgdW5kZWZpbmVkLiBBCitwb3NpdGl2ZSB2YWx1ZSBtb3ZlcyB0aGUgY2FtZXJhIHVwLCBhIG5lZ2F0aXZlIHZhbHVlIGRvd24uIEEgdmFsdWUgb2YKK3plcm8gZG9lcyBub3QgY2F1c2UgbW90aW9uLiBUaGlzIGlzIGEgd3JpdGUtb25seSBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9QQU5fUkVTRVQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5idXR0b248L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5XaGVuIHRoaXMgY29udHJvbCBpcyBzZXQsCit0aGUgY2FtZXJhIG1vdmVzIGhvcml6b250YWxseSB0byB0aGUgZGVmYXVsdCBwb3NpdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9SRVNFVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmJ1dHRvbjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPldoZW4gdGhpcyBjb250cm9sIGlzIHNldCwKK3RoZSBjYW1lcmEgbW92ZXMgdmVydGljYWxseSB0byB0aGUgZGVmYXVsdCBwb3NpdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUEFOX0FCU09MVVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoaXMgY29udHJvbAordHVybnMgdGhlIGNhbWVyYSBob3Jpem9udGFsbHkgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4gUG9zaXRpdmUKK3ZhbHVlcyBtb3ZlIHRoZSBjYW1lcmEgdG8gdGhlIHJpZ2h0IChjbG9ja3dpc2Ugd2hlbiB2aWV3ZWQgZnJvbSBhYm92ZSksCituZWdhdGl2ZSB2YWx1ZXMgdG8gdGhlIGxlZnQuIERyaXZlcnMgc2hvdWxkIGludGVycHJldCB0aGUgdmFsdWVzIGFzIGFyYworc2Vjb25kcywgd2l0aCB2YWxpZCB2YWx1ZXMgYmV0d2VlbiAtMTgwICogMzYwMCBhbmQgKzE4MCAqIDM2MDAKK2luY2x1c2l2ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfVElMVF9BQlNPTFVURTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIGNvbnRyb2wKK3R1cm5zIHRoZSBjYW1lcmEgdmVydGljYWxseSB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiBQb3NpdGl2ZSB2YWx1ZXMKK21vdmUgdGhlIGNhbWVyYSB1cCwgbmVnYXRpdmUgdmFsdWVzIGRvd24uIERyaXZlcnMgc2hvdWxkIGludGVycHJldCB0aGUKK3ZhbHVlcyBhcyBhcmMgc2Vjb25kcywgd2l0aCB2YWxpZCB2YWx1ZXMgYmV0d2VlbiAtMTgwICogMzYwMCBhbmQgKzE4MAorKiAzNjAwIGluY2x1c2l2ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRk9DVVNfQUJTT0xVVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhpcyBjb250cm9sIHNldHMgdGhlCitmb2NhbCBwb2ludCBvZiB0aGUgY2FtZXJhIHRvIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uIFRoZSB1bml0IGlzCit1bmRlZmluZWQuIFBvc2l0aXZlIHZhbHVlcyBzZXQgdGhlIGZvY3VzIGNsb3NlciB0byB0aGUgY2FtZXJhLAorbmVnYXRpdmUgdmFsdWVzIHRvd2FyZHMgaW5maW5pdHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoaXMgY29udHJvbCBtb3ZlcyB0aGUKK2ZvY2FsIHBvaW50IG9mIHRoZSBjYW1lcmEgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFRoZSB1bml0IGlzCit1bmRlZmluZWQuIFBvc2l0aXZlIHZhbHVlcyBtb3ZlIHRoZSBmb2N1cyBjbG9zZXIgdG8gdGhlIGNhbWVyYSwKK25lZ2F0aXZlIHZhbHVlcyB0b3dhcmRzIGluZmluaXR5LiBUaGlzIGlzIGEgd3JpdGUtb25seSBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9GT0NVU19BVVRPPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkVuYWJsZXMgYXV0b21hdGljIGZvY3VzCithZGp1c3RtZW50cy4gVGhlIGVmZmVjdCBvZiBtYW51YWwgZm9jdXMgYWRqdXN0bWVudHMgd2hpbGUgdGhpcyBmZWF0dXJlCitpcyBlbmFibGVkIGlzIHVuZGVmaW5lZCwgZHJpdmVycyBzaG91bGQgaWdub3JlIHN1Y2ggcmVxdWVzdHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1pPT01fQUJTT0xVVEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U3BlY2lmeSB0aGUgb2JqZWN0aXZlIGxlbnMKK2ZvY2FsIGxlbmd0aCBhcyBhbiBhYnNvbHV0ZSB2YWx1ZS4gVGhlIHpvb20gdW5pdCBpcyBkcml2ZXItc3BlY2lmaWMgYW5kIGl0cwordmFsdWUgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfWk9PTV9SRUxBVElWRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TcGVjaWZ5IHRoZSBvYmplY3RpdmUgbGVucworZm9jYWwgbGVuZ3RoIHJlbGF0aXZlbHkgdG8gdGhlIGN1cnJlbnQgdmFsdWUuIFBvc2l0aXZlIHZhbHVlcyBtb3ZlIHRoZSB6b29tCitsZW5zIGdyb3VwIHRvd2FyZHMgdGhlIHRlbGVwaG90byBkaXJlY3Rpb24sIG5lZ2F0aXZlIHZhbHVlcyB0b3dhcmRzIHRoZQord2lkZS1hbmdsZSBkaXJlY3Rpb24uIFRoZSB6b29tIHVuaXQgaXMgZHJpdmVyLXNwZWNpZmljLiBUaGlzIGlzIGEgd3JpdGUtb25seSBjb250cm9sLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9aT09NX0NPTlRJTlVPVVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TW92ZSB0aGUgb2JqZWN0aXZlIGxlbnMgZ3JvdXAKK2F0IHRoZSBzcGVjaWZpZWQgc3BlZWQgdW50aWwgaXQgcmVhY2hlcyBwaHlzaWNhbCBkZXZpY2UgbGltaXRzIG9yIHVudGlsIGFuCitleHBsaWNpdCByZXF1ZXN0IHRvIHN0b3AgdGhlIG1vdmVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIG1vdmVzIHRoZSB6b29tIGxlbnMKK2dyb3VwIHRvd2FyZHMgdGhlIHRlbGVwaG90byBkaXJlY3Rpb24uIEEgdmFsdWUgb2YgemVybyBzdG9wcyB0aGUgem9vbSBsZW5zCitncm91cCBtb3ZlbWVudC4gQSBuZWdhdGl2ZSB2YWx1ZSBtb3ZlcyB0aGUgem9vbSBsZW5zIGdyb3VwIHRvd2FyZHMgdGhlCit3aWRlLWFuZ2xlIGRpcmVjdGlvbi4gVGhlIHpvb20gc3BlZWQgdW5pdCBpcyBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKworCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1BSSVZBQ1k8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+UHJldmVudCB2aWRlbyBmcm9tIGJlaW5nIGFjcXVpcmVkCitieSB0aGUgY2FtZXJhLiBXaGVuIHRoaXMgY29udHJvbCBpcyBzZXQgdG8gPGNvbnN0YW50PlRSVUU8L2NvbnN0YW50PiAoMSksIG5vCitpbWFnZSBjYW4gYmUgY2FwdHVyZWQgYnkgdGhlIGNhbWVyYS4gQ29tbW9uIG1lYW5zIHRvIGVuZm9yY2UgcHJpdmFjeSBhcmUKK21lY2hhbmljYWwgb2J0dXJhdGlvbiBvZiB0aGUgc2Vuc29yIGFuZCBmaXJtd2FyZSBpbWFnZSBwcm9jZXNzaW5nLCBidXQgdGhlCitkZXZpY2UgaXMgbm90IHJlc3RyaWN0ZWQgdG8gdGhlc2UgbWV0aG9kcy4gRGV2aWNlcyB0aGF0IGltcGxlbWVudCB0aGUgcHJpdmFjeQorY29udHJvbCBtdXN0IHN1cHBvcnQgcmVhZCBhY2Nlc3MgYW5kIG1heSBzdXBwb3J0IHdyaXRlIGFjY2Vzcy48L2VudHJ5PgorCSAgPC9yb3c+CisKKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlN3aXRjaCB0aGUgYmFuZC1zdG9wIGZpbHRlciBvZiBhCitjYW1lcmEgc2Vuc29yIG9uIG9yIG9mZiwgb3Igc3BlY2lmeSBpdHMgc3RyZW5ndGguIFN1Y2ggYmFuZC1zdG9wIGZpbHRlcnMgY2FuCitiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gZmlsdGVyIG91dCB0aGUgZmx1b3Jlc2NlbnQgbGlnaHQgY29tcG9uZW50LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmbS10eC1jb250cm9scyI+CisgICAgICA8dGl0bGU+Rk0gVHJhbnNtaXR0ZXIgQ29udHJvbCBSZWZlcmVuY2U8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGUgRk0gVHJhbnNtaXR0ZXIgKEZNX1RYKSBjbGFzcyBpbmNsdWRlcyBjb250cm9scyBmb3IgY29tbW9uIGZlYXR1cmVzIG9mCitGTSB0cmFuc21pc3Npb25zIGNhcGFibGUgZGV2aWNlcy4gQ3VycmVudGx5IHRoaXMgY2xhc3MgaW5jbHVkZXMgcGFyYW1ldGVycyBmb3IgYXVkaW8KK2NvbXByZXNzaW9uLCBwaWxvdCB0b25lIGdlbmVyYXRpb24sIGF1ZGlvIGRldmlhdGlvbiBsaW1pdGVyLCBSRFMgdHJhbnNtaXNzaW9uIGFuZAordHVuaW5nIHBvd2VyIGZlYXR1cmVzLjwvcGFyYT4KKworICAgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJmbS10eC1jb250cm9sLWlkIj4KKyAgICAgIDx0aXRsZT5GTV9UWCBDb250cm9sIElEczwvdGl0bGU+CisKKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjYqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIGNvbHdpZHRoPSI2KiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJjMSIgbmFtZWVuZD0iYzIiIHNwYW5uYW1lPSJpZCIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJjMiIgbmFtZWVuZD0iYzQiIHNwYW5uYW1lPSJkZXNjciIgLz4KKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIiBhbGlnbj0ibGVmdCI+SUQ8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlR5cGU8L2VudHJ5PgorCSAgPC9yb3c+PHJvdyByb3dzZXA9IjEiPjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiIGFsaWduPSJsZWZ0Ij5EZXNjcmlwdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0ZNX1RYX0NMQVNTPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Y2xhc3M8L2VudHJ5PgorCSAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgRk1fVFggY2xhc3MKK2Rlc2NyaXB0b3IuIENhbGxpbmcgJlZJRElPQy1RVUVSWUNUUkw7IGZvciB0aGlzIGNvbnRyb2wgd2lsbCByZXR1cm4gYQorZGVzY3JpcHRpb24gb2YgdGhpcyBjb250cm9sIGNsYXNzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyBSRFMgc2lnbmFsIGZyZXF1ZW5jeSBkZXZpYXRpb24gbGV2ZWwgaW4gSHouCitUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUkRTX1RYX1BJPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U2V0cyB0aGUgUkRTIFByb2dyYW1tZSBJZGVudGlmaWNhdGlvbiBmaWVsZAorZm9yIHRyYW5zbWlzc2lvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUkRTX1RYX1BUWTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIFJEUyBQcm9ncmFtbWUgVHlwZSBmaWVsZCBmb3IgdHJhbnNtaXNzaW9uLgorVGhpcyBlbmNvZGVzIHVwIHRvIDMxIHByZS1kZWZpbmVkIHByb2dyYW1tZSB0eXBlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUkRTX1RYX1BTX05BTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIFByb2dyYW1tZSBTZXJ2aWNlIG5hbWUgKFBTX05BTUUpIGZvciB0cmFuc21pc3Npb24uCitJdCBpcyBpbnRlbmRlZCBmb3Igc3RhdGljIGRpc3BsYXkgb24gYSByZWNlaXZlci4gSXQgaXMgdGhlIHByaW1hcnkgYWlkIHRvIGxpc3RlbmVycyBpbiBwcm9ncmFtbWUgc2VydmljZQoraWRlbnRpZmljYXRpb24gYW5kIHNlbGVjdGlvbi4gIEluIEFubmV4IEUgb2YgPHhyZWYgbGlua2VuZD0iZW41MDA2NyIgLz4sIHRoZSBSRFMgc3BlY2lmaWNhdGlvbiwKK3RoZXJlIGlzIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgY29ycmVjdCBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIFByb2dyYW1tZSBTZXJ2aWNlIG5hbWUgc3RyaW5ncy4KK0Fsc28gZnJvbSBSRFMgc3BlY2lmaWNhdGlvbiwgUFMgaXMgdXN1YWxseSBhIHNpbmdsZSBlaWdodCBjaGFyYWN0ZXIgdGV4dC4gSG93ZXZlciwgaXQgaXMgYWxzbyBwb3NzaWJsZQordG8gZmluZCByZWNlaXZlcnMgd2hpY2ggY2FuIHNjcm9sbCBzdHJpbmdzIHNpemVkIGFzIDggeCBOIGNoYXJhY3RlcnMuIFNvLCB0aGlzIGNvbnRyb2wgbXVzdCBiZSBjb25maWd1cmVkCit3aXRoIHN0ZXBzIG9mIDggY2hhcmFjdGVycy4gVGhlIHJlc3VsdCBpcyBpdCBtdXN0IGFsd2F5cyBjb250YWluIGEgc3RyaW5nIHdpdGggc2l6ZSBtdWx0aXBsZSBvZiA4LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U2V0cyB0aGUgUmFkaW8gVGV4dCBpbmZvIGZvciB0cmFuc21pc3Npb24uIEl0IGlzIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZgord2hhdCBpcyBiZWluZyBicm9hZGNhc3RlZC4gUkRTIFJhZGlvIFRleHQgY2FuIGJlIGFwcGxpZWQgd2hlbiBicm9hZGNhc3RlciB3aXNoZXMgdG8gdHJhbnNtaXQgbG9uZ2VyIFBTIG5hbWVzLAorcHJvZ3JhbW1lLXJlbGF0ZWQgaW5mb3JtYXRpb24gb3IgYW55IG90aGVyIHRleHQuIEluIHRoZXNlIGNhc2VzLCBSYWRpb1RleHQgc2hvdWxkIGJlIHVzZWQgaW4gYWRkaXRpb24gdG8KKzxjb25zdGFudD5WNEwyX0NJRF9SRFNfVFhfUFNfTkFNRTwvY29uc3RhbnQ+LiBUaGUgZW5jb2RpbmcgZm9yIFJhZGlvIFRleHQgc3RyaW5ncyBpcyBhbHNvIGZ1bGx5IGRlc2NyaWJlZAoraW4gQW5uZXggRSBvZiA8eHJlZiBsaW5rZW5kPSJlbjUwMDY3IiAvPi4gVGhlIGxlbmd0aCBvZiBSYWRpbyBUZXh0IHN0cmluZ3MgZGVwZW5kcyBvbiB3aGljaCBSRFMgQmxvY2sgaXMgYmVpbmcKK3VzZWQgdG8gdHJhbnNtaXQgaXQsIGVpdGhlciAzMiAoMkEgYmxvY2spIG9yIDY0ICgyQiBibG9jaykuICBIb3dldmVyLCBpdCBpcyBhbHNvIHBvc3NpYmxlCit0byBmaW5kIHJlY2VpdmVycyB3aGljaCBjYW4gc2Nyb2xsIHN0cmluZ3Mgc2l6ZWQgYXMgMzIgeCBOIG9yIDY0IHggTiBjaGFyYWN0ZXJzLiBTbywgdGhpcyBjb250cm9sIG11c3QgYmUgY29uZmlndXJlZAord2l0aCBzdGVwcyBvZiAzMiBvciA2NCBjaGFyYWN0ZXJzLiBUaGUgcmVzdWx0IGlzIGl0IG11c3QgYWx3YXlzIGNvbnRhaW4gYSBzdHJpbmcgd2l0aCBzaXplIG11bHRpcGxlIG9mIDMyIG9yIDY0LiA8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXVkaW8gZGV2aWF0aW9uIGxpbWl0ZXIgZmVhdHVyZS4KK1RoZSBsaW1pdGVyIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byBtYXhpbWl6ZSB0aGUgYXVkaW8gdm9sdW1lLCBtaW5pbWl6ZSByZWNlaXZlci1nZW5lcmF0ZWQKK2Rpc3RvcnRpb24gYW5kIHByZXZlbnQgb3Zlcm1vZHVsYXRpb24uCis8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fTElNSVRFUl9SRUxFQVNFX1RJTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBhdWRpbyBkZXZpYXRpb24gbGltaXRlciBmZWF0dXJlIHJlbGVhc2UgdGltZS4KK1VuaXQgaXMgaW4gdXNlY29uZHMuIFN0ZXAgYW5kIHJhbmdlIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0xJTUlURVJfREVWSUFUSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyBhdWRpbyBmcmVxdWVuY3kgZGV2aWF0aW9uIGxldmVsIGluIEh6LgorVGhlIHJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhdWRpbyBjb21wcmVzc2lvbiBmZWF0dXJlLgorVGhpcyBmZWF0dXJlIGFtcGxpZmllcyBzaWduYWxzIGJlbG93IHRoZSB0aHJlc2hvbGQgYnkgYSBmaXhlZCBnYWluIGFuZCBjb21wcmVzc2VzIGF1ZGlvCitzaWduYWxzIGFib3ZlIHRoZSB0aHJlc2hvbGQgYnkgdGhlIHJhdGlvIG9mIFRocmVzaG9sZC8oR2FpbiArIFRocmVzaG9sZCkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU48L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBnYWluIGZvciBhdWRpbyBjb21wcmVzc2lvbiBmZWF0dXJlLiBJdCBpcworYSBkQiB2YWx1ZS4gVGhlIHJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlNldHMgdGhlIHRocmVzaG9sZCBsZXZlbCBmb3IgYXVkaW8gY29tcHJlc3Npb24gZnJlYXR1cmUuCitJdCBpcyBhIGRCIHZhbHVlLiBUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBhdHRhY2sgdGltZSBmb3IgYXVkaW8gY29tcHJlc3Npb24gZmVhdHVyZS4KK0l0IGlzIGEgdXNlY29uZHMgdmFsdWUuIFRoZSByYW5nZSBhbmQgc3RlcCBhcmUgZHJpdmVyLXNwZWNpZmljLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSByZWxlYXNlIHRpbWUgZm9yIGF1ZGlvIGNvbXByZXNzaW9uIGZlYXR1cmUuCitJdCBpcyBhIHVzZWNvbmRzIHZhbHVlLiBUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcGlsb3QgdG9uZSBnZW5lcmF0aW9uIGZlYXR1cmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1BJTE9UX1RPTkVfREVWSUFUSU9OPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyBwaWxvdCB0b25lIGZyZXF1ZW5jeSBkZXZpYXRpb24gbGV2ZWwuIFVuaXQgaXMKK2luIEh6LiBUaGUgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1k8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5Db25maWd1cmVzIHBpbG90IHRvbmUgZnJlcXVlbmN5IHZhbHVlLiBVbml0IGlzCitpbiBIei4gVGhlIHJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0idjRsMi1wcmVlbXBoYXNpcyI+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+Q29uZmlndXJlcyB0aGUgcHJlLWVtcGhhc2lzIHZhbHVlIGZvciBicm9hZGNhc3RpbmcuCitBIHByZS1lbXBoYXNpcyBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgYnJvYWRjYXN0IHRvIGFjY2VudHVhdGUgdGhlIGhpZ2ggYXVkaW8gZnJlcXVlbmNpZXMuCitEZXBlbmRpbmcgb24gdGhlIHJlZ2lvbiwgYSB0aW1lIGNvbnN0YW50IG9mIGVpdGhlciA1MCBvciA3NSB1c2Vjb25kcyBpcyB1c2VkLiBUaGUgZW51bSZuYnNwO3Y0bDJfcHJlZW1waGFzaXMKK2RlZmluZXMgcG9zc2libGUgdmFsdWVzIGZvciBwcmUtZW1waGFzaXMuIEhlcmUgdGhleSBhcmU6PC9lbnRyeT4KKwk8L3Jvdz48cm93PgorCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ObyBwcmUtZW1waGFzaXMgaXMgYXBwbGllZC48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJFRU1QSEFTSVNfNTBfdVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5BIHByZS1lbXBoYXNpcyBvZiA1MCB1UyBpcyB1c2VkLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QUkVFTVBIQVNJU183NV91UzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkEgcHJlLWVtcGhhc2lzIG9mIDc1IHVTIGlzIHVzZWQuPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisKKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5TZXRzIHRoZSBvdXRwdXQgcG93ZXIgbGV2ZWwgZm9yIHNpZ25hbCB0cmFuc21pc3Npb24uCitVbml0IGlzIGluIGRCdVYuIFJhbmdlIGFuZCBzdGVwIGFyZSBkcml2ZXItc3BlY2lmaWMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGlzIHNlbGVjdHMgdGhlIHZhbHVlIG9mIGFudGVubmEgdHVuaW5nIGNhcGFjaXRvcgorbWFudWFsbHkgb3IgYXV0b21hdGljYWxseSBpZiBzZXQgdG8gemVyby4gVW5pdCwgcmFuZ2UgYW5kIHN0ZXAgYXJlIGRyaXZlci1zcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICAgIDwvdGFibGU+CisKKzxwYXJhPkZvciBtb3JlIGRldGFpbHMgYWJvdXQgUkRTIHNwZWNpZmljYXRpb24sIHJlZmVyIHRvCis8eHJlZiBsaW5rZW5kPSJlbjUwMDY3IiAvPiBkb2N1bWVudCwgZnJvbSBDRU5FTEVDLjwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJjb21tb24uc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY3JvcC5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOWU3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY3JvcC5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZmI4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWNhcHR1cmUueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtY2FwdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4MDdlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWNhcHR1cmUueG1sCkBAIC0wLDAgKzEsMTE1IEBACisgIDx0aXRsZT5WaWRlbyBDYXB0dXJlIEludGVyZmFjZTwvdGl0bGU+CisKKyAgPHBhcmE+VmlkZW8gY2FwdHVyZSBkZXZpY2VzIHNhbXBsZSBhbiBhbmFsb2cgdmlkZW8gc2lnbmFsIGFuZCBzdG9yZQordGhlIGRpZ2l0aXplZCBpbWFnZXMgaW4gbWVtb3J5LiBUb2RheSBuZWFybHkgYWxsIGRldmljZXMgY2FuIGNhcHR1cmUKK2F0IGZ1bGwgMjUgb3IgMzAgZnJhbWVzL3NlY29uZC4gV2l0aCB0aGlzIGludGVyZmFjZSBhcHBsaWNhdGlvbnMgY2FuCitjb250cm9sIHRoZSBjYXB0dXJlIHByb2Nlc3MgYW5kIG1vdmUgaW1hZ2VzIGZyb20gdGhlIGRyaXZlciBpbnRvIHVzZXIKK3NwYWNlLjwvcGFyYT4KKworICA8cGFyYT5Db252ZW50aW9uYWxseSBWNEwyIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyBhcmUgYWNjZXNzZWQgdGhyb3VnaAorY2hhcmFjdGVyIGRldmljZSBzcGVjaWFsIGZpbGVzIG5hbWVkIDxmaWxlbmFtZT4vZGV2L3ZpZGVvPC9maWxlbmFtZT4KK2FuZCA8ZmlsZW5hbWU+L2Rldi92aWRlbzA8L2ZpbGVuYW1lPiB0bworPGZpbGVuYW1lPi9kZXYvdmlkZW82MzwvZmlsZW5hbWU+IHdpdGggbWFqb3IgbnVtYmVyIDgxIGFuZCBtaW5vcgorbnVtYmVycyAwIHRvIDYzLiA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IGlzIHR5cGljYWxseSBhCitzeW1ib2xpYyBsaW5rIHRvIHRoZSBwcmVmZXJyZWQgdmlkZW8gZGV2aWNlLiBOb3RlIHRoZSBzYW1lIGRldmljZQorZmlsZXMgYXJlIHVzZWQgZm9yIHZpZGVvIG91dHB1dCBkZXZpY2VzLjwvcGFyYT4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgIDxwYXJhPkRldmljZXMgc3VwcG9ydGluZyB0aGUgdmlkZW8gY2FwdHVyZSBpbnRlcmZhY2Ugc2V0IHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIEFzIHNlY29uZGFyeSBkZXZpY2UgZnVuY3Rpb25zCit0aGV5IG1heSBhbHNvIHN1cHBvcnQgdGhlIDxsaW5rIGxpbmtlbmQ9Im92ZXJsYXkiPnZpZGVvIG92ZXJsYXk8L2xpbms+CisoPGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50PikgYW5kIHRoZSA8bGluaworbGlua2VuZD0icmF3LXZiaSI+cmF3IFZCSSBjYXB0dXJlPC9saW5rPgorKDxjb25zdGFudD5WNEwyX0NBUF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+KSBpbnRlcmZhY2UuIEF0IGxlYXN0IG9uZSBvZgordGhlIHJlYWQvd3JpdGUgb3Igc3RyZWFtaW5nIEkvTyBtZXRob2RzIG11c3QgYmUgc3VwcG9ydGVkLiBUdW5lcnMgYW5kCithdWRpbyBpbnB1dHMgYXJlIG9wdGlvbmFsLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5TdXBwbGVtZW50YWwgRnVuY3Rpb25zPC90aXRsZT4KKworICAgIDxwYXJhPlZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzaGFsbCBzdXBwb3J0IDxsaW5rCitsaW5rZW5kPSJhdWRpbyI+YXVkaW8gaW5wdXQ8L2xpbms+LCA8bGluaworbGlua2VuZD0idHVuZXIiPnR1bmVyPC9saW5rPiwgPGxpbmsgbGlua2VuZD0iY29udHJvbCI+Y29udHJvbHM8L2xpbms+LAorPGxpbmsgbGlua2VuZD0iY3JvcCI+Y3JvcHBpbmcgYW5kIHNjYWxpbmc8L2xpbms+IGFuZCA8bGluaworbGlua2VuZD0ic3RyZWFtaW5nLXBhciI+c3RyZWFtaW5nIHBhcmFtZXRlcjwvbGluaz4gaW9jdGxzIGFzIG5lZWRlZC4KK1RoZSA8bGluayBsaW5rZW5kPSJ2aWRlbyI+dmlkZW8gaW5wdXQ8L2xpbms+IGFuZCA8bGluaworbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgbXVzdCBiZSBzdXBwb3J0ZWQgYnkKK2FsbCB2aWRlbyBjYXB0dXJlIGRldmljZXMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPkltYWdlIEZvcm1hdCBOZWdvdGlhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGUgcmVzdWx0IG9mIGEgY2FwdHVyZSBvcGVyYXRpb24gaXMgZGV0ZXJtaW5lZCBieQorY3JvcHBpbmcgYW5kIGltYWdlIGZvcm1hdCBwYXJhbWV0ZXJzLiBUaGUgZm9ybWVyIHNlbGVjdCBhbiBhcmVhIG9mIHRoZQordmlkZW8gcGljdHVyZSB0byBjYXB0dXJlLCB0aGUgbGF0dGVyIGhvdyBpbWFnZXMgYXJlIHN0b3JlZCBpbiBtZW1vcnksCismaWU7IGluIFJHQiBvciBZVVYgZm9ybWF0LCB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIHBpeGVsIG9yIHdpZHRoIGFuZAoraGVpZ2h0LiBUb2dldGhlciB0aGV5IGFsc28gZGVmaW5lIGhvdyBpbWFnZXMgYXJlIHNjYWxlZCBpbiB0aGUKK3Byb2Nlc3MuPC9wYXJhPgorCisgICAgPHBhcmE+QXMgdXN1YWwgdGhlc2UgcGFyYW1ldGVycyBhcmUgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IHJlc2V0CithdCAmZnVuYy1vcGVuOyB0aW1lIHRvIHBlcm1pdCBVbml4IHRvb2wgY2hhaW5zLCBwcm9ncmFtbWluZyBhIGRldmljZQorYW5kIHRoZW4gcmVhZGluZyBmcm9tIGl0IGFzIGlmIGl0IHdhcyBhIHBsYWluIGZpbGUuIFdlbGwgd3JpdHRlbiBWNEwyCithcHBsaWNhdGlvbnMgZW5zdXJlIHRoZXkgcmVhbGx5IGdldCB3aGF0IHRoZXkgd2FudCwgaW5jbHVkaW5nIGNyb3BwaW5nCithbmQgc2NhbGluZy48L3BhcmE+CisKKyAgICA8cGFyYT5Dcm9wcGluZyBpbml0aWFsaXphdGlvbiBhdCBtaW5pbXVtIHJlcXVpcmVzIHRvIHJlc2V0IHRoZQorcGFyYW1ldGVycyB0byBkZWZhdWx0cy4gQW4gZXhhbXBsZSBpcyBnaXZlbiBpbiA8eHJlZgorbGlua2VuZD0iY3JvcCIgLz4uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgaW1hZ2UgZm9ybWF0IGFwcGxpY2F0aW9ucyBzZXQgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgJnY0bDItZm9ybWF0OyB0bworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+IGFuZCBjYWxsIHRoZQorJlZJRElPQy1HLUZNVDsgaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbAordGhlICZ2NGwyLXBpeC1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD5waXg8L3N0cnVjdGZpZWxkPiBtZW1iZXIgb2YgdGhlCis8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gdW5pb24uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcmVxdWVzdCBkaWZmZXJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLWZvcm1hdDsgYXMgYWJvdmUgYW5kCitpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgdGhlICZ2NGwyLXBpeC1mb3JtYXQ7Cis8c3RydWN0ZmllbGQ+dmJpPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLCBvciBiZXR0ZXIganVzdCBtb2RpZnkgdGhlCityZXN1bHRzIG9mIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwgYW5kIGNhbGwgdGhlCismVklESU9DLVMtRk1UOyBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyBtYXkKK2FkanVzdCB0aGUgcGFyYW1ldGVycyBhbmQgZmluYWxseSByZXR1cm4gdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy48L3BhcmE+CisKKyAgICA8cGFyYT5MaWtlIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiB0aGUKKyZWSURJT0MtVFJZLUZNVDsgaW9jdGwgY2FuIGJlIHVzZWQgdG8gbGVhcm4gYWJvdXQgaGFyZHdhcmUgbGltaXRhdGlvbnMKK3dpdGhvdXQgZGlzYWJsaW5nIEkvTyBvciBwb3NzaWJseSB0aW1lIGNvbnN1bWluZyBoYXJkd2FyZQorcHJlcGFyYXRpb25zLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBjb250ZW50cyBvZiAmdjRsMi1waXgtZm9ybWF0OyBhcmUgZGlzY3Vzc2VkIGluIDx4cmVmCitsaW5rZW5kPSJwaXhmbXQiIC8+LiBTZWUgYWxzbyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUKKzxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwgPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+CithbmQgPGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD4gaW9jdGxzIGZvciBkZXRhaWxzLiBWaWRlbworY2FwdHVyZSBkZXZpY2VzIG11c3QgaW1wbGVtZW50IGJvdGggdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwsIGV2ZW4gaWYKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBpZ25vcmVzIGFsbCByZXF1ZXN0cyBhbmQgYWx3YXlzCityZXR1cm5zIGRlZmF1bHQgcGFyYW1ldGVycyBhcyA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy4KKzxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlzIG9wdGlvbmFsLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5SZWFkaW5nIEltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT5BIHZpZGVvIGNhcHR1cmUgZGV2aWNlIG1heSBzdXBwb3J0IHRoZSA8bGluaworbGlua2VuZD0icnciPnJlYWQoKSBmdW5jdGlvbjwvbGluaz4gYW5kL29yIHN0cmVhbWluZyAoPGxpbmsKK2xpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBvciA8bGluaworbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy4gU2VlIDx4cmVmCitsaW5rZW5kPSJpbyIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1jb2RlYy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1jb2RlYy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxNTZkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWNvZGVjLnhtbApAQCAtMCwwICsxLDI2IEBACisgIDx0aXRsZT5Db2RlYyBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxub3RlPgorICAgIDx0aXRsZT5TdXNwZW5kZWQ8L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBpbnRlcmZhY2UgaGFzIGJlZW4gYmUgc3VzcGVuZGVkIGZyb20gdGhlIFY0TDIgQVBJCitpbXBsZW1lbnRlZCBpbiBMaW51eCAyLjYgdW50aWwgd2UgaGF2ZSBtb3JlIGV4cGVyaWVuY2Ugd2l0aCBjb2RlYworZGV2aWNlIGludGVyZmFjZXMuPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+QSBWNEwyIGNvZGVjIGNhbiBjb21wcmVzcywgZGVjb21wcmVzcywgdHJhbnNmb3JtLCBvciBvdGhlcndpc2UKK2NvbnZlcnQgdmlkZW8gZGF0YSBmcm9tIG9uZSBmb3JtYXQgaW50byBhbm90aGVyIGZvcm1hdCwgaW4gbWVtb3J5LgorQXBwbGljYXRpb25zIHNlbmQgZGF0YSB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIGRyaXZlciB0aHJvdWdoIGEKKyZmdW5jLXdyaXRlOyBjYWxsLCBhbmQgcmVjZWl2ZSB0aGUgY29udmVydGVkIGRhdGEgdGhyb3VnaCBhCismZnVuYy1yZWFkOyBjYWxsLiBGb3IgZWZmaWNpZW5jeSBhIGRyaXZlciBtYXkgYWxzbyBzdXBwb3J0IHN0cmVhbWluZworSS9PLjwvcGFyYT4KKworICA8cGFyYT5bdG8gZG9dPC9wYXJhPgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtZWZmZWN0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWVmZmVjdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyNDNiZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWVmZmVjdC54bWwKQEAgLTAsMCArMSwyNSBAQAorICA8dGl0bGU+RWZmZWN0IERldmljZXMgSW50ZXJmYWNlPC90aXRsZT4KKworICA8bm90ZT4KKyAgICA8dGl0bGU+U3VzcGVuZGVkPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaW50ZXJmYWNlIGhhcyBiZWVuIGJlIHN1c3BlbmRlZCBmcm9tIHRoZSBWNEwyIEFQSQoraW1wbGVtZW50ZWQgaW4gTGludXggMi42IHVudGlsIHdlIGhhdmUgbW9yZSBleHBlcmllbmNlIHdpdGggZWZmZWN0CitkZXZpY2UgaW50ZXJmYWNlcy48L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT5BIFY0TDIgdmlkZW8gZWZmZWN0IGRldmljZSBjYW4gZG8gaW1hZ2UgZWZmZWN0cywgZmlsdGVyaW5nLCBvcgorY29tYmluZSB0d28gb3IgbW9yZSBpbWFnZXMgb3IgaW1hZ2Ugc3RyZWFtcy4gRm9yIGV4YW1wbGUgdmlkZW8KK3RyYW5zaXRpb25zIG9yIHdpcGVzLiBBcHBsaWNhdGlvbnMgc2VuZCBkYXRhIHRvIGJlIHByb2Nlc3NlZCBhbmQKK3JlY2VpdmUgdGhlIHJlc3VsdCBkYXRhIGVpdGhlciB3aXRoICZmdW5jLXJlYWQ7IGFuZCAmZnVuYy13cml0ZTsKK2Z1bmN0aW9ucywgb3IgdGhyb3VnaCB0aGUgc3RyZWFtaW5nIEkvTyBtZWNoYW5pc20uPC9wYXJhPgorCisgIDxwYXJhPlt0byBkb108L3BhcmE+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vc2QueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtb3NkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWE2OGEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtb3NkLnhtbApAQCAtMCwwICsxLDE2NCBAQAorICA8dGl0bGU+VmlkZW8gT3V0cHV0IE92ZXJsYXkgSW50ZXJmYWNlPC90aXRsZT4KKyAgPHN1YnRpdGxlPkFsc28ga25vd24gYXMgT24tU2NyZWVuIERpc3BsYXkgKE9TRCk8L3N1YnRpdGxlPgorCisgIDxub3RlPgorICAgIDx0aXRsZT5FeHBlcmltZW50YWw8L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBpcyBhbiA8bGluayBsaW5rZW5kPSJleHBlcmltZW50YWwiPmV4cGVyaW1lbnRhbDwvbGluaz4KK2ludGVyZmFjZSBhbmQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLjwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPlNvbWUgdmlkZW8gb3V0cHV0IGRldmljZXMgY2FuIG92ZXJsYXkgYSBmcmFtZWJ1ZmZlciBpbWFnZSBvbnRvCit0aGUgb3V0Z29pbmcgdmlkZW8gc2lnbmFsLiBBcHBsaWNhdGlvbnMgY2FuIHNldCB1cCBzdWNoIGFuIG92ZXJsYXkKK3VzaW5nIHRoaXMgaW50ZXJmYWNlLCB3aGljaCBib3Jyb3dzIHN0cnVjdHVyZXMgYW5kIGlvY3RscyBvZiB0aGUgPGxpbmsKK2xpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IGludGVyZmFjZS48L3BhcmE+CisKKyAgPHBhcmE+VGhlIE9TRCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHNhbWUgY2hhcmFjdGVyCitzcGVjaWFsIGZpbGUgYXMgdGhlIDxsaW5rIGxpbmtlbmQ9ImNhcHR1cmUiPlZpZGVvIE91dHB1dDwvbGluaz4gZnVuY3Rpb24uCitOb3RlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG9mIHN1Y2ggYSA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+IGRldmljZQoraXMgdmlkZW8gY2FwdHVyaW5nIG9yIG91dHB1dC4gVGhlIE9TRCBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlcgorY2FsbGluZyB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSA8d29yZGFzd29yZD5WaWRlbyBPdXRwdXQKK092ZXJsYXk8L3dvcmRhc3dvcmQ+IGludGVyZmFjZSBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1VUUFVUX09WRVJMQVk8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPkZyYW1lYnVmZmVyPC90aXRsZT4KKworICAgIDxwYXJhPkNvbnRyYXJ5IHRvIHRoZSA8d29yZGFzd29yZD5WaWRlbyBPdmVybGF5PC93b3JkYXN3b3JkPgoraW50ZXJmYWNlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3JtYWxseSBpbXBsZW1lbnRlZCBvbiB0aGUgVFYgY2FyZCBhbmQKK25vdCB0aGUgZ3JhcGhpY3MgY2FyZC4gT24gTGludXggaXQgaXMgYWNjZXNzaWJsZSBhcyBhIGZyYW1lYnVmZmVyCitkZXZpY2UgKDxmaWxlbmFtZT4vZGV2L2ZiTjwvZmlsZW5hbWU+KS4gR2l2ZW4gYSBWNEwyIGRldmljZSwKK2FwcGxpY2F0aW9ucyBjYW4gZmluZCB0aGUgY29ycmVzcG9uZGluZyBmcmFtZWJ1ZmZlciBkZXZpY2UgYnkgY2FsbGluZwordGhlICZWSURJT0MtRy1GQlVGOyBpb2N0bC4gSXQgcmV0dXJucywgYW1vbmdzdCBvdGhlciBpbmZvcm1hdGlvbiwgdGhlCitwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmcmFtZWJ1ZmZlciBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5iYXNlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItZnJhbWVidWZmZXI7LiBUaGUKK2ZyYW1lYnVmZmVyIGRldmljZSBpb2N0bCA8Y29uc3RhbnQ+RkJJT0dFVF9GU0NSRUVOSU5GTzwvY29uc3RhbnQ+CityZXR1cm5zIHRoZSBzYW1lIGFkZHJlc3MgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5zbWVtX3N0YXJ0PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIG9mIHN0cnVjdCA8c3RydWN0bmFtZT5mYl9maXhfc2NyZWVuaW5mbzwvc3RydWN0bmFtZT4uIFRoZQorPGNvbnN0YW50PkZCSU9HRVRfRlNDUkVFTklORk88L2NvbnN0YW50PiBpb2N0bCBhbmQgc3RydWN0Cis8c3RydWN0bmFtZT5mYl9maXhfc2NyZWVuaW5mbzwvc3RydWN0bmFtZT4gYXJlIGRlZmluZWQgaW4gdGhlCis8ZmlsZW5hbWU+bGludXgvZmIuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBmcmFtZWJ1ZmZlciBkZXBlbmRzIG9uIHRoZQorY3VycmVudCB2aWRlbyBzdGFuZGFyZC4gQSBWNEwyIGRyaXZlciBtYXkgcmVqZWN0IGF0dGVtcHRzIHRvIGNoYW5nZQordGhlIHZpZGVvIHN0YW5kYXJkIChvciBhbnkgb3RoZXIgaW9jdGwgd2hpY2ggd291bGQgaW1wbHkgYSBmcmFtZWJ1ZmZlcgorc2l6ZSBjaGFuZ2UpIHdpdGggYW4gJkVCVVNZOyB1bnRpbCBhbGwgYXBwbGljYXRpb25zIGNsb3NlZCB0aGUKK2ZyYW1lYnVmZmVyIGRldmljZS48L3BhcmE+CisKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDx0aXRsZT5GaW5kaW5nIGEgZnJhbWVidWZmZXIgZGV2aWNlIGZvciBPU0Q8L3RpdGxlPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisjaW5jbHVkZSAmbHQ7bGludXgvZmIuaCZndDsKKworJnY0bDItZnJhbWVidWZmZXI7IGZidWY7Cit1bnNpZ25lZCBpbnQgaTsKK2ludCBmYl9mZDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgVklESU9DX0dfRkJVRiwgJmFtcDtmYnVmKSkgeworCXBlcnJvciAoIlZJRElPQ19HX0ZCVUYiKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitmb3IgKGkgPSAwOyBpICZndDsgMzA7ICsraSkgeworCWNoYXIgZGV2X25hbWVbMTZdOworCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBzaTsKKworCXNucHJpbnRmIChkZXZfbmFtZSwgc2l6ZW9mIChkZXZfbmFtZSksICIvZGV2L2ZiJXUiLCBpKTsKKworCWZiX2ZkID0gb3BlbiAoZGV2X25hbWUsIE9fUkRXUik7CisJaWYgKC0xID09IGZiX2ZkKSB7CisJCXN3aXRjaCAoZXJybm8pIHsKKwkJY2FzZSBFTk9FTlQ6IC8qIG5vIHN1Y2ggZmlsZSAqLworCQljYXNlIEVOWElPOiAgLyogbm8gZHJpdmVyICovCisJCQljb250aW51ZTsKKworCQlkZWZhdWx0OgorCQkJcGVycm9yICgib3BlbiIpOworCQkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKworCWlmICgwID09IGlvY3RsIChmYl9mZCwgRkJJT0dFVF9GU0NSRUVOSU5GTywgJmFtcDtzaSkpIHsKKwkJaWYgKHNpLnNtZW1fc3RhcnQgPT0gKHVuc2lnbmVkIGxvbmcpIGZidWYuYmFzZSkKKwkJCWJyZWFrOworCX0gZWxzZSB7CisJCS8qIEFwcGFyZW50bHkgbm90IGEgZnJhbWVidWZmZXIgZGV2aWNlLiAqLworCX0KKworCWNsb3NlIChmYl9mZCk7CisJZmJfZmQgPSAtMTsKK30KKworLyogZmJfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZnJhbWVidWZmZXIgZGV2aWNlCisgICBmb3IgdGhlIHZpZGVvIG91dHB1dCBvdmVybGF5LCBvciAtMSBpZiBubyBkZXZpY2Ugd2FzIGZvdW5kLiAqLworPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+T3ZlcmxheSBXaW5kb3cgYW5kIFNjYWxpbmc8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIG92ZXJsYXkgaXMgY29udHJvbGxlZCBieSBzb3VyY2UgYW5kIHRhcmdldCByZWN0YW5nbGVzLgorVGhlIHNvdXJjZSByZWN0YW5nbGUgc2VsZWN0cyBhIHN1YnNlY3Rpb24gb2YgdGhlIGZyYW1lYnVmZmVyIGltYWdlIHRvCitiZSBvdmVybGFpZCwgdGhlIHRhcmdldCByZWN0YW5nbGUgYW4gYXJlYSBpbiB0aGUgb3V0Z29pbmcgdmlkZW8gc2lnbmFsCit3aGVyZSB0aGUgaW1hZ2Ugd2lsbCBhcHBlYXIuIERyaXZlcnMgbWF5IG9yIG1heSBub3Qgc3VwcG9ydCBzY2FsaW5nLAorYW5kIGFyYml0cmFyeSBzaXplcyBhbmQgcG9zaXRpb25zIG9mIHRoZXNlIHJlY3RhbmdsZXMuIEZ1cnRoZXIgZHJpdmVycworbWF5IHN1cHBvcnQgYW55IChvciBub25lKSBvZiB0aGUgY2xpcHBpbmcvYmxlbmRpbmcgbWV0aG9kcyBkZWZpbmVkIGZvcgordGhlIDxsaW5rIGxpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IGludGVyZmFjZS48L3BhcmE+CisKKyAgICA8cGFyYT5BICZ2NGwyLXdpbmRvdzsgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgc291cmNlIHJlY3RhbmdsZSwKK2l0cyBwb3NpdGlvbiBpbiB0aGUgZnJhbWVidWZmZXIgYW5kIHRoZSBjbGlwcGluZy9ibGVuZGluZyBtZXRob2QgdG8gYmUKK3VzZWQgZm9yIHRoZSBvdmVybGF5LiBUbyBnZXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0Cit0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLWZvcm1hdDsgdG8KKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9PVkVSTEFZPC9jb25zdGFudD4gYW5kIGNhbGwgdGhlCismVklESU9DLUctRk1UOyBpb2N0bC4gVGhlIGRyaXZlciBmaWxscyB0aGUKKzxzdHJ1Y3RuYW1lPnY0bDJfd2luZG93PC9zdHJ1Y3RuYW1lPiBzdWJzdHJ1Y3R1cmUgbmFtZWQKKzxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPi4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZXZlIGEKK3ByZXZpb3VzbHkgcHJvZ3JhbW1lZCBjbGlwcGluZyBsaXN0IG9yIGJpdG1hcC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBwcm9ncmFtIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIGFwcGxpY2F0aW9ucyBzZXQgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgJnY0bDItZm9ybWF0OyB0bworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVk8L2NvbnN0YW50PiwgaW5pdGlhbGl6ZQordGhlIDxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPiBzdWJzdHJ1Y3R1cmUgYW5kIGNhbGwgdGhlCismVklESU9DLVMtRk1UOyBpb2N0bC4gVGhlIGRyaXZlciBhZGp1c3RzIHRoZSBwYXJhbWV0ZXJzIGFnYWluc3QKK2hhcmR3YXJlIGxpbWl0cyBhbmQgcmV0dXJucyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXMKKzxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBkb2VzLiBMaWtlCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4sIHRoZSAmVklESU9DLVRSWS1GTVQ7IGlvY3RsIGNhbiBiZQordXNlZCB0byBsZWFybiBhYm91dCBkcml2ZXIgY2FwYWJpbGl0aWVzIHdpdGhvdXQgYWN0dWFsbHkgY2hhbmdpbmcKK2RyaXZlciBzdGF0ZS4gVW5saWtlIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiB0aGlzIGFsc28gd29ya3MKK2FmdGVyIHRoZSBvdmVybGF5IGhhcyBiZWVuIGVuYWJsZWQuPC9wYXJhPgorCisgICAgPHBhcmE+QSAmdjRsMi1jcm9wOyBkZWZpbmVzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgdGFyZ2V0CityZWN0YW5nbGUuIFRoZSBzY2FsaW5nIGZhY3RvciBvZiB0aGUgb3ZlcmxheSBpcyBpbXBsaWVkIGJ5IHRoZSB3aWR0aAorYW5kIGhlaWdodCBnaXZlbiBpbiAmdjRsMi13aW5kb3c7IGFuZCAmdjRsMi1jcm9wOy4gVGhlIGNyb3BwaW5nIEFQSQorYXBwbGllcyB0byA8d29yZGFzd29yZD5WaWRlbyBPdXRwdXQ8L3dvcmRhc3dvcmQ+IGFuZCA8d29yZGFzd29yZD5WaWRlbworT3V0cHV0IE92ZXJsYXk8L3dvcmRhc3dvcmQ+IGRldmljZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRvCis8d29yZGFzd29yZD5WaWRlbyBDYXB0dXJlPC93b3JkYXN3b3JkPiBhbmQgPHdvcmRhc3dvcmQ+VmlkZW8KK092ZXJsYXk8L3dvcmRhc3dvcmQ+IGRldmljZXMsIG1lcmVseSByZXZlcnNpbmcgdGhlIGRpcmVjdGlvbiBvZiB0aGUKK2RhdGEgZmxvdy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDx4cmVmIGxpbmtlbmQ9ImNyb3AiIC8+LjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5FbmFibGluZyBPdmVybGF5PC90aXRsZT4KKworICAgIDxwYXJhPlRoZXJlIGlzIG5vIFY0TDIgaW9jdGwgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIG92ZXJsYXksCitob3dldmVyIHRoZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2Ugb2YgdGhlIGRyaXZlciBtYXkgc3VwcG9ydCB0aGUKKzxjb25zdGFudD5GQklPQkxBTks8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LW91dHB1dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdXRwdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzNjMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdXRwdXQueG1sCkBAIC0wLDAgKzEsMTExIEBACisgIDx0aXRsZT5WaWRlbyBPdXRwdXQgSW50ZXJmYWNlPC90aXRsZT4KKworICA8cGFyYT5WaWRlbyBvdXRwdXQgZGV2aWNlcyBlbmNvZGUgc3RpbGxzIG9yIGltYWdlIHNlcXVlbmNlcyBhcworYW5hbG9nIHZpZGVvIHNpZ25hbC4gV2l0aCB0aGlzIGludGVyZmFjZSBhcHBsaWNhdGlvbnMgY2FuCitjb250cm9sIHRoZSBlbmNvZGluZyBwcm9jZXNzIGFuZCBtb3ZlIGltYWdlcyBmcm9tIHVzZXIgc3BhY2UgdG8KK3RoZSBkcml2ZXIuPC9wYXJhPgorCisgIDxwYXJhPkNvbnZlbnRpb25hbGx5IFY0TDIgdmlkZW8gb3V0cHV0IGRldmljZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2gKK2NoYXJhY3RlciBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBuYW1lZCA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+CithbmQgPGZpbGVuYW1lPi9kZXYvdmlkZW8wPC9maWxlbmFtZT4gdG8KKzxmaWxlbmFtZT4vZGV2L3ZpZGVvNjM8L2ZpbGVuYW1lPiB3aXRoIG1ham9yIG51bWJlciA4MSBhbmQgbWlub3IKK251bWJlcnMgMCB0byA2My4gPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPiBpcyB0eXBpY2FsbHkgYQorc3ltYm9saWMgbGluayB0byB0aGUgcHJlZmVycmVkIHZpZGVvIGRldmljZS4gTm90ZSB0aGUgc2FtZSBkZXZpY2UKK2ZpbGVzIGFyZSB1c2VkIGZvciB2aWRlbyBjYXB0dXJlIGRldmljZXMuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSB2aWRlbyBvdXRwdXQgaW50ZXJmYWNlIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIEFzIHNlY29uZGFyeSBkZXZpY2UgZnVuY3Rpb25zCit0aGV5IG1heSBhbHNvIHN1cHBvcnQgdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPnJhdyBWQkkKK291dHB1dDwvbGluaz4gKDxjb25zdGFudD5WNEwyX0NBUF9WQklfT1VUUFVUPC9jb25zdGFudD4pIGludGVyZmFjZS4gQXQKK2xlYXN0IG9uZSBvZiB0aGUgcmVhZC93cml0ZSBvciBzdHJlYW1pbmcgSS9PIG1ldGhvZHMgbXVzdCBiZQorc3VwcG9ydGVkLiBNb2R1bGF0b3JzIGFuZCBhdWRpbyBvdXRwdXRzIGFyZSBvcHRpb25hbC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+U3VwcGxlbWVudGFsIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT5WaWRlbyBvdXRwdXQgZGV2aWNlcyBzaGFsbCBzdXBwb3J0IDxsaW5rCitsaW5rZW5kPSJhdWRpbyI+YXVkaW8gb3V0cHV0PC9saW5rPiwgPGxpbmsKK2xpbmtlbmQ9InR1bmVyIj5tb2R1bGF0b3I8L2xpbms+LCA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sczwvbGluaz4sCis8bGluayBsaW5rZW5kPSJjcm9wIj5jcm9wcGluZyBhbmQgc2NhbGluZzwvbGluaz4gYW5kIDxsaW5rCitsaW5rZW5kPSJzdHJlYW1pbmctcGFyIj5zdHJlYW1pbmcgcGFyYW1ldGVyPC9saW5rPiBpb2N0bHMgYXMgbmVlZGVkLgorVGhlIDxsaW5rIGxpbmtlbmQ9InZpZGVvIj52aWRlbyBvdXRwdXQ8L2xpbms+IGFuZCA8bGluaworbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgbXVzdCBiZSBzdXBwb3J0ZWQgYnkKK2FsbCB2aWRlbyBvdXRwdXQgZGV2aWNlcy48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+SW1hZ2UgRm9ybWF0IE5lZ290aWF0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBvdXRwdXQgaXMgZGV0ZXJtaW5lZCBieSBjcm9wcGluZyBhbmQgaW1hZ2UgZm9ybWF0CitwYXJhbWV0ZXJzLiBUaGUgZm9ybWVyIHNlbGVjdCBhbiBhcmVhIG9mIHRoZSB2aWRlbyBwaWN0dXJlIHdoZXJlIHRoZQoraW1hZ2Ugd2lsbCBhcHBlYXIsIHRoZSBsYXR0ZXIgaG93IGltYWdlcyBhcmUgc3RvcmVkIGluIG1lbW9yeSwgJmllOyBpbgorUkdCIG9yIFlVViBmb3JtYXQsIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgb3Igd2lkdGggYW5kIGhlaWdodC4KK1RvZ2V0aGVyIHRoZXkgYWxzbyBkZWZpbmUgaG93IGltYWdlcyBhcmUgc2NhbGVkIGluIHRoZSBwcm9jZXNzLjwvcGFyYT4KKworICAgIDxwYXJhPkFzIHVzdWFsIHRoZXNlIHBhcmFtZXRlcnMgYXJlIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiByZXNldAorYXQgJmZ1bmMtb3BlbjsgdGltZSB0byBwZXJtaXQgVW5peCB0b29sIGNoYWlucywgcHJvZ3JhbW1pbmcgYSBkZXZpY2UKK2FuZCB0aGVuIHdyaXRpbmcgdG8gaXQgYXMgaWYgaXQgd2FzIGEgcGxhaW4gZmlsZS4gV2VsbCB3cml0dGVuIFY0TDIKK2FwcGxpY2F0aW9ucyBlbnN1cmUgdGhleSByZWFsbHkgZ2V0IHdoYXQgdGhleSB3YW50LCBpbmNsdWRpbmcgY3JvcHBpbmcKK2FuZCBzY2FsaW5nLjwvcGFyYT4KKworICAgIDxwYXJhPkNyb3BwaW5nIGluaXRpYWxpemF0aW9uIGF0IG1pbmltdW0gcmVxdWlyZXMgdG8gcmVzZXQgdGhlCitwYXJhbWV0ZXJzIHRvIGRlZmF1bHRzLiBBbiBleGFtcGxlIGlzIGdpdmVuIGluIDx4cmVmCitsaW5rZW5kPSJjcm9wIiAvPi48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCBpbWFnZSBmb3JtYXQgYXBwbGljYXRpb25zIHNldCB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSAmdjRsMi1mb3JtYXQ7IHRvCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiBhbmQgY2FsbCB0aGUKKyZWSURJT0MtRy1GTVQ7IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwKK3RoZSAmdjRsMi1waXgtZm9ybWF0OyA8c3RydWN0ZmllbGQ+cGl4PC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHJlcXVlc3QgZGlmZmVyZW50IHBhcmFtZXRlcnMgYXBwbGljYXRpb25zIHNldCB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSAmdjRsMi1mb3JtYXQ7IGFzIGFib3ZlIGFuZAoraW5pdGlhbGl6ZSBhbGwgZmllbGRzIG9mIHRoZSAmdjRsMi1waXgtZm9ybWF0OworPHN0cnVjdGZpZWxkPnZiaTwvc3RydWN0ZmllbGQ+IG1lbWJlciBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPiB1bmlvbiwgb3IgYmV0dGVyIGp1c3QgbW9kaWZ5IHRoZQorcmVzdWx0cyBvZiA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4sIGFuZCBjYWxsIHRoZQorJlZJRElPQy1TLUZNVDsgaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgbWF5CithZGp1c3QgdGhlIHBhcmFtZXRlcnMgYW5kIGZpbmFsbHkgcmV0dXJuIHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcworPGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+IGRvZXMuPC9wYXJhPgorCisgICAgPHBhcmE+TGlrZSA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gdGhlCismVklESU9DLVRSWS1GTVQ7IGlvY3RsIGNhbiBiZSB1c2VkIHRvIGxlYXJuIGFib3V0IGhhcmR3YXJlIGxpbWl0YXRpb25zCit3aXRob3V0IGRpc2FibGluZyBJL08gb3IgcG9zc2libHkgdGltZSBjb25zdW1pbmcgaGFyZHdhcmUKK3ByZXBhcmF0aW9ucy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgY29udGVudHMgb2YgJnY0bDItcGl4LWZvcm1hdDsgYXJlIGRpc2N1c3NlZCBpbiA8eHJlZgorbGlua2VuZD0icGl4Zm10IiAvPi4gU2VlIGFsc28gdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4sIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PgorYW5kIDxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlvY3RscyBmb3IgZGV0YWlscy4gVmlkZW8KK291dHB1dCBkZXZpY2VzIG11c3QgaW1wbGVtZW50IGJvdGggdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwsIGV2ZW4gaWYKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBpZ25vcmVzIGFsbCByZXF1ZXN0cyBhbmQgYWx3YXlzCityZXR1cm5zIGRlZmF1bHQgcGFyYW1ldGVycyBhcyA8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy4KKzxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlzIG9wdGlvbmFsLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5Xcml0aW5nIEltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT5BIHZpZGVvIG91dHB1dCBkZXZpY2UgbWF5IHN1cHBvcnQgdGhlIDxsaW5rCitsaW5rZW5kPSJydyI+d3JpdGUoKSBmdW5jdGlvbjwvbGluaz4gYW5kL29yIHN0cmVhbWluZyAoPGxpbmsKK2xpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBvciA8bGluaworbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy4gU2VlIDx4cmVmCitsaW5rZW5kPSJpbyIgLz4gZm9yIGRldGFpbHMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdmVybGF5LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LW92ZXJsYXkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNTEzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdmVybGF5LnhtbApAQCAtMCwwICsxLDM3OSBAQAorICA8dGl0bGU+VmlkZW8gT3ZlcmxheSBJbnRlcmZhY2U8L3RpdGxlPgorICA8c3VidGl0bGU+QWxzbyBrbm93biBhcyBGcmFtZWJ1ZmZlciBPdmVybGF5IG9yIFByZXZpZXdpbmc8L3N1YnRpdGxlPgorCisgIDxwYXJhPlZpZGVvIG92ZXJsYXkgZGV2aWNlcyBoYXZlIHRoZSBhYmlsaXR5IHRvIGdlbmxvY2sgKFRWLSl2aWRlbworaW50byB0aGUgKFZHQS0pdmlkZW8gc2lnbmFsIG9mIGEgZ3JhcGhpY3MgY2FyZCwgb3IgdG8gc3RvcmUgY2FwdHVyZWQKK2ltYWdlcyBkaXJlY3RseSBpbiB2aWRlbyBtZW1vcnkgb2YgYSBncmFwaGljcyBjYXJkLCB0eXBpY2FsbHkgd2l0aAorY2xpcHBpbmcuIFRoaXMgY2FuIGJlIGNvbnNpZGVyYWJsZSBtb3JlIGVmZmljaWVudCB0aGFuIGNhcHR1cmluZworaW1hZ2VzIGFuZCBkaXNwbGF5aW5nIHRoZW0gYnkgb3RoZXIgbWVhbnMuIEluIHRoZSBvbGQgZGF5cyB3aGVuIG9ubHkKK251Y2xlYXIgcG93ZXIgcGxhbnRzIG5lZWRlZCBjb29saW5nIHRvd2VycyB0aGlzIHVzZWQgdG8gYmUgdGhlIG9ubHkKK3dheSB0byBwdXQgbGl2ZSB2aWRlbyBpbnRvIGEgd2luZG93LjwvcGFyYT4KKworICA8cGFyYT5WaWRlbyBvdmVybGF5IGRldmljZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHNhbWUgY2hhcmFjdGVyCitzcGVjaWFsIGZpbGVzIGFzIDxsaW5rIGxpbmtlbmQ9ImNhcHR1cmUiPnZpZGVvIGNhcHR1cmU8L2xpbms+IGRldmljZXMuCitOb3RlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIG9mIGEgPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPiBkZXZpY2UKK2lzIHZpZGVvIGNhcHR1cmluZy4gVGhlIG92ZXJsYXkgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIKK2NhbGxpbmcgdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBkcml2ZXIgbWF5IHN1cHBvcnQgc2ltdWx0YW5lb3VzIG92ZXJsYXkgYW5kIGNhcHR1cmluZwordXNpbmcgdGhlIHJlYWQvd3JpdGUgYW5kIHN0cmVhbWluZyBJL08gbWV0aG9kcy4gSWYgc28sIG9wZXJhdGlvbiBhdAordGhlIG5vbWluYWwgZnJhbWUgcmF0ZSBvZiB0aGUgdmlkZW8gc3RhbmRhcmQgaXMgbm90IGd1YXJhbnRlZWQuIEZyYW1lcworbWF5IGJlIGRpcmVjdGVkIGF3YXkgZnJvbSBvdmVybGF5IHRvIGNhcHR1cmUsIG9yIG9uZSBmaWVsZCBtYXkgYmUgdXNlZAorZm9yIG92ZXJsYXkgYW5kIHRoZSBvdGhlciBmb3IgY2FwdHVyZSBpZiB0aGUgY2FwdHVyZSBwYXJhbWV0ZXJzIHBlcm1pdAordGhpcy48L3BhcmE+CisKKyAgPHBhcmE+QXBwbGljYXRpb25zIHNob3VsZCB1c2UgZGlmZmVyZW50IGZpbGUgZGVzY3JpcHRvcnMgZm9yCitjYXB0dXJpbmcgYW5kIG92ZXJsYXkuIFRoaXMgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRyaXZlcnMgY2FwYWJsZQorb2Ygc2ltdWx0YW5lb3VzIGNhcHR1cmluZyBhbmQgb3ZlcmxheS4gT3B0aW9uYWxseSB0aGVzZSBkcml2ZXJzIG1heQorYWxzbyBwZXJtaXQgY2FwdHVyaW5nIGFuZCBvdmVybGF5IHdpdGggYSBzaW5nbGUgZmlsZSBkZXNjcmlwdG9yIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIFY0TCBhbmQgZWFybGllciB2ZXJzaW9ucyBvZiBWNEwyLjxmb290bm90ZT4KKwk8cGFyYT5BIGNvbW1vbiBhcHBsaWNhdGlvbiBvZiB0d28gZmlsZSBkZXNjcmlwdG9ycyBpcyB0aGUKK1hGcmVlODYgPGxpbmsgbGlua2VuZD0ieHZpZGVvIj5Ydi9WNEw8L2xpbms+IGludGVyZmFjZSBkcml2ZXIgYW5kCithIFY0TDIgYXBwbGljYXRpb24uIFdoaWxlIHRoZSBYIHNlcnZlciBjb250cm9scyB2aWRlbyBvdmVybGF5LCB0aGUKK2FwcGxpY2F0aW9uIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBtZW1vcnkgbWFwcGluZyBhbmQgRE1BLjwvcGFyYT4KKwk8cGFyYT5JbiB0aGUgb3BpbmlvbiBvZiB0aGUgZGVzaWduZXJzIG9mIHRoaXMgQVBJLCBubyBkcml2ZXIKK3dyaXRlciB0YWtpbmcgdGhlIGVmZm9ydHMgdG8gc3VwcG9ydCBzaW11bHRhbmVvdXMgY2FwdHVyaW5nIGFuZAorb3ZlcmxheSB3aWxsIHJlc3RyaWN0IHRoaXMgYWJpbGl0eSBieSByZXF1aXJpbmcgYSBzaW5nbGUgZmlsZQorZGVzY3JpcHRvciwgYXMgaW4gVjRMIGFuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIuIE1ha2luZyB0aGlzCitvcHRpb25hbCBtZWFucyBhcHBsaWNhdGlvbnMgZGVwZW5kaW5nIG9uIHR3byBmaWxlIGRlc2NyaXB0b3JzIG5lZWQKK2JhY2t1cCByb3V0aW5lcyB0byBiZSBjb21wYXRpYmxlIHdpdGggYWxsIGRyaXZlcnMsIHdoaWNoIGlzCitjb25zaWRlcmFibGUgbW9yZSB3b3JrIHRoYW4gdXNpbmcgdHdvIGZkcyBpbiBhcHBsaWNhdGlvbnMgd2hpY2ggZG8KK25vdC4gQWxzbyB0d28gZmQncyBmaXQgdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBvbmUgZmlsZSBkZXNjcmlwdG9yIGZvcgorZWFjaCBsb2dpY2FsIHN0cmVhbS4gSGVuY2UgYXMgYSBjb21wbGV4aXR5IHRyYWRlLW9mZiBkcml2ZXJzCis8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IHN1cHBvcnQgdHdvIGZpbGUgZGVzY3JpcHRvcnMgYW5kCis8ZW1waGFzaXM+bWF5PC9lbXBoYXNpcz4gc3VwcG9ydCBzaW5nbGUgZmQgb3BlcmF0aW9uLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSB2aWRlbyBvdmVybGF5IGludGVyZmFjZSBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4gVGhlIG92ZXJsYXkgSS9PIG1ldGhvZCBzcGVjaWZpZWQKK2JlbG93IG11c3QgYmUgc3VwcG9ydGVkLiBUdW5lcnMgYW5kIGF1ZGlvIGlucHV0cyBhcmUgb3B0aW9uYWwuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlN1cHBsZW1lbnRhbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHBhcmE+VmlkZW8gb3ZlcmxheSBkZXZpY2VzIHNoYWxsIHN1cHBvcnQgPGxpbmsKK2xpbmtlbmQ9ImF1ZGlvIj5hdWRpbyBpbnB1dDwvbGluaz4sIDxsaW5rCitsaW5rZW5kPSJ0dW5lciI+dHVuZXI8L2xpbms+LCA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sczwvbGluaz4sCis8bGluayBsaW5rZW5kPSJjcm9wIj5jcm9wcGluZyBhbmQgc2NhbGluZzwvbGluaz4gYW5kIDxsaW5rCitsaW5rZW5kPSJzdHJlYW1pbmctcGFyIj5zdHJlYW1pbmcgcGFyYW1ldGVyPC9saW5rPiBpb2N0bHMgYXMgbmVlZGVkLgorVGhlIDxsaW5rIGxpbmtlbmQ9InZpZGVvIj52aWRlbyBpbnB1dDwvbGluaz4gYW5kIDxsaW5rCitsaW5rZW5kPSJzdGFuZGFyZCI+dmlkZW8gc3RhbmRhcmQ8L2xpbms+IGlvY3RscyBtdXN0IGJlIHN1cHBvcnRlZCBieQorYWxsIHZpZGVvIG92ZXJsYXkgZGV2aWNlcy48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgPHBhcmE+QmVmb3JlIG92ZXJsYXkgY2FuIGNvbW1lbmNlIGFwcGxpY2F0aW9ucyBtdXN0IHByb2dyYW0gdGhlCitkcml2ZXIgd2l0aCBmcmFtZSBidWZmZXIgcGFyYW1ldGVycywgbmFtZWx5IHRoZSBhZGRyZXNzIGFuZCBzaXplIG9mCit0aGUgZnJhbWUgYnVmZmVyIGFuZCB0aGUgaW1hZ2UgZm9ybWF0LCBmb3IgZXhhbXBsZSBSR0IgNTo2OjUuIFRoZQorJlZJRElPQy1HLUZCVUY7IGFuZCAmVklESU9DLVMtRkJVRjsgaW9jdGxzIGFyZSBhdmFpbGFibGUgdG8gZ2V0CithbmQgc2V0IHRoZXNlIHBhcmFtZXRlcnMsIHJlc3BlY3RpdmVseS4gVGhlCis8Y29uc3RhbnQ+VklESU9DX1NfRkJVRjwvY29uc3RhbnQ+IGlvY3RsIGlzIHByaXZpbGVnZWQgYmVjYXVzZSBpdAorYWxsb3dzIHRvIHNldCB1cCBETUEgaW50byBwaHlzaWNhbCBtZW1vcnksIGJ5cGFzc2luZyB0aGUgbWVtb3J5Citwcm90ZWN0aW9uIG1lY2hhbmlzbXMgb2YgdGhlIGtlcm5lbC4gT25seSB0aGUgc3VwZXJ1c2VyIGNhbiBjaGFuZ2UgdGhlCitmcmFtZSBidWZmZXIgYWRkcmVzcyBhbmQgc2l6ZS4gVXNlcnMgYXJlIG5vdCBzdXBwb3NlZCB0byBydW4gVFYKK2FwcGxpY2F0aW9ucyBhcyByb290IG9yIHdpdGggU1VJRCBiaXQgc2V0LiBBIHNtYWxsIGhlbHBlciBhcHBsaWNhdGlvbgord2l0aCBzdWl0YWJsZSBwcml2aWxlZ2VzIHNob3VsZCBxdWVyeSB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGFuZCBwcm9ncmFtCit0aGUgVjRMMiBkcml2ZXIgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUuPC9wYXJhPgorCisgICAgPHBhcmE+U29tZSBkZXZpY2VzIGFkZCB0aGUgdmlkZW8gb3ZlcmxheSB0byB0aGUgb3V0cHV0IHNpZ25hbAorb2YgdGhlIGdyYXBoaWNzIGNhcmQuIEluIHRoaXMgY2FzZSB0aGUgZnJhbWUgYnVmZmVyIGlzIG5vdCBtb2RpZmllZCBieQordGhlIHZpZGVvIGRldmljZSwgYW5kIHRoZSBmcmFtZSBidWZmZXIgYWRkcmVzcyBhbmQgcGl4ZWwgZm9ybWF0IGFyZQorbm90IG5lZWRlZCBieSB0aGUgZHJpdmVyLiBUaGUgPGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PiBpb2N0bAoraXMgbm90IHByaXZpbGVnZWQuIEFuIGFwcGxpY2F0aW9uIGNhbiBjaGVjayBmb3IgdGhpcyB0eXBlIG9mIGRldmljZSBieQorY2FsbGluZyB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0ZCVUY8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5BIGRyaXZlciBtYXkgc3VwcG9ydCBhbnkgKG9yIG5vbmUpIG9mIGZpdmUgY2xpcHBpbmcvYmxlbmRpbmcKK21ldGhvZHM6PG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkNocm9tYS1rZXlpbmcgZGlzcGxheXMgdGhlIG92ZXJsYWlkIGltYWdlIG9ubHkgd2hlcmUKK3BpeGVscyBpbiB0aGUgcHJpbWFyeSBncmFwaGljcyBzdXJmYWNlIGFzc3VtZSBhIGNlcnRhaW4gY29sb3IuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QSBiaXRtYXAgY2FuIGJlIHNwZWNpZmllZCB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcwordG8gYSBwaXhlbCBpbiB0aGUgb3ZlcmxhaWQgaW1hZ2UuIFdoZW4gdGhlIGJpdCBpcyBzZXQsIHRoZQorY29ycmVzcG9uZGluZyB2aWRlbyBwaXhlbCBpcyBkaXNwbGF5ZWQsIG90aGVyd2lzZSBhIHBpeGVsIG9mIHRoZQorZ3JhcGhpY3Mgc3VyZmFjZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BIGxpc3Qgb2YgY2xpcHBpbmcgcmVjdGFuZ2xlcyBjYW4gYmUgc3BlY2lmaWVkLiBJbgordGhlc2UgcmVnaW9ucyA8ZW1waGFzaXM+bm88L2VtcGhhc2lzPiB2aWRlbyBpcyBkaXNwbGF5ZWQsIHNvIHRoZQorZ3JhcGhpY3Mgc3VyZmFjZSBjYW4gYmUgc2VlbiBoZXJlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBmcmFtZWJ1ZmZlciBoYXMgYW4gYWxwaGEgY2hhbm5lbCB0aGF0IGNhbiBiZSB1c2VkCit0byBjbGlwIG9yIGJsZW5kIHRoZSBmcmFtZWJ1ZmZlciB3aXRoIHRoZSB2aWRlby48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BIGdsb2JhbCBhbHBoYSB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIHRvIGJsZW5kIHRoZQorZnJhbWVidWZmZXIgY29udGVudHMgd2l0aCB2aWRlbyBpbWFnZXMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gc2ltdWx0YW5lb3VzIGNhcHR1cmluZyBhbmQgb3ZlcmxheSBpcyBzdXBwb3J0ZWQgYW5kCit0aGUgaGFyZHdhcmUgcHJvaGliaXRzIGRpZmZlcmVudCBpbWFnZSBhbmQgZnJhbWUgYnVmZmVyIGZvcm1hdHMsIHRoZQorZm9ybWF0IHJlcXVlc3RlZCBmaXJzdCB0YWtlcyBwcmVjZWRlbmNlLiBUaGUgYXR0ZW1wdCB0byBjYXB0dXJlCisoJlZJRElPQy1TLUZNVDspIG9yIG92ZXJsYXkgKCZWSURJT0MtUy1GQlVGOykgbWF5IGZhaWwgd2l0aCBhbgorJkVCVVNZOyBvciByZXR1cm4gYWNjb3JkaW5nbHkgbW9kaWZpZWQgcGFyYW1ldGVycy4uPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPk92ZXJsYXkgV2luZG93PC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBvdmVybGFpZCBpbWFnZSBpcyBkZXRlcm1pbmVkIGJ5IGNyb3BwaW5nIGFuZCBvdmVybGF5Cit3aW5kb3cgcGFyYW1ldGVycy4gVGhlIGZvcm1lciBzZWxlY3QgYW4gYXJlYSBvZiB0aGUgdmlkZW8gcGljdHVyZSB0bworY2FwdHVyZSwgdGhlIGxhdHRlciBob3cgaW1hZ2VzIGFyZSBvdmVybGFpZCBhbmQgY2xpcHBlZC4gQ3JvcHBpbmcKK2luaXRpYWxpemF0aW9uIGF0IG1pbmltdW0gcmVxdWlyZXMgdG8gcmVzZXQgdGhlIHBhcmFtZXRlcnMgdG8KK2RlZmF1bHRzLiBBbiBleGFtcGxlIGlzIGdpdmVuIGluIDx4cmVmIGxpbmtlbmQ9ImNyb3AiIC8+LjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBvdmVybGF5IHdpbmRvdyBpcyBkZXNjcmliZWQgYnkgYSAmdjRsMi13aW5kb3c7LiBJdAorZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UsIGl0cyBwb3NpdGlvbiBvdmVyIHRoZSBncmFwaGljcyBzdXJmYWNlCithbmQgdGhlIGNsaXBwaW5nIHRvIGJlIGFwcGxpZWQuIFRvIGdldCB0aGUgY3VycmVudCBwYXJhbWV0ZXJzCithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKyZ2NGwyLWZvcm1hdDsgdG8gPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+IGFuZAorY2FsbCB0aGUgJlZJRElPQy1HLUZNVDsgaW9jdGwuIFRoZSBkcml2ZXIgZmlsbHMgdGhlCis8c3RydWN0bmFtZT52NGwyX3dpbmRvdzwvc3RydWN0bmFtZT4gc3Vic3RydWN0dXJlIG5hbWVkCis8c3RydWN0ZmllbGQ+d2luPC9zdHJ1Y3RmaWVsZD4uIEl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSBhCitwcmV2aW91c2x5IHByb2dyYW1tZWQgY2xpcHBpbmcgbGlzdCBvciBiaXRtYXAuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcHJvZ3JhbSB0aGUgb3ZlcmxheSB3aW5kb3cgYXBwbGljYXRpb25zIHNldCB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSAmdjRsMi1mb3JtYXQ7IHRvCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD4sIGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+d2luPC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlIGFuZCBjYWxsIHRoZQorJlZJRElPQy1TLUZNVDsgaW9jdGwuIFRoZSBkcml2ZXIgYWRqdXN0cyB0aGUgcGFyYW1ldGVycyBhZ2FpbnN0CitoYXJkd2FyZSBsaW1pdHMgYW5kIHJldHVybnMgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRk1UPC9jb25zdGFudD4gZG9lcy4gTGlrZQorPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+LCB0aGUgJlZJRElPQy1UUlktRk1UOyBpb2N0bCBjYW4gYmUKK3VzZWQgdG8gbGVhcm4gYWJvdXQgZHJpdmVyIGNhcGFiaWxpdGllcyB3aXRob3V0IGFjdHVhbGx5IGNoYW5naW5nCitkcml2ZXIgc3RhdGUuIFVubGlrZSA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gdGhpcyBhbHNvIHdvcmtzCithZnRlciB0aGUgb3ZlcmxheSBoYXMgYmVlbiBlbmFibGVkLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBzY2FsaW5nIGZhY3RvciBvZiB0aGUgb3ZlcmxhaWQgaW1hZ2UgaXMgaW1wbGllZCBieSB0aGUKK3dpZHRoIGFuZCBoZWlnaHQgZ2l2ZW4gaW4gJnY0bDItd2luZG93OyBhbmQgdGhlIHNpemUgb2YgdGhlIGNyb3BwaW5nCityZWN0YW5nbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSA8eHJlZiBsaW5rZW5kPSJjcm9wIiAvPi48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHNpbXVsdGFuZW91cyBjYXB0dXJpbmcgYW5kIG92ZXJsYXkgaXMgc3VwcG9ydGVkIGFuZAordGhlIGhhcmR3YXJlIHByb2hpYml0cyBkaWZmZXJlbnQgaW1hZ2UgYW5kIHdpbmRvdyBzaXplcywgdGhlIHNpemUKK3JlcXVlc3RlZCBmaXJzdCB0YWtlcyBwcmVjZWRlbmNlLiBUaGUgYXR0ZW1wdCB0byBjYXB0dXJlIG9yIG92ZXJsYXkgYXMKK3dlbGwgKCZWSURJT0MtUy1GTVQ7KSBtYXkgZmFpbCB3aXRoIGFuICZFQlVTWTsgb3IgcmV0dXJuIGFjY29yZGluZ2x5Cittb2RpZmllZCBwYXJhbWV0ZXJzLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi13aW5kb3ciPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3dpbmRvdzwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItcmVjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnc8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgd2luZG93IHJlbGF0aXZlIHRvIHRoZQordG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUgZnJhbWUgYnVmZmVyIGRlZmluZWQgd2l0aCAmVklESU9DLVMtRkJVRjsuIFRoZQord2luZG93IGNhbiBleHRlbmQgdGhlIGZyYW1lIGJ1ZmZlciB3aWR0aCBhbmQgaGVpZ2h0LCB0aGUKKzxzdHJ1Y3RmaWVsZD54PC9zdHJ1Y3RmaWVsZD4gYW5kIDxzdHJ1Y3RmaWVsZD55PC9zdHJ1Y3RmaWVsZD4KK2Nvb3JkaW5hdGVzIGNhbiBiZSBuZWdhdGl2ZSwgYW5kIGl0IGNhbiBsaWUgY29tcGxldGVseSBvdXRzaWRlIHRoZQorZnJhbWUgYnVmZmVyLiBUaGUgZHJpdmVyIGNsaXBzIHRoZSB3aW5kb3cgYWNjb3JkaW5nbHksIG9yIGlmIHRoYXQgaXMKK25vdCBwb3NzaWJsZSwgbW9kaWZpZXMgaXRzIHNpemUgYW5kL29yIHBvc2l0aW9uLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1maWVsZDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXBwbGljYXRpb25zIHNldCB0aGlzIGZpZWxkIHRvIGRldGVybWluZSB3aGljaAordmlkZW8gZmllbGQgc2hhbGwgYmUgb3ZlcmxhaWQsIHR5cGljYWxseSBvbmUgb2YKKzxjb25zdGFudD5WNEwyX0ZJRUxEX0FOWTwvY29uc3RhbnQ+ICgwKSwKKzxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfRklFTERfQk9UVE9NPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50Pi4gRHJpdmVycyBtYXkgaGF2ZSB0byBjaG9vc2UKK2EgZGlmZmVyZW50IGZpZWxkIG9yZGVyIGFuZCByZXR1cm4gdGhlIGFjdHVhbCBzZXR0aW5nIGhlcmUuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNocm9tYWtleTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gY2hyb21hLWtleWluZyBoYXMgYmVlbiBuZWdvdGlhdGVkIHdpdGgKKyZWSURJT0MtUy1GQlVGOyBhcHBsaWNhdGlvbnMgc2V0IHRoaXMgZmllbGQgdG8gdGhlIGRlc2lyZWQgcGl4ZWwgdmFsdWUKK2ZvciB0aGUgY2hyb21hIGtleS4gVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZQorZnJhbWVidWZmZXIgKCZ2NGwyLWZyYW1lYnVmZmVyOworPHN0cnVjdGZpZWxkPmZtdC5waXhlbGZvcm1hdDwvc3RydWN0ZmllbGQ+IGZpZWxkKSwgd2l0aCBieXRlcyBpbiBob3N0CitvcmRlci4gRS4mbmJzcDtnLiBmb3IgPGxpbmsKK2xpbmtlbmQ9IlY0TDItUElYLUZNVC1CR1IzMiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+PC9saW5rPgordGhlIHZhbHVlIHNob3VsZCBiZSAweFJSR0dCQiBvbiBhIGxpdHRsZSBlbmRpYW4sIDB4QkJHR1JSIG9uIGEgYmlnCitlbmRpYW4gaG9zdC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItY2xpcDsgKjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2xpcHM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5XaGVuIGNocm9tYS1rZXlpbmcgaGFzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgorYmVlbiBuZWdvdGlhdGVkIGFuZCAmVklESU9DLUctRkJVRjsgaW5kaWNhdGVkIHRoaXMgY2FwYWJpbGl0eSwKK2FwcGxpY2F0aW9ucyBjYW4gc2V0IHRoaXMgZmllbGQgdG8gcG9pbnQgdG8gYW4gYXJyYXkgb2YKK2NsaXBwaW5nIHJlY3RhbmdsZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+TGlrZSB0aGUgd2luZG93IGNvb3JkaW5hdGVzCis8c3RydWN0ZmllbGQ+dzwvc3RydWN0ZmllbGQ+LCBjbGlwcGluZyByZWN0YW5nbGVzIGFyZSBkZWZpbmVkIHJlbGF0aXZlCit0byB0aGUgdG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUgZnJhbWUgYnVmZmVyLiBIb3dldmVyIGNsaXBwaW5nCityZWN0YW5nbGVzIG11c3Qgbm90IGV4dGVuZCB0aGUgZnJhbWUgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHQsIGFuZCB0aGV5CittdXN0IG5vdCBvdmVybGFwLiBJZiBwb3NzaWJsZSBhcHBsaWNhdGlvbnMgc2hvdWxkIG1lcmdlIGFkamFjZW50CityZWN0YW5nbGVzLiBXaGV0aGVyIHRoaXMgbXVzdCBjcmVhdGUgeC15IG9yIHkteCBiYW5kcywgb3IgdGhlIG9yZGVyIG9mCityZWN0YW5nbGVzLCBpcyBub3QgZGVmaW5lZC4gV2hlbiBjbGlwIGxpc3RzIGFyZSBub3Qgc3VwcG9ydGVkIHRoZQorZHJpdmVyIGlnbm9yZXMgdGhpcyBmaWVsZC4gSXRzIGNvbnRlbnRzIGFmdGVyIGNhbGxpbmcgJlZJRElPQy1TLUZNVDsKK2FyZSB1bmRlZmluZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jbGlwY291bnQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5XaGVuIHRoZSBhcHBsaWNhdGlvbiBzZXQgdGhlCis8c3RydWN0ZmllbGQ+Y2xpcHM8L3N0cnVjdGZpZWxkPiBmaWVsZCwgdGhpcyBmaWVsZCBtdXN0IGNvbnRhaW4gdGhlCitudW1iZXIgb2YgY2xpcHBpbmcgcmVjdGFuZ2xlcyBpbiB0aGUgbGlzdC4gV2hlbiBjbGlwIGxpc3RzIGFyZSBub3QKK3N1cHBvcnRlZCB0aGUgZHJpdmVyIGlnbm9yZXMgdGhpcyBmaWVsZCwgaXRzIGNvbnRlbnRzIGFmdGVyIGNhbGxpbmcKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhcmUgdW5kZWZpbmVkLiBXaGVuIGNsaXAgbGlzdHMgYXJlCitzdXBwb3J0ZWQgYnV0IG5vIGNsaXBwaW5nIGlzIGRlc2lyZWQgdGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0bworemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dm9pZCAqPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5iaXRtYXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5XaGVuIGNocm9tYS1rZXlpbmcgaGFzCis8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYmVlbiBuZWdvdGlhdGVkIGFuZCAmVklESU9DLUctRkJVRjsgaW5kaWNhdGVkCit0aGlzIGNhcGFiaWxpdHksIGFwcGxpY2F0aW9ucyBjYW4gc2V0IHRoaXMgZmllbGQgdG8gcG9pbnQgdG8gYQorY2xpcHBpbmcgYml0IG1hc2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+PHBhcmE+SXQgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplCithcyB0aGUgd2luZG93LCA8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPncuaGVpZ2h0PC9zdHJ1Y3RmaWVsZD4uIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgcGl4ZWwKK2luIHRoZSBvdmVybGFpZCBpbWFnZSwgd2hpY2ggaXMgZGlzcGxheWVkIG9ubHkgd2hlbiB0aGUgYml0IGlzCis8ZW1waGFzaXM+c2V0PC9lbXBoYXNpcz4uIFBpeGVsIGNvb3JkaW5hdGVzIHRyYW5zbGF0ZSB0byBiaXRzIGxpa2U6Cis8cHJvZ3JhbWxpc3Rpbmc+CisoKF9fdTggKikgPHN0cnVjdGZpZWxkPmJpdG1hcDwvc3RydWN0ZmllbGQ+KVs8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+ICogeSArIHggLyA4XSAmYW1wOyAoMSAmbHQ7Jmx0OyAoeCAmYW1wOyA3KSk8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT53aGVyZSA8c3RydWN0ZmllbGQ+MDwvc3RydWN0ZmllbGQ+ICZsZTsgeCAmbHQ7Cis8c3RydWN0ZmllbGQ+dy53aWR0aDwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+MDwvc3RydWN0ZmllbGQ+ICZsZTsKK3kgJmx0OzxzdHJ1Y3RmaWVsZD53LmhlaWdodDwvc3RydWN0ZmllbGQ+Ljxmb290bm90ZT4KKwkJICA8cGFyYT5TaG91bGQgd2UgcmVxdWlyZQorCSAgICAgIDxzdHJ1Y3RmaWVsZD53LndpZHRoPC9zdHJ1Y3RmaWVsZD4gdG8gYmUgYSBtdWx0aXBsZSBvZgorCSAgICAgIGVpZ2h0PzwvcGFyYT4KKwkJPC9mb290bm90ZT48L3BhcmE+PHBhcmE+V2hlbiBhIGNsaXBwaW5nCitiaXQgbWFzayBpcyBub3Qgc3VwcG9ydGVkIHRoZSBkcml2ZXIgaWdub3JlcyB0aGlzIGZpZWxkLCBpdHMgY29udGVudHMKK2FmdGVyIGNhbGxpbmcgJlZJRElPQy1TLUZNVDsgYXJlIHVuZGVmaW5lZC4gV2hlbiBhIGJpdCBtYXNrIGlzIHN1cHBvcnRlZAorYnV0IG5vIGNsaXBwaW5nIGlzIGRlc2lyZWQgdGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0bworPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50Pi48L3BhcmE+PHBhcmE+QXBwbGljYXRpb25zIG5lZWQgbm90IGNyZWF0ZSBhCitjbGlwIGxpc3Qgb3IgYml0IG1hc2suIFdoZW4gdGhleSBwYXNzIGJvdGgsIG9yIGRlc3BpdGUgbmVnb3RpYXRpbmcKK2Nocm9tYS1rZXlpbmcsIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuIFJlZ2FyZGxlc3Mgb2YgdGhlIGNob3NlbgorbWV0aG9kLCB0aGUgY2xpcHBpbmcgYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSBtYXkgYmUgbGltaXRlZCBpbgorcXVhbnRpdHkgb3IgcXVhbGl0eS4gVGhlIHJlc3VsdHMgd2hlbiB0aGVzZSBsaW1pdHMgYXJlIGV4Y2VlZGVkIGFyZQordW5kZWZpbmVkLjxmb290bm90ZT4KKwkJICA8cGFyYT5XaGVuIHRoZSBpbWFnZSBpcyB3cml0dGVuIGludG8gZnJhbWUgYnVmZmVyCittZW1vcnkgaXQgd2lsbCBiZSB1bmRlc2lyYWJsZSBpZiB0aGUgZHJpdmVyIGNsaXBzIG91dCBsZXNzIHBpeGVscwordGhhbiBleHBlY3RlZCwgYmVjYXVzZSB0aGUgYXBwbGljYXRpb24gYW5kIGdyYXBoaWNzIHN5c3RlbSBhcmUgbm90Cithd2FyZSB0aGVzZSByZWdpb25zIG5lZWQgdG8gYmUgcmVmcmVzaGVkLiBUaGUgZHJpdmVyIHNob3VsZCBjbGlwIG91dAorbW9yZSBwaXhlbHMgb3Igbm90IHdyaXRlIHRoZSBpbWFnZSBhdCBhbGwuPC9wYXJhPgorCQk8L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Z2xvYmFsX2FscGhhPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGdsb2JhbCBhbHBoYSB2YWx1ZSB1c2VkIHRvIGJsZW5kIHRoZQorZnJhbWVidWZmZXIgd2l0aCB2aWRlbyBpbWFnZXMsIGlmIGdsb2JhbCBhbHBoYSBibGVuZGluZyBoYXMgYmVlbgorbmVnb3RpYXRlZCAoPGNvbnN0YW50PlY0TDJfRkJVRl9GTEFHX0dMT0JBTF9BTFBIQTwvY29uc3RhbnQ+LCBzZWUKKyZWSURJT0MtUy1GQlVGOywgPHhyZWYgbGlua2VuZD0iZnJhbWVidWZmZXItZmxhZ3MiIC8+KS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5Ob3RlIHRoaXMgZmllbGQgd2FzIGFkZGVkIGluIExpbnV4IDIuNi4yMywgZXh0ZW5kaW5nIHRoZSBzdHJ1Y3R1cmUuIEhvd2V2ZXIKK3RoZSA8bGluayBsaW5rZW5kPSJ2aWRpb2MtZy1mbXQiPlZJRElPQ19HL1MvVFJZX0ZNVDwvbGluaz4gaW9jdGxzLAord2hpY2ggdGFrZSBhIHBvaW50ZXIgdG8gYSA8bGluaworbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPiBwYXJlbnQgc3RydWN0dXJlIHdpdGggcGFkZGluZworYnl0ZXMgYXQgdGhlIGVuZCwgYXJlIG5vdCBhZmZlY3RlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItY2xpcCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfY2xpcDwvc3RydWN0bmFtZT48Zm9vdG5vdGU+CisJICA8cGFyYT5UaGUgWCBXaW5kb3cgc3lzdGVtIGRlZmluZXMgInJlZ2lvbnMiIHdoaWNoIGFyZQordmVjdG9ycyBvZiBzdHJ1Y3QgQm94UmVjIHsgc2hvcnQgeDEsIHkxLCB4MiwgeTI7IH0gd2l0aCB3aWR0aCA9IHgyIC0KK3gxIGFuZCBoZWlnaHQgPSB5MiAtIHkxLCBzbyBvbmUgY2Fubm90IHBhc3MgWDExIGNsaXAgbGlzdHMKK2RpcmVjdGx5LjwvcGFyYT4KKwk8L2Zvb3Rub3RlPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1yZWN0OzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Yzwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvb3JkaW5hdGVzIG9mIHRoZSBjbGlwcGluZyByZWN0YW5nbGUsIHJlbGF0aXZlIHRvCit0aGUgdG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUgZnJhbWUgYnVmZmVyLiBPbmx5IHdpbmRvdyBwaXhlbHMKKzxlbXBoYXNpcz5vdXRzaWRlPC9lbXBoYXNpcz4gYWxsIGNsaXBwaW5nIHJlY3RhbmdsZXMgYXJlCitkaXNwbGF5ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWNsaXA7ICo8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5leHQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Qb2ludGVyIHRvIHRoZSBuZXh0IGNsaXBwaW5nIHJlY3RhbmdsZSwgTlVMTCB3aGVuCit0aGlzIGlzIHRoZSBsYXN0IHJlY3RhbmdsZS4gRHJpdmVycyBpZ25vcmUgdGhpcyBmaWVsZCwgaXQgY2Fubm90IGJlCit1c2VkIHRvIHBhc3MgYSBsaW5rZWQgbGlzdCBvZiBjbGlwcGluZyByZWN0YW5nbGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gTkIgZm9yIGVhc2llciByZWFkaW5nIHRoaXMgdGFibGUgaXMgZHVwbGljYXRlZAorICAgIGluIHRoZSB2aWRpb2MtY3JvcGNhcCBjaGFwdGVyLi0tPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXJlY3QiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3JlY3Q8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5sZWZ0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIHRvcCwgbGVmdCBjb3JuZXIgb2YgdGhlCityZWN0YW5nbGUsIGluIHBpeGVscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRvcDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlZlcnRpY2FsIG9mZnNldCBvZiB0aGUgdG9wLCBsZWZ0IGNvcm5lciBvZiB0aGUKK3JlY3RhbmdsZSwgaW4gcGl4ZWxzLiBPZmZzZXRzIGluY3JlYXNlIHRvIHRoZSByaWdodCBhbmQgZG93bi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2lkdGggb2YgdGhlIHJlY3RhbmdsZSwgaW4gcGl4ZWxzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3MzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUsIGluIHBpeGVscy4gV2lkdGggYW5kCitoZWlnaHQgY2Fubm90IGJlIG5lZ2F0aXZlLCB0aGUgZmllbGRzIGFyZSBzaWduZWQgZm9yIGh5c3RlcmljYWwKK3JlYXNvbnMuIDwhLS0gdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tIG9uIDIyIE9jdCAyMDAyIHN1YmplY3QKKyJSZTpbVjRMXVtwYXRjaGVzIV0gUmU6djRsMi9rZXJuZWwtMi41IiAtLT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+RW5hYmxpbmcgT3ZlcmxheTwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBzdGFydCBvciBzdG9wIHRoZSBmcmFtZSBidWZmZXIgb3ZlcmxheSBhcHBsaWNhdGlvbnMgY2FsbAordGhlICZWSURJT0MtT1ZFUkxBWTsgaW9jdGwuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYWRpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYWRpby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhYTkwYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXJhZGlvLnhtbApAQCAtMCwwICsxLDU3IEBACisgIDx0aXRsZT5SYWRpbyBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlRoaXMgaW50ZXJmYWNlIGlzIGludGVuZGVkIGZvciBBTSBhbmQgRk0gKGFuYWxvZykgcmFkaW8KK3JlY2VpdmVycyBhbmQgdHJhbnNtaXR0ZXJzLjwvcGFyYT4KKworICA8cGFyYT5Db252ZW50aW9uYWxseSBWNEwyIHJhZGlvIGRldmljZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2gKK2NoYXJhY3RlciBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBuYW1lZCA8ZmlsZW5hbWU+L2Rldi9yYWRpbzwvZmlsZW5hbWU+CithbmQgPGZpbGVuYW1lPi9kZXYvcmFkaW8wPC9maWxlbmFtZT4gdG8KKzxmaWxlbmFtZT4vZGV2L3JhZGlvNjM8L2ZpbGVuYW1lPiB3aXRoIG1ham9yIG51bWJlciA4MSBhbmQgbWlub3IKK251bWJlcnMgNjQgdG8gMTI3LjwvcGFyYT4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UXVlcnlpbmcgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKworICAgIDxwYXJhPkRldmljZXMgc3VwcG9ydGluZyB0aGUgcmFkaW8gaW50ZXJmYWNlIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0NBUF9SQURJTzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfQ0FQX1RVTkVSPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0NBUF9NT0RVTEFUT1I8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIE90aGVyIGNvbWJpbmF0aW9ucyBvZgorY2FwYWJpbGl0eSBmbGFncyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5TdXBwbGVtZW50YWwgRnVuY3Rpb25zPC90aXRsZT4KKworICAgIDxwYXJhPlJhZGlvIGRldmljZXMgY2FuIHN1cHBvcnQgPGxpbmsKK2xpbmtlbmQ9ImNvbnRyb2wiPmNvbnRyb2xzPC9saW5rPiwgYW5kIG11c3Qgc3VwcG9ydCB0aGUgPGxpbmsKK2xpbmtlbmQ9InR1bmVyIj50dW5lciBvciBtb2R1bGF0b3I8L2xpbms+IGlvY3Rscy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGV5IGRvIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyBpbnB1dCBvciBvdXRwdXQsIGF1ZGlvIGlucHV0CitvciBvdXRwdXQsIHZpZGVvIHN0YW5kYXJkLCBjcm9wcGluZyBhbmQgc2NhbGluZywgY29tcHJlc3Npb24gYW5kCitzdHJlYW1pbmcgcGFyYW1ldGVyLCBvciBvdmVybGF5IGlvY3Rscy4gQWxsIG90aGVyIGlvY3RscyBhbmQgSS9PCittZXRob2RzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlByb2dyYW1taW5nPC90aXRsZT4KKworICAgIDxwYXJhPlJhZGlvIGRldmljZXMgbWF5IGhhdmUgYSBjb3VwbGUgYXVkaW8gY29udHJvbHMgKGFzIGRpc2N1c3NlZAoraW4gPHhyZWYgbGlua2VuZD0iY29udHJvbCIgLz4pIHN1Y2ggYXMgYSB2b2x1bWUgY29udHJvbCwgcG9zc2libHkgY3VzdG9tCitjb250cm9scy4gRnVydGhlciBhbGwgcmFkaW8gZGV2aWNlcyBoYXZlIG9uZSB0dW5lciBvciBtb2R1bGF0b3IgKHRoZXNlIGFyZQorZGlzY3Vzc2VkIGluIDx4cmVmIGxpbmtlbmQ9InR1bmVyIiAvPikgd2l0aCBpbmRleCBudW1iZXIgemVybyB0byBzZWxlY3QKK3RoZSByYWRpbyBmcmVxdWVuY3kgYW5kIHRvIGRldGVybWluZSBpZiBhIG1vbmF1cmFsIG9yIEZNIHN0ZXJlbworcHJvZ3JhbSBpcyByZWNlaXZlZC9lbWl0dGVkLiBEcml2ZXJzIHN3aXRjaCBhdXRvbWF0aWNhbGx5IGJldHdlZW4gQU0gYW5kIEZNCitkZXBlbmRpbmcgb24gdGhlIHNlbGVjdGVkIGZyZXF1ZW5jeS4gVGhlICZWSURJT0MtRy1UVU5FUjsgb3IKKyZWSURJT0MtRy1NT0RVTEFUT1I7IGlvY3RsCityZXBvcnRzIHRoZSBzdXBwb3J0ZWQgZnJlcXVlbmN5IHJhbmdlLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtcmF3LXZiaS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYXctdmJpLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWE3MGJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtcmF3LXZiaS54bWwKQEAgLTAsMCArMSwzNDcgQEAKKyAgPHRpdGxlPlJhdyBWQkkgRGF0YSBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlZCSSBpcyBhbiBhYmJyZXZpYXRpb24gb2YgVmVydGljYWwgQmxhbmtpbmcgSW50ZXJ2YWwsIGEgZ2FwCitpbiB0aGUgc2VxdWVuY2Ugb2YgbGluZXMgb2YgYW4gYW5hbG9nIHZpZGVvIHNpZ25hbC4gRHVyaW5nIFZCSQorbm8gcGljdHVyZSBpbmZvcm1hdGlvbiBpcyB0cmFuc21pdHRlZCwgYWxsb3dpbmcgc29tZSB0aW1lIHdoaWxlIHRoZQorZWxlY3Ryb24gYmVhbSBvZiBhIGNhdGhvZGUgcmF5IHR1YmUgVFYgcmV0dXJucyB0byB0aGUgdG9wIG9mIHRoZQorc2NyZWVuLiBVc2luZyBhbiBvc2NpbGxvc2NvcGUgeW91IHdpbGwgZmluZCBoZXJlIHRoZSB2ZXJ0aWNhbAorc3luY2hyb25pemF0aW9uIHB1bHNlcyBhbmQgc2hvcnQgZGF0YSBwYWNrYWdlcyBBU0sKK21vZHVsYXRlZDxmb290bm90ZT48cGFyYT5BU0s6IEFtcGxpdHVkZS1TaGlmdCBLZXlpbmcuIEEgaGlnaCBzaWduYWwKK2xldmVsIHJlcHJlc2VudHMgYSAnMScgYml0LCBhIGxvdyBsZXZlbCBhICcwJyBiaXQuPC9wYXJhPjwvZm9vdG5vdGU+CitvbnRvIHRoZSB2aWRlbyBzaWduYWwuIFRoZXNlIGFyZSB0cmFuc21pc3Npb25zIG9mIHNlcnZpY2VzIHN1Y2ggYXMKK1RlbGV0ZXh0IG9yIENsb3NlZCBDYXB0aW9uLjwvcGFyYT4KKworICA8cGFyYT5TdWJqZWN0IG9mIHRoaXMgaW50ZXJmYWNlIHR5cGUgaXMgcmF3IFZCSSBkYXRhLCBhcyBzYW1wbGVkIG9mZgorYSB2aWRlbyBzaWduYWwsIG9yIHRvIGJlIGFkZGVkIHRvIGEgc2lnbmFsIGZvciBvdXRwdXQuCitUaGUgZGF0YSBmb3JtYXQgaXMgc2ltaWxhciB0byB1bmNvbXByZXNzZWQgdmlkZW8gaW1hZ2VzLCBhIG51bWJlciBvZgorbGluZXMgdGltZXMgYSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgbGluZSwgd2UgY2FsbCB0aGlzIGEgVkJJIGltYWdlLjwvcGFyYT4KKworICA8cGFyYT5Db252ZW50aW9uYWxseSBWNEwyIFZCSSBkZXZpY2VzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIGNoYXJhY3RlcgorZGV2aWNlIHNwZWNpYWwgZmlsZXMgbmFtZWQgPGZpbGVuYW1lPi9kZXYvdmJpPC9maWxlbmFtZT4gYW5kCis8ZmlsZW5hbWU+L2Rldi92YmkwPC9maWxlbmFtZT4gdG8gPGZpbGVuYW1lPi9kZXYvdmJpMzE8L2ZpbGVuYW1lPiB3aXRoCittYWpvciBudW1iZXIgODEgYW5kIG1pbm9yIG51bWJlcnMgMjI0IHRvIDI1NS4KKzxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+IGlzIHR5cGljYWxseSBhIHN5bWJvbGljIGxpbmsgdG8gdGhlCitwcmVmZXJyZWQgVkJJIGRldmljZS4gVGhpcyBjb252ZW50aW9uIGFwcGxpZXMgdG8gYm90aCBpbnB1dCBhbmQgb3V0cHV0CitkZXZpY2VzLjwvcGFyYT4KKworICA8cGFyYT5UbyBhZGRyZXNzIHRoZSBwcm9ibGVtcyBvZiBmaW5kaW5nIHJlbGF0ZWQgdmlkZW8gYW5kIFZCSQorZGV2aWNlcyBWQkkgY2FwdHVyaW5nIGFuZCBvdXRwdXQgaXMgYWxzbyBhdmFpbGFibGUgYXMgZGV2aWNlIGZ1bmN0aW9uCit1bmRlciA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+LiBUbyBjYXB0dXJlIG9yIG91dHB1dCByYXcgVkJJCitkYXRhIHdpdGggdGhlc2UgZGV2aWNlcyBhcHBsaWNhdGlvbnMgbXVzdCBjYWxsIHRoZSAmVklESU9DLVMtRk1UOworaW9jdGwuIEFjY2Vzc2VkIGFzIDxmaWxlbmFtZT4vZGV2L3ZiaTwvZmlsZW5hbWU+LCByYXcgVkJJIGNhcHR1cmluZworb3Igb3V0cHV0IGlzIHRoZSBkZWZhdWx0IGRldmljZSBmdW5jdGlvbi48L3BhcmE+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5EZXZpY2VzIHN1cHBvcnRpbmcgdGhlIHJhdyBWQkkgY2FwdHVyaW5nIG9yIG91dHB1dCBBUEkgc2V0Cit0aGUgPGNvbnN0YW50PlY0TDJfQ0FQX1ZCSV9DQVBUVVJFPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0NBUF9WQklfT1VUUFVUPC9jb25zdGFudD4gZmxhZ3MsIHJlc3BlY3RpdmVseSwgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4gQXQgbGVhc3Qgb25lIG9mIHRoZQorcmVhZC93cml0ZSwgc3RyZWFtaW5nIG9yIGFzeW5jaHJvbm91cyBJL08gbWV0aG9kcyBtdXN0IGJlCitzdXBwb3J0ZWQuIFZCSSBkZXZpY2VzIG1heSBvciBtYXkgbm90IGhhdmUgYSB0dW5lciBvciBtb2R1bGF0b3IuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlN1cHBsZW1lbnRhbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICA8cGFyYT5WQkkgZGV2aWNlcyBzaGFsbCBzdXBwb3J0IDxsaW5rIGxpbmtlbmQ9InZpZGVvIj52aWRlbworaW5wdXQgb3Igb3V0cHV0PC9saW5rPiwgPGxpbmsgbGlua2VuZD0idHVuZXIiPnR1bmVyIG9yCittb2R1bGF0b3I8L2xpbms+LCBhbmQgPGxpbmsgbGlua2VuZD0iY29udHJvbCI+Y29udHJvbHM8L2xpbms+IGlvY3RscworYXMgbmVlZGVkLiBUaGUgPGxpbmsgbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgcHJvdmlkZQoraW5mb3JtYXRpb24gdml0YWwgdG8gcHJvZ3JhbSBhIFZCSSBkZXZpY2UsIHRoZXJlZm9yZSBtdXN0IGJlCitzdXBwb3J0ZWQuPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlJhdyBWQkkgRm9ybWF0IE5lZ290aWF0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+UmF3IFZCSSBzYW1wbGluZyBhYmlsaXRpZXMgY2FuIHZhcnksIGluIHBhcnRpY3VsYXIgdGhlCitzYW1wbGluZyBmcmVxdWVuY3kuIFRvIHByb3Blcmx5IGludGVycHJldCB0aGUgZGF0YSBWNEwyIHNwZWNpZmllcyBhbgoraW9jdGwgdG8gcXVlcnkgdGhlIHNhbXBsaW5nIHBhcmFtZXRlcnMuIE1vcmVvdmVyLCB0byBhbGxvdyBmb3Igc29tZQorZmxleGliaWxpdHkgYXBwbGljYXRpb25zIGNhbiBhbHNvIHN1Z2dlc3QgZGlmZmVyZW50IHBhcmFtZXRlcnMuPC9wYXJhPgorCisgICAgICA8cGFyYT5BcyB1c3VhbCB0aGVzZSBwYXJhbWV0ZXJzIGFyZSA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4KK3Jlc2V0IGF0ICZmdW5jLW9wZW47IHRpbWUgdG8gcGVybWl0IFVuaXggdG9vbCBjaGFpbnMsIHByb2dyYW1taW5nIGEKK2RldmljZSBhbmQgdGhlbiByZWFkaW5nIGZyb20gaXQgYXMgaWYgaXQgd2FzIGEgcGxhaW4gZmlsZS4gV2VsbAord3JpdHRlbiBWNEwyIGFwcGxpY2F0aW9ucyBzaG91bGQgYWx3YXlzIGVuc3VyZSB0aGV5IHJlYWxseSBnZXQgd2hhdAordGhleSB3YW50LCByZXF1ZXN0aW5nIHJlYXNvbmFibGUgcGFyYW1ldGVycyBhbmQgdGhlbiBjaGVja2luZyBpZiB0aGUKK2FjdHVhbCBwYXJhbWV0ZXJzIGFyZSBzdWl0YWJsZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBjdXJyZW50IHJhdyBWQkkgY2FwdHVyZSBwYXJhbWV0ZXJzCithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKyZ2NGwyLWZvcm1hdDsgdG8gPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+LCBhbmQgY2FsbCB0aGUKKyZWSURJT0MtRy1GTVQ7IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwKK3RoZSAmdjRsMi12YmktZm9ybWF0OyA8c3RydWN0ZmllbGQ+dmJpPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLjwvcGFyYT4KKworICAgICAgPHBhcmE+VG8gcmVxdWVzdCBkaWZmZXJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLWZvcm1hdDsgYXMgYWJvdmUgYW5kCitpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgdGhlICZ2NGwyLXZiaS1mb3JtYXQ7Cis8c3RydWN0ZmllbGQ+dmJpPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIG9mIHRoZQorPHN0cnVjdGZpZWxkPmZtdDwvc3RydWN0ZmllbGQ+IHVuaW9uLCBvciBiZXR0ZXIganVzdCBtb2RpZnkgdGhlCityZXN1bHRzIG9mIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiwgYW5kIGNhbGwgdGhlCismVklESU9DLVMtRk1UOyBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyByZXR1cm4KK2FuICZFSU5WQUw7IG9ubHkgd2hlbiB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhcmUgYW1iaWd1b3VzLCBvdGhlcndpc2UKK3RoZXkgbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0ZXMgYW5kCityZXR1cm4gdGhlIGFjdHVhbCBwYXJhbWV0ZXJzLiBXaGVuIHRoZSBkcml2ZXIgYWxsb2NhdGVzIHJlc291cmNlcyBhdAordGhpcyBwb2ludCwgaXQgbWF5IHJldHVybiBhbiAmRUJVU1k7IHRvIGluZGljYXRlIHRoZSByZXR1cm5lZAorcGFyYW1ldGVycyBhcmUgdmFsaWQgYnV0IHRoZSByZXF1aXJlZCByZXNvdXJjZXMgYXJlIGN1cnJlbnRseSBub3QKK2F2YWlsYWJsZS4gVGhhdCBtYXkgaGFwcGVuIGZvciBpbnN0YW5jZSB3aGVuIHRoZSB2aWRlbyBhbmQgVkJJIGFyZWFzCit0byBjYXB0dXJlIHdvdWxkIG92ZXJsYXAsIG9yIHdoZW4gdGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBvcGVucworYW5kIGFub3RoZXIgcHJvY2VzcyBhbHJlYWR5IHJlcXVlc3RlZCBWQkkgY2FwdHVyaW5nIG9yIG91dHB1dC4gQW55d2F5LAorYXBwbGljYXRpb25zIG11c3QgZXhwZWN0IG90aGVyIHJlc291cmNlIGFsbG9jYXRpb24gcG9pbnRzIHdoaWNoIG1heQorcmV0dXJuIDxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT4sIGF0IHRoZSAmVklESU9DLVNUUkVBTU9OOyBpb2N0bAorYW5kIHRoZSBmaXJzdCByZWFkKCksIHdyaXRlKCkgYW5kIHNlbGVjdCgpIGNhbGwuPC9wYXJhPgorCisgICAgICA8cGFyYT5WQkkgZGV2aWNlcyBtdXN0IGltcGxlbWVudCBib3RoIHRoZQorPGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsLCBldmVuIGlmCis8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaWdub3JlcyBhbGwgcmVxdWVzdHMgYW5kIGFsd2F5cworcmV0dXJucyBkZWZhdWx0IHBhcmFtZXRlcnMgYXMgPGNvbnN0YW50PlZJRElPQ19HX0ZNVDwvY29uc3RhbnQ+IGRvZXMuCis8Y29uc3RhbnQ+VklESU9DX1RSWV9GTVQ8L2NvbnN0YW50PiBpcyBvcHRpb25hbC48L3BhcmE+CisKKyAgICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi12YmktZm9ybWF0Ij4KKwk8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfdmJpX2Zvcm1hdDwvc3RydWN0bmFtZT48L3RpdGxlPgorCTx0Z3JvdXAgY29scz0iMyI+CisJICAmY3Mtc3RyOworCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2FtcGxpbmdfcmF0ZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+U2FtcGxlcyBwZXIgc2Vjb25kLCBpLiZuYnNwO2UuIHVuaXQgMSBIei48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT48cGFyYT5Ib3Jpem9udGFsIG9mZnNldCBvZiB0aGUgVkJJIGltYWdlLAorcmVsYXRpdmUgdG8gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgbGluZSBzeW5jaHJvbml6YXRpb24gcHVsc2UgYW5kCitjb3VudGVkIGluIHNhbXBsZXM6IFRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIFZCSSBpbWFnZSB3aWxsIGJlIGxvY2F0ZWQKKzxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPiAvCis8c3RydWN0ZmllbGQ+c2FtcGxpbmdfcmF0ZTwvc3RydWN0ZmllbGQ+IHNlY29uZHMgZm9sbG93aW5nIHRoZSBsZWFkaW5nCitlZGdlLiBTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJ2YmktaHN5bmMiIC8+LjwvcGFyYT48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2FtcGxlc19wZXJfbGluZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNhbXBsZV9mb3JtYXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPkRlZmluZXMgdGhlIHNhbXBsZSBmb3JtYXQgYXMgaW4gPHhyZWYKK2xpbmtlbmQ9InBpeGZtdCIgLz4sIGEgZm91ci1jaGFyYWN0ZXItY29kZS48Zm9vdG5vdGU+CisJCSAgICA8cGFyYT5BIGZldyBkZXZpY2VzIG1heSBiZSB1bmFibGUgdG8KK3NhbXBsZSBWQkkgZGF0YSBhdCBhbGwgYnV0IGNhbiBleHRlbmQgdGhlIHZpZGVvIGNhcHR1cmUgd2luZG93IHRvIHRoZQorVkJJIHJlZ2lvbi48L3BhcmE+CisJCSAgPC9mb290bm90ZT4gVXN1YWxseSB0aGlzIGlzCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0dSRVk8L2NvbnN0YW50PiwgaS4mbmJzcDtlLiBlYWNoIHNhbXBsZQorY29uc2lzdHMgb2YgOCBiaXRzIHdpdGggbG93ZXIgdmFsdWVzIG9yaWVudGVkIHRvd2FyZHMgdGhlIGJsYWNrIGxldmVsLgorRG8gbm90IGFzc3VtZSBhbnkgb3RoZXIgY29ycmVsYXRpb24gb2YgdmFsdWVzIHdpdGggdGhlIHNpZ25hbCBsZXZlbC4KK0ZvciBleGFtcGxlLCB0aGUgTVNCIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGluZGljYXRlIGlmIHRoZSBzaWduYWwgaXMKKydoaWdoJyBvciAnbG93JyBiZWNhdXNlIDEyOCBtYXkgbm90IGJlIHRoZSBtZWFuIHZhbHVlIG9mIHRoZQorc2lnbmFsLiBEcml2ZXJzIHNoYWxsIG5vdCBjb252ZXJ0IHRoZSBzYW1wbGUgZm9ybWF0IGJ5IHNvZnR3YXJlLjwvcGFyYT48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RhcnQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CisJICAgICAgPGVudHJ5PlRoaXMgaXMgdGhlIHNjYW5uaW5nIHN5c3RlbSBsaW5lIG51bWJlcgorYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBWQkkgaW1hZ2UsIG9mIHRoZSBmaXJzdCBhbmQgdGhlCitzZWNvbmQgZmllbGQgcmVzcGVjdGl2ZWx5LiBTZWUgPHhyZWYgbGlua2VuZD0idmJpLTUyNSIgLz4gYW5kCis8eHJlZiBsaW5rZW5kPSJ2YmktNjI1IiAvPiBmb3IgdmFsaWQgdmFsdWVzLiBWQkkgaW5wdXQgZHJpdmVycyBjYW4KK3JldHVybiBzdGFydCB2YWx1ZXMgMCBpZiB0aGUgaGFyZHdhcmUgY2Fubm90IHJlbGlhYmxlIGlkZW50aWZ5CitzY2FubmluZyBsaW5lcywgVkJJIGFjcXVpc2l0aW9uIG1heSBub3QgcmVxdWlyZSB0aGlzCitpbmZvcm1hdGlvbi48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CisJICAgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQKK2ZpZWxkIGltYWdlLCByZXNwZWN0aXZlbHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+PHBhcmE+RHJpdmVycyBzaG91bGQgYmUgYXMKK2ZsZXhpYmlsaXR5IGFzIHBvc3NpYmxlLiBGb3IgZXhhbXBsZSwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIGV4dGVuZCBvcgorbW92ZSB0aGUgVkJJIGNhcHR1cmUgd2luZG93IGRvd24gdG8gdGhlIHBpY3R1cmUgYXJlYSwgaW1wbGVtZW50aW5nIGEKKydmdWxsIGZpZWxkIG1vZGUnIHRvIGNhcHR1cmUgZGF0YSBzZXJ2aWNlIHRyYW5zbWlzc2lvbnMgZW1iZWRkZWQgaW4KK3RoZSBwaWN0dXJlLjwvcGFyYT48cGFyYT5BbiBhcHBsaWNhdGlvbiBjYW4gc2V0IHRoZSBmaXJzdCBvciBzZWNvbmQKKzxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IHZhbHVlIHRvIHplcm8gaWYgbm8gZGF0YSBpcyByZXF1aXJlZAorZnJvbSB0aGUgcmVzcGVjdGl2ZSBmaWVsZDsgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD5bMV0gaWYgdGhlCitzY2FubmluZyBzeXN0ZW0gaXMgcHJvZ3Jlc3NpdmUsICZpZTsgbm90IGludGVybGFjZWQuIFRoZQorY29ycmVzcG9uZGluZyBzdGFydCB2YWx1ZSBzaGFsbCBiZSBpZ25vcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQKK2RyaXZlci4gQW55d2F5LCBkcml2ZXJzIG1heSBub3Qgc3VwcG9ydCBzaW5nbGUgZmllbGQgY2FwdHVyaW5nIGFuZAorcmV0dXJuIGJvdGggY291bnQgdmFsdWVzIG5vbi16ZXJvLjwvcGFyYT48cGFyYT5Cb3RoCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgc2V0IHRvIHplcm8sIG9yIGxpbmUgbnVtYmVycworb3V0c2lkZSB0aGUgYm91bmRzIGRlcGljdGVkIGluIDx4cmVmIGxpbmtlbmQ9InZiaS01MjUiIC8+IGFuZCA8eHJlZgorCQkgICAgbGlua2VuZD0idmJpLTYyNSIgLz4sIG9yIGEgZmllbGQgaW1hZ2UgY292ZXJpbmcKK2xpbmVzIG9mIHR3byBmaWVsZHMsIGFyZSBpbnZhbGlkIGFuZCBzaGFsbCBub3QgYmUgcmV0dXJuZWQgYnkgdGhlCitkcml2ZXIuPC9wYXJhPjxwYXJhPlRvIGluaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5zdGFydDwvc3RydWN0ZmllbGQ+CithbmQgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGRzLCBhcHBsaWNhdGlvbnMgbXVzdCBmaXJzdAorZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkIHNlbGVjdGlvbi4gVGhlICZ2NGwyLXN0ZC1pZDsgb3IKK3RoZSA8c3RydWN0ZmllbGQ+ZnJhbWVsaW5lczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLXN0YW5kYXJkOyBjYW4KK2JlIGV2YWx1YXRlZCBmb3IgdGhpcyBwdXJwb3NlLjwvcGFyYT48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPGVudHJ5PlNlZSA8eHJlZiBsaW5rZW5kPSJ2YmlmbXQtZmxhZ3MiIC8+IGJlbG93LiBDdXJyZW50bHkKK29ubHkgZHJpdmVycyBzZXQgZmxhZ3MsIGFwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvCit6ZXJvLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzJdPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+VGhpcyBhcnJheSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuCitEcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgbXVzdCBzZXQgaXQgdG8gemVyby48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InZiaWZtdC1mbGFncyI+CisJPHRpdGxlPlJhdyBWQkkgRm9ybWF0IEZsYWdzPC90aXRsZT4KKwk8dGdyb3VwIGNvbHM9IjMiPgorCSAgJmNzLWRlZjsKKwkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1ZCSV9VTlNZTkM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgICAgPGVudHJ5PjxwYXJhPlRoaXMgZmxhZyBpbmRpY2F0ZXMgaGFyZHdhcmUgd2hpY2ggZG9lcyBub3QKK3Byb3Blcmx5IGRpc3Rpbmd1aXNoIGJldHdlZW4gZmllbGRzLiBOb3JtYWxseSB0aGUgVkJJIGltYWdlIHN0b3JlcyB0aGUKK2ZpcnN0IGZpZWxkIChsb3dlciBzY2FubmluZyBsaW5lIG51bWJlcnMpIGZpcnN0IGluIG1lbW9yeS4gVGhpcyBtYXkgYmUKK2EgdG9wIG9yIGJvdHRvbSBmaWVsZCBkZXBlbmRpbmcgb24gdGhlIHZpZGVvIHN0YW5kYXJkLiBXaGVuIHRoaXMgZmxhZworaXMgc2V0IHRoZSBmaXJzdCBvciBzZWNvbmQgZmllbGQgbWF5IGJlIHN0b3JlZCBmaXJzdCwgaG93ZXZlciB0aGUKK2ZpZWxkcyBhcmUgc3RpbGwgaW4gY29ycmVjdCB0ZW1wb3JhbCBvcmRlciB3aXRoIHRoZSBvbGRlciBmaWVsZCBmaXJzdAoraW4gbWVtb3J5Ljxmb290bm90ZT4KKwkJICA8cGFyYT5Nb3N0IFZCSSBzZXJ2aWNlcyB0cmFuc21pdCBvbiBib3RoIGZpZWxkcywgYnV0Citzb21lIGhhdmUgZGlmZmVyZW50IHNlbWFudGljcyBkZXBlbmRpbmcgb24gdGhlIGZpZWxkIG51bWJlci4gVGhlc2UKK2Nhbm5vdCBiZSByZWxpYWJsZSBkZWNvZGVkIG9yIGVuY29kZWQgd2hlbgorPGNvbnN0YW50PlY0TDJfVkJJX1VOU1lOQzwvY29uc3RhbnQ+IGlzIHNldC48L3BhcmE+CisJCTwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9WQklfSU5URVJMQUNFRDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+QnkgZGVmYXVsdCB0aGUgdHdvIGZpZWxkIGltYWdlcyB3aWxsIGJlIHBhc3NlZAorc2VxdWVudGlhbGx5OyBhbGwgbGluZXMgb2YgdGhlIGZpcnN0IGZpZWxkIGZvbGxvd2VkIGJ5IGFsbCBsaW5lcyBvZgordGhlIHNlY29uZCBmaWVsZCAoY29tcGFyZSA8eHJlZiBsaW5rZW5kPSJmaWVsZC1vcmRlciIgLz4KKzxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9UQjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfRklFTERfU0VRX0JUPC9jb25zdGFudD4sIHdoZXRoZXIgdGhlIHRvcCBvciBib3R0b20KK2ZpZWxkIGlzIGZpcnN0IGluIG1lbW9yeSBkZXBlbmRzIG9uIHRoZSB2aWRlbyBzdGFuZGFyZCkuIFdoZW4gdGhpcworZmxhZyBpcyBzZXQsIHRoZSB0d28gZmllbGRzIGFyZSBpbnRlcmxhY2VkIChjZi4KKzxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50PikuIFRoZSBmaXJzdCBsaW5lIG9mIHRoZQorZmlyc3QgZmllbGQgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNlY29uZCBmaWVsZCwgdGhlbiB0aGUKK3R3byBzZWNvbmQgbGluZXMsIGFuZCBzbyBvbi4gU3VjaCBhIGxheW91dCBtYXkgYmUgbmVjZXNzYXJ5IHdoZW4gdGhlCitoYXJkd2FyZSBoYXMgYmVlbiBwcm9ncmFtbWVkIHRvIGNhcHR1cmUgb3Igb3V0cHV0IGludGVybGFjZWQgdmlkZW8KK2ltYWdlcyBhbmQgaXMgdW5hYmxlIHRvIHNlcGFyYXRlIHRoZSBmaWVsZHMgZm9yIFZCSSBjYXB0dXJpbmcgYXQKK3RoZSBzYW1lIHRpbWUuIEZvciBzaW1wbGljaXR5IHNldHRpbmcgdGhpcyBmbGFnIGltcGxpZXMgdGhhdCBib3RoCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgYXJlIGVxdWFsIGFuZCBub24temVyby48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8ZmlndXJlIGlkPSJ2YmktaHN5bmMiPgorCTx0aXRsZT5MaW5lIHN5bmNocm9uaXphdGlvbjwvdGl0bGU+CisJPG1lZGlhb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9InZiaV9oc3luYy5wZGYiIGZvcm1hdD0iUFMiIC8+CisJICA8L2ltYWdlb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9InZiaV9oc3luYy5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDx0ZXh0b2JqZWN0PgorCSAgICA8cGhyYXNlPkxpbmUgc3luY2hyb25pemF0aW9uIGRpYWdyYW08L3BocmFzZT4KKwkgIDwvdGV4dG9iamVjdD4KKwk8L21lZGlhb2JqZWN0PgorICAgICAgPC9maWd1cmU+CisKKyAgICAgIDxmaWd1cmUgaWQ9InZiaS01MjUiPgorCTx0aXRsZT5JVFUtUiA1MjUgbGluZSBudW1iZXJpbmcgKE0vTlRTQyBhbmQgTS9QQUwpPC90aXRsZT4KKwk8bWVkaWFvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0idmJpXzUyNS5wZGYiIGZvcm1hdD0iUFMiIC8+CisJICA8L2ltYWdlb2JqZWN0PgorCSAgPGltYWdlb2JqZWN0PgorCSAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9InZiaV81MjUuZ2lmIiBmb3JtYXQ9IkdJRiIgLz4KKwkgIDwvaW1hZ2VvYmplY3Q+CisJICA8dGV4dG9iamVjdD4KKwkgICAgPHBocmFzZT5OVFNDIGZpZWxkIHN5bmNocm9uaXphdGlvbiBkaWFncmFtPC9waHJhc2U+CisJICA8L3RleHRvYmplY3Q+CisJICA8Y2FwdGlvbj4KKwkgICAgPHBhcmE+KDEpIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljYXRpb24gZmllbGQgMgorc3RhcnRzIGluIGxpbmUgMjY0IGFuZCBub3QgMjYzLjUgYmVjYXVzZSBoYWxmIGxpbmUgY2FwdHVyaW5nIGlzIG5vdAorc3VwcG9ydGVkLjwvcGFyYT4KKwkgIDwvY2FwdGlvbj4KKwk8L21lZGlhb2JqZWN0PgorICAgICAgPC9maWd1cmU+CisKKyAgICAgIDxmaWd1cmUgaWQ9InZiaS02MjUiPgorCTx0aXRsZT5JVFUtUiA2MjUgbGluZSBudW1iZXJpbmc8L3RpdGxlPgorCTxtZWRpYW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJ2YmlfNjI1LnBkZiIgZm9ybWF0PSJQUyIgLz4KKwkgIDwvaW1hZ2VvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0idmJpXzYyNS5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDx0ZXh0b2JqZWN0PgorCSAgICA8cGhyYXNlPlBBTC9TRUNBTSBmaWVsZCBzeW5jaHJvbml6YXRpb24gZGlhZ3JhbTwvcGhyYXNlPgorCSAgPC90ZXh0b2JqZWN0PgorCSAgPGNhcHRpb24+CisJICAgIDxwYXJhPigxKSBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpY2F0aW9uIGZpZWxkIDIKK3N0YXJ0cyBpbiBsaW5lIDMxNCBhbmQgbm90IDMxMy41IGJlY2F1c2UgaGFsZiBsaW5lIGNhcHR1cmluZyBpcyBub3QKK3N1cHBvcnRlZC48L3BhcmE+CisJICA8L2NhcHRpb24+CisJPC9tZWRpYW9iamVjdD4KKyAgICAgIDwvZmlndXJlPgorCisgICAgICA8cGFyYT5SZW1lbWJlciB0aGUgVkJJIGltYWdlIGZvcm1hdCBkZXBlbmRzIG9uIHRoZSBzZWxlY3RlZAordmlkZW8gc3RhbmRhcmQsIHRoZXJlZm9yZSB0aGUgYXBwbGljYXRpb24gbXVzdCBjaG9vc2UgYSBuZXcgc3RhbmRhcmQgb3IKK3F1ZXJ5IHRoZSBjdXJyZW50IHN0YW5kYXJkIGZpcnN0LiBBdHRlbXB0cyB0byByZWFkIG9yIHdyaXRlIGRhdGEgYWhlYWQKK29mIGZvcm1hdCBuZWdvdGlhdGlvbiwgb3IgYWZ0ZXIgc3dpdGNoaW5nIHRoZSB2aWRlbyBzdGFuZGFyZCB3aGljaCBtYXkKK2ludmFsaWRhdGUgdGhlIG5lZ290aWF0ZWQgVkJJIHBhcmFtZXRlcnMsIHNob3VsZCBiZSByZWZ1c2VkIGJ5IHRoZQorZHJpdmVyLiBBIGZvcm1hdCBjaGFuZ2UgZHVyaW5nIGFjdGl2ZSBJL08gaXMgbm90IHBlcm1pdHRlZC48L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+UmVhZGluZyBhbmQgd3JpdGluZyBWQkkgaW1hZ2VzPC90aXRsZT4KKworICAgICAgPHBhcmE+VG8gYXNzdXJlIHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBmaWVsZCBudW1iZXIgYW5kIGVhc2llcgoraW1wbGVtZW50YXRpb24sIHRoZSBzbWFsbGVzdCB1bml0IG9mIGRhdGEgcGFzc2VkIGF0IGEgdGltZSBpcyBvbmUKK2ZyYW1lLCBjb25zaXN0aW5nIG9mIHR3byBmaWVsZHMgb2YgVkJJIGltYWdlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaW4KK21lbW9yeS48L3BhcmE+CisKKyAgICAgIDxwYXJhPlRoZSB0b3RhbCBzaXplIG9mIGEgZnJhbWUgY29tcHV0ZXMgYXMgZm9sbG93czo8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyg8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPlswXSArIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+WzFdKSAqCis8c3RydWN0ZmllbGQ+c2FtcGxlc19wZXJfbGluZTwvc3RydWN0ZmllbGQ+ICogc2FtcGxlIHNpemUgaW4gYnl0ZXM8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT5UaGUgc2FtcGxlIHNpemUgaXMgbW9zdCBsaWtlbHkgYWx3YXlzIG9uZSBieXRlLAorYXBwbGljYXRpb25zIG11c3QgY2hlY2sgdGhlIDxzdHJ1Y3RmaWVsZD5zYW1wbGVfZm9ybWF0PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHRob3VnaCwgdG8gZnVuY3Rpb24gcHJvcGVybHkgd2l0aCBvdGhlciBkcml2ZXJzLjwvcGFyYT4KKworICAgICAgPHBhcmE+QSBWQkkgZGV2aWNlIG1heSBzdXBwb3J0IDxsaW5rCisgICAgICBsaW5rZW5kPSJydyI+cmVhZC93cml0ZTwvbGluaz4gYW5kL29yIHN0cmVhbWluZyAoPGxpbmsKKyAgICAgIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBvciA8bGluaworICAgICAgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy4gVGhlIGxhdHRlciBiZWFycyB0aGUKK3Bvc3NpYmlsaXR5IG9mIHN5bmNocm9uaXppbmcgdmlkZW8gYW5kCitWQkkgZGF0YSBieSB1c2luZyBidWZmZXIgdGltZXN0YW1wcy48L3BhcmE+CisKKyAgICAgIDxwYXJhPlJlbWVtYmVyIHRoZSAmVklESU9DLVNUUkVBTU9OOyBpb2N0bCBhbmQgdGhlIGZpcnN0IHJlYWQoKSwKK3dyaXRlKCkgYW5kIHNlbGVjdCgpIGNhbGwgY2FuIGJlIHJlc291cmNlIGFsbG9jYXRpb24gcG9pbnRzIHJldHVybmluZworYW4gJkVCVVNZOyBpZiB0aGUgcmVxdWlyZWQgaGFyZHdhcmUgcmVzb3VyY2VzIGFyZSB0ZW1wb3JhcmlseQordW5hdmFpbGFibGUsIGZvciBleGFtcGxlIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlcgorcHJvY2Vzcy48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXJkcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yZHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjlkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yZHMueG1sCkBAIC0wLDAgKzEsMTY4IEBACisgICAgIDx0aXRsZT5SRFMgSW50ZXJmYWNlPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhlIFJhZGlvIERhdGEgU3lzdGVtIHRyYW5zbWl0cyBzdXBwbGVtZW50YXJ5CitpbmZvcm1hdGlvbiBpbiBiaW5hcnkgZm9ybWF0LCBmb3IgZXhhbXBsZSB0aGUgc3RhdGlvbiBuYW1lIG9yIHRyYXZlbAoraW5mb3JtYXRpb24sIG9uIGFuIGluYXVkaWJsZSBhdWRpbyBzdWJjYXJyaWVyIG9mIGEgcmFkaW8gcHJvZ3JhbS4gVGhpcworaW50ZXJmYWNlIGlzIGFpbWVkIGF0IGRldmljZXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgYW5kIGRlY29kaW5nIFJEUworaW5mb3JtYXRpb24uPC9wYXJhPgorCisgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGNvcmUgUkRTIHN0YW5kYXJkIDx4cmVmIGxpbmtlbmQ9ImVuNTAwNjciIC8+CithbmQgdGhlIFJCRFMgc3RhbmRhcmQgPHhyZWYgbGlua2VuZD0ibnJzYzQiIC8+LjwvcGFyYT4KKworICAgICAgPHBhcmE+Tm90ZSB0aGF0IHRoZSBSQkRTIHN0YW5kYXJkIGFzIGlzIHVzZWQgaW4gdGhlIFVTQSBpcyBhbG1vc3QgaWRlbnRpY2FsCit0byB0aGUgUkRTIHN0YW5kYXJkLiBBbnkgUkRTIGRlY29kZXIgY2FuIGFsc28gaGFuZGxlIFJCRFMuIE9ubHkgc29tZSBvZiB0aGUgZmllbGRzCitoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5ncy4gU2VlIHRoZSBSQkRTIHN0YW5kYXJkIGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcGFyYT4KKworICAgICAgPHBhcmE+VGhlIFJCRFMgc3RhbmRhcmQgYWxzbyBzcGVjaWZpZXMgc3VwcG9ydCBmb3IgTU1CUyAoTW9kaWZpZWQgTW9iaWxlIFNlYXJjaCkuCitUaGlzIGlzIGEgcHJvcHJpZXRhcnkgZm9ybWF0IHdoaWNoIHNlZW1zIHRvIGJlIGRpc2NvbnRpbnVlZC4gVGhlIFJEUyBpbnRlcmZhY2UgZG9lcyBub3QKK3N1cHBvcnQgdGhpcyBmb3JtYXQuIFNob3VsZCBzdXBwb3J0IGZvciBNTUJTIChvciB0aGUgc28tY2FsbGVkICdFIGJsb2NrcycgaW4gZ2VuZXJhbCkKK2JlIG5lZWRlZCwgdGhlbiBwbGVhc2UgY29udGFjdCB0aGUgbGludXgtbWVkaWEgbWFpbGluZyBsaXN0OiAmdjRsLW1sOy48L3BhcmE+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlF1ZXJ5aW5nIENhcGFiaWxpdGllczwvdGl0bGU+CisKKyAgICA8cGFyYT5EZXZpY2VzIHN1cHBvcnRpbmcgdGhlIFJEUyBjYXB0dXJpbmcgQVBJCitzZXQgdGhlIDxjb25zdGFudD5WNEwyX0NBUF9SRFNfQ0FQVFVSRTwvY29uc3RhbnQ+IGZsYWcgaW4KK3RoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4KK0FueSB0dW5lciB0aGF0IHN1cHBvcnRzIFJEUyB3aWxsIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9SRFM8L2NvbnN0YW50PiBmbGFnIGluIHRoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+CitmaWVsZCBvZiAmdjRsMi10dW5lcjsuCitXaGV0aGVyIGFuIFJEUyBzaWduYWwgaXMgcHJlc2VudCBjYW4gYmUgZGV0ZWN0ZWQgYnkgbG9va2luZyBhdAordGhlIDxzdHJ1Y3RmaWVsZD5yeHN1YmNoYW5zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItdHVuZXI7OiB0aGUKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9SRFM8L2NvbnN0YW50PiB3aWxsIGJlIHNldCBpZiBSRFMgZGF0YSB3YXMgZGV0ZWN0ZWQuPC9wYXJhPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSBSRFMgb3V0cHV0IEFQSQorc2V0IHRoZSA8Y29uc3RhbnQ+VjRMMl9DQVBfUkRTX09VVFBVVDwvY29uc3RhbnQ+IGZsYWcgaW4KK3RoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bC4KK0FueSBtb2R1bGF0b3IgdGhhdCBzdXBwb3J0cyBSRFMgd2lsbCBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfUkRTPC9jb25zdGFudD4gZmxhZyBpbiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPgorZmllbGQgb2YgJnY0bDItbW9kdWxhdG9yOy4KK0luIG9yZGVyIHRvIGVuYWJsZSB0aGUgUkRTIHRyYW5zbWlzc2lvbiBvbmUgbXVzdCBzZXQgdGhlIDxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9SRFM8L2NvbnN0YW50PgorYml0IGluIHRoZSA8c3RydWN0ZmllbGQ+dHhzdWJjaGFuczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLW1vZHVsYXRvcjsuPC9wYXJhPgorCisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UmVhZGluZyBSRFMgZGF0YTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlJEUyBkYXRhIGNhbiBiZSByZWFkIGZyb20gdGhlIHJhZGlvIGRldmljZQord2l0aCB0aGUgJmZ1bmMtcmVhZDsgZnVuY3Rpb24uIFRoZSBkYXRhIGlzIHBhY2tlZCBpbiBncm91cHMgb2YgdGhyZWUgYnl0ZXMsCithcyBmb2xsb3dzOjwvcGFyYT4KKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItcmRzLWRhdGEiPgorICAgICAgPHRpdGxlPnN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9yZHNfZGF0YTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSI1KiIgLz4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmxzYjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkxlYXN0IFNpZ25pZmljYW50IEJ5dGUgb2YgUkRTIEJsb2NrPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1zYjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vc3QgU2lnbmlmaWNhbnQgQnl0ZSBvZiBSRFMgQmxvY2s8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+YmxvY2s8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5CbG9jayBkZXNjcmlwdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItcmRzLWJsb2NrIj4KKyAgICAgIDx0aXRsZT5CbG9jayBkZXNjcmlwdGlvbjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjIiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSI1KiIgLz4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PkJpdHMgMC0yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJsb2NrIChha2Egb2Zmc2V0KSBvZiB0aGUgcmVjZWl2ZWQgZGF0YS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+Qml0cyAzLTU8L2VudHJ5PgorCSAgICA8ZW50cnk+RGVwcmVjYXRlZC4gQ3VycmVudGx5IGlkZW50aWNhbCB0byBiaXRzIDAtMi4gRG8gbm90IHVzZSB0aGVzZSBiaXRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5CaXQgNjwvZW50cnk+CisJICAgIDxlbnRyeT5Db3JyZWN0ZWQgYml0LiBJbmRpY2F0ZXMgdGhhdCBhbiBlcnJvciB3YXMgY29ycmVjdGVkIGZvciB0aGlzIGRhdGEgYmxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PkJpdCA3PC9lbnRyeT4KKwkgICAgPGVudHJ5PkVycm9yIGJpdC4gSW5kaWNhdGVzIHRoYXQgYW4gdW5jb3JyZWN0YWJsZSBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcmVjZXB0aW9uIG9mIHRoaXMgYmxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXJkcy1ibG9jay1jb2RlcyI+CisgICAgICA8dGl0bGU+QmxvY2sgZGVmaW5lczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjUqIiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfTVNLPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+TWFzayBmb3IgYml0cyAwLTIgdG8gZ2V0IHRoZSBibG9jayBJRC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfQTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJsb2NrIEEuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfUkRTX0JMT0NLX0I8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5CbG9jayBCLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX1JEU19CTE9DS19DPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+QmxvY2sgQy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfRDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJsb2NrIEQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfUkRTX0JMT0NLX0NfQUxUPC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+QmxvY2sgQycuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfUkRTX0JMT0NLX0lOVkFMSUQ8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5BbiBpbnZhbGlkIGJsb2NrLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX1JEU19CTE9DS19DT1JSRUNURUQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MHg0MDwvZW50cnk+CisJICAgIDxlbnRyeT5BIGJpdCBlcnJvciB3YXMgZGV0ZWN0ZWQgYnV0IGNvcnJlY3RlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9SRFNfQkxPQ0tfRVJST1I8L2VudHJ5PgorCSAgICA8ZW50cnk+MHg4MDwvZW50cnk+CisJICAgIDxlbnRyeT5BbiBpbmNvcnJlY3RhYmxlIGVycm9yIG9jY3VycmVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9zZWN0aW9uPgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtc2xpY2VkLXZiaS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1zbGljZWQtdmJpLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWU3ODlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtc2xpY2VkLXZiaS54bWwKQEAgLTAsMCArMSw3MDggQEAKKyAgPHRpdGxlPlNsaWNlZCBWQkkgRGF0YSBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlZCSSBzdGFuZHMgZm9yIFZlcnRpY2FsIEJsYW5raW5nIEludGVydmFsLCBhIGdhcCBpbiB0aGUKK3NlcXVlbmNlIG9mIGxpbmVzIG9mIGFuIGFuYWxvZyB2aWRlbyBzaWduYWwuIER1cmluZyBWQkkgbm8gcGljdHVyZQoraW5mb3JtYXRpb24gaXMgdHJhbnNtaXR0ZWQsIGFsbG93aW5nIHNvbWUgdGltZSB3aGlsZSB0aGUgZWxlY3Ryb24gYmVhbQorb2YgYSBjYXRob2RlIHJheSB0dWJlIFRWIHJldHVybnMgdG8gdGhlIHRvcCBvZiB0aGUgc2NyZWVuLjwvcGFyYT4KKworICA8cGFyYT5TbGljZWQgVkJJIGRldmljZXMgdXNlIGhhcmR3YXJlIHRvIGRlbW9kdWxhdGUgZGF0YSB0cmFuc21pdHRlZAoraW4gdGhlIFZCSS4gVjRMMiBkcml2ZXJzIHNoYWxsIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBkbyB0aGlzIGJ5Citzb2Z0d2FyZSwgc2VlIGFsc28gdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPnJhdyBWQkkKK2ludGVyZmFjZTwvbGluaz4uIFRoZSBkYXRhIGlzIHBhc3NlZCBhcyBzaG9ydCBwYWNrZXRzIG9mIGZpeGVkIHNpemUsCitjb3ZlcmluZyBvbmUgc2NhbiBsaW5lIGVhY2guIFRoZSBudW1iZXIgb2YgcGFja2V0cyBwZXIgdmlkZW8gZnJhbWUgaXMKK3ZhcmlhYmxlLjwvcGFyYT4KKworICA8cGFyYT5TbGljZWQgVkJJIGNhcHR1cmUgYW5kIG91dHB1dCBkZXZpY2VzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZQorc2FtZSBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlcyBhcyByYXcgVkJJIGRldmljZXMuIFdoZW4gYSBkcml2ZXIKK3N1cHBvcnRzIGJvdGggaW50ZXJmYWNlcywgdGhlIGRlZmF1bHQgZnVuY3Rpb24gb2YgYQorPGZpbGVuYW1lPi9kZXYvdmJpPC9maWxlbmFtZT4gZGV2aWNlIGlzIDxlbXBoYXNpcz5yYXc8L2VtcGhhc2lzPiBWQkkKK2NhcHR1cmluZyBvciBvdXRwdXQsIGFuZCB0aGUgc2xpY2VkIFZCSSBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZQorYWZ0ZXIgY2FsbGluZyB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwgYXMgZGVmaW5lZCBiZWxvdy4gTGlrZXdpc2UgYQorPGZpbGVuYW1lPi9kZXYvdmlkZW88L2ZpbGVuYW1lPiBkZXZpY2UgbWF5IHN1cHBvcnQgdGhlIHNsaWNlZCBWQkkgQVBJLAoraG93ZXZlciB0aGUgZGVmYXVsdCBmdW5jdGlvbiBoZXJlIGlzIHZpZGVvIGNhcHR1cmluZyBvciBvdXRwdXQuCitEaWZmZXJlbnQgZmlsZSBkZXNjcmlwdG9ycyBtdXN0IGJlIHVzZWQgdG8gcGFzcyByYXcgYW5kIHNsaWNlZCBWQkkKK2RhdGEgc2ltdWx0YW5lb3VzbHksIGlmIHRoaXMgaXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5RdWVyeWluZyBDYXBhYmlsaXRpZXM8L3RpdGxlPgorCisgICAgPHBhcmE+RGV2aWNlcyBzdXBwb3J0aW5nIHRoZSBzbGljZWQgVkJJIGNhcHR1cmluZyBvciBvdXRwdXQgQVBJCitzZXQgdGhlIDxjb25zdGFudD5WNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUPC9jb25zdGFudD4gZmxhZyByZXNwZWN0aXZlbHksIGluCit0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwuIEF0IGxlYXN0IG9uZSBvZiB0aGUKK3JlYWQvd3JpdGUsIHN0cmVhbWluZyBvciBhc3luY2hyb25vdXMgPGxpbmsgbGlua2VuZD0iaW8iPkkvTworbWV0aG9kczwvbGluaz4gbXVzdCBiZSBzdXBwb3J0ZWQuIFNsaWNlZCBWQkkgZGV2aWNlcyBtYXkgaGF2ZSBhIHR1bmVyCitvciBtb2R1bGF0b3IuPC9wYXJhPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlN1cHBsZW1lbnRhbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHBhcmE+U2xpY2VkIFZCSSBkZXZpY2VzIHNoYWxsIHN1cHBvcnQgPGxpbmsgbGlua2VuZD0idmlkZW8iPnZpZGVvCitpbnB1dCBvciBvdXRwdXQ8L2xpbms+IGFuZCA8bGluayBsaW5rZW5kPSJ0dW5lciI+dHVuZXIgb3IKK21vZHVsYXRvcjwvbGluaz4gaW9jdGxzIGlmIHRoZXkgaGF2ZSB0aGVzZSBjYXBhYmlsaXRpZXMsIGFuZCB0aGV5IG1heQorc3VwcG9ydCA8bGluayBsaW5rZW5kPSJjb250cm9sIj5jb250cm9sPC9saW5rPiBpb2N0bHMuIFRoZSA8bGluaworbGlua2VuZD0ic3RhbmRhcmQiPnZpZGVvIHN0YW5kYXJkPC9saW5rPiBpb2N0bHMgcHJvdmlkZSBpbmZvcm1hdGlvbgordml0YWwgdG8gcHJvZ3JhbSBhIHNsaWNlZCBWQkkgZGV2aWNlLCB0aGVyZWZvcmUgbXVzdCBiZQorc3VwcG9ydGVkLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJzbGljZWQtdmJpLWZvcm1hdC1uZWdvdGl0YXRpb24iPgorICAgIDx0aXRsZT5TbGljZWQgVkJJIEZvcm1hdCBOZWdvdGlhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBmaW5kIG91dCB3aGljaCBkYXRhIHNlcnZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitoYXJkd2FyZSBhcHBsaWNhdGlvbnMgY2FuIGNhbGwgdGhlICZWSURJT0MtRy1TTElDRUQtVkJJLUNBUDsgaW9jdGwuCitBbGwgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlIHNsaWNlZCBWQkkgaW50ZXJmYWNlIG11c3Qgc3VwcG9ydCB0aGlzCitpb2N0bC4gVGhlIHJlc3VsdHMgbWF5IGRpZmZlciBmcm9tIHRob3NlIG9mIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bAord2hlbiB0aGUgbnVtYmVyIG9mIFZCSSBsaW5lcyB0aGUgaGFyZHdhcmUgY2FuIGNhcHR1cmUgb3Igb3V0cHV0IHBlcgorZnJhbWUsIG9yIHRoZSBudW1iZXIgb2Ygc2VydmljZXMgaXQgY2FuIGlkZW50aWZ5IG9uIGEgZ2l2ZW4gbGluZSBhcmUKK2xpbWl0ZWQuIEZvciBleGFtcGxlIG9uIFBBTCBsaW5lIDE2IHRoZSBoYXJkd2FyZSBtYXkgYmUgYWJsZSB0byBsb29rCitmb3IgYSBWUFMgb3IgVGVsZXRleHQgc2lnbmFsLCBidXQgbm90IGJvdGggYXQgdGhlIHNhbWUgdGltZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBkZXRlcm1pbmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzZXJ2aWNlcyBhcHBsaWNhdGlvbnMKK3NldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGUgPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItZm9ybWF0OyB0bworPGNvbnN0YW50PiBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD4KK1Y0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PiwgYW5kIHRoZSAmVklESU9DLUctRk1UOworaW9jdGwgZmlsbHMgdGhlIDxzdHJ1Y3RmaWVsZD5mbXQuc2xpY2VkPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyLCBhCismdjRsMi1zbGljZWQtdmJpLWZvcm1hdDsuPC9wYXJhPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiByZXF1ZXN0IGRpZmZlcmVudCBwYXJhbWV0ZXJzIGJ5Citpbml0aWFsaXppbmcgb3IgbW9kaWZ5aW5nIHRoZSA8c3RydWN0ZmllbGQ+Zm10LnNsaWNlZDwvc3RydWN0ZmllbGQ+CittZW1iZXIgYW5kIGNhbGxpbmcgdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoZQorPHN0cnVjdG5hbWU+djRsMl9mb3JtYXQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgc2xpY2VkIFZCSSBBUEkgaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSByYXcgVkJJIEFQSQorYmVjYXVzZSB0aGUgaGFyZHdhcmUgbXVzdCBiZSB0b2xkIHdoaWNoIFZCSSBzZXJ2aWNlIHRvIGV4cGVjdCBvbiBlYWNoCitzY2FuIGxpbmUuIE5vdCBhbGwgc2VydmljZXMgbWF5IGJlIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgb24gYWxsCitsaW5lcyAodGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgZm9yIFZCSSBvdXRwdXQgd2hlcmUgVGVsZXRleHQgaXMgb2Z0ZW4KK3Vuc3VwcG9ydGVkIGFuZCBvdGhlciBzZXJ2aWNlcyBjYW4gb25seSBiZSBpbnNlcnRlZCBpbiBvbmUgc3BlY2lmaWMKK2xpbmUpLiBJbiBtYW55IGNhc2VzLCBob3dldmVyLCBpdCBpcyBzdWZmaWNpZW50IHRvIGp1c3Qgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIHJlcXVpcmVkIHNlcnZpY2VzCithbmQgbGV0IHRoZSBkcml2ZXIgZmlsbCB0aGUgPHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPgorYXJyYXkgYWNjb3JkaW5nIHRvIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gT25seSBpZiBtb3JlIHByZWNpc2UgY29udHJvbAoraXMgbmVlZGVkIHNob3VsZCB0aGUgcHJvZ3JhbW1lciBzZXQgdGhlCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+IGFycmF5IGV4cGxpY2l0bHkuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsIG1vZGlmaWVzIHRoZSBwYXJhbWV0ZXJzCithY2NvcmRpbmcgdG8gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBXaGVuIHRoZSBkcml2ZXIgYWxsb2NhdGVzCityZXNvdXJjZXMgYXQgdGhpcyBwb2ludCwgaXQgbWF5IHJldHVybiBhbiAmRUJVU1k7IGlmIHRoZSByZXF1aXJlZAorcmVzb3VyY2VzIGFyZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4gT3RoZXIgcmVzb3VyY2UgYWxsb2NhdGlvbgorcG9pbnRzIHdoaWNoIG1heSByZXR1cm4gPGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPiBjYW4gYmUgdGhlCismVklESU9DLVNUUkVBTU9OOyBpb2N0bCBhbmQgdGhlIGZpcnN0ICZmdW5jLXJlYWQ7LCAmZnVuYy13cml0ZTsgYW5kCismZnVuYy1zZWxlY3Q7IGNhbGwuPC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXNsaWNlZC12YmktZm9ybWF0Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQ8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNSI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIGNvbHdpZHRoPSIzKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjMqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIGNvbHdpZHRoPSIyKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNSIgY29sd2lkdGg9IjIqIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImMzIiBuYW1lZW5kPSJjNSIgc3Bhbm5hbWU9ImhzcGFuIiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5JZgorPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gaXMgbm9uLXplcm8gd2hlbiBwYXNzZWQgd2l0aAorJlZJRElPQy1TLUZNVDsgb3IgJlZJRElPQy1UUlktRk1UOywgdGhlCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+IGFycmF5IHdpbGwgYmUgZmlsbGVkIGJ5IHRoZQorZHJpdmVyIGFjY29yZGluZyB0byB0aGUgc2VydmljZXMgc3BlY2lmaWVkIGluIHRoaXMgZmllbGQuIEZvciBleGFtcGxlLAoraWYgPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gaXMgaW5pdGlhbGl6ZWQgd2l0aAorPGNvbnN0YW50PlY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9XU1NfNjI1PC9jb25zdGFudD4sIGEKK2RyaXZlciBmb3IgdGhlIGN4MjU4NDAgdmlkZW8gZGVjb2RlciBzZXRzIGxpbmVzIDctMjIgb2YgYm90aAorZmllbGRzPGZvb3Rub3RlPjxwYXJhPkFjY29yZGluZyB0byA8bGluaworbGlua2VuZD0iZXRzMzAwNzA2Ij5FVFMmbmJzcDszMDAmbmJzcDs3MDY8L2xpbms+IGxpbmVzIDYtMjIgb2YgdGhlCitmaXJzdCBmaWVsZCBhbmQgbGluZXMgNS0yMiBvZiB0aGUgc2Vjb25kIGZpZWxkIG1heSBjYXJyeSBUZWxldGV4dAorZGF0YS48L3BhcmE+PC9mb290bm90ZT4gdG8gPGNvbnN0YW50PlY0TDJfU0xJQ0VEX1RFTEVURVhUX0I8L2NvbnN0YW50PgorYW5kIGxpbmUgMjMgb2YgdGhlIGZpcnN0IGZpZWxkIHRvCis8Y29uc3RhbnQ+VjRMMl9TTElDRURfV1NTXzYyNTwvY29uc3RhbnQ+LiBJZgorPHN0cnVjdGZpZWxkPnNlcnZpY2Vfc2V0PC9zdHJ1Y3RmaWVsZD4gaXMgc2V0IHRvIHplcm8sIHRoZW4gdGhlIHZhbHVlcworb2YgPHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKzwvcGFyYT48cGFyYT5PbiByZXR1cm4gdGhlIGRyaXZlciBzZXRzIHRoaXMgZmllbGQgdG8gdGhlIHVuaW9uIG9mIGFsbAorZWxlbWVudHMgb2YgdGhlIHJldHVybmVkIDxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD4KK2FycmF5LiBJdCBtYXkgY29udGFpbiBsZXNzIHNlcnZpY2VzIHRoYW4gcmVxdWVzdGVkLCBwZXJoYXBzIGp1c3Qgb25lLAoraWYgdGhlIGhhcmR3YXJlIGNhbm5vdCBoYW5kbGUgbW9yZSBzZXJ2aWNlcyBzaW11bHRhbmVvdXNseS4gSXQgbWF5IGJlCitlbXB0eSAoemVybykgaWYgbm9uZSBvZiB0aGUgcmVxdWVzdGVkIHNlcnZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitoYXJkd2FyZS48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMl1bMjRdPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+PHBhcmE+QXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhpcworYXJyYXkgd2l0aCBzZXRzIG9mIGRhdGEgc2VydmljZXMgdGhlIGRyaXZlciBzaGFsbCBsb29rIGZvciBvciBpbnNlcnQKK29uIHRoZSByZXNwZWN0aXZlIHNjYW4gbGluZS4gU3ViamVjdCB0byBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgZHJpdmVycworcmV0dXJuIHRoZSByZXF1ZXN0ZWQgc2V0LCBhIHN1YnNldCwgd2hpY2ggbWF5IGJlIGp1c3QgYSBzaW5nbGUKK3NlcnZpY2UsIG9yIGFuIGVtcHR5IHNldC4gV2hlbiB0aGUgaGFyZHdhcmUgY2Fubm90IGhhbmRsZSBtdWx0aXBsZQorc2VydmljZXMgb24gdGhlIHNhbWUgbGluZSB0aGUgZHJpdmVyIHNoYWxsIGNob29zZSBvbmUuIE5vIGFzc3VtcHRpb25zCitjYW4gYmUgbWFkZSBvbiB3aGljaCBzZXJ2aWNlIHRoZSBkcml2ZXIgY2hvb3Nlcy48L3BhcmE+PHBhcmE+RGF0YQorc2VydmljZXMgYXJlIGRlZmluZWQgaW4gPHhyZWYgbGlua2VuZD0idmJpLXNlcnZpY2VzMiIgLz4uIEFycmF5IGluZGljZXMKK21hcCB0byBJVFUtUiBsaW5lIG51bWJlcnMgKHNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9InZiaS01MjUiIC8+IGFuZCA8eHJlZgorCQkgIGxpbmtlbmQ9InZiaS02MjUiIC8+KSBhcyBmb2xsb3dzOiA8IS0tIE5vIG5lc3RlZAordGFibGVzLCBzaWdoLiAtLT48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+RWxlbWVudDwvZW50cnk+CisJICAgIDxlbnRyeT41MjUgbGluZSBzeXN0ZW1zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjYyNSBsaW5lIHN5c3RlbXM8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzBdWzFdPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjE8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMjNdPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjIzPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjIzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPlsxXVsxXTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4yNjQ8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MzE0PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPlsxXVsyM108L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+Mjg2PC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjMzNjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDwhLS0gRW5kIG9mIGxpbmUgbnVtYmVycyB0YWJsZS4gLS0+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkRyaXZlcnMgbXVzdCBzZXQKKzxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMF0gYW5kCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzBdIHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pb19zaXplPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5NYXhpbXVtIG51bWJlciBvZiBieXRlcyBwYXNzZWQgYnkKK29uZSAmZnVuYy1yZWFkOyBvciAmZnVuYy13cml0ZTsgY2FsbCwgYW5kIHRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcyBmb3IKK3RoZSAmVklESU9DLVFCVUY7IGFuZCAmVklESU9DLURRQlVGOyBpb2N0bC4gRHJpdmVycyBzZXQgdGhpcyBmaWVsZCB0bwordGhlIHNpemUgb2YgJnY0bDItc2xpY2VkLXZiaS1kYXRhOyB0aW1lcyB0aGUgbnVtYmVyIG9mIG5vbi16ZXJvCitlbGVtZW50cyBpbiB0aGUgcmV0dXJuZWQgPHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPgorYXJyYXkgKHRoYXQgaXMgdGhlIG51bWJlciBvZiBsaW5lcyBwb3RlbnRpYWxseSBjYXJyeWluZyBkYXRhKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5UaGlzIGFycmF5IGlzIHJlc2VydmVkIGZvciBmdXR1cmUKK2V4dGVuc2lvbnMuIEFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCBpdCB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gU2VlIGFsc28gdmlkaW9jLWctc2xpY2VkLXZiaS1jYXAuc2dtbCAtLT4KKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InZiaS1zZXJ2aWNlczIiPgorICAgICAgPHRpdGxlPlNsaWNlZCBWQkkgc2VydmljZXM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI1Ij4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM1IiBjb2x3aWR0aD0iMioiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzMiIG5hbWVlbmQ9ImM1IiBzcGFubmFtZT0icmxwIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5TeW1ib2w8L2VudHJ5PgorCSAgICA8ZW50cnk+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnk+UmVmZXJlbmNlPC9lbnRyeT4KKwkgICAgPGVudHJ5PkxpbmVzLCB1c3VhbGx5PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBheWxvYWQ8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9URUxFVEVYVF9CPC9jb25zdGFudD4KKyhUZWxldGV4dCBTeXN0ZW0gQik8L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjx4cmVmIGxpbmtlbmQ9ImV0czMwMDcwNiIgLz4sIDx4cmVmIGxpbmtlbmQ9Iml0dTY1MyIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+UEFML1NFQ0FNIGxpbmUgNy0yMiwgMzIwLTMzNSAoc2Vjb25kIGZpZWxkIDctMjIpPC9lbnRyeT4KKwkgICAgPGVudHJ5Pkxhc3QgNDIgb2YgdGhlIDQ1IGJ5dGUgVGVsZXRleHQgcGFja2V0LCB0aGF0IGlzCit3aXRob3V0IGNsb2NrIHJ1bi1pbiBhbmQgZnJhbWluZyBjb2RlLCBsc2IgZmlyc3QgdHJhbnNtaXR0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9WUFM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDA0MDA8L2VudHJ5PgorCSAgICA8ZW50cnk+PHhyZWYgbGlua2VuZD0iZXRzMzAwMjMxIiAvPjwvZW50cnk+CisJICAgIDxlbnRyeT5QQUwgbGluZSAxNjwvZW50cnk+CisJICAgIDxlbnRyeT5CeXRlIG51bWJlciAzIHRvIDE1IGFjY29yZGluZyB0byBGaWd1cmUgOSBvZgorRVRTJm5ic3A7MzAwJm5ic3A7MjMxLCBsc2IgZmlyc3QgdHJhbnNtaXR0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MTAwMDwvZW50cnk+CisJICAgIDxlbnRyeT48eHJlZiBsaW5rZW5kPSJlaWE2MDgiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5UU0MgbGluZSAyMSwgMjg0IChzZWNvbmQgZmllbGQgMjEpPC9lbnRyeT4KKwkgICAgPGVudHJ5PlR3byBieXRlcyBpbiB0cmFuc21pc3Npb24gb3JkZXIsIGluY2x1ZGluZyBwYXJpdHkKK2JpdCwgbHNiIGZpcnN0IHRyYW5zbWl0dGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9TTElDRURfV1NTXzYyNTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4NDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT48eHJlZiBsaW5rZW5kPSJpdHUxMTE5IiAvPiwgPHhyZWYgbGlua2VuZD0iZW4zMDAyOTQiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBBTC9TRUNBTSBsaW5lIDIzPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzY3JlZW4+CitCeXRlICAgICAgICAgMCAgICAgICAgICAgICAgICAgMQorICAgICAgbXNiICAgICAgICAgbHNiICBtc2IgICAgICAgICAgIGxzYgorIEJpdCAgNyA2IDUgNCAzIDIgMSAwICB4IHggMTMgMTIgMTEgMTAgOQorPC9zY3JlZW4+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9WQklfNTI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgxMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJybHAiPlNldCBvZiBzZXJ2aWNlcyBhcHBsaWNhYmxlIHRvIDUyNQorbGluZSBzeXN0ZW1zLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9TTElDRURfVkJJXzYyNTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4NDQwMTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0icmxwIj5TZXQgb2Ygc2VydmljZXMgYXBwbGljYWJsZSB0byA2MjUKK2xpbmUgc3lzdGVtcy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8cGFyYT5Ecml2ZXJzIG1heSByZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiBhcHBsaWNhdGlvbnMgYXR0ZW1wdCB0bworcmVhZCBvciB3cml0ZSBkYXRhIHdpdGhvdXQgcHJpb3IgZm9ybWF0IG5lZ290aWF0aW9uLCBhZnRlciBzd2l0Y2hpbmcKK3RoZSB2aWRlbyBzdGFuZGFyZCAod2hpY2ggbWF5IGludmFsaWRhdGUgdGhlIG5lZ290aWF0ZWQgVkJJCitwYXJhbWV0ZXJzKSBhbmQgYWZ0ZXIgc3dpdGNoaW5nIHRoZSB2aWRlbyBpbnB1dCAod2hpY2ggbWF5IGNoYW5nZSB0aGUKK3ZpZGVvIHN0YW5kYXJkIGFzIGEgc2lkZSBlZmZlY3QpLiBUaGUgJlZJRElPQy1TLUZNVDsgaW9jdGwgbWF5IHJldHVybgorYW4gJkVCVVNZOyB3aGVuIGFwcGxpY2F0aW9ucyBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgZm9ybWF0IHdoaWxlIGkvbyBpcworaW4gcHJvZ3Jlc3MgKGJldHdlZW4gYSAmVklESU9DLVNUUkVBTU9OOyBhbmQgJlZJRElPQy1TVFJFQU1PRkY7IGNhbGwsCithbmQgYWZ0ZXIgdGhlIGZpcnN0ICZmdW5jLXJlYWQ7IG9yICZmdW5jLXdyaXRlOyBjYWxsKS48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+UmVhZGluZyBhbmQgd3JpdGluZyBzbGljZWQgVkJJIGRhdGE8L3RpdGxlPgorCisgICAgPHBhcmE+QSBzaW5nbGUgJmZ1bmMtcmVhZDsgb3IgJmZ1bmMtd3JpdGU7IGNhbGwgbXVzdCBwYXNzIGFsbCBkYXRhCitiZWxvbmdpbmcgdG8gb25lIHZpZGVvIGZyYW1lLiBUaGF0IGlzIGFuIGFycmF5IG9mCis8c3RydWN0bmFtZT52NGwyX3NsaWNlZF92YmlfZGF0YTwvc3RydWN0bmFtZT4gc3RydWN0dXJlcyB3aXRoIG9uZSBvcgorbW9yZSBlbGVtZW50cyBhbmQgYSB0b3RhbCBzaXplIG5vdCBleGNlZWRpbmcKKzxzdHJ1Y3RmaWVsZD5pb19zaXplPC9zdHJ1Y3RmaWVsZD4gYnl0ZXMuIExpa2V3aXNlIGluIHN0cmVhbWluZyBJL08KK21vZGUgb25lIGJ1ZmZlciBvZiA8c3RydWN0ZmllbGQ+aW9fc2l6ZTwvc3RydWN0ZmllbGQ+IGJ5dGVzIG11c3QKK2NvbnRhaW4gZGF0YSBvZiBvbmUgdmlkZW8gZnJhbWUuIFRoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBvZgordW51c2VkIDxzdHJ1Y3RuYW1lPnY0bDJfc2xpY2VkX3ZiaV9kYXRhPC9zdHJ1Y3RuYW1lPiBlbGVtZW50cyBtdXN0IGJlCit6ZXJvLjwvcGFyYT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1zbGljZWQtdmJpLWRhdGEiPgorICAgICAgPHRpdGxlPnN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9zbGljZWRfdmJpX2RhdGE8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgZmxhZyBmcm9tIDx4cmVmIGxpbmtlbmQ9InZiaS1zZXJ2aWNlcyIgLz4KK2lkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIGRhdGEgaW4gdGhpcyBwYWNrZXQuIE9ubHkgYSBzaW5nbGUgYml0IG11c3QgYmUKK3NldC4gV2hlbiB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gb2YgYSBjYXB0dXJlZCBwYWNrZXQgaXMKK3plcm8sIHRoZSBwYWNrZXQgaXMgZW1wdHkgYW5kIHRoZSBjb250ZW50cyBvZiBvdGhlciBmaWVsZHMgYXJlCit1bmRlZmluZWQuIEFwcGxpY2F0aW9ucyBzaGFsbCBpZ25vcmUgZW1wdHkgcGFja2V0cy4gV2hlbiB0aGUKKzxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IG9mIGEgcGFja2V0IGZvciBvdXRwdXQgaXMgemVybyB0aGUKK2NvbnRlbnRzIG9mIHRoZSA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFyZSB1bmRlZmluZWQKK2FuZCB0aGUgZHJpdmVyIG11c3Qgbm8gbG9uZ2VyIGluc2VydCBkYXRhIG9uIHRoZSByZXF1ZXN0ZWQKKzxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHZpZGVvIGZpZWxkIG51bWJlciB0aGlzIGRhdGEgaGFzIGJlZW4gY2FwdHVyZWQKK2Zyb20sIG9yIHNoYWxsIGJlIGluc2VydGVkIGF0LiA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IGZvciB0aGUgZmlyc3QKK2ZpZWxkLCA8Y29uc3RhbnQ+MTwvY29uc3RhbnQ+IGZvciB0aGUgc2Vjb25kIGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBmaWVsZCAoYXMgb3Bwb3NlZCB0byBmcmFtZSkgbGluZSBudW1iZXIgdGhpcworZGF0YSBoYXMgYmVlbiBjYXB0dXJlZCBmcm9tLCBvciBzaGFsbCBiZSBpbnNlcnRlZCBhdC4gU2VlIDx4cmVmCisJICAgIGxpbmtlbmQ9InZiaS01MjUiIC8+IGFuZCA8eHJlZiBsaW5rZW5kPSJ2YmktNjI1IiAvPiBmb3IgdmFsaWQKK3ZhbHVlcy4gU2xpY2VkIFZCSSBjYXB0dXJlIGRldmljZXMgY2FuIHNldCB0aGUgbGluZSBudW1iZXIgb2YgYWxsCitwYWNrZXRzIHRvIDxjb25zdGFudD4wPC9jb25zdGFudD4gaWYgdGhlIGhhcmR3YXJlIGNhbm5vdCByZWxpYWJseQoraWRlbnRpZnkgc2NhbiBsaW5lcy4gVGhlIGZpZWxkIG51bWJlciBtdXN0IGFsd2F5cyBiZSB2YWxpZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuCitBcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbXVzdCBzZXQgaXQgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+WzQ4XTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgcGFja2V0IHBheWxvYWQuIFNlZSA8eHJlZgorCSAgICBsaW5rZW5kPSJ2Ymktc2VydmljZXMiIC8+IGZvciB0aGUgY29udGVudHMgYW5kIG51bWJlciBvZgorYnl0ZXMgcGFzc2VkIGZvciBlYWNoIGRhdGEgdHlwZS4gVGhlIGNvbnRlbnRzIG9mIHBhZGRpbmcgYnl0ZXMgYXQgdGhlCitlbmQgb2YgdGhpcyBhcnJheSBhcmUgdW5kZWZpbmVkLCBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgc2hhbGwgaWdub3JlCit0aGVtLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxwYXJhPlBhY2tldHMgYXJlIGFsd2F5cyBwYXNzZWQgaW4gYXNjZW5kaW5nIGxpbmUgbnVtYmVyIG9yZGVyLAord2l0aG91dCBkdXBsaWNhdGUgbGluZSBudW1iZXJzLiBUaGUgJmZ1bmMtd3JpdGU7IGZ1bmN0aW9uIGFuZCB0aGUKKyZWSURJT0MtUUJVRjsgaW9jdGwgbXVzdCByZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiBhcHBsaWNhdGlvbnMgdmlvbGF0ZQordGhpcyBydWxlLiBUaGV5IG11c3QgYWxzbyByZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiBhcHBsaWNhdGlvbnMgcGFzcyBhbgoraW5jb3JyZWN0IGZpZWxkIG9yIGxpbmUgbnVtYmVyLCBvciBhIGNvbWJpbmF0aW9uIG9mCis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IHdoaWNoIGhhcyBub3QgYmVlbiBuZWdvdGlhdGVkIHdpdGggdGhlCismVklESU9DLUctRk1UOyBvciAmVklESU9DLVMtRk1UOyBpb2N0bC4gV2hlbiB0aGUgbGluZSBudW1iZXJzIGFyZQordW5rbm93biB0aGUgZHJpdmVyIG11c3QgcGFzcyB0aGUgcGFja2V0cyBpbiB0cmFuc21pdHRlZCBvcmRlci4gVGhlCitkcml2ZXIgY2FuIGluc2VydCBlbXB0eSBwYWNrZXRzIHdpdGggPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gc2V0Cit0byB6ZXJvIGFueXdoZXJlIGluIHRoZSBwYWNrZXQgYXJyYXkuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gYXNzdXJlIHN5bmNocm9uaXphdGlvbiBhbmQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBmcmFtZQorZHJvcHBpbmcsIHdoZW4gYSBjYXB0dXJlZCBmcmFtZSBkb2VzIG5vdCBjYXJyeSBhbnkgb2YgdGhlIHJlcXVlc3RlZAorZGF0YSBzZXJ2aWNlcyBkcml2ZXJzIG11c3QgcGFzcyBvbmUgb3IgbW9yZSBlbXB0eSBwYWNrZXRzLiBXaGVuIGFuCithcHBsaWNhdGlvbiBmYWlscyB0byBwYXNzIFZCSSBkYXRhIGluIHRpbWUgZm9yIG91dHB1dCwgdGhlIGRyaXZlcgorbXVzdCBvdXRwdXQgdGhlIGxhc3QgVlBTIGFuZCBXU1MgcGFja2V0IGFnYWluLCBhbmQgZGlzYWJsZSB0aGUgb3V0cHV0CitvZiBDbG9zZWQgQ2FwdGlvbiBhbmQgVGVsZXRleHQgZGF0YSwgb3Igb3V0cHV0IGRhdGEgd2hpY2ggaXMgaWdub3JlZAorYnkgQ2xvc2VkIENhcHRpb24gYW5kIFRlbGV0ZXh0IGRlY29kZXJzLjwvcGFyYT4KKworICAgIDxwYXJhPkEgc2xpY2VkIFZCSSBkZXZpY2UgbWF5IHN1cHBvcnQgPGxpbmsKK2xpbmtlbmQ9InJ3Ij5yZWFkL3dyaXRlPC9saW5rPiBhbmQvb3Igc3RyZWFtaW5nICg8bGluaworbGlua2VuZD0ibW1hcCI+bWVtb3J5IG1hcHBpbmc8L2xpbms+IGFuZC9vciA8bGluayBsaW5rZW5kPSJ1c2VycCI+dXNlcgorcG9pbnRlcjwvbGluaz4pIEkvTy4gVGhlIGxhdHRlciBiZWFycyB0aGUgcG9zc2liaWxpdHkgb2Ygc3luY2hyb25pemluZwordmlkZW8gYW5kIFZCSSBkYXRhIGJ5IHVzaW5nIGJ1ZmZlciB0aW1lc3RhbXBzLjwvcGFyYT4KKworICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24+CisgICAgPHRpdGxlPlNsaWNlZCBWQkkgRGF0YSBpbiBNUEVHIFN0cmVhbXM8L3RpdGxlPgorCisgICAgPHBhcmE+SWYgYSBkZXZpY2UgY2FuIHByb2R1Y2UgYW4gTVBFRyBvdXRwdXQgc3RyZWFtLCBpdCBtYXkgYmUKK2NhcGFibGUgb2YgcHJvdmlkaW5nIDxsaW5rCitsaW5rZW5kPSJzbGljZWQtdmJpLWZvcm1hdC1uZWdvdGl0YXRpb24iPm5lZ290aWF0ZWQgc2xpY2VkIFZCSQorc2VydmljZXM8L2xpbms+IGFzIGRhdGEgZW1iZWRkZWQgaW4gdGhlIE1QRUcgc3RyZWFtLiAgVXNlcnMgb3IKK2FwcGxpY2F0aW9ucyBjb250cm9sIHRoaXMgc2xpY2VkIFZCSSBkYXRhIGluc2VydGlvbiB3aXRoIHRoZSA8bGluaworbGlua2VuZD0idjRsMi1tcGVnLXN0cmVhbS12YmktZm10Ij5WNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UPC9saW5rPgorY29udHJvbC48L3BhcmE+CisKKyAgICA8cGFyYT5JZiB0aGUgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgdGhlIDxsaW5rCitsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPlY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ8L2xpbms+Citjb250cm9sLCBvciBvbmx5IGFsbG93cyB0aGF0IGNvbnRyb2wgdG8gYmUgc2V0IHRvIDxsaW5rCitsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPjxjb25zdGFudD4KK1Y0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FPC9jb25zdGFudD48L2xpbms+LCB0aGVuIHRoZSBkZXZpY2UKK2Nhbm5vdCBlbWJlZCBzbGljZWQgVkJJIGRhdGEgaW4gdGhlIE1QRUcgc3RyZWFtLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPgorVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDwvbGluaz4gY29udHJvbCBkb2VzIG5vdCBpbXBsaWNpdGx5IHNldAordGhlIGRldmljZSBkcml2ZXIgdG8gY2FwdHVyZSBub3IgY2Vhc2UgY2FwdHVyaW5nIHNsaWNlZCBWQkkgZGF0YS4gIFRoZQorY29udHJvbCBvbmx5IGluZGljYXRlcyB0byBlbWJlZCBzbGljZWQgVkJJIGRhdGEgaW4gdGhlIE1QRUcgc3RyZWFtLCBpZgorYW4gYXBwbGljYXRpb24gaGFzIG5lZ290aWF0ZWQgc2xpY2VkIFZCSSBzZXJ2aWNlIGJlIGNhcHR1cmVkLjwvcGFyYT4KKworICAgIDxwYXJhPkl0IG1heSBhbHNvIGJlIHRoZSBjYXNlIHRoYXQgYSBkZXZpY2UgY2FuIGVtYmVkIHNsaWNlZCBWQkkKK2RhdGEgaW4gb25seSBjZXJ0YWluIHR5cGVzIG9mIE1QRUcgc3RyZWFtczogZm9yIGV4YW1wbGUgaW4gYW4gTVBFRy0yCitQUyBidXQgbm90IGFuIE1QRUctMiBUUy4gIEluIHRoaXMgc2l0dWF0aW9uLCBpZiBzbGljZWQgVkJJIGRhdGEKK2luc2VydGlvbiBpcyByZXF1ZXN0ZWQsIHRoZSBzbGljZWQgVkJJIGRhdGEgd2lsbCBiZSBlbWJlZGRlZCBpbiBNUEVHCitzdHJlYW0gdHlwZXMgd2hlbiBzdXBwb3J0ZWQsIGFuZCBzaWxlbnRseSBvbWl0dGVkIGZyb20gTVBFRyBzdHJlYW0KK3R5cGVzIHdoZXJlIHNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLgorPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBzcGVjaWZ5IHRoZSBmb3JtYXQgb2YgdGhlCitlbWJlZGRlZCBzbGljZWQgVkJJIGRhdGEuPC9wYXJhPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5NUEVHIFN0cmVhbSBFbWJlZGRlZCwgU2xpY2VkIFZCSSBEYXRhIEZvcm1hdDogTk9ORTwvdGl0bGU+CisgICAgPHBhcmE+VGhlIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1zdHJlYW0tdmJpLWZtdCI+PGNvbnN0YW50PgorVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkU8L2NvbnN0YW50PjwvbGluaz4gZW1iZWRkZWQgc2xpY2VkIFZCSQorZm9ybWF0IHNoYWxsIGJlIGludGVycHJldGVkIGJ5IGRyaXZlcnMgYXMgYSBjb250cm9sIHRvIGNlYXNlCitlbWJlZGRpbmcgc2xpY2VkIFZCSSBkYXRhIGluIE1QRUcgc3RyZWFtcy4gIE5laXRoZXIgdGhlIGRldmljZSBub3IKK2RyaXZlciBzaGFsbCBpbnNlcnQgImVtcHR5IiBlbWJlZGRlZCBzbGljZWQgVkJJIGRhdGEgcGFja2V0cyBpbiB0aGUKK01QRUcgc3RyZWFtIHdoZW4gdGhpcyBmb3JtYXQgaXMgc2V0LiAgTm8gTVBFRyBzdHJlYW0gZGF0YSBzdHJ1Y3R1cmVzCithcmUgc3BlY2lmaWVkIGZvciB0aGlzIGZvcm1hdC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+TVBFRyBTdHJlYW0gRW1iZWRkZWQsIFNsaWNlZCBWQkkgRGF0YSBGb3JtYXQ6IElWVFY8L3RpdGxlPgorICAgIDxwYXJhPlRoZSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPjxjb25zdGFudD4KK1Y0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWPC9jb25zdGFudD48L2xpbms+IGVtYmVkZGVkIHNsaWNlZCBWQkkKK2Zvcm1hdCwgd2hlbiBzdXBwb3J0ZWQsIGluZGljYXRlcyB0byB0aGUgZHJpdmVyIHRvIGVtYmVkIHVwIHRvIDM2CitsaW5lcyBvZiBzbGljZWQgVkJJIGRhdGEgcGVyIGZyYW1lIGluIGFuIE1QRUctMiA8ZW1waGFzaXM+UHJpdmF0ZQorU3RyZWFtIDEgUEVTPC9lbXBoYXNpcz4gcGFja2V0IGVuY2Fwc3VsYXRlZCBpbiBhbiBNUEVHLTIgPGVtcGhhc2lzPgorUHJvZ3JhbSBQYWNrPC9lbXBoYXNpcz4gaW4gdGhlIE1QRUcgc3RyZWFtLjwvcGFyYT4KKworICAgIDxwYXJhPjxlbXBoYXNpcz5IaXN0b3JpY2FsIGNvbnRleHQ8L2VtcGhhc2lzPjogVGhpcyBmb3JtYXQKK3NwZWNpZmljYXRpb24gb3JpZ2luYXRlcyBmcm9tIGEgY3VzdG9tLCBlbWJlZGRlZCwgc2xpY2VkIFZCSSBkYXRhCitmb3JtYXQgdXNlZCBieSB0aGUgPGZpbGVuYW1lPml2dHY8L2ZpbGVuYW1lPiBkcml2ZXIuICBUaGlzIGZvcm1hdAoraGFzIGFscmVhZHkgYmVlbiBpbmZvcm1hbGx5IHNwZWNpZmllZCBpbiB0aGUga2VybmVsIHNvdXJjZXMgaW4gdGhlCitmaWxlIDxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLnZiaTwvZmlsZW5hbWU+CisuICBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBwYXlsb2FkIGFuZCBvdGhlciBhc3BlY3RzIG9mIHRoaXMgZm9ybWF0CithcmUgZHJpdmVuIGJ5IHRoZSBDWDIzNDE1IE1QRUcgZGVjb2RlcidzIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMKK3dpdGggcmVzcGVjdCB0byBleHRyYWN0aW5nLCBkZWNvZGluZywgYW5kIGRpc3BsYXlpbmcgc2xpY2VkIFZCSSBkYXRhCitlbWJlZGRlZCB3aXRoaW4gYW4gTVBFRyBzdHJlYW0uPC9wYXJhPgorCisgICAgPHBhcmE+VGhpcyBmb3JtYXQncyB1c2UgaXMgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGV4Y2x1c2l2ZSB0bwordGhlIDxmaWxlbmFtZT5pdnR2PC9maWxlbmFtZT4gZHJpdmVyIDxlbXBoYXNpcz5ub3I8L2VtcGhhc2lzPgorZXhjbHVzaXZlIHRvIENYMjM0MXggZGV2aWNlcywgYXMgdGhlIHNsaWNlZCBWQkkgZGF0YSBwYWNrZXQgaW5zZXJ0aW9uCitpbnRvIHRoZSBNUEVHIHN0cmVhbSBpcyBpbXBsZW1lbnRlZCBpbiBkcml2ZXIgc29mdHdhcmUuICBBdCBsZWFzdCB0aGUKKzxmaWxlbmFtZT5jeDE4PC9maWxlbmFtZT4gZHJpdmVyIHByb3ZpZGVzIHNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb24KK2ludG8gYW4gTVBFRy0yIFBTIGluIHRoaXMgZm9ybWF0IGFzIHdlbGwuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBzcGVjaWZ5IHRoZSBwYXlsb2FkIG9mIHRoZQorTVBFRy0yIDxlbXBoYXNpcz5Qcml2YXRlIFN0cmVhbSAxIFBFUzwvZW1waGFzaXM+IHBhY2tldHMgdGhhdCBjb250YWluCitzbGljZWQgVkJJIGRhdGEgd2hlbiA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPgorPGNvbnN0YW50PlY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWPC9jb25zdGFudD48L2xpbms+IGlzIHNldC4KKyhUaGUgTVBFRy0yIDxlbXBoYXNpcz5Qcml2YXRlIFN0cmVhbSAxIFBFUzwvZW1waGFzaXM+IHBhY2tldCBoZWFkZXIKK2FuZCBlbmNhcHN1bGF0aW5nIE1QRUctMiA8ZW1waGFzaXM+UHJvZ3JhbSBQYWNrPC9lbXBoYXNpcz4gaGVhZGVyIGFyZQorbm90IGRldGFpbGVkIGhlcmUuICBQbGVhc2UgcmVmZXIgdG8gdGhlIE1QRUctMiBzcGVjaWZpY2F0aW9ucyBmb3IKK2RldGFpbHMgb24gdGhvc2UgcGFja2V0IGhlYWRlcnMuKTwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBwYXlsb2FkIG9mIHRoZSBNUEVHLTIgPGVtcGhhc2lzPlByaXZhdGUgU3RyZWFtIDEgUEVTCis8L2VtcGhhc2lzPiBwYWNrZXRzIHRoYXQgY29udGFpbiBzbGljZWQgVkJJIGRhdGEgaXMgc3BlY2lmaWVkIGJ5CismdjRsMi1tcGVnLXZiaS1mbXQtaXZ0djsuICBUaGUgcGF5bG9hZCBpcyB2YXJpYWJsZQorbGVuZ3RoLCBkZXBlbmRpbmcgb24gdGhlIGFjdHVhbCBudW1iZXIgb2YgbGluZXMgb2Ygc2xpY2VkIFZCSSBkYXRhCitwcmVzZW50IGluIGEgdmlkZW8gZnJhbWUuICBUaGUgcGF5bG9hZCBtYXkgYmUgcGFkZGVkIGF0IHRoZSBlbmQgd2l0aAordW5zcGVjaWZpZWQgZmlsbCBieXRlcyB0byBhbGlnbiB0aGUgZW5kIG9mIHRoZSBwYXlsb2FkIHRvIGEgNC1ieXRlCitib3VuZGFyeS4gIFRoZSBwYXlsb2FkIHNoYWxsIG5ldmVyIGV4Y2VlZCAxNTUyIGJ5dGVzICgyIGZpZWxkcyB3aXRoCisxOCBsaW5lcy9maWVsZCB3aXRoIDQzIGJ5dGVzIG9mIGRhdGEvbGluZSBhbmQgYSA0IGJ5dGUgbWFnaWMgbnVtYmVyKS4KKzwvcGFyYT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1tcGVnLXZiaS1mbXQtaXZ0diI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfZm10X2l2dHY8L3N0cnVjdG5hbWU+CisgICAgICA8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1hZ2ljPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgIm1hZ2ljIiBjb25zdGFudCBmcm9tIDx4cmVmCisJICAgIGxpbmtlbmQ9InY0bDItbXBlZy12YmktZm10LWl2dHYtbWFnaWMiIC8+IHRoYXQgaW5kaWNhdGVzCit0aGlzIGlzIGEgdmFsaWQgc2xpY2VkIFZCSSBkYXRhIHBheWxvYWQgYW5kIGFsc28gaW5kaWNhdGVzIHdoaWNoCittZW1iZXIgb2YgdGhlIGFub255bW91cyB1bmlvbiwgPHN0cnVjdGZpZWxkPml0djA8L3N0cnVjdGZpZWxkPiBvcgorPHN0cnVjdGZpZWxkPklUVjA8L3N0cnVjdGZpZWxkPiwgdG8gdXNlIGZvciB0aGUgcGF5bG9hZCBkYXRhLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT4oYW5vbnltb3VzKTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+c3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MCI+CisJICAgICAgPHN0cnVjdG5hbWU+djRsMl9tcGVnX3ZiaV9pdHYwPC9zdHJ1Y3RuYW1lPjwvbGluaz4KKwkgICAgPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pdHYwPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHByaW1hcnkgZm9ybSBvZiB0aGUgc2xpY2VkIFZCSSBkYXRhIHBheWxvYWQKK3RoYXQgY29udGFpbnMgYW55d2hlcmUgZnJvbSAxIHRvIDM1IGxpbmVzIG9mIHNsaWNlZCBWQkkgZGF0YS4KK0xpbmUgbWFza3MgYXJlIHByb3ZpZGVkIGluIHRoaXMgZm9ybSBvZiB0aGUgcGF5bG9hZCBpbmRpY2F0aW5nCit3aGljaCBWQkkgbGluZXMgYXJlIHByb3ZpZGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+c3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC0xIj4KKwkgICAgICA8c3RydWN0bmFtZT52NGwyX21wZWdfdmJpX0lUVjA8L3N0cnVjdG5hbWU+PC9saW5rPgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPklUVjA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BbiBhbHRlcm5hdGUgZm9ybSBvZiB0aGUgc2xpY2VkIFZCSSBkYXRhIHBheWxvYWQKK3VzZWQgd2hlbiAzNiBsaW5lcyBvZiBzbGljZWQgVkJJIGRhdGEgYXJlIHByZXNlbnQuICBObyBsaW5lIG1hc2tzIGFyZQorcHJvdmlkZWQgaW4gdGhpcyBmb3JtIG9mIHRoZSBwYXlsb2FkOyBhbGwgdmFsaWQgbGluZSBtYXNrIGJpdHMgYXJlCitpbXBsY2l0bHkgc2V0LjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1tcGVnLXZiaS1mbXQtaXZ0di1tYWdpYyI+CisgICAgICA8dGl0bGU+TWFnaWMgQ29uc3RhbnRzIGZvciAmdjRsMi1tcGVnLXZiaS1mbXQtaXZ0djsKKwk8c3RydWN0ZmllbGQ+bWFnaWM8L3N0cnVjdGZpZWxkPiBmaWVsZDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWZpbmVkIFN5bWJvbDwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMDwvY29uc3RhbnQ+CisJICAgIDwvZW50cnk+CisJICAgIDxlbnRyeT4iaXR2MCI8L2VudHJ5PgorCSAgICA8ZW50cnk+SW5kaWNhdGVzIHRoZSA8c3RydWN0ZmllbGQ+aXR2MDwvc3RydWN0ZmllbGQ+CittZW1iZXIgb2YgdGhlIHVuaW9uIGluICZ2NGwyLW1wZWctdmJpLWZtdC1pdnR2OyBpcyB2YWxpZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzE8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+IklUVjAiPC9lbnRyeT4KKwkgICAgPGVudHJ5PkluZGljYXRlcyB0aGUgPHN0cnVjdGZpZWxkPklUVjA8L3N0cnVjdGZpZWxkPgorbWVtYmVyIG9mIHRoZSB1bmlvbiBpbiAmdjRsMi1tcGVnLXZiaS1mbXQtaXZ0djsgaXMgdmFsaWQgYW5kCit0aGF0IDM2IGxpbmVzIG9mIHNsaWNlZCBWQkkgZGF0YSBhcmUgcHJlc2VudC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItbXBlZy12YmktaXR2MCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfaXR2MDwvc3RydWN0bmFtZT4KKyAgICAgIDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX2xlMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+Qml0bWFza3MgaW5kaWNhdGluZyB0aGUgVkJJIHNlcnZpY2UgbGluZXMKK3ByZXNlbnQuICBUaGVzZSA8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgYXJlIHN0b3JlZAoraW4gbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyIGluIHRoZSBNUEVHIHN0cmVhbS4gIFNvbWUgcmVmZXJlbmNlCis8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPiBiaXQgcG9zaXRpb25zIHdpdGggdGhlaXIKK2NvcnJlc3BvbmRpbmcgVkJJIGxpbmUgbnVtYmVyIGFuZCB2aWRlbyBmaWVsZCBhcmUgZ2l2ZW4gYmVsb3cuCitiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+IGluZGljYXRlcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGEKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+IHZhbHVlOjxzY3JlZW4+Cis8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPlswXSBiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+OgkJbGluZSAgNgkJZmlyc3QgZmllbGQKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdIGI8c3Vic2NyaXB0PjE3PC9zdWJzY3JpcHQ+OgkJbGluZSAyMwkJZmlyc3QgZmllbGQKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdIGI8c3Vic2NyaXB0PjE4PC9zdWJzY3JpcHQ+OgkJbGluZSAgNgkJc2Vjb25kIGZpZWxkCis8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPlswXSBiPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjoJCWxpbmUgMTkJCXNlY29uZCBmaWVsZAorPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjoJCWxpbmUgMjAJCXNlY29uZCBmaWVsZAorPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gYjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjoJCWxpbmUgMjMJCXNlY29uZCBmaWVsZAorPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gYjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0Pi1iPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjoJdW51c2VkIGFuZCBzZXQgdG8gMDwvc2NyZWVuPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+c3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC1saW5lIj4KKwkgICAgICA8c3RydWN0bmFtZT52NGwyX21wZWdfdmJpX2l0djBfbGluZTwvc3RydWN0bmFtZT48L2xpbms+CisJICAgIDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzM1XTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5IHRoYXQgaG9sZHMgZnJvbSAxCit0byAzNSBsaW5lcyBvZiBzbGljZWQgVkJJIGRhdGEuICBUaGUgc2xpY2VkIFZCSSBkYXRhIGxpbmVzIHByZXNlbnQKK2NvcnJlc3BvbmQgdG8gdGhlIGJpdHMgc2V0IGluIHRoZSA8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPgorYXJyYXksIHN0YXJ0aW5nIGZyb20gYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PiBvZiA8c3RydWN0ZmllbGQ+CitsaW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdIHVwIHRocm91Z2ggYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD4gb2YKKzxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+WzBdLCBhbmQgZnJvbSBiPHN1YnNjcmlwdD4wCis8L3N1YnNjcmlwdD4gb2YgPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0gdXAgdGhyb3VnaCBiCis8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD4gb2YgPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD5bMV0uCis8c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzBdIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBiaXQKK2ZvdW5kIHNldCBpbiB0aGUgPHN0cnVjdGZpZWxkPmxpbmVtYXNrPC9zdHJ1Y3RmaWVsZD4gYXJyYXksCis8c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzFdIGNvcnJlc3BvbmRzIHRvIHRoZSBzZWNvbmQgYml0Citmb3VuZCBzZXQgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5saW5lbWFzazwvc3RydWN0ZmllbGQ+IGFycmF5LCBldGMuCitJZiBubyA8c3RydWN0ZmllbGQ+bGluZW1hc2s8L3N0cnVjdGZpZWxkPiBhcnJheSBiaXRzIGFyZSBzZXQsIHRoZW4KKzxzdHJ1Y3RmaWVsZD5saW5lPC9zdHJ1Y3RmaWVsZD5bMF0gbWF5IGNvbnRhaW4gb25lIGxpbmUgb2YKK3Vuc3BlY2lmaWVkIGRhdGEgdGhhdCBzaG91bGQgYmUgaWdub3JlZCBieSBhcHBsaWNhdGlvbnMuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLW1wZWctdmJpLWl0djAtMSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfSVRWMDwvc3RydWN0bmFtZT4KKyAgICAgIDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwLWxpbmUiPgorCSAgICAgIDxzdHJ1Y3RuYW1lPnY0bDJfbXBlZ192YmlfaXR2MF9saW5lPC9zdHJ1Y3RuYW1lPjwvbGluaz4KKwkgICAgPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5saW5lPC9zdHJ1Y3RmaWVsZD5bMzZdPC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgZml4ZWQgbGVuZ3RoIGFycmF5IG9mIDM2IGxpbmVzIG9mIHNsaWNlZCBWQkkKK2RhdGEuICA8c3RydWN0ZmllbGQ+bGluZTwvc3RydWN0ZmllbGQ+WzBdIHRocm91Z2ggPHN0cnVjdGZpZWxkPmxpbmUKKzwvc3RydWN0ZmllbGQ+WzE3XSBjb3JyZXNwb25kIHRvIGxpbmVzIDYgdGhyb3VnaCAyMyBvZiB0aGUKK2ZpcnN0IGZpZWxkLiAgPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPlsxOF0gdGhyb3VnaAorPHN0cnVjdGZpZWxkPmxpbmU8L3N0cnVjdGZpZWxkPlszNV0gY29ycmVzcG9uZHMgdG8gbGluZXMgNgordGhyb3VnaCAyMyBvZiB0aGUgc2Vjb25kIGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1tcGVnLXZiaS1pdHYwLWxpbmUiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX21wZWdfdmJpX2l0djBfbGluZTwvc3RydWN0bmFtZT4KKyAgICAgIDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgbGluZSBpZGVudGlmaWVyIHZhbHVlIGZyb20KKzx4cmVmIGxpbmtlbmQ9IklUVjAtTGluZS1JZGVudGlmaWVyLUNvbnN0YW50cyIgLz4gdGhhdCBpbmRpY2F0ZXMKK3RoZSB0eXBlIG9mIHNsaWNlZCBWQkkgZGF0YSBzdG9yZWQgb24gdGhpcyBsaW5lLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD5bNDJdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBzbGljZWQgVkJJIGRhdGEgZm9yIHRoZSBsaW5lLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0iSVRWMC1MaW5lLUlkZW50aWZpZXItQ29uc3RhbnRzIj4KKyAgICAgIDx0aXRsZT5MaW5lIElkZW50aWZpZXJzIGZvciBzdHJ1Y3QgPGxpbmsKKyAgICAgIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC1saW5lIj48c3RydWN0bmFtZT4KK3Y0bDJfbXBlZ192YmlfaXR2MF9saW5lPC9zdHJ1Y3RuYW1lPjwvbGluaz4gPHN0cnVjdGZpZWxkPmlkCis8L3N0cnVjdGZpZWxkPiBmaWVsZDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWZpbmVkIFN5bWJvbDwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZCSV9JVlRWX1RFTEVURVhUX0I8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlciB0byA8bGluayBsaW5rZW5kPSJ2Ymktc2VydmljZXMyIj4KK1NsaWNlZCBWQkkgc2VydmljZXM8L2xpbms+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lIHBheWxvYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVkJJX0lWVFZfQ0FQVElPTl81MjU8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlciB0byA8bGluayBsaW5rZW5kPSJ2Ymktc2VydmljZXMyIj4KK1NsaWNlZCBWQkkgc2VydmljZXM8L2xpbms+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lIHBheWxvYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVkJJX0lWVFZfV1NTXzYyNTwvY29uc3RhbnQ+CisJICAgIDwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlZmVyIHRvIDxsaW5rIGxpbmtlbmQ9InZiaS1zZXJ2aWNlczIiPgorU2xpY2VkIFZCSSBzZXJ2aWNlczwvbGluaz4gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGxpbmUgcGF5bG9hZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WQklfSVZUVl9WUFM8L2NvbnN0YW50PgorCSAgICA8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlciB0byA8bGluayBsaW5rZW5kPSJ2Ymktc2VydmljZXMyIj4KK1NsaWNlZCBWQkkgc2VydmljZXM8L2xpbms+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5lIHBheWxvYWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi10ZWxldGV4dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi10ZWxldGV4dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxODRlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXRlbGV0ZXh0LnhtbApAQCAtMCwwICsxLDQwIEBACisgIDx0aXRsZT5UZWxldGV4dCBJbnRlcmZhY2U8L3RpdGxlPgorCisgIDxwYXJhPlRoaXMgaW50ZXJmYWNlIGFpbXMgYXQgZGV2aWNlcyByZWNlaXZpbmcgYW5kIGRlbW9kdWxhdGluZworVGVsZXRleHQgZGF0YSBbPHhyZWYgbGlua2VuZD0iZXRzMzAwNzA2IiAvPiwgPHhyZWYgbGlua2VuZD0iaXR1NjUzIiAvPl0sIGV2YWx1YXRpbmcgdGhlCitUZWxldGV4dCBwYWNrYWdlcyBhbmQgc3RvcmluZyBmb3JtYXR0ZWQgcGFnZXMgaW4gY2FjaGUgbWVtb3J5LiBTdWNoCitkZXZpY2VzIGFyZSB1c3VhbGx5IGltcGxlbWVudGVkIGFzIG1pY3JvY29udHJvbGxlcnMgd2l0aCBzZXJpYWwKK2ludGVyZmFjZSAoSTxzdXBlcnNjcmlwdD4yPC9zdXBlcnNjcmlwdD5DKSBhbmQgY2FuIGJlIGZvdW5kIG9uIG9sZGVyCitUViBjYXJkcywgZGVkaWNhdGVkIFRlbGV0ZXh0IGRlY29kaW5nIGNhcmRzIGFuZCBob21lLWJyZXcgZGV2aWNlcworY29ubmVjdGVkIHRvIHRoZSBQQyBwYXJhbGxlbCBwb3J0LjwvcGFyYT4KKworICA8cGFyYT5UaGUgVGVsZXRleHQgQVBJIHdhcyBkZXNpZ25lZCBieSBNYXJ0aW4gQnVjay4gSXQgaXMgZGVmaW5lZCBpbgordGhlIGtlcm5lbCBoZWFkZXIgZmlsZSA8ZmlsZW5hbWU+bGludXgvdmlkZW90ZXh0Lmg8L2ZpbGVuYW1lPiwgdGhlCitzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIDx1bGluayB1cmw9ImZ0cDovL2Z0cC5nd2RnLmRlL3B1Yi9saW51eC9taXNjL3ZpZGVvdGV4dC8iPgorZnRwOi8vZnRwLmd3ZGcuZGUvcHViL2xpbnV4L21pc2MvdmlkZW90ZXh0LzwvdWxpbms+LiAoVmlkZW90ZXh0IGlzIHRoZSBuYW1lIG9mCit0aGUgR2VybWFuIHB1YmxpYyB0ZWxldmlzaW9uIFRlbGV0ZXh0IHNlcnZpY2UuKSBDb252ZW50aW9uYWwgY2hhcmFjdGVyCitkZXZpY2UgZmlsZSBuYW1lcyBhcmUgPGZpbGVuYW1lPi9kZXYvdnR4PC9maWxlbmFtZT4gYW5kCis8ZmlsZW5hbWU+L2Rldi92dHR1bmVyPC9maWxlbmFtZT4sIHdpdGggZGV2aWNlIG51bWJlciA4MywgMCBhbmQgODMsIDE2CityZXNwZWN0aXZlbHkuIEEgc2ltaWxhciBpbnRlcmZhY2UgZXhpc3RzIGZvciB0aGUgUGhpbGlwcyBTQUE1MjQ5CitUZWxldGV4dCBkZWNvZGVyIFtzcGVjaWZpY2F0aW9uP10gd2l0aCBjaGFyYWN0ZXIgZGV2aWNlIGZpbGUgbmFtZXMKKzxmaWxlbmFtZT4vZGV2L3Rsa048L2ZpbGVuYW1lPiwgZGV2aWNlIG51bWJlciAxMDIsIE4uPC9wYXJhPgorCisgIDxwYXJhPkV2ZW50dWFsbHkgdGhlIFRlbGV0ZXh0IEFQSSB3YXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBWNEwgQVBJCit3aXRoIGNoYXJhY3RlciBkZXZpY2UgZmlsZSBuYW1lcyA8ZmlsZW5hbWU+L2Rldi92dHgwPC9maWxlbmFtZT4gdG8KKzxmaWxlbmFtZT4vZGV2L3Z0eDMxPC9maWxlbmFtZT4sIGRldmljZSBtYWpvciBudW1iZXIgODEsIG1pbm9yIG51bWJlcnMKKzE5MiB0byAyMjMuIEZvciByZWZlcmVuY2UgdGhlIFY0TCBUZWxldGV4dCBBUEkgc3BlY2lmaWNhdGlvbiBpcworcmVwcm9kdWNlZCBoZXJlIGluIGZ1bGw6ICJUZWxldGV4dCBpbnRlcmZhY2VzIHRhbGsgdGhlIGV4aXN0aW5nIFZUWAorQVBJLiIgVGVsZXRleHQgZGV2aWNlcyB3aXRoIG1ham9yIG51bWJlciA4MyBhbmQgMTAyIHdpbGwgYmUgcmVtb3ZlZCBpbgorTGludXggMi42LjwvcGFyYT4KKworICA8cGFyYT5UaGVyZSBhcmUgbm8gcGxhbnMgdG8gcmVwbGFjZSB0aGUgVGVsZXRleHQgQVBJIG9yIHRvIGludGVncmF0ZQoraXQgaW50byBWNEwyLiBQbGVhc2Ugd3JpdGUgdG8gdGhlIGxpbnV4LW1lZGlhIG1haWxpbmcgbGlzdDogJnY0bC1tbDsKK3doZW4gdGhlIG5lZWQgYXJpc2VzLjwvcGFyYT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZHJpdmVyLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZHJpdmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdlZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kcml2ZXIueG1sCkBAIC0wLDAgKzEsMjA4IEBACisgIDx0aXRsZT5WNEwyIERyaXZlciBQcm9ncmFtbWluZzwvdGl0bGU+CisKKyAgPCEtLSBUaGlzIHBhcnQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJ2aWRlb2RldiIKKyAgICBtb2R1bGUgYW5kIGluZGl2aWR1YWwgZHJpdmVycy4gLS0+CisKKyAgPHBhcmE+dG8gZG88L3BhcmE+Cis8IS0tCisgIDxwYXJhPlY0TDIgaXMgYSB0d28tbGF5ZXIgZHJpdmVyIHN5c3RlbS4gVGhlIHRvcCBsYXllciBpcyB0aGUgInZpZGVvZGV2Igora2VybmVsIG1vZHVsZS4gV2hlbiB2aWRlb2RldiBpbml0aWFsaXplcyBpdCByZWdpc3RlcnMgYXMgY2hhcmFjdGVyIGRldmljZQord2l0aCBtYWpvciBudW1iZXIgODEsIGFuZCBpdCByZWdpc3RlcnMgYSBzZXQgb2YgZmlsZSBvcGVyYXRpb25zLiBBbGwgVjRMMgorZHJpdmVycyBhcmUgcmVhbGx5IGNsaWVudHMgb2YgdmlkZW9kZXYsIHdoaWNoIGNhbGxzIFY0TDIgZHJpdmVycyB0aHJvdWdoCitkcml2ZXIgbWV0aG9kIGZ1bmN0aW9ucy4gVjRMMiBkcml2ZXJzIGFyZSBhbHNvIHdyaXR0ZW4gYXMga2VybmVsIG1vZHVsZXMuCitBZnRlciBwcm9iaW5nIHRoZSBoYXJkd2FyZSB0aGV5IHJlZ2lzdGVyIG9uZSBvciBtb3JlIGRldmljZXMgd2l0aAordmlkZW9kZXYuPC9wYXJhPgorCisgIDxzZWN0aW9uIGlkPSJkcml2ZXItbW9kdWxlcyI+CisgICAgPHRpdGxlPkRyaXZlciBNb2R1bGVzPC90aXRsZT4KKworICAgIDxwYXJhPlY0TDIgZHJpdmVyIG1vZHVsZXMgbXVzdCBoYXZlIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdoaWNoIGlzCitjYWxsZWQgYWZ0ZXIgdGhlIG1vZHVsZSB3YXMgbG9hZGVkIGludG8ga2VybmVsLCBhbiBleGl0IGZ1bmN0aW9uIHdoaXMgaXMKK2NhbGxlZCBiZWZvcmUgdGhlIG1vZHVsZSBpcyByZW1vdmVkLiAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlCitrZXJuZWwgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZCBhdCBzeXN0ZW0gYm9vdCBhbmQgc2h1dGRvd24gdGltZS48L3BhcmE+CisKKyAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OworCisvKiBFeHBvcnQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtb2R1bGUuIEZvciBkZXRhaWxzIGFuZCBvdGhlciB1c2VmdWwKKyAgIG1hY3JvcyBzZWUgPGZpbGVuYW1lPmxpbnV4L21vZHVsZS5oPC9maWxlbmFtZT4uICovCitNT0RVTEVfREVTQ1JJUFRJT04oIm15IC0gZHJpdmVyIGZvciBteSBoYXJkd2FyZSIpOworTU9EVUxFX0FVVEhPUigiWW91ciBuYW1lIGhlcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHZvaWQKK215X21vZHVsZV9leGl0ICh2b2lkKQoreworCS8qIEZyZWUgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgbXlfbW9kdWxlX2luaXQoKS4gKi8KK30KKworc3RhdGljIGludAorbXlfbW9kdWxlX2luaXQgKHZvaWQpCit7CisJLyogQmluZCB0aGUgZHJpdmVyIHRvIHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUsIHNlZQorCSAgIDxsaW5rIGxpbmtlbmQ9ImRyaXZlci1wY2kiPiBhbmQKKwkgICA8bGluayBsaW5rZW5kPSJkcml2ZXItdXNiIj4gZm9yIGV4YW1wbGVzLiAqLworCisJcmV0dXJuIDA7IC8qIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4gKi8KK30KKworLyogRXhwb3J0IG1vZHVsZSBmdW5jdGlvbnMuICovCittb2R1bGVfaW5pdCAobXlfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQgKG15X21vZHVsZV9leGl0KTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICA8cGFyYT5Vc2VycyBjYW4gYWRkIHBhcmFtZXRlcnMgd2hlbiBrZXJuZWwgbW9kdWxlcyBhcmUgaW5zZXJ0ZWQ6PC9wYXJhPgorCisgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZXBhcmFtLmgmZ3Q7CisKK3N0YXRpYyBpbnQgbXlfb3B0aW9uID0gMTIzOworc3RhdGljIGludCBteV9vcHRpb25fYXJyYXlbNDddOworCisvKiBFeHBvcnQgdGhlIHN5bWJvbCwgYW4gaW50LCB3aXRoIGFjY2VzcyBwZXJtaXNzaW9ucyAwNjY0LgorICAgU2VlIDxmaWxlbmFtZT5saW51eC9tb2R1bGVwYXJhbS5oPC9maWxlbmFtZT4gZm9yIG90aGVyIHR5cGVzLiAqLworbW9kdWxlX3BhcmFtIChteV9vcHRpb24sIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkgKG15X29wdGlvbl9hcnJheSwgaW50LCBOVUxMLCAwNjQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyAobXlfb3B0aW9uLCAiRG9lcyBtYWdpYyB0aGluZ3MsIGRlZmF1bHQgMTIzIik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgPHBhcmE+T25lIHBhcmFtZXRlciBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IGFsbCBWNEwyIGRyaXZlcnMsIHRoZSBtaW5vcgorbnVtYmVyIG9mIHRoZSBkZXZpY2UgaXQgd2lsbCByZWdpc3Rlci4gUHVycG9zZSBpcyB0byBwcmVkaWN0YWJseSBsaW5rIFY0TDIKK2RyaXZlcnMgdG8gZGV2aWNlIG5vZGVzIGlmIG1vcmUgdGhhbiBvbmUgdmlkZW8gZGV2aWNlIGlzIGluc3RhbGxlZC4gVXNlIHRoZQorbmFtZSBvZiB0aGUgZGV2aWNlIG5vZGUgZm9sbG93ZWQgYnkgYSAiX25yIiBzdWZmaXgsIGZvciBleGFtcGxlICJ2aWRlb19uciIKK2ZvciA8ZmlsZW5hbWU+L2Rldi92aWRlbzwvZmlsZW5hbWU+LjwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisvKiBNaW5vciBudW1iZXIgb2YgdGhlIGRldmljZSwgLTEgdG8gYWxsb2NhdGUgdGhlIGZpcnN0IHVudXNlZC4gKi8KK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKworbW9kdWxlX3BhcmFtICh2aWRlb19uciwgaW50LCAwNDQ0KTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iZHJpdmVyLXBjaSI+CisgICAgPHRpdGxlPlBDSSBEZXZpY2VzPC90aXRsZT4KKworICAgIDxwYXJhPlBDSSBkZXZpY2VzIGFyZSBpbml0aWFsaXplZCBsaWtlIHRoaXM6PC9wYXJhPgorCisgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgc3RydWN0IHsKKwkvKiBTdGF0ZSBvZiBvbmUgcGh5c2ljYWwgZGV2aWNlLiAqLworfSBteV9kZXZpY2U7CisKK3N0YXRpYyBpbnQKK215X3Jlc3VtZSAgICAgICAgICAgICAgIChzdHJ1Y3QgcGNpX2RldiAqICAgICAgICAgICAgICAgcGNpX2RldikKK3sKKwkvKiBSZXN0b3JlIHRoZSBzdXNwZW5kZWQgZGV2aWNlIHRvIHdvcmtpbmcgc3RhdGUuICovCit9CisKK3N0YXRpYyBpbnQKK215X3N1c3BlbmQgICAgICAgICAgICAgIChzdHJ1Y3QgcGNpX2RldiAqICAgICAgICAgICAgICAgcGNpX2RldiwKKwkJCSBwbV9tZXNzYWdlX3QgICAgICAgICAgICAgICAgICAgc3RhdGUpCit7CisJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRoZSBzeXN0ZW0gZ29lcyB0byBzbGVlcC4KKwkgICBTdG9wIGFsbCBETUFzIGFuZCBkaXNhYmxlIGludGVycnVwdHMsIHRoZW4gcHV0IHRoZSBkZXZpY2UKKwkgICBpbnRvIGEgbG93IHBvd2VyIHN0YXRlLiBGb3IgZGV0YWlscyBzZWUgdGhlIGtlcm5lbAorCSAgIHNvdXJjZXMgdW5kZXIgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vcG93ZXI8L2ZpbGVuYW1lPi4gKi8KKworCXJldHVybiAwOyAvKiBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuICovCit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdAorbXlfcmVtb3ZlICAgICAgICAgICAgICAgKHN0cnVjdCBwY2lfZGV2ICogICAgICAgICAgICAgICBwY2lfZGV2KQoreworCW15X2RldmljZSAqbXkgPSBwY2lfZ2V0X2RydmRhdGEgKHBjaV9kZXYpOworCisJLyogRGVzY3JpYmUgbWUuICovCit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitteV9wcm9iZSAgICAgICAgICAgICAgICAoc3RydWN0IHBjaV9kZXYgKiAgICAgICAgICAgICAgIHBjaV9kZXYsCisJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKiAgIHBjaV9pZCkKK3sKKwlteV9kZXZpY2UgKm15OworCisJLyogRGVzY3JpYmUgbWUuICovCisKKwkvKiBZb3UgY2FuIGFsbG9jYXRlIHBlci1kZXZpY2UgZGF0YSBoZXJlIGFuZCBzdG9yZSBhIHBvaW50ZXIKKwkgICB0byBpdCBpbiB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUuICovCisJbXkgPSAuLi47CisJcGNpX3NldF9kcnZkYXRhIChwY2lfZGV2LCBteSk7CisKKwlyZXR1cm4gMDsgLyogYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLiAqLworfQorCisvKiBBIGxpc3Qgb2Ygc3VwcG9ydGVkIFBDSSBkZXZpY2VzLiAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkCitteV9wY2lfZGV2aWNlX2lkcyBbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IDAgfSAvKiBlbmQgb2YgbGlzdCAqLworfTsKKworLyogTG9hZCBvdXIgbW9kdWxlIGlmIHN1cHBvcnRlZCBQQ0kgZGV2aWNlcyBhcmUgaW5zdGFsbGVkLiAqLworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBteV9wY2lfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlcgorbXlfcGNpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgPSAibXkiLAorCS5pZF90YWJsZSA9IG15X3BjaV9kZXZpY2VfaWRzLAorCisJLnByb2JlICAgID0gbXlfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AgKG15X3JlbW92ZSksCisKKwkvKiBQb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gKi8KKwkuc3VzcGVuZCAgPSBteV9zdXNwZW5kLAorCS5yZXN1bWUgICA9IG15X3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkCitteV9tb2R1bGVfZXhpdCAgICAgICAgICAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZteV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIGludAorbXlfbW9kdWxlX2luaXQgICAgICAgICAgKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIgKCZteV9wY2lfZHJpdmVyKTsKK30KKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iZHJpdmVyLXVzYiI+CisgICAgPHRpdGxlPlVTQiBEZXZpY2VzPC90aXRsZT4KKyAgICA8cGFyYT50byBkbzwvcGFyYT4KKyAgPC9zZWN0aW9uPgorICA8c2VjdGlvbiBpZD0iZHJpdmVyLXJlZ2lzdGVyaW5nIj4KKyAgICA8dGl0bGU+UmVnaXN0ZXJpbmcgVjRMMiBEcml2ZXJzPC90aXRsZT4KKworICAgIDxwYXJhPkFmdGVyIGEgVjRMMiBkcml2ZXIgcHJvYmVkIHRoZSBoYXJkd2FyZSBpdCByZWdpc3RlcnMgb25lIG9yIG1vcmUKK2RldmljZXMgd2l0aCB0aGUgdmlkZW9kZXYgbW9kdWxlLjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorICA8c2VjdGlvbiBpZD0iZHJpdmVyLWZpbGUtb3BzIj4KKyAgICA8dGl0bGU+RmlsZSBPcGVyYXRpb25zPC90aXRsZT4KKyAgICA8cGFyYT50byBkbzwvcGFyYT4KKyAgPC9zZWN0aW9uPgorICA8c2VjdGlvbiBpZD0iZHJpdmVyLWludGVybmFsLWFwaSI+CisgICAgPHRpdGxlPkludGVybmFsIEFQSTwvdGl0bGU+CisgICAgPHBhcmE+dG8gZG88L3BhcmE+CisgIDwvc2VjdGlvbj4KKy0tPgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZkbC1hcHBlbmRpeC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZkbC1hcHBlbmRpeC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjZTUwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZmRsLWFwcGVuZGl4LnhtbApAQCAtMCwwICsxLDY3MSBAQAorPCEtLQorICAgICBUaGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIDEuMSBpbiBEb2NCb29rCisgICAgIE1hcmt1cCBieSBFcmljIEJhdWRhaXMgPGJhdWRhaXNAb2tzdGF0ZS5lZHU+CisgICAgIE1haW50YWluZWQgYnkgdGhlIEdOT01FIERvY3VtZW50YXRpb24gUHJvamVjdAorICAgICBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9wcm9qZWN0cy9nZHAKKyAgICAgVmVyc2lvbjogMS4wLjEKKyAgICAgTGFzdCBNb2RpZmllZDogTm92IDE2LCAyMDAwCistLT4KKworPGFwcGVuZGl4IGlkPSJmZGwiPgorICA8YXBwZW5kaXhpbmZvPgorICAgIDxyZWxlYXNlaW5mbz4KKyAgICAgIFZlcnNpb24gMS4xLCBNYXJjaCAyMDAwCisgICAgPC9yZWxlYXNlaW5mbz4KKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+MjAwMDwveWVhcj48aG9sZGVyPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorICAgIDxsZWdhbG5vdGljZSBpZD0iZmRsLWxlZ2Fsbm90aWNlIj4KKyAgICAgIDxwYXJhPgorCTxhZGRyZXNzPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8c3RyZWV0PjU5IFRlbXBsZSBQbGFjZSwKKwlTdWl0ZSAzMzA8L3N0cmVldD4sIDxjaXR5PkJvc3RvbjwvY2l0eT4sIDxzdGF0ZT5NQTwvc3RhdGU+CisJPHBvc3Rjb2RlPjAyMTExLTEzMDc8L3Bvc3Rjb2RlPiAgPGNvdW50cnk+VVNBPC9jb3VudHJ5PjwvYWRkcmVzcz4KKwlFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworCWxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorICA8L2FwcGVuZGl4aW5mbz4KKyAgPHRpdGxlPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvdGl0bGU+CisKKyAgPHNlY3QxIGlkPSJmZGwtcHJlYW1ibGUiPgorICAgIDx0aXRsZT4wLiBQUkVBTUJMRTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yCisgICAgICBvdGhlciB3cml0dGVuIGRvY3VtZW50IDxxdW90ZT5mcmVlPC9xdW90ZT4gaW4gdGhlIHNlbnNlIG9mCisgICAgICBmcmVlZG9tOiB0byBhc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kCisgICAgICByZWRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlcgorICAgICAgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4gU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZQorICAgICAgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkgdG8gZ2V0IGNyZWRpdCBmb3IKKyAgICAgIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlIGZvcgorICAgICAgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgPHF1b3RlPmNvcHlsZWZ0PC9xdW90ZT4sIHdoaWNoIG1lYW5zCisgICAgICB0aGF0IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluCisgICAgICB0aGUgc2FtZSBzZW5zZS4gSXQgY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICAgICAgd2hpY2ggaXMgYSBjb3B5bGVmdCBsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvcgorICAgICAgZnJlZSBzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYQorICAgICAgZnJlZSBwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUKKyAgICAgIGZyZWVkb21zIHRoYXQgdGhlIHNvZnR3YXJlIGRvZXMuIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQKKyAgICAgIHRvIHNvZnR3YXJlIG1hbnVhbHM7IGl0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLAorICAgICAgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvciB3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhCisgICAgICBwcmludGVkIGJvb2suIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UgcHJpbmNpcGFsbHkgZm9yIHdvcmtzCisgICAgICB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0iZmRsLXNlY3Rpb24xIj4KKyAgICA8dGl0bGU+MS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlM8L3RpdGxlPgorICAgIDxwYXJhIGlkPSJmZGwtZG9jdW1lbnQiPgorICAgICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrIHRoYXQgY29udGFpbnMgYQorICAgICAgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCisgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGUKKyAgICAgIDxxdW90ZT5Eb2N1bWVudDwvcXVvdGU+LCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvcgorICAgICAgd29yay4gQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEgbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQKKyAgICAgIGFzIDxxdW90ZT55b3U8L3F1b3RlPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYSBpZD0iZmRsLW1vZGlmaWVkIj4KKyAgICAgIEEgPHF1b3RlPk1vZGlmaWVkIFZlcnNpb248L3F1b3RlPiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsKKyAgICAgIGNvbnRhaW5pbmcgdGhlIERvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZAorICAgICAgdmVyYmF0aW0sIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKyAgICAgIGxhbmd1YWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhIGlkPSJmZGwtc2Vjb25kYXJ5Ij4KKyAgICAgIEEgPHF1b3RlPlNlY29uZGFyeSBTZWN0aW9uPC9xdW90ZT4gaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhCisgICAgICBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZiB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkKKyAgICAgIHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZQorICAgICAgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbCBzdWJqZWN0IChvciB0byByZWxhdGVkCisgICAgICBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkgd2l0aGluCisgICAgICB0aGF0IG92ZXJhbGwgc3ViamVjdC4gKEZvciBleGFtcGxlLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCisgICAgICB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CisgICAgICBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKKyAgICAgIGNvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YKKyAgICAgIGxlZ2FsLCBjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbgorICAgICAgcmVnYXJkaW5nIHRoZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9ImZkbC1pbnZhcmlhbnQiPgorICAgICAgVGhlIDxxdW90ZT5JbnZhcmlhbnQgU2VjdGlvbnM8L3F1b3RlPiBhcmUgY2VydGFpbiA8bGluaworICAgICAgbGlua2VuZD0iZmRsLXNlY29uZGFyeSI+IFNlY29uZGFyeSBTZWN0aW9uczwvbGluaz4gd2hvc2UgdGl0bGVzCisgICAgICBhcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUKKyAgICAgIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMKKyAgICAgIExpY2Vuc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9ImZkbC1jb3Zlci10ZXh0cyI+CisgICAgICBUaGUgPHF1b3RlPkNvdmVyIFRleHRzPC9xdW90ZT4gYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YKKyAgICAgIHRleHQgdGhhdCBhcmUgbGlzdGVkLCBhcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLAorICAgICAgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMKKyAgICAgIExpY2Vuc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9ImZkbC10cmFuc3BhcmVudCI+CisgICAgICBBIDxxdW90ZT5UcmFuc3BhcmVudDwvcXVvdGU+IGNvcHkgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPiBEb2N1bWVudDwvbGluaz4gbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlCisgICAgICBjb3B5LCByZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZQorICAgICAgdG8gdGhlIGdlbmVyYWwgcHVibGljLCB3aG9zZSBjb250ZW50cyBjYW4gYmUgdmlld2VkIGFuZCBlZGl0ZWQKKyAgICAgIGRpcmVjdGx5IGFuZCBzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IKKyAgICAgIGltYWdlcyBjb21wb3NlZCBvZiBwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvcgorICAgICAgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZSBkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMKKyAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IgZm9yIGF1dG9tYXRpYworICAgICAgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQKKyAgICAgIGZvcm1hdHRlcnMuIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlIGZvcm1hdAorICAgICAgd2hvc2UgbWFya3VwIGhhcyBiZWVuIGRlc2lnbmVkIHRvIHRod2FydCBvciBkaXNjb3VyYWdlCisgICAgICBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gIEEgY29weQorICAgICAgdGhhdCBpcyBub3QgPHF1b3RlPlRyYW5zcGFyZW50PC9xdW90ZT4gaXMgY2FsbGVkCisgICAgICA8cXVvdGU+T3BhcXVlPC9xdW90ZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZQorICAgICAgcGxhaW4gQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dAorICAgICAgZm9ybWF0LCBTR01MIG9yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZAorICAgICAgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUgSFRNTCBkZXNpZ25lZCBmb3IgaHVtYW4KKyAgICAgIG1vZGlmaWNhdGlvbi4gT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBQb3N0U2NyaXB0LCBQREYsCisgICAgICBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5CisgICAgICBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFRECisgICAgICBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKKyAgICAgIG1hY2hpbmUtZ2VuZXJhdGVkIEhUTUwgcHJvZHVjZWQgYnkgc29tZSB3b3JkIHByb2Nlc3NvcnMgZm9yCisgICAgICBvdXRwdXQgcHVycG9zZXMgb25seS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYSBpZD0iZmRsLXRpdGxlLXBhZ2UiPgorICAgICAgVGhlIDxxdW90ZT5UaXRsZSBQYWdlPC9xdW90ZT4gbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlCisgICAgICB0aXRsZSBwYWdlIGl0c2VsZiwgcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvCisgICAgICBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwgdGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbgorICAgICAgdGhlIHRpdGxlIHBhZ2UuIEZvciB3b3JrcyBpbiBmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZQorICAgICAgcGFnZSBhcyBzdWNoLCA8cXVvdGU+VGl0bGUgUGFnZTwvcXVvdGU+IG1lYW5zIHRoZSB0ZXh0IG5lYXIgdGhlCisgICAgICBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsIHByZWNlZGluZyB0aGUKKyAgICAgIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjIiPgorICAgIDx0aXRsZT4yLiBWRVJCQVRJTSBDT1BZSU5HPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGluIGFueSBtZWRpdW0sIGVpdGhlcgorICAgICAgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorICAgICAgY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZQorICAgICAgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAgICAgIHlvdSBhZGQgbm8gb3RoZXIgY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMKKyAgICAgIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IKKyAgICAgIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlciBjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IKKyAgICAgIGRpc3RyaWJ1dGUuIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0IGNvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IKKyAgICAgIGNvcGllcy4gSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGNvcGllcyB5b3UKKyAgICAgIG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1zZWN0aW9uMyI+c2VjdGlvbiAzPC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFlvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQKKyAgICAgIGFib3ZlLCBhbmQgeW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC1zZWN0aW9uMyI+CisgICAgPHRpdGxlPjMuIENPUFlJTkcgSU4gUVVBTlRJVFk8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwKKyAgICAgIGFuZCB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Db3ZlciBUZXh0czwvbGluaz4sIHlvdSBtdXN0IGVuY2xvc2UKKyAgICAgIHRoZSBjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZQorICAgICAgQ292ZXIgVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kCisgICAgICBCYWNrLUNvdmVyIFRleHRzIG9uIHRoZSBiYWNrIGNvdmVyLiBCb3RoIGNvdmVycyBtdXN0IGFsc28KKyAgICAgIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkgeW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UKKyAgICAgIGNvcGllcy4gVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudCB0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbAorICAgICAgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZCB2aXNpYmxlLiBZb3UgbWF5IGFkZAorICAgICAgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4gQ29weWluZyB3aXRoIGNoYW5nZXMKKyAgICAgIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlIHRoZSB0aXRsZSBvZiB0aGUKKyAgICAgIDxsaW5rIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGFuZCBzYXRpc2Z5IHRoZXNlCisgICAgICBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZCBhcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyCisgICAgICByZXNwZWN0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKKyAgICAgIGxlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKKyAgICAgIHJlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvCisgICAgICBhZGphY2VudCBwYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC10cmFuc3BhcmVudCI+T3BhcXVlPC9saW5rPiBjb3BpZXMgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwKKyAgICAgIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLXRyYW5zcGFyZW50Ij5UcmFuc3BhcmVudDwvbGluaz4gY29weSBhbG9uZyB3aXRoCisgICAgICBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkgYQorICAgICAgcHVibGljbHktYWNjZXNzaWJsZSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGNvbnRhaW5pbmcgYQorICAgICAgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQKKyAgICAgIG1hdGVyaWFsLCB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nIHB1YmxpYyBoYXMgYWNjZXNzIHRvCisgICAgICBkb3dubG9hZCBhbm9ueW1vdXNseSBhdCBubyBjaGFyZ2UgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsKKyAgICAgIHByb3RvY29scy4gSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZQorICAgICAgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLCB3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlCisgICAgICBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZSB0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsCisgICAgICByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQgbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lCisgICAgICB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4gT3BhcXVlIGNvcHkgKGRpcmVjdGx5CisgICAgICBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdCBlZGl0aW9uIHRvIHRoZQorICAgICAgcHVibGljLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzCisgICAgICBvZiB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gd2VsbCBiZWZvcmUKKyAgICAgIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlIHRoZW0gYSBjaGFuY2UKKyAgICAgIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC1zZWN0aW9uNCI+CisgICAgPHRpdGxlPjQuIE1PRElGSUNBVElPTlM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbjwvbGluaz4gb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiB1bmRlciB0aGUgY29uZGl0aW9ucyBvZgorICAgICAgc2VjdGlvbnMgPGxpbmsgbGlua2VuZD0iZmRsLXNlY3Rpb24yIj4yPC9saW5rPiBhbmQgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1zZWN0aW9uMyI+MzwvbGluaz4gYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKKyAgICAgIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlCisgICAgICBNb2RpZmllZCBWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzCisgICAgICBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24KKyAgICAgIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weSBvZiBpdC4gSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvCisgICAgICB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisgICAgPC9wYXJhPgorCisgICAgPGl0ZW1pemVkbGlzdCBtYXJrPSJvcGVuY2lyY2xlIj4KKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5BPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBVc2UgaW4gdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC10aXRsZS1wYWdlIj5UaXRsZQorCSAgICBQYWdlPC9saW5rPiAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorCSAgICBmcm9tIHRoYXQgb2YgdGhlIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+LCBhbmQgZnJvbSB0aG9zZSBvZgorCSAgICBwcmV2aW91cyB2ZXJzaW9ucyAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUKKwkgICAgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24gb2YgdGhlIERvY3VtZW50KS4gWW91IG1heQorCSAgICB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uIGlmIHRoZSBvcmlnaW5hbAorCSAgICBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkI8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIExpc3Qgb24gdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC10aXRsZS1wYWdlIj5UaXRsZQorCSAgICBQYWdlPC9saW5rPiwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworCSAgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUKKwkgICAgPGxpbmsgbGlua2VuZD0iZmRsLW1vZGlmaWVkIj5Nb2RpZmllZCBWZXJzaW9uPC9saW5rPiwKKwkgICAgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZgorCSAgICB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gKGFsbCBvZgorCSAgICBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBsZXNzIHRoYW4gZml2ZSkuCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkM8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIFN0YXRlIG9uIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtdGl0bGUtcGFnZSI+VGl0bGUKKwkgICAgUGFnZTwvbGluaz4gdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLW1vZGlmaWVkIj5Nb2RpZmllZCBWZXJzaW9uPC9saW5rPiwgYXMgdGhlCisJICAgIHB1Ymxpc2hlci4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+RDwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4uCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkU8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKwkgICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5GPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEKKwkgICAgbGljZW5zZSBub3RpY2UgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlCisJICAgIDxsaW5rIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbjwvbGluaz4gdW5kZXIKKwkgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlCisJICAgIEFkZGVuZHVtIGJlbG93LgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5HPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1pbnZhcmlhbnQiPiBJbnZhcmlhbnQgU2VjdGlvbnM8L2xpbms+IGFuZAorCSAgICByZXF1aXJlZCA8bGluayBsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkNvdmVyCisJICAgIFRleHRzPC9saW5rPiBnaXZlbiBpbiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudCdzPC9saW5rPiBsaWNlbnNlIG5vdGljZS4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+SDwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkk8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIFByZXNlcnZlIHRoZSBzZWN0aW9uIGVudGl0bGVkIDxxdW90ZT5IaXN0b3J5PC9xdW90ZT4sIGFuZAorCSAgICBpdHMgdGl0bGUsIGFuZCBhZGQgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZQorCSAgICB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbiA8L2xpbms+YXMgZ2l2ZW4gb24KKwkgICAgdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC10aXRsZS1wYWdlIj5UaXRsZSBQYWdlPC9saW5rPi4gIElmCisJICAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gZW50aXRsZWQgPHF1b3RlPkhpc3Rvcnk8L3F1b3RlPiBpbiB0aGUKKwkgICAgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4sIGNyZWF0ZSBvbmUKKwkgICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlCisJICAgIERvY3VtZW50IGFzIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtCisJICAgIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cworCSAgICBzZW50ZW5jZS4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+SjwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIDxsaW5rCisJICAgIGxpbmtlbmQ9ImZkbC1kb2N1bWVudCI+RG9jdW1lbnQ8L2xpbms+IGZvciBwdWJsaWMgYWNjZXNzCisJICAgIHRvIGEgPGxpbmsgbGlua2VuZD0iZmRsLXRyYW5zcGFyZW50Ij5UcmFuc3BhcmVudDwvbGluaz4KKwkgICAgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZSB0aGUgbmV0d29yayBsb2NhdGlvbnMKKwkgICAgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucyBpdCB3YXMgYmFzZWQKKwkgICAgb24uIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlIDxxdW90ZT5IaXN0b3J5PC9xdW90ZT4KKwkgICAgc2VjdGlvbi4gIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0CisJICAgIHdhcyBwdWJsaXNoZWQgYXQgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50CisJICAgIGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdAorCSAgICByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KKwkgIDwvcGFyYT4KKwk8L2Zvcm1hbHBhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+CisJPGZvcm1hbHBhcmE+CisJICA8dGl0bGU+SzwvdGl0bGU+CisJICA8cGFyYT4KKwkgICAgSW4gYW55IHNlY3Rpb24gZW50aXRsZWQgPHF1b3RlPkFja25vd2xlZGdlbWVudHM8L3F1b3RlPiBvcgorCSAgICA8cXVvdGU+RGVkaWNhdGlvbnM8L3F1b3RlPiwgcHJlc2VydmUgdGhlIHNlY3Rpb24ncyB0aXRsZSwKKwkgICAgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mCisJICAgIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMgYW5kL29yCisJICAgIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCisJICA8L3BhcmE+CisJPC9mb3JtYWxwYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3RpdGVtPgorCTxmb3JtYWxwYXJhPgorCSAgPHRpdGxlPkw8L3RpdGxlPgorCSAgPHBhcmE+CisJICAgIFByZXNlcnZlIGFsbCB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisJICAgIFNlY3Rpb25zPC9saW5rPiBvZiB0aGUgPGxpbmsKKwkgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4sIHVuYWx0ZXJlZCBpbiB0aGVpcgorCSAgICB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMgb3IgdGhlCisJICAgIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5NPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBEZWxldGUgYW55IHNlY3Rpb24gZW50aXRsZWQKKwkgICAgPHF1b3RlPkVuZG9yc2VtZW50czwvcXVvdGU+LiBTdWNoIGEgc2VjdGlvbiBtYXkgbm90IGJlCisJICAgIGluY2x1ZGVkIGluIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkCisJICAgIFZlcnNpb248L2xpbms+LgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKwk8Zm9ybWFscGFyYT4KKwkgIDx0aXRsZT5OPC90aXRsZT4KKwkgIDxwYXJhPgorCSAgICBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiBhcworCSAgICA8cXVvdGU+RW5kb3JzZW1lbnRzPC9xdW90ZT4gb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aAorCSAgICBhbnkgPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisJICAgIFNlY3Rpb248L2xpbms+LgorCSAgPC9wYXJhPgorCTwvZm9ybWFscGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb248L2xpbms+CisgICAgICBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yIGFwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzCisgICAgICA8bGluayBsaW5rZW5kPSJmZGwtc2Vjb25kYXJ5Ij5TZWNvbmRhcnkgU2VjdGlvbnM8L2xpbms+IGFuZAorICAgICAgY29udGFpbiBubyBtYXRlcmlhbCBjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91cgorICAgICAgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbCBvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuIFRvCisgICAgICBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZSBsaXN0IG9mIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtaW52YXJpYW50Ij5JbnZhcmlhbnQgU2VjdGlvbnM8L2xpbms+IGluIHRoZQorICAgICAgTW9kaWZpZWQgVmVyc2lvbidzIGxpY2Vuc2Ugbm90aWNlLiAgVGhlc2UgdGl0bGVzIG11c3QgYmUKKyAgICAgIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgWW91IG1heSBhZGQgYSBzZWN0aW9uIGVudGl0bGVkIDxxdW90ZT5FbmRvcnNlbWVudHM8L3F1b3RlPiwKKyAgICAgIHByb3ZpZGVkIGl0IGNvbnRhaW5zIG5vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb248L2xpbms+IGJ5IHZhcmlvdXMKKyAgICAgIHBhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQKKyAgICAgIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZQorICAgICAgZGVmaW5pdGlvbiBvZiBhIHN0YW5kYXJkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Gcm9udC1Db3ZlciBUZXh0PC9saW5rPiwgYW5kIGEgcGFzc2FnZQorICAgICAgb2YgdXAgdG8gMjUgd29yZHMgYXMgYSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5CYWNrLUNvdmVyIFRleHQ8L2xpbms+LCB0byB0aGUgZW5kIG9mCisgICAgICB0aGUgbGlzdCBvZiA8bGluayBsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkNvdmVyIFRleHRzPC9saW5rPgorICAgICAgaW4gdGhlIDxsaW5rIGxpbmtlbmQ9ImZkbC1tb2RpZmllZCI+TW9kaWZpZWQgVmVyc2lvbjwvbGluaz4uCisgICAgICBPbmx5IG9uZSBwYXNzYWdlIG9mIEZyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQKKyAgICAgIG1heSBiZSBhZGRlZCBieSAob3IgdGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZQorICAgICAgZW50aXR5LiBJZiB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4KKyAgICAgIGFscmVhZHkgaW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseQorICAgICAgYWRkZWQgYnkgeW91IG9yIGJ5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUKKyAgICAgIGFjdGluZyBvbiBiZWhhbGYgb2YsIHlvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heQorICAgICAgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cworICAgICAgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCisgICAgICBnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvCisgICAgICBhc3NlcnQgb3IgaW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb24gPC9saW5rPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjUiPgorICAgIDx0aXRsZT41LiBDT01CSU5JTkcgRE9DVU1FTlRTPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFlvdSBtYXkgY29tYmluZSB0aGUgPGxpbmsgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4KKyAgICAgIHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgdW5kZXIgdGhlCisgICAgICB0ZXJtcyBkZWZpbmVkIGluIDxsaW5rIGxpbmtlbmQ9ImZkbC1zZWN0aW9uNCI+c2VjdGlvbiA0PC9saW5rPgorICAgICAgYWJvdmUgZm9yIG1vZGlmaWVkIHZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZQorICAgICAgY29tYmluYXRpb24gYWxsIG9mIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtaW52YXJpYW50Ij5JbnZhcmlhbnQKKyAgICAgIFNlY3Rpb25zPC9saW5rPiBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwKKyAgICAgIGFuZCBsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4KKyAgICAgIGl0cyBsaWNlbnNlIG5vdGljZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwKKyAgICAgIGFuZCBtdWx0aXBsZSBpZGVudGljYWwgPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisgICAgICBTZWN0aW9uczwvbGluaz4gbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgY29weS4gSWYgdGhlcmUgYXJlCisgICAgICBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBkaWZmZXJlbnQKKyAgICAgIGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkgYWRkaW5nCisgICAgICBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCisgICAgICBhdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZQorICAgICAgbnVtYmVyLiBNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZQorICAgICAgbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZAorICAgICAgd29yay4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEluIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgZW50aXRsZWQKKyAgICAgIDxxdW90ZT5IaXN0b3J5PC9xdW90ZT4gaW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLAorICAgICAgZm9ybWluZyBvbmUgc2VjdGlvbiBlbnRpdGxlZCA8cXVvdGU+SGlzdG9yeTwvcXVvdGU+OyBsaWtld2lzZQorICAgICAgY29tYmluZSBhbnkgc2VjdGlvbnMgZW50aXRsZWQgPHF1b3RlPkFja25vd2xlZGdlbWVudHM8L3F1b3RlPiwKKyAgICAgIGFuZCBhbnkgc2VjdGlvbnMgZW50aXRsZWQgPHF1b3RlPkRlZGljYXRpb25zPC9xdW90ZT4uICBZb3UgbXVzdAorICAgICAgZGVsZXRlIGFsbCBzZWN0aW9ucyBlbnRpdGxlZCA8cXVvdGU+RW5kb3JzZW1lbnRzLjwvcXVvdGU+CisgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjYiPgorICAgIDx0aXRsZT42LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gYW5kIG90aGVyIGRvY3VtZW50cworICAgICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQKKyAgICAgIGlzIGluY2x1ZGVkIGluIHRoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlCisgICAgICBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUKKyAgICAgIGRvY3VtZW50cyBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kCisgICAgICBkaXNwYmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdQorICAgICAgaW5zZXJ0IGEgY29weSBvZiB0aGlzIExpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQKKyAgICAgIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsIG90aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbQorICAgICAgY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iZmRsLXNlY3Rpb243Ij4KKyAgICA8dGl0bGU+Ny4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBIGNvbXBpbGF0aW9uIG9mIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gb3IgaXRzIGRlcml2YXRpdmVzIHdpdGgKKyAgICAgIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEKKyAgICAgIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgZG9lcyBub3QgYXMgYSB3aG9sZQorICAgICAgY291bnQgYXMgYSA8bGluayBsaW5rZW5kPSJmZGwtbW9kaWZpZWQiPk1vZGlmaWVkIFZlcnNpb248L2xpbms+CisgICAgICBvZiB0aGUgRG9jdW1lbnQsIHByb3ZpZGVkIG5vIGNvbXBpbGF0aW9uIGNvcHlyaWdodCBpcyBjbGFpbWVkCisgICAgICBmb3IgdGhlIGNvbXBpbGF0aW9uLiAgU3VjaCBhIGNvbXBpbGF0aW9uIGlzIGNhbGxlZCBhbgorICAgICAgPHF1b3RlPmFnZ3JlZ2F0ZTwvcXVvdGU+LCBhbmQgdGhpcyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIHRoZQorICAgICAgb3RoZXIgc2VsZi1jb250YWluZWQgd29ya3MgdGh1cyBjb21waWxlZCB3aXRoIHRoZSBEb2N1bWVudCAsIG9uCisgICAgICBhY2NvdW50IG9mIHRoZWlyIGJlaW5nIHRodXMgY29tcGlsZWQsIGlmIHRoZXkgYXJlIG5vdCB0aGVtc2VsdmVzCisgICAgICBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4gIElmIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Db3ZlciBUZXh0PC9saW5rPiByZXF1aXJlbWVudCBvZiA8bGluaworICAgICAgbGlua2VuZD0iZmRsLXNlY3Rpb24zIj5zZWN0aW9uIDM8L2xpbms+IGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKKyAgICAgIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUKKyAgICAgIHF1YXJ0ZXIgb2YgdGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heQorICAgICAgYmUgcGxhY2VkIG9uIGNvdmVycyB0aGF0IHN1cnJvdW5kIG9ubHkgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUKKyAgICAgIGFnZ3JlZ2F0ZS4gT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gY292ZXJzIGFyb3VuZCB0aGUgd2hvbGUKKyAgICAgIGFnZ3JlZ2F0ZS4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC1zZWN0aW9uOCI+CisgICAgPHRpdGxlPjguIFRSQU5TTEFUSU9OPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorICAgICAgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPiB1bmRlciB0aGUgdGVybXMgb2YgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1zZWN0aW9uNCI+c2VjdGlvbiA0PC9saW5rPi4gUmVwbGFjaW5nIDxsaW5rCisgICAgICBsaW5rZW5kPSJmZGwtaW52YXJpYW50Ij4gSW52YXJpYW50IFNlY3Rpb25zPC9saW5rPiB3aXRoCisgICAgICB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbCBwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0CisgICAgICBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlIHRyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbAorICAgICAgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZQorICAgICAgSW52YXJpYW50IFNlY3Rpb25zLiBZb3UgbWF5IGluY2x1ZGUgYSB0cmFuc2xhdGlvbiBvZiB0aGlzCisgICAgICBMaWNlbnNlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZSB0aGUgb3JpZ2luYWwgRW5nbGlzaAorICAgICAgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UuIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbiB0aGUKKyAgICAgIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwKKyAgICAgIHRoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iZmRsLXNlY3Rpb245Ij4KKyAgICA8dGl0bGU+OS4gVEVSTUlOQVRJT048L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSA8bGluaworICAgICAgbGlua2VuZD0iZmRsLWRvY3VtZW50Ij5Eb2N1bWVudDwvbGluaz4gZXhjZXB0IGFzIGV4cHJlc3NseQorICAgICAgcHJvdmlkZWQgZm9yIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IG90aGVyIGF0dGVtcHQgdG8gY29weSwKKyAgICAgIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAorICAgICAgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLAorICAgICAgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworICAgICAgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisgICAgICBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJmZGwtc2VjdGlvbjEwIj4KKyAgICA8dGl0bGU+MTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2ZzZi9mc2YuaHRtbCI+RnJlZSBTb2Z0d2FyZQorICAgICAgRm91bmRhdGlvbjwvdWxpbms+IG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucyBvZiB0aGUgR05VCisgICAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMKKyAgICAgIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIKKyAgICAgIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gU2VlIDx1bGluaworICAgICAgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ij5odHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvPC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uCisgICAgICBudW1iZXIuIElmIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtZG9jdW1lbnQiPkRvY3VtZW50PC9saW5rPgorICAgICAgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlCisgICAgICA8cXVvdGU+b3IgYW55IGxhdGVyIHZlcnNpb248L3F1b3RlPiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKKyAgICAgIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0CisgICAgICBzcGVjaWZpZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuCisgICAgICBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZgorICAgICAgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsCisgICAgICB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5CisgICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImZkbC11c2luZyI+CisgICAgPHRpdGxlPkFkZGVuZHVtPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgorICAgICAgdGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgICAgICBsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKyAgICA8L3BhcmE+CisKKyAgICA8YmxvY2txdW90ZT4KKyAgICAgIDxwYXJhPgorCUNvcHlyaWdodCAmY29weTsgWUVBUiBZT1VSIE5BTUUuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwlQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMKKwlkb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24KKwlMaWNlbnNlLCBWZXJzaW9uIDEuMSBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlCisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZSA8bGluaworCWxpbmtlbmQ9ImZkbC1pbnZhcmlhbnQiPkludmFyaWFudCBTZWN0aW9uczwvbGluaz4gYmVpbmcgTElTVAorCVRIRUlSIFRJVExFUywgd2l0aCB0aGUgPGxpbmsKKwlsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkZyb250LUNvdmVyIFRleHRzPC9saW5rPiBiZWluZyBMSVNULAorCWFuZCB3aXRoIHRoZSA8bGluayBsaW5rZW5kPSJmZGwtY292ZXItdGV4dHMiPkJhY2stQ292ZXIKKwlUZXh0czwvbGluaz4gYmVpbmcgTElTVC4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbgorCXRoZSBzZWN0aW9uIGVudGl0bGVkIDxxdW90ZT5HTlUgRnJlZSBEb2N1bWVudGF0aW9uCisJTGljZW5zZTwvcXVvdGU+LgorICAgICAgPC9wYXJhPgorICAgIDwvYmxvY2txdW90ZT4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IGhhdmUgbm8gPGxpbmsgbGlua2VuZD0iZmRsLWludmFyaWFudCI+SW52YXJpYW50CisgICAgICBTZWN0aW9uczwvbGluaz4sIHdyaXRlIDxxdW90ZT53aXRoIG5vIEludmFyaWFudCBTZWN0aW9uczwvcXVvdGU+CisgICAgICBpbnN0ZWFkIG9mIHNheWluZyB3aGljaCBvbmVzIGFyZSBpbnZhcmlhbnQuICBJZiB5b3UgaGF2ZSBubworICAgICAgPGxpbmsgbGlua2VuZD0iZmRsLWNvdmVyLXRleHRzIj5Gcm9udC1Db3ZlciBUZXh0czwvbGluaz4sIHdyaXRlCisgICAgICA8cXVvdGU+bm8gRnJvbnQtQ292ZXIgVGV4dHM8L3F1b3RlPiBpbnN0ZWFkIG9mCisgICAgICA8cXVvdGU+RnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVDwvcXVvdGU+OyBsaWtld2lzZSBmb3IgPGxpbmsKKyAgICAgIGxpbmtlbmQ9ImZkbC1jb3Zlci10ZXh0cyI+QmFjay1Db3ZlciBUZXh0czwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLAorICAgICAgd2UgcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyCisgICAgICBjaG9pY2Ugb2YgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sIj4gR05VIEdlbmVyYWwgUHVibGljCisgICAgICBMaWNlbnNlPC91bGluaz4sIHRvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2FwcGVuZGl4PgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX2J0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGU4NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX2J0LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjU5OGIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV9idC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX3RiLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg0OTJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX3RiLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY1YjIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLWNsb3NlLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1jbG9zZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiNDFjYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1jbG9zZS54bWwKQEAgLTAsMCArMSw3MCBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLWNsb3NlIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBjbG9zZSgpPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT52NGwyLWNsb3NlPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkNsb3NlIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+Q2xvc2VzIHRoZSBkZXZpY2UuIEFueSBJL08gaW4gcHJvZ3Jlc3MgaXMgdGVybWluYXRlZCBhbmQKK3Jlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBhcmUgZnJlZWQuIEhvd2V2ZXIgZGF0YQorZm9ybWF0IHBhcmFtZXRlcnMsIGN1cnJlbnQgaW5wdXQgb3Igb3V0cHV0LCBjb250cm9sIHZhbHVlcyBvciBvdGhlcgorcHJvcGVydGllcyByZW1haW4gdW5jaGFuZ2VkLjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlJldHVybiBWYWx1ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGUgZnVuY3Rpb24gcmV0dXJucyA8cmV0dXJudmFsdWU+MDwvcmV0dXJudmFsdWU+IG9uCitzdWNjZXNzLCA8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBvbiBmYWlsdXJlIGFuZCB0aGUKKzx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiBpcyBzZXQgYXBwcm9wcmlhdGVseS4gUG9zc2libGUgZXJyb3IKK2NvZGVzOjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPiBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUKK2Rlc2NyaXB0b3IuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1pb2N0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtaW9jdGwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjk2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtaW9jdGwueG1sCkBAIC0wLDAgKzEsMTQ2IEBACis8cmVmZW50cnkgaWQ9ImZ1bmMtaW9jdGwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5WNEwyIGlvY3RsKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItaW9jdGw8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UHJvZ3JhbSBhIFY0TDIgZGV2aWNlPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3N5bm9wc2lzaW5mbz4jaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52b2lkICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WNEwyIGlvY3RsIHJlcXVlc3QgY29kZSBhcyBkZWZpbmVkIGluIHRoZSA8bGluaworbGlua2VuZD0idmlkZW9kZXYiPnZpZGVvZGV2Lmg8L2xpbms+IGhlYWRlciBmaWxlLCBmb3IgZXhhbXBsZQorVklESU9DX1FVRVJZQ0FQLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Qb2ludGVyIHRvIGEgZnVuY3Rpb24gcGFyYW1ldGVyLCB1c3VhbGx5IGEgc3RydWN0dXJlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPmlvY3RsKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb2dyYW0KK1Y0TDIgZGV2aWNlcy4gVGhlIGFyZ3VtZW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gbXVzdCBiZSBhbiBvcGVuCitmaWxlIGRlc2NyaXB0b3IuIEFuIGlvY3RsIDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPiBoYXMgZW5jb2RlZAoraW4gaXQgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gaW5wdXQsIG91dHB1dCBvciByZWFkL3dyaXRlCitwYXJhbWV0ZXIsIGFuZCB0aGUgc2l6ZSBvZiB0aGUgYXJndW1lbnQgPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+IGluCitieXRlcy4gTWFjcm9zIGFuZCBkZWZpbmVzIHNwZWNpZnlpbmcgVjRMMiBpb2N0bCByZXF1ZXN0cyBhcmUgbG9jYXRlZAoraW4gdGhlIDxsaW5rIGxpbmtlbmQ9InZpZGVvZGV2Ij52aWRlb2Rldi5oPC9saW5rPiBoZWFkZXIgZmlsZS4KK0FwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZWlyIG93biBjb3B5LCBub3QgaW5jbHVkZSB0aGUgdmVyc2lvbiBpbiB0aGUKK2tlcm5lbCBzb3VyY2VzIG9uIHRoZSBzeXN0ZW0gdGhleSBjb21waWxlIG9uLiBBbGwgVjRMMiBpb2N0bCByZXF1ZXN0cywKK3RoZWlyIHJlc3BlY3RpdmUgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbiA8eHJlZgorCWxpbmtlbmQ9InVzZXItZnVuYyIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+UmV0dXJuIFZhbHVlPC90aXRsZT4KKworICAgIDxwYXJhPk9uIHN1Y2Nlc3MgdGhlIDxmdW5jdGlvbj5pb2N0bCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gcmV0dXJucworPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPiBhbmQgZG9lcyBub3QgcmVzZXQgdGhlCis8dmFybmFtZT5lcnJubzwvdmFybmFtZT4gdmFyaWFibGUuIE9uIGZhaWx1cmUKKzxyZXR1cm52YWx1ZT4tMTwvcmV0dXJudmFsdWU+IGlzIHJldHVybmVkLCB3aGVuIHRoZSBpb2N0bCB0YWtlcyBhbgorb3V0cHV0IG9yIHJlYWQvd3JpdGUgcGFyYW1ldGVyIGl0IHJlbWFpbnMgdW5tb2RpZmllZCwgYW5kIHRoZQorPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5LiBTZWUgYmVsb3cgZm9yCitwb3NzaWJsZSBlcnJvciBjb2Rlcy4gR2VuZXJpYyBlcnJvcnMgbGlrZSA8ZXJyb3Jjb2RlPkVCQURGPC9lcnJvcmNvZGU+CitvciA8ZXJyb3Jjb2RlPkVGQVVMVDwvZXJyb3Jjb2RlPiBhcmUgbm90IGxpc3RlZCBpbiB0aGUgc2VjdGlvbnMKK2Rpc2N1c3NpbmcgaW5kaXZpZHVhbCBpb2N0bCByZXF1ZXN0cy48L3BhcmE+CisgICAgPHBhcmE+Tm90ZSBpb2N0bHMgbWF5IHJldHVybiB1bmRlZmluZWQgZXJyb3IgY29kZXMuIFNpbmNlIGVycm9ycworbWF5IGhhdmUgc2lkZSBlZmZlY3RzIHN1Y2ggYXMgYSBkcml2ZXIgcmVzZXQgYXBwbGljYXRpb25zIHNob3VsZAorYWJvcnQgb24gdW5leHBlY3RlZCBlcnJvcnMuPC9wYXJhPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQkFERjwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZQorZGVzY3JpcHRvci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCByaWdodCBub3cuIFR5cGljYWxseQordGhpcyBlcnJvciBjb2RlIGlzIHJldHVybmVkIHdoZW4gSS9PIGlzIGluIHByb2dyZXNzIG9yIHRoZSBkcml2ZXIKK3N1cHBvcnRzIG11bHRpcGxlIG9wZW5zIGFuZCBhbm90aGVyIHByb2Nlc3MgbG9ja2VkIHRoZSBwcm9wZXJ0eS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVGQVVMVDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj4gcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUKK21lbW9yeSBhcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RU5PVFRZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaXMgIG5vdCAgYXNzb2NpYXRlZCAgd2l0aCAgYQorY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj4gb3IgdGhlIGRhdGEgcG9pbnRlZAordG8gYnkgPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+IGlzIG5vdCB2YWxpZC4gVGhpcyBpcyBhIHZlcnkgY29tbW9uCitlcnJvciBjb2RlLCBzZWUgdGhlIGluZGl2aWR1YWwgaW9jdGwgcmVxdWVzdHMgbGlzdGVkIGluIDx4cmVmCisJICAgICAgbGlua2VuZD0idXNlci1mdW5jIiAvPiBmb3IgYWN0dWFsIGNhdXNlcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVOT01FTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Ob3QgZW5vdWdoIHBoeXNpY2FsIG9yIHZpcnR1YWwgbWVtb3J5IHdhcyBhdmFpbGFibGUgdG8KK2NvbXBsZXRlIHRoZSByZXF1ZXN0LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RVJBTkdFPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBhcHBsaWNhdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGEgY29udHJvbCB3aXRoIHRoZQorJlZJRElPQy1TLUNUUkw7IGlvY3RsIHRvIGEgdmFsdWUgd2hpY2ggaXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW1tYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW1tYXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmZjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtbW1hcC54bWwKQEAgLTAsMCArMSwxODUgQEAKKzxyZWZlbnRyeSBpZD0iZnVuYy1tbWFwIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBtbWFwKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItbW1hcDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5NYXAgZGV2aWNlIG1lbW9yeSBpbnRvIGFwcGxpY2F0aW9uIGFkZHJlc3Mgc3BhY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPgorI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9uPm1tYXA8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnByb3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+b2ZmX3QgPHBhcmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk1hcCB0aGUgYnVmZmVyIHRvIHRoaXMgYWRkcmVzcyBpbiB0aGUKK2FwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZS4gV2hlbiB0aGUgPGNvbnN0YW50Pk1BUF9GSVhFRDwvY29uc3RhbnQ+CitmbGFnIGlzIHNwZWNpZmllZCwgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlCitwYWdlc2l6ZSBhbmQgbW1hcCB3aWxsIGZhaWwgd2hlbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MKK2Nhbm5vdCBiZSB1c2VkLiBVc2Ugb2YgdGhpcyBvcHRpb24gaXMgZGlzY291cmFnZWQ7IGFwcGxpY2F0aW9ucyBzaG91bGQKK2p1c3Qgc3BlY2lmeSBhIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gcG9pbnRlciBoZXJlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkxlbmd0aCBvZiB0aGUgbWVtb3J5IGFyZWEgdG8gbWFwLiBUaGlzIG11c3QgYmUgdGhlCitzYW1lIHZhbHVlIGFzIHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgaW4gdGhlICZ2NGwyLWJ1ZmZlcjsKKzxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnByb3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxwYXJhbWV0ZXI+cHJvdDwvcGFyYW1ldGVyPiBhcmd1bWVudCBkZXNjcmliZXMgdGhlCitkZXNpcmVkIG1lbW9yeSBwcm90ZWN0aW9uLiBSZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UgdHlwZSBhbmQgdGhlCitkaXJlY3Rpb24gb2YgZGF0YSBleGNoYW5nZSBpdCBzaG91bGQgYmUgc2V0IHRvCis8Y29uc3RhbnQ+UFJPVF9SRUFEPC9jb25zdGFudD4gfCA8Y29uc3RhbnQ+UFJPVF9XUklURTwvY29uc3RhbnQ+LAorcGVybWl0dGluZyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gaW1hZ2UgYnVmZmVycy4gRHJpdmVycyBzaG91bGQKK3N1cHBvcnQgYXQgbGVhc3QgdGhpcyBjb21iaW5hdGlvbiBvZiBmbGFncy4gTm90ZSB0aGUgTGludXgKKzxmaWxlbmFtZT52aWRlby1idWY8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlLCB3aGljaCBpcyB1c2VkIGJ5IHRoZQorYnR0diwgc2FhNzEzNCwgc2FhNzE0NiwgY3g4OCBhbmQgdml2aSBkcml2ZXIgc3VwcG9ydHMgb25seQorPGNvbnN0YW50PlBST1RfUkVBRDwvY29uc3RhbnQ+IHwgPGNvbnN0YW50PlBST1RfV1JJVEU8L2NvbnN0YW50Pi4gV2hlbgordGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBkZXNpcmVkIHByb3RlY3Rpb24gdGhlCis8ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gZmFpbHMuPC9wYXJhPgorCSAgPHBhcmE+Tm90ZSBkZXZpY2UgbWVtb3J5IGFjY2Vzc2VzICgmZWc7IHRoZSBtZW1vcnkgb24gYQorZ3JhcGhpY3MgY2FyZCB3aXRoIHZpZGVvIGNhcHR1cmluZyBoYXJkd2FyZSkgbWF5IGluY3VyIGEgcGVyZm9ybWFuY2UKK3BlbmFsdHkgY29tcGFyZWQgdG8gbWFpbiBtZW1vcnkgYWNjZXNzZXMsIG9yIHJlYWRzIG1heSBiZQorc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiB3cml0ZXMgb3IgdmljZSB2ZXJzYS4gT3RoZXIgSS9PIG1ldGhvZHMgbWF5CitiZSBtb3JlIGVmZmljaWVudCBpbiB0aGlzIGNhc2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIKK3NwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgbWFwcGVkIG9iamVjdCwgbWFwcGluZyBvcHRpb25zIGFuZCB3aGV0aGVyCittb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIG1hcHBlZCBjb3B5IG9mIHRoZSBwYWdlIGFyZSBwcml2YXRlIHRvIHRoZQorcHJvY2VzcyBvciBhcmUgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgcmVmZXJlbmNlcy48L3BhcmE+CisJICA8cGFyYT48Y29uc3RhbnQ+TUFQX0ZJWEVEPC9jb25zdGFudD4gcmVxdWVzdHMgdGhhdCB0aGUKK2RyaXZlciBzZWxlY3RzIG5vIG90aGVyIGFkZHJlc3MgdGhhbiB0aGUgb25lIHNwZWNpZmllZC4gSWYgdGhlCitzcGVjaWZpZWQgYWRkcmVzcyBjYW5ub3QgYmUgdXNlZCwgPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+IHdpbGwgZmFpbC4gSWYKKzxjb25zdGFudD5NQVBfRklYRUQ8L2NvbnN0YW50PiBpcyBzcGVjaWZpZWQsCis8cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+IG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZXNpemUuIFVzZQorb2YgdGhpcyBvcHRpb24gaXMgZGlzY291cmFnZWQuPC9wYXJhPgorCSAgPHBhcmE+T25lIG9mIHRoZSA8Y29uc3RhbnQ+TUFQX1NIQVJFRDwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+TUFQX1BSSVZBVEU8L2NvbnN0YW50PiBmbGFncyBtdXN0IGJlIHNldC4KKzxjb25zdGFudD5NQVBfU0hBUkVEPC9jb25zdGFudD4gYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBzaGFyZSB0aGUKK21hcHBlZCBtZW1vcnkgd2l0aCBvdGhlciAoJmVnOyBjaGlsZC0pIHByb2Nlc3Nlcy4gTm90ZSB0aGUgTGludXgKKzxmaWxlbmFtZT52aWRlby1idWY8L2ZpbGVuYW1lPiBtb2R1bGUgd2hpY2ggaXMgdXNlZCBieSB0aGUgYnR0diwKK3NhYTcxMzQsIHNhYTcxNDYsIGN4ODggYW5kIHZpdmkgZHJpdmVyIHN1cHBvcnRzIG9ubHkKKzxjb25zdGFudD5NQVBfU0hBUkVEPC9jb25zdGFudD4uIDxjb25zdGFudD5NQVBfUFJJVkFURTwvY29uc3RhbnQ+CityZXF1ZXN0cyBjb3B5LW9uLXdyaXRlIHNlbWFudGljcy4gVjRMMiBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBzZXQgdGhlCis8Y29uc3RhbnQ+TUFQX1BSSVZBVEU8L2NvbnN0YW50PiwgPGNvbnN0YW50Pk1BUF9ERU5ZV1JJVEU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5NQVBfRVhFQ1VUQUJMRTwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD5NQVBfQU5PTjwvY29uc3RhbnQ+CitmbGFnLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk9mZnNldCBvZiB0aGUgYnVmZmVyIGluIGRldmljZSBtZW1vcnkuIFRoaXMgbXVzdCBiZSB0aGUKK3NhbWUgdmFsdWUgYXMgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciBpbiB0aGUgJnY0bDItYnVmZmVyOworPHN0cnVjdGZpZWxkPm08L3N0cnVjdGZpZWxkPiB1bmlvbiA8c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYXNrcyB0byBtYXAKKzxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+IGJ5dGVzIHN0YXJ0aW5nIGF0Cis8cGFyYW1ldGVyPm9mZnNldDwvcGFyYW1ldGVyPiBpbiB0aGUgbWVtb3J5IG9mIHRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5Cis8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGludG8gdGhlIGFwcGxpY2F0aW9uIGFkZHJlc3Mgc3BhY2UsCitwcmVmZXJhYmx5IGF0IGFkZHJlc3MgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPi4gVGhpcyBsYXR0ZXIKK2FkZHJlc3MgaXMgYSBoaW50IG9ubHksIGFuZCBpcyB1c3VhbGx5IHNwZWNpZmllZCBhcyAwLjwvcGFyYT4KKworICAgIDxwYXJhPlN1aXRhYmxlIGxlbmd0aCBhbmQgb2Zmc2V0IHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQgd2l0aCB0aGUKKyZWSURJT0MtUVVFUllCVUY7IGlvY3RsLiBCdWZmZXJzIG11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsIGJlZm9yZSB0aGV5IGNhbiBiZSBxdWVyaWVkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHVubWFwIGJ1ZmZlcnMgdGhlICZmdW5jLW11bm1hcDsgZnVuY3Rpb24gaXMgdXNlZC48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcyA8ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj4gcmV0dXJucyBhIHBvaW50ZXIgdG8KK3RoZSBtYXBwZWQgYnVmZmVyLiBPbiBlcnJvciA8Y29uc3RhbnQ+TUFQX0ZBSUxFRDwvY29uc3RhbnQ+ICgtMSkgaXMKK3JldHVybmVkLCBhbmQgdGhlIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiB2YXJpYWJsZSBpcyBzZXQKK2FwcHJvcHJpYXRlbHkuIFBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCQURGPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaXMgbm90IGEgdmFsaWQgZmlsZQorZGVzY3JpcHRvci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBQ0NFUzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzCitub3Qgb3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj5sZW5ndGg8L3BhcmFtZXRlcj4gb3IgPHBhcmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj4gYXJlIG5vdAorc3VpdGFibGUuIChFLiZuYnNwO2cuIHRoZXkgYXJlIHRvbyBsYXJnZSwgb3Igbm90IGFsaWduZWQgb24gYQorPGNvbnN0YW50PlBBR0VTSVpFPC9jb25zdGFudD4gYm91bmRhcnkuKTwvcGFyYT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+IG9yCis8cGFyYW1ldGVyPnByb3Q8L3BhcmFtZXRlcj4gdmFsdWUgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJICA8cGFyYT5ObyBidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0aCB0aGUKKyZWSURJT0MtUkVRQlVGUzsgaW9jdGwuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTk9NRU08L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm90IGVub3VnaCBwaHlzaWNhbCBvciB2aXJ0dWFsIG1lbW9yeSB3YXMgYXZhaWxhYmxlIHRvCitjb21wbGV0ZSB0aGUgcmVxdWVzdC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW11bm1hcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtbXVubWFwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJlZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW11bm1hcC54bWwKQEAgLTAsMCArMSw4MyBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLW11bm1hcCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPlY0TDIgbXVubWFwKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItbXVubWFwPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlVubWFwIGRldmljZSBtZW1vcnk8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPgorI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OworI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5tdW5tYXA8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFkZHJlc3Mgb2YgdGhlIG1hcHBlZCBidWZmZXIgYXMgcmV0dXJuZWQgYnkgdGhlCismZnVuYy1tbWFwOyBmdW5jdGlvbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5MZW5ndGggb2YgdGhlIG1hcHBlZCBidWZmZXIuIFRoaXMgbXVzdCBiZSB0aGUgc2FtZQordmFsdWUgYXMgZ2l2ZW4gdG8gPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+IGFuZCByZXR1cm5lZCBieSB0aGUKK2RyaXZlciBpbiB0aGUgJnY0bDItYnVmZmVyOyA8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5Vbm1hcHMgYSBwcmV2aW91c2x5IHdpdGggdGhlICZmdW5jLW1tYXA7IGZ1bmN0aW9uIG1hcHBlZAorYnVmZmVyIGFuZCBmcmVlcyBpdCwgaWYgcG9zc2libGUuIDwhLS0gPyBUaGlzIGZ1bmN0aW9uIChub3QgZnJlZWluZykKK2hhcyBubyBpbXBhY3Qgb24gSS9PIGluIHByb2dyZXNzLCBzcGVjaWZpY2FsbHkgaXQgZG9lcyBub3QgaW1wbHkKKyZWSURJT0MtU1RSRUFNT0ZGOyB0byB0ZXJtaW5hdGUgSS9PLiBVbm1hcHBlZCBidWZmZXJzIGNhbiBzdGlsbCBiZQorZW5xdWV1ZWQsIGRlcXVldWVkIG9yIHF1ZXJpZWQsIHRoZXkgYXJlIGp1c3Qgbm90IGFjY2Vzc2libGUgYnkgdGhlCithcHBsaWNhdGlvbi4tLT48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcyA8ZnVuY3Rpb24+bXVubWFwKCk8L2Z1bmN0aW9uPiByZXR1cm5zIDAsIG9uCitmYWlsdXJlIC0xIGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldAorYXBwcm9wcmlhdGVseTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj5sZW5ndGg8L3BhcmFtZXRlcj4gaXMgaW5jb3JyZWN0LCBvciBubyBidWZmZXJzIGhhdmUgYmVlbgorbWFwcGVkIHlldC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW9wZW4ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW9wZW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTVkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtb3Blbi54bWwKQEAgLTAsMCArMSwxMjEgQEAKKzxyZWZlbnRyeSBpZD0iZnVuYy1vcGVuIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBvcGVuKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItb3BlbjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5PcGVuIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtmY250bC5oJmd0OzwvZnVuY3N5bm9wc2lzaW5mbz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+b3BlbjwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5jb25zdCBjaGFyICo8cGFyYW1ldGVyPmRldmljZV9uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZGV2aWNlX25hbWU8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+RGV2aWNlIHRvIGJlIG9wZW5lZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk9wZW4gZmxhZ3MuIEFjY2VzcyBtb2RlIG11c3QgYmUKKzxjb25zdGFudD5PX1JEV1I8L2NvbnN0YW50Pi4gVGhpcyBpcyBqdXN0IGEgdGVjaG5pY2FsaXR5LCBpbnB1dCBkZXZpY2VzCitzdGlsbCBzdXBwb3J0IG9ubHkgcmVhZGluZyBhbmQgb3V0cHV0IGRldmljZXMgb25seSB3cml0aW5nLjwvcGFyYT4KKwkgIDxwYXJhPldoZW4gdGhlIDxjb25zdGFudD5PX05PTkJMT0NLPC9jb25zdGFudD4gZmxhZyBpcworZ2l2ZW4sIHRoZSByZWFkKCkgZnVuY3Rpb24gYW5kIHRoZSAmVklESU9DLURRQlVGOyBpb2N0bCB3aWxsIHJldHVybgordGhlICZFQUdBSU47IHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUgb3Igbm8gYnVmZmVyIGlzIGluIHRoZSBkcml2ZXIKK291dGdvaW5nIHF1ZXVlLCBvdGhlcndpc2UgdGhlc2UgZnVuY3Rpb25zIGJsb2NrIHVudGlsIGRhdGEgYmVjb21lcworYXZhaWxhYmxlLiBBbGwgVjRMMiBkcml2ZXJzIGV4Y2hhbmdpbmcgZGF0YSB3aXRoIGFwcGxpY2F0aW9ucyBtdXN0CitzdXBwb3J0IHRoZSA8Y29uc3RhbnQ+T19OT05CTE9DSzwvY29uc3RhbnQ+IGZsYWcuPC9wYXJhPgorCSAgPHBhcmE+T3RoZXIgZmxhZ3MgaGF2ZSBubyBlZmZlY3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBvcGVuIGEgVjRMMiBkZXZpY2UgYXBwbGljYXRpb25zIGNhbGwKKzxmdW5jdGlvbj5vcGVuKCk8L2Z1bmN0aW9uPiB3aXRoIHRoZSBkZXNpcmVkIGRldmljZSBuYW1lLiBUaGlzCitmdW5jdGlvbiBoYXMgbm8gc2lkZSBlZmZlY3RzOyBhbGwgZGF0YSBmb3JtYXQgcGFyYW1ldGVycywgY3VycmVudAoraW5wdXQgb3Igb3V0cHV0LCBjb250cm9sIHZhbHVlcyBvciBvdGhlciBwcm9wZXJ0aWVzIHJlbWFpbiB1bmNoYW5nZWQuCitBdCB0aGUgZmlyc3QgPGZ1bmN0aW9uPm9wZW4oKTwvZnVuY3Rpb24+IGNhbGwgYWZ0ZXIgbG9hZGluZyB0aGUgZHJpdmVyCit0aGV5IHdpbGwgYmUgcmVzZXQgdG8gZGVmYXVsdCB2YWx1ZXMsIGRyaXZlcnMgYXJlIG5ldmVyIGluIGFuCit1bmRlZmluZWQgc3RhdGUuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlJldHVybiBWYWx1ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5PbiBzdWNjZXNzIDxmdW5jdGlvbj5vcGVuPC9mdW5jdGlvbj4gcmV0dXJucyB0aGUgbmV3IGZpbGUKK2Rlc2NyaXB0b3IuIE9uIGVycm9yIC0xIGlzIHJldHVybmVkLCBhbmQgdGhlIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPgordmFyaWFibGUgaXMgc2V0IGFwcHJvcHJpYXRlbHkuIFBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBQ0NFUzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgY2FsbGVyIGhhcyBubyBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUKK2RldmljZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBvcGVucyBhbmQgdGhlCitkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTlhJTzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5ObyBkZXZpY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIGRldmljZSBzcGVjaWFsIGZpbGUKK2V4aXN0cy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVOT01FTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Ob3QgZW5vdWdoIGtlcm5lbCBtZW1vcnkgd2FzIGF2YWlsYWJsZSB0byBjb21wbGV0ZSB0aGUKK3JlcXVlc3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTUZJTEU8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICBwcm9jZXNzICBhbHJlYWR5ICBoYXMgIHRoZSAgbWF4aW11bSBudW1iZXIgb2YKK2ZpbGVzIG9wZW4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTkZJTEU8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGxpbWl0IG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMgb3BlbiBvbiB0aGUKK3N5c3RlbSBoYXMgYmVlbiByZWFjaGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtcG9sbC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtcG9sbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzYzcxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1wb2xsLnhtbApAQCAtMCwwICsxLDEyNyBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLXBvbGwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5WNEwyIHBvbGwoKTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+djRsMi1wb2xsPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPldhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3I8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtzeXMvcG9sbC5oJmd0OzwvZnVuY3N5bm9wc2lzaW5mbz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+cG9sbDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgcG9sbGZkICo8cGFyYW1ldGVyPnVmZHM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj51bnNpZ25lZCBpbnQgPHBhcmFtZXRlcj5uZmRzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+dGltZW91dDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5XaXRoIHRoZSA8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYXBwbGljYXRpb25zCitjYW4gc3VzcGVuZCBleGVjdXRpb24gdW50aWwgdGhlIGRyaXZlciBoYXMgY2FwdHVyZWQgZGF0YSBvciBpcyByZWFkeQordG8gYWNjZXB0IGRhdGEgZm9yIG91dHB1dC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHN0cmVhbWluZyBJL08gaGFzIGJlZW4gbmVnb3RpYXRlZCB0aGlzIGZ1bmN0aW9uIHdhaXRzCit1bnRpbCBhIGJ1ZmZlciBoYXMgYmVlbiBmaWxsZWQgb3IgZGlzcGxheWVkIGFuZCBjYW4gYmUgZGVxdWV1ZWQgd2l0aAordGhlICZWSURJT0MtRFFCVUY7IGlvY3RsLiBXaGVuIGJ1ZmZlcnMgYXJlIGFscmVhZHkgaW4gdGhlIG91dGdvaW5nCitxdWV1ZSBvZiB0aGUgZHJpdmVyIHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LjwvcGFyYT4KKworICAgIDxwYXJhPk9uIHN1Y2Nlc3MgPGZ1bmN0aW9uPnBvbGwoKTwvZnVuY3Rpb24+IHJldHVybnMgdGhlIG51bWJlciBvZgorZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZCAodGhhdCBpcywgZmlsZSBkZXNjcmlwdG9ycworZm9yIHdoaWNoIHRoZSA8c3RydWN0ZmllbGQ+cmV2ZW50czwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHRoZQorcmVzcGVjdGl2ZSA8c3RydWN0bmFtZT5wb2xsZmQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpcyBub24temVybykuCitDYXB0dXJlIGRldmljZXMgc2V0IHRoZSA8Y29uc3RhbnQ+UE9MTElOPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+UE9MTFJETk9STTwvY29uc3RhbnQ+IGZsYWdzIGluIHRoZQorPHN0cnVjdGZpZWxkPnJldmVudHM8L3N0cnVjdGZpZWxkPiBmaWVsZCwgb3V0cHV0IGRldmljZXMgdGhlCis8Y29uc3RhbnQ+UE9MTE9VVDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+UE9MTFdSTk9STTwvY29uc3RhbnQ+CitmbGFncy4gV2hlbiB0aGUgZnVuY3Rpb24gdGltZWQgb3V0IGl0IHJldHVybnMgYSB2YWx1ZSBvZiB6ZXJvLCBvbgorZmFpbHVyZSBpdCByZXR1cm5zIDxyZXR1cm52YWx1ZT4tMTwvcmV0dXJudmFsdWU+IGFuZCB0aGUKKzx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiB2YXJpYWJsZSBpcyBzZXQgYXBwcm9wcmlhdGVseS4gV2hlbiB0aGUKK2FwcGxpY2F0aW9uIGRpZCBub3QgY2FsbCAmVklESU9DLVFCVUY7IG9yICZWSURJT0MtU1RSRUFNT047IHlldCB0aGUKKzxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBzdWNjZWVkcywgYnV0IHNldHMgdGhlCis8Y29uc3RhbnQ+UE9MTEVSUjwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+cmV2ZW50czwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gdXNlIG9mIHRoZSA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzCitiZWVuIG5lZ290aWF0ZWQgYW5kIHRoZSBkcml2ZXIgZG9lcyBub3QgY2FwdHVyZSB5ZXQsIHRoZQorPGZ1bmN0aW9uPnBvbGw8L2Z1bmN0aW9uPiBmdW5jdGlvbiBzdGFydHMgY2FwdHVyaW5nLiBXaGVuIHRoYXQgZmFpbHMKK2l0IHJldHVybnMgYSA8Y29uc3RhbnQ+UE9MTEVSUjwvY29uc3RhbnQ+IGFzIGFib3ZlLiBPdGhlcndpc2UgaXQgd2FpdHMKK3VudGlsIGRhdGEgaGFzIGJlZW4gY2FwdHVyZWQgYW5kIGNhbiBiZSByZWFkLiBXaGVuIHRoZSBkcml2ZXIgY2FwdHVyZXMKK2NvbnRpbnVvdXNseSAoYXMgb3Bwb3NlZCB0bywgZm9yIGV4YW1wbGUsIHN0aWxsIGltYWdlcykgdGhlIGZ1bmN0aW9uCittYXkgcmV0dXJuIGltbWVkaWF0ZWx5LjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gdXNlIG9mIHRoZSA8ZnVuY3Rpb24+d3JpdGUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcworYmVlbiBuZWdvdGlhdGVkIHRoZSA8ZnVuY3Rpb24+cG9sbDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGp1c3Qgd2FpdHMKK3VudGlsIHRoZSBkcml2ZXIgaXMgcmVhZHkgZm9yIGEgbm9uLWJsb2NraW5nCis8ZnVuY3Rpb24+d3JpdGUoKTwvZnVuY3Rpb24+IGNhbGwuPC9wYXJhPgorCisgICAgPHBhcmE+QWxsIGRyaXZlcnMgaW1wbGVtZW50aW5nIHRoZSA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gb3IKKzxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gb3Igc3RyZWFtaW5nIEkvTyBtdXN0IGFsc28KK3N1cHBvcnQgdGhlIDxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi48L3BhcmE+CisKKyAgICA8cGFyYT5Gb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUKKzxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPiBtYW51YWwgcGFnZS48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcywgPGZ1bmN0aW9uPnBvbGwoKTwvZnVuY3Rpb24+IHJldHVybnMgdGhlIG51bWJlcgorc3RydWN0dXJlcyB3aGljaCBoYXZlIG5vbi16ZXJvIDxzdHJ1Y3RmaWVsZD5yZXZlbnRzPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcywgb3IgemVybyBpZiB0aGUgY2FsbCB0aW1lZCBvdXQuIE9uIGVycm9yCis8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgYW5kIHRoZQorPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5OjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+T25lIG9yIG1vcmUgb2YgdGhlIDxwYXJhbWV0ZXI+dWZkczwvcGFyYW1ldGVyPiBtZW1iZXJzCitzcGVjaWZ5IGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHJlYWQgb3Igd3JpdGUKK3N0cmVhbXMgYW5kIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj51ZmRzPC9wYXJhbWV0ZXI+IHJlZmVyZW5jZXMgYW4gaW5hY2Nlc3NpYmxlCittZW1vcnkgYXJlYS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlRSPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBjYWxsIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5uZmRzPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IGlzIGdyZWF0ZXIKK3RoYW4gPGNvbnN0YW50Pk9QRU5fTUFYPC9jb25zdGFudD4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1yZWFkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1yZWFkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA4OWJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXJlYWQueG1sCkBAIC0wLDAgKzEsMTg5IEBACis8cmVmZW50cnkgaWQ9ImZ1bmMtcmVhZCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPlY0TDIgcmVhZCgpPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT52NGwyLXJlYWQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UmVhZCBmcm9tIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5zc2l6ZV90IDxmdW5jdGlvbj5yZWFkPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+PGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGF0dGVtcHRzIHRvIHJlYWQgdXAgdG8KKzxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4gYnl0ZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3IKKzxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaW50byB0aGUgYnVmZmVyIHN0YXJ0aW5nIGF0Cis8cGFyYW1ldGVyPmJ1ZjwvcGFyYW1ldGVyPi4gVGhlIGxheW91dCBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIGlzCitkaXNjdXNzZWQgaW4gdGhlIHJlc3BlY3RpdmUgZGV2aWNlIGludGVyZmFjZSBzZWN0aW9uLCBzZWUgIyMuIElmIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4gaXMgemVybywKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiByZXR1cm5zIHplcm8gYW5kIGhhcyBubyBvdGhlciByZXN1bHRzLiBJZgorPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPiBpcyBncmVhdGVyIHRoYW4KKzxjb25zdGFudD5TU0laRV9NQVg8L2NvbnN0YW50PiwgdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gUmVnYXJkbGVzcworb2YgdGhlIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4gdmFsdWUgZWFjaAorPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGNhbGwgd2lsbCBwcm92aWRlIGF0IG1vc3Qgb25lIGZyYW1lICh0d28KK2ZpZWxkcykgd29ydGggb2YgZGF0YS48L3BhcmE+CisKKyAgICA8cGFyYT5CeSBkZWZhdWx0IDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBibG9ja3MgdW50aWwgZGF0YQorYmVjb21lcyBhdmFpbGFibGUuIFdoZW4gdGhlIDxjb25zdGFudD5PX05PTkJMT0NLPC9jb25zdGFudD4gZmxhZyB3YXMKK2dpdmVuIHRvIHRoZSAmZnVuYy1vcGVuOyBmdW5jdGlvbiBpdAorcmV0dXJucyBpbW1lZGlhdGVseSB3aXRoIGFuICZFQUdBSU47IHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUuIFRoZQorJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBmdW5jdGlvbnMKK2NhbiBhbHdheXMgYmUgdXNlZCB0byBzdXNwZW5kIGV4ZWN1dGlvbiB1bnRpbCBkYXRhIGJlY29tZXMgYXZhaWxhYmxlLiBBbGwKK2RyaXZlcnMgc3VwcG9ydGluZyB0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIG11c3QgYWxzbworc3VwcG9ydCA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBhbmQKKzxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPi48L3BhcmE+CisKKyAgICA8cGFyYT5Ecml2ZXJzIGNhbiBpbXBsZW1lbnQgcmVhZCBmdW5jdGlvbmFsaXR5IGluIGRpZmZlcmVudAord2F5cywgdXNpbmcgYSBzaW5nbGUgb3IgbXVsdGlwbGUgYnVmZmVycyBhbmQgZGlzY2FyZGluZyB0aGUgb2xkZXN0IG9yCituZXdlc3QgZnJhbWVzIG9uY2UgdGhlIGludGVybmFsIGJ1ZmZlcnMgYXJlIGZpbGxlZC48L3BhcmE+CisKKyAgICA8cGFyYT48ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gbmV2ZXIgcmV0dXJucyBhICJzbmFwc2hvdCIgb2YgYQorYnVmZmVyIGJlaW5nIGZpbGxlZC4gVXNpbmcgYSBzaW5nbGUgYnVmZmVyIHRoZSBkcml2ZXIgd2lsbCBzdG9wCitjYXB0dXJpbmcgd2hlbiB0aGUgYXBwbGljYXRpb24gc3RhcnRzIHJlYWRpbmcgdGhlIGJ1ZmZlciB1bnRpbCB0aGUKK3JlYWQgaXMgZmluaXNoZWQuIFRodXMgb25seSB0aGUgcGVyaW9kIG9mIHRoZSB2ZXJ0aWNhbCBibGFua2luZworaW50ZXJ2YWwgaXMgYXZhaWxhYmxlIGZvciByZWFkaW5nLCBvciB0aGUgY2FwdHVyZSByYXRlIG11c3QgZmFsbCBiZWxvdwordGhlIG5vbWluYWwgZnJhbWUgcmF0ZSBvZiB0aGUgdmlkZW8gc3RhbmRhcmQuPC9wYXJhPgorCis8cGFyYT5UaGUgYmVoYXZpb3Igb2YKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiB3aGVuIGNhbGxlZCBkdXJpbmcgdGhlIGFjdGl2ZSBwaWN0dXJlCitwZXJpb2Qgb3IgdGhlIHZlcnRpY2FsIGJsYW5raW5nIHNlcGFyYXRpbmcgdGhlIHRvcCBhbmQgYm90dG9tIGZpZWxkCitkZXBlbmRzIG9uIHRoZSBkaXNjYXJkaW5nIHBvbGljeS4gQSBkcml2ZXIgZGlzY2FyZGluZyB0aGUgb2xkZXN0CitmcmFtZXMga2VlcHMgY2FwdHVyaW5nIGludG8gYW4gaW50ZXJuYWwgYnVmZmVyLCBjb250aW51b3VzbHkKK292ZXJ3cml0aW5nIHRoZSBwcmV2aW91c2x5LCBub3QgcmVhZCBmcmFtZSwgYW5kIHJldHVybnMgdGhlIGZyYW1lCitiZWluZyByZWNlaXZlZCBhdCB0aGUgdGltZSBvZiB0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGNhbGwgYXMKK3Nvb24gYXMgaXQgaXMgY29tcGxldGUuPC9wYXJhPgorCisgICAgPHBhcmE+QSBkcml2ZXIgZGlzY2FyZGluZyB0aGUgbmV3ZXN0IGZyYW1lcyBzdG9wcyBjYXB0dXJpbmcgdW50aWwKK3RoZSBuZXh0IDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBjYWxsLiBUaGUgZnJhbWUgYmVpbmcgcmVjZWl2ZWQgYXQKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiB0aW1lIGlzIGRpc2NhcmRlZCwgcmV0dXJuaW5nIHRoZSBmb2xsb3dpbmcKK2ZyYW1lIGluc3RlYWQuIEFnYWluIHRoaXMgaW1wbGllcyBhIHJlZHVjdGlvbiBvZiB0aGUgY2FwdHVyZSByYXRlIHRvCitvbmUgaGFsZiBvciBsZXNzIG9mIHRoZSBub21pbmFsIGZyYW1lIHJhdGUuIEFuIGV4YW1wbGUgb2YgdGhpcyBtb2RlbAoraXMgdGhlIHZpZGVvIHJlYWQgbW9kZSBvZiB0aGUgYnR0diBkcml2ZXIsIGluaXRpYXRpbmcgYSBETUEgdG8gdXNlcgorbWVtb3J5IHdoZW4gPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCBhbmQgcmV0dXJuaW5nIHdoZW4KK3RoZSBETUEgZmluaXNoZWQuPC9wYXJhPgorCisgICAgPHBhcmE+SW4gdGhlIG11bHRpcGxlIGJ1ZmZlciBtb2RlbCBkcml2ZXJzIG1haW50YWluIGEgcmluZyBvZgoraW50ZXJuYWwgYnVmZmVycywgYXV0b21hdGljYWxseSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZnJlZSBidWZmZXIuCitUaGlzIGFsbG93cyBjb250aW51b3VzIGNhcHR1cmluZyB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjYW4gZW1wdHkgdGhlCitidWZmZXJzIGZhc3QgZW5vdWdoLiBBZ2FpbiwgdGhlIGJlaGF2aW9yIHdoZW4gdGhlIGRyaXZlciBydW5zIG91dCBvZgorZnJlZSBidWZmZXJzIGRlcGVuZHMgb24gdGhlIGRpc2NhcmRpbmcgcG9saWN5LjwvcGFyYT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gZ2V0IGFuZCBzZXQgdGhlIG51bWJlciBvZiBidWZmZXJzIHVzZWQKK2ludGVybmFsbHkgYnkgdGhlIGRyaXZlciB3aXRoIHRoZSAmVklESU9DLUctUEFSTTsgYW5kICZWSURJT0MtUy1QQVJNOworaW9jdGxzLiBUaGV5IGFyZSBvcHRpb25hbCwgaG93ZXZlci4gVGhlIGRpc2NhcmRpbmcgcG9saWN5IGlzIG5vdAorcmVwb3J0ZWQgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkLiBGb3IgbWluaW11bSByZXF1aXJlbWVudHMgc2VlIDx4cmVmCisJbGlua2VuZD0iZGV2aWNlcyIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+UmV0dXJuIFZhbHVlPC90aXRsZT4KKworICAgIDxwYXJhPk9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpcyByZXR1cm5lZC4gSXQgaXMgbm90CithbiBlcnJvciBpZiB0aGlzIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQsCitvciB0aGUgYW1vdW50IG9mIGRhdGEgcmVxdWlyZWQgZm9yIG9uZSBmcmFtZS4gVGhpcyBtYXkgaGFwcGVuIGZvcgorZXhhbXBsZSBiZWNhdXNlIDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiB3YXMgaW50ZXJydXB0ZWQgYnkgYQorc2lnbmFsLiBPbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQsIGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+Cit2YXJpYWJsZSBpcyBzZXQgYXBwcm9wcmlhdGVseS4gSW4gdGhpcyBjYXNlIHRoZSBuZXh0IHJlYWQgd2lsbCBzdGFydAorYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZS4gUG9zc2libGUgZXJyb3IgY29kZXMgYXJlOjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUFHQUlOPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5vbi1ibG9ja2luZyBJL08gaGFzIGJlZW4gc2VsZWN0ZWQgdXNpbmcKK09fTk9OQkxPQ0sgYW5kIG5vIGRhdGEgd2FzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBmb3IgcmVhZGluZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCQURGPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gaXMgbm90IGEgdmFsaWQgZmlsZQorZGVzY3JpcHRvciBvciBpcyBub3Qgb3BlbiBmb3IgcmVhZGluZywgb3IgdGhlIHByb2Nlc3MgYWxyZWFkeSBoYXMgdGhlCittYXhpbXVtIG51bWJlciBvZiBmaWxlcyBvcGVuLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHJlYWQgc3RyZWFtcyBhbmQgdGhlCitkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj4gcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUKK21lbW9yeSBhcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGNhbGwgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGJlZm9yZSBhbnkKK2RhdGEgd2FzIHJlYWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU88L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGVycm9yLiBUaGlzIGluZGljYXRlcyBzb21lIGhhcmR3YXJlIHByb2JsZW0gb3IgYQorZmFpbHVyZSB0byBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIGRldmljZSAoVVNCIGNhbWVyYSBldGMuKS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIG5vdAorc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBub3Qgb24gdGhpcyBkZXZpY2UsIG9yIGdlbmVyYWxseSBub3Qgb24gdGhpcwordHlwZSBvZiBkZXZpY2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1zZWxlY3QueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXNlbGVjdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3MTM2MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1zZWxlY3QueG1sCkBAIC0wLDAgKzEsMTM4IEBACis8cmVmZW50cnkgaWQ9ImZ1bmMtc2VsZWN0Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBzZWxlY3QoKTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+djRsMi1zZWxlY3Q8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+U3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZzwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNzeW5vcHNpc2luZm8+CisjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKKyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPnNlbGVjdDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5uZmRzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+ZmRfc2V0ICo8cGFyYW1ldGVyPnJlYWRmZHM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5mZF9zZXQgKjxwYXJhbWV0ZXI+d3JpdGVmZHM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5mZF9zZXQgKjxwYXJhbWV0ZXI+ZXhjZXB0ZmRzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHRpbWV2YWwgKjxwYXJhbWV0ZXI+dGltZW91dDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5XaXRoIHRoZSA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBhcHBsaWNhdGlvbnMKK2NhbiBzdXNwZW5kIGV4ZWN1dGlvbiB1bnRpbCB0aGUgZHJpdmVyIGhhcyBjYXB0dXJlZCBkYXRhIG9yIGlzIHJlYWR5Cit0byBhY2NlcHQgZGF0YSBmb3Igb3V0cHV0LjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gc3RyZWFtaW5nIEkvTyBoYXMgYmVlbiBuZWdvdGlhdGVkIHRoaXMgZnVuY3Rpb24gd2FpdHMKK3VudGlsIGEgYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCBvciBkaXNwbGF5ZWQgYW5kIGNhbiBiZSBkZXF1ZXVlZCB3aXRoCit0aGUgJlZJRElPQy1EUUJVRjsgaW9jdGwuIFdoZW4gYnVmZmVycyBhcmUgYWxyZWFkeSBpbiB0aGUgb3V0Z29pbmcKK3F1ZXVlIG9mIHRoZSBkcml2ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkuPC9wYXJhPgorCisgICAgPHBhcmE+T24gc3VjY2VzcyA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiByZXR1cm5zIHRoZSB0b3RhbAorbnVtYmVyIG9mIGJpdHMgc2V0IGluIHRoZSA8c3RydWN0bmFtZT5mZF9zZXQ8L3N0cnVjdG5hbWU+cy4gV2hlbiB0aGUKK2Z1bmN0aW9uIHRpbWVkIG91dCBpdCByZXR1cm5zIGEgdmFsdWUgb2YgemVyby4gT24gZmFpbHVyZSBpdCByZXR1cm5zCis8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBhbmQgdGhlIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPgordmFyaWFibGUgaXMgc2V0IGFwcHJvcHJpYXRlbHkuIFdoZW4gdGhlIGFwcGxpY2F0aW9uIGRpZCBub3QgY2FsbAorJlZJRElPQy1RQlVGOyBvciAmVklESU9DLVNUUkVBTU9OOyB5ZXQgdGhlCis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBzdWNjZWVkcywgc2V0dGluZyB0aGUgYml0IG9mCit0aGUgZmlsZSBkZXNjcmlwdG9yIGluIDxwYXJhbWV0ZXI+cmVhZGZkczwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj53cml0ZWZkczwvcGFyYW1ldGVyPiwgYnV0IHN1YnNlcXVlbnQgJlZJRElPQy1EUUJVRjsgY2FsbHMKK3dpbGwgZmFpbC48Zm9vdG5vdGU+PHBhcmE+VGhlIExpbnV4IGtlcm5lbCBpbXBsZW1lbnRzCis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBsaWtlIHRoZSAmZnVuYy1wb2xsOyBmdW5jdGlvbiwgYnV0Cis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBjYW5ub3QgcmV0dXJuIGEKKzxjb25zdGFudD5QT0xMRVJSPC9jb25zdGFudD4uPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHVzZSBvZiB0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcworYmVlbiBuZWdvdGlhdGVkIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IGNhcHR1cmUgeWV0LCB0aGUKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHN0YXJ0cyBjYXB0dXJpbmcuIFdoZW4gdGhhdAorZmFpbHMsIDxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IHJldHVybnMgc3VjY2Vzc2Z1bCBhbmQgYQorc3Vic2VxdWVudCA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gY2FsbCwgd2hpY2ggYWxzbyBhdHRlbXB0cyB0bworc3RhcnQgY2FwdHVyaW5nLCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLiBXaGVuIHRoZQorZHJpdmVyIGNhcHR1cmVzIGNvbnRpbnVvdXNseSAoYXMgb3Bwb3NlZCB0bywgZm9yIGV4YW1wbGUsIHN0aWxsCitpbWFnZXMpIGFuZCBkYXRhIGlzIGFscmVhZHkgYXZhaWxhYmxlIHRoZQorPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseS48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHVzZSBvZiB0aGUgPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMKK2JlZW4gbmVnb3RpYXRlZCB0aGUgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24ganVzdCB3YWl0cwordW50aWwgdGhlIGRyaXZlciBpcyByZWFkeSBmb3IgYSBub24tYmxvY2tpbmcKKzxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gY2FsbC48L3BhcmE+CisKKyAgICA8cGFyYT5BbGwgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlIDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBvcgorPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBvciBzdHJlYW1pbmcgSS9PIG11c3QgYWxzbworc3VwcG9ydCB0aGUgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uPC9wYXJhPgorCisgICAgPHBhcmE+Rm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIDxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+CittYW51YWwgcGFnZS48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlJldHVybiBWYWx1ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5PbiBzdWNjZXNzLCA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiByZXR1cm5zIHRoZSBudW1iZXIKK29mIGRlc2NyaXB0b3JzIGNvbnRhaW5lZCBpbiB0aGUgdGhyZWUgcmV0dXJuZWQgZGVzY3JpcHRvciBzZXRzLCB3aGljaAord2lsbCBiZSB6ZXJvIGlmIHRoZSB0aW1lb3V0IGV4cGlyZWQuIE9uIGVycm9yCis8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgYW5kIHRoZQorPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5OyB0aGUgc2V0cyBhbmQKKzxwYXJhbWV0ZXI+dGltZW91dDwvcGFyYW1ldGVyPiBhcmUgdW5kZWZpbmVkLiBQb3NzaWJsZSBlcnJvciBjb2RlcworYXJlOjwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+T25lIG9yIG1vcmUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciBzZXRzIHNwZWNpZmllZCBhCitmaWxlIGRlc2NyaXB0b3IgdGhhdCBpcyBub3Qgb3Blbi48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSByZWFkIG9yIHdyaXRlCitzdHJlYW1zIGFuZCB0aGUgZGV2aWNlIGlzIGFscmVhZHkgaW4gdXNlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUZBVUxUPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPnJlYWRmZHM8L3BhcmFtZXRlcj4sCis8cGFyYW1ldGVyPndyaXRlZmRzPC9wYXJhbWV0ZXI+LCA8cGFyYW1ldGVyPmV4Y2VwdGZkczwvcGFyYW1ldGVyPiBvcgorPHBhcmFtZXRlcj50aW1lb3V0PC9wYXJhbWV0ZXI+IHBvaW50ZXIgcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUgbWVtb3J5CithcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGNhbGwgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSA8cGFyYW1ldGVyPm5mZHM8L3BhcmFtZXRlcj4gYXJndW1lbnQgaXMgbGVzcyB0aGFuCit6ZXJvIG9yIGdyZWF0ZXIgdGhhbiA8Y29uc3RhbnQ+RkRfU0VUU0laRTwvY29uc3RhbnQ+LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtd3JpdGUueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXdyaXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzA5YzA5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLXdyaXRlLnhtbApAQCAtMCwwICsxLDEzNiBAQAorPHJlZmVudHJ5IGlkPSJmdW5jLXdyaXRlIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMiB3cml0ZSgpPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT52NGwyLXdyaXRlPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPldyaXRlIHRvIGEgVjRMMiBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5zc2l6ZV90IDxmdW5jdGlvbj53cml0ZTwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+YnVmPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YnVmPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPjxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gd3JpdGVzIHVwIHRvCis8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+IGJ5dGVzIHRvIHRoZSBkZXZpY2UgcmVmZXJlbmNlZCBieSB0aGUKK2ZpbGUgZGVzY3JpcHRvciA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGZyb20gdGhlIGJ1ZmZlciBzdGFydGluZyBhdAorPHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj4uIFdoZW4gdGhlIGhhcmR3YXJlIG91dHB1dHMgYXJlIG5vdCBhY3RpdmUKK3lldCwgdGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZW0uIFdoZW4gPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPiBpcworemVybywgPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiByZXR1cm5zCis8cmV0dXJudmFsdWU+MDwvcmV0dXJudmFsdWU+IHdpdGhvdXQgYW55IG90aGVyIGVmZmVjdC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBwcm92aWRlIG1vcmUgZGF0YSBpbiB0aW1lLCB0aGUKK3ByZXZpb3VzIHZpZGVvIGZyYW1lLCByYXcgVkJJIGltYWdlLCBzbGljZWQgVlBTIG9yIFdTUyBkYXRhIGlzCitkaXNwbGF5ZWQgYWdhaW4uIFNsaWNlZCBUZWxldGV4dCBvciBDbG9zZWQgQ2FwdGlvbiBkYXRhIGlzIG5vdAorcmVwZWF0ZWQsIHRoZSBkcml2ZXIgaW5zZXJ0cyBhIGJsYW5rIGxpbmUgaW5zdGVhZC48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgorCisgICAgPHBhcmE+T24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGFyZSByZXR1cm5lZC4gWmVybworaW5kaWNhdGVzIG5vdGhpbmcgd2FzIHdyaXR0ZW4uIE9uIGVycm9yLCA8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPgoraXMgcmV0dXJuZWQsIGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldAorYXBwcm9wcmlhdGVseS4gSW4gdGhpcyBjYXNlIHRoZSBuZXh0IHdyaXRlIHdpbGwgc3RhcnQgYXQgdGhlIGJlZ2lubmluZworb2YgYSBuZXcgZnJhbWUuIFBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZTo8L3BhcmE+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBR0FJTjwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Ob24tYmxvY2tpbmcgSS9PIGhhcyBiZWVuIHNlbGVjdGVkIHVzaW5nIHRoZSA8bGluaworbGlua2VuZD0iZnVuYy1vcGVuIj48Y29uc3RhbnQ+T19OT05CTE9DSzwvY29uc3RhbnQ+PC9saW5rPiBmbGFnIGFuZCBubworYnVmZmVyIHNwYWNlIHdhcyBhdmFpbGFibGUgdG8gd3JpdGUgdGhlIGRhdGEgaW1tZWRpYXRlbHkuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQkFERjwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzIG5vdCBhIHZhbGlkIGZpbGUKK2Rlc2NyaXB0b3Igb3IgaXMgbm90IG9wZW4gZm9yIHdyaXRpbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgd3JpdGUgc3RyZWFtcyBhbmQgdGhlCitkZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PHBhcmFtZXRlcj5idWY8L3BhcmFtZXRlcj4gcmVmZXJlbmNlcyBhbiBpbmFjY2Vzc2libGUKK21lbW9yeSBhcmVhLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVFI8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGNhbGwgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGJlZm9yZSBhbnkKK2RhdGEgd2FzIHdyaXR0ZW4uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU88L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGVycm9yLiBUaGlzIGluZGljYXRlcyBzb21lIGhhcmR3YXJlIHByb2JsZW0uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgbm90CitzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG5vdCBvbiB0aGlzIGRldmljZSwgb3IgZ2VuZXJhbGx5IG5vdCBvbiB0aGlzCit0eXBlIG9mIGRldmljZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJmMjQzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwKQEAgLTAsMCArMSwxMDczIEBACisgIDx0aXRsZT5JbnB1dC9PdXRwdXQ8L3RpdGxlPgorCisgIDxwYXJhPlRoZSBWNEwyIEFQSSBkZWZpbmVzIHNldmVyYWwgZGlmZmVyZW50IG1ldGhvZHMgdG8gcmVhZCBmcm9tIG9yCit3cml0ZSB0byBhIGRldmljZS4gQWxsIGRyaXZlcnMgZXhjaGFuZ2luZyBkYXRhIHdpdGggYXBwbGljYXRpb25zIG11c3QKK3N1cHBvcnQgYXQgbGVhc3Qgb25lIG9mIHRoZW0uPC9wYXJhPgorCisgIDxwYXJhPlRoZSBjbGFzc2ljIEkvTyBtZXRob2QgdXNpbmcgdGhlIDxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPgorYW5kIDxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZAorYWZ0ZXIgb3BlbmluZyBhIFY0TDIgZGV2aWNlLiBXaGVuIHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCittZXRob2QgYXR0ZW1wdHMgdG8gcmVhZCBvciB3cml0ZSB3aWxsIGZhaWwgYXQgYW55IHRpbWUuPC9wYXJhPgorCisgIDxwYXJhPk90aGVyIG1ldGhvZHMgbXVzdCBiZSBuZWdvdGlhdGVkLiBUbyBzZWxlY3QgdGhlIHN0cmVhbWluZyBJL08KK21ldGhvZCB3aXRoIG1lbW9yeSBtYXBwZWQgb3IgdXNlciBidWZmZXJzIGFwcGxpY2F0aW9ucyBjYWxsIHRoZQorJlZJRElPQy1SRVFCVUZTOyBpb2N0bC4gVGhlIGFzeW5jaHJvbm91cyBJL08gbWV0aG9kIGlzIG5vdCBkZWZpbmVkCit5ZXQuPC9wYXJhPgorCisgIDxwYXJhPlZpZGVvIG92ZXJsYXkgY2FuIGJlIGNvbnNpZGVyZWQgYW5vdGhlciBJL08gbWV0aG9kLCBhbHRob3VnaAordGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGRpcmVjdGx5IHJlY2VpdmUgdGhlIGltYWdlIGRhdGEuIEl0IGlzCitzZWxlY3RlZCBieSBpbml0aWF0aW5nIHZpZGVvIG92ZXJsYXkgd2l0aCB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgPHhyZWYgbGlua2VuZD0ib3ZlcmxheSIgLz4uPC9wYXJhPgorCisgIDxwYXJhPkdlbmVyYWxseSBleGFjdGx5IG9uZSBJL08gbWV0aG9kLCBpbmNsdWRpbmcgb3ZlcmxheSwgaXMKK2Fzc29jaWF0ZWQgd2l0aCBlYWNoIGZpbGUgZGVzY3JpcHRvci4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUKK2FwcGxpY2F0aW9ucyBub3QgZXhjaGFuZ2luZyBkYXRhIHdpdGggYSBkcml2ZXIgKCJwYW5lbCBhcHBsaWNhdGlvbnMiLAorc2VlIDx4cmVmIGxpbmtlbmQ9Im9wZW4iIC8+KSBhbmQgZHJpdmVycyBwZXJtaXR0aW5nIHNpbXVsdGFuZW91cyB2aWRlbyBjYXB0dXJpbmcKK2FuZCBvdmVybGF5IHVzaW5nIHRoZSBzYW1lIGZpbGUgZGVzY3JpcHRvciwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBWNEwKK2FuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFY0TDIuPC9wYXJhPgorCisgIDxwYXJhPjxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfUkVRQlVGUzwvY29uc3RhbnQ+IHdvdWxkIHBlcm1pdCB0aGlzIHRvIHNvbWUgZGVncmVlLAorYnV0IGZvciBzaW1wbGljaXR5IGRyaXZlcnMgbmVlZCBub3Qgc3VwcG9ydCBzd2l0Y2hpbmcgdGhlIEkvTyBtZXRob2QKKyhhZnRlciBmaXJzdCBzd2l0Y2hpbmcgYXdheSBmcm9tIHJlYWQvd3JpdGUpIG90aGVyIHRoYW4gYnkgY2xvc2luZworYW5kIHJlb3BlbmluZyB0aGUgZGV2aWNlLjwvcGFyYT4KKworICA8cGFyYT5UaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSB2YXJpb3VzIEkvTyBtZXRob2RzIGluCittb3JlIGRldGFpbC48L3BhcmE+CisKKyAgPHNlY3Rpb24gaWQ9InJ3Ij4KKyAgICA8dGl0bGU+UmVhZC9Xcml0ZTwvdGl0bGU+CisKKyAgICA8cGFyYT5JbnB1dCBhbmQgb3V0cHV0IGRldmljZXMgc3VwcG9ydCB0aGUKKzxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwKK3Jlc3BlY3RpdmVseSwgd2hlbiB0aGUgPGNvbnN0YW50PlY0TDJfQ0FQX1JFQURXUklURTwvY29uc3RhbnQ+IGZsYWcgaW4KK3RoZSA8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgJnY0bDItY2FwYWJpbGl0eTsKK3JldHVybmVkIGJ5IHRoZSAmVklESU9DLVFVRVJZQ0FQOyBpb2N0bCBpcyBzZXQuPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBtYXkgbmVlZCB0aGUgQ1BVIHRvIGNvcHkgdGhlIGRhdGEsIGJ1dCB0aGV5IG1heSBhbHNvCitzdXBwb3J0IERNQSB0byBvciBmcm9tIHVzZXIgbWVtb3J5LCBzbyB0aGlzIEkvTyBtZXRob2QgaXMgbm90CituZWNlc3NhcmlseSBsZXNzIGVmZmljaWVudCB0aGFuIG90aGVyIG1ldGhvZHMgbWVyZWx5IGV4Y2hhbmdpbmcgYnVmZmVyCitwb2ludGVycy4gSXQgaXMgY29uc2lkZXJlZCBpbmZlcmlvciB0aG91Z2ggYmVjYXVzZSBubyBtZXRhLWluZm9ybWF0aW9uCitsaWtlIGZyYW1lIGNvdW50ZXJzIG9yIHRpbWVzdGFtcHMgYXJlIHBhc3NlZC4gVGhpcyBpbmZvcm1hdGlvbiBpcworbmVjZXNzYXJ5IHRvIHJlY29nbml6ZSBmcmFtZSBkcm9wcGluZyBhbmQgdG8gc3luY2hyb25pemUgd2l0aCBvdGhlcgorZGF0YSBzdHJlYW1zLiBIb3dldmVyIHRoaXMgaXMgYWxzbyB0aGUgc2ltcGxlc3QgSS9PIG1ldGhvZCwgcmVxdWlyaW5nCitsaXR0bGUgb3Igbm8gc2V0dXAgdG8gZXhjaGFuZ2UgZGF0YS4gSXQgcGVybWl0cyBjb21tYW5kIGxpbmUgc3R1bnRzCitsaWtlIHRoaXMgKHRoZSA8YXBwbGljYXRpb24+dmlkY3RybDwvYXBwbGljYXRpb24+IHRvb2wgaXMKK2ZpY3RpdGlvdXMpOjwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICA8c2NyZWVuPgorJmd0OyB2aWRjdHJsIC9kZXYvdmlkZW8gLS1pbnB1dD0wIC0tZm9ybWF0PVlVWVYgLS1zaXplPTM1MngyODgKKyZndDsgZGQgaWY9L2Rldi92aWRlbyBvZj1teWltYWdlLjQyMiBicz0yMDI3NTIgY291bnQ9MQorPC9zY3JlZW4+CisgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICA8cGFyYT5UbyByZWFkIGZyb20gdGhlIGRldmljZSBhcHBsaWNhdGlvbnMgdXNlIHRoZQorJmZ1bmMtcmVhZDsgZnVuY3Rpb24sIHRvIHdyaXRlIHRoZSAmZnVuYy13cml0ZTsgZnVuY3Rpb24uCitEcml2ZXJzIG11c3QgaW1wbGVtZW50IG9uZSBJL08gbWV0aG9kIGlmIHRoZXkKK2V4Y2hhbmdlIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMsIGJ1dCBpdCBuZWVkIG5vdCBiZSB0aGlzLjxmb290bm90ZT4KKwk8cGFyYT5JdCB3b3VsZCBiZSBkZXNpcmFibGUgaWYgYXBwbGljYXRpb25zIGNvdWxkIGRlcGVuZCBvbgorZHJpdmVycyBzdXBwb3J0aW5nIGFsbCBJL08gaW50ZXJmYWNlcywgYnV0IGFzIG11Y2ggYXMgdGhlIGNvbXBsZXgKK21lbW9yeSBtYXBwaW5nIEkvTyBjYW4gYmUgaW5hZGVxdWF0ZSBmb3Igc29tZSBkZXZpY2VzIHdlIGhhdmUgbm8KK3JlYXNvbiB0byByZXF1aXJlIHRoaXMgaW50ZXJmYWNlLCB3aGljaCBpcyBtb3N0IHVzZWZ1bCBmb3Igc2ltcGxlCithcHBsaWNhdGlvbnMgY2FwdHVyaW5nIHN0aWxsIGltYWdlcy48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPiBXaGVuIHJlYWRpbmcgb3Igd3JpdGluZyBpcyBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIKK211c3QgYWxzbyBzdXBwb3J0IHRoZSAmZnVuYy1zZWxlY3Q7IGFuZCAmZnVuYy1wb2xsOworZnVuY3Rpb24uPGZvb3Rub3RlPgorCTxwYXJhPkF0IHRoZSBkcml2ZXIgbGV2ZWwgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gYW5kCis8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gYXJlIHRoZSBzYW1lLCBhbmQKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGlzIHRvbyBpbXBvcnRhbnQgdG8gYmUgb3B0aW9uYWwuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0ibW1hcCI+CisgICAgPHRpdGxlPlN0cmVhbWluZyBJL08gKE1lbW9yeSBNYXBwaW5nKTwvdGl0bGU+CisKKyAgICA8cGFyYT5JbnB1dCBhbmQgb3V0cHV0IGRldmljZXMgc3VwcG9ydCB0aGlzIEkvTyBtZXRob2Qgd2hlbiB0aGUKKzxjb25zdGFudD5WNEwyX0NBUF9TVFJFQU1JTkc8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLWNhcGFiaWxpdHk7CityZXR1cm5lZCBieSB0aGUgJlZJRElPQy1RVUVSWUNBUDsgaW9jdGwgaXMgc2V0LiBUaGVyZSBhcmUgdHdvCitzdHJlYW1pbmcgbWV0aG9kcywgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtZW1vcnkgbWFwcGluZyBmbGF2b3IgaXMKK3N1cHBvcnRlZCBhcHBsaWNhdGlvbnMgbXVzdCBjYWxsIHRoZSAmVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlN0cmVhbWluZyBpcyBhbiBJL08gbWV0aG9kIHdoZXJlIG9ubHkgcG9pbnRlcnMgdG8gYnVmZmVycworYXJlIGV4Y2hhbmdlZCBiZXR3ZWVuIGFwcGxpY2F0aW9uIGFuZCBkcml2ZXIsIHRoZSBkYXRhIGl0c2VsZiBpcyBub3QKK2NvcGllZC4gTWVtb3J5IG1hcHBpbmcgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIG1hcCBidWZmZXJzIGluIGRldmljZQorbWVtb3J5IGludG8gdGhlIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZS4gRGV2aWNlIG1lbW9yeSBjYW4gYmUgZm9yCitleGFtcGxlIHRoZSB2aWRlbyBtZW1vcnkgb24gYSBncmFwaGljcyBjYXJkIHdpdGggYSB2aWRlbyBjYXB0dXJlCithZGQtb24uIEhvd2V2ZXIsIGJlaW5nIHRoZSBtb3N0IGVmZmljaWVudCBJL08gbWV0aG9kIGF2YWlsYWJsZSBmb3IgYQorbG9uZyB0aW1lLCBtYW55IG90aGVyIGRyaXZlcnMgc3VwcG9ydCBzdHJlYW1pbmcgYXMgd2VsbCwgYWxsb2NhdGluZworYnVmZmVycyBpbiBETUEtYWJsZSBtYWluIG1lbW9yeS48L3BhcmE+CisKKyAgICA8cGFyYT5BIGRyaXZlciBjYW4gc3VwcG9ydCBtYW55IHNldHMgb2YgYnVmZmVycy4gRWFjaCBzZXQgaXMKK2lkZW50aWZpZWQgYnkgYSB1bmlxdWUgYnVmZmVyIHR5cGUgdmFsdWUuIFRoZSBzZXRzIGFyZSBpbmRlcGVuZGVudCBhbmQKK2VhY2ggc2V0IGNhbiBob2xkIGEgZGlmZmVyZW50IHR5cGUgb2YgZGF0YS4gVG8gYWNjZXNzIGRpZmZlcmVudCBzZXRzCithdCB0aGUgc2FtZSB0aW1lIGRpZmZlcmVudCBmaWxlIGRlc2NyaXB0b3JzIG11c3QgYmUgdXNlZC48Zm9vdG5vdGU+CisJPHBhcmE+T25lIGNvdWxkIHVzZSBvbmUgZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXQgdGhlIGJ1ZmZlcgordHlwZSBmaWVsZCBhY2NvcmRpbmdseSB3aGVuIGNhbGxpbmcgJlZJRElPQy1RQlVGOyBldGMuLCBidXQgaXQgbWFrZXMKK3RoZSA8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBhbWJpZ3VvdXMuIFdlIGFsc28gbGlrZSB0aGUKK2NsZWFuIGFwcHJvYWNoIG9mIG9uZSBmaWxlIGRlc2NyaXB0b3IgcGVyIGxvZ2ljYWwgc3RyZWFtLiBWaWRlbworb3ZlcmxheSBmb3IgZXhhbXBsZSBpcyBhbHNvIGEgbG9naWNhbCBzdHJlYW0sIGFsdGhvdWdoIHRoZSBDUFUgaXMgbm90CituZWVkZWQgZm9yIGNvbnRpbnVvdXMgb3BlcmF0aW9uLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPHBhcmE+VG8gYWxsb2NhdGUgZGV2aWNlIGJ1ZmZlcnMgYXBwbGljYXRpb25zIGNhbGwgdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsIHdpdGggdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgYW5kIGJ1ZmZlcgordHlwZSwgZm9yIGV4YW1wbGUgPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LgorVGhpcyBpb2N0bCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgb3IgdG8gZnJlZQordGhlIGFsbG9jYXRlZCBtZW1vcnksIHByb3ZpZGVkIG5vbmUgb2YgdGhlIGJ1ZmZlcnMgYXJlIHN0aWxsCittYXBwZWQuPC9wYXJhPgorCisgICAgPHBhcmE+QmVmb3JlIGFwcGxpY2F0aW9ucyBjYW4gYWNjZXNzIHRoZSBidWZmZXJzIHRoZXkgbXVzdCBtYXAKK3RoZW0gaW50byB0aGVpciBhZGRyZXNzIHNwYWNlIHdpdGggdGhlICZmdW5jLW1tYXA7IGZ1bmN0aW9uLiBUaGUKK2xvY2F0aW9uIG9mIHRoZSBidWZmZXJzIGluIGRldmljZSBtZW1vcnkgY2FuIGJlIGRldGVybWluZWQgd2l0aCB0aGUKKyZWSURJT0MtUVVFUllCVUY7IGlvY3RsLiBUaGUgPHN0cnVjdGZpZWxkPm0ub2Zmc2V0PC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gcmV0dXJuZWQgaW4gYSAmdjRsMi1idWZmZXI7IGFyZQorcGFzc2VkIGFzIHNpeHRoIGFuZCBzZWNvbmQgcGFyYW1ldGVyIHRvIHRoZQorPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBUaGUgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzCittdXN0IG5vdCBiZSBtb2RpZmllZC4gUmVtZW1iZXIgdGhlIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBpbiBwaHlzaWNhbAorbWVtb3J5LCBhcyBvcHBvc2VkIHRvIHZpcnR1YWwgbWVtb3J5IHdoaWNoIGNhbiBiZSBzd2FwcGVkIG91dCB0byBkaXNrLgorQXBwbGljYXRpb25zIHNob3VsZCBmcmVlIHRoZSBidWZmZXJzIGFzIHNvb24gYXMgcG9zc2libGUgd2l0aCB0aGUKKyZmdW5jLW11bm1hcDsgZnVuY3Rpb24uPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+TWFwcGluZyBidWZmZXJzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IHJlcWJ1ZjsKK3N0cnVjdCB7CisJdm9pZCAqc3RhcnQ7CisJc2l6ZV90IGxlbmd0aDsKK30gKmJ1ZmZlcnM7Cit1bnNpZ25lZCBpbnQgaTsKKworbWVtc2V0ICgmYW1wO3JlcWJ1ZiwgMCwgc2l6ZW9mIChyZXFidWYpKTsKK3JlcWJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworcmVxYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CityZXFidWYuY291bnQgPSAyMDsKKworaWYgKC0xID09IGlvY3RsIChmZCwgJlZJRElPQy1SRVFCVUZTOywgJmFtcDtyZXFidWYpKSB7CisJaWYgKGVycm5vID09IEVJTlZBTCkKKwkJcHJpbnRmICgiVmlkZW8gY2FwdHVyaW5nIG9yIG1tYXAtc3RyZWFtaW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCWVsc2UKKwkJcGVycm9yICgiVklESU9DX1JFUUJVRlMiKTsKKworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisKKy8qIFdlIHdhbnQgYXQgbGVhc3QgZml2ZSBidWZmZXJzLiAqLworCitpZiAocmVxYnVmLmNvdW50ICZsdDsgNSkgeworCS8qIFlvdSBtYXkgbmVlZCB0byBmcmVlIHRoZSBidWZmZXJzIGhlcmUuICovCisJcHJpbnRmICgiTm90IGVub3VnaCBidWZmZXIgbWVtb3J5XG4iKTsKKwlleGl0IChFWElUX0ZBSUxVUkUpOworfQorCitidWZmZXJzID0gY2FsbG9jIChyZXFidWYuY291bnQsIHNpemVvZiAoKmJ1ZmZlcnMpKTsKK2Fzc2VydCAoYnVmZmVycyAhPSBOVUxMKTsKKworZm9yIChpID0gMDsgaSAmbHQ7IHJlcWJ1Zi5jb3VudDsgaSsrKSB7CisJJnY0bDItYnVmZmVyOyBidWZmZXI7CisKKwltZW1zZXQgKCZhbXA7YnVmZmVyLCAwLCBzaXplb2YgKGJ1ZmZlcikpOworCWJ1ZmZlci50eXBlID0gcmVxYnVmLnR5cGU7CisJYnVmZmVyLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJYnVmZmVyLmluZGV4ID0gaTsKKworCWlmICgtMSA9PSBpb2N0bCAoZmQsICZWSURJT0MtUVVFUllCVUY7LCAmYW1wO2J1ZmZlcikpIHsKKwkJcGVycm9yICgiVklESU9DX1FVRVJZQlVGIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorCisJYnVmZmVyc1tpXS5sZW5ndGggPSBidWZmZXIubGVuZ3RoOyAvKiByZW1lbWJlciBmb3IgbXVubWFwKCkgKi8KKworCWJ1ZmZlcnNbaV0uc3RhcnQgPSBtbWFwIChOVUxMLCBidWZmZXIubGVuZ3RoLAorCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCAvKiByZWNvbW1lbmRlZCAqLworCQkJCSBNQVBfU0hBUkVELCAgICAgICAgICAgICAvKiByZWNvbW1lbmRlZCAqLworCQkJCSBmZCwgYnVmZmVyLm0ub2Zmc2V0KTsKKworCWlmIChNQVBfRkFJTEVEID09IGJ1ZmZlcnNbaV0uc3RhcnQpIHsKKwkJLyogSWYgeW91IGRvIG5vdCBleGl0IGhlcmUgeW91IHNob3VsZCB1bm1hcCgpIGFuZCBmcmVlKCkKKwkJICAgdGhlIGJ1ZmZlcnMgbWFwcGVkIHNvIGZhci4gKi8KKwkJcGVycm9yICgibW1hcCIpOworCQlleGl0IChFWElUX0ZBSUxVUkUpOworCX0KK30KKworLyogQ2xlYW51cC4gKi8KKworZm9yIChpID0gMDsgaSAmbHQ7IHJlcWJ1Zi5jb3VudDsgaSsrKQorCW11bm1hcCAoYnVmZmVyc1tpXS5zdGFydCwgYnVmZmVyc1tpXS5sZW5ndGgpOworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisKKyAgICA8cGFyYT5Db25jZXB0dWFsbHkgc3RyZWFtaW5nIGRyaXZlcnMgbWFpbnRhaW4gdHdvIGJ1ZmZlciBxdWV1ZXMsIGFuIGluY29taW5nCithbmQgYW4gb3V0Z29pbmcgcXVldWUuIFRoZXkgc2VwYXJhdGUgdGhlIHN5bmNocm9ub3VzIGNhcHR1cmUgb3Igb3V0cHV0CitvcGVyYXRpb24gbG9ja2VkIHRvIGEgdmlkZW8gY2xvY2sgZnJvbSB0aGUgYXBwbGljYXRpb24gd2hpY2ggaXMKK3N1YmplY3QgdG8gcmFuZG9tIGRpc2sgb3IgbmV0d29yayBkZWxheXMgYW5kIHByZWVtcHRpb24gYnkKK290aGVyIHByb2Nlc3NlcywgdGhlcmVieSByZWR1Y2luZyB0aGUgcHJvYmFiaWxpdHkgb2YgZGF0YSBsb3NzLgorVGhlIHF1ZXVlcyBhcmUgb3JnYW5pemVkIGFzIEZJRk9zLCBidWZmZXJzIHdpbGwgYmUKK291dHB1dCBpbiB0aGUgb3JkZXIgZW5xdWV1ZWQgaW4gdGhlIGluY29taW5nIEZJRk8sIGFuZCB3ZXJlCitjYXB0dXJlZCBpbiB0aGUgb3JkZXIgZGVxdWV1ZWQgZnJvbSB0aGUgb3V0Z29pbmcgRklGTy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSByZXF1aXJlIGEgbWluaW11bSBudW1iZXIgb2YgYnVmZmVycyBlbnF1ZXVlZAorYXQgYWxsIHRpbWVzIHRvIGZ1bmN0aW9uLCBhcGFydCBvZiB0aGlzIG5vIGxpbWl0IGV4aXN0cyBvbiB0aGUgbnVtYmVyCitvZiBidWZmZXJzIGFwcGxpY2F0aW9ucyBjYW4gZW5xdWV1ZSBpbiBhZHZhbmNlLCBvciBkZXF1ZXVlIGFuZAorcHJvY2Vzcy4gVGhleSBjYW4gYWxzbyBlbnF1ZXVlIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gYnVmZmVycyBoYXZlCitiZWVuIGRlcXVldWVkLCBhbmQgdGhlIGRyaXZlciBjYW4gPGVtcGhhc2lzPmZpbGw8L2VtcGhhc2lzPiBlbnF1ZXVlZAorPGVtcGhhc2lzPmVtcHR5PC9lbXBoYXNpcz4gYnVmZmVycyBpbiBhbnkgb3JkZXIuIDxmb290bm90ZT4KKwk8cGFyYT5SYW5kb20gZW5xdWV1ZSBvcmRlciBwZXJtaXRzIGFwcGxpY2F0aW9ucyBwcm9jZXNzaW5nCitpbWFnZXMgb3V0IG9mIG9yZGVyIChzdWNoIGFzIHZpZGVvIGNvZGVjcykgdG8gcmV0dXJuIGJ1ZmZlcnMgZWFybGllciwKK3JlZHVjaW5nIHRoZSBwcm9iYWJpbGl0eSBvZiBkYXRhIGxvc3MuIFJhbmRvbSBmaWxsIG9yZGVyIGFsbG93cworZHJpdmVycyB0byByZXVzZSBidWZmZXJzIG9uIGEgTElGTy1iYXNpcywgdGFraW5nIGFkdmFudGFnZSBvZiBjYWNoZXMKK2hvbGRpbmcgc2NhdHRlci1nYXRoZXIgbGlzdHMgYW5kIHRoZSBsaWtlLjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+IFRoZSBpbmRleCBudW1iZXIgb2YgYSBidWZmZXIgKCZ2NGwyLWJ1ZmZlcjsKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+KSBwbGF5cyBubyByb2xlIGhlcmUsIGl0IG9ubHkKK2lkZW50aWZpZXMgdGhlIGJ1ZmZlci48L3BhcmE+CisKKyAgICA8cGFyYT5Jbml0aWFsbHkgYWxsIG1hcHBlZCBidWZmZXJzIGFyZSBpbiBkZXF1ZXVlZCBzdGF0ZSwKK2luYWNjZXNzaWJsZSBieSB0aGUgZHJpdmVyLiBGb3IgY2FwdHVyaW5nIGFwcGxpY2F0aW9ucyBpdCBpcyBjdXN0b21hcnkKK3RvIGZpcnN0IGVucXVldWUgYWxsIG1hcHBlZCBidWZmZXJzLCB0aGVuIHRvIHN0YXJ0IGNhcHR1cmluZyBhbmQgZW50ZXIKK3RoZSByZWFkIGxvb3AuIEhlcmUgdGhlIGFwcGxpY2F0aW9uIHdhaXRzIHVudGlsIGEgZmlsbGVkIGJ1ZmZlciBjYW4gYmUKK2RlcXVldWVkLCBhbmQgcmUtZW5xdWV1ZXMgdGhlIGJ1ZmZlciB3aGVuIHRoZSBkYXRhIGlzIG5vIGxvbmdlcgorbmVlZGVkLiBPdXRwdXQgYXBwbGljYXRpb25zIGZpbGwgYW5kIGVucXVldWUgYnVmZmVycywgd2hlbiBlbm91Z2gKK2J1ZmZlcnMgYXJlIHN0YWNrZWQgdXAgdGhlIG91dHB1dCBpcyBzdGFydGVkIHdpdGgKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT048L2NvbnN0YW50Pi4gSW4gdGhlIHdyaXRlIGxvb3AsIHdoZW4KK3RoZSBhcHBsaWNhdGlvbiBydW5zIG91dCBvZiBmcmVlIGJ1ZmZlcnMsIGl0IG11c3Qgd2FpdCB1bnRpbCBhbiBlbXB0eQorYnVmZmVyIGNhbiBiZSBkZXF1ZXVlZCBhbmQgcmV1c2VkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGVucXVldWUgYW5kIGRlcXVldWUgYSBidWZmZXIgYXBwbGljYXRpb25zIHVzZSB0aGUKKyZWSURJT0MtUUJVRjsgYW5kICZWSURJT0MtRFFCVUY7IGlvY3RsLiBUaGUgc3RhdHVzIG9mIGEgYnVmZmVyIGJlaW5nCittYXBwZWQsIGVucXVldWVkLCBmdWxsIG9yIGVtcHR5IGNhbiBiZSBkZXRlcm1pbmVkIGF0IGFueSB0aW1lIHVzaW5nIHRoZQorJlZJRElPQy1RVUVSWUJVRjsgaW9jdGwuIFR3byBtZXRob2RzIGV4aXN0IHRvIHN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZQorYXBwbGljYXRpb24gdW50aWwgb25lIG9yIG1vcmUgYnVmZmVycyBjYW4gYmUgZGVxdWV1ZWQuIEJ5IGRlZmF1bHQKKzxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiBibG9ja3Mgd2hlbiBubyBidWZmZXIgaXMgaW4gdGhlCitvdXRnb2luZyBxdWV1ZS4gV2hlbiB0aGUgPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnIHdhcworZ2l2ZW4gdG8gdGhlICZmdW5jLW9wZW47IGZ1bmN0aW9uLCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KK3JldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBhbiAmRUFHQUlOOyB3aGVuIG5vIGJ1ZmZlciBpcyBhdmFpbGFibGUuIFRoZQorJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBmdW5jdGlvbiBhcmUgYWx3YXlzIGF2YWlsYWJsZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzdGFydCBhbmQgc3RvcCBjYXB0dXJpbmcgb3Igb3V0cHV0IGFwcGxpY2F0aW9ucyBjYWxsIHRoZQorJlZJRElPQy1TVFJFQU1PTjsgYW5kICZWSURJT0MtU1RSRUFNT0ZGOyBpb2N0bC4gTm90ZQorPGNvbnN0YW50PlZJRElPQ19TVFJFQU1PRkY8L2NvbnN0YW50PiByZW1vdmVzIGFsbCBidWZmZXJzIGZyb20gYm90aAorcXVldWVzIGFzIGEgc2lkZSBlZmZlY3QuIFNpbmNlIHRoZXJlIGlzIG5vIG5vdGlvbiBvZiBkb2luZyBhbnl0aGluZworIm5vdyIgb24gYSBtdWx0aXRhc2tpbmcgc3lzdGVtLCBpZiBhbiBhcHBsaWNhdGlvbiBuZWVkcyB0byBzeW5jaHJvbml6ZQord2l0aCBhbm90aGVyIGV2ZW50IGl0IHNob3VsZCBleGFtaW5lIHRoZSAmdjRsMi1idWZmZXI7Cis8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gb2YgY2FwdHVyZWQgYnVmZmVycywgb3Igc2V0IHRoZQorZmllbGQgYmVmb3JlIGVucXVldWluZyBidWZmZXJzIGZvciBvdXRwdXQuPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBpbXBsZW1lbnRpbmcgbWVtb3J5IG1hcHBpbmcgSS9PIG11c3QKK3N1cHBvcnQgdGhlIDxjb25zdGFudD5WSURJT0NfUkVRQlVGUzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJRElPQ19RVUVSWUJVRjwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD4sIDxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT048L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT0ZGPC9jb25zdGFudD4gaW9jdGwsIHRoZQorPGZ1bmN0aW9uPm1tYXAoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+bXVubWFwKCk8L2Z1bmN0aW9uPiwKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4KK2Z1bmN0aW9uLjxmb290bm90ZT4KKwk8cGFyYT5BdCB0aGUgZHJpdmVyIGxldmVsIDxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGFuZAorPGZ1bmN0aW9uPnBvbGwoKTwvZnVuY3Rpb24+IGFyZSB0aGUgc2FtZSwgYW5kCis8ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPiBpcyB0b28gaW1wb3J0YW50IHRvIGJlIG9wdGlvbmFsLiBUaGUKK3Jlc3Qgc2hvdWxkIGJlIGV2aWRlbnQuPC9wYXJhPgorICAgICAgPC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5bY2FwdHVyZSBleGFtcGxlXTwvcGFyYT4KKworICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InVzZXJwIj4KKyAgICA8dGl0bGU+U3RyZWFtaW5nIEkvTyAoVXNlciBQb2ludGVycyk8L3RpdGxlPgorCisgICAgPHBhcmE+SW5wdXQgYW5kIG91dHB1dCBkZXZpY2VzIHN1cHBvcnQgdGhpcyBJL08gbWV0aG9kIHdoZW4gdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfU1RSRUFNSU5HPC9jb25zdGFudD4gZmxhZyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXRpZXM8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1jYXBhYmlsaXR5OworcmV0dXJuZWQgYnkgdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsIGlzIHNldC4gSWYgdGhlIHBhcnRpY3VsYXIgdXNlcgorcG9pbnRlciBtZXRob2QgKG5vdCBvbmx5IG1lbW9yeSBtYXBwaW5nKSBpcyBzdXBwb3J0ZWQgbXVzdCBiZQorZGV0ZXJtaW5lZCBieSBjYWxsaW5nIHRoZSAmVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPlRoaXMgSS9PIG1ldGhvZCBjb21iaW5lcyBhZHZhbnRhZ2VzIG9mIHRoZSByZWFkL3dyaXRlIGFuZAorbWVtb3J5IG1hcHBpbmcgbWV0aG9kcy4gQnVmZmVycyBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgoraXRzZWxmLCBhbmQgY2FuIHJlc2lkZSBmb3IgZXhhbXBsZSBpbiB2aXJ0dWFsIG9yIHNoYXJlZCBtZW1vcnkuIE9ubHkKK3BvaW50ZXJzIHRvIGRhdGEgYXJlIGV4Y2hhbmdlZCwgdGhlc2UgcG9pbnRlcnMgYW5kIG1ldGEtaW5mb3JtYXRpb24KK2FyZSBwYXNzZWQgaW4gJnY0bDItYnVmZmVyOy4gVGhlIGRyaXZlciBtdXN0IGJlIHN3aXRjaGVkCitpbnRvIHVzZXIgcG9pbnRlciBJL08gbW9kZSBieSBjYWxsaW5nIHRoZSAmVklESU9DLVJFUUJVRlM7IHdpdGggdGhlCitkZXNpcmVkIGJ1ZmZlciB0eXBlLiBObyBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYmVmb3JlaGFuZHMsCitjb25zZXF1ZW50bHkgdGhleSBhcmUgbm90IGluZGV4ZWQgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGxpa2UgbWFwcGVkCitidWZmZXJzIHdpdGggdGhlIDxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDx0aXRsZT5Jbml0aWF0aW5nIHN0cmVhbWluZyBJL08gd2l0aCB1c2VyIHBvaW50ZXJzPC90aXRsZT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IHJlcWJ1ZjsKKworbWVtc2V0ICgmYW1wO3JlcWJ1ZiwgMCwgc2l6ZW9mIChyZXFidWYpKTsKK3JlcWJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworcmVxYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX1VTRVJQVFI7CisKK2lmIChpb2N0bCAoZmQsICZWSURJT0MtUkVRQlVGUzssICZhbXA7cmVxYnVmKSA9PSAtMSkgeworCWlmIChlcnJubyA9PSBFSU5WQUwpCisJCXByaW50ZiAoIlZpZGVvIGNhcHR1cmluZyBvciB1c2VyIHBvaW50ZXIgc3RyZWFtaW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCWVsc2UKKwkJcGVycm9yICgiVklESU9DX1JFUUJVRlMiKTsKKworCWV4aXQgKEVYSVRfRkFJTFVSRSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxwYXJhPkJ1ZmZlciBhZGRyZXNzZXMgYW5kIHNpemVzIGFyZSBwYXNzZWQgb24gdGhlIGZseSB3aXRoIHRoZQorJlZJRElPQy1RQlVGOyBpb2N0bC4gQWx0aG91Z2ggYnVmZmVycyBhcmUgY29tbW9ubHkgY3ljbGVkLAorYXBwbGljYXRpb25zIGNhbiBwYXNzIGRpZmZlcmVudCBhZGRyZXNzZXMgYW5kIHNpemVzIGF0IGVhY2gKKzxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGNhbGwuIElmIHJlcXVpcmVkIGJ5IHRoZSBoYXJkd2FyZSB0aGUKK2RyaXZlciBzd2FwcyBtZW1vcnkgcGFnZXMgd2l0aGluIHBoeXNpY2FsIG1lbW9yeSB0byBjcmVhdGUgYQorY29udGludW91cyBhcmVhIG9mIG1lbW9yeS4gVGhpcyBoYXBwZW5zIHRyYW5zcGFyZW50bHkgdG8gdGhlCithcHBsaWNhdGlvbiBpbiB0aGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWwuIFdoZW4gYnVmZmVyCitwYWdlcyBoYXZlIGJlZW4gc3dhcHBlZCBvdXQgdG8gZGlzayB0aGV5IGFyZSBicm91Z2h0IGJhY2sgYW5kIGZpbmFsbHkKK2xvY2tlZCBpbiBwaHlzaWNhbCBtZW1vcnkgZm9yIERNQS48Zm9vdG5vdGU+CisJPHBhcmE+V2UgZXhwZWN0IHRoYXQgZnJlcXVlbnRseSB1c2VkIGJ1ZmZlcnMgYXJlIHR5cGljYWxseSBub3QKK3N3YXBwZWQgb3V0LiBBbnl3YXksIHRoZSBwcm9jZXNzIG9mIHN3YXBwaW5nLCBsb2NraW5nIG9yIGdlbmVyYXRpbmcKK3NjYXR0ZXItZ2F0aGVyIGxpc3RzIG1heSBiZSB0aW1lIGNvbnN1bWluZy4gVGhlIGRlbGF5IGNhbiBiZSBtYXNrZWQgYnkKK3RoZSBkZXB0aCBvZiB0aGUgaW5jb21pbmcgYnVmZmVyIHF1ZXVlLCBhbmQgcGVyaGFwcyBieSBtYWludGFpbmluZworY2FjaGVzIGFzc3VtaW5nIGEgYnVmZmVyIHdpbGwgYmUgc29vbiBlbnF1ZXVlZCBhZ2Fpbi4gT24gdGhlIG90aGVyCitoYW5kLCB0byBvcHRpbWl6ZSBtZW1vcnkgdXNhZ2UgZHJpdmVycyBjYW4gbGltaXQgdGhlIG51bWJlciBvZiBidWZmZXJzCitsb2NrZWQgaW4gYWR2YW5jZSBhbmQgcmVjeWNsZSB0aGUgbW9zdCByZWNlbnRseSB1c2VkIGJ1ZmZlcnMgZmlyc3QuIE9mCitjb3Vyc2UsIHRoZSBwYWdlcyBvZiBlbXB0eSBidWZmZXJzIGluIHRoZSBpbmNvbWluZyBxdWV1ZSBuZWVkIG5vdCBiZQorc2F2ZWQgdG8gZGlzay4gT3V0cHV0IGJ1ZmZlcnMgbXVzdCBiZSBzYXZlZCBvbiB0aGUgaW5jb21pbmcgYW5kCitvdXRnb2luZyBxdWV1ZSBiZWNhdXNlIGFuIGFwcGxpY2F0aW9uIG1heSBzaGFyZSB0aGVtIHdpdGggb3RoZXIKK3Byb2Nlc3Nlcy48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPjwvcGFyYT4KKworICAgIDxwYXJhPkZpbGxlZCBvciBkaXNwbGF5ZWQgYnVmZmVycyBhcmUgZGVxdWV1ZWQgd2l0aCB0aGUKKyZWSURJT0MtRFFCVUY7IGlvY3RsLiBUaGUgZHJpdmVyIGNhbiB1bmxvY2sgdGhlIG1lbW9yeSBwYWdlcyBhdCBhbnkKK3RpbWUgYmV0d2VlbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgRE1BIGFuZCB0aGlzIGlvY3RsLiBUaGUgbWVtb3J5IGlzCithbHNvIHVubG9ja2VkIHdoZW4gJlZJRElPQy1TVFJFQU1PRkY7IGlzIGNhbGxlZCwgJlZJRElPQy1SRVFCVUZTOywgb3IKK3doZW4gdGhlIGRldmljZSBpcyBjbG9zZWQuIEFwcGxpY2F0aW9ucyBtdXN0IHRha2UgY2FyZSBub3QgdG8gZnJlZQorYnVmZmVycyB3aXRob3V0IGRlcXVldWluZy4gRm9yIG9uY2UsIHRoZSBidWZmZXJzIHJlbWFpbiBsb2NrZWQgdW50aWwKK2Z1cnRoZXIsIHdhc3RpbmcgcGh5c2ljYWwgbWVtb3J5LiBTZWNvbmQgdGhlIGRyaXZlciB3aWxsIG5vdCBiZQorbm90aWZpZWQgd2hlbiB0aGUgbWVtb3J5IGlzIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbidzIGZyZWUgbGlzdAorYW5kIHN1YnNlcXVlbnRseSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBwb3NzaWJseSBjb21wbGV0aW5nIHRoZQorcmVxdWVzdGVkIERNQSBhbmQgb3ZlcndyaXRpbmcgdmFsdWFibGUgZGF0YS48L3BhcmE+CisKKyAgICA8cGFyYT5Gb3IgY2FwdHVyaW5nIGFwcGxpY2F0aW9ucyBpdCBpcyBjdXN0b21hcnkgdG8gZW5xdWV1ZSBhCitudW1iZXIgb2YgZW1wdHkgYnVmZmVycywgdG8gc3RhcnQgY2FwdHVyaW5nIGFuZCBlbnRlciB0aGUgcmVhZCBsb29wLgorSGVyZSB0aGUgYXBwbGljYXRpb24gd2FpdHMgdW50aWwgYSBmaWxsZWQgYnVmZmVyIGNhbiBiZSBkZXF1ZXVlZCwgYW5kCityZS1lbnF1ZXVlcyB0aGUgYnVmZmVyIHdoZW4gdGhlIGRhdGEgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3V0cHV0CithcHBsaWNhdGlvbnMgZmlsbCBhbmQgZW5xdWV1ZSBidWZmZXJzLCB3aGVuIGVub3VnaCBidWZmZXJzIGFyZSBzdGFja2VkCit1cCBvdXRwdXQgaXMgc3RhcnRlZC4gSW4gdGhlIHdyaXRlIGxvb3AsIHdoZW4gdGhlIGFwcGxpY2F0aW9uCitydW5zIG91dCBvZiBmcmVlIGJ1ZmZlcnMgaXQgbXVzdCB3YWl0IHVudGlsIGFuIGVtcHR5IGJ1ZmZlciBjYW4gYmUKK2RlcXVldWVkIGFuZCByZXVzZWQuIFR3byBtZXRob2RzIGV4aXN0IHRvIHN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZQorYXBwbGljYXRpb24gdW50aWwgb25lIG9yIG1vcmUgYnVmZmVycyBjYW4gYmUgZGVxdWV1ZWQuIEJ5IGRlZmF1bHQKKzxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiBibG9ja3Mgd2hlbiBubyBidWZmZXIgaXMgaW4gdGhlCitvdXRnb2luZyBxdWV1ZS4gV2hlbiB0aGUgPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnIHdhcworZ2l2ZW4gdG8gdGhlICZmdW5jLW9wZW47IGZ1bmN0aW9uLCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KK3JldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBhbiAmRUFHQUlOOyB3aGVuIG5vIGJ1ZmZlciBpcyBhdmFpbGFibGUuIFRoZQorJmZ1bmMtc2VsZWN0OyBvciAmZnVuYy1wb2xsOyBmdW5jdGlvbiBhcmUgYWx3YXlzIGF2YWlsYWJsZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzdGFydCBhbmQgc3RvcCBjYXB0dXJpbmcgb3Igb3V0cHV0IGFwcGxpY2F0aW9ucyBjYWxsIHRoZQorJlZJRElPQy1TVFJFQU1PTjsgYW5kICZWSURJT0MtU1RSRUFNT0ZGOyBpb2N0bC4gTm90ZQorPGNvbnN0YW50PlZJRElPQ19TVFJFQU1PRkY8L2NvbnN0YW50PiByZW1vdmVzIGFsbCBidWZmZXJzIGZyb20gYm90aAorcXVldWVzIGFuZCB1bmxvY2tzIGFsbCBidWZmZXJzIGFzIGEgc2lkZSBlZmZlY3QuIFNpbmNlIHRoZXJlIGlzIG5vCitub3Rpb24gb2YgZG9pbmcgYW55dGhpbmcgIm5vdyIgb24gYSBtdWx0aXRhc2tpbmcgc3lzdGVtLCBpZiBhbgorYXBwbGljYXRpb24gbmVlZHMgdG8gc3luY2hyb25pemUgd2l0aCBhbm90aGVyIGV2ZW50IGl0IHNob3VsZCBleGFtaW5lCit0aGUgJnY0bDItYnVmZmVyOyA8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gb2YgY2FwdHVyZWQKK2J1ZmZlcnMsIG9yIHNldCB0aGUgZmllbGQgYmVmb3JlIGVucXVldWluZyBidWZmZXJzIGZvciBvdXRwdXQuPC9wYXJhPgorCisgICAgPHBhcmE+RHJpdmVycyBpbXBsZW1lbnRpbmcgdXNlciBwb2ludGVyIEkvTyBtdXN0CitzdXBwb3J0IHRoZSA8Y29uc3RhbnQ+VklESU9DX1JFUUJVRlM8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9GRjwvY29uc3RhbnQ+IGlvY3RsLCB0aGUKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uPGZvb3Rub3RlPgorCTxwYXJhPkF0IHRoZSBkcml2ZXIgbGV2ZWwgPGZ1bmN0aW9uPnNlbGVjdCgpPC9mdW5jdGlvbj4gYW5kCis8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gYXJlIHRoZSBzYW1lLCBhbmQKKzxmdW5jdGlvbj5zZWxlY3QoKTwvZnVuY3Rpb24+IGlzIHRvbyBpbXBvcnRhbnQgdG8gYmUgb3B0aW9uYWwuIFRoZQorcmVzdCBzaG91bGQgYmUgZXZpZGVudC48L3BhcmE+CisgICAgICA8L2Zvb3Rub3RlPjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJhc3luYyI+CisgICAgPHRpdGxlPkFzeW5jaHJvbm91cyBJL088L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQgeWV0LjwvcGFyYT4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJidWZmZXIiPgorICAgIDx0aXRsZT5CdWZmZXJzPC90aXRsZT4KKworICAgIDxwYXJhPkEgYnVmZmVyIGNvbnRhaW5zIGRhdGEgZXhjaGFuZ2VkIGJ5IGFwcGxpY2F0aW9uIGFuZAorZHJpdmVyIHVzaW5nIG9uZSBvZiB0aGUgU3RyZWFtaW5nIEkvTyBtZXRob2RzLiBPbmx5IHBvaW50ZXJzIHRvCitidWZmZXJzIGFyZSBleGNoYW5nZWQsIHRoZSBkYXRhIGl0c2VsZiBpcyBub3QgY29waWVkLiBUaGVzZSBwb2ludGVycywKK3RvZ2V0aGVyIHdpdGggbWV0YS1pbmZvcm1hdGlvbiBsaWtlIHRpbWVzdGFtcHMgb3IgZmllbGQgcGFyaXR5LCBhcmUKK3N0b3JlZCBpbiBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2J1ZmZlcjwvc3RydWN0bmFtZT4sIGFyZ3VtZW50IHRvCit0aGUgJlZJRElPQy1RVUVSWUJVRjssICZWSURJT0MtUUJVRjsgYW5kICZWSURJT0MtRFFCVUY7IGlvY3RsLjwvcGFyYT4KKworICAgICAgPHBhcmE+Tm9taW5hbGx5IHRpbWVzdGFtcHMgcmVmZXIgdG8gdGhlIGZpcnN0IGRhdGEgYnl0ZSB0cmFuc21pdHRlZC4KK0luIHByYWN0aWNlIGhvd2V2ZXIgdGhlIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgY292ZXJlZCBieSB0aGUgVjRMMiBBUEkKK2xpbWl0cyB0aW1lc3RhbXAgYWNjdXJhY3kuIE9mdGVuIGFuIGludGVycnVwdCByb3V0aW5lIHdpbGwKK3NhbXBsZSB0aGUgc3lzdGVtIGNsb2NrIHNob3J0bHkgYWZ0ZXIgdGhlIGZpZWxkIG9yIGZyYW1lIHdhcyBzdG9yZWQKK2NvbXBsZXRlbHkgaW4gbWVtb3J5LiBTbyBhcHBsaWNhdGlvbnMgbXVzdCBleHBlY3QgYSBjb25zdGFudAorZGlmZmVyZW5jZSB1cCB0byBvbmUgZmllbGQgb3IgZnJhbWUgcGVyaW9kIHBsdXMgYSBzbWFsbCAoZmV3IHNjYW4KK2xpbmVzKSByYW5kb20gZXJyb3IuIFRoZSBkZWxheSBhbmQgZXJyb3IgY2FuIGJlIG11Y2gKK2xhcmdlciBkdWUgdG8gY29tcHJlc3Npb24gb3IgdHJhbnNtaXNzaW9uIG92ZXIgYW4gZXh0ZXJuYWwgYnVzIHdoZW4KK3RoZSBmcmFtZXMgYXJlIG5vdCBwcm9wZXJseSBzdGFtcGVkIGJ5IHRoZSBzZW5kZXIuIFRoaXMgaXMgZnJlcXVlbnRseQordGhlIGNhc2Ugd2l0aCBVU0IgY2FtZXJhcy4gSGVyZSB0aW1lc3RhbXBzIHJlZmVyIHRvIHRoZSBpbnN0YW50IHRoZQorZmllbGQgb3IgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZSBkcml2ZXIsIG5vdCB0aGUgY2FwdHVyZSB0aW1lLiBUaGVzZQorZGV2aWNlcyBpZGVudGlmeSBieSBub3QgZW51bWVyYXRpbmcgYW55IHZpZGVvIHN0YW5kYXJkcywgc2VlIDx4cmVmCitsaW5rZW5kPSJzdGFuZGFyZCIgLz4uPC9wYXJhPgorCisgICAgICA8cGFyYT5TaW1pbGFyIGxpbWl0YXRpb25zIGFwcGx5IHRvIG91dHB1dCB0aW1lc3RhbXBzLiBUeXBpY2FsbHkKK3RoZSB2aWRlbyBoYXJkd2FyZSBsb2NrcyB0byBhIGNsb2NrIGNvbnRyb2xsaW5nIHRoZSB2aWRlbyB0aW1pbmcsIHRoZQoraG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc3luY2hyb25pemF0aW9uIHB1bHNlcy4gQXQgc29tZSBwb2ludCBpbiB0aGUKK2xpbmUgc2VxdWVuY2UsIHBvc3NpYmx5IHRoZSB2ZXJ0aWNhbCBibGFua2luZywgYW4gaW50ZXJydXB0IHJvdXRpbmUKK3NhbXBsZXMgdGhlIHN5c3RlbSBjbG9jaywgY29tcGFyZXMgYWdhaW5zdCB0aGUgdGltZXN0YW1wIGFuZCBwcm9ncmFtcwordGhlIGhhcmR3YXJlIHRvIHJlcGVhdCB0aGUgcHJldmlvdXMgZmllbGQgb3IgZnJhbWUsIG9yIHRvIGRpc3BsYXkgdGhlCitidWZmZXIgY29udGVudHMuPC9wYXJhPgorCisgICAgICA8cGFyYT5BcGFydCBvZiBsaW1pdGF0aW9ucyBvZiB0aGUgdmlkZW8gZGV2aWNlIGFuZCBuYXR1cmFsCitpbmFjY3VyYWNpZXMgb2YgYWxsIGNsb2NrcywgaXQgc2hvdWxkIGJlIG5vdGVkIHN5c3RlbSB0aW1lIGl0c2VsZiBpcworbm90IHBlcmZlY3RseSBzdGFibGUuIEl0IGNhbiBiZSBhZmZlY3RlZCBieSBwb3dlciBzYXZpbmcgY3ljbGVzLAord2FycGVkIHRvIGluc2VydCBsZWFwIHNlY29uZHMsIG9yIGV2ZW4gdHVybmVkIGJhY2sgb3IgZm9ydGggYnkgdGhlCitzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZmZlY3RpbmcgbG9uZyB0ZXJtIG1lYXN1cmVtZW50cy4gPGZvb3Rub3RlPgorCSAgPHBhcmE+U2luY2Ugbm8gb3RoZXIgTGludXggbXVsdGltZWRpYQorQVBJIHN1cHBvcnRzIHVuYWRqdXN0ZWQgdGltZSBpdCB3b3VsZCBiZSBmb29saXNoIHRvIGludHJvZHVjZSBoZXJlLiBXZQorbXVzdCB1c2UgYSB1bml2ZXJzYWxseSBzdXBwb3J0ZWQgY2xvY2sgdG8gc3luY2hyb25pemUgZGlmZmVyZW50IG1lZGlhLAoraGVuY2UgdGltZSBvZiBkYXkuPC9wYXJhPgorCTwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWJ1ZmZlciI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfYnVmZmVyPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCSZjcy11c3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk51bWJlciBvZiB0aGUgYnVmZmVyLCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLiBUaGlzCitmaWVsZCBpcyBvbmx5IHVzZWQgZm9yIDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwaW5nPC9saW5rPiBJL08KK2FuZCBjYW4gcmFuZ2UgZnJvbSB6ZXJvIHRvIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQKK3dpdGggdGhlICZWSURJT0MtUkVRQlVGUzsgaW9jdGwgKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VHlwZSBvZiB0aGUgYnVmZmVyLCBzYW1lIGFzICZ2NGwyLWZvcm1hdDsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gb3IgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Ynl0ZXN1c2VkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgYnl0ZXMgb2NjdXBpZWQgYnkgdGhlIGRhdGEgaW4gdGhlCitidWZmZXIuIEl0IGRlcGVuZHMgb24gdGhlIG5lZ290aWF0ZWQgZGF0YSBmb3JtYXQgYW5kIG1heSBjaGFuZ2Ugd2l0aAorZWFjaCBidWZmZXIgZm9yIGNvbXByZXNzZWQgdmFyaWFibGUgc2l6ZSBkYXRhIGxpa2UgSlBFRyBpbWFnZXMuCitEcml2ZXJzIG11c3Qgc2V0IHRoaXMgZmllbGQgd2hlbiA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+CityZWZlcnMgdG8gYW4gaW5wdXQgc3RyZWFtLCBhcHBsaWNhdGlvbnMgd2hlbiBhbiBvdXRwdXQgc3RyZWFtLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+RmxhZ3Mgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiBvciBkcml2ZXIsIHNlZSA8eHJlZgorbGlua2VuZD0iYnVmZmVyLWZsYWdzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JbmRpY2F0ZXMgdGhlIGZpZWxkIG9yZGVyIG9mIHRoZSBpbWFnZSBpbiB0aGUKK2J1ZmZlciwgc2VlIDx4cmVmIGxpbmtlbmQ9InY0bDItZmllbGQiIC8+LiBUaGlzIGZpZWxkIGlzIG5vdCB1c2VkIHdoZW4KK3RoZSBidWZmZXIgY29udGFpbnMgVkJJIGRhdGEuIERyaXZlcnMgbXVzdCBzZXQgaXQgd2hlbgorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiByZWZlcnMgdG8gYW4gaW5wdXQgc3RyZWFtLAorYXBwbGljYXRpb25zIHdoZW4gYW4gb3V0cHV0IHN0cmVhbS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+c3RydWN0IHRpbWV2YWw8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5Gb3IgaW5wdXQgc3RyZWFtcyB0aGlzIGlzIHRoZQorc3lzdGVtIHRpbWUgKGFzIHJldHVybmVkIGJ5IHRoZSA8ZnVuY3Rpb24+Z2V0dGltZW9mZGF5KCk8L2Z1bmN0aW9uPgorZnVuY3Rpb24pIHdoZW4gdGhlIGZpcnN0IGRhdGEgYnl0ZSB3YXMgY2FwdHVyZWQuIEZvciBvdXRwdXQgc3RyZWFtcwordGhlIGRhdGEgd2lsbCBub3QgYmUgZGlzcGxheWVkIGJlZm9yZSB0aGlzIHRpbWUsIHNlY29uZGFyeSB0byB0aGUKK25vbWluYWwgZnJhbWUgcmF0ZSBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkIGluCitlbnF1ZXVlZCBvcmRlci4gQXBwbGljYXRpb25zIGNhbiBmb3IgZXhhbXBsZSB6ZXJvIHRoaXMgZmllbGQgdG8KK2Rpc3BsYXkgZnJhbWVzIGFzIHNvb24gYXMgcG9zc2libGUuIFRoZSBkcml2ZXIgc3RvcmVzIHRoZSB0aW1lIGF0Cit3aGljaCB0aGUgZmlyc3QgZGF0YSBieXRlIHdhcyBhY3R1YWxseSBzZW50IG91dCBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZC4gVGhpcyBwZXJtaXRzCithcHBsaWNhdGlvbnMgdG8gbW9uaXRvciB0aGUgZHJpZnQgYmV0d2VlbiB0aGUgdmlkZW8gYW5kIHN5c3RlbQorY2xvY2suPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi10aW1lY29kZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVjb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBpcworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+IGFuZCB0aGUKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX1RJTUVDT0RFPC9jb25zdGFudD4gZmxhZyBpcyBzZXQgaW4KKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+LCB0aGlzIHN0cnVjdHVyZSBjb250YWlucyBhIGZyYW1lCit0aW1lY29kZS4gSW4gPGxpbmsgbGlua2VuZD0idjRsMi1maWVsZCI+VjRMMl9GSUVMRF9BTFRFUk5BVEU8L2xpbms+Cittb2RlIHRoZSB0b3AgYW5kIGJvdHRvbSBmaWVsZCBjb250YWluIHRoZSBzYW1lIHRpbWVjb2RlLgorVGltZWNvZGVzIGFyZSBpbnRlbmRlZCB0byBoZWxwIHZpZGVvIGVkaXRpbmcgYW5kIGFyZSB0eXBpY2FsbHkgcmVjb3JkZWQgb24KK3ZpZGVvIHRhcGVzLCBidXQgYWxzbyBlbWJlZGRlZCBpbiBjb21wcmVzc2VkIGZvcm1hdHMgbGlrZSBNUEVHLiBUaGlzCitmaWVsZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgPHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnNlcXVlbmNlPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VxdWVuY2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+U2V0IGJ5IHRoZSBkcml2ZXIsIGNvdW50aW5nIHRoZSBmcmFtZXMgaW4gdGhlCitzZXF1ZW5jZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5JbiA8bGluaworbGlua2VuZD0idjRsMi1maWVsZCI+VjRMMl9GSUVMRF9BTFRFUk5BVEU8L2xpbms+IG1vZGUgdGhlIHRvcCBhbmQKK2JvdHRvbSBmaWVsZCBoYXZlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlci4gVGhlIGNvdW50IHN0YXJ0cyBhdCB6ZXJvCithbmQgaW5jbHVkZXMgZHJvcHBlZCBvciByZXBlYXRlZCBmcmFtZXMuIEEgZHJvcHBlZCBmcmFtZSB3YXMgcmVjZWl2ZWQKK2J5IGFuIGlucHV0IGRldmljZSBidXQgY291bGQgbm90IGJlIHN0b3JlZCBkdWUgdG8gbGFjayBvZiBmcmVlIGJ1ZmZlcgorc3BhY2UuIEEgcmVwZWF0ZWQgZnJhbWUgd2FzIGRpc3BsYXllZCBhZ2FpbiBieSBhbiBvdXRwdXQgZGV2aWNlCitiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbiBkaWQgbm90IHBhc3MgbmV3IGRhdGEgaW4KK3RpbWUuPC9wYXJhPjxwYXJhPk5vdGUgdGhpcyBtYXkgY291bnQgdGhlIGZyYW1lcyByZWNlaXZlZAorZS5nLiBvdmVyIFVTQiwgd2l0aG91dCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmcmFtZXMgZHJvcHBlZCBieSB0aGUKK3JlbW90ZSBoYXJkd2FyZSBkdWUgdG8gbGltaXRlZCBjb21wcmVzc2lvbiB0aHJvdWdocHV0IG9yIGJ1cworYmFuZHdpZHRoLiBUaGVzZSBkZXZpY2VzIGlkZW50aWZ5IGJ5IG5vdCBlbnVtZXJhdGluZyBhbnkgdmlkZW8KK3N0YW5kYXJkcywgc2VlIDx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkIiAvPi48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLW1lbW9yeTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGZpZWxkIG11c3QgYmUgc2V0IGJ5IGFwcGxpY2F0aW9ucyBhbmQvb3IgZHJpdmVycworaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzZWxlY3RlZCBJL08gbWV0aG9kLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2hlbiA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4gdGhpcyBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIKK2Zyb20gdGhlIHN0YXJ0IG9mIHRoZSBkZXZpY2UgbWVtb3J5LiBUaGUgdmFsdWUgaXMgcmV0dXJuZWQgYnkgdGhlCitkcml2ZXIgYW5kIGFwYXJ0IG9mIHNlcnZpbmcgYXMgcGFyYW1ldGVyIHRvIHRoZSAmZnVuYy1tbWFwOyBmdW5jdGlvbgorbm90IHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zLiBTZWUgPHhyZWYgbGlua2VuZD0ibW1hcCIgLz4gZm9yIGRldGFpbHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT51bnNpZ25lZCBsb25nPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD51c2VycHRyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2hlbiA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX01FTU9SWV9VU0VSUFRSPC9jb25zdGFudD4gdGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlCitidWZmZXIgKGNhc3RlZCB0byB1bnNpZ25lZCBsb25nIHR5cGUpIGluIHZpcnR1YWwgbWVtb3J5LCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi4gU2VlIDx4cmVmIGxpbmtlbmQ9InVzZXJwIiAvPiBmb3IgZGV0YWlscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5TaXplIG9mIHRoZSBidWZmZXIgKG5vdCB0aGUgcGF5bG9hZCkgaW4gYnl0ZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5Tb21lIHZpZGVvIGNhcHR1cmUgZHJpdmVycyBzdXBwb3J0IHJhcGlkIGFuZAorc3luY2hyb25vdXMgdmlkZW8gaW5wdXQgY2hhbmdlcywgYSBmdW5jdGlvbiB1c2VmdWwgZm9yIGV4YW1wbGUgaW4KK3ZpZGVvIHN1cnZlaWxsYW5jZSBhcHBsaWNhdGlvbnMuIEZvciB0aGlzIHB1cnBvc2UgYXBwbGljYXRpb25zIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0lOUFVUPC9jb25zdGFudD4gZmxhZywgYW5kIHRoaXMgZmllbGQgdG8gdGhlCitudW1iZXIgb2YgYSB2aWRlbyBpbnB1dCBhcyBpbiAmdjRsMi1pbnB1dDsgZmllbGQKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kIGhpZ2hlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItYnVmLXR5cGUiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl9idWZfdHlwZTwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5CdWZmZXIgb2YgYSB2aWRlbyBjYXB0dXJlIHN0cmVhbSwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9ImNhcHR1cmUiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJ1ZmZlciBvZiBhIHZpZGVvIG91dHB1dCBzdHJlYW0sIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJvdXRwdXQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5CdWZmZXIgZm9yIHZpZGVvIG92ZXJsYXksIHNlZSA8eHJlZiBsaW5rZW5kPSJvdmVybGF5IiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJ1ZmZlciBvZiBhIHJhdyBWQkkgY2FwdHVyZSBzdHJlYW0sIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJyYXctdmJpIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+QnVmZmVyIG9mIGEgcmF3IFZCSSBvdXRwdXQgc3RyZWFtLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0icmF3LXZiaSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+QnVmZmVyIG9mIGEgc2xpY2VkIFZCSSBjYXB0dXJlIHN0cmVhbSwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9InNsaWNlZCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5CdWZmZXIgb2YgYSBzbGljZWQgVkJJIG91dHB1dCBzdHJlYW0sIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJzbGljZWQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjg8L2VudHJ5PgorCSAgICA8ZW50cnk+QnVmZmVyIGZvciB2aWRlbyBvdXRwdXQgb3ZlcmxheSAoT1NEKSwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9Im9zZCIgLz4uIFN0YXR1czogPGxpbmsKK2xpbmtlbmQ9ImV4cGVyaW1lbnRhbCI+RXhwZXJpbWVudGFsPC9saW5rPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4ODA8L2VudHJ5PgorCSAgPGVudHJ5PlRoaXMgYW5kIGhpZ2hlciB2YWx1ZXMgYXJlIHJlc2VydmVkIGZvciBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0iYnVmZmVyLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5CdWZmZXIgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBidWZmZXIgcmVzaWRlcyBpbiBkZXZpY2UgbWVtb3J5IGFuZCBoYXMgYmVlbiBtYXBwZWQKK2ludG8gdGhlIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZSwgc2VlIDx4cmVmIGxpbmtlbmQ9Im1tYXAiIC8+IGZvciBkZXRhaWxzLgorRHJpdmVycyBzZXQgb3IgY2xlYXIgdGhpcyBmbGFnIHdoZW4gdGhlCis8bGluayBsaW5rZW5kPSJ2aWRpb2MtcXVlcnlidWYiPlZJRElPQ19RVUVSWUJVRjwvbGluaz4sIDxsaW5rCisJICBsaW5rZW5kPSJ2aWRpb2MtcWJ1ZiI+VklESU9DX1FCVUY8L2xpbms+IG9yIDxsaW5rCisJICBsaW5rZW5kPSJ2aWRpb2MtcWJ1ZiI+VklESU9DX0RRQlVGPC9saW5rPiBpb2N0bCBpcyBjYWxsZWQuIFNldCBieSB0aGUgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgPGVudHJ5PkludGVybmFsbHkgZHJpdmVycyBtYWludGFpbiB0d28gYnVmZmVyIHF1ZXVlcywgYW4KK2luY29taW5nIGFuZCBvdXRnb2luZyBxdWV1ZS4gV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgYnVmZmVyIGlzCitjdXJyZW50bHkgb24gdGhlIGluY29taW5nIHF1ZXVlLiBJdCBhdXRvbWF0aWNhbGx5IG1vdmVzIHRvIHRoZQorb3V0Z29pbmcgcXVldWUgYWZ0ZXIgdGhlIGJ1ZmZlciBoYXMgYmVlbiBmaWxsZWQgKGNhcHR1cmUgZGV2aWNlcykgb3IKK2Rpc3BsYXllZCAob3V0cHV0IGRldmljZXMpLiBEcml2ZXJzIHNldCBvciBjbGVhciB0aGlzIGZsYWcgd2hlbiB0aGUKKzxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PiBpb2N0bCBpcyBjYWxsZWQuIEFmdGVyCisoc3VjY2Vzc2Z1bCkgY2FsbGluZyB0aGUgPGNvbnN0YW50PlZJRElPQ19RQlVGIDwvY29uc3RhbnQ+aW9jdGwgaXQgaXMKK2Fsd2F5cyBzZXQgYW5kIGFmdGVyIDxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PiBhbHdheXMKK2NsZWFyZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDQ8L2VudHJ5PgorCSAgICA8ZW50cnk+V2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgYnVmZmVyIGlzIGN1cnJlbnRseSBvbgordGhlIG91dGdvaW5nIHF1ZXVlLCByZWFkeSB0byBiZSBkZXF1ZXVlZCBmcm9tIHRoZSBkcml2ZXIuIERyaXZlcnMgc2V0CitvciBjbGVhciB0aGlzIGZsYWcgd2hlbiB0aGUgPGNvbnN0YW50PlZJRElPQ19RVUVSWUJVRjwvY29uc3RhbnQ+IGlvY3RsCitpcyBjYWxsZWQuIEFmdGVyIGNhbGxpbmcgdGhlIDxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gaXQgaXMgYWx3YXlzIGNsZWFyZWQuIE9mIGNvdXJzZSBhCitidWZmZXIgY2Fubm90IGJlIG9uIGJvdGggcXVldWVzIGF0IHRoZSBzYW1lIHRpbWUsIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfUVVFVUVEPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19ET05FPC9jb25zdGFudD4gZmxhZyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorVGhleSBjYW4gYmUgYm90aCBjbGVhcmVkIGhvd2V2ZXIsIHRoZW4gdGhlIGJ1ZmZlciBpcyBpbiAiZGVxdWV1ZWQiCitzdGF0ZSwgaW4gdGhlIGFwcGxpY2F0aW9uIGRvbWFpbiB0byBzYXkgc28uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0tFWUZSQU1FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA4PC9lbnRyeT4KKwkgIDxlbnRyeT5Ecml2ZXJzIHNldCBvciBjbGVhciB0aGlzIGZsYWcgd2hlbiBjYWxsaW5nIHRoZQorPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+IGlvY3RsLiBJdCBtYXkgYmUgc2V0IGJ5IHZpZGVvCitjYXB0dXJlIGRldmljZXMgd2hlbiB0aGUgYnVmZmVyIGNvbnRhaW5zIGEgY29tcHJlc3NlZCBpbWFnZSB3aGljaCBpcyBhCitrZXkgZnJhbWUgKG9yIGZpZWxkKSwgJmllOyBjYW4gYmUgZGVjb21wcmVzc2VkIG9uIGl0cyBvd24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX1BGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAxMDwvZW50cnk+CisJICAgIDxlbnRyeT5TaW1pbGFyIHRvIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0tFWUZSQU1FPC9jb25zdGFudD4KK3RoaXMgZmxhZ3MgcHJlZGljdGVkIGZyYW1lcyBvciBmaWVsZHMgd2hpY2ggY29udGFpbiBvbmx5IGRpZmZlcmVuY2VzIHRvIGEKK3ByZXZpb3VzIGtleSBmcmFtZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfQkZSQU1FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlNpbWlsYXIgdG8gPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfUEZSQU1FPC9jb25zdGFudD4KKwl0aGlzIGlzIGEgYmlkaXJlY3Rpb25hbCBwcmVkaWN0ZWQgZnJhbWUgb3IgZmllbGQuIFtvb2MgdGJkXTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19USU1FQ09ERTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDEwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgPHN0cnVjdGZpZWxkPnRpbWVjb2RlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgdmFsaWQuCitEcml2ZXJzIHNldCBvciBjbGVhciB0aGlzIGZsYWcgd2hlbiB0aGUgPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+Citpb2N0bCBpcyBjYWxsZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0lOUFVUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMjAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSA8c3RydWN0ZmllbGQ+aW5wdXQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyB2YWxpZC4KK0FwcGxpY2F0aW9ucyBzZXQgb3IgY2xlYXIgdGhpcyBmbGFnIGJlZm9yZSBjYWxsaW5nIHRoZQorPGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD4gaW9jdGwuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLW1lbW9yeSI+CisgICAgICA8dGl0bGU+ZW51bSB2NGwyX21lbW9yeTwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGJ1ZmZlciBpcyB1c2VkIGZvciA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkKK21hcHBpbmc8L2xpbms+IEkvTy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBidWZmZXIgaXMgdXNlZCBmb3IgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIKK3BvaW50ZXI8L2xpbms+IEkvTy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTUVNT1JZX09WRVJMQVk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5Plt0byBkb108L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5UaW1lY29kZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGUgPHN0cnVjdG5hbWU+djRsMl90aW1lY29kZTwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGlzCitkZXNpZ25lZCB0byBob2xkIGEgPHhyZWYgbGlua2VuZD0ic21wdGUxMm0iIC8+IG9yIHNpbWlsYXIgdGltZWNvZGUuCisoc3RydWN0IDxzdHJ1Y3RuYW1lPnRpbWV2YWw8L3N0cnVjdG5hbWU+IHRpbWVzdGFtcHMgYXJlIHN0b3JlZCBpbgorJnY0bDItYnVmZmVyOyBmaWVsZCA8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4uKTwvcGFyYT4KKworICAgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXRpbWVjb2RlIj4KKwk8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfdGltZWNvZGU8L3N0cnVjdG5hbWU+PC90aXRsZT4KKwk8dGdyb3VwIGNvbHM9IjMiPgorCSAgJmNzLXN0cjsKKwkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgICAgPGVudHJ5PkZyYW1lIHJhdGUgdGhlIHRpbWVjb2RlcyBhcmUgYmFzZWQgb24sIHNlZSA8eHJlZgorCQkgIGxpbmtlbmQ9InRpbWVjb2RlLXR5cGUiIC8+LjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+VGltZWNvZGUgZmxhZ3MsIHNlZSA8eHJlZiBsaW5rZW5kPSJ0aW1lY29kZS1mbGFncyIgLz4uPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZnJhbWVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5GcmFtZSBjb3VudCwgMCAuLi4gMjMvMjQvMjkvNDkvNTksIGRlcGVuZGluZyBvbiB0aGUKKwkgICAgdHlwZSBvZiB0aW1lY29kZS48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZWNvbmRzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5TZWNvbmRzIGNvdW50LCAwIC4uLiA1OS4gVGhpcyBpcyBhIGJpbmFyeSwgbm90IEJDRCBudW1iZXIuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWludXRlczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+TWludXRlcyBjb3VudCwgMCAuLi4gNTkuIFRoaXMgaXMgYSBiaW5hcnksIG5vdCBCQ0QgbnVtYmVyLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhvdXJzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5Ib3VycyBjb3VudCwgMCAuLi4gMjkuIFRoaXMgaXMgYSBiaW5hcnksIG5vdCBCQ0QgbnVtYmVyLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnVzZXJiaXRzPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICAgIDxlbnRyeT5UaGUgInVzZXIgZ3JvdXAiIGJpdHMgZnJvbSB0aGUgdGltZWNvZGUuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8L3Rib2R5PgorCTwvdGdyb3VwPgorICAgICAgPC90YWJsZT4KKworICAgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ0aW1lY29kZS10eXBlIj4KKwk8dGl0bGU+VGltZWNvZGUgVHlwZXM8L3RpdGxlPgorCTx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RDX1RZUEVfMjRGUFM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICAgIDxlbnRyeT4yNCBmcmFtZXMgcGVyIHNlY29uZCwgaS4mbmJzcDtlLiBmaWxtLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19UWVBFXzI1RlBTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MjUgZnJhbWVzIHBlciBzZWNvbmQsICZpZTsgUEFMIG9yIFNFQ0FNIHZpZGVvLjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19UWVBFXzMwRlBTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MzAgZnJhbWVzIHBlciBzZWNvbmQsICZpZTsgTlRTQyB2aWRlby48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVFlQRV81MEZQUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDwvcm93PgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19UWVBFXzYwRlBTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICA8L3Rib2R5PgorCTwvdGdyb3VwPgorICAgICAgPC90YWJsZT4KKworICAgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ0aW1lY29kZS1mbGFncyI+CisJPHRpdGxlPlRpbWVjb2RlIEZsYWdzPC90aXRsZT4KKwk8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgICA8cm93PgorCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UQ19GTEFHX0RST1BGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+SW5kaWNhdGVzICJkcm9wIGZyYW1lIiBzZW1hbnRpY3MgZm9yIGNvdW50aW5nIGZyYW1lcworaW4gMjkuOTcgZnBzIG1hdGVyaWFsLiBXaGVuIHNldCwgZnJhbWUgbnVtYmVycyAwIGFuZCAxIGF0IHRoZSBzdGFydCBvZgorZWFjaCBtaW51dGUsIGV4Y2VwdCBtaW51dGVzIDAsIDEwLCAyMCwgMzAsIDQwLCA1MCBhcmUgb21pdHRlZCBmcm9tIHRoZQorY291bnQuPC9lbnRyeT4KKwkgICAgPC9yb3c+CisJICAgIDxyb3c+CisJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RDX0ZMQUdfQ09MT1JGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+VGhlICJjb2xvciBmcmFtZSIgZmxhZy48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVVNFUkJJVFNfZmllbGQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MDAwQzwvZW50cnk+CisJICAgICAgPGVudHJ5PkZpZWxkIG1hc2sgZm9yIHRoZSAiYmluYXJ5IGdyb3VwIGZsYWdzIi48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVVNFUkJJVFNfVVNFUkRFRklORUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MDAwMDwvZW50cnk+CisJICAgICAgPGVudHJ5PlVuc3BlY2lmaWVkIGZvcm1hdC48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgICAgPHJvdz4KKwkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVENfVVNFUkJJVFNfOEJJVENIQVJTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT44LWJpdCBJU08gY2hhcmFjdGVycy48L2VudHJ5PgorCSAgICA8L3Jvdz4KKwkgIDwvdGJvZHk+CisJPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorICAgIDwvc2VjdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIGlkPSJmaWVsZC1vcmRlciI+CisgICAgPHRpdGxlPkZpZWxkIE9yZGVyPC90aXRsZT4KKworICAgIDxwYXJhPldlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBwcm9ncmVzc2l2ZSBhbmQgaW50ZXJsYWNlZAordmlkZW8uIFByb2dyZXNzaXZlIHZpZGVvIHRyYW5zbWl0cyBhbGwgbGluZXMgb2YgYSB2aWRlbyBpbWFnZQorc2VxdWVudGlhbGx5LiBJbnRlcmxhY2VkIHZpZGVvIGRpdmlkZXMgYW4gaW1hZ2UgaW50byB0d28gZmllbGRzLAorY29udGFpbmluZyBvbmx5IHRoZSBvZGQgYW5kIGV2ZW4gbGluZXMgb2YgdGhlIGltYWdlLCByZXNwZWN0aXZlbHkuCitBbHRlcm5hdGluZyB0aGUgc28gY2FsbGVkIG9kZCBhbmQgZXZlbiBmaWVsZCBhcmUgdHJhbnNtaXR0ZWQsIGFuZCBkdWUKK3RvIGEgc21hbGwgZGVsYXkgYmV0d2VlbiBmaWVsZHMgYSBjYXRob2RlIHJheSBUViBkaXNwbGF5cyB0aGUgbGluZXMKK2ludGVybGVhdmVkLCB5aWVsZGluZyB0aGUgb3JpZ2luYWwgZnJhbWUuIFRoaXMgY3VyaW91cyB0ZWNobmlxdWUgd2FzCitpbnZlbnRlZCBiZWNhdXNlIGF0IHJlZnJlc2ggcmF0ZXMgc2ltaWxhciB0byBmaWxtIHRoZSBpbWFnZSB3b3VsZAorZmFkZSBvdXQgdG9vIHF1aWNrbHkuIFRyYW5zbWl0dGluZyBmaWVsZHMgcmVkdWNlcyB0aGUgZmxpY2tlciB3aXRob3V0Cit0aGUgbmVjZXNzaXR5IG9mIGRvdWJsaW5nIHRoZSBmcmFtZSByYXRlIGFuZCB3aXRoIGl0IHRoZSBiYW5kd2lkdGgKK3JlcXVpcmVkIGZvciBlYWNoIGNoYW5uZWwuPC9wYXJhPgorCisgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgYSB2aWRlbyBjYW1lcmEgZG9lcyBub3QgZXhwb3NlCitvbmUgZnJhbWUgYXQgYSB0aW1lLCBtZXJlbHkgdHJhbnNtaXR0aW5nIHRoZSBmcmFtZXMgc2VwYXJhdGVkIGludG8KK2ZpZWxkcy4gVGhlIGZpZWxkcyBhcmUgaW4gZmFjdCBjYXB0dXJlZCBhdCB0d28gZGlmZmVyZW50IGluc3RhbmNlcyBpbgordGltZS4gQW4gb2JqZWN0IG9uIHNjcmVlbiBtYXkgd2VsbCBtb3ZlIGJldHdlZW4gb25lIGZpZWxkIGFuZCB0aGUKK25leHQuIEZvciBhcHBsaWNhdGlvbnMgYW5hbHlzaW5nIG1vdGlvbiBpdCBpcyBvZiBwYXJhbW91bnQgaW1wb3J0YW5jZQordG8gcmVjb2duaXplIHdoaWNoIGZpZWxkIG9mIGEgZnJhbWUgaXMgb2xkZXIsIHRoZSA8ZW1waGFzaXM+dGVtcG9yYWwKK29yZGVyPC9lbXBoYXNpcz4uPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiB0aGUgZHJpdmVyIHByb3ZpZGVzIG9yIGFjY2VwdHMgaW1hZ2VzIGZpZWxkIGJ5IGZpZWxkCityYXRoZXIgdGhhbiBpbnRlcmxlYXZlZCwgaXQgaXMgYWxzbyBpbXBvcnRhbnQgYXBwbGljYXRpb25zIHVuZGVyc3RhbmQKK2hvdyB0aGUgZmllbGRzIGNvbWJpbmUgdG8gZnJhbWVzLiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRvcCBhbmQKK2JvdHRvbSBmaWVsZHMsIHRoZSA8ZW1waGFzaXM+c3BhdGlhbCBvcmRlcjwvZW1waGFzaXM+OiBUaGUgZmlyc3QgbGluZQorb2YgdGhlIHRvcCBmaWVsZCBpcyB0aGUgZmlyc3QgbGluZSBvZiBhbiBpbnRlcmxhY2VkIGZyYW1lLCB0aGUgZmlyc3QKK2xpbmUgb2YgdGhlIGJvdHRvbSBmaWVsZCBpcyB0aGUgc2Vjb25kIGxpbmUgb2YgdGhhdCBmcmFtZS48L3BhcmE+CisKKyAgICA8cGFyYT5Ib3dldmVyIGJlY2F1c2UgZmllbGRzIHdlcmUgY2FwdHVyZWQgb25lIGFmdGVyIHRoZSBvdGhlciwKK2FyZ3Vpbmcgd2hldGhlciBhIGZyYW1lIGNvbW1lbmNlcyB3aXRoIHRoZSB0b3Agb3IgYm90dG9tIGZpZWxkIGlzCitwb2ludGxlc3MuIEFueSB0d28gc3VjY2Vzc2l2ZSB0b3AgYW5kIGJvdHRvbSwgb3IgYm90dG9tIGFuZCB0b3AgZmllbGRzCit5aWVsZCBhIHZhbGlkIGZyYW1lLiBPbmx5IHdoZW4gdGhlIHNvdXJjZSB3YXMgcHJvZ3Jlc3NpdmUgdG8gYmVnaW4KK3dpdGgsICZlZzsgd2hlbiB0cmFuc2ZlcnJpbmcgZmlsbSB0byB2aWRlbywgdHdvIGZpZWxkcyBtYXkgY29tZSBmcm9tCit0aGUgc2FtZSBmcmFtZSwgY3JlYXRpbmcgYSBuYXR1cmFsIG9yZGVyLjwvcGFyYT4KKworICAgIDxwYXJhPkNvdW50ZXIgdG8gaW50dWl0aW9uIHRoZSB0b3AgZmllbGQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZQorb2xkZXIgZmllbGQuIFdoZXRoZXIgdGhlIG9sZGVyIGZpZWxkIGNvbnRhaW5zIHRoZSB0b3Agb3IgYm90dG9tIGxpbmVzCitpcyBhIGNvbnZlbnRpb24gZGV0ZXJtaW5lZCBieSB0aGUgdmlkZW8gc3RhbmRhcmQuIEhlbmNlIHRoZQorZGlzdGluY3Rpb24gYmV0d2VlbiB0ZW1wb3JhbCBhbmQgc3BhdGlhbCBvcmRlciBvZiBmaWVsZHMuIFRoZSBkaWFncmFtcworYmVsb3cgc2hvdWxkIG1ha2UgdGhpcyBjbGVhcmVyLjwvcGFyYT4KKworICAgIDxwYXJhPkFsbCB2aWRlbyBjYXB0dXJlIGFuZCBvdXRwdXQgZGV2aWNlcyBtdXN0IHJlcG9ydCB0aGUgY3VycmVudAorZmllbGQgb3JkZXIuIFNvbWUgZHJpdmVycyBtYXkgcGVybWl0IHRoZSBzZWxlY3Rpb24gb2YgYSBkaWZmZXJlbnQKK29yZGVyLCB0byB0aGlzIGVuZCBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLXBpeC1mb3JtYXQ7IGJlZm9yZQorY2FsbGluZyB0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuIElmIHRoaXMgaXMgbm90IGRlc2lyZWQgaXQgc2hvdWxkCitoYXZlIHRoZSB2YWx1ZSA8Y29uc3RhbnQ+VjRMMl9GSUVMRF9BTlk8L2NvbnN0YW50PiAoMCkuPC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWZpZWxkIj4KKyAgICAgIDx0aXRsZT5lbnVtIHY0bDJfZmllbGQ8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRklFTERfQU5ZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT5BcHBsaWNhdGlvbnMgcmVxdWVzdCB0aGlzIGZpZWxkIG9yZGVyIHdoZW4gYW55CitvbmUgb2YgdGhlIDxjb25zdGFudD5WNEwyX0ZJRUxEX05PTkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfRklFTERfQk9UVE9NPC9jb25zdGFudD4sIG9yCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9JTlRFUkxBQ0VEPC9jb25zdGFudD4gZm9ybWF0cyBpcyBhY2NlcHRhYmxlLgorRHJpdmVycyBjaG9vc2UgZGVwZW5kaW5nIG9uIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvciBlLiZuYnNwO2cuIHRoZQorcmVxdWVzdGVkIGltYWdlIHNpemUsIGFuZCByZXR1cm4gdGhlIGFjdHVhbCBmaWVsZCBvcmRlci4gJnY0bDItYnVmZmVyOworPHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD4gY2FuIG5ldmVyIGJlCis8Y29uc3RhbnQ+VjRMMl9GSUVMRF9BTlk8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRklFTERfTk9ORTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+SW1hZ2VzIGFyZSBpbiBwcm9ncmVzc2l2ZSBmb3JtYXQsIG5vdCBpbnRlcmxhY2VkLgorVGhlIGRyaXZlciBtYXkgYWxzbyBpbmRpY2F0ZSB0aGlzIG9yZGVyIHdoZW4gaXQgY2Fubm90IGRpc3Rpbmd1aXNoCitiZXR3ZWVuIDxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfRklFTERfQk9UVE9NPC9jb25zdGFudD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1RPUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+SW1hZ2VzIGNvbnNpc3Qgb2YgdGhlIHRvcCBmaWVsZCBvbmx5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GSUVMRF9CT1RUT008L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb25zaXN0IG9mIHRoZSBib3R0b20gZmllbGQgb25seS4KK0FwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBwcmV2ZW50IGEgZGV2aWNlIGZyb20gY2FwdHVyaW5nIGludGVybGFjZWQKK2ltYWdlcyBiZWNhdXNlIHRoZXkgd2lsbCBoYXZlICJjb21iIiBvciAiZmVhdGhlcmluZyIgYXJ0ZWZhY3RzIGFyb3VuZAorbW92aW5nIG9iamVjdHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb250YWluIGJvdGggZmllbGRzLCBpbnRlcmxlYXZlZCBsaW5lIGJ5CitsaW5lLiBUaGUgdGVtcG9yYWwgb3JkZXIgb2YgdGhlIGZpZWxkcyAod2hldGhlciB0aGUgdG9wIG9yIGJvdHRvbQorZmllbGQgaXMgZmlyc3QgdHJhbnNtaXR0ZWQpIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQuCitNL05UU0MgdHJhbnNtaXRzIHRoZSBib3R0b20gZmllbGQgZmlyc3QsIGFsbCBvdGhlciBzdGFuZGFyZHMgdGhlIHRvcAorZmllbGQgZmlyc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX1NFUV9UQjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+SW1hZ2VzIGNvbnRhaW4gYm90aCBmaWVsZHMsIHRoZSB0b3AgZmllbGQgbGluZXMKK2FyZSBzdG9yZWQgZmlyc3QgaW4gbWVtb3J5LCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGUgYm90dG9tIGZpZWxkCitsaW5lcy4gRmllbGRzIGFyZSBhbHdheXMgc3RvcmVkIGluIHRlbXBvcmFsIG9yZGVyLCB0aGUgb2xkZXIgb25lIGZpcnN0CitpbiBtZW1vcnkuIEltYWdlIHNpemVzIHJlZmVyIHRvIHRoZSBmcmFtZSwgbm90IGZpZWxkcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRklFTERfU0VRX0JUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT5JbWFnZXMgY29udGFpbiBib3RoIGZpZWxkcywgdGhlIGJvdHRvbSBmaWVsZAorbGluZXMgYXJlIHN0b3JlZCBmaXJzdCBpbiBtZW1vcnksIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSB0b3AKK2ZpZWxkIGxpbmVzLiBGaWVsZHMgYXJlIGFsd2F5cyBzdG9yZWQgaW4gdGVtcG9yYWwgb3JkZXIsIHRoZSBvbGRlciBvbmUKK2ZpcnN0IGluIG1lbW9yeS4gSW1hZ2Ugc2l6ZXMgcmVmZXIgdG8gdGhlIGZyYW1lLCBub3QgZmllbGRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GSUVMRF9BTFRFUk5BVEU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0d28gZmllbGRzIG9mIGEgZnJhbWUgYXJlIHBhc3NlZCBpbiBzZXBhcmF0ZQorYnVmZmVycywgaW4gdGVtcG9yYWwgb3JkZXIsICZpZTsgdGhlIG9sZGVyIG9uZSBmaXJzdC4gVG8gaW5kaWNhdGUgdGhlIGZpZWxkCitwYXJpdHkgKHdoZXRoZXIgdGhlIGN1cnJlbnQgZmllbGQgaXMgYSB0b3Agb3IgYm90dG9tIGZpZWxkKSB0aGUgZHJpdmVyCitvciBhcHBsaWNhdGlvbiwgZGVwZW5kaW5nIG9uIGRhdGEgZGlyZWN0aW9uLCBtdXN0IHNldCAmdjRsMi1idWZmZXI7Cis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiB0bworPGNvbnN0YW50PlY0TDJfRklFTERfVE9QPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX0ZJRUxEX0JPVFRPTTwvY29uc3RhbnQ+LiBBbnkgdHdvIHN1Y2Nlc3NpdmUgZmllbGRzIHBhaXIKK3RvIGJ1aWxkIGEgZnJhbWUuIElmIGZpZWxkcyBhcmUgc3VjY2Vzc2l2ZSwgd2l0aG91dCBhbnkgZHJvcHBlZCBmaWVsZHMKK2JldHdlZW4gdGhlbSAoZmllbGRzIGNhbiBkcm9wIGluZGl2aWR1YWxseSksIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20KK3RoZSAmdjRsMi1idWZmZXI7IDxzdHJ1Y3RmaWVsZD5zZXF1ZW5jZTwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJbWFnZQorc2l6ZXMgcmVmZXIgdG8gdGhlIGZyYW1lLCBub3QgZmllbGRzLiBUaGlzIGZvcm1hdCBjYW5ub3QgYmUgc2VsZWN0ZWQKK3doZW4gdXNpbmcgdGhlIHJlYWQvd3JpdGUgSS9PIG1ldGhvZC48IS0tIFdoZXJlIGl0J3MgaW5kaXN0aW5ndWlzaGFibGUKK2Zyb20gVjRMMl9GSUVMRF9TRVFfKi4gLS0+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb250YWluIGJvdGggZmllbGRzLCBpbnRlcmxlYXZlZCBsaW5lIGJ5CitsaW5lLCB0b3AgZmllbGQgZmlyc3QuIFRoZSB0b3AgZmllbGQgaXMgdHJhbnNtaXR0ZWQgZmlyc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT45PC9lbnRyeT4KKwkgICAgPGVudHJ5PkltYWdlcyBjb250YWluIGJvdGggZmllbGRzLCBpbnRlcmxlYXZlZCBsaW5lIGJ5CitsaW5lLCB0b3AgZmllbGQgZmlyc3QuIFRoZSBib3R0b20gZmllbGQgaXMgdHJhbnNtaXR0ZWQgZmlyc3QuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPGZpZ3VyZSBpZD0iZmllbGRzZXEtdGIiPgorCTx0aXRsZT5GaWVsZCBPcmRlciwgVG9wIEZpZWxkIEZpcnN0IFRyYW5zbWl0dGVkPC90aXRsZT4KKwk8bWVkaWFvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmllbGRzZXFfdGIucGRmIiBmb3JtYXQ9IlBTIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWVsZHNlcV90Yi5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwk8L21lZGlhb2JqZWN0PgorICAgIDwvZmlndXJlPgorCisgICAgPGZpZ3VyZSBpZD0iZmllbGRzZXEtYnQiPgorCTx0aXRsZT5GaWVsZCBPcmRlciwgQm90dG9tIEZpZWxkIEZpcnN0IFRyYW5zbWl0dGVkPC90aXRsZT4KKwk8bWVkaWFvYmplY3Q+CisJICA8aW1hZ2VvYmplY3Q+CisJICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmllbGRzZXFfYnQucGRmIiBmb3JtYXQ9IlBTIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwkgIDxpbWFnZW9iamVjdD4KKwkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWVsZHNlcV9idC5naWYiIGZvcm1hdD0iR0lGIiAvPgorCSAgPC9pbWFnZW9iamVjdD4KKwk8L21lZGlhb2JqZWN0PgorICAgIDwvZmlndXJlPgorICA8L3NlY3Rpb24+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2tleXRhYmxlLmMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9rZXl0YWJsZS5jLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTMyNTRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9rZXl0YWJsZS5jLnhtbApAQCAtMCwwICsxLDE3MiBAQAorPHByb2dyYW1saXN0aW5nPgorLyoga2V5dGFibGUuYyAtIFRoaXMgcHJvZ3JhbSBhbGxvd3MgY2hlY2tpbmcvcmVwbGFjaW5nIGtleXMgYXQgSVIKKworICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiICZsdDttY2hlaGFiQGluZnJhZGVhZC5vcmcmZ3Q7CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICZsdDtjdHlwZS5oJmd0OworI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKKyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O2xpbnV4L2lucHV0LmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CisKKyNpbmNsdWRlICJwYXJzZS5oIgorCit2b2lkIHBydGNvZGUgKGludCAqY29kZXMpCit7CisgICAgICAgIHN0cnVjdCBwYXJzZV9rZXkgKnA7CisKKyAgICAgICAgZm9yIChwPWtleW5hbWVzO3AtJmd0O25hbWUhPU5VTEw7cCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHAtJmd0O3ZhbHVlID09ICh1bnNpZ25lZCljb2Rlc1sxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzY2FuY29kZSAweCUwNHggPSAlcyAoMHglMDJ4KVxuIiwgY29kZXNbMF0sIHAtJmd0O25hbWUsIGNvZGVzWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNwcmludCAoY29kZXNbMV0pKQorICAgICAgICAgICAgICAgIHByaW50Zigic2NhbmNvZGUgJWQgPSAnJWMnICgweCUwMngpXG4iLCBjb2Rlc1swXSwgY29kZXNbMV0sIGNvZGVzWzFdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50Zigic2NhbmNvZGUgJWQgPSAweCUwMnhcbiIsIGNvZGVzWzBdLCBjb2Rlc1sxXSk7Cit9CisKK2ludCBwYXJzZV9jb2RlKGNoYXIgKnN0cmluZykKK3sKKyAgICAgICAgc3RydWN0IHBhcnNlX2tleSAqcDsKKworICAgICAgICBmb3IgKHA9a2V5bmFtZXM7cC0mZ3Q7bmFtZSE9TlVMTDtwKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAocC0mZ3Q7bmFtZSwgc3RyaW5nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAtJmd0O3ZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgICAgICBpbnQgZmQ7CisgICAgICAgIHVuc2lnbmVkIGludCBpLCBqOworICAgICAgICBpbnQgY29kZXNbMl07CisKKyAgICAgICAgaWYgKGFyZ2MmbHQ7MiB8fCBhcmdjJmd0OzQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYgKCJ1c2FnZTogJXMgJmx0O2RldmljZSZndDsgdG8gZ2V0IHRhYmxlOyBvclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAlcyAmbHQ7ZGV2aWNlJmd0OyAmbHQ7c2NhbmNvZGUmZ3Q7ICZsdDtrZXljb2RlJmd0O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAlcyAmbHQ7ZGV2aWNlJmd0OyAmbHQ7a2V5Y29kZV9maWxlJmd0O1xuIiwqYXJndiwqYXJndiwqYXJndik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChmZCA9IG9wZW4oYXJndlsxXSwgT19SRE9OTFkpKSAmbHQ7IDApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoIkNvdWxkbid0IG9wZW4gaW5wdXQgZGV2aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmdjPT00KSB7CisgICAgICAgICAgICAgICAgaW50IHZhbHVlOworCisgICAgICAgICAgICAgICAgdmFsdWU9cGFyc2VfY29kZShhcmd2WzNdKTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZT09LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RydG9sKGFyZ3ZbM10sIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm5vKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29kZXMgWzBdID0gKHVuc2lnbmVkKSBzdHJ0b2woYXJndlsyXSwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29kZXMgWzFdID0gKHVuc2lnbmVkKSB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGlmKGlvY3RsKGZkLCBFVklPQ1NLRVlDT0RFLCBjb2RlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJFVklPQ1NLRVlDT0RFIik7CisKKyAgICAgICAgICAgICAgICBpZihpb2N0bChmZCwgRVZJT0NHS0VZQ09ERSwgY29kZXMpPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJ0Y29kZShjb2Rlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJnYz09MykgeworICAgICAgICAgICAgICAgIEZJTEUgKmZpbjsKKyAgICAgICAgICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgICAgICAgICAgY2hhciAqc2NhbmNvZGUsICprZXljb2RlLCBzWzIwNDhdOworCisgICAgICAgICAgICAgICAgZmluPWZvcGVuKGFyZ3ZbMl0sInIiKTsKKyAgICAgICAgICAgICAgICBpZiAoZmluPT1OVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJvcGVuaW5nIGtleWNvZGUgZmlsZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIENsZWFycyBvbGQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqICZsdDsgMjU2OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc1swXSA9IChqICZsdDsmbHQ7IDgpIHwgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNbMV0gPSBLRVlfUkVTRVJWRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvY3RsKGZkLCBFVklPQ1NLRVlDT0RFLCBjb2Rlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2hpbGUgKGZnZXRzKHMsc2l6ZW9mKHMpLGZpbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5jb2RlPXN0cnRvayhzLCJcblx0ID06Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjYW5jb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvciAoInBhcnNpbmcgaW5wdXQgZmlsZSBzY2FuY29kZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoc2NhbmNvZGUsICJzY2FuY29kZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5jb2RlID0gc3RydG9rKE5VTEwsIlxuXHQgPToiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2FuY29kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvciAoInBhcnNpbmcgaW5wdXQgZmlsZSBzY2FuY29kZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBrZXljb2RlPXN0cnRvayhOVUxMLCJcblx0ID06KCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXljb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvciAoInBhcnNpbmcgaW5wdXQgZmlsZSBrZXljb2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRmICgicGFyc2luZyAlcz0lczoiLCBzY2FuY29kZSwga2V5Y29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1wYXJzZV9jb2RlKGtleWNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRmICgiXHR2YWx1ZT0lZFxuIix2YWx1ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZT09LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woa2V5Y29kZSwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzIFswXSA9ICh1bnNpZ25lZCkgc3RydG9sKHNjYW5jb2RlLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzIFsxXSA9ICh1bnNpZ25lZCkgdmFsdWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50ZigiXHQlMDR4PSUwNHhcbiIsY29kZXNbMF0sIGNvZGVzWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlvY3RsKGZkLCBFVklPQ1NLRVlDT0RFLCBjb2RlcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXR0aW5nIHNjYW5jb2RlIDB4JTA0eCB3aXRoIDB4JTA0eCB2aWEgIixjb2Rlc1swXSwgY29kZXNbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJFVklPQ1NLRVlDT0RFIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlvY3RsKGZkLCBFVklPQ0dLRVlDT0RFLCBjb2Rlcyk9PTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydGNvZGUoY29kZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdldCBzY2FuY29kZSB0YWJsZSAqLworICAgICAgICBmb3IgKGogPSAwOyBqICZsdDsgMjU2OyBqKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzWzBdID0gKGogJmx0OyZsdDsgOCkgfCBpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpb2N0bChmZCwgRVZJT0NHS0VZQ09ERSwgY29kZXMpICZhbXA7JmFtcDsgY29kZXNbMV0gIT0gS0VZX1JFU0VSVkVEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnRjb2RlKGNvZGVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKzwvcHJvZ3JhbWxpc3Rpbmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpYnY0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpYnY0bC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0ZmMzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlidjRsLnhtbApAQCAtMCwwICsxLDE2NyBAQAorPHRpdGxlPkxpYnY0bCBVc2Vyc3BhY2UgTGlicmFyeTwvdGl0bGU+Cis8c2VjdGlvbiBpZD0ibGlidjRsLWludHJvZHVjdGlvbiI+CisJPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5saWJ2NGwgaXMgYSBjb2xsZWN0aW9uIG9mIGxpYnJhcmllcyB3aGljaCBhZGRzIGEgdGhpbiBhYnN0cmFjdGlvbgorbGF5ZXIgb24gdG9wIG9mIHZpZGVvNGxpbnV4MiBkZXZpY2VzLiBUaGUgcHVycG9zZSBvZiB0aGlzICh0aGluKSBsYXllcgoraXMgdG8gbWFrZSBpdCBlYXN5IGZvciBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIHN1cHBvcnQgYSB3aWRlIHZhcmlldHkgb2YKK2RldmljZXMgd2l0aG91dCBoYXZpbmcgdG8gd3JpdGUgc2VwYXJhdGUgY29kZSBmb3IgZGlmZmVyZW50IGRldmljZXMgaW4gdGhlCitzYW1lIGNsYXNzLjwvcGFyYT4KKzxwYXJhPkFuIGV4YW1wbGUgb2YgdXNpbmcgbGlidjRsIGlzIHByb3ZpZGVkIGJ5Cis8bGluayBsaW5rZW5kPSd2NGwyZ3JhYi1leGFtcGxlJz52NGwyZ3JhYjwvbGluaz4uCis8L3BhcmE+CisKKwk8cGFyYT5saWJ2NGwgY29uc2lzdHMgb2YgMyBkaWZmZXJlbnQgbGlicmFyaWVzOjwvcGFyYT4KKwk8c2VjdGlvbj4KKwkJPHRpdGxlPmxpYnY0bGNvbnZlcnQ8L3RpdGxlPgorCisJCTxwYXJhPmxpYnY0bGNvbnZlcnQgaXMgYSBsaWJyYXJ5IHRoYXQgY29udmVydHMgc2V2ZXJhbAorZGlmZmVyZW50IHBpeGVsZm9ybWF0cyBmb3VuZCBpbiBWNEwyIGRyaXZlcnMgaW50byBhIGZldyBjb21tb24gUkdCIGFuZAorWVVZIGZvcm1hdHMuPC9wYXJhPgorCQk8cGFyYT5JdCBjdXJyZW50bHkgYWNjZXB0cyB0aGUgZm9sbG93aW5nIFY0TDIgZHJpdmVyIGZvcm1hdHM6Cis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtQkdSMjQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMjQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtSE0xMiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ITTEyPC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUpQRUciPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSlBFRzwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NSlBFRyI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9NSlBFRzwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NUjk3MzEwQSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9NUjk3MzEwQTwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1PVjUxMSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9PVjUxMTwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1PVjUxOCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9PVjUxODwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1QQUMyMDciPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFDMjA3PC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVBKUEciPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEpQRzwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0IyNCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0IyNDwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TQkdHUjgiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0JHR1I4PC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNHQlJHOCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR0JSRzg8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU0dSQkc4Ij48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NHUkJHODwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TTjlDMTBYIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NOOUMxMFg8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU045QzIwWC1JNDIwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NOOUMyMFhfSTQyMDwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TUENBNTAxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NQQ0E1MDE8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1BDQTUwNSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TUENBNTA1PC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDgiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1BDQTUwODwvY29uc3RhbnQ+PC9saW5rPiwKKzxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TUENBNTYxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NQQ0E1NjE8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1E5MDVDIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NROTA1QzwvY29uc3RhbnQ+PC9saW5rPiwKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1JHR0I4PC9jb25zdGFudD4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtVVlWWSI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9VWVZZPC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjA8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVZViI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVlWPC9jb25zdGFudD48L2xpbms+LAorPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PjwvbGluaz4sCithbmQgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWWVUiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZZVTwvY29uc3RhbnQ+PC9saW5rPi4KKzwvcGFyYT4KKwkJPHBhcmE+TGF0ZXIgb24gbGlidjRsY29udmVydCB3YXMgZXhwYW5kZWQgdG8gYWxzbyBiZSBhYmxlIHRvIGRvCit2YXJpb3VzCXZpZGVvIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHRvIGltcHJvdmUgd2ViY2FtIHZpZGVvIHF1YWxpdHkuCitUaGUgdmlkZW8gcHJvY2Vzc2luZyBpcyBzcGxpdCBpbiB0byAyIHBhcnRzOiBsaWJ2NGxjb252ZXJ0L2NvbnRyb2wgYW5kCitsaWJ2NGxjb252ZXJ0L3Byb2Nlc3NpbmcuPC9wYXJhPgorCisJCTxwYXJhPlRoZSBjb250cm9sIHBhcnQgaXMgdXNlZCB0byBvZmZlciB2aWRlbyBjb250cm9scyB3aGljaCBjYW4KK2JlIHVzZWQJdG8gY29udHJvbCB0aGUgdmlkZW8gcHJvY2Vzc2luZyBmdW5jdGlvbnMgbWFkZSBhdmFpbGFibGUgYnkKKwlsaWJ2NGxjb252ZXJ0L3Byb2Nlc3NpbmcuIFRoZXNlIGNvbnRyb2xzIGFyZSBzdG9yZWQgYXBwbGljYXRpb24gd2lkZQorKHVudGlsIHJlYm9vdCkgYnkgdXNpbmcgYSBwZXJzaXN0ZW50IHNoYXJlZCBtZW1vcnkgb2JqZWN0LjwvcGFyYT4KKworCQk8cGFyYT5saWJ2NGxjb252ZXJ0L3Byb2Nlc3Npbmcgb2ZmZXJzIHRoZSBhY3R1YWwgdmlkZW8KK3Byb2Nlc3NpbmcgZnVuY3Rpb25hbGl0eS48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uPgorCQk8dGl0bGU+bGlidjRsMTwvdGl0bGU+CisJCTxwYXJhPlRoaXMgbGlicmFyeSBvZmZlcnMgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gcXVpY2tseQorbWFrZSB2NGwxIGFwcGxpY2F0aW9ucyB3b3JrIHdpdGggdjRsMiBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgd29yayBleGFjdGx5CitsaWtlIHRoZSBub3JtYWwgb3Blbi9jbG9zZS9ldGMsIGV4Y2VwdCB0aGF0IGxpYnY0bDEgZG9lcyBmdWxsIGVtdWxhdGlvbiBvZgordGhlIHY0bDEgYXBpIG9uIHRvcCBvZiB2NGwyIGRyaXZlcnMsIGluIGNhc2Ugb2YgdjRsMSBkcml2ZXJzIGl0Cit3aWxsIGp1c3QgcGFzcyBjYWxscyB0aHJvdWdoLjwvcGFyYT4KKwkJPHBhcmE+U2luY2UgdGhvc2UgZnVuY3Rpb25zIGFyZSBlbXVsYXRpb25zIG9mIHRoZSBvbGQgVjRMMSBBUEksCitpdCBzaG91bGRuJ3QgYmUgdXNlZCBmb3IgbmV3IGFwcGxpY2F0aW9ucy48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uPgorCQk8dGl0bGU+bGlidjRsMjwvdGl0bGU+CisJCTxwYXJhPlRoaXMgbGlicmFyeSBzaG91bGQgYmUgdXNlZCBmb3IgYWxsIG1vZGVybiBWNEwyCithcHBsaWNhdGlvbnMuPC9wYXJhPgorCQk8cGFyYT5JdCBwcm92aWRlcyBoYW5kbGVzIHRvIGNhbGwgVjRMMiBvcGVuL2lvY3RsL2Nsb3NlL3BvbGwKK21ldGhvZHMuIEluc3RlYWQgb2YganVzdCBwcm92aWRpbmcgdGhlIHJhdyBvdXRwdXQgb2YgdGhlIGRldmljZSwgaXQgZW5oYW5jZXMKK3RoZSBjYWxscyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCB3aWxsIHVzZSBsaWJ2NGxjb252ZXJ0IHRvIHByb3ZpZGUgbW9yZSB2aWRlbworZm9ybWF0cyBhbmQgdG8gZW5oYW5jZSB0aGUgaW1hZ2UgcXVhbGl0eS48L3BhcmE+CisJCTxwYXJhPkluIG1vc3QgY2FzZXMsIGxpYnY0bDIganVzdCBwYXNzZXMgdGhlIGNhbGxzIGRpcmVjdGx5Cit0aHJvdWdoIHRvIHRoZSB2NGwyIGRyaXZlciwgaW50ZXJjZXB0aW5nIHRoZSBjYWxscyB0bworPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZm10Jz48Y29uc3RhbnQ+VklESU9DX1RSWV9GTVQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mbXQnPjxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PjwvbGluaz4KKzxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+PC9saW5rPgorPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZnJhbWVzaXplcyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L2NvbnN0YW50PjwvbGluaz4KK2FuZCA8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bS1mcmFtZWludGVydmFscyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTPC9jb25zdGFudD48L2xpbms+CitpbiBvcmRlciB0byBlbXVsYXRlIHRoZSBmb3JtYXRzCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtQkdSMjQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMjQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCMjQiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMjQ8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDIwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQyMDwvY29uc3RhbnQ+PC9saW5rPiwKK2FuZCA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVZVNDIwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lWVTQyMDwvY29uc3RhbnQ+PC9saW5rPiwKK2lmIHRoZXkgYXJlbid0IGF2YWlsYWJsZSBpbiB0aGUgZHJpdmVyLgorPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZm10Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1fRk1UPC9jb25zdGFudD48L2xpbms+CitrZWVwcyBlbnVtZXJhdGluZyB0aGUgaGFyZHdhcmUgc3VwcG9ydGVkIGZvcm1hdHMsIHBsdXMgdGhlIGVtdWxhdGVkIGZvcm1hdHMKK29mZmVyZWQgYnkgbGlidjRsIGF0IHRoZSBlbmQuCis8L3BhcmE+CisJCTxzZWN0aW9uIGlkPSJsaWJ2NGwtb3BzIj4KKwkJCTx0aXRsZT5MaWJ2NGwgZGV2aWNlIGNvbnRyb2wgZnVuY3Rpb25zPC90aXRsZT4KKwkJCTxwYXJhPlRoZSBjb21tb24gZmlsZSBvcGVyYXRpb24gbWV0aG9kcyBhcmUgcHJvdmlkZWQgYnkKK2xpYnY0bC48L3BhcmE+CisJCQk8cGFyYT5UaG9zZSBmdW5jdGlvbnMgb3BlcmF0ZSBqdXN0IGxpa2UgZ2xpYmMKK29wZW4vY2xvc2UvZHVwL2lvY3RsL3JlYWQvbW1hcC9tdW5tYXA6PC9wYXJhPgorPGl0ZW1pemVkbGlzdD48bGlzdGl0ZW0+CisJCQk8cGFyYT5pbnQgdjRsMl9vcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGludCBvZmxhZywKKy4uLikgLQorb3BlcmF0ZXMgbGlrZSB0aGUgc3RhbmRhcmQgPGxpbmsgbGlua2VuZD0nZnVuYy1vcGVuJz5vcGVuKCk8L2xpbms+IGZ1bmN0aW9uLgorPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPgorCQkJPHBhcmE+aW50IHY0bDJfY2xvc2UoaW50IGZkKSAtCitvcGVyYXRlcyBsaWtlIHRoZSBzdGFuZGFyZCA8bGluayBsaW5rZW5kPSdmdW5jLWNsb3NlJz5jbG9zZSgpPC9saW5rPiBmdW5jdGlvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX2R1cChpbnQgZmQpIC0KK29wZXJhdGVzIGxpa2UgdGhlIHN0YW5kYXJkIGR1cCgpIGZ1bmN0aW9uLCBkdXBsaWNhdGluZyBhIGZpbGUgaGFuZGxlci4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX2lvY3RsIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgaW50IHJlcXVlc3QsIC4uLikgLQorb3BlcmF0ZXMgbGlrZSB0aGUgc3RhbmRhcmQgPGxpbmsgbGlua2VuZD0nZnVuYy1pb2N0bCc+aW9jdGwoKTwvbGluaz4gZnVuY3Rpb24uCis8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+CisJCQk8cGFyYT5pbnQgdjRsMl9yZWFkIChpbnQgZmQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IG4pIC0KK29wZXJhdGVzIGxpa2UgdGhlIHN0YW5kYXJkIDxsaW5rIGxpbmtlbmQ9J2Z1bmMtcmVhZCc+cmVhZCgpPC9saW5rPiBmdW5jdGlvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPnZvaWQgdjRsMl9tbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIGludDY0X3Qgb2Zmc2V0KTsgLQorb3BlcmF0ZXMgbGlrZSB0aGUgc3RhbmRhcmQgPGxpbmsgbGlua2VuZD0nZnVuYy1tbWFwJz5tbWFwKCk8L2xpbms+IGZ1bmN0aW9uLgorPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPgorCQkJPHBhcmE+aW50IHY0bDJfbXVubWFwKHZvaWQgKl9zdGFydCwgc2l6ZV90IGxlbmd0aCk7IC0KK29wZXJhdGVzIGxpa2UgdGhlIHN0YW5kYXJkIDxsaW5rIGxpbmtlbmQ9J2Z1bmMtbXVubWFwJz5tdW5tYXAoKTwvbGluaz4gZnVuY3Rpb24uCis8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCQkJPHBhcmE+VGhvc2UgZnVuY3Rpb25zIHByb3ZpZGUgYWRkaXRpb25hbCBjb250cm9sOjwvcGFyYT4KKzxpdGVtaXplZGxpc3Q+PGxpc3RpdGVtPgorCQkJPHBhcmE+aW50IHY0bDJfZmRfb3BlbihpbnQgZmQsIGludCB2NGwyX2ZsYWdzKSAtCitvcGVucyBhbiBhbHJlYWR5IG9wZW5lZCBmZCBmb3IgZnVydGhlciB1c2UgdGhyb3VnaCB2NGwybGliIGFuZCBwb3NzaWJseQorbW9kaWZ5IGxpYnY0bDIncyBkZWZhdWx0IGJlaGF2aW9yIHRocm91Z2ggdGhlIHY0bDJfZmxhZ3MgYXJndW1lbnQuCitDdXJyZW50bHksIHY0bDJfZmxhZ3MgY2FuIGJlIDxjb25zdGFudD5WNEwyX0RJU0FCTEVfQ09OVkVSU0lPTjwvY29uc3RhbnQ+LAordG8gZGlzYWJsZSBmb3JtYXQgY29udmVyc2lvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX3NldF9jb250cm9sKGludCBmZCwgaW50IGNpZCwgaW50IHZhbHVlKSAtCitUaGlzIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgb2YgMCAtIDY1NTM1LCBhbmQgdGhlbiBzY2FsZXMgdGhhdCByYW5nZSB0bwordGhlIGFjdHVhbCByYW5nZSBvZiB0aGUgZ2l2ZW4gdjRsIGNvbnRyb2wgaWQsIGFuZCB0aGVuIGlmIHRoZSBjaWQgZXhpc3RzCithbmQgaXMgbm90IGxvY2tlZCBzZXRzIHRoZSBjaWQgdG8gdGhlIHNjYWxlZCB2YWx1ZS4KKzwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT4KKwkJCTxwYXJhPmludCB2NGwyX2dldF9jb250cm9sKGludCBmZCwgaW50IGNpZCkgLQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgMCAtIDY1NTM1LCBzY2FsZWQgdG8gZnJvbSB0aGUgYWN0dWFsIHJhbmdlCitvZiB0aGUgZ2l2ZW4gdjRsIGNvbnRyb2wgaWQuIHdoZW4gdGhlIGNpZCBkb2VzIG5vdCBleGlzdCwgY291bGQgbm90IGJlCithY2Nlc3NlZCBmb3Igc29tZSByZWFzb24sIG9yIHNvbWUgZXJyb3Igb2NjdXJlZCAwIGlzIHJldHVybmVkLgorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKwkJPC9zZWN0aW9uPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbj4KKworCQk8dGl0bGU+djRsMWNvbXBhdC5zbyB3cmFwcGVyIGxpYnJhcnk8L3RpdGxlPgorCisJCTxwYXJhPlRoaXMgbGlicmFyeSBpbnRlcmNlcHRzIGNhbGxzIHRvCitvcGVuL2Nsb3NlL2lvY3RsL21tYXAvbW11bm1hcCBvcGVyYXRpb25zIGFuZCByZWRpcmVjdHMgdGhlbSB0byB0aGUgbGlidjRsCitjb3VudGVycGFydHMsIGJ5IHVzaW5nIExEX1BSRUxPQUQ9L3Vzci9saWIvdjRsMWNvbXBhdC5zby4gSXQgYWxzbworZW11bGF0ZXMgVjRMMSBjYWxscyB2aWEgVjRMMiBBUEkuPC9wYXJhPgorCQk8cGFyYT5JdCBhbGxvd3MgdXNhZ2Ugb2YgYmluYXJ5IGxlZ2FjeSBhcHBsaWNhdGlvbnMgdGhhdAorc3RpbGwgZG9uJ3QgdXNlIGxpYnY0bC48L3BhcmE+CisJPC9zZWN0aW9uPgorCis8L3NlY3Rpb24+Cis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1ncmV5LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LWdyZXkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNzJiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1ncmV5LnhtbApAQCAtMCwwICsxLDcwIEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtR1JFWSI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfR1JFWSAoJ0dSRVknKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9HUkVZPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+R3JleS1zY2FsZSBpbWFnZTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhpcyBpcyBhIGdyZXktc2NhbGUgaW1hZ2UuIEl0IGlzIHJlYWxseSBhIGRlZ2VuZXJhdGUKK1knQ2JDciBmb3JtYXQgd2hpY2ggc2ltcGx5IGNvbnRhaW5zIG5vIENiIG9yIENyIGRhdGEuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9HUkVZPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjUiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7NDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxMi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1udjEyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNmNjcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxMi54bWwKQEAgLTAsMCArMSwxNTEgQEAKKyAgICA8cmVmZW50cnk+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfTlYxMiAoJ05WMTInKSwgVjRMMl9QSVhfRk1UX05WMjEgKCdOVjIxJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtTlYxMiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjEyPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZm5hbWUgaWQ9IlY0TDItUElYLUZNVC1OVjIxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WMjE8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5Gb3JtYXRzIHdpdGggJmZyYWMxMjsgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKK2Nocm9tYSByZXNvbHV0aW9uLCBhbHNvIGtub3duIGFzIFlVViA0OjI6MC4gT25lIGx1bWluYW5jZSBhbmQgb25lCitjaHJvbWluYW5jZSBwbGFuZSB3aXRoIGFsdGVybmF0aW5nIGNocm9tYSBzYW1wbGVzIGFzIG9wcG9zZWQgdG8KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDIwPC9jb25zdGFudD48L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPlRoZXNlIGFyZSB0d28tcGxhbmUgdmVyc2lvbnMgb2YgdGhlIFlVViA0OjI6MCBmb3JtYXQuCitUaGUgdGhyZWUgY29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGludG8gdHdvIHN1Yi1pbWFnZXMgb3IgcGxhbmVzLiBUaGUKK1kgcGxhbmUgaXMgZmlyc3QuIFRoZSBZIHBsYW5lIGhhcyBvbmUgYnl0ZSBwZXIgcGl4ZWwuIEZvcgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjEyPC9jb25zdGFudD4sIGEgY29tYmluZWQgQ2JDciBwbGFuZQoraW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgWSBwbGFuZSBpbiBtZW1vcnkuICBUaGUgQ2JDciBwbGFuZSBpcyB0aGUgc2FtZQord2lkdGgsIGluIGJ5dGVzLCBhcyB0aGUgWSBwbGFuZSAoYW5kIG9mIHRoZSBpbWFnZSksIGJ1dCBpcyBoYWxmIGFzCit0YWxsIGluIHBpeGVscy4gRWFjaCBDYkNyIHBhaXIgYmVsb25ncyB0byBmb3VyIHBpeGVscy4gRm9yIGV4YW1wbGUsCitDYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0Pi9DcjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PiBiZWxvbmdzIHRvCitZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD4sIFknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PiwKK1knPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PiwgWSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+LgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjIxPC9jb25zdGFudD4gaXMgdGhlIHNhbWUgZXhjZXB0IHRoZSBDYiBhbmQKK0NyIGJ5dGVzIGFyZSBzd2FwcGVkLCB0aGUgQ3JDYiBwbGFuZSBzdGFydHMgd2l0aCBhIENyIGJ5dGUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUKK0NiQ3IgcGxhbmUgaGFzIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIGl0cyByb3dzLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfTlYxMjwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIwOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxNi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1udjE2LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjA5NDAzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxNi54bWwKQEAgLTAsMCArMSwxNzQgQEAKKyAgICA8cmVmZW50cnk+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfTlYxNiAoJ05WMTYnKSwgVjRMMl9QSVhfRk1UX05WNjEgKCdOVjYxJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtTlYxNiI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjE2PC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZm5hbWUgaWQ9IlY0TDItUElYLUZNVC1OVjYxIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WNjE8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5Gb3JtYXRzIHdpdGggJmZyYWMxMjsgaG9yaXpvbnRhbAorY2hyb21hIHJlc29sdXRpb24sIGFsc28ga25vd24gYXMgWVVWIDQ6MjoyLiBPbmUgbHVtaW5hbmNlIGFuZCBvbmUKK2Nocm9taW5hbmNlIHBsYW5lIHdpdGggYWx0ZXJuYXRpbmcgY2hyb21hIHNhbXBsZXMgYXMgb3Bwb3NlZCB0bworPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PjwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhlc2UgYXJlIHR3by1wbGFuZSB2ZXJzaW9ucyBvZiB0aGUgWVVWIDQ6MjoyIGZvcm1hdC4KK1RoZSB0aHJlZSBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgaW50byB0d28gc3ViLWltYWdlcyBvciBwbGFuZXMuIFRoZQorWSBwbGFuZSBpcyBmaXJzdC4gVGhlIFkgcGxhbmUgaGFzIG9uZSBieXRlIHBlciBwaXhlbC4gRm9yCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX05WMTY8L2NvbnN0YW50PiwgYSBjb21iaW5lZCBDYkNyIHBsYW5lCitpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBZIHBsYW5lIGluIG1lbW9yeS4gIFRoZSBDYkNyIHBsYW5lIGlzIHRoZSBzYW1lCit3aWR0aCBhbmQgaGVpZ2h0LCBpbiBieXRlcywgYXMgdGhlIFkgcGxhbmUgKGFuZCBvZiB0aGUgaW1hZ2UpLgorRWFjaCBDYkNyIHBhaXIgYmVsb25ncyB0byB0d28gcGl4ZWxzLiBGb3IgZXhhbXBsZSwKK0NiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+L0NyPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+IGJlbG9uZ3MgdG8KK1knPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PiwgWSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+LgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9OVjYxPC9jb25zdGFudD4gaXMgdGhlIHNhbWUgZXhjZXB0IHRoZSBDYiBhbmQKK0NyIGJ5dGVzIGFyZSBzd2FwcGVkLCB0aGUgQ3JDYiBwbGFuZSBzdGFydHMgd2l0aCBhIENyIGJ5dGUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUKK0NiQ3IgcGxhbmUgaGFzIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIGl0cyByb3dzLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfTlYxNjwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIwOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXBhY2tlZC1yZ2IueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZGQ2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbApAQCAtMCwwICsxLDg2MiBAQAorPHJlZmVudHJ5IGlkPSJwYWNrZWQtcmdiIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+UGFja2VkIFJHQiBmb3JtYXRzPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+UGFja2VkIFJHQiBmb3JtYXRzPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlBhY2tlZCBSR0IgZm9ybWF0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXNlIGZvcm1hdHMgYXJlIGRlc2lnbmVkIHRvIG1hdGNoIHRoZSBwaXhlbCBmb3JtYXRzIG9mCit0eXBpY2FsIFBDIGdyYXBoaWNzIGZyYW1lIGJ1ZmZlcnMuIFRoZXkgb2NjdXB5IDgsIDE2LCAyNCBvciAzMiBiaXRzCitwZXIgcGl4ZWwuIFRoZXNlIGFyZSBhbGwgcGFja2VkLXBpeGVsIGZvcm1hdHMsIG1lYW5pbmcgYWxsIHRoZSBkYXRhCitmb3IgYSBwaXhlbCBsaWUgbmV4dCB0byBlYWNoIG90aGVyIGluIG1lbW9yeS48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIG9uZSBvZiB0aGVzZSBmb3JtYXRzIGlzIHVzZWQsIGRyaXZlcnMgc2hhbGwgcmVwb3J0IHRoZQorY29sb3JzcGFjZSA8Y29uc3RhbnQ+VjRMMl9DT0xPUlNQQUNFX1NSR0I8L2NvbnN0YW50Pi48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InJnYi1mb3JtYXRzIj4KKyAgICAgIDx0aXRsZT5QYWNrZWQgUkdCIEltYWdlIEZvcm1hdHM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzNyIgYWxpZ249ImNlbnRlciI+CisJPGNvbHNwZWMgY29sbmFtZT0iaWQiIGFsaWduPSJsZWZ0IiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImZvdXJjYyIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJiaXQiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjQiIGNvbG5hbWU9ImIwNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjUiIGNvbG5hbWU9ImIwNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjYiIGNvbG5hbWU9ImIwNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjciIGNvbG5hbWU9ImIwNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjgiIGNvbG5hbWU9ImIwMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjkiIGNvbG5hbWU9ImIwMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjEwIiBjb2xuYW1lPSJiMDEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxMSIgY29sbmFtZT0iYjAwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPGNvbHNwZWMgY29sbnVtPSIxMyIgY29sbmFtZT0iYjE3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTQiIGNvbG5hbWU9ImIxNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE1IiBjb2xuYW1lPSJiMTUiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNiIgY29sbmFtZT0iYjE0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTciIGNvbG5hbWU9ImIxMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE4IiBjb2xuYW1lPSJiMTIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxOSIgY29sbmFtZT0iYjExIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjAiIGNvbG5hbWU9ImIxMCIgYWxpZ249ImNlbnRlciIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iMjIiIGNvbG5hbWU9ImIyNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjIzIiBjb2xuYW1lPSJiMjYiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNCIgY29sbmFtZT0iYjI1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjUiIGNvbG5hbWU9ImIyNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI2IiBjb2xuYW1lPSJiMjMiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNyIgY29sbmFtZT0iYjIyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjgiIGNvbG5hbWU9ImIyMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI5IiBjb2xuYW1lPSJiMjAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjMxIiBjb2xuYW1lPSJiMzciIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzMiIgY29sbmFtZT0iYjM2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzMiIGNvbG5hbWU9ImIzNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM0IiBjb2xuYW1lPSJiMzQiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzNSIgY29sbmFtZT0iYjMzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzYiIGNvbG5hbWU9ImIzMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM3IiBjb2xuYW1lPSJiMzEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzOCIgY29sbmFtZT0iYjMwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPHNwYW5zcGVjIG5hbWVzdD0iYjA3IiBuYW1lZW5kPSJiMDAiIHNwYW5uYW1lPSJiMCIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMTciIG5hbWVlbmQ9ImIxMCIgc3Bhbm5hbWU9ImIxIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIyNyIgbmFtZWVuZD0iYjIwIiBzcGFubmFtZT0iYjIiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjM3IiBuYW1lZW5kPSJiMzAiIHNwYW5uYW1lPSJiMyIgLz4KKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeT5Db2RlPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjAiPkJ5dGUmbmJzcDswIGluIG1lbW9yeTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjEiPkJ5dGUmbmJzcDsxPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMiI+Qnl0ZSZuYnNwOzI8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImIzIj5CeXRlJm5ic3A7MzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJpdDwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVJHQjMzMiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjMzMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0IxJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVJHQjQ0NCI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjQ0NDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSNDQ0JzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtUkdCNTU1Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTU1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQk8nPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0I1NjUiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I1NjU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUkdCUCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVJHQjU1NVgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I1NTVYPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQlEnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0I1NjVYIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTY1WDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JSJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtQkdSMjQiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidCR1IzJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0IyNCI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjI0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQjMnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUJHUjMyIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nQkdSNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1SR0IzMiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjMyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQjQnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8cGFyYT5CaXQgNyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuIFRoZSB2YWx1ZSBvZiBhID0gYWxwaGEKK2JpdHMgaXMgdW5kZWZpbmVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBkcml2ZXIsIGlnbm9yZWQgd2hlbiB3cml0aW5nCit0byB0aGUgZHJpdmVyLCBleGNlcHQgd2hlbiBhbHBoYSBibGVuZGluZyBoYXMgYmVlbiBuZWdvdGlhdGVkIGZvciBhCis8bGluayBsaW5rZW5kPSJvdmVybGF5Ij5WaWRlbyBPdmVybGF5PC9saW5rPiBvciA8bGluaworbGlua2VuZD0ib3NkIj5WaWRlbyBPdXRwdXQgT3ZlcmxheTwvbGluaz4uPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0IHBpeGVsCitpbWFnZTwvdGl0bGU+CisKKyAgICAgIDxmb3JtYWxwYXJhPgorCTx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCSAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkgICAgPHRncm91cCBjb2xzPSIxMyIgYWxpZ249ImNlbnRlciI+CisJICAgICAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzM2OjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCSAgICAgIDwvdGJvZHk+CisJICAgIDwvdGdyb3VwPgorCSAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKwkgICAgPC9wYXJhPgorICAgICAgPC9mb3JtYWxwYXJhPgorICAgIDwvZXhhbXBsZT4KKworICAgIDxpbXBvcnRhbnQ+CisgICAgICA8cGFyYT5Ecml2ZXJzIG1heSBpbnRlcnByZXQgdGhlc2UgZm9ybWF0cyBkaWZmZXJlbnRseS48L3BhcmE+CisgICAgPC9pbXBvcnRhbnQ+CisKKyAgICA8cGFyYT5Tb21lIFJHQiBmb3JtYXRzIGFib3ZlIGFyZSB1bmNvbW1vbiBhbmQgd2VyZSBwcm9iYWJseQorZGVmaW5lZCBpbiBlcnJvci4gRHJpdmVycyBtYXkgaW50ZXJwcmV0IHRoZW0gYXMgaW4gPHhyZWYKKwlsaW5rZW5kPSJyZ2ItZm9ybWF0cy1jb3JyZWN0ZWQiIC8+LjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0icmdiLWZvcm1hdHMtY29ycmVjdGVkIj4KKyAgICAgIDx0aXRsZT5QYWNrZWQgUkdCIEltYWdlIEZvcm1hdHMgKGNvcnJlY3RlZCk8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzNyIgYWxpZ249ImNlbnRlciI+CisJPGNvbHNwZWMgY29sbmFtZT0iaWQiIGFsaWduPSJsZWZ0IiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImZvdXJjYyIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJiaXQiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjQiIGNvbG5hbWU9ImIwNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjUiIGNvbG5hbWU9ImIwNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjYiIGNvbG5hbWU9ImIwNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjciIGNvbG5hbWU9ImIwNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjgiIGNvbG5hbWU9ImIwMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjkiIGNvbG5hbWU9ImIwMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjEwIiBjb2xuYW1lPSJiMDEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxMSIgY29sbmFtZT0iYjAwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPGNvbHNwZWMgY29sbnVtPSIxMyIgY29sbmFtZT0iYjE3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTQiIGNvbG5hbWU9ImIxNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE1IiBjb2xuYW1lPSJiMTUiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNiIgY29sbmFtZT0iYjE0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTciIGNvbG5hbWU9ImIxMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE4IiBjb2xuYW1lPSJiMTIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxOSIgY29sbmFtZT0iYjExIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjAiIGNvbG5hbWU9ImIxMCIgYWxpZ249ImNlbnRlciIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iMjIiIGNvbG5hbWU9ImIyNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjIzIiBjb2xuYW1lPSJiMjYiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNCIgY29sbmFtZT0iYjI1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjUiIGNvbG5hbWU9ImIyNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI2IiBjb2xuYW1lPSJiMjMiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNyIgY29sbmFtZT0iYjIyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjgiIGNvbG5hbWU9ImIyMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI5IiBjb2xuYW1lPSJiMjAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjMxIiBjb2xuYW1lPSJiMzciIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzMiIgY29sbmFtZT0iYjM2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzMiIGNvbG5hbWU9ImIzNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM0IiBjb2xuYW1lPSJiMzQiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzNSIgY29sbmFtZT0iYjMzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzYiIGNvbG5hbWU9ImIzMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM3IiBjb2xuYW1lPSJiMzEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzOCIgY29sbmFtZT0iYjMwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPHNwYW5zcGVjIG5hbWVzdD0iYjA3IiBuYW1lZW5kPSJiMDAiIHNwYW5uYW1lPSJiMCIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMTciIG5hbWVlbmQ9ImIxMCIgc3Bhbm5hbWU9ImIxIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIyNyIgbmFtZWVuZD0iYjIwIiBzcGFubmFtZT0iYjIiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjM3IiBuYW1lZW5kPSJiMzAiIHNwYW5uYW1lPSJiMyIgLz4KKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeT5Db2RlPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjAiPkJ5dGUmbmJzcDswIGluIG1lbW9yeTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjEiPkJ5dGUmbmJzcDsxPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMiI+Qnl0ZSZuYnNwOzI8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImIzIj5CeXRlJm5ic3A7MzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJpdDwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz48IS0tIGlkPSJWNEwyLVBJWC1GTVQtUkdCMzMyIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMzMyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQjEnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1SR0I0NDQiIC0tPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0I0NDQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUjQ0NCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48IS0tIGlkPSJWNEwyLVBJWC1GTVQtUkdCNTU1IiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTU1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1JHQk8nPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PCEtLSBpZD0iVjRMMi1QSVgtRk1ULVJHQjU2NSIgLS0+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjU2NTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JQJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1SR0I1NTVYIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTU1WDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JRJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YTwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1SR0I1NjVYIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCNTY1WDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0JSJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjwhLS0gaWQ9IlY0TDItUElYLUZNVC1CR1IyNCIgLS0+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjI0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0JHUjMnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz48IS0tIGlkPSJWNEwyLVBJWC1GTVQtUkdCMjQiIC0tPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9SR0IyNDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidSR0IzJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PCEtLSBpZD0iVjRMMi1QSVgtRk1ULUJHUjMyIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nQkdSNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PCEtLSBpZD0iVjRMMi1QSVgtRk1ULVJHQjMyIiAtLT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUkdCMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUkdCNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxwYXJhPkEgdGVzdCB1dGlsaXR5IHRvIGRldGVybWluZSB3aGljaCBSR0IgZm9ybWF0cyBhIGRyaXZlcgorYWN0dWFsbHkgc3VwcG9ydHMgaXMgYXZhaWxhYmxlIGZyb20gdGhlIExpbnV4VFYgdjRsLWR2YiByZXBvc2l0b3J5LgorU2VlICZ2NGwtZHZiOyBmb3IgYWNjZXNzIGluc3RydWN0aW9ucy48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQteXV2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXBhY2tlZC15dXYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWI1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQteXV2LnhtbApAQCAtMCwwICsxLDI0NCBAQAorPHJlZmVudHJ5IGlkPSJwYWNrZWQteXV2Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+UGFja2VkIFlVViBmb3JtYXRzPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+UGFja2VkIFlVViBmb3JtYXRzPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlBhY2tlZCBZVVYgZm9ybWF0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlNpbWlsYXIgdG8gdGhlIHBhY2tlZCBSR0IgZm9ybWF0cyB0aGVzZSBmb3JtYXRzIHN0b3JlCit0aGUgWSwgQ2IgYW5kIENyIGNvbXBvbmVudCBvZiBlYWNoIHBpeGVsIGluIG9uZSAxNiBvciAzMiBiaXQKK3dvcmQuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiPgorICAgICAgPHRpdGxlPlBhY2tlZCBZVVYgSW1hZ2UgRm9ybWF0czwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjM3IiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJpZCIgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iZm91cmNjIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImJpdCIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iNCIgY29sbmFtZT0iYjA3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNSIgY29sbmFtZT0iYjA2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNiIgY29sbmFtZT0iYjA1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNyIgY29sbmFtZT0iYjA0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOCIgY29sbmFtZT0iYjAzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOSIgY29sbmFtZT0iYjAyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTAiIGNvbG5hbWU9ImIwMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjExIiBjb2xuYW1lPSJiMDAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8Y29sc3BlYyBjb2xudW09IjEzIiBjb2xuYW1lPSJiMTciIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNCIgY29sbmFtZT0iYjE2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTUiIGNvbG5hbWU9ImIxNSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE2IiBjb2xuYW1lPSJiMTQiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIxNyIgY29sbmFtZT0iYjEzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTgiIGNvbG5hbWU9ImIxMiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjE5IiBjb2xuYW1lPSJiMTEiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyMCIgY29sbmFtZT0iYjEwIiBhbGlnbj0iY2VudGVyIiAvPgorCisJPGNvbHNwZWMgY29sbnVtPSIyMiIgY29sbmFtZT0iYjI3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjMiIGNvbG5hbWU9ImIyNiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI0IiBjb2xuYW1lPSJiMjUiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyNSIgY29sbmFtZT0iYjI0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjYiIGNvbG5hbWU9ImIyMyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjI3IiBjb2xuYW1lPSJiMjIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIyOCIgY29sbmFtZT0iYjIxIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMjkiIGNvbG5hbWU9ImIyMCIgYWxpZ249ImNlbnRlciIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iMzEiIGNvbG5hbWU9ImIzNyIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjMyIiBjb2xuYW1lPSJiMzYiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzMyIgY29sbmFtZT0iYjM1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzQiIGNvbG5hbWU9ImIzNCIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM1IiBjb2xuYW1lPSJiMzMiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbnVtPSIzNiIgY29sbmFtZT0iYjMyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMzciIGNvbG5hbWU9ImIzMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjM4IiBjb2xuYW1lPSJiMzAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8c3BhbnNwZWMgbmFtZXN0PSJiMDciIG5hbWVlbmQ9ImIwMCIgc3Bhbm5hbWU9ImIwIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIxNyIgbmFtZWVuZD0iYjEwIiBzcGFubmFtZT0iYjEiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjI3IiBuYW1lZW5kPSJiMjAiIHNwYW5uYW1lPSJiMiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMzciIG5hbWVlbmQ9ImIzMCIgc3Bhbm5hbWU9ImIzIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5JZGVudGlmaWVyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvZGU8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMCI+Qnl0ZSZuYnNwOzAgaW4gbWVtb3J5PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMSI+Qnl0ZSZuYnNwOzE8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImIyIj5CeXRlJm5ic3A7MjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iYjMiPkJ5dGUmbmJzcDszPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+Qml0PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4mbmJzcDs8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT43PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT40PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtWVVWNDQ0Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDQ0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1k0NDQnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKworCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVlVVjU1NSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjU1NTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidZVVZPJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgPC9yb3c+CisKKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1ZVVY1NjUiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY1NjU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nWVVWUCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKworCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVlVVjMyIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWMzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nWVVWNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5hPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmE8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxwYXJhPkJpdCA3IGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gVGhlIHZhbHVlIG9mIGEgPSBhbHBoYQorYml0cyBpcyB1bmRlZmluZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGRyaXZlciwgaWdub3JlZCB3aGVuIHdyaXRpbmcKK3RvIHRoZSBkcml2ZXIsIGV4Y2VwdCB3aGVuIGFscGhhIGJsZW5kaW5nIGhhcyBiZWVuIG5lZ290aWF0ZWQgZm9yIGEKKzxsaW5rIGxpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IG9yIDxsaW5rCitsaW5rZW5kPSJvc2QiPlZpZGVvIE91dHB1dCBPdmVybGF5PC9saW5rPi48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zYmdncjE2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNiZ2dyMTYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWE5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zYmdncjE2LnhtbApAQCAtMCwwICsxLDkxIEBACis8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1TQkdHUjE2Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1NCR0dSMTYgKCdCWVIyJyk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSMTY8L2NvbnN0YW50PjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5CYXllciBSR0IgZm9ybWF0PC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhpcyBmb3JtYXQgaXMgc2ltaWxhciB0byA8bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNCR0dSOCI+Cis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSODwvY29uc3RhbnQ+PC9saW5rPiwgZXhjZXB0IGVhY2ggcGl4ZWwgaGFzCithIGRlcHRoIG9mIDE2IGJpdHMuIFRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIGlzIHN0b3JlZCBhdCBsb3dlcgorbWVtb3J5IGFkZHJlc3NlcyAobGl0dGxlLWVuZGlhbikuIE5vdGUgdGhlIGFjdHVhbCBzYW1wbGluZyBwcmVjaXNpb24KK21heSBiZSBsb3dlciB0aGFuIDE2IGJpdHMsIGZvciBleGFtcGxlIDEwIGJpdHMgcGVyIHBpeGVsIHdpdGggdmFsdWVzCitpbiByYW5nZSAwIHRvIDEwMjMuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TQkdHUjE2PC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworICAgICAgPGZvcm1hbHBhcmE+CisJPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwk8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJICAgIDx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJICAgICAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MDBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDFsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4wMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4wMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MTBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4xMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjExaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MTJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4xM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5CPHN1YnNjcmlwdD4yMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjIybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+QjxzdWJzY3JpcHQ+MjJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MjNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4yM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4zMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlI8c3Vic2NyaXB0PjMxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjMybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4zM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L3Rncm91cD4KKwkgIDwvaW5mb3JtYWx0YWJsZT4KKwk8L3BhcmE+CisgICAgICA8L2Zvcm1hbHBhcmE+CisgICAgPC9leGFtcGxlPgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2JnZ3I4LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNiZ2dyOC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlODRlYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNiZ2dyOC54bWwKQEAgLTAsMCArMSw3NSBAQAorICAgIDxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVNCR0dSOCI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfU0JHR1I4ICgnQkE4MScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NCR0dSODwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPkJheWVyIFJHQiBmb3JtYXQ8L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPlRoaXMgaXMgY29tbW9ubHkgdGhlIG5hdGl2ZSBmb3JtYXQgb2YgZGlnaXRhbCBjYW1lcmFzLAorcmVmbGVjdGluZyB0aGUgYXJyYW5nZW1lbnQgb2Ygc2Vuc29ycyBvbiB0aGUgQ0NEIGRldmljZS4gT25seSBvbmUgcmVkLAorZ3JlZW4gb3IgYmx1ZSB2YWx1ZSBpcyBnaXZlbiBmb3IgZWFjaCBwaXhlbC4gTWlzc2luZyBjb21wb25lbnRzIG11c3QKK2JlIGludGVycG9sYXRlZCBmcm9tIG5laWdoYm91cmluZyBwaXhlbHMuIEZyb20gbGVmdCB0byByaWdodCB0aGUgZmlyc3QKK3JvdyBjb25zaXN0cyBvZiBhIGJsdWUgYW5kIGdyZWVuIHZhbHVlLCB0aGUgc2Vjb25kIHJvdyBvZiBhIGdyZWVuIGFuZAorcmVkIHZhbHVlLiBUaGlzIHNjaGVtZSByZXBlYXRzIHRvIHRoZSByaWdodCBhbmQgZG93biBmb3IgZXZlcnkgdHdvCitjb2x1bW5zIGFuZCByb3dzLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0JHR1I4PC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJCSAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzEyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkgICAgICA8L2luZm9ybWFsdGFibGU+CisJICAgIDwvcGFyYT4KKwkgIDwvZm9ybWFscGFyYT4KKwk8L2V4YW1wbGU+CisgICAgICA8L3JlZnNlY3QxPgorICAgIDwvcmVmZW50cnk+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJwaXhmbXQuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNnYnJnOC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zZ2JyZzgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2N2E0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zZ2JyZzgueG1sCkBAIC0wLDAgKzEsNzUgQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1TR0JSRzgiPgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1NHQlJHOCAoJ0dCUkcnKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR0JSRzg8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5CYXllciBSR0IgZm9ybWF0PC9yZWZwdXJwb3NlPgorICAgICAgPC9yZWZuYW1lZGl2PgorICAgICAgPHJlZnNlY3QxPgorCTx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5UaGlzIGlzIGNvbW1vbmx5IHRoZSBuYXRpdmUgZm9ybWF0IG9mIGRpZ2l0YWwgY2FtZXJhcywKK3JlZmxlY3RpbmcgdGhlIGFycmFuZ2VtZW50IG9mIHNlbnNvcnMgb24gdGhlIENDRCBkZXZpY2UuIE9ubHkgb25lIHJlZCwKK2dyZWVuIG9yIGJsdWUgdmFsdWUgaXMgZ2l2ZW4gZm9yIGVhY2ggcGl4ZWwuIE1pc3NpbmcgY29tcG9uZW50cyBtdXN0CitiZSBpbnRlcnBvbGF0ZWQgZnJvbSBuZWlnaGJvdXJpbmcgcGl4ZWxzLiBGcm9tIGxlZnQgdG8gcmlnaHQgdGhlIGZpcnN0Cityb3cgY29uc2lzdHMgb2YgYSBncmVlbiBhbmQgYmx1ZSB2YWx1ZSwgdGhlIHNlY29uZCByb3cgb2YgYSByZWQgYW5kCitncmVlbiB2YWx1ZS4gVGhpcyBzY2hlbWUgcmVwZWF0cyB0byB0aGUgcmlnaHQgYW5kIGRvd24gZm9yIGV2ZXJ5IHR3bworY29sdW1ucyBhbmQgcm93cy48L3BhcmE+CisKKwk8ZXhhbXBsZT4KKwkgIDx0aXRsZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NHQlJHODwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjUiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs0OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5SPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5HPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5CPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJICAgICAgPC9pbmZvcm1hbHRhYmxlPgorCSAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zZ3JiZzgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2dyYmc4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2RmMTNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2dyYmc4LnhtbApAQCAtMCwwICsxLDc1IEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtU0dSQkc4Ij4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9TR1JCRzggKCdHUkJHJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0dSQkc4PC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+QmF5ZXIgUkdCIGZvcm1hdDwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhpcyBpcyBjb21tb25seSB0aGUgbmF0aXZlIGZvcm1hdCBvZiBkaWdpdGFsIGNhbWVyYXMsCityZWZsZWN0aW5nIHRoZSBhcnJhbmdlbWVudCBvZiBzZW5zb3JzIG9uIHRoZSBDQ0QgZGV2aWNlLiBPbmx5IG9uZSByZWQsCitncmVlbiBvciBibHVlIHZhbHVlIGlzIGdpdmVuIGZvciBlYWNoIHBpeGVsLiBNaXNzaW5nIGNvbXBvbmVudHMgbXVzdAorYmUgaW50ZXJwb2xhdGVkIGZyb20gbmVpZ2hib3VyaW5nIHBpeGVscy4gRnJvbSBsZWZ0IHRvIHJpZ2h0IHRoZSBmaXJzdAorcm93IGNvbnNpc3RzIG9mIGEgZ3JlZW4gYW5kIGJsdWUgdmFsdWUsIHRoZSBzZWNvbmQgcm93IG9mIGEgcmVkIGFuZAorZ3JlZW4gdmFsdWUuIFRoaXMgc2NoZW1lIHJlcGVhdHMgdG8gdGhlIHJpZ2h0IGFuZCBkb3duIGZvciBldmVyeSB0d28KK2NvbHVtbnMgYW5kIHJvd3MuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR1JCRzg8L2NvbnN0YW50PiA0ICZ0aW1lczsKKzQgcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCSAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7NDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QjxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7ODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+UjxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlI8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkI8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCSAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKwkgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdXl2eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC11eXZ5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZjOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdXl2eS54bWwKQEAgLTAsMCArMSwxMjggQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1VWVZZIj4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9VWVZZICgnVVlWWScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1VZVlk8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5WYXJpYXRpb24gb2YKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IHdpdGggZGlmZmVyZW50IG9yZGVyIG9mIHNhbXBsZXMKK2luIG1lbW9yeTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+SW4gdGhpcyBmb3JtYXQgZWFjaCBmb3VyIGJ5dGVzIGlzIHR3byBwaXhlbHMuIEVhY2ggZm91cgorYnl0ZXMgaXMgdHdvIFkncywgYSBDYiBhbmQgYSBDci4gRWFjaCBZIGdvZXMgdG8gb25lIG9mIHRoZSBwaXhlbHMsIGFuZAordGhlIENiIGFuZCBDciBiZWxvbmcgdG8gYm90aCBwaXhlbHMuIEFzIHlvdSBjYW4gc2VlLCB0aGUgQ3IgYW5kIENiCitjb21wb25lbnRzIGhhdmUgaGFsZiB0aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHRoZSBZCitjb21wb25lbnQuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9VWVZZPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdnl1eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC12eXV5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWYxMmE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdnl1eS54bWwKQEAgLTAsMCArMSwxMjggQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1WWVVZIj4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9WWVVZICgnVllVWScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1ZZVVk8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5WYXJpYXRpb24gb2YKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IHdpdGggZGlmZmVyZW50IG9yZGVyIG9mIHNhbXBsZXMKK2luIG1lbW9yeTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+SW4gdGhpcyBmb3JtYXQgZWFjaCBmb3VyIGJ5dGVzIGlzIHR3byBwaXhlbHMuIEVhY2ggZm91cgorYnl0ZXMgaXMgdHdvIFkncywgYSBDYiBhbmQgYSBDci4gRWFjaCBZIGdvZXMgdG8gb25lIG9mIHRoZSBwaXhlbHMsIGFuZAordGhlIENiIGFuZCBDciBiZWxvbmcgdG8gYm90aCBwaXhlbHMuIEFzIHlvdSBjYW4gc2VlLCB0aGUgQ3IgYW5kIENiCitjb21wb25lbnRzIGhhdmUgaGFsZiB0aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHRoZSBZCitjb21wb25lbnQuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9WWVVZPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTE2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxNi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NDA0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxNi54bWwKQEAgLTAsMCArMSw4OSBAQAorPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtWTE2Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1kxNiAoJ1kxNiAnKTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWTE2PC9jb25zdGFudD48L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R3JleS1zY2FsZSBpbWFnZTwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaXMgYSBncmV5LXNjYWxlIGltYWdlIHdpdGggYSBkZXB0aCBvZiAxNiBiaXRzIHBlcgorcGl4ZWwuIFRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIGlzIHN0b3JlZCBhdCBsb3dlciBtZW1vcnkgYWRkcmVzc2VzCisobGl0dGxlLWVuZGlhbikuIE5vdGUgdGhlIGFjdHVhbCBzYW1wbGluZyBwcmVjaXNpb24gbWF5IGJlIGxvd2VyIHRoYW4KKzE2IGJpdHMsIGZvciBleGFtcGxlIDEwIGJpdHMgcGVyIHBpeGVsIHdpdGggdmFsdWVzIGluIHJhbmdlIDAgdG8KKzEwMjMuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZMTY8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisgICAgICA8Zm9ybWFscGFyYT4KKwk8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCTxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkgICAgPHRncm91cCBjb2xzPSI5IiBhbGlnbj0iY2VudGVyIj4KKwkgICAgICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCSAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2xvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNDo8L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJICAgICAgPC90Ym9keT4KKwkgICAgPC90Z3JvdXA+CisJICA8L2luZm9ybWFsdGFibGU+CisJPC9wYXJhPgorICAgICAgPC9mb3JtYWxwYXJhPgorICAgIDwvZXhhbXBsZT4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJwaXhmbXQuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXk0MXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTQxcC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjODUzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXk0MXAueG1sCkBAIC0wLDAgKzEsMTU3IEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtWTQxUCI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfWTQxUCAoJ1k0MVAnKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+Rm9ybWF0IHdpdGggJmZyYWMxNDsgaG9yaXpvbnRhbCBjaHJvbWEKK3Jlc29sdXRpb24sIGFsc28ga25vd24gYXMgWVVWIDQ6MToxPC9yZWZwdXJwb3NlPgorICAgICAgPC9yZWZuYW1lZGl2PgorICAgICAgPHJlZnNlY3QxPgorCTx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5JbiB0aGlzIGZvcm1hdCBlYWNoIDEyIGJ5dGVzIGlzIGVpZ2h0IHBpeGVscy4gSW4gdGhlCit0d2VsdmUgYnl0ZXMgYXJlIHR3byBDYkNyIHBhaXJzIGFuZCBlaWdodCBZJ3MuIFRoZSBmaXJzdCBDYkNyIHBhaXIKK2dvZXMgd2l0aCB0aGUgZmlyc3QgZm91ciBZJ3MsIGFuZCB0aGUgc2Vjb25kIENiQ3IgcGFpciBnb2VzIHdpdGggdGhlCitvdGhlciBmb3VyIFkncy4gVGhlIENiIGFuZCBDciBjb21wb25lbnRzIGhhdmUgb25lIGZvdXJ0aCB0aGUKK2hvcml6b250YWwgcmVzb2x1dGlvbiBvZiB0aGUgWSBjb21wb25lbnQuPC9wYXJhPgorCisJPHBhcmE+RG8gbm90IGNvbmZ1c2UgdGhpcyBmb3JtYXQgd2l0aCA8bGluaworbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQxMVAiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDExUDwvY29uc3RhbnQ+PC9saW5rPi4KK1k0MVAgaXMgZGVyaXZlZCBmcm9tICJZVVYgNDoxOjEgPGVtcGhhc2lzPnBhY2tlZDwvZW1waGFzaXM+Iiwgd2hpbGUKK1lVVjQxMVAgc3RhbmRzIGZvciAiWVVWIDQ6MToxIDxlbXBoYXNpcz5wbGFuYXI8L2VtcGhhc2lzPiIuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZNDFQPC9jb25zdGFudD4gOCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iMTMiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wNDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDU8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjA2PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wNzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjE1PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xNjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTc8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI0PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yNTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjI3PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzM2OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zNDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzU8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjM2PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zNzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkgICAgICA8L2luZm9ybWFsdGFibGU+PC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjE1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT40PC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+NTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT42PC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+NzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MTwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MTAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDEwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWI0YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDEwLnhtbApAQCAtMCwwICsxLDE0MSBAQAorICAgIDxyZWZlbnRyeT4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9ZVlU0MTAgKCdZVlU5JyksIFY0TDJfUElYX0ZNVF9ZVVY0MTAgKCdZVVY5Jyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtWVZVNDEwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lWVTQxMDwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtWVVWNDEwIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQxMDwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPlBsYW5hciBmb3JtYXRzIHdpdGggJmZyYWMxNDsgaG9yaXpvbnRhbCBhbmQKK3ZlcnRpY2FsIGNocm9tYSByZXNvbHV0aW9uLCBhbHNvIGtub3duIGFzIFlVViA0OjE6MDwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhlc2UgYXJlIHBsYW5hciBmb3JtYXRzLCBhcyBvcHBvc2VkIHRvIGEgcGFja2VkIGZvcm1hdC4KK1RoZSB0aHJlZSBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgaW50byB0aHJlZSBzdWItaW1hZ2VzIG9yIHBsYW5lcy4KK1RoZSBZIHBsYW5lIGlzIGZpcnN0LiBUaGUgWSBwbGFuZSBoYXMgb25lIGJ5dGUgcGVyIHBpeGVsLiBGb3IKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDEwPC9jb25zdGFudD4sIHRoZSBDciBwbGFuZSBpbW1lZGlhdGVseQorZm9sbG93cyB0aGUgWSBwbGFuZSBpbiBtZW1vcnkuIFRoZSBDciBwbGFuZSBpcyAmZnJhYzE0OyB0aGUgd2lkdGggYW5kCismZnJhYzE0OyB0aGUgaGVpZ2h0IG9mIHRoZSBZIHBsYW5lIChhbmQgb2YgdGhlIGltYWdlKS4gRWFjaCBDciBiZWxvbmdzCit0byAxNiBwaXhlbHMsIGEgZm91ci1ieS1mb3VyIHNxdWFyZSBvZiB0aGUgaW1hZ2UuIEZvbGxvd2luZyB0aGUgQ3IKK3BsYW5lIGlzIHRoZSBDYiBwbGFuZSwganVzdCBsaWtlIHRoZSBDciBwbGFuZS4KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDEwPC9jb25zdGFudD4gaXMgdGhlIHNhbWUsIGV4Y2VwdCB0aGUgQ2IKK3BsYW5lIGNvbWVzIGZpcnN0LCB0aGVuIHRoZSBDciBwbGFuZS48L3BhcmE+CisKKwk8cGFyYT5JZiB0aGUgWSBwbGFuZSBoYXMgcGFkIGJ5dGVzIGFmdGVyIGVhY2ggcm93LCB0aGVuIHRoZSBDcgorYW5kIENiIHBsYW5lcyBoYXZlICZmcmFjMTQ7IGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIHRoZWlyIHJvd3MuIEluCitvdGhlciB3b3JkcywgZm91ciBDeCByb3dzIChpbmNsdWRpbmcgcGFkZGluZykgYXJlIGV4YWN0bHkgYXMgbG9uZyBhcworb25lIFkgcm93IChpbmNsdWRpbmcgcGFkZGluZykuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MTA8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJCSAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs0OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7ODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzEyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNzo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MTFwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQxMXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTA5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MTFwLnhtbApAQCAtMCwwICsxLDE1NSBAQAorICAgIDxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVlVVjQxMVAiPgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1lVVjQxMVAgKCc0MTFQJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDExUDwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPkZvcm1hdCB3aXRoICZmcmFjMTQ7IGhvcml6b250YWwgY2hyb21hIHJlc29sdXRpb24sCithbHNvIGtub3duIGFzIFlVViA0OjE6MS4gUGxhbmFyIGxheW91dCBhcyBvcHBvc2VkIHRvCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1k0MVA8L2NvbnN0YW50PjwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+VGhpcyBmb3JtYXQgaXMgbm90IGNvbW1vbmx5IHVzZWQuIFRoaXMgaXMgYSBwbGFuYXIKK2Zvcm1hdCBzaW1pbGFyIHRvIHRoZSA0OjI6MiBwbGFuYXIgZm9ybWF0IGV4Y2VwdCB3aXRoIGhhbGYgYXMgbWFueQorY2hyb21hLiBUaGUgdGhyZWUgY29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGludG8gdGhyZWUgc3ViLWltYWdlcyBvcgorcGxhbmVzLiBUaGUgWSBwbGFuZSBpcyBmaXJzdC4gVGhlIFkgcGxhbmUgaGFzIG9uZSBieXRlIHBlciBwaXhlbC4gVGhlCitDYiBwbGFuZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBZIHBsYW5lIGluIG1lbW9yeS4gVGhlIENiIHBsYW5lIGlzCismZnJhYzE0OyB0aGUgd2lkdGggb2YgdGhlIFkgcGxhbmUgKGFuZCBvZiB0aGUgaW1hZ2UpLiBFYWNoIENiIGJlbG9uZ3MKK3RvIDQgcGl4ZWxzIGFsbCBvbiB0aGUgc2FtZSByb3cuIEZvciBleGFtcGxlLAorQ2I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD4gYmVsb25ncyB0byBZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD4sCitZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD4sIFknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PiBhbmQKK1knPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0Pi4gRm9sbG93aW5nIHRoZSBDYiBwbGFuZSBpcyB0aGUgQ3IgcGxhbmUsCitqdXN0IGxpa2UgdGhlIENiIHBsYW5lLjwvcGFyYT4KKworCTxwYXJhPklmIHRoZSBZIHBsYW5lIGhhcyBwYWQgYnl0ZXMgYWZ0ZXIgZWFjaCByb3csIHRoZW4gdGhlIENyCithbmQgQ2IgcGxhbmVzIGhhdmUgJmZyYWMxNDsgYXMgbWFueSBwYWQgYnl0ZXMgYWZ0ZXIgdGhlaXIgcm93cy4gSW4KK290aGVyIHdvcmRzLCBmb3VyIEMgeCByb3dzIChpbmNsdWRpbmcgcGFkZGluZykgaXMgZXhhY3RseSBhcyBsb25nIGFzCitvbmUgWSByb3cgKGluY2x1ZGluZyBwYWRkaW5nKS48L3BhcmE+CisKKwk8ZXhhbXBsZT4KKwkgIDx0aXRsZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVVjQxMVA8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkJ5dGUgT3JkZXIuPC90aXRsZT4KKwkgICAgPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNSIgYWxpZ249ImNlbnRlciI+CisJCSAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs0OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7ODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzEyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNzo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzE4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTk6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIxOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMzo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjM8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MjAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZDdkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXY0MjAueG1sCkBAIC0wLDAgKzEsMTU3IEBACisgICAgPHJlZmVudHJ5PgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1lWVTQyMCAoJ1lWMTInKSwgVjRMMl9QSVhfRk1UX1lVVjQyMCAoJ1lVMTInKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZSBpZD0iVjRMMi1QSVgtRk1ULVlWVTQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmbmFtZSBpZD0iVjRMMi1QSVgtRk1ULVlVVjQyMCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjA8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5QbGFuYXIgZm9ybWF0cyB3aXRoICZmcmFjMTI7IGhvcml6b250YWwgYW5kCit2ZXJ0aWNhbCBjaHJvbWEgcmVzb2x1dGlvbiwgYWxzbyBrbm93biBhcyBZVVYgNDoyOjA8L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPlRoZXNlIGFyZSBwbGFuYXIgZm9ybWF0cywgYXMgb3Bwb3NlZCB0byBhIHBhY2tlZCBmb3JtYXQuCitUaGUgdGhyZWUgY29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGludG8gdGhyZWUgc3ViLSBpbWFnZXMgb3IgcGxhbmVzLgorVGhlIFkgcGxhbmUgaXMgZmlyc3QuIFRoZSBZIHBsYW5lIGhhcyBvbmUgYnl0ZSBwZXIgcGl4ZWwuIEZvcgorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVlU0MjA8L2NvbnN0YW50PiwgdGhlIENyIHBsYW5lIGltbWVkaWF0ZWx5Citmb2xsb3dzIHRoZSBZIHBsYW5lIGluIG1lbW9yeS4gVGhlIENyIHBsYW5lIGlzIGhhbGYgdGhlIHdpZHRoIGFuZCBoYWxmCit0aGUgaGVpZ2h0IG9mIHRoZSBZIHBsYW5lIChhbmQgb2YgdGhlIGltYWdlKS4gRWFjaCBDciBiZWxvbmdzIHRvIGZvdXIKK3BpeGVscywgYSB0d28tYnktdHdvIHNxdWFyZSBvZiB0aGUgaW1hZ2UuIEZvciBleGFtcGxlLAorQ3I8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD4gYmVsb25ncyB0byBZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD4sCitZJzxzdWJzY3JpcHQ+MDE8L3N1YnNjcmlwdD4sIFknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PiwgYW5kCitZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD4uIEZvbGxvd2luZyB0aGUgQ3IgcGxhbmUgaXMgdGhlIENiIHBsYW5lLAoranVzdCBsaWtlIHRoZSBDciBwbGFuZS4gPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjA8L2NvbnN0YW50PiBpcwordGhlIHNhbWUgZXhjZXB0IHRoZSBDYiBwbGFuZSBjb21lcyBmaXJzdCwgdGhlbiB0aGUgQ3IgcGxhbmUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUgQ3IKK2FuZCBDYiBwbGFuZXMgaGF2ZSBoYWxmIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIHRoZWlyIHJvd3MuIEluIG90aGVyCit3b3JkcywgdHdvIEN4IHJvd3MgKGluY2x1ZGluZyBwYWRkaW5nKSBpcyBleGFjdGx5IGFzIGxvbmcgYXMgb25lIFkgcm93CisoaW5jbHVkaW5nIHBhZGRpbmcpLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVZVNDIwPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjUiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7NDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzE2OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzE4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIwOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzIyOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCisJICA8Zm9ybWFscGFyYT4KKwkgICAgPHRpdGxlPkNvbG9yIFNhbXBsZSBMb2NhdGlvbi48L3RpdGxlPgorCSAgICA8cGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjciIGFsaWduPSJjZW50ZXIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT4zPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjA8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkJPC9pbmZvcm1hbHRhYmxlPgorCSAgICAgIDwvcGFyYT4KKwkgIDwvZm9ybWFscGFyYT4KKwk8L2V4YW1wbGU+CisgICAgICA8L3JlZnNlY3QxPgorICAgIDwvcmVmZW50cnk+CisKKyAgPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJwaXhmbXQuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMnAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDIycC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0OGJkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMnAueG1sCkBAIC0wLDAgKzEsMTYxIEBACisgICAgPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtWVVWNDIyUCI+CisgICAgICA8cmVmbWV0YT4KKwk8cmVmZW50cnl0aXRsZT5WNEwyX1BJWF9GTVRfWVVWNDIyUCAoJzQyMlAnKTwvcmVmZW50cnl0aXRsZT4KKwkmbWFudm9sOworICAgICAgPC9yZWZtZXRhPgorICAgICAgPHJlZm5hbWVkaXY+CisJPHJlZm5hbWU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVY0MjJQPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZnB1cnBvc2U+Rm9ybWF0IHdpdGggJmZyYWMxMjsgaG9yaXpvbnRhbCBjaHJvbWEgcmVzb2x1dGlvbiwKK2Fsc28ga25vd24gYXMgWVVWIDQ6MjoyLiBQbGFuYXIgbGF5b3V0IGFzIG9wcG9zZWQgdG8KKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+PC9yZWZwdXJwb3NlPgorICAgICAgPC9yZWZuYW1lZGl2PgorICAgICAgPHJlZnNlY3QxPgorCTx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKwk8cGFyYT5UaGlzIGZvcm1hdCBpcyBub3QgY29tbW9ubHkgdXNlZC4gVGhpcyBpcyBhIHBsYW5hcgordmVyc2lvbiBvZiB0aGUgWVVZViBmb3JtYXQuIFRoZSB0aHJlZSBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgaW50bwordGhyZWUgc3ViLWltYWdlcyBvciBwbGFuZXMuIFRoZSBZIHBsYW5lIGlzIGZpcnN0LiBUaGUgWSBwbGFuZSBoYXMgb25lCitieXRlIHBlciBwaXhlbC4gVGhlIENiIHBsYW5lIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIFkgcGxhbmUgaW4KK21lbW9yeS4gVGhlIENiIHBsYW5lIGlzIGhhbGYgdGhlIHdpZHRoIG9mIHRoZSBZIHBsYW5lIChhbmQgb2YgdGhlCitpbWFnZSkuIEVhY2ggQ2IgYmVsb25ncyB0byB0d28gcGl4ZWxzLiBGb3IgZXhhbXBsZSwKK0NiPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+IGJlbG9uZ3MgdG8gWSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+LAorWSc8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+LiBGb2xsb3dpbmcgdGhlIENiIHBsYW5lIGlzIHRoZSBDciBwbGFuZSwKK2p1c3QgbGlrZSB0aGUgQ2IgcGxhbmUuPC9wYXJhPgorCisJPHBhcmE+SWYgdGhlIFkgcGxhbmUgaGFzIHBhZCBieXRlcyBhZnRlciBlYWNoIHJvdywgdGhlbiB0aGUgQ3IKK2FuZCBDYiBwbGFuZXMgaGF2ZSBoYWxmIGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIHRoZWlyIHJvd3MuIEluIG90aGVyCit3b3JkcywgdHdvIEN4IHJvd3MgKGluY2x1ZGluZyBwYWRkaW5nKSBpcyBleGFjdGx5IGFzIGxvbmcgYXMgb25lIFkgcm93CisoaW5jbHVkaW5nIHBhZGRpbmcpLjwvcGFyYT4KKworCTxleGFtcGxlPgorCSAgPHRpdGxlPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVWNDIyUDwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCSAgICA8cGFyYT5FYWNoIGNlbGwgaXMgb25lIGJ5dGUuCisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI1IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMjwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTI6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyMjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNjo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyODo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDszMDo8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L3Rncm91cD4KKwkJPC9pbmZvcm1hbHRhYmxlPgorCSAgICAgIDwvcGFyYT4KKwkgIDwvZm9ybWFscGFyYT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5Db2xvciBTYW1wbGUgTG9jYXRpb24uPC90aXRsZT4KKwkgICAgPHBhcmE+CisJCTxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkJPHRncm91cCBjb2xzPSI3IiBhbGlnbj0iY2VudGVyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT48ZW50cnk+PC9lbnRyeT48ZW50cnk+MzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MTwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisJPC9leGFtcGxlPgorICAgICAgPC9yZWZzZWN0MT4KKyAgICA8L3JlZmVudHJ5PgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAicGl4Zm10LnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKyAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXl2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1eXYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjJmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXl2LnhtbApAQCAtMCwwICsxLDEyOCBAQAorICAgIDxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVlVWVYiPgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1lVWVYgKCdZVVlWJyk8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZwdXJwb3NlPlBhY2tlZCBmb3JtYXQgd2l0aCAmZnJhYzEyOyBob3Jpem9udGFsIGNocm9tYQorcmVzb2x1dGlvbiwgYWxzbyBrbm93biBhcyBZVVYgNDoyOjI8L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPkluIHRoaXMgZm9ybWF0IGVhY2ggZm91ciBieXRlcyBpcyB0d28gcGl4ZWxzLiBFYWNoIGZvdXIKK2J5dGVzIGlzIHR3byBZJ3MsIGEgQ2IgYW5kIGEgQ3IuIEVhY2ggWSBnb2VzIHRvIG9uZSBvZiB0aGUgcGl4ZWxzLCBhbmQKK3RoZSBDYiBhbmQgQ3IgYmVsb25nIHRvIGJvdGggcGl4ZWxzLiBBcyB5b3UgY2FuIHNlZSwgdGhlIENyIGFuZCBDYgorY29tcG9uZW50cyBoYXZlIGhhbGYgdGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBvZiB0aGUgWSBjb21wb25lbnQuCis8Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lVWVYgPC9jb25zdGFudD4gaXMga25vd24gaW4gdGhlIFdpbmRvd3MKK2Vudmlyb25tZW50IGFzIFlVWTIuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVVlWPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXZ5dS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dnl1LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQxN2FlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXZ5dS54bWwKQEAgLTAsMCArMSwxMjggQEAKKyAgICA8cmVmZW50cnkgaWQ9IlY0TDItUElYLUZNVC1ZVllVIj4KKyAgICAgIDxyZWZtZXRhPgorCTxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9ZVllVICgnWVZZVScpPC9yZWZlbnRyeXRpdGxlPgorCSZtYW52b2w7CisgICAgICA8L3JlZm1ldGE+CisgICAgICA8cmVmbmFtZWRpdj4KKwk8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lWWVU8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT5WYXJpYXRpb24gb2YKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IHdpdGggZGlmZmVyZW50IG9yZGVyIG9mIHNhbXBsZXMKK2luIG1lbW9yeTwvcmVmcHVycG9zZT4KKyAgICAgIDwvcmVmbmFtZWRpdj4KKyAgICAgIDxyZWZzZWN0MT4KKwk8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisJPHBhcmE+SW4gdGhpcyBmb3JtYXQgZWFjaCBmb3VyIGJ5dGVzIGlzIHR3byBwaXhlbHMuIEVhY2ggZm91cgorYnl0ZXMgaXMgdHdvIFkncywgYSBDYiBhbmQgYSBDci4gRWFjaCBZIGdvZXMgdG8gb25lIG9mIHRoZSBwaXhlbHMsIGFuZAordGhlIENiIGFuZCBDciBiZWxvbmcgdG8gYm90aCBwaXhlbHMuIEFzIHlvdSBjYW4gc2VlLCB0aGUgQ3IgYW5kIENiCitjb21wb25lbnRzIGhhdmUgaGFsZiB0aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHRoZSBZCitjb21wb25lbnQuPC9wYXJhPgorCisJPGV4YW1wbGU+CisJICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZVllVPC9jb25zdGFudD4gNCAmdGltZXM7IDQKK3BpeGVsIGltYWdlPC90aXRsZT4KKworCSAgPGZvcm1hbHBhcmE+CisJICAgIDx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJICAgIDxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCQk8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCQkgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjAwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MDA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAyPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNyPHN1YnNjcmlwdD4wMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDM8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q2I8c3Vic2NyaXB0PjAxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4yMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjIxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MjQ6PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DcjxzdWJzY3JpcHQ+MzA8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNiPHN1YnNjcmlwdD4zMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzI8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Q3I8c3Vic2NyaXB0PjMxPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DYjxzdWJzY3JpcHQ+MzE8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkgICAgICA8L3BhcmE+CisJICA8L2Zvcm1hbHBhcmE+CisKKwkgIDxmb3JtYWxwYXJhPgorCSAgICA8dGl0bGU+Q29sb3IgU2FtcGxlIExvY2F0aW9uLjwvdGl0bGU+CisJICAgIDxwYXJhPgorCQk8aW5mb3JtYWx0YWJsZSBmcmFtZT0ibm9uZSI+CisJCTx0Z3JvdXAgY29scz0iNyIgYWxpZ249ImNlbnRlciI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjE8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+MjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MDwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PjE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Plk8L2VudHJ5PjxlbnRyeT5DPC9lbnRyeT48ZW50cnk+WTwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+MzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZPC9lbnRyeT48ZW50cnk+QzwvZW50cnk+PGVudHJ5Plk8L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorCQkgICAgICA8ZW50cnk+WTwvZW50cnk+PGVudHJ5PkM8L2VudHJ5PjxlbnRyeT5ZPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvdGdyb3VwPgorCQk8L2luZm9ybWFsdGFibGU+CisJICAgICAgPC9wYXJhPgorCSAgPC9mb3JtYWxwYXJhPgorCTwvZXhhbXBsZT4KKyAgICAgIDwvcmVmc2VjdDE+CisgICAgPC9yZWZlbnRyeT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInBpeGZtdC5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzk2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwKQEAgLTAsMCArMSw4MDEgQEAKKyAgPHRpdGxlPkltYWdlIEZvcm1hdHM8L3RpdGxlPgorCisgIDxwYXJhPlRoZSBWNEwyIEFQSSB3YXMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBkZXZpY2VzIGV4Y2hhbmdpbmcKK2ltYWdlIGRhdGEgd2l0aCBhcHBsaWNhdGlvbnMuIFRoZQorPHN0cnVjdG5hbWU+djRsMl9waXhfZm9ybWF0PC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgZm9ybWF0CithbmQgbGF5b3V0IG9mIGFuIGltYWdlIGluIG1lbW9yeS4gSW1hZ2UgZm9ybWF0cyBhcmUgbmVnb3RpYXRlZCB3aXRoCit0aGUgJlZJRElPQy1TLUZNVDsgaW9jdGwuIChUaGUgZXhwbGFuYXRpb25zIGhlcmUgZm9jdXMgb24gdmlkZW8KK2NhcHR1cmluZyBhbmQgb3V0cHV0LCBmb3Igb3ZlcmxheSBmcmFtZSBidWZmZXIgZm9ybWF0cyBzZWUgYWxzbworJlZJRElPQy1HLUZCVUY7Lik8L3BhcmE+CisKKyAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXBpeC1mb3JtYXQiPgorICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9waXhfZm9ybWF0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIzIj4KKyAgICAgICZjcy1zdHI7CisgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCTxyb3c+CisJICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDxlbnRyeT5JbWFnZSB3aWR0aCBpbiBwaXhlbHMuPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgPGVudHJ5PkltYWdlIGhlaWdodCBpbiBwaXhlbHMuPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+QXBwbGljYXRpb25zIHNldCB0aGVzZSBmaWVsZHMgdG8KK3JlcXVlc3QgYW4gaW1hZ2Ugc2l6ZSwgZHJpdmVycyByZXR1cm4gdGhlIGNsb3Nlc3QgcG9zc2libGUgdmFsdWVzLiBJbgorY2FzZSBvZiBwbGFuYXIgZm9ybWF0cyB0aGUgPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD4gYXBwbGllcyB0byB0aGUgbGFyZ2VzdCBwbGFuZS4gVG8KK2F2b2lkIGFtYmlndWl0aWVzIGRyaXZlcnMgbXVzdCByZXR1cm4gdmFsdWVzIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZQorb2YgdGhlIHNjYWxlIGZhY3RvciBvZiBhbnkgc21hbGxlciBwbGFuZXMuIEZvciBleGFtcGxlIHdoZW4gdGhlIGltYWdlCitmb3JtYXQgaXMgWVVWIDQ6MjowLCA8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5oZWlnaHQ8L3N0cnVjdGZpZWxkPiBtdXN0IGJlIG11bHRpcGxlcyBvZiB0d28uPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+cGl4ZWxmb3JtYXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8ZW50cnk+VGhlIHBpeGVsIGZvcm1hdCBvciB0eXBlIG9mIGNvbXByZXNzaW9uLCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi4gVGhpcyBpcyBhIGxpdHRsZSBlbmRpYW4gPGxpbmsKK2xpbmtlbmQ9InY0bDItZm91cmNjIj5mb3VyIGNoYXJhY3RlciBjb2RlPC9saW5rPi4gVjRMMiBkZWZpbmVzCitzdGFuZGFyZCBSR0IgZm9ybWF0cyBpbiA8eHJlZiBsaW5rZW5kPSJyZ2ItZm9ybWF0cyIgLz4sIFlVViBmb3JtYXRzIGluIDx4cmVmCitsaW5rZW5kPSJ5dXYtZm9ybWF0cyIgLz4sIGFuZCByZXNlcnZlZCBjb2RlcyBpbiA8eHJlZgorbGlua2VuZD0icmVzZXJ2ZWQtZm9ybWF0cyIgLz48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8ZW50cnk+VmlkZW8gaW1hZ2VzIGFyZSB0eXBpY2FsbHkgaW50ZXJsYWNlZC4gQXBwbGljYXRpb25zCitjYW4gcmVxdWVzdCB0byBjYXB0dXJlIG9yIG91dHB1dCBvbmx5IHRoZSB0b3Agb3IgYm90dG9tIGZpZWxkLCBvciBib3RoCitmaWVsZHMgaW50ZXJsYWNlZCBvciBzZXF1ZW50aWFsbHkgc3RvcmVkIGluIG9uZSBidWZmZXIgb3IgYWx0ZXJuYXRpbmcKK2luIHNlcGFyYXRlIGJ1ZmZlcnMuIERyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgZmllbGQgb3JkZXIgc2VsZWN0ZWQuCitGb3IgZGV0YWlscyBzZWUgPHhyZWYgbGlua2VuZD0iZmllbGQtb3JkZXIiIC8+LjwvZW50cnk+CisJPC9yb3c+CisJPHJvdz4KKwkgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICA8ZW50cnk+PHN0cnVjdGZpZWxkPmJ5dGVzcGVybGluZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDxlbnRyeT5EaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHRoZSBsZWZ0bW9zdCBwaXhlbHMgaW4gdHdvCithZGphY2VudCBsaW5lcy48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5Cb3RoIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycworY2FuIHNldCB0aGlzIGZpZWxkIHRvIHJlcXVlc3QgcGFkZGluZyBieXRlcyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4KK0RyaXZlcnMgaG93ZXZlciBtYXkgaWdub3JlIHRoZSB2YWx1ZSByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLAorcmV0dXJuaW5nIDxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+IHRpbWVzIGJ5dGVzIHBlciBwaXhlbCBvciBhCitsYXJnZXIgdmFsdWUgcmVxdWlyZWQgYnkgdGhlIGhhcmR3YXJlLiBUaGF0IGltcGxpZXMgYXBwbGljYXRpb25zIGNhbgoranVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvIHRvIGdldCBhIHJlYXNvbmFibGUKK2RlZmF1bHQuPC9wYXJhPjxwYXJhPlZpZGVvIGhhcmR3YXJlIG1heSBhY2Nlc3MgcGFkZGluZyBieXRlcywKK3RoZXJlZm9yZSB0aGV5IG11c3QgcmVzaWRlIGluIGFjY2Vzc2libGUgbWVtb3J5LiBDb25zaWRlciBjYXNlcyB3aGVyZQorcGFkZGluZyBieXRlcyBhZnRlciB0aGUgbGFzdCBsaW5lIG9mIGFuIGltYWdlIGNyb3NzIGEgc3lzdGVtIHBhZ2UKK2JvdW5kYXJ5LiBJbnB1dCBkZXZpY2VzIG1heSB3cml0ZSBwYWRkaW5nIGJ5dGVzLCB0aGUgdmFsdWUgaXMKK3VuZGVmaW5lZC4gT3V0cHV0IGRldmljZXMgaWdub3JlIHRoZSBjb250ZW50cyBvZiBwYWRkaW5nCitieXRlcy48L3BhcmE+PHBhcmE+V2hlbiB0aGUgaW1hZ2UgZm9ybWF0IGlzIHBsYW5hciB0aGUKKzxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPiB2YWx1ZSBhcHBsaWVzIHRvIHRoZSBsYXJnZXN0CitwbGFuZSBhbmQgaXMgZGl2aWRlZCBieSB0aGUgc2FtZSBmYWN0b3IgYXMgdGhlCis8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPiBmaWVsZCBmb3IgYW55IHNtYWxsZXIgcGxhbmVzLiBGb3IKK2V4YW1wbGUgdGhlIENiIGFuZCBDciBwbGFuZXMgb2YgYSBZVVYgNDoyOjAgaW1hZ2UgaGF2ZSBoYWxmIGFzIG1hbnkKK3BhZGRpbmcgYnl0ZXMgZm9sbG93aW5nIGVhY2ggbGluZSBhcyB0aGUgWSBwbGFuZS4gVG8gYXZvaWQgYW1iaWd1aXRpZXMKK2RyaXZlcnMgbXVzdCByZXR1cm4gYSA8c3RydWN0ZmllbGQ+Ynl0ZXNwZXJsaW5lPC9zdHJ1Y3RmaWVsZD4gdmFsdWUKK3JvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZSBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvcGFyYT48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zaXplaW1hZ2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8ZW50cnk+U2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVyIHRvIGhvbGQgYSBjb21wbGV0ZSBpbWFnZSwKK3NldCBieSB0aGUgZHJpdmVyLiBVc3VhbGx5IHRoaXMgaXMKKzxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPiB0aW1lcworPHN0cnVjdGZpZWxkPmhlaWdodDwvc3RydWN0ZmllbGQ+LiBXaGVuIHRoZSBpbWFnZSBjb25zaXN0cyBvZiB2YXJpYWJsZQorbGVuZ3RoIGNvbXByZXNzZWQgZGF0YSB0aGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0bworaG9sZCBhbiBpbWFnZS48L2VudHJ5PgorCTwvcm93PgorCTxyb3c+CisJICA8ZW50cnk+JnY0bDItY29sb3JzcGFjZTs8L2VudHJ5PgorCSAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jb2xvcnNwYWNlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgPGVudHJ5PlRoaXMgaW5mb3JtYXRpb24gc3VwcGxlbWVudHMgdGhlCis8c3RydWN0ZmllbGQ+cGl4ZWxmb3JtYXQ8L3N0cnVjdGZpZWxkPiBhbmQgbXVzdCBiZSBzZXQgYnkgdGhlIGRyaXZlciwKK3NlZSA8eHJlZiBsaW5rZW5kPSJjb2xvcnNwYWNlcyIgLz4uPC9lbnRyeT4KKwk8L3Jvdz4KKwk8cm93PgorCSAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgIDxlbnRyeT48c3RydWN0ZmllbGQ+cHJpdjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgIDxlbnRyeT5SZXNlcnZlZCBmb3IgY3VzdG9tIChkcml2ZXIgZGVmaW5lZCkgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gYWJvdXQgZm9ybWF0cy4gV2hlbiBub3QgdXNlZCBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgbXVzdAorc2V0IHRoaXMgZmllbGQgdG8gemVyby48L2VudHJ5PgorCTwvcm93PgorICAgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgPC90YWJsZT4KKworICA8c2VjdGlvbj4KKyAgICA8dGl0bGU+U3RhbmRhcmQgSW1hZ2UgRm9ybWF0czwvdGl0bGU+CisKKyAgICA8cGFyYT5JbiBvcmRlciB0byBleGNoYW5nZSBpbWFnZXMgYmV0d2VlbiBkcml2ZXJzIGFuZAorYXBwbGljYXRpb25zLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBzdGFuZGFyZCBpbWFnZSBkYXRhIGZvcm1hdHMKK3doaWNoIGJvdGggc2lkZXMgd2lsbCBpbnRlcnByZXQgdGhlIHNhbWUgd2F5LiBWNEwyIGluY2x1ZGVzIHNldmVyYWwKK3N1Y2ggZm9ybWF0cywgYW5kIHRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBhbiB1bmFtYmlndW91cworc3BlY2lmaWNhdGlvbiBvZiB0aGUgc3RhbmRhcmQgaW1hZ2UgZGF0YSBmb3JtYXRzIGluIFY0TDIuPC9wYXJhPgorCisgICAgPHBhcmE+VjRMMiBkcml2ZXJzIGFyZSBub3QgbGltaXRlZCB0byB0aGVzZSBmb3JtYXRzLCBob3dldmVyLgorRHJpdmVyLXNwZWNpZmljIGZvcm1hdHMgYXJlIHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UgdGhlIGFwcGxpY2F0aW9uIG1heQorZGVwZW5kIG9uIGEgY29kZWMgdG8gY29udmVydCBpbWFnZXMgdG8gb25lIG9mIHRoZSBzdGFuZGFyZCBmb3JtYXRzCit3aGVuIG5lZWRlZC4gQnV0IHRoZSBkYXRhIGNhbiBzdGlsbCBiZSBzdG9yZWQgYW5kIHJldHJpZXZlZCBpbiB0aGUKK3Byb3ByaWV0YXJ5IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGEgZGV2aWNlIG1heSBzdXBwb3J0IGEgcHJvcHJpZXRhcnkKK2NvbXByZXNzZWQgZm9ybWF0LiBBcHBsaWNhdGlvbnMgY2FuIHN0aWxsIGNhcHR1cmUgYW5kIHNhdmUgdGhlIGRhdGEgaW4KK3RoZSBjb21wcmVzc2VkIGZvcm1hdCwgc2F2aW5nIG11Y2ggZGlzayBzcGFjZSwgYW5kIGxhdGVyIHVzZSBhIGNvZGVjCit0byBjb252ZXJ0IHRoZSBpbWFnZXMgdG8gdGhlIFggV2luZG93cyBzY3JlZW4gZm9ybWF0IHdoZW4gdGhlIHZpZGVvIGlzCit0byBiZSBkaXNwbGF5ZWQuPC9wYXJhPgorCisgICAgPHBhcmE+RXZlbiBzbywgdWx0aW1hdGVseSwgc29tZSBzdGFuZGFyZCBmb3JtYXRzIGFyZSBuZWVkZWQsIHNvCit0aGUgVjRMMiBzcGVjaWZpY2F0aW9uIHdvdWxkIG5vdCBiZSBjb21wbGV0ZSB3aXRob3V0IHdlbGwtZGVmaW5lZAorc3RhbmRhcmQgZm9ybWF0cy48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgVjRMMiBzdGFuZGFyZCBmb3JtYXRzIGFyZSBtYWlubHkgdW5jb21wcmVzc2VkIGZvcm1hdHMuIFRoZQorcGl4ZWxzIGFyZSBhbHdheXMgYXJyYW5nZWQgaW4gbWVtb3J5IGZyb20gbGVmdCB0byByaWdodCwgYW5kIGZyb20gdG9wCit0byBib3R0b20uIFRoZSBmaXJzdCBieXRlIG9mIGRhdGEgaW4gdGhlIGltYWdlIGJ1ZmZlciBpcyBhbHdheXMgZm9yCit0aGUgbGVmdG1vc3QgcGl4ZWwgb2YgdGhlIHRvcG1vc3Qgcm93LiBGb2xsb3dpbmcgdGhhdCBpcyB0aGUgcGl4ZWwKK2ltbWVkaWF0ZWx5IHRvIGl0cyByaWdodCwgYW5kIHNvIG9uIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRvcCByb3cgb2YKK3BpeGVscy4gRm9sbG93aW5nIHRoZSByaWdodG1vc3QgcGl4ZWwgb2YgdGhlIHJvdyB0aGVyZSBtYXkgYmUgemVybyBvcgorbW9yZSBieXRlcyBvZiBwYWRkaW5nIHRvIGd1YXJhbnRlZSB0aGF0IGVhY2ggcm93IG9mIHBpeGVsIGRhdGEgaGFzIGEKK2NlcnRhaW4gYWxpZ25tZW50LiBGb2xsb3dpbmcgdGhlIHBhZCBieXRlcywgaWYgYW55LCBpcyBkYXRhIGZvciB0aGUKK2xlZnRtb3N0IHBpeGVsIG9mIHRoZSBzZWNvbmQgcm93IGZyb20gdGhlIHRvcCwgYW5kIHNvIG9uLiBUaGUgbGFzdCByb3cKK2hhcyBqdXN0IGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIGl0IGFzIHRoZSBvdGhlciByb3dzLjwvcGFyYT4KKworICAgIDxwYXJhPkluIFY0TDIgZWFjaCBmb3JtYXQgaGFzIGFuIGlkZW50aWZpZXIgd2hpY2ggbG9va3MgbGlrZQorPGNvbnN0YW50PlBJWF9GTVRfWFhYPC9jb25zdGFudD4sIGRlZmluZWQgaW4gdGhlIDxsaW5rCitsaW5rZW5kPSJ2aWRlb2RldiI+dmlkZW9kZXYuaDwvbGluaz4gaGVhZGVyIGZpbGUuIFRoZXNlIGlkZW50aWZpZXJzCityZXByZXNlbnQgPGxpbmsgbGlua2VuZD0idjRsMi1mb3VyY2MiPmZvdXIgY2hhcmFjdGVyIGNvZGVzPC9saW5rPgord2hpY2ggYXJlIGFsc28gbGlzdGVkIGJlbG93LCBob3dldmVyIHRoZXkgYXJlIG5vdCB0aGUgc2FtZSBhcyB0aG9zZQordXNlZCBpbiB0aGUgV2luZG93cyB3b3JsZC48L3BhcmE+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0iY29sb3JzcGFjZXMiPgorICAgIDx0aXRsZT5Db2xvcnNwYWNlczwvdGl0bGU+CisKKyAgICA8cGFyYT5baW50cm9dPC9wYXJhPgorCisgICAgPCEtLSBTZWUgcHJvcG9zYWwgYnkgQmlsbHkgQmlnZ3MsIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbQorb24gMTEgT2N0IDIwMDIsIHN1YmplY3Q6ICJSZTogW1Y0TF0gUmU6IHY0bDIgYXBpIiwgYW5kCitodHRwOi8vdmVrdG9yLnRoZW9yZW0uY2EvZ3JhcGhpY3MveWNiY3IvIGFuZAoraHR0cDovL3d3dy5wb3ludG9uLmNvbS9ub3Rlcy9jb2xvdXJfYW5kX2dhbW1hL0NvbG9yRkFRLmh0bWwgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgIDx2YXJpYWJsZWxpc3Q+CisJPHZhcmxpc3RlbnRyeT4KKwkgIDx0ZXJtPkdhbW1hIENvcnJlY3Rpb248L3Rlcm0+CisJICA8bGlzdGl0ZW0+CisJICAgIDxwYXJhPlt0byBkb108L3BhcmE+CisJICAgIDxwYXJhPkUnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+ID0gZihSKTwvcGFyYT4KKwkgICAgPHBhcmE+RSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4gPSBmKEcpPC9wYXJhPgorCSAgICA8cGFyYT5FJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiA9IGYoQik8L3BhcmE+CisJICA8L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJICA8dGVybT5Db25zdHJ1Y3Rpb24gb2YgbHVtaW5hbmNlIGFuZCBjb2xvci1kaWZmZXJlbmNlCitzaWduYWxzPC90ZXJtPgorCSAgPGxpc3RpdGVtPgorCSAgICA8cGFyYT5bdG8gZG9dPC9wYXJhPgorCSAgICA8cGFyYT5FJzxzdWJzY3JpcHQ+WTwvc3Vic2NyaXB0PiA9CitDb2VmZjxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiBFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyBDb2VmZjxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PiBFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyBDb2VmZjxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiBFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvcGFyYT4KKwkgICAgPHBhcmE+KEUnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+IC0gRSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4pID0gRSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKy0gQ29lZmY8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4gRSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKy0gQ29lZmY8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4gRSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4KKy0gQ29lZmY8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gRSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L3BhcmE+CisJICAgIDxwYXJhPihFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiAtIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+KSA9IEUnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+CistIENvZWZmPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+IEUnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+CistIENvZWZmPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+IEUnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CistIENvZWZmPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+IEUnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9wYXJhPgorCSAgPC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCSAgPHRlcm0+UmUtbm9ybWFsaXplZCBjb2xvci1kaWZmZXJlbmNlIHNpZ25hbHM8L3Rlcm0+CisJICA8bGlzdGl0ZW0+CisJICAgIDxwYXJhPlRoZSBjb2xvci1kaWZmZXJlbmNlIHNpZ25hbHMgYXJlIHNjYWxlZCBiYWNrIHRvIHVuaXR5CityYW5nZSBbLTAuNTsrMC41XTo8L3BhcmE+CisJICAgIDxwYXJhPks8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gPSAwLjUgLyAoMSAtIENvZWZmPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+KTwvcGFyYT4KKwkgICAgPHBhcmE+SzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiA9IDAuNSAvICgxIC0gQ29lZmY8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4pPC9wYXJhPgorCSAgICA8cGFyYT5QPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+ID0KK0s8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gKEUnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+IC0gRSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4pID0KKyAgMC41IChDb2VmZjxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiAvIENvZWZmPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+KSBFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyAwLjUgKENvZWZmPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+IC8gQ29lZmY8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4pIEUnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrIDAuNSBFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvcGFyYT4KKwkgICAgPHBhcmE+UDxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiA9CitLPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+IChFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiAtIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+KSA9CisgIDAuNSBFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyAwLjUgKENvZWZmPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+IC8gQ29lZmY8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4pIEUnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrIDAuNSAoQ29lZmY8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gLyBDb2VmZjxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PikgRSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L3BhcmE+CisJICA8L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJICA8dGVybT5RdWFudGl6YXRpb248L3Rlcm0+CisJICA8bGlzdGl0ZW0+CisJICAgIDxwYXJhPlt0byBkb108L3BhcmE+CisJICAgIDxwYXJhPlknID0gKEx1bS4gTGV2ZWxzIC0gMSkgJm1pZGRvdDsgRSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4gKyBMdW0uIE9mZnNldDwvcGFyYT4KKwkgICAgPHBhcmE+QzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PiA9IChDaHJvbS4gTGV2ZWxzIC0gMSkKKyZtaWRkb3Q7IFA8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD4gKyBDaHJvbS4gT2Zmc2V0PC9wYXJhPgorCSAgICA8cGFyYT5DPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+ID0gKENocm9tLiBMZXZlbHMgLSAxKQorJm1pZGRvdDsgUDxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PiArIENocm9tLiBPZmZzZXQ8L3BhcmE+CisJICAgIDxwYXJhPlJvdW5kaW5nIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYW5kIGNsYW1waW5nIHRvIHRoZSByYW5nZQorWzA7MjU1XSBmaW5hbGx5IHlpZWxkcyB0aGUgZGlnaXRhbCBjb2xvciBjb21wb25lbnRzIFknQ2JDcgorc3RvcmVkIGluIFlVViBpbWFnZXMuPC9wYXJhPgorCSAgPC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxleGFtcGxlPgorICAgICAgPHRpdGxlPklUVS1SIFJlYy4gQlQuNjAxIGNvbG9yIGNvbnZlcnNpb248L3RpdGxlPgorCisgICAgICA8cGFyYT5Gb3J3YXJkIFRyYW5zZm9ybWF0aW9uPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitpbnQgRVIsIEVHLCBFQjsgICAgICAgICAvKiBnYW1tYSBjb3JyZWN0ZWQgUkdCIGlucHV0IFswOzI1NV0gKi8KK2ludCBZMSwgQ2IsIENyOyAgICAgICAgIC8qIG91dHB1dCBbMDsyNTVdICovCisKK2RvdWJsZSByLCBnLCBiOyAgICAgICAgIC8qIHRlbXBvcmFyaWVzICovCitkb3VibGUgeTEsIHBiLCBwcjsKKworaW50CitjbGFtcCAoZG91YmxlIHgpCit7CisJaW50IHIgPSB4OyAgICAgIC8qIHJvdW5kIHRvIG5lYXJlc3QgKi8KKworCWlmIChyICZsdDsgMCkgICAgICAgICByZXR1cm4gMDsKKwllbHNlIGlmIChyICZndDsgMjU1KSAgcmV0dXJuIDI1NTsKKwllbHNlICAgICAgICAgICAgICAgcmV0dXJuIHI7Cit9CisKK3IgPSBFUiAvIDI1NS4wOworZyA9IEVHIC8gMjU1LjA7CitiID0gRUIgLyAyNTUuMDsKKworeTEgID0gIDAuMjk5ICAqIHIgKyAwLjU4NyAqIGcgKyAwLjExNCAgKiBiOworcGIgID0gLTAuMTY5ICAqIHIgLSAwLjMzMSAqIGcgKyAwLjUgICAgKiBiOworcHIgID0gIDAuNSAgICAqIHIgLSAwLjQxOSAqIGcgLSAwLjA4MSAgKiBiOworCitZMSA9IGNsYW1wICgyMTkgKiB5MSArIDE2KTsKK0NiID0gY2xhbXAgKDIyNCAqIHBiICsgMTI4KTsKK0NyID0gY2xhbXAgKDIyNCAqIHByICsgMTI4KTsKKworLyogb3Igc2hvcnRlciAqLworCit5MSA9IDAuMjk5ICogRVIgKyAwLjU4NyAqIEVHICsgMC4xMTQgKiBFQjsKKworWTEgPSBjbGFtcCAoICgyMTkgLyAyNTUuMCkgICAgICAgICAgICAgICAgICAgICogICAgICAgeTEgICsgMTYpOworQ2IgPSBjbGFtcCAoKCgyMjQgLyAyNTUuMCkgLyAoMiAtIDIgKiAwLjExNCkpICogKEVCIC0geTEpICsgMTI4KTsKK0NyID0gY2xhbXAgKCgoMjI0IC8gMjU1LjApIC8gKDIgLSAyICogMC4yOTkpKSAqIChFUiAtIHkxKSArIDEyOCk7CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT5JbnZlcnNlIFRyYW5zZm9ybWF0aW9uPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitpbnQgWTEsIENiLCBDcjsgICAgICAgICAvKiBnYW1tYSBwcmUtY29ycmVjdGVkIGlucHV0IFswOzI1NV0gKi8KK2ludCBFUiwgRUcsIEVCOyAgICAgICAgIC8qIG91dHB1dCBbMDsyNTVdICovCisKK2RvdWJsZSByLCBnLCBiOyAgICAgICAgIC8qIHRlbXBvcmFyaWVzICovCitkb3VibGUgeTEsIHBiLCBwcjsKKworaW50CitjbGFtcCAoZG91YmxlIHgpCit7CisJaW50IHIgPSB4OyAgICAgIC8qIHJvdW5kIHRvIG5lYXJlc3QgKi8KKworCWlmIChyICZsdDsgMCkgICAgICAgICByZXR1cm4gMDsKKwllbHNlIGlmIChyICZndDsgMjU1KSAgcmV0dXJuIDI1NTsKKwllbHNlICAgICAgICAgICAgICAgcmV0dXJuIHI7Cit9CisKK3kxID0gKDI1NSAvIDIxOS4wKSAqIChZMSAtIDE2KTsKK3BiID0gKDI1NSAvIDIyNC4wKSAqIChDYiAtIDEyOCk7CitwciA9ICgyNTUgLyAyMjQuMCkgKiAoQ3IgLSAxMjgpOworCityID0gMS4wICogeTEgKyAwICAgICAqIHBiICsgMS40MDIgKiBwcjsKK2cgPSAxLjAgKiB5MSAtIDAuMzQ0ICogcGIgLSAwLjcxNCAqIHByOworYiA9IDEuMCAqIHkxICsgMS43NzIgKiBwYiArIDAgICAgICogcHI7CisKK0VSID0gY2xhbXAgKHIgKiAyNTUpOyAvKiBbb2s/IG9uZSBzaG91bGQgcHJvYi4gbGltaXQgeTEscGIscHJdICovCitFRyA9IGNsYW1wIChnICogMjU1KTsKK0VCID0gY2xhbXAgKGIgKiAyNTUpOworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBpZD0idjRsMi1jb2xvcnNwYWNlIiBvcmllbnQ9ImxhbmQiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl9jb2xvcnNwYWNlPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMTEiIGFsaWduPSJjZW50ZXIiPgorCTxjb2xzcGVjIGFsaWduPSJsZWZ0IiAvPgorCTxjb2xzcGVjIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iY3IiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iY2ciIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iY2IiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0id3AiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iZ2MiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0ibHVtIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9InF5IiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9InFjIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImNyIiBuYW1lZW5kPSJjYiIgc3Bhbm5hbWU9ImNocm9tIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9InF5IiBuYW1lZW5kPSJxYyIgc3Bhbm5hbWU9InF1YW50IiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9Imx1bSIgbmFtZWVuZD0icWMiIHNwYW5uYW1lPSJzcGFtIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+VmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnkgbW9yZXJvd3M9IjEiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJjaHJvbSI+Q2hyb21hdGljaXRpZXM8Zm9vdG5vdGU+CisJCTxwYXJhPlRoZSBjb29yZGluYXRlcyBvZiB0aGUgY29sb3IgcHJpbWFyaWVzIGFyZQorZ2l2ZW4gaW4gdGhlIENJRSBzeXN0ZW0gKDE5MzEpPC9wYXJhPgorCSAgICAgIDwvZm9vdG5vdGU+PC9lbnRyeT4KKwkgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj5XaGl0ZSBQb2ludDwvZW50cnk+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+R2FtbWEgQ29ycmVjdGlvbjwvZW50cnk+CisJICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+THVtaW5hbmNlIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJxdWFudCI+UXVhbnRpemF0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlJlZDwvZW50cnk+CisJICAgIDxlbnRyeT5HcmVlbjwvZW50cnk+CisJICAgIDxlbnRyeT5CbHVlPC9lbnRyeT4KKwkgICAgPGVudHJ5PlknPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNiLCBDcjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME08L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5UU0MvUEFMIGFjY29yZGluZyB0byA8eHJlZiBsaW5rZW5kPSJzbXB0ZTE3MG0iIC8+LAorPHhyZWYgbGlua2VuZD0iaXR1NjAxIiAvPjwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuNjMwLCB5Jm5ic3A7PSZuYnNwOzAuMzQwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMTAsIHkmbmJzcDs9Jm5ic3A7MC41OTU8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjE1NSwgeSZuYnNwOz0mbmJzcDswLjA3MDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMzEyNywgeSZuYnNwOz0mbmJzcDswLjMyOTAsCisJICAgIElsbHVtaW5hbnQgRDxzdWJzY3JpcHQ+NjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+RScgPSA0LjUmbmJzcDtJJm5ic3A7Zm9yJm5ic3A7SSZuYnNwOyZsZTswLjAxOCwKKzEuMDk5Jm5ic3A7STxzdXBlcnNjcmlwdD4wLjQ1PC9zdXBlcnNjcmlwdD4mbmJzcDstJm5ic3A7MC4wOTkmbmJzcDtmb3ImbmJzcDswLjAxOCZuYnNwOyZsdDsmbmJzcDtJPC9lbnRyeT4KKwkgICAgPGVudHJ5PjAuMjk5Jm5ic3A7RSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKysmbmJzcDswLjU4NyZuYnNwO0UnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC4xMTQmbmJzcDtFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT4yMTkmbmJzcDtFJzxzdWJzY3JpcHQ+WTwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxNjwvZW50cnk+CisJICAgIDxlbnRyeT4yMjQmbmJzcDtQPHN1YnNjcmlwdD5CLFI8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTI4PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NPTE9SU1BBQ0VfU01QVEUyNDBNPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT4xMTI1LUxpbmUgKFVTKSBIRFRWLCBzZWUgPHhyZWYKK2xpbmtlbmQ9InNtcHRlMjQwbSIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjYzMCwgeSZuYnNwOz0mbmJzcDswLjM0MDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMzEwLCB5Jm5ic3A7PSZuYnNwOzAuNTk1PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4xNTUsIHkmbmJzcDs9Jm5ic3A7MC4wNzA8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjMxMjcsIHkmbmJzcDs9Jm5ic3A7MC4zMjkwLAorCSAgICBJbGx1bWluYW50IEQ8c3Vic2NyaXB0PjY1PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkUnID0gNCZuYnNwO0kmbmJzcDtmb3ImbmJzcDtJJm5ic3A7JmxlOzAuMDIyOCwKKzEuMTExNSZuYnNwO0k8c3VwZXJzY3JpcHQ+MC40NTwvc3VwZXJzY3JpcHQ+Jm5ic3A7LSZuYnNwOzAuMTExNSZuYnNwO2ZvciZuYnNwOzAuMDIyOCZuYnNwOyZsdDsmbmJzcDtJPC9lbnRyeT4KKwkgICAgPGVudHJ5PjAuMjEyJm5ic3A7RSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKysmbmJzcDswLjcwMSZuYnNwO0UnPHN1YnNjcmlwdD5HPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC4wODcmbmJzcDtFJzxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT4yMTkmbmJzcDtFJzxzdWJzY3JpcHQ+WTwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxNjwvZW50cnk+CisJICAgIDxlbnRyeT4yMjQmbmJzcDtQPHN1YnNjcmlwdD5CLFI8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTI4PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NPTE9SU1BBQ0VfUkVDNzA5PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5IRFRWIGFuZCBtb2Rlcm4gZGV2aWNlcywgc2VlIDx4cmVmCitsaW5rZW5kPSJpdHU3MDkiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC42NDAsIHkmbmJzcDs9Jm5ic3A7MC4zMzA8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjMwMCwgeSZuYnNwOz0mbmJzcDswLjYwMDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMTUwLCB5Jm5ic3A7PSZuYnNwOzAuMDYwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMTI3LCB5Jm5ic3A7PSZuYnNwOzAuMzI5MCwKKwkgICAgSWxsdW1pbmFudCBEPHN1YnNjcmlwdD42NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5FJyA9IDQuNSZuYnNwO0kmbmJzcDtmb3ImbmJzcDtJJm5ic3A7JmxlOzAuMDE4LAorMS4wOTkmbmJzcDtJPHN1cGVyc2NyaXB0PjAuNDU8L3N1cGVyc2NyaXB0PiZuYnNwOy0mbmJzcDswLjA5OSZuYnNwO2ZvciZuYnNwOzAuMDE4Jm5ic3A7Jmx0OyZuYnNwO0k8L2VudHJ5PgorCSAgICA8ZW50cnk+MC4yMTI1Jm5ic3A7RSc8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4KKysmbmJzcDswLjcxNTQmbmJzcDtFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyZuYnNwOzAuMDcyMSZuYnNwO0UnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIxOSZuYnNwO0UnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIyNCZuYnNwO1A8c3Vic2NyaXB0PkIsUjwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxMjg8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9CVDg3ODwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+QnJva2VuIEJ0ODc4IGV4dGVudHM8Zm9vdG5vdGU+CisJCTxwYXJhPlRoZSB1YmlxdWl0b3VzIEJ0ODc4IHZpZGVvIGNhcHR1cmUgY2hpcAorcXVhbnRpemVzIEUnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+IHRvIDIzOCBsZXZlbHMsIHlpZWxkaW5nIGEgcmFuZ2UKK29mIFknID0gMTYgJmhlbGxpcDsgMjUzLCB1bmxpa2UgUmVjLiA2MDEgWScgPSAxNiAmaGVsbGlwOworMjM1LiBUaGlzIGlzIG5vdCBhIHR5cG8gaW4gdGhlIEJ0ODc4IGRvY3VtZW50YXRpb24sIGl0IGhhcyBiZWVuCitpbXBsZW1lbnRlZCBpbiBzaWxpY29uLiBUaGUgY2hyb21hIGV4dGVudHMgYXJlIHVuY2xlYXIuPC9wYXJhPgorCSAgICAgIDwvZm9vdG5vdGU+LCA8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4/PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4wLjI5OSZuYnNwO0UnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC41ODcmbmJzcDtFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyZuYnNwOzAuMTE0Jm5ic3A7RSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGVtcGhhc2lzPjIzNzwvZW1waGFzaXM+Jm5ic3A7RSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTY8L2VudHJ5PgorCSAgICA8ZW50cnk+MjI0Jm5ic3A7UDxzdWJzY3JpcHQ+QixSPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzEyOCAocHJvYmFibHkpPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NTwvZW50cnk+CisJICAgIDxlbnRyeT5NL05UU0M8Zm9vdG5vdGU+CisJCTxwYXJhPk5vIGlkZW50aWZpZXIgZXhpc3RzIGZvciBNL1BBTCB3aGljaCB1c2VzCit0aGUgY2hyb21hdGljaXRpZXMgb2YgTS9OVFNDLCB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgYXJlIGVxdWFsIHRvIEIgYW5kCitHL1BBTC48L3BhcmE+CisJICAgICAgPC9mb290bm90ZT4gYWNjb3JkaW5nIHRvIDx4cmVmIGxpbmtlbmQ9Iml0dTQ3MCIgLz4sIDx4cmVmCisJCWxpbmtlbmQ9Iml0dTYwMSIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjY3LCB5Jm5ic3A7PSZuYnNwOzAuMzM8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjIxLCB5Jm5ic3A7PSZuYnNwOzAuNzE8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjE0LCB5Jm5ic3A7PSZuYnNwOzAuMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjMxMCwgeSZuYnNwOz0mbmJzcDswLjMxNiwgSWxsdW1pbmFudCBDPC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+MC4yOTkmbmJzcDtFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyZuYnNwOzAuNTg3Jm5ic3A7RSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4KKysmbmJzcDswLjExNCZuYnNwO0UnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIxOSZuYnNwO0UnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIyNCZuYnNwO1A8c3Vic2NyaXB0PkIsUjwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxMjg8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT42MjUtbGluZSBQQUwgYW5kIFNFQ0FNIHN5c3RlbXMgYWNjb3JkaW5nIHRvIDx4cmVmCitsaW5rZW5kPSJpdHU0NzAiIC8+LCA8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC42NCwgeSZuYnNwOz0mbmJzcDswLjMzPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4yOSwgeSZuYnNwOz0mbmJzcDswLjYwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4xNSwgeSZuYnNwOz0mbmJzcDswLjA2PC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMTMsIHkmbmJzcDs9Jm5ic3A7MC4zMjksCitJbGx1bWluYW50IEQ8c3Vic2NyaXB0PjY1PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+MC4yOTkmbmJzcDtFJzxzdWJzY3JpcHQ+Ujwvc3Vic2NyaXB0PgorKyZuYnNwOzAuNTg3Jm5ic3A7RSc8c3Vic2NyaXB0Pkc8L3N1YnNjcmlwdD4KKysmbmJzcDswLjExNCZuYnNwO0UnPHN1YnNjcmlwdD5CPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIxOSZuYnNwO0UnPHN1YnNjcmlwdD5ZPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PjIyNCZuYnNwO1A8c3Vic2NyaXB0PkIsUjwvc3Vic2NyaXB0PiZuYnNwOysmbmJzcDsxMjg8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ09MT1JTUEFDRV9KUEVHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT5KUEVHIFknQ2JDciwgc2VlIDx4cmVmIGxpbmtlbmQ9ImpmaWYiIC8+LCA8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4/PC9lbnRyeT4KKwkgICAgPGVudHJ5Pj88L2VudHJ5PgorCSAgICA8ZW50cnk+PzwvZW50cnk+CisJICAgIDxlbnRyeT4wLjI5OSZuYnNwO0UnPHN1YnNjcmlwdD5SPC9zdWJzY3JpcHQ+CisrJm5ic3A7MC41ODcmbmJzcDtFJzxzdWJzY3JpcHQ+Rzwvc3Vic2NyaXB0PgorKyZuYnNwOzAuMTE0Jm5ic3A7RSc8c3Vic2NyaXB0PkI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjU2Jm5ic3A7RSc8c3Vic2NyaXB0Plk8L3N1YnNjcmlwdD4mbmJzcDsrJm5ic3A7MTY8Zm9vdG5vdGU+CisJCTxwYXJhPk5vdGUgSkZJRiBxdWFudGl6ZXMKK1knUDxzdWJzY3JpcHQ+Qjwvc3Vic2NyaXB0PlA8c3Vic2NyaXB0PlI8L3N1YnNjcmlwdD4gaW4gcmFuZ2UgWzA7KzFdIGFuZAorWy0wLjU7KzAuNV0gdG8gPGVtcGhhc2lzPjI1NzwvZW1waGFzaXM+IGxldmVscywgaG93ZXZlciBZJ0NiQ3Igc2lnbmFscworYXJlIHN0aWxsIGNsYW1wZWQgdG8gWzA7MjU1XS48L3BhcmE+CisJICAgICAgPC9mb290bm90ZT48L2VudHJ5PgorCSAgICA8ZW50cnk+MjU2Jm5ic3A7UDxzdWJzY3JpcHQ+QixSPC9zdWJzY3JpcHQ+Jm5ic3A7KyZuYnNwOzEyODwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DT0xPUlNQQUNFX1NSR0I8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5Pls/XTwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuNjQwLCB5Jm5ic3A7PSZuYnNwOzAuMzMwPC9lbnRyeT4KKwkgICAgPGVudHJ5PngmbmJzcDs9Jm5ic3A7MC4zMDAsIHkmbmJzcDs9Jm5ic3A7MC42MDA8L2VudHJ5PgorCSAgICA8ZW50cnk+eCZuYnNwOz0mbmJzcDswLjE1MCwgeSZuYnNwOz0mbmJzcDswLjA2MDwvZW50cnk+CisJICAgIDxlbnRyeT54Jm5ic3A7PSZuYnNwOzAuMzEyNywgeSZuYnNwOz0mbmJzcDswLjMyOTAsCisJICAgIElsbHVtaW5hbnQgRDxzdWJzY3JpcHQ+NjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+RScgPSA0LjUmbmJzcDtJJm5ic3A7Zm9yJm5ic3A7SSZuYnNwOyZsZTswLjAxOCwKKzEuMDk5Jm5ic3A7STxzdXBlcnNjcmlwdD4wLjQ1PC9zdXBlcnNjcmlwdD4mbmJzcDstJm5ic3A7MC4wOTkmbmJzcDtmb3ImbmJzcDswLjAxOCZuYnNwOyZsdDsmbmJzcDtJPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJzcGFtIj5uL2E8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0icGl4Zm10LWluZGV4ZWQiPgorICAgIDx0aXRsZT5JbmRleGVkIEZvcm1hdDwvdGl0bGU+CisKKyAgICA8cGFyYT5JbiB0aGlzIGZvcm1hdCBlYWNoIHBpeGVsIGlzIHJlcHJlc2VudGVkIGJ5IGFuIDggYml0IGluZGV4CitpbnRvIGEgMjU2IGVudHJ5IEFSR0IgcGFsZXR0ZS4gSXQgaXMgaW50ZW5kZWQgZm9yIDxsaW5rCitsaW5rZW5kPSJvc2QiPlZpZGVvIE91dHB1dCBPdmVybGF5czwvbGluaz4gb25seS4gVGhlcmUgYXJlIG5vIGlvY3RscyB0bworYWNjZXNzIHRoZSBwYWxldHRlLCB0aGlzIG11c3QgYmUgZG9uZSB3aXRoIGlvY3RscyBvZiB0aGUgTGludXggZnJhbWVidWZmZXIgQVBJLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjAiIGZyYW1lPSJub25lIj4KKyAgICAgIDx0aXRsZT5JbmRleGVkIEltYWdlIEZvcm1hdDwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjM3IiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJpZCIgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iZm91cmNjIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImJpdCIgLz4KKworCTxjb2xzcGVjIGNvbG51bT0iNCIgY29sbmFtZT0iYjA3IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNSIgY29sbmFtZT0iYjA2IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNiIgY29sbmFtZT0iYjA1IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iNyIgY29sbmFtZT0iYjA0IiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOCIgY29sbmFtZT0iYjAzIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iOSIgY29sbmFtZT0iYjAyIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTAiIGNvbG5hbWU9ImIwMSIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjExIiBjb2xuYW1lPSJiMDAiIGFsaWduPSJjZW50ZXIiIC8+CisKKwk8c3BhbnNwZWMgbmFtZXN0PSJiMDciIG5hbWVlbmQ9ImIwMCIgc3Bhbm5hbWU9ImIwIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImIxNyIgbmFtZWVuZD0iYjEwIiBzcGFubmFtZT0iYjEiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYjI3IiBuYW1lZW5kPSJiMjAiIHNwYW5uYW1lPSJiMiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJiMzciIG5hbWVlbmQ9ImIzMCIgc3Bhbm5hbWU9ImIzIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5JZGVudGlmaWVyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvZGU8L2VudHJ5PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiMCI+Qnl0ZSZuYnNwOzA8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+Jm5ic3A7PC9lbnRyeT4KKwkgICAgPGVudHJ5PiZuYnNwOzwvZW50cnk+CisJICAgIDxlbnRyeT5CaXQ8L2VudHJ5PgorCSAgICA8ZW50cnk+NzwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjU8L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1QQUw4Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFMODwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidQQUw4JzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+aTxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5pPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmk8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+aTxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5pPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmk8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+aTxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5pPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9InBpeGZtdC1yZ2IiPgorICAgIDx0aXRsZT5SR0IgRm9ybWF0czwvdGl0bGU+CisKKyAgICAmc3ViLXBhY2tlZC1yZ2I7CisgICAgJnN1Yi1zYmdncjg7CisgICAgJnN1Yi1zZ2JyZzg7CisgICAgJnN1Yi1zZ3JiZzg7CisgICAgJnN1Yi1zYmdncjE2OworICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gaWQ9Inl1di1mb3JtYXRzIj4KKyAgICA8dGl0bGU+WVVWIEZvcm1hdHM8L3RpdGxlPgorCisgICAgPHBhcmE+WVVWIGlzIHRoZSBmb3JtYXQgbmF0aXZlIHRvIFRWIGJyb2FkY2FzdCBhbmQgY29tcG9zaXRlIHZpZGVvCitzaWduYWxzLiBJdCBzZXBhcmF0ZXMgdGhlIGJyaWdodG5lc3MgaW5mb3JtYXRpb24gKFkpIGZyb20gdGhlIGNvbG9yCitpbmZvcm1hdGlvbiAoVSBhbmQgViBvciBDYiBhbmQgQ3IpLiBUaGUgY29sb3IgaW5mb3JtYXRpb24gY29uc2lzdHMgb2YKK3JlZCBhbmQgYmx1ZSA8ZW1waGFzaXM+Y29sb3IgZGlmZmVyZW5jZTwvZW1waGFzaXM+IHNpZ25hbHMsIHRoaXMgd2F5Cit0aGUgZ3JlZW4gY29tcG9uZW50IGNhbiBiZSByZWNvbnN0cnVjdGVkIGJ5IHN1YnRyYWN0aW5nIGZyb20gdGhlCiticmlnaHRuZXNzIGNvbXBvbmVudC4gU2VlIDx4cmVmIGxpbmtlbmQ9ImNvbG9yc3BhY2VzIiAvPiBmb3IgY29udmVyc2lvbgorZXhhbXBsZXMuIFlVViB3YXMgY2hvc2VuIGJlY2F1c2UgZWFybHkgdGVsZXZpc2lvbiB3b3VsZCBvbmx5IHRyYW5zbWl0CiticmlnaHRuZXNzIGluZm9ybWF0aW9uLiBUbyBhZGQgY29sb3IgaW4gYSB3YXkgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nCityZWNlaXZlcnMgYSBuZXcgc2lnbmFsIGNhcnJpZXIgd2FzIGFkZGVkIHRvIHRyYW5zbWl0IHRoZSBjb2xvcgorZGlmZmVyZW5jZSBzaWduYWxzLiBTZWNvbmRhcnkgaW4gdGhlIFlVViBmb3JtYXQgdGhlIFUgYW5kIFYgY29tcG9uZW50cwordXN1YWxseSBoYXZlIGxvd2VyIHJlc29sdXRpb24gdGhhbiB0aGUgWSBjb21wb25lbnQuIFRoaXMgaXMgYW4gYW5hbG9nCit2aWRlbyBjb21wcmVzc2lvbiB0ZWNobmlxdWUgdGFraW5nIGFkdmFudGFnZSBvZiBhIHByb3BlcnR5IG9mIHRoZQoraHVtYW4gdmlzdWFsIHN5c3RlbSwgYmVpbmcgbW9yZSBzZW5zaXRpdmUgdG8gYnJpZ2h0bmVzcworaW5mb3JtYXRpb24uPC9wYXJhPgorCisgICAgJnN1Yi1wYWNrZWQteXV2OworICAgICZzdWItZ3JleTsKKyAgICAmc3ViLXkxNjsKKyAgICAmc3ViLXl1eXY7CisgICAgJnN1Yi11eXZ5OworICAgICZzdWIteXZ5dTsKKyAgICAmc3ViLXZ5dXk7CisgICAgJnN1Yi15NDFwOworICAgICZzdWIteXV2NDIwOworICAgICZzdWIteXV2NDEwOworICAgICZzdWIteXV2NDIycDsKKyAgICAmc3ViLXl1djQxMXA7CisgICAgJnN1Yi1udjEyOworICAgICZzdWItbnYxNjsKKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uPgorICAgIDx0aXRsZT5Db21wcmVzc2VkIEZvcm1hdHM8L3RpdGxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJjb21wcmVzc2VkLWZvcm1hdHMiPgorICAgICAgPHRpdGxlPkNvbXByZXNzZWQgSW1hZ2UgRm9ybWF0czwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiIGFsaWduPSJsZWZ0Ij4KKwkmY3MtZGVmOworCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5JZGVudGlmaWVyPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvZGU8L2VudHJ5PgorCSAgICA8ZW50cnk+RGV0YWlsczwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1KUEVHIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSlBFRzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidKUEVHJzwvZW50cnk+CisJICAgIDxlbnRyeT5UQkQuIFNlZSBhbHNvICZWSURJT0MtRy1KUEVHQ09NUDssCisJICAgICZWSURJT0MtUy1KUEVHQ09NUDsuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULU1QRUciPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9NUEVHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J01QRUcnPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1QRUcgc3RyZWFtLiBUaGUgYWN0dWFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5CitleHRlbmRlZCBjb250cm9sIDxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFPC9jb25zdGFudD4sIHNlZQorPHhyZWYgbGlua2VuZD0ibXBlZy1jb250cm9sLWlkIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBpZD0icGl4Zm10LXJlc2VydmVkIj4KKyAgICA8dGl0bGU+UmVzZXJ2ZWQgRm9ybWF0IElkZW50aWZpZXJzPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXNlIGZvcm1hdHMgYXJlIG5vdCBkZWZpbmVkIGJ5IHRoaXMgc3BlY2lmaWNhdGlvbiwgdGhleQorYXJlIGp1c3QgbGlzdGVkIGZvciByZWZlcmVuY2UgYW5kIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdHMuIElmIHlvdQord2FudCB0byByZWdpc3RlciB5b3VyIG93biBmb3JtYXQsIHNlbmQgYW4gZS1tYWlsIHRvIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nCitsaXN0ICZ2NGwtbWw7IGZvciBpbmNsdXNpb24gaW4gdGhlIDxmaWxlbmFtZT52aWRlb2RldjIuaDwvZmlsZW5hbWU+CitmaWxlLiBJZiB5b3Ugd2FudCB0byBzaGFyZSB5b3VyIGZvcm1hdCB3aXRoIG90aGVyIGRldmVsb3BlcnMgYWRkIGEKK2xpbmsgdG8geW91ciBkb2N1bWVudGF0aW9uIGFuZCBzZW5kIGEgY29weSB0byB0aGUgbGludXgtbWVkaWEgbWFpbGluZyBsaXN0Citmb3IgaW5jbHVzaW9uIGluIHRoaXMgc2VjdGlvbi4gSWYgeW91IHRoaW5rIHlvdXIgZm9ybWF0IHNob3VsZCBiZSBsaXN0ZWQKK2luIGEgc3RhbmRhcmQgZm9ybWF0IHNlY3Rpb24gcGxlYXNlIG1ha2UgYSBwcm9wb3NhbCBvbiB0aGUgbGludXgtbWVkaWEgbWFpbGluZworbGlzdC48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InJlc2VydmVkLWZvcm1hdHMiPgorICAgICAgPHRpdGxlPlJlc2VydmVkIEltYWdlIEZvcm1hdHM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIiBhbGlnbj0ibGVmdCI+CisJJmNzLWRlZjsKKwk8dGhlYWQ+CisJICA8cm93PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcjwvZW50cnk+CisJICAgIDxlbnRyeT5Db2RlPC9lbnRyeT4KKwkgICAgPGVudHJ5PkRldGFpbHM8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90aGVhZD4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULURWIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfRFY8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nZHZzZCc8L2VudHJ5PgorCSAgICA8ZW50cnk+dW5rbm93bjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1FVDYxWDI1MSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0VUNjFYMjUxPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0U2MjUnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgZm9ybWF0IG9mIHRoZSBFVDYxWDI1MSBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUhJMjQwIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSEkyNDA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nSEkyNCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+OCBiaXQgUkdCIGZvcm1hdCB1c2VkIGJ5IHRoZSBCVFRWIGRyaXZlci48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUhNMTIiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ITTEyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0hNMTInPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPllVViA0OjI6MCBmb3JtYXQgdXNlZCBieSB0aGUKK0lWVFYgZHJpdmVyLCA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lml2dHZkcml2ZXIub3JnLyI+CitodHRwOi8vd3d3Lml2dHZkcml2ZXIub3JnLzwvdWxpbms+PC9wYXJhPjxwYXJhPlRoZSBmb3JtYXQgaXMgZG9jdW1lbnRlZCBpbiB0aGUKK2tlcm5lbCBzb3VyY2VzIGluIHRoZSBmaWxlIDxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTI8L2ZpbGVuYW1lPgorPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1TUENBNTAxIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1BDQTUwMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidTNTAxJzwvZW50cnk+CisJICAgIDxlbnRyeT5ZVVlWIHBlciBsaW5lIHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU1BDQTUwNSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NQQ0E1MDU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUzUwNSc8L2VudHJ5PgorCSAgICA8ZW50cnk+WVlVViBwZXIgbGluZSB1c2VkIGJ5IHRoZSBnc3BjYSBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TUENBNTA4PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1M1MDgnPC9lbnRyeT4KKwkgICAgPGVudHJ5PllVVlkgcGVyIGxpbmUgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1TUENBNTYxIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1BDQTU2MTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidTNTYxJzwvZW50cnk+CisJICAgIDxlbnRyeT5Db21wcmVzc2VkIEdCUkcgQmF5ZXIgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU0dSQkcxMCI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NHUkJHMTA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nREExMCc8L2VudHJ5PgorCSAgICA8ZW50cnk+MTAgYml0IHJhdyBCYXllciwgZXhwYW5kZWQgdG8gMTYgYml0cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU0dSQkcxMERQQ004Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J0RCMTAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PjEwIGJpdCByYXcgQmF5ZXIgRFBDTSBjb21wcmVzc2VkIHRvIDggYml0cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtUEFDMjA3Ij4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFDMjA3PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1AyMDcnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgQkdHUiBCYXllciBmb3JtYXQgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1NUjk3MzEwQSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX01SOTczMTBBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J00zMTAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgQkdHUiBCYXllciBmb3JtYXQgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1PVjUxMSI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX09WNTExPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J081MTEnPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9WNTExIEpQRUcgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtT1Y1MTgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9PVjUxODwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidPNTE4JzwvZW50cnk+CisJICAgIDxlbnRyeT5PVjUxOCBKUEVHIGZvcm1hdCB1c2VkIGJ5IHRoZSBnc3BjYSBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVBKUEciPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9QSlBHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1BKUEcnPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBpeGFydCA3M3h4IEpQRUcgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU1E5MDVDIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1E5MDVDPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+JzkwNUMnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgUkdHQiBiYXllciBmb3JtYXQgdXNlZCBieSB0aGUgZ3NwY2EgZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1NSlBFRyI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX01KUEVHPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J01KUEcnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgZm9ybWF0IHVzZWQgYnkgdGhlIFpvcmFuIGRyaXZlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1QV0MxIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfUFdDMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidQV0MxJzwvZW50cnk+CisJICAgIDxlbnRyeT5Db21wcmVzc2VkIGZvcm1hdCBvZiB0aGUgUFdDIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtUFdDMiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1BXQzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUFdDMic8L2VudHJ5PgorCSAgICA8ZW50cnk+Q29tcHJlc3NlZCBmb3JtYXQgb2YgdGhlIFBXQyBkcml2ZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVNOOUMxMFgiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TTjlDMTBYPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1M5MTAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbXByZXNzZWQgZm9ybWF0IG9mIHRoZSBTTjlDMTAyIGRyaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtU045QzIwWC1JNDIwIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+J1M5MjAnPC9lbnRyeT4KKwkgICAgPGVudHJ5PllVViA0OjI6MCBmb3JtYXQgb2YgdGhlIGdzcGNhIHNuOWMyMHggZHJpdmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1XTlZBIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfV05WQTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidXTlZBJzwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5Vc2VkIGJ5IHRoZSBXaW5ub3YgVmlkZXVtIGRyaXZlciwgPHVsaW5rCit1cmw9Imh0dHA6Ly93d3cudGhlZGlya3Mub3JnL3dpbm5vdi8iPgoraHR0cDovL3d3dy50aGVkaXJrcy5vcmcvd2lubm92LzwvdWxpbms+PC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1UTTYwMDAiPgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9UTTYwMDA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nVE02MCc8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+VXNlZCBieSBUcmlkZW50IHRtNjAwMDwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtWVlVViI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1lZVVY8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nWVlVVic8L2VudHJ5PgorCSAgICA8ZW50cnk+dW5rbm93bjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9zZWN0aW9uPgorCisgIDwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CisgIC0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZjVlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwKQEAgLTAsMCArMSwxNzUgQEAKKzx0aXRsZT5SZW1vdGUgQ29udHJvbGxlcnM8L3RpdGxlPgorPHNlY3Rpb24gaWQ9IlJlbW90ZV9jb250cm9sbGVyc19JbnRybyI+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHBhcmE+Q3VycmVudGx5LCBtb3N0IGFuYWxvZyBhbmQgZGlnaXRhbCBkZXZpY2VzIGhhdmUgYSBJbmZyYXJlZCBpbnB1dCBmb3IgcmVtb3RlIGNvbnRyb2xsZXJzLiBFYWNoCittYW51ZmFjdHVyZXIgaGFzIHRoZWlyIG93biB0eXBlIG9mIGNvbnRyb2wuIEl0IGlzIG5vdCByYXJlIGZvciB0aGUgc2FtZSBtYW51ZmFjdHVyZXIgdG8gc2hpcCBkaWZmZXJlbnQKK3R5cGVzIG9mIGNvbnRyb2xzLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZS48L3BhcmE+Cis8cGFyYT5VbmZvcnR1bmF0ZWx5LCBmb3Igc2V2ZXJhbCB5ZWFycywgdGhlcmUgd2FzIG5vIGVmZm9ydCB0byBjcmVhdGUgdW5pZm9ybSBJUiBrZXljb2RlcyBmb3IKK2RpZmZlcmVudCBkZXZpY2VzLiAgVGhpcyBjYXVzZWQgdGhlIHNhbWUgSVIga2V5bmFtZSB0byBiZSBtYXBwZWQgY29tcGxldGVseSBkaWZmZXJlbnRseSBvbgorZGlmZmVyZW50IElSIGRldmljZXMuIFRoaXMgcmVzdWx0ZWQgdGhhdCB0aGUgc2FtZSBJUiBrZXluYW1lIHRvIGJlIG1hcHBlZCBjb21wbGV0ZWx5IGRpZmZlcmVudCBvbgorZGlmZmVyZW50IElSJ3MuIER1ZSB0byB0aGF0LCBWNEwyIEFQSSBub3cgc3BlY2lmaWVzIGEgc3RhbmRhcmQgZm9yIG1hcHBpbmcgTWVkaWEga2V5cyBvbiBJUi48L3BhcmE+Cis8cGFyYT5UaGlzIHN0YW5kYXJkIHNob3VsZCBiZSB1c2VkIGJ5IGJvdGggVjRML0RWQiBkcml2ZXJzIGFuZCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zPC9wYXJhPgorPHBhcmE+VGhlIG1vZHVsZXMgcmVnaXN0ZXIgdGhlIHJlbW90ZSBhcyBrZXlib2FyZCB3aXRoaW4gdGhlIGxpbnV4IGlucHV0IGxheWVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIElSIGtleSBzdHJva2VzIHdpbGwgbG9vayBsaWtlIG5vcm1hbCBrZXlib2FyZCBrZXkgc3Ryb2tlcyAoaWYgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIGVuYWJsZWQpLiBVc2luZyB0aGUgZXZlbnQgZGV2aWNlcyAoQ09ORklHX0lOUFVUX0VWREVWKSBpdCBpcyBwb3NzaWJsZSBmb3IgYXBwbGljYXRpb25zIHRvIGFjY2VzcyB0aGUgcmVtb3RlIHZpYSAvZGV2L2lucHV0L2V2ZW50IGRldmljZXMuPC9wYXJhPgorCis8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InJjX3N0YW5kYXJkX2tleW1hcCI+Cis8dGl0bGU+SVIgZGVmYXVsdCBrZXltYXBwaW5nPC90aXRsZT4KKzx0Z3JvdXAgY29scz0iMyI+CismY3Mtc3RyOworPHRib2R5IHZhbGlnbj0idG9wIj4KKzxyb3c+Cis8ZW50cnk+S2V5IGNvZGU8L2VudHJ5PgorPGVudHJ5Pk1lYW5pbmc8L2VudHJ5PgorPGVudHJ5PktleSBleGFtcGxlcyBvbiBJUjwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz48ZW50cnk+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPk51bWVyaWMga2V5czwvZW1waGFzaXM+PC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV8wPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCAwPC9lbnRyeT48ZW50cnk+MDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZXzE8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PktleWJvYXJkIGRpZ2l0IDE8L2VudHJ5PjxlbnRyeT4xPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfMjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+S2V5Ym9hcmQgZGlnaXQgMjwvZW50cnk+PGVudHJ5PjI8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV8zPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCAzPC9lbnRyeT48ZW50cnk+MzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZXzQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PktleWJvYXJkIGRpZ2l0IDQ8L2VudHJ5PjxlbnRyeT40PC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfNTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+S2V5Ym9hcmQgZGlnaXQgNTwvZW50cnk+PGVudHJ5PjU8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV82PC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCA2PC9lbnRyeT48ZW50cnk+NjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZXzc8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PktleWJvYXJkIGRpZ2l0IDc8L2VudHJ5PjxlbnRyeT43PC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfODwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+S2V5Ym9hcmQgZGlnaXQgODwvZW50cnk+PGVudHJ5Pjg8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV85PC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5LZXlib2FyZCBkaWdpdCA5PC9lbnRyeT48ZW50cnk+OTwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5Nb3ZpZSBwbGF5IGNvbnRyb2w8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRk9SV0FSRDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+SW5zdGFudGx5IGFkdmFuY2UgaW4gdGltZTwvZW50cnk+PGVudHJ5PiZndDsmZ3Q7IC8gRk9SV0FSRDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0JBQ0s8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5Pkluc3RhbnRseSBnbyBiYWNrIGluIHRpbWU8L2VudHJ5PjxlbnRyeT4mbHQ7Jmx0OyZsdDsgLyBCQUNLPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRkFTVEZPUldBUkQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlBsYXkgbW92aWUgZmFzdGVyPC9lbnRyeT48ZW50cnk+Jmd0OyZndDsmZ3Q7IC8gRk9SV0FSRDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1JFV0lORDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UGxheSBtb3ZpZSBiYWNrPC9lbnRyeT48ZW50cnk+UkVXSU5EIC8gQkFDS1dBUkQ8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9ORVhUPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgbmV4dCBjaGFwdGVyIC8gc3ViLWNoYXB0ZXIgLyBpbnRlcnZhbDwvZW50cnk+PGVudHJ5Pk5FWFQgLyBTS0lQPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUFJFVklPVVM8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlNlbGVjdCBwcmV2aW91cyBjaGFwdGVyIC8gc3ViLWNoYXB0ZXIgLyBpbnRlcnZhbDwvZW50cnk+PGVudHJ5PiZsdDsmbHQ7IC8gIFBSRVYgLyBQUkVWSU9VUzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0FHQUlOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5SZXBlYXQgdGhlIHZpZGVvIG9yIGEgdmlkZW8gaW50ZXJ2YWw8L2VudHJ5PjxlbnRyeT5SRVBFQVQgLyBMT09QIC8gUkVDQUxMPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUEFVU0U8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlBhdXNlIHNyb3dlYW08L2VudHJ5PjxlbnRyeT5QQVVTRSAvIEZSRUVaRTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1BMQVk8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlBsYXkgbW92aWUgYXQgdGhlIG5vcm1hbCB0aW1lc2hpZnQ8L2VudHJ5PjxlbnRyeT5OT1JNQUwgVElNRVNISUZUIC8gTElWRSAvICZndDs8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9QTEFZUEFVU0U8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkFsdGVybmF0ZSBiZXR3ZWVuIHBsYXkgYW5kIHBhdXNlPC9lbnRyeT48ZW50cnk+UExBWSAvIFBBVVNFPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfU1RPUDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RvcCBzcm93ZWFtPC9lbnRyeT48ZW50cnk+U1RPUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1JFQ09SRDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RhcnQvc3RvcCByZWNvcmRpbmcgc3Jvd2VhbTwvZW50cnk+PGVudHJ5PkNBUFRVUkUgLyBSRUMgLyBSRUNPUkQvUEFVU0U8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlRha2UgYSBwaWN0dXJlIG9mIHRoZSBpbWFnZTwvZW50cnk+PGVudHJ5PkNBTUVSQSBJQ09OIC8gQ0FQVFVSRSAvIFNOQVBTSE9UPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfU0hVRkZMRTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RW5hYmxlIHNodWZmbGUgbW9kZTwvZW50cnk+PGVudHJ5PlNIVUZGTEU8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9USU1FPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BY3RpdmF0ZSB0aW1lIHNoaWZ0IG1vZGU8L2VudHJ5PjxlbnRyeT5USU1FIFNISUZUPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVElUTEU8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkFsbG93IGNoYW5naW5nIHRoZSBjaGFwdGVyPC9lbnRyeT48ZW50cnk+Q0hBUFRFUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NVQlRJVExFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BbGxvdyBjaGFuZ2luZyB0aGUgc3VidGl0bGU8L2VudHJ5PjxlbnRyeT5TVUJUSVRMRTwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5JbWFnZSBjb250cm9sPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0JSSUdIVE5FU1NET1dOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5EZWNyZWFzZSBCcmlnaHRuZXNzPC9lbnRyeT48ZW50cnk+QlJJR0hUTkVTUyBERUNSRUFTRTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0JSSUdIVE5FU1NVUDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+SW5jcmVhc2UgQnJpZ2h0bmVzczwvZW50cnk+PGVudHJ5PkJSSUdIVE5FU1MgSU5DUkVBU0U8L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0FOR0xFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5Td2l0Y2ggdmlkZW8gY2FtZXJhIGFuZ2xlIChvbiB2aWRlb3Mgd2l0aCBtb3JlIHRoYW4gb25lIGFuZ2xlIHN0b3JlZCk8L2VudHJ5PjxlbnRyeT5BTkdMRSAvIFNXQVA8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9FUEc8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5Pk9wZW4gdGhlIEVsZWNyb3dvbmljIFBsYXkgR3VpZGUgKEVQRyk8L2VudHJ5PjxlbnRyeT5FUEcgLyBHVUlERTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1RFWFQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkFjdGl2YXRlL2NoYW5nZSBjbG9zZWQgY2FwdGlvbiBtb2RlPC9lbnRyeT48ZW50cnk+Q0xPU0VEIENBUFRJT04vVEVMRVRFWFQgLyBEVkQgVEVYVCAvIFRFTEVURVhUIC8gVFRYPC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkF1ZGlvIGNvbnRyb2w8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQVVESU88L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkNoYW5nZSBhdWRpbyBzb3VyY2U8L2VudHJ5PjxlbnRyeT5BVURJTyBTT1VSQ0UgLyBBVURJTyAvIE1VU0lDPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTVVURTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+TXV0ZS91bm11dGUgYXVkaW88L2VudHJ5PjxlbnRyeT5NVVRFIC8gREVNVVRFIC8gVU5NVVRFPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVk9MVU1FRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RGVjcmVhc2Ugdm9sdW1lPC9lbnRyeT48ZW50cnk+Vk9MVU1FLSAvIFZPTFVNRSBET1dOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVk9MVU1FVVA8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkluY3JlYXNlIHZvbHVtZTwvZW50cnk+PGVudHJ5PlZPTFVNRSsgLyBWT0xVTUUgVVA8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9NT0RFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5DaGFuZ2Ugc291bmQgbW9kZTwvZW50cnk+PGVudHJ5Pk1PTk8vU1RFUkVPPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTEFOR1VBR0U8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlNlbGVjdCBMYW5ndWFnZTwvZW50cnk+PGVudHJ5PjFTVCAvIDJORCBMQU5HVUFHRSAvIERWRCBMQU5HIC8gTVRTL1NBUCAvIE1UUyBTRUw8L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+Q2hhbm5lbCBjb250cm9sPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0NIQU5ORUw8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkdvIHRvIHRoZSBuZXh0IGZhdm9yaXRlIGNoYW5uZWw8L2VudHJ5PjxlbnRyeT5BTFQgLyBDSEFOTkVMIC8gQ0ggU1VSRklORyAvIFNVUkYgLyBGQVY8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9DSEFOTkVMRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RGVjcmVhc2UgY2hhbm5lbCBzZXF1ZW5jaWFsbHk8L2VudHJ5PjxlbnRyeT5DSEFOTkVMIC0gLyBDSEFOTkVMIERPV04gLyBET1dOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQ0hBTk5FTFVQPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5JbmNyZWFzZSBjaGFubmVsIHNlcXVlbmNpYWxseTwvZW50cnk+PGVudHJ5PkNIQU5ORUwgKyAvIENIQU5ORUwgVVAgLyBVUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0RJR0lUUzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+VXNlIG1vcmUgdGhhbiBvbmUgZGlnaXQgZm9yIGNoYW5uZWw8L2VudHJ5PjxlbnRyeT5QTFVTIC8gMTAwLyAxeHggLyB4eHggLyAgLS8tLSAgLyBTaW5nbGUgRG91YmxlIFRyaXBsZSBEaWdpdDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NFQVJDSDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RhcnQgY2hhbm5lbCBhdXRvc2NhbjwvZW50cnk+PGVudHJ5PlNDQU4gLyBBVVRPU0NBTjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5Db2xvcmVkIGtleXM8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQkxVRTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+SVIgQmx1ZSBrZXk8L2VudHJ5PjxlbnRyeT5CTFVFPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfR1JFRU48L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PklSIEdyZWVuIEtleTwvZW50cnk+PGVudHJ5PkdSRUVOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUkVEPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5JUiBSZWQga2V5PC9lbnRyeT48ZW50cnk+UkVEPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfWUVMTE9XPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5JUiBZZWxsb3cga2V5PC9lbnRyeT48ZW50cnk+IFlFTExPVzwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5NZWRpYSBzZWxlY3Rpb248L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfQ0Q8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkNoYW5nZSBpbnB1dCBzb3VyY2UgdG8gQ29tcGFjdCBEaXNjPC9lbnRyeT48ZW50cnk+Q0Q8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9EVkQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PkNoYW5nZSBpbnB1dCB0byBEVkQ8L2VudHJ5PjxlbnRyeT5EVkQgLyBEVkQgTUVOVTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0VKRUNUQ0xPU0VDRDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3Blbi9jbG9zZSB0aGUgQ0QvRFZEIHBsYXllcjwvZW50cnk+PGVudHJ5Pi0mZ3Q7ICkgLyBDTE9TRSAvIE9QRU48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX01FRElBPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5UdXJuIG9uL29mZiBNZWRpYSBhcHBsaWNhdGlvbjwvZW50cnk+PGVudHJ5PlBDL1RWIC8gIFRVUk4gT04vT0ZGIEFQUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1BDPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3RzIGZyb20gVFYgdG8gUEM8L2VudHJ5PjxlbnRyeT5QQzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1JBRElPPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5QdXQgaW50byBBTS9GTSByYWRpbyBtb2RlPC9lbnRyeT48ZW50cnk+UkFESU8gLyBUVi9GTSAvIFRWL1JBRElPIC8gRk0gLyBGTS9SQURJTzwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1RWPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgdHYgbW9kZTwvZW50cnk+PGVudHJ5PlRWIC8gTElWRSBUVjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1RWMjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U2VsZWN0IENhYmxlIG1vZGU8L2VudHJ5PjxlbnRyeT5BSVIvQ0JMPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVkNSPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgVkNSIG1vZGU8L2VudHJ5PjxlbnRyeT5WQ1IgTU9ERSAvIERUUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1ZJREVPPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BbHRlcm5hdGUgYmV0d2VlbiBpbnB1dCBtb2RlczwvZW50cnk+PGVudHJ5PlNPVVJDRSAvIFNFTEVDVCAvIERJU1BMQVkgLyBTV0lUQ0ggSU5QVVRTIC8gVklERU88L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+UG93ZXIgY29udHJvbDwvZW1waGFzaXM+PC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9QT1dFUjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+VHVybiBvbi9vZmYgY29tcHV0ZXI8L2VudHJ5PjxlbnRyeT5TWVNURU0gUE9XRVIgLyBDT01QVVRFUiBQT1dFUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1BPV0VSMjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+VHVybiBvbi9vZmYgYXBwbGljYXRpb248L2VudHJ5PjxlbnRyeT5UViBPTi9PRkYgLyBQT1dFUjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NMRUVQPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5BY3RpdmF0ZSBzbGVlcCB0aW1lcjwvZW50cnk+PGVudHJ5PlNMRUVQIC8gU0xFRVAgVElNRVI8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9TVVNQRU5EPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5QdXQgY29tcHV0ZXIgaW50byBzdXNwZW5kIG1vZGU8L2VudHJ5PjxlbnRyeT5TVEFOREJZIC8gU1VTUEVORDwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5XaW5kb3cgY29udHJvbDwvZW1waGFzaXM+PC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9DTEVBUjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U3RvcCBzcm93ZWFtIGFuZCByZXR1cm4gdG8gZGVmYXVsdCBpbnB1dCB2aWRlby9hdWRpbzwvZW50cnk+PGVudHJ5PkNMRUFSIC8gUkVTRVQgLyBCT1NTIEtFWTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0NZQ0xFV0lORE9XUzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+TWluaW1pemUgd2luZG93cyBhbmQgbW92ZSB0byB0aGUgbmV4dCBvbmU8L2VudHJ5PjxlbnRyeT5BTFQtVEFCIC8gTUlOSU1JWkUgLyBERVNLVE9QPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRkFWT1JJVEVTPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5PcGVuIHRoZSBmYXZvcml0ZXMgc3Jvd2VhbSB3aW5kb3c8L2VudHJ5PjxlbnRyeT5UViBXQUxMIC8gRmF2b3JpdGVzPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTUVOVTwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+Q2FsbCBhcHBsaWNhdGlvbiBtZW51PC9lbnRyeT48ZW50cnk+Mk5EIENPTlRST0xTIChVU0E6IE1FTlUpIC8gRFZEL01FTlUgLyBTSE9XL0hJREUgQ1RSTDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX05FVzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3Blbi9DbG9zZSBQaWN0dXJlIGluIFBpY3R1cmU8L2VudHJ5PjxlbnRyeT5QSVA8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9PSzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U2VuZCBhIGNvbmZpcm1hdGlvbiBjb2RlIHRvIGFwcGxpY2F0aW9uPC9lbnRyeT48ZW50cnk+T0sgLyBFTlRFUiAvIFJFVFVSTjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1NDUkVFTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+U2VsZWN0IHNjcmVlbiBhc3BlY3QgcmF0aW88L2VudHJ5PjxlbnRyeT40OjMgMTY6OSBTRUxFQ1Q8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9aT09NPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5QdXQgZGV2aWNlIGludG8gem9vbS9mdWxsIHNjcmVlbiBtb2RlPC9lbnRyeT48ZW50cnk+Wk9PTSAvIEZVTEwgU0NSRUVOIC8gWk9PTSsgLyBISURFIFBBTk5FTCAvIFNXSVRDSDwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5PjxlbXBoYXNpcyByb2xlPSJib2xkIj5OYXZpZ2F0aW9uIGtleXM8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+CisKKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRVNDPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5DYW5jZWwgY3VycmVudCBvcGVyYXRpb248L2VudHJ5PjxlbnRyeT5DQU5DRUwgLyBCQUNLPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfSEVMUDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3BlbiBhIEhlbHAgd2luZG93PC9lbnRyeT48ZW50cnk+SEVMUDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0hPTUVQQUdFPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5OYXZpZ2F0ZSB0byBIb21lcGFnZTwvZW50cnk+PGVudHJ5PkhPTUU8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9JTkZPPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5PcGVuIE9uIFNjcmVlbiBEaXNwbGF5PC9lbnRyeT48ZW50cnk+RElTUExBWSBJTkZPUk1BVElPTiAvIE9TRDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX1dXVzwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+T3BlbiB0aGUgZGVmYXVsdCBicm93c2VyPC9lbnRyeT48ZW50cnk+V0VCPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfVVA8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlVwIGtleTwvZW50cnk+PGVudHJ5PlVQPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+RG93biBrZXk8L2VudHJ5PjxlbnRyeT5ET1dOPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfTEVGVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+TGVmdCBrZXk8L2VudHJ5PjxlbnRyeT5MRUZUPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pjxjb25zdGFudD5LRVlfUklHSFQ8L2NvbnN0YW50PjwvZW50cnk+PGVudHJ5PlJpZ2h0IGtleTwvZW50cnk+PGVudHJ5PlJJR0hUPC9lbnRyeT48L3Jvdz4KKworPHJvdz48ZW50cnk+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPk1pc2NlbGFuZW91cyBrZXlzPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgorCis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0RPVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UmV0dXJuIGEgZG90PC9lbnRyeT48ZW50cnk+LjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0ZOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgYSBmdW5jdGlvbjwvZW50cnk+PGVudHJ5PkZVTkNUSU9OPC9lbnRyeT48L3Jvdz4KKworPC90Ym9keT4KKzwvdGdyb3VwPgorPC90YWJsZT4KKworPHBhcmE+SXQgc2hvdWxkIGJlIG5vdGljZWQgdGhhdCwgc29tZXRpbWVzLCB0aGVyZSBzb21lIGZ1bmRhbWVudGFsIG1pc3Npbmcga2V5cyBhdCBzb21lIGNoZWFwZXIgSVIncy4gRHVlIHRvIHRoYXQsIGl0IGlzIHJlY29tbWVuZGVkIHRvOjwvcGFyYT4KKworPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJyY19rZXltYXBfbm90ZXMiPgorPHRpdGxlPk5vdGVzPC90aXRsZT4KKzx0Z3JvdXAgY29scz0iMSI+CismY3Mtc3RyOworPHRib2R5IHZhbGlnbj0idG9wIj4KKzxyb3c+Cis8ZW50cnk+T24gc2ltcGxlciBJUidzLCB3aXRob3V0IHNlcGFyYXRlIGNoYW5uZWwga2V5cywgeW91IG5lZWQgdG8gbWFwIFVQIGFzIDxjb25zdGFudD5LRVlfQ0hBTk5FTFVQPC9jb25zdGFudD48L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5PbiBzaW1wbGVyIElSJ3MsIHdpdGhvdXQgc2VwYXJhdGUgY2hhbm5lbCBrZXlzLCB5b3UgbmVlZCB0byBtYXAgRE9XTiBhcyA8Y29uc3RhbnQ+S0VZX0NIQU5ORUxET1dOPC9jb25zdGFudD48L2VudHJ5PgorPC9yb3c+PHJvdz4KKzxlbnRyeT5PbiBzaW1wbGVyIElSJ3MsIHdpdGhvdXQgc2VwYXJhdGUgdm9sdW1lIGtleXMsIHlvdSBuZWVkIHRvIG1hcCBMRUZUIGFzIDxjb25zdGFudD5LRVlfVk9MVU1FRE9XTjwvY29uc3RhbnQ+PC9lbnRyeT4KKzwvcm93Pjxyb3c+Cis8ZW50cnk+T24gc2ltcGxlciBJUidzLCB3aXRob3V0IHNlcGFyYXRlIHZvbHVtZSBrZXlzLCB5b3UgbmVlZCB0byBtYXAgUklHSFQgYXMgPGNvbnN0YW50PktFWV9WT0xVTUVVUDwvY29uc3RhbnQ+PC9lbnRyeT4KKzwvcm93PgorPC90Ym9keT4KKzwvdGdyb3VwPgorPC90YWJsZT4KKworPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iUmVtb3RlX2NvbnRyb2xsZXJzX3RhYmxlX2NoYW5nZSI+Cis8dGl0bGU+Q2hhbmdpbmcgZGVmYXVsdCBSZW1vdGUgQ29udHJvbGxlciBtYXBwaW5nczwvdGl0bGU+Cis8cGFyYT5UaGUgZXZlbnQgaW50ZXJmYWNlIHByb3ZpZGVzIHR3byBpb2N0bHMgdG8gYmUgdXNlZCBhZ2FpbnN0Cit0aGUgL2Rldi9pbnB1dC9ldmVudCBkZXZpY2UsIHRvIGFsbG93IGNoYW5naW5nIHRoZSBkZWZhdWx0CitrZXltYXBwaW5nLjwvcGFyYT4KKworPHBhcmE+VGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyBob3cgdG8gcmVwbGFjZSB0aGUga2V5bWFwIHRhYmxlcy48L3BhcmE+Cismc3ViLWtleXRhYmxlLWM7Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3Y0bDIueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzdiNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbApAQCAtMCwwICsxLDQ3OSBAQAorIDxwYXJ0aW5mbz4KKyAgICA8YXV0aG9yZ3JvdXA+CisgICAgICA8YXV0aG9yPgorCTxmaXJzdG5hbWU+TWljaGFlbDwvZmlyc3RuYW1lPgorCTxzdXJuYW1lPlNjaGltZWs8L3N1cm5hbWU+CisJPG90aGVybmFtZSByb2xlPSJtaSI+SDwvb3RoZXJuYW1lPgorCTxhZmZpbGlhdGlvbj4KKwkgIDxhZGRyZXNzPgorCSAgICA8ZW1haWw+bXNjaGltZWtAZ214LmF0PC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5CaWxsPC9maXJzdG5hbWU+CisJPHN1cm5hbWU+RGlya3M8L3N1cm5hbWU+CisJPCEtLSBDb21tZW50ZWQgdW50aWwgQmlsbCBvcHRzIGluIHRvIGJlIHNwYW1tZWQuCisJPGFmZmlsaWF0aW9uPgorCSAgPGFkZHJlc3M+CisJICAgIDxlbWFpbD5iaWxsQHRoZWRpcmtzLm9yZzwvZW1haWw+CisJICA8L2FkZHJlc3M+CisJPC9hZmZpbGlhdGlvbj4gLS0+CisJPGNvbnRyaWI+T3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBWNEwyIEFQSSBhbmQKK2RvY3VtZW50YXRpb24uPC9jb250cmliPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5IYW5zPC9maXJzdG5hbWU+CisJPHN1cm5hbWU+VmVya3VpbDwvc3VybmFtZT4KKwk8Y29udHJpYj5EZXNpZ25lZCBhbmQgZG9jdW1lbnRlZCB0aGUgVklESU9DX0xPR19TVEFUVVMgaW9jdGwsCit0aGUgZXh0ZW5kZWQgY29udHJvbCBpb2N0bHMgYW5kIG1ham9yIHBhcnRzIG9mIHRoZSBzbGljZWQgVkJJCitBUEkuPC9jb250cmliPgorCTxhZmZpbGlhdGlvbj4KKwkgIDxhZGRyZXNzPgorCSAgICA8ZW1haWw+aHZlcmt1aWxAeHM0YWxsLm5sPC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5NYXJ0aW48L2ZpcnN0bmFtZT4KKwk8c3VybmFtZT5SdWJsaTwvc3VybmFtZT4KKwk8IS0tCisJPGFmZmlsaWF0aW9uPgorCSAgPGFkZHJlc3M+CisJICAgIDxlbWFpbD5tYXJ0aW5fcnVibGlAbG9naXRlY2guY29tPC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPiAtLT4KKwk8Y29udHJpYj5EZXNpZ25lZCBhbmQgZG9jdW1lbnRlZCB0aGUgVklESU9DX0VOVU1fRlJBTUVTSVpFUworYW5kIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIGlvY3Rscy48L2NvbnRyaWI+CisgICAgICA8L2F1dGhvcj4KKworICAgICAgPGF1dGhvcj4KKwk8Zmlyc3RuYW1lPkFuZHk8L2ZpcnN0bmFtZT4KKwk8c3VybmFtZT5XYWxsczwvc3VybmFtZT4KKwk8Y29udHJpYj5Eb2N1bWVudGVkIHRoZSBmaWVsZGVkIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWCitNUEVHIHN0cmVhbSBlbWJlZGRlZCwgc2xpY2VkIFZCSSBkYXRhIGZvcm1hdCBpbiB0aGlzIHNwZWNpZmljYXRpb24uCis8L2NvbnRyaWI+CisJPGFmZmlsaWF0aW9uPgorCSAgPGFkZHJlc3M+CisJICAgIDxlbWFpbD5hd2FsbHNAcmFkaXgubmV0PC9lbWFpbD4KKwkgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPgorICAgICAgPC9hdXRob3I+CisKKyAgICAgIDxhdXRob3I+CisJPGZpcnN0bmFtZT5NYXVybzwvZmlyc3RuYW1lPgorCTxzdXJuYW1lPkNhcnZhbGhvIENoZWhhYjwvc3VybmFtZT4KKwk8Y29udHJpYj5Eb2N1bWVudGVkIGxpYnY0bCwgZGVzaWduZWQgYW5kIGFkZGVkIHY0bDJncmFiIGV4YW1wbGUsCitSZW1vdGUgQ29udHJvbGxlciBjaGFwdGVyLjwvY29udHJpYj4KKwk8YWZmaWxpYXRpb24+CisJICA8YWRkcmVzcz4KKwkgICAgPGVtYWlsPm1jaGVoYWJAcmVkaGF0LmNvbTwvZW1haWw+CisJICA8L2FkZHJlc3M+CisJPC9hZmZpbGlhdGlvbj4KKyAgICAgIDwvYXV0aG9yPgorICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+MTk5OTwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDA8L3llYXI+CisgICAgICA8eWVhcj4yMDAxPC95ZWFyPgorICAgICAgPHllYXI+MjAwMjwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDM8L3llYXI+CisgICAgICA8eWVhcj4yMDA0PC95ZWFyPgorICAgICAgPHllYXI+MjAwNTwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDY8L3llYXI+CisgICAgICA8eWVhcj4yMDA3PC95ZWFyPgorICAgICAgPHllYXI+MjAwODwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDk8L3llYXI+CisgICAgICA8aG9sZGVyPkJpbGwgRGlya3MsIE1pY2hhZWwgSC4gU2NoaW1laywgSGFucyBWZXJrdWlsLCBNYXJ0aW4KK1J1YmxpLCBBbmR5IFdhbGxzLCBNYXVybyBDYXJ2YWxobyBDaGVoYWI8L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKyAgICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+RXhjZXB0IHdoZW4gZXhwbGljaXRseSBzdGF0ZWQgYXMgR1BMLCBwcm9ncmFtbWluZyBleGFtcGxlcyB3aXRoaW4KKwkgICAgdGhpcyBwYXJ0IGNhbiBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9ucy48L3BhcmE+CisgICAgPC9sZWdhbG5vdGljZT4KKyAgICA8cmV2aGlzdG9yeT4KKyAgICAgIDwhLS0gUHV0IGRvY3VtZW50IHJldmlzaW9ucyBoZXJlLCBuZXdlc3QgZmlyc3QuIC0tPgorICAgICAgPCEtLSBBUEkgcmV2aXNpb25zIChjaGFuZ2VzIGFuZCBhZGRpdGlvbnMgb2YgZGVmaW5lcywgZW51bXMsCitzdHJ1Y3RzLCBpb2N0bHMpIG11c3QgYmUgbm90ZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGhpc3RvcnkgY2hhcHRlcgorKGNvbXBhdC5zZ21sKSwgYWxvbmcgd2l0aCB0aGUgcG9zc2libGUgaW1wYWN0IG9uIGV4aXN0aW5nIGRyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMuIC0tPgorCisgICAgICA8cmV2aXNpb24+CisJPHJldm51bWJlcj4yLjYuMzI8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA5LTA4LTMxPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5tY2M8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Tm93LCByZXZpc2lvbnMgd2lsbCBtYXRjaCB0aGUga2VybmVsIHZlcnNpb24gd2hlcmUKK3RoZSBWNEwyIEFQSSBjaGFuZ2VzIHdpbGwgYmUgdXNlZCBieSB0aGUgTGludXggS2VybmVsLgorQWxzbyBhZGRlZCBSZW1vdGUgQ29udHJvbGxlciBjaGFwdGVyLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yOTwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDktMDgtMjY8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmV2PC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHN0cmluZyBjb250cm9scyBhbmQgZm9yIEZNIFRyYW5zbWl0dGVyIGNvbnRyb2xzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yODwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDktMDgtMjY8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmdsPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIgZG9jdW1lbnRhdGlvbi48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjc8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA5LTA4LTE1PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5tY2M8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+QWRkZWQgbGlidjRsIGFuZCBSZW1vdGUgQ29udHJvbGxlciBkb2N1bWVudGF0aW9uOworYWRkZWQgdjRsMmdyYWIgYW5kIGtleXRhYmxlIGFwcGxpY2F0aW9uIGV4YW1wbGVzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yNjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDktMDctMjM8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmh2PC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkZpbmFsaXplZCB0aGUgUkRTIGNhcHR1cmUgQVBJLiBBZGRlZCBtb2R1bGF0b3IgYW5kIFJEUyBlbmNvZGVyCitjYXBhYmlsaXRpZXMuIEFkZGVkIHN1cHBvcnQgZm9yIHN0cmluZyBjb250cm9scy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjU8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA5LTAxLTE4PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5odjwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBwaXhlbCBmb3JtYXRzIFZZVVksIE5WMTYgYW5kIE5WNjEsIGFuZCBjaGFuZ2VkCit0aGUgZGVidWcgaW9jdGxzIFZJRElPQ19EQkdfRy9TX1JFR0lTVEVSIGFuZCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVC4KK0FkZGVkIGNhbWVyYSBjb250cm9scyBWNEwyX0NJRF9aT09NX0FCU09MVVRFLCBWNEwyX0NJRF9aT09NX1JFTEFUSVZFLAorVjRMMl9DSURfWk9PTV9DT05USU5VT1VTIGFuZCBWNEwyX0NJRF9QUklWQUNZLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yNDwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDgtMDMtMDQ8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBwaXhlbCBmb3JtYXRzIFkxNiBhbmQgU0JHR1IxNiwgbmV3IGNvbnRyb2xzCithbmQgYSBjYW1lcmEgY29udHJvbHMgY2xhc3MuIFJlbW92ZWQgVklESU9DX0cvU19NUEVHQ09NUC48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjM8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA3LTA4LTMwPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Rml4ZWQgYSB0eXBvIGluIFZJRElPQ19EQkdfRy9TX1JFR0lTVEVSLgorQ2xhcmlmaWVkIHRoZSBieXRlIG9yZGVyIG9mIHBhY2tlZCBwaXhlbCBmb3JtYXRzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yMjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDctMDgtMjk8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCB0aGUgVmlkZW8gT3V0cHV0IE92ZXJsYXkgaW50ZXJmYWNlLCBuZXcgTVBFRworY29udHJvbHMsIFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiBhbmQgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JULAorVklESU9DX0RCR19HL1NfUkVHSVNURVIsIFZJRElPQ18oVFJZXylFTkNPREVSX0NNRCwKK1ZJRElPQ19HX0NISVBfSURFTlQsIFZJRElPQ19HX0VOQ19JTkRFWCwgbmV3IHBpeGVsIGZvcm1hdHMuCitDbGFyaWZpY2F0aW9ucyBpbiB0aGUgY3JvcHBpbmcgY2hhcHRlciwgYWJvdXQgUkdCIHBpeGVsIGZvcm1hdHMsIHRoZQorbW1hcCgpLCBwb2xsKCksIHNlbGVjdCgpLCByZWFkKCkgYW5kIHdyaXRlKCkgZnVuY3Rpb25zLiBUeXBvZ3JhcGhpY2FsCitmaXhlcy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjE8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTEyLTE5PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Rml4ZWQgYSBsaW5rIGluIHRoZSBWSURJT0NfR19FWFRfQ1RSTFMgc2VjdGlvbi48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMjA8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTExLTI0PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Q2xhcmlmaWVkIHRoZSBwdXJwb3NlIG9mIHRoZSBhdWRpb3NldCBmaWVsZCBpbgorc3RydWN0IHY0bDJfaW5wdXQgYW5kIHY0bDJfb3V0cHV0LjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4xOTwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDYtMTAtMTk8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5Eb2N1bWVudGVkIFY0TDJfUElYX0ZNVF9SR0I0NDQuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CisJPHJldm51bWJlcj4wLjE4PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNi0xMC0xODwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIHRoZSBkZXNjcmlwdGlvbiBvZiBleHRlbmRlZCBjb250cm9scyBieSBIYW5zCitWZXJrdWlsLiBMaW5rZWQgVjRMMl9QSVhfRk1UX01QRUcgdG8gVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRS48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTc8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTEwLTEyPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Q29ycmVjdGVkIFY0TDJfUElYX0ZNVF9ITTEyIGRlc2NyaXB0aW9uLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4xNjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDYtMTAtMDg8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5WSURJT0NfRU5VTV9GUkFNRVNJWkVTIGFuZAorVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgYXJlIG5vdyBwYXJ0IG9mIHRoZSBBUEkuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CisJPHJldm51bWJlcj4wLjE1PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNi0wOS0yMzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkNsZWFuZWQgdXAgdGhlIGJpYmxpb2dyYXBoeSwgYWRkZWQgQlQuNjUzIGFuZAorQlQuMTExOS4gY2FwdHVyZS5jL3N0YXJ0X2NhcHR1cmluZygpIGZvciB1c2VyIHBvaW50ZXIgSS9PIGRpZCBub3QKK2luaXRpYWxpemUgdGhlIGJ1ZmZlciBpbmRleC4gRG9jdW1lbnRlZCB0aGUgVjRMIE1QRUcgYW5kIE1KUEVHCitWSURfVFlQRXMgYW5kIFY0TDJfUElYX0ZNVF9TQkdHUjguIFVwZGF0ZWQgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgcGl4ZWwKK2Zvcm1hdHMuIFNlZSB0aGUgaGlzdG9yeSBjaGFwdGVyIGZvciBBUEkgY2hhbmdlcy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTQ8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTA5LTE0PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5tcjwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBWSURJT0NfRU5VTV9GUkFNRVNJWkVTIGFuZAorVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgcHJvcG9zYWwgZm9yIGZyYW1lIGZvcm1hdCBlbnVtZXJhdGlvbiBvZgorZGlnaXRhbCBkZXZpY2VzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4xMzwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDYtMDQtMDc8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5Db3JyZWN0ZWQgdGhlIGRlc2NyaXB0aW9uIG9mIHN0cnVjdCB2NGwyX3dpbmRvdworY2xpcHMuIE5ldyBWNEwyX1NURF8gYW5kIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMgorZGVmaW5lcy48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTI8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTAyLTAzPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+Q29ycmVjdGVkIHRoZSBkZXNjcmlwdGlvbiBvZiBzdHJ1Y3QKK3Y0bDJfY2FwdHVyZXBhcm0gYW5kIHY0bDJfb3V0cHV0cGFybS48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTE8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTAxLTI3PC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+SW1wcm92ZWQgdGhlIGRlc2NyaXB0aW9uIG9mIHN0cnVjdAordjRsMl90dW5lci48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTA8L3Jldm51bWJlcj4KKwk8ZGF0ZT4yMDA2LTAxLTEwPC9kYXRlPgorCTxhdXRob3Jpbml0aWFscz5taHM8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+VklESU9DX0dfSU5QVVQgYW5kIFZJRElPQ19TX1BBUk0KK2NsYXJpZmljYXRpb25zLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC45PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNS0xMS0yNzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkltcHJvdmVkIHRoZSA1MjUgbGluZSBudW1iZXJpbmcgZGlhZ3JhbS4gSGFucworVmVya3VpbCBhbmQgSSByZXdyb3RlIHRoZSBzbGljZWQgVkJJIHNlY3Rpb24uIEhlIGFsc28gY29udHJpYnV0ZWQgYQorVklESU9DX0xPR19TVEFUVVMgcGFnZS4gRml4ZWQgVklESU9DX1NfU1REIGNhbGwgaW4gdGhlIHZpZGVvIHN0YW5kYXJkCitzZWxlY3Rpb24gZXhhbXBsZS4gVmFyaW91cyB1cGRhdGVzLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC44PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwNC0xMC0wNDwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPlNvbWVob3cgYSBwaWVjZSBvZiBqdW5rIHNsaXBwZWQgaW50byB0aGUgY2FwdHVyZQorZXhhbXBsZSwgcmVtb3ZlZC48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuNzwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDQtMDktMTk8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5GaXhlZCB2aWRlbyBzdGFuZGFyZCBzZWxlY3Rpb24sIGNvbnRyb2wKK2VudW1lcmF0aW9uLCBkb3duc2NhbGluZyBhbmQgYXNwZWN0IGV4YW1wbGUuIEFkZGVkIHJlYWQgYW5kIHVzZXIKK3BvaW50ZXIgaS9vIHRvIHZpZGVvIGNhcHR1cmUgZXhhbXBsZS48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuNjwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDQtMDgtMDE8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz52NGwyX2J1ZmZlciBjaGFuZ2VzLCBhZGRlZCB2aWRlbyBjYXB0dXJlIGV4YW1wbGUsCit2YXJpb3VzIGNvcnJlY3Rpb25zLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC41PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwMy0xMS0wNTwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPlBpeGVsIGZvcm1hdCBlcnJhdHVtLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC40PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwMy0wOS0xNzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkNvcnJlY3RlZCBzb3VyY2UgYW5kIE1ha2VmaWxlIHRvIGdlbmVyYXRlIGEgUERGLgorU0dNTCBmaXhlcy4gQWRkZWQgbGF0ZXN0IEFQSSBjaGFuZ2VzLiBDbG9zZWQgZ2FwcyBpbiB0aGUgaGlzdG9yeQorY2hhcHRlci48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMzwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDMtMDItMDU8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5Bbm90aGVyIGRyYWZ0LCBtb3JlIGNvcnJlY3Rpb25zLjwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKworICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC4yPC9yZXZudW1iZXI+CisJPGRhdGU+MjAwMy0wMS0xNTwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWhzPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPlNlY29uZCBkcmFmdCwgd2l0aCBjb3JyZWN0aW9ucyBwb2ludGVkIG91dCBieSBHZXJkCitLbm9yci48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuMTwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDItMTItMDE8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPm1oczwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5GaXJzdCBkcmFmdCwgYmFzZWQgb24gZG9jdW1lbnRhdGlvbiBieSBCaWxsIERpcmtzCithbmQgZGlzY3Vzc2lvbnMgb24gdGhlIFY0TCBtYWlsaW5nIGxpc3QuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorICAgIDwvcmV2aGlzdG9yeT4KKzwvcGFydGluZm8+CisKKzx0aXRsZT5WaWRlbyBmb3IgTGludXggVHdvIEFQSSBTcGVjaWZpY2F0aW9uPC90aXRsZT4KKyA8c3VidGl0bGU+UmV2aXNpb24gMi42LjMyPC9zdWJ0aXRsZT4KKworICA8Y2hhcHRlciBpZD0iY29tbW9uIj4KKyAgICAmc3ViLWNvbW1vbjsKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwaXhmbXQiPgorICAgICZzdWItcGl4Zm10OworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImlvIj4KKyAgICAmc3ViLWlvOworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRldmljZXMiPgorICAgIDx0aXRsZT5JbnRlcmZhY2VzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJjYXB0dXJlIj4gJnN1Yi1kZXYtY2FwdHVyZTsgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJvdmVybGF5Ij4gJnN1Yi1kZXYtb3ZlcmxheTsgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJvdXRwdXQiPiAmc3ViLWRldi1vdXRwdXQ7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0ib3NkIj4gJnN1Yi1kZXYtb3NkOyA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gaWQ9ImNvZGVjIj4gJnN1Yi1kZXYtY29kZWM7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0iZWZmZWN0Ij4gJnN1Yi1kZXYtZWZmZWN0OyA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gaWQ9InJhdy12YmkiPiAmc3ViLWRldi1yYXctdmJpOyA8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gaWQ9InNsaWNlZCI+ICZzdWItZGV2LXNsaWNlZC12Ymk7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0idHR4Ij4gJnN1Yi1kZXYtdGVsZXRleHQ7IDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0icmFkaW8iPiAmc3ViLWRldi1yYWRpbzsgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJyZHMiPiAmc3ViLWRldi1yZHM7IDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkcml2ZXIiPgorCSAgJnN1Yi1kcml2ZXI7CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibGlidjRsIj4KKwkgICZzdWItbGlidjRsOworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImNvbXBhdCI+CisJICAmc3ViLWNvbXBhdDsKKyAgPC9jaGFwdGVyPgorCisgIDxhcHBlbmRpeCBpZD0idXNlci1mdW5jIj4KKyAgPHRpdGxlPkZ1bmN0aW9uIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICA8IS0tIEtlZXAgdGhpcyBhbHBoYWJldGljYWxseSBzb3J0ZWQuIC0tPgorCisgICAgJnN1Yi1jbG9zZTsKKyAgICAmc3ViLWlvY3RsOworICAgIDwhLS0gQWxsIGlvY3RscyBnbyBoZXJlLiAtLT4KKyAgICAmc3ViLWNyb3BjYXA7CisgICAgJnN1Yi1kYmctZy1jaGlwLWlkZW50OworICAgICZzdWItZGJnLWctcmVnaXN0ZXI7CisgICAgJnN1Yi1lbmNvZGVyLWNtZDsKKyAgICAmc3ViLWVudW1hdWRpbzsKKyAgICAmc3ViLWVudW1hdWRpb291dDsKKyAgICAmc3ViLWVudW0tZm10OworICAgICZzdWItZW51bS1mcmFtZXNpemVzOworICAgICZzdWItZW51bS1mcmFtZWludGVydmFsczsKKyAgICAmc3ViLWVudW1pbnB1dDsKKyAgICAmc3ViLWVudW1vdXRwdXQ7CisgICAgJnN1Yi1lbnVtc3RkOworICAgICZzdWItZy1hdWRpbzsKKyAgICAmc3ViLWctYXVkaW9vdXQ7CisgICAgJnN1Yi1nLWNyb3A7CisgICAgJnN1Yi1nLWN0cmw7CisgICAgJnN1Yi1nLWVuYy1pbmRleDsKKyAgICAmc3ViLWctZXh0LWN0cmxzOworICAgICZzdWItZy1mYnVmOworICAgICZzdWItZy1mbXQ7CisgICAgJnN1Yi1nLWZyZXF1ZW5jeTsKKyAgICAmc3ViLWctaW5wdXQ7CisgICAgJnN1Yi1nLWpwZWdjb21wOworICAgICZzdWItZy1tb2R1bGF0b3I7CisgICAgJnN1Yi1nLW91dHB1dDsKKyAgICAmc3ViLWctcGFybTsKKyAgICAmc3ViLWctcHJpb3JpdHk7CisgICAgJnN1Yi1nLXNsaWNlZC12YmktY2FwOworICAgICZzdWItZy1zdGQ7CisgICAgJnN1Yi1nLXR1bmVyOworICAgICZzdWItbG9nLXN0YXR1czsKKyAgICAmc3ViLW92ZXJsYXk7CisgICAgJnN1Yi1xYnVmOworICAgICZzdWItcXVlcnlidWY7CisgICAgJnN1Yi1xdWVyeWNhcDsKKyAgICAmc3ViLXF1ZXJ5Y3RybDsKKyAgICAmc3ViLXF1ZXJ5c3RkOworICAgICZzdWItcmVxYnVmczsKKyAgICAmc3ViLXMtaHctZnJlcS1zZWVrOworICAgICZzdWItc3RyZWFtb247CisgICAgPCEtLSBFbmQgb2YgaW9jdGxzLiAtLT4KKyAgICAmc3ViLW1tYXA7CisgICAgJnN1Yi1tdW5tYXA7CisgICAgJnN1Yi1vcGVuOworICAgICZzdWItcG9sbDsKKyAgICAmc3ViLXJlYWQ7CisgICAgJnN1Yi1zZWxlY3Q7CisgICAgJnN1Yi13cml0ZTsKKyAgPC9hcHBlbmRpeD4KKworICA8YXBwZW5kaXggaWQ9InZpZGVvZGV2Ij4KKyAgICA8dGl0bGU+VmlkZW8gRm9yIExpbnV4IFR3byBIZWFkZXIgRmlsZTwvdGl0bGU+CisgICAgJnN1Yi12aWRlb2RldjItaDsKKyAgPC9hcHBlbmRpeD4KKworICA8YXBwZW5kaXggaWQ9ImNhcHR1cmUtZXhhbXBsZSI+CisgICAgPHRpdGxlPlZpZGVvIENhcHR1cmUgRXhhbXBsZTwvdGl0bGU+CisgICAgJnN1Yi1jYXB0dXJlLWM7CisgIDwvYXBwZW5kaXg+CisKKyAgPGFwcGVuZGl4IGlkPSJ2NGwyZ3JhYi1leGFtcGxlIj4KKyAgICA8dGl0bGU+VmlkZW8gR3JhYmJlciBleGFtcGxlIHVzaW5nIGxpYnY0bDwvdGl0bGU+CisgICAgPHBhcmE+VGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyBob3cgdG8gZ3JhYiBWNEwyIGltYWdlcyBpbiBwcG0gZm9ybWF0IGJ5Cit1c2luZyBsaWJ2NGwgaGFuZGxlcnMuIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGlzIGdyYWJiZXIgY2FuIHBvdGVudGlhbGx5IHdvcmsKK3dpdGggYW55IFY0TDIgZHJpdmVyLjwvcGFyYT4KKyAgICAmc3ViLXY0bDJncmFiLWM7CisgIDwvYXBwZW5kaXg+CisKKyAgJnN1Yi1tZWRpYS1pbmRpY2VzOworCisgICZzdWItYmlibGlvOworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3Y0bDJncmFiLmMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyZ3JhYi5jLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQxMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyZ3JhYi5jLnhtbApAQCAtMCwwICsxLDE2NCBAQAorPHByb2dyYW1saXN0aW5nPgorLyogVjRMMiB2aWRlbyBwaWN0dXJlIGdyYWJiZXIKKyAgIENvcHlyaWdodCAoQykgMjAwOSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgJmx0O21jaGVoYWJAaW5mcmFkZWFkLm9yZyZndDsKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyNpbmNsdWRlICZsdDtmY250bC5oJmd0OworI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKKyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OworI2luY2x1ZGUgJmx0O2xpbnV4L3ZpZGVvZGV2Mi5oJmd0OworI2luY2x1ZGUgIi4uL2xpYnY0bC9pbmNsdWRlL2xpYnY0bDIuaCIKKworI2RlZmluZSBDTEVBUih4KSBtZW1zZXQoJmFtcDsoeCksIDAsIHNpemVvZih4KSkKKworc3RydWN0IGJ1ZmZlciB7CisgICAgICAgIHZvaWQgICAqc3RhcnQ7CisgICAgICAgIHNpemVfdCBsZW5ndGg7Cit9OworCitzdGF0aWMgdm9pZCB4aW9jdGwoaW50IGZoLCBpbnQgcmVxdWVzdCwgdm9pZCAqYXJnKQoreworICAgICAgICBpbnQgcjsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgciA9IHY0bDJfaW9jdGwoZmgsIHJlcXVlc3QsIGFyZyk7CisgICAgICAgIH0gd2hpbGUgKHIgPT0gLTEgJmFtcDsmYW1wOyAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpOworCisgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciAlZCwgJXNcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZvcm1hdCI+djRsMl9mb3JtYXQ8L2xpbms+ICAgICAgICAgICAgICBmbXQ7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+ICAgICAgICAgICAgICBidWY7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj52NGwyX3JlcXVlc3RidWZmZXJzPC9saW5rPiAgICAgIHJlcTsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgICAgICAgICAgICAgdHlwZTsKKyAgICAgICAgZmRfc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICBmZHM7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsICAgICAgICAgICAgICAgICAgdHY7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgZmQgPSAtMTsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBpLCBuX2J1ZmZlcnM7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRldl9uYW1lID0gIi9kZXYvdmlkZW8wIjsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfbmFtZVsyNTZdOworICAgICAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmb3V0OworICAgICAgICBzdHJ1Y3QgYnVmZmVyICAgICAgICAgICAgICAgICAgICpidWZmZXJzOworCisgICAgICAgIGZkID0gdjRsMl9vcGVuKGRldl9uYW1lLCBPX1JEV1IgfCBPX05PTkJMT0NLLCAwKTsKKyAgICAgICAgaWYgKGZkICZsdDsgMCkgeworICAgICAgICAgICAgICAgIHBlcnJvcigiQ2Fubm90IG9wZW4gZGV2aWNlIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgQ0xFQVIoZm10KTsKKyAgICAgICAgZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIGZtdC5mbXQucGl4LndpZHRoICAgICAgID0gNjQwOworICAgICAgICBmbXQuZm10LnBpeC5oZWlnaHQgICAgICA9IDQ4MDsKKyAgICAgICAgZm10LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfUkdCMjQ7CisgICAgICAgIGZtdC5mbXQucGl4LmZpZWxkICAgICAgID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworICAgICAgICB4aW9jdGwoZmQsIFZJRElPQ19TX0ZNVCwgJmFtcDtmbXQpOworICAgICAgICBpZiAoZm10LmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1JHQjI0KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJMaWJ2NGwgZGlkbid0IGFjY2VwdCBSR0IyNCBmb3JtYXQuIENhbid0IHByb2NlZWQuXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChmbXQuZm10LnBpeC53aWR0aCAhPSA2NDApIHx8IChmbXQuZm10LnBpeC5oZWlnaHQgIT0gNDgwKSkKKyAgICAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IGRyaXZlciBpcyBzZW5kaW5nIGltYWdlIGF0ICVkeCVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZm10LmZtdC5waXgud2lkdGgsIGZtdC5mbXQucGl4LmhlaWdodCk7CisKKyAgICAgICAgQ0xFQVIocmVxKTsKKyAgICAgICAgcmVxLmNvdW50ID0gMjsKKyAgICAgICAgcmVxLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIHJlcS5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworICAgICAgICB4aW9jdGwoZmQsIFZJRElPQ19SRVFCVUZTLCAmYW1wO3JlcSk7CisKKyAgICAgICAgYnVmZmVycyA9IGNhbGxvYyhyZXEuY291bnQsIHNpemVvZigqYnVmZmVycykpOworICAgICAgICBmb3IgKG5fYnVmZmVycyA9IDA7IG5fYnVmZmVycyAmbHQ7IHJlcS5jb3VudDsgKytuX2J1ZmZlcnMpIHsKKyAgICAgICAgICAgICAgICBDTEVBUihidWYpOworCisgICAgICAgICAgICAgICAgYnVmLnR5cGUgICAgICAgID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgICAgICA9IFY0TDJfTUVNT1JZX01NQVA7CisgICAgICAgICAgICAgICAgYnVmLmluZGV4ICAgICAgID0gbl9idWZmZXJzOworCisgICAgICAgICAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfUVVFUllCVUYsICZhbXA7YnVmKTsKKworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbbl9idWZmZXJzXS5sZW5ndGggPSBidWYubGVuZ3RoOworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbbl9idWZmZXJzXS5zdGFydCA9IHY0bDJfbW1hcChOVUxMLCBidWYubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLCBidWYubS5vZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKE1BUF9GQUlMRUQgPT0gYnVmZmVyc1tuX2J1ZmZlcnNdLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoIm1tYXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgbl9idWZmZXJzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBDTEVBUihidWYpOworICAgICAgICAgICAgICAgIGJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworICAgICAgICAgICAgICAgIGJ1Zi5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworICAgICAgICAgICAgICAgIGJ1Zi5pbmRleCA9IGk7CisgICAgICAgICAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfUUJVRiwgJmFtcDtidWYpOworICAgICAgICB9CisgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKyAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfU1RSRUFNT04sICZhbXA7dHlwZSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyAyMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgRkRfWkVSTygmYW1wO2Zkcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBGRF9TRVQoZmQsICZhbXA7ZmRzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHR2LnR2X3NlYyA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB0di50dl91c2VjID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNlbGVjdChmZCArIDEsICZhbXA7ZmRzLCBOVUxMLCBOVUxMLCAmYW1wO3R2KTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICgociA9PSAtMSAmYW1wOyZhbXA7IChlcnJubyA9IEVJTlRSKSkpOworICAgICAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInNlbGVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm5vOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENMRUFSKGJ1Zik7CisgICAgICAgICAgICAgICAgYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgICAgICAgICAgYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisgICAgICAgICAgICAgICAgeGlvY3RsKGZkLCBWSURJT0NfRFFCVUYsICZhbXA7YnVmKTsKKworICAgICAgICAgICAgICAgIHNwcmludGYob3V0X25hbWUsICJvdXQlMDNkLnBwbSIsIGkpOworICAgICAgICAgICAgICAgIGZvdXQgPSBmb3BlbihvdXRfbmFtZSwgInciKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZvdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigiQ2Fubm90IG9wZW4gaW1hZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnByaW50Zihmb3V0LCAiUDZcbiVkICVkIDI1NVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdC5mbXQucGl4LndpZHRoLCBmbXQuZm10LnBpeC5oZWlnaHQpOworICAgICAgICAgICAgICAgIGZ3cml0ZShidWZmZXJzW2J1Zi5pbmRleF0uc3RhcnQsIGJ1Zi5ieXRlc3VzZWQsIDEsIGZvdXQpOworICAgICAgICAgICAgICAgIGZjbG9zZShmb3V0KTsKKworICAgICAgICAgICAgICAgIHhpb2N0bChmZCwgVklESU9DX1FCVUYsICZhbXA7YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisgICAgICAgIHhpb2N0bChmZCwgVklESU9DX1NUUkVBTU9GRiwgJmFtcDt0eXBlKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSAmbHQ7IG5fYnVmZmVyczsgKytpKQorICAgICAgICAgICAgICAgIHY0bDJfbXVubWFwKGJ1ZmZlcnNbaV0uc3RhcnQsIGJ1ZmZlcnNbaV0ubGVuZ3RoKTsKKyAgICAgICAgdjRsMl9jbG9zZShmZCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfNTI1LmdpZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4MGI2OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfNTI1LnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3MmMyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV81MjUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzYyNS5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTMyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzYyNS5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTIzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLmdpZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDI0MzRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfaHN5bmMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBiNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfaHN5bmMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRlb2RldjIuaC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwMDIwNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sCkBAIC0wLDAgKzEsMTY0MCBAQAorPHByb2dyYW1saXN0aW5nPgorLyoKKyAqICBWaWRlbyBmb3IgTGludXggVHdvIGhlYWRlciBmaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDA3IHRoZSBjb250cmlidXRvcnMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHJlZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogIEJTRCBsaWNlbnNlIGFzIHN0YXRlZCBiZWxvdzoKKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgICBkaXN0cmlidXRpb24uCisgKiAgMy4gVGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiAgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqICAgICAgSGVhZGVyIGZpbGUgZm9yIHY0bCBvciBWNEwyIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucworICogd2l0aCBwdWJsaWMgQVBJLgorICogQWxsIGtlcm5lbC1zcGVjaWZpYyBzdHVmZiB3ZXJlIG1vdmVkIHRvIG1lZGlhL3Y0bDItZGV2LmgsIHNvCisgKiBubyAjaWYgX19LRVJORUwgdGVzdHMgYXJlIGFsbG93ZWQgaGVyZQorICoKKyAqICAgICAgU2VlIGh0dHA6Ly9saW51eHR2Lm9yZyBmb3IgbW9yZSBpbmZvCisgKgorICogICAgICBBdXRob3I6IEJpbGwgRGlya3MgJmx0O2JpbGxAdGhlZGlya3Mub3JnJmd0OworICogICAgICAgICAgICAgIEp1c3RpbiBTY2hvZW1hbgorICogICAgICAgICAgICAgIEhhbnMgVmVya3VpbCAmbHQ7aHZlcmt1aWxAeHM0YWxsLm5sJmd0OworICogICAgICAgICAgICAgIGV0IGFsLgorICovCisjaWZuZGVmIF9fTElOVVhfVklERU9ERVYyX0gKKyNkZWZpbmUgX19MSU5VWF9WSURFT0RFVjJfSAorCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWUuaCZndDsgICAgIC8qIG5lZWQgc3RydWN0IHRpbWV2YWwgKi8KKyNlbHNlCisjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKKyNlbmRpZgorI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bGludXgvaW9jdGwuaCZndDsKKyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OworCisvKgorICogQ29tbW9uIHN0dWZmIGZvciBib3RoIFY0TDEgYW5kIFY0TDIKKyAqIE1vdmVkIGZyb20gdmlkZW9kZXYuaAorICovCisjZGVmaW5lIFZJREVPX01BWF9GUkFNRSAgICAgICAgICAgICAgIDMyCisKKyNpZm5kZWYgX19LRVJORUxfXworCisvKiBUaGVzZSBkZWZpbmVzIGFyZSBWNEwxIHNwZWNpZmljIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCB0aGUgVjRMMiBBUEkhCisgICBUaGV5IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoaXMgaGVhZGVyIGluIHRoZSBmdXR1cmUuICovCisKKyNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRSAgICAgICAgMSAgICAgICAvKiBDYW4gY2FwdHVyZSAqLworI2RlZmluZSBWSURfVFlQRV9UVU5FUiAgICAgICAgICAyICAgICAgIC8qIENhbiB0dW5lICovCisjZGVmaW5lIFZJRF9UWVBFX1RFTEVURVhUICAgICAgIDQgICAgICAgLyogRG9lcyB0ZWxldGV4dCAqLworI2RlZmluZSBWSURfVFlQRV9PVkVSTEFZICAgICAgICA4ICAgICAgIC8qIE92ZXJsYXkgb250byBmcmFtZSBidWZmZXIgKi8KKyNkZWZpbmUgVklEX1RZUEVfQ0hST01BS0VZICAgICAgMTYgICAgICAvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLworI2RlZmluZSBWSURfVFlQRV9DTElQUElORyAgICAgICAzMiAgICAgIC8qIENhbiBjbGlwICovCisjZGVmaW5lIFZJRF9UWVBFX0ZSQU1FUkFNICAgICAgIDY0ICAgICAgLyogVXNlcyB0aGUgZnJhbWUgYnVmZmVyIG1lbW9yeSAqLworI2RlZmluZSBWSURfVFlQRV9TQ0FMRVMgICAgICAgICAxMjggICAgIC8qIFNjYWxhYmxlICovCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUgICAgIDI1NiAgICAgLyogTW9ub2Nocm9tZSBvbmx5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NVQkNBUFRVUkUgICAgIDUxMiAgICAgLyogQ2FuIGNhcHR1cmUgc3ViYXJlYXMgb2YgdGhlIGltYWdlICovCisjZGVmaW5lIFZJRF9UWVBFX01QRUdfREVDT0RFUiAgIDEwMjQgICAgLyogQ2FuIGRlY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSICAgMjA0OCAgICAvKiBDYW4gZW5jb2RlIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19ERUNPREVSICA0MDk2ICAgIC8qIENhbiBkZWNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSICA4MTkyICAgIC8qIENhbiBlbmNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2VuZGlmCisKKy8qCisgKiAgICAgIE0gSSBTIEMgRSBMIEwgQSBOIEUgTyBVIFMKKyAqLworCisvKiAgRm91ci1jaGFyYWN0ZXItY29kZSAoRk9VUkNDKSAqLworI2RlZmluZSB2NGwyX2ZvdXJjYyhhLCBiLCBjLCBkKVwKKyAgICAgICAgKChfX3UzMikoYSkgfCAoKF9fdTMyKShiKSAmbHQ7Jmx0OyA4KSB8ICgoX191MzIpKGMpICZsdDsmbHQ7IDE2KSB8ICgoX191MzIpKGQpICZsdDsmbHQ7IDI0KSkKKworLyoKKyAqICAgICAgRSBOIFUgTSBTCisgKi8KK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1maWVsZCI+djRsMl9maWVsZDwvbGluaz4geworICAgICAgICBWNEwyX0ZJRUxEX0FOWSAgICAgICAgICAgPSAwLCAvKiBkcml2ZXIgY2FuIGNob29zZSBmcm9tIG5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgYm90dG9tLCBpbnRlcmxhY2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB3aGF0ZXZlciBpdCB0aGlua3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYXBwcm94aW1hdGUgLi4uICovCisgICAgICAgIFY0TDJfRklFTERfTk9ORSAgICAgICAgICA9IDEsIC8qIHRoaXMgZGV2aWNlIGhhcyBubyBmaWVsZHMgLi4uICovCisgICAgICAgIFY0TDJfRklFTERfVE9QICAgICAgICAgICA9IDIsIC8qIHRvcCBmaWVsZCBvbmx5ICovCisgICAgICAgIFY0TDJfRklFTERfQk9UVE9NICAgICAgICA9IDMsIC8qIGJvdHRvbSBmaWVsZCBvbmx5ICovCisgICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCAgICA9IDQsIC8qIGJvdGggZmllbGRzIGludGVybGFjZWQgKi8KKyAgICAgICAgVjRMMl9GSUVMRF9TRVFfVEIgICAgICAgID0gNSwgLyogYm90aCBmaWVsZHMgc2VxdWVudGlhbCBpbnRvIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHRvcC1ib3R0b20gb3JkZXIgKi8KKyAgICAgICAgVjRMMl9GSUVMRF9TRVFfQlQgICAgICAgID0gNiwgLyogc2FtZSBhcyBhYm92ZSArIGJvdHRvbS10b3Agb3JkZXIgKi8KKyAgICAgICAgVjRMMl9GSUVMRF9BTFRFUk5BVEUgICAgID0gNywgLyogYm90aCBmaWVsZHMgYWx0ZXJuYXRpbmcgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBidWZmZXJzICovCisgICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiA9IDgsIC8qIGJvdGggZmllbGRzIGludGVybGFjZWQsIHRvcCBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBhbmQgdGhlIHRvcCBmaWVsZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZCBmaXJzdCAqLworICAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgPSA5LCAvKiBib3RoIGZpZWxkcyBpbnRlcmxhY2VkLCB0b3AgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgYW5kIHRoZSBib3R0b20gZmllbGQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgZmlyc3QgKi8KK307CisjZGVmaW5lIFY0TDJfRklFTERfSEFTX1RPUChmaWVsZCkgICAgICAgXAorICAgICAgICAoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1RPUCAgICAgIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fFwKKyAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9UQiAgIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKKyNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfQk9UVE9NKGZpZWxkKSAgICBcCisgICAgICAgICgoZmllbGQpID09IFY0TDJfRklFTERfQk9UVE9NICAgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fFwKKyAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX1RCICAgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQorI2RlZmluZSBWNEwyX0ZJRUxEX0hBU19CT1RIKGZpZWxkKSAgICAgIFwKKyAgICAgICAgKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8XAorICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9CVCB8fFwKKyAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHxcCisgICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQorCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiPnY0bDJfYnVmX3R5cGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICAgICAgICA9IDEsCisgICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICAgICAgICAgPSAyLAorICAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkgICAgICAgID0gMywKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAgICAgICAgICA9IDQsCisgICAgICAgIFY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVCAgICAgICAgICAgPSA1LAorICAgICAgICBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSAgID0gNiwKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCAgICA9IDcsCisjaWYgMSAvKktFRVAqLworICAgICAgICAvKiBFeHBlcmltZW50YWwgKi8KKyAgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWSA9IDgsCisjZW5kaWYKKyAgICAgICAgVjRMMl9CVUZfVFlQRV9QUklWQVRFICAgICAgICAgICAgICA9IDB4ODAsCit9OworCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItY3RybC10eXBlIj52NGwyX2N0cmxfdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSICAgICAgID0gMSwKKyAgICAgICAgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiAgICAgICA9IDIsCisgICAgICAgIFY0TDJfQ1RSTF9UWVBFX01FTlUgICAgICAgICAgPSAzLAorICAgICAgICBWNEwyX0NUUkxfVFlQRV9CVVRUT04gICAgICAgID0gNCwKKyAgICAgICAgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0ICAgICA9IDUsCisgICAgICAgIFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1MgICAgPSA2LAorICAgICAgICBWNEwyX0NUUkxfVFlQRV9TVFJJTkcgICAgICAgID0gNywKK307CisKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi10dW5lci10eXBlIj52NGwyX3R1bmVyX3R5cGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9UVU5FUl9SQURJTyAgICAgICAgICAgICA9IDEsCisgICAgICAgIFY0TDJfVFVORVJfQU5BTE9HX1RWICAgICAgICAgPSAyLAorICAgICAgICBWNEwyX1RVTkVSX0RJR0lUQUxfVFYgICAgICAgID0gMywKK307CisKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tZW1vcnkiPnY0bDJfbWVtb3J5PC9saW5rPiB7CisgICAgICAgIFY0TDJfTUVNT1JZX01NQVAgICAgICAgICAgICAgPSAxLAorICAgICAgICBWNEwyX01FTU9SWV9VU0VSUFRSICAgICAgICAgID0gMiwKKyAgICAgICAgVjRMMl9NRU1PUllfT1ZFUkxBWSAgICAgICAgICA9IDMsCit9OworCisvKiBzZWUgYWxzbyBodHRwOi8vdmVrdG9yLnRoZW9yZW0uY2EvZ3JhcGhpY3MveWNiY3IvICovCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItY29sb3JzcGFjZSI+djRsMl9jb2xvcnNwYWNlPC9saW5rPiB7CisgICAgICAgIC8qIElUVS1SIDYwMSAtLSBicm9hZGNhc3QgTlRTQy9QQUwgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSAgICAgPSAxLAorCisgICAgICAgIC8qIDExMjUtTGluZSAoVVMpIEhEVFYgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMjQwTSAgICAgPSAyLAorCisgICAgICAgIC8qIEhEIGFuZCBtb2Rlcm4gY2FwdHVyZXMuICovCisgICAgICAgIFY0TDJfQ09MT1JTUEFDRV9SRUM3MDkgICAgICAgID0gMywKKworICAgICAgICAvKiBicm9rZW4gQlQ4NzggZXh0ZW50cyAoNjAxLCBsdW1hIHJhbmdlIDE2LTI1MyBpbnN0ZWFkIG9mIDE2LTIzNSkgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX0JUODc4ICAgICAgICAgPSA0LAorCisgICAgICAgIC8qIFRoZXNlIHNob3VsZCBiZSB1c2VmdWwuICBBc3N1bWUgNjAxIGV4dGVudHMuICovCisgICAgICAgIFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX00gID0gNSwKKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkcgPSA2LAorCisgICAgICAgIC8qIEkga25vdyB0aGVyZSB3aWxsIGJlIGNhbWVyYXMgdGhhdCBzZW5kIHRoaXMuICBTbywgdGhpcyBpcworICAgICAgICAgKiB1bnNwZWNpZmllZCBjaHJvbWF0aWNpdGllcyBhbmQgZnVsbCAwLTI1NSBvbiBlYWNoIG9mIHRoZQorICAgICAgICAgKiBZJ0NiQ3IgY29tcG9uZW50cworICAgICAgICAgKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX0pQRUcgICAgICAgICAgPSA3LAorCisgICAgICAgIC8qIEZvciBSR0IgY29sb3Vyc3BhY2VzLCB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydC4gKi8KKyAgICAgICAgVjRMMl9DT0xPUlNQQUNFX1NSR0IgICAgICAgICAgPSA4LAorfTsKKworZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXByaW9yaXR5Ij52NGwyX3ByaW9yaXR5PC9saW5rPiB7CisgICAgICAgIFY0TDJfUFJJT1JJVFlfVU5TRVQgICAgICAgPSAwLCAgLyogbm90IGluaXRpYWxpemVkICovCisgICAgICAgIFY0TDJfUFJJT1JJVFlfQkFDS0dST1VORCAgPSAxLAorICAgICAgICBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFID0gMiwKKyAgICAgICAgVjRMMl9QUklPUklUWV9SRUNPUkQgICAgICA9IDMsCisgICAgICAgIFY0TDJfUFJJT1JJVFlfREVGQVVMVCAgICAgPSBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFLAorfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiB7CisgICAgICAgIF9fczMyICAgbGVmdDsKKyAgICAgICAgX19zMzIgICB0b3A7CisgICAgICAgIF9fczMyICAgd2lkdGg7CisgICAgICAgIF9fczMyICAgaGVpZ2h0OworfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+IHsKKyAgICAgICAgX191MzIgICBudW1lcmF0b3I7CisgICAgICAgIF9fdTMyICAgZGVub21pbmF0b3I7Cit9OworCisvKgorICogICAgICBEIFIgSSBWIEUgUiAgIEMgQSBQIEEgQiBJIEwgSSBUIEkgRSBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcGFiaWxpdHkiPnY0bDJfY2FwYWJpbGl0eTwvbGluaz4geworICAgICAgICBfX3U4ICAgIGRyaXZlclsxNl07ICAgICAvKiBpLmUuaWU7ICJidHR2IiAqLworICAgICAgICBfX3U4ICAgIGNhcmRbMzJdOyAgICAgICAvKiBpLmUuaWU7ICJIYXVwcGF1Z2UgV2luVFYiICovCisgICAgICAgIF9fdTggICAgYnVzX2luZm9bMzJdOyAgIC8qICJQQ0k6IiArIHBjaV9uYW1lKHBjaV9kZXYpICovCisgICAgICAgIF9fdTMyICAgdmVyc2lvbjsgICAgICAgIC8qIHNob3VsZCB1c2UgS0VSTkVMX1ZFUlNJT04oKSAqLworICAgICAgICBfX3UzMiAgIGNhcGFiaWxpdGllczsgICAvKiBEZXZpY2UgY2FwYWJpbGl0aWVzICovCisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKiBWYWx1ZXMgZm9yICdjYXBhYmlsaXRpZXMnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgICAgICAgICAgMHgwMDAwMDAwMSAgLyogSXMgYSB2aWRlbyBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQgICAgICAgICAgIDB4MDAwMDAwMDIgIC8qIElzIGEgdmlkZW8gb3V0cHV0IGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZICAgICAgICAgIDB4MDAwMDAwMDQgIC8qIENhbiBkbyB2aWRlbyBvdmVybGF5ICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9DQVBUVVJFICAgICAgICAgICAgMHgwMDAwMDAxMCAgLyogSXMgYSByYXcgVkJJIGNhcHR1cmUgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9PVVRQVVQgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLyogSXMgYSByYXcgVkJJIG91dHB1dCBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFICAgICAweDAwMDAwMDQwICAvKiBJcyBhIHNsaWNlZCBWQkkgY2FwdHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQgICAgICAweDAwMDAwMDgwICAvKiBJcyBhIHNsaWNlZCBWQkkgb3V0cHV0IGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9SRFNfQ0FQVFVSRSAgICAgICAgICAgIDB4MDAwMDAxMDAgIC8qIFJEUyBkYXRhIGNhcHR1cmUgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUX09WRVJMQVkgICAweDAwMDAwMjAwICAvKiBDYW4gZG8gdmlkZW8gb3V0cHV0IG92ZXJsYXkgKi8KKyNkZWZpbmUgVjRMMl9DQVBfSFdfRlJFUV9TRUVLICAgICAgICAgICAweDAwMDAwNDAwICAvKiBDYW4gZG8gaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsgICovCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19PVVRQVVQgICAgICAgICAgICAgMHgwMDAwMDgwMCAgLyogSXMgYW4gUkRTIGVuY29kZXIgKi8KKworI2RlZmluZSBWNEwyX0NBUF9UVU5FUiAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAgIC8qIGhhcyBhIHR1bmVyICovCisjZGVmaW5lIFY0TDJfQ0FQX0FVRElPICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMCAgLyogaGFzIGF1ZGlvIHN1cHBvcnQgKi8KKyNkZWZpbmUgVjRMMl9DQVBfUkFESU8gICAgICAgICAgICAgICAgICAweDAwMDQwMDAwICAvKiBpcyBhIHJhZGlvIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9NT0RVTEFUT1IgICAgICAgICAgICAgIDB4MDAwODAwMDAgIC8qIGhhcyBhIG1vZHVsYXRvciAqLworCisjZGVmaW5lIFY0TDJfQ0FQX1JFQURXUklURSAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgLyogcmVhZC93cml0ZSBzeXN0ZW1jYWxscyAqLworI2RlZmluZSBWNEwyX0NBUF9BU1lOQ0lPICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAgIC8qIGFzeW5jIEkvTyAqLworI2RlZmluZSBWNEwyX0NBUF9TVFJFQU1JTkcgICAgICAgICAgICAgIDB4MDQwMDAwMDAgIC8qIHN0cmVhbWluZyBJL08gaW9jdGxzICovCisKKy8qCisgKiAgICAgIFYgSSBEIEUgTyAgIEkgTSBBIEcgRSAgIEYgTyBSIE0gQSBUCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQiPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB3aWR0aDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaGVpZ2h0OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBwaXhlbGZvcm1hdDsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWZpZWxkIj52NGwyX2ZpZWxkPC9saW5rPiAgICAgICAgIGZpZWxkOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBieXRlc3BlcmxpbmU7ICAgLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHNpemVpbWFnZTsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbG9yc3BhY2UiPnY0bDJfY29sb3JzcGFjZTwvbGluaz4gICAgY29sb3JzcGFjZTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcHJpdjsgICAgICAgICAgIC8qIHByaXZhdGUgZGF0YSwgZGVwZW5kcyBvbiBwaXhlbGZvcm1hdCAqLworfTsKKworLyogICAgICBQaXhlbCBmb3JtYXQgICAgICAgICBGT1VSQ0MgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoICBEZXNjcmlwdGlvbiAgKi8KKworLyogUkdCIGZvcm1hdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjMzMiI+VjRMMl9QSVhfRk1UX1JHQjMzMjwvbGluaz4gIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICcxJykgLyogIDggIFJHQi0zLTMtMiAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjQ0NCI+VjRMMl9QSVhfRk1UX1JHQjQ0NDwvbGluaz4gIHY0bDJfZm91cmNjKCdSJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHhycnJyIGdnZ2diYmJiICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NTUiPlY0TDJfUElYX0ZNVF9SR0I1NTU8L2xpbms+ICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnTycpIC8qIDE2ICBSR0ItNS01LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NjUiPlY0TDJfUElYX0ZNVF9SR0I1NjU8L2xpbms+ICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUCcpIC8qIDE2ICBSR0ItNS02LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NTVYIj5WNEwyX1BJWF9GTVRfUkdCNTU1WDwvbGluaz4gdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1EnKSAvKiAxNiAgUkdCLTUtNS01IEJFICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCNTY1WCI+VjRMMl9QSVhfRk1UX1JHQjU2NVg8L2xpbms+IHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdSJykgLyogMTYgIFJHQi01LTYtNSBCRSAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUJHUjI0Ij5WNEwyX1BJWF9GTVRfQkdSMjQ8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJzMnKSAvKiAyNCAgQkdSLTgtOC04ICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCMjQiPlY0TDJfUElYX0ZNVF9SR0IyNDwvbGluaz4gICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMycpIC8qIDI0ICBSR0ItOC04LTggICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1CR1IzMiI+VjRMMl9QSVhfRk1UX0JHUjMyPC9saW5rPiAgIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICc0JykgLyogMzIgIEJHUi04LTgtOC04ICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjMyIj5WNEwyX1BJWF9GTVRfUkdCMzI8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJzQnKSAvKiAzMiAgUkdCLTgtOC04LTggICAqLworCisvKiBHcmV5IGZvcm1hdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUdSRVkiPlY0TDJfUElYX0ZNVF9HUkVZPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0UnLCAnWScpIC8qICA4ICBHcmV5c2NhbGUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZMTYiPlY0TDJfUElYX0ZNVF9ZMTY8L2xpbms+ICAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzYnLCAnICcpIC8qIDE2ICBHcmV5c2NhbGUgICAgICovCisKKy8qIFBhbGV0dGUgZm9ybWF0cyAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUEFMOCI+VjRMMl9QSVhfRk1UX1BBTDg8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdQJywgJ0EnLCAnTCcsICc4JykgLyogIDggIDgtYml0IHBhbGV0dGUgKi8KKworLyogTHVtaW5hbmNlK0Nocm9taW5hbmNlIGZvcm1hdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQxMCI+VjRMMl9QSVhfRk1UX1lWVTQxMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnVScsICc5JykgLyogIDkgIFlWVSA0OjE6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlWVTQyMCI+VjRMMl9QSVhfRk1UX1lWVTQyMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnMScsICcyJykgLyogMTIgIFlWVSA0OjI6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVWVYiPlY0TDJfUElYX0ZNVF9ZVVlWPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1knLCAnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZWVVWIj5WNEwyX1BJWF9GTVRfWVlVVjwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1knLCAnWScsICdVJywgJ1YnKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVZZVSI+VjRMMl9QSVhfRk1UX1lWWVU8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnWScsICdVJykgLyogMTYgWVZVIDQ6MjoyICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1VWVZZIj5WNEwyX1BJWF9GTVRfVVlWWTwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1UnLCAnWScsICdWJywgJ1knKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtVllVWSI+VjRMMl9QSVhfRk1UX1ZZVVk8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdWJywgJ1knLCAnVScsICdZJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQyMlAiPlY0TDJfUElYX0ZNVF9ZVVY0MjJQPC9saW5rPiB2NGwyX2ZvdXJjYygnNCcsICcyJywgJzInLCAnUCcpIC8qIDE2ICBZVlU0MjIgcGxhbmFyICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY0MTFQIj5WNEwyX1BJWF9GTVRfWVVWNDExUDwvbGluaz4gdjRsMl9mb3VyY2MoJzQnLCAnMScsICcxJywgJ1AnKSAvKiAxNiAgWVZVNDExIHBsYW5hciAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWTQxUCI+VjRMMl9QSVhfRk1UX1k0MVA8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdZJywgJzQnLCAnMScsICdQJykgLyogMTIgIFlVViA0OjE6MSAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQ0NCI+VjRMMl9QSVhfRk1UX1lVVjQ0NDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHh5eXl5IHV1dXV2dnZ2ICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY1NTUiPlY0TDJfUElYX0ZNVF9ZVVY1NTU8L2xpbms+ICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnTycpIC8qIDE2ICBZVVYtNS01LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVY1NjUiPlY0TDJfUElYX0ZNVF9ZVVY1NjU8L2xpbms+ICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnUCcpIC8qIDE2ICBZVVYtNS02LTUgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVVYzMiI+VjRMMl9QSVhfRk1UX1lVVjMyPC9saW5rPiAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc0JykgLyogMzIgIFlVVi04LTgtOC04ICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQxMCI+VjRMMl9QSVhfRk1UX1lVVjQxMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc5JykgLyogIDkgIFlVViA0OjE6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQyMCI+VjRMMl9QSVhfRk1UX1lVVjQyMDwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnMScsICcyJykgLyogMTIgIFlVViA0OjI6MCAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUhJMjQwIj5WNEwyX1BJWF9GTVRfSEkyNDA8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ0gnLCAnSScsICcyJywgJzQnKSAvKiAgOCAgOC1iaXQgY29sb3IgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtSE0xMiI+VjRMMl9QSVhfRk1UX0hNMTI8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdIJywgJ00nLCAnMScsICcyJykgLyogIDggIFlVViA0OjI6MCAxNngxNiBtYWNyb2Jsb2NrcyAqLworCisvKiB0d28gcGxhbmVzIC0tIG9uZSBZLCBvbmUgQ3IgKyBDYiBpbnRlcmxlYXZlZCAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU5WMTIiPlY0TDJfUElYX0ZNVF9OVjEyPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzEnLCAnMicpIC8qIDEyICBZL0NiQ3IgNDoyOjAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1OVjIxIj5WNEwyX1BJWF9GTVRfTlYyMTwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcyJywgJzEnKSAvKiAxMiAgWS9DckNiIDQ6MjowICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTlYxNiI+VjRMMl9QSVhfRk1UX05WMTY8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICc2JykgLyogMTYgIFkvQ2JDciA0OjI6MiAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU5WNjEiPlY0TDJfUElYX0ZNVF9OVjYxPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzYnLCAnMScpIC8qIDE2ICBZL0NyQ2IgNDoyOjIgICovCisKKy8qIEJheWVyIGZvcm1hdHMgLSBzZWUgaHR0cDovL3d3dy5zaWxpY29uaW1hZ2luZy5jb20vUkdCJTIwQmF5ZXIuaHRtICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TQkdHUjgiPlY0TDJfUElYX0ZNVF9TQkdHUjg8L2xpbms+ICB2NGwyX2ZvdXJjYygnQicsICdBJywgJzgnLCAnMScpIC8qICA4ICBCR0JHLi4gR1JHUi4uICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR0JSRzgiPlY0TDJfUElYX0ZNVF9TR0JSRzg8L2xpbms+ICB2NGwyX2ZvdXJjYygnRycsICdCJywgJ1InLCAnRycpIC8qICA4ICBHQkdCLi4gUkdSRy4uICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR1JCRzgiPlY0TDJfUElYX0ZNVF9TR1JCRzg8L2xpbms+ICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0InLCAnRycpIC8qICA4ICBHUkdSLi4gQkdCRy4uICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR1JCRzEwIj5WNEwyX1BJWF9GTVRfU0dSQkcxMDwvbGluaz4gdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzAnKSAvKiAxMGJpdCByYXcgYmF5ZXIgKi8KKyAgICAgICAgLyogMTBiaXQgcmF3IGJheWVyIERQQ00gY29tcHJlc3NlZCB0byA4IGJpdHMgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNHUkJHMTBEUENNOCI+VjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNODwvbGluaz4gdjRsMl9mb3VyY2MoJ0InLCAnRCcsICcxJywgJzAnKQorICAgICAgICAvKgorICAgICAgICAgKiAxMGJpdCByYXcgYmF5ZXIsIGV4cGFuZGVkIHRvIDE2IGJpdHMKKyAgICAgICAgICogeHh4eHJycnJycnJycnJ4eHh4Z2dnZ2dnZ2dnZyB4eHh4Z2dnZ2dnZ2dnZ3h4eHhiYmJiYmJiYmJiLi4uCisgICAgICAgICAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU0JHR1IxNiI+VjRMMl9QSVhfRk1UX1NCR0dSMTY8L2xpbms+IHY0bDJfZm91cmNjKCdCJywgJ1knLCAnUicsICcyJykgLyogMTYgIEJHQkcuLiBHUkdSLi4gKi8KKworLyogY29tcHJlc3NlZCBmb3JtYXRzICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NSlBFRyI+VjRMMl9QSVhfRk1UX01KUEVHPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnTScsICdKJywgJ1AnLCAnRycpIC8qIE1vdGlvbi1KUEVHICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUpQRUciPlY0TDJfUElYX0ZNVF9KUEVHPC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ0onLCAnUCcsICdFJywgJ0cnKSAvKiBKRklGIEpQRUcgICAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1EViI+VjRMMl9QSVhfRk1UX0RWPC9saW5rPiAgICAgICB2NGwyX2ZvdXJjYygnZCcsICd2JywgJ3MnLCAnZCcpIC8qIDEzOTQgICAgICAgICAgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU1QRUciPlY0TDJfUElYX0ZNVF9NUEVHPC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdFJywgJ0cnKSAvKiBNUEVHLTEvMi80ICAgICovCisKKy8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1XTlZBIj5WNEwyX1BJWF9GTVRfV05WQTwvbGluaz4gICAgIHY0bDJfZm91cmNjKCdXJywgJ04nLCAnVicsICdBJykgLyogV2lubm92IGh3IGNvbXByZXNzICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TTjlDMTBYIj5WNEwyX1BJWF9GTVRfU045QzEwWDwvbGluaz4gIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykgLyogU045QzEweCBjb21wcmVzc2lvbiAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU045QzIwWC1JNDIwIj5WNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwPC9saW5rPiB2NGwyX2ZvdXJjYygnUycsICc5JywgJzInLCAnMCcpIC8qIFNOOUMyMHggWVVWIDQ6MjowICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1QV0MxIj5WNEwyX1BJWF9GTVRfUFdDMTwvbGluaz4gICAgIHY0bDJfZm91cmNjKCdQJywgJ1cnLCAnQycsICcxJykgLyogcHdjIG9sZGVyIHdlYmNhbSAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUFdDMiI+VjRMMl9QSVhfRk1UX1BXQzI8L2xpbms+ICAgICB2NGwyX2ZvdXJjYygnUCcsICdXJywgJ0MnLCAnMicpIC8qIHB3YyBuZXdlciB3ZWJjYW0gKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUVUNjFYMjUxIj5WNEwyX1BJWF9GTVRfRVQ2MVgyNTE8L2xpbms+IHY0bDJfZm91cmNjKCdFJywgJzYnLCAnMicsICc1JykgLyogRVQ2MVgyNTEgY29tcHJlc3Npb24gKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDEiPlY0TDJfUElYX0ZNVF9TUENBNTAxPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzEnKSAvKiBZVVlWIHBlciBsaW5lICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TUENBNTA1Ij5WNEwyX1BJWF9GTVRfU1BDQTUwNTwvbGluaz4gIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc1JykgLyogWVlVViBwZXIgbGluZSAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1BDQTUwOCI+VjRMMl9QSVhfRk1UX1NQQ0E1MDg8L2xpbms+ICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnOCcpIC8qIFlVVlkgcGVyIGxpbmUgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNQQ0E1NjEiPlY0TDJfUElYX0ZNVF9TUENBNTYxPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICc2JywgJzEnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVBBQzIwNyI+VjRMMl9QSVhfRk1UX1BBQzIwNzwvbGluaz4gICB2NGwyX2ZvdXJjYygnUCcsICcyJywgJzAnLCAnNycpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTVI5NzMxMEEiPlY0TDJfUElYX0ZNVF9NUjk3MzEwQTwvbGluaz4gdjRsMl9mb3VyY2MoJ00nLCAnMycsICcxJywgJzAnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNROTA1QyI+VjRMMl9QSVhfRk1UX1NROTA1QzwvbGluaz4gICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUEpQRyI+VjRMMl9QSVhfRk1UX1BKUEc8L2xpbms+ICAgICB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpIC8qIFBpeGFydCA3M3h4IEpQRUcgKi8KKyNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU9WNTExIj5WNEwyX1BJWF9GTVRfT1Y1MTE8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICcxJykgLyogb3Y1MTEgSlBFRyAqLworI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtT1Y1MTgiPlY0TDJfUElYX0ZNVF9PVjUxODwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzgnKSAvKiBvdjUxOCBKUEVHICovCisjZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1UTTYwMDAiPlY0TDJfUElYX0ZNVF9UTTYwMDA8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ1QnLCAnTScsICc2JywgJzAnKSAvKiB0bTU2MDAvdG02MHgwICovCisKKy8qCisgKiAgICAgIEYgTyBSIE0gQSBUICAgRSBOIFUgTSBFIFIgQSBUIEkgTyBOCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZtdGRlc2MiPnY0bDJfZm10ZGVzYzwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgIGluZGV4OyAgICAgICAgICAgICAvKiBGb3JtYXQgbnVtYmVyICAgICAgKi8KKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgdHlwZTsgICAgICAgICAgICAgIC8qIGJ1ZmZlciB0eXBlICAgICAgICAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgIGZsYWdzOworICAgICAgICBfX3U4ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uWzMyXTsgICAvKiBEZXNjcmlwdGlvbiBzdHJpbmcgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICBwaXhlbGZvcm1hdDsgICAgICAgLyogRm9ybWF0IGZvdXJjYyAgICAgICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRCAweDAwMDEKKyNkZWZpbmUgVjRMMl9GTVRfRkxBR19FTVVMQVRFRCAgIDB4MDAwMgorCisjaWYgMSAvKktFRVAqLworICAgICAgICAvKiBFeHBlcmltZW50YWwgRnJhbWUgU2l6ZSBhbmQgZnJhbWUgcmF0ZSBlbnVtZXJhdGlvbiAqLworLyoKKyAqICAgICAgRiBSIEEgTSBFICAgUyBJIFogRSAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZXR5cGVzIj52NGwyX2ZybXNpemV0eXBlczwvbGluaz4geworICAgICAgICBWNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURSAgICAgID0gMSwKKyAgICAgICAgVjRMMl9GUk1TSVpFX1RZUEVfQ09OVElOVU9VUyAgICA9IDIsCisgICAgICAgIFY0TDJfRlJNU0laRV9UWVBFX1NURVBXSVNFICAgICAgPSAzLAorfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZS1kaXNjcmV0ZSI+djRsMl9mcm1zaXplX2Rpc2NyZXRlPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHdpZHRoOyAgICAgICAgICAvKiBGcmFtZSB3aWR0aCBbcGl4ZWxdICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGhlaWdodDsgICAgICAgICAvKiBGcmFtZSBoZWlnaHQgW3BpeGVsXSAqLworfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZS1zdGVwd2lzZSI+djRsMl9mcm1zaXplX3N0ZXB3aXNlPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIG1pbl93aWR0aDsgICAgICAvKiBNaW5pbXVtIGZyYW1lIHdpZHRoIFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbWF4X3dpZHRoOyAgICAgIC8qIE1heGltdW0gZnJhbWUgd2lkdGggW3BpeGVsXSAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBzdGVwX3dpZHRoOyAgICAgLyogRnJhbWUgd2lkdGggc3RlcCBzaXplIFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbWluX2hlaWdodDsgICAgIC8qIE1pbmltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbWF4X2hlaWdodDsgICAgIC8qIE1heGltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgc3RlcF9oZWlnaHQ7ICAgIC8qIEZyYW1lIGhlaWdodCBzdGVwIHNpemUgW3BpeGVsXSAqLworfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZWVudW0iPnY0bDJfZnJtc2l6ZWVudW08L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgIC8qIEZyYW1lIHNpemUgbnVtYmVyICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHBpeGVsX2Zvcm1hdDsgICAvKiBQaXhlbCBmb3JtYXQgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgIC8qIEZyYW1lIHNpemUgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLiAqLworCisgICAgICAgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGcmFtZSBzaXplICovCisgICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZS1kaXNjcmV0ZSI+djRsMl9mcm1zaXplX2Rpc2NyZXRlPC9saW5rPiAgICBkaXNjcmV0ZTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1zaXplLXN0ZXB3aXNlIj52NGwyX2ZybXNpemVfc3RlcHdpc2U8L2xpbms+ICAgIHN0ZXB3aXNlOworICAgICAgICB9OworCisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMl07ICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCBzcGFjZSBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworLyoKKyAqICAgICAgRiBSIEEgTSBFICAgUiBBIFQgRSAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbHR5cGVzIj52NGwyX2ZybWl2YWx0eXBlczwvbGluaz4geworICAgICAgICBWNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURSAgICAgID0gMSwKKyAgICAgICAgVjRMMl9GUk1JVkFMX1RZUEVfQ09OVElOVU9VUyAgICA9IDIsCisgICAgICAgIFY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFICAgICAgPSAzLAorfTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbC1zdGVwd2lzZSI+djRsMl9mcm1pdmFsX3N0ZXB3aXNlPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICAgICBtaW47ICAgICAgICAgICAgLyogTWluaW11bSBmcmFtZSBpbnRlcnZhbCBbc10gKi8KKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICAgICAgIG1heDsgICAgICAgICAgICAvKiBNYXhpbXVtIGZyYW1lIGludGVydmFsIFtzXSAqLworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFjdCI+djRsMl9mcmFjdDwvbGluaz4gICAgICAgc3RlcDsgICAgICAgICAgIC8qIEZyYW1lIGludGVydmFsIHN0ZXAgc2l6ZSBbc10gKi8KK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZybWl2YWxlbnVtIj52NGwyX2ZybWl2YWxlbnVtPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGluZGV4OyAgICAgICAgICAvKiBGcmFtZSBmb3JtYXQgaW5kZXggKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcGl4ZWxfZm9ybWF0OyAgIC8qIFBpeGVsIGZvcm1hdCAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB3aWR0aDsgICAgICAgICAgLyogRnJhbWUgd2lkdGggKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaGVpZ2h0OyAgICAgICAgIC8qIEZyYW1lIGhlaWdodCAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogRnJhbWUgaW50ZXJ2YWwgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLiAqLworCisgICAgICAgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGcmFtZSBpbnRlcnZhbCAqLworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICAgICAgICAgICAgIGRpc2NyZXRlOworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZybWl2YWwtc3RlcHdpc2UiPnY0bDJfZnJtaXZhbF9zdGVwd2lzZTwvbGluaz4gICAgc3RlcHdpc2U7CisgICAgICAgIH07CisKKyAgICAgICAgX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkIHNwYWNlIGZvciBmdXR1cmUgdXNlICovCit9OworI2VuZGlmCisKKy8qCisgKiAgICAgIFQgSSBNIEUgQyBPIEQgRQorICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi10aW1lY29kZSI+djRsMl90aW1lY29kZTwvbGluaz4geworICAgICAgICBfX3UzMiAgIHR5cGU7CisgICAgICAgIF9fdTMyICAgZmxhZ3M7CisgICAgICAgIF9fdTggICAgZnJhbWVzOworICAgICAgICBfX3U4ICAgIHNlY29uZHM7CisgICAgICAgIF9fdTggICAgbWludXRlczsKKyAgICAgICAgX191OCAgICBob3VyczsKKyAgICAgICAgX191OCAgICB1c2VyYml0c1s0XTsKK307CisKKy8qICBUeXBlICAqLworI2RlZmluZSBWNEwyX1RDX1RZUEVfMjRGUFMgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzI1RlBTICAgICAgICAgICAgICAyCisjZGVmaW5lIFY0TDJfVENfVFlQRV8zMEZQUyAgICAgICAgICAgICAgMworI2RlZmluZSBWNEwyX1RDX1RZUEVfNTBGUFMgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzYwRlBTICAgICAgICAgICAgICA1CisKKy8qICBGbGFncyAgKi8KKyNkZWZpbmUgVjRMMl9UQ19GTEFHX0RST1BGUkFNRSAgICAgICAgICAweDAwMDEgLyogImRyb3AtZnJhbWUiIG1vZGUgKi8KKyNkZWZpbmUgVjRMMl9UQ19GTEFHX0NPTE9SRlJBTUUgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU19maWVsZCAgICAgICAgICAweDAwMEMKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU19VU0VSREVGSU5FRCAgICAweDAwMDAKKyNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU184QklUQ0hBUlMgICAgICAweDAwMDgKKy8qIFRoZSBhYm92ZSBpcyBiYXNlZCBvbiBTTVBURSB0aW1lY29kZXMgKi8KKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItanBlZ2NvbXByZXNzaW9uIj52NGwyX2pwZWdjb21wcmVzc2lvbjwvbGluaz4geworICAgICAgICBpbnQgcXVhbGl0eTsKKworICAgICAgICBpbnQgIEFQUG47ICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgQVBQIHNlZ21lbnQgdG8gYmUgd3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbXVzdCBiZSAwLi4xNSAqLworICAgICAgICBpbnQgIEFQUF9sZW47ICAgICAgICAgICAvKiBMZW5ndGggb2YgZGF0YSBpbiBKUEVHIEFQUG4gc2VnbWVudCAqLworICAgICAgICBjaGFyIEFQUF9kYXRhWzYwXTsgICAgICAvKiBEYXRhIGluIHRoZSBKUEVHIEFQUG4gc2VnbWVudC4gKi8KKworICAgICAgICBpbnQgIENPTV9sZW47ICAgICAgICAgICAvKiBMZW5ndGggb2YgZGF0YSBpbiBKUEVHIENPTSBzZWdtZW50ICovCisgICAgICAgIGNoYXIgQ09NX2RhdGFbNjBdOyAgICAgIC8qIERhdGEgaW4gSlBFRyBDT00gc2VnbWVudCAqLworCisgICAgICAgIF9fdTMyIGpwZWdfbWFya2VyczsgICAgIC8qIFdoaWNoIG1hcmtlcnMgc2hvdWxkIGdvIGludG8gdGhlIEpQRUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb3V0cHV0LiBVbmxlc3MgeW91IGV4YWN0bHkga25vdyB3aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHlvdSBkbywgbGVhdmUgdGhlbSB1bnRvdWNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElubHVkaW5nIGxlc3MgbWFya2VycyB3aWxsIG1ha2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc3VsdGluZyBjb2RlIHNtYWxsZXIsIGJ1dCB0aGVyZSB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIGZld2VyIGFwbGljYXRpb25zIHdoaWNoIGNhbiByZWFkIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgcHJlc2VuY2Ugb2YgdGhlIEFQUCBhbmQgQ09NIG1hcmtlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyBpbmZsdWVuY2VkIGJ5IEFQUF9sZW4gYW5kIENPTV9sZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogT05MWSwgbm90IGJ5IHRoaXMgcHJvcGVydHkhICovCisKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9ESFQgKDEmbHQ7Jmx0OzMpICAgIC8qIERlZmluZSBIdWZmbWFuIFRhYmxlcyAqLworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RRVCAoMSZsdDsmbHQ7NCkgICAgLyogRGVmaW5lIFF1YW50aXphdGlvbiBUYWJsZXMgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9EUkkgKDEmbHQ7Jmx0OzUpICAgIC8qIERlZmluZSBSZXN0YXJ0IEludGVydmFsICovCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfQ09NICgxJmx0OyZsdDs2KSAgICAvKiBDb21tZW50IHNlZ21lbnQgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9BUFAgKDEmbHQ7Jmx0OzcpICAgIC8qIEFwcCBzZWdtZW50LCBkcml2ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsd2F5cyB1c2UgQVBQMCAqLworfTsKKworLyoKKyAqICAgICAgTSBFIE0gTyBSIFkgLSBNIEEgUCBQIEkgTiBHICAgQiBVIEYgRiBFIFIgUworICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBjb3VudDsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgICAgIHR5cGU7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tZW1vcnkiPnY0bDJfbWVtb3J5PC9saW5rPiAgICAgICAgbWVtb3J5OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gICAgICB0eXBlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBieXRlc3VzZWQ7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZmllbGQiPnY0bDJfZmllbGQ8L2xpbms+ICAgICAgICAgZmllbGQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsICAgICAgICAgIHRpbWVzdGFtcDsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdGltZWNvZGUiPnY0bDJfdGltZWNvZGU8L2xpbms+ICAgIHRpbWVjb2RlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTsKKworICAgICAgICAvKiBtZW1vcnkgbG9jYXRpb24gKi8KKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1lbW9yeSI+djRsMl9tZW1vcnk8L2xpbms+ICAgICAgICBtZW1vcnk7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBfX3UzMiAgICAgICAgICAgb2Zmc2V0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICB1c2VycHRyOworICAgICAgICB9IG07CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5wdXQ7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOworfTsKKworLyogIEZsYWdzIGZvciAnZmxhZ3MnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTUFQUEVEICAgIDB4MDAwMSAgLyogQnVmZmVyIGlzIG1hcHBlZCAoZmxhZykgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19RVUVVRUQgICAgMHgwMDAyICAvKiBCdWZmZXIgaXMgcXVldWVkIGZvciBwcm9jZXNzaW5nICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfRE9ORSAgICAgIDB4MDAwNCAgLyogQnVmZmVyIGlzIHJlYWR5ICovCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUUgIDB4MDAwOCAgLyogSW1hZ2UgaXMgYSBrZXlmcmFtZSAoSS1mcmFtZSkgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19QRlJBTUUgICAgMHgwMDEwICAvKiBJbWFnZSBpcyBhIFAtZnJhbWUgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19CRlJBTUUgICAgMHgwMDIwICAvKiBJbWFnZSBpcyBhIEItZnJhbWUgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FQ09ERSAgMHgwMTAwICAvKiB0aW1lY29kZSBmaWVsZCBpcyB2YWxpZCAqLworI2RlZmluZSBWNEwyX0JVRl9GTEFHX0lOUFVUICAgICAweDAyMDAgIC8qIGlucHV0IGZpZWxkIGlzIHZhbGlkICovCisKKy8qCisgKiAgICAgIE8gViBFIFIgTCBBIFkgICBQIFIgRSBWIEkgRSBXCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYW1lYnVmZmVyIj52NGwyX2ZyYW1lYnVmZmVyPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHk7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGZsYWdzOworLyogRklYTUU6IGluIHRoZW9yeSB3ZSBzaG91bGQgcGFzcyBzb21ldGhpbmcgbGlrZSBQQ0kgZGV2aWNlICsgbWVtb3J5CisgKiByZWdpb24gKyBvZmZzZXQgaW5zdGVhZCBvZiBzb21lIHBoeXNpY2FsIGFkZHJlc3MgKi8KKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmJhc2U7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQiPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz4gIGZtdDsKK307CisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQuIFJlYWQgb25seSAqLworI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0VYVEVSTk9WRVJMQVkgICAgIDB4MDAwMQorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWSAgICAgICAgIDB4MDAwMgorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkcgICAgIDB4MDAwNAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0JJVE1BUF9DTElQUElORyAgIDB4MDAwOAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0FMUEhBICAgICAgIDB4MDAxMAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0dMT0JBTF9BTFBIQSAgICAgIDB4MDAyMAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQSAgIDB4MDA0MAorLyogIEZsYWdzIGZvciB0aGUgJ2ZsYWdzJyBmaWVsZC4gKi8KKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfUFJJTUFSWSAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWSAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfQ0hST01BS0VZICAgICAgICAweDAwMDQKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEEgICAgICAweDAwMDgKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBICAgICAweDAwMTAKKyNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfTE9DQUxfSU5WX0FMUEhBICAweDAwMjAKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY2xpcCI+djRsMl9jbGlwPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QiPnY0bDJfcmVjdDwvbGluaz4gICAgICAgIGM7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNsaXAiPnY0bDJfY2xpcDwvbGluaz4gICAgICAgIF9fdXNlciAqbmV4dDsKK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXdpbmRvdyI+djRsMl93aW5kb3c8L2xpbms+IHsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiAgICAgICAgdzsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWZpZWxkIj52NGwyX2ZpZWxkPC9saW5rPiAgICAgICAgIGZpZWxkOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBjaHJvbWFrZXk7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNsaXAiPnY0bDJfY2xpcDwvbGluaz4gICAgICAgIF9fdXNlciAqY2xpcHM7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGNsaXBjb3VudDsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgX191c2VyICpiaXRtYXA7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgICAgIGdsb2JhbF9hbHBoYTsKK307CisKKy8qCisgKiAgICAgIEMgQSBQIFQgVSBSIEUgICBQIEEgUiBBIE0gRSBUIEUgUiBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcHR1cmVwYXJtIj52NGwyX2NhcHR1cmVwYXJtPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBjYXBhYmlsaXR5OyAgICAvKiAgU3VwcG9ydGVkIG1vZGVzICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBjYXB0dXJlbW9kZTsgICAvKiAgQ3VycmVudCBtb2RlICovCisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgdGltZXBlcmZyYW1lOyAgLyogIFRpbWUgcGVyIGZyYW1lIGluIC4xdXMgdW5pdHMgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgICAgIGV4dGVuZGVkbW9kZTsgIC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgcmVhZGJ1ZmZlcnM7ICAgLyogICMgb2YgYnVmZmVycyBmb3IgcmVhZCAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKiAgRmxhZ3MgZm9yICdjYXBhYmlsaXR5JyBhbmQgJ2NhcHR1cmVtb2RlJyBmaWVsZHMgKi8KKyNkZWZpbmUgVjRMMl9NT0RFX0hJR0hRVUFMSVRZICAgMHgwMDAxICAvKiAgSGlnaCBxdWFsaXR5IGltYWdpbmcgbW9kZSAqLworI2RlZmluZSBWNEwyX0NBUF9USU1FUEVSRlJBTUUgICAweDEwMDAgIC8qICB0aW1lcGVyZnJhbWUgZmllbGQgaXMgc3VwcG9ydGVkICovCisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dHBhcm0iPnY0bDJfb3V0cHV0cGFybTwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgY2FwYWJpbGl0eTsgICAvKiAgU3VwcG9ydGVkIG1vZGVzICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBvdXRwdXRtb2RlOyAgIC8qICBDdXJyZW50IG1vZGUgKi8KKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICB0aW1lcGVyZnJhbWU7IC8qICBUaW1lIHBlciBmcmFtZSBpbiBzZWNvbmRzICovCisgICAgICAgIF9fdTMyICAgICAgICAgICAgICBleHRlbmRlZG1vZGU7IC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgd3JpdGVidWZmZXJzOyAvKiAgIyBvZiBidWZmZXJzIGZvciB3cml0ZSAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKgorICogICAgICBJIE4gUCBVIFQgICBJIE0gQSBHIEUgICBDIFIgTyBQIFAgSSBOIEcKKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY3JvcGNhcCI+djRsMl9jcm9wY2FwPC9saW5rPiB7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gICAgICB0eXBlOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZWN0Ij52NGwyX3JlY3Q8L2xpbms+ICAgICAgICBib3VuZHM7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QiPnY0bDJfcmVjdDwvbGluaz4gICAgICAgIGRlZnJlY3Q7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICAgICBwaXhlbGFzcGVjdDsKK307CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3AiPnY0bDJfY3JvcDwvbGluaz4geworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiPnY0bDJfYnVmX3R5cGU8L2xpbms+ICAgICAgdHlwZTsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiAgICAgICAgYzsKK307CisKKy8qCisgKiAgICAgIEEgTiBBIEwgTyBHICAgViBJIEQgRSBPICAgUyBUIEEgTiBEIEEgUiBECisgKi8KKwordHlwZWRlZiBfX3U2NCB2NGwyX3N0ZF9pZDsKKworLyogb25lIGJpdCBmb3IgZWFjaCAqLworI2RlZmluZSBWNEwyX1NURF9QQUxfQiAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDEpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0cgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA0KQorI2RlZmluZSBWNEwyX1NURF9QQUxfSCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDgpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9JICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAxMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0QgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDIwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRDEgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwNDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9LICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA4MCkKKworI2RlZmluZSBWNEwyX1NURF9QQUxfTSAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9OICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX05jICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwNDAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfNjAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCisKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAxMDAwKQorI2RlZmluZSBWNEwyX1NURF9OVFNDX01fSlAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDIwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA4MDAwKQorCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0IgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDIwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9HICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwNDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0ggICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDA4MDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSyAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMTAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LMSAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAyMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDQwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTEMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwODAwMDAwKQorCisvKiBBVFNDL0hEVFYgKi8KKyNkZWZpbmUgVjRMMl9TVERfQVRTQ184X1ZTQiAgICAgKCh2NGwyX3N0ZF9pZCkweDAxMDAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9BVFNDXzE2X1ZTQiAgICAoKHY0bDJfc3RkX2lkKTB4MDIwMDAwMDApCisKKy8qIEZJWE1FOgorICAgQWx0aG91Z2ggc3RkX2lkIGlzIDY0IGJpdHMsIHRoZXJlIGlzIGFuIGlzc3VlIG9uIFBQQzMyIGFyY2hpdGVjdHVyZSB0aGF0CisgICBtYWtlcyBzd2l0Y2goX191NjQpIHRvIGJyZWFrLiBTbywgdGhlcmUncyBhIGhhY2sgb24gdjRsMi1jb21tb24uYyByb3VuZGluZworICAgdGhpcyB2YWx1ZSB0byAzMiBiaXRzLgorICAgQXMsIGN1cnJlbnRseSwgdGhlIG1heCB2YWx1ZSBpcyBmb3IgVjRMMl9TVERfQVRTQ18xNl9WU0IgKDMwIGJpdHMgd2lkZSksCisgICBpdCBzaG91bGQgd29yayBmaW5lLiBIb3dldmVyLCBpZiBuZWVkZWQgdG8gYWRkIG1vcmUgdGhhbiB0d28gc3RhbmRhcmRzLAorICAgdjRsMi1jb21tb24uYyBzaG91bGQgYmUgZml4ZWQuCisgKi8KKworLyogc29tZSBtZXJnZWQgc3RhbmRhcmRzICovCisjZGVmaW5lIFY0TDJfU1REX01OICAgICAoVjRMMl9TVERfUEFMX018VjRMMl9TVERfUEFMX058VjRMMl9TVERfUEFMX05jfFY0TDJfU1REX05UU0MpCisjZGVmaW5lIFY0TDJfU1REX0IgICAgICAoVjRMMl9TVERfUEFMX0J8VjRMMl9TVERfUEFMX0IxfFY0TDJfU1REX1NFQ0FNX0IpCisjZGVmaW5lIFY0TDJfU1REX0dIICAgICAoVjRMMl9TVERfUEFMX0d8VjRMMl9TVERfUEFMX0h8VjRMMl9TVERfU0VDQU1fR3xWNEwyX1NURF9TRUNBTV9IKQorI2RlZmluZSBWNEwyX1NURF9ESyAgICAgKFY0TDJfU1REX1BBTF9ES3xWNEwyX1NURF9TRUNBTV9ESykKKworLyogc29tZSBjb21tb24gbmVlZGVkIHN0dWZmICovCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CRyAgICAgICAgIChWNEwyX1NURF9QQUxfQiAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfQjEgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfRykKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0RLICAgICAgICAgKFY0TDJfU1REX1BBTF9EICAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9EMSAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9LKQorI2RlZmluZSBWNEwyX1NURF9QQUwgICAgICAgICAgICAoVjRMMl9TVERfUEFMX0JHICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0RLICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0ggICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0kpCisjZGVmaW5lIFY0TDJfU1REX05UU0MgICAgICAgICAgIChWNEwyX1NURF9OVFNDX00gICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDX01fSlAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDX01fS1IpCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0RLICAgICAgIChWNEwyX1NURF9TRUNBTV9EICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9TRUNBTV9LICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9TRUNBTV9LMSkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU0gICAgICAgICAgKFY0TDJfU1REX1NFQ0FNX0IgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0ggICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0RLICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0xDKQorCisjZGVmaW5lIFY0TDJfU1REXzUyNV82MCAgICAgICAgIChWNEwyX1NURF9QQUxfTSAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfNjAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDICAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9OVFNDXzQ0MykKKyNkZWZpbmUgVjRMMl9TVERfNjI1XzUwICAgICAgICAgKFY0TDJfU1REX1BBTCAgICAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9OICAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9OYyAgICAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNKQorI2RlZmluZSBWNEwyX1NURF9BVFNDICAgICAgICAgICAoVjRMMl9TVERfQVRTQ184X1ZTQiAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfQVRTQ18xNl9WU0IpCisKKyNkZWZpbmUgVjRMMl9TVERfVU5LTk9XTiAgICAgICAgMAorI2RlZmluZSBWNEwyX1NURF9BTEwgICAgICAgICAgICAoVjRMMl9TVERfNTI1XzYwICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfNjI1XzUwKQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zdGFuZGFyZCI+djRsMl9zdGFuZGFyZDwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBpbmRleDsKKyAgICAgICAgdjRsMl9zdGRfaWQgICAgICAgICAgaWQ7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgIG5hbWVbMjRdOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFjdCI+djRsMl9mcmFjdDwvbGluaz4gICAgZnJhbWVwZXJpb2Q7IC8qIEZyYW1lcywgbm90IGZpZWxkcyAqLworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBmcmFtZWxpbmVzOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICByZXNlcnZlZFs0XTsKK307CisKKy8qCisgKiAgICAgIFYgSSBEIEUgTyAgIEkgTiBQIFUgVCBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWlucHV0Ij52NGwyX2lucHV0PC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICBpbmRleDsgICAgICAgICAgICAgLyogIFdoaWNoIGlucHV0ICovCisgICAgICAgIF9fdTggICAgICAgICBuYW1lWzMyXTsgICAgICAgICAgLyogIExhYmVsICovCisgICAgICAgIF9fdTMyICAgICAgICB0eXBlOyAgICAgICAgICAgICAgLyogIFR5cGUgb2YgaW5wdXQgKi8KKyAgICAgICAgX191MzIgICAgICAgIGF1ZGlvc2V0OyAgICAgICAgICAvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLworICAgICAgICBfX3UzMiAgICAgICAgdHVuZXI7ICAgICAgICAgICAgIC8qICBBc3NvY2lhdGVkIHR1bmVyICovCisgICAgICAgIHY0bDJfc3RkX2lkICBzdGQ7CisgICAgICAgIF9fdTMyICAgICAgICBzdGF0dXM7CisgICAgICAgIF9fdTMyICAgICAgICByZXNlcnZlZFs0XTsKK307CisKKy8qICBWYWx1ZXMgZm9yIHRoZSAndHlwZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9JTlBVVF9UWVBFX1RVTkVSICAgICAgICAgICAxCisjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEgICAgICAgICAgMgorCisvKiBmaWVsZCAnc3RhdHVzJyAtIGdlbmVyYWwgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19QT1dFUiAgICAweDAwMDAwMDAxICAvKiBBdHRhY2hlZCBkZXZpY2UgaXMgb2ZmICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fU0lHTkFMICAgMHgwMDAwMDAwMgorI2RlZmluZSBWNEwyX0lOX1NUX05PX0NPTE9SICAgIDB4MDAwMDAwMDQKKworLyogZmllbGQgJ3N0YXR1cycgLSBzZW5zb3Igb3JpZW50YXRpb24gKi8KKy8qIElmIHNlbnNvciBpcyBtb3VudGVkIHVwc2lkZSBkb3duIHNldCBib3RoIGJpdHMgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9IRkxJUCAgICAgICAweDAwMDAwMDEwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCBob3Jpem9udGFsbHkgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9WRkxJUCAgICAgICAweDAwMDAwMDIwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCB2ZXJ0aWNhbGx5ICovCisKKy8qIGZpZWxkICdzdGF0dXMnIC0gYW5hbG9nICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fSF9MT0NLICAgMHgwMDAwMDEwMCAgLyogTm8gaG9yaXpvbnRhbCBzeW5jIGxvY2sgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9DT0xPUl9LSUxMICAweDAwMDAwMjAwICAvKiBDb2xvciBraWxsZXIgaXMgYWN0aXZlICovCisKKy8qIGZpZWxkICdzdGF0dXMnIC0gZGlnaXRhbCAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX1NZTkMgICAgIDB4MDAwMTAwMDAgIC8qIE5vIHN5bmNocm9uaXphdGlvbiBsb2NrICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fRVFVICAgICAgMHgwMDAyMDAwMCAgLyogTm8gZXF1YWxpemVyIGxvY2sgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSICAweDAwMDQwMDAwICAvKiBDYXJyaWVyIHJlY292ZXJ5IGZhaWxlZCAqLworCisvKiBmaWVsZCAnc3RhdHVzJyAtIFZDUiBhbmQgc2V0LXRvcCBib3ggKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9NQUNST1ZJU0lPTiAweDAxMDAwMDAwICAvKiBNYWNyb3Zpc2lvbiBkZXRlY3RlZCAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX0FDQ0VTUyAgIDB4MDIwMDAwMDAgIC8qIENvbmRpdGlvbmFsIGFjY2VzcyBkZW5pZWQgKi8KKyNkZWZpbmUgVjRMMl9JTl9TVF9WVFIgICAgICAgICAweDA0MDAwMDAwICAvKiBWVFIgdGltZSBjb25zdGFudCAqLworCisvKgorICogICAgICBWIEkgRCBFIE8gICBPIFUgVCBQIFUgVCBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dCI+djRsMl9vdXRwdXQ8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgIGluZGV4OyAgICAgICAgICAgICAvKiAgV2hpY2ggb3V0cHV0ICovCisgICAgICAgIF9fdTggICAgICAgICBuYW1lWzMyXTsgICAgICAgICAgLyogIExhYmVsICovCisgICAgICAgIF9fdTMyICAgICAgICB0eXBlOyAgICAgICAgICAgICAgLyogIFR5cGUgb2Ygb3V0cHV0ICovCisgICAgICAgIF9fdTMyICAgICAgICBhdWRpb3NldDsgICAgICAgICAgLyogIEFzc29jaWF0ZWQgYXVkaW9zIChiaXRmaWVsZCkgKi8KKyAgICAgICAgX191MzIgICAgICAgIG1vZHVsYXRvcjsgICAgICAgICAvKiAgQXNzb2NpYXRlZCBtb2R1bGF0b3IgKi8KKyAgICAgICAgdjRsMl9zdGRfaWQgIHN0ZDsKKyAgICAgICAgX191MzIgICAgICAgIHJlc2VydmVkWzRdOworfTsKKy8qICBWYWx1ZXMgZm9yIHRoZSAndHlwZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1IgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0cgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZICAgICAgIDMKKworLyoKKyAqICAgICAgQyBPIE4gVCBSIE8gTCBTCisgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbnRyb2wiPnY0bDJfY29udHJvbDwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBpZDsKKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgdmFsdWU7Cit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1leHQtY29udHJvbCI+djRsMl9leHRfY29udHJvbDwvbGluaz4geworICAgICAgICBfX3UzMiBpZDsKKyAgICAgICAgX191MzIgc2l6ZTsKKyAgICAgICAgX191MzIgcmVzZXJ2ZWQyWzFdOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgX19zMzIgdmFsdWU7CisgICAgICAgICAgICAgICAgX19zNjQgdmFsdWU2NDsKKyAgICAgICAgICAgICAgICBjaGFyICpzdHJpbmc7CisgICAgICAgIH07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2xzIj52NGwyX2V4dF9jb250cm9sczwvbGluaz4geworICAgICAgICBfX3UzMiBjdHJsX2NsYXNzOworICAgICAgICBfX3UzMiBjb3VudDsKKyAgICAgICAgX191MzIgZXJyb3JfaWR4OworICAgICAgICBfX3UzMiByZXNlcnZlZFsyXTsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2wiPnY0bDJfZXh0X2NvbnRyb2w8L2xpbms+ICpjb250cm9sczsKK307CisKKy8qICBWYWx1ZXMgZm9yIGN0cmxfY2xhc3MgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX1VTRVIgMHgwMDk4MDAwMCAvKiBPbGQtc3R5bGUgJ3VzZXInIGNvbnRyb2xzICovCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19NUEVHIDB4MDA5OTAwMDAgLyogTVBFRy1jb21wcmVzc2lvbiBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIDB4MDA5YTAwMDAgICAgICAgLyogQ2FtZXJhIGNsYXNzIGNvbnRyb2xzICovCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19GTV9UWCAweDAwOWIwMDAwICAgICAgICAvKiBGTSBNb2R1bGF0b3IgY29udHJvbCBjbGFzcyAqLworCisjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICAgICAgICAgKDB4MGZmZmZmZmYpCisjZGVmaW5lIFY0TDJfQ1RSTF9JRDJDTEFTUyhpZCkgICAgKChpZCkgJmFtcDsgMHgwZmZmMDAwMFVMKQorI2RlZmluZSBWNEwyX0NUUkxfRFJJVkVSX1BSSVYoaWQpICgoKGlkKSAmYW1wOyAweGZmZmYpICZndDs9IDB4MTAwMCkKKworLyogIFVzZWQgaW4gdGhlIFZJRElPQ19RVUVSWUNUUkwgaW9jdGwgZm9yIHF1ZXJ5aW5nIGNvbnRyb2xzICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1xdWVyeWN0cmwiPnY0bDJfcXVlcnljdHJsPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgIGlkOworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItY3RybC10eXBlIj52NGwyX2N0cmxfdHlwZTwvbGluaz4gIHR5cGU7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgIG5hbWVbMzJdOyAgLyogV2hhdGV2ZXIgKi8KKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgbWluaW11bTsgICAvKiBOb3RlIHNpZ25lZG5lc3MgKi8KKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgbWF4aW11bTsKKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgc3RlcDsKKyAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgZGVmYXVsdF92YWx1ZTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgZmxhZ3M7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgIHJlc2VydmVkWzJdOworfTsKKworLyogIFVzZWQgaW4gdGhlIFZJRElPQ19RVUVSWU1FTlUgaW9jdGwgZm9yIHF1ZXJ5aW5nIG1lbnUgaXRlbXMgKi8KK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXF1ZXJ5bWVudSI+djRsMl9xdWVyeW1lbnU8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgIGlkOworICAgICAgICBfX3UzMiAgICAgICAgICAgaW5kZXg7CisgICAgICAgIF9fdTggICAgICAgICAgICBuYW1lWzMyXTsgICAgICAgLyogV2hhdGV2ZXIgKi8KKyAgICAgICAgX191MzIgICAgICAgICAgIHJlc2VydmVkOworfTsKKworLyogIENvbnRyb2wgZmxhZ3MgICovCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSAgICAgICAgMHgwMDA0CisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1VQREFURSAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1NMSURFUiAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1dSSVRFX09OTFkgICAgICAgMHgwMDQwCisKKy8qICBRdWVyeSBmbGFnLCB0byBiZSBPUmVkIHdpdGggdGhlIGNvbnRyb2wgSUQgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMICAgICAgICAweDgwMDAwMDAwCisKKy8qICBVc2VyLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLworI2RlZmluZSBWNEwyX0NJRF9CQVNFICAgICAgICAgICAgICAgICAgIChWNEwyX0NUUkxfQ0xBU1NfVVNFUiB8IDB4OTAwKQorI2RlZmluZSBWNEwyX0NJRF9VU0VSX0JBU0UgICAgICAgICAgICAgIFY0TDJfQ0lEX0JBU0UKKy8qICBJRHMgcmVzZXJ2ZWQgZm9yIGRyaXZlciBzcGVjaWZpYyBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgICAgICAgICAgIDB4MDgwMDAwMDAKKworI2RlZmluZSBWNEwyX0NJRF9VU0VSX0NMQVNTICAgICAgICAgICAgIChWNEwyX0NUUkxfQ0xBU1NfVVNFUiB8IDEpCisjZGVmaW5lIFY0TDJfQ0lEX0JSSUdIVE5FU1MgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMCkKKyNkZWZpbmUgVjRMMl9DSURfQ09OVFJBU1QgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxKQorI2RlZmluZSBWNEwyX0NJRF9TQVRVUkFUSU9OICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIpCisjZGVmaW5lIFY0TDJfQ0lEX0hVRSAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMykKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fVk9MVU1FICAgICAgICAgICAoVjRMMl9DSURfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBU1MgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrNykKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fVFJFQkxFICAgICAgICAgICAoVjRMMl9DSURfQkFTRSs4KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19NVVRFICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzkpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMTApCisjZGVmaW5lIFY0TDJfQ0lEX0JMQUNLX0xFVkVMICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMTEpIC8qIERlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFICAgICAoVjRMMl9DSURfQkFTRSsxMikKKyNkZWZpbmUgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSAgICAgICAoVjRMMl9DSURfQkFTRSsxMykKKyNkZWZpbmUgVjRMMl9DSURfUkVEX0JBTEFOQ0UgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNCkKKyNkZWZpbmUgVjRMMl9DSURfQkxVRV9CQUxBTkNFICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNSkKKyNkZWZpbmUgVjRMMl9DSURfR0FNTUEgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNikKKyNkZWZpbmUgVjRMMl9DSURfV0hJVEVORVNTICAgICAgICAgICAgICAoVjRMMl9DSURfR0FNTUEpIC8qIERlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkUgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxNykKKyNkZWZpbmUgVjRMMl9DSURfQVVUT0dBSU4gICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxOCkKKyNkZWZpbmUgVjRMMl9DSURfR0FJTiAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxOSkKKyNkZWZpbmUgVjRMMl9DSURfSEZMSVAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyMCkKKyNkZWZpbmUgVjRMMl9DSURfVkZMSVAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyMSkKKworLyogRGVwcmVjYXRlZDsgdXNlIFY0TDJfQ0lEX1BBTl9SRVNFVCBhbmQgVjRMMl9DSURfVElMVF9SRVNFVCAqLworI2RlZmluZSBWNEwyX0NJRF9IQ0VOVEVSICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIyKQorI2RlZmluZSBWNEwyX0NJRF9WQ0VOVEVSICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIzKQorCisjZGVmaW5lIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZICAgKFY0TDJfQ0lEX0JBU0UrMjQpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItcG93ZXItbGluZS1mcmVxdWVuY3kiPnY0bDJfcG93ZXJfbGluZV9mcmVxdWVuY3k8L2xpbms+IHsKKyAgICAgICAgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgID0gMCwKKyAgICAgICAgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAgICAgID0gMSwKKyAgICAgICAgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAgICAgID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX0hVRV9BVVRPICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyNSkKKyNkZWZpbmUgVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSAgICAgIChWNEwyX0NJRF9CQVNFKzI2KQorI2RlZmluZSBWNEwyX0NJRF9TSEFSUE5FU1MgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMjcpCisjZGVmaW5lIFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04gICAgICAgICAoVjRMMl9DSURfQkFTRSsyOCkKKyNkZWZpbmUgVjRMMl9DSURfQ0hST01BX0FHQyAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzI5KQorI2RlZmluZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVIgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzApCisjZGVmaW5lIFY0TDJfQ0lEX0NPTE9SRlggICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMSkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1jb2xvcmZ4Ij52NGwyX2NvbG9yZng8L2xpbms+IHsKKyAgICAgICAgVjRMMl9DT0xPUkZYX05PTkUgICAgICAgPSAwLAorICAgICAgICBWNEwyX0NPTE9SRlhfQlcgICAgICAgICA9IDEsCisgICAgICAgIFY0TDJfQ09MT1JGWF9TRVBJQSAgICAgID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9CUklHSFRORVNTICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMikKKyNkZWZpbmUgVjRMMl9DSURfQkFORF9TVE9QX0ZJTFRFUiAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzMzKQorCisvKiBsYXN0IENJRCArIDEgKi8KKyNkZWZpbmUgVjRMMl9DSURfTEFTVFAxICAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzM0KQorCisvKiAgTVBFRy1jbGFzcyBjb250cm9sIElEcyBkZWZpbmVkIGJ5IFY0TDIgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19CQVNFICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4OTAwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NMQVNTICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMSkKKworLyogIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFICAgICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSswKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXR5cGUiPnY0bDJfbXBlZ19zdHJlYW1fdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMgICA9IDAsIC8qIE1QRUctMiBwcm9ncmFtIHN0cmVhbSAqLworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMgICA9IDEsIC8qIE1QRUctMiB0cmFuc3BvcnQgc3RyZWFtICovCisgICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9TUyAgID0gMiwgLyogTVBFRy0xIHN5c3RlbSBzdHJlYW0gKi8KKyAgICAgICAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX0RWRCAgPSAzLCAvKiBNUEVHLTIgRFZELWNvbXBhdGlibGUgc3RyZWFtICovCisgICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9WQ0QgID0gNCwgLyogTVBFRy0xIFZDRC1jb21wYXRpYmxlIHN0cmVhbSAqLworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCA9IDUsIC8qIE1QRUctMiBTVkNELWNvbXBhdGlibGUgc3RyZWFtICovCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU8gICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU8gICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSszKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU8gICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU8gICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs2KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSs3KQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQiPnY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdDwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSA9IDAsICAvKiBObyBWQkkgaW4gdGhlIE1QRUcgc3RyZWFtICovCisgICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWID0gMSwgIC8qIFZCSSBpbiBwcml2YXRlIHBhY2tldHMsIElWVFYgZm9ybWF0ICovCit9OworCisvKiAgTVBFRyBhdWRpbyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVEgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDApCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1zYW1wbGluZy1mcmVxIj52NGwyX21wZWdfYXVkaW9fc2FtcGxpbmdfZnJlcTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAgPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAxKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctYXVkaW8tZW5jb2RpbmciPnY0bDJfbXBlZ19hdWRpb19lbmNvZGluZzwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMSA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzMgPSAyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDICAgICA9IDMsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMgICAgID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURSAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLWwxLWJpdHJhdGUiPnY0bDJfbXBlZ19hdWRpb19sMV9iaXRyYXRlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySyAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV82NEsgID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfOTZLICA9IDIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzEyOEsgPSAzLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xNjBLID0gNCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTkySyA9IDUsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzIyNEsgPSA2LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yNTZLID0gNywKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjg4SyA9IDgsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMyMEsgPSA5LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zNTJLID0gMTAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM4NEsgPSAxMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDE2SyA9IDEyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80NDhLID0gMTMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEUgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDMpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1sMi1iaXRyYXRlIj52NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMksgID0gMCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzU2SyAgPSAyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV82NEsgID0gMywKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfODBLICA9IDQsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzk2SyAgPSA1LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMTJLID0gNiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTI4SyA9IDcsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE2MEsgPSA4LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLID0gOSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjI0SyA9IDEwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLID0gMTEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMyMEsgPSAxMiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SyA9IDEzLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA0KQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctYXVkaW8tbDMtYml0cmF0ZSI+djRsMl9tcGVnX2F1ZGlvX2wzX2JpdHJhdGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQwSyAgPSAxLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80OEsgID0gMiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNTZLICA9IDMsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzY0SyAgPSA0LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV84MEsgID0gNSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfOTZLICA9IDYsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzExMksgPSA3LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xMjhLID0gOCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTYwSyA9IDksCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MksgPSAxMCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMjI0SyA9IDExLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yNTZLID0gMTIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEsgPSAxMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSAgICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwNSkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLW1vZGUiPnY0bDJfbXBlZ19hdWRpb19tb2RlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyAgICAgICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTyA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0RVQUwgICAgICAgICA9IDIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX01PTk8gICAgICAgICA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDYpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1tb2RlLWV4dGVuc2lvbiI+djRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80ICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF84ICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xMiA9IDIsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDcpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1lbXBoYXNpcyI+djRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FICAgICAgICAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfNTBfRElWXzE1X3VTID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNyAgICA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQyAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDgpCitlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1jcmMiPnY0bDJfbXBlZ19hdWRpb19jcmM8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0NSQ19OT05FICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NVVRFICAgICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzExMSkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLWFjMy1iaXRyYXRlIj52NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySyAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDBLICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80OEsgID0gMiwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SyAgPSAzLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjRLICA9IDQsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV84MEsgID0gNSwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SyAgPSA2LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTEySyA9IDcsCisgICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMjhLID0gOCwKKyAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE2MEsgPSA5LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTkySyA9IDEwLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0SyA9IDExLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SyA9IDEyLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzIwSyA9IDEzLAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SyA9IDE0LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SyA9IDE1LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTEySyA9IDE2LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTc2SyA9IDE3LAorICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjQwSyA9IDE4LAorfTsKKworLyogIE1QRUcgdmlkZW8gKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORyAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmlkZW8tZW5jb2RpbmciPnY0bDJfbXBlZ192aWRlb19lbmNvZGluZzwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xICAgICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIgICAgID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMgPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QgICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAxKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmlkZW8tYXNwZWN0Ij52NGwyX21wZWdfdmlkZW9fYXNwZWN0PC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxICAgICA9IDAsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzICAgICA9IDEsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSAgICA9IDIsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMjIxeDEwMCA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkUgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwMykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRSAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDUpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwNikKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZpZGVvLWJpdHJhdGUtbW9kZSI+djRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiA9IDAsCisgICAgICAgIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSID0gMSwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUsgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA4KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT04gKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURSAgICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIxMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVViAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjExKQorCisvKiAgTVBFRy1jbGFzcyBjb250cm9sIElEcyBzcGVjaWZpYyB0byB0aGUgQ1gyMzQxeCBkcml2ZXIgYXMgZGVmaW5lZCBieSBWNEwyICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMDAwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERSAgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSswKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctY3gyMzQxeC12aWRlby1zcGF0aWFsLWZpbHRlci1tb2RlIj52NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPICAgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRSAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMikKK2VudW0gPGxpbmsgbGlua2VuZD0ibHVtYS1zcGF0aWFsLWZpbHRlci10eXBlIj52NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGU8L2xpbms+IHsKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX1ZFUlQgICAgICAgICAgICAgID0gMiwKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX0hWX1NFUEFSQUJMRSAgICAgID0gMywKKyAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX1NZTV9OT05fU0VQQVJBQkxFID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRSAgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCitlbnVtIDxsaW5rIGxpbmtlbmQ9ImNocm9tYS1zcGF0aWFsLWZpbHRlci10eXBlIj52NGwyX21wZWdfY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgICAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFICAgICAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNCkKK2VudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tdGVtcG9yYWwtZmlsdGVyLW1vZGUiPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlPC9saW5rPiB7CisgICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCisgICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX0FVVE8gICA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs2KQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctY3gyMzQxeC12aWRlby1tZWRpYW4tZmlsdGVyLXR5cGUiPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZTwvbGluaz4geworICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfT0ZGICAgICAgPSAwLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SICAgICAgPSAxLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfVkVSVCAgICAgPSAyLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SX1ZFUlQgPSAzLAorICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfRElBRyAgICAgPSA0LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9UT1AgICAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX0JPVFRPTSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX1RPUCAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMTApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9TVFJFQU1fSU5TRVJUX05BVl9QQUNLRVRTICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzExKQorCisvKiAgQ2FtZXJhIGNsYXNzIGNvbnRyb2wgSURzICovCisjZGVmaW5lIFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFICAgICAgKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKKyNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDEpCisKKyNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQVVUTyAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxKQorZW51bSAgPGxpbmsgbGlua2VuZD0idjRsMi1leHBvc3VyZS1hdXRvLXR5cGUiPnY0bDJfZXhwb3N1cmVfYXV0b190eXBlPC9saW5rPiB7CisgICAgICAgIFY0TDJfRVhQT1NVUkVfQVVUTyA9IDAsCisgICAgICAgIFY0TDJfRVhQT1NVUkVfTUFOVUFMID0gMSwKKyAgICAgICAgVjRMMl9FWFBPU1VSRV9TSFVUVEVSX1BSSU9SSVRZID0gMiwKKyAgICAgICAgVjRMMl9FWFBPU1VSRV9BUEVSVFVSRV9QUklPUklUWSA9IDMKK307CisjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMikKKyNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWSAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszKQorCisjZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRUxBVElWRSAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNCkKKyNkZWZpbmUgVjRMMl9DSURfVElMVF9SRUxBVElWRSAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9QQU5fUkVTRVQgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNykKKworI2RlZmluZSBWNEwyX0NJRF9QQU5fQUJTT0xVVEUgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzgpCisjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOSkKKworI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURSAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEwKQorI2RlZmluZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRSAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzExKQorI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BVVRPICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEyKQorCisjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQUJTT0xVVEUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTMpCisjZGVmaW5lIFY0TDJfQ0lEX1pPT01fUkVMQVRJVkUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTQpCisjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQ09OVElOVU9VUyAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTUpCisKKyNkZWZpbmUgVjRMMl9DSURfUFJJVkFDWSAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNikKKworLyogRk0gTW9kdWxhdG9yIGNsYXNzIGNvbnRyb2wgSURzICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgICAgICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMHg5MDApCisjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTICAgICAgICAgICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMSkKKworI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUEkgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAyKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFRZICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAzKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRSAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA1KQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVCAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA2KQorCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfRU5BQkxFRCAgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY0KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRSAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA2NSkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fTElNSVRFUl9ERVZJQVRJT04gICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjYpCisKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRCAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODApCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU4gICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgxKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MikKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUUgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODMpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDg0KQorCisjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRCAgICAgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk2KQorI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTiAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA5NykKKyNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1kgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTgpCisKKyNkZWZpbmUgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUyAgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQorZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXByZWVtcGhhc2lzIj52NGwyX3ByZWVtcGhhc2lzPC9saW5rPiB7CisgICAgICAgIFY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQgICAgICAgPSAwLAorICAgICAgICBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTICAgICAgICAgID0gMSwKKyAgICAgICAgVjRMMl9QUkVFTVBIQVNJU183NV91UyAgICAgICAgICA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTMpCisjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExNCkKKworLyoKKyAqICAgICAgVCBVIE4gSSBOIEcKKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdHVuZXIiPnY0bDJfdHVuZXI8L2xpbms+IHsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7CisgICAgICAgIF9fdTggICAgICAgICAgICAgICAgICAgIG5hbWVbMzJdOworICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItdHVuZXItdHlwZSI+djRsMl90dW5lcl90eXBlPC9saW5rPiAgICB0eXBlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByYW5nZWxvdzsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmFuZ2VoaWdoOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByeHN1YmNoYW5zOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBhdWRtb2RlOworICAgICAgICBfX3MzMiAgICAgICAgICAgICAgICAgICBzaWduYWw7CisgICAgICAgIF9fczMyICAgICAgICAgICAgICAgICAgIGFmYzsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tb2R1bGF0b3IiPnY0bDJfbW9kdWxhdG9yPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGluZGV4OworICAgICAgICBfX3U4ICAgICAgICAgICAgICAgICAgICBuYW1lWzMyXTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eTsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmFuZ2Vsb3c7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJhbmdlaGlnaDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgdHhzdWJjaGFuczsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTE9XICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTk9STSAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU1RFUkVPICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzIgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU0FQICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzEgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTICAgICAgICAgICAgICAweDAwODAKKworLyogIEZsYWdzIGZvciB0aGUgJ3J4c3ViY2hhbnMnIGZpZWxkICovCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX01PTk8gICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NURVJFTyAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcyICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NBUCAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcxICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1JEUyAgICAgICAgICAgICAgMHgwMDEwCisKKy8qICBWYWx1ZXMgZm9yIHRoZSAnYXVkbW9kZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX01PTk8gICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcyICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NBUCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyICAgICAweDAwMDQKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJlcXVlbmN5Ij52NGwyX2ZyZXF1ZW5jeTwvbGluaz4geworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgdHVuZXI7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi10dW5lci10eXBlIj52NGwyX3R1bmVyX3R5cGU8L2xpbms+ICB0eXBlOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgZnJlcXVlbmN5OworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbOF07Cit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1ody1mcmVxLXNlZWsiPnY0bDJfaHdfZnJlcV9zZWVrPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICB0dW5lcjsKKyAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXR1bmVyLXR5cGUiPnY0bDJfdHVuZXJfdHlwZTwvbGluaz4gIHR5cGU7CisgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICBzZWVrX3Vwd2FyZDsKKyAgICAgICAgX191MzIgICAgICAgICAgICAgICAgIHdyYXBfYXJvdW5kOworICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbOF07Cit9OworCisvKgorICogICAgICBSIEQgUworICovCisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJkcy1kYXRhIj52NGwyX3Jkc19kYXRhPC9saW5rPiB7CisgICAgICAgIF9fdTggICAgbHNiOworICAgICAgICBfX3U4ICAgIG1zYjsKKyAgICAgICAgX191OCAgICBibG9jazsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX01TSyAgICAgICAweDcKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQSAgICAgICAgIDAKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQiAgICAgICAgIDEKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQyAgICAgICAgIDIKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfRCAgICAgICAgIDMKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQ19BTFQgICAgIDQKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfSU5WQUxJRCAgIDcKKworI2RlZmluZSBWNEwyX1JEU19CTE9DS19DT1JSRUNURUQgMHg0MAorI2RlZmluZSBWNEwyX1JEU19CTE9DS19FUlJPUiAgICAgMHg4MAorCisvKgorICogICAgICBBIFUgRCBJIE8KKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+IHsKKyAgICAgICAgX191MzIgICBpbmRleDsKKyAgICAgICAgX191OCAgICBuYW1lWzMyXTsKKyAgICAgICAgX191MzIgICBjYXBhYmlsaXR5OworICAgICAgICBfX3UzMiAgIG1vZGU7CisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMl07Cit9OworCisvKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9BVURDQVBfU1RFUkVPICAgICAgICAgICAgICAweDAwMDAxCisjZGVmaW5lIFY0TDJfQVVEQ0FQX0FWTCAgICAgICAgICAgICAgICAgMHgwMDAwMgorCisvKiAgRmxhZ3MgZm9yIHRoZSAnbW9kZScgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9BVURNT0RFX0FWTCAgICAgICAgICAgICAgICAweDAwMDAxCisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWF1ZGlvb3V0Ij52NGwyX2F1ZGlvb3V0PC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgaW5kZXg7CisgICAgICAgIF9fdTggICAgbmFtZVszMl07CisgICAgICAgIF9fdTMyICAgY2FwYWJpbGl0eTsKKyAgICAgICAgX191MzIgICBtb2RlOworICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzJdOworfTsKKworLyoKKyAqICAgICAgTSBQIEUgRyAgIFMgRSBSIFYgSSBDIEUgUworICoKKyAqICAgICAgTk9URTogRVhQRVJJTUVOVEFMIEFQSQorICovCisjaWYgMSAvKktFRVAqLworI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfSSAgICAoMCkKKyNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX1AgICAgKDEpCisjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9CICAgICgyKQorI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfTUFTSyAoMHhmKQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4LWVudHJ5Ij52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+IHsKKyAgICAgICAgX191NjQgb2Zmc2V0OworICAgICAgICBfX3U2NCBwdHM7CisgICAgICAgIF9fdTMyIGxlbmd0aDsKKyAgICAgICAgX191MzIgZmxhZ3M7CisgICAgICAgIF9fdTMyIHJlc2VydmVkWzJdOworfTsKKworI2RlZmluZSBWNEwyX0VOQ19JRFhfRU5UUklFUyAoNjQpCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4Ij52NGwyX2VuY19pZHg8L2xpbms+IHsKKyAgICAgICAgX191MzIgZW50cmllczsKKyAgICAgICAgX191MzIgZW50cmllc19jYXA7CisgICAgICAgIF9fdTMyIHJlc2VydmVkWzRdOworICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4LWVudHJ5Ij52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+IGVudHJ5W1Y0TDJfRU5DX0lEWF9FTlRSSUVTXTsKK307CisKKworI2RlZmluZSBWNEwyX0VOQ19DTURfU1RBUlQgICAgICAoMCkKKyNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUT1AgICAgICAgKDEpCisjZGVmaW5lIFY0TDJfRU5DX0NNRF9QQVVTRSAgICAgICgyKQorI2RlZmluZSBWNEwyX0VOQ19DTURfUkVTVU1FICAgICAoMykKKworLyogRmxhZ3MgZm9yIFY0TDJfRU5DX0NNRF9TVE9QICovCisjZGVmaW5lIFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQgICAgKDEgJmx0OyZsdDsgMCkKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZW5jb2Rlci1jbWQiPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+IHsKKyAgICAgICAgX191MzIgY21kOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBkYXRhWzhdOworICAgICAgICAgICAgICAgIH0gcmF3OworICAgICAgICB9OworfTsKKworI2VuZGlmCisKKworLyoKKyAqICAgICAgRCBBIFQgQSAgIFMgRSBSIFYgSSBDIEUgUyAgICggViBCIEkgKQorICoKKyAqICAgICAgRGF0YSBzZXJ2aWNlcyBBUEkgYnkgTWljaGFlbCBTY2hpbWVrCisgKi8KKworLyogUmF3IFZCSSAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdmJpLWZvcm1hdCI+djRsMl92YmlfZm9ybWF0PC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgc2FtcGxpbmdfcmF0ZTsgICAgICAgICAgLyogaW4gMSBIeiAqLworICAgICAgICBfX3UzMiAgIG9mZnNldDsKKyAgICAgICAgX191MzIgICBzYW1wbGVzX3Blcl9saW5lOworICAgICAgICBfX3UzMiAgIHNhbXBsZV9mb3JtYXQ7ICAgICAgICAgIC8qIFY0TDJfUElYX0ZNVF8qICovCisgICAgICAgIF9fczMyICAgc3RhcnRbMl07CisgICAgICAgIF9fdTMyICAgY291bnRbMl07CisgICAgICAgIF9fdTMyICAgZmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogVjRMMl9WQklfKiAqLworICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzJdOyAgICAgICAgICAgIC8qIG11c3QgYmUgemVybyAqLworfTsKKworLyogIFZCSSBmbGFncyAgKi8KKyNkZWZpbmUgVjRMMl9WQklfVU5TWU5DICAgICAgICAgKDEgJmx0OyZsdDsgMCkKKyNkZWZpbmUgVjRMMl9WQklfSU5URVJMQUNFRCAgICAgKDEgJmx0OyZsdDsgMSkKKworLyogU2xpY2VkIFZCSQorICoKKyAqICAgIFRoaXMgaW1wbGVtZW50cyBpcyBhIHByb3Bvc2FsIFY0TDIgQVBJIHRvIGFsbG93IFNMSUNFRCBWQkkKKyAqIHJlcXVpcmVkIGZvciBzb21lIGhhcmR3YXJlIGVuY29kZXJzLiBJdCBzaG91bGQgY2hhbmdlIHdpdGhvdXQKKyAqIG5vdGljZSBpbiB0aGUgZGVmaW5pdGl2ZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zbGljZWQtdmJpLWZvcm1hdCI+djRsMl9zbGljZWRfdmJpX2Zvcm1hdDwvbGluaz4geworICAgICAgICBfX3UxNiAgIHNlcnZpY2Vfc2V0OworICAgICAgICAvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCisgICAgICAgICAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWxzIGZyYW1lIGxpbmVzIDMxMy0zMzYgZm9yIDYyNSBsaW5lIHZpZGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCisgICAgICAgIF9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07CisgICAgICAgIF9fdTMyICAgaW9fc2l6ZTsKKyAgICAgICAgX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAvKiBtdXN0IGJlIHplcm8gKi8KK307CisKKy8qIFRlbGV0ZXh0IFdvcmxkIFN5c3RlbSBUZWxldGV4dAorICAgKFdTVCksIGRlZmluZWQgb24gSVRVLVIgQlQuNjUzLTIgKi8KKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAgICAgICAgICAoMHgwMDAxKQorLyogVmlkZW8gUHJvZ3JhbSBTeXN0ZW0sIGRlZmluZWQgb24gRVRTIDMwMCAyMzEqLworI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDA0MDApCisvKiBDbG9zZWQgQ2FwdGlvbiwgZGVmaW5lZCBvbiBFSUEtNjA4ICovCisjZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICAgICAgKDB4MTAwMCkKKy8qIFdpZGUgU2NyZWVuIFN5c3RlbSwgZGVmaW5lZCBvbiBJVFUtUiBCVDExMTkuMSAqLworI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNjI1ICAgICAgICAgICAgICgweDQwMDApCisKKyNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zbGljZWQtdmJpLWNhcCI+djRsMl9zbGljZWRfdmJpX2NhcDwvbGluaz4geworICAgICAgICBfX3UxNiAgIHNlcnZpY2Vfc2V0OworICAgICAgICAvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCisgICAgICAgICAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWxzIGZyYW1lIGxpbmVzIDMxMy0zMzYgZm9yIDYyNSBsaW5lIHZpZGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCisgICAgICAgIF9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKyAgICAgICAgX191MzIgICByZXNlcnZlZFszXTsgICAgLyogbXVzdCBiZSAwICovCit9OworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zbGljZWQtdmJpLWRhdGEiPnY0bDJfc2xpY2VkX3ZiaV9kYXRhPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgaWQ7CisgICAgICAgIF9fdTMyICAgZmllbGQ7ICAgICAgICAgIC8qIDA6IGZpcnN0IGZpZWxkLCAxOiBzZWNvbmQgZmllbGQgKi8KKyAgICAgICAgX191MzIgICBsaW5lOyAgICAgICAgICAgLyogMS0yMyAqLworICAgICAgICBfX3UzMiAgIHJlc2VydmVkOyAgICAgICAvKiBtdXN0IGJlIDAgKi8KKyAgICAgICAgX191OCAgICBkYXRhWzQ4XTsKK307CisKKy8qCisgKiBTbGljZWQgVkJJIGRhdGEgaW5zZXJ0ZWQgaW50byBNUEVHIFN0cmVhbXMKKyAqLworCisvKgorICogVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFY6CisgKgorICogU3RydWN0dXJlIG9mIHBheWxvYWQgY29udGFpbmVkIGluIGFuIE1QRUcgMiBQcml2YXRlIFN0cmVhbSAxIFBFUyBQYWNrZXQgaW4gYW4KKyAqIE1QRUctMiBQcm9ncmFtIFBhY2sgdGhhdCBjb250YWlucyBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViBTbGljZWQgVkJJCisgKiBkYXRhCisgKgorICogTm90ZSwgdGhlIE1QRUctMiBQcm9ncmFtIFBhY2sgYW5kIFByaXZhdGUgU3RyZWFtIDEgUEVTIHBhY2tldCBoZWFkZXIKKyAqIGRlZmluaXRpb25zIGFyZSBub3QgaW5jbHVkZWQgaGVyZS4gIFNlZSB0aGUgTVBFRy0yIHNwZWNpZmljYXRpb25zIGZvciBkZXRhaWxzCisgKiBvbiB0aGVzZSBoZWFkZXJzLgorICovCisKKy8qIExpbmUgdHlwZSBJRHMgKi8KKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1RFTEVURVhUX0IgICAgICgxKQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfQ0FQVElPTl81MjUgICAgKDQpCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1ICAgICAgICAoNSkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUyAgICAgICAgICAgICg3KQorCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwLWxpbmUiPnY0bDJfbXBlZ192YmlfaXR2MF9saW5lPC9saW5rPiB7CisgICAgICAgIF9fdTggaWQ7ICAgICAgICAvKiBPbmUgb2YgVjRMMl9NUEVHX1ZCSV9JVlRWXyogYWJvdmUgKi8KKyAgICAgICAgX191OCBkYXRhWzQyXTsgIC8qIFNsaWNlZCBWQkkgZGF0YSBmb3IgdGhlIGxpbmUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwIj52NGwyX21wZWdfdmJpX2l0djA8L2xpbms+IHsKKyAgICAgICAgX19sZTMyIGxpbmVtYXNrWzJdOyAvKiBCaXRtYXNrcyBvZiBWQkkgc2VydmljZSBsaW5lcyBwcmVzZW50ICovCisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtbGluZSI+djRsMl9tcGVnX3ZiaV9pdHYwX2xpbmU8L2xpbms+IGxpbmVbMzVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtMSI+djRsMl9tcGVnX3ZiaV9JVFYwPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtbGluZSI+djRsMl9tcGVnX3ZiaV9pdHYwX2xpbmU8L2xpbms+IGxpbmVbMzZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMCAgICAgICAiaXR2MCIKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMSAgICAgICAiSVRWMCIKKworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktZm10LWl2dHYiPnY0bDJfbXBlZ192YmlfZm10X2l2dHY8L2xpbms+IHsKKyAgICAgICAgX191OCBtYWdpY1s0XTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAiPnY0bDJfbXBlZ192YmlfaXR2MDwvbGluaz4gaXR2MDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1pdHYwLTEiPnY0bDJfbXBlZ192YmlfSVRWMDwvbGluaz4gSVRWMDsKKyAgICAgICAgfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogICAgICBBIEcgRyBSIEUgRyBBIFQgRSAgIFMgVCBSIFUgQyBUIFUgUiBFIFMKKyAqLworCisvKiAgICAgIFN0cmVhbSBkYXRhIGZvcm1hdAorICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPiB7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQiPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz4gICAgICAgICAgcGl4OyAgICAgLyogVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICovCisgICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItd2luZG93Ij52NGwyX3dpbmRvdzwvbGluaz4gICAgICAgICAgICAgIHdpbjsgICAgIC8qIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXZiaS1mb3JtYXQiPnY0bDJfdmJpX2Zvcm1hdDwvbGluaz4gICAgICAgICAgdmJpOyAgICAgLyogVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXNsaWNlZC12YmktZm9ybWF0Ij52NGwyX3NsaWNlZF92YmlfZm9ybWF0PC9saW5rPiAgIHNsaWNlZDsgIC8qIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICovCisgICAgICAgICAgICAgICAgX191OCAgICByYXdfZGF0YVsyMDBdOyAgICAgICAgICAgICAgICAgICAvKiB1c2VyLWRlZmluZWQgKi8KKyAgICAgICAgfSBmbXQ7Cit9OworCisKKy8qICAgICAgU3RyZWFtIHR5cGUtZGVwZW5kZW50IHBhcmFtZXRlcnMKKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc3RyZWFtcGFybSI+djRsMl9zdHJlYW1wYXJtPC9saW5rPiB7CisgICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcHR1cmVwYXJtIj52NGwyX2NhcHR1cmVwYXJtPC9saW5rPiBjYXB0dXJlOworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dHBhcm0iPnY0bDJfb3V0cHV0cGFybTwvbGluaz4gIG91dHB1dDsKKyAgICAgICAgICAgICAgICBfX3U4ICAgIHJhd19kYXRhWzIwMF07ICAvKiB1c2VyLWRlZmluZWQgKi8KKyAgICAgICAgfSBwYXJtOworfTsKKworLyoKKyAqICAgICAgQSBEIFYgQSBOIEMgRSBEICAgRCBFIEIgVSBHIEcgSSBOIEcKKyAqCisgKiAgICAgIE5PVEU6IEVYUEVSSU1FTlRBTCBBUEksIE5FVkVSIFJFTFkgT04gVEhJUyBJTiBBUFBMSUNBVElPTlMhCisgKiAgICAgIEZPUiBERUJVR0dJTkcsIFRFU1RJTkcgQU5EIElOVEVSTkFMIFVTRSBPTkxZIQorICovCisKKy8qIFZJRElPQ19EQkdfR19SRUdJU1RFUiBhbmQgVklESU9DX0RCR19TX1JFR0lTVEVSICovCisKKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0hPU1QgICAgICAgMCAgLyogTWF0Y2ggYWdhaW5zdCBjaGlwIElEIG9uIGhvc3QgKDAgZm9yIHRoZSBob3N0KSAqLworI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUiAxICAvKiBNYXRjaCBhZ2FpbnN0IEkyQyBkcml2ZXIgbmFtZSAqLworI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgICAyICAvKiBNYXRjaCBhZ2FpbnN0IEkyQyA3LWJpdCBhZGRyZXNzICovCisjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9BQzk3ICAgICAgIDMgIC8qIE1hdGNoIGFnYWluc3QgYW5jaWxpYXJ5IEFDOTcgY2hpcCAqLworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctbWF0Y2giPnY0bDJfZGJnX21hdGNoPC9saW5rPiB7CisgICAgICAgIF9fdTMyIHR5cGU7IC8qIE1hdGNoIHR5cGUgKi8KKyAgICAgICAgdW5pb24geyAgICAgLyogTWF0Y2ggdGhpcyBjaGlwLCBtZWFuaW5nIGRldGVybWluZWQgYnkgdHlwZSAqLworICAgICAgICAgICAgICAgIF9fdTMyIGFkZHI7CisgICAgICAgICAgICAgICAgY2hhciBuYW1lWzMyXTsKKyAgICAgICAgfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctcmVnaXN0ZXIiPnY0bDJfZGJnX3JlZ2lzdGVyPC9saW5rPiB7CisgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWRiZy1tYXRjaCI+djRsMl9kYmdfbWF0Y2g8L2xpbms+IG1hdGNoOworICAgICAgICBfX3UzMiBzaXplOyAgICAgLyogcmVnaXN0ZXIgc2l6ZSBpbiBieXRlcyAqLworICAgICAgICBfX3U2NCByZWc7CisgICAgICAgIF9fdTY0IHZhbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLWNoaXAtaWRlbnQiPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+IHsKKyAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLW1hdGNoIj52NGwyX2RiZ19tYXRjaDwvbGluaz4gbWF0Y2g7CisgICAgICAgIF9fdTMyIGlkZW50OyAgICAgICAvKiBjaGlwIGlkZW50aWZpZXIgYXMgc3BlY2lmaWVkIGluICZsdDttZWRpYS92NGwyLWNoaXAtaWRlbnQuaCZndDsgKi8KKyAgICAgICAgX191MzIgcmV2aXNpb247ICAgIC8qIGNoaXAgcmV2aXNpb24sIGNoaXAgc3BlY2lmaWMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogICAgICBJIE8gQyBUIEwgICBDIE8gRCBFIFMgICBGIE8gUiAgIFYgSSBEIEUgTyAgIEQgRSBWIEkgQyBFIFMKKyAqCisgKi8KKyNkZWZpbmUgVklESU9DX1FVRVJZQ0FQICAgICAgICAgIF9JT1IoJ1YnLCAgMCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY2FwYWJpbGl0eSI+djRsMl9jYXBhYmlsaXR5PC9saW5rPikKKyNkZWZpbmUgVklESU9DX1JFU0VSVkVEICAgICAgICAgICBfSU8oJ1YnLCAgMSkKKyNkZWZpbmUgVklESU9DX0VOVU1fRk1UICAgICAgICAgX0lPV1IoJ1YnLCAgMiwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm10ZGVzYyI+djRsMl9mbXRkZXNjPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfRk1UICAgICAgICAgICAgX0lPV1IoJ1YnLCAgNCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm9ybWF0Ij52NGwyX2Zvcm1hdDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0ZNVCAgICAgICAgICAgIF9JT1dSKCdWJywgIDUsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZvcm1hdCI+djRsMl9mb3JtYXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfUkVRQlVGUyAgICAgICAgICBfSU9XUignVicsICA4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19RVUVSWUJVRiAgICAgICAgIF9JT1dSKCdWJywgIDksIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19GQlVGICAgICAgICAgICAgX0lPUignVicsIDEwLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFtZWJ1ZmZlciI+djRsMl9mcmFtZWJ1ZmZlcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0ZCVUYgICAgICAgICAgICBfSU9XKCdWJywgMTEsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYW1lYnVmZmVyIj52NGwyX2ZyYW1lYnVmZmVyPC9saW5rPikKKyNkZWZpbmUgVklESU9DX09WRVJMQVkgICAgICAgICAgIF9JT1coJ1YnLCAxNCwgaW50KQorI2RlZmluZSBWSURJT0NfUUJVRiAgICAgICAgICAgICBfSU9XUignVicsIDE1LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1idWZmZXIiPnY0bDJfYnVmZmVyPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0RRQlVGICAgICAgICAgICAgX0lPV1IoJ1YnLCAxNywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TVFJFQU1PTiAgICAgICAgICBfSU9XKCdWJywgMTgsIGludCkKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9GRiAgICAgICAgIF9JT1coJ1YnLCAxOSwgaW50KQorI2RlZmluZSBWSURJT0NfR19QQVJNICAgICAgICAgICBfSU9XUignVicsIDIxLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zdHJlYW1wYXJtIj52NGwyX3N0cmVhbXBhcm08L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19QQVJNICAgICAgICAgICBfSU9XUignVicsIDIyLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1zdHJlYW1wYXJtIj52NGwyX3N0cmVhbXBhcm08L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19TVEQgICAgICAgICAgICAgX0lPUignVicsIDIzLCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX1NfU1REICAgICAgICAgICAgIF9JT1coJ1YnLCAyNCwgdjRsMl9zdGRfaWQpCisjZGVmaW5lIFZJRElPQ19FTlVNU1REICAgICAgICAgIF9JT1dSKCdWJywgMjUsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXN0YW5kYXJkIj52NGwyX3N0YW5kYXJkPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0VOVU1JTlBVVCAgICAgICAgX0lPV1IoJ1YnLCAyNiwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItaW5wdXQiPnY0bDJfaW5wdXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19DVFJMICAgICAgICAgICBfSU9XUignVicsIDI3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jb250cm9sIj52NGwyX2NvbnRyb2w8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19DVFJMICAgICAgICAgICBfSU9XUignVicsIDI4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jb250cm9sIj52NGwyX2NvbnRyb2w8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19UVU5FUiAgICAgICAgICBfSU9XUignVicsIDI5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi10dW5lciI+djRsMl90dW5lcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX1RVTkVSICAgICAgICAgICBfSU9XKCdWJywgMzAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXR1bmVyIj52NGwyX3R1bmVyPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfQVVESU8gICAgICAgICAgIF9JT1IoJ1YnLCAzMywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19BVURJTyAgICAgICAgICAgX0lPVygnVicsIDM0LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpbyI+djRsMl9hdWRpbzwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19RVUVSWUNUUkwgICAgICAgIF9JT1dSKCdWJywgMzYsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXF1ZXJ5Y3RybCI+djRsMl9xdWVyeWN0cmw8L2xpbms+KQorI2RlZmluZSBWSURJT0NfUVVFUllNRU5VICAgICAgICBfSU9XUignVicsIDM3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1xdWVyeW1lbnUiPnY0bDJfcXVlcnltZW51PC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfSU5QVVQgICAgICAgICAgIF9JT1IoJ1YnLCAzOCwgaW50KQorI2RlZmluZSBWSURJT0NfU19JTlBVVCAgICAgICAgICBfSU9XUignVicsIDM5LCBpbnQpCisjZGVmaW5lIFZJRElPQ19HX09VVFBVVCAgICAgICAgICBfSU9SKCdWJywgNDYsIGludCkKKyNkZWZpbmUgVklESU9DX1NfT1VUUFVUICAgICAgICAgX0lPV1IoJ1YnLCA0NywgaW50KQorI2RlZmluZSBWSURJT0NfRU5VTU9VVFBVVCAgICAgICBfSU9XUignVicsIDQ4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1vdXRwdXQiPnY0bDJfb3V0cHV0PC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfQVVET1VUICAgICAgICAgIF9JT1IoJ1YnLCA0OSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW9vdXQiPnY0bDJfYXVkaW9vdXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19BVURPVVQgICAgICAgICAgX0lPVygnVicsIDUwLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpb291dCI+djRsMl9hdWRpb291dDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19HX01PRFVMQVRPUiAgICAgIF9JT1dSKCdWJywgNTQsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1vZHVsYXRvciI+djRsMl9tb2R1bGF0b3I8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19NT0RVTEFUT1IgICAgICAgX0lPVygnVicsIDU1LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tb2R1bGF0b3IiPnY0bDJfbW9kdWxhdG9yPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfRlJFUVVFTkNZICAgICAgX0lPV1IoJ1YnLCA1Niwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJlcXVlbmN5Ij52NGwyX2ZyZXF1ZW5jeTwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0ZSRVFVRU5DWSAgICAgICBfSU9XKCdWJywgNTcsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyZXF1ZW5jeSI+djRsMl9mcmVxdWVuY3k8L2xpbms+KQorI2RlZmluZSBWSURJT0NfQ1JPUENBUCAgICAgICAgICBfSU9XUignVicsIDU4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wY2FwIj52NGwyX2Nyb3BjYXA8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19DUk9QICAgICAgICAgICBfSU9XUignVicsIDU5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wIj52NGwyX2Nyb3A8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19DUk9QICAgICAgICAgICAgX0lPVygnVicsIDYwLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wIj52NGwyX2Nyb3A8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19KUEVHQ09NUCAgICAgICAgX0lPUignVicsIDYxLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1qcGVnY29tcHJlc3Npb24iPnY0bDJfanBlZ2NvbXByZXNzaW9uPC9saW5rPikKKyNkZWZpbmUgVklESU9DX1NfSlBFR0NPTVAgICAgICAgIF9JT1coJ1YnLCA2Miwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItanBlZ2NvbXByZXNzaW9uIj52NGwyX2pwZWdjb21wcmVzc2lvbjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19RVUVSWVNURCAgICAgICAgICBfSU9SKCdWJywgNjMsIHY0bDJfc3RkX2lkKQorI2RlZmluZSBWSURJT0NfVFJZX0ZNVCAgICAgICAgICBfSU9XUignVicsIDY0LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPikKKyNkZWZpbmUgVklESU9DX0VOVU1BVURJTyAgICAgICAgX0lPV1IoJ1YnLCA2NSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+KQorI2RlZmluZSBWSURJT0NfRU5VTUFVRE9VVCAgICAgICBfSU9XUignVicsIDY2LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpb291dCI+djRsMl9hdWRpb291dDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19HX1BSSU9SSVRZICAgICAgICBfSU9SKCdWJywgNjcsIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1wcmlvcml0eSI+djRsMl9wcmlvcml0eTwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX1BSSU9SSVRZICAgICAgICBfSU9XKCdWJywgNjgsIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1wcmlvcml0eSI+djRsMl9wcmlvcml0eTwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1dSKCdWJywgNjksIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXNsaWNlZC12YmktY2FwIj52NGwyX3NsaWNlZF92YmlfY2FwPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0xPR19TVEFUVVMgICAgICAgICBfSU8oJ1YnLCA3MCkKKyNkZWZpbmUgVklESU9DX0dfRVhUX0NUUkxTICAgICAgX0lPV1IoJ1YnLCA3MSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2xzIj52NGwyX2V4dF9jb250cm9sczwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19TX0VYVF9DVFJMUyAgICAgIF9JT1dSKCdWJywgNzIsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWV4dC1jb250cm9scyI+djRsMl9leHRfY29udHJvbHM8L2xpbms+KQorI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUyAgICBfSU9XUignVicsIDczLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1leHQtY29udHJvbHMiPnY0bDJfZXh0X2NvbnRyb2xzPC9saW5rPikKKyNpZiAxIC8qS0VFUCovCisjZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FU0laRVMgIF9JT1dSKCdWJywgNzQsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZybXNpemVlbnVtIj52NGwyX2ZybXNpemVlbnVtPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgX0lPV1IoJ1YnLCA3NSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbGVudW0iPnY0bDJfZnJtaXZhbGVudW08L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19FTkNfSU5ERVggICAgICAgX0lPUignVicsIDc2LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmMtaWR4Ij52NGwyX2VuY19pZHg8L2xpbms+KQorI2RlZmluZSBWSURJT0NfRU5DT0RFUl9DTUQgICAgICBfSU9XUignVicsIDc3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmNvZGVyLWNtZCI+djRsMl9lbmNvZGVyX2NtZDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19UUllfRU5DT0RFUl9DTUQgIF9JT1dSKCdWJywgNzgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWVuY29kZXItY21kIj52NGwyX2VuY29kZXJfY21kPC9saW5rPikKKyNlbmRpZgorCisjaWYgMSAvKktFRVAqLworLyogRXhwZXJpbWVudGFsLCBtZWFudCBmb3IgZGVidWdnaW5nLCB0ZXN0aW5nIGFuZCBpbnRlcm5hbCB1c2UuCisgICBPbmx5IGltcGxlbWVudGVkIGlmIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgZGVmaW5lZC4KKyAgIFlvdSBtdXN0IGJlIHJvb3QgdG8gdXNlIHRoZXNlIGlvY3Rscy4gTmV2ZXIgdXNlIHRoZXNlIGluIGFwcGxpY2F0aW9ucyEgKi8KKyNkZWZpbmUgVklESU9DX0RCR19TX1JFR0lTVEVSICAgIF9JT1coJ1YnLCA3OSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLXJlZ2lzdGVyIj52NGwyX2RiZ19yZWdpc3RlcjwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19EQkdfR19SRUdJU1RFUiAgIF9JT1dSKCdWJywgODAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWRiZy1yZWdpc3RlciI+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+KQorCisvKiBFeHBlcmltZW50YWwsIG1lYW50IGZvciBkZWJ1Z2dpbmcsIHRlc3RpbmcgYW5kIGludGVybmFsIHVzZS4KKyAgIE5ldmVyIHVzZSB0aGlzIGlvY3RsIGluIGFwcGxpY2F0aW9ucyEgKi8KKyNkZWZpbmUgVklESU9DX0RCR19HX0NISVBfSURFTlQgX0lPV1IoJ1YnLCA4MSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLWNoaXAtaWRlbnQiPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+KQorI2VuZGlmCisKKyNkZWZpbmUgVklESU9DX1NfSFdfRlJFUV9TRUVLICAgIF9JT1coJ1YnLCA4Miwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItaHctZnJlcS1zZWVrIj52NGwyX2h3X2ZyZXFfc2VlazwvbGluaz4pCisvKiBSZW1pbmRlcjogd2hlbiBhZGRpbmcgbmV3IGlvY3RscyBwbGVhc2UgYWRkIHN1cHBvcnQgZm9yIHRoZW0gdG8KKyAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGFzIHdlbGwhICovCisKKyNpZmRlZiBfX09MRF9WSURJT0NfCisvKiBmb3IgY29tcGF0aWJpbGl0eSwgd2lsbCBnbyBhd2F5IHNvbWUgZGF5ICovCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZX09MRCAgICAgIF9JT1dSKCdWJywgMTQsIGludCkKKyNkZWZpbmUgVklESU9DX1NfUEFSTV9PTEQgICAgICAgIF9JT1coJ1YnLCAyMiwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc3RyZWFtcGFybSI+djRsMl9zdHJlYW1wYXJtPC9saW5rPikKKyNkZWZpbmUgVklESU9DX1NfQ1RSTF9PTEQgICAgICAgIF9JT1coJ1YnLCAyOCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY29udHJvbCI+djRsMl9jb250cm9sPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfQVVESU9fT0xEICAgICAgX0lPV1IoJ1YnLCAzMywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW8iPnY0bDJfYXVkaW88L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19BVURPVVRfT0xEICAgICBfSU9XUignVicsIDQ5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpb291dCI+djRsMl9hdWRpb291dDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19DUk9QQ0FQX09MRCAgICAgICBfSU9SKCdWJywgNTgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3BjYXAiPnY0bDJfY3JvcGNhcDwvbGluaz4pCisjZW5kaWYKKworI2RlZmluZSBCQVNFX1ZJRElPQ19QUklWQVRFICAgICAxOTIgICAgICAgICAgICAgLyogMTkyLTI1NSBhcmUgcHJpdmF0ZSAqLworCisjZW5kaWYgLyogX19MSU5VWF9WSURFT0RFVjJfSCAqLworPC9wcm9ncmFtbGlzdGluZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWNyb3BjYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtY3JvcGNhcC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2ZTkwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWNyb3BjYXAueG1sCkBAIC0wLDAgKzEsMTc0IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1jcm9wY2FwIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0NST1BDQVA8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19DUk9QQ0FQPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkluZm9ybWF0aW9uIGFib3V0IHRoZSB2aWRlbyBjcm9wcGluZyBhbmQgc2NhbGluZyBhYmlsaXRpZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfY3JvcGNhcAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19DUk9QQ0FQPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5BcHBsaWNhdGlvbnMgdXNlIHRoaXMgZnVuY3Rpb24gdG8gcXVlcnkgdGhlIGNyb3BwaW5nCitsaW1pdHMsIHRoZSBwaXhlbCBhc3BlY3Qgb2YgaW1hZ2VzIGFuZCB0byBjYWxjdWxhdGUgc2NhbGUgZmFjdG9ycy4KK1RoZXkgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgdjRsMl9jcm9wY2FwCitzdHJ1Y3R1cmUgdG8gdGhlIHJlc3BlY3RpdmUgYnVmZmVyIChzdHJlYW0pIHR5cGUgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0NST1BDQVA8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCitzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlLiBUaGUgcmVzdWx0cyBhcmUKK2NvbnN0YW50IGV4Y2VwdCB3aGVuIHN3aXRjaGluZyB0aGUgdmlkZW8gc3RhbmRhcmQuIFJlbWVtYmVyIHRoaXMKK3N3aXRjaCBjYW4gb2NjdXIgaW1wbGljaXQgd2hlbiBzd2l0Y2hpbmcgdGhlIHZpZGVvIGlucHV0IG9yCitvdXRwdXQuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNyb3BjYXAiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2Nyb3BjYXA8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLgorT25seSB0aGVzZSB0eXBlcyBhcmUgdmFsaWQgaGVyZToKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+LCBhbmQgY3VzdG9tIChkcml2ZXIKK2RlZmluZWQpIHR5cGVzIHdpdGggY29kZSA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4KK2FuZCBoaWdoZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QtY3JvcCI+djRsMl9yZWN0PC9saW5rPjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Ym91bmRzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RGVmaW5lcyB0aGUgd2luZG93IHdpdGhpbiBjYXB0dXJpbmcgb3Igb3V0cHV0IGlzCitwb3NzaWJsZSwgdGhpcyBtYXkgZXhjbHVkZSBmb3IgZXhhbXBsZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKK2JsYW5raW5nIGFyZWFzLiBUaGUgY3JvcHBpbmcgcmVjdGFuZ2xlIGNhbm5vdCBleGNlZWQgdGhlc2UgbGltaXRzLgorV2lkdGggYW5kIGhlaWdodCBhcmUgZGVmaW5lZCBpbiBwaXhlbHMsIHRoZSBkcml2ZXIgd3JpdGVyIGlzIGZyZWUgdG8KK2Nob29zZSBvcmlnaW4gYW5kIHVuaXRzIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbSBpbiB0aGUgYW5hbG9nCitkb21haW4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QtY3JvcCI+djRsMl9yZWN0PC9saW5rPjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGVmcmVjdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRlZmF1bHQgY3JvcHBpbmcgcmVjdGFuZ2xlLCBpdCBzaGFsbCBjb3ZlciB0aGUKKyJ3aG9sZSBwaWN0dXJlIi4gQXNzdW1pbmcgcGl4ZWwgYXNwZWN0IDEvMSB0aGlzIGNvdWxkIGJlIGZvciBleGFtcGxlIGEKKzY0MCZuYnNwOyZ0aW1lczsmbmJzcDs0ODAgcmVjdGFuZ2xlIGZvciBOVFNDLCBhCis3NjgmbmJzcDsmdGltZXM7Jm5ic3A7NTc2IHJlY3RhbmdsZSBmb3IgUEFMIGFuZCBTRUNBTSBjZW50ZXJlZCBvdmVyCit0aGUgYWN0aXZlIHBpY3R1cmUgYXJlYS4gVGhlIHNhbWUgY28tb3JkaW5hdGUgc3lzdGVtIGFzIGZvcgorCSAgICA8c3RydWN0ZmllbGQ+Ym91bmRzPC9zdHJ1Y3RmaWVsZD4gaXMgdXNlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5waXhlbGFzcGVjdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPlRoaXMgaXMgdGhlIHBpeGVsIGFzcGVjdCAoeSAvIHgpIHdoZW4gbm8KK3NjYWxpbmcgaXMgYXBwbGllZCwgdGhlIHJhdGlvIG9mIHRoZSBhY3R1YWwgc2FtcGxpbmcKK2ZyZXF1ZW5jeSBhbmQgdGhlIGZyZXF1ZW5jeSByZXF1aXJlZCB0byBnZXQgc3F1YXJlCitwaXhlbHMuPC9wYXJhPjxwYXJhPldoZW4gY3JvcHBpbmcgY29vcmRpbmF0ZXMgcmVmZXIgdG8gc3F1YXJlIHBpeGVscywKK3RoZSBkcml2ZXIgc2V0cyA8c3RydWN0ZmllbGQ+cGl4ZWxhc3BlY3Q8L3N0cnVjdGZpZWxkPiB0byAxLzEuIE90aGVyCitjb21tb24gdmFsdWVzIGFyZSA1NC81OSBmb3IgUEFMIGFuZCBTRUNBTSwgMTEvMTAgZm9yIE5UU0Mgc2FtcGxlZAorYWNjb3JkaW5nIHRvIFs8eHJlZiBsaW5rZW5kPSJpdHU2MDEiIC8+XS48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPCEtLSBOQiB0aGlzIHRhYmxlIGlzIGR1cGxpY2F0ZWQgaW4gdGhlIG92ZXJsYXkgY2hhcHRlci4gLS0+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItcmVjdC1jcm9wIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9yZWN0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3MzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bGVmdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pkhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSB0b3AsIGxlZnQgY29ybmVyIG9mIHRoZQorcmVjdGFuZ2xlLCBpbiBwaXhlbHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50b3A8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5WZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIHRvcCwgbGVmdCBjb3JuZXIgb2YgdGhlCityZWN0YW5nbGUsIGluIHBpeGVscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2lkdGggb2YgdGhlIHJlY3RhbmdsZSwgaW4gcGl4ZWxzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3MzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUsIGluIHBpeGVscy4gV2lkdGgKK2FuZCBoZWlnaHQgY2Fubm90IGJlIG5lZ2F0aXZlLCB0aGUgZmllbGRzIGFyZSBzaWduZWQgZm9yCitoeXN0ZXJpY2FsIHJlYXNvbnMuIDwhLS0gdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tCitvbiAyMiBPY3QgMjAwMiBzdWJqZWN0ICJSZTpbVjRMXVtwYXRjaGVzIV0gUmU6djRsMi9rZXJuZWwtMi41IiAtLT4KKzwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1jcm9wY2FwOyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzCitpbnZhbGlkIG9yIHRoZSBpb2N0bCBpcyBub3Qgc3VwcG9ydGVkLiBUaGlzIGlzIG5vdCBwZXJtaXR0ZWQgZm9yCit2aWRlbyBjYXB0dXJlLCBvdXRwdXQgYW5kIG92ZXJsYXkgZGV2aWNlcywgd2hpY2ggbXVzdCBzdXBwb3J0Cis8Y29uc3RhbnQ+VklESU9DX0NST1BDQVA8L2NvbnN0YW50Pi48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1kYmctZy1jaGlwLWlkZW50LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA5ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwKQEAgLTAsMCArMSwyNzUgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0RCR19HX0NISVBfSURFTlQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+SWRlbnRpZnkgdGhlIGNoaXBzIG9uIGEgVFYgY2FyZDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19EQkdfR19DSElQX0lERU5UPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8bm90ZT4KKyAgICAgIDx0aXRsZT5FeHBlcmltZW50YWw8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGlzIGlzIGFuIDxsaW5rCitsaW5rZW5kPSJleHBlcmltZW50YWwiPmV4cGVyaW1lbnRhbDwvbGluaz4gaW50ZXJmYWNlIGFuZCBtYXkgY2hhbmdlIGluCit0aGUgZnV0dXJlLjwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT5Gb3IgZHJpdmVyIGRlYnVnZ2luZyBwdXJwb3NlcyB0aGlzIGlvY3RsIGFsbG93cyB0ZXN0CithcHBsaWNhdGlvbnMgdG8gcXVlcnkgdGhlIGRyaXZlciBhYm91dCB0aGUgY2hpcHMgcHJlc2VudCBvbiB0aGUgVFYKK2NhcmQuIFJlZ3VsYXIgYXBwbGljYXRpb25zIG11c3Qgbm90IHVzZSBpdC4gV2hlbiB5b3UgZm91bmQgYSBjaGlwCitzcGVjaWZpYyBidWcsIHBsZWFzZSBjb250YWN0IHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nIGxpc3QgKCZ2NGwtbWw7KQorc28gaXQgY2FuIGJlIGZpeGVkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBkcml2ZXIgYXBwbGljYXRpb25zIG11c3QgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+bWF0Y2guYWRkcjwvc3RydWN0ZmllbGQ+IG9yIDxzdHJ1Y3RmaWVsZD5tYXRjaC5uYW1lPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcyBvZiBhICZ2NGwyLWRiZy1jaGlwLWlkZW50OworYW5kIGNhbGwgPGNvbnN0YW50PlZJRElPQ19EQkdfR19DSElQX0lERU5UPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8KK3RoaXMgc3RydWN0dXJlLiBPbiBzdWNjZXNzIHRoZSBkcml2ZXIgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorc2VsZWN0ZWQgY2hpcCBpbiB0aGUgPHN0cnVjdGZpZWxkPmlkZW50PC9zdHJ1Y3RmaWVsZD4gYW5kCis8c3RydWN0ZmllbGQ+cmV2aXNpb248L3N0cnVjdGZpZWxkPiBmaWVsZHMuIE9uIGZhaWx1cmUgdGhlIHN0cnVjdHVyZQorcmVtYWlucyB1bmNoYW5nZWQuPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiA8c3RydWN0ZmllbGQ+bWF0Y2gudHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9DSElQX01BVENIX0hPU1Q8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gc2VsZWN0cyB0aGUgbnRoIG5vbi0maTJjOyBjaGlwCitvbiB0aGUgVFYgY2FyZC4gWW91IGNhbiBlbnVtZXJhdGUgYWxsIGNoaXBzIGJ5IHN0YXJ0aW5nIGF0IHplcm8gYW5kCitpbmNyZW1lbnRpbmcgPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBieSBvbmUgdW50aWwKKzxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+IGZhaWxzIHdpdGggYW4gJkVJTlZBTDsuCitUaGUgbnVtYmVyIHplcm8gYWx3YXlzIHNlbGVjdHMgdGhlIGhvc3QgY2hpcCwgJmVnOyB0aGUgY2hpcCBjb25uZWN0ZWQKK3RvIHRoZSBQQ0kgb3IgVVNCIGJ1cy48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLm5hbWU8L3N0cnVjdGZpZWxkPiBjb250YWlucyB0aGUgSTJDIGRyaXZlciBuYW1lLgorRm9yIGluc3RhbmNlCis8Y29uc3RhbnQ+InNhYTcxMjciPC9jb25zdGFudD4gd2lsbCBtYXRjaCBhbnkgY2hpcAorc3VwcG9ydGVkIGJ5IHRoZSBzYWE3MTI3IGRyaXZlciwgcmVnYXJkbGVzcyBvZiBpdHMgJmkyYzsgYnVzIGFkZHJlc3MuCitXaGVuIG11bHRpcGxlIGNoaXBzIHN1cHBvcnRlZCBieSB0aGUgc2FtZSBkcml2ZXIgYXJlIHByZXNlbnQsIHRoZQoraW9jdGwgd2lsbCByZXR1cm4gPGNvbnN0YW50PlY0TDJfSURFTlRfQU1CSUdVT1VTPC9jb25zdGFudD4gaW4gdGhlCis8c3RydWN0ZmllbGQ+aWRlbnQ8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gc2VsZWN0cyBhIGNoaXAgYnkgaXRzIDcgYml0CismaTJjOyBidXMgYWRkcmVzcy48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfQUM5NzwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBzZWxlY3RzIHRoZSBudGggQUM5NyBjaGlwCitvbiB0aGUgVFYgY2FyZC4gWW91IGNhbiBlbnVtZXJhdGUgYWxsIGNoaXBzIGJ5IHN0YXJ0aW5nIGF0IHplcm8gYW5kCitpbmNyZW1lbnRpbmcgPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBieSBvbmUgdW50aWwKKzxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+IGZhaWxzIHdpdGggYW4gJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHBhcmE+T24gc3VjY2VzcywgdGhlIDxzdHJ1Y3RmaWVsZD5pZGVudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpbGwKK2NvbnRhaW4gYSBjaGlwIElEIGZyb20gdGhlIExpbnV4Cis8ZmlsZW5hbWU+bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSwgYW5kIHRoZQorPHN0cnVjdGZpZWxkPnJldmlzaW9uPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2lsbCBjb250YWluIGEgZHJpdmVyCitzcGVjaWZpYyB2YWx1ZSwgb3IgemVybyBpZiBubyBwYXJ0aWN1bGFyIHJldmlzaW9uIGlzIGFzc29jaWF0ZWQgd2l0aAordGhpcyBjaGlwLjwvcGFyYT4KKworICAgIDxwYXJhPldoZW4gdGhlIGRyaXZlciBjb3VsZCBub3QgaWRlbnRpZnkgdGhlIHNlbGVjdGVkIGNoaXAsCis8c3RydWN0ZmllbGQ+aWRlbnQ8L3N0cnVjdGZpZWxkPiB3aWxsIGNvbnRhaW4KKzxjb25zdGFudD5WNEwyX0lERU5UX1VOS05PV048L2NvbnN0YW50Pi4gV2hlbiBubyBjaGlwIG1hdGNoZWQKK3RoZSBpb2N0bCB3aWxsIHN1Y2NlZWQgYnV0IHRoZQorPHN0cnVjdGZpZWxkPmlkZW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2lsbCBjb250YWluCis8Y29uc3RhbnQ+VjRMMl9JREVOVF9OT05FPC9jb25zdGFudD4uIElmIG11bHRpcGxlIGNoaXBzIG1hdGNoZWQsCis8c3RydWN0ZmllbGQ+aWRlbnQ8L3N0cnVjdGZpZWxkPiB3aWxsIGNvbnRhaW4KKzxjb25zdGFudD5WNEwyX0lERU5UX0FNQklHVU9VUzwvY29uc3RhbnQ+LiBJbiBhbGwgdGhlc2UgY2FzZXMgdGhlCis8c3RydWN0ZmllbGQ+cmV2aXNpb248L3N0cnVjdGZpZWxkPiBmaWVsZCByZW1haW5zIHVuY2hhbmdlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGlzIGlvY3RsIGlzIG9wdGlvbmFsLCBub3QgYWxsIGRyaXZlcnMgbWF5IHN1cHBvcnQgaXQuIEl0Cit3YXMgaW50cm9kdWNlZCBpbiBMaW51eCAyLjYuMjEsIGJ1dCB0aGUgQVBJIHdhcyBjaGFuZ2VkIHRvIHRoZQorb25lIGRlc2NyaWJlZCBoZXJlIGluIDIuNi4yOS48L3BhcmE+CisKKyAgICA8cGFyYT5XZSByZWNvbW1lbmRlZCB0aGUgPGFwcGxpY2F0aW9uPnY0bDItZGJnPC9hcHBsaWNhdGlvbj4KK3V0aWxpdHkgb3ZlciBjYWxsaW5nIHRoaXMgaW9jdGwgZGlyZWN0bHkuIEl0IGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorTGludXhUViB2NGwtZHZiIHJlcG9zaXRvcnk7IHNlZSA8dWxpbmsKK3VybD0iaHR0cDovL2xpbnV4dHYub3JnL3JlcG8vIj5odHRwOi8vbGludXh0di5vcmcvcmVwby88L3VsaW5rPiBmb3IKK2FjY2VzcyBpbnN0cnVjdGlvbnMuPC9wYXJhPgorCisgICAgPCEtLSBOb3RlIGZvciBjb252ZW5pZW5jZSB2aWRpb2MtZGJnLWctcmVnaXN0ZXIuc2dtbAorCSBjb250YWlucyBhIGR1cGxpY2F0ZSBvZiB0aGlzIHRhYmxlLiAtLT4KKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImlkZW50LXY0bDItZGJnLW1hdGNoIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9kYmdfbWF0Y2g8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJJmNzLXVzdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlNlZSA8eHJlZiBsaW5rZW5kPSJpZGVudC1jaGlwLW1hdGNoLXR5cGVzIiAvPiBmb3IgYSBsaXN0IG9mCitwb3NzaWJsZSB0eXBlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dW5pb248L2VudHJ5PgorCSAgICA8ZW50cnk+KGFub255bW91cyk8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5hZGRyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggYSBjaGlwIGJ5IHRoaXMgbnVtYmVyLCBpbnRlcnByZXRlZCBhY2NvcmRpbmcKK3RvIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Y2hhcjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bmFtZVszMl08L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCBhIGNoaXAgYnkgdGhpcyBuYW1lLCBpbnRlcnByZXRlZCBhY2NvcmRpbmcKK3RvIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1kYmctY2hpcC1pZGVudCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnN0cnVjdCB2NGwyX2RiZ19tYXRjaDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWF0Y2g8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Ib3cgdG8gbWF0Y2ggdGhlIGNoaXAsIHNlZSA8eHJlZiBsaW5rZW5kPSJpZGVudC12NGwyLWRiZy1tYXRjaCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZGVudDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgY2hpcCBpZGVudGlmaWVyIGFzIGRlZmluZWQgaW4gdGhlIExpbnV4Cis8ZmlsZW5hbWU+bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSwgb3Igb25lIG9mCit0aGUgdmFsdWVzIGZyb20gPHhyZWYgbGlua2VuZD0iY2hpcC1pZHMiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmV2aXNpb248L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BIGNoaXAgcmV2aXNpb24sIGNoaXAgYW5kIGRyaXZlciBzcGVjaWZpYy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8IS0tIE5vdGUgZm9yIGNvbnZlbmllbmNlIHZpZGlvYy1kYmctZy1yZWdpc3Rlci5zZ21sCisJIGNvbnRhaW5zIGEgZHVwbGljYXRlIG9mIHRoaXMgdGFibGUuIC0tPgorICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iaWRlbnQtY2hpcC1tYXRjaC10eXBlcyI+CisgICAgICA8dGl0bGU+Q2hpcCBNYXRjaCBUeXBlczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSElQX01BVENIX0hPU1Q8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hdGNoIHRoZSBudGggY2hpcCBvbiB0aGUgY2FyZCwgemVybyBmb3IgdGhlCisJICAgIGhvc3QgY2hpcC4gRG9lcyBub3QgbWF0Y2ggJmkyYzsgY2hpcHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggYW4gJmkyYzsgY2hpcCBieSBpdHMgZHJpdmVyIG5hbWUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hdGNoIGEgY2hpcCBieSBpdHMgNyBiaXQgJmkyYzsgYnVzIGFkZHJlc3MuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfQUM5NzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggdGhlIG50aCBhbmNpbGlhcnkgQUM5NyBjaGlwLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gVGhpcyBpcyBhbiBhbm9ueW1vdXMgZW51bSBpbiBtZWRpYS92NGwyLWNoaXAtaWRlbnQuaC4gLS0+CisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJjaGlwLWlkcyI+CisgICAgICA8dGl0bGU+Q2hpcCBJZGVudGlmaWVyczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JREVOVF9OT05FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT5ObyBjaGlwIG1hdGNoZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lERU5UX0FNQklHVU9VUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+TXVsdGlwbGUgY2hpcHMgbWF0Y2hlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSURFTlRfVU5LTk9XTjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBjaGlwIGlzIHByZXNlbnQgYXQgdGhpcyBhZGRyZXNzLCBidXQgdGhlIGRyaXZlcgorY291bGQgbm90IGlkZW50aWZ5IGl0LjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsLCBvciB0aGUKKzxzdHJ1Y3RmaWVsZD5tYXRjaF90eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODBjN2YzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sCkBAIC0wLDAgKzEsMjc1IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1kYmctZy1yZWdpc3RlciI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgVklESU9DX0RCR19TX1JFR0lTVEVSPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfREJHX0dfUkVHSVNURVI8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX0RCR19TX1JFR0lTVEVSPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlJlYWQgb3Igd3JpdGUgaGFyZHdhcmUgcmVnaXN0ZXJzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfREJHX0dfUkVHSVNURVIsIFZJRElPQ19EQkdfU19SRUdJU1RFUjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPG5vdGU+CisgICAgICA8dGl0bGU+RXhwZXJpbWVudGFsPC90aXRsZT4KKworICAgICAgPHBhcmE+VGhpcyBpcyBhbiA8bGluayBsaW5rZW5kPSJleHBlcmltZW50YWwiPmV4cGVyaW1lbnRhbDwvbGluaz4KK2ludGVyZmFjZSBhbmQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLjwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT5Gb3IgZHJpdmVyIGRlYnVnZ2luZyBwdXJwb3NlcyB0aGVzZSBpb2N0bHMgYWxsb3cgdGVzdAorYXBwbGljYXRpb25zIHRvIGFjY2VzcyBoYXJkd2FyZSByZWdpc3RlcnMgZGlyZWN0bHkuIFJlZ3VsYXIKK2FwcGxpY2F0aW9ucyBtdXN0IG5vdCB1c2UgdGhlbS48L3BhcmE+CisKKyAgICA8cGFyYT5TaW5jZSB3cml0aW5nIG9yIGV2ZW4gcmVhZGluZyByZWdpc3RlcnMgY2FuIGplb3BhcmRpemUgdGhlCitzeXN0ZW0gc2VjdXJpdHksIGl0cyBzdGFiaWxpdHkgYW5kIGRhbWFnZSB0aGUgaGFyZHdhcmUsIGJvdGggaW9jdGxzCityZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiBBZGRpdGlvbmFsbHkgdGhlIExpbnV4IGtlcm5lbCBtdXN0IGJlCitjb21waWxlZCB3aXRoIHRoZSA8Y29uc3RhbnQ+Q09ORklHX1ZJREVPX0FEVl9ERUJVRzwvY29uc3RhbnQ+IG9wdGlvbgordG8gZW5hYmxlIHRoZXNlIGlvY3Rscy48L3BhcmE+CisKKyAgICA8cGFyYT5UbyB3cml0ZSBhIHJlZ2lzdGVyIGFwcGxpY2F0aW9ucyBtdXN0IGluaXRpYWxpemUgYWxsIGZpZWxkcworb2YgYSAmdjRsMi1kYmctcmVnaXN0ZXI7IGFuZCBjYWxsCis8Y29uc3RhbnQ+VklESU9DX0RCR19TX1JFR0lTVEVSPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBUaGUgPHN0cnVjdGZpZWxkPm1hdGNoLnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gb3IgPHN0cnVjdGZpZWxkPm1hdGNoLm5hbWU8L3N0cnVjdGZpZWxkPgorZmllbGRzIHNlbGVjdCBhIGNoaXAgb24gdGhlIFRWCitjYXJkLCB0aGUgPHN0cnVjdGZpZWxkPnJlZzwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyBhIHJlZ2lzdGVyCitudW1iZXIgYW5kIHRoZSA8c3RydWN0ZmllbGQ+dmFsPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdGhlIHZhbHVlIHRvIGJlCit3cml0dGVuIGludG8gdGhlIHJlZ2lzdGVyLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHJlYWQgYSByZWdpc3RlciBhcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIHRoZQorPHN0cnVjdGZpZWxkPm1hdGNoLnR5cGU8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5jaGlwPC9zdHJ1Y3RmaWVsZD4gb3IgPHN0cnVjdGZpZWxkPm1hdGNoLm5hbWU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5yZWc8L3N0cnVjdGZpZWxkPiBmaWVsZHMsIGFuZCBjYWxsCis8Y29uc3RhbnQ+VklESU9DX0RCR19HX1JFR0lTVEVSPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBPbiBzdWNjZXNzIHRoZSBkcml2ZXIgc3RvcmVzIHRoZSByZWdpc3RlciB2YWx1ZSBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD52YWw8L3N0cnVjdGZpZWxkPiBmaWVsZC4gT24gZmFpbHVyZSB0aGUgc3RydWN0dXJlIHJlbWFpbnMKK3VuY2hhbmdlZC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSE9TVDwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBzZWxlY3RzIHRoZSBudGggbm9uLSZpMmM7IGNoaXAKK29uIHRoZSBUViBjYXJkLiAgVGhlIG51bWJlciB6ZXJvIGFsd2F5cyBzZWxlY3RzIHRoZSBob3N0IGNoaXAsICZlZzsgdGhlCitjaGlwIGNvbm5lY3RlZCB0byB0aGUgUENJIG9yIFVTQiBidXMuIFlvdSBjYW4gZmluZCBvdXQgd2hpY2ggY2hpcHMgYXJlCitwcmVzZW50IHdpdGggdGhlICZWSURJT0MtREJHLUctQ0hJUC1JREVOVDsgaW9jdGwuPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiA8c3RydWN0ZmllbGQ+bWF0Y2gudHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9DSElQX01BVENIX0kyQ19EUklWRVI8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5uYW1lPC9zdHJ1Y3RmaWVsZD4gY29udGFpbnMgdGhlIEkyQyBkcml2ZXIgbmFtZS4KK0ZvciBpbnN0YW5jZQorPGNvbnN0YW50PiJzYWE3MTI3IjwvY29uc3RhbnQ+IHdpbGwgbWF0Y2ggYW55IGNoaXAKK3N1cHBvcnRlZCBieSB0aGUgc2FhNzEyNyBkcml2ZXIsIHJlZ2FyZGxlc3Mgb2YgaXRzICZpMmM7IGJ1cyBhZGRyZXNzLgorV2hlbiBtdWx0aXBsZSBjaGlwcyBzdXBwb3J0ZWQgYnkgdGhlIHNhbWUgZHJpdmVyIGFyZSBwcmVzZW50LCB0aGUKK2VmZmVjdCBvZiB0aGVzZSBpb2N0bHMgaXMgdW5kZWZpbmVkLiBBZ2FpbiB3aXRoIHRoZQorJlZJRElPQy1EQkctRy1DSElQLUlERU5UOyBpb2N0bCB5b3UgY2FuIGZpbmQgb3V0IHdoaWNoICZpMmM7IGNoaXBzIGFyZQorcHJlc2VudC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI8L2NvbnN0YW50PiwKKzxzdHJ1Y3RmaWVsZD5tYXRjaC5hZGRyPC9zdHJ1Y3RmaWVsZD4gc2VsZWN0cyBhIGNoaXAgYnkgaXRzIDcgYml0ICZpMmM7CitidXMgYWRkcmVzcy48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIDxzdHJ1Y3RmaWVsZD5tYXRjaC50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfQUM5NzwvY29uc3RhbnQ+LAorPHN0cnVjdGZpZWxkPm1hdGNoLmFkZHI8L3N0cnVjdGZpZWxkPiBzZWxlY3RzIHRoZSBudGggQUM5NyBjaGlwCitvbiB0aGUgVFYgY2FyZC48L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgIDx0aXRsZT5TdWNjZXNzIG5vdCBndWFyYW50ZWVkPC90aXRsZT4KKworICAgICAgPHBhcmE+RHVlIHRvIGEgZmxhdyBpbiB0aGUgTGludXggJmkyYzsgYnVzIGRyaXZlciB0aGVzZSBpb2N0bHMgbWF5CityZXR1cm4gc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYWN0dWFsbHkgcmVhZGluZyBvciB3cml0aW5nIGEgcmVnaXN0ZXIuIFRvCitjYXRjaCB0aGUgbW9zdCBsaWtlbHkgZmFpbHVyZSB3ZSByZWNvbW1lbmQgYSAmVklESU9DLURCRy1HLUNISVAtSURFTlQ7CitjYWxsIGNvbmZpcm1pbmcgdGhlIHByZXNlbmNlIG9mIHRoZSBzZWxlY3RlZCAmaTJjOyBjaGlwLjwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT5UaGVzZSBpb2N0bHMgYXJlIG9wdGlvbmFsLCBub3QgYWxsIGRyaXZlcnMgbWF5IHN1cHBvcnQgdGhlbS4KK0hvd2V2ZXIgd2hlbiBhIGRyaXZlciBzdXBwb3J0cyB0aGVzZSBpb2N0bHMgaXQgbXVzdCBhbHNvIHN1cHBvcnQKKyZWSURJT0MtREJHLUctQ0hJUC1JREVOVDsuIENvbnZlcnNlbHkgaXQgbWF5IHN1cHBvcnQKKzxjb25zdGFudD5WSURJT0NfREJHX0dfQ0hJUF9JREVOVDwvY29uc3RhbnQ+IGJ1dCBub3QgdGhlc2UgaW9jdGxzLjwvcGFyYT4KKworICAgIDxwYXJhPjxjb25zdGFudD5WSURJT0NfREJHX0dfUkVHSVNURVI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfREJHX1NfUkVHSVNURVI8L2NvbnN0YW50PiB3ZXJlIGludHJvZHVjZWQgaW4gTGludXgKKzIuNi4yMSwgYnV0IHRoZWlyIEFQSSB3YXMgY2hhbmdlZCB0byB0aGUgb25lIGRlc2NyaWJlZCBoZXJlIGluIGtlcm5lbCAyLjYuMjkuPC9wYXJhPgorCisgICAgPHBhcmE+V2UgcmVjb21tZW5kZWQgdGhlIDxhcHBsaWNhdGlvbj52NGwyLWRiZzwvYXBwbGljYXRpb24+Cit1dGlsaXR5IG92ZXIgY2FsbGluZyB0aGVzZSBpb2N0bHMgZGlyZWN0bHkuIEl0IGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorTGludXhUViB2NGwtZHZiIHJlcG9zaXRvcnk7IHNlZSA8dWxpbmsKK3VybD0iaHR0cDovL2xpbnV4dHYub3JnL3JlcG8vIj5odHRwOi8vbGludXh0di5vcmcvcmVwby88L3VsaW5rPiBmb3IKK2FjY2VzcyBpbnN0cnVjdGlvbnMuPC9wYXJhPgorCisgICAgPCEtLSBOb3RlIGZvciBjb252ZW5pZW5jZSB2aWRpb2MtZGJnLWctY2hpcC1pZGVudC5zZ21sCisJIGNvbnRhaW5zIGEgZHVwbGljYXRlIG9mIHRoaXMgdGFibGUuIC0tPgorICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1kYmctbWF0Y2giPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2RiZ19tYXRjaDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2VlIDx4cmVmIGxpbmtlbmQ9ImlkZW50LWNoaXAtbWF0Y2gtdHlwZXMiIC8+IGZvciBhIGxpc3Qgb2YKK3Bvc3NpYmxlIHR5cGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT4oYW5vbnltb3VzKTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmFkZHI8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCBhIGNoaXAgYnkgdGhpcyBudW1iZXIsIGludGVycHJldGVkIGFjY29yZGluZwordG8gdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5jaGFyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5uYW1lWzMyXTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hdGNoIGEgY2hpcCBieSB0aGlzIG5hbWUsIGludGVycHJldGVkIGFjY29yZGluZwordG8gdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZGJnLXJlZ2lzdGVyIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9kYmdfcmVnaXN0ZXI8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIC8+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5zdHJ1Y3QgdjRsMl9kYmdfbWF0Y2g8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1hdGNoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SG93IHRvIG1hdGNoIHRoZSBjaGlwLCBzZWUgPHhyZWYgbGlua2VuZD0idjRsMi1kYmctbWF0Y2giIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U2NDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVnPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QSByZWdpc3RlciBudW1iZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTY0PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52YWw8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgdmFsdWUgcmVhZCBmcm9tLCBvciB0byBiZSB3cml0dGVuIGludG8gdGhlCityZWdpc3Rlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8IS0tIE5vdGUgZm9yIGNvbnZlbmllbmNlIHZpZGlvYy1kYmctZy1jaGlwLWlkZW50LnNnbWwKKwkgY29udGFpbnMgYSBkdXBsaWNhdGUgb2YgdGhpcyB0YWJsZS4gLS0+CisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJjaGlwLW1hdGNoLXR5cGVzIj4KKyAgICAgIDx0aXRsZT5DaGlwIE1hdGNoIFR5cGVzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NISVBfTUFUQ0hfSE9TVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggdGhlIG50aCBjaGlwIG9uIHRoZSBjYXJkLCB6ZXJvIGZvciB0aGUKKwkgICAgaG9zdCBjaGlwLiBEb2VzIG5vdCBtYXRjaCAmaTJjOyBjaGlwcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCBhbiAmaTJjOyBjaGlwIGJ5IGl0cyBkcml2ZXIgbmFtZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+TWF0Y2ggYSBjaGlwIGJ5IGl0cyA3IGJpdCAmaTJjOyBidXMgYWRkcmVzcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0hJUF9NQVRDSF9BQzk3PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5NYXRjaCB0aGUgbnRoIGFuY2lsaWFyeSBBQzk3IGNoaXAuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaW9jdGwsIG9yIHRoZSBrZXJuZWwKK3dhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgPGNvbnN0YW50PkNPTkZJR19WSURFT19BRFZfREVCVUc8L2NvbnN0YW50Pgorb3B0aW9uLCBvciB0aGUgPHN0cnVjdGZpZWxkPm1hdGNoX3R5cGU8L3N0cnVjdGZpZWxkPiBpcyBpbnZhbGlkLCBvciB0aGUKK3NlbGVjdGVkIGNoaXAgb3IgcmVnaXN0ZXIgZG9lcyBub3QgZXhpc3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FUEVSTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMuIFJvb3QgcHJpdmlsZWdlcyBhcmUgcmVxdWlyZWQKK3RvIGV4ZWN1dGUgdGhlc2UgaW9jdGxzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbmNvZGVyLWNtZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbmNvZGVyLWNtZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkZGU5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVuY29kZXItY21kLnhtbApAQCAtMCwwICsxLDIwNCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZW5jb2Rlci1jbWQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfRU5DT0RFUl9DTUQsIFZJRElPQ19UUllfRU5DT0RFUl9DTUQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTkNPREVSX0NNRDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfVFJZX0VOQ09ERVJfQ01EPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkV4ZWN1dGUgYW4gZW5jb2RlciBjb21tYW5kPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2VuY29kZXJfY21kICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfRU5DT0RFUl9DTUQsIFZJRElPQ19UUllfRU5DT0RFUl9DTUQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxub3RlPgorICAgICAgPHRpdGxlPkV4cGVyaW1lbnRhbDwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoaXMgaXMgYW4gPGxpbmsgbGlua2VuZD0iZXhwZXJpbWVudGFsIj5leHBlcmltZW50YWw8L2xpbms+CitpbnRlcmZhY2UgYW5kIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS48L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHBhcmE+VGhlc2UgaW9jdGxzIGNvbnRyb2wgYW4gYXVkaW8vdmlkZW8gKHVzdWFsbHkgTVBFRy0pIGVuY29kZXIuCis8Y29uc3RhbnQ+VklESU9DX0VOQ09ERVJfQ01EPC9jb25zdGFudD4gc2VuZHMgYSBjb21tYW5kIHRvIHRoZQorZW5jb2RlciwgPGNvbnN0YW50PlZJRElPQ19UUllfRU5DT0RFUl9DTUQ8L2NvbnN0YW50PiBjYW4gYmUgdXNlZCB0bwordHJ5IGEgY29tbWFuZCB3aXRob3V0IGFjdHVhbGx5IGV4ZWN1dGluZyBpdC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzZW5kIGEgY29tbWFuZCBhcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgYQorICAgICZ2NGwyLWVuY29kZXItY21kOyBhbmQgY2FsbAorICAgIDxjb25zdGFudD5WSURJT0NfRU5DT0RFUl9DTUQ8L2NvbnN0YW50PiBvcgorICAgIDxjb25zdGFudD5WSURJT0NfVFJZX0VOQ09ERVJfQ01EPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworICAgIHN0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmNtZDwvc3RydWN0ZmllbGQ+IGZpZWxkIG11c3QgY29udGFpbiB0aGUKK2NvbW1hbmQgY29kZS4gVGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGN1cnJlbnRseQorb25seSB1c2VkIGJ5IHRoZSBTVE9QIGNvbW1hbmQgYW5kIGNvbnRhaW5zIG9uZSBiaXQ6IElmIHRoZQorPGNvbnN0YW50PlY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQ8L2NvbnN0YW50PiBmbGFnIGlzIHNldCwKK2VuY29kaW5nIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgY3VycmVudCA8d29yZGFzd29yZD5Hcm91cAorT2YgUGljdHVyZXM8L3dvcmRhc3dvcmQ+LCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGltbWVkaWF0ZWx5LjwvcGFyYT4KKworICAgIDxwYXJhPkEgPGZ1bmN0aW9uPnJlYWQ8L2Z1bmN0aW9uPigpIGNhbGwgc2VuZHMgYSBTVEFSVCBjb21tYW5kIHRvCit0aGUgZW5jb2RlciBpZiBpdCBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQuIEFmdGVyIGEgU1RPUCBjb21tYW5kLAorPGZ1bmN0aW9uPnJlYWQ8L2Z1bmN0aW9uPigpIGNhbGxzIHdpbGwgcmVhZCB0aGUgcmVtYWluaW5nIGRhdGEKK2J1ZmZlcmVkIGJ5IHRoZSBkcml2ZXIuIFdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0eSwKKzxmdW5jdGlvbj5yZWFkPC9mdW5jdGlvbj4oKSB3aWxsIHJldHVybiB6ZXJvIGFuZCB0aGUgbmV4dAorPGZ1bmN0aW9uPnJlYWQ8L2Z1bmN0aW9uPigpIGNhbGwgd2lsbCByZXN0YXJ0IHRoZSBlbmNvZGVyLjwvcGFyYT4KKworICAgIDxwYXJhPkEgPGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj4oKSBjYWxsIHNlbmRzIGFuIGltbWVkaWF0ZSBTVE9QCit0byB0aGUgZW5jb2RlciwgYW5kIGFsbCBidWZmZXJlZCBkYXRhIGlzIGRpc2NhcmRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UaGVzZSBpb2N0bHMgYXJlIG9wdGlvbmFsLCBub3QgYWxsIGRyaXZlcnMgbWF5IHN1cHBvcnQKK3RoZW0uIFRoZXkgd2VyZSBpbnRyb2R1Y2VkIGluIExpbnV4IDIuNi4yMS48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZW5jb2Rlci1jbWQiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2VuY29kZXJfY21kPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y21kPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGVuY29kZXIgY29tbWFuZCwgc2VlIDx4cmVmIGxpbmtlbmQ9ImVuY29kZXItY21kcyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkZsYWdzIHRvIGdvIHdpdGggdGhlIGNvbW1hbmQsIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJlbmNvZGVyLWZsYWdzIiAvPi4gSWYgbm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yCit0aGlzIGNvbW1hbmQsIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvCit6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+WzhdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImVuY29kZXItY21kcyI+CisgICAgICA8dGl0bGU+RW5jb2RlciBDb21tYW5kczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfQ01EX1NUQVJUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT5TdGFydCB0aGUgZW5jb2Rlci4gV2hlbiB0aGUgZW5jb2RlciBpcyBhbHJlYWR5CitydW5uaW5nIG9yIHBhdXNlZCwgdGhpcyBjb21tYW5kIGRvZXMgbm90aGluZy4gTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yCit0aGlzIGNvbW1hbmQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VOQ19DTURfU1RPUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+U3RvcCB0aGUgZW5jb2Rlci4gV2hlbiB0aGUKKzxjb25zdGFudD5WNEwyX0VOQ19DTURfU1RPUF9BVF9HT1BfRU5EPC9jb25zdGFudD4gZmxhZyBpcyBzZXQsCitlbmNvZGluZyB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgPHdvcmRhc3dvcmQ+R3JvdXAKK09mIFBpY3R1cmVzPC93b3JkYXN3b3JkPiwgb3RoZXJ3aXNlIGVuY29kaW5nIHdpbGwgc3RvcCBpbW1lZGlhdGVseS4KK1doZW4gdGhlIGVuY29kZXIgaXMgYWxyZWFkeSBzdG9wcGVkLCB0aGlzIGNvbW1hbmQgZG9lcworbm90aGluZy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRU5DX0NNRF9QQVVTRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+UGF1c2UgdGhlIGVuY29kZXIuIFdoZW4gdGhlIGVuY29kZXIgaGFzIG5vdCBiZWVuCitzdGFydGVkIHlldCwgdGhlIGRyaXZlciB3aWxsIHJldHVybiBhbiAmRVBFUk07LiBXaGVuIHRoZSBlbmNvZGVyIGlzCithbHJlYWR5IHBhdXNlZCwgdGhpcyBjb21tYW5kIGRvZXMgbm90aGluZy4gTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yCit0aGlzIGNvbW1hbmQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VOQ19DTURfUkVTVU1FPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5SZXN1bWUgZW5jb2RpbmcgYWZ0ZXIgYSBQQVVTRSBjb21tYW5kLiBXaGVuIHRoZQorZW5jb2RlciBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQsIHRoZSBkcml2ZXIgd2lsbCByZXR1cm4gYW4gJkVQRVJNOy4KK1doZW4gdGhlIGVuY29kZXIgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNvbW1hbmQgZG9lcyBub3RoaW5nLiBObworZmxhZ3MgYXJlIGRlZmluZWQgZm9yIHRoaXMgY29tbWFuZC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImVuY29kZXItZmxhZ3MiPgorICAgICAgPHRpdGxlPkVuY29kZXIgQ29tbWFuZCBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5TdG9wIGVuY29kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgPHdvcmRhc3dvcmQ+R3JvdXAgT2YKK1BpY3R1cmVzPC93b3JkYXN3b3JkPiwgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkuPC9lbnRyeT4KKwkgIDwvcm93PgorICAgICAgIDwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaW9jdGwsIG9yIHRoZQorPHN0cnVjdGZpZWxkPmNtZDwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGludmFsaWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FUEVSTTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYXBwbGljYXRpb24gc2VudCBhIFBBVVNFIG9yIFJFU1VNRSBjb21tYW5kIHdoZW4KK3RoZSBlbmNvZGVyIHdhcyBub3QgcnVubmluZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mbXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mbXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGQ0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZtdC54bWwKQEAgLTAsMCArMSwxNjQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW0tZm10Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0VOVU1fRk1UPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfRU5VTV9GTVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGltYWdlIGZvcm1hdHM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZm10ZGVzYworKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19FTlVNX0ZNVDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gZW51bWVyYXRlIGltYWdlIGZvcm1hdHMgYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPgorZmllbGQgb2YgJnY0bDItZm10ZGVzYzsgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0VOVU1fRk1UPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBvciByZXR1cm4gYW4KKyZFSU5WQUw7LiBBbGwgZm9ybWF0cyBhcmUgZW51bWVyYWJsZSBieSBiZWdpbm5pbmcgYXQgaW5kZXggemVybyBhbmQKK2luY3JlbWVudGluZyBieSBvbmUgdW50aWwgPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4gaXMKK3JldHVybmVkLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mbXRkZXNjIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9mbXRkZXNjPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5OdW1iZXIgb2YgdGhlIGZvcm1hdCBpbiB0aGUgZW51bWVyYXRpb24sIHNldCBieQordGhlIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGluIG5vIHdheSByZWxhdGVkIHRvIHRoZSA8c3RydWN0ZmllbGQ+CitwaXhlbGZvcm1hdDwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UeXBlIG9mIHRoZSBkYXRhIHN0cmVhbSwgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi4KK09ubHkgdGhlc2UgdHlwZXMgYXJlIHZhbGlkIGhlcmU6Cis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiwKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk8L2NvbnN0YW50PiwgYW5kIGN1c3RvbSAoZHJpdmVyCitkZWZpbmVkKSB0eXBlcyB3aXRoIGNvZGUgPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+CithbmQgaGlnaGVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TZWUgPHhyZWYgbGlua2VuZD0iZm10ZGVzYy1mbGFncyIgLz48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZGVzY3JpcHRpb248L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+RGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCwgYSBOVUwtdGVybWluYXRlZCBBU0NJSQorc3RyaW5nLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUgdXNlciwgZm9yIGV4YW1wbGU6ICJZVVYKKzQ6MjoyIi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeGVsZm9ybWF0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGltYWdlIGZvcm1hdCBpZGVudGlmaWVyLiBUaGlzIGlzIGEKK2ZvdXIgY2hhcmFjdGVyIGNvZGUgYXMgY29tcHV0ZWQgYnkgdGhlIHY0bDJfZm91cmNjKCkKK21hY3JvOjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPjxwcm9ncmFtbGlzdGluZyBpZD0idjRsMi1mb3VyY2MiPgorI2RlZmluZSB2NGwyX2ZvdXJjYyhhLGIsYyxkKSAoKChfX3UzMikoYSkmbHQ7Jmx0OzApfCgoX191MzIpKGIpJmx0OyZsdDs4KXwoKF9fdTMyKShjKSZsdDsmbHQ7MTYpfCgoX191MzIpKGQpJmx0OyZsdDsyNCkpCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT5TZXZlcmFsIGltYWdlIGZvcm1hdHMgYXJlIGFscmVhZHkKK2RlZmluZWQgYnkgdGhpcyBzcGVjaWZpY2F0aW9uIGluIDx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4uIE5vdGUgdGhlc2UKK2NvZGVzIGFyZSBub3QgdGhlIHNhbWUgYXMgdGhvc2UgdXNlZCBpbiB0aGUgV2luZG93cyB3b3JsZC48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBtdXN0IHNldAordGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJmbXRkZXNjLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5JbWFnZSBGb3JtYXQgRGVzY3JpcHRpb24gRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgY29tcHJlc3NlZCBmb3JtYXQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZNVF9GTEFHX0VNVUxBVEVEPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgZm9ybWF0IGlzIG5vdCBuYXRpdmUgdG8gdGhlIGRldmljZSBidXQgZW11bGF0ZWQKK3Rocm91Z2ggc29mdHdhcmUgKHVzdWFsbHkgbGlidjRsMiksIHdoZXJlIHBvc3NpYmxlIHRyeSB0byB1c2UgYSBuYXRpdmUgZm9ybWF0CitpbnN0ZWFkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLWZtdGRlc2M7IDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KK2lzIG5vdCBzdXBwb3J0ZWQgb3IgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGlzIG91dCBvZgorYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW0tZnJhbWVpbnRlcnZhbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMjE2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbApAQCAtMCwwICsxLDI3MCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZW51bS1mcmFtZWludGVydmFscyI+CisKKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkVudW1lcmF0ZSBmcmFtZSBpbnRlcnZhbHM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlBvaW50ZXIgdG8gYSAmdjRsMi1mcm1pdmFsZW51bTsgc3RydWN0dXJlIHRoYXQKK2NvbnRhaW5zIGEgcGl4ZWwgZm9ybWF0IGFuZCBzaXplIGFuZCByZWNlaXZlcyBhIGZyYW1lIGludGVydmFsLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGlzIGlvY3RsIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gZW51bWVyYXRlIGFsbCBmcmFtZQoraW50ZXJ2YWxzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cyBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCBhbmQKK2ZyYW1lIHNpemUuPC9wYXJhPgorICAgIDxwYXJhPlRoZSBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0cyBhbmQgZnJhbWUgc2l6ZXMgY2FuIGJlIG9idGFpbmVkCitieSB1c2luZyB0aGUgJlZJRElPQy1FTlVNLUZNVDsgYW5kICZWSURJT0MtRU5VTS1GUkFNRVNJWkVTOworZnVuY3Rpb25zLjwvcGFyYT4KKyAgICA8cGFyYT5UaGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgY29udGVudCBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybWl2YWxlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXBlbmQgb24gdGhlCit0eXBlIG9mIGZyYW1lIGludGVydmFscyB0aGUgZGV2aWNlIHN1cHBvcnRzLiBIZXJlIGFyZSB0aGUgc2VtYW50aWNzIG9mCit0aGUgZnVuY3Rpb24gZm9yIHRoZSBkaWZmZXJlbnQgY2FzZXM6PC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkRpc2NyZXRlOjwvZW1waGFzaXM+IFRoZSBmdW5jdGlvbgorcmV0dXJucyBzdWNjZXNzIGlmIHRoZSBnaXZlbiBpbmRleCB2YWx1ZSAoemVyby1iYXNlZCkgaXMgdmFsaWQuIFRoZQorYXBwbGljYXRpb24gc2hvdWxkIGluY3JlYXNlIHRoZSBpbmRleCBieSBvbmUgZm9yIGVhY2ggY2FsbCB1bnRpbAorPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGlzIHJldHVybmVkLiBUaGUgYHY0bDJfZnJtaXZhbGVudW0udHlwZWAKK2ZpZWxkIGlzIHNldCB0byBgVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEVgIGJ5IHRoZSBkcml2ZXIuIE9mIHRoZQordW5pb24gb25seSB0aGUgYGRpc2NyZXRlYCBtZW1iZXIgaXMgdmFsaWQuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+U3RlcC13aXNlOjwvZW1waGFzaXM+IFRoZSBmdW5jdGlvbgorcmV0dXJucyBzdWNjZXNzIGlmIHRoZSBnaXZlbiBpbmRleCB2YWx1ZSBpcyB6ZXJvIGFuZAorPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvciBhbnkgb3RoZXIgaW5kZXggdmFsdWUuIFRoZQorPHN0cnVjdGZpZWxkPnY0bDJfZnJtaXZhbGVudW0udHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIHNldCB0bworPGNvbnN0YW50PlY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YgdGhlCit1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMKK3ZhbGlkLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkNvbnRpbnVvdXM6PC9lbXBoYXNpcz4gVGhpcyBpcyBhCitzcGVjaWFsIGNhc2Ugb2YgdGhlIHN0ZXAtd2lzZSB0eXBlIGFib3ZlLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzCitpZiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUgaXMgemVybyBhbmQgPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvcgorYW55IG90aGVyIGluZGV4IHZhbHVlLiBUaGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybWl2YWxlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0ZSTUlWQUxfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YKK3RoZSB1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMgdmFsaWQKK2FuZCB0aGUgPHN0cnVjdGZpZWxkPnN0ZXA8L3N0cnVjdGZpZWxkPiB2YWx1ZSBpcyBzZXQgdG8gMS48L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgPHBhcmE+V2hlbiB0aGUgYXBwbGljYXRpb24gY2FsbHMgdGhlIGZ1bmN0aW9uIHdpdGggaW5kZXggemVybywgaXQKK211c3QgY2hlY2sgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gZGV0ZXJtaW5lIHRoZQordHlwZSBvZiBmcmFtZSBpbnRlcnZhbCBlbnVtZXJhdGlvbiB0aGUgZGV2aWNlIHN1cHBvcnRzLiBPbmx5IGZvciB0aGUKKzxjb25zdGFudD5WNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURTwvY29uc3RhbnQ+IHR5cGUgZG9lcyBpdCBtYWtlCitzZW5zZSB0byBpbmNyZWFzZSB0aGUgaW5kZXggdmFsdWUgdG8gcmVjZWl2ZSBtb3JlIGZyYW1lCitpbnRlcnZhbHMuPC9wYXJhPgorICAgIDxwYXJhPk5vdGUgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGZyYW1lIGludGVydmFscyBhcmUKK3JldHVybmVkIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcuIEluIHBhcnRpY3VsYXIgZG9lcyBpdCBub3Qgc2F5Cithbnl0aGluZyBhYm91dCBwb3RlbnRpYWwgZGVmYXVsdCBmcmFtZSBpbnRlcnZhbHMuPC9wYXJhPgorICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gYXNzdW1lIHRoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgZG9lcyBub3QKK2NoYW5nZSB3aXRob3V0IGFueSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYuIFRoaXMgbWVhbnMKK3RoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgaXMgY29uc2lzdGVudCBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QKK3BlcmZvcm0gYW55IG90aGVyIGlvY3RsIGNhbGxzIHdoaWxlIGl0IHJ1bnMgdGhlIGZyYW1lIGludGVydmFsCitlbnVtZXJhdGlvbi48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPjxlbXBoYXNpcyByb2xlPSJib2xkIj5GcmFtZSBpbnRlcnZhbHMgYW5kIGZyYW1lCityYXRlczo8L2VtcGhhc2lzPiBUaGUgVjRMMiBBUEkgdXNlcyBmcmFtZSBpbnRlcnZhbHMgaW5zdGVhZCBvZiBmcmFtZQorcmF0ZXMuIEdpdmVuIHRoZSBmcmFtZSBpbnRlcnZhbCB0aGUgZnJhbWUgcmF0ZSBjYW4gYmUgY29tcHV0ZWQgYXMKK2ZvbGxvd3M6PHNjcmVlbj5mcmFtZV9yYXRlID0gMSAvIGZyYW1lX2ludGVydmFsPC9zY3JlZW4+PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKworICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+U3RydWN0czwvdGl0bGU+CisKKyAgICA8cGFyYT5JbiB0aGUgc3RydWN0cyBiZWxvdywgPGVtcGhhc2lzPklOPC9lbXBoYXNpcz4gZGVub3RlcyBhCit2YWx1ZSB0aGF0IGhhcyB0byBiZSBmaWxsZWQgaW4gYnkgdGhlIGFwcGxpY2F0aW9uLAorPGVtcGhhc2lzPk9VVDwvZW1waGFzaXM+IGRlbm90ZXMgdmFsdWVzIHRoYXQgdGhlIGRyaXZlciBmaWxscyBpbi4gVGhlCithcHBsaWNhdGlvbiBzaG91bGQgemVybyBvdXQgYWxsIG1lbWJlcnMgZXhjZXB0IGZvciB0aGUKKzxlbXBoYXNpcz5JTjwvZW1waGFzaXM+IGZpZWxkcy48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZnJtaXZhbC1zdGVwd2lzZSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZnJtaXZhbF9zdGVwd2lzZTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5taW48L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NaW5pbXVtIGZyYW1lIGludGVydmFsIFtzXS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tYXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NYXhpbXVtIGZyYW1lIGludGVydmFsIFtzXS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItZnJhY3Q7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zdGVwPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RnJhbWUgaW50ZXJ2YWwgc3RlcCBzaXplIFtzXS48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZnJtaXZhbGVudW0iPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2ZybWl2YWxlbnVtPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklOOiBJbmRleCBvZiB0aGUgZ2l2ZW4gZnJhbWUgaW50ZXJ2YWwgaW4gdGhlCitlbnVtZXJhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeGVsX2Zvcm1hdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JTjogUGl4ZWwgZm9ybWF0IGZvciB3aGljaCB0aGUgZnJhbWUgaW50ZXJ2YWxzIGFyZQorZW51bWVyYXRlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklOOiBGcmFtZSB3aWR0aCBmb3Igd2hpY2ggdGhlIGZyYW1lIGludGVydmFscyBhcmUKK2VudW1lcmF0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5oZWlnaHQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+SU46IEZyYW1lIGhlaWdodCBmb3Igd2hpY2ggdGhlIGZyYW1lIGludGVydmFscyBhcmUKK2VudW1lcmF0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9VVDogRnJhbWUgaW50ZXJ2YWwgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9VVDogRnJhbWUgaW50ZXJ2YWwgd2l0aCB0aGUgZ2l2ZW4gaW5kZXguPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRpc2NyZXRlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RnJhbWUgaW50ZXJ2YWwgW3NdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItZnJtaXZhbC1zdGVwd2lzZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXB3aXNlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZFsyXTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBzcGFjZSBmb3IgZnV0dXJlIHVzZS48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5FbnVtczwvdGl0bGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZnJtaXZhbHR5cGVzIj4KKyAgICAgIDx0aXRsZT5lbnVtIDxzdHJ1Y3RuYW1lPnY0bDJfZnJtaXZhbHR5cGVzPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PkRpc2NyZXRlIGZyYW1lIGludGVydmFsLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GUk1JVkFMX1RZUEVfQ09OVElOVU9VUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+Q29udGludW91cyBmcmFtZSBpbnRlcnZhbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5TdGVwLXdpc2UgZGVmaW5lZCBmcmFtZSBpbnRlcnZhbC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8cGFyYT5TZWUgdGhlIGRlc2NyaXB0aW9uIHNlY3Rpb24gYWJvdmUgZm9yIGEgbGlzdCBvZiByZXR1cm4KK3ZhbHVlcyB0aGF0IDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiBjYW4gaGF2ZS48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW0tZnJhbWVzaXplcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmE0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sCkBAIC0wLDAgKzEsMjgyIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMiPgorCisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGZyYW1lIHNpemVzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfRU5VTV9GUkFNRVNJWkVTPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlBvaW50ZXIgdG8gYSAmdjRsMi1mcm1zaXplZW51bTsgdGhhdCBjb250YWlucyBhbiBpbmRleAorYW5kIHBpeGVsIGZvcm1hdCBhbmQgcmVjZWl2ZXMgYSBmcmFtZSB3aWR0aCBhbmQgaGVpZ2h0LjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8bm90ZT4KKyAgICAgIDx0aXRsZT5FeHBlcmltZW50YWw8L3RpdGxlPgorCisgICAgICA8cGFyYT5UaGlzIGlzIGFuIDxsaW5rIGxpbmtlbmQ9ImV4cGVyaW1lbnRhbCI+ZXhwZXJpbWVudGFsPC9saW5rPgoraW50ZXJmYWNlIGFuZCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuPC9wYXJhPgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBlbnVtZXJhdGUgYWxsIGZyYW1lIHNpemVzCisoJmllOyB3aWR0aCBhbmQgaGVpZ2h0IGluIHBpeGVscykgdGhhdCB0aGUgZGV2aWNlIHN1cHBvcnRzIGZvciB0aGUKK2dpdmVuIHBpeGVsIGZvcm1hdC48L3BhcmE+CisgICAgPHBhcmE+VGhlIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXRzIGNhbiBiZSBvYnRhaW5lZCBieSB1c2luZyB0aGUKKyZWSURJT0MtRU5VTS1GTVQ7IGZ1bmN0aW9uLjwvcGFyYT4KKyAgICA8cGFyYT5UaGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgY29udGVudCBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybXNpemVlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXBlbmQgb24gdGhlCit0eXBlIG9mIGZyYW1lIHNpemVzIHRoZSBkZXZpY2Ugc3VwcG9ydHMuIEhlcmUgYXJlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlCitmdW5jdGlvbiBmb3IgdGhlIGRpZmZlcmVudCBjYXNlczo8L3BhcmE+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPjxlbXBoYXNpcyByb2xlPSJib2xkIj5EaXNjcmV0ZTo8L2VtcGhhc2lzPiBUaGUgZnVuY3Rpb24KK3JldHVybnMgc3VjY2VzcyBpZiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUgKHplcm8tYmFzZWQpIGlzIHZhbGlkLiBUaGUKK2FwcGxpY2F0aW9uIHNob3VsZCBpbmNyZWFzZSB0aGUgaW5kZXggYnkgb25lIGZvciBlYWNoIGNhbGwgdW50aWwKKzxjb25zdGFudD5FSU5WQUw8L2NvbnN0YW50PiBpcyByZXR1cm5lZC4gVGhlCis8c3RydWN0ZmllbGQ+djRsMl9mcm1zaXplZW51bS50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU8L2NvbnN0YW50PiBieSB0aGUgZHJpdmVyLiBPZiB0aGUKK3VuaW9uIG9ubHkgdGhlIDxzdHJ1Y3RmaWVsZD5kaXNjcmV0ZTwvc3RydWN0ZmllbGQ+IG1lbWJlciBpcwordmFsaWQuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+U3RlcC13aXNlOjwvZW1waGFzaXM+IFRoZSBmdW5jdGlvbgorcmV0dXJucyBzdWNjZXNzIGlmIHRoZSBnaXZlbiBpbmRleCB2YWx1ZSBpcyB6ZXJvIGFuZAorPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvciBhbnkgb3RoZXIgaW5kZXggdmFsdWUuIFRoZQorPHN0cnVjdGZpZWxkPnY0bDJfZnJtc2l6ZWVudW0udHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIHNldCB0bworPGNvbnN0YW50PlY0TDJfRlJNU0laRV9UWVBFX1NURVBXSVNFPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YgdGhlCit1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMKK3ZhbGlkLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisJPHBhcmE+PGVtcGhhc2lzIHJvbGU9ImJvbGQiPkNvbnRpbnVvdXM6PC9lbXBoYXNpcz4gVGhpcyBpcyBhCitzcGVjaWFsIGNhc2Ugb2YgdGhlIHN0ZXAtd2lzZSB0eXBlIGFib3ZlLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzCitpZiB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUgaXMgemVybyBhbmQgPGNvbnN0YW50PkVJTlZBTDwvY29uc3RhbnQ+IGZvcgorYW55IG90aGVyIGluZGV4IHZhbHVlLiBUaGUKKzxzdHJ1Y3RmaWVsZD52NGwyX2ZybXNpemVlbnVtLnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gYnkgdGhlIGRyaXZlci4gT2YKK3RoZSB1bmlvbiBvbmx5IHRoZSA8c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPiBtZW1iZXIgaXMgdmFsaWQKK2FuZCB0aGUgPHN0cnVjdGZpZWxkPnN0ZXBfd2lkdGg8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5zdGVwX2hlaWdodDwvc3RydWN0ZmllbGQ+IHZhbHVlcyBhcmUgc2V0IHRvIDEuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgIDxwYXJhPldoZW4gdGhlIGFwcGxpY2F0aW9uIGNhbGxzIHRoZSBmdW5jdGlvbiB3aXRoIGluZGV4IHplcm8sIGl0CittdXN0IGNoZWNrIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIGRldGVybWluZSB0aGUKK3R5cGUgb2YgZnJhbWUgc2l6ZSBlbnVtZXJhdGlvbiB0aGUgZGV2aWNlIHN1cHBvcnRzLiBPbmx5IGZvciB0aGUKKzxjb25zdGFudD5WNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURTwvY29uc3RhbnQ+IHR5cGUgZG9lcyBpdCBtYWtlCitzZW5zZSB0byBpbmNyZWFzZSB0aGUgaW5kZXggdmFsdWUgdG8gcmVjZWl2ZSBtb3JlIGZyYW1lIHNpemVzLjwvcGFyYT4KKyAgICA8cGFyYT5Ob3RlIHRoYXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmcmFtZSBzaXplcyBhcmUgcmV0dXJuZWQKK2hhcyBubyBzcGVjaWFsIG1lYW5pbmcuIEluIHBhcnRpY3VsYXIgZG9lcyBpdCBub3Qgc2F5IGFueXRoaW5nIGFib3V0Citwb3RlbnRpYWwgZGVmYXVsdCBmb3JtYXQgc2l6ZXMuPC9wYXJhPgorICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gYXNzdW1lIHRoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgZG9lcyBub3QKK2NoYW5nZSB3aXRob3V0IGFueSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYuIFRoaXMgbWVhbnMKK3RoYXQgdGhlIGVudW1lcmF0aW9uIGRhdGEgaXMgY29uc2lzdGVudCBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QKK3BlcmZvcm0gYW55IG90aGVyIGlvY3RsIGNhbGxzIHdoaWxlIGl0IHJ1bnMgdGhlIGZyYW1lIHNpemUKK2VudW1lcmF0aW9uLjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPlN0cnVjdHM8L3RpdGxlPgorCisgICAgPHBhcmE+SW4gdGhlIHN0cnVjdHMgYmVsb3csIDxlbXBoYXNpcz5JTjwvZW1waGFzaXM+IGRlbm90ZXMgYQordmFsdWUgdGhhdCBoYXMgdG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBhcHBsaWNhdGlvbiwKKzxlbXBoYXNpcz5PVVQ8L2VtcGhhc2lzPiBkZW5vdGVzIHZhbHVlcyB0aGF0IHRoZSBkcml2ZXIgZmlsbHMgaW4uIFRoZQorYXBwbGljYXRpb24gc2hvdWxkIHplcm8gb3V0IGFsbCBtZW1iZXJzIGV4Y2VwdCBmb3IgdGhlCis8ZW1waGFzaXM+SU48L2VtcGhhc2lzPiBmaWVsZHMuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWZybXNpemUtZGlzY3JldGUiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2ZybXNpemVfZGlzY3JldGU8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldpZHRoIG9mIHRoZSBmcmFtZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SGVpZ2h0IG9mIHRoZSBmcmFtZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcm1zaXplLXN0ZXB3aXNlIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9mcm1zaXplX3N0ZXB3aXNlPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWluX3dpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWluaW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWF4X3dpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF4aW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RlcF93aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkZyYW1lIHdpZHRoIHN0ZXAgc2l6ZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWluX2hlaWdodDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1pbmltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tYXhfaGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF4aW11bSBmcmFtZSBoZWlnaHQgW3BpeGVsXS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXBfaGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RnJhbWUgaGVpZ2h0IHN0ZXAgc2l6ZSBbcGl4ZWxdLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcm1zaXplZW51bSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZnJtc2l6ZWVudW08L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIC8+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+SU46IEluZGV4IG9mIHRoZSBnaXZlbiBmcmFtZSBzaXplIGluIHRoZSBlbnVtZXJhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeGVsX2Zvcm1hdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JTjogUGl4ZWwgZm9ybWF0IGZvciB3aGljaCB0aGUgZnJhbWUgc2l6ZXMgYXJlIGVudW1lcmF0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk9VVDogRnJhbWUgc2l6ZSB0eXBlIHRoZSBkZXZpY2Ugc3VwcG9ydHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnVuaW9uPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+T1VUOiBGcmFtZSBzaXplIHdpdGggdGhlIGdpdmVuIGluZGV4LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItZnJtc2l6ZS1kaXNjcmV0ZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRpc2NyZXRlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi1mcm1zaXplLXN0ZXB3aXNlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RlcHdpc2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkWzJdPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIHNwYWNlIGZvciBmdXR1cmUgdXNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkVudW1zPC90aXRsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcm1zaXpldHlwZXMiPgorICAgICAgPHRpdGxlPmVudW0gPHN0cnVjdG5hbWU+djRsMl9mcm1zaXpldHlwZXM8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+RGlzY3JldGUgZnJhbWUgc2l6ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRlJNU0laRV9UWVBFX0NPTlRJTlVPVVM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbnRpbnVvdXMgZnJhbWUgc2l6ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRlJNU0laRV9UWVBFX1NURVBXSVNFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT5TdGVwLXdpc2UgZGVmaW5lZCBmcmFtZSBzaXplLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDxwYXJhPlNlZSB0aGUgZGVzY3JpcHRpb24gc2VjdGlvbiBhYm92ZSBmb3IgYSBsaXN0IG9mIHJldHVybgordmFsdWVzIHRoYXQgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IGNhbiBoYXZlLjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1hdWRpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZThmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW8ueG1sCkBAIC0wLDAgKzEsODYgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW1hdWRpbyI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNQVVESU88L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNQVVESU88L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGF1ZGlvIGlucHV0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9hdWRpbyAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1BVURJTzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gYXVkaW8gaW5wdXQgYXBwbGljYXRpb25zCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgemVybyBvdXQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBvZiBhICZ2NGwyLWF1ZGlvOworYW5kIGNhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfRU5VTUFVRElPPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIKK3RvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBvciByZXR1cm4gYW4KKyZFSU5WQUw7IHdoZW4gdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuIFRvIGVudW1lcmF0ZSBhbGwgYXVkaW8KK2lucHV0cyBhcHBsaWNhdGlvbnMgc2hhbGwgYmVnaW4gYXQgaW5kZXggemVybywgaW5jcmVtZW50aW5nIGJ5IG9uZQordW50aWwgdGhlIGRyaXZlciByZXR1cm5zIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDxwYXJhPlNlZSA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1hdWRpbyIgLz4gZm9yIGEgZGVzY3JpcHRpb24gb2YKKyZ2NGwyLWF1ZGlvOy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgbnVtYmVyIG9mIHRoZSBhdWRpbyBpbnB1dCBpcyBvdXQgb2YgYm91bmRzLCBvcgordGhlcmUgYXJlIG5vIGF1ZGlvIGlucHV0cyBhdCBhbGwgYW5kIHRoaXMgaW9jdGwgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1hdWRpb291dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW9vdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZDdjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW9vdXQueG1sCkBAIC0wLDAgKzEsODkgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW1hdWRpb291dCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNQVVET1VUPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfRU5VTUFVRE9VVDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5FbnVtZXJhdGUgYXVkaW8gb3V0cHV0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9hdWRpb291dCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1BVURPVVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGF1ZGlvIG91dHB1dCBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCB6ZXJvIG91dCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEgJnY0bDItYXVkaW9vdXQ7IGFuZAorY2FsbCB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0FVRE9VVDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyCit0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJuIGFuCismRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsIGF1ZGlvCitvdXRwdXRzIGFwcGxpY2F0aW9ucyBzaGFsbCBiZWdpbiBhdCBpbmRleCB6ZXJvLCBpbmNyZW1lbnRpbmcgYnkgb25lCit1bnRpbCB0aGUgZHJpdmVyIHJldHVybnMgPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4uPC9wYXJhPgorCisgICAgPHBhcmE+Tm90ZSBjb25uZWN0b3JzIG9uIGEgVFYgY2FyZCB0byBsb29wIGJhY2sgdGhlIHJlY2VpdmVkIGF1ZGlvCitzaWduYWwgdG8gYSBzb3VuZCBjYXJkIGFyZSBub3QgYXVkaW8gb3V0cHV0cyBpbiB0aGlzIHNlbnNlLjwvcGFyYT4KKworICAgIDxwYXJhPlNlZSA8eHJlZiBsaW5rZW5kPSJ2aWRpb2MtZy1hdWRpb291dCIgLz4gZm9yIGEgZGVzY3JpcHRpb24gb2YKKyZ2NGwyLWF1ZGlvb3V0Oy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgbnVtYmVyIG9mIHRoZSBhdWRpbyBvdXRwdXQgaXMgb3V0IG9mIGJvdW5kcywgb3IKK3RoZXJlIGFyZSBubyBhdWRpbyBvdXRwdXRzIGF0IGFsbCBhbmQgdGhpcyBpb2N0bCBpcyBub3QKK3N1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWlucHV0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1pbnB1dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0ODU2YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1pbnB1dC54bWwKQEAgLTAsMCArMSwyODcgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWVudW1pbnB1dCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNSU5QVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNSU5QVVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIHZpZGVvIGlucHV0czwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9pbnB1dAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19FTlVNSU5QVVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdmlkZW8gaW5wdXQgYXBwbGljYXRpb25zCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1pbnB1dDsKK2FuZCBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0VOVU1JTlBVVDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYQorcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IKK3JldHVybiBhbiAmRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsCitpbnB1dHMgYXBwbGljYXRpb25zIHNoYWxsIGJlZ2luIGF0IGluZGV4IHplcm8sIGluY3JlbWVudGluZyBieSBvbmUKK3VudGlsIHRoZSBkcml2ZXIgcmV0dXJucyA8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPi48L3BhcmE+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9InY0bDItaW5wdXQiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2lucHV0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5JZGVudGlmaWVzIHRoZSBpbnB1dCwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgdmlkZW8gaW5wdXQsIGEgTlVMLXRlcm1pbmF0ZWQgQVNDSUkKK3N0cmluZywgZm9yIGV4YW1wbGU6ICJWaW4gKENvbXBvc2l0ZSAyKSIuIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQKK2ZvciB0aGUgdXNlciwgcHJlZmVyYWJseSB0aGUgY29ubmVjdG9yIGxhYmVsIG9uIHRoZSBkZXZpY2UgaXRzZWxmLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGlucHV0LCBzZWUgPHhyZWYKKwkJbGlua2VuZD0iaW5wdXQtdHlwZSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5hdWRpb3NldDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPkRyaXZlcnMgY2FuIGVudW1lcmF0ZSB1cCB0byAzMiB2aWRlbyBhbmQKK2F1ZGlvIGlucHV0cy4gVGhpcyBmaWVsZCBzaG93cyB3aGljaCBhdWRpbyBpbnB1dHMgd2VyZSBzZWxlY3RhYmxlIGFzCithdWRpbyBzb3VyY2UgaWYgdGhpcyB3YXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2aWRlbyBpbnB1dC4gSXQgaXMgYQorYml0IG1hc2suIFRoZSBMU0IgY29ycmVzcG9uZHMgdG8gYXVkaW8gaW5wdXQgMCwgdGhlIE1TQiB0byBpbnB1dCAzMS4KK0FueSBudW1iZXIgb2YgYml0cyBjYW4gYmUgc2V0LCBvciBub25lLjwvcGFyYT48cGFyYT5XaGVuIHRoZSBkcml2ZXIKK2RvZXMgbm90IGVudW1lcmF0ZSBhdWRpbyBpbnB1dHMgbm8gYml0cyBtdXN0IGJlIHNldC4gQXBwbGljYXRpb25zCitzaGFsbCBub3QgaW50ZXJwcmV0IHRoaXMgYXMgbGFjayBvZiBhdWRpbyBzdXBwb3J0LiBTb21lIGRyaXZlcnMKK2F1dG9tYXRpY2FsbHkgc2VsZWN0IGF1ZGlvIHNvdXJjZXMgYW5kIGRvIG5vdCBlbnVtZXJhdGUgdGhlbSBzaW5jZQordGhlcmUgaXMgbm8gY2hvaWNlIGFueXdheS48L3BhcmE+PHBhcmE+Rm9yIGRldGFpbHMgb24gYXVkaW8gaW5wdXRzIGFuZAoraG93IHRvIHNlbGVjdCB0aGUgY3VycmVudCBpbnB1dCBzZWUgPHhyZWYKKwkJICBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5DYXB0dXJlIGRldmljZXMgY2FuIGhhdmUgemVybyBvciBtb3JlIHR1bmVycyAoUkYKK2RlbW9kdWxhdG9ycykuIFdoZW4gdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9JTlBVVF9UWVBFX1RVTkVSPC9jb25zdGFudD4gdGhpcyBpcyBhbiBSRiBjb25uZWN0b3IgYW5kCit0aGlzIGZpZWxkIGlkZW50aWZpZXMgdGhlIHR1bmVyLiBJdCBjb3JyZXNwb25kcyB0bworJnY0bDItdHVuZXI7IGZpZWxkIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+LiBGb3IgZGV0YWlscyBvbgordHVuZXJzIHNlZSA8eHJlZiBsaW5rZW5kPSJ0dW5lciIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXN0ZC1pZDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkV2ZXJ5IHZpZGVvIGlucHV0IHN1cHBvcnRzIG9uZSBvciBtb3JlIGRpZmZlcmVudAordmlkZW8gc3RhbmRhcmRzLiBUaGlzIGZpZWxkIGlzIGEgc2V0IG9mIGFsbCBzdXBwb3J0ZWQgc3RhbmRhcmRzLiBGb3IKK2RldGFpbHMgb24gdmlkZW8gc3RhbmRhcmRzIGFuZCBob3cgdG8gc3dpdGNoIHNlZSA8eHJlZgorbGlua2VuZD0ic3RhbmRhcmQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RhdHVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBmaWVsZCBwcm92aWRlcyBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitpbnB1dC4gU2VlIDx4cmVmIGxpbmtlbmQ9ImlucHV0LXN0YXR1cyIgLz4gZm9yIGZsYWdzLgorV2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBzZW5zb3Igb3JpZW50YXRpb24gYml0cyA8c3RydWN0ZmllbGQ+c3RhdHVzPC9zdHJ1Y3RmaWVsZD4gaXMgb25seSB2YWxpZCB3aGVuIHRoaXMgaXMgdGhlCitjdXJyZW50IGlucHV0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0iaW5wdXQtdHlwZSI+CisgICAgICA8dGl0bGU+SW5wdXQgVHlwZXM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9UVU5FUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBpbnB1dCB1c2VzIGEgdHVuZXIgKFJGIGRlbW9kdWxhdG9yKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5QVVRfVFlQRV9DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkFuYWxvZyBiYXNlYmFuZCBpbnB1dCwgZm9yIGV4YW1wbGUgQ1ZCUyAvCitDb21wb3NpdGUgVmlkZW8sIFMtVmlkZW8sIFJHQi48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8IS0tIFN0YXR1cyBmbGFncyBiYXNlZCBvbiBwcm9wb3NhbCBieSBNYXJrIE1jQ2xlbGxhbmQsCit2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20gb24gMTggT2N0IDIwMDIsIHN1YmplY3QgIlJlOiBbVjRMXSBSZToKK3Y0bDIgYXBpIi4gIldoeSBhcmUgc29tZSBvZiB0aGVtIGludmVydGVkPyBTbyB0aGF0IHRoZSBkcml2ZXIgZG9lc24ndAoraGF2ZSB0byBsaWUgYWJvdXQgdGhlIHN0YXR1cyBpbiBjYXNlcyB3aGVyZSBpdCBjYW4ndCB0ZWxsIG9uZSB3YXkgb3IKK3RoZSBvdGhlci4gUGx1cywgYSBzdGF0dXMgb2YgemVybyB3b3VsZCBnZW5lcmFsbHkgbWVhbiB0aGF0IGV2ZXJ5dGhpbmcKK2lzIE9LLiIgLS0+CisKKyAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9ImlucHV0LXN0YXR1cyI+CisgICAgICA8dGl0bGU+SW5wdXQgU3RhdHVzIEZsYWdzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJPGNvbHNwZWMgY29sbmFtZT0iYzEiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzEiIG5hbWVlbmQ9ImMzIiBzcGFubmFtZT0iaHNwYW4iCisJICBhbGlnbj0ibGVmdCIgLz4KKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+R2VuZXJhbDwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9OT19QT1dFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+QXR0YWNoZWQgZGV2aWNlIGlzIG9mZi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTk9fU0lHTkFMPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTk9fQ09MT1I8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBoYXJkd2FyZSBzdXBwb3J0cyBjb2xvciBkZWNvZGluZywgYnV0IGRvZXMgbm90CitkZXRlY3QgY29sb3IgbW9kdWxhdGlvbiBpbiB0aGUgc2lnbmFsLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlNlbnNvciBPcmllbnRhdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9IRkxJUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMTA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGlucHV0IGlzIGNvbm5lY3RlZCB0byBhIGRldmljZSB0aGF0IHByb2R1Y2VzIGEgc2lnbmFsCit0aGF0IGlzIGZsaXBwZWQgaG9yaXpvbnRhbGx5IGFuZCBkb2VzIG5vdCBjb3JyZWN0IHRoaXMgYmVmb3JlIHBhc3NpbmcgdGhlCitzaWduYWwgdG8gdXNlcnNwYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9WRkxJUDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMjA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGlucHV0IGlzIGNvbm5lY3RlZCB0byBhIGRldmljZSB0aGF0IHByb2R1Y2VzIGEgc2lnbmFsCit0aGF0IGlzIGZsaXBwZWQgdmVydGljYWxseSBhbmQgZG9lcyBub3QgY29ycmVjdCB0aGlzIGJlZm9yZSBwYXNzaW5nIHRoZQorc2lnbmFsIHRvIHVzZXJzcGFjZS4gTm90ZSB0aGF0IGEgMTgwIGRlZ3JlZSByb3RhdGlvbiBpcyB0aGUgc2FtZSBhcyBIRkxJUCB8IFZGTElQPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+QW5hbG9nIFZpZGVvPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX05PX0hfTE9DSzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAxMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+Tm8gaG9yaXpvbnRhbCBzeW5jIGxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX0NPTE9SX0tJTEw8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMjAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgY29sb3Iga2lsbGVyIGNpcmN1aXQgYXV0b21hdGljYWxseSBkaXNhYmxlcyBjb2xvcgorZGVjb2Rpbmcgd2hlbiBpdCBkZXRlY3RzIG5vIGNvbG9yIG1vZHVsYXRpb24uIFdoZW4gdGhpcyBmbGFnIGlzIHNldAordGhlIGNvbG9yIGtpbGxlciBpcyBlbmFibGVkIDxlbXBoYXNpcz5hbmQ8L2VtcGhhc2lzPiBoYXMgc2h1dCBvZmYKK2NvbG9yIGRlY29kaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkRpZ2l0YWwgVmlkZW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTk9fU1lOQzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+Tm8gc3luY2hyb25pemF0aW9uIGxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX05PX0VRVTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMjAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+Tm8gZXF1YWxpemVyIGxvY2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX05PX0NBUlJJRVI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDQwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNhcnJpZXIgcmVjb3ZlcnkgZmFpbGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlZDUiBhbmQgU2V0LVRvcCBCb3g8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fU1RfTUFDUk9WSVNJT048L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAxMDAwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1hY3JvdmlzaW9uIGlzIGFuIGFuYWxvZyBjb3B5IHByZXZlbnRpb24gc3lzdGVtCittYW5nbGluZyB0aGUgdmlkZW8gc2lnbmFsIHRvIGNvbmZ1c2UgdmlkZW8gcmVjb3JkZXJzLiBXaGVuIHRoaXMKK2ZsYWcgaXMgc2V0IE1hY3JvdmlzaW9uIGhhcyBiZWVuIGRldGVjdGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9TVF9OT19BQ0NFU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAyMDAwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbmRpdGlvbmFsIGFjY2VzcyBkZW5pZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0lOX1NUX1ZUUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDQwMDAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VlRSIHRpbWUgY29uc3RhbnQuIFs/XTwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1pbnB1dDsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMKK291dCBvZiBib3VuZHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bW91dHB1dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkMTZkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sCkBAIC0wLDAgKzEsMTcyIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1lbnVtb3V0cHV0Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0VOVU1PVVRQVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19FTlVNT1VUUFVUPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkVudW1lcmF0ZSB2aWRlbyBvdXRwdXRzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX291dHB1dCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1PVVRQVVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdmlkZW8gb3V0cHV0cyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLW91dHB1dDsKK2FuZCBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0VOVU1PVVRQVVQ8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEKK3BvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yCityZXR1cm4gYW4gJkVJTlZBTDsgd2hlbiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gVG8gZW51bWVyYXRlIGFsbAorb3V0cHV0cyBhcHBsaWNhdGlvbnMgc2hhbGwgYmVnaW4gYXQgaW5kZXggemVybywgaW5jcmVtZW50aW5nIGJ5IG9uZQordW50aWwgdGhlIGRyaXZlciByZXR1cm5zIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0idjRsMi1vdXRwdXQiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX291dHB1dDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgb3V0cHV0LCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5OYW1lIG9mIHRoZSB2aWRlbyBvdXRwdXQsIGEgTlVMLXRlcm1pbmF0ZWQgQVNDSUkKK3N0cmluZywgZm9yIGV4YW1wbGU6ICJWb3V0Ii4gVGhpcyBpbmZvcm1hdGlvbiBpcyBpbnRlbmRlZCBmb3IgdGhlCit1c2VyLCBwcmVmZXJhYmx5IHRoZSBjb25uZWN0b3IgbGFiZWwgb24gdGhlIGRldmljZSBpdHNlbGYuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VHlwZSBvZiB0aGUgb3V0cHV0LCBzZWUgPHhyZWYKKwkJbGlua2VuZD0ib3V0cHV0LXR5cGUiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+YXVkaW9zZXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5Ecml2ZXJzIGNhbiBlbnVtZXJhdGUgdXAgdG8gMzIgdmlkZW8gYW5kCithdWRpbyBvdXRwdXRzLiBUaGlzIGZpZWxkIHNob3dzIHdoaWNoIGF1ZGlvIG91dHB1dHMgd2VyZQorc2VsZWN0YWJsZSBhcyB0aGUgY3VycmVudCBvdXRwdXQgaWYgdGhpcyB3YXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAordmlkZW8gb3V0cHV0LiBJdCBpcyBhIGJpdCBtYXNrLiBUaGUgTFNCIGNvcnJlc3BvbmRzIHRvIGF1ZGlvIG91dHB1dCAwLAordGhlIE1TQiB0byBvdXRwdXQgMzEuIEFueSBudW1iZXIgb2YgYml0cyBjYW4gYmUgc2V0LCBvcgorbm9uZS48L3BhcmE+PHBhcmE+V2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IGVudW1lcmF0ZSBhdWRpbyBvdXRwdXRzIG5vCitiaXRzIG11c3QgYmUgc2V0LiBBcHBsaWNhdGlvbnMgc2hhbGwgbm90IGludGVycHJldCB0aGlzIGFzIGxhY2sgb2YKK2F1ZGlvIHN1cHBvcnQuIERyaXZlcnMgbWF5IGF1dG9tYXRpY2FsbHkgc2VsZWN0IGF1ZGlvIG91dHB1dHMgd2l0aG91dAorZW51bWVyYXRpbmcgdGhlbS48L3BhcmE+PHBhcmE+Rm9yIGRldGFpbHMgb24gYXVkaW8gb3V0cHV0cyBhbmQgaG93IHRvCitzZWxlY3QgdGhlIGN1cnJlbnQgb3V0cHV0IHNlZSA8eHJlZiBsaW5rZW5kPSJhdWRpbyIgLz4uPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bW9kdWxhdG9yPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+T3V0cHV0IGRldmljZXMgY2FuIGhhdmUgemVybyBvciBtb3JlIFJGIG1vZHVsYXRvcnMuCitXaGVuIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1I8L2NvbnN0YW50PiB0aGlzIGlzIGFuIFJGCitjb25uZWN0b3IgYW5kIHRoaXMgZmllbGQgaWRlbnRpZmllcyB0aGUgbW9kdWxhdG9yLiBJdCBjb3JyZXNwb25kcyB0bworJnY0bDItbW9kdWxhdG9yOyBmaWVsZCA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPi4gRm9yIGRldGFpbHMKK29uIG1vZHVsYXRvcnMgc2VlIDx4cmVmIGxpbmtlbmQ9InR1bmVyIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItc3RkLWlkOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RXZlcnkgdmlkZW8gb3V0cHV0IHN1cHBvcnRzIG9uZSBvciBtb3JlIGRpZmZlcmVudAordmlkZW8gc3RhbmRhcmRzLiBUaGlzIGZpZWxkIGlzIGEgc2V0IG9mIGFsbCBzdXBwb3J0ZWQgc3RhbmRhcmRzLiBGb3IKK2RldGFpbHMgb24gdmlkZW8gc3RhbmRhcmRzIGFuZCBob3cgdG8gc3dpdGNoIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJzdGFuZGFyZCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBtdXN0IHNldAordGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJvdXRwdXQtdHlwZSI+CisgICAgICA8dGl0bGU+T3V0cHV0IFR5cGU8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIG91dHB1dCBpcyBhbiBhbmFsb2cgVFYgbW9kdWxhdG9yLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9PVVRQVVRfVFlQRV9BTkFMT0c8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PkFuYWxvZyBiYXNlYmFuZCBvdXRwdXQsIGZvciBleGFtcGxlIENvbXBvc2l0ZSAvCitDVkJTLCBTLVZpZGVvLCBSR0IuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5Pls/XTwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICA8L3JlZnNlY3QxPgorICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1vdXRwdXQ7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CitpcyBvdXQgb2YgYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtc3RkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1zdGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODAzZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtc3RkLnhtbApAQCAtMCwwICsxLDM5MSBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZW51bXN0ZCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19FTlVNU1REPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfRU5VTVNURDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5FbnVtZXJhdGUgc3VwcG9ydGVkIHZpZGVvIHN0YW5kYXJkczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0VOVU1TVEQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdmlkZW8gc3RhbmRhcmQsCitlc3BlY2lhbGx5IGEgY3VzdG9tIChkcml2ZXIgZGVmaW5lZCkgb25lLCBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mICZ2NGwyLXN0YW5kYXJkOyBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfRU5VTVNURDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJuIGFuCismRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsIHN0YW5kYXJkcworYXBwbGljYXRpb25zIHNoYWxsIGJlZ2luICBhdCBpbmRleCB6ZXJvLCBpbmNyZW1lbnRpbmcgYnkgb25lIHVudGlsIHRoZQorZHJpdmVyIHJldHVybnMgPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4uIERyaXZlcnMgbWF5IGVudW1lcmF0ZSBhCitkaWZmZXJlbnQgc2V0IG9mIHN0YW5kYXJkcyBhZnRlciBzd2l0Y2hpbmcgdGhlIHZpZGVvIGlucHV0IG9yCitvdXRwdXQuPGZvb3Rub3RlPgorCTxwYXJhPlRoZSBzdXBwb3J0ZWQgc3RhbmRhcmRzIG1heSBvdmVybGFwIGFuZCB3ZSBuZWVkIGFuCit1bmFtYmlndW91cyBzZXQgdG8gZmluZCB0aGUgY3VycmVudCBzdGFuZGFyZCByZXR1cm5lZCBieQorPGNvbnN0YW50PlZJRElPQ19HX1NURDwvY29uc3RhbnQ+LjwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+PC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXN0YW5kYXJkIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9zdGFuZGFyZDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TnVtYmVyIG9mIHRoZSB2aWRlbyBzdGFuZGFyZCwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXN0ZC1pZDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGJpdHMgaW4gdGhpcyBmaWVsZCBpZGVudGlmeSB0aGUgc3RhbmRhcmQgYXMKK29uZSBvZiB0aGUgY29tbW9uIHN0YW5kYXJkcyBsaXN0ZWQgaW4gPHhyZWYgbGlua2VuZD0idjRsMi1zdGQtaWQiIC8+LAorb3IgaWYgYml0cyAzMiB0byA2MyBhcmUgc2V0IGFzIGN1c3RvbSBzdGFuZGFyZHMuIE11bHRpcGxlIGJpdHMgY2FuIGJlCitzZXQgaWYgdGhlIGhhcmR3YXJlIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2Ugc3RhbmRhcmRzLAoraG93ZXZlciBzZXBhcmF0ZSBpbmRpY2VzIGRvIG5vdCBpbmRpY2F0ZSB0aGUgb3Bwb3NpdGUuIFRoZQorPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gbXVzdCBiZSB1bmlxdWUuIE5vIG90aGVyIGVudW1lcmF0ZWQKKzxzdHJ1Y3RuYW1lPnY0bDJfc3RhbmRhcmQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSwgZm9yIHRoaXMgaW5wdXQgb3IKK291dHB1dCBhbnl3YXksIGNhbiBjb250YWluIHRoZSBzYW1lIHNldCBvZiBiaXRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD5bMjRdPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5hbWUgb2YgdGhlIHN0YW5kYXJkLCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcsIGZvciBleGFtcGxlOiAiUEFMLUIvRyIsICJOVFNDIEphcGFuIi4gVGhpcyBpbmZvcm1hdGlvbiBpcworaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZyYW1lcGVyaW9kPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGZyYW1lIHBlcmlvZCAobm90IGZpZWxkIHBlcmlvZCkgaXMgbnVtZXJhdG9yCisvIGRlbm9taW5hdG9yLiBGb3IgZXhhbXBsZSBNL05UU0MgaGFzIGEgZnJhbWUgcGVyaW9kIG9mIDEwMDEgLworMzAwMDAgc2Vjb25kcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZyYW1lbGluZXM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Ub3RhbCBsaW5lcyBwZXIgZnJhbWUgaW5jbHVkaW5nIGJsYW5raW5nLAorZS4mbmJzcDtnLiA2MjUgZm9yIEIvUEFMLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcmFjdCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZnJhY3Q8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5udW1lcmF0b3I8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRlbm9taW5hdG9yPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXN0ZC1pZCI+CisgICAgICA8dGl0bGU+dHlwZWRlZiA8c3RydWN0bmFtZT52NGwyX3N0ZF9pZDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191NjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnY0bDJfc3RkX2lkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyB0eXBlIGlzIGEgc2V0LCBlYWNoIGJpdCByZXByZXNlbnRpbmcgYW5vdGhlcgordmlkZW8gc3RhbmRhcmQgYXMgbGlzdGVkIGJlbG93IGFuZCBpbiA8eHJlZgorbGlua2VuZD0idmlkZW8tc3RhbmRhcmRzIiAvPi4gVGhlIDMyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgcmVzZXJ2ZWQKK2ZvciBjdXN0b20gKGRyaXZlciBkZWZpbmVkKSB2aWRlbyBzdGFuZGFyZHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHBhcmE+PHByb2dyYW1saXN0aW5nPgorI2RlZmluZSBWNEwyX1NURF9QQUxfQiAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDEpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0cgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA0KQorI2RlZmluZSBWNEwyX1NURF9QQUxfSCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDgpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9JICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAxMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0QgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDIwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRDEgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwNDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9LICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA4MCkKKworI2RlZmluZSBWNEwyX1NURF9QQUxfTSAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9OICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX05jICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwNDAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfNjAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT48Y29uc3RhbnQ+VjRMMl9TVERfUEFMXzYwPC9jb25zdGFudD4gaXMKK2EgaHlicmlkIHN0YW5kYXJkIHdpdGggNTI1IGxpbmVzLCA2MCBIeiByZWZyZXNoIHJhdGUsIGFuZCBQQUwgY29sb3IKK21vZHVsYXRpb24gd2l0aCBhIDQuNDMgTUh6IGNvbG9yIHN1YmNhcnJpZXIuIFNvbWUgUEFMIHZpZGVvIHJlY29yZGVycworY2FuIHBsYXkgYmFjayBOVFNDIHRhcGVzIGluIHRoaXMgbW9kZSBmb3IgZGlzcGxheSBvbiBhIDUwLzYwIEh6IGFnbm9zdGljCitQQUwgVFYuPC9wYXJhPjxwYXJhPjxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAxMDAwKQorI2RlZmluZSBWNEwyX1NURF9OVFNDX01fSlAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDIwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPjxwYXJhPjxjb25zdGFudD5WNEwyX1NURF9OVFNDXzQ0MzwvY29uc3RhbnQ+CitpcyBhIGh5YnJpZCBzdGFuZGFyZCB3aXRoIDUyNSBsaW5lcywgNjAgSHogcmVmcmVzaCByYXRlLCBhbmQgTlRTQworY29sb3IgbW9kdWxhdGlvbiB3aXRoIGEgNC40MyBNSHogY29sb3IKK3N1YmNhcnJpZXIuPC9wYXJhPjxwYXJhPjxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA4MDAwKQorCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0IgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDIwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9HICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwNDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0ggICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDA4MDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSyAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMTAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LMSAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAyMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDQwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTEMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwODAwMDAwKQorCisvKiBBVFNDL0hEVFYgKi8KKyNkZWZpbmUgVjRMMl9TVERfQVRTQ184X1ZTQiAgICAgKCh2NGwyX3N0ZF9pZCkweDAxMDAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9BVFNDXzE2X1ZTQiAgICAoKHY0bDJfc3RkX2lkKTB4MDIwMDAwMDApCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT48cGFyYT48IS0tIEFUU0MgcHJvcG9zYWwgYnkgTWFyayBNY0NsZWxsYW5kLAordmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tIG9uIDE3IE9jdCAyMDAyCistLT48Y29uc3RhbnQ+VjRMMl9TVERfQVRTQ184X1ZTQjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfU1REX0FUU0NfMTZfVlNCPC9jb25zdGFudD4gYXJlIFUuUy4gdGVycmVzdHJpYWwgZGlnaXRhbAorVFYgc3RhbmRhcmRzLiBQcmVzZW50bHkgdGhlIFY0TDIgQVBJIGRvZXMgbm90IHN1cHBvcnQgZGlnaXRhbCBUVi4gU2VlCithbHNvIHRoZSBMaW51eCBEVkIgQVBJIGF0IDx1bGluawordXJsPSJodHRwOi8vbGludXh0di5vcmciPmh0dHA6Ly9saW51eHR2Lm9yZzwvdWxpbms+LjwvcGFyYT4KKzxwYXJhPjxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgVjRMMl9TVERfUEFMX0JHICAgICAgICAgKFY0TDJfU1REX1BBTF9CICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0IxICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfRykKKyNkZWZpbmUgVjRMMl9TVERfQiAgICAgICAgICAgICAgKFY0TDJfU1REX1BBTF9CICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0IxICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9CKQorI2RlZmluZSBWNEwyX1NURF9HSCAgICAgICAgICAgICAoVjRMMl9TVERfUEFMX0cgICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfSCAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0RLICAgICAgICAgKFY0TDJfU1REX1BBTF9EICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0QxICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfSykKKyNkZWZpbmUgVjRMMl9TVERfUEFMICAgICAgICAgICAgKFY0TDJfU1REX1BBTF9CRyAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX0RLICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfSCAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1BBTF9JKQorI2RlZmluZSBWNEwyX1NURF9OVFNDICAgICAgICAgICAoVjRMMl9TVERfTlRTQ19NICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9OVFNDX01fSlAgICAgIHxcCisJCQkJIFY0TDJfU1REX05UU0NfTV9LUikKKyNkZWZpbmUgVjRMMl9TVERfTU4gICAgICAgICAgICAgKFY0TDJfU1REX1BBTF9NICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMX04gICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfTmMgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX05UU0MpCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0RLICAgICAgIChWNEwyX1NURF9TRUNBTV9EICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0sgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSzEpCisjZGVmaW5lIFY0TDJfU1REX0RLICAgICAgICAgICAgIChWNEwyX1NURF9QQUxfREsgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0RLKQorCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNICAgICAgICAgIChWNEwyX1NURF9TRUNBTV9CICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fSCAgICAgICB8XAorCQkJCSBWNEwyX1NURF9TRUNBTV9ESyAgICAgIHxcCisJCQkJIFY0TDJfU1REX1NFQ0FNX0wgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU1fTEMpCisKKyNkZWZpbmUgVjRMMl9TVERfNTI1XzYwICAgICAgICAgKFY0TDJfU1REX1BBTF9NICAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfUEFMXzYwICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9OVFNDICAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX05UU0NfNDQzKQorI2RlZmluZSBWNEwyX1NURF82MjVfNTAgICAgICAgICAoVjRMMl9TVERfUEFMICAgICAgICAgICB8XAorCQkJCSBWNEwyX1NURF9QQUxfTiAgICAgICAgIHxcCisJCQkJIFY0TDJfU1REX1BBTF9OYyAgICAgICAgfFwKKwkJCQkgVjRMMl9TVERfU0VDQU0pCisKKyNkZWZpbmUgVjRMMl9TVERfVU5LTk9XTiAgICAgICAgMAorI2RlZmluZSBWNEwyX1NURF9BTEwgICAgICAgICAgICAoVjRMMl9TVERfNTI1XzYwICAgICAgICB8XAorCQkJCSBWNEwyX1NURF82MjVfNTApCis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGlkPSJ2aWRlby1zdGFuZGFyZHMiIG9yaWVudD0ibGFuZCI+CisgICAgICA8dGl0bGU+VmlkZW8gU3RhbmRhcmRzIChiYXNlZCBvbiBbPHhyZWYgbGlua2VuZD0iaXR1NDcwIiAvPl0pPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMTIiIGNvbHNlcD0iMSIgcm93c2VwPSIxIiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgYWxpZ249ImxlZnQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzQiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzUiIC8+CisJPGNvbHNwZWMgY29sbnVtPSI3IiBjb2xuYW1lPSJjNyIgLz4KKwk8Y29sc3BlYyBjb2xudW09IjkiIGNvbG5hbWU9ImM5IiAvPgorCTxjb2xzcGVjIGNvbG51bT0iMTIiIGNvbG5hbWU9ImMxMiIgLz4KKwk8c3BhbnNwZWMgbmFtZXN0PSJjMiIgbmFtZWVuZD0iYzMiIHNwYW5uYW1lPSJtIiBhbGlnbj0iY2VudGVyIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImM0IiBuYW1lZW5kPSJjMTIiIHNwYW5uYW1lPSJ4IiBhbGlnbj0iY2VudGVyIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImM1IiBuYW1lZW5kPSJjNyIgc3Bhbm5hbWU9ImIiIGFsaWduPSJjZW50ZXIiIC8+CisJPHNwYW5zcGVjIG5hbWVzdD0iYzkiIG5hbWVlbmQ9ImMxMiIgc3Bhbm5hbWU9InMiIGFsaWduPSJjZW50ZXIiIC8+CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PkNoYXJhY3RlcmlzdGljczwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5NL05UU0M8Zm9vdG5vdGU+PHBhcmE+SmFwYW4gdXNlcyBhIHN0YW5kYXJkCitzaW1pbGFyIHRvIE0vTlRTQworKFY0TDJfU1REX05UU0NfTV9KUCkuPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDxlbnRyeT5NL1BBTDwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5OL1BBTDxmb290bm90ZT48cGFyYT4gVGhlIHZhbHVlcyBpbgorYnJhY2tldHMgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIE4vUEFMIGEuay5hLgorTjxzdWJzY3JpcHQ+Qzwvc3Vic2NyaXB0PiB1c2VkIGluIEFyZ2VudGluYQorKFY0TDJfU1REX1BBTF9OYykuPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj5CLCBCMSwgRy9QQUw8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+RCwgRDEsIEsvUEFMPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPkgvUEFMPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPkkvUEFMPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPkIsIEcvU0VDQU08L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+RCwgSy9TRUNBTTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj5LMS9TRUNBTTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj5ML1NFQ0FNPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5GcmFtZSBsaW5lczwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0ibSI+NTI1PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJ4Ij42MjU8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+RnJhbWUgcGVyaW9kIChzKTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0ibSI+MTAwMS8zMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0ieCI+MS8yNTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5DaHJvbWluYW5jZSBzdWItY2FycmllciBmcmVxdWVuY3kgKEh6KTwvZW50cnk+CisJICAgIDxlbnRyeT4zNTc5NTQ1ICZwbHVzbW47Jm5ic3A7MTA8L2VudHJ5PgorCSAgICA8ZW50cnk+MzU3OTYxMS40OSAmcGx1c21uOyZuYnNwOzEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ0MzM2MTguNzUgJnBsdXNtbjsmbmJzcDs1ICgzNTgyMDU2LjI1CismcGx1c21uOyZuYnNwOzUpPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJiIj40NDMzNjE4Ljc1ICZwbHVzbW47Jm5ic3A7NTwvZW50cnk+CisJICAgIDxlbnRyeT40NDMzNjE4Ljc1ICZwbHVzbW47Jm5ic3A7MTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0icyI+ZjxzdWJzY3JpcHQ+T1I8L3N1YnNjcmlwdD4mbmJzcDs9Cis0NDA2MjUwICZwbHVzbW47Jm5ic3A7MjAwMCwgZjxzdWJzY3JpcHQ+T0I8L3N1YnNjcmlwdD4mbmJzcDs9IDQyNTAwMDAKKyZwbHVzbW47Jm5ic3A7MjAwMDwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5Ob21pbmFsIHJhZGlvLWZyZXF1ZW5jeSBjaGFubmVsIGJhbmR3aWR0aAorKE1Ieik8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT42PC9lbnRyeT4KKwkgICAgPGVudHJ5PjY8L2VudHJ5PgorCSAgICA8ZW50cnk+QjogNzsgQjEsIEc6IDg8L2VudHJ5PgorCSAgICA8ZW50cnk+ODwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjg8L2VudHJ5PgorCSAgICA8ZW50cnk+ODwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjg8L2VudHJ5PgorCSAgICA8ZW50cnk+ODwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5Tb3VuZCBjYXJyaWVyIHJlbGF0aXZlIHRvIHZpc2lvbiBjYXJyaWVyCisoTUh6KTwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7NC41PC9lbnRyeT4KKwkgICAgPGVudHJ5PismbmJzcDs0LjU8L2VudHJ5PgorCSAgICA8ZW50cnk+KyZuYnNwOzQuNTwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT4rJm5ic3A7NS41ICZwbHVzbW47Jm5ic3A7MC4wMDEKKzxmb290bm90ZT48cGFyYT5JbiB0aGUgRmVkZXJhbCBSZXB1YmxpYyBvZiBHZXJtYW55LCBBdXN0cmlhLCBJdGFseSwKK3RoZSBOZXRoZXJsYW5kcywgU2xvdmFraWEgYW5kIFN3aXR6ZXJsYW5kIGEgc3lzdGVtIG9mIHR3byBzb3VuZAorY2FycmllcnMgaXMgdXNlZCwgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgc2Vjb25kIGNhcnJpZXIgYmVpbmcKKzI0Mi4xODc1Jm5ic3A7a0h6IGFib3ZlIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGZpcnN0IHNvdW5kIGNhcnJpZXIuIEZvcgorc3RlcmVvcGhvbmljIHNvdW5kIHRyYW5zbWlzc2lvbnMgYSBzaW1pbGFyIHN5c3RlbSBpcyB1c2VkIGluCitBdXN0cmFsaWEuPC9wYXJhPjwvZm9vdG5vdGU+IDxmb290bm90ZT48cGFyYT5OZXcgWmVhbGFuZCB1c2VzIGEgc291bmQKK2NhcnJpZXIgZGlzcGxhY2VkIDUuNDk5NiAmcGx1c21uOyZuYnNwOzAuMDAwNSBNSHogZnJvbSB0aGUgdmlzaW9uCitjYXJyaWVyLjwvcGFyYT48L2Zvb3Rub3RlPiA8Zm9vdG5vdGU+PHBhcmE+SW4gRGVubWFyaywgRmlubGFuZCwgTmV3CitaZWFsYW5kLCBTd2VkZW4gYW5kIFNwYWluIGEgc3lzdGVtIG9mIHR3byBzb3VuZCBjYXJyaWVycyBpcyB1c2VkLiBJbgorSWNlbGFuZCwgTm9yd2F5IGFuZCBQb2xhbmQgdGhlIHNhbWUgc3lzdGVtIGlzIGJlaW5nIGludHJvZHVjZWQuIFRoZQorc2Vjb25kIGNhcnJpZXIgaXMgNS44NSZuYnNwO01IeiBhYm92ZSB0aGUgdmlzaW9uIGNhcnJpZXIgYW5kIGlzIERRUFNLCittb2R1bGF0ZWQgd2l0aCA3MjgmbmJzcDtrYml0L3Mgc291bmQgYW5kIGRhdGEgbXVsdGlwbGV4LiAoTklDQU0KK3N5c3RlbSk8L3BhcmE+PC9mb290bm90ZT4gPGZvb3Rub3RlPjxwYXJhPkluIHRoZSBVbml0ZWQgS2luZ2RvbSwgYQorc3lzdGVtIG9mIHR3byBzb3VuZCBjYXJyaWVycyBpcyB1c2VkLiBUaGUgc2Vjb25kIHNvdW5kIGNhcnJpZXIgaXMKKzYuNTUyJm5ic3A7TUh6IGFib3ZlIHRoZSB2aXNpb24gY2FycmllciBhbmQgaXMgRFFQU0sgbW9kdWxhdGVkIHdpdGggYQorNzI4Jm5ic3A7a2JpdC9zIHNvdW5kIGFuZCBkYXRhIG11bHRpcGxleCBhYmxlIHRvIGNhcnJ5IHR3byBzb3VuZAorY2hhbm5lbHMuIChOSUNBTSBzeXN0ZW0pPC9wYXJhPjwvZm9vdG5vdGU+PC9wYXJhPjwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7Ni41ICZwbHVzbW47Jm5ic3A7MC4wMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+KyZuYnNwOzUuNTwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7NS45OTk2ICZwbHVzbW47Jm5ic3A7MC4wMDA1PC9lbnRyeT4KKwkgICAgPGVudHJ5PismbmJzcDs1LjUgJnBsdXNtbjsmbmJzcDswLjAwMTwvZW50cnk+CisJICAgIDxlbnRyeT4rJm5ic3A7Ni41ICZwbHVzbW47Jm5ic3A7MC4wMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+KyZuYnNwOzYuNTwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT4rJm5ic3A7Ni41IDxmb290bm90ZT48cGFyYT5JbiBGcmFuY2UsIGEKK2RpZ2l0YWwgY2FycmllciA1Ljg1IE1IeiBhd2F5IGZyb20gdGhlIHZpc2lvbiBjYXJyaWVyIG1heSBiZSB1c2VkIGluCithZGRpdGlvbiB0byB0aGUgbWFpbiBzb3VuZCBjYXJyaWVyLiBJdCBpcyBtb2R1bGF0ZWQgaW4gZGlmZmVyZW50aWFsbHkKK2VuY29kZWQgUVBTSyB3aXRoIGEgNzI4IGtiaXQvcyBzb3VuZCBhbmQgZGF0YSBtdWx0aXBsZXhlciBjYXBhYmxlIG9mCitjYXJyeWluZyB0d28gc291bmQgY2hhbm5lbHMuIChOSUNBTQorc3lzdGVtKTwvcGFyYT48L2Zvb3Rub3RlPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItc3RhbmRhcmQ7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CitpcyBvdXQgb2YgYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctYXVkaW8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzYxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvLnhtbApAQCAtMCwwICsxLDE4OCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1hdWRpbyI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0FVRElPLCBWSURJT0NfU19BVURJTzwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfQVVESU88L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfQVVESU88L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgb3Igc2VsZWN0IHRoZSBjdXJyZW50IGF1ZGlvIGlucHV0IGFuZCBpdHMKK2F0dHJpYnV0ZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfYXVkaW8gKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfYXVkaW8gKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0FVRElPLCBWSURJT0NfU19BVURJTzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgYXVkaW8gaW5wdXQgYXBwbGljYXRpb25zIHplcm8gb3V0IHRoZQorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgb2YgYSAmdjRsMi1hdWRpbzsKK2FuZCBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfQVVESU88L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yIHJldHVybiBhbgorJkVJTlZBTDsgd2hlbiB0aGUgZGV2aWNlIGhhcyBubyBhdWRpbyBpbnB1dHMsIG9yIG5vbmUgd2hpY2ggY29tYmluZQord2l0aCB0aGUgY3VycmVudCB2aWRlbyBpbnB1dC48L3BhcmE+CisKKyAgICA8cGFyYT5BdWRpbyBpbnB1dHMgaGF2ZSBvbmUgd3JpdGFibGUgcHJvcGVydHksIHRoZSBhdWRpbyBtb2RlLiBUbworc2VsZWN0IHRoZSBjdXJyZW50IGF1ZGlvIGlucHV0IDxlbXBoYXNpcz5hbmQ8L2VtcGhhc2lzPiBjaGFuZ2UgdGhlCithdWRpbyBtb2RlLCBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+bW9kZTwvc3RydWN0ZmllbGQ+CitmaWVsZHMsIGFuZCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEKKzxzdHJ1Y3RuYW1lPnY0bDJfYXVkaW88L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19BVURJTzwvY29uc3RhbnQ+IGlvY3RsLiBEcml2ZXJzIG1heSBzd2l0Y2ggdG8gYQorZGlmZmVyZW50IGF1ZGlvIG1vZGUgaWYgdGhlIHJlcXVlc3QgY2Fubm90IGJlIHNhdGlzZmllZC4gSG93ZXZlciwgdGhpcworaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGFjdHVhbCBuZXcgYXVkaW8KK21vZGUuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWF1ZGlvIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9hdWRpbzwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgYXVkaW8gaW5wdXQsIHNldCBieSB0aGUKK2RyaXZlciBvciBhcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5OYW1lIG9mIHRoZSBhdWRpbyBpbnB1dCwgYSBOVUwtdGVybWluYXRlZCBBU0NJSQorc3RyaW5nLCBmb3IgZXhhbXBsZTogIkxpbmUgSW4iLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUKK3VzZXIsIHByZWZlcmFibHkgdGhlIGNvbm5lY3RvciBsYWJlbCBvbiB0aGUgZGV2aWNlIGl0c2VsZi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BdWRpbyBjYXBhYmlsaXR5IGZsYWdzLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0iYXVkaW8tY2FwYWJpbGl0eSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXVkaW8gbW9kZSBmbGFncyBzZXQgYnkgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zIChvbgorCSAgICA8Y29uc3RhbnQ+VklESU9DX1NfQVVESU88L2NvbnN0YW50PiBpb2N0bCksIHNlZSA8eHJlZiBsaW5rZW5kPSJhdWRpby1tb2RlIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIGFuZAorYXBwbGljYXRpb25zIG11c3Qgc2V0IHRoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iYXVkaW8tY2FwYWJpbGl0eSI+CisgICAgICA8dGl0bGU+QXVkaW8gQ2FwYWJpbGl0eSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9BVURDQVBfU1RFUkVPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgc3RlcmVvIGlucHV0LiBUaGUgZmxhZyBpcyBpbnRlbmRlZCB0bworYXV0b21hdGljYWxseSBkaXNhYmxlIHN0ZXJlbyByZWNvcmRpbmcgZXRjLiB3aGVuIHRoZSBzaWduYWwgaXMgYWx3YXlzCittb25hdXJhbC4gVGhlIEFQSSBwcm92aWRlcyBubyBtZWFucyB0byBkZXRlY3QgaWYgc3RlcmVvIGlzCis8ZW1waGFzaXM+cmVjZWl2ZWQ8L2VtcGhhc2lzPiwgdW5sZXNzIHRoZSBhdWRpbyBpbnB1dCBiZWxvbmdzIHRvIGEKK3R1bmVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9BVURDQVBfQVZMPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT5BdXRvbWF0aWMgVm9sdW1lIExldmVsIG1vZGUgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iYXVkaW8tbW9kZSI+CisgICAgICA8dGl0bGU+QXVkaW8gTW9kZSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9BVURNT0RFX0FWTDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+QVZMIG1vZGUgaXMgb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm8gYXVkaW8gaW5wdXRzIGNvbWJpbmUgd2l0aCB0aGUgY3VycmVudCB2aWRlbyBpbnB1dCwKK29yIHRoZSBudW1iZXIgb2YgdGhlIHNlbGVjdGVkIGF1ZGlvIGlucHV0IGlzIG91dCBvZiBib3VuZHMgb3IgaXQgZG9lcworbm90IGNvbWJpbmUsIG9yIHRoZXJlIGFyZSBubyBhdWRpbyBpbnB1dHMgYXQgYWxsIGFuZCB0aGUgaW9jdGwgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JL08gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBpbnB1dCBjYW5ub3QgYmUKK3N3aXRjaGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MzI3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbApAQCAtMCwwICsxLDE1NCBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1hdWRpb291dCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0FVRE9VVCwgVklESU9DX1NfQVVET1VUPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19BVURPVVQ8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfQVVET1VUPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlF1ZXJ5IG9yIHNlbGVjdCB0aGUgY3VycmVudCBhdWRpbyBvdXRwdXQ8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfYXVkaW9vdXQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfYXVkaW9vdXQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0FVRE9VVCwgVklESU9DX1NfQVVET1VUPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCBhdWRpbyBvdXRwdXQgYXBwbGljYXRpb25zIHplcm8gb3V0IHRoZQorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgb2YgYSAmdjRsMi1hdWRpb291dDsgYW5kCitjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfQVVET1VUPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIKK3RvIHRoaXMgc3RydWN0dXJlLiBEcml2ZXJzIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBvciByZXR1cm4gYW4KKyZFSU5WQUw7IHdoZW4gdGhlIGRldmljZSBoYXMgbm8gYXVkaW8gaW5wdXRzLCBvciBub25lIHdoaWNoIGNvbWJpbmUKK3dpdGggdGhlIGN1cnJlbnQgdmlkZW8gb3V0cHV0LjwvcGFyYT4KKworICAgIDxwYXJhPkF1ZGlvIG91dHB1dHMgaGF2ZSBubyB3cml0YWJsZSBwcm9wZXJ0aWVzLiBOZXZlcnRoZWxlc3MsIHRvCitzZWxlY3QgdGhlIGN1cnJlbnQgYXVkaW8gb3V0cHV0IGFwcGxpY2F0aW9ucyBjYW4gaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZAorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgKHdoaWNoIGluIHRoZSBmdXR1cmUgbWF5Citjb250YWluIHdyaXRhYmxlIHByb3BlcnRpZXMpIG9mIGEKKzxzdHJ1Y3RuYW1lPnY0bDJfYXVkaW9vdXQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19BVURPVVQ8L2NvbnN0YW50PiBpb2N0bC4gRHJpdmVycyBzd2l0Y2ggdG8gdGhlCityZXF1ZXN0ZWQgb3V0cHV0IG9yIHJldHVybiB0aGUgJkVJTlZBTDsgd2hlbiB0aGUgaW5kZXggaXMgb3V0IG9mCitib3VuZHMuIFRoaXMgaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGN1cnJlbnQKK2F1ZGlvIG91dHB1dCBhdHRyaWJ1dGVzIGFzIDxjb25zdGFudD5WSURJT0NfR19BVURPVVQ8L2NvbnN0YW50PgorZG9lcy48L3BhcmE+CisKKyAgICA8cGFyYT5Ob3RlIGNvbm5lY3RvcnMgb24gYSBUViBjYXJkIHRvIGxvb3AgYmFjayB0aGUgcmVjZWl2ZWQgYXVkaW8KK3NpZ25hbCB0byBhIHNvdW5kIGNhcmQgYXJlIG5vdCBhdWRpbyBvdXRwdXRzIGluIHRoaXMgc2Vuc2UuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWF1ZGlvb3V0Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9hdWRpb291dDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgYXVkaW8gb3V0cHV0LCBzZXQgYnkgdGhlCitkcml2ZXIgb3IgYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgYXVkaW8gb3V0cHV0LCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcsIGZvciBleGFtcGxlOiAiTGluZSBPdXQiLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUKK3VzZXIsIHByZWZlcmFibHkgdGhlIGNvbm5lY3RvciBsYWJlbCBvbiB0aGUgZGV2aWNlIGl0c2VsZi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BdWRpbyBjYXBhYmlsaXR5IGZsYWdzLCBub25lIGRlZmluZWQgeWV0LiBEcml2ZXJzCittdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXVkaW8gbW9kZSwgbm9uZSBkZWZpbmVkIHlldC4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyAob24gPGNvbnN0YW50PlZJRElPQ19TX0FVRE9VVDwvY29uc3RhbnQ+KSBtdXN0IHNldCB0aGlzCitmaWVsZCB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm8gYXVkaW8gb3V0cHV0cyBjb21iaW5lIHdpdGggdGhlIGN1cnJlbnQgdmlkZW8KK291dHB1dCwgb3IgdGhlIG51bWJlciBvZiB0aGUgc2VsZWN0ZWQgYXVkaW8gb3V0cHV0IGlzIG91dCBvZiBib3VuZHMgb3IKK2l0IGRvZXMgbm90IGNvbWJpbmUsIG9yIHRoZXJlIGFyZSBubyBhdWRpbyBvdXRwdXRzIGF0IGFsbCBhbmQgdGhlCitpb2N0bCBpcyBub3Qgc3VwcG9ydGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGlzIGluIHByb2dyZXNzLCB0aGUgb3V0cHV0IGNhbm5vdCBiZQorc3dpdGNoZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctY3JvcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWNyb3AueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzViMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWNyb3AueG1sCkBAIC0wLDAgKzEsMTQzIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWNyb3AiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19DUk9QLCBWSURJT0NfU19DUk9QPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19DUk9QPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0NST1A8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCB0aGUgY3VycmVudCBjcm9wcGluZyByZWN0YW5nbGU8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfY3JvcCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBzdHJ1Y3QgdjRsMl9jcm9wICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19DUk9QLCBWSURJT0NfU19DUk9QPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3JvcHBpbmcgcmVjdGFuZ2xlIHNpemUgYW5kIHBvc2l0aW9uCithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKzxzdHJ1Y3RuYW1lPnY0bDJfY3JvcDwvc3RydWN0bmFtZT4gc3RydWN0dXJlIHRvIHRoZSByZXNwZWN0aXZlIGJ1ZmZlcgorKHN0cmVhbSkgdHlwZSBhbmQgY2FsbCB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0NST1A8L2NvbnN0YW50PiBpb2N0bAord2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuIFRoZSBkcml2ZXIgZmlsbHMgdGhlIHJlc3Qgb2YgdGhlCitzdHJ1Y3R1cmUgb3IgcmV0dXJucyB0aGUgJkVJTlZBTDsgaWYgY3JvcHBpbmcgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBjaGFuZ2UgdGhlIGNyb3BwaW5nIHJlY3RhbmdsZSBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlY3Q7IHN1YnN0cnVjdHVyZSBuYW1lZAorPHN0cnVjdGZpZWxkPmM8L3N0cnVjdGZpZWxkPiBvZiBhIHY0bDJfY3JvcCBzdHJ1Y3R1cmUgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX1NfQ1JPUDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgZHJpdmVyIGZpcnN0IGFkanVzdHMgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIGFnYWluc3QKK2hhcmR3YXJlIGxpbWl0cywgJmllOyB0aGUgYm91bmRzIGdpdmVuIGJ5IHRoZSBjYXB0dXJlL291dHB1dCB3aW5kb3csCithbmQgaXQgcm91bmRzIHRvIHRoZSBjbG9zZXN0IHBvc3NpYmxlIHZhbHVlcyBvZiBob3Jpem9udGFsIGFuZAordmVydGljYWwgb2Zmc2V0LCB3aWR0aCBhbmQgaGVpZ2h0LiBJbiBwYXJ0aWN1bGFyIHRoZSBkcml2ZXIgbXVzdCByb3VuZAordGhlIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgY3JvcHBpbmcgcmVjdGFuZ2xlIHRvIGZyYW1lIGxpbmVzIG1vZHVsbwordHdvLCBzdWNoIHRoYXQgdGhlIGZpZWxkIG9yZGVyIGNhbm5vdCBiZSBjb25mdXNlZC48L3BhcmE+CisKKyAgICA8cGFyYT5TZWNvbmQgdGhlIGRyaXZlciBhZGp1c3RzIHRoZSBpbWFnZSBzaXplICh0aGUgb3Bwb3NpdGUKK3JlY3RhbmdsZSBvZiB0aGUgc2NhbGluZyBwcm9jZXNzLCBzb3VyY2Ugb3IgdGFyZ2V0IGRlcGVuZGluZyBvbiB0aGUKK2RhdGEgZGlyZWN0aW9uKSB0byB0aGUgY2xvc2VzdCBzaXplIHBvc3NpYmxlIHdoaWxlIG1haW50YWluaW5nIHRoZQorY3VycmVudCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsaW5nIGZhY3Rvci48L3BhcmE+CisKKyAgICA8cGFyYT5GaW5hbGx5IHRoZSBkcml2ZXIgcHJvZ3JhbXMgdGhlIGhhcmR3YXJlIHdpdGggdGhlIGFjdHVhbAorY3JvcHBpbmcgYW5kIGltYWdlIHBhcmFtZXRlcnMuIDxjb25zdGFudD5WSURJT0NfU19DUk9QPC9jb25zdGFudD4gaXMgYQord3JpdGUtb25seSBpb2N0bCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyYW1ldGVycy4gVG8gcXVlcnkKK3RoZW0gYXBwbGljYXRpb25zIG11c3QgY2FsbCA8Y29uc3RhbnQ+VklESU9DX0dfQ1JPUDwvY29uc3RhbnQ+IGFuZAorJlZJRElPQy1HLUZNVDsuIFdoZW4gdGhlIHBhcmFtZXRlcnMgYXJlIHVuc3VpdGFibGUgdGhlIGFwcGxpY2F0aW9uIG1heQorbW9kaWZ5IHRoZSBjcm9wcGluZyBvciBpbWFnZSBwYXJhbWV0ZXJzIGFuZCByZXBlYXQgdGhlIGN5Y2xlIHVudGlsCitzYXRpc2ZhY3RvcnkgcGFyYW1ldGVycyBoYXZlIGJlZW4gbmVnb3RpYXRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIGNyb3BwaW5nIGlzIG5vdCBzdXBwb3J0ZWQgdGhlbiBubyBwYXJhbWV0ZXJzIGFyZQorY2hhbmdlZCBhbmQgPGNvbnN0YW50PlZJRElPQ19TX0NST1A8L2NvbnN0YW50PiByZXR1cm5zIHRoZQorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNyb3AiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2Nyb3A8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLgorT25seSB0aGVzZSB0eXBlcyBhcmUgdmFsaWQgaGVyZTogPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD4sIGFuZCBjdXN0b20gKGRyaXZlcgorZGVmaW5lZCkgdHlwZXMgd2l0aCBjb2RlIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PgorYW5kIGhpZ2hlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItcmVjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Dcm9wcGluZyByZWN0YW5nbGUuIFRoZSBzYW1lIGNvLW9yZGluYXRlIHN5c3RlbSBhcworZm9yICZ2NGwyLWNyb3BjYXA7IDxzdHJ1Y3RmaWVsZD5ib3VuZHM8L3N0cnVjdGZpZWxkPiBpcyB1c2VkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkNyb3BwaW5nIGlzIG5vdCBzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctY3RybC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWN0cmwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWU2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWN0cmwueG1sCkBAIC0wLDAgKzEsMTMwIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWN0cmwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19DVFJMLCBWSURJT0NfU19DVFJMPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19DVFJMPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0NUUkw8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCB0aGUgdmFsdWUgb2YgYSBjb250cm9sPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2NvbnRyb2wKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19DVFJMLCBWSURJT0NfU19DVFJMPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBnZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBjb250cm9sIGFwcGxpY2F0aW9ucworaW5pdGlhbGl6ZSB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYSBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfY29udHJvbDwvc3RydWN0bmFtZT4gYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfQ1RSTDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gVG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgYXBwbGljYXRpb25zIGluaXRpYWxpemUKK3RoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcyBvZiBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2NvbnRyb2w8L3N0cnVjdG5hbWU+IGFuZCBjYWxsIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX0NUUkw8L2NvbnN0YW50PiBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHRoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBpcyBpbnZhbGlkIGRyaXZlcnMKK3JldHVybiBhbiAmRUlOVkFMOy4gV2hlbiB0aGUgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4gaXMgb3V0CitvZiBib3VuZHMgZHJpdmVycyBjYW4gY2hvb3NlIHRvIHRha2UgdGhlIGNsb3Nlc3QgdmFsaWQgdmFsdWUgb3IgcmV0dXJuCithbiAmRVJBTkdFOywgd2hhdGV2ZXIgc2VlbXMgbW9yZSBhcHByb3ByaWF0ZS4gSG93ZXZlciwKKzxjb25zdGFudD5WSURJT0NfU19DVFJMPC9jb25zdGFudD4gaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdAorcmV0dXJuIHRoZSBhY3R1YWwgbmV3IHZhbHVlLjwvcGFyYT4KKworICAgIDxwYXJhPlRoZXNlIGlvY3RscyB3b3JrIG9ubHkgd2l0aCB1c2VyIGNvbnRyb2xzLiBGb3Igb3RoZXIKK2NvbnRyb2wgY2xhc3NlcyB0aGUgJlZJRElPQy1HLUVYVC1DVFJMUzssICZWSURJT0MtUy1FWFQtQ1RSTFM7IG9yCismVklESU9DLVRSWS1FWFQtQ1RSTFM7IG11c3QgYmUgdXNlZC48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItY29udHJvbCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfY29udHJvbDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgY29udHJvbCwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5ldyB2YWx1ZSBvciBjdXJyZW50IHZhbHVlLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1jb250cm9sOyA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBpcworaW52YWxpZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVSQU5HRTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItY29udHJvbDsgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4KK2lzIG91dCBvZiBib3VuZHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgY29udHJvbCBpcyB0ZW1wb3JhcmlseSBub3QgY2hhbmdlYWJsZSwgcG9zc2libHkKK2JlY2F1c2UgYW5vdGhlciBhcHBsaWNhdGlvbnMgdG9vayBvdmVyIGNvbnRyb2wgb2YgdGhlIGRldmljZSBmdW5jdGlvbgordGhpcyBjb250cm9sIGJlbG9uZ3MgdG8uPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjI0MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sCkBAIC0wLDAgKzEsMjEzIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWVuYy1pbmRleCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0VOQ19JTkRFWDwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfRU5DX0lOREVYPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdldCBtZXRhIGRhdGEgYWJvdXQgYSBjb21wcmVzc2VkIHZpZGVvIHN0cmVhbTwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9lbmNfaWR4ICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19FTkNfSU5ERVg8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxub3RlPgorICAgICAgPHRpdGxlPkV4cGVyaW1lbnRhbDwvdGl0bGU+CisKKyAgICAgIDxwYXJhPlRoaXMgaXMgYW4gPGxpbmsgbGlua2VuZD0iZXhwZXJpbWVudGFsIj5leHBlcmltZW50YWw8L2xpbms+CitpbnRlcmZhY2UgYW5kIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS48L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfR19FTkNfSU5ERVg8L2NvbnN0YW50PiBpb2N0bCBwcm92aWRlcworbWV0YSBkYXRhIGFib3V0IGEgY29tcHJlc3NlZCB2aWRlbyBzdHJlYW0gdGhlIHNhbWUgb3IgYW5vdGhlcgorYXBwbGljYXRpb24gY3VycmVudGx5IHJlYWRzIGZyb20gdGhlIGRyaXZlciwgd2hpY2ggaXMgdXNlZnVsIGZvcgorcmFuZG9tIGFjY2VzcyBpbnRvIHRoZSBzdHJlYW0gd2l0aG91dCBkZWNvZGluZyBpdC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyByZWFkIHRoZSBkYXRhIGFwcGxpY2F0aW9ucyBtdXN0IGNhbGwKKzxjb25zdGFudD5WSURJT0NfR19FTkNfSU5ERVg8L2NvbnN0YW50PiB3aXRoIGEgcG9pbnRlciB0byBhCismdjRsMi1lbmMtaWR4Oy4gT24gc3VjY2VzcyB0aGUgZHJpdmVyIGZpbGxzIHRoZQorPHN0cnVjdGZpZWxkPmVudHJ5PC9zdHJ1Y3RmaWVsZD4gYXJyYXksIHN0b3JlcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCit3cml0dGVuIGluIHRoZSA8c3RydWN0ZmllbGQ+ZW50cmllczwvc3RydWN0ZmllbGQ+IGZpZWxkLCBhbmQKK2luaXRpYWxpemVzIHRoZSA8c3RydWN0ZmllbGQ+ZW50cmllc19jYXA8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKyAgICA8cGFyYT5FYWNoIGVsZW1lbnQgb2YgdGhlIDxzdHJ1Y3RmaWVsZD5lbnRyeTwvc3RydWN0ZmllbGQ+IGFycmF5Citjb250YWlucyBtZXRhIGRhdGEgYWJvdXQgb25lIHBpY3R1cmUuIEEKKzxjb25zdGFudD5WSURJT0NfR19FTkNfSU5ERVg8L2NvbnN0YW50PiBjYWxsIHJlYWRzIHVwIHRvCis8Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0VOVFJJRVM8L2NvbnN0YW50PiBlbnRyaWVzIGZyb20gYSBkcml2ZXIKK2J1ZmZlciwgd2hpY2ggY2FuIGhvbGQgdXAgdG8gPHN0cnVjdGZpZWxkPmVudHJpZXNfY2FwPC9zdHJ1Y3RmaWVsZD4KK2VudHJpZXMuIFRoaXMgbnVtYmVyIGNhbiBiZSBsb3dlciBvciBoaWdoZXIgdGhhbgorPGNvbnN0YW50PlY0TDJfRU5DX0lEWF9FTlRSSUVTPC9jb25zdGFudD4sIGJ1dCBub3QgemVyby4gV2hlbiB0aGUKK2FwcGxpY2F0aW9uIGZhaWxzIHRvIHJlYWQgdGhlIG1ldGEgZGF0YSBpbiB0aW1lIHRoZSBvbGRlc3QgZW50cmllcword2lsbCBiZSBsb3N0LiBXaGVuIHRoZSBidWZmZXIgaXMgZW1wdHkgb3Igbm8gY2FwdHVyaW5nL2VuY29kaW5nIGlzIGluCitwcm9ncmVzcywgPHN0cnVjdGZpZWxkPmVudHJpZXM8L3N0cnVjdGZpZWxkPiB3aWxsIGJlIHplcm8uPC9wYXJhPgorCisgICAgPHBhcmE+Q3VycmVudGx5IHRoaXMgaW9jdGwgaXMgb25seSBkZWZpbmVkIGZvciBNUEVHLTIgcHJvZ3JhbQorc3RyZWFtcyBhbmQgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW1zLjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1lbmMtaWR4Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9lbmNfaWR4PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZW50cmllczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgZHJpdmVyIHN0b3JlZCBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5lbnRyeTwvc3RydWN0ZmllbGQ+IGFycmF5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZW50cmllc19jYXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIGRyaXZlciBjYW4KK2J1ZmZlci4gTXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuCitEcml2ZXJzIG11c3Qgc2V0IHRoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1lbmMtaWR4LWVudHJ5OzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZW50cnk8L3N0cnVjdGZpZWxkPls8Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0VOVFJJRVM8L2NvbnN0YW50Pl08L2VudHJ5PgorCSAgICA8ZW50cnk+TWV0YSBkYXRhIGFib3V0IGEgY29tcHJlc3NlZCB2aWRlbyBzdHJlYW0uIEVhY2gKK2VsZW1lbnQgb2YgdGhlIGFycmF5IGNvcnJlc3BvbmRzIHRvIG9uZSBwaWN0dXJlLCBzb3J0ZWQgaW4gYXNjZW5kaW5nCitvcmRlciBieSB0aGVpciA8c3RydWN0ZmllbGQ+b2Zmc2V0PC9zdHJ1Y3RmaWVsZD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWVuYy1pZHgtZW50cnkiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2VuY19pZHhfZW50cnk8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTY0PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5vZmZzZXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgb2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKK2NvbXByZXNzZWQgdmlkZW8gc3RyZWFtIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBwaWN0dXJlLCB0aGF0IGlzIGEKKzx3b3JkYXN3b3JkPlBFUyBwYWNrZXQgaGVhZGVyPC93b3JkYXN3b3JkPiBhcyBkZWZpbmVkIGluIDx4cmVmCisJICAgIGxpbmtlbmQ9Im1wZWcycGFydDEiIC8+IG9yIGEgPHdvcmRhc3dvcmQ+cGljdHVyZQoraGVhZGVyPC93b3JkYXN3b3JkPiBhcyBkZWZpbmVkIGluIDx4cmVmIGxpbmtlbmQ9Im1wZWcycGFydDIiIC8+LiBXaGVuCit0aGUgZW5jb2RlciBpcyBzdG9wcGVkLCB0aGUgZHJpdmVyIHJlc2V0cyB0aGUgb2Zmc2V0IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTY0PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5wdHM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgMzMgYml0IDx3b3JkYXN3b3JkPlByZXNlbnRhdGlvbiBUaW1lCitTdGFtcDwvd29yZGFzd29yZD4gb2YgdGhpcyBwaWN0dXJlIGFzIGRlZmluZWQgaW4gPHhyZWYKKwkJbGlua2VuZD0ibXBlZzJwYXJ0MSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbGVuZ3RoIG9mIHRoaXMgcGljdHVyZSBpbiBieXRlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RmxhZ3MgY29udGFpbmluZyB0aGUgY29kaW5nIHR5cGUgb2YgdGhpcyBwaWN0dXJlLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0iZW5jLWlkeC1mbGFncyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzJdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4KK0RyaXZlcnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJlbmMtaWR4LWZsYWdzIj4KKyAgICAgIDx0aXRsZT5JbmRleCBFbnRyeSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0ZSQU1FX0k8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgYW4gSW50cmEtY29kZWQgcGljdHVyZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRU5DX0lEWF9GUkFNRV9QPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgUHJlZGljdGl2ZS1jb2RlZCBwaWN0dXJlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FTkNfSURYX0ZSQU1FX0I8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgYSBCaWRpcmVjdGlvbmFsbHkgcHJlZGljdGl2ZS1jb2RlZAorcGljdHVyZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRU5DX0lEWF9GUkFNRV9NQVNLPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwRjwvZW50cnk+CisJICAgIDxlbnRyeT48d29yZGFzd29yZD5BTkQ8L3dvcmRhc3dvcmQ+IHRoZSBmbGFncyBmaWVsZCB3aXRoCit0aGlzIG1hc2sgdG8gb2J0YWluIHRoZSBwaWN0dXJlIGNvZGluZyB0eXBlLjwvZW50cnk+CisJICA8L3Jvdz4KKyAgICAgICA8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhN2Y4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZXh0LWN0cmxzLnhtbApAQCAtMCwwICsxLDMwNyBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1leHQtY3RybHMiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19FWFRfQ1RSTFMsIFZJRElPQ19TX0VYVF9DVFJMUywKK1ZJRElPQ19UUllfRVhUX0NUUkxTPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfR19FWFRfQ1RSTFM8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfRVhUX0NUUkxTPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19UUllfRVhUX0NUUkxTPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdldCBvciBzZXQgdGhlIHZhbHVlIG9mIHNldmVyYWwgY29udHJvbHMsIHRyeSBjb250cm9sCit2YWx1ZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzCisqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfRVhUX0NUUkxTLCBWSURJT0NfU19FWFRfQ1RSTFMsCitWSURJT0NfVFJZX0VYVF9DVFJMUzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlc2UgaW9jdGxzIGFsbG93IHRoZSBjYWxsZXIgdG8gZ2V0IG9yIHNldCBtdWx0aXBsZQorY29udHJvbHMgYXRvbWljYWxseS4gQ29udHJvbCBJRHMgYXJlIGdyb3VwZWQgaW50byBjb250cm9sIGNsYXNzZXMgKHNlZQorPHhyZWYgbGlua2VuZD0iY3RybC1jbGFzcyIgLz4pIGFuZCBhbGwgY29udHJvbHMgaW4gdGhlIGNvbnRyb2wgYXJyYXkKK211c3QgYmVsb25nIHRvIHRoZSBzYW1lIGNvbnRyb2wgY2xhc3MuPC9wYXJhPgorCisgICAgPHBhcmE+QXBwbGljYXRpb25zIG11c3QgYWx3YXlzIGZpbGwgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5jdHJsX2NsYXNzPC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+Y29udHJvbHM8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkcyBvZiAmdjRsMi1leHQtY29udHJvbHM7LCBhbmQKK2luaXRpYWxpemUgdGhlICZ2NGwyLWV4dC1jb250cm9sOyBhcnJheSBwb2ludGVkIHRvIGJ5IHRoZQorPHN0cnVjdGZpZWxkPmNvbnRyb2xzPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIHNldCBvZiBjb250cm9scyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPnJlc2VydmVkMjwvc3RydWN0ZmllbGQ+IGZpZWxkcworb2YgZWFjaCAmdjRsMi1leHQtY29udHJvbDsgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfRVhUX0NUUkxTPC9jb25zdGFudD4gaW9jdGwuIFN0cmluZyBjb250cm9scyBjb250cm9scworbXVzdCBhbHNvIHNldCB0aGUgPHN0cnVjdGZpZWxkPnN0cmluZzwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvcGFyYT4KKworICAgIDxwYXJhPklmIHRoZSA8c3RydWN0ZmllbGQ+c2l6ZTwvc3RydWN0ZmllbGQ+IGlzIHRvbyBzbWFsbCB0bworcmVjZWl2ZSB0aGUgY29udHJvbCByZXN1bHQgKG9ubHkgcmVsZXZhbnQgZm9yIHBvaW50ZXItdHlwZSBjb250cm9scworbGlrZSBzdHJpbmdzKSwgdGhlbiB0aGUgZHJpdmVyIHdpbGwgc2V0IDxzdHJ1Y3RmaWVsZD5zaXplPC9zdHJ1Y3RmaWVsZD4KK3RvIGEgdmFsaWQgdmFsdWUgYW5kIHJldHVybiBhbiAmRU5PU1BDOy4gWW91IHNob3VsZCByZS1hbGxvY2F0ZSB0aGUKK3N0cmluZyBtZW1vcnkgdG8gdGhpcyBuZXcgc2l6ZSBhbmQgdHJ5IGFnYWluLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZQorc2FtZSBpc3N1ZSBvY2N1cnMgYWdhaW4gaWYgdGhlIHN0cmluZyBoYXMgZ3Jvd24gaW4gdGhlIG1lYW50aW1lLiBJdCBpcworcmVjb21tZW5kZWQgdG8gY2FsbCAmVklESU9DLVFVRVJZQ1RSTDsgZmlyc3QgYW5kIHVzZQorPHN0cnVjdGZpZWxkPm1heGltdW08L3N0cnVjdGZpZWxkPisxIGFzIHRoZSBuZXcgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPgordmFsdWUuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGF0IGlzIHN1ZmZpY2llbnQgbWVtb3J5LgorPC9wYXJhPgorCisgICAgPHBhcmE+VG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHNldCBvZiBjb250cm9scyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+LCA8c3RydWN0ZmllbGQ+c2l6ZTwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnJlc2VydmVkMjwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnZhbHVlL3N0cmluZzwvc3RydWN0ZmllbGQ+IGZpZWxkcyBvZiBlYWNoICZ2NGwyLWV4dC1jb250cm9sOyBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfU19FWFRfQ1RSTFM8L2NvbnN0YW50PiBpb2N0bC4gVGhlIGNvbnRyb2xzCit3aWxsIG9ubHkgYmUgc2V0IGlmIDxlbXBoYXNpcz5hbGw8L2VtcGhhc2lzPiBjb250cm9sIHZhbHVlcyBhcmUKK3ZhbGlkLjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGNoZWNrIGlmIGEgc2V0IG9mIGNvbnRyb2xzIGhhdmUgY29ycmVjdCB2YWx1ZXMgYXBwbGljYXRpb25zCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDI8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD52YWx1ZS9zdHJpbmc8L3N0cnVjdGZpZWxkPiBmaWVsZHMgb2YgZWFjaCAmdjRsMi1leHQtY29udHJvbDsgYW5kCitjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX1RSWV9FWFRfQ1RSTFM8L2NvbnN0YW50PiBpb2N0bC4gSXQgaXMgdXAgdG8KK3RoZSBkcml2ZXIgd2hldGhlciB3cm9uZyB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQgdG8gYSB2YWxpZAordmFsdWUgb3IgaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQuPC9wYXJhPgorCisgICAgPHBhcmE+V2hlbiB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gb3IKKzxzdHJ1Y3RmaWVsZD5jdHJsX2NsYXNzPC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZCBkcml2ZXJzIHJldHVybiBhbgorJkVJTlZBTDsuIFdoZW4gdGhlIHZhbHVlIGlzIG91dCBvZiBib3VuZHMgZHJpdmVycyBjYW4gY2hvb3NlIHRvIHRha2UKK3RoZSBjbG9zZXN0IHZhbGlkIHZhbHVlIG9yIHJldHVybiBhbiAmRVJBTkdFOywgd2hhdGV2ZXIgc2VlbXMgbW9yZQorYXBwcm9wcmlhdGUuIEluIHRoZSBmaXJzdCBjYXNlIHRoZSBuZXcgdmFsdWUgaXMgc2V0IGluCismdjRsMi1leHQtY29udHJvbDsuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIGRyaXZlciB3aWxsIG9ubHkgc2V0L2dldCB0aGVzZSBjb250cm9scyBpZiBhbGwgY29udHJvbAordmFsdWVzIGFyZSBjb3JyZWN0LiBUaGlzIHByZXZlbnRzIHRoZSBzaXR1YXRpb24gd2hlcmUgb25seSBzb21lIG9mIHRoZQorY29udHJvbHMgd2VyZSBzZXQvZ2V0LiBPbmx5IGxvdy1sZXZlbCBlcnJvcnMgKCZlZzsgYSBmYWlsZWQgaTJjCitjb21tYW5kKSBjYW4gc3RpbGwgY2F1c2UgdGhpcyBzaXR1YXRpb24uPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWV4dC1jb250cm9sIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9leHRfY29udHJvbDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5JZGVudGlmaWVzIHRoZSBjb250cm9sLCBzZXQgYnkgdGhlCithcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHRvdGFsIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHBheWxvYWQgb2YgdGhpcworY29udHJvbC4gVGhpcyBpcyBub3JtYWxseSAwLCBidXQgZm9yIHBvaW50ZXIgY29udHJvbHMgdGhpcyBzaG91bGQgYmUKK3NldCB0byB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNvbnRhaW5pbmcgdGhlIHBheWxvYWQsIG9yIHRoYXQgd2lsbAorcmVjZWl2ZSB0aGUgcGF5bG9hZC4gSWYgPGNvbnN0YW50PlZJRElPQ19HX0VYVF9DVFJMUzwvY29uc3RhbnQ+IGZpbmRzCit0aGF0IHRoaXMgdmFsdWUgaXMgbGVzcyB0aGFuIGlzIHJlcXVpcmVkIHRvIHN0b3JlCit0aGUgcGF5bG9hZCByZXN1bHQsIHRoZW4gaXQgaXMgc2V0IHRvIGEgdmFsdWUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIHRoZQorcGF5bG9hZCByZXN1bHQgYW5kIEVOT1NQQyBpcyByZXR1cm5lZC4gTm90ZSB0aGF0IGZvciBzdHJpbmcgY29udHJvbHMKK3RoaXMgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBmaWVsZCBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorVGhpcyBmaWVsZCByZWZlcnMgdG8gdGhlIHNpemUgb2YgdGhlIG1lbW9yeSB0aGF0IGNvbnRhaW5zIHRoZSBzdHJpbmcuCitUaGUgYWN0dWFsIDxlbXBoYXNpcz5sZW5ndGg8L2VtcGhhc2lzPiBvZiB0aGUgc3RyaW5nIG1heSB3ZWxsIGJlIG11Y2ggc21hbGxlci4KKzwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQyPC9zdHJ1Y3RmaWVsZD5bMV08L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dW5pb248L2VudHJ5PgorCSAgICA8ZW50cnk+KGFub255bW91cyk8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk5ldyB2YWx1ZSBvciBjdXJyZW50IHZhbHVlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X19zNjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnZhbHVlNjQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5OZXcgdmFsdWUgb3IgY3VycmVudCB2YWx1ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmNoYXIgKjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c3RyaW5nPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QSBwb2ludGVyIHRvIGEgc3RyaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1leHQtY29udHJvbHMiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2V4dF9jb250cm9sczwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmN0cmxfY2xhc3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY29udHJvbCBjbGFzcyB0byB3aGljaCBhbGwgY29udHJvbHMgYmVsb25nLCBzZWUKKzx4cmVmIGxpbmtlbmQ9ImN0cmwtY2xhc3MiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbnVtYmVyIG9mIGNvbnRyb2xzIGluIHRoZSBjb250cm9scyBhcnJheS4gTWF5CithbHNvIGJlIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5lcnJvcl9pZHg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TZXQgYnkgdGhlIGRyaXZlciBpbiBjYXNlIG9mIGFuIGVycm9yLiBJdCBpcyB0aGUKK2luZGV4IG9mIHRoZSBjb250cm9sIGNhdXNpbmcgdGhlIGVycm9yIG9yIGVxdWFsIHRvICdjb3VudCcgd2hlbiB0aGUKK2Vycm9yIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGNvbnRyb2wuIFVuZGVmaW5lZCB3aGVuIHRoZQoraW9jdGwgcmV0dXJucyAwIChzdWNjZXNzKS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIGFuZAorYXBwbGljYXRpb25zIG11c3Qgc2V0IHRoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1leHQtY29udHJvbDsgKjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y29udHJvbHM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Qb2ludGVyIHRvIGFuIGFycmF5IG9mCis8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiB2NGwyX2V4dF9jb250cm9sIHN0cnVjdHVyZXMuIElnbm9yZWQKK2lmIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGVxdWFscyB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iY3RybC1jbGFzcyI+CisgICAgICA8dGl0bGU+Q29udHJvbCBjbGFzc2VzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfQ0xBU1NfVVNFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4OTgwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBjbGFzcyBjb250YWluaW5nIHVzZXIgY29udHJvbHMuIFRoZXNlIGNvbnRyb2xzCithcmUgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImNvbnRyb2wiIC8+LiBBbGwgY29udHJvbHMgdGhhdCBjYW4gYmUgc2V0Cit1c2luZyB0aGUgJlZJRElPQy1TLUNUUkw7IGFuZCAmVklESU9DLUctQ1RSTDsgaW9jdGwgYmVsb25nIHRvIHRoaXMKK2NsYXNzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0NMQVNTX01QRUc8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDk5MDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY2xhc3MgY29udGFpbmluZyBNUEVHIGNvbXByZXNzaW9uIGNvbnRyb2xzLgorVGhlc2UgY29udHJvbHMgYXJlIGRlc2NyaWJlZCBpbiA8eHJlZgorCQlsaW5rZW5kPSJtcGVnLWNvbnRyb2xzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9DTEFTU19DQU1FUkE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDlhMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY2xhc3MgY29udGFpbmluZyBjYW1lcmEgY29udHJvbHMuCitUaGVzZSBjb250cm9scyBhcmUgZGVzY3JpYmVkIGluIDx4cmVmCisJCWxpbmtlbmQ9ImNhbWVyYS1jb250cm9scyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfQ0xBU1NfRk1fVFg8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDliMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY2xhc3MgY29udGFpbmluZyBGTSBUcmFuc21pdHRlciAoRk0gVFgpIGNvbnRyb2xzLgorVGhlc2UgY29udHJvbHMgYXJlIGRlc2NyaWJlZCBpbiA8eHJlZgorCQlsaW5rZW5kPSJmbS10eC1jb250cm9scyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItZXh0LWNvbnRyb2w7IDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+CitpcyBpbnZhbGlkIG9yIHRoZSAmdjRsMi1leHQtY29udHJvbHM7Cis8c3RydWN0ZmllbGQ+Y3RybF9jbGFzczwvc3RydWN0ZmllbGQ+IGlzIGludmFsaWQuIFRoaXMgZXJyb3IgY29kZSBpcworYWxzbyByZXR1cm5lZCBieSB0aGUgPGNvbnN0YW50PlZJRElPQ19TX0VYVF9DVFJMUzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19UUllfRVhUX0NUUkxTPC9jb25zdGFudD4gaW9jdGxzIGlmIHR3byBvciBtb3JlCitjb250cm9sIHZhbHVlcyBhcmUgaW4gY29uZmxpY3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FUkFOR0U8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLWV4dC1jb250cm9sOyA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPgoraXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBjb250cm9sIGlzIHRlbXBvcmFyaWx5IG5vdCBjaGFuZ2VhYmxlLCBwb3NzaWJseQorYmVjYXVzZSBhbm90aGVyIGFwcGxpY2F0aW9ucyB0b29rIG92ZXIgY29udHJvbCBvZiB0aGUgZGV2aWNlIGZ1bmN0aW9uCit0aGlzIGNvbnRyb2wgYmVsb25ncyB0by48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVOT1NQQzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgc3BhY2UgcmVzZXJ2ZWQgZm9yIHRoZSBjb250cm9sJ3MgcGF5bG9hZCBpcyBpbnN1ZmZpY2llbnQuCitUaGUgZmllbGQgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBpcyBzZXQgdG8gYSB2YWx1ZSB0aGF0IGlzIGVub3VnaAordG8gc3RvcmUgdGhlIHBheWxvYWQgYW5kIHRoaXMgZXJyb3IgY29kZSBpcyByZXR1cm5lZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1mYnVmLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZmJ1Zi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwMTcwNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZmJ1Zi54bWwKQEAgLTAsMCArMSw0NTYgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctZmJ1ZiI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0ZCVUYsIFZJRElPQ19TX0ZCVUY8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0ZCVUY8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfRkJVRjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5HZXQgb3Igc2V0IGZyYW1lIGJ1ZmZlciBvdmVybGF5IHBhcmFtZXRlcnM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0ZCVUYsIFZJRElPQ19TX0ZCVUY8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PiBpb2N0bCB0byBnZXQgYW5kIHNldCB0aGUKK2ZyYW1lYnVmZmVyIHBhcmFtZXRlcnMgZm9yIGEgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+VmlkZW8KK092ZXJsYXk8L2xpbms+IG9yIDxsaW5rIGxpbmtlbmQ9Im9zZCI+VmlkZW8gT3V0cHV0IE92ZXJsYXk8L2xpbms+CisoT1NEKS4gVGhlIHR5cGUgb2Ygb3ZlcmxheSBpcyBpbXBsaWVkIGJ5IHRoZSBkZXZpY2UgdHlwZSAoY2FwdHVyZSBvcgorb3V0cHV0IGRldmljZSkgYW5kIGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggdGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsLgorT25lIDxmaWxlbmFtZT4vZGV2L3ZpZGVvTjwvZmlsZW5hbWU+IGRldmljZSBtdXN0IG5vdCBzdXBwb3J0IGJvdGgKK2tpbmRzIG9mIG92ZXJsYXkuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIFY0TDIgQVBJIGRpc3Rpbmd1aXNoZXMgZGVzdHJ1Y3RpdmUgYW5kIG5vbi1kZXN0cnVjdGl2ZQorb3ZlcmxheXMuIEEgZGVzdHJ1Y3RpdmUgb3ZlcmxheSBjb3BpZXMgY2FwdHVyZWQgdmlkZW8gaW1hZ2VzIGludG8gdGhlCit2aWRlbyBtZW1vcnkgb2YgYSBncmFwaGljcyBjYXJkLiBBIG5vbi1kZXN0cnVjdGl2ZSBvdmVybGF5IGJsZW5kcwordmlkZW8gaW1hZ2VzIGludG8gYSBWR0Egc2lnbmFsIG9yIGdyYXBoaWNzIGludG8gYSB2aWRlbyBzaWduYWwuCis8d29yZGFzd29yZD5WaWRlbyBPdXRwdXQgT3ZlcmxheXM8L3dvcmRhc3dvcmQ+IGFyZSBhbHdheXMKK25vbi1kZXN0cnVjdGl2ZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBnZXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19GQlVGPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gYQorPHN0cnVjdG5hbWU+djRsMl9mcmFtZWJ1ZmZlcjwvc3RydWN0bmFtZT4gc3RydWN0dXJlLiBUaGUgZHJpdmVyIGZpbGxzCithbGwgZmllbGRzIG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJucyBhbiAmRUlOVkFMOyB3aGVuIG92ZXJsYXlzIGFyZQorbm90IHN1cHBvcnRlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIGEgPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0CitPdmVybGF5PC93b3JkYXN3b3JkPiwgYXBwbGljYXRpb25zIG11c3QgaW5pdGlhbGl6ZSB0aGUKKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEgc3RydWN0Cis8c3RydWN0bmFtZT52NGwyX2ZyYW1lYnVmZmVyPC9zdHJ1Y3RuYW1lPi4gU2luY2UgdGhlIGZyYW1lYnVmZmVyIGlzCitpbXBsZW1lbnRlZCBvbiB0aGUgVFYgY2FyZCBhbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUKK2RyaXZlci4gV2hlbiBhbiBhcHBsaWNhdGlvbiBjYWxscyA8Y29uc3RhbnQ+VklESU9DX1NfRkJVRjwvY29uc3RhbnQ+Cit3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSwgdGhlIGRyaXZlciBwcmVwYXJlcyBmb3IgdGhlIG92ZXJsYXkKK2FuZCByZXR1cm5zIHRoZSBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+IGRvZXMsIG9yIGl0IHJldHVybnMgYW4gZXJyb3IKK2NvZGUuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGZvciBhIDx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZQorVmlkZW8gT3ZlcmxheTwvd29yZGFzd29yZD4sIGFwcGxpY2F0aW9ucyBtdXN0IGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCwgdGhlCis8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gc3Vic3RydWN0dXJlLCBhbmQgY2FsbAorPGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50Pi4gQWdhaW4gdGhlIGRyaXZlciBwcmVwYXJlcyBmb3IgdGhlCitvdmVybGF5IGFuZCByZXR1cm5zIHRoZSBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzIGFzCis8Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+IGRvZXMsIG9yIGl0IHJldHVybnMgYW4gZXJyb3IKK2NvZGUuPC9wYXJhPgorCisgICAgPHBhcmE+Rm9yIGEgPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8gT3ZlcmxheTwvd29yZGFzd29yZD4KK2FwcGxpY2F0aW9ucyBtdXN0IGFkZGl0aW9uYWxseSBwcm92aWRlIGEKKzxzdHJ1Y3RmaWVsZD5iYXNlPC9zdHJ1Y3RmaWVsZD4gYWRkcmVzcy4gU2V0dGluZyB1cCBhIERNQSB0byBhCityYW5kb20gbWVtb3J5IGxvY2F0aW9uIGNhbiBqZW9wYXJkaXplIHRoZSBzeXN0ZW0gc2VjdXJpdHksIGl0cworc3RhYmlsaXR5IG9yIGV2ZW4gZGFtYWdlIHRoZSBoYXJkd2FyZSwgdGhlcmVmb3JlIG9ubHkgdGhlIHN1cGVydXNlcgorY2FuIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgYSBkZXN0cnVjdGl2ZSB2aWRlbyBvdmVybGF5LjwvcGFyYT4KKworICAgIDwhLS0gTkIgdjRsMl9waXhfZm9ybWF0IGlzIGFsc28gc3BlY2lmaWVkIGluIHBpeGZtdC5zZ21sLi0tPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWZyYW1lYnVmZmVyIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9mcmFtZWJ1ZmZlcjwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk92ZXJsYXkgY2FwYWJpbGl0eSBmbGFncyBzZXQgYnkgdGhlIGRyaXZlciwgc2VlCis8eHJlZiBsaW5rZW5kPSJmcmFtZWJ1ZmZlci1jYXAiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+T3ZlcmxheSBjb250cm9sIGZsYWdzIHNldCBieSBhcHBsaWNhdGlvbiBhbmQKK2RyaXZlciwgc2VlIDx4cmVmIGxpbmtlbmQ9ImZyYW1lYnVmZmVyLWZsYWdzIiAvPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT52b2lkICo8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmJhc2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+UGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBmcmFtZWJ1ZmZlciwKK3RoYXQgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBpeGVsIGluIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlCitmcmFtZWJ1ZmZlci48Zm9vdG5vdGU+PHBhcmE+QSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgbWF5IG5vdCBzdWl0IGFsbAorcGxhdGZvcm1zLiBHSyBub3RlcyBpbiB0aGVvcnkgd2Ugc2hvdWxkIHBhc3Mgc29tZXRoaW5nIGxpa2UgUENJIGRldmljZQorKyBtZW1vcnkgcmVnaW9uICsgb2Zmc2V0IGluc3RlYWQuIElmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgcGxlYXNlCitkaXNjdXNzIG9uIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nIGxpc3Q6ICZ2NGwtbWw7LjwvcGFyYT48L2Zvb3Rub3RlPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGZpZWxkIGlzIGlycmVsZXZhbnQgdG8KKzx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZSBWaWRlbyBPdmVybGF5czwvd29yZGFzd29yZD4uIEZvcgorPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8gT3ZlcmxheXM8L3dvcmRhc3dvcmQ+IGFwcGxpY2F0aW9ucyBtdXN0Citwcm92aWRlIGEgYmFzZSBhZGRyZXNzLiBUaGUgZHJpdmVyIG1heSBhY2NlcHQgb25seSBiYXNlIGFkZHJlc3Nlcword2hpY2ggYXJlIGEgbXVsdGlwbGUgb2YgdHdvLCBmb3VyIG9yIGVpZ2h0IGJ5dGVzLiBGb3IKKzx3b3JkYXN3b3JkPlZpZGVvIE91dHB1dCBPdmVybGF5czwvd29yZGFzd29yZD4gdGhlIGRyaXZlciBtdXN0IHJldHVybgorYSB2YWxpZCBiYXNlIGFkZHJlc3MsIHNvIGFwcGxpY2F0aW9ucyBjYW4gZmluZCB0aGUgY29ycmVzcG9uZGluZyBMaW51eAorZnJhbWVidWZmZXIgZGV2aWNlIChzZWUgPHhyZWYgbGlua2VuZD0ib3NkIiAvPikuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXBpeC1mb3JtYXQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+TGF5b3V0IG9mIHRoZSBmcmFtZSBidWZmZXIuIFRoZQorPHN0cnVjdG5hbWU+djRsMl9waXhfZm9ybWF0PC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8eHJlZgorbGlua2VuZD0icGl4Zm10IiAvPiwgZm9yIGNsYXJpZmljYXRpb24gdGhlIGZpZWxkcyBhbmQgYWNjZXB0YWJsZSB2YWx1ZXMKKwkgICAgYXJlIGxpc3RlZCBiZWxvdzo8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldpZHRoIG9mIHRoZSBmcmFtZSBidWZmZXIgaW4gcGl4ZWxzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhlaWdodDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkhlaWdodCBvZiB0aGUgZnJhbWUgYnVmZmVyIGluIHBpeGVscy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5waXhlbGZvcm1hdDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlCitmcmFtZWJ1ZmZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+Rm9yIDx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZSBWaWRlbworT3ZlcmxheXM8L3dvcmRhc3dvcmQ+IHRoaXMgZmllbGQgb25seSBkZWZpbmVzIGEgZm9ybWF0IGZvciB0aGUKKyZ2NGwyLXdpbmRvdzsgPHN0cnVjdGZpZWxkPmNocm9tYWtleTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5Gb3IgPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8KK092ZXJsYXlzPC93b3JkYXN3b3JkPiBhcHBsaWNhdGlvbnMgbXVzdCBpbml0aWFsaXplIHRoaXMgZmllbGQuIEZvcgorPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0IE92ZXJsYXlzPC93b3JkYXN3b3JkPiB0aGUgZHJpdmVyIG11c3QgcmV0dXJuCithIHZhbGlkIGZvcm1hdC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VXN1YWxseSB0aGlzIGlzIGFuIFJHQiBmb3JtYXQgKGZvciBleGFtcGxlCis8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCNTY1Ij48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1JHQjU2NTwvY29uc3RhbnQ+PC9saW5rPikKK2J1dCBZVVYgZm9ybWF0cyAob25seSBwYWNrZWQgWVVWIGZvcm1hdHMgd2hlbiBjaHJvbWEga2V5aW5nIGlzIHVzZWQsCitub3QgaW5jbHVkaW5nIDxjb25zdGFudD5WNEwyX1BJWF9GTVRfWVVZVjwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfUElYX0ZNVF9VWVZZPC9jb25zdGFudD4pIGFuZCB0aGUKKzxjb25zdGFudD5WNEwyX1BJWF9GTVRfUEFMODwvY29uc3RhbnQ+IGZvcm1hdCBhcmUgYWxzbyBwZXJtaXR0ZWQuIFRoZQorYmVoYXZpb3Igb2YgdGhlIGRyaXZlciB3aGVuIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIGEgY29tcHJlc3NlZAorZm9ybWF0IGlzIHVuZGVmaW5lZC4gU2VlIDx4cmVmIGxpbmtlbmQ9InBpeGZtdCIgLz4gZm9yIGluZm9ybWF0aW9uIG9uCitwaXhlbCBmb3JtYXRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItZmllbGQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzaGFsbCBpZ25vcmUgdGhpcyBmaWVsZC4KK0lmIGFwcGxpY2FibGUsIHRoZSBmaWVsZCBvcmRlciBpcyBzZWxlY3RlZCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOworaW9jdGwsIHVzaW5nIHRoZSA8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZgorJnY0bDItd2luZG93Oy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5ieXRlc3BlcmxpbmU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5EaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHRoZSBsZWZ0bW9zdCBwaXhlbHMgaW4KK3R3byBhZGphY2VudCBsaW5lcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5UaGlzIGZpZWxkIGlzIGlycmVsZXZhbnQgdG8KKzx3b3JkYXN3b3JkPm5vbi1kZXN0cnVjdGl2ZSBWaWRlbworT3ZlcmxheXM8L3dvcmRhc3dvcmQ+LjwvcGFyYT48cGFyYT5Gb3IgPHdvcmRhc3dvcmQ+ZGVzdHJ1Y3RpdmUgVmlkZW8KK092ZXJsYXlzPC93b3JkYXN3b3JkPiBib3RoIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBjYW4gc2V0IHRoaXMgZmllbGQKK3RvIHJlcXVlc3QgcGFkZGluZyBieXRlcyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4gRHJpdmVycyBob3dldmVyIG1heQoraWdub3JlIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIHJldHVybmluZyA8c3RydWN0ZmllbGQ+d2lkdGg8L3N0cnVjdGZpZWxkPgordGltZXMgYnl0ZXMtcGVyLXBpeGVsIG9yIGEgbGFyZ2VyIHZhbHVlIHJlcXVpcmVkIGJ5IHRoZSBoYXJkd2FyZS4gVGhhdAoraW1wbGllcyBhcHBsaWNhdGlvbnMgY2FuIGp1c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVybyB0byBnZXQgYQorcmVhc29uYWJsZSBkZWZhdWx0LjwvcGFyYT48cGFyYT5Gb3IgPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0CitPdmVybGF5czwvd29yZGFzd29yZD4gdGhlIGRyaXZlciBtdXN0IHJldHVybiBhIHZhbGlkCit2YWx1ZS48L3BhcmE+PHBhcmE+VmlkZW8gaGFyZHdhcmUgbWF5IGFjY2VzcyBwYWRkaW5nIGJ5dGVzLCB0aGVyZWZvcmUKK3RoZXkgbXVzdCByZXNpZGUgaW4gYWNjZXNzaWJsZSBtZW1vcnkuIENvbnNpZGVyIGZvciBleGFtcGxlIHRoZSBjYXNlCit3aGVyZSBwYWRkaW5nIGJ5dGVzIGFmdGVyIHRoZSBsYXN0IGxpbmUgb2YgYW4gaW1hZ2UgY3Jvc3MgYSBzeXN0ZW0KK3BhZ2UgYm91bmRhcnkuIENhcHR1cmUgZGV2aWNlcyBtYXkgd3JpdGUgcGFkZGluZyBieXRlcywgdGhlIHZhbHVlIGlzCit1bmRlZmluZWQuIE91dHB1dCBkZXZpY2VzIGlnbm9yZSB0aGUgY29udGVudHMgb2YgcGFkZGluZworYnl0ZXMuPC9wYXJhPjxwYXJhPldoZW4gdGhlIGltYWdlIGZvcm1hdCBpcyBwbGFuYXIgdGhlCis8c3RydWN0ZmllbGQ+Ynl0ZXNwZXJsaW5lPC9zdHJ1Y3RmaWVsZD4gdmFsdWUgYXBwbGllcyB0byB0aGUgbGFyZ2VzdAorcGxhbmUgYW5kIGlzIGRpdmlkZWQgYnkgdGhlIHNhbWUgZmFjdG9yIGFzIHRoZQorPHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD4gZmllbGQgZm9yIGFueSBzbWFsbGVyIHBsYW5lcy4gRm9yCitleGFtcGxlIHRoZSBDYiBhbmQgQ3IgcGxhbmVzIG9mIGEgWVVWIDQ6MjowIGltYWdlIGhhdmUgaGFsZiBhcyBtYW55CitwYWRkaW5nIGJ5dGVzIGZvbGxvd2luZyBlYWNoIGxpbmUgYXMgdGhlIFkgcGxhbmUuIFRvIGF2b2lkIGFtYmlndWl0aWVzCitkcml2ZXJzIG11c3QgcmV0dXJuIGEgPHN0cnVjdGZpZWxkPmJ5dGVzcGVybGluZTwvc3RydWN0ZmllbGQ+IHZhbHVlCityb3VuZGVkIHVwIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHNjYWxlIGZhY3Rvci48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2l6ZWltYWdlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+VGhpcyBmaWVsZCBpcyBpcnJlbGV2YW50IHRvCis8d29yZGFzd29yZD5ub24tZGVzdHJ1Y3RpdmUgVmlkZW8gT3ZlcmxheXM8L3dvcmRhc3dvcmQ+LiBGb3IKKzx3b3JkYXN3b3JkPmRlc3RydWN0aXZlIFZpZGVvIE92ZXJsYXlzPC93b3JkYXN3b3JkPiBhcHBsaWNhdGlvbnMgbXVzdAoraW5pdGlhbGl6ZSB0aGlzIGZpZWxkLiBGb3IgPHdvcmRhc3dvcmQ+VmlkZW8gT3V0cHV0CitPdmVybGF5czwvd29yZGFzd29yZD4gdGhlIGRyaXZlciBtdXN0IHJldHVybiBhIHZhbGlkCitmb3JtYXQuPC9wYXJhPjxwYXJhPlRvZ2V0aGVyIHdpdGggPHN0cnVjdGZpZWxkPmJhc2U8L3N0cnVjdGZpZWxkPiBpdAorZGVmaW5lcyB0aGUgZnJhbWVidWZmZXIgbWVtb3J5IGFjY2Vzc2libGUgYnkgdGhlCitkcml2ZXIuPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItY29sb3JzcGFjZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNvbG9yc3BhY2U8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGluZm9ybWF0aW9uIHN1cHBsZW1lbnRzIHRoZQorPHN0cnVjdGZpZWxkPnBpeGVsZm9ybWF0PC9zdHJ1Y3RmaWVsZD4gYW5kIG11c3QgYmUgc2V0IGJ5IHRoZSBkcml2ZXIsCitzZWUgPHhyZWYgbGlua2VuZD0iY29sb3JzcGFjZXMiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnByaXY8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgZm9ybWF0cy4gV2hlbiBub3QgdXNlZCBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgbXVzdAorc2V0IHRoaXMgZmllbGQgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImZyYW1lYnVmZmVyLWNhcCI+CisgICAgICA8dGl0bGU+RnJhbWUgQnVmZmVyIENhcGFiaWxpdHkgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfRVhURVJOT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIGlzIGNhcGFibGUgb2Ygbm9uLWRlc3RydWN0aXZlIG92ZXJsYXlzLgorV2hlbiB0aGUgZHJpdmVyIGNsZWFycyB0aGlzIGZsYWcsIG9ubHkgZGVzdHJ1Y3RpdmUgb3ZlcmxheXMgYXJlCitzdXBwb3J0ZWQuIFRoZXJlIGFyZSBubyBkcml2ZXJzIHlldCB3aGljaCBzdXBwb3J0IGJvdGggZGVzdHJ1Y3RpdmUgYW5kCitub24tZGVzdHJ1Y3RpdmUgb3ZlcmxheXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nIGJ5IGNocm9tYS1rZXlpbmcgdGhlCitpbWFnZXMuIFRoYXQgaXMsIGltYWdlIHBpeGVscyByZXBsYWNlIHBpeGVscyBpbiB0aGUgVkdBIG9yIHZpZGVvCitzaWduYWwgb25seSB3aGVyZSB0aGUgbGF0dGVyIGFzc3VtZSBhIGNlcnRhaW4gY29sb3IuIENocm9tYS1rZXlpbmcKK21ha2VzIG5vIHNlbnNlIGZvciBkZXN0cnVjdGl2ZSBvdmVybGF5cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwNDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nIHVzaW5nIGEgbGlzdCBvZiBjbGlwCityZWN0YW5nbGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9CSVRNQVBfQ0xJUFBJTkc8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyBjbGlwcGluZyB1c2luZyBhIGJpdCBtYXNrLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0NBUF9MT0NBTF9BTFBIQTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAxMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nL2JsZW5kaW5nIHVzaW5nIHRoZQorYWxwaGEgY2hhbm5lbCBvZiB0aGUgZnJhbWVidWZmZXIgb3IgVkdBIHNpZ25hbC4gQWxwaGEgYmxlbmRpbmcgbWFrZXMKK25vIHNlbnNlIGZvciBkZXN0cnVjdGl2ZSBvdmVybGF5cy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgYWxwaGEgYmxlbmRpbmcgdXNpbmcgYSBnbG9iYWwKK2FscGhhIHZhbHVlLiBBbHBoYSBibGVuZGluZyBtYWtlcyBubyBzZW5zZSBmb3IgZGVzdHJ1Y3RpdmUgb3ZlcmxheXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDA0MDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIGNsaXBwaW5nL2JsZW5kaW5nIHVzaW5nIHRoZQoraW52ZXJ0ZWQgYWxwaGEgY2hhbm5lbCBvZiB0aGUgZnJhbWVidWZmZXIgb3IgVkdBIHNpZ25hbC4gQWxwaGEKK2JsZW5kaW5nIG1ha2VzIG5vIHNlbnNlIGZvciBkZXN0cnVjdGl2ZSBvdmVybGF5cy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImZyYW1lYnVmZmVyLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5GcmFtZSBCdWZmZXIgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9GTEFHX1BSSU1BUlk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGZyYW1lYnVmZmVyIGlzIHRoZSBwcmltYXJ5IGdyYXBoaWNzIHN1cmZhY2UuCitJbiBvdGhlciB3b3JkcywgdGhlIG92ZXJsYXkgaXMgZGVzdHJ1Y3RpdmUuIFs/XTwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZnJhbWUgYnVmZmVyIGlzIGFuIG92ZXJsYXkgc3VyZmFjZSB0aGUgc2FtZQorc2l6ZSBhcyB0aGUgY2FwdHVyZS4gWz9dPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+VGhlIHB1cnBvc2Ugb2YKKzxjb25zdGFudD5WNEwyX0ZCVUZfRkxBR19QUklNQVJZPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTwvY29uc3RhbnQ+IHdhcyBuZXZlciBxdWl0ZSBjbGVhci4KK01vc3QgZHJpdmVycyBzZWVtIHRvIGlnbm9yZSB0aGVzZSBmbGFncy4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKKzx3b3JkYXN3b3JkPmJ0dHY8L3dvcmRhc3dvcmQ+IGRyaXZlciBhcHBsaWNhdGlvbnMgc2hvdWxkIHNldCB0aGUKKzxjb25zdGFudD5WNEwyX0ZCVUZfRkxBR19PVkVSTEFZPC9jb25zdGFudD4gZmxhZy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkJVRl9GTEFHX0NIUk9NQUtFWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwNDwvZW50cnk+CisJICAgIDxlbnRyeT5Vc2UgY2hyb21hLWtleWluZy4gVGhlIGNocm9tYS1rZXkgY29sb3IgaXMKK2RldGVybWluZWQgYnkgdGhlIDxzdHJ1Y3RmaWVsZD5jaHJvbWFrZXk8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZgorJnY0bDItd2luZG93OyBhbmQgbmVnb3RpYXRlZCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bCwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9Im92ZXJsYXkiIC8+CithbmQKKwkgICAgPHhyZWYgbGlua2VuZD0ib3NkIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5UaGVyZSBhcmUgbm8gZmxhZ3MgdG8gZW5hYmxlCitjbGlwcGluZyB1c2luZyBhIGxpc3Qgb2YgY2xpcCByZWN0YW5nbGVzIG9yIGEgYml0bWFwLiBUaGVzZSBtZXRob2RzCithcmUgbmVnb3RpYXRlZCB3aXRoIHRoZSAmVklESU9DLVMtRk1UOyBpb2N0bCwgc2VlIDx4cmVmCisJCWxpbmtlbmQ9Im92ZXJsYXkiIC8+IGFuZCA8eHJlZiBsaW5rZW5kPSJvc2QiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+VXNlIHRoZSBhbHBoYSBjaGFubmVsIG9mIHRoZSBmcmFtZWJ1ZmZlciB0byBjbGlwIG9yCitibGVuZCBmcmFtZWJ1ZmZlciBwaXhlbHMgd2l0aCB2aWRlbyBpbWFnZXMuIFRoZSBibGVuZAorZnVuY3Rpb24gaXM6IG91dHB1dCA9IGZyYW1lYnVmZmVyIHBpeGVsICogYWxwaGEgKyB2aWRlbyBwaXhlbCAqICgxIC0KK2FscGhhKS4gVGhlIGFjdHVhbCBhbHBoYSBkZXB0aCBkZXBlbmRzIG9uIHRoZSBmcmFtZWJ1ZmZlciBwaXhlbAorZm9ybWF0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlVzZSBhIGdsb2JhbCBhbHBoYSB2YWx1ZSB0byBibGVuZCB0aGUgZnJhbWVidWZmZXIKK3dpdGggdmlkZW8gaW1hZ2VzLiBUaGUgYmxlbmQgZnVuY3Rpb24gaXM6IG91dHB1dCA9IChmcmFtZWJ1ZmZlciBwaXhlbAorKiBhbHBoYSArIHZpZGVvIHBpeGVsICogKDI1NSAtIGFscGhhKSkgLyAyNTUuIFRoZSBhbHBoYSB2YWx1ZSBpcworZGV0ZXJtaW5lZCBieSB0aGUgPHN0cnVjdGZpZWxkPmdsb2JhbF9hbHBoYTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mCismdjRsMi13aW5kb3c7IGFuZCBuZWdvdGlhdGVkIHdpdGggdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0ib3ZlcmxheSIgLz4KK2FuZCA8eHJlZiBsaW5rZW5kPSJvc2QiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GQlVGX0ZMQUdfTE9DQUxfSU5WX0FMUEhBPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pkxpa2UKKzxjb25zdGFudD5WNEwyX0ZCVUZfRkxBR19MT0NBTF9BTFBIQTwvY29uc3RhbnQ+LCB1c2UgdGhlIGFscGhhIGNoYW5uZWwKK29mIHRoZSBmcmFtZWJ1ZmZlciB0byBjbGlwIG9yIGJsZW5kIGZyYW1lYnVmZmVyIHBpeGVscyB3aXRoIHZpZGVvCitpbWFnZXMsIGJ1dCB3aXRoIGFuIGludmVydGVkIGFscGhhIHZhbHVlLiBUaGUgYmxlbmQgZnVuY3Rpb24gaXM6CitvdXRwdXQgPSBmcmFtZWJ1ZmZlciBwaXhlbCAqICgxIC0gYWxwaGEpICsgdmlkZW8gcGl4ZWwgKiBhbHBoYS4gVGhlCithY3R1YWwgYWxwaGEgZGVwdGggZGVwZW5kcyBvbiB0aGUgZnJhbWVidWZmZXIgcGl4ZWwgZm9ybWF0LjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RVBFUk08L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PiBjYW4gb25seSBiZSBjYWxsZWQKK2J5IGEgcHJpdmlsZWdlZCB1c2VyIHRvIG5lZ290aWF0ZSB0aGUgcGFyYW1ldGVycyBmb3IgYSBkZXN0cnVjdGl2ZQorb3ZlcmxheS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzIGNhbm5vdCBiZSBjaGFuZ2VkIGF0IHRoaXMKK3RpbWUgYmVjYXVzZSBvdmVybGF5IGlzIGFscmVhZHkgZW5hYmxlZCwgb3IgY2FwdHVyaW5nIGlzIGVuYWJsZWQKK2FuZCB0aGUgaGFyZHdhcmUgY2Fubm90IGNhcHR1cmUgYW5kIG92ZXJsYXkgc2ltdWx0YW5lb3VzbHkuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQgb3IgdGhlCis8Y29uc3RhbnQ+VklESU9DX1NfRkJVRjwvY29uc3RhbnQ+IHBhcmFtZXRlcnMgYXJlIHVuc3VpdGFibGUuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZm10LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZm10LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzdkMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1mbXQueG1sCkBAIC0wLDAgKzEsMjAxIEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1nLWZtdCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0ZNVCwgVklESU9DX1NfRk1ULAorVklESU9DX1RSWV9GTVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0ZNVDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19GTVQ8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1RSWV9GTVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCB0aGUgZGF0YSBmb3JtYXQsIHRyeSBhIGZvcm1hdDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9mb3JtYXQKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19GTVQsIFZJRElPQ19TX0ZNVCwgVklESU9DX1RSWV9GTVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZXNlIGlvY3RscyBhcmUgdXNlZCB0byBuZWdvdGlhdGUgdGhlIGZvcm1hdCBvZiBkYXRhCisodHlwaWNhbGx5IGltYWdlIGZvcm1hdCkgZXhjaGFuZ2VkIGJldHdlZW4gZHJpdmVyIGFuZAorYXBwbGljYXRpb24uPC9wYXJhPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhIHN0cnVjdAorPHN0cnVjdG5hbWU+djRsMl9mb3JtYXQ8L3N0cnVjdG5hbWU+IHRvIHRoZSByZXNwZWN0aXZlIGJ1ZmZlciAoc3RyZWFtKQordHlwZS4gRm9yIGV4YW1wbGUgdmlkZW8gY2FwdHVyZSBkZXZpY2VzIHVzZQorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LiBXaGVuIHRoZSBhcHBsaWNhdGlvbgorY2FsbHMgdGhlIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlciB0bwordGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBmaWxscyB0aGUgcmVzcGVjdGl2ZSBtZW1iZXIgb2YgdGhlCis8c3RydWN0ZmllbGQ+Zm10PC9zdHJ1Y3RmaWVsZD4gdW5pb24uIEluIGNhc2Ugb2YgdmlkZW8gY2FwdHVyZSBkZXZpY2VzCit0aGF0IGlzIHRoZSAmdjRsMi1waXgtZm9ybWF0OyA8c3RydWN0ZmllbGQ+cGl4PC9zdHJ1Y3RmaWVsZD4gbWVtYmVyLgorV2hlbiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZHJpdmVycyByZXR1cm4gYW4KKyZFSU5WQUw7LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIGNoYW5nZSB0aGUgY3VycmVudCBmb3JtYXQgcGFyYW1ldGVycyBhcHBsaWNhdGlvbnMKK2luaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgYW5kIGFsbAorZmllbGRzIG9mIHRoZSByZXNwZWN0aXZlIDxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPgordW5pb24gbWVtYmVyLiBGb3IgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgZGV2aWNlcwordHlwZXMgaW4gPHhyZWYgbGlua2VuZD0iZGV2aWNlcyIgLz4uIEdvb2QgcHJhY3RpY2UgaXMgdG8gcXVlcnkgdGhlCitjdXJyZW50IHBhcmFtZXRlcnMgZmlyc3QsIGFuZCB0bworbW9kaWZ5IG9ubHkgdGhvc2UgcGFyYW1ldGVycyBub3Qgc3VpdGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4gV2hlbgordGhlIGFwcGxpY2F0aW9uIGNhbGxzIHRoZSA8Y29uc3RhbnQ+VklESU9DX1NfRk1UPC9jb25zdGFudD4gaW9jdGwKK3dpdGggYSBwb2ludGVyIHRvIGEgPHN0cnVjdG5hbWU+djRsMl9mb3JtYXQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZQordGhlIGRyaXZlciBjaGVja3MKK2FuZCBhZGp1c3RzIHRoZSBwYXJhbWV0ZXJzIGFnYWluc3QgaGFyZHdhcmUgYWJpbGl0aWVzLiBEcml2ZXJzCitzaG91bGQgbm90IHJldHVybiBhbiBlcnJvciBjb2RlIHVubGVzcyB0aGUgaW5wdXQgaXMgYW1iaWd1b3VzLCB0aGlzIGlzCithIG1lY2hhbmlzbSB0byBmYXRob20gZGV2aWNlIGNhcGFiaWxpdGllcyBhbmQgdG8gYXBwcm9hY2ggcGFyYW1ldGVycworYWNjZXB0YWJsZSBmb3IgYm90aCB0aGUgYXBwbGljYXRpb24gYW5kIGRyaXZlci4gT24gc3VjY2VzcyB0aGUgZHJpdmVyCittYXkgcHJvZ3JhbSB0aGUgaGFyZHdhcmUsIGFsbG9jYXRlIHJlc291cmNlcyBhbmQgZ2VuZXJhbGx5IHByZXBhcmUgZm9yCitkYXRhIGV4Y2hhbmdlLgorRmluYWxseSB0aGUgPGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIHJldHVybnMgdGhlCitjdXJyZW50IGZvcm1hdCBwYXJhbWV0ZXJzIGFzIDxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBkb2VzLgorVmVyeSBzaW1wbGUsIGluZmxleGlibGUgZGV2aWNlcyBtYXkgZXZlbiBpZ25vcmUgYWxsIGlucHV0IGFuZCBhbHdheXMKK3JldHVybiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzLiBIb3dldmVyIGFsbCBWNEwyIGRldmljZXMgZXhjaGFuZ2luZworZGF0YSB3aXRoIHRoZSBhcHBsaWNhdGlvbiBtdXN0IGltcGxlbWVudCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBpb2N0bC4gV2hlbiB0aGUgcmVxdWVzdGVkIGJ1ZmZlcgordHlwZSBpcyBub3Qgc3VwcG9ydGVkIGRyaXZlcnMgcmV0dXJuIGFuICZFSU5WQUw7IG9uIGEKKzxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiBhdHRlbXB0LiBXaGVuIEkvTyBpcyBhbHJlYWR5IGluCitwcm9ncmVzcyBvciB0aGUgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBmb3Igb3RoZXIgcmVhc29ucyBkcml2ZXJzCityZXR1cm4gdGhlICZFQlVTWTsuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfVFJZX0ZNVDwvY29uc3RhbnQ+IGlvY3RsIGlzIGVxdWl2YWxlbnQKK3RvIDxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PiB3aXRoIG9uZSBleGNlcHRpb246IGl0IGRvZXMgbm90CitjaGFuZ2UgZHJpdmVyIHN0YXRlLiBJdCBjYW4gYWxzbyBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIG5ldmVyCityZXR1cm5pbmcgPGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPi4gVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCB0bworbmVnb3RpYXRlIHBhcmFtZXRlcnMsIHRvIGxlYXJuIGFib3V0IGhhcmR3YXJlIGxpbWl0YXRpb25zLCB3aXRob3V0CitkaXNhYmxpbmcgSS9PIG9yIHBvc3NpYmx5IHRpbWUgY29uc3VtaW5nIGhhcmR3YXJlIHByZXBhcmF0aW9ucy4KK0FsdGhvdWdoIHN0cm9uZ2x5IHJlY29tbWVuZGVkIGRyaXZlcnMgYXJlIG5vdCByZXF1aXJlZCB0byBpbXBsZW1lbnQKK3RoaXMgaW9jdGwuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWZvcm1hdCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZm9ybWF0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMzIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItYnVmLXR5cGU7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0idjRsMi1idWYtdHlwZSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnVuaW9uPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItcGl4LWZvcm1hdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpeDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRlZmluaXRpb24gb2YgYW4gaW1hZ2UgZm9ybWF0LCBzZWUgPHhyZWYKKwkJbGlua2VuZD0icGl4Zm10IiAvPiwgdXNlZCBieSB2aWRlbyBjYXB0dXJlIGFuZCBvdXRwdXQKK2RldmljZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi13aW5kb3c7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aW48L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5EZWZpbml0aW9uIG9mIGFuIG92ZXJsYWlkIGltYWdlLCBzZWUgPHhyZWYKKwkgICAgbGlua2VuZD0ib3ZlcmxheSIgLz4sIHVzZWQgYnkgdmlkZW8gb3ZlcmxheSBkZXZpY2VzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItdmJpLWZvcm1hdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnZiaTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJhdyBWQkkgY2FwdHVyZSBvciBvdXRwdXQgcGFyYW1ldGVycy4gVGhpcyBpcworZGlzY3Vzc2VkIGluIG1vcmUgZGV0YWlsIGluIDx4cmVmIGxpbmtlbmQ9InJhdy12YmkiIC8+LiBVc2VkIGJ5IHJhdyBWQkkKK2NhcHR1cmUgYW5kIG91dHB1dCBkZXZpY2VzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItc2xpY2VkLXZiaS1mb3JtYXQ7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zbGljZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TbGljZWQgVkJJIGNhcHR1cmUgb3Igb3V0cHV0IHBhcmFtZXRlcnMuIFNlZQorPHhyZWYgbGlua2VuZD0ic2xpY2VkIiAvPiBmb3IgZGV0YWlscy4gVXNlZCBieSBzbGljZWQgVkJJCitjYXB0dXJlIGFuZCBvdXRwdXQgZGV2aWNlcy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJhd19kYXRhPC9zdHJ1Y3RmaWVsZD5bMjAwXTwvZW50cnk+CisJICAgIDxlbnRyeT5QbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgZm9ybWF0cyB3aXRoIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQgaGlnaGVyLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRhdGEgZm9ybWF0IGNhbm5vdCBiZSBjaGFuZ2VkIGF0IHRoaXMKK3RpbWUsIGZvciBleGFtcGxlIGJlY2F1c2UgSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgorZmllbGQgaXMgaW52YWxpZCwgdGhlIHJlcXVlc3RlZCBidWZmZXIgdHlwZSBub3Qgc3VwcG9ydGVkLCBvcgorPGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD4gd2FzIGNhbGxlZCBhbmQgaXMgbm90CitzdXBwb3J0ZWQgd2l0aCB0aGlzIGJ1ZmZlciB0eXBlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYyZDcyMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZnJlcXVlbmN5LnhtbApAQCAtMCwwICsxLDE0NSBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1mcmVxdWVuY3kiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19GUkVRVUVOQ1ksIFZJRElPQ19TX0ZSRVFVRU5DWTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfRlJFUVVFTkNZPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0ZSRVFVRU5DWTwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5HZXQgb3Igc2V0IHR1bmVyIG9yIG1vZHVsYXRvciByYWRpbworZnJlcXVlbmN5PC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2ZyZXF1ZW5jeQorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfZnJlcXVlbmN5CisqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfRlJFUVVFTkNZLCBWSURJT0NfU19GUkVRVUVOQ1k8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIGdldCB0aGUgY3VycmVudCB0dW5lciBvciBtb2R1bGF0b3IgcmFkaW8gZnJlcXVlbmN5CithcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhCismdjRsMi1mcmVxdWVuY3k7IHRvIHRoZSByZXNwZWN0aXZlIHR1bmVyIG9yIG1vZHVsYXRvciBudW1iZXIgKG9ubHkKK2lucHV0IGRldmljZXMgaGF2ZSB0dW5lcnMsIG9ubHkgb3V0cHV0IGRldmljZXMgaGF2ZSBtb2R1bGF0b3JzKSwgemVybworb3V0IHRoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfR19GUkVRVUVOQ1k8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIFRoZSBkcml2ZXIgc3RvcmVzIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5mcmVxdWVuY3k8L3N0cnVjdGZpZWxkPiBmaWVsZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBjaGFuZ2UgdGhlIGN1cnJlbnQgdHVuZXIgb3IgbW9kdWxhdG9yIHJhZGlvIGZyZXF1ZW5jeQorYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+LAorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD5mcmVxdWVuY3k8L3N0cnVjdGZpZWxkPiBmaWVsZHMsIGFuZCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEgJnY0bDItZnJlcXVlbmN5OyBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfU19GUkVRVUVOQ1k8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIFdoZW4gdGhlIHJlcXVlc3RlZCBmcmVxdWVuY3kgaXMgbm90IHBvc3NpYmxlIHRoZQorZHJpdmVyIGFzc3VtZXMgdGhlIGNsb3Nlc3QgcG9zc2libGUgdmFsdWUuIEhvd2V2ZXIKKzxjb25zdGFudD5WSURJT0NfU19GUkVRVUVOQ1k8L2NvbnN0YW50PiBpcyBhIHdyaXRlLW9ubHkgaW9jdGwsIGl0IGRvZXMKK25vdCByZXR1cm4gdGhlIGFjdHVhbCBuZXcgZnJlcXVlbmN5LjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1mcmVxdWVuY3kiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2ZyZXF1ZW5jeTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR1bmVyPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIG9yIG1vZHVsYXRvciBpbmRleCBudW1iZXIuIFRoaXMgaXMgdGhlCitzYW1lIHZhbHVlIGFzIGluIHRoZSAmdjRsMi1pbnB1dDsgPHN0cnVjdGZpZWxkPnR1bmVyPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIGFuZCB0aGUgJnY0bDItdHVuZXI7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkLCBvcgordGhlICZ2NGwyLW91dHB1dDsgPHN0cnVjdGZpZWxkPm1vZHVsYXRvcjwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCB0aGUKKyZ2NGwyLW1vZHVsYXRvcjsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLXR1bmVyLXR5cGU7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIHR5cGUuIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUgYXMgaW4gdGhlCismdjRsMi10dW5lcjsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZC4gVGhlIGZpZWxkIGlzIG5vdAorYXBwbGljYWJsZSB0byBtb2R1bGF0b3JzLCAmaWU7IGlnbm9yZWQgYnkgZHJpdmVycy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmZyZXF1ZW5jeTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR1bmluZyBmcmVxdWVuY3kgaW4gdW5pdHMgb2YgNjIuNSBrSHosIG9yIGlmIHRoZQorJnY0bDItdHVuZXI7IG9yICZ2NGwyLW1vZHVsYXRvcjsgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdGllczwvc3RydWN0ZmllbGQ+IGZsYWcKKzxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9MT1c8L2NvbnN0YW50PiBpcyBzZXQsIGluIHVuaXRzIG9mIDYyLjUKK0h6LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls4XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCisJICAgIGFwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPnR1bmVyPC9zdHJ1Y3RmaWVsZD4gaW5kZXggaXMgb3V0IG9mCitib3VuZHMgb3IgdGhlIHZhbHVlIGluIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzCit3cm9uZy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1pbnB1dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWlucHV0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDA3NmU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1pbnB1dC54bWwKQEAgLTAsMCArMSwxMDAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctaW5wdXQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19JTlBVVCwgVklESU9DX1NfSU5QVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0lOUFVUPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0lOUFVUPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlF1ZXJ5IG9yIHNlbGVjdCB0aGUgY3VycmVudCB2aWRlbyBpbnB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0lOUFVULCBWSURJT0NfU19JTlBVVDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGN1cnJlbnQgdmlkZW8gaW5wdXQgYXBwbGljYXRpb25zIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfSU5QVVQ8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyCit3aGVyZSB0aGUgZHJpdmVyIHN0b3JlcyB0aGUgbnVtYmVyIG9mIHRoZSBpbnB1dCwgYXMgaW4gdGhlCismdjRsMi1pbnB1dDsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFRoaXMgaW9jdGwgd2lsbAorZmFpbCBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIHZpZGVvIGlucHV0cywgcmV0dXJuaW5nCis8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPi48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBzZWxlY3QgYSB2aWRlbyBpbnB1dCBhcHBsaWNhdGlvbnMgc3RvcmUgdGhlIG51bWJlciBvZiB0aGUKK2Rlc2lyZWQgaW5wdXQgaW4gYW4gaW50ZWdlciBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19JTlBVVDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK2ludGVnZXIuIFNpZGUgZWZmZWN0cyBhcmUgcG9zc2libGUuIEZvciBleGFtcGxlIGlucHV0cyBtYXkgc3VwcG9ydAorZGlmZmVyZW50IHZpZGVvIHN0YW5kYXJkcywgc28gdGhlIGRyaXZlciBtYXkgaW1wbGljaXRseSBzd2l0Y2ggdGhlCitjdXJyZW50IHN0YW5kYXJkLiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHNlbGVjdCBhbiBpbnB1dCBiZWZvcmUKK3F1ZXJ5aW5nIG9yIG5lZ290aWF0aW5nIGFueSBvdGhlciBwYXJhbWV0ZXJzLjwvcGFyYT4KKworICAgIDxwYXJhPkluZm9ybWF0aW9uIGFib3V0IHZpZGVvIGlucHV0cyBpcyBhdmFpbGFibGUgdXNpbmcgdGhlCismVklESU9DLUVOVU1JTlBVVDsgaW9jdGwuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIG51bWJlciBvZiB0aGUgdmlkZW8gaW5wdXQgaXMgb3V0IG9mIGJvdW5kcywgb3IKK3RoZXJlIGFyZSBubyB2aWRlbyBpbnB1dHMgYXQgYWxsIGFuZCB0aGlzIGlvY3RsIGlzIG5vdAorc3VwcG9ydGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+SS9PIGlzIGluIHByb2dyZXNzLCB0aGUgaW5wdXQgY2Fubm90IGJlCitzd2l0Y2hlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1qcGVnY29tcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWpwZWdjb21wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzM5NGIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1qcGVnY29tcC54bWwKQEAgLTAsMCArMSwxODAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctanBlZ2NvbXAiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19KUEVHQ09NUCwgVklESU9DX1NfSlBFR0NPTVA8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0pQRUdDT01QPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0pQRUdDT01QPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPjwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52NGwyX2pwZWdjb21wcmVzc2lvbiAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfSlBFR0NPTVAsIFZJRElPQ19TX0pQRUdDT01QPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5bdG8gZG9dPC9wYXJhPgorCisgICAgPHBhcmE+Um9uYWxkIEJ1bHRqZSBlbGFib3JhdGVzOjwvcGFyYT4KKworICAgIDwhLS0gU2VlIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbSBvbiAxNiBPY3QgMjAwMiwgc3ViamVjdAorIlJlOiBbVjRMXSBSZTogdjRsMiBhcGkgLyBab3JhbiB2NGwyX2pwZWdjb21wcmVzc2lvbiIgLS0+CisKKyAgICA8cGFyYT5BUFAgaXMgc29tZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbmZvcm1hdGlvbi4gVGhlCithcHBsaWNhdGlvbiBjYW4gc2V0IGl0IGl0c2VsZiwgYW5kIGl0J2xsIGJlIHN0b3JlZCBpbiB0aGUgSlBFRy1lbmNvZGVkCitmaWVsZHMgKGVnOyBpbnRlcmxhY2luZyBpbmZvcm1hdGlvbiBmb3IgaW4gYW4gQVZJIG9yIHNvKS4gQ09NIGlzIHRoZQorc2FtZSwgYnV0IGl0J3MgY29tbWVudHMsIGxpa2UgJ2VuY29kZWQgYnkgbWUnIG9yIHNvLjwvcGFyYT4KKworICAgIDxwYXJhPmpwZWdfbWFya2VycyBkZXNjcmliZXMgd2hldGhlciB0aGUgaHVmZm1hbiB0YWJsZXMsCitxdWFudGl6YXRpb24gdGFibGVzIGFuZCB0aGUgcmVzdGFydCBpbnRlcnZhbCBpbmZvcm1hdGlvbiAoYWxsCitKUEVHLXNwZWNpZmljIHN0dWZmKSBzaG91bGQgYmUgc3RvcmVkIGluIHRoZSBKUEVHLWVuY29kZWQgZmllbGRzLgorVGhlc2UgZGVmaW5lIGhvdyB0aGUgSlBFRyBmaWVsZCBpcyBlbmNvZGVkLiBJZiB5b3Ugb21pdCB0aGVtLAorYXBwbGljYXRpb25zIGFzc3VtZSB5b3UndmUgdXNlZCBzdGFuZGFyZCBlbmNvZGluZy4gWW91IHVzdWFsbHkgZG8gd2FudAordG8gYWRkIHRoZW0uPC9wYXJhPgorCisgICAgPCEtLSBOQiBWSURJT0NfU19KUEVHQ09NUCBpcyB3L28uIC0tPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWpwZWdjb21wcmVzc2lvbiI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfanBlZ2NvbXByZXNzaW9uPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5pbnQ8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnF1YWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+aW50PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5BUFBuPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PmludDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+QVBQX2xlbjwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5jaGFyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5BUFBfZGF0YTwvc3RydWN0ZmllbGQ+WzYwXTwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+aW50PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5DT01fbGVuPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PmNoYXI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPkNPTV9kYXRhPC9zdHJ1Y3RmaWVsZD5bNjBdPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+anBlZ19tYXJrZXJzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2VlIDx4cmVmIGxpbmtlbmQ9ImpwZWctbWFya2VycyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJqcGVnLW1hcmtlcnMiPgorICAgICAgPHRpdGxlPkpQRUcgTWFya2VycyBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9KUEVHX01BUktFUl9ESFQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4oMSZsdDsmbHQ7Myk8L2VudHJ5PgorCSAgICA8ZW50cnk+RGVmaW5lIEh1ZmZtYW4gVGFibGVzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0pQRUdfTUFSS0VSX0RRVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PigxJmx0OyZsdDs0KTwvZW50cnk+CisJICAgIDxlbnRyeT5EZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlczwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9KUEVHX01BUktFUl9EUkk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4oMSZsdDsmbHQ7NSk8L2VudHJ5PgorCSAgICA8ZW50cnk+RGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWw8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSlBFR19NQVJLRVJfQ09NPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+KDEmbHQ7Jmx0OzYpPC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbW1lbnQgc2VnbWVudDwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9KUEVHX01BUktFUl9BUFA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4oMSZsdDsmbHQ7Nyk8L2VudHJ5PgorCSAgICA8ZW50cnk+QXBwIHNlZ21lbnQsIGRyaXZlciB3aWxsIGFsd2F5cyB1c2UgQVBQMDwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1tb2R1bGF0b3IueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1tb2R1bGF0b3IueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Y2U2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLW1vZHVsYXRvci54bWwKQEAgLTAsMCArMSwyNDYgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctbW9kdWxhdG9yIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0dfTU9EVUxBVE9SLCBWSURJT0NfU19NT0RVTEFUT1I8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX01PRFVMQVRPUjwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19NT0RVTEFUT1I8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R2V0IG9yIHNldCBtb2R1bGF0b3IgYXR0cmlidXRlczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9tb2R1bGF0b3IKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmNvbnN0IHN0cnVjdCB2NGwyX21vZHVsYXRvcgorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX01PRFVMQVRPUiwgVklESU9DX1NfTU9EVUxBVE9SPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgYXR0cmlidXRlcyBvZiBhIG1vZHVsYXRvciBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZQordGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCB6ZXJvIG91dCB0aGUKKzxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGFycmF5IG9mIGEgJnY0bDItbW9kdWxhdG9yOyBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfR19NT0RVTEFUT1I8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlcgordG8gdGhpcyBzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yIHJldHVybiBhbgorJkVJTlZBTDsgd2hlbiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gVG8gZW51bWVyYXRlIGFsbCBtb2R1bGF0b3JzCithcHBsaWNhdGlvbnMgc2hhbGwgYmVnaW4gYXQgaW5kZXggemVybywgaW5jcmVtZW50aW5nIGJ5IG9uZSB1bnRpbCB0aGUKK2RyaXZlciByZXR1cm5zIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDxwYXJhPk1vZHVsYXRvcnMgaGF2ZSB0d28gd3JpdGFibGUgcHJvcGVydGllcywgYW4gYXVkaW8KK21vZHVsYXRpb24gc2V0IGFuZCB0aGUgcmFkaW8gZnJlcXVlbmN5LiBUbyBjaGFuZ2UgdGhlIG1vZHVsYXRlZCBhdWRpbworc3VicHJvZ3JhbXMsIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXgKKzwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+dHhzdWJjaGFuczwvc3RydWN0ZmllbGQ+IGZpZWxkcyBhbmQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfU19NT0RVTEFUT1I8L2NvbnN0YW50PiBpb2N0bC4gRHJpdmVycyBtYXkgY2hvb3NlIGEKK2RpZmZlcmVudCBhdWRpbyBtb2R1bGF0aW9uIGlmIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBzYXRpc2ZpZWQuIEhvd2V2ZXIKK3RoaXMgaXMgYSB3cml0ZS1vbmx5IGlvY3RsLCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGFjdHVhbCBhdWRpbworbW9kdWxhdGlvbiBzZWxlY3RlZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBjaGFuZ2UgdGhlIHJhZGlvIGZyZXF1ZW5jeSB0aGUgJlZJRElPQy1TLUZSRVFVRU5DWTsgaW9jdGwKK2lzIGF2YWlsYWJsZS48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItbW9kdWxhdG9yIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9tb2R1bGF0b3I8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklkZW50aWZpZXMgdGhlIG1vZHVsYXRvciwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgbW9kdWxhdG9yLCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcuIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vZHVsYXRvciBjYXBhYmlsaXR5IGZsYWdzLiBObyBmbGFncyBhcmUgZGVmaW5lZAorZm9yIHRoaXMgZmllbGQsIHRoZSB0dW5lciBmbGFncyBpbiAmdjRsMi10dW5lcjsKK2FyZSB1c2VkIGFjY29yZGluZ2x5LiBUaGUgYXVkaW8gZmxhZ3MgaW5kaWNhdGUgdGhlIGFiaWxpdHkKK3RvIGVuY29kZSBhdWRpbyBzdWJwcm9ncmFtcy4gVGhleSB3aWxsIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgorY2hhbmdlIGZvciBleGFtcGxlIHdpdGggdGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yYW5nZWxvdzwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBsb3dlc3QgdHVuYWJsZSBmcmVxdWVuY3kgaW4gdW5pdHMgb2YgNjIuNQorS0h6LCBvciBpZiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPiBmbGFnCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD4gaXMgc2V0LCBpbiB1bml0cyBvZiA2Mi41CitIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJhbmdlaGlnaDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBoaWdoZXN0IHR1bmFibGUgZnJlcXVlbmN5IGluIHVuaXRzIG9mIDYyLjUKK0tIeiwgb3IgaWYgdGhlIDxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gZmxhZworPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX0xPVzwvY29uc3RhbnQ+IGlzIHNldCwgaW4gdW5pdHMgb2YgNjIuNQorSHouPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD50eHN1YmNoYW5zPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2l0aCB0aGlzIGZpZWxkIGFwcGxpY2F0aW9ucyBjYW4gZGV0ZXJtaW5lIGhvdworYXVkaW8gc3ViLWNhcnJpZXJzIHNoYWxsIGJlIG1vZHVsYXRlZC4gSXQgY29udGFpbnMgYSBzZXQgb2YgZmxhZ3MgYXMKK2RlZmluZWQgaW4gPHhyZWYgbGlua2VuZD0ibW9kdWxhdG9yLXR4c3ViY2hhbnMiIC8+LiBOb3RlIHRoZSB0dW5lcgorPHN0cnVjdGZpZWxkPnJ4c3ViY2hhbnM8L3N0cnVjdGZpZWxkPiBmbGFncyBhcmUgcmV1c2VkLCBidXQgdGhlCitzZW1hbnRpY3MgYXJlIGRpZmZlcmVudC4gVmlkZW8gb3V0cHV0IGRldmljZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhbgorYW5hbG9nIG9yIFBDTSBhdWRpbyBpbnB1dCB3aXRoIDEtMyBjaGFubmVscy4gVGhlCis8c3RydWN0ZmllbGQ+dHhzdWJjaGFuczwvc3RydWN0ZmllbGQ+IGZsYWdzIHNlbGVjdCBvbmUgb3IgbW9yZQorY2hhbm5lbHMgZm9yIG1vZHVsYXRpb24sIHRvZ2V0aGVyIHdpdGggc29tZSBhdWRpbyBzdWJwcm9ncmFtCitpbmRpY2F0b3IsIGZvciBleGFtcGxlIGEgc3RlcmVvIHBpbG90IHRvbmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9Im1vZHVsYXRvci10eHN1YmNoYW5zIj4KKyAgICAgIDx0aXRsZT5Nb2R1bGF0b3IgQXVkaW8gVHJhbnNtaXNzaW9uIEZsYWdzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9NT05PPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vZHVsYXRlIGNoYW5uZWwgMSBhcyBtb25vIGF1ZGlvLCB3aGVuIHRoZSBpbnB1dAoraGFzIG1vcmUgY2hhbm5lbHMsIGEgZG93bi1taXggb2YgY2hhbm5lbCAxIGFuZCAyLiBUaGlzIGZsYWcgZG9lcyBub3QKK2NvbWJpbmUgd2l0aCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU1RFUkVPPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9MQU5HMTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU1RFUkVPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vZHVsYXRlIGNoYW5uZWwgMSBhbmQgMiBhcyBsZWZ0IGFuZCByaWdodAorY2hhbm5lbCBvZiBhIHN0ZXJlbyBhdWRpbyBzaWduYWwuIFdoZW4gdGhlIGlucHV0IGhhcyBvbmx5IG9uZSBjaGFubmVsCitvciB0d28gY2hhbm5lbHMgYW5kIDxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TQVA8L2NvbnN0YW50PiBpcyBhbHNvCitzZXQsIGNoYW5uZWwgMSBpcyBlbmNvZGVkIGFzIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWwuIFRoaXMgZmxhZyBkb2VzCitub3QgY29tYmluZSB3aXRoIDxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9NT05PPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9MQU5HMTwvY29uc3RhbnQ+LiBXaGVuIHRoZSBkcml2ZXIgZG9lcyBub3QKK3N1cHBvcnQgc3RlcmVvIGF1ZGlvIGl0IHNoYWxsIGZhbGwgYmFjayB0byBtb25vLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTEFORzE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDg8L2VudHJ5PgorCSAgICA8ZW50cnk+TW9kdWxhdGUgY2hhbm5lbCAxIGFuZCAyIGFzIHByaW1hcnkgYW5kIHNlY29uZGFyeQorbGFuZ3VhZ2Ugb2YgYSBiaWxpbmd1YWwgYXVkaW8gc2lnbmFsLiBXaGVuIHRoZSBpbnB1dCBoYXMgb25seSBvbmUKK2NoYW5uZWwgaXQgaXMgdXNlZCBmb3IgYm90aCBsYW5ndWFnZXMuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBlbmNvZGUKK3RoZSBwcmltYXJ5IG9yIHNlY29uZGFyeSBsYW5ndWFnZSBvbmx5LiBUaGlzIGZsYWcgZG9lcyBub3QgY29tYmluZQord2l0aCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTU9OTzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX1NURVJFTzwvY29uc3RhbnQ+IG9yCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD4uIElmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdAorc3VwcG9ydCB0aGUgcmVzcGVjdGl2ZSBhdWRpbyBtYXRyaXgsIG9yIHRoZSBjdXJyZW50IHZpZGVvIHN0YW5kYXJkCitkb2VzIG5vdCBwZXJtaXQgYmlsaW5ndWFsIGF1ZGlvIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX01PRFVMQVRPUjwvY29uc3RhbnQ+IGlvY3RsIHNoYWxsIHJldHVybiBhbiAmRUlOVkFMOworYW5kIHRoZSBkcml2ZXIgc2hhbGwgZmFsbCBiYWNrIHRvIG1vbm8gb3Igc3RlcmVvIG1vZGUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9MQU5HMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwNDwvZW50cnk+CisJICAgIDxlbnRyeT5TYW1lIGVmZmVjdCBhcworPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX1NBUDwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gY29tYmluZWQgd2l0aCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfTU9OTworPC9jb25zdGFudD4gdGhlIGZpcnN0IGNoYW5uZWwgaXMgZW5jb2RlZCBhcyBtb25vIGF1ZGlvLCB0aGUgbGFzdAorY2hhbm5lbCBhcyBTZWNvbmQgQXVkaW8gUHJvZ3JhbS4gV2hlbiB0aGUgaW5wdXQgaGFzIG9ubHkgb25lIGNoYW5uZWwKK2l0IGlzIHVzZWQgZm9yIGJvdGggYXVkaW8gdHJhY2tzLiBXaGVuIHRoZSBpbnB1dCBoYXMgdGhyZWUgY2hhbm5lbHMKK3RoZSBtb25vIHRyYWNrIGlzIGEgZG93bi1taXggb2YgY2hhbm5lbCAxIGFuZCAyLiBXaGVuIGNvbWJpbmVkIHdpdGgKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TVEVSRU88L2NvbnN0YW50PiBjaGFubmVsIDEgYW5kIDIgYXJlCitlbmNvZGVkIGFzIGxlZnQgYW5kIHJpZ2h0IHN0ZXJlbyBhdWRpbywgY2hhbm5lbCAzIGFzIFNlY29uZCBBdWRpbworUHJvZ3JhbS4gV2hlbiB0aGUgaW5wdXQgaGFzIG9ubHkgdHdvIGNoYW5uZWxzLCB0aGUgZmlyc3QgaXMgZW5jb2RlZCBhcworbGVmdCBhbmQgcmlnaHQgY2hhbm5lbCBhbmQgdGhlIHNlY29uZCBhcyBTQVAuIFdoZW4gdGhlIGlucHV0IGhhcyBvbmx5CitvbmUgY2hhbm5lbCBpdCBpcyB1c2VkIGZvciBhbGwgYXVkaW8gdHJhY2tzLiBJdCBpcyBub3QgcG9zc2libGUgdG8KK2VuY29kZSBhIFNlY29uZCBBdWRpbyBQcm9ncmFtIG9ubHkuIFRoaXMgZmxhZyBtdXN0IGNvbWJpbmUgd2l0aAorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX01PTk88L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX1NURVJFTzwvY29uc3RhbnQ+LiBJZiB0aGUgaGFyZHdhcmUgZG9lcyBub3QKK3N1cHBvcnQgdGhlIHJlc3BlY3RpdmUgYXVkaW8gbWF0cml4LCBvciB0aGUgY3VycmVudCB2aWRlbyBzdGFuZGFyZAorZG9lcyBub3QgcGVybWl0IFNBUCB0aGUgPGNvbnN0YW50PlZJRElPQ19TX01PRFVMQVRPUjwvY29uc3RhbnQ+IGlvY3RsCitzaGFsbCByZXR1cm4gYW4gJkVJTlZBTDsgYW5kIGRyaXZlciBzaGFsbCBmYWxsIGJhY2sgdG8gbW9ubyBvciBzdGVyZW8KK21vZGUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9SRFM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMTA8L2VudHJ5PgorCSAgICA8ZW50cnk+RW5hYmxlIHRoZSBSRFMgZW5jb2RlciBmb3IgYSByYWRpbyBGTSB0cmFuc21pdHRlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItbW9kdWxhdG9yOworPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1vdXRwdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1vdXRwdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYThjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLW91dHB1dC54bWwKQEAgLTAsMCArMSwxMDAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctb3V0cHV0Ij4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0dfT1VUUFVULCBWSURJT0NfU19PVVRQVVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX09VVFBVVDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19PVVRQVVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgb3Igc2VsZWN0IHRoZSBjdXJyZW50IHZpZGVvIG91dHB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX09VVFBVVCwgVklESU9DX1NfT1VUUFVUPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCB2aWRlbyBvdXRwdXQgYXBwbGljYXRpb25zIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX0dfT1VUUFVUPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlcgord2hlcmUgdGhlIGRyaXZlciBzdG9yZXMgdGhlIG51bWJlciBvZiB0aGUgb3V0cHV0LCBhcyBpbiB0aGUKKyZ2NGwyLW91dHB1dDsgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFRoaXMgaW9jdGwKK3dpbGwgZmFpbCBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIHZpZGVvIG91dHB1dHMsIHJldHVybmluZyB0aGUKKyZFSU5WQUw7LjwvcGFyYT4KKworICAgIDxwYXJhPlRvIHNlbGVjdCBhIHZpZGVvIG91dHB1dCBhcHBsaWNhdGlvbnMgc3RvcmUgdGhlIG51bWJlciBvZiB0aGUKK2Rlc2lyZWQgb3V0cHV0IGluIGFuIGludGVnZXIgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX1NfT1VUUFVUPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBpbnRlZ2VyLgorU2lkZSBlZmZlY3RzIGFyZSBwb3NzaWJsZS4gRm9yIGV4YW1wbGUgb3V0cHV0cyBtYXkgc3VwcG9ydCBkaWZmZXJlbnQKK3ZpZGVvIHN0YW5kYXJkcywgc28gdGhlIGRyaXZlciBtYXkgaW1wbGljaXRseSBzd2l0Y2ggdGhlIGN1cnJlbnQKK3N0YW5kYXJkLiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHNlbGVjdCBhbiBvdXRwdXQgYmVmb3JlIHF1ZXJ5aW5nIG9yCituZWdvdGlhdGluZyBhbnkgb3RoZXIgcGFyYW1ldGVycy48L3BhcmE+CisKKyAgICA8cGFyYT5JbmZvcm1hdGlvbiBhYm91dCB2aWRlbyBvdXRwdXRzIGlzIGF2YWlsYWJsZSB1c2luZyB0aGUKKyZWSURJT0MtRU5VTU9VVFBVVDsgaW9jdGwuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIG51bWJlciBvZiB0aGUgdmlkZW8gb3V0cHV0IGlzIG91dCBvZiBib3VuZHMsIG9yCit0aGVyZSBhcmUgbm8gdmlkZW8gb3V0cHV0cyBhdCBhbGwgYW5kIHRoaXMgaW9jdGwgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JL08gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBvdXRwdXQgY2Fubm90IGJlCitzd2l0Y2hlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1wYXJtLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcGFybS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzMzJkMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcGFybS54bWwKQEAgLTAsMCArMSwzMzIgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctcGFybSI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX1BBUk0sIFZJRElPQ19TX1BBUk08L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1BBUk08L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfUEFSTTwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5HZXQgb3Igc2V0IHN0cmVhbWluZyBwYXJhbWV0ZXJzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnY0bDJfc3RyZWFtcGFybSAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX0dfUEFSTSwgVklESU9DX1NfUEFSTTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQgZGV0ZXJtaW5lcyBhIG5vbWluYWwgbnVtYmVyIG9mCitmcmFtZXMgcGVyIHNlY29uZC4gSWYgbGVzcyB0aGFuIHRoaXMgbnVtYmVyIG9mIGZyYW1lcyBpcyB0byBiZQorY2FwdHVyZWQgb3Igb3V0cHV0LCBhcHBsaWNhdGlvbnMgY2FuIHJlcXVlc3QgZnJhbWUgc2tpcHBpbmcgb3IKK2R1cGxpY2F0aW5nIG9uIHRoZSBkcml2ZXIgc2lkZS4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHVzaW5nCit0aGUgPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IG9yIDxmdW5jdGlvbj53cml0ZSgpPC9mdW5jdGlvbj4sIHdoaWNoCithcmUgbm90IGF1Z21lbnRlZCBieSB0aW1lc3RhbXBzIG9yIHNlcXVlbmNlIGNvdW50ZXJzLCBhbmQgdG8gYXZvaWQKK3VubmVjY2Vzc2FyeSBkYXRhIGNvcHlpbmcuPC9wYXJhPgorCisgICAgPHBhcmE+RnVydGhlciB0aGVzZSBpb2N0bHMgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKK2J1ZmZlcnMgdXNlZCBpbnRlcm5hbGx5IGJ5IGEgZHJpdmVyIGluIHJlYWQvd3JpdGUgbW9kZS4gRm9yCitpbXBsaWNhdGlvbnMgc2VlIHRoZSBzZWN0aW9uIGRpc2N1c3NpbmcgdGhlICZmdW5jLXJlYWQ7CitmdW5jdGlvbi48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBnZXQgYW5kIHNldCB0aGUgc3RyZWFtaW5nIHBhcmFtZXRlcnMgYXBwbGljYXRpb25zIGNhbGwKK3RoZSA8Y29uc3RhbnQ+VklESU9DX0dfUEFSTTwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlZJRElPQ19TX1BBUk08L2NvbnN0YW50PiBpb2N0bCwgcmVzcGVjdGl2ZWx5LiBUaGV5IHRha2UgYQorcG9pbnRlciB0byBhIHN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3N0cmVhbXBhcm08L3N0cnVjdG5hbWU+IHdoaWNoCitjb250YWlucyBhIHVuaW9uIGhvbGRpbmcgc2VwYXJhdGUgcGFyYW1ldGVycyBmb3IgaW5wdXQgYW5kIG91dHB1dAorZGV2aWNlcy48L3BhcmE+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItc3RyZWFtcGFybSI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfc3RyZWFtcGFybTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3MtdXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgYnVmZmVyIChzdHJlYW0pIHR5cGUsIHNhbWUgYXMgJnY0bDItZm9ybWF0OworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+dW5pb248L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBhcm08L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi1jYXB0dXJlcGFybTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcHR1cmU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5QYXJhbWV0ZXJzIGZvciBjYXB0dXJlIGRldmljZXMsIHVzZWQgd2hlbgorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBpcworPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+JnY0bDItb3V0cHV0cGFybTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm91dHB1dDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBhcmFtZXRlcnMgZm9yIG91dHB1dCBkZXZpY2VzLCB1c2VkIHdoZW4KKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmF3X2RhdGE8L3N0cnVjdGZpZWxkPlsyMDBdPC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgcGxhY2UgaG9sZGVyIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgY3VzdG9tCisoZHJpdmVyIGRlZmluZWQpIGJ1ZmZlciB0eXBlcyA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kCitoaWdoZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNhcHR1cmVwYXJtIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9jYXB0dXJlcGFybTwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5TZWUgPHhyZWYgbGlua2VuZD0icGFybS1jYXBzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcHR1cmVtb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2V0IGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucywgc2VlIDx4cmVmIGxpbmtlbmQ9InBhcm0tZmxhZ3MiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVwZXJmcmFtZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPlRoaXMgaXMgaXMgdGhlIGRlc2lyZWQgcGVyaW9kIGJldHdlZW4KK3N1Y2Nlc3NpdmUgZnJhbWVzIGNhcHR1cmVkIGJ5IHRoZSBkcml2ZXIsIGluIHNlY29uZHMuIFRoZQorZmllbGQgaXMgaW50ZW5kZWQgdG8gc2tpcCBmcmFtZXMgb24gdGhlIGRyaXZlciBzaWRlLCBzYXZpbmcgSS9PCitiYW5kd2lkdGguPC9wYXJhPjxwYXJhPkFwcGxpY2F0aW9ucyBzdG9yZSBoZXJlIHRoZSBkZXNpcmVkIGZyYW1lCitwZXJpb2QsIGRyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgZnJhbWUgcGVyaW9kLCB3aGljaCBtdXN0IGJlIGdyZWF0ZXIKK29yIGVxdWFsIHRvIHRoZSBub21pbmFsIGZyYW1lIHBlcmlvZCBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvCitzdGFuZGFyZCAoJnY0bDItc3RhbmRhcmQ7IDxzdHJ1Y3RmaWVsZD5mcmFtZXBlcmlvZDwvc3RydWN0ZmllbGQ+CitmaWVsZCkuIENoYW5naW5nIHRoZSB2aWRlbyBzdGFuZGFyZCAoYWxzbyBpbXBsaWNpdGx5IGJ5IHN3aXRjaGluZyB0aGUKK3ZpZGVvIGlucHV0KSBtYXkgcmVzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdGhlIG5vbWluYWwgZnJhbWUgcGVyaW9kLiBUbworcmVzZXQgbWFudWFsbHkgYXBwbGljYXRpb25zIGNhbiBqdXN0IHNldCB0aGlzIGZpZWxkIHRvCit6ZXJvLjwvcGFyYT48cGFyYT5Ecml2ZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbiBvbmx5IHdoZW4gdGhleSBzZXQgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVElNRVBFUkZSQU1FPC9jb25zdGFudD4gZmxhZyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD4gZmllbGQuPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZXh0ZW5kZWRtb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+Q3VzdG9tIChkcml2ZXIgc3BlY2lmaWMpIHN0cmVhbWluZyBwYXJhbWV0ZXJzLiBXaGVuCit1bnVzZWQsIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uCitBcHBsaWNhdGlvbnMgdXNpbmcgdGhpcyBmaWVsZCBzaG91bGQgY2hlY2sgdGhlIGRyaXZlciBuYW1lIGFuZAordmVyc2lvbiwgc2VlIDx4cmVmIGxpbmtlbmQ9InF1ZXJ5Y2FwIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlYWRidWZmZXJzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+QXBwbGljYXRpb25zIHNldCB0aGlzIGZpZWxkIHRvIHRoZSBkZXNpcmVkIG51bWJlcgorb2YgYnVmZmVycyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGRyaXZlciBpbiAmZnVuYy1yZWFkOyBtb2RlLiBEcml2ZXJzCityZXR1cm4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYnVmZmVycy4gV2hlbiBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0cyB6ZXJvCitidWZmZXJzLCBkcml2ZXJzIHNob3VsZCBqdXN0IHJldHVybiB0aGUgY3VycmVudCBzZXR0aW5nIHJhdGhlciB0aGFuCit0aGUgbWluaW11bSBvciBhbiBlcnJvciBjb2RlLiBGb3IgZGV0YWlscyBzZWUgPHhyZWYKKwkJbGlua2VuZD0icnciIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLW91dHB1dHBhcm0iPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX291dHB1dHBhcm08L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXR5PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2VlIDx4cmVmIGxpbmtlbmQ9InBhcm0tY2FwcyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5vdXRwdXRtb2RlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+U2V0IGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucywgc2VlIDx4cmVmCisJICAgIGxpbmtlbmQ9InBhcm0tZmxhZ3MiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1mcmFjdDs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnRpbWVwZXJmcmFtZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgaXMgdGhlIGRlc2lyZWQgcGVyaW9kIGJldHdlZW4KK3N1Y2Nlc3NpdmUgZnJhbWVzIG91dHB1dCBieSB0aGUgZHJpdmVyLCBpbiBzZWNvbmRzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlRoZSBmaWVsZCBpcyBpbnRlbmRlZCB0bworcmVwZWF0IGZyYW1lcyBvbiB0aGUgZHJpdmVyIHNpZGUgaW4gJmZ1bmMtd3JpdGU7IG1vZGUgKGluIHN0cmVhbWluZworbW9kZSB0aW1lc3RhbXBzIGNhbiBiZSB1c2VkIHRvIHRocm90dGxlIHRoZSBvdXRwdXQpLCBzYXZpbmcgSS9PCitiYW5kd2lkdGguPC9wYXJhPjxwYXJhPkFwcGxpY2F0aW9ucyBzdG9yZSBoZXJlIHRoZSBkZXNpcmVkIGZyYW1lCitwZXJpb2QsIGRyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgZnJhbWUgcGVyaW9kLCB3aGljaCBtdXN0IGJlIGdyZWF0ZXIKK29yIGVxdWFsIHRvIHRoZSBub21pbmFsIGZyYW1lIHBlcmlvZCBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IHZpZGVvCitzdGFuZGFyZCAoJnY0bDItc3RhbmRhcmQ7IDxzdHJ1Y3RmaWVsZD5mcmFtZXBlcmlvZDwvc3RydWN0ZmllbGQ+CitmaWVsZCkuIENoYW5naW5nIHRoZSB2aWRlbyBzdGFuZGFyZCAoYWxzbyBpbXBsaWNpdGx5IGJ5IHN3aXRjaGluZyB0aGUKK3ZpZGVvIG91dHB1dCkgbWF5IHJlc2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRoZSBub21pbmFsIGZyYW1lIHBlcmlvZC4gVG8KK3Jlc2V0IG1hbnVhbGx5IGFwcGxpY2F0aW9ucyBjYW4ganVzdCBzZXQgdGhpcyBmaWVsZCB0bworemVyby48L3BhcmE+PHBhcmE+RHJpdmVycyBzdXBwb3J0IHRoaXMgZnVuY3Rpb24gb25seSB3aGVuIHRoZXkgc2V0IHRoZQorPGNvbnN0YW50PlY0TDJfQ0FQX1RJTUVQRVJGUkFNRTwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmV4dGVuZGVkbW9kZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkN1c3RvbSAoZHJpdmVyIHNwZWNpZmljKSBzdHJlYW1pbmcgcGFyYW1ldGVycy4gV2hlbgordW51c2VkLCBhcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLgorQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgZmllbGQgc2hvdWxkIGNoZWNrIHRoZSBkcml2ZXIgbmFtZSBhbmQKK3ZlcnNpb24sIHNlZSA8eHJlZiBsaW5rZW5kPSJxdWVyeWNhcCIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53cml0ZWJ1ZmZlcnM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5BcHBsaWNhdGlvbnMgc2V0IHRoaXMgZmllbGQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyCitvZiBidWZmZXJzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgZHJpdmVyIGluCis8ZnVuY3Rpb24+d3JpdGUoKTwvZnVuY3Rpb24+IG1vZGUuIERyaXZlcnMgcmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mCitidWZmZXJzLiBXaGVuIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIHplcm8gYnVmZmVycywgZHJpdmVycyBzaG91bGQKK2p1c3QgcmV0dXJuIHRoZSBjdXJyZW50IHNldHRpbmcgcmF0aGVyIHRoYW4gdGhlIG1pbmltdW0gb3IgYW4gZXJyb3IKK2NvZGUuIEZvciBkZXRhaWxzIHNlZSA8eHJlZiBsaW5rZW5kPSJydyIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBhbmQKK2FwcGxpY2F0aW9ucyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InBhcm0tY2FwcyI+CisgICAgICA8dGl0bGU+U3RyZWFtaW5nIFBhcmFtZXRlcnMgQ2FwYWJpbGl0ZXM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1RJTUVQRVJGUkFNRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MTAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZnJhbWUgc2tpcHBpbmcvcmVwZWF0aW5nIGNvbnRyb2xsZWQgYnkgdGhlCis8c3RydWN0ZmllbGQ+dGltZXBlcmZyYW1lPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgc3VwcG9ydGVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0icGFybS1mbGFncyI+CisgICAgICA8dGl0bGU+Q2FwdHVyZSBQYXJhbWV0ZXJzIEZsYWdzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01PREVfSElHSFFVQUxJVFk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+SGlnaCBxdWFsaXR5IGltYWdpbmcgbW9kZS4gSGlnaCBxdWFsaXR5IG1vZGUKK2lzIGludGVuZGVkIGZvciBzdGlsbCBpbWFnaW5nIGFwcGxpY2F0aW9ucy4gVGhlIGlkZWEgaXMgdG8gZ2V0IHRoZQorYmVzdCBwb3NzaWJsZSBpbWFnZSBxdWFsaXR5IHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBkZWxpdmVyLiBJdCBpcyBub3QKK2RlZmluZWQgaG93IHRoZSBkcml2ZXIgd3JpdGVyIG1heSBhY2hpZXZlIHRoYXQ7IGl0IHdpbGwgZGVwZW5kIG9uIHRoZQoraGFyZHdhcmUgYW5kIHRoZSBpbmdlbnVpdHkgb2YgdGhlIGRyaXZlciB3cml0ZXIuIEhpZ2ggcXVhbGl0eSBtb2RlIGlzCithIGRpZmZlcmVudCBtb2RlIGZyb20gdGhlIHRoZSByZWd1bGFyIG1vdGlvbiB2aWRlbyBjYXB0dXJlIG1vZGVzLiBJbgoraGlnaCBxdWFsaXR5IG1vZGU6PGl0ZW1pemVkbGlzdD4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSBiZSBhYmxlIHRvIGNhcHR1cmUgaGlnaGVyCityZXNvbHV0aW9ucyB0aGFuIGZvciBtb3Rpb24gY2FwdHVyZS48L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSBzdXBwb3J0IGZld2VyIHBpeGVsIGZvcm1hdHMKK3RoYW4gbW90aW9uIGNhcHR1cmUgKGVnOyB0cnVlIGNvbG9yKS48L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5UaGUgZHJpdmVyIG1heSBjYXB0dXJlIGFuZCBhcml0aG1ldGljYWxseQorY29tYmluZSBtdWx0aXBsZSBzdWNjZXNzaXZlIGZpZWxkcyBvciBmcmFtZXMgdG8gcmVtb3ZlIGNvbG9yIGVkZ2UKK2FydGlmYWN0cyBhbmQgcmVkdWNlIHRoZSBub2lzZSBpbiB0aGUgdmlkZW8gZGF0YS4KKzwvcGFyYT4KKwkJICA8L2xpc3RpdGVtPgorCQkgIDxsaXN0aXRlbT4KKwkJICAgIDxwYXJhPlRoZSBkcml2ZXIgbWF5IGNhcHR1cmUgaW1hZ2VzIGluIHNsaWNlcyBsaWtlCithIHNjYW5uZXIgaW4gb3JkZXIgdG8gaGFuZGxlIGxhcmdlciBmb3JtYXQgaW1hZ2VzIHRoYW4gd291bGQgb3RoZXJ3aXNlCitiZSBwb3NzaWJsZS4gPC9wYXJhPgorCQkgIDwvbGlzdGl0ZW0+CisJCSAgPGxpc3RpdGVtPgorCQkgICAgPHBhcmE+QW4gaW1hZ2UgY2FwdHVyZSBvcGVyYXRpb24gbWF5IGJlCitzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIG1vdGlvbiBjYXB0dXJlLiA8L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5Nb3Zpbmcgb2JqZWN0cyBpbiB0aGUgaW1hZ2UgbWlnaHQgaGF2ZQorZXhjZXNzaXZlIG1vdGlvbiBibHVyLiA8L3BhcmE+CisJCSAgPC9saXN0aXRlbT4KKwkJICA8bGlzdGl0ZW0+CisJCSAgICA8cGFyYT5DYXB0dXJlIG1pZ2h0IG9ubHkgd29yayB0aHJvdWdoIHRoZQorPGZ1bmN0aW9uPnJlYWQoKTwvZnVuY3Rpb24+IGNhbGwuPC9wYXJhPgorCQkgIDwvbGlzdGl0ZW0+CisJCTwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1wcmlvcml0eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmIwMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1wcmlvcml0eS54bWwKQEAgLTAsMCArMSwxNDQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctcHJpb3JpdHkiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19QUklPUklUWSwgVklESU9DX1NfUFJJT1JJVFk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1BSSU9SSVRZPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX1BSSU9SSVRZPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlF1ZXJ5IG9yIHJlcXVlc3QgdGhlIGFjY2VzcyBwcmlvcml0eSBhc3NvY2lhdGVkIHdpdGggYQorZmlsZSBkZXNjcmlwdG9yPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmVudW0gdjRsMl9wcmlvcml0eSAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBlbnVtIHY0bDJfcHJpb3JpdHkgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX1BSSU9SSVRZLCBWSURJT0NfU19QUklPUklUWTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5Qb2ludGVyIHRvIGFuIGVudW0gdjRsMl9wcmlvcml0eSB0eXBlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgY3VycmVudCBhY2Nlc3MgcHJpb3JpdHkKK2FwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfUFJJT1JJVFk8L2NvbnN0YW50PiBpb2N0bAord2l0aCBhIHBvaW50ZXIgdG8gYW4gZW51bSB2NGwyX3ByaW9yaXR5IHZhcmlhYmxlIHdoZXJlIHRoZSBkcml2ZXIgc3RvcmVzCit0aGUgY3VycmVudCBwcmlvcml0eS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyByZXF1ZXN0IGFuIGFjY2VzcyBwcmlvcml0eSBhcHBsaWNhdGlvbnMgc3RvcmUgdGhlCitkZXNpcmVkIHByaW9yaXR5IGluIGFuIGVudW0gdjRsMl9wcmlvcml0eSB2YXJpYWJsZSBhbmQgY2FsbAorPGNvbnN0YW50PlZJRElPQ19TX1BSSU9SSVRZPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcwordmFyaWFibGUuPC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLXByaW9yaXR5Ij4KKyAgICAgIDx0aXRsZT5lbnVtIHY0bDJfcHJpb3JpdHk8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJJT1JJVFlfVU5TRVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QUklPUklUWV9CQUNLR1JPVU5EPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT5Mb3dlc3QgcHJpb3JpdHksIHVzdWFsbHkgYXBwbGljYXRpb25zIHJ1bm5pbmcgaW4KK2JhY2tncm91bmQsIGZvciBleGFtcGxlIG1vbml0b3JpbmcgVkJJIHRyYW5zbWlzc2lvbnMuIEEgcHJveHkKK2FwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdXNlciBzcGFjZSB3aWxsIGJlIG5lY2Vzc2FyeSBpZiBtdWx0aXBsZQorYXBwbGljYXRpb25zIHdhbnQgdG8gcmVhZCBmcm9tIGEgZGV2aWNlIGF0IHRoaXMgcHJpb3JpdHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUFJJT1JJVFlfREVGQVVMVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+TWVkaXVtIHByaW9yaXR5LCB1c3VhbGx5IGFwcGxpY2F0aW9ucyBzdGFydGVkIGFuZAoraW50ZXJhY3RpdmVseSBjb250cm9sbGVkIGJ5IHRoZSB1c2VyLiBGb3IgZXhhbXBsZSBUViB2aWV3ZXJzLCBUZWxldGV4dAorYnJvd3NlcnMsIG9yIGp1c3QgInBhbmVsIiBhcHBsaWNhdGlvbnMgdG8gY2hhbmdlIHRoZSBjaGFubmVsIG9yIHZpZGVvCitjb250cm9scy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBwcmlvcml0eSB1bmxlc3MgYW4gYXBwbGljYXRpb24gcmVxdWVzdHMKK2Fub3RoZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BSSU9SSVRZX1JFQ09SRDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjM8L2VudHJ5PgorCSAgICA8ZW50cnk+SGlnaGVzdCBwcmlvcml0eS4gT25seSBvbmUgZmlsZSBkZXNjcmlwdG9yIGNhbiBoYXZlCit0aGlzIHByaW9yaXR5LCBpdCBibG9ja3MgYW55IG90aGVyIGZkIGZyb20gY2hhbmdpbmcgZGV2aWNlIHByb3BlcnRpZXMuCitVc3VhbGx5IGFwcGxpY2F0aW9ucyB3aGljaCBtdXN0IG5vdCBiZSBpbnRlcnJ1cHRlZCwgbGlrZSB2aWRlbworcmVjb3JkaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgdmFsdWUgaXMgaW52YWxpZCwgb3IgdGhlCitkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhY2Nlc3MgcHJpb3JpdGllcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkFub3RoZXIgYXBwbGljYXRpb24gYWxyZWFkeSByZXF1ZXN0ZWQgaGlnaGVyCitwcmlvcml0eS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zbGljZWQtdmJpLWNhcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3MjFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zbGljZWQtdmJpLWNhcC54bWwKQEAgLTAsMCArMSwyNjQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctc2xpY2VkLXZiaS1jYXAiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19TTElDRURfVkJJX0NBUDwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgc2xpY2VkIFZCSSBjYXBhYmlsaXRpZXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBmaW5kIG91dCB3aGljaCBkYXRhIHNlcnZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgYSBzbGljZWQKK1ZCSSBjYXB0dXJlIG9yIG91dHB1dCBkZXZpY2UsIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRoZQorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLXNsaWNlZC12YmktY2FwOywKK2NsZWFyIHRoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBhbmQKK2NhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfR19TTElDRURfVkJJX0NBUDwvY29uc3RhbnQ+IGlvY3RsLiBUaGUKK2RyaXZlciBmaWxscyBpbiB0aGUgcmVtYWluaW5nIGZpZWxkcyBvciByZXR1cm5zIGFuICZFSU5WQUw7IGlmIHRoZQorc2xpY2VkIFZCSSBBUEkgaXMgdW5zdXBwb3J0ZWQgb3IgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgoraXMgaW52YWxpZC48L3BhcmE+CisKKyAgICA8cGFyYT5Ob3RlIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdhcyBhZGRlZCwKK2FuZCB0aGUgaW9jdGwgY2hhbmdlZCBmcm9tIHJlYWQtb25seSB0byB3cml0ZS1yZWFkLCBpbiBMaW51eCAyLjYuMTkuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXNsaWNlZC12YmktY2FwIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9zbGljZWRfdmJpX2NhcDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI1Ij4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjMqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMyoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSIyKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjIqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM1IiBjb2x3aWR0aD0iMioiIC8+CisJPHNwYW5zcGVjIHNwYW5uYW1lPSJoc3BhbiIgbmFtZXN0PSJjMyIgbmFtZWVuZD0iYzUiIC8+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UxNjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9zZXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkEgc2V0IG9mIGFsbCBkYXRhIHNlcnZpY2VzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4gRXF1YWwgdG8gdGhlIHVuaW9uIG9mIGFsbCBlbGVtZW50cyBvZiB0aGUKKzxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzIDwvc3RydWN0ZmllbGQ+IGFycmF5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UxNjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzJdWzI0XTwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkVhY2ggZWxlbWVudCBvZiB0aGlzIGFycmF5Citjb250YWlucyBhIHNldCBvZiBkYXRhIHNlcnZpY2VzIHRoZSBoYXJkd2FyZSBjYW4gbG9vayBmb3Igb3IgaW5zZXJ0CitpbnRvIGEgcGFydGljdWxhciBzY2FuIGxpbmUuIERhdGEgc2VydmljZXMgYXJlIGRlZmluZWQgaW4gPHhyZWYKKwkJbGlua2VuZD0idmJpLXNlcnZpY2VzIiAvPi4gQXJyYXkgaW5kaWNlcyBtYXAgdG8gSVRVLVIKK2xpbmUgbnVtYmVycyAoc2VlIGFsc28gPHhyZWYKKwkJbGlua2VuZD0idmJpLTUyNSIgLz4gYW5kIDx4cmVmCitsaW5rZW5kPSJ2YmktNjI1IiAvPikgYXMgZm9sbG93czo8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5FbGVtZW50PC9lbnRyeT4KKwkgICAgPGVudHJ5PjUyNSBsaW5lIHN5c3RlbXM8L2VudHJ5PgorCSAgICA8ZW50cnk+NjI1IGxpbmUgc3lzdGVtczwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMV08L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4xPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNlcnZpY2VfbGluZXM8L3N0cnVjdGZpZWxkPlswXVsyM108L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MjM8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MjM8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzFdPC9lbnRyeT4KKwkgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjI2NDwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4zMTQ8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzIzXTwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4yODY8L2VudHJ5PgorCSAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+MzM2PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+VGhlIG51bWJlciBvZiBWQkkgbGluZXMgdGhlCitoYXJkd2FyZSBjYW4gY2FwdHVyZSBvciBvdXRwdXQgcGVyIGZyYW1lLCBvciB0aGUgbnVtYmVyIG9mIHNlcnZpY2VzIGl0CitjYW4gaWRlbnRpZnkgb24gYSBnaXZlbiBsaW5lIG1heSBiZSBsaW1pdGVkLiBGb3IgZXhhbXBsZSBvbiBQQUwgbGluZQorMTYgdGhlIGhhcmR3YXJlIG1heSBiZSBhYmxlIHRvIGxvb2sgZm9yIGEgVlBTIG9yIFRlbGV0ZXh0IHNpZ25hbCwgYnV0Citub3QgYm90aCBhdCB0aGUgc2FtZSB0aW1lLiBBcHBsaWNhdGlvbnMgY2FuIGxlYXJuIGFib3V0IHRoZXNlIGxpbWl0cwordXNpbmcgdGhlICZWSURJT0MtUy1GTVQ7IGlvY3RsIGFzIGRlc2NyaWJlZCBpbiA8eHJlZgorCQlsaW5rZW5kPSJzbGljZWQiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkRyaXZlcnMgbXVzdCBzZXQKKzxzdHJ1Y3RmaWVsZD5zZXJ2aWNlX2xpbmVzPC9zdHJ1Y3RmaWVsZD5bMF1bMF0gYW5kCis8c3RydWN0ZmllbGQ+c2VydmljZV9saW5lczwvc3RydWN0ZmllbGQ+WzFdWzBdIHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtLCBzZWUgPHhyZWYKKwkJICBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIiAvPi4gU2hvdWxkIGJlCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQ8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bM108L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5UaGlzIGFycmF5IGlzIHJlc2VydmVkIGZvciBmdXR1cmUKK2V4dGVuc2lvbnMuIEFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCBpdCB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDwhLS0gU2VlIGFsc28gZGV2LXNsaWNlZC12Ymkuc2dtbCAtLT4KKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InZiaS1zZXJ2aWNlcyI+CisgICAgICA8dGl0bGU+U2xpY2VkIFZCSSBzZXJ2aWNlczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjUiPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMxIiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzIiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImM0IiBjb2x3aWR0aD0iMioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzUiIGNvbHdpZHRoPSIyKiIgLz4KKwk8c3BhbnNwZWMgc3Bhbm5hbWU9J3JscCcgbmFtZXN0PSdjMycgbmFtZWVuZD0nYzUnIC8+CisJPHRoZWFkPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlN5bWJvbDwvZW50cnk+CisJICAgIDxlbnRyeT5WYWx1ZTwvZW50cnk+CisJICAgIDxlbnRyeT5SZWZlcmVuY2U8L2VudHJ5PgorCSAgICA8ZW50cnk+TGluZXMsIHVzdWFsbHk8L2VudHJ5PgorCSAgICA8ZW50cnk+UGF5bG9hZDwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX1RFTEVURVhUX0I8L2NvbnN0YW50PiAoVGVsZXRleHQKK1N5c3RlbSBCKTwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+PHhyZWYgbGlua2VuZD0iZXRzMzAwNzA2IiAvPiwgPHhyZWYgbGlua2VuZD0iaXR1NjUzIiAvPjwvZW50cnk+CisJICAgIDxlbnRyeT5QQUwvU0VDQU0gbGluZSA3LTIyLCAzMjAtMzM1IChzZWNvbmQgZmllbGQgNy0yMik8L2VudHJ5PgorCSAgICA8ZW50cnk+TGFzdCA0MiBvZiB0aGUgNDUgYnl0ZSBUZWxldGV4dCBwYWNrZXQsIHRoYXQgaXMKK3dpdGhvdXQgY2xvY2sgcnVuLWluIGFuZCBmcmFtaW5nIGNvZGUsIGxzYiBmaXJzdCB0cmFuc21pdHRlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX1ZQUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDQwMDwvZW50cnk+CisJICAgIDxlbnRyeT48eHJlZiBsaW5rZW5kPSJldHMzMDAyMzEiIC8+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlBBTCBsaW5lIDE2PC9lbnRyeT4KKwkgICAgPGVudHJ5PkJ5dGUgbnVtYmVyIDMgdG8gMTUgYWNjb3JkaW5nIHRvIEZpZ3VyZSA5IG9mCitFVFMmbmJzcDszMDAmbmJzcDsyMzEsIGxzYiBmaXJzdCB0cmFuc21pdHRlZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgxMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjx4cmVmIGxpbmtlbmQ9ImVpYTYwOCIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+TlRTQyBsaW5lIDIxLCAyODQgKHNlY29uZCBmaWVsZCAyMSk8L2VudHJ5PgorCSAgICA8ZW50cnk+VHdvIGJ5dGVzIGluIHRyYW5zbWlzc2lvbiBvcmRlciwgaW5jbHVkaW5nIHBhcml0eQorYml0LCBsc2IgZmlyc3QgdHJhbnNtaXR0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9XU1NfNjI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHg0MDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5Pjx4cmVmIGxpbmtlbmQ9ImVuMzAwMjk0IiAvPiwgPHhyZWYgbGlua2VuZD0iaXR1MTExOSIgLz48L2VudHJ5PgorCSAgICA8ZW50cnk+UEFML1NFQ0FNIGxpbmUgMjM8L2VudHJ5PgorCSAgICA8ZW50cnk+PHNjcmVlbj4KK0J5dGUgICAgICAgIDAgICAgICAgICAgICAgICAgIDEKKyAgICAgbXNiICAgICAgICAgbHNiICBtc2IgICAgICAgICAgIGxzYgorQml0ICA3IDYgNSA0IDMgMiAxIDAgIHggeCAxMyAxMiAxMSAxMCA5Cis8L3NjcmVlbj48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfU0xJQ0VEX1ZCSV81MjU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDEwMDA8L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9InJscCI+U2V0IG9mIHNlcnZpY2VzIGFwcGxpY2FibGUgdG8gNTI1CitsaW5lIHN5c3RlbXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1NMSUNFRF9WQklfNjI1PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHg0NDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJybHAiPlNldCBvZiBzZXJ2aWNlcyBhcHBsaWNhYmxlIHRvIDYyNQorbGluZSBzeXN0ZW1zLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHNsaWNlZCBWQkkgY2FwdHVyaW5nIG9yCitvdXRwdXQsIG9yIHRoZSB2YWx1ZSBpbiB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcword3JvbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc3RkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc3RkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmY1ZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zdGQueG1sCkBAIC0wLDAgKzEsOTkgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctc3RkIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0dfU1RELCBWSURJT0NfU19TVEQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1NURDwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU19TVEQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgb3Igc2VsZWN0IHRoZSB2aWRlbyBzdGFuZGFyZCBvZiB0aGUgY3VycmVudCBpbnB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52NGwyX3N0ZF9pZAorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3QgdjRsMl9zdGRfaWQKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19TVEQsIFZJRElPQ19TX1NURDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgYW5kIHNlbGVjdCB0aGUgY3VycmVudCB2aWRlbyBzdGFuZGFyZCBhcHBsaWNhdGlvbnMKK3VzZSB0aGUgPGNvbnN0YW50PlZJRElPQ19HX1NURDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+VklESU9DX1NfU1REPC9jb25zdGFudD4gaW9jdGxzIHdoaWNoIHRha2UgYSBwb2ludGVyIHRvIGEKKyZ2NGwyLXN0ZC1pZDsgdHlwZSBhcyBhcmd1bWVudC4gPGNvbnN0YW50PlZJRElPQ19HX1NURDwvY29uc3RhbnQ+IGNhbgorcmV0dXJuIGEgc2luZ2xlIGZsYWcgb3IgYSBzZXQgb2YgZmxhZ3MgYXMgaW4gJnY0bDItc3RhbmRhcmQ7IGZpZWxkCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPi4gVGhlIGZsYWdzIG11c3QgYmUgdW5hbWJpZ3VvdXMgc3VjaAordGhhdCB0aGV5IGFwcGVhciBpbiBvbmx5IG9uZSBlbnVtZXJhdGVkIDxzdHJ1Y3RuYW1lPnY0bDJfc3RhbmRhcmQ8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS48L3BhcmE+CisKKyAgICA8cGFyYT48Y29uc3RhbnQ+VklESU9DX1NfU1REPC9jb25zdGFudD4gYWNjZXB0cyBvbmUgb3IgbW9yZQorZmxhZ3MsIGJlaW5nIGEgd3JpdGUtb25seSBpb2N0bCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGFjdHVhbCBuZXcgc3RhbmRhcmQgYXMKKzxjb25zdGFudD5WSURJT0NfR19TVEQ8L2NvbnN0YW50PiBkb2VzLiBXaGVuIG5vIGZsYWdzIGFyZSBnaXZlbiBvcgordGhlIGN1cnJlbnQgaW5wdXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIHN0YW5kYXJkIHRoZSBkcml2ZXIKK3JldHVybnMgYW4gJkVJTlZBTDsuIFdoZW4gdGhlIHN0YW5kYXJkIHNldCBpcyBhbWJpZ3VvdXMgZHJpdmVycyBtYXkKK3JldHVybiA8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPiBvciBjaG9vc2UgYW55IG9mIHRoZSByZXF1ZXN0ZWQKK3N0YW5kYXJkcy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGlzIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX1NURDwvY29uc3RhbnQ+IHBhcmFtZXRlciB3YXMgdW5zdWl0YWJsZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy10dW5lci54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXR1bmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk4YzczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy10dW5lci54bWwKQEAgLTAsMCArMSw1MzUgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctdHVuZXIiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19UVU5FUiwgVklESU9DX1NfVFVORVI8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX1RVTkVSPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX1RVTkVSPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdldCBvciBzZXQgdHVuZXIgYXR0cmlidXRlczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl90dW5lcgorKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+Y29uc3Qgc3RydWN0IHY0bDJfdHVuZXIKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19UVU5FUiwgVklESU9DX1NfVFVORVI8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRvIHF1ZXJ5IHRoZSBhdHRyaWJ1dGVzIG9mIGEgdHVuZXIgYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgemVybyBvdXQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBvZiBhICZ2NGwyLXR1bmVyOyBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfR19UVU5FUjwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gRHJpdmVycyBmaWxsIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJuIGFuCismRUlOVkFMOyB3aGVuIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBUbyBlbnVtZXJhdGUgYWxsIHR1bmVycworYXBwbGljYXRpb25zIHNoYWxsIGJlZ2luIGF0IGluZGV4IHplcm8sIGluY3JlbWVudGluZyBieSBvbmUgdW50aWwgdGhlCitkcml2ZXIgcmV0dXJucyA8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPi48L3BhcmE+CisKKyAgICA8cGFyYT5UdW5lcnMgaGF2ZSB0d28gd3JpdGFibGUgcHJvcGVydGllcywgdGhlIGF1ZGlvIG1vZGUgYW5kCit0aGUgcmFkaW8gZnJlcXVlbmN5LiBUbyBjaGFuZ2UgdGhlIGF1ZGlvIG1vZGUsIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplCit0aGUgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+YXVkbW9kZTwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gZmllbGRzIGFuZCBjYWxsIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX1RVTkVSPC9jb25zdGFudD4gaW9jdGwuIFRoaXMgd2lsbAorPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGNoYW5nZSB0aGUgY3VycmVudCB0dW5lciwgd2hpY2ggaXMgZGV0ZXJtaW5lZAorYnkgdGhlIGN1cnJlbnQgdmlkZW8gaW5wdXQuIERyaXZlcnMgbWF5IGNob29zZSBhIGRpZmZlcmVudCBhdWRpbyBtb2RlCitpZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMgaW52YWxpZCBvciB1bnN1cHBvcnRlZC4gU2luY2UgdGhpcyBpcyBhCis8IS0tIEZJWE1FIC0tPndyaXRlLW9ubHkgaW9jdGwsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgYWN0dWFsbHkKK3NlbGVjdGVkIGF1ZGlvIG1vZGUuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gY2hhbmdlIHRoZSByYWRpbyBmcmVxdWVuY3kgdGhlICZWSURJT0MtUy1GUkVRVUVOQ1k7IGlvY3RsCitpcyBhdmFpbGFibGUuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXR1bmVyIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl90dW5lcjwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjEqIiAvPgorCTxzcGFuc3BlYyBzcGFubmFtZT0iaHNwYW4iIG5hbWVzdD0iYzMiIG5hbWVlbmQ9ImM0IiAvPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5JZGVudGlmaWVzIHRoZSB0dW5lciwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT5OYW1lIG9mIHRoZSB0dW5lciwgYQorTlVMLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUKK3VzZXIuPCEtLSBGSVhNRSBWaWRlbyBpbnB1dHMgYWxyZWFkeSBoYXZlIGEgbmFtZSwgdGhlIHB1cnBvc2Ugb2YgdGhpcworZmllbGQgaXMgbm90IHF1aXRlIGNsZWFyLi0tPjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItdHVuZXItdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlR5cGUgb2YgdGhlIHR1bmVyLCBzZWUgPHhyZWYKKwkJbGlua2VuZD0idjRsMi10dW5lci10eXBlIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlR1bmVyIGNhcGFiaWxpdHkgZmxhZ3MsIHNlZQorPHhyZWYgbGlua2VuZD0idHVuZXItY2FwYWJpbGl0eSIgLz4uIEF1ZGlvIGZsYWdzIGluZGljYXRlIHRoZSBhYmlsaXR5Cit0byBkZWNvZGUgYXVkaW8gc3VicHJvZ3JhbXMuIFRoZXkgd2lsbCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4KK2NoYW5nZSwgZm9yIGV4YW1wbGUgd2l0aCB0aGUgY3VycmVudCB2aWRlbyBzdGFuZGFyZC48L3BhcmE+PHBhcmE+V2hlbgordGhlIHN0cnVjdHVyZSByZWZlcnMgdG8gYSByYWRpbyB0dW5lciBvbmx5IHRoZQorPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX0xPVzwvY29uc3RhbnQ+LAorPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX1NURVJFTzwvY29uc3RhbnQ+IGFuZAorPGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX1JEUzwvY29uc3RhbnQ+IGZsYWdzIGNhbiBiZSBzZXQuPC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmFuZ2Vsb3c8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlRoZSBsb3dlc3QgdHVuYWJsZSBmcmVxdWVuY3kgaW4KK3VuaXRzIG9mIDYyLjUga0h6LCBvciBpZiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPgorZmxhZyA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD4gaXMgc2V0LCBpbiB1bml0cyBvZiA2Mi41CitIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJhbmdlaGlnaDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJoc3BhbiI+VGhlIGhpZ2hlc3QgdHVuYWJsZSBmcmVxdWVuY3kgaW4KK3VuaXRzIG9mIDYyLjUga0h6LCBvciBpZiB0aGUgPHN0cnVjdGZpZWxkPmNhcGFiaWxpdHk8L3N0cnVjdGZpZWxkPgorZmxhZyA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD4gaXMgc2V0LCBpbiB1bml0cyBvZiA2Mi41CitIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJ4c3ViY2hhbnM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlNvbWUgdHVuZXJzIG9yIGF1ZGlvCitkZWNvZGVycyBjYW4gZGV0ZXJtaW5lIHRoZSByZWNlaXZlZCBhdWRpbyBzdWJwcm9ncmFtcyBieSBhbmFseXppbmcKK2F1ZGlvIGNhcnJpZXJzLCBwaWxvdCB0b25lcyBvciBvdGhlciBpbmRpY2F0b3JzLiBUbyBwYXNzIHRoaXMKK2luZm9ybWF0aW9uIGRyaXZlcnMgc2V0IGZsYWdzIGRlZmluZWQgaW4gPHhyZWYKKwkJICBsaW5rZW5kPSJ0dW5lci1yeHN1YmNoYW5zIiAvPiBpbiB0aGlzIGZpZWxkLiBGb3IKK2V4YW1wbGU6PC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9NT05PPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+cmVjZWl2aW5nIG1vbm8gYXVkaW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+U1RFUkVPIHwgU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+cmVjZWl2aW5nIHN0ZXJlbyBhdWRpbyBhbmQgYSBzZWNvbmRhcnkgYXVkaW8KK3Byb2dyYW08L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+TU9OTyB8IFNURVJFTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnJlY2VpdmluZyBtb25vIG9yIHN0ZXJlbyBhdWRpbywgdGhlIGhhcmR3YXJlIGNhbm5vdAorZGlzdGluZ3Vpc2g8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+TEFORzEgfCBMQU5HMjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnJlY2VpdmluZyBiaWxpbmd1YWwgYXVkaW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+TU9OTyB8IFNURVJFTyB8IExBTkcxIHwgTEFORzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5yZWNlaXZpbmcgbW9ubywgc3RlcmVvIG9yIGJpbGluZ3VhbAorYXVkaW88L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPldoZW4gdGhlCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfU1RFUkVPPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+X0xBTkcxPC9jb25zdGFudD4sIDxjb25zdGFudD5fTEFORzI8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50Pl9TQVA8L2NvbnN0YW50PiBmbGFnIGlzIGNsZWFyZWQgaW4gdGhlCis8c3RydWN0ZmllbGQ+Y2FwYWJpbGl0eTwvc3RydWN0ZmllbGQ+IGZpZWxkLCB0aGUgY29ycmVzcG9uZGluZworPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCXzwvY29uc3RhbnQ+IGZsYWcgbXVzdCBub3QgYmUgc2V0CitoZXJlLjwvcGFyYT48cGFyYT5UaGlzIGZpZWxkIGlzIHZhbGlkIG9ubHkgaWYgdGhpcyBpcyB0aGUgdHVuZXIgb2YgdGhlCitjdXJyZW50IHZpZGVvIGlucHV0LCBvciB3aGVuIHRoZSBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGEgcmFkaW8KK3R1bmVyLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmF1ZG1vZGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPjxwYXJhPlRoZSBzZWxlY3RlZCBhdWRpbyBtb2RlLCBzZWUKKzx4cmVmIGxpbmtlbmQ9InR1bmVyLWF1ZG1vZGUiIC8+IGZvciB2YWxpZCB2YWx1ZXMuIFRoZSBhdWRpbyBtb2RlIGRvZXMKK25vdCBhZmZlY3QgYXVkaW8gc3VicHJvZ3JhbSBkZXRlY3Rpb24sIGFuZCBsaWtlIGEgPGxpbmsKK2xpbmtlbmQ9ImNvbnRyb2wiPmNvbnRyb2w8L2xpbms+IGl0IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgY2hhbmdlCit1bmxlc3MgdGhlIHJlcXVlc3RlZCBtb2RlIGlzIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQuIFNlZSA8eHJlZgorCQkgIGxpbmtlbmQ9InR1bmVyLW1hdHJpeCIgLz4gZm9yIHBvc3NpYmxlIHJlc3VsdHMgd2hlbgordGhlIHNlbGVjdGVkIGFuZCByZWNlaXZlZCBhdWRpbyBwcm9ncmFtcyBkbyBub3QKK21hdGNoLjwvcGFyYT48cGFyYT5DdXJyZW50bHkgdGhpcyBpcyB0aGUgb25seSBmaWVsZCBvZiBzdHJ1Y3QKKzxzdHJ1Y3RuYW1lPnY0bDJfdHVuZXI8L3N0cnVjdG5hbWU+IGFwcGxpY2F0aW9ucyBjYW4KK2NoYW5nZS48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zaWduYWw8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPlRoZSBzaWduYWwgc3RyZW5ndGggaWYga25vd24sIHJhbmdpbmcKK2Zyb20gMCB0byA2NTUzNS4gSGlnaGVyIHZhbHVlcyBpbmRpY2F0ZSBhIGJldHRlciBzaWduYWwuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5hZmM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaHNwYW4iPkF1dG9tYXRpYyBmcmVxdWVuY3kgY29udHJvbDogV2hlbiB0aGUKKzxzdHJ1Y3RmaWVsZD5hZmM8L3N0cnVjdGZpZWxkPiB2YWx1ZSBpcyBuZWdhdGl2ZSwgdGhlIGZyZXF1ZW5jeSBpcyB0b28KK2xvdywgd2hlbiBwb3NpdGl2ZSB0b28gaGlnaC48IS0tIEZJWE1FIG5lZWQgZXhhbXBsZSB3aGF0IHRvIGRvIHdoZW4gaXQgbmV2ZXIKK3NldHRsZXMgYXQgemVybywgJmllOyByYW5nZSBpcyB3aGF0PyAtLT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bNF08L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kCithcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXR1bmVyLXR5cGUiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl90dW5lcl90eXBlPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1JBRElPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfQU5BTE9HX1RWPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InR1bmVyLWNhcGFiaWxpdHkiPgorICAgICAgPHRpdGxlPlR1bmVyIGFuZCBNb2R1bGF0b3IgQ2FwYWJpbGl0eSBGbGFnczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTE9XPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PldoZW4gc2V0LCB0dW5pbmcgZnJlcXVlbmNpZXMgYXJlIGV4cHJlc3NlZCBpbiB1bml0cyBvZgorNjIuNSZuYnNwO0h6LCBvdGhlcndpc2UgaW4gdW5pdHMgb2YgNjIuNSZuYnNwO2tIei48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX05PUk08L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBpcyBhIG11bHRpLXN0YW5kYXJkIHR1bmVyOyB0aGUgdmlkZW8gc3RhbmRhcmQKK2NhbiBvciBtdXN0IGJlIHN3aXRjaGVkLiAoQi9HIFBBTCB0dW5lcnMgZm9yIGV4YW1wbGUgYXJlIHR5cGljYWxseSBub3QKKyAgICAgIGNvbnNpZGVyZWQgbXVsdGktc3RhbmRhcmQgYmVjYXVzZSB0aGUgdmlkZW8gc3RhbmRhcmQgaXMgYXV0b21hdGljYWxseQorICAgICAgZGV0ZXJtaW5lZCBmcm9tIHRoZSBmcmVxdWVuY3kgYmFuZC4pIFRoZSBzZXQgb2Ygc3VwcG9ydGVkIHZpZGVvCisgICAgICBzdGFuZGFyZHMgaXMgYXZhaWxhYmxlIGZyb20gdGhlICZ2NGwyLWlucHV0OyBwb2ludGluZyB0byB0aGlzIHR1bmVyLAorICAgICAgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpb2N0bCAmVklESU9DLUVOVU1JTlBVVDsgZm9yIGRldGFpbHMuIE9ubHkKKyAgICAgIDxjb25zdGFudD5WNEwyX1RVTkVSX0FOQUxPR19UVjwvY29uc3RhbnQ+IHR1bmVycyBjYW4gaGF2ZSB0aGlzIGNhcGFiaWxpdHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwk8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfQ0FQX1NURVJFTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwk8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwk8ZW50cnk+U3RlcmVvIGF1ZGlvIHJlY2VwdGlvbiBpcyBzdXBwb3J0ZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9MQU5HMTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDA0MDwvZW50cnk+CisJICAgIDxlbnRyeT5SZWNlcHRpb24gb2YgdGhlIHByaW1hcnkgbGFuZ3VhZ2Ugb2YgYSBiaWxpbmd1YWwKK2F1ZGlvIHByb2dyYW0gaXMgc3VwcG9ydGVkLiBCaWxpbmd1YWwgYXVkaW8gaXMgYSBmZWF0dXJlIG9mCit0d28tY2hhbm5lbCBzeXN0ZW1zLCB0cmFuc21pdHRpbmcgdGhlIHByaW1hcnkgbGFuZ3VhZ2UgbW9uYXVyYWwgb24gdGhlCittYWluIGF1ZGlvIGNhcnJpZXIgYW5kIGEgc2Vjb25kYXJ5IGxhbmd1YWdlIG1vbmF1cmFsIG9uIGEgc2Vjb25kCitjYXJyaWVyLiBPbmx5CisgICAgICA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9BTkFMT0dfVFY8L2NvbnN0YW50PiB0dW5lcnMgY2FuIGhhdmUgdGhpcyBjYXBhYmlsaXR5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTEFORzI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMjA8L2VudHJ5PgorCSAgICA8ZW50cnk+UmVjZXB0aW9uIG9mIHRoZSBzZWNvbmRhcnkgbGFuZ3VhZ2Ugb2YgYSBiaWxpbmd1YWwKK2F1ZGlvIHByb2dyYW0gaXMgc3VwcG9ydGVkLiBPbmx5CisgICAgICA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9BTkFMT0dfVFY8L2NvbnN0YW50PiB0dW5lcnMgY2FuIGhhdmUgdGhpcyBjYXBhYmlsaXR5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPlJlY2VwdGlvbiBvZiBhIHNlY29uZGFyeSBhdWRpbyBwcm9ncmFtIGlzCitzdXBwb3J0ZWQuIFRoaXMgaXMgYSBmZWF0dXJlIG9mIHRoZSBCVFNDIHN5c3RlbSB3aGljaCBhY2NvbXBhbmllcyB0aGUKK05UU0MgdmlkZW8gc3RhbmRhcmQuIFR3byBhdWRpbyBjYXJyaWVycyBhcmUgYXZhaWxhYmxlIGZvciBtb25vIG9yCitzdGVyZW8gdHJhbnNtaXNzaW9ucyBvZiBhIHByaW1hcnkgbGFuZ3VhZ2UsIGFuZCBhbiBpbmRlcGVuZGVudCB0aGlyZAorY2FycmllciBmb3IgYSBtb25hdXJhbCBzZWNvbmRhcnkgbGFuZ3VhZ2UuIE9ubHkKKyAgICAgIDxjb25zdGFudD5WNEwyX1RVTkVSX0FOQUxPR19UVjwvY29uc3RhbnQ+IHR1bmVycyBjYW4gaGF2ZSB0aGlzIGNhcGFiaWxpdHkuPC9wYXJhPjxwYXJhPk5vdGUgdGhlCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfTEFORzI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9TQVA8L2NvbnN0YW50PiBmbGFncyBhcmUgc3lub255bXMuCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9DQVBfU0FQPC9jb25zdGFudD4gYXBwbGllcyB3aGVuIHRoZSB0dW5lcgorc3VwcG9ydHMgdGhlIDxjb25zdGFudD5WNEwyX1NURF9OVFNDX008L2NvbnN0YW50PiB2aWRlbworc3RhbmRhcmQuPC9wYXJhPjwhLS0gRklYTUUgd2hhdCBpZiBQQUwrTlRTQyBhbmQgQmkgYnV0IG5vdCBTQVA/IC0tPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX0NBUF9SRFM8L2NvbnN0YW50PjwvZW50cnk+CisJPGVudHJ5PjB4MDA4MDwvZW50cnk+CisJPGVudHJ5PlJEUyBjYXB0dXJlIGlzIHN1cHBvcnRlZC4gVGhpcyBjYXBhYmlsaXR5IGlzIG9ubHkgdmFsaWQgZm9yCityYWRpbyB0dW5lcnMuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ0dW5lci1yeHN1YmNoYW5zIj4KKyAgICAgIDx0aXRsZT5UdW5lciBBdWRpbyBSZWNlcHRpb24gRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX01PTk88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIHJlY2VpdmVzIGEgbW9ubyBhdWRpbyBzaWduYWwuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TVEVSRU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR1bmVyIHJlY2VpdmVzIGEgc3RlcmVvIGF1ZGlvIHNpZ25hbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX0xBTkcxPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA4PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyB0aGUgcHJpbWFyeSBsYW5ndWFnZSBvZiBhCitiaWxpbmd1YWwgYXVkaW8gc2lnbmFsLiBEcml2ZXJzIG11c3QgY2xlYXIgdGhpcyBmbGFnIHdoZW4gdGhlIGN1cnJlbnQKK3ZpZGVvIHN0YW5kYXJkIGlzIDxjb25zdGFudD5WNEwyX1NURF9OVFNDX008L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX0xBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyB0aGUgc2Vjb25kYXJ5IGxhbmd1YWdlIG9mIGEKK2JpbGluZ3VhbCBhdWRpbyBzaWduYWwgKG9yIGEgc2Vjb25kIGF1ZGlvIHByb2dyYW0pLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyBhIFNlY29uZCBBdWRpbyBQcm9ncmFtLiBOb3RlIHRoZQorPGNvbnN0YW50PlY0TDJfVFVORVJfU1VCX0xBTkcyPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfU0FQPC9jb25zdGFudD4gZmxhZ3MgYXJlIHN5bm9ueW1zLiBUaGUKKzxjb25zdGFudD5WNEwyX1RVTkVSX1NVQl9TQVA8L2NvbnN0YW50PiBmbGFnIGFwcGxpZXMgd2hlbiB0aGUKK2N1cnJlbnQgdmlkZW8gc3RhbmRhcmQgaXMgPGNvbnN0YW50PlY0TDJfU1REX05UU0NfTTwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfUkRTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSB0dW5lciByZWNlaXZlcyBhbiBSRFMgY2hhbm5lbC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InR1bmVyLWF1ZG1vZGUiPgorICAgICAgPHRpdGxlPlR1bmVyIEF1ZGlvIE1vZGVzPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLWRlZjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTU9OTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+UGxheSBtb25vIGF1ZGlvLiBXaGVuIHRoZSB0dW5lciByZWNlaXZlcyBhIHN0ZXJlbworc2lnbmFsIHRoaXMgYSBkb3duLW1peCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbC4gV2hlbiB0aGUgdHVuZXIKK3JlY2VpdmVzIGEgYmlsaW5ndWFsIG9yIFNBUCBzaWduYWwgdGhpcyBtb2RlIHNlbGVjdHMgdGhlIHByaW1hcnkKK2xhbmd1YWdlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9NT0RFX1NURVJFTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+UGxheSBzdGVyZW8gYXVkaW8uIFdoZW4gdGhlIHR1bmVyIHJlY2VpdmVzCitiaWxpbmd1YWwgYXVkaW8gaXQgbWF5IHBsYXkgZGlmZmVyZW50IGxhbmd1YWdlcyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQKK2NoYW5uZWwgb3IgdGhlIHByaW1hcnkgbGFuZ3VhZ2UgaXMgcGxheWVkIG9uIGJvdGggY2hhbm5lbHMuPC9wYXJhPjxwYXJhPlBsYXlpbmcKK2RpZmZlcmVudCBsYW5ndWFnZXMgaW4gdGhpcyBtb2RlIGlzCitkZXByZWNhdGVkLiBOZXcgZHJpdmVycyBzaG91bGQgZG8gdGhpcyBvbmx5IGluCis8Y29uc3RhbnQ+TU9ERV9MQU5HMV9MQU5HMjwvY29uc3RhbnQ+LjwvcGFyYT48cGFyYT5XaGVuIHRoZSB0dW5lcgorcmVjZWl2ZXMgbm8gc3RlcmVvIHNpZ25hbCBvciBkb2VzIG5vdCBzdXBwb3J0IHN0ZXJlbyByZWNlcHRpb24gdGhlCitkcml2ZXIgc2hhbGwgZmFsbCBiYWNrIHRvIDxjb25zdGFudD5NT0RFX01PTk88L2NvbnN0YW50Pi48L3BhcmE+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTEFORzE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBsYXkgdGhlIHByaW1hcnkgbGFuZ3VhZ2UsIG1vbm8gb3Igc3RlcmVvLiBPbmx5Cis8Y29uc3RhbnQ+VjRMMl9UVU5FUl9BTkFMT0dfVFY8L2NvbnN0YW50PiB0dW5lcnMgc3VwcG9ydCB0aGlzCittb2RlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9NT0RFX0xBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT5QbGF5IHRoZSBzZWNvbmRhcnkgbGFuZ3VhZ2UsIG1vbm8uIFdoZW4gdGhlIHR1bmVyCityZWNlaXZlcyBubyBiaWxpbmd1YWwgYXVkaW8gb3IgU0FQLCBvciB0aGVpciByZWNlcHRpb24gaXMgbm90CitzdXBwb3J0ZWQgdGhlIGRyaXZlciBzaGFsbCBmYWxsIGJhY2sgdG8gbW9ubyBvciBzdGVyZW8gbW9kZS4gT25seQorPGNvbnN0YW50PlY0TDJfVFVORVJfQU5BTE9HX1RWPC9jb25zdGFudD4gdHVuZXJzIHN1cHBvcnQgdGhpcworbW9kZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfVFVORVJfTU9ERV9TQVA8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4yPC9lbnRyeT4KKwkgICAgPGVudHJ5PlBsYXkgdGhlIFNlY29uZCBBdWRpbyBQcm9ncmFtLiBXaGVuIHRoZSB0dW5lcgorcmVjZWl2ZXMgbm8gYmlsaW5ndWFsIGF1ZGlvIG9yIFNBUCwgb3IgdGhlaXIgcmVjZXB0aW9uIGlzIG5vdAorc3VwcG9ydGVkIHRoZSBkcml2ZXIgc2hhbGwgZmFsbCBiYWNrIHRvIG1vbm8gb3Igc3RlcmVvIG1vZGUuIE9ubHkKKzxjb25zdGFudD5WNEwyX1RVTkVSX0FOQUxPR19UVjwvY29uc3RhbnQ+IHR1bmVycyBzdXBwb3J0IHRoaXMgbW9kZS4KK05vdGUgdGhlIDxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfTEFORzI8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX1RVTkVSX01PREVfU0FQPC9jb25zdGFudD4gYXJlIHN5bm9ueW1zLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+NDwvZW50cnk+CisJICAgIDxlbnRyeT5QbGF5IHRoZSBwcmltYXJ5IGxhbmd1YWdlIG9uIHRoZSBsZWZ0IGNoYW5uZWwsIHRoZQorc2Vjb25kYXJ5IGxhbmd1YWdlIG9uIHRoZSByaWdodCBjaGFubmVsLiBXaGVuIHRoZSB0dW5lciByZWNlaXZlcyBubworYmlsaW5ndWFsIGF1ZGlvIG9yIFNBUCwgaXQgc2hhbGwgZmFsbCBiYWNrIHRvCis8Y29uc3RhbnQ+TU9ERV9MQU5HMTwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD5NT0RFX01PTk88L2NvbnN0YW50Pi4KK09ubHkgPGNvbnN0YW50PlY0TDJfVFVORVJfQU5BTE9HX1RWPC9jb25zdGFudD4gdHVuZXJzIHN1cHBvcnQgdGhpcworbW9kZS48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0iYWxsIiBpZD0idHVuZXItbWF0cml4Ij4KKyAgICAgIDx0aXRsZT5UdW5lciBBdWRpbyBNYXRyaXg8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0iY2VudGVyIj4KKwk8Y29sc3BlYyBhbGlnbj0ibGVmdCIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbHdpZHRoPSIxKiIgLz4KKwk8Y29sc3BlYyBjb2x3aWR0aD0iMSoiIC8+CisJPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjNiIgY29sd2lkdGg9IjEqIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImMyIiBuYW1lZW5kPSJjNiIgc3Bhbm5hbWU9ImhzcGFuIiBhbGlnbj0iY2VudGVyIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj5TZWxlY3RlZAorPGNvbnN0YW50PlY0TDJfVFVORVJfTU9ERV88L2NvbnN0YW50PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5SZWNlaXZlZCA8Y29uc3RhbnQ+VjRMMl9UVU5FUl9TVUJfPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50Pk1PTk88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+U1RFUkVPPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PkxBTkcxPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PkxBTkcyID0gU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PkxBTkcxX0xBTkcyPC9jb25zdGFudD48Zm9vdG5vdGU+PHBhcmE+VGhpcworbW9kZSBoYXMgYmVlbiBhZGRlZCBpbiBMaW51eCAyLjYuMTcgYW5kIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IG9sZGVyCitkcml2ZXJzLjwvcGFyYT48L2Zvb3Rub3RlPjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3RoZWFkPgorCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50Pk1PTk88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5Nb25vPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vbm8vTW9ubzwvZW50cnk+CisJICAgIDxlbnRyeT5Nb25vPC9lbnRyeT4KKwkgICAgPGVudHJ5Pk1vbm88L2VudHJ5PgorCSAgICA8ZW50cnk+TW9uby9Nb25vPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5NT05PIHwgU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+TW9ubzwvZW50cnk+CisJICAgIDxlbnRyeT5Nb25vL01vbm88L2VudHJ5PgorCSAgICA8ZW50cnk+TW9ubzwvZW50cnk+CisJICAgIDxlbnRyeT5TQVA8L2VudHJ5PgorCSAgICA8ZW50cnk+TW9uby9TQVAgKHByZWZlcnJlZCkgb3IgTW9uby9Nb25vPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5TVEVSRU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5MK1I8L2VudHJ5PgorCSAgICA8ZW50cnk+TC9SPC9lbnRyeT4KKwkgICAgPGVudHJ5PlN0ZXJlbyBML1IgKHByZWZlcnJlZCkgb3IgTW9ubyBMK1I8L2VudHJ5PgorCSAgICA8ZW50cnk+U3RlcmVvIEwvUiAocHJlZmVycmVkKSBvciBNb25vIEwrUjwvZW50cnk+CisJICAgIDxlbnRyeT5ML1IgKHByZWZlcnJlZCkgb3IgTCtSL0wrUjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+U1RFUkVPIHwgU0FQPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+TCtSPC9lbnRyeT4KKwkgICAgPGVudHJ5PkwvUjwvZW50cnk+CisJICAgIDxlbnRyeT5TdGVyZW8gTC9SIChwcmVmZXJyZWQpIG9yIE1vbm8gTCtSPC9lbnRyeT4KKwkgICAgPGVudHJ5PlNBUDwvZW50cnk+CisJICAgIDxlbnRyeT5MK1IvU0FQIChwcmVmZXJyZWQpIG9yIEwvUiBvciBMK1IvTCtSPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5MQU5HMSB8IExBTkcyPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+TGFuZ3VhZ2UmbmJzcDsxPC9lbnRyeT4KKwkgICAgPGVudHJ5PkxhbmcxL0xhbmcyIChkZXByZWNhdGVkPGZvb3Rub3RlPjxwYXJhPlBsYXliYWNrIG9mCitib3RoIGxhbmd1YWdlcyBpbiA8Y29uc3RhbnQ+TU9ERV9TVEVSRU88L2NvbnN0YW50PiBpcyBkZXByZWNhdGVkLiBJbgordGhlIGZ1dHVyZSBkcml2ZXJzIHNob3VsZCBwcm9kdWNlIG9ubHkgdGhlIHByaW1hcnkgbGFuZ3VhZ2UgaW4gdGhpcworbW9kZS4gQXBwbGljYXRpb25zIHNob3VsZCByZXF1ZXN0Cis8Y29uc3RhbnQ+TU9ERV9MQU5HMV9MQU5HMjwvY29uc3RhbnQ+IHRvIHJlY29yZCBib3RoIGxhbmd1YWdlcyBvciBhCitzdGVyZW8gc2lnbmFsLjwvcGFyYT48L2Zvb3Rub3RlPikgb3IKK0xhbmcxL0xhbmcxPC9lbnRyeT4KKwkgICAgPGVudHJ5Pkxhbmd1YWdlJm5ic3A7MTwvZW50cnk+CisJICAgIDxlbnRyeT5MYW5ndWFnZSZuYnNwOzI8L2VudHJ5PgorCSAgICA8ZW50cnk+TGFuZzEvTGFuZzIgKHByZWZlcnJlZCkgb3IgTGFuZzEvTGFuZzE8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgJnY0bDItdHVuZXI7IDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGlzCitvdXQgb2YgYm91bmRzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWxvZy1zdGF0dXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzRiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbApAQCAtMCwwICsxLDU4IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1sb2ctc3RhdHVzIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX0xPR19TVEFUVVM8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19MT0dfU1RBVFVTPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkxvZyBkcml2ZXIgc3RhdHVzIGluZm9ybWF0aW9uPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5BcyB0aGUgdmlkZW8vYXVkaW8gZGV2aWNlcyBiZWNvbWUgbW9yZSBjb21wbGljYXRlZCBpdAorYmVjb21lcyBoYXJkZXIgdG8gZGVidWcgcHJvYmxlbXMuIFdoZW4gdGhpcyBpb2N0bCBpcyBjYWxsZWQgdGhlIGRyaXZlcgord2lsbCBvdXRwdXQgdGhlIGN1cnJlbnQgZGV2aWNlIHN0YXR1cyB0byB0aGUga2VybmVsIGxvZy4gVGhpcyBpcworcGFydGljdWxhciB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggcHJvYmxlbXMgbGlrZSBubyBzb3VuZCwgbm8gdmlkZW8KK2FuZCBpbmNvcnJlY3RseSB0dW5lZCBjaGFubmVscy4gQWxzbyBtYW55IG1vZGVybiBkZXZpY2VzIGF1dG9kZXRlY3QKK3ZpZGVvIGFuZCBhdWRpbyBzdGFuZGFyZHMgYW5kIHRoaXMgaW9jdGwgd2lsbCByZXBvcnQgd2hhdCB0aGUgZGV2aWNlCit0aGlua3Mgd2hhdCB0aGUgc3RhbmRhcmQgaXMuIE1pc21hdGNoZXMgbWF5IGdpdmUgYW4gaW5kaWNhdGlvbiB3aGVyZQordGhlIHByb2JsZW0gaXMuPC9wYXJhPgorCisgICAgPHBhcmE+VGhpcyBpb2N0bCBpcyBvcHRpb25hbCBhbmQgbm90IGFsbCBkcml2ZXJzIHN1cHBvcnQgaXQuIEl0Cit3YXMgaW50cm9kdWNlZCBpbiBMaW51eCAyLjYuMTUuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaW9jdGwuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLW92ZXJsYXkueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtb3ZlcmxheS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzNmM1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLW92ZXJsYXkueG1sCkBAIC0wLDAgKzEsODMgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLW92ZXJsYXkiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfT1ZFUkxBWTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX09WRVJMQVk8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+U3RhcnQgb3Igc3RvcCB2aWRlbyBvdmVybGF5PC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmNvbnN0IGludCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX09WRVJMQVk8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgaXMgcGFydCBvZiB0aGUgPGxpbmsgbGlua2VuZD0ib3ZlcmxheSI+dmlkZW8KKyAgICBvdmVybGF5PC9saW5rPiBJL08gbWV0aG9kLiBBcHBsaWNhdGlvbnMgY2FsbAorICAgIDxjb25zdGFudD5WSURJT0NfT1ZFUkxBWTwvY29uc3RhbnQ+IHRvIHN0YXJ0IG9yIHN0b3AgdGhlCisgICAgb3ZlcmxheS4gSXQgdGFrZXMgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgd2hpY2ggbXVzdCBiZSBzZXQgdG8KKyAgICB6ZXJvIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBzdG9wIG92ZXJsYXksIHRvIG9uZSB0byBzdGFydC48L3BhcmE+CisKKyAgICA8cGFyYT5Ecml2ZXJzIGRvIG5vdCBzdXBwb3J0ICZWSURJT0MtU1RSRUFNT047IG9yCismVklESU9DLVNUUkVBTU9GRjsgd2l0aCA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZPC9jb25zdGFudD4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VmlkZW8gb3ZlcmxheSBpcyBub3Qgc3VwcG9ydGVkLCBvciB0aGUKK3BhcmFtZXRlcnMgaGF2ZSBub3QgYmVlbiBzZXQgdXAuIFNlZSA8eHJlZgorbGlua2VuZD0ib3ZlcmxheSIgLz4gZm9yIHRoZSBuZWNlc3Nhcnkgc3RlcHMuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3MDgxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sCkBAIC0wLDAgKzEsMTY4IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1xYnVmIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX1FCVUYsIFZJRElPQ19EUUJVRjwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX1FCVUY8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX0RRQlVGPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkV4Y2hhbmdlIGEgYnVmZmVyIHdpdGggdGhlIGRyaXZlcjwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9idWZmZXIgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19RQlVGLCBWSURJT0NfRFFCVUY8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PiBpb2N0bAordG8gZW5xdWV1ZSBhbiBlbXB0eSAoY2FwdHVyaW5nKSBvciBmaWxsZWQgKG91dHB1dCkgYnVmZmVyIGluIHRoZQorZHJpdmVyJ3MgaW5jb21pbmcgcXVldWUuIFRoZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzZWxlY3RlZCBJL08KK21ldGhvZC48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgPGxpbmsgbGlua2VuZD0ibW1hcCI+bWVtb3J5IG1hcHBlZDwvbGluaz4KK2J1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKKyZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseSAmdjRsMi1mb3JtYXQ7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4gYW5kIHRoZQorPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFZhbGlkIGluZGV4IG51bWJlcnMgcmFuZ2UgZnJvbQoremVybyB0byB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggJlZJRElPQy1SRVFCVUZTOworKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLiBUaGUKK2NvbnRlbnRzIG9mIHRoZSBzdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9idWZmZXI8L3N0cnVjdG5hbWU+IHJldHVybmVkCitieSBhICZWSURJT0MtUVVFUllCVUY7IGlvY3RsIHdpbGwgZG8gYXMgd2VsbC4gV2hlbiB0aGUgYnVmZmVyIGlzCitpbnRlbmRlZCBmb3Igb3V0cHV0ICg8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzCis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+KSBhcHBsaWNhdGlvbnMgbXVzdCBhbHNvCitpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+Ynl0ZXN1c2VkPC9zdHJ1Y3RmaWVsZD4sCis8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBhbmQKKzxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZHMuIFNlZSA8eHJlZgorCWxpbmtlbmQ9ImJ1ZmZlciIgLz4gZm9yIGRldGFpbHMuIFdoZW4KKzxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCitzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzZXRzIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4gYW5kCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PiBmbGFncyBhbmQgY2xlYXJzIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfRE9ORTwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCis8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCwgb3IgaXQgcmV0dXJucyBhbgorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIDxsaW5rIGxpbmtlbmQ9InVzZXJwIj51c2VyIHBvaW50ZXI8L2xpbms+CitidWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhCismdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHByZXZpb3VzbHkgJnY0bDItZm9ybWF0OworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CitmaWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfVVNFUlBUUjwvY29uc3RhbnQ+IGFuZCB0aGUKKzxzdHJ1Y3RmaWVsZD5tLnVzZXJwdHI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byB0aGUgYWRkcmVzcyBvZiB0aGUKK2J1ZmZlciBhbmQgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IHRvIGl0cyBzaXplLiBXaGVuIHRoZQorYnVmZmVyIGlzIGludGVuZGVkIGZvciBvdXRwdXQgYWRkaXRpb25hbCBmaWVsZHMgbXVzdCBiZSBzZXQgYXMgYWJvdmUuCitXaGVuIDxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCitzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzZXRzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PgorZmxhZyBhbmQgY2xlYXJzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PiBmbGFncyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkLCBvciBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUuCitUaGlzIGlvY3RsIGxvY2tzIHRoZSBtZW1vcnkgcGFnZXMgb2YgdGhlIGJ1ZmZlciBpbiBwaHlzaWNhbCBtZW1vcnksCit0aGV5IGNhbm5vdCBiZSBzd2FwcGVkIG91dCB0byBkaXNrLiBCdWZmZXJzIHJlbWFpbiBsb2NrZWQgdW50aWwKK2RlcXVldWVkLCB1bnRpbCB0aGUgJlZJRElPQy1TVFJFQU1PRkY7IG9yICZWSURJT0MtUkVRQlVGUzsgaW9jdGwgYXJlCitjYWxsZWQsIG9yIHVudGlsIHRoZSBkZXZpY2UgaXMgY2xvc2VkLjwvcGFyYT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KK2lvY3RsIHRvIGRlcXVldWUgYSBmaWxsZWQgKGNhcHR1cmluZykgb3IgZGlzcGxheWVkIChvdXRwdXQpIGJ1ZmZlcgorZnJvbSB0aGUgZHJpdmVyJ3Mgb3V0Z29pbmcgcXVldWUuIFRoZXkganVzdCBzZXQgdGhlCis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkcyBvZiBhICZ2NGwyLWJ1ZmZlcjsgYXMgYWJvdmUsIHdoZW4gPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+CitpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBmaWxscyB0aGUKK3JlbWFpbmluZyBmaWVsZHMgb3IgcmV0dXJucyBhbiBlcnJvciBjb2RlLjwvcGFyYT4KKworICAgIDxwYXJhPkJ5IGRlZmF1bHQgPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+IGJsb2NrcyB3aGVuIG5vCitidWZmZXIgaXMgaW4gdGhlIG91dGdvaW5nIHF1ZXVlLiBXaGVuIHRoZQorPGNvbnN0YW50Pk9fTk9OQkxPQ0s8L2NvbnN0YW50PiBmbGFnIHdhcyBnaXZlbiB0byB0aGUgJmZ1bmMtb3BlbjsKK2Z1bmN0aW9uLCA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gcmV0dXJucyBpbW1lZGlhdGVseQord2l0aCBhbiAmRUFHQUlOOyB3aGVuIG5vIGJ1ZmZlciBpcyBhdmFpbGFibGUuPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIDxzdHJ1Y3RuYW1lPnY0bDJfYnVmZmVyPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgaXMKK3NwZWNpZmllZCBpbiA8eHJlZiBsaW5rZW5kPSJidWZmZXIiIC8+LjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUFHQUlOPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk5vbi1ibG9ja2luZyBJL08gaGFzIGJlZW4gc2VsZWN0ZWQgdXNpbmcKKzxjb25zdGFudD5PX05PTkJMT0NLPC9jb25zdGFudD4gYW5kIG5vIGJ1ZmZlciB3YXMgaW4gdGhlIG91dGdvaW5nCitxdWV1ZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYnVmZmVyIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgbm90CitzdXBwb3J0ZWQsIG9yIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBpcyBvdXQgb2YgYm91bmRzLAorb3Igbm8gYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHlldCwgb3IgdGhlCis8c3RydWN0ZmllbGQ+dXNlcnB0cjwvc3RydWN0ZmllbGQ+IG9yCis8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gYXJlIGludmFsaWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FTk9NRU08L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+Tm90IGVub3VnaCBwaHlzaWNhbCBvciB2aXJ0dWFsIG1lbW9yeSB3YXMgYXZhaWxhYmxlIHRvCitlbnF1ZXVlIGEgdXNlciBwb2ludGVyIGJ1ZmZlci48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4gZmFpbGVkIGR1ZSB0byBhbgoraW50ZXJuYWwgZXJyb3IuIENhbiBhbHNvIGluZGljYXRlIHRlbXBvcmFyeSBwcm9ibGVtcyBsaWtlIHNpZ25hbAorbG9zcy4gTm90ZSB0aGUgZHJpdmVyIG1pZ2h0IGRlcXVldWUgYW4gKGVtcHR5KSBidWZmZXIgZGVzcGl0ZQorcmV0dXJuaW5nIGFuIGVycm9yLCBvciBldmVuIHN0b3AgY2FwdHVyaW5nLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzNDk5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbApAQCAtMCwwICsxLDEwMyBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtcXVlcnlidWYiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfUVVFUllCVUY8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19RVUVSWUJVRjwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5RdWVyeSB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2J1ZmZlciAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1FVRVJZQlVGPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGlzIGlvY3RsIGlzIHBhcnQgb2YgdGhlIDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeQorbWFwcGluZzwvbGluaz4gSS9PIG1ldGhvZC4gSXQgY2FuIGJlIHVzZWQgdG8gcXVlcnkgdGhlIHN0YXR1cyBvZiBhCitidWZmZXIgYXQgYW55IHRpbWUgYWZ0ZXIgYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHdpdGggdGhlCismVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KKworICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQKKyAgICBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseQorJnY0bDItZm9ybWF0OyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIGFuZCB0aGUgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4KKyAgICBmaWVsZC4gVmFsaWQgaW5kZXggbnVtYmVycyByYW5nZSBmcm9tIHplcm8KK3RvIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgd2l0aCAmVklESU9DLVJFUUJVRlM7CisgICAgKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLgorQWZ0ZXIgY2FsbGluZyA8Y29uc3RhbnQ+VklESU9DX1FVRVJZQlVGPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8KKyAgICB0aGlzIHN0cnVjdHVyZSBkcml2ZXJzIHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGZpbGwgdGhlIHJlc3Qgb2YKK3RoZSBzdHJ1Y3R1cmUuPC9wYXJhPgorCisgICAgPHBhcmE+SW4gdGhlIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRoZQorPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4sCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PiBmbGFncyB3aWxsIGJlIHZhbGlkLiBUaGUKKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aWxsIGJlIHNldCB0bworPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiwgdGhlIDxzdHJ1Y3RmaWVsZD5tLm9mZnNldDwvc3RydWN0ZmllbGQ+Citjb250YWlucyB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBtZW1vcnksCit0aGUgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IGZpZWxkIGl0cyBzaXplLiBUaGUgZHJpdmVyIG1heQorb3IgbWF5IG5vdCBzZXQgdGhlIHJlbWFpbmluZyBmaWVsZHMgYW5kIGZsYWdzLCB0aGV5IGFyZSBtZWFuaW5nbGVzcyBpbgordGhpcyBjb250ZXh0LjwvcGFyYT4KKworICAgIDxwYXJhPlRoZSA8c3RydWN0bmFtZT52NGwyX2J1ZmZlcjwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGlzCisgICAgc3BlY2lmaWVkIGluIDx4cmVmIGxpbmtlbmQ9ImJ1ZmZlciIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGJ1ZmZlciA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGlzIG5vdAorc3VwcG9ydGVkLCBvciB0aGUgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnljYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnljYXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjdlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWNhcC54bWwKQEAgLTAsMCArMSwyODQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLXF1ZXJ5Y2FwIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX1FVRVJZQ0FQPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfUVVFUllDQVA8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UXVlcnkgZGV2aWNlIGNhcGFiaWxpdGllczwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfUVVFUllDQVA8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPkFsbCBWNEwyIGRldmljZXMgc3VwcG9ydCB0aGUKKzxjb25zdGFudD5WSURJT0NfUVVFUllDQVA8L2NvbnN0YW50PiBpb2N0bC4gSXQgaXMgdXNlZCB0byBpZGVudGlmeQora2VybmVsIGRldmljZXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWNhdGlvbiBhbmQgdG8gb2J0YWluCitpbmZvcm1hdGlvbiBhYm91dCBkcml2ZXIgYW5kIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIHRha2VzIGEKK3BvaW50ZXIgdG8gYSAmdjRsMi1jYXBhYmlsaXR5OyB3aGljaCBpcyBmaWxsZWQgYnkgdGhlIGRyaXZlci4gV2hlbiB0aGUKK2RyaXZlciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWNhdGlvbiB0aGUgaW9jdGwgcmV0dXJucyBhbgorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWNhcGFiaWxpdHkiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2NhcGFiaWxpdHk8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRyaXZlcjwvc3RydWN0ZmllbGQ+WzE2XTwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5OYW1lIG9mIHRoZSBkcml2ZXIsIGEgdW5pcXVlIE5VTC10ZXJtaW5hdGVkCitBU0NJSSBzdHJpbmcuIEZvciBleGFtcGxlOiAiYnR0diIuIERyaXZlciBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgY2FuCit1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byB2ZXJpZnkgdGhlIGRyaXZlciBpZGVudGl0eS4gSXQgaXMgYWxzbyB1c2VmdWwKK3RvIHdvcmsgYXJvdW5kIGtub3duIGJ1Z3MsIG9yIHRvIGlkZW50aWZ5IGRyaXZlcnMgaW4gZXJyb3IgcmVwb3J0cy4KK1RoZSBkcml2ZXIgdmVyc2lvbiBpcyBzdG9yZWQgaW4gdGhlIDxzdHJ1Y3RmaWVsZD52ZXJzaW9uPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkLjwvcGFyYT48cGFyYT5TdG9yaW5nIHN0cmluZ3MgaW4gZml4ZWQgc2l6ZWQgYXJyYXlzIGlzIGJhZAorcHJhY3RpY2UgYnV0IHVuYXZvaWRhYmxlIGhlcmUuIERyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQgdGFrZQorcHJlY2F1dGlvbnMgdG8gbmV2ZXIgcmVhZCBvciB3cml0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgYW5kIHRvCittYWtlIHN1cmUgdGhlIHN0cmluZ3MgYXJlIHByb3Blcmx5IE5VTC10ZXJtaW5hdGVkLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2FyZDwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5OYW1lIG9mIHRoZSBkZXZpY2UsIGEgTlVMLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLgorRm9yIGV4YW1wbGU6ICJZb3lvZHluZSBUVi9GTSIuIE9uZSBkcml2ZXIgbWF5IHN1cHBvcnQgZGlmZmVyZW50IGJyYW5kcworb3IgbW9kZWxzIG9mIHZpZGVvIGhhcmR3YXJlLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB1c2VycywKK2ZvciBleGFtcGxlIGluIGEgbWVudSBvZiBhdmFpbGFibGUgZGV2aWNlcy4gU2luY2UgbXVsdGlwbGUgVFYgY2FyZHMgb2YKK3RoZSBzYW1lIGJyYW5kIG1heSBiZSBpbnN0YWxsZWQgd2hpY2ggYXJlIHN1cHBvcnRlZCBieSB0aGUgc2FtZQorZHJpdmVyLCB0aGlzIG5hbWUgc2hvdWxkIGJlIGNvbWJpbmVkIHdpdGggdGhlIGNoYXJhY3RlciBkZXZpY2UgZmlsZQorbmFtZSAoJmVnOyA8ZmlsZW5hbWU+L2Rldi92aWRlbzI8L2ZpbGVuYW1lPikgb3IgdGhlCis8c3RydWN0ZmllbGQ+YnVzX2luZm88L3N0cnVjdGZpZWxkPiBzdHJpbmcgdG8gYXZvaWQKK2FtYmlndWl0aWVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3U4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5idXNfaW5mbzwvc3RydWN0ZmllbGQ+WzMyXTwvZW50cnk+CisJICAgIDxlbnRyeT5Mb2NhdGlvbiBvZiB0aGUgZGV2aWNlIGluIHRoZSBzeXN0ZW0sIGEKK05VTC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4gRm9yIGV4YW1wbGU6ICJQQ0kgU2xvdCA0Ii4gVGhpcworaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZXJzLCB0byBkaXN0aW5ndWlzaCBtdWx0aXBsZQoraWRlbnRpY2FsIGRldmljZXMuIElmIG5vIHN1Y2ggaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRoZSBmaWVsZCBtYXkKK3NpbXBseSBjb3VudCB0aGUgZGV2aWNlcyBjb250cm9sbGVkIGJ5IHRoZSBkcml2ZXIsIG9yIGNvbnRhaW4gdGhlCitlbXB0eSBzdHJpbmcgKDxzdHJ1Y3RmaWVsZD5idXNfaW5mbzwvc3RydWN0ZmllbGQ+WzBdID0gMCkuPCEtLSBYWFggcGNpX2Rldi0+c2xvdF9uYW1lIGV4YW1wbGUgLS0+PC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52ZXJzaW9uPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PHBhcmE+VmVyc2lvbiBudW1iZXIgb2YgdGhlIGRyaXZlci4gVG9nZXRoZXIgd2l0aAordGhlIDxzdHJ1Y3RmaWVsZD5kcml2ZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0aGlzIGlkZW50aWZpZXMgYQorcGFydGljdWxhciBkcml2ZXIuIFRoZSB2ZXJzaW9uIG51bWJlciBpcyBmb3JtYXR0ZWQgdXNpbmcgdGhlCis8Y29uc3RhbnQ+S0VSTkVMX1ZFUlNJT04oKTwvY29uc3RhbnQ+IG1hY3JvOjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImhzcGFuIj48cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpICZsdDsmbHQ7IDE2KSArICgoYikgJmx0OyZsdDsgOCkgKyAoYykpCisKK19fdTMyIHZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCA4LCAxKTsKKworcHJpbnRmICgiVmVyc2lvbjogJXUuJXUuJXVcbiIsCisJKHZlcnNpb24gJmd0OyZndDsgMTYpICZhbXA7IDB4RkYsCisJKHZlcnNpb24gJmd0OyZndDsgOCkgJmFtcDsgMHhGRiwKKwkgdmVyc2lvbiAmYW1wOyAweEZGKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+RGV2aWNlIGNhcGFiaWxpdGllcywgc2VlIDx4cmVmCisJCWxpbmtlbmQ9ImRldmljZS1jYXBhYmlsaXRpZXMiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoaXMgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImRldmljZS1jYXBhYmlsaXRpZXMiPgorICAgICAgPHRpdGxlPkRldmljZSBDYXBhYmlsaXRpZXMgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rCitsaW5rZW5kPSJjYXB0dXJlIj5WaWRlbyBDYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rCitsaW5rZW5kPSJvdXRwdXQiPlZpZGVvIE91dHB1dDwvbGluaz4gaW50ZXJmYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMDQ8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsKK2xpbmtlbmQ9Im92ZXJsYXkiPlZpZGVvIE92ZXJsYXk8L2xpbms+IGludGVyZmFjZS4gQSB2aWRlbyBvdmVybGF5IGRldmljZQordHlwaWNhbGx5IHN0b3JlcyBjYXB0dXJlZCBpbWFnZXMgZGlyZWN0bHkgaW4gdGhlIHZpZGVvIG1lbW9yeSBvZiBhCitncmFwaGljcyBjYXJkLCB3aXRoIGhhcmR3YXJlIGNsaXBwaW5nIGFuZCBzY2FsaW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPlJhdworVkJJIENhcHR1cmU8L2xpbms+IGludGVyZmFjZSwgcHJvdmlkaW5nIFRlbGV0ZXh0IGFuZCBDbG9zZWQgQ2FwdGlvbgorZGF0YS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDIwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InJhdy12YmkiPlJhdyBWQkkgT3V0cHV0PC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDQwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InNsaWNlZCI+U2xpY2VkIFZCSSBDYXB0dXJlPC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwODA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsgbGlua2VuZD0ic2xpY2VkIj5TbGljZWQgVkJJIE91dHB1dDwvbGluaz4gaW50ZXJmYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfUkRTX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMTAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIDxsaW5rIGxpbmtlbmQ9InJkcyI+UkRTPC9saW5rPiBpbnRlcmZhY2UuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAyMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsgbGlua2VuZD0ib3NkIj5WaWRlbworT3V0cHV0IE92ZXJsYXk8L2xpbms+IChPU0QpIGludGVyZmFjZS4gVW5saWtlIHRoZSA8d29yZGFzd29yZD5WaWRlbworT3ZlcmxheTwvd29yZGFzd29yZD4gaW50ZXJmYWNlLCB0aGlzIGlzIGEgc2Vjb25kYXJ5IGZ1bmN0aW9uIG9mIHZpZGVvCitvdXRwdXQgZGV2aWNlcyBhbmQgb3ZlcmxheXMgYW4gaW1hZ2Ugb250byBhbiBvdXRnb2luZyB2aWRlbyBzaWduYWwuCitXaGVuIHRoZSBkcml2ZXIgc2V0cyB0aGlzIGZsYWcsIGl0IG11c3QgY2xlYXIgdGhlCis8Y29uc3RhbnQ+VjRMMl9DQVBfVklERU9fT1ZFUkxBWTwvY29uc3RhbnQ+IGZsYWcgYW5kIHZpY2UKK3ZlcnNhLjxmb290bm90ZT48cGFyYT5UaGUgJnY0bDItZnJhbWVidWZmZXI7IGxhY2tzIGFuCismdjRsMi1idWYtdHlwZTsgZmllbGQsIHRoZXJlZm9yZSB0aGUgdHlwZSBvZiBvdmVybGF5IGlzIGltcGxpZWQgYnkgdGhlCitkcml2ZXIgY2FwYWJpbGl0aWVzLjwvcGFyYT48L2Zvb3Rub3RlPjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfSFdfRlJFUV9TRUVLPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMDQwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSAmVklESU9DLVMtSFctRlJFUS1TRUVLOyBpb2N0bCBmb3IKK2hhcmR3YXJlIGZyZXF1ZW5jeSBzZWVraW5nLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfVFVORVI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDEwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2UgaGFzIHNvbWUgc29ydCBvZiB0dW5lciB0bworcmVjZWl2ZSBSRi1tb2R1bGF0ZWQgdmlkZW8gc2lnbmFscy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK3R1bmVyIHByb2dyYW1taW5nIHNlZQorPHhyZWYgbGlua2VuZD0idHVuZXIiIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfQVVESU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDIwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBkZXZpY2UgaGFzIGF1ZGlvIGlucHV0cyBvciBvdXRwdXRzLiBJdCBtYXkgb3IKK21heSBub3Qgc3VwcG9ydCBhdWRpbyByZWNvcmRpbmcgb3IgcGxheWJhY2ssIGluIFBDTSBvciBjb21wcmVzc2VkCitmb3JtYXRzLiBQQ00gYXVkaW8gc3VwcG9ydCBtdXN0IGJlIGltcGxlbWVudGVkIGFzIEFMU0Egb3IgT1NTCitpbnRlcmZhY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF1ZGlvIGlucHV0cyBhbmQgb3V0cHV0cyBzZWUgPHhyZWYKKwkJbGlua2VuZD0iYXVkaW8iIC8+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfUkFESU88L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDQwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgYSByYWRpbyByZWNlaXZlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX01PRFVMQVRPUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwODAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBoYXMgc29tZSBzb3J0IG9mIG1vZHVsYXRvciB0bworZW1pdCBSRi1tb2R1bGF0ZWQgdmlkZW8vYXVkaW8gc2lnbmFscy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK21vZHVsYXRvciBwcm9ncmFtbWluZyBzZWUKKzx4cmVmIGxpbmtlbmQ9InR1bmVyIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0FQX1JFQURXUklURTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDEwMDAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsKK2xpbmtlbmQ9InJ3Ij5yZWFkKCk8L2xpbms+IGFuZC9vciA8bGluayBsaW5rZW5kPSJydyI+d3JpdGUoKTwvbGluaz4KK0kvTyBtZXRob2RzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfQVNZTkNJTzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDIwMDAwMDA8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRldmljZSBzdXBwb3J0cyB0aGUgPGxpbmsKK2xpbmtlbmQ9ImFzeW5jIj5hc3luY2hyb25vdXM8L2xpbms+IEkvTyBtZXRob2RzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DQVBfU1RSRUFNSU5HPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwNDAwMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSA8bGluaworbGlua2VuZD0ibW1hcCI+c3RyZWFtaW5nPC9saW5rPiBJL08gbWV0aG9kLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkZXZpY2UgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzCitzcGVjaWZpY2F0aW9uLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWN0cmwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzZmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWN0cmwueG1sCkBAIC0wLDAgKzEsNDI4IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1xdWVyeWN0cmwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfUVVFUllDVFJMLCBWSURJT0NfUVVFUllNRU5VPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfUVVFUllDVFJMPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19RVUVSWU1FTlU8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+RW51bWVyYXRlIGNvbnRyb2xzIGFuZCBtZW51IGNvbnRyb2wgaXRlbXM8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfcXVlcnljdHJsICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1FVRVJZQ1RSTCwgVklESU9DX1FVRVJZTUVOVTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VG8gcXVlcnkgdGhlIGF0dHJpYnV0ZXMgb2YgYSBjb250cm9sIGFwcGxpY2F0aW9ucyBzZXQgdGhlCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhICZ2NGwyLXF1ZXJ5Y3RybDsgYW5kIGNhbGwgdGhlCis8Y29uc3RhbnQ+VklESU9DX1FVRVJZQ1RSTDwvY29uc3RhbnQ+IGlvY3RsIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKK3N0cnVjdHVyZS4gVGhlIGRyaXZlciBmaWxscyB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yIHJldHVybnMgYW4KKyZFSU5WQUw7IHdoZW4gdGhlIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IGlzIGludmFsaWQuPC9wYXJhPgorCisgICAgPHBhcmE+SXQgaXMgcG9zc2libGUgdG8gZW51bWVyYXRlIGNvbnRyb2xzIGJ5IGNhbGxpbmcKKzxjb25zdGFudD5WSURJT0NfUVVFUllDVFJMPC9jb25zdGFudD4gd2l0aCBzdWNjZXNzaXZlCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiB2YWx1ZXMgc3RhcnRpbmcgZnJvbQorPGNvbnN0YW50PlY0TDJfQ0lEX0JBU0U8L2NvbnN0YW50PiB1cCB0byBhbmQgZXhjbHVzaXZlCis8Y29uc3RhbnQ+VjRMMl9DSURfQkFTRV9MQVNUUDE8L2NvbnN0YW50Pi4gRHJpdmVycyBtYXkgcmV0dXJuCis8ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPiBpZiBhIGNvbnRyb2wgaW4gdGhpcyByYW5nZSBpcyBub3QKK3N1cHBvcnRlZC4gRnVydGhlciBhcHBsaWNhdGlvbnMgY2FuIGVudW1lcmF0ZSBwcml2YXRlIGNvbnRyb2xzLCB3aGljaAorYXJlIG5vdCBkZWZpbmVkIGluIHRoaXMgc3BlY2lmaWNhdGlvbiwgYnkgc3RhcnRpbmcgYXQKKzxjb25zdGFudD5WNEwyX0NJRF9QUklWQVRFX0JBU0U8L2NvbnN0YW50PiBhbmQgaW5jcmVtZW50aW5nCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiB1bnRpbCB0aGUgZHJpdmVyIHJldHVybnMKKzxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+LjwvcGFyYT4KKworICAgIDxwYXJhPkluIGJvdGggY2FzZXMsIHdoZW4gdGhlIGRyaXZlciBzZXRzIHRoZQorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4gZmxhZyBpbiB0aGUKKzxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRoaXMgY29udHJvbCBpcyBwZXJtYW5lbnRseQorZGlzYWJsZWQgYW5kIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi48Zm9vdG5vdGU+CisJPHBhcmE+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD4gd2FzCitpbnRlbmRlZCBmb3IgdHdvIHB1cnBvc2VzOiBEcml2ZXJzIGNhbiBza2lwIHByZWRlZmluZWQgY29udHJvbHMgbm90CitzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlIChhbHRob3VnaCByZXR1cm5pbmcgRUlOVkFMIHdvdWxkIGRvIGFzCit3ZWxsKSwgb3IgZGlzYWJsZSBwcmVkZWZpbmVkIGFuZCBwcml2YXRlIGNvbnRyb2xzIGFmdGVyIGhhcmR3YXJlCitkZXRlY3Rpb24gd2l0aG91dCB0aGUgdHJvdWJsZSBvZiByZW9yZGVyaW5nIGNvbnRyb2wgYXJyYXlzIGFuZCBpbmRpY2VzCisoRUlOVkFMIGNhbm5vdCBiZSB1c2VkIHRvIHNraXAgcHJpdmF0ZSBjb250cm9scyBiZWNhdXNlIGl0IHdvdWxkCitwcmVtYXR1cmVseSBlbmQgdGhlIGVudW1lcmF0aW9uKS48L3BhcmE+PC9mb290bm90ZT48L3BhcmE+CisKKyAgICA8cGFyYT5XaGVuIHRoZSBhcHBsaWNhdGlvbiBPUnMgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gd2l0aAorPGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDwvY29uc3RhbnQ+IHRoZSBkcml2ZXIgcmV0dXJucyB0aGUKK25leHQgc3VwcG9ydGVkIGNvbnRyb2wsIG9yIDxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+IGlmIHRoZXJlIGlzCitub25lLiBEcml2ZXJzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IHRoaXMgZmxhZyB5ZXQgYWx3YXlzIHJldHVybgorPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4uPC9wYXJhPgorCisgICAgPHBhcmE+QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCBmb3IgbWVudSBjb250cm9sczogdGhlCituYW1lcyBvZiB0aGUgbWVudSBpdGVtcy4gVG8gcXVlcnkgdGhlbSBhcHBsaWNhdGlvbnMgc2V0IHRoZQorPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gYW5kIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CitmaWVsZHMgb2YgJnY0bDItcXVlcnltZW51OyBhbmQgY2FsbCB0aGUKKzxjb25zdGFudD5WSURJT0NfUVVFUllNRU5VPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlLiBUaGUgZHJpdmVyIGZpbGxzIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgb3IgcmV0dXJucyBhbgorJkVJTlZBTDsgd2hlbiB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gb3IKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGlzIGludmFsaWQuIE1lbnUgaXRlbXMgYXJlIGVudW1lcmF0ZWQKK2J5IGNhbGxpbmcgPGNvbnN0YW50PlZJRElPQ19RVUVSWU1FTlU8L2NvbnN0YW50PiB3aXRoIHN1Y2Nlc3NpdmUKKzxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IHZhbHVlcyBmcm9tICZ2NGwyLXF1ZXJ5Y3RybDsKKzxzdHJ1Y3RmaWVsZD5taW5pbXVtPC9zdHJ1Y3RmaWVsZD4gKDApIHRvCis8c3RydWN0ZmllbGQ+bWF4aW11bTwvc3RydWN0ZmllbGQ+LCBpbmNsdXNpdmUuPC9wYXJhPgorCisgICAgPHBhcmE+U2VlIGFsc28gdGhlIGV4YW1wbGVzIGluIDx4cmVmIGxpbmtlbmQ9ImNvbnRyb2wiIC8+LjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1xdWVyeWN0cmwiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3F1ZXJ5Y3RybDwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWRlbnRpZmllcyB0aGUgY29udHJvbCwgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi4gU2VlCis8eHJlZiBsaW5rZW5kPSJjb250cm9sLWlkIiAvPiBmb3IgcHJlZGVmaW5lZCBJRHMuIFdoZW4gdGhlIElEIGlzIE9SZWQKK3dpdGggVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMIHRoZSBkcml2ZXIgY2xlYXJzIHRoZSBmbGFnIGFuZCByZXR1cm5zCit0aGUgZmlyc3QgY29udHJvbCB3aXRoIGEgaGlnaGVyIElELiBEcml2ZXJzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IHRoaXMKK2ZsYWcgeWV0IGFsd2F5cyByZXR1cm4gYW4gJkVJTlZBTDsuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLWN0cmwtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UeXBlIG9mIGNvbnRyb2wsIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJ2NGwyLWN0cmwtdHlwZSIgLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgY29udHJvbCwgYSBOVUwtdGVybWluYXRlZCBBU0NJSQorc3RyaW5nLiBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkIGZvciB0aGUgdXNlci48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1pbmltdW08L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5NaW5pbXVtIHZhbHVlLCBpbmNsdXNpdmUuIFRoaXMgZmllbGQgZ2l2ZXMgYSBsb3dlcgorYm91bmQgZm9yIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9JTlRFR0VSPC9jb25zdGFudD4gY29udHJvbHMgYW5kIHRoZQorbG93ZXN0IHZhbGlkIGluZGV4IChhbHdheXMgMCkgZm9yIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9NRU5VPC9jb25zdGFudD4gY29udHJvbHMuCitGb3IgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX1NUUklORzwvY29uc3RhbnQ+IGNvbnRyb2xzIHRoZSBtaW5pbXVtIHZhbHVlCitnaXZlcyB0aGUgbWluaW11bSBsZW5ndGggb2YgdGhlIHN0cmluZy4gVGhpcyBsZW5ndGggPGVtcGhhc2lzPmRvZXMgbm90IGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nCit6ZXJvPC9lbXBoYXNpcz4uIEl0IG1heSBub3QgYmUgdmFsaWQgZm9yIGFueSBvdGhlciB0eXBlIG9mIGNvbnRyb2wsIGluY2x1ZGluZworPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDwvY29uc3RhbnQ+IGNvbnRyb2xzLiBOb3RlIHRoYXQgdGhpcyBpcyBhCitzaWduZWQgdmFsdWUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5tYXhpbXVtPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+TWF4aW11bSB2YWx1ZSwgaW5jbHVzaXZlLiBUaGlzIGZpZWxkIGdpdmVzIGFuIHVwcGVyCitib3VuZCBmb3IgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI8L2NvbnN0YW50PiBjb250cm9scyBhbmQgdGhlCitoaWdoZXN0IHZhbGlkIGluZGV4IGZvciA8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfTUVOVTwvY29uc3RhbnQ+Citjb250cm9scy4KK0ZvciA8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfU1RSSU5HPC9jb25zdGFudD4gY29udHJvbHMgdGhlIG1heGltdW0gdmFsdWUKK2dpdmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgc3RyaW5nLiBUaGlzIGxlbmd0aCA8ZW1waGFzaXM+ZG9lcyBub3QgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcKK3plcm88L2VtcGhhc2lzPi4gSXQgbWF5IG5vdCBiZSB2YWxpZCBmb3IgYW55IG90aGVyIHR5cGUgb2YgY29udHJvbCwgaW5jbHVkaW5nCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0PC9jb25zdGFudD4gY29udHJvbHMuIE5vdGUgdGhhdCB0aGlzIGlzIGEKK3NpZ25lZCB2YWx1ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48cGFyYT5UaGlzIGZpZWxkIGdpdmVzIGEgc3RlcCBzaXplIGZvcgorPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI8L2NvbnN0YW50PiBjb250cm9scy4gRm9yCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfU1RSSU5HPC9jb25zdGFudD4gY29udHJvbHMgdGhpcyBmaWVsZCByZWZlcnMgdG8KK3RoZSBzdHJpbmcgbGVuZ3RoIHRoYXQgaGFzIHRvIGJlIGEgbXVsdGlwbGUgb2YgdGhpcyBzdGVwIHNpemUuCitJdCBtYXkgbm90IGJlIHZhbGlkIGZvciBhbnkgb3RoZXIgdHlwZSBvZiBjb250cm9sLCBpbmNsdWRpbmcKKzxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQ8L2NvbnN0YW50PgorY29udHJvbHMuPC9wYXJhPjxwYXJhPkdlbmVyYWxseSBkcml2ZXJzIHNob3VsZCBub3Qgc2NhbGUgaGFyZHdhcmUKK2NvbnRyb2wgdmFsdWVzLiBJdCBtYXkgYmUgbmVjZXNzYXJ5IGZvciBleGFtcGxlIHdoZW4gdGhlCis8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IG9yIDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+IGltcGx5CithIHBhcnRpY3VsYXIgdW5pdCBhbmQgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IGFjY2VwdHMgb25seSBtdWx0aXBsZXMgb2YKK3NhaWQgdW5pdC4gSWYgc28sIGRyaXZlcnMgbXVzdCB0YWtlIGNhcmUgdmFsdWVzIGFyZSBwcm9wZXJseSByb3VuZGVkCit3aGVuIHNjYWxpbmcsIHN1Y2ggdGhhdCBlcnJvcnMgd2lsbCBub3QgYWNjdW11bGF0ZSBvbiByZXBlYXRlZAorcmVhZC13cml0ZSBjeWNsZXMuPC9wYXJhPjxwYXJhPlRoaXMgZmllbGQgZ2l2ZXMgdGhlIHNtYWxsZXN0IGNoYW5nZSBvZgorYW4gaW50ZWdlciBjb250cm9sIGFjdHVhbGx5IGFmZmVjdGluZyBoYXJkd2FyZS4gT2Z0ZW4gdGhlIGluZm9ybWF0aW9uCitpcyBuZWVkZWQgd2hlbiB0aGUgdXNlciBjYW4gY2hhbmdlIGNvbnRyb2xzIGJ5IGtleWJvYXJkIG9yIEdVSQorYnV0dG9ucywgcmF0aGVyIHRoYW4gYSBzbGlkZXIuIFdoZW4gZm9yIGV4YW1wbGUgYSBoYXJkd2FyZSByZWdpc3RlcgorYWNjZXB0cyB2YWx1ZXMgMC01MTEgYW5kIHRoZSBkcml2ZXIgcmVwb3J0cyAwLTY1NTM1LCBzdGVwIHNob3VsZCBiZQorMTI4LjwvcGFyYT48cGFyYT5Ob3RlIHRoYXQgYWx0aG91Z2ggc2lnbmVkLCB0aGUgc3RlcCB2YWx1ZSBpcyBzdXBwb3NlZCB0bworYmUgYWx3YXlzIHBvc2l0aXZlLjwvcGFyYT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRlZmF1bHRfdmFsdWU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgZGVmYXVsdCB2YWx1ZSBvZiBhCis8Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjwvY29uc3RhbnQ+LAorPGNvbnN0YW50Pl9CT09MRUFOPC9jb25zdGFudD4gb3IgPGNvbnN0YW50Pl9NRU5VPC9jb25zdGFudD4gY29udHJvbC4KK05vdCB2YWxpZCBmb3Igb3RoZXIgdHlwZXMgb2YgY29udHJvbHMuIERyaXZlcnMgcmVzZXQgY29udHJvbHMgb25seQord2hlbiB0aGUgZHJpdmVyIGlzIGxvYWRlZCwgbm90IGxhdGVyLCBpbiBwYXJ0aWN1bGFyIG5vdCB3aGVuIHRoZQorZnVuYy1vcGVuOyBpcyBjYWxsZWQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkNvbnRyb2wgZmxhZ3MsIHNlZSA8eHJlZgorCQlsaW5rZW5kPSJjb250cm9sLWZsYWdzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIG11c3Qgc2V0Cit0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItcXVlcnltZW51Ij4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9xdWVyeW1lbnU8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PklkZW50aWZpZXMgdGhlIGNvbnRyb2wsIHNldCBieSB0aGUgYXBwbGljYXRpb24KK2Zyb20gdGhlIHJlc3BlY3RpdmUgJnY0bDItcXVlcnljdHJsOworPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkluZGV4IG9mIHRoZSBtZW51IGl0ZW0sIHN0YXJ0aW5nIGF0IHplcm8sIHNldCBieQorCSAgICB0aGUgYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPlszMl08L2VudHJ5PgorCSAgICA8ZW50cnk+TmFtZSBvZiB0aGUgbWVudSBpdGVtLCBhIE5VTC10ZXJtaW5hdGVkIEFTQ0lJCitzdHJpbmcuIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgbXVzdCBzZXQKK3RoZSBhcnJheSB0byB6ZXJvLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1jdHJsLXR5cGUiPgorICAgICAgPHRpdGxlPmVudW0gdjRsMl9jdHJsX3R5cGU8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI1IiBhbGlnbj0ibGVmdCI+CisJPGNvbHNwZWMgY29sd2lkdGg9IjMwKiIgLz4KKwk8Y29sc3BlYyBjb2x3aWR0aD0iNSoiIGFsaWduPSJjZW50ZXIiIC8+CisJPGNvbHNwZWMgY29sd2lkdGg9IjUqIiBhbGlnbj0iY2VudGVyIiAvPgorCTxjb2xzcGVjIGNvbHdpZHRoPSI1KiIgYWxpZ249ImNlbnRlciIgLz4KKwk8Y29sc3BlYyBjb2x3aWR0aD0iNTUqIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5UeXBlPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5taW5pbXVtPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnN0ZXA8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWF4aW11bTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmFueTwvZW50cnk+CisJICAgIDxlbnRyeT5hbnk8L2VudHJ5PgorCSAgICA8ZW50cnk+YW55PC9lbnRyeT4KKwkgICAgPGVudHJ5PkFuIGludGVnZXItdmFsdWVkIGNvbnRyb2wgcmFuZ2luZyBmcm9tIG1pbmltdW0gdG8KK21heGltdW0gaW5jbHVzaXZlLiBUaGUgc3RlcCB2YWx1ZSBpbmRpY2F0ZXMgdGhlIGluY3JlbWVudCBiZXR3ZWVuCit2YWx1ZXMgd2hpY2ggYXJlIGFjdHVhbGx5IGRpZmZlcmVudCBvbiB0aGUgaGFyZHdhcmUuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9CT09MRUFOPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4xPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBib29sZWFuLXZhbHVlZCBjb250cm9sLiBaZXJvIGNvcnJlc3BvbmRzIHRvCisiZGlzYWJsZWQiLCBhbmQgb25lIG1lYW5zICJlbmFibGVkIi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX01FTlU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+Ti0xPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBjb250cm9sIGhhcyBhIG1lbnUgb2YgTiBjaG9pY2VzLiBUaGUgbmFtZXMgb2YKK3RoZSBtZW51IGl0ZW1zIGNhbiBiZSBlbnVtZXJhdGVkIHdpdGggdGhlCis8Y29uc3RhbnQ+VklESU9DX1FVRVJZTUVOVTwvY29uc3RhbnQ+IGlvY3RsLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQlVUVE9OPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PjA8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBjb250cm9sIHdoaWNoIHBlcmZvcm1zIGFuIGFjdGlvbiB3aGVuIHNldC4KK0RyaXZlcnMgbXVzdCBpZ25vcmUgdGhlIHZhbHVlIHBhc3NlZCB3aXRoCis8Y29uc3RhbnQ+VklESU9DX1NfQ1RSTDwvY29uc3RhbnQ+IGFuZCByZXR1cm4gYW4gJkVJTlZBTDsgb24gYQorPGNvbnN0YW50PlZJRElPQ19HX0NUUkw8L2NvbnN0YW50PiBhdHRlbXB0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0PC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+bi9hPC9lbnRyeT4KKwkgICAgPGVudHJ5Pm4vYTwvZW50cnk+CisJICAgIDxlbnRyeT5uL2E8L2VudHJ5PgorCSAgICA8ZW50cnk+QSA2NC1iaXQgaW50ZWdlciB2YWx1ZWQgY29udHJvbC4gTWluaW11bSwgbWF4aW11bQorYW5kIHN0ZXAgc2l6ZSBjYW5ub3QgYmUgcXVlcmllZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX1NUUklORzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PiZnZTsgMDwvZW50cnk+CisJICAgIDxlbnRyeT4mZ2U7IDE8L2VudHJ5PgorCSAgICA8ZW50cnk+JmdlOyAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHN0cmluZyBsZW5ndGhzLiBUaGUgc3RlcCBzaXplCittZWFucyB0aGF0IHRoZSBzdHJpbmcgbXVzdCBiZSAobWluaW11bSArIE4gKiBzdGVwKSBjaGFyYWN0ZXJzIGxvbmcgZm9yCitOICZnZTsgMC4gVGhlc2UgbGVuZ3RocyBkbyBub3QgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgemVybywgc28gaW4gb3JkZXIgdG8KK3Bhc3MgYSBzdHJpbmcgb2YgbGVuZ3RoIDggdG8gJlZJRElPQy1TLUVYVC1DVFJMUzsgeW91IG5lZWQgdG8gc2V0IHRoZQorPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiAmdjRsMi1leHQtY29udHJvbDsgdG8gOS4gRm9yICZWSURJT0MtRy1FWFQtQ1RSTFM7IHlvdSBjYW4KK3NldCB0aGUgPHN0cnVjdGZpZWxkPnNpemU8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byA8c3RydWN0ZmllbGQ+bWF4aW11bTwvc3RydWN0ZmllbGQ+ICsgMS4KK1doaWNoIGNoYXJhY3RlciBlbmNvZGluZyBpcyB1c2VkIHdpbGwgZGVwZW5kIG9uIHRoZSBzdHJpbmcgY29udHJvbCBpdHNlbGYgYW5kCitzaG91bGQgYmUgcGFydCBvZiB0aGUgY29udHJvbCBkb2N1bWVudGF0aW9uLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pm4vYTwvZW50cnk+CisJICAgIDxlbnRyeT5uL2E8L2VudHJ5PgorCSAgICA8ZW50cnk+bi9hPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgbm90IGEgY29udHJvbC4gV2hlbgorPGNvbnN0YW50PlZJRElPQ19RVUVSWUNUUkw8L2NvbnN0YW50PiBpcyBjYWxsZWQgd2l0aCBhIGNvbnRyb2wgSUQKK2VxdWFsIHRvIGEgY29udHJvbCBjbGFzcyBjb2RlIChzZWUgPHhyZWYgbGlua2VuZD0iY3RybC1jbGFzcyIgLz4pLCB0aGUKK2lvY3RsIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgY2xhc3MgYW5kIHRoaXMgY29udHJvbCB0eXBlLgorT2xkZXIgZHJpdmVycyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUgcmV0dXJuIGFuCismRUlOVkFMOy48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImNvbnRyb2wtZmxhZ3MiPgorICAgICAgPHRpdGxlPkNvbnRyb2wgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgY29udHJvbCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCBhbmQgc2hvdWxkIGJlCitpZ25vcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gQW55IGF0dGVtcHQgdG8gY2hhbmdlIHRoZSBjb250cm9sIHdpbGwKK3Jlc3VsdCBpbiBhbiAmRUlOVkFMOy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBjb250cm9sIGlzIHRlbXBvcmFyaWx5IHVuY2hhbmdlYWJsZSwgZm9yCitleGFtcGxlIGJlY2F1c2UgYW5vdGhlciBhcHBsaWNhdGlvbiB0b29rIG92ZXIgY29udHJvbCBvZiB0aGUKK3Jlc3BlY3RpdmUgcmVzb3VyY2UuIFN1Y2ggY29udHJvbHMgbWF5IGJlIGRpc3BsYXllZCBzcGVjaWFsbHkgaW4gYQordXNlciBpbnRlcmZhY2UuIEF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgY29udHJvbCBtYXkgcmVzdWx0IGluIGFuCismRUJVU1k7LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgY29udHJvbCBpcyBwZXJtYW5lbnRseSByZWFkYWJsZSBvbmx5LiBBbnkKK2F0dGVtcHQgdG8gY2hhbmdlIHRoZSBjb250cm9sIHdpbGwgcmVzdWx0IGluIGFuICZFSU5WQUw7LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfVVBEQVRFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDA4PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgaGludCB0aGF0IGNoYW5naW5nIHRoaXMgY29udHJvbCBtYXkgYWZmZWN0IHRoZQordmFsdWUgb2Ygb3RoZXIgY29udHJvbHMgd2l0aGluIHRoZSBzYW1lIGNvbnRyb2wgY2xhc3MuIEFwcGxpY2F0aW9ucworc2hvdWxkIHVwZGF0ZSB0aGVpciB1c2VyIGludGVyZmFjZSBhY2NvcmRpbmdseS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgY29udHJvbCBpcyBub3QgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudAorY29uZmlndXJhdGlvbiBhbmQgc2hvdWxkIGJlIGRpc3BsYXllZCBhY2NvcmRpbmdseSBpbiBhIHVzZXIgaW50ZXJmYWNlLgorRm9yIGV4YW1wbGUgdGhlIGZsYWcgbWF5IGJlIHNldCBvbiBhIE1QRUcgYXVkaW8gbGV2ZWwgMiBiaXRyYXRlCitjb250cm9sIHdoZW4gTVBFRyBhdWRpbyBlbmNvZGluZyBsZXZlbCAxIHdhcyBzZWxlY3RlZCB3aXRoIGFub3RoZXIKK2NvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfRkxBR19TTElERVI8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMjA8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBoaW50IHRoYXQgdGhpcyBjb250cm9sIGlzIGJlc3QgcmVwcmVzZW50ZWQgYXMgYQorc2xpZGVyLWxpa2UgZWxlbWVudCBpbiBhIHVzZXIgaW50ZXJmYWNlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDA0MDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGNvbnRyb2wgaXMgcGVybWFuZW50bHkgd3JpdGFibGUgb25seS4gQW55CithdHRlbXB0IHRvIHJlYWQgdGhlIGNvbnRyb2wgd2lsbCByZXN1bHQgaW4gYW4gJkVBQ0NFUzsgZXJyb3IgY29kZS4gVGhpcworZmxhZyBpcyB0eXBpY2FsbHkgcHJlc2VudCBmb3IgcmVsYXRpdmUgY29udHJvbHMgb3IgYWN0aW9uIGNvbnRyb2xzIHdoZXJlCit3cml0aW5nIGEgdmFsdWUgd2lsbCBjYXVzZSB0aGUgZGV2aWNlIHRvIGNhcnJ5IG91dCBhIGdpdmVuIGFjdGlvbgorKCZlZzsgbW90b3IgY29udHJvbCkgYnV0IG5vIG1lYW5pbmdmdWwgdmFsdWUgY2FuIGJlIHJldHVybmVkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSAmdjRsMi1xdWVyeWN0cmw7IDxzdHJ1Y3RmaWVsZD5pZDwvc3RydWN0ZmllbGQ+CitpcyBpbnZhbGlkLiBUaGUgJnY0bDItcXVlcnltZW51OyA8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPiBvcgorPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVBQ0NFUzwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5BbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJlYWQgYSB3cml0ZS1vbmx5IGNvbnRyb2wuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE3ZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlzdGQueG1sCkBAIC0wLDAgKzEsODMgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLXF1ZXJ5c3RkIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+aW9jdGwgVklESU9DX1FVRVJZU1REPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfUVVFUllTVEQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+U2Vuc2UgdGhlIHZpZGVvIHN0YW5kYXJkIHJlY2VpdmVkIGJ5IHRoZSBjdXJyZW50CitpbnB1dDwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52NGwyX3N0ZF9pZCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorCTx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19RVUVSWVNURDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIGhhcmR3YXJlIG1heSBiZSBhYmxlIHRvIGRldGVjdCB0aGUgY3VycmVudCB2aWRlbworc3RhbmRhcmQgYXV0b21hdGljYWxseS4gVG8gZG8gc28sIGFwcGxpY2F0aW9ucyBjYWxsIDxjb25zdGFudD4KK1ZJRElPQ19RVUVSWVNURDwvY29uc3RhbnQ+IHdpdGggYSBwb2ludGVyIHRvIGEgJnY0bDItc3RkLWlkOyB0eXBlLiBUaGUKK2RyaXZlciBzdG9yZXMgaGVyZSBhIHNldCBvZiBjYW5kaWRhdGVzLCB0aGlzIGNhbiBiZSBhIHNpbmdsZSBmbGFnIG9yIGEKK3NldCBvZiBzdXBwb3J0ZWQgc3RhbmRhcmRzIGlmIGZvciBleGFtcGxlIHRoZSBoYXJkd2FyZSBjYW4gb25seQorZGlzdGluZ3Vpc2ggYmV0d2VlbiA1MCBhbmQgNjAgSHogc3lzdGVtcy4gV2hlbiBkZXRlY3Rpb24gaXMgbm90Citwb3NzaWJsZSBvciBmYWlscywgdGhlIHNldCBtdXN0IGNvbnRhaW4gYWxsIHN0YW5kYXJkcyBzdXBwb3J0ZWQgYnkgdGhlCitjdXJyZW50IHZpZGVvIGlucHV0IG9yIG91dHB1dC48L3BhcmE+CisKKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWIzODA4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKQEAgLTAsMCArMSwxNjAgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLXJlcWJ1ZnMiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfUkVRQlVGUzwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX1JFUUJVRlM8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+SW5pdGlhdGUgTWVtb3J5IE1hcHBpbmcgb3IgVXNlciBQb2ludGVyIEkvTzwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1JFUUJVRlM8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgaXMgdXNlZCB0byBpbml0aWF0ZSA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkKK21hcHBlZDwvbGluaz4gb3IgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4KK0kvTy4gTWVtb3J5IG1hcHBlZCBidWZmZXJzIGFyZSBsb2NhdGVkIGluIGRldmljZSBtZW1vcnkgYW5kIG11c3QgYmUKK2FsbG9jYXRlZCB3aXRoIHRoaXMgaW9jdGwgYmVmb3JlIHRoZXkgY2FuIGJlIG1hcHBlZCBpbnRvIHRoZQorYXBwbGljYXRpb24ncyBhZGRyZXNzIHNwYWNlLiBVc2VyIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBieQorYXBwbGljYXRpb25zIHRoZW1zZWx2ZXMsIGFuZCB0aGlzIGlvY3RsIGlzIG1lcmVseSB1c2VkIHRvIHN3aXRjaCB0aGUKK2RyaXZlciBpbnRvIHVzZXIgcG9pbnRlciBJL08gbW9kZS48L3BhcmE+CisKKyAgICA8cGFyYT5UbyBhbGxvY2F0ZSBkZXZpY2UgYnVmZmVycyBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aHJlZQorZmllbGRzIG9mIGEgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT4gc3RydWN0dXJlLgorVGhleSBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIHJlc3BlY3RpdmUKK3N0cmVhbSBvciBidWZmZXIgdHlwZSwgdGhlIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvCit0aGUgZGVzaXJlZCBudW1iZXIgb2YgYnVmZmVycywgYW5kIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorbXVzdCBiZSBzZXQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwKK2lzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvCithbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBidWZmZXJzIGFuZCBzdG9yZXMgdGhlIGFjdHVhbCBudW1iZXIKK2FsbG9jYXRlZCBpbiB0aGUgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIEl0IGNhbiBiZQorc21hbGxlciB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLCBldmVuIHplcm8sIHdoZW4gdGhlIGRyaXZlciBydW5zIG91dAorb2YgZnJlZSBtZW1vcnkuIEEgbGFyZ2VyIG51bWJlciBpcyBwb3NzaWJsZSB3aGVuIHRoZSBkcml2ZXIgcmVxdWlyZXMKK21vcmUgYnVmZmVycyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuPGZvb3Rub3RlPgorCTxwYXJhPkZvciBleGFtcGxlIHZpZGVvIG91dHB1dCByZXF1aXJlcyBhdCBsZWFzdCB0d28gYnVmZmVycywKK29uZSBkaXNwbGF5ZWQgYW5kIG9uZSBmaWxsZWQgYnkgdGhlIGFwcGxpY2F0aW9uLjwvcGFyYT4KKwk8L2Zvb3Rub3RlPiBXaGVuIG1lbW9yeSBtYXBwaW5nIEkvTyBpcyBub3Qgc3VwcG9ydGVkIHRoZSBpb2N0bAorcmV0dXJucyBhbiAmRUlOVkFMOy48L3BhcmE+CisKKyAgICA8cGFyYT5BcHBsaWNhdGlvbnMgY2FuIGNhbGwgPGNvbnN0YW50PlZJRElPQ19SRVFCVUZTPC9jb25zdGFudD4KK2FnYWluIHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMsIGhvd2V2ZXIgdGhpcyBjYW5ub3Qgc3VjY2VlZAord2hlbiBhbnkgYnVmZmVycyBhcmUgc3RpbGwgbWFwcGVkLiBBIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+Cit2YWx1ZSBvZiB6ZXJvIGZyZWVzIGFsbCBidWZmZXJzLCBhZnRlciBhYm9ydGluZyBvciBmaW5pc2hpbmcgYW55IERNQQoraW4gcHJvZ3Jlc3MsIGFuIGltcGxpY2l0ICZWSURJT0MtU1RSRUFNT0ZGOy4gPCEtLSBtaHM6IEkgc2VlIG5vCityZWFzb24gd2h5IG11bm1hcCgpcGluZyBvbmUgb3IgZXZlbiBhbGwgYnVmZmVycyBtdXN0IGltcGx5CitzdHJlYW1vZmYuLS0+PC9wYXJhPgorCisgICAgPHBhcmE+VG8gbmVnb3RpYXRlIHVzZXIgcG9pbnRlciBJL08sIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIG9ubHkKK3RoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCBzZXQKKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiB0bworPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwgaXMgY2FsbGVkCit3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHByZXBhcmVzIGZvciB1c2VyIHBvaW50ZXIKK0kvTywgd2hlbiB0aGlzIEkvTyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCB0aGUgaW9jdGwgcmV0dXJucyBhbgorJkVJTlZBTDsuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIG51bWJlciBvZiBidWZmZXJzIHJlcXVlc3RlZCBvciBncmFudGVkLiBUaGlzCitmaWVsZCBpcyBvbmx5IHVzZWQgd2hlbiA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gaXMgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UeXBlIG9mIHRoZSBzdHJlYW0gb3IgYnVmZmVycywgdGhpcyBpcyB0aGUgc2FtZQorYXMgdGhlICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZC4gU2VlIDx4cmVmCisJCWxpbmtlbmQ9InY0bDItYnVmLXR5cGUiIC8+IGZvciB2YWxpZCB2YWx1ZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PiZ2NGwyLW1lbW9yeTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkFwcGxpY2F0aW9ucyBzZXQgdGhpcyBmaWVsZCB0bworPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiBvcgorPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgorCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KKyhkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQKK2hpZ2hlci48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgb3BlbnMgYW5kIEkvTyBpcyBhbHJlYWR5CitpbiBwcm9ncmVzcywgb3IgcmVhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgd2FzIGF0dGVtcHRlZCBhbHRob3VnaCBvbmUgb3IKK21vcmUgYXJlIHN0aWxsIG1hcHBlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgYnVmZmVyIHR5cGUgKDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQpIG9yIHRoZQorcmVxdWVzdGVkIEkvTyBtZXRob2QgKDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPikgaXMgbm90CitzdXBwb3J0ZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CisKKzwhLS0KK0xvY2FsIFZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgoraW5kZW50LXRhYnMtbW9kZTogbmlsCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXMtaHctZnJlcS1zZWVrLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXMtaHctZnJlcS1zZWVrLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sCkBAIC0wLDAgKzEsMTI5IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1zLWh3LWZyZXEtc2VlayI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19TX0hXX0ZSRVFfU0VFSzwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX1NfSFdfRlJFUV9TRUVLPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlBlcmZvcm0gYSBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlazwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5zdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfU19IV19GUkVRX1NFRUs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlN0YXJ0IGEgaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsgZnJvbSB0aGUgY3VycmVudCBmcmVxdWVuY3kuCitUbyBkbyB0aGlzIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPiwKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIDxzdHJ1Y3RmaWVsZD5zZWVrX3Vwd2FyZDwvc3RydWN0ZmllbGQ+IGFuZAorPHN0cnVjdGZpZWxkPndyYXBfYXJvdW5kPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLCBhbmQgemVybyBvdXQgdGhlCis8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBhcnJheSBvZiBhICZ2NGwyLWh3LWZyZXEtc2VlazsgYW5kCitjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX1NfSFdfRlJFUV9TRUVLPC9jb25zdGFudD4gaW9jdGwgd2l0aCBhIHBvaW50ZXIKK3RvIHRoaXMgc3RydWN0dXJlLjwvcGFyYT4KKworICAgIDxwYXJhPlRoaXMgaW9jdGwgaXMgc3VwcG9ydGVkIGlmIHRoZSA8Y29uc3RhbnQ+VjRMMl9DQVBfSFdfRlJFUV9TRUVLPC9jb25zdGFudD4gY2FwYWJpbGl0eSBpcyBzZXQuPC9wYXJhPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWh3LWZyZXEtc2VlayI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfaHdfZnJlcV9zZWVrPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHVuZXI8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgdHVuZXIgaW5kZXggbnVtYmVyLiBUaGlzIGlzIHRoZQorc2FtZSB2YWx1ZSBhcyBpbiB0aGUgJnY0bDItaW5wdXQ7IDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+CitmaWVsZCBhbmQgdGhlICZ2NGwyLXR1bmVyOyA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+JnY0bDItdHVuZXItdHlwZTs8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgdHVuZXIgdHlwZS4gVGhpcyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyBpbiB0aGUKKyZ2NGwyLXR1bmVyOyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+c2Vla191cHdhcmQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5JZiBub24temVybywgc2VlayB1cHdhcmQgZnJvbSB0aGUgY3VycmVudCBmcmVxdWVuY3ksIGVsc2Ugc2VlayBkb3dud2FyZC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndyYXBfYXJvdW5kPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SWYgbm9uLXplcm8sIHdyYXAgYXJvdW5kIHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgZnJlcXVlbmN5IHJhbmdlLCBlbHNlIHN0b3Agc2Vla2luZy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bOF08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIGFuZAorCSAgICBhcHBsaWNhdGlvbnMgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIDxzdHJ1Y3RmaWVsZD50dW5lcjwvc3RydWN0ZmllbGQ+IGluZGV4IGlzIG91dCBvZgorYm91bmRzIG9yIHRoZSB2YWx1ZSBpbiB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcword3JvbmcuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQUdBSU48L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGlvY3RsIHRpbWVkLW91dC4gVHJ5IGFnYWluLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyYmZmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN0cmVhbW9uLnhtbApAQCAtMCwwICsxLDEwNiBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2Mtc3RyZWFtb24iPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfU1RSRUFNT04sIFZJRElPQ19TVFJFQU1PRkY8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19TVFJFQU1PTjwvcmVmbmFtZT4KKyAgICA8cmVmbmFtZT5WSURJT0NfU1RSRUFNT0ZGPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPlN0YXJ0IG9yIHN0b3Agc3RyZWFtaW5nIEkvTzwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorCisgIDxyZWZzeW5vcHNpc2Rpdj4KKyAgICA8ZnVuY3N5bm9wc2lzPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5jb25zdCBpbnQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19TVFJFQU1PTiwgVklESU9DX1NUUkVBTU9GRjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfU1RSRUFNT048L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT0ZGPC9jb25zdGFudD4gaW9jdGwgc3RhcnQgYW5kIHN0b3AgdGhlIGNhcHR1cmUKK29yIG91dHB1dCBwcm9jZXNzIGR1cmluZyBzdHJlYW1pbmcgKDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeQorbWFwcGluZzwvbGluaz4gb3IgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4pIEkvTy48L3BhcmE+CisKKyAgICA8cGFyYT5TcGVjaWZpY2FsbHkgdGhlIGNhcHR1cmUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgYW5kIG5vIGlucHV0CitidWZmZXJzIGFyZSBmaWxsZWQgKGlmIHRoZXJlIGFyZSBhbnkgZW1wdHkgYnVmZmVycyBpbiB0aGUgaW5jb21pbmcKK3F1ZXVlKSB1bnRpbCA8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gaGFzIGJlZW4gY2FsbGVkLgorQWNjb3JkaW5nbHkgdGhlIG91dHB1dCBoYXJkd2FyZSBpcyBkaXNhYmxlZCwgbm8gdmlkZW8gc2lnbmFsIGlzCitwcm9kdWNlZCB1bnRpbCA8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gaGFzIGJlZW4gY2FsbGVkLgorVGhlIGlvY3RsIHdpbGwgc3VjY2VlZCBvbmx5IHdoZW4gYXQgbGVhc3Qgb25lIG91dHB1dCBidWZmZXIgaXMgaW4gdGhlCitpbmNvbWluZyBxdWV1ZS48L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ19TVFJFQU1PRkY8L2NvbnN0YW50PiBpb2N0bCwgYXBhcnQgb2YKK2Fib3J0aW5nIG9yIGZpbmlzaGluZyBhbnkgRE1BIGluIHByb2dyZXNzLCB1bmxvY2tzIGFueSB1c2VyIHBvaW50ZXIKK2J1ZmZlcnMgbG9ja2VkIGluIHBoeXNpY2FsIG1lbW9yeSwgYW5kIGl0IHJlbW92ZXMgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUKK2luY29taW5nIGFuZCBvdXRnb2luZyBxdWV1ZXMuIFRoYXQgbWVhbnMgYWxsIGltYWdlcyBjYXB0dXJlZCBidXQgbm90CitkZXF1ZXVlZCB5ZXQgd2lsbCBiZSBsb3N0LCBsaWtld2lzZSBhbGwgaW1hZ2VzIGVucXVldWVkIGZvciBvdXRwdXQgYnV0Citub3QgdHJhbnNtaXR0ZWQgeWV0LiBJL08gcmV0dXJucyB0byB0aGUgc2FtZSBzdGF0ZSBhcyBhZnRlciBjYWxsaW5nCismVklESU9DLVJFUUJVRlM7IGFuZCBjYW4gYmUgcmVzdGFydGVkIGFjY29yZGluZ2x5LjwvcGFyYT4KKworICAgIDxwYXJhPkJvdGggaW9jdGxzIHRha2UgYSBwb2ludGVyIHRvIGFuIGludGVnZXIsIHRoZSBkZXNpcmVkIGJ1ZmZlciBvcgorc3RyZWFtIHR5cGUuIFRoaXMgaXMgdGhlIHNhbWUgYXMgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LjwvcGFyYT4KKworICAgIDxwYXJhPk5vdGUgYXBwbGljYXRpb25zIGNhbiBiZSBwcmVlbXB0ZWQgZm9yIHVua25vd24gcGVyaW9kcyByaWdodAorYmVmb3JlIG9yIGFmdGVyIHRoZSA8Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD4gb3IKKzxjb25zdGFudD5WSURJT0NfU1RSRUFNT0ZGPC9jb25zdGFudD4gY2FsbHMsIHRoZXJlIGlzIG5vIG5vdGlvbiBvZgorc3RhcnRpbmcgb3Igc3RvcHBpbmcgIm5vdyIuIEJ1ZmZlciB0aW1lc3RhbXBzIGNhbiBiZSB1c2VkIHRvCitzeW5jaHJvbml6ZSB3aXRoIG90aGVyIGV2ZW50cy48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5TdHJlYW1pbmcgSS9PIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBidWZmZXIKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgbm90IHN1cHBvcnRlZCwgb3Igbm8gYnVmZmVycyBoYXZlCitiZWVuIGFsbG9jYXRlZCAobWVtb3J5IG1hcHBpbmcpIG9yIGVucXVldWVkIChvdXRwdXQpIHlldC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9JbnRlbC1JT01NVS50eHQgYi9Eb2N1bWVudGF0aW9uL0ludGVsLUlPTU1VLnR4dAppbmRleCAyMWJjNDE2Li5jZjk0MzFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0ludGVsLUlPTU1VLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0ludGVsLUlPTU1VLnR4dApAQCAtNTYsMTEgKzU2LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLQogSWYgeW91IGVuY291bnRlciBpc3N1ZXMgd2l0aCBncmFwaGljcyBkZXZpY2VzLCB5b3UgY2FuIHRyeSBhZGRpbmcKIG9wdGlvbiBpbnRlbF9pb21tdT1pZ2Z4X29mZiB0byB0dXJuIG9mZiB0aGUgaW50ZWdyYXRlZCBncmFwaGljcyBlbmdpbmUuCi0KLUlmIGl0IGhhcHBlbnMgdG8gYmUgYSBQQ0kgZGV2aWNlIGluY2x1ZGVkIGluIHRoZSBJTkNMVURFX0FMTCBFbmdpbmUsCi10aGVuIHRyeSBlbmFibGluZyBDT05GSUdfRE1BUl9HRlhfV0EgdG8gc2V0dXAgYSAxLTEgbWFwLiBXZSBoZWFyCi1ncmFwaGljcyBkcml2ZXJzIG1heSBiZSBpbiBwcm9jZXNzIG9mIHVzaW5nIERNQSBhcGkncyBpbiB0aGUgbmVhcgotZnV0dXJlIGFuZCBhdCB0aGF0IHRpbWUgdGhpcyBvcHRpb24gY2FuIGJlIHlhbmtlZCBvdXQuCitJZiB0aGlzIGZpeGVzIGFueXRoaW5nLCBwbGVhc2UgZW5zdXJlIHlvdSBmaWxlIGEgYnVnIHJlcG9ydGluZyB0aGUgcHJvYmxlbS4KIAogU29tZSBleGNlcHRpb25zIHRvIElPVkEKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCA1YzU1NWE4Yi4uYjdmOWQzYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0xODMsNyArMTgzLDcgQEAKIGEgbWFuLXBhZ2VzIHBhdGNoLCBvciBhdCBsZWFzdCBhIG5vdGlmaWNhdGlvbiBvZiB0aGUgY2hhbmdlLAogc28gdGhhdCBzb21lIGluZm9ybWF0aW9uIG1ha2VzIGl0cyB3YXkgaW50byB0aGUgbWFudWFsIHBhZ2VzLgogCi1FdmVuIGlmIHRoZSBtYWludGFpbmVyIGRpZCBub3QgcmVzcG9uZCBpbiBzdGVwICM0LCBtYWtlIHN1cmUgdG8gQUxXQVlTCitFdmVuIGlmIHRoZSBtYWludGFpbmVyIGRpZCBub3QgcmVzcG9uZCBpbiBzdGVwICM1LCBtYWtlIHN1cmUgdG8gQUxXQVlTCiBjb3B5IHRoZSBtYWludGFpbmVyIHdoZW4geW91IGNoYW5nZSB0aGVpciBjb2RlLgogCiBGb3Igc21hbGwgcGF0Y2hlcyB5b3UgbWF5IHdhbnQgdG8gQ0MgdGhlIFRyaXZpYWwgUGF0Y2ggTW9ua2V5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMKaW5kZXggYWE3M2U3Mi4uNmUyNWMyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2dldGRlbGF5cy5jCisrKyBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9nZXRkZWxheXMuYwpAQCAtMTE2LDcgKzExNiw3IEBACiB9CiAKIAotaW50IHNlbmRfY21kKGludCBzZCwgX191MTYgbmxtc2dfdHlwZSwgX191MzIgbmxtc2dfcGlkLAorc3RhdGljIGludCBzZW5kX2NtZChpbnQgc2QsIF9fdTE2IG5sbXNnX3R5cGUsIF9fdTMyIG5sbXNnX3BpZCwKIAkgICAgIF9fdTggZ2VubF9jbWQsIF9fdTE2IG5sYV90eXBlLAogCSAgICAgdm9pZCAqbmxhX2RhdGEsIGludCBubGFfbGVuKQogewpAQCAtMTYwLDcgKzE2MCw3IEBACiAgKiBQcm9iZSB0aGUgY29udHJvbGxlciBpbiBnZW5ldGxpbmsgdG8gZmluZCB0aGUgZmFtaWx5IGlkCiAgKiBmb3IgdGhlIFRBU0tTVEFUUyBmYW1pbHkKICAqLwotaW50IGdldF9mYW1pbHlfaWQoaW50IHNkKQorc3RhdGljIGludCBnZXRfZmFtaWx5X2lkKGludCBzZCkKIHsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3Qgbmxtc2doZHIgbjsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCXJldHVybiBpZDsKIH0KIAotdm9pZCBwcmludF9kZWxheWFjY3Qoc3RydWN0IHRhc2tzdGF0cyAqdCkKK3N0YXRpYyB2b2lkIHByaW50X2RlbGF5YWNjdChzdHJ1Y3QgdGFza3N0YXRzICp0KQogewogCXByaW50ZigiXG5cbkNQVSAgICUxNXMlMTVzJTE1cyUxNXNcbiIKIAkgICAgICAgIiAgICAgICUxNWxsdSUxNWxsdSUxNWxsdSUxNWxsdVxuIgpAQCAtMjE2LDcgKzIxNiw3IEBACiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdC0+ZnJlZXBhZ2VzX2RlbGF5X3RvdGFsKTsKIH0KIAotdm9pZCB0YXNrX2NvbnRleHRfc3dpdGNoX2NvdW50cyhzdHJ1Y3QgdGFza3N0YXRzICp0KQorc3RhdGljIHZvaWQgdGFza19jb250ZXh0X3N3aXRjaF9jb3VudHMoc3RydWN0IHRhc2tzdGF0cyAqdCkKIHsKIAlwcmludGYoIlxuXG5UYXNrICAgJTE1cyUxNXNcbiIKIAkgICAgICAgIiAgICAgICAlMTVsbHUlMTVsbHVcbiIsCkBAIC0yMjQsNyArMjI0LDcgQEAKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl0LT5udmNzdywgKHVuc2lnbmVkIGxvbmcgbG9uZyl0LT5uaXZjc3cpOwogfQogCi12b2lkIHByaW50X2Nncm91cHN0YXRzKHN0cnVjdCBjZ3JvdXBzdGF0cyAqYykKK3N0YXRpYyB2b2lkIHByaW50X2Nncm91cHN0YXRzKHN0cnVjdCBjZ3JvdXBzdGF0cyAqYykKIHsKIAlwcmludGYoInNsZWVwaW5nICVsbHUsIGJsb2NrZWQgJWxsdSwgcnVubmluZyAlbGx1LCBzdG9wcGVkICVsbHUsICIKIAkJInVuaW50ZXJydXB0aWJsZSAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWMtPm5yX3NsZWVwaW5nLApAQCAtMjM1LDcgKzIzNSw3IEBACiB9CiAKIAotdm9pZCBwcmludF9pb2FjY3Qoc3RydWN0IHRhc2tzdGF0cyAqdCkKK3N0YXRpYyB2b2lkIHByaW50X2lvYWNjdChzdHJ1Y3QgdGFza3N0YXRzICp0KQogewogCXByaW50ZigiJXM6IHJlYWQ9JWxsdSwgd3JpdGU9JWxsdSwgY2FuY2VsbGVkX3dyaXRlPSVsbHVcbiIsCiAJCXQtPmFjX2NvbW0sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi1leGFtcGxlLmMgYi9Eb2N1bWVudGF0aW9uL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi1leGFtcGxlLmMKaW5kZXggMmNhZWVhNS4uMWQyYzAxMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hdXhkaXNwbGF5L2NmYWcxMjg2NGItZXhhbXBsZS5jCisrKyBiL0RvY3VtZW50YXRpb24vYXV4ZGlzcGxheS9jZmFnMTI4NjRiLWV4YW1wbGUuYwpAQCAtNjIsNyArNjIsNyBAQAogICogVW5hYmxlIHRvIG9wZW46IHJldHVybiA9IC0xCiAgKiBVbmFibGUgdG8gbW1hcDogcmV0dXJuID0gLTIKICAqLwotaW50IGNmYWcxMjg2NGJfaW5pdChjaGFyICpwYXRoKQorc3RhdGljIGludCBjZmFnMTI4NjRiX2luaXQoY2hhciAqcGF0aCkKIHsKIAljZmFnMTI4NjRiX2ZkID0gb3BlbihwYXRoLCBPX1JEV1IpOwogCWlmIChjZmFnMTI4NjRiX2ZkID09IC0xKQpAQCAtODEsNyArODEsNyBAQAogLyoKICAqIGV4aXQgYSBjZmFnMTI4NjRiIGZyYW1lYnVmZmVyIGRldmljZQogICovCi12b2lkIGNmYWcxMjg2NGJfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9leGl0KHZvaWQpCiB7CiAJbXVubWFwKGNmYWcxMjg2NGJfbWVtLCBDRkFHMTI4NjRCX1NJWkUpOwogCWNsb3NlKGNmYWcxMjg2NGJfZmQpOwpAQCAtOTAsNyArOTAsNyBAQAogLyoKICAqIHNldCAoeCwgeSkgcGl4ZWwKICAqLwotdm9pZCBjZmFnMTI4NjRiX3NldCh1bnNpZ25lZCBjaGFyIHgsIHVuc2lnbmVkIGNoYXIgeSkKK3N0YXRpYyB2b2lkIGNmYWcxMjg2NGJfc2V0KHVuc2lnbmVkIGNoYXIgeCwgdW5zaWduZWQgY2hhciB5KQogewogCWlmIChDRkFHMTI4NjRCX0NIRUNLKHgsIHkpKQogCQljZmFnMTI4NjRiX2J1ZmZlcltDRkFHMTI4NjRCX0FERFJFU1MoeCwgeSldIHw9CkBAIC0xMDAsNyArMTAwLDcgQEAKIC8qCiAgKiB1bnNldCAoeCwgeSkgcGl4ZWwKICAqLwotdm9pZCBjZmFnMTI4NjRiX3Vuc2V0KHVuc2lnbmVkIGNoYXIgeCwgdW5zaWduZWQgY2hhciB5KQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl91bnNldCh1bnNpZ25lZCBjaGFyIHgsIHVuc2lnbmVkIGNoYXIgeSkKIHsKIAlpZiAoQ0ZBRzEyODY0Ql9DSEVDSyh4LCB5KSkKIAkJY2ZhZzEyODY0Yl9idWZmZXJbQ0ZBRzEyODY0Ql9BRERSRVNTKHgsIHkpXSAmPQpAQCAtMTEzLDcgKzExMyw3IEBACiAgKiBQaXhlbCBvZmY6IHJldHVybiA9IDAKICAqIFBpeGVsIG9uOiAgcmV0dXJuID0gMQogICovCi11bnNpZ25lZCBjaGFyIGNmYWcxMjg2NGJfaXNzZXQodW5zaWduZWQgY2hhciB4LCB1bnNpZ25lZCBjaGFyIHkpCitzdGF0aWMgdW5zaWduZWQgY2hhciBjZmFnMTI4NjRiX2lzc2V0KHVuc2lnbmVkIGNoYXIgeCwgdW5zaWduZWQgY2hhciB5KQogewogCWlmIChDRkFHMTI4NjRCX0NIRUNLKHgsIHkpKQogCQlpZiAoY2ZhZzEyODY0Yl9idWZmZXJbQ0ZBRzEyODY0Ql9BRERSRVNTKHgsIHkpXSAmCkBAIC0xMjYsNyArMTI2LDcgQEAKIC8qCiAgKiBub3QgKHgsIHkpIHBpeGVsCiAgKi8KLXZvaWQgY2ZhZzEyODY0Yl9ub3QodW5zaWduZWQgY2hhciB4LCB1bnNpZ25lZCBjaGFyIHkpCitzdGF0aWMgdm9pZCBjZmFnMTI4NjRiX25vdCh1bnNpZ25lZCBjaGFyIHgsIHVuc2lnbmVkIGNoYXIgeSkKIHsKIAlpZiAoY2ZhZzEyODY0Yl9pc3NldCh4LCB5KSkKIAkJY2ZhZzEyODY0Yl91bnNldCh4LCB5KTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogLyoKICAqIGZpbGwgKHNldCBhbGwgcGl4ZWxzKQogICovCi12b2lkIGNmYWcxMjg2NGJfZmlsbCh2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9maWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgc2hvcnQgaTsKIApAQCAtMTQ4LDcgKzE0OCw3IEBACiAvKgogICogY2xlYXIgKHVuc2V0IGFsbCBwaXhlbHMpCiAgKi8KLXZvaWQgY2ZhZzEyODY0Yl9jbGVhcih2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9jbGVhcih2b2lkKQogewogCXVuc2lnbmVkIHNob3J0IGk7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogICogUGl4ZWwgb2ZmOiBzcmNbaV0gPSAwCiAgKiBQaXhlbCBvbjogIHNyY1tpXSA+IDAKICAqLwotdm9pZCBjZmFnMTI4NjRiX2Zvcm1hdCh1bnNpZ25lZCBjaGFyICogbWF0cml4KQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9mb3JtYXQodW5zaWduZWQgY2hhciAqIG1hdHJpeCkKIHsKIAl1bnNpZ25lZCBjaGFyIGksIGosIG47CiAKQEAgLTE4Miw3ICsxODIsNyBAQAogLyoKICAqIGJsaXQgYnVmZmVyIHRvIGxjZAogICovCi12b2lkIGNmYWcxMjg2NGJfYmxpdCh2b2lkKQorc3RhdGljIHZvaWQgY2ZhZzEyODY0Yl9ibGl0KHZvaWQpCiB7CiAJbWVtY3B5KGNmYWcxMjg2NGJfbWVtLCBjZmFnMTI4NjRiX2J1ZmZlciwgQ0ZBRzEyODY0Ql9TSVpFKTsKIH0KQEAgLTE5OCw3ICsxOTgsNyBAQAogCiAjZGVmaW5lIEVYQU1QTEVTCTYKIAotdm9pZCBleGFtcGxlKHVuc2lnbmVkIGNoYXIgbikKK3N0YXRpYyB2b2lkIGV4YW1wbGUodW5zaWduZWQgY2hhciBuKQogewogCXVuc2lnbmVkIHNob3J0IGksIGo7CiAJdW5zaWduZWQgY2hhciBtYXRyaXhbQ0ZBRzEyODY0Ql9XSURUSCAqIENGQUcxMjg2NEJfSEVJR0hUXTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCmluZGV4IDNkMWIwYWIuLjE0YjdiNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQpAQCAtMjUsNyArMjUsOCBAQAogCQkidGRhMTAwNDZsaWZldmlldyIsICJhdjcxMTAiLCAiZGVjMjAwMHQiLCAiZGVjMjU0MHQiLAogCQkiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwgIm54dDIwMDQiLAogCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIsICJibHVlYmlyZCIsCi0JCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIsICJtcGM3MTgiICk7CisJCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIsICJtcGM3MTgiLAorCQkiYWY5MDE1Iik7CiAKICMgQ2hlY2sgYXJncwogc3ludGF4KCkgaWYgKHNjYWxhcihAQVJHVikgIT0gMSk7CkBAIC01MTQsNiArNTE1LDQwIEBACiAJJG91dGZpbGU7CiB9CiAKK3N1YiBhZjkwMTUgeworCW15ICRzb3VyY2VmaWxlID0gImRvd25sb2FkLmFzaHg/ZmlsZT01NyI7CisJbXkgJHVybCA9ICJodHRwOi8vd3d3Lml0ZS5jb20udHcvRU4vU2VydmljZXMvJHNvdXJjZWZpbGUiOworCW15ICRoYXNoID0gImZmNWIwOTZlZDQ3YzA4MDg3MGVhY2RhYjJkZTMzYWQ2IjsKKwlteSAkb3V0ZmlsZSA9ICJkdmItdXNiLWFmOTAxNS5mdyI7CisJbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKwlteSAkZndvZmZzZXQgPSAweDIyNzA4OworCW15ICRmd2xlbmd0aCA9IDE4MjI1OworCW15ICgkY2h1bmtsZW5ndGgsICRidWYsICRyY291bnQpOworCisJY2hlY2tzdGFuZGFyZCgpOworCisJd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworCXVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKwl2ZXJpZnkoIiR0bXBkaXIvRHJpdmVyL0ZpbGVzL0FGMTVCREEuc3lzIiwgJGhhc2gpOworCisJb3BlbiBJTkZJTEUsICc8JywgIiR0bXBkaXIvRHJpdmVyL0ZpbGVzL0FGMTVCREEuc3lzIjsKKwlvcGVuIE9VVEZJTEUsICc+JywgJG91dGZpbGU7CisKKwlzeXNzZWVrKElORklMRSwgJGZ3b2Zmc2V0LCBTRUVLX1NFVCk7CisJd2hpbGUoJGZ3bGVuZ3RoID4gMCkgeworCQkkY2h1bmtsZW5ndGggPSA1NTsKKwkJJGNodW5rbGVuZ3RoID0gJGZ3bGVuZ3RoIGlmICgkY2h1bmtsZW5ndGggPiAkZndsZW5ndGgpOworCQkkcmNvdW50ID0gc3lzcmVhZChJTkZJTEUsICRidWYsICRjaHVua2xlbmd0aCk7CisJCWRpZSAiUmFuIG91dCBvZiBkYXRhXG4iIGlmICgkcmNvdW50ICE9ICRjaHVua2xlbmd0aCk7CisJCXN5c3dyaXRlKE9VVEZJTEUsICRidWYpOworCQlzeXNyZWFkKElORklMRSwgJGJ1ZiwgOCk7CisJCSRmd2xlbmd0aCAtPSAkcmNvdW50ICsgODsKKwl9CisKKwljbG9zZSBPVVRGSUxFOworCWNsb3NlIElORklMRTsKK30KKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVXRpbGl0aWVzCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL3RlY2huaXNhdC50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi90ZWNobmlzYXQudHh0CmluZGV4IDNmNDM1ZmYuLmYwY2M0ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL3RlY2huaXNhdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvdGVjaG5pc2F0LnR4dApAQCAtNCw5ICs0LDEyIEBACiAxKSBGaW5kIG91dCB3aGF0IGRldmljZSB5b3UgaGF2ZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorSW1wb3J0YW50IE5vdGljZTogVGhlIGRyaXZlciBkb2VzIE5PVCBzdXBwb3J0IFRlY2huaXNhdCBVU0IgMiBkZXZpY2VzIQorCiBGaXJzdCBzdGFydCB5b3VyIGxpbnV4IGJveCB3aXRoIGEgc2hpcHBlZCBrZXJuZWw6CiBsc3BjaSAtdnZ2IGZvciBhIFBDSSBkZXZpY2UgKGxzdXNiIC12dnYgZm9yIGFuIFVTQiBkZXZpY2UpIHdpbGwgc2hvdyB5b3UgZm9yIGV4YW1wbGU6Ci0wMjowYi4wIE5ldHdvcmsgY29udHJvbGxlcjogVGVjaHNhbiBFbGVjdHJvbmljcyBDbyBMdGQgQjJDMiBGbGV4Q29wSUkgRFZCIGNoaXAgLyBUZWNobmlzYXQgU2t5U3RhcjIgRFZCIGNhcmQgKHJldiAwMikKKzAyOjBiLjAgTmV0d29yayBjb250cm9sbGVyOiBUZWNoc2FuIEVsZWN0cm9uaWNzIENvIEx0ZCBCMkMyIEZsZXhDb3BJSSBEVkIgY2hpcCAvCisgVGVjaG5pc2F0IFNreVN0YXIyIERWQiBjYXJkIChyZXYgMDIpCiAKIGRtZXNnIHwgZ3JlcCBmcm9udGVuZCBtYXkgc2hvdyB5b3UgZm9yIGV4YW1wbGU6CiBEVkI6IHJlZ2lzdGVyaW5nIGZyb250ZW5kIDAgKENvbmV4YW50IENYMjQxMjMvQ1gyNDEwOSkuLi4KQEAgLTE0LDYyICsxNyw2MiBAQAogMikgS2VybmVsIGNvbXBpbGF0aW9uOgogPT09PT09PT09PT09PT09PT09PT09PQogCi1JZiB0aGUgVGVjaG5pc2F0IGlzIHRoZSBvbmx5IFRWIGRldmljZSBpbiB5b3VyIGJveCBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5IG1vZHVsZXMgYW5kIGNoZWNrIHRoaXMgb25lOgotIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBhbmFsb2cgYW5kIGh5YnJpZCB0dW5lciBtb2R1bGVzIHRvIGJ1aWxkIgotSW4gdGhpcyBkaXJlY3RvcnkgdW5jaGVjayBldmVyeSBkcml2ZXIgd2hpY2ggaXMgYWN0aXZhdGVkIHRoZXJlIChleGNlcHQgIlNpbXBsZSB0dW5lciBzdXBwb3J0IiBmb3IgY2FzZSA5IG9ubHkpLgorSWYgdGhlIEZsZXhjb3AgLyBUZWNobmlzYXQgaXMgdGhlIG9ubHkgRFZCIC8gVFYgLyBSYWRpbyBkZXZpY2UgaW4geW91ciBib3gKKyBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5IG1vZHVsZXMgYW5kIGNoZWNrIHRoaXMgb25lOgorIk11bHRpbWVkaWEgc3VwcG9ydCIgPT4gIkN1c3RvbWlzZSBhbmFsb2cgYW5kIGh5YnJpZCB0dW5lciBtb2R1bGVzIHRvIGJ1aWxkIgorSW4gdGhpcyBkaXJlY3RvcnkgdW5jaGVjayBldmVyeSBkcml2ZXIgd2hpY2ggaXMgYWN0aXZhdGVkIHRoZXJlCisgKGV4Y2VwdCAiU2ltcGxlIHR1bmVyIHN1cHBvcnQiIGZvciBBVFNDIDNyZCBnZW5lcmF0aW9uIG9ubHkgLT4gc2VlIGNhc2UgOSBwbGVhc2UpLgogCiBUaGVuIHBsZWFzZSBhY3RpdmF0ZToKIDJhKSBNYWluIG1vZHVsZSBwYXJ0OgorIk11bHRpbWVkaWEgc3VwcG9ydCIgPT4gIkRWQi9BVFNDIGFkYXB0ZXJzIgorID0+ICJUZWNobmlzYXQvQjJDMiBGbGV4Y29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiCiAKLWEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIKLWIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIiBpbiBjYXNlIG9mIGEgUENJIGNhcmQKLU9SCi1jLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiRFZCL0FUU0MgYWRhcHRlcnMiID0+ICJUZWNobmlzYXQvQjJDMiBGbGV4Y29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiID0+ICJUZWNobmlzYXQvQjJDMiBBaXIvU2t5L0NhYmxlMlBDIFVTQiIgaW4gY2FzZSBvZiBhbiBVU0IgMS4xIGFkYXB0ZXIKLWQuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIkVuYWJsZSBkZWJ1ZyBmb3IgdGhlIEIyQzIgRmxleENvcCBkcml2ZXJzIgotTm90aWNlOiBkLikgaXMgaGVscGZ1bCBmb3IgdHJvdWJsZXNob290aW5nCithLikgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIiAoUENJIGNhcmQpIG9yCitiLikgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgVVNCIiAoVVNCIDEuMSBhZGFwdGVyKQorIGFuZCBmb3IgdHJvdWJsZXNob290aW5nIHB1cnBvc2VzOgorYy4pID0+ICJFbmFibGUgZGVidWcgZm9yIHRoZSBCMkMyIEZsZXhDb3AgZHJpdmVycyIKIAotMmIpIEZyb250ZW5kIG1vZHVsZSBwYXJ0OgorMmIpIEZyb250ZW5kIC8gVHVuZXIgLyBEZW1vZHVsYXRvciBtb2R1bGUgcGFydDoKKyJNdWx0aW1lZGlhIHN1cHBvcnQiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIKKyA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+CiAKIDEuKSBTa3lTdGFyIERWQi1TIFJldmlzaW9uIDIuMzoKLWEuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKLWIuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIlphcmxpbmsgVlAzMTAvTVQzMTIvWkwxMDMxMyBiYXNlZCIKK2EuKSA9PiAiWmFybGluayBWUDMxMC9NVDMxMi9aTDEwMzEzIGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiAyLikgU2t5U3RhciBEVkItUyBSZXZpc2lvbiAyLjY6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTVCBTVFYwMjk5IGJhc2VkIgorYS4pID0+ICJTVCBTVFYwMjk5IGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiAzLikgU2t5U3RhciBEVkItUyBSZXZpc2lvbiAyLjc6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCi1jLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJJbnRlZ3JhbnQgSVREMTAwMCBaZXJvIElGIHR1bmVyIGZvciBEVkItUy9EU1MiCi1kLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJJU0w2NDIxIFNFQyBjb250cm9sbGVyIgorYS4pID0+ICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCitiLikgPT4gIkludGVncmFudCBJVEQxMDAwIFplcm8gSUYgdHVuZXIgZm9yIERWQi1TL0RTUyIKK2MuKSA9PiAiSVNMNjQyMSBTRUMgY29udHJvbGxlciIKIAogNC4pIFNreVN0YXIgRFZCLVMgUmV2aXNpb24gMi44OgotYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgotYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ29uZXhhbnQgQ1gyNDExMy9DWDI0MTI4IHR1bmVyIGZvciBEVkItUy9EU1MiCi1jLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDb25leGFudCBDWDI0MTIzIGJhc2VkIgotZC4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiSVNMNjQyMSBTRUMgY29udHJvbGxlciIKK2EuKSA9PiAiQ29uZXhhbnQgQ1gyNDEyMyBiYXNlZCIKK2IuKSA9PiAiQ29uZXhhbnQgQ1gyNDExMy9DWDI0MTI4IHR1bmVyIGZvciBEVkItUy9EU1MiCitjLikgPT4gIklTTDY0MjEgU0VDIGNvbnRyb2xsZXIiCiAKIDUuKSBBaXJTdGFyIERWQi1UIGNhcmQ6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJaYXJsaW5rIE1UMzUyIGJhc2VkIgorYS4pID0+ICJaYXJsaW5rIE1UMzUyIGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiA2LikgQ2FibGVTdGFyIERWQi1DIGNhcmQ6Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJTVCBTVFYwMjk3IGJhc2VkIgorYS4pID0+ICJTVCBTVFYwMjk3IGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiA3LikgQWlyU3RhciBBVFNDIGNhcmQgMXN0IGdlbmVyYXRpb246Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJCcm9hZGNvbSBCQ00zNTEwIgorYS4pID0+ICJCcm9hZGNvbSBCQ00zNTEwIgogCiA4LikgQWlyU3RhciBBVFNDIGNhcmQgMm5kIGdlbmVyYXRpb246Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJOeHRXYXZlIENvbW11bmljYXRpb25zIE5YVDIwMDIvTlhUMjAwNCBiYXNlZCIKLWMuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkdlbmVyaWMgSTJDIFBMTCBiYXNlZCB0dW5lcnMiCithLikgPT4gIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUMjAwMi9OWFQyMDA0IGJhc2VkIgorYi4pID0+ICJHZW5lcmljIEkyQyBQTEwgYmFzZWQgdHVuZXJzIgogCiA5LikgQWlyU3RhciBBVFNDIGNhcmQgM3JkIGdlbmVyYXRpb246Ci1hLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCi1iLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwMi9MR0RUMzMwMyBiYXNlZCIKLWMuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgYW5hbG9nIGFuZCBoeWJyaWQgdHVuZXIgbW9kdWxlcyB0byBidWlsZCIgPT4gIlNpbXBsZSB0dW5lciBzdXBwb3J0IgorYS4pID0+ICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwMi9MR0RUMzMwMyBiYXNlZCIKK2IuKSAiTXVsdGltZWRpYSBzdXBwb3J0IiA9PiAiQ3VzdG9taXNlIGFuYWxvZyBhbmQgaHlicmlkIHR1bmVyIG1vZHVsZXMgdG8gYnVpbGQiCisgPT4gIlNpbXBsZSB0dW5lciBzdXBwb3J0IgogCi1BdXRob3I6IFV3ZSBCdWdsYSA8dXdlLmJ1Z2xhQGdteC5kZT4gRmVicnVhcnkgMjAwOQorQXV0aG9yOiBVd2UgQnVnbGEgPHV3ZS5idWdsYUBnbXguZGU+IEF1Z3VzdCAyMDA5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2VwOTN4eC1mYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2VwOTN4eC1mYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmMWJkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvZXA5M3h4LWZiLnR4dApAQCAtMCwwICsxLDEzNSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0RyaXZlciBmb3IgRVA5M3h4IExDRCBjb250cm9sbGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgRVA5M3h4IExDRCBjb250cm9sbGVyIGNhbiBkcml2ZSBib3RoIHN0YW5kYXJkIGRlc2t0b3AgbW9uaXRvcnMgYW5kCitlbWJlZGRlZCBMQ0QgZGlzcGxheXMuIElmIHlvdSBoYXZlIGEgc3RhbmRhcmQgZGVza3RvcCBtb25pdG9yIHRoZW4geW91CitjYW4gdXNlIHRoZSBzdGFuZGFyZCBMaW51eCB2aWRlbyBtb2RlIGRhdGFiYXNlLiBJbiB5b3VyIGJvYXJkIGZpbGU6CisKKwlzdGF0aWMgc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyBzb21lX2JvYXJkX2ZiX2luZm8gPSB7CisJCS5udW1fbW9kZXMJPSBFUDkzWFhGQl9VU0VfTU9ERURCLAorCQkuYnBwCQk9IDE2LAorCX07CisKK0lmIHlvdSBoYXZlIGFuIGVtYmVkZGVkIExDRCBkaXNwbGF5IHRoZW4geW91IG5lZWQgdG8gZGVmaW5lIGEgdmlkZW8KK21vZGUgZm9yIGl0IGFzIGZvbGxvd3M6CisKKwlzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBzb21lX2JvYXJkX3ZpZGVvX21vZGVzW10gPSB7CisJCXsKKwkJCS5uYW1lCQk9ICJzb21lX2xjZF9uYW1lIiwKKwkJCS8qIFBpeGVsIGNsb2NrLCBwb3JjaGVzLCBldGMgKi8KKwkJfSwKKwl9OworCitOb3RlIHRoYXQgdGhlIHBpeGVsIGNsb2NrIHZhbHVlIGlzIGluIHBpY28tc2Vjb25kcy4gWW91IGNhbiB1c2UgdGhlCitLSFoyUElDT1MgbWFjcm8gdG8gY29udmVydCB0aGUgcGl4ZWwgY2xvY2sgdmFsdWUuIE1vc3Qgb3RoZXIgdmFsdWVzCithcmUgaW4gcGl4ZWwgY2xvY2tzLiBTZWUgRG9jdW1lbnRhdGlvbi9mYi9mcmFtZWJ1ZmZlci50eHQgZm9yIGZ1cnRoZXIKK2RldGFpbHMuCisKK1RoZSBlcDkzeHhmYl9tYWNoX2luZm8gc3RydWN0dXJlIGZvciB5b3VyIGJvYXJkIHNob3VsZCBsb29rIGxpa2UgdGhlCitmb2xsb3dpbmc6CisKKwlzdGF0aWMgc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyBzb21lX2JvYXJkX2ZiX2luZm8gPSB7CisJCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHNvbWVfYm9hcmRfdmlkZW9fbW9kZXMpLAorCQkubW9kZXMJCT0gc29tZV9ib2FyZF92aWRlb19tb2RlcywKKwkJLmRlZmF1bHRfbW9kZQk9ICZzb21lX2JvYXJkX3ZpZGVvX21vZGVzWzBdLAorCQkuYnBwCQk9IDE2LAorCX07CisKK1RoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgY2FuIGJlIHJlZ2lzdGVyZWQgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8KK3lvdXIgYm9hcmQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb246CisKKwllcDkzeHhfcmVnaXN0ZXJfZmIoJnNvbWVfYm9hcmRfZmJfaW5mbyk7CisKKz09PT09PT09PT09PT09PT09PT09PQorVmlkZW8gQXR0cmlidXRlIEZsYWdzCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGVwOTN4eGZiX21hY2hfaW5mbyBzdHJ1Y3R1cmUgaGFzIGEgZmxhZ3MgZmllbGQgd2hpY2ggY2FuIGJlIHVzZWQKK3RvIGNvbmZpZ3VyZSB0aGUgY29udHJvbGxlci4gVGhlIHZpZGVvIGF0dHJpYnV0ZXMgZmxhZ3MgYXJlIGZ1bGx5Citkb2N1bWVudGVkIGluIHNlY3Rpb24gNyBvZiB0aGUgRVA5M3h4IHVzZXJzJyBndWlkZS4gVGhlIGZvbGxvd2luZworZmxhZ3MgYXJlIGF2YWlsYWJsZToKKworRVA5M1hYRkJfUENMS19GQUxMSU5HCQlDbG9jayBkYXRhIG9uIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgdGhlCisJCQkJcGl4ZWwgY2xvY2suIFRoZSBkZWZhdWx0IGlzIHRvIGNsb2NrCisJCQkJZGF0YSBvbiB0aGUgcmlzaW5nIGVkZ2UuCisKK0VQOTNYWEZCX1NZTkNfQkxBTktfSElHSAlCbGFuayBzaWduYWwgaXMgYWN0aXZlIGhpZ2guIEJ5CisJCQkJZGVmYXVsdCB0aGUgYmxhbmsgc2lnbmFsIGlzIGFjdGl2ZSBsb3cuCisKK0VQOTNYWEZCX1NZTkNfSE9SSVpfSElHSAlIb3Jpem9udGFsIHN5bmMgaXMgYWN0aXZlIGhpZ2guIEJ5CisJCQkJZGVmYXVsdCB0aGUgaG9yaXpvbnRhbCBzeW5jIGlzIGFjdGl2ZSBsb3cuCisKK0VQOTNYWEZCX1NZTkNfVkVSVF9ISUdICQlWZXJ0aWNhbCBzeW5jIGlzIGFjdGl2ZSBoaWdoLiBCeQorCQkJCWRlZmF1bHQgdGhlIHZlcnRpY2FsIHN5bmMgaXMgYWN0aXZlIGhpZ2guCisKK1RoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmcmFtZWJ1ZmZlciBjYW4gYmUgY29udHJvbGxlZCB1c2luZyB0aGUKK2ZvbGxvd2luZyBmbGFnczoKKworRVA5M1hYRkJfVVNFX1NEQ1NOMAkJVXNlIFNEQ1NuWzBdIGZvciB0aGUgZnJhbWVidWZmZXIuIFRoaXMKKwkJCQlpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLgorCitFUDkzWFhGQl9VU0VfU0RDU04xCQlVc2UgU0RDU25bMV0gZm9yIHRoZSBmcmFtZWJ1ZmZlci4KKworRVA5M1hYRkJfVVNFX1NEQ1NOMgkJVXNlIFNEQ1NuWzJdIGZvciB0aGUgZnJhbWVidWZmZXIuCisKK0VQOTNYWEZCX1VTRV9TRENTTjMJCVVzZSBTRENTblszXSBmb3IgdGhlIGZyYW1lYnVmZmVyLgorCis9PT09PT09PT09PT09PT09PT0KK1BsYXRmb3JtIGNhbGxiYWNrcworPT09PT09PT09PT09PT09PT09CisKK1RoZSBFUDkzeHggZnJhbWVidWZmZXIgZHJpdmVyIHN1cHBvcnRzIHRocmVlIG9wdGlvbmFsIHBsYXRmb3JtCitjYWxsYmFja3M6IHNldHVwLCB0ZWFyZG93biBhbmQgYmxhbmsuIFRoZSBzZXR1cCBhbmQgdGVhcmRvd24gZnVuY3Rpb25zCithcmUgY2FsbGVkIHdoZW4gdGhlIGZyYW1lYnVmZmVyIGRyaXZlciBpcyBpbnN0YWxsZWQgYW5kIHJlbW92ZWQKK3Jlc3BlY3RpdmVseS4gVGhlIGJsYW5rIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgZGlzcGxheSBpcworYmxhbmtlZCBvciB1bmJsYW5rZWQuCisKK1RoZSBzZXR1cCBhbmQgdGVhcmRvd24gZGV2aWNlcyBwYXNzIHRoZSBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0dXJlIGFzCithbiBhcmd1bWVudC4gVGhlIGZiX2luZm8gYW5kIGVwOTN4eGZiX21hY2hfaW5mbyBzdHJ1Y3R1cmVzIGNhbiBiZQorb2J0YWluZWQgYXMgZm9sbG93czoKKworCXN0YXRpYyBpbnQgc29tZV9ib2FyZF9mYl9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorCXsKKwkJc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyAqbWFjaF9pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwkJLyogQm9hcmQgc3BlY2lmaWMgZnJhbWVidWZmZXIgc2V0dXAgKi8KKwl9CisKKz09PT09PT09PT09PT09PT09PT09PT0KK1NldHRpbmcgdGhlIHZpZGVvIG1vZGUKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHZpZGVvIG1vZGUgaXMgc2V0IHVzaW5nIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorCisJdmlkZW89WFJFU3hZUkVTWy1CUFBdW0BSRUZSRVNIXQorCitJZiB0aGUgRVA5M3h4IHZpZGVvIGRyaXZlciBpcyBidWlsdC1pbiB0aGVuIHRoZSB2aWRlbyBtb2RlIGlzIHNldCBvbgordGhlIExpbnV4IGtlcm5lbCBjb21tYW5kIGxpbmUsIGZvciBleGFtcGxlOgorCisJdmlkZW89ZXA5M3h4LWZiOjgwMHg2MDAtMTZANjAKKworSWYgdGhlIEVQOTN4eCB2aWRlbyBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUgdGhlbiB0aGUgdmlkZW8gbW9kZSBpcworc2V0IHdoZW4gdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQ6CisKKwltb2Rwcm9iZSBlcDkzeHgtZmIgdmlkZW89MzIweDI0MAorCis9PT09PT09PT09PT09PQorU2NyZWVucGFnZSBidWcKKz09PT09PT09PT09PT09CisKK0F0IGxlYXN0IG9uIHRoZSBFUDkzMTUgdGhlcmUgaXMgYSBzaWxpY29uIGJ1ZyB3aGljaCBjYXVzZXMgYml0IDI3IG9mCit0aGUgVklEU0NSTlBBR0UgKGZyYW1lYnVmZmVyIHBoeXNpY2FsIG9mZnNldCkgdG8gYmUgdGllZCBsb3cuIFRoZXJlIGlzCithbiB1bm9mZmljaWFsIGVycmF0YSBmb3IgdGhpcyBidWcgYXQ6CisJaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1hcm0ta2VybmVsJm09MTEwMDYxMjQ1NTAyMDAwJnc9MgorCitCeSBkZWZhdWx0IHRoZSBFUDkzeHggZnJhbWVidWZmZXIgZHJpdmVyIGNoZWNrcyBpZiB0aGUgYWxsb2NhdGVkIHBoeXNpY2FsCithZGRyZXNzIGhhcyBiaXQgMjcgc2V0LiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBtZW1vcnkgaXMgZnJlZWQgYW5kIGFuCitlcnJvciBpcyByZXR1cm5lZC4gVGhlIGNoZWNrIGNhbiBiZSBkaXNhYmxlZCBieSBhZGRpbmcgdGhlIGZvbGxvd2luZworb3B0aW9uIHdoZW4gbG9hZGluZyB0aGUgZHJpdmVyOgorCisgICAgICBlcDkzeHgtZmIuY2hlY2tfc2NyZWVucGFnZV9idWc9MAorCitJbiBzb21lIGNhc2VzIGl0IG1heSBiZSBwb3NzaWJsZSB0byByZWNvbmZpZ3VyZSB5b3VyIFNEUkFNIGxheW91dCB0bworYXZvaWQgdGhpcyBidWcuIFNlZSBzZWN0aW9uIDEzIG9mIHRoZSBFUDkzeHggdXNlcnMnIGd1aWRlIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9tYXRyb3hmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dAppbmRleCBhZDdhNjc3Li5lNWNlOGExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dApAQCAtMTg2LDkgKzE4Niw3IEBACiBkZXY6WCAgICAtIGJpbmQgZHJpdmVyIHRvIGRldmljZSBYLiBEcml2ZXIgbnVtYmVycyBkZXZpY2UgZnJvbSAwIHVwIHRvIE4sCiAgICAgICAgICAgIHdoZXJlIGRldmljZSAwIGlzIGZpcnN0IGBrbm93bicgZGV2aWNlIGZvdW5kLCAxIHNlY29uZCBhbmQgc28gb24uCiAJICAgbHNwY2kgbGlzdHMgZGV2aWNlcyBpbiB0aGlzIG9yZGVyLgotCSAgIERlZmF1bHQgaXMgYGV2ZXJ5JyBrbm93biBkZXZpY2UgZm9yIGRyaXZlciB3aXRoIG11bHRpaGVhZCBzdXBwb3J0Ci0JICAgYW5kIGZpcnN0IHdvcmtpbmcgZGV2aWNlICh1c3VhbGx5IGRldjowKSBmb3IgZHJpdmVyIHdpdGhvdXQKLQkgICBtdWx0aWhlYWQgc3VwcG9ydC4KKwkgICBEZWZhdWx0IGlzIGBldmVyeScga25vd24gZGV2aWNlLgogbm9od2N1cnNvciAtIGRpc2FibGVzIGhhcmR3YXJlIGN1cnNvciAodXNlIHNvZnR3YXJlIGN1cnNvciBpbnN0ZWFkKS4KIGh3Y3Vyc29yIC0gZW5hYmxlcyBoYXJkd2FyZSBjdXJzb3IuIEl0IGlzIGRlZmF1bHQuIElmIHlvdSBhcmUgdXNpbmcKICAgICAgICAgICAgbm9uLWFjY2VsZXJhdGVkIG1vZGUgKGBub2FjY2VsJyBvciBgZmJzZXQgLWFjY2VsIGZhbHNlJyksIHNvZnR3YXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25jcGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmNwZnMudHh0CmluZGV4IGYxMmMzMGMuLjVhZjE2NGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmNwZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmNwZnMudHh0CkBAIC03LDYgKzcsNiBAQAogd2lsbCBoYXZlIGl0IGFzIHdlbGwuCiAKIFJlbGF0ZWQgcHJvZHVjdHMgYXJlIGxpbndhcmUgYW5kIG1hcnNfbndlLCB3aGljaCB3aWxsIGdpdmUgTGludXggcGFydGlhbAotTmV0V2FyZSBzZXJ2ZXIgZnVuY3Rpb25hbGl0eS4gIExpbndhcmUncyBob21lIHNpdGUgaXMKLWtsb2thbi5zaC5jdnV0LmN6L3B1Yi9saW51eC9saW53YXJlOyBtYXJzX253ZSBjYW4gYmUgZm91bmQgb24KLWZ0cC5nd2RnLmRlL3B1Yi9saW51eC9taXNjL25jcGZzLgorTmV0V2FyZSBzZXJ2ZXIgZnVuY3Rpb25hbGl0eS4KKworbWFyc19ud2UgY2FuIGJlIGZvdW5kIG9uIGZ0cC5nd2RnLmRlL3B1Yi9saW51eC9taXNjL25jcGZzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnM0MS1zZXJ2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnM0MS1zZXJ2ZXIudHh0CmluZGV4IDA1ZDgxY2IuLjU5MjBmZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzNDEtc2VydmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mczQxLXNlcnZlci50eHQKQEAgLTExLDYgKzExLDExIEBACiBjb250cm9sIGZpbGUsIHRoZSBuZnNkIHNlcnZpY2UgbXVzdCBiZSB0YWtlbiBkb3duLiAgVXNlIHlvdXIgdXNlci1tb2RlCiBuZnMtdXRpbHMgdG8gc2V0IHRoaXMgdXA7IHNlZSBycGMubmZzZCg4KQogCisoV2FybmluZzogb2xkZXIgc2VydmVycyB3aWxsIGludGVycHJldCAiKzQuMSIgYW5kICItNC4xIiBhcyAiKzQiIGFuZAorIi00IiwgcmVzcGVjdGl2ZWx5LiAgVGhlcmVmb3JlLCBjb2RlIG1lYW50IHRvIHdvcmsgb24gYm90aCBuZXcgYW5kIG9sZAora2VybmVscyBtdXN0IHR1cm4gNC4xIG9uIG9yIG9mZiAqYmVmb3JlKiB0dXJuaW5nIHN1cHBvcnQgZm9yIHZlcnNpb24gNAorb24gb3Igb2ZmOyBycGMubmZzZCBkb2VzIHRoaXMgY29ycmVjdGx5LikKKwogVGhlIE5GU3Y0IG1pbm9ydmVyc2lvbiAxIChORlN2NC4xKSBpbXBsZW1lbnRhdGlvbiBpbiBuZnNkIGlzIGJhc2VkCiBvbiB0aGUgbGF0ZXN0IE5GU3Y0LjEgSW50ZXJuZXQgRHJhZnQ6CiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW5mc3Y0LW1pbm9ydmVyc2lvbjEtMjkKQEAgLTI1LDYgKzMwLDQ5IEBACiBTZWUgaHR0cDovL3dpa2kubGludXgtbmZzLm9yZy93aWtpL2luZGV4LnBocC9QTkZTX3Byb3RvdHlwZV9kZXNpZ24KIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCitUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBpbnRlbmRlZCBmb3IgZGV2ZWxvcGVycyBvbmx5OiB3aGlsZSBpdAorZG9lcyBzdXBwb3J0IG9yZGluYXJ5IGZpbGUgb3BlcmF0aW9ucyBvbiBjbGllbnRzIHdlIGhhdmUgdGVzdGVkIGFnYWluc3QKKyhpbmNsdWRpbmcgdGhlIGxpbnV4IGNsaWVudCksIGl0IGlzIGluY29tcGxldGUgaW4gd2F5cyB3aGljaCBtYXkgbGltaXQKK2ZlYXR1cmVzIHVuZXhwZWN0ZWRseSwgY2F1c2Uga25vd24gYnVncyBpbiByYXJlIGNhc2VzLCBvciBjYXVzZQoraW50ZXJvcGVyYWJpbGl0eSBwcm9ibGVtcyB3aXRoIGZ1dHVyZSBjbGllbnRzLiAgS25vd24gaXNzdWVzOgorCisJLSBnc3Mgc3VwcG9ydCBpcyBxdWVzdGlvbmFibGU6IGN1cnJlbnRseSBtb3VudHMgd2l0aCBrZXJiZXJvcworCSAgZnJvbSBhIGxpbnV4IGNsaWVudCBhcmUgcG9zc2libGUsIGJ1dCB3ZSBhcmVuJ3QgcmVhbGx5CisJICBjb25mb3JtYW50IHdpdGggdGhlIHNwZWMgKGZvciBleGFtcGxlLCB3ZSBkb24ndCB1c2Uga2VyYmVyb3MKKwkgIG9uIHRoZSBiYWNrY2hhbm5lbCBjb3JyZWN0bHkpLgorCS0gbm8gdHJ1bmtpbmcgc3VwcG9ydDogbm8gY2xpZW50cyBjdXJyZW50bHkgdGFrZSBhZHZhbnRhZ2Ugb2YKKwkgIHRydW5raW5nLCBidXQgdGhpcyBpcyBhIG1hbmRhdG9yeSBmYWlsdXJlLCBhbmQgaXRzIHVzZSBpcworCSAgcmVjb21tZW5kZWQgdG8gY2xpZW50cyBpbiBhIG51bWJlciBvZiBwbGFjZXMuICAoRS5nLiB0byBlbnN1cmUKKwkgIHRpbWVseSByZW5ld2FsIGluIGNhc2UgYW4gZXhpc3RpbmcgY29ubmVjdGlvbidzIHJldHJ5IHRpbWVvdXRzCisJICBoYXZlIGdvdHRlbiB0b28gbG9uZzsgc2VlIHNlY3Rpb24gOC4zIG9mIHRoZSBkcmFmdC4pCisJICBUaGVyZWZvcmUsIGxhY2sgb2YgdGhpcyBmZWF0dXJlIG1heSBjYXVzZSBmdXR1cmUgY2xpZW50cyB0bworCSAgZmFpbC4KKwktIEluY29tcGxldGUgYmFja2NoYW5uZWwgc3VwcG9ydDogaW5jb21wbGV0ZSBiYWNrY2hhbm5lbCBnc3MKKwkgIHN1cHBvcnQgYW5kIG5vIHN1cHBvcnQgZm9yIEJBQ0tDSEFOTkVMX0NUTCBtZWFuIHRoYXQKKwkgIGNhbGxiYWNrcyAoaGVuY2UgZGVsZWdhdGlvbnMgYW5kIGxheW91dHMpIG1heSBub3QgYmUKKwkgIGF2YWlsYWJsZSBhbmQgY2xpZW50cyBjb25mdXNlZCBieSB0aGUgaW5jb21wbGV0ZQorCSAgaW1wbGVtZW50YXRpb24gbWF5IGZhaWwuCisJLSBTZXJ2ZXIgcmVib290IHJlY292ZXJ5IGlzIHVuc3VwcG9ydGVkOyBpZiB0aGUgc2VydmVyIHJlYm9vdHMsCisJICBjbGllbnRzIG1heSBmYWlsLgorCS0gV2UgZG8gbm90IHN1cHBvcnQgU1NWLCB3aGljaCBwcm92aWRlcyBzZWN1cml0eSBmb3Igc2hhcmVkCisJICBjbGllbnQtc2VydmVyIHN0YXRlICh0aHVzIHByZXZlbnRpbmcgdW5hdXRob3JpemVkIHRhbXBlcmluZworCSAgd2l0aCBsb2NrcyBhbmQgb3BlbnMsIGZvciBleGFtcGxlKS4gIEl0IGlzIG1hbmRhdG9yeSBmb3IKKwkgIHNlcnZlcnMgdG8gc3VwcG9ydCB0aGlzLCB0aG91Z2ggbm8gY2xpZW50cyB1c2UgaXQgeWV0LgorCS0gTWFuZGF0b3J5IG9wZXJhdGlvbnMgd2hpY2ggd2UgZG8gbm90IHN1cHBvcnQsIHN1Y2ggYXMKKwkgIERFU1RST1lfQ0xJRU5USUQsIEZSRUVfU1RBVEVJRCwgU0VDSU5GT19OT19OQU1FLCBhbmQKKwkgIFRFU1RfU1RBVEVJRCwgYXJlIG5vdCBjdXJyZW50bHkgdXNlZCBieSBjbGllbnRzLCBidXQgd2lsbCBiZQorCSAgKGFuZCB0aGUgc3BlYyByZWNvbW1lbmRzIHRoZWlyIHVzZXMgaW4gY29tbW9uIGNhc2VzKSwgYW5kCisJICBjbGllbnRzIHNob3VsZCBub3QgYmUgZXhwZWN0ZWQgdG8ga25vdyBob3cgdG8gcmVjb3ZlciBmcm9tIHRoZQorCSAgY2FzZSB3aGVyZSB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkLiAgVGhpcyB3aWxsIGV2ZW50dWFsbHkgY2F1c2UKKwkgIGludGVyb3BlcmFiaWxpdHkgZmFpbHVyZXMuCisKK0luIGFkZGl0aW9uLCBzb21lIGxpbWl0YXRpb25zIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgY3VycmVudCBORlN2NAoraW1wbGVtZW50YXRpb246CisKKwktIEluY29tcGxldGUgZGVsZWdhdGlvbiBlbmZvcmNlbWVudDogaWYgYSBmaWxlIGlzIHJlbmFtZWQgb3IKKwkgIHVubGlua2VkLCBhIGNsaWVudCBob2xkaW5nIGEgZGVsZWdhdGlvbiBtYXkgY29udGludWUgdG8KKwkgIGluZGVmaW5pdGVseSBhbGxvdyBvcGVucyBvZiB0aGUgZmlsZSB1bmRlciB0aGUgb2xkIG5hbWUuCisKIFRoZSB0YWJsZSBiZWxvdywgdGFrZW4gZnJvbSB0aGUgTkZTdjQuMSBkb2N1bWVudCwgbGlzdHMKIHRoZSBvcGVyYXRpb25zIHRoYXQgYXJlIG1hbmRhdG9yeSB0byBpbXBsZW1lbnQgKFJFUSksIG9wdGlvbmFsCiAoT1BUKSwgYW5kIE5GU3Y0LjAgb3BlcmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBub3QgdG8gaW1wbGVtZW50IChNTkkpCkBAIC0xNDIsNiArMTkwLDEyIEBACiAKIEltcGxlbWVudGF0aW9uIG5vdGVzOgogCitERUxFR1BVUkdFOgorKiBtYW5kYXRvcnkgb25seSBmb3Igc2VydmVycyB0aGF0IHN1cHBvcnQgQ0xBSU1fREVMRUdBVEVfUFJFViBhbmQvb3IKKyAgQ0xBSU1fREVMRUdfUFJFVl9GSCAod2hpY2ggYWxsb3dzIGNsaWVudHMgdG8ga2VlcCBkZWxlZ2F0aW9ucyB0aGF0CisgIHBlcnNpc3QgYWNyb3NzIGNsaWVudCByZWJvb3RzKS4gIFRodXMgd2UgbmVlZCBub3QgaW1wbGVtZW50IHRoaXMgZm9yCisgIG5vdy4KKwogRVhDSEFOR0VfSUQ6CiAqIG9ubHkgU1A0X05PTkUgc3RhdGUgcHJvdGVjdGlvbiBzdXBwb3J0ZWQKICogaW1wbGVtZW50YXRpb24gaWRzIGFyZSBpZ25vcmVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dAppbmRleCA2OGJhZGRmLi4zYmEwYjk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQl0aGUgY2xpZW50IGFkZHJlc3MgYW5kIHRoaXMgcGFyYW1ldGVyIGlzIE5PVCBlbXB0eSBvbmx5CiAJCXJlcGxpZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcnZlciBhcmUgYWNjZXB0ZWQuCiAKLQkJT25seSByZXF1aXJlZCBmb3IgZm9yIE5GUyByb290LiBUaGF0IGlzIGF1dG9jb25maWd1cmF0aW9uCisJCU9ubHkgcmVxdWlyZWQgZm9yIE5GUyByb290LiBUaGF0IGlzIGF1dG9jb25maWd1cmF0aW9uCiAJCXdpbGwgbm90IGJlIHRyaWdnZXJlZCBpZiBpdCBpcyBtaXNzaW5nIGFuZCBORlMgcm9vdCBpcyBub3QKIAkJaW4gb3BlcmF0aW9uLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBmZmVhZDEzLi5iNWFlZTc4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTE3Niw2ICsxNzYsNyBAQAogICBDYXBCbmQ6IGZmZmZmZmZmZmZmZmZmZmYKICAgdm9sdW50YXJ5X2N0eHRfc3dpdGNoZXM6ICAgICAgICAwCiAgIG5vbnZvbHVudGFyeV9jdHh0X3N3aXRjaGVzOiAgICAgMQorICBTdGFjayB1c2FnZTogICAgMTIga0IKIAogVGhpcyBzaG93cyB5b3UgbmVhcmx5IHRoZSBzYW1lIGluZm9ybWF0aW9uIHlvdSB3b3VsZCBnZXQgaWYgeW91IHZpZXdlZCBpdCB3aXRoCiB0aGUgcHMgIGNvbW1hbmQuICBJbiAgZmFjdCwgIHBzICB1c2VzICB0aGUgIHByb2MgIGZpbGUgIHN5c3RlbSAgdG8gIG9idGFpbiBpdHMKQEAgLTIyOSw2ICsyMzAsNyBAQAogIE1lbXNfYWxsb3dlZF9saXN0ICAgICAgICAgICBTYW1lIGFzIHByZXZpb3VzLCBidXQgaW4gImxpc3QgZm9ybWF0IgogIHZvbHVudGFyeV9jdHh0X3N3aXRjaGVzICAgICBudW1iZXIgb2Ygdm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXMKICBub252b2x1bnRhcnlfY3R4dF9zd2l0Y2hlcyAgbnVtYmVyIG9mIG5vbiB2b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlcworIFN0YWNrIHVzYWdlOiAgICAgICAgICAgICAgICBzdGFjayB1c2FnZSBoaWdoIHdhdGVyIG1hcmsgKHJvdW5kIHVwIHRvIHBhZ2Ugc2l6ZSkKIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCiBUYWJsZSAxLTM6IENvbnRlbnRzIG9mIHRoZSBzdGF0bSBmaWxlcyAoYXMgb2YgMi42LjgtcmMzKQpAQCAtMzA3LDcgKzMwOSw3IEBACiAwODA0OTAwMC0wODA0YTAwMCBydy1wIDAwMDAxMDAwIDAzOjAwIDgzMTIgICAgICAgL29wdC90ZXN0CiAwODA0YTAwMC0wODA2YjAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAgICAgICAgICAgW2hlYXBdCiBhN2NiMTAwMC1hN2NiMjAwMCAtLS1wIDAwMDAwMDAwIDAwOjAwIDAKLWE3Y2IyMDAwLWE3ZWIyMDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAorYTdjYjIwMDAtYTdlYjIwMDAgcnctcCAwMDAwMDAwMCAwMDowMCAwICAgICAgICAgIFt0aHJlYWRzdGFjazowMDFmZjRiNF0KIGE3ZWIyMDAwLWE3ZWIzMDAwIC0tLXAgMDAwMDAwMDAgMDA6MDAgMAogYTdlYjMwMDAtYTdlZDUwMDAgcnctcCAwMDAwMDAwMCAwMDowMCAwCiBhN2VkNTAwMC1hODAwODAwMCByLXhwIDAwMDAwMDAwIDAzOjAwIDQyMjIgICAgICAgL2xpYi9saWJjLnNvLjYKQEAgLTM0Myw2ICszNDUsNyBAQAogIFtzdGFja10gICAgICAgICAgICAgICAgICA9IHRoZSBzdGFjayBvZiB0aGUgbWFpbiBwcm9jZXNzCiAgW3Zkc29dICAgICAgICAgICAgICAgICAgID0gdGhlICJ2aXJ0dWFsIGR5bmFtaWMgc2hhcmVkIG9iamVjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBzeXN0ZW0gY2FsbCBoYW5kbGVyCisgW3RocmVhZHN0YWNrOnh4eHh4eHh4XSAgID0gdGhlIHN0YWNrIG9mIHRoZSB0aHJlYWQsIHh4eHh4eHh4IGlzIHRoZSBzdGFjayBzaXplCiAKICBvciBpZiBlbXB0eSwgdGhlIG1hcHBpbmcgaXMgYW5vbnltb3VzLgogCkBAIC0zNzUsNiArMzc4LDE5IEBACiBUaGlzIGZpbGUgaXMgb25seSBwcmVzZW50IGlmIHRoZSBDT05GSUdfTU1VIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcwogZW5hYmxlZC4KIAorVGhlIC9wcm9jL1BJRC9jbGVhcl9yZWZzIGlzIHVzZWQgdG8gcmVzZXQgdGhlIFBHX1JlZmVyZW5jZWQgYW5kIEFDQ0VTU0VEL1lPVU5HCitiaXRzIG9uIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIGEgcHJvY2Vzcy4KK1RvIGNsZWFyIHRoZSBiaXRzIGZvciBhbGwgdGhlIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvY2VzcworICAgID4gZWNobyAxID4gL3Byb2MvUElEL2NsZWFyX3JlZnMKKworVG8gY2xlYXIgdGhlIGJpdHMgZm9yIHRoZSBhbm9ueW1vdXMgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzCisgICAgPiBlY2hvIDIgPiAvcHJvYy9QSUQvY2xlYXJfcmVmcworCitUbyBjbGVhciB0aGUgYml0cyBmb3IgdGhlIGZpbGUgbWFwcGVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvY2VzcworICAgID4gZWNobyAzID4gL3Byb2MvUElEL2NsZWFyX3JlZnMKK0FueSBvdGhlciB2YWx1ZSB3cml0dGVuIHRvIC9wcm9jL1BJRC9jbGVhcl9yZWZzIHdpbGwgaGF2ZSBubyBlZmZlY3QuCisKKwogMS4yIEtlcm5lbCBkYXRhCiAtLS0tLS0tLS0tLS0tLS0KIApAQCAtMTAzMiw5ICsxMDQ4LDkgQEAKIHNpbmNlIHRoZSBzeXN0ZW0gZmlyc3QgYm9vdGVkLiAgRm9yIGEgcXVpY2sgbG9vaywgc2ltcGx5IGNhdCB0aGUgZmlsZToKIAogICA+IGNhdCAvcHJvYy9zdGF0Ci0gIGNwdSAgMjI1NSAzNCAyMjkwIDIyNjI1NTYzIDYyOTAgMTI3IDQ1NiAwCi0gIGNwdTAgMTEzMiAzNCAxNDQxIDExMzExNzE4IDM2NzUgMTI3IDQzOCAwCi0gIGNwdTEgMTEyMyAwIDg0OSAxMTMxMzg0NSAyNjE0IDAgMTggMAorICBjcHUgIDIyNTUgMzQgMjI5MCAyMjYyNTU2MyA2MjkwIDEyNyA0NTYgMCAwCisgIGNwdTAgMTEzMiAzNCAxNDQxIDExMzExNzE4IDM2NzUgMTI3IDQzOCAwIDAKKyAgY3B1MSAxMTIzIDAgODQ5IDExMzEzODQ1IDI2MTQgMCAxOCAwIDAKICAgaW50ciAxMTQ5MzA1NDggMTEzMTk5Nzg4IDMgMCA1IDI2MyAwIDQgWy4uLiBsb3RzIG1vcmUgbnVtYmVycyAuLi5dCiAgIGN0eHQgMTk5MDQ3MwogICBidGltZSAxMDYyMTkxMzc2CkBAIC0xMDU2LDYgKzEwNzIsNyBAQAogLSBpcnE6IHNlcnZpY2luZyBpbnRlcnJ1cHRzCiAtIHNvZnRpcnE6IHNlcnZpY2luZyBzb2Z0aXJxcwogLSBzdGVhbDogaW52b2x1bnRhcnkgd2FpdAorLSBndWVzdDogcnVubmluZyBhIGd1ZXN0CiAKIFRoZSAiaW50ciIgbGluZSBnaXZlcyBjb3VudHMgb2YgaW50ZXJydXB0cyAgc2VydmljZWQgc2luY2UgYm9vdCB0aW1lLCBmb3IgZWFjaAogb2YgdGhlICBwb3NzaWJsZSBzeXN0ZW0gaW50ZXJydXB0cy4gICBUaGUgZmlyc3QgIGNvbHVtbiAgaXMgdGhlICB0b3RhbCBvZiAgYWxsCkBAIC0xMTkxLDcgKzEyMDgsNyBAQAogICogaWYgdGhlIHRhc2sgd2FzIHJlbmljZWQsIGl0cyBzY29yZSBkb3VibGVzCiAgKiBzdXBlcnVzZXIgb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2VzcyB0YXNrcyAoQ0FQX1NZU19BRE1JTiwgQ0FQX1NZU19SRVNPVVJDRQogIAlvciBDQVBfU1lTX1JBV0lPKSBoYXZlIHRoZWlyIHNjb3JlIGRpdmlkZWQgYnkgNAotICogaWYgb29tIGNvbmRpdGlvbiBoYXBwZW5lZCBpbiBvbmUgY3B1c2V0IGFuZCBjaGVja2VkIHRhc2sgZG9lcyBub3QgYmVsb25nCisgKiBpZiBvb20gY29uZGl0aW9uIGhhcHBlbmVkIGluIG9uZSBjcHVzZXQgYW5kIGNoZWNrZWQgcHJvY2VzcyBkb2VzIG5vdCBiZWxvbmcKICAJdG8gaXQsIGl0cyBzY29yZSBpcyBkaXZpZGVkIGJ5IDgKICAqIHRoZSByZXN1bHRpbmcgc2NvcmUgaXMgbXVsdGlwbGllZCBieSB0d28gdG8gdGhlIHBvd2VyIG9mIG9vbV9hZGosIGkuZS4KIAlwb2ludHMgPDw9IG9vbV9hZGogd2hlbiBpdCBpcyBwb3NpdGl2ZSBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2Nvdi50eHQgYi9Eb2N1bWVudGF0aW9uL2djb3YudHh0CmluZGV4IDQwZWM2MzMuLmU3Y2E2NDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2Nvdi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9nY292LnR4dApAQCAtNDcsNyArNDcsNyBAQAogCiBDb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoOgogCi0gICAgICAgIENPTkZJR19ERUJVR0ZTPXkKKyAgICAgICAgQ09ORklHX0RFQlVHX0ZTPXkKICAgICAgICAgQ09ORklHX0dDT1ZfS0VSTkVMPXkKIAogYW5kIHRvIGdldCBjb3ZlcmFnZSBkYXRhIGZvciB0aGUgZW50aXJlIGtlcm5lbDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CmluZGV4IGU0YjY5ODUuLmZhNGRjMDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtNTI0LDYgKzUyNCwxMyBAQAogCQlpcyBjb25maWd1cmVkIGFzIGFuIG91dHB1dCwgdGhpcyB2YWx1ZSBtYXkgYmUgd3JpdHRlbjsKIAkJYW55IG5vbnplcm8gdmFsdWUgaXMgdHJlYXRlZCBhcyBoaWdoLgogCisJImVkZ2UiIC4uLiByZWFkcyBhcyBlaXRoZXIgIm5vbmUiLCAicmlzaW5nIiwgImZhbGxpbmciLCBvcgorCQkiYm90aCIuIFdyaXRlIHRoZXNlIHN0cmluZ3MgdG8gc2VsZWN0IHRoZSBzaWduYWwgZWRnZShzKQorCQl0aGF0IHdpbGwgbWFrZSBwb2xsKDIpIG9uIHRoZSAidmFsdWUiIGZpbGUgcmV0dXJuLgorCisJCVRoaXMgZmlsZSBleGlzdHMgb25seSBpZiB0aGUgcGluIGNhbiBiZSBjb25maWd1cmVkIGFzIGFuCisJCWludGVycnVwdCBnZW5lcmF0aW5nIGlucHV0IHBpbi4KKwogR1BJTyBjb250cm9sbGVycyBoYXZlIHBhdGhzIGxpa2UgL3N5cy9jbGFzcy9ncGlvL2NoaXBjaGlwNDIvIChmb3IgdGhlCiBjb250cm9sbGVyIGltcGxlbWVudGluZyBHUElPcyBzdGFydGluZyBhdCAjNDIpIGFuZCBoYXZlIHRoZSBmb2xsb3dpbmcKIHJlYWQtb25seSBhdHRyaWJ1dGVzOgpAQCAtNTU1LDYgKzU2MiwxMSBAQAogCS8qIHJldmVyc2UgZ3Bpb19leHBvcnQoKSAqLwogCXZvaWQgZ3Bpb191bmV4cG9ydCgpOwogCisJLyogY3JlYXRlIGEgc3lzZnMgbGluayB0byBhbiBleHBvcnRlZCBHUElPIG5vZGUgKi8KKwlpbnQgZ3Bpb19leHBvcnRfbGluayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGdwaW8pCisKKwogQWZ0ZXIgYSBrZXJuZWwgZHJpdmVyIHJlcXVlc3RzIGEgR1BJTywgaXQgbWF5IG9ubHkgYmUgbWFkZSBhdmFpbGFibGUgaW4KIHRoZSBzeXNmcyBpbnRlcmZhY2UgYnkgZ3Bpb19leHBvcnQoKS4gIFRoZSBkcml2ZXIgY2FuIGNvbnRyb2wgd2hldGhlciB0aGUKIHNpZ25hbCBkaXJlY3Rpb24gbWF5IGNoYW5nZS4gIFRoaXMgaGVscHMgZHJpdmVycyBwcmV2ZW50IHVzZXJzcGFjZSBjb2RlCkBAIC01NjMsMyArNTc1LDggQEAKIFRoaXMgZXhwbGljaXQgZXhwb3J0aW5nIGNhbiBoZWxwIHdpdGggZGVidWdnaW5nIChieSBtYWtpbmcgc29tZSBraW5kcwogb2YgZXhwZXJpbWVudHMgZWFzaWVyKSwgb3IgY2FuIHByb3ZpZGUgYW4gYWx3YXlzLXRoZXJlIGludGVyZmFjZSB0aGF0J3MKIHN1aXRhYmxlIGZvciBkb2N1bWVudGluZyBhcyBwYXJ0IG9mIGEgYm9hcmQgc3VwcG9ydCBwYWNrYWdlLgorCitBZnRlciB0aGUgR1BJTyBoYXMgYmVlbiBleHBvcnRlZCwgZ3Bpb19leHBvcnRfbGluaygpIGFsbG93cyBjcmVhdGluZworc3ltbGlua3MgZnJvbSBlbHNld2hlcmUgaW4gc3lzZnMgdG8gdGhlIEdQSU8gc3lzZnMgbm9kZS4gIERyaXZlcnMgY2FuCit1c2UgdGhpcyB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2UgdW5kZXIgdGhlaXIgb3duIGRldmljZSBpbiBzeXNmcyB3aXRoCithIGRlc2NyaXB0aXZlIG5hbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FjcGlfcG93ZXJfbWV0ZXIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FjcGlfcG93ZXJfbWV0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwMzk5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWNwaV9wb3dlcl9tZXRlcgpAQCAtMCwwICsxLDUxIEBACitLZXJuZWwgZHJpdmVyIHBvd2VyX21ldGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIHRhbGtzIHRvIEFDUEkgNC4wIHBvd2VyIG1ldGVycy4KKworU3VwcG9ydGVkIHN5c3RlbXM6CisgICogQW55IHJlY2VudCBzeXN0ZW0gd2l0aCBBQ1BJIDQuMC4KKyAgICBQcmVmaXg6ICdwb3dlcl9tZXRlcicKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9hY3BpLmluZm8vLCBzZWN0aW9uIDEwLjQuCisKK0F1dGhvcjogRGFycmljayBKLiBXb25nCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHNlbnNvciByZWFkaW5nIHN1cHBvcnQgZm9yIHRoZSBwb3dlciBtZXRlcnMgZXhwb3NlZCBpbgordGhlIEFDUEkgNC4wIHNwZWMgKENoYXB0ZXIgMTAuNCkuICBUaGVzZSBkZXZpY2VzIGhhdmUgYSBzaW1wbGUgc2V0IG9mCitmZWF0dXJlcy0tYSBwb3dlciBtZXRlciB0aGF0IHJldHVybnMgYXZlcmFnZSBwb3dlciB1c2Ugb3ZlciBhIGNvbmZpZ3VyYWJsZQoraW50ZXJ2YWwsIGFuIG9wdGlvbmFsIGNhcHBpbmcgbWVjaGFuaXNtLCBhbmQgYSBjb3VwbGUgb2YgdHJpcCBwb2ludHMuICBUaGUKK3N5c2ZzIGludGVyZmFjZSBjb25mb3JtcyB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uIG91dGxpbmVkIGluIHRoZSAiUG93ZXIiIHNlY3Rpb24KK29mIERvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlLgorCitTcGVjaWFsIEZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwb3dlclsxLSpdX2lzX2JhdHRlcnkga25vYiBpbmRpY2F0ZXMgaWYgdGhlIHBvd2VyIHN1cHBseSBpcyBhIGJhdHRlcnkuCitCb3RoIHBvd2VyWzEtKl1fYXZlcmFnZV97bWluLG1heH0gbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSB0cmlwIHBvaW50cyB3aWxsIHdvcmsuCitXaGVuIGJvdGggb2YgdGhlbSBhcmUgc2V0LCBhbiBBQ1BJIGV2ZW50IHdpbGwgYmUgYnJvYWRjYXN0IG9uIHRoZSBBQ1BJIG5ldGxpbmsKK3NvY2tldCBhbmQgYSBwb2xsIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQgdG8gdGhlIGFwcHJvcHJpYXRlCitwb3dlclsxLSpdX2F2ZXJhZ2Ugc3lzZnMgZmlsZS4KKworVGhlIHBvd2VyWzEtKl1fe21vZGVsX251bWJlciwgc2VyaWFsX251bWJlciwgb2VtX2luZm99IGZpZWxkcyBkaXNwbGF5IGFyYml0cmFyeQorc3RyaW5ncyB0aGF0IEFDUEkgcHJvdmlkZXMgd2l0aCB0aGUgbWV0ZXIuICBUaGUgbWVhc3VyZXMvIGRpcmVjdG9yeSBjb250YWlucworc3ltbGlua3MgdG8gdGhlIGRldmljZXMgdGhhdCB0aGlzIG1ldGVyIG1lYXN1cmVzLgorCitTb21lIGNvbXB1dGVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGVuZm9yY2UgYSBwb3dlciBjYXAgaW4gaGFyZHdhcmUuICBJZiB0aGlzIGlzCit0aGUgY2FzZSwgdGhlIHBvd2VyWzEtKl1fY2FwIGFuZCByZWxhdGVkIHN5c2ZzIGZpbGVzIHdpbGwgYXBwZWFyLiAgV2hlbiB0aGUKK2F2ZXJhZ2UgcG93ZXIgY29uc3VtcHRpb24gZXhjZWVkcyB0aGUgY2FwLCBhbiBBQ1BJIGV2ZW50IHdpbGwgYmUgYnJvYWRjYXN0IG9uCit0aGUgbmV0bGluayBldmVudCBzb2NrZXQgYW5kIGEgcG9sbCBub3RpZmljYXRpb24gd2lsbCBiZSBzZW50IHRvIHRoZQorYXBwcm9wcmlhdGUgcG93ZXJbMS0qXV9hbGFybSBmaWxlIHRvIGluZGljYXRlIHRoYXQgY2FwcGluZyBoYXMgYmVndW4sIGFuZCB0aGUKK2hhcmR3YXJlIGhhcyB0YWtlbiBhY3Rpb24gdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLiAgTW9zdCBsaWtlbHkgdGhpcyB3aWxsCityZXN1bHQgaW4gcmVkdWNlZCBwZXJmb3JtYW5jZS4KKworVGhlcmUgYXJlIGEgZmV3IG90aGVyIEFDUEkgbm90aWZpY2F0aW9ucyB0aGF0IGNhbiBiZSBzZW50IGJ5IHRoZSBmaXJtd2FyZS4gIEluCithbGwgY2FzZXMgdGhlIEFDUEkgZXZlbnQgd2lsbCBiZSBicm9hZGNhc3Qgb24gdGhlIEFDUEkgbmV0bGluayBldmVudCBzb2NrZXQgYXMKK3dlbGwgYXMgc2VudCBhcyBhIHBvbGwgbm90aWZpY2F0aW9uIHRvIGEgc3lzZnMgZmlsZS4gIFRoZSBldmVudHMgYXJlIGFzCitmb2xsb3dzOgorCitwb3dlclsxLSpdX2NhcCB3aWxsIGJlIG5vdGlmaWVkIGlmIHRoZSBmaXJtd2FyZSBjaGFuZ2VzIHRoZSBwb3dlciBjYXAuCitwb3dlclsxLSpdX2ludGVydmFsIHdpbGwgYmUgbm90aWZpZWQgaWYgdGhlIGZpcm13YXJlIGNoYW5nZXMgdGhlIGF2ZXJhZ2luZworaW50ZXJ2YWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2hwZmFsbC5jIGIvRG9jdW1lbnRhdGlvbi9od21vbi9ocGZhbGwuYwppbmRleCBiYmVhMWNjLi42ODFlYzIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2hwZmFsbC5jCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vaHBmYWxsLmMKQEAgLTE2LDYgKzE2LDM0IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisKK2NoYXIgdW5sb2FkX2hlYWRzX3BhdGhbNjRdOworCitpbnQgc2V0X3VubG9hZF9oZWFkc19wYXRoKGNoYXIgKmRldmljZSkKK3sKKwljaGFyIGRldm5hbWVbNjRdOworCisJaWYgKHN0cmxlbihkZXZpY2UpIDw9IDUgfHwgc3RybmNtcChkZXZpY2UsICIvZGV2LyIsIDUpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXN0cm5jcHkoZGV2bmFtZSwgZGV2aWNlICsgNSwgc2l6ZW9mKGRldm5hbWUpKTsKKworCXNucHJpbnRmKHVubG9hZF9oZWFkc19wYXRoLCBzaXplb2YodW5sb2FkX2hlYWRzX3BhdGgpLAorCQkJCSIvc3lzL2Jsb2NrLyVzL2RldmljZS91bmxvYWRfaGVhZHMiLCBkZXZuYW1lKTsKKwlyZXR1cm4gMDsKK30KK2ludCB2YWxpZF9kaXNrKHZvaWQpCit7CisJaW50IGZkID0gb3Blbih1bmxvYWRfaGVhZHNfcGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKHVubG9hZF9oZWFkc19wYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2xvc2UoZmQpOworCXJldHVybiAxOworfQogCiB2b2lkIHdyaXRlX2ludChjaGFyICpwYXRoLCBpbnQgaSkKIHsKQEAgLTQwLDcgKzY4LDcgQEAKIAogdm9pZCBwcm90ZWN0KGludCBzZWNvbmRzKQogewotCXdyaXRlX2ludCgiL3N5cy9ibG9jay9zZGEvZGV2aWNlL3VubG9hZF9oZWFkcyIsIHNlY29uZHMqMTAwMCk7CisJd3JpdGVfaW50KHVubG9hZF9oZWFkc19wYXRoLCBzZWNvbmRzKjEwMDApOwogfQogCiBpbnQgb25fYWModm9pZCkKQEAgLTU3LDQ1ICs4NSw2MiBAQAogewogCXByb3RlY3QoMCk7CiAJc2V0X2xlZCgwKTsKLQogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewotICAgICAgIGludCBmZCwgcmV0OworCWludCBmZCwgcmV0OworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKIAotICAgICAgIGZkID0gb3BlbigiL2Rldi9mcmVlZmFsbCIsIE9fUkRPTkxZKTsKLSAgICAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgICAgICAgICBwZXJyb3IoIm9wZW4iKTsKLSAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgICAgfQorCWlmIChhcmdjID09IDEpCisJCXJldCA9IHNldF91bmxvYWRfaGVhZHNfcGF0aCgiL2Rldi9zZGEiKTsKKwllbHNlIGlmIChhcmdjID09IDIpCisJCXJldCA9IHNldF91bmxvYWRfaGVhZHNfcGF0aChhcmd2WzFdKTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwlpZiAocmV0IHx8ICF2YWxpZF9kaXNrKCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgPGRldmljZT4gKGRlZmF1bHQ6IC9kZXYvc2RhKVxuIiwKKwkJCQlhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlmZCA9IG9wZW4oIi9kZXYvZnJlZWZhbGwiLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoIi9kZXYvZnJlZWZhbGwiKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlkYWVtb24oMCwgMCk7CisJcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KFNDSEVEX0ZJRk8pOworCXNjaGVkX3NldHNjaGVkdWxlcigwLCBTQ0hFRF9GSUZPLCAmcGFyYW0pOworCW1sb2NrYWxsKE1DTF9DVVJSRU5UfE1DTF9GVVRVUkUpOwogCiAJc2lnbmFsKFNJR0FMUk0sIGlnbm9yZV9tZSk7CiAKLSAgICAgICBmb3IgKDs7KSB7Ci0JICAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQ7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBjaGFyIGNvdW50OwogCi0gICAgICAgICAgICAgICByZXQgPSByZWFkKGZkLCAmY291bnQsIHNpemVvZihjb3VudCkpOwotCSAgICAgICBhbGFybSgwKTsKLQkgICAgICAgaWYgKChyZXQgPT0gLTEpICYmIChlcnJubyA9PSBFSU5UUikpIHsKLQkJICAgICAgIC8qIEFsYXJtIGV4cGlyZWQsIHRpbWUgdG8gdW5wYXJrIHRoZSBoZWFkcyAqLwotCQkgICAgICAgY29udGludWU7Ci0JICAgICAgIH0KKwkJcmV0ID0gcmVhZChmZCwgJmNvdW50LCBzaXplb2YoY291bnQpKTsKKwkJYWxhcm0oMCk7CisJCWlmICgocmV0ID09IC0xKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisJCQkvKiBBbGFybSBleHBpcmVkLCB0aW1lIHRvIHVucGFyayB0aGUgaGVhZHMgKi8KKwkJCWNvbnRpbnVlOworCQl9CiAKLSAgICAgICAgICAgICAgIGlmIChyZXQgIT0gc2l6ZW9mKGNvdW50KSkgewotICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInJlYWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICB9CisJCWlmIChyZXQgIT0gc2l6ZW9mKGNvdW50KSkgeworCQkJcGVycm9yKCJyZWFkIik7CisJCQlicmVhazsKKwkJfQogCi0JICAgICAgIHByb3RlY3QoMjEpOwotCSAgICAgICBzZXRfbGVkKDEpOwotCSAgICAgICBpZiAoMSB8fCBvbl9hYygpIHx8IGxpZF9vcGVuKCkpIHsKLQkJICAgICAgIGFsYXJtKDIpOwotCSAgICAgICB9IGVsc2UgewotCQkgICAgICAgYWxhcm0oMjApOwotCSAgICAgICB9Ci0gICAgICAgfQorCQlwcm90ZWN0KDIxKTsKKwkJc2V0X2xlZCgxKTsKKwkJaWYgKDEgfHwgb25fYWMoKSB8fCBsaWRfb3BlbigpKQorCQkJYWxhcm0oMik7CisJCWVsc2UKKwkJCWFsYXJtKDIwKTsKKwl9CiAKLSAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKwljbG9zZShmZCk7CisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNwppbmRleCBkMWViYmU1Li5kYjVjYzEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CkBAIC0zNCw1ICszNCw1IEBACiBzaWduYWwuIFNwZWVkcyBkb3duIHRvIDgzIFJQTSBjYW4gYmUgbWVhc3VyZWQuCiAKIEFuIGFsYXJtIGlzIHRyaWdnZXJlZCBpZiB0aGUgcm90YXRpb24gc3BlZWQgZHJvcHMgYmVsb3cgYSBwcm9ncmFtbWFibGUKLWxpbWl0LiBBbm90aGVyIGFsYXJtIGlzIHRyaWdnZXJlZCBpZiB0aGUgc3BlZWQgaXMgdG9vIGxvdyB0byB0byBiZSBtZWFzdXJlZAorbGltaXQuIEFub3RoZXIgYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSBzcGVlZCBpcyB0b28gbG93IHRvIGJlIG1lYXN1cmVkCiAoaW5jbHVkaW5nIHN0YWxsZWQgb3IgbWlzc2luZyBmYW4pLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKaW5kZXggZjg4OTQ4MS4uYzViMzdjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CkBAIC04LDYgKzgsOCBAQAogICAgIERhdGFzaGVldDogT25seSBhdmFpbGFibGUgdmlhIE5EQSBmcm9tIFNlcnZlcldvcmtzCiAgICogQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCBhbmQgU0I4MDAgc291dGhicmlkZ2VzCiAgICAgRGF0YXNoZWV0OiBOb3QgcHVibGljbHkgYXZhaWxhYmxlCisgICogQU1EIFNCOTAwCisgICAgRGF0YXNoZWV0OiBOb3QgcHVibGljbHkgYXZhaWxhYmxlCiAgICogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIChTTVNDKSBTTEM5MEU2NiAoVmljdG9yeTY2KSBzb3V0aGJyaWRnZQogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBTTVNDIHdlYnNpdGUgaHR0cDovL3d3dy5zbXNjLmNvbQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2E5NTM5IGIvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvcGNhOTUzOQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmZjg5MC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2E5NTM5CisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotS2VybmVsIGRyaXZlciBwY2E5NTM5Ci09PT09PT09PT09PT09PT09PT09PT0KLQotTk9URTogdGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBkcm9wcGVkIHNvb24sIHVzZQotZHJpdmVycy9ncGlvL3BjYTk1MzkuYyBpbnN0ZWFkLgotCi1TdXBwb3J0ZWQgY2hpcHM6Ci0gICogUGhpbGlwcyBQQ0E5NTM5Ci0gICAgUHJlZml4OiAncGNhOTUzOScKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQotICAgIERhdGFzaGVldDoKLSAgICAgICAgaHR0cDovL3d3dy5zZW1pY29uZHVjdG9ycy5waGlsaXBzLmNvbS9hY3JvYmF0L2RhdGFzaGVldHMvUENBOTUzOV8yLnBkZgotCi1BdXRob3I6IEJlbiBHYXJkbmVyIDxiZ2FyZG5lckB3YWJ0ZWMuY29tPgotCi0KLURlc2NyaXB0aW9uCi0tLS0tLS0tLS0tLQotCi1UaGUgUGhpbGlwcyBQQ0E5NTM5IGlzIGEgMTYgYml0IGxvdyBwb3dlciBJL08gZGV2aWNlLgotQWxsIDE2IGxpbmVzIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29uZmlndXJlZCBhcyBhbiBpbnB1dCBvciBvdXRwdXQuCi1UaGUgaW5wdXQgc2Vuc2UgY2FuIGFsc28gYmUgaW52ZXJ0ZWQuCi1UaGUgMTYgbGluZXMgYXJlIHNwbGl0IGJldHdlZW4gdHdvIGJ5dGVzLgotCi0KLURldGVjdGlvbgotLS0tLS0tLS0tCi0KLVRoZSBQQ0E5NTM5IGlzIGRpZmZpY3VsdCB0byBkZXRlY3QgYW5kIG5vdCBjb21tb25seSBmb3VuZCBpbiBQQyBtYWNoaW5lcywKLXNvIHlvdSBoYXZlIHRvIHBhc3MgdGhlIEkyQyBidXMgYW5kIGFkZHJlc3Mgb2YgdGhlIGluc3RhbGxlZCBQQ0E5NTM5Ci1kZXZpY2VzIGV4cGxpY2l0bHkgdG8gdGhlIGRyaXZlciBhdCBsb2FkIHRpbWUgdmlhIHRoZSBmb3JjZT0uLi4gcGFyYW1ldGVyLgotCi0KLVN5c2ZzIGVudHJpZXMKLS0tLS0tLS0tLS0tLS0KLQotRWFjaCBpcyBhIGJ5dGUgdGhhdCBtYXBzIHRvIHRoZSA4IEkvTyBiaXRzLgotQSAnMCcgc3VmZml4IGlzIGZvciBiaXRzIDAtNywgd2hpbGUgJzEnIGlzIGZvciBiaXRzIDgtMTUuCi0KLWlucHV0WzAxXSAgICAgLSByZWFkIHRoZSBjdXJyZW50IHZhbHVlCi1vdXRwdXRbMDFdICAgIC0gc2V0cyB0aGUgb3V0cHV0IHZhbHVlCi1kaXJlY3Rpb25bMDFdIC0gZGlyZWN0aW9uIG9mIGVhY2ggYml0OiAxPWlucHV0LCAwPW91dHB1dAotaW52ZXJ0WzAxXSAgICAtIHRvZ2dsZSB0aGUgaW5wdXQgYml0IHNlbnNlCi0KLWlucHV0IHJlYWRzIHRoZSBhY3R1YWwgc3RhdGUgb2YgdGhlIGxpbmUgYW5kIGlzIGFsd2F5cyBhdmFpbGFibGUuCi1UaGUgZGlyZWN0aW9uIGRlZmF1bHRzIHRvIGlucHV0IGZvciBhbGwgY2hhbm5lbHMuCi0KLQotR2VuZXJhbCBSZW1hcmtzCi0tLS0tLS0tLS0tLS0tLS0KLQotTm90ZSB0aGF0IGVhY2ggb3V0cHV0LCBkaXJlY3Rpb24sIGFuZCBpbnZlcnQgZW50cnkgY29udHJvbHMgOCBsaW5lcy4KLVlvdSBzaG91bGQgdXNlIHRoZSByZWFkLCBtb2RpZnksIHdyaXRlIHNlcXVlbmNlLgotRm9yIGV4YW1wbGUuIHRvIHNldCBvdXRwdXQgYml0IDAgb2YgMS4KLSAgdmFsPSQoY2F0IG91dHB1dDApCi0gIHZhbD0kKCggJHZhbCB8IDEgKSkKLSAgZWNobyAkdmFsID4gb3V0cHV0MAotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTc0IGIvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvcGNmODU3NApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1ODE1Yy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTc0CisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotS2VybmVsIGRyaXZlciBwY2Y4NTc0Ci09PT09PT09PT09PT09PT09PT09PT0KLQotU3VwcG9ydGVkIGNoaXBzOgotICAqIFBoaWxpcHMgUENGODU3NAotICAgIFByZWZpeDogJ3BjZjg1NzQnCi0gICAgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgUGhpbGlwcyBTZW1pY29uZHVjdG9ycyB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3LnNlbWljb25kdWN0b3JzLnBoaWxpcHMuY29tL3BpcC9QQ0Y4NTc0UC5odG1sCi0KLSAqIFBoaWxpcHMgUENGODU3NEEKLSAgICBQcmVmaXg6ICdwY2Y4NTc0YScKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBQaGlsaXBzIFNlbWljb25kdWN0b3JzIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20vcGlwL1BDRjg1NzRQLmh0bWwKLQotQXV0aG9yczoKLSAgICAgICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwKLSAgICAgICAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwKLSAgICAgICAgRGFuIEVhdG9uIDxkYW4uZWF0b25Acm9ja2V0bG9naXguY29tPiwKLSAgICAgICAgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiwKLSAgICAgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+LAotCi0KLURlc2NyaXB0aW9uCi0tLS0tLS0tLS0tLQotVGhlIFBDRjg1NzQoQSkgaXMgYW4gOC1iaXQgSS9PIGV4cGFuZGVyIGZvciB0aGUgSTJDIGJ1cyBwcm9kdWNlZCBieSBQaGlsaXBzCi1TZW1pY29uZHVjdG9ycy4gSXQgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGJ5dGUgSTJDIGludGVyZmFjZSB0byB1cCB0byAxNgotc2VwYXJhdGUgZGV2aWNlcyAoOCB4IFBDRjg1NzQgYW5kIDggeCBQQ0Y4NTc0QSkuCi0KLVRoaXMgZGV2aWNlIGNvbnNpc3RzIG9mIGEgcXVhc2ktYmlkaXJlY3Rpb25hbCBwb3J0LiBFYWNoIG9mIHRoZSBlaWdodCBJL09zCi1jYW4gYmUgaW5kZXBlbmRlbnRseSB1c2VkIGFzIGFuIGlucHV0IG9yIG91dHB1dC4gVG8gc2V0dXAgYW4gSS9PIGFzIGFuCi1pbnB1dCwgeW91IGhhdmUgdG8gd3JpdGUgYSAxIHRvIHRoZSBjb3JyZXNwb25kaW5nIG91dHB1dC4KLQotRm9yIG1vcmUgaW5mb3JtYXRpb25zIHNlZSB0aGUgZGF0YXNoZWV0LgotCi0KLUFjY2Vzc2luZyBQQ0Y4NTc0KEEpIHZpYSAvc3lzIGludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgUENGODU3NChBKSBpcyBwbGFpbmx5IGltcG9zc2libGUgdG8gZGV0ZWN0ICEgU3R1cGlkIGNoaXAuCi1TbywgeW91IGhhdmUgdG8gcGFzcyB0aGUgSTJDIGJ1cyBhbmQgYWRkcmVzcyBvZiB0aGUgaW5zdGFsbGVkIFBDRjg1N0EKLWFuZCBQQ0Y4NTc0QSBkZXZpY2VzIGV4cGxpY2l0bHkgdG8gdGhlIGRyaXZlciBhdCBsb2FkIHRpbWUgdmlhIHRoZQotZm9yY2U9Li4uIHBhcmFtZXRlci4KLQotT24gZGV0ZWN0aW9uIChpLmUuIGluc21vZCwgbW9kcHJvYmUgZXQgYWwuKSwgZGlyZWN0b3JpZXMgYXJlIGJlaW5nCi1jcmVhdGVkIGZvciBlYWNoIGRldGVjdGVkIFBDRjg1NzQoQSk6Ci0KLS9zeXMvYnVzL2kyYy9kZXZpY2VzLzwwPi08MT4vCi13aGVyZSA8MD4gaXMgdGhlIGJ1cyB0aGUgY2hpcCB3YXMgZGV0ZWN0ZWQgb24gKGUuIGcuIGkyYy0wKQotYW5kIDwxPiB0aGUgY2hpcCBhZGRyZXNzIChbMjAuLjI3XSBvciBbMzguLjNmXSk6Ci0KLShleGFtcGxlOiAvc3lzL2J1cy9pMmMvZGV2aWNlcy8xLTAwMjAvKQotCi1JbnNpZGUgdGhlc2UgZGlyZWN0b3JpZXMsIHRoZXJlIGFyZSB0d28gZmlsZXMgZWFjaDoKLXJlYWQgYW5kIHdyaXRlIChhbmQgb25lIGZpbGUgd2l0aCBjaGlwIG5hbWUpLgotCi1UaGUgcmVhZCBmaWxlIGlzIHJlYWQtb25seS4gUmVhZGluZyBnaXZlcyB5b3UgdGhlIGN1cnJlbnQgSS9PIGlucHV0Ci1pZiB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQgaXMgc2V0IGFzIDEsIG90aGVyd2lzZSB0aGUgY3VycmVudCBvdXRwdXQKLXZhbHVlLCB0aGF0IGlzIHRvIHNheSAwLgotCi1UaGUgd3JpdGUgZmlsZSBpcyByZWFkL3dyaXRlLiBXcml0aW5nIGEgdmFsdWUgb3V0cHV0cyBpdCBvbiB0aGUgSS9PCi1wb3J0LiBSZWFkaW5nIHJldHVybnMgdGhlIGxhc3Qgd3JpdHRlbiB2YWx1ZS4gQXMgaXQgaXMgbm90IHBvc3NpYmxlCi10byByZWFkIHRoaXMgdmFsdWUgZnJvbSB0aGUgY2hpcCwgeW91IG5lZWQgdG8gd3JpdGUgYXQgbGVhc3Qgb25jZSB0bwotdGhpcyBmaWxlIGJlZm9yZSB5b3UgY2FuIHJlYWQgYmFjayBmcm9tIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvcGNmODU3NSBiL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3BjZjg1NzUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYjI2OGUuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvcGNmODU3NQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLUFib3V0IHRoZSBQQ0Y4NTc1IGNoaXAgYW5kIHRoZSBwY2Y4NTc1IGtlcm5lbCBkcml2ZXIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIFBDRjg1NzUgY2hpcCBpcyBwcm9kdWNlZCBieSB0aGUgZm9sbG93aW5nIG1hbnVmYWN0dXJlcnM6Ci0KLSAgKiBQaGlsaXBzIE5YUAotICAgIGh0dHA6Ly93d3cubnhwLmNvbS8jL3BpcC9jYj1bdHlwZT1wcm9kdWN0LHBhdGg9NTA4MDcvNDE3MzUvNDE4NTAsZmluYWw9UENGODU3NV8zXXxwaXA9W3BpcD1QQ0Y4NTc1XzNdWzBdCi0KLSAgKiBUZXhhcyBJbnN0cnVtZW50cwotICAgIGh0dHA6Ly9mb2N1cy50aS5jb20vZG9jcy9wcm9kL2ZvbGRlcnMvcHJpbnQvcGNmODU3NS5odG1sCi0KLQotU29tZSB2ZW5kb3JzIHNlbGwgc21hbGwgUENCJ3Mgd2l0aCB0aGUgUENGODU3NSBtb3VudGVkIG9uIGl0LiBZb3UgY2FuIGNvbm5lY3QKLXN1Y2ggYSBib2FyZCB0byBhIExpbnV4IGhvc3QgdmlhIGUuZy4gYW4gVVNCIHRvIEkyQyBpbnRlcmZhY2UuIEV4YW1wbGVzIG9mCi1QQ0IgYm9hcmRzIHdpdGggYSBQQ0Y4NTc1OgotCi0gICogU0ZFIEJyZWFrb3V0IEJvYXJkIGZvciBQQ0Y4NTc1IEkyQyBFeHBhbmRlciBieSBSb2JvdFNob3AKLSAgICBodHRwOi8vd3d3LnJvYm90c2hvcC5jYS9ob21lL3Byb2R1Y3RzL3JvYm90LXBhcnRzL2VsZWN0cm9uaWNzL2FkYXB0ZXJzLWNvbnZlcnRlcnMvc2ZlLXBjZjg1NzUtaTJjLWV4cGFuZGVyLWJvYXJkLmh0bWwKLQotICAqIEJyZWFrb3V0IEJvYXJkIGZvciBQQ0Y4NTc1IEkyQyBFeHBhbmRlciBieSBTcGFyayBGdW4gRWxlY3Ryb25pY3MKLSAgICBodHRwOi8vd3d3LnNwYXJrZnVuLmNvbS9jb21tZXJjZS9wcm9kdWN0X2luZm8ucGhwP3Byb2R1Y3RzX2lkPTgxMzAKLQotCi1EZXNjcmlwdGlvbgotLS0tLS0tLS0tLS0KLVRoZSBQQ0Y4NTc1IGNoaXAgaXMgYSAxNi1iaXQgSS9PIGV4cGFuZGVyIGZvciB0aGUgSTJDIGJ1cy4gVXAgdG8gZWlnaHQgb2YKLXRoZXNlIGNoaXBzIGNhbiBiZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgSTJDIGJ1cy4gWW91IGNhbiBmaW5kIHRoaXMKLWNoaXAgb24gc29tZSBjdXN0b20gZGVzaWduZWQgaGFyZHdhcmUsIGJ1dCB5b3Ugd29uJ3QgZmluZCBpdCBvbiBQQwotbW90aGVyYm9hcmRzLgotCi1UaGUgUENGODU3NSBjaGlwIGNvbnNpc3RzIG9mIGEgMTYtYml0IHF1YXNpLWJpZGlyZWN0aW9uYWwgcG9ydCBhbmQgYW4gSTJDLWJ1cwotaW50ZXJmYWNlLiBFYWNoIG9mIHRoZSBzaXh0ZWVuIEkvTydzIGNhbiBiZSBpbmRlcGVuZGVudGx5IHVzZWQgYXMgYW4gaW5wdXQgb3IKLWFuIG91dHB1dC4gVG8gc2V0IHVwIGFuIEkvTyBwaW4gYXMgYW4gaW5wdXQsIHlvdSBoYXZlIHRvIHdyaXRlIGEgMSB0byB0aGUKLWNvcnJlc3BvbmRpbmcgb3V0cHV0LgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIHRoZSBkYXRhc2hlZXQuCi0KLQotRGV0ZWN0aW9uCi0tLS0tLS0tLS0KLQotVGhlcmUgaXMgbm8gbWV0aG9kIGtub3duIHRvIGRldGVjdCB3aGV0aGVyIGEgY2hpcCBvbiBhIGdpdmVuIEkyQyBhZGRyZXNzIGlzCi1hIFBDRjg1NzUgb3Igd2hldGhlciBpdCBpcyBhbnkgb3RoZXIgSTJDIGRldmljZSwgc28geW91IGhhdmUgdG8gcGFzcyB0aGUgSTJDCi1idXMgYW5kIGFkZHJlc3Mgb2YgdGhlIGluc3RhbGxlZCBQQ0Y4NTc1IGRldmljZXMgZXhwbGljaXRseSB0byB0aGUgZHJpdmVyIGF0Ci1sb2FkIHRpbWUgdmlhIHRoZSBmb3JjZT0uLi4gcGFyYW1ldGVyLgotCi0vc3lzIGludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0KLQotRm9yIGVhY2ggYWRkcmVzcyBvbiB3aGljaCBhIFBDRjg1NzUgY2hpcCB3YXMgZm91bmQgb3IgZm9yY2VkIHRoZSBmb2xsb3dpbmcKLWZpbGVzIHdpbGwgYmUgY3JlYXRlZCB1bmRlciAvc3lzOgotKiAvc3lzL2J1cy9pMmMvZGV2aWNlcy88YnVzPi08YWRkcmVzcz4vcmVhZAotKiAvc3lzL2J1cy9pMmMvZGV2aWNlcy88YnVzPi08YWRkcmVzcz4vd3JpdGUKLXdoZXJlIGJ1cyBpcyB0aGUgSTJDIGJ1cyBudW1iZXIgKDAsIDEsIC4uLikgYW5kIGFkZHJlc3MgaXMgdGhlIGZvdXItZGlnaXQKLWhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA3LWJpdCBJMkMgYWRkcmVzcyBvZiB0aGUgUENGODU3NQotKDAwMjAgLi4gMDAyNykuCi0KLVRoZSByZWFkIGZpbGUgaXMgcmVhZC1vbmx5LiBSZWFkaW5nIGl0IHdpbGwgdHJpZ2dlciBhbiBJMkMgcmVhZCBhbmQgd2lsbCBoZW5jZQotcmVwb3J0IHRoZSBjdXJyZW50IGlucHV0IHN0YXRlIGZvciB0aGUgcGlucyBjb25maWd1cmVkIGFzIGlucHV0cywgYW5kIHRoZQotY3VycmVudCBvdXRwdXQgdmFsdWUgZm9yIHRoZSBwaW5zIGNvbmZpZ3VyZWQgYXMgb3V0cHV0cy4KLQotVGhlIHdyaXRlIGZpbGUgaXMgcmVhZC13cml0ZS4gV3JpdGluZyBhIHZhbHVlIHRvIGl0IHdpbGwgY29uZmlndXJlIGFsbCBwaW5zCi1hcyBvdXRwdXQgZm9yIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpcyB6ZXJvLiBSZWFkaW5nIHRoZSB3cml0ZSBmaWxlIHdpbGwKLXJldHVybiB0aGUgdmFsdWUgbGFzdCB3cml0dGVuLCBvciAtRUFHQUlOIGlmIG5vIHZhbHVlIGhhcyB5ZXQgYmVlbiB3cml0dGVuIHRvCi10aGUgd3JpdGUgZmlsZS4KLQotT24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjaGlwIGlzIG5vdCBjaGFuZ2VkIC0tIHRoZQotY2hpcCBpcyBsZWZ0IGluIHRoZSBzdGF0ZSBpdCB3YXMgYWxyZWFkeSBjb25maWd1cmVkIGluIHRocm91Z2ggZWl0aGVyIHBvd2VyLXVwCi1vciB0aHJvdWdoIHByZXZpb3VzIEkyQyB3cml0ZSBhY3Rpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLXRlc3QuYyBiL0RvY3VtZW50YXRpb24vaWE2NC9hbGlhc2luZy10ZXN0LmMKaW5kZXggZDIzNjEwZi4uM2RmYjc2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLXRlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jCkBAIC0yNCw3ICsyNCw3IEBACiAKIGludCBzdW07CiAKLWludCBtYXBfbWVtKGNoYXIgKnBhdGgsIG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgaW50IHRvdWNoKQorc3RhdGljIGludCBtYXBfbWVtKGNoYXIgKnBhdGgsIG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgaW50IHRvdWNoKQogewogCWludCBmZCwgcmM7CiAJdm9pZCAqYWRkcjsKQEAgLTYyLDcgKzYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHNjYW5fdHJlZShjaGFyICpwYXRoLCBjaGFyICpmaWxlLCBvZmZfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIGludCB0b3VjaCkKK3N0YXRpYyBpbnQgc2Nhbl90cmVlKGNoYXIgKnBhdGgsIGNoYXIgKmZpbGUsIG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgaW50IHRvdWNoKQogewogCXN0cnVjdCBkaXJlbnQgKipuYW1lbGlzdDsKIAljaGFyICpuYW1lLCAqcGF0aDI7CkBAIC0xMTksNyArMTE5LDcgQEAKIAogY2hhciBidWZbMTAyNF07CiAKLWludCByZWFkX3JvbShjaGFyICpwYXRoKQorc3RhdGljIGludCByZWFkX3JvbShjaGFyICpwYXRoKQogewogCWludCBmZCwgcmM7CiAJc2l6ZV90IHNpemUgPSAwOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLWludCBzY2FuX3JvbShjaGFyICpwYXRoLCBjaGFyICpmaWxlKQorc3RhdGljIGludCBzY2FuX3JvbShjaGFyICpwYXRoLCBjaGFyICpmaWxlKQogewogCXN0cnVjdCBkaXJlbnQgKipuYW1lbGlzdDsKIAljaGFyICpuYW1lLCAqcGF0aDI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDBmMTdkMTYuLjZmYTcyOTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC02NzEsNyArNjcxLDcgQEAKIAllYXJseXByaW50az0JW1g4NixTSCxCTEFDS0ZJTl0KIAkJCWVhcmx5cHJpbnRrPXZnYQogCQkJZWFybHlwcmludGs9c2VyaWFsWyx0dHlTblssYmF1ZHJhdGVdXQotCQkJZWFybHlwcmludGs9ZGJncAorCQkJZWFybHlwcmludGs9ZGJncFtkZWJ1Z0NvbnRyb2xsZXIjXQogCiAJCQlBcHBlbmQgIixrZWVwIiB0byBub3QgZGlzYWJsZSBpdCB3aGVuIHRoZSByZWFsIGNvbnNvbGUKIAkJCXRha2VzIG92ZXIuCkBAIC05MzMsNyArOTMzLDcgQEAKIAkJCTEgLS0gZW5hYmxlIGluZm9ybWF0aW9uYWwgaW50ZWdyaXR5IGF1ZGl0aW5nIG1lc3NhZ2VzLgogCiAJaW1hX2hhc2g9CVtJTUFdCi0JCQlGb3JtdDogeyAic2hhMSIgfCAibWQ1IiB9CisJCQlGb3JtYXQ6IHsgInNoYTEiIHwgIm1kNSIgfQogCQkJZGVmYXVsdDogInNoYTEiCiAKIAlpbWFfdGNiCQlbSU1BXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rbWVtY2hlY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9rbWVtY2hlY2sudHh0CmluZGV4IDM2MzA0NDYuLmMyOGY4MjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va21lbWNoZWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ttZW1jaGVjay50eHQKQEAgLTQzLDI2ICs0Myw3IEBACiAxLiBEb3dubG9hZGluZwogPT09PT09PT09PT09PT0KIAota21lbWNoZWNrIGNhbiBvbmx5IGJlIGRvd25sb2FkZWQgdXNpbmcgZ2l0LiBJZiB5b3Ugd2FudCB0byB3cml0ZSBwYXRjaGVzCi1hZ2FpbnN0IHRoZSBjdXJyZW50IGNvZGUsIHlvdSBzaG91bGQgdXNlIHRoZSBrbWVtY2hlY2sgZGV2ZWxvcG1lbnQgYnJhbmNoIG9mCi10aGUgdGlwIHRyZWUuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIHRoZSBsaW51eC1uZXh0IHRyZWUsIHdoaWNoIGFsc28KLWluY2x1ZGVzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBrbWVtY2hlY2suCi0KLUFzc3VtaW5nIHRoYXQgeW91J3ZlIGFscmVhZHkgY2xvbmVkIHRoZSBsaW51eC0yLjYuZ2l0IHJlcG9zaXRvcnksIGFsbCB5b3UKLWhhdmUgdG8gZG8gaXMgYWRkIHRoZSAtdGlwIHRyZWUgYXMgYSByZW1vdGUsIGxpa2UgdGhpczoKLQotCSQgZ2l0IHJlbW90ZSBhZGQgdGlwIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQKLQotVG8gYWN0dWFsbHkgZG93bmxvYWQgdGhlIHRyZWUsIGZldGNoIHRoZSByZW1vdGU6Ci0KLQkkIGdpdCBmZXRjaCB0aXAKLQotQW5kIHRvIGNoZWNrIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggd2l0aCB0aGUga21lbWNoZWNrIGNvZGU6Ci0KLQkkIGdpdCBjaGVja291dCAtYiBrbWVtY2hlY2sgdGlwL2ttZW1jaGVjawotCi1HZW5lcmFsIGluc3RydWN0aW9ucyBmb3IgdGhlIC10aXAgdHJlZSBjYW4gYmUgZm91bmQgaGVyZToKLWh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9taW5nby90aXAuZ2l0L3JlYWRtZS50eHQKK0FzIG9mIHZlcnNpb24gMi42LjMxLXJjMSwga21lbWNoZWNrIGlzIGluY2x1ZGVkIGluIHRoZSBtYWlubGluZSBrZXJuZWwuCiAKIAogMi4gQ29uZmlndXJpbmcgYW5kIGNvbXBpbGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FzdXMtbGFwdG9wLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hc3VzLWxhcHRvcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjNWJlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hc3VzLWxhcHRvcC50eHQKQEAgLTAsMCArMSwyNTggQEAKK0FzdXMgTGFwdG9wIEV4dHJhcworCitWZXJzaW9uIDAuMQorQXVndXN0IDYsIDIwMDkKKworQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KK2h0dHA6Ly9hY3BpNGFzdXMuc2YubmV0LworCisgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZXh0cmEgZmVhdHVyZXMgb2YgQUNQSS1jb21wYXRpYmxlIEFTVVMgbGFwdG9wcy4KKyBJdCBtYXkgYWxzbyBzdXBwb3J0IHNvbWUgTUVESU9OLCBKVkMgb3IgVklDVE9SIGxhcHRvcHMgKHN1Y2ggYXMgTUVESU9OIDk2NzUgb3IKKyBWSUNUT1IgWFA3MjEwIGZvciBleGFtcGxlKS4gSXQgbWFrZXMgYWxsIHRoZSBleHRyYSBidXR0b25zIGdlbmVyYXRlIHN0YW5kYXJkCisgQUNQSSBldmVudHMgdGhhdCBnbyB0aHJvdWdoIC9wcm9jL2FjcGkvZXZlbnRzIGFuZCBpbnB1dCBldmVudHMgKGxpa2Uga2V5Ym9hcmRzKS4KKyBPbiBzb21lIG1vZGVscyBhZGRzIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZSBkaXNwbGF5IGJyaWdodG5lc3MgYW5kIG91dHB1dCwKKyBzd2l0Y2hpbmcgdGhlIExDRCBiYWNrbGlnaHQgb24gYW5kIG9mZiwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGFsbG93cyB5b3UgdG8KKyBibGluayB0aG9zZSBmYW5jeSBMRURzIGludGVuZGVkIGZvciByZXBvcnRpbmcgbWFpbCBhbmQgd2lyZWxlc3Mgc3RhdHVzLgorCitUaGlzIGRyaXZlciBzdXBlcmNlZGVzIHRoZSBvbGQgYXN1c19hY3BpIGRyaXZlci4KKworUmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0KKworICBLZXJuZWwgMi42Llggc291cmNlcywgY29uZmlndXJlZCBmb3IgeW91ciBjb21wdXRlciwgd2l0aCBBQ1BJIHN1cHBvcnQuCisgIFlvdSBhbHNvIG5lZWQgQ09ORklHX0lOUFVUIGFuZCBDT05GSUdfQUNQSS4KKworU3RhdHVzCistLS0tLS0KKworIFRoZSBmZWF0dXJlcyBjdXJyZW50bHkgc3VwcG9ydGVkIGFyZSB0aGUgZm9sbG93aW5nIChzZWUgYmVsb3cgZm9yCisgZGV0YWlsZWQgZGVzY3JpcHRpb24pOgorCisgLSBGbiBrZXkgY29tYmluYXRpb25zCisgLSBCbHVldG9vdGggZW5hYmxlIGFuZCBkaXNhYmxlCisgLSBXbGFuIGVuYWJsZSBhbmQgZGlzYWJsZQorIC0gR1BTIGVuYWJsZSBhbmQgZGlzYWJsZQorIC0gVmlkZW8gb3V0cHV0IHN3aXRjaGluZworIC0gQW1iaWVudCBMaWdodCBTZW5zb3Igb24gYW5kIG9mZgorIC0gTEVEIGNvbnRyb2wKKyAtIExFRCBEaXNwbGF5IGNvbnRyb2wKKyAtIExDRCBicmlnaHRuZXNzIGNvbnRyb2wKKyAtIExDRCBvbiBhbmQgb2ZmCisKKyBBIGNvbXBhdGliaWxpdHkgdGFibGUgYnkgbW9kZWwgYW5kIGZlYXR1cmUgaXMgbWFpbnRhaW5lZCBvbiB0aGUgd2ViCisgc2l0ZSwgaHR0cDovL2FjcGk0YXN1cy5zZi5uZXQvLgorCitVc2FnZQorLS0tLS0KKworICBUcnkgIm1vZHByb2JlIGFzdXNfYWNwaSIuIENoZWNrIHlvdXIgZG1lc2cgKHNpbXBseSB0eXBlIGRtZXNnKS4gWW91IHNob3VsZAorICBzZWUgc29tZSBsaW5lcyBsaWtlIHRoaXMgOgorCisgICAgICBBc3VzIExhcHRvcCBFeHRyYXMgdmVyc2lvbiAwLjQyCisgICAgICAgIEwyRCBtb2RlbCBkZXRlY3RlZC4KKworICBJZiBpdCBpcyBub3QgdGhlIG91dHB1dCB5b3UgaGF2ZSBvbiB5b3VyIGxhcHRvcCwgc2VuZCBpdCAoYW5kIHRoZSBsYXB0b3AncworICBEU0RUKSB0byBtZS4KKworICBUaGF0J3MgYWxsLCBub3csIGFsbCB0aGUgZXZlbnRzIGdlbmVyYXRlZCBieSB0aGUgaG90a2V5cyBvZiB5b3VyIGxhcHRvcAorICBzaG91bGQgYmUgcmVwb3J0ZWQgaW4geW91ciAvcHJvYy9hY3BpL2V2ZW50IGVudHJ5LiBZb3UgY2FuIGNoZWNrIHdpdGgKKyAgImFjcGlfbGlzdGVuIi4KKworICBIb3RrZXlzIGFyZSBhbHNvIHJlcG9ydGVkIGFzIGlucHV0IGtleXMgKGxpa2Uga2V5Ym9hcmRzKSB5b3UgY2FuIGNoZWNrCisgIHdoaWNoIGtleSBhcmUgc3VwcG9ydGVkIHVzaW5nICJ4ZXYiIHVuZGVyIFgxMS4KKworICBZb3UgY2FuIGdldCBpbmZvcm1hdGlvbnMgb24gdGhlIHZlcnNpb24gb2YgeW91ciBEU0RUIHRhYmxlIGJ5IHJlYWRpbmcgdGhlCisgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9pbmZvcyBlbnRyeS4gSWYgeW91IGhhdmUgYSBxdWVzdGlvbiBvciBhCisgIGJ1ZyByZXBvcnQgdG8gZG8sIHBsZWFzZSBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgdGhpcyBlbnRyeS4KKworTEVEcworLS0tLQorCisgIFlvdSBjYW4gbW9kaWZ5IExFRHMgYmUgZWNob2luZyB2YWx1ZXMgdG8gL3N5cy9jbGFzcy9sZWRzL2FzdXM6OiovYnJpZ2h0bmVzcyA6CisgICAgZWNobyAxID4gIC9zeXMvY2xhc3MvbGVkcy9hc3VzOjptYWlsL2JyaWdodG5lc3MKKyAgd2lsbCBzd2l0Y2ggdGhlIG1haWwgTEVEIG9uLgorICBZb3UgY2FuIGFsc28ga25vdyBpZiB0aGV5IGFyZSBvbi9vZmYgYnkgcmVhZGluZyB0aGVpciBjb250ZW50IGFuZCB1c2UKKyAga2VybmVsIHRyaWdnZXJzIGxpa2UgaWRlLWRpc2sgb3IgaGVhcnRiZWF0LgorCitCYWNrbGlnaHQKKy0tLS0tLS0tLQorCisgIFlvdSBjYW4gY29udHJvbCBsY2QgYmFja2xpZ2h0IHBvd2VyIGFuZCBicmlnaHRuZXNzIHdpdGgKKyAgL3N5cy9jbGFzcy9iYWNrbGlnaHQvYXN1cy1sYXB0b3AvLiBCcmlnaHRuZXNzIFZhbHVlcyBhcmUgYmV0d2VlbiAwIGFuZCAxNS4KKworV2lyZWxlc3MgZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tCisKKyAgWW91IGNhbiB0dXJuIHRoZSBpbnRlcm5hbCBCbHVldG9vdGggYWRhcHRlciBvbi9vZmYgd2l0aCB0aGUgYmx1ZXRvb3RoIGVudHJ5CisgIChvbmx5IG9uIG1vZGVscyB3aXRoIEJsdWV0b290aCkuIFRoaXMgdXN1YWxseSBjb250cm9scyB0aGUgYXNzb2NpYXRlZCBMRUQuCisgIFNhbWUgZm9yIFdsYW4gYWRhcHRlci4KKworRGlzcGxheSBzd2l0Y2hpbmcKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTm90ZTogdGhlIGRpc3BsYXkgc3dpdGNoaW5nIGNvZGUgaXMgY3VycmVudGx5IGNvbnNpZGVyZWQgRVhQRVJJTUVOVEFMLgorCisgIFN3aXRjaGluZyB3b3JrcyBmb3IgdGhlIGZvbGxvd2luZyBtb2RlbHM6CisgICAgTDM4MDBDCisgICAgQTI1MDBICisgICAgTDU4MDBDCisgICAgTTUyMDBOCisgICAgVzEwMDBOIChhbGJlaXQgd2l0aCBzb21lIGdsaXRjaGVzKQorICAgIE02NzAwUgorICAgIEE2SkMKKyAgICBGM0oKKworICBTd2l0Y2hpbmcgZG9lc24ndCB3b3JrIGZvciB0aGUgZm9sbG93aW5nOgorICAgIE0zNzAwTgorICAgIEwyWDAwRCAobG9ja3MgdGhlIGxhcHRvcCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMpCisKKyAgVG8gc3dpdGNoIHRoZSBkaXNwbGF5cywgZWNobyB2YWx1ZXMgZnJvbSAwIHRvIDE1IHRvCisgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9kaXNwbGF5LiBUaGUgc2lnbmlmaWNhbmNlIG9mIHRob3NlIHZhbHVlcworICBpcyBhcyBmb2xsb3dzOgorCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICB8IEJpbiAgIHwgVmFsIHwgRFZJIHwgVFYgIHwgQ1JUIHwgTENEIHwKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMDAwMCAgKyAgIDAgKyAgICAgKyAgICAgKyAgICAgKyAgICAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAwMDAxICArICAgMSArICAgICArICAgICArICAgICArICBYICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDAwMTAgICsgICAyICsgICAgICsgICAgICsgIFggICsgICAgICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMDAxMSAgKyAgIDMgKyAgICAgKyAgICAgKyAgWCAgKyAgWCAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAwMTAwICArICAgNCArICAgICArICBYICArICAgICArICAgICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDAxMDEgICsgICA1ICsgICAgICsgIFggICsgICAgICsgWCAgICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMDExMCAgKyAgIDYgKyAgICAgKyAgWCAgKyAgWCAgKyAgICAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAwMTExICArICAgNyArICAgICArICBYICArICBYICArICBYICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDEwMDAgICsgICA4ICsgIFggICsgICAgICsgICAgICsgICAgICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMTAwMSAgKyAgIDkgKyAgWCAgKyAgICAgKyAgICAgKyAgWCAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAxMDEwICArICAxMCArICBYICArICAgICArICBYICArICAgICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDEwMTEgICsgIDExICsgIFggICsgICAgICsgIFggICsgIFggICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMTEwMCAgKyAgMTIgKyAgWCAgKyAgWCAgKyAgICAgKyAgICAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAgKyAxMTAxICArICAxMyArICBYICArICBYICArICAgICArICBYICArCisgICstLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICArIDExMTAgICsgIDE0ICsgIFggICsgIFggICsgIFggICsgICAgICsKKyAgKy0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICsgMTExMSAgKyAgMTUgKyAgWCAgKyAgWCAgKyAgWCAgKyAgWCAgKworICArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKworICBJbiBtb3N0IGNhc2VzLCB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheXMgbXVzdCBiZSBwbHVnZ2VkIGluIGZvciB0aGUgYWJvdmUKKyAgY29tYmluYXRpb25zIHRvIHdvcmsuIFRWLU91dCBtYXkgbmVlZCB0byBiZSBpbml0aWFsaXplZCBhdCBib290IHRpbWUuCisKKyAgRGVidWdnaW5nOgorICAxKSBDaGVjayB3aGV0aGVyIHRoZSBGbitGOCBrZXk6CisgICAgIGEpIGRvZXMgbm90IGxvY2sgdGhlIGxhcHRvcCAodHJ5IGRpc2FibGluZyBDT05GSUdfWDg2X1VQX0FQSUMgb3IgYm9vdCB3aXRoCisgICAgICAgIG5vYXBpYyAvIG5vbGFwaWMgaWYgaXQgZG9lcykKKyAgICAgYikgZ2VuZXJhdGVzIGV2ZW50cyAoMHg2biwgd2hlcmUgbiBpcyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgICAgY29uZmlndXJhdGlvbiBhYm92ZSkKKyAgICAgYykgYWN0dWFsbHkgd29ya3MKKyAgICAgUmVjb3JkIHRoZSBkaXNwIHZhbHVlIGF0IGV2ZXJ5IGNvbmZpZ3VyYXRpb24uCisgIDIpIEVjaG8gdmFsdWVzIGZyb20gMCB0byAxNSB0byAvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvZGlzcGxheS4KKyAgICAgUmVjb3JkIGl0cyB2YWx1ZSwgbm90ZSBhbnkgY2hhbmdlLiBJZiBub3RoaW5nIGNoYW5nZXMsIHRyeSBhIGJyb2FkZXIgcmFuZ2UsCisgICAgIHVwIHRvIDY1NTM1LgorICAzKSBTZW5kIEFOWSBvdXRwdXQgKGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHJlcG9ydHMgYXJlIG5lZWRlZCwgdW5sZXNzIHlvdXIKKyAgICAgbWFjaGluZSBpcyBhbHJlYWR5IGxpc3RlZCBhYm92ZSkgdG8gdGhlIGFjcGk0YXN1cy11c2VyIG1haWxpbmcgbGlzdC4KKworICBOb3RlOiBvbiBzb21lIG1hY2hpbmVzIChlLmcuIEwzQyksIGFmdGVyIHRoZSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLCBvbmx5IDB4Nm4KKyAgZXZlbnRzIGFyZSBnZW5lcmF0ZWQgYW5kIG5vIGFjdHVhbCBzd2l0Y2hpbmcgb2NjdXJzLiBJbiBzdWNoIGEgY2FzZSwgYSBsaW5lCisgIGxpa2U6CisKKyAgICBlY2hvICQoKDEwIyRhcmctNjApKSA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9kaXNwbGF5CisKKyAgd2lsbCB1c3VhbGx5IGRvIHRoZSB0cmljayAoJGFyZyBpcyB0aGUgMDAwMDAwNm4tbGlrZSBldmVudCBwYXNzZWQgdG8gYWNwaWQpLgorCisgIE5vdGU6IHRoZXJlIGlzIGN1cnJlbnRseSBubyByZWxpYWJsZSB3YXkgdG8gcmVhZCBkaXNwbGF5IHN0YXR1cyBvbiB4eE4KKyAgKENlbnRyaW5vKSBtb2RlbHMuCisKK0xFRCBkaXNwbGF5CistLS0tLS0tLS0tLQorCisgIFNvbWUgbW9kZWxzIGxpa2UgdGhlIFcxTiBoYXZlIGEgTEVEIGRpc3BsYXkgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5CisgIHNldmVyYWwgaW5mb3JtYXRpb25zLgorCisgIExFRCBkaXNwbGF5IHdvcmtzIGZvciB0aGUgZm9sbG93aW5nIG1vZGVsczoKKyAgICBXMTAwME4KKyAgICBXMUoKKworICBUbyBjb250cm9sIHRoZSBMRUQgZGlzcGxheSwgdXNlIHRoZSBmb2xsb3dpbmcgOgorCisgICAgZWNobyAweDBUMDAwREREID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wLworCisgIHdoZXJlIFQgY29udHJvbCB0aGUgMyBsZXR0ZXJzIGRpc3BsYXksIGFuZCBEREQgdGhlIDMgZGlnaXRzIGRpc3BsYXksCisgIGFjY29yZGluZyB0byB0aGUgdGFibGVzIGJlbG93LgorCisgICAgICAgICBEREQgKGRpZ2l0cykKKyAgICAgICAgIDAwMCB0byA5OTkgPSBkaXNwbGF5IGRpZ2l0cworICAgICAgICAgQUFBICAgICAgICA9IC0tLQorICAgICAgICAgQkJCIHRvIEZGRiA9IHR1cm4tb2ZmCisKKyAgICAgICAgIFQgICh0eXBlKQorICAgICAgICAgMCA9IG9mZgorICAgICAgICAgMSA9IGR2ZAorICAgICAgICAgMiA9IHZjZAorICAgICAgICAgMyA9IG1wMworICAgICAgICAgNCA9IGNkCisgICAgICAgICA1ID0gdHYKKyAgICAgICAgIDYgPSBjcHUKKyAgICAgICAgIDcgPSB2b2wKKworICBGb3IgZXhhbXBsZSAiZWNobyAweDAxMDAwMDAxID4vc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvbGVkZCIKKyAgd291bGQgZGlzcGxheSAiRFZEMDAxIi4KKworRHJpdmVyIG9wdGlvbnM6CistLS0tLS0tLS0tLS0tLS0KKworIE9wdGlvbnMgY2FuIGJlIHBhc3NlZCB0byB0aGUgYXN1cy1sYXB0b3AgZHJpdmVyIHVzaW5nIHRoZSBzdGFuZGFyZAorIG1vZHVsZSBhcmd1bWVudCBzeW50YXggKDxwYXJhbT49PHZhbHVlPiB3aGVuIHBhc3NpbmcgdGhlIG9wdGlvbiB0byB0aGUKKyBtb2R1bGUgb3IgYXN1cy1sYXB0b3AuPHBhcmFtPj08dmFsdWU+IG9uIHRoZSBrZXJuZWwgYm9vdCBsaW5lIHdoZW4KKyBhc3VzLWxhcHRvcCBpcyBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwpLgorCisJICAgICB3YXBmOiBXQVBGIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBGbitGeCB3bGFuIGtleQorCQkgICBUaGUgc2lnbmlmaWNhbmNlIG9mIHZhbHVlcyBpcyB5ZXQgdG8gYmUgZm91bmQsIGJ1dAorCQkgICBtb3N0IG9mIHRoZSB0aW1lOgorCQkgICAtIDB4MCBzaG91bGQgZG8gbm90aGluZworCQkgICAtIDB4MSBzaG91bGQgYWxsb3cgdG8gY29udHJvbCB0aGUgZGV2aWNlIHdpdGggRm4rRngga2V5LgorCQkgICAtIDB4NCBzaG91bGQgc2VuZCBhbiBBQ1BJIGV2ZW50ICgweDg4KSB3aGlsZSBwcmVzc2luZyB0aGUgRm4rRngga2V5CisJCSAgIC0gMHg1IGxpa2UgMHgxIG9yIDB4NAorCisgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMHgxLgorCitVbnN1cHBvcnRlZCBtb2RlbHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgVGhlc2UgbW9kZWxzIHdpbGwgbmV2ZXIgYmUgc3VwcG9ydGVkIGJ5IHRoaXMgbW9kdWxlLCBhcyB0aGV5IHVzZSBhIGNvbXBsZXRlbHkKKyBkaWZmZXJlbnQgbWVjaGFuaXNtIHRvIGhhbmRsZSBMRURzIGFuZCBleHRyYSBzdHVmZiAobWVhbmluZyB3ZSBoYXZlIG5vIGNsdWUKKyBob3cgaXQgd29ya3MpOgorCisgLSBBU1VTIEExMzAwIChBMUIpLCBBMTM3MEQKKyAtIEFTVVMgTDczMDBHCisgLSBBU1VTIEw4NDAwCisKK1BhdGNoZXMsIEVycm9ycywgUXVlc3Rpb25zOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIEkgYXBwcmVjaWF0ZSBhbnkgc3VjY2VzcyBvciBmYWlsdXJlCisgcmVwb3J0cywgZXNwZWNpYWxseSBpZiB0aGV5IGFkZCB0byBvciBjb3JyZWN0IHRoZSBjb21wYXRpYmlsaXR5IHRhYmxlLgorIFBsZWFzZSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaW4geW91ciByZXBvcnQ6CisKKyAtIEFzdXMgbW9kZWwgbmFtZQorIC0gYSBjb3B5IG9mIHlvdXIgQUNQSSB0YWJsZXMsIHVzaW5nIHRoZSAiYWNwaWR1bXAiIHV0aWxpdHkKKyAtIGEgY29weSBvZiAvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvaW5mb3MKKyAtIHdoaWNoIGRyaXZlciBmZWF0dXJlcyB3b3JrIGFuZCB3aGljaCBkb24ndAorIC0gdGhlIG9ic2VydmVkIGJlaGF2aW9yIG9mIG5vbi13b3JraW5nIGZlYXR1cmVzCisKKyBBbnkgb3RoZXIgY29tbWVudHMgb3IgcGF0Y2hlcyBhcmUgYWxzbyBtb3JlIHRoYW4gd2VsY29tZS4KKworIGFjcGk0YXN1cy11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYWNwaTRhc3VzCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAppbmRleCBlMmRkY2RlLi42ZDAzNDg3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CkBAIC0yMTksNyArMjE5LDcgQEAKIAllY2hvIDB4ZmZmZmZmZmYgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gZW5hYmxlIGFsbCBob3Qga2V5cwogCWVjaG8gMCA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSBkaXNhYmxlIGFsbCBwb3NzaWJsZSBob3Qga2V5cwogCS4uLiBhbnkgb3RoZXIgOC1oZXgtZGlnaXQgbWFzayAuLi4KLQllY2hvIHJlc2V0ID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIHJlc3RvcmUgdGhlIG9yaWdpbmFsIG1hc2sKKwllY2hvIHJlc2V0ID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIHJlc3RvcmUgdGhlIHJlY29tbWVuZGVkIG1hc2sKIAogVGhlIGZvbGxvd2luZyBjb21tYW5kcyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBjYXVzZSB0aGUga2VybmVsCiB0byBsb2cgYSB3YXJuaW5nOgpAQCAtMjQwLDkgKzI0MCwxMyBAQAogCQlSZXR1cm5zIDAuCiAKIAlob3RrZXlfYmlvc19tYXNrOgorCQlERVBSRUNBVEVELCBET04nVCBVU0UsIFdJTEwgQkUgUkVNT1ZFRCBJTiBUSEUgRlVUVVJFLgorCiAJCVJldHVybnMgdGhlIGhvdCBrZXlzIG1hc2sgd2hlbiB0aGlua3BhZC1hY3BpIHdhcyBsb2FkZWQuCiAJCVVwb24gbW9kdWxlIHVubG9hZCwgdGhlIGhvdCBrZXlzIG1hc2sgd2lsbCBiZSByZXN0b3JlZAotCQl0byB0aGlzIHZhbHVlLgorCQl0byB0aGlzIHZhbHVlLiAgIFRoaXMgaXMgYWx3YXlzIDB4ODBjLCBiZWNhdXNlIHRob3NlIGFyZQorCQl0aGUgaG90a2V5cyB0aGF0IHdlcmUgc3VwcG9ydGVkIGJ5IGFuY2llbnQgZmlybXdhcmUKKwkJd2l0aG91dCBtYXNrIHN1cHBvcnQuCiAKIAlob3RrZXlfZW5hYmxlOgogCQlERVBSRUNBVEVELCBXSUxMIEJFIFJFTU9WRUQgU09PTi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQgYi9Eb2N1bWVudGF0aW9uL2xlZHMtY2xhc3MudHh0CmluZGV4IDYzOTk1NTcuLjhmZDVjYTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGVkcy1jbGFzcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sZWRzLWNsYXNzLnR4dApAQCAtMSwzICsxLDQgQEAKKwogTEVEIGhhbmRsaW5nIHVuZGVyIExpbnV4CiA9PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNSwxMCArNiwxMCBAQAogaGFuZGxlZCBieSB0aGUgaW5wdXQgc3Vic3lzdGVtIGFuZCB0aGUgbGVkIGNsYXNzIGlzICpub3QqIG5lZWRlZC4KIAogSW4gaXRzIHNpbXBsZXN0IGZvcm0sIHRoZSBMRUQgY2xhc3MganVzdCBhbGxvd3MgY29udHJvbCBvZiBMRURzIGZyb20KLXVzZXJzcGFjZS4gTEVEcyBhcHBlYXIgaW4gL3N5cy9jbGFzcy9sZWRzLy4gVGhlIGJyaWdodG5lc3MgZmlsZSB3aWxsCi1zZXQgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIExFRCAodGFraW5nIGEgdmFsdWUgMC0yNTUpLiBNb3N0IExFRHMgZG9uJ3QKLWhhdmUgaGFyZHdhcmUgYnJpZ2h0bmVzcyBzdXBwb3J0IHNvIHdpbGwganVzdCBiZSB0dXJuZWQgb24gZm9yIG5vbi16ZXJvCi1icmlnaHRuZXNzIHNldHRpbmdzLgordXNlcnNwYWNlLiBMRURzIGFwcGVhciBpbiAvc3lzL2NsYXNzL2xlZHMvLiBUaGUgbWF4aW11bSBicmlnaHRuZXNzIG9mIHRoZQorTEVEIGlzIGRlZmluZWQgaW4gbWF4X2JyaWdodG5lc3MgZmlsZS4gVGhlIGJyaWdodG5lc3MgZmlsZSB3aWxsIHNldCB0aGUgYnJpZ2h0bmVzcworb2YgdGhlIExFRCAodGFraW5nIGEgdmFsdWUgMC1tYXhfYnJpZ2h0bmVzcykuIE1vc3QgTEVEcyBkb24ndCBoYXZlIGhhcmR3YXJlCiticmlnaHRuZXNzIHN1cHBvcnQgc28gd2lsbCBqdXN0IGJlIHR1cm5lZCBvbiBmb3Igbm9uLXplcm8gYnJpZ2h0bmVzcyBzZXR0aW5ncy4KIAogVGhlIGNsYXNzIGFsc28gaW50cm9kdWNlcyB0aGUgb3B0aW9uYWwgY29uY2VwdCBvZiBhbiBMRUQgdHJpZ2dlci4gQSB0cmlnZ2VyCiBpcyBhIGtlcm5lbCBiYXNlZCBzb3VyY2Ugb2YgbGVkIGV2ZW50cy4gVHJpZ2dlcnMgY2FuIGVpdGhlciBiZSBzaW1wbGUgb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jIGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKaW5kZXggOTUwY2RlNi4uYmE5MzczZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlICJsaW51eC9sZ3Vlc3RfbGF1bmNoZXIuaCIKICNpbmNsdWRlICJsaW51eC92aXJ0aW9fY29uZmlnLmgiCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19uZXQuaCIKICNpbmNsdWRlICJsaW51eC92aXJ0aW9fYmxrLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbnNvbGUuaCIKQEAgLTEzMyw2ICsxMzQsOSBAQAogCS8qIElzIGl0IG9wZXJhdGlvbmFsICovCiAJYm9vbCBydW5uaW5nOwogCisJLyogRG9lcyBHdWVzdCB3YW50IGFuIGludHJydXB0IG9uIGVtcHR5PyAqLworCWJvb2wgaXJxX29uX2VtcHR5OworCiAJLyogRGV2aWNlLXNwZWNpZmljIGRhdGEuICovCiAJdm9pZCAqcHJpdjsKIH07CkBAIC02MjMsMTAgKzYyNywxMyBAQAogCQlyZXR1cm47CiAJdnEtPnBlbmRpbmdfdXNlZCA9IDA7CiAKLQkvKiBJZiB0aGV5IGRvbid0IHdhbnQgYW4gaW50ZXJydXB0LCBkb24ndCBzZW5kIG9uZSwgdW5sZXNzIGVtcHR5LiAqLwotCWlmICgodnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKQotCSAgICAmJiBsZ19sYXN0X2F2YWlsKHZxKSAhPSB2cS0+dnJpbmcuYXZhaWwtPmlkeCkKLQkJcmV0dXJuOworCS8qIElmIHRoZXkgZG9uJ3Qgd2FudCBhbiBpbnRlcnJ1cHQsIGRvbid0IHNlbmQgb25lLi4uICovCisJaWYgKHZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkgeworCQkvKiAuLi4gdW5sZXNzIHRoZXkndmUgYXNrZWQgdXMgdG8gZm9yY2Ugb25lIG9uIGVtcHR5LiAqLworCQlpZiAoIXZxLT5kZXYtPmlycV9vbl9lbXB0eQorCQkgICAgfHwgbGdfbGFzdF9hdmFpbCh2cSkgIT0gdnEtPnZyaW5nLmF2YWlsLT5pZHgpCisJCQlyZXR1cm47CisJfQogCiAJLyogU2VuZCB0aGUgR3Vlc3QgYW4gaW50ZXJydXB0IHRlbGwgdGhlbSB3ZSB1c2VkIHNvbWV0aGluZyB1cC4gKi8KIAlpZiAod3JpdGUobGd1ZXN0X2ZkLCBidWYsIHNpemVvZihidWYpKSAhPSAwKQpAQCAtMTA0Miw2ICsxMDQ5LDE1IEBACiAJY2xvc2UodnEtPmV2ZW50ZmQpOwogfQogCitzdGF0aWMgYm9vbCBhY2NlcHRlZF9mZWF0dXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGJpdCkKK3sKKwljb25zdCB1OCAqZmVhdHVyZXMgPSBnZXRfZmVhdHVyZV9iaXRzKGRldikgKyBkZXYtPmZlYXR1cmVfbGVuOworCisJaWYgKGRldi0+ZmVhdHVyZV9sZW4gPCBiaXQgLyBDSEFSX0JJVCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBmZWF0dXJlc1tiaXQgLyBDSEFSX0JJVF0gJiAoMSA8PCAoYml0ICUgQ0hBUl9CSVQpKTsKK30KKwogc3RhdGljIHZvaWQgc3RhcnRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTEwNTUsNiArMTA3MSw4IEBACiAJCXZlcmJvc2UoIiAlMDJ4IiwgZ2V0X2ZlYXR1cmVfYml0cyhkZXYpCiAJCQlbZGV2LT5mZWF0dXJlX2xlbitpXSk7CiAKKwlkZXYtPmlycV9vbl9lbXB0eSA9IGFjY2VwdGVkX2ZlYXR1cmUoZGV2LCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkpOworCiAJZm9yICh2cSA9IGRldi0+dnE7IHZxOyB2cSA9IHZxLT5uZXh0KSB7CiAJCWlmICh2cS0+c2VydmljZSkKIAkJCWNyZWF0ZV90aHJlYWQodnEpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYXJrZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWFya2Vycy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYjNkMGUuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9tYXJrZXJzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0gCSAgICAgICAgICAgICBVc2luZyB0aGUgTGludXggS2VybmVsIE1hcmtlcnMKLQotCQkJICAgIE1hdGhpZXUgRGVzbm95ZXJzCi0KLQotVGhpcyBkb2N1bWVudCBpbnRyb2R1Y2VzIExpbnV4IEtlcm5lbCBNYXJrZXJzIGFuZCB0aGVpciB1c2UuIEl0IHByb3ZpZGVzCi1leGFtcGxlcyBvZiBob3cgdG8gaW5zZXJ0IG1hcmtlcnMgaW4gdGhlIGtlcm5lbCBhbmQgY29ubmVjdCBwcm9iZSBmdW5jdGlvbnMgdG8KLXRoZW0gYW5kIHByb3ZpZGVzIHNvbWUgZXhhbXBsZXMgb2YgcHJvYmUgZnVuY3Rpb25zLgotCi0KLSogUHVycG9zZSBvZiBtYXJrZXJzCi0KLUEgbWFya2VyIHBsYWNlZCBpbiBjb2RlIHByb3ZpZGVzIGEgaG9vayB0byBjYWxsIGEgZnVuY3Rpb24gKHByb2JlKSB0aGF0IHlvdSBjYW4KLXByb3ZpZGUgYXQgcnVudGltZS4gQSBtYXJrZXIgY2FuIGJlICJvbiIgKGEgcHJvYmUgaXMgY29ubmVjdGVkIHRvIGl0KSBvciAib2ZmIgotKG5vIHByb2JlIGlzIGF0dGFjaGVkKS4gV2hlbiBhIG1hcmtlciBpcyAib2ZmIiBpdCBoYXMgbm8gZWZmZWN0LCBleGNlcHQgZm9yCi1hZGRpbmcgYSB0aW55IHRpbWUgcGVuYWx0eSAoY2hlY2tpbmcgYSBjb25kaXRpb24gZm9yIGEgYnJhbmNoKSBhbmQgc3BhY2UKLXBlbmFsdHkgKGFkZGluZyBhIGZldyBieXRlcyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgYXQgdGhlIGVuZCBvZiB0aGUKLWluc3RydW1lbnRlZCBmdW5jdGlvbiBhbmQgYWRkcyBhIGRhdGEgc3RydWN0dXJlIGluIGEgc2VwYXJhdGUgc2VjdGlvbikuICBXaGVuIGEKLW1hcmtlciBpcyAib24iLCB0aGUgZnVuY3Rpb24geW91IHByb3ZpZGUgaXMgY2FsbGVkIGVhY2ggdGltZSB0aGUgbWFya2VyIGlzCi1leGVjdXRlZCwgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIHRoZSBjYWxsZXIuIFdoZW4gdGhlIGZ1bmN0aW9uIHByb3ZpZGVkCi1lbmRzIGl0cyBleGVjdXRpb24sIGl0IHJldHVybnMgdG8gdGhlIGNhbGxlciAoY29udGludWluZyBmcm9tIHRoZSBtYXJrZXIgc2l0ZSkuCi0KLVlvdSBjYW4gcHV0IG1hcmtlcnMgYXQgaW1wb3J0YW50IGxvY2F0aW9ucyBpbiB0aGUgY29kZS4gTWFya2VycyBhcmUKLWxpZ2h0d2VpZ2h0IGhvb2tzIHRoYXQgY2FuIHBhc3MgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwYXJhbWV0ZXJzLAotZGVzY3JpYmVkIGluIGEgcHJpbnRrLWxpa2UgZm9ybWF0IHN0cmluZywgdG8gdGhlIGF0dGFjaGVkIHByb2JlIGZ1bmN0aW9uLgotCi1UaGV5IGNhbiBiZSB1c2VkIGZvciB0cmFjaW5nIGFuZCBwZXJmb3JtYW5jZSBhY2NvdW50aW5nLgotCi0KLSogVXNhZ2UKLQotSW4gb3JkZXIgdG8gdXNlIHRoZSBtYWNybyB0cmFjZV9tYXJrLCB5b3Ugc2hvdWxkIGluY2x1ZGUgbGludXgvbWFya2VyLmguCi0KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KLQotQW5kLAotCi10cmFjZV9tYXJrKHN1YnN5c3RlbV9ldmVudCwgIm15aW50ICVkIG15c3RyaW5nICVzIiwgc29tZWludCwgc29tZXN0cmluZyk7Ci1XaGVyZSA6Ci0tIHN1YnN5c3RlbV9ldmVudCBpcyBhbiBpZGVudGlmaWVyIHVuaXF1ZSB0byB5b3VyIGV2ZW50Ci0gICAgLSBzdWJzeXN0ZW0gaXMgdGhlIG5hbWUgb2YgeW91ciBzdWJzeXN0ZW0uCi0gICAgLSBldmVudCBpcyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbWFyay4KLS0gIm15aW50ICVkIG15c3RyaW5nICVzIiBpcyB0aGUgZm9ybWF0dGVkIHN0cmluZyBmb3IgdGhlIHNlcmlhbGl6ZXIuICJteWludCIgYW5kCi0gICJteXN0cmluZyIgYXJlIHJlcGVjdGl2ZWx5IHRoZSBmaWVsZCBuYW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IGFuZAotICBzZWNvbmQgcGFyYW1ldGVyLgotLSBzb21laW50IGlzIGFuIGludGVnZXIuCi0tIHNvbWVzdHJpbmcgaXMgYSBjaGFyIHBvaW50ZXIuCi0KLUNvbm5lY3RpbmcgYSBmdW5jdGlvbiAocHJvYmUpIHRvIGEgbWFya2VyIGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEgcHJvYmUgKGZ1bmN0aW9uCi10byBjYWxsKSBmb3IgdGhlIHNwZWNpZmljIG1hcmtlciB0aHJvdWdoIG1hcmtlcl9wcm9iZV9yZWdpc3RlcigpIGFuZCBjYW4gYmUKLWFjdGl2YXRlZCBieSBjYWxsaW5nIG1hcmtlcl9hcm0oKS4gTWFya2VyIGRlYWN0aXZhdGlvbiBjYW4gYmUgZG9uZSBieSBjYWxsaW5nCi1tYXJrZXJfZGlzYXJtKCkgYXMgbWFueSB0aW1lcyBhcyBtYXJrZXJfYXJtKCkgaGFzIGJlZW4gY2FsbGVkLiBSZW1vdmluZyBhIHByb2JlCi1pcyBkb25lIHRocm91Z2ggbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoKTsgaXQgd2lsbCBkaXNhcm0gdGhlIHByb2JlLgotCi1tYXJrZXJfc3luY2hyb25pemVfdW5yZWdpc3RlcigpIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gcHJvYmUgdW5yZWdpc3RyYXRpb24gYW5kCi10aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZgotLSB0aGUgZW5kIG9mIG1vZHVsZSBleGl0IGZ1bmN0aW9uLAotICB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gY2FsbGVyIGxlZnQgdXNpbmcgdGhlIHByb2JlOwotLSB0aGUgZnJlZSBvZiBhbnkgcmVzb3VyY2UgdXNlZCBieSB0aGUgcHJvYmVzLAotICB0byBtYWtlIHN1cmUgdGhlIHByb2JlcyB3b250IGJlIGFjY2Vzc2luZyBpbnZhbGlkIGRhdGEuCi1UaGlzLCBhbmQgdGhlIGZhY3QgdGhhdCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFyb3VuZCB0aGUgcHJvYmUgY2FsbCwgbWFrZSBzdXJlCi10aGF0IHByb2JlIHJlbW92YWwgYW5kIG1vZHVsZSB1bmxvYWQgYXJlIHNhZmUuIFNlZSB0aGUgIlByb2JlIGV4YW1wbGUiIHNlY3Rpb24KLWJlbG93IGZvciBhIHNhbXBsZSBwcm9iZSBtb2R1bGUuCi0KLVRoZSBtYXJrZXIgbWVjaGFuaXNtIHN1cHBvcnRzIGluc2VydGluZyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgbWFya2VyLgotTWFya2VycyBjYW4gYmUgcHV0IGluIGlubGluZSBmdW5jdGlvbnMsIGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucywgYW5kCi11bnJvbGxlZCBsb29wcyBhcyB3ZWxsIGFzIHJlZ3VsYXIgZnVuY3Rpb25zLgotCi1UaGUgbmFtaW5nIHNjaGVtZSAic3Vic3lzdGVtX2V2ZW50IiBpcyBzdWdnZXN0ZWQgaGVyZSBhcyBhIGNvbnZlbnRpb24gaW50ZW5kZWQKLXRvIGxpbWl0IGNvbGxpc2lvbnMuIE1hcmtlciBuYW1lcyBhcmUgZ2xvYmFsIHRvIHRoZSBrZXJuZWw6IHRoZXkgYXJlIGNvbnNpZGVyZWQKLWFzIGJlaW5nIHRoZSBzYW1lIHdoZXRoZXIgdGhleSBhcmUgaW4gdGhlIGNvcmUga2VybmVsIGltYWdlIG9yIGluIG1vZHVsZXMuCi1Db25mbGljdGluZyBmb3JtYXQgc3RyaW5ncyBmb3IgbWFya2VycyB3aXRoIHRoZSBzYW1lIG5hbWUgd2lsbCBjYXVzZSB0aGUgbWFya2VycwotdG8gYmUgZGV0ZWN0ZWQgdG8gaGF2ZSBhIGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nIG5vdCB0byBiZSBhcm1lZCBhbmQgd2lsbCBvdXRwdXQKLWEgcHJpbnRrIHdhcm5pbmcgd2hpY2ggaWRlbnRpZmllcyB0aGUgaW5jb25zaXN0ZW5jeToKLQotIkZvcm1hdCBtaXNtYXRjaCBmb3IgcHJvYmUgcHJvYmVfbmFtZSAoZm9ybWF0KSwgbWFya2VyIChmb3JtYXQpIgotCi1Bbm90aGVyIHdheSB0byB1c2UgbWFya2VycyBpcyB0byBzaW1wbHkgZGVmaW5lIHRoZSBtYXJrZXIgd2l0aG91dCBnZW5lcmF0aW5nIGFueQotZnVuY3Rpb24gY2FsbCB0byBhY3R1YWxseSBjYWxsIGludG8gdGhlIG1hcmtlci4gVGhpcyBpcyB1c2VmdWwgaW4gY29tYmluYXRpb24KLXdpdGggdHJhY2Vwb2ludCBwcm9iZXMgaW4gYSBzY2hlbWUgbGlrZSB0aGlzIDoKLQotdm9pZCBwcm9iZV90cmFjZXBvaW50X25hbWUodW5zaWduZWQgaW50IGFyZzEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLQotREVGSU5FX01BUktFUl9UUChtYXJrZXJfZXZlbnRuYW1lLCB0cmFjZXBvaW50X25hbWUsIHByb2JlX3RyYWNlcG9pbnRfbmFtZSwKLQkiYXJnMSAldSBwaWQgJWQiKTsKLQotbm90cmFjZSB2b2lkIHByb2JlX3RyYWNlcG9pbnRfbmFtZSh1bnNpZ25lZCBpbnQgYXJnMSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0Jc3RydWN0IG1hcmtlciAqbWFya2VyID0gJkdFVF9NQVJLRVIoa2VybmVsX2lycV9lbnRyeSk7Ci0JLyogd3JpdGUgZGF0YSB0byB0cmFjZSBidWZmZXJzIC4uLiAqLwotfQotCi0qIFByb2JlIC8gbWFya2VyIGV4YW1wbGUKLQotU2VlIHRoZSBleGFtcGxlIHByb3ZpZGVkIGluIHNhbXBsZXMvbWFya2Vycy9zcmMKLQotQ29tcGlsZSB0aGVtIHdpdGggeW91ciBrZXJuZWwuCi0KLVJ1biwgYXMgcm9vdCA6Ci1tb2Rwcm9iZSBtYXJrZXItZXhhbXBsZSAoaW5zbW9kIG9yZGVyIGlzIG5vdCBpbXBvcnRhbnQpCi1tb2Rwcm9iZSBwcm9iZS1leGFtcGxlCi1jYXQgL3Byb2MvbWFya2VyLWV4YW1wbGUgKHJldHVybnMgYW4gZXhwZWN0ZWQgZXJyb3IpCi1ybW1vZCBtYXJrZXItZXhhbXBsZSBwcm9iZS1leGFtcGxlCi1kbWVzZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnkudHh0CmluZGV4IDJiM2RlZGQuLjgwMmVmZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS50eHQKQEAgLTEsMTggKzEsNyBAQAogVGhlcmUgYXJlIHNldmVyYWwgY2xhc3NpYyBwcm9ibGVtcyByZWxhdGVkIHRvIG1lbW9yeSBvbiBMaW51eAogc3lzdGVtcy4KIAotCTEpIFRoZXJlIGFyZSBzb21lIGJ1Z2d5IG1vdGhlcmJvYXJkcyB3aGljaCBjYW5ub3QgcHJvcGVybHkgCi0JICAgZGVhbCB3aXRoIHRoZSBtZW1vcnkgYWJvdmUgMTZNQi4gIENvbnNpZGVyIGV4Y2hhbmdpbmcKLQkgICB5b3VyIG1vdGhlcmJvYXJkLgotCi0JMikgWW91IGNhbm5vdCBkbyBETUEgb24gdGhlIElTQSBidXMgdG8gYWRkcmVzc2VzIGFib3ZlCi0JICAgMTZNLiAgTW9zdCBkZXZpY2UgZHJpdmVycyB1bmRlciBMaW51eCBhbGxvdyB0aGUgdXNlCi0gICAgICAgICAgIG9mIGJvdW5jZSBidWZmZXJzIHdoaWNoIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbS4gIERyaXZlcnMKLQkgICB0aGF0IGRvbid0IHVzZSBib3VuY2UgYnVmZmVycyB3aWxsIGJlIHVuc3RhYmxlIHdpdGgKLQkgICBtb3JlIHRoYW4gMTZNIGluc3RhbGxlZC4gIERyaXZlcnMgdGhhdCB1c2UgYm91bmNlIGJ1ZmZlcnMKLQkgICB3aWxsIGJlIE9LLCBidXQgbWF5IGhhdmUgc2xpZ2h0bHkgaGlnaGVyIG92ZXJoZWFkLgotCQotCTMpIFRoZXJlIGFyZSBzb21lIG1vdGhlcmJvYXJkcyB0aGF0IHdpbGwgbm90IGNhY2hlIGFib3ZlCisJMSkgVGhlcmUgYXJlIHNvbWUgbW90aGVyYm9hcmRzIHRoYXQgd2lsbCBub3QgY2FjaGUgYWJvdmUKIAkgICBhIGNlcnRhaW4gcXVhbnRpdHkgb2YgbWVtb3J5LiAgSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlCiAJICAgbW90aGVyYm9hcmRzLCB5b3VyIHN5c3RlbSB3aWxsIGJlIFNMT1dFUiwgbm90IGZhc3RlcgogCSAgIGFzIHlvdSBhZGQgbW9yZSBtZW1vcnkuICBDb25zaWRlciBleGNoYW5naW5nIHlvdXIgCkBAIC0yNCw3ICsxMyw3IEBACiBJZiB5b3UgdXNlICJtZW09IiBvbiBhIG1hY2hpbmUgd2l0aCBQQ0ksIGNvbnNpZGVyIHVzaW5nICJtZW1tYXA9IiB0byBhdm9pZAogcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBjb2xsaXNpb25zLgogCi1TZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBib290IGxvYWRlciAoTElMTywgbG9hZGxpbiwgZXRjLikgYWJvdXQKK1NlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIGJvb3QgbG9hZGVyIChMSUxPLCBncnViLCBsb2FkbGluLCBldGMuKSBhYm91dAogaG93IHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUga2VybmVsLgogCiBUaGVyZSBhcmUgb3RoZXIgbWVtb3J5IHByb2JsZW1zIHdoaWNoIExpbnV4IGNhbm5vdCBkZWFsIHdpdGguICBSYW5kb20KQEAgLTQyLDE5ICszMSwzIEBACiAJICB3aXRoIHRoZSB2ZW5kb3IuIENvbnNpZGVyIHRlc3RpbmcgaXQgd2l0aCBtZW10ZXN0ODYgeW91cnNlbGYuCiAJCiAJKiBFeGNoYW5naW5nIHlvdXIgQ1BVLCBjYWNoZSwgb3IgbW90aGVyYm9hcmQgZm9yIG9uZSB0aGF0IHdvcmtzLgotCi0JKiBEaXNhYmxpbmcgdGhlIGNhY2hlIGZyb20gdGhlIEJJT1MuCi0KLQkqIFRyeSBwYXNzaW5nIHRoZSAibWVtPTRNIiBvcHRpb24gdG8gdGhlIGtlcm5lbCB0byBsaW1pdAotCSAgTGludXggdG8gdXNpbmcgYSB2ZXJ5IHNtYWxsIGFtb3VudCBvZiBtZW1vcnkuIFVzZSAibWVtbWFwPSItb3B0aW9uCi0JICB0b2dldGhlciB3aXRoICJtZW09IiBvbiBzeXN0ZW1zIHdpdGggUENJIHRvIGF2b2lkIHBoeXNpY2FsIGFkZHJlc3MKLQkgIHNwYWNlIGNvbGxpc2lvbnMuCi0KLQotT3RoZXIgdHJpY2tzOgotCi0JKiBUcnkgcGFzc2luZyB0aGUgIm5vLTM4NyIgb3B0aW9uIHRvIHRoZSBrZXJuZWwgdG8gaWdub3JlCi0JICBhIGJ1Z2d5IEZQVS4KLQotCSogVHJ5IHBhc3NpbmcgdGhlICJuby1obHQiIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBwb3RlbnRpYWxseQotICAgICAgICAgIGJ1Z2d5IEhMVCBpbnN0cnVjdGlvbiBpbiB5b3VyIENQVS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZWd1bGF0b3J5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZWd1bGF0b3J5LnR4dAppbmRleCBlYWExYTI1Li5lZTMxMzY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmVndWxhdG9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JlZ3VsYXRvcnkudHh0CkBAIC05Niw3ICs5Niw3IEBACiAKIFRoaXMgZXhhbXBsZSBjb21lcyBmcm9tIHRoZSB6ZDEyMTFydyBkZXZpY2UgZHJpdmVyLiBZb3UgY2FuIHN0YXJ0CiBieSBoYXZpbmcgYSBtYXBwaW5nIG9mIHlvdXIgZGV2aWNlJ3MgRUVQUk9NIGNvdW50cnkvcmVndWxhdG9yeQotZG9tYWluIHZhbHVlIHRvIHRvIGEgc3BlY2lmaWMgYWxwaGEyIGFzIGZvbGxvd3M6Citkb21haW4gdmFsdWUgdG8gYSBzcGVjaWZpYyBhbHBoYTIgYXMgZm9sbG93czoKIAogc3RhdGljIHN0cnVjdCB6ZF9yZWdfYWxwaGEyX21hcCByZWdfYWxwaGEyX21hcFtdID0gewogCXsgWkRfUkVHRE9NQUlOX0ZDQywgIlVTIiB9LApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9udW1hc3RhdC50eHQgYi9Eb2N1bWVudGF0aW9uL251bWFzdGF0LnR4dAppbmRleCA4MDEzM2FjLi45ZmNjOWE2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL251bWFzdGF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL251bWFzdGF0LnR4dApAQCAtNywxMCArNywxMCBAQAogCiBudW1hX2hpdAkJCUEgcHJvY2VzcyB3YW50ZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhpcyBub2RlLAogCQkJCQlhbmQgc3VjY2VlZGVkLgotbnVtYV9taXNzCQkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGlzIG5vZGUsCi0JCQkJCWJ1dCBlbmRlZCB1cCB3aXRoIG1lbW9yeSBmcm9tIGFub3RoZXIuCi1udW1hX2ZvcmVpZ24JCUEgcHJvY2VzcyB3YW50ZWQgdG8gYWxsb2NhdGUgb24gYW5vdGhlciBub2RlLAotCQkJCSAgICBidXQgZW5kZWQgdXAgd2l0aCBtZW1vcnkgZnJvbSB0aGlzIG9uZS4KK251bWFfbWlzcwkJCUEgcHJvY2VzcyB3YW50ZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20gYW5vdGhlciBub2RlLAorCQkJCQlidXQgZW5kZWQgdXAgd2l0aCBtZW1vcnkgZnJvbSB0aGlzIG5vZGUuCitudW1hX2ZvcmVpZ24JCUEgcHJvY2VzcyB3YW50ZWQgdG8gYWxsb2NhdGUgb24gdGhpcyBub2RlLAorCQkJCSAgICBidXQgZW5kZWQgdXAgd2l0aCBtZW1vcnkgZnJvbSBhbm90aGVyIG9uZS4KIGxvY2FsX25vZGUJCQlBIHByb2Nlc3MgcmFuIG9uIHRoaXMgbm9kZSBhbmQgZ290IG1lbW9yeSBmcm9tIGl0Lgogb3RoZXJfbm9kZQkJCUEgcHJvY2VzcyByYW4gb24gdGhpcyBub2RlIGFuZCBnb3QgbWVtb3J5IGZyb20gYW5vdGhlciBub2RlLgogaW50ZXJsZWF2ZV9oaXQgCQlJbnRlcmxlYXZpbmcgd2FudGVkIHRvIGFsbG9jYXRlIGZyb20gdGhpcyBub2RlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9jcmMzMmhhc2guYyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2NyYzMyaGFzaC5jCmluZGV4IDQyMTBlNWEuLjQ0ZjhiZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcGNtY2lhL2NyYzMyaGFzaC5jCisrKyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2NyYzMyaGFzaC5jCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLXVuc2lnbmVkIGludCBjcmMzMih1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHVuc2lnbmVkIGludCBjcmMzMih1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCBpOwogCXVuc2lnbmVkIGludCBjcmMgPSAwOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL2Rlc2lnbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliNTZiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL2Rlc2lnbi50eHQKQEAgLTAsMCArMSwzMyBAQAorUmVndWxhdG9yIEFQSSBkZXNpZ24gbm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgcHJvdmlkZXMgYSBicmllZiwgcGFydGlhbGx5IHN0cnVjdHVyZWQsIG92ZXJ2aWV3IG9mIHNvbWUKK29mIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbnMgd2hpY2ggaW1wYWN0IHRoZSByZWd1bGF0b3IgQVBJIGRlc2lnbi4KKworU2FmZXR5CistLS0tLS0KKworIC0gRXJyb3JzIGluIHJlZ3VsYXRvciBjb25maWd1cmF0aW9uIGNhbiBoYXZlIHZlcnkgc2VyaW91cyBjb25zZXF1ZW5jZXMKKyAgIGZvciB0aGUgc3lzdGVtLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgbGFzdGluZyBoYXJkd2FyZSBkYW1hZ2UuCisgLSBJdCBpcyBub3QgcG9zc2libGUgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIHBvd2VyIGNvbmZ1Z3JhdGlvbgorICAgb2YgdGhlIHN5c3RlbSAtIHNvZnR3YXJlLWVxdWl2YWxlbnQgdmFyaWFudHMgb2YgdGhlIHNhbWUgY2hpcCBtYXkKKyAgIGhhdmUgZGlmZmVyZW50IHBvd2VyIHJlcXVpcm1lbnRzLCBhbmQgbm90IGFsbCBjb21wb25lbnRzIHdpdGggcG93ZXIKKyAgIHJlcXVpcmVtZW50cyBhcmUgdmlzaWJsZSB0byBzb2Z0d2FyZS4KKworICA9PiBUaGUgQVBJIHNob3VsZCBtYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGhhcmR3YXJlIHN0YXRlIHVubGVzcyBpdCBoYXMKKyAgICAgc3BlY2lmaWMga25vd2xlZGdlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2FmZSB0byBkbyBwZXJmb3JtIG9uCisgICAgIHRoaXMgcGFydGljdWxhciBzeXN0ZW0uCisKK0NvbnN1bWVyIHVzZSBjYXNlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAtIFRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgZGV2aWNlcyBpbiBhIHN5c3RlbSB3aWxsIGhhdmUgbm8KKyAgIHJlcXVpcmVtZW50IHRvIGRvIGFueSBydW50aW1lIGNvbmZpZ3VyYXRpb24gb2YgdGhlaXIgcG93ZXIgYmV5b25kCisgICBiZWluZyBhYmxlIHRvIHR1cm4gaXQgb24gb3Igb2ZmLgorCisgLSBNYW55IG9mIHRoZSBwb3dlciBzdXBwbGllcyBpbiB0aGUgc3lzdGVtIHdpbGwgYmUgc2hhcmVkIGJldHdlZW4gbWFueQorICAgZGlmZmVyZW50IGNvbnN1bWVycy4KKworICA9PiBUaGUgY29uc3VtZXIgQVBJIHNob3VsZCBiZSBzdHJ1Y3R1cmVkIHNvIHRoYXQgdGhlc2UgdXNlIGNhc2VzIGFyZQorICAgICB2ZXJ5IGVhc3kgdG8gaGFuZGxlIGFuZCBzbyB0aGF0IGNvbnN1bWVycyB3aWxsIHdvcmsgd2l0aCBzaGFyZWQKKyAgICAgc3VwcGxpZXMgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBlZmZvcnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9tYWNoaW5lLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CmluZGV4IGNlMzQ4N2QuLjYzNzI4ZmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CkBAIC04Nyw3ICs4Nyw3IEBACiB9LAogfTsKIC8qIHJlZ2lzdGVyIHJlZ3VsYXRvciAxIGRldmljZSAqLwotcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bTgzNTBfcmVndWxhdG9yX2RldmljZXNbMF0pOworcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWd1bGF0b3JfZGV2aWNlc1swXSk7CiAKIC8qIHJlZ2lzdGVyIHJlZ3VsYXRvciAyIGRldmljZSAqLwotcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bTgzNTBfcmVndWxhdG9yX2RldmljZXNbMV0pOworcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWd1bGF0b3JfZGV2aWNlc1sxXSk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9vdmVydmlldy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9vdmVydmlldy50eHQKaW5kZXggMGNkZWQ2OS4uZmZkMTg1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3Ivb3ZlcnZpZXcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL292ZXJ2aWV3LnR4dApAQCAtMjksNyArMjksNyBAQAogCiAKICAgbyBQTUlDICAgICAgICAgLSBQb3dlciBNYW5hZ2VtZW50IElDLiBBbiBJQyB0aGF0IGNvbnRhaW5zIG51bWVyb3VzIHJlZ3VsYXRvcnMKLSAgICAgICAgICAgICAgICAgICBhbmQgb2Z0ZW4gY29udGFpbnMgb3RoZXIgc3VzYnN5c3RlbXMuCisgICAgICAgICAgICAgICAgICAgYW5kIG9mdGVuIGNvbnRhaW5zIG90aGVyIHN1YnN5c3RlbXMuCiAKIAogICBvIENvbnN1bWVyICAgICAtIEVsZWN0cm9uaWMgZGV2aWNlIHRoYXQgaXMgc3VwcGxpZWQgcG93ZXIgYnkgYSByZWd1bGF0b3IuCkBAIC0xNjgsNCArMTY4LDQgQEAKICAgICAgIHVzZXJzcGFjZSB2aWEgc3lzZnMuIFRoaXMgY291bGQgYmUgdXNlZCB0byBoZWxwIG1vbml0b3IgZGV2aWNlIHBvd2VyCiAgICAgICBjb25zdW1wdGlvbiBhbmQgc3RhdHVzLgogCi0gICAgICAgIFNlZSBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3JlZ3VsYXRvci1zeXNmcy50eHQKKyAgICAgICAgU2VlIERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dAppbmRleCA0MjAwYWNjLi4zZjhiNTI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKQEAgLTEwLDggKzEwLDkgQEAKIAogRHJpdmVycyBjYW4gcmVnaXN0ZXIgYSByZWd1bGF0b3IgYnkgY2FsbGluZyA6LQogCi1zdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnJlZ3VsYXRvcl9kZXNjKTsKK3N0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpyZWd1bGF0b3JfZGVzYywKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGEsCisJdm9pZCAqZHJpdmVyX2RhdGEpOwogCiBUaGlzIHdpbGwgcmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zIHRvIHRoZSByZWd1bGF0b3IKIGNvcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQKaW5kZXggM2VkMzc5Ny4uOGEwMDQwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dApAQCAtMTAsNiArMTAsOCBAQAogICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiBlU0RIQyBpbnRlcnJ1cHQuCiAgIC0gaW50ZXJydXB0LXBhcmVudCA6IGludGVycnVwdCBzb3VyY2UgcGhhbmRsZS4KICAgLSBjbG9jay1mcmVxdWVuY3kgOiBzcGVjaWZpZXMgZVNESEMgYmFzZSBjbG9jayBmcmVxdWVuY3kuCisgIC0gc2RoY2ksd3AtaW52ZXJ0ZWQgOiAob3B0aW9uYWwpIHNwZWNpZmllcyB0aGF0IGVTREhDIGNvbnRyb2xsZXIKKyAgICByZXBvcnRzIGludmVydGVkIHdyaXRlLXByb3RlY3Qgc3RhdGU7CiAgIC0gc2RoY2ksMS1iaXQtb25seSA6IChvcHRpb25hbCkgc3BlY2lmaWVzIHRoYXQgYSBjb250cm9sbGVyIGNhbgogICAgIG9ubHkgaGFuZGxlIDEtYml0IGRhdGEgdHJhbnNmZXJzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21hcnZlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tYXJ2ZWxsLnR4dAppbmRleCAzNzA4YTJmLi5mMTUzM2Q5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21hcnZlbGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbWFydmVsbC50eHQKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgIGRldmljZXMuICBUaGlzIGZpZWxkIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBjZWxscyBuZWVkZWQgdG8KICAgICAgIHJlcHJlc2VudCB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgb2YgZGV2aWNlcwogICAgICAgd2l0aGluIHRoZSBzeXN0ZW0gY29udHJvbGxlciBjaGlwLgotICAgIC0gI3NpemUtY2VsbHMgOiBTaXplIHJlcHJlc2VudGF0aW9uIGZvciBmb3IgdGhlIG1lbW9yeS1tYXBwZWQKKyAgICAtICNzaXplLWNlbGxzIDogU2l6ZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIG1lbW9yeS1tYXBwZWQKICAgICAgIHJlZ2lzdGVycyB3aXRoaW4gdGhlIHN5c3RlbSBjb250cm9sbGVyIGNoaXAuCiAgICAgLSAjaW50ZXJydXB0LWNlbGxzIDogRGVmaW5lcyB0aGUgd2lkdGggb2YgY2VsbHMgdXNlZCB0byByZXByZXNlbnQKICAgICAgIGludGVycnVwdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3J0Yy50eHQgYi9Eb2N1bWVudGF0aW9uL3J0Yy50eHQKaW5kZXggOGRlZmZjZC4uOTEwNGMxMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ydGMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcnRjLnR4dApAQCAtMTM1LDYgKzEzNSwzMCBAQAogdGhlIHN5c3RlbSBjbG9jayBmcm9tIHRoZSBkaXNjcmV0ZSBSVEMsIGJ1dCB1c2UgdGhlIGludGVncmF0ZWQgb25lIGZvciBhbGwKIG90aGVyIHRhc2tzLCBiZWNhdXNlIG9mIGl0cyBncmVhdGVyIGZ1bmN0aW9uYWxpdHkuCiAKK1NZU0ZTIElOVEVSRkFDRQorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzeXNmcyBpbnRlcmZhY2UgdW5kZXIgL3N5cy9jbGFzcy9ydGMvcnRjTiBwcm92aWRlcyBhY2Nlc3MgdG8gdmFyaW91cworcnRjIGF0dHJpYnV0ZXMgd2l0aG91dCByZXF1aXJpbmcgdGhlIHVzZSBvZiBpb2N0bHMuIEFsbCBkYXRlcyBhbmQgdGltZXMKK2FyZSBpbiB0aGUgUlRDJ3MgdGltZXpvbmUsIHJhdGhlciB0aGFuIGluIHN5c3RlbSB0aW1lLgorCitkYXRlOiAgCSAgIAkgUlRDLXByb3ZpZGVkIGRhdGUKK2hjdG9zeXM6ICAgCSAxIGlmIHRoZSBSVEMgcHJvdmlkZWQgdGhlIHN5c3RlbSB0aW1lIGF0IGJvb3QgdmlhIHRoZQorCQkgQ09ORklHX1JUQ19IQ1RPU1lTIGtlcm5lbCBvcHRpb24sIDAgb3RoZXJ3aXNlCittYXhfdXNlcl9mcmVxOgkgVGhlIG1heGltdW0gaW50ZXJydXB0IHJhdGUgYW4gdW5wcml2aWxlZ2VkIHVzZXIgbWF5IHJlcXVlc3QKKwkJIGZyb20gdGhpcyBSVEMuCituYW1lOgkJIFRoZSBuYW1lIG9mIHRoZSBSVEMgY29ycmVzcG9uZGluZyB0byB0aGlzIHN5c2ZzIGRpcmVjdG9yeQorc2luY2VfZXBvY2g6CSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoIGFjY29yZGluZyB0byB0aGUgUlRDCit0aW1lOgkJIFJUQy1wcm92aWRlZCB0aW1lCit3YWtlYWxhcm06CSBUaGUgdGltZSBhdCB3aGljaCB0aGUgY2xvY2sgd2lsbCBnZW5lcmF0ZSBhIHN5c3RlbSB3YWtldXAKKwkJIGV2ZW50LiBUaGlzIGlzIGEgb25lIHNob3Qgd2FrZXVwIGV2ZW50LCBzbyBtdXN0IGJlIHJlc2V0CisJCSBhZnRlciB3YWtlIGlmIGEgZGFpbHkgd2FrZXVwIGlzIHJlcXVpcmVkLiBGb3JtYXQgaXMgZWl0aGVyCisJCSBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCBvciwgaWYgdGhlcmUncyBhIGxlYWRpbmcgKywgc2Vjb25kcworCQkgaW4gdGhlIGZ1dHVyZS4KKworSU9DVEwgSU5URVJGQUNFCistLS0tLS0tLS0tLS0tLS0KKwogVGhlIGlvY3RsKCkgY2FsbHMgc3VwcG9ydGVkIGJ5IC9kZXYvcnRjIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGUgUlRDIGNsYXNzCiBmcmFtZXdvcmsuICBIb3dldmVyLCBiZWNhdXNlIHRoZSBjaGlwcyBhbmQgc3lzdGVtcyBhcmUgbm90IHN0YW5kYXJkaXplZCwKIHNvbWUgUEMvQVQgZnVuY3Rpb25hbGl0eSBtaWdodCBub3QgYmUgcHJvdmlkZWQuICBBbmQgaW4gdGhlIHNhbWUgd2F5LCBzb21lCkBAIC0xODUsNiArMjA5LDggQEAKIAloYXJkd2FyZSBpbiB0aGUgaXJxX3NldF9mcmVxIGZ1bmN0aW9uLiAgSWYgaXQgaXNuJ3QsIHJldHVybiAtRUlOVkFMLiAgSWYKIAl5b3UgY2Fubm90IGFjdHVhbGx5IGNoYW5nZSB0aGUgZnJlcXVlbmN5LCBkbyBub3QgZGVmaW5lIGlycV9zZXRfZnJlcS4KIAorICAgICoJUlRDX1BJRV9PTiwgUlRDX1BJRV9PRkY6IHRoZSBpcnFfc2V0X3N0YXRlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLgorCiBJZiBhbGwgZWxzZSBmYWlscywgY2hlY2sgb3V0IHRoZSBydGMtdGVzdC5jIGRyaXZlciEKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAppbmRleCBlYWE0ODAxLi4zOGU5ZTdjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKQEAgLTUxNCw3ICs1MTQsNyBAQAogCiB2LglSZW1vdmUgcmVkdW5kYW50IF9fbWVnYXJhaWRfYnVzeXdhaXRfbWJveCByb3V0aW5lCiAKLXZpLglGaXggYnVnIGluIHRoZSBtYW5hZ21lbnQgbW9kdWxlLCB3aGljaCBjYXVzZXMgYSBzeXN0ZW0gbG9ja3VwIHdoZW4gdGhlCit2aS4JRml4IGJ1ZyBpbiB0aGUgbWFuYWdlbWVudCBtb2R1bGUsIHdoaWNoIGNhdXNlcyBhIHN5c3RlbSBsb2NrdXAgd2hlbiB0aGUKIAlJTyBtb2R1bGUgaXMgbG9hZGVkIGFuZCB0aGVuIHVubG9hZGVkLCBmb2xsb3dlZCBieSBleGVjdXRpbmcgYW55CiAJbWFuYWdlbWVudCB1dGlsaXR5LiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIG1hbmFnZW1lbnQgbW9kdWxlIGRvZXMgbm90CiAJaGFuZGxlIHRoZSBhZGFwdGVyIHVucmVnaXN0ZXIgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9mY190cmFuc3BvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZmNfdHJhbnNwb3J0LnR4dAppbmRleCBkN2YxODE3Li5hZWM2NTQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9mY190cmFuc3BvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2ZjX3RyYW5zcG9ydC50eHQKQEAgLTM3OCw3ICszNzgsNyBAQAogICAgICAgaW50IHZwb3J0X2Rpc2FibGUoc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCwgYm9vbCBkaXNhYmxlKQogCiAgICAgd2hlcmU6Ci0gICAgICB2cG9ydDogICAgSXMgdnBvcnQgdG8gdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZAorICAgICAgdnBvcnQ6ICAgIElzIHZwb3J0IHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQKICAgICAgIGRpc2FibGU6ICBJZiAidHJ1ZSIsIHRoZSB2cG9ydCBpcyB0byBiZSBkaXNhYmxlZC4KICAgICAgICAgICAgICAgICBJZiAiZmFsc2UiLCB0aGUgdnBvcnQgaXMgdG8gYmUgZW5hYmxlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCA5N2VlYmQ2Li5mMTcwOGI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtMzg3LDcgKzM4Nyw3IEBACiBTVEFDOTJIRDgzKgogPT09PT09PT09PT0KICAgcmVmCQlSZWZlcmVuY2UgYm9hcmQKLSAgbWljLXJlZglSZWZlcmVuY2UgYm9hcmQgd2l0aCBwb3dlciBtYW5hZ21lbnQgZm9yIHBvcnRzCisgIG1pYy1yZWYJUmVmZXJlbmNlIGJvYXJkIHdpdGggcG93ZXIgbWFuYWdlbWVudCBmb3IgcG9ydHMKICAgZGVsbC1zMTQJRGVsbCBsYXB0b3AKICAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQppbmRleCA0YTAyZDI1Li5kZWFiNTFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQpAQCAtMzUwLDcgKzM1MCw3IEBACiAJCS5yZXN1bWUJCT0gQ0hJUF9yZXN1bWUsCiAJfTsKIAotVGhlIGRyaXZlciBjb3JlIHdpbGwgYXV0bWF0aWNhbGx5IGF0dGVtcHQgdG8gYmluZCB0aGlzIGRyaXZlciB0byBhbnkgU1BJCitUaGUgZHJpdmVyIGNvcmUgd2lsbCBhdXRvbWF0aWNhbGx5IGF0dGVtcHQgdG8gYmluZCB0aGlzIGRyaXZlciB0byBhbnkgU1BJCiBkZXZpY2Ugd2hvc2UgYm9hcmRfaW5mbyBnYXZlIGEgbW9kYWxpYXMgb2YgIkNISVAiLiAgWW91ciBwcm9iZSgpIGNvZGUKIG1pZ2h0IGxvb2sgbGlrZSB0aGlzIHVubGVzcyB5b3UncmUgY3JlYXRpbmcgYSBkZXZpY2Ugd2hpY2ggaXMgbWFuYWdpbmcKIGEgYnVzIChhcHBlYXJpbmcgdW5kZXIgL3N5cy9jbGFzcy9zcGlfbWFzdGVyKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3NwaWRldl90ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGlkZXZfdGVzdC5jCmluZGV4IGMxYTVhYWQuLjEwYWJkMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3BpL3NwaWRldl90ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvc3BpZGV2X3Rlc3QuYwpAQCAtNjksNyArNjksNyBAQAogCXB1dHMoIiIpOwogfQogCi12b2lkIHByaW50X3VzYWdlKGNvbnN0IGNoYXIgKnByb2cpCitzdGF0aWMgdm9pZCBwcmludF91c2FnZShjb25zdCBjaGFyICpwcm9nKQogewogCXByaW50ZigiVXNhZ2U6ICVzIFstRHNiZGxIT0xDM11cbiIsIHByb2cpOwogCXB1dHMoIiAgLUQgLS1kZXZpY2UgICBkZXZpY2UgdG8gdXNlIChkZWZhdWx0IC9kZXYvc3BpZGV2MS4xKVxuIgpAQCAtODUsNyArODUsNyBAQAogCWV4aXQoMSk7CiB9CiAKLXZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqYXJndltdKQorc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXdoaWxlICgxKSB7CiAJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvcHRzW10gPSB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAppbmRleCAyZGJmZjUzLi5iM2Q4YjQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKQEAgLTMxMywzMSArMzEzLDQzIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKK3ByaW50a19kZWxheToKKworRGVsYXkgZWFjaCBwcmludGsgbWVzc2FnZSBpbiBwcmludGtfZGVsYXkgbWlsbGlzZWNvbmRzCisKK1ZhbHVlIGZyb20gMCAtIDEwMDAwIGlzIGFsbG93ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIHJhbmRvbWl6ZS12YS1zcGFjZToKIAogVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIHByb2Nlc3MgYWRkcmVzcwogc3BhY2UgcmFuZG9taXphdGlvbiB0aGF0IGlzIHVzZWQgaW4gdGhlIHN5c3RlbSwgZm9yIGFyY2hpdGVjdHVyZXMKIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiAKLTAgLSBUdXJuIHRoZSBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgcmFuZG9taXphdGlvbiBvZmYgYnkgZGVmYXVsdC4KKzAgLSBUdXJuIHRoZSBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgcmFuZG9taXphdGlvbiBvZmYuICBUaGlzIGlzIHRoZQorICAgIGRlZmF1bHQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUgYW55d2F5cywKKyAgICBhbmQga2VybmVscyB0aGF0IGFyZSBib290ZWQgd2l0aCB0aGUgIm5vcmFuZG1hcHMiIHBhcmFtZXRlci4KIAogMSAtIE1ha2UgdGhlIGFkZHJlc3NlcyBvZiBtbWFwIGJhc2UsIHN0YWNrIGFuZCBWRFNPIHBhZ2UgcmFuZG9taXplZC4KICAgICBUaGlzLCBhbW9uZyBvdGhlciB0aGluZ3MsIGltcGxpZXMgdGhhdCBzaGFyZWQgbGlicmFyaWVzIHdpbGwgYmUKLSAgICBsb2FkZWQgdG8gcmFuZG9tIGFkZHJlc3Nlcy4gQWxzbyBmb3IgUElFLWxpbmtlZCBiaW5hcmllcywgdGhlIGxvY2F0aW9uCi0gICAgb2YgY29kZSBzdGFydCBpcyByYW5kb21pemVkLgorICAgIGxvYWRlZCB0byByYW5kb20gYWRkcmVzc2VzLiAgQWxzbyBmb3IgUElFLWxpbmtlZCBiaW5hcmllcywgdGhlCisgICAgbG9jYXRpb24gb2YgY29kZSBzdGFydCBpcyByYW5kb21pemVkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB0aGUKKyAgICBDT05GSUdfQ09NUEFUX0JSSyBvcHRpb24gaXMgZW5hYmxlZC4KIAotICAgIFdpdGggaGVhcCByYW5kb21pemF0aW9uLCB0aGUgc2l0dWF0aW9uIGlzIGEgbGl0dGxlIGJpdCBtb3JlCi0gICAgY29tcGxpY2F0ZWQuCi0gICAgVGhlcmUgYSBmZXcgbGVnYWN5IGFwcGxpY2F0aW9ucyBvdXQgdGhlcmUgKHN1Y2ggYXMgc29tZSBhbmNpZW50CisyIC0gQWRkaXRpb25hbGx5IGVuYWJsZSBoZWFwIHJhbmRvbWl6YXRpb24uICBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmCisgICAgQ09ORklHX0NPTVBBVF9CUksgaXMgZGlzYWJsZWQuCisKKyAgICBUaGVyZSBhcmUgYSBmZXcgbGVnYWN5IGFwcGxpY2F0aW9ucyBvdXQgdGhlcmUgKHN1Y2ggYXMgc29tZSBhbmNpZW50CiAgICAgdmVyc2lvbnMgb2YgbGliYy5zby41IGZyb20gMTk5NikgdGhhdCBhc3N1bWUgdGhhdCBicmsgYXJlYSBzdGFydHMKLSAgICBqdXN0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGNvZGUrYnNzLiBUaGVzZSBhcHBsaWNhdGlvbnMgYnJlYWsgd2hlbgotICAgIHN0YXJ0IG9mIHRoZSBicmsgYXJlYSBpcyByYW5kb21pemVkLiBUaGVyZSBhcmUgaG93ZXZlciBubyBrbm93bgorICAgIGp1c3QgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgY29kZStic3MuICBUaGVzZSBhcHBsaWNhdGlvbnMgYnJlYWsgd2hlbgorICAgIHN0YXJ0IG9mIHRoZSBicmsgYXJlYSBpcyByYW5kb21pemVkLiAgVGhlcmUgYXJlIGhvd2V2ZXIgbm8ga25vd24KICAgICBub24tbGVnYWN5IGFwcGxpY2F0aW9ucyB0aGF0IHdvdWxkIGJlIGJyb2tlbiB0aGlzIHdheSwgc28gZm9yIG1vc3QKLSAgICBzeXN0ZW1zIGl0IGlzIHNhZmUgdG8gY2hvb3NlIGZ1bGwgcmFuZG9taXphdGlvbi4gSG93ZXZlciB0aGVyZSBpcwotICAgIGEgQ09ORklHX0NPTVBBVF9CUksgb3B0aW9uIGZvciBzeXN0ZW1zIHdpdGggYW5jaWVudCBhbmQvb3IgYnJva2VuCi0gICAgYmluYXJpZXMsIHRoYXQgbWFrZXMgaGVhcCBub24tcmFuZG9taXplZCwgYnV0IGtlZXBzIGFsbCBvdGhlcgotICAgIHBhcnRzIG9mIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSByYW5kb21pemVkIGlmIHJhbmRvbWl6ZV92YV9zcGFjZQotICAgIHN5c2N0bCBpcyB0dXJuZWQgb24uCisgICAgc3lzdGVtcyBpdCBpcyBzYWZlIHRvIGNob29zZSBmdWxsIHJhbmRvbWl6YXRpb24uCisKKyAgICBTeXN0ZW1zIHdpdGggYW5jaWVudCBhbmQvb3IgYnJva2VuIGJpbmFyaWVzIHNob3VsZCBiZSBjb25maWd1cmVkCisgICAgd2l0aCBDT05GSUdfQ09NUEFUX0JSSyBlbmFibGVkLCB3aGljaCBleGNsdWRlcyB0aGUgaGVhcCBmcm9tIHByb2Nlc3MKKyAgICBhZGRyZXNzIHNwYWNlIHJhbmRvbWl6YXRpb24uCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dAppbmRleCBjNGRlNjM1Li5lNmZiMWVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CkBAIC01ODUsNyArNTg1LDkgQEAKIEF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHZmc19jYWNoZV9wcmVzc3VyZT0xMDAgdGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgdG8KIHJlY2xhaW0gZGVudHJpZXMgYW5kIGlub2RlcyBhdCBhICJmYWlyIiByYXRlIHdpdGggcmVzcGVjdCB0byBwYWdlY2FjaGUgYW5kCiBzd2FwY2FjaGUgcmVjbGFpbS4gIERlY3JlYXNpbmcgdmZzX2NhY2hlX3ByZXNzdXJlIGNhdXNlcyB0aGUga2VybmVsIHRvIHByZWZlcgotdG8gcmV0YWluIGRlbnRyeSBhbmQgaW5vZGUgY2FjaGVzLiAgSW5jcmVhc2luZyB2ZnNfY2FjaGVfcHJlc3N1cmUgYmV5b25kIDEwMAordG8gcmV0YWluIGRlbnRyeSBhbmQgaW5vZGUgY2FjaGVzLiBXaGVuIHZmc19jYWNoZV9wcmVzc3VyZT0wLCB0aGUga2VybmVsIHdpbGwKK25ldmVyIHJlY2xhaW0gZGVudHJpZXMgYW5kIGlub2RlcyBkdWUgdG8gbWVtb3J5IHByZXNzdXJlIGFuZCB0aGlzIGNhbiBlYXNpbHkKK2xlYWQgdG8gb3V0LW9mLW1lbW9yeSBjb25kaXRpb25zLiBJbmNyZWFzaW5nIHZmc19jYWNoZV9wcmVzc3VyZSBiZXlvbmQgMTAwCiBjYXVzZXMgdGhlIGtlcm5lbCB0byBwcmVmZXIgdG8gcmVjbGFpbSBkZW50cmllcyBhbmQgaW5vZGVzLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMta21lbS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWYyYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMta21lbS50eHQKQEAgLTAsMCArMSwxMDcgQEAKKwkJCVN1YnN5c3RlbSBUcmFjZSBQb2ludHM6IGttZW0KKworVGhlIHRyYWNpbmcgc3lzdGVtIGttZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KK3dpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmb3VyIG1ham9yIHN1YmhlYWRpbmdzLgorCisgIG8gU2xhYiBhbGxvY2F0aW9uIG9mIHNtYWxsIG9iamVjdHMgb2YgdW5rbm93biB0eXBlIChrbWFsbG9jKQorICBvIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIGtub3duIHR5cGUKKyAgbyBQYWdlIGFsbG9jYXRpb24KKyAgbyBQZXItQ1BVIEFsbG9jYXRvciBBY3Rpdml0eQorICBvIEV4dGVybmFsIEZyYWdtZW50YXRpb24KKworVGhpcyBkb2N1bWVudCB3aWxsIGRlc2NyaWJlIHdoYXQgZWFjaCBvZiB0aGUgdHJhY2Vwb2ludHMgYXJlIGFuZCB3aHkgdGhleQorbWlnaHQgYmUgdXNlZnVsLgorCisxLiBTbGFiIGFsbG9jYXRpb24gb2Ygc21hbGwgb2JqZWN0cyBvZiB1bmtub3duIHR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQora21hbGxvYwkJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzCitrbWFsbG9jX25vZGUJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzIG5vZGU9JWQKK2tmcmVlCQljYWxsX3NpdGU9JWx4IHB0cj0lcAorCitIZWF2eSBhY3Rpdml0eSBmb3IgdGhlc2UgZXZlbnRzIG1heSBpbmRpY2F0ZSB0aGF0IGEgc3BlY2lmaWMgY2FjaGUgaXMKK2p1c3RpZmllZCwgcGFydGljdWxhcmx5IGlmIGttYWxsb2Mgc2xhYiBwYWdlcyBhcmUgZ2V0dGluZyBzaWduaWZpY2FudGx5CitpbnRlcm5hbCBmcmFnbWVudGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBhbGxvY2F0aW9uIHBhdHRlcm4uIEJ5IGNvcnJlbGF0aW5nCitrbWFsbG9jIHdpdGgga2ZyZWUsIGl0IG1heSBiZSBwb3NzaWJsZSB0byBpZGVudGlmeSBtZW1vcnkgbGVha3MgYW5kIHdoZXJlCit0aGUgYWxsb2NhdGlvbiBzaXRlcyB3ZXJlLgorCisKKzIuIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIGtub3duIHR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2ttZW1fY2FjaGVfYWxsb2MJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzCitrbWVtX2NhY2hlX2FsbG9jX25vZGUJY2FsbF9zaXRlPSVseCBwdHI9JXAgYnl0ZXNfcmVxPSV6dSBieXRlc19hbGxvYz0lenUgZ2ZwX2ZsYWdzPSVzIG5vZGU9JWQKK2ttZW1fY2FjaGVfZnJlZQkJY2FsbF9zaXRlPSVseCBwdHI9JXAKKworVGhlc2UgZXZlbnRzIGFyZSBzaW1pbGFyIGluIHVzYWdlIHRvIHRoZSBrbWFsbG9jLXJlbGF0ZWQgZXZlbnRzIGV4Y2VwdCB0aGF0CitpdCBpcyBsaWtlbHkgZWFzaWVyIHRvIHBpbiB0aGUgZXZlbnQgZG93biB0byBhIHNwZWNpZmljIGNhY2hlLiBBdCB0aGUgdGltZQorb2Ygd3JpdGluZywgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIHdoYXQgc2xhYiBpcyBiZWluZyBhbGxvY2F0ZWQgZnJvbSwKK2J1dCB0aGUgY2FsbF9zaXRlIGNhbiB1c3VhbGx5IGJlIHVzZWQgdG8gZXh0cmFwb2xhdGUgdGhhdCBpbmZvcm1hdGlvbgorCiszLiBQYWdlIGFsbG9jYXRpb24KKz09PT09PT09PT09PT09PT09PQorbW1fcGFnZV9hbGxvYwkJICBwYWdlPSVwIHBmbj0lbHUgb3JkZXI9JWQgbWlncmF0ZXR5cGU9JWQgZ2ZwX2ZsYWdzPSVzCittbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkIHBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0ldSBtaWdyYXRldHlwZT0lZCBjcHU9JWQgcGVyY3B1X3JlZmlsbD0lZAorbW1fcGFnZV9mcmVlX2RpcmVjdAkgIHBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZAorbW1fcGFnZXZlY19mcmVlCQkgIHBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCBjb2xkPSVkCisKK1RoZXNlIGZvdXIgZXZlbnRzIGRlYWwgd2l0aCBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcuIG1tX3BhZ2VfYWxsb2MgaXMKK2Egc2ltcGxlIGluZGljYXRvciBvZiBwYWdlIGFsbG9jYXRvciBhY3Rpdml0eS4gUGFnZXMgbWF5IGJlIGFsbG9jYXRlZCBmcm9tCit0aGUgcGVyLUNQVSBhbGxvY2F0b3IgKGhpZ2ggcGVyZm9ybWFuY2UpIG9yIHRoZSBidWRkeSBhbGxvY2F0b3IuCisKK0lmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgZGlyZWN0bHkgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCB0aGUKK21tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQgZXZlbnQgaXMgdHJpZ2dlcmVkLiBUaGlzIGV2ZW50IGlzIGltcG9ydGFudCBhcyBoaWdoCithbW91bnRzIG9mIGFjdGl2aXR5IGltcGx5IGhpZ2ggYWN0aXZpdHkgb24gdGhlIHpvbmUtPmxvY2suIFRha2luZyB0aGlzIGxvY2sKK2ltcGFpcnMgcGVyZm9ybWFuY2UgYnkgZGlzYWJsaW5nIGludGVycnVwdHMsIGRpcnR5aW5nIGNhY2hlIGxpbmVzIGJldHdlZW4KK0NQVXMgYW5kIHNlcmlhbGlzaW5nIG1hbnkgQ1BVcy4KKworV2hlbiBhIHBhZ2UgaXMgZnJlZWQgZGlyZWN0bHkgYnkgdGhlIGNhbGxlciwgdGhlIG1tX3BhZ2VfZnJlZV9kaXJlY3QgZXZlbnQKK2lzIHRyaWdnZXJlZC4gU2lnbmlmaWNhbnQgYW1vdW50cyBvZiBhY3Rpdml0eSBoZXJlIGNvdWxkIGluZGljYXRlIHRoYXQgdGhlCitjYWxsZXJzIHNob3VsZCBiZSBiYXRjaGluZyB0aGVpciBhY3Rpdml0aWVzLgorCitXaGVuIHBhZ2VzIGFyZSBmcmVlZCB1c2luZyBhIHBhZ2V2ZWMsIHRoZSBtbV9wYWdldmVjX2ZyZWUgaXMKK3RyaWdnZXJlZC4gQnJvYWRseSBzcGVha2luZywgcGFnZXMgYXJlIHRha2VuIG9mZiB0aGUgTFJVIGxvY2sgaW4gYnVsayBhbmQKK2ZyZWVkIGluIGJhdGNoIHdpdGggYSBwYWdldmVjLiBTaWduaWZpY2FudCBhbW91bnRzIG9mIGFjdGl2aXR5IGhlcmUgY291bGQKK2luZGljYXRlIHRoYXQgdGhlIHN5c3RlbSBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUgYW5kIGNhbiBhbHNvIGluZGljYXRlCitjb250ZW50aW9uIG9uIHRoZSB6b25lLT5scnVfbG9jay4KKworNC4gUGVyLUNQVSBBbGxvY2F0b3IgQWN0aXZpdHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkCXBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0ldSBtaWdyYXRldHlwZT0lZCBjcHU9JWQgcGVyY3B1X3JlZmlsbD0lZAorbW1fcGFnZV9wY3B1X2RyYWluCQlwYWdlPSVwIHBmbj0lbHUgb3JkZXI9JWQgY3B1PSVkIG1pZ3JhdGV0eXBlPSVkCisKK0luIGZyb250IG9mIHRoZSBwYWdlIGFsbG9jYXRvciBpcyBhIHBlci1jcHUgcGFnZSBhbGxvY2F0b3IuIEl0IGV4aXN0cyBvbmx5Citmb3Igb3JkZXItMCBwYWdlcywgcmVkdWNlcyBjb250ZW50aW9uIG9uIHRoZSB6b25lLT5sb2NrIGFuZCByZWR1Y2VzIHRoZQorYW1vdW50IG9mIHdyaXRpbmcgb24gc3RydWN0IHBhZ2UuCisKK1doZW4gYSBwZXItQ1BVIGxpc3QgaXMgZW1wdHkgb3IgcGFnZXMgb2YgdGhlIHdyb25nIHR5cGUgYXJlIGFsbG9jYXRlZCwKK3RoZSB6b25lLT5sb2NrIHdpbGwgYmUgdGFrZW4gb25jZSBhbmQgdGhlIHBlci1DUFUgbGlzdCByZWZpbGxlZC4gVGhlIGV2ZW50Cit0cmlnZ2VyZWQgaXMgbW1fcGFnZV9hbGxvY196b25lX2xvY2tlZCBmb3IgZWFjaCBwYWdlIGFsbG9jYXRlZCB3aXRoIHRoZQorZXZlbnQgaW5kaWNhdGluZyB3aGV0aGVyIGl0IGlzIGZvciBhIHBlcmNwdV9yZWZpbGwgb3Igbm90LgorCitXaGVuIHRoZSBwZXItQ1BVIGxpc3QgaXMgdG9vIGZ1bGwsIGEgbnVtYmVyIG9mIHBhZ2VzIGFyZSBmcmVlZCwgZWFjaCBvbmUKK3doaWNoIHRyaWdnZXJzIGEgbW1fcGFnZV9wY3B1X2RyYWluIGV2ZW50LgorCitUaGUgaW5kaXZpZHVhbCBuYXR1cmUgb2YgdGhlIGV2ZW50cyBhcmUgc28gdGhhdCBwYWdlcyBjYW4gYmUgdHJhY2tlZAorYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLiBBIG51bWJlciBvZiBkcmFpbiBvciByZWZpbGwgcGFnZXMgdGhhdCBvY2N1cgorY29uc2VjdXRpdmVseSBpbXBseSB0aGUgem9uZS0+bG9jayBiZWluZyB0YWtlbiBvbmNlLiBMYXJnZSBhbW91bnRzIG9mIFBDUAorcmVmaWxscyBhbmQgZHJhaW5zIGNvdWxkIGltcGx5IGFuIGltYmFsYW5jZSBiZXR3ZWVuIENQVXMgd2hlcmUgdG9vIG11Y2ggd29yaworaXMgYmVpbmcgY29uY2VudHJhdGVkIGluIG9uZSBwbGFjZS4gSXQgY291bGQgYWxzbyBpbmRpY2F0ZSB0aGF0IHRoZSBwZXItQ1BVCitsaXN0cyBzaG91bGQgYmUgYSBsYXJnZXIgc2l6ZS4gRmluYWxseSwgbGFyZ2UgYW1vdW50cyBvZiByZWZpbGxzIG9uIG9uZSBDUFUKK2FuZCBkcmFpbnMgb24gYW5vdGhlciBjb3VsZCBiZSBhIGZhY3RvciBpbiBjYXVzaW5nIGxhcmdlIGFtb3VudHMgb2YgY2FjaGUKK2xpbmUgYm91bmNlcyBkdWUgdG8gd3JpdGVzIGJldHdlZW4gQ1BVcyBhbmQgd29ydGggaW52ZXN0aWdhdGluZyBpZiBwYWdlcworY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgb24gdGhlIHNhbWUgQ1BVIHRocm91Z2ggc29tZSBhbGdvcml0aG0gY2hhbmdlLgorCis1LiBFeHRlcm5hbCBGcmFnbWVudGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09CittbV9wYWdlX2FsbG9jX2V4dGZyYWcJCXBhZ2U9JXAgcGZuPSVsdSBhbGxvY19vcmRlcj0lZCBmYWxsYmFja19vcmRlcj0lZCBwYWdlYmxvY2tfb3JkZXI9JWQgYWxsb2NfbWlncmF0ZXR5cGU9JWQgZmFsbGJhY2tfbWlncmF0ZXR5cGU9JWQgZnJhZ21lbnRpbmc9JWQgY2hhbmdlX293bmVyc2hpcD0lZAorCitFeHRlcm5hbCBmcmFnbWVudGF0aW9uIGFmZmVjdHMgd2hldGhlciBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiB3aWxsIGJlCitzdWNjZXNzZnVsIG9yIG5vdC4gRm9yIHNvbWUgdHlwZXMgb2YgaGFyZHdhcmUsIHRoaXMgaXMgaW1wb3J0YW50IGFsdGhvdWdoCitpdCBpcyBhdm9pZGVkIHdoZXJlIHBvc3NpYmxlLiBJZiB0aGUgc3lzdGVtIGlzIHVzaW5nIGh1Z2UgcGFnZXMgYW5kIG5lZWRzCit0byBiZSBhYmxlIHRvIHJlc2l6ZSB0aGUgcG9vbCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgc3lzdGVtLCB0aGlzIHZhbHVlCitpcyBpbXBvcnRhbnQuCisKK0xhcmdlIG51bWJlcnMgb2YgdGhpcyBldmVudCBpbXBsaWVzIHRoYXQgbWVtb3J5IGlzIGZyYWdtZW50aW5nIGFuZAoraGlnaC1vcmRlciBhbGxvY2F0aW9ucyB3aWxsIHN0YXJ0IGZhaWxpbmcgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuIE9uZQorbWVhbnMgb2YgcmVkdWNpbmcgdGhlIG9jY3VyYW5nZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCittaW5fZnJlZV9rYnl0ZXMgaW4gaW5jcmVtZW50cyBvZiAzKnBhZ2VibG9ja19zaXplKm5yX29ubGluZV9ub2RlcyB3aGVyZQorcGFnZWJsb2NrX3NpemUgaXMgdXN1YWxseSB0aGUgc2l6ZSBvZiB0aGUgZGVmYXVsdCBodWdlcGFnZSBzaXplLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0CmluZGV4IDc4YzQ1YTguLjAyYWM2ZWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy50eHQKQEAgLTcyLDcgKzcyLDcgQEAKIAogCSMgZWNobyAxID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvc2NoZWQvZW5hYmxlCiAKLVRvIGVhbmJsZSBhbGwgZXZlbnRzOgorVG8gZW5hYmxlIGFsbCBldmVudHM6CiAKIAkjIGVjaG8gMSA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2VuYWJsZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKaW5kZXggMWI2MjkyYi4uOTU3YjIyZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dApAQCAtMTMzLDcgKzEzMyw3IEBACiAJdGhhbiByZXF1ZXN0ZWQsIHRoZSByZXN0IG9mIHRoZSBwYWdlIHdpbGwgYmUgdXNlZCwKIAltYWtpbmcgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIGJpZ2dlciB0aGFuIHJlcXVlc3RlZC4KIAkoIE5vdGUsIHRoZSBzaXplIG1heSBub3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZSBzaXplCi0JICBkdWUgdG8gYnVmZmVyIG1hbmFnbWVudCBvdmVyaGVhZC4gKQorCSAgZHVlIHRvIGJ1ZmZlciBtYW5hZ2VtZW50IG92ZXJoZWFkLiApCiAKIAlUaGlzIGNhbiBvbmx5IGJlIHVwZGF0ZWQgd2hlbiB0aGUgY3VycmVudF90cmFjZXIKIAlpcyBzZXQgdG8gIm5vcCIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXBhZ2VhbGxvYy1wb3N0cHJvY2Vzcy5wbCBiL0RvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2UtcGFnZWFsbG9jLXBvc3Rwcm9jZXNzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjUwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXBhZ2VhbGxvYy1wb3N0cHJvY2Vzcy5wbApAQCAtMCwwICsxLDQxOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIFRoaXMgaXMgYSBQT0MgKHByb29mIG9mIGNvbmNlcHQgb3IgcGllY2Ugb2YgY3JhcCwgdGFrZSB5b3VyIHBpY2spIGZvciByZWFkaW5nIHRoZQorIyB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRyYWNlIG91dHB1dCByZWxhdGVkIHRvIHBhZ2UgYWxsb2NhdGlvbi4gSXQgbWFrZXMgYW4gYXR0ZW1wdAorIyB0byBleHRyYWN0IHNvbWUgaGlnaC1sZXZlbCBpbmZvcm1hdGlvbiBvbiB3aGF0IGlzIGdvaW5nIG9uLiBUaGUgYWNjdXJhY3kgb2YgdGhlIHBhcnNlcgorIyBtYXkgdmFyeSBjb25zaWRlcmFibHkKKyMKKyMgRXhhbXBsZSB1c2FnZTogdHJhY2UtcGFnZWFsbG9jLXBvc3Rwcm9jZXNzLnBsIDwgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZV9waXBlCisjIG90aGVyIG9wdGlvbnMKKyMgICAtLXByZXBlbmQtcGFyZW50CVJlcG9ydCBvbiB0aGUgcGFyZW50IHByb2MgYW5kIFBJRAorIyAgIC0tcmVhZC1wcm9jc3RhdAlJZiB0aGUgdHJhY2UgbGFja3MgcHJvY2VzcyBpbmZvLCBnZXQgaXQgZnJvbSAvcHJvYworIyAgIC0taWdub3JlLXBpZAlBZ2dyZWdhdGUgcHJvY2Vzc2VzIG9mIHRoZSBzYW1lIG5hbWUgdG9nZXRoZXIKKyMKKyMgQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24gMjAwOQorIyBBdXRob3I6IE1lbCBHb3JtYW4gPG1lbEBjc24udWwuaWU+Cit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKKworIyBUcmFjZXBvaW50IGV2ZW50cwordXNlIGNvbnN0YW50IE1NX1BBR0VfQUxMT0MJCT0+IDE7Cit1c2UgY29uc3RhbnQgTU1fUEFHRV9GUkVFX0RJUkVDVCAJPT4gMjsKK3VzZSBjb25zdGFudCBNTV9QQUdFVkVDX0ZSRUUJCT0+IDM7Cit1c2UgY29uc3RhbnQgTU1fUEFHRV9QQ1BVX0RSQUlOCQk9PiA0OwordXNlIGNvbnN0YW50IE1NX1BBR0VfQUxMT0NfWk9ORV9MT0NLRUQJPT4gNTsKK3VzZSBjb25zdGFudCBNTV9QQUdFX0FMTE9DX0VYVEZSQUcJPT4gNjsKK3VzZSBjb25zdGFudCBFVkVOVF9VTktOT1dOCQk9PiA3OworCisjIENvbnN0YW50cyB1c2VkIHRvIHRyYWNrIHN0YXRlCit1c2UgY29uc3RhbnQgU1RBVEVfUENQVV9QQUdFU19EUkFJTkVECT0+IDg7Cit1c2UgY29uc3RhbnQgU1RBVEVfUENQVV9QQUdFU19SRUZJTExFRAk9PiA5OworCisjIEhpZ2gtbGV2ZWwgZXZlbnRzIGV4dHJhcG9sYXRlZCBmcm9tIHRyYWNlcG9pbnRzCit1c2UgY29uc3RhbnQgSElHSF9QQ1BVX0RSQUlOUwkJPT4gMTA7Cit1c2UgY29uc3RhbnQgSElHSF9QQ1BVX1JFRklMTFMJCT0+IDExOwordXNlIGNvbnN0YW50IEhJR0hfRVhUX0ZSQUdNRU5UCQk9PiAxMjsKK3VzZSBjb25zdGFudCBISUdIX0VYVF9GUkFHTUVOVF9TRVZFUkUJPT4gMTM7Cit1c2UgY29uc3RhbnQgSElHSF9FWFRfRlJBR01FTlRfTU9ERVJBVEUJPT4gMTQ7Cit1c2UgY29uc3RhbnQgSElHSF9FWFRfRlJBR01FTlRfQ0hBTkdFRAk9PiAxNTsKKworbXkgJXBlcnByb2Nlc3NwaWQ7CitteSAlcGVycHJvY2VzczsKK215ICRvcHRfaWdub3JlcGlkOworbXkgJG9wdF9yZWFkX3Byb2NzdGF0OworbXkgJG9wdF9wcmVwZW5kX3BhcmVudDsKKworIyBDYXRjaCBzaWdpbnQgYW5kIGV4aXQgb24gcmVxdWVzdAorbXkgJHNpZ2ludF9yZXBvcnQgPSAwOworbXkgJHNpZ2ludF9leGl0ID0gMDsKK215ICRzaWdpbnRfcGVuZGluZyA9IDA7CitteSAkc2lnaW50X3JlY2VpdmVkID0gMDsKK3N1YiBzaWdpbnRfaGFuZGxlciB7CisJbXkgJGN1cnJlbnRfdGltZSA9IHRpbWU7CisJaWYgKCRjdXJyZW50X3RpbWUgLSAyID4gJHNpZ2ludF9yZWNlaXZlZCkgeworCQlwcmludCAiU0lHSU5UIHJlY2VpdmVkLCByZXBvcnQgcGVuZGluZy4gSGl0IGN0cmwtYyBhZ2FpbiB0byBleGl0XG4iOworCQkkc2lnaW50X3JlcG9ydCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKCEkc2lnaW50X2V4aXQpIHsKKwkJCXByaW50ICJTZWNvbmQgU0lHSU5UIHJlY2VpdmVkIHF1aWNrbHksIGV4aXRpbmdcbiI7CisJCX0KKwkJJHNpZ2ludF9leGl0Kys7CisJfQorCisJaWYgKCRzaWdpbnRfZXhpdCA+IDMpIHsKKwkJcHJpbnQgIk1hbnkgU0lHSU5UcyByZWNlaXZlZCwgZXhpdGluZyBub3cgd2l0aG91dCByZXBvcnRcbiI7CisJCWV4aXQ7CisJfQorCisJJHNpZ2ludF9yZWNlaXZlZCA9ICRjdXJyZW50X3RpbWU7CisJJHNpZ2ludF9wZW5kaW5nID0gMTsKK30KKyRTSUd7SU5UfSA9ICJzaWdpbnRfaGFuZGxlciI7CisKKyMgUGFyc2UgY29tbWFuZCBsaW5lIG9wdGlvbnMKK0dldE9wdGlvbnMoCisJJ2lnbm9yZS1waWQnCSA9PglcJG9wdF9pZ25vcmVwaWQsCisJJ3JlYWQtcHJvY3N0YXQnCSA9PglcJG9wdF9yZWFkX3Byb2NzdGF0LAorCSdwcmVwZW5kLXBhcmVudCcgPT4JXCRvcHRfcHJlcGVuZF9wYXJlbnQsCispOworCisjIERlZmF1bHRzIGZvciBkeW5hbWljYWxseSBkaXNjb3ZlcmVkIHJlZ2V4J3MKK215ICRyZWdleF9mcmFnZGV0YWlsc19kZWZhdWx0ID0gJ3BhZ2U9KFswLTlhLWZdKikgcGZuPShbMC05XSopIGFsbG9jX29yZGVyPShbLTAtOV0qKSBmYWxsYmFja19vcmRlcj0oWy0wLTldKikgcGFnZWJsb2NrX29yZGVyPShbLTAtOV0qKSBhbGxvY19taWdyYXRldHlwZT0oWy0wLTldKikgZmFsbGJhY2tfbWlncmF0ZXR5cGU9KFstMC05XSopIGZyYWdtZW50aW5nPShbLTAtOV0pIGNoYW5nZV9vd25lcnNoaXA9KFstMC05XSknOworCisjIER5YW5pY2FsbHkgZGlzY292ZXJlZCByZWdleAorbXkgJHJlZ2V4X2ZyYWdkZXRhaWxzOworCisjIFN0YXRpYyByZWdleCB1c2VkLiBTcGVjaWZpZWQgbGlrZSB0aGlzIGZvciByZWFkYWJpbGl0eSBhbmQgZm9yIHVzZSB3aXRoIC9vCisjICAgICAgICAgICAgICAgICAgICAgIChwcm9jZXNzX3BpZCkgICAgIChjcHVzICAgICAgKSAgICggdGltZSAgKSAgICh0cG9pbnQgICAgKSAoZGV0YWlscykKK215ICRyZWdleF90cmFjZWV2ZW50ID0gJ1xzKihbYS16QS1aMC05LV0qKVxzKihcW1swLTldKlxdKVxzKihbMC05Ll0qKTpccyooW2EtekEtWl9dKik6XHMqKC4qKSc7CitteSAkcmVnZXhfc3RhdG5hbWUgPSAnWy0wLTldKlxzXCgoLiopXCkuKic7CitteSAkcmVnZXhfc3RhdHBwaWQgPSAnWy0wLTldKlxzXCguKlwpXHNbQS1aYS16XVxzKFswLTldKikuKic7CisKK3N1YiBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4IHsKKwlteSAkZXZlbnQgPSBzaGlmdDsKKwlteSAkZGVmYXVsdCA9IHNoaWZ0OworCW15ICRyZWdleDsKKworCSMgUmVhZCB0aGUgZXZlbnQgZm9ybWF0IG9yIHVzZSB0aGUgZGVmYXVsdAorCWlmICghb3BlbiAoRk9STUFULCAiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvJGV2ZW50L2Zvcm1hdCIpKSB7CisJCSRyZWdleCA9ICRkZWZhdWx0OworCX0gZWxzZSB7CisJCW15ICRsaW5lOworCQl3aGlsZSAoIWVvZihGT1JNQVQpKSB7CisJCQkkbGluZSA9IDxGT1JNQVQ+OworCQkJaWYgKCRsaW5lID1+IC9ecHJpbnQgZm10OlxzIiguKikiLC4qLykgeworCQkJCSRyZWdleCA9ICQxOworCQkJCSRyZWdleCA9fiBzLyVwL1woWzAtOWEtZl0qXCkvZzsKKwkJCQkkcmVnZXggPX4gcy8lZC9cKFstMC05XSpcKS9nOworCQkJCSRyZWdleCA9fiBzLyVsdS9cKFswLTldKlwpL2c7CisJCQl9CisJCX0KKwl9CisKKwkjIFZlcmlmeSBmaWVsZHMgYXJlIGluIHRoZSByaWdodCBvcmRlcgorCW15ICR0dXBsZTsKKwlmb3JlYWNoICR0dXBsZSAoc3BsaXQgL1xzLywgJHJlZ2V4KSB7CisJCW15ICgka2V5LCAkdmFsdWUpID0gc3BsaXQoLz0vLCAkdHVwbGUpOworCQlteSAkZXhwZWN0ZWQgPSBzaGlmdDsKKwkJaWYgKCRrZXkgbmUgJGV4cGVjdGVkKSB7CisJCQlwcmludCgiV0FSTklORzogRm9ybWF0IG5vdCBhcyBleHBlY3RlZCAnJGtleScgIT0gJyRleHBlY3RlZCciKTsKKwkJCSRyZWdleCA9fiBzLyRrZXk9XCgoLiopXCkvJGtleT0kMS87CisJCX0KKwl9CisKKwlpZiAoZGVmaW5lZCBzaGlmdCkgeworCQlkaWUoIkZld2VyIGZpZWxkcyB0aGFuIGV4cGVjdGVkIGluIGZvcm1hdCIpOworCX0KKworCXJldHVybiAkcmVnZXg7Cit9CiskcmVnZXhfZnJhZ2RldGFpbHMgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KCJrbWVtL21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyIsCisJCQkkcmVnZXhfZnJhZ2RldGFpbHNfZGVmYXVsdCwKKwkJCSJwYWdlIiwgInBmbiIsCisJCQkiYWxsb2Nfb3JkZXIiLCAiZmFsbGJhY2tfb3JkZXIiLCAicGFnZWJsb2NrX29yZGVyIiwKKwkJCSJhbGxvY19taWdyYXRldHlwZSIsICJmYWxsYmFja19taWdyYXRldHlwZSIsCisJCQkiZnJhZ21lbnRpbmciLCAiY2hhbmdlX293bmVyc2hpcCIpOworCitzdWIgcmVhZF9zdGF0bGluZSgkKSB7CisJbXkgJHBpZCA9ICRfWzBdOworCW15ICRzdGF0bGluZTsKKworCWlmIChvcGVuKFNUQVQsICIvcHJvYy8kcGlkL3N0YXQiKSkgeworCQkkc3RhdGxpbmUgPSA8U1RBVD47CisJCWNsb3NlKFNUQVQpOworCX0KKworCWlmICgkc3RhdGxpbmUgZXEgJycpIHsKKwkJJHN0YXRsaW5lID0gIi0xIChVTktOT1dOX1BST0NFU1NfTkFNRSkgUiAwIjsKKwl9CisKKwlyZXR1cm4gJHN0YXRsaW5lOworfQorCitzdWIgZ3Vlc3NfcHJvY2Vzc19waWQoJCQpIHsKKwlteSAkcGlkID0gJF9bMF07CisJbXkgJHN0YXRsaW5lID0gJF9bMV07CisKKwlpZiAoJHBpZCA9PSAwKSB7CisJCXJldHVybiAic3dhcHBlci0wIjsKKwl9CisKKwlpZiAoJHN0YXRsaW5lICF+IC8kcmVnZXhfc3RhdG5hbWUvbykgeworCQlkaWUoIkZhaWxlZCB0byBtYXRoIHN0YXQgbGluZSBmb3IgcHJvY2VzcyBuYW1lIDo6ICRzdGF0bGluZSIpOworCX0KKwlyZXR1cm4gIiQxLSRwaWQiOworfQorCitzdWIgcGFyZW50X2luZm8oJCQpIHsKKwlteSAkcGlkID0gJF9bMF07CisJbXkgJHN0YXRsaW5lID0gJF9bMV07CisJbXkgJHBwaWQ7CisKKwlpZiAoJHBpZCA9PSAwKSB7CisJCXJldHVybiAiTk9QQVJFTlQtMCI7CisJfQorCisJaWYgKCRzdGF0bGluZSAhfiAvJHJlZ2V4X3N0YXRwcGlkL28pIHsKKwkJZGllKCJGYWlsZWQgdG8gbWF0Y2ggc3RhdCBsaW5lIHByb2Nlc3MgcHBpZDo6ICRzdGF0bGluZSIpOworCX0KKworCSMgUmVhZCB0aGUgcHBpZCBzdGF0IGxpbmUKKwkkcHBpZCA9ICQxOworCXJldHVybiBndWVzc19wcm9jZXNzX3BpZCgkcHBpZCwgcmVhZF9zdGF0bGluZSgkcHBpZCkpOworfQorCitzdWIgcHJvY2Vzc19ldmVudHMgeworCW15ICR0cmFjZWV2ZW50OworCW15ICRwcm9jZXNzX3BpZDsKKwlteSAkY3B1czsKKwlteSAkdGltZXN0YW1wOworCW15ICR0cmFjZXBvaW50OworCW15ICRkZXRhaWxzOworCW15ICRzdGF0bGluZTsKKworCSMgUmVhZCBlYWNoIGxpbmUgb2YgdGhlIGV2ZW50IGxvZworRVZFTlRfUFJPQ0VTUzoKKwl3aGlsZSAoJHRyYWNlZXZlbnQgPSA8U1RESU4+KSB7CisJCWlmICgkdHJhY2VldmVudCA9fiAvJHJlZ2V4X3RyYWNlZXZlbnQvbykgeworCQkJJHByb2Nlc3NfcGlkID0gJDE7CisJCQkkdHJhY2Vwb2ludCA9ICQ0OworCisJCQlpZiAoJG9wdF9yZWFkX3Byb2NzdGF0IHx8ICRvcHRfcHJlcGVuZF9wYXJlbnQpIHsKKwkJCQkkcHJvY2Vzc19waWQgPX4gLyguKiktKFswLTldKikkLzsKKwkJCQlteSAkcHJvY2VzcyA9ICQxOworCQkJCW15ICRwaWQgPSAkMjsKKworCQkJCSRzdGF0bGluZSA9IHJlYWRfc3RhdGxpbmUoJHBpZCk7CisKKwkJCQlpZiAoJG9wdF9yZWFkX3Byb2NzdGF0ICYmICRwcm9jZXNzIGVxICcnKSB7CisJCQkJCSRwcm9jZXNzX3BpZCA9IGd1ZXNzX3Byb2Nlc3NfcGlkKCRwaWQsICRzdGF0bGluZSk7CisJCQkJfQorCisJCQkJaWYgKCRvcHRfcHJlcGVuZF9wYXJlbnQpIHsKKwkJCQkJJHByb2Nlc3NfcGlkID0gcGFyZW50X2luZm8oJHBpZCwgJHN0YXRsaW5lKSAuICIgOjogJHByb2Nlc3NfcGlkIjsKKwkJCQl9CisJCQl9CisKKwkJCSMgVW5uZWNlc3NhcnkgaW4gdGhpcyBzY3JpcHQuIFVuY29tbWVudCBpZiByZXF1aXJlZAorCQkJIyAkY3B1cyA9ICQyOworCQkJIyAkdGltZXN0YW1wID0gJDM7CisJCX0gZWxzZSB7CisJCQluZXh0OworCQl9CisKKwkJIyBQZXJsIFN3aXRjaCgpIHN1Y2tzIG1ham9ybHkKKwkJaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdlX2FsbG9jIikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfQUxMT0N9Kys7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdlX2ZyZWVfZGlyZWN0IikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfRlJFRV9ESVJFQ1R9Kys7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdldmVjX2ZyZWUiKSB7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRVZFQ19GUkVFfSsrOworCQl9IGVsc2lmICgkdHJhY2Vwb2ludCBlcSAibW1fcGFnZV9wY3B1X2RyYWluIikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfUENQVV9EUkFJTn0rKzsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9QQ1BVX1BBR0VTX0RSQUlORUR9Kys7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkIikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfQUxMT0NfWk9ORV9MT0NLRUR9Kys7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19SRUZJTExFRH0rKzsKKwkJfSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgIm1tX3BhZ2VfYWxsb2NfZXh0ZnJhZyIpIHsKKworCQkJIyBFeHRyYWN0IHRoZSBkZXRhaWxzIG9mIHRoZSBldmVudCBub3cKKwkJCSRkZXRhaWxzID0gJDU7CisKKwkJCW15ICgkcGFnZSwgJHBmbik7CisJCQlteSAoJGFsbG9jX29yZGVyLCAkZmFsbGJhY2tfb3JkZXIsICRwYWdlYmxvY2tfb3JkZXIpOworCQkJbXkgKCRhbGxvY19taWdyYXRldHlwZSwgJGZhbGxiYWNrX21pZ3JhdGV0eXBlKTsKKwkJCW15ICgkZnJhZ21lbnRpbmcsICRjaGFuZ2Vfb3duZXJzaGlwKTsKKworCQkJaWYgKCRkZXRhaWxzICF+IC8kcmVnZXhfZnJhZ2RldGFpbHMvbykgeworCQkJCXByaW50ICJXQVJOSU5HOiBGYWlsZWQgdG8gcGFyc2UgbW1fcGFnZV9hbGxvY19leHRmcmFnIGFzIGV4cGVjdGVkXG4iOworCQkJCW5leHQ7CisJCQl9CisKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0FMTE9DX0VYVEZSQUd9Kys7CisJCQkkcGFnZSA9ICQxOworCQkJJHBmbiA9ICQyOworCQkJJGFsbG9jX29yZGVyID0gJDM7CisJCQkkZmFsbGJhY2tfb3JkZXIgPSAkNDsKKwkJCSRwYWdlYmxvY2tfb3JkZXIgPSAkNTsKKwkJCSRhbGxvY19taWdyYXRldHlwZSA9ICQ2OworCQkJJGZhbGxiYWNrX21pZ3JhdGV0eXBlID0gJDc7CisJCQkkZnJhZ21lbnRpbmcgPSAkODsKKwkJCSRjaGFuZ2Vfb3duZXJzaGlwID0gJDk7CisKKwkJCWlmICgkZnJhZ21lbnRpbmcpIHsKKwkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR30rKzsKKwkJCQlpZiAoJGZhbGxiYWNrX29yZGVyIDw9IDMpIHsKKwkJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX0rKzsKKwkJCQl9IGVsc2UgeworCQkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfTU9ERVJBVEV9Kys7CisJCQkJfQorCQkJfQorCQkJaWYgKCRjaGFuZ2Vfb3duZXJzaGlwKSB7CisJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX0NIQU5HRUR9Kys7CisJCQl9CisJCX0gZWxzZSB7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57RVZFTlRfVU5LTk9XTn0rKzsKKwkJfQorCisJCSMgQ2F0Y2ggYSBmdWxsIHBjcHUgZHJhaW4gZXZlbnQKKwkJaWYgKCRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9QQ1BVX1BBR0VTX0RSQUlORUR9ICYmCisJCQkJJHRyYWNlcG9pbnQgbmUgIm1tX3BhZ2VfcGNwdV9kcmFpbiIpIHsKKworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfUENQVV9EUkFJTlN9Kys7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19EUkFJTkVEfSA9IDA7CisJCX0KKworCQkjIENhdGNoIGEgZnVsbCBwY3B1IHJlZmlsbCBldmVudAorCQlpZiAoJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX1BDUFVfUEFHRVNfUkVGSUxMRUR9ICYmCisJCQkJJHRyYWNlcG9pbnQgbmUgIm1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQiKSB7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX1JFRklMTFN9Kys7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19SRUZJTExFRH0gPSAwOworCQl9CisKKwkJaWYgKCRzaWdpbnRfcGVuZGluZykgeworCQkJbGFzdCBFVkVOVF9QUk9DRVNTOworCQl9CisJfQorfQorCitzdWIgZHVtcF9zdGF0cyB7CisJbXkgJGhhc2hyZWYgPSBzaGlmdDsKKwlteSAlc3RhdHMgPSAlJGhhc2hyZWY7CisKKwkjIER1bXAgcGVyLXByb2Nlc3Mgc3RhdHMKKwlteSAkcHJvY2Vzc19waWQ7CisJbXkgJG1heF9zdHJsZW4gPSAwOworCisJIyBHZXQgdGhlIG1heGltdW0gcHJvY2VzcyBuYW1lCisJZm9yZWFjaCAkcHJvY2Vzc19waWQgKGtleXMgJXBlcnByb2Nlc3NwaWQpIHsKKwkJbXkgJGxlbiA9IGxlbmd0aCgkcHJvY2Vzc19waWQpOworCQlpZiAoJGxlbiA+ICRtYXhfc3RybGVuKSB7CisJCQkkbWF4X3N0cmxlbiA9ICRsZW47CisJCX0KKwl9CisJJG1heF9zdHJsZW4gKz0gMjsKKworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIiUtIiAuICRtYXhfc3RybGVuIC4gInMgJThzICUxMHMgICAlOHMgJThzICAgJThzICU4cyAlOHMgICAlOHMgJThzICU4cyAlOHMgJThzICU4c1xuIiwKKwkJIlByb2Nlc3MiLCAiUGFnZXMiLCAgIlBhZ2VzIiwgICAgICAiUGFnZXMiLCAiUGFnZXMiLCAiUENQVSIsICAiUENQVSIsICAgIlBDUFUiLCAgICAiRnJhZ21lbnQiLCAgIkZyYWdtZW50IiwgIk1pZ1R5cGUiLCAiRnJhZ21lbnQiLCAiRnJhZ21lbnQiLCAiVW5rbm93biIpOworCXByaW50ZigiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAlOHMgJTEwcyAgICU4cyAlOHMgICAlOHMgJThzICU4cyAgICU4cyAlOHMgJThzICU4cyAlOHMgJThzXG4iLAorCQkiZGV0YWlscyIsICJhbGxvY2QiLCAiYWxsb2NkIiwgICAgICJmcmVlZCIsICJmcmVlZCIsICJwYWdlcyIsICJkcmFpbnMiLCAicmVmaWxscyIsICJGYWxsYmFjayIsICJDYXVzaW5nIiwgICAiQ2hhbmdlZCIsICJTZXZlcmUiLCAiTW9kZXJhdGUiLCAiIik7CisKKwlwcmludGYoIiUtIiAuICRtYXhfc3RybGVuIC4gInMgJThzICUxMHMgICAlOHMgJThzICAgJThzICU4cyAlOHMgICAlOHMgJThzICU4cyAlOHMgJThzICU4c1xuIiwKKwkJIiIsICAgICAgICAiIiwgICAgICAgInVuZGVyIGxvY2siLCAiZGlyZWN0IiwgInBhZ2V2ZWMiLCAiZHJhaW4iLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIpOworCisJZm9yZWFjaCAkcHJvY2Vzc19waWQgKGtleXMgJXN0YXRzKSB7CisJCSMgRHVtcCBmaW5hbCBhZ2dyZWdhdGVzCisJCWlmICgkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX1BDUFVfUEFHRVNfRFJBSU5FRH0pIHsKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX0RSQUlOU30rKzsKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19EUkFJTkVEfSA9IDA7CisJCX0KKwkJaWYgKCRzdGF0c3skcHJvY2Vzc19waWR9LT57U1RBVEVfUENQVV9QQUdFU19SRUZJTExFRH0pIHsKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX1JFRklMTFN9Kys7CisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX1BDUFVfUEFHRVNfUkVGSUxMRUR9ID0gMDsKKwkJfQorCisJCXByaW50ZigiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAlOGQgJTEwZCAgICU4ZCAlOGQgICAlOGQgJThkICU4ZCAgICU4ZCAlOGQgJThkICU4ZCAlOGQgJThkXG4iLAorCQkJJHByb2Nlc3NfcGlkLAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0FMTE9DfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fUEFHRV9BTExPQ19aT05FX0xPQ0tFRH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfRlJFRV9ESVJFQ1R9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFVkVDX0ZSRUV9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX1BDUFVfRFJBSU59LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX1BDUFVfRFJBSU5TfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9QQ1BVX1JFRklMTFN9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0FMTE9DX0VYVEZSQUd9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0VYVF9GUkFHfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfQ0hBTkdFRH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX01PREVSQVRFfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57RVZFTlRfVU5LTk9XTn0pOworCX0KK30KKworc3ViIGFnZ3JlZ2F0ZV9wZXJwcm9jZXNzcGlkKCkgeworCW15ICRwcm9jZXNzX3BpZDsKKwlteSAkcHJvY2VzczsKKwl1bmRlZiAlcGVycHJvY2VzczsKKworCWZvcmVhY2ggJHByb2Nlc3NfcGlkIChrZXlzICVwZXJwcm9jZXNzcGlkKSB7CisJCSRwcm9jZXNzID0gJHByb2Nlc3NfcGlkOworCQkkcHJvY2VzcyA9fiBzLy0oWzAtOV0pKiQvLzsKKwkJaWYgKCRwcm9jZXNzIGVxICcnKSB7CisJCQkkcHJvY2VzcyA9ICJOT19QUk9DRVNTX05BTUUiOworCQl9CisKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRV9BTExPQ30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1BBR0VfQUxMT0N9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9QQUdFX0FMTE9DX1pPTkVfTE9DS0VEfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRV9BTExPQ19aT05FX0xPQ0tFRH07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1BBR0VfRlJFRV9ESVJFQ1R9ICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9QQUdFX0ZSRUVfRElSRUNUfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRVZFQ19GUkVFfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRVZFQ19GUkVFfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRV9QQ1BVX0RSQUlOfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRV9QQ1BVX0RSQUlOfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57SElHSF9QQ1BVX0RSQUlOU30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfUENQVV9EUkFJTlN9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntISUdIX1BDUFVfUkVGSUxMU30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfUENQVV9SRUZJTExTfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fUEFHRV9BTExPQ19FWFRGUkFHfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fUEFHRV9BTExPQ19FWFRGUkFHfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57SElHSF9FWFRfRlJBR30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUd9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntISUdIX0VYVF9GUkFHTUVOVF9DSEFOR0VEfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfQ0hBTkdFRH07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX0gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX1NFVkVSRX07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e0hJR0hfRVhUX0ZSQUdNRU5UX01PREVSQVRFfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9FWFRfRlJBR01FTlRfTU9ERVJBVEV9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntFVkVOVF9VTktOT1dOfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57RVZFTlRfVU5LTk9XTn07CisJfQorfQorCitzdWIgcmVwb3J0KCkgeworCWlmICghJG9wdF9pZ25vcmVwaWQpIHsKKwkJZHVtcF9zdGF0cyhcJXBlcnByb2Nlc3NwaWQpOworCX0gZWxzZSB7CisJCWFnZ3JlZ2F0ZV9wZXJwcm9jZXNzcGlkKCk7CisJCWR1bXBfc3RhdHMoXCVwZXJwcm9jZXNzKTsKKwl9Cit9CisKKyMgUHJvY2VzcyBldmVudHMgb3Igc2lnbmFscyB1bnRpbCBuZWl0aGVyIGlzIGF2YWlsYWJsZQorc3ViIHNpZ25hbF9sb29wKCkgeworCW15ICRzaWdpbnRfcHJvY2Vzc2VkOworCWRvIHsKKwkJJHNpZ2ludF9wcm9jZXNzZWQgPSAwOworCQlwcm9jZXNzX2V2ZW50cygpOworCisJCSMgSGFuZGxlIHBlbmRpbmcgc2lnbmFscyBpZiBhbnkKKwkJaWYgKCRzaWdpbnRfcGVuZGluZykgeworCQkJbXkgJGN1cnJlbnRfdGltZSA9IHRpbWU7CisKKwkJCWlmICgkc2lnaW50X2V4aXQpIHsKKwkJCQlwcmludCAiUmVjZWl2ZWQgZXhpdCBzaWduYWxcbiI7CisJCQkJJHNpZ2ludF9wZW5kaW5nID0gMDsKKwkJCX0KKwkJCWlmICgkc2lnaW50X3JlcG9ydCkgeworCQkJCWlmICgkY3VycmVudF90aW1lID49ICRzaWdpbnRfcmVjZWl2ZWQgKyAyKSB7CisJCQkJCXJlcG9ydCgpOworCQkJCQkkc2lnaW50X3JlcG9ydCA9IDA7CisJCQkJCSRzaWdpbnRfcGVuZGluZyA9IDA7CisJCQkJCSRzaWdpbnRfcHJvY2Vzc2VkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IHdoaWxlICgkc2lnaW50X3BlbmRpbmcgfHwgJHNpZ2ludF9wcm9jZXNzZWQpOworfQorCitzaWduYWxfbG9vcCgpOworcmVwb3J0KCk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvd2VyLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvcG93ZXIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDgwNWUxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvcG93ZXIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotVGhlIHBvd2VyIHRyYWNlciBjb2xsZWN0cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBDLXN0YXRlIGFuZCBQLXN0YXRlCi10cmFuc2l0aW9ucywgaW5zdGVhZCBvZiBqdXN0IGxvb2tpbmcgYXQgdGhlIGhpZ2gtbGV2ZWwgImF2ZXJhZ2UiCi1pbmZvcm1hdGlvbi4KLQotVGhlcmUgaXMgYSBoZWxwZXIgc2NyaXB0IGZvdW5kIGluIHNjcmlwcy90cmFjaW5nL3Bvd2VyLnBsIGluIHRoZSBrZXJuZWwKLXNvdXJjZXMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcGFyc2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgY3JlYXRlIGEKLVNjYWxhYmxlIFZlY3RvciBHcmFwaGljcyAoU1ZHKSBwaWN0dXJlIGZyb20gdGhlIHRyYWNlIGRhdGEuCi0KLVRvIHVzZSB0aGlzIHRyYWNlcjoKLQotCWVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkCi0JZWNobyBwb3dlciA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKLQllY2hvIDEgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZAotCXNsZWVwIDEKLQllY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZAotCWNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlIHwgXAotCQlwZXJsIHNjcmlwdHMvdHJhY2luZy9wb3dlci5wbCA+IG91dC5zdgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS90cmFjZXBvaW50LWFuYWx5c2lzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvdHJhY2Vwb2ludC1hbmFseXNpcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViNGU0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvdHJhY2Vwb2ludC1hbmFseXNpcy50eHQKQEAgLTAsMCArMSwzMjcgQEAKKwkJTm90ZXMgb24gQW5hbHlzaW5nIEJlaGF2aW91ciBVc2luZyBFdmVudHMgYW5kIFRyYWNlcG9pbnRzCisKKwkJCURvY3VtZW50YXRpb24gd3JpdHRlbiBieSBNZWwgR29ybWFuCisJCVBDTCBpbmZvcm1hdGlvbiBoZWF2aWx5IGJhc2VkIG9uIGVtYWlsIGZyb20gSW5nbyBNb2xuYXIKKworMS4gSW50cm9kdWN0aW9uCis9PT09PT09PT09PT09PT0KKworVHJhY2Vwb2ludHMgKHNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL3RyYWNlcG9pbnRzLnR4dCkgY2FuIGJlIHVzZWQgd2l0aG91dAorY3JlYXRpbmcgY3VzdG9tIGtlcm5lbCBtb2R1bGVzIHRvIHJlZ2lzdGVyIHByb2JlIGZ1bmN0aW9ucyB1c2luZyB0aGUgZXZlbnQKK3RyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuCisKK1NpbXBsaXN0aWNhbGx5LCB0cmFjZXBvaW50cyB3aWxsIHJlcHJlc2VudCBhbiBpbXBvcnRhbnQgZXZlbnQgdGhhdCB3aGVuIGNhbgorYmUgdGFrZW4gaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciB0cmFjZXBvaW50cyB0byBidWlsZCBhICJCaWcgUGljdHVyZSIgb2YKK3doYXQgaXMgZ29pbmcgb24gd2l0aGluIHRoZSBzeXN0ZW0uIFRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZiBtZXRob2RzIGZvcgorZ2F0aGVyaW5nIGFuZCBpbnRlcnByZXRpbmcgdGhlc2UgZXZlbnRzLiBMYWNraW5nIGFueSBjdXJyZW50IEJlc3QgUHJhY3Rpc2VzLAordGhpcyBkb2N1bWVudCBkZXNjcmliZXMgc29tZSBvZiB0aGUgbWV0aG9kcyB0aGF0IGNhbiBiZSB1c2VkLgorCitUaGlzIGRvY3VtZW50IGFzc3VtZXMgdGhhdCBkZWJ1Z2ZzIGlzIG1vdW50ZWQgb24gL3N5cy9rZXJuZWwvZGVidWcgYW5kIHRoYXQKK3RoZSBhcHByb3ByaWF0ZSB0cmFjaW5nIG9wdGlvbnMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsLiBJdCBpcworYXNzdW1lZCB0aGF0IHRoZSBQQ0wgdG9vbCB0b29scy9wZXJmIGhhcyBiZWVuIGluc3RhbGxlZCBhbmQgaXMgaW4geW91ciBwYXRoLgorCisyLiBMaXN0aW5nIEF2YWlsYWJsZSBFdmVudHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisyLjEgU3RhbmRhcmQgVXRpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBwb3NzaWJsZSBldmVudHMgYXJlIHZpc2libGUgZnJvbSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy4gU2ltcGx5CitjYWxsaW5nCisKKyAgJCBmaW5kIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzIC10eXBlIGQKKword2lsbCBnaXZlIGEgZmFpciBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgZXZlbnRzIGF2YWlsYWJsZS4KKworMi4yIFBDTAorLS0tLS0tLQorCitEaXNjb3ZlcnkgYW5kIGVudW1lcmF0aW9uIG9mIGFsbCBjb3VudGVycyBhbmQgZXZlbnRzLCBpbmNsdWRpbmcgdHJhY2Vwb2ludHMKK2FyZSBhdmFpbGFibGUgd2l0aCB0aGUgcGVyZiB0b29sLiBHZXR0aW5nIGEgbGlzdCBvZiBhdmFpbGFibGUgZXZlbnRzIGlzIGEKK3NpbXBsZSBjYXNlIG9mCisKKyAgJCBwZXJmIGxpc3QgMj4mMSB8IGdyZXAgVHJhY2Vwb2ludAorICBleHQ0OmV4dDRfZnJlZV9pbm9kZSAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfcmVxdWVzdF9pbm9kZSAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfYWxsb2NhdGVfaW5vZGUgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfd3JpdGVfYmVnaW4gICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBleHQ0OmV4dDRfb3JkZXJlZF93cml0ZV9lbmQgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICBbIC4uLi4gcmVtYWluaW5nIG91dHB1dCBzbmlwcGVkIC4uLi4gXQorCisKKzIuIEVuYWJsaW5nIEV2ZW50cworPT09PT09PT09PT09PT09PT09CisKKzIuMSBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy50eHQgZm9yIGEgcHJvcGVyIGRlc2NyaXB0aW9uIG9uIGhvdyBldmVudHMKK2NhbiBiZSBlbmFibGVkIHN5c3RlbS13aWRlLiBBIHNob3J0IGV4YW1wbGUgb2YgZW5hYmxpbmcgYWxsIGV2ZW50cyByZWxhdGVkCit0byBwYWdlIGFsbG9jYXRpb24gd291bGQgbG9vayBzb21ldGhpbmcgbGlrZQorCisgICQgZm9yIGkgaW4gYGZpbmQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMgLW5hbWUgImVuYWJsZSIgfCBncmVwIG1tX2A7IGRvIGVjaG8gMSA+ICRpOyBkb25lCisKKzIuMiBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZyB3aXRoIFN5c3RlbVRhcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIFN5c3RlbVRhcCwgdHJhY2Vwb2ludHMgYXJlIGFjY2Vzc2libGUgdXNpbmcgdGhlIGtlcm5lbC50cmFjZSgpIGZ1bmN0aW9uCitjYWxsLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCByZXBvcnRzIGV2ZXJ5IDUgc2Vjb25kcyB3aGF0IHByb2Nlc3Nlcword2VyZSBhbGxvY2F0aW5nIHRoZSBwYWdlcy4KKworICBnbG9iYWwgcGFnZV9hbGxvY3MKKworICBwcm9iZSBrZXJuZWwudHJhY2UoIm1tX3BhZ2VfYWxsb2MiKSB7CisgIAlwYWdlX2FsbG9jc1tleGVjbmFtZSgpXSsrCisgIH0KKworICBmdW5jdGlvbiBwcmludF9jb3VudCgpIHsKKyAgCXByaW50ZiAoIiUtMjVzICUtc1xuIiwgIiNQYWdlcyBBbGxvY2F0ZWQiLCAiUHJvY2VzcyBOYW1lIikKKyAgCWZvcmVhY2ggKHByb2MgaW4gcGFnZV9hbGxvY3MtKQorICAJCXByaW50ZigiJS0yNWQgJXNcbiIsIHBhZ2VfYWxsb2NzW3Byb2NdLCBwcm9jKQorICAJcHJpbnRmICgiXG4iKQorICAJZGVsZXRlIHBhZ2VfYWxsb2NzCisgIH0KKworICBwcm9iZSB0aW1lci5zKDUpIHsKKyAgICAgICAgICBwcmludF9jb3VudCgpCisgIH0KKworMi4zIFN5c3RlbS1XaWRlIEV2ZW50IEVuYWJsaW5nIHdpdGggUENMCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgc3BlY2lmeWluZyB0aGUgLWEgc3dpdGNoIGFuZCBhbmFseXNpbmcgc2xlZXAsIHRoZSBzeXN0ZW0td2lkZSBldmVudHMKK2ZvciBhIGR1cmF0aW9uIG9mIHRpbWUgY2FuIGJlIGV4YW1pbmVkLgorCisgJCBwZXJmIHN0YXQgLWEgXAorCS1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCS1lIGttZW06bW1fcGFnZXZlY19mcmVlIFwKKwlzbGVlcCAxMAorIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICdzbGVlcCAxMCc6CisKKyAgICAgICAgICAgOTYzMCAga21lbTptbV9wYWdlX2FsbG9jCisgICAgICAgICAgIDIxNDMgIGttZW06bW1fcGFnZV9mcmVlX2RpcmVjdAorICAgICAgICAgICA3NDI0ICBrbWVtOm1tX3BhZ2V2ZWNfZnJlZQorCisgICAxMC4wMDI1Nzc3NjQgIHNlY29uZHMgdGltZSBlbGFwc2VkCisKK1NpbWlsYXJseSwgb25lIGNvdWxkIGV4ZWN1dGUgYSBzaGVsbCBhbmQgZXhpdCBpdCBhcyBkZXNpcmVkIHRvIGdldCBhIHJlcG9ydAorYXQgdGhhdCBwb2ludC4KKworMi40IExvY2FsIEV2ZW50IEVuYWJsaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGRlc2NyaWJlcyBob3cgdG8gZW5hYmxlIGV2ZW50cyBvbiBhIHBlci10aHJlYWQKK2Jhc2lzIHVzaW5nIHNldF9mdHJhY2VfcGlkLgorCisyLjUgTG9jYWwgRXZlbnQgRW5hYmxlbWVudCB3aXRoIFBDTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXZlbnRzIGNhbiBiZSBhY3RpdmF0ZSBhbmQgdHJhY2tlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgcHJvY2VzcyBvbiBhIGxvY2FsCitiYXNpcyB1c2luZyBQQ0wgc3VjaCBhcyBmb2xsb3dzLgorCisgICQgcGVyZiBzdGF0IC1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCQkgLWUga21lbTptbV9wYWdldmVjX2ZyZWUgLi9oYWNrYmVuY2ggMTAKKyAgVGltZTogMC45MDkKKworICAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICcuL2hhY2tiZW5jaCAxMCc6CisKKyAgICAgICAgICAxNzgwMyAga21lbTptbV9wYWdlX2FsbG9jCisgICAgICAgICAgMTIzOTggIGttZW06bW1fcGFnZV9mcmVlX2RpcmVjdAorICAgICAgICAgICA0ODI3ICBrbWVtOm1tX3BhZ2V2ZWNfZnJlZQorCisgICAgMC45NzM5MTMzODcgIHNlY29uZHMgdGltZSBlbGFwc2VkCisKKzMuIEV2ZW50IEZpbHRlcmluZworPT09PT09PT09PT09PT09PT09CisKK0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dCBjb3ZlcnMgaW4tZGVwdGggaG93IHRvIGZpbHRlciBldmVudHMgaW4KK2Z0cmFjZS4gIE9idmlvdXNseSB1c2luZyBncmVwIGFuZCBhd2sgb2YgdHJhY2VfcGlwZSBpcyBhbiBvcHRpb24gYXMgd2VsbAorYXMgYW55IHNjcmlwdCByZWFkaW5nIHRyYWNlX3BpcGUuCisKKzQuIEFuYWx5c2luZyBFdmVudCBWYXJpYW5jZXMgd2l0aCBQQ0wKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQW55IHdvcmtsb2FkIGNhbiBleGhpYml0IHZhcmlhbmNlcyBiZXR3ZWVuIHJ1bnMgYW5kIGl0IGNhbiBiZSBpbXBvcnRhbnQKK3RvIGtub3cgd2hhdCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGluLiBCeSBhbmQgbGFyZ2UsIHRoaXMgaXMgbGVmdCB0byB0aGUKK3BlcmZvcm1hbmNlIGFuYWx5c3QgdG8gZG8gaXQgYnkgaGFuZC4gSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGRpc2NyZXRlIGV2ZW50CitvY2N1cnJlbmNlcyBhcmUgdXNlZnVsIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmFseXN0LCB0aGVuIHBlcmYgY2FuIGJlIHVzZWQuCisKKyAgJCBwZXJmIHN0YXQgLS1yZXBlYXQgNSAtZSBrbWVtOm1tX3BhZ2VfYWxsb2MgLWUga21lbTptbV9wYWdlX2ZyZWVfZGlyZWN0CisJCQktZSBrbWVtOm1tX3BhZ2V2ZWNfZnJlZSAuL2hhY2tiZW5jaCAxMAorICBUaW1lOiAwLjg5MAorICBUaW1lOiAwLjg5NQorICBUaW1lOiAwLjkxNQorICBUaW1lOiAxLjAwMQorICBUaW1lOiAwLjg5OQorCisgICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnLi9oYWNrYmVuY2ggMTAnICg1IHJ1bnMpOgorCisgICAgICAgICAgMTY2MzAgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICggKy0gICAzLjU0MiUgKQorICAgICAgICAgIDExNDg2ICBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgICAoICstICAgNC43NzElICkKKyAgICAgICAgICAgNDczMCAga21lbTptbV9wYWdldmVjX2ZyZWUgICAgICAgKCArLSAgIDIuMzI1JSApCisKKyAgICAwLjk4MjY1MzAwMiAgc2Vjb25kcyB0aW1lIGVsYXBzZWQgICAoICstICAgMS40NDglICkKKworSW4gdGhlIGV2ZW50IHRoYXQgc29tZSBoaWdoZXItbGV2ZWwgZXZlbnQgaXMgcmVxdWlyZWQgdGhhdCBkZXBlbmRzIG9uIHNvbWUKK2FnZ3JlZ2F0aW9uIG9mIGRpc2NyZXRlIGV2ZW50cywgdGhlbiBhIHNjcmlwdCB3b3VsZCBuZWVkIHRvIGJlIGRldmVsb3BlZC4KKworVXNpbmcgLS1yZXBlYXQsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gdmlldyBob3cgZXZlbnRzIGFyZSBmbHVjdHVhdGluZyBvdmVyCit0aW1lIG9uIGEgc3lzdGVtIHdpZGUgYmFzaXMgdXNpbmcgLWEgYW5kIHNsZWVwLgorCisgICQgcGVyZiBzdGF0IC1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCQktZSBrbWVtOm1tX3BhZ2V2ZWNfZnJlZSBcCisJCS1hIC0tcmVwZWF0IDEwIFwKKwkJc2xlZXAgMQorICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnc2xlZXAgMScgKDEwIHJ1bnMpOgorCisgICAgICAgICAgIDEwNjYgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICggKy0gIDI2LjE0OCUgKQorICAgICAgICAgICAgMTgyICBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgICAoICstICAgNS40NjQlICkKKyAgICAgICAgICAgIDg5MCAga21lbTptbV9wYWdldmVjX2ZyZWUgICAgICAgKCArLSAgMzAuMDc5JSApCisKKyAgICAxLjAwMjI1MTc1NyAgc2Vjb25kcyB0aW1lIGVsYXBzZWQgICAoICstICAgMC4wMDUlICkKKworNS4gSGlnaGVyLUxldmVsIEFuYWx5c2lzIHdpdGggSGVscGVyIFNjcmlwdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gZXZlbnRzIGFyZSBlbmFibGVkIHRoZSBldmVudHMgdGhhdCBhcmUgdHJpZ2dlcmluZyBjYW4gYmUgcmVhZCBmcm9tCisvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlX3BpcGUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybWF0IGFsdGhvdWdoIGJpbmFyeQorb3B0aW9ucyBleGlzdCBhcyB3ZWxsLiBCeSBwb3N0LXByb2Nlc3NpbmcgdGhlIG91dHB1dCwgZnVydGhlciBpbmZvcm1hdGlvbiBjYW4KK2JlIGdhdGhlcmVkIG9uLWxpbmUgYXMgYXBwcm9wcmlhdGUuIEV4YW1wbGVzIG9mIHBvc3QtcHJvY2Vzc2luZyBtaWdodCBpbmNsdWRlCisKKyAgbyBSZWFkaW5nIGluZm9ybWF0aW9uIGZyb20gL3Byb2MgZm9yIHRoZSBQSUQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50CisgIG8gRGVyaXZpbmcgYSBoaWdoZXItbGV2ZWwgZXZlbnQgZnJvbSBhIHNlcmllcyBvZiBsb3dlci1sZXZlbCBldmVudHMuCisgIG8gQ2FsY3VsYXRlIGxhdGVuY2llcyBiZXR3ZWVuIHR3byBldmVudHMKKworRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS1wYWdlYWxsb2MtcG9zdHByb2Nlc3MucGwgaXMgYW4gZXhhbXBsZQorc2NyaXB0IHRoYXQgY2FuIHJlYWQgdHJhY2VfcGlwZSBmcm9tIFNURElOIG9yIGEgY29weSBvZiBhIHRyYWNlLiBXaGVuIHVzZWQKK29uLWxpbmUsIGl0IGNhbiBiZSBpbnRlcnJ1cHRlZCBvbmNlIHRvIGdlbmVyYXRlIGEgcmVwb3J0IHdpdGhvdXQgZXhpc3RpbmcKK2FuZCB0d2ljZSB0byBleGl0LgorCitTaW1wbGlzdGljYWxseSwgdGhlIHNjcmlwdCBqdXN0IHJlYWRzIFNURElOIGFuZCBjb3VudHMgdXAgZXZlbnRzIGJ1dCBpdAorYWxzbyBjYW4gZG8gbW9yZSBzdWNoIGFzCisKKyAgbyBEZXJpdmUgaGlnaC1sZXZlbCBldmVudHMgZnJvbSBtYW55IGxvdy1sZXZlbCBldmVudHMuIElmIGEgbnVtYmVyIG9mIHBhZ2VzCisgICAgYXJlIGZyZWVkIHRvIHRoZSBtYWluIGFsbG9jYXRvciBmcm9tIHRoZSBwZXItQ1BVIGxpc3RzLCBpdCByZWNvZ25pc2VzCisgICAgdGhhdCBhcyBvbmUgcGVyLUNQVSBkcmFpbiBldmVuIHRob3VnaCB0aGVyZSBpcyBubyBzcGVjaWZpYyB0cmFjZXBvaW50CisgICAgZm9yIHRoYXQgZXZlbnQKKyAgbyBJdCBjYW4gYWdncmVnYXRlIGJhc2VkIG9uIFBJRCBvciBpbmRpdmlkdWFsIHByb2Nlc3MgbnVtYmVyCisgIG8gSW4gdGhlIGV2ZW50IG1lbW9yeSBpcyBnZXR0aW5nIGV4dGVybmFsbHkgZnJhZ21lbnRlZCwgaXQgcmVwb3J0cworICAgIG9uIHdoZXRoZXIgdGhlIGZyYWdtZW50YXRpb24gZXZlbnQgd2FzIHNldmVyZSBvciBtb2RlcmF0ZS4KKyAgbyBXaGVuIHJlY2VpdmluZyBhbiBldmVudCBhYm91dCBhIFBJRCwgaXQgY2FuIHJlY29yZCB3aG8gdGhlIHBhcmVudCB3YXMgc28KKyAgICB0aGF0IGlmIGxhcmdlIG51bWJlcnMgb2YgZXZlbnRzIGFyZSBjb21pbmcgZnJvbSB2ZXJ5IHNob3J0LWxpdmVkCisgICAgcHJvY2Vzc2VzLCB0aGUgcGFyZW50IHByb2Nlc3MgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFsbCB0aGUgaGVscGVycworICAgIGNhbiBiZSBpZGVudGlmaWVkCisKKzYuIExvd2VyLUxldmVsIEFuYWx5c2lzIHdpdGggUENMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBtYXkgYWxzbyBiZSBhIHJlcXVpcmVtZW50IHRvIGlkZW50aWZ5IHdoYXQgZnVuY3Rpb25zIHdpdGggYSBwcm9ncmFtCit3ZXJlIGdlbmVyYXRpbmcgZXZlbnRzIHdpdGhpbiB0aGUga2VybmVsLiBUbyBiZWdpbiB0aGlzIHNvcnQgb2YgYW5hbHlzaXMsIHRoZQorZGF0YSBtdXN0IGJlIHJlY29yZGVkLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGlzIHJlcXVpcmVkIHJvb3QKKworICAkIHBlcmYgcmVjb3JkIC1jIDEgXAorCS1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAorCS1lIGttZW06bW1fcGFnZXZlY19mcmVlIFwKKwkuL2hhY2tiZW5jaCAxMAorICBUaW1lOiAwLjg5NAorICBbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgMC43MzMgTUIgcGVyZi5kYXRhICh+MzIwMTAgc2FtcGxlcykgXQorCitOb3RlIHRoZSB1c2Ugb2YgJy1jIDEnIHRvIHNldCB0aGUgZXZlbnQgcGVyaW9kIHRvIHNhbXBsZS4gVGhlIGRlZmF1bHQgc2FtcGxlCitwZXJpb2QgaXMgcXVpdGUgaGlnaCB0byBtaW5pbWlzZSBvdmVyaGVhZCBidXQgdGhlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBjYW4gYmUKK3ZlcnkgY29hcnNlIGFzIGEgcmVzdWx0LgorCitUaGlzIHJlY29yZCBvdXRwdXR0ZWQgYSBmaWxlIGNhbGxlZCBwZXJmLmRhdGEgd2hpY2ggY2FuIGJlIGFuYWx5c2VkIHVzaW5nCitwZXJmIHJlcG9ydC4KKworICAkIHBlcmYgcmVwb3J0CisgICMgU2FtcGxlczogMzA5MjIKKyAgIworICAjIE92ZXJoZWFkICAgIENvbW1hbmQgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgT2JqZWN0CisgICMgLi4uLi4uLi4gIC4uLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgIworICAgICAgODcuMjclICBoYWNrYmVuY2ggIFt2ZHNvXQorICAgICAgIDYuODUlICBoYWNrYmVuY2ggIC9saWIvaTY4Ni9jbW92L2xpYmMtMi45LnNvCisgICAgICAgMi42MiUgIGhhY2tiZW5jaCAgL2xpYi9sZC0yLjkuc28KKyAgICAgICAxLjUyJSAgICAgICBwZXJmICBbdmRzb10KKyAgICAgICAxLjIyJSAgaGFja2JlbmNoICAuL2hhY2tiZW5jaAorICAgICAgIDAuNDglICBoYWNrYmVuY2ggIFtrZXJuZWxdCisgICAgICAgMC4wMiUgICAgICAgcGVyZiAgL2xpYi9pNjg2L2Ntb3YvbGliYy0yLjkuc28KKyAgICAgICAwLjAxJSAgICAgICBwZXJmICAvdXNyL2Jpbi9wZXJmCisgICAgICAgMC4wMSUgICAgICAgcGVyZiAgL2xpYi9sZC0yLjkuc28KKyAgICAgICAwLjAwJSAgaGFja2JlbmNoICAvbGliL2k2ODYvY21vdi9saWJwdGhyZWFkLTIuOS5zbworICAjCisgICMgKEZvciBtb3JlIGRldGFpbHMsIHRyeTogcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbCkKKyAgIworCitBY2NvcmRpbmcgdG8gdGhpcywgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZXZlbnRzIG9jY3VyZWQgdHJpZ2dlcmVkIG9uIGV2ZW50cword2l0aGluIHRoZSBWRFNPLiBXaXRoIHNpbXBsZSBiaW5hcmllcywgdGhpcyB3aWxsIG9mdGVuIGJlIHRoZSBjYXNlIHNvIGxldHMKK3Rha2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZXhhbXBsZS4gSW4gdGhlIGNvdXJzZSBvZiB3cml0aW5nIHRoaXMsIGl0IHdhcworbm90aWNlZCB0aGF0IFggd2FzIGdlbmVyYXRpbmcgYW4gaW5zYW5lIGFtb3VudCBvZiBwYWdlIGFsbG9jYXRpb25zIHNvIGxldHMgbG9vaworYXQgaXQKKworICAkIHBlcmYgcmVjb3JkIC1jIDEgLWYgXAorCQktZSBrbWVtOm1tX3BhZ2VfYWxsb2MgLWUga21lbTptbV9wYWdlX2ZyZWVfZGlyZWN0IFwKKwkJLWUga21lbTptbV9wYWdldmVjX2ZyZWUgXAorCQktcCBgcGlkb2YgWGAKKworVGhpcyB3YXMgaW50ZXJydXB0ZWQgYWZ0ZXIgYSBmZXcgc2Vjb25kcyBhbmQKKworICAkIHBlcmYgcmVwb3J0CisgICMgU2FtcGxlczogMjc2NjYKKyAgIworICAjIE92ZXJoZWFkICBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZCBPYmplY3QKKyAgIyAuLi4uLi4uLiAgLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICMKKyAgICAgIDUxLjk1JSAgICAgWG9yZyAgW3Zkc29dCisgICAgICA0Ny45NSUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMQorICAgICAgIDAuMDklICAgICBYb3JnICAvbGliL2k2ODYvY21vdi9saWJjLTIuOS5zbworICAgICAgIDAuMDElICAgICBYb3JnICBba2VybmVsXQorICAjCisgICMgKEZvciBtb3JlIGRldGFpbHMsIHRyeTogcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbCkKKyAgIworCitTbywgYWxtb3N0IGhhbGYgb2YgdGhlIGV2ZW50cyBhcmUgb2NjdXJpbmcgaW4gYSBsaWJyYXJ5LiBUbyBnZXQgYW4gaWRlYSB3aGljaAorc3ltYm9sLgorCisgICQgcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbAorICAjIFNhbXBsZXM6IDI3NjY2CisgICMKKyAgIyBPdmVyaGVhZCAgQ29tbWFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgT2JqZWN0ICBTeW1ib2wKKyAgIyAuLi4uLi4uLiAgLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAuLi4uLi4KKyAgIworICAgICAgNTEuOTUlICAgICBYb3JnICBbdmRzb10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsuXSAweDAwMDAwMGZmZmZlNDI0CisgICAgICA0Ny45MyUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMSAgWy5dIHBpeG1hbkZpbGxzc2UyCisgICAgICAgMC4wOSUgICAgIFhvcmcgIC9saWIvaTY4Ni9jbW92L2xpYmMtMi45LnNvICAgICAgICAgICAgICAgWy5dIF9pbnRfbWFsbG9jCisgICAgICAgMC4wMSUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMSAgWy5dIHBpeG1hbl9yZWdpb24zMl9jb3B5X2YKKyAgICAgICAwLjAxJSAgICAgWG9yZyAgW2tlcm5lbF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba10gcmVhZF9ocGV0CisgICAgICAgMC4wMSUgICAgIFhvcmcgIC9vcHQvZ2Z4LXRlc3QvbGliL2xpYnBpeG1hbi0xLnNvLjAuMTMuMSAgWy5dIGdldF9mYXN0X3BhdGgKKyAgICAgICAwLjAwJSAgICAgWG9yZyAgW2tlcm5lbF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba10gZnRyYWNlX3RyYWNlX3VzZXJzdGFjaworCitUbyBzZWUgd2hlcmUgd2l0aGluIHRoZSBmdW5jdGlvbiBwaXhtYW5GaWxsc3NlMiB0aGluZ3MgYXJlIGdvaW5nIHdyb25nCisKKyAgJCBwZXJmIGFubm90YXRlIHBpeG1hbkZpbGxzc2UyCisgIFsgLi4uIF0KKyAgICAwLjAwIDogICAgICAgICAzNGVlYjogICAgICAgMGYgMTggMDggICAgICAgICAgICAgICAgcHJlZmV0Y2h0MCAoJWVheCkKKyAgICAgICAgIDogICAgICB9CisgICAgICAgICA6CisgICAgICAgICA6ICAgICAgZXh0ZXJuIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfCisgICAgICAgICA6ICAgICAgX21tX3N0b3JlX3NpMTI4IChfX20xMjhpICpfX1AsIF9fbTEyOGkgX19CKSA6ICAgICAgeworICAgICAgICAgOiAgICAgICAgKl9fUCA9IF9fQjsKKyAgIDEyLjQwIDogICAgICAgICAzNGVlZTogICAgICAgNjYgMGYgN2YgODAgNDAgZmYgZmYgICAgbW92ZHFhICV4bW0wLC0weGMwKCVlYXgpCisgICAgMC4wMCA6ICAgICAgICAgMzRlZjU6ICAgICAgIGZmCisgICAxMi40MCA6ICAgICAgICAgMzRlZjY6ICAgICAgIDY2IDBmIDdmIDgwIDUwIGZmIGZmICAgIG1vdmRxYSAleG1tMCwtMHhiMCglZWF4KQorICAgIDAuMDAgOiAgICAgICAgIDM0ZWZkOiAgICAgICBmZgorICAgMTIuMzkgOiAgICAgICAgIDM0ZWZlOiAgICAgICA2NiAwZiA3ZiA4MCA2MCBmZiBmZiAgICBtb3ZkcWEgJXhtbTAsLTB4YTAoJWVheCkKKyAgICAwLjAwIDogICAgICAgICAzNGYwNTogICAgICAgZmYKKyAgIDEyLjY3IDogICAgICAgICAzNGYwNjogICAgICAgNjYgMGYgN2YgODAgNzAgZmYgZmYgICAgbW92ZHFhICV4bW0wLC0weDkwKCVlYXgpCisgICAgMC4wMCA6ICAgICAgICAgMzRmMGQ6ICAgICAgIGZmCisgICAxMi41OCA6ICAgICAgICAgMzRmMGU6ICAgICAgIDY2IDBmIDdmIDQwIDgwICAgICAgICAgIG1vdmRxYSAleG1tMCwtMHg4MCglZWF4KQorICAgMTIuMzEgOiAgICAgICAgIDM0ZjEzOiAgICAgICA2NiAwZiA3ZiA0MCA5MCAgICAgICAgICBtb3ZkcWEgJXhtbTAsLTB4NzAoJWVheCkKKyAgIDEyLjQwIDogICAgICAgICAzNGYxODogICAgICAgNjYgMGYgN2YgNDAgYTAgICAgICAgICAgbW92ZHFhICV4bW0wLC0weDYwKCVlYXgpCisgICAxMi4zMSA6ICAgICAgICAgMzRmMWQ6ICAgICAgIDY2IDBmIDdmIDQwIGIwICAgICAgICAgIG1vdmRxYSAleG1tMCwtMHg1MCglZWF4KQorCitBdCBhIGdsYW5jZSwgaXQgbG9va3MgbGlrZSB0aGUgdGltZSBpcyBiZWluZyBzcGVudCBjb3B5aW5nIHBpeG1hcHMgdG8KK3RoZSBjYXJkLiAgRnVydGhlciBpbnZlc3RpZ2F0aW9uIHdvdWxkIGJlIG5lZWRlZCB0byBkZXRlcm1pbmUgd2h5IHBpeG1hcHMKK2FyZSBiZWluZyBjb3BpZWQgYXJvdW5kIHNvIG11Y2ggYnV0IGEgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdG8gdGFrZSBhbgorYW5jaWVudCBidWlsZCBvZiBsaWJwaXhtYXAgb3V0IG9mIHRoZSBsaWJyYXJ5IHBhdGggd2hlcmUgaXQgd2FzIHRvdGFsbHkKK2ZvcmdvdHRlbiBhYm91dCBmcm9tIG1vbnRocyBhZ28hCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hdXRob3JpemF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0CmluZGV4IDM4MWIyMmUuLmMwNjliNjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2F1dGhvcml6YXRpb24udHh0CkBAIC0xNiwyMCArMTYsMjAgQEAKIAogQXV0aG9yaXplIGEgZGV2aWNlIHRvIGNvbm5lY3Q6CiAKLSQgZWNobyAxID4gL3N5cy91c2IvZGV2aWNlcy9ERVZJQ0UvYXV0aG9yaXplZAorJCBlY2hvIDEgPiAvc3lzL2J1cy91c2IvZGV2aWNlcy9ERVZJQ0UvYXV0aG9yaXplZAogCiBEZWF1dGhvcml6ZSBhIGRldmljZToKIAotJCBlY2hvIDAgPiAvc3lzL3VzYi9kZXZpY2VzL0RFVklDRS9hdXRob3JpemVkCiskIGVjaG8gMCA+IC9zeXMvYnVzL3VzYi9kZXZpY2VzL0RFVklDRS9hdXRob3JpemVkCiAKIFNldCBuZXcgZGV2aWNlcyBjb25uZWN0ZWQgdG8gaG9zdFggdG8gYmUgZGVhdXRob3JpemVkIGJ5IGRlZmF1bHQgKGllOgogbG9jayBkb3duKToKIAotJCBlY2hvIDAgPiAvc3lzL2J1cy9kZXZpY2VzL3VzYlgvYXV0aG9yaXplZF9kZWZhdWx0CiskIGVjaG8gMCA+IC9zeXMvYnVzL3VzYi9kZXZpY2VzL3VzYlgvYXV0aG9yaXplZF9kZWZhdWx0CiAKIFJlbW92ZSB0aGUgbG9jayBkb3duOgogCi0kIGVjaG8gMSA+IC9zeXMvYnVzL2RldmljZXMvdXNiWC9hdXRob3JpemVkX2RlZmF1bHQKKyQgZWNobyAxID4gL3N5cy9idXMvdXNiL2RldmljZXMvdXNiWC9hdXRob3JpemVkX2RlZmF1bHQKIAogQnkgZGVmYXVsdCwgV2lyZWQgVVNCIGRldmljZXMgYXJlIGF1dGhvcml6ZWQgYnkgZGVmYXVsdCB0bwogY29ubmVjdC4gV2lyZWxlc3MgVVNCIGhvc3RzIGRlYXV0aG9yaXplIGJ5IGRlZmF1bHQgYWxsIG5ldyBjb25uZWN0ZWQKQEAgLTQ3LDcgKzQ3LDcgQEAKIGJvb3QgdXAKIHJjLmxvY2FsIC0+CiAKLSBmb3IgaG9zdCBpbiAvc3lzL2J1cy9kZXZpY2VzL3VzYioKKyBmb3IgaG9zdCBpbiAvc3lzL2J1cy91c2IvZGV2aWNlcy91c2IqCiAgZG8KICAgICBlY2hvIDAgPiAkaG9zdC9hdXRob3JpemVkX2RlZmF1bHQKICBkb25lCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dAppbmRleCA2YzNjNjI1Li42NmY5MmQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKQEAgLTMzLDcgKzMzLDcgQEAKIAogVmVyaWZ5IHRoYXQgYnVzIHNvY2tldHMgYXJlIHByZXNlbnQuCiAKLSMgbHMgL3N5cy9rZXJuZWwvZGVidWcvdXNibW9uCisjIGxzIC9zeXMva2VybmVsL2RlYnVnL3VzYi91c2Jtb24KIDBzICAwdSAgMXMgIDF0ICAxdSAgMnMgIDJ0ICAydSAgM3MgIDN0ICAzdSAgNHMgIDR0ICA0dQogIwogCkBAIC01OCwxMSArNTgsMTEgQEAKIAogMy4gU3RhcnQgJ2NhdCcKIAotIyBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdXNibW9uLzN1ID4gL3RtcC8xLm1vbi5vdXQKKyMgY2F0IC9zeXMva2VybmVsL2RlYnVnL3VzYi91c2Jtb24vM3UgPiAvdG1wLzEubW9uLm91dAogCiB0byBsaXN0ZW4gb24gYSBzaW5nbGUgYnVzLCBvdGhlcndpc2UsIHRvIGxpc3RlbiBvbiBhbGwgYnVzZXMsIHR5cGU6CiAKLSMgY2F0IC9zeXMva2VybmVsL2RlYnVnL3VzYm1vbi8wdSA+IC90bXAvMS5tb24ub3V0CisjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvdXNibW9uLzB1ID4gL3RtcC8xLm1vbi5vdXQKIAogVGhpcyBwcm9jZXNzIHdpbGwgYmUgcmVhZGluZyB1bnRpbCBraWxsZWQuIE5hdHVyYWxseSwgdGhlIG91dHB1dCBjYW4gYmUKIHJlZGlyZWN0ZWQgdG8gYSBkZXNpcmFibGUgbG9jYXRpb24uIFRoaXMgaXMgcHJlZmVycmVkLCBiZWNhdXNlIGl0IGlzIGdvaW5nCkBAIC0zMDUsNyArMzA1LDcgQEAKIHBvaW50ZWQgYnkgaGRyIGNvbnRhaW5zIHRoZSBuZXh0IGV2ZW50IHN0cnVjdHVyZSwgYW5kIHRoZSBkYXRhIGJ1ZmZlciBjb250YWlucwogdGhlIGRhdGEsIGlmIGFueS4gVGhlIGV2ZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIGJ1ZmZlci4KIAotVGhlIE1PTl9JT0NYX0dFVCBjb3BpZXMgNDggYnl0ZXMsIE1PTl9JT0NYX0dFVFggY29waWVzIDY0IGJ5dGVzLgorVGhlIE1PTl9JT0NYX0dFVCBjb3BpZXMgNDggYnl0ZXMgdG8gaGRyIGFyZWEsIE1PTl9JT0NYX0dFVFggY29waWVzIDY0IGJ5dGVzLgogCiAgTU9OX0lPQ1hfTUZFVENILCBkZWZpbmVkIGFzIF9JT1dSKE1PTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBtb25fbWZldGNoX2FyZykKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CmluZGV4IDUyNWVkYjMuLjVmMzNkODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKQEAgLTIzLDMgKzIzLDQgQEAKICAyMiAtPiBNeWdpY2EgWDg1MDYgRE1CLVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0ZjE6ODY1MV0KICAyMyAtPiBNYWdpYy1Qcm8gUHJvSERUViBFeHRyZW1lIDIgICAgICAgICAgICAgICAgICAgICAgICAgWzE0ZjE6ODY1N10KICAyNCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTg1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODU0MV0KKyAyNSAtPiBDb21wcm8gVmlkZW9NYXRlIEU4MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4NTg6ZTgwMF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKaW5kZXggYjEzZmNiZC4uYjhhZmVmNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKQEAgLTEsNSArMSw1IEBACiAgIDAgLT4gVW5rbm93biBFTTI4MDAgdmlkZW8gZ3JhYmJlciAgICAgICAgICAgICAoZW0yODAwKSAgICAgICAgW2ViMWE6MjgwMF0KLSAgMSAtPiBVbmtub3duIEVNMjc1MC8yOHh4IHZpZGVvIGdyYWJiZXIgICAgICAgIChlbTI4MjAvZW0yODQwKSBbZWIxYToyNzEwLGViMWE6MjgyMCxlYjFhOjI4MjEsZWIxYToyODYwLGViMWE6Mjg2MSxlYjFhOjI4NzAsZWIxYToyODgxLGViMWE6Mjg4M10KKyAgMSAtPiBVbmtub3duIEVNMjc1MC8yOHh4IHZpZGVvIGdyYWJiZXIgICAgICAgIChlbTI4MjAvZW0yODQwKSBbZWIxYToyNzEwLGViMWE6MjgyMCxlYjFhOjI4MjEsZWIxYToyODYwLGViMWE6Mjg2MSxlYjFhOjI4NzAsZWIxYToyODgxLGViMWE6Mjg4MyxlYjFhOjI4NjhdCiAgIDIgLT4gVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzBjY2Q6MDAzNl0KICAgMyAtPiBQaW5uYWNsZSBQQ1RWIFVTQiAyICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjMwNDowMjA4XQogICA0IC0+IEhhdXBwYXVnZSBXaW5UViBVU0IgMiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMDQwOjQyMDAsMjA0MDo0MjAxXQpAQCAtNjgsMyArNjgsNCBAQAogIDcwIC0+IEV2Z2EgaW5EdHViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MikKICA3MSAtPiBTaWx2ZXJjcmVzdCBXZWJjYW0gMS4zbXBpeCAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQogIDcyIC0+IEdhZG1laSBVVFYzMzArICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MSkKKyA3MyAtPiBSZWRkbyBEVkItQyBVU0IgVFYgQm94ICAgICAgICAgICAgICAgICAgIChlbTI4NzApCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggMGFjNGQyNS4uMjYyMGQ2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTcxLDMgKzE3MSw0IEBACiAxNzAgLT4gQXZlck1lZGlhIEF2ZXJUViBTdHVkaW8gNTA1ICAgICAgICAgICAgICBbMTQ2MTphMTE1XQogMTcxIC0+IEJlaG9sZGVyIEJlaG9sZFRWIFg3ICAgICAgICAgICAgICAgICAgICAgWzVhY2U6NzU5NV0KIDE3MiAtPiBSb3Zlck1lZGlhIFRWIExpbmsgUHJvIEZNICAgICAgICAgICAgICAgIFsxOWQxOjAxMzhdCisxNzMgLT4gWm9saWQgSHlicmlkIFRWIFR1bmVyIFBDSSAgICAgICAgICAgICAgICBbMTEzMToyMDA0XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTY0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmJkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxNjQKQEAgLTAsMCArMSw5IEBACisgIDAgLT4gVW5rbm93bgorICAxIC0+IEdlbmVyaWMgUmV2MgorICAyIC0+IEdlbmVyaWMgUmV2MworICAzIC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIyMjUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo4ODgwLDAwNzA6ODgxMF0KKyAgNCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODk4MF0KKyAgNSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODkwMF0KKyAgNiAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODkwMV0KKyAgNyAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMjI1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODg5MSwwMDcwOjg4NTFdCisgIDggLT4gSGF1cHBhdWdlIFdpblRWLUhWUjIyNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjg4QTFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCBiYTlmYTY3Li5lMGQyOThmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTc5LDMgKzc5LDUgQEAKIHR1bmVyPTc5IC0gUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZNMTIxNiBNSzUpCiB0dW5lcj04MCAtIFBoaWxpcHMgRlExMjE2TE1FIE1LMyBQQUwvU0VDQU0gdy9hY3RpdmUgbG9vcHRocm91Z2gKIHR1bmVyPTgxIC0gUGFydHNuaWMgKERhZXdvbykgUFRJLTVORjA1Cit0dW5lcj04MiAtIFBoaWxpcHMgQ1UxMjE2TAordHVuZXI9ODMgLSBOWFAgVERBMTgyNzEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKaW5kZXggNDY4NmU4NC4uM2Y2MTgyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTE3Myw2ICsxNzMsOCBAQAogb3Y1MTkJCTA1YTk6YTUxOAlELUxpbmsgRFNCLUMzMTAgV2ViY2FtCiBzdW5wbHVzCQkwNWRhOjEwMTgJRGlnaXRhbCBEcmVhbSBFbmlnbWEgMS4zCiBzdGswMTQJCTA1ZTE6MDg5MwlTeW50ZWsgRFY0MDAwCitnbDg2MAkJMDVlMzowNTAzCUdlbmVzeXMgTG9naWMgUEMgQ2FtZXJhCitnbDg2MAkJMDVlMzpmMTkxCUdlbmVzeXMgTG9naWMgUEMgQ2FtZXJhCiBzcGNhNTYxCQkwNjBiOmEwMDEJTWF4ZWxsIENvbXBhY3QgUGMgUE0zCiB6YzN4eAkJMDY5ODoyMDAzCUNUWCBNNzMwViBidWlsdCBpbgogc3BjYTUwMAkJMDZiZDowNDA0CUFnZmEgQ0wyMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zb2MtY2FtZXJhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc29jLWNhbWVyYS50eHQKaW5kZXggMTc4ZWYzYy4uM2Y4N2M3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zb2MtY2FtZXJhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NvYy1jYW1lcmEudHh0CkBAIC0xMTYsNSArMTE2LDQ1IEBACiBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgYWxzbyBsaW5rcyB0byBhbiBhcnJheSBvZiBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCwKIGxpc3RpbmcgcGl4ZWwgZm9ybWF0cywgc3VwcG9ydGVkIGJ5IHRoZSBjYW1lcmEuCiAKK1ZJRElPQ19TX0NST1AgYW5kIFZJRElPQ19TX0ZNVCBiZWhhdmlvdXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWJvdmUgdXNlciBpb2N0bHMgbW9kaWZ5IGltYWdlIGdlb21ldHJ5IGFzIGZvbGxvd3M6CisKK1ZJRElPQ19TX0NST1A6IHNldHMgbG9jYXRpb24gYW5kIHNpemVzIG9mIHRoZSBzZW5zb3Igd2luZG93LiBVbml0IGlzIG9uZSBzZW5zb3IKK3BpeGVsLiBDaGFuZ2luZyBzZW5zb3Igd2luZG93IHNpemVzIHByZXNlcnZlcyBhbnkgc2NhbGluZyBmYWN0b3JzLCB0aGVyZWZvcmUKK3VzZXIgd2luZG93IHNpemVzIGNoYW5nZSBhcyB3ZWxsLgorCitWSURJT0NfU19GTVQ6IHNldHMgdXNlciB3aW5kb3cuIFNob3VsZCBwcmVzZXJ2ZSBwcmV2aW91c2x5IHNldCBzZW5zb3Igd2luZG93IGFzCittdWNoIGFzIHBvc3NpYmxlIGJ5IG1vZGlmeWluZyBzY2FsaW5nIGZhY3RvcnMuIElmIHRoZSBzZW5zb3Igd2luZG93IGNhbm5vdCBiZQorcHJlc2VydmVkIHByZWNpc2VseSwgaXQgbWF5IGJlIGNoYW5nZWQgdG9vLgorCitJbiBzb2MtY2FtZXJhIHRoZXJlIGFyZSB0d28gbG9jYXRpb25zLCB3aGVyZSBzY2FsaW5nIGFuZCBjcm9wcGluZyBjYW4gdGFrcworcGxhY2U6IGluIHRoZSBjYW1lcmEgZHJpdmVyIGFuZCBpbiB0aGUgaG9zdCBkcml2ZXIuIFVzZXIgaW9jdGxzIGFyZSBmaXJzdCBwYXNzZWQKK3RvIHRoZSBob3N0IGRyaXZlciwgd2hpY2ggdGhlbiBnZW5lcmFsbHkgcGFzc2VzIHRoZW0gZG93biB0byB0aGUgY2FtZXJhIGRyaXZlci4KK0l0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHBlcmZvcm0gc2NhbGluZyBhbmQgY3JvcHBpbmcgaW4gdGhlIGNhbWVyYSBkcml2ZXIgdG8KK3NhdmUgY2FtZXJhIGJ1cyBiYW5kd2lkdGggYW5kIG1heGltaXNlIHRoZSBmcmFtZXJhdGUuIEhvd2V2ZXIsIGlmIHRoZSBjYW1lcmEKK2RyaXZlciBmYWlsZWQgdG8gc2V0IHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIHdpdGggc3VmZmljaWVudCBwcmVjaXNpb24sIHRoZSBob3N0Citkcml2ZXIgbWF5IGRlY2lkZSB0byBhbHNvIHVzZSBpdHMgb3duIHNjYWxpbmcgYW5kIGNyb3BwaW5nIHRvIGZ1bGZpbGwgdGhlIHVzZXIncworcmVxdWVzdC4KKworQ2FtZXJhIGRyaXZlcnMgYXJlIGludGVyZmFjZWQgdG8gdGhlIHNvYy1jYW1lcmEgY29yZSBhbmQgdG8gaG9zdCBkcml2ZXJzIG92ZXIKK3RoZSB2NGwyLXN1YmRldiBBUEksIHdoaWNoIGlzIGNvbXBsZXRlbHkgZnVuY3Rpb25hbCwgaXQgZG9lc24ndCBwYXNzIGFueSBkYXRhLgorVGhlcmVmb3JlIGFsbCBjYW1lcmEgZHJpdmVycyBzaGFsbCByZXBseSB0byAuZ19mbXQoKSByZXF1ZXN0cyB3aXRoIHRoZWlyIGN1cnJlbnQKK291dHB1dCBnZW9tZXRyeS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY29ycmVjdGx5IGNvbmZpZ3VyZSB0aGUgY2FtZXJhIGJ1cy4KKy5zX2ZtdCgpIGFuZCAudHJ5X2ZtdCgpIGhhdmUgdG8gYmUgaW1wbGVtZW50ZWQgdG9vLiBTZW5zb3Igd2luZG93IGFuZCBzY2FsaW5nCitmYWN0b3JzIGhhdmUgdG8gYmUgbWFpbnRhaW5lZCBieSBjYW1lcmEgZHJpdmVycyBpbnRlcm5hbGx5LiBBY2NvcmRpbmcgdG8gdGhlCitWNEwyIEFQSSBhbGwgY2FwdHVyZSBkcml2ZXJzIG11c3Qgc3VwcG9ydCB0aGUgVklESU9DX0NST1BDQVAgaW9jdGwsIGhlbmNlIHdlCityZWx5IG9uIGNhbWVyYSBkcml2ZXJzIGltcGxlbWVudGluZyAuY3JvcGNhcCgpLiBJZiB0aGUgY2FtZXJhIGRyaXZlciBkb2VzIG5vdAorc3VwcG9ydCBjcm9wcGluZywgaXQgbWF5IGNob29zZSB0byBub3QgaW1wbGVtZW50IC5zX2Nyb3AoKSwgYnV0IHRvIGVuYWJsZQorY3JvcHBpbmcgc3VwcG9ydCBieSB0aGUgY2FtZXJhIGhvc3QgZHJpdmVyIGF0IGxlYXN0IHRoZSAuZ19jcm9wIG1ldGhvZCBtdXN0IGJlCitpbXBsZW1lbnRlZC4KKworVXNlciB3aW5kb3cgZ2VvbWV0cnkgaXMga2VwdCBpbiAudXNlcl93aWR0aCBhbmQgLnVzZXJfaGVpZ2h0IGZpZWxkcyBpbiBzdHJ1Y3QKK3NvY19jYW1lcmFfZGV2aWNlIGFuZCB1c2VkIGJ5IHRoZSBzb2MtY2FtZXJhIGNvcmUgYW5kIGhvc3QgZHJpdmVycy4gVGhlIGNvcmUKK3VwZGF0ZXMgdGhlc2UgZmllbGRzIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgLnNfZm10KCkgY2FsbCwgYnV0IGlmIHRoZXNlCitmaWVsZHMgY2hhbmdlIGVsc2V3aGVyZSwgZS5nLiwgZHVyaW5nIC5zX2Nyb3AoKSBwcm9jZXNzaW5nLCB0aGUgaG9zdCBkcml2ZXIgaXMKK3Jlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGVtLgorCiAtLQogQXV0aG9yOiBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKaW5kZXggYmE0NzA2YS4uYjgwNmVkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKQEAgLTM3MCwxOSArMzcwLDIwIEBACiBUaGUgYnJpZGdlIGRyaXZlciBhbHNvIGhhcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgaXQgY2FuIHVzZToKIAogc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYodjRsMl9kZXYsIGFkYXB0ZXIsCi0JICAgICAgICJtb2R1bGVfZm9vIiwgImNoaXBpZCIsIDB4MzYpOworCSAgICAgICAibW9kdWxlX2ZvbyIsICJjaGlwaWQiLCAweDM2LCBOVUxMKTsKIAogVGhpcyBsb2FkcyB0aGUgZ2l2ZW4gbW9kdWxlIChjYW4gYmUgTlVMTCBpZiBubyBtb2R1bGUgbmVlZHMgdG8gYmUgbG9hZGVkKSBhbmQKIGNhbGxzIGkyY19uZXdfZGV2aWNlKCkgd2l0aCB0aGUgZ2l2ZW4gaTJjX2FkYXB0ZXIgYW5kIGNoaXAvYWRkcmVzcyBhcmd1bWVudHMuCiBJZiBhbGwgZ29lcyB3ZWxsLCB0aGVuIGl0IHJlZ2lzdGVycyB0aGUgc3ViZGV2IHdpdGggdGhlIHY0bDJfZGV2aWNlLgogCi1Zb3UgY2FuIGFsc28gdXNlIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCkgd2hpY2ggaXMgdmVyeSBzaW1pbGFyIHRvCi12NGwyX2kyY19uZXdfc3ViZGV2KCksIGV4Y2VwdCB0aGF0IGl0IGhhcyBhbiBhcnJheSBvZiBwb3NzaWJsZSBJMkMgYWRkcmVzc2VzCi10aGF0IGl0IHNob3VsZCBwcm9iZS4gSW50ZXJuYWxseSBpdCBjYWxscyBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoKS4KK1lvdSBjYW4gYWxzbyB1c2UgdGhlIGxhc3QgYXJndW1lbnQgb2YgdjRsMl9pMmNfbmV3X3N1YmRldigpIHRvIHBhc3MgYW4gYXJyYXkKK29mIHBvc3NpYmxlIEkyQyBhZGRyZXNzZXMgdGhhdCBpdCBzaG91bGQgcHJvYmUuIFRoZXNlIHByb2JlIGFkZHJlc3NlcyBhcmUKK29ubHkgdXNlZCBpZiB0aGUgcHJldmlvdXMgYXJndW1lbnQgaXMgMC4gQSBub24temVybyBhcmd1bWVudCBtZWFucyB0aGF0IHlvdQora25vdyB0aGUgZXhhY3QgaTJjIGFkZHJlc3Mgc28gaW4gdGhhdCBjYXNlIG5vIHByb2Jpbmcgd2lsbCB0YWtlIHBsYWNlLgogCiBCb3RoIGZ1bmN0aW9ucyByZXR1cm4gTlVMTCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4KIAotTm90ZSB0aGF0IHRoZSBjaGlwaWQgeW91IHBhc3MgdG8gdjRsMl9pMmNfbmV3Xyhwcm9iZWRfKXN1YmRldigpIGlzIHVzdWFsbHkKK05vdGUgdGhhdCB0aGUgY2hpcGlkIHlvdSBwYXNzIHRvIHY0bDJfaTJjX25ld19zdWJkZXYoKSBpcyB1c3VhbGx5CiB0aGUgc2FtZSBhcyB0aGUgbW9kdWxlIG5hbWUuIEl0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGNoaXAgdmFyaWFudCwgZS5nLgogInNhYTcxMTQiIG9yICJzYWE3MTE1Ii4gSW4gZ2VuZXJhbCB0aG91Z2ggdGhlIGkyYyBkcml2ZXIgYXV0b2RldGVjdHMgdGhpcy4KIFRoZSB1c2Ugb2YgY2hpcGlkIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGxvb2tlZCBhdCBtb3JlIGNsb3NlbHkgYXQgYQpAQCAtNDEwLDExICs0MTEsNiBAQAogdjRsMl9pMmNfbmV3Xyhwcm9iZWRfKXN1YmRldiBmdW5jdGlvbnMgd2lsbCBjYWxsIHNfY29uZmlnIGFzIHdlbGwsIGJ1dCB3aXRoCiBpcnEgc2V0IHRvIDAgYW5kIHBsYXRmb3JtX2RhdGEgc2V0IHRvIE5VTEwuCiAKLU5vdGUgdGhhdCBpbiB0aGUgbmV4dCBrZXJuZWwgcmVsZWFzZSB0aGUgZnVuY3Rpb25zIHY0bDJfaTJjX25ld19zdWJkZXYsCi12NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldiBhbmQgdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXZfYWRkciB3aWxsIGFsbCBiZQotcmVwbGFjZWQgYnkgYSBzaW5nbGUgdjRsMl9pMmNfbmV3X3N1YmRldiB0aGF0IGlzIGlkZW50aWNhbCB0bwotdjRsMl9pMmNfbmV3X3N1YmRldl9jZmcgYnV0IHdpdGhvdXQgdGhlIGlycSBhbmQgcGxhdGZvcm1fZGF0YSBhcmd1bWVudHMuCi0KIHN0cnVjdCB2aWRlb19kZXZpY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDkwLDMxICs0ODYsMzUgQEAKIFZGTF9UWVBFX1ZUWDogdnR4WCBmb3IgdGVsZXRleHQgZGV2aWNlcyAoZGVwcmVjYXRlZCwgZG9uJ3QgdXNlKQogCiBUaGUgbGFzdCBhcmd1bWVudCBnaXZlcyB5b3UgYSBjZXJ0YWluIGFtb3VudCBvZiBjb250cm9sIG92ZXIgdGhlIGRldmljZQota2VybmVsIG51bWJlciB1c2VkIChpLmUuIHRoZSBYIGluIHZpZGVvWCkuIE5vcm1hbGx5IHlvdSB3aWxsIHBhc3MgLTEgdG8KLWxldCB0aGUgdjRsMiBmcmFtZXdvcmsgcGljayB0aGUgZmlyc3QgZnJlZSBudW1iZXIuIEJ1dCBpZiBhIGRyaXZlciBjcmVhdGVzCi1tYW55IGRldmljZXMsIHRoZW4gaXQgY2FuIGJlIHVzZWZ1bCB0byBoYXZlIGRpZmZlcmVudCB2aWRlbyBkZXZpY2VzIGluCi1zZXBhcmF0ZSByYW5nZXMuIEZvciBleGFtcGxlLCB2aWRlbyBjYXB0dXJlIGRldmljZXMgc3RhcnQgYXQgMCwgdmlkZW8KLW91dHB1dCBkZXZpY2VzIHN0YXJ0IGF0IDE2LgorZGV2aWNlIG5vZGUgbnVtYmVyIHVzZWQgKGkuZS4gdGhlIFggaW4gdmlkZW9YKS4gTm9ybWFsbHkgeW91IHdpbGwgcGFzcyAtMQordG8gbGV0IHRoZSB2NGwyIGZyYW1ld29yayBwaWNrIHRoZSBmaXJzdCBmcmVlIG51bWJlci4gQnV0IHNvbWV0aW1lcyB1c2Vycword2FudCB0byBzZWxlY3QgYSBzcGVjaWZpYyBub2RlIG51bWJlci4gSXQgaXMgY29tbW9uIHRoYXQgZHJpdmVycyBhbGxvdwordGhlIHVzZXIgdG8gc2VsZWN0IGEgc3BlY2lmaWMgZGV2aWNlIG5vZGUgbnVtYmVyIHRocm91Z2ggYSBkcml2ZXIgbW9kdWxlCitvcHRpb24uIFRoYXQgbnVtYmVyIGlzIHRoZW4gcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHZpZGVvX3JlZ2lzdGVyX2RldmljZQord2lsbCBhdHRlbXB0IHRvIHNlbGVjdCB0aGF0IGRldmljZSBub2RlIG51bWJlci4gSWYgdGhhdCBudW1iZXIgd2FzIGFscmVhZHkKK2luIHVzZSwgdGhlbiB0aGUgbmV4dCBmcmVlIGRldmljZSBub2RlIG51bWJlciB3aWxsIGJlIHNlbGVjdGVkIGFuZCBpdAord2lsbCBzZW5kIGEgd2FybmluZyB0byB0aGUga2VybmVsIGxvZy4KIAotU28geW91IGNhbiB1c2UgdGhlIGxhc3QgYXJndW1lbnQgdG8gc3BlY2lmeSBhIG1pbmltdW0ga2VybmVsIG51bWJlciBhbmQKLXRoZSB2NGwyIGZyYW1ld29yayB3aWxsIHRyeSB0byBwaWNrIHRoZSBmaXJzdCBmcmVlIG51bWJlciB0aGF0IGlzIGVxdWFsCitBbm90aGVyIHVzZS1jYXNlIGlzIGlmIGEgZHJpdmVyIGNyZWF0ZXMgbWFueSBkZXZpY2VzLiBJbiB0aGF0IGNhc2UgaXQgY2FuCitiZSB1c2VmdWwgdG8gcGxhY2UgZGlmZmVyZW50IHZpZGVvIGRldmljZXMgaW4gc2VwYXJhdGUgcmFuZ2VzLiBGb3IgZXhhbXBsZSwKK3ZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzdGFydCBhdCAwLCB2aWRlbyBvdXRwdXQgZGV2aWNlcyBzdGFydCBhdCAxNi4KK1NvIHlvdSBjYW4gdXNlIHRoZSBsYXN0IGFyZ3VtZW50IHRvIHNwZWNpZnkgYSBtaW5pbXVtIGRldmljZSBub2RlIG51bWJlcgorYW5kIHRoZSB2NGwyIGZyYW1ld29yayB3aWxsIHRyeSB0byBwaWNrIHRoZSBmaXJzdCBmcmVlIG51bWJlciB0aGF0IGlzIGVxdWFsCiBvciBoaWdoZXIgdG8gd2hhdCB5b3UgcGFzc2VkLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGl0IHdpbGwganVzdCBwaWNrIHRoZQogZmlyc3QgZnJlZSBudW1iZXIuCiAKK1NpbmNlIGluIHRoaXMgY2FzZSB5b3UgZG8gbm90IGNhcmUgYWJvdXQgYSB3YXJuaW5nIGFib3V0IG5vdCBiZWluZyBhYmxlCit0byBzZWxlY3QgdGhlIHNwZWNpZmllZCBkZXZpY2Ugbm9kZSBudW1iZXIsIHlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24KK3ZpZGVvX3JlZ2lzdGVyX2RldmljZV9ub193YXJuKCkgaW5zdGVhZC4KKwogV2hlbmV2ZXIgYSBkZXZpY2Ugbm9kZSBpcyBjcmVhdGVkIHNvbWUgYXR0cmlidXRlcyBhcmUgYWxzbyBjcmVhdGVkIGZvciB5b3UuCiBJZiB5b3UgbG9vayBpbiAvc3lzL2NsYXNzL3ZpZGVvNGxpbnV4IHlvdSBzZWUgdGhlIGRldmljZXMuIEdvIGludG8gZS5nLgogdmlkZW8wIGFuZCB5b3Ugd2lsbCBzZWUgJ25hbWUnIGFuZCAnaW5kZXgnIGF0dHJpYnV0ZXMuIFRoZSAnbmFtZScgYXR0cmlidXRlCi1pcyB0aGUgJ25hbWUnIGZpZWxkIG9mIHRoZSB2aWRlb19kZXZpY2Ugc3RydWN0LiBUaGUgJ2luZGV4JyBhdHRyaWJ1dGUgaXMKLWEgZGV2aWNlIG5vZGUgaW5kZXggdGhhdCBjYW4gYmUgYXNzaWduZWQgYnkgdGhlIGRyaXZlciwgb3IgdGhhdCBpcyBjYWxjdWxhdGVkCi1mb3IgeW91LgoraXMgdGhlICduYW1lJyBmaWVsZCBvZiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdC4KIAotSWYgeW91IGNhbGwgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCksIHRoZW4gdGhlIGluZGV4IGlzIGp1c3QgaW5jcmVhc2VkIGJ5Ci0xIGZvciBlYWNoIGRldmljZSBub2RlIHlvdSByZWdpc3Rlci4gVGhlIGZpcnN0IHZpZGVvIGRldmljZSBub2RlIHlvdSByZWdpc3RlcgotYWx3YXlzIHN0YXJ0cyBvZmYgd2l0aCAwLgotCi1BbHRlcm5hdGl2ZWx5IHlvdSBjYW4gY2FsbCB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoKSB3aGljaCBpcyBpZGVudGljYWwKLXRvIHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpLCBidXQgd2l0aCBhbiBleHRyYSBpbmRleCBhcmd1bWVudC4gSGVyZSB5b3UgY2FuCi1wYXNzIGEgc3BlY2lmaWMgaW5kZXggdmFsdWUgKGJldHdlZW4gMCBhbmQgMzEpIHRoYXQgc2hvdWxkIGJlIHVzZWQuCitUaGUgJ2luZGV4JyBhdHRyaWJ1dGUgaXMgdGhlIGluZGV4IG9mIHRoZSBkZXZpY2Ugbm9kZTogZm9yIGVhY2ggY2FsbCB0bwordmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgdGhlIGluZGV4IGlzIGp1c3QgaW5jcmVhc2VkIGJ5IDEuIFRoZSBmaXJzdCB2aWRlbworZGV2aWNlIG5vZGUgeW91IHJlZ2lzdGVyIGFsd2F5cyBzdGFydHMgd2l0aCBpbmRleCAwLgogCiBVc2VycyBjYW4gc2V0dXAgdWRldiBydWxlcyB0aGF0IHV0aWxpemUgdGhlIGluZGV4IGF0dHJpYnV0ZSB0byBtYWtlIGZhbmN5CiBkZXZpY2UgbmFtZXMgKGUuZy4gJ21wZWdYJyBmb3IgTVBFRyB2aWRlbyBjYXB0dXJlIGRldmljZSBub2RlcykuCkBAIC01MjMsOSArNTIzLDggQEAKIAogLSB2ZmxfdHlwZTogdGhlIGRldmljZSB0eXBlIHBhc3NlZCB0byB2aWRlb19yZWdpc3Rlcl9kZXZpY2UuCiAtIG1pbm9yOiB0aGUgYXNzaWduZWQgZGV2aWNlIG1pbm9yIG51bWJlci4KLS0gbnVtOiB0aGUgZGV2aWNlIGtlcm5lbCBudW1iZXIgKGkuZS4gdGhlIFggaW4gdmlkZW9YKS4KLS0gaW5kZXg6IHRoZSBkZXZpY2UgaW5kZXggbnVtYmVyIChjYWxjdWxhdGVkIG9yIHNldCBleHBsaWNpdGx5IHVzaW5nCi0gIHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleCkuCistIG51bTogdGhlIGRldmljZSBub2RlIG51bWJlciAoaS5lLiB0aGUgWCBpbiB2aWRlb1gpLgorLSBpbmRleDogdGhlIGRldmljZSBpbmRleCBudW1iZXIuCiAKIElmIHRoZSByZWdpc3RyYXRpb24gZmFpbGVkLCB0aGVuIHlvdSBuZWVkIHRvIGNhbGwgdmlkZW9fZGV2aWNlX3JlbGVhc2UoKQogdG8gZnJlZSB0aGUgYWxsb2NhdGVkIHZpZGVvX2RldmljZSBzdHJ1Y3QsIG9yIGZyZWUgeW91ciBvd24gc3RydWN0IGlmIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYwppbmRleCAwNTc2OWNmLi5jOGRlZDE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYwpAQCAtODksNyArODksNyBAQAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKLWludCBnZXRfYnJpZ2h0bmVzc19hZGoodW5zaWduZWQgY2hhciAqaW1hZ2UsIGxvbmcgc2l6ZSwgaW50ICpicmlnaHRuZXNzKSB7CitzdGF0aWMgaW50IGdldF9icmlnaHRuZXNzX2Fkaih1bnNpZ25lZCBjaGFyICppbWFnZSwgbG9uZyBzaXplLCBpbnQgKmJyaWdodG5lc3MpIHsKICAgbG9uZyBpLCB0b3QgPSAwOwogICBmb3IgKGk9MDtpPHNpemUqMztpKyspCiAgICAgdG90ICs9IGltYWdlW2ldOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vdm0vMDAtSU5ERVgKaW5kZXggMmY3N2NlZC4uZTU3ZDZhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtLzAwLUlOREVYCkBAIC02LDYgKzYsOCBAQAogCS0gdmFyaW91cyBpbmZvcm1hdGlvbiBvbiBtZW1vcnkgYmFsYW5jaW5nLgogaHVnZXRsYnBhZ2UudHh0CiAJLSBhIGJyaWVmIHN1bW1hcnkgb2YgaHVnZXRsYnBhZ2Ugc3VwcG9ydCBpbiB0aGUgTGludXgga2VybmVsLgora3NtLnR4dAorCS0gaG93IHRvIHVzZSB0aGUgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcgZmVhdHVyZS4KIGxvY2tpbmcKIAktIGluZm8gb24gaG93IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpcyBkb25lIGluIHRoZSBMaW51eCB2bSBjb2RlLgogbnVtYQpAQCAtMjAsMyArMjIsNSBAQAogCS0gc291cmNlIGNvZGUgZm9yIGEgdG9vbCB0byBnZXQgcmVwb3J0cyBhYm91dCBzbGFicy4KIHNsdWIudHh0CiAJLSBhIHNob3J0IHVzZXJzIGd1aWRlIGZvciBTTFVCLgorbWFwX2h1Z2V0bGIuYworCS0gYW4gZXhhbXBsZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTUFQX0hVR0VUTEIgbW1hcCBmbGFnLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAppbmRleCBlYTg3MTRmLi44MmE3YmQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dApAQCAtMTgsMTMgKzE4LDEzIEBACiBhdXRvbWF0aWNhbGx5IHdoZW4gQ09ORklHX0hVR0VUTEJGUyBpcyBzZWxlY3RlZCkgY29uZmlndXJhdGlvbgogb3B0aW9ucy4KIAotVGhlIGtlcm5lbCBidWlsdCB3aXRoIGh1Z2VwYWdlIHN1cHBvcnQgc2hvdWxkIHNob3cgdGhlIG51bWJlciBvZiBjb25maWd1cmVkCi1odWdlcGFnZXMgaW4gdGhlIHN5c3RlbSBieSBydW5uaW5nIHRoZSAiY2F0IC9wcm9jL21lbWluZm8iIGNvbW1hbmQuCitUaGUga2VybmVsIGJ1aWx0IHdpdGggaHVnZSBwYWdlIHN1cHBvcnQgc2hvdWxkIHNob3cgdGhlIG51bWJlciBvZiBjb25maWd1cmVkCitodWdlIHBhZ2VzIGluIHRoZSBzeXN0ZW0gYnkgcnVubmluZyB0aGUgImNhdCAvcHJvYy9tZW1pbmZvIiBjb21tYW5kLgogCiAvcHJvYy9tZW1pbmZvIGFsc28gcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRvdGFsIG51bWJlciBvZiBodWdldGxiCiBwYWdlcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuICBJdCBhbHNvIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZQogbnVtYmVyIG9mIGZyZWUgaHVnZXRsYiBwYWdlcyBhdCBhbnkgdGltZS4gIEl0IGFsc28gZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBjb25maWd1cmVkIGh1Z2VwYWdlIHNpemUgLSB0aGlzIGlzIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgcHJvcGVyCit0aGUgY29uZmlndXJlZCBodWdlIHBhZ2Ugc2l6ZSAtIHRoaXMgaXMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIHRoZSBwcm9wZXIKIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBhYm92ZSBzeXN0ZW0gY2FsbHMuCiAKIFRoZSBvdXRwdXQgb2YgImNhdCAvcHJvYy9tZW1pbmZvIiB3aWxsIGhhdmUgbGluZXMgbGlrZToKQEAgLTM3LDI1ICszNywyNyBAQAogSHVnZXBhZ2VzaXplOiAgICB6enoga0IKIAogd2hlcmU6Ci1IdWdlUGFnZXNfVG90YWwgaXMgdGhlIHNpemUgb2YgdGhlIHBvb2wgb2YgaHVnZXBhZ2VzLgotSHVnZVBhZ2VzX0ZyZWUgaXMgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgaW4gdGhlIHBvb2wgdGhhdCBhcmUgbm90IHlldAotYWxsb2NhdGVkLgotSHVnZVBhZ2VzX1JzdmQgaXMgc2hvcnQgZm9yICJyZXNlcnZlZCwiIGFuZCBpcyB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlcwotZm9yIHdoaWNoIGEgY29tbWl0bWVudCB0byBhbGxvY2F0ZSBmcm9tIHRoZSBwb29sIGhhcyBiZWVuIG1hZGUsIGJ1dCBubwotYWxsb2NhdGlvbiBoYXMgeWV0IGJlZW4gbWFkZS4gSXQncyB2YWd1ZWx5IGFuYWxvZ291cyB0byBvdmVyY29tbWl0LgotSHVnZVBhZ2VzX1N1cnAgaXMgc2hvcnQgZm9yICJzdXJwbHVzLCIgYW5kIGlzIHRoZSBudW1iZXIgb2YgaHVnZXBhZ2VzIGluCi10aGUgcG9vbCBhYm92ZSB0aGUgdmFsdWUgaW4gL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcy4gVGhlIG1heGltdW0KLW51bWJlciBvZiBzdXJwbHVzIGh1Z2VwYWdlcyBpcyBjb250cm9sbGVkIGJ5Ci0vcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMuCitIdWdlUGFnZXNfVG90YWwgaXMgdGhlIHNpemUgb2YgdGhlIHBvb2wgb2YgaHVnZSBwYWdlcy4KK0h1Z2VQYWdlc19GcmVlICBpcyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgaW4gdGhlIHBvb2wgdGhhdCBhcmUgbm90IHlldAorICAgICAgICAgICAgICAgIGFsbG9jYXRlZC4KK0h1Z2VQYWdlc19Sc3ZkICBpcyBzaG9ydCBmb3IgInJlc2VydmVkLCIgYW5kIGlzIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBmb3IKKyAgICAgICAgICAgICAgICB3aGljaCBhIGNvbW1pdG1lbnQgdG8gYWxsb2NhdGUgZnJvbSB0aGUgcG9vbCBoYXMgYmVlbiBtYWRlLAorICAgICAgICAgICAgICAgIGJ1dCBubyBhbGxvY2F0aW9uIGhhcyB5ZXQgYmVlbiBtYWRlLiAgUmVzZXJ2ZWQgaHVnZSBwYWdlcworICAgICAgICAgICAgICAgIGd1YXJhbnRlZSB0aGF0IGFuIGFwcGxpY2F0aW9uIHdpbGwgYmUgYWJsZSB0byBhbGxvY2F0ZSBhCisgICAgICAgICAgICAgICAgaHVnZSBwYWdlIGZyb20gdGhlIHBvb2wgb2YgaHVnZSBwYWdlcyBhdCBmYXVsdCB0aW1lLgorSHVnZVBhZ2VzX1N1cnAgIGlzIHNob3J0IGZvciAic3VycGx1cywiIGFuZCBpcyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgaW4KKyAgICAgICAgICAgICAgICB0aGUgcG9vbCBhYm92ZSB0aGUgdmFsdWUgaW4gL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcy4gVGhlCisgICAgICAgICAgICAgICAgbWF4aW11bSBudW1iZXIgb2Ygc3VycGx1cyBodWdlIHBhZ2VzIGlzIGNvbnRyb2xsZWQgYnkKKyAgICAgICAgICAgICAgICAvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMuCiAKIC9wcm9jL2ZpbGVzeXN0ZW1zIHNob3VsZCBhbHNvIHNob3cgYSBmaWxlc3lzdGVtIG9mIHR5cGUgImh1Z2V0bGJmcyIgY29uZmlndXJlZAogaW4gdGhlIGtlcm5lbC4KIAogL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGNvbmZpZ3VyZWQgaHVnZXRsYgogcGFnZXMgaW4gdGhlIGtlcm5lbC4gIFN1cGVyIHVzZXIgY2FuIGR5bmFtaWNhbGx5IHJlcXVlc3QgbW9yZSAob3IgZnJlZSBzb21lCi1wcmUtY29uZmlndXJlZCkgaHVnZXBhZ2VzLgorcHJlLWNvbmZpZ3VyZWQpIGh1Z2UgcGFnZXMuCiBUaGUgYWxsb2NhdGlvbiAob3IgZGVhbGxvY2F0aW9uKSBvZiBodWdldGxiIHBhZ2VzIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgYXJlCi1lbm91Z2ggcGh5c2ljYWxseSBjb250aWd1b3VzIGZyZWUgcGFnZXMgaW4gc3lzdGVtIChmcmVlaW5nIG9mIGh1Z2VwYWdlcyBpcworZW5vdWdoIHBoeXNpY2FsbHkgY29udGlndW91cyBmcmVlIHBhZ2VzIGluIHN5c3RlbSAoZnJlZWluZyBvZiBodWdlIHBhZ2VzIGlzCiBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZSBlbm91Z2ggaHVnZXRsYiBwYWdlcyBmcmVlIHRoYXQgY2FuIGJlIHRyYW5zZmVycmVkCiBiYWNrIHRvIHJlZ3VsYXIgbWVtb3J5IHBvb2wpLgogCkBAIC02Nyw0MyArNjksODIgQEAKIHRoZSBodWdlIHBhZ2VzLiAgSXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgcHJlYWxsb2NhdGUKIGVub3VnaCBtZW1vcnkgZm9yIGh1Z2UgcGFnZSBwdXJwb3Nlcy4KIAotVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBkeW5hbWljYWxseSBhbGxvY2F0ZS9kZWFsbG9jYXRlIGh1Z2VwYWdlczoKK1RoZSBhZG1pbmlzdHJhdG9yIGNhbiBwcmVhbGxvY2F0ZSBodWdlIHBhZ2VzIG9uIHRoZSBrZXJuZWwgYm9vdCBjb21tYW5kIGxpbmUgYnkKK3NwZWNpZnlpbmcgdGhlICJodWdlcGFnZXM9TiIgcGFyYW1ldGVyLCB3aGVyZSAnTicgPSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMKK3JlcXVlc3RlZC4gIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgbWV0aG9kIGZvciBwcmVhbGxvY2F0aW5nIGh1Z2UgcGFnZXMgYXMKK21lbW9yeSBoYXMgbm90IHlldCBiZWNvbWUgZnJhZ21lbnRlZC4KKworU29tZSBwbGF0Zm9ybXMgc3VwcG9ydCBtdWx0aXBsZSBodWdlIHBhZ2Ugc2l6ZXMuICBUbyBwcmVhbGxvY2F0ZSBodWdlIHBhZ2VzCitvZiBhIHNwZWNpZmljIHNpemUsIG9uZSBtdXN0IHByZWNlZWQgdGhlIGh1Z2UgcGFnZXMgYm9vdCBjb21tYW5kIHBhcmFtZXRlcnMKK3dpdGggYSBodWdlIHBhZ2Ugc2l6ZSBzZWxlY3Rpb24gcGFyYW1ldGVyICJodWdlcGFnZXN6PTxzaXplPiIuICA8c2l6ZT4gbXVzdAorYmUgc3BlY2lmaWVkIGluIGJ5dGVzIHdpdGggb3B0aW9uYWwgc2NhbGUgc3VmZml4IFtrS21NZ0ddLiAgVGhlIGRlZmF1bHQgaHVnZQorcGFnZSBzaXplIG1heSBiZSBzZWxlY3RlZCB3aXRoIHRoZSAiZGVmYXVsdF9odWdlcGFnZXN6PTxzaXplPiIgYm9vdCBwYXJhbWV0ZXIuCisKKy9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMgaW5kaWNhdGVzIHRoZSBjdXJyZW50IG51bWJlciBvZiBjb25maWd1cmVkIFtkZWZhdWx0CitzaXplXSBodWdldGxiIHBhZ2VzIGluIHRoZSBrZXJuZWwuICBTdXBlciB1c2VyIGNhbiBkeW5hbWljYWxseSByZXF1ZXN0IG1vcmUKKyhvciBmcmVlIHNvbWUgcHJlLWNvbmZpZ3VyZWQpIGh1Z2UgcGFnZXMuCisKK1VzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUvZGVhbGxvY2F0ZSBkZWZhdWx0IHNpemVkCitodWdlIHBhZ2VzOgogCiAJZWNobyAyMCA+IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMKIAotVGhpcyBjb21tYW5kIHdpbGwgdHJ5IHRvIGNvbmZpZ3VyZSAyMCBodWdlcGFnZXMgaW4gdGhlIHN5c3RlbS4gIFRoZSBzdWNjZXNzCi1vciBmYWlsdXJlIG9mIGFsbG9jYXRpb24gZGVwZW5kcyBvbiB0aGUgYW1vdW50IG9mIHBoeXNpY2FsbHkgY29udGlndW91cwotbWVtb3J5IHRoYXQgaXMgcHJlc2V0IGluIHN5c3RlbSBhdCB0aGlzIHRpbWUuICBTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQKLXRvIHB1dCB0aGlzIGNvbW1hbmQgaW4gb25lIG9mIHRoZSBsb2NhbCByYyBpbml0IGZpbGVzLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUKLWtlcm5lbCB0byByZXF1ZXN0IGh1Z2UgcGFnZXMgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2VzcyAod2hlbiB0aGUgcG9zc2liaWxpdHkKLW9mIGdldHRpbmcgcGh5c2ljYWwgY29udGlndW91cyBwYWdlcyBpcyBzdGlsbCB2ZXJ5IGhpZ2gpLiBJbiBlaXRoZXIKLWNhc2UsIGFkbWluaXN0cmF0b3JzIHdpbGwgd2FudCB0byB2ZXJpZnkgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgYWN0dWFsbHkKLWFsbG9jYXRlZCBieSBjaGVja2luZyB0aGUgc3lzY3RsIG9yIG1lbWluZm8uCitUaGlzIGNvbW1hbmQgd2lsbCB0cnkgdG8gY29uZmlndXJlIDIwIGRlZmF1bHQgc2l6ZWQgaHVnZSBwYWdlcyBpbiB0aGUgc3lzdGVtLgorT24gYSBOVU1BIHBsYXRmb3JtLCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBkaXN0cmlidXRlIHRoZSBodWdlIHBhZ2UgcG9vbAorb3ZlciB0aGUgYWxsIG9uLWxpbmUgbm9kZXMuICBUaGVzZSBodWdlIHBhZ2VzLCBhbGxvY2F0ZWQgd2hlbiBucl9odWdlcGFnZXMKK2lzIGluY3JlYXNlZCwgYXJlIGNhbGxlZCAicGVyc2lzdGVudCBodWdlIHBhZ2VzIi4KIAotL3Byb2Mvc3lzL3ZtL25yX292ZXJjb21taXRfaHVnZXBhZ2VzIGluZGljYXRlcyBob3cgbGFyZ2UgdGhlIHBvb2wgb2YKLWh1Z2VwYWdlcyBjYW4gZ3JvdywgaWYgbW9yZSBodWdlcGFnZXMgdGhhbiAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGFyZQotcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9ucy4gZWNobydpbmcgYW55IG5vbi16ZXJvIHZhbHVlIGludG8gdGhpcyBmaWxlCi1pbmRpY2F0ZXMgdGhhdCB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gaXMgYWxsb3dlZCB0byB0cnkgdG8gb2J0YWluCi1odWdlcGFnZXMgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBpZiB0aGUgbm9ybWFsIHBvb2wgaXMgZXhoYXVzdGVkLiBBcwotdGhlc2Ugc3VycGx1cyBodWdlcGFnZXMgZ28gb3V0IG9mIHVzZSwgdGhleSBhcmUgZnJlZWQgYmFjayB0byB0aGUgYnVkZHkKK1RoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgaHVnZSBwYWdlIGFsbG9jYXRpb24gZGVwZW5kcyBvbiB0aGUgYW1vdW50IG9mCitwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHRoYXQgaXMgcHJlc2V0IGluIHN5c3RlbSBhdCB0aGUgdGltZSBvZiB0aGUKK2FsbG9jYXRpb24gYXR0ZW1wdC4gIElmIHRoZSBrZXJuZWwgaXMgdW5hYmxlIHRvIGFsbG9jYXRlIGh1Z2UgcGFnZXMgZnJvbQorc29tZSBub2RlcyBpbiBhIE5VTUEgc3lzdGVtLCBpdCB3aWxsIGF0dGVtcHQgdG8gbWFrZSB1cCB0aGUgZGlmZmVyZW5jZSBieQorYWxsb2NhdGluZyBleHRyYSBwYWdlcyBvbiBvdGhlciBub2RlcyB3aXRoIHN1ZmZpY2llbnQgYXZhaWxhYmxlIGNvbnRpZ3VvdXMKK21lbW9yeSwgaWYgYW55LgorCitTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQgdG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjIGluaXQKK2ZpbGVzLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUga2VybmVsIHRvIHJlcXVlc3QgaHVnZSBwYWdlcyBlYXJseSBpbiB0aGUgYm9vdAorcHJvY2VzcyB3aGVuIHRoZSBwb3NzaWJpbGl0eSBvZiBnZXR0aW5nIHBoeXNpY2FsIGNvbnRpZ3VvdXMgcGFnZXMgaXMgc3RpbGwKK3ZlcnkgaGlnaC4gIEFkbWluaXN0cmF0b3JzIGNhbiB2ZXJpZnkgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGFjdHVhbGx5CithbGxvY2F0ZWQgYnkgY2hlY2tpbmcgdGhlIHN5c2N0bCBvciBtZW1pbmZvLiAgVG8gY2hlY2sgdGhlIHBlciBub2RlCitkaXN0cmlidXRpb24gb2YgaHVnZSBwYWdlcyBpbiBhIE5VTUEgc3lzdGVtLCB1c2U6CisKKwljYXQgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL21lbWluZm8gfCBmZ3JlcCBIdWdlCisKKy9wcm9jL3N5cy92bS9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyBzcGVjaWZpZXMgaG93IGxhcmdlIHRoZSBwb29sIG9mCitodWdlIHBhZ2VzIGNhbiBncm93LCBpZiBtb3JlIGh1Z2UgcGFnZXMgdGhhbiAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGFyZQorcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9ucy4gIFdyaXRpbmcgYW55IG5vbi16ZXJvIHZhbHVlIGludG8gdGhpcyBmaWxlCitpbmRpY2F0ZXMgdGhhdCB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gaXMgYWxsb3dlZCB0byB0cnkgdG8gb2J0YWluICJzdXJwbHVzIgoraHVnZSBwYWdlcyBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoZW4gdGhlIG5vcm1hbCBwb29sIGlzIGV4aGF1c3RlZC4gQXMKK3RoZXNlIHN1cnBsdXMgaHVnZSBwYWdlcyBnbyBvdXQgb2YgdXNlLCB0aGV5IGFyZSBmcmVlZCBiYWNrIHRvIHRoZSBidWRkeQogYWxsb2NhdG9yLgogCitXaGVuIGluY3JlYXNpbmcgdGhlIGh1Z2UgcGFnZSBwb29sIHNpemUgdmlhIG5yX2h1Z2VwYWdlcywgYW55IHN1cnBsdXMKK3BhZ2VzIHdpbGwgZmlyc3QgYmUgcHJvbW90ZWQgdG8gcGVyc2lzdGVudCBodWdlIHBhZ2VzLiAgVGhlbiwgYWRkaXRpb25hbAoraHVnZSBwYWdlcyB3aWxsIGJlIGFsbG9jYXRlZCwgaWYgbmVjZXNzYXJ5IGFuZCBpZiBwb3NzaWJsZSwgdG8gZnVsZmlsbAordGhlIG5ldyBodWdlIHBhZ2UgcG9vbCBzaXplLgorCitUaGUgYWRtaW5pc3RyYXRvciBtYXkgc2hyaW5rIHRoZSBwb29sIG9mIHByZWFsbG9jYXRlZCBodWdlIHBhZ2VzIGZvcgordGhlIGRlZmF1bHQgaHVnZSBwYWdlIHNpemUgYnkgc2V0dGluZyB0aGUgbnJfaHVnZXBhZ2VzIHN5c2N0bCB0byBhCitzbWFsbGVyIHZhbHVlLiAgVGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgZnJlZWluZyBvZiBodWdlIHBhZ2VzCithY3Jvc3MgYWxsIG9uLWxpbmUgbm9kZXMuICBBbnkgZnJlZSBodWdlIHBhZ2VzIG9uIHRoZSBzZWxlY3RlZCBub2RlcyB3aWxsCitiZSBmcmVlZCBiYWNrIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuCisKIENhdmVhdDogU2hyaW5raW5nIHRoZSBwb29sIHZpYSBucl9odWdlcGFnZXMgc3VjaCB0aGF0IGl0IGJlY29tZXMgbGVzcwotdGhhbiB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlcyBpbiB1c2Ugd2lsbCBjb252ZXJ0IHRoZSBiYWxhbmNlIHRvIHN1cnBsdXMKK3RoYW4gdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGluIHVzZSB3aWxsIGNvbnZlcnQgdGhlIGJhbGFuY2UgdG8gc3VycGx1cwogaHVnZSBwYWdlcyBldmVuIGlmIGl0IHdvdWxkIGV4Y2VlZCB0aGUgb3ZlcmNvbW1pdCB2YWx1ZS4gIEFzIGxvbmcgYXMKIHRoaXMgY29uZGl0aW9uIGhvbGRzLCBob3dldmVyLCBubyBtb3JlIHN1cnBsdXMgaHVnZSBwYWdlcyB3aWxsIGJlCiBhbGxvd2VkIG9uIHRoZSBzeXN0ZW0gdW50aWwgb25lIG9mIHRoZSB0d28gc3lzY3RscyBhcmUgaW5jcmVhc2VkCiBzdWZmaWNpZW50bHksIG9yIHRoZSBzdXJwbHVzIGh1Z2UgcGFnZXMgZ28gb3V0IG9mIHVzZSBhbmQgYXJlIGZyZWVkLgogCi1XaXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIGh1Z2VwYWdlIHBvb2xzIGF0IHJ1bi10aW1lIGF2YWlsYWJsZSwgbXVjaCBvZgotdGhlIGh1Z2VwYWdlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaGFzIGJlZW4gZHVwbGljYXRlZCBpbiBzeXNmcy4gVGhlIGFib3ZlCi1pbmZvcm1hdGlvbiBhcHBsaWVzIHRvIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgKHdoaWNoIHdpbGwgYmUKLWNvbnRyb2xsZWQgYnkgdGhlIHByb2MgaW50ZXJmYWNlcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLiBUaGUgcm9vdAotaHVnZXBhZ2UgY29udHJvbCBkaXJlY3RvcnkgaXMKK1dpdGggc3VwcG9ydCBmb3IgbXVsdGlwbGUgaHVnZSBwYWdlIHBvb2xzIGF0IHJ1bi10aW1lIGF2YWlsYWJsZSwgbXVjaCBvZgordGhlIGh1Z2UgcGFnZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGhhcyBiZWVuIGR1cGxpY2F0ZWQgaW4gc3lzZnMuIFRoZSBhYm92ZQoraW5mb3JtYXRpb24gYXBwbGllcyB0byB0aGUgZGVmYXVsdCBodWdlIHBhZ2Ugc2l6ZSB3aGljaCB3aWxsIGJlCitjb250cm9sbGVkIGJ5IHRoZSAvcHJvYyBpbnRlcmZhY2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlIHJvb3QKK2h1Z2UgcGFnZSBjb250cm9sIGRpcmVjdG9yeSBpbiBzeXNmcyBpczoKIAogCS9zeXMva2VybmVsL21tL2h1Z2VwYWdlcwogCi1Gb3IgZWFjaCBodWdlcGFnZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWwsIGEgc3ViZGlyZWN0b3J5CitGb3IgZWFjaCBodWdlIHBhZ2Ugc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIHJ1bm5pbmcga2VybmVsLCBhIHN1YmRpcmVjdG9yeQogd2lsbCBleGlzdCwgb2YgdGhlIGZvcm0KIAogCWh1Z2VwYWdlcy0ke3NpemV9a0IKQEAgLTExNiw5ICsxNTcsOSBAQAogCXJlc3ZfaHVnZXBhZ2VzCiAJc3VycGx1c19odWdlcGFnZXMKIAotd2hpY2ggZnVuY3Rpb24gYXMgZGVzY3JpYmVkIGFib3ZlIGZvciB0aGUgZGVmYXVsdCBodWdlcGFnZS1zaXplZCBjYXNlLgord2hpY2ggZnVuY3Rpb24gYXMgZGVzY3JpYmVkIGFib3ZlIGZvciB0aGUgZGVmYXVsdCBodWdlIHBhZ2Utc2l6ZWQgY2FzZS4KIAotSWYgdGhlIHVzZXIgYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byByZXF1ZXN0IGh1Z2VwYWdlcyB1c2luZyBtbWFwIHN5c3RlbQorSWYgdGhlIHVzZXIgYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byByZXF1ZXN0IGh1Z2UgcGFnZXMgdXNpbmcgbW1hcCBzeXN0ZW0KIGNhbGwsIHRoZW4gaXQgaXMgcmVxdWlyZWQgdGhhdCBzeXN0ZW0gYWRtaW5pc3RyYXRvciBtb3VudCBhIGZpbGUgc3lzdGVtIG9mCiB0eXBlIGh1Z2V0bGJmczoKIApAQCAtMTI3LDcgKzE2OCw3IEBACiAJbm9uZSAvbW50L2h1Z2UKIAogVGhpcyBjb21tYW5kIG1vdW50cyBhIChwc2V1ZG8pIGZpbGVzeXN0ZW0gb2YgdHlwZSBodWdldGxiZnMgb24gdGhlIGRpcmVjdG9yeQotL21udC9odWdlLiAgQW55IGZpbGVzIGNyZWF0ZWQgb24gL21udC9odWdlIHVzZXMgaHVnZXBhZ2VzLiAgVGhlIHVpZCBhbmQgZ2lkCisvbW50L2h1Z2UuICBBbnkgZmlsZXMgY3JlYXRlZCBvbiAvbW50L2h1Z2UgdXNlcyBodWdlIHBhZ2VzLiAgVGhlIHVpZCBhbmQgZ2lkCiBvcHRpb25zIHNldHMgdGhlIG93bmVyIGFuZCBncm91cCBvZiB0aGUgcm9vdCBvZiB0aGUgZmlsZSBzeXN0ZW0uICBCeSBkZWZhdWx0CiB0aGUgdWlkIGFuZCBnaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyBhcmUgdGFrZW4uICBUaGUgbW9kZSBvcHRpb24gc2V0cyB0aGUKIG1vZGUgb2Ygcm9vdCBvZiBmaWxlIHN5c3RlbSB0byB2YWx1ZSAmIDA3NzcuICBUaGlzIHZhbHVlIGlzIGdpdmVuIGluIG9jdGFsLgpAQCAtMTQ2LDI0ICsxODcsMjYgQEAKIHVzZWQgdG8gY2hhbmdlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb24gaHVnZXRsYmZzLgogCiBBbHNvLCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IG5vIHN1Y2ggbW91bnQgY29tbWFuZCBpcyByZXF1aXJlZCBpZiB0aGUKLWFwcGxpY2F0aW9ucyBhcmUgZ29pbmcgdG8gdXNlIG9ubHkgc2htYXQvc2htZ2V0IHN5c3RlbSBjYWxscy4gIFVzZXJzIHdobwotd2lzaCB0byB1c2UgaHVnZXRsYiBwYWdlIHZpYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgc2hvdWxkIGJlIGEgbWVtYmVyIG9mCi1hIHN1cHBsZW1lbnRhcnkgZ3JvdXAgYW5kIHN5c3RlbSBhZG1pbiBuZWVkcyB0byBjb25maWd1cmUgdGhhdCBnaWQgaW50bwotL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwLiAgSXQgaXMgcG9zc2libGUgZm9yIHNhbWUgb3IgZGlmZmVyZW50Ci1hcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKiBjYWxscywgdGhvdWdoIHRoZQotbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwIGNhbGxzLgorYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byB1c2Ugb25seSBzaG1hdC9zaG1nZXQgc3lzdGVtIGNhbGxzIG9yIG1tYXAgd2l0aAorTUFQX0hVR0VUTEIuICBVc2VycyB3aG8gd2lzaCB0byB1c2UgaHVnZXRsYiBwYWdlIHZpYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKK3Nob3VsZCBiZSBhIG1lbWJlciBvZiBhIHN1cHBsZW1lbnRhcnkgZ3JvdXAgYW5kIHN5c3RlbSBhZG1pbiBuZWVkcyB0bworY29uZmlndXJlIHRoYXQgZ2lkIGludG8gL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwLiAgSXQgaXMgcG9zc2libGUgZm9yCitzYW1lIG9yIGRpZmZlcmVudCBhcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKgorY2FsbHMsIHRob3VnaCB0aGUgbW91bnQgb2YgZmlsZXN5c3RlbSB3aWxsIGJlIHJlcXVpcmVkIGZvciB1c2luZyBtbWFwIGNhbGxzCit3aXRob3V0IE1BUF9IVUdFVExCLiAgRm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBtbWFwIHdpdGggTUFQX0hVR0VUTEIgc2VlCittYXBfaHVnZXRsYi5jLgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIC8qCi0gKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2VwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgU3lzIFYgc2hhcmVkCisgKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2UgcGFnZSBtZW1vcnkgaW4gYSB1c2VyIGFwcGxpY2F0aW9uIHVzaW5nIFN5cyBWIHNoYXJlZAogICogbWVtb3J5IHN5c3RlbSBjYWxscy4gIEluIHRoaXMgZXhhbXBsZSB0aGUgYXBwIGlzIHJlcXVlc3RpbmcgMjU2TUIgb2YKICAqIG1lbW9yeSB0aGF0IGlzIGJhY2tlZCBieSBodWdlIHBhZ2VzLiAgVGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhlIGZsYWcKICAqIFNITV9IVUdFVExCIGluIHRoZSBzaG1nZXQgc3lzdGVtIGNhbGwgdG8gaW5mb3JtIHRoZSBrZXJuZWwgdGhhdCBpdCBpcwotICogcmVxdWVzdGluZyBodWdlcGFnZXMuCisgKiByZXF1ZXN0aW5nIGh1Z2UgcGFnZXMuCiAgKgogICogRm9yIHRoZSBpYTY0IGFyY2hpdGVjdHVyZSwgdGhlIExpbnV4IGtlcm5lbCByZXNlcnZlcyBSZWdpb24gbnVtYmVyIDQgZm9yCi0gKiBodWdlcGFnZXMuICBUaGF0IG1lYW5zIHRoZSBhZGRyZXNzZXMgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIG5lZWQKKyAqIGh1Z2UgcGFnZXMuICBUaGF0IG1lYW5zIHRoZSBhZGRyZXNzZXMgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIG5lZWQKICAqIHRvIGJlIHNwZWNpZmllZC4gIFNwZWNpZnlpbmcgYSBmaXhlZCBhZGRyZXNzIGlzIG5vdCByZXF1aXJlZCBvbiBwcGM2NCwKICAqIGkzODYgb3IgeDg2XzY0LgogICoKQEAgLTI1MiwxNCArMjk1LDE0IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIC8qCi0gKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2VwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIG1tYXAKKyAqIEV4YW1wbGUgb2YgdXNpbmcgaHVnZSBwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIG1tYXAKICAqIHN5c3RlbSBjYWxsLiAgQmVmb3JlIHJ1bm5pbmcgdGhpcyBhcHBsaWNhdGlvbiwgbWFrZSBzdXJlIHRoYXQgdGhlCiAgKiBhZG1pbmlzdHJhdG9yIGhhcyBtb3VudGVkIHRoZSBodWdldGxiZnMgZmlsZXN5c3RlbSAob24gc29tZSBkaXJlY3RvcnkKICAqIGxpa2UgL21udCkgdXNpbmcgdGhlIGNvbW1hbmQgbW91bnQgLXQgaHVnZXRsYmZzIG5vZGV2IC9tbnQuIEluIHRoaXMKICAqIGV4YW1wbGUsIHRoZSBhcHAgaXMgcmVxdWVzdGluZyBtZW1vcnkgb2Ygc2l6ZSAyNTZNQiB0aGF0IGlzIGJhY2tlZCBieQogICogaHVnZSBwYWdlcy4KICAqCi0gKiBGb3IgaWE2NCBhcmNoaXRlY3R1cmUsIExpbnV4IGtlcm5lbCByZXNlcnZlcyBSZWdpb24gbnVtYmVyIDQgZm9yIGh1Z2VwYWdlcy4KKyAqIEZvciBpYTY0IGFyY2hpdGVjdHVyZSwgTGludXgga2VybmVsIHJlc2VydmVzIFJlZ2lvbiBudW1iZXIgNCBmb3IgaHVnZSBwYWdlcy4KICAqIFRoYXQgbWVhbnMgdGhlIGFkZHJlc3NlcyBzdGFydGluZyB3aXRoIDB4ODAwMDAwLi4uIHdpbGwgbmVlZCB0byBiZQogICogc3BlY2lmaWVkLiAgU3BlY2lmeWluZyBhIGZpeGVkIGFkZHJlc3MgaXMgbm90IHJlcXVpcmVkIG9uIHBwYzY0LCBpMzg2CiAgKiBvciB4ODZfNjQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhMjJmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dApAQCAtMCwwICsxLDg5IEBACitIb3cgdG8gdXNlIHRoZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZyBmZWF0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tTTSBpcyBhIG1lbW9yeS1zYXZpbmcgZGUtZHVwbGljYXRpb24gZmVhdHVyZSwgZW5hYmxlZCBieSBDT05GSUdfS1NNPXksCithZGRlZCB0byB0aGUgTGludXgga2VybmVsIGluIDIuNi4zMi4gIFNlZSBtbS9rc20uYyBmb3IgaXRzIGltcGxlbWVudGF0aW9uLAorYW5kIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzMwNjcwNC8gYW5kIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzMzMDU4OS8KKworVGhlIEtTTSBkYWVtb24ga3NtZCBwZXJpb2RpY2FsbHkgc2NhbnMgdGhvc2UgYXJlYXMgb2YgdXNlciBtZW1vcnkgd2hpY2gKK2hhdmUgYmVlbiByZWdpc3RlcmVkIHdpdGggaXQsIGxvb2tpbmcgZm9yIHBhZ2VzIG9mIGlkZW50aWNhbCBjb250ZW50IHdoaWNoCitjYW4gYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgd3JpdGUtcHJvdGVjdGVkIHBhZ2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkKK2NvcGllZCBpZiBhIHByb2Nlc3MgbGF0ZXIgd2FudHMgdG8gdXBkYXRlIGl0cyBjb250ZW50KS4KKworS1NNIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBmb3IgdXNlIHdpdGggS1ZNICh3aGVyZSBpdCB3YXMga25vd24gYXMKK0tlcm5lbCBTaGFyZWQgTWVtb3J5KSwgdG8gZml0IG1vcmUgdmlydHVhbCBtYWNoaW5lcyBpbnRvIHBoeXNpY2FsIG1lbW9yeSwKK2J5IHNoYXJpbmcgdGhlIGRhdGEgY29tbW9uIGJldHdlZW4gdGhlbS4gIEJ1dCBpdCBjYW4gYmUgdXNlZnVsIHRvIGFueQorYXBwbGljYXRpb24gd2hpY2ggZ2VuZXJhdGVzIG1hbnkgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGRhdGEuCisKK0tTTSBvbmx5IG1lcmdlcyBhbm9ueW1vdXMgKHByaXZhdGUpIHBhZ2VzLCBuZXZlciBwYWdlY2FjaGUgKGZpbGUpIHBhZ2VzLgorS1NNJ3MgbWVyZ2VkIHBhZ2VzIGFyZSBhdCBwcmVzZW50IGxvY2tlZCBpbnRvIGtlcm5lbCBtZW1vcnkgZm9yIGFzIGxvbmcKK2FzIHRoZXkgYXJlIHNoYXJlZDogc28gY2Fubm90IGJlIHN3YXBwZWQgb3V0IGxpa2UgdGhlIHVzZXIgcGFnZXMgdGhleQorcmVwbGFjZSAoYnV0IHN3YXBwaW5nIEtTTSBwYWdlcyBzaG91bGQgZm9sbG93IHNvb24gaW4gYSBsYXRlciByZWxlYXNlKS4KKworS1NNIG9ubHkgb3BlcmF0ZXMgb24gdGhvc2UgYXJlYXMgb2YgYWRkcmVzcyBzcGFjZSB3aGljaCBhbiBhcHBsaWNhdGlvbgoraGFzIGFkdmlzZWQgdG8gYmUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcsIGJ5IHVzaW5nIHRoZSBtYWR2aXNlKDIpCitzeXN0ZW0gY2FsbDogaW50IG1hZHZpc2UoYWRkciwgbGVuZ3RoLCBNQURWX01FUkdFQUJMRSkuCisKK1RoZSBhcHAgbWF5IGNhbGwgaW50IG1hZHZpc2UoYWRkciwgbGVuZ3RoLCBNQURWX1VOTUVSR0VBQkxFKSB0byBjYW5jZWwKK3RoYXQgYWR2aWNlIGFuZCByZXN0b3JlIHVuc2hhcmVkIHBhZ2VzOiB3aGVyZXVwb24gS1NNIHVubWVyZ2VzIHdoYXRldmVyCitpdCBtZXJnZWQgaW4gdGhhdCByYW5nZS4gIE5vdGU6IHRoaXMgdW5tZXJnaW5nIGNhbGwgbWF5IHN1ZGRlbmx5IHJlcXVpcmUKK21vcmUgbWVtb3J5IHRoYW4gaXMgYXZhaWxhYmxlIC0gcG9zc2libHkgZmFpbGluZyB3aXRoIEVBR0FJTiwgYnV0IG1vcmUKK3Byb2JhYmx5IGFyb3VzaW5nIHRoZSBPdXQtT2YtTWVtb3J5IGtpbGxlci4KKworSWYgS1NNIGlzIG5vdCBjb25maWd1cmVkIGludG8gdGhlIHJ1bm5pbmcga2VybmVsLCBtYWR2aXNlIE1BRFZfTUVSR0VBQkxFCithbmQgTUFEVl9VTk1FUkdFQUJMRSBzaW1wbHkgZmFpbCB3aXRoIEVJTlZBTC4gIElmIHRoZSBydW5uaW5nIGtlcm5lbCB3YXMKK2J1aWx0IHdpdGggQ09ORklHX0tTTT15LCB0aG9zZSBjYWxscyB3aWxsIG5vcm1hbGx5IHN1Y2NlZWQ6IGV2ZW4gaWYgdGhlCit0aGUgS1NNIGRhZW1vbiBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcsIE1BRFZfTUVSR0VBQkxFIHN0aWxsIHJlZ2lzdGVycwordGhlIHJhbmdlIGZvciB3aGVuZXZlciB0aGUgS1NNIGRhZW1vbiBpcyBzdGFydGVkOyBldmVuIGlmIHRoZSByYW5nZQorY2Fubm90IGNvbnRhaW4gYW55IHBhZ2VzIHdoaWNoIEtTTSBjb3VsZCBhY3R1YWxseSBtZXJnZTsgZXZlbiBpZgorTUFEVl9VTk1FUkdFQUJMRSBpcyBhcHBsaWVkIHRvIGEgcmFuZ2Ugd2hpY2ggd2FzIG5ldmVyIE1BRFZfTUVSR0VBQkxFLgorCitMaWtlIG90aGVyIG1hZHZpc2UgY2FsbHMsIHRoZXkgYXJlIGludGVuZGVkIGZvciB1c2Ugb24gbWFwcGVkIGFyZWFzIG9mCit0aGUgdXNlciBhZGRyZXNzIHNwYWNlOiB0aGV5IHdpbGwgcmVwb3J0IEVOT01FTSBpZiB0aGUgc3BlY2lmaWVkIHJhbmdlCitpbmNsdWRlcyB1bm1hcHBlZCBnYXBzICh0aG91Z2ggd29ya2luZyBvbiB0aGUgaW50ZXJ2ZW5pbmcgbWFwcGVkIGFyZWFzKSwKK2FuZCBtaWdodCBmYWlsIHdpdGggRUFHQUlOIGlmIG5vdCBlbm91Z2ggbWVtb3J5IGZvciBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorCitBcHBsaWNhdGlvbnMgc2hvdWxkIGJlIGNvbnNpZGVyYXRlIGluIHRoZWlyIHVzZSBvZiBNQURWX01FUkdFQUJMRSwKK3Jlc3RyaWN0aW5nIGl0cyB1c2UgdG8gYXJlYXMgbGlrZWx5IHRvIGJlbmVmaXQuICBLU00ncyBzY2FucyBtYXkgdXNlCithIGxvdCBvZiBwcm9jZXNzaW5nIHBvd2VyLCBhbmQgaXRzIGtlcm5lbC1yZXNpZGVudCBwYWdlcyBhcmUgYSBsaW1pdGVkCityZXNvdXJjZS4gIFNvbWUgaW5zdGFsbGF0aW9ucyB3aWxsIGRpc2FibGUgS1NNIGZvciB0aGVzZSByZWFzb25zLgorCitUaGUgS1NNIGRhZW1vbiBpcyBjb250cm9sbGVkIGJ5IHN5c2ZzIGZpbGVzIGluIC9zeXMva2VybmVsL21tL2tzbS8sCityZWFkYWJsZSBieSBhbGwgYnV0IHdyaXRhYmxlIG9ubHkgYnkgcm9vdDoKKworbWF4X2tlcm5lbF9wYWdlcyAtIHNldCB0byBtYXhpbXVtIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdGhhdCBLU00gbWF5IHVzZQorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAwMCA+IC9zeXMva2VybmVsL21tL2tzbS9tYXhfa2VybmVsX3BhZ2VzIgorICAgICAgICAgICAgICAgICAgIFZhbHVlIDAgaW1wb3NlcyBubyBsaW1pdCBvbiB0aGUga2VybmVsIHBhZ2VzIEtTTSBtYXkgdXNlOworICAgICAgICAgICAgICAgICAgIGJ1dCBub3RlIHRoYXQgYW55IHByb2Nlc3MgdXNpbmcgTUFEVl9NRVJHRUFCTEUgY2FuIGNhdXNlCisgICAgICAgICAgICAgICAgICAgS1NNIHRvIGFsbG9jYXRlIHRoZXNlIHBhZ2VzLCB1bnN3YXBwYWJsZSB1bnRpbCBpdCBleGl0cy4KKyAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAyMDAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisKK3BhZ2VzX3RvX3NjYW4gICAgLSBob3cgbWFueSBwcmVzZW50IHBhZ2VzIHRvIHNjYW4gYmVmb3JlIGtzbWQgZ29lcyB0byBzbGVlcAorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAwID4gL3N5cy9rZXJuZWwvbW0va3NtL3BhZ2VzX3RvX3NjYW4iCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMjAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisKK3NsZWVwX21pbGxpc2VjcyAgLSBob3cgbWFueSBtaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmVmb3JlIG5leHQgc2NhbgorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAgPiAvc3lzL2tlcm5lbC9tbS9rc20vc2xlZXBfbWlsbGlzZWNzIgorICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDIwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisKK3J1biAgICAgICAgICAgICAgLSBzZXQgMCB0byBzdG9wIGtzbWQgZnJvbSBydW5uaW5nIGJ1dCBrZWVwIG1lcmdlZCBwYWdlcywKKyAgICAgICAgICAgICAgICAgICBzZXQgMSB0byBydW4ga3NtZCBlLmcuICJlY2hvIDEgPiAvc3lzL2tlcm5lbC9tbS9rc20vcnVuIiwKKyAgICAgICAgICAgICAgICAgICBzZXQgMiB0byBzdG9wIGtzbWQgYW5kIHVubWVyZ2UgYWxsIHBhZ2VzIGN1cnJlbnRseSBtZXJnZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGxlYXZlIG1lcmdlYWJsZSBhcmVhcyByZWdpc3RlcmVkIGZvciBuZXh0IHJ1bgorICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDEgKGZvciBpbW1lZGlhdGUgdXNlIGJ5IGFwcHMgd2hpY2ggcmVnaXN0ZXIpCisKK1RoZSBlZmZlY3RpdmVuZXNzIG9mIEtTTSBhbmQgTUFEVl9NRVJHRUFCTEUgaXMgc2hvd24gaW4gL3N5cy9rZXJuZWwvbW0va3NtLzoKKworcGFnZXNfc2hhcmVkICAgICAtIGhvdyBtYW55IHNoYXJlZCB1bnN3YXBwYWJsZSBrZXJuZWwgcGFnZXMgS1NNIGlzIHVzaW5nCitwYWdlc19zaGFyaW5nICAgIC0gaG93IG1hbnkgbW9yZSBzaXRlcyBhcmUgc2hhcmluZyB0aGVtIGkuZS4gaG93IG11Y2ggc2F2ZWQKK3BhZ2VzX3Vuc2hhcmVkICAgLSBob3cgbWFueSBwYWdlcyB1bmlxdWUgYnV0IHJlcGVhdGVkbHkgY2hlY2tlZCBmb3IgbWVyZ2luZworcGFnZXNfdm9sYXRpbGUgICAtIGhvdyBtYW55IHBhZ2VzIGNoYW5naW5nIHRvbyBmYXN0IHRvIGJlIHBsYWNlZCBpbiBhIHRyZWUKK2Z1bGxfc2NhbnMgICAgICAgLSBob3cgbWFueSB0aW1lcyBhbGwgbWVyZ2VhYmxlIGFyZWFzIGhhdmUgYmVlbiBzY2FubmVkCisKK0EgaGlnaCByYXRpbyBvZiBwYWdlc19zaGFyaW5nIHRvIHBhZ2VzX3NoYXJlZCBpbmRpY2F0ZXMgZ29vZCBzaGFyaW5nLCBidXQKK2EgaGlnaCByYXRpbyBvZiBwYWdlc191bnNoYXJlZCB0byBwYWdlc19zaGFyaW5nIGluZGljYXRlcyB3YXN0ZWQgZWZmb3J0LgorcGFnZXNfdm9sYXRpbGUgZW1icmFjZXMgc2V2ZXJhbCBkaWZmZXJlbnQga2luZHMgb2YgYWN0aXZpdHksIGJ1dCBhIGhpZ2gKK3Byb3BvcnRpb24gdGhlcmUgd291bGQgYWxzbyBpbmRpY2F0ZSBwb29yIHVzZSBvZiBtYWR2aXNlIE1BRFZfTUVSR0VBQkxFLgorCitJemlrIEVpZHVzLAorSHVnaCBEaWNraW5zLCAzMCBKdWx5IDIwMDkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vbWFwX2h1Z2V0bGIuYyBiL0RvY3VtZW50YXRpb24vdm0vbWFwX2h1Z2V0bGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJkYWUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9tYXBfaHVnZXRsYi5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBFeGFtcGxlIG9mIHVzaW5nIGh1Z2VwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIG1tYXAKKyAqIHN5c3RlbSBjYWxsIHdpdGggTUFQX0hVR0VUTEIgZmxhZy4gIEJlZm9yZSBydW5uaW5nIHRoaXMgcHJvZ3JhbSBtYWtlCisgKiBzdXJlIHRoZSBhZG1pbmlzdHJhdG9yIGhhcyBhbGxvY2F0ZWQgZW5vdWdoIGRlZmF1bHQgc2l6ZWQgaHVnZSBwYWdlcworICogdG8gY292ZXIgdGhlIDI1NiBNQiBhbGxvY2F0aW9uLgorICoKKyAqIEZvciBpYTY0IGFyY2hpdGVjdHVyZSwgTGludXgga2VybmVsIHJlc2VydmVzIFJlZ2lvbiBudW1iZXIgNCBmb3IgaHVnZXBhZ2VzLgorICogVGhhdCBtZWFucyB0aGUgYWRkcmVzc2VzIHN0YXJ0aW5nIHdpdGggMHg4MDAwMDAuLi4gd2lsbCBuZWVkIHRvIGJlCisgKiBzcGVjaWZpZWQuICBTcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQgb24gcHBjNjQsIGkzODYKKyAqIG9yIHg4Nl82NC4KKyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQorI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKQorCisjaWZuZGVmIE1BUF9IVUdFVExCCisjZGVmaW5lIE1BUF9IVUdFVExCIDB4NDAKKyNlbmRpZgorCisvKiBPbmx5IGlhNjQgcmVxdWlyZXMgdGhpcyAqLworI2lmZGVmIF9faWE2NF9fCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHg4MDAwMDAwMDAwMDAwMDAwVUwpCisjZGVmaW5lIEZMQUdTIChNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiB8IE1BUF9GSVhFRCkKKyNlbHNlCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHgwVUwpCisjZGVmaW5lIEZMQUdTIChNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQikKKyNlbmRpZgorCit2b2lkIGNoZWNrX2J5dGVzKGNoYXIgKmFkZHIpCit7CisJcHJpbnRmKCJGaXJzdCBoZXggaXMgJXhcbiIsICooKHVuc2lnbmVkIGludCAqKWFkZHIpKTsKK30KKwordm9pZCB3cml0ZV9ieXRlcyhjaGFyICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKKwkJKihhZGRyICsgaSkgPSAoY2hhcilpOworfQorCit2b2lkIHJlYWRfYnl0ZXMoY2hhciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwljaGVja19ieXRlcyhhZGRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgTEVOR1RIOyBpKyspCisJCWlmICgqKGFkZHIgKyBpKSAhPSAoY2hhcilpKSB7CisJCQlwcmludGYoIk1pc21hdGNoIGF0ICVsdVxuIiwgaSk7CisJCQlicmVhazsKKwkJfQorfQorCitpbnQgbWFpbih2b2lkKQoreworCXZvaWQgKmFkZHI7CisKKwlhZGRyID0gbW1hcChBRERSLCBMRU5HVEgsIFBST1RFQ1RJT04sIEZMQUdTLCAwLCAwKTsKKwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CisJCXBlcnJvcigibW1hcCIpOworCQlleGl0KDEpOworCX0KKworCXByaW50ZigiUmV0dXJuZWQgYWRkcmVzcyBpcyAlcFxuIiwgYWRkcik7CisJY2hlY2tfYnl0ZXMoYWRkcik7CisJd3JpdGVfYnl0ZXMoYWRkcik7CisJcmVhZF9ieXRlcyhhZGRyKTsKKworCW11bm1hcChhZGRyLCBMRU5HVEgpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCmluZGV4IDA4MzNmNDQuLjNlZGE4ZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCkBAIC0xNTgsMTIgKzE1OCwxMiBAQAogCXR5cGUgX19taW4yID0gKHkpOwkJCVwKIAlfX21pbjEgPCBfX21pbjIgPyBfX21pbjEgOiBfX21pbjI7IH0pCiAKLXVuc2lnbmVkIGxvbmcgcGFnZXMybWIodW5zaWduZWQgbG9uZyBwYWdlcykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzMm1iKHVuc2lnbmVkIGxvbmcgcGFnZXMpCiB7CiAJcmV0dXJuIChwYWdlcyAqIHBhZ2Vfc2l6ZSkgPj4gMjA7CiB9CiAKLXZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQorc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQogewogCXZhX2xpc3QgYXA7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQAogICogcGFnZSBmbGFnIG5hbWVzCiAgKi8KIAotY2hhciAqcGFnZV9mbGFnX25hbWUodWludDY0X3QgZmxhZ3MpCitzdGF0aWMgY2hhciAqcGFnZV9mbGFnX25hbWUodWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIGNoYXIgYnVmWzY1XTsKIAlpbnQgcHJlc2VudDsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXJldHVybiBidWY7CiB9CiAKLWNoYXIgKnBhZ2VfZmxhZ19sb25nbmFtZSh1aW50NjRfdCBmbGFncykKK3N0YXRpYyBjaGFyICpwYWdlX2ZsYWdfbG9uZ25hbWUodWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIGNoYXIgYnVmWzEwMjRdOwogCWludCBpLCBuOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAgKiBwYWdlIGxpc3QgYW5kIHN1bW1hcnkKICAqLwogCi12b2lkIHNob3dfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCitzdGF0aWMgdm9pZCBzaG93X3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQogewogCXN0YXRpYyB1aW50NjRfdCAgICAgIGZsYWdzMDsKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmRleDsKQEAgLTI0MSwxMiArMjQxLDEyIEBACiAJY291bnQgID0gMTsKIH0KIAotdm9pZCBzaG93X3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKIHsKIAlwcmludGYoIiVsdVx0JXNcbiIsIG9mZnNldCwgcGFnZV9mbGFnX25hbWUoZmxhZ3MpKTsKIH0KIAotdm9pZCBzaG93X3N1bW1hcnkodm9pZCkKK3N0YXRpYyB2b2lkIHNob3dfc3VtbWFyeSh2b2lkKQogewogCWludCBpOwogCkBAIC0yNzIsNyArMjcyLDcgQEAKICAqIHBhZ2UgZmxhZyBmaWx0ZXJzCiAgKi8KIAotaW50IGJpdF9tYXNrX29rKHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIGludCBiaXRfbWFza19vayh1aW50NjRfdCBmbGFncykKIHsKIAlpbnQgaTsKIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXVpbnQ2NF90IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHVpbnQ2NF90IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQogewogCS8qIFNMT0IvU0xVQiBvdmVybG9hZCBzZXZlcmFsIHBhZ2UgZmxhZ3MgKi8KIAlpZiAoZmxhZ3MgJiBCSVQoU0xBQikpIHsKQEAgLTMwOCw3ICszMDgsNyBAQAogCXJldHVybiBmbGFnczsKIH0KIAotdWludDY0X3Qgd2VsbF9rbm93bl9mbGFncyh1aW50NjRfdCBmbGFncykKK3N0YXRpYyB1aW50NjRfdCB3ZWxsX2tub3duX2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQogewogCS8qIGhpZGUgZmxhZ3MgaW50ZW5kZWQgb25seSBmb3Iga2VybmVsIGhhY2tlciAqLwogCWZsYWdzICY9IH5LUEZfSEFDS0VSU19CSVRTOwpAQCAtMzI1LDcgKzMyNSw3IEBACiAgKiBwYWdlIGZyYW1lIHdhbGtlcgogICovCiAKLWludCBoYXNoX3Nsb3QodWludDY0X3QgZmxhZ3MpCitzdGF0aWMgaW50IGhhc2hfc2xvdCh1aW50NjRfdCBmbGFncykKIHsKIAlpbnQgayA9IEhBU0hfS0VZKGZsYWdzKTsKIAlpbnQgaTsKQEAgLTM1Miw3ICszNTIsNyBAQAogCWV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAotdm9pZCBhZGRfcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCitzdGF0aWMgdm9pZCBhZGRfcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJZmxhZ3MgPSBleHBhbmRfb3ZlcmxvYWRlZF9mbGFncyhmbGFncyk7CiAKQEAgLTM3MSw3ICszNzEsNyBAQAogCXRvdGFsX3BhZ2VzKys7CiB9CiAKLXZvaWQgd2Fsa19wZm4odW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyB2b2lkIHdhbGtfcGZuKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXRjaDsKIAl1bnNpZ25lZCBsb25nIG47CkBAIC00MDQsNyArNDA0LDcgQEAKIAl9CiB9CiAKLXZvaWQgd2Fsa19hZGRyX3Jhbmdlcyh2b2lkKQorc3RhdGljIHZvaWQgd2Fsa19hZGRyX3Jhbmdlcyh2b2lkKQogewogCWludCBpOwogCkBAIC00MjgsNyArNDI4LDcgQEAKICAqIHVzZXIgaW50ZXJmYWNlCiAgKi8KIAotY29uc3QgY2hhciAqcGFnZV9mbGFnX3R5cGUodWludDY0X3QgZmxhZykKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlX2ZsYWdfdHlwZSh1aW50NjRfdCBmbGFnKQogewogCWlmIChmbGFnICYgS1BGX0hBQ0tFUlNfQklUUykKIAkJcmV0dXJuICIocikiOwpAQCAtNDM3LDcgKzQzNyw3IEBACiAJcmV0dXJuICIgICAiOwogfQogCi12b2lkIHVzYWdlKHZvaWQpCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCWludCBpLCBqOwogCkBAIC00ODIsNyArNDgyLDcgQEAKIAkJIihyKSByYXcgbW9kZSBiaXRzICAobykgb3ZlcmxvYWRlZCBiaXRzXG4iKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIHBhcnNlX251bWJlcihjb25zdCBjaGFyICpzdHIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHBhcnNlX251bWJlcihjb25zdCBjaGFyICpzdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG47CiAKQEAgLTQ5NCwxNiArNDk0LDE2IEBACiAJcmV0dXJuIG47CiB9CiAKLXZvaWQgcGFyc2VfcGlkKGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIHBhcnNlX3BpZChjb25zdCBjaGFyICpzdHIpCiB7CiAJb3B0X3BpZCA9IHBhcnNlX251bWJlcihzdHIpOwogfQogCi12b2lkIHBhcnNlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIHBhcnNlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSkKIHsKIH0KIAotdm9pZCBhZGRfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIHZvaWQgYWRkX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAobnJfYWRkcl9yYW5nZXMgPj0gTUFYX0FERFJfUkFOR0VTKQogCQlmYXRhbCgidG9vIG11Y2ggYWRkciByYW5nZXNcbiIpOwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJbnJfYWRkcl9yYW5nZXMrKzsKIH0KIAotdm9pZCBwYXJzZV9hZGRyX3JhbmdlKGNvbnN0IGNoYXIgKm9wdGFyZykKK3N0YXRpYyB2b2lkIHBhcnNlX2FkZHJfcmFuZ2UoY29uc3QgY2hhciAqb3B0YXJnKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCWFkZF9hZGRyX3JhbmdlKG9mZnNldCwgc2l6ZSk7CiB9CiAKLXZvaWQgYWRkX2JpdHNfZmlsdGVyKHVpbnQ2NF90IG1hc2ssIHVpbnQ2NF90IGJpdHMpCitzdGF0aWMgdm9pZCBhZGRfYml0c19maWx0ZXIodWludDY0X3QgbWFzaywgdWludDY0X3QgYml0cykKIHsKIAlpZiAobnJfYml0X2ZpbHRlcnMgPj0gTUFYX0JJVF9GSUxURVJTKQogCQlmYXRhbCgidG9vIG11Y2ggYml0IGZpbHRlcnNcbiIpOwpAQCAtNTU3LDcgKzU1Nyw3IEBACiAJbnJfYml0X2ZpbHRlcnMrKzsKIH0KIAotdWludDY0X3QgcGFyc2VfZmxhZ19uYW1lKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbikKK3N0YXRpYyB1aW50NjRfdCBwYXJzZV9mbGFnX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQogewogCWludCBpOwogCkBAIC01NzcsNyArNTc3LDcgQEAKIAlyZXR1cm4gcGFyc2VfbnVtYmVyKHN0cik7CiB9CiAKLXVpbnQ2NF90IHBhcnNlX2ZsYWdfbmFtZXMoY29uc3QgY2hhciAqc3RyLCBpbnQgYWxsKQorc3RhdGljIHVpbnQ2NF90IHBhcnNlX2ZsYWdfbmFtZXMoY29uc3QgY2hhciAqc3RyLCBpbnQgYWxsKQogewogCWNvbnN0IGNoYXIgKnAgICAgPSBzdHI7CiAJdWludDY0X3QgICBmbGFncyA9IDA7CkBAIC01OTYsNyArNTk2LDcgQEAKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKLXZvaWQgcGFyc2VfYml0c19tYXNrKGNvbnN0IGNoYXIgKm9wdGFyZykKK3N0YXRpYyB2b2lkIHBhcnNlX2JpdHNfbWFzayhjb25zdCBjaGFyICpvcHRhcmcpCiB7CiAJdWludDY0X3QgbWFzazsKIAl1aW50NjRfdCBiaXRzOwpAQCAtNjIxLDcgKzYyMSw3IEBACiB9CiAKIAotc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CitzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CiAJeyAicmF3IiAgICAgICAsIDAsIE5VTEwsICdyJyB9LAogCXsgInBpZCIgICAgICAgLCAxLCBOVUxMLCAncCcgfSwKIAl7ICJmaWxlIiAgICAgICwgMSwgTlVMTCwgJ2YnIH0sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3NsYWJpbmZvLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3NsYWJpbmZvLmMKaW5kZXggZGYzMjI3Ni4uOTJlNzI5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9zbGFiaW5mby5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vc2xhYmluZm8uYwpAQCAtODcsNyArODcsNyBAQAogCiByZWdleF90IHBhdHRlcm47CiAKLXZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQorc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQogewogCXZhX2xpc3QgYXA7CiAKQEAgLTk3LDcgKzk3LDcgQEAKIAlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKLXZvaWQgdXNhZ2Uodm9pZCkKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7CiAJcHJpbnRmKCJzbGFiaW5mbyA1LzcvMjAwNy4gKGMpIDIwMDcgc2dpLlxuXG4iCiAJCSJzbGFiaW5mbyBbLWFobnB2dHN6XSBbLWQgZGVidWdvcHRzXSBbc2xhYi1yZWdleHBdXG4iCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkpOwogfQogCi11bnNpZ25lZCBsb25nIHJlYWRfb2JqKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX29iaihjb25zdCBjaGFyICpuYW1lKQogewogCUZJTEUgKmYgPSBmb3BlbihuYW1lLCAiciIpOwogCkBAIC0xNTEsNyArMTUxLDcgQEAKIC8qCiAgKiBHZXQgdGhlIGNvbnRlbnRzIG9mIGFuIGF0dHJpYnV0ZQogICovCi11bnNpZ25lZCBsb25nIGdldF9vYmooY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9vYmooY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpZiAoIXJlYWRfb2JqKG5hbWUpKQogCQlyZXR1cm4gMDsKQEAgLTE1OSw3ICsxNTksNyBAQAogCXJldHVybiBhdG9sKGJ1ZmZlcik7CiB9CiAKLXVuc2lnbmVkIGxvbmcgZ2V0X29ial9hbmRfc3RyKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKip4KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X29ial9hbmRfc3RyKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKip4KQogewogCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKIAljaGFyICpwOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBzZXRfb2JqKHN0cnVjdCBzbGFiaW5mbyAqcywgY29uc3QgY2hhciAqbmFtZSwgaW50IG4pCitzdGF0aWMgdm9pZCBzZXRfb2JqKHN0cnVjdCBzbGFiaW5mbyAqcywgY29uc3QgY2hhciAqbmFtZSwgaW50IG4pCiB7CiAJY2hhciB4WzEwMF07CiAJRklMRSAqZjsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWZjbG9zZShmKTsKIH0KIAotdW5zaWduZWQgbG9uZyByZWFkX3NsYWJfb2JqKHN0cnVjdCBzbGFiaW5mbyAqcywgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfc2xhYl9vYmooc3RydWN0IHNsYWJpbmZvICpzLCBjb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgeFsxMDBdOwogCUZJTEUgKmY7CkBAIC0yMTUsNyArMjE1LDcgQEAKIC8qCiAgKiBQdXQgYSBzaXplIHN0cmluZyB0b2dldGhlcgogICovCi1pbnQgc3RvcmVfc2l6ZShjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCitzdGF0aWMgaW50IHN0b3JlX3NpemUoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXVuc2lnbmVkIGxvbmcgZGl2aXNvciA9IDE7CiAJY2hhciB0cmFpbGVyID0gMDsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIGRlY29kZV9udW1hX2xpc3QoaW50ICpudW1hLCBjaGFyICp0KQorc3RhdGljIHZvaWQgZGVjb2RlX251bWFfbGlzdChpbnQgKm51bWEsIGNoYXIgKnQpCiB7CiAJaW50IG5vZGU7CiAJaW50IG5yOwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJfQogfQogCi12b2lkIHNsYWJfdmFsaWRhdGUoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2xhYl92YWxpZGF0ZShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJaWYgKHN0cmNtcChzLT5uYW1lLCAiKiIpID09IDApCiAJCXJldHVybjsKQEAgLTI4MCw3ICsyODAsNyBAQAogCXNldF9vYmoocywgInZhbGlkYXRlIiwgMSk7CiB9CiAKLXZvaWQgc2xhYl9zaHJpbmsoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2xhYl9zaHJpbmsoc3RydWN0IHNsYWJpbmZvICpzKQogewogCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQogCQlyZXR1cm47CkBAIC0yOTAsNyArMjkwLDcgQEAKIAogaW50IGxpbmUgPSAwOwogCi12b2lkIGZpcnN0X2xpbmUodm9pZCkKK3N0YXRpYyB2b2lkIGZpcnN0X2xpbmUodm9pZCkKIHsKIAlpZiAoc2hvd19hY3Rpdml0eSkKIAkJcHJpbnRmKCJOYW1lICAgICAgICAgICAgICAgICAgIE9iamVjdHMgICAgICBBbGxvYyAgICAgICBGcmVlICAgJSVGYXN0IEZhbGxiIE9cbiIpOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAvKgogICogRmluZCB0aGUgc2hvcnRlc3QgYWxpYXMgb2YgYSBzbGFiCiAgKi8KLXN0cnVjdCBhbGlhc2luZm8gKmZpbmRfb25lX2FsaWFzKHN0cnVjdCBzbGFiaW5mbyAqZmluZCkKK3N0YXRpYyBzdHJ1Y3QgYWxpYXNpbmZvICpmaW5kX29uZV9hbGlhcyhzdHJ1Y3Qgc2xhYmluZm8gKmZpbmQpCiB7CiAJc3RydWN0IGFsaWFzaW5mbyAqYTsKIAlzdHJ1Y3QgYWxpYXNpbmZvICpiZXN0ID0gTlVMTDsKQEAgLTMxOCwxOCArMzE4LDE4IEBACiAJcmV0dXJuIGJlc3Q7CiB9CiAKLXVuc2lnbmVkIGxvbmcgc2xhYl9zaXplKHN0cnVjdCBzbGFiaW5mbyAqcykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNsYWJfc2l6ZShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJcmV0dXJuIAlzLT5zbGFicyAqIChwYWdlX3NpemUgPDwgcy0+b3JkZXIpOwogfQogCi11bnNpZ25lZCBsb25nIHNsYWJfYWN0aXZpdHkoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2xhYl9hY3Rpdml0eShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJcmV0dXJuIAlzLT5hbGxvY19mYXN0cGF0aCArIHMtPmZyZWVfZmFzdHBhdGggKwogCQlzLT5hbGxvY19zbG93cGF0aCArIHMtPmZyZWVfc2xvd3BhdGg7CiB9CiAKLXZvaWQgc2xhYl9udW1hKHN0cnVjdCBzbGFiaW5mbyAqcywgaW50IG1vZGUpCitzdGF0aWMgdm9pZCBzbGFiX251bWEoc3RydWN0IHNsYWJpbmZvICpzLCBpbnQgbW9kZSkKIHsKIAlpbnQgbm9kZTsKIApAQCAtMzc0LDcgKzM3NCw3IEBACiAJbGluZSsrOwogfQogCi12b2lkIHNob3dfdHJhY2tpbmcoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2hvd190cmFja2luZyhzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJcHJpbnRmKCJcbiVzOiBLZXJuZWwgb2JqZWN0IGFsbG9jYXRpb25cbiIsIHMtPm5hbWUpOwogCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIH0KIAotdm9pZCBvcHMoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgb3BzKHN0cnVjdCBzbGFiaW5mbyAqcykKIHsKIAlpZiAoc3RyY21wKHMtPm5hbWUsICIqIikgPT0gMCkKIAkJcmV0dXJuOwpAQCAtNDA1LDE0ICs0MDUsMTQgQEAKIAkJcHJpbnRmKCJcbiVzIGhhcyBubyBrbWVtX2NhY2hlIG9wZXJhdGlvbnNcbiIsIHMtPm5hbWUpOwogfQogCi1jb25zdCBjaGFyICpvbm9mZihpbnQgeCkKK3N0YXRpYyBjb25zdCBjaGFyICpvbm9mZihpbnQgeCkKIHsKIAlpZiAoeCkKIAkJcmV0dXJuICJPbiAiOwogCXJldHVybiAiT2ZmIjsKIH0KIAotdm9pZCBzbGFiX3N0YXRzKHN0cnVjdCBzbGFiaW5mbyAqcykKK3N0YXRpYyB2b2lkIHNsYWJfc3RhdHMoc3RydWN0IHNsYWJpbmZvICpzKQogewogCXVuc2lnbmVkIGxvbmcgdG90YWxfYWxsb2M7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9mcmVlOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJCQlzLT5kZWFjdGl2YXRlX3RvX3RhaWwsIChzLT5kZWFjdGl2YXRlX3RvX3RhaWwgKiAxMDApIC8gdG90YWwpOwogfQogCi12b2lkIHJlcG9ydChzdHJ1Y3Qgc2xhYmluZm8gKnMpCitzdGF0aWMgdm9pZCByZXBvcnQoc3RydWN0IHNsYWJpbmZvICpzKQogewogCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQogCQlyZXR1cm47CkBAIC01MTgsNyArNTE4LDcgQEAKIAlzbGFiX3N0YXRzKHMpOwogfQogCi12b2lkIHNsYWJjYWNoZShzdHJ1Y3Qgc2xhYmluZm8gKnMpCitzdGF0aWMgdm9pZCBzbGFiY2FjaGUoc3RydWN0IHNsYWJpbmZvICpzKQogewogCWNoYXIgc2l6ZV9zdHJbMjBdOwogCWNoYXIgZGlzdF9zdHJbNDBdOwpAQCAtNTkzLDcgKzU5Myw3IEBACiAvKgogICogQW5hbHl6ZSBkZWJ1ZyBvcHRpb25zLiBSZXR1cm4gZmFsc2UgaWYgc29tZXRoaW5nIGlzIGFtaXNzLgogICovCi1pbnQgZGVidWdfb3B0X3NjYW4oY2hhciAqb3B0KQorc3RhdGljIGludCBkZWJ1Z19vcHRfc2NhbihjaGFyICpvcHQpCiB7CiAJaWYgKCFvcHQgfHwgIW9wdFswXSB8fCBzdHJjbXAob3B0LCAiLSIpID09IDApCiAJCXJldHVybiAxOwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBzbGFiX2VtcHR5KHN0cnVjdCBzbGFiaW5mbyAqcykKK3N0YXRpYyBpbnQgc2xhYl9lbXB0eShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJaWYgKHMtPm9iamVjdHMgPiAwKQogCQlyZXR1cm4gMDsKQEAgLTY1Nyw3ICs2NTcsNyBAQAogCXJldHVybiAxOwogfQogCi12b2lkIHNsYWJfZGVidWcoc3RydWN0IHNsYWJpbmZvICpzKQorc3RhdGljIHZvaWQgc2xhYl9kZWJ1ZyhzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7CiAJaWYgKHN0cmNtcChzLT5uYW1lLCAiKiIpID09IDApCiAJCXJldHVybjsKQEAgLTcxNyw3ICs3MTcsNyBAQAogCQlzZXRfb2JqKHMsICJ0cmFjZSIsIDEpOwogfQogCi12b2lkIHRvdGFscyh2b2lkKQorc3RhdGljIHZvaWQgdG90YWxzKHZvaWQpCiB7CiAJc3RydWN0IHNsYWJpbmZvICpzOwogCkBAIC05NzYsNyArOTc2LDcgQEAKIAkJCWIxLAliMiwJYjMpOwogfQogCi12b2lkIHNvcnRfc2xhYnModm9pZCkKK3N0YXRpYyB2b2lkIHNvcnRfc2xhYnModm9pZCkKIHsKIAlzdHJ1Y3Qgc2xhYmluZm8gKnMxLCpzMjsKIApAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAl9CiB9CiAKLXZvaWQgc29ydF9hbGlhc2VzKHZvaWQpCitzdGF0aWMgdm9pZCBzb3J0X2FsaWFzZXModm9pZCkKIHsKIAlzdHJ1Y3QgYWxpYXNpbmZvICphMSwqYTI7CiAKQEAgLTEwMzAsNyArMTAzMCw3IEBACiAJfQogfQogCi12b2lkIGxpbmtfc2xhYnModm9pZCkKK3N0YXRpYyB2b2lkIGxpbmtfc2xhYnModm9pZCkKIHsKIAlzdHJ1Y3QgYWxpYXNpbmZvICphOwogCXN0cnVjdCBzbGFiaW5mbyAqczsKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJfQogfQogCi12b2lkIGFsaWFzKHZvaWQpCitzdGF0aWMgdm9pZCBhbGlhcyh2b2lkKQogewogCXN0cnVjdCBhbGlhc2luZm8gKmE7CiAJY2hhciAqYWN0aXZlID0gTlVMTDsKQEAgLTEwNzksNyArMTA3OSw3IEBACiB9CiAKIAotdm9pZCByZW5hbWVfc2xhYnModm9pZCkKK3N0YXRpYyB2b2lkIHJlbmFtZV9zbGFicyh2b2lkKQogewogCXN0cnVjdCBzbGFiaW5mbyAqczsKIAlzdHJ1Y3QgYWxpYXNpbmZvICphOwpAQCAtMTEwMiwxMiArMTEwMiwxMiBAQAogCX0KIH0KIAotaW50IHNsYWJfbWlzbWF0Y2goY2hhciAqc2xhYikKK3N0YXRpYyBpbnQgc2xhYl9taXNtYXRjaChjaGFyICpzbGFiKQogewogCXJldHVybiByZWdleGVjKCZwYXR0ZXJuLCBzbGFiLCAwLCBOVUxMLCAwKTsKIH0KIAotdm9pZCByZWFkX3NsYWJfZGlyKHZvaWQpCitzdGF0aWMgdm9pZCByZWFkX3NsYWJfZGlyKHZvaWQpCiB7CiAJRElSICpkaXI7CiAJc3RydWN0IGRpcmVudCAqZGU7CkBAIC0xMjA5LDcgKzEyMDksNyBAQAogCQlmYXRhbCgiVG9vIG1hbnkgYWxpYXNlc1xuIik7CiB9CiAKLXZvaWQgb3V0cHV0X3NsYWJzKHZvaWQpCitzdGF0aWMgdm9pZCBvdXRwdXRfc2xhYnModm9pZCkKIHsKIAlzdHJ1Y3Qgc2xhYmluZm8gKnNsYWI7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXRlc3QuYyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXRlc3QuYwppbmRleCA2NWY2YzE5Li5hNzUwNTMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3NyYy93YXRjaGRvZy10ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9zcmMvd2F0Y2hkb2ctdGVzdC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiB0aGUgUEMgV2F0Y2hkb2cgY2FyZCB0byByZXNldCBpdHMgaW50ZXJuYWwgdGltZXIgc28gaXQgZG9lc24ndCB0cmlnZ2VyCiAgKiBhIGNvbXB1dGVyIHJlc2V0LgogICovCi12b2lkIGtlZXBfYWxpdmUodm9pZCkKK3N0YXRpYyB2b2lkIGtlZXBfYWxpdmUodm9pZCkKIHsKICAgICBpbnQgZHVtbXk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dCBiL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dAppbmRleCA2MDdiMWEwLi5mMTk4MDJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni9lYXJseXByaW50ay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0CkBAIC03LDcgKzcsNyBAQAogCiAgIFtob3N0L3RhcmdldF0gPC0tLS0tLS0+IFtVU0IgZGVidWcga2V5XSA8LS0tLS0tLT4gW2NsaWVudC9jb25zb2xlXQogCi0xLiBUaGVyZSBhcmUgdGhyZWUgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzOgorMS4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50czoKIAogIGEuKSBIb3N0L3RhcmdldCBzeXN0ZW0gbmVlZHMgdG8gaGF2ZSBVU0IgZGVidWcgcG9ydCBjYXBhYmlsaXR5LgogCkBAIC00Miw3ICs0MiwzNSBAQAogICAgICBUaGlzIGlzIGEgc21hbGwgYmx1ZSBwbGFzdGljIGNvbm5lY3RvciB3aXRoIHR3byBVU0IgY29ubmVjdGlvbnMsCiAgICAgIGl0IGRyYXdzIHBvd2VyIGZyb20gaXRzIFVTQiBjb25uZWN0aW9ucy4KIAotIGMuKSBUaGlyZGx5LCB5b3UgbmVlZCBhIHNlY29uZCBjbGllbnQvY29uc29sZSBzeXN0ZW0gd2l0aCBhIHJlZ3VsYXIgVVNCIHBvcnQuCisgYy4pIFlvdSBuZWVkIGEgc2Vjb25kIGNsaWVudC9jb25zb2xlIHN5c3RlbSB3aXRoIGEgaGlnaCBzcGVlZCBVU0IgMi4wCisgICAgIHBvcnQuCisKKyBkLikgVGhlIE5ldGNoaXAgZGV2aWNlIG11c3QgYmUgcGx1Z2dlZCBkaXJlY3RseSBpbnRvIHRoZSBwaHlzaWNhbAorICAgICBkZWJ1ZyBwb3J0IG9uIHRoZSAiaG9zdC90YXJnZXQiIHN5c3RlbS4gIFlvdSBjYW5ub3QgdXNlIGEgVVNCIGh1YiBpbgorICAgICBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBkZWJ1ZyBwb3J0IGFuZCB0aGUgImhvc3QvdGFyZ2V0IiBzeXN0ZW0uCisKKyAgICAgVGhlIEVIQ0kgZGVidWcgY29udHJvbGxlciBpcyBib3VuZCB0byBhIHNwZWNpZmljIHBoeXNpY2FsIFVTQgorICAgICBwb3J0IGFuZCB0aGUgTmV0Y2hpcCBkZXZpY2Ugd2lsbCBvbmx5IHdvcmsgYXMgYW4gZWFybHkgcHJpbnRrCisgICAgIGRldmljZSBpbiB0aGlzIHBvcnQuICBUaGUgRUhDSSBob3N0IGNvbnRyb2xsZXJzIGFyZSBlbGVjdHJpY2FsbHkKKyAgICAgd2lyZWQgc3VjaCB0aGF0IHRoZSBFSENJIGRlYnVnIGNvbnRyb2xsZXIgaXMgaG9va2VkIHVwIHRvIHRoZQorICAgICBmaXJzdCBwaHlzaWNhbCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5nZSB0aGlzIHZpYSBzb2Z0d2FyZS4KKyAgICAgWW91IGNhbiBmaW5kIHRoZSBwaHlzaWNhbCBwb3J0IHRocm91Z2ggZXhwZXJpbWVudGF0aW9uIGJ5IHRyeWluZworICAgICBlYWNoIHBoeXNpY2FsIHBvcnQgb24gdGhlIHN5c3RlbSBhbmQgcmVib290aW5nLiAgT3IgeW91IGNhbiB0cnkKKyAgICAgYW5kIHVzZSBsc3VzYiBvciBsb29rIGF0IHRoZSBrZXJuZWwgaW5mbyBtZXNzYWdlcyBlbWl0dGVkIGJ5IHRoZQorICAgICB1c2Igc3RhY2sgd2hlbiB5b3UgcGx1ZyBhIHVzYiBkZXZpY2UgaW50byB2YXJpb3VzIHBvcnRzIG9uIHRoZQorICAgICAiaG9zdC90YXJnZXQiIHN5c3RlbS4KKworICAgICBTb21lIGhhcmR3YXJlIHZlbmRvcnMgZG8gbm90IGV4cG9zZSB0aGUgdXNiIGRlYnVnIHBvcnQgd2l0aCBhCisgICAgIHBoeXNpY2FsIGNvbm5lY3RvciBhbmQgaWYgeW91IGZpbmQgc3VjaCBhIGRldmljZSBzZW5kIGEgY29tcGxhaW50CisgICAgIHRvIHRoZSBoYXJkd2FyZSB2ZW5kb3IsIGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIG5vdCB0byB3aXJlCisgICAgIHRoaXMgcG9ydCBpbnRvIG9uZSBvZiB0aGUgcGh5c2ljYWxseSBhY2Nlc3NpYmxlIHBvcnRzLgorCisgZS4pIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUsIHRoYXQgbWFueSB2ZXJzaW9ucyBvZiB0aGUgTmV0Y2hpcAorICAgICBkZXZpY2UgcmVxdWlyZSB0aGUgImNsaWVudC9jb25zb2xlIiBzeXN0ZW0gdG8gYmUgcGx1Z2dlZCBpbnRvIHRoZQorICAgICByaWdodCBhbmQgc2lkZSBvZiB0aGUgZGV2aWNlICh3aXRoIHRoZSBwcm9kdWN0IGxvZ28gZmFjaW5nIHVwIGFuZAorICAgICByZWFkYWJsZSBsZWZ0IHRvIHJpZ2h0KS4gIFRoZSByZWFzb24gYmVpbmcgaXMgdGhhdCB0aGUgNSB2b2x0CisgICAgIHBvd2VyIHN1cHBseSBpcyB0YWtlbiBmcm9tIG9ubHkgb25lIHNpZGUgb2YgdGhlIGRldmljZSBhbmQgaXQKKyAgICAgbXVzdCBiZSB0aGUgc2lkZSB0aGF0IGRvZXMgbm90IGdldCByZWJvb3RlZC4KIAogMi4gU29mdHdhcmUgcmVxdWlyZW1lbnRzOgogCkBAIC01Niw2ICs4NCwxMyBAQAogICAgIChJZiB5b3UgYXJlIHVzaW5nIEdydWIsIGFwcGVuZCBpdCB0byB0aGUgJ2tlcm5lbCcgbGluZSBpbgogICAgICAvZXRjL2dydWIuY29uZikKIAorICAgIE9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIEVIQ0kgZGVidWcgY29udHJvbGxlciB5b3UgbXVzdAorICAgIHNwZWNpZnkgdGhlIGNvcnJlY3QgRUhDSSBkZWJ1ZyBjb250cm9sbGVyIG51bWJlci4gIFRoZSBvcmRlcmluZworICAgIGNvbWVzIGZyb20gdGhlIFBDSSBidXMgZW51bWVyYXRpb24gb2YgdGhlIEVIQ0kgY29udHJvbGxlcnMuICBUaGUKKyAgICBkZWZhdWx0IHdpdGggbm8gbnVtYmVyIGFyZ3VtZW50IGlzICIwIiB0aGUgZmlyc3QgRUhDSSBkZWJ1ZworICAgIGNvbnRyb2xsZXIuICBUbyB1c2UgdGhlIHNlY29uZCBFSENJIGRlYnVnIGNvbnRyb2xsZXIsIHlvdSB3b3VsZAorICAgIHVzZSB0aGUgY29tbWFuZCBsaW5lOiAiZWFybHlwcmludGs9ZGJncDEiCisKICAgICBOT1RFOiBub3JtYWxseSBlYXJseXByaW50ayBjb25zb2xlIGdldHMgdHVybmVkIG9mZiBvbmNlIHRoZQogICAgIHJlZ3VsYXIgY29uc29sZSBpcyBhbGl2ZSAtIHVzZSAiZWFybHlwcmludGs9ZGJncCxrZWVwIiB0byBrZWVwCiAgICAgdGhpcyBjaGFubmVsIG9wZW4gYmV5b25kIGVhcmx5IGJvb3R1cC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvcgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA0Mzc2MWEwLi44ZjYyOTc4IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjMzLDYgKzIzMyw3IEBACiBGOglkcml2ZXJzL2FjcGkvCiBGOglkcml2ZXJzL3BucC9wbnBhY3BpLwogRjoJaW5jbHVkZS9saW51eC9hY3BpLmgKK0Y6CWluY2x1ZGUvYWNwaS8KIAogQUNQSSBCQVRURVJZIERSSVZFUlMKIE06CUFsZXhleSBTdGFyaWtvdnNraXkgPGFzdGFyaWtvdnNraXlAc3VzZS5kZT4KQEAgLTQ5Nyw3ICs0OTgsNyBAQAogCiBBUk0gUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtLwpAQCAtNTA4LDM2ICs1MDksMzYgQEAKIAogQVJNL0FESSBST0FEUlVOTkVSIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWl4cDIzeHgvCiBGOglhcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoLwogCiBBUk0vQURTIFNQSEVSRSBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vQUZFQjkyNjAgTUFDSElORSBTVVBQT1JUCiBNOglTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9BSkVDTyAxQVJNIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9BVE1FTCBBVDkxUk05MjAwIEFSTSBBUkNISVRFQ1RVUkUKIE06CUFuZHJldyBWaWN0b3IgPGxpbnV4QG1heGltLm9yZy56YT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vbWF4aW0ub3JnLnphL2F0OTFfMjYuaHRtbAogUzoJTWFpbnRhaW5lZAogCiBBUk0vQkNNUklORyBBUk0gQVJDSElURUNUVVJFCiBNOglMZW8gQ2hlbiA8bGVvY2hlbkBicm9hZGNvbS5jb20+CiBNOglTY290dCBCcmFuZGVuIDxzYnJhbmRlbkBicm9hZGNvbS5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1iY21yaW5nCiAKQEAgLTU1NCwyNSArNTU1LDI1IEBACiBBUk0vQ0lSUlVTIExPR0lDIEVQOTNYWCBBUk0gQVJDSElURUNUVVJFCiBNOglIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20+CiBNOglSeWFuIE1hbGxvbiA8cnlhbkBibHVld2F0ZXJzeXMuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtZXA5M3h4LwogRjoJYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoLwogCiBBUk0vQ0lSUlVTIExPR0lDIEVEQjkzMTVBIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9DTEtERVYgU1VQUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEY6CWFyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwogRjoJYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmgKIAogQVJNL0NPTVBVTEFCIENNLVgyNzAvRU0tWDI3MCBhbmQgQ00tWDMwMCBNQUNISU5FIFNVUFBPUlQKIE06CU1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vQ09SR0kgTUFDSElORSBTVVBQT1JUCkBAIC01ODEsMTQgKzU4MiwxNCBAQAogCiBBUk0vQ09SVElOQSBTWVNURU1TIEdFTUlOSSBBUk0gQVJDSElURUNUVVJFCiBNOglQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBUOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1nZW1pbmkvbWFpbmxpbmUuZ2l0CiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWdlbWluaS8KIAogQVJNL0VCU0ExMTAgTUFDSElORSBTVVBQT1JUCiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrLwogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1lYnNhMTEwLwpAQCAtNjA2LDEzICs2MDcsMTMgQEAKIAogQVJNL0ZBUkFEQVkgRkE1MjYgUE9SVAogTToJUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbW0vKi1mYSoKIAogQVJNL0ZPT1RCUklER0UgQVJDSElURUNUVVJFCiBNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrLwogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvZGVjMjEyODUuaApAQCAtNjIwLDE3ICs2MjEsMTcgQEAKIAogQVJNL0ZSRUVTQ0FMRSBJTVggLyBNWEMgQVJNIEFSQ0hJVEVDVFVSRQogTToJU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vR0xPTUFUSU9OIEdFU0JDOTMxMlNYIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9HVU1TVElYIE1BQ0hJTkUgU1VQUE9SVAogTToJU3RldmUgU2Frb21hbiA8c2Frb21hbkBnbWFpbC5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vSDQ3MDAgKEhQIElQQVEgSFg0NzAwKSBNQUNISU5FIFNVUFBPUlQKQEAgLTY1MCw1NSArNjUxLDU1IEBACiBBUk0vSU5URUwgSU9QMzJYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglTdXBwb3J0ZWQKIAogQVJNL0lOVEVMIElPUDMzWCBBUk0gQVJDSElURUNUVVJFCiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglTdXBwb3J0ZWQKIAogQVJNL0lOVEVMIElPUDEzWFggQVJNIEFSQ0hJVEVDVFVSRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogCiBBUk0vSU5URUwgSVE4MTM0MkVYIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogCiBBUk0vSU5URUwgSVhQMjAwMCBBUk0gQVJDSElURUNUVVJFCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElYRFAyODUwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJWFAyM1hYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vSU5URUwgWFNDMyAoTUFOWkFOTykgQVJNIENPUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglTdXBwb3J0ZWQKIAogQVJNL0lQIEZBQlJJQ1MgRE9VQkxFIEVTUFJFU1NPIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9MT0dJQ1BEIFBYQTI3MCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vTUFHSUNJQU4gTUFDSElORSBTVVBQT1JUCkBAIC03MDgsNyArNzA5LDcgQEAKIEFSTS9NYXJ2ZWxsIExva2kvS2lya3dvb2QvTVY3OHh4MC9PcmlvbiBTT0Mgc3VwcG9ydAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+CiBNOglOaWNvbGFzIFBpdHJlIDxuaWNvQG1hcnZlbGwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFQ6CWdpdCBnaXQ6Ly9naXQubWFydmVsbC5jb20vb3Jpb24KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtbG9raS8KQEAgLTcxOSw3ICs3MjAsNyBAQAogCiBBUk0vTUlPQTcwMSBNQUNISU5FIFNVUFBPUlQKIE06CVJvYmVydCBKYXJ6bWlrIDxyb2JlcnQuamFyem1pa0BmcmVlLmZyPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEY6CWFyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwogUzoJTWFpbnRhaW5lZAogCkBAIC03NjAsMTggKzc2MSwxOCBAQAogCiBBUk0vUFQgRElHSVRBTCBCT0FSRCBQT1JUCiBNOglTdGVmYW4gRWxldHpob2ZlciA8c3RlZmFuLmVsZXR6aG9mZXJAZWxldHp0cmljay5kZT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvCiBTOglNYWludGFpbmVkCiAKIEFSTS9SQURJU1lTIEVOUDI2MTEgTUFDSElORSBTVVBQT1JUCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogQVJNL1JJU0NQQyBBUkNISVRFQ1RVUkUKIE06CVJ1c3NlbGwgS2luZyA8bGludXhAYXJtLmxpbnV4Lm9yZy51az4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9jb21tb24vdGltZS1hY29ybi5jCkBAIC03OTAsNyArNzkxLDcgQEAKIAogQVJNL1NBTVNVTkcgQVJNIEFSQ0hJVEVDVFVSRVMKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9wbGF0LXMzYy8KQEAgLTc5OCw2NSArNzk5LDY1IEBACiAKIEFSTS9TM0MyNDEwIEFSTSBBUkNISVRFQ1RVUkUKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvCiAKIEFSTS9TM0MyNDQwIEFSTSBBUkNISVRFQ1RVUkUKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXMzYzI0NDAvCiAKIEFSTS9TM0MyNDQyIEFSTSBBUkNISVRFQ1RVUkUKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXMzYzI0NDIvCiAKIEFSTS9TM0MyNDQzIEFSTSBBUkNISVRFQ1RVUkUKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXMzYzI0NDMvCiAKIEFSTS9TM0M2NDAwIEFSTSBBUkNISVRFQ1RVUkUKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXMzYzY0MDAvCiAKIEFSTS9TM0M2NDEwIEFSTSBBUkNISVRFQ1RVUkUKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXMzYzY0MTAvCiAKIEFSTS9URUNITk9MT0dJQyBTWVNURU1TIFRTNzI1MCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBBUk0vVEhFQ1VTIE4yMTAwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFSTS9OVVZPVE9OIFc5MFg5MDAgQVJNIEFSQ0hJVEVDVFVSRQogTToJV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cubWN1b3MuY29tCiBTOglNYWludGFpbmVkCiAKIEFSTS9WRlAgU1VQUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay8KIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL3ZmcC8KQEAgLTg5NCw2ICs4OTUsMTMgQEAKIEY6CWluY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKIEY6CWluY2x1ZGUvbGludXgvYXN5bmNfdHguaAogCitBVDI0IEVFUFJPTSBEUklWRVIKK006CVdvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPgorTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKK0Y6CWluY2x1ZGUvbGludXgvaTJjL2F0MjQuaAorCiBBVEEgT1ZFUiBFVEhFUk5FVCAoQU9FKSBEUklWRVIKIE06CSJFZCBMLiBDYXNoaW4iIDxlY2FzaGluQGNvcmFpZC5jb20+CiBXOglodHRwOi8vd3d3LmNvcmFpZC5jb20vc3VwcG9ydC9saW51eApAQCAtOTYzLDcgKzk3MSw3IEBACiAKIEFUTUVMIEFUOTEgTUNJIERSSVZFUgogTToJTmljb2xhcyBGZXJyZSA8bmljb2xhcy5mZXJyZUBhdG1lbC5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5hdG1lbC5jb20vcHJvZHVjdHMvQVQ5MS8KIFc6CWh0dHA6Ly93d3cuYXQ5MS5jb20vCiBTOglNYWludGFpbmVkCkBAIC0xNTQxLDcgKzE1NDksNyBAQAogCiBDWUJFUlBSTyBGQiBEUklWRVIKIE06CVJ1c3NlbGwgS2luZyA8bGludXhAYXJtLmxpbnV4Lm9yZy51az4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLioKQEAgLTIwODUsNyArMjA5Myw3IEBACiBGUkVFU0NBTEUgSU1YIC8gTVhDIEZSQU1FQlVGRkVSIERSSVZFUgogTToJU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CiBMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oCiBGOglkcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTIxMDYsMTIgKzIxMTQsMTIgQEAKIEY6CWFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliLwogRjoJYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLypxZS5oCiAKLUZSRUVTQ0FMRSBISUdIU1BFRUQgVVNCIERFVklDRSBEUklWRVIKK0ZSRUVTQ0FMRSBVU0IgUEVSSVBIRVJJQUwgRFJJVkVSUwogTToJTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKK0Y6CWRyaXZlcnMvdXNiL2dhZGdldC9mc2wqCiAKIEZSRUVTQ0FMRSBRVUlDQyBFTkdJTkUgVUNDIEVUSEVSTkVUIERSSVZFUgogTToJTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KQEAgLTI4MDMsNiArMjgxMSw4IEBACiBMOglsdnMtZGV2ZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXB2cy1zeXNjdGwudHh0CitGOglpbmNsdWRlL25ldC9pcF92cy5oCitGOglpbmNsdWRlL2xpbnV4L2lwX3ZzLmgKIEY6CW5ldC9uZXRmaWx0ZXIvaXB2cy8KIAogSVBXSVJFTEVTUyBEUklWRVIKQEAgLTI5NTUsNyArMjk2NSw3IEBACiBLRVJORUwgSkFOSVRPUlMKIEw6CWtlcm5lbC1qYW5pdG9yc0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotUzoJT2RkIGZpeGVzCitTOglNYWludGFpbmVkCiAKIEtFUk5FTCBORlNELCBTVU5SUEMsIEFORCBMT0NLRCBTRVJWRVJTCiBNOgkiSi4gQnJ1Y2UgRmllbGRzIiA8YmZpZWxkc0BmaWVsZHNlcy5vcmc+CkBAIC0zNDQ5LDcgKzM0NTksNyBAQAogCiBNT1RPUk9MQSBJTVggTU1DL1NEIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgRFJJVkVSCiBNOglQYXZlbCBQaXNhIDxwcGlzYUBwaWtyb24uY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbW1jL2hvc3QvaW14bW1jLioKIApAQCAtMzUyNCw3ICszNTM0LDYgQEAKIAogTkNQIEZJTEVTWVNURU0KIE06CVBldHIgVmFuZHJvdmVjIDx2YW5kcm92ZUB2Yy5jdnV0LmN6PgotTDoJbGlud2FyZUBzaC5jdnV0LmN6CiBTOglNYWludGFpbmVkCiBGOglmcy9uY3Bmcy8KIApAQCAtMzczNCw3ICszNzQzLDcgQEAKIFc6CWh0dHA6Ly9saW51eC5vbWFwLmNvbS8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG1saW5kL2xpbnV4LW9tYXAtMi42LmdpdAogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC9hcm0vKm9tYXAqCitGOglhcmNoL2FybS8qb21hcCovCiAKIE9NQVAgQ0xPQ0sgRlJBTUVXT1JLIFNVUFBPUlQKIE06CVBhdWwgV2FsbXNsZXkgPHBhdWxAcHdzYW4uY29tPgpAQCAtMzc2Niw3ICszNzc1LDEzIEBACiBNOglKYXJra28gTGF2aW5lbiA8amFya2tvLmxhdmluZW5Abm9raWEuY29tPgogTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbW1jL2hvc3QvKm9tYXAqCitGOglkcml2ZXJzL21tYy9ob3N0L29tYXAuYworCitPTUFQIEhTIE1NQyBTVVBQT1JUCitNOglNYWRodXN1ZGhhbiBDaGlra2F0dXJlIDxtYWRodS5jckB0aS5jb20+CitMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKIAogT01BUCBSQU5ET00gTlVNQkVSIEdFTkVSQVRPUiBTVVBQT1JUCiBNOglEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgpAQCAtMzk1Niw2ICszOTcxLDE1IEBACiBGOglkcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKIEY6CWluY2x1ZGUvbGludXgvbGVkcy1wY2E5NTMyLmgKIAorUENBOTU2NC9QQ0E5NjY1IEkyQyBCVVMgRFJJVkVSCitNOglXb2xmcmFtIFNhbmcgPHcuc2FuZ0BwZW5ndXRyb25peC5kZT4KK0w6CWxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCitGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS0qCitGOglpbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjYS5oCitGOglpbmNsdWRlL2xpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaAorCiBQQ0kgRVJST1IgUkVDT1ZFUlkKIE06CUxpbmFzIFZlcHN0YXMgPGxpbmFzQGF1c3Rpbi5pYm0uY29tPgogTDoJbGludXgtcGNpQHZnZXIua2VybmVsLm9yZwpAQCAtNDAwMCw3ICs0MDI0LDcgQEAKIEY6CWluY2x1ZGUvbGludXgvZGVsYXlhY2N0LmgKIEY6CWtlcm5lbC9kZWxheWFjY3QuYwogCi1QRVJGT1JNQU5DRSBDT1VOVEVSIFNVQlNZU1RFTQorUEVSRk9STUFOQ0UgRVZFTlRTIFNVQlNZU1RFTQogTToJUGV0ZXIgWmlqbHN0cmEgPGEucC56aWpsc3RyYUBjaGVsbG8ubmw+CiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgpAQCAtNDAyNSw4ICs0MDQ5LDcgQEAKIEY6CWluY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCiAKIFBNQyBTSUVSUkEgTWF4UkFJRCBEUklWRVIKLVA6CUFuaWwgUmF2aW5kcmFuYXRoCi1NOglhbmlsX3JhdmluZHJhbmF0aEBwbWMtc2llcnJhLmNvbQorTToJQW5pbCBSYXZpbmRyYW5hdGggPGFuaWxfcmF2aW5kcmFuYXRoQHBtYy1zaWVycmEuY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cucG1jLXNpZXJyYS5jb20vCiBTOglTdXBwb3J0ZWQKQEAgLTQxNjgsNyArNDE5MSw3IEBACiBQWEEyeHgvUFhBM3h4IFNVUFBPUlQKIE06CUVyaWMgTWlhbyA8ZXJpYy55Lm1pYW9AZ21haWwuY29tPgogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtcHhhLwogRjoJZHJpdmVycy9wY21jaWEvcHhhMnh4KgpAQCAtNDE4MSwxMyArNDIwNCwxMyBAQAogUFhBMTY4IFNVUFBPUlQKIE06CUVyaWMgTWlhbyA8ZXJpYy55Lm1pYW9AZ21haWwuY29tPgogTToJSmFzb24gQ2hhZ2FzIDxqYXNvbi5jaGFnYXNAbWFydmVsbC5jb20+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC95Y21pYW8vcHhhLWxpbnV4LTIuNi5naXQKIFM6CU1haW50YWluZWQKIAogUFhBOTEwIFNVUFBPUlQKIE06CUVyaWMgTWlhbyA8ZXJpYy55Lm1pYW9AZ21haWwuY29tPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQveWNtaWFvL3B4YS1saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiAKQEAgLTQ0MjgsNyArNDQ1MSw3IEBACiAKIFMzQzI0WFggU0QvTU1DIERyaXZlcgogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuKgogCkBAIC00NDU4LDcgKzQ0ODEsNyBAQAogUDoJQ2hlbiBMaXFpbgogTToJbGlxaW4uY2hlbkBzdW5wbHVzY3QuY29tCiBQOglMZW5ub3ggV3UKLU06CWxlbm5veC53dUBzdW5wbHVzY3QuY29tCitNOglsZW5ub3gud3VAZ21haWwuY29tCiBXOglodHRwOi8vd3d3LnN1bnBsdXNjdC5jb20KIFM6CVN1cHBvcnRlZAogCkBAIC00NTMzLDIwICs0NTU2LDIwIEBACiBGOglkcml2ZXJzL21tYy9ob3N0L3Nkcmljb2hfY3MuYwogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFIChTREhDSSkgRFJJVkVSCi1NOglQaWVycmUgT3NzbWFuIDxwaWVycmVAb3NzbWFuLmV1PgotTDoJc2RoY2ktZGV2ZWxAbGlzdHMub3NzbWFuLmV1Ci1TOglNYWludGFpbmVkCitTOiAgICAgT3JwaGFuCitMOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworRjogICAgIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKIE06CUFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLUw6CXNkaGNpLWRldmVsQGxpc3RzLm9zc21hbi5ldQorTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgorRjogICAgIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFIChTREhDSSkgU0FNU1VORyBEUklWRVIKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6CXNkaGNpLWRldmVsQGxpc3RzLm9zc21hbi5ldQorTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKIApAQCAtNDYzMiw3ICs0NjU1LDcgQEAKIFNIQVJQIExIIFNVUFBPUlQgKExINzk1MlggJiBMSDdBNDBYKQogTToJTWFyYyBTaW5nZXIgPGVsZkBidWljaS5jb20+CiBXOglodHRwOi8vcHJvamVjdHMuYnVpY2kuY29tL2FybQotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCShzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0FEQy1MSDctVG91Y2hzY3JlZW4KIEY6CWFyY2gvYXJtL21hY2gtbGg3YTQweC8KQEAgLTQ2NDYsNiArNDY2OSwxOCBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocCoKIAorU0lNUExFIEZJUk1XQVJFIElOVEVSRkFDRSAoU0ZJKQorUDoJTGVuIEJyb3duCitNOglsZW5iQGtlcm5lbC5vcmcKK0w6CXNmaS1kZXZlbEBzaW1wbGVmaXJtd2FyZS5vcmcKK1c6CWh0dHA6Ly9zaW1wbGVmaXJtd2FyZS5vcmcvCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xlbmIvbGludXgtc2ZpLTIuNi5naXQKK1M6CVN1cHBvcnRlZAorRjoJYXJjaC94ODYva2VybmVsLypzZmkqCitGOglkcml2ZXJzL3NmaS8KK0Y6CWluY2x1ZGUvbGludXgvc2ZpKi5oCisKKwogU0lNVEVDIEVCMTEwQVRYIChDaGFsaWNlIENBVFMpCiBQOglCZW4gRG9va3MKIE06CVZpbmNlbnQgU2FuZGVycyA8c3VwcG9ydEBzaW10ZWMuY28udWs+CkBAIC01MDQ2LDYgKzUwODEsMTEgQEAKIFM6CU1haW50YWluZWQKIEY6CXNlY3VyaXR5L3RvbW95by8KIAorVE9QU1RBUiBMQVBUT1AgRVhUUkFTIERSSVZFUgorTToJSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3RvcHN0YXItbGFwdG9wLmMKKwogVE9TSElCQSBBQ1BJIEVYVFJBUyBEUklWRVIKIFM6CU9ycGhhbgogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKQEAgLTU2MzgsNiArNTY3OCwxMiBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9zY3NpL3dkNzAwMC5jCiAKK1dJTkJPTkQgQ0lSIERSSVZFUgorUDoJRGF2aWQgSORyZGVtYW4KK006CWRhdmlkQGhhcmRlbWFuLm51CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYworCiBXSU1BWCBTVEFDSwogTToJSW5ha3kgUGVyZXotR29uemFsZXogPGluYWt5LnBlcmV6LWdvbnphbGV6QGludGVsLmNvbT4KIE06CWxpbnV4LXdpbWF4QGludGVsLmNvbQpAQCAtNTY1Nyw4ICs1NzAzLDcgQEAKIEY6CWRyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwogCiBXTDEyNTEgV0lSRUxFU1MgRFJJVkVSCi1QOglLYWxsZSBWYWxvCi1NOglrYWxsZS52YWxvQG5va2lhLmNvbQorTToJS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLXRlc3RpbmcuZ2l0CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggOWZiOGFhZS4uNDQzNDQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCisrKyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDUsNiArNDUsMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBHRU5FUklDX1RJTUUKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIFpPTkVfRE1BCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMgYi9hcmNoL2FscGhhL2Jvb3QvdG9vbHMvb2Jqc3RyaXAuYwppbmRleCBlZjE4MzgyLi45ZDA3MjdkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2Jvb3QvdG9vbHMvb2Jqc3RyaXAuYworKysgYi9hcmNoL2FscGhhL2Jvb3QvdG9vbHMvb2Jqc3RyaXAuYwpAQCAtOTMsNyArOTMsNyBAQAogICAgIG9mZCA9IDE7CiAgICAgaWYgKGkgPCBhcmdjKSB7CiAJb2ZkID0gb3Blbihhcmd2W2krK10sIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOwotCWlmIChmZCA9PSAtMSkgeworCWlmIChvZmQgPT0gLTEpIHsKIAkgICAgcGVycm9yKCJvcGVuIik7CiAJICAgIGV4aXQoMSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCA4ODk3MTQ2Li4yNDJjMDliIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSwxNyArMSw5IEBACiAjaWZuZGVmIF9BTFBIQV9IQVJESVJRX0gKICNkZWZpbmUgX0FMUEhBX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0KLQotLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBfX3NvZnRpcnFfcGVuZGluZzsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLwotCiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOworI2RlZmluZSBhY2tfYmFkX2lycSBhY2tfYmFkX2lycQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgogCiAjZW5kaWYgLyogX0FMUEhBX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA5MGQ3YzM1Li45OWM1NmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtMjgsNiArMjgsOCBAQAogI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4MTAwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KICNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MjAwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHg0MDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisjZGVmaW5lIE1BUF9TVEFDSwkweDgwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLworI2RlZmluZSBNQVBfSFVHRVRMQgkweDEwMDAwMAkvKiBjcmVhdGUgYSBodWdlIHBhZ2UgbWFwcGluZyAqLwogCiAjZGVmaW5lIE1TX0FTWU5DCTEJCS8qIHN5bmMgbWVtb3J5IGFzeW5jaHJvbm91c2x5ICovCiAjZGVmaW5lIE1TX1NZTkMJCTIJCS8qIHN5bmNocm9ub3VzIG1lbW9yeSBzeW5jICovCkBAIC00OCw2ICs1MCw5IEBACiAjZGVmaW5lIE1BRFZfRE9OVEZPUksJMTAJCS8qIGRvbid0IGluaGVyaXQgYWNyb3NzIGZvcmsgKi8KICNkZWZpbmUgTUFEVl9ET0ZPUksJMTEJCS8qIGRvIGluaGVyaXQgYWNyb3NzIGZvcmsgKi8KIAorI2RlZmluZSBNQURWX01FUkdFQUJMRSAgIDEyCQkvKiBLU00gbWF5IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLworI2RlZmluZSBNQURWX1VOTUVSR0VBQkxFIDEzCQkvKiBLU00gbWF5IG5vdCBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKwogLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBNQVBfRklMRQkwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggYmZiODgwYS4uZDE1YWVkZiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTI2OCwxMSArMjY4LDcgQEAKIAkgICBhc3N1bWUgaXQgZG9lc24ndCBzdXBwb3J0IHNnIG1hcHBpbmcsIGFuZCwgc2luY2Ugd2UgdHJpZWQgdG8KIAkgICB1c2UgZGlyZWN0X21hcCBhYm92ZSwgaXQgbm93IG11c3QgYmUgY29uc2lkZXJlZCBhbiBlcnJvci4gKi8KIAlpZiAoISBhbHBoYV9tdi5tdl9wY2lfdGJpKSB7Ci0JCXN0YXRpYyBpbnQgYmVlbl9oZXJlID0gMDsgLyogT25seSBwcmludCB0aGUgbWVzc2FnZSBvbmNlLiAqLwotCQlpZiAoIWJlZW5faGVyZSkgewotCQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAicGNpX21hcF9zaW5nbGU6IG5vIEhXIHNnXG4iKTsKLQkJICAgIGJlZW5faGVyZSA9IDE7Ci0JCX0KKwkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJwY2lfbWFwX3NpbmdsZTogbm8gSFcgc2dcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCBiMDRlMmNiLi41ZDA4MjY2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC00MDgsMjggKzQwOCwxNyBAQAogICogcGFydC4gIFNvIHdlIGNhbid0IGRvIHRoZSAiZmluZCBhYnNvbHV0ZSB0aW1lIGluIHRlcm1zIG9mIGN5Y2xlcyIgdGhpbmcKICAqIHRoYXQgdGhlIG90aGVyIHBvcnRzIGRvLgogICovCi12b2lkCi1kb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQordTMyIGFyY2hfZ2V0dGltZW9mZnNldCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzZWMsIHVzZWMsIHNlcTsKLQl1bnNpZ25lZCBsb25nIGRlbHRhX2N5Y2xlcywgZGVsdGFfdXNlYywgcGFydGlhbF90aWNrOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQotCQlkZWx0YV9jeWNsZXMgPSBycGNjKCkgLSBzdGF0ZS5sYXN0X3RpbWU7Ci0JCXNlYyA9IHh0aW1lLnR2X3NlYzsKLQkJdXNlYyA9ICh4dGltZS50dl9uc2VjIC8gMTAwMCk7Ci0JCXBhcnRpYWxfdGljayA9IHN0YXRlLnBhcnRpYWxfdGljazsKLQotCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwotCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFVudGlsIGFuZCB1bmxlc3Mgd2UgZmlndXJlIG91dCBob3cgdG8gZ2V0IGNwdSBjeWNsZSBjb3VudGVycwogCSAgIGluIHN5bmMgYW5kIGtlZXAgdGhlbSB0aGVyZSwgd2UgY2FuJ3QgdXNlIHRoZSBycGNjIHRyaWNrcy4gICovCi0JZGVsdGFfdXNlYyA9IDA7CisJcmV0dXJuIDA7CiAjZWxzZQorCXVuc2lnbmVkIGxvbmcgZGVsdGFfY3ljbGVzLCBkZWx0YV91c2VjLCBwYXJ0aWFsX3RpY2s7CisKKwlkZWx0YV9jeWNsZXMgPSBycGNjKCkgLSBzdGF0ZS5sYXN0X3RpbWU7CisJcGFydGlhbF90aWNrID0gc3RhdGUucGFydGlhbF90aWNrOwogCS8qCiAJICogdXNlYyA9IGN5Y2xlcyAqIHRpY2tzX3Blcl9jeWNsZSAqIDIqKjQ4ICogMWU2IC8gKDIqKjQ4ICogdGlja3MpCiAJICoJPSBjeWNsZXMgKiAoc190X3BfYykgKiAxZTYgLyAoMioqNDggKiB0aWNrcykKQEAgLTQ0Niw2NCArNDM1LDEwIEBACiAJZGVsdGFfdXNlYyA9IChkZWx0YV9jeWNsZXMgKiBzdGF0ZS5zY2FsZWRfdGlja3NfcGVyX2N5Y2xlIAogCQkgICAgICArIHBhcnRpYWxfdGljaykgKiAxNTYyNTsKIAlkZWx0YV91c2VjID0gKChkZWx0YV91c2VjIC8gKCgxVUwgPDwgKEZJWF9TSElGVC02LTEpKSAqIEhaKSkgKyAxKSAvIDI7CisJcmV0dXJuIGRlbHRhX3VzZWMgKiAxMDAwOwogI2VuZGlmCi0KLQl1c2VjICs9IGRlbHRhX3VzZWM7Ci0JaWYgKHVzZWMgPj0gMTAwMDAwMCkgewotCQlzZWMgKz0gMTsKLQkJdXNlYyAtPSAxMDAwMDAwOwotCX0KLQotCXR2LT50dl9zZWMgPSBzZWM7Ci0JdHYtPnR2X3VzZWMgPSB1c2VjOwogfQogCi1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0KLWludAotZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCXVuc2lnbmVkIGxvbmcgZGVsdGFfbnNlYzsKLQotCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwotCi0JLyogVGhlIG9mZnNldCB0aGF0IGlzIGFkZGVkIGludG8gdGltZSBpbiBkb19nZXR0aW1lb2ZkYXkgYWJvdmUKLQkgICBtdXN0IGJlIHN1YnRyYWN0ZWQgb3V0IGhlcmUgdG8ga2VlcCBhIGNvaGVyZW50IHZpZXcgb2YgdGhlCi0JICAgdGltZS4gIFdpdGhvdXQgdGhpcywgYSBmdWxsLXRpY2sgZXJyb3IgaXMgcG9zc2libGUuICAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotCWRlbHRhX25zZWMgPSAwOwotI2Vsc2UKLQlkZWx0YV9uc2VjID0gcnBjYygpIC0gc3RhdGUubGFzdF90aW1lOwotCWRlbHRhX25zZWMgPSAoZGVsdGFfbnNlYyAqIHN0YXRlLnNjYWxlZF90aWNrc19wZXJfY3ljbGUgCi0JCSAgICAgICsgc3RhdGUucGFydGlhbF90aWNrKSAqIDE1NjI1OwotCWRlbHRhX25zZWMgPSAoKGRlbHRhX25zZWMgLyAoKDFVTCA8PCAoRklYX1NISUZULTYtMSkpICogSFopKSArIDEpIC8gMjsKLQlkZWx0YV9uc2VjICo9IDEwMDA7Ci0jZW5kaWYKLQotCW5zZWMgLT0gZGVsdGFfbnNlYzsKLQotCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKLQotCW50cF9jbGVhcigpOwotCi0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KLQogLyoKICAqIEluIG9yZGVyIHRvIHNldCB0aGUgQ01PUyBjbG9jayBwcmVjaXNlbHksIHNldF9ydGNfbW1zcyBoYXMgdG8gYmUKICAqIGNhbGxlZCA1MDAgbXMgYWZ0ZXIgdGhlIHNlY29uZCBub3d0aW1lIGhhcyBzdGFydGVkLCBiZWNhdXNlIHdoZW4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vaW5pdC5jIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKaW5kZXggYWY3MWQzOC4uYTA5MDJjMiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9pbml0LmMKKysrIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKQEAgLTI5OSw3ICsyOTksNyBAQAogCWluaXRzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luOwogCiAJcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVsdWsga2VybmVsIGNvZGUsICVsdWsgcmVzZXJ2ZWQsICVsdWsgZGF0YSwgJWx1ayBpbml0KVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCisJICAgICAgIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIG1heF9tYXBuciA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGNvZGVzaXplID4+IDEwLAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vbnVtYS5jIGIvYXJjaC9hbHBoYS9tbS9udW1hLmMKaW5kZXggMGVhYjU1Ny4uMTBiNDAzNSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9udW1hLmMKKysrIGIvYXJjaC9hbHBoYS9tbS9udW1hLmMKQEAgLTM0OSw3ICszNDksNyBAQAogCiAJcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVsdWsga2VybmVsIGNvZGUsICVsdWsgcmVzZXJ2ZWQsICIKIAkgICAgICAgIiVsdWsgZGF0YSwgJWx1ayBpbml0KVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGNvZGVzaXplID4+IDEwLAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggNzM1MDU1Ny4uNTQ2NjExMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAKICMgU2VsZWN0IGEgcGxhdGZvcm0gdGh0IGlzIGtlcHQgdXAtdG8tZGF0ZQogS0JVSUxEX0RFRkNPTkZJRyA6PSB2ZXJzYXRpbGVfZGVmY29uZmlnCiAKLSMgZGVmaW5lcyBmaWxlbmFtZSBleHRlbnNpb24gZGVwZW5kaW5nIG1lbW9yeSBtYW5lbWVudCB0eXBlLgorIyBkZWZpbmVzIGZpbGVuYW1lIGV4dGVuc2lvbiBkZXBlbmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgdHlwZS4KIGlmZXEgKCQoQ09ORklHX01NVSksKQogTU1VRVhUCQk6PSAtbm9tbXUKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZwppbmRleCA2NzJmNmRiLi5hMTY1N2I3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcKQEAgLTg3NSw3ICs4NzUsNyBAQAogQ09ORklHX0ZCX09NQVBfTENEQ19IV0E3NDI9eQogIyBDT05GSUdfRkJfT01BUF9MQ0RDX0JMSVpaQVJEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQX01BTlVBTF9VUERBVEU9eQotIyBDT05GSUdfRkJfT01BUF9MQ0RfTUlQSUQgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVBfTENEX01JUElEPXkKICMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgogIyBDT05GSUdfRkJfT01BUF9ETUFfVFVORSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKaW5kZXggNTFjMGZhOC4uMzU3ZDQwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwpAQCAtNzc4LDcgKzc3OCwzMyBAQAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUD15CisjIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03OTEsNiArODE3LDI1IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwppbmRleCA5YTUxMGVhLi44YTRhN2UyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0xMzEzLDggKzEzMTMsMzMgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUD15CisjIENPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT0yCiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMzMxLDYgKzEzNTYsMTYgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU05EPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKaW5kZXggNjc5YTRhMy4uYjljNDg5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKQEAgLTY5MCw2ICs2OTAsNyBAQAogIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorQ09ORklHX0dQSU9fVFdMNDAzMD15CiAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgpAQCAtNzQyLDYgKzc0Myw3IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldApAQCAtNzY3LDggKzc2OSw0NiBAQAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUD15CitDT05GSUdfRkJfT01BUF9MQ0RfVkdBPXkKKyMgQ09ORklHX0ZCX09NQVBfTENEQ19FWFRFUk5BTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFPTQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9URE8yNE0gaXMgbm90IHNldAorIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0CitDT05GSUdfTENEX1BMQVRGT1JNPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtNzgwLDYgKzgyMCwxNiBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NORD15CiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCBmYzI2OTc2Li44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE3ICsxIEBACi0jaWZuZGVmIF9fQVJNX01NQU5fSF9fCi0jZGVmaW5lIF9fQVJNX01NQU5fSF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogX19BUk1fTU1BTl9IX18gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDkxMjJjOWUuLjg5ZjdlYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zOTAsNyArMzkwLDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYxKQogI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYyKQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCQkoX19OUl9TWVNDQUxMX0JBU0UrMzYzKQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCQkoX19OUl9TWVNDQUxMX0JBU0UrMzY0KQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NCkKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgU1dJcyBhcmUgQVJNIHByaXZhdGUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCmluZGV4IGVjZmE5ODkuLmZhZmNlMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC0zNzMsNyArMzczLDcgQEAKIAkJQ0FMTChzeXNfcHJlYWR2KQogCQlDQUxMKHN5c19wd3JpdGV2KQogCQlDQUxMKHN5c19ydF90Z3NpZ3F1ZXVlaW5mbykKLQkJQ0FMTChzeXNfcGVyZl9jb3VudGVyX29wZW4pCisJCUNBTEwoc3lzX3BlcmZfZXZlbnRfb3BlbikKICNpZm5kZWYgc3lzY2FsbHNfY291bnRlZAogLmVxdSBzeXNjYWxsc19wYWRkaW5nLCAoKE5SX3N5c2NhbGxzICsgMykgJiB+MykgLSBOUl9zeXNjYWxscwogI2RlZmluZSBzeXNjYWxsc19jb3VudGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IGEyNGQ4MjQuLmUzNWQ1NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0yODksNiArMjg5LDEzIEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgQWRlbmVvIE5lb2NvcmUgOTI2IGJvYXJkLgogCitjb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMKKwlib29sICJBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdCBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgUmV2IEEgb3IgQiBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMuCisKIGVuZGlmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCmluZGV4IGE2ZWQwMTUuLmFkYTQ0MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKQEAgLTU5LDYgKzU5LDcgQEAKIAogIyBBVDkxU0FNOUcyMCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLKSArPSBib2FyZC1zYW05ZzIwZWsubworb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFS18yTU1DKSArPSBib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX0NQVTlHMjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KIAogIyBBVDkxU0FNOUc0NSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwppbmRleCBlZTRlYTBlNy4uMDdlYjdiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCkBAIC0yNzgsNiArMjc4LDEwMiBAQAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQogI2VuZGlmCiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTU1DIC8gU0QgU2xvdCBmb3IgQXRtZWwgTUNJIERyaXZlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJX01PRFVMRSkKK3N0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX01DSSwKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX01DSSwKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX01DSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX21tY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX21jaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHNsb3RfY291bnQgPSAwOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7CisJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCkgeworCQkJLyogaW5wdXQvaXJxICovCisJCQlpZiAoZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluKSB7CisJCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sIDEpOworCQkJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwgMSk7CisJCQl9CisJCQlpZiAoZGF0YS0+c2xvdFtpXS53cF9waW4pCisJCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLndwX3BpbiwgMSk7CisKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOgorCQkJCS8qIENNRCAqLworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMSk7CisJCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNiwgMSk7CisJCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKKwkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKKwkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMSk7CisJCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDEpOworCQkJCX0KKwkJCQlzbG90X2NvdW50Kys7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJLyogQ01EICovCisJCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExLCAxKTsKKwkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCisJCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAxKTsKKwkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgeworCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOworCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOworCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMsIDEpOworCQkJCX0KKwkJCQlzbG90X2NvdW50Kys7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiQVQ5MTogU0QvTU1DIHNsb3QgJWQgbm90IGF2YWlsYWJsZVxuIiwgaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc2xvdF9jb3VudCkgeworCQkvKiBDTEsgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAwKTsKKworCQltbWNfZGF0YSA9ICpkYXRhOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX21tY19kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBOQU5EIC8gU21hcnRNZWRpYQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYwppbmRleCA2MWU1MmI2Li41MDY2N2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYwpAQCAtNTMsNyArNTMsNyBAQAogCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDE4NDMyMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKaW5kZXggZDNiYTI5Yy4uMDIxMzhhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTAgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDEwMDAwMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMKaW5kZXggOWJhN2JhMi4uOGMwYjcxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCkBAIC01Niw3ICs1Niw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDIwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSgyMDAwMDAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBSVFMsIENUUykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1xaWwtYTkyNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1xaWwtYTkyNjAuYwppbmRleCA0Y2ZmOWE3Li42NjQ5MzhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcWlsLWE5MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXFpbC1hOTI2MC5jCkBAIC01Myw3ICs1Myw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwogCWF0OTFzYW05MjYwX2luaXRpYWxpemUoMTIwMDAwMDApOwogCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwogCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKIAogCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCmluZGV4IDkzYTBmOGIuLmJhOWQ1MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSgxODQzMjAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKaW5kZXggZjliMTk5OS4uYzRjODg2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwpAQCAtNjEsNyArNjEsNyBAQAogCS8qIFNldHVwIHRoZSBMRURzICovCiAJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEExMywgQVQ5MV9QSU5fUEExNCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwppbmRleCAxYmY3YmQ0Li4yNmYxYWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE2LjM2NyBNSHogY3J5c3RhbCAqLwogCWF0OTFzYW05MjYzX2luaXRpYWxpemUoMTYzNjc2NjApOwogCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwogCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKIAogCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhlNTNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQorICogIENvcHlyaWdodCAoQykgMjAwOCBBdG1lbAorICogIENvcHlyaWdodCAoQykgMjAwOSBSb2IgRW1hbnVlbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hdDczYzIxMy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisKKyNpbmNsdWRlICJzYW05X3NtYy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLworCWF0OTFzYW05MjYwX2luaXRpYWxpemUoMTg0MzIwMDApOworCisJLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCisJCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAorCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKKworCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxc2FtOTI2MF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKworLyoKKyAqIFVTQiBIb3N0IHBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKKwkucG9ydHMJCT0gMiwKK307CisKKy8qCisgKiBVU0IgRGV2aWNlIHBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7CisJLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAorCS5wdWxsdXBfcGluCT0gMCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLworfTsKKworCisvKgorICogU1BJIGRldmljZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZWtfc3BpX2RldmljZXNbXSA9IHsKKyNpZiAhZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKQorCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAxLAorCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorCX0sCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCisJewkvKiBEYXRhRmxhc2ggY2FyZCAqLworCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJfSwKKyNlbmRpZgorI2VuZGlmCit9OworCisKKy8qCisgKiBNQUNCIEV0aGVybmV0IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEMxMiwKKwkuaXNfcm1paQk9IDEsCit9OworCisKKy8qCisgKiBOQU5EIGZsYXNoCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7CisJeworCQkubmFtZSAgID0gIkJvb3RzdHJhcCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSAgID0gNCAqIFNaXzFNLAorCX0sCisJeworCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCT0gNjAgKiBTWl8xTSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGVrX25hbmRfcGFydGl0aW9uOworfQorCisvKiBkZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0geworCS5hbGUJCT0gMjEsCisJLmNsZQkJPSAyMiwKKwkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCisJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAorCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9CVVNXSURUSF8xNikKKwkuYnVzX3dpZHRoXzE2CT0gMSwKKyNlbHNlCisJLmJ1c193aWR0aF8xNgk9IDAsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMiwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDIsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNCwKKwkubnJkX3B1bHNlCQk9IDQsCisJLm5jc193cml0ZV9wdWxzZQk9IDQsCisJLm53ZV9wdWxzZQkJPSA0LAorCisJLnJlYWRfY3ljbGUJCT0gNywKKwkud3JpdGVfY3ljbGUJCT0gNywKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCisJLnRkZl9jeWNsZXMJCT0gMywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZla19uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIE1DSSAoU0QvTU1DKQorICogZGV0X3BpbiBhbmQgd3BfcGluIGFyZSBub3QgY29ubmVjdGVkCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CisJLnNsb3RbMF0gPSB7CisJCS5idXNfd2lkdGgJPSA0LAorCQkuZGV0ZWN0X3Bpbgk9IC1FTk9ERVYsCisJCS53cF9waW4JCT0gLUVOT0RFViwKKwl9LAorCS5zbG90WzFdID0geworCQkuYnVzX3dpZHRoCT0gNCwKKwkJLmRldGVjdF9waW4JPSAtRU5PREVWLAorCQkud3BfcGluCQk9IC1FTk9ERVYsCisJfSwKKworfTsKKyNlbHNlCitzdGF0aWMgc3RydWN0IGFtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0geworfTsKKyNlbmRpZgorCisvKgorICogTEVEcworICovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKKwl7CS8qICJib3R0b20iIGxlZCwgZ3JlZW4sIHVzZXJsZWQxIHRvIGJlIGRlZmluZWQgKi8KKwkJLm5hbWUJCQk9ICJkczUiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLworCQkubmFtZQkJCT0gImRzMSIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjEzLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVrX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiMjRjNTEyIiwgMHg1MCksCisJfSwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKKwkvKiBVU0IgRGV2aWNlICovCisJYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOworCS8qIFNQSSAqLworCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKKwkvKiBOQU5EICovCisJZWtfYWRkX2RldmljZV9uYW5kKCk7CisJLyogRXRoZXJuZXQgKi8KKwlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOworCS8qIE1NQyAqLworCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21tY19kYXRhKTsKKwkvKiBJMkMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7CisJLyogTEVEcyAqLworCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOworCS8qIFBDSzAgcHJvdmlkZXMgTUNMSyB0byB0aGUgV004NzMxICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsKKwkvKiBTU0MgKGZvciBXTTg3MzEpICovCisJYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlHMjBFS18yTU1DLCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgMiBNTUMgU2xvdCBNb2QiKQorCS8qIE1haW50YWluZXI6IFJvYiBFbWFudWVsZSAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxc2FtOTI2eF90aW1lciwKKwkubWFwX2lvCQk9IGVrX21hcF9pbywKKwkuaW5pdF9pcnEJPSBla19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKaW5kZXggY2E0NzBkNS4uMjljZjgzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwpAQCAtNTAsNyArNTAsNyBAQAogCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDE4NDMyMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggOWQwNzY3OS4uOTRmZmI1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTIuMDAwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTlybF9pbml0aWFsaXplKDEyMDAwMDAwKTsKIAotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KIAlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKIAkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2MC5jCmluZGV4IGQxMzMwNGMuLjkwNWQ2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtdXNiLWE5MjYwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTIuMDAwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjMuYwppbmRleCBkOTY0MDViLi5iNmEzNDgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtdXNiLWE5MjYzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2My5jCkBAIC01Miw3ICs1Miw3IEBACiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7CiAKLQkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCiAJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwogCiAJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCAxM2YyN2E0Li41ODNmMzhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvYXRtZWxfdXNiYV91ZGMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KICNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYzk3Yy5oPgogCiAgLyogVVNCIERldmljZSAqLwpAQCAtNjQsNiArNjUsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKTsKIAogIC8qIE1NQyAvIFNEICovCisgIC8qIGF0OTFfbWNpIHBsYXRmb3JtIGNvbmZpZyAqLwogc3RydWN0IGF0OTFfbW1jX2RhdGEgewogCXU4CQlkZXRfcGluOwkvKiBjYXJkIGRldGVjdCBJUlEgKi8KIAl1bnNpZ25lZAlzbG90X2I6MTsJLyogdXNlcyBTbG90IEIgKi8KQEAgLTczLDYgKzc1LDkgQEAKIH07CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKTsKIAorICAvKiBhdG1lbC1tY2kgcGxhdGZvcm0gY29uZmlnICovCitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CisKICAvKiBFdGhlcm5ldCAoRU1BQyAmIE1BQ0IpICovCiBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSB7CiAJdTMyCQlwaHlfbWFzazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IDNkZDBlMmEuLmRkYTE5Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKQEAgLTM3LDcgKzM3LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqY2xrKTsKIAogc3RhdGljIGludCBzZXRfa2V5dGNoY2xrX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotCitzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MSA9IHsKIAkuc3dfbG9ja2VkCT0gMSwKQEAgLTc2LDYgKzc2LDEzIEBACiAJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa192aWRlbyA9IHsKKwkuc3dfbG9ja2VkCT0gMSwKKwkuZW5hYmxlX3JlZyAgICAgPSBFUDkzWFhfU1lTQ09OX1ZJRENMS0RJViwKKwkuZW5hYmxlX21hc2sgICAgPSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FTkFCTEUsCisJLnNldF9yYXRlCT0gc2V0X2Rpdl9yYXRlLAorfTsKKwogLyogRE1BIENsb2NrcyAqLwogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDAgPSB7CiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKQEAgLTE0MCw2ICsxNDcsNyBAQAogCUlOSVRfQ0soTlVMTCwJCQkicGxsMiIsCQkmY2xrX3BsbDIpLAogCUlOSVRfQ0soImVwOTN4eC1vaGNpIiwJCU5VTEwsCQkmY2xrX3VzYl9ob3N0KSwKIAlJTklUX0NLKCJlcDkzeHgta2V5cGFkIiwJTlVMTCwJCSZjbGtfa2V5cGFkKSwKKwlJTklUX0NLKCJlcDkzeHgtZmIiLAkJTlVMTCwJCSZjbGtfdmlkZW8pLAogCUlOSVRfQ0soTlVMTCwJCQkicHdtX2NsayIsCSZjbGtfcHdtKSwKIAlJTklUX0NLKE5VTEwsCQkJIm0ycDAiLAkJJmNsa19tMnAwKSwKIAlJTklUX0NLKE5VTEwsCQkJIm0ycDEiLAkJJmNsa19tMnAxKSwKQEAgLTIzNiw2ICsyNDQsODQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY19jbGtfZGl2KHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50ICpwc2VsLCBpbnQgKmVzZWwsCisJCQkJICBpbnQgKnBkaXYsIGludCAqZGl2KQoreworCXVuc2lnbmVkIGxvbmcgbWF4X3JhdGUsIGJlc3RfcmF0ZSA9IDAsCisJCWFjdHVhbF9yYXRlID0gMCwgbWNsa19yYXRlID0gMCwgcmF0ZV9lcnIgPSAtMTsKKwlpbnQgaSwgZm91bmQgPSAwLCBfX2RpdiA9IDAsIF9fcGRpdiA9IDA7CisKKwkvKiBEb24ndCBleGNlZWQgdGhlIG1heGltdW0gcmF0ZSAqLworCW1heF9yYXRlID0gbWF4KG1heChjbGtfcGxsMS5yYXRlIC8gNCwgY2xrX3BsbDIucmF0ZSAvIDQpLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpOworCXJhdGUgPSBtaW4ocmF0ZSwgbWF4X3JhdGUpOworCisJLyoKKwkgKiBUcnkgdGhlIHR3byBwbGwncyBhbmQgdGhlIGV4dGVybmFsIGNsb2NrCisJICogQmVjYXVzZSB0aGUgdmFsaWQgcHJlZGl2aWRlcnMgYXJlIDIsIDIuNSBhbmQgMywgd2UgbXVsdGlwbHkKKwkgKiBhbGwgdGhlIGNsb2NrcyBieSAyIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IG1hdGguCisJICoKKwkgKiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gaW4gdGhlIGVwOTN4eCByYXN0ZXIgZ3VpZGU6CisJICogaHR0cDovL2JlLWEtbWF2ZXJpY2suY29tL2VuL3B1YnMvYXBwTm90ZS9BTjI2OVJFVjEucGRmCisJICoKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpID09IDApCisJCQltY2xrX3JhdGUgPSBFUDkzWFhfRVhUX0NMS19SQVRFICogMjsKKwkJZWxzZSBpZiAoaSA9PSAxKQorCQkJbWNsa19yYXRlID0gY2xrX3BsbDEucmF0ZSAqIDI7CisJCWVsc2UgaWYgKGkgPT0gMikKKwkJCW1jbGtfcmF0ZSA9IGNsa19wbGwyLnJhdGUgKiAyOworCisJCS8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KKwkJZm9yIChfX3BkaXYgPSA0OyBfX3BkaXYgPD0gNjsgX19wZGl2KyspIHsKKwkJCV9fZGl2ID0gbWNsa19yYXRlIC8gKHJhdGUgKiBfX3BkaXYpOworCQkJaWYgKF9fZGl2IDwgMiB8fCBfX2RpdiA+IDEyNykKKwkJCQljb250aW51ZTsKKworCQkJYWN0dWFsX3JhdGUgPSBtY2xrX3JhdGUgLyAoX19wZGl2ICogX19kaXYpOworCisJCQlpZiAoIWZvdW5kIHx8IGFicyhhY3R1YWxfcmF0ZSAtIHJhdGUpIDwgcmF0ZV9lcnIpIHsKKwkJCQkqcGRpdiA9IF9fcGRpdiAtIDM7CisJCQkJKmRpdiA9IF9fZGl2OworCQkJCSpwc2VsID0gKGkgPT0gMik7CisJCQkJKmVzZWwgPSAoaSAhPSAwKTsKKwkJCQliZXN0X3JhdGUgPSBhY3R1YWxfcmF0ZTsKKwkJCQlyYXRlX2VyciA9IGFicyhhY3R1YWxfcmF0ZSAtIHJhdGUpOworCQkJCWZvdW5kID0gMTsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZm91bmQpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJlc3RfcmF0ZTsKK30KKworc3RhdGljIGludCBzZXRfZGl2X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBhY3R1YWxfcmF0ZTsKKwlpbnQgcHNlbCA9IDAsIGVzZWwgPSAwLCBwZGl2ID0gMCwgZGl2ID0gMDsKKwl1MzIgdmFsOworCisJYWN0dWFsX3JhdGUgPSBjYWxjX2Nsa19kaXYocmF0ZSwgJnBzZWwsICZlc2VsLCAmcGRpdiwgJmRpdik7CisJaWYgKGFjdHVhbF9yYXRlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWNsay0+cmF0ZSA9IGFjdHVhbF9yYXRlOworCisJLyogQ2xlYXIgdGhlIGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzICovCisJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwl2YWwgJj0gfjB4N2ZmZjsKKworCS8qIFNldCB0aGUgbmV3IGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzIGZvciB0aGUgbmV3IGNsb2NrIHJhdGUgKi8KKwl2YWwgfD0gKGVzZWwgPyBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FU0VMIDogMCkgfAorCQkocHNlbCA/IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BTRUwgOiAwKSB8CisJCShwZGl2IDw8IEVQOTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlQpIHwgZGl2OworCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsLCBjbGstPmVuYWJsZV9yZWcpOworCXJldHVybiAwOworfQorCiBpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCWlmIChjbGstPnNldF9yYXRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDE2YjkyYzMuLmY3ZWJlZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KQEAgLTY4Miw2ICs2ODMsMzcgQEAKIEVYUE9SVF9TWU1CT0woZXA5M3h4X3B3bV9yZWxlYXNlX2dwaW8pOwogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggdmlkZW8gcGVyaXBoZXJhbCBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyBlcDkzeHhmYl9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVwOTN4eF9mYl9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0CQk9IEVQOTNYWF9SQVNURVJfUEhZU19CQVNFLAorCQkuZW5kCQk9IEVQOTNYWF9SQVNURVJfUEhZU19CQVNFICsgMHg4MDAgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9mYl9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJlcDkzeHgtZmIiLAorCS5pZAkJCT0gLTEsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZlcDkzeHhmYl9kYXRhLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkuZG1hX21hc2sJCT0gJmVwOTN4eF9mYl9kZXZpY2UuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorCX0sCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShlcDkzeHhfZmJfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkJPSBlcDkzeHhfZmJfcmVzb3VyY2UsCit9OworCit2b2lkIF9faW5pdCBlcDkzeHhfcmVnaXN0ZXJfZmIoc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyAqZGF0YSkKK3sKKwllcDkzeHhmYl9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfZmJfZGV2aWNlKTsKK30KKwogZXh0ZXJuIHZvaWQgZXA5M3h4X2dwaW9faW5pdCh2b2lkKTsKIAogdm9pZCBfX2luaXQgZXA5M3h4X2luaXRfZGV2aWNlcyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAppbmRleCBlYTc4ZTkwLi4wZmJmODdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaApAQCAtNzAsNiArNzAsNyBAQAogI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAyMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VTQl9CQVNFCQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDIwMDAwKQogCisjZGVmaW5lIEVQOTNYWF9SQVNURVJfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDMwMDAwKQogI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCkBAIC0yMDcsNiArMjA4LDExIEBACiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0FEQ1BECSgxPDwyKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19LRVlTCSgxPDwxKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19TSEVOQQkoMTw8MCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9WSURDTEtESVYJCUVQOTNYWF9TWVNDT05fUkVHKDB4ODQpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLRElWX0VOQUJMRQkoMTw8MTUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLRElWX0VTRUwJKDE8PDE0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9QU0VMCSgxPDwxMykKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtESVZfUERJVl9TSElGVAk4CiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWCUVQOTNYWF9TWVNDT05fUkVHKDB4OTApCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX1RTRU4JKDE8PDMxKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9BRElWCSgxPDwxNikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9mYi5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhZTExZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9mYi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZmIuaAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9FUDkzWFhGQl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRVA5M1hYRkJfSAorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IGZiX3ZpZGVvbW9kZTsKK3N0cnVjdCBmYl9pbmZvOworCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9NT0RFREIJCTAKKworLyogVmlkZW9BdHRyaWJ1dGVzIGZsYWdzICovCisjZGVmaW5lIEVQOTNYWEZCX1NUQVRFX01BQ0hJTkVfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMX0NMT0NLX0VOQUJMRQkoMSA8PCAxKQorI2RlZmluZSBFUDkzWFhGQl9WU1lOQ19FTkFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMX0RBVEFfRU5BQkxFCSgxIDw8IDMpCisjZGVmaW5lIEVQOTNYWEZCX0NPTVBPU0lURV9TWU5DCQkoMSA8PCA0KQorI2RlZmluZSBFUDkzWFhGQl9TWU5DX1ZFUlRfSElHSAkJKDEgPDwgNSkKKyNkZWZpbmUgRVA5M1hYRkJfU1lOQ19IT1JJWl9ISUdICSgxIDw8IDYpCisjZGVmaW5lIEVQOTNYWEZCX1NZTkNfQkxBTktfSElHSAkoMSA8PCA3KQorI2RlZmluZSBFUDkzWFhGQl9QQ0xLX0ZBTExJTkcJCSgxIDw8IDgpCisjZGVmaW5lIEVQOTNYWEZCX0VOQUJMRV9BQwkJKDEgPDwgOSkKKyNkZWZpbmUgRVA5M1hYRkJfRU5BQkxFX0xDRAkJKDEgPDwgMTApCisjZGVmaW5lIEVQOTNYWEZCX0VOQUJMRV9DQ0lSCQkoMSA8PCAxMikKKyNkZWZpbmUgRVA5M1hYRkJfVVNFX1BBUkFMTEVMX0lOVEVSRkFDRQkoMSA8PCAxMykKKyNkZWZpbmUgRVA5M1hYRkJfRU5BQkxFX0lOVEVSUlVQVAkoMSA8PCAxNCkKKyNkZWZpbmUgRVA5M1hYRkJfVVNCX0lOVEVSTEFDRQkJKDEgPDwgMTYpCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9FUVVBTElaQVRJT04JKDEgPDwgMTcpCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9ET1VCTEVfSE9SWgkoMSA8PCAxOCkKKyNkZWZpbmUgRVA5M1hYRkJfVVNFX0RPVUJMRV9WRVJUCSgxIDw8IDE5KQorI2RlZmluZSBFUDkzWFhGQl9VU0VfQkxBTktfUElYRUwJKDEgPDwgMjApCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9TRENTTjAJCSgwIDw8IDIxKQorI2RlZmluZSBFUDkzWFhGQl9VU0VfU0RDU04xCQkoMSA8PCAyMSkKKyNkZWZpbmUgRVA5M1hYRkJfVVNFX1NEQ1NOMgkJKDIgPDwgMjEpCisjZGVmaW5lIEVQOTNYWEZCX1VTRV9TRENTTjMJCSgzIDw8IDIxKQorCisjZGVmaW5lIEVQOTNYWEZCX0VOQUJMRQkJCShFUDkzWFhGQl9TVEFURV9NQUNISU5FX0VOQUJMRQl8IFwKKwkJCQkJIEVQOTNYWEZCX1BJWEVMX0NMT0NLX0VOQUJMRQl8IFwKKwkJCQkJIEVQOTNYWEZCX1ZTWU5DX0VOQUJMRQkJfCBcCisJCQkJCSBFUDkzWFhGQl9QSVhFTF9EQVRBX0VOQUJMRSkKKworc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyB7CisJdW5zaWduZWQgaW50CQkJbnVtX21vZGVzOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUJKm1vZGVzOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUJKmRlZmF1bHRfbW9kZTsKKwlpbnQJCQkJYnBwOworCXVuc2lnbmVkIGludAkJCWZsYWdzOworCisJaW50CSgqc2V0dXApKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCXZvaWQJKCp0ZWFyZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisJdm9pZAkoKmJsYW5rKShpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRVA5M1hYRkJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCA1ZjVmYTY1Li4wMWEwZjA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNiw2ICs2LDcgQEAKIAogc3RydWN0IGkyY19ib2FyZF9pbmZvOwogc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm87CiAKIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEKIHsKQEAgLTMzLDYgKzM0LDcgQEAKIAogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfZXRoKHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGEsIGludCBjb3B5X2FkZHIpOwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7Cit2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mYihzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICpkYXRhKTsKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX3B3bShpbnQgcHdtMCwgaW50IHB3bTEpOwogaW50IGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogdm9pZCBlcDkzeHhfcHdtX3JlbGVhc2VfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKaW5kZXggZTcwYmFhNy4uZTZlODI5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KQEAgLTEwMiw2ICsxMDMsNyBAQAogCQkuY292ZXJfb25seQk9IHRydWUsCiAJCS5ncGlvX2NkCT0gMTYwLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJCS5wb3dlcl9zYXZpbmcJPSB0cnVlLAogCX0sCiAJewogCQkubmFtZQkJPSAiaW50ZXJuYWwiLApAQCAtMTA5LDYgKzExMSw4IEBACiAJCS53aXJlcwkJPSA4LAogCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwkJLm5vbnJlbW92YWJsZQk9IHRydWUsCisJCS5wb3dlcl9zYXZpbmcJPSB0cnVlLAogCX0sCiAJe30JLyogVGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggYTJlOTE1Ni4uYmNmY2ZjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTI1Nyw2ICsyNTcsMTEgQEAKICNkZWZpbmUgT01BUDJfTUNTUEkzX0JBU0UJCTB4NDgwYjgwMDAKICNkZWZpbmUgT01BUDJfTUNTUEk0X0JBU0UJCTB4NDgwYmEwMDAKIAorI2RlZmluZSBPTUFQNF9NQ1NQSTFfQkFTRQkJMHg0ODA5ODEwMAorI2RlZmluZSBPTUFQNF9NQ1NQSTJfQkFTRQkJMHg0ODA5YTEwMAorI2RlZmluZSBPTUFQNF9NQ1NQSTNfQkFTRQkJMHg0ODBiODEwMAorI2RlZmluZSBPTUFQNF9NQ1NQSTRfQkFTRQkJMHg0ODBiYTEwMAorCiBzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTFfY29uZmlnID0gewogCS5udW1fY3MJCT0gNCwKIH07CkBAIC0zMDEsNyArMzA2LDggQEAKIAl9LAogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgXAorCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiBzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTNfY29uZmlnID0gewogCS5udW1fY3MJCT0gMiwKIH07CkBAIC0zMjUsNyArMzMxLDcgQEAKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIHN0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnIG9tYXAyX21jc3BpNF9jb25maWcgPSB7CiAJLm51bV9jcwkJPSAxLAogfTsKQEAgLTM1MSwxNCArMzU3LDI1IEBACiAKIHN0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQogeworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkxX0JBU0U7CisJCW9tYXAyX21jc3BpMV9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkxX0JBU0UgKyAweGZmOworCQlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkyX0JBU0U7CisJCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkyX0JBU0UgKyAweGZmOworCQlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkzX0JBU0U7CisJCW9tYXAyX21jc3BpM19yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkzX0JBU0UgKyAweGZmOworCQlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEk0X0JBU0U7CisJCW9tYXAyX21jc3BpNF9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEk0X0JBU0UgKyAweGZmOworCX0KIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTIpOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0JaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzQzeCgpKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLQlpZiAoY3B1X2lzX29tYXAzNDN4KCkpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCiAJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGk0KTsKICNlbmRpZgogfQpAQCAtMzk3LDcgKzQxNCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAKICNkZWZpbmUgTU1DSFNfU1lTQ09ORklHCQkJMHgwMDEwCiAjZGVmaW5lIE1NQ0hTX1NZU0NPTkZJR19TV1JFU0VUCQkoMSA8PCAxKQpAQCAtNDI0LDggKzQ0MSw4IEBACiAgKiovCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oc21tY19yZXNldCh2b2lkKQogewotCXUzMiBpLCBucl9jb250cm9sbGVycyA9IGNwdV9pc19vbWFwMzR4eCgpID8gT01BUDM0WFhfTlJfTU1DIDoKLQkJT01BUDI0WFhfTlJfTU1DOworCXUzMiBpLCBucl9jb250cm9sbGVycyA9IGNwdV9pc19vbWFwNDR4eCgpID8gT01BUDQ0WFhfTlJfTU1DIDoKKwkJKGNwdV9pc19vbWFwMzR4eCgpID8gT01BUDM0WFhfTlJfTU1DIDogT01BUDI0WFhfTlJfTU1DKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9jb250cm9sbGVyczsgaSsrKSB7CiAJCXUzMiB2LCBiYXNlID0gMDsKQEAgLTQ0Miw4ICs0NTksMjEgQEAKIAkJY2FzZSAyOgogCQkJYmFzZSA9IE9NQVAzX01NQzNfQkFTRTsKIAkJCWJyZWFrOworCQljYXNlIDM6CisJCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQorCQkJCXJldHVybjsKKwkJCWJhc2UgPSBPTUFQNF9NTUM0X0JBU0U7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJCQlyZXR1cm47CisJCQliYXNlID0gT01BUDRfTU1DNV9CQVNFOworCQkJYnJlYWs7CiAJCX0KIAorCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCQliYXNlICs9IE9NQVA0X01NQ19SRUdfT0ZGU0VUOworCiAJCWR1bW15X3BkZXYuaWQgPSBpOwogCQlkZXZfc2V0X25hbWUoJmR1bW15X3BkZXYuZGV2LCAibW1jaS1vbWFwLWhzLiVkIiwgaSk7CiAJCWljbGsgPSBjbGtfZ2V0KGRldiwgImljayIpOwpAQCAtNTgxLDExICs2MTEsMjMgQEAKIAkJCWlycSA9IElOVF8yNFhYX01NQzJfSVJROwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkKIAkJCQlyZXR1cm47CiAJCQliYXNlID0gT01BUDNfTU1DM19CQVNFOwogCQkJaXJxID0gSU5UXzM0WFhfTU1DM19JUlE7CiAJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJCQlyZXR1cm47CisJCQliYXNlID0gT01BUDRfTU1DNF9CQVNFICsgT01BUDRfTU1DX1JFR19PRkZTRVQ7CisJCQlpcnEgPSBJTlRfNDRYWF9NTUM0X0lSUTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQorCQkJCXJldHVybjsKKwkJCWJhc2UgPSBPTUFQNF9NTUM1X0JBU0UgKyBPTUFQNF9NTUNfUkVHX09GRlNFVDsKKwkJCWlycSA9IElOVF80NFhYX01NQzVfSVJROworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNTkzLDggKzYzNSwxNSBAQAogCQlpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKIAkJCXNpemUgPSBPTUFQMjQyMF9NTUNfU0laRTsKIAkJCW5hbWUgPSAibW1jaS1vbWFwIjsKKwkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQkJaWYgKGkgPCAzKSB7CisJCQkJYmFzZSArPSBPTUFQNF9NTUNfUkVHX09GRlNFVDsKKwkJCQlpcnEgKz0gSVJRX0dJQ19TVEFSVDsKKwkJCX0KKwkJCXNpemUgPSBPTUFQNF9IU01NQ19TSVpFOworCQkJbmFtZSA9ICJtbWNpLW9tYXAtaHMiOwogCQl9IGVsc2UgewotCQkJc2l6ZSA9IEhTTU1DX1NJWkU7CisJCQlzaXplID0gT01BUDNfSFNNTUNfU0laRTsKIAkJCW5hbWUgPSAibW1jaS1vbWFwLWhzIjsKIAkJfQogCQlvbWFwX21tY19hZGQobmFtZSwgaSwgYmFzZSwgc2l6ZSwgaXJxLCBtbWNfZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKaW5kZXggM2MwNGMyZi4uYzljNTlhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYwpAQCAtMTk4LDYgKzE5OCwxOCBAQAogI2RlZmluZSB0d2xfbW1jX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpICYmIGRlZmluZWQoQ09ORklHX1BNKQorCitzdGF0aWMgaW50IHR3bDQwMzBfbW1jX2dldF9jb250ZXh0X2xvc3Moc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIEZJWE1FOiBQTSBEUFMgbm90IGltcGxlbWVudGVkIHlldCAqLworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSB0d2w0MDMwX21tY19nZXRfY29udGV4dF9sb3NzIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgaW50IHR3bF9tbWMxX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCiAJCQkJaW50IHZkZCkKIHsKQEAgLTMyOCw2ICszNDAsNjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHR3bF9tbWMxX3NldF9zbGVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsIGludCB2ZGQsCisJCQkgICAgICBpbnQgY2FyZHNsZWVwKQoreworCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMgPSAmaHNtbWNbMF07CisJaW50IG1vZGUgPSBzbGVlcCA/IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlkgOiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CisKKwlyZXR1cm4gcmVndWxhdG9yX3NldF9tb2RlKGMtPnZjYywgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgdHdsX21tYzIzX3NldF9zbGVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsIGludCB2ZGQsCisJCQkgICAgICAgaW50IGNhcmRzbGVlcCkKK3sKKwlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gTlVMTDsKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWludCBpLCBlcnIsIG1vZGU7CisKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShoc21tYyk7IGkrKykgeworCQlpZiAobW1jID09IGhzbW1jW2ldLm1tYykgeworCQkJYyA9ICZoc21tY1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IHNlZSBhIFZjYyByZWd1bGF0b3IsIGFzc3VtZSBpdCdzIGEgZml4ZWQKKwkgKiB2b2x0YWdlIGFsd2F5cy1vbiByZWd1bGF0b3IuCisJICovCisJaWYgKCFjLT52Y2MpCisJCXJldHVybiAwOworCisJbW9kZSA9IHNsZWVwID8gUkVHVUxBVE9SX01PREVfU1RBTkRCWSA6IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKworCWlmICghYy0+dmNjX2F1eCkKKwkJcmV0dXJuIHJlZ3VsYXRvcl9zZXRfbW9kZShjLT52Y2MsIG1vZGUpOworCisJaWYgKGNhcmRzbGVlcCkgeworCQkvKiBWQ0MgY2FuIGJlIHR1cm5lZCBvZmYgaWYgY2FyZCBpcyBhc2xlZXAgKi8KKwkJc3RydWN0IHJlZ3VsYXRvciAqdmNjX2F1eCA9IGMtPnZjY19hdXg7CisKKwkJYy0+dmNjX2F1eCA9IE5VTEw7CisJCWlmIChzbGVlcCkKKwkJCWVyciA9IHR3bF9tbWMyM19zZXRfcG93ZXIoZGV2LCBzbG90LCAwLCAwKTsKKwkJZWxzZQorCQkJZXJyID0gdHdsX21tYzIzX3NldF9wb3dlcihkZXYsIHNsb3QsIDEsIHZkZCk7CisJCWMtPnZjY19hdXggPSB2Y2NfYXV4OworCX0gZWxzZQorCQllcnIgPSByZWd1bGF0b3Jfc2V0X21vZGUoYy0+dmNjLCBtb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiByZWd1bGF0b3Jfc2V0X21vZGUoYy0+dmNjX2F1eCwgbW9kZSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqaHNtbWNfZGF0YVtPTUFQMzRYWF9OUl9NTUNdIF9faW5pdGRhdGE7CiAKIHZvaWQgX19pbml0IHR3bDQwMzBfbW1jX2luaXQoc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyAqY29udHJvbGxlcnMpCkBAIC0zOTAsNiArNDU3LDkgQEAKIAkJfSBlbHNlCiAJCQltbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSAtRUlOVkFMOwogCisJCW1tYy0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCA9CisJCQkJdHdsNDAzMF9tbWNfZ2V0X2NvbnRleHRfbG9zczsKKwogCQkvKiB3cml0ZSBwcm90ZWN0IG5vcm1hbGx5IHVzZXMgYW4gT01BUCBncGlvICovCiAJCWlmIChncGlvX2lzX3ZhbGlkKGMtPmdwaW9fd3ApKSB7CiAJCQlncGlvX3JlcXVlc3QoYy0+Z3Bpb193cCwgIm1tY193cCIpOwpAQCAtNDAwLDYgKzQ3MCwxMiBAQAogCQl9IGVsc2UKIAkJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IC1FSU5WQUw7CiAKKwkJaWYgKGMtPm5vbnJlbW92YWJsZSkKKwkJCW1tYy0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gMTsKKworCQlpZiAoYy0+cG93ZXJfc2F2aW5nKQorCQkJbW1jLT5zbG90c1swXS5wb3dlcl9zYXZpbmcgPSAxOworCiAJCS8qIE5PVEU6ICBNTUMgc2xvdHMgc2hvdWxkIGhhdmUgYSBWY2MgcmVndWxhdG9yIHNldCB1cC4KIAkJICogVGhpcyBtYXkgYmUgZnJvbSBhIFRXTDQwMzAtZmFtaWx5IGNoaXAsIGFub3RoZXIKIAkJICogY29udHJvbGxhYmxlIHJlZ3VsYXRvciwgb3IgYSBmaXhlZCBzdXBwbHkuCkBAIC00MTIsNiArNDg4LDcgQEAKIAkJY2FzZSAxOgogCQkJLyogb24tY2hpcCBsZXZlbCBzaGlmdGluZyB2aWEgUEJJQVMwL1BCSUFTMSAqLwogCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSB0d2xfbW1jMV9zZXRfcG93ZXI7CisJCQltbWMtPnNsb3RzWzBdLnNldF9zbGVlcCA9IHR3bF9tbWMxX3NldF9zbGVlcDsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQlpZiAoYy0+ZXh0X2Nsb2NrKQpAQCAtNDIyLDYgKzQ5OSw3IEBACiAJCWNhc2UgMzoKIAkJCS8qIG9mZi1jaGlwIGxldmVsIHNoaWZ0aW5nLCBvciBub25lICovCiAJCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IHR3bF9tbWMyM19zZXRfcG93ZXI7CisJCQltbWMtPnNsb3RzWzBdLnNldF9zbGVlcCA9IHR3bF9tbWMyM19zZXRfc2xlZXA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaAppbmRleCAzODA3YzQ1Li5hNDdlNjg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oCkBAIC0xMiw2ICsxMiw4IEBACiAJYm9vbAl0cmFuc2NlaXZlcjsJLyogTU1DLTIgb3B0aW9uICovCiAJYm9vbAlleHRfY2xvY2s7CS8qIHVzZSBleHRlcm5hbCBwaW4gZm9yIGlucHV0IGNsb2NrICovCiAJYm9vbAljb3Zlcl9vbmx5OwkvKiBObyBjYXJkIGRldGVjdCAtIGp1c3QgY292ZXIgc3dpdGNoICovCisJYm9vbAlub25yZW1vdmFibGU7CS8qIE5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KKwlib29sCXBvd2VyX3NhdmluZzsJLyogVHJ5IHRvIHNsZWVwIG9yIHBvd2VyIG9mZiB3aGVuIHBvc3NpYmxlICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwogCWNoYXIJKm5hbWU7CQkvKiBvciBOVUxMIGZvciBkZWZhdWx0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggZWEzNjE4Ni4uZjk4MjYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtNTk2LDggKzU5Niw4IEBACiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIk1lbW9yeTogJWx1S0IgYXZhaWxhYmxlICglZEsgY29kZSwgIgogCQkiJWRLIGRhdGEsICVkSyBpbml0LCAlbHVLIGhpZ2htZW0pXG4iLAotCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKLQkJY29kZXNpemUgPj4gMTAsIGRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwgY29kZXNpemUgPj4gMTAsCisJCWRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCwKIAkJKHVuc2lnbmVkIGxvbmcpICh0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKSk7CiAKIAlpZiAoUEFHRV9TSVpFID49IDE2Mzg0ICYmIG51bV9waHlzcGFnZXMgPD0gMTI4KSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3BpLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiZTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zcGkuaApAQCAtMCwwICsxLDI3IEBACisKKyNpZm5kZWYgX19NQUNIX1NQSV9IXworI2RlZmluZSBfX01BQ0hfU1BJX0hfCisKKy8qCisgKiBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgLSBkZXZpY2UucGxhdGZvcm1fZGF0YSBmb3IgU1BJIGNvbnRyb2xsZXIgZGV2aWNlcy4KKyAqIEBjaGlwc2VsZWN0OiBBcnJheSBvZiBjaGlwc2VsZWN0cyBmb3IgdGhpcyBtYXN0ZXIuIE51bWJlcnMgPj0gMCBtZWFuIGdwaW8KKyAqICAgICAgICAgICAgICBwaW5zLCBudW1iZXJzIDwgMCBtZWFuIGludGVybmFsIENTUEkgY2hpcHNlbGVjdHMgYWNjb3JkaW5nCisgKiAgICAgICAgICAgICAgdG8gTVhDX1NQSV9DUygpLiBOb3JtYWxseSB5b3Ugd2FudCB0byB1c2UgZ3BpbyBiYXNlZCBjaGlwCisgKiAgICAgICAgICAgICAgc2VsZWN0cyBhcyB0aGUgQ1NQSSBtb2R1bGUgdHJpZXMgdG8gYmUgaW50ZWxsaWdlbnQgYWJvdXQKKyAqICAgICAgICAgICAgICB3aGVuIHRvIGFzc2VydCB0aGUgY2hpcHNlbGVjdDogVGhlIENTUEkgbW9kdWxlIGRlYXNzZXJ0cyB0aGUKKyAqICAgICAgICAgICAgICBjaGlwc2VsZWN0IG9uY2UgaXQgcnVucyBvdXQgb2YgaW5wdXQgZGF0YS4gVGhlIG90aGVyIHByb2JsZW0KKyAqICAgICAgICAgICAgICBpcyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBtaXggYmV0d2VlbiBoaWdoIGFjdGl2ZSBhbmQgbG93CisgKiAgICAgICAgICAgICAgYWN0aXZlIGNoaXBzZWxlY3RzIG9uIG9uZSBzaW5nbGUgYnVzIHVzaW5nIHRoZSBpbnRlcm5hbAorICogICAgICAgICAgICAgIGNoaXBzZWxlY3RzLiBVbmZvcnR1bmF0ZWx5IEZyZWVzY2FsZSBkZWNpZGVkIHRvIHB1dCBzb21lCisgKiAgICAgICAgICAgICAgY2hpcHNlbGVjdHMgb24gZGVkaWNhdGVkIHBpbnMgd2hpY2ggYXJlIG5vdCB1c2FibGUgYXMgZ3Bpb3MsCisgKiAgICAgICAgICAgICAgc28gd2UgaGF2ZSB0byBzdXBwb3J0IHRoZSBpbnRlcm5hbCBjaGlwc2VsZWN0cy4KKyAqIEBudW1fY2hpcHNlbGVjdDogQVJSQVlfU0laRShjaGlwc2VsZWN0KQorICovCitzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgeworCWludAkqY2hpcHNlbGVjdDsKKwlpbnQJbnVtX2NoaXBzZWxlY3Q7Cit9OworCisjZGVmaW5lIE1YQ19TUElfQ1Mobm8pCSgobm8pIC0gMzIpCisKKyNlbmRpZiAvKiBfX01BQ0hfU1BJX0hfKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggZmI3Y2I3Ny4uMjhhMTY1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTUwMyw2ICs1MDMsNyBAQAogI2RlZmluZSBJTlRfNDRYWF9GUEtBX1JFQURZX0lSUQkoNTAgKyBJUlFfR0lDX1NUQVJUKQogI2RlZmluZSBJTlRfNDRYWF9TSEExTUQ1MV9JUlEJKDUxICsgSVJRX0dJQ19TVEFSVCkKICNkZWZpbmUgSU5UXzQ0WFhfUk5HX0lSUQkoNTIgKyBJUlFfR0lDX1NUQVJUKQorI2RlZmluZSBJTlRfNDRYWF9NTUM1X0lSUQkoNTkgKyBJUlFfR0lDX1NUQVJUKQogI2RlZmluZSBJTlRfNDRYWF9JMkMzX0lSUQkoNjEgKyBJUlFfR0lDX1NUQVJUKQogI2RlZmluZSBJTlRfNDRYWF9GUEtBX0VSUk9SX0lSUQkoNjQgKyBJUlFfR0lDX1NUQVJUKQogI2RlZmluZSBJTlRfNDRYWF9QQklBU19JUlEJKDc1ICsgSVJRX0dJQ19TVEFSVCkKQEAgLTUxMSw2ICs1MTIsNyBAQAogI2RlZmluZSBJTlRfNDRYWF9UTExfSVJRCSg3OCArIElSUV9HSUNfU1RBUlQpCiAjZGVmaW5lIElOVF80NFhYX1BBUlRIQVNIX0lSUQkoNzkgKyBJUlFfR0lDX1NUQVJUKQogI2RlZmluZSBJTlRfNDRYWF9NTUMzX0lSUQkoOTQgKyBJUlFfR0lDX1NUQVJUKQorI2RlZmluZSBJTlRfNDRYWF9NTUM0X0lSUQkoOTYgKyBJUlFfR0lDX1NUQVJUKQogCiAKIC8qIE1heC4gMTI4IGxldmVsIDIgSVJRcyAoT01BUDE2MTApLCAxOTIgR1BJT3MgKE9NQVA3MzAvODUwKSBhbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbGNkX21pcGlkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2xjZF9taXBpZC5oCmluZGV4IGY4ZmJjNDguLjhlNTJjNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbGNkX21pcGlkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9sY2RfbWlwaWQuaApAQCAtMTYsNyArMTYsMTIgQEAKIHN0cnVjdCBtaXBpZF9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQJbnJlc2V0X2dwaW87CiAJaW50CWRhdGFfbGluZXM7CisKIAl2b2lkCSgqc2h1dGRvd24pKHN0cnVjdCBtaXBpZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisJdm9pZAkoKnNldF9ia2xpZ2h0X2xldmVsKShzdHJ1Y3QgbWlwaWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEsCisJCQkJICAgICBpbnQgbGV2ZWwpOworCWludAkoKmdldF9ia2xpZ2h0X2xldmVsKShzdHJ1Y3QgbWlwaWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCWludAkoKmdldF9ia2xpZ2h0X21heCkoc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbW1jLmgKaW5kZXggODFkNWIzNi4uNzIyOWI5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oCkBAIC0yNSwxMSArMjUsMTggQEAKIAogI2RlZmluZSBPTUFQMjRYWF9OUl9NTUMJCTIKICNkZWZpbmUgT01BUDM0WFhfTlJfTU1DCQkzCisjZGVmaW5lIE9NQVA0NFhYX05SX01NQwkJNQogI2RlZmluZSBPTUFQMjQyMF9NTUNfU0laRQlPTUFQMV9NTUNfU0laRQotI2RlZmluZSBIU01NQ19TSVpFCQkweDIwMAorI2RlZmluZSBPTUFQM19IU01NQ19TSVpFCTB4MjAwCisjZGVmaW5lIE9NQVA0X0hTTU1DX1NJWkUJMHgxMDAwCiAjZGVmaW5lIE9NQVAyX01NQzFfQkFTRQkJMHg0ODA5YzAwMAogI2RlZmluZSBPTUFQMl9NTUMyX0JBU0UJCTB4NDgwYjQwMDAKICNkZWZpbmUgT01BUDNfTU1DM19CQVNFCQkweDQ4MGFkMDAwCisjZGVmaW5lIE9NQVA0X01NQzRfQkFTRQkJMHg0ODBkMTAwMAorI2RlZmluZSBPTUFQNF9NTUM1X0JBU0UJCTB4NDgwZDUwMDAKKyNkZWZpbmUgT01BUDRfTU1DX1JFR19PRkZTRVQJMHgxMDAKKyNkZWZpbmUgSFNNTUM1CQkJKDEgPDwgNCkKKyNkZWZpbmUgSFNNTUM0CQkJKDEgPDwgMykKICNkZWZpbmUgSFNNTUMzCQkJKDEgPDwgMikKICNkZWZpbmUgSFNNTUMyCQkJKDEgPDwgMSkKICNkZWZpbmUgSFNNTUMxCQkJKDEgPDwgMCkKQEAgLTU5LDYgKzY2LDkgQEAKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwogCisJLyogUmV0dXJuIGNvbnRleHQgbG9zcyBjb3VudCBkdWUgdG8gUE0gc3RhdGVzIGNoYW5naW5nICovCisJaW50ICgqZ2V0X2NvbnRleHRfbG9zc19jb3VudCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwogCXU2NCBkbWFfbWFzazsKIAogCXN0cnVjdCBvbWFwX21tY19zbG90X2RhdGEgewpAQCAtODAsMTIgKzkwLDIwIEBACiAJCS8qIHVzZSB0aGUgaW50ZXJuYWwgY2xvY2sgKi8KIAkJdW5zaWduZWQgaW50ZXJuYWxfY2xvY2s6MTsKIAorCQkvKiBub25yZW1vdmFibGUgZS5nLiBlTU1DICovCisJCXVuc2lnbmVkIG5vbnJlbW92YWJsZToxOworCisJCS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLworCQl1bnNpZ25lZCBwb3dlcl9zYXZpbmc6MTsKKwogCQlpbnQgc3dpdGNoX3BpbjsJCQkvKiBncGlvIChjYXJkIGRldGVjdCkgKi8KIAkJaW50IGdwaW9fd3A7CQkJLyogZ3BpbyAod3JpdGUgcHJvdGVjdCkgKi8KIAogCQlpbnQgKCogc2V0X2J1c19tb2RlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgYnVzX21vZGUpOwogCQlpbnQgKCogc2V0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpOwogCQlpbnQgKCogZ2V0X3JvKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKKwkJaW50ICgqc2V0X3NsZWVwKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsCisJCQkJIGludCB2ZGQsIGludCBjYXJkc2xlZXApOwogCiAJCS8qIHJldHVybiBNTUMgY292ZXIgc3dpdGNoIHN0YXRlLCBjYW4gYmUgTlVMTCBpZiBub3Qgc3VwcG9ydGVkLgogCQkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwZmIuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcGZiLmgKaW5kZXggN2I3NGQxMi4uYjIyNmJkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwZmIuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oCkBAIC0yNzYsOCArMjc2LDggQEAKIAkJCQkJICB2b2lkICpmYmkpOwogCiBzdHJ1Y3Qgb21hcGZiX21lbV9yZWdpb24gewotCWRtYV9hZGRyX3QJcGFkZHI7Ci0Jdm9pZAkJKnZhZGRyOworCXUzMgkJcGFkZHI7CisJdm9pZCBfX2lvbWVtCSp2YWRkcjsKIAl1bnNpZ25lZCBsb25nCXNpemU7CiAJdTgJCXR5cGU7CQkvKiBPTUFQRkJfUExBTkVfTUVNXyogKi8KIAl1bnNpZ25lZAlhbGxvYzoxOwkvKiBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA5YTkyYjE1Li44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtMSwxNyArMSBAQAotI2lmbmRlZiBfX0FTTV9BVlIzMl9NTUFOX0hfXwotI2RlZmluZSBfX0FTTV9BVlIzMl9NTUFOX0hfXwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZSB0YWJsZXMgKi8KLSNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLwotCi0jZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KLSNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KLQotI2VuZGlmIC8qIF9fQVNNX0FWUjMyX01NQU5fSF9fICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9pbml0LmMgYi9hcmNoL2F2cjMyL21tL2luaXQuYwppbmRleCBlODE5ZmE2Li4zNzZmMThjIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21tL2luaXQuYworKysgYi9hcmNoL2F2cjMyL21tL2luaXQuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAKIAlwcmludGsgKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgIgogCQkiJWRrIHJlc2VydmVkLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZylucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQgLSAxMCksCisJCW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVCAtIDEwKSwKIAkJdG90YWxyYW1fcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCksCiAJCWNvZGVzaXplID4+IDEwLAogCQlyZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IGU3ZmQwZWMuLmFlNGRhZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKQEAgLTEsOSArMSw2IEBACiAjaWZuZGVmIF9CTEFDS0ZJTl9TRUNUSU9OU19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TRUNUSU9OU19ICiAKLS8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KLQogLyogb25seSB1c2VkIHdoZW4gTVREX1VDTElOVVggKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9tdGRfc3RhcnQsIG1lbW9yeV9tdGRfZW5kLCBtdGRfc2l6ZTsKIApAQCAtMTUsNCArMTIsMzkgQEAKIAlfc3RleHRfbDJbXSwgX2V0ZXh0X2wyW10sIF9zZGF0YV9sMltdLCBfZWRhdGFfbDJbXSwgX3Nic3NfbDJbXSwKIAlfZWJzc19sMltdLCBfbDJfbG1hX3N0YXJ0W107CiAKKyNpbmNsdWRlIDxhc20vbWVtX21hcC5oPgorCisvKiBCbGFja2ZpbiBzeXN0ZW1zIGhhdmUgZGlzY29udGludW91cyBtZW1vcnkgbWFwIGFuZCBubyB2aXJ0dWFsaXplZCBtZW1vcnkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXNfa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybgorCQkoTDFfQ09ERV9MRU5HVEggJiYKKwkJIGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0X2wxICYmCisJCSBhZGRyIDwgICh1bnNpZ25lZCBsb25nKV9ldGV4dF9sMSkKKwkJfHwKKwkJKEwyX0xFTkdUSCAmJgorCQkgYWRkciA+PSAodW5zaWduZWQgbG9uZylfc3RleHRfbDIgJiYKKwkJIGFkZHIgPCAgKHVuc2lnbmVkIGxvbmcpX2V0ZXh0X2wyKTsKK30KKyNkZWZpbmUgYXJjaF9pc19rZXJuZWxfdGV4dChhZGRyKSBhcmNoX2lzX2tlcm5lbF90ZXh0KGFkZHIpCisKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXNfa2VybmVsX2RhdGEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybgorCQkoTDFfREFUQV9BX0xFTkdUSCAmJgorCQkgYWRkciA+PSAodW5zaWduZWQgbG9uZylfc2RhdGFfbDEgJiYKKwkJIGFkZHIgPCAgKHVuc2lnbmVkIGxvbmcpX2Vic3NfbDEpCisJCXx8CisJCShMMV9EQVRBX0JfTEVOR1RIICYmCisJCSBhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zZGF0YV9iX2wxICYmCisJCSBhZGRyIDwgICh1bnNpZ25lZCBsb25nKV9lYnNzX2JfbDEpCisJCXx8CisJCShMMl9MRU5HVEggJiYKKwkJIGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3NkYXRhX2wyICYmCisJCSBhZGRyIDwgICh1bnNpZ25lZCBsb25nKV9lYnNzX2wyKTsKK30KKyNkZWZpbmUgYXJjaF9pc19rZXJuZWxfZGF0YShhZGRyKSBhcmNoX2lzX2tlcm5lbF9kYXRhKGFkZHIpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGM4ZTdlZTQuLjAyYjE1MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzgxLDcgKzM4MSw3IEBACiAjZGVmaW5lIF9fTlJfcHJlYWR2CQkzNjYKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzNjcKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzNjgKLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkzNjkKKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzY5CiAKICNkZWZpbmUgX19OUl9zeXNjYWxsCQkzNzAKICNkZWZpbmUgTlJfc3lzY2FsbHMJCV9fTlJfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCmluZGV4IGJkYzMzMGMuLjFjNTg5MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKQEAgLTIzMjUsNyArMjMyNSw3IEBACiAjZGVmaW5lCUFNQkVOX0IwX0IxCTB4MDAwNAkvKiBFbmFibGUgQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rcyAwICYJMSBvbmx5ICovCiAjZGVmaW5lCUFNQkVOX0IwX0IxX0IyCTB4MDAwNgkvKiBFbmFibGUgQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rcyAwLCAxLCBhbmQgMiAqLwogI2RlZmluZQlBTUJFTl9BTEwJMHgwMDA4CS8qIEVuYWJsZSBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmtzIChhbGwpIDAsIDEsCTIsIGFuZCAzICovCi0jZGVmaW5lCUNEUFJJTwkJMHgwMTAwCS8qIERNQSBoYXMgcHJpb3JpdHkgb3ZlciBjb3JlIGZvciBmb3IgZXh0ZXJuYWwgYWNjZXNzZXMgKi8KKyNkZWZpbmUJQ0RQUklPCQkweDAxMDAJLyogRE1BIGhhcyBwcmlvcml0eSBvdmVyIGNvcmUgZm9yIGV4dGVybmFsIGFjY2Vzc2VzICovCiAKIC8qIEVCSVVfQU1HQ1RMIEJpdCBQb3NpdGlvbnMgKi8KICNkZWZpbmUJQU1DS0VOX1AJCTB4MDAwMAkvKiBFbmFibGUgQ0xLT1VUICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKaW5kZXggMDFhZjI0Yy4uMWU3Y2FjMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwpAQCAtMTYyMCw3ICsxNjIwLDcgQEAKIAkubG9uZyBfc3lzX3ByZWFkdgogCS5sb25nIF9zeXNfcHdyaXRldgogCS5sb25nIF9zeXNfcnRfdGdzaWdxdWV1ZWluZm8KLQkubG9uZyBfc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLmxvbmcgX3N5c19wZXJmX2V2ZW50X29wZW4KIAogCS5yZXB0IE5SX3N5c2NhbGxzLSguLV9zeXNfY2FsbF90YWJsZSkvNAogCS5sb25nIF9zeXNfbmlfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggYjdmMGFmYi4uOGVlYmY4OSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE5ICsxIEBACi0jaWZuZGVmIF9fQ1JJU19NTUFOX0hfXwotI2RlZmluZSBfX0NSSVNfTU1BTl9IX18KLQotLyogdmVyYmF0aW0gY29weSBvZiBhc20taTM4Ni8gdmVyc2lvbiAqLwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogX19DUklTX01NQU5fSF9fICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL21tL2luaXQuYyBiL2FyY2gvY3Jpcy9tbS9pbml0LmMKaW5kZXggNTE0ZjQ2YS4uZmY2OGI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL21tL2luaXQuYworKysgYi9hcmNoL2NyaXMvbW0vaW5pdC5jCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIHByaW50ayhLRVJOX0lORk8KICAgICAgICAgICAgICAgICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2VydmVkLCAlZGsgZGF0YSwgIgogCSAgICAgICAiJWRrIGluaXQpXG4iICwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCisJICAgICAgIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIG1heF9tYXBuciA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGNvZGVzaXplID4+IDEwLAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L0tjb25maWcgYi9hcmNoL2Zydi9LY29uZmlnCmluZGV4IGI4NmUxOWMuLjRiNTgzMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L0tjb25maWcKKysrIGIvYXJjaC9mcnYvS2NvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwotCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCiBjb25maWcgWk9ORV9ETUEKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9nZGItc3R1Yi5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vZ2RiLXN0dWIuaAppbmRleCAyNGY5NzM4Li4yZGE3MTY0IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9nZGItc3R1Yi5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2dkYi1zdHViLmgKQEAgLTkwLDcgKzkwLDYgQEAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgX19kZWJ1Z19zdHViX2luaXRfYnJlYWsodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIF9fYnJlYWtfaGlqYWNrX2tlcm5lbF9ldmVudCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgX19icmVha19oaWphY2tfa2VybmVsX2V2ZW50X2JyZWFrc19oZXJlKHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzdGFydF9rZXJuZWwodm9pZCk7CiAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgZ2Ric3R1Yl9yeF9oYW5kbGVyKHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBnZGJzdHViX3J4X2lycSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA1OGMxZDExLi44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE4ICsxIEBACi0jaWZuZGVmIF9fQVNNX01NQU5fSF9fCi0jZGVmaW5lIF9fQVNNX01NQU5fSF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLQotI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCi0jZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCi0KLSNlbmRpZiAvKiBfX0FTTV9NTUFOX0hfXyAqLwotCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmNzI2ZS4uMDAwMDAwMAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIEZSViBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfQVNNX1BFUkZfQ09VTlRFUl9ICi0jZGVmaW5lIF9BU01fUEVSRl9DT1VOVEVSX0gKLQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUCTAKLQotI2VuZGlmIC8qIF9BU01fUEVSRl9DT1VOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2xpYi9wZXJmX2NvdW50ZXIuYyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApzaW1pbGFyaXR5IGluZGV4IDcwJQpjb3B5IGZyb20gYXJjaC9mcnYvbGliL3BlcmZfY291bnRlci5jCmNvcHkgdG8gYXJjaC9mcnYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCmluZGV4IDIwMDBmZWUuLmE2OWUwMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2xpYi9wZXJmX2NvdW50ZXIuYworKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTEsNCArMSw0IEBACi0vKiBQZXJmb3JtYW5jZSBjb3VudGVyIGhhbmRsaW5nCisvKiBGUlYgcGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCkBAIC05LDExICs5LDkgQEAKICAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2lmbmRlZiBfQVNNX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfQVNNX1BFUkZfRVZFTlRfSAogCi0vKgotICogbWFyayB0aGUgcGVyZm9ybWFuY2UgY291bnRlciBhcyBwZW5kaW5nCi0gKi8KLXZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCi17Ci19CisjZGVmaW5lIFBFUkZfRVZFTlRfSU5ERVhfT0ZGU0VUCTAKKworI2VuZGlmIC8qIF9BU01fUEVSRl9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDRhOGZiNDIuLmJlNmVmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNDIsNyArMzQyLDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCTMzMwogI2RlZmluZSBfX05SX3B3cml0ZXYJCTMzNAogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMzNQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCTMzNgorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzMzYKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2RlYnVnLXN0dWIuYyBiL2FyY2gvZnJ2L2tlcm5lbC9kZWJ1Zy1zdHViLmMKaW5kZXggMmY2YzYwYy4uMjg0NTEzOSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2RlYnVnLXN0dWIuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvZGVidWctc3R1Yi5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXJ0X2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zZXJpYWwtcmVncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwppbmRleCBmZGUxZTQ0Li4xODkzOTdlIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwpAQCAtMTUyNSw2ICsxNTI1LDYgQEAKIAkubG9uZyBzeXNfcHJlYWR2CiAJLmxvbmcgc3lzX3B3cml0ZXYKIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogMzM1ICovCi0JLmxvbmcgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgogCiBzeXNjYWxsX3RhYmxlX3NpemUgPSAoLiAtIHN5c19jYWxsX3RhYmxlKQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbGliL01ha2VmaWxlIGIvYXJjaC9mcnYvbGliL01ha2VmaWxlCmluZGV4IDBhMzc3MjEuLmY0NzA5NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL2Zydi9saWIvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiBsaWIteSA6PSBcCiAJX19hc2hsZGkzLm8gX19sc2hyZGkzLm8gX19tdWxkaTMubyBfX2FzaHJkaTMubyBfX25lZ2RpMi5vIF9fdWNtcGRpMi5vIFwKIAljaGVja3N1bS5vIG1lbWNweS5vIG1lbXNldC5vIGF0b21pYy1vcHMubyBhdG9taWM2NC1vcHMubyBcCi0Jb3V0c2xfbnMubyBvdXRzbF9zdy5vIGluc2xfbnMubyBpbnNsX3N3Lm8gY2FjaGUubyBwZXJmX2NvdW50ZXIubworCW91dHNsX25zLm8gb3V0c2xfc3cubyBpbnNsX25zLm8gaW5zbF9zdy5vIGNhY2hlLm8gcGVyZl9ldmVudC5vCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9saWIvY2FjaGUuUyBiL2FyY2gvZnJ2L2xpYi9jYWNoZS5TCmluZGV4IDBlMTBhZDguLjBjNGZiMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2xpYi9jYWNoZS5TCisrKyBiL2FyY2gvZnJ2L2xpYi9jYWNoZS5TCkBAIC0xLDQgKzEsNCBAQAotLyogY2FjaGUuUzogY2FjaGUgbWFuYWdtZW50IHJvdXRpbmVzCisvKiBjYWNoZS5TOiBjYWNoZSBtYW5hZ2VtZW50IHJvdXRpbmVzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2xpYi9wZXJmX2NvdW50ZXIuYyBiL2FyY2gvZnJ2L2xpYi9wZXJmX2V2ZW50LmMKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gYXJjaC9mcnYvbGliL3BlcmZfY291bnRlci5jCnJlbmFtZSB0byBhcmNoL2Zydi9saWIvcGVyZl9ldmVudC5jCmluZGV4IDIwMDBmZWUuLjlhYzVhY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2xpYi9wZXJmX2NvdW50ZXIuYworKysgYi9hcmNoL2Zydi9saWIvcGVyZl9ldmVudC5jCkBAIC0xLDQgKzEsNCBAQAotLyogUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZworLyogUGVyZm9ybWFuY2UgZXZlbnQgaGFuZGxpbmcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQpAQCAtOSwxMSArOSwxMSBAQAogICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAvKgotICogbWFyayB0aGUgcGVyZm9ybWFuY2UgY291bnRlciBhcyBwZW5kaW5nCisgKiBtYXJrIHRoZSBwZXJmb3JtYW5jZSBldmVudCBhcyBwZW5kaW5nCiAgKi8KLXZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCit2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggOWQ3ZjdhNy4uYzJlMWFhMCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEsMTggKzEsNyBAQAogI2lmbmRlZiBfX0g4MzAwX0hBUkRJUlFfSAogI2RlZmluZSBfX0g4MzAwX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KLWV4dGVybiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOworI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2RlZmluZSBIQVJESVJRX0JJVFMJOAogCkBAIC0yNSw0ICsxNCw2IEBACiAjIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQogI2VuZGlmCiAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCBjZjM1ZjBhLi44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtMSwxNyArMSBAQAotI2lmbmRlZiBfX0g4MzAwX01NQU5fSF9fCi0jZGVmaW5lIF9fSDgzMDBfTU1BTl9IX18KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4tY29tbW9uLmg+Ci0KLSNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAxMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLwotI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLwotI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLwotI2RlZmluZSBNQVBfTE9DS0VECTB4MjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLwotI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4NDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLwotI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KLSNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLwotCi0jZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KLSNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KLQotI2VuZGlmIC8qIF9fSDgzMDBfTU1BTl9IX18gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYyBiL2FyY2gvaDgzMDAva2VybmVsL2lycS5jCmluZGV4IDc0ZjhkZDcuLjVjOTEzZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL2lycS5jCkBAIC04MSwxMSArODEsNiBAQAogCS5lbmQJCT0gaDgzMDBfZW5kX2lycSwKIH07CiAKLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlwcmludGsoInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7Ci19Ci0KICNpZiBkZWZpbmVkKENPTkZJR19SQU1LRVJORUwpCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgKmdldF92ZWN0b3JfYWRkcmVzcyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYwppbmRleCBlN2M2ZTYxLi4yMTkzYTJlIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYwpAQCAtNyw3ICs3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggMDExYTFjZC4uNjg1MWU1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTUwMCw2ICs1MDAsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBOVU1BCiAKK2NvbmZpZyBBUkNIX1BST0NfS0NPUkVfVEVYVAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFBST0NfS0NPUkUKKwogY29uZmlnIElBMzJfU1VQUE9SVAogCWJvb2wgIlN1cHBvcnQgZm9yIExpbnV4L3g4NiBiaW5hcmllcyIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCA4Y2ZiMDAxLi42NzRhODM3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTIwMjYsMjQgKzIwMjYsMjEgQEAKIAlzdHJ1Y3QgaW9jICppb2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU2NCBocGEsIGxlbmd0aDsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyOwogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICpkZXZfaW5mbzsKIAogCXN0YXR1cyA9IGhwX2FjcGlfY3NyX3NwYWNlKGRldmljZS0+aGFuZGxlLCAmaHBhLCAmbGVuZ3RoKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAxOwogCi0JYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSOwotCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGRldmljZS0+aGFuZGxlLCAmYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhkZXZpY2UtPmhhbmRsZSwgJmRldl9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAxOwotCWRldl9pbmZvID0gYnVmZmVyLnBvaW50ZXI7CiAKIAkvKgogCSAqIEZvciBIV1AwMDAxLCBvbmx5IFNCQSBhcHBlYXJzIGluIEFDUEkgbmFtZXNwYWNlLiAgSXQgZW5jbG9zZXMgdGhlIFBDSQogCSAqIHJvb3QgYnJpZGdlcywgYW5kIGl0cyBDU1Igc3BhY2UgaW5jbHVkZXMgdGhlIElPQyBmdW5jdGlvbi4KIAkgKi8KLQlpZiAoc3RybmNtcCgiSFdQMDAwMSIsIGRldl9pbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwgNykgPT0gMCkgeworCWlmIChzdHJuY21wKCJIV1AwMDAxIiwgZGV2X2luZm8tPmhhcmR3YXJlX2lkLnN0cmluZywgNykgPT0gMCkgewogCQlocGEgKz0gWlgxX0lPQ19PRkZTRVQ7CiAJCS8qIHp4MSBiYXNlZCBzeXN0ZW1zIGRlZmF1bHQgdG8ga2VybmVsIHBhZ2Ugc2l6ZSBpb21tdSBwYWdlcyAqLwogCQlpZiAoIWlvdnBfc2hpZnQpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwppbmRleCAxNmVmNjFhLi42MjVlZDhmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKQEAgLTEyNzAsNyArMTI3MCw3IEBACiAJICAgICAgY2FzZSBQVF9DUzoKIAkJaWYgKHZhbHVlICE9IF9fVVNFUl9DUykKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJpYTMyLnB1dHJlZzogYXR0ZW1wdCB0byB0byBzZXQgaW52YWxpZCBzZWdtZW50IHJlZ2lzdGVyICVkID0gJXhcbiIsCisJCQkgICAgICAgImlhMzIucHV0cmVnOiBhdHRlbXB0IHRvIHNldCBpbnZhbGlkIHNlZ21lbnQgcmVnaXN0ZXIgJWQgPSAleFxuIiwKIAkJCSAgICAgICByZWdubywgdmFsdWUpOwogCQlicmVhazsKIAkgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggZDIwYjk5OC4uN2ZhOGE4NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC0zMCw2ICszMCw3IEBACiB0eXBlZGVmIHU2NCBjcHV0aW1lNjRfdDsKIAogI2RlZmluZSBjcHV0aW1lX3plcm8JCQkoKGNwdXRpbWVfdCkwKQorI2RlZmluZSBjcHV0aW1lX29uZV9qaWZmeQkJamlmZmllc190b19jcHV0aW1lKDEpCiAjZGVmaW5lIGNwdXRpbWVfbWF4CQkJKCh+KChjcHV0aW1lX3QpMCkgPj4gMSkgLSAxKQogI2RlZmluZSBjcHV0aW1lX2FkZChfX2EsIF9fYikJCSgoX19hKSArICAoX19iKSkKICNkZWZpbmUgY3B1dGltZV9zdWIoX19hLCBfX2IpCQkoKF9fYSkgLSAgKF9fYikpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA0OGNmOGI5Li40NDU5MDI4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTgsMTkgKzgsOSBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvCiAgKi8KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4tY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgogCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9HUk9XU1VQCTB4MDAyMDAJCS8qIHJlZ2lzdGVyIHN0YWNrLWxpa2Ugc2VnbWVudCAqLwotI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgwMTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgwMjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLwotI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4MDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworI2RlZmluZSBNQVBfR1JPV1NVUAkweDAyMDAJCS8qIHJlZ2lzdGVyIHN0YWNrLWxpa2Ugc2VnbWVudCAqLwogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYwppbmRleCAyMjNhYmIxLi4yODVhYWU4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BjaS1zd2lvdGxiLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCkBAIC00Niw3ICs0Niw3IEBACiAKIHZvaWQgX19pbml0IHBjaV9zd2lvdGxiX2luaXQodm9pZCkKIHsKLQlpZiAoIWlvbW11X2RldGVjdGVkIHx8IGlvbW11X3Bhc3NfdGhyb3VnaCkgeworCWlmICghaW9tbXVfZGV0ZWN0ZWQpIHsKICNpZmRlZiBDT05GSUdfSUE2NF9HRU5FUklDCiAJCXN3aW90bGIgPSAxOwogCQlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiBSZS1pbml0aWFsaXplIG1hY2hpbmUgdmVjdG9yLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW5pdC5jIGIvYXJjaC9pYTY0L21tL2luaXQuYwppbmRleCBiMTE1YjNiLi4xODU3NzY2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKQEAgLTYxNyw3ICs2MTcsNiBAQAogCWxvbmcgcmVzZXJ2ZWRfcGFnZXMsIGNvZGVzaXplLCBkYXRhc2l6ZSwgaW5pdHNpemU7CiAJcGdfZGF0YV90ICpwZ2RhdDsKIAlpbnQgaTsKLQlzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWVtLCBrY29yZV9rZXJuZWw7CiAKIAlCVUdfT04oUFRSU19QRVJfUEdEICogc2l6ZW9mKHBnZF90KSAhPSBQQUdFX1NJWkUpOwogCUJVR19PTihQVFJTX1BFUl9QTUQgKiBzaXplb2YocG1kX3QpICE9IFBBR0VfU0laRSk7CkBAIC02MzksMTAgKzYzOCw2IEBACiAKIAloaWdoX21lbW9yeSA9IF9fdmEobWF4X2xvd19wZm4gKiBQQUdFX1NJWkUpOwogCi0Ja2NsaXN0X2FkZCgma2NvcmVfbWVtLCBfX3ZhKDApLCBtYXhfbG93X3BmbiAqIFBBR0VfU0laRSk7Ci0Ja2NsaXN0X2FkZCgma2NvcmVfdm1lbSwgKHZvaWQgKilWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORC1WTUFMTE9DX1NUQVJUKTsKLQlrY2xpc3RfYWRkKCZrY29yZV9rZXJuZWwsIF9zdGV4dCwgX2VuZCAtIF9zdGV4dCk7Ci0KIAlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpCiAJCWlmIChwZ2RhdC0+YmRhdGEtPm5vZGVfYm9vdG1lbV9tYXApCiAJCQl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290bWVtX25vZGUocGdkYXQpOwpAQCAtNjU1LDcgKzY1MCw3IEBACiAJaW5pdHNpemUgPSAgKHVuc2lnbmVkIGxvbmcpIF9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykgX19pbml0X2JlZ2luOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglbHVrIGNvZGUsICVsdWsgcmVzZXJ2ZWQsICIKLQkgICAgICAgIiVsdWsgZGF0YSwgJWx1ayBpbml0KVxuIiwgKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVCAtIDEwKSwKKwkgICAgICAgIiVsdWsgZGF0YSwgJWx1ayBpbml0KVxuIiwgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZUIC0gMTApLAogCSAgICAgICBudW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApLCBjb2Rlc2l6ZSA+PiAxMCwKIAkgICAgICAgcmVzZXJ2ZWRfcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCksIGRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggY2FiYmEzMy4uYzQxMjM0ZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTQxLDYgKzQxLDEyIEBACiAJaW50CiAJZGVmYXVsdCAxMDAKIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWRlZl9ib29sIHkKKworY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggY2I4YWE3Ni4uNGMzMWMwYSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0yLDE0ICsyLDcgQEAKICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaWYgTlJfSVJRUyA+IDI1NgogI2RlZmluZSBIQVJESVJRX0JJVFMJOQpAQCAtMjYsMTEgKzE5LDcgQEAKICMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIGFja19iYWRfaXJxKGludCBpcnEpCi17Ci0JcHJpbnRrKEtFUk5fQ1JJVCAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKLQlCVUcoKTsKLX0KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CiAKICNlbmRpZiAvKiBfX0FTTV9IQVJESVJRX0ggKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCAwNGE1ZjQwLi44ZWViZjg5IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTEsMTcgKzEgQEAKLSNpZm5kZWYgX19NMzJSX01NQU5fSF9fCi0jZGVmaW5lIF9fTTMyUl9NTUFOX0hfXwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLwotCi0jZW5kaWYgLyogX19NMzJSX01NQU5fSF9fICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTMyci9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOThiOGZlYi4uOTg2ODJiYiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJc3RydWN0IHVzZXIgKiBkdW1teSA9IE5VTEw7CiAjZW5kaWYKIAotCWlmICgob2ZmICYgMykgfHwgKG9mZiA8IDApIHx8IChvZmYgPiBzaXplb2Yoc3RydWN0IHVzZXIpIC0gMykpCisJaWYgKChvZmYgJiAzKSB8fCBvZmYgPiBzaXplb2Yoc3RydWN0IHVzZXIpIC0gMykKIAkJcmV0dXJuIC1FSU87CiAKIAlvZmYgPj49IDI7CkBAIC0xMzksOCArMTM5LDcgQEAKIAlzdHJ1Y3QgdXNlciAqIGR1bW15ID0gTlVMTDsKICNlbmRpZgogCi0JaWYgKChvZmYgJiAzKSB8fCBvZmYgPCAwIHx8Ci0JICAgIG9mZiA+IHNpemVvZihzdHJ1Y3QgdXNlcikgLSAzKQorCWlmICgob2ZmICYgMykgfHwgb2ZmID4gc2l6ZW9mKHN0cnVjdCB1c2VyKSAtIDMpCiAJCXJldHVybiAtRUlPOwogCiAJb2ZmID4+PSAyOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCAyNTQ3ZDZjLi42NTVlYTFjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCWlmICghcGh5c2lkX2lzc2V0KHBoeXNfaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgobWF4X2NwdXMgPj0gMCkgJiYgKG1heF9jcHVzIDw9IGNwdWNvdW50ICsgMSkpCisJCWlmIChtYXhfY3B1cyA8PSBjcHVjb3VudCArIDEpCiAJCQljb250aW51ZTsKIAogCQlkb19ib290X2NwdShwaHlzX2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKaW5kZXggY2FkYTNiYS4uYmE2MWM0YyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbGF0Y2g7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX2dldHRpbWVvZmZzZXQodm9pZCkKK3UzMiBhcmNoX2dldHRpbWVvZmZzZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nICBlbGFwc2VkX3RpbWUgPSAwOyAgLyogW3VzXSAqLwogCkBAIC05Myw3OSArOTMsMTAgQEAKICNlcnJvciBubyBjaGlwIGNvbmZpZ3VyYXRpb24KICNlbmRpZgogCi0JcmV0dXJuIGVsYXBzZWRfdGltZTsKKwlyZXR1cm4gZWxhcHNlZF90aW1lICogMTAwMDsKIH0KIAogLyoKLSAqIFRoaXMgdmVyc2lvbiBvZiBnZXR0aW1lb2ZkYXkgaGFzIG5lYXIgbWljcm9zZWNvbmQgcmVzb2x1dGlvbi4KLSAqLwotdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQotewotCXVuc2lnbmVkIGxvbmcgc2VxOwotCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjOwotCXVuc2lnbmVkIGxvbmcgbWF4X250cF90aWNrID0gdGlja191c2VjIC0gdGlja2FkajsKLQotCWRvIHsKLQkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7Ci0KLQkJdXNlYyA9IGRvX2dldHRpbWVvZmZzZXQoKTsKLQotCQkvKgotCQkgKiBJZiB0aW1lX2FkanVzdCBpcyBuZWdhdGl2ZSB0aGVuIE5UUCBpcyBzbG93aW5nIHRoZSBjbG9jawotCQkgKiBzbyBtYWtlIHN1cmUgbm90IHRvIGdvIGludG8gbmV4dCBwb3NzaWJsZSBpbnRlcnZhbC4KLQkJICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpCi0JCQl1c2VjID0gbWluKHVzZWMsIG1heF9udHBfdGljayk7Ci0KLQkJc2VjID0geHRpbWUudHZfc2VjOwotCQl1c2VjICs9ICh4dGltZS50dl9uc2VjIC8gMTAwMCk7Ci0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7Ci0KLQl3aGlsZSAodXNlYyA+PSAxMDAwMDAwKSB7Ci0JCXVzZWMgLT0gMTAwMDAwMDsKLQkJc2VjKys7Ci0JfQotCi0JdHYtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfdXNlYyA9IHVzZWM7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKLQotaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQotewotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotIAlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQkvKgotCSAqIFRoaXMgaXMgcmV2b2x0aW5nLiBXZSBuZWVkIHRvIHNldCAieHRpbWUiIGNvcnJlY3RseS4gSG93ZXZlciwgdGhlCi0JICogdmFsdWUgaW4gdGhpcyBsb2NhdGlvbiBpcyB0aGUgdmFsdWUgYXQgdGhlIG1vc3QgcmVjZW50IHVwZGF0ZSBvZgotCSAqIHdhbGwgdGltZS4gIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkoKSB3b3VsZCBoYXZlCi0JICogbWFkZSwgYW5kIHRoZW4gdW5kbyBpdCEKLQkgKi8KLQluc2VjIC09IGRvX2dldHRpbWVvZmZzZXQoKSAqIE5TRUNfUEVSX1VTRUM7Ci0KLQl3dG1fc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKLQotCW50cF9jbGVhcigpOwotCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOwotCWNsb2NrX3dhc19zZXQoKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KLS8qCiAgKiBJbiBvcmRlciB0byBzZXQgdGhlIENNT1MgY2xvY2sgcHJlY2lzZWx5LCBzZXRfcnRjX21tc3MgaGFzIHRvIGJlCiAgKiBjYWxsZWQgNTAwIG1zIGFmdGVyIHRoZSBzZWNvbmQgbm93dGltZSBoYXMgc3RhcnRlZCwgYmVjYXVzZSB3aGVuCiAgKiBub3d0aW1lIGlzIHdyaXR0ZW4gaW50byB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBDTU9TIGNsb2NrLCBpdCB3aWxsCkBAIC0xOTIsNiArMTIzLDcgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKICNlbmRpZgorCS8qIFhYWCBGSVhNRS4gVWgsIHRoZSB4dGltZV9sb2NrIHNob3VsZCBiZSBoZWxkIGhlcmUsIG5vPyAqLwogCWRvX3RpbWVyKDEpOwogCiAjaWZuZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9pbml0LmMgYi9hcmNoL20zMnIvbW0vaW5pdC5jCmluZGV4IDI0ZDQyOWYuLjlmNTgxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9pbml0LmMKKysrIGIvYXJjaC9tMzJyL21tL2luaXQuYwpAQCAtMTcxLDcgKzE3MSw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgIgogCQkiJWRrIHJlc2VydmVkLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkJbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWNvZGVzaXplID4+IDEwLAogCQlyZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKaW5kZXggZmI4N2MwOC4uMjlkZDg0OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL0tjb25maWcKKysrIGIvYXJjaC9tNjhrL0tjb25maWcKQEAgLTU4LDYgKzU4LDEyIEBACiAJaW50CiAJZGVmYXVsdCAxMDAKIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWRlZl9ib29sIHkKKworY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJZGVmX2Jvb2wgeQorCiBtYWlubWVudSAiTGludXgvNjhrIEtlcm5lbCBDb25maWd1cmF0aW9uIgogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oCmluZGV4IDM5NGVlOTQuLjU1NGY2NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaApAQCAtMSwxNiArMSw4IEBACiAjaWZuZGVmIF9fTTY4S19IQVJESVJRX0gKICNkZWZpbmUgX19NNjhLX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0KLS8qIGVudHJ5LlMgaXMgc2Vuc2l0aXZlIHRvIHRoZSBvZmZzZXRzIG9mIHRoZXNlIGZpZWxkcyAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLwotCiAjZGVmaW5lIEhBUkRJUlFfQklUUwk4CiAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggOWY1YzRjNC4uOGVlYmY4OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDE3ICsxIEBACi0jaWZuZGVmIF9fTTY4S19NTUFOX0hfXwotI2RlZmluZSBfX002OEtfTU1BTl9IX18KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4tY29tbW9uLmg+Ci0KLSNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDAxMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLwotI2RlZmluZSBNQVBfREVOWVdSSVRFCTB4MDgwMAkJLyogRVRYVEJTWSAqLwotI2RlZmluZSBNQVBfRVhFQ1VUQUJMRQkweDEwMDAJCS8qIG1hcmsgaXQgYXMgYW4gZXhlY3V0YWJsZSAqLwotI2RlZmluZSBNQVBfTE9DS0VECTB4MjAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLwotI2RlZmluZSBNQVBfTk9SRVNFUlZFCTB4NDAwMAkJLyogZG9uJ3QgY2hlY2sgZm9yIHJlc2VydmF0aW9ucyAqLwotI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KLSNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLwotCi0jZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KLSNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KLQotI2VuZGlmIC8qIF9fTTY4S19NTUFOX0hfXyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA5NDZkODY5Li40OGI4N2Y1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zMzUsNyArMzM1LDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCTMyOQogI2RlZmluZSBfX05SX3B3cml0ZXYJCTMzMAogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMzMQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCTMzMgorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzMzIKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCmluZGV4IDkyMmY1MmUuLmM1YjMzNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKQEAgLTc1Niw1ICs3NTYsNSBAQAogCS5sb25nIHN5c19wcmVhZHYKIAkubG9uZyBzeXNfcHdyaXRldgkJLyogMzMwICovCiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCi0JLmxvbmcgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3RpbWUuYyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCmluZGV4IDU0ZDk4MDcuLjE3ZGMyYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCkBAIC05MSw3NyArOTEsMTEgQEAKIAltYWNoX3NjaGVkX2luaXQodGltZXJfaW50ZXJydXB0KTsKIH0KIAotLyoKLSAqIFRoaXMgdmVyc2lvbiBvZiBnZXR0aW1lb2ZkYXkgaGFzIG5lYXIgbWljcm9zZWNvbmQgcmVzb2x1dGlvbi4KLSAqLwotdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQordTMyIGFyY2hfZ2V0dGltZW9mZnNldCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0JdW5zaWduZWQgbG9uZyB1c2VjLCBzZWM7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbnRwX3RpY2sgPSB0aWNrX3VzZWMgLSB0aWNrYWRqOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQotCQl1c2VjID0gbWFjaF9nZXR0aW1lb2Zmc2V0KCk7Ci0KLQkJLyoKLQkJICogSWYgdGltZV9hZGp1c3QgaXMgbmVnYXRpdmUgdGhlbiBOVFAgaXMgc2xvd2luZyB0aGUgY2xvY2sKLQkJICogc28gbWFrZSBzdXJlIG5vdCB0byBnbyBpbnRvIG5leHQgcG9zc2libGUgaW50ZXJ2YWwuCi0JCSAqIEJldHRlciB0byBsb3NlIHNvbWUgYWNjdXJhY3kgdGhhbiBoYXZlIHRpbWUgZ28gYmFja3dhcmRzLi4KLQkJICovCi0JCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApKQotCQkJdXNlYyA9IG1pbih1c2VjLCBtYXhfbnRwX3RpY2spOwotCi0JCXNlYyA9IHh0aW1lLnR2X3NlYzsKLQkJdXNlYyArPSB4dGltZS50dl9uc2VjLzEwMDA7Ci0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7Ci0KLQotCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKLQkJdXNlYyAtPSAxMDAwMDAwOwotCQlzZWMrKzsKLQl9Ci0KLQl0di0+dHZfc2VjID0gc2VjOwotCXR2LT50dl91c2VjID0gdXNlYzsKKwlyZXR1cm4gbWFjaF9nZXR0aW1lb2Zmc2V0KCkgKiAxMDAwOwogfQogCi1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0KLWludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKLXsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQkvKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgdGhlIHh0aW1lLnR2X25zZWMKLQkgKiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZSB2YWx1ZSBpbiB0aGlzIGxvY2F0aW9uIGlzCi0JICogaXMgdmFsdWUgYXQgdGhlIGxhc3QgdGljay4KLQkgKiBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5Ci0JICogd291bGQgaGF2ZSBkb25lLCBhbmQgdGhlbiB1bmRvIGl0IQotCSAqLwotCW5zZWMgLT0gMTAwMCAqIG1hY2hfZ2V0dGltZW9mZnNldCgpOwotCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KLQogc3RhdGljIGludCBfX2luaXQgcnRjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2luaXQuYyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKaW5kZXggMDAwN2IyYS4uNzc0NTQ5YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2luaXQuYworKysgYi9hcmNoL202OGsvbW0vaW5pdC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKICNlbmRpZgogCiAJcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIGRhdGEsICVkayBpbml0KVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgdG90YWxyYW1fcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBjb2RlcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBkYXRhcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDBhZTEyM2UuLjIzNTM1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTM1MCw3ICszNTAsNyBAQAogCS5sb25nIHN5c19wcmVhZHYKIAkubG9uZyBzeXNfcHdyaXRldgkJLyogMzMwICovCiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCi0JLmxvbmcgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgogCiAJLnJlcHQgTlJfc3lzY2FsbHMtKC4tc3lzX2NhbGxfdGFibGUpLzQKIAkJLmxvbmcgc3lzX25pX3N5c2NhbGwKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAwYjg1MjMyLi5jYjA1YTA3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zODEsNyArMzgxLDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCTM2MyAvKiBuZXcgKi8KICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzNjQgLyogbmV3ICovCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzY1IC8qIG5ldyAqLwotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCTM2NiAvKiBuZXcgKi8KKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzY2IC8qIG5ldyAqLwogCiAjZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTM2NwogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IDQ1NzIxNjAuLmVjZWMxOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0zNzAsNCArMzcwLDQgQEAKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAogCS5sb25nIHN5c19uaV9zeXNjYWxsCiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCS8qIDM2NSAqLwotCS5sb25nIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMgYi9hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jCmluZGV4IGYyMDdmMWEuLjExMTA3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMKKysrIGIvYXJjaC9taWNyb2JsYXplL21tL2luaXQuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hbGxfYm9vdG1lbSgpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCkpOwogI2lmZGVmIENPTkZJR19NTVUKIAltZW1faW5pdF9kb25lID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IGU0ZDZmMWYuLmEyMjUwZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtNDYsNiArNDYsOCBAQAogI2RlZmluZSBNQVBfTE9DS0VECTB4ODAwMAkJLyogcGFnZXMgYXJlIGxvY2tlZCAqLwogI2RlZmluZSBNQVBfUE9QVUxBVEUJMHgxMDAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCiAjZGVmaW5lIE1BUF9OT05CTE9DSwkweDIwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKyNkZWZpbmUgTUFQX1NUQUNLCTB4NDAwMDAJCS8qIGdpdmUgb3V0IGFuIGFkZHJlc3MgdGhhdCBpcyBiZXN0IHN1aXRlZCBmb3IgcHJvY2Vzcy90aHJlYWQgc3RhY2tzICovCisjZGVmaW5lIE1BUF9IVUdFVExCCTB4ODAwMDAJCS8qIGNyZWF0ZSBhIGh1Z2UgcGFnZSBtYXBwaW5nICovCiAKIC8qCiAgKiBGbGFncyBmb3IgbXN5bmMKQEAgLTcxLDYgKzczLDkgQEAKICNkZWZpbmUgTUFEVl9ET05URk9SSwkxMAkJLyogZG9uJ3QgaW5oZXJpdCBhY3Jvc3MgZm9yayAqLwogI2RlZmluZSBNQURWX0RPRk9SSwkxMQkJLyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqLwogCisjZGVmaW5lIE1BRFZfTUVSR0VBQkxFICAgMTIJCS8qIEtTTSBtYXkgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisjZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTMJCS8qIEtTTSBtYXkgbm90IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLworCiAvKiBjb21wYXRpYmlsaXR5IGZsYWdzICovCiAjZGVmaW5lIE1BUF9GSUxFCTAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMWE5ZjliMi4uZDZlYjYxMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC03Niw2ICs3NiwxNiBAQAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpIFwKIAkodmlydF90b19wYWdlKCh2b2lkICopKGVtcHR5X3plcm9fcGFnZSArICgoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSkgJiB6ZXJvX3BhZ2VfbWFzaykpKSkKIAorI2RlZmluZSBpc196ZXJvX3BmbiBpc196ZXJvX3Bmbgorc3RhdGljIGlubGluZSBpbnQgaXNfemVyb19wZm4odW5zaWduZWQgbG9uZyBwZm4pCit7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgemVyb19wZm47CisJdW5zaWduZWQgbG9uZyBvZmZzZXRfZnJvbV96ZXJvX3BmbiA9IHBmbiAtIHplcm9fcGZuOworCXJldHVybiBvZmZzZXRfZnJvbV96ZXJvX3BmbiA8PSAoemVyb19wYWdlX21hc2sgPj4gUEFHRV9TSElGVCk7Cit9CisKKyNkZWZpbmUgbXlfemVyb19wZm4oYWRkcikJcGFnZV90b19wZm4oWkVST19QQUdFKGFkZHIpKQorCiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBlNzUzYTc3Li44YzlkZmE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNTMsNyArMzUzLDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9MaW51eCArIDMzMCkKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkJKF9fTlJfTGludXggKyAzMzEpCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JCShfX05SX0xpbnV4ICsgMzMyKQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCQkoX19OUl9MaW51eCArIDMzMykKKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JCShfX05SX0xpbnV4ICsgMzMzKQogI2RlZmluZSBfX05SX2FjY2VwdDQJCQkoX19OUl9MaW51eCArIDMzNCkKIAogLyoKQEAgLTY2NCw3ICs2NjQsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMjg5KQogI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDI5MCkKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkJKF9fTlJfTGludXggKyAyOTEpCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JCShfX05SX0xpbnV4ICsgMjkyKQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJKF9fTlJfTGludXggKyAyOTIpCiAjZGVmaW5lIF9fTlJfYWNjZXB0NAkJCShfX05SX0xpbnV4ICsgMjkzKQogCiAvKgpAQCAtOTc5LDcgKzk3OSw3IEBACiAjZGVmaW5lIF9fTlJfcHJlYWR2CQkJKF9fTlJfTGludXggKyAyOTMpCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJCShfX05SX0xpbnV4ICsgMjk0KQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCQkoX19OUl9MaW51eCArIDI5NSkKLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkJKF9fTlJfTGludXggKyAyOTYpCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCQkoX19OUl9MaW51eCArIDI5NikKICNkZWZpbmUgX19OUl9hY2NlcHQ0CQkJKF9fTlJfTGludXggKyAyOTcpCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggN2MyZGU0Zi4uZmQyYTliYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNTgxLDcgKzU4MSw3IEBACiAJc3lzCXN5c19wcmVhZHYJCTYJLyogNDMzMCAqLwogCXN5cwlzeXNfcHdyaXRldgkJNgogCXN5cwlzeXNfcnRfdGdzaWdxdWV1ZWluZm8JNAotCXN5cwlzeXNfcGVyZl9jb3VudGVyX29wZW4JNQorCXN5cwlzeXNfcGVyZl9ldmVudF9vcGVuCTUKIAlzeXMJc3lzX2FjY2VwdDQJCTQKIAkuZW5kbQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IGI5N2I5OTMuLjE4YmY3ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00MTgsNiArNDE4LDYgQEAKIAlQVFIJc3lzX3ByZWFkdgogCVBUUglzeXNfcHdyaXRldgkJCS8qIDUzOTAgKi8KIAlQVFIJc3lzX3J0X3Rnc2lncXVldWVpbmZvCi0JUFRSCXN5c19wZXJmX2NvdW50ZXJfb3BlbgorCVBUUglzeXNfcGVyZl9ldmVudF9vcGVuCiAJUFRSCXN5c19hY2NlcHQ0CiAJLnNpemUJc3lzX2NhbGxfdGFibGUsLi1zeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IDFhNmFlMTIuLjZlYmMwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTQxNiw2ICs0MTYsNiBAQAogCVBUUglzeXNfcHJlYWR2CiAJUFRSCXN5c19wd3JpdGV2CiAJUFRSCWNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogNTI5NSAqLwotCVBUUglzeXNfcGVyZl9jb3VudGVyX29wZW4KKwlQVFIJc3lzX3BlcmZfZXZlbnRfb3BlbgogCVBUUglzeXNfYWNjZXB0NAogCS5zaXplCXN5c24zMl9jYWxsX3RhYmxlLC4tc3lzbjMyX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwppbmRleCBjZDMxMDg3Li45YmJmOTc3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC01MzYsNiArNTM2LDYgQEAKIAlQVFIJY29tcGF0X3N5c19wcmVhZHYJCS8qIDQzMzAgKi8KIAlQVFIJY29tcGF0X3N5c19wd3JpdGV2CiAJUFRSCWNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm8KLQlQVFIJc3lzX3BlcmZfY291bnRlcl9vcGVuCisJUFRSCXN5c19wZXJmX2V2ZW50X29wZW4KIAlQVFIJc3lzX2FjY2VwdDQKIAkuc2l6ZQlzeXNfY2FsbF90YWJsZSwuLXN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jCmluZGV4IDBlZGJlZjMuLjZlMDhjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jCkBAIC0yMyw2ICsyMyw2IEBACiAKIHZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7Ci0JdHMtPnR2X3NlYyA9IHJldHVybiBtYzE0NjgxOF9nZXRfY21vc190aW1lKCk7CisJdHMtPnR2X3NlYyA9IG1jMTQ2ODE4X2dldF9jbW9zX3RpbWUoKTsKIAl0cy0+dHZfbnNlYyA9IDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAzOGM3OWM1Li4xNWFhMTkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTM1Miw3ICszNTIsNiBAQAogCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogCi1zdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jOwogI2lmZGVmIENPTkZJR182NEJJVAogc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX2tzZWcwOwogI2VuZGlmCkBAIC00MDksMTUgKzQwOCwxMyBAQAogCWlmICgodW5zaWduZWQgbG9uZykgJl90ZXh0ID4gKHVuc2lnbmVkIGxvbmcpIENLU0VHMCkKIAkJLyogVGhlIC00IGlzIGEgaGFjayBzbyB0aGF0IHVzZXIgdG9vbHMgZG9uJ3QgaGF2ZSB0byBoYW5kbGUKIAkJICAgdGhlIG92ZXJmbG93LiAgKi8KLQkJa2NsaXN0X2FkZCgma2NvcmVfa3NlZzAsICh2b2lkICopIENLU0VHMCwgMHg4MDAwMDAwMCAtIDQpOworCQlrY2xpc3RfYWRkKCZrY29yZV9rc2VnMCwgKHZvaWQgKikgQ0tTRUcwLAorCQkJCTB4ODAwMDAwMDAgLSA0LCBLQ09SRV9URVhUKTsKICNlbmRpZgotCWtjbGlzdF9hZGQoJmtjb3JlX21lbSwgX192YSgwKSwgbWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCk7Ci0Ja2NsaXN0X2FkZCgma2NvcmVfdm1hbGxvYywgKHZvaWQgKilWTUFMTE9DX1NUQVJULAotCQkgICBWTUFMTE9DX0VORC1WTUFMTE9DX1NUQVJUKTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWxkayBrZXJuZWwgY29kZSwgIgogCSAgICAgICAiJWxkayByZXNlcnZlZCwgJWxkayBkYXRhLCAlbGRrIGluaXQsICVsZGsgaGlnaG1lbSlcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKSBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCSAgICAgICBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICByYW0gPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBjb2Rlc2l6ZSA+PiAxMCwKIAkgICAgICAgcmVzZXJ2ZWRwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCAyZGI3NDZhLi4xYTU1ZDYxIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKgotICogdmlydHVhbGx5LWluZGV4ZWQgY2FjaGUgbWFuYWdtZW50IChvdXIgY2FjaGUgaXMgcGh5c2ljYWxseSBpbmRleGVkKQorICogdmlydHVhbGx5LWluZGV4ZWQgY2FjaGUgbWFuYWdlbWVudCAob3VyIGNhY2hlIGlzIHBoeXNpY2FsbHkgaW5kZXhlZCkKICAqLwogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7fSB3aGlsZSAoMCkKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHt9IHdoaWxlICgwKQogCiAvKgotICogcGh5c2ljYWxseS1pbmRleGVkIGNhY2hlIG1hbmFnbWVudAorICogcGh5c2ljYWxseS1pbmRleGVkIGNhY2hlIG1hbmFnZW1lbnQKICAqLwogI2lmbmRlZiBDT05GSUdfTU4xMDMwMF9DQUNIRV9ESVNBQkxFRAogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vZ2RiLXN0dWIuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9nZGItc3R1Yi5oCmluZGV4IGU1YTYzNjguLjU1NmNjZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9nZGItc3R1Yi5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9nZGItc3R1Yi5oCkBAIC0xMDksNyArMTA5LDYgQEAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgZ2Ric3R1Yl9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKiwgZW51bSBleGNlcHRpb25fY29kZSk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIF9fZ2Ric3R1Yl9idWdfdHJhcCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgX19nZGJzdHViX3BhdXNlKHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzdGFydF9rZXJuZWwodm9pZCk7CiAKICNpZm5kZWYgQ09ORklHX01OMTAzMDBfQ0FDSEVfRElTQUJMRUQKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgZ2Ric3R1Yl9wdXJnZV9jYWNoZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IGQwNGZhYzEuLjhlZWJmODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtMSwyOCArMSBAQAotLyogTU4xMDMwMCBDb25zdGFudHMgZm9yIG1tYXAgYW5kIGNvLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBNYXRzdXNoaXRhIEVsZWN0cmljIEluZHVzdHJpYWwgQ28uLCBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogLSBEZXJpdmVkIGZyb20gYXNtLXg4Ni9tbWFuLmgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaWZuZGVmIF9BU01fTU1BTl9ICi0jZGVmaW5lIF9BU01fTU1BTl9ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04JMHgwMTAwCQkvKiBzdGFjay1saWtlIHNlZ21lbnQgKi8KLSNkZWZpbmUgTUFQX0RFTllXUklURQkweDA4MDAJCS8qIEVUWFRCU1kgKi8KLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUJMHgxMDAwCQkvKiBtYXJrIGl0IGFzIGFuIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgTUFQX0xPQ0tFRAkweDIwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KLSNkZWZpbmUgTUFQX05PUkVTRVJWRQkweDQwMDAJCS8qIGRvbid0IGNoZWNrIGZvciByZXNlcnZhdGlvbnMgKi8KLSNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCi0jZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KLQotI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCi0jZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCi0KLSNlbmRpZiAvKiBfQVNNX01NQU5fSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBmYWQ2ODYxLi4yYTk4MzkzIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNDcsNyArMzQ3LDcgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCTMzNAogI2RlZmluZSBfX05SX3B3cml0ZXYJCTMzNQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMzNgotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCTMzNworI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzMzcKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDI2NDZmY2IuLjgyYjQwMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAlPRkZTRVQoX19pb2Jhc2UsCQltbjEwMzAwX3NlcmlhbF9wb3J0LCBfaW9iYXNlKTsKIAogCURFRklORShfX1VBUlRfWE1JVF9TSVpFLAlVQVJUX1hNSVRfU0laRSk7Ci0JT0ZGU0VUKF9feG1pdF9idWZmZXIsCQl1YXJ0X2luZm8sIHhtaXQuYnVmKTsKLQlPRkZTRVQoX194bWl0X2hlYWQsCQl1YXJ0X2luZm8sIHhtaXQuaGVhZCk7Ci0JT0ZGU0VUKF9feG1pdF90YWlsLAkJdWFydF9pbmZvLCB4bWl0LnRhaWwpOworCU9GRlNFVChfX3htaXRfYnVmZmVyLAkJdWFydF9zdGF0ZSwgeG1pdC5idWYpOworCU9GRlNFVChfX3htaXRfaGVhZCwJCXVhcnRfc3RhdGUsIHhtaXQuaGVhZCk7CisJT0ZGU0VUKF9feG1pdF90YWlsLAkJdWFydF9zdGF0ZSwgeG1pdC50YWlsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUwppbmRleCBlMGQyNTYzLi5hOTRlN2VhIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9lbnRyeS5TCkBAIC03MjMsNyArNzIzLDcgQEAKIAkubG9uZyBzeXNfcHJlYWR2CiAJLmxvbmcgc3lzX3B3cml0ZXYJCS8qIDMzNSAqLwogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwotCS5sb25nIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KIAogCiBucl9zeXNjYWxscz0oLi1zeXNfY2FsbF90YWJsZSkvNApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9zZXR1cC5jCmluZGV4IDc5ODkwZWQuLjNmMjRjMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3NldHVwLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogewogfQogCi1zdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKK2NvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wID0gewogCS5zdGFydAk9IGNfc3RhcnQsCiAJLm5leHQJPSBjX25leHQsCiAJLnN0b3AJPSBjX3N0b3AsCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvbW0vaW5pdC5jIGIvYXJjaC9tbjEwMzAwL21tL2luaXQuYwppbmRleCA4Y2VlMzg3Li5lYzE0MjA1IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvbW0vaW5pdC5jCisrKyBiL2FyY2gvbW4xMDMwMC9tbS9pbml0LmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCSAgICAgICAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlIgogCSAgICAgICAiICglZGsga2VybmVsIGNvZGUsICVkayByZXNlcnZlZCwgJWRrIGRhdGEsICVkayBpbml0LCIKIAkgICAgICAgIiAlbGRrIGhpZ2htZW0pXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZUIC0gMTApLAorCSAgICAgICBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQgLSAxMCksCiAJICAgICAgIG1heF9tYXBuciA8PCAoUEFHRV9TSElGVCAtIDEwKSwKIAkgICAgICAgY29kZXNpemUgPj4gMTAsCiAJICAgICAgIHJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCksCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCAwNmY4ZDViLi5mMzg4ZGM2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTE2LDcgKzE2LDcgQEAKIAlzZWxlY3QgUlRDX0RSVl9HRU5FUklDCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCiAJc2VsZWN0IEJVRwotCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICE2NEJJVAogCWhlbHAKIAkgIFRoZSBQQS1SSVNDIG1pY3JvcHJvY2Vzc29yIGlzIGRlc2lnbmVkIGJ5IEhld2xldHQtUGFja2FyZCBhbmQgdXNlZApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IGRlZmU3NTIuLjk3NDljOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgTUFQX0dST1dTRE9XTgkweDgwMDAJCS8qIHN0YWNrLWxpa2Ugc2VnbWVudCAqLwogI2RlZmluZSBNQVBfUE9QVUxBVEUJMHgxMDAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCiAjZGVmaW5lIE1BUF9OT05CTE9DSwkweDIwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKyNkZWZpbmUgTUFQX1NUQUNLCTB4NDAwMDAJCS8qIGdpdmUgb3V0IGFuIGFkZHJlc3MgdGhhdCBpcyBiZXN0IHN1aXRlZCBmb3IgcHJvY2Vzcy90aHJlYWQgc3RhY2tzICovCisjZGVmaW5lIE1BUF9IVUdFVExCCTB4ODAwMDAJCS8qIGNyZWF0ZSBhIGh1Z2UgcGFnZSBtYXBwaW5nICovCiAKICNkZWZpbmUgTVNfU1lOQwkJMQkJLyogc3luY2hyb25vdXMgbWVtb3J5IHN5bmMgKi8KICNkZWZpbmUgTVNfQVNZTkMJMgkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KQEAgLTU0LDYgKzU2LDkgQEAKICNkZWZpbmUgTUFEVl8xNk1fUEFHRVMgIDI0ICAgICAgICAgICAgICAvKiBVc2UgMTYgTWVnYWJ5dGUgcGFnZXMgKi8KICNkZWZpbmUgTUFEVl82NE1fUEFHRVMgIDI2ICAgICAgICAgICAgICAvKiBVc2UgNjQgTWVnYWJ5dGUgcGFnZXMgKi8KIAorI2RlZmluZSBNQURWX01FUkdFQUJMRSAgIDY1CQkvKiBLU00gbWF5IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLworI2RlZmluZSBNQURWX1VOTUVSR0VBQkxFIDY2CQkvKiBLU00gbWF5IG5vdCBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKwogLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBNQVBfRklMRQkwCiAjZGVmaW5lIE1BUF9WQVJJQUJMRQkwCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzllODI5Li4wMDAwMDAwCi0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1BBUklTQ19QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfX0FTTV9QQVJJU0NfUEVSRl9DT1VOVEVSX0gKLQotLyogcGFyaXNjIG9ubHkgc3VwcG9ydHMgc29mdHdhcmUgY291bnRlcnMgdGhyb3VnaCB0aGlzIGludGVyZmFjZS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkgeyB9Ci0KLSNlbmRpZiAvKiBfX0FTTV9QQVJJU0NfUEVSRl9DT1VOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzE0NjQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9QQVJJU0NfUEVSRl9FVkVOVF9ICisjZGVmaW5lIF9fQVNNX1BBUklTQ19QRVJGX0VWRU5UX0gKKworLyogcGFyaXNjIG9ubHkgc3VwcG9ydHMgc29mdHdhcmUgZXZlbnRzIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKSB7IH0KKworI2VuZGlmIC8qIF9fQVNNX1BBUklTQ19QRVJGX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggZjNkM2I4Yi4uY2RhMTU4MyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTgxMCw5ICs4MTAsOSBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJKF9fTlJfTGludXggKyAzMTUpCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJKF9fTlJfTGludXggKyAzMTYpCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JKF9fTlJfTGludXggKyAzMTcpCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JKF9fTlJfTGludXggKyAzMTgpCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCShfX05SX0xpbnV4ICsgMzE4KQogCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfcGVyZl9jb3VudGVyX29wZW4gKyAxKQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX3BlcmZfZXZlbnRfb3BlbiArIDEpCiAKIAogI2RlZmluZSBfX0lHTk9SRV9zZWxlY3QJCS8qIG5ld3NlbGVjdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggY2YxNDVlYi4uODQzZjQyMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC00MTYsNyArNDE2LDcgQEAKIAlFTlRSWV9DT01QKHByZWFkdikJCS8qIDMxNSAqLwogCUVOVFJZX0NPTVAocHdyaXRldikKIAlFTlRSWV9DT01QKHJ0X3Rnc2lncXVldWVpbmZvKQotCUVOVFJZX1NBTUUocGVyZl9jb3VudGVyX29wZW4pCisJRU5UUllfU0FNRShwZXJmX2V2ZW50X29wZW4pCiAKIAkvKiBOb3RoaW5nIHlldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggYjA4MzFkOS4uZDVhY2EzMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAlZGsgaW5pdClcbiIsCi0JCSh1bnNpZ25lZCBsb25nKW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCisJCW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJCW51bV9waHlzcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCQljb2Rlc2l6ZSA+PiAxMCwKIAkJcmVzZXJ2ZWRwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDgyNTA5MDIuLjRmZDQ3OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0xMjksNyArMTI5LDcgQEAKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX1NZU0NBTExfV1JBUFBFUlMgaWYgUFBDNjQKIAlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiBQUEMzMgotCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCiBjb25maWcgRUFSTFlfUFJJTlRLCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKaW5kZXggZjMyYzI4MS4uODU1NzgyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCkBAIC0xNTksNiArMTU5LDcgQEAKIAkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwogCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlzZGhjaSx3cC1pbnZlcnRlZDsKIAkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCmluZGV4IDI4ZTAyMmEuLjllMjI2NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwpAQCAtMTczLDYgKzE3Myw3IEBACiAJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJc2RoY2ksd3AtaW52ZXJ0ZWQ7CiAJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMTExMTExMTE+OwogCQkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKaW5kZXggM2ZlYmM0ZS4uOWE2MDM2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKQEAgLTE1MCw2ICsxNTAsNyBAQAogCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCXNkaGNpLHdwLWludmVydGVkOwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCmluZGV4IGY3MjBhYjkuLmY3MGNmNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cwpAQCAtMTU5LDYgKzE1OSw3IEBACiAJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJc2RoY2ksd3AtaW52ZXJ0ZWQ7CiAJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwppbmRleCBhMTFlYWQ4Li40ZTZhMWE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKQEAgLTE3Myw2ICsxNzMsNyBAQAogCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCXNkaGNpLHdwLWludmVydGVkOwogCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTExMTExMTExPjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cwppbmRleCA0ZmEyMjFmLi42NDVlYzUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKQEAgLTE1Nyw2ICsxNTcsNyBAQAogCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCXNkaGNpLHdwLWludmVydGVkOwogCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKaW5kZXggZTM1ZGZiYS4uNzIzMzZkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCkBAIC0xNzEsNiArMTcxLDcgQEAKIAkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwogCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlzZGhjaSx3cC1pbnZlcnRlZDsKIAkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDExMTExMTExMT47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggZjQyZTYyMy4uZmExOWYzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC0xOCw2ICsxOCw5IEBACiAKICNpZm5kZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisjaWZkZWYgX19LRVJORUxfXworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2NwdXRpbWVfb25lX2ppZmZ5KHZvaWQpIHsgfQorI2VuZGlmCiAjZWxzZQogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTQ5LDYgKzUyLDExIEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAvKgorICogT25lIGppZmZ5IGluIHRpbWViYXNlIHVuaXRzIGNvbXB1dGVkIGR1cmluZyBpbml0aWFsaXphdGlvbgorICovCitleHRlcm4gY3B1dGltZV90IGNwdXRpbWVfb25lX2ppZmZ5OworCisvKgogICogQ29udmVydCBjcHV0aW1lIDwtPiBqaWZmaWVzCiAgKi8KIGV4dGVybiB1NjQgX19jcHV0aW1lX2ppZmZpZXNfZmFjdG9yOwpAQCAtODksNiArOTcsMTEgQEAKIAlyZXR1cm4gY3Q7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9jcHV0aW1lX29uZV9qaWZmeSh2b2lkKQoreworCWNwdXRpbWVfb25lX2ppZmZ5ID0gamlmZmllc190b19jcHV0aW1lKDEpOworfQorCiBzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGppZmZpZXM2NF90b19jcHV0aW1lNjQoY29uc3QgdTY0IGppZikKIHsKIAljcHV0aW1lX3QgY3Q7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZTczZDU1NC4uYWJiYzJhYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMTM1LDQzICsxMzUsNDMgQEAKICAqLwogc3RydWN0IGlycV9jaGlwOwogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogI2lmZGVmIENPTkZJR19QUEM2NAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRlc3RfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgeDsKIAogCWFzbSB2b2xhdGlsZSgibGJ6ICUwLCUxKDEzKSIKIAkJOiAiPXIiICh4KQotCQk6ICJpIiAob2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBwZXJmX2NvdW50ZXJfcGVuZGluZykpKTsKKwkJOiAiaSIgKG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgcGVyZl9ldmVudF9wZW5kaW5nKSkpOwogCXJldHVybiB4OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgic3RiICUwLCUxKDEzKSIgOiA6CiAJCSJyIiAoMSksCi0JCSJpIiAob2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBwZXJmX2NvdW50ZXJfcGVuZGluZykpKTsKKwkJImkiIChvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHBlcmZfZXZlbnRfcGVuZGluZykpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlKCJzdGIgJTAsJTEoMTMpIiA6IDoKIAkJInIiICgwKSwKLQkJImkiIChvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHBlcmZfY291bnRlcl9wZW5kaW5nKSkpOworCQkiaSIgKG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgcGVyZl9ldmVudF9wZW5kaW5nKSkpOwogfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCi0jZWxzZSAgLyogQ09ORklHX1BFUkZfQ09VTlRFUlMgKi8KKyNlbHNlICAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRlc3RfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfUEVSRl9DT1VOVEVSUyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggN2IxYzQ5OC4uZDRhN2Y2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4ODAwMAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCiAjZGVmaW5lIE1BUF9OT05CTE9DSwkweDEwMDAwCQkvKiBkbyBub3QgYmxvY2sgb24gSU8gKi8KKyNkZWZpbmUgTUFQX1NUQUNLCTB4MjAwMDAJCS8qIGdpdmUgb3V0IGFuIGFkZHJlc3MgdGhhdCBpcyBiZXN0IHN1aXRlZCBmb3IgcHJvY2Vzcy90aHJlYWQgc3RhY2tzICovCisjZGVmaW5lIE1BUF9IVUdFVExCCTB4NDAwMDAJCS8qIGNyZWF0ZSBhIGh1Z2UgcGFnZSBtYXBwaW5nICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZkZWYgQ09ORklHX1BQQzY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAppbmRleCBiNjM0NDU2Li43ZDg1MTRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXU4IHNvZnRfZW5hYmxlZDsJCS8qIGlycSBzb2Z0LWVuYWJsZSBmbGFnICovCiAJdTggaGFyZF9lbmFibGVkOwkJLyogc2V0IGlmIGlycXMgYXJlIGVuYWJsZWQgaW4gTVNSICovCiAJdTggaW9fc3luYzsJCQkvKiB3cml0ZWwoKSBuZWVkcyBzcGluX3VubG9jayBzeW5jICovCi0JdTggcGVyZl9jb3VudGVyX3BlbmRpbmc7CS8qIFBNIGludGVycnVwdCB3aGlsZSBzb2Z0LWRpc2FibGVkICovCisJdTggcGVyZl9ldmVudF9wZW5kaW5nOwkJLyogUE0gaW50ZXJydXB0IHdoaWxlIHNvZnQtZGlzYWJsZWQgKi8KIAogCS8qIFN0dWZmIGZvciBhY2N1cmF0ZSB0aW1lIGFjY291bnRpbmcgKi8KIAl1NjQgdXNlcl90aW1lOwkJCS8qIGFjY3VtdWxhdGVkIHVzZXJtb2RlIFRCIHRpY2tzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCAwZWEwNjM5Li4zMjg4Y2UzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBQZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgLSBQb3dlclBDLXNwZWNpZmljIGRlZmluaXRpb25zLgorICogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCAtIFBvd2VyUEMtc3BlY2lmaWMgZGVmaW5pdGlvbnMuCiAgKgogICogQ29weXJpZ2h0IDIwMDgtMjAwOSBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnBvcmF0aW9uLgogICoKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KIAotI2RlZmluZSBNQVhfSFdDT1VOVEVSUwkJOAorI2RlZmluZSBNQVhfSFdFVkVOVFMJCTgKICNkZWZpbmUgTUFYX0VWRU5UX0FMVEVSTkFUSVZFUwk4CiAjZGVmaW5lIE1BWF9MSU1JVEVEX0hXQ09VTlRFUlMJMgogCkBAIC0yOCwxMiArMjgsMTIgQEAKIAl1bnNpZ25lZCBsb25nCXRlc3RfYWRkZXI7CiAJaW50CQkoKmNvbXB1dGVfbW1jcikodTY0IGV2ZW50c1tdLCBpbnQgbl9ldiwKIAkJCQl1bnNpZ25lZCBpbnQgaHdjW10sIHVuc2lnbmVkIGxvbmcgbW1jcltdKTsKLQlpbnQJCSgqZ2V0X2NvbnN0cmFpbnQpKHU2NCBldmVudCwgdW5zaWduZWQgbG9uZyAqbXNrcCwKKwlpbnQJCSgqZ2V0X2NvbnN0cmFpbnQpKHU2NCBldmVudF9pZCwgdW5zaWduZWQgbG9uZyAqbXNrcCwKIAkJCQl1bnNpZ25lZCBsb25nICp2YWxwKTsKLQlpbnQJCSgqZ2V0X2FsdGVybmF0aXZlcykodTY0IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJaW50CQkoKmdldF9hbHRlcm5hdGl2ZXMpKHU2NCBldmVudF9pZCwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJCXU2NCBhbHRbXSk7CiAJdm9pZAkJKCpkaXNhYmxlX3BtYykodW5zaWduZWQgaW50IHBtYywgdW5zaWduZWQgbG9uZyBtbWNyW10pOwotCWludAkJKCpsaW1pdGVkX3BtY19ldmVudCkodTY0IGV2ZW50KTsKKwlpbnQJCSgqbGltaXRlZF9wbWNfZXZlbnQpKHU2NCBldmVudF9pZCk7CiAJdTMyCQlmbGFnczsKIAlpbnQJCW5fZ2VuZXJpYzsKIAlpbnQJCSpnZW5lcmljX2V2ZW50czsKQEAgLTYxLDEwICs2MSwxMCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVyZl9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVAkxCisjZGVmaW5lIFBFUkZfRVZFTlRfSU5ERVhfT0ZGU0VUCTEKIAogLyoKLSAqIE9ubHkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAorICogT25seSBvdmVycmlkZSB0aGUgZGVmYXVsdCBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAogICogaWYgd2UgaGF2ZSBoYXJkd2FyZSBQTVUgc3VwcG9ydC4KICAqLwogI2lmZGVmIENPTkZJR19QUENfUEVSRl9DVFJTCkBAIC03MywxNCArNzMsMTQgQEAKIAogLyoKICAqIFRoZSBwb3dlcl9wbXUuZ2V0X2NvbnN0cmFpbnQgZnVuY3Rpb24gcmV0dXJucyBhIDMyLzY0LWJpdCB2YWx1ZSBhbmQKLSAqIGEgMzIvNjQtYml0IG1hc2sgdGhhdCBleHByZXNzIHRoZSBjb25zdHJhaW50cyBiZXR3ZWVuIHRoaXMgZXZlbnQgYW5kCisgKiBhIDMyLzY0LWJpdCBtYXNrIHRoYXQgZXhwcmVzcyB0aGUgY29uc3RyYWludHMgYmV0d2VlbiB0aGlzIGV2ZW50X2lkIGFuZAogICogb3RoZXIgZXZlbnRzLgogICoKICAqIFRoZSB2YWx1ZSBhbmQgbWFzayBhcmUgZGl2aWRlZCB1cCBpbnRvIChub24tb3ZlcmxhcHBpbmcpIGJpdGZpZWxkcwogICogb2YgdGhyZWUgZGlmZmVyZW50IHR5cGVzOgogICoKICAqIFNlbGVjdCBmaWVsZDogdGhpcyBleHByZXNzZXMgdGhlIGNvbnN0cmFpbnQgdGhhdCBzb21lIHNldCBvZiBiaXRzCi0gKiBpbiBNTUNSKiBuZWVkcyB0byBiZSBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhpcyBldmVudC4gIEZvciBhCisgKiBpbiBNTUNSKiBuZWVkcyB0byBiZSBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhpcyBldmVudF9pZC4gIEZvciBhCiAgKiBzZWxlY3QgZmllbGQsIHRoZSBtYXNrIGNvbnRhaW5zIDFzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgZmllbGQsIGFuZAogICogdGhlIHZhbHVlIGNvbnRhaW5zIGEgdW5pcXVlIHZhbHVlIGZvciBlYWNoIHBvc3NpYmxlIHNldHRpbmcgb2YgdGhlCiAgKiBNTUNSKiBiaXRzLiAgVGhlIGNvbnN0cmFpbnQgY2hlY2tpbmcgY29kZSB3aWxsIGVuc3VyZSB0aGF0IHR3byBldmVudHMKQEAgLTEwMiw5ICsxMDIsOSBAQAogICogcG9zc2libGUuKSAgRm9yIE4gY2xhc3NlcywgdGhlIGZpZWxkIGlzIE4rMSBiaXRzIHdpZGUsIGFuZCBlYWNoIGNsYXNzCiAgKiBpcyBhc3NpZ25lZCBvbmUgYml0IGZyb20gdGhlIGxlYXN0LXNpZ25pZmljYW50IE4gYml0cy4gIFRoZSBtYXNrIGhhcwogICogb25seSB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXQgc2V0LCBhbmQgdGhlIHZhbHVlIGhhcyBvbmx5IHRoZSBiaXQKLSAqIGZvciB0aGUgZXZlbnQncyBjbGFzcyBzZXQuICBUaGUgdGVzdF9hZGRlciBoYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50CisgKiBmb3IgdGhlIGV2ZW50X2lkJ3MgY2xhc3Mgc2V0LiAgVGhlIHRlc3RfYWRkZXIgaGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudAogICogYml0IHNldCBpbiB0aGUgZmllbGQuCiAgKgotICogSWYgYW4gZXZlbnQgaXMgbm90IHN1YmplY3QgdG8gdGhlIGNvbnN0cmFpbnQgZXhwcmVzc2VkIGJ5IGEgcGFydGljdWxhcgorICogSWYgYW4gZXZlbnRfaWQgaXMgbm90IHN1YmplY3QgdG8gdGhlIGNvbnN0cmFpbnQgZXhwcmVzc2VkIGJ5IGEgcGFydGljdWxhcgogICogZmllbGQsIHRoZW4gaXQgd2lsbCBoYXZlIDAgaW4gYm90aCB0aGUgbWFzayBhbmQgdmFsdWUgZm9yIHRoYXQgZmllbGQuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCBlZDI0YmQ5Li5jN2Q2NzFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zMjIsNyArMzIyLDcgQEAKIFNZU0NBTExfU1BVKGR1cDMpCiBTWVNDQUxMX1NQVShwaXBlMikKIFNZU0NBTEwoaW5vdGlmeV9pbml0MSkKLVNZU0NBTExfU1BVKHBlcmZfY291bnRlcl9vcGVuKQorU1lTQ0FMTF9TUFUocGVyZl9ldmVudF9vcGVuKQogQ09NUEFUX1NZU19TUFUocHJlYWR2KQogQ09NUEFUX1NZU19TUFUocHdyaXRldikKIENPTVBBVF9TWVMocnRfdGdzaWdxdWV1ZWluZm8pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggY2VmMDgwYi4uZjZjYTc2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzQxLDcgKzM0MSw3IEBACiAjZGVmaW5lIF9fTlJfZHVwMwkJMzE2CiAjZGVmaW5lIF9fTlJfcGlwZTIJCTMxNwogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzE4Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzE5CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMxOQogI2RlZmluZSBfX05SX3ByZWFkdgkJMzIwCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzIxCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzIyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCA1NjlmNzljLi5iMjM2NjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTk3LDcgKzk3LDcgQEAKIAogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikJKz0gZnRyYWNlLm8KLW9iai0kKENPTkZJR19QUENfUEVSRl9DVFJTKQkrPSBwZXJmX2NvdW50ZXIubyBwZXJmX2NhbGxjaGFpbi5vCitvYmotJChDT05GSUdfUFBDX1BFUkZfQ1RSUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfY2FsbGNoYWluLm8KIG9iajY0LSQoQ09ORklHX1BQQ19QRVJGX0NUUlMpCSs9IHBvd2VyNC1wbXUubyBwcGM5NzAtcG11Lm8gcG93ZXI1LXBtdS5vIFwKIAkJCQkgICBwb3dlcjUrLXBtdS5vIHBvd2VyNi1wbXUubyBwb3dlcjctcG11Lm8KIG9iajMyLSQoQ09ORklHX1BQQ19QRVJGX0NUUlMpCSs9IG1wYzc0NTAtcG11Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBmMGRmMjg1Li4wODEyYjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlERUZJTkUoUEFDQUtNU1IsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga2VybmVsX21zcikpOwogCURFRklORShQQUNBU09GVElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNvZnRfZW5hYmxlZCkpOwogCURFRklORShQQUNBSEFSRElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGhhcmRfZW5hYmxlZCkpOwotCURFRklORShQQUNBUEVSRlBFTkQsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgcGVyZl9jb3VudGVyX3BlbmRpbmcpKTsKKwlERUZJTkUoUEFDQVBFUkZQRU5ELCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHBlcmZfZXZlbnRfcGVuZGluZykpOwogCURFRklORShQQUNBQ09OVEVYVElELCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGNvbnRleHQuaWQpKTsKICNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUwogCURFRklORShQQUNBTE9XU0xJQ0VTUFNJWkUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCA2NmJjZGEzLi45MDBlMGVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC01NTYsMTQgKzU1NiwxNCBAQAogMjoKIAlUUkFDRV9BTkRfUkVTVE9SRV9JUlEocjUpOwogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLQkvKiBjaGVjayBwYWNhLT5wZXJmX2NvdW50ZXJfcGVuZGluZyBpZiB3ZSdyZSBlbmFibGluZyBpbnRzICovCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJLyogY2hlY2sgcGFjYS0+cGVyZl9ldmVudF9wZW5kaW5nIGlmIHdlJ3JlIGVuYWJsaW5nIGludHMgKi8KIAlsYnoJcjMsUEFDQVBFUkZQRU5EKHIxMykKIAlhbmQuCXIzLHIzLHI1CiAJYmVxCTI3ZgotCWJsCS5wZXJmX2NvdW50ZXJfZG9fcGVuZGluZworCWJsCS5wZXJmX2V2ZW50X2RvX3BlbmRpbmcKIDI3OgotI2VuZGlmIC8qIENPTkZJR19QRVJGX0NPVU5URVJTICovCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKIAkvKiBleHRyYWN0IEVFIGJpdCBhbmQgdXNlIGl0IHRvIHJlc3RvcmUgcGFjYS0+aGFyZF9lbmFibGVkICovCiAJbGQJcjMsX01TUihyMSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IGY3ZjM3NmUuLmU1ZDEyMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNTMsNyArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xMzgsOSArMTM4LDkgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VXzY0ICovCiAKLQlpZiAodGVzdF9wZXJmX2NvdW50ZXJfcGVuZGluZygpKSB7Ci0JCWNsZWFyX3BlcmZfY291bnRlcl9wZW5kaW5nKCk7Ci0JCXBlcmZfY291bnRlcl9kb19wZW5kaW5nKCk7CisJaWYgKHRlc3RfcGVyZl9ldmVudF9wZW5kaW5nKCkpIHsKKwkJY2xlYXJfcGVyZl9ldmVudF9wZW5kaW5nKCk7CisJCXBlcmZfZXZlbnRfZG9fcGVuZGluZygpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21wYzc0NTAtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21wYzc0NTAtcG11LmMKaW5kZXggY2M0NjZkMC4uMDlkNzIwMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tcGM3NDUwLXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbXBjNzQ1MC1wbXUuYwpAQCAtOSw3ICs5LDcgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggZjc0YjYyYy4uMGEwM2NmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY291bnRlci5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKc2ltaWxhcml0eSBpbmRleCA2MSUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NvdW50ZXIuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggN2NlZWZhZi4uYmJjYmFlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NvdW50ZXIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBQZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgLSBwb3dlcnBjIGFyY2hpdGVjdHVyZSBjb2RlCisgKiBQZXJmb3JtYW5jZSBldmVudCBzdXBwb3J0IC0gcG93ZXJwYyBhcmNoaXRlY3R1cmUgY29kZQogICoKICAqIENvcHlyaWdodCAyMDA4LTIwMDkgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3Jwb3JhdGlvbi4KICAqCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgpAQCAtMTksMjQgKzE5LDI0IEBACiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCi1zdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzIHsKLQlpbnQgbl9jb3VudGVyczsKK3N0cnVjdCBjcHVfaHdfZXZlbnRzIHsKKwlpbnQgbl9ldmVudHM7CiAJaW50IG5fcGVyY3B1OwogCWludCBkaXNhYmxlZDsKIAlpbnQgbl9hZGRlZDsKIAlpbnQgbl9saW1pdGVkOwogCXU4ICBwbWNzX2VuYWJsZWQ7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcltNQVhfSFdDT1VOVEVSU107Ci0JdTY0IGV2ZW50c1tNQVhfSFdDT1VOVEVSU107Ci0JdW5zaWduZWQgaW50IGZsYWdzW01BWF9IV0NPVU5URVJTXTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnRbTUFYX0hXRVZFTlRTXTsKKwl1NjQgZXZlbnRzW01BWF9IV0VWRU5UU107CisJdW5zaWduZWQgaW50IGZsYWdzW01BWF9IV0VWRU5UU107CiAJdW5zaWduZWQgbG9uZyBtbWNyWzNdOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmxpbWl0ZWRfY291bnRlcltNQVhfTElNSVRFRF9IV0NPVU5URVJTXTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqbGltaXRlZF9jb3VudGVyW01BWF9MSU1JVEVEX0hXQ09VTlRFUlNdOwogCXU4ICBsaW1pdGVkX2h3aWR4W01BWF9MSU1JVEVEX0hXQ09VTlRFUlNdOwotCXU2NCBhbHRlcm5hdGl2ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwotCXVuc2lnbmVkIGxvbmcgYW1hc2tzW01BWF9IV0NPVU5URVJTXVtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKLQl1bnNpZ25lZCBsb25nIGF2YWx1ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOworCXU2NCBhbHRlcm5hdGl2ZXNbTUFYX0hXRVZFTlRTXVtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKKwl1bnNpZ25lZCBsb25nIGFtYXNrc1tNQVhfSFdFVkVOVFNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOworCXVuc2lnbmVkIGxvbmcgYXZhbHVlc1tNQVhfSFdFVkVOVFNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwogfTsKLURFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfY291bnRlcnMsIGNwdV9od19jb3VudGVycyk7CitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2V2ZW50cywgY3B1X2h3X2V2ZW50cyk7CiAKIHN0cnVjdCBwb3dlcl9wbXUgKnBwbXU7CiAKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqIHdoZXJlIHRoZSBoeXBlcnZpc29yIGJpdCBpcyBmb3JjZWQgdG8gMSAoYXMgb24gQXBwbGUgRzUgcHJvY2Vzc29ycyksCiAgKiB0aGVuIHdlIG5lZWQgdG8gdXNlIHRoZSBGQ0hWIGJpdCB0byBpZ25vcmUga2VybmVsIGV2ZW50cy4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBmcmVlemVfY291bnRlcnNfa2VybmVsID0gTU1DUjBfRkNTOworc3RhdGljIHVuc2lnbmVkIGludCBmcmVlemVfZXZlbnRzX2tlcm5lbCA9IE1NQ1IwX0ZDUzsKIAogLyoKICAqIDMyLWJpdCBkb2Vzbid0IGhhdmUgTU1DUkEgYnV0IGRvZXMgaGF2ZSBhbiBNTUNSMiwKQEAgLTEyMiwxNCArMTIyLDE0IEBACiAKIAlpZiAocHBtdS0+ZmxhZ3MgJiBQUE1VX0FMVF9TSVBSKSB7CiAJCWlmIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSUhWKQotCQkJcmV0dXJuIFBFUkZfRVZFTlRfTUlTQ19IWVBFUlZJU09SOworCQkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUjsKIAkJcmV0dXJuIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSVBSKSA/Ci0JCQlQRVJGX0VWRU5UX01JU0NfVVNFUiA6IFBFUkZfRVZFTlRfTUlTQ19LRVJORUw7CisJCQlQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKIAl9CiAJaWYgKG1tY3JhICYgTU1DUkFfU0lIVikKLQkJcmV0dXJuIFBFUkZfRVZFTlRfTUlTQ19IWVBFUlZJU09SOwotCXJldHVybiAobW1jcmEgJiBNTUNSQV9TSVBSKSA/IFBFUkZfRVZFTlRfTUlTQ19VU0VSIDoKLQkJUEVSRl9FVkVOVF9NSVNDX0tFUk5FTDsKKwkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUjsKKwlyZXR1cm4gKG1tY3JhICYgTU1DUkFfU0lQUikgPyBQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOgorCQlQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKIH0KIAogLyoKQEAgLTE1Miw5ICsxNTIsOSBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCi12b2lkIHBlcmZfY291bnRlcl9wcmludF9kZWJ1Zyh2b2lkKQordm9pZCBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpCiB7CiB9CiAKQEAgLTI0MCwxNSArMjQwLDE1IEBACiAgKiBDaGVjayBpZiBhIHNldCBvZiBldmVudHMgY2FuIGFsbCBnbyBvbiB0aGUgUE1VIGF0IG9uY2UuCiAgKiBJZiB0aGV5IGNhbid0LCB0aGlzIHdpbGwgbG9vayBhdCBhbHRlcm5hdGl2ZSBjb2RlcyBmb3IgdGhlIGV2ZW50cwogICogYW5kIHNlZSBpZiBhbnkgY29tYmluYXRpb24gb2YgYWx0ZXJuYXRpdmUgY29kZXMgaXMgZmVhc2libGUuCi0gKiBUaGUgZmVhc2libGUgc2V0IGlzIHJldHVybmVkIGluIGV2ZW50W10uCisgKiBUaGUgZmVhc2libGUgc2V0IGlzIHJldHVybmVkIGluIGV2ZW50X2lkW10uCiAgKi8KLXN0YXRpYyBpbnQgcG93ZXJfY2hlY2tfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHcsCi0JCQkJICAgdTY0IGV2ZW50W10sIHVuc2lnbmVkIGludCBjZmxhZ3NbXSwKK3N0YXRpYyBpbnQgcG93ZXJfY2hlY2tfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3LAorCQkJCSAgIHU2NCBldmVudF9pZFtdLCB1bnNpZ25lZCBpbnQgY2ZsYWdzW10sCiAJCQkJICAgaW50IG5fZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCB2YWx1ZSwgbnY7Ci0JdW5zaWduZWQgbG9uZyBzbWFza3NbTUFYX0hXQ09VTlRFUlNdLCBzdmFsdWVzW01BWF9IV0NPVU5URVJTXTsKLQlpbnQgbl9hbHRbTUFYX0hXQ09VTlRFUlNdLCBjaG9pY2VbTUFYX0hXQ09VTlRFUlNdOworCXVuc2lnbmVkIGxvbmcgc21hc2tzW01BWF9IV0VWRU5UU10sIHN2YWx1ZXNbTUFYX0hXRVZFTlRTXTsKKwlpbnQgbl9hbHRbTUFYX0hXRVZFTlRTXSwgY2hvaWNlW01BWF9IV0VWRU5UU107CiAJaW50IGksIGo7CiAJdW5zaWduZWQgbG9uZyBhZGRmID0gcHBtdS0+YWRkX2ZpZWxkczsKIAl1bnNpZ25lZCBsb25nIHRhZGQgPSBwcG11LT50ZXN0X2FkZGVyOwpAQCAtMjU5LDEyICsyNTksMTIgQEAKIAkvKiBGaXJzdCBzZWUgaWYgdGhlIGV2ZW50cyB3aWxsIGdvIG9uIGFzLWlzICovCiAJZm9yIChpID0gMDsgaSA8IG5fZXY7ICsraSkgewogCQlpZiAoKGNmbGFnc1tpXSAmIFBQTVVfTElNSVRFRF9QTUNfUkVRRCkKLQkJICAgICYmICFwcG11LT5saW1pdGVkX3BtY19ldmVudChldmVudFtpXSkpIHsKLQkJCXBwbXUtPmdldF9hbHRlcm5hdGl2ZXMoZXZlbnRbaV0sIGNmbGFnc1tpXSwKKwkJICAgICYmICFwcG11LT5saW1pdGVkX3BtY19ldmVudChldmVudF9pZFtpXSkpIHsKKwkJCXBwbXUtPmdldF9hbHRlcm5hdGl2ZXMoZXZlbnRfaWRbaV0sIGNmbGFnc1tpXSwKIAkJCQkJICAgICAgIGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV0pOwotCQkJZXZlbnRbaV0gPSBjcHVody0+YWx0ZXJuYXRpdmVzW2ldWzBdOworCQkJZXZlbnRfaWRbaV0gPSBjcHVody0+YWx0ZXJuYXRpdmVzW2ldWzBdOwogCQl9Ci0JCWlmIChwcG11LT5nZXRfY29uc3RyYWludChldmVudFtpXSwgJmNwdWh3LT5hbWFza3NbaV1bMF0sCisJCWlmIChwcG11LT5nZXRfY29uc3RyYWludChldmVudF9pZFtpXSwgJmNwdWh3LT5hbWFza3NbaV1bMF0sCiAJCQkJCSAmY3B1aHctPmF2YWx1ZXNbaV1bMF0pKQogCQkJcmV0dXJuIC0xOwogCX0KQEAgLTI4Nyw3ICsyODcsNyBAQAogCQlyZXR1cm4gLTE7CiAJZm9yIChpID0gMDsgaSA8IG5fZXY7ICsraSkgewogCQljaG9pY2VbaV0gPSAwOwotCQluX2FsdFtpXSA9IHBwbXUtPmdldF9hbHRlcm5hdGl2ZXMoZXZlbnRbaV0sIGNmbGFnc1tpXSwKKwkJbl9hbHRbaV0gPSBwcG11LT5nZXRfYWx0ZXJuYXRpdmVzKGV2ZW50X2lkW2ldLCBjZmxhZ3NbaV0sCiAJCQkJCQkgIGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV0pOwogCQlmb3IgKGogPSAxOyBqIDwgbl9hbHRbaV07ICsraikKIAkJCXBwbXUtPmdldF9jb25zdHJhaW50KGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV1bal0sCkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJCWogPSBjaG9pY2VbaV07CiAJCX0KIAkJLyoKLQkJICogU2VlIGlmIGFueSBhbHRlcm5hdGl2ZSBrIGZvciBldmVudCBpLAorCQkgKiBTZWUgaWYgYW55IGFsdGVybmF0aXZlIGsgZm9yIGV2ZW50X2lkIGksCiAJCSAqIHdoZXJlIGsgPiBqLCB3aWxsIHNhdGlzZnkgdGhlIGNvbnN0cmFpbnRzLgogCQkgKi8KIAkJd2hpbGUgKCsraiA8IG5fYWx0W2ldKSB7CkBAIC0zMjEsMTYgKzMyMSwxNiBAQAogCQlpZiAoaiA+PSBuX2FsdFtpXSkgewogCQkJLyoKIAkJCSAqIE5vIGZlYXNpYmxlIGFsdGVybmF0aXZlLCBiYWNrdHJhY2sKLQkJCSAqIHRvIGV2ZW50IGktMSBhbmQgY29udGludWUgZW51bWVyYXRpbmcgaXRzCisJCQkgKiB0byBldmVudF9pZCBpLTEgYW5kIGNvbnRpbnVlIGVudW1lcmF0aW5nIGl0cwogCQkJICogYWx0ZXJuYXRpdmVzIGZyb20gd2hlcmUgd2UgZ290IHVwIHRvLgogCQkJICovCiAJCQlpZiAoLS1pIDwgMCkKIAkJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogRm91bmQgYSBmZWFzaWJsZSBhbHRlcm5hdGl2ZSBmb3IgZXZlbnQgaSwKLQkJCSAqIHJlbWVtYmVyIHdoZXJlIHdlIGdvdCB1cCB0byB3aXRoIHRoaXMgZXZlbnQsCi0JCQkgKiBnbyBvbiB0byB0aGUgbmV4dCBldmVudCwgYW5kIHN0YXJ0IHdpdGgKKwkJCSAqIEZvdW5kIGEgZmVhc2libGUgYWx0ZXJuYXRpdmUgZm9yIGV2ZW50X2lkIGksCisJCQkgKiByZW1lbWJlciB3aGVyZSB3ZSBnb3QgdXAgdG8gd2l0aCB0aGlzIGV2ZW50X2lkLAorCQkJICogZ28gb24gdG8gdGhlIG5leHQgZXZlbnRfaWQsIGFuZCBzdGFydCB3aXRoCiAJCQkgKiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUgZm9yIGl0LgogCQkJICovCiAJCQljaG9pY2VbaV0gPSBqOwpAQCAtMzQ1LDIxICszNDUsMjEgQEAKIAogCS8qIE9LLCB3ZSBoYXZlIGEgZmVhc2libGUgY29tYmluYXRpb24sIHRlbGwgdGhlIGNhbGxlciB0aGUgc29sdXRpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbl9ldjsgKytpKQotCQlldmVudFtpXSA9IGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV1bY2hvaWNlW2ldXTsKKwkJZXZlbnRfaWRbaV0gPSBjcHVody0+YWx0ZXJuYXRpdmVzW2ldW2Nob2ljZVtpXV07CiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBDaGVjayBpZiBuZXdseS1hZGRlZCBjb3VudGVycyBoYXZlIGNvbnNpc3RlbnQgc2V0dGluZ3MgZm9yCisgKiBDaGVjayBpZiBuZXdseS1hZGRlZCBldmVudHMgaGF2ZSBjb25zaXN0ZW50IHNldHRpbmdzIGZvcgogICogZXhjbHVkZV97dXNlcixrZXJuZWwsaHZ9IHdpdGggZWFjaCBvdGhlciBhbmQgYW55IHByZXZpb3VzbHkKLSAqIGFkZGVkIGNvdW50ZXJzLgorICogYWRkZWQgZXZlbnRzLgogICovCi1zdGF0aWMgaW50IGNoZWNrX2V4Y2x1ZGVzKHN0cnVjdCBwZXJmX2NvdW50ZXIgKipjdHJzLCB1bnNpZ25lZCBpbnQgY2ZsYWdzW10sCitzdGF0aWMgaW50IGNoZWNrX2V4Y2x1ZGVzKHN0cnVjdCBwZXJmX2V2ZW50ICoqY3RycywgdW5zaWduZWQgaW50IGNmbGFnc1tdLAogCQkJICBpbnQgbl9wcmV2LCBpbnQgbl9uZXcpCiB7CiAJaW50IGV1ID0gMCwgZWsgPSAwLCBlaCA9IDA7CiAJaW50IGksIG4sIGZpcnN0OwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCiAJbiA9IG5fcHJldiArIG5fbmV3OwogCWlmIChuIDw9IDEpCkBAIC0zNzEsMTUgKzM3MSwxNSBAQAogCQkJY2ZsYWdzW2ldICY9IH5QUE1VX0xJTUlURURfUE1DX1JFUUQ7CiAJCQljb250aW51ZTsKIAkJfQotCQljb3VudGVyID0gY3Ryc1tpXTsKKwkJZXZlbnQgPSBjdHJzW2ldOwogCQlpZiAoZmlyc3QpIHsKLQkJCWV1ID0gY291bnRlci0+YXR0ci5leGNsdWRlX3VzZXI7Ci0JCQllayA9IGNvdW50ZXItPmF0dHIuZXhjbHVkZV9rZXJuZWw7Ci0JCQllaCA9IGNvdW50ZXItPmF0dHIuZXhjbHVkZV9odjsKKwkJCWV1ID0gZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyOworCQkJZWsgPSBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbDsKKwkJCWVoID0gZXZlbnQtPmF0dHIuZXhjbHVkZV9odjsKIAkJCWZpcnN0ID0gMDsKLQkJfSBlbHNlIGlmIChjb3VudGVyLT5hdHRyLmV4Y2x1ZGVfdXNlciAhPSBldSB8fAotCQkJICAgY291bnRlci0+YXR0ci5leGNsdWRlX2tlcm5lbCAhPSBlayB8fAotCQkJICAgY291bnRlci0+YXR0ci5leGNsdWRlX2h2ICE9IGVoKSB7CisJCX0gZWxzZSBpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyICE9IGV1IHx8CisJCQkgICBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbCAhPSBlayB8fAorCQkJICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9odiAhPSBlaCkgewogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAl9CkBAIC0zOTIsMTEgKzM5MiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwb3dlcl9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQorc3RhdGljIHZvaWQgcG93ZXJfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXM2NCB2YWwsIGRlbHRhLCBwcmV2OwogCi0JaWYgKCFjb3VudGVyLT5ody5pZHgpCisJaWYgKCFldmVudC0+aHcuaWR4KQogCQlyZXR1cm47CiAJLyoKIAkgKiBQZXJmb3JtYW5jZSBtb25pdG9yIGludGVycnVwdHMgY29tZSBldmVuIHdoZW4gaW50ZXJydXB0cwpAQCAtNDA0LDIxICs0MDQsMjEgQEAKIAkgKiBUaGVyZWZvcmUgd2UgdHJlYXQgdGhlbSBsaWtlIE5NSXMuCiAJICovCiAJZG8gewotCQlwcmV2ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+aHcucHJldl9jb3VudCk7CisJCXByZXYgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAJCWJhcnJpZXIoKTsKLQkJdmFsID0gcmVhZF9wbWMoY291bnRlci0+aHcuaWR4KTsKLQl9IHdoaWxlIChhdG9taWM2NF9jbXB4Y2hnKCZjb3VudGVyLT5ody5wcmV2X2NvdW50LCBwcmV2LCB2YWwpICE9IHByZXYpOworCQl2YWwgPSByZWFkX3BtYyhldmVudC0+aHcuaWR4KTsKKwl9IHdoaWxlIChhdG9taWM2NF9jbXB4Y2hnKCZldmVudC0+aHcucHJldl9jb3VudCwgcHJldiwgdmFsKSAhPSBwcmV2KTsKIAogCS8qIFRoZSBjb3VudGVycyBhcmUgb25seSAzMiBiaXRzIHdpZGUgKi8KIAlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKLQlhdG9taWM2NF9hZGQoZGVsdGEsICZjb3VudGVyLT5jb3VudCk7Ci0JYXRvbWljNjRfc3ViKGRlbHRhLCAmY291bnRlci0+aHcucGVyaW9kX2xlZnQpOworCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJYXRvbWljNjRfc3ViKGRlbHRhLCAmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKIH0KIAogLyoKICAqIE9uIHNvbWUgbWFjaGluZXMsIFBNQzUgYW5kIFBNQzYgY2FuJ3QgYmUgd3JpdHRlbiwgZG9uJ3QgcmVzcGVjdAogICogdGhlIGZyZWV6ZSBjb25kaXRpb25zLCBhbmQgZG9uJ3QgZ2VuZXJhdGUgaW50ZXJydXB0cy4gIFRoaXMgdGVsbHMKLSAqIHVzIGlmIGBjb3VudGVyJyBpcyB1c2luZyBzdWNoIGEgUE1DLgorICogdXMgaWYgYGV2ZW50JyBpcyB1c2luZyBzdWNoIGEgUE1DLgogICovCiBzdGF0aWMgaW50IGlzX2xpbWl0ZWRfcG1jKGludCBwbWNudW0pCiB7CkBAIC00MjYsNTMgKzQyNiw1MyBAQAogCQkmJiAocG1jbnVtID09IDUgfHwgcG1jbnVtID09IDYpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlemVfbGltaXRlZF9jb3VudGVycyhzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodywKK3N0YXRpYyB2b2lkIGZyZWV6ZV9saW1pdGVkX2NvdW50ZXJzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodywKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBwbWM1LCB1bnNpZ25lZCBsb25nIHBtYzYpCiB7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJdTY0IHZhbCwgcHJldiwgZGVsdGE7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fbGltaXRlZDsgKytpKSB7Ci0JCWNvdW50ZXIgPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOwotCQlpZiAoIWNvdW50ZXItPmh3LmlkeCkKKwkJZXZlbnQgPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOworCQlpZiAoIWV2ZW50LT5ody5pZHgpCiAJCQljb250aW51ZTsKLQkJdmFsID0gKGNvdW50ZXItPmh3LmlkeCA9PSA1KSA/IHBtYzUgOiBwbWM2OwotCQlwcmV2ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+aHcucHJldl9jb3VudCk7Ci0JCWNvdW50ZXItPmh3LmlkeCA9IDA7CisJCXZhbCA9IChldmVudC0+aHcuaWR4ID09IDUpID8gcG1jNSA6IHBtYzY7CisJCXByZXYgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJCWV2ZW50LT5ody5pZHggPSAwOwogCQlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKLQkJYXRvbWljNjRfYWRkKGRlbHRhLCAmY291bnRlci0+Y291bnQpOworCQlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdGhhd19saW1pdGVkX2NvdW50ZXJzKHN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3LAorc3RhdGljIHZvaWQgdGhhd19saW1pdGVkX2NvdW50ZXJzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodywKIAkJCQkgIHVuc2lnbmVkIGxvbmcgcG1jNSwgdW5zaWduZWQgbG9uZyBwbWM2KQogewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXU2NCB2YWw7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fbGltaXRlZDsgKytpKSB7Ci0JCWNvdW50ZXIgPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOwotCQljb3VudGVyLT5ody5pZHggPSBjcHVody0+bGltaXRlZF9od2lkeFtpXTsKLQkJdmFsID0gKGNvdW50ZXItPmh3LmlkeCA9PSA1KSA/IHBtYzUgOiBwbWM2OwotCQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIHZhbCk7Ci0JCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisJCWV2ZW50ID0gY3B1aHctPmxpbWl0ZWRfY291bnRlcltpXTsKKwkJZXZlbnQtPmh3LmlkeCA9IGNwdWh3LT5saW1pdGVkX2h3aWR4W2ldOworCQl2YWwgPSAoZXZlbnQtPmh3LmlkeCA9PSA1KSA/IHBtYzUgOiBwbWM2OworCQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAJfQogfQogCiAvKgotICogU2luY2UgbGltaXRlZCBjb3VudGVycyBkb24ndCByZXNwZWN0IHRoZSBmcmVlemUgY29uZGl0aW9ucywgd2UKKyAqIFNpbmNlIGxpbWl0ZWQgZXZlbnRzIGRvbid0IHJlc3BlY3QgdGhlIGZyZWV6ZSBjb25kaXRpb25zLCB3ZQogICogaGF2ZSB0byByZWFkIHRoZW0gaW1tZWRpYXRlbHkgYWZ0ZXIgZnJlZXppbmcgb3IgdW5mcmVlemluZyB0aGUKLSAqIG90aGVyIGNvdW50ZXJzLiAgV2UgdHJ5IHRvIGtlZXAgdGhlIHZhbHVlcyBmcm9tIHRoZSBsaW1pdGVkCi0gKiBjb3VudGVycyBhcyBjb25zaXN0ZW50IGFzIHBvc3NpYmxlIGJ5IGtlZXBpbmcgdGhlIGRlbGF5IChpbgorICogb3RoZXIgZXZlbnRzLiAgV2UgdHJ5IHRvIGtlZXAgdGhlIHZhbHVlcyBmcm9tIHRoZSBsaW1pdGVkCisgKiBldmVudHMgYXMgY29uc2lzdGVudCBhcyBwb3NzaWJsZSBieSBrZWVwaW5nIHRoZSBkZWxheSAoaW4KICAqIGN5Y2xlcyBhbmQgaW5zdHJ1Y3Rpb25zKSBiZXR3ZWVuIGZyZWV6aW5nL3VuZnJlZXppbmcgYW5kIHJlYWRpbmcKLSAqIHRoZSBsaW1pdGVkIGNvdW50ZXJzIGFzIHNtYWxsIGFuZCBjb25zaXN0ZW50IGFzIHBvc3NpYmxlLgotICogVGhlcmVmb3JlLCBpZiBhbnkgbGltaXRlZCBjb3VudGVycyBhcmUgaW4gdXNlLCB3ZSByZWFkIHRoZW0KKyAqIHRoZSBsaW1pdGVkIGV2ZW50cyBhcyBzbWFsbCBhbmQgY29uc2lzdGVudCBhcyBwb3NzaWJsZS4KKyAqIFRoZXJlZm9yZSwgaWYgYW55IGxpbWl0ZWQgZXZlbnRzIGFyZSBpbiB1c2UsIHdlIHJlYWQgdGhlbQogICogYm90aCwgYW5kIGFsd2F5cyBpbiB0aGUgc2FtZSBvcmRlciwgdG8gbWluaW1pemUgdmFyaWFiaWxpdHksCiAgKiBhbmQgZG8gaXQgaW5zaWRlIHRoZSBzYW1lIGFzbSB0aGF0IHdyaXRlcyBNTUNSMC4KICAqLwotc3RhdGljIHZvaWQgd3JpdGVfbW1jcjAoc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHcsIHVuc2lnbmVkIGxvbmcgbW1jcjApCitzdGF0aWMgdm9pZCB3cml0ZV9tbWNyMChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHcsIHVuc2lnbmVkIGxvbmcgbW1jcjApCiB7CiAJdW5zaWduZWQgbG9uZyBwbWM1LCBwbWM2OwogCkBAIC00ODUsNyArNDg1LDcgQEAKIAkgKiBXcml0ZSBNTUNSMCwgdGhlbiByZWFkIFBNQzUgYW5kIFBNQzYgaW1tZWRpYXRlbHkuCiAJICogVG8gZW5zdXJlIHdlIGRvbid0IGdldCBhIHBlcmZvcm1hbmNlIG1vbml0b3IgaW50ZXJydXB0CiAJICogYmV0d2VlbiB3cml0aW5nIE1NQ1IwIGFuZCBmcmVlemluZy90aGF3aW5nIHRoZSBsaW1pdGVkCi0JICogY291bnRlcnMsIHdlIGZpcnN0IHdyaXRlIE1NQ1IwIHdpdGggdGhlIGNvdW50ZXIgb3ZlcmZsb3cKKwkgKiBldmVudHMsIHdlIGZpcnN0IHdyaXRlIE1NQ1IwIHdpdGggdGhlIGV2ZW50IG92ZXJmbG93CiAJICogaW50ZXJydXB0IGVuYWJsZSBiaXRzIHR1cm5lZCBvZmYuCiAJICovCiAJYXNtIHZvbGF0aWxlKCJtdHNwciAlMywlMjsgbWZzcHIgJTAsJTQ7IG1mc3ByICUxLCU1IgpAQCAtNTAwLDcgKzUwMCw3IEBACiAJCXRoYXdfbGltaXRlZF9jb3VudGVycyhjcHVodywgcG1jNSwgcG1jNik7CiAKIAkvKgotCSAqIFdyaXRlIHRoZSBmdWxsIE1NQ1IwIGluY2x1ZGluZyB0aGUgY291bnRlciBvdmVyZmxvdyBpbnRlcnJ1cHQKKwkgKiBXcml0ZSB0aGUgZnVsbCBNTUNSMCBpbmNsdWRpbmcgdGhlIGV2ZW50IG92ZXJmbG93IGludGVycnVwdAogCSAqIGVuYWJsZSBiaXRzLCBpZiBuZWNlc3NhcnkuCiAJICovCiAJaWYgKG1tY3IwICYgKE1NQ1IwX1BNQzFDRSB8IE1NQ1IwX1BNQ2pDRSkpCkBAIC01MDgsMTggKzUwOCwxOCBAQAogfQogCiAvKgotICogRGlzYWJsZSBhbGwgY291bnRlcnMgdG8gcHJldmVudCBQTVUgaW50ZXJydXB0cyBhbmQgdG8gYWxsb3cKLSAqIGNvdW50ZXJzIHRvIGJlIGFkZGVkIG9yIHJlbW92ZWQuCisgKiBEaXNhYmxlIGFsbCBldmVudHMgdG8gcHJldmVudCBQTVUgaW50ZXJydXB0cyBhbmQgdG8gYWxsb3cKKyAqIGV2ZW50cyB0byBiZSBhZGRlZCBvciByZW1vdmVkLgogICovCiB2b2lkIGh3X3BlcmZfZGlzYWJsZSh2b2lkKQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFwcG11KQogCQlyZXR1cm47CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCiAJaWYgKCFjcHVody0+ZGlzYWJsZWQpIHsKIAkJY3B1aHctPmRpc2FibGVkID0gMTsKQEAgLTU0NSw3ICs1NDUsNyBAQAogCQkvKgogCQkgKiBTZXQgdGhlICdmcmVlemUgY291bnRlcnMnIGJpdC4KIAkJICogVGhlIGJhcnJpZXIgaXMgdG8gbWFrZSBzdXJlIHRoZSBtdHNwciBoYXMgYmVlbgotCQkgKiBleGVjdXRlZCBhbmQgdGhlIFBNVSBoYXMgZnJvemVuIHRoZSBjb3VudGVycworCQkgKiBleGVjdXRlZCBhbmQgdGhlIFBNVSBoYXMgZnJvemVuIHRoZSBldmVudHMKIAkJICogYmVmb3JlIHdlIHJldHVybi4KIAkJICovCiAJCXdyaXRlX21tY3IwKGNwdWh3LCBtZnNwcihTUFJOX01NQ1IwKSB8IE1NQ1IwX0ZDKTsKQEAgLTU1NSwyNiArNTU1LDI2IEBACiB9CiAKIC8qCi0gKiBSZS1lbmFibGUgYWxsIGNvdW50ZXJzIGlmIGRpc2FibGUgPT0gMC4KLSAqIElmIHdlIHdlcmUgcHJldmlvdXNseSBkaXNhYmxlZCBhbmQgY291bnRlcnMgd2VyZSBhZGRlZCwgdGhlbgorICogUmUtZW5hYmxlIGFsbCBldmVudHMgaWYgZGlzYWJsZSA9PSAwLgorICogSWYgd2Ugd2VyZSBwcmV2aW91c2x5IGRpc2FibGVkIGFuZCBldmVudHMgd2VyZSBhZGRlZCwgdGhlbgogICogcHV0IHRoZSBuZXcgY29uZmlnIG9uIHRoZSBQTVUuCiAgKi8KIHZvaWQgaHdfcGVyZl9lbmFibGUodm9pZCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGk7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJczY0IGxlZnQ7Ci0JdW5zaWduZWQgaW50IGh3Y19pbmRleFtNQVhfSFdDT1VOVEVSU107CisJdW5zaWduZWQgaW50IGh3Y19pbmRleFtNQVhfSFdFVkVOVFNdOwogCWludCBuX2xpbTsKIAlpbnQgaWR4OwogCiAJaWYgKCFwcG11KQogCQlyZXR1cm47CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWlmICghY3B1aHctPmRpc2FibGVkKSB7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwpAQCAtNTgyLDIzICs1ODIsMjMgQEAKIAljcHVody0+ZGlzYWJsZWQgPSAwOwogCiAJLyoKLQkgKiBJZiB3ZSBkaWRuJ3QgY2hhbmdlIGFueXRoaW5nLCBvciBvbmx5IHJlbW92ZWQgY291bnRlcnMsCisJICogSWYgd2UgZGlkbid0IGNoYW5nZSBhbnl0aGluZywgb3Igb25seSByZW1vdmVkIGV2ZW50cywKIAkgKiBubyBuZWVkIHRvIHJlY2FsY3VsYXRlIE1NQ1IqIHNldHRpbmdzIGFuZCByZXNldCB0aGUgUE1Dcy4KIAkgKiBKdXN0IHJlZW5hYmxlIHRoZSBQTVUgd2l0aCB0aGUgY3VycmVudCBNTUNSKiBzZXR0aW5ncwotCSAqIChwb3NzaWJseSB1cGRhdGVkIGZvciByZW1vdmFsIG9mIGNvdW50ZXJzKS4KKwkgKiAocG9zc2libHkgdXBkYXRlZCBmb3IgcmVtb3ZhbCBvZiBldmVudHMpLgogCSAqLwogCWlmICghY3B1aHctPm5fYWRkZWQpIHsKIAkJbXRzcHIoU1BSTl9NTUNSQSwgY3B1aHctPm1tY3JbMl0gJiB+TU1DUkFfU0FNUExFX0VOQUJMRSk7CiAJCW10c3ByKFNQUk5fTU1DUjEsIGNwdWh3LT5tbWNyWzFdKTsKLQkJaWYgKGNwdWh3LT5uX2NvdW50ZXJzID09IDApCisJCWlmIChjcHVody0+bl9ldmVudHMgPT0gMCkKIAkJCXBwY19zZXRfcG11X2ludXNlKDApOwogCQlnb3RvIG91dF9lbmFibGU7CiAJfQogCiAJLyoKLQkgKiBDb21wdXRlIE1NQ1IqIHZhbHVlcyBmb3IgdGhlIG5ldyBzZXQgb2YgY291bnRlcnMKKwkgKiBDb21wdXRlIE1NQ1IqIHZhbHVlcyBmb3IgdGhlIG5ldyBzZXQgb2YgZXZlbnRzCiAJICovCi0JaWYgKHBwbXUtPmNvbXB1dGVfbW1jcihjcHVody0+ZXZlbnRzLCBjcHVody0+bl9jb3VudGVycywgaHdjX2luZGV4LAorCWlmIChwcG11LT5jb21wdXRlX21tY3IoY3B1aHctPmV2ZW50cywgY3B1aHctPm5fZXZlbnRzLCBod2NfaW5kZXgsCiAJCQkgICAgICAgY3B1aHctPm1tY3IpKSB7CiAJCS8qIHNob3VsZG4ndCBldmVyIGdldCBoZXJlICovCiAJCXByaW50ayhLRVJOX0VSUiAib29wcyBjb21wdXRlX21tY3IgZmFpbGVkXG4iKTsKQEAgLTYwNywyMiArNjA3LDIyIEBACiAKIAkvKgogCSAqIEFkZCBpbiBNTUNSMCBmcmVlemUgYml0cyBjb3JyZXNwb25kaW5nIHRvIHRoZQotCSAqIGF0dHIuZXhjbHVkZV8qIGJpdHMgZm9yIHRoZSBmaXJzdCBjb3VudGVyLgotCSAqIFdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgYWxsIGNvdW50ZXJzIGhhdmUgdGhlCi0JICogc2FtZSB2YWx1ZXMgZm9yIHRoZXNlIGJpdHMgYXMgdGhlIGZpcnN0IGNvdW50ZXIuCisJICogYXR0ci5leGNsdWRlXyogYml0cyBmb3IgdGhlIGZpcnN0IGV2ZW50LgorCSAqIFdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgYWxsIGV2ZW50cyBoYXZlIHRoZQorCSAqIHNhbWUgdmFsdWVzIGZvciB0aGVzZSBiaXRzIGFzIHRoZSBmaXJzdCBldmVudC4KIAkgKi8KLQljb3VudGVyID0gY3B1aHctPmNvdW50ZXJbMF07Ci0JaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVkZV91c2VyKQorCWV2ZW50ID0gY3B1aHctPmV2ZW50WzBdOworCWlmIChldmVudC0+YXR0ci5leGNsdWRlX3VzZXIpCiAJCWNwdWh3LT5tbWNyWzBdIHw9IE1NQ1IwX0ZDUDsKLQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX2tlcm5lbCkKLQkJY3B1aHctPm1tY3JbMF0gfD0gZnJlZXplX2NvdW50ZXJzX2tlcm5lbDsKLQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX2h2KQorCWlmIChldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbCkKKwkJY3B1aHctPm1tY3JbMF0gfD0gZnJlZXplX2V2ZW50c19rZXJuZWw7CisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHYpCiAJCWNwdWh3LT5tbWNyWzBdIHw9IE1NQ1IwX0ZDSFY7CiAKIAkvKgogCSAqIFdyaXRlIHRoZSBuZXcgY29uZmlndXJhdGlvbiB0byBNTUNSKiB3aXRoIHRoZSBmcmVlemUKLQkgKiBiaXQgc2V0IGFuZCBzZXQgdGhlIGhhcmR3YXJlIGNvdW50ZXJzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLgotCSAqIFRoZW4gdW5mcmVlemUgdGhlIGNvdW50ZXJzLgorCSAqIGJpdCBzZXQgYW5kIHNldCB0aGUgaGFyZHdhcmUgZXZlbnRzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLgorCSAqIFRoZW4gdW5mcmVlemUgdGhlIGV2ZW50cy4KIAkgKi8KIAlwcGNfc2V0X3BtdV9pbnVzZSgxKTsKIAltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSAmIH5NTUNSQV9TQU1QTEVfRU5BQkxFKTsKQEAgLTYzMSw0MyArNjMxLDQzIEBACiAJCQkJfCBNTUNSMF9GQyk7CiAKIAkvKgotCSAqIFJlYWQgb2ZmIGFueSBwcmUtZXhpc3RpbmcgY291bnRlcnMgdGhhdCBuZWVkIHRvIG1vdmUKKwkgKiBSZWFkIG9mZiBhbnkgcHJlLWV4aXN0aW5nIGV2ZW50cyB0aGF0IG5lZWQgdG8gbW92ZQogCSAqIHRvIGFub3RoZXIgUE1DLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9jb3VudGVyczsgKytpKSB7Ci0JCWNvdW50ZXIgPSBjcHVody0+Y291bnRlcltpXTsKLQkJaWYgKGNvdW50ZXItPmh3LmlkeCAmJiBjb3VudGVyLT5ody5pZHggIT0gaHdjX2luZGV4W2ldICsgMSkgewotCQkJcG93ZXJfcG11X3JlYWQoY291bnRlcik7Ci0JCQl3cml0ZV9wbWMoY291bnRlci0+aHcuaWR4LCAwKTsKLQkJCWNvdW50ZXItPmh3LmlkeCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2V2ZW50czsgKytpKSB7CisJCWV2ZW50ID0gY3B1aHctPmV2ZW50W2ldOworCQlpZiAoZXZlbnQtPmh3LmlkeCAmJiBldmVudC0+aHcuaWR4ICE9IGh3Y19pbmRleFtpXSArIDEpIHsKKwkJCXBvd2VyX3BtdV9yZWFkKGV2ZW50KTsKKwkJCXdyaXRlX3BtYyhldmVudC0+aHcuaWR4LCAwKTsKKwkJCWV2ZW50LT5ody5pZHggPSAwOwogCQl9CiAJfQogCiAJLyoKLQkgKiBJbml0aWFsaXplIHRoZSBQTUNzIGZvciBhbGwgdGhlIG5ldyBhbmQgbW92ZWQgY291bnRlcnMuCisJICogSW5pdGlhbGl6ZSB0aGUgUE1DcyBmb3IgYWxsIHRoZSBuZXcgYW5kIG1vdmVkIGV2ZW50cy4KIAkgKi8KIAljcHVody0+bl9saW1pdGVkID0gbl9saW0gPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9jb3VudGVyczsgKytpKSB7Ci0JCWNvdW50ZXIgPSBjcHVody0+Y291bnRlcltpXTsKLQkJaWYgKGNvdW50ZXItPmh3LmlkeCkKKwlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fZXZlbnRzOyArK2kpIHsKKwkJZXZlbnQgPSBjcHVody0+ZXZlbnRbaV07CisJCWlmIChldmVudC0+aHcuaWR4KQogCQkJY29udGludWU7CiAJCWlkeCA9IGh3Y19pbmRleFtpXSArIDE7CiAJCWlmIChpc19saW1pdGVkX3BtYyhpZHgpKSB7Ci0JCQljcHVody0+bGltaXRlZF9jb3VudGVyW25fbGltXSA9IGNvdW50ZXI7CisJCQljcHVody0+bGltaXRlZF9jb3VudGVyW25fbGltXSA9IGV2ZW50OwogCQkJY3B1aHctPmxpbWl0ZWRfaHdpZHhbbl9saW1dID0gaWR4OwogCQkJKytuX2xpbTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXZhbCA9IDA7Ci0JCWlmIChjb3VudGVyLT5ody5zYW1wbGVfcGVyaW9kKSB7Ci0JCQlsZWZ0ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+aHcucGVyaW9kX2xlZnQpOworCQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpIHsKKwkJCWxlZnQgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpOwogCQkJaWYgKGxlZnQgPCAweDgwMDAwMDAwTCkKIAkJCQl2YWwgPSAweDgwMDAwMDAwTCAtIGxlZnQ7CiAJCX0KLQkJYXRvbWljNjRfc2V0KCZjb3VudGVyLT5ody5wcmV2X2NvdW50LCB2YWwpOwotCQljb3VudGVyLT5ody5pZHggPSBpZHg7CisJCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJCWV2ZW50LT5ody5pZHggPSBpZHg7CiAJCXdyaXRlX3BtYyhpZHgsIHZhbCk7Ci0JCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAl9CiAJY3B1aHctPm5fbGltaXRlZCA9IG5fbGltOwogCWNwdWh3LT5tbWNyWzBdIHw9IE1NQ1IwX1BNWEUgfCBNTUNSMF9GQ0VDRTsKQEAgLTY4OCw4NSArNjg4LDg1IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGNvbGxlY3RfZXZlbnRzKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwLCBpbnQgbWF4X2NvdW50LAotCQkJICBzdHJ1Y3QgcGVyZl9jb3VudGVyICpjdHJzW10sIHU2NCAqZXZlbnRzLAorc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXAsIGludCBtYXhfY291bnQsCisJCQkgIHN0cnVjdCBwZXJmX2V2ZW50ICpjdHJzW10sIHU2NCAqZXZlbnRzLAogCQkJICB1bnNpZ25lZCBpbnQgKmZsYWdzKQogewogCWludCBuID0gMDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAotCWlmICghaXNfc29mdHdhcmVfY291bnRlcihncm91cCkpIHsKKwlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGdyb3VwKSkgewogCQlpZiAobiA+PSBtYXhfY291bnQpCiAJCQlyZXR1cm4gLTE7CiAJCWN0cnNbbl0gPSBncm91cDsKLQkJZmxhZ3Nbbl0gPSBncm91cC0+aHcuY291bnRlcl9iYXNlOworCQlmbGFnc1tuXSA9IGdyb3VwLT5ody5ldmVudF9iYXNlOwogCQlldmVudHNbbisrXSA9IGdyb3VwLT5ody5jb25maWc7CiAJfQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmdyb3VwLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpIHsKLQkJaWYgKCFpc19zb2Z0d2FyZV9jb3VudGVyKGNvdW50ZXIpICYmCi0JCSAgICBjb3VudGVyLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmdyb3VwLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpICYmCisJCSAgICBldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKIAkJCWlmIChuID49IG1heF9jb3VudCkKIAkJCQlyZXR1cm4gLTE7Ci0JCQljdHJzW25dID0gY291bnRlcjsKLQkJCWZsYWdzW25dID0gY291bnRlci0+aHcuY291bnRlcl9iYXNlOwotCQkJZXZlbnRzW24rK10gPSBjb3VudGVyLT5ody5jb25maWc7CisJCQljdHJzW25dID0gZXZlbnQ7CisJCQlmbGFnc1tuXSA9IGV2ZW50LT5ody5ldmVudF9iYXNlOworCQkJZXZlbnRzW24rK10gPSBldmVudC0+aHcuY29uZmlnOwogCQl9CiAJfQogCXJldHVybiBuOwogfQogCi1zdGF0aWMgdm9pZCBjb3VudGVyX3NjaGVkX2luKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBjcHUpCitzdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBjcHUpCiB7Ci0JY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFOwotCWNvdW50ZXItPm9uY3B1ID0gY3B1OwotCWNvdW50ZXItPnRzdGFtcF9ydW5uaW5nICs9IGNvdW50ZXItPmN0eC0+dGltZSAtIGNvdW50ZXItPnRzdGFtcF9zdG9wcGVkOwotCWlmIChpc19zb2Z0d2FyZV9jb3VudGVyKGNvdW50ZXIpKQotCQljb3VudGVyLT5wbXUtPmVuYWJsZShjb3VudGVyKTsKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKKwlldmVudC0+b25jcHUgPSBjcHU7CisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGV2ZW50LT5jdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CisJaWYgKGlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKKwkJZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KTsKIH0KIAogLyoKLSAqIENhbGxlZCB0byBlbmFibGUgYSB3aG9sZSBncm91cCBvZiBjb3VudGVycy4KKyAqIENhbGxlZCB0byBlbmFibGUgYSB3aG9sZSBncm91cCBvZiBldmVudHMuCiAgKiBSZXR1cm5zIDEgaWYgdGhlIGdyb3VwIHdhcyBlbmFibGVkLCBvciAtRUFHQUlOIGlmIGl0IGNvdWxkIG5vdCBiZS4KICAqIEFzc3VtZXMgdGhlIGNhbGxlciBoYXMgZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgaGFzCiAgKiBmcm96ZW4gdGhlIFBNVSB3aXRoIGh3X3BlcmZfc2F2ZV9kaXNhYmxlLgogICovCi1pbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cF9sZWFkZXIsCitpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCSAgICAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCwgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKIAlsb25nIGksIG4sIG4wOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKnN1YjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqc3ViOwogCiAJaWYgKCFwcG11KQogCQlyZXR1cm4gMDsKLQljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JbjAgPSBjcHVody0+bl9jb3VudGVyczsKKwljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCW4wID0gY3B1aHctPm5fZXZlbnRzOwogCW4gPSBjb2xsZWN0X2V2ZW50cyhncm91cF9sZWFkZXIsIHBwbXUtPm5fY291bnRlciAtIG4wLAotCQkJICAgJmNwdWh3LT5jb3VudGVyW24wXSwgJmNwdWh3LT5ldmVudHNbbjBdLAorCQkJICAgJmNwdWh3LT5ldmVudFtuMF0sICZjcHVody0+ZXZlbnRzW24wXSwKIAkJCSAgICZjcHVody0+ZmxhZ3NbbjBdKTsKIAlpZiAobiA8IDApCiAJCXJldHVybiAtRUFHQUlOOwotCWlmIChjaGVja19leGNsdWRlcyhjcHVody0+Y291bnRlciwgY3B1aHctPmZsYWdzLCBuMCwgbikpCisJaWYgKGNoZWNrX2V4Y2x1ZGVzKGNwdWh3LT5ldmVudCwgY3B1aHctPmZsYWdzLCBuMCwgbikpCiAJCXJldHVybiAtRUFHQUlOOwogCWkgPSBwb3dlcl9jaGVja19jb25zdHJhaW50cyhjcHVodywgY3B1aHctPmV2ZW50cywgY3B1aHctPmZsYWdzLCBuICsgbjApOwogCWlmIChpIDwgMCkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JY3B1aHctPm5fY291bnRlcnMgPSBuMCArIG47CisJY3B1aHctPm5fZXZlbnRzID0gbjAgKyBuOwogCWNwdWh3LT5uX2FkZGVkICs9IG47CiAKIAkvKgotCSAqIE9LLCB0aGlzIGdyb3VwIGNhbiBnbyBvbjsgdXBkYXRlIGNvdW50ZXIgc3RhdGVzIGV0Yy4sCi0JICogYW5kIGVuYWJsZSBhbnkgc29mdHdhcmUgY291bnRlcnMKKwkgKiBPSywgdGhpcyBncm91cCBjYW4gZ28gb247IHVwZGF0ZSBldmVudCBzdGF0ZXMgZXRjLiwKKwkgKiBhbmQgZW5hYmxlIGFueSBzb2Z0d2FyZSBldmVudHMKIAkgKi8KIAlmb3IgKGkgPSBuMDsgaSA8IG4wICsgbjsgKytpKQotCQljcHVody0+Y291bnRlcltpXS0+aHcuY29uZmlnID0gY3B1aHctPmV2ZW50c1tpXTsKKwkJY3B1aHctPmV2ZW50W2ldLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW2ldOwogCWNwdWN0eC0+YWN0aXZlX29uY3B1ICs9IG47CiAJbiA9IDE7Ci0JY291bnRlcl9zY2hlZF9pbihncm91cF9sZWFkZXIsIGNwdSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkgewotCQlpZiAoc3ViLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGKSB7Ci0JCQljb3VudGVyX3NjaGVkX2luKHN1YiwgY3B1KTsKKwlldmVudF9zY2hlZF9pbihncm91cF9sZWFkZXIsIGNwdSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKHN1Yi0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKKwkJCWV2ZW50X3NjaGVkX2luKHN1YiwgY3B1KTsKIAkJCSsrbjsKIAkJfQogCX0KQEAgLTc3NiwxNCArNzc2LDE0IEBACiB9CiAKIC8qCi0gKiBBZGQgYSBjb3VudGVyIHRvIHRoZSBQTVUuCi0gKiBJZiBhbGwgY291bnRlcnMgYXJlIG5vdCBhbHJlYWR5IGZyb3plbiwgdGhlbiB3ZSBkaXNhYmxlIGFuZAorICogQWRkIGEgZXZlbnQgdG8gdGhlIFBNVS4KKyAqIElmIGFsbCBldmVudHMgYXJlIG5vdCBhbHJlYWR5IGZyb3plbiwgdGhlbiB3ZSBkaXNhYmxlIGFuZAogICogcmUtZW5hYmxlIHRoZSBQTVUgaW4gb3JkZXIgdG8gZ2V0IGh3X3BlcmZfZW5hYmxlIHRvIGRvIHRoZQogICogYWN0dWFsIHdvcmsgb2YgcmVjb25maWd1cmluZyB0aGUgUE1VLgogICovCi1zdGF0aWMgaW50IHBvd2VyX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3N0YXRpYyBpbnQgcG93ZXJfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHc7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG4wOwogCWludCByZXQgPSAtRUFHQUlOOwpAQCAtNzkyLDIzICs3OTIsMjMgQEAKIAlwZXJmX2Rpc2FibGUoKTsKIAogCS8qCi0JICogQWRkIHRoZSBjb3VudGVyIHRvIHRoZSBsaXN0IChpZiB0aGVyZSBpcyByb29tKQorCSAqIEFkZCB0aGUgZXZlbnQgdG8gdGhlIGxpc3QgKGlmIHRoZXJlIGlzIHJvb20pCiAJICogYW5kIGNoZWNrIHdoZXRoZXIgdGhlIHRvdGFsIHNldCBpcyBzdGlsbCBmZWFzaWJsZS4KIAkgKi8KLQljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JbjAgPSBjcHVody0+bl9jb3VudGVyczsKKwljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCW4wID0gY3B1aHctPm5fZXZlbnRzOwogCWlmIChuMCA+PSBwcG11LT5uX2NvdW50ZXIpCiAJCWdvdG8gb3V0OwotCWNwdWh3LT5jb3VudGVyW24wXSA9IGNvdW50ZXI7Ci0JY3B1aHctPmV2ZW50c1tuMF0gPSBjb3VudGVyLT5ody5jb25maWc7Ci0JY3B1aHctPmZsYWdzW24wXSA9IGNvdW50ZXItPmh3LmNvdW50ZXJfYmFzZTsKLQlpZiAoY2hlY2tfZXhjbHVkZXMoY3B1aHctPmNvdW50ZXIsIGNwdWh3LT5mbGFncywgbjAsIDEpKQorCWNwdWh3LT5ldmVudFtuMF0gPSBldmVudDsKKwljcHVody0+ZXZlbnRzW24wXSA9IGV2ZW50LT5ody5jb25maWc7CisJY3B1aHctPmZsYWdzW24wXSA9IGV2ZW50LT5ody5ldmVudF9iYXNlOworCWlmIChjaGVja19leGNsdWRlcyhjcHVody0+ZXZlbnQsIGNwdWh3LT5mbGFncywgbjAsIDEpKQogCQlnb3RvIG91dDsKIAlpZiAocG93ZXJfY2hlY2tfY29uc3RyYWludHMoY3B1aHcsIGNwdWh3LT5ldmVudHMsIGNwdWh3LT5mbGFncywgbjAgKyAxKSkKIAkJZ290byBvdXQ7CiAKLQljb3VudGVyLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW24wXTsKLQkrK2NwdWh3LT5uX2NvdW50ZXJzOworCWV2ZW50LT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW24wXTsKKwkrK2NwdWh3LT5uX2V2ZW50czsKIAkrK2NwdWh3LT5uX2FkZGVkOwogCiAJcmV0ID0gMDsKQEAgLTgxOSwzNiArODE5LDM2IEBACiB9CiAKIC8qCi0gKiBSZW1vdmUgYSBjb3VudGVyIGZyb20gdGhlIFBNVS4KKyAqIFJlbW92ZSBhIGV2ZW50IGZyb20gdGhlIFBNVS4KICAqLwotc3RhdGljIHZvaWQgcG93ZXJfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3N0YXRpYyB2b2lkIHBvd2VyX3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CiAJbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcGVyZl9kaXNhYmxlKCk7CiAKLQlwb3dlcl9wbXVfcmVhZChjb3VudGVyKTsKKwlwb3dlcl9wbXVfcmVhZChldmVudCk7CiAKLQljcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0JZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2NvdW50ZXJzOyArK2kpIHsKLQkJaWYgKGNvdW50ZXIgPT0gY3B1aHctPmNvdW50ZXJbaV0pIHsKLQkJCXdoaWxlICgrK2kgPCBjcHVody0+bl9jb3VudGVycykKLQkJCQljcHVody0+Y291bnRlcltpLTFdID0gY3B1aHctPmNvdW50ZXJbaV07Ci0JCQktLWNwdWh3LT5uX2NvdW50ZXJzOwotCQkJcHBtdS0+ZGlzYWJsZV9wbWMoY291bnRlci0+aHcuaWR4IC0gMSwgY3B1aHctPm1tY3IpOwotCQkJaWYgKGNvdW50ZXItPmh3LmlkeCkgewotCQkJCXdyaXRlX3BtYyhjb3VudGVyLT5ody5pZHgsIDApOwotCQkJCWNvdW50ZXItPmh3LmlkeCA9IDA7CisJY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3B1aHctPm5fZXZlbnRzOyArK2kpIHsKKwkJaWYgKGV2ZW50ID09IGNwdWh3LT5ldmVudFtpXSkgeworCQkJd2hpbGUgKCsraSA8IGNwdWh3LT5uX2V2ZW50cykKKwkJCQljcHVody0+ZXZlbnRbaS0xXSA9IGNwdWh3LT5ldmVudFtpXTsKKwkJCS0tY3B1aHctPm5fZXZlbnRzOworCQkJcHBtdS0+ZGlzYWJsZV9wbWMoZXZlbnQtPmh3LmlkeCAtIDEsIGNwdWh3LT5tbWNyKTsKKwkJCWlmIChldmVudC0+aHcuaWR4KSB7CisJCQkJd3JpdGVfcG1jKGV2ZW50LT5ody5pZHgsIDApOworCQkJCWV2ZW50LT5ody5pZHggPSAwOwogCQkJfQotCQkJcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKKwkJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9saW1pdGVkOyArK2kpCi0JCWlmIChjb3VudGVyID09IGNwdWh3LT5saW1pdGVkX2NvdW50ZXJbaV0pCisJCWlmIChldmVudCA9PSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldKQogCQkJYnJlYWs7CiAJaWYgKGkgPCBjcHVody0+bl9saW1pdGVkKSB7CiAJCXdoaWxlICgrK2kgPCBjcHVody0+bl9saW1pdGVkKSB7CkBAIC04NTcsOCArODU3LDggQEAKIAkJfQogCQktLWNwdWh3LT5uX2xpbWl0ZWQ7CiAJfQotCWlmIChjcHVody0+bl9jb3VudGVycyA9PSAwKSB7Ci0JCS8qIGRpc2FibGUgZXhjZXB0aW9ucyBpZiBubyBjb3VudGVycyBhcmUgcnVubmluZyAqLworCWlmIChjcHVody0+bl9ldmVudHMgPT0gMCkgeworCQkvKiBkaXNhYmxlIGV4Y2VwdGlvbnMgaWYgbm8gZXZlbnRzIGFyZSBydW5uaW5nICovCiAJCWNwdWh3LT5tbWNyWzBdICY9IH4oTU1DUjBfUE1YRSB8IE1NQ1IwX0ZDRUNFKTsKIAl9CiAKQEAgLTg2NywyOCArODY3LDI4IEBACiB9CiAKIC8qCi0gKiBSZS1lbmFibGUgaW50ZXJydXB0cyBvbiBhIGNvdW50ZXIgYWZ0ZXIgdGhleSB3ZXJlIHRocm90dGxlZAorICogUmUtZW5hYmxlIGludGVycnVwdHMgb24gYSBldmVudCBhZnRlciB0aGV5IHdlcmUgdGhyb3R0bGVkCiAgKiBiZWNhdXNlIHRoZXkgd2VyZSBjb21pbmcgdG9vIGZhc3QuCiAgKi8KLXN0YXRpYyB2b2lkIHBvd2VyX3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgdm9pZCBwb3dlcl9wbXVfdW50aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJczY0IHZhbCwgbGVmdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFjb3VudGVyLT5ody5pZHggfHwgIWNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpCisJaWYgKCFldmVudC0+aHcuaWR4IHx8ICFldmVudC0+aHcuc2FtcGxlX3BlcmlvZCkKIAkJcmV0dXJuOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwZXJmX2Rpc2FibGUoKTsKLQlwb3dlcl9wbXVfcmVhZChjb3VudGVyKTsKLQlsZWZ0ID0gY291bnRlci0+aHcuc2FtcGxlX3BlcmlvZDsKLQljb3VudGVyLT5ody5sYXN0X3BlcmlvZCA9IGxlZnQ7CisJcG93ZXJfcG11X3JlYWQoZXZlbnQpOworCWxlZnQgPSBldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKKwlldmVudC0+aHcubGFzdF9wZXJpb2QgPSBsZWZ0OwogCXZhbCA9IDA7CiAJaWYgKGxlZnQgPCAweDgwMDAwMDAwTCkKIAkJdmFsID0gMHg4MDAwMDAwMEwgLSBsZWZ0OwotCXdyaXRlX3BtYyhjb3VudGVyLT5ody5pZHgsIHZhbCk7Ci0JYXRvbWljNjRfc2V0KCZjb3VudGVyLT5ody5wcmV2X2NvdW50LCB2YWwpOwotCWF0b21pYzY0X3NldCgmY291bnRlci0+aHcucGVyaW9kX2xlZnQsIGxlZnQpOwotCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisJd3JpdGVfcG1jKGV2ZW50LT5ody5pZHgsIHZhbCk7CisJYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKKwlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCXBlcmZfZW5hYmxlKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtOTAxLDI5ICs5MDEsMjkgQEAKIH07CiAKIC8qCi0gKiBSZXR1cm4gMSBpZiB3ZSBtaWdodCBiZSBhYmxlIHRvIHB1dCBjb3VudGVyIG9uIGEgbGltaXRlZCBQTUMsCisgKiBSZXR1cm4gMSBpZiB3ZSBtaWdodCBiZSBhYmxlIHRvIHB1dCBldmVudCBvbiBhIGxpbWl0ZWQgUE1DLAogICogb3IgMCBpZiBub3QuCi0gKiBBIGNvdW50ZXIgY2FuIG9ubHkgZ28gb24gYSBsaW1pdGVkIFBNQyBpZiBpdCBjb3VudHMgc29tZXRoaW5nCisgKiBBIGV2ZW50IGNhbiBvbmx5IGdvIG9uIGEgbGltaXRlZCBQTUMgaWYgaXQgY291bnRzIHNvbWV0aGluZwogICogdGhhdCBhIGxpbWl0ZWQgUE1DIGNhbiBjb3VudCwgZG9lc24ndCByZXF1aXJlIGludGVycnVwdHMsIGFuZAogICogZG9lc24ndCBleGNsdWRlIGFueSBwcm9jZXNzb3IgbW9kZS4KICAqLwotc3RhdGljIGludCBjYW5fZ29fb25fbGltaXRlZF9wbWMoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgdTY0IGV2LAorc3RhdGljIGludCBjYW5fZ29fb25fbGltaXRlZF9wbWMoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgZXYsCiAJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgbjsKIAl1NjQgYWx0W01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwogCi0JaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVkZV91c2VyCi0JICAgIHx8IGNvdW50ZXItPmF0dHIuZXhjbHVkZV9rZXJuZWwKLQkgICAgfHwgY291bnRlci0+YXR0ci5leGNsdWRlX2h2Ci0JICAgIHx8IGNvdW50ZXItPmF0dHIuc2FtcGxlX3BlcmlvZCkKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyCisJICAgIHx8IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfa2VybmVsCisJICAgIHx8IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHYKKwkgICAgfHwgZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocHBtdS0+bGltaXRlZF9wbWNfZXZlbnQoZXYpKQogCQlyZXR1cm4gMTsKIAogCS8qCi0JICogVGhlIHJlcXVlc3RlZCBldmVudCBpc24ndCBvbiBhIGxpbWl0ZWQgUE1DIGFscmVhZHk7CisJICogVGhlIHJlcXVlc3RlZCBldmVudF9pZCBpc24ndCBvbiBhIGxpbWl0ZWQgUE1DIGFscmVhZHk7CiAJICogc2VlIGlmIGFueSBhbHRlcm5hdGl2ZSBjb2RlIGdvZXMgb24gYSBsaW1pdGVkIFBNQy4KIAkgKi8KIAlpZiAoIXBwbXUtPmdldF9hbHRlcm5hdGl2ZXMpCkBAIC05MzYsOSArOTM2LDkgQEAKIH0KIAogLyoKLSAqIEZpbmQgYW4gYWx0ZXJuYXRpdmUgZXZlbnQgdGhhdCBnb2VzIG9uIGEgbm9ybWFsIFBNQywgaWYgcG9zc2libGUsCi0gKiBhbmQgcmV0dXJuIHRoZSBldmVudCBjb2RlLCBvciAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggYWx0ZXJuYXRpdmUuCi0gKiAoTm90ZTogZXZlbnQgY29kZSAwIGlzICJkb24ndCBjb3VudCIgb24gYWxsIG1hY2hpbmVzLikKKyAqIEZpbmQgYW4gYWx0ZXJuYXRpdmUgZXZlbnRfaWQgdGhhdCBnb2VzIG9uIGEgbm9ybWFsIFBNQywgaWYgcG9zc2libGUsCisgKiBhbmQgcmV0dXJuIHRoZSBldmVudF9pZCBjb2RlLCBvciAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggYWx0ZXJuYXRpdmUuCisgKiAoTm90ZTogZXZlbnRfaWQgY29kZSAwIGlzICJkb24ndCBjb3VudCIgb24gYWxsIG1hY2hpbmVzLikKICAqLwogc3RhdGljIHU2NCBub3JtYWxfcG1jX2FsdGVybmF0aXZlKHU2NCBldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTk1MiwyNiArOTUyLDI2IEBACiAJcmV0dXJuIGFsdFswXTsKIH0KIAotLyogTnVtYmVyIG9mIHBlcmZfY291bnRlcnMgY291bnRpbmcgaGFyZHdhcmUgZXZlbnRzICovCi1zdGF0aWMgYXRvbWljX3QgbnVtX2NvdW50ZXJzOworLyogTnVtYmVyIG9mIHBlcmZfZXZlbnRzIGNvdW50aW5nIGhhcmR3YXJlIGV2ZW50cyAqLworc3RhdGljIGF0b21pY190IG51bV9ldmVudHM7CiAvKiBVc2VkIHRvIGF2b2lkIHJhY2VzIGluIGNhbGxpbmcgcmVzZXJ2ZS9yZWxlYXNlX3BtY19oYXJkd2FyZSAqLwogc3RhdGljIERFRklORV9NVVRFWChwbWNfcmVzZXJ2ZV9tdXRleCk7CiAKIC8qCi0gKiBSZWxlYXNlIHRoZSBQTVUgaWYgdGhpcyBpcyB0aGUgbGFzdCBwZXJmX2NvdW50ZXIuCisgKiBSZWxlYXNlIHRoZSBQTVUgaWYgdGhpcyBpcyB0aGUgbGFzdCBwZXJmX2V2ZW50LgogICovCi1zdGF0aWMgdm9pZCBod19wZXJmX2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQorc3RhdGljIHZvaWQgaHdfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZudW1fY291bnRlcnMsIC0xLCAxKSkgeworCWlmICghYXRvbWljX2FkZF91bmxlc3MoJm51bV9ldmVudHMsIC0xLCAxKSkgewogCQltdXRleF9sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7Ci0JCWlmIChhdG9taWNfZGVjX3JldHVybigmbnVtX2NvdW50ZXJzKSA9PSAwKQorCQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJm51bV9ldmVudHMpID09IDApCiAJCQlyZWxlYXNlX3BtY19oYXJkd2FyZSgpOwogCQltdXRleF91bmxvY2soJnBtY19yZXNlcnZlX211dGV4KTsKIAl9CiB9CiAKIC8qCi0gKiBUcmFuc2xhdGUgYSBnZW5lcmljIGNhY2hlIGV2ZW50IGNvbmZpZyB0byBhIHJhdyBldmVudCBjb2RlLgorICogVHJhbnNsYXRlIGEgZ2VuZXJpYyBjYWNoZSBldmVudF9pZCBjb25maWcgdG8gYSByYXcgZXZlbnRfaWQgY29kZS4KICAqLwogc3RhdGljIGludCBod19wZXJmX2NhY2hlX2V2ZW50KHU2NCBjb25maWcsIHU2NCAqZXZlbnRwKQogewpAQCAtMTAwMCwzOSArMTAwMCwzOSBAQAogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQorY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAl1NjQgZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjdHJzW01BWF9IV0NPVU5URVJTXTsKLQl1NjQgZXZlbnRzW01BWF9IV0NPVU5URVJTXTsKLQl1bnNpZ25lZCBpbnQgY2ZsYWdzW01BWF9IV0NPVU5URVJTXTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqY3Ryc1tNQVhfSFdFVkVOVFNdOworCXU2NCBldmVudHNbTUFYX0hXRVZFTlRTXTsKKwl1bnNpZ25lZCBpbnQgY2ZsYWdzW01BWF9IV0VWRU5UU107CiAJaW50IG47CiAJaW50IGVycjsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CiAKIAlpZiAoIXBwbXUpCiAJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7Ci0Jc3dpdGNoIChjb3VudGVyLT5hdHRyLnR5cGUpIHsKKwlzd2l0Y2ggKGV2ZW50LT5hdHRyLnR5cGUpIHsKIAljYXNlIFBFUkZfVFlQRV9IQVJEV0FSRToKLQkJZXYgPSBjb3VudGVyLT5hdHRyLmNvbmZpZzsKKwkJZXYgPSBldmVudC0+YXR0ci5jb25maWc7CiAJCWlmIChldiA+PSBwcG11LT5uX2dlbmVyaWMgfHwgcHBtdS0+Z2VuZXJpY19ldmVudHNbZXZdID09IDApCiAJCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7CiAJCWV2ID0gcHBtdS0+Z2VuZXJpY19ldmVudHNbZXZdOwogCQlicmVhazsKIAljYXNlIFBFUkZfVFlQRV9IV19DQUNIRToKLQkJZXJyID0gaHdfcGVyZl9jYWNoZV9ldmVudChjb3VudGVyLT5hdHRyLmNvbmZpZywgJmV2KTsKKwkJZXJyID0gaHdfcGVyZl9jYWNoZV9ldmVudChldmVudC0+YXR0ci5jb25maWcsICZldik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCQlicmVhazsKIAljYXNlIFBFUkZfVFlQRV9SQVc6Ci0JCWV2ID0gY291bnRlci0+YXR0ci5jb25maWc7CisJCWV2ID0gZXZlbnQtPmF0dHIuY29uZmlnOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9Ci0JY291bnRlci0+aHcuY29uZmlnX2Jhc2UgPSBldjsKLQljb3VudGVyLT5ody5pZHggPSAwOworCWV2ZW50LT5ody5jb25maWdfYmFzZSA9IGV2OworCWV2ZW50LT5ody5pZHggPSAwOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gYSBoeXBlcnZpc29yLCBmb3JjZSB0aGUKQEAgLTEwNDAsMjggKzEwNDAsMjggQEAKIAkgKiB0aGUgdXNlciBzZXQgaXQgdG8uCiAJICovCiAJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQljb3VudGVyLT5hdHRyLmV4Y2x1ZGVfaHYgPSAwOworCQlldmVudC0+YXR0ci5leGNsdWRlX2h2ID0gMDsKIAogCS8qCi0JICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGNvdW50ZXIsIHRoZW4gd2UgY2FuIHVzZQorCSAqIElmIHRoaXMgaXMgYSBwZXItdGFzayBldmVudCwgdGhlbiB3ZSBjYW4gdXNlCiAJICogUE1fUlVOXyogZXZlbnRzIGludGVyY2hhbmdlYWJseSB3aXRoIHRoZWlyIG5vbiBSVU5fKgogCSAqIGVxdWl2YWxlbnRzLCBlLmcuIFBNX1JVTl9DWUMgaW5zdGVhZCBvZiBQTV9DWUMuCiAJICogWFhYIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgdGFzayBpcyBhbiBpZGxlIHRhc2suCiAJICovCiAJZmxhZ3MgPSAwOwotCWlmIChjb3VudGVyLT5jdHgtPnRhc2spCisJaWYgKGV2ZW50LT5jdHgtPnRhc2spCiAJCWZsYWdzIHw9IFBQTVVfT05MWV9DT1VOVF9SVU47CiAKIAkvKgotCSAqIElmIHRoaXMgbWFjaGluZSBoYXMgbGltaXRlZCBjb3VudGVycywgY2hlY2sgd2hldGhlciB0aGlzCi0JICogZXZlbnQgY291bGQgZ28gb24gYSBsaW1pdGVkIGNvdW50ZXIuCisJICogSWYgdGhpcyBtYWNoaW5lIGhhcyBsaW1pdGVkIGV2ZW50cywgY2hlY2sgd2hldGhlciB0aGlzCisJICogZXZlbnRfaWQgY291bGQgZ28gb24gYSBsaW1pdGVkIGV2ZW50LgogCSAqLwogCWlmIChwcG11LT5mbGFncyAmIFBQTVVfTElNSVRFRF9QTUM1XzYpIHsKLQkJaWYgKGNhbl9nb19vbl9saW1pdGVkX3BtYyhjb3VudGVyLCBldiwgZmxhZ3MpKSB7CisJCWlmIChjYW5fZ29fb25fbGltaXRlZF9wbWMoZXZlbnQsIGV2LCBmbGFncykpIHsKIAkJCWZsYWdzIHw9IFBQTVVfTElNSVRFRF9QTUNfT0s7CiAJCX0gZWxzZSBpZiAocHBtdS0+bGltaXRlZF9wbWNfZXZlbnQoZXYpKSB7CiAJCQkvKgotCQkJICogVGhlIHJlcXVlc3RlZCBldmVudCBpcyBvbiBhIGxpbWl0ZWQgUE1DLAorCQkJICogVGhlIHJlcXVlc3RlZCBldmVudF9pZCBpcyBvbiBhIGxpbWl0ZWQgUE1DLAogCQkJICogYnV0IHdlIGNhbid0IHVzZSBhIGxpbWl0ZWQgUE1DOyBzZWUgaWYgYW55CiAJCQkgKiBhbHRlcm5hdGl2ZSBnb2VzIG9uIGEgbm9ybWFsIFBNQy4KIAkJCSAqLwpAQCAtMTA3Myw1MCArMTA3Myw1MCBAQAogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGluIGEgZ3JvdXAsIGNoZWNrIGlmIGl0IGNhbiBnbyBvbiB3aXRoIGFsbCB0aGUKLQkgKiBvdGhlciBoYXJkd2FyZSBjb3VudGVycyBpbiB0aGUgZ3JvdXAuICBXZSBhc3N1bWUgdGhlIGNvdW50ZXIKKwkgKiBvdGhlciBoYXJkd2FyZSBldmVudHMgaW4gdGhlIGdyb3VwLiAgV2UgYXNzdW1lIHRoZSBldmVudAogCSAqIGhhc24ndCBiZWVuIGxpbmtlZCBpbnRvIGl0cyBsZWFkZXIncyBzaWJsaW5nIGxpc3QgYXQgdGhpcyBwb2ludC4KIAkgKi8KIAluID0gMDsKLQlpZiAoY291bnRlci0+Z3JvdXBfbGVhZGVyICE9IGNvdW50ZXIpIHsKLQkJbiA9IGNvbGxlY3RfZXZlbnRzKGNvdW50ZXItPmdyb3VwX2xlYWRlciwgcHBtdS0+bl9jb3VudGVyIC0gMSwKKwlpZiAoZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCkgeworCQluID0gY29sbGVjdF9ldmVudHMoZXZlbnQtPmdyb3VwX2xlYWRlciwgcHBtdS0+bl9jb3VudGVyIC0gMSwKIAkJCQkgICBjdHJzLCBldmVudHMsIGNmbGFncyk7CiAJCWlmIChuIDwgMCkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAlldmVudHNbbl0gPSBldjsKLQljdHJzW25dID0gY291bnRlcjsKKwljdHJzW25dID0gZXZlbnQ7CiAJY2ZsYWdzW25dID0gZmxhZ3M7CiAJaWYgKGNoZWNrX2V4Y2x1ZGVzKGN0cnMsIGNmbGFncywgbiwgMSkpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JY3B1aHcgPSAmZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwljcHVodyA9ICZnZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAllcnIgPSBwb3dlcl9jaGVja19jb25zdHJhaW50cyhjcHVodywgZXZlbnRzLCBjZmxhZ3MsIG4gKyAxKTsKLQlwdXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXB1dF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWlmIChlcnIpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JY291bnRlci0+aHcuY29uZmlnID0gZXZlbnRzW25dOwotCWNvdW50ZXItPmh3LmNvdW50ZXJfYmFzZSA9IGNmbGFnc1tuXTsKLQljb3VudGVyLT5ody5sYXN0X3BlcmlvZCA9IGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2Q7Ci0JYXRvbWljNjRfc2V0KCZjb3VudGVyLT5ody5wZXJpb2RfbGVmdCwgY291bnRlci0+aHcubGFzdF9wZXJpb2QpOworCWV2ZW50LT5ody5jb25maWcgPSBldmVudHNbbl07CisJZXZlbnQtPmh3LmV2ZW50X2Jhc2UgPSBjZmxhZ3Nbbl07CisJZXZlbnQtPmh3Lmxhc3RfcGVyaW9kID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CisJYXRvbWljNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGV2ZW50LT5ody5sYXN0X3BlcmlvZCk7CiAKIAkvKgogCSAqIFNlZSBpZiB3ZSBuZWVkIHRvIHJlc2VydmUgdGhlIFBNVS4KLQkgKiBJZiBubyBjb3VudGVycyBhcmUgY3VycmVudGx5IGluIHVzZSwgdGhlbiB3ZSBoYXZlIHRvIHRha2UgYQorCSAqIElmIG5vIGV2ZW50cyBhcmUgY3VycmVudGx5IGluIHVzZSwgdGhlbiB3ZSBoYXZlIHRvIHRha2UgYQogCSAqIG11dGV4IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHJhY2Ugd2l0aCBhbm90aGVyIHRhc2sgZG9pbmcKIAkgKiByZXNlcnZlX3BtY19oYXJkd2FyZSBvciByZWxlYXNlX3BtY19oYXJkd2FyZS4KIAkgKi8KIAllcnIgPSAwOwotCWlmICghYXRvbWljX2luY19ub3RfemVybygmbnVtX2NvdW50ZXJzKSkgeworCWlmICghYXRvbWljX2luY19ub3RfemVybygmbnVtX2V2ZW50cykpIHsKIAkJbXV0ZXhfbG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOwotCQlpZiAoYXRvbWljX3JlYWQoJm51bV9jb3VudGVycykgPT0gMCAmJgotCQkgICAgcmVzZXJ2ZV9wbWNfaGFyZHdhcmUocGVyZl9jb3VudGVyX2ludGVycnVwdCkpCisJCWlmIChhdG9taWNfcmVhZCgmbnVtX2V2ZW50cykgPT0gMCAmJgorCQkgICAgcmVzZXJ2ZV9wbWNfaGFyZHdhcmUocGVyZl9ldmVudF9pbnRlcnJ1cHQpKQogCQkJZXJyID0gLUVCVVNZOwogCQllbHNlCi0JCQlhdG9taWNfaW5jKCZudW1fY291bnRlcnMpOworCQkJYXRvbWljX2luYygmbnVtX2V2ZW50cyk7CiAJCW11dGV4X3VubG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOwogCX0KLQljb3VudGVyLT5kZXN0cm95ID0gaHdfcGVyZl9jb3VudGVyX2Rlc3Ryb3k7CisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwpAQCAtMTEyOCwyNCArMTEyOCwyNCBAQAogICogdGhpbmdzIGlmIHJlcXVlc3RlZC4gIE5vdGUgdGhhdCBpbnRlcnJ1cHRzIGFyZSBoYXJkLWRpc2FibGVkCiAgKiBoZXJlIHNvIHRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIGJlaW5nIGludGVycnVwdGVkLgogICovCi1zdGF0aWMgdm9pZCByZWNvcmRfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwsCitzdGF0aWMgdm9pZCByZWNvcmRfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1bnNpZ25lZCBsb25nIHZhbCwKIAkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG5taSkKIHsKLQl1NjQgcGVyaW9kID0gY291bnRlci0+aHcuc2FtcGxlX3BlcmlvZDsKKwl1NjQgcGVyaW9kID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CiAJczY0IHByZXYsIGRlbHRhLCBsZWZ0OwogCWludCByZWNvcmQgPSAwOwogCiAJLyogd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbnRlcnJ1cHRzIGhlcmUgKi8KLQlwcmV2ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+aHcucHJldl9jb3VudCk7CisJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKIAlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKLQlhdG9taWM2NF9hZGQoZGVsdGEsICZjb3VudGVyLT5jb3VudCk7CisJYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKIAogCS8qCi0JICogU2VlIGlmIHRoZSB0b3RhbCBwZXJpb2QgZm9yIHRoaXMgY291bnRlciBoYXMgZXhwaXJlZCwKKwkgKiBTZWUgaWYgdGhlIHRvdGFsIHBlcmlvZCBmb3IgdGhpcyBldmVudCBoYXMgZXhwaXJlZCwKIAkgKiBhbmQgdXBkYXRlIGZvciB0aGUgbmV4dCBwZXJpb2QuCiAJICovCiAJdmFsID0gMDsKLQlsZWZ0ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+aHcucGVyaW9kX2xlZnQpIC0gZGVsdGE7CisJbGVmdCA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCkgLSBkZWx0YTsKIAlpZiAocGVyaW9kKSB7CiAJCWlmIChsZWZ0IDw9IDApIHsKIAkJCWxlZnQgKz0gcGVyaW9kOwpAQCAtMTE2MiwyMCArMTE2MiwxOSBAQAogCSAqLwogCWlmIChyZWNvcmQpIHsKIAkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YSA9IHsKLQkJCS5yZWdzCT0gcmVncywKIAkJCS5hZGRyCT0gMCwKLQkJCS5wZXJpb2QJPSBjb3VudGVyLT5ody5sYXN0X3BlcmlvZCwKKwkJCS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2QsCiAJCX07CiAKLQkJaWYgKGNvdW50ZXItPmF0dHIuc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9BRERSKQorCQlpZiAoZXZlbnQtPmF0dHIuc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9BRERSKQogCQkJcGVyZl9nZXRfZGF0YV9hZGRyKHJlZ3MsICZkYXRhLmFkZHIpOwogCi0JCWlmIChwZXJmX2NvdW50ZXJfb3ZlcmZsb3coY291bnRlciwgbm1pLCAmZGF0YSkpIHsKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIG5taSwgJmRhdGEsIHJlZ3MpKSB7CiAJCQkvKgogCQkJICogSW50ZXJydXB0cyBhcmUgY29taW5nIHRvbyBmYXN0IC0gdGhyb3R0bGUgdGhlbQotCQkJICogYnkgc2V0dGluZyB0aGUgY291bnRlciB0byAwLCBzbyBpdCB3aWxsIGJlCisJCQkgKiBieSBzZXR0aW5nIHRoZSBldmVudCB0byAwLCBzbyBpdCB3aWxsIGJlCiAJCQkgKiBhdCBsZWFzdCAyXjMwIGN5Y2xlcyB1bnRpbCB0aGUgbmV4dCBpbnRlcnJ1cHQKLQkJCSAqIChhc3N1bWluZyBlYWNoIGNvdW50ZXIgY291bnRzIGF0IG1vc3QgMiBjb3VudHMKKwkJCSAqIChhc3N1bWluZyBlYWNoIGV2ZW50IGNvdW50cyBhdCBtb3N0IDIgY291bnRzCiAJCQkgKiBwZXIgY3ljbGUpLgogCQkJICovCiAJCQl2YWwgPSAwOwpAQCAtMTE4MywxNSArMTE4MiwxNSBAQAogCQl9CiAJfQogCi0Jd3JpdGVfcG1jKGNvdW50ZXItPmh3LmlkeCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIHZhbCk7Ci0JYXRvbWljNjRfc2V0KCZjb3VudGVyLT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7Ci0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKKwl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKKwlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiB9CiAKIC8qCiAgKiBDYWxsZWQgZnJvbSBnZW5lcmljIGNvZGUgdG8gZ2V0IHRoZSBtaXNjIGZsYWdzIChpLmUuIHByb2Nlc3NvciBtb2RlKQotICogZm9yIGFuIGV2ZW50LgorICogZm9yIGFuIGV2ZW50X2lkLgogICovCiB1bnNpZ25lZCBsb25nIHBlcmZfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTExOTksMTMgKzExOTgsMTMgQEAKIAogCWlmIChmbGFncykKIAkJcmV0dXJuIGZsYWdzOwotCXJldHVybiB1c2VyX21vZGUocmVncykgPyBQRVJGX0VWRU5UX01JU0NfVVNFUiA6Ci0JCVBFUkZfRVZFTlRfTUlTQ19LRVJORUw7CisJcmV0dXJuIHVzZXJfbW9kZShyZWdzKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6CisJCVBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOwogfQogCiAvKgogICogQ2FsbGVkIGZyb20gZ2VuZXJpYyBjb2RlIHRvIGdldCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlcgotICogZm9yIGFuIGV2ZW50LgorICogZm9yIGFuIGV2ZW50X2lkLgogICovCiB1bnNpZ25lZCBsb25nIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTEyMjEsMTEgKzEyMjAsMTEgQEAKIC8qCiAgKiBQZXJmb3JtYW5jZSBtb25pdG9yIGludGVycnVwdCBzdHVmZgogICovCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcGVyZl9ldmVudF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBmb3VuZCA9IDA7CiAJaW50IG5taTsKQEAgLTEyNDIsMjEgKzEyNDEsMjEgQEAKIAllbHNlCiAJCWlycV9lbnRlcigpOwogCi0JZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2NvdW50ZXJzOyArK2kpIHsKLQkJY291bnRlciA9IGNwdWh3LT5jb3VudGVyW2ldOwotCQlpZiAoIWNvdW50ZXItPmh3LmlkeCB8fCBpc19saW1pdGVkX3BtYyhjb3VudGVyLT5ody5pZHgpKQorCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9ldmVudHM7ICsraSkgeworCQlldmVudCA9IGNwdWh3LT5ldmVudFtpXTsKKwkJaWYgKCFldmVudC0+aHcuaWR4IHx8IGlzX2xpbWl0ZWRfcG1jKGV2ZW50LT5ody5pZHgpKQogCQkJY29udGludWU7Ci0JCXZhbCA9IHJlYWRfcG1jKGNvdW50ZXItPmh3LmlkeCk7CisJCXZhbCA9IHJlYWRfcG1jKGV2ZW50LT5ody5pZHgpOwogCQlpZiAoKGludCl2YWwgPCAwKSB7Ci0JCQkvKiBjb3VudGVyIGhhcyBvdmVyZmxvd2VkICovCisJCQkvKiBldmVudCBoYXMgb3ZlcmZsb3dlZCAqLwogCQkJZm91bmQgPSAxOwotCQkJcmVjb3JkX2FuZF9yZXN0YXJ0KGNvdW50ZXIsIHZhbCwgcmVncywgbm1pKTsKKwkJCXJlY29yZF9hbmRfcmVzdGFydChldmVudCwgdmFsLCByZWdzLCBubWkpOwogCQl9CiAJfQogCiAJLyoKLQkgKiBJbiBjYXNlIHdlIGRpZG4ndCBmaW5kIGFuZCByZXNldCB0aGUgY291bnRlciB0aGF0IGNhdXNlZAotCSAqIHRoZSBpbnRlcnJ1cHQsIHNjYW4gYWxsIGNvdW50ZXJzIGFuZCByZXNldCBhbnkgdGhhdCBhcmUKKwkgKiBJbiBjYXNlIHdlIGRpZG4ndCBmaW5kIGFuZCByZXNldCB0aGUgZXZlbnQgdGhhdCBjYXVzZWQKKwkgKiB0aGUgaW50ZXJydXB0LCBzY2FuIGFsbCBldmVudHMgYW5kIHJlc2V0IGFueSB0aGF0IGFyZQogCSAqIG5lZ2F0aXZlLCB0byBhdm9pZCBnZXR0aW5nIGNvbnRpbnVhbCBpbnRlcnJ1cHRzLgogCSAqIEFueSB0aGF0IHdlIHByb2Nlc3NlZCBpbiB0aGUgcHJldmlvdXMgbG9vcCB3aWxsIG5vdCBiZSBuZWdhdGl2ZS4KIAkgKi8KQEAgLTEyNzQsNyArMTI3Myw3IEBACiAJICogUmVzZXQgTU1DUjAgdG8gaXRzIG5vcm1hbCB2YWx1ZS4gIFRoaXMgd2lsbCBzZXQgUE1YRSBhbmQKIAkgKiBjbGVhciBGQyAoZnJlZXplIGNvdW50ZXJzKSBhbmQgUE1BTyAocGVyZiBtb24gYWxlcnQgb2NjdXJyZWQpCiAJICogYW5kIHRodXMgYWxsb3cgaW50ZXJydXB0cyB0byBvY2N1ciBhZ2Fpbi4KLQkgKiBYWFggbWlnaHQgd2FudCB0byB1c2UgTVNSLlBNIHRvIGtlZXAgdGhlIGNvdW50ZXJzIGZyb3plbiB1bnRpbAorCSAqIFhYWCBtaWdodCB3YW50IHRvIHVzZSBNU1IuUE0gdG8ga2VlcCB0aGUgZXZlbnRzIGZyb3plbiB1bnRpbAogCSAqIHdlIGdldCBiYWNrIG91dCBvZiB0aGlzIGludGVycnVwdC4KIAkgKi8KIAl3cml0ZV9tbWNyMChjcHVodywgY3B1aHctPm1tY3JbMF0pOwpAQCAtMTI4NSw5ICsxMjg0LDkgQEAKIAkJaXJxX2V4aXQoKTsKIH0KIAotdm9pZCBod19wZXJmX2NvdW50ZXJfc2V0dXAoaW50IGNwdSkKK3ZvaWQgaHdfcGVyZl9ldmVudF9zZXR1cChpbnQgY3B1KQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWh3ID0gJnBlcl9jcHUoY3B1X2h3X2NvdW50ZXJzLCBjcHUpOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSk7CiAKIAlpZiAoIXBwbXUpCiAJCXJldHVybjsKQEAgLTEzMDksNyArMTMwOCw3IEBACiAJICogVXNlIEZDSFYgdG8gaWdub3JlIGtlcm5lbCBldmVudHMgaWYgTVNSLkhWIGlzIHNldC4KIAkgKi8KIAlpZiAobWZtc3IoKSAmIE1TUl9IVikKLQkJZnJlZXplX2NvdW50ZXJzX2tlcm5lbCA9IE1NQ1IwX0ZDSFY7CisJCWZyZWV6ZV9ldmVudHNfa2VybmVsID0gTU1DUjBfRkNIVjsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjQtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYwppbmRleCAzYzkwYTNkLi4yYTM2MWNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYwpAQCAtOSw3ICs5LDcgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jCmluZGV4IDMxOTE4YWYuLjBmNGMxYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1Ky1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNSstcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKaW5kZXggODY3ZjZmNi4uYzM1MWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI2LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKaW5kZXggZmEyMTg5MC4uY2EzOTliYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI3LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMKaW5kZXggMDE4ZDA5NC4uMjhhNGRhYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKaW5kZXggNzVkY2NiNy4uNDc5NTc0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKQEAgLTksNyArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggMDJmZWQyNy4uMWQ1NTcwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIHsKIH0KIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3AgPSB7Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKIAkuc3RhcnQgPWNfc3RhcnQsCiAJLm5leHQgPQljX25leHQsCiAJLnN0b3AgPQljX3N0b3AsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDQ2NWU0OTguLjkyZGM4NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC01Myw3ICs1Myw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xOTMsNiArMTkzLDggQEAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGNwdXRpbWVfbGFzdF9kZWx0YSk7CiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhKTsKIAorY3B1dGltZV90IGNwdXRpbWVfb25lX2ppZmZ5OworCiBzdGF0aWMgdm9pZCBjYWxjX2NwdXRpbWVfZmFjdG9ycyh2b2lkKQogewogCXN0cnVjdCBkaXZfcmVzdWx0IHJlczsKQEAgLTUwMSw2ICs1MDMsNyBAQAogCQkJCXRiX3RvX3hzID0gZGl2cmVzLnJlc3VsdF9sb3c7CiAJCQkJdmRzb19kYXRhLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKIAkJCQl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7CisJCQkJc2V0dXBfY3B1dGltZV9vbmVfamlmZnkoKTsKIAkJCX0KIAkJCWVsc2UgewogCQkJCXByaW50ayggIlRpdGFuIHJlY2FsaWJyYXRlOiBGQUlMRUQgKGRpZmZlcmVuY2UgPiA0IHBlcmNlbnQpXG4iCkBAIC01MjcsMjUgKzUzMCwyNSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfUEVSRl9DT1VOVEVSUykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCi1ERUZJTkVfUEVSX0NQVSh1OCwgcGVyZl9jb3VudGVyX3BlbmRpbmcpOworI2lmIGRlZmluZWQoQ09ORklHX1BFUkZfRVZFTlRTKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKK0RFRklORV9QRVJfQ1BVKHU4LCBwZXJmX2V2ZW50X3BlbmRpbmcpOwogCi12b2lkIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKQordm9pZCBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpCiB7Ci0JZ2V0X2NwdV92YXIocGVyZl9jb3VudGVyX3BlbmRpbmcpID0gMTsKKwlnZXRfY3B1X3ZhcihwZXJmX2V2ZW50X3BlbmRpbmcpID0gMTsKIAlzZXRfZGVjKDEpOwotCXB1dF9jcHVfdmFyKHBlcmZfY291bnRlcl9wZW5kaW5nKTsKKwlwdXRfY3B1X3ZhcihwZXJmX2V2ZW50X3BlbmRpbmcpOwogfQogCi0jZGVmaW5lIHRlc3RfcGVyZl9jb3VudGVyX3BlbmRpbmcoKQlfX2dldF9jcHVfdmFyKHBlcmZfY291bnRlcl9wZW5kaW5nKQotI2RlZmluZSBjbGVhcl9wZXJmX2NvdW50ZXJfcGVuZGluZygpCV9fZ2V0X2NwdV92YXIocGVyZl9jb3VudGVyX3BlbmRpbmcpID0gMAorI2RlZmluZSB0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZygpCV9fZ2V0X2NwdV92YXIocGVyZl9ldmVudF9wZW5kaW5nKQorI2RlZmluZSBjbGVhcl9wZXJmX2V2ZW50X3BlbmRpbmcoKQlfX2dldF9jcHVfdmFyKHBlcmZfZXZlbnRfcGVuZGluZykgPSAwCiAKLSNlbHNlICAvKiBDT05GSUdfUEVSRl9DT1VOVEVSUyAmJiBDT05GSUdfUFBDMzIgKi8KKyNlbHNlICAvKiBDT05GSUdfUEVSRl9FVkVOVFMgJiYgQ09ORklHX1BQQzMyICovCiAKLSNkZWZpbmUgdGVzdF9wZXJmX2NvdW50ZXJfcGVuZGluZygpCTAKLSNkZWZpbmUgY2xlYXJfcGVyZl9jb3VudGVyX3BlbmRpbmcoKQorI2RlZmluZSB0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZygpCTAKKyNkZWZpbmUgY2xlYXJfcGVyZl9ldmVudF9wZW5kaW5nKCkKIAotI2VuZGlmIC8qIENPTkZJR19QRVJGX0NPVU5URVJTICYmIENPTkZJR19QUEMzMiAqLworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAmJiBDT05GSUdfUFBDMzIgKi8KIAogLyoKICAqIEZvciBpU2VyaWVzIHNoYXJlZCBwcm9jZXNzb3JzLCB3ZSBoYXZlIHRvIGxldCB0aGUgaHlwZXJ2aXNvcgpAQCAtNTczLDkgKzU3Niw5IEBACiAJc2V0X2RlYyhERUNSRU1FTlRFUl9NQVgpOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCi0JaWYgKHRlc3RfcGVyZl9jb3VudGVyX3BlbmRpbmcoKSkgewotCQljbGVhcl9wZXJmX2NvdW50ZXJfcGVuZGluZygpOwotCQlwZXJmX2NvdW50ZXJfZG9fcGVuZGluZygpOworCWlmICh0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZygpKSB7CisJCWNsZWFyX3BlcmZfZXZlbnRfcGVuZGluZygpOworCQlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKIAl9CiAJaWYgKGF0b21pY19yZWFkKCZwcGNfbl9sb3N0X2ludGVycnVwdHMpICE9IDApCiAJCWRvX0lSUShyZWdzKTsKQEAgLTk2MCw2ICs5NjMsNyBAQAogCXRiX3RpY2tzX3Blcl91c2VjID0gcHBjX3RiX2ZyZXEgLyAxMDAwMDAwOwogCXRiX3RvX3VzID0gbXVsaHd1X3NjYWxlX2ZhY3RvcihwcGNfdGJfZnJlcSwgMTAwMDAwMCk7CiAJY2FsY19jcHV0aW1lX2ZhY3RvcnMoKTsKKwlzZXR1cF9jcHV0aW1lX29uZV9qaWZmeSgpOwogCiAJLyoKIAkgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBlYWNoIHRpY2sgaW4gbnMuICBJdCB3aWxsIG5vdCBiZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwppbmRleCBhY2I3NGExLi5iNGIxNjdiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiB1ZGJnIGZvciBmb3IgTlMxNjU1MCBjb21wYXRhYmxlIHNlcmlhbCBwb3J0cworICogdWRiZyBmb3IgTlMxNjU1MCBjb21wYXRhYmxlIHNlcmlhbCBwb3J0cwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFBQQyA2NCBUZWFtLCBJQk0gQ29ycAogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggODMwYmVmMC4uZTdkYWU4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTE3MSw3ICsxNzEsNyBAQAogCQlkaWUoIldlaXJkIHBhZ2UgZmF1bHQiLCByZWdzLCBTSUdTRUdWKTsKIAl9CiAKLQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyZXNzKTsKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOwogCiAJLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCiAJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4gdGhlCkBAIC0zMTIsNyArMzEyLDcgQEAKIAl9CiAJaWYgKHJldCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCWN1cnJlbnQtPm1hal9mbHQrKzsKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsCiAJCQkJICAgICByZWdzLCBhZGRyZXNzKTsKICNpZmRlZiBDT05GSUdfUFBDX1NNTFBBUgogCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9DTU8pKSB7CkBAIC0zMjMsNyArMzIzLDcgQEAKICNlbmRpZgogCX0gZWxzZSB7CiAJCWN1cnJlbnQtPm1pbl9mbHQrKzsKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sIDEsIDAsCisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sIDEsIDAsCiAJCQkJICAgICByZWdzLCBhZGRyZXNzKTsKIAl9CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IDNlZjUwODQuLjlkZGNmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtMjQyLDM5ICsyNDIsMyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19LQ09SRQotc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX3ZtZW07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2tjb3JlKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGJhc2U7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQkJc3RydWN0IGtjb3JlX2xpc3QgKmtjb3JlX21lbTsKLQotCQliYXNlID0gbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZTsKLQkJc2l6ZSA9IGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7Ci0KLQkJa2NvcmVfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtjb3JlX2xpc3QpLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFrY29yZV9tZW0pCi0JCQlwYW5pYygiJXM6IGttYWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQkJLyogbXVzdCBzdGF5IHVuZGVyIDMyIGJpdHMgKi8KLQkJaWYgKCAweGZmZmZmZmZmdWwgLSAodW5zaWduZWQgbG9uZylfX3ZhKGJhc2UpIDwgc2l6ZSkgewotCQkJc2l6ZSA9IDB4ZmZmZmZmZmZ1bCAtICh1bnNpZ25lZCBsb25nKShfX3ZhKGJhc2UpKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJzZXR1cF9rY29yZTogcmVzdHJpY3Qgc2l6ZT0lbHhcbiIsCi0JCQkJCQlzaXplKTsKLQkJfQotCi0JCWtjbGlzdF9hZGQoa2NvcmVfbWVtLCBfX3ZhKGJhc2UpLCBzaXplKTsKLQl9Ci0KLQlrY2xpc3RfYWRkKCZrY29yZV92bWVtLCAodm9pZCAqKVZNQUxMT0NfU1RBUlQsCi0JCVZNQUxMT0NfRU5ELVZNQUxMT0NfU1RBUlQpOwotCi0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChzZXR1cF9rY29yZSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IDMxNTgyMzIuLjMzNWM1NzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMTA5LDM1ICsxMDksNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19LQ09SRQotc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX3ZtZW07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2tjb3JlKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGk9MDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOwotCQlzdHJ1Y3Qga2NvcmVfbGlzdCAqa2NvcmVfbWVtOwotCi0JCWJhc2UgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOwotCQlzaXplID0gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKLQotCQkvKiBHRlBfQVRPTUlDIHRvIGF2b2lkIG1pZ2h0X3NsZWVwIHdhcm5pbmdzIGR1cmluZyBib290ICovCi0JCWtjb3JlX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrY29yZV9saXN0KSwgR0ZQX0FUT01JQyk7Ci0JCWlmICgha2NvcmVfbWVtKQotCQkJcGFuaWMoIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCi0JCWtjbGlzdF9hZGQoa2NvcmVfbWVtLCBfX3ZhKGJhc2UpLCBzaXplKTsKLQl9Ci0KLQlrY2xpc3RfYWRkKCZrY29yZV92bWVtLCAodm9pZCAqKVZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELVZNQUxMT0NfU1RBUlQpOwotCi0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChzZXR1cF9rY29yZSk7Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgcGdkX2N0b3Iodm9pZCAqYWRkcikKIHsKIAltZW1zZXQoYWRkciwgMCwgUEdEX1RBQkxFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IDU3OTM4MmMuLjU5NzM2MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTE0Myw4ICsxNDMsOCBAQAogICogbWVtb3J5IHJlZ2lvbnMsIGZpbmQgaG9sZXMgYW5kIGNhbGxiYWNrIGZvciBjb250aWd1b3VzIHJlZ2lvbnMuCiAgKi8KIGludAotd2Fsa19tZW1vcnlfcmVzb3VyY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZywKLQkJCWludCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKikpCit3YWxrX3N5c3RlbV9yYW1fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCXZvaWQgKmFyZywgaW50ICgqZnVuYykodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdm9pZCAqKSkKIHsKIAlzdHJ1Y3QgbG1iX3Byb3BlcnR5IHJlczsKIAl1bnNpZ25lZCBsb25nIHBmbiwgbGVuOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJfQogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh3YWxrX21lbW9yeV9yZXNvdXJjZSk7CitFWFBPUlRfU1lNQk9MX0dQTCh3YWxrX3N5c3RlbV9yYW1fcmFuZ2UpOwogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgYm9vdG1lbSBzeXN0ZW0gYW5kIGdpdmUgaXQgYWxsIHRoZSBtZW1vcnkgd2UKQEAgLTM3Miw3ICszNzIsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglbHVrIGtlcm5lbCBjb2RlLCAiCiAJICAgICAgICIlbHVrIHJlc2VydmVkLCAlbHVrIGRhdGEsICVsdWsgYnNzLCAlbHVrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZylucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAorCQlucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLAogCQludW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJY29kZXNpemUgPj4gMTAsCiAJCXJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCA5ZWZjOGJkLi5lMzgyY2FlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQpAQCAtMjgwLDkgKzI4MCw5IEBACiAKIGNvbmZpZyBQUENfUEVSRl9DVFJTCiAgICAgICAgZGVmX2Jvb2wgeQotICAgICAgIGRlcGVuZHMgb24gUEVSRl9DT1VOVEVSUyAmJiBQUENfSEFWRV9QTVVfU1VQUE9SVAorICAgICAgIGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgUFBDX0hBVkVfUE1VX1NVUFBPUlQKICAgICAgICBoZWxwCi0gICAgICAgICBUaGlzIGVuYWJsZXMgdGhlIHBvd2VycGMtc3BlY2lmaWMgcGVyZl9jb3VudGVyIGJhY2stZW5kLgorICAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBwb3dlcnBjLXNwZWNpZmljIHBlcmZfZXZlbnQgYmFjay1lbmQuCiAKIGNvbmZpZyBTTVAKIAlkZXBlbmRzIG9uIFBQQ19CT09LM1MgfHwgUFBDX0JPT0szRSB8fCBGU0xfQk9PS0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCmluZGV4IGFiOGFlZjkuLjhmMDc5YjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggMjRiMzBiNi4uZmMxYjFjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLCBpbnQgbW9kZSwKIAkJc2l6ZV90IHNpemUsIHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQogewotCXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzcHVmc19maWxlX2lvcHMgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNwdWZzX2ZpbGVfaW9wcyA9IHsKIAkJLnNldGF0dHIgPSBzcHVmc19zZXRhdHRyLAogCX07CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTc3Myw3ICs3NzMsNyBAQAogc3B1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBzcHVmc19zYl9pbmZvICppbmZvOwotCXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzX29wcyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc19vcHMgPSB7CiAJCS5hbGxvY19pbm9kZSA9IHNwdWZzX2FsbG9jX2lub2RlLAogCQkuZGVzdHJveV9pbm9kZSA9IHNwdWZzX2Rlc3Ryb3lfaW5vZGUsCiAJCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCBiYjViNzdjLi40Njc4MDc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCmluZGV4IDU3Mjc3MWYuLjk0OTAxNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogdWRiZyBmb3IgZm9yIHppbG9nIHNjYyBwb3J0cyBhcyBmb3VuZCBvbiBBcHBsZSBQb3dlck1hY3MKKyAqIHVkYmcgZm9yIHppbG9nIHNjYyBwb3J0cyBhcyBmb3VuZCBvbiBBcHBsZSBQb3dlck1hY3MKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKICAqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCmluZGV4IGVhZTUxZWYuLjM2MzFhNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCkBAIC03MSw3ICs3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaGNhbGxfaW5zdF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBoY2FsbF9pbnN0X3NlcV9vcHMgPSB7CiAgICAgICAgIC5zdGFydCA9IGhjX3N0YXJ0LAogICAgICAgICAubmV4dCAgPSBoY19uZXh0LAogICAgICAgICAuc3RvcCAgPSBoY19zdG9wLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9heG9ucmFtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwppbmRleCBhNDc3OTkxLi44OGY0YWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYXhvbl9yYW1fZGV2b3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBheG9uX3JhbV9kZXZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5kaXJlY3RfYWNjZXNzCT0gYXhvbl9yYW1fZGlyZWN0X2FjY2VzcwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggMWM4NjZlZi4uNDNjMGFjYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTk0LDcgKzk0LDcgQEAKIAlzZWxlY3QgSEFWRV9LVk0gaWYgNjRCSVQKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQotCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCiBjb25maWcgU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggNGU5MWEyNS4uYWI0NDY0NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIE1vbiBKdW4gMjIgMTE6MDg6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFR1ZSBTZXAgMjIgMTc6NDM6MTMgMjAwOQogIwogQ09ORklHX1NDSEVEX01DPXkKIENPTkZJR19NTVU9eQpAQCAtMjQsNiArMjQsNyBAQAogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19TMzkwPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC00OCwxMSArNDksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKQEAgLTEwMywxMSArMTA1LDEyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldApAQCAtMTE2LDcgKzExOSw2IEBACiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CkBAIC0xNzYsNiArMTc4LDcgQEAKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogQ09ORklHXzY0QklUPXkKKyMgQ09ORklHX0tUSU1FX1NDQUxBUiBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTMyCiBDT05GSUdfSE9UUExVR19DUFU9eQpAQCAtMjU3LDcgKzI2MCw2IEBACiBDT05GSUdfUEZBVUxUPXkKICMgQ09ORklHX1NIQVJFRF9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfQ01NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfU1RBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExEQVRBX0JBU0UgaXMgbm90IHNldAogQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldApAQCAtMjgwLDYgKzI4Miw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX0hJQkVSTkFUSU9OPXkKIENPTkZJR19QTV9TVERfUEFSVElUSU9OPSIiCisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zOTQsNiArMzk3LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDg3LDYgKzQ5MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTUwMSw2ICs1MDYsNyBAQAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfT1NEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKQEAgLTU5NCw4ICs2MDAsMTEgQEAKIENPTkZJR19ETV9DUllQVD15CiBDT05GSUdfRE1fU05BUFNIT1Q9eQogQ09ORklHX0RNX01JUlJPUj15CisjIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIENPTkZJR19ETV9aRVJPPXkKIENPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNjE1LDcgKzYyNCw2IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTY3OCw2ICs2ODYsNyBAQAogQ09ORklHX1NDTFBfVlQyMjBfVFRZPXkKIENPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEU9eQogQ09ORklHX1NDTFBfQ1BJPW0KK0NPTkZJR19TQ0xQX0FTWU5DPW0KIENPTkZJR19TMzkwX1RBUEU9bQogCiAjCkBAIC03MzcsNiArNzQ2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc5OCw3ICs4MDgsNiBAQAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04ODUsMTEgKzg5NCwxMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVPXkKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTk3OSwxMSArOTkwLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19WTUFDPW0KIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fR0hBU0g9bQogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT1tCiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwppbmRleCBiZDk5MTRiLi4zNDFhZmYyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoeXBmc19maWxlX29wczsKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBoeXBmc190eXBlOwotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh5cGZzX3Nfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh5cGZzX3Nfb3BzOwogCiAvKiBzdGFydCBvZiBsaXN0IG9mIGFsbCBkZW50cmllcywgd2hpY2ggaGF2ZSB0byBiZSBkZWxldGVkIG9uIHVwZGF0ZSAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmh5cGZzX2xhc3RfZGVudHJ5OwpAQCAtNDcyLDcgKzQ3Miw3IEBACiAJLmtpbGxfc2IJPSBoeXBmc19raWxsX3N1cGVyCiB9OwogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHlwZnNfc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHlwZnNfc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlCT0gaHlwZnNfZHJvcF9pbm9kZSwKIAkuc2hvd19vcHRpb25zCT0gaHlwZnNfc2hvd19vcHRpb25zLApAQCAtNDk2LDcgKzQ5Niw3IEBACiAJfQogCXMzOTBfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInMzOTAiLCBoeXBlcnZpc29yX2tvYmopOwogCWlmICghczM5MF9rb2JqKSB7Ci0JCXJjID0gLUVOT01FTTs7CisJCXJjID0gLUVOT01FTTsKIAkJZ290byBmYWlsX3N5c2ZzOwogCX0KIAlyYyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmh5cGZzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggN2EzODE3YS4uMjRiMTI0NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC00Miw2ICs0Miw3IEBACiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKICNkZWZpbmUgY3B1dGltZV96ZXJvCQkJKDBVTEwpCisjZGVmaW5lIGNwdXRpbWVfb25lX2ppZmZ5CQlqaWZmaWVzX3RvX2NwdXRpbWUoMSkKICNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4wVUwgPj4gMSkgLSAxKQogI2RlZmluZSBjcHV0aW1lX2FkZChfX2EsIF9fYikJCSgoX19hKSArICAoX19iKSkKICNkZWZpbmUgY3B1dGltZV9zdWIoX19hLCBfX2IpCQkoKF9fYSkgLSAgKF9fYikpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAppbmRleCA2YmM5NDI2Li5mMmVmNGI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKQEAgLTg2LDYgKzg2LDcgQEAKICNkZWZpbmUgX19MQ19QR01fT0xEX1BTVwkJMHgwMTUwCiAjZGVmaW5lIF9fTENfTUNLX09MRF9QU1cJCTB4MDE2MAogI2RlZmluZSBfX0xDX0lPX09MRF9QU1cJCQkweDAxNzAKKyNkZWZpbmUgX19MQ19SRVNUQVJUX1BTVwkJMHgwMWEwCiAjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDFiMAogI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAxYzAKICNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMWQwCkBAIC0xODksNiArMTkwLDE0IEBACiAjZGVmaW5lIFNBVkVfQVJFQV9CQVNFIFNBVkVfQVJFQV9CQVNFX1MzOTBYCiAjZW5kaWYKIAorI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgTENfT1JERVIgMAorI2Vsc2UKKyNkZWZpbmUgTENfT1JERVIgMQorI2VuZGlmCisKKyNkZWZpbmUgTENfUEFHRVMgKDFVTCA8PCBMQ19PUkRFUikKKwogc3RydWN0IF9sb3djb3JlCiB7CiAjaWZuZGVmIF9fczM5MHhfXwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggZjYzZmU3Yi4uNGU5YzhhZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC05LDE4ICs5LDcgQEAKICNpZm5kZWYgX19TMzkwX01NQU5fSF9fCiAjZGVmaW5lIF9fUzM5MF9NTUFOX0hfXwogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0KLSNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLwotI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVCkKIGludCBzMzkwX21tYXBfY2hlY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTUxODguLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotLyoKLSAqIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCAtIHMzOTAgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IDIwMDkgTWFydGluIFNjaHdpZGVmc2t5LCBJQk0gQ29ycG9yYXRpb24uCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKSB7fQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpIHt9Ci0KLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVCAwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQwY2JlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDEwIEBACisvKgorICogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCAtIHMzOTAgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IDIwMDkgTWFydGluIFNjaHdpZGVmc2t5LCBJQk0gQ29ycG9yYXRpb24uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkge30KKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggY2Y4ZWVkMy4uYjQyNzE1NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjk1LDcgKzI5NSw3IEBACiAJCSIJb2kJMHgzODQoMSksMHgxMFxuIi8qIGZha2UgcHJvdGVjdGlvbiBiaXQgKi8KIAkJIglscHN3ZQkwKCUxKSIKIAkJOiAiPW0iIChjdGxfYnVmKQotCQk6ICJhIiAoJmR3X3BzdyksICJhIiAoJmN0bF9idWYpLCAibSIgKGR3X3BzdykgOiAiY2MiLCAiMCIpOworCQk6ICJhIiAoJmR3X3BzdyksICJhIiAoJmN0bF9idWYpLCAibSIgKGR3X3BzdykgOiAiY2MiLCAiMCIsICIxIik7CiAjZW5kaWYgLyogX19zMzkweF9fICovCiAJd2hpbGUgKDEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGM4MDYwMmQuLmNiNTIzMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogI2RlZmluZQlfX05SX3ByZWFkdgkJMzI4CiAjZGVmaW5lCV9fTlJfcHdyaXRldgkJMzI5CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzMwCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzMxCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzMQogI2RlZmluZSBOUl9zeXNjYWxscyAzMzIKIAogLyogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZmE5OTA1Yy4uNjNlNDY0MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KIAogaW50IG1haW4odm9pZCkKIHsKQEAgLTU5LDYgKzYwLDEwIEBACiAJREVGSU5FKENMT0NLX1JFQUxUSU1FLCBDTE9DS19SRUFMVElNRSk7CiAJREVGSU5FKENMT0NLX01PTk9UT05JQywgQ0xPQ0tfTU9OT1RPTklDKTsKIAlERUZJTkUoQ0xPQ0tfUkVBTFRJTUVfUkVTLCBNT05PVE9OSUNfUkVTX05TRUMpOwotCisJLyogY29uc3RhbnRzIGZvciBTSUdQICovCisJREVGSU5FKF9fU0lHUF9TVE9QLCBzaWdwX3N0b3ApOworCURFRklORShfX1NJR1BfUkVTVEFSVCwgc2lncF9yZXN0YXJ0KTsKKwlERUZJTkUoX19TSUdQX1NFTlNFLCBzaWdwX3NlbnNlKTsKKwlERUZJTkUoX19TSUdQX0lOSVRJQUxfQ1BVX1JFU0VULCBzaWdwX2luaXRpYWxfY3B1X3Jlc2V0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCmluZGV4IDlhYjE4OGQuLjU1MTljYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwpAQCAtNDQzLDY2ICs0NDMsMjggQEAKICAqIHN5czMyX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0gYWZ0ZXIgdGhlIGFzbSBzdHViIGhhcyBzZXQKICAqIHRoaW5ncyB1cCBmb3IgdXMuICBUaGlzIHNob3VsZCBiYXNpY2FsbHkgZG8gd2hhdCBJIHdhbnQgaXQgdG8uCiAgKi8KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9leGVjdmUodm9pZCkKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl9leGVjdmUoY2hhciBfX3VzZXIgKm5hbWUsIGNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAorCQkJICAgICBjb21wYXRfdXB0cl90IF9fdXNlciAqZW52cCkKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKIAljaGFyICpmaWxlbmFtZTsKLQl1bnNpZ25lZCBsb25nIHJlc3VsdDsKLQlpbnQgcmM7CisJbG9uZyByYzsKIAotCWZpbGVuYW1lID0gZ2V0bmFtZShjb21wYXRfcHRyKHJlZ3MtPm9yaWdfZ3ByMikpOwotCWlmIChJU19FUlIoZmlsZW5hbWUpKSB7Ci0JCXJlc3VsdCA9IFBUUl9FUlIoZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotCX0KLQlyYyA9IGNvbXBhdF9kb19leGVjdmUoZmlsZW5hbWUsIGNvbXBhdF9wdHIocmVncy0+Z3Byc1szXSksCi0JCQkgICAgICBjb21wYXRfcHRyKHJlZ3MtPmdwcnNbNF0pLCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcmVzdWx0ID0gcmM7Ci0JCWdvdG8gb3V0X3B1dG5hbWU7Ci0JfQorCWZpbGVuYW1lID0gZ2V0bmFtZShuYW1lKTsKKwlyYyA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWlmIChJU19FUlIoZmlsZW5hbWUpKQorCQlyZXR1cm4gcmM7CisJcmMgPSBjb21wYXRfZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OwogCWN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLmZwYz0wOwogCWFzbSB2b2xhdGlsZSgic2ZwYyAlMCwwIiA6IDogImQiICgwKSk7Ci0JcmVzdWx0ID0gcmVncy0+Z3Byc1syXTsKLW91dF9wdXRuYW1lOgotICAgICAgICBwdXRuYW1lKGZpbGVuYW1lKTsKKwlyYyA9IHJlZ3MtPmdwcnNbMl07CiBvdXQ6Ci0JcmV0dXJuIHJlc3VsdDsKKwlwdXRuYW1lKGZpbGVuYW1lKTsKKwlyZXR1cm4gcmM7CiB9CiAKLQotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfaW5pdF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsIHVuc2lnbmVkIGxvbmcgbGVuLAotCQljb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpCi17Ci0JcmV0dXJuIHN5c19pbml0X21vZHVsZSh1bW9kLCBsZW4sIHVhcmdzKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgX191c2VyICpuYW1lX3VzZXIsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlyZXR1cm4gc3lzX2RlbGV0ZV9tb2R1bGUobmFtZV91c2VyLCBmbGFncyk7Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19NT0RVTEVTICovCi0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfaW5pdF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsIHVuc2lnbmVkIGxvbmcgbGVuLAotCQljb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZGVsZXRlX21vZHVsZShjb25zdCBjaGFyIF9fdXNlciAqbmFtZV91c2VyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLSNlbmRpZiAgLyogQ09ORklHX01PRFVMRVMgKi8KLQogYXNtbGlua2FnZSBsb25nIHN5czMyX3ByZWFkNjQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQlzaXplX3QgY291bnQsIHUzMiBwb3NoaSwgdTMyIHBvc2xvKQogewpAQCAtODAxLDIzICs3NjMsNiBAQAogCXJldHVybiBzeXNfd3JpdGUoZmQsIGJ1ZiwgY291bnQpOwogfQogCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfY2xvbmUodm9pZCkKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbmV3c3A7Ci0JaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwgKmNoaWxkX3RpZHB0cjsKLQotCWNsb25lX2ZsYWdzID0gcmVncy0+Z3Byc1szXSAmIDB4ZmZmZmZmZmZVTDsKLQluZXdzcCA9IHJlZ3MtPm9yaWdfZ3ByMiAmIDB4N2ZmZmZmZmZVTDsKLQlwYXJlbnRfdGlkcHRyID0gY29tcGF0X3B0cihyZWdzLT5ncHJzWzRdKTsKLQljaGlsZF90aWRwdHIgPSBjb21wYXRfcHRyKHJlZ3MtPmdwcnNbNV0pOwotCWlmICghbmV3c3ApCi0JCW5ld3NwID0gcmVncy0+Z3Byc1sxNV07Ci0JcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCByZWdzLCAwLAotCQkgICAgICAgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKLX0KLQogLyoKICAqIDMxIGJpdCBlbXVsYXRpb24gd3JhcHBlciBmdW5jdGlvbnMgZm9yIHN5c19mYWR2aXNlNjQvZmFkdmlzZTY0XzY0LgogICogVGhlc2UgbmVlZCB0byByZXdyaXRlIHRoZSBhZHZpc2UgdmFsdWVzIGZvciBQT1NJWF9GQURWX3tET05UTkVFRCxOT1JFVVNFfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaCBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmgKaW5kZXggODM2YTI4OC4uYzA3ZjljYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oCkBAIC0xOTgsNyArMTk4LDggQEAKIAkJCSAgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqb3NldCwgc2l6ZV90IHNpZ3NldHNpemUpOwogbG9uZyBzeXMzMl9ydF9zaWdwZW5kaW5nKGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnNldCwgc2l6ZV90IHNpZ3NldHNpemUpOwogbG9uZyBzeXMzMl9ydF9zaWdxdWV1ZWluZm8oaW50IHBpZCwgaW50IHNpZywgY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKnVpbmZvKTsKLWxvbmcgc3lzMzJfZXhlY3ZlKHZvaWQpOworbG9uZyBzeXMzMl9leGVjdmUoY2hhciBfX3VzZXIgKm5hbWUsIGNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAorCQkgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwKTsKIGxvbmcgc3lzMzJfaW5pdF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVhcmdzKTsKIGxvbmcgc3lzMzJfZGVsZXRlX21vZHVsZShjb25zdCBjaGFyIF9fdXNlciAqbmFtZV91c2VyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwpAQCAtMjIyLDcgKzIyMyw2IEBACiBsb25nIHN5czMyX21tYXAyKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3RfZW11MzEgX191c2VyICphcmcpOwogbG9uZyBzeXMzMl9yZWFkKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCk7CiBsb25nIHN5czMyX3dyaXRlKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCk7Ci1sb25nIHN5czMyX2Nsb25lKHZvaWQpOwogbG9uZyBzeXMzMl9mYWR2aXNlNjQoaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgbGVuLCBpbnQgYWR2aXNlKTsKIGxvbmcgc3lzMzJfZmFkdmlzZTY0XzY0KHN0cnVjdCBmYWR2aXNlNjRfNjRfYXJncyBfX3VzZXIgKmFyZ3MpOwogbG9uZyBzeXMzMl9zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCA4OGE4MzM2Ni4uNjgyZmI2OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtNTY4LDE4ICs1NjgsMTggQEAKIAlsbGd0cgklcjQsJXI0CQkJIyBjb21wYXRfb2xkX3NpZ3NldF90ICoKIAlqZwljb21wYXRfc3lzX3NpZ3Byb2NtYXNrCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsCXN5czMyX2luaXRfbW9kdWxlX3dyYXBwZXIKLXN5czMyX2luaXRfbW9kdWxlX3dyYXBwZXI6CisJLmdsb2JsCXN5c19pbml0X21vZHVsZV93cmFwcGVyCitzeXNfaW5pdF9tb2R1bGVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyB2b2lkICoKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCiAJbGxndHIJJXI0LCVyNAkJCSMgY2hhciAqCi0JamcJc3lzMzJfaW5pdF9tb2R1bGUJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKKwlqZwlzeXNfaW5pdF9tb2R1bGUJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwJc3lzMzJfZGVsZXRlX21vZHVsZV93cmFwcGVyCi1zeXMzMl9kZWxldGVfbW9kdWxlX3dyYXBwZXI6CisJLmdsb2JsCXN5c19kZWxldGVfbW9kdWxlX3dyYXBwZXIKK3N5c19kZWxldGVfbW9kdWxlX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCiAJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgaW50Ci0JamcJc3lzMzJfZGVsZXRlX21vZHVsZQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAorCWpnCXN5c19kZWxldGVfbW9kdWxlCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKIAkuZ2xvYmwJc3lzMzJfcXVvdGFjdGxfd3JhcHBlcgogc3lzMzJfcXVvdGFjdGxfd3JhcHBlcjoKQEAgLTE4MzIsMTEgKzE4MzIsMjYgQEAKIAlsbGd0cgklcjUsJXI1CQkJIyBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gKgogCWpnCWNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm9fd3JhcHBlciAjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsCXN5c19wZXJmX2NvdW50ZXJfb3Blbl93cmFwcGVyCi1zeXNfcGVyZl9jb3VudGVyX29wZW5fd3JhcHBlcjoKLQlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKgorCS5nbG9ibAlzeXNfcGVyZl9ldmVudF9vcGVuX3dyYXBwZXIKK3N5c19wZXJmX2V2ZW50X29wZW5fd3JhcHBlcjoKKwlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICoKIAlsZ2ZyCSVyMywlcjMJCQkjIHBpZF90CiAJbGdmcgklcjQsJXI0CQkJIyBpbnQKIAlsZ2ZyCSVyNSwlcjUJCQkjIGludAogCWxsZ2ZyCSVyNiwlcjYJCQkjIHVuc2lnbmVkIGxvbmcKLQlqZwlzeXNfcGVyZl9jb3VudGVyX29wZW4JIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKKwlqZwlzeXNfcGVyZl9ldmVudF9vcGVuCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisKKwkuZ2xvYmwJc3lzX2Nsb25lX3dyYXBwZXIKK3N5c19jbG9uZV93cmFwcGVyOgorCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKKwlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCisJbGxndHIJJXI0LCVyNAkJCSMgaW50ICoKKwlsbGd0cgklcjUsJXI1CQkJIyBpbnQgKgorCWpnCXN5c19jbG9uZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKKworCS5nbG9ibAlzeXMzMl9leGVjdmVfd3JhcHBlcgorc3lzMzJfZXhlY3ZlX3dyYXBwZXI6CisJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCisJbGxndHIJJXIzLCVyMwkJCSMgY29tcGF0X3VwdHJfdCAqCisJbGxndHIJJXI0LCVyNAkJCSMgY29tcGF0X3VwdHJfdCAqCisJamcJc3lzMzJfZXhlY3ZlCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oCmluZGV4IDk1MGM1OWMuLmUxZTVlNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LmgKQEAgLTQyLDEwICs0MiwxMiBAQAogbG9uZyBzeXNfczM5MF9mYWxsb2NhdGUoaW50IGZkLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgdTMyIGxlbl9oaWdoLAogCQkJdTMyIGxlbl9sb3cpOwogbG9uZyBzeXNfZm9yayh2b2lkKTsKLWxvbmcgc3lzX2Nsb25lKHZvaWQpOworbG9uZyBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBuZXdzcCwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKKwkgICAgICAgaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwgaW50IF9fdXNlciAqY2hpbGRfdGlkcHRyKTsKIGxvbmcgc3lzX3Zmb3JrKHZvaWQpOwogdm9pZCBleGVjdmVfdGFpbCh2b2lkKTsKLWxvbmcgc3lzX2V4ZWN2ZSh2b2lkKTsKK2xvbmcgc3lzX2V4ZWN2ZShjaGFyIF9fdXNlciAqbmFtZSwgY2hhciBfX3VzZXIgKiBfX3VzZXIgKmFyZ3YsCisJCWNoYXIgX191c2VyICogX191c2VyICplbnZwKTsKIGxvbmcgc3lzX3NpZ3N1c3BlbmQoaW50IGhpc3RvcnkwLCBpbnQgaGlzdG9yeTEsIG9sZF9zaWdzZXRfdCBtYXNrKTsKIGxvbmcgc3lzX3NpZ2FjdGlvbihpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKIAkJICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICpvYWN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWE0M2YyNy4uNTlmZTZlYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0yMzAsMTcgKzIzMSwxMSBAQAogCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJlZ3MtPmdwcnNbMTVdLCByZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAotU1lTQ0FMTF9ERUZJTkUwKGNsb25lKQorU1lTQ0FMTF9ERUZJTkU0KGNsb25lLCB1bnNpZ25lZCBsb25nLCBuZXdzcCwgdW5zaWduZWQgbG9uZywgY2xvbmVfZmxhZ3MsCisJCWludCBfX3VzZXIgKiwgcGFyZW50X3RpZHB0ciwgaW50IF9fdXNlciAqLCBjaGlsZF90aWRwdHIpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFnczsKLQl1bnNpZ25lZCBsb25nIG5ld3NwOwotCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIsICpjaGlsZF90aWRwdHI7CiAKLQljbG9uZV9mbGFncyA9IHJlZ3MtPmdwcnNbM107Ci0JbmV3c3AgPSByZWdzLT5vcmlnX2dwcjI7Ci0JcGFyZW50X3RpZHB0ciA9IChpbnQgX191c2VyICopIHJlZ3MtPmdwcnNbNF07Ci0JY2hpbGRfdGlkcHRyID0gKGludCBfX3VzZXIgKikgcmVncy0+Z3Byc1s1XTsKIAlpZiAoIW5ld3NwKQogCQluZXdzcCA9IHJlZ3MtPmdwcnNbMTVdOwogCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgcmVncywgMCwKQEAgLTI3NCwzMCArMjY5LDI1IEBACiAvKgogICogc3lzX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0uCiAgKi8KLVNZU0NBTExfREVGSU5FMChleGVjdmUpCitTWVNDQUxMX0RFRklORTMoZXhlY3ZlLCBjaGFyIF9fdXNlciAqLCBuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqLCBhcmd2LAorCQljaGFyIF9fdXNlciAqIF9fdXNlciAqLCBlbnZwKQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwogCWNoYXIgKmZpbGVuYW1lOwotCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwotCWludCByYzsKKwlsb25nIHJjOwogCi0JZmlsZW5hbWUgPSBnZXRuYW1lKChjaGFyIF9fdXNlciAqKSByZWdzLT5vcmlnX2dwcjIpOwotCWlmIChJU19FUlIoZmlsZW5hbWUpKSB7Ci0JCXJlc3VsdCA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWZpbGVuYW1lID0gZ2V0bmFtZShuYW1lKTsKKwlyYyA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWlmIChJU19FUlIoZmlsZW5hbWUpKQorCQlyZXR1cm4gcmM7CisJcmMgPSBkb19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsIHJlZ3MpOworCWlmIChyYykKIAkJZ290byBvdXQ7Ci0JfQotCXJjID0gZG9fZXhlY3ZlKGZpbGVuYW1lLCAoY2hhciBfX3VzZXIgKiBfX3VzZXIgKikgcmVncy0+Z3Byc1szXSwKLQkJICAgICAgIChjaGFyIF9fdXNlciAqIF9fdXNlciAqKSByZWdzLT5ncHJzWzRdLCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcmVzdWx0ID0gcmM7Ci0JCWdvdG8gb3V0X3B1dG5hbWU7Ci0JfQogCWV4ZWN2ZV90YWlsKCk7Ci0JcmVzdWx0ID0gcmVncy0+Z3Byc1syXTsKLW91dF9wdXRuYW1lOgotCXB1dG5hbWUoZmlsZW5hbWUpOworCXJjID0gcmVncy0+Z3Byc1syXTsKIG91dDoKLQlyZXR1cm4gcmVzdWx0OworCXB1dG5hbWUoZmlsZW5hbWUpOworCXJldHVybiByYzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IGYzZGRkN2EuLmE4NzM4NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzM5LDI0ICszMzksMTAgQEAKIAlpbnQgY29waWVkLCByZXQ7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKLQljYXNlIFBUUkFDRV9QRUVLVEVYVDoKLQljYXNlIFBUUkFDRV9QRUVLREFUQToKLQkJLyogUmVtb3ZlIGhpZ2ggb3JkZXIgYml0IGZyb20gYWRkcmVzcyAob25seSBmb3IgMzEgYml0KS4gKi8KLQkJYWRkciAmPSBQU1dfQUREUl9JTlNOOwotCQkvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8KLQkJcmV0dXJuIGdlbmVyaWNfcHRyYWNlX3BlZWtkYXRhKGNoaWxkLCBhZGRyLCBkYXRhKTsKLQogCWNhc2UgUFRSQUNFX1BFRUtVU1I6CiAJCS8qIHJlYWQgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkciBpbiB0aGUgVVNFUiBhcmVhLiAqLwogCQlyZXR1cm4gcGVla191c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAotCWNhc2UgUFRSQUNFX1BPS0VURVhUOgotCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQkvKiBSZW1vdmUgaGlnaCBvcmRlciBiaXQgZnJvbSBhZGRyZXNzIChvbmx5IGZvciAzMSBiaXQpLiAqLwotCQlhZGRyICY9IFBTV19BRERSX0lOU047Ci0JCS8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovCi0JCXJldHVybiBnZW5lcmljX3B0cmFjZV9wb2tlZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7Ci0KIAljYXNlIFBUUkFDRV9QT0tFVVNSOgogCQkvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEgKi8KIAkJcmV0dXJuIHBva2VfdXNlcihjaGlsZCwgYWRkciwgZGF0YSk7CkBAIC0zODYsOCArMzcyLDExIEBACiAJCQljb3BpZWQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCQl9CiAJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCS8qIFJlbW92aW5nIGhpZ2ggb3JkZXIgYml0IGZyb20gYWRkciAob25seSBmb3IgMzEgYml0KS4gKi8KKwkJYWRkciAmPSBQU1dfQUREUl9JTlNOOworCQlyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCX0KLQlyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLlMgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwppbmRleCAyMDYzOWRmLi5lMjdjYTYzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwpAQCAtMjQsOCArMjQsNiBAQAogIyAgIFIzCT0gZXh0ZXJuYWwgaW50ZXJydXB0aW9uIHBhcmFtZXRlciBpZiBSMj0wCiAjCiAKLS5zZWN0aW9uICIuaW5pdC50ZXh0IiwiYXgiCi0KIF9zY2xwX3dhaXRfaW50OgogCXN0bQklcjYsJXIxNSwyNCglcjE1KQkJIyBzYXZlIHJlZ2lzdGVycwogCWJhc3IJJXIxMywwCQkJCSMgZ2V0IGJhc2UgcmVnaXN0ZXIKQEAgLTMxOCw5ICszMTYsOCBAQAogCS5sb25nCV9zY2xwX3dvcmtfYXJlYQogLkxhc2NlYmM6CiAJLmxvbmcJX2FzY2ViYwotLnByZXZpb3VzCiAKLS5zZWN0aW9uICIuaW5pdC5kYXRhIiwiYSIKKy5zZWN0aW9uIC5kYXRhLCJhdyIsQHByb2diaXRzCiAJLmJhbGlnbiA0MDk2CiBfc2NscF93b3JrX2FyZWE6CiAJLmZpbGwJNDA5NgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggNTZjMTY4Ny4uYjRiNjM5NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC00NzUsMTAgKzQ3NSw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBhc3luY19zdGFjaywgcGFuaWNfc3RhY2s7CiAJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwotCWludCBsY19vcmRlcjsKIAotCWxjX29yZGVyID0gc2l6ZW9mKGxvbmcpID09IDggPyAxIDogMDsKLQlsb3djb3JlID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgR0ZQX0RNQSwgbGNfb3JkZXIpOworCWxvd2NvcmUgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLCBMQ19PUkRFUik7CiAJaWYgKCFsb3djb3JlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhc3luY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVNZTkNfT1JERVIpOwpAQCAtNTA5LDE2ICs1MDcsMTQgQEAKIG91dDoKIAlmcmVlX3BhZ2UocGFuaWNfc3RhY2spOwogCWZyZWVfcGFnZXMoYXN5bmNfc3RhY2ssIEFTWU5DX09SREVSKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbG93Y29yZSwgTENfT1JERVIpOwogCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBzbXBfZnJlZV9sb3djb3JlKGludCBjcHUpCiB7CiAJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwotCWludCBsY19vcmRlcjsKIAotCWxjX29yZGVyID0gc2l6ZW9mKGxvbmcpID09IDggPyAxIDogMDsKIAlsb3djb3JlID0gbG93Y29yZV9wdHJbY3B1XTsKICNpZm5kZWYgQ09ORklHXzY0QklUCiAJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpCkBAIC01MjgsNyArNTI0LDcgQEAKICNlbmRpZgogCWZyZWVfcGFnZShsb3djb3JlLT5wYW5pY19zdGFjayAtIFBBR0VfU0laRSk7CiAJZnJlZV9wYWdlcyhsb3djb3JlLT5hc3luY19zdGFjayAtIEFTWU5DX1NJWkUsIEFTWU5DX09SREVSKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbG93Y29yZSwgTENfT1JERVIpOwogCWxvd2NvcmVfcHRyW2NwdV0gPSBOVUxMOwogfQogCkBAIC02NjQsNyArNjYwLDYgQEAKIAl1bnNpZ25lZCBsb25nIGFzeW5jX3N0YWNrLCBwYW5pY19zdGFjazsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmU7CiAJdW5zaWduZWQgaW50IGNwdTsKLQlpbnQgbGNfb3JkZXI7CiAKIAlzbXBfZGV0ZWN0X2NwdXMoKTsKIApAQCAtNjc0LDggKzY2OSw3IEBACiAJcHJpbnRfY3B1X2luZm8oKTsKIAogCS8qIFJlYWxsb2NhdGUgY3VycmVudCBsb3djb3JlLCBidXQga2VlcCBpdHMgY29udGVudHMuICovCi0JbGNfb3JkZXIgPSBzaXplb2YobG9uZykgPT0gOCA/IDEgOiAwOwotCWxvd2NvcmUgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLCBsY19vcmRlcik7CisJbG93Y29yZSA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsIExDX09SREVSKTsKIAlwYW5pY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAlhc3luY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVNZTkNfT1JERVIpOwogCUJVR19PTighbG93Y29yZSB8fCAhcGFuaWNfc3RhY2sgfHwgIWFzeW5jX3N0YWNrKTsKQEAgLTEwNDcsNDIgKzEwNDEsNiBAQAogc3RhdGljIFNZU0RFVl9DTEFTU19BVFRSKGRpc3BhdGNoaW5nLCAwNjQ0LCBkaXNwYXRjaGluZ19zaG93LAogCQkJIGRpc3BhdGNoaW5nX3N0b3JlKTsKIAotLyoKLSAqIElmIHRoZSByZXN1bWUga2VybmVsIHJ1bnMgb24gYW5vdGhlciBjcHUgdGhhbiB0aGUgc3VzcGVuZGVkIGtlcm5lbCwKLSAqIHdlIGhhdmUgdG8gc3dpdGNoIHRoZSBjcHUgSURzIGluIHRoZSBsb2dpY2FsIG1hcC4KLSAqLwotdm9pZCBzbXBfc3dpdGNoX2Jvb3RfY3B1X2luX3Jlc3VtZSh1MzIgcmVzdW1lX3BoeXNfY3B1X2lkLAotCQkJCSAgIHN0cnVjdCBfbG93Y29yZSAqc3VzcGVuZF9sb3djb3JlKQotewotCWludCBjcHUsIHN1c3BlbmRfY3B1X2lkLCByZXN1bWVfY3B1X2lkOwotCXUzMiBzdXNwZW5kX3BoeXNfY3B1X2lkOwotCi0Jc3VzcGVuZF9waHlzX2NwdV9pZCA9IF9fY3B1X2xvZ2ljYWxfbWFwW3N1c3BlbmRfbG93Y29yZS0+Y3B1X25yXTsKLQlzdXNwZW5kX2NwdV9pZCA9IHN1c3BlbmRfbG93Y29yZS0+Y3B1X25yOwotCi0JZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7Ci0JCWlmIChfX2NwdV9sb2dpY2FsX21hcFtjcHVdID09IHJlc3VtZV9waHlzX2NwdV9pZCkgewotCQkJcmVzdW1lX2NwdV9pZCA9IGNwdTsKLQkJCWdvdG8gZm91bmQ7Ci0JCX0KLQl9Ci0JcGFuaWMoIkNvdWxkIG5vdCBmaW5kIHJlc3VtZSBjcHUgaW4gbG9naWNhbCBtYXAuXG4iKTsKLQotZm91bmQ6Ci0JcHJpbnRrKCJSZXN1bWUgIGNwdSBJRDogJWkvJWlcbiIsIHJlc3VtZV9waHlzX2NwdV9pZCwgcmVzdW1lX2NwdV9pZCk7Ci0JcHJpbnRrKCJTdXNwZW5kIGNwdSBJRDogJWkvJWlcbiIsIHN1c3BlbmRfcGh5c19jcHVfaWQsIHN1c3BlbmRfY3B1X2lkKTsKLQotCV9fY3B1X2xvZ2ljYWxfbWFwW3Jlc3VtZV9jcHVfaWRdID0gc3VzcGVuZF9waHlzX2NwdV9pZDsKLQlfX2NwdV9sb2dpY2FsX21hcFtzdXNwZW5kX2NwdV9pZF0gPSByZXN1bWVfcGh5c19jcHVfaWQ7Ci0KLQlsb3djb3JlX3B0cltzdXNwZW5kX2NwdV9pZF0tPmNwdV9hZGRyID0gcmVzdW1lX3BoeXNfY3B1X2lkOwotfQotCi11MzIgc21wX2dldF9waHlzX2NwdV9pZCh2b2lkKQotewotCXJldHVybiBfX2NwdV9sb2dpY2FsX21hcFtzbXBfcHJvY2Vzc29yX2lkKCldOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3VzcGVuZC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMKaW5kZXggMDg2YmVlOS4uY2Y5ZTVjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMKQEAgLTYsMzYgKzYsMjYgQEAKICAqIEF1dGhvcihzKTogSGFucy1Kb2FjaGltIFBpY2h0IDxoYW5zQGxpbnV4LnZuZXQuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pcGwuaD4KIAogLyoKICAqIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzCiAgKi8KIGV4dGVybiBjb25zdCB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CiAKLS8qCi0gKiAgY2hlY2sgaWYgZ2l2ZW4gcGZuIGlzIGluIHRoZSAnbm9zYXZlJyBvciBpbiB0aGUgcmVhZCBvbmx5IE5TUyBzZWN0aW9uCi0gKi8KIGludCBwZm5faXNfbm9zYXZlKHVuc2lnbmVkIGxvbmcgcGZuKQogewotCXVuc2lnbmVkIGxvbmcgbm9zYXZlX2JlZ2luX3BmbiA9IF9fcGEoJl9fbm9zYXZlX2JlZ2luKSA+PiBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgbm9zYXZlX2VuZF9wZm4gPSBQQUdFX0FMSUdOKF9fcGEoJl9fbm9zYXZlX2VuZCkpCi0JCQkJCT4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBlc2hhcmVkX3BmbiA9IFBGTl9ET1dOKF9fcGEoJl9lc2hhcmVkKSkgLSAxOwotCXVuc2lnbmVkIGxvbmcgc3RleHRfcGZuID0gUEZOX0RPV04oX19wYSgmX3N0ZXh0KSk7CisJdW5zaWduZWQgbG9uZyBub3NhdmVfYmVnaW5fcGZuID0gUEZOX0RPV04oX19wYSgmX19ub3NhdmVfYmVnaW4pKTsKKwl1bnNpZ25lZCBsb25nIG5vc2F2ZV9lbmRfcGZuID0gUEZOX0RPV04oX19wYSgmX19ub3NhdmVfZW5kKSk7CiAKKwkvKiBBbHdheXMgc2F2ZSBsb3djb3JlIHBhZ2VzIChMQyBwcm90ZWN0aW9uIG1pZ2h0IGJlIGVuYWJsZWQpLiAqLworCWlmIChwZm4gPD0gTENfUEFHRVMpCisJCXJldHVybiAwOwogCWlmIChwZm4gPj0gbm9zYXZlX2JlZ2luX3BmbiAmJiBwZm4gPCBub3NhdmVfZW5kX3BmbikKIAkJcmV0dXJuIDE7Ci0JaWYgKHBmbiA+PSBzdGV4dF9wZm4gJiYgcGZuIDw9IGVzaGFyZWRfcGZuKSB7Ci0JCWlmIChpcGxfaW5mby50eXBlID09IElQTF9UWVBFX05TUykKLQkJCXJldHVybiAxOwotCX0gZWxzZSBpZiAoKHRwcm90KHBmbiAqIFBBR0VfU0laRSkgJiYgcGZuID4gMCkpCisJLyogU2tpcCBtZW1vcnkgaG9sZXMgYW5kIHJlYWQtb25seSBwYWdlcyAoTlNTLCBEQ1NTLCAuLi4pLiAqLworCWlmICh0cHJvdChQRk5fUEhZUyhwZm4pKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwppbmRleCA3Y2Q2YjA5Li5mZTkyN2QwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogLyoKQEAgLTQxLDYgKzQyLDkgQEAKIAkvKiBHZXQgcG9pbnRlciB0byBzYXZlIGFyZWEgKi8KIAlsZ2hpCSVyMSwweDEwMDAKIAorCS8qIFNhdmUgQ1BVIGFkZHJlc3MgKi8KKwlzdGFwCV9fTENfQ1BVX0FERFJFU1MoJXIxKQorCiAJLyogU3RvcmUgcmVnaXN0ZXJzICovCiAJbXZjCTB4MzE4KDQsJXIxKSxfX1NGX0VNUFRZKCVyMTUpCS8qIG1vdmUgcHJlZml4IHRvIGxvd2NvcmUgKi8KIAlzdGZwYwkweDMxYyglcjEpCQkJLyogc3RvcmUgZnB1IGNvbnRyb2wgKi8KQEAgLTEwMiwxMSArMTA2LDEwIEBACiAJYWdoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAogCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBTYXZlIGJvb3QgY3B1IG51bWJlciAqLwotCWJyYXNsCSVyMTQsc21wX2dldF9waHlzX2NwdV9pZAotCWxncgklcjEwLCVyMgotI2VuZGlmCisJLyogTWFrZSBhbGwgZnJlZSBwYWdlcyBzdGFibGUgKi8KKwlsZ2hpCSVyMiwxCisJYnJhc2wJJXIxNCxhcmNoX3NldF9wYWdlX3N0YXRlcworCiAJLyogRGVhY3RpdmF0ZSBEQVQgKi8KIAlzdG5zbQlfX1NGX0VNUFRZKCVyMTUpLDB4ZmIKIApAQCAtMTMzLDYgKzEzNiw2OSBAQAogMjoKIAlwdGxiCQkJCS8qIGZsdXNoIHRsYiAqLwogCisJLyogUmVzZXQgU3lzdGVtICovCisJbGFybAklcjEscmVzdGFydF9lbnRyeQorCWxhcmwJJXIyLC5McmVzdGFydF9kaWFnMzA4X3BzdworCW9nCSVyMSwwKCVyMikKKwlzdGcJJXIxLDAoJXIwKQorCWxhcmwJJXIxLC5MbmV3X3BnbV9jaGVja19wc3cKKwllcHN3CSVyMiwlcjMKKwlzdG0JJXIyLCVyMywwKCVyMSkKKwltdmMJX19MQ19QR01fTkVXX1BTVygxNiwlcjApLDAoJXIxKQorCWxnaGkJJXIwLDAKKwlkaWFnCSVyMCwlcjAsMHgzMDgKK3Jlc3RhcnRfZW50cnk6CisJbGhpCSVyMSwxCisJc2lncAklcjEsJXIwLDB4MTIKKwlzYW02NAorCWxhcmwJJXIxLC5MbmV3X3BnbV9jaGVja19wc3cKKwlscHN3ZQkwKCVyMSkKK3BnbV9jaGVja19lbnRyeToKKworCS8qIFN3aXRjaCB0byBvcmlnaW5hbCBzdXNwZW5kIENQVSAqLworCWxhcmwJJXIxLC5McmVzdW1lX2NwdQkJLyogUmVzdW1lIENQVSBhZGRyZXNzOiByMiAqLworCXN0YXAJMCglcjEpCisJbGxnaAklcjIsMCglcjEpCisJbGdoaQklcjMsMHgxMDAwCisJbGxnaAklcjEsX19MQ19DUFVfQUREUkVTUyglcjMpCS8qIFN1c3BlbmQgQ1BVIGFkZHJlc3M6IHIxICovCisJY2dyCSVyMSwlcjIKKwlqZQlyZXN0b3JlX3JlZ2lzdGVycwkJLyogcjEgPSByMiAtPiBub3RoaW5nIHRvIGRvICovCisJbGFybAklcjQsLkxyZXN0YXJ0X3N1c3BlbmRfcHN3CS8qIFNldCBuZXcgcmVzdGFydCBQU1cgKi8KKwltdmMJX19MQ19SRVNUQVJUX1BTVygxNiwlcjApLDAoJXI0KQorMzoKKwlzaWdwCSVyOSwlcjEsX19TSUdQX0lOSVRJQUxfQ1BVX1JFU0VUCisJYnJjCTgsNGYJLyogYWNjZXB0ZWQgKi8KKwlicmMJMiwzYgkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKworCS8qIFN1c3BlbmQgQ1BVIG5vdCBhdmFpbGFibGUgLT4gcGFuaWMgKi8KKwlsYXJsCSVyMTUsaW5pdF90aHJlYWRfdW5pb24KKwlhaGkJJXIxNSwxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpCisJbGFybAklcjIsLkxwYW5pY19zdHJpbmcKKwlsYXJsCSVyMyxfc2NscF9wcmludF9lYXJseQorCWxnaGkJJXIxLDAKKwlzYW0zMQorCXNpZ3AJJXIxLCVyMCwweDEyCisJYmFzcgklcjE0LCVyMworCWxhcmwJJXIzLC5MZGlzYWJsZWRfd2FpdF8zMQorCWxwc3cJMCglcjMpCis0OgorCS8qIFN3aXRjaCB0byBzdXNwZW5kIENQVSAqLworCXNpZ3AJJXI5LCVyMSxfX1NJR1BfUkVTVEFSVAkvKiBzdGFydCBzdXNwZW5kIENQVSAqLworCWJyYwkyLDRiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCis1OgorCXNpZ3AJJXI5LCVyMixfX1NJR1BfU1RPUAkvKiBzdG9wIHJlc3VtZSAoY3VycmVudCkgQ1BVICovCis2OglqCTZiCisKK3Jlc3RhcnRfc3VzcGVuZDoKKwlsYXJsCSVyMSwuTHJlc3VtZV9jcHUKKwlsbGdoCSVyMiwwKCVyMSkKKzc6CisJc2lncAklcjksJXIyLF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciByZXN1bWUgQ1BVICovCisJYnJjCTIsN2IJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKwl0bWxsCSVyOSwweDQwCQkvKiBUZXN0IGlmIHJlc3VtZSBDUFUgaXMgc3RvcHBlZCAqLworCWp6CTdiCisKK3Jlc3RvcmVfcmVnaXN0ZXJzOgogCS8qIFJlc3RvcmUgcmVnaXN0ZXJzICovCiAJbGdoaQklcjEzLDB4MTAwMAkJLyogJXIxID0gcG9pbnRlciB0byBzYXZlIGFyYWUgKi8KIApAQCAtMTY2LDE5ICsyMzIsMzMgQEAKIAkvKiBQb2ludGVyIHRvIHNhdmUgYXJlYSAqLwogCWxnaGkJJXIxMywweDEwMDAKIAotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBTd2l0Y2ggQ1BVcyAqLwotCWxncgklcjIsJXIxMAkJLyogZ2V0IGNwdSBpZCAqLwotCWxsZ2YJJXIzLDB4MzE4KCVyMTMpCi0JYnJhc2wJJXIxNCxzbXBfc3dpdGNoX2Jvb3RfY3B1X2luX3Jlc3VtZQotI2VuZGlmCiAJLyogUmVzdG9yZSBwcmVmaXggcmVnaXN0ZXIgKi8KIAlzcHgJMHgzMTgoJXIxMykKIAogCS8qIEFjdGl2YXRlIERBVCAqLwogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAogCisJLyogTWFrZSBhbGwgZnJlZSBwYWdlcyB1bnN0YWJsZSAqLworCWxnaGkJJXIyLDAKKwlicmFzbAklcjE0LGFyY2hfc2V0X3BhZ2Vfc3RhdGVzCisKIAkvKiBSZXR1cm4gMCAqLwogCWxtZwklcjYsJXIxNSxTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fU0ZfR1BSUyglcjE1KQogCWxnaGkJJXIyLDAKIAlicgklcjE0CisKKwkuc2VjdGlvbiAuZGF0YS5ub3NhdmUsImF3IixAcHJvZ2JpdHMKKwkuYWxpZ24JOAorLkxkaXNhYmxlZF93YWl0XzMxOgorCS5sb25nICAweDAwMGEwMDAwLDB4MDAwMDAwMDAKKy5McGFuaWNfc3RyaW5nOgorCS5hc2NpegkiUmVzdW1lIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHN1c3BlbmQgQ1BVIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiCisJLmFsaWduCTgKKy5McmVzdGFydF9kaWFnMzA4X3BzdzoKKwkubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAKKy5McmVzdGFydF9zdXNwZW5kX3BzdzoKKwkucXVhZAkweDAwMDAwMDAxODAwMDAwMDAscmVzdGFydF9zdXNwZW5kCisuTG5ld19wZ21fY2hlY2tfcHN3OgorCS5xdWFkCTAscGdtX2NoZWNrX2VudHJ5CisuTHJlc3VtZV9jcHU6CisJLmJ5dGUJMCwwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c19zMzkwLmMgYi9hcmNoL3MzOTAva2VybmVsL3N5c19zMzkwLmMKaW5kZXggYzdhZTRiMS4uZTlkOTRmNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzX3MzOTAuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImVudHJ5LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCBhZDFhY2QyLi4zMGVjYTA3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0xOSw3ICsxOSw3IEBACiBTWVNDQUxMKHN5c19jcmVhdCxzeXNfY3JlYXQsc3lzMzJfY3JlYXRfd3JhcHBlcikKIFNZU0NBTEwoc3lzX2xpbmssc3lzX2xpbmssc3lzMzJfbGlua193cmFwcGVyKQogU1lTQ0FMTChzeXNfdW5saW5rLHN5c191bmxpbmssc3lzMzJfdW5saW5rX3dyYXBwZXIpCQkvKiAxMCAqLwotU1lTQ0FMTChzeXNfZXhlY3ZlLHN5c19leGVjdmUsc3lzMzJfZXhlY3ZlKQorU1lTQ0FMTChzeXNfZXhlY3ZlLHN5c19leGVjdmUsc3lzMzJfZXhlY3ZlX3dyYXBwZXIpCiBTWVNDQUxMKHN5c19jaGRpcixzeXNfY2hkaXIsc3lzMzJfY2hkaXJfd3JhcHBlcikKIFNZU0NBTEwoc3lzX3RpbWUsc3lzX25pX3N5c2NhbGwsc3lzMzJfdGltZV93cmFwcGVyKQkJLyogb2xkIHRpbWUgc3lzY2FsbCAqLwogU1lTQ0FMTChzeXNfbWtub2Qsc3lzX21rbm9kLHN5czMyX21rbm9kX3dyYXBwZXIpCkBAIC0xMjgsNyArMTI4LDcgQEAKIFNZU0NBTEwoc3lzX2lwYyxzeXNfaXBjLHN5czMyX2lwY193cmFwcGVyKQogU1lTQ0FMTChzeXNfZnN5bmMsc3lzX2ZzeW5jLHN5czMyX2ZzeW5jX3dyYXBwZXIpCiBTWVNDQUxMKHN5c19zaWdyZXR1cm4sc3lzX3NpZ3JldHVybixzeXMzMl9zaWdyZXR1cm4pCi1TWVNDQUxMKHN5c19jbG9uZSxzeXNfY2xvbmUsc3lzMzJfY2xvbmUpCQkJLyogMTIwICovCitTWVNDQUxMKHN5c19jbG9uZSxzeXNfY2xvbmUsc3lzX2Nsb25lX3dyYXBwZXIpCQkJLyogMTIwICovCiBTWVNDQUxMKHN5c19zZXRkb21haW5uYW1lLHN5c19zZXRkb21haW5uYW1lLHN5czMyX3NldGRvbWFpbm5hbWVfd3JhcHBlcikKIFNZU0NBTEwoc3lzX25ld3VuYW1lLHN5c19zMzkwX25ld3VuYW1lLHN5czMyX25ld3VuYW1lX3dyYXBwZXIpCiBOSV9TWVNDQUxMCQkJCQkJCS8qIG1vZGlmeV9sZHQgZm9yIGkzODYgKi8KQEAgLTEzNiw4ICsxMzYsOCBAQAogU1lTQ0FMTChzeXNfbXByb3RlY3Qsc3lzX21wcm90ZWN0LHN5czMyX21wcm90ZWN0X3dyYXBwZXIpCS8qIDEyNSAqLwogU1lTQ0FMTChzeXNfc2lncHJvY21hc2ssc3lzX3NpZ3Byb2NtYXNrLGNvbXBhdF9zeXNfc2lncHJvY21hc2tfd3JhcHBlcikKIE5JX1NZU0NBTEwJCQkJCQkJLyogb2xkICJjcmVhdGUgbW9kdWxlIiAqLwotU1lTQ0FMTChzeXNfaW5pdF9tb2R1bGUsc3lzX2luaXRfbW9kdWxlLHN5czMyX2luaXRfbW9kdWxlX3dyYXBwZXIpCi1TWVNDQUxMKHN5c19kZWxldGVfbW9kdWxlLHN5c19kZWxldGVfbW9kdWxlLHN5czMyX2RlbGV0ZV9tb2R1bGVfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2luaXRfbW9kdWxlLHN5c19pbml0X21vZHVsZSxzeXNfaW5pdF9tb2R1bGVfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2RlbGV0ZV9tb2R1bGUsc3lzX2RlbGV0ZV9tb2R1bGUsc3lzX2RlbGV0ZV9tb2R1bGVfd3JhcHBlcikKIE5JX1NZU0NBTEwJCQkJCQkJLyogMTMwOiBvbGQgZ2V0X2tlcm5lbF9zeW1zICovCiBTWVNDQUxMKHN5c19xdW90YWN0bCxzeXNfcXVvdGFjdGwsc3lzMzJfcXVvdGFjdGxfd3JhcHBlcikKIFNZU0NBTEwoc3lzX2dldHBnaWQsc3lzX2dldHBnaWQsc3lzMzJfZ2V0cGdpZF93cmFwcGVyKQpAQCAtMzM5LDQgKzMzOSw0IEBACiBTWVNDQUxMKHN5c19wcmVhZHYsc3lzX3ByZWFkdixjb21wYXRfc3lzX3ByZWFkdl93cmFwcGVyKQogU1lTQ0FMTChzeXNfcHdyaXRldixzeXNfcHdyaXRldixjb21wYXRfc3lzX3B3cml0ZXZfd3JhcHBlcikKIFNZU0NBTEwoc3lzX3J0X3Rnc2lncXVldWVpbmZvLHN5c19ydF90Z3NpZ3F1ZXVlaW5mbyxjb21wYXRfc3lzX3J0X3Rnc2lncXVldWVpbmZvX3dyYXBwZXIpIC8qIDMzMCAqLwotU1lTQ0FMTChzeXNfcGVyZl9jb3VudGVyX29wZW4sc3lzX3BlcmZfY291bnRlcl9vcGVuLHN5c19wZXJmX2NvdW50ZXJfb3Blbl93cmFwcGVyKQorU1lTQ0FMTChzeXNfcGVyZl9ldmVudF9vcGVuLHN5c19wZXJmX2V2ZW50X29wZW4sc3lzX3BlcmZfZXZlbnRfb3Blbl93cmFwcGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggMmMyZjk4My4uNDM0ODZjMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAlpZiAoIWludGkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW50aS0+dHlwZSA9IEtWTV9TMzkwX1BST0dSQU1fSU5UOzsKKwlpbnRpLT50eXBlID0gS1ZNX1MzOTBfUFJPR1JBTV9JTlQ7CiAJaW50aS0+cGdtLmNvZGUgPSBjb2RlOwogCiAJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiaW5qZWN0OiBwcm9ncmFtIGNoZWNrICVkIChmcm9tIGtlcm5lbCkiLCBjb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggMWFiYmFkZC4uNmQ1MDc0NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqICAgIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMDYsNyArMzA2LDcgQEAKIAkgKiBpbnRlcnJ1cHRzIGFnYWluIGFuZCB0aGVuIHNlYXJjaCB0aGUgVk1BcwogCSAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyZXNzKTsKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOwogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAogCXNpX2NvZGUgPSBTRUdWX01BUEVSUjsKQEAgLTM2NiwxMSArMzY2LDExIEBACiAJfQogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXRzay0+bWluX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0KICAgICAgICAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IGM2MzRkZmIuLjc2NTY0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJZGF0YXNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfZWRhdGEgLSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKIAlpbml0c2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbjsKICAgICAgICAgcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVsZGsga2VybmVsIGNvZGUsICVsZGsgcmVzZXJ2ZWQsICVsZGsgZGF0YSwgJWxkayBpbml0KVxuIiwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKICAgICAgICAgICAgICAgICBtYXhfbWFwbnIgPDwgKFBBR0VfU0hJRlQtMTApLAogICAgICAgICAgICAgICAgIGNvZGVzaXplID4+IDEwLAogICAgICAgICAgICAgICAgIHJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BhZ2Utc3RhdGVzLmMgYi9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYwppbmRleCBmOTJlYzIwLi4wOTg5MjNhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYworKysgYi9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYwpAQCAtNTAsMjggKzUwLDY0IEBACiAJCWNtbWFfZmxhZyA9IDA7CiB9CiAKLXZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV91bnN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogewogCWludCBpLCByYzsKIAotCWlmICghY21tYV9mbGFnKQotCQlyZXR1cm47CiAJZm9yIChpID0gMDsgaSA8ICgxIDw8IG9yZGVyKTsgaSsrKQogCQlhc20gdm9sYXRpbGUoIi5pbnNuIHJyZiwweGI5YWIwMDAwLCUwLCUxLCUyLDAiCiAJCQkgICAgIDogIj0mZCIgKHJjKQotCQkJICAgICA6ICJhIiAoKHBhZ2VfdG9fcGZuKHBhZ2UpICsgaSkgPDwgUEFHRV9TSElGVCksCisJCQkgICAgIDogImEiIChwYWdlX3RvX3BoeXMocGFnZSArIGkpKSwKIAkJCSAgICAgICAiaSIgKEVTU0FfU0VUX1VOVVNFRCkpOwogfQogCit2b2lkIGFyY2hfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCit7CisJaWYgKCFjbW1hX2ZsYWcpCisJCXJldHVybjsKKwlzZXRfcGFnZV91bnN0YWJsZShwYWdlLCBvcmRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zdGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgb3JkZXIpOyBpKyspCisJCWFzbSB2b2xhdGlsZSgiLmluc24gcnJmLDB4YjlhYjAwMDAsJTAsJTEsJTIsMCIKKwkJCSAgICAgOiAiPSZkIiAocmMpCisJCQkgICAgIDogImEiIChwYWdlX3RvX3BoeXMocGFnZSArIGkpKSwKKwkJCSAgICAgICAiaSIgKEVTU0FfU0VUX1NUQUJMRSkpOworfQorCiB2b2lkIGFyY2hfYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogewotCWludCBpLCByYzsKKwlpZiAoIWNtbWFfZmxhZykKKwkJcmV0dXJuOworCXNldF9wYWdlX3N0YWJsZShwYWdlLCBvcmRlcik7Cit9CisKK3ZvaWQgYXJjaF9zZXRfcGFnZV9zdGF0ZXMoaW50IG1ha2Vfc3RhYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yZGVyLCB0OworCXN0cnVjdCBsaXN0X2hlYWQgKmw7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IHpvbmUgKnpvbmU7CiAKIAlpZiAoIWNtbWFfZmxhZykKIAkJcmV0dXJuOwotCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBvcmRlcik7IGkrKykKLQkJYXNtIHZvbGF0aWxlKCIuaW5zbiBycmYsMHhiOWFiMDAwMCwlMCwlMSwlMiwwIgotCQkJICAgICA6ICI9JmQiIChyYykKLQkJCSAgICAgOiAiYSIgKChwYWdlX3RvX3BmbihwYWdlKSArIGkpIDw8IFBBR0VfU0hJRlQpLAotCQkJICAgICAgICJpIiAoRVNTQV9TRVRfU1RBQkxFKSk7CisJaWYgKG1ha2Vfc3RhYmxlKQorCQlkcmFpbl9sb2NhbF9wYWdlcyhOVUxMKTsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5sb2NrLCBmbGFncyk7CisJCWZvcl9lYWNoX21pZ3JhdGV0eXBlX29yZGVyKG9yZGVyLCB0KSB7CisJCQlsaXN0X2Zvcl9lYWNoKGwsICZ6b25lLT5mcmVlX2FyZWFbb3JkZXJdLmZyZWVfbGlzdFt0XSkgeworCQkJCXBhZ2UgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBwYWdlLCBscnUpOworCQkJCWlmIChtYWtlX3N0YWJsZSkKKwkJCQkJc2V0X3BhZ2Vfc3RhYmxlKHBhZ2UsIG9yZGVyKTsKKwkJCQllbHNlCisJCQkJCXNldF9wYWdlX3Vuc3RhYmxlKHBhZ2UsIG9yZGVyKTsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFncyk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggYzcwMjE1Mi4uYzYwYmZiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0zMTQsMjEgKzMxNCwxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9lbmFibGVfc2llKTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLSNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19QQUdFQUxMT0MpICYmIGRlZmluZWQoQ09ORklHX0hJQkVSTkFUSU9OKQogYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlpbnQgY2M7CiAKIAlhZGRyID0gcGFnZV90b19waHlzKHBhZ2UpOwotCWFzbSgibHJhICUxLDAoJTEpXG4iCi0JICAgICJpcG0gJTBcbiIKLQkgICAgInNybCAlMCwyOCIKLQkgICAgOiI9ZCIoY2MpLCIrYSIoYWRkcik6OiJjYyIpOworCWFzbSB2b2xhdGlsZSgKKwkJIglscmEJJTEsMCglMSlcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjgiCisJCTogIj1kIiAoY2MpLCAiK2EiIChhZGRyKSA6IDogImNjIik7CiAJcmV0dXJuIGNjID09IDA7CiB9Ci0KLSNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KLSNlbmRpZiAvKiBDT05GSUdfREVCVUdfUEFHRUFMTE9DICovCi0KKyNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gJiYgQ09ORklHX0RFQlVHX1BBR0VBTExPQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBlZTU4MjEwLi5kOTJhNWEyIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMiwxMCArMiwxMSBAQAogI2RlZmluZSBfQVNNX1NDT1JFX1BBR0VfSAogCiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkoMTIpCi0jZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfU0laRQkoX0FDKDEsVUwpIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggM2ExMTIyOC4uNTU5Mzk5OSAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNyw2ICs3LDE1IEBACiAjZGVmaW5lIEtVX1VTRVIJMHgwOAogI2RlZmluZSBLVV9LRVJOCTB4MDAKIAorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKworLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgCSgxKQorI2RlZmluZSBUSFJFQURfU0laRSAJCShQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9NQVNLIAkJKFRIUkVBRF9TSVpFIC0gX0FDKDEsVUwpKQorI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTYyLDEyICs3MSw2IEBACiByZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKl9fY3VycmVudF90aHJlYWRfaW5mbyBfX2FzbV9fKCJyMjgiKTsKICNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCV9fY3VycmVudF90aHJlYWRfaW5mbwogCi0vKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiAJKDEpCi0jZGVmaW5lIFRIUkVBRF9TSVpFIAkJKFBBR0VfU0laRSA8PCBUSFJFQURfU0laRV9PUkRFUikKLSNkZWZpbmUgVEhSRUFEX01BU0sgCQkoVEhSRUFEX1NJWkUgLSAxVUwpCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgotCiAjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKICNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyhpbmZvKSBrZnJlZShpbmZvKQogCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zY29yZS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmODU1Njk4Li5lZWJjYmFhIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc2NvcmUva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTI0LDYgKzI0LDggQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiBPVVRQVVRfQVJDSChzY29yZSkKIEVOVFJZKF9zdGV4dCkKQEAgLTQ5LDIxICs1MSw5IEBACiAJLiA9IEFMSUdOKDE2KTsKIAlST0RBVEEKIAotCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotCS4gPSBBTElHTigxNik7Ci0JX19leF90YWJsZSA6IHsKLQkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkJKihfX2V4X3RhYmxlKQotCQlfX3N0b3BfX19leF90YWJsZSA9IC47Ci0JfQorCUVYQ0VQVElPTl9UQUJMRSgxNikKIAotCS8qIHdyaXRlYWJsZSAqLwotCS5kYXRhIEFMSUdOICg0MDk2KTogewotCQkqKC5kYXRhLmluaXRfdGFzaykKLQotCQlEQVRBX0RBVEEKLQkJQ09OU1RSVUNUT1JTCi0JfQorCVJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKIAogCS8qIFdlIHdhbnQgdGhlIHNtYWxsIGRhdGEgc2VjdGlvbnMgdG9nZXRoZXIsIHNvIHNpbmdsZS1pbnN0cnVjdGlvbiBvZmZzZXRzCiAJICAgY2FuIGFjY2VzcyB0aGVtIGFsbCwgYW5kIGluaXRpYWxpemVkIGRhdGEgYWxsIGJlZm9yZSB1bmluaXRpYWxpemVkLCBzbwpAQCAtNzIsNDUgKzYyLDE0IEBACiAJLnNkYXRhIDogewogCQkqKC5zZGF0YSkKIAl9Ci0KLQkuID0gQUxJR04oMzIpOwotCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogewotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQotCX0KIAlfZWRhdGEgPSAgLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAKIAkvKiB3aWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLQkuID0gQUxJR04oNDA5Nik7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KKwkuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogCV9faW5pdF9iZWdpbiA9IC47CiAKLQkuID0gQUxJR04oNDA5Nik7Ci0JLmluaXQudGV4dCA6IHsKLQkJX3Npbml0dGV4dCA9IC47Ci0JCUlOSVRfVEVYVAotCQlfZWluaXR0ZXh0ID0gLjsKLQl9Ci0JLmluaXQuZGF0YSA6IHsKLQkJSU5JVF9EQVRBCi0JfQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCi0JLmluaXRjYWxsLmluaXQgOiB7Ci0JCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0JU0VDVVJJVFlfSU5JVAorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKwlJTklUX0RBVEFfU0VDVElPTigxNikKIAogCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZGVkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsIHRvIGRlYWwgd2l0aAogCSAqIHJlZmVyZW5jZXMgZnJvbSAucm9kYXRhCkBAIC0xMjEsMjggKzgwLDEwIEBACiAJLmV4aXQuZGF0YSA6IHsKIAkJRVhJVF9EQVRBCiAJfQotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQotCS5pbml0LnJhbWZzIEFMSUdOKDQwOTYpOiB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLQkJLiA9IEFMSUdOKDQpOwotCQlMT05HKDApOwotCX0KLSNlbmRpZgotCS4gPSBBTElHTig0MDk2KTsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0JX19ic3Nfc3RhcnQgPSAuOwkvKiBCU1MgKi8KLQkuc2JzcyAgOiB7Ci0JCSooLnNic3MpCi0JCSooLnNjb21tb24pCi0JfQotCS5ic3MgOiB7Ci0JCSooLmJzcykKLQkJKihDT01NT04pCi0JfQotCV9fYnNzX3N0b3AgPSAuOworCUJTU19TRUNUSU9OKDAsIDAsIDApCiAJX2VuZCA9IC47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNGRmMzU3MC4uYjk0MDQyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTYsNyArMTYsNyBAQAogCXNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBNTVUKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKLQlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCAzMjdkNDdjLi4yZDA4MDczIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTMxMCw4ICszMTAsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGFwMzI1cnhhX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgYXAzMjVyeGFfY2FtZXJhX2RlbChzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpOworCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyBjYW1lcmFfaW5mbyA9IHsKLQkuaWZhY2UgPSAwLAogCS5mb3JtYXRfbmFtZSA9ICJVWVZZIiwKIAkuZm9ybWF0X2RlcHRoID0gMTYsCiAJLmZvcm1hdCA9IHsKQEAgLTMyMywyNCArMzI1LDQ2IEBACiAJLmJ1c19wYXJhbSA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKIAlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX0RBVEFXSURUSF84LAogCS5zZXRfY2FwdHVyZSA9IGNhbWVyYV9zZXRfY2FwdHVyZSwKKwkubGluayA9IHsKKwkJLmJ1c19pZAkJPSAwLAorCQkuYWRkX2RldmljZQk9IGFwMzI1cnhhX2NhbWVyYV9hZGQsCisJCS5kZWxfZGV2aWNlCT0gYXAzMjVyeGFfY2FtZXJhX2RlbCwKKwkJLm1vZHVsZV9uYW1lCT0gInNvY19jYW1lcmFfcGxhdGZvcm0iLAorCX0sCiB9OwogCitzdGF0aWMgdm9pZCBkdW1teV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2FtZXJhX2RldmljZSA9IHsKIAkubmFtZQkJPSAic29jX2NhbWVyYV9wbGF0Zm9ybSIsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmNhbWVyYV9pbmZvLAorCQkucmVsZWFzZQk9IGR1bW15X3JlbGVhc2UsCiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGNhbWVyYV9zZXR1cCh2b2lkKQorc3RhdGljIGludCBhcDMyNXJ4YV9jYW1lcmFfYWRkKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGNhbWVyYV9wcm9iZSgpID4gMCkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKKwlpZiAoaWNsICE9ICZjYW1lcmFfaW5mby5saW5rIHx8IGNhbWVyYV9wcm9iZSgpIDw9IDApCisJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIDA7CisJY2FtZXJhX2luZm8uZGV2ID0gZGV2OworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY2FtZXJhX2RldmljZSk7CiB9Ci1sYXRlX2luaXRjYWxsKGNhbWVyYV9zZXR1cCk7CiAKK3N0YXRpYyB2b2lkIGFwMzI1cnhhX2NhbWVyYV9kZWwoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsKQoreworCWlmIChpY2wgIT0gJmNhbWVyYV9pbmZvLmxpbmspCisJCXJldHVybjsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKKwltZW1zZXQoJmNhbWVyYV9kZXZpY2UuZGV2LmtvYmosIDAsCisJICAgICAgIHNpemVvZihjYW1lcmFfZGV2aWNlLmRldi5rb2JqKSk7Cit9CiAjZW5kaWYgLyogQ09ORklHX0kyQyAqLwogCiBzdGF0aWMgaW50IG92NzcyNV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQpAQCAtNDE2LDYgKzQ0MCw3IEBACiAJLmZsYWdzCQk9IE9WNzcyWF9GTEFHX1ZGTElQIHwgT1Y3NzJYX0ZMQUdfSEZMSVAsCiAJLmVkZ2VjdHJsCT0gT1Y3NzJYX0FVVE9fRURHRUNUUkwoMHhmLCAwKSwKIAkubGluayA9IHsKKwkJLmJ1c19pZAkJPSAwLAogCQkucG93ZXIJCT0gb3Y3NzI1X3Bvd2VyLAogCQkuYm9hcmRfaW5mbwk9ICZhcDMyNXJ4YV9pMmNfY2FtZXJhWzBdLAogCQkuaTJjX2FkYXB0ZXJfaWQJPSAwLApAQCAtNDIzLDExICs0NDgsMTkgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXAzMjVyeGFfY2FtZXJhID0gewotCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZvdjc3MjVfaW5mby5saW5rLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXAzMjVyeGFfY2FtZXJhW10gPSB7CisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAwLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmb3Y3NzI1X2luZm8ubGluaywKKwkJfSwKKwl9LCB7CisJCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJCS5pZAk9IDEsCisJCS5kZXYJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZjYW1lcmFfaW5mby5saW5rLAorCQl9LAogCX0sCiB9OwogCkBAIC00MzgsNyArNDcxLDggQEAKIAkmY2V1X2RldmljZSwKIAkmbmFuZF9mbGFzaF9kZXZpY2UsCiAJJnNkY2FyZF9jbjNfZGV2aWNlLAotCSZhcDMyNXJ4YV9jYW1lcmEsCisJJmFwMzI1cnhhX2NhbWVyYVswXSwKKwkmYXAzMjVyeGFfY2FtZXJhWzFdLAogfTsKIAogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBhcDMyNXJ4YV9zcGlfZGV2aWNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTZiYjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfX0FTTV9TSF9QRVJGX0NPVU5URVJfSAotCi0vKiBTSCBvbmx5IHN1cHBvcnRzIHNvZnR3YXJlIGNvdW50ZXJzIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpIHt9Ci0KLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVAkwCi0KLSNlbmRpZiAvKiBfX0FTTV9TSF9QRVJGX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWEzMDIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fQVNNX1NIX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfX0FTTV9TSF9QRVJGX0VWRU5UX0gKKworLyogU0ggb25seSBzdXBwb3J0cyBzb2Z0d2FyZSBldmVudHMgdGhyb3VnaCB0aGlzIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpIHt9CisKKyNkZWZpbmUgUEVSRl9FVkVOVF9JTkRFWF9PRkZTRVQJMAorCisjZW5kaWYgLyogX19BU01fU0hfUEVSRl9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAppbmRleCA5MjVkZDQwLi5mM2ZkMWI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKQEAgLTM0NCw3ICszNDQsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzMzCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzM0CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzM1Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzM2CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzNgogCiAjZGVmaW5lIE5SX3N5c2NhbGxzIDMzNwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAppbmRleCAyYjg0YmM5Li4zNDNjZThmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKQEAgLTM4NCw3ICszODQsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzYxCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzYyCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzYzCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzY0CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTM2NAogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc18zMi5TIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHNfMzIuUwppbmRleCAxNmJhMjI1Li4xOWZkMTFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc18zMi5TCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzMyLlMKQEAgLTM1Miw0ICszNTIsNCBAQAogCS5sb25nIHN5c19wcmVhZHYKIAkubG9uZyBzeXNfcHdyaXRldgogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwkvKiAzMzUgKi8KLQkubG9uZyBzeXNfcGVyZl9jb3VudGVyX29wZW4KKwkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc182NC5TIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHNfNjQuUwppbmRleCBhZjZmYjc0Li41YmZkZTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc182NC5TCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzY0LlMKQEAgLTM5MCw0ICszOTAsNCBAQAogCS5sb25nIHN5c19wcmVhZHYKIAkubG9uZyBzeXNfcHdyaXRldgogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwotCS5sb25nIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwppbmRleCA3ODFiNDEzLi40NzUzMDEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaW9fdHJhcHBlZC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCWlmICgocmVncy0+c3IgJiBTUl9JTUFTSykgIT0gU1JfSU1BU0spCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCXBlcmZfc3djb3VudGVyX2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcmVzcyk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCwgaGF2ZSBubyB1c2VyIGNvbnRleHQgb3IgYXJlIHJ1bm5pbmcKQEAgLTIwOCwxMSArMjA4LDExIEBACiAJfQogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXRzay0+bWluX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCBlZGM4NDJmLi44MTczZTM4IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMTg2LDggKzE4Niw2IEBACiAJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9VTkNBQ0hFRCwgX19wYSgmX191bmNhY2hlZF9zdGFydCkpOwogfQogCi1zdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jOwotCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewogCWludCBjb2Rlc2l6ZSwgZGF0YXNpemUsIGluaXRzaXplOwpAQCAtMjI2LDEzICsyMjQsOSBAQAogCWRhdGFzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhIC0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7CiAJaW5pdHNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfZW5kIC0gKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfYmVnaW47CiAKLQlrY2xpc3RfYWRkKCZrY29yZV9tZW0sIF9fdmEoMCksIG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOwotCWtjbGlzdF9hZGQoJmtjb3JlX3ZtYWxsb2MsICh2b2lkICopVk1BTExPQ19TVEFSVCwKLQkJICAgVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKTsKLQogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAiCiAJICAgICAgICIlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkJbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWNvZGVzaXplID4+IDEwLAogCQlkYXRhc2l6ZSA+PiAxMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYwppbmRleCAyZGNjNDg1Li5kZTBiMGU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKKysrIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTExNiw3ICsxMTYsNyBAQAogCS8qIE5vdCBhbiBJTyBhZGRyZXNzLCBzbyByZWVuYWJsZSBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcmVzcyk7CisJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyZXNzKTsKIAogCS8qCiAJICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0IG9yIGhhdmUgbm8gdXNlcgpAQCAtMjAxLDExICsyMDEsMTEgQEAKIAogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXRzay0+bWluX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDg2YjgyMzQuLjk3ZmNhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTI1LDcgKzI1LDcgQEAKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAlzZWxlY3QgUlRDX0NMQVNTCiAJc2VsZWN0IFJUQ19EUlZfTTQ4VDU5Ci0Jc2VsZWN0IEhBVkVfUEVSRl9DT1VOVEVSUworCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCkBAIC00Nyw3ICs0Nyw3IEBACiAJc2VsZWN0IFJUQ19EUlZfQlE0ODAyCiAJc2VsZWN0IFJUQ19EUlZfU1VONFYKIAlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQotCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCiBjb25maWcgQVJDSF9ERUZDT05GSUcKIAlzdHJpbmcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbWFuLmgKaW5kZXggOTg4MTkyZS4uYzMwMjlhZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTIwLDYgKzIwLDggQEAKIAogI2RlZmluZSBNQVBfUE9QVUxBVEUJMHg4MDAwCQkvKiBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2V0YWJsZXMgKi8KICNkZWZpbmUgTUFQX05PTkJMT0NLCTB4MTAwMDAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworI2RlZmluZSBNQVBfU1RBQ0sJMHgyMDAwMAkJLyogZ2l2ZSBvdXQgYW4gYWRkcmVzcyB0aGF0IGlzIGJlc3Qgc3VpdGVkIGZvciBwcm9jZXNzL3RocmVhZCBzdGFja3MgKi8KKyNkZWZpbmUgTUFQX0hVR0VUTEIJMHg0MDAwMAkJLyogY3JlYXRlIGEgaHVnZSBwYWdlIG1hcHBpbmcgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3YThjYS4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TUEFSQ19QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfX0FTTV9TUEFSQ19QRVJGX0NPVU5URVJfSAotCi1leHRlcm4gdm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCk7Ci0KLSNkZWZpbmUJUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVAkwCi0KLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUwotZXh0ZXJuIHZvaWQgaW5pdF9od19wZXJmX2NvdW50ZXJzKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfY291bnRlcnModm9pZCkJeyB9Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjY2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fQVNNX1NQQVJDX1BFUkZfRVZFTlRfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19QRVJGX0VWRU5UX0gKKworZXh0ZXJuIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKTsKKworI2RlZmluZQlQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkwCisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKK2V4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkJeyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA3MDZkZjY2Li40MmYyMzE2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM5NSw3ICszOTUsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzI0CiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzI1CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzI2Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzI3CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMyNwogCiAjZGVmaW5lIE5SX1NZU0NBTExTCQkzMjgKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmgKaW5kZXggZDRkZTMyZi4uNmNkYmY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oCkBAIC0yNTgsNyArMjU4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdTMyIHZpb19kcmluZ19hdmFpbChzdHJ1Y3QgdmlvX2RyaW5nX3N0YXRlICpkciwKIAkJCQkgIHVuc2lnbmVkIGludCByaW5nX3NpemUpCiB7Ci0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkpOworCU1BWUJFX0JVSUxEX0JVR19PTighaXNfcG93ZXJfb2ZfMihyaW5nX3NpemUpKTsKIAogCXJldHVybiAoZHItPnBlbmRpbmcgLQogCQkoKGRyLT5wcm9kIC0gZHItPmNvbnMpICYgKHJpbmdfc2l6ZSAtIDEpKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCmluZGV4IDI0N2NjNjIuLjNhMDQ4ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCkBAIC0xMDQsNSArMTA0LDUgQEAKIGF1ZGl0LS0kKENPTkZJR19BVURJVCkgIDo9IGNvbXBhdF9hdWRpdC5vCiBvYmotJChDT05GSUdfQ09NUEFUKSAgICArPSAkKGF1ZGl0LS15KQogCi1wYy0tJChDT05GSUdfUEVSRl9DT1VOVEVSUykgOj0gcGVyZl9jb3VudGVyLm8KK3BjLS0kKENPTkZJR19QRVJGX0VWRU5UUykgOj0gcGVyZl9ldmVudC5vCiBvYmotJChDT05GSUdfU1BBUkM2NCkJKz0gJChwYy0teSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKaW5kZXggOGRhYWIzMy4uOGFiMWQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJCXRpZCA9ICgoYSA8PCBJTUFQX0FJRF9TSElGVCkgfAogCQkJCSAgICAgICAobiA8PCBJTUFQX05JRF9TSElGVCkpOwogCQkJCXRpZCAmPSAoSU1BUF9BSURfU0FGQVJJIHwKLQkJCQkJSU1BUF9OSURfU0FGQVJJKTs7CisJCQkJCUlNQVBfTklEX1NBRkFSSSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQl0aWQgPSBjcHVpZCA8PCBJTUFQX1RJRF9TSElGVDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL25taS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKaW5kZXggMzc4ZWI1My4uYjEyOTYxMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCi0jaW5jbHVkZSA8YXNtL3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGFzbS9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KQEAgLTI2NSw3ICsyNjUsNyBAQAogCQl9CiAJfQogCWlmICghZXJyKQotCQlpbml0X2h3X3BlcmZfY291bnRlcnMoKTsKKwkJaW5pdF9od19wZXJmX2V2ZW50cygpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKaW5kZXggNjhmZjAwMS4uMmQ5NGU3YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3BpbC5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KQEAgLTE1LDcgKzE1LDcgQEAKIAogLyogVGhpcyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgdXNlcnMgb2YgdGhlIHBlcmZvcm1hbmNlCiAgKiBjb3VudGVycy4gIFVzZXJzIHdpbGwgYmUgb3Byb2ZpbGUsIHBzZXVkby1OTUkgd2F0Y2hkb2csIGFuZCB0aGUKLSAqIHBlcmZfY291bnRlciBzdXBwb3J0IGxheWVyLgorICogcGVyZl9ldmVudCBzdXBwb3J0IGxheWVyLgogICovCiAKICNkZWZpbmUgUENSX1NVTjRVX0VOQUJMRQkoUENSX1BJQ19QUklWIHwgUENSX1NUUkFDRSB8IFBDUl9VVFJBQ0UpCkBAIC00MiwxNCArNDIsMTQgQEAKIAogCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCWlycV9lbnRlcigpOwotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCi0JcGVyZl9jb3VudGVyX2RvX3BlbmRpbmcoKTsKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKICNlbmRpZgogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KIAotdm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkKK3ZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQogewogCXNldF9zb2Z0aW50KDEgPDwgUElMX0RFRkVSUkVEX1BDUl9XT1JLKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfY291bnRlci5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL3BlcmZfY291bnRlci5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMDlkZTQwMzUuLjJkNmExYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfY291bnRlci5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMSw4ICsxLDggQEAKLS8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3Igc3BhcmM2NC4KKy8qIFBlcmZvcm1hbmNlIGV2ZW50IHN1cHBvcnQgZm9yIHNwYXJjNjQuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KICAqCi0gKiBUaGlzIGNvZGUgaXMgYmFzZWQgYWxtb3N0IGVudGlyZWx5IHVwb24gdGhlIHg4NiBwZXJmIGNvdW50ZXIKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBhbG1vc3QgZW50aXJlbHkgdXBvbiB0aGUgeDg2IHBlcmYgZXZlbnQKICAqIGNvZGUsIHdoaWNoIGlzOgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDggVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CkBAIC0xMiw3ICsxMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CkBAIC00NiwxOSArNDYsMTkgQEAKICAqIG5vcm1hbCBjb2RlLgogICovCiAKLSNkZWZpbmUgTUFYX0hXQ09VTlRFUlMJCQkyCisjZGVmaW5lIE1BWF9IV0VWRU5UUwkJCTIKICNkZWZpbmUgTUFYX1BFUklPRAkJCSgoMVVMIDw8IDMyKSAtIDEpCiAKICNkZWZpbmUgUElDX1VQUEVSX0lOREVYCQkJMAogI2RlZmluZSBQSUNfTE9XRVJfSU5ERVgJCQkxCiAKLXN0cnVjdCBjcHVfaHdfY291bnRlcnMgewotCXN0cnVjdCBwZXJmX2NvdW50ZXIJKmNvdW50ZXJzW01BWF9IV0NPVU5URVJTXTsKLQl1bnNpZ25lZCBsb25nCQl1c2VkX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdDT1VOVEVSUyldOwotCXVuc2lnbmVkIGxvbmcJCWFjdGl2ZV9tYXNrW0JJVFNfVE9fTE9OR1MoTUFYX0hXQ09VTlRFUlMpXTsKK3N0cnVjdCBjcHVfaHdfZXZlbnRzIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW01BWF9IV0VWRU5UU107CisJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoTUFYX0hXRVZFTlRTKV07CisJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdFVkVOVFMpXTsKIAlpbnQgZW5hYmxlZDsKIH07Ci1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzLCBjcHVfaHdfY291bnRlcnMpID0geyAuZW5hYmxlZCA9IDEsIH07CitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2V2ZW50cywgY3B1X2h3X2V2ZW50cykgPSB7IC5lbmFibGVkID0gMSwgfTsKIAogc3RydWN0IHBlcmZfZXZlbnRfbWFwIHsKIAl1MTYJZW5jb2Rpbmc7CkBAIC04Nyw5ICs4Nyw5IEBACiAJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMDA5LCBQSUNfVVBQRVIgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnVsdHJhM2lfZXZlbnRfbWFwKGludCBldmVudCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnVsdHJhM2lfZXZlbnRfbWFwKGludCBldmVudF9pZCkKIHsKLQlyZXR1cm4gJnVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRdOworCXJldHVybiAmdWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IHVsdHJhM2lfcG11ID0gewpAQCAtMTExLDkgKzExMSw5IEBACiAJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10gPSB7IDB4MDIwMiwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpuaWFnYXJhMl9ldmVudF9tYXAoaW50IGV2ZW50KQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqbmlhZ2FyYTJfZXZlbnRfbWFwKGludCBldmVudF9pZCkKIHsKLQlyZXR1cm4gJm5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50XTsKKwlyZXR1cm4gJm5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50X2lkXTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgbmlhZ2FyYTJfcG11ID0gewpAQCAtMTMwLDEzICsxMzAsMTMgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgKnNwYXJjX3BtdSBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgdTY0IGV2ZW50X2VuY29kaW5nKHU2NCBldmVudCwgaW50IGlkeCkKK3N0YXRpYyB1NjQgZXZlbnRfZW5jb2RpbmcodTY0IGV2ZW50X2lkLCBpbnQgaWR4KQogewogCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQotCQlldmVudCA8PD0gc3BhcmNfcG11LT51cHBlcl9zaGlmdDsKKwkJZXZlbnRfaWQgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7CiAJZWxzZQotCQlldmVudCA8PD0gc3BhcmNfcG11LT5sb3dlcl9zaGlmdDsKLQlyZXR1cm4gZXZlbnQ7CisJCWV2ZW50X2lkIDw8PSBzcGFyY19wbXUtPmxvd2VyX3NoaWZ0OworCXJldHVybiBldmVudF9pZDsKIH0KIAogc3RhdGljIHU2NCBtYXNrX2Zvcl9pbmRleChpbnQgaWR4KQpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCQkgICAgICBzcGFyY19wbXUtPmxvd2VyX25vcCwgaWR4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9lbmFibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAogCQkJCQkgICAgaW50IGlkeCkKIHsKIAl1NjQgdmFsLCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogCXBjcl9vcHMtPndyaXRlKCh2YWwgJiB+bWFzaykgfCBod2MtPmNvbmZpZyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAogCQkJCQkgICAgIGludCBpZHgpCiB7CiAJdTY0IG1hc2sgPSBtYXNrX2Zvcl9pbmRleChpZHgpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIHZvaWQgaHdfcGVyZl9lbmFibGUodm9pZCkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCXU2NCB2YWw7CiAJaW50IGk7CiAKQEAgLTE4NCw5ICsxODQsOSBAQAogCiAJdmFsID0gcGNyX29wcy0+cmVhZCgpOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0NPVU5URVJTOyBpKyspIHsKLQkJc3RydWN0IHBlcmZfY291bnRlciAqY3AgPSBjcHVjLT5jb3VudGVyc1tpXTsKLQkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOworCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdFVkVOVFM7IGkrKykgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqY3AgPSBjcHVjLT5ldmVudHNbaV07CisJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CiAKIAkJaWYgKCFjcCkKIAkJCWNvbnRpbnVlOwpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIHZvaWQgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCiB7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAl1NjQgdmFsOwogCiAJaWYgKCFjcHVjLT5lbmFibGVkKQpAQCAtMjQxLDggKzI0MSw4IEBACiAJd3JpdGVfcGljKHBpYyk7CiB9CiAKLXN0YXRpYyBpbnQgc3BhcmNfcGVyZl9jb3VudGVyX3NldF9wZXJpb2Qoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkJIHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKK3N0YXRpYyBpbnQgc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJczY0IGxlZnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKIAlzNjQgcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwpAQCAtMjY4LDMzICsyNjgsMzMgQEAKIAogCXdyaXRlX3BtYyhpZHgsICh1NjQpKC1sZWZ0KSAmIDB4ZmZmZmZmZmYpOwogCi0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNwYXJjX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3N0YXRpYyBpbnQgc3BhcmNfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXNwYXJjX3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKIAotCWNwdWMtPmNvdW50ZXJzW2lkeF0gPSBjb3VudGVyOworCWNwdWMtPmV2ZW50c1tpZHhdID0gZXZlbnQ7CiAJc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKIAotCXNwYXJjX3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KTsKLQlzcGFyY19wbXVfZW5hYmxlX2NvdW50ZXIoaHdjLCBpZHgpOwotCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisJc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisJc3BhcmNfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7CisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTY0IHNwYXJjX3BlcmZfY291bnRlcl91cGRhdGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkgICAgIHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKK3N0YXRpYyB1NjQgc3BhcmNfcGVyZl9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAlpbnQgc2hpZnQgPSA2NCAtIDMyOwogCXU2NCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKQEAgLTMxMSw3OSArMzExLDc5IEBACiAJZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOwogCWRlbHRhID4+PSBzaGlmdDsKIAotCWF0b21pYzY0X2FkZChkZWx0YSwgJmNvdW50ZXItPmNvdW50KTsKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCWF0b21pYzY0X3N1YihkZWx0YSwgJmh3Yy0+cGVyaW9kX2xlZnQpOwogCiAJcmV0dXJuIG5ld19yYXdfY291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNwYXJjX3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgdm9pZCBzcGFyY19wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJY2xlYXJfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOwotCXNwYXJjX3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKIAogCWJhcnJpZXIoKTsKIAotCXNwYXJjX3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgaHdjLCBpZHgpOwotCWNwdWMtPmNvdW50ZXJzW2lkeF0gPSBOVUxMOworCXNwYXJjX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBOVUxMOwogCWNsZWFyX2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7CiAKLQlwZXJmX2NvdW50ZXJfdXBkYXRlX3VzZXJwYWdlKGNvdW50ZXIpOworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIH0KIAotc3RhdGljIHZvaWQgc3BhcmNfcG11X3JlYWQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3N0YXRpYyB2b2lkIHNwYXJjX3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0Jc3BhcmNfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCBod2MsIGh3Yy0+aWR4KTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlzcGFyY19wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBod2MtPmlkeCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNwYXJjX3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgdm9pZCBzcGFyY19wbXVfdW50aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCXNwYXJjX3BtdV9lbmFibGVfY291bnRlcihod2MsIGh3Yy0+aWR4KTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlzcGFyY19wbXVfZW5hYmxlX2V2ZW50KGh3YywgaHdjLT5pZHgpOwogfQogCi1zdGF0aWMgYXRvbWljX3QgYWN0aXZlX2NvdW50ZXJzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2V2ZW50cyA9IEFUT01JQ19JTklUKDApOwogc3RhdGljIERFRklORV9NVVRFWChwbWNfZ3JhYl9tdXRleCk7CiAKLXZvaWQgcGVyZl9jb3VudGVyX2dyYWJfcG1jKHZvaWQpCit2b2lkIHBlcmZfZXZlbnRfZ3JhYl9wbWModm9pZCkKIHsKLQlpZiAoYXRvbWljX2luY19ub3RfemVybygmYWN0aXZlX2NvdW50ZXJzKSkKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmYWN0aXZlX2V2ZW50cykpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnBtY19ncmFiX211dGV4KTsKLQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9jb3VudGVycykgPT0gMCkgeworCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlX2V2ZW50cykgPT0gMCkgewogCQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpID4gMCkgewogCQkJb25fZWFjaF9jcHUoc3RvcF9ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOwogCQkJQlVHX09OKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSAhPSAwKTsKIAkJfQotCQlhdG9taWNfaW5jKCZhY3RpdmVfY291bnRlcnMpOworCQlhdG9taWNfaW5jKCZhY3RpdmVfZXZlbnRzKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwbWNfZ3JhYl9tdXRleCk7CiB9CiAKLXZvaWQgcGVyZl9jb3VudGVyX3JlbGVhc2VfcG1jKHZvaWQpCit2b2lkIHBlcmZfZXZlbnRfcmVsZWFzZV9wbWModm9pZCkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmYWN0aXZlX2NvdW50ZXJzLCAmcG1jX2dyYWJfbXV0ZXgpKSB7CisJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmFjdGl2ZV9ldmVudHMsICZwbWNfZ3JhYl9tdXRleCkpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA9PSAwKQogCQkJb25fZWFjaF9jcHUoc3RhcnRfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKIAkJbXV0ZXhfdW5sb2NrKCZwbWNfZ3JhYl9tdXRleCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBod19wZXJmX2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQorc3RhdGljIHZvaWQgaHdfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlwZXJmX2NvdW50ZXJfcmVsZWFzZV9wbWMoKTsKKwlwZXJmX2V2ZW50X3JlbGVhc2VfcG1jKCk7CiB9CiAKLXN0YXRpYyBpbnQgX19od19wZXJmX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQorc3RhdGljIGludCBfX2h3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyID0gJmNvdW50ZXItPmF0dHI7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZlbnQtPmF0dHI7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwOwogCXU2NCBlbmM7CiAKQEAgLTM5Niw4ICszOTYsOCBAQAogCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBlcmZfY291bnRlcl9ncmFiX3BtYygpOwotCWNvdW50ZXItPmRlc3Ryb3kgPSBod19wZXJmX2NvdW50ZXJfZGVzdHJveTsKKwlwZXJmX2V2ZW50X2dyYWJfcG1jKCk7CisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CiAKIAkvKiBXZSBzYXZlIHRoZSBlbmFibGUgYml0cyBpbiB0aGUgY29uZmlnX2Jhc2UuICBTbyB0bwogCSAqIHR1cm4gb2ZmIHNhbXBsaW5nIGp1c3Qgd3JpdGUgJ2NvbmZpZycsIGFuZCB0byBlbmFibGUKQEAgLTQzOSwxNiArNDM5LDE2IEBACiAJLnVudGhyb3R0bGUJPSBzcGFyY19wbXVfdW50aHJvdHRsZSwKIH07CiAKLWNvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfY291bnRlcl9pbml0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitjb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCWludCBlcnIgPSBfX2h3X3BlcmZfY291bnRlcl9pbml0KGNvdW50ZXIpOworCWludCBlcnIgPSBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCXJldHVybiAmcG11OwogfQogCi12b2lkIHBlcmZfY291bnRlcl9wcmludF9kZWJ1Zyh2b2lkKQordm9pZCBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgcGNyLCBwaWM7CkBAIC00NzEsMTYgKzQ3MSwxNiBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBfX2twcm9iZXMgcGVyZl9jb3VudGVyX25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBlcmZfZXZlbnRfbm1pX2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQogewogCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWM7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CiAJaW50IGlkeDsKIAotCWlmICghYXRvbWljX3JlYWQoJmFjdGl2ZV9jb3VudGVycykpCisJaWYgKCFhdG9taWNfcmVhZCgmYWN0aXZlX2V2ZW50cykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC00OTMsMzUgKzQ5MywzNCBAQAogCiAJcmVncyA9IGFyZ3MtPnJlZ3M7CiAKLQlkYXRhLnJlZ3MgPSByZWdzOwogCWRhdGEuYWRkciA9IDA7CiAKLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9IV0NPVU5URVJTOyBpZHgrKykgewotCQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gY3B1Yy0+Y291bnRlcnNbaWR4XTsKLQkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9IV0VWRU5UUzsgaWR4KyspIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CisJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CiAJCXU2NCB2YWw7CiAKIAkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKIAkJCWNvbnRpbnVlOwotCQlod2MgPSAmY291bnRlci0+aHc7Ci0JCXZhbCA9IHNwYXJjX3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgaHdjLCBpZHgpOworCQlod2MgPSAmZXZlbnQtPmh3OworCQl2YWwgPSBzcGFyY19wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwogCQlpZiAodmFsICYgKDFVTEwgPDwgMzEpKQogCQkJY29udGludWU7CiAKLQkJZGF0YS5wZXJpb2QgPSBjb3VudGVyLT5ody5sYXN0X3BlcmlvZDsKLQkJaWYgKCFzcGFyY19wZXJmX2NvdW50ZXJfc2V0X3BlcmlvZChjb3VudGVyLCBod2MsIGlkeCkpCisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIXNwYXJjX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHBlcmZfY291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCAxLCAmZGF0YSkpCi0JCQlzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKKwkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKIAl9CiAKIAlyZXR1cm4gTk9USUZZX1NUT1A7CiB9CiAKLXN0YXRpYyBfX3JlYWRfbW9zdGx5IHN0cnVjdCBub3RpZmllcl9ibG9jayBwZXJmX2NvdW50ZXJfbm1pX25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsCQk9IHBlcmZfY291bnRlcl9ubWlfaGFuZGxlciwKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHN0cnVjdCBub3RpZmllcl9ibG9jayBwZXJmX2V2ZW50X25taV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAkJPSBwZXJmX2V2ZW50X25taV9oYW5kbGVyLAogfTsKIAogc3RhdGljIGJvb2wgX19pbml0IHN1cHBvcnRlZF9wbXUodm9pZCkKQEAgLTUzNyw5ICs1MzYsOSBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBfX2luaXQgaW5pdF9od19wZXJmX2NvdW50ZXJzKHZvaWQpCit2b2lkIF9faW5pdCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpCiB7Ci0JcHJfaW5mbygiUGVyZm9ybWFuY2UgY291bnRlcnM6ICIpOworCXByX2luZm8oIlBlcmZvcm1hbmNlIGV2ZW50czogIik7CiAKIAlpZiAoIXN1cHBvcnRlZF9wbXUoKSkgewogCQlwcl9jb250KCJObyBzdXBwb3J0IGZvciBQTVUgdHlwZSAnJXMnXG4iLCBzcGFyY19wbXVfdHlwZSk7CkBAIC01NDgsMTAgKzU0NywxMCBAQAogCiAJcHJfY29udCgiU3VwcG9ydGVkIFBNVSB0eXBlIGlzICclcydcbiIsIHNwYXJjX3BtdV90eXBlKTsKIAotCS8qIEFsbCBzcGFyYzY0IFBNVXMgY3VycmVudGx5IGhhdmUgMiBjb3VudGVycy4gIEJ1dCB0aGlzIHNpbXBsZQotCSAqIGRyaXZlciBvbmx5IHN1cHBvcnRzIG9uZSBhY3RpdmUgY291bnRlciBhdCBhIHRpbWUuCisJLyogQWxsIHNwYXJjNjQgUE1VcyBjdXJyZW50bHkgaGF2ZSAyIGV2ZW50cy4gIEJ1dCB0aGlzIHNpbXBsZQorCSAqIGRyaXZlciBvbmx5IHN1cHBvcnRzIG9uZSBhY3RpdmUgZXZlbnQgYXQgYSB0aW1lLgogCSAqLwotCXBlcmZfbWF4X2NvdW50ZXJzID0gMTsKKwlwZXJmX21heF9ldmVudHMgPSAxOwogCi0JcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZwZXJmX2NvdW50ZXJfbm1pX25vdGlmaWVyKTsKKwlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnBlcmZfZXZlbnRfbm1pX25vdGlmaWVyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUwppbmRleCAwNDE4MTU3N2MuLjBmMTY1OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKQEAgLTgyLDUgKzgyLDUgQEAKIC8qMzEwKi8JLmxvbmcgc3lzX3V0aW1lbnNhdCwgc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBzeXNfZmFsbG9jYXRlCiAvKjMxNSovCS5sb25nIHN5c190aW1lcmZkX3NldHRpbWUsIHN5c190aW1lcmZkX2dldHRpbWUsIHN5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLmxvbmcgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBzeXNfcHJlYWR2Ci0vKjMyNSovCS5sb25nIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorLyozMjUqLwkubG9uZyBzeXNfcHdyaXRldiwgc3lzX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcGVyZl9ldmVudF9vcGVuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwppbmRleCA5MWIwNmI3Li4wMDk4MjVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCkBAIC04Myw3ICs4Myw3IEBACiAvKjMxMCovCS53b3JkIGNvbXBhdF9zeXNfdXRpbWVuc2F0LCBjb21wYXRfc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBjb21wYXRfc3lzX2ZhbGxvY2F0ZQogCS53b3JkIGNvbXBhdF9zeXNfdGltZXJmZF9zZXR0aW1lLCBjb21wYXRfc3lzX3RpbWVyZmRfZ2V0dGltZSwgY29tcGF0X3N5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLndvcmQgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBjb21wYXRfc3lzX3ByZWFkdgotCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLndvcmQgY29tcGF0X3N5c19wd3JpdGV2LCBjb21wYXRfc3lzX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcGVyZl9ldmVudF9vcGVuCiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKQEAgLTE1OCw0ICsxNTgsNCBAQAogLyozMTAqLwkud29yZCBzeXNfdXRpbWVuc2F0LCBzeXNfc2lnbmFsZmQsIHN5c190aW1lcmZkX2NyZWF0ZSwgc3lzX2V2ZW50ZmQsIHN5c19mYWxsb2NhdGUKIAkud29yZCBzeXNfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lLCBzeXNfc2lnbmFsZmQ0LCBzeXNfZXZlbnRmZDIsIHN5c19lcG9sbF9jcmVhdGUxCiAvKjMyMCovCS53b3JkIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgc3lzX3ByZWFkdgotCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2V2ZW50X29wZW4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMKaW5kZXggNTQxMTRhZC4uZGM3YzNiMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCQkJcmVzZXJ2ZWRwYWdlcysrOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglZGsga2VybmVsIGNvZGUsICVkayByZXNlcnZlZCwgJWRrIGRhdGEsICVkayBpbml0LCAlbGRrIGhpZ2htZW0pXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKIAkgICAgICAgY29kZXBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgcmVzZXJ2ZWRwYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggZjExNDgxMy4uYTc0MjQ1YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTUzMyw3ICs1MzMsNyBAQAogCQkgICAgIGNoYXIgKiplcnJvcl9vdXQpCiB7CiAJY2hhciAqZW5kOwotCWludCBuLCBlcnIgPSAtRUlOVkFMOzsKKwlpbnQgbiwgZXJyID0gLUVJTlZBTDsKIAogCW4gPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmQsIDApOwogCWlmIChlbmQgPT0gc3RyKSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IDhmMDVkNGQuLjYzNWQxNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogI2RlZmluZSBNQVhfREVWICgxNikKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB1YmRfYmxvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHViZF9ibG9wcyA9IHsKICAgICAgICAgLm93bmVyCQk9IFRISVNfTU9EVUxFLAogICAgICAgICAub3BlbgkJPSB1YmRfb3BlbiwKICAgICAgICAgLnJlbGVhc2UJPSB1YmRfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMzEzZWJiOC4uZmIzYzA1YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEsMjUgKzEgQEAKLS8qIChjKSAyMDA0IGN3QGYwMGYub3JnLCBHUEx2MiBibGFoIGJsYWggKi8KLQotI2lmbmRlZiBfX0FTTV9VTV9IQVJESVJRX0gKLSNkZWZpbmUgX19BU01fVU1fSEFSRElSUV9ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLS8qIE5PVEU6IFdoZW4gU01QIHdvcmtzIGFnYWluIHdlIG1pZ2h0IHdhbnQgdG8gbWFrZSB0aGlzCi0gKiBfX19fY2FjaGVsaW5lX2FsaWduZWQgb3IgbWF5YmUgdXNlIHBlcl9jcHUgc3RhdGU/IC0tY3cgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgotCi0vKiBBcyB0aGlzIHdvdWxkIGJlIHZlcnkgc3RyYW5nZSBmb3IgVU1MIHRvIGdldCB3ZSBCVUcoKSBhZnRlciB0aGUKLSAqIHByaW50ay4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50ayhLRVJOX0VSUiAidW5leHBlY3RlZCBJUlEgJTAyeFxuIiwgaXJxKTsKLQlCVUcoKTsKLX0KLQotI2VuZGlmIC8qIF9fQVNNX1VNX0hBUkRJUlFfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcHRyYWNlX3VzZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcHRyYWNlX3VzZXIuaAppbmRleCA0YmNlNmUwLi43ZmQ4NTM5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3B0cmFjZV91c2VyLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9wdHJhY2VfdXNlci5oCkBAIC0yOSw3ICsyOSw3IEBACiAgKiByZWNvbXBpbGF0aW9uLiBTbywgd2UgdXNlIFBUUkFDRV9PTERTRVRPUFRJT05TIGluIFVNTC4KICAqIFdlIGFsc28gd2FudCB0byBiZSBhYmxlIHRvIGJ1aWxkIHRoZSBrZXJuZWwgb24gMi40LCB3aGljaCBkb2Vzbid0CiAgKiBoYXZlIFBUUkFDRV9PTERTRVRPUFRJT05TLiBTbywgaWYgaXQgaXMgbWlzc2luZywgd2UgZGVjbGFyZQotICogUFRSQUNFX09MRFNFVE9QVElPTlMgdG8gdG8gYmUgdGhlIHNhbWUgYXMgUFRSQUNFX1NFVE9QVElPTlMuCisgKiBQVFJBQ0VfT0xEU0VUT1BUSU9OUyB0byBiZSB0aGUgc2FtZSBhcyBQVFJBQ0VfU0VUT1BUSU9OUy4KICAqCiAgKiBPbiBhcmNoaXRlY3R1cmVzLCB0aGF0IHN0YXJ0IHRvIHN1cHBvcnQgUFRSQUNFX09fVFJBQ0VTWVNHT09EIG9uCiAgKiBsaW51eCAyLjYsIFBUUkFDRV9PTERTRVRPUFRJT05TIG5ldmVyIGlzIGRlZmluZWQsIGFuZCBhbHNvIGlzbid0CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9tZW0uYyBiL2FyY2gvdW0va2VybmVsL21lbS5jCmluZGV4IDYxZDdlNjEuLmE1ZDVlNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL21lbS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJbnVtX3BoeXNwYWdlcyA9IHRvdGFscmFtX3BhZ2VzOwogCW1heF9wZm4gPSB0b3RhbHJhbV9wYWdlczsKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsgYXZhaWxhYmxlXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSk7CisJICAgICAgIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCkpOwogCWttYWxsb2Nfb2sgPSAxOwogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL21tdS5jCmluZGV4IDBjZDlhN2EuLjhiZmQxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYwpAQCAtMzgsMTAgKzM4LDEwIEBACiAJKnB0ZSA9IHB0ZV9ta3JlYWQoKnB0ZSk7CiAJcmV0dXJuIDA7CiAKLSBvdXRfcG1kOgotCXB1ZF9mcmVlKG1tLCBwdWQpOwogIG91dF9wdGU6CiAJcG1kX2ZyZWUobW0sIHBtZCk7Cisgb3V0X3BtZDoKKwlwdWRfZnJlZShtbSwgcHVkKTsKICBvdXQ6CiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jIGIvYXJjaC91bS9vcy1MaW51eC9oZWxwZXIuYwppbmRleCAzMDg2MGI4Li5iNmIxMDk2IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2hlbHBlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvaGVscGVyLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlICJvcy5oIgogI2luY2x1ZGUgInVtX21hbGxvYy5oIgogI2luY2x1ZGUgInVzZXIuaCIKLSNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KIAogc3RydWN0IGhlbHBlcl9kYXRhIHsKIAl2b2lkICgqcHJlX2V4ZWMpKHZvaWQqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDUxYzU5MDEuLjkzNjk4NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjQsNyArMjQsNyBAQAogCXNlbGVjdCBIQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKLQlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTIGlmICghTTM4NiAmJiAhTTQ4NikKKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUyBpZiAoIU0zODYgJiYgIU00ODYpCiAJc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UCiAJc2VsZWN0IEhBVkVfS1BST0JFUwogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgpAQCAtMTIwNCw2ICsxMjA0LDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTlVNQSAmJiBYODZfMzIKIAorY29uZmlnIEFSQ0hfUFJPQ19LQ09SRV9URVhUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBST0NfS0NPUkUKKwogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfNjQKQEAgLTE2NjIsNiArMTY2Niw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9hY3BpL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zZmkvS2NvbmZpZyIKKwogY29uZmlnIFg4Nl9BUE1fQk9PVAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTE4NTcsNyArMTg2Myw3IEBACiAKIGNvbmZpZyBQQ0lfTU1DT05GSUcKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfMzIgJiYgUENJICYmIEFDUEkgJiYgKFBDSV9HT01NQ09ORklHIHx8IFBDSV9HT0FOWSkKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kgJiYgKEFDUEkgfHwgU0ZJKSAmJiAoUENJX0dPTU1DT05GSUcgfHwgUENJX0dPQU5ZKQogCiBjb25maWcgUENJX09MUEMKIAlkZWZfYm9vbCB5CkBAIC0xODk1LDcgKzE5MDEsNyBAQAogY29uZmlnIERNQVJfQlJPS0VOX0dGWF9XQQogCWRlZl9ib29sIG4KIAlwcm9tcHQgIldvcmthcm91bmQgYnJva2VuIGdyYXBoaWNzIGRyaXZlcnMgKGdvaW5nIGF3YXkgc29vbikiCi0JZGVwZW5kcyBvbiBETUFSCisJZGVwZW5kcyBvbiBETUFSICYmIEJST0tFTgogCS0tLWhlbHAtLS0KIAkgIEN1cnJlbnQgR3JhcGhpY3MgZHJpdmVycyB0ZW5kIHRvIHVzZSBwaHlzaWNhbCBhZGRyZXNzCiAJICBmb3IgRE1BIGFuZCBhdm9pZCB1c2luZyBETUEgQVBJcy4gU2V0dGluZyB0aGlzIGNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggYmEzMzFiZi4uNzQ2MTljNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC04MzEsNSArODMxLDUgQEAKIAkucXVhZCBjb21wYXRfc3lzX3ByZWFkdgogCS5xdWFkIGNvbXBhdF9zeXNfcHdyaXRldgogCS5xdWFkIGNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogMzM1ICovCi0JLnF1YWQgc3lzX3BlcmZfY291bnRlcl9vcGVuCisJLnF1YWQgc3lzX3BlcmZfZXZlbnRfb3BlbgogaWEzMl9zeXNjYWxsX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAyMGQxNDY1Li40NTE4ZGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC0xNDQsNyArMTQ0LDYgQEAKIAogI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCiAKLSNkZWZpbmUgYWNwaV9kaXNhYmxlZCAxCiAjZGVmaW5lIGFjcGlfbGFwaWMgMAogI2RlZmluZSBhY3BpX2lvYXBpYyAwCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ub2lycV9zZXQodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggYzZkMjFiMS4uNDc0ZDgwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtNjYsNiArNjYsMTkgQEAKIH0KIAogLyoKKyAqIFdpdGggODI0ODlEWCB3ZSBjYW4ndCByZWx5IG9uIGFwaWMgZmVhdHVyZSBiaXQKKyAqIHJldHJpZXZlZCB2aWEgY3B1aWQgYnV0IHN0aWxsIGhhdmUgdG8gZGVhbCB3aXRoCisgKiBzdWNoIGFuIGFwaWMgY2hpcCBzbyB3ZSBhc3N1bWUgdGhhdCBTTVAgY29uZmlndXJhdGlvbgorICogaXMgZm91bmQgZnJvbSBNUCB0YWJsZSAoNjRiaXQgY2FzZSB1c2VzIEFDUEkgbW9zdGx5CisgKiB3aGljaCBzZXQgc21wIHByZXNlbmNlIGZsYWcgYXMgd2VsbCBzbyB3ZSBhcmUgc2FmZQorICogdG8gdXNlIHRoaXMgaGVscGVyIHRvbykuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhcGljX2Zyb21fc21wX2NvbmZpZyh2b2lkKQoreworCXJldHVybiBzbXBfZm91bmRfY29uZmlnICYmICFkaXNhYmxlX2FwaWM7Cit9CisKKy8qCiAgKiBCYXNpYyBmdW5jdGlvbnMgYWNjZXNzaW5nIEFQSUNzLgogICovCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKaW5kZXggNWUzZjIwNC4uZjU2OTNjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaApAQCAtNDksNyArNDksNyBAQAogQlVJTERfSU5URVJSVVBUKGVycm9yX2ludGVycnVwdCxFUlJPUl9BUElDX1ZFQ1RPUikKIEJVSUxEX0lOVEVSUlVQVChzcHVyaW91c19pbnRlcnJ1cHQsU1BVUklPVVNfQVBJQ19WRUNUT1IpCiAKLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogQlVJTERfSU5URVJSVVBUKHBlcmZfcGVuZGluZ19pbnRlcnJ1cHQsIExPQ0FMX1BFTkRJTkdfVkVDVE9SKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oCnJlbmFtZSB0byBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggZTdiN2M5My4uYWQ3Y2UzZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0xLDggKzEsOCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfQVNNX1g4Nl9QRVJGX0NPVU5URVJfSAorI2lmbmRlZiBfQVNNX1g4Nl9QRVJGX0VWRU5UX0gKKyNkZWZpbmUgX0FTTV9YODZfUEVSRl9FVkVOVF9ICiAKIC8qCi0gKiBQZXJmb3JtYW5jZSBjb3VudGVyIGh3IGRldGFpbHM6CisgKiBQZXJmb3JtYW5jZSBldmVudCBodyBkZXRhaWxzOgogICovCiAKICNkZWZpbmUgWDg2X1BNQ19NQVhfR0VORVJJQwkJCQkJOApAQCAtNDMsNyArNDMsNyBAQAogdW5pb24gY3B1aWQxMF9lYXggewogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGludCB2ZXJzaW9uX2lkOjg7Ci0JCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM6ODsKKwkJdW5zaWduZWQgaW50IG51bV9ldmVudHM6ODsKIAkJdW5zaWduZWQgaW50IGJpdF93aWR0aDo4OwogCQl1bnNpZ25lZCBpbnQgbWFza19sZW5ndGg6ODsKIAl9IHNwbGl0OwpAQCAtNTIsNyArNTIsNyBAQAogCiB1bmlvbiBjcHVpZDEwX2VkeCB7CiAJc3RydWN0IHsKLQkJdW5zaWduZWQgaW50IG51bV9jb3VudGVyc19maXhlZDo0OworCQl1bnNpZ25lZCBpbnQgbnVtX2V2ZW50c19maXhlZDo0OwogCQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6Mjg7CiAJfSBzcGxpdDsKIAl1bnNpZ25lZCBpbnQgZnVsbDsKQEAgLTYwLDcgKzYwLDcgQEAKIAogCiAvKgotICogRml4ZWQtcHVycG9zZSBwZXJmb3JtYW5jZSBjb3VudGVyczoKKyAqIEZpeGVkLXB1cnBvc2UgcGVyZm9ybWFuY2UgZXZlbnRzOgogICovCiAKIC8qCkBAIC04NywyMiArODcsMjIgQEAKIC8qCiAgKiBXZSBtb2RlbCBCVFMgdHJhY2luZyBhcyBhbm90aGVyIGZpeGVkLW1vZGUgUE1DLgogICoKLSAqIFdlIGNob29zZSBhIHZhbHVlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZpeGVkIGNvdW50ZXIgcmFuZ2UsIHNpbmNlIGxvd2VyCi0gKiB2YWx1ZXMgYXJlIHVzZWQgYnkgYWN0dWFsIGZpeGVkIGNvdW50ZXJzIGFuZCBoaWdoZXIgdmFsdWVzIGFyZSB1c2VkCisgKiBXZSBjaG9vc2UgYSB2YWx1ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBmaXhlZCBldmVudCByYW5nZSwgc2luY2UgbG93ZXIKKyAqIHZhbHVlcyBhcmUgdXNlZCBieSBhY3R1YWwgZml4ZWQgZXZlbnRzIGFuZCBoaWdoZXIgdmFsdWVzIGFyZSB1c2VkCiAgKiB0byBpbmRpY2F0ZSBvdGhlciBvdmVyZmxvdyBjb25kaXRpb25zIGluIHRoZSBQRVJGX0dMT0JBTF9TVEFUVVMgbXNyLgogICovCiAjZGVmaW5lIFg4Nl9QTUNfSURYX0ZJWEVEX0JUUwkJCQkoWDg2X1BNQ19JRFhfRklYRUQgKyAxNikKIAogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLWV4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcnNfbGFwaWNfaW5pdCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKK2V4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50c19sYXBpY19pbml0KHZvaWQpOwogCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JTkRFWF9PRkZTRVQJCQkwCisjZGVmaW5lIFBFUkZfRVZFTlRfSU5ERVhfT0ZGU0VUCQkJMAogCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyc19sYXBpY19pbml0KHZvaWQpCXsgfQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkJCXsgfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRzX2xhcGljX2luaXQodm9pZCkJeyB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9BU01fWDg2X1BFUkZfQ09VTlRFUl9IICovCisjZW5kaWYgLyogX0FTTV9YODZfUEVSRl9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ18zMi5oCmluZGV4IGM4NmY0NTIuLmFlOTA3ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ18zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ18zMi5oCkBAIC02NSw3ICs2NSw2IEBACiAJY2FzZSA0OgogCQkqKGludCAqKXRvID0gKihpbnQgKilmcm9tOwogCQlyZXR1cm4gdG87Ci0KIAljYXNlIDM6CiAJCSooc2hvcnQgKil0byA9ICooc2hvcnQgKilmcm9tOwogCQkqKChjaGFyICopdG8gKyAyKSA9ICooKGNoYXIgKilmcm9tICsgMik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggZDgyZjM5Yi4uOGQzM2JjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBBY2Nlc3MgdG8gdXNlciBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTE2LDEzICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKy8qCisgKiBPbmx5IHRoZSBsb3cgMzIgYml0cyBvZiBvcmlnX2F4IGFyZSBtZWFuaW5nZnVsLCBzbyB3ZSByZXR1cm4gaW50LgorICogVGhpcyBpbXBvcnRhbnRseSBpZ25vcmVzIHRoZSBoaWdoIGJpdHMgb24gNjQtYml0LCBzbyBjb21wYXJpc29ucworICogc2lnbi1leHRlbmQgdGhlIGxvdyAzMiBiaXRzLgorICovCitzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCS8qCi0JICogV2UgYWx3YXlzIHNpZ24tZXh0ZW5kIGEgLTEgdmFsdWUgYmVpbmcgc2V0IGhlcmUsCi0JICogc28gdGhpcyBpcyBhbHdheXMgZWl0aGVyIC0xTCBvciBhIHN5c2NhbGwgbnVtYmVyLgotCSAqLwogCXJldHVybiByZWdzLT5vcmlnX2F4OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKaW5kZXggNWUwNjI1OS4uNjMyZmI0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaApAQCAtMzMsNyArMzMsNyBAQAogICogQ29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuICBDYWxsZXIgbXVzdCBjaGVjawogICogdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKiBUaGUgY2FsbGVyIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSBoZSBwaW5zIHRoZSB1c2VyIHNwYWNlIGFkZHJlc3MKLSAqIHNvIHRoYXQgdGhlIHdlIGRvbid0IHJlc3VsdCBpbiBwYWdlIGZhdWx0IGFuZCBzbGVlcC4KKyAqIHNvIHRoYXQgd2UgZG9uJ3QgcmVzdWx0IGluIHBhZ2UgZmF1bHQgYW5kIHNsZWVwLgogICoKICAqIEhlcmUgd2Ugc3BlY2lhbC1jYXNlIDEsIDIgYW5kIDQtYnl0ZSBjb3B5XypfdXNlciBpbnZvY2F0aW9ucy4gIE9uIGEgZmF1bHQKICAqIHdlIHJldHVybiB0aGUgaW5pdGlhbCByZXF1ZXN0IHNpemUgKDEsIDIgb3IgNCksIGFzIGNvcHlfKl91c2VyIHNob3VsZCBkby4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKaW5kZXggOGRlYWFkYS4uNmZiM2MyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKQEAgLTM0MSw3ICszNDEsNyBAQAogI2RlZmluZSBfX05SX3ByZWFkdgkJMzMzCiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzM0CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzM1Ci0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JMzM2CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzNgogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IGI5ZjNjNjAuLjhkM2FkMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02NTksOCArNjU5LDggQEAKIF9fU1lTQ0FMTChfX05SX3B3cml0ZXYsIHN5c19wd3JpdGV2KQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCQkJMjk3CiBfX1NZU0NBTEwoX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3J0X3Rnc2lncXVldWVpbmZvKQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCQkJMjk4Ci1fX1NZU0NBTEwoX19OUl9wZXJmX2NvdW50ZXJfb3Blbiwgc3lzX3BlcmZfY291bnRlcl9vcGVuKQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJCTI5OAorX19TWVNDQUxMKF9fTlJfcGVyZl9ldmVudF9vcGVuLCBzeXNfcGVyZl9ldmVudF9vcGVuKQogCiAjaWZuZGVmIF9fTk9fU1RVQlMKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggNzdhNjg1MC4uMDRlYjZjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgpAQCAtMjU4LDEzICsyNTksMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9nbG9iYWxfbW1yMzIoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCQkgdW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JKnV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKHBub2RlLCBvZmZzZXQpID0gdmFsOworCXdyaXRlcSh2YWwsIHV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKHBub2RlLCBvZmZzZXQpKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X3JlYWRfZ2xvYmFsX21tcjMyKGludCBwbm9kZSwKIAkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQlyZXR1cm4gKnV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKHBub2RlLCBvZmZzZXQpOworCXJldHVybiByZWFkcSh1dl9nbG9iYWxfbW1yMzJfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSk7CiB9CiAKIC8qCkBAIC0yODEsMTMgKzI4MiwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2dsb2JhbF9tbXI2NChpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCXVuc2lnbmVkIGxvbmcgdmFsKQogewotCSp1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSA9IHZhbDsKKwl3cml0ZXEodmFsLCB1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9yZWFkX2dsb2JhbF9tbXI2NChpbnQgcG5vZGUsCiAJCQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0JcmV0dXJuICp1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KTsKKwlyZXR1cm4gcmVhZHEodXZfZ2xvYmFsX21tcjY0X2FkZHJlc3MocG5vZGUsIG9mZnNldCkpOwogfQogCiAvKgpAQCAtMzAxLDIyICszMDIsMjIgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X3JlYWRfbG9jYWxfbW1yKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXJldHVybiAqdXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KTsKKwlyZXR1cm4gcmVhZHEodXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9sb2NhbF9tbXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgdmFsKQogewotCSp1dl9sb2NhbF9tbXJfYWRkcmVzcyhvZmZzZXQpID0gdmFsOworCXdyaXRlcSh2YWwsIHV2X2xvY2FsX21tcl9hZGRyZXNzKG9mZnNldCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdXZfcmVhZF9sb2NhbF9tbXI4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXJldHVybiAqKCh1bnNpZ25lZCBjaGFyICopdXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSk7CisJcmV0dXJuIHJlYWRiKHV2X2xvY2FsX21tcl9hZGRyZXNzKG9mZnNldCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfbG9jYWxfbW1yOCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgY2hhciB2YWwpCiB7Ci0JKigodW5zaWduZWQgY2hhciAqKXV2X2xvY2FsX21tcl9hZGRyZXNzKG9mZnNldCkpID0gdmFsOworCXdyaXRlYih2YWwsIHV2X2xvY2FsX21tcl9hZGRyZXNzKG9mZnNldCkpOwogfQogCiAvKgpAQCAtNDIyLDcgKzQyMyw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAotCQkJKChhcGljaWQgJiAweDNmKSA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkJCSgoYXBpY2lkKSA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKIAkJCSh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNGJhNDE5Yi4uZDhlNWQwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtNTYsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwogb2JqLXkJCQkJKz0gY3B1Lwogb2JqLXkJCQkJKz0gYWNwaS8KK29iai0kKENPTkZJR19TRkkpCQkrPSBzZmkubwogb2JqLXkJCQkJKz0gcmVib290Lm8KIG9iai0kKENPTkZJR19NQ0EpCQkrPSBtY2FfMzIubwogb2JqLSQoQ09ORklHX1g4Nl9NU1IpCQkrPSBtc3IubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IGEzNDYwMWYuLjg5NGFhOTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqCU1pa2FlbCBQZXR0ZXJzc29uCToJUE0gY29udmVydGVkIHRvIGRyaXZlciBtb2RlbC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+CkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxhc20vcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtNjIsNyArNjIsNyBAQAogLyoKICAqIFRoZSBoaWdoZXN0IEFQSUMgSUQgc2VlbiBkdXJpbmcgZW51bWVyYXRpb24uCiAgKgotICogVGhpcyBkZXRlcm1pbmVzIHRoZSBtZXNzYWdpbmcgcHJvdG9jb2wgd2UgY2FuIHVzZTogaWYgYWxsIEFQSUMgSURzCisgKiBPbiBBTUQsIHRoaXMgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHdlIGNhbiB1c2U6IGlmIGFsbCBBUElDIElEcwogICogYXJlIGluIHRoZSAwIC4uLiA3IHJhbmdlLCB0aGVuIHdlIGNhbiB1c2UgbG9naWNhbCBhZGRyZXNzaW5nIHdoaWNoCiAgKiBoYXMgc29tZSBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzIChiZXR0ZXIgYnJvYWRjYXN0aW5nKS4KICAqCkBAIC05NzksNyArOTc5LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFjcHVfaGFzX2FwaWMpCisJaWYgKCFjcHVfaGFzX2FwaWMgJiYgIWFwaWNfZnJvbV9zbXBfY29uZmlnKCkpCiAJCXJldHVybjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTExODksNyArMTE4OSw3IEBACiAJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwogCX0KICNlbmRpZgotCXBlcmZfY291bnRlcnNfbGFwaWNfaW5pdCgpOworCXBlcmZfZXZlbnRzX2xhcGljX2luaXQoKTsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCkBAIC0xMTk3LDggKzExOTcsNyBAQAogCSAqIERvdWJsZS1jaGVjayB3aGV0aGVyIHRoaXMgQVBJQyBpcyByZWFsbHkgcmVnaXN0ZXJlZC4KIAkgKiBUaGlzIGlzIG1lYW5pbmdsZXNzIGluIGNsdXN0ZXJlZCBhcGljIG1vZGUsIHNvIHdlIHNraXAgaXQuCiAJICovCi0JaWYgKCFhcGljLT5hcGljX2lkX3JlZ2lzdGVyZWQoKSkKLQkJQlVHKCk7CisJQlVHX09OKCFhcGljLT5hcGljX2lkX3JlZ2lzdGVyZWQoKSk7CiAKIAkvKgogCSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCkBAIC0xOTE3LDI0ICsxOTE2LDE0IEBACiAJCW1heF9waHlzaWNhbF9hcGljaWQgPSBhcGljaWQ7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBXb3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBiaWdzbXAgd2hlbiBDT05GSUdfSE9UUExVR19DUFU9eQotCSAqIGJ1dCB3ZSBuZWVkIHRvIHdvcmsgb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2UgU01QX1NVU1BFTkQgZXRjCi0JICogYmVmb3JlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBzb21lIGNvbmZ1c2lvbi4KLQkgKiBpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCBudW1fcHJvY2Vzc29ycyA+IDgpCi0JICogICAgICAgLSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0JICovCi0JaWYgKG1heF9waHlzaWNhbF9hcGljaWQgPj0gOCkgewotCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKLQkJCQlkZWZfdG9fYmlnc21wID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJaWYgKG51bV9wcm9jZXNzb3JzID4gOCkKIAkJCWRlZl90b19iaWdzbXAgPSAxOwotCQl9CisJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpCisJCQlkZWZfdG9fYmlnc21wID0gMTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDgwOWUxY2YuLjY0OTcwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTE4NzQsNyArMTg3NCw3IEBACiAJcHJpbnRfUElDKCk7CiAKIAkvKiBkb24ndCBwcmludCBvdXQgaWYgYXBpYyBpcyBub3QgdGhlcmUgKi8KLQlpZiAoIWNwdV9oYXNfYXBpYyB8fCBkaXNhYmxlX2FwaWMpCisJaWYgKCFjcHVfaGFzX2FwaWMgJiYgIWFwaWNfZnJvbV9zbXBfY29uZmlnKCkpCiAJCXJldHVybiAwOwogCiAJcHJpbnRfYWxsX2xvY2FsX0FQSUNzKCk7CkBAIC0xOTk5LDcgKzE5OTksNyBAQAogCS8qCiAJICogVXNlIHZpcnR1YWwgd2lyZSBBIG1vZGUgd2hlbiBpbnRlcnJ1cHQgcmVtYXBwaW5nIGlzIGVuYWJsZWQuCiAJICovCi0JaWYgKGNwdV9oYXNfYXBpYykKKwlpZiAoY3B1X2hhc19hcGljIHx8IGFwaWNfZnJvbV9zbXBfY29uZmlnKCkpCiAJCWRpc2Nvbm5lY3RfYnNwX0FQSUMoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQgJiYKIAkJCQlpb2FwaWNfaTgyNTkucGluICE9IC0xKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCmluZGV4IDY1ZWRjMTguLmM0Y2JkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYwpAQCAtNjQsMTYgKzY0LDIzIEBACiAJCQlhcGljID0gJmFwaWNfeDJhcGljX3BoeXM7CiAJCWVsc2UKIAkJCWFwaWMgPSAmYXBpY194MmFwaWNfY2x1c3RlcjsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXNcbiIsIGFwaWMtPm5hbWUpOwogCX0KICNlbmRpZgogCiAJaWYgKGFwaWMgPT0gJmFwaWNfZmxhdCkgewotCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KQotCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OwotCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlc1xuIiwgYXBpYy0+bmFtZSk7CisJCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJCWlmIChudW1fcHJvY2Vzc29ycyA+IDgpCisJCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OworCQkJYnJlYWs7CisJCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KQorCQkJCWFwaWMgPSAmYXBpY19waHlzZmxhdDsKKwkJfQogCX0KIAorCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzXG4iLCBhcGljLT5uYW1lKTsKKwogCWlmIChpc192c21wX2JveCgpKSB7CiAJCS8qIG5lZWQgdG8gdXBkYXRlIHBoeXNfcGtnX2lkICovCiAJCWFwaWMtPnBoeXNfcGtnX2lkID0gYXBpY2lkX3BoeXNfcGtnX2lkOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggNjAxMTU5My4uZjVmNTg4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0zODksNiArMzg5LDE2IEBACiAJCW1hcF9oaWdoKCJHUlUiLCBncnUucy5iYXNlLCBzaGlmdCwgbWF4X3Bub2RlLCBtYXBfd2IpOwogfQogCitzdGF0aWMgX19pbml0IHZvaWQgbWFwX21tcl9oaWdoKGludCBtYXhfcG5vZGUpCit7CisJdW5pb24gdXZoX3JoX2dhbV9tbXJfb3ZlcmxheV9jb25maWdfbW1yX3UgbW1yOworCWludCBzaGlmdCA9IFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX1NIRlQ7CisKKwltbXIudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUik7CisJaWYgKG1tci5zLmVuYWJsZSkKKwkJbWFwX2hpZ2goIk1NUiIsIG1tci5zLmJhc2UsIHNoaWZ0LCBtYXhfcG5vZGUsIG1hcF91Yyk7Cit9CisKIHN0YXRpYyBfX2luaXQgdm9pZCBtYXBfbW1pb2hfaGlnaChpbnQgbWF4X3Bub2RlKQogewogCXVuaW9uIHV2aF9yaF9nYW1fbW1pb2hfb3ZlcmxheV9jb25maWdfbW1yX3UgbW1pb2g7CkBAIC02NDMsNiArNjUzLDcgQEAKIAl9CiAKIAltYXBfZ3J1X2hpZ2gobWF4X3Bub2RlKTsKKwltYXBfbW1yX2hpZ2gobWF4X3Bub2RlKTsKIAltYXBfbW1pb2hfaGlnaChtYXhfcG5vZGUpOwogCiAJdXZfY3B1X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IDhkZDMwNjMuLjY4NTM3ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMjcsNyArMjcsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9TVVBfVFJBTlNNRVRBXzMyKQkrPSB0cmFuc21ldGEubwogb2JqLSQoQ09ORklHX0NQVV9TVVBfVU1DXzMyKQkJKz0gdW1jLm8KIAotb2JqLSQoQ09ORklHX1BFUkZfQ09VTlRFUlMpCQkrPSBwZXJmX2NvdW50ZXIubworb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkJKz0gcGVyZl9ldmVudC5vCiAKIG9iai0kKENPTkZJR19YODZfTUNFKQkJCSs9IG1jaGVjay8KIG9iai0kKENPTkZJR19NVFJSKQkJCSs9IG10cnIvCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCBmMzJmYTcxLi5jOTEwYTcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCSAqIGFwcHJvdmVkIEF0aGxvbgogCSAqLwogCVdBUk5fT05DRSgxLCAiV0FSTklORzogVGhpcyBjb21iaW5hdGlvbiBvZiBBTUQiCi0JCSJwcm9jZXNzb3JzIGlzIG5vdCBzdWl0YWJsZSBmb3IgU01QLlxuIik7CisJCSIgcHJvY2Vzc29ycyBpcyBub3Qgc3VpdGFibGUgZm9yIFNNUC5cbiIpOwogCWlmICghdGVzdF90YWludChUQUlOVF9VTlNBRkVfU01QKSkKIAkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCAyMDU1ZmMyLi5jYzI1YzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL3N0YWNrcHJvdGVjdG9yLmg+Ci0jaW5jbHVkZSA8YXNtL3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGFzbS9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vcGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vdXYvdXYuaD4KQEAgLTg3MCw3ICs4NjksNyBAQAogI2Vsc2UKIAl2Z2V0Y3B1X3NldF9tb2RlKCk7CiAjZW5kaWYKLQlpbml0X2h3X3BlcmZfY291bnRlcnMoKTsKKwlpbml0X2h3X3BlcmZfZXZlbnRzKCk7CiB9CiAKIHZvaWQgX19jcHVpbml0IGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDdiYjY3NmMuLjdkNWMzYjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC03Miw4ICs3Miw2IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYXBlcmZtcGVyZiwgb2xkX3BlcmYpOwogCi1ERUZJTkVfVFJBQ0UocG93ZXJfbWFyayk7Ci0KIC8qIGFjcGlfcGVyZl9kYXRhIGlzIGEgcG9pbnRlciB0byBwZXJjcHUgZGF0YS4gKi8KIHN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKmFjcGlfcGVyZl9kYXRhOwogCkBAIC0zMzIsNyArMzMwLDYgQEAKIAl1bnNpZ25lZCBpbnQgbmV4dF9wZXJmX3N0YXRlID0gMDsgLyogSW5kZXggaW50byBwZXJmIHRhYmxlICovCiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IHBvd2VyX3RyYWNlIGl0OwogCiAJZHByaW50aygiYWNwaV9jcHVmcmVxX3RhcmdldCAlZCAoJWQpXG4iLCB0YXJnZXRfZnJlcSwgcG9saWN5LT5jcHUpOwogCkBAIC0zNjQsNyArMzYxLDcgQEAKIAkJfQogCX0KIAotCXRyYWNlX3Bvd2VyX21hcmsoJml0LCBQT1dFUl9QU1RBVEUsIG5leHRfcGVyZl9zdGF0ZSk7CisJdHJhY2VfcG93ZXJfZnJlcXVlbmN5KFBPV0VSX1BTVEFURSwgZGF0YS0+ZnJlcV90YWJsZVtuZXh0X3N0YXRlXS5mcmVxdWVuY3kpOwogCiAJc3dpdGNoIChkYXRhLT5jcHVfZmVhdHVyZSkgewogCWNhc2UgU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCmluZGV4IDhjZDUyMjQuLjgzYTNkMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKQEAgLTQ4OSw4ICs0ODksOSBAQAogCWludCBpLCBlcnIgPSAwOwogCXN0cnVjdCB0aHJlc2hvbGRfYmFuayAqYiA9IE5VTEw7CiAJY2hhciBuYW1lWzMyXTsKKyNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7Ci0KKyNlbmRpZgogCiAJc3ByaW50ZihuYW1lLCAidGhyZXNob2xkX2JhbmslaSIsIGJhbmspOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCmluZGV4IDA4YjZlYTQuLmYwNGU3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAliYXNlID0gc2ltcGxlX3N0cnRvdWxsKGxpbmUgKyA1LCAmcHRyLCAwKTsKLQlmb3IgKDsgaXNzcGFjZSgqcHRyKTsgKytwdHIpCi0JCTsKKwl3aGlsZSAoaXNzcGFjZSgqcHRyKSkKKwkJcHRyKys7CiAKIAlpZiAoc3RybmNtcChwdHIsICJzaXplPSIsIDUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNSwxNCArMTM1LDE0IEBACiAJc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsbChwdHIgKyA1LCAmcHRyLCAwKTsKIAlpZiAoKGJhc2UgJiAweGZmZikgfHwgKHNpemUgJiAweGZmZikpCiAJCXJldHVybiAtRUlOVkFMOwotCWZvciAoOyBpc3NwYWNlKCpwdHIpOyArK3B0cikKLQkJOworCXdoaWxlIChpc3NwYWNlKCpwdHIpKQorCQlwdHIrKzsKIAogCWlmIChzdHJuY21wKHB0ciwgInR5cGU9IiwgNSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXB0ciArPSA1OwotCWZvciAoOyBpc3NwYWNlKCpwdHIpOyArK3B0cikKLQkJOworCXdoaWxlIChpc3NwYWNlKCpwdHIpKQorCQlwdHIrKzsKIAogCWZvciAoaSA9IDA7IGkgPCBNVFJSX05VTV9UWVBFUzsgKytpKSB7CiAJCWlmIChzdHJjbXAocHRyLCBtdHJyX3N0cmluZ3NbaV0pKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2NvdW50ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9jb3VudGVyLmMKcmVuYW1lIHRvIGFyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IDI3MzJlMmMuLmEzYzdhZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9jb3VudGVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogUGVyZm9ybWFuY2UgY291bnRlciB4ODYgYXJjaGl0ZWN0dXJlIGNvZGUKKyAqIFBlcmZvcm1hbmNlIGV2ZW50cyB4ODYgYXJjaGl0ZWN0dXJlIGNvZGUKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgogICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCkBAIC0xMSw3ICsxMSw3IEBACiAgKiAgRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CkBAIC0yNywxOSArMjcsMTkgQEAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KIAotc3RhdGljIHU2NCBwZXJmX2NvdW50ZXJfbWFzayBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHU2NCBwZXJmX2V2ZW50X21hc2sgX19yZWFkX21vc3RseTsKIAotLyogVGhlIG1heGltYWwgbnVtYmVyIG9mIFBFQlMgY291bnRlcnM6ICovCi0jZGVmaW5lIE1BWF9QRUJTX0NPVU5URVJTCTQKKy8qIFRoZSBtYXhpbWFsIG51bWJlciBvZiBQRUJTIGV2ZW50czogKi8KKyNkZWZpbmUgTUFYX1BFQlNfRVZFTlRTCTQKIAogLyogVGhlIHNpemUgb2YgYSBCVFMgcmVjb3JkIGluIGJ5dGVzOiAqLwogI2RlZmluZSBCVFNfUkVDT1JEX1NJWkUJCTI0CiAKIC8qIFRoZSBzaXplIG9mIGEgcGVyLWNwdSBCVFMgYnVmZmVyIGluIGJ5dGVzOiAqLwotI2RlZmluZSBCVFNfQlVGRkVSX1NJWkUJCShCVFNfUkVDT1JEX1NJWkUgKiAxMDI0KQorI2RlZmluZSBCVFNfQlVGRkVSX1NJWkUJCShCVFNfUkVDT1JEX1NJWkUgKiAyMDQ4KQogCiAvKiBUaGUgQlRTIG92ZXJmbG93IHRocmVzaG9sZCBpbiBieXRlcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcjogKi8KLSNkZWZpbmUgQlRTX09WRkxfVEgJCShCVFNfUkVDT1JEX1NJWkUgKiA2NCkKKyNkZWZpbmUgQlRTX09WRkxfVEgJCShCVFNfUkVDT1JEX1NJWkUgKiAxMjgpCiAKIAogLyoKQEAgLTY1LDExICs2NSwxMSBAQAogCXU2NAlwZWJzX2luZGV4OwogCXU2NAlwZWJzX2Fic29sdXRlX21heGltdW07CiAJdTY0CXBlYnNfaW50ZXJydXB0X3RocmVzaG9sZDsKLQl1NjQJcGVic19jb3VudGVyX3Jlc2V0W01BWF9QRUJTX0NPVU5URVJTXTsKKwl1NjQJcGVic19ldmVudF9yZXNldFtNQVhfUEVCU19FVkVOVFNdOwogfTsKIAotc3RydWN0IGNwdV9od19jb3VudGVycyB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcgkqY291bnRlcnNbWDg2X1BNQ19JRFhfTUFYXTsKK3N0cnVjdCBjcHVfaHdfZXZlbnRzIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW1g4Nl9QTUNfSURYX01BWF07CiAJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKIAl1bnNpZ25lZCBsb25nCQlpbnRlcnJ1cHRzOwpAQCAtODYsMTcgKzg2LDE3IEBACiAJaW50CQkoKmhhbmRsZV9pcnEpKHN0cnVjdCBwdF9yZWdzICopOwogCXZvaWQJCSgqZGlzYWJsZV9hbGwpKHZvaWQpOwogCXZvaWQJCSgqZW5hYmxlX2FsbCkodm9pZCk7Ci0Jdm9pZAkJKCplbmFibGUpKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKiwgaW50KTsKLQl2b2lkCQkoKmRpc2FibGUpKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKiwgaW50KTsKKwl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IGh3X3BlcmZfZXZlbnQgKiwgaW50KTsKKwl2b2lkCQkoKmRpc2FibGUpKHN0cnVjdCBod19wZXJmX2V2ZW50ICosIGludCk7CiAJdW5zaWduZWQJZXZlbnRzZWw7CiAJdW5zaWduZWQJcGVyZmN0cjsKIAl1NjQJCSgqZXZlbnRfbWFwKShpbnQpOwogCXU2NAkJKCpyYXdfZXZlbnQpKHU2NCk7CiAJaW50CQltYXhfZXZlbnRzOwotCWludAkJbnVtX2NvdW50ZXJzOwotCWludAkJbnVtX2NvdW50ZXJzX2ZpeGVkOwotCWludAkJY291bnRlcl9iaXRzOwotCXU2NAkJY291bnRlcl9tYXNrOworCWludAkJbnVtX2V2ZW50czsKKwlpbnQJCW51bV9ldmVudHNfZml4ZWQ7CisJaW50CQlldmVudF9iaXRzOworCXU2NAkJZXZlbnRfbWFzazsKIAlpbnQJCWFwaWM7CiAJdTY0CQltYXhfcGVyaW9kOwogCXU2NAkJaW50ZWxfY3RybDsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHg4Nl9wbXUgeDg2X3BtdSBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19jb3VudGVycywgY3B1X2h3X2NvdW50ZXJzKSA9IHsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2V2ZW50cywgY3B1X2h3X2V2ZW50cykgPSB7CiAJLmVuYWJsZWQgPSAxLAogfTsKIApAQCAtMTI0LDM1ICsxMjQsMzUgQEAKICAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMDYyLAogfTsKIAotc3RhdGljIHU2NCBwNl9wbXVfZXZlbnRfbWFwKGludCBldmVudCkKK3N0YXRpYyB1NjQgcDZfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCiB7Ci0JcmV0dXJuIHA2X3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50XTsKKwlyZXR1cm4gcDZfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOwogfQogCiAvKgotICogQ291bnRlciBzZXR0aW5nIHRoYXQgaXMgc3BlY2lmaWVkIG5vdCB0byBjb3VudCBhbnl0aGluZy4KKyAqIEV2ZW50IHNldHRpbmcgdGhhdCBpcyBzcGVjaWZpZWQgbm90IHRvIGNvdW50IGFueXRoaW5nLgogICogV2UgdXNlIHRoaXMgdG8gZWZmZWN0aXZlbHkgZGlzYWJsZSBhIGNvdW50ZXIuCiAgKgogICogTDJfUlFTVFMgd2l0aCAwIE1FU0kgdW5pdCBtYXNrLgogICovCi0jZGVmaW5lIFA2X05PUF9DT1VOVEVSCQkJMHgwMDAwMDAyRVVMTAorI2RlZmluZSBQNl9OT1BfRVZFTlQJCQkweDAwMDAwMDJFVUxMCiAKLXN0YXRpYyB1NjQgcDZfcG11X3Jhd19ldmVudCh1NjQgZXZlbnQpCitzdGF0aWMgdTY0IHA2X3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQogewogI2RlZmluZSBQNl9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKICNkZWZpbmUgUDZfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKICNkZWZpbmUgUDZfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKICNkZWZpbmUgUDZfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAotI2RlZmluZSBQNl9FVk5UU0VMX0NPVU5URVJfTUFTSwkJMHhGRjAwMDAwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX1JFR19NQVNLCQkweEZGMDAwMDAwVUxMCiAKICNkZWZpbmUgUDZfRVZOVFNFTF9NQVNLCQkJXAogCShQNl9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCiAJIFA2X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKIAkgUDZfRVZOVFNFTF9FREdFX01BU0sgIHwJXAogCSBQNl9FVk5UU0VMX0lOVl9NQVNLICAgfAlcCi0JIFA2X0VWTlRTRUxfQ09VTlRFUl9NQVNLKQorCSBQNl9FVk5UU0VMX1JFR19NQVNLKQogCi0JcmV0dXJuIGV2ZW50ICYgUDZfRVZOVFNFTF9NQVNLOworCXJldHVybiBod19ldmVudCAmIFA2X0VWTlRTRUxfTUFTSzsKIH0KIAogCkBAIC0xNzAsMTYgKzE3MCwxNiBAQAogICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCiB9OwogCi1zdGF0aWMgdTY0IGludGVsX3BtdV9ldmVudF9tYXAoaW50IGV2ZW50KQorc3RhdGljIHU2NCBpbnRlbF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKIHsKLQlyZXR1cm4gaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRdOworCXJldHVybiBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07CiB9CiAKIC8qCi0gKiBHZW5lcmFsaXplZCBodyBjYWNoaW5nIHJlbGF0ZWQgZXZlbnQgdGFibGUsIGZpbGxlZAorICogR2VuZXJhbGl6ZWQgaHcgY2FjaGluZyByZWxhdGVkIGh3X2V2ZW50IHRhYmxlLCBmaWxsZWQKICAqIGluIG9uIGEgcGVyIG1vZGVsIGJhc2lzLiBBIHZhbHVlIG9mIDAgbWVhbnMKLSAqICdub3Qgc3VwcG9ydGVkJywgLTEgbWVhbnMgJ2V2ZW50IG1ha2VzIG5vIHNlbnNlIG9uCi0gKiB0aGlzIENQVScsIGFueSBvdGhlciB2YWx1ZSBtZWFucyB0aGUgcmF3IGV2ZW50CisgKiAnbm90IHN1cHBvcnRlZCcsIC0xIG1lYW5zICdod19ldmVudCBtYWtlcyBubyBzZW5zZSBvbgorICogdGhpcyBDUFUnLCBhbnkgb3RoZXIgdmFsdWUgbWVhbnMgdGhlIHJhdyBod19ldmVudAogICogSUQuCiAgKi8KIApAQCAtNDYzLDIyICs0NjMsMjIgQEAKICB9LAogfTsKIAotc3RhdGljIHU2NCBpbnRlbF9wbXVfcmF3X2V2ZW50KHU2NCBldmVudCkKK3N0YXRpYyB1NjQgaW50ZWxfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCiB7CiAjZGVmaW5lIENPUkVfRVZOVFNFTF9FVkVOVF9NQVNLCQkweDAwMDAwMEZGVUxMCiAjZGVmaW5lIENPUkVfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKICNkZWZpbmUgQ09SRV9FVk5UU0VMX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAogI2RlZmluZSBDT1JFX0VWTlRTRUxfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX0NPVU5URVJfTUFTSwkweEZGMDAwMDAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9SRUdfTUFTSwkweEZGMDAwMDAwVUxMCiAKICNkZWZpbmUgQ09SRV9FVk5UU0VMX01BU0sJCVwKIAkoQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCiAJIENPUkVfRVZOVFNFTF9VTklUX01BU0sgIHwJXAogCSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLICB8CVwKIAkgQ09SRV9FVk5UU0VMX0lOVl9NQVNLICB8CVwKLQkgQ09SRV9FVk5UU0VMX0NPVU5URVJfTUFTSykKKwkgQ09SRV9FVk5UU0VMX1JFR19NQVNLKQogCi0JcmV0dXJuIGV2ZW50ICYgQ09SRV9FVk5UU0VMX01BU0s7CisJcmV0dXJuIGh3X2V2ZW50ICYgQ09SRV9FVk5UU0VMX01BU0s7CiB9CiAKIHN0YXRpYyBjb25zdCB1NjQgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcwpAQCAtNTg1LDM5ICs1ODUsMzkgQEAKICAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAogfTsKIAotc3RhdGljIHU2NCBhbWRfcG11X2V2ZW50X21hcChpbnQgZXZlbnQpCitzdGF0aWMgdTY0IGFtZF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKIHsKLQlyZXR1cm4gYW1kX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50XTsKKwlyZXR1cm4gYW1kX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKIH0KIAotc3RhdGljIHU2NCBhbWRfcG11X3Jhd19ldmVudCh1NjQgZXZlbnQpCitzdGF0aWMgdTY0IGFtZF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKIHsKICNkZWZpbmUgSzdfRVZOVFNFTF9FVkVOVF9NQVNLCTB4NzAwMDAwMEZGVUxMCiAjZGVmaW5lIEs3X0VWTlRTRUxfVU5JVF9NQVNLCTB4MDAwMDBGRjAwVUxMCiAjZGVmaW5lIEs3X0VWTlRTRUxfRURHRV9NQVNLCTB4MDAwMDQwMDAwVUxMCiAjZGVmaW5lIEs3X0VWTlRTRUxfSU5WX01BU0sJMHgwMDA4MDAwMDBVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9DT1VOVEVSX01BU0sJMHgwRkYwMDAwMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9SRUdfTUFTSwkweDBGRjAwMDAwMFVMTAogCiAjZGVmaW5lIEs3X0VWTlRTRUxfTUFTSwkJCVwKIAkoSzdfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAogCSBLN19FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCiAJIEs3X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKIAkgSzdfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAotCSBLN19FVk5UU0VMX0NPVU5URVJfTUFTSykKKwkgSzdfRVZOVFNFTF9SRUdfTUFTSykKIAotCXJldHVybiBldmVudCAmIEs3X0VWTlRTRUxfTUFTSzsKKwlyZXR1cm4gaHdfZXZlbnQgJiBLN19FVk5UU0VMX01BU0s7CiB9CiAKIC8qCi0gKiBQcm9wYWdhdGUgY291bnRlciBlbGFwc2VkIHRpbWUgaW50byB0aGUgZ2VuZXJpYyBjb3VudGVyLgotICogQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgb24gdGhlIENQVSB3aGVyZSB0aGUgY291bnRlciBpcyBhY3RpdmUuCisgKiBQcm9wYWdhdGUgZXZlbnQgZWxhcHNlZCB0aW1lIGludG8gdGhlIGdlbmVyaWMgZXZlbnQuCisgKiBDYW4gb25seSBiZSBleGVjdXRlZCBvbiB0aGUgQ1BVIHdoZXJlIHRoZSBldmVudCBpcyBhY3RpdmUuCiAgKiBSZXR1cm5zIHRoZSBkZWx0YSBldmVudHMgcHJvY2Vzc2VkLgogICovCiBzdGF0aWMgdTY0Ci14ODZfcGVyZl9jb3VudGVyX3VwZGF0ZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQoreDg2X3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7Ci0JaW50IHNoaWZ0ID0gNjQgLSB4ODZfcG11LmNvdW50ZXJfYml0czsKKwlpbnQgc2hpZnQgPSA2NCAtIHg4Nl9wbXUuZXZlbnRfYml0czsKIAl1NjQgcHJldl9yYXdfY291bnQsIG5ld19yYXdfY291bnQ7CiAJczY0IGRlbHRhOwogCkBAIC02MjUsMTUgKzYyNSwxNSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogQ2FyZWZ1bDogYW4gTk1JIG1pZ2h0IG1vZGlmeSB0aGUgcHJldmlvdXMgY291bnRlciB2YWx1ZS4KKwkgKiBDYXJlZnVsOiBhbiBOTUkgbWlnaHQgbW9kaWZ5IHRoZSBwcmV2aW91cyBldmVudCB2YWx1ZS4KIAkgKgogCSAqIE91ciB0YWN0aWMgdG8gaGFuZGxlIHRoaXMgaXMgdG8gZmlyc3QgYXRvbWljYWxseSByZWFkIGFuZAogCSAqIGV4Y2hhbmdlIGEgbmV3IHJhdyBjb3VudCAtIHRoZW4gYWRkIHRoYXQgbmV3LXByZXYgZGVsdGEKLQkgKiBjb3VudCB0byB0aGUgZ2VuZXJpYyBjb3VudGVyIGF0b21pY2FsbHk6CisJICogY291bnQgdG8gdGhlIGdlbmVyaWMgZXZlbnQgYXRvbWljYWxseToKIAkgKi8KIGFnYWluOgogCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKLQlyZG1zcmwoaHdjLT5jb3VudGVyX2Jhc2UgKyBpZHgsIG5ld19yYXdfY291bnQpOworCXJkbXNybChod2MtPmV2ZW50X2Jhc2UgKyBpZHgsIG5ld19yYXdfY291bnQpOwogCiAJaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCiAJCQkJCW5ld19yYXdfY291bnQpICE9IHByZXZfcmF3X2NvdW50KQpAQCAtNjQyLDcgKzY0Miw3IEBACiAJLyoKIAkgKiBOb3cgd2UgaGF2ZSB0aGUgbmV3IHJhdyB2YWx1ZSBhbmQgaGF2ZSB1cGRhdGVkIHRoZSBwcmV2CiAJICogdGltZXN0YW1wIGFscmVhZHkuIFdlIGNhbiBub3cgY2FsY3VsYXRlIHRoZSBlbGFwc2VkIGRlbHRhCi0JICogKGNvdW50ZXItKXRpbWUgYW5kIGFkZCB0aGF0IHRvIHRoZSBnZW5lcmljIGNvdW50ZXIuCisJICogKGV2ZW50LSl0aW1lIGFuZCBhZGQgdGhhdCB0byB0aGUgZ2VuZXJpYyBldmVudC4KIAkgKgogCSAqIENhcmVmdWwsIG5vdCBhbGwgaHcgc2lnbi1leHRlbmRzIGFib3ZlIHRoZSBwaHlzaWNhbCB3aWR0aAogCSAqIG9mIHRoZSBjb3VudC4KQEAgLTY1MCwxMyArNjUwLDEzIEBACiAJZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOwogCWRlbHRhID4+PSBzaGlmdDsKIAotCWF0b21pYzY0X2FkZChkZWx0YSwgJmNvdW50ZXItPmNvdW50KTsKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCWF0b21pYzY0X3N1YihkZWx0YSwgJmh3Yy0+cGVyaW9kX2xlZnQpOwogCiAJcmV0dXJuIG5ld19yYXdfY291bnQ7CiB9CiAKLXN0YXRpYyBhdG9taWNfdCBhY3RpdmVfY291bnRlcnM7CitzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2V2ZW50czsKIHN0YXRpYyBERUZJTkVfTVVURVgocG1jX3Jlc2VydmVfbXV0ZXgpOwogCiBzdGF0aWMgYm9vbCByZXNlcnZlX3BtY19oYXJkd2FyZSh2b2lkKQpAQCAtNjY3LDEyICs2NjcsMTIgQEAKIAlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQogCQlkaXNhYmxlX2xhcGljX25taV93YXRjaGRvZygpOwogCi0JZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpKyspIHsKIAkJaWYgKCFyZXNlcnZlX3BlcmZjdHJfbm1pKHg4Nl9wbXUucGVyZmN0ciArIGkpKQogCQkJZ290byBwZXJmY3RyX2ZhaWw7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpKyspIHsKIAkJaWYgKCFyZXNlcnZlX2V2bnRzZWxfbm1pKHg4Nl9wbXUuZXZlbnRzZWwgKyBpKSkKIAkJCWdvdG8gZXZlbnRzZWxfZmFpbDsKIAl9CkBAIC02ODUsNyArNjg1LDcgQEAKIAlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCiAJCXJlbGVhc2VfZXZudHNlbF9ubWkoeDg2X3BtdS5ldmVudHNlbCArIGkpOwogCi0JaSA9IHg4Nl9wbXUubnVtX2NvdW50ZXJzOworCWkgPSB4ODZfcG11Lm51bV9ldmVudHM7CiAKIHBlcmZjdHJfZmFpbDoKIAlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCkBAIC03MDMsNyArNzAzLDcgQEAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaSsrKSB7CiAJCXJlbGVhc2VfcGVyZmN0cl9ubWkoeDg2X3BtdS5wZXJmY3RyICsgaSk7CiAJCXJlbGVhc2VfZXZudHNlbF9ubWkoeDg2X3BtdS5ldmVudHNlbCArIGkpOwogCX0KQEAgLTcyMCw3ICs3MjAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoaW50IGNwdSkKIHsKLQlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gcGVyX2NwdShjcHVfaHdfY291bnRlcnMsIGNwdSkuZHM7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IHBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KS5kczsKIAogCWlmICghZHMpCiAJCXJldHVybjsKQEAgLTczMiw3ICs3MzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmluaV9kZWJ1Z19zdG9yZV9vbl9jcHUoaW50IGNwdSkKIHsKLQlpZiAoIXBlcl9jcHUoY3B1X2h3X2NvdW50ZXJzLCBjcHUpLmRzKQorCWlmICghcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpLmRzKQogCQlyZXR1cm47CiAKIAl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9EU19BUkVBLCAwLCAwKTsKQEAgLTc1MSwxMiArNzUxLDEyIEBACiAJCWZpbmlfZGVidWdfc3RvcmVfb25fY3B1KGNwdSk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBwZXJfY3B1KGNwdV9od19jb3VudGVycywgY3B1KS5kczsKKwkJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IHBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KS5kczsKIAogCQlpZiAoIWRzKQogCQkJY29udGludWU7CiAKLQkJcGVyX2NwdShjcHVfaHdfY291bnRlcnMsIGNwdSkuZHMgPSBOVUxMOworCQlwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSkuZHMgPSBOVUxMOwogCiAJCWtmcmVlKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19idWZmZXJfYmFzZSk7CiAJCWtmcmVlKGRzKTsKQEAgLTc5Niw3ICs3OTYsNyBAQAogCQlkcy0+YnRzX2ludGVycnVwdF90aHJlc2hvbGQgPQogCQkJZHMtPmJ0c19hYnNvbHV0ZV9tYXhpbXVtIC0gQlRTX09WRkxfVEg7CiAKLQkJcGVyX2NwdShjcHVfaHdfY291bnRlcnMsIGNwdSkuZHMgPSBkczsKKwkJcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpLmRzID0gZHM7CiAJCWVyciA9IDA7CiAJfQogCkBAIC04MTIsOSArODEyLDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBod19wZXJmX2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQorc3RhdGljIHZvaWQgaHdfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmYWN0aXZlX2NvdW50ZXJzLCAmcG1jX3Jlc2VydmVfbXV0ZXgpKSB7CisJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmFjdGl2ZV9ldmVudHMsICZwbWNfcmVzZXJ2ZV9tdXRleCkpIHsKIAkJcmVsZWFzZV9wbWNfaGFyZHdhcmUoKTsKIAkJcmVsZWFzZV9idHNfaGFyZHdhcmUoKTsKIAkJbXV0ZXhfdW5sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CkBAIC04MjcsNyArODI3LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLXNldF9leHRfaHdfYXR0cihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cikKK3NldF9leHRfaHdfYXR0cihzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCXVuc2lnbmVkIGludCBjYWNoZV90eXBlLCBjYWNoZV9vcCwgY2FjaGVfcmVzdWx0OwogCXU2NCBjb25maWcsIHZhbDsKQEAgLTg4MCw3ICs4ODAsNyBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9idHModm9pZCkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7CiAKIAlpZiAoIWNwdWMtPmRzKQpAQCAtODk4LDEwICs4OTgsMTAgQEAKIC8qCiAgKiBTZXR1cCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBhdHRyX3R5cGUKICAqLwotc3RhdGljIGludCBfX2h3X3BlcmZfY291bnRlcl9pbml0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgaW50IF9faHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIgPSAmY291bnRlci0+YXR0cjsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9ICZldmVudC0+YXR0cjsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAl1NjQgY29uZmlnOwogCWludCBlcnI7CiAKQEAgLTkwOSwyMSArOTA5LDIzIEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJZXJyID0gMDsKLQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmFjdGl2ZV9jb3VudGVycykpIHsKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmFjdGl2ZV9ldmVudHMpKSB7CiAJCW11dGV4X2xvY2soJnBtY19yZXNlcnZlX211dGV4KTsKLQkJaWYgKGF0b21pY19yZWFkKCZhY3RpdmVfY291bnRlcnMpID09IDApIHsKKwkJaWYgKGF0b21pY19yZWFkKCZhY3RpdmVfZXZlbnRzKSA9PSAwKSB7CiAJCQlpZiAoIXJlc2VydmVfcG1jX2hhcmR3YXJlKCkpCiAJCQkJZXJyID0gLUVCVVNZOwogCQkJZWxzZQogCQkJCWVyciA9IHJlc2VydmVfYnRzX2hhcmR3YXJlKCk7CiAJCX0KIAkJaWYgKCFlcnIpCi0JCQlhdG9taWNfaW5jKCZhY3RpdmVfY291bnRlcnMpOworCQkJYXRvbWljX2luYygmYWN0aXZlX2V2ZW50cyk7CiAJCW11dGV4X3VubG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOwogCX0KIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisKIAkvKgogCSAqIEdlbmVyYXRlIFBNQyBJUlFzOgogCSAqIChrZWVwICdlbmFibGVkJyBiaXQgY2xlYXIgZm9yIG5vdykKQEAgLTk0NiwxNyArOTQ4LDE1IEBACiAJCS8qCiAJCSAqIElmIHdlIGhhdmUgYSBQTVUgaW5pdGlhbGl6ZWQgYnV0IG5vIEFQSUMKIAkJICogaW50ZXJydXB0cywgd2UgY2Fubm90IHNhbXBsZSBoYXJkd2FyZQotCQkgKiBjb3VudGVycyAodXNlci1zcGFjZSBoYXMgdG8gZmFsbCBiYWNrIGFuZAotCQkgKiBzYW1wbGUgdmlhIGEgaHJ0aW1lciBiYXNlZCBzb2Z0d2FyZSBjb3VudGVyKToKKwkJICogZXZlbnRzICh1c2VyLXNwYWNlIGhhcyB0byBmYWxsIGJhY2sgYW5kCisJCSAqIHNhbXBsZSB2aWEgYSBocnRpbWVyIGJhc2VkIHNvZnR3YXJlIGV2ZW50KToKIAkJICovCiAJCWlmICgheDg2X3BtdS5hcGljKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCWNvdW50ZXItPmRlc3Ryb3kgPSBod19wZXJmX2NvdW50ZXJfZGVzdHJveTsKLQogCS8qCi0JICogUmF3IGV2ZW50IHR5cGUgcHJvdmlkZSB0aGUgY29uZmlnIGluIHRoZSBldmVudCBzdHJ1Y3R1cmUKKwkgKiBSYXcgaHdfZXZlbnQgdHlwZSBwcm92aWRlIHRoZSBjb25maWcgaW4gdGhlIGh3X2V2ZW50IHN0cnVjdHVyZQogCSAqLwogCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9SQVcpIHsKIAkJaHdjLT5jb25maWcgfD0geDg2X3BtdS5yYXdfZXZlbnQoYXR0ci0+Y29uZmlnKTsKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAKIHN0YXRpYyB2b2lkIHA2X3BtdV9kaXNhYmxlX2FsbCh2b2lkKQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJdTY0IHZhbDsKIAogCWlmICghY3B1Yy0+ZW5hYmxlZCkKQEAgLTEwMTgsNyArMTAxOCw3IEBACiAKIHN0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKIAlpZiAoIWNwdWMtPmVuYWJsZWQpCiAJCXJldHVybjsKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAKIHN0YXRpYyB2b2lkIGFtZF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWludCBpZHg7CiAKIAlpZiAoIWNwdWMtPmVuYWJsZWQpCkBAIC0xMDQzLDEyICsxMDQzLDEyIEBACiAJY3B1Yy0+ZW5hYmxlZCA9IDA7CiAJLyoKIAkgKiBlbnN1cmUgd2Ugd3JpdGUgdGhlIGRpc2FibGUgYmVmb3JlIHdlIHN0YXJ0IGRpc2FibGluZyB0aGUKLQkgKiBjb3VudGVycyBwcm9wZXIsIHNvIHRoYXQgYW1kX3BtdV9lbmFibGVfY291bnRlcigpIGRvZXMgdGhlCisJICogZXZlbnRzIHByb3Blciwgc28gdGhhdCBhbWRfcG11X2VuYWJsZV9ldmVudCgpIGRvZXMgdGhlCiAJICogcmlnaHQgdGhpbmcuCiAJICovCiAJYmFycmllcigpOwogCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJdTY0IHZhbDsKIAogCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQpAQCAtMTA3MCw3ICsxMDcwLDcgQEAKIAogc3RhdGljIHZvaWQgcDZfcG11X2VuYWJsZV9hbGwodm9pZCkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJaWYgKGNwdWMtPmVuYWJsZWQpCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2FsbCh2b2lkKQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKIAlpZiAoY3B1Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuOwpAQCAtMTA5OCwxOSArMTA5OCwxOSBAQAogCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCB4ODZfcG11LmludGVsX2N0cmwpOwogCiAJaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKSB7Ci0JCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPQotCQkJY3B1Yy0+Y291bnRlcnNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0KKwkJCWNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOwogCi0JCWlmIChXQVJOX09OX09OQ0UoIWNvdW50ZXIpKQorCQlpZiAoV0FSTl9PTl9PTkNFKCFldmVudCkpCiAJCQlyZXR1cm47CiAKLQkJaW50ZWxfcG11X2VuYWJsZV9idHMoY291bnRlci0+aHcuY29uZmlnKTsKKwkJaW50ZWxfcG11X2VuYWJsZV9idHMoZXZlbnQtPmh3LmNvbmZpZyk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9hbGwodm9pZCkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWludCBpZHg7CiAKIAlpZiAoY3B1Yy0+ZW5hYmxlZCkKQEAgLTExMTksMTQgKzExMTksMTQgQEAKIAljcHVjLT5lbmFibGVkID0gMTsKIAliYXJyaWVyKCk7CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpZHgrKykgewotCQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gY3B1Yy0+Y291bnRlcnNbaWR4XTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CiAJCXU2NCB2YWw7CiAKIAkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKIAkJCWNvbnRpbnVlOwogCi0JCXZhbCA9IGNvdW50ZXItPmh3LmNvbmZpZzsKKwkJdmFsID0gZXZlbnQtPmh3LmNvbmZpZzsKIAkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwogCQl3cm1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOwogCX0KQEAgLTExNTMsMTkgKzExNTMsMTkgQEAKIAl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIGFjayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X2VuYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LAogCQkJICAgICAgaHdjLT5jb25maWcgfCBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X2Rpc2FibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgeDg2X3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIGh3Yy0+Y29uZmlnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZGlzYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBfX2lkeCkKK2ludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKIHsKIAlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKIAl1NjQgY3RybF92YWwsIG1hc2s7CkBAIC0xMTc4LDEwICsxMTc4LDEwIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcDZfcG11X2Rpc2FibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBpZHgpCitwNl9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXU2NCB2YWwgPSBQNl9OT1BfQ09VTlRFUjsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWwgPSBQNl9OT1BfRVZFTlQ7CiAKIAlpZiAoY3B1Yy0+ZW5hYmxlZCkKIAkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwpAQCAtMTE5MCw3ICsxMTkwLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKK2ludGVsX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7CiAJCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOwpAQCAtMTIwMiwyNCArMTIwMiwyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JeDg2X3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotYW1kX3BtdV9kaXNhYmxlX2NvdW50ZXIoc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQorYW1kX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7Ci0JeDg2X3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CiB9CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQgW1g4Nl9QTUNfSURYX01BWF0sIHBtY19wcmV2X2xlZnQpOwogCiAvKgogICogU2V0IHRoZSBuZXh0IElSUSBwZXJpb2QsIGJhc2VkIG9uIHRoZSBod2MtPnBlcmlvZF9sZWZ0IHZhbHVlLgotICogVG8gYmUgY2FsbGVkIHdpdGggdGhlIGNvdW50ZXIgZGlzYWJsZWQgaW4gaHc6CisgKiBUbyBiZSBjYWxsZWQgd2l0aCB0aGUgZXZlbnQgZGlzYWJsZWQgaW4gaHc6CiAgKi8KIHN0YXRpYyBpbnQKLXg4Nl9wZXJmX2NvdW50ZXJfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJICAgICBzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBpZHgpCit4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAlzNjQgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOwogCXM2NCBwZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CkBAIC0xMjQ1LDcgKzEyNDUsNyBAQAogCQlyZXQgPSAxOwogCX0KIAkvKgotCSAqIFF1aXJrOiBjZXJ0YWluIENQVXMgZG9udCBsaWtlIGl0IGlmIGp1c3QgMSBldmVudCBpcyBsZWZ0OgorCSAqIFF1aXJrOiBjZXJ0YWluIENQVXMgZG9udCBsaWtlIGl0IGlmIGp1c3QgMSBod19ldmVudCBpcyBsZWZ0OgogCSAqLwogCWlmICh1bmxpa2VseShsZWZ0IDwgMikpCiAJCWxlZnQgPSAyOwpAQCAtMTI1NiwyMSArMTI1NiwyMSBAQAogCXBlcl9jcHUocG1jX3ByZXZfbGVmdFtpZHhdLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gbGVmdDsKIAogCS8qCi0JICogVGhlIGh3IGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGZyb20gdGhpcyBjb3VudGVyIG9mZnNldCwKKwkgKiBUaGUgaHcgZXZlbnQgc3RhcnRzIGNvdW50aW5nIGZyb20gdGhpcyBldmVudCBvZmZzZXQsCiAJICogbWFyayBpdCB0byBiZSBhYmxlIHRvIGV4dHJhIGZ1dHVyZSBkZWx0YXM6CiAJICovCiAJYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1NjQpLWxlZnQpOwogCi0JZXJyID0gY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y291bnRlcl9iYXNlICsgaWR4LAotCQkJICAgICAodTY0KSgtbGVmdCkgJiB4ODZfcG11LmNvdW50ZXJfbWFzayk7CisJZXJyID0gY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGlkeCwKKwkJCSAgICAgKHU2NCkoLWxlZnQpICYgeDg2X3BtdS5ldmVudF9tYXNrKTsKIAotCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IF9faWR4KQoraW50ZWxfcG11X2VuYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCiB7CiAJaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7CiAJdTY0IGN0cmxfdmFsLCBiaXRzLCBtYXNrOwpAQCAtMTI5NSw5ICsxMjk1LDkgQEAKIAllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwogfQogCi1zdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2NvdW50ZXIoc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQorc3RhdGljIHZvaWQgcDZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJdTY0IHZhbDsKIAogCXZhbCA9IGh3Yy0+Y29uZmlnOwpAQCAtMTMwOCwxMCArMTMwOCwxMCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBpZHgpCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7Ci0JCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpLmVuYWJsZWQpCisJCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5lbmFibGVkKQogCQkJcmV0dXJuOwogCiAJCWludGVsX3BtdV9lbmFibGVfYnRzKGh3Yy0+Y29uZmlnKTsKQEAgLTEzMjMsMTM0ICsxMzIzLDEzNCBAQAogCQlyZXR1cm47CiAJfQogCi0JeDg2X3BtdV9lbmFibGVfY291bnRlcihod2MsIGlkeCk7CisJeDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwogfQogCi1zdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKK3N0YXRpYyB2b2lkIGFtZF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAogCWlmIChjcHVjLT5lbmFibGVkKQotCQl4ODZfcG11X2VuYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKKwkJeDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwogfQogCiBzdGF0aWMgaW50Ci1maXhlZF9tb2RlX2lkeChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MpCitmaXhlZF9tb2RlX2lkeChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCiB7Ci0JdW5zaWduZWQgaW50IGV2ZW50OworCXVuc2lnbmVkIGludCBod19ldmVudDsKIAotCWV2ZW50ID0gaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRfTUFTSzsKKwlod19ldmVudCA9IGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0s7CiAKLQlpZiAodW5saWtlbHkoKGV2ZW50ID09CisJaWYgKHVubGlrZWx5KChod19ldmVudCA9PQogCQkgICAgICB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpKSAmJgogCQkgICAgIChod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSkpKQogCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQlRTOwogCi0JaWYgKCF4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZCkKKwlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHVubGlrZWx5KGV2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKSkpCisJaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKSkpCiAJCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9JTlNUUlVDVElPTlM7Ci0JaWYgKHVubGlrZWx5KGV2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUykpKQorCWlmICh1bmxpa2VseShod19ldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMpKSkKIAkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0NQVV9DWUNMRVM7Ci0JaWYgKHVubGlrZWx5KGV2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUykpKQorCWlmICh1bmxpa2VseShod19ldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVMpKSkKIAkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0JVU19DWUNMRVM7CiAKIAlyZXR1cm4gLTE7CiB9CiAKIC8qCi0gKiBGaW5kIGEgUE1DIHNsb3QgZm9yIHRoZSBmcmVzaGx5IGVuYWJsZWQgLyBzY2hlZHVsZWQgaW4gY291bnRlcjoKKyAqIEZpbmQgYSBQTUMgc2xvdCBmb3IgdGhlIGZyZXNobHkgZW5hYmxlZCAvIHNjaGVkdWxlZCBpbiBldmVudDoKICAqLwotc3RhdGljIGludCB4ODZfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQorc3RhdGljIGludCB4ODZfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeDsKIAotCWlkeCA9IGZpeGVkX21vZGVfaWR4KGNvdW50ZXIsIGh3Yyk7CisJaWR4ID0gZml4ZWRfbW9kZV9pZHgoZXZlbnQsIGh3Yyk7CiAJaWYgKGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpIHsKIAkJLyogQlRTIGlzIGFscmVhZHkgb2NjdXBpZWQuICovCiAJCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCWh3Yy0+Y29uZmlnX2Jhc2UJPSAwOwotCQlod2MtPmNvdW50ZXJfYmFzZQk9IDA7CisJCWh3Yy0+ZXZlbnRfYmFzZQk9IDA7CiAJCWh3Yy0+aWR4CQk9IGlkeDsKIAl9IGVsc2UgaWYgKGlkeCA+PSAwKSB7CiAJCS8qCi0JCSAqIFRyeSB0byBnZXQgdGhlIGZpeGVkIGNvdW50ZXIsIGlmIHRoYXQgaXMgYWxyZWFkeSB0YWtlbgotCQkgKiB0aGVuIHRyeSB0byBnZXQgYSBnZW5lcmljIGNvdW50ZXI6CisJCSAqIFRyeSB0byBnZXQgdGhlIGZpeGVkIGV2ZW50LCBpZiB0aGF0IGlzIGFscmVhZHkgdGFrZW4KKwkJICogdGhlbiB0cnkgdG8gZ2V0IGEgZ2VuZXJpYyBldmVudDoKIAkJICovCiAJCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkKIAkJCWdvdG8gdHJ5X2dlbmVyaWM7CiAKIAkJaHdjLT5jb25maWdfYmFzZSA9IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkw7CiAJCS8qCi0JCSAqIFdlIHNldCBpdCBzbyB0aGF0IGNvdW50ZXJfYmFzZSArIGlkeCBpbiB3cm1zci9yZG1zciBtYXBzIHRvCisJCSAqIFdlIHNldCBpdCBzbyB0aGF0IGV2ZW50X2Jhc2UgKyBpZHggaW4gd3Jtc3IvcmRtc3IgbWFwcyB0bwogCQkgKiBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLi4uIENUUjI6CiAJCSAqLwotCQlod2MtPmNvdW50ZXJfYmFzZSA9CisJCWh3Yy0+ZXZlbnRfYmFzZSA9CiAJCQlNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLSBYODZfUE1DX0lEWF9GSVhFRDsKIAkJaHdjLT5pZHggPSBpZHg7CiAJfSBlbHNlIHsKIAkJaWR4ID0gaHdjLT5pZHg7Ci0JCS8qIFRyeSB0byBnZXQgdGhlIHByZXZpb3VzIGdlbmVyaWMgY291bnRlciBhZ2FpbiAqLworCQkvKiBUcnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBnZW5lcmljIGV2ZW50IGFnYWluICovCiAJCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkgewogdHJ5X2dlbmVyaWM6CiAJCQlpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGNwdWMtPnVzZWRfbWFzaywKLQkJCQkJCSAgeDg2X3BtdS5udW1fY291bnRlcnMpOwotCQkJaWYgKGlkeCA9PSB4ODZfcG11Lm51bV9jb3VudGVycykKKwkJCQkJCSAgeDg2X3BtdS5udW1fZXZlbnRzKTsKKwkJCWlmIChpZHggPT0geDg2X3BtdS5udW1fZXZlbnRzKQogCQkJCXJldHVybiAtRUFHQUlOOwogCiAJCQlzZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKTsKIAkJCWh3Yy0+aWR4ID0gaWR4OwogCQl9CiAJCWh3Yy0+Y29uZmlnX2Jhc2UgID0geDg2X3BtdS5ldmVudHNlbDsKLQkJaHdjLT5jb3VudGVyX2Jhc2UgPSB4ODZfcG11LnBlcmZjdHI7CisJCWh3Yy0+ZXZlbnRfYmFzZSA9IHg4Nl9wbXUucGVyZmN0cjsKIAl9CiAKLQlwZXJmX2NvdW50ZXJzX2xhcGljX2luaXQoKTsKKwlwZXJmX2V2ZW50c19sYXBpY19pbml0KCk7CiAKIAl4ODZfcG11LmRpc2FibGUoaHdjLCBpZHgpOwogCi0JY3B1Yy0+Y291bnRlcnNbaWR4XSA9IGNvdW50ZXI7CisJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBldmVudDsKIAlzZXRfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOwogCi0JeDg2X3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KTsKKwl4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CiAJeDg2X3BtdS5lbmFibGUoaHdjLCBpZHgpOwogCi0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgeDg2X3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgdm9pZCB4ODZfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCiAJaWYgKFdBUk5fT05fT05DRShod2MtPmlkeCA+PSBYODZfUE1DX0lEWF9NQVggfHwKLQkJCQljcHVjLT5jb3VudGVyc1tod2MtPmlkeF0gIT0gY291bnRlcikpCisJCQkJY3B1Yy0+ZXZlbnRzW2h3Yy0+aWR4XSAhPSBldmVudCkpCiAJCXJldHVybjsKIAogCXg4Nl9wbXUuZW5hYmxlKGh3YywgaHdjLT5pZHgpOwogfQogCi12b2lkIHBlcmZfY291bnRlcl9wcmludF9kZWJ1Zyh2b2lkKQordm9pZCBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpCiB7CiAJdTY0IGN0cmwsIHN0YXR1cywgb3ZlcmZsb3csIHBtY19jdHJsLCBwbWNfY291bnQsIHByZXZfbGVmdCwgZml4ZWQ7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHUsIGlkeDsKIAotCWlmICgheDg2X3BtdS5udW1fY291bnRlcnMpCisJaWYgKCF4ODZfcG11Lm51bV9ldmVudHMpCiAJCXJldHVybjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQljcHVjID0gJnBlcl9jcHUoY3B1X2h3X2NvdW50ZXJzLCBjcHUpOworCWNwdWMgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpOwogCiAJaWYgKHg4Nl9wbXUudmVyc2lvbiA+PSAyKSB7CiAJCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBjdHJsKTsKQEAgLTE0NjYsNyArMTQ2Niw3IEBACiAJfQogCXByX2luZm8oIkNQVSMlZDogdXNlZDogICAgICAgJTAxNmxseFxuIiwgY3B1LCAqKHU2NCAqKWNwdWMtPnVzZWRfbWFzayk7CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewogCQlyZG1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgcG1jX2N0cmwpOwogCQlyZG1zcmwoeDg2X3BtdS5wZXJmY3RyICArIGlkeCwgcG1jX2NvdW50KTsKIApAQCAtMTQ3OSw3ICsxNDc5LDcgQEAKIAkJcHJfaW5mbygiQ1BVIyVkOiAgIGdlbi1QTUMlZCBsZWZ0OiAgJTAxNmxseFxuIiwKIAkJCWNwdSwgaWR4LCBwcmV2X2xlZnQpOwogCX0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzX2ZpeGVkOyBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkOyBpZHgrKykgewogCQlyZG1zcmwoTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICsgaWR4LCBwbWNfY291bnQpOwogCiAJCXByX2luZm8oIkNQVSMlZDogZml4ZWQtUE1DJWQgY291bnQ6ICUwMTZsbHhcbiIsCkBAIC0xNDg4LDggKzE0ODgsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YywKLQkJCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YykKIHsKIAlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gY3B1Yy0+ZHM7CiAJc3RydWN0IGJ0c19yZWNvcmQgewpAQCAtMTQ5NywxMSArMTQ5NiwxNCBAQAogCQl1NjQJdG87CiAJCXU2NAlmbGFnczsKIAl9OwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBjcHVjLT5jb3VudGVyc1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOwotCXVuc2lnbmVkIGxvbmcgb3JpZ19pcCA9IGRhdGEtPnJlZ3MtPmlwOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOwogCXN0cnVjdCBidHNfcmVjb3JkICphdCwgKnRvcDsKKwlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAotCWlmICghY291bnRlcikKKwlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAKIAlpZiAoIWRzKQpAQCAtMTUxMCwyNiArMTUxMiw0NSBAQAogCWF0ICA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfYnVmZmVyX2Jhc2U7CiAJdG9wID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19pbmRleDsKIAorCWlmICh0b3AgPD0gYXQpCisJCXJldHVybjsKKwogCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOwogCi0JZm9yICg7IGF0IDwgdG9wOyBhdCsrKSB7Ci0JCWRhdGEtPnJlZ3MtPmlwCT0gYXQtPmZyb207Ci0JCWRhdGEtPmFkZHIJPSBhdC0+dG87CiAKLQkJcGVyZl9jb3VudGVyX291dHB1dChjb3VudGVyLCAxLCBkYXRhKTsKKwlkYXRhLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKKwlkYXRhLmFkZHIJPSAwOworCXJlZ3MuaXAJCT0gMDsKKworCS8qCisJICogUHJlcGFyZSBhIGdlbmVyaWMgc2FtcGxlLCBpLmUuIGZpbGwgaW4gdGhlIGludmFyaWFudCBmaWVsZHMuCisJICogV2Ugd2lsbCBvdmVyd3JpdGUgdGhlIGZyb20gYW5kIHRvIGFkZHJlc3MgYmVmb3JlIHdlIG91dHB1dAorCSAqIHRoZSBzYW1wbGUuCisJICovCisJcGVyZl9wcmVwYXJlX3NhbXBsZSgmaGVhZGVyLCAmZGF0YSwgZXZlbnQsICZyZWdzKTsKKworCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwKKwkJCSAgICAgIGhlYWRlci5zaXplICogKHRvcCAtIGF0KSwgMSwgMSkpCisJCXJldHVybjsKKworCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgeworCQlkYXRhLmlwCQk9IGF0LT5mcm9tOworCQlkYXRhLmFkZHIJPSBhdC0+dG87CisKKwkJcGVyZl9vdXRwdXRfc2FtcGxlKCZoYW5kbGUsICZoZWFkZXIsICZkYXRhLCBldmVudCk7CiAJfQogCi0JZGF0YS0+cmVncy0+aXAJPSBvcmlnX2lwOwotCWRhdGEtPmFkZHIJPSAwOworCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKIAogCS8qIFRoZXJlJ3MgbmV3IGRhdGEgYXZhaWxhYmxlLiAqLwotCWNvdW50ZXItPnBlbmRpbmdfa2lsbCA9IFBPTExfSU47CisJZXZlbnQtPmh3LmludGVycnVwdHMrKzsKKwlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKIH0KIAotc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgdm9pZCB4ODZfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOwotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCS8qCkBAIC0xNTQxLDY3ICsxNTYyLDYzIEBACiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgY2xlYXJlZCBwb2ludGVyIGJlY29tZXMgdmlzaWJsZSBiZWZvcmUgd2UKLQkgKiAocG90ZW50aWFsbHkpIGZyZWUgdGhlIGNvdW50ZXI6CisJICogKHBvdGVudGlhbGx5KSBmcmVlIHRoZSBldmVudDoKIAkgKi8KIAliYXJyaWVyKCk7CiAKIAkvKgotCSAqIERyYWluIHRoZSByZW1haW5pbmcgZGVsdGEgY291bnQgb3V0IG9mIGEgY291bnRlcgorCSAqIERyYWluIHRoZSByZW1haW5pbmcgZGVsdGEgY291bnQgb3V0IG9mIGEgZXZlbnQKIAkgKiB0aGF0IHdlIGFyZSBkaXNhYmxpbmc6CiAJICovCi0JeDg2X3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgaHdjLCBpZHgpOworCXg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwogCiAJLyogRHJhaW4gdGhlIHJlbWFpbmluZyBCVFMgcmVjb3Jkcy4gKi8KLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQkJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpCisJCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMpOwogCi0JCWRhdGEucmVncyA9ICZyZWdzOwotCQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihjcHVjLCAmZGF0YSk7Ci0JfQotCWNwdWMtPmNvdW50ZXJzW2lkeF0gPSBOVUxMOworCWNwdWMtPmV2ZW50c1tpZHhdID0gTlVMTDsKIAljbGVhcl9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOwogCi0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiB9CiAKIC8qCi0gKiBTYXZlIGFuZCByZXN0YXJ0IGFuIGV4cGlyZWQgY291bnRlci4gQ2FsbGVkIGJ5IE5NSSBjb250ZXh0cywKLSAqIHNvIGl0IGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IHByZWVtcHRpbmcgbm9ybWFsIGNvdW50ZXIgb3BzOgorICogU2F2ZSBhbmQgcmVzdGFydCBhbiBleHBpcmVkIGV2ZW50LiBDYWxsZWQgYnkgTk1JIGNvbnRleHRzLAorICogc28gaXQgaGFzIHRvIGJlIGNhcmVmdWwgYWJvdXQgcHJlZW1wdGluZyBub3JtYWwgZXZlbnQgb3BzOgogICovCi1zdGF0aWMgaW50IGludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgaW50IGludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCWludCByZXQ7CiAKLQl4ODZfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCBod2MsIGlkeCk7Ci0JcmV0ID0geDg2X3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KTsKKwl4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwlyZXQgPSB4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CiAKLQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRSkKLQkJaW50ZWxfcG11X2VuYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldCh2b2lkKQogewotCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycykuZHM7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaWR4OwogCi0JaWYgKCF4ODZfcG11Lm51bV9jb3VudGVycykKKwlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50cykKIAkJcmV0dXJuOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJcHJpbnRrKCJjbGVhcmluZyBQTVUgc3RhdGUgb24gQ1BVIyVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJY2hlY2tpbmdfd3Jtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIDB1bGwpOwogCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5wZXJmY3RyICArIGlkeCwgMHVsbCk7CiAJfQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fY291bnRlcnNfZml4ZWQ7IGlkeCsrKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7CiAJCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOwogCX0KIAlpZiAoZHMpCkBAIC0xNjEzLDM5ICsxNjMwLDM4IEBACiBzdGF0aWMgaW50IHA2X3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YzsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKIAlpbnQgaWR4LCBoYW5kbGVkID0gMDsKIAl1NjQgdmFsOwogCi0JZGF0YS5yZWdzID0gcmVnczsKIAlkYXRhLmFkZHIgPSAwOwogCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7CisJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKIAkJCWNvbnRpbnVlOwogCi0JCWNvdW50ZXIgPSBjcHVjLT5jb3VudGVyc1tpZHhdOwotCQlod2MgPSAmY291bnRlci0+aHc7CisJCWV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CisJCWh3YyA9ICZldmVudC0+aHc7CiAKLQkJdmFsID0geDg2X3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgaHdjLCBpZHgpOwotCQlpZiAodmFsICYgKDFVTEwgPDwgKHg4Nl9wbXUuY291bnRlcl9iaXRzIC0gMSkpKQorCQl2YWwgPSB4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwkJaWYgKHZhbCAmICgxVUxMIDw8ICh4ODZfcG11LmV2ZW50X2JpdHMgLSAxKSkpCiAJCQljb250aW51ZTsKIAogCQkvKgotCQkgKiBjb3VudGVyIG92ZXJmbG93CisJCSAqIGV2ZW50IG92ZXJmbG93CiAJCSAqLwogCQloYW5kbGVkCQk9IDE7Ci0JCWRhdGEucGVyaW9kCT0gY291bnRlci0+aHcubGFzdF9wZXJpb2Q7CisJCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwogCi0JCWlmICgheDg2X3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KSkKKwkJaWYgKCF4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAocGVyZl9jb3VudGVyX292ZXJmbG93KGNvdW50ZXIsIDEsICZkYXRhKSkKLQkJCXA2X3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQorCQkJcDZfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOwogCX0KIAogCWlmIChoYW5kbGVkKQpAQCAtMTY2MSwxNyArMTY3NywxNiBAQAogc3RhdGljIGludCBpbnRlbF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWM7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CiAJaW50IGJpdCwgbG9vcHM7CiAJdTY0IGFjaywgc3RhdHVzOwogCi0JZGF0YS5yZWdzID0gcmVnczsKIAlkYXRhLmFkZHIgPSAwOwogCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7CisJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCiAJcGVyZl9kaXNhYmxlKCk7Ci0JaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoY3B1YywgJmRhdGEpOworCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMpOwogCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7CiAJaWYgKCFzdGF0dXMpIHsKIAkJcGVyZl9lbmFibGUoKTsKQEAgLTE2ODEsOCArMTY5Niw4IEBACiAJbG9vcHMgPSAwOwogYWdhaW46CiAJaWYgKCsrbG9vcHMgPiAxMDApIHsKLQkJV0FSTl9PTkNFKDEsICJwZXJmY291bnRlcnM6IGlycSBsb29wIHN0dWNrIVxuIik7Ci0JCXBlcmZfY291bnRlcl9wcmludF9kZWJ1ZygpOworCQlXQVJOX09OQ0UoMSwgInBlcmZldmVudHM6IGlycSBsb29wIHN0dWNrIVxuIik7CisJCXBlcmZfZXZlbnRfcHJpbnRfZGVidWcoKTsKIAkJaW50ZWxfcG11X3Jlc2V0KCk7CiAJCXBlcmZfZW5hYmxlKCk7CiAJCXJldHVybiAxOwpAQCAtMTY5MSwxOSArMTcwNiwxOSBAQAogCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7CiAJYWNrID0gc3RhdHVzOwogCWZvcl9lYWNoX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJnN0YXR1cywgWDg2X1BNQ19JRFhfTUFYKSB7Ci0JCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBjcHVjLT5jb3VudGVyc1tiaXRdOworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbYml0XTsKIAogCQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSAmc3RhdHVzKTsKIAkJaWYgKCF0ZXN0X2JpdChiaXQsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoY291bnRlcikpCisJCWlmICghaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoZXZlbnQpKQogCQkJY29udGludWU7CiAKLQkJZGF0YS5wZXJpb2QgPSBjb3VudGVyLT5ody5sYXN0X3BlcmlvZDsKKwkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CiAKLQkJaWYgKHBlcmZfY291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCAxLCAmZGF0YSkpCi0JCQlpbnRlbF9wbXVfZGlzYWJsZV9jb3VudGVyKCZjb3VudGVyLT5odywgYml0KTsKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKKwkJCWludGVsX3BtdV9kaXNhYmxlX2V2ZW50KCZldmVudC0+aHcsIGJpdCk7CiAJfQogCiAJaW50ZWxfcG11X2Fja19zdGF0dXMoYWNrKTsKQEAgLTE3MjMsMzkgKzE3MzgsMzggQEAKIHN0YXRpYyBpbnQgYW1kX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YzsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKIAlpbnQgaWR4LCBoYW5kbGVkID0gMDsKIAl1NjQgdmFsOwogCi0JZGF0YS5yZWdzID0gcmVnczsKIAlkYXRhLmFkZHIgPSAwOwogCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7CisJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9jb3VudGVyczsgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKIAkJCWNvbnRpbnVlOwogCi0JCWNvdW50ZXIgPSBjcHVjLT5jb3VudGVyc1tpZHhdOwotCQlod2MgPSAmY291bnRlci0+aHc7CisJCWV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CisJCWh3YyA9ICZldmVudC0+aHc7CiAKLQkJdmFsID0geDg2X3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgaHdjLCBpZHgpOwotCQlpZiAodmFsICYgKDFVTEwgPDwgKHg4Nl9wbXUuY291bnRlcl9iaXRzIC0gMSkpKQorCQl2YWwgPSB4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwkJaWYgKHZhbCAmICgxVUxMIDw8ICh4ODZfcG11LmV2ZW50X2JpdHMgLSAxKSkpCiAJCQljb250aW51ZTsKIAogCQkvKgotCQkgKiBjb3VudGVyIG92ZXJmbG93CisJCSAqIGV2ZW50IG92ZXJmbG93CiAJCSAqLwogCQloYW5kbGVkCQk9IDE7Ci0JCWRhdGEucGVyaW9kCT0gY291bnRlci0+aHcubGFzdF9wZXJpb2Q7CisJCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwogCi0JCWlmICgheDg2X3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KSkKKwkJaWYgKCF4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAocGVyZl9jb3VudGVyX292ZXJmbG93KGNvdW50ZXIsIDEsICZkYXRhKSkKLQkJCWFtZF9wbXVfZGlzYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKKwkJCWFtZF9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CiAJfQogCiAJaWYgKGhhbmRsZWQpCkBAIC0xNzY5LDE4ICsxNzgzLDE4IEBACiAJaXJxX2VudGVyKCk7CiAJYWNrX0FQSUNfaXJxKCk7CiAJaW5jX2lycV9zdGF0KGFwaWNfcGVuZGluZ19pcnFzKTsKLQlwZXJmX2NvdW50ZXJfZG9fcGVuZGluZygpOworCXBlcmZfZXZlbnRfZG9fcGVuZGluZygpOwogCWlycV9leGl0KCk7CiB9CiAKLXZvaWQgc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKHZvaWQpCit2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAlhcGljLT5zZW5kX0lQSV9zZWxmKExPQ0FMX1BFTkRJTkdfVkVDVE9SKTsKICNlbmRpZgogfQogCi12b2lkIHBlcmZfY291bnRlcnNfbGFwaWNfaW5pdCh2b2lkKQordm9pZCBwZXJmX2V2ZW50c19sYXBpY19pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJaWYgKCF4ODZfcG11LmFwaWMgfHwgIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkKQEAgLTE3OTQsMTMgKzE4MDgsMTMgQEAKIH0KIAogc3RhdGljIGludCBfX2twcm9iZXMKLXBlcmZfY291bnRlcl9ubWlfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCitwZXJmX2V2ZW50X25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQogewogCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAotCWlmICghYXRvbWljX3JlYWQoJmFjdGl2ZV9jb3VudGVycykpCisJaWYgKCFhdG9taWNfcmVhZCgmYWN0aXZlX2V2ZW50cykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC0xODE5LDcgKzE4MzMsNyBAQAogI2VuZGlmCiAJLyoKIAkgKiBDYW4ndCByZWx5IG9uIHRoZSBoYW5kbGVkIHJldHVybiB2YWx1ZSB0byBzYXkgaXQgd2FzIG91ciBOTUksIHR3bwotCSAqIGNvdW50ZXJzIGNvdWxkIHRyaWdnZXIgJ3NpbXVsdGFuZW91c2x5JyByYWlzaW5nIHR3byBiYWNrLXRvLWJhY2sgTk1Jcy4KKwkgKiBldmVudHMgY291bGQgdHJpZ2dlciAnc2ltdWx0YW5lb3VzbHknIHJhaXNpbmcgdHdvIGJhY2stdG8tYmFjayBOTUlzLgogCSAqCiAJICogSWYgdGhlIGZpcnN0IE5NSSBoYW5kbGVzIGJvdGgsIHRoZSBsYXR0ZXIgd2lsbCBiZSBlbXB0eSBhbmQgZGF6ZQogCSAqIHRoZSBDUFUuCkBAIC0xODI5LDggKzE4NDMsOCBAQAogCXJldHVybiBOT1RJRllfU1RPUDsKIH0KIAotc3RhdGljIF9fcmVhZF9tb3N0bHkgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBlcmZfY291bnRlcl9ubWlfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJCT0gcGVyZl9jb3VudGVyX25taV9oYW5kbGVyLAorc3RhdGljIF9fcmVhZF9tb3N0bHkgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBlcmZfZXZlbnRfbm1pX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCQk9IHBlcmZfZXZlbnRfbm1pX2hhbmRsZXIsCiAJLm5leHQJCQk9IE5VTEwsCiAJLnByaW9yaXR5CQk9IDEKIH07CkBAIC0xODQwLDggKzE4NTQsOCBAQAogCS5oYW5kbGVfaXJxCQk9IHA2X3BtdV9oYW5kbGVfaXJxLAogCS5kaXNhYmxlX2FsbAkJPSBwNl9wbXVfZGlzYWJsZV9hbGwsCiAJLmVuYWJsZV9hbGwJCT0gcDZfcG11X2VuYWJsZV9hbGwsCi0JLmVuYWJsZQkJCT0gcDZfcG11X2VuYWJsZV9jb3VudGVyLAotCS5kaXNhYmxlCQk9IHA2X3BtdV9kaXNhYmxlX2NvdW50ZXIsCisJLmVuYWJsZQkJCT0gcDZfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBwNl9wbXVfZGlzYWJsZV9ldmVudCwKIAkuZXZlbnRzZWwJCT0gTVNSX1A2X0VWTlRTRUwwLAogCS5wZXJmY3RyCQk9IE1TUl9QNl9QRVJGQ1RSMCwKIAkuZXZlbnRfbWFwCQk9IHA2X3BtdV9ldmVudF9tYXAsCkBAIC0xODUwLDE2ICsxODY0LDE2IEBACiAJLmFwaWMJCQk9IDEsCiAJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKIAkudmVyc2lvbgkJPSAwLAotCS5udW1fY291bnRlcnMJCT0gMiwKKwkubnVtX2V2ZW50cwkJPSAyLAogCS8qCi0JICogQ291bnRlcnMgaGF2ZSA0MCBiaXRzIGltcGxlbWVudGVkLiBIb3dldmVyIHRoZXkgYXJlIGRlc2lnbmVkIHN1Y2gKKwkgKiBFdmVudHMgaGF2ZSA0MCBiaXRzIGltcGxlbWVudGVkLiBIb3dldmVyIHRoZXkgYXJlIGRlc2lnbmVkIHN1Y2gKIAkgKiB0aGF0IGJpdHMgWzMyLTM5XSBhcmUgc2lnbiBleHRlbnNpb25zIG9mIGJpdCAzMS4gQXMgc3VjaCB0aGUKLQkgKiBlZmZlY3RpdmUgd2lkdGggb2YgYSBjb3VudGVyIGZvciBQNi1saWtlIFBNVSBpcyAzMiBiaXRzIG9ubHkuCisJICogZWZmZWN0aXZlIHdpZHRoIG9mIGEgZXZlbnQgZm9yIFA2LWxpa2UgUE1VIGlzIDMyIGJpdHMgb25seS4KIAkgKgogCSAqIFNlZSBJQS0zMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgZGV2ZWxvcGVyIG1hbnVhbCBWb2wgM0IKIAkgKi8KLQkuY291bnRlcl9iaXRzCQk9IDMyLAotCS5jb3VudGVyX21hc2sJCT0gKDFVTEwgPDwgMzIpIC0gMSwKKwkuZXZlbnRfYml0cwkJPSAzMiwKKwkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCAzMikgLSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCB4ODZfcG11IGludGVsX3BtdSA9IHsKQEAgLTE4NjcsOCArMTg4MSw4IEBACiAJLmhhbmRsZV9pcnEJCT0gaW50ZWxfcG11X2hhbmRsZV9pcnEsCiAJLmRpc2FibGVfYWxsCQk9IGludGVsX3BtdV9kaXNhYmxlX2FsbCwKIAkuZW5hYmxlX2FsbAkJPSBpbnRlbF9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2NvdW50ZXIsCi0JLmRpc2FibGUJCT0gaW50ZWxfcG11X2Rpc2FibGVfY291bnRlciwKKwkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGludGVsX3BtdV9kaXNhYmxlX2V2ZW50LAogCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKIAkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAogCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKQEAgLTE4NzgsNyArMTg5Miw3IEBACiAJLyoKIAkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAogCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgotCSAqIHRoZSBnZW5lcmljIGNvdW50ZXIgcGVyaW9kOgorCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKIAkgKi8KIAkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAogCS5lbmFibGVfYnRzCQk9IGludGVsX3BtdV9lbmFibGVfYnRzLApAQCAtMTg5MCwxNiArMTkwNCwxNiBAQAogCS5oYW5kbGVfaXJxCQk9IGFtZF9wbXVfaGFuZGxlX2lycSwKIAkuZGlzYWJsZV9hbGwJCT0gYW1kX3BtdV9kaXNhYmxlX2FsbCwKIAkuZW5hYmxlX2FsbAkJPSBhbWRfcG11X2VuYWJsZV9hbGwsCi0JLmVuYWJsZQkJCT0gYW1kX3BtdV9lbmFibGVfY291bnRlciwKLQkuZGlzYWJsZQkJPSBhbWRfcG11X2Rpc2FibGVfY291bnRlciwKKwkuZW5hYmxlCQkJPSBhbWRfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBhbWRfcG11X2Rpc2FibGVfZXZlbnQsCiAJLmV2ZW50c2VsCQk9IE1TUl9LN19FVk5UU0VMMCwKIAkucGVyZmN0cgkJPSBNU1JfSzdfUEVSRkNUUjAsCiAJLmV2ZW50X21hcAkJPSBhbWRfcG11X2V2ZW50X21hcCwKIAkucmF3X2V2ZW50CQk9IGFtZF9wbXVfcmF3X2V2ZW50LAogCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoYW1kX3BlcmZtb25fZXZlbnRfbWFwKSwKLQkubnVtX2NvdW50ZXJzCQk9IDQsCi0JLmNvdW50ZXJfYml0cwkJPSA0OCwKLQkuY291bnRlcl9tYXNrCQk9ICgxVUxMIDw8IDQ4KSAtIDEsCisJLm51bV9ldmVudHMJCT0gNCwKKwkuZXZlbnRfYml0cwkJPSA0OCwKKwkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCA0OCkgLSAxLAogCS5hcGljCQkJPSAxLAogCS8qIHVzZSBoaWdoZXN0IGJpdCB0byBkZXRlY3Qgb3ZlcmZsb3cgKi8KIAkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCA0NykgLSAxLApAQCAtMTk1Niw3ICsxOTcwLDcgQEAKIAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGUgQXJjaGl0ZWN0dXJhbCBQZXJmTW9uIHN1cHBvcnRzCi0JICogQnJhbmNoIE1pc3NlcyBSZXRpcmVkIEV2ZW50IG9yIG5vdC4KKwkgKiBCcmFuY2ggTWlzc2VzIFJldGlyZWQgaHdfZXZlbnQgb3Igbm90LgogCSAqLwogCWNwdWlkKDEwLCAmZWF4LmZ1bGwsICZlYngsICZ1bnVzZWQsICZlZHguZnVsbCk7CiAJaWYgKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8PSBBUkNIX1BFUkZNT05fQlJBTkNIX01JU1NFU19SRVRJUkVEKQpAQCAtMTk2OCwxNSArMTk4MiwxNSBAQAogCiAJeDg2X3BtdQkJCQk9IGludGVsX3BtdTsKIAl4ODZfcG11LnZlcnNpb24JCQk9IHZlcnNpb247Ci0JeDg2X3BtdS5udW1fY291bnRlcnMJCT0gZWF4LnNwbGl0Lm51bV9jb3VudGVyczsKLQl4ODZfcG11LmNvdW50ZXJfYml0cwkJPSBlYXguc3BsaXQuYml0X3dpZHRoOwotCXg4Nl9wbXUuY291bnRlcl9tYXNrCQk9ICgxVUxMIDw8IGVheC5zcGxpdC5iaXRfd2lkdGgpIC0gMTsKKwl4ODZfcG11Lm51bV9ldmVudHMJCT0gZWF4LnNwbGl0Lm51bV9ldmVudHM7CisJeDg2X3BtdS5ldmVudF9iaXRzCQk9IGVheC5zcGxpdC5iaXRfd2lkdGg7CisJeDg2X3BtdS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IGVheC5zcGxpdC5iaXRfd2lkdGgpIC0gMTsKIAogCS8qCi0JICogUXVpcms6IHYyIHBlcmZtb24gZG9lcyBub3QgcmVwb3J0IGZpeGVkLXB1cnBvc2UgY291bnRlcnMsIHNvCi0JICogYXNzdW1lIGF0IGxlYXN0IDMgY291bnRlcnM6CisJICogUXVpcms6IHYyIHBlcmZtb24gZG9lcyBub3QgcmVwb3J0IGZpeGVkLXB1cnBvc2UgZXZlbnRzLCBzbworCSAqIGFzc3VtZSBhdCBsZWFzdCAzIGV2ZW50czoKIAkgKi8KLQl4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZAk9IG1heCgoaW50KWVkeC5zcGxpdC5udW1fY291bnRlcnNfZml4ZWQsIDMpOworCXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZAk9IG1heCgoaW50KWVkeC5zcGxpdC5udW1fZXZlbnRzX2ZpeGVkLCAzKTsKIAogCS8qCiAJICogSW5zdGFsbCB0aGUgaHctY2FjaGUtZXZlbnRzIHRhYmxlOgpAQCAtMjAyMywxMSArMjAzNywxMSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBpbml0X2h3X3BlcmZfY291bnRlcnModm9pZCkKK3ZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JcHJfaW5mbygiUGVyZm9ybWFuY2UgQ291bnRlcnM6ICIpOworCXByX2luZm8oIlBlcmZvcm1hbmNlIEV2ZW50czogIik7CiAKIAlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKQEAgLTIwNDAsNDUgKzIwNTQsNDUgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAoZXJyICE9IDApIHsKLQkJcHJfY29udCgibm8gUE1VIGRyaXZlciwgc29mdHdhcmUgY291bnRlcnMgb25seS5cbiIpOworCQlwcl9jb250KCJubyBQTVUgZHJpdmVyLCBzb2Z0d2FyZSBldmVudHMgb25seS5cbiIpOwogCQlyZXR1cm47CiAJfQogCiAJcHJfY29udCgiJXMgUE1VIGRyaXZlci5cbiIsIHg4Nl9wbXUubmFtZSk7CiAKLQlpZiAoeDg2X3BtdS5udW1fY291bnRlcnMgPiBYODZfUE1DX01BWF9HRU5FUklDKSB7Ci0JCVdBUk4oMSwgS0VSTl9FUlIgImh3IHBlcmYgY291bnRlcnMgJWQgPiBtYXgoJWQpLCBjbGlwcGluZyEiLAotCQkgICAgIHg4Nl9wbXUubnVtX2NvdW50ZXJzLCBYODZfUE1DX01BWF9HRU5FUklDKTsKLQkJeDg2X3BtdS5udW1fY291bnRlcnMgPSBYODZfUE1DX01BWF9HRU5FUklDOworCWlmICh4ODZfcG11Lm51bV9ldmVudHMgPiBYODZfUE1DX01BWF9HRU5FUklDKSB7CisJCVdBUk4oMSwgS0VSTl9FUlIgImh3IHBlcmYgZXZlbnRzICVkID4gbWF4KCVkKSwgY2xpcHBpbmchIiwKKwkJICAgICB4ODZfcG11Lm51bV9ldmVudHMsIFg4Nl9QTUNfTUFYX0dFTkVSSUMpOworCQl4ODZfcG11Lm51bV9ldmVudHMgPSBYODZfUE1DX01BWF9HRU5FUklDOwogCX0KLQlwZXJmX2NvdW50ZXJfbWFzayA9ICgxIDw8IHg4Nl9wbXUubnVtX2NvdW50ZXJzKSAtIDE7Ci0JcGVyZl9tYXhfY291bnRlcnMgPSB4ODZfcG11Lm51bV9jb3VudGVyczsKKwlwZXJmX2V2ZW50X21hc2sgPSAoMSA8PCB4ODZfcG11Lm51bV9ldmVudHMpIC0gMTsKKwlwZXJmX21heF9ldmVudHMgPSB4ODZfcG11Lm51bV9ldmVudHM7CiAKLQlpZiAoeDg2X3BtdS5udW1fY291bnRlcnNfZml4ZWQgPiBYODZfUE1DX01BWF9GSVhFRCkgewotCQlXQVJOKDEsIEtFUk5fRVJSICJodyBwZXJmIGNvdW50ZXJzIGZpeGVkICVkID4gbWF4KCVkKSwgY2xpcHBpbmchIiwKLQkJICAgICB4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZCwgWDg2X1BNQ19NQVhfRklYRUQpOwotCQl4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZCA9IFg4Nl9QTUNfTUFYX0ZJWEVEOworCWlmICh4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQgPiBYODZfUE1DX01BWF9GSVhFRCkgeworCQlXQVJOKDEsIEtFUk5fRVJSICJodyBwZXJmIGV2ZW50cyBmaXhlZCAlZCA+IG1heCglZCksIGNsaXBwaW5nISIsCisJCSAgICAgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkLCBYODZfUE1DX01BWF9GSVhFRCk7CisJCXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCA9IFg4Nl9QTUNfTUFYX0ZJWEVEOwogCX0KIAotCXBlcmZfY291bnRlcl9tYXNrIHw9Ci0JCSgoMUxMIDw8IHg4Nl9wbXUubnVtX2NvdW50ZXJzX2ZpeGVkKS0xKSA8PCBYODZfUE1DX0lEWF9GSVhFRDsKLQl4ODZfcG11LmludGVsX2N0cmwgPSBwZXJmX2NvdW50ZXJfbWFzazsKKwlwZXJmX2V2ZW50X21hc2sgfD0KKwkJKCgxTEwgPDwgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkKS0xKSA8PCBYODZfUE1DX0lEWF9GSVhFRDsKKwl4ODZfcG11LmludGVsX2N0cmwgPSBwZXJmX2V2ZW50X21hc2s7CiAKLQlwZXJmX2NvdW50ZXJzX2xhcGljX2luaXQoKTsKLQlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnBlcmZfY291bnRlcl9ubWlfbm90aWZpZXIpOworCXBlcmZfZXZlbnRzX2xhcGljX2luaXQoKTsKKwlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnBlcmZfZXZlbnRfbm1pX25vdGlmaWVyKTsKIAotCXByX2luZm8oIi4uLiB2ZXJzaW9uOiAgICAgICAgICAgICAgICAgJWRcbiIsICAgICB4ODZfcG11LnZlcnNpb24pOwotCXByX2luZm8oIi4uLiBiaXQgd2lkdGg6ICAgICAgICAgICAgICAgJWRcbiIsICAgICB4ODZfcG11LmNvdW50ZXJfYml0cyk7Ci0JcHJfaW5mbygiLi4uIGdlbmVyaWMgY291bnRlcnM6ICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUubnVtX2NvdW50ZXJzKTsKLQlwcl9pbmZvKCIuLi4gdmFsdWUgbWFzazogICAgICAgICAgICAgICUwMTZMeFxuIiwgeDg2X3BtdS5jb3VudGVyX21hc2spOwotCXByX2luZm8oIi4uLiBtYXggcGVyaW9kOiAgICAgICAgICAgICAgJTAxNkx4XG4iLCB4ODZfcG11Lm1heF9wZXJpb2QpOwotCXByX2luZm8oIi4uLiBmaXhlZC1wdXJwb3NlIGNvdW50ZXJzOiAgJWRcbiIsICAgICB4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZCk7Ci0JcHJfaW5mbygiLi4uIGNvdW50ZXIgbWFzazogICAgICAgICAgICAlMDE2THhcbiIsIHBlcmZfY291bnRlcl9tYXNrKTsKKwlwcl9pbmZvKCIuLi4gdmVyc2lvbjogICAgICAgICAgICAgICAgJWRcbiIsICAgICB4ODZfcG11LnZlcnNpb24pOworCXByX2luZm8oIi4uLiBiaXQgd2lkdGg6ICAgICAgICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUuZXZlbnRfYml0cyk7CisJcHJfaW5mbygiLi4uIGdlbmVyaWMgcmVnaXN0ZXJzOiAgICAgICVkXG4iLCAgICAgeDg2X3BtdS5udW1fZXZlbnRzKTsKKwlwcl9pbmZvKCIuLi4gdmFsdWUgbWFzazogICAgICAgICAgICAgJTAxNkx4XG4iLCB4ODZfcG11LmV2ZW50X21hc2spOworCXByX2luZm8oIi4uLiBtYXggcGVyaW9kOiAgICAgICAgICAgICAlMDE2THhcbiIsIHg4Nl9wbXUubWF4X3BlcmlvZCk7CisJcHJfaW5mbygiLi4uIGZpeGVkLXB1cnBvc2UgZXZlbnRzOiAgICVkXG4iLCAgICAgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkKTsKKwlwcl9pbmZvKCIuLi4gZXZlbnQgbWFzazogICAgICAgICAgICAgJTAxNkx4XG4iLCBwZXJmX2V2ZW50X21hc2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgeDg2X3BtdV9yZWFkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgeDg2X3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQl4ODZfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCAmY291bnRlci0+aHcsIGNvdW50ZXItPmh3LmlkeCk7CisJeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCAmZXZlbnQtPmh3LCBldmVudC0+aHcuaWR4KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcG11ID0gewpAQCAtMjA4OCwxMyArMjEwMiwxNiBAQAogCS51bnRocm90dGxlCT0geDg2X3BtdV91bnRocm90dGxlLAogfTsKIAotY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK2NvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IF9faHdfcGVyZl9jb3VudGVyX2luaXQoY291bnRlcik7Ci0JaWYgKGVycikKKwllcnIgPSBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisJaWYgKGVycikgeworCQlpZiAoZXZlbnQtPmRlc3Ryb3kpCisJCQlldmVudC0+ZGVzdHJveShldmVudCk7CiAJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQogCiAJcmV0dXJuICZwbXU7CiB9CkBAIC0yMjc1LDcgKzIyOTIsNyBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotdm9pZCBod19wZXJmX2NvdW50ZXJfc2V0dXBfb25saW5lKGludCBjcHUpCit2b2lkIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCiB7CiAJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggMzkyYmVhNC4uZmFiNzg2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxhc20vcGVyZl9ldmVudC5oPgogCiBzdHJ1Y3Qgbm1pX3dhdGNoZG9nX2N0bGJsayB7CiAJdW5zaWduZWQgaW50IGNjY3JfbXNyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKaW5kZXggMGE0NmI0ZC4uMWNiZWQ5NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCkBAIC01OCw2ICs1OCw5IEBACiAJdHNjX2h6ID0gZWF4IHwgKCgodWludDY0X3QpZWJ4KSA8PCAzMik7CiAJZG9fZGl2KHRzY19oeiwgMTAwMCk7CiAJQlVHX09OKHRzY19oeiA+PiAzMik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVFNDIGZyZXEgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAlbHUuJTAzbHUgTUh6XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKSB0c2NfaHogLyAxMDAwLAorCQkJICh1bnNpZ25lZCBsb25nKSB0c2NfaHogJSAxMDAwKTsKIAlyZXR1cm4gdHNjX2h6OwogfQogCkBAIC02OSw2ICs3Miw5IEBACiAKIAlpZiAoZWJ4ICE9IFVJTlRfTUFYKQogCQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IHZtd2FyZV9nZXRfdHNjX2toejsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJGYWlsZWQgdG8gZ2V0IFRTQyBmcmVxIGZyb20gdGhlIGh5cGVydmlzb3JcbiIpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCBiMDdhZjg4Li42YTUyZDRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBjcHVpZF9jbGFzc19jcHVfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgY2hhciAqY3B1aWRfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKmNwdWlkX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiY3B1LyV1L2NwdWlkIiwgTUlOT1IoZGV2LT5kZXZ0KSk7CiB9CkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJZXJyID0gUFRSX0VSUihjcHVpZF9jbGFzcyk7CiAJCWdvdG8gb3V0X2NocmRldjsKIAl9Ci0JY3B1aWRfY2xhc3MtPm5vZGVuYW1lID0gY3B1aWRfbm9kZW5hbWU7CisJY3B1aWRfY2xhc3MtPmRldm5vZGUgPSBjcHVpZF9kZXZub2RlOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQllcnIgPSBjcHVpZF9kZXZpY2VfY3JlYXRlKGkpOwogCQlpZiAoZXJyICE9IDApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCBhMzIxMGNlLi44NTQxOWJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTEzMzEsNyArMTMzMSw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdTY0IGVuZDsKIAotCXJlcyA9IGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogZTgyMC5ucl9tYXApOworCXJlcyA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBlODIwLm5yX21hcCk7CiAJZTgyMF9yZXMgPSByZXM7CiAJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKIAkJZW5kID0gZTgyMC5tYXBbaV0uYWRkciArIGU4MjAubWFwW2ldLnNpemUgLSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDMzNWYwNDkuLjJhY2ZkM2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTE2MCw3MjEgKzE2MCw2IEBACiAJLmluZGV4ID0JLTEsCiB9OwogCi0jaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQCi0KLXN0YXRpYyBzdHJ1Y3QgZWhjaV9jYXBzIF9faW9tZW0gKmVoY2lfY2FwczsKLXN0YXRpYyBzdHJ1Y3QgZWhjaV9yZWdzIF9faW9tZW0gKmVoY2lfcmVnczsKLXN0YXRpYyBzdHJ1Y3QgZWhjaV9kYmdfcG9ydCBfX2lvbWVtICplaGNpX2RlYnVnOwotc3RhdGljIHVuc2lnbmVkIGludCBkYmdwX2VuZHBvaW50X291dDsKLQotc3RydWN0IGVoY2lfZGV2IHsKLQl1MzIgYnVzOwotCXUzMiBzbG90OwotCXUzMiBmdW5jOwotfTsKLQotc3RhdGljIHN0cnVjdCBlaGNpX2RldiBlaGNpX2RldjsKLQotI2RlZmluZSBVU0JfREVCVUdfREVWTlVNIDEyNwotCi0jZGVmaW5lIERCR1BfREFUQV9UT0dHTEUJMHg4ODAwCi0KLXN0YXRpYyBpbmxpbmUgdTMyIGRiZ3BfcGlkX3VwZGF0ZSh1MzIgeCwgdTMyIHRvaykKLXsKLQlyZXR1cm4gKCh4IF4gREJHUF9EQVRBX1RPR0dMRSkgJiAweGZmZmYwMCkgfCAodG9rICYgMHhmZik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGRiZ3BfbGVuX3VwZGF0ZSh1MzIgeCwgdTMyIGxlbikKLXsKLQlyZXR1cm4gKHggJiB+MHgwZikgfCAobGVuICYgMHgwZik7Ci19Ci0KLS8qCi0gKiBVU0IgUGFja2V0IElEcyAoUElEcykKLSAqLwotCi0vKiB0b2tlbiAqLwotI2RlZmluZSBVU0JfUElEX09VVAkJMHhlMQotI2RlZmluZSBVU0JfUElEX0lOCQkweDY5Ci0jZGVmaW5lIFVTQl9QSURfU09GCQkweGE1Ci0jZGVmaW5lIFVTQl9QSURfU0VUVVAJCTB4MmQKLS8qIGhhbmRzaGFrZSAqLwotI2RlZmluZSBVU0JfUElEX0FDSwkJMHhkMgotI2RlZmluZSBVU0JfUElEX05BSwkJMHg1YQotI2RlZmluZSBVU0JfUElEX1NUQUxMCQkweDFlCi0jZGVmaW5lIFVTQl9QSURfTllFVAkJMHg5NgotLyogZGF0YSAqLwotI2RlZmluZSBVU0JfUElEX0RBVEEwCQkweGMzCi0jZGVmaW5lIFVTQl9QSURfREFUQTEJCTB4NGIKLSNkZWZpbmUgVVNCX1BJRF9EQVRBMgkJMHg4NwotI2RlZmluZSBVU0JfUElEX01EQVRBCQkweDBmCi0vKiBTcGVjaWFsICovCi0jZGVmaW5lIFVTQl9QSURfUFJFQU1CTEUJMHgzYwotI2RlZmluZSBVU0JfUElEX0VSUgkJMHgzYwotI2RlZmluZSBVU0JfUElEX1NQTElUCQkweDc4Ci0jZGVmaW5lIFVTQl9QSURfUElORwkJMHhiNAotI2RlZmluZSBVU0JfUElEX1VOREVGXzAJCTB4ZjAKLQotI2RlZmluZSBVU0JfUElEX0RBVEFfVE9HR0xFCTB4ODgKLSNkZWZpbmUgREJHUF9DTEFJTSAoREJHUF9PV05FUiB8IERCR1BfRU5BQkxFRCB8IERCR1BfSU5VU0UpCi0KLSNkZWZpbmUgUENJX0NBUF9JRF9FSENJX0RFQlVHCTB4YQotCi0jZGVmaW5lIEhVQl9ST09UX1JFU0VUX1RJTUUJNTAJLyogdGltZXMgYXJlIGluIG1zZWMgKi8KLSNkZWZpbmUgSFVCX1NIT1JUX1JFU0VUX1RJTUUJMTAKLSNkZWZpbmUgSFVCX0xPTkdfUkVTRVRfVElNRQkyMDAKLSNkZWZpbmUgSFVCX1JFU0VUX1RJTUVPVVQJNTAwCi0KLSNkZWZpbmUgREJHUF9NQVhfUEFDS0VUCQk4Ci0KLXN0YXRpYyBpbnQgZGJncF93YWl0X3VudGlsX2NvbXBsZXRlKHZvaWQpCi17Ci0JdTMyIGN0cmw7Ci0JaW50IGxvb3AgPSAweDEwMDAwMDsKLQotCWRvIHsKLQkJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQkJLyogU3RvcCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCAqLwotCQlpZiAoY3RybCAmIERCR1BfRE9ORSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKC0tbG9vcCA+IDApOwotCi0JaWYgKCFsb29wKQotCQlyZXR1cm4gLTE7Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHdlIGhhdmUgb2JzZXJ2ZWQgdGhlIGNvbXBsZXRlZCB0cmFuc2FjdGlvbiwKLQkgKiBjbGVhciB0aGUgZG9uZSBiaXQuCi0JICovCi0Jd3JpdGVsKGN0cmwgfCBEQkdQX0RPTkUsICZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQlyZXR1cm4gKGN0cmwgJiBEQkdQX0VSUk9SKSA/IC1EQkdQX0VSUkNPREUoY3RybCkgOiBEQkdQX0xFTihjdHJsKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGRiZ3BfbWRlbGF5KGludCBtcykKLXsKLQlpbnQgaTsKLQotCXdoaWxlIChtcy0tKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0JCQlvdXRiKDB4MSwgMHg4MCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkYmdwX2JyZWF0aCh2b2lkKQotewotCS8qIFNsZWVwIHRvIGdpdmUgdGhlIGRlYnVnIHBvcnQgYSBjaGFuY2UgdG8gYnJlYXRoZSAqLwotfQotCi1zdGF0aWMgaW50IGRiZ3Bfd2FpdF91bnRpbF9kb25lKHVuc2lnbmVkIGN0cmwpCi17Ci0JdTMyIHBpZHMsIGxwaWQ7Ci0JaW50IHJldDsKLQlpbnQgbG9vcCA9IDM7Ci0KLXJldHJ5OgotCXdyaXRlbChjdHJsIHwgREJHUF9HTywgJmVoY2lfZGVidWctPmNvbnRyb2wpOwotCXJldCA9IGRiZ3Bfd2FpdF91bnRpbF9jb21wbGV0ZSgpOwotCXBpZHMgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0JbHBpZCA9IERCR1BfUElEX0dFVChwaWRzKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBJZiB0aGUgcG9ydCBpcyBnZXR0aW5nIGZ1bGwgb3IgaXQgaGFzIGRyb3BwZWQgZGF0YQotCSAqIHN0YXJ0IHBhY2luZyBvdXJzZWx2ZXMsIG5vdCBuZWNlc3NhcnkgYnV0IGl0J3MgZnJpZW5kbHkuCi0JICovCi0JaWYgKChscGlkID09IFVTQl9QSURfTkFLKSB8fCAobHBpZCA9PSBVU0JfUElEX05ZRVQpKQotCQlkYmdwX2JyZWF0aCgpOwotCi0JLyogSWYgSSBnZXQgYSBOQUNLIHJlaXNzdWUgdGhlIHRyYW5zbWlzc2lvbiAqLwotCWlmIChscGlkID09IFVTQl9QSURfTkFLKSB7Ci0JCWlmICgtLWxvb3AgPiAwKQotCQkJZ290byByZXRyeTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkYmdwX3NldF9kYXRhKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHNpemUpCi17Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSBidWY7Ci0JdTMyIGxvLCBoaTsKLQlpbnQgaTsKLQotCWxvID0gaGkgPSAwOwotCWZvciAoaSA9IDA7IGkgPCA0ICYmIGkgPCBzaXplOyBpKyspCi0JCWxvIHw9IGJ5dGVzW2ldIDw8ICg4KmkpOwotCWZvciAoOyBpIDwgOCAmJiBpIDwgc2l6ZTsgaSsrKQotCQloaSB8PSBieXRlc1tpXSA8PCAoOCooaSAtIDQpKTsKLQl3cml0ZWwobG8sICZlaGNpX2RlYnVnLT5kYXRhMDMpOwotCXdyaXRlbChoaSwgJmVoY2lfZGVidWctPmRhdGE0Nyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkYmdwX2dldF9kYXRhKHZvaWQgKmJ1ZiwgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgY2hhciAqYnl0ZXMgPSBidWY7Ci0JdTMyIGxvLCBoaTsKLQlpbnQgaTsKLQotCWxvID0gcmVhZGwoJmVoY2lfZGVidWctPmRhdGEwMyk7Ci0JaGkgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+ZGF0YTQ3KTsKLQlmb3IgKGkgPSAwOyBpIDwgNCAmJiBpIDwgc2l6ZTsgaSsrKQotCQlieXRlc1tpXSA9IChsbyA+PiAoOCppKSkgJiAweGZmOwotCWZvciAoOyBpIDwgOCAmJiBpIDwgc2l6ZTsgaSsrKQotCQlieXRlc1tpXSA9IChoaSA+PiAoOCooaSAtIDQpKSkgJiAweGZmOwotfQotCi1zdGF0aWMgaW50IGRiZ3BfYnVsa193cml0ZSh1bnNpZ25lZCBkZXZudW0sIHVuc2lnbmVkIGVuZHBvaW50LAotCQkJIGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKLXsKLQl1MzIgcGlkcywgYWRkciwgY3RybDsKLQlpbnQgcmV0OwotCi0JaWYgKHNpemUgPiBEQkdQX01BWF9QQUNLRVQpCi0JCXJldHVybiAtMTsKLQotCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIGVuZHBvaW50KTsKLQotCXBpZHMgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0JcGlkcyA9IGRiZ3BfcGlkX3VwZGF0ZShwaWRzLCBVU0JfUElEX09VVCk7Ci0KLQljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOwotCWN0cmwgPSBkYmdwX2xlbl91cGRhdGUoY3RybCwgc2l6ZSk7Ci0JY3RybCB8PSBEQkdQX09VVDsKLQljdHJsIHw9IERCR1BfR087Ci0KLQlkYmdwX3NldF9kYXRhKGJ5dGVzLCBzaXplKTsKLQl3cml0ZWwoYWRkciwgJmVoY2lfZGVidWctPmFkZHJlc3MpOwotCXdyaXRlbChwaWRzLCAmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0KLQlyZXQgPSBkYmdwX3dhaXRfdW50aWxfZG9uZShjdHJsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRiZ3BfYnVsa19yZWFkKHVuc2lnbmVkIGRldm51bSwgdW5zaWduZWQgZW5kcG9pbnQsIHZvaWQgKmRhdGEsCi0JCQkJIGludCBzaXplKQotewotCXUzMiBwaWRzLCBhZGRyLCBjdHJsOwotCWludCByZXQ7Ci0KLQlpZiAoc2l6ZSA+IERCR1BfTUFYX1BBQ0tFVCkKLQkJcmV0dXJuIC0xOwotCi0JYWRkciA9IERCR1BfRVBBRERSKGRldm51bSwgZW5kcG9pbnQpOwotCi0JcGlkcyA9IHJlYWRsKCZlaGNpX2RlYnVnLT5waWRzKTsKLQlwaWRzID0gZGJncF9waWRfdXBkYXRlKHBpZHMsIFVTQl9QSURfSU4pOwotCi0JY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQljdHJsID0gZGJncF9sZW5fdXBkYXRlKGN0cmwsIHNpemUpOwotCWN0cmwgJj0gfkRCR1BfT1VUOwotCWN0cmwgfD0gREJHUF9HTzsKLQotCXdyaXRlbChhZGRyLCAmZWhjaV9kZWJ1Zy0+YWRkcmVzcyk7Ci0Jd3JpdGVsKHBpZHMsICZlaGNpX2RlYnVnLT5waWRzKTsKLQlyZXQgPSBkYmdwX3dhaXRfdW50aWxfZG9uZShjdHJsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmIChzaXplID4gcmV0KQotCQlzaXplID0gcmV0OwotCWRiZ3BfZ2V0X2RhdGEoZGF0YSwgc2l6ZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZGJncF9jb250cm9sX21zZyh1bnNpZ25lZCBkZXZudW0sIGludCByZXF1ZXN0dHlwZSwKLQlpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKmRhdGEsIGludCBzaXplKQotewotCXUzMiBwaWRzLCBhZGRyLCBjdHJsOwotCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgcmVxOwotCWludCByZWFkOwotCWludCByZXQ7Ci0KLQlyZWFkID0gKHJlcXVlc3R0eXBlICYgVVNCX0RJUl9JTikgIT0gMDsKLQlpZiAoc2l6ZSA+IChyZWFkID8gREJHUF9NQVhfUEFDS0VUOjApKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBDb21wdXRlIHRoZSBjb250cm9sIG1lc3NhZ2UgKi8KLQlyZXEuYlJlcXVlc3RUeXBlID0gcmVxdWVzdHR5cGU7Ci0JcmVxLmJSZXF1ZXN0ID0gcmVxdWVzdDsKLQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYodmFsdWUpOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7Ci0JcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKLQotCXBpZHMgPSBEQkdQX1BJRF9TRVQoVVNCX1BJRF9EQVRBMCwgVVNCX1BJRF9TRVRVUCk7Ci0JYWRkciA9IERCR1BfRVBBRERSKGRldm51bSwgMCk7Ci0KLQljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOwotCWN0cmwgPSBkYmdwX2xlbl91cGRhdGUoY3RybCwgc2l6ZW9mKHJlcSkpOwotCWN0cmwgfD0gREJHUF9PVVQ7Ci0JY3RybCB8PSBEQkdQX0dPOwotCi0JLyogU2VuZCB0aGUgc2V0dXAgbWVzc2FnZSAqLwotCWRiZ3Bfc2V0X2RhdGEoJnJlcSwgc2l6ZW9mKHJlcSkpOwotCXdyaXRlbChhZGRyLCAmZWhjaV9kZWJ1Zy0+YWRkcmVzcyk7Ci0Jd3JpdGVsKHBpZHMsICZlaGNpX2RlYnVnLT5waWRzKTsKLQlyZXQgPSBkYmdwX3dhaXRfdW50aWxfZG9uZShjdHJsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFJlYWQgdGhlIHJlc3VsdCAqLwotCXJldHVybiBkYmdwX2J1bGtfcmVhZChkZXZudW0sIDAsIGRhdGEsIHNpemUpOwotfQotCi0KLS8qIEZpbmQgYSBQQ0kgY2FwYWJpbGl0eSAqLwotc3RhdGljIHUzMiBfX2luaXQgZmluZF9jYXAodTMyIG51bSwgdTMyIHNsb3QsIHUzMiBmdW5jLCBpbnQgY2FwKQotewotCXU4IHBvczsKLQlpbnQgYnl0ZXM7Ci0KLQlpZiAoIShyZWFkX3BjaV9jb25maWdfMTYobnVtLCBzbG90LCBmdW5jLCBQQ0lfU1RBVFVTKSAmCi0JCVBDSV9TVEFUVVNfQ0FQX0xJU1QpKQotCQlyZXR1cm4gMDsKLQotCXBvcyA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKG51bSwgc2xvdCwgZnVuYywgUENJX0NBUEFCSUxJVFlfTElTVCk7Ci0JZm9yIChieXRlcyA9IDA7IGJ5dGVzIDwgNDggJiYgcG9zID49IDB4NDA7IGJ5dGVzKyspIHsKLQkJdTggaWQ7Ci0KLQkJcG9zICY9IH4zOwotCQlpZCA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKG51bSwgc2xvdCwgZnVuYywgcG9zK1BDSV9DQVBfTElTVF9JRCk7Ci0JCWlmIChpZCA9PSAweGZmKQotCQkJYnJlYWs7Ci0JCWlmIChpZCA9PSBjYXApCi0JCQlyZXR1cm4gcG9zOwotCi0JCXBvcyA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKG51bSwgc2xvdCwgZnVuYywKLQkJCQkJCSBwb3MrUENJX0NBUF9MSVNUX05FWFQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBfX2luaXQgX19maW5kX2RiZ3AodTMyIGJ1cywgdTMyIHNsb3QsIHUzMiBmdW5jKQotewotCXUzMiBjbGFzczsKLQotCWNsYXNzID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NMQVNTX1JFVklTSU9OKTsKLQlpZiAoKGNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19TRVJJQUxfVVNCX0VIQ0kpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGZpbmRfY2FwKGJ1cywgc2xvdCwgZnVuYywgUENJX0NBUF9JRF9FSENJX0RFQlVHKTsKLX0KLQotc3RhdGljIHUzMiBfX2luaXQgZmluZF9kYmdwKGludCBlaGNpX251bSwgdTMyICpyYnVzLCB1MzIgKnJzbG90LCB1MzIgKnJmdW5jKQotewotCXUzMiBidXMsIHNsb3QsIGZ1bmM7Ci0KLQlmb3IgKGJ1cyA9IDA7IGJ1cyA8IDI1NjsgYnVzKyspIHsKLQkJZm9yIChzbG90ID0gMDsgc2xvdCA8IDMyOyBzbG90KyspIHsKLQkJCWZvciAoZnVuYyA9IDA7IGZ1bmMgPCA4OyBmdW5jKyspIHsKLQkJCQl1bnNpZ25lZCBjYXA7Ci0KLQkJCQljYXAgPSBfX2ZpbmRfZGJncChidXMsIHNsb3QsIGZ1bmMpOwotCi0JCQkJaWYgKCFjYXApCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChlaGNpX251bS0tICE9IDApCi0JCQkJCWNvbnRpbnVlOwotCQkJCSpyYnVzID0gYnVzOwotCQkJCSpyc2xvdCA9IHNsb3Q7Ci0JCQkJKnJmdW5jID0gZnVuYzsKLQkJCQlyZXR1cm4gY2FwOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlaGNpX3Jlc2V0X3BvcnQoaW50IHBvcnQpCi17Ci0JdTMyIHBvcnRzYzsKLQl1MzIgZGVsYXlfdGltZSwgZGVsYXk7Ci0JaW50IGxvb3A7Ci0KLQkvKiBSZXNldCB0aGUgdXNiIGRlYnVnIHBvcnQgKi8KLQlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0IC0gMV0pOwotCXBvcnRzYyAmPSB+UE9SVF9QRTsKLQlwb3J0c2MgfD0gUE9SVF9SRVNFVDsKLQl3cml0ZWwocG9ydHNjLCAmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0IC0gMV0pOwotCi0JZGVsYXkgPSBIVUJfUk9PVF9SRVNFVF9USU1FOwotCWZvciAoZGVsYXlfdGltZSA9IDA7IGRlbGF5X3RpbWUgPCBIVUJfUkVTRVRfVElNRU9VVDsKLQkgICAgIGRlbGF5X3RpbWUgKz0gZGVsYXkpIHsKLQkJZGJncF9tZGVsYXkoZGVsYXkpOwotCi0JCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW3BvcnQgLSAxXSk7Ci0JCWlmIChwb3J0c2MgJiBQT1JUX1JFU0VUKSB7Ci0JCQkvKiBmb3JjZSByZXNldCB0byBjb21wbGV0ZSAqLwotCQkJbG9vcCA9IDI7Ci0JCQl3cml0ZWwocG9ydHNjICYgfihQT1JUX1JXQ19CSVRTIHwgUE9SVF9SRVNFVCksCi0JCQkJJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbcG9ydCAtIDFdKTsKLQkJCWRvIHsKLQkJCQlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1twb3J0LTFdKTsKLQkJCX0gd2hpbGUgKChwb3J0c2MgJiBQT1JUX1JFU0VUKSAmJiAoLS1sb29wID4gMCkpOwotCQl9Ci0KLQkJLyogRGV2aWNlIHdlbnQgYXdheT8gKi8KLQkJaWYgKCEocG9ydHNjICYgUE9SVF9DT05ORUNUKSkKLQkJCXJldHVybiAtRU5PVENPTk47Ci0KLQkJLyogYm9tYiBvdXQgY29tcGxldGVseSBpZiBzb21ldGhpbmcgd2VpcmQgaGFwcGVuZCAqLwotCQlpZiAoKHBvcnRzYyAmIFBPUlRfQ1NDKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIElmIHdlJ3ZlIGZpbmlzaGVkIHJlc2V0dGluZywgdGhlbiBicmVhayBvdXQgb2YgdGhlIGxvb3AgKi8KLQkJaWYgKCEocG9ydHNjICYgUE9SVF9SRVNFVCkgJiYgKHBvcnRzYyAmIFBPUlRfUEUpKQotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRUJVU1k7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVoY2lfd2FpdF9mb3JfcG9ydChpbnQgcG9ydCkKLXsKLQl1MzIgc3RhdHVzOwotCWludCByZXQsIHJlcHM7Ci0KLQlmb3IgKHJlcHMgPSAwOyByZXBzIDwgMzsgcmVwcysrKSB7Ci0JCWRiZ3BfbWRlbGF5KDEwMCk7Ci0JCXN0YXR1cyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnN0YXR1cyk7Ci0JCWlmIChzdGF0dXMgJiBTVFNfUENEKSB7Ci0JCQlyZXQgPSBlaGNpX3Jlc2V0X3BvcnQocG9ydCk7Ci0JCQlpZiAocmV0ID09IDApCi0JCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC1FTk9UQ09OTjsKLX0KLQotI2lmZGVmIERCR1BfREVCVUcKLSMgZGVmaW5lIGRiZ3BfcHJpbnRrIGVhcmx5X3ByaW50awotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYmdwX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9Ci0jZW5kaWYKLQotdHlwZWRlZiB2b2lkICgqc2V0X2RlYnVnX3BvcnRfdCkoaW50IHBvcnQpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZGVmYXVsdF9zZXRfZGVidWdfcG9ydChpbnQgcG9ydCkKLXsKLX0KLQotc3RhdGljIHNldF9kZWJ1Z19wb3J0X3QgX19pbml0ZGF0YSBzZXRfZGVidWdfcG9ydCA9IGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQ7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBudmlkaWFfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCi17Ci0JdTMyIGR3b3JkOwotCWR3b3JkID0gcmVhZF9wY2lfY29uZmlnKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwgZWhjaV9kZXYuZnVuYywKLQkJCQkgMHg3NCk7Ci0JZHdvcmQgJj0gfigweDBmPDwxMik7Ci0JZHdvcmQgfD0gKChwb3J0ICYgMHgwZik8PDEyKTsKLQl3cml0ZV9wY2lfY29uZmlnKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwgZWhjaV9kZXYuZnVuYywgMHg3NCwKLQkJCQkgZHdvcmQpOwotCWRiZ3BfcHJpbnRrKCJzZXQgZGVidWcgcG9ydCB0byAlZFxuIiwgcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3Rfc2V0X2RlYnVnX3BvcnQodm9pZCkKLXsKLQl1MzIgdmVuZG9yaWQ7Ci0KLQl2ZW5kb3JpZCA9IHJlYWRfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsCi0JCSAweDAwKTsKLQotCWlmICgodmVuZG9yaWQgJiAweGZmZmYpID09IDB4MTBkZSkgewotCQlkYmdwX3ByaW50aygidXNpbmcgbnZpZGlhIHNldF9kZWJ1Z19wb3J0XG4iKTsKLQkJc2V0X2RlYnVnX3BvcnQgPSBudmlkaWFfc2V0X2RlYnVnX3BvcnQ7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlaGNpX3NldHVwKHZvaWQpCi17Ci0Jc3RydWN0IHVzYl9kZWJ1Z19kZXNjcmlwdG9yIGRiZ3BfZGVzYzsKLQl1MzIgY21kLCBjdHJsLCBzdGF0dXMsIHBvcnRzYywgaGNzX3BhcmFtczsKLQl1MzIgZGVidWdfcG9ydCwgbmV3X2RlYnVnX3BvcnQgPSAwLCBuX3BvcnRzOwotCXUzMiAgZGV2bnVtOwotCWludCByZXQsIGk7Ci0JaW50IGxvb3A7Ci0JaW50IHBvcnRfbWFwX3RyaWVkOwotCWludCBwbGF5dGltZXMgPSAzOwotCi10cnlfbmV4dF90aW1lOgotCXBvcnRfbWFwX3RyaWVkID0gMDsKLQotdHJ5X25leHRfcG9ydDoKLQotCWhjc19wYXJhbXMgPSByZWFkbCgmZWhjaV9jYXBzLT5oY3NfcGFyYW1zKTsKLQlkZWJ1Z19wb3J0ID0gSENTX0RFQlVHX1BPUlQoaGNzX3BhcmFtcyk7Ci0Jbl9wb3J0cyAgICA9IEhDU19OX1BPUlRTKGhjc19wYXJhbXMpOwotCi0JZGJncF9wcmludGsoImRlYnVnX3BvcnQ6ICVkXG4iLCBkZWJ1Z19wb3J0KTsKLQlkYmdwX3ByaW50aygibl9wb3J0czogICAgJWRcbiIsIG5fcG9ydHMpOwotCi0JZm9yIChpID0gMTsgaSA8PSBuX3BvcnRzOyBpKyspIHsKLQkJcG9ydHNjID0gcmVhZGwoJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbaS0xXSk7Ci0JCWRiZ3BfcHJpbnRrKCJwb3J0c3RhdHVzJWQ6ICUwOHhcbiIsIGksIHBvcnRzYyk7Ci0JfQotCi0JaWYgKHBvcnRfbWFwX3RyaWVkICYmIChuZXdfZGVidWdfcG9ydCAhPSBkZWJ1Z19wb3J0KSkgewotCQlpZiAoLS1wbGF5dGltZXMpIHsKLQkJCXNldF9kZWJ1Z19wb3J0KG5ld19kZWJ1Z19wb3J0KTsKLQkJCWdvdG8gdHJ5X25leHRfdGltZTsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbG9vcCA9IDEwOwotCS8qIFJlc2V0IHRoZSBFSENJIGNvbnRyb2xsZXIgKi8KLQljbWQgPSByZWFkbCgmZWhjaV9yZWdzLT5jb21tYW5kKTsKLQljbWQgfD0gQ01EX1JFU0VUOwotCXdyaXRlbChjbWQsICZlaGNpX3JlZ3MtPmNvbW1hbmQpOwotCWRvIHsKLQkJY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7Ci0JfSB3aGlsZSAoKGNtZCAmIENNRF9SRVNFVCkgJiYgKC0tbG9vcCA+IDApKTsKLQotCWlmICghbG9vcCkgewotCQlkYmdwX3ByaW50aygiY2FuIG5vdCByZXNldCBlaGNpXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlkYmdwX3ByaW50aygiZWhjaSByZXNldCBkb25lXG4iKTsKLQotCS8qIENsYWltIG93bmVyc2hpcCwgYnV0IGRvIG5vdCBlbmFibGUgeWV0ICovCi0JY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQljdHJsIHw9IERCR1BfT1dORVI7Ci0JY3RybCAmPSB+KERCR1BfRU5BQkxFRCB8IERCR1BfSU5VU0UpOwotCXdyaXRlbChjdHJsLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7Ci0KLQkvKiBTdGFydCB0aGUgZWhjaSBydW5uaW5nICovCi0JY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7Ci0JY21kICY9IH4oQ01EX0xSRVNFVCB8IENNRF9JQUFEIHwgQ01EX1BTRSB8IENNRF9BU0UgfCBDTURfUkVTRVQpOwotCWNtZCB8PSBDTURfUlVOOwotCXdyaXRlbChjbWQsICZlaGNpX3JlZ3MtPmNvbW1hbmQpOwotCi0JLyogRW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcm91dGVkIHRvIHRoZSBFSENJICovCi0Jd3JpdGVsKEZMQUdfQ0YsICZlaGNpX3JlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBjb250cm9sbGVyIGlzIG5vIGxvbmdlciBoYWx0ZWQgKi8KLQlsb29wID0gMTA7Ci0JZG8gewotCQlzdGF0dXMgPSByZWFkbCgmZWhjaV9yZWdzLT5zdGF0dXMpOwotCX0gd2hpbGUgKChzdGF0dXMgJiBTVFNfSEFMVCkgJiYgKC0tbG9vcCA+IDApKTsKLQotCWlmICghbG9vcCkgewotCQlkYmdwX3ByaW50aygiZWhjaSBjYW4gYmUgc3RhcnRlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZGJncF9wcmludGsoImVoY2kgc3RhcnRlZFxuIik7Ci0KLQkvKiBXYWl0IGZvciBhIGRldmljZSB0byBzaG93IHVwIGluIHRoZSBkZWJ1ZyBwb3J0ICovCi0JcmV0ID0gZWhjaV93YWl0X2Zvcl9wb3J0KGRlYnVnX3BvcnQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRiZ3BfcHJpbnRrKCJObyBkZXZpY2UgZm91bmQgaW4gZGVidWcgcG9ydFxuIik7Ci0JCWdvdG8gbmV4dF9kZWJ1Z19wb3J0OwotCX0KLQlkYmdwX3ByaW50aygiZWhjaSB3YWl0IGZvciBwb3J0IGRvbmVcbiIpOwotCi0JLyogRW5hYmxlIHRoZSBkZWJ1ZyBwb3J0ICovCi0JY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQljdHJsIHw9IERCR1BfQ0xBSU07Ci0Jd3JpdGVsKGN0cmwsICZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOwotCWlmICgoY3RybCAmIERCR1BfQ0xBSU0pICE9IERCR1BfQ0xBSU0pIHsKLQkJZGJncF9wcmludGsoIk5vIGRldmljZSBpbiBkZWJ1ZyBwb3J0XG4iKTsKLQkJd3JpdGVsKGN0cmwgJiB+REJHUF9DTEFJTSwgJmVoY2lfZGVidWctPmNvbnRyb2wpOwotCQlnb3RvIGVycjsKLQl9Ci0JZGJncF9wcmludGsoImRlYnVnIHBvcnRlZCBlbmFibGVkXG4iKTsKLQotCS8qIENvbXBsZXRlbHkgdHJhbnNmZXIgdGhlIGRlYnVnIGRldmljZSB0byB0aGUgZGVidWcgY29udHJvbGxlciAqLwotCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2RlYnVnX3BvcnQgLSAxXSk7Ci0JcG9ydHNjICY9IH5QT1JUX1BFOwotCXdyaXRlbChwb3J0c2MsICZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2RlYnVnX3BvcnQgLSAxXSk7Ci0KLQlkYmdwX21kZWxheSgxMDApOwotCi0JLyogRmluZCB0aGUgZGVidWcgZGV2aWNlIGFuZCBtYWtlIGl0IGRldmljZSBudW1iZXIgMTI3ICovCi0JZm9yIChkZXZudW0gPSAwOyBkZXZudW0gPD0gMTI3OyBkZXZudW0rKykgewotCQlyZXQgPSBkYmdwX2NvbnRyb2xfbXNnKGRldm51bSwKLQkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCAoVVNCX0RUX0RFQlVHIDw8IDgpLCAwLAotCQkJJmRiZ3BfZGVzYywgc2l6ZW9mKGRiZ3BfZGVzYykpOwotCQlpZiAocmV0ID4gMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAoZGV2bnVtID4gMTI3KSB7Ci0JCWRiZ3BfcHJpbnRrKCJDb3VsZCBub3QgZmluZCBhdHRhY2hlZCBkZWJ1ZyBkZXZpY2VcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0JaWYgKHJldCA8IDApIHsKLQkJZGJncF9wcmludGsoIkF0dGFjaGVkIGRldmljZSBpcyBub3QgYSBkZWJ1ZyBkZXZpY2VcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0JZGJncF9lbmRwb2ludF9vdXQgPSBkYmdwX2Rlc2MuYkRlYnVnT3V0RW5kcG9pbnQ7Ci0KLQkvKiBNb3ZlIHRoZSBkZXZpY2UgdG8gMTI3IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgKi8KLQlpZiAoZGV2bnVtICE9IFVTQl9ERUJVR19ERVZOVU0pIHsKLQkJcmV0ID0gZGJncF9jb250cm9sX21zZyhkZXZudW0sCi0JCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCVVTQl9SRVFfU0VUX0FERFJFU1MsIFVTQl9ERUJVR19ERVZOVU0sIDAsIE5VTEwsIDApOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGJncF9wcmludGsoIkNvdWxkIG5vdCBtb3ZlIGF0dGFjaGVkIGRldmljZSB0byAlZFxuIiwKLQkJCQlVU0JfREVCVUdfREVWTlVNKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCWRldm51bSA9IFVTQl9ERUJVR19ERVZOVU07Ci0JCWRiZ3BfcHJpbnRrKCJkZWJ1ZyBkZXZpY2UgcmVuYW1lZCB0byAxMjdcbiIpOwotCX0KLQotCS8qIEVuYWJsZSB0aGUgZGVidWcgaW50ZXJmYWNlICovCi0JcmV0ID0gZGJncF9jb250cm9sX21zZyhVU0JfREVCVUdfREVWTlVNLAotCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJVVNCX1JFUV9TRVRfRkVBVFVSRSwgVVNCX0RFVklDRV9ERUJVR19NT0RFLCAwLCBOVUxMLCAwKTsKLQlpZiAocmV0IDwgMCkgewotCQlkYmdwX3ByaW50aygiIENvdWxkIG5vdCBlbmFibGUgdGhlIGRlYnVnIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQlkYmdwX3ByaW50aygiZGVidWcgaW50ZXJmYWNlIGVuYWJsZWRcbiIpOwotCi0JLyogUGVyZm9ybSBhIHNtYWxsIHdyaXRlIHRvIGdldCB0aGUgZXZlbi9vZGQgZGF0YSBzdGF0ZSBpbiBzeW5jCi0JICovCi0JcmV0ID0gZGJncF9idWxrX3dyaXRlKFVTQl9ERUJVR19ERVZOVU0sIGRiZ3BfZW5kcG9pbnRfb3V0LCAiICIsIDEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRiZ3BfcHJpbnRrKCJkYmdwX2J1bGtfd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnI7Ci0JfQotCWRiZ3BfcHJpbnRrKCJzbWFsbCB3cml0ZSBkb25lZFxuIik7Ci0KLQlyZXR1cm4gMDsKLWVycjoKLQkvKiBUaGluZ3MgZGlkbid0IHdvcmsgc28gcmVtb3ZlIG15IGNsYWltICovCi0JY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKLQljdHJsICY9IH4oREJHUF9DTEFJTSB8IERCR1BfT1VUKTsKLQl3cml0ZWwoY3RybCwgJmVoY2lfZGVidWctPmNvbnRyb2wpOwotCXJldHVybiAtMTsKLQotbmV4dF9kZWJ1Z19wb3J0OgotCXBvcnRfbWFwX3RyaWVkIHw9ICgxPDwoZGVidWdfcG9ydCAtIDEpKTsKLQluZXdfZGVidWdfcG9ydCA9ICgoZGVidWdfcG9ydC0xKzEpJW5fcG9ydHMpICsgMTsKLQlpZiAocG9ydF9tYXBfdHJpZWQgIT0gKCgxPDxuX3BvcnRzKSAtIDEpKSB7Ci0JCXNldF9kZWJ1Z19wb3J0KG5ld19kZWJ1Z19wb3J0KTsKLQkJZ290byB0cnlfbmV4dF9wb3J0OwotCX0KLQlpZiAoLS1wbGF5dGltZXMpIHsKLQkJc2V0X2RlYnVnX3BvcnQobmV3X2RlYnVnX3BvcnQpOwotCQlnb3RvIHRyeV9uZXh0X3RpbWU7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9kYmdwX2luaXQoY2hhciAqcykKLXsKLQl1MzIgZGVidWdfcG9ydCwgYmFyLCBvZmZzZXQ7Ci0JdTMyIGJ1cywgc2xvdCwgZnVuYywgY2FwOwotCXZvaWQgX19pb21lbSAqZWhjaV9iYXI7Ci0JdTMyIGRiZ3BfbnVtOwotCXUzMiBiYXJfdmFsOwotCWNoYXIgKmU7Ci0JaW50IHJldDsKLQl1OCBieXRlOwotCi0JaWYgKCFlYXJseV9wY2lfYWxsb3dlZCgpKQotCQlyZXR1cm4gLTE7Ci0KLQlkYmdwX251bSA9IDA7Ci0JaWYgKCpzKQotCQlkYmdwX251bSA9IHNpbXBsZV9zdHJ0b3VsKHMsICZlLCAxMCk7Ci0JZGJncF9wcmludGsoImRiZ3BfbnVtOiAlZFxuIiwgZGJncF9udW0pOwotCi0JY2FwID0gZmluZF9kYmdwKGRiZ3BfbnVtLCAmYnVzLCAmc2xvdCwgJmZ1bmMpOwotCWlmICghY2FwKQotCQlyZXR1cm4gLTE7Ci0KLQlkYmdwX3ByaW50aygiRm91bmQgRUhDSSBkZWJ1ZyBwb3J0IG9uICUwMng6JTAyeC4lMXhcbiIsIGJ1cywgc2xvdCwKLQkJCSBmdW5jKTsKLQotCWRlYnVnX3BvcnQgPSByZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCBmdW5jLCBjYXApOwotCWJhciA9IChkZWJ1Z19wb3J0ID4+IDI5KSAmIDB4NzsKLQliYXIgPSAoYmFyICogNCkgKyAweGM7Ci0Jb2Zmc2V0ID0gKGRlYnVnX3BvcnQgPj4gMTYpICYgMHhmZmY7Ci0JZGJncF9wcmludGsoImJhcjogJTAyeCBvZmZzZXQ6ICUwM3hcbiIsIGJhciwgb2Zmc2V0KTsKLQlpZiAoYmFyICE9IFBDSV9CQVNFX0FERFJFU1NfMCkgewotCQlkYmdwX3ByaW50aygib25seSBkZWJ1ZyBwb3J0cyBvbiBiYXIgMSBoYW5kbGVkLlxuIik7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCWJhcl92YWwgPSByZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCBmdW5jLCBQQ0lfQkFTRV9BRERSRVNTXzApOwotCWRiZ3BfcHJpbnRrKCJiYXJfdmFsOiAlMDJ4IG9mZnNldDogJTAzeFxuIiwgYmFyX3ZhbCwgb2Zmc2V0KTsKLQlpZiAoYmFyX3ZhbCAmIH5QQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSB7Ci0JCWRiZ3BfcHJpbnRrKCJvbmx5IHNpbXBsZSAzMmJpdCBtbWlvIGJhcnMgc3VwcG9ydGVkXG4iKTsKLQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogZG91YmxlIGNoZWNrIGlmIHRoZSBtZW0gc3BhY2UgaXMgZW5hYmxlZCAqLwotCWJ5dGUgPSByZWFkX3BjaV9jb25maWdfYnl0ZShidXMsIHNsb3QsIGZ1bmMsIDB4MDQpOwotCWlmICghKGJ5dGUgJiAweDIpKSB7Ci0JCWJ5dGUgIHw9IDB4MDI7Ci0JCXdyaXRlX3BjaV9jb25maWdfYnl0ZShidXMsIHNsb3QsIGZ1bmMsIDB4MDQsIGJ5dGUpOwotCQlkYmdwX3ByaW50aygibW1pbyBmb3IgZWhjaSBlbmFibGVkXG4iKTsKLQl9Ci0KLQkvKgotCSAqIEZJWE1FIEkgZG9uJ3QgaGF2ZSB0aGUgYmFyIHNpemUgc28ganVzdCBndWVzcyBQQUdFX1NJWkUgaXMgbW9yZQotCSAqIHRoYW4gZW5vdWdoLiAgMUsgaXMgdGhlIGJpZ2dlc3QgSSBoYXZlIHNlZW4uCi0JICovCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9EQkdQX0JBU0UsIGJhcl92YWwgJiBQQUdFX01BU0spOwotCWVoY2lfYmFyID0gKHZvaWQgX19pb21lbSAqKV9fZml4X3RvX3ZpcnQoRklYX0RCR1BfQkFTRSk7Ci0JZWhjaV9iYXIgKz0gYmFyX3ZhbCAmIH5QQUdFX01BU0s7Ci0JZGJncF9wcmludGsoImVoY2lfYmFyOiAlcFxuIiwgZWhjaV9iYXIpOwotCi0JZWhjaV9jYXBzICA9IGVoY2lfYmFyOwotCWVoY2lfcmVncyAgPSBlaGNpX2JhciArIEhDX0xFTkdUSChyZWFkbCgmZWhjaV9jYXBzLT5oY19jYXBiYXNlKSk7Ci0JZWhjaV9kZWJ1ZyA9IGVoY2lfYmFyICsgb2Zmc2V0OwotCWVoY2lfZGV2LmJ1cyA9IGJ1czsKLQllaGNpX2Rldi5zbG90ID0gc2xvdDsKLQllaGNpX2Rldi5mdW5jID0gZnVuYzsKLQotCWRldGVjdF9zZXRfZGVidWdfcG9ydCgpOwotCi0JcmV0ID0gZWhjaV9zZXR1cCgpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRiZ3BfcHJpbnRrKCJlaGNpX3NldHVwIGZhaWxlZFxuIik7Ci0JCWVoY2lfZGVidWcgPSBOVUxMOwotCi0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZWFybHlfZGJncF93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzdHIsIHUzMiBuKQotewotCWludCBjaHVuaywgcmV0OwotCi0JaWYgKCFlaGNpX2RlYnVnKQotCQlyZXR1cm47Ci0Jd2hpbGUgKG4gPiAwKSB7Ci0JCWNodW5rID0gbjsKLQkJaWYgKGNodW5rID4gREJHUF9NQVhfUEFDS0VUKQotCQkJY2h1bmsgPSBEQkdQX01BWF9QQUNLRVQ7Ci0JCXJldCA9IGRiZ3BfYnVsa193cml0ZShVU0JfREVCVUdfREVWTlVNLAotCQkJZGJncF9lbmRwb2ludF9vdXQsIHN0ciwgY2h1bmspOwotCQlzdHIgKz0gY2h1bms7Ci0JCW4gLT0gY2h1bms7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgZWFybHlfZGJncF9jb25zb2xlID0gewotCS5uYW1lID0JCSJlYXJseWRiZyIsCi0JLndyaXRlID0JZWFybHlfZGJncF93cml0ZSwKLQkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIsCi0JLmluZGV4ID0JLTEsCi19OwotI2VuZGlmCi0KIC8qIERpcmVjdCBpbnRlcmZhY2UgZm9yIGVtZXJnZW5jaWVzICovCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGUgPSAmZWFybHlfdmdhX2NvbnNvbGU7CiBzdGF0aWMgaW50IF9faW5pdGRhdGEgZWFybHlfY29uc29sZV9pbml0aWFsaXplZDsKQEAgLTg5MSwxMCArMTc2LDE5IEBACiAJdmFfZW5kKGFwKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoc3RydWN0IGNvbnNvbGUgKmNvbiwgaW50IGtlZXBfZWFybHkpCit7CisJZWFybHlfY29uc29sZSA9IGNvbjsKKwlpZiAoa2VlcF9lYXJseSkKKwkJZWFybHlfY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9CT09UOworCWVsc2UKKwkJZWFybHlfY29uc29sZS0+ZmxhZ3MgfD0gQ09OX0JPT1Q7CisJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKK30KIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKmJ1ZikKIHsKLQlpbnQga2VlcF9lYXJseTsKKwlpbnQga2VlcDsKIAogCWlmICghYnVmKQogCQlyZXR1cm4gMDsKQEAgLTkwMyw0MiArMTk3LDM0IEBACiAJCXJldHVybiAwOwogCWVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgPSAxOwogCi0Ja2VlcF9lYXJseSA9IChzdHJzdHIoYnVmLCAia2VlcCIpICE9IE5VTEwpOworCWtlZXAgPSAoc3Ryc3RyKGJ1ZiwgImtlZXAiKSAhPSBOVUxMKTsKIAotCWlmICghc3RybmNtcChidWYsICJzZXJpYWwiLCA2KSkgewotCQllYXJseV9zZXJpYWxfaW5pdChidWYgKyA2KTsKLQkJZWFybHlfY29uc29sZSA9ICZlYXJseV9zZXJpYWxfY29uc29sZTsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInR0eVMiLCA0KSkgewotCQllYXJseV9zZXJpYWxfaW5pdChidWYpOwotCQllYXJseV9jb25zb2xlID0gJmVhcmx5X3NlcmlhbF9jb25zb2xlOwotCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAidmdhIiwgMykKLQkJJiYgYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9PSAxKSB7Ci0JCW1heF94cG9zID0gYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ192aWRlb19jb2xzOwotCQltYXhfeXBvcyA9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbGluZXM7Ci0JCWN1cnJlbnRfeXBvcyA9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfeTsKLQkJZWFybHlfY29uc29sZSA9ICZlYXJseV92Z2FfY29uc29sZTsKKwl3aGlsZSAoKmJ1ZiAhPSAnXDAnKSB7CisJCWlmICghc3RybmNtcChidWYsICJzZXJpYWwiLCA2KSkgeworCQkJZWFybHlfc2VyaWFsX2luaXQoYnVmICsgNik7CisJCQllYXJseV9jb25zb2xlX3JlZ2lzdGVyKCZlYXJseV9zZXJpYWxfY29uc29sZSwga2VlcCk7CisJCX0KKwkJaWYgKCFzdHJuY21wKGJ1ZiwgInR0eVMiLCA0KSkgeworCQkJZWFybHlfc2VyaWFsX2luaXQoYnVmICsgNCk7CisJCQllYXJseV9jb25zb2xlX3JlZ2lzdGVyKCZlYXJseV9zZXJpYWxfY29uc29sZSwga2VlcCk7CisJCX0KKwkJaWYgKCFzdHJuY21wKGJ1ZiwgInZnYSIsIDMpICYmCisJCSAgICBib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID09IDEpIHsKKwkJCW1heF94cG9zID0gYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ192aWRlb19jb2xzOworCQkJbWF4X3lwb3MgPSBib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2xpbmVzOworCQkJY3VycmVudF95cG9zID0gYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ195OworCQkJZWFybHlfY29uc29sZV9yZWdpc3RlcigmZWFybHlfdmdhX2NvbnNvbGUsIGtlZXApOworCQl9CiAjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQCi0JfSBlbHNlIGlmICghc3RybmNtcChidWYsICJkYmdwIiwgNCkpIHsKLQkJaWYgKGVhcmx5X2RiZ3BfaW5pdChidWYrNCkgPCAwKQotCQkJcmV0dXJuIDA7Ci0JCWVhcmx5X2NvbnNvbGUgPSAmZWFybHlfZGJncF9jb25zb2xlOwotCQkvKgotCQkgKiB1c2Igc3Vic3lzIHdpbGwgcmVzZXQgZWhjaSBjb250cm9sbGVyLCBzbyBkb24ndCBrZWVwCi0JCSAqIHRoYXQgZWFybHkgY29uc29sZQotCQkgKi8KLQkJa2VlcF9lYXJseSA9IDA7CisJCWlmICghc3RybmNtcChidWYsICJkYmdwIiwgNCkgJiYgIWVhcmx5X2RiZ3BfaW5pdChidWYgKyA0KSkKKwkJCWVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoJmVhcmx5X2RiZ3BfY29uc29sZSwga2VlcCk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSFZDX1hFTgotCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAieGVuIiwgMykpIHsKLQkJZWFybHlfY29uc29sZSA9ICZ4ZW5ib290X2NvbnNvbGU7CisJCWlmICghc3RybmNtcChidWYsICJ4ZW4iLCAzKSkKKwkJCWVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoJnhlbmJvb3RfY29uc29sZSwga2VlcCk7CiAjZW5kaWYKKwkJYnVmKys7CiAJfQotCi0JaWYgKGtlZXBfZWFybHkpCi0JCWVhcmx5X2NvbnNvbGUtPmZsYWdzICY9IH5DT05fQk9PVDsKLQllbHNlCi0JCWVhcmx5X2NvbnNvbGUtPmZsYWdzIHw9IENPTl9CT09UOwotCXJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggZDU5ZmUzMi4uNjgxYzNmZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTEwMjEsNyArMTAyMSw3IEBACiBhcGljaW50ZXJydXB0IFNQVVJJT1VTX0FQSUNfVkVDVE9SIFwKIAlzcHVyaW91c19pbnRlcnJ1cHQgc21wX3NwdXJpb3VzX2ludGVycnVwdAogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIGFwaWNpbnRlcnJ1cHQgTE9DQUxfUEVORElOR19WRUNUT1IgXAogCXBlcmZfcGVuZGluZ19pbnRlcnJ1cHQgc21wX3BlcmZfcGVuZGluZ19pbnRlcnJ1cHQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0LmMKaW5kZXggMzAwODgzMS4uNDBmMzA3NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAlhbGxvY19pbnRyX2dhdGUoRVJST1JfQVBJQ19WRUNUT1IsIGVycm9yX2ludGVycnVwdCk7CiAKIAkvKiBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVycnVwdHM6ICovCi0jIGlmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCisjIGlmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCWFsbG9jX2ludHJfZ2F0ZShMT0NBTF9QRU5ESU5HX1ZFQ1RPUiwgcGVyZl9wZW5kaW5nX2ludGVycnVwdCk7CiAjIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKaW5kZXggOTM3MTQ0OC4uMzc4ZTlhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKQEAgLTIxMCw4ICsyMTAsOCBAQAogewogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKIAotCWlmICgobGVuID4+IFBBR0VfU0hJRlQpID4gbnVtX3BoeXNwYWdlcykgewotCQlwcl9lcnIoIm1pY3JvY29kZTogdG9vIG11Y2ggZGF0YSAobWF4ICVsZCBwYWdlcylcbiIsIG51bV9waHlzcGFnZXMpOworCWlmICgobGVuID4+IFBBR0VfU0hJRlQpID4gdG90YWxyYW1fcGFnZXMpIHsKKwkJcHJfZXJyKCJtaWNyb2NvZGU6IHRvbyBtdWNoIGRhdGEgKG1heCAlbGQgcGFnZXMpXG4iLCB0b3RhbHJhbV9wYWdlcyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMzYsNyArMjM2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaWNyb2NvZGVfZGV2ID0gewogCS5taW5vcgkJCT0gTUlDUk9DT0RFX01JTk9SLAogCS5uYW1lCQkJPSAibWljcm9jb2RlIiwKLQkuZGV2bm9kZQkJPSAiY3B1L21pY3JvY29kZSIsCisJLm5vZGVuYW1lCQk9ICJjcHUvbWljcm9jb2RlIiwKIAkuZm9wcwkJCT0gJm1pY3JvY29kZV9mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21zci5jIGIvYXJjaC94ODYva2VybmVsL21zci5jCmluZGV4IDdkZDk1MDAuLjZhM2NlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCS5ub3RpZmllcl9jYWxsID0gbXNyX2NsYXNzX2NwdV9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBjaGFyICptc3Jfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKm1zcl9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImNwdS8ldS9tc3IiLCBNSU5PUihkZXYtPmRldnQpKTsKIH0KQEAgLTI2Miw3ICsyNjIsNyBAQAogCQllcnIgPSBQVFJfRVJSKG1zcl9jbGFzcyk7CiAJCWdvdG8gb3V0X2NocmRldjsKIAl9Ci0JbXNyX2NsYXNzLT5ub2RlbmFtZSA9IG1zcl9ub2RlbmFtZTsKKwltc3JfY2xhc3MtPmRldm5vZGUgPSBtc3JfZGV2bm9kZTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJZXJyID0gbXNyX2RldmljZV9jcmVhdGUoaSk7CiAJCWlmIChlcnIgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKaW5kZXggZThhMzUwMS4uYWFhNmI3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKQEAgLTQ2LDkgKzQ2LDggQEAKIHsKIAkvKiBkb24ndCBpbml0aWFsaXplIHN3aW90bGIgaWYgaW9tbXU9b2ZmIChub19pb21tdT0xKSAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAoKCFpb21tdV9kZXRlY3RlZCAmJiAhbm9faW9tbXUgJiYgbWF4X3BmbiA+IE1BWF9ETUEzMl9QRk4pIHx8Ci0JCWlvbW11X3Bhc3NfdGhyb3VnaCkKLQkgICAgICAgc3dpb3RsYiA9IDE7CisJaWYgKCghaW9tbXVfZGV0ZWN0ZWQgJiYgIW5vX2lvbW11ICYmIG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKSkKKwkJc3dpb3RsYiA9IDE7CiAjZW5kaWYKIAlpZiAoc3dpb3RsYl9mb3JjZSkKIAkJc3dpb3RsYiA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwNzExNjZhLi44NDdhYjQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8dHJhY2UvcG93ZXIuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KQEAgLTI1LDkgKzI1LDYgQEAKIAogc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcDsKIAotREVGSU5FX1RSQUNFKHBvd2VyX3N0YXJ0KTsKLURFRklORV9UUkFDRShwb3dlcl9lbmQpOwotCiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKQogewogCSpkc3QgPSAqc3JjOwpAQCAtMjk5LDkgKzI5Niw3IEBACiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogewogCWlmIChobHRfdXNlX2hhbHQoKSkgewotCQlzdHJ1Y3QgcG93ZXJfdHJhY2UgaXQ7Ci0KLQkJdHJhY2VfcG93ZXJfc3RhcnQoJml0LCBQT1dFUl9DU1RBVEUsIDEpOworCQl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIDEpOwogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKIAkJLyoKIAkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UKQEAgLTMxNCw3ICszMDksNiBAQAogCQllbHNlCiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7Ci0JCXRyYWNlX3Bvd2VyX2VuZCgmaXQpOwogCX0gZWxzZSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJLyogbG9vcCBpcyBkb25lIGJ5IHRoZSBjYWxsZXIgKi8KQEAgLTM3Miw5ICszNjYsNyBAQAogICovCiB2b2lkIG13YWl0X2lkbGVfd2l0aF9oaW50cyh1bnNpZ25lZCBsb25nIGF4LCB1bnNpZ25lZCBsb25nIGN4KQogewotCXN0cnVjdCBwb3dlcl90cmFjZSBpdDsKLQotCXRyYWNlX3Bvd2VyX3N0YXJ0KCZpdCwgUE9XRVJfQ1NUQVRFLCAoYXg+PjQpKzEpOworCXRyYWNlX3Bvd2VyX3N0YXJ0KFBPV0VSX0NTVEFURSwgKGF4Pj40KSsxKTsKIAlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCWlmIChjcHVfaGFzKCZjdXJyZW50X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9DTEZMVVNIX01PTklUT1IpKQogCQkJY2xmbHVzaCgodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzKTsKQEAgLTM4NCwxNSArMzc2LDEzIEBACiAJCWlmICghbmVlZF9yZXNjaGVkKCkpCiAJCQlfX213YWl0KGF4LCBjeCk7CiAJfQotCXRyYWNlX3Bvd2VyX2VuZCgmaXQpOwogfQogCiAvKiBEZWZhdWx0IE1PTklUT1IvTVdBSVQgd2l0aCBubyBoaW50cywgdXNlZCBmb3IgZGVmYXVsdCBDMSBzdGF0ZSAqLwogc3RhdGljIHZvaWQgbXdhaXRfaWRsZSh2b2lkKQogewotCXN0cnVjdCBwb3dlcl90cmFjZSBpdDsKIAlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7Ci0JCXRyYWNlX3Bvd2VyX3N0YXJ0KCZpdCwgUE9XRVJfQ1NUQVRFLCAxKTsKKwkJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAxKTsKIAkJaWYgKGNwdV9oYXMoJmN1cnJlbnRfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0NMRkxVU0hfTU9OSVRPUikpCiAJCQljbGZsdXNoKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpOwogCkBAIC00MDIsNyArMzkyLDYgQEAKIAkJCV9fc3RpX213YWl0KDAsIDApOwogCQllbHNlCiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXRyYWNlX3Bvd2VyX2VuZCgmaXQpOwogCX0gZWxzZQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CkBAIC00MTQsMTMgKzQwMywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBwb2xsX2lkbGUodm9pZCkKIHsKLQlzdHJ1Y3QgcG93ZXJfdHJhY2UgaXQ7Ci0KLQl0cmFjZV9wb3dlcl9zdGFydCgmaXQsIFBPV0VSX0NTVEFURSwgMCk7CisJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAwKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKIAkJY3B1X3JlbGF4KCk7Ci0JdHJhY2VfcG93ZXJfZW5kKCZpdCk7CisJdHJhY2VfcG93ZXJfZW5kKDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDhkN2Q1YzkuLjdiMDU4YTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTMyNSwxNiArMzI1LDYgQEAKIAkJcmV0dXJuIHNldF9mbGFncyhjaGlsZCwgdmFsdWUpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qCi0JICogT3JpZ19heCBpcyByZWFsbHkganVzdCBhIGZsYWcgd2l0aCBzbWFsbCBwb3NpdGl2ZSBhbmQKLQkgKiBuZWdhdGl2ZSB2YWx1ZXMsIHNvIG1ha2Ugc3VyZSB0byBhbHdheXMgc2lnbi1leHRlbmQgaXQKLQkgKiBmcm9tIDMyIGJpdHMgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZgotCSAqIHdoZXRoZXIgd2UgY29tZSBmcm9tIGEgMzItYml0IGVudmlyb25tZW50IG9yIG5vdC4KLQkgKi8KLQljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LCBvcmlnX2F4KToKLQkJdmFsdWUgPSAobG9uZykgKHMzMikgdmFsdWU7Ci0JCWJyZWFrOwotCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCxmc19iYXNlKToKIAkJaWYgKHZhbHVlID49IFRBU0tfU0laRV9PRihjaGlsZCkpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTExMjYsMTAgKzExMTYsMTUgQEAKIAogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVzZXIzMiwgcmVncy5vcmlnX2VheCk6CiAJCS8qCi0JCSAqIFNpZ24tZXh0ZW5kIHRoZSB2YWx1ZSBzbyB0aGF0IG9yaWdfZWF4ID0gLTEKLQkJICogY2F1c2VzIChsb25nKW9yaWdfYXggPCAwIHRlc3RzIHRvIGZpcmUgY29ycmVjdGx5LgorCQkgKiBBIDMyLWJpdCBkZWJ1Z2dlciBzZXR0aW5nIG9yaWdfZWF4IG1lYW5zIHRvIHJlc3RvcmUKKwkJICogdGhlIHN0YXRlIG9mIHRoZSB0YXNrIHJlc3RhcnRpbmcgYSAzMi1iaXQgc3lzY2FsbC4KKwkJICogTWFrZSBzdXJlIHdlIGludGVycHJldCB0aGUgLUVSRVNUQVJUKiBjb2RlcyBjb3JyZWN0bHkKKwkJICogaW4gY2FzZSB0aGUgdGFzayBpcyBub3QgYWN0dWFsbHkgc3RpbGwgc2l0dGluZyBhdCB0aGUKKwkJICogZXhpdCBmcm9tIGEgMzItYml0IHN5c2NhbGwgd2l0aCBUU19DT01QQVQgc3RpbGwgc2V0LgogCQkgKi8KLQkJcmVncy0+b3JpZ19heCA9IChsb25nKSAoczMyKSB2YWx1ZTsKKwkJcmVncy0+b3JpZ19heCA9IHZhbHVlOworCQlpZiAoc3lzY2FsbF9nZXRfbnIoY2hpbGQsIHJlZ3MpID49IDApCisJCQl0YXNrX3RocmVhZF9pbmZvKGNoaWxkKS0+c3RhdHVzIHw9IFRTX0NPTVBBVDsKIAkJYnJlYWs7CiAKIAljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyMzIsIHJlZ3MuZWZsYWdzKToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggYTU1ZjY2MC4uZTA5ZjBlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KICNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KQEAgLTY5NywyMSArNjk4LDYgQEAKIAlwcmludGsoS0VSTl9JTkZPICJDb21tYW5kIGxpbmU6ICVzXG4iLCBib290X2NvbW1hbmRfbGluZSk7CiAjZW5kaWYKIAotCXN0cmxjcHkoY29tbWFuZF9saW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwotCSpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyoKLQkgKiBNdXN0IGNhbGwgdGhpcyB0d2ljZTogT25jZSBqdXN0IHRvIGRldGVjdCB3aGV0aGVyIGhhcmR3YXJlIGRvZXNuJ3QKLQkgKiBzdXBwb3J0IE5YIChzbyB0aGF0IHRoZSBlYXJseSBFSENJIGRlYnVnIGNvbnNvbGUgc2V0dXAgY2FuIHNhZmVseQotCSAqIGNhbGwgc2V0X2ZpeG1hcCgpLCBhbmQgdGhlbiBhZ2FpbiBhZnRlciBwYXJzaW5nIGVhcmx5IHBhcmFtZXRlcnMgdG8KLQkgKiBob25vciB0aGUgcmVzcGVjdGl2ZSBjb21tYW5kIGxpbmUgb3B0aW9uLgotCSAqLwotCWNoZWNrX2VmZXIoKTsKLSNlbmRpZgotCi0JcGFyc2VfZWFybHlfcGFyYW0oKTsKLQogCS8qIFZNSSBtYXkgcmVsb2NhdGUgdGhlIGZpeG1hcDsgZG8gdGhpcyBiZWZvcmUgdG91Y2hpbmcgaW9yZW1hcCBhcmVhICovCiAJdm1pX2luaXQoKTsKIApAQCAtNzk0LDYgKzc4MCwyMSBAQAogI2VuZGlmCiAjZW5kaWYKIAorCXN0cmxjcHkoY29tbWFuZF9saW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworCSpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyoKKwkgKiBNdXN0IGNhbGwgdGhpcyB0d2ljZTogT25jZSBqdXN0IHRvIGRldGVjdCB3aGV0aGVyIGhhcmR3YXJlIGRvZXNuJ3QKKwkgKiBzdXBwb3J0IE5YIChzbyB0aGF0IHRoZSBlYXJseSBFSENJIGRlYnVnIGNvbnNvbGUgc2V0dXAgY2FuIHNhZmVseQorCSAqIGNhbGwgc2V0X2ZpeG1hcCgpLCBhbmQgdGhlbiBhZ2FpbiBhZnRlciBwYXJzaW5nIGVhcmx5IHBhcmFtZXRlcnMgdG8KKwkgKiBob25vciB0aGUgcmVzcGVjdGl2ZSBjb21tYW5kIGxpbmUgb3B0aW9uLgorCSAqLworCWNoZWNrX2VmZXIoKTsKKyNlbmRpZgorCisJcGFyc2VfZWFybHlfcGFyYW0oKTsKKwogI2lmZGVmIENPTkZJR19YODZfNjQKIAljaGVja19lZmVyKCk7CiAjZW5kaWYKQEAgLTk4NSw2ICs5ODYsOCBAQAogCSAqLwogCWFjcGlfYm9vdF9pbml0KCk7CiAKKwlzZmlfaW5pdCgpOworCiAJLyoKIAkgKiBnZXQgYm9vdC10aW1lIFNNUCBjb25maWd1cmF0aW9uOgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NmaS5jIGIvYXJjaC94ODYva2VybmVsL3NmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTA5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2ZpLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBzZmkuYyAtIHg4NiBhcmNoaXRlY3R1cmUgU0ZJIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJTRkkiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NmaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZmlfbGFwaWNfYWRkciBfX2luaXRkYXRhID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKKwordm9pZCBfX2luaXQgbXBfc2ZpX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCW1wX2xhcGljX2FkZHIgPSBhZGRyZXNzOworCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIG1wX2xhcGljX2FkZHIpOworCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKQorCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKworCXByX2luZm8oIkJvb3QgQ1BVID0gJWRcbiIsIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Cit9CisKKy8qIEFsbCBDUFVzIGVudW1lcmF0ZWQgYnkgU0ZJIG11c3QgYmUgcHJlc2VudCBhbmQgZW5hYmxlZCAqLwordm9pZCBfX2NwdWluaXQgbXBfc2ZpX3JlZ2lzdGVyX2xhcGljKHU4IGlkKQoreworCWlmIChNQVhfQVBJQ1MgLSBpZCA8PSAwKSB7CisJCXByX3dhcm5pbmcoIlByb2Nlc3NvciAjJWQgaW52YWxpZCAobWF4ICVkKVxuIiwKKwkJCWlkLCBNQVhfQVBJQ1MpOworCQlyZXR1cm47CisJfQorCisJcHJfaW5mbygicmVnaXN0ZXJpbmcgbGFwaWNbJWRdXG4iLCBpZCk7CisKKwlnZW5lcmljX3Byb2Nlc3Nvcl9pbmZvKGlkLCBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2ZpX3BhcnNlX2NwdXMoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQoreworCXN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzYjsKKwlzdHJ1Y3Qgc2ZpX2NwdV90YWJsZV9lbnRyeSAqcGVudHJ5OworCWludCBpOworCWludCBjcHVfbnVtOworCisJc2IgPSAoc3RydWN0IHNmaV90YWJsZV9zaW1wbGUgKil0YWJsZTsKKwljcHVfbnVtID0gU0ZJX0dFVF9OVU1fRU5UUklFUyhzYiwgc3RydWN0IHNmaV9jcHVfdGFibGVfZW50cnkpOworCXBlbnRyeSA9IChzdHJ1Y3Qgc2ZpX2NwdV90YWJsZV9lbnRyeSAqKXNiLT5wZW50cnk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1X251bTsgaSsrKSB7CisJCW1wX3NmaV9yZWdpc3Rlcl9sYXBpYyhwZW50cnktPmFwaWNfaWQpOworCQlwZW50cnkrKzsKKwl9CisKKwlzbXBfZm91bmRfY29uZmlnID0gMTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworc3RhdGljIHUzMiBnc2lfYmFzZTsKKworc3RhdGljIGludCBfX2luaXQgc2ZpX3BhcnNlX2lvYXBpYyhzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpCit7CisJc3RydWN0IHNmaV90YWJsZV9zaW1wbGUgKnNiOworCXN0cnVjdCBzZmlfYXBpY190YWJsZV9lbnRyeSAqcGVudHJ5OworCWludCBpLCBudW07CisKKwlzYiA9IChzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqKXRhYmxlOworCW51bSA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc2IsIHN0cnVjdCBzZmlfYXBpY190YWJsZV9lbnRyeSk7CisJcGVudHJ5ID0gKHN0cnVjdCBzZmlfYXBpY190YWJsZV9lbnRyeSAqKXNiLT5wZW50cnk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJbXBfcmVnaXN0ZXJfaW9hcGljKGksIHBlbnRyeS0+cGh5c19hZGRyLCBnc2lfYmFzZSk7CisJCWdzaV9iYXNlICs9IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaSk7CisJCXBlbnRyeSsrOworCX0KKworCVdBUk4ocGljX21vZGUsIEtFUk5fV0FSTklORworCQkiU0ZJOiBwaWNfbW9kIHNob3VsZG4ndCBiZSAxIHdoZW4gSU9BUElDIHRhYmxlIGlzIHByZXNlbnRcbiIpOworCXBpY19tb2RlID0gMDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KKworLyoKKyAqIHNmaV9wbGF0Zm9ybV9pbml0KCk6IHJlZ2lzdGVyIGxhcGljcyAmIGlvLWFwaWNzCisgKi8KK2ludCBfX2luaXQgc2ZpX3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwltcF9zZmlfcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyhzZmlfbGFwaWNfYWRkcik7CisJc2ZpX3RhYmxlX3BhcnNlKFNGSV9TSUdfQ1BVUywgTlVMTCwgTlVMTCwgc2ZpX3BhcnNlX2NwdXMpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJc2ZpX3RhYmxlX3BhcnNlKFNGSV9TSUdfQVBJQywgTlVMTCwgTlVMTCwgc2ZpX3BhcnNlX2lvYXBpYyk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCmluZGV4IGQ1MTMyMWQuLjAxNTdjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwpAQCAtMzM1LDQgKzMzNSw0IEBACiAJLmxvbmcgc3lzX3ByZWFkdgogCS5sb25nIHN5c19wd3JpdGV2CiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCS8qIDMzNSAqLwotCS5sb25nIHN5c19wZXJmX2NvdW50ZXJfb3BlbgorCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCmluZGV4IDgwODAzMWEuLjY5OWY3ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwpAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlIDxhc20vZTgyMC5oPgogCiAvKiByZWFkeSBmb3IgeDg2XzY0IGFuZCB4ODYgKi8KLXVuc2lnbmVkIGNoYXIgKnRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKK3Vuc2lnbmVkIGNoYXIgKl9fY3B1aW5pdGRhdGEgdHJhbXBvbGluZV9iYXNlID0gX192YShUUkFNUE9MSU5FX0JBU0UpOwogCiB2b2lkIF9faW5pdCByZXNlcnZlX3RyYW1wb2xpbmVfbWVtb3J5KHZvaWQpCiB7CkBAIC0yNiw3ICsyNiw3IEBACiAgKiBib290c3RyYXAgaW50byB0aGUgcGFnZSBjb25jZXJuZWQuIFRoZSBjYWxsZXIKICAqIGhhcyBtYWRlIHN1cmUgaXQncyBzdWl0YWJseSBhbGlnbmVkLgogICovCi11bnNpZ25lZCBsb25nIHNldHVwX3RyYW1wb2xpbmUodm9pZCkKK3Vuc2lnbmVkIGxvbmcgX19jcHVpbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKIHsKIAltZW1jcHkodHJhbXBvbGluZV9iYXNlLCB0cmFtcG9saW5lX2RhdGEsIFRSQU1QT0xJTkVfU0laRSk7CiAJcmV0dXJuIHZpcnRfdG9fcGh5cyh0cmFtcG9saW5lX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzMyLlMKaW5kZXggNjZkODc0ZS4uODUwODIzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV8zMi5TCkBAIC0yOCwxNiArMjgsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAKIC8qIFdlIGNhbiBmcmVlIHVwIHRyYW1wb2xpbmUgYWZ0ZXIgYm9vdHVwIGlmIGNwdSBob3RwbHVnIGlzIG5vdCBzdXBwb3J0ZWQuICovCi0jaWZuZGVmIENPTkZJR19IT1RQTFVHX0NQVQotLnNlY3Rpb24gIi5jcHVpbml0LmRhdGEiLCJhdyIsQHByb2diaXRzCi0jZWxzZQotLnNlY3Rpb24gLnJvZGF0YSwiYSIsQHByb2diaXRzCi0jZW5kaWYKLQorX19DUFVJTklUUk9EQVRBCiAuY29kZTE2CiAKIEVOVFJZKHRyYW1wb2xpbmVfZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCmluZGV4IGNkZGZiOGQuLjU5NmQ1NGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwpAQCAtMjUsMTQgKzI1LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAotLnNlY3Rpb24gLnJvZGF0YSwgImEiLCBAcHJvZ2JpdHMKLQorLyogV2UgY2FuIGZyZWUgdXAgdGhlIHRyYW1wb2xpbmUgYWZ0ZXIgYm9vdHVwIGlmIGNwdSBob3RwbHVnIGlzIG5vdCBzdXBwb3J0ZWQuICovCitfX0NQVUlOSVRST0RBVEEKIC5jb2RlMTYKIAogRU5UUlkodHJhbXBvbGluZV9kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCA3ZGMwZGU5Li45MzQ2ZTEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNjUsNyArNjUsNiBAQAogI2Vsc2UKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKIGFzbWxpbmthZ2UgaW50IHN5c3RlbV9jYWxsKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggMTc0MDllOC4uY2Q5ODJmNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNjY2LDcgKzY2Niw3IEBACiAJaWYgKCh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgICYmIGZyZXEtPm9sZCA8IGZyZXEtPm5ldykgfHwKIAkJCSh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGZyZXEtPm9sZCA+IGZyZXEtPm5ldykgfHwKIAkJCSh2YWwgPT0gQ1BVRlJFUV9SRVNVTUVDSEFOR0UpKSB7Ci0JCSpscGogPSAJY3B1ZnJlcV9zY2FsZShsb29wc19wZXJfamlmZnlfcmVmLCByZWZfZnJlcSwgZnJlcS0+bmV3KTsKKwkJKmxwaiA9IGNwdWZyZXFfc2NhbGUobG9vcHNfcGVyX2ppZmZ5X3JlZiwgcmVmX2ZyZXEsIGZyZXEtPm5ldyk7CiAKIAkJdHNjX2toeiA9IGNwdWZyZXFfc2NhbGUodHNjX2toel9yZWYsIHJlZl9mcmVxLCBmcmVxLT5uZXcpOwogCQlpZiAoIShmcmVxLT5mbGFncyAmIENQVUZSRVFfQ09OU1RfTE9PUFMpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAwY2NiNTdkLi5hNDZhY2NjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDUsOSArNDUsOSBAQAogCXRleHQgUFRfTE9BRCBGTEFHUyg1KTsgICAgICAgICAgLyogUl9FICovCiAJZGF0YSBQVF9MT0FEIEZMQUdTKDcpOyAgICAgICAgICAvKiBSV0UgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JdXNlciBQVF9MT0FEIEZMQUdTKDcpOyAgICAgICAgICAvKiBSV0UgKi8KKwl1c2VyIFBUX0xPQUQgRkxBR1MoNSk7ICAgICAgICAgIC8qIFJfRSAqLwogI2lmZGVmIENPTkZJR19TTVAKLQlwZXJjcHUgUFRfTE9BRCBGTEFHUyg3KTsgICAgICAgIC8qIFJXRSAqLworCXBlcmNwdSBQVF9MT0FEIEZMQUdTKDYpOyAgICAgICAgLyogUldfICovCiAjZW5kaWYKIAlpbml0IFBUX0xPQUQgRkxBR1MoNyk7ICAgICAgICAgIC8qIFJXRSAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwppbmRleCA0Y2I3ZDVkLi43ZTU5ZGMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCisrKyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKQEAgLTExMzUsMTEgKzExMzUsNiBAQAogLyogU2V0dGluZyB1cCBtZW1vcnkgaXMgZmFpcmx5IGVhc3kuICovCiBzdGF0aWMgX19pbml0IGNoYXIgKmxndWVzdF9tZW1vcnlfc2V0dXAodm9pZCkKIHsKLQkvKiBXZSBkbyB0aGlzIGhlcmUgYW5kIG5vdCBlYXJsaWVyIGJlY2F1c2UgbG9ja2NoZWNrIHVzZWQgdG8gYmFyZiBpZiB3ZQotCSAqIGRpZCBpdCBiZWZvcmUgc3RhcnRfa2VybmVsKCkuICBJIHRoaW5rIHdlIGZpeGVkIHRoYXQsIHNvIGl0J2QgYmUKLQkgKiBuaWNlIHRvIG1vdmUgaXQgYmFjayB0byBsZ3Vlc3RfaW5pdC4gIFBhdGNoIHdlbGNvbWUuLi4gKi8KLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY2VkKTsKLQogCS8qCiAJICpUaGUgTGludXggYm9vdGxvYWRlciBoZWFkZXIgY29udGFpbnMgYW4gImU4MjAiIG1lbW9yeSBtYXA6IHRoZQogCSAqIExhdW5jaGVyIHBvcHVsYXRlZCB0aGUgZmlyc3QgZW50cnkgd2l0aCBvdXIgbWVtb3J5IGxpbWl0LgpAQCAtMTM2NCwxMCArMTM1OSwxMyBAQAogCiAJLyoKIAkgKiBJZiB3ZSBkb24ndCBpbml0aWFsaXplIHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlciBub3csIGl0IGNyYXNoZXMKLQkgKiBwYXJhdmlydF9kaXNhYmxlX2lvc3BhY2UuCisJICogYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyLCB0aGVuIHBhcmF2aXJ0X2Rpc2FibGVfaW9zcGFjZS4KIAkgKi8KIAlsb2NrZGVwX2luaXQoKTsKIAorCS8qIEhvb2sgaW4gb3VyIHNwZWNpYWwgcGFuaWMgaHlwZXJjYWxsIGNvZGUuICovCisJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNlZCk7CisKIAkvKgogCSAqIFRoZSBJREUgY29kZSBzcGVuZHMgYWJvdXQgMyBzZWNvbmRzIHByb2JpbmcgZm9yIGRpc2tzOiBpZiB3ZSByZXNlcnZlCiAJICogYWxsIHRoZSBJL08gcG9ydHMgdXAgZnJvbnQgaXQgY2FuJ3QgZ2V0IHRoZW0gYW5kIHNvIGRvZXNuJ3QgcHJvYmUuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuYwppbmRleCA3NzVhMDIwLi44MjcyOGYyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jCisrKyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CQkvKiBtYXhfbG93X3BmbgkJCSovCiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgkJLyogX19rcHJvYmVzLCAuLi4JCSovCiAjaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+CQkvKiBrbW1pb19oYW5kbGVyLCAuLi4JCSovCi0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CQkvKiBwZXJmX3N3Y291bnRlcl9ldmVudAkJKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CQkvKiBwZXJmX3N3X2V2ZW50CQkqLwogCiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CQkJLyogZG90cmFwbGlua2FnZSwgLi4uCQkqLwogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CQkvKiBwZ2RfKigpLCAuLi4JCQkqLwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAlpZiAodW5saWtlbHkoZXJyb3JfY29kZSAmIFBGX1JTVkQpKQogCQlwZ3RhYmxlX2JhZChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKIAotCXBlcmZfc3djb3VudGVyX2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcmVzcyk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCwgaGF2ZSBubyB1c2VyIGNvbnRleHQgb3IgYXJlIHJ1bm5pbmcKQEAgLTExMTQsMTEgKzExMTQsMTEgQEAKIAogCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXRzay0+bWluX2ZsdCsrOwotCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKIAkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCmluZGV4IDNjZDc3MTEuLjMwOTM4YzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKQEAgLTg0LDcgKzg0LDcgQEAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCWlmICghKHBnZF92YWwoKnBnZCkgJiBfUEFHRV9QUkVTRU5UKSkgewogCQlpZiAoYWZ0ZXJfYm9vdG1lbSkKLQkJCXBtZF90YWJsZSA9IChwbWRfdCAqKWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAJCWVsc2UKIAkJCXBtZF90YWJsZSA9IChwbWRfdCAqKWFsbG9jX2xvd19wYWdlKCk7CiAJCXBhcmF2aXJ0X2FsbG9jX3BtZCgmaW5pdF9tbSwgX19wYShwbWRfdGFibGUpID4+IFBBR0VfU0hJRlQpOwpAQCAtMTE2LDcgKzExNiw3IEBACiAjZW5kaWYKIAkJCWlmICghcGFnZV90YWJsZSkKIAkJCQlwYWdlX3RhYmxlID0KLQkJCQkocHRlX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCQkJCShwdGVfdCAqKWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKIAkJfSBlbHNlCiAJCQlwYWdlX3RhYmxlID0gKHB0ZV90ICopYWxsb2NfbG93X3BhZ2UoKTsKIApAQCAtODU3LDggKzg1Nyw2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jOwotCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewogCWludCBjb2Rlc2l6ZSwgcmVzZXJ2ZWRwYWdlcywgZGF0YXNpemUsIGluaXRzaXplOwpAQCAtODg2LDEzICs4ODQsOSBAQAogCWRhdGFzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhIC0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7CiAJaW5pdHNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfZW5kIC0gKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfYmVnaW47CiAKLQlrY2xpc3RfYWRkKCZrY29yZV9tZW0sIF9fdmEoMCksIG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOwotCWtjbGlzdF9hZGQoJmtjb3JlX3ZtYWxsb2MsICh2b2lkICopVk1BTExPQ19TVEFSVCwKLQkJICAgVk1BTExPQ19FTkQtVk1BTExPQ19TVEFSVCk7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgIgogCQkJIiVkayByZXNlcnZlZCwgJWRrIGRhdGEsICVkayBpbml0LCAlbGRrIGhpZ2htZW0pXG4iLAotCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkJbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWNvZGVzaXplID4+IDEwLAogCQlyZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCBlYTU2YjhjLi41YTQzOThhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC02NDcsOCArNjQ3LDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogCi1zdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jLCBrY29yZV9rZXJuZWwsCi0JCQkga2NvcmVfbW9kdWxlcywga2NvcmVfdnN5c2NhbGw7CitzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfdnN5c2NhbGw7CiAKIHZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpCiB7CkBAIC02NzcsMTcgKzY3NiwxMiBAQAogCWluaXRzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luOwogCiAJLyogUmVnaXN0ZXIgbWVtb3J5IGFyZWFzIGZvciAvcHJvYy9rY29yZSAqLwotCWtjbGlzdF9hZGQoJmtjb3JlX21lbSwgX192YSgwKSwgbWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCk7Ci0Ja2NsaXN0X2FkZCgma2NvcmVfdm1hbGxvYywgKHZvaWQgKilWTUFMTE9DX1NUQVJULAotCQkgICBWTUFMTE9DX0VORC1WTUFMTE9DX1NUQVJUKTsKLQlrY2xpc3RfYWRkKCZrY29yZV9rZXJuZWwsICZfc3RleHQsIF9lbmQgLSBfc3RleHQpOwotCWtjbGlzdF9hZGQoJmtjb3JlX21vZHVsZXMsICh2b2lkICopTU9EVUxFU19WQUREUiwgTU9EVUxFU19MRU4pOwogCWtjbGlzdF9hZGQoJmtjb3JlX3ZzeXNjYWxsLCAodm9pZCAqKVZTWVNDQUxMX1NUQVJULAotCQkJCSBWU1lTQ0FMTF9FTkQgLSBWU1lTQ0FMTF9TVEFSVCk7CisJCQkgVlNZU0NBTExfRU5EIC0gVlNZU0NBTExfU1RBUlQsIEtDT1JFX09USEVSKTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWxkayBrZXJuZWwgY29kZSwgIgogCQkJICIlbGRrIGFic2VudCwgJWxkayByZXNlcnZlZCwgJWxkayBkYXRhLCAlbGRrIGluaXQpXG4iLAotCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkJbWF4X3BmbiA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWNvZGVzaXplID4+IDEwLAogCQlhYnNlbnRfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCmluZGV4IDUyOGJmOTUuLjhjYzE4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYworKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKQEAgLTIyNSw5ICsyMjUsNiBAQAogCiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCi0JaWYgKGRhdGEtPmJhbGFuY2UgPT0gMCkKLQkJcmV0dXJuOwotCiAJaWYgKHVubGlrZWx5KGRhdGEtPmJhbGFuY2UgIT0gMSkpIHsKIAkJa21lbWNoZWNrX3Nob3dfYWxsKCk7CiAJCWttZW1jaGVja19lcnJvcl9zYXZlX2J1ZyhyZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYwppbmRleCBlNzczYjZiLi4zZjY2YjgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jCkBAIC0xLDcgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ttZW1jaGVjay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKaW5kZXggNDg5OTIxNS4uOGViMDU4NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwpAQCAtMjM0LDExICsyMzQsMTEgQEAKIAlpZiAoZWF4LnNwbGl0LnZlcnNpb25faWQgPT0gMCAmJiBjdXJyZW50X2NwdV9kYXRhLng4NiA9PSA2ICYmCiAJCWN1cnJlbnRfY3B1X2RhdGEueDg2X21vZGVsID09IDE1KSB7CiAJCWVheC5zcGxpdC52ZXJzaW9uX2lkID0gMjsKLQkJZWF4LnNwbGl0Lm51bV9jb3VudGVycyA9IDI7CisJCWVheC5zcGxpdC5udW1fZXZlbnRzID0gMjsKIAkJZWF4LnNwbGl0LmJpdF93aWR0aCA9IDQwOwogCX0KIAotCW51bV9jb3VudGVycyA9IGVheC5zcGxpdC5udW1fY291bnRlcnM7CisJbnVtX2NvdW50ZXJzID0gZWF4LnNwbGl0Lm51bV9ldmVudHM7CiAKIAlvcF9hcmNoX3BlcmZtb25fc3BlYy5udW1fY291bnRlcnMgPSBudW1fY291bnRlcnM7CiAJb3BfYXJjaF9wZXJmbW9uX3NwZWMubnVtX2NvbnRyb2xzID0gbnVtX2NvdW50ZXJzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmggYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAppbmRleCBiODM3NzYxLi43YjhlNzVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAorKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaApAQCAtMTMsNyArMTMsNyBAQAogI2RlZmluZSBPUF9YODZfTU9ERUxfSAogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGFzbS9wZXJmX2V2ZW50Lmg+CiAKIHN0cnVjdCBvcF9tc3IgewogCXVuc2lnbmVkIGxvbmcJYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwppbmRleCA3MTI0NDNlLi42MDJjMTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKKysrIGIvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCkBAIC0xMywxMCArMTMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NmaV9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorCisjZGVmaW5lIFBSRUZJWCAiUENJOiAiCiAKIC8qIGFwZXJ0dXJlIGlzIHVwIHRvIDI1Nk1CIGJ1dCBCSU9TIG1heSByZXNlcnZlIGxlc3MgKi8KICNkZWZpbmUgTU1DT05GSUdfQVBFUl9NSU4JKDIgKiAxMDI0KjEwMjQpCkBAIC00OTEsNyArNDk1LDcgQEAKIAkJICAgICAgICh1bnNpZ25lZCBpbnQpY2ZnLT5zdGFydF9idXNfbnVtYmVyLAogCQkgICAgICAgKHVuc2lnbmVkIGludCljZmctPmVuZF9idXNfbnVtYmVyKTsKIAotCQlpZiAoIWVhcmx5KQorCQlpZiAoIWVhcmx5ICYmICFhY3BpX2Rpc2FibGVkKQogCQkJdmFsaWQgPSBpc19tbWNvbmZfcmVzZXJ2ZWQoaXNfYWNwaV9yZXNlcnZlZCwgYWRkciwgc2l6ZSwgaSwgY2ZnLCAwKTsKIAogCQlpZiAodmFsaWQpCkBAIC02MDYsNyArNjEwLDcgQEAKIAl9CiAKIAlpZiAoIWtub3duX2JyaWRnZSkKLQkJYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19NQ0ZHLCBwY2lfcGFyc2VfbWNmZyk7CisJCWFjcGlfc2ZpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01DRkcsIHBjaV9wYXJzZV9tY2ZnKTsKIAogCXBjaV9tbWNmZ19yZWplY3RfYnJva2VuKGVhcmx5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL21tY29uZmlnXzMyLmMgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWdfMzIuYwppbmRleCA4YjJkNTYxLi5mMTBhN2U5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbW1jb25maWdfMzIuYworKysgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWdfMzIuYwpAQCAtMTEsOSArMTEsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAKIC8qIEFzc3VtZSBzeXN0ZW1zIHdpdGggbW9yZSBidXNzZXMgaGF2ZSBjb3JyZWN0IE1DRkcgKi8KICNkZWZpbmUgbW1jZmdfdmlydF9hZGRyICgodm9pZCBfX2lvbWVtICopIGZpeF90b192aXJ0KEZJWF9QQ0lFX01DRkcpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvY3B1LmMgYi9hcmNoL3g4Ni9wb3dlci9jcHUuYwppbmRleCA0MTdjOWY1Li44YWE4NWYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9jcHUuYworKysgYi9hcmNoL3g4Ni9wb3dlci9jcHUuYwpAQCAtMjQzLDEwICsyNDMsNiBAQAogCiAJZG9fZnB1X2VuZCgpOwogCW10cnJfYnBfcmVzdG9yZSgpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9PTERfTUNFCi0JbWNoZWNrX2luaXQoJmJvb3RfY3B1X2RhdGEpOwotI2VuZGlmCiB9CiAKIC8qIE5lZWRlZCBieSBhcG0uYyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IDliOTI2MjAuLmZjYTRkYjQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tYW4uaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTUzLDYgKzUzLDggQEAKICNkZWZpbmUgTUFQX0xPQ0tFRAkweDgwMDAJCS8qIHBhZ2VzIGFyZSBsb2NrZWQgKi8KICNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MTAwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgyMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCisjZGVmaW5lIE1BUF9TVEFDSwkweDQwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLworI2RlZmluZSBNQVBfSFVHRVRMQgkweDgwMDAwCQkvKiBjcmVhdGUgYSBodWdlIHBhZ2UgbWFwcGluZyAqLwogCiAvKgogICogRmxhZ3MgZm9yIG1zeW5jCkBAIC03OCw2ICs4MCw5IEBACiAjZGVmaW5lIE1BRFZfRE9OVEZPUksJMTAJCS8qIGRvbid0IGluaGVyaXQgYWNyb3NzIGZvcmsgKi8KICNkZWZpbmUgTUFEVl9ET0ZPUksJMTEJCS8qIGRvIGluaGVyaXQgYWNyb3NzIGZvcmsgKi8KIAorI2RlZmluZSBNQURWX01FUkdFQUJMRSAgIDEyCQkvKiBLU00gbWF5IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLworI2RlZmluZSBNQURWX1VOTUVSR0VBQkxFIDEzCQkvKiBLU00gbWF5IG5vdCBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKwogLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBNQVBfRklMRQkwCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL2luaXQuYyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwppbmRleCA0MjdlMTRmLi5jZGJjMjdjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKKysrIGIvYXJjaC94dGVuc2EvbW0vaW5pdC5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAogCXByaW50aygiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglbGRrIGtlcm5lbCBjb2RlLCAlbGRrIHJlc2VydmVkLCAiCiAJICAgICAgICIlbGRrIGRhdGEsICVsZGsgaW5pdCAlbGRrIGhpZ2htZW0pXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgcmFtIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgY29kZXNpemUgPj4gMTAsCiAJICAgICAgIHJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYmxvY2svYnNnLmMgYi9ibG9jay9ic2cuYwppbmRleCA1ZjE4NGJiLi4wNjc2MzAxIDEwMDY0NAotLS0gYS9ibG9jay9ic2cuYworKysgYi9ibG9jay9ic2cuYwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjZGV2IGJzZ19jZGV2OwogCi1zdGF0aWMgY2hhciAqYnNnX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICpic2dfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJic2cvJXMiLCBkZXZfbmFtZShkZXYpKTsKIH0KQEAgLTEwODcsNyArMTA4Nyw3IEBACiAJCXJldCA9IFBUUl9FUlIoYnNnX2NsYXNzKTsKIAkJZ290byBkZXN0cm95X2ttZW1jYWNoZTsKIAl9Ci0JYnNnX2NsYXNzLT5ub2RlbmFtZSA9IGJzZ19ub2RlbmFtZTsKKwlic2dfY2xhc3MtPmRldm5vZGUgPSBic2dfZGV2bm9kZTsKIAogCXJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldmlkLCAwLCBCU0dfTUFYX0RFVlMsICJic2ciKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggMmFkOTFkZC4uNTE3ZTQzMyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC05OTgsMTIgKzk5OCwxMiBAQAogCS5uYW1lCQk9ICJibG9jayIsCiB9OwogCi1zdGF0aWMgY2hhciAqYmxvY2tfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKmJsb2NrX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpOwogCi0JaWYgKGRpc2stPm5vZGVuYW1lKQotCQlyZXR1cm4gZGlzay0+bm9kZW5hbWUoZGlzayk7CisJaWYgKGRpc2stPmRldm5vZGUpCisJCXJldHVybiBkaXNrLT5kZXZub2RlKGRpc2ssIG1vZGUpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogCS5uYW1lCQk9ICJkaXNrIiwKIAkuZ3JvdXBzCQk9IGRpc2tfYXR0cl9ncm91cHMsCiAJLnJlbGVhc2UJPSBkaXNrX3JlbGVhc2UsCi0JLm5vZGVuYW1lCT0gYmxvY2tfbm9kZW5hbWUsCisJLmRldm5vZGUJPSBibG9ja19kZXZub2RlLAogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCAyYTFkNDFmLi42ZWU1M2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAKIG9iai0kKENPTkZJR19SQVBJRElPKQkJKz0gcmFwaWRpby8KIG9iai15CQkJCSs9IHZpZGVvLwogb2JqLSQoQ09ORklHX0FDUEkpCQkrPSBhY3BpLworb2JqLSQoQ09ORklHX1NGSSkJCSs9IHNmaS8KICMgUG5QIG11c3QgY29tZSBhZnRlciBBQ1BJIHNpbmNlIGl0IHdpbGwgZXZlbnR1YWxseSBuZWVkIHRvIGNoZWNrIGlmIGFjcGkKICMgd2FzIHVzZWQgYW5kIGRvIG5vdGhpbmcgaWYgc28KIG9iai0kKENPTkZJR19QTlApCQkrPSBwbnAvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDdlYzdkODguLmRkODcyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC02MCw3ICs2MCwxMSBAQAogCSAgL3Byb2MvYWNwaS9mYWR0ICgvc3lzL2Zpcm13YXJlL2FjcGkvdGFibGVzL0ZBQ1ApCiAJICAvcHJvYy9hY3BpL2RlYnVnX2xheWVyICgvc3lzL21vZHVsZS9hY3BpL3BhcmFtZXRlcnMvZGVidWdfbGF5ZXIpCiAJICAvcHJvYy9hY3BpL2RlYnVnX2xldmVsICgvc3lzL21vZHVsZS9hY3BpL3BhcmFtZXRlcnMvZGVidWdfbGV2ZWwpCi0KKwkgIC9wcm9jL2FjcGkvcHJvY2Vzc29yLyovcG93ZXIgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1LyovY3B1aWRsZS8qKQorCSAgL3Byb2MvYWNwaS9wcm9jZXNzb3IvKi9wZXJmb3JtYW5jZSAoL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvKi8KKwkJY3B1ZnJlcS8qKQorCSAgL3Byb2MvYWNwaS9wcm9jZXNzb3IvKi90aHJvdHRsaW5nICgvc3lzL2NsYXNzL3RoZXJtYWwvCisJCWNvb2xpbmdfZGV2aWNlKi8qKQogCSAgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiAvcHJvYy9hY3BpLyBmaWxlcwogCSAgYW5kIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QgeWV0IGV4aXN0IGluIC9zeXMuCiAKQEAgLTgyLDYgKzg2LDE3IEBACiAKIAkgIFNheSBOIHRvIGRlbGV0ZSBwb3dlciAvcHJvYy9hY3BpLyBkaXJlY3RvcmllcyB0aGF0IGhhdmUgbW92ZWQgdG8gL3N5cy8KIAorY29uZmlnIEFDUElfUE9XRVJfTUVURVIKKwl0cmlzdGF0ZSAiQUNQSSA0LjAgcG93ZXIgbWV0ZXIiCisJZGVwZW5kcyBvbiBIV01PTgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGV4cG9zZXMgQUNQSSA0LjAgcG93ZXIgbWV0ZXJzIGFzIGhhcmR3YXJlIG1vbml0b3JpbmcKKwkgIGRldmljZXMuICBTYXkgWSAob3IgTSkgaWYgeW91IGhhdmUgYSBjb21wdXRlciB3aXRoIEFDUEkgNC4wIGZpcm13YXJlCisJICBhbmQgYSBwb3dlciBtZXRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG93ZXItbWV0ZXIuCisKIGNvbmZpZyBBQ1BJX1NZU0ZTX1BPV0VSCiAJYm9vbCAiRnV0dXJlIHBvd2VyIC9zeXMgaW50ZXJmYWNlIgogCXNlbGVjdCBQT1dFUl9TVVBQTFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCAwM2E5ODViLi44MmNkNDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCkBAIC01Niw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfQUNQSV9CQVRURVJZKQkrPSBiYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNic2hjLm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNicy5vCitvYmotJChDT05GSUdfQUNQSV9QT1dFUl9NRVRFUikJKz0gcG93ZXJfbWV0ZXIubwogCiAjIHByb2Nlc3NvciBoYXMgaXRzIG93biAicHJvY2Vzc29yLiIgbW9kdWxlX3BhcmFtIG5hbWVzcGFjZQogcHJvY2Vzc29yLXkJCQk6PSBwcm9jZXNzb3JfY29yZS5vIHByb2Nlc3Nvcl90aHJvdHRsaW5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggMGRmOGZjYi4uOThiOTY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX0FDX0NMQVNTCQkJImFjX2FkYXB0ZXIiCiAjZGVmaW5lIEFDUElfQUNfREVWSUNFX05BTUUJCSJBQyBBZGFwdGVyIgogI2RlZmluZSBBQ1BJX0FDX0ZJTEVfU1RBVEUJCSJzdGF0ZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwppbmRleCA5YTYyMjI0Li4yOGNjZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCkBAIC01Myw3ICs1Myw2IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9tZW1vcnlfZGV2aWNlX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGFjcGlfbWVtb3J5X2RldmljZV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKLXN0YXRpYyBpbnQgYWNwaV9tZW1vcnlfZGV2aWNlX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBtZW1vcnlfZGV2aWNlX2lkc1tdID0gewogCXtBQ1BJX01FTU9SWV9ERVZJQ0VfSElELCAwfSwKQEAgLTY4LDcgKzY3LDYgQEAKIAkub3BzID0gewogCQkuYWRkID0gYWNwaV9tZW1vcnlfZGV2aWNlX2FkZCwKIAkJLnJlbW92ZSA9IGFjcGlfbWVtb3J5X2RldmljZV9yZW1vdmUsCi0JCS5zdGFydCA9IGFjcGlfbWVtb3J5X2RldmljZV9zdGFydCwKIAkJfSwKIH07CiAKQEAgLTQzMSw2ICs0MjksMjIgQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICIlcyBcbiIsIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSk7CiAKKwkvKgorCSAqIEVhcmx5IGJvb3QgY29kZSBoYXMgcmVjb2duaXplZCBtZW1vcnkgYXJlYSBieSBFRkkvRTgyMC4KKwkgKiBJZiBEU0RUIHNob3dzIHRoZXNlIG1lbW9yeSBkZXZpY2VzIG9uIGJvb3QsIGhvdHBsdWcgaXMgbm90IG5lY2Vzc2FyeQorCSAqIGZvciB0aGVtLiBTbywgaXQganVzdCByZXR1cm5zIHVudGlsIGNvbXBsZXRpb24gb2YgdGhpcyBkcml2ZXIncworCSAqIHN0YXJ0IHVwLgorCSAqLworCWlmICghYWNwaV9ob3RtZW1faW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJaWYgKCFhY3BpX21lbW9yeV9jaGVja19kZXZpY2UobWVtX2RldmljZSkpIHsKKwkJLyogY2FsbCBhZGRfbWVtb3J5IGZ1bmMgKi8KKwkJcmVzdWx0ID0gYWNwaV9tZW1vcnlfZW5hYmxlX2RldmljZShtZW1fZGV2aWNlKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkiRXJyb3IgaW4gYWNwaV9tZW1vcnlfZW5hYmxlX2RldmljZVxuIik7CisJfQogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ0OCwzMiArNDYyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhY3BpX21lbW9yeV9kZXZpY2Vfc3RhcnQgKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UgKm1lbV9kZXZpY2U7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQkvKgotCSAqIEVhcmx5IGJvb3QgY29kZSBoYXMgcmVjb2duaXplZCBtZW1vcnkgYXJlYSBieSBFRkkvRTgyMC4KLQkgKiBJZiBEU0RUIHNob3dzIHRoZXNlIG1lbW9yeSBkZXZpY2VzIG9uIGJvb3QsIGhvdHBsdWcgaXMgbm90IG5lY2Vzc2FyeQotCSAqIGZvciB0aGVtLiBTbywgaXQganVzdCByZXR1cm5zIHVudGlsIGNvbXBsZXRpb24gb2YgdGhpcyBkcml2ZXIncwotCSAqIHN0YXJ0IHVwLgotCSAqLwotCWlmICghYWNwaV9ob3RtZW1faW5pdGlhbGl6ZWQpCi0JCXJldHVybiAwOwotCi0JbWVtX2RldmljZSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQotCWlmICghYWNwaV9tZW1vcnlfY2hlY2tfZGV2aWNlKG1lbV9kZXZpY2UpKSB7Ci0JCS8qIGNhbGwgYWRkX21lbW9yeSBmdW5jICovCi0JCXJlc3VsdCA9IGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2UobWVtX2RldmljZSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCi0JCQkJIkVycm9yIGluIGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2VcbiIpOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGZvciBtZW1vcnkgZGV2aWNlCiAgKi8KQEAgLTQ4MSwyNiArNDY5LDIzIEBACiB7CiAJY2hhciAqaGFyZHdhcmVfaWQ7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87CiAKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gc3RhdHVzOwogCi0JaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwogCWlmICghKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpKSB7Ci0JCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAKLQloYXJkd2FyZV9pZCA9IGluZm8tPmhhcmR3YXJlX2lkLnZhbHVlOworCWhhcmR3YXJlX2lkID0gaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nOwogCWlmICgoaGFyZHdhcmVfaWQgPT0gTlVMTCkgfHwKIAkgICAgKHN0cmNtcChoYXJkd2FyZV9pZCwgQUNQSV9NRU1PUllfREVWSUNFX0hJRCkpKQogCQlzdGF0dXMgPSBBRV9FUlJPUjsKIAotCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlrZnJlZShpbmZvKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL2FjcGljYS9NYWtlZmlsZQppbmRleCA3MmFjMjhkLi5lNzk3M2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIGFjcGkteSArPSBuc2FjY2Vzcy5vICBuc2xvYWQubyAgICBuc3NlYXJjaC5vICBuc3hmZXZhbC5vIFwKIAkgbnNhbGxvYy5vICAgbnNldmFsLm8gICAgbnNuYW1lcy5vICAgbnN1dGlscy5vICAgbnN4Zm5hbWUubyBcCiAJIG5zZHVtcC5vICAgIG5zaW5pdC5vICAgIG5zb2JqZWN0Lm8gIG5zd2Fsay5vICAgIG5zeGZvYmoubyAgXAotCSBuc3BhcnNlLm8gICBuc3ByZWRlZi5vCisJIG5zcGFyc2UubyAgIG5zcHJlZGVmLm8gIG5zcmVwYWlyLm8KIAogYWNwaS0kKEFDUElfRlVUVVJFX1VTQUdFKSArPSBuc2R1bXBkdi5vCiAKQEAgLTQ0LDQgKzQ0LDQgQEAKIAogYWNwaS15ICs9IHV0YWxsb2MubyB1dGRlYnVnLm8gdXRldmFsLm8gdXRpbml0Lm8gdXRtaXNjLm8gdXR4ZmFjZS5vIFwKIAkJdXRjb3B5Lm8gdXRkZWxldGUubyB1dGdsb2JhbC5vIHV0bWF0aC5vIHV0b2JqZWN0Lm8gXAotCQl1dHN0YXRlLm8gdXRtdXRleC5vIHV0b2JqZWN0Lm8gdXRyZXNyYy5vIHV0bG9jay5vCisJCXV0c3RhdGUubyB1dG11dGV4Lm8gdXRvYmplY3QubyB1dHJlc3JjLm8gdXRsb2NrLm8gdXRpZHMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCmluZGV4IGU2Nzc3ZmIuLjhlNjc5ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKQEAgLTE4Myw3ICsxODMsNyBAQAogCiAvKiBPcGVyYXRpb24gcmVnaW9ucyAqLwogCi0jZGVmaW5lIEFDUElfTlVNX1BSRURFRklORURfUkVHSU9OUyAgICAgOAorI2RlZmluZSBBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlMgICAgIDkKICNkZWZpbmUgQUNQSV9VU0VSX1JFR0lPTl9CRUdJTiAgICAgICAgICAweDgwCiAKIC8qIE1heGltdW0gc3BhY2VfaWRzIGZvciBPcGVyYXRpb24gUmVnaW9ucyAqLwpAQCAtMTk5LDkgKzE5OSwxNSBAQAogI2RlZmluZSBBQ1BJX1JTRFBfQ0hFQ0tTVU1fTEVOR1RIICAgICAgIDIwCiAjZGVmaW5lIEFDUElfUlNEUF9YQ0hFQ0tTVU1fTEVOR1RIICAgICAgMzYKIAotLyogU01CdXMgYmlkaXJlY3Rpb25hbCBidWZmZXIgc2l6ZSAqLworLyogU01CdXMgYW5kIElQTUkgYmlkaXJlY3Rpb25hbCBidWZmZXIgc2l6ZSAqLwogCiAjZGVmaW5lIEFDUElfU01CVVNfQlVGRkVSX1NJWkUgICAgICAgICAgMzQKKyNkZWZpbmUgQUNQSV9JUE1JX0JVRkZFUl9TSVpFICAgICAgICAgICA2NgorCisvKiBfc3hfZCBhbmQgX3N4X3cgY29udHJvbCBtZXRob2RzICovCisKKyNkZWZpbmUgQUNQSV9OVU1fc3hfZF9NRVRIT0RTICAgICAgICAgICA0CisjZGVmaW5lIEFDUElfTlVNX3N4X3dfTUVUSE9EUyAgICAgICAgICAgNQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGVidWcuaAppbmRleCA2MmM1OWRmLi5hNGZiMDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGVidWcuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGVidWcuaApAQCAtMTU0LDEwICsxNTQsNiBAQAogYWNwaV9kYl9kaXNwbGF5X2FyZ3VtZW50X29iamVjdCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKIAkJCQlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKTsKIAotdm9pZCBhY3BpX2RiX2NoZWNrX3ByZWRlZmluZWRfbmFtZXModm9pZCk7Ci0KLXZvaWQgYWNwaV9kYl9iYXRjaF9leGVjdXRlKHZvaWQpOwotCiAvKgogICogZGJleGVjIC0gZGVidWdnZXIgY29udHJvbCBtZXRob2QgZXhlY3V0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAppbmRleCAzZDg3MzYyLi4yOWJhNjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCkBAIC01OCw2ICs1OCwxMCBAQAogI2RlZmluZSBBQ1BJX0lOSVRfR0xPQkFMKGEsYikgYQogI2VuZGlmCiAKKyNpZmRlZiBERUZJTkVfQUNQSV9HTE9CQUxTCisKKy8qIFB1YmxpYyBnbG9iYWxzLCBhdmFpbGFibGUgZnJvbSBvdXRzaWRlIEFDUElDQSBzdWJzeXN0ZW0gKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogUnVudGltZSBjb25maWd1cmF0aW9uIChzdGF0aWMgZGVmYXVsdHMgdGhhdCBjYW4gYmUgb3ZlcnJpZGVuIGF0IHJ1bnRpbWUpCkBAIC03OCw3ICs4Miw3IEBACiAgKiA1KSBBbGxvdyB1bnJlc29sdmVkIHJlZmVyZW5jZXMgKGludmFsaWQgdGFyZ2V0IG5hbWUpIGluIHBhY2thZ2Ugb2JqZWN0cwogICogNikgRW5hYmxlIHdhcm5pbmcgbWVzc2FnZXMgZm9yIGJlaGF2aW9yIHRoYXQgaXMgbm90IEFDUEkgc3BlYyBjb21wbGlhbnQKICAqLwotQUNQSV9FWFRFUk4gdTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9lbmFibGVfaW50ZXJwcmV0ZXJfc2xhY2ssIEZBTFNFKTsKK3U4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfZW5hYmxlX2ludGVycHJldGVyX3NsYWNrLCBGQUxTRSk7CiAKIC8qCiAgKiBBdXRvbWF0aWNhbGx5IHNlcmlhbGl6ZSBBTEwgY29udHJvbCBtZXRob2RzPyBEZWZhdWx0IGlzIEZBTFNFLCBtZWFuaW5nCkBAIC04NiwyNyArOTAsMzYgQEAKICAqIE9ubHkgY2hhbmdlIHRoaXMgaWYgdGhlIEFTTCBjb2RlIGlzIHBvb3JseSB3cml0dGVuIGFuZCBjYW5ub3QgaGFuZGxlCiAgKiByZWVudHJhbmN5IGV2ZW4gdGhvdWdoIG1ldGhvZHMgYXJlIG1hcmtlZCAiTm90U2VyaWFsaXplZCIuCiAgKi8KLUFDUElfRVhURVJOIHU4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfYWxsX21ldGhvZHNfc2VyaWFsaXplZCwgRkFMU0UpOwordTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9hbGxfbWV0aG9kc19zZXJpYWxpemVkLCBGQUxTRSk7CiAKIC8qCiAgKiBDcmVhdGUgdGhlIHByZWRlZmluZWQgX09TSSBtZXRob2QgaW4gdGhlIG5hbWVzcGFjZT8gRGVmYXVsdCBpcyBUUlVFCiAgKiBiZWNhdXNlIEFDUEkgQ0EgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIG90aGVyIEFDUEkgaW1wbGVtZW50YXRpb25zLgogICogQ2hhbmdpbmcgdGhpcyB3aWxsIHJldmVydCBBQ1BJIENBIChhbmQgbWFjaGluZSBBU0wpIHRvIHByZS1PU0kgYmVoYXZpb3IuCiAgKi8KLUFDUElfRVhURVJOIHU4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfY3JlYXRlX29zaV9tZXRob2QsIFRSVUUpOwordTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9jcmVhdGVfb3NpX21ldGhvZCwgVFJVRSk7CiAKIC8qCiAgKiBEaXNhYmxlIHdha2V1cCBHUEVzIGR1cmluZyBydW50aW1lPyBEZWZhdWx0IGlzIFRSVUUgYmVjYXVzZSBXQUtFIGFuZAogICogUlVOVElNRSBHUEVzIHNob3VsZCBuZXZlciBiZSBzaGFyZWQsIGFuZCBXQUtFIEdQRXMgc2hvdWxkIHR5cGljYWxseSBvbmx5CiAgKiBiZSBlbmFibGVkIGp1c3QgYmVmb3JlIGdvaW5nIHRvIHNsZWVwLgogICovCi1BQ1BJX0VYVEVSTiB1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZCwgVFJVRSk7Cit1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZCwgVFJVRSk7CiAKIC8qCiAgKiBPcHRpb25hbGx5IHVzZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIEFDUEkgcmVnaXN0ZXIgd2lkdGhzLiBTZXQgdGhpcyB0bwogICogVFJVRSB0byB1c2UgdGhlIGRlZmF1bHRzLCBpZiBhbiBGQURUIGNvbnRhaW5zIGluY29ycmVjdCB3aWR0aHMvbGVuZ3Rocy4KICAqLwotQUNQSV9FWFRFUk4gdTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF91c2VfZGVmYXVsdF9yZWdpc3Rlcl93aWR0aHMsIFRSVUUpOwordTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF91c2VfZGVmYXVsdF9yZWdpc3Rlcl93aWR0aHMsIFRSVUUpOworCisvKiBhY3BpX2dibF9GQURUIGlzIGEgbG9jYWwgY29weSBvZiB0aGUgRkFEVCwgY29udmVydGVkIHRvIGEgY29tbW9uIGZvcm1hdC4gKi8KKworc3RydWN0IGFjcGlfdGFibGVfZmFkdCBhY3BpX2dibF9GQURUOwordTMyIGFjcGlfY3VycmVudF9ncGVfY291bnQ7Cit1MzIgYWNwaV9nYmxfdHJhY2VfZmxhZ3M7CithY3BpX25hbWUgYWNwaV9nYmxfdHJhY2VfbWV0aG9kX25hbWU7CisKKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMTQsMTEgKzEyNyw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFJ1bnRpbWUgY29uZmlndXJhdGlvbiBvZiBkZWJ1ZyBwcmludCBsZXZlbHMgKi8KLQotZXh0ZXJuIHUzMiBhY3BpX2RiZ19sZXZlbDsKLWV4dGVybiB1MzIgYWNwaV9kYmdfbGF5ZXI7Ci0KIC8qIFByb2NlZHVyZSBuZXN0aW5nIGxldmVsIGZvciBkZWJ1ZyBvdXRwdXQgKi8KIAogZXh0ZXJuIHUzMiBhY3BpX2dibF9uZXN0aW5nX2xldmVsOwpAQCAtMTI3LDEwICsxMzUsOCBAQAogCiBBQ1BJX0VYVEVSTiB1MzIgYWNwaV9nYmxfb3JpZ2luYWxfZGJnX2xldmVsOwogQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX29yaWdpbmFsX2RiZ19sYXllcjsKLUFDUElfRVhURVJOIGFjcGlfbmFtZSBhY3BpX2dibF90cmFjZV9tZXRob2RfbmFtZTsKIEFDUElfRVhURVJOIHUzMiBhY3BpX2dibF90cmFjZV9kYmdfbGV2ZWw7CiBBQ1BJX0VYVEVSTiB1MzIgYWNwaV9nYmxfdHJhY2VfZGJnX2xheWVyOwotQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX3RyYWNlX2ZsYWdzOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNDIsMTAgKzE0OCw4IEBACiAgKiBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QgaXMgdGhlIG1hc3RlciBsaXN0IG9mIEFDUEkgdGFibGVzIGZvdW5kIGluIHRoZQogICogUlNEVC9YU0RULgogICoKLSAqIGFjcGlfZ2JsX0ZBRFQgaXMgYSBsb2NhbCBjb3B5IG9mIHRoZSBGQURULCBjb252ZXJ0ZWQgdG8gYSBjb21tb24gZm9ybWF0LgogICovCiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9pbnRlcm5hbF9yc2R0IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdDsKLUFDUElfRVhURVJOIHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgYWNwaV9nYmxfRkFEVDsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX3RhYmxlX2ZhY3MgKmFjcGlfZ2JsX0ZBQ1M7CiAKIC8qIFRoZXNlIGFkZHJlc3NlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBGQURUIEV2ZW50IEJsb2NrIGFkZHJlc3NlcyAqLwpAQCAtMjYxLDcgKzI2NSw4IEBACiBleHRlcm4gdTggYWNwaV9nYmxfc2h1dGRvd247CiBleHRlcm4gdTMyIGFjcGlfZ2JsX3N0YXJ0dXBfZmxhZ3M7CiBleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfc2xlZXBfc3RhdGVfbmFtZXNbQUNQSV9TX1NUQVRFX0NPVU5UXTsKLWV4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9oaWdoZXN0X2RzdGF0ZV9uYW1lc1s0XTsKK2V4dGVybiBjb25zdCBjaGFyICphY3BpX2dibF9sb3dlc3RfZHN0YXRlX25hbWVzW0FDUElfTlVNX3N4X3dfTUVUSE9EU107CitleHRlcm4gY29uc3QgY2hhciAqYWNwaV9nYmxfaGlnaGVzdF9kc3RhdGVfbmFtZXNbQUNQSV9OVU1fc3hfZF9NRVRIT0RTXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWNwaV9vcGNvZGVfaW5mbyBhY3BpX2dibF9hbWxfb3BfaW5mb1tBTUxfTlVNX09QQ09ERVNdOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3JlZ2lvbl90eXBlc1tBQ1BJX05VTV9QUkVERUZJTkVEX1JFR0lPTlNdOwogCkBAIC0yOTAsNiArMjk1LDcgQEAKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlIGFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3Q7CiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqYWNwaV9nYmxfcm9vdF9ub2RlOwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfZ2JsX2ZhZHRfZ3BlX2RldmljZTsKK0FDUElfRVhURVJOIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmFjcGlfZ2JsX21vZHVsZV9jb2RlX2xpc3Q7CiAKIGV4dGVybiBjb25zdCB1OCBhY3BpX2dibF9uc19wcm9wZXJ0aWVzW0FDUElfTlVNX05TX1RZUEVTXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX25hbWVzCkBAIC0zNDAsNyArMzQ2LDYgQEAKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICphY3BpX2dibF9ncGVfeHJ1cHRfbGlzdF9oZWFkOwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8KICphY3BpX2dibF9ncGVfZmFkdF9ibG9ja3NbQUNQSV9NQVhfR1BFX0JMT0NLU107Ci1BQ1BJX0VYVEVSTiB1MzIgYWNwaV9jdXJyZW50X2dwZV9jb3VudDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAppbmRleCA0YWZhM2Q4Li4zNjE5MmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaApAQCAtNjIsNiArNjIsMTQgQEAKIC8qCiAgKiBod3JlZ3MgLSBBQ1BJIFJlZ2lzdGVyIEkvTwogICovCithY3BpX3N0YXR1cworYWNwaV9od192YWxpZGF0ZV9yZWdpc3RlcihzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZywKKwkJCSAgdTggbWF4X2JpdF93aWR0aCwgdTY0ICphZGRyZXNzKTsKKworYWNwaV9zdGF0dXMgYWNwaV9od19yZWFkKHUzMiAqdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKTsKKworYWNwaV9zdGF0dXMgYWNwaV9od193cml0ZSh1MzIgdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKTsKKwogc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKmFjcGlfaHdfZ2V0X2JpdF9yZWdpc3Rlcl9pbmZvKHUzMiByZWdpc3Rlcl9pZCk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfaHdfd3JpdGVfcG0xX2NvbnRyb2wodTMyIHBtMWFfY29udHJvbCwgdTMyIHBtMWJfY29udHJvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmgKaW5kZXggZThkYjdhMy4uNWRiOWYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2ludGVycC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaApAQCAtNDYxLDkgKzQ2MSw5IEBACiAKIHZvaWQgYWNwaV9leF9yZWxlYXNlX2dsb2JhbF9sb2NrKHUzMiBydWxlKTsKIAotdm9pZCBhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKHUzMiBudW1lcmljX2lkLCBjaGFyICpvdXRfc3RyaW5nKTsKK3ZvaWQgYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZyhjaGFyICpkZXN0LCBhY3BpX2ludGVnZXIgY29tcHJlc3NlZF9pZCk7CiAKLXZvaWQgYWNwaV9leF91bnNpZ25lZF9pbnRlZ2VyX3RvX3N0cmluZyhhY3BpX2ludGVnZXIgdmFsdWUsIGNoYXIgKm91dF9zdHJpbmcpOwordm9pZCBhY3BpX2V4X2ludGVnZXJfdG9fc3RyaW5nKGNoYXIgKmRlc3QsIGFjcGlfaW50ZWdlciB2YWx1ZSk7CiAKIC8qCiAgKiBleHJlZ2lvbiAtIGRlZmF1bHQgb3BfcmVnaW9uIGhhbmRsZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCmluZGV4IGVlOTg2ZWQuLjgxZTY0ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCkBAIC0zNjksNiArMzY5LDE5IEBACiAJc3RydWN0IGFjcGlfcGFja2FnZV9pbmZvMyByZXRfaW5mbzM7CiB9OwogCisvKiBEYXRhIGJsb2NrIHVzZWQgZHVyaW5nIG9iamVjdCB2YWxpZGF0aW9uICovCisKK3N0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSB7CisJY2hhciAqcGF0aG5hbWU7CisJY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnByZWRlZmluZWQ7CisJdTMyIGZsYWdzOworCXU4IG5vZGVfZmxhZ3M7Cit9OworCisvKiBEZWZpbmVzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfT0JKRUNUX1JFUEFJUkVEICAgIDEKKwogLyoKICAqIEJpdG1hcHBlZCByZXR1cm4gdmFsdWUgdHlwZXMKICAqIE5vdGU6IHRoZSBhY3R1YWwgZGF0YSB0eXBlcyBtdXN0IGJlIGNvbnRpZ3VvdXMsIGEgbG9vcCBpbiBuc3ByZWRlZi5jCkBAIC04ODUsNiArODk4LDkgQEAKICNkZWZpbmUgQUNQSV9PU0lfV0lOX1hQX1NQMiAgICAgICAgICAgICAweDA1CiAjZGVmaW5lIEFDUElfT1NJX1dJTlNSVl8yMDAzX1NQMSAgICAgICAgMHgwNgogI2RlZmluZSBBQ1BJX09TSV9XSU5fVklTVEEgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQUNQSV9PU0lfV0lOU1JWXzIwMDggICAgICAgICAgICAweDA4CisjZGVmaW5lIEFDUElfT1NJX1dJTl9WSVNUQV9TUDEgICAgICAgICAgMHgwOQorI2RlZmluZSBBQ1BJX09TSV9XSU5fNyAgICAgICAgICAgICAgICAgIDB4MEEKIAogI2RlZmluZSBBQ1BJX0FMV0FZU19JTExFR0FMICAgICAgICAgICAgIDB4MDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCmluZGV4IDkxYWM3ZDcuLjNhY2Q5YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKQEAgLTM0MCw2ICszNDAsNyBAQAogICovCiAjZGVmaW5lIEFDUElfRVJST1JfTkFNRVNQQUNFKHMsIGUpICAgICAgYWNwaV9uc19yZXBvcnRfZXJyb3IgKEFFX0lORk8sIHMsIGUpOwogI2RlZmluZSBBQ1BJX0VSUk9SX01FVEhPRChzLCBuLCBwLCBlKSAgIGFjcGlfbnNfcmVwb3J0X21ldGhvZF9lcnJvciAoQUVfSU5GTywgcywgbiwgcCwgZSk7CisjZGVmaW5lIEFDUElfV0FSTl9QUkVERUZJTkVEKHBsaXN0KSAgICAgYWNwaV91dF9wcmVkZWZpbmVkX3dhcm5pbmcgcGxpc3QKIAogI2Vsc2UKIApAQCAtMzQ3LDYgKzM0OCw3IEBACiAKICNkZWZpbmUgQUNQSV9FUlJPUl9OQU1FU1BBQ0UocywgZSkKICNkZWZpbmUgQUNQSV9FUlJPUl9NRVRIT0QocywgbiwgcCwgZSkKKyNkZWZpbmUgQUNQSV9XQVJOX1BSRURFRklORUQocGxpc3QpCiAjZW5kaWYJCS8qIEFDUElfTk9fRVJST1JfTUVTU0FHRVMgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaAppbmRleCA5NGNkYzJiLi4wOWEyNzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCkBAIC03Myw2ICs3MywxNCBAQAogI2RlZmluZSBBQ1BJX05TX1dBTEtfVU5MT0NLICAgICAgICAgMHgwMQogI2RlZmluZSBBQ1BJX05TX1dBTEtfVEVNUF9OT0RFUyAgICAgMHgwMgogCisvKiBPYmplY3QgaXMgbm90IGEgcGFja2FnZSBlbGVtZW50ICovCisKKyNkZWZpbmUgQUNQSV9OT1RfUEFDS0FHRV9FTEVNRU5UICAgIEFDUElfVUlOVDMyX01BWAorCisvKiBBbHdheXMgZW1pdCB3YXJuaW5nIG1lc3NhZ2UsIG5vdCBkZXBlbmRlbnQgb24gbm9kZSBmbGFncyAqLworCisjZGVmaW5lIEFDUElfV0FSTl9BTFdBWVMgICAgICAgICAgICAwCisKIC8qCiAgKiBuc2luaXQgLSBOYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24KICAqLwpAQCAtMTQ0LDYgKzE1Miw4IEBACiAKIHZvaWQgYWNwaV9uc19kZWxldGVfbm9kZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSk7CiAKK3ZvaWQgYWNwaV9uc19yZW1vdmVfbm9kZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSk7CisKIHZvaWQKIGFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9zdWJ0cmVlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfaGFuZGxlKTsKIApAQCAtMTg2LDYgKzE5Niw4IEBACiAgKi8KIGFjcGlfc3RhdHVzIGFjcGlfbnNfZXZhbHVhdGUoc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbyk7CiAKK3ZvaWQgYWNwaV9uc19leGVjX21vZHVsZV9jb2RlX2xpc3Qodm9pZCk7CisKIC8qCiAgKiBuc3ByZWRlZiAtIFN1cHBvcnQgZm9yIHByZWRlZmluZWQvcmVzZXJ2ZWQgbmFtZXMKICAqLwpAQCAtMjYwLDYgKzI3MiwxOSBAQAogCQkJICBhY3BpX29iamVjdF9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKipkYXRhKTsKIAogLyoKKyAqIG5zcmVwYWlyIC0gcmV0dXJuIG9iamVjdCByZXBhaXIgZm9yIHByZWRlZmluZWQgbWV0aG9kcy9vYmplY3RzCisgKi8KK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9vYmplY3Qoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkgICAgICB1MzIgZXhwZWN0ZWRfYnR5cGVzLAorCQkgICAgICB1MzIgcGFja2FnZV9pbmRleCwKKwkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfcmVwYWlyX3BhY2thZ2VfbGlzdChzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKm9ial9kZXNjX3B0cik7CisKKy8qCiAgKiBuc3NlYXJjaCAtIE5hbWVzcGFjZSBzZWFyY2hpbmcgYW5kIGVudHJ5CiAgKi8KIGFjcGlfc3RhdHVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKaW5kZXggZWI2ZjAzOC4uYjM5ZDY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaApAQCAtOTgsNiArOTgsNyBAQAogI2RlZmluZSBBT1BPQkpfU0VUVVBfQ09NUExFVEUgICAgICAgMHgxMAogI2RlZmluZSBBT1BPQkpfU0lOR0xFX0RBVFVNICAgICAgICAgMHgyMAogI2RlZmluZSBBT1BPQkpfSU5WQUxJRCAgICAgICAgICAgICAgMHg0MAkvKiBVc2VkIGlmIGhvc3QgT1Mgd29uJ3QgYWxsb3cgYW4gb3BfcmVnaW9uIGFkZHJlc3MgKi8KKyNkZWZpbmUgQU9QT0JKX01PRFVMRV9MRVZFTCAgICAgICAgIDB4ODAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaAppbmRleCAyM2VlMGZiLi4yMjg4MWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcGFyc2VyLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oCkBAIC02Miw2ICs2Miw4IEBACiAjZGVmaW5lIEFDUElfUEFSU0VfREVGRVJSRURfT1AgICAgICAgICAgMHgwMTAwCiAjZGVmaW5lIEFDUElfUEFSU0VfRElTQVNTRU1CTEUgICAgICAgICAgMHgwMjAwCiAKKyNkZWZpbmUgQUNQSV9QQVJTRV9NT0RVTEVfTEVWRUwgICAgICAgICAweDA0MDAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFBhcnNlciBpbnRlcmZhY2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKaW5kZXggNjNmNjU2YS4uY2Q4MGQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaApAQCAtNjQsOCArNjQsOCBAQAogICogICAgICAoVXNlZCBmb3IgX1BSVykKICAqCiAgKgotICogMikgUFRZUEUyIHBhY2thZ2VzIGNvbnRhaW4gYSB2YXJpYWJsZSBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLiBFYWNoIG9mIHRoZQotICogICAgZGlmZmVyZW50IHR5cGVzIGRlc2NyaWJlIHRoZSBjb250ZW50cyBvZiBlYWNoIG9mIHRoZSBzdWItcGFja2FnZXMuCisgKiAyKSBQVFlQRTIgcGFja2FnZXMgY29udGFpbiBhIFZhcmlhYmxlLWxlbmd0aCBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLiBFYWNoCisgKiAgICBvZiB0aGUgZGlmZmVyZW50IHR5cGVzIGRlc2NyaWJlIHRoZSBjb250ZW50cyBvZiBlYWNoIG9mIHRoZSBzdWItcGFja2FnZXMuCiAgKgogICogQUNQSV9QVFlQRTI6IEVhY2ggc3VicGFja2FnZSBjb250YWlucyAxIG9yIDIgb2JqZWN0IHR5cGVzOgogICogICAgICBvYmplY3QgdHlwZQpAQCAtOTEsNiArOTEsOSBAQAogICogQUNQSV9QVFlQRTJfTUlOOiBFYWNoIHN1YnBhY2thZ2UgaGFzIGEgdmFyaWFibGUgYnV0IG1pbmltdW0gbGVuZ3RoCiAgKiAgICAgIChVc2VkIGZvciBfSFBYKQogICoKKyAqIEFDUElfUFRZUEUyX1JFVl9GSVhFRDogUmV2aXNpb24gYXQgc3RhcnQsIGVhY2ggc3VicGFja2FnZSBpcyBGaXhlZC1sZW5ndGgKKyAqICAgICAgKFVzZWQgZm9yIF9BUlQsIF9GUFMpCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBlbnVtIGFjcGlfcmV0dXJuX3BhY2thZ2VfdHlwZXMgewpAQCAtMTAxLDkgKzEwNCwxMSBAQAogCUFDUElfUFRZUEUyX0NPVU5UID0gNSwKIAlBQ1BJX1BUWVBFMl9QS0dfQ09VTlQgPSA2LAogCUFDUElfUFRZUEUyX0ZJWEVEID0gNywKLQlBQ1BJX1BUWVBFMl9NSU4gPSA4CisJQUNQSV9QVFlQRTJfTUlOID0gOCwKKwlBQ1BJX1BUWVBFMl9SRVZfRklYRUQgPSA5CiB9OwogCisjaWZkZWYgQUNQSV9DUkVBVEVfUFJFREVGSU5FRF9UQUJMRQogLyoKICAqIFByZWRlZmluZWQgbWV0aG9kL29iamVjdCBpbmZvcm1hdGlvbiB0YWJsZS4KICAqCkBAIC0xMzYsMjM5ICsxNDEsMzg0IEBACiAgKiBpcyBzYXZlZCBoZXJlIChyYXRoZXIgdGhhbiBpbiBhIHNlcGFyYXRlIHRhYmxlKSBpbiBvcmRlciB0byBtaW5pbWl6ZSB0aGUKICAqIG92ZXJhbGwgc2l6ZSBvZiB0aGUgc3RvcmVkIGRhdGEuCiAgKi8KLXN0YXRpYyBjb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyBwcmVkZWZpbmVkX25hbWVzW10gPSB7Ci0Jey5pbmZvID0geyJfQUMwIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUMxIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUMyIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUMzIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUM0IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUM1IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUM2IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUM3IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUM4IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUM5IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQURSIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQUwwIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9BTDEiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX0FMMiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfQUwzIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9BTDQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX0FMNSIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfQUw2IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9BTDciLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX0FMOCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfQUw5IiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9BTEMiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9BTEkiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9BTFAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9BTFIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAyLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoIDIgKEludHMpICovCi0Jey5pbmZvID0geyJfQUxUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQkJOIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfQkNMIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKEludHMpICovCi0Jey5pbmZvID0geyJfQkNNIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0JETiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0JGUyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9CSUYiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLAotCQkJCQkgIDksCi0JCQkJCSAgQUNQSV9SVFlQRV9TVFJJTkcgfCBBQ1BJX1JUWVBFX0JVRkZFUiwgNCwgMH19LAkvKiBmaXhlZCAoOSBJbnQpLCg0IFN0cikgKi8KLQl7LmluZm8gPSB7Il9CTFQiLCAzLCAwfX0sCi0Jey5pbmZvID0geyJfQk1DIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0JNRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDUsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDUgSW50KSAqLwotCXsuaW5mbyA9IHsiX0JRQyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0JTVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDQgSW50KSAqLwotCXsuaW5mbyA9IHsiX0JUTSIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0JUUCIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9DQkEiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwJLyogc2VlIFBDSSBmaXJtd2FyZSBzcGVjIDMuMCAqLwotCXsuaW5mbyA9IHsiX0NJRCIsIDAsCi0JIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfU1RSSU5HIHwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCi0Jey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfU1RSSU5HLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChJbnRzL1N0cnMpICovCi0Jey5pbmZvID0geyJfQ1JTIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKLQl7LmluZm8gPSB7Il9DUlQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9DU0QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMl9DT1VOVCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlICgxIEludChuKSwgbi0xIEludCkgKi8KLQl7LmluZm8gPSB7Il9DU1QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMl9QS0dfQ09VTlQsCi0JCQkJCSAgQUNQSV9SVFlQRV9CVUZGRVIsIDEsCi0JCQkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSLCAzLCAwfX0sCS8qIHZhcmlhYmxlICgxIEludChuKSwgbiBQa2cgKDEgQnVmLzMgSW50KSAqLwotCXsuaW5mbyA9IHsiX0RDSyIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0RDUyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0REQyIsIDEsIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfREROIiwgMCwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKLQl7LmluZm8gPSB7Il9ER1MiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9ESVMiLCAwLCAwfX0sCi0Jey5pbmZvID0geyJfRE1BIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKLQl7LmluZm8gPSB7Il9ET0QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoSW50cykgKi8KLQl7LmluZm8gPSB7Il9ET1MiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfRFNNIiwgNCwgQUNQSV9SVFlQRV9BTEx9fSwJLyogTXVzdCByZXR1cm4gYSB0eXBlLCBidXQgaXQgY2FuIGJlIG9mIGFueSB0eXBlICovCi0Jey5pbmZvID0geyJfRFNTIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0RTVyIsIDMsIDB9fSwKLQl7LmluZm8gPSB7Il9FQ18iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9FREwiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX0VKMCIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9FSjEiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfRUoyIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0VKMyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9FSjQiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfRUpEIiwgMCwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKLQl7LmluZm8gPSB7Il9GREUiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAotCXsuaW5mbyA9IHsiX0ZESSIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDE2LCAwLCAwLCAwfX0sCS8qIGZpeGVkICgxNiBJbnQpICovCi0Jey5pbmZvID0geyJfRkRNIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0ZJWCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChJbnRzKSAqLwotCXsuaW5mbyA9IHsiX0dMSyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0dQRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX0dQRSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAkvKiBfR1BFIG1ldGhvZCwgbm90IF9HUEUgc2NvcGUgKi8KLQl7LmluZm8gPSB7Il9HU0IiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9HVEYiLCAwLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAotCXsuaW5mbyA9IHsiX0dUTSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfR1RTIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0hJRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfU1RSSU5HfX0sCi0Jey5pbmZvID0geyJfSE9UIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfSFBQIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgNCwgMCwgMCwgMH19LAkvKiBmaXhlZCAoNCBJbnQpICovCitzdGF0aWMgY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gcHJlZGVmaW5lZF9uYW1lc1tdID0KK3sKKwl7eyJfQUMwIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FDMSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BQzIiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUMzIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FDNCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BQzUiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUM2IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FDNyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BQzgiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUM5IiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FEUiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BTDAiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDEiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDUiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDYiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDciLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTDkiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9BTEMiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQUxJIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0FMUCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BTFIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChQa2dzKSBlYWNoIDIgKEludHMpICovCisJCQkgIHt7e0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDIsMH0sIDAsMH19LAorCisJe3siX0FMVCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9BUlQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogVmFyaWFibGUtbGVuZ3RoICgxIEludChyZXYpLCBuIFBrZyAoMiBSZWYvMTEgSW50KSAqLworCXt7e0FDUElfUFRZUEUyX1JFVl9GSVhFRCwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDIsIEFDUElfUlRZUEVfSU5URUdFUn0sCisJICAxMSwgMH19LAorCisJe3siX0JCTiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9CQ0wiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChJbnRzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwwfSwgMCwwfX0sCisKKwl7eyJfQkNNIiwgMSwgMH19LAorCXt7Il9CQ1QiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQkROIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0JGUyIsIDEsIDB9fSwKKwl7eyJfQklGIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoOSBJbnQpLCg0IFN0cikgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgOSwgQUNQSV9SVFlQRV9TVFJJTkd9LCA0LDB9fSwKKworCXt7Il9CSVgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogRml4ZWQtbGVuZ3RoICgxNiBJbnQpLCg0IFN0cikgKi8KKwl7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxNiwgQUNQSV9SVFlQRV9TVFJJTkd9LCA0LAorCSAgMH19LAorCisJe3siX0JMVCIsIDMsIDB9fSwKKwl7eyJfQk1BIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0JNQyIsIDEsIDB9fSwKKwl7eyJfQk1EIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoNSBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDUsMH0sIDAsMH19LAorCisJe3siX0JNUyIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9CUUMiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfQlNUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoNCBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsMH0sIDAsMH19LAorCisJe3siX0JUTSIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9CVFAiLCAxLCAwfX0sCisJe3siX0NCQSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LCAvKiBTZWUgUENJIGZpcm13YXJlIHNwZWMgMy4wICovCisJe3siX0NETSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9DSUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklORyB8IEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKEludHMvU3RycykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklORywgMCwwfSwgMCwwfX0sCisKKwl7eyJfQ1JTIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfQ1JUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0NTRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKDEgSW50KG4pLCBuLTEgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMl9DT1VOVCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAwLDB9LCAwLDB9fSwKKworCXt7Il9DU1QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoICgxIEludChuKSwgbiBQa2cgKDEgQnVmLzMgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMl9QS0dfQ09VTlQsQUNQSV9SVFlQRV9CVUZGRVIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn0sIDMsMH19LAorCisJe3siX0RDSyIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9EQ1MiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfRERDIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfREROIiwgMCwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKKwl7eyJfREdTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0RJUyIsIDAsIDB9fSwKKwl7eyJfRE1BIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfRE9EIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoSW50cykgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDAsMH0sIDAsMH19LAorCisJe3siX0RPUyIsIDEsIDB9fSwKKwl7eyJfRFNNIiwgNCwgQUNQSV9SVFlQRV9BTEx9fSwgICAgIC8qIE11c3QgcmV0dXJuIGEgdHlwZSwgYnV0IGl0IGNhbiBiZSBvZiBhbnkgdHlwZSAqLworCXt7Il9EU1MiLCAxLCAwfX0sCisJe3siX0RTVyIsIDMsIDB9fSwKKwl7eyJfRFRJIiwgMSwgMH19LAorCXt7Il9FQ18iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfRURMIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9FSjAiLCAxLCAwfX0sCisJe3siX0VKMSIsIDEsIDB9fSwKKwl7eyJfRUoyIiwgMSwgMH19LAorCXt7Il9FSjMiLCAxLCAwfX0sCisJe3siX0VKNCIsIDEsIDB9fSwKKwl7eyJfRUpEIiwgMCwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKKwl7eyJfRkRFIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfRkRJIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoMTYgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxNiwwfSwgMCwwfX0sCisKKwl7eyJfRkRNIiwgMSwgMH19LAorCXt7Il9GSUYiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogRml4ZWQtbGVuZ3RoICg0IEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgNCwgMH0sIDAsIDB9fSwKKworCXt7Il9GSVgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChJbnRzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwwfSwgMCwwfX0sCisKKwl7eyJfRlBTIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIFZhcmlhYmxlLWxlbmd0aCAoMSBJbnQocmV2KSwgbiBQa2cgKDUgSW50KSAqLworCXt7e0FDUElfUFRZUEUyX1JFVl9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwfSwgMCwgMH19LAorCisJe3siX0ZTTCIsIDEsIDB9fSwKKwl7eyJfRlNUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIEZpeGVkLWxlbmd0aCAoMyBJbnQpICovCisJe3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgMywgMH0sIDAsIDB9fSwKKworCXt7Il9HQUkiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfR0hMIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX0dMSyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9HUEQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfR1BFIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sIC8qIF9HUEUgbWV0aG9kLCBub3QgX0dQRSBzY29wZSAqLworCXt7Il9HU0IiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfR1RGIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfR1RNIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfR1RTIiwgMSwgMH19LAorCXt7Il9ISUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklOR319LAorCXt7Il9IT1QiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfSFBQIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoNCBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsMH0sIDAsMH19LAogCiAJLyoKLQkgKiBGb3IgX0hQWCwgYSBzaW5nbGUgcGFja2FnZSBpcyByZXR1cm5lZCwgY29udGFpbmluZyBhIHZhcmlhYmxlIG51bWJlciBvZiBzdWItcGFja2FnZXMuCi0JICogRWFjaCBzdWItcGFja2FnZSBjb250YWlucyBhIFBDSSByZWNvcmQgc2V0dGluZy4gVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHR5cGUgb2YKLQkgKiByZWNvcmQgc2V0dGluZ3MsIG9mIGRpZmZlcmVudCBsZW5ndGhzLCBidXQgYWxsIGVsZW1lbnRzIG9mIGFsbCBzZXR0aW5ncyBhcmUgSW50ZWdlcnMuCisJICogRm9yIF9IUFgsIGEgc2luZ2xlIHBhY2thZ2UgaXMgcmV0dXJuZWQsIGNvbnRhaW5pbmcgYSBWYXJpYWJsZS1sZW5ndGggbnVtYmVyCisJICogb2Ygc3ViLXBhY2thZ2VzLiBFYWNoIHN1Yi1wYWNrYWdlIGNvbnRhaW5zIGEgUENJIHJlY29yZCBzZXR0aW5nLgorCSAqIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB0eXBlIG9mIHJlY29yZCBzZXR0aW5ncywgb2YgZGlmZmVyZW50CisJICogbGVuZ3RocywgYnV0IGFsbCBlbGVtZW50cyBvZiBhbGwgc2V0dGluZ3MgYXJlIEludGVnZXJzLgogCSAqLwotCXsuaW5mbyA9IHsiX0hQWCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyX01JTiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoICh2YXIgSW50cykgKi8KLQl7LmluZm8gPSB7Il9JRlQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwJLyogc2VlIElQTUkgc3BlYyAqLwotCXsuaW5mbyA9IHsiX0lOSSIsIDAsIDB9fSwKLQl7LmluZm8gPSB7Il9JUkMiLCAwLCAwfX0sCi0Jey5pbmZvID0geyJfTENLIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX0xJRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX01BVCIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfTUxTIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfU1RSSU5HLCAyLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoICgyIFN0cikgKi8KLQl7LmluZm8gPSB7Il9NU0ciLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfT0ZGIiwgMCwgMH19LAotCXsuaW5mbyA9IHsiX09OXyIsIDAsIDB9fSwKLQl7LmluZm8gPSB7Il9PU18iLCAwLCBBQ1BJX1JUWVBFX1NUUklOR319LAotCXsuaW5mbyA9IHsiX09TQyIsIDQsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfT1NUIiwgMywgMH19LAotCXsuaW5mbyA9IHsiX1BDTCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfUENUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfQlVGRkVSLCAyLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgyIEJ1ZikgKi8KLQl7LmluZm8gPSB7Il9QREMiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfUElDIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX1BMRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9CVUZGRVIsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKEJ1ZnMpICovCi0Jey5pbmZvID0geyJfUFBDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUFBFIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIHNlZSBkaWc2NCBzcGVjICovCi0Jey5pbmZvID0geyJfUFIwIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUmVmcykgKi8KLQl7LmluZm8gPSB7Il9QUjEiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX1BSMiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfUFJTIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfSFBYIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCAodmFyIEludHMpICovCisJCQkgIHt7e0FDUElfUFRZUEUyX01JTiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LDB9LCAwLDB9fSwKKworCXt7Il9JRlQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwgLyogU2VlIElQTUkgc3BlYyAqLworCXt7Il9JTkkiLCAwLCAwfX0sCisJe3siX0lSQyIsIDAsIDB9fSwKKwl7eyJfTENLIiwgMSwgMH19LAorCXt7Il9MSUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfTUFUIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfTUJNIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIEZpeGVkLWxlbmd0aCAoOCBJbnQpICovCisJe3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgOCwgMH0sIDAsIDB9fSwKKworCXt7Il9NTFMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChQa2dzKSBlYWNoICgyIFN0cikgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTIsIEFDUElfUlRZUEVfU1RSSU5HLCAyLDB9LCAwLDB9fSwKKworCXt7Il9NU0ciLCAxLCAwfX0sCisJe3siX01TTSIsIDQsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9OVFQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfT0ZGIiwgMCwgMH19LAorCXt7Il9PTl8iLCAwLCAwfX0sCisJe3siX09TXyIsIDAsIEFDUElfUlRZUEVfU1RSSU5HfX0sCisJe3siX09TQyIsIDQsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX09TVCIsIDMsIDB9fSwKKwl7eyJfUEFJIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1BDTCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBWYXJpYWJsZS1sZW5ndGggKFJlZnMpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsMH0sIDAsMH19LAorCisJe3siX1BDVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDIgQnVmKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9CVUZGRVIsIDIsMH0sIDAsMH19LAorCisJe3siX1BEQyIsIDEsIDB9fSwKKwl7eyJfUERMIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1BJQyIsIDEsIDB9fSwKKwl7eyJfUElGIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIEZpeGVkLWxlbmd0aCAoMyBJbnQpLCgzIFN0cikgKi8KKwl7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAzLCBBQ1BJX1JUWVBFX1NUUklOR30sIDMsIDB9fSwKKworCXt7Il9QTEQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChCdWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfQlVGRkVSLCAwLDB9LCAwLDB9fSwKKworCXt7Il9QTUMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogRml4ZWQtbGVuZ3RoICgxMSBJbnQpLCgzIFN0cikgKi8KKwl7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxMSwgQUNQSV9SVFlQRV9TVFJJTkd9LCAzLAorCSAgMH19LAorCisJe3siX1BNRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LAkvKiBWYXJpYWJsZS1sZW5ndGggKFJlZnMpICovCisJe3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMCwgMH0sIDAsIDB9fSwKKworCXt7Il9QTU0iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUFBDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1BQRSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LCAvKiBTZWUgZGlnNjQgc3BlYyAqLworCXt7Il9QUjAiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9QUjEiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9QUjIiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9QUjMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCXt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDB9LCAwLCAwfX0sCisKKwl7eyJfUFJMIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sCS8qIFZhcmlhYmxlLWxlbmd0aCAoUmVmcykgKi8KKwl7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwfSwgMCwgMH19LAorCisJe3siX1BSUyIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCiAKIAkvKgotCSAqIEZvciBfUFJULCBtYW55IEJJT1NzIHJldmVyc2UgdGhlIDJuZCBhbmQgM3JkIFBhY2thZ2UgZWxlbWVudHMuIFRoaXMgYnVnIGlzIHNvIHByZXZhbGVudCB0aGF0IHRoZXJlCi0JICogaXMgY29kZSBpbiB0aGUgQUNQSUNBIFJlc291cmNlIE1hbmFnZXIgdG8gZGV0ZWN0IHRoaXMgYW5kIHN3aXRjaCB0aGVtIGJhY2suIEZvciBub3csIGRvIG5vdCBhbGxvdwotCSAqIGFuZCBpc3N1ZSBhIHdhcm5pbmcuIFRvIGFsbG93IHRoaXMgYW5kIGVsaW1pbmF0ZSB0aGUgd2FybmluZywgYWRkIHRoZSBBQ1BJX1JUWVBFX1JFRkVSRU5DRQotCSAqIHR5cGUgdG8gdGhlIDJuZCBlbGVtZW50IChpbmRleCAxKSBpbiB0aGUgc3RhdGVtZW50IGJlbG93LgorCSAqIEZvciBfUFJULCBtYW55IEJJT1NzIHJldmVyc2UgdGhlIDNyZCBhbmQgNHRoIFBhY2thZ2UgZWxlbWVudHMgKFNvdXJjZQorCSAqIGFuZCBzb3VyY2VfaW5kZXgpLiBUaGlzIGJ1ZyBpcyBzbyBwcmV2YWxlbnQgdGhhdCB0aGVyZSBpcyBjb2RlIGluIHRoZQorCSAqIEFDUElDQSBSZXNvdXJjZSBNYW5hZ2VyIHRvIGRldGVjdCB0aGlzIGFuZCBzd2l0Y2ggdGhlbSBiYWNrLiBGb3Igbm93LAorCSAqIGRvIG5vdCBhbGxvdyBhbmQgaXNzdWUgYSB3YXJuaW5nLiBUbyBhbGxvdyB0aGlzIGFuZCBlbGltaW5hdGUgdGhlCisJICogd2FybmluZywgYWRkIHRoZSBBQ1BJX1JUWVBFX1JFRkVSRU5DRSB0eXBlIHRvIHRoZSA0dGggZWxlbWVudCAoaW5kZXggMykKKwkgKiBpbiB0aGUgc3RhdGVtZW50IGJlbG93LgogCSAqLwotCXsuaW5mbyA9IHsiX1BSVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyX0ZJWEVELCA0LAotCQkJCQkgIEFDUElfUlRZUEVfSU5URUdFUiwKLQkJCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVIsCi0JCQkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIEFDUElfUlRZUEVfSU5URUdFUn19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCAoNCk6IEludCxJbnQsSW50L1JlZixJbnQgKi8KKwl7eyJfUFJUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCAoNCk6IEludCxJbnQsSW50L1JlZixJbnQgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTJfRklYRUQsIDQsIEFDUElfUlRZUEVfSU5URUdFUixBQ1BJX1JUWVBFX0lOVEVHRVJ9LAorCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwKKwkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAKLQl7LmluZm8gPSB7Il9QUlciLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9PUFRJT04sIDIsCi0JCQkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSIHwKLQkJCQkJICBBQ1BJX1JUWVBFX1BBQ0tBR0UsCi0JCQkJCSAgQUNQSV9SVFlQRV9JTlRFR0VSLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaDogUGtnL0ludCxJbnQsW3ZhcmlhYmxlIFJlZnNdIChQa2cgaXMgUmVmL0ludCkgKi8KKwl7eyJfUFJXIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaDogUGtnL0ludCxJbnQsW1ZhcmlhYmxlLWxlbmd0aCBSZWZzXSAoUGtnIGlzIFJlZi9JbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX09QVElPTiwgMiwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9QQUNLQUdFLAorCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVJ9LCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwwfX0sCiAKLQl7LmluZm8gPSB7Il9QUzAiLCAwLCAwfX0sCi0Jey5pbmZvID0geyJfUFMxIiwgMCwgMH19LAotCXsuaW5mbyA9IHsiX1BTMiIsIDAsIDB9fSwKLQl7LmluZm8gPSB7Il9QUzMiLCAwLCAwfX0sCi0Jey5pbmZvID0geyJfUFNDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUFNEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTJfQ09VTlQsIEFDUElfUlRZUEVfSU5URUdFUiwgMCwgMCwgMCwgMH19LAkvKiB2YXJpYWJsZSAoUGtncykgZWFjaCAoNSBJbnQpIHdpdGggY291bnQgKi8KLQl7LmluZm8gPSB7Il9QU0wiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChSZWZzKSAqLwotCXsuaW5mbyA9IHsiX1BTUiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1BTUyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDYsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2ggKDYgSW50KSAqLwotCXsuaW5mbyA9IHsiX1BTViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1BTVyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9QVEMiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9CVUZGRVIsIDIsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDIgQnVmKSAqLwotCXsuaW5mbyA9IHsiX1BUUyIsIDEsIDB9fSwKLQl7LmluZm8gPSB7Il9QWE0iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9SRUciLCAyLCAwfX0sCi0Jey5pbmZvID0geyJfUkVWIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUk1WIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfUk9NIiwgMiwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKLQl7LmluZm8gPSB7Il9SVFYiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUFMwIiwgMCwgMH19LAorCXt7Il9QUzEiLCAwLCAwfX0sCisJe3siX1BTMiIsIDAsIDB9fSwKKwl7eyJfUFMzIiwgMCwgMH19LAorCXt7Il9QU0MiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUFNEIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCAoNSBJbnQpIHdpdGggY291bnQgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTJfQ09VTlQsIEFDUElfUlRZUEVfSU5URUdFUiwwLDB9LCAwLDB9fSwKKworCXt7Il9QU0wiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9QU1IiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUFNTIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCAoNiBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDYsMH0sIDAsMH19LAorCisJe3siX1BTViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9QU1ciLCAxLCAwfX0sCisJe3siX1BUQyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDIgQnVmKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9CVUZGRVIsIDIsMH0sIDAsMH19LAorCisJe3siX1BUUCIsIDIsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9QVFMiLCAxLCAwfX0sCisJe3siX1BVUiIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LAkvKiBGaXhlZC1sZW5ndGggKDIgSW50KSAqLworCXt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDIsIDB9LCAwLCAwfX0sCisKKwl7eyJfUFhNIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1JFRyIsIDIsIDB9fSwKKwl7eyJfUkVWIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1JNViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9ST00iLCAyLCBBQ1BJX1JUWVBFX0JVRkZFUn19LAorCXt7Il9SVFYiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKIAogCS8qCi0JICogRm9yIF9TMF8gdGhyb3VnaCBfUzVfLCB0aGUgQUNQSSBzcGVjIGRlZmluZXMgYSByZXR1cm4gUGFja2FnZSBjb250YWluaW5nIDEgSW50ZWdlciwKLQkgKiBidXQgbW9zdCBEU0RUcyBoYXZlIGl0IHdyb25nIC0gMiwzLCBvciA0IGludGVnZXJzLiBBbGxvdyB0aGlzIGJ5IG1ha2luZyB0aGUgb2JqZWN0cyAidmFyaWFibGUgbGVuZ3RoIiwKLQkgKiBidXQgYWxsIGVsZW1lbnRzIG11c3QgYmUgSW50ZWdlcnMuCisJICogRm9yIF9TMF8gdGhyb3VnaCBfUzVfLCB0aGUgQUNQSSBzcGVjIGRlZmluZXMgYSByZXR1cm4gUGFja2FnZQorCSAqIGNvbnRhaW5pbmcgMSBJbnRlZ2VyLCBidXQgbW9zdCBEU0RUcyBoYXZlIGl0IHdyb25nIC0gMiwzLCBvciA0IGludGVnZXJzLgorCSAqIEFsbG93IHRoaXMgYnkgbWFraW5nIHRoZSBvYmplY3RzICJWYXJpYWJsZS1sZW5ndGggbGVuZ3RoIiwgYnV0IGFsbCBlbGVtZW50cworCSAqIG11c3QgYmUgSW50ZWdlcnMuCiAJICovCi0Jey5pbmZvID0geyJfUzBfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDEgSW50KSAqLwotCXsuaW5mbyA9IHsiX1MxXyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgxIEludCkgKi8KLQl7LmluZm8gPSB7Il9TMl8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMSBJbnQpICovCi0Jey5pbmZvID0geyJfUzNfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIHsucmV0X2luZm8gPSB7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDEgSW50KSAqLwotCXsuaW5mbyA9IHsiX1M0XyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLCAwLCAwLCAwfX0sCS8qIGZpeGVkICgxIEludCkgKi8KLQl7LmluZm8gPSB7Il9TNV8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwgMCwgMCwgMH19LAkvKiBmaXhlZCAoMSBJbnQpICovCisJe3siX1MwXyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDEgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwwfSwgMCwwfX0sCiAKLQl7LmluZm8gPSB7Il9TMUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TMkQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TM0QiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TNEQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TMFciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TMVciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TMlciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TM1ciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TNFciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TQlMiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TQ1AiLCAweDEzLCAwfX0sCS8qIEFjcGkgMS4wIGFsbG93ZWQgMSBhcmcuIEFjcGkgMy4wIGV4cGFuZGVkIHRvIDMgYXJncy4gQWxsb3cgYm90aC4gKi8KLQkvKiBOb3RlOiB0aGUgMy1hcmcgZGVmaW5pdGlvbiBtYXkgYmUgcmVtb3ZlZCBmb3IgQUNQSSA0LjAgKi8KLQl7LmluZm8gPSB7Il9TREQiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfU0VHIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfU0xJIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKLQl7LmluZm8gPSB7Il9TUEQiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9TUlMiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfU1JWIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCS8qIHNlZSBJUE1JIHNwZWMgKi8KLQl7LmluZm8gPSB7Il9TU1QiLCAxLCAwfX0sCi0Jey5pbmZvID0geyJfU1RBIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfU1RNIiwgMywgMH19LAotCXsuaW5mbyA9IHsiX1NUUiIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCi0Jey5pbmZvID0geyJfU1VOIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfU1dTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVEMxIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVEMyIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVE1QIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVFBDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVFBUIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX1RSVCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUyLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRSwgMiwKLQkJCQkJICBBQ1BJX1JUWVBFX0lOVEVHRVIsIDYsIDB9fSwJLyogdmFyaWFibGUgKFBrZ3MpIGVhY2ggMl9yZWYvNl9pbnQgKi8KLQl7LmluZm8gPSB7Il9UU0QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMl9DT1VOVCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoIDVfaW50IHdpdGggY291bnQgKi8KLQl7LmluZm8gPSB7Il9UU1AiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9UU1MiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgey5yZXRfaW5mbyA9IHtBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LCAwLCAwLCAwfX0sCS8qIHZhcmlhYmxlIChQa2dzKSBlYWNoIDVfaW50ICovCi0Jey5pbmZvID0geyJfVFNUIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCi0Jey5pbmZvID0geyJfVFRTIiwgMSwgMH19LAotCXsuaW5mbyA9IHsiX1RaRCIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDAsIDAsIDAsIDB9fSwJLyogdmFyaWFibGUgKFJlZnMpICovCi0Jey5pbmZvID0geyJfVFpNIiwgMCwgQUNQSV9SVFlQRV9SRUZFUkVOQ0V9fSwKLQl7LmluZm8gPSB7Il9UWlAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKLQl7LmluZm8gPSB7Il9VSUQiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1NUUklOR319LAotCXsuaW5mbyA9IHsiX1VQQyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCB7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDQgSW50KSAqLwotCXsuaW5mbyA9IHsiX1VQRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1VQUCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAotCXsuaW5mbyA9IHsiX1ZQTyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TMV8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogRml4ZWQtbGVuZ3RoICgxIEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsMH0sIDAsMH19LAorCisJe3siX1MyXyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDEgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwwfSwgMCwwfX0sCisKKwl7eyJfUzNfIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoMSBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX1ZBUiwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxLDB9LCAwLDB9fSwKKworCXt7Il9TNF8iLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogRml4ZWQtbGVuZ3RoICgxIEludCkgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTFfVkFSLCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDEsMH0sIDAsMH19LAorCisJe3siX1M1XyIsIDAsIEFDUElfUlRZUEVfUEFDS0FHRX19LCAvKiBGaXhlZC1sZW5ndGggKDEgSW50KSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfSU5URUdFUiwgMSwwfSwgMCwwfX0sCisKKwl7eyJfUzFEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1MyRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TM0QiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUzREIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1MwVyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TMVciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfUzJXIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1MzVyIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TNFciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfU0JTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1NDUCIsIDB4MTMsIDB9fSwgICAgICAgICAgICAgICAvKiBBY3BpIDEuMCBhbGxvd2VkIDEgYXJnLiBBY3BpIDMuMCBleHBhbmRlZCB0byAzIGFyZ3MuIEFsbG93IGJvdGguICovCisJCQkgICAvKiBOb3RlOiB0aGUgMy1hcmcgZGVmaW5pdGlvbiBtYXkgYmUgcmVtb3ZlZCBmb3IgQUNQSSA0LjAgKi8KKwl7eyJfU0REIiwgMSwgMH19LAorCXt7Il9TRUciLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfU0hMIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1NMSSIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX1NQRCIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TUlMiLCAxLCAwfX0sCisJe3siX1NSViIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LCAvKiBTZWUgSVBNSSBzcGVjICovCisJe3siX1NTVCIsIDEsIDB9fSwKKwl7eyJfU1RBIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1NUTSIsIDMsIDB9fSwKKwl7eyJfU1RQIiwgMiwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1NUUiIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sCisJe3siX1NUViIsIDIsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9TVU4iLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfU1dTIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1RDMSIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9UQzIiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVElQIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1RJViIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9UTVAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVFBDIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCisJe3siX1RQVCIsIDEsIDB9fSwKKwl7eyJfVFJUIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCAyX3JlZi82X2ludCAqLworCQkJICB7e3tBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9SRUZFUkVOQ0UsIDIsIEFDUElfUlRZUEVfSU5URUdFUn0sIDYsIDB9fSwKKworCXt7Il9UU0QiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChQa2dzKSBlYWNoIDVfaW50IHdpdGggY291bnQgKi8KKwkJCSAge3t7QUNQSV9QVFlQRTJfQ09VTlQsQUNQSV9SVFlQRV9JTlRFR0VSLCA1LDB9LCAwLDB9fSwKKworCXt7Il9UU1AiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVFNTIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIFZhcmlhYmxlLWxlbmd0aCAoUGtncykgZWFjaCA1X2ludCAqLworCQkJICB7e3tBQ1BJX1BUWVBFMiwgQUNQSV9SVFlQRV9JTlRFR0VSLCA1LDB9LCAwLDB9fSwKKworCXt7Il9UU1QiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVFRTIiwgMSwgMH19LAorCXt7Il9UWkQiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogVmFyaWFibGUtbGVuZ3RoIChSZWZzKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9WQVIsIEFDUElfUlRZUEVfUkVGRVJFTkNFLCAwLDB9LCAwLDB9fSwKKworCXt7Il9UWk0iLCAwLCBBQ1BJX1JUWVBFX1JFRkVSRU5DRX19LAorCXt7Il9UWlAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVUlEIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSIHwgQUNQSV9SVFlQRV9TVFJJTkd9fSwKKwl7eyJfVVBDIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoNCBJbnQpICovCisJCQkgIHt7e0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDQsMH0sIDAsMH19LAorCisJe3siX1VQRCIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9VUFAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKKwl7eyJfVlBPIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAKIAkvKiBBY3BpIDEuMCBkZWZpbmVkIF9XQUsgd2l0aCBubyByZXR1cm4gdmFsdWUuIExhdGVyLCBpdCB3YXMgY2hhbmdlZCB0byByZXR1cm4gYSBwYWNrYWdlICovCiAKLQl7LmluZm8gPSB7Il9XQUsiLCAxLCBBQ1BJX1JUWVBFX05PTkUgfCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwKLQl7LnJldF9pbmZvID0ge0FDUElfUFRZUEUxX0ZJWEVELCBBQ1BJX1JUWVBFX0lOVEVHRVIsIDIsIDAsIDAsIDB9fSwJLyogZml4ZWQgKDIgSW50KSwgYnV0IGlzIG9wdGlvbmFsICovCi0Jey5yZXRfaW5mbyA9IHswLCAwLCAwLCAwLCAwLCAwfX0JLyogVGFibGUgdGVybWluYXRvciAqLworCXt7Il9XQUsiLCAxLCBBQ1BJX1JUWVBFX05PTkUgfCBBQ1BJX1JUWVBFX0lOVEVHRVIgfCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwKKwkJCSAge3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgMiwwfSwgMCwwfX0sIC8qIEZpeGVkLWxlbmd0aCAoMiBJbnQpLCBidXQgaXMgb3B0aW9uYWwgKi8KKworCXt7ezAsMCwwLDB9LCAwLDB9fSAvKiBUYWJsZSB0ZXJtaW5hdG9yICovCiB9OwogCiAjaWYgMAogCS8qIE5vdCBpbXBsZW1lbnRlZCAqLwogCi17Ci0iX1dERyIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfSwJLyogTVMgRXh0ZW5zaW9uICovCisJe3siX1dERyIsIDAsIEFDUElfUlRZUEVfQlVGRkVSfX0sICAvKiBNUyBFeHRlbnNpb24gKi8KKwl7eyJfV0VEIiwgMSwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIE1TIEV4dGVuc2lvbiAqLwogCi17Ci0iX1dFRCIsIDEsIEFDUElfUlRZUEVfUEFDS0FHRX0sCS8qIE1TIEV4dGVuc2lvbiAqLworCS8qIFRoaXMgaXMgYW4gaW50ZXJuYWxseSBpbXBsZW1lbnRlZCBjb250cm9sIG1ldGhvZCwgbm8gbmVlZCB0byBjaGVjayAqLworCXt7Il9PU0kiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKIAotICAgIC8qIFRoaXMgaXMgYW4gaW50ZXJuYWxseSBpbXBsZW1lbnRlZCBjb250cm9sIG1ldGhvZCwgbm8gbmVlZCB0byBjaGVjayAqLwotewotIl9PU0kiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9LAorCS8qIFRCRDogKi8KIAotICAgIC8qIFRCRDogKi8KLSAgICBfUFJUIC0gY3VycmVudGx5IGlnbm9yZSByZXZlcnNlZCBlbnRyaWVzLmF0dGVtcHQgdG8gZml4IGhlcmUgPwotICAgIHRoaW5rIGFib3V0IGNvZGUgdGhhdCBhdHRlbXB0cyB0byBmaXggcGFja2FnZSBlbGVtZW50cyBsaWtlIF9CSUYsIGV0Yy4KKwlfUFJUIC0gY3VycmVudGx5IGlnbm9yZSByZXZlcnNlZCBlbnRyaWVzLiBhdHRlbXB0IHRvIGZpeCBoZXJlPworCXRoaW5rIGFib3V0IHBvc3NpYmx5IGZpeGluZyBwYWNrYWdlIGVsZW1lbnRzIGxpa2UgX0JJRiwgZXRjLgorI2VuZGlmCisKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN1dGlscy5oCmluZGV4IDg5NzgxMGIuLjg2M2EyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN1dGlscy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN1dGlscy5oCkBAIC0zMjQsMjYgKzMyNCwzMCBAQAogYWNwaV9zdGF0dXMKIGFjcGlfdXRfZXZhbHVhdGVfbnVtZXJpY19vYmplY3QoY2hhciAqb2JqZWN0X25hbWUsCiAJCQkJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLAotCQkJCWFjcGlfaW50ZWdlciAqIGFkZHJlc3MpOworCQkJCWFjcGlfaW50ZWdlciAqdmFsdWUpOwogCiBhY3BpX3N0YXR1cworYWNwaV91dF9leGVjdXRlX1NUQShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsIHUzMiAqc3RhdHVzX2ZsYWdzKTsKKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfZXhlY3V0ZV9wb3dlcl9tZXRob2RzKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKiptZXRob2RfbmFtZXMsCisJCQkgICAgICB1OCBtZXRob2RfY291bnQsIHU4ICpvdXRfdmFsdWVzKTsKKworLyoKKyAqIHV0aWRzIC0gZGV2aWNlIElEIHN1cHBvcnQKKyAqLworYWNwaV9zdGF0dXMKIGFjcGlfdXRfZXhlY3V0ZV9ISUQoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLAotCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKmhpZCk7Ci0KLWFjcGlfc3RhdHVzCi1hY3BpX3V0X2V4ZWN1dGVfQ0lEKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJICAgIHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqKnJldHVybl9jaWRfbGlzdCk7Ci0KLWFjcGlfc3RhdHVzCi1hY3BpX3V0X2V4ZWN1dGVfU1RBKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJICAgIHUzMiAqIHN0YXR1c19mbGFncyk7CisJCSAgICBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqKnJldHVybl9pZCk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX3V0X2V4ZWN1dGVfVUlEKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICp1aWQpOworCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKipyZXR1cm5faWQpOwogCiBhY3BpX3N0YXR1cwotYWNwaV91dF9leGVjdXRlX3N4ZHMoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLCB1OCAqIGhpZ2hlc3QpOworYWNwaV91dF9leGVjdXRlX0NJRChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCisJCSAgICBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICoqcmV0dXJuX2NpZF9saXN0KTsKIAogLyoKICAqIHV0bG9jayAtIHJlYWRlci93cml0ZXIgbG9ja3MKQEAgLTQ0NSw2ICs0NDksOCBAQAogICovCiBjb25zdCBjaGFyICphY3BpX3V0X3ZhbGlkYXRlX2V4Y2VwdGlvbihhY3BpX3N0YXR1cyBzdGF0dXMpOwogCit1OCBhY3BpX3V0X2lzX3BjaV9yb290X2JyaWRnZShjaGFyICppZCk7CisKIHU4IGFjcGlfdXRfaXNfYW1sX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpOwogCiBhY3BpX3N0YXR1cyBhY3BpX3V0X2FsbG9jYXRlX293bmVyX2lkKGFjcGlfb3duZXJfaWQgKiBvd25lcl9pZCk7CkBAIC00NjksNiArNDc1LDEyIEBACiBhY3BpX3N0YXR1cwogYWNwaV91dF9zdHJ0b3VsNjQoY2hhciAqc3RyaW5nLCB1MzIgYmFzZSwgYWNwaV9pbnRlZ2VyICogcmV0X2ludGVnZXIpOwogCit2b2lkIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFCithY3BpX3V0X3ByZWRlZmluZWRfd2FybmluZyhjb25zdCBjaGFyICptb2R1bGVfbmFtZSwKKwkJCSAgIHUzMiBsaW5lX251bWJlciwKKwkJCSAgIGNoYXIgKnBhdGhuYW1lLAorCQkJICAgdTggbm9kZV9mbGFncywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCiAvKiBWYWx1ZXMgZm9yIEJhc2UgYWJvdmUgKDE2PUhleCwgMTA9RGVjaW1hbCkgKi8KIAogI2RlZmluZSBBQ1BJX0FOWV9CQVNFICAgICAgICAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbGNvZGUuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCmluZGV4IDA2N2Y5NjcuLjQ5NDAyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCkBAIC00MDQsNiArNDA0LDcgQEAKIAlSRUdJT05fU01CVVMsCiAJUkVHSU9OX0NNT1MsCiAJUkVHSU9OX1BDSV9CQVIsCisJUkVHSU9OX0lQTUksCiAJUkVHSU9OX0RBVEFfVEFCTEUsCS8qIEludGVybmFsIHVzZSBvbmx5ICovCiAJUkVHSU9OX0ZJWEVEX0hXID0gMHg3RgogfSBBTUxfUkVHSU9OX1RZUEVTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc2ZpZWxkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYwppbmRleCA1M2UyN2JjLi41NGEyMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYwpAQCAtMTIzLDkgKzEyMywxMiBAQAogCQlmbGFncyA9IEFDUElfTlNfTk9fVVBTRUFSQ0ggfCBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSB8CiAJCSAgICBBQ1BJX05TX0VSUk9SX0lGX0ZPVU5EOwogCi0JCS8qIE1hcmsgbm9kZSB0ZW1wb3JhcnkgaWYgd2UgYXJlIGV4ZWN1dGluZyBhIG1ldGhvZCAqLwotCi0JCWlmICh3YWxrX3N0YXRlLT5tZXRob2Rfbm9kZSkgeworCQkvKgorCQkgKiBNYXJrIG5vZGUgdGVtcG9yYXJ5IGlmIHdlIGFyZSBleGVjdXRpbmcgYSBub3JtYWwgY29udHJvbAorCQkgKiBtZXRob2QuIChEb24ndCBtYXJrIGlmIHRoaXMgaXMgYSBtb2R1bGUtbGV2ZWwgY29kZSBtZXRob2QpCisJCSAqLworCQlpZiAod2Fsa19zdGF0ZS0+bWV0aG9kX25vZGUgJiYKKwkJICAgICEod2Fsa19zdGF0ZS0+cGFyc2VfZmxhZ3MgJiBBQ1BJX1BBUlNFX01PRFVMRV9MRVZFTCkpIHsKIAkJCWZsYWdzIHw9IEFDUElfTlNfVEVNUE9SQVJZOwogCQl9CiAKQEAgLTQ1Niw5ICs0NTksMTIgQEAKIAlmbGFncyA9IEFDUElfTlNfTk9fVVBTRUFSQ0ggfCBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSB8CiAJICAgIEFDUElfTlNfRVJST1JfSUZfRk9VTkQ7CiAKLQkvKiBNYXJrIG5vZGUocykgdGVtcG9yYXJ5IGlmIHdlIGFyZSBleGVjdXRpbmcgYSBtZXRob2QgKi8KLQotCWlmICh3YWxrX3N0YXRlLT5tZXRob2Rfbm9kZSkgeworCS8qCisJICogTWFyayBub2RlKHMpIHRlbXBvcmFyeSBpZiB3ZSBhcmUgZXhlY3V0aW5nIGEgbm9ybWFsIGNvbnRyb2wKKwkgKiBtZXRob2QuIChEb24ndCBtYXJrIGlmIHRoaXMgaXMgYSBtb2R1bGUtbGV2ZWwgY29kZSBtZXRob2QpCisJICovCisJaWYgKHdhbGtfc3RhdGUtPm1ldGhvZF9ub2RlICYmCisJICAgICEod2Fsa19zdGF0ZS0+cGFyc2VfZmxhZ3MgJiBBQ1BJX1BBUlNFX01PRFVMRV9MRVZFTCkpIHsKIAkJZmxhZ3MgfD0gQUNQSV9OU19URU1QT1JBUlk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKaW5kZXggMTRiOGI4ZS4uNTY3YTQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYwpAQCAtNTc4LDEwICs1NzgsMTUgQEAKIAkJfQogCiAJCS8qCi0JCSAqIERlbGV0ZSBhbnkgbmFtZXNwYWNlIG9iamVjdHMgY3JlYXRlZCBhbnl3aGVyZSB3aXRoaW4KLQkJICogdGhlIG5hbWVzcGFjZSBieSB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgbWV0aG9kCisJCSAqIERlbGV0ZSBhbnkgbmFtZXNwYWNlIG9iamVjdHMgY3JlYXRlZCBhbnl3aGVyZSB3aXRoaW4gdGhlCisJCSAqIG5hbWVzcGFjZSBieSB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgbWV0aG9kLiBVbmxlc3MgdGhpcyBtZXRob2QKKwkJICogaXMgYSBtb2R1bGUtbGV2ZWwgZXhlY3V0YWJsZSBjb2RlIG1ldGhvZCwgaW4gd2hpY2ggY2FzZSB3ZQorCQkgKiB3YW50IG1ha2UgdGhlIG9iamVjdHMgcGVybWFuZW50LgogCQkgKi8KLQkJYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKG1ldGhvZF9kZXNjLT5tZXRob2Qub3duZXJfaWQpOworCQlpZiAoIShtZXRob2RfZGVzYy0+bWV0aG9kLmZsYWdzICYgQU9QT0JKX01PRFVMRV9MRVZFTCkpIHsKKwkJCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcihtZXRob2RfZGVzYy0+bWV0aG9kLgorCQkJCQkJCSAgb3duZXJfaWQpOworCQl9CiAJfQogCiAJLyogRGVjcmVtZW50IHRoZSB0aHJlYWQgY291bnQgb24gdGhlIG1ldGhvZCAqLwpAQCAtNjIyLDcgKzYyNyw5IEBACiAKIAkJLyogTm8gbW9yZSB0aHJlYWRzLCB3ZSBjYW4gZnJlZSB0aGUgb3duZXJfaWQgKi8KIAotCQlhY3BpX3V0X3JlbGVhc2Vfb3duZXJfaWQoJm1ldGhvZF9kZXNjLT5tZXRob2Qub3duZXJfaWQpOworCQlpZiAoIShtZXRob2RfZGVzYy0+bWV0aG9kLmZsYWdzICYgQU9QT0JKX01PRFVMRV9MRVZFTCkpIHsKKwkJCWFjcGlfdXRfcmVsZWFzZV9vd25lcl9pZCgmbWV0aG9kX2Rlc2MtPm1ldGhvZC5vd25lcl9pZCk7CisJCX0KIAl9CiAKIAlyZXR1cm5fVk9JRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYwppbmRleCAyMmIxYTNjLi43ZDA3N2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCkBAIC00MzMsMTAgKzQzMywxMCBAQAogCiAJCQljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CiAKLQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkgICAgIlVuaW5pdGlhbGl6ZWQgTG9jYWxbJWRdIGF0IG5vZGUgJXAiLAotCQkJCQkgICAgaW5kZXgsIG5vZGUpKTsKLQorCQkJCS8qCisJCQkJICogTm8gZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBjYXNlLCB3aWxsIGJlIHRyYXBwZWQgYWdhaW4gbGF0ZXIgdG8KKwkJCQkgKiBkZXRlY3QgYW5kIGlnbm9yZSBjYXNlcyBvZiBTdG9yZShsb2NhbF94LGxvY2FsX3gpCisJCQkJICovCiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9VTklOSVRJQUxJWkVEX0xPQ0FMKTsKIAogCQkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYwppbmRleCAwMmU2Y2FhLi41MDdlMWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCkBAIC00ODIsMTQgKzQ4MiwyNyBAQAogCWlmIChhcmcpIHsKIAkJLyoKIAkJICogbnVtX2VsZW1lbnRzIHdhcyBleGhhdXN0ZWQsIGJ1dCB0aGVyZSBhcmUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZQotCQkgKiBwYWNrYWdlX2xpc3QuCisJCSAqIHBhY2thZ2VfbGlzdC4gVHJ1bmNhdGUgdGhlIHBhY2thZ2UgdG8gbnVtX2VsZW1lbnRzLgogCQkgKgogCQkgKiBOb3RlOiB0ZWNobmljYWxseSwgdGhpcyBpcyBhbiBlcnJvciwgZnJvbSBBQ1BJIHNwZWM6ICJJdCBpcyBhbiBlcnJvcgogCQkgKiBmb3IgTnVtRWxlbWVudHMgdG8gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlCi0JCSAqIFBhY2thZ2VMaXN0Ii4gSG93ZXZlciwgZm9yIG5vdywgd2UganVzdCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZAotCQkgKiBubyBleGNlcHRpb24gaXMgcmV0dXJuZWQuCisJCSAqIFBhY2thZ2VMaXN0Ii4gSG93ZXZlciwgd2UganVzdCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZAorCQkgKiBubyBleGNlcHRpb24gaXMgcmV0dXJuZWQuIFRoaXMgcHJvdmlkZXMgV2luZG93cyBjb21wYXRpYmlsaXR5LiBTb21lCisJCSAqIEJJT1NzIHdpbGwgYWx0ZXIgdGhlIG51bV9lbGVtZW50cyBvbiB0aGUgZmx5LCBjcmVhdGluZyB0aGlzIHR5cGUKKwkJICogb2YgaWxsLWZvcm1lZCBwYWNrYWdlIG9iamVjdC4KIAkJICovCiAJCXdoaWxlIChhcmcpIHsKKwkJCS8qCisJCQkgKiBXZSBtdXN0IGRlbGV0ZSBhbnkgcGFja2FnZSBlbGVtZW50cyB0aGF0IHdlcmUgY3JlYXRlZCBlYXJsaWVyCisJCQkgKiBhbmQgYXJlIG5vdCBnb2luZyB0byBiZSB1c2VkIGJlY2F1c2Ugb2YgdGhlIHBhY2thZ2UgdHJ1bmNhdGlvbi4KKwkJCSAqLworCQkJaWYgKGFyZy0+Y29tbW9uLm5vZGUpIHsKKwkJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UoQUNQSV9DQVNUX1BUUgorCQkJCQkJCSAodW5pb24KKwkJCQkJCQkgIGFjcGlfb3BlcmFuZF9vYmplY3QsCisJCQkJCQkJICBhcmctPmNvbW1vbi5ub2RlKSk7CisJCQkJYXJnLT5jb21tb24ubm9kZSA9IE5VTEw7CisJCQl9CiAKIAkJCS8qIEZpbmQgb3V0IGhvdyBtYW55IGVsZW1lbnRzIHRoZXJlIHJlYWxseSBhcmUgKi8KIApAQCAtNDk4LDcgKzUxMSw3IEBACiAJCX0KIAogCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkgICAgIlBhY2thZ2UgTGlzdCBsZW5ndGggKCVYKSBsYXJnZXIgdGhhbiBOdW1FbGVtZW50cyBjb3VudCAoJVgpLCB0cnVuY2F0ZWRcbiIsCisJCQkgICAgIlBhY2thZ2UgTGlzdCBsZW5ndGggKDB4JVgpIGxhcmdlciB0aGFuIE51bUVsZW1lbnRzIGNvdW50ICgweCVYKSwgdHJ1bmNhdGVkXG4iLAogCQkJICAgIGksIGVsZW1lbnRfY291bnQpKTsKIAl9IGVsc2UgaWYgKGkgPCBlbGVtZW50X2NvdW50KSB7CiAJCS8qCkBAIC01MDYsNyArNTE5LDcgQEAKIAkJICogTm90ZTogdGhpcyBpcyBub3QgYW4gZXJyb3IsIHRoZSBwYWNrYWdlIGlzIHBhZGRlZCBvdXQgd2l0aCBOVUxMcy4KIAkJICovCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkgICJQYWNrYWdlIExpc3QgbGVuZ3RoICglWCkgc21hbGxlciB0aGFuIE51bUVsZW1lbnRzIGNvdW50ICglWCksIHBhZGRlZCB3aXRoIG51bGwgZWxlbWVudHNcbiIsCisJCQkJICAiUGFja2FnZSBMaXN0IGxlbmd0aCAoMHglWCkgc21hbGxlciB0aGFuIE51bUVsZW1lbnRzIGNvdW50ICgweCVYKSwgcGFkZGVkIHdpdGggbnVsbCBlbGVtZW50c1xuIiwKIAkJCQkgIGksIGVsZW1lbnRfY291bnQpKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMKaW5kZXggMzAyM2NlYS4uNmRlM2E5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMKQEAgLTU4MSwyMSArNTgxLDYgQEAKIAkJaWYgKCghKHdhbGtfc3RhdGUtPm9wX2luZm8tPmZsYWdzICYgQU1MX05TT1BDT0RFKSAmJgogCQkgICAgICh3YWxrX3N0YXRlLT5vcGNvZGUgIT0gQU1MX0lOVF9OQU1FUEFUSF9PUCkpIHx8CiAJCSAgICAoISh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9OQU1FRCkpKSB7Ci0jaWZkZWYgQUNQSV9FTkFCTEVfTU9EVUxFX0xFVkVMX0NPREUKLQkJCWlmICgod2Fsa19zdGF0ZS0+b3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX0VYRUNVVEUpIHx8Ci0JCQkgICAgKHdhbGtfc3RhdGUtPm9wX2luZm8tPmNsYXNzID09IEFNTF9DTEFTU19DT05UUk9MKSkgewotCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCi0JCQkJCQkgICJCZWdpbi9FWEVDOiAlcyAoZmwgJTguOFgpXG4iLAotCQkJCQkJICB3YWxrX3N0YXRlLT5vcF9pbmZvLT5uYW1lLAotCQkJCQkJICB3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncykpOwotCi0JCQkJLyogRXhlY3V0aW5nIGEgdHlwZTEgb3IgdHlwZTIgb3Bjb2RlIG91dHNpZGUgb2YgYSBtZXRob2QgKi8KLQotCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGFjcGlfZHNfZXhlY19iZWdpbl9vcCh3YWxrX3N0YXRlLCBvdXRfb3ApOwotCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCQkJfQotI2VuZGlmCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCQl9CiAKQEAgLTc2OCw3ICs3NTMsMTMgQEAKIAogCQkJLyogRXhlY3V0aW9uIG1vZGUsIG5vZGUgY2Fubm90IGFscmVhZHkgZXhpc3QsIG5vZGUgaXMgdGVtcG9yYXJ5ICovCiAKLQkJCWZsYWdzIHw9IChBQ1BJX05TX0VSUk9SX0lGX0ZPVU5EIHwgQUNQSV9OU19URU1QT1JBUlkpOworCQkJZmxhZ3MgfD0gQUNQSV9OU19FUlJPUl9JRl9GT1VORDsKKworCQkJaWYgKCEKKwkJCSAgICAod2Fsa19zdGF0ZS0+CisJCQkgICAgIHBhcnNlX2ZsYWdzICYgQUNQSV9QQVJTRV9NT0RVTEVfTEVWRUwpKSB7CisJCQkJZmxhZ3MgfD0gQUNQSV9OU19URU1QT1JBUlk7CisJCQl9CiAJCX0KIAogCQkvKiBBZGQgbmV3IGVudHJ5IG9yIGxvb2t1cCBleGlzdGluZyBlbnRyeSAqLwpAQCAtODUxLDI0ICs4NDIsNiBAQAogCS8qIENoZWNrIGlmIG9wY29kZSBoYWQgYW4gYXNzb2NpYXRlZCBuYW1lc3BhY2Ugb2JqZWN0ICovCiAKIAlpZiAoISh3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncyAmIEFNTF9OU09CSkVDVCkpIHsKLSNpZm5kZWYgQUNQSV9OT19NRVRIT0RfRVhFQ1VUSU9OCi0jaWZkZWYgQUNQSV9FTkFCTEVfTU9EVUxFX0xFVkVMX0NPREUKLQkJLyogTm8gbmFtZXNwYWNlIG9iamVjdC4gRXhlY3V0YWJsZSBvcGNvZGU/ICovCi0KLQkJaWYgKCh3YWxrX3N0YXRlLT5vcF9pbmZvLT5jbGFzcyA9PSBBTUxfQ0xBU1NfRVhFQ1VURSkgfHwKLQkJICAgICh3YWxrX3N0YXRlLT5vcF9pbmZvLT5jbGFzcyA9PSBBTUxfQ0xBU1NfQ09OVFJPTCkpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCi0JCQkJCSAgIkVuZC9FWEVDOiAgICVzIChmbCAlOC44WClcbiIsCi0JCQkJCSAgd2Fsa19zdGF0ZS0+b3BfaW5mby0+bmFtZSwKLQkJCQkJICB3YWxrX3N0YXRlLT5vcF9pbmZvLT5mbGFncykpOwotCi0JCQkvKiBFeGVjdXRpbmcgYSB0eXBlMSBvciB0eXBlMiBvcGNvZGUgb3V0c2lkZSBvZiBhIG1ldGhvZCAqLwotCi0JCQlzdGF0dXMgPSBhY3BpX2RzX2V4ZWNfZW5kX29wKHdhbGtfc3RhdGUpOwotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCX0KLSNlbmRpZgotI2VuZGlmCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKaW5kZXggYjlkOGVlNi4uYWZhY2Y0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwpAQCAtNDI0LDggKzQyNCw4IEBACiAJCQkvKiBSZWFkIHRoZSBTdGF0dXMgUmVnaXN0ZXIgKi8KIAogCQkJc3RhdHVzID0KLQkJCSAgICBhY3BpX3JlYWQoJnN0YXR1c19yZWcsCi0JCQkJICAgICAgJmdwZV9yZWdpc3Rlcl9pbmZvLT5zdGF0dXNfYWRkcmVzcyk7CisJCQkgICAgYWNwaV9od19yZWFkKCZzdGF0dXNfcmVnLAorCQkJCQkgJmdwZV9yZWdpc3Rlcl9pbmZvLT5zdGF0dXNfYWRkcmVzcyk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KQEAgLTQzMyw4ICs0MzMsOCBAQAogCQkJLyogUmVhZCB0aGUgRW5hYmxlIFJlZ2lzdGVyICovCiAKIAkJCXN0YXR1cyA9Ci0JCQkgICAgYWNwaV9yZWFkKCZlbmFibGVfcmVnLAotCQkJCSAgICAgICZncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2FkZHJlc3MpOworCQkJICAgIGFjcGlfaHdfcmVhZCgmZW5hYmxlX3JlZywKKwkJCQkJICZncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2FkZHJlc3MpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKaW5kZXggN2IzNDYzNi4uYTYwYWFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYwpAQCAtODQzLDE0ICs4NDMsMTQgQEAKIAogCQkvKiBEaXNhYmxlIGFsbCBHUEVzIHdpdGhpbiB0aGlzIHJlZ2lzdGVyICovCiAKLQkJc3RhdHVzID0gYWNwaV93cml0ZSgweDAwLCAmdGhpc19yZWdpc3Rlci0+ZW5hYmxlX2FkZHJlc3MpOworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKDB4MDAsICZ0aGlzX3JlZ2lzdGVyLT5lbmFibGVfYWRkcmVzcyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJZ290byBlcnJvcl9leGl0OwogCQl9CiAKIAkJLyogQ2xlYXIgYW55IHBlbmRpbmcgR1BFIGV2ZW50cyB3aXRoaW4gdGhpcyByZWdpc3RlciAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUoMHhGRiwgJnRoaXNfcmVnaXN0ZXItPnN0YXR1c19hZGRyZXNzKTsKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZSgweEZGLCAmdGhpc19yZWdpc3Rlci0+c3RhdHVzX2FkZHJlc3MpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWdvdG8gZXJyb3JfZXhpdDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCmluZGV4IDI4NGE3YmUuLmNmMjljNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKQEAgLTUwLDggKzUwLDYgQEAKIEFDUElfTU9EVUxFX05BTUUoImV2cmduaW5pIikKIAogLyogTG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIHU4IGFjcGlfZXZfbWF0Y2hfcGNpX3Jvb3RfYnJpZGdlKGNoYXIgKmlkKTsKLQogc3RhdGljIHU4IGFjcGlfZXZfaXNfcGNpX3Jvb3RfYnJpZGdlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzMiwzNyArMzMwLDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9ldl9tYXRjaF9wY2lfcm9vdF9icmlkZ2UKLSAqCi0gKiBQQVJBTUVURVJTOiAgSWQgICAgICAgICAgICAgIC0gVGhlIEhJRC9DSUQgaW4gc3RyaW5nIGZvcm1hdAotICoKLSAqIFJFVFVSTjogICAgICBUUlVFIGlmIHRoZSBJZCBpcyBhIG1hdGNoIGZvciBhIFBDSS9QQ0ktRXhwcmVzcyBSb290IEJyaWRnZQotICoKLSAqIERFU0NSSVBUSU9OOiBEZXRlcm1pbmUgaWYgdGhlIGlucHV0IElEIGlzIGEgUENJIFJvb3QgQnJpZGdlIElELgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB1OCBhY3BpX2V2X21hdGNoX3BjaV9yb290X2JyaWRnZShjaGFyICppZCkKLXsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhpcyBpcyBhIFBDSSByb290LgotCSAqIEFDUEkgMy4wKzogY2hlY2sgZm9yIGEgUENJIEV4cHJlc3Mgcm9vdCBhbHNvLgotCSAqLwotCWlmICghKEFDUElfU1RSTkNNUChpZCwKLQkJCSAgIFBDSV9ST09UX0hJRF9TVFJJTkcsCi0JCQkgICBzaXplb2YoUENJX1JPT1RfSElEX1NUUklORykpKSB8fAotCSAgICAhKEFDUElfU1RSTkNNUChpZCwKLQkJCSAgIFBDSV9FWFBSRVNTX1JPT1RfSElEX1NUUklORywKLQkJCSAgIHNpemVvZihQQ0lfRVhQUkVTU19ST09UX0hJRF9TVFJJTkcpKSkpIHsKLQkJcmV0dXJuIChUUlVFKTsKLQl9Ci0KLQlyZXR1cm4gKEZBTFNFKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9ldl9pc19wY2lfcm9vdF9icmlkZ2UKICAqCiAgKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAgIC0gRGV2aWNlIG5vZGUgYmVpbmcgZXhhbWluZWQKQEAgLTM3Nyw5ICszNDQsMTAgQEAKIHN0YXRpYyB1OCBhY3BpX2V2X2lzX3BjaV9yb290X2JyaWRnZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgaGlkOwotCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICpoaWQ7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkOwogCXUzMiBpOworCXU4IG1hdGNoOwogCiAJLyogR2V0IHRoZSBfSElEIGFuZCBjaGVjayBmb3IgYSBQQ0kgUm9vdCBCcmlkZ2UgKi8KIApAQCAtMzg4LDcgKzM1NiwxMCBAQAogCQlyZXR1cm4gKEZBTFNFKTsKIAl9CiAKLQlpZiAoYWNwaV9ldl9tYXRjaF9wY2lfcm9vdF9icmlkZ2UoaGlkLnZhbHVlKSkgeworCW1hdGNoID0gYWNwaV91dF9pc19wY2lfcm9vdF9icmlkZ2UoaGlkLT5zdHJpbmcpOworCUFDUElfRlJFRShoaWQpOworCisJaWYgKG1hdGNoKSB7CiAJCXJldHVybiAoVFJVRSk7CiAJfQogCkBAIC00MDIsNyArMzczLDcgQEAKIAkvKiBDaGVjayBhbGwgX0NJRHMgaW4gdGhlIHJldHVybmVkIGxpc3QgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBjaWQtPmNvdW50OyBpKyspIHsKLQkJaWYgKGFjcGlfZXZfbWF0Y2hfcGNpX3Jvb3RfYnJpZGdlKGNpZC0+aWRbaV0udmFsdWUpKSB7CisJCWlmIChhY3BpX3V0X2lzX3BjaV9yb290X2JyaWRnZShjaWQtPmlkc1tpXS5zdHJpbmcpKSB7CiAJCQlBQ1BJX0ZSRUUoY2lkKTsKIAkJCXJldHVybiAoVFJVRSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwppbmRleCAyNzdmZDYwLi4yNGFmZWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCkBAIC0xMTAsOCArMTEwLDE1IEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShvYmpfZGVzYyk7CiAJCSpkZGJfaGFuZGxlID0gTlVMTDsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCisJLyogRXhlY3V0ZSBhbnkgbW9kdWxlLWxldmVsIGNvZGUgdGhhdCB3YXMgZm91bmQgaW4gdGhlIHRhYmxlICovCisKKwlhY3BpX2V4X2V4aXRfaW50ZXJwcmV0ZXIoKTsKKwlhY3BpX25zX2V4ZWNfbW9kdWxlX2NvZGVfbGlzdCgpOworCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKKwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYwppbmRleCBlYzUyNDYxLi5kZTM0NDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKQEAgLTQxOCw5ICs0MTgsOSBAQAogCQljYXNlIEFDUElfRVhEX1JFRkVSRU5DRToKIAogCQkJYWNwaV9leF9vdXRfc3RyaW5nKCJDbGFzcyBOYW1lIiwKLQkJCQkJICAgKGNoYXIgKikKLQkJCQkJICAgYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUKLQkJCQkJICAgKG9ial9kZXNjKSk7CisJCQkJCSAgIEFDUElfQ0FTVF9QVFIoY2hhciwKKwkJCQkJCQkgYWNwaV91dF9nZXRfcmVmZXJlbmNlX25hbWUKKwkJCQkJCQkgKG9ial9kZXNjKSkpOwogCQkJYWNwaV9leF9kdW1wX3JlZmVyZW5jZV9vYmoob2JqX2Rlc2MpOwogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMKaW5kZXggNTQ2ZGNkZC4uMGIzM2Q2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMKQEAgLTcyLDYgKzcyLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpidWZmZXJfZGVzYzsKIAlhY3BpX3NpemUgbGVuZ3RoOwogCXZvaWQgKmJ1ZmZlcjsKKwl1MzIgZnVuY3Rpb247CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9yZWFkX2RhdGFfZnJvbV9maWVsZCwgb2JqX2Rlc2MpOwogCkBAIC05NywxMyArOTgsMjcgQEAKIAkJfQogCX0gZWxzZSBpZiAoKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVHSU9OX0ZJRUxEKSAmJgogCQkgICAob2JqX2Rlc2MtPmZpZWxkLnJlZ2lvbl9vYmotPnJlZ2lvbi5zcGFjZV9pZCA9PQotCQkgICAgQUNQSV9BRFJfU1BBQ0VfU01CVVMpKSB7CisJCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUworCQkgICAgfHwgb2JqX2Rlc2MtPmZpZWxkLnJlZ2lvbl9vYmotPnJlZ2lvbi5zcGFjZV9pZCA9PQorCQkgICAgQUNQSV9BRFJfU1BBQ0VfSVBNSSkpIHsKIAkJLyoKLQkJICogVGhpcyBpcyBhbiBTTUJ1cyByZWFkLiAgV2UgbXVzdCBjcmVhdGUgYSBidWZmZXIgdG8gaG9sZCB0aGUgZGF0YQotCQkgKiBhbmQgZGlyZWN0bHkgYWNjZXNzIHRoZSByZWdpb24gaGFuZGxlci4KKwkJICogVGhpcyBpcyBhbiBTTUJ1cyBvciBJUE1JIHJlYWQuIFdlIG11c3QgY3JlYXRlIGEgYnVmZmVyIHRvIGhvbGQKKwkJICogdGhlIGRhdGEgYW5kIHRoZW4gZGlyZWN0bHkgYWNjZXNzIHRoZSByZWdpb24gaGFuZGxlci4KKwkJICoKKwkJICogTm90ZTogU21idXMgcHJvdG9jb2wgdmFsdWUgaXMgcGFzc2VkIGluIHVwcGVyIDE2LWJpdHMgb2YgRnVuY3Rpb24KIAkJICovCi0JCWJ1ZmZlcl9kZXNjID0KLQkJICAgIGFjcGlfdXRfY3JlYXRlX2J1ZmZlcl9vYmplY3QoQUNQSV9TTUJVU19CVUZGRVJfU0laRSk7CisJCWlmIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CisJCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUykgeworCQkJbGVuZ3RoID0gQUNQSV9TTUJVU19CVUZGRVJfU0laRTsKKwkJCWZ1bmN0aW9uID0KKwkJCSAgICBBQ1BJX1JFQUQgfCAob2JqX2Rlc2MtPmZpZWxkLmF0dHJpYnV0ZSA8PCAxNik7CisJCX0gZWxzZSB7CS8qIElQTUkgKi8KKworCQkJbGVuZ3RoID0gQUNQSV9JUE1JX0JVRkZFUl9TSVpFOworCQkJZnVuY3Rpb24gPSBBQ1BJX1JFQUQ7CisJCX0KKworCQlidWZmZXJfZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2J1ZmZlcl9vYmplY3QobGVuZ3RoKTsKIAkJaWYgKCFidWZmZXJfZGVzYykgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJCX0KQEAgLTExMiwxNiArMTI3LDEzIEBACiAKIAkJYWNwaV9leF9hY3F1aXJlX2dsb2JhbF9sb2NrKG9ial9kZXNjLT5jb21tb25fZmllbGQuZmllbGRfZmxhZ3MpOwogCi0JCS8qCi0JCSAqIFBlcmZvcm0gdGhlIHJlYWQuCi0JCSAqIE5vdGU6IFNtYnVzIHByb3RvY29sIHZhbHVlIGlzIHBhc3NlZCBpbiB1cHBlciAxNi1iaXRzIG9mIEZ1bmN0aW9uCi0JCSAqLworCQkvKiBDYWxsIHRoZSByZWdpb24gaGFuZGxlciBmb3IgdGhlIHJlYWQgKi8KKwogCQlzdGF0dXMgPSBhY3BpX2V4X2FjY2Vzc19yZWdpb24ob2JqX2Rlc2MsIDAsCiAJCQkJCSAgICAgICBBQ1BJX0NBU1RfUFRSKGFjcGlfaW50ZWdlciwKIAkJCQkJCQkgICAgIGJ1ZmZlcl9kZXNjLT4KIAkJCQkJCQkgICAgIGJ1ZmZlci5wb2ludGVyKSwKLQkJCQkJICAgICAgIEFDUElfUkVBRCB8IChvYmpfZGVzYy0+ZmllbGQuCi0JCQkJCQkJICAgIGF0dHJpYnV0ZSA8PCAxNikpOworCQkJCQkgICAgICAgZnVuY3Rpb24pOwogCQlhY3BpX2V4X3JlbGVhc2VfZ2xvYmFsX2xvY2sob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5maWVsZF9mbGFncyk7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0yMTIsNiArMjI0LDcgQEAKIAl1MzIgbGVuZ3RoOwogCXZvaWQgKmJ1ZmZlcjsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpidWZmZXJfZGVzYzsKKwl1MzIgZnVuY3Rpb247CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF93cml0ZV9kYXRhX3RvX2ZpZWxkLCBvYmpfZGVzYyk7CiAKQEAgLTIzNCwzOSArMjQ3LDU2IEBACiAJCX0KIAl9IGVsc2UgaWYgKChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFR0lPTl9GSUVMRCkgJiYKIAkJICAgKG9ial9kZXNjLT5maWVsZC5yZWdpb25fb2JqLT5yZWdpb24uc3BhY2VfaWQgPT0KLQkJICAgIEFDUElfQURSX1NQQUNFX1NNQlVTKSkgeworCQkgICAgQUNQSV9BRFJfU1BBQ0VfU01CVVMKKwkJICAgIHx8IG9ial9kZXNjLT5maWVsZC5yZWdpb25fb2JqLT5yZWdpb24uc3BhY2VfaWQgPT0KKwkJICAgIEFDUElfQURSX1NQQUNFX0lQTUkpKSB7CiAJCS8qCi0JCSAqIFRoaXMgaXMgYW4gU01CdXMgd3JpdGUuICBXZSB3aWxsIGJ5cGFzcyB0aGUgZW50aXJlIGZpZWxkIG1lY2hhbmlzbQotCQkgKiBhbmQgaGFuZG9mZiB0aGUgYnVmZmVyIGRpcmVjdGx5IHRvIHRoZSBoYW5kbGVyLgorCQkgKiBUaGlzIGlzIGFuIFNNQnVzIG9yIElQTUkgd3JpdGUuIFdlIHdpbGwgYnlwYXNzIHRoZSBlbnRpcmUgZmllbGQKKwkJICogbWVjaGFuaXNtIGFuZCBoYW5kb2ZmIHRoZSBidWZmZXIgZGlyZWN0bHkgdG8gdGhlIGhhbmRsZXIuIEZvcgorCQkgKiB0aGVzZSBhZGRyZXNzIHNwYWNlcywgdGhlIGJ1ZmZlciBpcyBiaS1kaXJlY3Rpb25hbDsgb24gYSB3cml0ZSwKKwkJICogcmV0dXJuIGRhdGEgaXMgcmV0dXJuZWQgaW4gdGhlIHNhbWUgYnVmZmVyLgogCQkgKgotCQkgKiBTb3VyY2UgbXVzdCBiZSBhIGJ1ZmZlciBvZiBzdWZmaWNpZW50IHNpemUgKEFDUElfU01CVVNfQlVGRkVSX1NJWkUpLgorCQkgKiBTb3VyY2UgbXVzdCBiZSBhIGJ1ZmZlciBvZiBzdWZmaWNpZW50IHNpemU6CisJCSAqIEFDUElfU01CVVNfQlVGRkVSX1NJWkUgb3IgQUNQSV9JUE1JX0JVRkZFUl9TSVpFLgorCQkgKgorCQkgKiBOb3RlOiBTTUJ1cyBwcm90b2NvbCB0eXBlIGlzIHBhc3NlZCBpbiB1cHBlciAxNi1iaXRzIG9mIEZ1bmN0aW9uCiAJCSAqLwogCQlpZiAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICJTTUJ1cyB3cml0ZSByZXF1aXJlcyBCdWZmZXIsIGZvdW5kIHR5cGUgJXMiLAorCQkJCSAgICAiU01CdXMgb3IgSVBNSSB3cml0ZSByZXF1aXJlcyBCdWZmZXIsIGZvdW5kIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwogCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX09QRVJBTkRfVFlQRSk7CiAJCX0KIAotCQlpZiAoc291cmNlX2Rlc2MtPmJ1ZmZlci5sZW5ndGggPCBBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFKSB7CisJCWlmIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CisJCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUykgeworCQkJbGVuZ3RoID0gQUNQSV9TTUJVU19CVUZGRVJfU0laRTsKKwkJCWZ1bmN0aW9uID0KKwkJCSAgICBBQ1BJX1dSSVRFIHwgKG9ial9kZXNjLT5maWVsZC5hdHRyaWJ1dGUgPDwgMTYpOworCQl9IGVsc2UgewkvKiBJUE1JICovCisKKwkJCWxlbmd0aCA9IEFDUElfSVBNSV9CVUZGRVJfU0laRTsKKwkJCWZ1bmN0aW9uID0gQUNQSV9XUklURTsKKwkJfQorCisJCWlmIChzb3VyY2VfZGVzYy0+YnVmZmVyLmxlbmd0aCA8IGxlbmd0aCkgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIlNNQnVzIHdyaXRlIHJlcXVpcmVzIEJ1ZmZlciBvZiBsZW5ndGggJVgsIGZvdW5kIGxlbmd0aCAlWCIsCi0JCQkJICAgIEFDUElfU01CVVNfQlVGRkVSX1NJWkUsCi0JCQkJICAgIHNvdXJjZV9kZXNjLT5idWZmZXIubGVuZ3RoKSk7CisJCQkJICAgICJTTUJ1cyBvciBJUE1JIHdyaXRlIHJlcXVpcmVzIEJ1ZmZlciBvZiBsZW5ndGggJVgsIGZvdW5kIGxlbmd0aCAlWCIsCisJCQkJICAgIGxlbmd0aCwgc291cmNlX2Rlc2MtPmJ1ZmZlci5sZW5ndGgpKTsKIAogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9CVUZGRVJfTElNSVQpOwogCQl9CiAKLQkJYnVmZmVyX2Rlc2MgPQotCQkgICAgYWNwaV91dF9jcmVhdGVfYnVmZmVyX29iamVjdChBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFKTsKKwkJLyogQ3JlYXRlIHRoZSBiaS1kaXJlY3Rpb25hbCBidWZmZXIgKi8KKworCQlidWZmZXJfZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2J1ZmZlcl9vYmplY3QobGVuZ3RoKTsKIAkJaWYgKCFidWZmZXJfZGVzYykgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJCX0KIAogCQlidWZmZXIgPSBidWZmZXJfZGVzYy0+YnVmZmVyLnBvaW50ZXI7Ci0JCUFDUElfTUVNQ1BZKGJ1ZmZlciwgc291cmNlX2Rlc2MtPmJ1ZmZlci5wb2ludGVyLAotCQkJICAgIEFDUElfU01CVVNfQlVGRkVSX1NJWkUpOworCQlBQ1BJX01FTUNQWShidWZmZXIsIHNvdXJjZV9kZXNjLT5idWZmZXIucG9pbnRlciwgbGVuZ3RoKTsKIAogCQkvKiBMb2NrIGVudGlyZSB0cmFuc2FjdGlvbiBpZiByZXF1ZXN0ZWQgKi8KIApAQCAtMjc1LDEyICszMDUsMTAgQEAKIAkJLyoKIAkJICogUGVyZm9ybSB0aGUgd3JpdGUgKHJldHVybnMgc3RhdHVzIGFuZCBwZXJoYXBzIGRhdGEgaW4gdGhlCiAJCSAqIHNhbWUgYnVmZmVyKQotCQkgKiBOb3RlOiBTTUJ1cyBwcm90b2NvbCB0eXBlIGlzIHBhc3NlZCBpbiB1cHBlciAxNi1iaXRzIG9mIEZ1bmN0aW9uLgogCQkgKi8KIAkJc3RhdHVzID0gYWNwaV9leF9hY2Nlc3NfcmVnaW9uKG9ial9kZXNjLCAwLAogCQkJCQkgICAgICAgKGFjcGlfaW50ZWdlciAqKSBidWZmZXIsCi0JCQkJCSAgICAgICBBQ1BJX1dSSVRFIHwgKG9ial9kZXNjLT5maWVsZC4KLQkJCQkJCQkgICAgIGF0dHJpYnV0ZSA8PCAxNikpOworCQkJCQkgICAgICAgZnVuY3Rpb24pOwogCQlhY3BpX2V4X3JlbGVhc2VfZ2xvYmFsX2xvY2sob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5maWVsZF9mbGFncyk7CiAKIAkJKnJlc3VsdF9kZXNjID0gYnVmZmVyX2Rlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCmluZGV4IDY2ODdiZTEuLmQ3YjNiNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCkBAIC0xMjAsMTIgKzEyMCwxMyBAQAogCX0KIAogCS8qCi0JICogRXhpdCBub3cgZm9yIFNNQnVzIGFkZHJlc3Mgc3BhY2UsIGl0IGhhcyBhIG5vbi1saW5lYXIgYWRkcmVzcyBzcGFjZQorCSAqIEV4aXQgbm93IGZvciBTTUJ1cyBvciBJUE1JIGFkZHJlc3Mgc3BhY2UsIGl0IGhhcyBhIG5vbi1saW5lYXIgYWRkcmVzcyBzcGFjZQogCSAqIGFuZCB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZGlyZWN0bHkgdmFsaWRhdGVkCiAJICovCi0JaWYgKHJnbl9kZXNjLT5yZWdpb24uc3BhY2VfaWQgPT0gQUNQSV9BRFJfU1BBQ0VfU01CVVMpIHsKKwlpZiAocmduX2Rlc2MtPnJlZ2lvbi5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TTUJVUyB8fAorCSAgICByZ25fZGVzYy0+cmVnaW9uLnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX0lQTUkpIHsKIAotCQkvKiBTTUJ1cyBoYXMgYSBub24tbGluZWFyIGFkZHJlc3Mgc3BhY2UgKi8KKwkJLyogU01CdXMgb3IgSVBNSSBoYXMgYSBub24tbGluZWFyIGFkZHJlc3Mgc3BhY2UgKi8KIAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKaW5kZXggODc3MzBlOS4uN2Q0MWY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKQEAgLTM1OCw1MCArMzU4LDY3IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcKICAqCi0gKiBQQVJBTUVURVJTOiAgbnVtZXJpY19pZCAgICAgIC0gRUlTQSBJRCB0byBiZSBjb252ZXJ0ZWQKKyAqIFBBUkFNRVRFUlM6ICBjb21wcmVzc2VkX2lkICAgLSBFSVNBSUQgdG8gYmUgY29udmVydGVkCiAgKiAgICAgICAgICAgICAgb3V0X3N0cmluZyAgICAgIC0gV2hlcmUgdG8gcHV0IHRoZSBjb252ZXJ0ZWQgc3RyaW5nICg4IGJ5dGVzKQogICoKICAqIFJFVFVSTjogICAgICBOb25lCiAgKgotICogREVTQ1JJUFRJT046IENvbnZlcnQgYSBudW1lcmljIEVJU0EgSUQgdG8gc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgKiBERVNDUklQVElPTjogQ29udmVydCBhIG51bWVyaWMgRUlTQUlEIHRvIHN0cmluZyByZXByZXNlbnRhdGlvbi4gUmV0dXJuCisgKiAgICAgICAgICAgICAgYnVmZmVyIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHN0cmluZy4gVGhlIHN0cmluZworICogICAgICAgICAgICAgIHJldHVybmVkIGlzIGFsd2F5cyBleGFjdGx5IG9mIGxlbmd0aCBBQ1BJX0VJU0FJRF9TVFJJTkdfU0laRQorICogICAgICAgICAgICAgIChpbmNsdWRlcyBudWxsIHRlcm1pbmF0b3IpLiBUaGUgRUlTQUlEIGlzIGFsd2F5cyAzMiBiaXRzLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZyh1MzIgbnVtZXJpY19pZCwgY2hhciAqb3V0X3N0cmluZykKK3ZvaWQgYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZyhjaGFyICpvdXRfc3RyaW5nLCBhY3BpX2ludGVnZXIgY29tcHJlc3NlZF9pZCkKIHsKLQl1MzIgZWlzYV9pZDsKKwl1MzIgc3dhcHBlZF9pZDsKIAogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAorCS8qIFRoZSBFSVNBSUQgc2hvdWxkIGJlIGEgMzItYml0IGludGVnZXIgKi8KKworCWlmIChjb21wcmVzc2VkX2lkID4gQUNQSV9VSU5UMzJfTUFYKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICJFeHBlY3RlZCBFSVNBSUQgaXMgbGFyZ2VyIHRoYW4gMzIgYml0czogMHglOC44WCU4LjhYLCB0cnVuY2F0aW5nIiwKKwkJCSAgICAgIEFDUElfRk9STUFUX1VJTlQ2NChjb21wcmVzc2VkX2lkKSkpOworCX0KKwogCS8qIFN3YXAgSUQgdG8gYmlnLWVuZGlhbiB0byBnZXQgY29udGlndW91cyBiaXRzICovCiAKLQllaXNhX2lkID0gYWNwaV91dF9kd29yZF9ieXRlX3N3YXAobnVtZXJpY19pZCk7CisJc3dhcHBlZF9pZCA9IGFjcGlfdXRfZHdvcmRfYnl0ZV9zd2FwKCh1MzIpY29tcHJlc3NlZF9pZCk7CiAKLQlvdXRfc3RyaW5nWzBdID0gKGNoYXIpKCdAJyArICgoKHVuc2lnbmVkIGxvbmcpZWlzYV9pZCA+PiAyNikgJiAweDFmKSk7Ci0Jb3V0X3N0cmluZ1sxXSA9IChjaGFyKSgnQCcgKyAoKGVpc2FfaWQgPj4gMjEpICYgMHgxZikpOwotCW91dF9zdHJpbmdbMl0gPSAoY2hhcikoJ0AnICsgKChlaXNhX2lkID4+IDE2KSAmIDB4MWYpKTsKLQlvdXRfc3RyaW5nWzNdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigoYWNwaV9pbnRlZ2VyKSBlaXNhX2lkLCAxMik7Ci0Jb3V0X3N0cmluZ1s0XSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcikgZWlzYV9pZCwgOCk7Ci0Jb3V0X3N0cmluZ1s1XSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcikgZWlzYV9pZCwgNCk7Ci0Jb3V0X3N0cmluZ1s2XSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcikgZWlzYV9pZCwgMCk7CisJLyogRmlyc3QgMyBieXRlcyBhcmUgdXBwZXJjYXNlIGxldHRlcnMuIE5leHQgNCBieXRlcyBhcmUgaGV4YWRlY2ltYWwgKi8KKworCW91dF9zdHJpbmdbMF0gPQorCSAgICAoY2hhcikoMHg0MCArICgoKHVuc2lnbmVkIGxvbmcpc3dhcHBlZF9pZCA+PiAyNikgJiAweDFGKSk7CisJb3V0X3N0cmluZ1sxXSA9IChjaGFyKSgweDQwICsgKChzd2FwcGVkX2lkID4+IDIxKSAmIDB4MUYpKTsKKwlvdXRfc3RyaW5nWzJdID0gKGNoYXIpKDB4NDAgKyAoKHN3YXBwZWRfaWQgPj4gMTYpICYgMHgxRikpOworCW91dF9zdHJpbmdbM10gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpc3dhcHBlZF9pZCwgMTIpOworCW91dF9zdHJpbmdbNF0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpc3dhcHBlZF9pZCwgOCk7CisJb3V0X3N0cmluZ1s1XSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcilzd2FwcGVkX2lkLCA0KTsKKwlvdXRfc3RyaW5nWzZdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigoYWNwaV9pbnRlZ2VyKXN3YXBwZWRfaWQsIDApOwogCW91dF9zdHJpbmdbN10gPSAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2V4X3Vuc2lnbmVkX2ludGVnZXJfdG9fc3RyaW5nCisgKiBGVU5DVElPTjogICAgYWNwaV9leF9pbnRlZ2VyX3RvX3N0cmluZwogICoKLSAqIFBBUkFNRVRFUlM6ICBWYWx1ZSAgICAgICAgICAgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQKLSAqICAgICAgICAgICAgICBvdXRfc3RyaW5nICAgICAgLSBXaGVyZSB0byBwdXQgdGhlIGNvbnZlcnRlZCBzdHJpbmcgKDggYnl0ZXMpCisgKiBQQVJBTUVURVJTOiAgb3V0X3N0cmluZyAgICAgIC0gV2hlcmUgdG8gcHV0IHRoZSBjb252ZXJ0ZWQgc3RyaW5nLiBBdCBsZWFzdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIGJ5dGVzIGFyZSBuZWVkZWQgdG8gaG9sZCB0aGUgbGFyZ2VzdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIDY0LWJpdCBpbnRlZ2VyLgorICogICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZAogICoKICAqIFJFVFVSTjogICAgICBOb25lLCBzdHJpbmcKICAqCi0gKiBERVNDUklQVElPTjogQ29udmVydCBhIG51bWJlciB0byBzdHJpbmcgcmVwcmVzZW50YXRpb24uIEFzc3VtZXMgc3RyaW5nCi0gKiAgICAgICAgICAgICAgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBzdHJpbmcuCisgKiBERVNDUklQVElPTjogQ29udmVydCBhIDY0LWJpdCBpbnRlZ2VyIHRvIGRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICogICAgICAgICAgICAgIEFzc3VtZXMgc3RyaW5nIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgc3RyaW5nLiBUaGUKKyAqICAgICAgICAgICAgICBsYXJnZXN0IHN0cmluZyBpcyAoQUNQSV9NQVg2NF9ERUNJTUFMX0RJR0lUUyArIDEpLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgYWNwaV9leF91bnNpZ25lZF9pbnRlZ2VyX3RvX3N0cmluZyhhY3BpX2ludGVnZXIgdmFsdWUsIGNoYXIgKm91dF9zdHJpbmcpCit2b2lkIGFjcGlfZXhfaW50ZWdlcl90b19zdHJpbmcoY2hhciAqb3V0X3N0cmluZywgYWNwaV9pbnRlZ2VyIHZhbHVlKQogewogCXUzMiBjb3VudDsKIAl1MzIgZGlnaXRzX25lZWRlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYwppbmRleCBkM2I3ZTM3Li5jMjhjNDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCkBAIC04Miw3ICs4Miw3IEBACiAKIAkvKiBHZXQgY3VycmVudCB2YWx1ZSBvZiB0aGUgZW5hYmxlIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMgdGhpcyBHUEUgKi8KIAotCXN0YXR1cyA9IGFjcGlfcmVhZCgmZW5hYmxlX21hc2ssICZncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2FkZHJlc3MpOworCXN0YXR1cyA9IGFjcGlfaHdfcmVhZCgmZW5hYmxlX21hc2ssICZncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2FkZHJlc3MpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQpAQCAtOTUsNyArOTUsNyBAQAogCiAJLyogV3JpdGUgdGhlIHVwZGF0ZWQgZW5hYmxlIG1hc2sgKi8KIAotCXN0YXR1cyA9IGFjcGlfd3JpdGUoZW5hYmxlX21hc2ssICZncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2FkZHJlc3MpOworCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGUoZW5hYmxlX21hc2ssICZncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2FkZHJlc3MpOwogCXJldHVybiAoc3RhdHVzKTsKIH0KIApAQCAtMTMwLDggKzEzMCw4IEBACiAKIAkvKiBXcml0ZSB0aGUgZW50aXJlIEdQRSAocnVudGltZSkgZW5hYmxlIHJlZ2lzdGVyICovCiAKLQlzdGF0dXMgPSBhY3BpX3dyaXRlKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwKLQkJCSAgICAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwKKwkJCSAgICAgICAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKIAogCXJldHVybiAoc3RhdHVzKTsKIH0KQEAgLTE2Myw4ICsxNjMsOCBAQAogCSAqIFdyaXRlIGEgb25lIHRvIHRoZSBhcHByb3ByaWF0ZSBiaXQgaW4gdGhlIHN0YXR1cyByZWdpc3RlciB0bwogCSAqIGNsZWFyIHRoaXMgR1BFLgogCSAqLwotCXN0YXR1cyA9IGFjcGlfd3JpdGUocmVnaXN0ZXJfYml0LAotCQkJICAgICZncGVfZXZlbnRfaW5mby0+cmVnaXN0ZXJfaW5mby0+c3RhdHVzX2FkZHJlc3MpOworCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGUocmVnaXN0ZXJfYml0LAorCQkJICAgICAgICZncGVfZXZlbnRfaW5mby0+cmVnaXN0ZXJfaW5mby0+c3RhdHVzX2FkZHJlc3MpOwogCiAJcmV0dXJuIChzdGF0dXMpOwogfQpAQCAtMjIyLDcgKzIyMiw3IEBACiAKIAkvKiBHUEUgY3VycmVudGx5IGFjdGl2ZSAoc3RhdHVzIGJpdCA9PSAxKT8gKi8KIAotCXN0YXR1cyA9IGFjcGlfcmVhZCgmaW5fYnl0ZSwgJmdwZV9yZWdpc3Rlcl9pbmZvLT5zdGF0dXNfYWRkcmVzcyk7CisJc3RhdHVzID0gYWNwaV9od19yZWFkKCZpbl9ieXRlLCAmZ3BlX3JlZ2lzdGVyX2luZm8tPnN0YXR1c19hZGRyZXNzKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQpAQCAtMjY2LDggKzI2Niw4IEBACiAJCS8qIERpc2FibGUgYWxsIEdQRXMgaW4gdGhpcyByZWdpc3RlciAqLwogCiAJCXN0YXR1cyA9Ci0JCSAgICBhY3BpX3dyaXRlKDB4MDAsCi0JCQkgICAgICAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5lbmFibGVfYWRkcmVzcyk7CisJCSAgICBhY3BpX2h3X3dyaXRlKDB4MDAsCisJCQkJICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLmVuYWJsZV9hZGRyZXNzKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCX0KQEAgLTMwMyw4ICszMDMsOCBAQAogCQkvKiBDbGVhciBzdGF0dXMgb24gYWxsIEdQRXMgaW4gdGhpcyByZWdpc3RlciAqLwogCiAJCXN0YXR1cyA9Ci0JCSAgICBhY3BpX3dyaXRlKDB4RkYsCi0JCQkgICAgICAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5zdGF0dXNfYWRkcmVzcyk7CisJCSAgICBhY3BpX2h3X3dyaXRlKDB4RkYsCisJCQkJICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLnN0YXR1c19hZGRyZXNzKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCX0KQEAgLTM0NSw5ICszNDUsOSBAQAogCiAJCS8qIEVuYWJsZSBhbGwgInJ1bnRpbWUiIEdQRXMgaW4gdGhpcyByZWdpc3RlciAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLmVuYWJsZV9mb3JfcnVuLAotCQkJCSAgICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLgotCQkJCSAgICBlbmFibGVfYWRkcmVzcyk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2h3X3dyaXRlKGdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5lbmFibGVfZm9yX3J1biwKKwkJCQkgICZncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2FkZHJlc3MpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpAQCAtMzg3LDkgKzM4Nyw5IEBACiAKIAkJLyogRW5hYmxlIGFsbCAid2FrZSIgR1BFcyBpbiB0aGlzIHJlZ2lzdGVyICovCiAKLQkJc3RhdHVzID0gYWNwaV93cml0ZShncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2Zvcl93YWtlLAotCQkJCSAgICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLgotCQkJCSAgICBlbmFibGVfYWRkcmVzcyk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2h3X3dyaXRlKGdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5lbmFibGVfZm9yX3dha2UsCisJCQkJICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLmVuYWJsZV9hZGRyZXNzKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCmluZGV4IDIzZDU1MDUuLjE1YzllZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYwpAQCAtNjIsNiArNjIsMTg0IEBACiAJCSAgICAgICBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZ2lzdGVyX2EsCiAJCSAgICAgICBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZ2lzdGVyX2IpOwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfaHdfdmFsaWRhdGVfcmVnaXN0ZXIKKyAqCisgKiBQQVJBTUVURVJTOiAgUmVnICAgICAgICAgICAgICAgICAtIEdBUyByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICBtYXhfYml0X3dpZHRoICAgICAgIC0gTWF4IGJpdF93aWR0aCBzdXBwb3J0ZWQgKDMyIG9yIDY0KQorICogICAgICAgICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHdoZXJlIHRoZSBnYXMtPmFkZHJlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmV0dXJuZWQKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiBhIEdBUyByZWdpc3Rlci4gQ2hlY2tzIHRoZSBHQVMKKyAqICAgICAgICAgICAgICBwb2ludGVyLCBBZGRyZXNzLCBzcGFjZV9pZCwgYml0X3dpZHRoLCBhbmQgYml0X29mZnNldC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV9od192YWxpZGF0ZV9yZWdpc3RlcihzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZywKKwkJCSAgdTggbWF4X2JpdF93aWR0aCwgdTY0ICphZGRyZXNzKQoreworCisJLyogTXVzdCBoYXZlIGEgdmFsaWQgcG9pbnRlciB0byBhIEdBUyBzdHJ1Y3R1cmUgKi8KKworCWlmICghcmVnKSB7CisJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CisJfQorCisJLyoKKwkgKiBDb3B5IHRoZSB0YXJnZXQgYWRkcmVzcy4gVGhpcyBoYW5kbGVzIHBvc3NpYmxlIGFsaWdubWVudCBpc3N1ZXMuCisJICogQWRkcmVzcyBtdXN0IG5vdCBiZSBudWxsLiBBIG51bGwgYWRkcmVzcyBhbHNvIGluZGljYXRlcyBhbiBvcHRpb25hbAorCSAqIEFDUEkgcmVnaXN0ZXIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkLCBzbyBubyBlcnJvciBtZXNzYWdlLgorCSAqLworCUFDUElfTU9WRV82NF9UT182NChhZGRyZXNzLCAmcmVnLT5hZGRyZXNzKTsKKwlpZiAoISgqYWRkcmVzcykpIHsKKwkJcmV0dXJuIChBRV9CQURfQUREUkVTUyk7CisJfQorCisJLyogVmFsaWRhdGUgdGhlIHNwYWNlX2lEICovCisKKwlpZiAoKHJlZy0+c3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWSkgJiYKKwkgICAgKHJlZy0+c3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPKSkgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJICAgICJVbnN1cHBvcnRlZCBhZGRyZXNzIHNwYWNlOiAweCVYIiwgcmVnLT5zcGFjZV9pZCkpOworCQlyZXR1cm4gKEFFX1NVUFBPUlQpOworCX0KKworCS8qIFZhbGlkYXRlIHRoZSBiaXRfd2lkdGggKi8KKworCWlmICgocmVnLT5iaXRfd2lkdGggIT0gOCkgJiYKKwkgICAgKHJlZy0+Yml0X3dpZHRoICE9IDE2KSAmJgorCSAgICAocmVnLT5iaXRfd2lkdGggIT0gMzIpICYmIChyZWctPmJpdF93aWR0aCAhPSBtYXhfYml0X3dpZHRoKSkgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJICAgICJVbnN1cHBvcnRlZCByZWdpc3RlciBiaXQgd2lkdGg6IDB4JVgiLAorCQkJICAgIHJlZy0+Yml0X3dpZHRoKSk7CisJCXJldHVybiAoQUVfU1VQUE9SVCk7CisJfQorCisJLyogVmFsaWRhdGUgdGhlIGJpdF9vZmZzZXQuIEp1c3QgYSB3YXJuaW5nIGZvciBub3cuICovCisKKwlpZiAocmVnLT5iaXRfb2Zmc2V0ICE9IDApIHsKKwkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJICAgICAgIlVuc3VwcG9ydGVkIHJlZ2lzdGVyIGJpdCBvZmZzZXQ6IDB4JVgiLAorCQkJICAgICAgcmVnLT5iaXRfb2Zmc2V0KSk7CisJfQorCisJcmV0dXJuIChBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od19yZWFkCisgKgorICogUEFSQU1FVEVSUzogIFZhbHVlICAgICAgICAgICAgICAgLSBXaGVyZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgICAgICBSZWcgICAgICAgICAgICAgICAgIC0gR0FTIHJlZ2lzdGVyIHN0cnVjdHVyZQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogUmVhZCBmcm9tIGVpdGhlciBtZW1vcnkgb3IgSU8gc3BhY2UuIFRoaXMgaXMgYSAzMi1iaXQgbWF4CisgKiAgICAgICAgICAgICAgdmVyc2lvbiBvZiBhY3BpX3JlYWQsIHVzZWQgaW50ZXJuYWxseSBzaW5jZSB0aGUgb3ZlcmhlYWQgb2YKKyAqICAgICAgICAgICAgICA2NC1iaXQgdmFsdWVzIGlzIG5vdCBuZWVkZWQuCisgKgorICogTElNSVRBVElPTlM6IDxUaGVzZSBsaW1pdGF0aW9ucyBhbHNvIGFwcGx5IHRvIGFjcGlfaHdfd3JpdGU+CisgKiAgICAgIGJpdF93aWR0aCBtdXN0IGJlIGV4YWN0bHkgOCwgMTYsIG9yIDMyLgorICogICAgICBzcGFjZV9pRCBtdXN0IGJlIHN5c3RlbV9tZW1vcnkgb3Igc3lzdGVtX2lPLgorICogICAgICBiaXRfb2Zmc2V0IGFuZCBhY2Nlc3Nfd2lkdGggYXJlIGN1cnJlbnRseSBpZ25vcmVkLCBhcyB0aGVyZSBoYXMKKyAqICAgICAgICAgIG5vdCBiZWVuIGEgbmVlZCB0byBpbXBsZW1lbnQgdGhlc2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMgYWNwaV9od19yZWFkKHUzMiAqdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKQoreworCXU2NCBhZGRyZXNzOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCUFDUElfRlVOQ1RJT05fTkFNRShod19yZWFkKTsKKworCS8qIFZhbGlkYXRlIGNvbnRlbnRzIG9mIHRoZSBHQVMgcmVnaXN0ZXIgKi8KKworCXN0YXR1cyA9IGFjcGlfaHdfdmFsaWRhdGVfcmVnaXN0ZXIocmVnLCAzMiwgJmFkZHJlc3MpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCisJLyogSW5pdGlhbGl6ZSBlbnRpcmUgMzItYml0IHJldHVybiB2YWx1ZSB0byB6ZXJvICovCisKKwkqdmFsdWUgPSAwOworCisJLyoKKwkgKiBUd28gYWRkcmVzcyBzcGFjZXMgc3VwcG9ydGVkOiBNZW1vcnkgb3IgSU8uIFBDSV9Db25maWcgaXMKKwkgKiBub3Qgc3VwcG9ydGVkIGhlcmUgYmVjYXVzZSB0aGUgR0FTIHN0cnVjdHVyZSBpcyBpbnN1ZmZpY2llbnQKKwkgKi8KKwlpZiAocmVnLT5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZKSB7CisJCXN0YXR1cyA9IGFjcGlfb3NfcmVhZF9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykKKwkJCQkJICAgICBhZGRyZXNzLCB2YWx1ZSwgcmVnLT5iaXRfd2lkdGgpOworCX0gZWxzZSB7CQkvKiBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8sIHZhbGlkYXRlZCBlYXJsaWVyICovCisKKwkJc3RhdHVzID0gYWNwaV9od19yZWFkX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykKKwkJCQkJICAgYWRkcmVzcywgdmFsdWUsIHJlZy0+Yml0X3dpZHRoKTsKKwl9CisKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLAorCQkJICAiUmVhZDogICU4LjhYIHdpZHRoICUyZCBmcm9tICU4LjhYJTguOFggKCVzKVxuIiwKKwkJCSAgKnZhbHVlLCByZWctPmJpdF93aWR0aCwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpLAorCQkJICBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShyZWctPnNwYWNlX2lkKSkpOworCisJcmV0dXJuIChzdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfaHdfd3JpdGUKKyAqCisgKiBQQVJBTUVURVJTOiAgVmFsdWUgICAgICAgICAgICAgICAtIFZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAqICAgICAgICAgICAgICBSZWcgICAgICAgICAgICAgICAgIC0gR0FTIHJlZ2lzdGVyIHN0cnVjdHVyZQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogV3JpdGUgdG8gZWl0aGVyIG1lbW9yeSBvciBJTyBzcGFjZS4gVGhpcyBpcyBhIDMyLWJpdCBtYXgKKyAqICAgICAgICAgICAgICB2ZXJzaW9uIG9mIGFjcGlfd3JpdGUsIHVzZWQgaW50ZXJuYWxseSBzaW5jZSB0aGUgb3ZlcmhlYWQgb2YKKyAqICAgICAgICAgICAgICA2NC1iaXQgdmFsdWVzIGlzIG5vdCBuZWVkZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMgYWNwaV9od193cml0ZSh1MzIgdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKQoreworCXU2NCBhZGRyZXNzOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCUFDUElfRlVOQ1RJT05fTkFNRShod193cml0ZSk7CisKKwkvKiBWYWxpZGF0ZSBjb250ZW50cyBvZiB0aGUgR0FTIHJlZ2lzdGVyICovCisKKwlzdGF0dXMgPSBhY3BpX2h3X3ZhbGlkYXRlX3JlZ2lzdGVyKHJlZywgMzIsICZhZGRyZXNzKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCS8qCisJICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLiBQQ0lfQ29uZmlnIGlzCisJICogbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3R1cmUgaXMgaW5zdWZmaWNpZW50CisJICovCisJaWYgKHJlZy0+c3BhY2VfaWQgPT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX01FTU9SWSkgeworCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQorCQkJCQkgICAgICBhZGRyZXNzLCB2YWx1ZSwgcmVnLT5iaXRfd2lkdGgpOworCX0gZWxzZSB7CQkvKiBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8sIHZhbGlkYXRlZCBlYXJsaWVyICovCisKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KChhY3BpX2lvX2FkZHJlc3MpCisJCQkJCSAgICBhZGRyZXNzLCB2YWx1ZSwgcmVnLT5iaXRfd2lkdGgpOworCX0KKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sCisJCQkgICJXcm90ZTogJTguOFggd2lkdGggJTJkICAgdG8gJTguOFglOC44WCAoJXMpXG4iLAorCQkJICB2YWx1ZSwgcmVnLT5iaXRfd2lkdGgsIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzKSwKKwkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUocmVnLT5zcGFjZV9pZCkpKTsKKworCXJldHVybiAoc3RhdHVzKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9od19jbGVhcl9hY3BpX3N0YXR1cwpAQCAtMTUyLDE1ICszMzAsMTYgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfd3JpdGVfcG0xX2NvbnRyb2wpOwogCi0Jc3RhdHVzID0gYWNwaV93cml0ZShwbTFhX2NvbnRyb2wsICZhY3BpX2dibF9GQURULnhwbTFhX2NvbnRyb2xfYmxvY2spOworCXN0YXR1cyA9CisJICAgIGFjcGlfaHdfd3JpdGUocG0xYV9jb250cm9sLCAmYWNwaV9nYmxfRkFEVC54cG0xYV9jb250cm9sX2Jsb2NrKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCiAJaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWJfY29udHJvbF9ibG9jay5hZGRyZXNzKSB7CiAJCXN0YXR1cyA9Ci0JCSAgICBhY3BpX3dyaXRlKHBtMWJfY29udHJvbCwKLQkJCSAgICAgICAmYWNwaV9nYmxfRkFEVC54cG0xYl9jb250cm9sX2Jsb2NrKTsKKwkJICAgIGFjcGlfaHdfd3JpdGUocG0xYl9jb250cm9sLAorCQkJCSAgJmFjcGlfZ2JsX0ZBRFQueHBtMWJfY29udHJvbF9ibG9jayk7CiAJfQogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQpAQCAtMjE4LDEyICszOTcsMTMgQEAKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTDoJLyogOC1iaXQgYWNjZXNzICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfaHdfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNX1RJTUVSOgkvKiAzMi1iaXQgYWNjZXNzICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrKTsKKwkJc3RhdHVzID0gYWNwaV9od19yZWFkKCZ2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfUkVHSVNURVJfU01JX0NPTU1BTkRfQkxPQ0s6CS8qIDgtYml0IGFjY2VzcyAqLwpAQCAtMzQwLDcgKzUyMCw4IEBACiAJCSAqIGFzIHBlciB0aGUgQUNQSSBzcGVjLgogCQkgKi8KIAkJc3RhdHVzID0KLQkJICAgIGFjcGlfcmVhZCgmcmVhZF92YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKKwkJICAgIGFjcGlfaHdfcmVhZCgmcmVhZF92YWx1ZSwKKwkJCQkgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KQEAgLTM1MCwxMiArNTMxLDEzIEBACiAJCUFDUElfSU5TRVJUX0JJVFModmFsdWUsIEFDUElfUE0yX0NPTlRST0xfUFJFU0VSVkVEX0JJVFMsCiAJCQkJIHJlYWRfdmFsdWUpOwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2h3X3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0yX2NvbnRyb2xfYmxvY2spOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9QTV9USU1FUjoJLyogMzItYml0IGFjY2VzcyAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGUodmFsdWUsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFR0lTVEVSX1NNSV9DT01NQU5EX0JMT0NLOgkvKiA4LWJpdCBhY2Nlc3MgKi8KQEAgLTQwMSw3ICs1ODMsNyBAQAogCiAJLyogVGhlIGZpcnN0IHJlZ2lzdGVyIGlzIGFsd2F5cyByZXF1aXJlZCAqLwogCi0Jc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZV9hLCByZWdpc3Rlcl9hKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3JlYWQoJnZhbHVlX2EsIHJlZ2lzdGVyX2EpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQpAQCAtNDA5LDcgKzU5MSw3IEBACiAJLyogU2Vjb25kIHJlZ2lzdGVyIGlzIG9wdGlvbmFsICovCiAKIAlpZiAocmVnaXN0ZXJfYi0+YWRkcmVzcykgewotCQlzdGF0dXMgPSBhY3BpX3JlYWQoJnZhbHVlX2IsIHJlZ2lzdGVyX2IpOworCQlzdGF0dXMgPSBhY3BpX2h3X3JlYWQoJnZhbHVlX2IsIHJlZ2lzdGVyX2IpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpAQCAtNDUyLDcgKzYzNCw3IEBACiAKIAkvKiBUaGUgZmlyc3QgcmVnaXN0ZXIgaXMgYWx3YXlzIHJlcXVpcmVkICovCiAKLQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCByZWdpc3Rlcl9hKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKHZhbHVlLCByZWdpc3Rlcl9hKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuIChzdGF0dXMpOwogCX0KQEAgLTQ3MCw3ICs2NTIsNyBAQAogCSAqIGFuZCB3cml0ZXMgaGF2ZSBubyBzaWRlIGVmZmVjdHMiCiAJICovCiAJaWYgKHJlZ2lzdGVyX2ItPmFkZHJlc3MpIHsKLQkJc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgcmVnaXN0ZXJfYik7CisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGUodmFsdWUsIHJlZ2lzdGVyX2IpOwogCX0KIAogCXJldHVybiAoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKaW5kZXggYjdmNTIyYy4uNmIyODJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCX0KIAogCXN0YXR1cyA9Ci0JICAgIGFjcGlfaHdfbG93X2xldmVsX3JlYWQoMzIsIHRpY2tzLCAmYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2spOworCSAgICBhY3BpX2h3X3JlYWQodGlja3MsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmYWNlLmMKaW5kZXggOTgyOTk3OS4uNjQ3YzdiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmYWNlLmMKQEAgLTc4LDkgKzc4LDIyIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT1RfRVhJU1QpOwogCX0KIAotCS8qIFdyaXRlIHRoZSByZXNldCB2YWx1ZSB0byB0aGUgcmVzZXQgcmVnaXN0ZXIgKi8KKwlpZiAocmVzZXRfcmVnLT5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8pIHsKKwkJLyoKKwkJICogRm9yIEkvTyBzcGFjZSwgd3JpdGUgZGlyZWN0bHkgdG8gdGhlIE9TTC4gVGhpcyBieXBhc3NlcyB0aGUgcG9ydAorCQkgKiB2YWxpZGF0aW9uIG1lY2hhbmlzbSwgd2hpY2ggbWF5IGJsb2NrIGEgdmFsaWQgd3JpdGUgdG8gdGhlIHJlc2V0CisJCSAqIHJlZ2lzdGVyLgorCQkgKi8KKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfb3Nfd3JpdGVfcG9ydCgoYWNwaV9pb19hZGRyZXNzKSByZXNldF9yZWctPmFkZHJlc3MsCisJCQkJICAgICAgIGFjcGlfZ2JsX0ZBRFQucmVzZXRfdmFsdWUsCisJCQkJICAgICAgIHJlc2V0X3JlZy0+Yml0X3dpZHRoKTsKKwl9IGVsc2UgeworCQkvKiBXcml0ZSB0aGUgcmVzZXQgdmFsdWUgdG8gdGhlIHJlc2V0IHJlZ2lzdGVyICovCiAKLQlzdGF0dXMgPSBhY3BpX3dyaXRlKGFjcGlfZ2JsX0ZBRFQucmVzZXRfdmFsdWUsIHJlc2V0X3JlZyk7CisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGUoYWNwaV9nYmxfRkFEVC5yZXNldF92YWx1ZSwgcmVzZXRfcmVnKTsKKwl9CisKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtOTcsNjcgKzExMCw5MiBAQAogICoKICAqIERFU0NSSVBUSU9OOiBSZWFkIGZyb20gZWl0aGVyIG1lbW9yeSBvciBJTyBzcGFjZS4KICAqCisgKiBMSU1JVEFUSU9OUzogPFRoZXNlIGxpbWl0YXRpb25zIGFsc28gYXBwbHkgdG8gYWNwaV93cml0ZT4KKyAqICAgICAgYml0X3dpZHRoIG11c3QgYmUgZXhhY3RseSA4LCAxNiwgMzIsIG9yIDY0LgorICogICAgICBzcGFjZV9pRCBtdXN0IGJlIHN5c3RlbV9tZW1vcnkgb3Igc3lzdGVtX2lPLgorICogICAgICBiaXRfb2Zmc2V0IGFuZCBhY2Nlc3Nfd2lkdGggYXJlIGN1cnJlbnRseSBpZ25vcmVkLCBhcyB0aGVyZSBoYXMKKyAqICAgICAgICAgIG5vdCBiZWVuIGEgbmVlZCB0byBpbXBsZW1lbnQgdGhlc2UuCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfcmVhZCh1MzIgKnZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZykKK2FjcGlfc3RhdHVzIGFjcGlfcmVhZCh1NjQgKnJldHVybl92YWx1ZSwgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWcpCiB7CisJdTMyIHZhbHVlOwogCXUzMiB3aWR0aDsKIAl1NjQgYWRkcmVzczsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlBQ1BJX0ZVTkNUSU9OX05BTUUoYWNwaV9yZWFkKTsKIAotCS8qCi0JICogTXVzdCBoYXZlIGEgdmFsaWQgcG9pbnRlciB0byBhIEdBUyBzdHJ1Y3R1cmUsIGFuZCBhIG5vbi16ZXJvIGFkZHJlc3MKLQkgKiB3aXRoaW4uCi0JICovCi0JaWYgKCFyZWcpIHsKKwlpZiAoIXJldHVybl92YWx1ZSkgewogCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAotCS8qIEdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3MuIEhhbmRsZXMgcG9zc2libGUgYWxpZ25tZW50IGlzc3VlcyAqLworCS8qIFZhbGlkYXRlIGNvbnRlbnRzIG9mIHRoZSBHQVMgcmVnaXN0ZXIuIEFsbG93IDY0LWJpdCB0cmFuc2ZlcnMgKi8KIAotCUFDUElfTU9WRV82NF9UT182NCgmYWRkcmVzcywgJnJlZy0+YWRkcmVzcyk7Ci0JaWYgKCFhZGRyZXNzKSB7Ci0JCXJldHVybiAoQUVfQkFEX0FERFJFU1MpOworCXN0YXR1cyA9IGFjcGlfaHdfdmFsaWRhdGVfcmVnaXN0ZXIocmVnLCA2NCwgJmFkZHJlc3MpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCi0JLyogU3VwcG9ydGVkIHdpZHRocyBhcmUgOC8xNi8zMiAqLwotCiAJd2lkdGggPSByZWctPmJpdF93aWR0aDsKLQlpZiAoKHdpZHRoICE9IDgpICYmICh3aWR0aCAhPSAxNikgJiYgKHdpZHRoICE9IDMyKSkgewotCQlyZXR1cm4gKEFFX1NVUFBPUlQpOworCWlmICh3aWR0aCA9PSA2NCkgeworCQl3aWR0aCA9IDMyOwkvKiBCcmVhayBpbnRvIHR3byAzMi1iaXQgdHJhbnNmZXJzICovCiAJfQogCi0JLyogSW5pdGlhbGl6ZSBlbnRpcmUgMzItYml0IHJldHVybiB2YWx1ZSB0byB6ZXJvICovCisJLyogSW5pdGlhbGl6ZSBlbnRpcmUgNjQtYml0IHJldHVybiB2YWx1ZSB0byB6ZXJvICovCiAKLQkqdmFsdWUgPSAwOworCSpyZXR1cm5fdmFsdWUgPSAwOworCXZhbHVlID0gMDsKIAogCS8qCiAJICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLiBQQ0lfQ29uZmlnIGlzCiAJICogbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3R1cmUgaXMgaW5zdWZmaWNpZW50CiAJICovCi0Jc3dpdGNoIChyZWctPnNwYWNlX2lkKSB7Ci0JY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZOgorCWlmIChyZWctPnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlkpIHsKKwkJc3RhdHVzID0gYWNwaV9vc19yZWFkX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKQorCQkJCQkgICAgIGFkZHJlc3MsICZ2YWx1ZSwgd2lkdGgpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCQkqcmV0dXJuX3ZhbHVlID0gdmFsdWU7CiAKLQkJc3RhdHVzID0gYWNwaV9vc19yZWFkX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhZGRyZXNzLAotCQkJCQkgICAgIHZhbHVlLCB3aWR0aCk7Ci0JCWJyZWFrOworCQlpZiAocmVnLT5iaXRfd2lkdGggPT0gNjQpIHsKIAotCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOgorCQkJLyogUmVhZCB0aGUgdG9wIDMyIGJpdHMgKi8KIAotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9od19yZWFkX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykgYWRkcmVzcywgdmFsdWUsIHdpZHRoKTsKLQkJYnJlYWs7CisJCQlzdGF0dXMgPSBhY3BpX29zX3JlYWRfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpCisJCQkJCQkgICAgIChhZGRyZXNzICsgNCksICZ2YWx1ZSwgMzIpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQkJKnJldHVybl92YWx1ZSB8PSAoKHU2NCl2YWx1ZSA8PCAzMik7CisJCX0KKwl9IGVsc2UgewkJLyogQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPLCB2YWxpZGF0ZWQgZWFybGllciAqLwogCi0JZGVmYXVsdDoKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiVW5zdXBwb3J0ZWQgYWRkcmVzcyBzcGFjZTogJVgiLCByZWctPnNwYWNlX2lkKSk7Ci0JCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpCisJCQkJCSAgIGFkZHJlc3MsICZ2YWx1ZSwgd2lkdGgpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCQkqcmV0dXJuX3ZhbHVlID0gdmFsdWU7CisKKwkJaWYgKHJlZy0+Yml0X3dpZHRoID09IDY0KSB7CisKKwkJCS8qIFJlYWQgdGhlIHRvcCAzMiBiaXRzICovCisKKwkJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpCisJCQkJCQkgICAoYWRkcmVzcyArIDQpLCAmdmFsdWUsIDMyKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKwkJCSpyZXR1cm5fdmFsdWUgfD0gKCh1NjQpdmFsdWUgPDwgMzIpOworCQl9CiAJfQogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKLQkJCSAgIlJlYWQ6ICAlOC44WCB3aWR0aCAlMmQgZnJvbSAlOC44WCU4LjhYICglcylcbiIsCi0JCQkgICp2YWx1ZSwgd2lkdGgsIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzKSwKKwkJCSAgIlJlYWQ6ICAlOC44WCU4LjhYIHdpZHRoICUyZCBmcm9tICU4LjhYJTguOFggKCVzKVxuIiwKKwkJCSAgQUNQSV9GT1JNQVRfVUlOVDY0KCpyZXR1cm5fdmFsdWUpLCByZWctPmJpdF93aWR0aCwKKwkJCSAgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpLAogCQkJICBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShyZWctPnNwYWNlX2lkKSkpOwogCiAJcmV0dXJuIChzdGF0dXMpOwpAQCAtMTY5LDcgKzIwNyw3IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfd3JpdGUKICAqCi0gKiBQQVJBTUVURVJTOiAgVmFsdWUgICAgICAgICAgICAgICAtIFRvIGJlIHdyaXR0ZW4KKyAqIFBBUkFNRVRFUlM6ICBWYWx1ZSAgICAgICAgICAgICAgIC0gVmFsdWUgdG8gYmUgd3JpdHRlbgogICogICAgICAgICAgICAgIFJlZyAgICAgICAgICAgICAgICAgLSBHQVMgcmVnaXN0ZXIgc3RydWN0dXJlCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwpAQCAtMTc3LDcgKzIxNSw3IEBACiAgKiBERVNDUklQVElPTjogV3JpdGUgdG8gZWl0aGVyIG1lbW9yeSBvciBJTyBzcGFjZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV93cml0ZSh1MzIgdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKQorYWNwaV9zdGF0dXMgYWNwaV93cml0ZSh1NjQgdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKQogewogCXUzMiB3aWR0aDsKIAl1NjQgYWRkcmVzczsKQEAgLTE4NSw1NCArMjIzLDYxIEBACiAKIAlBQ1BJX0ZVTkNUSU9OX05BTUUoYWNwaV93cml0ZSk7CiAKLQkvKgotCSAqIE11c3QgaGF2ZSBhIHZhbGlkIHBvaW50ZXIgdG8gYSBHQVMgc3RydWN0dXJlLCBhbmQgYSBub24temVybyBhZGRyZXNzCi0JICogd2l0aGluLgotCSAqLwotCWlmICghcmVnKSB7Ci0JCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CisJLyogVmFsaWRhdGUgY29udGVudHMgb2YgdGhlIEdBUyByZWdpc3Rlci4gQWxsb3cgNjQtYml0IHRyYW5zZmVycyAqLworCisJc3RhdHVzID0gYWNwaV9od192YWxpZGF0ZV9yZWdpc3RlcihyZWcsIDY0LCAmYWRkcmVzcyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAKLQkvKiBHZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBhZGRyZXNzLiBIYW5kbGVzIHBvc3NpYmxlIGFsaWdubWVudCBpc3N1ZXMgKi8KLQotCUFDUElfTU9WRV82NF9UT182NCgmYWRkcmVzcywgJnJlZy0+YWRkcmVzcyk7Ci0JaWYgKCFhZGRyZXNzKSB7Ci0JCXJldHVybiAoQUVfQkFEX0FERFJFU1MpOwotCX0KLQotCS8qIFN1cHBvcnRlZCB3aWR0aHMgYXJlIDgvMTYvMzIgKi8KLQogCXdpZHRoID0gcmVnLT5iaXRfd2lkdGg7Ci0JaWYgKCh3aWR0aCAhPSA4KSAmJiAod2lkdGggIT0gMTYpICYmICh3aWR0aCAhPSAzMikpIHsKLQkJcmV0dXJuIChBRV9TVVBQT1JUKTsKKwlpZiAod2lkdGggPT0gNjQpIHsKKwkJd2lkdGggPSAzMjsJLyogQnJlYWsgaW50byB0d28gMzItYml0IHRyYW5zZmVycyAqLwogCX0KIAogCS8qCi0JICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLgotCSAqIFBDSV9Db25maWcgaXMgbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3QgaXMgaW5zdWZmaWNpZW50CisJICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLiBQQ0lfQ29uZmlnIGlzCisJICogbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3R1cmUgaXMgaW5zdWZmaWNpZW50CiAJICovCi0Jc3dpdGNoIChyZWctPnNwYWNlX2lkKSB7Ci0JY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZOgorCWlmIChyZWctPnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlkpIHsKKwkJc3RhdHVzID0gYWNwaV9vc193cml0ZV9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykKKwkJCQkJICAgICAgYWRkcmVzcywgQUNQSV9MT0RXT1JEKHZhbHVlKSwKKwkJCQkJICAgICAgd2lkdGgpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQogCi0JCXN0YXR1cyA9IGFjcGlfb3Nfd3JpdGVfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpIGFkZHJlc3MsCi0JCQkJCSAgICAgIHZhbHVlLCB3aWR0aCk7Ci0JCWJyZWFrOworCQlpZiAocmVnLT5iaXRfd2lkdGggPT0gNjQpIHsKKwkJCXN0YXR1cyA9IGFjcGlfb3Nfd3JpdGVfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpCisJCQkJCQkgICAgICAoYWRkcmVzcyArIDQpLAorCQkJCQkJICAgICAgQUNQSV9ISURXT1JEKHZhbHVlKSwgMzIpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQl9CisJfSBlbHNlIHsJCS8qIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTywgdmFsaWRhdGVkIGVhcmxpZXIgKi8KIAotCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOgotCi0JCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfcG9ydCgoYWNwaV9pb19hZGRyZXNzKSBhZGRyZXNzLCB2YWx1ZSwKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KChhY3BpX2lvX2FkZHJlc3MpCisJCQkJCSAgICBhZGRyZXNzLCBBQ1BJX0xPRFdPUkQodmFsdWUpLAogCQkJCQkgICAgd2lkdGgpOwotCQlicmVhazsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KIAotCWRlZmF1bHQ6Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIlVuc3VwcG9ydGVkIGFkZHJlc3Mgc3BhY2U6ICVYIiwgcmVnLT5zcGFjZV9pZCkpOwotCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOworCQlpZiAocmVnLT5iaXRfd2lkdGggPT0gNjQpIHsKKwkJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfcG9ydCgoYWNwaV9pb19hZGRyZXNzKQorCQkJCQkJICAgIChhZGRyZXNzICsgNCksCisJCQkJCQkgICAgQUNQSV9ISURXT1JEKHZhbHVlKSwgMzIpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQl9CiAJfQogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKLQkJCSAgIldyb3RlOiAlOC44WCB3aWR0aCAlMmQgICB0byAlOC44WCU4LjhYICglcylcbiIsCi0JCQkgIHZhbHVlLCB3aWR0aCwgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpLAorCQkJICAiV3JvdGU6ICU4LjhYJTguOFggd2lkdGggJTJkICAgdG8gJTguOFglOC44WCAoJXMpXG4iLAorCQkJICBBQ1BJX0ZPUk1BVF9VSU5UNjQodmFsdWUpLCByZWctPmJpdF93aWR0aCwKKwkJCSAgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3MpLAogCQkJICBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShyZWctPnNwYWNlX2lkKSkpOwogCiAJcmV0dXJuIChzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYwppbmRleCBlZmM5NzFhLi44YTU4YTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYwpAQCAtOTYsMTcgKzk2LDY4IEBACiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCi0gKiBERVNDUklQVElPTjogRGVsZXRlIGEgbmFtZXNwYWNlIG5vZGUKKyAqIERFU0NSSVBUSU9OOiBEZWxldGUgYSBuYW1lc3BhY2Ugbm9kZS4gQWxsIG5vZGUgZGVsZXRpb25zIG11c3QgY29tZSB0aHJvdWdoCisgKiAgICAgICAgICAgICAgaGVyZS4gRGV0YWNoZXMgYW55IGF0dGFjaGVkIG9iamVjdHMsIGluY2x1ZGluZyBhbnkgYXR0YWNoZWQKKyAqICAgICAgICAgICAgICBkYXRhLiBJZiBhIGhhbmRsZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGF0dGFjaGVkIGRhdGEsIGl0IGlzCisgKiAgICAgICAgICAgICAgaW52b2tlZCBiZWZvcmUgdGhlIG5vZGUgaXMgZGVsZXRlZC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB2b2lkIGFjcGlfbnNfZGVsZXRlX25vZGUoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUpCiB7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CisKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfZGVsZXRlX25vZGUpOworCisJLyogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUgKi8KKworCWFjcGlfbnNfZGV0YWNoX29iamVjdChub2RlKTsKKworCS8qCisJICogRGVsZXRlIGFuIGF0dGFjaGVkIGRhdGEgb2JqZWN0IGlmIHByZXNlbnQgKGFuIG9iamVjdCB0aGF0IHdhcyBjcmVhdGVkCisJICogYW5kIGF0dGFjaGVkIHZpYSBhY3BpX2F0dGFjaF9kYXRhKS4gTm90ZTogQWZ0ZXIgYW55IG5vcm1hbCBvYmplY3QgaXMKKwkgKiBkZXRhY2hlZCBhYm92ZSwgdGhlIG9ubHkgcG9zc2libGUgcmVtYWluaW5nIG9iamVjdCBpcyBhIGRhdGEgb2JqZWN0LgorCSAqLworCW9ial9kZXNjID0gbm9kZS0+b2JqZWN0OworCWlmIChvYmpfZGVzYyAmJiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgeworCisJCS8qIEludm9rZSB0aGUgYXR0YWNoZWQgZGF0YSBkZWxldGlvbiBoYW5kbGVyIGlmIHByZXNlbnQgKi8KKworCQlpZiAob2JqX2Rlc2MtPmRhdGEuaGFuZGxlcikgeworCQkJb2JqX2Rlc2MtPmRhdGEuaGFuZGxlcihub2RlLCBvYmpfZGVzYy0+ZGF0YS5wb2ludGVyKTsKKwkJfQorCisJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShvYmpfZGVzYyk7CisJfQorCisJLyogTm93IHdlIGNhbiBkZWxldGUgdGhlIG5vZGUgKi8KKworCSh2b2lkKWFjcGlfb3NfcmVsZWFzZV9vYmplY3QoYWNwaV9nYmxfbmFtZXNwYWNlX2NhY2hlLCBub2RlKTsKKworCUFDUElfTUVNX1RSQUNLSU5HKGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+dG90YWxfZnJlZWQrKyk7CisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywgIk5vZGUgJXAsIFJlbWFpbmluZyAlWFxuIiwKKwkJCSAgbm9kZSwgYWNwaV9nYmxfY3VycmVudF9ub2RlX2NvdW50KSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVtb3ZlX25vZGUKKyAqCisgKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAgIC0gTm9kZSB0byBiZSByZW1vdmVkL2RlbGV0ZWQKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZQorICoKKyAqIERFU0NSSVBUSU9OOiBSZW1vdmUgKHVubGluaykgYW5kIGRlbGV0ZSBhIG5hbWVzcGFjZSBub2RlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBhY3BpX25zX3JlbW92ZV9ub2RlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKQorewogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZTsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcHJldl9ub2RlOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpuZXh0X25vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihuc19kZWxldGVfbm9kZSwgbm9kZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfcmVtb3ZlX25vZGUsIG5vZGUpOwogCiAJcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKTsKIApAQCAtMTQyLDEyICsxOTMsOSBAQAogCQl9CiAJfQogCi0JQUNQSV9NRU1fVFJBQ0tJTkcoYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9mcmVlZCsrKTsKKwkvKiBEZWxldGUgdGhlIG5vZGUgYW5kIGFueSBhdHRhY2hlZCBvYmplY3RzICovCiAKLQkvKiBEZXRhY2ggYW4gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSwgdGhlbiBkZWxldGUgdGhlIG5vZGUgKi8KLQotCWFjcGlfbnNfZGV0YWNoX29iamVjdChub2RlKTsKLQkodm9pZClhY3BpX29zX3JlbGVhc2Vfb2JqZWN0KGFjcGlfZ2JsX25hbWVzcGFjZV9jYWNoZSwgbm9kZSk7CisJYWNwaV9uc19kZWxldGVfbm9kZShub2RlKTsKIAlyZXR1cm5fVk9JRDsKIH0KIApAQCAtMjczLDI1ICszMjEsMTEgQEAKIAkJCQkgICAgcGFyZW50X25vZGUsIGNoaWxkX25vZGUpKTsKIAkJfQogCi0JCS8qIE5vdyB3ZSBjYW4gZnJlZSB0aGlzIGNoaWxkIG9iamVjdCAqLwotCi0JCUFDUElfTUVNX1RSQUNLSU5HKGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+dG90YWxfZnJlZWQrKyk7Ci0KLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywKLQkJCQkgICJPYmplY3QgJXAsIFJlbWFpbmluZyAlWFxuIiwgY2hpbGRfbm9kZSwKLQkJCQkgIGFjcGlfZ2JsX2N1cnJlbnRfbm9kZV9jb3VudCkpOwotCi0JCS8qIERldGFjaCBhbiBvYmplY3QgaWYgdGhlcmUgaXMgb25lLCB0aGVuIGZyZWUgdGhlIGNoaWxkIG5vZGUgKi8KLQotCQlhY3BpX25zX2RldGFjaF9vYmplY3QoY2hpbGRfbm9kZSk7Ci0KLQkJLyogTm93IHdlIGNhbiBkZWxldGUgdGhlIG5vZGUgKi8KLQotCQkodm9pZClhY3BpX29zX3JlbGVhc2Vfb2JqZWN0KGFjcGlfZ2JsX25hbWVzcGFjZV9jYWNoZSwKLQkJCQkJICAgICBjaGlsZF9ub2RlKTsKLQotCQkvKiBBbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBjaGlsZCBpbiB0aGUgbGlzdCAqLwotCisJCS8qCisJCSAqIERlbGV0ZSB0aGlzIGNoaWxkIG5vZGUgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgY2hpbGQgaW4gdGhlIGxpc3QuCisJCSAqIE5vIG5lZWQgdG8gdW5saW5rIHRoZSBub2RlIHNpbmNlIHdlIGFyZSBkZWxldGluZyB0aGUgZW50aXJlIGJyYW5jaC4KKwkJICovCisJCWFjcGlfbnNfZGVsZXRlX25vZGUoY2hpbGRfbm9kZSk7CiAJCWNoaWxkX25vZGUgPSBuZXh0X25vZGU7CiAKIAl9IHdoaWxlICghKGZsYWdzICYgQU5PQkpfRU5EX09GX1BFRVJfTElTVCkpOwpAQCAtNDMzLDcgKzQ2Nyw3IEBACiAKIAkJaWYgKGRlbGV0aW9uX25vZGUpIHsKIAkJCWFjcGlfbnNfZGVsZXRlX2NoaWxkcmVuKGRlbGV0aW9uX25vZGUpOwotCQkJYWNwaV9uc19kZWxldGVfbm9kZShkZWxldGlvbl9ub2RlKTsKKwkJCWFjcGlfbnNfcmVtb3ZlX25vZGUoZGVsZXRpb25fbm9kZSk7CiAJCQlkZWxldGlvbl9ub2RlID0gTlVMTDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMKaW5kZXggNDE5OTRmZS4uMGZlODdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXBkdi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wZHYuYwpAQCAtNzAsNyArNzAsNiBAQAogYWNwaV9uc19kdW1wX29uZV9kZXZpY2UoYWNwaV9oYW5kbGUgb2JqX2hhbmRsZSwKIAkJCXUzMiBsZXZlbCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSkKIHsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyOwogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1MzIgaTsKQEAgLTgwLDE3ICs3OSwxNSBAQAogCXN0YXR1cyA9CiAJICAgIGFjcGlfbnNfZHVtcF9vbmVfb2JqZWN0KG9ial9oYW5kbGUsIGxldmVsLCBjb250ZXh0LCByZXR1cm5fdmFsdWUpOwogCi0JYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfTE9DQUxfQlVGRkVSOwotCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKG9ial9oYW5kbGUsICZidWZmZXIpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKG9ial9oYW5kbGUsICZpbmZvKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwogCQlmb3IgKGkgPSAwOyBpIDwgbGV2ZWw7IGkrKykgewogCQkJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfVEFCTEVTLCAiICIpKTsKIAkJfQogCiAJCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX1RBQkxFUywKIAkJCQkgICAgICAiICAgIEhJRDogJXMsIEFEUjogJTguOFglOC44WCwgU3RhdHVzOiAlWFxuIiwKLQkJCQkgICAgICBpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwKKwkJCQkgICAgICBpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsCiAJCQkJICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGluZm8tPmFkZHJlc3MpLAogCQkJCSAgICAgIGluZm8tPmN1cnJlbnRfc3RhdHVzKSk7CiAJCUFDUElfRlJFRShpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCmluZGV4IDhlN2RlYzEuLjg0NmQxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwpAQCAtNTAsNiArNTAsMTEgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnNldmFsIikKIAorLyogTG9jYWwgcHJvdG90eXBlcyAqLworc3RhdGljIHZvaWQKK2FjcGlfbnNfZXhlY19tb2R1bGVfY29kZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICptZXRob2Rfb2JqLAorCQkJIHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2V2YWx1YXRlCkBAIC03Niw2ICs4MSw3IEBACiAgKiBNVVRFWDogICAgICAgTG9ja3MgaW50ZXJwcmV0ZXIKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBhY3BpX3N0YXR1cyBhY3BpX25zX2V2YWx1YXRlKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKiBpbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTI3NiwzICsyODIsMTM0IEBACiAJICovCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZXhlY19tb2R1bGVfY29kZV9saXN0CisgKgorICogUEFSQU1FVEVSUzogIE5vbmUKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZS4gRXhjZXB0aW9ucyBkdXJpbmcgbWV0aG9kIGV4ZWN1dGlvbiBhcmUgaWdub3JlZCwgc2luY2UKKyAqICAgICAgICAgICAgICB3ZSBjYW5ub3QgYWJvcnQgYSB0YWJsZSBsb2FkLgorICoKKyAqIERFU0NSSVBUSU9OOiBFeGVjdXRlIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2xvYmFsIG1vZHVsZS1sZXZlbCBjb2RlIGxpc3QuCisgKiAgICAgICAgICAgICAgRWFjaCBlbGVtZW50IGlzIGV4ZWN1dGVkIGFzIGEgc2luZ2xlIGNvbnRyb2wgbWV0aG9kLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYWNwaV9uc19leGVjX21vZHVsZV9jb2RlX2xpc3Qodm9pZCkKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwcmV2OworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHQ7CisJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKKwl1MzIgbWV0aG9kX2NvdW50ID0gMDsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfZXhlY19tb2R1bGVfY29kZV9saXN0KTsKKworCS8qIEV4aXQgbm93IGlmIHRoZSBsaXN0IGlzIGVtcHR5ICovCisKKwluZXh0ID0gYWNwaV9nYmxfbW9kdWxlX2NvZGVfbGlzdDsKKwlpZiAoIW5leHQpIHsKKwkJcmV0dXJuX1ZPSUQ7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sgKi8KKworCWluZm8gPSBBQ1BJX0FMTE9DQVRFKHNpemVvZihzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvKSk7CisJaWYgKCFpbmZvKSB7CisJCXJldHVybl9WT0lEOworCX0KKworCS8qIFdhbGsgdGhlIGxpc3QsIGV4ZWN1dGluZyBlYWNoICJtZXRob2QiICovCisKKwl3aGlsZSAobmV4dCkgeworCQlwcmV2ID0gbmV4dDsKKwkJbmV4dCA9IG5leHQtPm1ldGhvZC5tdXRleDsKKworCQkvKiBDbGVhciB0aGUgbGluayBmaWVsZCBhbmQgZXhlY3V0ZSB0aGUgbWV0aG9kICovCisKKwkJcHJldi0+bWV0aG9kLm11dGV4ID0gTlVMTDsKKwkJYWNwaV9uc19leGVjX21vZHVsZV9jb2RlKHByZXYsIGluZm8pOworCQltZXRob2RfY291bnQrKzsKKworCQkvKiBEZWxldGUgdGhlICh0ZW1wb3JhcnkpIG1ldGhvZCBvYmplY3QgKi8KKworCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocHJldik7CisJfQorCisJQUNQSV9JTkZPKChBRV9JTkZPLAorCQkgICAiRXhlY3V0ZWQgJXUgYmxvY2tzIG9mIG1vZHVsZS1sZXZlbCBleGVjdXRhYmxlIEFNTCBjb2RlIiwKKwkJICAgbWV0aG9kX2NvdW50KSk7CisKKwlBQ1BJX0ZSRUUoaW5mbyk7CisJYWNwaV9nYmxfbW9kdWxlX2NvZGVfbGlzdCA9IE5VTEw7CisJcmV0dXJuX1ZPSUQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZXhlY19tb2R1bGVfY29kZQorICoKKyAqIFBBUkFNRVRFUlM6ICBtZXRob2Rfb2JqICAgICAgICAgIC0gT2JqZWN0IGNvbnRhaW5lciBmb3IgdGhlIG1vZHVsZS1sZXZlbCBjb2RlCisgKiAgICAgICAgICAgICAgSW5mbyAgICAgICAgICAgICAgICAtIEluZm8gYmxvY2sgZm9yIG1ldGhvZCBldmFsdWF0aW9uCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUuIEV4Y2VwdGlvbnMgZHVyaW5nIG1ldGhvZCBleGVjdXRpb24gYXJlIGlnbm9yZWQsIHNpbmNlCisgKiAgICAgICAgICAgICAgd2UgY2Fubm90IGFib3J0IGEgdGFibGUgbG9hZC4KKyAqCisgKiBERVNDUklQVElPTjogRXhlY3V0ZSBhIGNvbnRyb2wgbWV0aG9kIGNvbnRhaW5pbmcgYSBibG9jayBvZiBtb2R1bGUtbGV2ZWwKKyAqICAgICAgICAgICAgICBleGVjdXRhYmxlIEFNTCBjb2RlLiBUaGUgY29udHJvbCBtZXRob2QgaXMgdGVtcG9yYXJpbHkKKyAqICAgICAgICAgICAgICBpbnN0YWxsZWQgdG8gdGhlIHJvb3Qgbm9kZSwgdGhlbiBldmFsdWF0ZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2FjcGlfbnNfZXhlY19tb2R1bGVfY29kZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICptZXRob2Rfb2JqLAorCQkJIHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcm9vdF9vYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShuc19leGVjX21vZHVsZV9jb2RlKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGV2YWx1YXRpb24gaW5mb3JtYXRpb24gYmxvY2sgKi8KKworCUFDUElfTUVNU0VUKGluZm8sIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9ldmFsdWF0ZV9pbmZvKSk7CisJaW5mby0+cHJlZml4X25vZGUgPSBhY3BpX2dibF9yb290X25vZGU7CisKKwkvKgorCSAqIEdldCB0aGUgY3VycmVudGx5IGF0dGFjaGVkIHJvb3Qgb2JqZWN0LiBBZGQgYSByZWZlcmVuY2UsIGJlY2F1c2UgdGhlCisJICogcmVmIGNvdW50IHdpbGwgYmUgZGVjcmVhc2VkIHdoZW4gdGhlIG1ldGhvZCBvYmplY3QgaXMgaW5zdGFsbGVkIHRvCisJICogdGhlIHJvb3Qgbm9kZS4KKwkgKi8KKwlyb290X29iaiA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChhY3BpX2dibF9yb290X25vZGUpOworCWFjcGlfdXRfYWRkX3JlZmVyZW5jZShyb290X29iaik7CisKKwkvKiBJbnN0YWxsIHRoZSBtZXRob2QgKG1vZHVsZS1sZXZlbCBjb2RlKSBpbiB0aGUgcm9vdCBub2RlICovCisKKwlzdGF0dXMgPSBhY3BpX25zX2F0dGFjaF9vYmplY3QoYWNwaV9nYmxfcm9vdF9ub2RlLCBtZXRob2Rfb2JqLAorCQkJCSAgICAgICBBQ1BJX1RZUEVfTUVUSE9EKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZ290byBleGl0OworCX0KKworCS8qIEV4ZWN1dGUgdGhlIHJvb3Qgbm9kZSBhcyBhIGNvbnRyb2wgbWV0aG9kICovCisKKwlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlKGluZm8pOworCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTklULCAiRXhlY3V0ZWQgbW9kdWxlLWxldmVsIGNvZGUgYXQgJXBcbiIsCisJCQkgIG1ldGhvZF9vYmotPm1ldGhvZC5hbWxfc3RhcnQpKTsKKworCS8qIERldGFjaCB0aGUgdGVtcG9yYXJ5IG1ldGhvZCBvYmplY3QgKi8KKworCWFjcGlfbnNfZGV0YWNoX29iamVjdChhY3BpX2dibF9yb290X25vZGUpOworCisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgcm9vdCBvYmplY3QgKi8KKworCXN0YXR1cyA9CisJICAgIGFjcGlfbnNfYXR0YWNoX29iamVjdChhY3BpX2dibF9yb290X25vZGUsIHJvb3Rfb2JqLAorCQkJCSAgQUNQSV9UWVBFX0RFVklDRSk7CisKKyAgICAgIGV4aXQ6CisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJvb3Rfb2JqKTsKKwlyZXR1cm5fVk9JRDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCmluZGV4IDJhZGZjZjMuLjFkNWIzNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwpAQCAtMTcwLDYgKzE3MCwyMSBAQAogCQlnb3RvIGVycm9yX2V4aXQ7CiAJfQogCisJLyoKKwkgKiBFeGVjdXRlIHRoZSAiZ2xvYmFsIiBfSU5JIG1ldGhvZCB0aGF0IG1heSBhcHBlYXIgYXQgdGhlIHJvb3QuIFRoaXMKKwkgKiBzdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBXaW5kb3dzIGNvbXBhdGliaWxpdHkgKFZpc3RhKykgYW5kIGlzIG5vdAorCSAqIHBhcnQgb2YgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbi4KKwkgKi8KKwlpbmZvLmV2YWx1YXRlX2luZm8tPnByZWZpeF9ub2RlID0gYWNwaV9nYmxfcm9vdF9ub2RlOworCWluZm8uZXZhbHVhdGVfaW5mby0+cGF0aG5hbWUgPSBNRVRIT0RfTkFNRV9fSU5JOworCWluZm8uZXZhbHVhdGVfaW5mby0+cGFyYW1ldGVycyA9IE5VTEw7CisJaW5mby5ldmFsdWF0ZV9pbmZvLT5mbGFncyA9IEFDUElfSUdOT1JFX1JFVFVSTl9WQUxVRTsKKworCXN0YXR1cyA9IGFjcGlfbnNfZXZhbHVhdGUoaW5mby5ldmFsdWF0ZV9pbmZvKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJaW5mby5udW1fSU5JKys7CisJfQorCiAJLyogV2FsayBuYW1lc3BhY2UgdG8gZXhlY3V0ZSBhbGwgX0lOSXMgb24gcHJlc2VudCBkZXZpY2VzICovCiAKIAlzdGF0dXMgPSBhY3BpX25zX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9BTlksIEFDUElfUk9PVF9PQkpFQ1QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYwppbmRleCBkY2Q3YTZhLi5hNzIzNGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKQEAgLTI3MCw4ICsyNzAsNyBAQAogCiAJLyogTm93IGRlbGV0ZSB0aGUgc3RhcnRpbmcgb2JqZWN0LCBhbmQgd2UgYXJlIGRvbmUgKi8KIAotCWFjcGlfbnNfZGVsZXRlX25vZGUoY2hpbGRfaGFuZGxlKTsKLQorCWFjcGlfbnNfcmVtb3ZlX25vZGUoY2hpbGRfaGFuZGxlKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKaW5kZXggN2Y4ZTA2Ni4uZjg0MjdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYwpAQCAtNDIsNiArNDIsOCBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogICovCiAKKyNkZWZpbmUgQUNQSV9DUkVBVEVfUFJFREVGSU5FRF9UQUJMRQorCiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSAiYWNjb21tb24uaCIKICNpbmNsdWRlICJhY25hbWVzcC5oIgpAQCAtNzIsMzAgKzc0LDMxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTG9jYWwgcHJvdG90eXBlcyAqLwogc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX2NoZWNrX3BhY2thZ2UoY2hhciAqcGF0aG5hbWUsCi0JCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0ciwKLQkJICAgICAgY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnByZWRlZmluZWQpOworYWNwaV9uc19jaGVja19wYWNrYWdlKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKKwkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKTsKIAogc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMoY2hhciAqcGF0aG5hbWUsCithY3BpX25zX2NoZWNrX3BhY2thZ2VfbGlzdChzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCQkgICBjb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqcGFja2FnZSwKKwkJCSAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywgdTMyIGNvdW50KTsKKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAogCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywKIAkJCSAgICAgICB1OCB0eXBlMSwKIAkJCSAgICAgICB1MzIgY291bnQxLAogCQkJICAgICAgIHU4IHR5cGUyLCB1MzIgY291bnQyLCB1MzIgc3RhcnRfaW5kZXgpOwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoY2hhciAqcGF0aG5hbWUsCithY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKIAkJCSAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyLAogCQkJICB1MzIgZXhwZWN0ZWRfYnR5cGVzLCB1MzIgcGFja2FnZV9pbmRleCk7CiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19jaGVja19yZWZlcmVuY2UoY2hhciAqcGF0aG5hbWUsCithY3BpX25zX2NoZWNrX3JlZmVyZW5jZShzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCiAJCQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fb2JqZWN0KTsKIAotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX3JlcGFpcl9vYmplY3QodTMyIGV4cGVjdGVkX2J0eXBlcywKLQkJICAgICAgdTMyIHBhY2thZ2VfaW5kZXgsCi0JCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0cik7CitzdGF0aWMgdm9pZCBhY3BpX25zX2dldF9leHBlY3RlZF90eXBlcyhjaGFyICpidWZmZXIsIHUzMiBleHBlY3RlZF9idHlwZXMpOwogCiAvKgogICogTmFtZXMgZm9yIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSB0aGUgcHJlZGVmaW5lZCBvYmplY3RzLgpAQCAtMTA5LDEzICsxMTIsMTMgQEAKIAkiL1JlZmVyZW5jZSIsCiB9OwogCi0jZGVmaW5lIEFDUElfTk9UX1BBQ0tBR0UgICAgQUNQSV9VSU5UMzJfTUFYCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY2hlY2tfcHJlZGVmaW5lZF9uYW1lcwogICoKICAqIFBBUkFNRVRFUlM6ICBOb2RlICAgICAgICAgICAgLSBOYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIG1ldGhvZC9vYmplY3QKKyAqICAgICAgICAgICAgICB1c2VyX3BhcmFtX2NvdW50IC0gTnVtYmVyIG9mIHBhcmFtZXRlcnMgYWN0dWFsbHkgcGFzc2VkCisgKiAgICAgICAgICAgICAgcmV0dXJuX3N0YXR1cyAgIC0gU3RhdHVzIGZyb20gdGhlIG9iamVjdCBldmFsdWF0aW9uCiAgKiAgICAgICAgICAgICAgcmV0dXJuX29iamVjdF9wdHIgLSBQb2ludGVyIHRvIHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0aW9uIG9mIGEgbWV0aG9kIG9yIG9iamVjdAogICoKQEAgLTEzNSwxMiArMTM4LDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnByZWRlZmluZWQ7CiAJY2hhciAqcGF0aG5hbWU7CisJc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhOwogCiAJLyogTWF0Y2ggdGhlIG5hbWUgZm9yIHRoaXMgbWV0aG9kL29iamVjdCBhZ2FpbnN0IHRoZSBwcmVkZWZpbmVkIGxpc3QgKi8KIAogCXByZWRlZmluZWQgPSBhY3BpX25zX2NoZWNrX2Zvcl9wcmVkZWZpbmVkX25hbWUobm9kZSk7CiAKLQkvKiBHZXQgdGhlIGZ1bGwgcGF0aG5hbWUgdG8gdGhlIG9iamVjdCwgZm9yIHVzZSBpbiBlcnJvciBtZXNzYWdlcyAqLworCS8qIEdldCB0aGUgZnVsbCBwYXRobmFtZSB0byB0aGUgb2JqZWN0LCBmb3IgdXNlIGluIHdhcm5pbmcgbWVzc2FnZXMgKi8KIAogCXBhdGhuYW1lID0gYWNwaV9uc19nZXRfZXh0ZXJuYWxfcGF0aG5hbWUobm9kZSk7CiAJaWYgKCFwYXRobmFtZSkgewpAQCAtMTU4LDI4ICsxNjIsMTcgQEAKIAkvKiBJZiBub3QgYSBwcmVkZWZpbmVkIG5hbWUsIHdlIGNhbm5vdCB2YWxpZGF0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLwogCiAJaWYgKCFwcmVkZWZpbmVkKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBJZiB0aGUgbWV0aG9kIGZhaWxlZCwgd2UgY2Fubm90IHZhbGlkYXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCi0KLQlpZiAoKHJldHVybl9zdGF0dXMgIT0gQUVfT0spICYmIChyZXR1cm5fc3RhdHVzICE9IEFFX0NUUkxfUkVUVVJOX1ZBTFVFKSkgewotCQlnb3RvIGV4aXQ7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAkvKgotCSAqIE9ubHkgdmFsaWRhdGUgdGhlIHJldHVybiB2YWx1ZSBvbiB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBldmFsdWF0aW9uIG9mCi0JICogdGhlIG1ldGhvZC4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHdhcm5pbmdzIHdpbGwgb25seSBiZSBlbWl0dGVkIGR1cmluZwotCSAqIHRoZSB2ZXJ5IGZpcnN0IGV2YWx1YXRpb24gb2YgdGhlIG1ldGhvZC9vYmplY3QuCisJICogSWYgdGhlIG1ldGhvZCBmYWlsZWQgb3IgZGlkIG5vdCBhY3R1YWxseSByZXR1cm4gYW4gb2JqZWN0LCB3ZSBjYW5ub3QKKwkgKiB2YWxpZGF0ZSB0aGUgcmV0dXJuIG9iamVjdAogCSAqLwotCWlmIChub2RlLT5mbGFncyAmIEFOT0JKX0VWQUxVQVRFRCkgewotCQlnb3RvIGV4aXQ7CisJaWYgKChyZXR1cm5fc3RhdHVzICE9IEFFX09LKSAmJiAocmV0dXJuX3N0YXR1cyAhPSBBRV9DVFJMX1JFVFVSTl9WQUxVRSkpIHsKKwkJZ290byBjbGVhbnVwOwogCX0KIAotCS8qIE1hcmsgdGhlIG5vZGUgYXMgaGF2aW5nIGJlZW4gc3VjY2Vzc2Z1bGx5IGV2YWx1YXRlZCAqLwotCi0Jbm9kZS0+ZmxhZ3MgfD0gQU5PQkpfRVZBTFVBVEVEOwotCiAJLyoKIAkgKiBJZiB0aGVyZSBpcyBubyByZXR1cm4gdmFsdWUsIGNoZWNrIGlmIHdlIHJlcXVpcmUgYSByZXR1cm4gdmFsdWUgZm9yCiAJICogdGhpcyBwcmVkZWZpbmVkIG5hbWUuIEVpdGhlciBvbmUgcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLCBvciBub25lLApAQCAtMTkwLDQ2ICsxODMsNjcgQEAKIAlpZiAoIXJldHVybl9vYmplY3QpIHsKIAkJaWYgKChwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcykgJiYKIAkJICAgICghKHByZWRlZmluZWQtPmluZm8uZXhwZWN0ZWRfYnR5cGVzICYgQUNQSV9SVFlQRV9OT05FKSkpIHsKLQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJICAgICIlczogTWlzc2luZyBleHBlY3RlZCByZXR1cm4gdmFsdWUiLAotCQkJCSAgICBwYXRobmFtZSkpOworCQkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIHBhdGhuYW1lLAorCQkJCQkgICAgICBBQ1BJX1dBUk5fQUxXQVlTLAorCQkJCQkgICAgICAiTWlzc2luZyBleHBlY3RlZCByZXR1cm4gdmFsdWUiKSk7CiAKIAkJCXN0YXR1cyA9IEFFX0FNTF9OT19SRVRVUk5fVkFMVUU7CiAJCX0KLQkJZ290byBleGl0OworCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJLyoKLQkgKiBXZSBoYXZlIGEgcmV0dXJuIHZhbHVlLCBidXQgaWYgb25lIHdhc24ndCBleHBlY3RlZCwganVzdCBleGl0LCB0aGlzIGlzCi0JICogbm90IGEgcHJvYmxlbQorCSAqIDEpIFdlIGhhdmUgYSByZXR1cm4gdmFsdWUsIGJ1dCBpZiBvbmUgd2Fzbid0IGV4cGVjdGVkLCBqdXN0IGV4aXQsIHRoaXMgaXMKKwkgKiBub3QgYSBwcm9ibGVtLiBGb3IgZXhhbXBsZSwgaWYgdGhlICJJbXBsaWNpdCBSZXR1cm4iIGZlYXR1cmUgaXMKKwkgKiBlbmFibGVkLCBtZXRob2RzIHdpbGwgYWx3YXlzIHJldHVybiBhIHZhbHVlLgogCSAqCi0JICogRm9yIGV4YW1wbGUsIGlmIHRoZSAiSW1wbGljaXQgUmV0dXJuIiBmZWF0dXJlIGlzIGVuYWJsZWQsIG1ldGhvZHMgd2lsbAotCSAqIGFsd2F5cyByZXR1cm4gYSB2YWx1ZQorCSAqIDIpIElmIHRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIG9mIGFueSB0eXBlLCB0aGVuIHdlIGNhbm5vdCBwZXJmb3JtIGFueQorCSAqIHZhbGlkYXRpb24sIGV4aXQuCiAJICovCi0JaWYgKCFwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcykgewotCQlnb3RvIGV4aXQ7CisJaWYgKCghcHJlZGVmaW5lZC0+aW5mby5leHBlY3RlZF9idHlwZXMpIHx8CisJICAgIChwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcyA9PSBBQ1BJX1JUWVBFX0FMTCkpIHsKKwkJZ290byBjbGVhbnVwOwogCX0KIAorCS8qIENyZWF0ZSB0aGUgcGFyYW1ldGVyIGRhdGEgYmxvY2sgZm9yIG9iamVjdCB2YWxpZGF0aW9uICovCisKKwlkYXRhID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSkpOworCWlmICghZGF0YSkgeworCQlnb3RvIGNsZWFudXA7CisJfQorCWRhdGEtPnByZWRlZmluZWQgPSBwcmVkZWZpbmVkOworCWRhdGEtPm5vZGVfZmxhZ3MgPSBub2RlLT5mbGFnczsKKwlkYXRhLT5wYXRobmFtZSA9IHBhdGhuYW1lOworCiAJLyoKIAkgKiBDaGVjayB0aGF0IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gb2JqZWN0IGlzIHdoYXQgaXMgZXhwZWN0ZWQgZm9yCiAJICogdGhpcyBwcmVkZWZpbmVkIG5hbWUKIAkgKi8KLQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCByZXR1cm5fb2JqZWN0X3B0ciwKKwlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIHJldHVybl9vYmplY3RfcHRyLAogCQkJCQkgICBwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcywKLQkJCQkJICAgQUNQSV9OT1RfUEFDS0FHRSk7CisJCQkJCSAgIEFDUElfTk9UX1BBQ0tBR0VfRUxFTUVOVCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gZXhpdDsKKwkJZ290byBjaGVja192YWxpZGF0aW9uX3N0YXR1czsKIAl9CiAKIAkvKiBGb3IgcmV0dXJuZWQgUGFja2FnZSBvYmplY3RzLCBjaGVjayB0aGUgdHlwZSBvZiBhbGwgc3ViLW9iamVjdHMgKi8KIAogCWlmIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9uc19jaGVja19wYWNrYWdlKHBhdGhuYW1lLCByZXR1cm5fb2JqZWN0X3B0ciwKLQkJCQkJICBwcmVkZWZpbmVkKTsKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlKGRhdGEsIHJldHVybl9vYmplY3RfcHRyKTsKIAl9CiAKLSAgICAgIGV4aXQ6CitjaGVja192YWxpZGF0aW9uX3N0YXR1czoKKwkvKgorCSAqIElmIHRoZSBvYmplY3QgdmFsaWRhdGlvbiBmYWlsZWQgb3IgaWYgd2Ugc3VjY2Vzc2Z1bGx5IHJlcGFpcmVkIG9uZQorCSAqIG9yIG1vcmUgb2JqZWN0cywgbWFyayB0aGUgcGFyZW50IG5vZGUgdG8gc3VwcHJlc3MgZnVydGhlciB3YXJuaW5nCisJICogbWVzc2FnZXMgZHVyaW5nIHRoZSBuZXh0IGV2YWx1YXRpb24gb2YgdGhlIHNhbWUgbWV0aG9kL29iamVjdC4KKwkgKi8KKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgKGRhdGEtPmZsYWdzICYgQUNQSV9PQkpFQ1RfUkVQQUlSRUQpKSB7CisJCW5vZGUtPmZsYWdzIHw9IEFOT0JKX0VWQUxVQVRFRDsKKwl9CisJQUNQSV9GUkVFKGRhdGEpOworCitjbGVhbnVwOgogCUFDUElfRlJFRShwYXRobmFtZSk7CiAJcmV0dXJuIChzdGF0dXMpOwogfQpAQCAtMjY4LDY0ICsyODIsNTggQEAKIAkJcGFyYW1fY291bnQgPSBub2RlLT5vYmplY3QtPm1ldGhvZC5wYXJhbV9jb3VudDsKIAl9CiAKLQkvKiBBcmd1bWVudCBjb3VudCBjaGVjayBmb3Igbm9uLXByZWRlZmluZWQgbWV0aG9kcy9vYmplY3RzICovCi0KIAlpZiAoIXByZWRlZmluZWQpIHsKIAkJLyoKKwkJICogQ2hlY2sgdGhlIHBhcmFtZXRlciBjb3VudCBmb3Igbm9uLXByZWRlZmluZWQgbWV0aG9kcy9vYmplY3RzLgorCQkgKgogCQkgKiBXYXJuaW5nIGlmIHRvbyBmZXcgb3IgdG9vIG1hbnkgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXNzZWQgYnkgdGhlCiAJCSAqIGNhbGxlci4gQW4gaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgbWF5IG5vdCBjYXVzZSB0aGUgbWV0aG9kCiAJCSAqIHRvIGZhaWwuIEhvd2V2ZXIsIHRoZSBtZXRob2Qgd2lsbCBmYWlsIGlmIHRoZXJlIGFyZSB0b28gZmV3CiAJCSAqIGFyZ3VtZW50cyBhbmQgdGhlIG1ldGhvZCBhdHRlbXB0cyB0byB1c2Ugb25lIG9mIHRoZSBtaXNzaW5nIG9uZXMuCiAJCSAqLwogCQlpZiAodXNlcl9wYXJhbV9jb3VudCA8IHBhcmFtX2NvdW50KSB7Ci0JCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkJICAgICAgIiVzOiBJbnN1ZmZpY2llbnQgYXJndW1lbnRzIC0gbmVlZHMgJWQsIGZvdW5kICVkIiwKLQkJCQkgICAgICBwYXRobmFtZSwgcGFyYW1fY291bnQsIHVzZXJfcGFyYW1fY291bnQpKTsKKwkJCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBwYXRobmFtZSwKKwkJCQkJICAgICAgQUNQSV9XQVJOX0FMV0FZUywKKwkJCQkJICAgICAgIkluc3VmZmljaWVudCBhcmd1bWVudHMgLSBuZWVkcyAldSwgZm91bmQgJXUiLAorCQkJCQkgICAgICBwYXJhbV9jb3VudCwgdXNlcl9wYXJhbV9jb3VudCkpOwogCQl9IGVsc2UgaWYgKHVzZXJfcGFyYW1fY291bnQgPiBwYXJhbV9jb3VudCkgewotCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJCSAgICAgICIlczogRXhjZXNzIGFyZ3VtZW50cyAtIG5lZWRzICVkLCBmb3VuZCAlZCIsCi0JCQkJICAgICAgcGF0aG5hbWUsIHBhcmFtX2NvdW50LCB1c2VyX3BhcmFtX2NvdW50KSk7CisJCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgcGF0aG5hbWUsCisJCQkJCSAgICAgIEFDUElfV0FSTl9BTFdBWVMsCisJCQkJCSAgICAgICJFeGNlc3MgYXJndW1lbnRzIC0gbmVlZHMgJXUsIGZvdW5kICV1IiwKKwkJCQkJICAgICAgcGFyYW1fY291bnQsIHVzZXJfcGFyYW1fY291bnQpKTsKIAkJfQogCQlyZXR1cm47CiAJfQogCi0JLyogQWxsb3cgdHdvIGRpZmZlcmVudCBsZWdhbCBhcmd1bWVudCBjb3VudHMgKF9TQ1AsIGV0Yy4pICovCi0KKwkvKgorCSAqIFZhbGlkYXRlIHRoZSB1c2VyLXN1cHBsaWVkIHBhcmFtZXRlciBjb3VudC4KKwkgKiBBbGxvdyB0d28gZGlmZmVyZW50IGxlZ2FsIGFyZ3VtZW50IGNvdW50cyAoX1NDUCwgZXRjLikKKwkgKi8KIAlyZXF1aXJlZF9wYXJhbXNfY3VycmVudCA9IHByZWRlZmluZWQtPmluZm8ucGFyYW1fY291bnQgJiAweDBGOwogCXJlcXVpcmVkX3BhcmFtc19vbGQgPSBwcmVkZWZpbmVkLT5pbmZvLnBhcmFtX2NvdW50ID4+IDQ7CiAKIAlpZiAodXNlcl9wYXJhbV9jb3VudCAhPSBBQ1BJX1VJTlQzMl9NQVgpIHsKLQotCQkvKiBWYWxpZGF0ZSB0aGUgdXNlci1zdXBwbGllZCBwYXJhbWV0ZXIgY291bnQgKi8KLQogCQlpZiAoKHVzZXJfcGFyYW1fY291bnQgIT0gcmVxdWlyZWRfcGFyYW1zX2N1cnJlbnQpICYmCiAJCSAgICAodXNlcl9wYXJhbV9jb3VudCAhPSByZXF1aXJlZF9wYXJhbXNfb2xkKSkgewotCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJCSAgICAgICIlczogUGFyYW1ldGVyIGNvdW50IG1pc21hdGNoIC0gIgotCQkJCSAgICAgICJjYWxsZXIgcGFzc2VkICVkLCBBQ1BJIHJlcXVpcmVzICVkIiwKLQkJCQkgICAgICBwYXRobmFtZSwgdXNlcl9wYXJhbV9jb3VudCwKLQkJCQkgICAgICByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkpOworCQkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIHBhdGhuYW1lLAorCQkJCQkgICAgICBBQ1BJX1dBUk5fQUxXQVlTLAorCQkJCQkgICAgICAiUGFyYW1ldGVyIGNvdW50IG1pc21hdGNoIC0gIgorCQkJCQkgICAgICAiY2FsbGVyIHBhc3NlZCAldSwgQUNQSSByZXF1aXJlcyAldSIsCisJCQkJCSAgICAgIHVzZXJfcGFyYW1fY291bnQsCisJCQkJCSAgICAgIHJlcXVpcmVkX3BhcmFtc19jdXJyZW50KSk7CiAJCX0KIAl9CiAKIAkvKgotCSAqIE9ubHkgdmFsaWRhdGUgdGhlIGFyZ3VtZW50IGNvdW50IG9uIHRoZSBmaXJzdCBzdWNjZXNzZnVsIGV2YWx1YXRpb24gb2YKLQkgKiB0aGUgbWV0aG9kLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgd2FybmluZ3Mgd2lsbCBvbmx5IGJlIGVtaXR0ZWQgZHVyaW5nCi0JICogdGhlIHZlcnkgZmlyc3QgZXZhbHVhdGlvbiBvZiB0aGUgbWV0aG9kL29iamVjdC4KLQkgKi8KLQlpZiAobm9kZS0+ZmxhZ3MgJiBBTk9CSl9FVkFMVUFURUQpIHsKLQkJcmV0dXJuOwotCX0KLQotCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgQVNMLWRlZmluZWQgcGFyYW1ldGVyIGNvdW50IGlzIHdoYXQgaXMgZXhwZWN0ZWQgZm9yCi0JICogdGhpcyBwcmVkZWZpbmVkIG5hbWUuCisJICogdGhpcyBwcmVkZWZpbmVkIG5hbWUgKHBhcmFtZXRlciBjb3VudCBhcyBkZWZpbmVkIGJ5IHRoZSBBQ1BJCisJICogc3BlY2lmaWNhdGlvbikKIAkgKi8KIAlpZiAoKHBhcmFtX2NvdW50ICE9IHJlcXVpcmVkX3BhcmFtc19jdXJyZW50KSAmJgogCSAgICAocGFyYW1fY291bnQgIT0gcmVxdWlyZWRfcGFyYW1zX29sZCkpIHsKLQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIiVzOiBQYXJhbWV0ZXIgY291bnQgbWlzbWF0Y2ggLSBBU0wgZGVjbGFyZWQgJWQsIEFDUEkgcmVxdWlyZXMgJWQiLAotCQkJICAgICAgcGF0aG5hbWUsIHBhcmFtX2NvdW50LCByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkpOworCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgcGF0aG5hbWUsIG5vZGUtPmZsYWdzLAorCQkJCSAgICAgICJQYXJhbWV0ZXIgY291bnQgbWlzbWF0Y2ggLSBBU0wgZGVjbGFyZWQgJXUsIEFDUEkgcmVxdWlyZXMgJXUiLAorCQkJCSAgICAgIHBhcmFtX2NvdW50LCByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkpOwogCX0KIH0KIApAQCAtMzU4LDkgKzM2Niw2IEBACiAJdGhpc19uYW1lID0gcHJlZGVmaW5lZF9uYW1lczsKIAl3aGlsZSAodGhpc19uYW1lLT5pbmZvLm5hbWVbMF0pIHsKIAkJaWYgKEFDUElfQ09NUEFSRV9OQU1FKG5vZGUtPm5hbWUuYXNjaWksIHRoaXNfbmFtZS0+aW5mby5uYW1lKSkgewotCi0JCQkvKiBSZXR1cm4gcG9pbnRlciB0byB0aGlzIHRhYmxlIGVudHJ5ICovCi0KIAkJCXJldHVybiAodGhpc19uYW1lKTsKIAkJfQogCkBAIC0zNzUsMTcgKzM4MCwxNiBAQAogCQl0aGlzX25hbWUrKzsKIAl9CiAKLQlyZXR1cm4gKE5VTEwpOworCXJldHVybiAoTlVMTCk7CQkvKiBOb3QgZm91bmQgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19jaGVja19wYWNrYWdlCiAgKgotICogUEFSQU1FVEVSUzogIFBhdGhuYW1lICAgICAgICAtIEZ1bGwgcGF0aG5hbWUgdG8gdGhlIG5vZGUgKGZvciBlcnJvciBtc2dzKQorICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdmFsaWRhdGlvbiBkYXRhIHN0cnVjdHVyZQogICogICAgICAgICAgICAgIHJldHVybl9vYmplY3RfcHRyIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvbiBvZiBhIG1ldGhvZCBvciBvYmplY3QKLSAqICAgICAgICAgICAgICBQcmVkZWZpbmVkICAgICAgLSBQb2ludGVyIHRvIGVudHJ5IGluIHByZWRlZmluZWQgbmFtZSB0YWJsZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC0zOTUsMzAgKzM5OSwyNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX2NoZWNrX3BhY2thZ2UoY2hhciAqcGF0aG5hbWUsCi0JCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0ciwKLQkJICAgICAgY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnByZWRlZmluZWQpCithY3BpX25zX2NoZWNrX3BhY2thZ2Uoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIpCiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX29iamVjdCA9ICpyZXR1cm5fb2JqZWN0X3B0cjsKIAljb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqcGFja2FnZTsKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzdWJfcGFja2FnZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZWxlbWVudHM7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnN1Yl9lbGVtZW50czsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTMyIGV4cGVjdGVkX2NvdW50OwogCXUzMiBjb3VudDsKIAl1MzIgaTsKLQl1MzIgajsKIAogCUFDUElfRlVOQ1RJT05fTkFNRShuc19jaGVja19wYWNrYWdlKTsKIAogCS8qIFRoZSBwYWNrYWdlIGluZm8gZm9yIHRoaXMgbmFtZSBpcyBpbiB0aGUgbmV4dCB0YWJsZSBlbnRyeSAqLwogCi0JcGFja2FnZSA9IHByZWRlZmluZWQgKyAxOworCXBhY2thZ2UgPSBkYXRhLT5wcmVkZWZpbmVkICsgMTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTkFNRVMsCiAJCQkgICIlcyBWYWxpZGF0aW5nIHJldHVybiBQYWNrYWdlIG9mIFR5cGUgJVgsIENvdW50ICVYXG4iLAotCQkJICBwYXRobmFtZSwgcGFja2FnZS0+cmV0X2luZm8udHlwZSwKKwkJCSAgZGF0YS0+cGF0aG5hbWUsIHBhY2thZ2UtPnJldF9pbmZvLnR5cGUsCiAJCQkgIHJldHVybl9vYmplY3QtPnBhY2thZ2UuY291bnQpKTsKIAogCS8qIEV4dHJhY3QgcGFja2FnZSBjb3VudCBhbmQgZWxlbWVudHMgYXJyYXkgKi8KQEAgLTQyOSw5ICs0MjksOCBAQAogCS8qIFRoZSBwYWNrYWdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCwgZWxzZSBpbnZhbGlkICovCiAKIAlpZiAoIWNvdW50KSB7Ci0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIlczogUmV0dXJuIFBhY2thZ2UgaGFzIG5vIGVsZW1lbnRzIChlbXB0eSkiLAotCQkJICAgICAgcGF0aG5hbWUpKTsKKwkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCSAgICAgICJSZXR1cm4gUGFja2FnZSBoYXMgbm8gZWxlbWVudHMgKGVtcHR5KSIpKTsKIAogCQlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1ZBTFVFKTsKIAl9CkBAIC00NTYsMTUgKzQ1NSwxNiBAQAogCQlpZiAoY291bnQgPCBleHBlY3RlZF9jb3VudCkgewogCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKIAkJfSBlbHNlIGlmIChjb3VudCA+IGV4cGVjdGVkX2NvdW50KSB7Ci0JCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkJICAgICAgIiVzOiBSZXR1cm4gUGFja2FnZSBpcyBsYXJnZXIgdGhhbiBuZWVkZWQgLSAiCi0JCQkJICAgICAgImZvdW5kICV1LCBleHBlY3RlZCAldSIsIHBhdGhuYW1lLCBjb3VudCwKLQkJCQkgICAgICBleHBlY3RlZF9jb3VudCkpOworCQkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLAorCQkJCQkgICAgICBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCQkgICAgICAiUmV0dXJuIFBhY2thZ2UgaXMgbGFyZ2VyIHRoYW4gbmVlZGVkIC0gIgorCQkJCQkgICAgICAiZm91bmQgJXUsIGV4cGVjdGVkICV1IiwgY291bnQsCisJCQkJCSAgICAgIGV4cGVjdGVkX2NvdW50KSk7CiAJCX0KIAogCQkvKiBWYWxpZGF0ZSBhbGwgZWxlbWVudHMgb2YgdGhlIHJldHVybmVkIHBhY2thZ2UgKi8KIAotCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMocGF0aG5hbWUsIGVsZW1lbnRzLAorCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMoZGF0YSwgZWxlbWVudHMsCiAJCQkJCQkJcGFja2FnZS0+cmV0X2luZm8uCiAJCQkJCQkJb2JqZWN0X3R5cGUxLAogCQkJCQkJCXBhY2thZ2UtPnJldF9pbmZvLgpAQCAtNDczLDkgKzQ3Myw2IEBACiAJCQkJCQkJb2JqZWN0X3R5cGUyLAogCQkJCQkJCXBhY2thZ2UtPnJldF9pbmZvLgogCQkJCQkJCWNvdW50MiwgMCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcmV0dXJuIChzdGF0dXMpOwotCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1BUWVBFMV9WQVI6CkBAIC00ODUsNyArNDgyLDcgQEAKIAkJICogZWxlbWVudHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwgZWxlbWVudHMsCisJCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIGVsZW1lbnRzLAogCQkJCQkJCSAgIHBhY2thZ2UtPnJldF9pbmZvLgogCQkJCQkJCSAgIG9iamVjdF90eXBlMSwgaSk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTUxNyw4ICs1MTQsNyBAQAogCQkJCS8qIFRoZXNlIGFyZSB0aGUgcmVxdWlyZWQgcGFja2FnZSBlbGVtZW50cyAoMCwgMSwgb3IgMikgKi8KIAogCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUocGF0aG5hbWUsCi0JCQkJCQkJICAgICAgZWxlbWVudHMsCisJCQkJICAgIGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoZGF0YSwgZWxlbWVudHMsCiAJCQkJCQkJICAgICAgcGFja2FnZS0+CiAJCQkJCQkJICAgICAgcmV0X2luZm8zLgogCQkJCQkJCSAgICAgIG9iamVjdF90eXBlW2ldLApAQCAtNTMwLDggKzUyNiw3IEBACiAJCQkJLyogVGhlc2UgYXJlIHRoZSBvcHRpb25hbCBwYWNrYWdlIGVsZW1lbnRzICovCiAKIAkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLAotCQkJCQkJCSAgICAgIGVsZW1lbnRzLAorCQkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIGVsZW1lbnRzLAogCQkJCQkJCSAgICAgIHBhY2thZ2UtPgogCQkJCQkJCSAgICAgIHJldF9pbmZvMy4KIAkJCQkJCQkgICAgICB0YWlsX29iamVjdF90eXBlLApAQCAtNTQ0LDExICs1MzksMzAgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgQUNQSV9QVFlQRTJfUkVWX0ZJWEVEOgorCisJCS8qIEZpcnN0IGVsZW1lbnQgaXMgdGhlIChJbnRlZ2VyKSByZXZpc2lvbiAqLworCisJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoZGF0YSwgZWxlbWVudHMsCisJCQkJCQkgICBBQ1BJX1JUWVBFX0lOVEVHRVIsIDApOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCisJCWVsZW1lbnRzKys7CisJCWNvdW50LS07CisKKwkJLyogRXhhbWluZSB0aGUgc3ViLXBhY2thZ2VzICovCisKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZV9saXN0KGRhdGEsIHBhY2thZ2UsIGVsZW1lbnRzLCBjb3VudCk7CisJCWJyZWFrOworCiAJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6CiAKIAkJLyogRmlyc3QgZWxlbWVudCBpcyB0aGUgKEludGVnZXIpIGNvdW50IG9mIHN1Yi1wYWNrYWdlcyB0byBmb2xsb3cgKi8KIAotCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCBlbGVtZW50cywKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCBlbGVtZW50cywKIAkJCQkJCSAgIEFDUElfUlRZUEVfSU5URUdFUiwgMCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuIChzdGF0dXMpOwpAQCAtNTY2LDkgKzU4MCwxMSBAQAogCQljb3VudCA9IGV4cGVjdGVkX2NvdW50OwogCQllbGVtZW50cysrOwogCi0JCS8qIE5vdyB3ZSBjYW4gd2FsayB0aGUgc3ViLXBhY2thZ2VzICovCisJCS8qIEV4YW1pbmUgdGhlIHN1Yi1wYWNrYWdlcyAqLwogCi0JCS8qbGludCAtZmFsbHRocm91Z2ggKi8KKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZV9saXN0KGRhdGEsIHBhY2thZ2UsIGVsZW1lbnRzLCBjb3VudCk7CisJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1BUWVBFMjoKIAljYXNlIEFDUElfUFRZUEUyX0ZJWEVEOgpAQCAtNTc2LDE3NiArNTkyLDI0MCBAQAogCWNhc2UgQUNQSV9QVFlQRTJfQ09VTlQ6CiAKIAkJLyoKLQkJICogVGhlc2UgdHlwZXMgYWxsIHJldHVybiBhIHNpbmdsZSBwYWNrYWdlIHRoYXQgY29uc2lzdHMgb2YgYSB2YXJpYWJsZQotCQkgKiBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzCisJCSAqIFRoZXNlIHR5cGVzIGFsbCByZXR1cm4gYSBzaW5nbGUgUGFja2FnZSB0aGF0IGNvbnNpc3RzIG9mIGEKKwkJICogdmFyaWFibGUgbnVtYmVyIG9mIHN1Yi1QYWNrYWdlcy4KKwkJICoKKwkJICogRmlyc3QsIGVuc3VyZSB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgc3ViLVBhY2thZ2UuIElmIG5vdCwKKwkJICogdGhlIEJJT1MgbWF5IGhhdmUgaW5jb3JyZWN0bHkgcmV0dXJuZWQgdGhlIG9iamVjdCBhcyBhIHNpbmdsZQorCQkgKiBwYWNrYWdlIGluc3RlYWQgb2YgYSBQYWNrYWdlIG9mIFBhY2thZ2VzIChhIGNvbW1vbiBlcnJvciBpZgorCQkgKiB0aGVyZSBpcyBvbmx5IG9uZSBlbnRyeSkuIFdlIG1heSBiZSBhYmxlIHRvIHJlcGFpciB0aGlzIGJ5CisJCSAqIHdyYXBwaW5nIHRoZSByZXR1cm5lZCBQYWNrYWdlIHdpdGggYSBuZXcgb3V0ZXIgUGFja2FnZS4KIAkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCQlzdWJfcGFja2FnZSA9ICplbGVtZW50czsKLQkJCXN1Yl9lbGVtZW50cyA9IHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzOworCQlpZiAoKCplbGVtZW50cyktPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAKLQkJCS8qIEVhY2ggc3ViLW9iamVjdCBtdXN0IGJlIG9mIHR5cGUgUGFja2FnZSAqLworCQkJLyogQ3JlYXRlIHRoZSBuZXcgb3V0ZXIgcGFja2FnZSBhbmQgcG9wdWxhdGUgaXQgKi8KIAogCQkJc3RhdHVzID0KLQkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCAmc3ViX3BhY2thZ2UsCi0JCQkJCQkgICAgICBBQ1BJX1JUWVBFX1BBQ0tBR0UsIGkpOworCQkJICAgIGFjcGlfbnNfcmVwYWlyX3BhY2thZ2VfbGlzdChkYXRhLAorCQkJCQkJCXJldHVybl9vYmplY3RfcHRyKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCXJldHVybiAoc3RhdHVzKTsKIAkJCX0KIAotCQkJLyogRXhhbWluZSB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHN1Yi1wYWNrYWdlcyAqLworCQkJLyogVXBkYXRlIGxvY2FscyB0byBwb2ludCB0byB0aGUgbmV3IHBhY2thZ2UgKG9mIDEgZWxlbWVudCkgKi8KIAotCQkJc3dpdGNoIChwYWNrYWdlLT5yZXRfaW5mby50eXBlKSB7Ci0JCQljYXNlIEFDUElfUFRZUEUyOgotCQkJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6Ci0KLQkJCQkvKiBFYWNoIHN1YnBhY2thZ2UgaGFzIGEgZml4ZWQgbnVtYmVyIG9mIGVsZW1lbnRzICovCi0KLQkJCQlleHBlY3RlZF9jb3VudCA9Ci0JCQkJICAgIHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MSArCi0JCQkJICAgIHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MjsKLQkJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgIT0KLQkJCQkgICAgZXhwZWN0ZWRfY291bnQpIHsKLQkJCQkJY291bnQgPSBzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudDsKLQkJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKLQkJCQl9Ci0KLQkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMocGF0aG5hbWUsCi0JCQkJCQkJCSAgIHN1Yl9lbGVtZW50cywKLQkJCQkJCQkJICAgcGFja2FnZS0+Ci0JCQkJCQkJCSAgIHJldF9pbmZvLgotCQkJCQkJCQkgICBvYmplY3RfdHlwZTEsCi0JCQkJCQkJCSAgIHBhY2thZ2UtPgotCQkJCQkJCQkgICByZXRfaW5mby4KLQkJCQkJCQkJICAgY291bnQxLAotCQkJCQkJCQkgICBwYWNrYWdlLT4KLQkJCQkJCQkJICAgcmV0X2luZm8uCi0JCQkJCQkJCSAgIG9iamVjdF90eXBlMiwKLQkJCQkJCQkJICAgcGFja2FnZS0+Ci0JCQkJCQkJCSAgIHJldF9pbmZvLgotCQkJCQkJCQkgICBjb3VudDIsIDApOwotCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCQlyZXR1cm4gKHN0YXR1cyk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIEFDUElfUFRZUEUyX0ZJWEVEOgotCi0JCQkJLyogRWFjaCBzdWItcGFja2FnZSBoYXMgYSBmaXhlZCBsZW5ndGggKi8KLQotCQkJCWV4cGVjdGVkX2NvdW50ID0gcGFja2FnZS0+cmV0X2luZm8yLmNvdW50OwotCQkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7Ci0JCQkJCWNvdW50ID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQ7Ci0JCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7Ci0JCQkJfQotCi0JCQkJLyogQ2hlY2sgdGhlIHR5cGUgb2YgZWFjaCBzdWItcGFja2FnZSBlbGVtZW50ICovCi0KLQkJCQlmb3IgKGogPSAwOyBqIDwgZXhwZWN0ZWRfY291bnQ7IGorKykgewotCQkJCQlzdGF0dXMgPQotCQkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwKLQkJCQkJCSZzdWJfZWxlbWVudHNbal0sCi0JCQkJCQlwYWNrYWdlLT5yZXRfaW5mbzIub2JqZWN0X3R5cGVbal0sIGopOwotCQkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQkJCXJldHVybiAoc3RhdHVzKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBBQ1BJX1BUWVBFMl9NSU46Ci0KLQkJCQkvKiBFYWNoIHN1Yi1wYWNrYWdlIGhhcyBhIHZhcmlhYmxlIGJ1dCBtaW5pbXVtIGxlbmd0aCAqLwotCi0JCQkJZXhwZWN0ZWRfY291bnQgPSBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDE7Ci0JCQkJaWYgKHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50IDwgZXhwZWN0ZWRfY291bnQpIHsKLQkJCQkJY291bnQgPSBzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudDsKLQkJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKLQkJCQl9Ci0KLQkJCQkvKiBDaGVjayB0aGUgdHlwZSBvZiBlYWNoIHN1Yi1wYWNrYWdlIGVsZW1lbnQgKi8KLQotCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZV9lbGVtZW50cyhwYXRobmFtZSwKLQkJCQkJCQkJICAgc3ViX2VsZW1lbnRzLAotCQkJCQkJCQkgICBwYWNrYWdlLT4KLQkJCQkJCQkJICAgcmV0X2luZm8uCi0JCQkJCQkJCSAgIG9iamVjdF90eXBlMSwKLQkJCQkJCQkJICAgc3ViX3BhY2thZ2UtPgotCQkJCQkJCQkgICBwYWNrYWdlLgotCQkJCQkJCQkgICBjb3VudCwgMCwgMCwKLQkJCQkJCQkJICAgMCk7Ci0JCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJCXJldHVybiAoc3RhdHVzKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQUNQSV9QVFlQRTJfQ09VTlQ6Ci0KLQkJCQkvKiBGaXJzdCBlbGVtZW50IGlzIHRoZSAoSW50ZWdlcikgY291bnQgb2YgZWxlbWVudHMgdG8gZm9sbG93ICovCi0KLQkJCQlzdGF0dXMgPQotCQkJCSAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLAotCQkJCQkJCSAgICAgIHN1Yl9lbGVtZW50cywKLQkJCQkJCQkgICAgICBBQ1BJX1JUWVBFX0lOVEVHRVIsCi0JCQkJCQkJICAgICAgMCk7Ci0JCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJCXJldHVybiAoc3RhdHVzKTsKLQkJCQl9Ci0KLQkJCQkvKiBNYWtlIHN1cmUgcGFja2FnZSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBDb3VudCAqLwotCi0JCQkJZXhwZWN0ZWRfY291bnQgPQotCQkJCSAgICAodTMyKSAoKnN1Yl9lbGVtZW50cyktPmludGVnZXIudmFsdWU7Ci0JCQkJaWYgKHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50IDwgZXhwZWN0ZWRfY291bnQpIHsKLQkJCQkJY291bnQgPSBzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudDsKLQkJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKLQkJCQl9Ci0KLQkJCQkvKiBDaGVjayB0aGUgdHlwZSBvZiBlYWNoIHN1Yi1wYWNrYWdlIGVsZW1lbnQgKi8KLQotCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZV9lbGVtZW50cyhwYXRobmFtZSwKLQkJCQkJCQkJICAgKHN1Yl9lbGVtZW50cwotCQkJCQkJCQkgICAgKyAxKSwKLQkJCQkJCQkJICAgcGFja2FnZS0+Ci0JCQkJCQkJCSAgIHJldF9pbmZvLgotCQkJCQkJCQkgICBvYmplY3RfdHlwZTEsCi0JCQkJCQkJCSAgIChleHBlY3RlZF9jb3VudAotCQkJCQkJCQkgICAgLSAxKSwgMCwgMCwKLQkJCQkJCQkJICAgMSk7Ci0JCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJCXJldHVybiAoc3RhdHVzKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWVsZW1lbnRzKys7CisJCQlyZXR1cm5fb2JqZWN0ID0gKnJldHVybl9vYmplY3RfcHRyOworCQkJZWxlbWVudHMgPSByZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzOworCQkJY291bnQgPSAxOwogCQl9CisKKwkJLyogRXhhbWluZSB0aGUgc3ViLXBhY2thZ2VzICovCisKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZV9saXN0KGRhdGEsIHBhY2thZ2UsIGVsZW1lbnRzLCBjb3VudCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAogCQkvKiBTaG91bGQgbm90IGdldCBoZXJlIGlmIHByZWRlZmluZWQgaW5mbyB0YWJsZSBpcyBjb3JyZWN0ICovCiAKLQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIiVzOiBJbnZhbGlkIGludGVybmFsIHJldHVybiB0eXBlIGluIHRhYmxlIGVudHJ5OiAlWCIsCi0JCQkgICAgICBwYXRobmFtZSwgcGFja2FnZS0+cmV0X2luZm8udHlwZSkpOworCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkJICAgICAgIkludmFsaWQgaW50ZXJuYWwgcmV0dXJuIHR5cGUgaW4gdGFibGUgZW50cnk6ICVYIiwKKwkJCQkgICAgICBwYWNrYWdlLT5yZXRfaW5mby50eXBlKSk7CiAKIAkJcmV0dXJuIChBRV9BTUxfSU5URVJOQUwpOwogCX0KIAotCXJldHVybiAoQUVfT0spOworCXJldHVybiAoc3RhdHVzKTsKIAotICAgICAgcGFja2FnZV90b29fc21hbGw6CitwYWNrYWdlX3Rvb19zbWFsbDoKIAogCS8qIEVycm9yIGV4aXQgZm9yIHRoZSBjYXNlIHdpdGggYW4gaW5jb3JyZWN0IHBhY2thZ2UgY291bnQgKi8KIAotCUFDUElfV0FSTklORygoQUVfSU5GTywgIiVzOiBSZXR1cm4gUGFja2FnZSBpcyB0b28gc21hbGwgLSAiCi0JCSAgICAgICJmb3VuZCAldSwgZXhwZWN0ZWQgJXUiLCBwYXRobmFtZSwgY291bnQsCi0JCSAgICAgIGV4cGVjdGVkX2NvdW50KSk7CisJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJICAgICAgIlJldHVybiBQYWNrYWdlIGlzIHRvbyBzbWFsbCAtIGZvdW5kICV1IGVsZW1lbnRzLCBleHBlY3RlZCAldSIsCisJCQkgICAgICBjb3VudCwgZXhwZWN0ZWRfY291bnQpKTsKKworCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVkFMVUUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfbGlzdAorICoKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICBQYWNrYWdlICAgICAgICAgLSBQb2ludGVyIHRvIHBhY2thZ2Utc3BlY2lmaWMgaW5mbyBmb3IgbWV0aG9kCisgKiAgICAgICAgICAgICAgRWxlbWVudHMgICAgICAgIC0gRWxlbWVudCBsaXN0IG9mIHBhcmVudCBwYWNrYWdlLiBBbGwgZWxlbWVudHMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGlzIGxpc3Qgc2hvdWxkIGJlIG9mIHR5cGUgUGFja2FnZS4KKyAqICAgICAgICAgICAgICBDb3VudCAgICAgICAgICAgLSBDb3VudCBvZiBzdWJwYWNrYWdlcworICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogRXhhbWluZSBhIGxpc3Qgb2Ygc3VicGFja2FnZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY2hlY2tfcGFja2FnZV9saXN0KHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKKwkJCSAgIGNvbnN0IHVuaW9uIGFjcGlfcHJlZGVmaW5lZF9pbmZvICpwYWNrYWdlLAorCQkJICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmVsZW1lbnRzLCB1MzIgY291bnQpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqc3ViX3BhY2thZ2U7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnN1Yl9lbGVtZW50czsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTMyIGV4cGVjdGVkX2NvdW50OworCXUzMiBpOworCXUzMiBqOworCisJLyogVmFsaWRhdGUgZWFjaCBzdWItUGFja2FnZSBpbiB0aGUgcGFyZW50IFBhY2thZ2UgKi8KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN1Yl9wYWNrYWdlID0gKmVsZW1lbnRzOworCQlzdWJfZWxlbWVudHMgPSBzdWJfcGFja2FnZS0+cGFja2FnZS5lbGVtZW50czsKKworCQkvKiBFYWNoIHN1Yi1vYmplY3QgbXVzdCBiZSBvZiB0eXBlIFBhY2thZ2UgKi8KKworCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsICZzdWJfcGFja2FnZSwKKwkJCQkJCSAgIEFDUElfUlRZUEVfUEFDS0FHRSwgaSk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CisKKwkJLyogRXhhbWluZSB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGV4cGVjdGVkIHN1Yi1wYWNrYWdlcyAqLworCisJCXN3aXRjaCAocGFja2FnZS0+cmV0X2luZm8udHlwZSkgeworCQljYXNlIEFDUElfUFRZUEUyOgorCQljYXNlIEFDUElfUFRZUEUyX1BLR19DT1VOVDoKKwkJY2FzZSBBQ1BJX1BUWVBFMl9SRVZfRklYRUQ6CisKKwkJCS8qIEVhY2ggc3VicGFja2FnZSBoYXMgYSBmaXhlZCBudW1iZXIgb2YgZWxlbWVudHMgKi8KKworCQkJZXhwZWN0ZWRfY291bnQgPQorCQkJICAgIHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MSArIHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MjsKKwkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7CisJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKKwkJCX0KKworCQkJc3RhdHVzID0KKwkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMoZGF0YSwgc3ViX2VsZW1lbnRzLAorCQkJCQkJCSAgIHBhY2thZ2UtPnJldF9pbmZvLgorCQkJCQkJCSAgIG9iamVjdF90eXBlMSwKKwkJCQkJCQkgICBwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQkgICBjb3VudDEsCisJCQkJCQkJICAgcGFja2FnZS0+cmV0X2luZm8uCisJCQkJCQkJICAgb2JqZWN0X3R5cGUyLAorCQkJCQkJCSAgIHBhY2thZ2UtPnJldF9pbmZvLgorCQkJCQkJCSAgIGNvdW50MiwgMCk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEFDUElfUFRZUEUyX0ZJWEVEOgorCisJCQkvKiBFYWNoIHN1Yi1wYWNrYWdlIGhhcyBhIGZpeGVkIGxlbmd0aCAqLworCisJCQlleHBlY3RlZF9jb3VudCA9IHBhY2thZ2UtPnJldF9pbmZvMi5jb3VudDsKKwkJCWlmIChzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCA8IGV4cGVjdGVkX2NvdW50KSB7CisJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKKwkJCX0KKworCQkJLyogQ2hlY2sgdGhlIHR5cGUgb2YgZWFjaCBzdWItcGFja2FnZSBlbGVtZW50ICovCisKKwkJCWZvciAoaiA9IDA7IGogPCBleHBlY3RlZF9jb3VudDsgaisrKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLAorCQkJCQkJCSAgICAgICZzdWJfZWxlbWVudHNbal0sCisJCQkJCQkJICAgICAgcGFja2FnZS0+CisJCQkJCQkJICAgICAgcmV0X2luZm8yLgorCQkJCQkJCSAgICAgIG9iamVjdF90eXBlW2pdLAorCQkJCQkJCSAgICAgIGopOworCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBBQ1BJX1BUWVBFMl9NSU46CisKKwkJCS8qIEVhY2ggc3ViLXBhY2thZ2UgaGFzIGEgdmFyaWFibGUgYnV0IG1pbmltdW0gbGVuZ3RoICovCisKKwkJCWV4cGVjdGVkX2NvdW50ID0gcGFja2FnZS0+cmV0X2luZm8uY291bnQxOworCQkJaWYgKHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50IDwgZXhwZWN0ZWRfY291bnQpIHsKKwkJCQlnb3RvIHBhY2thZ2VfdG9vX3NtYWxsOworCQkJfQorCisJCQkvKiBDaGVjayB0aGUgdHlwZSBvZiBlYWNoIHN1Yi1wYWNrYWdlIGVsZW1lbnQgKi8KKworCQkJc3RhdHVzID0KKwkJCSAgICBhY3BpX25zX2NoZWNrX3BhY2thZ2VfZWxlbWVudHMoZGF0YSwgc3ViX2VsZW1lbnRzLAorCQkJCQkJCSAgIHBhY2thZ2UtPnJldF9pbmZvLgorCQkJCQkJCSAgIG9iamVjdF90eXBlMSwKKwkJCQkJCQkgICBzdWJfcGFja2FnZS0+cGFja2FnZS4KKwkJCQkJCQkgICBjb3VudCwgMCwgMCwgMCk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEFDUElfUFRZUEUyX0NPVU5UOgorCisJCQkvKgorCQkJICogRmlyc3QgZWxlbWVudCBpcyB0aGUgKEludGVnZXIpIGNvdW50IG9mIGVsZW1lbnRzLCBpbmNsdWRpbmcKKwkJCSAqIHRoZSBjb3VudCBmaWVsZC4KKwkJCSAqLworCQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCBzdWJfZWxlbWVudHMsCisJCQkJCQkJICAgQUNQSV9SVFlQRV9JTlRFR0VSLAorCQkJCQkJCSAgIDApOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCisJCQkvKgorCQkJICogTWFrZSBzdXJlIHBhY2thZ2UgaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgQ291bnQgYW5kIGlzCisJCQkgKiBpcyBhcyBsYXJnZSBhcyB0aGUgbWluaW11bSBzaXplCisJCQkgKi8KKwkJCWV4cGVjdGVkX2NvdW50ID0gKHUzMikoKnN1Yl9lbGVtZW50cyktPmludGVnZXIudmFsdWU7CisJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgPCBleHBlY3RlZF9jb3VudCkgeworCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7CisJCQl9CisJCQlpZiAoc3ViX3BhY2thZ2UtPnBhY2thZ2UuY291bnQgPAorCQkJICAgIHBhY2thZ2UtPnJldF9pbmZvLmNvdW50MSkgeworCQkJCWV4cGVjdGVkX2NvdW50ID0gcGFja2FnZS0+cmV0X2luZm8uY291bnQxOworCQkJCWdvdG8gcGFja2FnZV90b29fc21hbGw7CisJCQl9CisKKwkJCS8qIENoZWNrIHRoZSB0eXBlIG9mIGVhY2ggc3ViLXBhY2thZ2UgZWxlbWVudCAqLworCisJCQlzdGF0dXMgPQorCQkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZV9lbGVtZW50cyhkYXRhLAorCQkJCQkJCSAgIChzdWJfZWxlbWVudHMgKyAxKSwKKwkJCQkJCQkgICBwYWNrYWdlLT5yZXRfaW5mby4KKwkJCQkJCQkgICBvYmplY3RfdHlwZTEsCisJCQkJCQkJICAgKGV4cGVjdGVkX2NvdW50IC0gMSksCisJCQkJCQkJICAgMCwgMCwgMSk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgkvKiBTaG91bGQgbm90IGdldCBoZXJlLCB0eXBlIHdhcyB2YWxpZGF0ZWQgYnkgY2FsbGVyICovCisKKwkJCXJldHVybiAoQUVfQU1MX0lOVEVSTkFMKTsKKwkJfQorCisJCWVsZW1lbnRzKys7CisJfQorCisJcmV0dXJuIChBRV9PSyk7CisKK3BhY2thZ2VfdG9vX3NtYWxsOgorCisJLyogVGhlIHN1Yi1wYWNrYWdlIGNvdW50IHdhcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQgKi8KKworCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwgZGF0YS0+bm9kZV9mbGFncywKKwkJCSAgICAgICJSZXR1cm4gU3ViLVBhY2thZ2VbJXVdIGlzIHRvbyBzbWFsbCAtIGZvdW5kICV1IGVsZW1lbnRzLCBleHBlY3RlZCAldSIsCisJCQkgICAgICBpLCBzdWJfcGFja2FnZS0+cGFja2FnZS5jb3VudCwgZXhwZWN0ZWRfY291bnQpKTsKIAogCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVkFMVUUpOwogfQpAQCAtNzU0LDcgKzgzNCw3IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZV9lbGVtZW50cwogICoKLSAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBGdWxsIHBhdGhuYW1lIHRvIHRoZSBub2RlIChmb3IgZXJyb3IgbXNncykKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKICAqICAgICAgICAgICAgICBFbGVtZW50cyAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBwYWNrYWdlIGVsZW1lbnRzIGFycmF5CiAgKiAgICAgICAgICAgICAgVHlwZTEgICAgICAgICAgIC0gT2JqZWN0IHR5cGUgZm9yIGZpcnN0IGdyb3VwCiAgKiAgICAgICAgICAgICAgQ291bnQxICAgICAgICAgIC0gQ291bnQgZm9yIGZpcnN0IGdyb3VwCkBAIC03NzAsNyArODUwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGNoYXIgKnBhdGhuYW1lLAorYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKIAkJCSAgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZWxlbWVudHMsCiAJCQkgICAgICAgdTggdHlwZTEsCiAJCQkgICAgICAgdTMyIGNvdW50MSwKQEAgLTc4Niw3ICs4NjYsNyBAQAogCSAqIFRoZSBzZWNvbmQgZ3JvdXAgY2FuIGhhdmUgYSBjb3VudCBvZiB6ZXJvLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDE7IGkrKykgewotCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCB0aGlzX2VsZW1lbnQsCisJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoZGF0YSwgdGhpc19lbGVtZW50LAogCQkJCQkJICAgdHlwZTEsIGkgKyBzdGFydF9pbmRleCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuIChzdGF0dXMpOwpAQCAtNzk1LDcgKzg3NSw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50MjsgaSsrKSB7Ci0JCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUocGF0aG5hbWUsIHRoaXNfZWxlbWVudCwKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCB0aGlzX2VsZW1lbnQsCiAJCQkJCQkgICB0eXBlMiwKIAkJCQkJCSAgIChpICsgY291bnQxICsgc3RhcnRfaW5kZXgpKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC04MTEsMTIgKzg5MSwxMyBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlCiAgKgotICogUEFSQU1FVEVSUzogIFBhdGhuYW1lICAgICAgICAtIEZ1bGwgcGF0aG5hbWUgdG8gdGhlIG5vZGUgKGZvciBlcnJvciBtc2dzKQorICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdmFsaWRhdGlvbiBkYXRhIHN0cnVjdHVyZQogICogICAgICAgICAgICAgIHJldHVybl9vYmplY3RfcHRyIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvbiBvZiBhIG1ldGhvZCBvciBvYmplY3QKICAqICAgICAgICAgICAgICBleHBlY3RlZF9idHlwZXMgLSBCaXRtYXAgb2YgZXhwZWN0ZWQgcmV0dXJuIHR5cGUocykKICAqICAgICAgICAgICAgICBwYWNrYWdlX2luZGV4ICAgLSBJbmRleCBvZiBvYmplY3Qgd2l0aGluIHBhcmVudCBwYWNrYWdlIChpZgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgLSBBQ1BJX05PVF9QQUNLQUdFIG90aGVyd2lzZSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIC0gQUNQSV9OT1RfUEFDS0FHRV9FTEVNRU5UCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlKQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC04MjYsNyArOTA3LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShjaGFyICpwYXRobmFtZSwKK2FjcGlfbnNfY2hlY2tfb2JqZWN0X3R5cGUoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAogCQkJICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIsCiAJCQkgIHUzMiBleHBlY3RlZF9idHlwZXMsIHUzMiBwYWNrYWdlX2luZGV4KQogewpAQCAtODM0LDkgKzkxNSw2IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTMyIHJldHVybl9idHlwZTsKIAljaGFyIHR5cGVfYnVmZmVyWzQ4XTsJLyogUm9vbSBmb3IgNSB0eXBlcyAqLwotCXUzMiB0aGlzX3J0eXBlOwotCXUzMiBpOwotCXUzMiBqOwogCiAJLyoKIAkgKiBJZiB3ZSBnZXQgYSBOVUxMIHJldHVybl9vYmplY3QgaGVyZSwgaXQgaXMgYSBOVUxMIHBhY2thZ2UgZWxlbWVudCwKQEAgLTg0OSwxMCArOTI3LDExIEBACiAJLyogQSBOYW1lc3BhY2Ugbm9kZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgbWFrZSBzdXJlICovCiAKIAlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKHJldHVybl9vYmplY3QpID09IEFDUElfREVTQ19UWVBFX05BTUVEKSB7Ci0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIlczogSW52YWxpZCByZXR1cm4gdHlwZSAtIEZvdW5kIGEgTmFtZXNwYWNlIG5vZGUgWyU0LjRzXSB0eXBlICVzIiwKLQkJCSAgICAgIHBhdGhuYW1lLCByZXR1cm5fb2JqZWN0LT5ub2RlLm5hbWUuYXNjaWksCi0JCQkgICAgICBhY3BpX3V0X2dldF90eXBlX25hbWUocmV0dXJuX29iamVjdC0+bm9kZS50eXBlKSkpOworCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkJICAgICAgIkludmFsaWQgcmV0dXJuIHR5cGUgLSBGb3VuZCBhIE5hbWVzcGFjZSBub2RlIFslNC40c10gdHlwZSAlcyIsCisJCQkJICAgICAgcmV0dXJuX29iamVjdC0+bm9kZS5uYW1lLmFzY2lpLAorCQkJCSAgICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShyZXR1cm5fb2JqZWN0LT5ub2RlLgorCQkJCQkJCSAgICB0eXBlKSkpOwogCQlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwogCX0KIApAQCAtODk3LDEwICs5NzYsMTEgQEAKIAogCQkvKiBUeXBlIG1pc21hdGNoIC0tIGF0dGVtcHQgcmVwYWlyIG9mIHRoZSByZXR1cm5lZCBvYmplY3QgKi8KIAotCQlzdGF0dXMgPSBhY3BpX25zX3JlcGFpcl9vYmplY3QoZXhwZWN0ZWRfYnR5cGVzLCBwYWNrYWdlX2luZGV4LAorCQlzdGF0dXMgPSBhY3BpX25zX3JlcGFpcl9vYmplY3QoZGF0YSwgZXhwZWN0ZWRfYnR5cGVzLAorCQkJCQkgICAgICAgcGFja2FnZV9pbmRleCwKIAkJCQkJICAgICAgIHJldHVybl9vYmplY3RfcHRyKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCQlyZXR1cm4gKHN0YXR1cyk7CisJCQlyZXR1cm4gKEFFX09LKTsJLyogUmVwYWlyIHdhcyBzdWNjZXNzZnVsICovCiAJCX0KIAkJZ290byB0eXBlX2Vycm9yX2V4aXQ7CiAJfQpAQCAtOTA4LDcgKzk4OCw3IEBACiAJLyogRm9yIHJlZmVyZW5jZSBvYmplY3RzLCBjaGVjayB0aGF0IHRoZSByZWZlcmVuY2UgdHlwZSBpcyBjb3JyZWN0ICovCiAKIAlpZiAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgewotCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX3JlZmVyZW5jZShwYXRobmFtZSwgcmV0dXJuX29iamVjdCk7CisJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGRhdGEsIHJldHVybl9vYmplY3QpOwogCX0KIAogCXJldHVybiAoc3RhdHVzKTsKQEAgLTkxNywzMyArOTk3LDE5IEBACiAKIAkvKiBDcmVhdGUgYSBzdHJpbmcgd2l0aCBhbGwgZXhwZWN0ZWQgdHlwZXMgZm9yIHRoaXMgcHJlZGVmaW5lZCBvYmplY3QgKi8KIAotCWogPSAxOwotCXR5cGVfYnVmZmVyWzBdID0gMDsKLQl0aGlzX3J0eXBlID0gQUNQSV9SVFlQRV9JTlRFR0VSOworCWFjcGlfbnNfZ2V0X2V4cGVjdGVkX3R5cGVzKHR5cGVfYnVmZmVyLCBleHBlY3RlZF9idHlwZXMpOwogCi0JZm9yIChpID0gMDsgaSA8IEFDUElfTlVNX1JUWVBFUzsgaSsrKSB7Ci0KLQkJLyogSWYgb25lIG9mIHRoZSBleHBlY3RlZCB0eXBlcywgY29uY2F0ZW5hdGUgdGhlIG5hbWUgb2YgdGhpcyB0eXBlICovCi0KLQkJaWYgKGV4cGVjdGVkX2J0eXBlcyAmIHRoaXNfcnR5cGUpIHsKLQkJCUFDUElfU1RSQ0FUKHR5cGVfYnVmZmVyLCAmYWNwaV9ydHlwZV9uYW1lc1tpXVtqXSk7Ci0JCQlqID0gMDsJLyogVXNlIG5hbWUgc2VwYXJhdG9yIGZyb20gbm93IG9uICovCi0JCX0KLQkJdGhpc19ydHlwZSA8PD0gMTsJLyogTmV4dCBSdHlwZSAqLwotCX0KLQotCWlmIChwYWNrYWdlX2luZGV4ID09IEFDUElfTk9UX1BBQ0tBR0UpIHsKLQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIiVzOiBSZXR1cm4gdHlwZSBtaXNtYXRjaCAtIGZvdW5kICVzLCBleHBlY3RlZCAlcyIsCi0JCQkgICAgICBwYXRobmFtZSwKLQkJCSAgICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUocmV0dXJuX29iamVjdCksCi0JCQkgICAgICB0eXBlX2J1ZmZlcikpOworCWlmIChwYWNrYWdlX2luZGV4ID09IEFDUElfTk9UX1BBQ0tBR0VfRUxFTUVOVCkgeworCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkJICAgICAgIlJldHVybiB0eXBlIG1pc21hdGNoIC0gZm91bmQgJXMsIGV4cGVjdGVkICVzIiwKKwkJCQkgICAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lCisJCQkJICAgICAgKHJldHVybl9vYmplY3QpLCB0eXBlX2J1ZmZlcikpOwogCX0gZWxzZSB7Ci0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIlczogUmV0dXJuIFBhY2thZ2UgdHlwZSBtaXNtYXRjaCBhdCBpbmRleCAldSAtICIKLQkJCSAgICAgICJmb3VuZCAlcywgZXhwZWN0ZWQgJXMiLCBwYXRobmFtZSwgcGFja2FnZV9pbmRleCwKLQkJCSAgICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUocmV0dXJuX29iamVjdCksCi0JCQkgICAgICB0eXBlX2J1ZmZlcikpOworCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkJICAgICAgIlJldHVybiBQYWNrYWdlIHR5cGUgbWlzbWF0Y2ggYXQgaW5kZXggJXUgLSAiCisJCQkJICAgICAgImZvdW5kICVzLCBleHBlY3RlZCAlcyIsIHBhY2thZ2VfaW5kZXgsCisJCQkJICAgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZQorCQkJCSAgICAgIChyZXR1cm5fb2JqZWN0KSwgdHlwZV9idWZmZXIpKTsKIAl9CiAKIAlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtOTUzLDcgKzEwMTksNyBAQAogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NoZWNrX3JlZmVyZW5jZQogICoKLSAqIFBBUkFNRVRFUlM6ICBQYXRobmFtZSAgICAgICAgLSBGdWxsIHBhdGhuYW1lIHRvIHRoZSBub2RlIChmb3IgZXJyb3IgbXNncykKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKICAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0ICAgLSBPYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgZXZhbHVhdGlvbiBvZiBhCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG9yIG9iamVjdAogICoKQEAgLTk2Niw3ICsxMDMyLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19jaGVja19yZWZlcmVuY2UoY2hhciAqcGF0aG5hbWUsCithY3BpX25zX2NoZWNrX3JlZmVyZW5jZShzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCiAJCQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fb2JqZWN0KQogewogCkBAIC05NzksOTQgKzEwNDUsNDYgQEAKIAkJcmV0dXJuIChBRV9PSyk7CiAJfQogCi0JQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkgICAgICAiJXM6IFJldHVybiB0eXBlIG1pc21hdGNoIC0gIgotCQkgICAgICAidW5leHBlY3RlZCByZWZlcmVuY2Ugb2JqZWN0IHR5cGUgWyVzXSAlMi4yWCIsCi0JCSAgICAgIHBhdGhuYW1lLCBhY3BpX3V0X2dldF9yZWZlcmVuY2VfbmFtZShyZXR1cm5fb2JqZWN0KSwKLQkJICAgICAgcmV0dXJuX29iamVjdC0+cmVmZXJlbmNlLmNsYXNzKSk7CisJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJICAgICAgIlJldHVybiB0eXBlIG1pc21hdGNoIC0gdW5leHBlY3RlZCByZWZlcmVuY2Ugb2JqZWN0IHR5cGUgWyVzXSAlMi4yWCIsCisJCQkgICAgICBhY3BpX3V0X2dldF9yZWZlcmVuY2VfbmFtZShyZXR1cm5fb2JqZWN0KSwKKwkJCSAgICAgIHJldHVybl9vYmplY3QtPnJlZmVyZW5jZS5jbGFzcykpOwogCiAJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfb2JqZWN0CisgKiBGVU5DVElPTjogICAgYWNwaV9uc19nZXRfZXhwZWN0ZWRfdHlwZXMKICAqCi0gKiBQQVJBTUVURVJTOiAgUGF0aG5hbWUgICAgICAgIC0gRnVsbCBwYXRobmFtZSB0byB0aGUgbm9kZSAoZm9yIGVycm9yIG1zZ3MpCi0gKiAgICAgICAgICAgICAgcGFja2FnZV9pbmRleCAgIC0gVXNlZCB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGluIGEgcGFja2FnZQotICogICAgICAgICAgICAgIHJldHVybl9vYmplY3RfcHRyIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvbiBvZiBhIG1ldGhvZCBvciBvYmplY3QKKyAqIFBBUkFNRVRFUlM6ICBCdWZmZXIgICAgICAgICAgLSBQb2ludGVyIHRvIHdoZXJlIHRoZSBzdHJpbmcgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgICAgICBleHBlY3RlZF9idHlwZXMgLSBCaXRtYXAgb2YgZXhwZWN0ZWQgcmV0dXJuIHR5cGUocykKICAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzLiBBRV9PSyBpZiByZXBhaXIgd2FzIHN1Y2Nlc3NmdWwuCisgKiBSRVRVUk46ICAgICAgQnVmZmVyIGlzIHBvcHVsYXRlZCB3aXRoIHR5cGUgbmFtZXMuCiAgKgotICogREVTQ1JJUFRJT046IEF0dGVtcHQgdG8gcmVwYWlyL2NvbnZlcnQgYSByZXR1cm4gb2JqZWN0IG9mIGEgdHlwZSB0aGF0IHdhcwotICogICAgICAgICAgICAgIG5vdCBleHBlY3RlZC4KKyAqIERFU0NSSVBUSU9OOiBUcmFuc2xhdGUgdGhlIGV4cGVjdGVkIHR5cGVzIGJpdG1hcCBpbnRvIGEgc3RyaW5nIG9mIGFzY2lpCisgKiAgICAgICAgICAgICAgbmFtZXMgb2YgZXhwZWN0ZWQgdHlwZXMsIGZvciB1c2UgaW4gd2FybmluZyBtZXNzYWdlcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfbnNfcmVwYWlyX29iamVjdCh1MzIgZXhwZWN0ZWRfYnR5cGVzLAotCQkgICAgICB1MzIgcGFja2FnZV9pbmRleCwKLQkJICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKQorc3RhdGljIHZvaWQgYWNwaV9uc19nZXRfZXhwZWN0ZWRfdHlwZXMoY2hhciAqYnVmZmVyLCB1MzIgZXhwZWN0ZWRfYnR5cGVzKQogewotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QgPSAqcmV0dXJuX29iamVjdF9wdHI7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29iamVjdDsKLQlhY3BpX3NpemUgbGVuZ3RoOworCXUzMiB0aGlzX3J0eXBlOworCXUzMiBpOworCXUzMiBqOwogCi0Jc3dpdGNoIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSkgewotCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKKwlqID0gMTsKKwlidWZmZXJbMF0gPSAwOworCXRoaXNfcnR5cGUgPSBBQ1BJX1JUWVBFX0lOVEVHRVI7CiAKLQkJaWYgKCEoZXhwZWN0ZWRfYnR5cGVzICYgQUNQSV9SVFlQRV9TVFJJTkcpKSB7Ci0JCQlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9SVFlQRVM7IGkrKykgeworCisJCS8qIElmIG9uZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZXMsIGNvbmNhdGVuYXRlIHRoZSBuYW1lIG9mIHRoaXMgdHlwZSAqLworCisJCWlmIChleHBlY3RlZF9idHlwZXMgJiB0aGlzX3J0eXBlKSB7CisJCQlBQ1BJX1NUUkNBVChidWZmZXIsICZhY3BpX3J0eXBlX25hbWVzW2ldW2pdKTsKKwkJCWogPSAwOwkvKiBVc2UgbmFtZSBzZXBhcmF0b3IgZnJvbSBub3cgb24gKi8KIAkJfQotCi0JCS8qCi0JCSAqIEhhdmUgYSBCdWZmZXIsIGV4cGVjdGVkIGEgU3RyaW5nLCBjb252ZXJ0LiBVc2UgYSB0b19zdHJpbmcKLQkJICogY29udmVyc2lvbiwgbm8gdHJhbnNmb3JtIHBlcmZvcm1lZCBvbiB0aGUgYnVmZmVyIGRhdGEuIFRoZSBiZXN0Ci0JCSAqIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgX0JJRiBtZXRob2QsIHdoZXJlIHRoZSBzdHJpbmcgZGF0YSBmcm9tCi0JCSAqIHRoZSBiYXR0ZXJ5IGlzIG9mdGVuIChpbmNvcnJlY3RseSkgcmV0dXJuZWQgYXMgYnVmZmVyIG9iamVjdChzKS4KLQkJICovCi0JCWxlbmd0aCA9IDA7Ci0JCXdoaWxlICgobGVuZ3RoIDwgcmV0dXJuX29iamVjdC0+YnVmZmVyLmxlbmd0aCkgJiYKLQkJICAgICAgIChyZXR1cm5fb2JqZWN0LT5idWZmZXIucG9pbnRlcltsZW5ndGhdKSkgewotCQkJbGVuZ3RoKys7Ci0JCX0KLQotCQkvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCi0KLQkJbmV3X29iamVjdCA9IGFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QobGVuZ3RoKTsKLQkJaWYgKCFuZXdfb2JqZWN0KSB7Ci0JCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7Ci0JCX0KLQotCQkvKgotCQkgKiBDb3B5IHRoZSByYXcgYnVmZmVyIGRhdGEgd2l0aCBubyB0cmFuc2Zvcm0uIFN0cmluZyBpcyBhbHJlYWR5IE5VTEwKLQkJICogdGVybWluYXRlZCBhdCBMZW5ndGgrMS4KLQkJICovCi0JCUFDUElfTUVNQ1BZKG5ld19vYmplY3QtPnN0cmluZy5wb2ludGVyLAotCQkJICAgIHJldHVybl9vYmplY3QtPmJ1ZmZlci5wb2ludGVyLCBsZW5ndGgpOwotCi0JCS8qIEluc3RhbGwgdGhlIG5ldyByZXR1cm4gb2JqZWN0ICovCi0KLQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJldHVybl9vYmplY3QpOwotCQkqcmV0dXJuX29iamVjdF9wdHIgPSBuZXdfb2JqZWN0OwotCi0JCS8qCi0JCSAqIElmIHRoZSBvYmplY3QgaXMgYSBwYWNrYWdlIGVsZW1lbnQsIHdlIG5lZWQgdG86Ci0JCSAqIDEuIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvcmlnbmFsIG9iamVjdCwgaXQgd2FzCi0JCSAqICAgIGluY3JlbWVudGVkIHdoZW4gYnVpbGRpbmcgdGhlIHBhY2thZ2UKLQkJICogMi4gSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG5ldyBvYmplY3QsIGl0IHdpbGwgYmUKLQkJICogICAgZGVjcmVtZW50ZWQgd2hlbiByZWxlYXNpbmcgdGhlIHBhY2thZ2UKLQkJICovCi0JCWlmIChwYWNrYWdlX2luZGV4ICE9IEFDUElfTk9UX1BBQ0tBR0UpIHsKLQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fb2JqZWN0KTsKLQkJCWFjcGlfdXRfYWRkX3JlZmVyZW5jZShuZXdfb2JqZWN0KTsKLQkJfQotCQlyZXR1cm4gKEFFX09LKTsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOworCQl0aGlzX3J0eXBlIDw8PSAxOwkvKiBOZXh0IFJ0eXBlICovCiAJfQotCi0JcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjJiMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jCkBAIC0wLDAgKzEsMjAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kdWxlIE5hbWU6IG5zcmVwYWlyIC0gUmVwYWlyIGZvciBvYmplY3RzIHJldHVybmVkIGJ5IHByZWRlZmluZWQgbWV0aG9kcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgorI2luY2x1ZGUgImFjY29tbW9uLmgiCisjaW5jbHVkZSAiYWNuYW1lc3AuaCIKKyNpbmNsdWRlICJhY3ByZWRlZi5oIgorCisjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKK0FDUElfTU9EVUxFX05BTUUoIm5zcmVwYWlyIikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfb2JqZWN0CisgKgorICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICBleHBlY3RlZF9idHlwZXMgICAgIC0gT2JqZWN0IHR5cGVzIGV4cGVjdGVkCisgKiAgICAgICAgICAgICAgcGFja2FnZV9pbmRleCAgICAgICAtIEluZGV4IG9mIG9iamVjdCB3aXRoaW4gcGFyZW50IHBhY2thZ2UgKGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgLSBBQ1BJX05PVF9QQUNLQUdFX0VMRU1FTlQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlKQorICogICAgICAgICAgICAgIHJldHVybl9vYmplY3RfcHRyICAgLSBQb2ludGVyIHRvIHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvbiBvZiBhIG1ldGhvZCBvciBvYmplY3QKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzLiBBRV9PSyBpZiByZXBhaXIgd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogREVTQ1JJUFRJT046IEF0dGVtcHQgdG8gcmVwYWlyL2NvbnZlcnQgYSByZXR1cm4gb2JqZWN0IG9mIGEgdHlwZSB0aGF0IHdhcworICogICAgICAgICAgICAgIG5vdCBleHBlY3RlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMKK2FjcGlfbnNfcmVwYWlyX29iamVjdChzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCSAgICAgIHUzMiBleHBlY3RlZF9idHlwZXMsCisJCSAgICAgIHUzMiBwYWNrYWdlX2luZGV4LAorCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX29iamVjdCA9ICpyZXR1cm5fb2JqZWN0X3B0cjsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpuZXdfb2JqZWN0OworCWFjcGlfc2l6ZSBsZW5ndGg7CisKKwlzd2l0Y2ggKHJldHVybl9vYmplY3QtPmNvbW1vbi50eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgorCisJCS8qIERvZXMgdGhlIG1ldGhvZC9vYmplY3QgbGVnYWxseSByZXR1cm4gYSBzdHJpbmc/ICovCisKKwkJaWYgKCEoZXhwZWN0ZWRfYnR5cGVzICYgQUNQSV9SVFlQRV9TVFJJTkcpKSB7CisJCQlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworCQl9CisKKwkJLyoKKwkJICogSGF2ZSBhIEJ1ZmZlciwgZXhwZWN0ZWQgYSBTdHJpbmcsIGNvbnZlcnQuIFVzZSBhIHRvX3N0cmluZworCQkgKiBjb252ZXJzaW9uLCBubyB0cmFuc2Zvcm0gcGVyZm9ybWVkIG9uIHRoZSBidWZmZXIgZGF0YS4gVGhlIGJlc3QKKwkJICogZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBfQklGIG1ldGhvZCwgd2hlcmUgdGhlIHN0cmluZyBkYXRhIGZyb20KKwkJICogdGhlIGJhdHRlcnkgaXMgb2Z0ZW4gKGluY29ycmVjdGx5KSByZXR1cm5lZCBhcyBidWZmZXIgb2JqZWN0KHMpLgorCQkgKi8KKwkJbGVuZ3RoID0gMDsKKwkJd2hpbGUgKChsZW5ndGggPCByZXR1cm5fb2JqZWN0LT5idWZmZXIubGVuZ3RoKSAmJgorCQkgICAgICAgKHJldHVybl9vYmplY3QtPmJ1ZmZlci5wb2ludGVyW2xlbmd0aF0pKSB7CisJCQlsZW5ndGgrKzsKKwkJfQorCisJCS8qIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmplY3QgKi8KKworCQluZXdfb2JqZWN0ID0gYWNwaV91dF9jcmVhdGVfc3RyaW5nX29iamVjdChsZW5ndGgpOworCQlpZiAoIW5ld19vYmplY3QpIHsKKwkJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKKwkJfQorCisJCS8qCisJCSAqIENvcHkgdGhlIHJhdyBidWZmZXIgZGF0YSB3aXRoIG5vIHRyYW5zZm9ybS4gU3RyaW5nIGlzIGFscmVhZHkgTlVMTAorCQkgKiB0ZXJtaW5hdGVkIGF0IExlbmd0aCsxLgorCQkgKi8KKwkJQUNQSV9NRU1DUFkobmV3X29iamVjdC0+c3RyaW5nLnBvaW50ZXIsCisJCQkgICAgcmV0dXJuX29iamVjdC0+YnVmZmVyLnBvaW50ZXIsIGxlbmd0aCk7CisKKwkJLyoKKwkJICogSWYgdGhlIG9yaWdpbmFsIG9iamVjdCBpcyBhIHBhY2thZ2UgZWxlbWVudCwgd2UgbmVlZCB0bzoKKwkJICogMS4gU2V0IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG5ldyBvYmplY3QgdG8gbWF0Y2ggdGhlCisJCSAqICAgIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2xkIG9iamVjdC4KKwkJICogMi4gRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9yaWdpbmFsIG9iamVjdC4KKwkJICovCisJCWlmIChwYWNrYWdlX2luZGV4ICE9IEFDUElfTk9UX1BBQ0tBR0VfRUxFTUVOVCkgeworCQkJbmV3X29iamVjdC0+Y29tbW9uLnJlZmVyZW5jZV9jb3VudCA9CisJCQkgICAgcmV0dXJuX29iamVjdC0+Y29tbW9uLnJlZmVyZW5jZV9jb3VudDsKKworCQkJaWYgKHJldHVybl9vYmplY3QtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQgPiAxKSB7CisJCQkJcmV0dXJuX29iamVjdC0+Y29tbW9uLnJlZmVyZW5jZV9jb3VudC0tOworCQkJfQorCisJCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsCisJCQkJCSAgICAgIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkJCSAgICAgICJDb252ZXJ0ZWQgQnVmZmVyIHRvIGV4cGVjdGVkIFN0cmluZyBhdCBpbmRleCAldSIsCisJCQkJCSAgICAgIHBhY2thZ2VfaW5kZXgpKTsKKwkJfSBlbHNlIHsKKwkJCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwKKwkJCQkJICAgICAgZGF0YS0+bm9kZV9mbGFncywKKwkJCQkJICAgICAgIkNvbnZlcnRlZCBCdWZmZXIgdG8gZXhwZWN0ZWQgU3RyaW5nIikpOworCQl9CisKKwkJLyogRGVsZXRlIG9sZCBvYmplY3QsIGluc3RhbGwgdGhlIG5ldyByZXR1cm4gb2JqZWN0ICovCisKKwkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKHJldHVybl9vYmplY3QpOworCQkqcmV0dXJuX29iamVjdF9wdHIgPSBuZXdfb2JqZWN0OworCQlkYXRhLT5mbGFncyB8PSBBQ1BJX09CSkVDVF9SRVBBSVJFRDsKKwkJcmV0dXJuIChBRV9PSyk7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX3JlcGFpcl9wYWNrYWdlX2xpc3QKKyAqCisgKiBQQVJBTUVURVJTOiAgRGF0YSAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdmFsaWRhdGlvbiBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICAgIG9ial9kZXNjX3B0ciAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBvYmplY3QgdG8gcmVwYWlyLiBUaGUgbmV3CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb2JqZWN0IGlzIHJldHVybmVkIGhlcmUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0aW5nIHRoZSBvbGQgb2JqZWN0LgorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMsIG5ldyBvYmplY3QgaW4gKm9ial9kZXNjX3B0cgorICoKKyAqIERFU0NSSVBUSU9OOiBSZXBhaXIgYSBjb21tb24gcHJvYmxlbSB3aXRoIG9iamVjdHMgdGhhdCBhcmUgZGVmaW5lZCB0byByZXR1cm4KKyAqICAgICAgICAgICAgICBhIHZhcmlhYmxlLWxlbmd0aCBQYWNrYWdlIG9mIFBhY2thZ2VzLiBJZiB0aGUgdmFyaWFibGUtbGVuZ3RoCisgKiAgICAgICAgICAgICAgaXMgb25lLCBzb21lIEJJT1MgY29kZSBtaXN0YWtlbmx5IHNpbXBseSBkZWNsYXJlcyBhIHNpbmdsZQorICogICAgICAgICAgICAgIFBhY2thZ2UgaW5zdGVhZCBvZiBhIFBhY2thZ2Ugd2l0aCBvbmUgc3ViLVBhY2thZ2UuIFRoaXMKKyAqICAgICAgICAgICAgICBmdW5jdGlvbiBhdHRlbXB0cyB0byByZXBhaXIgdGhpcyBlcnJvciBieSB3cmFwcGluZyBhIFBhY2thZ2UKKyAqICAgICAgICAgICAgICBvYmplY3QgYXJvdW5kIHRoZSBvcmlnaW5hbCBQYWNrYWdlLCBjcmVhdGluZyB0aGUgY29ycmVjdAorICogICAgICAgICAgICAgIFBhY2thZ2Ugd2l0aCBvbmUgc3ViLVBhY2thZ2UuCisgKgorICogICAgICAgICAgICAgIE5hbWVzIHRoYXQgY2FuIGJlIHJlcGFpcmVkIGluIHRoaXMgbWFubmVyIGluY2x1ZGU6CisgKiAgICAgICAgICAgICAgX0FMUiwgX0NTRCwgX0hQWCwgX01MUywgX1BSVCwgX1BTUywgX1RSVCwgVFNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfbnNfcmVwYWlyX3BhY2thZ2VfbGlzdChzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKm9ial9kZXNjX3B0cikKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwa2dfb2JqX2Rlc2M7CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgbmV3IG91dGVyIHBhY2thZ2UgYW5kIHBvcHVsYXRlIGl0LiBUaGUgbmV3IHBhY2thZ2Ugd2lsbAorCSAqIGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgdGhlIGxvbmUgc3VicGFja2FnZS4KKwkgKi8KKwlwa2dfb2JqX2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9wYWNrYWdlX29iamVjdCgxKTsKKwlpZiAoIXBrZ19vYmpfZGVzYykgeworCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CisJfQorCisJcGtnX29ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzBdID0gKm9ial9kZXNjX3B0cjsKKworCS8qIFJldHVybiB0aGUgbmV3IG9iamVjdCBpbiB0aGUgb2JqZWN0IHBvaW50ZXIgKi8KKworCSpvYmpfZGVzY19wdHIgPSBwa2dfb2JqX2Rlc2M7CisJZGF0YS0+ZmxhZ3MgfD0gQUNQSV9PQkpFQ1RfUkVQQUlSRUQ7CisKKwlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsIGRhdGEtPm5vZGVfZmxhZ3MsCisJCQkgICAgICAiSW5jb3JyZWN0bHkgZm9ybWVkIFBhY2thZ2UsIGF0dGVtcHRpbmcgcmVwYWlyIikpOworCisJcmV0dXJuIChBRV9PSyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCmluZGV4IDc4Mjc3ZWQuLmVhNTVhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCkBAIC04OCw3ICs4OCw4IEBACiAKIAkJLyogVGhlcmUgaXMgYSBub24tYXNjaWkgY2hhcmFjdGVyIGluIHRoZSBuYW1lICovCiAKLQkJQUNQSV9NT1ZFXzMyX1RPXzMyKCZiYWRfbmFtZSwgaW50ZXJuYWxfbmFtZSk7CisJCUFDUElfTU9WRV8zMl9UT18zMigmYmFkX25hbWUsCisJCQkJICAgQUNQSV9DQVNUX1BUUih1MzIsIGludGVybmFsX25hbWUpKTsKIAkJYWNwaV9vc19wcmludGYoIlsweCU0LjRYXSAoTk9OLUFTQ0lJKSIsIGJhZF9uYW1lKTsKIAl9IGVsc2UgewogCQkvKiBDb252ZXJ0IHBhdGggdG8gZXh0ZXJuYWwgZm9ybWF0ICovCkBAIC04MzYsNyArODM3LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJY2hhciAqaW50ZXJuYWxfcGF0aDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2dldF9ub2RlLCBwYXRobmFtZSk7CisJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZ2V0X25vZGUsIEFDUElfQ0FTVF9QVFIoY2hhciwgcGF0aG5hbWUpKTsKIAogCWlmICghcGF0aG5hbWUpIHsKIAkJKnJldHVybl9ub2RlID0gcHJlZml4X25vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKaW5kZXggZGFmNGFkMy4uNDkyOWRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYwpAQCAtNTM1LDEwICs1MzUsMTEgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdTMyIGZsYWdzOwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIGhpZDsKLQlzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgKmNpZDsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqaGlkOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZDsKIAl1MzIgaTsKLQlpbnQgZm91bmQ7CisJdTggZm91bmQ7CisJaW50IG5vX21hdGNoOwogCiAJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC01ODIsMTAgKzU4MywxNCBAQAogCQkJcmV0dXJuIChBRV9DVFJMX0RFUFRIKTsKIAkJfQogCi0JCWlmIChBQ1BJX1NUUk5DTVAoaGlkLnZhbHVlLCBpbmZvLT5oaWQsIHNpemVvZihoaWQudmFsdWUpKSAhPSAwKSB7CisJCW5vX21hdGNoID0gQUNQSV9TVFJDTVAoaGlkLT5zdHJpbmcsIGluZm8tPmhpZCk7CisJCUFDUElfRlJFRShoaWQpOwogCi0JCQkvKiBHZXQgdGhlIGxpc3Qgb2YgQ29tcGF0aWJsZSBJRHMgKi8KLQorCQlpZiAobm9fbWF0Y2gpIHsKKwkJCS8qCisJCQkgKiBISUQgZG9lcyBub3QgbWF0Y2gsIGF0dGVtcHQgbWF0Y2ggd2l0aGluIHRoZQorCQkJICogbGlzdCBvZiBDb21wYXRpYmxlIElEcyAoQ0lEcykKKwkJCSAqLwogCQkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX0NJRChub2RlLCAmY2lkKTsKIAkJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CiAJCQkJcmV0dXJuIChBRV9PSyk7CkBAIC01OTcsMTAgKzYwMiw4IEBACiAKIAkJCWZvdW5kID0gMDsKIAkJCWZvciAoaSA9IDA7IGkgPCBjaWQtPmNvdW50OyBpKyspIHsKLQkJCQlpZiAoQUNQSV9TVFJOQ01QKGNpZC0+aWRbaV0udmFsdWUsIGluZm8tPmhpZCwKLQkJCQkJCSBzaXplb2Yoc3RydWN0Ci0JCQkJCQkJYWNwaV9jb21wYXRpYmxlX2lkKSkgPT0KLQkJCQkgICAgMCkgeworCQkJCWlmIChBQ1BJX1NUUkNNUChjaWQtPmlkc1tpXS5zdHJpbmcsIGluZm8tPmhpZCkKKwkJCQkgICAgPT0gMCkgewogCQkJCQlmb3VuZCA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYwppbmRleCBmMjM1OTNkLi5kZGM4NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jCkBAIC01MSw2ICs1MSwxMSBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCiBBQ1BJX01PRFVMRV9OQU1FKCJuc3hmbmFtZSIpCiAKKy8qIExvY2FsIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBjaGFyICphY3BpX25zX2NvcHlfZGV2aWNlX2lkKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICpkZXN0LAorCQkJCSAgICBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqc291cmNlLAorCQkJCSAgICBjaGFyICpzdHJpbmdfYXJlYSk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfaGFuZGxlCkBAIC02OCw2ICs3Myw3IEBACiAgKiAgICAgICAgICAgICAgbmFtZXNwYWNlIGhhbmRsZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfaGFuZGxlKGFjcGlfaGFuZGxlIHBhcmVudCwKIAkJYWNwaV9zdHJpbmcgcGF0aG5hbWUsIGFjcGlfaGFuZGxlICogcmV0X2hhbmRsZSkKQEAgLTIxMCwxMCArMjE2LDM4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19jb3B5X2RldmljZV9pZAorICoKKyAqIFBBUkFNRVRFUlM6ICBEZXN0ICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gREVWSUNFX0lECisgKiAgICAgICAgICAgICAgU291cmNlICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIHNvdXJjZSBERVZJQ0VfSUQKKyAqICAgICAgICAgICAgICBzdHJpbmdfYXJlYSAgICAgICAgIC0gUG9pbnRlciB0byB3aGVyZSB0byBjb3B5IHRoZSBkZXN0IHN0cmluZworICoKKyAqIFJFVFVSTjogICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IHN0cmluZyBhcmVhCisgKgorICogREVTQ1JJUFRJT046IENvcHkgYSBzaW5nbGUgREVWSUNFX0lELCBpbmNsdWRpbmcgdGhlIHN0cmluZyBkYXRhLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY2hhciAqYWNwaV9uc19jb3B5X2RldmljZV9pZChzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqZGVzdCwKKwkJCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKnNvdXJjZSwKKwkJCQkgICAgY2hhciAqc3RyaW5nX2FyZWEpCit7CisJLyogQ3JlYXRlIHRoZSBkZXN0aW5hdGlvbiBERVZJQ0VfSUQgKi8KKworCWRlc3QtPnN0cmluZyA9IHN0cmluZ19hcmVhOworCWRlc3QtPmxlbmd0aCA9IHNvdXJjZS0+bGVuZ3RoOworCisJLyogQ29weSBhY3R1YWwgc3RyaW5nIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXh0IHN0cmluZyBhcmVhICovCisKKwlBQ1BJX01FTUNQWShzdHJpbmdfYXJlYSwgc291cmNlLT5zdHJpbmcsIHNvdXJjZS0+bGVuZ3RoKTsKKwlyZXR1cm4gKHN0cmluZ19hcmVhICsgc291cmNlLT5sZW5ndGgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X29iamVjdF9pbmZvCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIE9iamVjdCBIYW5kbGUKLSAqICAgICAgICAgICAgICBCdWZmZXIgICAgICAgICAgLSBXaGVyZSB0aGUgaW5mbyBpcyByZXR1cm5lZAorICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAgICAgLSBPYmplY3QgSGFuZGxlCisgKiAgICAgICAgICAgICAgcmV0dXJuX2J1ZmZlciAgICAgICAtIFdoZXJlIHRoZSBpbmZvIGlzIHJldHVybmVkCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTIyMSwzMyArMjU1LDM3IEBACiAgKiAgICAgICAgICAgICAgbmFtZXNwYWNlIG5vZGUgYW5kIHBvc3NpYmx5IGJ5IHJ1bm5pbmcgc2V2ZXJhbCBzdGFuZGFyZAogICogICAgICAgICAgICAgIGNvbnRyb2wgbWV0aG9kcyAoU3VjaCBhcyBpbiB0aGUgY2FzZSBvZiBhIGRldmljZS4pCiAgKgorICogRm9yIERldmljZSBhbmQgUHJvY2Vzc29yIG9iamVjdHMsIHJ1biB0aGUgRGV2aWNlIF9ISUQsIF9VSUQsIF9DSUQsIF9TVEEsCisgKiBfQURSLCBfc3hfdywgYW5kIF9zeF9kIG1ldGhvZHMuCisgKgorICogTm90ZTogQWxsb2NhdGVzIHRoZSByZXR1cm4gYnVmZmVyLCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogYWNwaV9zdGF0dXMKLWFjcGlfZ2V0X29iamVjdF9pbmZvKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfYnVmZmVyICogYnVmZmVyKQorYWNwaV9nZXRfb2JqZWN0X2luZm8oYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkgICAgIHN0cnVjdCBhY3BpX2RldmljZV9pbmZvICoqcmV0dXJuX2J1ZmZlcikKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87Ci0Jc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKnJldHVybl9pbmZvOwotCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkX2xpc3QgPSBOVUxMOwotCWFjcGlfc2l6ZSBzaXplOworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqaGlkID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqdWlkID0gTlVMTDsKKwljaGFyICpuZXh0X2lkX3N0cmluZzsKKwlhY3BpX29iamVjdF90eXBlIHR5cGU7CisJYWNwaV9uYW1lIG5hbWU7CisJdTggcGFyYW1fY291bnQgPSAwOworCXU4IHZhbGlkID0gMDsKKwl1MzIgaW5mb19zaXplOworCXUzMiBpOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCiAKLQlpZiAoIWhhbmRsZSB8fCAhYnVmZmVyKSB7CisJaWYgKCFoYW5kbGUgfHwgIXJldHVybl9idWZmZXIpIHsKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX3V0X3ZhbGlkYXRlX2J1ZmZlcihidWZmZXIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0JaW5mbyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbykpOwotCWlmICghaW5mbykgewotCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7Ci0JfQotCiAJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWdvdG8gY2xlYW51cDsKQEAgLTI1Niw2NiArMjk0LDkxIEBACiAJbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGhhbmRsZSk7CiAJaWYgKCFub2RlKSB7CiAJCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwotCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwotCQlnb3RvIGNsZWFudXA7CisJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyogSW5pdCByZXR1cm4gc3RydWN0dXJlICovCisJLyogR2V0IHRoZSBuYW1lc3BhY2Ugbm9kZSBkYXRhIHdoaWxlIHRoZSBuYW1lc3BhY2UgaXMgbG9ja2VkICovCiAKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZV9pbmZvKTsKLQotCWluZm8tPnR5cGUgPSBub2RlLT50eXBlOwotCWluZm8tPm5hbWUgPSBub2RlLT5uYW1lLmludGVnZXI7Ci0JaW5mby0+dmFsaWQgPSAwOworCWluZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyk7CisJdHlwZSA9IG5vZGUtPnR5cGU7CisJbmFtZSA9IG5vZGUtPm5hbWUuaW50ZWdlcjsKIAogCWlmIChub2RlLT50eXBlID09IEFDUElfVFlQRV9NRVRIT0QpIHsKLQkJaW5mby0+cGFyYW1fY291bnQgPSBub2RlLT5vYmplY3QtPm1ldGhvZC5wYXJhbV9jb3VudDsKKwkJcGFyYW1fY291bnQgPSBub2RlLT5vYmplY3QtPm1ldGhvZC5wYXJhbV9jb3VudDsKIAl9CiAKIAlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byBjbGVhbnVwOworCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCi0JLyogSWYgbm90IGEgZGV2aWNlLCB3ZSBhcmUgYWxsIGRvbmUgKi8KLQotCWlmIChpbmZvLT50eXBlID09IEFDUElfVFlQRV9ERVZJQ0UpIHsKKwlpZiAoKHR5cGUgPT0gQUNQSV9UWVBFX0RFVklDRSkgfHwgKHR5cGUgPT0gQUNQSV9UWVBFX1BST0NFU1NPUikpIHsKIAkJLyoKLQkJICogR2V0IGV4dHJhIGluZm8gZm9yIEFDUEkgRGV2aWNlcyBvYmplY3RzIG9ubHk6Ci0JCSAqIFJ1biB0aGUgRGV2aWNlIF9ISUQsIF9VSUQsIF9DSUQsIF9TVEEsIF9BRFIgYW5kIF9zeF9kIG1ldGhvZHMuCisJCSAqIEdldCBleHRyYSBpbmZvIGZvciBBQ1BJIERldmljZS9Qcm9jZXNzb3Igb2JqZWN0cyBvbmx5OgorCQkgKiBSdW4gdGhlIERldmljZSBfSElELCBfVUlELCBhbmQgX0NJRCBtZXRob2RzLgogCQkgKgogCQkgKiBOb3RlOiBub25lIG9mIHRoZXNlIG1ldGhvZHMgYXJlIHJlcXVpcmVkLCBzbyB0aGV5IG1heSBvciBtYXkKLQkJICogbm90IGJlIHByZXNlbnQgZm9yIHRoaXMgZGV2aWNlLiAgVGhlIEluZm8tPlZhbGlkIGJpdGZpZWxkIGlzIHVzZWQKLQkJICogdG8gaW5kaWNhdGUgd2hpY2ggbWV0aG9kcyB3ZXJlIGZvdW5kIGFuZCByYW4gc3VjY2Vzc2Z1bGx5LgorCQkgKiBub3QgYmUgcHJlc2VudCBmb3IgdGhpcyBkZXZpY2UuIFRoZSBJbmZvLT5WYWxpZCBiaXRmaWVsZCBpcyB1c2VkCisJCSAqIHRvIGluZGljYXRlIHdoaWNoIG1ldGhvZHMgd2VyZSBmb3VuZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseS4KIAkJICovCiAKIAkJLyogRXhlY3V0ZSB0aGUgRGV2aWNlLl9ISUQgbWV0aG9kICovCiAKLQkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX0hJRChub2RlLCAmaW5mby0+aGFyZHdhcmVfaWQpOworCQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfSElEKG5vZGUsICZoaWQpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCWluZm8tPnZhbGlkIHw9IEFDUElfVkFMSURfSElEOworCQkJaW5mb19zaXplICs9IGhpZC0+bGVuZ3RoOworCQkJdmFsaWQgfD0gQUNQSV9WQUxJRF9ISUQ7CiAJCX0KIAogCQkvKiBFeGVjdXRlIHRoZSBEZXZpY2UuX1VJRCBtZXRob2QgKi8KIAotCQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfVUlEKG5vZGUsICZpbmZvLT51bmlxdWVfaWQpOworCQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfVUlEKG5vZGUsICZ1aWQpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCWluZm8tPnZhbGlkIHw9IEFDUElfVkFMSURfVUlEOworCQkJaW5mb19zaXplICs9IHVpZC0+bGVuZ3RoOworCQkJdmFsaWQgfD0gQUNQSV9WQUxJRF9VSUQ7CiAJCX0KIAogCQkvKiBFeGVjdXRlIHRoZSBEZXZpY2UuX0NJRCBtZXRob2QgKi8KIAogCQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfQ0lEKG5vZGUsICZjaWRfbGlzdCk7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJc2l6ZSArPSBjaWRfbGlzdC0+c2l6ZTsKLQkJCWluZm8tPnZhbGlkIHw9IEFDUElfVkFMSURfQ0lEOworCisJCQkvKiBBZGQgc2l6ZSBvZiBDSUQgc3RyaW5ncyBhbmQgQ0lEIHBvaW50ZXIgYXJyYXkgKi8KKworCQkJaW5mb19zaXplICs9CisJCQkgICAgKGNpZF9saXN0LT5saXN0X3NpemUgLQorCQkJICAgICBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCkpOworCQkJdmFsaWQgfD0gQUNQSV9WQUxJRF9DSUQ7CiAJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHZhcmlhYmxlLWxlbmd0aCBkYXRhLCB3ZSBjYW4gYWxsb2NhdGUgdGhlCisJICogcmV0dXJuIGJ1ZmZlcgorCSAqLworCWluZm8gPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChpbmZvX3NpemUpOworCWlmICghaW5mbykgeworCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBHZXQgdGhlIGZpeGVkLWxlbmd0aCBkYXRhICovCisKKwlpZiAoKHR5cGUgPT0gQUNQSV9UWVBFX0RFVklDRSkgfHwgKHR5cGUgPT0gQUNQSV9UWVBFX1BST0NFU1NPUikpIHsKKwkJLyoKKwkJICogR2V0IGV4dHJhIGluZm8gZm9yIEFDUEkgRGV2aWNlL1Byb2Nlc3NvciBvYmplY3RzIG9ubHk6CisJCSAqIFJ1biB0aGUgX1NUQSwgX0FEUiBhbmQsIHN4X3csIGFuZCBfc3hfZCBtZXRob2RzLgorCQkgKgorCQkgKiBOb3RlOiBub25lIG9mIHRoZXNlIG1ldGhvZHMgYXJlIHJlcXVpcmVkLCBzbyB0aGV5IG1heSBvciBtYXkKKwkJICogbm90IGJlIHByZXNlbnQgZm9yIHRoaXMgZGV2aWNlLiBUaGUgSW5mby0+VmFsaWQgYml0ZmllbGQgaXMgdXNlZAorCQkgKiB0byBpbmRpY2F0ZSB3aGljaCBtZXRob2RzIHdlcmUgZm91bmQgYW5kIHJ1biBzdWNjZXNzZnVsbHkuCisJCSAqLwogCiAJCS8qIEV4ZWN1dGUgdGhlIERldmljZS5fU1RBIG1ldGhvZCAqLwogCiAJCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9TVEEobm9kZSwgJmluZm8tPmN1cnJlbnRfc3RhdHVzKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCQlpbmZvLT52YWxpZCB8PSBBQ1BJX1ZBTElEX1NUQTsKKwkJCXZhbGlkIHw9IEFDUElfVkFMSURfU1RBOwogCQl9CiAKIAkJLyogRXhlY3V0ZSB0aGUgRGV2aWNlLl9BRFIgbWV0aG9kICovCkBAIC0zMjMsMzYgKzM4NiwxMDAgQEAKIAkJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdChNRVRIT0RfTkFNRV9fQURSLCBub2RlLAogCQkJCQkJCSAmaW5mby0+YWRkcmVzcyk7CiAJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJaW5mby0+dmFsaWQgfD0gQUNQSV9WQUxJRF9BRFI7CisJCQl2YWxpZCB8PSBBQ1BJX1ZBTElEX0FEUjsKKwkJfQorCisJCS8qIEV4ZWN1dGUgdGhlIERldmljZS5fc3hfdyBtZXRob2RzICovCisKKwkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX3Bvd2VyX21ldGhvZHMobm9kZSwKKwkJCQkJCSAgICAgICBhY3BpX2dibF9sb3dlc3RfZHN0YXRlX25hbWVzLAorCQkJCQkJICAgICAgIEFDUElfTlVNX3N4X3dfTUVUSE9EUywKKwkJCQkJCSAgICAgICBpbmZvLT5sb3dlc3RfZHN0YXRlcyk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJdmFsaWQgfD0gQUNQSV9WQUxJRF9TWFdTOwogCQl9CiAKIAkJLyogRXhlY3V0ZSB0aGUgRGV2aWNlLl9zeF9kIG1ldGhvZHMgKi8KIAotCQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfc3hkcyhub2RlLCBpbmZvLT5oaWdoZXN0X2RzdGF0ZXMpOworCQlzdGF0dXMgPSBhY3BpX3V0X2V4ZWN1dGVfcG93ZXJfbWV0aG9kcyhub2RlLAorCQkJCQkJICAgICAgIGFjcGlfZ2JsX2hpZ2hlc3RfZHN0YXRlX25hbWVzLAorCQkJCQkJICAgICAgIEFDUElfTlVNX3N4X2RfTUVUSE9EUywKKwkJCQkJCSAgICAgICBpbmZvLT5oaWdoZXN0X2RzdGF0ZXMpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCWluZm8tPnZhbGlkIHw9IEFDUElfVkFMSURfU1hEUzsKKwkJCXZhbGlkIHw9IEFDUElfVkFMSURfU1hEUzsKIAkJfQogCX0KIAotCS8qIFZhbGlkYXRlL0FsbG9jYXRlL0NsZWFyIGNhbGxlciBidWZmZXIgKi8KKwkvKgorCSAqIENyZWF0ZSBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyBhcmVhIG9mIHRoZSByZXR1cm4gYnVmZmVyLgorCSAqIFBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGJhc2Ugc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gc3RydWN0dXJlLgorCSAqLworCW5leHRfaWRfc3RyaW5nID0gQUNQSV9DQVNUX1BUUihjaGFyLCBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuaWRzKTsKKwlpZiAoY2lkX2xpc3QpIHsKIAotCXN0YXR1cyA9IGFjcGlfdXRfaW5pdGlhbGl6ZV9idWZmZXIoYnVmZmVyLCBzaXplKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byBjbGVhbnVwOworCQkvKiBQb2ludCBwYXN0IHRoZSBDSUQgREVWSUNFX0lEIGFycmF5ICovCisKKwkJbmV4dF9pZF9zdHJpbmcgKz0KKwkJICAgICgoYWNwaV9zaXplKSBjaWRfbGlzdC0+Y291bnQgKgorCQkgICAgIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOwogCX0KIAotCS8qIFBvcHVsYXRlIHRoZSByZXR1cm4gYnVmZmVyICovCisJLyoKKwkgKiBDb3B5IHRoZSBISUQsIFVJRCwgYW5kIENJRHMgdG8gdGhlIHJldHVybiBidWZmZXIuIFRoZSB2YXJpYWJsZS1sZW5ndGgKKwkgKiBzdHJpbmdzIGFyZSBjb3BpZWQgdG8gdGhlIHJlc2VydmVkIGFyZWEgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCSAqCisJICogRm9yIEhJRCBhbmQgQ0lELCBjaGVjayBpZiB0aGUgSUQgaXMgYSBQQ0kgUm9vdCBCcmlkZ2UuCisJICovCisJaWYgKGhpZCkgeworCQluZXh0X2lkX3N0cmluZyA9IGFjcGlfbnNfY29weV9kZXZpY2VfaWQoJmluZm8tPmhhcmR3YXJlX2lkLAorCQkJCQkJCWhpZCwgbmV4dF9pZF9zdHJpbmcpOwogCi0JcmV0dXJuX2luZm8gPSBidWZmZXItPnBvaW50ZXI7Ci0JQUNQSV9NRU1DUFkocmV0dXJuX2luZm8sIGluZm8sIHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbykpOworCQlpZiAoYWNwaV91dF9pc19wY2lfcm9vdF9icmlkZ2UoaGlkLT5zdHJpbmcpKSB7CisJCQlpbmZvLT5mbGFncyB8PSBBQ1BJX1BDSV9ST09UX0JSSURHRTsKKwkJfQorCX0KKworCWlmICh1aWQpIHsKKwkJbmV4dF9pZF9zdHJpbmcgPSBhY3BpX25zX2NvcHlfZGV2aWNlX2lkKCZpbmZvLT51bmlxdWVfaWQsCisJCQkJCQkJdWlkLCBuZXh0X2lkX3N0cmluZyk7CisJfQogCiAJaWYgKGNpZF9saXN0KSB7Ci0JCUFDUElfTUVNQ1BZKCZyZXR1cm5faW5mby0+Y29tcGF0aWJpbGl0eV9pZCwgY2lkX2xpc3QsCi0JCQkgICAgY2lkX2xpc3QtPnNpemUpOworCQlpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuY291bnQgPSBjaWRfbGlzdC0+Y291bnQ7CisJCWluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemUgPSBjaWRfbGlzdC0+bGlzdF9zaXplOworCisJCS8qIENvcHkgZWFjaCBDSUQgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspIHsKKwkJCW5leHRfaWRfc3RyaW5nID0KKwkJCSAgICBhY3BpX25zX2NvcHlfZGV2aWNlX2lkKCZpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuCisJCQkJCQkgICBpZHNbaV0sICZjaWRfbGlzdC0+aWRzW2ldLAorCQkJCQkJICAgbmV4dF9pZF9zdHJpbmcpOworCisJCQlpZiAoYWNwaV91dF9pc19wY2lfcm9vdF9icmlkZ2UoY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpKSB7CisJCQkJaW5mby0+ZmxhZ3MgfD0gQUNQSV9QQ0lfUk9PVF9CUklER0U7CisJCQl9CisJCX0KIAl9CiAKKwkvKiBDb3B5IHRoZSBmaXhlZC1sZW5ndGggZGF0YSAqLworCisJaW5mby0+aW5mb19zaXplID0gaW5mb19zaXplOworCWluZm8tPnR5cGUgPSB0eXBlOworCWluZm8tPm5hbWUgPSBuYW1lOworCWluZm8tPnBhcmFtX2NvdW50ID0gcGFyYW1fY291bnQ7CisJaW5mby0+dmFsaWQgPSB2YWxpZDsKKworCSpyZXR1cm5fYnVmZmVyID0gaW5mbzsKKwlzdGF0dXMgPSBBRV9PSzsKKwogICAgICAgY2xlYW51cDoKLQlBQ1BJX0ZSRUUoaW5mbyk7CisJaWYgKGhpZCkgeworCQlBQ1BJX0ZSRUUoaGlkKTsKKwl9CisJaWYgKHVpZCkgeworCQlBQ1BJX0ZSRUUodWlkKTsKKwl9CiAJaWYgKGNpZF9saXN0KSB7CiAJCUFDUElfRlJFRShjaWRfbGlzdCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc2xvb3AuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMKaW5kZXggYzVmNmNlMS4uY2Q3OTk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc2xvb3AuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jCkBAIC04Niw2ICs4Niw5IEBACiBhY3BpX3BzX2NvbXBsZXRlX2ZpbmFsX29wKHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUsCiAJCQkgIHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcCwgYWNwaV9zdGF0dXMgc3RhdHVzKTsKIAorc3RhdGljIHZvaWQKK2FjcGlfcHNfbGlua19tb2R1bGVfY29kZSh1OCAqYW1sX3N0YXJ0LCB1MzIgYW1sX2xlbmd0aCwgYWNwaV9vd25lcl9pZCBvd25lcl9pZCk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfcHNfZ2V0X2FtbF9vcGNvZGUKQEAgLTM5MCw2ICszOTMsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICphcmcgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBhY3BpX29wY29kZV9pbmZvICpvcF9pbmZvOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIocHNfZ2V0X2FyZ3VtZW50cywgd2Fsa19zdGF0ZSk7CiAKQEAgLTQ0OSwxMyArNDUzLDExIEBACiAJCQlJTkNSRU1FTlRfQVJHX0xJU1Qod2Fsa19zdGF0ZS0+YXJnX3R5cGVzKTsKIAkJfQogCi0JCS8qIFNwZWNpYWwgcHJvY2Vzc2luZyBmb3IgY2VydGFpbiBvcGNvZGVzICovCi0KLQkJLyogVEJEIChyZW1vdmUpOiBUZW1wb3JhcnkgbWVjaGFuaXNtIHRvIGRpc2FibGUgdGhpcyBjb2RlIGlmIG5lZWRlZCAqLwotCi0jaWZkZWYgQUNQSV9FTkFCTEVfTU9EVUxFX0xFVkVMX0NPREUKLQotCQlpZiAoKHdhbGtfc3RhdGUtPnBhc3NfbnVtYmVyIDw9IEFDUElfSU1PREVfTE9BRF9QQVNTMSkgJiYKKwkJLyoKKwkJICogSGFuZGxlIGV4ZWN1dGFibGUgY29kZSBhdCAibW9kdWxlLWxldmVsIi4gVGhpcyByZWZlcnMgdG8KKwkJICogZXhlY3V0YWJsZSBvcGNvZGVzIHRoYXQgYXBwZWFyIG91dHNpZGUgb2YgYW55IGNvbnRyb2wgbWV0aG9kLgorCQkgKi8KKwkJaWYgKCh3YWxrX3N0YXRlLT5wYXNzX251bWJlciA8PSBBQ1BJX0lNT0RFX0xPQURfUEFTUzIpICYmCiAJCSAgICAoKHdhbGtfc3RhdGUtPnBhcnNlX2ZsYWdzICYgQUNQSV9QQVJTRV9ESVNBU1NFTUJMRSkgPT0gMCkpIHsKIAkJCS8qCiAJCQkgKiBXZSB3YW50IHRvIHNraXAgSWYvRWxzZS9XaGlsZSBjb25zdHJ1Y3RzIGR1cmluZyBQYXNzMSBiZWNhdXNlIHdlCkBAIC00NjksNiArNDcxLDIzIEBACiAJCQljYXNlIEFNTF9FTFNFX09QOgogCQkJY2FzZSBBTUxfV0hJTEVfT1A6CiAKKwkJCQkvKgorCQkJCSAqIEN1cnJlbnRseSBzdXBwb3J0ZWQgbW9kdWxlLWxldmVsIG9wY29kZXMgYXJlOgorCQkJCSAqIElGL0VMU0UvV0hJTEUuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgbW9zdCBjb21tb24sCisJCQkJICogYW5kIGVhc2llc3QgdG8gc3VwcG9ydCBzaW5jZSB0aGV5IG9wZW4gYW4gQU1MCisJCQkJICogcGFja2FnZS4KKwkJCQkgKi8KKwkJCQlpZiAod2Fsa19zdGF0ZS0+cGFzc19udW1iZXIgPT0KKwkJCQkgICAgQUNQSV9JTU9ERV9MT0FEX1BBU1MxKSB7CisJCQkJCWFjcGlfcHNfbGlua19tb2R1bGVfY29kZShhbWxfb3Bfc3RhcnQsCisJCQkJCQkJCSB3YWxrX3N0YXRlLT4KKwkJCQkJCQkJIHBhcnNlcl9zdGF0ZS4KKwkJCQkJCQkJIHBrZ19lbmQgLQorCQkJCQkJCQkgYW1sX29wX3N0YXJ0LAorCQkJCQkJCQkgd2Fsa19zdGF0ZS0+CisJCQkJCQkJCSBvd25lcl9pZCk7CisJCQkJfQorCiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwKIAkJCQkJCSAgIlBhc3MxOiBTa2lwcGluZyBhbiBJZi9FbHNlL1doaWxlIGJvZHlcbiIpKTsKIApAQCAtNDgwLDEwICs0OTksMzQgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKKwkJCQkvKgorCQkJCSAqIENoZWNrIGZvciBhbiB1bnN1cHBvcnRlZCBleGVjdXRhYmxlIG9wY29kZSBhdCBtb2R1bGUKKwkJCQkgKiBsZXZlbC4gV2UgbXVzdCBiZSBpbiBQQVNTMSwgdGhlIHBhcmVudCBtdXN0IGJlIGEgU0NPUEUsCisJCQkJICogVGhlIG9wY29kZSBjbGFzcyBtdXN0IGJlIEVYRUNVVEUsIGFuZCB0aGUgb3Bjb2RlIG11c3QKKwkJCQkgKiBub3QgYmUgYW4gYXJndW1lbnQgdG8gYW5vdGhlciBvcGNvZGUuCisJCQkJICovCisJCQkJaWYgKCh3YWxrX3N0YXRlLT5wYXNzX251bWJlciA9PQorCQkJCSAgICAgQUNQSV9JTU9ERV9MT0FEX1BBU1MxKQorCQkJCSAgICAmJiAob3AtPmNvbW1vbi5wYXJlbnQtPmNvbW1vbi5hbWxfb3Bjb2RlID09CisJCQkJCUFNTF9TQ09QRV9PUCkpIHsKKwkJCQkJb3BfaW5mbyA9CisJCQkJCSAgICBhY3BpX3BzX2dldF9vcGNvZGVfaW5mbyhvcC0+Y29tbW9uLgorCQkJCQkJCQkgICAgYW1sX29wY29kZSk7CisJCQkJCWlmICgob3BfaW5mby0+Y2xhc3MgPT0KKwkJCQkJICAgICBBTUxfQ0xBU1NfRVhFQ1VURSkgJiYgKCFhcmcpKSB7CisJCQkJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCisJCQkJCQkJICAgICAgIkRldGVjdGVkIGFuIHVuc3VwcG9ydGVkIGV4ZWN1dGFibGUgb3Bjb2RlICIKKwkJCQkJCQkgICAgICAiYXQgbW9kdWxlLWxldmVsOiBbMHglLjRYXSBhdCB0YWJsZSBvZmZzZXQgMHglLjRYIiwKKwkJCQkJCQkgICAgICBvcC0+Y29tbW9uLmFtbF9vcGNvZGUsCisJCQkJCQkJICAgICAgKHUzMikoKGFtbF9vcF9zdGFydCAtIHdhbGtfc3RhdGUtPnBhcnNlcl9zdGF0ZS5hbWxfc3RhcnQpCisJCQkJCQkJCSsgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpKSk7CisJCQkJCX0KKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLSNlbmRpZgorCisJCS8qIFNwZWNpYWwgcHJvY2Vzc2luZyBmb3IgY2VydGFpbiBvcGNvZGVzICovCiAKIAkJc3dpdGNoIChvcC0+Y29tbW9uLmFtbF9vcGNvZGUpIHsKIAkJY2FzZSBBTUxfTUVUSE9EX09QOgpAQCAtNTUzLDYgKzU5Niw2NiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3BzX2xpbmtfbW9kdWxlX2NvZGUKKyAqCisgKiBQQVJBTUVURVJTOiAgYW1sX3N0YXJ0ICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIEFNTAorICogICAgICAgICAgICAgIGFtbF9sZW5ndGggICAgICAgICAgLSBMZW5ndGggb2YgZXhlY3V0YWJsZSBBTUwKKyAqICAgICAgICAgICAgICBvd25lcl9pZCAgICAgICAgICAgIC0gb3duZXJfaWQgb2YgbW9kdWxlIGxldmVsIGNvZGUKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZS4KKyAqCisgKiBERVNDUklQVElPTjogV3JhcCB0aGUgbW9kdWxlLWxldmVsIGNvZGUgd2l0aCBhIG1ldGhvZCBvYmplY3QgYW5kIGxpbmsgdGhlCisgKiAgICAgICAgICAgICAgb2JqZWN0IHRvIHRoZSBnbG9iYWwgbGlzdC4gTm90ZSwgdGhlIG11dGV4IGZpZWxkIG9mIHRoZSBtZXRob2QKKyAqICAgICAgICAgICAgICBvYmplY3QgaXMgdXNlZCB0byBsaW5rIG11bHRpcGxlIG1vZHVsZS1sZXZlbCBjb2RlIG9iamVjdHMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2FjcGlfcHNfbGlua19tb2R1bGVfY29kZSh1OCAqYW1sX3N0YXJ0LCB1MzIgYW1sX2xlbmd0aCwgYWNwaV9vd25lcl9pZCBvd25lcl9pZCkKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwcmV2OworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHQ7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX29iajsKKworCS8qIEdldCB0aGUgdGFpbCBvZiB0aGUgbGlzdCAqLworCisJcHJldiA9IG5leHQgPSBhY3BpX2dibF9tb2R1bGVfY29kZV9saXN0OworCXdoaWxlIChuZXh0KSB7CisJCXByZXYgPSBuZXh0OworCQluZXh0ID0gbmV4dC0+bWV0aG9kLm11dGV4OworCX0KKworCS8qCisJICogSW5zZXJ0IHRoZSBtb2R1bGUgbGV2ZWwgY29kZSBpbnRvIHRoZSBsaXN0LiBNZXJnZSBpdCBpZiBpdCBpcworCSAqIGFkamFjZW50IHRvIHRoZSBwcmV2aW91cyBlbGVtZW50LgorCSAqLworCWlmICghcHJldiB8fAorCSAgICAoKHByZXYtPm1ldGhvZC5hbWxfc3RhcnQgKyBwcmV2LT5tZXRob2QuYW1sX2xlbmd0aCkgIT0gYW1sX3N0YXJ0KSkgeworCisJCS8qIENyZWF0ZSwgaW5pdGlhbGl6ZSwgYW5kIGxpbmsgYSBuZXcgdGVtcG9yYXJ5IG1ldGhvZCBvYmplY3QgKi8KKworCQltZXRob2Rfb2JqID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9NRVRIT0QpOworCQlpZiAoIW1ldGhvZF9vYmopIHsKKwkJCXJldHVybjsKKwkJfQorCisJCW1ldGhvZF9vYmotPm1ldGhvZC5hbWxfc3RhcnQgPSBhbWxfc3RhcnQ7CisJCW1ldGhvZF9vYmotPm1ldGhvZC5hbWxfbGVuZ3RoID0gYW1sX2xlbmd0aDsKKwkJbWV0aG9kX29iai0+bWV0aG9kLm93bmVyX2lkID0gb3duZXJfaWQ7CisJCW1ldGhvZF9vYmotPm1ldGhvZC5mbGFncyB8PSBBT1BPQkpfTU9EVUxFX0xFVkVMOworCisJCWlmICghcHJldikgeworCQkJYWNwaV9nYmxfbW9kdWxlX2NvZGVfbGlzdCA9IG1ldGhvZF9vYmo7CisJCX0gZWxzZSB7CisJCQlwcmV2LT5tZXRob2QubXV0ZXggPSBtZXRob2Rfb2JqOworCQl9CisJfSBlbHNlIHsKKwkJcHJldi0+bWV0aG9kLmFtbF9sZW5ndGggKz0gYW1sX2xlbmd0aDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfcHNfY29tcGxldGVfb3AKICAqCiAgKiBQQVJBTUVURVJTOiAgd2Fsa19zdGF0ZSAgICAgICAgICAtIEN1cnJlbnQgc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKaW5kZXggZmYwNjAzMi4uZGQ5NzMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMKQEAgLTI4MCw2ICsyODAsMTAgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAorCWlmIChpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmZsYWdzICYgQU9QT0JKX01PRFVMRV9MRVZFTCkgeworCQl3YWxrX3N0YXRlLT5wYXJzZV9mbGFncyB8PSBBQ1BJX1BBUlNFX01PRFVMRV9MRVZFTDsKKwl9CisKIAkvKiBJbnZva2UgYW4gaW50ZXJuYWwgbWV0aG9kIGlmIG5lY2Vzc2FyeSAqLwogCiAJaWYgKGluZm8tPm9ial9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzICYgQU1MX01FVEhPRF9JTlRFUk5BTF9PTkxZKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYwppbmRleCA4MmIwMmRjLi5jMDE2MzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKQEAgLTI3NSw3ICsyNzUsNiBAQAogCiB2b2lkIGFjcGlfdGJfY3JlYXRlX2xvY2FsX2ZhZHQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSwgdTMyIGxlbmd0aCkKIHsKLQogCS8qCiAJICogQ2hlY2sgaWYgdGhlIEZBRFQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3QgdGFibGUgdGhhdCB3ZSBleHBlY3QKIAkgKiAodGhlIEFDUEkgMi4wLzMuMCB2ZXJzaW9uKS4gSWYgc28sIHRydW5jYXRlIHRoZSB0YWJsZSwgYW5kIGlzc3VlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jCmluZGV4IGVmN2QyYzIuLjFmMTU0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jCkBAIC00OSw2ICs0OSwxMiBAQAogQUNQSV9NT0RVTEVfTkFNRSgidGJ1dGlscyIpCiAKIC8qIExvY2FsIHByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGFjcGlfdGJfZml4X3N0cmluZyhjaGFyICpzdHJpbmcsIGFjcGlfc2l6ZSBsZW5ndGgpOworCitzdGF0aWMgdm9pZAorYWNwaV90Yl9jbGVhbnVwX3RhYmxlX2hlYWRlcihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKm91dF9oZWFkZXIsCisJCQkgICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyKTsKKwogc3RhdGljIGFjcGlfcGh5c2ljYWxfYWRkcmVzcwogYWNwaV90Yl9nZXRfcm9vdF90YWJsZV9lbnRyeSh1OCAqdGFibGVfZW50cnksIHUzMiB0YWJsZV9lbnRyeV9zaXplKTsKIApAQCAtMTYxLDYgKzE2Nyw1OSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX2ZpeF9zdHJpbmcKKyAqCisgKiBQQVJBTUVURVJTOiAgU3RyaW5nICAgICAgICAgICAgICAtIFN0cmluZyB0byBiZSByZXBhaXJlZAorICogICAgICAgICAgICAgIExlbmd0aCAgICAgICAgICAgICAgLSBNYXhpbXVtIGxlbmd0aAorICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IFJlcGxhY2UgZXZlcnkgbm9uLXByaW50YWJsZSBvciBub24tYXNjaWkgYnl0ZSBpbiB0aGUgc3RyaW5nCisgKiAgICAgICAgICAgICAgd2l0aCBhIHF1ZXN0aW9uIG1hcmsgJz8nLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGFjcGlfdGJfZml4X3N0cmluZyhjaGFyICpzdHJpbmcsIGFjcGlfc2l6ZSBsZW5ndGgpCit7CisKKwl3aGlsZSAobGVuZ3RoICYmICpzdHJpbmcpIHsKKwkJaWYgKCFBQ1BJX0lTX1BSSU5UKCpzdHJpbmcpKSB7CisJCQkqc3RyaW5nID0gJz8nOworCQl9CisJCXN0cmluZysrOworCQlsZW5ndGgtLTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdGJfY2xlYW51cF90YWJsZV9oZWFkZXIKKyAqCisgKiBQQVJBTUVURVJTOiAgb3V0X2hlYWRlciAgICAgICAgICAtIFdoZXJlIHRoZSBjbGVhbmVkIGhlYWRlciBpcyByZXR1cm5lZAorICogICAgICAgICAgICAgIEhlYWRlciAgICAgICAgICAgICAgLSBJbnB1dCBBQ1BJIHRhYmxlIGhlYWRlcgorICoKKyAqIFJFVFVSTjogICAgICBSZXR1cm5zIHRoZSBjbGVhbmVkIGhlYWRlciBpbiBvdXRfaGVhZGVyCisgKgorICogREVTQ1JJUFRJT046IENvcHkgdGhlIHRhYmxlIGhlYWRlciBhbmQgZW5zdXJlIHRoYXQgYWxsICJzdHJpbmciIGZpZWxkcyBpbgorICogICAgICAgICAgICAgIHRoZSBoZWFkZXIgY29uc2lzdCBvZiBwcmludGFibGUgY2hhcmFjdGVycy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorYWNwaV90Yl9jbGVhbnVwX3RhYmxlX2hlYWRlcihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKm91dF9oZWFkZXIsCisJCQkgICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyKQoreworCisJQUNQSV9NRU1DUFkob3V0X2hlYWRlciwgaGVhZGVyLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CisKKwlhY3BpX3RiX2ZpeF9zdHJpbmcob3V0X2hlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX05BTUVfU0laRSk7CisJYWNwaV90Yl9maXhfc3RyaW5nKG91dF9oZWFkZXItPm9lbV9pZCwgQUNQSV9PRU1fSURfU0laRSk7CisJYWNwaV90Yl9maXhfc3RyaW5nKG91dF9oZWFkZXItPm9lbV90YWJsZV9pZCwgQUNQSV9PRU1fVEFCTEVfSURfU0laRSk7CisJYWNwaV90Yl9maXhfc3RyaW5nKG91dF9oZWFkZXItPmFzbF9jb21waWxlcl9pZCwgQUNQSV9OQU1FX1NJWkUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX3ByaW50X3RhYmxlX2hlYWRlcgogICoKICAqIFBBUkFNRVRFUlM6ICBBZGRyZXNzICAgICAgICAgICAgIC0gVGFibGUgcGh5c2ljYWwgYWRkcmVzcwpAQCAtMTc2LDYgKzIzNSw3IEBACiBhY3BpX3RiX3ByaW50X3RhYmxlX2hlYWRlcihhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCSAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyKQogeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBsb2NhbF9oZWFkZXI7CiAKIAkvKgogCSAqIFRoZSByZWFzb24gdGhhdCB0aGUgQWRkcmVzcyBpcyBjYXN0IHRvIGEgdm9pZCBwb2ludGVyIGlzIHNvIHRoYXQgd2UKQEAgLTE5Miw2ICsyNTIsMTEgQEAKIAogCQkvKiBSU0RQIGhhcyBubyBjb21tb24gZmllbGRzICovCiAKKwkJQUNQSV9NRU1DUFkobG9jYWxfaGVhZGVyLm9lbV9pZCwKKwkJCSAgICBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAsCisJCQkJCSAgaGVhZGVyKS0+b2VtX2lkLCBBQ1BJX09FTV9JRF9TSVpFKTsKKwkJYWNwaV90Yl9maXhfc3RyaW5nKGxvY2FsX2hlYWRlci5vZW1faWQsIEFDUElfT0VNX0lEX1NJWkUpOworCiAJCUFDUElfSU5GTygoQUVfSU5GTywgIlJTRFAgJXAgJTA1WCAodiUuMmQgJTYuNnMpIiwKIAkJCSAgIEFDUElfQ0FTVF9QVFIgKHZvaWQsIGFkZHJlc3MpLAogCQkJICAgKEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfdGFibGVfcnNkcCwgaGVhZGVyKS0+CkBAIC0yMDAsMTggKzI2NSwyMSBAQAogCQkJCQkgICAgICAgaGVhZGVyKS0+bGVuZ3RoIDogMjAsCiAJCQkgICBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAsCiAJCQkJCSBoZWFkZXIpLT5yZXZpc2lvbiwKLQkJCSAgIEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfdGFibGVfcnNkcCwKLQkJCQkJIGhlYWRlciktPm9lbV9pZCkpOworCQkJICAgbG9jYWxfaGVhZGVyLm9lbV9pZCkpOwogCX0gZWxzZSB7CiAJCS8qIFN0YW5kYXJkIEFDUEkgdGFibGUgd2l0aCBmdWxsIGNvbW1vbiBoZWFkZXIgKi8KIAorCQlhY3BpX3RiX2NsZWFudXBfdGFibGVfaGVhZGVyKCZsb2NhbF9oZWFkZXIsIGhlYWRlcik7CisKIAkJQUNQSV9JTkZPKChBRV9JTkZPLAogCQkJICAgIiU0LjRzICVwICUwNVggKHYlLjJkICU2LjZzICU4LjhzICUwOFggJTQuNHMgJTA4WCkiLAotCQkJICAgaGVhZGVyLT5zaWduYXR1cmUsIEFDUElfQ0FTVF9QVFIgKHZvaWQsIGFkZHJlc3MpLAotCQkJICAgaGVhZGVyLT5sZW5ndGgsIGhlYWRlci0+cmV2aXNpb24sIGhlYWRlci0+b2VtX2lkLAotCQkJICAgaGVhZGVyLT5vZW1fdGFibGVfaWQsIGhlYWRlci0+b2VtX3JldmlzaW9uLAotCQkJICAgaGVhZGVyLT5hc2xfY29tcGlsZXJfaWQsCi0JCQkgICBoZWFkZXItPmFzbF9jb21waWxlcl9yZXZpc2lvbikpOworCQkJICAgbG9jYWxfaGVhZGVyLnNpZ25hdHVyZSwgQUNQSV9DQVNUX1BUUih2b2lkLCBhZGRyZXNzKSwKKwkJCSAgIGxvY2FsX2hlYWRlci5sZW5ndGgsIGxvY2FsX2hlYWRlci5yZXZpc2lvbiwKKwkJCSAgIGxvY2FsX2hlYWRlci5vZW1faWQsIGxvY2FsX2hlYWRlci5vZW1fdGFibGVfaWQsCisJCQkgICBsb2NhbF9oZWFkZXIub2VtX3JldmlzaW9uLAorCQkJICAgbG9jYWxfaGVhZGVyLmFzbF9jb21waWxlcl9pZCwKKwkJCSAgIGxvY2FsX2hlYWRlci5hc2xfY29tcGlsZXJfcmV2aXNpb24pKTsKKwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCmluZGV4IGJjMTcxMDMuLjk2ZTI2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKQEAgLTIxNSw2ICsyMTUsMTIgQEAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywKIAkJCQkgICIqKioqKiBSZWdpb24gJXBcbiIsIG9iamVjdCkpOwogCisJCS8qIEludmFsaWRhdGUgdGhlIHJlZ2lvbiBhZGRyZXNzL2xlbmd0aCB2aWEgdGhlIGhvc3QgT1MgKi8KKworCQlhY3BpX29zX2ludmFsaWRhdGVfYWRkcmVzcyhvYmplY3QtPnJlZ2lvbi5zcGFjZV9pZCwKKwkJCQkJICBvYmplY3QtPnJlZ2lvbi5hZGRyZXNzLAorCQkJCQkgIChhY3BpX3NpemUpIG9iamVjdC0+cmVnaW9uLmxlbmd0aCk7CisKIAkJc2Vjb25kX2Rlc2MgPSBhY3BpX25zX2dldF9zZWNvbmRhcnlfb2JqZWN0KG9iamVjdCk7CiAJCWlmIChzZWNvbmRfZGVzYykgewogCQkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCmluZGV4IDAwNmIxNmMuLjVkNTRlMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYwpAQCAtNDQsMTkgKzQ0LDEwIEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSAiYWNjb21tb24uaCIKICNpbmNsdWRlICJhY25hbWVzcC5oIgotI2luY2x1ZGUgImFjaW50ZXJwLmgiCiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwogQUNQSV9NT0RVTEVfTkFNRSgidXRldmFsIikKIAotLyogTG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQKLWFjcGlfdXRfY29weV9pZF9zdHJpbmcoY2hhciAqZGVzdGluYXRpb24sIGNoYXIgKnNvdXJjZSwgYWNwaV9zaXplIG1heF9sZW5ndGgpOwotCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfdXRfdHJhbnNsYXRlX29uZV9jaWQodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCQkgIHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWQgKm9uZV9jaWQpOwotCiAvKgogICogU3RyaW5ncyBzdXBwb3J0ZWQgYnkgdGhlIF9PU0kgcHJlZGVmaW5lZCAoaW50ZXJuYWwpIG1ldGhvZC4KICAqCkBAIC03OCw2ICs2OSw5IEBACiAJeyJXaW5kb3dzIDIwMDEgU1AyIiwgQUNQSV9PU0lfV0lOX1hQX1NQMn0sCS8qIFdpbmRvd3MgWFAgU1AyICovCiAJeyJXaW5kb3dzIDIwMDEuMSBTUDEiLCBBQ1BJX09TSV9XSU5TUlZfMjAwM19TUDF9LAkvKiBXaW5kb3dzIFNlcnZlciAyMDAzIFNQMSAtIEFkZGVkIDAzLzIwMDYgKi8KIAl7IldpbmRvd3MgMjAwNiIsIEFDUElfT1NJX1dJTl9WSVNUQX0sCS8qIFdpbmRvd3MgVmlzdGEgLSBBZGRlZCAwMy8yMDA2ICovCisJeyJXaW5kb3dzIDIwMDYuMSIsIEFDUElfT1NJX1dJTlNSVl8yMDA4fSwJLyogV2luZG93cyBTZXJ2ZXIgMjAwOCAtIEFkZGVkIDA5LzIwMDkgKi8KKwl7IldpbmRvd3MgMjAwNiBTUDEiLCBBQ1BJX09TSV9XSU5fVklTVEFfU1AxfSwJLyogV2luZG93cyBWaXN0YSBTUDEgLSBBZGRlZCAwOS8yMDA5ICovCisJeyJXaW5kb3dzIDIwMDkiLCBBQ1BJX09TSV9XSU5fN30sCS8qIFdpbmRvd3MgNyBhbmQgU2VydmVyIDIwMDggUjIgLSBBZGRlZCAwOS8yMDA5ICovCiAKIAkvKiBGZWF0dXJlIEdyb3VwIFN0cmluZ3MgKi8KIApAQCAtMjEzLDcgKzIwNyw3IEBACiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IEV2YWx1YXRlcyBhIG5hbWVzcGFjZSBvYmplY3QgYW5kIHZlcmlmaWVzIHRoZSB0eXBlIG9mIHRoZQotICogICAgICAgICAgICAgIHJldHVybiBvYmplY3QuICBDb21tb24gY29kZSB0aGF0IHNpbXBsaWZpZXMgYWNjZXNzaW5nIG9iamVjdHMKKyAqICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LiBDb21tb24gY29kZSB0aGF0IHNpbXBsaWZpZXMgYWNjZXNzaW5nIG9iamVjdHMKICAqICAgICAgICAgICAgICB0aGF0IGhhdmUgcmVxdWlyZWQgcmV0dXJuIG9iamVjdHMgb2YgZml4ZWQgdHlwZXMuCiAgKgogICogICAgICAgICAgICAgIE5PVEU6IEludGVybmFsIGZ1bmN0aW9uLCBubyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgpAQCAtMjk4LDcgKzI5Miw3IEBACiAKIAlpZiAoKGFjcGlfZ2JsX2VuYWJsZV9pbnRlcnByZXRlcl9zbGFjaykgJiYgKCFleHBlY3RlZF9yZXR1cm5fYnR5cGVzKSkgewogCQkvKgotCQkgKiBXZSByZWNlaXZlZCBhIHJldHVybiBvYmplY3QsIGJ1dCBvbmUgd2FzIG5vdCBleHBlY3RlZC4gIFRoaXMgY2FuCisJCSAqIFdlIHJlY2VpdmVkIGEgcmV0dXJuIG9iamVjdCwgYnV0IG9uZSB3YXMgbm90IGV4cGVjdGVkLiBUaGlzIGNhbgogCQkgKiBoYXBwZW4gZnJlcXVlbnRseSBpZiB0aGUgImltcGxpY2l0IHJldHVybiIgZmVhdHVyZSBpcyBlbmFibGVkLgogCQkgKiBKdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCBhbmQgcmV0dXJuIEFFX09LLgogCQkgKi8KQEAgLTM0MCwxMiArMzM0LDEyIEBACiAgKgogICogUEFSQU1FVEVSUzogIG9iamVjdF9uYW1lICAgICAgICAgLSBPYmplY3QgbmFtZSB0byBiZSBldmFsdWF0ZWQKICAqICAgICAgICAgICAgICBkZXZpY2Vfbm9kZSAgICAgICAgIC0gTm9kZSBmb3IgdGhlIGRldmljZQotICogICAgICAgICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgLSBXaGVyZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIC0gV2hlcmUgdGhlIHZhbHVlIGlzIHJldHVybmVkCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBFdmFsdWF0ZXMgYSBudW1lcmljIG5hbWVzcGFjZSBvYmplY3QgZm9yIGEgc2VsZWN0ZWQgZGV2aWNlCi0gKiAgICAgICAgICAgICAgYW5kIHN0b3JlcyByZXN1bHQgaW4gKkFkZHJlc3MuCisgKiAgICAgICAgICAgICAgYW5kIHN0b3JlcyByZXN1bHQgaW4gKlZhbHVlLgogICoKICAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KICAqCkBAIC0zNTQsNyArMzQ4LDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KGNoYXIgKm9iamVjdF9uYW1lLAogCQkJCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJCQlhY3BpX2ludGVnZXIgKiBhZGRyZXNzKQorCQkJCWFjcGlfaW50ZWdlciAqdmFsdWUpCiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtMzY5LDI5NSArMzYzLDcgQEAKIAogCS8qIEdldCB0aGUgcmV0dXJuZWQgSW50ZWdlciAqLwogCi0JKmFkZHJlc3MgPSBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZTsKLQotCS8qIE9uIGV4aXQsIHdlIG11c3QgZGVsZXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCi0KLQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uob2JqX2Rlc2MpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NvcHlfaWRfc3RyaW5nCi0gKgotICogUEFSQU1FVEVSUzogIERlc3RpbmF0aW9uICAgICAgICAgLSBXaGVyZSB0byBjb3B5IHRoZSBzdHJpbmcKLSAqICAgICAgICAgICAgICBTb3VyY2UgICAgICAgICAgICAgIC0gU291cmNlIHN0cmluZwotICogICAgICAgICAgICAgIG1heF9sZW5ndGggICAgICAgICAgLSBMZW5ndGggb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICoKLSAqIFJFVFVSTjogICAgICBOb25lCi0gKgotICogREVTQ1JJUFRJT046IENvcGllcyBhbiBJRCBzdHJpbmcgZm9yIHRoZSBfSElELCBfQ0lELCBhbmQgX1VJRCBtZXRob2RzLgotICogICAgICAgICAgICAgIFBlcmZvcm1zIHJlbW92YWwgb2YgYSBsZWFkaW5nIGFzdGVyaXNrIGlmIHByZXNlbnQgLS0gd29ya2Fyb3VuZAotICogICAgICAgICAgICAgIGZvciBhIGtub3duIGlzc3VlIG9uIGEgYnVuY2ggb2YgbWFjaGluZXMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLWFjcGlfdXRfY29weV9pZF9zdHJpbmcoY2hhciAqZGVzdGluYXRpb24sIGNoYXIgKnNvdXJjZSwgYWNwaV9zaXplIG1heF9sZW5ndGgpCi17Ci0KLQkvKgotCSAqIFdvcmthcm91bmQgZm9yIElEIHN0cmluZ3MgdGhhdCBoYXZlIGEgbGVhZGluZyBhc3Rlcmlzay4gVGhpcyBjb25zdHJ1Y3QKLQkgKiBpcyBub3QgYWxsb3dlZCBieSB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uICAoSUQgc3RyaW5ncyBtdXN0IGJlCi0JICogYWxwaGFudW1lcmljKSwgYnV0IGVub3VnaCBleGlzdGluZyBtYWNoaW5lcyBoYXZlIHRoaXMgZW1iZWRkZWQgaW4gdGhlaXIKLQkgKiBJRCBzdHJpbmdzIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlIGlzIHVzZWZ1bC4KLQkgKi8KLQlpZiAoKnNvdXJjZSA9PSAnKicpIHsKLQkJc291cmNlKys7Ci0JfQotCi0JLyogRG8gdGhlIGFjdHVhbCBjb3B5ICovCi0KLQlBQ1BJX1NUUk5DUFkoZGVzdGluYXRpb24sIHNvdXJjZSwgbWF4X2xlbmd0aCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9ISUQKLSAqCi0gKiBQQVJBTUVURVJTOiAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKLSAqICAgICAgICAgICAgICBIaWQgICAgICAgICAgICAgICAgIC0gV2hlcmUgdGhlIEhJRCBpcyByZXR1cm5lZAotICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKLSAqCi0gKiBERVNDUklQVElPTjogRXhlY3V0ZXMgdGhlIF9ISUQgY29udHJvbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBoYXJkd2FyZQotICogICAgICAgICAgICAgIElEIG9mIHRoZSBkZXZpY2UuCi0gKgotICogICAgICAgICAgICAgIE5PVEU6IEludGVybmFsIGZ1bmN0aW9uLCBubyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzCi1hY3BpX3V0X2V4ZWN1dGVfSElEKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICpoaWQpCi17Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX0hJRCk7Ci0KLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChkZXZpY2Vfbm9kZSwgTUVUSE9EX05BTUVfX0hJRCwKLQkJCQkJIEFDUElfQlRZUEVfSU5URUdFUiB8IEFDUElfQlRZUEVfU1RSSU5HLAotCQkJCQkgJm9ial9kZXNjKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewotCi0JCS8qIENvbnZlcnQgdGhlIE51bWVyaWMgSElEIHRvIHN0cmluZyAqLwotCi0JCWFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoKHUzMikgb2JqX2Rlc2MtPmludGVnZXIudmFsdWUsCi0JCQkJCSAgaGlkLT52YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJLyogQ29weSB0aGUgU3RyaW5nIEhJRCBmcm9tIHRoZSByZXR1cm5lZCBvYmplY3QgKi8KLQotCQlhY3BpX3V0X2NvcHlfaWRfc3RyaW5nKGhpZC0+dmFsdWUsIG9ial9kZXNjLT5zdHJpbmcucG9pbnRlciwKLQkJCQkgICAgICAgc2l6ZW9mKGhpZC0+dmFsdWUpKTsKLQl9Ci0KLQkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLwotCi0JYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF90cmFuc2xhdGVfb25lX2NpZAotICoKLSAqIFBBUkFNRVRFUlM6ICBvYmpfZGVzYyAgICAgICAgICAgIC0gX0NJRCBvYmplY3QsIG11c3QgYmUgaW50ZWdlciBvciBzdHJpbmcKLSAqICAgICAgICAgICAgICBvbmVfY2lkICAgICAgICAgICAgIC0gV2hlcmUgdGhlIENJRCBzdHJpbmcgaXMgcmV0dXJuZWQKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFJldHVybiBhIG51bWVyaWMgb3Igc3RyaW5nIF9DSUQgdmFsdWUgYXMgYSBzdHJpbmcuCi0gKiAgICAgICAgICAgICAgKENvbXBhdGlibGUgSUQpCi0gKgotICogICAgICAgICAgICAgIE5PVEU6ICBBc3N1bWVzIGEgbWF4aW11bSBfQ0lEIHN0cmluZyBsZW5ndGggb2YKLSAqICAgICAgICAgICAgICAgICAgICAgQUNQSV9NQVhfQ0lEX0xFTkdUSC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfdXRfdHJhbnNsYXRlX29uZV9jaWQodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCQkgIHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWQgKm9uZV9jaWQpCi17Ci0KLQlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewotCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6Ci0KLQkJLyogQ29udmVydCB0aGUgTnVtZXJpYyBDSUQgdG8gc3RyaW5nICovCi0KLQkJYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZygodTMyKSBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSwKLQkJCQkJICBvbmVfY2lkLT52YWx1ZSk7Ci0JCXJldHVybiAoQUVfT0spOwotCi0JY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgotCi0JCWlmIChvYmpfZGVzYy0+c3RyaW5nLmxlbmd0aCA+IEFDUElfTUFYX0NJRF9MRU5HVEgpIHsKLQkJCXJldHVybiAoQUVfQU1MX1NUUklOR19MSU1JVCk7Ci0JCX0KLQotCQkvKiBDb3B5IHRoZSBTdHJpbmcgQ0lEIGZyb20gdGhlIHJldHVybmVkIG9iamVjdCAqLwotCi0JCWFjcGlfdXRfY29weV9pZF9zdHJpbmcob25lX2NpZC0+dmFsdWUsIG9ial9kZXNjLT5zdHJpbmcucG9pbnRlciwKLQkJCQkgICAgICAgQUNQSV9NQVhfQ0lEX0xFTkdUSCk7Ci0JCXJldHVybiAoQUVfT0spOwotCi0JZGVmYXVsdDoKLQotCQlyZXR1cm4gKEFFX1RZUEUpOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV91dF9leGVjdXRlX0NJRAotICoKLSAqIFBBUkFNRVRFUlM6ICBkZXZpY2Vfbm9kZSAgICAgICAgIC0gTm9kZSBmb3IgdGhlIGRldmljZQotICogICAgICAgICAgICAgIHJldHVybl9jaWRfbGlzdCAgICAgLSBXaGVyZSB0aGUgQ0lEIGxpc3QgaXMgcmV0dXJuZWQKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IEV4ZWN1dGVzIHRoZSBfQ0lEIGNvbnRyb2wgbWV0aG9kIHRoYXQgcmV0dXJucyBvbmUgb3IgbW9yZQotICogICAgICAgICAgICAgIGNvbXBhdGlibGUgaGFyZHdhcmUgSURzIGZvciB0aGUgZGV2aWNlLgotICoKLSAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cwotYWNwaV91dF9leGVjdXRlX0NJRChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqIGRldmljZV9ub2RlLAotCQkgICAgc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICoqIHJldHVybl9jaWRfbGlzdCkKLXsKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIGNvdW50OwotCXUzMiBzaXplOwotCXN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqY2lkX2xpc3Q7Ci0JdTMyIGk7Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfQ0lEKTsKLQotCS8qIEV2YWx1YXRlIHRoZSBfQ0lEIG1ldGhvZCBmb3IgdGhpcyBkZXZpY2UgKi8KLQotCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KGRldmljZV9ub2RlLCBNRVRIT0RfTkFNRV9fQ0lELAotCQkJCQkgQUNQSV9CVFlQRV9JTlRFR0VSIHwgQUNQSV9CVFlQRV9TVFJJTkcKLQkJCQkJIHwgQUNQSV9CVFlQRV9QQUNLQUdFLCAmb2JqX2Rlc2MpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBHZXQgdGhlIG51bWJlciBvZiBfQ0lEcyByZXR1cm5lZCAqLwotCi0JY291bnQgPSAxOwotCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJY291bnQgPSBvYmpfZGVzYy0+cGFja2FnZS5jb3VudDsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBhIHdvcnN0LWNhc2UgYnVmZmVyIGZvciB0aGUgX0NJRHMgKi8KLQotCXNpemUgPSAoKChjb3VudCAtIDEpICogc2l6ZW9mKHN0cnVjdCBhY3BpX2NvbXBhdGlibGVfaWQpKSArCi0JCXNpemVvZihzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QpKTsKLQotCWNpZF9saXN0ID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKGFjcGlfc2l6ZSkgc2l6ZSk7Ci0JaWYgKCFjaWRfbGlzdCkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKLQl9Ci0KLQkvKiBJbml0IENJRCBsaXN0ICovCi0KLQljaWRfbGlzdC0+Y291bnQgPSBjb3VudDsKLQljaWRfbGlzdC0+c2l6ZSA9IHNpemU7Ci0KLQkvKgotCSAqICBBIF9DSUQgY2FuIHJldHVybiBlaXRoZXIgYSBzaW5nbGUgY29tcGF0aWJsZSBJRCBvciBhIHBhY2thZ2Ugb2YKLQkgKiAgY29tcGF0aWJsZSBJRHMuICBFYWNoIGNvbXBhdGlibGUgSUQgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCSAqICAxKSBJbnRlZ2VyICgzMiBiaXQgY29tcHJlc3NlZCBFSVNBIElEKSBvcgotCSAqICAyKSBTdHJpbmcgKFBDSSBJRCBmb3JtYXQsIGUuZy4gIlBDSVxWRU5fdnZ2diZERVZfZGRkZCZTVUJTWVNfc3Nzc3Nzc3MiKQotCSAqLwotCi0JLyogVGhlIF9DSUQgb2JqZWN0IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgQ0lEIG9yIGEgcGFja2FnZSAobGlzdCkgb2YgQ0lEcyAqLwotCi0JaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewotCi0JCS8qIFRyYW5zbGF0ZSBlYWNoIHBhY2thZ2UgZWxlbWVudCAqLwotCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCQlzdGF0dXMgPQotCQkJICAgIGFjcGlfdXRfdHJhbnNsYXRlX29uZV9jaWQob2JqX2Rlc2MtPnBhY2thZ2UuCi0JCQkJCQkgICAgICBlbGVtZW50c1tpXSwKLQkJCQkJCSAgICAgICZjaWRfbGlzdC0+aWRbaV0pOwotCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBPbmx5IG9uZSBDSUQsIHRyYW5zbGF0ZSB0byBhIHN0cmluZyAqLwotCi0JCXN0YXR1cyA9IGFjcGlfdXRfdHJhbnNsYXRlX29uZV9jaWQob2JqX2Rlc2MsIGNpZF9saXN0LT5pZCk7Ci0JfQotCi0JLyogQ2xlYW51cCBvbiBlcnJvciAqLwotCi0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRlJFRShjaWRfbGlzdCk7Ci0JfSBlbHNlIHsKLQkJKnJldHVybl9jaWRfbGlzdCA9IGNpZF9saXN0OwotCX0KLQotCS8qIE9uIGV4aXQsIHdlIG11c3QgZGVsZXRlIHRoZSBfQ0lEIHJldHVybiBvYmplY3QgKi8KLQotCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShvYmpfZGVzYyk7Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9VSUQKLSAqCi0gKiBQQVJBTUVURVJTOiAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKLSAqICAgICAgICAgICAgICBVaWQgICAgICAgICAgICAgICAgIC0gV2hlcmUgdGhlIFVJRCBpcyByZXR1cm5lZAotICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKLSAqCi0gKiBERVNDUklQVElPTjogRXhlY3V0ZXMgdGhlIF9VSUQgY29udHJvbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBoYXJkd2FyZQotICogICAgICAgICAgICAgIElEIG9mIHRoZSBkZXZpY2UuCi0gKgotICogICAgICAgICAgICAgIE5PVEU6IEludGVybmFsIGZ1bmN0aW9uLCBubyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzCi1hY3BpX3V0X2V4ZWN1dGVfVUlEKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJICAgIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkICp1aWQpCi17Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX1VJRCk7Ci0KLQlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChkZXZpY2Vfbm9kZSwgTUVUSE9EX05BTUVfX1VJRCwKLQkJCQkJIEFDUElfQlRZUEVfSU5URUdFUiB8IEFDUElfQlRZUEVfU1RSSU5HLAotCQkJCQkgJm9ial9kZXNjKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewotCi0JCS8qIENvbnZlcnQgdGhlIE51bWVyaWMgVUlEIHRvIHN0cmluZyAqLwotCi0JCWFjcGlfZXhfdW5zaWduZWRfaW50ZWdlcl90b19zdHJpbmcob2JqX2Rlc2MtPmludGVnZXIudmFsdWUsCi0JCQkJCQkgICB1aWQtPnZhbHVlKTsKLQl9IGVsc2UgewotCQkvKiBDb3B5IHRoZSBTdHJpbmcgVUlEIGZyb20gdGhlIHJldHVybmVkIG9iamVjdCAqLwotCi0JCWFjcGlfdXRfY29weV9pZF9zdHJpbmcodWlkLT52YWx1ZSwgb2JqX2Rlc2MtPnN0cmluZy5wb2ludGVyLAotCQkJCSAgICAgICBzaXplb2YodWlkLT52YWx1ZSkpOwotCX0KKwkqdmFsdWUgPSBvYmpfZGVzYy0+aW50ZWdlci52YWx1ZTsKIAogCS8qIE9uIGV4aXQsIHdlIG11c3QgZGVsZXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCiAKQEAgLTcxNiw2MCArNDIyLDY0IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9TeGRzCisgKiBGVU5DVElPTjogICAgYWNwaV91dF9leGVjdXRlX3Bvd2VyX21ldGhvZHMKICAqCiAgKiBQQVJBTUVURVJTOiAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgICAgIC0gV2hlcmUgdGhlIHN0YXR1cyBmbGFncyBhcmUgcmV0dXJuZWQKKyAqICAgICAgICAgICAgICBtZXRob2RfbmFtZXMgICAgICAgIC0gQXJyYXkgb2YgcG93ZXIgbWV0aG9kIG5hbWVzCisgKiAgICAgICAgICAgICAgbWV0aG9kX2NvdW50ICAgICAgICAtIE51bWJlciBvZiBtZXRob2RzIHRvIGV4ZWN1dGUKKyAqICAgICAgICAgICAgICBvdXRfdmFsdWVzICAgICAgICAgIC0gV2hlcmUgdGhlIHBvd2VyIG1ldGhvZCB2YWx1ZXMgYXJlIHJldHVybmVkCiAgKgotICogUkVUVVJOOiAgICAgIFN0YXR1cworICogUkVUVVJOOiAgICAgIFN0YXR1cywgb3V0X3ZhbHVlcwogICoKLSAqIERFU0NSSVBUSU9OOiBFeGVjdXRlcyBfU1RBIGZvciBzZWxlY3RlZCBkZXZpY2UgYW5kIHN0b3JlcyByZXN1bHRzIGluCi0gKiAgICAgICAgICAgICAgKkZsYWdzLgorICogREVTQ1JJUFRJT046IEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgcG93ZXIgbWV0aG9kcyBmb3IgdGhlIGRldmljZSBhbmQgcmV0dXJucworICogICAgICAgICAgICAgIHRoZSByZXN1bHQocykuCiAgKgogICogICAgICAgICAgICAgIE5PVEU6IEludGVybmFsIGZ1bmN0aW9uLCBubyBwYXJhbWV0ZXIgdmFsaWRhdGlvbgogICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX3V0X2V4ZWN1dGVfc3hkcyhzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsIHU4ICogaGlnaGVzdCkKK2FjcGlfdXRfZXhlY3V0ZV9wb3dlcl9tZXRob2RzKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKiptZXRob2RfbmFtZXMsCisJCQkgICAgICB1OCBtZXRob2RfY291bnQsIHU4ICpvdXRfdmFsdWVzKQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX3N0YXR1cyBmaW5hbF9zdGF0dXMgPSBBRV9OT1RfRk9VTkQ7CiAJdTMyIGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2V4ZWN1dGVfc3hkcyk7CisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX3Bvd2VyX21ldGhvZHMpOwogCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQloaWdoZXN0W2ldID0gMHhGRjsKKwlmb3IgKGkgPSAwOyBpIDwgbWV0aG9kX2NvdW50OyBpKyspIHsKKwkJLyoKKwkJICogRXhlY3V0ZSB0aGUgcG93ZXIgbWV0aG9kIChfc3hfZCBvciBfc3hfdykuIFRoZSBvbmx5IGFsbG93YWJsZQorCQkgKiByZXR1cm4gdHlwZSBpcyBhbiBJbnRlZ2VyLgorCQkgKi8KIAkJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsCiAJCQkJCQkgQUNQSV9DQVNUX1BUUihjaGFyLAotCQkJCQkJCSAgICAgICBhY3BpX2dibF9oaWdoZXN0X2RzdGF0ZV9uYW1lcwotCQkJCQkJCSAgICAgICBbaV0pLAorCQkJCQkJCSAgICAgICBtZXRob2RfbmFtZXNbaV0pLAogCQkJCQkJIEFDUElfQlRZUEVfSU5URUdFUiwgJm9ial9kZXNjKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlpZiAoc3RhdHVzICE9IEFFX05PVF9GT1VORCkgewotCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCQkJCSAgIiVzIG9uIERldmljZSAlNC40cywgJXNcbiIsCi0JCQkJCQkgIEFDUElfQ0FTVF9QVFIoY2hhciwKLQkJCQkJCQkJYWNwaV9nYmxfaGlnaGVzdF9kc3RhdGVfbmFtZXMKLQkJCQkJCQkJW2ldKSwKLQkJCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lCi0JCQkJCQkgIChkZXZpY2Vfbm9kZSksCi0JCQkJCQkgIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbgotCQkJCQkJICAoc3RhdHVzKSkpOwotCi0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBFeHRyYWN0IHRoZSBEc3RhdGUgdmFsdWUgKi8KLQotCQkJaGlnaGVzdFtpXSA9ICh1OCkgb2JqX2Rlc2MtPmludGVnZXIudmFsdWU7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJb3V0X3ZhbHVlc1tpXSA9ICh1OClvYmpfZGVzYy0+aW50ZWdlci52YWx1ZTsKIAogCQkJLyogRGVsZXRlIHRoZSByZXR1cm4gb2JqZWN0ICovCiAKIAkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShvYmpfZGVzYyk7CisJCQlmaW5hbF9zdGF0dXMgPSBBRV9PSzsJLyogQXQgbGVhc3Qgb25lIHZhbHVlIGlzIHZhbGlkICovCisJCQljb250aW51ZTsKIAkJfQorCisJCW91dF92YWx1ZXNbaV0gPSBBQ1BJX1VJTlQ4X01BWDsKKwkJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpIHsKKwkJCWNvbnRpbnVlOwkvKiBJZ25vcmUgaWYgbm90IGZvdW5kICovCisJCX0KKworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCisJCQkJICAiRmFpbGVkICVzIG9uIERldmljZSAlNC40cywgJXNcbiIsCisJCQkJICBBQ1BJX0NBU1RfUFRSKGNoYXIsIG1ldGhvZF9uYW1lc1tpXSksCisJCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUoZGV2aWNlX25vZGUpLAorCQkJCSAgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpKTsKIAl9CiAKLQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCXJldHVybl9BQ1BJX1NUQVRVUyhmaW5hbF9zdGF0dXMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCmluZGV4IDU5ZTQ2ZjIuLjNmMmM2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKQEAgLTkwLDcgKzkwLDE1IEBACiAJIlxcX1M1XyIKIH07CiAKLWNvbnN0IGNoYXIgKmFjcGlfZ2JsX2hpZ2hlc3RfZHN0YXRlX25hbWVzWzRdID0geworY29uc3QgY2hhciAqYWNwaV9nYmxfbG93ZXN0X2RzdGF0ZV9uYW1lc1tBQ1BJX05VTV9zeF93X01FVEhPRFNdID0geworCSJfUzBXIiwKKwkiX1MxVyIsCisJIl9TMlciLAorCSJfUzNXIiwKKwkiX1M0VyIKK307CisKK2NvbnN0IGNoYXIgKmFjcGlfZ2JsX2hpZ2hlc3RfZHN0YXRlX25hbWVzW0FDUElfTlVNX3N4X2RfTUVUSE9EU10gPSB7CiAJIl9TMUQiLAogCSJfUzJEIiwKIAkiX1MzRCIsCkBAIC0zNTEsNiArMzU5LDcgQEAKIAkiU01CdXMiLAogCSJTeXN0ZW1DTU9TIiwKIAkiUENJQkFSVGFyZ2V0IiwKKwkiSVBNSSIsCiAJIkRhdGFUYWJsZSIKIH07CiAKQEAgLTc5OCw2ICs4MDcsNyBAQAogCiAJLyogTmFtZXNwYWNlICovCiAKKwlhY3BpX2dibF9tb2R1bGVfY29kZV9saXN0ID0gTlVMTDsKIAlhY3BpX2dibF9yb290X25vZGUgPSBOVUxMOwogCWFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3QubmFtZS5pbnRlZ2VyID0gQUNQSV9ST09UX05BTUU7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5kZXNjcmlwdG9yX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9OQU1FRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVhYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGlkcy5jCkBAIC0wLDAgKzEsMzgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kdWxlIE5hbWU6IHV0aWRzIC0gc3VwcG9ydCBmb3IgZGV2aWNlIElEcyAtIEhJRCwgVUlELCBDSUQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA5LCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKyNpbmNsdWRlICJhY2NvbW1vbi5oIgorI2luY2x1ZGUgImFjaW50ZXJwLmgiCisKKyNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUworQUNQSV9NT0RVTEVfTkFNRSgidXRpZHMiKQorCisvKiBMb2NhbCBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBhY3BpX3V0X2NvcHlfaWRfc3RyaW5nKGNoYXIgKmRlc3RpbmF0aW9uLCBjaGFyICpzb3VyY2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NvcHlfaWRfc3RyaW5nCisgKgorICogUEFSQU1FVEVSUzogIERlc3RpbmF0aW9uICAgICAgICAgLSBXaGVyZSB0byBjb3B5IHRoZSBzdHJpbmcKKyAqICAgICAgICAgICAgICBTb3VyY2UgICAgICAgICAgICAgIC0gU291cmNlIHN0cmluZworICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IENvcGllcyBhbiBJRCBzdHJpbmcgZm9yIHRoZSBfSElELCBfQ0lELCBhbmQgX1VJRCBtZXRob2RzLgorICogICAgICAgICAgICAgIFBlcmZvcm1zIHJlbW92YWwgb2YgYSBsZWFkaW5nIGFzdGVyaXNrIGlmIHByZXNlbnQgLS0gd29ya2Fyb3VuZAorICogICAgICAgICAgICAgIGZvciBhIGtub3duIGlzc3VlIG9uIGEgYnVuY2ggb2YgbWFjaGluZXMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgYWNwaV91dF9jb3B5X2lkX3N0cmluZyhjaGFyICpkZXN0aW5hdGlvbiwgY2hhciAqc291cmNlKQoreworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBJRCBzdHJpbmdzIHRoYXQgaGF2ZSBhIGxlYWRpbmcgYXN0ZXJpc2suIFRoaXMgY29uc3RydWN0CisJICogaXMgbm90IGFsbG93ZWQgYnkgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiAgKElEIHN0cmluZ3MgbXVzdCBiZQorCSAqIGFscGhhbnVtZXJpYyksIGJ1dCBlbm91Z2ggZXhpc3RpbmcgbWFjaGluZXMgaGF2ZSB0aGlzIGVtYmVkZGVkIGluIHRoZWlyCisJICogSUQgc3RyaW5ncyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VmdWwuCisJICovCisJaWYgKCpzb3VyY2UgPT0gJyonKSB7CisJCXNvdXJjZSsrOworCX0KKworCS8qIERvIHRoZSBhY3R1YWwgY29weSAqLworCisJQUNQSV9TVFJDUFkoZGVzdGluYXRpb24sIHNvdXJjZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfZXhlY3V0ZV9ISUQKKyAqCisgKiBQQVJBTUVURVJTOiAgZGV2aWNlX25vZGUgICAgICAgICAtIE5vZGUgZm9yIHRoZSBkZXZpY2UKKyAqICAgICAgICAgICAgICByZXR1cm5faWQgICAgICAgICAgIC0gV2hlcmUgdGhlIHN0cmluZyBISUQgaXMgcmV0dXJuZWQKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IEV4ZWN1dGVzIHRoZSBfSElEIGNvbnRyb2wgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgaGFyZHdhcmUKKyAqICAgICAgICAgICAgICBJRCBvZiB0aGUgZGV2aWNlLiBUaGUgSElEIGlzIGVpdGhlciBhbiAzMi1iaXQgZW5jb2RlZCBFSVNBSUQKKyAqICAgICAgICAgICAgICBJbnRlZ2VyIG9yIGEgU3RyaW5nLiBBIHN0cmluZyBpcyBhbHdheXMgcmV0dXJuZWQuIEFuIEVJU0FJRAorICogICAgICAgICAgICAgIGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZy4KKyAqCisgKiAgICAgICAgICAgICAgTk9URTogSW50ZXJuYWwgZnVuY3Rpb24sIG5vIHBhcmFtZXRlciB2YWxpZGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfZXhlY3V0ZV9ISUQoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLAorCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKipyZXR1cm5faWQpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgKmhpZDsKKwl1MzIgbGVuZ3RoOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfZXhlY3V0ZV9ISUQpOworCisJc3RhdHVzID0gYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlX25vZGUsIE1FVEhPRF9OQU1FX19ISUQsCisJCQkJCSBBQ1BJX0JUWVBFX0lOVEVHRVIgfCBBQ1BJX0JUWVBFX1NUUklORywKKwkJCQkJICZvYmpfZGVzYyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCS8qIEdldCB0aGUgc2l6ZSBvZiB0aGUgU3RyaW5nIHRvIGJlIHJldHVybmVkLCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0b3IgKi8KKworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJbGVuZ3RoID0gQUNQSV9FSVNBSURfU1RSSU5HX1NJWkU7CisJfSBlbHNlIHsKKwkJbGVuZ3RoID0gb2JqX2Rlc2MtPnN0cmluZy5sZW5ndGggKyAxOworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUgSElEICovCisKKwloaWQgPQorCSAgICBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpICsKKwkJCQkgKGFjcGlfc2l6ZSkgbGVuZ3RoKTsKKwlpZiAoIWhpZCkgeworCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBBcmVhIGZvciB0aGUgc3RyaW5nIHN0YXJ0cyBhZnRlciBERVZJQ0VfSUQgc3RydWN0ICovCisKKwloaWQtPnN0cmluZyA9IEFDUElfQUREX1BUUihjaGFyLCBoaWQsIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOworCisJLyogQ29udmVydCBFSVNBSUQgdG8gYSBzdHJpbmcgb3Igc2ltcGx5IGNvcHkgZXhpc3Rpbmcgc3RyaW5nICovCisKKwlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCWFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoaGlkLT5zdHJpbmcsIG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlKTsKKwl9IGVsc2UgeworCQlhY3BpX3V0X2NvcHlfaWRfc3RyaW5nKGhpZC0+c3RyaW5nLCBvYmpfZGVzYy0+c3RyaW5nLnBvaW50ZXIpOworCX0KKworCWhpZC0+bGVuZ3RoID0gbGVuZ3RoOworCSpyZXR1cm5faWQgPSBoaWQ7CisKK2NsZWFudXA6CisKKwkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLworCisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV91dF9leGVjdXRlX1VJRAorICoKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2Vfbm9kZSAgICAgICAgIC0gTm9kZSBmb3IgdGhlIGRldmljZQorICogICAgICAgICAgICAgIHJldHVybl9pZCAgICAgICAgICAgLSBXaGVyZSB0aGUgc3RyaW5nIFVJRCBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogRXhlY3V0ZXMgdGhlIF9VSUQgY29udHJvbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSB1bmlxdWUKKyAqICAgICAgICAgICAgICBJRCBvZiB0aGUgZGV2aWNlLiBUaGUgVUlEIGlzIGVpdGhlciBhIDY0LWJpdCBJbnRlZ2VyIChOT1QgYW4KKyAqICAgICAgICAgICAgICBFSVNBSUQpIG9yIGEgc3RyaW5nLiBBbHdheXMgcmV0dXJucyBhIHN0cmluZy4gQSA2NC1iaXQgaW50ZWdlcgorICogICAgICAgICAgICAgIGlzIGNvbnZlcnRlZCB0byBhIGRlY2ltYWwgc3RyaW5nLgorICoKKyAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cworYWNwaV91dF9leGVjdXRlX1VJRChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZGV2aWNlX25vZGUsCisJCSAgICBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqKnJldHVybl9pZCkKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAqdWlkOworCXUzMiBsZW5ndGg7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX1VJRCk7CisKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChkZXZpY2Vfbm9kZSwgTUVUSE9EX05BTUVfX1VJRCwKKwkJCQkJIEFDUElfQlRZUEVfSU5URUdFUiB8IEFDUElfQlRZUEVfU1RSSU5HLAorCQkJCQkgJm9ial9kZXNjKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJLyogR2V0IHRoZSBzaXplIG9mIHRoZSBTdHJpbmcgdG8gYmUgcmV0dXJuZWQsIGluY2x1ZGVzIG51bGwgdGVybWluYXRvciAqLworCisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlsZW5ndGggPSBBQ1BJX01BWDY0X0RFQ0lNQUxfRElHSVRTICsgMTsKKwl9IGVsc2UgeworCQlsZW5ndGggPSBvYmpfZGVzYy0+c3RyaW5nLmxlbmd0aCArIDE7CisJfQorCisJLyogQWxsb2NhdGUgYSBidWZmZXIgZm9yIHRoZSBVSUQgKi8KKworCXVpZCA9CisJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkgKworCQkJCSAoYWNwaV9zaXplKSBsZW5ndGgpOworCWlmICghdWlkKSB7CisJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qIEFyZWEgZm9yIHRoZSBzdHJpbmcgc3RhcnRzIGFmdGVyIERFVklDRV9JRCBzdHJ1Y3QgKi8KKworCXVpZC0+c3RyaW5nID0gQUNQSV9BRERfUFRSKGNoYXIsIHVpZCwgc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkKSk7CisKKwkvKiBDb252ZXJ0IGFuIEludGVnZXIgdG8gc3RyaW5nLCBvciBqdXN0IGNvcHkgYW4gZXhpc3Rpbmcgc3RyaW5nICovCisKKwlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCWFjcGlfZXhfaW50ZWdlcl90b19zdHJpbmcodWlkLT5zdHJpbmcsIG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlKTsKKwl9IGVsc2UgeworCQlhY3BpX3V0X2NvcHlfaWRfc3RyaW5nKHVpZC0+c3RyaW5nLCBvYmpfZGVzYy0+c3RyaW5nLnBvaW50ZXIpOworCX0KKworCXVpZC0+bGVuZ3RoID0gbGVuZ3RoOworCSpyZXR1cm5faWQgPSB1aWQ7CisKK2NsZWFudXA6CisKKwkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgcmV0dXJuIG9iamVjdCAqLworCisJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG9ial9kZXNjKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV91dF9leGVjdXRlX0NJRAorICoKKyAqIFBBUkFNRVRFUlM6ICBkZXZpY2Vfbm9kZSAgICAgICAgIC0gTm9kZSBmb3IgdGhlIGRldmljZQorICogICAgICAgICAgICAgIHJldHVybl9jaWRfbGlzdCAgICAgLSBXaGVyZSB0aGUgQ0lEIGxpc3QgaXMgcmV0dXJuZWQKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzLCBsaXN0IG9mIENJRCBzdHJpbmdzCisgKgorICogREVTQ1JJUFRJT046IEV4ZWN1dGVzIHRoZSBfQ0lEIGNvbnRyb2wgbWV0aG9kIHRoYXQgcmV0dXJucyBvbmUgb3IgbW9yZQorICogICAgICAgICAgICAgIGNvbXBhdGlibGUgaGFyZHdhcmUgSURzIGZvciB0aGUgZGV2aWNlLgorICoKKyAqICAgICAgICAgICAgICBOT1RFOiBJbnRlcm5hbCBmdW5jdGlvbiwgbm8gcGFyYW1ldGVyIHZhbGlkYXRpb24KKyAqCisgKiBBIF9DSUQgbWV0aG9kIGNhbiByZXR1cm4gZWl0aGVyIGEgc2luZ2xlIGNvbXBhdGlibGUgSUQgb3IgYSBwYWNrYWdlIG9mCisgKiBjb21wYXRpYmxlIElEcy4gRWFjaCBjb21wYXRpYmxlIElEIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqIDEpIEludGVnZXIgKDMyIGJpdCBjb21wcmVzc2VkIEVJU0EgSUQpIG9yCisgKiAyKSBTdHJpbmcgKFBDSSBJRCBmb3JtYXQsIGUuZy4gIlBDSVxWRU5fdnZ2diZERVZfZGRkZCZTVUJTWVNfc3Nzc3Nzc3MiKQorICoKKyAqIFRoZSBJbnRlZ2VyIENJRHMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmcgZm9ybWF0IGJ5IHRoaXMgZnVuY3Rpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMKK2FjcGlfdXRfZXhlY3V0ZV9DSUQoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLAorCQkgICAgc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqKnJldHVybl9jaWRfbGlzdCkKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqY2lkX29iamVjdHM7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3Q7CisJY2hhciAqbmV4dF9pZF9zdHJpbmc7CisJdTMyIHN0cmluZ19hcmVhX3NpemU7CisJdTMyIGxlbmd0aDsKKwl1MzIgY2lkX2xpc3Rfc2l6ZTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTMyIGNvdW50OworCXUzMiBpOworCisJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9leGVjdXRlX0NJRCk7CisKKwkvKiBFdmFsdWF0ZSB0aGUgX0NJRCBtZXRob2QgZm9yIHRoaXMgZGV2aWNlICovCisKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX29iamVjdChkZXZpY2Vfbm9kZSwgTUVUSE9EX05BTUVfX0NJRCwKKwkJCQkJIEFDUElfQlRZUEVfSU5URUdFUiB8IEFDUElfQlRZUEVfU1RSSU5HCisJCQkJCSB8IEFDUElfQlRZUEVfUEFDS0FHRSwgJm9ial9kZXNjKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJLyoKKwkgKiBHZXQgdGhlIGNvdW50IGFuZCBzaXplIG9mIHRoZSByZXR1cm5lZCBfQ0lEcy4gX0NJRCBjYW4gcmV0dXJuIGVpdGhlcgorCSAqIGEgUGFja2FnZSBvZiBJbnRlZ2Vycy9TdHJpbmdzIG9yIGEgc2luZ2xlIEludGVnZXIgb3IgU3RyaW5nLgorCSAqIE5vdGU6IFRoaXMgc2VjdGlvbiBhbHNvIHZhbGlkYXRlcyB0aGF0IGFsbCBDSUQgZWxlbWVudHMgYXJlIG9mIHRoZQorCSAqIGNvcnJlY3QgdHlwZSAoSW50ZWdlciBvciBTdHJpbmcpLgorCSAqLworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwkJY291bnQgPSBvYmpfZGVzYy0+cGFja2FnZS5jb3VudDsKKwkJY2lkX29iamVjdHMgPSBvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50czsKKwl9IGVsc2UgewkJLyogU2luZ2xlIEludGVnZXIgb3IgU3RyaW5nIENJRCAqLworCisJCWNvdW50ID0gMTsKKwkJY2lkX29iamVjdHMgPSAmb2JqX2Rlc2M7CisJfQorCisJc3RyaW5nX2FyZWFfc2l6ZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKworCQkvKiBTdHJpbmcgbGVuZ3RocyBpbmNsdWRlIG51bGwgdGVybWluYXRvciAqLworCisJCXN3aXRjaCAoY2lkX29iamVjdHNbaV0tPmNvbW1vbi50eXBlKSB7CisJCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CisJCQlzdHJpbmdfYXJlYV9zaXplICs9IEFDUElfRUlTQUlEX1NUUklOR19TSVpFOworCQkJYnJlYWs7CisKKwkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgorCQkJc3RyaW5nX2FyZWFfc2l6ZSArPSBjaWRfb2JqZWN0c1tpXS0+c3RyaW5nLmxlbmd0aCArIDE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJc3RhdHVzID0gQUVfVFlQRTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCS8qCisJICogTm93IHRoYXQgd2Uga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBDSURzLCBhbGxvY2F0ZSByZXR1cm4gYnVmZmVyOgorCSAqIDEpIFNpemUgb2YgdGhlIGJhc2Ugc3RydWN0dXJlICsKKwkgKiAyKSBTaXplIG9mIHRoZSBDSUQgREVWSUNFX0lEIGFycmF5ICsKKwkgKiAzKSBTaXplIG9mIHRoZSBhY3R1YWwgQ0lEIHN0cmluZ3MKKwkgKi8KKwljaWRfbGlzdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QpICsKKwkgICAgKChjb3VudCAtIDEpICogc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkKSkgKyBzdHJpbmdfYXJlYV9zaXplOworCisJY2lkX2xpc3QgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChjaWRfbGlzdF9zaXplKTsKKwlpZiAoIWNpZF9saXN0KSB7CisJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qIEFyZWEgZm9yIENJRCBzdHJpbmdzIHN0YXJ0cyBhZnRlciB0aGUgQ0lEIERFVklDRV9JRCBhcnJheSAqLworCisJbmV4dF9pZF9zdHJpbmcgPSBBQ1BJX0NBU1RfUFRSKGNoYXIsIGNpZF9saXN0LT5pZHMpICsKKwkgICAgKChhY3BpX3NpemUpIGNvdW50ICogc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkKSk7CisKKwkvKiBDb3B5L2NvbnZlcnQgdGhlIENJRHMgdG8gdGhlIHJldHVybiBidWZmZXIgKi8KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChjaWRfb2JqZWN0c1tpXS0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKworCQkJLyogQ29udmVydCB0aGUgSW50ZWdlciAoRUlTQUlEKSBDSUQgdG8gYSBzdHJpbmcgKi8KKworCQkJYWNwaV9leF9laXNhX2lkX3RvX3N0cmluZyhuZXh0X2lkX3N0cmluZywKKwkJCQkJCSAgY2lkX29iamVjdHNbaV0tPmludGVnZXIuCisJCQkJCQkgIHZhbHVlKTsKKwkJCWxlbmd0aCA9IEFDUElfRUlTQUlEX1NUUklOR19TSVpFOworCQl9IGVsc2UgewkvKiBBQ1BJX1RZUEVfU1RSSU5HICovCisKKwkJCS8qIENvcHkgdGhlIFN0cmluZyBDSUQgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0ICovCisKKwkJCWFjcGlfdXRfY29weV9pZF9zdHJpbmcobmV4dF9pZF9zdHJpbmcsCisJCQkJCSAgICAgICBjaWRfb2JqZWN0c1tpXS0+c3RyaW5nLnBvaW50ZXIpOworCQkJbGVuZ3RoID0gY2lkX29iamVjdHNbaV0tPnN0cmluZy5sZW5ndGggKyAxOworCQl9CisKKwkJY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcgPSBuZXh0X2lkX3N0cmluZzsKKwkJY2lkX2xpc3QtPmlkc1tpXS5sZW5ndGggPSBsZW5ndGg7CisJCW5leHRfaWRfc3RyaW5nICs9IGxlbmd0aDsKKwl9CisKKwkvKiBGaW5pc2ggdGhlIENJRCBsaXN0ICovCisKKwljaWRfbGlzdC0+Y291bnQgPSBjb3VudDsKKwljaWRfbGlzdC0+bGlzdF9zaXplID0gY2lkX2xpc3Rfc2l6ZTsKKwkqcmV0dXJuX2NpZF9saXN0ID0gY2lkX2xpc3Q7CisKK2NsZWFudXA6CisKKwkvKiBPbiBleGl0LCB3ZSBtdXN0IGRlbGV0ZSB0aGUgX0NJRCByZXR1cm4gb2JqZWN0ICovCisKKwlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uob2JqX2Rlc2MpOworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMKaW5kZXggYTU0Y2E4NC4uOWQwOTE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aW5pdC5jCkBAIC05OSwzMyArOTksMTkgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9zdWJzeXN0ZW1fc2h1dGRvd24KICAqCi0gKiBQQVJBTUVURVJTOiAgbm9uZQorICogUEFSQU1FVEVSUzogIE5vbmUKICAqCi0gKiBSRVRVUk46ICAgICAgbm9uZQorICogUkVUVVJOOiAgICAgIE5vbmUKICAqCi0gKiBERVNDUklQVElPTjogU2h1dGRvd24gdGhlIHZhcmlvdXMgc3Vic3lzdGVtcy4gIERvbid0IGRlbGV0ZSB0aGUgbXV0ZXgKLSAqICAgICAgICAgICAgICBvYmplY3RzIGhlcmUgLS0gYmVjYXVzZSB0aGUgQU1MIGRlYnVnZ2VyIG1heSBiZSBzdGlsbCBydW5uaW5nLgorICogREVTQ1JJUFRJT046IFNodXRkb3duIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMuIERvIG5vdCBkZWxldGUgdGhlIG11dGV4CisgKiAgICAgICAgICAgICAgb2JqZWN0cyBoZXJlLCBiZWNhdXNlIHRoZSBBTUwgZGVidWdnZXIgbWF5IGJlIHN0aWxsIHJ1bm5pbmcuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdm9pZCBhY3BpX3V0X3N1YnN5c3RlbV9zaHV0ZG93bih2b2lkKQogewotCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9zdWJzeXN0ZW1fc2h1dGRvd24pOwogCi0JLyogSnVzdCBleGl0IGlmIHN1YnN5c3RlbSBpcyBhbHJlYWR5IHNodXRkb3duICovCi0KLQlpZiAoYWNwaV9nYmxfc2h1dGRvd24pIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkFDUEkgU3Vic3lzdGVtIGlzIGFscmVhZHkgdGVybWluYXRlZCIpKTsKLQkJcmV0dXJuX1ZPSUQ7Ci0JfQotCi0JLyogU3Vic3lzdGVtIGFwcGVhcnMgYWN0aXZlLCBnbyBhaGVhZCBhbmQgc2h1dCBpdCBkb3duICovCi0KLQlhY3BpX2dibF9zaHV0ZG93biA9IFRSVUU7Ci0JYWNwaV9nYmxfc3RhcnR1cF9mbGFncyA9IDA7Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiU2h1dHRpbmcgZG93biBBQ1BJIFN1YnN5c3RlbVxuIikpOwotCiAjaWZuZGVmIEFDUElfQVNMX0NPTVBJTEVSCiAKIAkvKiBDbG9zZSB0aGUgYWNwaV9ldmVudCBIYW5kbGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMKaW5kZXggZmJlNzgyMy4uNjFmNjMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCkBAIC01MCw2ICs1MCwxMSBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfVVRJTElUSUVTCiBBQ1BJX01PRFVMRV9OQU1FKCJ1dG1pc2MiKQogCisvKgorICogQ29tbW9uIHN1ZmZpeCBmb3IgbWVzc2FnZXMKKyAqLworI2RlZmluZSBBQ1BJX0NPTU1PTl9NU0dfU1VGRklYIFwKKwlhY3BpX29zX3ByaW50ZigiICglOC44WC8lcy0ldSlcbiIsIEFDUElfQ0FfVkVSU0lPTiwgbW9kdWxlX25hbWUsIGxpbmVfbnVtYmVyKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF92YWxpZGF0ZV9leGNlcHRpb24KQEAgLTEyMCw2ICsxMjUsMzQgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV91dF9pc19wY2lfcm9vdF9icmlkZ2UKKyAqCisgKiBQQVJBTUVURVJTOiAgSWQgICAgICAgICAgICAgIC0gVGhlIEhJRC9DSUQgaW4gc3RyaW5nIGZvcm1hdAorICoKKyAqIFJFVFVSTjogICAgICBUUlVFIGlmIHRoZSBJZCBpcyBhIG1hdGNoIGZvciBhIFBDSS9QQ0ktRXhwcmVzcyBSb290IEJyaWRnZQorICoKKyAqIERFU0NSSVBUSU9OOiBEZXRlcm1pbmUgaWYgdGhlIGlucHV0IElEIGlzIGEgUENJIFJvb3QgQnJpZGdlIElELgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3U4IGFjcGlfdXRfaXNfcGNpX3Jvb3RfYnJpZGdlKGNoYXIgKmlkKQoreworCisJLyoKKwkgKiBDaGVjayBpZiB0aGlzIGlzIGEgUENJIHJvb3QgYnJpZGdlLgorCSAqIEFDUEkgMy4wKzogY2hlY2sgZm9yIGEgUENJIEV4cHJlc3Mgcm9vdCBhbHNvLgorCSAqLworCWlmICghKEFDUElfU1RSQ01QKGlkLAorCQkJICBQQ0lfUk9PVF9ISURfU1RSSU5HKSkgfHwKKwkgICAgIShBQ1BJX1NUUkNNUChpZCwgUENJX0VYUFJFU1NfUk9PVF9ISURfU1RSSU5HKSkpIHsKKwkJcmV0dXJuIChUUlVFKTsKKwl9CisKKwlyZXR1cm4gKEZBTFNFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9pc19hbWxfdGFibGUKICAqCiAgKiBQQVJBTUVURVJTOiAgVGFibGUgICAgICAgICAgICAgICAtIEFuIEFDUEkgdGFibGUKQEAgLTEwMzcsOCArMTA3MCw3IEBACiAKIAl2YV9zdGFydChhcmdzLCBmb3JtYXQpOwogCWFjcGlfb3NfdnByaW50Zihmb3JtYXQsIGFyZ3MpOwotCWFjcGlfb3NfcHJpbnRmKCIgJTguOFggJXMtJXVcbiIsIEFDUElfQ0FfVkVSU0lPTiwgbW9kdWxlX25hbWUsCi0JCSAgICAgICBsaW5lX251bWJlcik7CisJQUNQSV9DT01NT05fTVNHX1NVRkZJWDsKIAl2YV9lbmQoYXJncyk7CiB9CiAKQEAgLTEwNTIsOCArMTA4NCw3IEBACiAKIAl2YV9zdGFydChhcmdzLCBmb3JtYXQpOwogCWFjcGlfb3NfdnByaW50Zihmb3JtYXQsIGFyZ3MpOwotCWFjcGlfb3NfcHJpbnRmKCIgJTguOFggJXMtJXVcbiIsIEFDUElfQ0FfVkVSU0lPTiwgbW9kdWxlX25hbWUsCi0JCSAgICAgICBsaW5lX251bWJlcik7CisJQUNQSV9DT01NT05fTVNHX1NVRkZJWDsKIAl2YV9lbmQoYXJncyk7CiB9CiAKQEAgLTEwNjYsOCArMTA5Nyw3IEBACiAKIAl2YV9zdGFydChhcmdzLCBmb3JtYXQpOwogCWFjcGlfb3NfdnByaW50Zihmb3JtYXQsIGFyZ3MpOwotCWFjcGlfb3NfcHJpbnRmKCIgJTguOFggJXMtJXVcbiIsIEFDUElfQ0FfVkVSU0lPTiwgbW9kdWxlX25hbWUsCi0JCSAgICAgICBsaW5lX251bWJlcik7CisJQUNQSV9DT01NT05fTVNHX1NVRkZJWDsKIAl2YV9lbmQoYXJncyk7CiB9CiAKQEAgLTEwODgsMyArMTExOCw0NiBAQAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZXhjZXB0aW9uKQogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfd2FybmluZykKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2luZm8pCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfcHJlZGVmaW5lZF93YXJuaW5nCisgKgorICogUEFSQU1FVEVSUzogIG1vZHVsZV9uYW1lICAgICAtIENhbGxlcidzIG1vZHVsZSBuYW1lIChmb3IgZXJyb3Igb3V0cHV0KQorICogICAgICAgICAgICAgIGxpbmVfbnVtYmVyICAgICAtIENhbGxlcidzIGxpbmUgbnVtYmVyIChmb3IgZXJyb3Igb3V0cHV0KQorICogICAgICAgICAgICAgIFBhdGhuYW1lICAgICAgICAtIEZ1bGwgcGF0aG5hbWUgdG8gdGhlIG5vZGUKKyAqICAgICAgICAgICAgICBub2RlX2ZsYWdzICAgICAgLSBGcm9tIE5hbWVzcGFjZSBub2RlIGZvciB0aGUgbWV0aG9kL29iamVjdAorICogICAgICAgICAgICAgIEZvcm1hdCAgICAgICAgICAtIFByaW50ZiBmb3JtYXQgc3RyaW5nICsgYWRkaXRpb25hbCBhcmdzCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogV2FybmluZ3MgZm9yIHRoZSBwcmVkZWZpbmVkIHZhbGlkYXRpb24gbW9kdWxlLiBNZXNzYWdlcyBhcmUKKyAqICAgICAgICAgICAgICBvbmx5IGVtaXR0ZWQgdGhlIGZpcnN0IHRpbWUgYSBwcm9ibGVtIHdpdGggYSBwYXJ0aWN1bGFyCisgKiAgICAgICAgICAgICAgbWV0aG9kL29iamVjdCBpcyBkZXRlY3RlZC4gVGhpcyBwcmV2ZW50cyBhIGZsb29kIG9mIGVycm9yCisgKiAgICAgICAgICAgICAgbWVzc2FnZXMgZm9yIG1ldGhvZHMgdGhhdCBhcmUgcmVwZWF0ZWRseSBldmFsdWF0ZWQuCisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFCithY3BpX3V0X3ByZWRlZmluZWRfd2FybmluZyhjb25zdCBjaGFyICptb2R1bGVfbmFtZSwKKwkJCSAgIHUzMiBsaW5lX251bWJlciwKKwkJCSAgIGNoYXIgKnBhdGhuYW1lLAorCQkJICAgdTggbm9kZV9mbGFncywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJLyoKKwkgKiBXYXJuaW5nIG1lc3NhZ2VzIGZvciB0aGlzIG1ldGhvZC9vYmplY3Qgd2lsbCBiZSBkaXNhYmxlZCBhZnRlciB0aGUKKwkgKiBmaXJzdCB0aW1lIGEgdmFsaWRhdGlvbiBmYWlscyBvciBhbiBvYmplY3QgaXMgc3VjY2Vzc2Z1bGx5IHJlcGFpcmVkLgorCSAqLworCWlmIChub2RlX2ZsYWdzICYgQU5PQkpfRVZBTFVBVEVEKSB7CisJCXJldHVybjsKKwl9CisKKwlhY3BpX29zX3ByaW50ZigiQUNQSSBXYXJuaW5nIGZvciAlczogIiwgcGF0aG5hbWUpOworCisJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwlhY3BpX29zX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKKwlBQ1BJX0NPTU1PTl9NU0dfU1VGRklYOworCXZhX2VuZChhcmdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmYWNlLmMKaW5kZXggMDc4YTIyNy4uYjFmNWY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmYWNlLmMKQEAgLTI1MSw2ICsyNTEsMTYgQEAKIAl9CiAKIAkvKgorCSAqIEV4ZWN1dGUgYW55IG1vZHVsZS1sZXZlbCBjb2RlIHRoYXQgd2FzIGRldGVjdGVkIGR1cmluZyB0aGUgdGFibGUgbG9hZAorCSAqIHBoYXNlLiBBbHRob3VnaCBpbGxlZ2FsIHNpbmNlIEFDUEkgMi4wLCB0aGVyZSBhcmUgbWFueSBtYWNoaW5lcyB0aGF0CisJICogY29udGFpbiB0aGlzIHR5cGUgb2YgY29kZS4gRWFjaCBibG9jayBvZiBkZXRlY3RlZCBleGVjdXRhYmxlIEFNTCBjb2RlCisJICogb3V0c2lkZSBvZiBhbnkgY29udHJvbCBtZXRob2QgaXMgd3JhcHBlZCB3aXRoIGEgdGVtcG9yYXJ5IGNvbnRyb2wKKwkgKiBtZXRob2Qgb2JqZWN0IGFuZCBwbGFjZWQgb24gYSBnbG9iYWwgbGlzdC4gVGhlIG1ldGhvZHMgb24gdGhpcyBsaXN0CisJICogYXJlIGV4ZWN1dGVkIGJlbG93LgorCSAqLworCWFjcGlfbnNfZXhlY19tb2R1bGVfY29kZV9saXN0KCk7CisKKwkvKgogCSAqIEluaXRpYWxpemUgdGhlIG9iamVjdHMgdGhhdCByZW1haW4gdW5pbml0aWFsaXplZC4gVGhpcyBydW5zIHRoZQogCSAqIGV4ZWN1dGFibGUgQU1MIHRoYXQgbWF5IGJlIHBhcnQgb2YgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZXNlIG9iamVjdHM6CiAJICogb3BlcmF0aW9uX3JlZ2lvbnMsIGJ1ZmZlcl9maWVsZHMsIEJ1ZmZlcnMsIGFuZCBQYWNrYWdlcy4KQEAgLTMxOCw3ICszMjgsNyBAQAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogU2h1dGRvd24gdGhlIEFDUEkgc3Vic3lzdGVtLiAgUmVsZWFzZSBhbGwgcmVzb3VyY2VzLgorICogREVTQ1JJUFRJT046IFNodXRkb3duIHRoZSBBQ1BJQ0Egc3Vic3lzdGVtIGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzIGFjcGlfdGVybWluYXRlKHZvaWQpCkBAIC0zMjcsNiArMzM3LDE5IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfdGVybWluYXRlKTsKIAorCS8qIEp1c3QgZXhpdCBpZiBzdWJzeXN0ZW0gaXMgYWxyZWFkeSBzaHV0ZG93biAqLworCisJaWYgKGFjcGlfZ2JsX3NodXRkb3duKSB7CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJBQ1BJIFN1YnN5c3RlbSBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQiKSk7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJfQorCisJLyogU3Vic3lzdGVtIGFwcGVhcnMgYWN0aXZlLCBnbyBhaGVhZCBhbmQgc2h1dCBpdCBkb3duICovCisKKwlhY3BpX2dibF9zaHV0ZG93biA9IFRSVUU7CisJYWNwaV9nYmxfc3RhcnR1cF9mbGFncyA9IDA7CisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiU2h1dHRpbmcgZG93biBBQ1BJIFN1YnN5c3RlbVxuIikpOworCiAJLyogVGVybWluYXRlIHRoZSBBTUwgRGVidWdnZXIgaWYgcHJlc2VudCAqLwogCiAJQUNQSV9ERUJVR0dFUl9FWEVDKGFjcGlfZ2JsX2RiX3Rlcm1pbmF0ZV90aHJlYWRzID0gVFJVRSk7CkBAIC0zNTMsNiArMzc2LDcgQEAKIH0KIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfdGVybWluYXRlKQorCiAjaWZuZGVmIEFDUElfQVNMX0NPTVBJTEVSCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwppbmRleCA1OGI0NTE3Li4zZjQ2MDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpAQCAtNDUsNiArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2VuZGlmCiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04gMHhGRkZGRkZGRgogCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9DTEFTUwkJImJhdHRlcnkiCkBAIC04NSw2ICs4OCwxMCBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGJhdHRlcnlfZGV2aWNlX2lkcyk7CiAKKy8qIEZvciBidWdneSBEU0RUcyB0aGF0IHJlcG9ydCBuZWdhdGl2ZSAxNi1iaXQgdmFsdWVzIGZvciBlaXRoZXIgY2hhcmdpbmcKKyAqIG9yIGRpc2NoYXJnaW5nIGN1cnJlbnQgYW5kL29yIHJlcG9ydCAwIGFzIDY1NTM2IGR1ZSB0byBiYWQgbWF0aC4KKyAqLworI2RlZmluZSBRVUlSS19TSUdORUQxNl9DVVJSRU5UIDB4MDAwMQogCiBzdHJ1Y3QgYWNwaV9iYXR0ZXJ5IHsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKQEAgLTExMiw2ICsxMTksNyBAQAogCWludCBzdGF0ZTsKIAlpbnQgcG93ZXJfdW5pdDsKIAl1OCBhbGFybV9wcmVzZW50OworCWxvbmcgcXVpcmtzOwogfTsKIAogI2RlZmluZSB0b19hY3BpX2JhdHRlcnkoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBhY3BpX2JhdHRlcnksIGJhdCk7CkBAIC0zOTAsNiArMzk4LDExIEBACiAJCQkJIHN0YXRlX29mZnNldHMsIEFSUkFZX1NJWkUoc3RhdGVfb2Zmc2V0cykpOwogCWJhdHRlcnktPnVwZGF0ZV90aW1lID0gamlmZmllczsKIAlrZnJlZShidWZmZXIucG9pbnRlcik7CisKKwlpZiAoKGJhdHRlcnktPnF1aXJrcyAmIFFVSVJLX1NJR05FRDE2X0NVUlJFTlQpICYmCisJICAgIGJhdHRlcnktPnJhdGVfbm93ICE9IC0xKQorCQliYXR0ZXJ5LT5yYXRlX25vdyA9IGFicygoczE2KWJhdHRlcnktPnJhdGVfbm93KTsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ5NSw2ICs1MDgsMTQgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBhY3BpX2JhdHRlcnlfcXVpcmtzKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCit7CisJYmF0dGVyeS0+cXVpcmtzID0gMDsKKwlpZiAoZG1pX25hbWVfaW5fdmVuZG9ycygiQWNlciIpICYmIGJhdHRlcnktPnBvd2VyX3VuaXQpIHsKKwkJYmF0dGVyeS0+cXVpcmtzIHw9IFFVSVJLX1NJR05FRDE2X0NVUlJFTlQ7CisJfQorfQorCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV91cGRhdGUoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKIAlpbnQgcmVzdWx0LCBvbGRfcHJlc2VudCA9IGFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpOwpAQCAtNTEzLDYgKzUzNCw3IEBACiAJCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfaW5mbyhiYXR0ZXJ5KTsKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CisJCWFjcGlfYmF0dGVyeV9xdWlya3MoYmF0dGVyeSk7CiAJCWFjcGlfYmF0dGVyeV9pbml0X2FsYXJtKGJhdHRlcnkpOwogCX0KICNpZmRlZiBDT05GSUdfQUNQSV9TWVNGU19QT1dFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCmluZGV4IDBjNGNhNGQuLmU1NmIyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiBlbnVtIGFjcGlfYmxhY2tsaXN0X3ByZWRpY2F0ZXMgewogCWFsbF92ZXJzaW9ucywKIAlsZXNzX3RoYW5fb3JfZXF1YWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmMKaW5kZXggMjg3NmZjNy4uMTM1ZmJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIApAQCAtMTQxLDcgKzE0Miw3IEBACiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dldF9zdGF0dXMpOwogCiB2b2lkIGFjcGlfYnVzX3ByaXZhdGVfZGF0YV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCQkgICB1MzIgZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpCisJCQkJICAgdm9pZCAqY29udGV4dCkKIHsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggOTE5NWRlYmE5Li5kMjk1YmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9CVVRUT05fQ0xBU1MJCSJidXR0b24iCiAjZGVmaW5lIEFDUElfQlVUVE9OX0ZJTEVfSU5GTwkJImluZm8iCiAjZGVmaW5lIEFDUElfQlVUVE9OX0ZJTEVfU1RBVEUJCSJzdGF0ZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9jbV9zYnMuYyBiL2RyaXZlcnMvYWNwaS9jbV9zYnMuYwppbmRleCAzMzJmZTRiLi42YzllZTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvY21fc2JzLmMKKysrIGIvZHJpdmVycy9hY3BpL2NtX3Nicy5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKIEFDUElfTU9EVUxFX05BTUUoImNtX3NicyIpOwogI2RlZmluZSBBQ1BJX0FDX0NMQVNTCQkiYWNfYWRhcHRlciIKICNkZWZpbmUgQUNQSV9CQVRURVJZX0NMQVNTCSJiYXR0ZXJ5IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2NvbnRhaW5lci5jIGIvZHJpdmVycy9hY3BpL2NvbnRhaW5lci5jCmluZGV4IGZlMGNkZjguLjY0MmJiMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYworKysgYi9kcml2ZXJzL2FjcGkvY29udGFpbmVyLmMKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogI2luY2x1ZGUgPGFjcGkvY29udGFpbmVyLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9DT05UQUlORVJfREVWSUNFX05BTUUJIkFDUEkgY29udGFpbmVyIGRldmljZSIKICNkZWZpbmUgQUNQSV9DT05UQUlORVJfQ0xBU1MJCSJjb250YWluZXIiCiAKQEAgLTIwMCwyMCArMjAyLDE3IEBACiAJCQkgICAgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQogewogCWNoYXIgKmhpZCA9IE5VTEw7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJaW50ICphY3Rpb24gPSBjb250ZXh0OwogCi0KLQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fCAhYnVmZmVyLnBvaW50ZXIpIHsKKwlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuIEFFX09LOwogCX0KIAotCWluZm8gPSBidWZmZXIucG9pbnRlcjsKIAlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkKLQkJaGlkID0gaW5mby0+aGFyZHdhcmVfaWQudmFsdWU7CisJCWhpZCA9IGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZzsKIAogCWlmIChoaWQgPT0gTlVMTCkgewogCQlnb3RvIGVuZDsKQEAgLTI0MCw3ICsyMzksNyBAQAogCX0KIAogICAgICAgZW5kOgotCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlrZnJlZShpbmZvKTsKIAogCXJldHVybiBBRV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKaW5kZXggYTgyODdiZS4uOGE2OTBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RlYnVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKQEAgLTMsNiArMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIwMSw3MiArMjAyLDU0IEBACiAjZGVmaW5lIEFDUElfU1lTVEVNX0ZJTEVfREVCVUdfTEFZRVIJImRlYnVnX2xheWVyIgogI2RlZmluZSBBQ1BJX1NZU1RFTV9GSUxFX0RFQlVHX0xFVkVMCQkiZGVidWdfbGV2ZWwiCiAKLXN0YXRpYyBpbnQKLWFjcGlfc3lzdGVtX3JlYWRfZGVidWcoY2hhciAqcGFnZSwKLQkJICAgICAgIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBhY3BpX3N5c3RlbV9kZWJ1Z19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWNoYXIgKnAgPSBwYWdlOwotCWludCBzaXplID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChvZmYgIT0gMCkKLQkJZ290byBlbmQ7CisJc2VxX3ByaW50ZihtLCAiJS0yNXNcdEhleCAgICAgICAgU0VUXG4iLCAiRGVzY3JpcHRpb24iKTsKIAotCXAgKz0gc3ByaW50ZihwLCAiJS0yNXNcdEhleCAgICAgICAgU0VUXG4iLCAiRGVzY3JpcHRpb24iKTsKLQotCXN3aXRjaCAoKHVuc2lnbmVkIGxvbmcpZGF0YSkgeworCXN3aXRjaCAoKHVuc2lnbmVkIGxvbmcpbS0+cHJpdmF0ZSkgewogCWNhc2UgMDoKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWNwaV9kZWJ1Z19sYXllcnMpOyBpKyspIHsKLQkJCXAgKz0gc3ByaW50ZihwLCAiJS0yNXNcdDB4JTA4bFggWyVjXVxuIiwKKwkJCXNlcV9wcmludGYobSwgIiUtMjVzXHQweCUwOGxYIFslY11cbiIsCiAJCQkJICAgICBhY3BpX2RlYnVnX2xheWVyc1tpXS5uYW1lLAogCQkJCSAgICAgYWNwaV9kZWJ1Z19sYXllcnNbaV0udmFsdWUsCiAJCQkJICAgICAoYWNwaV9kYmdfbGF5ZXIgJiBhY3BpX2RlYnVnX2xheWVyc1tpXS4KIAkJCQkgICAgICB2YWx1ZSkgPyAnKicgOiAnICcpOwogCQl9Ci0JCXAgKz0gc3ByaW50ZihwLCAiJS0yNXNcdDB4JTA4WCBbJWNdXG4iLCAiQUNQSV9BTExfRFJJVkVSUyIsCisJCXNlcV9wcmludGYobSwgIiUtMjVzXHQweCUwOFggWyVjXVxuIiwgIkFDUElfQUxMX0RSSVZFUlMiLAogCQkJICAgICBBQ1BJX0FMTF9EUklWRVJTLAogCQkJICAgICAoYWNwaV9kYmdfbGF5ZXIgJiBBQ1BJX0FMTF9EUklWRVJTKSA9PQogCQkJICAgICBBQ1BJX0FMTF9EUklWRVJTID8gJyonIDogKGFjcGlfZGJnX2xheWVyICYKIAkJCQkJCSAgICAgICBBQ1BJX0FMTF9EUklWRVJTKSA9PQogCQkJICAgICAwID8gJyAnIDogJy0nKTsKLQkJcCArPSBzcHJpbnRmKHAsCisJCXNlcV9wcmludGYobSwKIAkJCSAgICAgIi0tXG5kZWJ1Z19sYXllciA9IDB4JTA4WCAoKiA9IGVuYWJsZWQsIC0gPSBwYXJ0aWFsKVxuIiwKIAkJCSAgICAgYWNwaV9kYmdfbGF5ZXIpOwogCQlicmVhazsKIAljYXNlIDE6CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFjcGlfZGVidWdfbGV2ZWxzKTsgaSsrKSB7Ci0JCQlwICs9IHNwcmludGYocCwgIiUtMjVzXHQweCUwOGxYIFslY11cbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTI1c1x0MHglMDhsWCBbJWNdXG4iLAogCQkJCSAgICAgYWNwaV9kZWJ1Z19sZXZlbHNbaV0ubmFtZSwKIAkJCQkgICAgIGFjcGlfZGVidWdfbGV2ZWxzW2ldLnZhbHVlLAogCQkJCSAgICAgKGFjcGlfZGJnX2xldmVsICYgYWNwaV9kZWJ1Z19sZXZlbHNbaV0uCiAJCQkJICAgICAgdmFsdWUpID8gJyonIDogJyAnKTsKIAkJfQotCQlwICs9IHNwcmludGYocCwgIi0tXG5kZWJ1Z19sZXZlbCA9IDB4JTA4WCAoKiA9IGVuYWJsZWQpXG4iLAorCQlzZXFfcHJpbnRmKG0sICItLVxuZGVidWdfbGV2ZWwgPSAweCUwOFggKCogPSBlbmFibGVkKVxuIiwKIAkJCSAgICAgYWNwaV9kYmdfbGV2ZWwpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlwICs9IHNwcmludGYocCwgIkludmFsaWQgZGVidWcgb3B0aW9uXG4iKTsKLQkJYnJlYWs7CiAJfQotCi0gICAgICBlbmQ6Ci0Jc2l6ZSA9IChwIC0gcGFnZSk7Ci0JaWYgKHNpemUgPD0gb2ZmICsgY291bnQpCi0JCSplb2YgPSAxOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0Jc2l6ZSAtPSBvZmY7Ci0JaWYgKHNpemUgPiBjb3VudCkKLQkJc2l6ZSA9IGNvdW50OwotCWlmIChzaXplIDwgMCkKLQkJc2l6ZSA9IDA7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYWNwaV9zeXN0ZW1fd3JpdGVfZGVidWcoc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IGFjcGlfc3lzdGVtX2RlYnVnX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWNwaV9zeXN0ZW1fZGVidWdfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9zeXN0ZW1fZGVidWdfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBkZWJ1Z19zdHJpbmdbMTJdID0geyAnXDAnIH07CiAKQEAgLTI3OSw3ICsyNjIsNyBAQAogCiAJZGVidWdfc3RyaW5nW2NvdW50XSA9ICdcMCc7CiAKLQlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKWRhdGEpIHsKKwlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKVBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YSkgewogCWNhc2UgMDoKIAkJYWNwaV9kYmdfbGF5ZXIgPSBzaW1wbGVfc3RydG91bChkZWJ1Z19zdHJpbmcsIE5VTEwsIDApOwogCQlicmVhazsKQEAgLTI5Miw2ICsyNzUsMTUgQEAKIAogCXJldHVybiBjb3VudDsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9zeXN0ZW1fZGVidWdfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBhY3BpX3N5c3RlbV9kZWJ1Z19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gYWNwaV9zeXN0ZW1fZGVidWdfcHJvY193cml0ZSwKK307CiAjZW5kaWYKIAogaW50IF9faW5pdCBhY3BpX2RlYnVnX2luaXQodm9pZCkKQEAgLTMwMywyNCArMjk1LDE4IEBACiAKIAkvKiAnZGVidWdfbGF5ZXInIFtSL1ddICovCiAJbmFtZSA9IEFDUElfU1lTVEVNX0ZJTEVfREVCVUdfTEFZRVI7Ci0JZW50cnkgPQotCSAgICBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCQkgICBhY3BpX3Jvb3RfZGlyLCBhY3BpX3N5c3RlbV9yZWFkX2RlYnVnLAotCQkJCSAgICh2b2lkICopMCk7Ci0JaWYgKGVudHJ5KQotCQllbnRyeS0+d3JpdGVfcHJvYyA9IGFjcGlfc3lzdGVtX3dyaXRlX2RlYnVnOwotCWVsc2UKKwllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEobmFtZSwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAorCQkJCSBhY3BpX3Jvb3RfZGlyLCAmYWNwaV9zeXN0ZW1fZGVidWdfcHJvY19mb3BzLAorCQkJCSAodm9pZCAqKTApOworCWlmICghZW50cnkpCiAJCWdvdG8gRXJyb3I7CiAKIAkvKiAnZGVidWdfbGV2ZWwnIFtSL1ddICovCiAJbmFtZSA9IEFDUElfU1lTVEVNX0ZJTEVfREVCVUdfTEVWRUw7Ci0JZW50cnkgPQotCSAgICBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCQkgICBhY3BpX3Jvb3RfZGlyLCBhY3BpX3N5c3RlbV9yZWFkX2RlYnVnLAotCQkJCSAgICh2b2lkICopMSk7Ci0JaWYgKGVudHJ5KQotCQllbnRyeS0+d3JpdGVfcHJvYyA9IGFjcGlfc3lzdGVtX3dyaXRlX2RlYnVnOwotCWVsc2UKKwllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEobmFtZSwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAorCQkJCSBhY3BpX3Jvb3RfZGlyLCAmYWNwaV9zeXN0ZW1fZGVidWdfcHJvY19mb3BzLAorCQkJCSAodm9pZCAqKTEpOworCWlmICghZW50cnkpCiAJCWdvdG8gRXJyb3I7CiAKICAgICAgIERvbmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCBlZmI5NTlkLi4zYTJjZmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX0RPQ0tfRFJJVkVSX0RFU0NSSVBUSU9OICJBQ1BJIERvY2sgU3RhdGlvbiBEcml2ZXIiCiAKIEFDUElfTU9EVUxFX05BTUUoImRvY2siKTsKQEAgLTIzMSwxOCArMjMzLDE2IEBACiBzdGF0aWMgaW50IGlzX2JhdHRlcnkoYWNwaV9oYW5kbGUgaGFuZGxlKQogewogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwogCWludCByZXQgPSAxOwogCi0JaWYgKCFBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKSkpCisJaWYgKCFBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmaW5mbykpKQogCQlyZXR1cm4gMDsKLQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7CiAJaWYgKCEoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkpCiAJCXJldCA9IDA7CiAJZWxzZQotCQlyZXQgPSAhc3RyY21wKCJQTlAwQzBBIiwgaW5mby0+aGFyZHdhcmVfaWQudmFsdWUpOworCQlyZXQgPSAhc3RyY21wKCJQTlAwQzBBIiwgaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nKTsKIAotCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlrZnJlZShpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IDM5MWYzMzEuLmY3MDc5NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC00MiwxMiArNDIsMTIgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2RlZmluZSBBQ1BJX0VDX0NMQVNTCQkJImVtYmVkZGVkX2NvbnRyb2xsZXIiCiAjZGVmaW5lIEFDUElfRUNfREVWSUNFX05BTUUJCSJFbWJlZGRlZCBDb250cm9sbGVyIgogI2RlZmluZSBBQ1BJX0VDX0ZJTEVfSU5GTwkJImluZm8iCiAKLSN1bmRlZiBQUkVGSVgKICNkZWZpbmUgUFJFRklYCQkJCSJBQ1BJOiBFQzogIgogCiAvKiBFQyBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTY4LDE1ICs2OCwxMyBAQAogI2RlZmluZSBBQ1BJX0VDX0RFTEFZCQk1MDAJLyogV2FpdCA1MDBtcyBtYXguIGR1cmluZyBFQyBvcHMgKi8KICNkZWZpbmUgQUNQSV9FQ19VREVMQVlfR0xLCTEwMDAJLyogV2FpdCAxbXMgbWF4LiB0byBnZXQgZ2xvYmFsIGxvY2sgKi8KICNkZWZpbmUgQUNQSV9FQ19DREVMQVkJCTEwCS8qIFdhaXQgMTB1cyBiZWZvcmUgcG9sbGluZyBFQyAqLworI2RlZmluZSBBQ1BJX0VDX01TSV9VREVMQVkJNTUwCS8qIFdhaXQgNTUwdXMgZm9yIE1TSSBFQyAqLwogCiAjZGVmaW5lIEFDUElfRUNfU1RPUk1fVEhSRVNIT0xEIDgJLyogbnVtYmVyIG9mIGZhbHNlIGludGVycnVwdHMKIAkJCQkJICAgcGVyIG9uZSB0cmFuc2FjdGlvbiAqLwogCiBlbnVtIHsKIAlFQ19GTEFHU19RVUVSWV9QRU5ESU5HLAkJLyogUXVlcnkgaXMgcGVuZGluZyAqLwotCUVDX0ZMQUdTX0dQRV9NT0RFLAkJLyogRXhwZWN0IEdQRSB0byBiZSBzZW50Ci0JCQkJCSAqIGZvciBzdGF0dXMgY2hhbmdlICovCi0JRUNfRkxBR1NfTk9fR1BFLAkJLyogRG9uJ3QgdXNlIEdQRSBtb2RlICovCiAJRUNfRkxBR1NfR1BFX1NUT1JNLAkJLyogR1BFIHN0b3JtIGRldGVjdGVkICovCiAJRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVECS8qIEhhbmRsZXJzIGZvciBHUEUgYW5kCiAJCQkJCSAqIE9wUmVnIGFyZSBpbnN0YWxsZWQgKi8KQEAgLTE3MCw3ICsxNjgsNyBAQAogCWFjcGlfZWNfd3JpdGVfY21kKGVjLCBlYy0+Y3Vyci0+Y29tbWFuZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdwZV90cmFuc2FjdGlvbihzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IHN0YXR1cykKK3N0YXRpYyB2b2lkIGFkdmFuY2VfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBzdGF0dXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmN1cnJfbG9jaywgZmxhZ3MpOwpAQCAtMjAxLDI5ICsxOTksNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX3dhaXQoc3RydWN0IGFjcGlfZWMgKmVjKQotewotCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoZWMtPndhaXQsIGVjX3RyYW5zYWN0aW9uX2RvbmUoZWMpLAotCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSkpKQotCQlyZXR1cm4gMDsKLQkvKiB0cnkgcmVzdGFydCBjb21tYW5kIGlmIHdlIGdldCBhbnkgZmFsc2UgaW50ZXJydXB0cyAqLwotCWlmIChlYy0+Y3Vyci0+aXJxX2NvdW50ICYmCi0JICAgIChhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19JQkYpID09IDApIHsKLQkJcHJfZGVidWcoUFJFRklYICJjb250cm9sbGVyIHJlc2V0LCByZXN0YXJ0IHRyYW5zYWN0aW9uXG4iKTsKLQkJc3RhcnRfdHJhbnNhY3Rpb24oZWMpOwotCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGVjLT53YWl0LCBlY190cmFuc2FjdGlvbl9kb25lKGVjKSwKLQkJCQkJbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKSkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JLyogbWlzc2luZyBHUEVzLCBzd2l0Y2ggYmFjayB0byBwb2xsIG1vZGUgKi8KLQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQlwcl9pbmZvKFBSRUZJWCAibWlzc2luZyBjb25maXJtYXRpb25zLCAiCi0JCQkJInN3aXRjaCBvZmYgaW50ZXJydXB0IG1vZGUuXG4iKTsKLQlzZXRfYml0KEVDX0ZMQUdTX05PX0dQRSwgJmVjLT5mbGFncyk7Ci0JY2xlYXJfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgYWNwaV9lY19ncGVfcXVlcnkodm9pZCAqZWNfY3h0KTsKIAogc3RhdGljIGludCBlY19jaGVja19zY2koc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBzdGF0ZSkKQEAgLTIzNiw0MyArMjExLDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGVjX2RlbGF5KHZvaWQpCi17Ci0JLyogRUMgaW4gTVNJIG5vdGVib29rcyBkb24ndCB0b2xlcmF0ZSBkZWxheXMgb3RoZXIgdGhhbiA1NTAgdXNlYyAqLwotCWlmIChFQ19GTEFHU19NU0kpCi0JCXVkZWxheShBQ1BJX0VDX0RFTEFZKTsKLQllbHNlCi0JCS8qIFVzZSBzaG9ydGVzdCBzbGVlcCBhdmFpbGFibGUgKi8KLQkJbXNsZWVwKDEpOwotfQotCiBzdGF0aWMgaW50IGVjX3BvbGwoc3RydWN0IGFjcGlfZWMgKmVjKQogewotCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKTsKLQl1ZGVsYXkoQUNQSV9FQ19DREVMQVkpOwotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWxheSkpIHsKLQkJZ3BlX3RyYW5zYWN0aW9uKGVjLCBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSk7Ci0JCWVjX2RlbGF5KCk7Ci0JCWlmIChlY190cmFuc2FjdGlvbl9kb25lKGVjKSkKLQkJCXJldHVybiAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlcGVhdCA9IDI7IC8qIG51bWJlciBvZiBjb21tYW5kIHJlc3RhcnRzICovCisJd2hpbGUgKHJlcGVhdC0tKSB7CisJCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsKKwkJCW1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSk7CisJCWRvIHsKKwkJCS8qIGRvbid0IHNsZWVwIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyAqLworCQkJaWYgKEVDX0ZMQUdTX01TSSB8fCBpcnFzX2Rpc2FibGVkKCkpIHsKKwkJCQl1ZGVsYXkoQUNQSV9FQ19NU0lfVURFTEFZKTsKKwkJCQlpZiAoZWNfdHJhbnNhY3Rpb25fZG9uZShlYykpCisJCQkJCXJldHVybiAwOworCQkJfSBlbHNlIHsKKwkJCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGVjLT53YWl0LAorCQkJCQkJZWNfdHJhbnNhY3Rpb25fZG9uZShlYyksCisJCQkJCQltc2Vjc190b19qaWZmaWVzKDEpKSkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlhZHZhbmNlX3RyYW5zYWN0aW9uKGVjLCBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSk7CisJCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSk7CisJCWlmICghZWMtPmN1cnItPmlycV9jb3VudCB8fAorCQkgICAgKGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpICYgQUNQSV9FQ19GTEFHX0lCRikpCisJCQlicmVhazsKKwkJLyogdHJ5IHJlc3RhcnQgY29tbWFuZCBpZiB3ZSBnZXQgYW55IGZhbHNlIGludGVycnVwdHMgKi8KKwkJcHJfZGVidWcoUFJFRklYICJjb250cm9sbGVyIHJlc2V0LCByZXN0YXJ0IHRyYW5zYWN0aW9uXG4iKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKKwkJc3RhcnRfdHJhbnNhY3Rpb24oZWMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlYy0+Y3Vycl9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAtRVRJTUU7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY190cmFuc2FjdGlvbl91bmxvY2tlZChzdHJ1Y3QgYWNwaV9lYyAqZWMsCi0JCQkJCXN0cnVjdCB0cmFuc2FjdGlvbiAqdCwKLQkJCQkJaW50IGZvcmNlX3BvbGwpCisJCQkJCXN0cnVjdCB0cmFuc2FjdGlvbiAqdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgcmV0ID0gMDsKIAlwcl9kZWJ1ZyhQUkVGSVggInRyYW5zYWN0aW9uIHN0YXJ0XG4iKTsKIAkvKiBkaXNhYmxlIEdQRSBkdXJpbmcgdHJhbnNhY3Rpb24gaWYgc3Rvcm0gaXMgZGV0ZWN0ZWQgKi8KIAlpZiAodGVzdF9iaXQoRUNfRkxBR1NfR1BFX1NUT1JNLCAmZWMtPmZsYWdzKSkgewotCQljbGVhcl9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpOwogCQlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOwogCX0KIAlpZiAoRUNfRkxBR1NfTVNJKQotCQl1ZGVsYXkoQUNQSV9FQ19ERUxBWSk7CisJCXVkZWxheShBQ1BJX0VDX01TSV9VREVMQVkpOwogCS8qIHN0YXJ0IHRyYW5zYWN0aW9uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIHRtcCk7CiAJLyogZm9sbG93aW5nIHR3byBhY3Rpb25zIHNob3VsZCBiZSBrZXB0IGF0b21pYyAqLwpAQCAtMjgxLDExICsyNjQsNyBAQAogCWlmIChlYy0+Y3Vyci0+Y29tbWFuZCA9PSBBQ1BJX0VDX0NPTU1BTkRfUVVFUlkpCiAJCWNsZWFyX2JpdChFQ19GTEFHU19RVUVSWV9QRU5ESU5HLCAmZWMtPmZsYWdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlYy0+Y3Vycl9sb2NrLCB0bXApOwotCS8qIGlmIHdlIHNlbGVjdGVkIHBvbGwgbW9kZSBvciBmYWlsZWQgaW4gR1BFLW1vZGUgZG8gYSBwb2xsIGxvb3AgKi8KLQlpZiAoZm9yY2VfcG9sbCB8fAotCSAgICAhdGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpIHx8Ci0JICAgIGFjcGlfZWNfd2FpdChlYykpCi0JCXJldCA9IGVjX3BvbGwoZWMpOworCXJldCA9IGVjX3BvbGwoZWMpOwogCXByX2RlYnVnKFBSRUZJWCAidHJhbnNhY3Rpb24gZW5kXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmN1cnJfbG9jaywgdG1wKTsKIAllYy0+Y3VyciA9IE5VTEw7CkBAIC0yOTUsOCArMjc0LDcgQEAKIAkJZWNfY2hlY2tfc2NpKGVjLCBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSk7CiAJCS8qIGl0IGlzIHNhZmUgdG8gZW5hYmxlIEdQRSBvdXRzaWRlIG9mIHRyYW5zYWN0aW9uICovCiAJCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKLQl9IGVsc2UgaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKSAmJgotCQkgICB0LT5pcnFfY291bnQgPiBBQ1BJX0VDX1NUT1JNX1RIUkVTSE9MRCkgeworCX0gZWxzZSBpZiAodC0+aXJxX2NvdW50ID4gQUNQSV9FQ19TVE9STV9USFJFU0hPTEQpIHsKIAkJcHJfaW5mbyhQUkVGSVggIkdQRSBzdG9ybSBkZXRlY3RlZCwgIgogCQkJInRyYW5zYWN0aW9ucyB3aWxsIHVzZSBwb2xsaW5nIG1vZGVcbiIpOwogCQlzZXRfYml0KEVDX0ZMQUdTX0dQRV9TVE9STSwgJmVjLT5mbGFncyk7CkBAIC0zMTQsMTYgKzI5MiwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKTsKIAkvKiBpbnRlcnJ1cHQgd2FpdCBtYW51YWxseSBpZiBHUEUgbW9kZSBpcyBub3QgYWN0aXZlICovCi0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gdGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpID8KLQkJbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKSA6IG1zZWNzX3RvX2ppZmZpZXMoMSk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSkKLQkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChlYy0+d2FpdCwgZWNfY2hlY2tfaWJmMChlYyksIHRpbWVvdXQpKQorCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGVjLT53YWl0LCBlY19jaGVja19pYmYwKGVjKSwKKwkJCQkJbXNlY3NfdG9famlmZmllcygxKSkpCiAJCQlyZXR1cm4gMDsKIAlyZXR1cm4gLUVUSU1FOwogfQogCi1zdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjLCBzdHJ1Y3QgdHJhbnNhY3Rpb24gKnQsCi0JCQkgICAgICAgaW50IGZvcmNlX3BvbGwpCitzdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjLCBzdHJ1Y3QgdHJhbnNhY3Rpb24gKnQpCiB7CiAJaW50IHN0YXR1czsKIAl1MzIgZ2xrOwpAQCAtMzQ1LDcgKzMyMSw3IEBACiAJCXN0YXR1cyA9IC1FVElNRTsKIAkJZ290byBlbmQ7CiAJfQotCXN0YXR1cyA9IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoZWMsIHQsIGZvcmNlX3BvbGwpOworCXN0YXR1cyA9IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoZWMsIHQpOwogZW5kOgogCWlmIChlYy0+Z2xvYmFsX2xvY2spCiAJCWFjcGlfcmVsZWFzZV9nbG9iYWxfbG9jayhnbGspOwpAQCAtMzU0LDEwICszMzAsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qCi0gKiBOb3RlOiBzYW1zdW5nIG52NTAwMCBkb2Vzbid0IHdvcmsgd2l0aCBlYyBidXJzdCBtb2RlLgotICogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5ODAKLSAqLwogc3RhdGljIGludCBhY3BpX2VjX2J1cnN0X2VuYWJsZShzdHJ1Y3QgYWNwaV9lYyAqZWMpCiB7CiAJdTggZDsKQEAgLTM2NSw3ICszMzcsNyBAQAogCQkJCS53ZGF0YSA9IE5VTEwsIC5yZGF0YSA9ICZkLAogCQkJCS53bGVuID0gMCwgLnJsZW4gPSAxfTsKIAotCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCwgMCk7CisJcmV0dXJuIGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0KTsKIH0KIAogc3RhdGljIGludCBhY3BpX2VjX2J1cnN0X2Rpc2FibGUoc3RydWN0IGFjcGlfZWMgKmVjKQpAQCAtMzc1LDcgKzM0Nyw3IEBACiAJCQkJLndsZW4gPSAwLCAucmxlbiA9IDB9OwogCiAJcmV0dXJuIChhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19CVVJTVCkgPwotCQkJCWFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0LCAwKSA6IDA7CisJCQkJYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQpIDogMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2VjX3JlYWQoc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBhZGRyZXNzLCB1OCAqIGRhdGEpCkBAIC0zODYsNyArMzU4LDcgQEAKIAkJCQkud2RhdGEgPSAmYWRkcmVzcywgLnJkYXRhID0gJmQsCiAJCQkJLndsZW4gPSAxLCAucmxlbiA9IDF9OwogCi0JcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQsIDApOworCXJlc3VsdCA9IGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0KTsKIAkqZGF0YSA9IGQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTM5OCw3ICszNzAsNyBAQAogCQkJCS53ZGF0YSA9IHdkYXRhLCAucmRhdGEgPSBOVUxMLAogCQkJCS53bGVuID0gMiwgLnJsZW4gPSAwfTsKIAotCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCwgMCk7CisJcmV0dXJuIGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0KTsKIH0KIAogLyoKQEAgLTQ2Niw3ICs0MzgsNyBAQAogCWlmICghZmlyc3RfZWMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIGFjcGlfZWNfdHJhbnNhY3Rpb24oZmlyc3RfZWMsICZ0LCBmb3JjZV9wb2xsKTsKKwlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihmaXJzdF9lYywgJnQpOwogfQogCiBFWFBPUlRfU1lNQk9MKGVjX3RyYW5zYWN0aW9uKTsKQEAgLTQ4Nyw3ICs0NTksNyBAQAogCSAqIGJpdCB0byBiZSBjbGVhcmVkIChhbmQgdGh1cyBjbGVhcmluZyB0aGUgaW50ZXJydXB0IHNvdXJjZSkuCiAJICovCiAKLQlyZXN1bHQgPSBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCAmdCwgMCk7CisJcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbihlYywgJnQpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKQEAgLTU3MCwyOCArNTQyLDEwIEBACiAJcHJfZGVidWcoUFJFRklYICJ+fn4+IGludGVycnVwdFxuIik7CiAJc3RhdHVzID0gYWNwaV9lY19yZWFkX3N0YXR1cyhlYyk7CiAKLQlpZiAodGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpKSB7Ci0JCWdwZV90cmFuc2FjdGlvbihlYywgc3RhdHVzKTsKLQkJaWYgKGVjX3RyYW5zYWN0aW9uX2RvbmUoZWMpICYmCi0JCSAgICAoc3RhdHVzICYgQUNQSV9FQ19GTEFHX0lCRikgPT0gMCkKLQkJCXdha2VfdXAoJmVjLT53YWl0KTsKLQl9Ci0KKwlhZHZhbmNlX3RyYW5zYWN0aW9uKGVjLCBzdGF0dXMpOworCWlmIChlY190cmFuc2FjdGlvbl9kb25lKGVjKSAmJiAoc3RhdHVzICYgQUNQSV9FQ19GTEFHX0lCRikgPT0gMCkKKwkJd2FrZV91cCgmZWMtPndhaXQpOwogCWVjX2NoZWNrX3NjaShlYywgc3RhdHVzKTsKLQlpZiAoIXRlc3RfYml0KEVDX0ZMQUdTX0dQRV9NT0RFLCAmZWMtPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoRUNfRkxBR1NfTk9fR1BFLCAmZWMtPmZsYWdzKSkgewotCQkvKiB0aGlzIGlzIG5vbi1xdWVyeSwgbXVzdCBiZSBjb25maXJtYXRpb24gKi8KLQkJaWYgKCF0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7Ci0JCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJCXByX2luZm8oUFJFRklYICJub24tcXVlcnkgaW50ZXJydXB0IHJlY2VpdmVkLCIKLQkJCQkJIiBzd2l0Y2hpbmcgdG8gaW50ZXJydXB0IG1vZGVcbiIpOwotCQl9IGVsc2UgewotCQkJLyogaHVzaCwgU1RPUk0gc3dpdGNoZXMgdGhlIG1vZGUgZXZlcnkgdHJhbnNhY3Rpb24gKi8KLQkJCXByX2RlYnVnKFBSRUZJWCAibm9uLXF1ZXJ5IGludGVycnVwdCByZWNlaXZlZCwiCi0JCQkJIiBzd2l0Y2hpbmcgdG8gaW50ZXJydXB0IG1vZGVcbiIpOwotCQl9Ci0JCXNldF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpOwotCX0KIAlyZXR1cm4gQUNQSV9JTlRFUlJVUFRfSEFORExFRDsKIH0KIApAQCAtNjE3LDcgKzU3MSw4IEBACiAJaWYgKGJpdHMgIT0gOCAmJiBhY3BpX3N0cmljdCkKIAkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKLQlhY3BpX2VjX2J1cnN0X2VuYWJsZShlYyk7CisJaWYgKEVDX0ZMQUdTX01TSSkKKwkJYWNwaV9lY19idXJzdF9lbmFibGUoZWMpOwogCiAJaWYgKGZ1bmN0aW9uID09IEFDUElfUkVBRCkgewogCQlyZXN1bHQgPSBhY3BpX2VjX3JlYWQoZWMsIGFkZHJlc3MsICZ0ZW1wKTsKQEAgLTYzOCw3ICs1OTMsOCBAQAogCQl9CiAJfQogCi0JYWNwaV9lY19idXJzdF9kaXNhYmxlKGVjKTsKKwlpZiAoRUNfRkxBR1NfTVNJKQorCQlhY3BpX2VjX2J1cnN0X2Rpc2FibGUoZWMpOwogCiAJc3dpdGNoIChyZXN1bHQpIHsKIAljYXNlIC1FSU5WQUw6CkBAIC03ODgsMTA2ICs3NDQsNiBAQAogCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKIH0KIAotc3RhdGljIHZvaWQgZWNfcmVtb3ZlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKLXsKLQlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAotCQkJCUFDUElfQURSX1NQQUNFX0VDLCAmYWNwaV9lY19zcGFjZV9oYW5kbGVyKSkpCi0JCXByX2VycihQUkVGSVggImZhaWxlZCB0byByZW1vdmUgc3BhY2UgaGFuZGxlclxuIik7Ci0JaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlYy0+Z3BlLAotCQkJCSZhY3BpX2VjX2dwZV9oYW5kbGVyKSkpCi0JCXByX2VycihQUkVGSVggImZhaWxlZCB0byByZW1vdmUgZ3BlIGhhbmRsZXJcbiIpOwotCWNsZWFyX2JpdChFQ19GTEFHU19IQU5ETEVSU19JTlNUQUxMRUQsICZlYy0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGFjcGlfZWNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBhY3BpX2VjICplYyA9IE5VTEw7Ci0KLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9FQ19ERVZJQ0VfTkFNRSk7Ci0Jc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfRUNfQ0xBU1MpOwotCi0JLyogQ2hlY2sgZm9yIGJvb3QgRUMgKi8KLQlpZiAoYm9vdF9lYyAmJgotCSAgICAoYm9vdF9lYy0+aGFuZGxlID09IGRldmljZS0+aGFuZGxlIHx8Ci0JICAgICBib290X2VjLT5oYW5kbGUgPT0gQUNQSV9ST09UX09CSkVDVCkpIHsKLQkJZWMgPSBib290X2VjOwotCQlib290X2VjID0gTlVMTDsKLQl9IGVsc2UgewotCQllYyA9IG1ha2VfYWNwaV9lYygpOwotCQlpZiAoIWVjKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWlmIChlY19wYXJzZV9kZXZpY2UoZGV2aWNlLT5oYW5kbGUsIDAsIGVjLCBOVUxMKSAhPQotCQlBRV9DVFJMX1RFUk1JTkFURSkgewotCQkJa2ZyZWUoZWMpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZWMtPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwotCi0JLyogRmluZCBhbmQgcmVnaXN0ZXIgYWxsIHF1ZXJ5IG1ldGhvZHMgKi8KLQlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9NRVRIT0QsIGVjLT5oYW5kbGUsIDEsCi0JCQkgICAgYWNwaV9lY19yZWdpc3Rlcl9xdWVyeV9tZXRob2RzLCBlYywgTlVMTCk7Ci0KLQlpZiAoIWZpcnN0X2VjKQotCQlmaXJzdF9lYyA9IGVjOwotCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBlYzsKLQlhY3BpX2VjX2FkZF9mcyhkZXZpY2UpOwotCXByX2luZm8oUFJFRklYICJHUEUgPSAweCVseCwgSS9POiBjb21tYW5kL3N0YXR1cyA9IDB4JWx4LCBkYXRhID0gMHglbHhcbiIsCi0JCQkgIGVjLT5ncGUsIGVjLT5jb21tYW5kX2FkZHIsIGVjLT5kYXRhX2FkZHIpOwotCXByX2luZm8oUFJFRklYICJkcml2ZXIgc3RhcnRlZCBpbiAlcyBtb2RlXG4iLAotCQkodGVzdF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpKT8iaW50ZXJydXB0IjoicG9sbCIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFjcGlfZWNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgYWNwaV9lYyAqZWM7Ci0Jc3RydWN0IGFjcGlfZWNfcXVlcnlfaGFuZGxlciAqaGFuZGxlciwgKnRtcDsKLQotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCW11dGV4X2xvY2soJmVjLT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGFuZGxlciwgdG1wLCAmZWMtPmxpc3QsIG5vZGUpIHsKLQkJbGlzdF9kZWwoJmhhbmRsZXItPm5vZGUpOwotCQlrZnJlZShoYW5kbGVyKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZlYy0+bG9jayk7Ci0JYWNwaV9lY19yZW1vdmVfZnMoZGV2aWNlKTsKLQlkZXZpY2UtPmRyaXZlcl9kYXRhID0gTlVMTDsKLQlpZiAoZWMgPT0gZmlyc3RfZWMpCi0JCWZpcnN0X2VjID0gTlVMTDsKLQlrZnJlZShlYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cwotZWNfcGFyc2VfaW9fcG9ydHMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLCB2b2lkICpjb250ZXh0KQotewotCXN0cnVjdCBhY3BpX2VjICplYyA9IGNvbnRleHQ7Ci0KLQlpZiAocmVzb3VyY2UtPnR5cGUgIT0gQUNQSV9SRVNPVVJDRV9UWVBFX0lPKQotCQlyZXR1cm4gQUVfT0s7Ci0KLQkvKgotCSAqIFRoZSBmaXJzdCBhZGRyZXNzIHJlZ2lvbiByZXR1cm5lZCBpcyB0aGUgZGF0YSBwb3J0LCBhbmQKLQkgKiB0aGUgc2Vjb25kIGFkZHJlc3MgcmVnaW9uIHJldHVybmVkIGlzIHRoZSBzdGF0dXMvY29tbWFuZAotCSAqIHBvcnQuCi0JICovCi0JaWYgKGVjLT5kYXRhX2FkZHIgPT0gMCkKLQkJZWMtPmRhdGFfYWRkciA9IHJlc291cmNlLT5kYXRhLmlvLm1pbmltdW07Ci0JZWxzZSBpZiAoZWMtPmNvbW1hbmRfYWRkciA9PSAwKQotCQllYy0+Y29tbWFuZF9hZGRyID0gcmVzb3VyY2UtPmRhdGEuaW8ubWluaW11bTsKLQllbHNlCi0JCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKLQotCXJldHVybiBBRV9PSzsKLX0KLQogc3RhdGljIGludCBlY19pbnN0YWxsX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC05MjQsMTggKzc4MCw1NCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFjcGlfZWNfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBlY19yZW1vdmVfaGFuZGxlcnMoc3RydWN0IGFjcGlfZWMgKmVjKQogewotCXN0cnVjdCBhY3BpX2VjICplYzsKLQlpbnQgcmV0ID0gMDsKKwlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAorCQkJCUFDUElfQURSX1NQQUNFX0VDLCAmYWNwaV9lY19zcGFjZV9oYW5kbGVyKSkpCisJCXByX2VycihQUkVGSVggImZhaWxlZCB0byByZW1vdmUgc3BhY2UgaGFuZGxlclxuIik7CisJaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlYy0+Z3BlLAorCQkJCSZhY3BpX2VjX2dwZV9oYW5kbGVyKSkpCisJCXByX2VycihQUkVGSVggImZhaWxlZCB0byByZW1vdmUgZ3BlIGhhbmRsZXJcbiIpOworCWNsZWFyX2JpdChFQ19GTEFHU19IQU5ETEVSU19JTlNUQUxMRUQsICZlYy0+ZmxhZ3MpOworfQogCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOworc3RhdGljIGludCBhY3BpX2VjX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBOVUxMOworCWludCByZXQ7CiAKLQllYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX0VDX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9FQ19DTEFTUyk7CiAKLQlpZiAoIWVjKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBDaGVjayBmb3IgYm9vdCBFQyAqLworCWlmIChib290X2VjICYmCisJICAgIChib290X2VjLT5oYW5kbGUgPT0gZGV2aWNlLT5oYW5kbGUgfHwKKwkgICAgIGJvb3RfZWMtPmhhbmRsZSA9PSBBQ1BJX1JPT1RfT0JKRUNUKSkgeworCQllYyA9IGJvb3RfZWM7CisJCWJvb3RfZWMgPSBOVUxMOworCX0gZWxzZSB7CisJCWVjID0gbWFrZV9hY3BpX2VjKCk7CisJCWlmICghZWMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKGVjX3BhcnNlX2RldmljZShkZXZpY2UtPmhhbmRsZSwgMCwgZWMsIE5VTEwpICE9CisJCUFFX0NUUkxfVEVSTUlOQVRFKSB7CisJCQlrZnJlZShlYyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllYy0+aGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CisKKwkvKiBGaW5kIGFuZCByZWdpc3RlciBhbGwgcXVlcnkgbWV0aG9kcyAqLworCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX01FVEhPRCwgZWMtPmhhbmRsZSwgMSwKKwkJCSAgICBhY3BpX2VjX3JlZ2lzdGVyX3F1ZXJ5X21ldGhvZHMsIGVjLCBOVUxMKTsKKworCWlmICghZmlyc3RfZWMpCisJCWZpcnN0X2VjID0gZWM7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVjOworCWFjcGlfZWNfYWRkX2ZzKGRldmljZSk7CisJcHJfaW5mbyhQUkVGSVggIkdQRSA9IDB4JWx4LCBJL086IGNvbW1hbmQvc3RhdHVzID0gMHglbHgsIGRhdGEgPSAweCVseFxuIiwKKwkJCSAgZWMtPmdwZSwgZWMtPmNvbW1hbmRfYWRkciwgZWMtPmRhdGFfYWRkcik7CiAKIAlyZXQgPSBlY19pbnN0YWxsX2hhbmRsZXJzKGVjKTsKIApAQCAtOTQ0LDE5ICs4MzYsNTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFjcGlfZWNfc3RvcChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCitzdGF0aWMgaW50IGFjcGlfZWNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWM7CisJc3RydWN0IGFjcGlfZWNfcXVlcnlfaGFuZGxlciAqaGFuZGxlciwgKnRtcDsKKwogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKLQllYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQlpZiAoIWVjKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllY19yZW1vdmVfaGFuZGxlcnMoZWMpOwogCisJZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJZWNfcmVtb3ZlX2hhbmRsZXJzKGVjKTsKKwltdXRleF9sb2NrKCZlYy0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhbmRsZXIsIHRtcCwgJmVjLT5saXN0LCBub2RlKSB7CisJCWxpc3RfZGVsKCZoYW5kbGVyLT5ub2RlKTsKKwkJa2ZyZWUoaGFuZGxlcik7CisJfQorCW11dGV4X3VubG9jaygmZWMtPmxvY2spOworCWFjcGlfZWNfcmVtb3ZlX2ZzKGRldmljZSk7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJaWYgKGVjID09IGZpcnN0X2VjKQorCQlmaXJzdF9lYyA9IE5VTEw7CisJa2ZyZWUoZWMpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgYWNwaV9zdGF0dXMKK2VjX3BhcnNlX2lvX3BvcnRzKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBjb250ZXh0OworCisJaWYgKHJlc291cmNlLT50eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9JTykKKwkJcmV0dXJuIEFFX09LOworCisJLyoKKwkgKiBUaGUgZmlyc3QgYWRkcmVzcyByZWdpb24gcmV0dXJuZWQgaXMgdGhlIGRhdGEgcG9ydCwgYW5kCisJICogdGhlIHNlY29uZCBhZGRyZXNzIHJlZ2lvbiByZXR1cm5lZCBpcyB0aGUgc3RhdHVzL2NvbW1hbmQKKwkgKiBwb3J0LgorCSAqLworCWlmIChlYy0+ZGF0YV9hZGRyID09IDApCisJCWVjLT5kYXRhX2FkZHIgPSByZXNvdXJjZS0+ZGF0YS5pby5taW5pbXVtOworCWVsc2UgaWYgKGVjLT5jb21tYW5kX2FkZHIgPT0gMCkKKwkJZWMtPmNvbW1hbmRfYWRkciA9IHJlc291cmNlLT5kYXRhLmlvLm1pbmltdW07CisJZWxzZQorCQlyZXR1cm4gQUVfQ1RSTF9URVJNSU5BVEU7CisKKwlyZXR1cm4gQUVfT0s7Cit9CisKIGludCBfX2luaXQgYWNwaV9ib290X2VjX2VuYWJsZSh2b2lkKQogewogCWlmICghYm9vdF9lYyB8fCB0ZXN0X2JpdChFQ19GTEFHU19IQU5ETEVSU19JTlNUQUxMRUQsICZib290X2VjLT5mbGFncykpCkBAIC0xMDU0LDggKzk4MCw2IEBACiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCS8qIFN0b3AgdXNpbmcgR1BFICovCi0Jc2V0X2JpdChFQ19GTEFHU19OT19HUEUsICZlYy0+ZmxhZ3MpOwotCWNsZWFyX2JpdChFQ19GTEFHU19HUEVfTU9ERSwgJmVjLT5mbGFncyk7CiAJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNjQsOCArOTg4LDYgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJLyogRW5hYmxlIHVzZSBvZiBHUEUgYmFjayAqLwotCWNsZWFyX2JpdChFQ19GTEFHU19OT19HUEUsICZlYy0+ZmxhZ3MpOwotCXNldF9iaXQoRUNfRkxBR1NfR1BFX01PREUsICZlYy0+ZmxhZ3MpOwogCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNzcsOCArOTk5LDYgQEAKIAkub3BzID0gewogCQkuYWRkID0gYWNwaV9lY19hZGQsCiAJCS5yZW1vdmUgPSBhY3BpX2VjX3JlbW92ZSwKLQkJLnN0YXJ0ID0gYWNwaV9lY19zdGFydCwKLQkJLnN0b3AgPSBhY3BpX2VjX3N0b3AsCiAJCS5zdXNwZW5kID0gYWNwaV9lY19zdXNwZW5kLAogCQkucmVzdW1lID0gYWNwaV9lY19yZXN1bWUsCiAJCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCmluZGV4IGFlYjdlNWYuLmM1MTEwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfU1lTVEVNX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgiZXZlbnQiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Zhbi5jIGIvZHJpdmVycy9hY3BpL2Zhbi5jCmluZGV4IDUzNjk4ZWEuLmY0MTk4NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9mYW4uYworKysgYi9kcml2ZXJzL2FjcGkvZmFuLmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX0ZBTl9DTEFTUwkJCSJmYW4iCiAjZGVmaW5lIEFDUElfRkFOX0ZJTEVfU1RBVEUJCSJzdGF0ZSIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2dsdWUuYyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKaW5kZXggYThhNWMyOS4uYzY2NDVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2dsdWUuYworKysgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCkBAIC0xMiw2ICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjZGVmaW5lIEFDUElfR0xVRV9ERUJVRwkwCiAjaWYgQUNQSV9HTFVFX0RFQlVHCiAjZGVmaW5lIERCRyh4Li4uKSBwcmludGsoUFJFRklYIHgpCkBAIC05MywxNSArOTUsMTMgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlzdHJ1Y3QgYWNwaV9maW5kX2NoaWxkICpmaW5kID0gY29udGV4dDsKIAotCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmaW5mbyk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCWluZm8gPSBidWZmZXIucG9pbnRlcjsKIAkJaWYgKGluZm8tPmFkZHJlc3MgPT0gZmluZC0+YWRkcmVzcykKIAkJCWZpbmQtPmhhbmRsZSA9IGhhbmRsZTsKLQkJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCQlrZnJlZShpbmZvKTsKIAl9CiAJcmV0dXJuIEFFX09LOwogfQpAQCAtMTIxLDcgKzEyMSw3IEBACiAKIC8qIExpbmsgQUNQSSBkZXZpY2VzIHdpdGggcGh5c2ljYWwgZGV2aWNlcyAqLwogc3RhdGljIHZvaWQgYWNwaV9nbHVlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSBoYW5kbGUsCi0JCQkJICAgdTMyIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KQorCQkJCSAgIHZvaWQgKmNvbnRleHQpCiB7CiAJLyogd2UgcHJvdmlkZSBhbiBlbXB0eSBoYW5kbGVyICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCmluZGV4IDExYTY5YjUuLjA3NGNmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCkBAIC0xLDQgKzEsMjQgQEAKLS8qIEZvciB1c2UgYnkgTGludXgvQUNQSSBpbmZyYXN0cnVjdHVyZSwgbm90IGRyaXZlcnMgKi8KKy8qCisgKiBhY3BpL2ludGVybmFsLmgKKyAqIEZvciB1c2UgYnkgTGludXgvQUNQSSBpbmZyYXN0cnVjdHVyZSwgbm90IGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKIAogaW50IGluaXRfYWNwaV9kZXZpY2Vfbm90aWZ5KHZvaWQpOwogaW50IGFjcGlfc2Nhbl9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEuYyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKaW5kZXggZDQ0MGNjZC4uMjAyZGQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL251bWEuYworKysgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX05VTUEJMHg4MDAwMDAwMAogI2RlZmluZSBfQ09NUE9ORU5UCUFDUElfTlVNQQogQUNQSV9NT0RVTEVfTkFNRSgibnVtYSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDU2OTFmMTYuLjU2MDcxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAlhY3BpX29zZF9leGVjX2NhbGxiYWNrIGZ1bmN0aW9uOwogCXZvaWQgKmNvbnRleHQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJaW50IHdhaXQ7CiB9OwogCiAjaWZkZWYgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFQKQEAgLTg4LDYgKzg5LDcgQEAKIAljaGFyIG5hbWVbNV07ICAgLyogb25seSBjYW4gaGF2ZSBhIGxlbmd0aCBvZiA0IGNoYXJzLCBtYWtlIHVzZSBvZiB0aGlzCiAJCQkgICBvbmUgaW5zdGVhZCBvZiByZXMtPm5hbWUsIG5vIG5lZWQgdG8ga2FsbG9jIHRoZW4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlX2xpc3Q7CisJaW50IGNvdW50OwogfTsKIAogc3RhdGljIExJU1RfSEVBRChyZXNvdXJjZV9saXN0X2hlYWQpOwpAQCAtNjk3LDMxICs2OTksMTIgQEAKIHN0YXRpYyB2b2lkIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGFjcGlfb3NfZHBjICpkcGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFjcGlfb3NfZHBjLCB3b3JrKTsKLQlpZiAoIWRwYykgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIChOVUxMKSBjb250ZXh0XG4iKTsKLQkJcmV0dXJuOwotCX0KKworCWlmIChkcGMtPndhaXQpCisJCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7CiAKIAlkcGMtPmZ1bmN0aW9uKGRwYy0+Y29udGV4dCk7CiAJa2ZyZWUoZHBjKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9vc19leGVjdXRlX2hwX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWNwaV9vc19kcGMsIHdvcmspOwotCWlmICghZHBjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgKE5VTEwpIGNvbnRleHRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKLQotCWRwYy0+ZnVuY3Rpb24oZHBjLT5jb250ZXh0KTsKLQlrZnJlZShkcGMpOwotCi0JcmV0dXJuOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzQ1LDE1ICs3MjgsMTEgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYzsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcXVldWU7Ci0Jd29ya19mdW5jX3QgZnVuYzsKIAlpbnQgcmV0OwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKIAkJCSAgIlNjaGVkdWxpbmcgZnVuY3Rpb24gWyVwKCVwKV0gZm9yIGRlZmVycmVkIGV4ZWN1dGlvbi5cbiIsCiAJCQkgIGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAKLQlpZiAoIWZ1bmN0aW9uKQotCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKLQogCS8qCiAJICogQWxsb2NhdGUvaW5pdGlhbGl6ZSBEUEMgc3RydWN0dXJlLiAgTm90ZSB0aGF0IHRoaXMgbWVtb3J5IHdpbGwgYmUKIAkgKiBmcmVlZCBieSB0aGUgY2FsbGVlLiAgVGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB3b3JrX3N0cnVjdCBsaXN0ICBpbiBhCkBAIC03NzgsOCArNzU3LDggQEAKIAkgKi8KIAlxdWV1ZSA9IGhwID8ga2FjcGlfaG90cGx1Z193cSA6CiAJCSh0eXBlID09IE9TTF9OT1RJRllfSEFORExFUiA/IGthY3BpX25vdGlmeV93cSA6IGthY3BpZF93cSk7Ci0JZnVuYyA9IGhwID8gYWNwaV9vc19leGVjdXRlX2hwX2RlZmVycmVkIDogYWNwaV9vc19leGVjdXRlX2RlZmVycmVkOwotCUlOSVRfV09SSygmZHBjLT53b3JrLCBmdW5jKTsKKwlkcGMtPndhaXQgPSBocCA/IDEgOiAwOworCUlOSVRfV09SSygmZHBjLT53b3JrLCBhY3BpX29zX2V4ZWN1dGVfZGVmZXJyZWQpOwogCXJldCA9IHF1ZXVlX3dvcmsocXVldWUsICZkcGMtPndvcmspOwogCiAJaWYgKCFyZXQpIHsKQEAgLTEzNTgsNiArMTMzNyw4OSBAQAogCXJldHVybiBBRV9TVVBQT1JUOwogfQogCitzdGF0aWMgaW5saW5lIGludCBhY3BpX3Jlc19saXN0X2FkZChzdHJ1Y3QgYWNwaV9yZXNfbGlzdCAqcmVzKQoreworCXN0cnVjdCBhY3BpX3Jlc19saXN0ICpyZXNfbGlzdF9lbGVtOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXNfbGlzdF9lbGVtLCAmcmVzb3VyY2VfbGlzdF9oZWFkLAorCQkJICAgIHJlc291cmNlX2xpc3QpIHsKKworCQlpZiAocmVzLT5yZXNvdXJjZV90eXBlID09IHJlc19saXN0X2VsZW0tPnJlc291cmNlX3R5cGUgJiYKKwkJICAgIHJlcy0+c3RhcnQgPT0gcmVzX2xpc3RfZWxlbS0+c3RhcnQgJiYKKwkJICAgIHJlcy0+ZW5kID09IHJlc19saXN0X2VsZW0tPmVuZCkgeworCisJCQkvKgorCQkJICogVGhlIFJlZ2lvbihhZGRyLGxlbikgYWxyZWFkeSBleGlzdCBpbiB0aGUgbGlzdCwKKwkJCSAqIGp1c3QgaW5jcmVhc2UgdGhlIGNvdW50CisJCQkgKi8KKworCQkJcmVzX2xpc3RfZWxlbS0+Y291bnQrKzsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmVzLT5jb3VudCA9IDE7CisJbGlzdF9hZGQoJnJlcy0+cmVzb3VyY2VfbGlzdCwgJnJlc291cmNlX2xpc3RfaGVhZCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3Jlc19saXN0X2RlbChzdHJ1Y3QgYWNwaV9yZXNfbGlzdCAqcmVzKQoreworCXN0cnVjdCBhY3BpX3Jlc19saXN0ICpyZXNfbGlzdF9lbGVtOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXNfbGlzdF9lbGVtLCAmcmVzb3VyY2VfbGlzdF9oZWFkLAorCQkJICAgIHJlc291cmNlX2xpc3QpIHsKKworCQlpZiAocmVzLT5yZXNvdXJjZV90eXBlID09IHJlc19saXN0X2VsZW0tPnJlc291cmNlX3R5cGUgJiYKKwkJICAgIHJlcy0+c3RhcnQgPT0gcmVzX2xpc3RfZWxlbS0+c3RhcnQgJiYKKwkJICAgIHJlcy0+ZW5kID09IHJlc19saXN0X2VsZW0tPmVuZCkgeworCisJCQkvKgorCQkJICogSWYgdGhlIHJlcyBjb3VudCBpcyBkZWNyZWFzZWQgdG8gMCwKKwkJCSAqIHJlbW92ZSBhbmQgZnJlZSBpdAorCQkJICovCisKKwkJCWlmICgtLXJlc19saXN0X2VsZW0tPmNvdW50ID09IDApIHsKKwkJCQlsaXN0X2RlbCgmcmVzX2xpc3RfZWxlbS0+cmVzb3VyY2VfbGlzdCk7CisJCQkJa2ZyZWUocmVzX2xpc3RfZWxlbSk7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK2FjcGlfc3RhdHVzCithY3BpX29zX2ludmFsaWRhdGVfYWRkcmVzcygKKyAgICB1OCAgICAgICAgICAgICAgICAgICBzcGFjZV9pZCwKKyAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgICBhZGRyZXNzLAorICAgIGFjcGlfc2l6ZSAgICAgICAgICAgICAgIGxlbmd0aCkKK3sKKwlzdHJ1Y3QgYWNwaV9yZXNfbGlzdCByZXM7CisKKwlzd2l0Y2ggKHNwYWNlX2lkKSB7CisJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU86CisJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZOgorCQkvKiBPbmx5IGludGVyZmVyZW5jZSBjaGVja3MgYWdhaW5zdCBTeXN0ZW1JTyBhbmQgU3l0ZW1NZW1vcnkKKwkJICAgYXJlIG5lZWRlZCAqLworCQlyZXMuc3RhcnQgPSBhZGRyZXNzOworCQlyZXMuZW5kID0gYWRkcmVzcyArIGxlbmd0aCAtIDE7CisJCXJlcy5yZXNvdXJjZV90eXBlID0gc3BhY2VfaWQ7CisJCXNwaW5fbG9jaygmYWNwaV9yZXNfbG9jayk7CisJCWFjcGlfcmVzX2xpc3RfZGVsKCZyZXMpOworCQlzcGluX3VubG9jaygmYWNwaV9yZXNfbG9jayk7CisJCWJyZWFrOworCWNhc2UgQUNQSV9BRFJfU1BBQ0VfUENJX0NPTkZJRzoKKwljYXNlIEFDUElfQURSX1NQQUNFX0VDOgorCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU01CVVM6CisJY2FzZSBBQ1BJX0FEUl9TUEFDRV9DTU9TOgorCWNhc2UgQUNQSV9BRFJfU1BBQ0VfUENJX0JBUl9UQVJHRVQ6CisJY2FzZSBBQ1BJX0FEUl9TUEFDRV9EQVRBX1RBQkxFOgorCWNhc2UgQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkU6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gQUVfT0s7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzCkBAIC0xMzgyLDYgKzE0NDQsNyBAQAogICAgIGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGFjcGlfcmVzX2xpc3QgKnJlczsKKwlpbnQgYWRkZWQ7CiAJaWYgKGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPT0gRU5GT1JDRV9SRVNPVVJDRVNfTk8pCiAJCXJldHVybiBBRV9PSzsKIApAQCAtMTM5OSwxNCArMTQ2MiwxNyBAQAogCQlyZXMtPmVuZCA9IGFkZHJlc3MgKyBsZW5ndGggLSAxOwogCQlyZXMtPnJlc291cmNlX3R5cGUgPSBzcGFjZV9pZDsKIAkJc3Bpbl9sb2NrKCZhY3BpX3Jlc19sb2NrKTsKLQkJbGlzdF9hZGQoJnJlcy0+cmVzb3VyY2VfbGlzdCwgJnJlc291cmNlX2xpc3RfaGVhZCk7CisJCWFkZGVkID0gYWNwaV9yZXNfbGlzdF9hZGQocmVzKTsKIAkJc3Bpbl91bmxvY2soJmFjcGlfcmVzX2xvY2spOwotCQlwcl9kZWJ1ZygiQWRkZWQgJXMgcmVzb3VyY2U6IHN0YXJ0OiAweCVsbHgsIGVuZDogMHglbGx4LCAiCi0JCQkgIm5hbWU6ICVzXG4iLCAoc3BhY2VfaWQgPT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPKQorCQlwcl9kZWJ1ZygiJXMgJXMgcmVzb3VyY2U6IHN0YXJ0OiAweCVsbHgsIGVuZDogMHglbGx4LCAiCisJCQkgIm5hbWU6ICVzXG4iLCBhZGRlZCA/ICJBZGRlZCIgOiAiQWxyZWFkeSBleGlzdCIsCisJCQkgKHNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykKIAkJCSA/ICJTeXN0ZW1JTyIgOiAiU3lzdGVtIE1lbW9yeSIsCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAogCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsCiAJCQkgcmVzLT5uYW1lKTsKKwkJaWYgKCFhZGRlZCkKKwkJCWtmcmVlKHJlcyk7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9BRFJfU1BBQ0VfUENJX0NPTkZJRzoKIAljYXNlIEFDUElfQURSX1NQQUNFX0VDOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKaW5kZXggYjc5NGViOC4uODQzNjk5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9QQ0lfQ09NUE9ORU5UCiBBQ1BJX01PRFVMRV9OQU1FKCJwY2lfaXJxIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKaW5kZXggMTZlMGY5ZC4uMzk0YWU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBfQ09NUE9ORU5UCQkJQUNQSV9QQ0lfQ09NUE9ORU5UCiBBQ1BJX01PRFVMRV9OQU1FKCJwY2lfbGluayIpOwogI2RlZmluZSBBQ1BJX1BDSV9MSU5LX0NMQVNTCQkicGNpX2lycV9yb3V0aW5nIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCAzMWI5NjFjLi4zMTEyMjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUENJX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgicGNpX3Jvb3QiKTsKICNkZWZpbmUgQUNQSV9QQ0lfUk9PVF9DTEFTUwkJInBjaV9icmlkZ2UiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Nsb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfc2xvdC5jCmluZGV4IDEyMTU4ZTAuLjQ1ZGEyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfc2xvdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfc2xvdC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiBzdGF0aWMgaW50IGRlYnVnOwogc3RhdGljIGludCBjaGVja19zdGFfYmVmb3JlX3N1bjsKQEAgLTU3LDcgKzU4LDcgQEAKIAkJCQlNWV9OQU1FICwgIyMgYXJnKTsJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFNMT1RfTkFNRV9TSVpFIDIwCQkvKiBJbnNwaXJlZCBieSAjZGVmaW5lIGluIGFjcGlwaHAuaCAqLworI2RlZmluZSBTTE9UX05BTUVfU0laRSAyMQkJLyogSW5zcGlyZWQgYnkgI2RlZmluZSBpbiBhY3BpcGhwLmggKi8KIAogc3RydWN0IGFjcGlfcGNpX3Nsb3QgewogCWFjcGlfaGFuZGxlIHJvb3RfaGFuZGxlOwkvKiBoYW5kbGUgb2YgdGhlIHJvb3QgYnJpZGdlICovCkBAIC0xNDksNyArMTUwLDcgQEAKIAkJcmV0dXJuIEFFX09LOwogCX0KIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiV1IiwgKHUzMilzdW4pOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVsbHUiLCBzdW4pOwogCXBjaV9zbG90ID0gcGNpX2NyZWF0ZV9zbG90KHBjaV9idXMsIGRldmljZSwgbmFtZSwgTlVMTCk7CiAJaWYgKElTX0VSUihwY2lfc2xvdCkpIHsKIAkJZXJyKCJwY2lfY3JlYXRlX3Nsb3QgcmV0dXJuZWQgJWxkXG4iLCBQVFJfRVJSKHBjaV9zbG90KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcG93ZXIuYyBiL2RyaXZlcnMvYWNwaS9wb3dlci5jCmluZGV4IDVhMDliZjMuLjIyYjI5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wb3dlci5jCisrKyBiL2RyaXZlcnMvYWNwaS9wb3dlci5jCkBAIC00Myw5ICs0MywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+Ci0KICNpbmNsdWRlICJzbGVlcC5oIgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCQlBQ1BJX1BPV0VSX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgicG93ZXIiKTsKICNkZWZpbmUgQUNQSV9QT1dFUl9DTEFTUwkJInBvd2VyX3Jlc291cmNlIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmJmZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKQEAgLTAsMCArMSwxMDE4IEBACisvKgorICogQSBod21vbiBkcml2ZXIgZm9yIEFDUEkgNC4wIHBvd2VyIG1ldGVycworICogQ29weXJpZ2h0IChDKSAyMDA5IElCTQorICoKKyAqIEF1dGhvcjogRGFycmljayBKLiBXb25nIDxkandvbmdAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKworI2RlZmluZSBBQ1BJX1BPV0VSX01FVEVSX05BTUUJCSJwb3dlcl9tZXRlciIKK0FDUElfTU9EVUxFX05BTUUoQUNQSV9QT1dFUl9NRVRFUl9OQU1FKTsKKyNkZWZpbmUgQUNQSV9QT1dFUl9NRVRFUl9ERVZJQ0VfTkFNRQkiUG93ZXIgTWV0ZXIiCisjZGVmaW5lIEFDUElfUE9XRVJfTUVURVJfQ0xBU1MJCSJwb3dlcl9tZXRlcl9yZXNvdXJjZSIKKworI2RlZmluZSBOVU1fU0VOU09SUwkJCTE3CisKKyNkZWZpbmUgUE9XRVJfTUVURVJfQ0FOX01FQVNVUkUJKDEgPDwgMCkKKyNkZWZpbmUgUE9XRVJfTUVURVJfQ0FOX1RSSVAJKDEgPDwgMSkKKyNkZWZpbmUgUE9XRVJfTUVURVJfQ0FOX0NBUAkoMSA8PCAyKQorI2RlZmluZSBQT1dFUl9NRVRFUl9DQU5fTk9USUZZCSgxIDw8IDMpCisjZGVmaW5lIFBPV0VSX01FVEVSX0lTX0JBVFRFUlkJKDEgPDwgOCkKKyNkZWZpbmUgVU5LTk9XTl9IWVNURVJFU0lTCTB4RkZGRkZGRkYKKworI2RlZmluZSBNRVRFUl9OT1RJRllfQ09ORklHCTB4ODAKKyNkZWZpbmUgTUVURVJfTk9USUZZX1RSSVAJMHg4MQorI2RlZmluZSBNRVRFUl9OT1RJRllfQ0FQCTB4ODIKKyNkZWZpbmUgTUVURVJfTk9USUZZX0NBUFBJTkcJMHg4MworI2RlZmluZSBNRVRFUl9OT1RJRllfSU5URVJWQUwJMHg4NAorCisjZGVmaW5lIFBPV0VSX0FWRVJBR0VfTkFNRQkicG93ZXIxX2F2ZXJhZ2UiCisjZGVmaW5lIFBPV0VSX0NBUF9OQU1FCQkicG93ZXIxX2NhcCIKKyNkZWZpbmUgUE9XRVJfQVZHX0lOVEVSVkFMX05BTUUJInBvd2VyMV9hdmVyYWdlX2ludGVydmFsIgorI2RlZmluZSBQT1dFUl9BTEFSTV9OQU1FCSJwb3dlcjFfYWxhcm0iCisKK3N0YXRpYyBpbnQgY2FwX2luX2hhcmR3YXJlOworc3RhdGljIGludCBmb3JjZV9jYXBfb247CisKK3N0YXRpYyBpbnQgY2FuX2NhcF9pbl9oYXJkd2FyZSh2b2lkKQoreworCXJldHVybiBmb3JjZV9jYXBfb24gfHwgY2FwX2luX2hhcmR3YXJlOworfQorCitzdGF0aWMgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHBvd2VyX21ldGVyX2lkc1tdID0geworCXsiQUNQSTAwMEQiLCAwfSwKKwl7IiIsIDB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgcG93ZXJfbWV0ZXJfaWRzKTsKKworc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfY2FwYWJpbGl0aWVzIHsKKwlhY3BpX2ludGVnZXIJCWZsYWdzOworCWFjcGlfaW50ZWdlcgkJdW5pdHM7CisJYWNwaV9pbnRlZ2VyCQl0eXBlOworCWFjcGlfaW50ZWdlcgkJYWNjdXJhY3k7CisJYWNwaV9pbnRlZ2VyCQlzYW1wbGluZ190aW1lOworCWFjcGlfaW50ZWdlcgkJbWluX2F2Z19pbnRlcnZhbDsKKwlhY3BpX2ludGVnZXIJCW1heF9hdmdfaW50ZXJ2YWw7CisJYWNwaV9pbnRlZ2VyCQloeXN0ZXJlc2lzOworCWFjcGlfaW50ZWdlcgkJY29uZmlndXJhYmxlX2NhcDsKKwlhY3BpX2ludGVnZXIJCW1pbl9jYXA7CisJYWNwaV9pbnRlZ2VyCQltYXhfY2FwOworfTsKKworc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgeworCXN0cnVjdCBhY3BpX2RldmljZQkqYWNwaV9kZXY7CisJYWNwaV9idXNfaWQJCW5hbWU7CisJc3RydWN0IG11dGV4CQlsb2NrOworCXN0cnVjdCBkZXZpY2UJCSpod21vbl9kZXY7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfY2FwYWJpbGl0aWVzCWNhcHM7CisJYWNwaV9zdHJpbmcJCW1vZGVsX251bWJlcjsKKwlhY3BpX3N0cmluZwkJc2VyaWFsX251bWJlcjsKKwlhY3BpX3N0cmluZwkJb2VtX2luZm87CisJYWNwaV9pbnRlZ2VyCQlwb3dlcjsKKwlhY3BpX2ludGVnZXIJCWNhcDsKKwlhY3BpX2ludGVnZXIJCWF2Z19pbnRlcnZhbDsKKwlpbnQJCQlzZW5zb3JzX3ZhbGlkOworCXVuc2lnbmVkIGxvbmcJCXNlbnNvcnNfbGFzdF91cGRhdGVkOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZQlzZW5zb3JzW05VTV9TRU5TT1JTXTsKKwlpbnQJCQludW1fc2Vuc29yczsKKwlpbnQJCQl0cmlwWzJdOworCWludAkJCW51bV9kb21haW5fZGV2aWNlczsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UJKipkb21haW5fZGV2aWNlczsKKwlzdHJ1Y3Qga29iamVjdAkJKmhvbGRlcnNfZGlyOworfTsKKworc3RydWN0IHJvX3NlbnNvcl90ZW1wbGF0ZSB7CisJY2hhciAqbGFiZWw7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJY2hhciAqYnVmKTsKKwlpbnQgaW5kZXg7Cit9OworCitzdHJ1Y3Qgcndfc2Vuc29yX3RlbXBsYXRlIHsKKwljaGFyICpsYWJlbDsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljaGFyICpidWYpOworCXNzaXplX3QgKCpzZXQpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworCWludCBpbmRleDsKK307CisKKy8qIEF2ZXJhZ2luZyBpbnRlcnZhbCAqLworc3RhdGljIGludCB1cGRhdGVfYXZnX2ludGVydmFsKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGF0YTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocmVzb3VyY2UtPmFjcGlfZGV2LT5oYW5kbGUsICJfR0FJIiwKKwkJCQkgICAgICAgTlVMTCwgJmRhdGEpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfR0FJIikpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXNvdXJjZS0+YXZnX2ludGVydmFsID0gZGF0YTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hdmdfaW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSA9IGFjcGlfZGV2LT5kcml2ZXJfZGF0YTsKKworCW11dGV4X2xvY2soJnJlc291cmNlLT5sb2NrKTsKKwl1cGRhdGVfYXZnX2ludGVydmFsKHJlc291cmNlKTsKKwltdXRleF91bmxvY2soJnJlc291cmNlLT5sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHJlc291cmNlLT5hdmdfaW50ZXJ2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYXZnX2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OworCWludCByZXM7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXJlcyA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ0ZW1wKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJaWYgKHRlbXAgPiByZXNvdXJjZS0+Y2Fwcy5tYXhfYXZnX2ludGVydmFsIHx8CisJICAgIHRlbXAgPCByZXNvdXJjZS0+Y2Fwcy5taW5fYXZnX2ludGVydmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlhcmcwLmludGVnZXIudmFsdWUgPSB0ZW1wOworCisJbXV0ZXhfbG9jaygmcmVzb3VyY2UtPmxvY2spOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihyZXNvdXJjZS0+YWNwaV9kZXYtPmhhbmRsZSwgIl9QQUkiLAorCQkJCSAgICAgICAmYXJncywgJmRhdGEpOworCWlmICghQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJlc291cmNlLT5hdmdfaW50ZXJ2YWwgPSB0ZW1wOworCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPmxvY2spOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9QQUkiKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIF9QQUkgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb3RoZXJ3aXNlICovCisJaWYgKGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNvdW50OworfQorCisvKiBDYXAgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IHVwZGF0ZV9jYXAoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihyZXNvdXJjZS0+YWNwaV9kZXYtPmhhbmRsZSwgIl9HSEwiLAorCQkJCSAgICAgICBOVUxMLCAmZGF0YSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9HSEwiKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlc291cmNlLT5jYXAgPSBkYXRhOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2NhcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisKKwltdXRleF9sb2NrKCZyZXNvdXJjZS0+bG9jayk7CisJdXBkYXRlX2NhcChyZXNvdXJjZSk7CisJbXV0ZXhfdW5sb2NrKCZyZXNvdXJjZS0+bG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCByZXNvdXJjZS0+Y2FwICogMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9jYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSA9IGFjcGlfZGV2LT5kcml2ZXJfZGF0YTsKKwl1bmlvbiBhY3BpX29iamVjdCBhcmcwID0geyBBQ1BJX1RZUEVfSU5URUdFUiB9OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7IDEsICZhcmcwIH07CisJaW50IHJlczsKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisJdW5zaWduZWQgbG9uZyBsb25nIGRhdGE7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJcmVzID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnRlbXApOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwl0ZW1wIC89IDEwMDA7CisJaWYgKHRlbXAgPiByZXNvdXJjZS0+Y2Fwcy5tYXhfY2FwIHx8IHRlbXAgPCByZXNvdXJjZS0+Y2Fwcy5taW5fY2FwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlhcmcwLmludGVnZXIudmFsdWUgPSB0ZW1wOworCisJbXV0ZXhfbG9jaygmcmVzb3VyY2UtPmxvY2spOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihyZXNvdXJjZS0+YWNwaV9kZXYtPmhhbmRsZSwgIl9TSEwiLAorCQkJCSAgICAgICAmYXJncywgJmRhdGEpOworCWlmICghQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJlc291cmNlLT5jYXAgPSB0ZW1wOworCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPmxvY2spOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9TSEwiKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIF9TSEwgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb3RoZXJ3aXNlICovCisJaWYgKGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNvdW50OworfQorCisvKiBQb3dlciBtZXRlciB0cmlwIHBvaW50cyAqLworc3RhdGljIGludCBzZXRfYWNwaV90cmlwKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBhcmdfb2Jqc1tdID0geworCQl7QUNQSV9UWVBFX0lOVEVHRVJ9LAorCQl7QUNQSV9UWVBFX0lOVEVHRVJ9CisJfTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAyLCBhcmdfb2JqcyB9OworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCS8qIEJvdGggdHJpcCBsZXZlbHMgbXVzdCBiZSBzZXQgKi8KKwlpZiAocmVzb3VyY2UtPnRyaXBbMF0gPCAwIHx8IHJlc291cmNlLT50cmlwWzFdIDwgMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBUaGlzIGRyaXZlciBzdG9yZXMgbWluLCBtYXg7IEFDUEkgd2FudHMgbWF4LCBtaW4uICovCisJYXJnX29ianNbMF0uaW50ZWdlci52YWx1ZSA9IHJlc291cmNlLT50cmlwWzFdOworCWFyZ19vYmpzWzFdLmludGVnZXIudmFsdWUgPSByZXNvdXJjZS0+dHJpcFswXTsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihyZXNvdXJjZS0+YWNwaV9kZXYtPmhhbmRsZSwgIl9QVFAiLAorCQkJCSAgICAgICAmYXJncywgJmRhdGEpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUFRQIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3RyaXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisJaW50IHJlczsKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwlyZXMgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdGVtcCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXRlbXAgLz0gMTAwMDsKKwlpZiAodGVtcCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcmVzb3VyY2UtPmxvY2spOworCXJlc291cmNlLT50cmlwW2F0dHItPmluZGV4IC0gN10gPSB0ZW1wOworCXJlcyA9IHNldF9hY3BpX3RyaXAocmVzb3VyY2UpOworCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPmxvY2spOworCisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXJldHVybiBjb3VudDsKK30KKworLyogUG93ZXIgbWV0ZXIgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX21ldGVyKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGF0YTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb2NhbF9qaWZmaWVzID0gamlmZmllczsKKworCWlmICh0aW1lX2JlZm9yZShsb2NhbF9qaWZmaWVzLCByZXNvdXJjZS0+c2Vuc29yc19sYXN0X3VwZGF0ZWQgKworCQkJbXNlY3NfdG9famlmZmllcyhyZXNvdXJjZS0+Y2Fwcy5zYW1wbGluZ190aW1lKSkgJiYKKwkJCXJlc291cmNlLT5zZW5zb3JzX3ZhbGlkKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihyZXNvdXJjZS0+YWNwaV9kZXYtPmhhbmRsZSwgIl9QTU0iLAorCQkJCSAgICAgICBOVUxMLCAmZGF0YSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9QTU0iKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlc291cmNlLT5wb3dlciA9IGRhdGE7CisJcmVzb3VyY2UtPnNlbnNvcnNfdmFsaWQgPSAxOworCXJlc291cmNlLT5zZW5zb3JzX2xhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSA9IGFjcGlfZGV2LT5kcml2ZXJfZGF0YTsKKworCW11dGV4X2xvY2soJnJlc291cmNlLT5sb2NrKTsKKwl1cGRhdGVfbWV0ZXIocmVzb3VyY2UpOworCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPmxvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgcmVzb3VyY2UtPnBvd2VyICogMTAwMCk7Cit9CisKKy8qIE1pc2NlbGxhbmVvdXMgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBhY3BpX2Rldi0+ZHJpdmVyX2RhdGE7CisJYWNwaV9zdHJpbmcgdmFsOworCisJc3dpdGNoIChhdHRyLT5pbmRleCkgeworCWNhc2UgMDoKKwkJdmFsID0gcmVzb3VyY2UtPm1vZGVsX251bWJlcjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl2YWwgPSByZXNvdXJjZS0+c2VyaWFsX251bWJlcjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSByZXNvdXJjZS0+b2VtX2luZm87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3ZhbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gYWNwaV9kZXYtPmRyaXZlcl9kYXRhOworCWFjcGlfaW50ZWdlciB2YWwgPSAwOworCisJc3dpdGNoIChhdHRyLT5pbmRleCkgeworCWNhc2UgMDoKKwkJdmFsID0gcmVzb3VyY2UtPmNhcHMubWluX2F2Z19pbnRlcnZhbDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl2YWwgPSByZXNvdXJjZS0+Y2Fwcy5tYXhfYXZnX2ludGVydmFsOworCQlicmVhazsKKwljYXNlIDI6CisJCXZhbCA9IHJlc291cmNlLT5jYXBzLm1pbl9jYXAgKiAxMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCXZhbCA9IHJlc291cmNlLT5jYXBzLm1heF9jYXAgKiAxMDAwOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChyZXNvdXJjZS0+Y2Fwcy5oeXN0ZXJlc2lzID09IFVOS05PV05fSFlTVEVSRVNJUykKKwkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd25cbiIpOworCisJCXZhbCA9IHJlc291cmNlLT5jYXBzLmh5c3RlcmVzaXMgKiAxMDAwOworCQlicmVhazsKKwljYXNlIDU6CisJCWlmIChyZXNvdXJjZS0+Y2Fwcy5mbGFncyAmIFBPV0VSX01FVEVSX0lTX0JBVFRFUlkpCisJCQl2YWwgPSAxOworCQllbHNlCisJCQl2YWwgPSAwOworCQlicmVhazsKKwljYXNlIDY6CisJCWlmIChyZXNvdXJjZS0+cG93ZXIgPiByZXNvdXJjZS0+Y2FwKQorCQkJdmFsID0gMTsKKwkJZWxzZQorCQkJdmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSA3OgorCWNhc2UgODoKKwkJaWYgKHJlc291cmNlLT50cmlwW2F0dHItPmluZGV4IC0gN10gPCAwKQorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93blxuIik7CisKKwkJdmFsID0gcmVzb3VyY2UtPnRyaXBbYXR0ci0+aW5kZXggLSA3XSAqIDEwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWNjdXJhY3koc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSA9IGFjcGlfZGV2LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgYWNjID0gcmVzb3VyY2UtPmNhcHMuYWNjdXJhY3k7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldS4ldSUlXG4iLCBhY2MgLyAxMDAwLCBhY2MgJSAxMDAwKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIEFDUElfUE9XRVJfTUVURVJfTkFNRSk7Cit9CisKKy8qIFNlbnNvciBkZXNjcmlwdGlvbnMuICBJZiB5b3UgYWRkIGEgc2Vuc29yLCB1cGRhdGUgTlVNX1NFTlNPUlMgYWJvdmUhICovCitzdGF0aWMgc3RydWN0IHJvX3NlbnNvcl90ZW1wbGF0ZSBtZXRlcl9yb19hdHRyc1tdID0gewore1BPV0VSX0FWRVJBR0VfTkFNRSwgc2hvd19wb3dlciwgMH0sCit7InBvd2VyMV9hY2N1cmFjeSIsIHNob3dfYWNjdXJhY3ksIDB9LAoreyJwb3dlcjFfYXZlcmFnZV9pbnRlcnZhbF9taW4iLCBzaG93X3ZhbCwgMH0sCit7InBvd2VyMV9hdmVyYWdlX2ludGVydmFsX21heCIsIHNob3dfdmFsLCAxfSwKK3sicG93ZXIxX2lzX2JhdHRlcnkiLCBzaG93X3ZhbCwgNX0sCit7TlVMTCwgTlVMTCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IHJ3X3NlbnNvcl90ZW1wbGF0ZSBtZXRlcl9yd19hdHRyc1tdID0gewore1BPV0VSX0FWR19JTlRFUlZBTF9OQU1FLCBzaG93X2F2Z19pbnRlcnZhbCwgc2V0X2F2Z19pbnRlcnZhbCwgMH0sCit7TlVMTCwgTlVMTCwgTlVMTCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IHJvX3NlbnNvcl90ZW1wbGF0ZSBtaXNjX2NhcF9hdHRyc1tdID0geworeyJwb3dlcjFfY2FwX21pbiIsIHNob3dfdmFsLCAyfSwKK3sicG93ZXIxX2NhcF9tYXgiLCBzaG93X3ZhbCwgM30sCit7InBvd2VyMV9jYXBfaHlzdCIsIHNob3dfdmFsLCA0fSwKK3tQT1dFUl9BTEFSTV9OQU1FLCBzaG93X3ZhbCwgNn0sCit7TlVMTCwgTlVMTCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IHJvX3NlbnNvcl90ZW1wbGF0ZSByb19jYXBfYXR0cnNbXSA9IHsKK3tQT1dFUl9DQVBfTkFNRSwgc2hvd19jYXAsIDB9LAore05VTEwsIE5VTEwsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCByd19zZW5zb3JfdGVtcGxhdGUgcndfY2FwX2F0dHJzW10gPSB7Cit7UE9XRVJfQ0FQX05BTUUsIHNob3dfY2FwLCBzZXRfY2FwLCAwfSwKK3tOVUxMLCBOVUxMLCBOVUxMLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgcndfc2Vuc29yX3RlbXBsYXRlIHRyaXBfYXR0cnNbXSA9IHsKK3sicG93ZXIxX2F2ZXJhZ2VfbWluIiwgc2hvd192YWwsIHNldF90cmlwLCA3fSwKK3sicG93ZXIxX2F2ZXJhZ2VfbWF4Iiwgc2hvd192YWwsIHNldF90cmlwLCA4fSwKK3tOVUxMLCBOVUxMLCBOVUxMLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgcm9fc2Vuc29yX3RlbXBsYXRlIG1pc2NfYXR0cnNbXSA9IHsKK3sibmFtZSIsIHNob3dfbmFtZSwgMH0sCit7InBvd2VyMV9tb2RlbF9udW1iZXIiLCBzaG93X3N0ciwgMH0sCit7InBvd2VyMV9vZW1faW5mbyIsIHNob3dfc3RyLCAyfSwKK3sicG93ZXIxX3NlcmlhbF9udW1iZXIiLCBzaG93X3N0ciwgMX0sCit7TlVMTCwgTlVMTCwgMH0sCit9OworCisvKiBSZWFkIHBvd2VyIGRvbWFpbiBkYXRhICovCitzdGF0aWMgdm9pZCByZW1vdmVfZG9tYWluX2RldmljZXMoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlKQoreworCWludCBpOworCisJaWYgKCFyZXNvdXJjZS0+bnVtX2RvbWFpbl9kZXZpY2VzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVzb3VyY2UtPm51bV9kb21haW5fZGV2aWNlczsgaSsrKSB7CisJCXN0cnVjdCBhY3BpX2RldmljZSAqb2JqID0gcmVzb3VyY2UtPmRvbWFpbl9kZXZpY2VzW2ldOworCQlpZiAoIW9iaikKKwkJCWNvbnRpbnVlOworCisJCXN5c2ZzX3JlbW92ZV9saW5rKHJlc291cmNlLT5ob2xkZXJzX2RpciwKKwkJCQkgIGtvYmplY3RfbmFtZSgmb2JqLT5kZXYua29iaikpOworCQlwdXRfZGV2aWNlKCZvYmotPmRldik7CisJfQorCisJa2ZyZWUocmVzb3VyY2UtPmRvbWFpbl9kZXZpY2VzKTsKKwlrb2JqZWN0X3B1dChyZXNvdXJjZS0+aG9sZGVyc19kaXIpOworfQorCitzdGF0aWMgaW50IHJlYWRfZG9tYWluX2RldmljZXMoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlKQoreworCWludCByZXMgPSAwOworCWludCBpOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisJdW5pb24gYWNwaV9vYmplY3QgKnBzczsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChyZXNvdXJjZS0+YWNwaV9kZXYtPmhhbmRsZSwgIl9QTUQiLCBOVUxMLAorCQkJCSAgICAgICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUE1EIikpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwc3MgPSBidWZmZXIucG9pbnRlcjsKKwlpZiAoIXBzcyB8fAorCSAgICBwc3MtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwkJZGV2X2VycigmcmVzb3VyY2UtPmFjcGlfZGV2LT5kZXYsIEFDUElfUE9XRVJfTUVURVJfTkFNRQorCQkJIkludmFsaWQgX1BNRCBkYXRhXG4iKTsKKwkJcmVzID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKCFwc3MtPnBhY2thZ2UuY291bnQpCisJCWdvdG8gZW5kOworCisJcmVzb3VyY2UtPmRvbWFpbl9kZXZpY2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlICopICoKKwkJCQkJICAgcHNzLT5wYWNrYWdlLmNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc291cmNlLT5kb21haW5fZGV2aWNlcykgeworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIGVuZDsKKwl9CisKKwlyZXNvdXJjZS0+aG9sZGVyc19kaXIgPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJtZWFzdXJlcyIsCisJCQkJCSZyZXNvdXJjZS0+YWNwaV9kZXYtPmRldi5rb2JqKTsKKwlpZiAoIXJlc291cmNlLT5ob2xkZXJzX2RpcikgeworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwlyZXNvdXJjZS0+bnVtX2RvbWFpbl9kZXZpY2VzID0gcHNzLT5wYWNrYWdlLmNvdW50OworCisJZm9yIChpID0gMDsgaSA8IHBzcy0+cGFja2FnZS5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBhY3BpX2RldmljZSAqb2JqOworCQl1bmlvbiBhY3BpX29iamVjdCAqZWxlbWVudCA9ICYocHNzLT5wYWNrYWdlLmVsZW1lbnRzW2ldKTsKKworCQkvKiBSZWZ1c2Ugbm9uLXJlZmVyZW5jZXMgKi8KKwkJaWYgKGVsZW1lbnQtPnR5cGUgIT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENyZWF0ZSBhIHN5bWxpbmsgdG8gZG9tYWluIG9iamVjdHMgKi8KKwkJcmVzb3VyY2UtPmRvbWFpbl9kZXZpY2VzW2ldID0gTlVMTDsKKwkJc3RhdHVzID0gYWNwaV9idXNfZ2V0X2RldmljZShlbGVtZW50LT5yZWZlcmVuY2UuaGFuZGxlLAorCQkJCQkgICAgICZyZXNvdXJjZS0+ZG9tYWluX2RldmljZXNbaV0pOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQljb250aW51ZTsKKworCQlvYmogPSByZXNvdXJjZS0+ZG9tYWluX2RldmljZXNbaV07CisJCWdldF9kZXZpY2UoJm9iai0+ZGV2KTsKKworCQlyZXMgPSBzeXNmc19jcmVhdGVfbGluayhyZXNvdXJjZS0+aG9sZGVyc19kaXIsICZvYmotPmRldi5rb2JqLAorCQkJCSAgICAgIGtvYmplY3RfbmFtZSgmb2JqLT5kZXYua29iaikpOworCQlpZiAocmVzKSB7CisJCQlwdXRfZGV2aWNlKCZvYmotPmRldik7CisJCQlyZXNvdXJjZS0+ZG9tYWluX2RldmljZXNbaV0gPSBOVUxMOworCQl9CisJfQorCisJcmVzID0gMDsKKwlnb3RvIGVuZDsKKworZXhpdF9mcmVlOgorCWtmcmVlKHJlc291cmNlLT5kb21haW5fZGV2aWNlcyk7CitlbmQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiByZXM7Cit9CisKKy8qIFJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24gKi8KK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcm9fYXR0cnMoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlLAorCQkJICAgICBzdHJ1Y3Qgcm9fc2Vuc29yX3RlbXBsYXRlICpybykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmVzb3VyY2UtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JzID0KKwkJJnJlc291cmNlLT5zZW5zb3JzW3Jlc291cmNlLT5udW1fc2Vuc29yc107CisJaW50IHJlcyA9IDA7CisKKwl3aGlsZSAocm8tPmxhYmVsKSB7CisJCXNlbnNvcnMtPmRldl9hdHRyLmF0dHIubmFtZSA9IHJvLT5sYWJlbDsKKwkJc2Vuc29ycy0+ZGV2X2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKKwkJc2Vuc29ycy0+ZGV2X2F0dHIuc2hvdyA9IHJvLT5zaG93OworCQlzZW5zb3JzLT5pbmRleCA9IHJvLT5pbmRleDsKKworCQlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2Vuc29ycy0+ZGV2X2F0dHIpOworCQlpZiAocmVzKSB7CisJCQlzZW5zb3JzLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBOVUxMOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlzZW5zb3JzKys7CisJCXJlc291cmNlLT5udW1fc2Vuc29ycysrOworCQlybysrOworCX0KKworZXJyb3I6CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9yd19hdHRycyhzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UsCisJCQkgICAgIHN0cnVjdCByd19zZW5zb3JfdGVtcGxhdGUgKnJ3KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyZXNvdXJjZS0+YWNwaV9kZXYtPmRldjsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcnMgPQorCQkmcmVzb3VyY2UtPnNlbnNvcnNbcmVzb3VyY2UtPm51bV9zZW5zb3JzXTsKKwlpbnQgcmVzID0gMDsKKworCXdoaWxlIChydy0+bGFiZWwpIHsKKwkJc2Vuc29ycy0+ZGV2X2F0dHIuYXR0ci5uYW1lID0gcnctPmxhYmVsOworCQlzZW5zb3JzLT5kZXZfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUjsKKwkJc2Vuc29ycy0+ZGV2X2F0dHIuc2hvdyA9IHJ3LT5zaG93OworCQlzZW5zb3JzLT5kZXZfYXR0ci5zdG9yZSA9IHJ3LT5zZXQ7CisJCXNlbnNvcnMtPmluZGV4ID0gcnctPmluZGV4OworCisJCXJlcyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZW5zb3JzLT5kZXZfYXR0cik7CisJCWlmIChyZXMpIHsKKwkJCXNlbnNvcnMtPmRldl9hdHRyLmF0dHIubmFtZSA9IE5VTEw7CisJCQlnb3RvIGVycm9yOworCQl9CisJCXNlbnNvcnMrKzsKKwkJcmVzb3VyY2UtPm51bV9zZW5zb3JzKys7CisJCXJ3Kys7CisJfQorCitlcnJvcjoKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfYXR0cnMoc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJlc291cmNlLT5udW1fc2Vuc29yczsgaSsrKSB7CisJCWlmICghcmVzb3VyY2UtPnNlbnNvcnNbaV0uZGV2X2F0dHIuYXR0ci5uYW1lKQorCQkJY29udGludWU7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmcmVzb3VyY2UtPmFjcGlfZGV2LT5kZXYsCisJCQkJICAgJnJlc291cmNlLT5zZW5zb3JzW2ldLmRldl9hdHRyKTsKKwl9CisKKwlyZW1vdmVfZG9tYWluX2RldmljZXMocmVzb3VyY2UpOworCisJcmVzb3VyY2UtPm51bV9zZW5zb3JzID0gMDsKK30KKworc3RhdGljIGludCBzZXR1cF9hdHRycyhzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJaW50IHJlcyA9IDA7CisKKwlyZXMgPSByZWFkX2RvbWFpbl9kZXZpY2VzKHJlc291cmNlKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJaWYgKHJlc291cmNlLT5jYXBzLmZsYWdzICYgUE9XRVJfTUVURVJfQ0FOX01FQVNVUkUpIHsKKwkJcmVzID0gcmVnaXN0ZXJfcm9fYXR0cnMocmVzb3VyY2UsIG1ldGVyX3JvX2F0dHJzKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZXJyb3I7CisJCXJlcyA9IHJlZ2lzdGVyX3J3X2F0dHJzKHJlc291cmNlLCBtZXRlcl9yd19hdHRycyk7CisJCWlmIChyZXMpCisJCQlnb3RvIGVycm9yOworCX0KKworCWlmIChyZXNvdXJjZS0+Y2Fwcy5mbGFncyAmIFBPV0VSX01FVEVSX0NBTl9DQVApIHsKKwkJaWYgKCFjYW5fY2FwX2luX2hhcmR3YXJlKCkpIHsKKwkJCWRldl9lcnIoJnJlc291cmNlLT5hY3BpX2Rldi0+ZGV2LAorCQkJCSJJZ25vcmluZyB1bnNhZmUgc29mdHdhcmUgcG93ZXIgY2FwIVxuIik7CisJCQlnb3RvIHNraXBfdW5zYWZlX2NhcDsKKwkJfQorCisJCWlmIChyZXNvdXJjZS0+Y2Fwcy5jb25maWd1cmFibGVfY2FwKSB7CisJCQlyZXMgPSByZWdpc3Rlcl9yd19hdHRycyhyZXNvdXJjZSwgcndfY2FwX2F0dHJzKTsKKwkJCWlmIChyZXMpCisJCQkJZ290byBlcnJvcjsKKwkJfSBlbHNlIHsKKwkJCXJlcyA9IHJlZ2lzdGVyX3JvX2F0dHJzKHJlc291cmNlLCByb19jYXBfYXR0cnMpOworCQkJaWYgKHJlcykKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCXJlcyA9IHJlZ2lzdGVyX3JvX2F0dHJzKHJlc291cmNlLCBtaXNjX2NhcF9hdHRycyk7CisJCWlmIChyZXMpCisJCQlnb3RvIGVycm9yOworCX0KK3NraXBfdW5zYWZlX2NhcDoKKworCWlmIChyZXNvdXJjZS0+Y2Fwcy5mbGFncyAmIFBPV0VSX01FVEVSX0NBTl9UUklQKSB7CisJCXJlcyA9IHJlZ2lzdGVyX3J3X2F0dHJzKHJlc291cmNlLCB0cmlwX2F0dHJzKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJcmVzID0gcmVnaXN0ZXJfcm9fYXR0cnMocmVzb3VyY2UsIG1pc2NfYXR0cnMpOworCWlmIChyZXMpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gcmVzOworZXJyb3I6CisJcmVtb3ZlX2RvbWFpbl9kZXZpY2VzKHJlc291cmNlKTsKKwlyZW1vdmVfYXR0cnMocmVzb3VyY2UpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY2FwYWJpbGl0aWVzKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwlhY3BpX3N0cmluZyAqc3RyOworCWludCBpOworCisJc3RyID0gJnJlc291cmNlLT5tb2RlbF9udW1iZXI7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgc3RyKyspCisJCWtmcmVlKCpzdHIpOworfQorCitzdGF0aWMgaW50IHJlYWRfY2FwYWJpbGl0aWVzKHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwlpbnQgcmVzID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXN0cnVjdCBhY3BpX2J1ZmZlciBzdGF0ZSA9IHsgMCwgTlVMTCB9OworCXN0cnVjdCBhY3BpX2J1ZmZlciBmb3JtYXQgPSB7IHNpemVvZigiTk5OTk5OTk5OTk4iKSwgIk5OTk5OTk5OTk5OIiB9OworCXVuaW9uIGFjcGlfb2JqZWN0ICpwc3M7CisJYWNwaV9zdHJpbmcgKnN0cjsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChyZXNvdXJjZS0+YWNwaV9kZXYtPmhhbmRsZSwgIl9QTUMiLCBOVUxMLAorCQkJCSAgICAgICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUE1DIikpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwc3MgPSBidWZmZXIucG9pbnRlcjsKKwlpZiAoIXBzcyB8fAorCSAgICBwc3MtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UgfHwKKwkgICAgcHNzLT5wYWNrYWdlLmNvdW50ICE9IDE0KSB7CisJCWRldl9lcnIoJnJlc291cmNlLT5hY3BpX2Rldi0+ZGV2LCBBQ1BJX1BPV0VSX01FVEVSX05BTUUKKwkJCSJJbnZhbGlkIF9QTUMgZGF0YVxuIik7CisJCXJlcyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KKworCS8qIEdyYWIgYWxsIHRoZSBpbnRlZ2VyIGRhdGEgYXQgb25jZSAqLworCXN0YXRlLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9jYXBhYmlsaXRpZXMpOworCXN0YXRlLnBvaW50ZXIgPSAmcmVzb3VyY2UtPmNhcHM7CisKKwlzdGF0dXMgPSBhY3BpX2V4dHJhY3RfcGFja2FnZShwc3MsICZmb3JtYXQsICZzdGF0ZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJJbnZhbGlkIGRhdGEiKSk7CisJCXJlcyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KKworCWlmIChyZXNvdXJjZS0+Y2Fwcy51bml0cykgeworCQlkZXZfZXJyKCZyZXNvdXJjZS0+YWNwaV9kZXYtPmRldiwgQUNQSV9QT1dFUl9NRVRFUl9OQU1FCisJCQkiVW5rbm93biB1bml0cyAlbGx1LlxuIiwKKwkJCXJlc291cmNlLT5jYXBzLnVuaXRzKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBlbmQ7CisJfQorCisJLyogR3JhYiB0aGUgc3RyaW5nIGRhdGEgKi8KKwlzdHIgPSAmcmVzb3VyY2UtPm1vZGVsX251bWJlcjsKKworCWZvciAoaSA9IDExOyBpIDwgMTQ7IGkrKykgeworCQl1bmlvbiBhY3BpX29iamVjdCAqZWxlbWVudCA9ICYocHNzLT5wYWNrYWdlLmVsZW1lbnRzW2ldKTsKKworCQlpZiAoZWxlbWVudC0+dHlwZSAhPSBBQ1BJX1RZUEVfU1RSSU5HKSB7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCSpzdHIgPSBremFsbG9jKHNpemVvZih1OCkgKiAoZWxlbWVudC0+c3RyaW5nLmxlbmd0aCArIDEpLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoISpzdHIpIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJc3RybmNweSgqc3RyLCBlbGVtZW50LT5zdHJpbmcucG9pbnRlciwgZWxlbWVudC0+c3RyaW5nLmxlbmd0aCk7CisJCXN0cisrOworCX0KKworCWRldl9pbmZvKCZyZXNvdXJjZS0+YWNwaV9kZXYtPmRldiwgIkZvdW5kIEFDUEkgcG93ZXIgbWV0ZXIuXG4iKTsKKwlnb3RvIGVuZDsKK2Vycm9yOgorCXN0ciA9ICZyZXNvdXJjZS0+bW9kZWxfbnVtYmVyOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIHN0cisrKQorCQlrZnJlZSgqc3RyKTsKK2VuZDoKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJcmV0dXJuIHJlczsKK30KKworLyogSGFuZGxlIEFDUEkgZXZlbnQgbm90aWZpY2F0aW9ucyAqLworc3RhdGljIHZvaWQgYWNwaV9wb3dlcl9tZXRlcl9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCkKK3sKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2U7CisJaW50IHJlczsKKworCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCisJCXJldHVybjsKKworCXJlc291cmNlID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCisJbXV0ZXhfbG9jaygmcmVzb3VyY2UtPmxvY2spOworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1FVEVSX05PVElGWV9DT05GSUc6CisJCWZyZWVfY2FwYWJpbGl0aWVzKHJlc291cmNlKTsKKwkJcmVzID0gcmVhZF9jYXBhYmlsaXRpZXMocmVzb3VyY2UpOworCQlpZiAocmVzKQorCQkJYnJlYWs7CisKKwkJcmVtb3ZlX2F0dHJzKHJlc291cmNlKTsKKwkJc2V0dXBfYXR0cnMocmVzb3VyY2UpOworCQlicmVhazsKKwljYXNlIE1FVEVSX05PVElGWV9UUklQOgorCQlzeXNmc19ub3RpZnkoJmRldmljZS0+ZGV2LmtvYmosIE5VTEwsIFBPV0VSX0FWRVJBR0VfTkFNRSk7CisJCXVwZGF0ZV9tZXRlcihyZXNvdXJjZSk7CisJCWJyZWFrOworCWNhc2UgTUVURVJfTk9USUZZX0NBUDoKKwkJc3lzZnNfbm90aWZ5KCZkZXZpY2UtPmRldi5rb2JqLCBOVUxMLCBQT1dFUl9DQVBfTkFNRSk7CisJCXVwZGF0ZV9jYXAocmVzb3VyY2UpOworCQlicmVhazsKKwljYXNlIE1FVEVSX05PVElGWV9JTlRFUlZBTDoKKwkJc3lzZnNfbm90aWZ5KCZkZXZpY2UtPmRldi5rb2JqLCBOVUxMLCBQT1dFUl9BVkdfSU5URVJWQUxfTkFNRSk7CisJCXVwZGF0ZV9hdmdfaW50ZXJ2YWwocmVzb3VyY2UpOworCQlicmVhazsKKwljYXNlIE1FVEVSX05PVElGWV9DQVBQSU5HOgorCQlzeXNmc19ub3RpZnkoJmRldmljZS0+ZGV2LmtvYmosIE5VTEwsIFBPV0VSX0FMQVJNX05BTUUpOworCQlkZXZfaW5mbygmZGV2aWNlLT5kZXYsICJDYXBwaW5nIGluIHByb2dyZXNzLlxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwltdXRleF91bmxvY2soJnJlc291cmNlLT5sb2NrKTsKKworCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQoQUNQSV9QT1dFUl9NRVRFUl9DTEFTUywKKwkJCQkJZGV2X25hbWUoJmRldmljZS0+ZGV2KSwgZXZlbnQsIDApOworfQorCitzdGF0aWMgaW50IGFjcGlfcG93ZXJfbWV0ZXJfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCByZXM7CisJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzb3VyY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSksCisJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc291cmNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlc291cmNlLT5zZW5zb3JzX3ZhbGlkID0gMDsKKwlyZXNvdXJjZS0+YWNwaV9kZXYgPSBkZXZpY2U7CisJbXV0ZXhfaW5pdCgmcmVzb3VyY2UtPmxvY2spOworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfUE9XRVJfTUVURVJfREVWSUNFX05BTUUpOworCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1BPV0VSX01FVEVSX0NMQVNTKTsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gcmVzb3VyY2U7CisKKwlmcmVlX2NhcGFiaWxpdGllcyhyZXNvdXJjZSk7CisJcmVzID0gcmVhZF9jYXBhYmlsaXRpZXMocmVzb3VyY2UpOworCWlmIChyZXMpCisJCWdvdG8gZXhpdF9mcmVlOworCisJcmVzb3VyY2UtPnRyaXBbMF0gPSByZXNvdXJjZS0+dHJpcFsxXSA9IC0xOworCisJcmVzID0gc2V0dXBfYXR0cnMocmVzb3VyY2UpOworCWlmIChyZXMpCisJCWdvdG8gZXhpdF9mcmVlOworCisJcmVzb3VyY2UtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmZGV2aWNlLT5kZXYpOworCWlmIChJU19FUlIocmVzb3VyY2UtPmh3bW9uX2RldikpIHsKKwkJcmVzID0gUFRSX0VSUihyZXNvdXJjZS0+aHdtb25fZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlyZXMgPSAwOworCWdvdG8gZXhpdDsKKworZXhpdF9yZW1vdmU6CisJcmVtb3ZlX2F0dHJzKHJlc291cmNlKTsKK2V4aXRfZnJlZToKKwlrZnJlZShyZXNvdXJjZSk7CitleGl0OgorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wb3dlcl9tZXRlcl9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQoreworCXN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlICpyZXNvdXJjZTsKKworCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzb3VyY2UgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIocmVzb3VyY2UtPmh3bW9uX2Rldik7CisKKwlmcmVlX2NhcGFiaWxpdGllcyhyZXNvdXJjZSk7CisJcmVtb3ZlX2F0dHJzKHJlc291cmNlKTsKKworCWtmcmVlKHJlc291cmNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BpX3Bvd2VyX21ldGVyX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9yZXNvdXJjZSAqcmVzb3VyY2U7CisKKwlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlc291cmNlID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCWZyZWVfY2FwYWJpbGl0aWVzKHJlc291cmNlKTsKKwlyZWFkX2NhcGFiaWxpdGllcyhyZXNvdXJjZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3Bvd2VyX21ldGVyX2RyaXZlciA9IHsKKwkubmFtZSA9ICJwb3dlcl9tZXRlciIsCisJLmNsYXNzID0gQUNQSV9QT1dFUl9NRVRFUl9DTEFTUywKKwkuaWRzID0gcG93ZXJfbWV0ZXJfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBhY3BpX3Bvd2VyX21ldGVyX2FkZCwKKwkJLnJlbW92ZSA9IGFjcGlfcG93ZXJfbWV0ZXJfcmVtb3ZlLAorCQkucmVzdW1lID0gYWNwaV9wb3dlcl9tZXRlcl9yZXN1bWUsCisJCS5ub3RpZnkgPSBhY3BpX3Bvd2VyX21ldGVyX25vdGlmeSwKKwkJfSwKK307CisKKy8qIE1vZHVsZSBpbml0L2V4aXQgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9jYXBfa25vYnMoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJY2FwX2luX2hhcmR3YXJlID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgcG1fZG1pX3RhYmxlW10gPSB7CisJeworCQllbmFibGVfY2FwX2tub2JzLCAiSUJNIEFjdGl2ZSBFbmVyZ3kgTWFuYWdlciIsCisJCXsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIklCTSIpCisJCX0sCisJfSwKKwl7fQorfTsKKworc3RhdGljIGludCBfX2luaXQgYWNwaV9wb3dlcl9tZXRlcl9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCWlmIChhY3BpX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRtaV9jaGVja19zeXN0ZW0ocG1fZG1pX3RhYmxlKTsKKworCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wb3dlcl9tZXRlcl9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9wb3dlcl9tZXRlcl9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcG93ZXJfbWV0ZXJfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiRGFycmljayBKLiBXb25nIDxkandvbmdAdXMuaWJtLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSA0LjAgcG93ZXIgbWV0ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShmb3JjZV9jYXBfb24sIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9jYXBfb24sICJFbmFibGUgcG93ZXIgY2FwIGV2ZW4gaXQgaXMgdW5zYWZlIHRvIGRvIHNvLiIpOworCittb2R1bGVfaW5pdChhY3BpX3Bvd2VyX21ldGVyX2luaXQpOworbW9kdWxlX2V4aXQoYWNwaV9wb3dlcl9tZXRlcl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggMmNjNGIzMC4uYzJkNGQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTU5LDYgKzU5LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ0xBU1MJCSJwcm9jZXNzb3IiCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0RFVklDRV9OQU1FCSJQcm9jZXNzb3IiCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0ZJTEVfSU5GTwkiaW5mbyIKQEAgLTc5LDkgKzgxLDEwIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3Jfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfaW5mb19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKyNlbmRpZgogc3RhdGljIHZvaWQgYWNwaV9wcm9jZXNzb3Jfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpOwogc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9pbml0KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICpwX2NwdSk7CiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2hhbmRsZV9lamVjdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKQEAgLTEwMSw3ICsxMDQsNiBAQAogCS5vcHMgPSB7CiAJCS5hZGQgPSBhY3BpX3Byb2Nlc3Nvcl9hZGQsCiAJCS5yZW1vdmUgPSBhY3BpX3Byb2Nlc3Nvcl9yZW1vdmUsCi0JCS5zdGFydCA9IGFjcGlfcHJvY2Vzc29yX3N0YXJ0LAogCQkuc3VzcGVuZCA9IGFjcGlfcHJvY2Vzc29yX3N1c3BlbmQsCiAJCS5yZXN1bWUgPSBhY3BpX3Byb2Nlc3Nvcl9yZXN1bWUsCiAJCS5ub3RpZnkgPSBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnksCkBAIC0xMTAsNyArMTEyLDcgQEAKIAogI2RlZmluZSBJTlNUQUxMX05PVElGWV9IQU5ETEVSCQkxCiAjZGVmaW5lIFVOSU5TVEFMTF9OT1RJRllfSEFORExFUgkyCi0KKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2luZm9fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfcHJvY2Vzc29yX2luZm9fb3Blbl9mcywKQEAgLTExOCw2ICsxMjAsNyBAQAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CisjZW5kaWYKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGFjcGlfcHJvY2Vzc29yICosIHByb2Nlc3NvcnMpOwogc3RydWN0IGFjcGlfcHJvY2Vzc29yX2VycmF0YSBlcnJhdGEgX19yZWFkX21vc3RseTsKQEAgLTMxNiw2ICszMTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlMgSW50ZXJmYWNlICgvcHJvYykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmFjcGlfcHJvY2Vzc29yX2RpciA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfaW5mb19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQpAQCAtMzg4LDcgKzM5Miw2IEBACiAJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQotCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3JlbW92ZV9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIApAQCAtNDA1LDYgKzQwOCwxNiBAQAogCiAJcmV0dXJuIDA7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9wcm9jZXNzb3JfYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9wcm9jZXNzb3JfcmVtb3ZlX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIC8qIFVzZSB0aGUgYWNwaWlkIGluIE1BRFQgdG8gbWFwIGNwdXMgaW4gY2FzZSBvZiBTTVAgKi8KIApAQCAtNjk4LDkyICs3MTEsNiBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodm9pZCAqLCBwcm9jZXNzb3JfZGV2aWNlX2FycmF5KTsKIAotc3RhdGljIGludCBfX2NwdWluaXQgYWNwaV9wcm9jZXNzb3Jfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwotCi0JcHIgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0KLQlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbyhkZXZpY2UpOwotCWlmIChyZXN1bHQpIHsKLQkJLyogUHJvY2Vzc29yIGlzIHBoeXNpY2FsbHkgbm90IHByZXNlbnQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JQlVHX09OKChwci0+aWQgPj0gbnJfY3B1X2lkcykgfHwgKHByLT5pZCA8IDApKTsKLQotCS8qCi0JICogQnVnZ3kgQklPUyBjaGVjawotCSAqIEFDUEkgaWQgb2YgcHJvY2Vzc29ycyBjYW4gYmUgcmVwb3J0ZWQgd3JvbmdseSBieSB0aGUgQklPUy4KLQkgKiBEb24ndCB0cnVzdCBpdCBibGluZGx5Ci0JICovCi0JaWYgKHBlcl9jcHUocHJvY2Vzc29yX2RldmljZV9hcnJheSwgcHItPmlkKSAhPSBOVUxMICYmCi0JICAgIHBlcl9jcHUocHJvY2Vzc29yX2RldmljZV9hcnJheSwgcHItPmlkKSAhPSBkZXZpY2UpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQklPUyByZXBvcnRlZCB3cm9uZyBBQ1BJIGlkICIKLQkJCSJmb3IgdGhlIHByb2Nlc3NvclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwZXJfY3B1KHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXksIHByLT5pZCkgPSBkZXZpY2U7Ci0KLQlwZXJfY3B1KHByb2Nlc3NvcnMsIHByLT5pZCkgPSBwcjsKLQotCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2FkZF9mcyhkZXZpY2UpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZW5kOwotCi0Jc3lzZGV2ID0gZ2V0X2NwdV9zeXNkZXYocHItPmlkKTsKLQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosICZzeXNkZXYtPmtvYmosICJzeXNkZXYiKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBfUERDIGNhbGwgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UgKGlmIHJlcWQuKS4gKi8KLQlhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHByKTsKLQlhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHByKTsKLQlhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHByKTsKLQotI2lmZGVmIENPTkZJR19DUFVfRlJFUQotCWFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChwcik7Ci0jZW5kaWYKLQlhY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZ19pbmZvKHByKTsKLQlhY3BpX3Byb2Nlc3Nvcl9nZXRfbGltaXRfaW5mbyhwcik7Ci0KLQotCWFjcGlfcHJvY2Vzc29yX3Bvd2VyX2luaXQocHIsIGRldmljZSk7Ci0KLQlwci0+Y2RldiA9IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoIlByb2Nlc3NvciIsIGRldmljZSwKLQkJCQkJCSZwcm9jZXNzb3JfY29vbGluZ19vcHMpOwotCWlmIChJU19FUlIocHItPmNkZXYpKSB7Ci0JCXJlc3VsdCA9IFBUUl9FUlIocHItPmNkZXYpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkZXZfaW5mbygmZGV2aWNlLT5kZXYsICJyZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCi0JCSBwci0+Y2Rldi0+aWQpOwotCi0JcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosCi0JCQkJICAgJnByLT5jZGV2LT5kZXZpY2Uua29iaiwKLQkJCQkgICAidGhlcm1hbF9jb29saW5nIik7Ci0JaWYgKHJlc3VsdCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiQ3JlYXRlIHN5c2ZzIGxpbmtcbiIpOwotCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZwci0+Y2Rldi0+ZGV2aWNlLmtvYmosCi0JCQkJICAgJmRldmljZS0+ZGV2LmtvYmosCi0JCQkJICAgImRldmljZSIpOwotCWlmIChyZXN1bHQpCi0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkNyZWF0ZSBzeXNmcyBsaW5rXG4iKTsKLQotCWlmIChwci0+ZmxhZ3MudGhyb3R0bGluZykgewotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgWyVzXSAoc3VwcG9ydHMiLAotCQkgICAgICAgYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSk7Ci0JCXByaW50aygiICVkIHRocm90dGxpbmcgc3RhdGVzIiwgcHItPnRocm90dGxpbmcuc3RhdGVfY291bnQpOwotCQlwcmludGsoIilcbiIpOwotCX0KLQotICAgICAgZW5kOgotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIHZvaWQgYWNwaV9wcm9jZXNzb3Jfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTg0NiwxMCArNzczLDggQEAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBOVUxMOwotCi0KLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCXByID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfcHJvY2Vzc29yKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcikKQEAgLTg2NSw3ICs3OTAsMTAwIEBACiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfUFJPQ0VTU09SX0NMQVNTKTsKIAlkZXZpY2UtPmRyaXZlcl9kYXRhID0gcHI7CiAKKwlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbyhkZXZpY2UpOworCWlmIChyZXN1bHQpIHsKKwkJLyogUHJvY2Vzc29yIGlzIHBoeXNpY2FsbHkgbm90IHByZXNlbnQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJQlVHX09OKChwci0+aWQgPj0gbnJfY3B1X2lkcykgfHwgKHByLT5pZCA8IDApKTsKKworCS8qCisJICogQnVnZ3kgQklPUyBjaGVjaworCSAqIEFDUEkgaWQgb2YgcHJvY2Vzc29ycyBjYW4gYmUgcmVwb3J0ZWQgd3JvbmdseSBieSB0aGUgQklPUy4KKwkgKiBEb24ndCB0cnVzdCBpdCBibGluZGx5CisJICovCisJaWYgKHBlcl9jcHUocHJvY2Vzc29yX2RldmljZV9hcnJheSwgcHItPmlkKSAhPSBOVUxMICYmCisJICAgIHBlcl9jcHUocHJvY2Vzc29yX2RldmljZV9hcnJheSwgcHItPmlkKSAhPSBkZXZpY2UpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQklPUyByZXBvcnRlZCB3cm9uZyBBQ1BJIGlkICIKKwkJCSJmb3IgdGhlIHByb2Nlc3NvclxuIik7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfY3B1bWFzazsKKwl9CisJcGVyX2NwdShwcm9jZXNzb3JfZGV2aWNlX2FycmF5LCBwci0+aWQpID0gZGV2aWNlOworCisJcGVyX2NwdShwcm9jZXNzb3JzLCBwci0+aWQpID0gcHI7CisKKwlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9hZGRfZnMoZGV2aWNlKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVycl9mcmVlX2NwdW1hc2s7CisKKwlzeXNkZXYgPSBnZXRfY3B1X3N5c2Rldihwci0+aWQpOworCWlmIChzeXNmc19jcmVhdGVfbGluaygmZGV2aWNlLT5kZXYua29iaiwgJnN5c2Rldi0+a29iaiwgInN5c2RldiIpKSB7CisJCXJlc3VsdCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX3JlbW92ZV9mczsKKwl9CisKKwkvKiBfUERDIGNhbGwgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UgKGlmIHJlcWQuKS4gKi8KKwlhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHByKTsKKwlhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHByKTsKKwlhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHByKTsKKworI2lmZGVmIENPTkZJR19DUFVfRlJFUQorCWFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChwcik7CisjZW5kaWYKKwlhY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZ19pbmZvKHByKTsKKwlhY3BpX3Byb2Nlc3Nvcl9nZXRfbGltaXRfaW5mbyhwcik7CisKKworCWFjcGlfcHJvY2Vzc29yX3Bvd2VyX2luaXQocHIsIGRldmljZSk7CisKKwlwci0+Y2RldiA9IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoIlByb2Nlc3NvciIsIGRldmljZSwKKwkJCQkJCSZwcm9jZXNzb3JfY29vbGluZ19vcHMpOworCWlmIChJU19FUlIocHItPmNkZXYpKSB7CisJCXJlc3VsdCA9IFBUUl9FUlIocHItPmNkZXYpOworCQlnb3RvIGVycl9wb3dlcl9leGl0OworCX0KKworCWRldl9pbmZvKCZkZXZpY2UtPmRldiwgInJlZ2lzdGVyZWQgYXMgY29vbGluZ19kZXZpY2UlZFxuIiwKKwkJIHByLT5jZGV2LT5pZCk7CisKKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2aWNlLT5kZXYua29iaiwKKwkJCQkgICAmcHItPmNkZXYtPmRldmljZS5rb2JqLAorCQkJCSAgICJ0aGVybWFsX2Nvb2xpbmciKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkNyZWF0ZSBzeXNmcyBsaW5rXG4iKTsKKwkJZ290byBlcnJfdGhlcm1hbF91bnJlZ2lzdGVyOworCX0KKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmcHItPmNkZXYtPmRldmljZS5rb2JqLAorCQkJCSAgICZkZXZpY2UtPmRldi5rb2JqLAorCQkJCSAgICJkZXZpY2UiKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkNyZWF0ZSBzeXNmcyBsaW5rXG4iKTsKKwkJZ290byBlcnJfcmVtb3ZlX3N5c2ZzOworCX0KKworCWlmIChwci0+ZmxhZ3MudGhyb3R0bGluZykgeworCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgWyVzXSAoc3VwcG9ydHMiLAorCQkgICAgICAgYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSk7CisJCXByaW50aygiICVkIHRocm90dGxpbmcgc3RhdGVzIiwgcHItPnRocm90dGxpbmcuc3RhdGVfY291bnQpOworCQlwcmludGsoIilcbiIpOworCX0KKwogCXJldHVybiAwOworCitlcnJfcmVtb3ZlX3N5c2ZzOgorCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLCAidGhlcm1hbF9jb29saW5nIik7CitlcnJfdGhlcm1hbF91bnJlZ2lzdGVyOgorCXRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3Rlcihwci0+Y2Rldik7CitlcnJfcG93ZXJfZXhpdDoKKwlhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9leGl0KHByLCBkZXZpY2UpOworZXJyX3JlbW92ZV9mczoKKwlhY3BpX3Byb2Nlc3Nvcl9yZW1vdmVfZnMoZGV2aWNlKTsKK2Vycl9mcmVlX2NwdW1hc2s6CisJZnJlZV9jcHVtYXNrX3Zhcihwci0+dGhyb3R0bGluZy5zaGFyZWRfY3B1X21hcCk7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCkBAIC05NDIsNyArOTYwLDYgQEAKIHsKIAlhY3BpX2hhbmRsZSBwaGFuZGxlOwogCXN0cnVjdCBhY3BpX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByOwogCiAKIAlpZiAoYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJnBoYW5kbGUpKSB7CkBAIC05NTcsMTUgKzk3NCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWFjcGlfYnVzX3N0YXJ0KCpkZXZpY2UpOwotCi0JcHIgPSBhY3BpX2RyaXZlcl9kYXRhKCpkZXZpY2UpOwotCWlmICghcHIpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKChwci0+aWQgPj0gMCkgJiYgKHByLT5pZCA8IG5yX2NwdV9pZHMpKSB7Ci0JCWtvYmplY3RfdWV2ZW50KCYoKmRldmljZSktPmRldi5rb2JqLCBLT0JKX09OTElORSk7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC05OTUsMjUgKzEwMDMsNiBAQAogCQkJCQkgICAgIlVuYWJsZSB0byBhZGQgdGhlIGRldmljZVxuIik7CiAJCQlicmVhazsKIAkJfQotCi0JCXByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCQlpZiAoIXByKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJEcml2ZXIgZGF0YSBpcyBOVUxMXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHByLT5pZCA+PSAwICYmIChwci0+aWQgPCBucl9jcHVfaWRzKSkgewotCQkJa29iamVjdF91ZXZlbnQoJmRldmljZS0+ZGV2LmtvYmosIEtPQkpfT0ZGTElORSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX3N0YXJ0KGRldmljZSk7Ci0JCWlmICgoIXJlc3VsdCkgJiYgKChwci0+aWQgPj0gMCkgJiYgKHByLT5pZCA8IG5yX2NwdV9pZHMpKSkgewotCQkJa29iamVjdF91ZXZlbnQoJmRldmljZS0+ZGV2LmtvYmosIEtPQkpfT05MSU5FKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkRldmljZSBbJXNdIGZhaWxlZCB0byBzdGFydFxuIiwKLQkJCQkgICAgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVDoKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLApAQCAtMTAzMCw5ICsxMDE5LDYgQEAKIAkJCQkgICAgIkRyaXZlciBkYXRhIGlzIE5VTEwsIGRyb3BwaW5nIEVKRUNUXG4iKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCWlmICgocHItPmlkIDwgbnJfY3B1X2lkcykgJiYgKGNwdV9wcmVzZW50KHByLT5pZCkpKQotCQkJa29iamVjdF91ZXZlbnQoJmRldmljZS0+ZGV2LmtvYmosIEtPQkpfT0ZGTElORSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKQEAgLTExNjEsMTEgKzExNDcsMTEgQEAKIAkJCQkoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZtYWR0KSkpCiAJCW1hZHQgPSBOVUxMOwogI2VuZGlmCi0KKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlhY3BpX3Byb2Nlc3Nvcl9kaXIgPSBwcm9jX21rZGlyKEFDUElfUFJPQ0VTU09SX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFjcGlfcHJvY2Vzc29yX2RpcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0KKyNlbmRpZgogCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGUgc3lzdGVtIGlzIERNSSB0YWJsZS4gSWYgeWVzLCBPU1BNCiAJICogc2hvdWxkIG5vdCB1c2UgbXdhaXQgZm9yIENQVS1zdGF0ZXMuCkBAIC0xMTkzLDcgKzExNzksOSBAQAogCWNwdWlkbGVfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfaWRsZV9kcml2ZXIpOwogCiBvdXRfcHJvYzoKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CisjZW5kaWYKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xMjEzLDcgKzEyMDEsOSBAQAogCiAJY3B1aWRsZV91bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9pZGxlX2RyaXZlcik7CiAKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CisjZW5kaWYKIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggNjYzOTNkNS4uY2M2MWE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTYwLDYgKzYwLDggQEAKICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9DTEFTUyAgICAgICAgICAgICJwcm9jZXNzb3IiCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgICAgIEFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgicHJvY2Vzc29yX2lkbGUiKTsKQEAgLTY4MCw2ICs2ODIsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3Bvd2VyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IHNlcS0+cHJpdmF0ZTsKQEAgLTc1OSw3ICs3NjIsNyBAQAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07Ci0KKyNlbmRpZgogCiAvKioKICAqIGFjcGlfaWRsZV9ibV9jaGVjayAtIGNoZWNrcyBpZiBidXMgbWFzdGVyIGFjdGl2aXR5IHdhcyBkZXRlY3RlZApAQCAtMTE2MCw3ICsxMTYzLDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwogCXN0YXRpYyBpbnQgZmlyc3RfcnVuOworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPSBOVUxMOworI2VuZGlmCiAJdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSkKQEAgLTEyMTcsNyArMTIyMiw3IEBACiAJCQkJICAgICAgIHByLT5wb3dlci5zdGF0ZXNbaV0udHlwZSk7CiAJCXByaW50aygiKVxuIik7CiAJfQotCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJLyogJ3Bvd2VyJyBbUl0gKi8KIAllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoQUNQSV9QUk9DRVNTT1JfRklMRV9QT1dFUiwKIAkJCQkgU19JUlVHTywgYWNwaV9kZXZpY2VfZGlyKGRldmljZSksCkBAIC0xMjI1LDYgKzEyMzAsNyBAQAogCQkJCSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpOwogCWlmICghZW50cnkpCiAJCXJldHVybiAtRUlPOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMzcsOSArMTI0MywxMSBAQAogCWNwdWlkbGVfdW5yZWdpc3Rlcl9kZXZpY2UoJnByLT5wb3dlci5kZXYpOwogCXByLT5mbGFncy5wb3dlcl9zZXR1cF9kb25lID0gMDsKIAorI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKIAkJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9QUk9DRVNTT1JfRklMRV9QT1dFUiwKIAkJCQkgIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKKyNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCmluZGV4IDYwZTU0M2QuLjExMDg4Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0NMQVNTCQkicHJvY2Vzc29yIgogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9GSUxFX1BFUkZPUk1BTkNFCSJwZXJmb3JtYW5jZSIKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9QUk9DRVNTT1JfQ09NUE9ORU5UCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCmluZGV4IDMxYWRkYTEuLjE0MGM1YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0NMQVNTICAgICAgICAgICAgInByb2Nlc3NvciIKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICAgICAgQUNQSV9QUk9DRVNTT1JfQ09NUE9ORU5UCiBBQ1BJX01PRFVMRV9OQU1FKCJwcm9jZXNzb3JfdGhlcm1hbCIpOwpAQCAtNDM4LDcgKzQ0MCw3IEBACiB9OwogCiAvKiAvcHJvYyBpbnRlcmZhY2UgKi8KLQorI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9saW1pdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopc2VxLT5wcml2YXRlOwpAQCAtNTE3LDMgKzUxOSw0IEBACiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwppbmRleCBhZTM5Nzk3Li5jZTdjZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9DTEFTUyAgICAgICAgICAgICJwcm9jZXNzb3IiCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgICAgIEFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgicHJvY2Vzc29yX3Rocm90dGxpbmciKTsKQEAgLTEyMTYsNyArMTIxOCw3IEBACiB9CiAKIC8qIHByb2MgaW50ZXJmYWNlICovCi0KKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfdGhyb3R0bGluZ19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKIAkJCQkJICAgICAgdm9pZCAqb2Zmc2V0KQogewpAQCAtMTMyNCwzICsxMzI2LDQgQEAKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzLmMgYi9kcml2ZXJzL2FjcGkvc2JzLmMKaW5kZXggNGIyMTRiNy4uNTJiOWRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnMuYwpAQCAtNDYsNiArNDYsOCBAQAogCiAjaW5jbHVkZSAic2JzaGMuaCIKIAorI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKKwogI2RlZmluZSBBQ1BJX1NCU19DTEFTUwkJCSJzYnMiCiAjZGVmaW5lIEFDUElfQUNfQ0xBU1MJCQkiYWNfYWRhcHRlciIKICNkZWZpbmUgQUNQSV9CQVRURVJZX0NMQVNTCQkiYmF0dGVyeSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zYnNoYy5jIGIvZHJpdmVycy9hY3BpL3Nic2hjLmMKaW5kZXggMDYxOTczNC4uZDkzMzk4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nic2hjLmMKKysrIGIvZHJpdmVycy9hY3BpL3Nic2hjLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlICJzYnNoYy5oIgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfU01CX0hDX0NMQVNTCSJzbWJ1c19ob3N0X2NvbnRyb2xsZXIiCiAjZGVmaW5lIEFDUElfU01CX0hDX0RFVklDRV9OQU1FCSJBQ1BJIFNNQnVzIEhDIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCAzMThiMWVhLi40MDhlYmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTYwLDEzICs2MCwxMyBAQAogCX0KIAogCWlmIChhY3BpX2Rldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdDsKKwkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3Q7CiAJCWludCBpOwogCiAJCWNpZF9saXN0ID0gYWNwaV9kZXYtPnBucC5jaWRfbGlzdDsKIAkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7CiAJCQljb3VudCA9IHNucHJpbnRmKCZtb2RhbGlhc1tsZW5dLCBzaXplLCAiJXM6IiwKLQkJCQkJIGNpZF9saXN0LT5pZFtpXS52YWx1ZSk7CisJCQkJCSBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZyk7CiAJCQlpZiAoY291bnQgPCAwIHx8IGNvdW50ID49IHNpemUpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICIlcyBjaWRbJWldIGV4Y2VlZHMgZXZlbnQgYnVmZmVyIHNpemUiLAogCQkJCSAgICAgICBhY3BpX2Rldi0+cG5wLmRldmljZV9uYW1lLCBpKTsKQEAgLTI4NywxNCArMjg3LDE0IEBACiAJfQogCiAJaWYgKGRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OworCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwogCQlpbnQgaTsKIAogCQlmb3IgKGlkID0gaWRzOyBpZC0+aWRbMF07IGlkKyspIHsKIAkJCS8qIGNvbXBhcmUgbXVsdGlwbGUgX0NJRCBlbnRyaWVzIGFnYWluc3QgZHJpdmVyIGlkcyAqLwogCQkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7CiAJCQkJaWYgKCFzdHJjbXAoKGNoYXIqKWlkLT5pZCwKLQkJCQkJICAgIGNpZF9saXN0LT5pZFtpXS52YWx1ZSkpCisJCQkJCSAgICBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZykpCiAJCQkJCXJldHVybiAwOwogCQkJfQogCQl9CkBAIC0zMDksNiArMzA5LDEwIEBACiAJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CiAKIAlrZnJlZShhY3BpX2Rldi0+cG5wLmNpZF9saXN0KTsKKwlpZiAoYWNwaV9kZXYtPmZsYWdzLmhhcmR3YXJlX2lkKQorCQlrZnJlZShhY3BpX2Rldi0+cG5wLmhhcmR3YXJlX2lkKTsKKwlpZiAoYWNwaV9kZXYtPmZsYWdzLnVuaXF1ZV9pZCkKKwkJa2ZyZWUoYWNwaV9kZXYtPnBucC51bmlxdWVfaWQpOwogCWtmcmVlKGFjcGlfZGV2KTsKIH0KIApAQCAtMzY2LDcgKzM3MCw4IEBACiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBkYXRhOwogCi0JYWNwaV9kZXZpY2Vfbm90aWZ5KGRldmljZS0+aGFuZGxlLCBBQ1BJX0ZJWEVEX0hBUkRXQVJFX0VWRU5ULCBkZXZpY2UpOworCS8qIEZpeGVkIGhhcmR3YXJlIGRldmljZXMgaGF2ZSBubyBoYW5kbGVzICovCisJYWNwaV9kZXZpY2Vfbm90aWZ5KE5VTEwsIEFDUElfRklYRURfSEFSRFdBUkVfRVZFTlQsIGRldmljZSk7CiAJcmV0dXJuIEFFX09LOwogfQogCkBAIC00MjYsOSArNDMxLDYgQEAKIAkJaWYgKGFjcGlfZHJ2LT5vcHMubm90aWZ5KSB7CiAJCQlyZXQgPSBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGFjcGlfZGV2KTsKIAkJCWlmIChyZXQpIHsKLQkJCQlpZiAoYWNwaV9kcnYtPm9wcy5zdG9wKQotCQkJCQlhY3BpX2Rydi0+b3BzLnN0b3AoYWNwaV9kZXYsCi0JCQkJCQkgICBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKIAkJCQlpZiAoYWNwaV9kcnYtPm9wcy5yZW1vdmUpCiAJCQkJCWFjcGlfZHJ2LT5vcHMucmVtb3ZlKGFjcGlfZGV2LAogCQkJCQkJICAgICBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKQEAgLTQ1Miw4ICs0NTQsNiBAQAogCWlmIChhY3BpX2RydikgewogCQlpZiAoYWNwaV9kcnYtPm9wcy5ub3RpZnkpCiAJCQlhY3BpX2RldmljZV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoYWNwaV9kZXYpOwotCQlpZiAoYWNwaV9kcnYtPm9wcy5zdG9wKQotCQkJYWNwaV9kcnYtPm9wcy5zdG9wKGFjcGlfZGV2LCBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKIAkJaWYgKGFjcGlfZHJ2LT5vcHMucmVtb3ZlKQogCQkJYWNwaV9kcnYtPm9wcy5yZW1vdmUoYWNwaV9kZXYsIGFjcGlfZGV2LT5yZW1vdmFsX3R5cGUpOwogCX0KQEAgLTY4Nyw3ICs2ODcsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9idXNfZ2V0X2VqZCk7CiAKLXZvaWQgYWNwaV9idXNfZGF0YV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KQordm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB2b2lkICpjb250ZXh0KQogewogCiAJLyogVEJEICovCkBAIC0xMDAwLDMzICsxMDAwLDg5IEBACiAJcmV0dXJuIGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9EQ0siLCAmdG1wKTsKIH0KIAorc3RhdGljIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QqCithY3BpX2FkZF9jaWQoCisJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gICAgICAgICAqaW5mbywKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAgICAgICAgICpuZXdfY2lkKQoreworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgICAgKmNpZDsKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXh0X2lkX3N0cmluZzsKKwlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGNpZF9sZW5ndGg7CisJYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2lkX2xlbmd0aDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7CisKKworCS8qIEFsbG9jYXRlIG5ldyBDSUQgbGlzdCB3aXRoIHJvb20gZm9yIHRoZSBuZXcgQ0lEICovCisKKwlpZiAoIW5ld19jaWQpCisJCW5ld19jaWRfbGVuZ3RoID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmxpc3Rfc2l6ZTsKKwllbHNlIGlmIChpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplKQorCQluZXdfY2lkX2xlbmd0aCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemUgKworCQkJbmV3X2NpZC0+bGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkKTsKKwllbHNlCisJCW5ld19jaWRfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QpICsgbmV3X2NpZC0+bGVuZ3RoOworCisJY2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQobmV3X2NpZF9sZW5ndGgpOworCWlmICghY2lkKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCWNpZC0+bGlzdF9zaXplID0gbmV3X2NpZF9sZW5ndGg7CisJY2lkLT5jb3VudCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsKKwlpZiAobmV3X2NpZCkKKwkJY2lkLT5jb3VudCsrOworCW5leHRfaWRfc3RyaW5nID0gKGNoYXIgKikgY2lkLT5pZHMgKyAoY2lkLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOworCisJLyogQ29weSBhbGwgZXhpc3RpbmcgQ0lEcyAqLworCisJZm9yIChpID0gMDsgaSA8IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsgaSsrKSB7CisJCWNpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuaWRzW2ldLmxlbmd0aDsKKwkJY2lkLT5pZHNbaV0uc3RyaW5nID0gbmV4dF9pZF9zdHJpbmc7CisJCWNpZC0+aWRzW2ldLmxlbmd0aCA9IGNpZF9sZW5ndGg7CisKKwkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5pZHNbaV0uc3RyaW5nLAorCQkJY2lkX2xlbmd0aCk7CisKKwkJbmV4dF9pZF9zdHJpbmcgKz0gY2lkX2xlbmd0aDsKKwl9CisKKwkvKiBBcHBlbmQgdGhlIG5ldyBDSUQgKi8KKworCWlmIChuZXdfY2lkKSB7CisJCWNpZC0+aWRzW2ldLnN0cmluZyA9IG5leHRfaWRfc3RyaW5nOworCQljaWQtPmlkc1tpXS5sZW5ndGggPSBuZXdfY2lkLT5sZW5ndGg7CisKKwkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIG5ld19jaWQtPnN0cmluZywgbmV3X2NpZC0+bGVuZ3RoKTsKKwl9CisKKwlyZXR1cm4gY2lkOworfQorCiBzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9zZXRfaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCiAJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwKIAkJCSAgICAgICBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvID0gTlVMTDsKIAljaGFyICpoaWQgPSBOVUxMOwogCWNoYXIgKnVpZCA9IE5VTEw7Ci0Jc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdCA9IE5VTEw7Ci0JY29uc3QgY2hhciAqY2lkX2FkZCA9IE5VTEw7CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3QgPSBOVUxMOworCWNoYXIgKmNpZF9hZGQgPSBOVUxMOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQUNQSV9CVVNfVFlQRV9ERVZJQ0U6Ci0JCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CisJCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiVzOiBFcnJvciByZWFkaW5nIGRldmljZSBpbmZvXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7CiAJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKQotCQkJaGlkID0gaW5mby0+aGFyZHdhcmVfaWQudmFsdWU7CisJCQloaWQgPSBpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmc7CiAJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfVUlEKQotCQkJdWlkID0gaW5mby0+dW5pcXVlX2lkLnZhbHVlOworCQkJdWlkID0gaW5mby0+dW5pcXVlX2lkLnN0cmluZzsKIAkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9DSUQpCi0JCQljaWRfbGlzdCA9ICZpbmZvLT5jb21wYXRpYmlsaXR5X2lkOworCQkJY2lkX2xpc3QgPSAmaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0OwogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0FEUikgewogCQkJZGV2aWNlLT5wbnAuYnVzX2FkZHJlc3MgPSBpbmZvLT5hZGRyZXNzOwogCQkJZGV2aWNlLT5mbGFncy5idXNfYWRkcmVzcyA9IDE7CkBAIC0xMDc3LDU1ICsxMTMzLDQ2IEBACiAJfQogCiAJaWYgKGhpZCkgewotCQlzdHJjcHkoZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQsIGhpZCk7Ci0JCWRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQgPSAxOwotCX0KLQlpZiAodWlkKSB7Ci0JCXN0cmNweShkZXZpY2UtPnBucC51bmlxdWVfaWQsIHVpZCk7Ci0JCWRldmljZS0+ZmxhZ3MudW5pcXVlX2lkID0gMTsKLQl9Ci0JaWYgKGNpZF9saXN0IHx8IGNpZF9hZGQpIHsKLQkJc3RydWN0ICBhY3BpX2NvbXBhdGlibGVfaWRfbGlzdCAqbGlzdDsKLQkJaW50IHNpemUgPSAwOwotCQlpbnQgY291bnQgPSAwOwotCi0JCWlmIChjaWRfbGlzdCkgewotCQkJc2l6ZSA9IGNpZF9saXN0LT5zaXplOwotCQl9IGVsc2UgaWYgKGNpZF9hZGQpIHsKLQkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0KTsKLQkJCWNpZF9saXN0ID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKGFjcGlfc2l6ZSkgc2l6ZSk7Ci0JCQlpZiAoIWNpZF9saXN0KSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCQkJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwotCQkJCXJldHVybjsKLQkJCX0gZWxzZSB7Ci0JCQkJY2lkX2xpc3QtPmNvdW50ID0gMDsKLQkJCQljaWRfbGlzdC0+c2l6ZSA9IHNpemU7Ci0JCQl9CisJCWRldmljZS0+cG5wLmhhcmR3YXJlX2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RybGVuIChoaWQpICsgMSk7CisJCWlmIChkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCkgeworCQkJc3RyY3B5KGRldmljZS0+cG5wLmhhcmR3YXJlX2lkLCBoaWQpOworCQkJZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCA9IDE7CiAJCX0KLQkJaWYgKGNpZF9hZGQpCi0JCQlzaXplICs9IHNpemVvZihzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkKTsKLQkJbGlzdCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJfQorCWlmICghZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCkKKwkJZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgPSAiIjsKKworCWlmICh1aWQpIHsKKwkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RybGVuICh1aWQpICsgMSk7CisJCWlmIChkZXZpY2UtPnBucC51bmlxdWVfaWQpIHsKKwkJCXN0cmNweShkZXZpY2UtPnBucC51bmlxdWVfaWQsIHVpZCk7CisJCQlkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCA9IDE7CisJCX0KKwl9CisJaWYgKCFkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCkKKwkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gIiI7CisKKwlpZiAoY2lkX2xpc3QgfHwgY2lkX2FkZCkgeworCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpsaXN0OworCisJCWlmIChjaWRfYWRkKSB7CisJCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBjaWQ7CisJCQljaWQubGVuZ3RoID0gc3RybGVuIChjaWRfYWRkKSArIDE7CisJCQljaWQuc3RyaW5nID0gY2lkX2FkZDsKKworCQkJbGlzdCA9IGFjcGlfYWRkX2NpZChpbmZvLCAmY2lkKTsKKwkJfSBlbHNlIHsKKwkJCWxpc3QgPSBhY3BpX2FkZF9jaWQoaW5mbywgTlVMTCk7CisJCX0KIAogCQlpZiAobGlzdCkgewotCQkJaWYgKGNpZF9saXN0KSB7Ci0JCQkJbWVtY3B5KGxpc3QsIGNpZF9saXN0LCBjaWRfbGlzdC0+c2l6ZSk7Ci0JCQkJY291bnQgPSBjaWRfbGlzdC0+Y291bnQ7Ci0JCQl9Ci0JCQlpZiAoY2lkX2FkZCkgewotCQkJCXN0cm5jcHkobGlzdC0+aWRbY291bnRdLnZhbHVlLCBjaWRfYWRkLAotCQkJCQlBQ1BJX01BWF9DSURfTEVOR1RIKTsKLQkJCQljb3VudCsrOwotCQkJCWRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMgPSAxOwotCQkJfQotCQkJbGlzdC0+c2l6ZSA9IHNpemU7Ci0JCQlsaXN0LT5jb3VudCA9IGNvdW50OwogCQkJZGV2aWNlLT5wbnAuY2lkX2xpc3QgPSBsaXN0OwotCQl9IGVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKwkJCWlmIChjaWRfYWRkKQorCQkJCWRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMgPSAxOworCQl9CiAJfQogCi0Ja2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCWtmcmVlKGluZm8pOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKQEAgLTEyNjUsMTYgKzEzMTIsNiBAQAogCWFjcGlfZGV2aWNlX3NldF9pZChkZXZpY2UsIHBhcmVudCwgaGFuZGxlLCB0eXBlKTsKIAogCS8qCi0JICogVGhlIEFDUEkgZGV2aWNlIGlzIGF0dGFjaGVkIHRvIGFjcGkgaGFuZGxlIGJlZm9yZSBnZXR0aW5nCi0JICogdGhlIHBvd2VyL3dha2V1cC9wZWZvcm1hbmNlIGZsYWdzLiBPdGhlcndpc2UgT1MgY2FuJ3QgZ2V0Ci0JICogdGhlIGNvcnJlc3BvbmRpbmcgQUNQSSBkZXZpY2UgYnkgdGhlIGFjcGkgaGFuZGxlIGluIHRoZSBjb3Vyc2UKLQkgKiBvZiBnZXR0aW5nIHRoZSBwb3dlci93YWtldXAvcGVyZm9ybWFuY2UgZmxhZ3MuCi0JICovCi0JcmVzdWx0ID0gYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoZGV2aWNlLCB0eXBlKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGVuZDsKLQotCS8qCiAJICogUG93ZXIgTWFuYWdlbWVudAogCSAqIC0tLS0tLS0tLS0tLS0tLS0KIAkgKi8KQEAgLTEzMDQsNiArMTM0MSw4IEBACiAJCQlnb3RvIGVuZDsKIAl9CiAKKwlpZiAoKHJlc3VsdCA9IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KGRldmljZSwgdHlwZSkpKQorCQlnb3RvIGVuZDsKIAogCXJlc3VsdCA9IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKGRldmljZSwgcGFyZW50KTsKIApAQCAtMTMxOCwxMCArMTM1Nyw4IEBACiBlbmQ6CiAJaWYgKCFyZXN1bHQpCiAJCSpjaGlsZCA9IGRldmljZTsKLQllbHNlIHsKLQkJa2ZyZWUoZGV2aWNlLT5wbnAuY2lkX2xpc3QpOwotCQlrZnJlZShkZXZpY2UpOwotCX0KKwllbHNlCisJCWFjcGlfZGV2aWNlX3JlbGVhc2UoJmRldmljZS0+ZGV2KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IGZlZWNlNjkuLmE5MGFmY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC00MDUsNiArNDA1LDE0IEBACiAJCX0sCiAJfSwKIAl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiSGV3bGV0dC1QYWNrYXJkIEhQIFBhdmlsaW9uIGR2MyBOb3RlYm9vayBQQyIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2MyBOb3RlYm9vayBQQyIpLAorCQl9LAorCX0sCisJewogCS5jYWxsYmFjayA9IGluaXRfb2xkX3N1c3BlbmRfb3JkZXJpbmcsCiAJLmlkZW50ID0gIlBhbmFzb25pYyBDRjUxLTJMIiwKIAkubWF0Y2hlcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCA5YzYxYWIyLi5kMTEyODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zMSw2ICszMSw4IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfU1lTVEVNX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgic3lzdGVtIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwppbmRleCA2NDZkMzljLi5mMzM2YmNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMjEzLDYgKzIxMyw5IEBACiAJdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQ7CiAJYWNwaV9zaXplIHRibF9zaXplOwogCisJaWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjc3LDYgKzI4MCw5IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CiAJYWNwaV9zaXplIHRibF9zaXplOwogCisJaWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggNTY0ZWExNC4uNjVmNjc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC00Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKICNkZWZpbmUgQUNQSV9USEVSTUFMX0NMQVNTCQkidGhlcm1hbF96b25lIgogI2RlZmluZSBBQ1BJX1RIRVJNQUxfREVWSUNFX05BTUUJIlRoZXJtYWwgWm9uZSIKICNkZWZpbmUgQUNQSV9USEVSTUFMX0ZJTEVfU1RBVEUJCSJzdGF0ZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlscy5jIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKaW5kZXggZjg0NDk0MS4uODExZmVjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9CVVNfQ09NUE9ORU5UCiBBQ1BJX01PRFVMRV9OQU1FKCJ1dGlscyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW8uYyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCmluZGV4IDYwZWE5ODQuLjk0YjFhNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlby5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCkBAIC00MCwxMCArNDAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCisjZGVmaW5lIFBSRUZJWCAiQUNQSTogIgorCiAjZGVmaW5lIEFDUElfVklERU9fQ0xBU1MJCSJ2aWRlbyIKICNkZWZpbmUgQUNQSV9WSURFT19CVVNfTkFNRQkJIlZpZGVvIEJ1cyIKICNkZWZpbmUgQUNQSV9WSURFT19ERVZJQ0VfTkFNRQkJIlZpZGVvIERldmljZSIKQEAgLTE5OCw3ICsyMDAsNyBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2OwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzICpicmlnaHRuZXNzOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7Ci0Jc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXY7CisJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNvb2xpbmdfZGV2OwogCXN0cnVjdCBvdXRwdXRfZGV2aWNlICpvdXRwdXRfZGV2OwogfTsKIApAQCAtMzg3LDIwICszODksMjAgQEAKIAogCiAvKiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGNhbGxiYWNrcyAqLwotc3RhdGljIGludCB2aWRlb19nZXRfbWF4X3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZAorc3RhdGljIGludCB2aWRlb19nZXRfbWF4X3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjb29saW5nX2RldiwgdW5zaWduZWQKIAkJCSAgICAgICBsb25nICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjb29saW5nX2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZGVvID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJKnN0YXRlID0gdmlkZW8tPmJyaWdodG5lc3MtPmNvdW50IC0gMzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRlb19nZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZAorc3RhdGljIGludCB2aWRlb19nZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjb29saW5nX2RldiwgdW5zaWduZWQKIAkJCSAgICAgICBsb25nICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjb29saW5nX2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZGVvID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBsZXZlbDsKIAlpbnQgb2Zmc2V0OwpAQCAtNDE3LDkgKzQxOSw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLXZpZGVvX3NldF9jdXJfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGxvbmcgc3RhdGUpCit2aWRlb19zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjb29saW5nX2RldiwgdW5zaWduZWQgbG9uZyBzdGF0ZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjb29saW5nX2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZGVvID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWludCBsZXZlbDsKIApAQCAtNjAzLDYgKzYwNSw3IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqbGV2ZWwpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJaW50IGk7CiAKIAlpZiAoZGV2aWNlLT5jYXAuX0JRQyB8fCBkZXZpY2UtPmNhcC5fQkNRKSB7CiAJCWNoYXIgKmJ1ZiA9IGRldmljZS0+Y2FwLl9CUUMgPyAiX0JRQyIgOiAiX0JDUSI7CkBAIC02MTgsOCArNjIxLDE1IEBACiAKIAkJCX0KIAkJCSpsZXZlbCArPSBicWNfb2Zmc2V0X2FtbF9idWdfd29ya2Fyb3VuZDsKLQkJCWRldmljZS0+YnJpZ2h0bmVzcy0+Y3VyciA9ICpsZXZlbDsKLQkJCXJldHVybiAwOworCQkJZm9yIChpID0gMjsgaSA8IGRldmljZS0+YnJpZ2h0bmVzcy0+Y291bnQ7IGkrKykKKwkJCQlpZiAoZGV2aWNlLT5icmlnaHRuZXNzLT5sZXZlbHNbaV0gPT0gKmxldmVsKSB7CisJCQkJCWRldmljZS0+YnJpZ2h0bmVzcy0+Y3VyciA9ICpsZXZlbDsKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCQkvKiBCUUMgcmV0dXJuZWQgYW4gaW52YWxpZCBsZXZlbC4gU3RvcCB1c2luZyBpdC4gICovCisJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sICIlcyByZXR1cm5lZCBhbiBpbnZhbGlkIGxldmVsIiwKKwkJCQkJCWJ1ZikpOworCQkJZGV2aWNlLT5jYXAuX0JRQyA9IGRldmljZS0+Y2FwLl9CQ1EgPSAwOwogCQl9IGVsc2UgewogCQkJLyogRml4bWU6CiAJCQkgKiBzaG91bGQgd2UgcmV0dXJuIGFuIGVycm9yIG9yIGlnbm9yZSB0aGlzIGZhaWx1cmU/CkBAIC04NzAsNyArODgwLDcgQEAKIAlici0+ZmxhZ3MuX0JDTV91c2VfaW5kZXggPSBici0+ZmxhZ3MuX0JDTF91c2VfaW5kZXg7CiAKIAkvKiBfQlFDIHVzZXMgSU5ERVggd2hpbGUgX0JDTCB1c2VzIFZBTFVFIGluIHNvbWUgbGFwdG9wcyAqLwotCWJyLT5jdXJyID0gbGV2ZWxfb2xkID0gbWF4X2xldmVsOworCWJyLT5jdXJyID0gbGV2ZWwgPSBtYXhfbGV2ZWw7CiAKIAlpZiAoIWRldmljZS0+Y2FwLl9CUUMpCiAJCWdvdG8gc2V0X2xldmVsOwpAQCAtODkyLDE1ICs5MDIsMjUgQEAKIAogCWJyLT5mbGFncy5fQlFDX3VzZV9pbmRleCA9IChsZXZlbCA9PSBtYXhfbGV2ZWwgPyAwIDogMSk7CiAKLQlpZiAoIWJyLT5mbGFncy5fQlFDX3VzZV9pbmRleCkKKwlpZiAoIWJyLT5mbGFncy5fQlFDX3VzZV9pbmRleCkgeworCQkvKgorCQkgKiBTZXQgdGhlIGJhY2tsaWdodCB0byB0aGUgaW5pdGlhbCBzdGF0ZS4KKwkJICogT24gc29tZSBidWdneSBsYXB0b3BzLCBfQlFDIHJldHVybnMgYW4gdW5pbml0aWFsaXplZCB2YWx1ZQorCQkgKiB3aGVuIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBpLmUuIGxldmVsX29sZCBpcyBpbnZhbGlkLgorCQkgKiBzZXQgdGhlIGJhY2tsaWdodCB0byBtYXhfbGV2ZWwgaW4gdGhpcyBjYXNlCisJCSAqLworCQlmb3IgKGkgPSAyOyBpIDwgYnItPmNvdW50OyBpKyspCisJCQlpZiAobGV2ZWxfb2xkID09IGJyLT5sZXZlbHNbaV0pCisJCQkJbGV2ZWwgPSBsZXZlbF9vbGQ7CiAJCWdvdG8gc2V0X2xldmVsOworCX0KIAogCWlmIChici0+ZmxhZ3MuX0JDTF9yZXZlcnNlZCkKIAkJbGV2ZWxfb2xkID0gKGJyLT5jb3VudCAtIDEpIC0gbGV2ZWxfb2xkOwotCWxldmVsX29sZCA9IGJyLT5sZXZlbHNbbGV2ZWxfb2xkXTsKKwlsZXZlbCA9IGJyLT5sZXZlbHNbbGV2ZWxfb2xkXTsKIAogc2V0X2xldmVsOgotCXJlc3VsdCA9IGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoZGV2aWNlLCBsZXZlbF9vbGQpOworCXJlc3VsdCA9IGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoZGV2aWNlLCBsZXZlbCk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBvdXRfZnJlZV9sZXZlbHM7CiAKQEAgLTkzNCw5ICs5NTQsNiBAQAogewogCWFjcGlfaGFuZGxlIGhfZHVtbXkxOwogCi0KLQltZW1zZXQoJmRldmljZS0+Y2FwLCAwLCBzaXplb2YoZGV2aWNlLT5jYXApKTsKLQogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+ZGV2LT5oYW5kbGUsICJfQURSIiwgJmhfZHVtbXkxKSkpIHsKIAkJZGV2aWNlLT5jYXAuX0FEUiA9IDE7CiAJfQpAQCAtOTkwLDE5ICsxMDA3LDI5IEBACiAJCWlmIChyZXN1bHQpCiAJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDcmVhdGUgc3lzZnMgbGlua1xuIik7CiAKLQkJZGV2aWNlLT5jZGV2ID0gdGhlcm1hbF9jb29saW5nX2RldmljZV9yZWdpc3RlcigiTENEIiwKKwkJZGV2aWNlLT5jb29saW5nX2RldiA9IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoIkxDRCIsCiAJCQkJCWRldmljZS0+ZGV2LCAmdmlkZW9fY29vbGluZ19vcHMpOwotCQlpZiAoSVNfRVJSKGRldmljZS0+Y2RldikpCisJCWlmIChJU19FUlIoZGV2aWNlLT5jb29saW5nX2RldikpIHsKKwkJCS8qCisJCQkgKiBTZXQgY29vbGluZ19kZXYgdG8gTlVMTCBzbyB3ZSBkb24ndCBjcmFzaCB0cnlpbmcgdG8KKwkJCSAqIGZyZWUgaXQuCisJCQkgKiBBbHNvLCB3aHkgdGhlIGhlbGwgd2UgYXJlIHJldHVybmluZyBlYXJseSBhbmQKKwkJCSAqIG5vdCBhdHRlbXB0IHRvIHJlZ2lzdGVyIHZpZGVvIG91dHB1dCBpZiBjb29saW5nCisJCQkgKiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZD8KKwkJCSAqIC0tIGR0b3IKKwkJCSAqLworCQkJZGV2aWNlLT5jb29saW5nX2RldiA9IE5VTEw7CiAJCQlyZXR1cm47CisJCX0KIAogCQlkZXZfaW5mbygmZGV2aWNlLT5kZXYtPmRldiwgInJlZ2lzdGVyZWQgYXMgY29vbGluZ19kZXZpY2UlZFxuIiwKLQkJCSBkZXZpY2UtPmNkZXYtPmlkKTsKKwkJCSBkZXZpY2UtPmNvb2xpbmdfZGV2LT5pZCk7CiAJCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi0+ZGV2LmtvYmosCi0JCQkJJmRldmljZS0+Y2Rldi0+ZGV2aWNlLmtvYmosCisJCQkJJmRldmljZS0+Y29vbGluZ19kZXYtPmRldmljZS5rb2JqLAogCQkJCSJ0aGVybWFsX2Nvb2xpbmciKTsKIAkJaWYgKHJlc3VsdCkKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkNyZWF0ZSBzeXNmcyBsaW5rXG4iKTsKLQkJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+Y2Rldi0+ZGV2aWNlLmtvYmosCisJCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmNvb2xpbmdfZGV2LT5kZXZpY2Uua29iaiwKIAkJCQkmZGV2aWNlLT5kZXYtPmRldi5rb2JqLCAiZGV2aWNlIik7CiAJCWlmIChyZXN1bHQpCiAJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDcmVhdGUgc3lzZnMgbGlua1xuIik7CkBAIC0xMDM5LDcgKzEwNjYsNiBAQAogewogCWFjcGlfaGFuZGxlIGhfZHVtbXkxOwogCi0JbWVtc2V0KCZ2aWRlby0+Y2FwLCAwLCBzaXplb2YodmlkZW8tPmNhcCkpOwogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHZpZGVvLT5kZXZpY2UtPmhhbmRsZSwgIl9ET1MiLCAmaF9kdW1teTEpKSkgewogCQl2aWRlby0+Y2FwLl9ET1MgPSAxOwogCX0KQEAgLTIwMDksMTMgKzIwMzUsMTMgQEAKIAkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRldmljZS0+YmFja2xpZ2h0KTsKIAkJZGV2aWNlLT5iYWNrbGlnaHQgPSBOVUxMOwogCX0KLQlpZiAoZGV2aWNlLT5jZGV2KSB7CisJaWYgKGRldmljZS0+Y29vbGluZ19kZXYpIHsKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldmljZS0+ZGV2LT5kZXYua29iaiwKIAkJCQkgICJ0aGVybWFsX2Nvb2xpbmciKTsKLQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldmljZS0+Y2Rldi0+ZGV2aWNlLmtvYmosCisJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXZpY2UtPmNvb2xpbmdfZGV2LT5kZXZpY2Uua29iaiwKIAkJCQkgICJkZXZpY2UiKTsKLQkJdGhlcm1hbF9jb29saW5nX2RldmljZV91bnJlZ2lzdGVyKGRldmljZS0+Y2Rldik7Ci0JCWRldmljZS0+Y2RldiA9IE5VTEw7CisJCXRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UtPmNvb2xpbmdfZGV2KTsKKwkJZGV2aWNlLT5jb29saW5nX2RldiA9IE5VTEw7CiAJfQogCXZpZGVvX291dHB1dF91bnJlZ2lzdGVyKGRldmljZS0+b3V0cHV0X2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA3Y2QyYjYzLi43MDMyZjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKKyNkZWZpbmUgUFJFRklYICJBQ1BJOiAiCisKIEFDUElfTU9EVUxFX05BTUUoInZpZGVvIik7CiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfVklERU9fQ09NUE9ORU5UCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCmluZGV4IDEyMmM3ODYuLmQwYTdkZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtNjI0LDcgKzYyNCw3IEBACiB9OwogCiAvKioKLSAqCWh0cDM3eF9jbG9ja19zbG90CS0JVHVybiB0aW1pbmcgdG8gUEMgY2xvY2sgZW50cnkKKyAqCWhwdDM3eF9jbG9ja19zbG90CS0JVHVybiB0aW1pbmcgdG8gUEMgY2xvY2sgZW50cnkKICAqCUBmcmVxOiBSZXBvcnRlZCBmcmVxdWVuY3kgdGltaW5nCiAgKglAYmFzZTogQmFzZSB0aW1pbmcKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCAzOTBlNjY0Li42YmVlNmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTE2NiwxMyArMTY2LDE2IEBACiAJaWYgKE1BSk9SKGRldi0+ZGV2dCkpIHsKIAkJY29uc3QgY2hhciAqdG1wOwogCQljb25zdCBjaGFyICpuYW1lOworCQltb2RlX3QgbW9kZSA9IDA7CiAKIAkJYWRkX3VldmVudF92YXIoZW52LCAiTUFKT1I9JXUiLCBNQUpPUihkZXYtPmRldnQpKTsKIAkJYWRkX3VldmVudF92YXIoZW52LCAiTUlOT1I9JXUiLCBNSU5PUihkZXYtPmRldnQpKTsKLQkJbmFtZSA9IGRldmljZV9nZXRfbm9kZW5hbWUoZGV2LCAmdG1wKTsKKwkJbmFtZSA9IGRldmljZV9nZXRfZGV2bm9kZShkZXYsICZtb2RlLCAmdG1wKTsKIAkJaWYgKG5hbWUpIHsKIAkJCWFkZF91ZXZlbnRfdmFyKGVudiwgIkRFVk5BTUU9JXMiLCBuYW1lKTsKIAkJCWtmcmVlKHRtcCk7CisJCQlpZiAobW9kZSkKKwkJCQlhZGRfdWV2ZW50X3ZhcihlbnYsICJERVZNT0RFPSUjbyIsIG1vZGUgJiAwNzc3KTsKIAkJfQogCX0KIApAQCAtMTE0OCw4ICsxMTUxLDkgQEAKIH0KIAogLyoqCi0gKiBkZXZpY2VfZ2V0X25vZGVuYW1lIC0gcGF0aCBvZiBkZXZpY2Ugbm9kZSBmaWxlCisgKiBkZXZpY2VfZ2V0X2Rldm5vZGUgLSBwYXRoIG9mIGRldmljZSBub2RlIGZpbGUKICAqIEBkZXY6IGRldmljZQorICogQG1vZGU6IHJldHVybmVkIGZpbGUgYWNjZXNzIG1vZGUKICAqIEB0bXA6IHBvc3NpYmx5IGFsbG9jYXRlZCBzdHJpbmcKICAqCiAgKiBSZXR1cm4gdGhlIHJlbGF0aXZlIHBhdGggb2YgYSBwb3NzaWJsZSBkZXZpY2Ugbm9kZS4KQEAgLTExNTcsMjEgKzExNjEsMjIgQEAKICAqIGEgbmFtZS4gVGhpcyBtZW1vcnkgaXMgcmV0dXJuZWQgaW4gdG1wIGFuZCBuZWVkcyB0byBiZQogICogZnJlZWQgYnkgdGhlIGNhbGxlci4KICAqLwotY29uc3QgY2hhciAqZGV2aWNlX2dldF9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKip0bXApCitjb25zdCBjaGFyICpkZXZpY2VfZ2V0X2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIG1vZGVfdCAqbW9kZSwgY29uc3QgY2hhciAqKnRtcCkKIHsKIAljaGFyICpzOwogCiAJKnRtcCA9IE5VTEw7CiAKIAkvKiB0aGUgZGV2aWNlIHR5cGUgbWF5IHByb3ZpZGUgYSBzcGVjaWZpYyBuYW1lICovCi0JaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPm5vZGVuYW1lKQotCQkqdG1wID0gZGV2LT50eXBlLT5ub2RlbmFtZShkZXYpOworCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5kZXZub2RlKQorCQkqdG1wID0gZGV2LT50eXBlLT5kZXZub2RlKGRldiwgbW9kZSk7CiAJaWYgKCp0bXApCiAJCXJldHVybiAqdG1wOwogCiAJLyogdGhlIGNsYXNzIG1heSBwcm92aWRlIGEgc3BlY2lmaWMgbmFtZSAqLwotCWlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPm5vZGVuYW1lKQotCQkqdG1wID0gZGV2LT5jbGFzcy0+bm9kZW5hbWUoZGV2KTsKKwlpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5kZXZub2RlKQorCQkqdG1wID0gZGV2LT5jbGFzcy0+ZGV2bm9kZShkZXYsIG1vZGUpOwogCWlmICgqdG1wKQogCQlyZXR1cm4gKnRtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwppbmRleCBmZDQ4OGFkLi5hMWNiNWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYworKysgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwpAQCAtNiw5ICs2LDEwIEBACiAgKiBEdXJpbmcgYm9vdHVwLCBiZWZvcmUgYW55IGRyaXZlciBjb3JlIGRldmljZSBpcyByZWdpc3RlcmVkLAogICogZGV2dG1wZnMsIGEgdG1wZnMtYmFzZWQgZmlsZXN5c3RlbSBpcyBjcmVhdGVkLiBFdmVyeSBkcml2ZXItY29yZQogICogZGV2aWNlIHdoaWNoIHJlcXVlc3RzIGEgZGV2aWNlIG5vZGUsIHdpbGwgYWRkIGEgbm9kZSBpbiB0aGlzCi0gKiBmaWxlc3lzdGVtLiBUaGUgbm9kZSBpcyBuYW1lZCBhZnRlciB0aGUgdGhlIG5hbWUgb2YgdGhlIGRldmljZSwKLSAqIG9yIHRoZSBzdXNic3l0ZW0gY2FuIHByb3ZpZGUgYSBjdXN0b20gbmFtZS4gQWxsIGRldmljZXMgYXJlCi0gKiBvd25lZCBieSByb290IGFuZCBoYXZlIGEgbW9kZSBvZiAwNjAwLgorICogZmlsZXN5c3RlbS4KKyAqIEJ5IGRlZmF1bHQsIGFsbCBkZXZpY2VzIGFyZSBuYW1lZCBhZnRlciB0aGUgdGhlIG5hbWUgb2YgdGhlCisgKiBkZXZpY2UsIG93bmVkIGJ5IHJvb3QgYW5kIGhhdmUgYSBkZWZhdWx0IG1vZGUgb2YgMDYwMC4gU3Vic3lzdGVtcworICogY2FuIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBzZXR0aW5nIGlmIG5lZWRlZC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRfdGFzay5oPgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpkZXZfbW50OwpAQCAtMTM0LDcgKzEzNiw3IEBACiAJY29uc3QgY2hhciAqdG1wID0gTlVMTDsKIAljb25zdCBjaGFyICpub2RlbmFtZTsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3Vycl9jcmVkOwotCW1vZGVfdCBtb2RlOworCW1vZGVfdCBtb2RlID0gMDsKIAlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlpbnQgZXJyOwpAQCAtMTQyLDE0ICsxNDQsMTYgQEAKIAlpZiAoIWRldl9tbnQpCiAJCXJldHVybiAwOwogCi0Jbm9kZW5hbWUgPSBkZXZpY2VfZ2V0X25vZGVuYW1lKGRldiwgJnRtcCk7CisJbm9kZW5hbWUgPSBkZXZpY2VfZ2V0X2Rldm5vZGUoZGV2LCAmbW9kZSwgJnRtcCk7CiAJaWYgKCFub2RlbmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAobW9kZSA9PSAwKQorCQltb2RlID0gMDYwMDsKIAlpZiAoaXNfYmxvY2tkZXYoZGV2KSkKLQkJbW9kZSA9IFNfSUZCTEt8MDYwMDsKKwkJbW9kZSB8PSBTX0lGQkxLOwogCWVsc2UKLQkJbW9kZSA9IFNfSUZDSFJ8MDYwMDsKKwkJbW9kZSB8PSBTX0lGQ0hSOwogCiAJY3Vycl9jcmVkID0gb3ZlcnJpZGVfY3JlZHMoJmluaXRfY3JlZCk7CiAJZXJyID0gdmZzX3BhdGhfbG9va3VwKGRldl9tbnQtPm1udF9yb290LCBkZXZfbW50LApAQCAtMTY1LDggKzE2OSwxMiBAQAogCiAJZGVudHJ5ID0gbG9va3VwX2NyZWF0ZSgmbmQsIDApOwogCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKKwkJaW50IHVtYXNrOworCisJCXVtYXNrID0gc3lzX3VtYXNrKDAwMDApOwogCQllcnIgPSB2ZnNfbWtub2QobmQucGF0aC5kZW50cnktPmRfaW5vZGUsCiAJCQkJZGVudHJ5LCBtb2RlLCBkZXYtPmRldnQpOworCQlzeXNfdW1hc2sodW1hc2spOwogCQkvKiBtYXJrIGFzIGtlcm5lbCBjcmVhdGVkIGlub2RlICovCiAJCWlmICghZXJyKQogCQkJZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUgPSAmZGV2X21udDsKQEAgLTI3MSw3ICsyNzksNyBAQAogCWlmICghZGV2X21udCkKIAkJcmV0dXJuIDA7CiAKLQlub2RlbmFtZSA9IGRldmljZV9nZXRfbm9kZW5hbWUoZGV2LCAmdG1wKTsKKwlub2RlbmFtZSA9IGRldmljZV9nZXRfZGV2bm9kZShkZXYsIE5VTEwsICZ0bXApOwogCWlmICghbm9kZW5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA5MWQ0MDg3Li4xZmU1NTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTg1LDYgKzg1LDggQEAKIAkJICAgICAgICJOb2RlICVkIEZpbGVQYWdlczogICAgICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBNYXBwZWQ6ICAgICAgICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgQW5vblBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIFNobWVtOiAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBLZXJuZWxTdGFjazogICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgUGFnZVRhYmxlczogICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBCb3VuY2U6ICAgICAgICAgJThsdSBrQlxuIgpAQCAtMTE2LDYgKzExOCw5IEBACiAJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfRklMRV9QQUdFUykpLAogCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0ZJTEVfTUFQUEVEKSksCiAJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQU5PTl9QQUdFUykpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX1NITUVNKSksCisJCSAgICAgICBuaWQsIG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0tFUk5FTF9TVEFDSykgKgorCQkJCVRIUkVBRF9TSVpFIC8gMTAyNCwKIAkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9QQUdFVEFCTEUpKSwKIAkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9VTlNUQUJMRV9ORlMpKSwKIAkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9CT1VOQ0UpKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCmluZGV4IDFlNmI3YzEuLjZmYTdiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgREFDOTYwX0Jsb2NrRGV2aWNlT3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgREFDOTYwX0Jsb2NrRGV2aWNlT3BlcmF0aW9ucyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkJPSBEQUM5NjBfb3BlbiwKIAkuZ2V0Z2VvCQkJPSBEQUM5NjBfZ2V0Z2VvLApAQCAtNjU2Miw3ICs2NTYyLDcgQEAKICAgaWYgKGNvcHlfZnJvbV91c2VyKENvbW1hbmRCdWZmZXIsIEJ1ZmZlciwgQ291bnQpKSByZXR1cm4gLUVGQVVMVDsKICAgQ29tbWFuZEJ1ZmZlcltDb3VudF0gPSAnXDAnOwogICBMZW5ndGggPSBzdHJsZW4oQ29tbWFuZEJ1ZmZlcik7Ci0gIGlmIChDb21tYW5kQnVmZmVyW0xlbmd0aC0xXSA9PSAnXG4nKQorICBpZiAoTGVuZ3RoID4gMCAmJiBDb21tYW5kQnVmZmVyW0xlbmd0aC0xXSA9PSAnXG4nKQogICAgIENvbW1hbmRCdWZmZXJbLS1MZW5ndGhdID0gJ1wwJzsKICAgaWYgKENvbnRyb2xsZXItPkZpcm13YXJlVHlwZSA9PSBEQUM5NjBfVjFfQ29udHJvbGxlcikKICAgICByZXR1cm4gKERBQzk2MF9WMV9FeGVjdXRlVXNlckNvbW1hbmQoQ29udHJvbGxlciwgQ29tbWFuZEJ1ZmZlcikKQEAgLTY2NTMsNyArNjY1Myw3IEBACiAJZWxzZSBFcnJvckNvZGUgPSBnZXRfdXNlcihDb250cm9sbGVyTnVtYmVyLAogCQkJICAgICAmVXNlclNwYWNlQ29udHJvbGxlckluZm8tPkNvbnRyb2xsZXJOdW1iZXIpOwogCWlmIChFcnJvckNvZGUgIT0gMCkKLQkJYnJlYWs7OworCQlicmVhazsKIAlFcnJvckNvZGUgPSAtRU5YSU87CiAJaWYgKENvbnRyb2xsZXJOdW1iZXIgPCAwIHx8CiAJICAgIENvbnRyb2xsZXJOdW1iZXIgPiBEQUM5NjBfQ29udHJvbGxlckNvdW50IC0gMSkgewpAQCAtNjY2MSw3ICs2NjYxLDcgQEAKIAl9CiAJQ29udHJvbGxlciA9IERBQzk2MF9Db250cm9sbGVyc1tDb250cm9sbGVyTnVtYmVyXTsKIAlpZiAoQ29udHJvbGxlciA9PSBOVUxMKQotCQlicmVhazs7CisJCWJyZWFrOwogCW1lbXNldCgmQ29udHJvbGxlckluZm8sIDAsIHNpemVvZihEQUM5NjBfQ29udHJvbGxlckluZm9fVCkpOwogCUNvbnRyb2xsZXJJbmZvLkNvbnRyb2xsZXJOdW1iZXIgPSBDb250cm9sbGVyTnVtYmVyOwogCUNvbnRyb2xsZXJJbmZvLkZpcm13YXJlVHlwZSA9IENvbnRyb2xsZXItPkZpcm13YXJlVHlwZTsKQEAgLTcyMTAsNyArNzIxMCw3IEBACiAJLnJlbW92ZQkJPSBEQUM5NjBfUmVtb3ZlLAogfTsKIAotc3RhdGljIGludCBEQUM5NjBfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IERBQzk2MF9pbml0X21vZHVsZSh2b2lkKQogewogCWludCByZXQ7CiAKQEAgLTcyMjIsNyArNzIyMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgREFDOTYwX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgREFDOTYwX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKaW5kZXggMmYwN2I3Yy4uMDU1MjI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKQEAgLTE2MzIsNyArMTYzMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBmbG9wcHlfb3BlbiwKIAkucmVsZWFzZQk9IGZsb3BweV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwppbmRleCBiNmNkNTcxLi4zYWY5N2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYW9lX2Jkb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBhb2VfYmRvcHMgPSB7CiAJLm9wZW4gPSBhb2VibGtfb3BlbiwKIAkucmVsZWFzZSA9IGFvZWJsa19yZWxlYXNlLAogCS5nZXRnZW8gPSBhb2VibGtfZ2V0Z2VvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwppbmRleCAxOTg4ODM1Li42MjE0MWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY2hhciAqYW9lX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICphb2VfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJldGhlcmQvJXMiLCBkZXZfbmFtZShkZXYpKTsKIH0KQEAgLTI4OCw3ICsyODgsNyBAQAogCQl1bnJlZ2lzdGVyX2NocmRldihBT0VfTUFKT1IsICJhb2VjaHIiKTsKIAkJcmV0dXJuIFBUUl9FUlIoYW9lX2NsYXNzKTsKIAl9Ci0JYW9lX2NsYXNzLT5ub2RlbmFtZSA9IGFvZV9ub2RlbmFtZTsKKwlhb2VfY2xhc3MtPmRldm5vZGUgPSBhb2VfZGV2bm9kZTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYXJkZXZzKTsgKytpKQogCQlkZXZpY2VfY3JlYXRlKGFvZV9jbGFzcywgTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggM2ZmMDI5NC4uODQ3YTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE4NTYsNyArMTg1Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBmbG9wcHlfb3BlbiwKIAkucmVsZWFzZQk9IGZsb3BweV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9icmQuYyBiL2RyaXZlcnMvYmxvY2svYnJkLmMKaW5kZXggNGJmODcwNS4uNGY2ODg0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9icmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2JyZC5jCkBAIC0zNzUsNyArMzc1LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYnJkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGJyZF9mb3BzID0gewogCS5vd25lciA9CQlUSElTX01PRFVMRSwKIAkubG9ja2VkX2lvY3RsID0JCWJyZF9pb2N0bCwKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9YSVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCBkODM3MmI0Li4yNGMzZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJCSAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGNjaXNzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGNjaXNzX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBjY2lzc19vcGVuLAogCS5yZWxlYXNlID0gY2Npc3NfcmVsZWFzZSwKQEAgLTM2Myw3ICszNjMsNyBAQAogCWgtPmJ1c3lfY29uZmlndXJpbmcgPSAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNjaXNzX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNjaXNzX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gY2Npc3Nfc2VxX3N0YXJ0LAogCS5zaG93ICA9IGNjaXNzX3NlcV9zaG93LAogCS5uZXh0ICA9IGNjaXNzX3NlcV9uZXh0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IDQ0ZmEyMDEuLmI4MmQ0MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRhX2ZvcHMgID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGFfZm9wcyAgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGlkYV9vcGVuLAogCS5yZWxlYXNlCT0gaWRhX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCAyYjM4N2MyLi41YzAxZjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTM5MDcsNyArMzkwNyw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gZmxvcHB5X29wZW4sCiAJLnJlbGVhc2UJCT0gZmxvcHB5X3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2hkLmMgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKaW5kZXggZjlkMDE2MC4uZDVjZGNlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9oZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svaGQuYwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGhkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGhkX2ZvcHMgPSB7CiAJLmdldGdlbyA9CWhkX2dldGdlbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggYmJiNzk0NC4uZWRkYTllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTE0MzgsNyArMTQzOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkub3BlbiA9CQlsb19vcGVuLAogCS5yZWxlYXNlID0JbG9fcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jIGIvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMKaW5kZXggNmQ3ZmJhYS4uZTAzMzlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMKKysrIGIvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMKQEAgLTc3NSw3ICs3NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1nX2Rpc2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZ19kaXNrX29wcyA9IHsKIAkuZ2V0Z2VvID0gbWdfZ2V0Z2VvCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCA1ZDIzZmZhLi5jYzkyM2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTcyMiw3ICs3MjIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID0KIHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubG9ja2VkX2lvY3RsID0JbmJkX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9vc2RibGsuYyBiL2RyaXZlcnMvYmxvY2svb3NkYmxrLmMKaW5kZXggMTNjMWFlZS4uYTgwOGIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9vc2RibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL29zZGJsay5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoY3RsX211dGV4KTsJLyogU2VyaWFsaXplIG9wZW4vY2xvc2Uvc2V0dXAvdGVhcmRvd24gKi8KIHN0YXRpYyBMSVNUX0hFQUQob3NkYmxrZGV2X2xpc3QpOwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG9zZGJsa19iZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG9zZGJsa19iZF9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwppbmRleCA5ZjM1MThjLi44ODY2Y2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJcmV0dXJuIGNkcm9tX21lZGlhX2NoYW5nZWQoJmNkLT5pbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwY2RfYmRvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBjZF9iZG9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gcGNkX2Jsb2NrX29wZW4sCiAJLnJlbGVhc2UJPSBwY2RfYmxvY2tfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCmluZGV4IGJmNTk1NWIuLjU2OWUzOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwpAQCAtODA3LDcgKzgwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcGRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcGRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gcGRfb3BlbiwKIAkucmVsZWFzZQk9IHBkX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYwppbmRleCA2OGE5MDgzLi5lYTU0ZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiAvKiBrZXJuZWwgZ2x1ZSBzdHJ1Y3R1cmVzICovCiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcGZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcGZfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gcGZfb3BlbiwKIAkucmVsZWFzZQk9IHBmX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCmluZGV4IDk1ZjExY2QuLjJkZGYwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC0yODQ5LDcgKzI4NDksNyBAQAogCXJldHVybiBhdHRhY2hlZF9kaXNrLT5mb3BzLT5tZWRpYV9jaGFuZ2VkKGF0dGFjaGVkX2Rpc2spOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBrdGNkdmRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwa3RjZHZkX29wcyA9IHsKIAkub3duZXIgPQkJVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJCXBrdF9vcGVuLAogCS5yZWxlYXNlID0JCXBrdF9jbG9zZSwKQEAgLTI4NTcsNyArMjg1Nyw3IEBACiAJLm1lZGlhX2NoYW5nZWQgPQlwa3RfbWVkaWFfY2hhbmdlZCwKIH07CiAKLXN0YXRpYyBjaGFyICpwa3RjZHZkX25vZGVuYW1lKHN0cnVjdCBnZW5kaXNrICpnZCkKK3N0YXRpYyBjaGFyICpwa3RjZHZkX2Rldm5vZGUoc3RydWN0IGdlbmRpc2sgKmdkLCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAicGt0Y2R2ZC8lcyIsIGdkLT5kaXNrX25hbWUpOwogfQpAQCAtMjkxNCw3ICsyOTE0LDcgQEAKIAlkaXNrLT5mb3BzID0gJnBrdGNkdmRfb3BzOwogCWRpc2stPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOwogCXN0cmNweShkaXNrLT5kaXNrX25hbWUsIHBkLT5uYW1lKTsKLQlkaXNrLT5ub2RlbmFtZSA9IHBrdGNkdmRfbm9kZW5hbWU7CisJZGlzay0+ZGV2bm9kZSA9IHBrdGNkdmRfZGV2bm9kZTsKIAlkaXNrLT5wcml2YXRlX2RhdGEgPSBwZDsKIAlkaXNrLT5xdWV1ZSA9IGJsa19hbGxvY19xdWV1ZShHRlBfS0VSTkVMKTsKIAlpZiAoIWRpc2stPnF1ZXVlKQpAQCAtMzA3MCw3ICszMDcwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBwa3RfbWlzYyA9IHsKIAkubWlub3IgCQk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKIAkubmFtZSAgCQk9IERSSVZFUl9OQU1FLAotCS5uYW1lICAJCT0gInBrdGNkdmQvY29udHJvbCIsCisJLm5vZGVuYW1lCT0gInBrdGNkdmQvY29udHJvbCIsCiAJLmZvcHMgIAkJPSAmcGt0X2N0bF9mb3BzCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCmluZGV4IDM0Y2JiN2YuLjAzYTEzMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCkBAIC04Miw3ICs4Miw3IEBACiBzdGF0aWMgaW50IHBzM2Rpc2tfbWFqb3I7CiAKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwczNkaXNrX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBzM2Rpc2tfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCmluZGV4IGM4NzUzYTkuLjNiYjdjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCkBAIC04OCw3ICs4OCw3IEBACiBzdGF0aWMgaW50IHBzM3ZyYW1fbWFqb3I7CiAKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBwczN2cmFtX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBzM3ZyYW1fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jIGIvZHJpdmVycy9ibG9jay9zdW52ZGMuYwppbmRleCBjYmZkOWMwLi40MTFmMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3VudmRjLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZkY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB2ZGNfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmdldGdlbwkJPSB2ZGNfZ2V0Z2VvLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbS5jIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKaW5kZXggY2Y3ODc3Zi4uOGY1NjllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKQEAgLTc0OCw3ICs3NDgsNyBAQAogCXJldHVybiAhZnMtPmRpc2tfaW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0gewogCS5vd25lcgkJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCSA9IGZsb3BweV9vcGVuLAogCS5yZWxlYXNlCSA9IGZsb3BweV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltMy5jIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCmluZGV4IDgwZGY5M2UuLjYzODBhZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKQEAgLTk5OCw3ICs5OTgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0gewogCS5vcGVuCQk9IGZsb3BweV9vcGVuLAogCS5yZWxlYXNlCT0gZmxvcHB5X3JlbGVhc2UsCiAJLmxvY2tlZF9pb2N0bAk9IGZsb3BweV9pb2N0bCwKQEAgLTEwNjIsNyArMTA2Miw3IEBACiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCWZzLT5zd2ltM19pbnRyID0gbWFjaW9faXJxKG1kZXYsIDApOwotCWZzLT5kbWFfaW50ciA9IG1hY2lvX2lycShtZGV2LCAxKTs7CisJZnMtPmRtYV9pbnRyID0gbWFjaW9faXJxKG1kZXYsIDEpOwogCWZzLT5jdXJfY3lsID0gLTE7CiAJZnMtPmN1cl9zZWN0b3IgPSAtMTsKIAlmcy0+c2VjcGVyY3lsID0gMzY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N4OC5jIGIvZHJpdmVycy9ibG9jay9zeDguYwppbmRleCBmNWNkMmU4Li5hN2M0MTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N4OC5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3g4LmMKQEAgLTQyMyw3ICs0MjMsNyBAQAogCS5yZW1vdmUJCT0gY2FybV9yZW1vdmVfb25lLAogfTsKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBjYXJtX2JkX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgY2FybV9iZF9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5nZXRnZW8JCT0gY2FybV9iZGV2X2dldGdlbywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggY2M1NDQ3My4uYzczOWIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMTc4OSw3ICsxNzg5LDcgQEAKIAlyZXR1cm4gbHVuLT5jaGFuZ2VkOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHViX2JkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHViX2JkX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHViX2JkX29wZW4sCiAJLnJlbGVhc2UJPSB1Yl9iZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91bWVtLmMgYi9kcml2ZXJzL2Jsb2NrL3VtZW0uYwppbmRleCA4NThjMzRkLi5hZDFiYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VtZW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3VtZW0uYwpAQCAtMTQwLDcgKzE0MCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNhcmRpbmZvIGNhcmRzW01NX01BWENBUkRTXTsKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbW1fZm9wczsKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBiYXR0ZXJ5X3RpbWVyOwogCiBzdGF0aWMgaW50IG51bV9jYXJkczsKQEAgLTc4OSw3ICs3ODgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1tX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1tX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5nZXRnZW8JCT0gbW1fZ2V0Z2VvLAogCS5yZXZhbGlkYXRlX2Rpc2sgPSBtbV9yZXZhbGlkYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwppbmRleCBiNDQxY2UzLi5hOGM4YjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAvKgogICogT3VyIGZpbGUgb3BlcmF0aW9ucyB0YWJsZQogICovCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZpb2Rhc2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgdmlvZGFzZF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gdmlvZGFzZF9vcGVuLAogCS5yZWxlYXNlID0gdmlvZGFzZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwppbmRleCBhYTFhM2Q1Li40M2YxOTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwpAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmxrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIApAQCAtOTEsMTUgKzkyLDI2IEBACiAJCXJldHVybiBmYWxzZTsKIAogCXZici0+cmVxID0gcmVxOwotCWlmIChibGtfZnNfcmVxdWVzdCh2YnItPnJlcSkpIHsKKwlzd2l0Y2ggKHJlcS0+Y21kX3R5cGUpIHsKKwljYXNlIFJFUV9UWVBFX0ZTOgogCQl2YnItPm91dF9oZHIudHlwZSA9IDA7CiAJCXZici0+b3V0X2hkci5zZWN0b3IgPSBibGtfcnFfcG9zKHZici0+cmVxKTsKIAkJdmJyLT5vdXRfaGRyLmlvcHJpbyA9IHJlcV9nZXRfaW9wcmlvKHZici0+cmVxKTsKLQl9IGVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHZici0+cmVxKSkgeworCQlicmVhazsKKwljYXNlIFJFUV9UWVBFX0JMT0NLX1BDOgogCQl2YnItPm91dF9oZHIudHlwZSA9IFZJUlRJT19CTEtfVF9TQ1NJX0NNRDsKIAkJdmJyLT5vdXRfaGRyLnNlY3RvciA9IDA7CiAJCXZici0+b3V0X2hkci5pb3ByaW8gPSByZXFfZ2V0X2lvcHJpbyh2YnItPnJlcSk7Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisJY2FzZSBSRVFfVFlQRV9MSU5VWF9CTE9DSzoKKwkJaWYgKHJlcS0+Y21kWzBdID09IFJFUV9MQl9PUF9GTFVTSCkgeworCQkJdmJyLT5vdXRfaGRyLnR5cGUgPSBWSVJUSU9fQkxLX1RfRkxVU0g7CisJCQl2YnItPm91dF9oZHIuc2VjdG9yID0gMDsKKwkJCXZici0+b3V0X2hkci5pb3ByaW8gPSByZXFfZ2V0X2lvcHJpbyh2YnItPnJlcSk7CisJCQlicmVhazsKKwkJfQorCQkvKkZBTExUSFJVKi8KKwlkZWZhdWx0OgogCQkvKiBXZSBkb24ndCBwdXQgYW55dGhpbmcgZWxzZSBpbiB0aGUgcXVldWUuICovCiAJCUJVRygpOwogCX0KQEAgLTEzOSw3ICsxNTEsNyBAQAogCQl9CiAJfQogCi0JaWYgKHZibGstPnZxLT52cV9vcHMtPmFkZF9idWYodmJsay0+dnEsIHZibGstPnNnLCBvdXQsIGluLCB2YnIpKSB7CisJaWYgKHZibGstPnZxLT52cV9vcHMtPmFkZF9idWYodmJsay0+dnEsIHZibGstPnNnLCBvdXQsIGluLCB2YnIpIDwgMCkgewogCQltZW1wb29sX2ZyZWUodmJyLCB2YmxrLT5wb29sKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE5OSw2ICsyMTEsMTIgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCB2aXJ0YmxrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCit7CisJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0xJTlVYX0JMT0NLOworCXJlcS0+Y21kWzBdID0gUkVRX0xCX09QX0ZMVVNIOworfQorCiBzdGF0aWMgaW50IHZpcnRibGtfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkJIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtMjQzLDcgKzI2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgdmlydGJsa19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB2aXJ0YmxrX2ZvcHMgPSB7CiAJLmxvY2tlZF9pb2N0bCA9IHZpcnRibGtfaW9jdGwsCiAJLm93bmVyICA9IFRISVNfTU9EVUxFLAogCS5nZXRnZW8gPSB2aXJ0YmxrX2dldGdlbywKQEAgLTMzNyw3ICszNTUsMTAgQEAKIAlpbmRleCsrOwogCiAJLyogSWYgYmFycmllcnMgYXJlIHN1cHBvcnRlZCwgdGVsbCBibG9jayBsYXllciB0aGF0IHF1ZXVlIGlzIG9yZGVyZWQgKi8KLQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9CQVJSSUVSKSkKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9GTFVTSCkpCisJCWJsa19xdWV1ZV9vcmRlcmVkKHZibGstPmRpc2stPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAorCQkJCSAgdmlydGJsa19wcmVwYXJlX2ZsdXNoKTsKKwllbHNlIGlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JMS19GX0JBUlJJRVIpKQogCQlibGtfcXVldWVfb3JkZXJlZCh2YmxrLT5kaXNrLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOwogCiAJLyogSWYgZGlzayBpcyByZWFkLW9ubHkgaW4gdGhlIGhvc3QsIHRoZSBndWVzdCBzaG91bGQgb2JleSAqLwpAQCAtNDI0LDcgKzQ0NSw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0JMS19GX0JBUlJJRVIsIFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsCiAJVklSVElPX0JMS19GX0dFT01FVFJZLCBWSVJUSU9fQkxLX0ZfUk8sIFZJUlRJT19CTEtfRl9CTEtfU0laRSwKLQlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0lERU5USUZZCisJVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9JREVOVElGWSwgVklSVElPX0JMS19GX0ZMVVNICiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZC5jIGIvZHJpdmVycy9ibG9jay94ZC5jCmluZGV4IGNlMjQyOTIuLjA4NzdkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hkLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiBzdGF0aWMgaW50IHhkX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeGRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeGRfZm9wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkubG9ja2VkX2lvY3RsCT0geGRfaW9jdGwsCiAJLmdldGdlbyA9IHhkX2dldGdlbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCmluZGV4IGU1MzI4NDcuLmI4NTc4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwpAQCAtNjUsNyArNjUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZnJhbWVbQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUXTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeGx2YmRfYmxvY2tfZm9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeGx2YmRfYmxvY2tfZm9wczsKIAogI2RlZmluZSBCTEtfUklOR19TSVpFIF9fUklOR19TSVpFKChzdHJ1Y3QgYmxraWZfc3JpbmcgKikwLCBQQUdFX1NJWkUpCiAKQEAgLTEwMzksNyArMTAzOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeGx2YmRfYmxvY2tfZm9wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHhsdmJkX2Jsb2NrX2ZvcHMgPQogewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYmxraWZfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKaW5kZXggYjIwYWJlMTAuLmU1YzU0MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCisrKyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCkBAIC05NDEsNyArOTQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBhY2VfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYWNlX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY2Vfb3BlbiwKIAkucmVsZWFzZSA9IGFjZV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96MnJhbS5jIGIvZHJpdmVycy9ibG9jay96MnJhbS5jCmluZGV4IGIyNTkwNDAuLjY0Zjk0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svejJyYW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3oycmFtLmMKQEAgLTY0LDcgKzY0LDYgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyh6MnJhbV9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6Ml9mb3BzOwogc3RhdGljIHN0cnVjdCBnZW5kaXNrICp6MnJhbV9nZW5kaXNrOwogCiBzdGF0aWMgdm9pZCBkb196Ml9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQpAQCAtMzE1LDcgKzMxNCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgejJfZm9wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHoyX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSB6Ml9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9nZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCmluZGV4IGI1NjIxZjIuLmE3NjIyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCXJldHVybiBjZHJvbV9pb2N0bChnZC5jZF9pbmZvLCBiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZ2Ryb21fYmRvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGdkcm9tX2Jkb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCQk9IGdkcm9tX2Jkb3BzX29wZW4sCiAJLnJlbGVhc2UJCT0gZ2Ryb21fYmRvcHNfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwppbmRleCAwZmZmNjQ2Li41N2NhNjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKKysrIGIvZHJpdmVycy9jZHJvbS92aW9jZC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gY2Ryb21fbWVkaWFfY2hhbmdlZCgmZGktPnZpb2NkX2luZm8pOwogfQogCi1zdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgdmlvY2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgdmlvY2RfZm9wcyA9IHsKIAkub3duZXIgPQkJVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJCXZpb2NkX2Jsa19vcGVuLAogCS5yZWxlYXNlID0JCXZpb2NkX2Jsa19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwppbmRleCBhZDg3NzUzLi5hNTZjYTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwpAQCAtMTE0LDkgKzExNCw5IEBACiAJbG9uZyBtZW1vcnksIGluZGV4LCByZXN1bHQ7CiAKICNpZiBQQUdFX1NISUZUIDwgMjAKLQltZW1vcnkgPSBudW1fcGh5c3BhZ2VzID4+ICgyMCAtIFBBR0VfU0hJRlQpOworCW1lbW9yeSA9IHRvdGFscmFtX3BhZ2VzID4+ICgyMCAtIFBBR0VfU0hJRlQpOwogI2Vsc2UKLQltZW1vcnkgPSBudW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gMjApOworCW1lbW9yeSA9IHRvdGFscmFtX3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gMjApOwogI2VuZGlmCiAJaW5kZXggPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYwppbmRleCA1MDFlMjkzLi45MDQ3YjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKQEAgLTQ3Niw3ICs0NzYsNiBAQAogewogCWFjcGlfaGFuZGxlIGhhbmRsZSwgcGFyZW50OwogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyOwogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwogCXU2NCBsYmFfaHBhLCBzYmFfaHBhLCBsZW5ndGg7CiAJaW50IG1hdGNoOwpAQCAtNDg4LDEzICs0ODcsMTEgQEAKIAkvKiBMb29rIGZvciBhbiBlbmNsb3NpbmcgSU9DIHNjb3BlIGFuZCBmaW5kIGl0cyBDU1Igc3BhY2UgKi8KIAloYW5kbGUgPSBvYmo7CiAJZG8gewotCQlidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9MT0NBTF9CVUZGRVI7Ci0JCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CisJCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJCS8qIFRCRCBjaGVjayBfQ0lEIGFsc28gKi8KLQkJCWluZm8gPSBidWZmZXIucG9pbnRlcjsKLQkJCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZCktMV0gPSAnXDAnOwotCQkJbWF0Y2ggPSAoc3RyY21wKGluZm8tPmhhcmR3YXJlX2lkLnZhbHVlLCAiSFdQMDAwMSIpID09IDApOworCQkJaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZC5sZW5ndGgpLTFdID0gJ1wwJzsKKwkJCW1hdGNoID0gKHN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsICJIV1AwMDAxIikgPT0gMCk7CiAJCQlrZnJlZShpbmZvKTsKIAkJCWlmIChtYXRjaCkgewogCQkJCXN0YXR1cyA9IGhwX2FjcGlfY3NyX3NwYWNlKGhhbmRsZSwgJnNiYV9ocGEsICZsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKaW5kZXggMjBlZjFiZi4uNzAzOTU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCkBAIC0yNzAsNyArMjcwLDcgQEAKIAogCWlmICgodW5pbm9ydGhfcmV2ID49IDB4MzApICYmICh1bmlub3J0aF9yZXYgPD0gMHgzMykpIHsKIAkJLyoKLQkJICogV2UgbmVlZCB0byB0byBzZXQgUkVRX0RFUFRIIHRvIDcgZm9yIFUzIHZlcnNpb25zIDEuMCwgMi4xLAorCQkgKiBXZSBuZWVkIHRvIHNldCBSRVFfREVQVEggdG8gNyBmb3IgVTMgdmVyc2lvbnMgMS4wLCAyLjEsCiAJCSAqIDIuMiBhbmQgMi4zLCBEYXJ3aW4gZG8gc28uCiAJCSAqLwogCQlpZiAoKGNvbW1hbmQgPj4gQUdQU1RBVF9SUV9ERVBUSF9TSElGVCkgPiA3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwppbmRleCAyZGFmYzJkLi5kZjUwMzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYworKysgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwpAQCAtMTEsNyArMTEsNyBAQAogICogSW5pdGlhbGx5IHdyaXR0ZW4gYnkgUmFuZG9scGggQmVudHNvbiA8YmVudHNvbkBncmllZy5zZWFzbHVnLm9yZz4uCiAgKiBNb2RpZmllZCBhbmQgbWFpbnRhaW5lZCBieSBNYXJjaW8gU2FpdG8gPG1hcmNpb0BjeWNsYWRlcy5jb20+LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KICAqCiAgKiBNdWNoIG9mIHRoZSBkZXNpZ24gYW5kIHNvbWUgb2YgdGhlIGNvZGUgY2FtZSBmcm9tIHNlcmlhbC5jCiAgKiB3aGljaCB3YXMgY29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcy4gIEl0IHdhcwpAQCAtMTksNTc3ICsxOSw5IEBACiAgKiBhbmQgdGhlbiBmaXhlZCBhcyBzdWdnZXN0ZWQgYnkgTWljaGFlbCBLLiBKb2huc29uIDEyLzEyLzkyLgogICogQ29udmVydGVkIHRvIHBjaSBwcm9iaW5nIGFuZCBjbGVhbmVkIHVwIGJ5IEppcmkgU2xhYnkuCiAgKgotICogVGhpcyB2ZXJzaW9uIHN1cHBvcnRzIHNoYXJlZCBJUlEncyAob25seSBmb3IgUENJIGJvYXJkcykuCi0gKgotICogUHJldmVudCB1c2VycyBmcm9tIG9wZW5pbmcgbm9uLWV4aXN0aW5nIFogcG9ydHMuCi0gKgotICogUmV2aXNpb24gMi4zLjIuOCAgIDIwMDAvMDcvMDYgMTg6MTQ6MTYgaXZhbgotICogRml4ZWQgdGhlIFBDSSBkZXRlY3Rpb24gZnVuY3Rpb24gdG8gd29yayBwcm9wZXJseSBvbiBBbHBoYSBzeXN0ZW1zLgotICogSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgVElPQ1NFUkdFVExTUiBpb2N0bC4KLSAqIEltcGxlbWVudGVkIGZ1bGwgc3VwcG9ydCBmb3Igbm9uLXN0YW5kYXJkIGJhdWQgcmF0ZXMuCi0gKgotICogUmV2aXNpb24gMi4zLjIuNyAgIDIwMDAvMDYvMDEgMTg6MjY6MzQgaXZhbgotICogUmVxdWVzdCBQTFggSS9PIHJlZ2lvbiwgYWx0aG91Z2ggZHJpdmVyIGRvZXNuJ3QgdXNlIGl0LCB0byBhdm9pZAotICogcHJvYmxlbXMgd2l0aCBvdGhlciBkcml2ZXJzIGFjY2Vzc2luZyBpdC4KLSAqIFJlbW92ZWQgY291bnQgZm9yIG9uLWJvYXJkIGJ1ZmZlciBjaGFyYWN0ZXJzIGluIGN5X2NoYXJzX2luX2J1ZmZlcgotICogKEN5Y2xhZGVzLVogb25seSkuCi0gKgotICogUmV2aXNpb24gMi4zLjIuNiAgIDIwMDAvMDUvMDUgMTM6NTY6MDUgaXZhbgotICogRHJpdmVyIG5vdyByZXBvcnRzIHBoeXNpY2FsIGluc3RlYWQgb2YgdmlydHVhbCBtZW1vcnkgYWRkcmVzc2VzLgotICogTWFza3Mgd2VyZSBhZGRlZCB0byBzb21lIEN5Y2xhZGVzLVogcmVhZCBhY2Nlc3Nlcy4KLSAqIEltcGxlbWVudGVkIHdvcmthcm91bmQgZm9yIFBMWDkwNTAgYnVnIHRoYXQgd291bGQgY2F1c2UgYSBzeXN0ZW0gbG9ja3VwCi0gKiBpbiBjZXJ0YWluIHN5c3RlbXMsIGRlcGVuZGluZyBvbiB0aGUgTU1JTyBhZGRyZXNzZXMgYWxsb2NhdGVkIHRvIHRoZQotICogYm9hcmQuCi0gKiBDaGFuZ2VkIHRoZSBUeCBpbnRlcnJ1cHQgcHJvZ3JhbW1pbmcgaW4gdGhlIENEMTQwMCBjaGlwcyB0byBib29zdCB1cAotICogcGVyZm9ybWFuY2UgKEN5Y2xvbS1ZIG9ubHkpLgotICogQ29kZSBpcyBub3cgY29tcGxpYW50IHdpdGggdGhlIG5ldyBtb2R1bGUgaW50ZXJmYWNlIChtb2R1bGVfW2luaXR8ZXhpdF0pLgotICogTWFrZSB1c2Ugb2YgdGhlIFBDSSBoZWxwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyBQQ0kgcmVzb3VyY2VzLgotICogRGlkIHNvbWUgY29kZSAiaG91c2VrZWVwaW5nIi4KLSAqCi0gKiBSZXZpc2lvbiAyLjMuMi41ICAgMjAwMC8wMS8xOSAxNDozNTozMyBpdmFuCi0gKiBGaXhlZCBidWcgaW4gY3lfc2V0X3Rlcm1pb3Mgb24gQ1JUU0NUUyBmbGFnIHR1cm5vZmYuCi0gKgotICogUmV2aXNpb24gMi4zLjIuNCAgIDIwMDAvMDEvMTcgMDk6MTk6NDAgaXZhbgotICogRml4ZWQgU01QIGxvY2tpbmcgaW4gQ3ljbG9tLVkgaW50ZXJydXB0IGhhbmRsZXIuCi0gKgotICogUmV2aXNpb24gMi4zLjIuMyAgIDE5OTkvMTIvMjggMTI6MTE6MzkgaXZhbgotICogQWRkZWQgYSBuZXcgY3ljbGFkZXNfY2FyZCBmaWVsZCBjYWxsZWQgbnBvcnRzIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8KLSAqIGtub3cgdGhlIGV4YWN0IG51bWJlciBvZiBwb3J0cyBmb3VuZCBieSB0aGUgWiBmaXJtd2FyZSBhZnRlciBpdHMgbG9hZDsKLSAqIFJYIGJ1ZmZlciBjb250ZW50aW9uIHByZXZlbnRpb24gbG9naWMgb24gaW50ZXJydXB0IG9wIG1vZGUgcmV2aXNpdGVkCi0gKiAoQ3ljbGFkZXMtWiBvbmx5KTsKLSAqIFJldmlzaXRlZCBwcmludGsncyBmb3IgWiBkZWJ1ZzsKLSAqIERyaXZlciBub3cgbWFrZXMgc3VyZSB0aGF0IHRoZSBjb25zdGFudCBTRVJJQUxfWE1JVF9TSVpFIGlzIGRlZmluZWQ7Ci0gKgotICogUmV2aXNpb24gMi4zLjIuMiAgIDE5OTkvMTAvMDEgMTE6Mjc6NDMgaXZhbgotICogRml4ZWQgYnVnIGluIGN5el9wb2xsIHRoYXQgd291bGQgbWFrZSBhbGwgcG9ydHMgYnV0IHBvcnQgMAotICogdW5hYmxlIHRvIHRyYW5zbWl0L3JlY2VpdmUgZGF0YSAoQ3ljbGFkZXMtWiBvbmx5KTsKLSAqIEltcGxlbWVudGVkIGxvZ2ljIHRvIHByZXZlbnQgdGhlIFJYIGJ1ZmZlciBmcm9tIGJlaW5nIHN0dWNrIHdpdGggZGF0YQotICogZHVlIHRvIGEgZHJpdmVyIC8gZmlybXdhcmUgcmFjZSBjb25kaXRpb24gaW4gaW50ZXJydXB0IG9wIG1vZGUKLSAqIChDeWNsYWRlcy1aIG9ubHkpOwotICogRml4ZWQgYnVnIGluIGJsb2NrX3RpbF9yZWFkeSBsb2dpYyB0aGF0IHdvdWxkIGxlYWQgdG8gYSBzeXN0ZW0gY3Jhc2g7Ci0gKiBSZXZpc2l0ZWQgY3lfY2xvc2Ugc3BpbmxvY2sgdXNhZ2U7Ci0gKgotICogUmV2aXNpb24gMi4zLjIuMSAgIDE5OTkvMDkvMjggMTE6MDE6MjIgaXZhbgotICogUmV2aXNpdGVkIENPTkZJR19QQ0kgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZm9yIFBDSSBib2FyZCBzdXBwb3J0OwotICogSW1wbGVtZW50ZWQgVElPQ0dJQ09VTlQgYW5kIFRJT0NNSVdBSVQgaW9jdGwgc3VwcG9ydDsKLSAqIF9NYWpvcl8gY2xlYW51cCBvbiB0aGUgQ3ljbGFkZXMtWiBpbnRlcnJ1cHQgc3VwcG9ydCBjb2RlIC8gbG9naWM7Ci0gKiBSZW1vdmVkIENUUyBoYW5kbGluZyBmcm9tIHRoZSBkcml2ZXIgLS0gdGhpcyBpcyBub3cgY29tcGxldGVseSBoYW5kbGVkCi0gKiBieSB0aGUgZmlybXdhcmUgKEN5Y2xhZGVzLVogb25seSk7Ci0gKiBGbHVzaCBSWCBvbi1ib2FyZCBidWZmZXJzIG9uIGEgcG9ydCBvcGVuIChDeWNsYWRlcy1aIG9ubHkpOwotICogRml4ZWQgaGFuZGxpbmcgb2YgQVNZTkNfU1BEXyogVFRZIGZsYWdzOwotICogTW9kdWxlIHVubG9hZCBub3cgdW5tYXBzIGFsbCBtZW1vcnkgYXJlYSBhbGxvY2F0ZWQgYnkgaW9yZW1hcDsKLSAqCi0gKiBSZXZpc2lvbiAyLjMuMS4xICAgMTk5OS8wNy8xNSAxNjo0NTo1MyBpdmFuCi0gKiBSZW1vdmVkIENZX1BST0MgY29uZGl0aW9uYWwgY29tcGlsYXRpb247Ci0gKiBJbXBsZW1lbnRlZCBTTVAtYXdhcmVuZXNzIGZvciB0aGUgZHJpdmVyOwotICogSW1wbGVtZW50ZWQgYSBuZXcgSVNBIElSUSBhdXRvcHJvYmUgdGhhdCB1c2VzIHRoZSBpcnFfcHJvYmVfW29ufG9mZl0KLSAqIGZ1bmN0aW9uczsKLSAqIFRoZSBkcml2ZXIgbm93IGFjY2VwdHMgbWVtb3J5IGFkZHJlc3NlcyAobWFkZHI9MHhNTU1NTSkgYW5kIElSUXMKLSAqIChpcnE9Tk4pIGFzIHBhcmFtZXRlcnMgKG9ubHkgZm9yIElTQSBib2FyZHMpOwotICogRml4ZWQgYnVnIGluIHNldF9saW5lX2NoYXIgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBDeWNsYWRlcy1aCi0gKiBwb3J0cyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgYXQgc3BlZWRzIGFib3ZlIDExNS4yS2JwczsKLSAqIEZpeGVkIGJ1ZyBpbiBjeV9zZXRfdGVybWlvcyB0aGF0IHdvdWxkIHByZXZlbnQgWE9OL1hPRkYgZmxvdyBjb250cm9sCi0gKiBzd2l0Y2hpbmcgZnJvbSB3b3JraW5nIHByb3Blcmx5OwotICogVGhlIGRyaXZlciBub3cgb25seSBwcmludHMgSVJRIGluZm8gZm9yIHRoZSBDeWNsYWRlcy1aIGlmIGl0J3MKLSAqIGNvbmZpZ3VyZWQgdG8gd29yayBpbiBpbnRlcnJ1cHQgbW9kZTsKLSAqCi0gKiBSZXZpc2lvbiAyLjIuMi4zICAgMTk5OS8wNi8yOCAxMToxMzoyOSBpdmFuCi0gKiBBZGRlZCBzdXBwb3J0IGZvciBpbnRlcnJ1cHQgbW9kZSBvcGVyYXRpb24gZm9yIHRoZSBaIGNhcmRzOwotICogUmVtb3ZlZCB0aGUgZHJpdmVyIGluYWN0aXZpdHkgY29udHJvbCBmb3IgdGhlIFo7Ci0gKiBBZGRlZCBhIG1pc3NpbmcgTU9EX0RFQ19VU0VfQ09VTlQgaW4gdGhlIGN5X29wZW4gZnVuY3Rpb24gZm9yIHdoZW4KLSAqIHRoZSBaIGZpcm13YXJlIGlzIG5vdCBsb2FkZWQgeWV0OwotICogUmVwbGFjZWQgdGhlICJtYW51YWwiIFogVHggZmx1c2ggYnVmZmVyIGJ5IGEgY2FsbCB0byBhIEZXIGNvbW1hbmQgb2YKLSAqIHNhbWUgZnVuY3Rpb25hbGl0eTsKLSAqIEltcGxlbWVudGVkIHdvcmthcm91bmQgZm9yIElSUSBzZXR0aW5nIGxvc3Mgb24gdGhlIFBDSSBjb25maWd1cmF0aW9uCi0gKiByZWdpc3RlcnMgYWZ0ZXIgYSBQQ0kgYnJpZGdlIEVFUFJPTSByZWxvYWQgKGFmZmVjdHMgUExYOTA2MCBvbmx5KTsKLSAqCi0gKiBSZXZpc2lvbiAyLjIuMi4yICAxOTk5LzA1LzE0IDE3OjE4OjE1IGl2YW4KLSAqIC9wcm9jIGVudHJ5IGxvY2F0aW9uIGNoYW5nZWQgdG8gL3Byb2MvdHR5L2RyaXZlci9jeWNsYWRlczsKLSAqIEFkZGVkIHN1cHBvcnQgdG8gc2hhcmVkIElSUSdzIChvbmx5IGZvciBQQ0kgYm9hcmRzKTsKLSAqIEFkZGVkIHN1cHBvcnQgZm9yIENvYmFsdCBRdWJlMiBzeXN0ZW1zOwotICogSVJRIFtkZV1hbGxvY2F0aW9uIHNjaGVtZSByZXZpc2l0ZWQ7Ci0gKiBCUkVBSyBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIHRoZSAnYnJlYWtfY3RsJwotICogVFRZIGZhY2lsaXR5OwotICogRml4ZWQgdHlwbyBpbiBUVFkgc3RydWN0dXJlIGZpZWxkICdkcml2ZXJfbmFtZSc7Ci0gKiBJbmNsdWRlZCBhIFBDSSBicmlkZ2UgcmVzZXQgYW5kIEVFUFJPTSByZWxvYWQgaW4gdGhlIGJvYXJkCi0gKiBpbml0aWFsaXphdGlvbiBjb2RlIChmb3IgYm90aCBZIGFuZCBaIHNlcmllcykuCi0gKgotICogUmV2aXNpb24gMi4yLjIuMSAgMTk5OS8wNC8wOCAxNjoxNzo0MyBpdmFuCi0gKiBGaXhlZCBhIGJ1ZyBpbiBjeV93YWl0X3VudGlsX3NlbnQgdGhhdCB3YXMgcHJldmVudGluZyB0aGUgcG9ydCB0byBiZQotICogY2xvc2VkIHByb3Blcmx5IGFmdGVyIGEgU0lHSU5UOwotICogTW9kdWxlIHVzYWdlIGNvdW50ZXIgc2NoZW1lIHJldmlzaXRlZDsKLSAqIEFkZGVkIHN1cHBvcnQgdG8gdGhlIHVwY29taW5nIFkgUENJIGJvYXJkcyAoaS5lLiwgc3VwcG9ydCB0byBhZGRpdGlvbmFsCi0gKiBQQ0kgRGV2aWNlIElEJ3MpLgotICoKLSAqIFJldmlzaW9uIDIuMi4xLjEwIDE5OTkvMDEvMjAgMTY6MTQ6MjkgaXZhbgotICogUmVtb3ZlZCBhbGwgdW5uZWNlc3NhcnkgcGFnZS1hbGlnbmVtZW50IG9wZXJhdGlvbnMgaW4gaW9yZW1hcCBjYWxscwotICogKGlvcmVtYXAgaXMgY3VycmVudGx5IHNhZmUgZm9yIHRoZXNlIG9wZXJhdGlvbnMpLgotICoKLSAqIFJldmlzaW9uIDIuMi4xLjkgIDE5OTgvMTIvMzAgMTg6MTg6MzAgaXZhbgotICogQ2hhbmdlZCBhY2Nlc3MgdG8gUExYIFBDSSBicmlkZ2UgcmVnaXN0ZXJzIGZyb20gSS9PIHRvIE1NSU8sIGluCi0gKiBvcmRlciB0byBtYWtlIFBMWDkwNTAtYmFzZWQgYm9hcmRzIHdvcmsgd2l0aCBjZXJ0YWluIG1vdGhlcmJvYXJkcy4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS44ICAxOTk4LzExLzEzIDEyOjQ2OjIwIGl2YW4KLSAqIGN5X2Nsb3NlIGZ1bmN0aW9uIG5vdyByZXNldHMgKGNvcnJlY3RseSkgdGhlIHR0eS0+Y2xvc2luZyBmbGFnOwotICogSklGRklFU19ESUZGIG1hY3JvIGZpeGVkLgotICoKLSAqIFJldmlzaW9uIDIuMi4xLjcgIDE5OTgvMDkvMDMgMTI6MDc6MjggaXZhbgotICogRml4ZWQgYnVnIGluIGN5X2Nsb3NlIGZ1bmN0aW9uLCB3aGljaCB3YXMgbm90IGluZm9ybWluZyBIVyBvZgotICogd2hpY2ggcG9ydCBzaG91bGQgaGF2ZSB0aGUgcmVjZXB0aW9uIGRpc2FibGVkIGJlZm9yZSBkb2luZyBzbzsKLSAqIGZpeGVkIEN5Y2xvbS04WW9QIGhhcmR3YXJlIGRldGVjdGlvbiBidWcuCi0gKgotICogUmV2aXNpb24gMi4yLjEuNiAgMTk5OC8wOC8yMCAxNzoxNTozOSBpdmFuCi0gKiBGaXhlZCBidWcgaW4gY3lfY2xvc2UgZnVuY3Rpb24sIHdoaWNoIGNhdXNlcyBtYWxmdW5jdGlvbgotICogb2Ygb25lIG9mIHRoZSBmaXJzdCA0IHBvcnRzIHdoZW4gYSBoaWdoZXIgcG9ydCBpcyBjbG9zZWQKLSAqIChDeWNsb20tWSBvbmx5KS4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS41ICAxOTk4LzA4LzEwIDE4OjEwOjI4IGl2YW4KLSAqIEZpeGVkIEN5Y2xvbS00WW8gaGFyZHdhcmUgZGV0ZWN0aW9uIGJ1Zy4KLSAqCi0gKiBSZXZpc2lvbiAyLjIuMS40ICAxOTk4LzA4LzA0IDExOjAyOjUwIGl2YW4KLSAqIC9wcm9jL2N5Y2xhZGVzIGltcGxlbWVudGF0aW9uIHdpdGggZ3JlYXQgY29sbGFib3JhdGlvbiBvZgotICogTWFyYyBMZXdpcyA8bWFyY0BibGFyZy5uZXQ+OwotICogY3l5X2ludGVycnVwdCB3YXMgY2hhbmdlZCB0byBhdm9pZCBvY2N1cnJlbmNlIG9mIGtlcm5lbCBvb3BzZXMKLSAqIGR1cmluZyBQUFAgb3BlcmF0aW9uLgotICoKLSAqIFJldmlzaW9uIDIuMi4xLjMgIDE5OTgvMDYvMDEgMTI6MDk6MTAgaXZhbgotICogR2VuZXJhbCBjb2RlIHJldmlldyBpbiBvcmRlciB0byBjb21wbHkgd2l0aCAyLjEga2VybmVsIHN0YW5kYXJkczsKLSAqIGRhdGEgbG9zcyBwcmV2ZW50aW9uIGZvciBzbG93IGRldmljZXMgcmV2aXNpdGVkIChjeV93YWl0X3VudGlsX3NlbnQKLSAqIHdhcyBjcmVhdGVkKTsKLSAqIHJlbW92ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZm9yIG5ldy9vbGQgUENJIHN0cnVjdHVyZSBzdXBwb3J0Ci0gKiAobm93IHRoZSBkcml2ZXIgb25seSBzdXBwb3J0cyB0aGUgbmV3IFBDSSBzdHJ1Y3R1cmUpLgotICoKLSAqIFJldmlzaW9uIDIuMi4xLjEgIDE5OTgvMDMvMTkgMTY6NDM6MTIgaXZhbgotICogYWRkZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZm9yIG5ldy9vbGQgUENJIHN0cnVjdHVyZSBzdXBwb3J0OwotICogcmVtb3ZlZCBrZXJuZWwgc2VyaWVzICgyLjAueCAvIDIuMS54KSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KLSAqCi0gKiBSZXZpc2lvbiAyLjEuMS4zICAxOTk4LzAzLzE2IDE4OjAxOjEyIGl2YW4KLSAqIGNsZWFuZWQgdXAgdGhlIGRhdGEgbG9zcyBmaXg7Ci0gKiBmaXhlZCBYT04vWE9GRiBoYW5kbGluZyBvbmNlIG1vcmUgKEN5Y2xhZGVzLVopOwotICogZ2VuZXJhbCByZXZpZXcgb2YgdGhlIGRyaXZlciByb3V0aW5lczsKLSAqIGludHJvZHVjdGlvbiBvZiBhIG1lY2hhbmlzbSB0byBwcmV2ZW50IGRhdGEgbG9zcyB3aXRoIHNsb3cKLSAqIHByaW50ZXJzLCBieSBmb3JjaW5nIGEgZGVsYXkgYmVmb3JlIGNsb3NpbmcgdGhlIHBvcnQuCi0gKgotICogUmV2aXNpb24gMi4xLjEuMiAgMTk5OC8wMi8xNyAxNjo1MDowMCBpdmFuCi0gKiBmaXhlZCBkZXRlY3Rpb24vaGFuZGxpbmcgb2YgbmV3IENEMTQwMCBpbiBZZSBib2FyZHM7Ci0gKiBmaXhlZCBYT04vWE9GRiBoYW5kbGluZyAoQ3ljbGFkZXMtWik7Ci0gKiBmaXhlZCBkYXRhIGxvc3MgY2F1c2VkIGJ5IGEgcHJlbWF0dXJlIHBvcnQgY2xvc2U7Ci0gKiBpbnRyb2R1Y3Rpb24gb2YgYSBmbGFnIHRoYXQgaG9sZHMgdGhlIENEMTQwMCB2ZXJzaW9uIElEIHBlciBwb3J0Ci0gKiAodXNlZCBieSB0aGUgQ1lHRVRDRDE0MDBWRVIgbmV3IGlvY3RsKS4KLSAqCi0gKiBSZXZpc2lvbiAyLjEuMS4xICAxOTk3LzEyLzAzIDE3OjMxOjE5IGl2YW4KLSAqIENvZGUgcmV2aWV3IGZvciB0aGUgbW9kdWxlIGNsZWFudXAgcm91dGluZTsKLSAqIGZpeGVkIFJUUyBhbmQgRFRSIHN0YXR1cyByZXBvcnQgZm9yIG5ldyBDRDE0MDAncyBpbiBnZXRfbW9kZW1faW5mbzsKLSAqIGluY2x1ZGVzIGFub255bW91cyBjaGFuZ2VzIHJlZ2FyZGluZyBzaWduYWxfcGVuZGluZy4KLSAqCi0gKiBSZXZpc2lvbiAyLjEgIDE5OTcvMTEvMDEgMTc6NDI6NDEgaXZhbgotICogQ2hhbmdlcyBpbiB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgQWxwaGEgc3lzdGVtcyAoZXhjZXB0IDhabyBWXzEpOwotICogQlJFQUsgZml4IGZvciB0aGUgQ3ljbGFkZXMtWiBib2FyZHM7Ci0gKiBkcml2ZXIgaW5hY3Rpdml0eSBjb250cm9sIGJ5IEZXIGltcGxlbWVudGVkOwotICogaW50cm9kdWN0aW9uIG9mIGZsYWcgdGhhdCBhbGxvd3MgZHJpdmVyIHRvIHRha2UgYWR2YW50YWdlIG9mCi0gKiBhIHNwZWNpYWwgQ0QxNDAwIGZlYXR1cmUgcmVsYXRlZCB0byBIVyBmbG93IGNvbnRyb2w7Ci0gKiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgQ0QxNDAwICByZXYuIEogKEN5Y2xvbS1ZIGJvYXJkcyk7Ci0gKiBpbnRyb2R1Y3Rpb24gb2YgaW9jdGxzIHRvOgotICogIC0gY29udHJvbCB0aGUgcnRzZHRyX2ludiBmbGFnIChDeWNsb20tWSk7Ci0gKiAgLSBjb250cm9sIHRoZSByZmxvdyBmbGFnIChDeWNsb20tWSk7Ci0gKiAgLSBhZGp1c3QgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgKEN5Y2xhZGVzLVopOwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4zMyAgMTk5Ny8wNi8yNyAxOTowMDowMCAgaXZhbgotICogRml4ZXMgcmVsYXRlZCB0byBrZXJuZWwgdmVyc2lvbiBjb25kaXRpb25hbAotICogY29tcGlsYXRpb24uCi0gKgotICogUmV2aXNpb24gMS4zNi40LjMyICAxOTk3LzA2LzE0IDE5OjMwOjAwICBpdmFuCi0gKiBDb21wYXRpYmlsaXR5IGlzc3VlcyBiZXR3ZWVuIGtlcm5lbHMgMi4wLnggYW5kCi0gKiAyLjEueCAobWFpbmx5IHJlbGF0ZWQgdG8gY2xlYXJfYml0IGZ1bmN0aW9uKS4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMzEgIDE5OTcvMDYvMDMgMTU6MzA6MDAgIGl2YW4KLSAqIENoYW5nZXMgdG8gZGVmaW5lIHRoZSBtZW1vcnkgd2luZG93IGFjY29yZGluZyB0byB0aGUKLSAqIGJvYXJkIHR5cGUuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjMwICAxOTk3LzA1LzE2IDE1OjMwOjAwICBkYW5pZWwKLSAqIENoYW5nZXMgdG8gc3VwcG9ydCBuZXcgY3ljbGFkZXNaIGJvYXJkcy4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMjkgIDE5OTcvMDUvMTIgMTE6MzA6MDAgIGRhbmllbAotICogTWVyZ2Ugb2YgQmVudHNvbidzIGFuZCBEYW5pZWwncyB2ZXJzaW9uIDEuMzYuNC4yOC4KLSAqIENvcnJlY3RzIGJ1ZyBpbiBjeV9kZXRlY3RfcGNpOiBjaGVjayBpZiB0aGVyZSBhcmUgbW9yZQotICogcG9ydHMgdGhhbiB0aGUgbnVtYmVyIG9mIHN0YXRpYyBzdHJ1Y3RzIGFsbG9jYXRlZC4KLSAqIFdhcm5pbmcgbWVzc2FnZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaWYgdGhpcyBkcml2ZXIgaXMKLSAqIHVzZWQgd2l0aCB0aGUgbmV3IGdlbmVyYXRpb24gb2YgY3ljbGFkZXNaIGJvYXJkcy4gIFRob3NlCi0gKiB3aWxsIGJlIHN1cHBvcnRlZCBvbmx5IGluIG5leHQgcmVsZWFzZSBvZiB0aGUgZHJpdmVyLgotICogQ29ycmVjdHMgYnVnIGluIGN5X2RldGVjdF9wY2kgYW5kIGN5X2RldGVjdF9pc2EgdGhhdAotICogcmV0dXJuZWQgd3JvbmcgbnVtYmVyIG9mIFZBTElEIGJvYXJkcywgd2hlbiBhIGN5Y2xvbVkKLSAqIHdhcyBmb3VuZCB3aXRoIG5vIHNlcmlhbCBtb2R1bGVzIGNvbm5lY3RlZC4KLSAqIENoYW5nZXMgdG8gdXNlIGN1cnJlbnQgKDIuMS54KSBrZXJuZWwgc3Vicm91dGluZSBuYW1lcwotICogYW5kIGNyZWF0ZWQgbWFjcm9zIGZvciBjb21waWxhdGlvbiB3aXRoIDIuMC54IGtlcm5lbCwKLSAqIGluc3RlYWQgb2YgdGhlIG90aGVyIHdheSBhcm91bmQuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjI4ICAxOTk3LzA1Lz8/ID8/OjAwOjAwICBiZW50c29uCi0gKiBDaGFuZ2UgcXVldWVfdGFza19pcnFfb2ZmIHRvIHF1ZXVlX3Rhc2tfaXJxLgotICogVGhlIGlubGluZSBmdW5jdGlvbiBxdWV1ZV90YXNrX2lycV9vZmYgKHRxdWV1ZS5oKQotICogd2FzIHJlbW92ZWQgZnJvbSBsYXRlc3QgcmVsZWFzZXMgb2YgMi4xLngga2VybmVsLgotICogVXNlIG9mIG1hY3JvIF9faW5pdCB0byBtYXJrIHRoZSBpbml0aWFsaXphdGlvbgotICogcm91dGluZXMsIHNvIG1lbW9yeSBjYW4gYmUgcmV1c2VkLgotICogQWxzbyBpbmNvcnBvcmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcml0aWNhbCByZWdpb24KLSAqIGluIGZ1bmN0aW9uIGNsZWFudXBfbW9kdWxlKCkgY3JlYXRlZCBieSBhbm9ueW1vdXMKLSAqIGxpbnV4ZXIuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjI4ICAxOTk3LzA0LzI1IDE2OjAwOjAwICBkYW5pZWwKLSAqIENoYW5nZSB0byBzdXBwb3J0IG5ldyBmaXJtd2FyZSB0aGF0IHNvbHZlcyBEQ0QgcHJvYmxlbToKLSAqIGFwcGxpY2F0aW9uIGNvdWxkIGZhaWwgdG8gcmVjZWl2ZSBTSUdIVVAgc2lnbmFsIHdoZW4gRENECi0gKiB2YXJ5aW5nIHRvbyBmYXN0LgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yNyAgMTk5Ny8wMy8yNiAxMDozMDowMCAgZGFuaWVsCi0gKiBDaGFuZ2VkIGZvciBzdXBwb3J0IGxpbnV4IHZlcnNpb25zIDIuMS5YLgotICogQmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIGxpbnV4IHZlcnNpb25zIDIuMC5YLgotICogQ29ycmVjdGVkIGlsbGVnYWwgdXNlIG9mIGZpbGxlciBmaWVsZCBpbgotICogQ0hfQ1RSTCBzdHJ1Y3QuCi0gKiBEZWxldGVkIHNvbWUgZGVidWcgbWVzc2FnZXMuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjI2ICAxOTk3LzAyLzI3IDEyOjAwOjAwICBkYW5pZWwKLSAqIEluY2x1ZGVkIGNoZWNrIGZvciBOVUxMIHR0eSBwb2ludGVyIGluIGN5el9wb2xsLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yNSAgMTk5Ny8wMi8yNiAxNjoyODozMCAgYmVudHNvbgotICogQmlsbCBGb3N0ZXIgYXQgQmxhcmchIE9ubGluZSBzZXJ2aWNlcyBub3RpY2VkIHRoYXQKLSAqIHNvbWUgb2YgdGhlIHN3aXRjaCBlbGVtZW50cyBvZiAtWiBtb2RlbSBjb250cm9sCi0gKiBsYWNrZWQgYSBjbG9zaW5nICJicmVhazsiCi0gKgotICogUmV2aXNpb24gMS4zNi40LjI0ICAxOTk3LzAyLzI0IDExOjAwOjAwICBkYW5pZWwKLSAqIENoYW5nZWQgbG93IHdhdGVyIHRocmVzaG9sZCBmb3IgYnVmZmVyIHhtaXRfYnVmCi0gKgotICogUmV2aXNpb24gMS4zNi40LjIzICAxOTk2LzEyLzAyIDIxOjUwOjE2ICBiZW50c29uCi0gKiBNYXJjaW8gcHJvdmlkZWQgZml4IHRvIG1vZGVtIHN0YXR1cyBmZXRjaCBmb3IgLVoKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMjIgIDE5OTYvMTAvMjggMjI6NDE6MTcgIGJlbnRzb24KLSAqIGltcHJvdmUgbWFwcGluZyBvZiAtWiBjb250cm9sIHBhZ2UgKHRoYW5rcyB0byBTdGV2ZQotICogUHJpY2UgPHN0ZXZlcEBmYS50ZGt0Y2EuY29tPiBmb3IgaGVscCBvbiB0aGlzKQotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yMSAgMTk5Ni8wOS8xMCAxNzowMDoxMCAgYmVudHNvbgotICogc2hpZnQgZnJvbSBDUFUtYm91bmQgdG8gbWVtY29weSBpbiBjeXpfcG9sbGluZyBvcGVyYXRpb24KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMjAgIDE5OTYvMDkvMDkgMTg6MzA6MzIgIEJlbnRzb24KLSAqIEFkZGVkIHN1cHBvcnQgdG8gc2V0IGFuZCByZXBvcnQgaGlnaGVyIHNwZWVkcy4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTljICAxOTk2LzA4LzA5IDEwOjAwOjAwICBNYXJjaW8gU2FpdG8KLSAqIFNvbWUgZml4ZXMgaW4gdGhlIEhXIGZsb3cgY29udHJvbCBmb3IgdGhlIEJFVEEgcmVsZWFzZS4KLSAqIERvbid0IHRyeSB0byByZWdpc3RlciB0aGUgSVJRLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xOSAgMTk5Ni8wOC8wOCAxNjoyMzoxOCAgQmVudHNvbgotICogbWFrZSBzdXJlICJjeWMiIGFwcGVhcnMgaW4gYWxsIGtlcm5lbCBtZXNzYWdlczsgYWxsIHNvZnQgaW50ZXJydXB0cwotICogaGFuZGxlZCBieSBzYW1lIHJvdXRpbmU7IHJlY29nbml6ZSBvdXQtb2YtYmFuZCByZWNlcHRpb247IGNvbW1lbnQKLSAqIG91dCBzb21lIGRpYWdub3N0aWMgbWVzc2FnZXM7IGxlYXZlIFJUUy9DVFMgZmxvdyBjb250cm9sIHRvIGhhcmR3YXJlOwotICogZml4IHJhY2UgY29uZGl0aW9uIGluIC1aIGJ1ZmZlciBtYW5hZ2VtZW50OyBvbmx5IC1ZIG5lZWRzIHRvIGV4cGxpY2l0bHkKLSAqIGZsdXNoIGNoYXJzOyB0aWR5IHVwIHNvbWUgc3RhcnR1cCBtZXNzYWdlczsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTggIDE5OTYvMDcvMjUgMTg6NTc6MzEgIGJlbnRzb24KLSAqIHNoaWZ0IE1PRF9JTkNfVVNFX0NPVU5UIGxvY2F0aW9uIHRvIG1hdGNoCi0gKiBzZXJpYWwuYzsgcHVyZ2Ugc29tZSBkaWFnbm9zdGljIG1lc3NhZ2VzOwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xNyAgMTk5Ni8wNy8yNSAxODowMTowOCAgYmVudHNvbgotICogZW5hYmxlIG1vZGVtIHN0YXR1cyBtZXNzYWdlcyBhbmQgZmV0Y2ggJiBwcm9jZXNzIHRoZW07IG5vdGUKLSAqIHRpbWUgb2YgbGFzdCBhY3Rpdml0eSB0eXBlIGZvciBlYWNoIHBvcnQ7IHNldF9saW5lX2NoYXIgbm93Ci0gKiBzdXBwb3J0cyBtb3JlIHRoYW4gbGluZSAwIGFuZCB0cmVhdHMgMCBiYXVkIGNvcnJlY3RseTsKLSAqIGdldF9tb2RlbV9pbmZvIHNlbnNlcyByc19zdGF0dXM7Ci0gKgotICogUmV2aXNpb24gMS4zNi40LjE2ICAxOTk2LzA3LzIwIDA4OjQzOjE1ICBiZW50c29uCi0gKiBiYXJlbHkgd29ya3MtLW5vdydzIHRpbWUgdG8gdHVybiBvbgotICogbW9yZSBmZWF0dXJlcyAndGlsIGl0IGJyZWFrcwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xNSAgMTk5Ni8wNy8xOSAyMjozMDowNiAgYmVudHNvbgotICogY2hlY2sgbW9yZSAtWiBib2FyZCBzdGF0dXM7IHNob3J0ZW4gYm9vdCBtZXNzYWdlCi0gKgotICogUmV2aXNpb24gMS4zNi40LjE0ICAxOTk2LzA3LzE5IDIyOjIwOjM3ICBiZW50c29uCi0gKiBmaXggcmVmZXJlbmNlIHRvIGNoX2N0cmwgaW4gc3RhcnR1cDsgdmVyaWZ5IHJldHVybgotICogdmFsdWVzIGZyb20gY3l6X2lzc3VlX2NtZCBhbmQgY3l6X3VwZGF0ZV9jaGFubmVsOwotICogbW9yZSBzdHVmZiB0byBnZXQgbW9kZW0gY29udHJvbCBjb3JyZWN0OwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xMyAgMTk5Ni8wNy8xMSAxOTo1MzozMyAgYmVudHNvbgotICogbW9yZSAtWiBzdHVmZiBmb2xkZWQgaW47IHJlLW9yZGVyIGNoYW5nZXMgdG8gcHV0IC1aIHN0dWZmCi0gKiBhZnRlciAtWSBzdHVmZiAodG8gbWFrZSBjaGFuZ2VzIGNsZWFyZXIpCi0gKgotICogUmV2aXNpb24gMS4zNi40LjEyICAxOTk2LzA3LzExIDE1OjQwOjU1ICBiZW50c29uCi0gKiBBZGQgY29kZSB0byBwb2xsIEN5Y2xhZGVzLVouICBBZGQgY29kZSB0byBnZXQgJiBzZXQgUlMtMjMyIGNvbnRyb2wuCi0gKiBBZGQgY29kZSB0byBzZW5kIGJyZWFrLiAgQ2xlYXIgZmlybXdhcmUgSUQgd29yZCBhdCBzdGFydHVwIChzbwotICogdGhhdCBvdGhlciBjb2RlIHdvbid0IHRhbGsgdG8gaW5hY3RpdmUgYm9hcmQpLgotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xMSAgMTk5Ni8wNy8wOSAwNToyODoyOSAgYmVudHNvbgotICogYWRkIGNvZGUgZm9yIC1aIGluIHNldF9saW5lX2NoYXIKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuMTAgIDE5OTYvMDcvMDggMTk6Mjg6MzcgIGJlbnRzb24KLSAqIGZvbGQgbW9yZSAtWiBzdHVmZiAob3IgaW4gc29tZSBjYXNlcywgZXJyb3IgbWVzc2FnZXMpCi0gKiBpbnRvIGRyaXZlcjsgYWRkIHRleHQgdG8gImRvbid0IGtub3cgd2hhdCB0byBkbyIgbWVzc2FnZXMuCi0gKgotICogUmV2aXNpb24gMS4zNi40LjkgIDE5OTYvMDcvMDggMTg6Mzg6MzggIGJlbnRzb24KLSAqIG1vdmVkIGNvbXBpbGUtdGltZSBmbGFncyBuZWFyIHRvcCBvZiBmaWxlOyBjb3NtZXRpYyBjaGFuZ2VzCi0gKiB0byBuYXJyb3cgdGV4dCAodG8gYWxsb3cgMi11cCBwcmludGluZyk7IGNoYW5nZWQgbWFueSBkZWNsYXJhdGlvbnMKLSAqIHRvICJzdGF0aWMiIHRvIGxpbWl0IGV4dGVybmFsIHN5bWJvbHM7IHNodWZmbGVkIGNvZGUgb3JkZXIgdG8KLSAqIGNvYWxlc2NlIC1ZIGFuZCAtWiBzcGVjaWZpYyBjb2RlLCBhbHNvIHRvIHB1dCBpbnRlcm5hbCBmdW5jdGlvbnMKLSAqIGluIG9yZGVyIG9mIHR0eV9kcml2ZXIgc3RydWN0dXJlOyBhZGRlZCBjb2RlIHRvIHJlY29nbml6ZSAtWgotICogcG9ydHMgKGFuZCBmb3IgbW9tZW50LCBkbyBub3RoaW5nIG9yIHJlcG9ydCBlcnJvcik7IGFkZCBjeV9zdGFydHVwCi0gKiB0byBwYXJzZSBib290IGNvbW1hbmQgbGluZSBmb3IgZXh0cmEgYmFzZSBhZGRyZXNzZXMgZm9yIElTQSBwcm9iZXM7Ci0gKgotICogUmV2aXNpb24gMS4zNi40LjggIDE5OTYvMDYvMjUgMTc6NDA6MTkgIGJlbnRzb24KLSAqIHJlb3JkZXIgc29tZSBjb2RlLCBmaXggdHlwZXMgb2Ygc29tZSB2YXJzIChpbnQgdnMuIGxvbmcpLAotICogYWRkIGN5X3NldHVwIHRvIHN1cHBvcnQgdXNlciBkZWNsYXJlZCBJU0EgYWRkcmVzc2VzCi0gKgotICogUmV2aXNpb24gMS4zNi40LjcgIDE5OTYvMDYvMjEgMjM6MDY6MTggIGJlbnRzb24KLSAqIGR1bXAgaW9jdGwgYmFzZWQgZmlybXdhcmUgbG9hZCAoaXQncyBub3cgYSB1c2VyIGxldmVsCi0gKiBwcm9ncmFtKTsgZW5zdXJlIHVuaW5pdGlhbHplZCBwb3J0cyBjYW5ub3QgYmUgdXNlZAotICoKLSAqIFJldmlzaW9uIDEuMzYuNC42ICAxOTk2LzA2LzIwIDIzOjE3OjE5ICBiZW50c29uCi0gKiByZW5hbWUgdmFycyBhbmQgcmVzdHJ1Y3R1cmUgc29tZSBjb2RlCi0gKgotICogUmV2aXNpb24gMS4zNi40LjUgIDE5OTYvMDYvMTQgMTU6MDk6NDQgIGJlbnRzb24KLSAqIGdldCByaWdodCBzdGF0dXMgYmFjayBhZnRlciBib290IGxvYWQKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjQuNCAgMTk5Ni8wNi8xMyAxOTo1MTo0NCAgYmVudHNvbgotICogc3VjY2Vzc2Z1bGx5IGxvYWRzIGZpcm13YXJlCi0gKgotICogUmV2aXNpb24gMS4zNi40LjMgIDE5OTYvMDYvMTMgMDY6MDg6MzMgIGJlbnRzb24KLSAqIGFkZCBtb3JlIG9mIHRoZSBjb2RlIGZvciB0aGUgYm9vdC9sb2FkIGlvY3RscwotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4yICAxOTk2LzA2LzExIDIxOjAwOjUxICBiZW50c29uCi0gKiBzdGFydCB0byBhZGQgWiBmdW5jdGlvbmFsaXR5LS1zdGFydGluZyB3aXRoIGlvY3RsCi0gKiBmb3IgbG9hZGluZyBmaXJtd2FyZQotICoKLSAqIFJldmlzaW9uIDEuMzYuNC4xICAxOTk2LzA2LzEwIDE4OjAzOjAyICBiZW50c29uCi0gKiBhZGRlZCBjb2RlIHRvIHJlY29nbml6ZSBaL1BDSSBjYXJkIGF0IGluaXRpYWxpemF0aW9uOyByZXBvcnQKLSAqIHByZXNlbmNlLCBidXQgY2FyZCBpcyBub3QgaW5pdGlhbGl6ZWQgKGJlY2F1c2UgZmlybXdhcmUgbmVlZHMKLSAqIHRvIGJlIGxvYWRlZCkKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjMuOCAgMTk5Ni8wNi8wNyAxNjoyOTowMCAgYmVudHNvbgotICogc3RhcnRpbmcgbWlub3IgbnVtYmVyIGF0IHplcm87IGFkZGVkIG1pc3NpbmcgdmVyaWZ5X2FyZWEKLSAqIGFzIG5vdGVkIGJ5IEhlaWtvIEVpw59mZWxkdCA8aGVpa29AY29sb3NzdXMuZXNjYXBlLmRlPgotICoKLSAqIFJldmlzaW9uIDEuMzYuMy43ICAxOTk2LzA0LzE5IDIxOjA2OjE4ICBiZW50c29uCi0gKiByZW1vdmUgdW5uZWVkZWQgYm9vdCBtZXNzYWdlICYgZml4IENMT0NBTCBoYXJkd2FyZSBmbG93Ci0gKiBjb250cm9sIChNaXF1ZWwgdmFuIFNtb29yZW5idXJnIDxtaXF1ZWxzQFEuY2lzdHJvbi5ubD4pOwotICogcmVtb3ZlIHVudXNlZCBkaWFnbm9zdGljIHN0YXRlbWVudHM7IG1pbm9yIDAgaXMgZmlyc3Q7Ci0gKgotICogUmV2aXNpb24gMS4zNi4zLjYgIDE5OTYvMDMvMTMgMTM6MjE6MTcgIG1hcmNpbwotICogVGhlIGtlcm5lbCBmdW5jdGlvbiB2cmVtYXAgKGF2YWlsYWJsZSBvbmx5IGluIGxhdGVyIDEuMy54eCBrZXJuZWxzKQotICogYWxsb3dzIHRoZSBhY2Nlc3MgdG8gbWVtb3J5IGFkZHJlc3NlcyBhYm92ZSB0aGUgUkFNLiBUaGlzIHJldmlzaW9uCi0gKiBvZiB0aGUgZHJpdmVyIHN1cHBvcnRzIFBDSSBib2FyZHMgYmVsb3cgMU1iIChkZXZpY2UgaWQgMHgxMDApIGFuZAotICogYWJvdmUgMU1iIChkZXZpY2UgaWQgMHgxMDEpLgotICoKLSAqIFJldmlzaW9uIDEuMzYuMy41ICAxOTk2LzAzLzA3IDE1OjIwOjE3ICBiZW50c29uCi0gKiBTb21lIGdsb2JhbCBjaGFuZ2VzIHRvIGludGVycnVwdCBoYW5kbGluZyBzcGlsbGVkIGludG8KLSAqIHRoaXMgZHJpdmVyLS1tb3N0bHkgdW51c2VkIGFyZ3VtZW50cyBpbiBzeXN0ZW0gZnVuY3Rpb24KLSAqIGNhbGxzLiAgQWxzbyBhZGRlZCBjaGFuZ2UgYnkgTWFyY2lvIFNhaXRvIHdoaWNoIHNob3VsZAotICogcmVkdWNlIGxvc3QgaW50ZXJydXB0cyBhdCBzdGFydHVwIGJ5IGZhc3QgcHJvY2Vzc29ycy4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjMuNCAgMTk5NS8xMS8xMyAgMjA6NDU6MTAgIGJlbnRzb24KLSAqIENoYW5nZXMgYnkgQ29yZXkgTWlueWFyZCA8bWlueWFyZEB3Zi1yY2guY2lyci5jb20+IGRpc3RyaWJ1dGVkCi0gKiBpbiAxLjMuNDEga2VybmVsIHRvIHJlbW92ZSBhIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uLCBleHRlbmQKLSAqIHNvbWUgZXJyb3IgbWVzc2FnZXMsIGFuZCBsZXQgdGhlIGRyaXZlciBydW4gYXMgYSBsb2FkYWJsZSBtb2R1bGUKLSAqIENoYW5nZSBieSBBbGFuIFdlbmR0IDxhbGFuQGV6MC5lemxpbmsuY29tPiB0byByZW1vdmUgYQotICogcG9zc2libGUgcmFjZSBjb25kaXRpb24uCi0gKiBDaGFuZ2UgYnkgTWFyY2lvIFNhaXRvIDxtYXJjaW9AY3ljbGFkZXMuY29tPiB0byBmaXggUENJIGFkZHJlc3NpbmcuCi0gKgotICogUmV2aXNpb24gMS4zNi4zLjMgIDE5OTUvMTEvMTMgIDE5OjQ0OjQ4ICBiZW50c29uCi0gKiBDaGFuZ2VzIGJ5IExpbnVzIFRvcnZhbGRzIGluIDEuMy4zMyBrZXJuZWwgZGlzdHJpYnV0aW9uCi0gKiByZXF1aXJlZCBkdWUgdG8gcmVvcmRlcmluZyBvZiBkcml2ZXIgaW5pdGlhbGl6YXRpb24uCi0gKiBEcml2ZXJzIGFyZSBub3cgaW5pdGlhbGl6ZWQgKmFmdGVyKiBtZW1vcnkgbWFuYWdlbWVudC4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjMuMiAgMTk5NS8wOS8wOCAgMjI6MDc6MTQgIGJlbnRzb24KLSAqIHJlbW92ZSBwcmludGsgZnJvbSBJU1I7IGZpeCB0eXBvCi0gKgotICogUmV2aXNpb24gMS4zNi4zLjEgIDE5OTUvMDkvMDEgIDEyOjAwOjQyICBtYXJjaW8KLSAqIE1pbm9yIGZpeGVzIGluIHRoZSBQQ0kgYm9hcmQgc3VwcG9ydC4gUENJIGZ1bmN0aW9uIGNhbGxzIGluCi0gKiBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoQ09ORklHX1BDSSkuIFRoYW5rcyB0byBKaW0gRHVuY2FuCi0gKiA8ZHVuY2FuQG9rYXkuY29tPi4gImJhZCBzZXJpYWwgY291bnQiIG1lc3NhZ2UgcmVtb3ZlZC4KLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjMgIDE5OTUvMDgvMjIgIDA5OjE5OjQyICBtYXJjaW8KLSAqIEN5Y2xvbS1ZL1BDSSBzdXBwb3J0IGFkZGVkLiBDaGFuZ2VzIGluIHRoZSBjeV9pbml0IHJvdXRpbmUgYW5kCi0gKiBib2FyZCBpbml0aWFsaXphdGlvbi4gQ2hhbmdlcyBpbiB0aGUgYm9vdCBtZXNzYWdlcy4gVGhlIGRyaXZlcgotICogc3VwcG9ydHMgdXAgdG8gNCBib2FyZHMgYW5kIDY0IHBvcnRzIGJ5IGRlZmF1bHQuCi0gKgotICogUmV2aXNpb24gMS4zNi4xLjQgIDE5OTUvMDMvMjkgIDA2OjE0OjE0ICBiZW50c29uCi0gKiBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBDeWNsb20tMTZZIGFuZCBDeWNsb20tMzJZZTsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjEuMyAgMTk5NS8wMy8yMyAgMjI6MTU6MzUgIGJlbnRzb24KLSAqIGFkZCBtaXNzaW5nIGJyZWFrIGluIG1vZGVtIGNvbnRyb2wgYmxvY2sgaW4gaW9jdGwgc3dpdGNoIHN0YXRlbWVudAotICogKGRpc2NvdmVyZWQgYnkgTWljaGFlbCBFZHdhcmQgQ2hhc3RhaW4gPG1lY0Bqb2JlLnNoZWxsLnBvcnRhbC5jb20+KTsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjEuMiAgMTk5NS8wMy8yMiAgMTk6MTY6MjIgIGJlbnRzb24KLSAqIG1ha2Ugc3VyZSBDVFMgZmxvdyBjb250cm9sIGlzIHNldCBhcyBzb29uIGFzIHBvc3NpYmxlICh0aGFua3MKLSAqIHRvIG5vdGUgZnJvbSBEYXZpZCBMYW1iZXJ0IDxsYW1iZXJ0QGNoZXNhcGVha2UucnBzLnNsYi5jb20+KTsKLSAqCi0gKiBSZXZpc2lvbiAxLjM2LjEuMSAgMTk5NS8wMy8xMyAgMTU6NDQ6NDMgIGJlbnRzb24KLSAqIGluaXRpYWxpemUgZGVmYXVsdHMgZm9yIHJlY2VpdmUgdGhyZXNob2xkIGFuZCBzdGFsZSBkYXRhIHRpbWVvdXQ7Ci0gKiBjb3NtZXRpYyBjaGFuZ2VzOwotICoKLSAqIFJldmlzaW9uIDEuMzYgIDE5OTUvMDMvMTAgIDIzOjMzOjUzICBiZW50c29uCi0gKiBhZGRlZCBzdXBwb3J0IG9mIGNoaXBzIDQtNyBpbiAzMiBwb3J0IEN5Y2xvbS1ZZTsKLSAqIGZpeCBjeV9pbnRlcnJ1cHQgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm9ibGVtCi0gKiAoSm9lIFBvcnRtYW4gPGJhcm9uQGFhLm5ldD4pOwotICogZ2l2ZSBiZXR0ZXIgZXJyb3IgcmVzcG9uc2UgaWYgb3BlbiBpcyBhdHRlbXB0ZWQgb24gbm9uLWV4aXN0ZW50IHBvcnQKLSAqIChaYWNoYXJpYWggVmF1bSA8amNocnlzbHJAbmV0Y29tLmNvbT4pOwotICogY29ycmVjdCBjb21tYW5kIHRpbWVvdXQgKEtlbm5ldGggTGVybWFuIDxsZXJtYW5AQHNlbHRkLm5ld25ldC5jb20+KTsKLSAqIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciAtMTZZIG9uIHN5c3RlbXMgd2l0aCBmYXN0LCBub2lzeSBidXM7Ci0gKiBjb21tZW50IG91dCBkaWFnbm9zdGljIHByaW50IGZ1bmN0aW9uOwotICogY2xlYW5lZCB1cCB0YWJsZSBvZiBiYXNlIGFkZHJlc3NlczsKLSAqIHNldCByZWNlaXZlciB0aW1lLW91dCBwZXJpb2QgcmVnaXN0ZXIgdG8gY29ycmVjdCB2YWx1ZSwKLSAqIHNldCByZWNlaXZlIHRocmVzaG9sZCB0byBiZXR0ZXIgZGVmYXVsdCB2YWx1ZXMsCi0gKiBzZXQgY2hpcCB0aW1lciB0byBtb3JlIGFjY3VyYXRlIDIwMCBIeiB0aWNraW5nLAotICogYWRkIGNvZGUgdG8gbW9uaXRvciBhbmQgbW9kaWZ5IHJlY2VpdmUgcGFyYW1ldGVycwotICogKFJpayBGYWl0aCA8ZmFpdGhAY3MudW5jLmVkdT4gTmljayBTaW1pY2ljaAotICogPG5qc0BzY2lmaS5lbWkubmV0Pik7Ci0gKgotICogUmV2aXNpb24gMS4zNSAgMTk5NC8xMi8xNiAgMTM6NTQ6MTggIHN0ZWZmZW4KLSAqIGFkZGl0aW9uYWwgcGF0Y2ggYnkgTWFyY2lvIFNhaXRvIGZvciBib2FyZCBkZXRlY3Rpb24KLSAqIEFjY2lkZW50bHkgbGVmdCBvdXQgaW4gMS4zNAotICoKLSAqIFJldmlzaW9uIDEuMzQgIDE5OTQvMTIvMTAgIDEyOjM3OjEyICBzdGVmZmVuCi0gKiBUaGlzIGlzIHRoZSBjb3JyZWN0ZWQgdmVyc2lvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyY2lvIFNhaXRvCi0gKgotICogUmV2aXNpb24gMS4zMyAgMTk5NC8xMi8wMSAgMjI6NDE6MTggIGJlbnRzb24KLSAqIGFkZCBob29rcyB0byBzdXBwb3J0IG1vcmUgaGlnaCBzcGVlZHMgZGlyZWN0bHk7IGFkZCB0eXRzbwotICogcGF0Y2ggcmVnYXJkaW5nIENMT0NBTCB3YWtldXBzCi0gKgotICogUmV2aXNpb24gMS4zMiAgMTk5NC8xMS8yMyAgMTk6NTA6MDQgIGJlbnRzb24KLSAqIGFsbG93IGRpcmVjdCBrZXJuZWwgY29udHJvbCBvZiBoaWdoZXIgc2lnbmFsbGluZyByYXRlczsKLSAqIGxvb2sgZm9yIGNhcmRzIGF0IGFkZGl0aW9uYWwgbG9jYXRpb25zCi0gKgotICogUmV2aXNpb24gMS4zMSAgMTk5NC8xMS8xNiAgMDQ6MzM6MjggIGJlbnRzb24KLSAqIEFOT1RIRVIgZml4IGZyb20gQ29yZXkgTWlueWFyZCwgbWlueWFyZEB3Zi1yY2guY2lyci5jb20tLQotICogYSBwcm9ibGVtIGluIGNoYXJzX2luX2J1ZmZlciBoYXMgYmVlbiByZXNvbHZlZCBieSBzb21lCi0gKiBzbWFsbCBjaGFuZ2VzOyAgdGhpcyBzaG91bGQgeWllbGQgc21vb3RoZXIgb3V0cHV0Ci0gKgotICogUmV2aXNpb24gMS4zMCAgMTk5NC8xMS8xNiAgMDQ6Mjg6MDUgIGJlbnRzb24KLSAqIEZpeCBmcm9tIENvcmV5IE1pbnlhcmQsIEludGVybmV0OiBtaW55YXJkQG1ldHJvbmV0LmNvbSwKLSAqIFVVQ1A6IG1pbnlhcmRAd2YtcmNoLmNpcnIuY29tLCBXT1JLOiBtaW55YXJkYm5yLmNhLCB0bwotICogY3lfaGFuZ3VwIHRoYXQgYXBwZWFycyB0byBjbGVhciB1cCBtdWNoIChhbGw/KSBvZiB0aGUKLSAqIERUUiBnbGl0Y2hlczsgYWxzbyBoZSdzIGFkZGVkL2NsZWFuZWQtdXAgZGlhZ25vc3RpYyBtZXNzYWdlcwotICoKLSAqIFJldmlzaW9uIDEuMjkgIDE5OTQvMTEvMTYgIDA0OjE2OjA3ICBiZW50c29uCi0gKiBhZGQgY2hhbmdlIHByb3Bvc2VkIGJ5IFJhbHBoIFNpbXMsIHJhbHBoc0BoYWxjeW9uLmNvbSwgdG8KLSAqIG9wZXJhdGUgaGlnaGVyIHNwZWVkcyBpbiBzYW1lIHdheSBhcyBvdGhlciBzZXJpYWwgcG9ydHM7Ci0gKiBhZGQgbW9yZSBzZXJpYWwgcG9ydHMgKGZvciB1cCB0byB0d28gMTYtcG9ydCBtdXhlcykuCi0gKgotICogUmV2aXNpb24gMS4yOCAgMTk5NC8xMS8wNCAgMDA6MTM6MTYgIHJvb3QKLSAqIHR1cm4gb2ZmIGRpYWdub3N0aWMgbWVzc2FnZXMKLSAqCi0gKiBSZXZpc2lvbiAxLjI3ICAxOTk0LzExLzAzICAyMzo0NjozNyAgcm9vdAotICogYnVuY2ggb2YgY2hhbmdlcyB0byBicmluZyBkcml2ZXIgaW50byBncmVhdGVyIGNvbmZvcm1hbmNlCi0gKiB3aXRoIHRoZSBzZXJpYWwuYyBkcml2ZXIgKGxvb2tpbmcgZm9yIG1pc3NlZCBmaXhlcykKLSAqCi0gKiBSZXZpc2lvbiAxLjI2ICAxOTk0LzExLzAzICAyMjo0MDozNiAgcm9vdAotICogYXV0b21hdGljIGludGVycnVwdCBwcm9iaW5nIGZpeGVkLgotICoKLSAqIFJldmlzaW9uIDEuMjUgIDE5OTQvMTEvMDMgIDIwOjE3OjAyICByb290Ci0gKiBzdGFydCB0byBpbXBsZW1lbnQgYXV0by1pcnEKLSAqCi0gKiBSZXZpc2lvbiAxLjI0ICAxOTk0LzExLzAzICAxODowMTo1NSAgcm9vdAotICogc3RpbGwgd29ya2luZyBvbiBtb2RlbSBzaWduYWxzLS10cnlpbmcgbm90IHRvIGRyb3AgRFRSCi0gKiBkdXJpbmcgdGhlIGdldHR5L2xvZ2luIHByb2Nlc3NlcwotICoKLSAqIFJldmlzaW9uIDEuMjMgIDE5OTQvMTEvMDMgIDE3OjUxOjM2ICByb290Ci0gKiBleHRlbmQgYmF1ZCByYXRlIHN1cHBvcnQ7IHNldCByZWNlaXZlIHRocmVzaG9sZCBhcyBmdW5jdGlvbgotICogb2YgYmF1ZCByYXRlOyBmaXggc29tZSBwcm9ibGVtcyB3aXRoIFJUUy9DVFM7Ci0gKgotICogUmV2aXNpb24gMS4yMiAgMTk5NC8xMS8wMiAgMTg6MDU6MzUgIHJvb3QKLSAqIGNoYW5nZWQgYXJndW1lbnRzIHRvIHVkZWxheSB0byB0eXBlIGxvbmcgdG8gZ2V0Ci0gKiBkZWxheXMgdG8gYmUgb2YgY29ycmVjdCBkdXJhdGlvbgotICoKLSAqIFJldmlzaW9uIDEuMjEgIDE5OTQvMTEvMDIgIDE3OjM3OjMwICByb290Ci0gKiBlbXBsb3kgdWRlbGF5IChhZnRlciBjYWxpYnJhdGluZyBsb29wc19wZXJfc2Vjb25kIGVhcmxpZXIKLSAqIGluIGluaXQvbWFpbi5jKSBpbnN0ZWFkIG9mIHVzaW5nIGhvbWUtZ3Jvd24gZGVsYXkgcm91dGluZXMKLSAqCi0gKiBSZXZpc2lvbiAxLjIwICAxOTk0LzExLzAyICAwMzoxMTozOCAgcm9vdAotICogY3lfY2hhcnNfaW5fYnVmZmVyIGZvcmNlcyBhIHJldHVybiB2YWx1ZSBvZiAwIHRvIGxldAotICogbG9naW4gd29yayAoZG9uJ3Qga25vdyB3aHkgaXQgZG9lcyk7IHNvbWUgZnVuY3Rpb25zCi0gKiB0aGF0IHdlcmUgcmV0dXJuaW5nIEVGQVVMVCwgbm93IGV4ZWN1dGVzIHRoZSBjb2RlOwotICogbW9yZSB3b3JrIG9uIGRlY2lkaW5nIHdoZW4gdG8gZGlzYWJsZSB4bWl0IGludGVycnVwdHM7Ci0gKgotICogUmV2aXNpb24gMS4xOSAgMTk5NC8xMS8wMSAgMjA6MTA6MTQgIHJvb3QKLSAqIGRlZmluZSByb3V0aW5lIHRvIHN0YXJ0IHRyYW5zbWlzc2lvbiBpbnRlcnJ1cHRzIChieSBlbmFibGluZwotICogdHJhbnNtaXQgaW50ZXJydXB0cyk7IGRpcmVjdGx5IGVuYWJsZS9kaXNhYmxlIG1vZGVtIGludGVycnVwdHM7Ci0gKgotICogUmV2aXNpb24gMS4xOCAgMTk5NC8xMS8wMSAgMTg6NDA6NDUgIGJlbnRzb24KLSAqIERvbid0IGFsd2F5cyBlbmFibGUgdHJhbnNtaXQgaW50ZXJydXB0cyBpbiBzdGFydHVwOyBpbnRlcnJ1cHQgb24KLSAqIFR4TXB0eSBpbnN0ZWFkIG9mIFR4UmR5IHRvIGhlbHAgY2hhcmFjdGVycyBnZXQgb3V0IGJlZm9yZSBzaHV0ZG93bjsKLSAqIHJlc3RydWN0dXJlIHhtaXQgaW50ZXJydXB0IHRvIGNoZWNrIGZvciBjaGFycyBmaXJzdCBhbmQgcXVpdCBpZgotICogbm9uZSBhcmUgcmVhZHkgdG8gZ287IG1vZGVtIHN0YXR1cyAoTVhWUngpIGlzIHVwcmlnaHQsIF9ub3RfIGludmVydGVkCi0gKiAodG8gbXkgdmlldyk7Ci0gKgotICogUmV2aXNpb24gMS4xNyAgMTk5NC8xMC8zMCAgMDQ6Mzk6NDUgIGJlbnRzb24KLSAqIHJlbmFtZSBzZXJpYWxfZHJpdmVyIGFuZCBjYWxsb3V0X2RyaXZlciB0byBjeV9zZXJpYWxfZHJpdmVyIGFuZAotICogY3lfY2FsbG91dF9kcml2ZXIgdG8gYXZvaWQgbGlua2FnZSBpbnRlcmZlcmVuY2U7IGluaXRpYWxpemUKLSAqIGluZm8tPnR5cGUgdG8gUE9SVF9DSVJSVVM7IHJ1Z2dlZGl6ZSBwYXJhbm9pYSB0ZXN0OyBlbGlkZSAtPnBvcnQKLSAqIGZyb20gY3ljbGFkZXNfcG9ydCBzdHJ1Y3R1cmU7IGFkZCBwYXJhbm9pYSBjaGVjayB0byBjeV9jbG9zZTsKLSAqCi0gKiBSZXZpc2lvbiAxLjE2ICAxOTk0LzEwLzMwICAwMToxNDozMyAgYmVudHNvbgotICogY2hhbmdlIG1ham9yIG51bWJlcnM7IGFkZCBzb21lIF9lYXJseV8gcmV0dXJuIHN0YXRlbWVudHM7Ci0gKgotICogUmV2aXNpb24gMS4xNSAgMTk5NC8xMC8yOSAgMDY6NDM6MTUgIGJlbnRzb24KLSAqIGZpbmFsIHRpZHlpbmcgdXAgZm9yIGNsZWFuIGNvbXBpbGU7ICBlbmFibGUgc29tZSBlcnJvciByZXBvcnRpbmcKLSAqCi0gKiBSZXZpc2lvbiAxLjE0ICAxOTk0LzEwLzI4ICAyMDozMDoyMiAgQmVudHNvbgotICogbG90cyBvZiBjaGFuZ2VzIHRvIGRyYWcgdGhlIGRyaXZlciB0b3dhcmRzIHRoZSBuZXcgdHR5X2lvCi0gKiBzdHJ1Y3R1cmVzIGFuZCBvcGVyYXRpb24uICBub3QgZXhwZWN0ZWQgdG8gd29yaywgYnV0IG1heQotICogY29tcGlsZSBjbGVhbmx5LgotICoKLSAqIFJldmlzaW9uIDEuMTMgIDE5OTQvMDcvMjEgIDIzOjA4OjU3ICBCZW50c29uCi0gKiBhZGQgc29tZSBkaWFnbm9zdGljIGNydWZ0OyBzdXBwb3J0IDI0IGxpbmVzIChmb3IgdGVzdGluZwotICogYm90aCAtOFkgYW5kIC0xNlkgY2FyZHM7IGJlIG1vcmUgdGhvcm91Z2ggaW4gc2VydmljaW5nIGFsbAotICogY2hpcHMgZHVyaW5nIGludGVycnVwdDsgYWRkICJ2b2xhdGlsZSIgYSBmZXcgcGxhY2VzIHRvCi0gKiBjaXJjdW12ZW50IGNvbXBpbGVyIG9wdGltaXphdGlvbnM7IGZpeCBiYXNlICYgb2Zmc2V0Ci0gKiBjb21wdXRhdGlvbnMgaW4gYmxvY2tfdGlsX3JlYWR5ICh3YXMgY2F1c2luZyBjaGlwIDAgdG8KLSAqIHN0b3Agb3BlcmF0aW9uKQotICoKLSAqIFJldmlzaW9uIDEuMTIgIDE5OTQvMDcvMTkgIDE2OjQyOjExICBCZW50c29uCi0gKiBhZGQgc29tZSBoYWNrZXJ5IGZvciBrZXJuZWwgdmVyc2lvbiAxLjEuODsgZXhwYW5kCi0gKiBlcnJvciBtZXNzYWdlczsgcmVmaW5lIHRpbWluZyBmb3IgZGVsYXkgbG9vcHMgYW5kCi0gKiBkZWNsYXJlIGxvb3AgcGFyYW1zIHZvbGF0aWxlCi0gKgotICogUmV2aXNpb24gMS4xMSAgMTk5NC8wNi8xMSAgMjE6NTM6MTAgIGJlbnRzb24KLSAqIGdldCB1c2Ugb2Ygc2F2ZV9jYXIgcmlnaHQgaW4gdHJhbnNtaXQgaW50ZXJydXB0IHNlcnZpY2UKLSAqCi0gKiBSZXZpc2lvbiAxLjEwLjEuMSAgMTk5NC8wNi8xMSAgMjE6MzE6MTggIGJlbnRzb24KLSAqIGFkZCBzb21lIGRpYWdub3N0aWMgcHJpbnRpbmc7IHRyeSB0byBmaXggc2F2ZV9jYXIgc3R1ZmYKLSAqCi0gKiBSZXZpc2lvbiAxLjEwICAxOTk0LzA2LzExICAyMDozNjowOCAgYmVudHNvbgotICogY2xlYW4gdXAgY29tcGlsZXIgd2FybmluZ3MKLSAqCi0gKiBSZXZpc2lvbiAxLjkgIDE5OTQvMDYvMTEgIDE5OjQyOjQ2ICBiZW50c29uCi0gKiBhZGRlZCBhIGJ1bmNoIG9mIGNvZGUgdG8gc3VwcG9ydCBtb2RlbSBzaWduYWxsaW5nCi0gKgotICogUmV2aXNpb24gMS44ICAxOTk0LzA2LzExICAxNzo1NzowNyAgYmVudHNvbgotICogcmVjb2duaXplIGJyZWFrICYgcGFyaXR5IGVycm9yCi0gKgotICogUmV2aXNpb24gMS43ICAxOTk0LzA2LzA1ICAwNTo1MTozNCAgYmVudHNvbgotICogUmVvcmRlciBiYXVkIHRhYmxlIHRvIGJlIG1vbm90b25pYzsgYWRkIGNsaSB0byBDUDsgZGlzY2FyZAotICogaW5jb21pbmcgY2hhcmFjdGVycyBhbmQgc3RhdHVzIGlmIHRoZSBsaW5lIGlzbid0IG9wZW47IHN0YXJ0IHRvCi0gKiBmb2xkIGNvZGUgaW50byBjeV90aHJvdHRsZTsgc3RhcnQgdG8gcG9ydCBnZXRfc2VyaWFsX2luZm8sCi0gKiBzZXRfc2VyaWFsX2luZm8sIGdldF9tb2RlbV9pbmZvLCBzZXRfbW9kZW1faW5mbywgYW5kIHNlbmRfYnJlYWsKLSAqIGZyb20gc2VyaWFsLmM7IGV4cGFuZCBjeV9pb2N0bDsgcmVsb2NhdGUgYW5kIGV4cGFuZCBjb25maWdfc2V0dXA7Ci0gKiBnZXQgZmxvdyBjb250cm9sIGNoYXJhY3RlcnMgZnJvbSB0dHkgc3RydWN0OyBpbnZhbGlkYXRlIHBvcnRzIHcvbwotICogaGFyZHdhcmU7Ci0gKgotICogUmV2aXNpb24gMS42ICAxOTk0LzA1LzMxICAxODo0MjoyMSAgYmVudHNvbgotICogYWRkIGEgbG9vcC1icmVha2VyIGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lOwotICogbm90ZSB3aGVuIHBvcnQgaXMgaW5pdGlhbGl6ZWQgc28gdGhhdCBpdCBjYW4gYmUgc2h1dAotICogZG93biB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9uczsgcmVjZWl2ZSB3b3JrcyB3aXRob3V0Ci0gKiBhbnkgb2J2aW91cyBlcnJvcnMKLSAqCi0gKiBSZXZpc2lvbiAxLjUgIDE5OTQvMDUvMzAgIDAwOjU1OjAyICBiZW50c29uCi0gKiB0cmFuc21pdCB3b3JrcyB3aXRob3V0IG9idmlvdXMgZXJyb3JzCi0gKgotICogUmV2aXNpb24gMS40ICAxOTk0LzA1LzI3ICAxODo0NjoyNyAgYmVudHNvbgotICogaW5jb3Jwb3JhdGVkIG1vcmUgY29kZSBmcm9tIGxpYl95LmM7IGNhbiBub3cgcHJpbnQgc2hvcnQKLSAqIHN0cmluZ3MgdW5kZXIgaW50ZXJydXB0IGNvbnRyb2wgdG8gcG9ydCB6ZXJvOyBzZWVtcyB0bwotICogc2VsZWN0IHBvcnRzL2NoYW5uZWxzL2xpbmVzIGNvcnJlY3RseQotICoKLSAqIFJldmlzaW9uIDEuMyAgMTk5NC8wNS8yNSAgMjI6MTI6NDQgIGJlbnRzb24KLSAqIHNoaWZ0aW5nIGZyb20gbXVsdGktcG9ydCBvbiBhIGNhcmQgdG8gcHJvcGVyIG11bHRpcGxleG9yCi0gKiBkYXRhIHN0cnVjdHVyZXM7ICBhZGRlZCBza2VsZXRvbnMgb2YgbW9zdCByb3V0aW5lcwotICoKLSAqIFJldmlzaW9uIDEuMiAgMTk5NC8wNS8xOSAgMTM6MjE6NDMgIGJlbnRzb24KLSAqIHN0YXJ0IHRvIGNyaWIgZnJvbSBvdGhlciBzb3VyY2VzCi0gKgogICovCiAKLSNkZWZpbmUgQ1lfVkVSU0lPTgkiMi41IgorI2RlZmluZSBDWV9WRVJTSU9OCSIyLjYiCiAKIC8qIElmIHlvdSBuZWVkIHRvIGluc3RhbGwgbW9yZSBib2FyZHMgdGhhbiBOUl9DQVJEUywgY2hhbmdlIHRoZSBjb25zdGFudAogICAgaW4gdGhlIGRlZmluaXRpb24gYmVsb3cuIE5vIG90aGVyIGNoYW5nZSBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCB1cCB0bwpAQCAtNjQ4LDkgKzgwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNjYwLDEzICs5MCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCi1zdGF0aWMgdm9pZCBjeV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIGN5X3NlbmRfeGNoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7CiAKICNpZm5kZWYgU0VSSUFMX1hNSVRfU0laRQogI2RlZmluZQlTRVJJQUxfWE1JVF9TSVpFCShtaW4oUEFHRV9TSVpFLCA0MDk2KSkKICNlbmRpZgotI2RlZmluZSBXQUtFVVBfQ0hBUlMJCTI1NgogCiAjZGVmaW5lIFNURF9DT01fRkxBR1MgKDApCiAKQEAgLTc1NiwyNSArMTg0LDI1IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEkgICAgICAgICAgICBWSEkKICAqICAgICAyMAogICovCi1zdGF0aWMgaW50IGJhdWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgYmF1ZF90YWJsZVtdID0gewogCTAsIDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwKIAkxODAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA3NjgwMCwgMTE1MjAwLCAxNTAwMDAsCiAJMjMwNDAwLCAwCiB9OwogCi1zdGF0aWMgY2hhciBiYXVkX2NvXzI1W10gPSB7CS8qIDI1IE1IeiBjbG9jayBvcHRpb24gdGFibGUgKi8KK3N0YXRpYyBjb25zdCBjaGFyIGJhdWRfY29fMjVbXSA9IHsJLyogMjUgTUh6IGNsb2NrIG9wdGlvbiB0YWJsZSAqLwogCS8qIHZhbHVlID0+ICAgIDAwICAgIDAxICAgMDIgICAgMDMgICAgMDQgKi8KIAkvKiBkaXZpZGUgYnkgICAgOCAgICAzMiAgIDEyOCAgIDUxMiAgMjA0OCAqLwogCTB4MDAsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDIsCiAJMHgwMiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAogfTsKIAotc3RhdGljIGNoYXIgYmF1ZF9icHJfMjVbXSA9IHsJLyogMjUgTUh6IGJhdWQgcmF0ZSBwZXJpb2QgdGFibGUgKi8KK3N0YXRpYyBjb25zdCBjaGFyIGJhdWRfYnByXzI1W10gPSB7CS8qIDI1IE1IeiBiYXVkIHJhdGUgcGVyaW9kIHRhYmxlICovCiAJMHgwMCwgMHhmNSwgMHhhMywgMHg2ZiwgMHg1YywgMHg1MSwgMHhmNSwgMHhhMywgMHg1MSwgMHhhMywKIAkweDZkLCAweDUxLCAweGEzLCAweDUxLCAweGEzLCAweDUxLCAweDM2LCAweDI5LCAweDFiLCAweDE1CiB9OwogCi1zdGF0aWMgY2hhciBiYXVkX2NvXzYwW10gPSB7CS8qIDYwIE1IeiBjbG9jayBvcHRpb24gdGFibGUgKENEMTQwMCBKKSAqLworc3RhdGljIGNvbnN0IGNoYXIgYmF1ZF9jb182MFtdID0gewkvKiA2MCBNSHogY2xvY2sgb3B0aW9uIHRhYmxlIChDRDE0MDAgSikgKi8KIAkvKiB2YWx1ZSA9PiAgICAwMCAgICAwMSAgIDAyICAgIDAzICAgIDA0ICovCiAJLyogZGl2aWRlIGJ5ICAgIDggICAgMzIgICAxMjggICA1MTIgIDIwNDggKi8KIAkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDAzLCAweDAzLApAQCAtNzgyLDEzICsyMTAsMTMgQEAKIAkweDAwCiB9OwogCi1zdGF0aWMgY2hhciBiYXVkX2Jwcl82MFtdID0gewkvKiA2MCBNSHogYmF1ZCByYXRlIHBlcmlvZCB0YWJsZSAoQ0QxNDAwIEopICovCitzdGF0aWMgY29uc3QgY2hhciBiYXVkX2Jwcl82MFtdID0gewkvKiA2MCBNSHogYmF1ZCByYXRlIHBlcmlvZCB0YWJsZSAoQ0QxNDAwIEopICovCiAJMHgwMCwgMHg4MiwgMHgyMSwgMHhmZiwgMHhkYiwgMHhjMywgMHg5MiwgMHg2MiwgMHhjMywgMHg2MiwKIAkweDQxLCAweGMzLCAweDYyLCAweGMzLCAweDYyLCAweGMzLCAweDgyLCAweDYyLCAweDQxLCAweDMyLAogCTB4MjEKIH07CiAKLXN0YXRpYyBjaGFyIGJhdWRfY29yM1tdID0gewkvKiByZWNlaXZlIHRocmVzaG9sZCAqLworc3RhdGljIGNvbnN0IGNoYXIgYmF1ZF9jb3IzW10gPSB7CS8qIHJlY2VpdmUgdGhyZXNob2xkICovCiAJMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwKIAkweDBhLCAweDBhLCAweDBhLCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA3LAogCTB4MDcKQEAgLTgwNSw3ICsyMzMsNyBAQAogICogY2FibGVzLgogICovCiAKLXN0YXRpYyBjaGFyIHJmbG93X3RocltdID0gewkvKiByZmxvdyB0aHJlc2hvbGQgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHJmbG93X3RocltdID0gewkvKiByZmxvdyB0aHJlc2hvbGQgKi8KIAkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCiAJMHgwYQpAQCAtODE0LDcgKzI0Miw3IEBACiAvKiAgVGhlIEN5Y2xvbS1ZZSBoYXMgcGxhY2VkIHRoZSBzZXF1ZW50aWFsIGNoaXBzIGluIG5vbi1zZXF1ZW50aWFsCiAgKiAgYWRkcmVzcyBvcmRlci4gIFRoaXMgbG9vay11cCB0YWJsZSBvdmVyY29tZXMgdGhhdCBwcm9ibGVtLgogICovCi1zdGF0aWMgaW50IGN5X2NoaXBfb2Zmc2V0W10gPSB7IDB4MDAwMCwKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY3lfY2hpcF9vZmZzZXRbXSA9IHsgMHgwMDAwLAogCTB4MDQwMCwKIAkweDA4MDAsCiAJMHgwQzAwLApAQCAtODI3LDcgKzI1NSw3IEBACiAvKiBQQ0kgcmVsYXRlZCBkZWZpbml0aW9ucyAqLwogCiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN5X3BjaV9kZXZfaWRbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN5X3BjaV9kZXZfaWRbXSA9IHsKIAkvKiBQQ0kgPCAxTWIgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DWUNMQURFUywgUENJX0RFVklDRV9JRF9DWUNMT01fWV9MbykgfSwKIAkvKiBQQ0kgPiAxTWIgKi8KQEAgLTg1MCw3ICsyNzgsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGN5X3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICopOwotc3RhdGljIHZvaWQgc2V0X2xpbmVfY2hhcihzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKTsKK3N0YXRpYyB2b2lkIGN5X3NldF9saW5lX2NoYXIoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKiwgc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiBzdGF0aWMgaW50IGN5el9pc3N1ZV9jbWQoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKiwgX191MzIsIF9fdTgsIF9fdTMyKTsKICNpZmRlZiBDT05GSUdfSVNBCiBzdGF0aWMgdW5zaWduZWQgZGV0ZWN0X2lzYV9pcnEodm9pZCBfX2lvbWVtICopOwpAQCAtODY5LDYgKzI5NywyMCBAQAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGN5el9yeF9mdWxsX3RpbWVyW05SX1BPUlRTXTsKICNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KIAorc3RhdGljIGlubGluZSB2b2lkIGN5eV93cml0ZWIoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKnBvcnQsIHUzMiByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IHBvcnQtPmNhcmQ7CisKKwljeV93cml0ZWIocG9ydC0+dS5jeXkuYmFzZV9hZGRyICsgKHJlZyA8PCBjYXJkLT5idXNfaW5kZXgpLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGN5eV9yZWFkYihzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqcG9ydCwgdTMyIHJlZykKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IHBvcnQtPmNhcmQ7CisKKwlyZXR1cm4gcmVhZGIocG9ydC0+dS5jeXkuYmFzZV9hZGRyICsgKHJlZyA8PCBjYXJkLT5idXNfaW5kZXgpKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGN5X2lzX1ooc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQpCiB7CiAJcmV0dXJuIGNhcmQtPm51bV9jaGlwcyA9PSAodW5zaWduZWQgaW50KS0xOwpAQCAtODkzLDcgKzMzNSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKLQkJY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcm91dGluZSkKKwkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcm91dGluZSkKIHsKICNpZmRlZiBTRVJJQUxfUEFSQU5PSUFfQ0hFQ0sKIAlpZiAoIWluZm8pIHsKQEAgLTkwOSw3ICszNTEsNyBAQAogCX0KICNlbmRpZgogCXJldHVybiAwOwotfQkJCQkvKiBzZXJpYWxfcGFyYW5vaWFfY2hlY2sgKi8KK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKiBTdGFydCBvZiBibG9jayBvZiBDeWNsb20tWSBzcGVjaWZpYyBjb2RlICoqKioqKioqLwpAQCAtOTIxLDEzICszNjMsMTQgQEAKIAogICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIGluc2lkZSBzcGlubG9jay1wcm90ZWN0ZWQgY29kZS4KICAqLwotc3RhdGljIGludCBjeXlfaXNzdWVfY21kKHZvaWQgX19pb21lbSAqYmFzZV9hZGRyLCB1X2NoYXIgY21kLCBpbnQgaW5kZXgpCitzdGF0aWMgaW50IF9fY3l5X2lzc3VlX2NtZCh2b2lkIF9faW9tZW0gKmJhc2VfYWRkciwgdTggY21kLCBpbnQgaW5kZXgpCiB7CisJdm9pZCBfX2lvbWVtICpjY3IgPSBiYXNlX2FkZHIgKyAoQ3lDQ1IgPDwgaW5kZXgpOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyogQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHByZXZpb3VzIGNvbW1hbmQgaGFzIGNvbXBsZXRlZCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpZiAocmVhZGIoYmFzZV9hZGRyICsgKEN5Q0NSIDw8IGluZGV4KSkgPT0gMCkKKwkJaWYgKHJlYWRiKGNjcikgPT0gMCkKIAkJCWJyZWFrOwogCQl1ZGVsYXkoMTBMKTsKIAl9CkBAIC05MzcsMTAgKzM4MCwxNiBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKiBJc3N1ZSB0aGUgbmV3IGNvbW1hbmQgKi8KLQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0NSIDw8IGluZGV4KSwgY21kKTsKKwljeV93cml0ZWIoY2NyLCBjbWQpOwogCiAJcmV0dXJuIDA7Ci19CQkJCS8qIGN5eV9pc3N1ZV9jbWQgKi8KK30KKworc3RhdGljIGlubGluZSBpbnQgY3l5X2lzc3VlX2NtZChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqcG9ydCwgdTggY21kKQoreworCXJldHVybiBfX2N5eV9pc3N1ZV9jbWQocG9ydC0+dS5jeXkuYmFzZV9hZGRyLCBjbWQsCisJCQlwb3J0LT5jYXJkLT5idXNfaW5kZXgpOworfQogCiAjaWZkZWYgQ09ORklHX0lTQQogLyogSVNBIGludGVycnVwdCBkZXRlY3Rpb24gY29kZSAqLwpAQCAtOTYwLDEyICs0MDksMTIgQEAKIAogCWlycXMgPSBwcm9iZV9pcnFfb24oKTsKIAkvKiBXYWl0IC4uLiAqLwotCXVkZWxheSg1MDAwTCk7CisJbXNsZWVwKDUpOwogCiAJLyogRW5hYmxlIHRoZSBUeCBpbnRlcnJ1cHRzIG9uIHRoZSBDRDE0MDAgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lDQVIgPDwgaW5kZXgpLCAwKTsKLQljeXlfaXNzdWVfY21kKGFkZHJlc3MsIEN5Q0hBTl9DVEwgfCBDeUVOQl9YTVRSLCBpbmRleCk7CisJX19jeXlfaXNzdWVfY21kKGFkZHJlc3MsIEN5Q0hBTl9DVEwgfCBDeUVOQl9YTVRSLCBpbmRleCk7CiAKIAljeV93cml0ZWIoYWRkcmVzcyArIChDeUNBUiA8PCBpbmRleCksIDApOwogCWN5X3dyaXRlYihhZGRyZXNzICsgKEN5U1JFUiA8PCBpbmRleCksCkBAIC05NzMsNyArNDIyLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkvKiBXYWl0IC4uLiAqLwotCXVkZWxheSg1MDAwTCk7CisJbXNsZWVwKDUpOwogCiAJLyogQ2hlY2sgd2hpY2ggaW50ZXJydXB0IGlzIGluIHVzZSAqLwogCWlycSA9IHByb2JlX2lycV9vZmYoaXJxcyk7CkBAIC05OTksNyArNDQ4LDcgQEAKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBsZW4sIGluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKLQl1OCBzYXZlX3hpciwgY2hhbm5lbCwgc2F2ZV9jYXIsIGRhdGEsIGNoYXJfY291bnQ7CisJdTggaXZyLCBzYXZlX3hpciwgY2hhbm5lbCwgc2F2ZV9jYXIsIGRhdGEsIGNoYXJfY291bnQ7CiAKICNpZmRlZiBDWV9ERUJVR19JTlRFUlJVUFRTCiAJcHJpbnRrKEtFUk5fREVCVUcgImN5eV9pbnRlcnJ1cHQ6IHJjdmQgaW50ciwgY2hpcCAlZFxuIiwgY2hpcCk7CkBAIC0xMDA4LDI2ICs0NTcsMjUgQEAKIAlzYXZlX3hpciA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJJUiA8PCBpbmRleCkpOwogCWNoYW5uZWwgPSBzYXZlX3hpciAmIEN5SVJDaGFubmVsOwogCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07Ci0Jc2F2ZV9jYXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKLQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOworCXNhdmVfY2FyID0gY3l5X3JlYWRiKGluZm8sIEN5Q0FSKTsKKwljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBzYXZlX3hpcik7CisJaXZyID0gY3l5X3JlYWRiKGluZm8sIEN5UklWUikgJiBDeUlWUk1hc2s7CiAKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZpbmZvLT5wb3J0KTsKIAkvKiBpZiB0aGVyZSBpcyBub3doZXJlIHRvIHB1dCB0aGUgZGF0YSwgZGlzY2FyZCBpdCAqLwotCWlmIChpbmZvLT5wb3J0LnR0eSA9PSBOVUxMKSB7Ci0JCWlmICgocmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYgQ3lJVlJNYXNrKSA9PQotCQkJCUN5SVZSUnhFeCkgewkvKiBleGNlcHRpb24gKi8KLQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7CisJaWYgKHR0eSA9PSBOVUxMKSB7CisJCWlmIChpdnIgPT0gQ3lJVlJSeEV4KSB7CS8qIGV4Y2VwdGlvbiAqLworCQkJZGF0YSA9IGN5eV9yZWFkYihpbmZvLCBDeVJEU1IpOwogCQl9IGVsc2UgewkvKiBub3JtYWwgY2hhcmFjdGVyIHJlY2VwdGlvbiAqLwotCQkJY2hhcl9jb3VudCA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJEQ1IgPDwgaW5kZXgpKTsKKwkJCWNoYXJfY291bnQgPSBjeXlfcmVhZGIoaW5mbywgQ3lSRENSKTsKIAkJCXdoaWxlIChjaGFyX2NvdW50LS0pCi0JCQkJZGF0YSA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwgaW5kZXgpKTsKKwkJCQlkYXRhID0gY3l5X3JlYWRiKGluZm8sIEN5UkRTUik7CiAJCX0KIAkJZ290byBlbmQ7CiAJfQogCS8qIHRoZXJlIGlzIGFuIG9wZW4gcG9ydCBmb3IgdGhpcyBkYXRhICovCi0JdHR5ID0gaW5mby0+cG9ydC50dHk7Ci0JaWYgKChyZWFkYihiYXNlX2FkZHIgKyAoQ3lSSVZSIDw8IGluZGV4KSkgJiBDeUlWUk1hc2spID09Ci0JCQlDeUlWUlJ4RXgpIHsJLyogZXhjZXB0aW9uICovCi0JCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7CisJaWYgKGl2ciA9PSBDeUlWUlJ4RXgpIHsJLyogZXhjZXB0aW9uICovCisJCWRhdGEgPSBjeXlfcmVhZGIoaW5mbywgQ3lSRFNSKTsKIAogCQkvKiBGb3Igc3RhdGlzdGljcyBvbmx5ICovCiAJCWlmIChkYXRhICYgQ3lCUkVBSykKQEAgLTEwNDEsMjggKzQ4OSwyOSBAQAogCiAJCWlmIChkYXRhICYgaW5mby0+aWdub3JlX3N0YXR1c19tYXNrKSB7CiAJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIDEpKSB7CiAJCQlpZiAoZGF0YSAmIGluZm8tPnJlYWRfc3RhdHVzX21hc2spIHsKIAkJCQlpZiAoZGF0YSAmIEN5QlJFQUspIHsKIAkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAotCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PAotCQkJCQkJCWluZGV4KSksIFRUWV9CUkVBSyk7CisJCQkJCQljeXlfcmVhZGIoaW5mbywgQ3lSRFNSKSwKKwkJCQkJCVRUWV9CUkVBSyk7CiAJCQkJCWluZm8tPmljb3VudC5yeCsrOwogCQkJCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykKIAkJCQkJCWRvX1NBSyh0dHkpOwogCQkJCX0gZWxzZSBpZiAoZGF0YSAmIEN5RlJBTUUpIHsKIAkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAotCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PAotCQkJCQkJCWluZGV4KSksIFRUWV9GUkFNRSk7CisJCQkJCQljeXlfcmVhZGIoaW5mbywgQ3lSRFNSKSwKKwkJCQkJCVRUWV9GUkFNRSk7CiAJCQkJCWluZm8tPmljb3VudC5yeCsrOwogCQkJCQlpbmZvLT5pZGxlX3N0YXRzLmZyYW1lX2VycnMrKzsKIAkJCQl9IGVsc2UgaWYgKGRhdGEgJiBDeVBBUklUWSkgewogCQkJCQkvKiBQaWVjZXMgb2Ygc2V2ZW4uLi4gKi8KIAkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAotCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PAotCQkJCQkJCWluZGV4KSksIFRUWV9QQVJJVFkpOworCQkJCQkJY3l5X3JlYWRiKGluZm8sIEN5UkRTUiksCisJCQkJCQlUVFlfUEFSSVRZKTsKIAkJCQkJaW5mby0+aWNvdW50LnJ4Kys7CiAJCQkJCWluZm8tPmlkbGVfc3RhdHMucGFyaXR5X2VycnMrKzsKIAkJCQl9IGVsc2UgaWYgKGRhdGEgJiBDeU9WRVJSVU4pIHsKQEAgLTEwNzQsOCArNTIzLDggQEAKIAkJCQkJICAgdGhlIG5leHQgaW5jb21pbmcgY2hhcmFjdGVyLgogCQkJCQkgKi8KIAkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAotCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PAotCQkJCQkJCWluZGV4KSksIFRUWV9GUkFNRSk7CisJCQkJCQljeXlfcmVhZGIoaW5mbywgQ3lSRFNSKSwKKwkJCQkJCVRUWV9GUkFNRSk7CiAJCQkJCWluZm8tPmljb3VudC5yeCsrOwogCQkJCQlpbmZvLT5pZGxlX3N0YXRzLm92ZXJydW5zKys7CiAJCQkJLyogVGhlc2UgdHdvIGNvbmRpdGlvbnMgbWF5IGltcGx5ICovCkBAIC0xMDk5LDcgKzU0OCw3IEBACiAJCX0KIAl9IGVsc2UgewkvKiBub3JtYWwgY2hhcmFjdGVyIHJlY2VwdGlvbiAqLwogCQkvKiBsb2FkICMgY2hhcnMgYXZhaWxhYmxlIGZyb20gdGhlIGNoaXAgKi8KLQkJY2hhcl9jb3VudCA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJEQ1IgPDwgaW5kZXgpKTsKKwkJY2hhcl9jb3VudCA9IGN5eV9yZWFkYihpbmZvLCBDeVJEQ1IpOwogCiAjaWZkZWYgQ1lfRU5BQkxFX01PTklUT1JJTkcKIAkJKytpbmZvLT5tb24uaW50X2NvdW50OwpAQCAtMTExMCw3ICs1NTksNyBAQAogI2VuZGlmCiAJCWxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY2hhcl9jb3VudCk7CiAJCXdoaWxlIChsZW4tLSkgewotCQkJZGF0YSA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwgaW5kZXgpKTsKKwkJCWRhdGEgPSBjeXlfcmVhZGIoaW5mbywgQ3lSRFNSKTsKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YSwgVFRZX05PUk1BTCk7CiAJCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfYnl0ZXMrKzsKIAkJCWluZm8tPmljb3VudC5yeCsrOwpAQCAtMTEyMSwxNiArNTcwLDE4IEBACiAJCWluZm8tPmlkbGVfc3RhdHMucmVjdl9pZGxlID0gamlmZmllczsKIAl9CiAJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIGVuZDoKIAkvKiBlbmQgb2Ygc2VydmljZSAqLwotCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lSSVIgPDwgaW5kZXgpLCBzYXZlX3hpciAmIDB4M2YpOwotCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBzYXZlX2Nhcik7CisJY3l5X3dyaXRlYihpbmZvLCBDeVJJUiwgc2F2ZV94aXIgJiAweDNmKTsKKwljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBzYXZlX2Nhcik7CiB9CiAKIHN0YXRpYyB2b2lkIGN5eV9jaGlwX3R4KHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbywgdW5zaWduZWQgaW50IGNoaXAsCiAJCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyKQogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IGNoYXJfY291bnQsIGluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKIAl1OCBzYXZlX3hpciwgY2hhbm5lbCwgc2F2ZV9jYXIsIG91dGNoOwogCkBAIC0xMTU0LDkgKzYwNSw5IEBACiAJCWdvdG8gZW5kOwogCX0KIAlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsICsgY2hpcCAqIDRdOwotCWlmIChpbmZvLT5wb3J0LnR0eSA9PSBOVUxMKSB7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCSAgcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgfkN5VHhSZHkpOworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmluZm8tPnBvcnQpOworCWlmICh0dHkgPT0gTlVMTCkgeworCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwgY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgJiB+Q3lUeFJkeSk7CiAJCWdvdG8gZW5kOwogCX0KIApAQCAtMTE2NSw3ICs2MTYsNyBAQAogCiAJaWYgKGluZm8tPnhfY2hhcikgewkvKiBzZW5kIHNwZWNpYWwgY2hhciAqLwogCQlvdXRjaCA9IGluZm8tPnhfY2hhcjsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIG91dGNoKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgb3V0Y2gpOwogCQljaGFyX2NvdW50LS07CiAJCWluZm8tPmljb3VudC50eCsrOwogCQlpbmZvLT54X2NoYXIgPSAwOwpAQCAtMTE3MywxNCArNjI0LDE0IEBACiAKIAlpZiAoaW5mby0+YnJlYWtvbiB8fCBpbmZvLT5icmVha29mZikgewogCQlpZiAoaW5mby0+YnJlYWtvbikgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIDApOwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIDB4ODEpOworCQkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgMCk7CisJCQljeXlfd3JpdGViKGluZm8sIEN5VERSLCAweDgxKTsKIAkJCWluZm8tPmJyZWFrb24gPSAwOwogCQkJY2hhcl9jb3VudCAtPSAyOwogCQl9CiAJCWlmIChpbmZvLT5icmVha29mZikgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIDApOwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIDB4ODMpOworCQkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgMCk7CisJCQljeXlfd3JpdGViKGluZm8sIEN5VERSLCAweDgzKTsKIAkJCWluZm8tPmJyZWFrb2ZmID0gMDsKIAkJCWNoYXJfY291bnQgLT0gMjsKIAkJfQpAQCAtMTE4OCwyNyArNjM5LDIzIEBACiAKIAl3aGlsZSAoY2hhcl9jb3VudC0tID4gMCkgewogCQlpZiAoIWluZm8tPnhtaXRfY250KSB7Ci0JCQlpZiAocmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgQ3lUeE1wdHkpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCi0JCQkJCQl+Q3lUeE1wdHkpOworCQkJaWYgKGN5eV9yZWFkYihpbmZvLCBDeVNSRVIpICYgQ3lUeE1wdHkpIHsKKwkJCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwKKwkJCQkJY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgJiB+Q3lUeE1wdHkpOwogCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCShyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgotCQkJCQkJfkN5VHhSZHkpIHwgQ3lUeE1wdHkpOworCQkJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLCBDeVR4TXB0eSB8CisJCQkJCShjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIH5DeVR4UmR5KSk7CiAJCQl9CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJaWYgKGluZm8tPnBvcnQueG1pdF9idWYgPT0gTlVMTCkgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCi0JCQkJCX5DeVR4UmR5KTsKKwkJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLAorCQkJCWN5eV9yZWFkYihpbmZvLCBDeVNSRVIpICYgfkN5VHhSZHkpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCWlmIChpbmZvLT5wb3J0LnR0eS0+c3RvcHBlZCB8fCBpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCkgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCi0JCQkJCX5DeVR4UmR5KTsKKwkJaWYgKHR0eS0+c3RvcHBlZCB8fCB0dHktPmh3X3N0b3BwZWQpIHsKKwkJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLAorCQkJCWN5eV9yZWFkYihpbmZvLCBDeVNSRVIpICYgfkN5VHhSZHkpOwogCQkJZ290byBkb25lOwogCQl9CiAJCS8qIEJlY2F1c2UgdGhlIEVtYmVkZGVkIFRyYW5zbWl0IENvbW1hbmRzIGhhdmUgYmVlbiBlbmFibGVkLApAQCAtMTIyNSwxNSArNjcyLDE1IEBACiAJCQlpbmZvLT54bWl0X2NudC0tOwogCQkJaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIDEpICYKIAkJCQkJKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCBvdXRjaCk7CisJCQljeXlfd3JpdGViKGluZm8sIEN5VERSLCBvdXRjaCk7CiAJCQlpbmZvLT5pY291bnQudHgrKzsKIAkJfSBlbHNlIHsKIAkJCWlmIChjaGFyX2NvdW50ID4gMSkgewogCQkJCWluZm8tPnhtaXRfY250LS07CiAJCQkJaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIDEpICYKIAkJCQkJKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgb3V0Y2gpOwotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAwKTsKKwkJCQljeXlfd3JpdGViKGluZm8sIEN5VERSLCBvdXRjaCk7CisJCQkJY3l5X3dyaXRlYihpbmZvLCBDeVREUiwgMCk7CiAJCQkJaW5mby0+aWNvdW50LnR4Kys7CiAJCQkJY2hhcl9jb3VudC0tOwogCQkJfQpAQCAtMTI0MSwxNyArNjg4LDE5IEBACiAJfQogCiBkb25lOgotCXR0eV93YWtldXAoaW5mby0+cG9ydC50dHkpOworCXR0eV93YWtldXAodHR5KTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIGVuZDoKIAkvKiBlbmQgb2Ygc2VydmljZSAqLwotCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lUSVIgPDwgaW5kZXgpLCBzYXZlX3hpciAmIDB4M2YpOwotCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBzYXZlX2Nhcik7CisJY3l5X3dyaXRlYihpbmZvLCBDeVRJUiwgc2F2ZV94aXIgJiAweDNmKTsKKwljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBzYXZlX2Nhcik7CiB9CiAKIHN0YXRpYyB2b2lkIGN5eV9jaGlwX21vZGVtKHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbywgaW50IGNoaXAsCiAJCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyKQogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IGluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKIAl1OCBzYXZlX3hpciwgY2hhbm5lbCwgc2F2ZV9jYXIsIG1kbV9jaGFuZ2UsIG1kbV9zdGF0dXM7CiAKQEAgLTEyNTksMTMgKzcwOCwxNCBAQAogCXNhdmVfeGlyID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TUlSIDw8IGluZGV4KSk7CiAJY2hhbm5lbCA9IHNhdmVfeGlyICYgQ3lJUkNoYW5uZWw7CiAJaW5mbyA9ICZjaW5mby0+cG9ydHNbY2hhbm5lbCArIGNoaXAgKiA0XTsKLQlzYXZlX2NhciA9IHJlYWRiKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCkpOwotCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBzYXZlX3hpcik7CisJc2F2ZV9jYXIgPSBjeXlfcmVhZGIoaW5mbywgQ3lDQVIpOworCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIHNhdmVfeGlyKTsKIAotCW1kbV9jaGFuZ2UgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNSVNSIDw8IGluZGV4KSk7Ci0JbWRtX3N0YXR1cyA9IHJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSk7CisJbWRtX2NoYW5nZSA9IGN5eV9yZWFkYihpbmZvLCBDeU1JU1IpOworCW1kbV9zdGF0dXMgPSBjeXlfcmVhZGIoaW5mbywgQ3lNU1ZSMSk7CiAKLQlpZiAoIWluZm8tPnBvcnQudHR5KQorCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmluZm8tPnBvcnQpOworCWlmICghdHR5KQogCQlnb3RvIGVuZDsKIAogCWlmIChtZG1fY2hhbmdlICYgQ3lBTllfREVMVEEpIHsKQEAgLTEyNzksMzUgKzcyOSwzMiBAQAogCQlpZiAobWRtX2NoYW5nZSAmIEN5UkkpCiAJCQlpbmZvLT5pY291bnQucm5nKys7CiAKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCiAJaWYgKChtZG1fY2hhbmdlICYgQ3lEQ0QpICYmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpKSB7Ci0JCWlmICghKG1kbV9zdGF0dXMgJiBDeURDRCkpIHsKLQkJCXR0eV9oYW5ndXAoaW5mby0+cG9ydC50dHkpOwotCQkJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQkJfQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKKwkJaWYgKG1kbV9zdGF0dXMgJiBDeURDRCkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOworCQllbHNlCisJCQl0dHlfaGFuZ3VwKHR0eSk7CiAJfQogCWlmICgobWRtX2NoYW5nZSAmIEN5Q1RTKSAmJiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSkgewotCQlpZiAoaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKKwkJaWYgKHR0eS0+aHdfc3RvcHBlZCkgewogCQkJaWYgKG1kbV9zdGF0dXMgJiBDeUNUUykgewogCQkJCS8qIGN5X3N0YXJ0IGlzbid0IHVzZWQKIAkJCQkgICBiZWNhdXNlLi4uICEhISAqLwotCQkJCWluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkID0gMDsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8Ci0JCQkJCQlDeVR4UmR5KTsKLQkJCQl0dHlfd2FrZXVwKGluZm8tPnBvcnQudHR5KTsKKwkJCQl0dHktPmh3X3N0b3BwZWQgPSAwOworCQkJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLAorCQkJCQljeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSB8IEN5VHhSZHkpOworCQkJCXR0eV93YWtldXAodHR5KTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICghKG1kbV9zdGF0dXMgJiBDeUNUUykpIHsKIAkJCQkvKiBjeV9zdG9wIGlzbid0IHVzZWQKIAkJCQkgICBiZWNhdXNlIC4uLiAhISEgKi8KLQkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgotCQkJCQkJfkN5VHhSZHkpOworCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQkJY3l5X3dyaXRlYihpbmZvLCBDeVNSRVIsCisJCQkJCWN5eV9yZWFkYihpbmZvLCBDeVNSRVIpICYgfkN5VHhSZHkpOwogCQkJfQogCQl9CiAJfQpAQCAtMTMxNSwxMCArNzYyLDExIEBACiAJfQogCWlmIChtZG1fY2hhbmdlICYgQ3lSSSkgewogCX0qLworCXR0eV9rcmVmX3B1dCh0dHkpOwogZW5kOgogCS8qIGVuZCBvZiBzZXJ2aWNlICovCi0JY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1JUiA8PCBpbmRleCksIHNhdmVfeGlyICYgMHgzZik7Ci0JY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfY2FyKTsKKwljeXlfd3JpdGViKGluZm8sIEN5TUlSLCBzYXZlX3hpciAmIDB4M2YpOworCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIHNhdmVfY2FyKTsKIH0KIAogLyogVGhlIHJlYWwgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBpcyBjYWxsZWQKQEAgLTEzODksNiArODM3LDU2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQkJCQkvKiBjeXlfaW50ZXJydXB0ICovCiAKK3N0YXRpYyB2b2lkIGN5eV9jaGFuZ2VfcnRzX2R0cihzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgaW50IHNldCwKKwkJdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkID0gaW5mby0+Y2FyZDsKKwlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOworCXUzMiBydHMsIGR0ciwgbXN2cnIsIG1zdnJkOworCisJY2hhbm5lbCAmPSAweDAzOworCisJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKKwkJbXN2cnIgPSBDeU1TVlIyOworCQltc3ZyZCA9IEN5TVNWUjE7CisJCXJ0cyA9IEN5RFRSOworCQlkdHIgPSBDeVJUUzsKKwl9IGVsc2UgeworCQltc3ZyciA9IEN5TVNWUjE7CisJCW1zdnJkID0gQ3lNU1ZSMjsKKwkJcnRzID0gQ3lSVFM7CisJCWR0ciA9IEN5RFRSOworCX0KKwlpZiAoc2V0ICYgVElPQ01fUlRTKSB7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwpOworCQljeXlfd3JpdGViKGluZm8sIG1zdnJyLCBydHMpOworCX0KKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCk7CisJCWN5eV93cml0ZWIoaW5mbywgbXN2cnIsIH5ydHMpOworCX0KKwlpZiAoc2V0ICYgVElPQ01fRFRSKSB7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwpOworCQljeXlfd3JpdGViKGluZm8sIG1zdnJkLCBkdHIpOworI2lmZGVmIENZX0RFQlVHX0RUUgorCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNldF9tb2RlbV9pbmZvIHJhaXNpbmcgRFRSXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAorCQkJY3l5X3JlYWRiKGluZm8sIEN5TVNWUjEpLAorCQkJY3l5X3JlYWRiKGluZm8sIEN5TVNWUjIpKTsKKyNlbmRpZgorCX0KKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpIHsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCk7CisJCWN5eV93cml0ZWIoaW5mbywgbXN2cmQsIH5kdHIpOworI2lmZGVmIENZX0RFQlVHX0RUUgorCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNldF9tb2RlbV9pbmZvIGRyb3BwaW5nIERUUlxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKKwkJCWN5eV9yZWFkYihpbmZvLCBDeU1TVlIxKSwKKwkJCWN5eV9yZWFkYihpbmZvLCBDeU1TVlIyKSk7CisjZW5kaWYKKwl9Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKiogRW5kIG9mIGJsb2NrIG9mIEN5Y2xvbS1ZIHNwZWNpZmljIGNvZGUgKioqKioqKioqKi8KIC8qKioqKioqKiBTdGFydCBvZiBibG9jayBvZiBDeWNsYWRlcy1aIHNwZWNpZmljIGNvZGUgKioqKioqKi8KQEAgLTEzOTgsMTUgKzg5Niw5IEBACiBjeXpfZmV0Y2hfbXNnKHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbywKIAkJX191MzIgKmNoYW5uZWwsIF9fdTggKmNtZCwgX191MzIgKnBhcmFtKQogewotCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0Jc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7CisJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybCA9IGNpbmZvLT5ib2FyZF9jdHJsOwogCXVuc2lnbmVkIGxvbmcgbG9jX2Rvb3JiZWxsOwogCi0JZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotCXpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArIChyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0KIAlsb2NfZG9vcmJlbGwgPSByZWFkbCgmY2luZm8tPmN0bF9hZGRyLnA5MDYwLT5sb2NfZG9vcmJlbGwpOwogCWlmIChsb2NfZG9vcmJlbGwpIHsKIAkJKmNtZCA9IChjaGFyKSgweGZmICYgbG9jX2Rvb3JiZWxsKTsKQEAgLTE0MjIsMTkgKzkxNCwxMyBAQAogY3l6X2lzc3VlX2NtZChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8sCiAJCV9fdTMyIGNoYW5uZWwsIF9fdTggY21kLCBfX3UzMiBwYXJhbSkKIHsKLQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOworCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmwgPSBjaW5mby0+Ym9hcmRfY3RybDsKIAlfX3UzMiBfX2lvbWVtICpwY2lfZG9vcmJlbGw7CiAJdW5zaWduZWQgaW50IGluZGV4OwogCi0JZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwogCWlmICghY3l6X2lzX2xvYWRlZChjaW5mbykpCiAJCXJldHVybiAtMTsKIAotCXpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArIChyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0KIAlpbmRleCA9IDA7CiAJcGNpX2Rvb3JiZWxsID0gJmNpbmZvLT5jdGxfYWRkci5wOTA2MC0+cGNpX2Rvb3JiZWxsOwogCXdoaWxlICgocmVhZGwocGNpX2Rvb3JiZWxsKSAmIDB4ZmYpICE9IDApIHsKQEAgLTE0NDksMTEgKzkzNSwxMCBAQAogCXJldHVybiAwOwogfQkJCQkvKiBjeXpfaXNzdWVfY21kICovCiAKLXN0YXRpYyB2b2lkIGN5el9oYW5kbGVfcngoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCXN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybCkKK3N0YXRpYyB2b2lkIGN5el9oYW5kbGVfcngoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsID0gaW5mby0+dS5jeXouYnVmX2N0cmw7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IGNoYXJfY291bnQ7CiAJaW50IGxlbjsKICNpZmRlZiBCTE9DS01PVkUKQEAgLTE1NDIsMTEgKzEwMjcsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGN5el9oYW5kbGVfdHgoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCXN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybCkKK3N0YXRpYyB2b2lkIGN5el9oYW5kbGVfdHgoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsID0gaW5mby0+dS5jeXouYnVmX2N0cmw7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CiAJdTggZGF0YTsKIAl1bnNpZ25lZCBpbnQgY2hhcl9jb3VudDsKICNpZmRlZiBCTE9DS01PVkUKQEAgLTE2MjEsMzQgKzExMDUsMjQgQEAKIAogc3RhdGljIHZvaWQgY3l6X2hhbmRsZV9jbWQoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvKQogeworCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmwgPSBjaW5mby0+Ym9hcmRfY3RybDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwotCXN0YXRpYyBzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCXN0YXRpYyBzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0Jc3RhdGljIHN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0Jc3RhdGljIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7Ci0Jc3RhdGljIHN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybDsKIAlfX3UzMiBjaGFubmVsLCBwYXJhbSwgZndfdmVyOwogCV9fdTggY21kOwogCWludCBzcGVjaWFsX2NvdW50OwogCWludCBkZWx0YV9jb3VudDsKIAotCWZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKyAocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwogCWZ3X3ZlciA9IHJlYWRsKCZib2FyZF9jdHJsLT5md192ZXJzaW9uKTsKIAogCXdoaWxlIChjeXpfZmV0Y2hfbXNnKGNpbmZvLCAmY2hhbm5lbCwgJmNtZCwgJnBhcmFtKSA9PSAxKSB7CiAJCXNwZWNpYWxfY291bnQgPSAwOwogCQlkZWx0YV9jb3VudCA9IDA7CiAJCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWxdOwotCQl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmaW5mby0+cG9ydCk7CiAJCWlmICh0dHkgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCWNoX2N0cmwgPSAmKHpmd19jdHJsLT5jaF9jdHJsW2NoYW5uZWxdKTsKLQkJYnVmX2N0cmwgPSAmKHpmd19jdHJsLT5idWZfY3RybFtjaGFubmVsXSk7Ci0KIAkJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBDX0NNX1BSX0VSUk9SOgogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfUEFSSVRZKTsKQEAgLTE2NjksMTUgKzExNDMsMTIgQEAKIAkJCWluZm8tPmljb3VudC5kY2QrKzsKIAkJCWRlbHRhX2NvdW50Kys7CiAJCQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7Ci0JCQkJaWYgKChmd192ZXIgPiAyNDEgPyAoKHVfbG9uZykgcGFyYW0pIDoKLQkJCQkJCXJlYWRsKCZjaF9jdHJsLT5yc19zdGF0dXMpKSAmCi0JCQkJCQlDX1JTX0RDRCkgeworCQkJCXUzMiBkY2QgPSBmd192ZXIgPiAyNDEgPyBwYXJhbSA6CisJCQkJCXJlYWRsKCZpbmZvLT51LmN5ei5jaF9jdHJsLT5yc19zdGF0dXMpOworCQkJCWlmIChkY2QgJiBDX1JTX0RDRCkKIAkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdHR5X2hhbmd1cChpbmZvLT5wb3J0LnR0eSk7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwotCQkJCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCQkJCX0KKwkJCQllbHNlCisJCQkJCXR0eV9oYW5ndXAodHR5KTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIENfQ01fTUNUUzoKQEAgLTE3MDYsNyArMTE3Nyw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY3l6X2ludGVycnVwdDogcmN2ZCBpbnRyLCBjYXJkICVkLCAiCiAJCQkJCSJwb3J0ICVsZFxuIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CiAjZW5kaWYKLQkJCWN5el9oYW5kbGVfcngoaW5mbywgYnVmX2N0cmwpOworCQkJY3l6X2hhbmRsZV9yeChpbmZvLCB0dHkpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ19DTV9UWEJFTVBUWToKIAkJY2FzZSBDX0NNX1RYTE9XV006CkBAIC0xNzE2LDcgKzExODcsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5el9pbnRlcnJ1cHQ6IHhtaXQgaW50ciwgY2FyZCAlZCwgIgogCQkJCQkicG9ydCAlbGRcbiIsIGluZm8tPmNhcmQsIGNoYW5uZWwpOwogI2VuZGlmCi0JCQljeXpfaGFuZGxlX3R4KGluZm8sIGJ1Zl9jdHJsKTsKKwkJCWN5el9oYW5kbGVfdHgoaW5mbywgdHR5KTsKIAkJCWJyZWFrOwogI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLwogCQljYXNlIENfQ01fRkFUQUw6CkBAIC0xNzI2LDkgKzExOTcsMTAgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChkZWx0YV9jb3VudCkKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJaWYgKHNwZWNpYWxfY291bnQpCiAJCQl0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CiB9CiAKQEAgLTE3NzQsMTAgKzEyNDYsNiBAQAogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0Jc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCXN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybDsKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CiAJdW5zaWduZWQgaW50IHBvcnQsIGNhcmQ7CiAKQEAgLTE3ODksMTAgKzEyNTcsNiBAQAogCQlpZiAoIWN5el9pc19sb2FkZWQoY2luZm8pKQogCQkJY29udGludWU7CiAKLQkJZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotCQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKwotCQkJCShyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCiAJLyogU2tpcCBmaXJzdCBwb2xsaW5nIGN5Y2xlIHRvIGF2b2lkIHJhY2luZyBjb25kaXRpb25zIHdpdGggdGhlIEZXICovCiAJCWlmICghY2luZm8tPmludHJfZW5hYmxlZCkgewogCQkJY2luZm8tPmludHJfZW5hYmxlZCA9IDE7CkBAIC0xODAyLDEzICsxMjY2LDE3IEBACiAJCWN5el9oYW5kbGVfY21kKGNpbmZvKTsKIAogCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2luZm8tPm5wb3J0czsgcG9ydCsrKSB7CisJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCiAJCQlpbmZvID0gJmNpbmZvLT5wb3J0c1twb3J0XTsKLQkJCXR0eSA9IGluZm8tPnBvcnQudHR5OwotCQkJYnVmX2N0cmwgPSAmKHpmd19jdHJsLT5idWZfY3RybFtwb3J0XSk7CisJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZpbmZvLT5wb3J0KTsKKwkJCS8qIE9LIHRvIHBhc3MgTlVMTCB0byB0aGUgaGFuZGxlIGZ1bmN0aW9ucyBiZWxvdy4KKwkJCSAgIFRoZXkgbmVlZCB0byBkcm9wIHRoZSBkYXRhIGluIHRoYXQgY2FzZS4gKi8KIAogCQkJaWYgKCFpbmZvLT50aHJvdHRsZSkKLQkJCQljeXpfaGFuZGxlX3J4KGluZm8sIGJ1Zl9jdHJsKTsKLQkJCWN5el9oYW5kbGVfdHgoaW5mbywgYnVmX2N0cmwpOworCQkJCWN5el9oYW5kbGVfcngoaW5mbywgdHR5KTsKKwkJCWN5el9oYW5kbGVfdHgoaW5mbywgdHR5KTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCS8qIHBvbGwgZXZlcnkgJ2N5el9wb2xsaW5nX2N5Y2xlJyBwZXJpb2QgKi8KIAkJZXhwaXJlcyA9IGppZmZpZXMgKyBjeXpfcG9sbGluZ19jeWNsZTsKQEAgLTE4MjQsMTMgKzEyOTIsMTIgQEAKIC8qIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIGEgcG9ydCBiZWNvbWVzIGFjdGl2ZTsKICAgIGludGVycnVwdHMgYXJlIGVuYWJsZWQgYW5kIERUUiAmIFJUUyBhcmUgdHVybmVkIG9uLgogICovCi1zdGF0aWMgaW50IHN0YXJ0dXAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8pCitzdGF0aWMgaW50IGN5X3N0YXJ0dXAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dmFsID0gMDsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoYW5uZWw7CiAJdW5zaWduZWQgbG9uZyBwYWdlOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7CkBAIC0xODQyLDE1ICsxMzA5LDExIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKLQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7Ci0JCWZyZWVfcGFnZShwYWdlKTsKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQogCQlnb3RvIGVycm91dDsKLQl9CiAKIAlpZiAoIWluZm8tPnR5cGUpIHsKLQkJaWYgKGluZm8tPnBvcnQudHR5KQotCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOwotCQlmcmVlX3BhZ2UocGFnZSk7CisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7CiAJCWdvdG8gZXJyb3V0OwogCX0KIApAQCAtMTg2MSw5NiArMTMyNCw1MyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKLQlzZXRfbGluZV9jaGFyKGluZm8pOworCWN5X3NldF9saW5lX2NoYXIoaW5mbywgdHR5KTsKIAogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwogCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCi0jaWZkZWYgQ1lfREVCVUdfT1BFTgotCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIHN0YXJ0dXAgY2FyZCAlZCwgY2hpcCAlZCwgY2hhbm5lbCAlZCwgIgotCQkJCSJiYXNlX2FkZHIgJXBcbiIsCi0JCQkJY2FyZCwgY2hpcCwgY2hhbm5lbCwgYmFzZV9hZGRyKTsKLSNlbmRpZgogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsKTsKIAotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UlRQUiA8PCBpbmRleCksCisJCWN5eV93cml0ZWIoaW5mbywgQ3lSVFBSLAogCQkJKGluZm8tPmRlZmF1bHRfdGltZW91dCA/IGluZm8tPmRlZmF1bHRfdGltZW91dCA6IDB4MDIpKTsKIAkJLyogMTBtcyByeCB0aW1lb3V0ICovCiAKLQkJY3l5X2lzc3VlX2NtZChiYXNlX2FkZHIsIEN5Q0hBTl9DVEwgfCBDeUVOQl9SQ1ZSIHwgQ3lFTkJfWE1UUiwKLQkJCQlpbmRleCk7CisJCWN5eV9pc3N1ZV9jbWQoaW5mbywgQ3lDSEFOX0NUTCB8IEN5RU5CX1JDVlIgfCBDeUVOQl9YTVRSKTsKIAotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHVfY2hhcikgY2hhbm5lbCk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksIEN5UlRTKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwgQ3lEVFIpOworCQljeXlfY2hhbmdlX3J0c19kdHIoaW5mbywgVElPQ01fUlRTIHwgVElPQ01fRFRSLCAwKTsKIAotI2lmZGVmIENZX0RFQlVHX0RUUgotCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnN0YXJ0dXAgcmFpc2luZyBEVFJcbiIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7Ci0jZW5kaWYKLQotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeVJ4RGF0YSk7Ci0JCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7Ci0KLQkJaWYgKGluZm8tPnBvcnQudHR5KQotCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7Ci0JCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKLQkJaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKLQkJbWVtc2V0KChjaGFyICopJmluZm8tPmlkbGVfc3RhdHMsIDAsIHNpemVvZihpbmZvLT5pZGxlX3N0YXRzKSk7Ci0JCWluZm8tPmlkbGVfc3RhdHMuaW5fdXNlID0KLQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPQotCQlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfaWRsZSA9IGppZmZpZXM7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0KKwkJY3l5X3dyaXRlYihpbmZvLCBDeVNSRVIsIGN5eV9yZWFkYihpbmZvLCBDeVNSRVIpIHwgQ3lSeERhdGEpOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0JCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLQkJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLQkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKKwkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybCA9IGluZm8tPnUuY3l6LmNoX2N0cmw7CiAKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyOwotCi0JCWZpcm1faWQgPSBiYXNlX2FkZHIgKyBJRF9BRERSRVNTOwogCQlpZiAoIWN5el9pc19sb2FkZWQoY2FyZCkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAotCQl6ZndfY3RybCA9IGNhcmQtPmJhc2VfYWRkciArCi0JCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0JCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKLQogI2lmZGVmIENZX0RFQlVHX09QRU4KIAkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzdGFydHVwIFogY2FyZCAlZCwgY2hhbm5lbCAlZCwgIgotCQkJImJhc2VfYWRkciAlcFxuIiwgY2FyZCwgY2hhbm5lbCwgYmFzZV9hZGRyKTsKKwkJCSJiYXNlX2FkZHIgJXBcbiIsIGNhcmQsIGNoYW5uZWwsIGNhcmQtPmJhc2VfYWRkcik7CiAjZW5kaWYKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCi0JCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5vcF9tb2RlLCBDX0NIX0VOQUJMRSk7CisJCWN5X3dyaXRlbCgmY2hfY3RybC0+b3BfbW9kZSwgQ19DSF9FTkFCTEUpOwogI2lmZGVmIFpfV0FLRQogI2lmZGVmIENPTkZJR19DWVpfSU5UUgotCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0uaW50cl9lbmFibGUsCisJCWN5X3dyaXRlbCgmY2hfY3RybC0+aW50cl9lbmFibGUsCiAJCQkgIENfSU5fVFhCRU1QVFkgfCBDX0lOX1RYTE9XV00gfCBDX0lOX1JYSElXTSB8CiAJCQkgIENfSU5fUlhOTkRUIHwgQ19JTl9JT0NUTFcgfCBDX0lOX01EQ0QpOwogI2Vsc2UKLQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLmludHJfZW5hYmxlLAorCQljeV93cml0ZWwoJmNoX2N0cmwtPmludHJfZW5hYmxlLAogCQkJICBDX0lOX0lPQ1RMVyB8IENfSU5fTURDRCk7CiAjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAjZWxzZQogI2lmZGVmIENPTkZJR19DWVpfSU5UUgotCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0uaW50cl9lbmFibGUsCisJCWN5X3dyaXRlbCgmY2hfY3RybC0+aW50cl9lbmFibGUsCiAJCQkgIENfSU5fVFhCRU1QVFkgfCBDX0lOX1RYTE9XV00gfCBDX0lOX1JYSElXTSB8CiAJCQkgIENfSU5fUlhOTkRUIHwgQ19JTl9NRENEKTsKICNlbHNlCi0JCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5pbnRyX2VuYWJsZSwgQ19JTl9NRENEKTsKKwkJY3lfd3JpdGVsKCZjaF9jdHJsLT5pbnRyX2VuYWJsZSwgQ19JTl9NRENEKTsKICNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KICNlbmRpZgkJCQkvKiBaX1dBS0UgKi8KIApAQCAtMTk2OSwzMyArMTM4OSwyMyBAQAogCiAJCS8qIHNldCB0aW1lb3V0ICEhISAqLwogCQkvKiBzZXQgUlRTIGFuZCBEVFIgISEhICovCi0JCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotCQkJcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgfCBDX1JTX1JUUyB8Ci0JCQlDX1JTX0RUUik7Ci0JCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwgY2hhbm5lbCwgQ19DTV9JT0NUTE0sIDBMKTsKLQkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImN5YzpzdGFydHVwKDMpIHJldHZhbCBvbiB0dHlDJWQgd2FzICIKLQkJCQkiJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7Ci0JCX0KLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzdGFydHVwIHJhaXNpbmcgWiBEVFJcbiIpOwotI2VuZGlmCisJCXR0eV9wb3J0X3JhaXNlX2R0cl9ydHMoJmluZm8tPnBvcnQpOwogCiAJCS8qIGVuYWJsZSBzZW5kLCByZWN2LCBtb2RlbSAhISEgKi8KLQotCQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwotCQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKLQkJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwotCQlpbmZvLT5icmVha29uID0gaW5mby0+YnJlYWtvZmYgPSAwOwotCQltZW1zZXQoKGNoYXIgKikmaW5mby0+aWRsZV9zdGF0cywgMCwgc2l6ZW9mKGluZm8tPmlkbGVfc3RhdHMpKTsKLQkJaW5mby0+aWRsZV9zdGF0cy5pbl91c2UgPQotCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSA9Ci0JCWluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlID0gamlmZmllczsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAKKwlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOworCisJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOworCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKKwlpbmZvLT5icmVha29uID0gaW5mby0+YnJlYWtvZmYgPSAwOworCW1lbXNldCgoY2hhciAqKSZpbmZvLT5pZGxlX3N0YXRzLCAwLCBzaXplb2YoaW5mby0+aWRsZV9zdGF0cykpOworCWluZm8tPmlkbGVfc3RhdHMuaW5fdXNlID0KKwlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSA9CisJaW5mby0+aWRsZV9zdGF0cy54bWl0X2lkbGUgPSBqaWZmaWVzOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisKICNpZmRlZiBDWV9ERUJVR19PUEVOCiAJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzdGFydHVwIGRvbmVcbiIpOwogI2VuZGlmCkBAIC0yMDAzLDI4ICsxNDEzLDIwIEBACiAKIGVycm91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwlmcmVlX3BhZ2UocGFnZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0JCQkJLyogc3RhcnR1cCAqLwogCiBzdGF0aWMgdm9pZCBzdGFydF94bWl0KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkID0gaW5mby0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKKwlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCi0JY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIGNoYW5uZWwpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeVR4UmR5KTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCAmIDB4MDMpOworCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwgY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgfCBDeVR4UmR5KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKQEAgLTIwNDcsMTIgKzE0NDksMTEgQEAKICAqIFRoaXMgcm91dGluZSBzaHV0cyBkb3duIGEgc2VyaWFsIHBvcnQ7IGludGVycnVwdHMgYXJlIGRpc2FibGVkLAogICogYW5kIERUUiBpcyBkcm9wcGVkIGlmIHRoZSBoYW5ndXAgb24gY2xvc2UgdGVybWlvIGZsYWcgaXMgb24uCiAgKi8KLXN0YXRpYyB2b2lkIHNodXRkb3duKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQorc3RhdGljIHZvaWQgY3lfc2h1dGRvd24oc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoYW5uZWw7CiAKIAlpZiAoIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQogCQlyZXR1cm47CkBAIC0yMDYwLDIxICsxNDYxLDEwIEBACiAJY2FyZCA9IGluZm8tPmNhcmQ7CiAJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCi0jaWZkZWYgQ1lfREVCVUdfT1BFTgotCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIHNodXRkb3duIFkgY2FyZCAlZCwgY2hpcCAlZCwgIgotCQkJCSJjaGFubmVsICVkLCBiYXNlX2FkZHIgJXBcbiIsCi0JCQkJY2FyZCwgY2hpcCwgY2hhbm5lbCwgYmFzZV9hZGRyKTsKLSNlbmRpZgotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBDbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3MuICovCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCiAJCWlmIChpbmZvLT5wb3J0LnhtaXRfYnVmKSB7CiAJCQl1bnNpZ25lZCBjaGFyICp0ZW1wOwpAQCAtMjA4Miw0NyArMTQ3MiwyNSBAQAogCQkJaW5mby0+cG9ydC54bWl0X2J1ZiA9IE5VTEw7CiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGVtcCk7CiAJCX0KLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwotCQlpZiAoIWluZm8tPnBvcnQudHR5IHx8IChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSkgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwgfkN5UlRTKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksIH5DeURUUik7Ci0jaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIHNodXRkb3duIGRyb3BwaW5nIERUUlxuIik7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKLSNlbmRpZgotCQl9Ci0JCWN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLCBDeUNIQU5fQ1RMIHwgQ3lESVNfUkNWUiwgaW5kZXgpOworCQlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpCisJCQljeXlfY2hhbmdlX3J0c19kdHIoaW5mbywgMCwgVElPQ01fUlRTIHwgVElPQ01fRFRSKTsKKworCQljeXlfaXNzdWVfY21kKGluZm8sIEN5Q0hBTl9DVEwgfCBDeURJU19SQ1ZSKTsKIAkJLyogaXQgbWF5IGJlIGFwcHJvcHJpYXRlIHRvIGNsZWFyIF9YTUlUIGF0CiAJCSAgIHNvbWUgbGF0ZXIgZGF0ZSAoYWZ0ZXIgdGVzdGluZykhISEgKi8KIAotCQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7CiAJCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0JCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0JCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7Ci0JCWludCByZXR2YWw7Ci0KLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyOwogI2lmZGVmIENZX0RFQlVHX09QRU4KIAkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzaHV0ZG93biBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsICIKLQkJCSJiYXNlX2FkZHIgJXBcbiIsIGNhcmQsIGNoYW5uZWwsIGJhc2VfYWRkcik7CisJCQkiYmFzZV9hZGRyICVwXG4iLCBjYXJkLCBjaGFubmVsLCBjYXJkLT5iYXNlX2FkZHIpOwogI2VuZGlmCiAKLQkJZmlybV9pZCA9IGJhc2VfYWRkciArIElEX0FERFJFU1M7CiAJCWlmICghY3l6X2lzX2xvYWRlZChjYXJkKSkKIAkJCXJldHVybjsKIAotCQl6ZndfY3RybCA9IGNhcmQtPmJhc2VfYWRkciArCi0JCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0JCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGluZm8tPnBvcnQueG1pdF9idWYpIHsKQEAgLTIxMzIsMjMgKzE1MDAsMTAgQEAKIAkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0ZW1wKTsKIAkJfQogCi0JCWlmICghaW5mby0+cG9ydC50dHkgfHwgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7Ci0JCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCQkoX191MzIpKHJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpICYKLQkJCQkJfihDX1JTX1JUUyB8IENfUlNfRFRSKSkpOwotCQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZChpbmZvLT5jYXJkLCBjaGFubmVsLAotCQkJCQlDX0NNX0lPQ1RMTSwgMEwpOwotCQkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSImN5YzpzaHV0ZG93biByZXR2YWwgb24gdHR5QyVkICIKLQkJCQkJIndhcyAleFxuIiwgaW5mby0+bGluZSwgcmV0dmFsKTsKLQkJCX0KLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2h1dGRvd24gZHJvcHBpbmcgWiBEVFJcbiIpOwotI2VuZGlmCi0JCX0KKwkJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKQorCQkJdHR5X3BvcnRfbG93ZXJfZHRyX3J0cygmaW5mby0+cG9ydCk7CiAKLQkJaWYgKGluZm8tPnBvcnQudHR5KQotCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKQEAgLTIxNjUsMTk5ICsxNTIwLDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLXN0YXRpYyBpbnQKLWJsb2NrX3RpbF9yZWFkeShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8pCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OwotCWludCByZXR2YWw7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0KLQljaW5mbyA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKLQotCS8qCi0JICogSWYgdGhlIGRldmljZSBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGNsb3NlZCwgdGhlbiBibG9jawotCSAqIHVudGlsIGl0J3MgZG9uZSwgYW5kIHRoZW4gdHJ5IGFnYWluLgotCSAqLwotCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykpIHsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPnBvcnQuY2xvc2Vfd2FpdCwKLQkJCQkhKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSk7Ci0JCXJldHVybiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8gLUVBR0FJTjogLUVSRVNUQVJUU1lTOwotCX0KLQotCS8qCi0JICogSWYgbm9uLWJsb2NraW5nIG1vZGUgaXMgc2V0LCB0aGVuIG1ha2UgdGhlIGNoZWNrIHVwIGZyb250Ci0JICogYW5kIHRoZW4gZXhpdC4KLQkgKi8KLQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAotCQkJCQkodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpKSB7Ci0JCWluZm8tPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBCbG9jayB3YWl0aW5nIGZvciB0aGUgY2FycmllciBkZXRlY3QgYW5kIHRoZSBsaW5lIHRvIGJlY29tZQotCSAqIGZyZWUgKGkuZS4sIG5vdCBpbiB1c2UgYnkgdGhlIGNhbGxvdXQpLiAgV2hpbGUgd2UgYXJlIGluCi0JICogdGhpcyBsb29wLCBpbmZvLT5wb3J0LmNvdW50IGlzIGRyb3BwZWQgYnkgb25lLCBzbyB0aGF0Ci0JICogY3lfY2xvc2UoKSBrbm93cyB3aGVuIHRvIGZyZWUgdGhpbmdzLiAgV2UgcmVzdG9yZSBpdCB1cG9uCi0JICogZXhpdCwgZWl0aGVyIG5vcm1hbCBvciBhYm5vcm1hbC4KLQkgKi8KLQlyZXR2YWwgPSAwOwotCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwotI2lmZGVmIENZX0RFQlVHX09QRU4KLQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2s6IHR0eUMlZCwgIgotCQkiY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+cG9ydC5jb3VudCk7Ci0jZW5kaWYKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJaW5mby0+cG9ydC5jb3VudC0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKLSNpZmRlZiBDWV9ERUJVR19DT1VOVAotCXByaW50ayhLRVJOX0RFQlVHICJjeWMgYmxvY2tfdGlsX3JlYWR5OiAoJWQpOiBkZWNyZW1lbnRpbmcgY291bnQgdG8gIgotCQkiJWRcbiIsIGN1cnJlbnQtPnBpZCwgaW5mby0+cG9ydC5jb3VudCk7Ci0jZW5kaWYKLQlpbmZvLT5wb3J0LmJsb2NrZWRfb3BlbisrOwotCi0JaWYgKCFjeV9pc19aKGNpbmZvKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KLQkJd2hpbGUgKDEpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQlpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSkgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAotCQkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgQ3lSVFMpOwotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksCi0JCQkJCSAgQ3lEVFIpOwotI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgIgotCQkJCQkiRFRSXG4iKTsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCi0JCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwotI2VuZGlmCi0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkJCQkhKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKLQkJCQlyZXR2YWwgPSAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/Ci0JCQkJCSAgLUVBR0FJTiA6IC1FUkVTVEFSVFNZUyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwotCQkJaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmIChDX0NMT0NBTCh0dHkpIHx8Ci0JCQkJCShyZWFkYihiYXNlX2FkZHIgKwotCQkJCQkJKEN5TVNWUjEgPDwgaW5kZXgpKSAmIEN5RENEKSkpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0KLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJCQlicmVhazsKLQkJCX0KLSNpZmRlZiBDWV9ERUJVR19PUEVOCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBibG9ja2luZzogIgotCQkJCSJ0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0JCQkJaW5mby0+bGluZSwgaW5mby0+cG9ydC5jb3VudCk7Ci0jZW5kaWYKLQkJCXNjaGVkdWxlKCk7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0JCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0JCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7Ci0KLQkJYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkcjsKLQkJZmlybV9pZCA9IGJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCWlmICghY3l6X2lzX2xvYWRlZChjaW5mbykpIHsKLQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQl6ZndfY3RybCA9IGJhc2VfYWRkciArIChyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKQotCQkJCQkJCQkmIDB4ZmZmZmYpOwotCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0KLQkJd2hpbGUgKDEpIHsKLQkJCWlmICgodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpKSB7Ci0JCQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0JCQkJCXJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpIHwKLQkJCQkJQ19SU19SVFMgfCBDX1JTX0RUUik7Ci0JCQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZChjaW5mbywKLQkJCQkJY2hhbm5lbCwgQ19DTV9JT0NUTE0sIDBMKTsKLQkJCQlpZiAocmV0dmFsICE9IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6YmxvY2tfdGlsX3JlYWR5ICIKLQkJCQkJCSJyZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7Ci0JCQkJfQotI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgIgotCQkJCQkiWiBEVFJcbiIpOwotI2VuZGlmCi0JCQl9Ci0KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkJCQkhKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKLQkJCQlyZXR2YWwgPSAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKSA/Ci0JCQkJCSAgLUVBR0FJTiA6IC1FUkVTVEFSVFNZUyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYgKENfQ0xPQ0FMKHR0eSkgfHwKLQkJCQkJKHJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX3N0YXR1cykgJgotCQkJCQkJQ19SU19EQ0QpKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwotCQkJCWJyZWFrOwotCQkJfQotI2lmZGVmIENZX0RFQlVHX09QRU4KLQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWMgYmxvY2tfdGlsX3JlYWR5IGJsb2NraW5nOiAiCi0JCQkJInR0eUMlZCwgY291bnQgPSAlZFxuIiwKLQkJCQlpbmZvLT5saW5lLCBpbmZvLT5wb3J0LmNvdW50KTsKLSNlbmRpZgotCQkJc2NoZWR1bGUoKTsKLQkJfQotCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPnBvcnQub3Blbl93YWl0LCAmd2FpdCk7Ci0JaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKSB7Ci0JCWluZm8tPnBvcnQuY291bnQrKzsKLSNpZmRlZiBDWV9ERUJVR19DT1VOVAotCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmJsb2NrX3RpbF9yZWFkeSAoJWQpOiBpbmNyZW1lbnRpbmcgIgotCQkJImNvdW50IHRvICVkXG4iLCBjdXJyZW50LT5waWQsIGluZm8tPnBvcnQuY291bnQpOwotI2VuZGlmCi0JfQotCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuLS07Ci0jaWZkZWYgQ1lfREVCVUdfT1BFTgotCXByaW50ayhLRVJOX0RFQlVHICJjeWM6YmxvY2tfdGlsX3JlYWR5IGFmdGVyIGJsb2NraW5nOiB0dHlDJWQsICIKLQkJImNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPnBvcnQuY291bnQpOwotI2VuZGlmCi0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQlpbmZvLT5wb3J0LmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JcmV0dXJuIDA7Ci19CQkJCS8qIGJsb2NrX3RpbF9yZWFkeSAqLwotCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBhIHNlcmlhbCBwb3J0IGlzIG9wZW5lZC4gIEl0CiAgKiBwZXJmb3JtcyB0aGUgc2VyaWFsLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZvciB0aGUgdHR5IHN0cnVjdHVyZS4KQEAgLTI0MzYsNyArMTU5OCw2IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9vcGVuIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X29wZW4iKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTI0NjIsMTEgKzE2MjMsMTEgQEAKIAkvKgogCSAqIFN0YXJ0IHVwIHNlcmlhbCBwb3J0CiAJICovCi0JcmV0dmFsID0gc3RhcnR1cChpbmZvKTsKKwlyZXR2YWwgPSBjeV9zdGFydHVwKGluZm8sIHR0eSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHZhbCA9IGJsb2NrX3RpbF9yZWFkeSh0dHksIGZpbHAsIGluZm8pOworCXJldHZhbCA9IHR0eV9wb3J0X2Jsb2NrX3RpbF9yZWFkeSgmaW5mby0+cG9ydCwgdHR5LCBmaWxwKTsKIAlpZiAocmV0dmFsKSB7CiAjaWZkZWYgQ1lfREVCVUdfT1BFTgogCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X29wZW4gcmV0dXJuaW5nIGFmdGVyIGJsb2NrX3RpbF9yZWFkeSAiCkBAIC0yNDc2LDYgKzE2MzcsNyBAQAogCX0KIAogCWluZm8tPnRocm90dGxlID0gMDsKKwl0dHlfcG9ydF90dHlfc2V0KCZpbmZvLT5wb3J0LCB0dHkpOwogCiAjaWZkZWYgQ1lfREVCVUdfT1BFTgogCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfb3BlbiBkb25lXG4iKTsKQEAgLTI0OTAsOCArMTY1Miw2IEBACiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllczsKIAlpbnQgY2hhcl90aW1lOwogCkBAIC0yNTM1LDEzICsxNjk1LDggQEAKIAkJdGltZW91dCwgY2hhcl90aW1lLCBqaWZmaWVzKTsKICNlbmRpZgogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY2FyZC0+Zmlyc3RfbGluZSk7CiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0JCXdoaWxlIChyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiBDeVR4UmR5KSB7CisJCXdoaWxlIChjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIEN5VHhSZHkpIHsKICNpZmRlZiBDWV9ERUJVR19XQUlUX1VOVElMX1NFTlQKIAkJCXByaW50ayhLRVJOX0RFQlVHICJOb3QgY2xlYW4gKGppZmY9JWx1KS4uLiIsIGppZmZpZXMpOwogI2VuZGlmCkBAIC0yNTk1LDEwMyArMTc1MCwzNyBAQAogfQkJCQkvKiBjeV9mbHVzaF9idWZmZXIgKi8KIAogCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGEgcGFydGljdWxhciB0dHkgZGV2aWNlIGlzIGNsb3NlZC4KLSAqLwotc3RhdGljIHZvaWQgY3lfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBjeV9kb19jbG9zZShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBjeWNsYWRlc19wb3J0LAorCQkJCQkJCQlwb3J0KTsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0jaWZkZWYgQ1lfREVCVUdfT1RIRVIKLQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2Nsb3NlIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7Ci0jZW5kaWYKLQotCWlmICghaW5mbyB8fCBzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfY2xvc2UiKSkKLQkJcmV0dXJuOworCWludCBjaGFubmVsOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JLyogSWYgdGhlIFRUWSBpcyBiZWluZyBodW5nIHVwLCBub3RoaW5nIHRvIGRvICovCi0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0jaWZkZWYgQ1lfREVCVUdfT1BFTgotCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfY2xvc2UgdHR5QyVkLCBjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLAotCQlpbmZvLT5wb3J0LmNvdW50KTsKLSNlbmRpZgotCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+cG9ydC5jb3VudCAhPSAxKSkgewotCQkvKgotCQkgKiBVaCwgb2guICB0dHktPmNvdW50IGlzIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHR0eQotCQkgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIEluZm8tPmNvdW50IHNob3VsZCBhbHdheXMKLQkJICogYmUgb25lIGluIHRoZXNlIGNvbmRpdGlvbnMuICBJZiBpdCdzIGdyZWF0ZXIgdGhhbgotCQkgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2JsZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKLQkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCi0JCSAqLwotCQlwcmludGsoS0VSTl9FUlIgImN5YzpjeV9jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50OyAiCi0JCQkidHR5LT5jb3VudCBpcyAxLCBpbmZvLT5wb3J0LmNvdW50IGlzICVkXG4iLCBpbmZvLT5wb3J0LmNvdW50KTsKLQkJaW5mby0+cG9ydC5jb3VudCA9IDE7Ci0JfQotI2lmZGVmIENZX0RFQlVHX0NPVU5UCi0JcHJpbnRrKEtFUk5fREVCVUcgICJjeWM6Y3lfY2xvc2UgYXQgKCVkKTogZGVjcmVtZW50aW5nIGNvdW50IHRvICVkXG4iLAotCQljdXJyZW50LT5waWQsIGluZm8tPnBvcnQuY291bnQgLSAxKTsKLSNlbmRpZgotCWlmICgtLWluZm8tPnBvcnQuY291bnQgPCAwKSB7Ci0jaWZkZWYgQ1lfREVCVUdfQ09VTlQKLQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeWNfY2xvc2Ugc2V0dGluZyBjb3VudCB0byAwXG4iKTsKLSNlbmRpZgotCQlpbmZvLT5wb3J0LmNvdW50ID0gMDsKLQl9Ci0JaWYgKGluZm8tPnBvcnQuY291bnQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0JaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOwotCi0JLyoKLQkgKiBOb3cgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0IGJ1ZmZlciB0byBjbGVhcjsgYW5kIHdlIG5vdGlmeQotCSAqIHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gb25seSBwcm9jZXNzIFhPTi9YT0ZGIGNoYXJhY3RlcnMuCi0JICovCi0JdHR5LT5jbG9zaW5nID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQgIT0gQ1lfQ0xPU0lOR19XQUlUX05PTkUpCi0JCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCk7Ci0KKwljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWludCBjaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7Ci0JCWludCBpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKwotCQkJKGN5X2NoaXBfb2Zmc2V0W2NoYW5uZWwgPj4gMl0gPDwgaW5kZXgpOwogCQkvKiBTdG9wIGFjY2VwdGluZyBpbnB1dCAqLwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lSeERhdGEpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsICYgMHgwMyk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLCBjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIH5DeVJ4RGF0YSk7CiAJCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJCS8qIFdhaXRpbmcgZm9yIG9uLWJvYXJkIGJ1ZmZlcnMgdG8gYmUgZW1wdHkgYmVmb3JlCiAJCQkgICBjbG9zaW5nIHRoZSBwb3J0ICovCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCWN5X3dhaXRfdW50aWxfc2VudCh0dHksIGluZm8tPnRpbWVvdXQpOworCQkJY3lfd2FpdF91bnRpbF9zZW50KHBvcnQtPnR0eSwgaW5mby0+dGltZW91dCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCX0KIAl9IGVsc2UgewogI2lmZGVmIFpfV0FLRQogCQkvKiBXYWl0aW5nIGZvciBvbi1ib2FyZCBidWZmZXJzIHRvIGJlIGVtcHR5IGJlZm9yZSBjbG9zaW5nCiAJCSAgIHRoZSBwb3J0ICovCi0JCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyOwotCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQkJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsID0KLQkJICAgIGJhc2VfYWRkciArIChyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0JCWludCBjaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CisJCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmwgPSBpbmZvLT51LmN5ei5jaF9jdHJsOwogCQlpbnQgcmV0dmFsOwogCi0JCWlmIChyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5mbG93X3N0YXR1cykgIT0gQ19GU19UWElETEUpIHsKKwkJaWYgKHJlYWRsKCZjaF9jdHJsLT5mbG93X3N0YXR1cykgIT0gQ19GU19UWElETEUpIHsKIAkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwgY2hhbm5lbCwgQ19DTV9JT0NUTFcsIDBMKTsKIAkJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfY2xvc2UgcmV0dmFsIG9uICIKQEAgLTI3MDMsMzIgKzE3OTIsMTkgQEAKIAkJfQogI2VuZGlmCiAJfQotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0Jc2h1dGRvd24oaW5mbyk7Ci0JY3lfZmx1c2hfYnVmZmVyKHR0eSk7Ci0JdHR5X2xkaXNjX2ZsdXNoKHR0eSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCWN5X3NodXRkb3duKGluZm8sIHBvcnQtPnR0eSk7Cit9CiAKLQl0dHktPmNsb3NpbmcgPSAwOwotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKLQlpZiAoaW5mby0+cG9ydC5ibG9ja2VkX29wZW4pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCWlmIChpbmZvLT5wb3J0LmNsb3NlX2RlbGF5KSB7Ci0JCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzCi0JCQkJCQkoaW5mby0+cG9ydC5jbG9zZV9kZWxheSkpOwotCQl9Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JfQotCWluZm8tPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFIHwgQVNZTkNfQ0xPU0lORyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0LmNsb3NlX3dhaXQpOwotCi0jaWZkZWYgQ1lfREVCVUdfT1RIRVIKLQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2Nsb3NlIGRvbmVcbiIpOwotI2VuZGlmCi0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UgaXMgY2xvc2VkLgorICovCitzdGF0aWMgdm9pZCBjeV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFpbmZvIHx8IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9jbG9zZSIpKQorCQlyZXR1cm47CisJdHR5X3BvcnRfY2xvc2UoJmluZm8tPnBvcnQsIHR0eSwgZmlscCk7CiB9CQkJCS8qIGN5X2Nsb3NlICovCiAKIC8qIFRoaXMgcm91dGluZSBnZXRzIGNhbGxlZCB3aGVuIHR0eV93cml0ZSBoYXMgcHV0IHNvbWV0aGluZyBpbnRvCkBAIC0yODcxLDE4ICsxOTQ3LDEzIEBACiAKIHN0YXRpYyBpbnQgY3lfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwotCWludCBjaGFubmVsOwogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9jaGFyc19pbl9idWZmZXIiKSkKIAkJcmV0dXJuIDA7CiAKLQljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGNhcmQtPmZpcnN0X2xpbmUpOwotCiAjaWZkZWYgWl9FWFRfQ0hBUlNfSU5fQlVGRkVSCi0JaWYgKCFjeV9pc19aKGNhcmQpKSB7CisJaWYgKCFjeV9pc19aKGluZm8tPmNhcmQpKSB7CiAjZW5kaWYJCQkJLyogWl9FWFRfQ0hBUlNfSU5fQlVGRkVSICovCiAjaWZkZWYgQ1lfREVCVUdfSU8KIAkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jaGFyc19pbl9idWZmZXIgdHR5QyVkICVkXG4iLApAQCAtMjg5MSwyMCArMTk2MiwxMSBAQAogCQlyZXR1cm4gaW5mby0+eG1pdF9jbnQ7CiAjaWZkZWYgWl9FWFRfQ0hBUlNfSU5fQlVGRkVSCiAJfSBlbHNlIHsKLQkJc3RhdGljIHN0cnVjdCBGSVJNX0lEICpmaXJtX2lkOwotCQlzdGF0aWMgc3RydWN0IFpGV19DVFJMICp6ZndfY3RybDsKLQkJc3RhdGljIHN0cnVjdCBDSF9DVFJMICpjaF9jdHJsOwotCQlzdGF0aWMgc3RydWN0IEJVRl9DVFJMICpidWZfY3RybDsKKwkJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsID0gaW5mby0+dS5jeXouYnVmX2N0cmw7CiAJCWludCBjaGFyX2NvdW50OwogCQlfX3UzMiB0eF9wdXQsIHR4X2dldCwgdHhfYnVmc2l6ZTsKIAogCQlsb2NrX2tlcm5lbCgpOwotCQlmaXJtX2lkID0gY2FyZC0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQkJemZ3X2N0cmwgPSBjYXJkLT5iYXNlX2FkZHIgKwotCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JCWNoX2N0cmwgPSAmKHpmd19jdHJsLT5jaF9jdHJsW2NoYW5uZWxdKTsKLQkJYnVmX2N0cmwgPSAmKHpmd19jdHJsLT5idWZfY3RybFtjaGFubmVsXSk7Ci0KIAkJdHhfZ2V0ID0gcmVhZGwoJmJ1Zl9jdHJsLT50eF9nZXQpOwogCQl0eF9wdXQgPSByZWFkbCgmYnVmX2N0cmwtPnR4X3B1dCk7CiAJCXR4X2J1ZnNpemUgPSByZWFkbCgmYnVmX2N0cmwtPnR4X2J1ZnNpemUpOwpAQCAtMjk1Nyw0OCArMjAxOSw0NCBAQAogICogVGhpcyByb3V0aW5lIGZpbmRzIG9yIGNvbXB1dGVzIHRoZSB2YXJpb3VzIGxpbmUgY2hhcmFjdGVyaXN0aWNzLgogICogSXQgdXNlZCB0byBiZSBjYWxsZWQgY29uZmlnX3NldHVwCiAgKi8KLXN0YXRpYyB2b2lkIHNldF9saW5lX2NoYXIoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8pCitzdGF0aWMgdm9pZCBjeV9zZXRfbGluZV9jaGFyKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCBjaGFubmVsOwogCXVuc2lnbmVkIGNmbGFnLCBpZmxhZzsKIAlpbnQgYmF1ZCwgYmF1ZF9yYXRlID0gMDsKIAlpbnQgaTsKIAotCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQorCWlmICghdHR5LT50ZXJtaW9zKSAvKiBYWFggY2FuIHRoaXMgaGFwcGVuIGF0IGFsbD8gKi8KIAkJcmV0dXJuOwogCiAJaWYgKGluZm8tPmxpbmUgPT0gLTEpCiAJCXJldHVybjsKIAotCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JaWZsYWcgPSBpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlpZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19pZmxhZzsKIAogCS8qCiAJICogU2V0IHVwIHRoZSB0dHktPmFsdF9zcGVlZCBrbHVkZ2UKIAkgKi8KLQlpZiAoaW5mby0+cG9ydC50dHkpIHsKLQkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKLQkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSA1NzYwMDsKLQkJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCi0JCQlpbmZvLT5wb3J0LnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOwotCQlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1NISSkKLQkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7Ci0JCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKLQkJCWluZm8tPnBvcnQudHR5LT5hbHRfc3BlZWQgPSA0NjA4MDA7Ci0JfQorCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCisJCXR0eS0+YWx0X3NwZWVkID0gNTc2MDA7CisJaWYgKChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCisJCXR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOworCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQorCQl0dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKKwlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1dBUlApCisJCXR0eS0+YWx0X3NwZWVkID0gNDYwODAwOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7CiAJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0KLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCXUzMiBjZmxhZ3M7CiAKIAkJLyogYmF1ZCByYXRlICovCi0JCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShpbmZvLT5wb3J0LnR0eSk7CisJCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCQlpZiAoYmF1ZCA9PSAzODQwMCAmJiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQogCQkJCUFTWU5DX1NQRF9DVVNUKSB7CiAJCQlpZiAoaW5mby0+Y3VzdG9tX2Rpdmlzb3IpCkBAIC0zMTA3LDEyNCArMjE2NSw2OCBAQAogCSAgICBjYWJsZS4gIENvbnRhY3QgTWFyY2lvIFNhaXRvIGZvciBkZXRhaWxzLgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCQljaGlwID0gY2hhbm5lbCA+PiAyOwogCQljaGFubmVsICY9IDB4MDM7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHVfY2hhcikgY2hhbm5lbCk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwpOwogCiAJCS8qIHR4IGFuZCByeCBiYXVkIHJhdGUgKi8KIAotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VENPUiA8PCBpbmRleCksIGluZm8tPnRjbyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lUQlBSIDw8IGluZGV4KSwgaW5mby0+dGJwcik7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lSQ09SIDw8IGluZGV4KSwgaW5mby0+cmNvKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVJCUFIgPDwgaW5kZXgpLCBpbmZvLT5yYnByKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVRDT1IsIGluZm8tPnRjbyk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lUQlBSLCBpbmZvLT50YnByKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVJDT1IsIGluZm8tPnJjbyk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lSQlBSLCBpbmZvLT5yYnByKTsKIAogCQkvKiBzZXQgbGluZSBjaGFyYWN0ZXJpc3RpY3MgIGFjY29yZGluZyBjb25maWd1cmF0aW9uICovCiAKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNDSFIxIDw8IGluZGV4KSwKLQkJCSAgU1RBUlRfQ0hBUihpbmZvLT5wb3J0LnR0eSkpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U0NIUjIgPDwgaW5kZXgpLCBTVE9QX0NIQVIoaW5mby0+cG9ydC50dHkpKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNPUjEgPDwgaW5kZXgpLCBpbmZvLT5jb3IxKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNPUjIgPDwgaW5kZXgpLCBpbmZvLT5jb3IyKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNPUjMgPDwgaW5kZXgpLCBpbmZvLT5jb3IzKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNPUjQgPDwgaW5kZXgpLCBpbmZvLT5jb3I0KTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNPUjUgPDwgaW5kZXgpLCBpbmZvLT5jb3I1KTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeVNDSFIxLCBTVEFSVF9DSEFSKHR0eSkpOworCQljeXlfd3JpdGViKGluZm8sIEN5U0NIUjIsIFNUT1BfQ0hBUih0dHkpKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNPUjEsIGluZm8tPmNvcjEpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q09SMiwgaW5mby0+Y29yMik7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lDT1IzLCBpbmZvLT5jb3IzKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNPUjQsIGluZm8tPmNvcjQpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q09SNSwgaW5mby0+Y29yNSk7CiAKLQkJY3l5X2lzc3VlX2NtZChiYXNlX2FkZHIsIEN5Q09SX0NIQU5HRSB8IEN5Q09SMWNoIHwgQ3lDT1IyY2ggfAotCQkJCUN5Q09SM2NoLCBpbmRleCk7CisJCWN5eV9pc3N1ZV9jbWQoaW5mbywgQ3lDT1JfQ0hBTkdFIHwgQ3lDT1IxY2ggfCBDeUNPUjJjaCB8CisJCQkJQ3lDT1IzY2gpOwogCiAJCS8qICEhISBJcyB0aGlzIG5lZWRlZD8gKi8KLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UlRQUiA8PCBpbmRleCksCisJCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwpOworCQljeXlfd3JpdGViKGluZm8sIEN5UlRQUiwKIAkJCShpbmZvLT5kZWZhdWx0X3RpbWVvdXQgPyBpbmZvLT5kZWZhdWx0X3RpbWVvdXQgOiAweDAyKSk7CiAJCS8qIDEwbXMgcnggdGltZW91dCAqLwogCi0JCWlmIChDX0NMT0NBTChpbmZvLT5wb3J0LnR0eSkpIHsKLQkJCS8qIHdpdGhvdXQgbW9kZW0gaW50ciAqLwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5TWRtQ2gpOwotCQkJLyogYWN0IG9uIDEtPjAgbW9kZW0gdHJhbnNpdGlvbnMgKi8KLQkJCWlmICgoY2ZsYWcgJiBDUlRTQ1RTKSAmJiBpbmZvLT5yZmxvdykgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNQ09SMSA8PCBpbmRleCksCi0JCQkJCSAgKEN5Q1RTIHwgcmZsb3dfdGhyW2ldKSk7Ci0JCQl9IGVsc2UgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNQ09SMSA8PCBpbmRleCksCi0JCQkJCSAgQ3lDVFMpOwotCQkJfQotCQkJLyogYWN0IG9uIDAtPjEgbW9kZW0gdHJhbnNpdGlvbnMgKi8KLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNQ09SMiA8PCBpbmRleCksIEN5Q1RTKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHdpdGhvdXQgbW9kZW0gaW50ciAqLwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCSAgcmVhZGIoYmFzZV9hZGRyICsKLQkJCQkJICAgKEN5U1JFUiA8PCBpbmRleCkpIHwgQ3lNZG1DaCk7Ci0JCQkvKiBhY3Qgb24gMS0+MCBtb2RlbSB0cmFuc2l0aW9ucyAqLwotCQkJaWYgKChjZmxhZyAmIENSVFNDVFMpICYmIGluZm8tPnJmbG93KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1DT1IxIDw8IGluZGV4KSwKLQkJCQkJICAoQ3lEU1IgfCBDeUNUUyB8IEN5UkkgfCBDeURDRCB8Ci0JCQkJCSAgIHJmbG93X3RocltpXSkpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjEgPDwgaW5kZXgpLAotCQkJCQkgIEN5RFNSIHwgQ3lDVFMgfCBDeVJJIHwgQ3lEQ0QpOwotCQkJfQotCQkJLyogYWN0IG9uIDAtPjEgbW9kZW0gdHJhbnNpdGlvbnMgKi8KLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNQ09SMiA8PCBpbmRleCksCi0JCQkJICBDeURTUiB8IEN5Q1RTIHwgQ3lSSSB8IEN5RENEKTsKLQkJfQorCQljZmxhZ3MgPSBDeUNUUzsKKwkJaWYgKCFDX0NMT0NBTCh0dHkpKQorCQkJY2ZsYWdzIHw9IEN5RFNSIHwgQ3lSSSB8IEN5RENEOworCQkvKiB3aXRob3V0IG1vZGVtIGludHIgKi8KKwkJY3l5X3dyaXRlYihpbmZvLCBDeVNSRVIsIGN5eV9yZWFkYihpbmZvLCBDeVNSRVIpIHwgQ3lNZG1DaCk7CisJCS8qIGFjdCBvbiAxLT4wIG1vZGVtIHRyYW5zaXRpb25zICovCisJCWlmICgoY2ZsYWcgJiBDUlRTQ1RTKSAmJiBpbmZvLT5yZmxvdykKKwkJCWN5eV93cml0ZWIoaW5mbywgQ3lNQ09SMSwgY2ZsYWdzIHwgcmZsb3dfdGhyW2ldKTsKKwkJZWxzZQorCQkJY3l5X3dyaXRlYihpbmZvLCBDeU1DT1IxLCBjZmxhZ3MpOworCQkvKiBhY3Qgb24gMC0+MSBtb2RlbSB0cmFuc2l0aW9ucyAqLworCQljeXlfd3JpdGViKGluZm8sIEN5TUNPUjIsIGNmbGFncyk7CiAKLQkJaWYgKGkgPT0gMCkgewkvKiBiYXVkIHJhdGUgaXMgemVybywgdHVybiBvZmYgbGluZSAqLwotCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAotCQkJCQkgIH5DeVJUUyk7Ci0JCQl9IGVsc2UgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksCi0JCQkJCSAgfkN5RFRSKTsKLQkJCX0KLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X2xpbmVfY2hhciBkcm9wcGluZyBEVFJcbiIpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCi0JCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKLQkJCQkJICBDeVJUUyk7Ci0JCQl9IGVsc2UgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksCi0JCQkJCSAgQ3lEVFIpOwotCQkJfQotI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbGluZV9jaGFyIHJhaXNpbmcgRFRSXG4iKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwotI2VuZGlmCi0JCX0KKwkJaWYgKGkgPT0gMCkJLyogYmF1ZCByYXRlIGlzIHplcm8sIHR1cm4gb2ZmIGxpbmUgKi8KKwkJCWN5eV9jaGFuZ2VfcnRzX2R0cihpbmZvLCAwLCBUSU9DTV9EVFIpOworCQllbHNlCisJCQljeXlfY2hhbmdlX3J0c19kdHIoaW5mbywgVElPQ01fRFRSLCAwKTsKIAotCQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCX0gZWxzZSB7Ci0JCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0JCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLQkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKKwkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybCA9IGluZm8tPnUuY3l6LmNoX2N0cmw7CiAJCV9fdTMyIHN3X2Zsb3c7CiAJCWludCByZXR2YWw7CiAKLQkJZmlybV9pZCA9IGNhcmQtPmJhc2VfYWRkciArIElEX0FERFJFU1M7CiAJCWlmICghY3l6X2lzX2xvYWRlZChjYXJkKSkKIAkJCXJldHVybjsKIAotCQl6ZndfY3RybCA9IGNhcmQtPmJhc2VfYWRkciArCi0JCQkocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQkJY2hfY3RybCA9ICYoemZ3X2N0cmwtPmNoX2N0cmxbY2hhbm5lbF0pOwotCiAJCS8qIGJhdWQgcmF0ZSAqLwotCQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHkpOworCQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKIAkJaWYgKGJhdWQgPT0gMzg0MDAgJiYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KIAkJCQlBU1lOQ19TUERfQ1VTVCkgewogCQkJaWYgKGluZm8tPmN1c3RvbV9kaXZpc29yKQpAQCAtMzMzNSw0NSArMjMzNywzOCBAQAogCQkJCSJ3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCX0KIAotCQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCX0KIH0JCQkJLyogc2V0X2xpbmVfY2hhciAqLwogCi1zdGF0aWMgaW50Ci1nZXRfc2VyaWFsX2luZm8oc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCitzdGF0aWMgaW50IGN5X2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKIAkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQogewotCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSBpbmZvLT5jYXJkOwotCi0JaWYgKCFyZXRpbmZvKQotCQlyZXR1cm4gLUVGQVVMVDsKLQltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCXRtcC50eXBlID0gaW5mby0+dHlwZTsKLQl0bXAubGluZSA9IGluZm8tPmxpbmU7Ci0JdG1wLnBvcnQgPSAoaW5mby0+Y2FyZCAtIGN5X2NhcmQpICogMHgxMDAgKyBpbmZvLT5saW5lIC0KLQkJY2luZm8tPmZpcnN0X2xpbmU7Ci0JdG1wLmlycSA9IGNpbmZvLT5pcnE7Ci0JdG1wLmZsYWdzID0gaW5mby0+cG9ydC5mbGFnczsKLQl0bXAuY2xvc2VfZGVsYXkgPSBpbmZvLT5wb3J0LmNsb3NlX2RlbGF5OwotCXRtcC5jbG9zaW5nX3dhaXQgPSBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdDsKLQl0bXAuYmF1ZF9iYXNlID0gaW5mby0+YmF1ZDsKLQl0bXAuY3VzdG9tX2Rpdmlzb3IgPSBpbmZvLT5jdXN0b21fZGl2aXNvcjsKLQl0bXAuaHViNiA9IDA7CQkvKiEhISAqLworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcCA9IHsKKwkJLnR5cGUgPSBpbmZvLT50eXBlLAorCQkubGluZSA9IGluZm8tPmxpbmUsCisJCS5wb3J0ID0gKGluZm8tPmNhcmQgLSBjeV9jYXJkKSAqIDB4MTAwICsgaW5mby0+bGluZSAtCisJCQljaW5mby0+Zmlyc3RfbGluZSwKKwkJLmlycSA9IGNpbmZvLT5pcnEsCisJCS5mbGFncyA9IGluZm8tPnBvcnQuZmxhZ3MsCisJCS5jbG9zZV9kZWxheSA9IGluZm8tPnBvcnQuY2xvc2VfZGVsYXksCisJCS5jbG9zaW5nX3dhaXQgPSBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCwKKwkJLmJhdWRfYmFzZSA9IGluZm8tPmJhdWQsCisJCS5jdXN0b21fZGl2aXNvciA9IGluZm8tPmN1c3RvbV9kaXZpc29yLAorCQkuaHViNiA9IDAsCQkvKiEhISAqLworCX07CiAJcmV0dXJuIGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YoKnJldGluZm8pKSA/IC1FRkFVTFQgOiAwOwotfQkJCQkvKiBnZXRfc2VyaWFsX2luZm8gKi8KK30KIAogc3RhdGljIGludAotc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAorY3lfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19pbmZvKQogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgb2xkX2luZm87CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsIG5ld19pbmZvLCBzaXplb2YobmV3X3NlcmlhbCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlvbGRfaW5mbyA9ICppbmZvOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CiAJCWlmIChuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICE9IGluZm8tPnBvcnQuY2xvc2VfZGVsYXkgfHwKQEAgLTM0MDMsMTAgKzIzOTgsMTAgQEAKIAogY2hlY2tfYW5kX2V4aXQ6CiAJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewotCQlzZXRfbGluZV9jaGFyKGluZm8pOworCQljeV9zZXRfbGluZV9jaGFyKGluZm8sIHR0eSk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCXJldHVybiBzdGFydHVwKGluZm8pOworCQlyZXR1cm4gY3lfc3RhcnR1cChpbmZvLCB0dHkpOwogCX0KIH0JCQkJLyogc2V0X3NlcmlhbF9pbmZvICovCiAKQEAgLTM0MjIsMjQgKzI0MTcsMTQgQEAKICAqLwogc3RhdGljIGludCBnZXRfbHNyX2luZm8oc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKLQl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IGluZm8tPmNhcmQ7CiAJdW5zaWduZWQgaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCXU4IHN0YXR1czsKIAotCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY2FyZC0+Zmlyc3RfbGluZSk7CiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQlzdGF0dXMgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgotCQkJCShDeVR4UmR5IHwgQ3lUeE1wdHkpOworCQlzdGF0dXMgPSBjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSAmIChDeVR4UmR5IHwgQ3lUeE1wdHkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJcmVzdWx0ID0gKHN0YXR1cyA/IDAgOiBUSU9DU0VSX1RFTVQpOwogCX0gZWxzZSB7CkBAIC0zNDUzLDM0ICsyNDM4LDIzIEBACiB7CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgbHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0OwotCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0Jc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0Jc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKKwlpbnQgcmVzdWx0OwogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsIF9fZnVuY19fKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlsb2NrX2tlcm5lbCgpOwotCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOworCisJbG9ja19rZXJuZWwoKTsKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJaW50IGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwkJdTggc3RhdHVzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwotCQlzdGF0dXMgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpOwotCQlzdGF0dXMgfD0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCAmIDB4MDMpOworCQlzdGF0dXMgPSBjeXlfcmVhZGIoaW5mbywgQ3lNU1ZSMSk7CisJCXN0YXR1cyB8PSBjeXlfcmVhZGIoaW5mbywgQ3lNU1ZSMik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CkBAIC0zNDk1LDI3ICsyNDY5LDIyIEBACiAJCQkoKHN0YXR1cyAmIEN5RFNSKSA/IFRJT0NNX0RTUiA6IDApIHwKIAkJCSgoc3RhdHVzICYgQ3lDVFMpID8gVElPQ01fQ1RTIDogMCk7CiAJfSBlbHNlIHsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyOwotCQlmaXJtX2lkID0gY2FyZC0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQkJaWYgKGN5el9pc19sb2FkZWQoY2FyZCkpIHsKLQkJCXpmd19jdHJsID0gY2FyZC0+YmFzZV9hZGRyICsKLQkJCQkocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQkJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0JCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0JCQlsc3RhdHVzID0gcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfc3RhdHVzKTsKLQkJCXJlc3VsdCA9ICgobHN0YXR1cyAmIENfUlNfUlRTKSA/IFRJT0NNX1JUUyA6IDApIHwKLQkJCQkoKGxzdGF0dXMgJiBDX1JTX0RUUikgPyBUSU9DTV9EVFIgOiAwKSB8Ci0JCQkJKChsc3RhdHVzICYgQ19SU19EQ0QpID8gVElPQ01fQ0FSIDogMCkgfAotCQkJCSgobHN0YXR1cyAmIENfUlNfUkkpID8gVElPQ01fUk5HIDogMCkgfAotCQkJCSgobHN0YXR1cyAmIENfUlNfRFNSKSA/IFRJT0NNX0RTUiA6IDApIHwKLQkJCQkoKGxzdGF0dXMgJiBDX1JTX0NUUykgPyBUSU9DTV9DVFMgOiAwKTsKLQkJfSBlbHNlIHsKLQkJCXJlc3VsdCA9IDA7Ci0JCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJdTMyIGxzdGF0dXM7CisKKwkJaWYgKCFjeXpfaXNfbG9hZGVkKGNhcmQpKSB7CisJCQlyZXN1bHQgPSAtRU5PREVWOworCQkJZ290byBlbmQ7CiAJCX0KIAorCQlsc3RhdHVzID0gcmVhZGwoJmluZm8tPnUuY3l6LmNoX2N0cmwtPnJzX3N0YXR1cyk7CisJCXJlc3VsdCA9ICgobHN0YXR1cyAmIENfUlNfUlRTKSA/IFRJT0NNX1JUUyA6IDApIHwKKwkJCSgobHN0YXR1cyAmIENfUlNfRFRSKSA/IFRJT0NNX0RUUiA6IDApIHwKKwkJCSgobHN0YXR1cyAmIENfUlNfRENEKSA/IFRJT0NNX0NBUiA6IDApIHwKKwkJCSgobHN0YXR1cyAmIENfUlNfUkkpID8gVElPQ01fUk5HIDogMCkgfAorCQkJKChsc3RhdHVzICYgQ19SU19EU1IpID8gVElPQ01fRFNSIDogMCkgfAorCQkJKChsc3RhdHVzICYgQ19SU19DVFMpID8gVElPQ01fQ1RTIDogMCk7CiAJfQorZW5kOgogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmVzdWx0OwogfQkJCQkvKiBjeV90aW9tZ2V0ICovCkBAIC0zNTI2LDE1MCArMjQ5NSw1MyBAQAogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7Ci0JaW50IHJldHZhbDsKIAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCBfX2Z1bmNfXykpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjYXJkLT5maXJzdF9saW5lKTsKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCQljeXlfY2hhbmdlX3J0c19kdHIoaW5mbywgc2V0LCBjbGVhcik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmwgPSBpbmZvLT51LmN5ei5jaF9jdHJsOworCQlpbnQgcmV0dmFsLCBjaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CisJCXUzMiByczsKIAotCQlpZiAoc2V0ICYgVElPQ01fUlRTKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwotCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIEN5RFRSKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKLQkJCQkJICBDeVJUUyk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJfQotCQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAotCQkJCSAgKHVfY2hhcikgY2hhbm5lbCk7Ci0JCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksCi0JCQkJCSAgfkN5RFRSKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKLQkJCQkJICB+Q3lSVFMpOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCX0KKwkJaWYgKCFjeXpfaXNfbG9hZGVkKGNhcmQpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCQlycyA9IHJlYWRsKCZjaF9jdHJsLT5yc19jb250cm9sKTsKKwkJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJCXJzIHw9IENfUlNfUlRTOworCQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCQlycyAmPSB+Q19SU19SVFM7CiAJCWlmIChzZXQgJiBUSU9DTV9EVFIpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAotCQkJCSAgKHVfY2hhcikgY2hhbm5lbCk7Ci0JCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgQ3lSVFMpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIEN5RFRSKTsKLQkJCX0KKwkJCXJzIHw9IENfUlNfRFRSOwogI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbW9kZW1faW5mbyByYWlzaW5nIERUUlxuIik7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gcmFpc2luZyBaIERUUlxuIik7CiAjZW5kaWYKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9CiAJCWlmIChjbGVhciAmIFRJT0NNX0RUUikgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCi0JCQkJICAodV9jaGFyKSBjaGFubmVsKTsKLQkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKLQkJCQkJICB+Q3lSVFMpOwotCQkJfSBlbHNlIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIH5DeURUUik7Ci0JCQl9Ci0KKwkJCXJzICY9IH5DX1JTX0RUUjsKICNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gZHJvcHBpbmcgRFRSXG4iKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbW9kZW1faW5mbyBjbGVhcmluZyAiCisJCQkJIlogRFRSXG4iKTsKICNlbmRpZgotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCX0KLQl9IGVsc2UgewotCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHI7Ci0KLQkJZmlybV9pZCA9IGNhcmQtPmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCWlmIChjeXpfaXNfbG9hZGVkKGNhcmQpKSB7Ci0JCQl6ZndfY3RybCA9IGNhcmQtPmJhc2VfYWRkciArCi0JCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCQkJY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOwotCi0JCQlpZiAoc2V0ICYgVElPQ01fUlRTKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotCQkJCQlyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSB8Ci0JCQkJCUNfUlNfUlRTKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCX0KLQkJCWlmIChjbGVhciAmIFRJT0NNX1JUUykgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCQkJcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgJgotCQkJCQl+Q19SU19SVFMpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJfQotCQkJaWYgKHNldCAmIFRJT0NNX0RUUikgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCQkJcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgfAotCQkJCQlDX1JTX0RUUik7Ci0jaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbW9kZW1faW5mbyByYWlzaW5nICIKLQkJCQkJIlogRFRSXG4iKTsKLSNlbmRpZgotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJfQotCQkJaWYgKGNsZWFyICYgVElPQ01fRFRSKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotCQkJCQlyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSAmCi0JCQkJCX5DX1JTX0RUUik7Ci0jaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbW9kZW1faW5mbyBjbGVhcmluZyAiCi0JCQkJCSJaIERUUlxuIik7Ci0jZW5kaWYKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwkJY3lfd3JpdGVsKCZjaF9jdHJsLT5yc19jb250cm9sLCBycyk7CiAJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwgY2hhbm5lbCwgQ19DTV9JT0NUTE0sIDBMKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6c2V0X21vZGVtX2luZm8gcmV0dmFsIG9uIHR0eUMlZCAiCiAJCQkJIndhcyAleFxuIiwgaW5mby0+bGluZSwgcmV0dmFsKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7Ci19CQkJCS8qIGN5X3Rpb2Ntc2V0ICovCit9CiAKIC8qCiAgKiBjeV9icmVhaygpIC0tLSByb3V0aW5lIHdoaWNoIHR1cm5zIHRoZSBicmVhayBoYW5kbGluZyBvbiBvciBvZmYKQEAgLTM3MzQsNDEgKzI2MDYsMTggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQkJCQkvKiBjeV9icmVhayAqLwogCi1zdGF0aWMgaW50IGdldF9tb25faW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKLQkJCQlzdHJ1Y3QgY3ljbGFkZXNfbW9uaXRvciBfX3VzZXIgKm1vbikKLXsKLQotCWlmIChjb3B5X3RvX3VzZXIobW9uLCAmaW5mby0+bW9uLCBzaXplb2Yoc3RydWN0IGN5Y2xhZGVzX21vbml0b3IpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaW5mby0+bW9uLmludF9jb3VudCA9IDA7Ci0JaW5mby0+bW9uLmNoYXJfY291bnQgPSAwOwotCWluZm8tPm1vbi5jaGFyX21heCA9IDA7Ci0JaW5mby0+bW9uLmNoYXJfbGFzdCA9IDA7Ci0JcmV0dXJuIDA7Ci19CQkJCS8qIGdldF9tb25faW5mbyAqLwotCiBzdGF0aWMgaW50IHNldF90aHJlc2hvbGQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoYW5uZWwsIGNoaXAsIGluZGV4OworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkID0gaW5mby0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCWlmICghY3lfaXNfWihjYXJkKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQliYXNlX2FkZHIgPQotCQkgICAgY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQogCQlpbmZvLT5jb3IzICY9IH5DeVJFQ19GSUZPOwogCQlpbmZvLT5jb3IzIHw9IHZhbHVlICYgQ3lSRUNfRklGTzsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDT1IzIDw8IGluZGV4KSwgaW5mby0+Y29yMyk7Ci0JCWN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLCBDeUNPUl9DSEFOR0UgfCBDeUNPUjNjaCwgaW5kZXgpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q09SMywgaW5mby0+Y29yMyk7CisJCWN5eV9pc3N1ZV9jbWQoaW5mbywgQ3lDT1JfQ0hBTkdFIHwgQ3lDT1IzY2gpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zNzc3LDU1ICsyNjI2LDIzIEBACiBzdGF0aWMgaW50IGdldF90aHJlc2hvbGQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCiAJCQkJCQl1bnNpZ25lZCBsb25nIF9fdXNlciAqdmFsdWUpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoYW5uZWwsIGNoaXAsIGluZGV4OwotCXVuc2lnbmVkIGxvbmcgdG1wOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkID0gaW5mby0+Y2FyZDsKIAotCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQotCQl0bXAgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDT1IzIDw8IGluZGV4KSkgJiBDeVJFQ19GSUZPOworCQl1OCB0bXAgPSBjeXlfcmVhZGIoaW5mbywgQ3lDT1IzKSAmIEN5UkVDX0ZJRk87CiAJCXJldHVybiBwdXRfdXNlcih0bXAsIHZhbHVlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CQkJCS8qIGdldF90aHJlc2hvbGQgKi8KIAotc3RhdGljIGludCBzZXRfZGVmYXVsdF90aHJlc2hvbGQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCQkJCQkJdW5zaWduZWQgbG9uZyB2YWx1ZSkKLXsKLQlpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCA9IHZhbHVlICYgMHgwZjsKLQlyZXR1cm4gMDsKLX0JCQkJLyogc2V0X2RlZmF1bHRfdGhyZXNob2xkICovCi0KLXN0YXRpYyBpbnQgZ2V0X2RlZmF1bHRfdGhyZXNob2xkKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAotCQkJCQkJdW5zaWduZWQgbG9uZyBfX3VzZXIgKnZhbHVlKQotewotCXJldHVybiBwdXRfdXNlcihpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCwgdmFsdWUpOwotfQkJCQkvKiBnZXRfZGVmYXVsdF90aHJlc2hvbGQgKi8KLQogc3RhdGljIGludCBzZXRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hhbm5lbCwgY2hpcCwgaW5kZXg7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQgPSBpbmZvLT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UlRQUiA8PCBpbmRleCksIHZhbHVlICYgMHhmZik7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lSVFBSLCB2YWx1ZSAmIDB4ZmYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zODM0LDM2ICsyNjUxLDM1IEBACiBzdGF0aWMgaW50IGdldF90aW1lb3V0KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAogCQkJCQkJdW5zaWduZWQgbG9uZyBfX3VzZXIgKnZhbHVlKQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGFubmVsLCBjaGlwLCBpbmRleDsKLQl1bnNpZ25lZCBsb25nIHRtcDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZCA9IGluZm8tPmNhcmQ7CiAKLQljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CiAJaWYgKCFjeV9pc19aKGNhcmQpKSB7Ci0JCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7Ci0KLQkJdG1wID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5UlRQUiA8PCBpbmRleCkpOworCQl1OCB0bXAgPSBjeXlfcmVhZGIoaW5mbywgQ3lSVFBSKTsKIAkJcmV0dXJuIHB1dF91c2VyKHRtcCwgdmFsdWUpOwogCX0KIAlyZXR1cm4gMDsKIH0JCQkJLyogZ2V0X3RpbWVvdXQgKi8KIAotc3RhdGljIGludCBzZXRfZGVmYXVsdF90aW1lb3V0KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIHZhbHVlKQorc3RhdGljIGludCBjeV9jZmxhZ3NfY2hhbmdlZChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgbG9uZyBhcmcsCisJCXN0cnVjdCBjeWNsYWRlc19pY291bnQgKmNwcmV2KQogewotCWluZm8tPmRlZmF1bHRfdGltZW91dCA9IHZhbHVlICYgMHhmZjsKLQlyZXR1cm4gMDsKLX0JCQkJLyogc2V0X2RlZmF1bHRfdGltZW91dCAqLworCXN0cnVjdCBjeWNsYWRlc19pY291bnQgY25vdzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKLXN0YXRpYyBpbnQgZ2V0X2RlZmF1bHRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKLQkJCQkJdW5zaWduZWQgbG9uZyBfX3VzZXIgKnZhbHVlKQotewotCXJldHVybiBwdXRfdXNlcihpbmZvLT5kZWZhdWx0X3RpbWVvdXQsIHZhbHVlKTsKLX0JCQkJLyogZ2V0X2RlZmF1bHRfdGltZW91dCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwljbm93ID0gaW5mby0+aWNvdW50OwkvKiBhdG9taWMgY29weSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCisJcmV0ID0JKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi0+cm5nKSkgfHwKKwkJKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi0+ZHNyKSkgfHwKKwkJKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi0+ZGNkKSkgfHwKKwkJKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi0+Y3RzKSk7CisKKwkqY3ByZXYgPSBjbm93OworCisJcmV0dXJuIHJldDsKK30KIAogLyoKICAqIFRoaXMgcm91dGluZSBhbGxvd3MgdGhlIHR0eSBkcml2ZXIgdG8gaW1wbGVtZW50IGRldmljZS0KQEAgLTM4NzUsOCArMjY5MSw3IEBACiAJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgY3ljbGFkZXNfaWNvdW50IGNwcmV2LCBjbm93OwkvKiBrZXJuZWwgY291bnRlciB0ZW1wcyAqLwotCXN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0IF9fdXNlciAqcF9jdXNlcjsJLyogdXNlciBzcGFjZSAqLworCXN0cnVjdCBjeWNsYWRlc19pY291bnQgY25vdzsJLyoga2VybmVsIGNvdW50ZXIgdGVtcHMgKi8KIAlpbnQgcmV0X3ZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTM4OTIsNyArMjcwNywxMSBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENZR0VUTU9OOgotCQlyZXRfdmFsID0gZ2V0X21vbl9pbmZvKGluZm8sIGFyZ3ApOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLT5tb24sIHNpemVvZihpbmZvLT5tb24pKSkgeworCQkJcmV0X3ZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQltZW1zZXQoJmluZm8tPm1vbiwgMCwgc2l6ZW9mKGluZm8tPm1vbikpOwogCQlicmVhazsKIAljYXNlIENZR0VUVEhSRVNIOgogCQlyZXRfdmFsID0gZ2V0X3RocmVzaG9sZChpbmZvLCBhcmdwKTsKQEAgLTM5MDEsMTAgKzI3MjAsMTEgQEAKIAkJcmV0X3ZhbCA9IHNldF90aHJlc2hvbGQoaW5mbywgYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBDWUdFVERFRlRIUkVTSDoKLQkJcmV0X3ZhbCA9IGdldF9kZWZhdWx0X3RocmVzaG9sZChpbmZvLCBhcmdwKTsKKwkJcmV0X3ZhbCA9IHB1dF91c2VyKGluZm8tPmRlZmF1bHRfdGhyZXNob2xkLAorCQkJCSh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZ3ApOwogCQlicmVhazsKIAljYXNlIENZU0VUREVGVEhSRVNIOgotCQlyZXRfdmFsID0gc2V0X2RlZmF1bHRfdGhyZXNob2xkKGluZm8sIGFyZyk7CisJCWluZm8tPmRlZmF1bHRfdGhyZXNob2xkID0gYXJnICYgMHgwZjsKIAkJYnJlYWs7CiAJY2FzZSBDWUdFVFRJTUVPVVQ6CiAJCXJldF92YWwgPSBnZXRfdGltZW91dChpbmZvLCBhcmdwKTsKQEAgLTM5MTMsMjEgKzI3MzMsMjAgQEAKIAkJcmV0X3ZhbCA9IHNldF90aW1lb3V0KGluZm8sIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgQ1lHRVRERUZUSU1FT1VUOgotCQlyZXRfdmFsID0gZ2V0X2RlZmF1bHRfdGltZW91dChpbmZvLCBhcmdwKTsKKwkJcmV0X3ZhbCA9IHB1dF91c2VyKGluZm8tPmRlZmF1bHRfdGltZW91dCwKKwkJCQkodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmdwKTsKIAkJYnJlYWs7CiAJY2FzZSBDWVNFVERFRlRJTUVPVVQ6Ci0JCXJldF92YWwgPSBzZXRfZGVmYXVsdF90aW1lb3V0KGluZm8sIGFyZyk7CisJCWluZm8tPmRlZmF1bHRfdGltZW91dCA9IGFyZyAmIDB4ZmY7CiAJCWJyZWFrOwogCWNhc2UgQ1lTRVRSRkxPVzoKIAkJaW5mby0+cmZsb3cgPSAoaW50KWFyZzsKLQkJcmV0X3ZhbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQ1lHRVRSRkxPVzoKIAkJcmV0X3ZhbCA9IGluZm8tPnJmbG93OwogCQlicmVhazsKIAljYXNlIENZU0VUUlRTRFRSX0lOVjoKIAkJaW5mby0+cnRzZHRyX2ludiA9IChpbnQpYXJnOwotCQlyZXRfdmFsID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBDWUdFVFJUU0RUUl9JTlY6CiAJCXJldF92YWwgPSBpbmZvLT5ydHNkdHJfaW52OwpAQCAtMzkzOCw3ICsyNzU3LDYgQEAKICNpZm5kZWYgQ09ORklHX0NZWl9JTlRSCiAJY2FzZSBDWVpTRVRQT0xMQ1lDTEU6CiAJCWN5el9wb2xsaW5nX2N5Y2xlID0gKGFyZyAqIEhaKSAvIDEwMDA7Ci0JCXJldF92YWwgPSAwOwogCQlicmVhazsKIAljYXNlIENZWkdFVFBPTExDWUNMRToKIAkJcmV0X3ZhbCA9IChjeXpfcG9sbGluZ19jeWNsZSAqIDEwMDApIC8gSFo7CkBAIC0zOTQ2LDE2ICsyNzY0LDE1IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAJY2FzZSBDWVNFVFdBSVQ6CiAJCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gKHVuc2lnbmVkIHNob3J0KWFyZyAqIEhaIC8gMTAwOwotCQlyZXRfdmFsID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBDWUdFVFdBSVQ6CiAJCXJldF92YWwgPSBpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCAvIChIWiAvIDEwMCk7CiAJCWJyZWFrOwogCWNhc2UgVElPQ0dTRVJJQUw6Ci0JCXJldF92YWwgPSBnZXRfc2VyaWFsX2luZm8oaW5mbywgYXJncCk7CisJCXJldF92YWwgPSBjeV9nZXRfc2VyaWFsX2luZm8oaW5mbywgYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgVElPQ1NTRVJJQUw6Ci0JCXJldF92YWwgPSBzZXRfc2VyaWFsX2luZm8oaW5mbywgYXJncCk7CisJCXJldF92YWwgPSBjeV9zZXRfc2VyaWFsX2luZm8oaW5mbywgdHR5LCBhcmdwKTsKIAkJYnJlYWs7CiAJY2FzZSBUSU9DU0VSR0VUTFNSOgkvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkJcmV0X3ZhbCA9IGdldF9sc3JfaW5mbyhpbmZvLCBhcmdwKTsKQEAgLTM5NzEsMTcgKzI3ODgsOCBAQAogCQkvKiBub3RlIHRoZSBjb3VudGVycyBvbiBlbnRyeSAqLwogCQljbm93ID0gaW5mby0+aWNvdW50OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJcmV0X3ZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbmZvLT5kZWx0YV9tc3Jfd2FpdCwgKHsKLQkJCWNwcmV2ID0gY25vdzsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQkJCWNub3cgPSBpbmZvLT5pY291bnQ7CS8qIGF0b21pYyBjb3B5ICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQotCQkJKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAotCQkJKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAotCQkJKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAotCQkJKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKTsKLQkJfSkpOworCQlyZXRfdmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPnBvcnQuZGVsdGFfbXNyX3dhaXQsCisJCQkJY3lfY2ZsYWdzX2NoYW5nZWQoaW5mbywgYXJnLCAmY25vdykpOwogCQlicmVhazsKIAogCQkvKgpAQCAtMzk5MCw0NiArMjc5OCwyOSBAQAogCQkgKiBOQjogYm90aCAxLT4wIGFuZCAwLT4xIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3IKIAkJICogICAgIFJJIHdoZXJlIG9ubHkgMC0+MSBpcyBjb3VudGVkLgogCQkgKi8KLQljYXNlIFRJT0NHSUNPVU5UOgorCWNhc2UgVElPQ0dJQ09VTlQ6IHsKKwkJc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3Qgc2ljID0geyB9OworCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJY25vdyA9IGluZm8tPmljb3VudDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCXBfY3VzZXIgPSBhcmdwOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5jdHMsICZwX2N1c2VyLT5jdHMpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5kc3IsICZwX2N1c2VyLT5kc3IpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5ybmcsICZwX2N1c2VyLT5ybmcpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5kY2QsICZwX2N1c2VyLT5kY2QpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5yeCwgJnBfY3VzZXItPnJ4KTsKLQkJaWYgKHJldF92YWwpCi0JCQlicmVhazsKLQkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cudHgsICZwX2N1c2VyLT50eCk7Ci0JCWlmIChyZXRfdmFsKQotCQkJYnJlYWs7Ci0JCXJldF92YWwgPSBwdXRfdXNlcihjbm93LmZyYW1lLCAmcF9jdXNlci0+ZnJhbWUpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5vdmVycnVuLCAmcF9jdXNlci0+b3ZlcnJ1bik7Ci0JCWlmIChyZXRfdmFsKQotCQkJYnJlYWs7Ci0JCXJldF92YWwgPSBwdXRfdXNlcihjbm93LnBhcml0eSwgJnBfY3VzZXItPnBhcml0eSk7Ci0JCWlmIChyZXRfdmFsKQotCQkJYnJlYWs7Ci0JCXJldF92YWwgPSBwdXRfdXNlcihjbm93LmJyaywgJnBfY3VzZXItPmJyayk7Ci0JCWlmIChyZXRfdmFsKQotCQkJYnJlYWs7Ci0JCXJldF92YWwgPSBwdXRfdXNlcihjbm93LmJ1Zl9vdmVycnVuLCAmcF9jdXNlci0+YnVmX292ZXJydW4pOwotCQlpZiAocmV0X3ZhbCkKLQkJCWJyZWFrOwotCQlyZXRfdmFsID0gMDsKKworCQlzaWMuY3RzID0gY25vdy5jdHM7CisJCXNpYy5kc3IgPSBjbm93LmRzcjsKKwkJc2ljLnJuZyA9IGNub3cucm5nOworCQlzaWMuZGNkID0gY25vdy5kY2Q7CisJCXNpYy5yeCA9IGNub3cucng7CisJCXNpYy50eCA9IGNub3cudHg7CisJCXNpYy5mcmFtZSA9IGNub3cuZnJhbWU7CisJCXNpYy5vdmVycnVuID0gY25vdy5vdmVycnVuOworCQlzaWMucGFyaXR5ID0gY25vdy5wYXJpdHk7CisJCXNpYy5icmsgPSBjbm93LmJyazsKKwkJc2ljLmJ1Zl9vdmVycnVuID0gY25vdy5idWZfb3ZlcnJ1bjsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZzaWMsIHNpemVvZihzaWMpKSkKKwkJCXJldF92YWwgPSAtRUZBVUxUOwogCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJcmV0X3ZhbCA9IC1FTk9JT0NUTENNRDsKIAl9CkBAIC00MDU1LDcgKzI4NDYsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfc2V0X3Rlcm1pb3MgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCi0Jc2V0X2xpbmVfY2hhcihpbmZvKTsKKwljeV9zZXRfbGluZV9jaGFyKGluZm8sIHR0eSk7CiAKIAlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKIAkJCSEodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykpIHsKQEAgLTQxMTIsOCArMjkwMyw2IEBACiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OwogCiAjaWZkZWYgQ1lfREVCVUdfVEhST1RUTEUKIAljaGFyIGJ1Zls2NF07CkBAIC00MTM1LDI0ICsyOTI0LDkgQEAKIAl9CiAKIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewotCQljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CiAJCWlmICghY3lfaXNfWihjYXJkKSkgewotCQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJCWNoYW5uZWwgJj0gMHgwMzsKLQkJCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwotCQkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsKLQkJCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwotCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAotCQkJCQkgIH5DeURUUik7Ci0JCQl9IGVsc2UgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgfkN5UlRTKTsKLQkJCX0KKwkJCWN5eV9jaGFuZ2VfcnRzX2R0cihpbmZvLCAwLCBUSU9DTV9SVFMpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCX0gZWxzZSB7CiAJCQlpbmZvLT50aHJvdHRsZSA9IDE7CkBAIC00MTcwLDggKzI5NDQsNiBAQAogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAogI2lmZGVmIENZX0RFQlVHX1RIUk9UVExFCiAJY2hhciBidWZbNjRdOwpAQCAtNDE5MiwyNCArMjk2NCw5IEBACiAKIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewogCQljYXJkID0gaW5mby0+Y2FyZDsKLQkJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCQlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKLQkJCWNoaXAgPSBjaGFubmVsID4+IDI7Ci0JCQljaGFubmVsICY9IDB4MDM7Ci0JCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKLQkJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArCi0JCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCi0JCQkJICAodV9jaGFyKSBjaGFubmVsKTsKLQkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKLQkJCQkJICBDeURUUik7Ci0JCQl9IGVsc2UgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCi0JCQkJCSAgQ3lSVFMpOwotCQkJfQorCQkJY3l5X2NoYW5nZV9ydHNfZHRyKGluZm8sIFRJT0NNX1JUUywgMCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJfSBlbHNlIHsKIAkJCWluZm8tPnRocm90dGxlID0gMDsKQEAgLTQyMjQsOCArMjk4MSw3IEBACiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOwogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoYW5uZWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogI2lmZGVmIENZX0RFQlVHX09USEVSCkBAIC00MjM4LDE2ICsyOTk0LDkgQEAKIAljaW5mbyA9IGluZm8tPmNhcmQ7CiAJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKIAlpZiAoIWN5X2lzX1ooY2luZm8pKSB7Ci0JCWluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKLQkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKLQkJY2hhbm5lbCAmPSAweDAzOwotCQliYXNlX2FkZHIgPSBjaW5mby0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKLQkJCSh1X2NoYXIpKGNoYW5uZWwgJiAweDAwMDMpKTsgLyogaW5kZXggY2hhbm5lbCAqLwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkgIHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIH5DeVR4UmR5KTsKKwkJY3l5X3dyaXRlYihpbmZvLCBDeUNBUiwgY2hhbm5lbCAmIDB4MDMpOworCQljeXlfd3JpdGViKGluZm8sIEN5U1JFUiwgY3l5X3JlYWRiKGluZm8sIEN5U1JFUikgJiB+Q3lUeFJkeSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiB9CQkJCS8qIGN5X3N0b3AgKi8KQEAgLTQyNTYsOCArMzAwNSw3IEBACiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOwogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoYW5uZWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogI2lmZGVmIENZX0RFQlVHX09USEVSCkBAIC00MjY5LDE3ICszMDE3LDEwIEBACiAKIAljaW5mbyA9IGluZm8tPmNhcmQ7CiAJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKLQlpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CiAJaWYgKCFjeV9pc19aKGNpbmZvKSkgewotCQljaGlwID0gY2hhbm5lbCA+PiAyOwotCQljaGFubmVsICY9IDB4MDM7Ci0JCWJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAotCQkJKHVfY2hhcikgKGNoYW5uZWwgJiAweDAwMDMpKTsJLyogaW5kZXggY2hhbm5lbCAqLwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkgIHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5VHhSZHkpOworCQljeXlfd3JpdGViKGluZm8sIEN5Q0FSLCBjaGFubmVsICYgMHgwMyk7CisJCWN5eV93cml0ZWIoaW5mbywgQ3lTUkVSLCBjeXlfcmVhZGIoaW5mbywgQ3lTUkVSKSB8IEN5VHhSZHkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogfQkJCQkvKiBjeV9zdGFydCAqLwpAQCAtNDI5OSwxNyArMzA0MCw4NCBAQAogCQlyZXR1cm47CiAKIAljeV9mbHVzaF9idWZmZXIodHR5KTsKLQlzaHV0ZG93bihpbmZvKTsKLQlpbmZvLT5wb3J0LmNvdW50ID0gMDsKLSNpZmRlZiBDWV9ERUJVR19DT1VOVAotCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfaGFuZ3VwICglZCk6IHNldHRpbmcgY291bnQgdG8gMFxuIiwKLQkJY3VycmVudC0+cGlkKTsKLSNlbmRpZgotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKLQlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOworCWN5X3NodXRkb3duKGluZm8sIHR0eSk7CisJdHR5X3BvcnRfaGFuZ3VwKCZpbmZvLT5wb3J0KTsKIH0JCQkJLyogY3lfaGFuZ3VwICovCiAKK3N0YXRpYyBpbnQgY3l5X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCwKKwkJCXBvcnQpOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKKwl1MzIgY2Q7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOworCWN5eV93cml0ZWIoaW5mbywgQ3lDQVIsIGNoYW5uZWwgJiAweDAzKTsKKwljZCA9IGN5eV9yZWFkYihpbmZvLCBDeU1TVlIxKSAmIEN5RENEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjZDsKK30KKworc3RhdGljIHZvaWQgY3l5X2R0cl9ydHMoc3RydWN0IHR0eV9wb3J0ICpwb3J0LCBpbnQgcmFpc2UpCit7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGN5Y2xhZGVzX3BvcnQsCisJCQlwb3J0KTsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSBpbmZvLT5jYXJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOworCWN5eV9jaGFuZ2VfcnRzX2R0cihpbmZvLCByYWlzZSA/IFRJT0NNX1JUUyB8IFRJT0NNX0RUUiA6IDAsCisJCQlyYWlzZSA/IDAgOiBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjeXpfY2Fycmllcl9yYWlzZWQoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBjeWNsYWRlc19wb3J0LAorCQkJcG9ydCk7CisKKwlyZXR1cm4gcmVhZGwoJmluZm8tPnUuY3l6LmNoX2N0cmwtPnJzX3N0YXR1cykgJiBDX1JTX0RDRDsKK30KKworc3RhdGljIHZvaWQgY3l6X2R0cl9ydHMoc3RydWN0IHR0eV9wb3J0ICpwb3J0LCBpbnQgcmFpc2UpCit7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGN5Y2xhZGVzX3BvcnQsCisJCQlwb3J0KTsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSBpbmZvLT5jYXJkOworCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmwgPSBpbmZvLT51LmN5ei5jaF9jdHJsOworCWludCByZXQsIGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2luZm8tPmZpcnN0X2xpbmU7CisJdTMyIHJzOworCisJcnMgPSByZWFkbCgmY2hfY3RybC0+cnNfY29udHJvbCk7CisJaWYgKHJhaXNlKQorCQlycyB8PSBDX1JTX1JUUyB8IENfUlNfRFRSOworCWVsc2UKKwkJcnMgJj0gfihDX1JTX1JUUyB8IENfUlNfRFRSKTsKKwljeV93cml0ZWwoJmNoX2N0cmwtPnJzX2NvbnRyb2wsIHJzKTsKKwlyZXQgPSBjeXpfaXNzdWVfY21kKGNpbmZvLCBjaGFubmVsLCBDX0NNX0lPQ1RMTSwgMEwpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCisJCQkJX19mdW5jX18sIGluZm8tPmxpbmUsIHJldCk7CisjaWZkZWYgQ1lfREVCVUdfRFRSCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByYWlzaW5nIFogRFRSXG4iLCBfX2Z1bmNfXyk7CisjZW5kaWYKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIGN5eV9wb3J0X29wcyA9IHsKKwkuY2Fycmllcl9yYWlzZWQgPSBjeXlfY2Fycmllcl9yYWlzZWQsCisJLmR0cl9ydHMgPSBjeXlfZHRyX3J0cywKKwkuc2h1dGRvd24gPSBjeV9kb19jbG9zZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBjeXpfcG9ydF9vcHMgPSB7CisJLmNhcnJpZXJfcmFpc2VkID0gY3l6X2NhcnJpZXJfcmFpc2VkLAorCS5kdHJfcnRzID0gY3l6X2R0cl9ydHMsCisJLnNodXRkb3duID0gY3lfZG9fY2xvc2UsCit9OworCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBjeV9pbml0KCkgYW5kIGZyaWVuZHMKQEAgLTQzMjEsOCArMzEyOSw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjeV9pbml0X2NhcmQoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvKQogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwotCXVuc2lnbmVkIGludCBwb3J0OwotCXVuc2lnbmVkIHNob3J0IGNoaXBfbnVtYmVyOworCXVuc2lnbmVkIGludCBjaGFubmVsLCBwb3J0OwogCiAJc3Bpbl9sb2NrX2luaXQoJmNpbmZvLT5jYXJkX2xvY2spOwogCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAwOwpAQCAtNDMzNCw5ICszMTQxLDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZm9yIChwb3J0ID0gY2luZm8tPmZpcnN0X2xpbmU7IHBvcnQgPCBjaW5mby0+Zmlyc3RfbGluZSArIGNpbmZvLT5ucG9ydHM7Ci0JCQlwb3J0KyspIHsKLQkJaW5mbyA9ICZjaW5mby0+cG9ydHNbcG9ydCAtIGNpbmZvLT5maXJzdF9saW5lXTsKKwlmb3IgKGNoYW5uZWwgPSAwLCBwb3J0ID0gY2luZm8tPmZpcnN0X2xpbmU7IGNoYW5uZWwgPCBjaW5mby0+bnBvcnRzOworCQkJY2hhbm5lbCsrLCBwb3J0KyspIHsKKwkJaW5mbyA9ICZjaW5mby0+cG9ydHNbY2hhbm5lbF07CiAJCXR0eV9wb3J0X2luaXQoJmluZm8tPnBvcnQpOwogCQlpbmZvLT5tYWdpYyA9IENZQ0xBREVTX01BR0lDOwogCQlpbmZvLT5jYXJkID0gY2luZm87CkBAIC00MzQ2LDEwICszMTUzLDE5IEBACiAJCWluZm8tPnBvcnQuY2xvc2VfZGVsYXkgPSA1ICogSFogLyAxMDsKIAkJaW5mby0+cG9ydC5mbGFncyA9IFNURF9DT01fRkxBR1M7CiAJCWluaXRfY29tcGxldGlvbigmaW5mby0+c2h1dGRvd25fd2FpdCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKIAogCQlpZiAoY3lfaXNfWihjaW5mbykpIHsKKwkJCXN0cnVjdCBGSVJNX0lEICpmaXJtX2lkID0gY2luZm8tPmJhc2VfYWRkciArIElEX0FERFJFU1M7CisJCQlzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOworCisJCQlpbmZvLT5wb3J0Lm9wcyA9ICZjeXpfcG9ydF9vcHM7CiAJCQlpbmZvLT50eXBlID0gUE9SVF9TVEFSVEVDSDsKKworCQkJemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsKKwkJCQkocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJCWluZm8tPnUuY3l6LmNoX2N0cmwgPSAmemZ3X2N0cmwtPmNoX2N0cmxbY2hhbm5lbF07CisJCQlpbmZvLT51LmN5ei5idWZfY3RybCA9ICZ6ZndfY3RybC0+YnVmX2N0cmxbY2hhbm5lbF07CisKIAkJCWlmIChjaW5mby0+aHdfdmVyID09IFpPX1YxKQogCQkJCWluZm8tPnhtaXRfZmlmb19zaXplID0gQ1laX0ZJRk9fU0laRTsKIAkJCWVsc2UKQEAgLTQzNTksMTcgKzMxNzUsMjAgQEAKIAkJCQljeXpfcnhfcmVzdGFydCwgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CiAjZW5kaWYKIAkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIHNob3J0IGNoaXBfbnVtYmVyOwogCQkJaW50IGluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKKworCQkJaW5mby0+cG9ydC5vcHMgPSAmY3l5X3BvcnRfb3BzOwogCQkJaW5mby0+dHlwZSA9IFBPUlRfQ0lSUlVTOwogCQkJaW5mby0+eG1pdF9maWZvX3NpemUgPSBDeU1BWF9DSEFSX0ZJRk87CiAJCQlpbmZvLT5jb3IxID0gQ3lQQVJJVFlfTk9ORSB8IEN5XzFfU1RPUCB8IEN5XzhfQklUUzsKIAkJCWluZm8tPmNvcjIgPSBDeUVUQzsKIAkJCWluZm8tPmNvcjMgPSAweDA4OwkvKiBfdmVyeV8gc21hbGwgcmN2IHRocmVzaG9sZCAqLwogCi0JCQljaGlwX251bWJlciA9IChwb3J0IC0gY2luZm8tPmZpcnN0X2xpbmUpIC8gNDsKLQkJCWluZm8tPmNoaXBfcmV2ID0gcmVhZGIoY2luZm8tPmJhc2VfYWRkciArCi0JCQkJICAgICAgKGN5X2NoaXBfb2Zmc2V0W2NoaXBfbnVtYmVyXSA8PCBpbmRleCkgKwotCQkJCSAgICAgIChDeUdGUkNSIDw8IGluZGV4KSk7CisJCQljaGlwX251bWJlciA9IGNoYW5uZWwgLyBDeVBPUlRTX1BFUl9DSElQOworCQkJaW5mby0+dS5jeXkuYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkciArCisJCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBfbnVtYmVyXSA8PCBpbmRleCk7CisJCQlpbmZvLT5jaGlwX3JldiA9IGN5eV9yZWFkYihpbmZvLCBDeUdGUkNSKTsKIAogCQkJaWYgKGluZm8tPmNoaXBfcmV2ID49IENEMTQwMF9SRVZfSikgewogCQkJCS8qIEl0IGlzIGEgQ0QxNDAwIHJldi4gSiBvciBsYXRlciAqLwpAQCAtNTA2MCw4ICszODc5LDE0IEBACiAJCX0KIAkJY3lfY2FyZFtjYXJkX25vXS5udW1fY2hpcHMgPSBuY2hhbiAvIEN5UE9SVFNfUEVSX0NISVA7CiAJfSBlbHNlIHsKKwkJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZCA9IGFkZHIyICsgSURfQUREUkVTUzsKKwkJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOworCisJCXpmd19jdHJsID0gYWRkcjIgKyAocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwogCQljeV9jYXJkW2NhcmRfbm9dLmh3X3ZlciA9IG1haWxib3g7CiAJCWN5X2NhcmRbY2FyZF9ub10ubnVtX2NoaXBzID0gKHVuc2lnbmVkIGludCktMTsKKwkJY3lfY2FyZFtjYXJkX25vXS5ib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwogI2lmZGVmIENPTkZJR19DWVpfSU5UUgogCQkvKiBhbGxvY2F0ZSBJUlEgb25seSBpZiBib2FyZCBoYXMgYW4gSVJRICovCiAJCWlmIChpcnEgIT0gMCAmJiBpcnEgIT0gMjU1KSB7CkBAIC01MTkxLDE4ICs0MDE2LDMwIEBACiAJCWZvciAoaiA9IDA7IGogPCBjeV9jYXJkW2ldLm5wb3J0czsgaisrKSB7CiAJCQlpbmZvID0gJmN5X2NhcmRbaV0ucG9ydHNbal07CiAKLQkJCWlmIChpbmZvLT5wb3J0LmNvdW50KQorCQkJaWYgKGluZm8tPnBvcnQuY291bnQpIHsKKwkJCQkvKiBYWFggaXMgdGhlIGxkaXNjIG51bSB3b3J0aCB0aGlzPyAqLworCQkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJCQkJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJCQkJaW50IG51bSA9IDA7CisJCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmaW5mby0+cG9ydCk7CisJCQkJaWYgKHR0eSkgeworCQkJCQlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwkJCQkJaWYgKGxkKSB7CisJCQkJCQludW0gPSBsZC0+b3BzLT5udW07CisJCQkJCQl0dHlfbGRpc2NfZGVyZWYobGQpOworCQkJCQl9CisJCQkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQkJCX0KIAkJCQlzZXFfcHJpbnRmKG0sICIlM2QgJThsdSAlMTBsdSAlOGx1ICIKLQkJCQkJIiUxMGx1ICU4bHUgJTlsdSAlNmxkXG4iLCBpbmZvLT5saW5lLAorCQkJCQkiJTEwbHUgJThsdSAlOWx1ICU2ZFxuIiwgaW5mby0+bGluZSwKIAkJCQkJKGN1cl9qaWZzIC0gaW5mby0+aWRsZV9zdGF0cy5pbl91c2UpIC8KIAkJCQkJSFosIGluZm8tPmlkbGVfc3RhdHMueG1pdF9ieXRlcywKIAkJCQkJKGN1cl9qaWZzIC0gaW5mby0+aWRsZV9zdGF0cy54bWl0X2lkbGUpLwogCQkJCQlIWiwgaW5mby0+aWRsZV9zdGF0cy5yZWN2X2J5dGVzLAogCQkJCQkoY3VyX2ppZnMgLSBpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSkvCiAJCQkJCUhaLCBpbmZvLT5pZGxlX3N0YXRzLm92ZXJydW5zLAotCQkJCQkvKiBGSVhNRTogZG91YmxlIGNoZWNrIGxvY2tpbmcgKi8KLQkJCQkJKGxvbmcpaW5mby0+cG9ydC50dHktPmxkaXNjLT5vcHMtPm51bSk7Ci0JCQllbHNlCisJCQkJCW51bSk7CisJCQl9IGVsc2UKIAkJCQlzZXFfcHJpbnRmKG0sICIlM2QgJThsdSAlMTBsdSAlOGx1ICIKIAkJCQkJIiUxMGx1ICU4bHUgJTlsdSAlNmxkXG4iLAogCQkJCQlpbmZvLT5saW5lLCAwTCwgMEwsIDBMLCAwTCwgMEwsIDBMLCAwTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZXBjYS5jIGIvZHJpdmVycy9jaGFyL2VwY2EuYwppbmRleCBmZjY0N2NhLi45ZDU4OWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZXBjYS5jCisrKyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKQEAgLTIyMzksNyArMjIzOSw3IEBACiAJc3RydWN0IGNoYW5uZWwgKmNoID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaGFubmVsLCB0cXVldWUpOwogCS8qIENhbGxlZCBpbiByZXNwb25zZSB0byBhIG1vZGVtIGNoYW5nZSBldmVudCAqLwogCWlmIChjaCAmJiBjaC0+bWFnaWMgPT0gRVBDQV9NQUdJQykgewotCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmY2gtPnBvcnQpOzsKKwkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmNoLT5wb3J0KTsKIAogCQlpZiAodHR5ICYmIHR0eS0+ZHJpdmVyX2RhdGEpIHsKIAkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRVBDQV9FVkVOVF9IQU5HVVAsICZjaC0+ZXZlbnQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZXNwLmMgYi9kcml2ZXJzL2NoYXIvZXNwLmMKaW5kZXggYTVjNTlmYy4uYjE5ZDQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VzcC5jCisrKyBiL2RyaXZlcnMvY2hhci9lc3AuYwpAQCAtNTcyLDcgKzU3Miw3IEBACiAJCQlpbmZvLT5pY291bnQuZGNkKys7CiAJCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ1RTKQogCQkJaW5mby0+aWNvdW50LmN0cysrOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAl9CiAKIAlpZiAoKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgJiYgKHN0YXR1cyAmIFVBUlRfTVNSX0REQ0QpKSB7CkBAIC05MjcsNyArOTI3LDcgQEAKIAkgKiBjbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3M6IHdlIG1heSBmcmVlIHRoZSBpcnEKIAkgKiBoZXJlIHNvIHRoZSBxdWV1ZSBtaWdodCBuZXZlciBiZSB3YWtlbiB1cAogCSAqLwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5icmVha193YWl0KTsKIAogCS8qIHN0b3AgYSBETUEgdHJhbnNmZXIgb24gdGhlIHBvcnQgYmVpbmcgY2xvc2VkICovCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJCXdoaWxlICgxKSB7CiAJCQkvKiBGSVhNRTogY29udmVydCB0byBuZXcgc3R5bGUgd2FrZXVwICovCi0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwpAQCAtMjQ1Miw3ICsyNDUyLDYgQEAKIAkJaW5mby0+Y29uZmlnLmZsb3dfb2ZmID0gZmxvd19vZmY7CiAJCWluZm8tPmNvbmZpZy5waW9fdGhyZXNob2xkID0gcGlvX3RocmVzaG9sZDsKIAkJaW5mby0+bmV4dF9wb3J0ID0gcG9ydHM7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+YnJlYWtfd2FpdCk7CiAJCXBvcnRzID0gaW5mbzsKIAkJcHJpbnRrKEtFUk5fSU5GTyAidHR5UCVkIGF0IDB4JTA0eCAoaXJxID0gJWQpIGlzIGFuIEVTUCAiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwppbmRleCBmYzkzZTJmLi4xNTczYWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugcm5nX21pc2NkZXYgPSB7CiAJLm1pbm9yCQk9IFJOR19NSVNDREVWX01JTk9SLAogCS5uYW1lCQk9IFJOR19NT0RVTEVfTkFNRSwKLQkuZGV2bm9kZQk9ICJod3JuZyIsCisJLm5vZGVuYW1lCT0gImh3cm5nIiwKIAkuZm9wcwkJPSAmcm5nX2NocmRldl9vcHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCmluZGV4IDMyMjE2YjYuLjk2Mjk2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcm5nLmg+CiAKIC8qIFRoZSBob3N0IHdpbGwgZmlsbCBhbnkgYnVmZmVyIHdlIGdpdmUgaXQgd2l0aCBzd2VldCwgc3dlZXQgcmFuZG9tbmVzcy4gIFdlCkBAIC01MSw3ICs1Miw3IEBACiAKIAlzZ19pbml0X29uZSgmc2csIHJhbmRvbV9kYXRhK2RhdGFfbGVmdCwgUkFORE9NX0RBVEFfU0laRS1kYXRhX2xlZnQpOwogCS8qIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgcm9vbSBmb3Igb25lIGJ1ZmZlci4gKi8KLQlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgJnNnLCAwLCAxLCByYW5kb21fZGF0YSkgIT0gMCkKKwlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgJnNnLCAwLCAxLCByYW5kb21fZGF0YSkgPCAwKQogCQlCVUcoKTsKIAl2cS0+dnFfb3BzLT5raWNrKHZxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYwppbmRleCBhMjYxYmQ3Li4yZTY2YjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCkBAIC02OTEsNyArNjkxLDcgQEAKIC8qCiAgKiBTdGFydHVwIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuCiAgKi8KLXN0YXRpYyBpbnQgaXBtaV9wb3dlcm9mZl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpcG1pX3Bvd2Vyb2ZmX2luaXQodm9pZCkKIHsKIAlpbnQgcnY7CiAKQEAgLTcyNSw3ICs3MjUsNyBAQAogfQogCiAjaWZkZWYgTU9EVUxFCi1zdGF0aWMgX19leGl0IHZvaWQgaXBtaV9wb3dlcm9mZl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaXBtaV9wb3dlcm9mZl9jbGVhbnVwKHZvaWQpCiB7CiAJaW50IHJ2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXNpY29tLmMgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKaW5kZXggNGYxZjRjZC4uNDI2YmZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pc2ljb20uYwpAQCAtODQ2LDM3ICs4NDYsNTMgQEAKIAlyZXR1cm4gKGlwLT5zdGF0dXMgJiBJU0lfRENEKT8xIDogMDsKIH0KIAotc3RhdGljIGludCBpc2ljb21fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBzdHJ1Y3QgdHR5X3BvcnQgKmlzaWNvbV9maW5kX3BvcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgaXNpX3BvcnQgKnBvcnQ7CiAJc3RydWN0IGlzaV9ib2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBpbnQgYm9hcmQ7Ci0JaW50IGVycm9yLCBsaW5lOworCWludCBsaW5lID0gdHR5LT5pbmRleDsKIAotCWxpbmUgPSB0dHktPmluZGV4OwogCWlmIChsaW5lIDwgMCB8fCBsaW5lID4gUE9SVF9DT1VOVC0xKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIE5VTEw7CiAJYm9hcmQgPSBCT0FSRChsaW5lKTsKIAljYXJkID0gJmlzaV9jYXJkW2JvYXJkXTsKIAogCWlmICghKGNhcmQtPnN0YXR1cyAmIEZJUk1XQVJFX0xPQURFRCkpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gTlVMTDsKIAogCS8qICBvcGVuIG9uIGEgcG9ydCBncmVhdGVyIHRoYW4gdGhlIHBvcnQgY291bnQgZm9yIHRoZSBjYXJkICEhISAqLwogCWlmIChsaW5lID4gKChib2FyZCAqIDE2KSArIGNhcmQtPnBvcnRfY291bnQgLSAxKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBOVUxMOwogCiAJcG9ydCA9ICZpc2lfcG9ydHNbbGluZV07CiAJaWYgKGlzaWNvbV9wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJpc2ljb21fb3BlbiIpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIE5VTEw7CiAKKwlyZXR1cm4gJnBvcnQtPnBvcnQ7Cit9CisJCitzdGF0aWMgaW50IGlzaWNvbV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBpc2lfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgaXNpX2JvYXJkICpjYXJkOworCXN0cnVjdCB0dHlfcG9ydCAqdHBvcnQ7CisJaW50IGVycm9yID0gMDsKKworCXRwb3J0ID0gaXNpY29tX2ZpbmRfcG9ydCh0dHkpOworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlwb3J0ID0gY29udGFpbmVyX29mKHRwb3J0LCBzdHJ1Y3QgaXNpX3BvcnQsIHBvcnQpOworCWNhcmQgPSAmaXNpX2NhcmRbQk9BUkQodHR5LT5pbmRleCldOwogCWlzaWNvbV9zZXR1cF9ib2FyZChjYXJkKTsKIAogCS8qIEZJWE1FOiBsb2NraW5nIG9uIHBvcnQuY291bnQgZXRjICovCiAJcG9ydC0+cG9ydC5jb3VudCsrOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0OwogCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIHR0eSk7Ci0JZXJyb3IgPSBpc2ljb21fc2V0dXBfcG9ydCh0dHkpOworCS8qIEZJWE1FOiBMb2NraW5nIG9uIEluaXRpYWxpemVkIGZsYWcgKi8KKwlpZiAoIXRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnRwb3J0LT5mbGFncykpCisJCWVycm9yID0gaXNpY29tX3NldHVwX3BvcnQodHR5KTsKIAlpZiAoZXJyb3IgPT0gMCkKIAkJZXJyb3IgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJnBvcnQtPnBvcnQsIHR0eSwgZmlscCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtOTUyLDE5ICs5NjgsMTIgQEAKIAl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzaWNvbV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIGlzaWNvbV9jbG9zZV9wb3J0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgaXNpX3BvcnQgKmlwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmaXAtPnBvcnQ7Ci0Jc3RydWN0IGlzaV9ib2FyZCAqY2FyZDsKKwlzdHJ1Y3QgaXNpX3BvcnQgKmlwID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBpc2lfcG9ydCwgcG9ydCk7CisJc3RydWN0IGlzaV9ib2FyZCAqY2FyZCA9IGlwLT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlCVUdfT04oIWlwKTsKLQotCWNhcmQgPSBpcC0+Y2FyZDsKLQlpZiAoaXNpY29tX3BhcmFub2lhX2NoZWNrKGlwLCB0dHktPm5hbWUsICJpc2ljb21fY2xvc2UiKSkKLQkJcmV0dXJuOwotCiAJLyogaW5kaWNhdGUgdG8gdGhlIGNhcmQgdGhhdCBubyBtb3JlIGRhdGEgY2FuIGJlIHJlY2VpdmVkCiAJICAgb24gdGhpcyBwb3J0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwpAQCAtOTc0LDkgKzk4MywxOSBAQAogCX0KIAlpc2ljb21fc2h1dGRvd25fcG9ydChpcCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Cit9CiAKK3N0YXRpYyB2b2lkIGlzaWNvbV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgaXNpX3BvcnQgKmlwID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmaXAtPnBvcnQ7CisJaWYgKGlzaWNvbV9wYXJhbm9pYV9jaGVjayhpcCwgdHR5LT5uYW1lLCAiaXNpY29tX2Nsb3NlIikpCisJCXJldHVybjsKKworCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydChwb3J0LCB0dHksIGZpbHApID09IDApCisJCXJldHVybjsKKwlpc2ljb21fY2xvc2VfcG9ydChwb3J0KTsKIAlpc2ljb21fZmx1c2hfYnVmZmVyKHR0eSk7Ci0JCiAJdHR5X3BvcnRfY2xvc2VfZW5kKHBvcnQsIHR0eSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uYwppbmRleCAwNDkxY2RmLi4wYWVkZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL21lbS5jCkBAIC04NjYsMjQgKzg2NiwyNSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7CiAJY29uc3QgY2hhciAqbmFtZTsKKwltb2RlX3QgbW9kZTsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpkZXZfaW5mbzsKIH0gZGV2bGlzdFtdID0gewotCVsgMV0gPSB7ICJtZW0iLCAmbWVtX2ZvcHMsICZkaXJlY3RseV9tYXBwYWJsZV9jZGV2X2JkaSB9LAorCSBbMV0gPSB7ICJtZW0iLCAwLCAmbWVtX2ZvcHMsICZkaXJlY3RseV9tYXBwYWJsZV9jZGV2X2JkaSB9LAogI2lmZGVmIENPTkZJR19ERVZLTUVNCi0JWyAyXSA9IHsgImttZW0iLCAma21lbV9mb3BzLCAmZGlyZWN0bHlfbWFwcGFibGVfY2Rldl9iZGkgfSwKKwkgWzJdID0geyAia21lbSIsIDAsICZrbWVtX2ZvcHMsICZkaXJlY3RseV9tYXBwYWJsZV9jZGV2X2JkaSB9LAogI2VuZGlmCi0JWyAzXSA9IHsibnVsbCIsICZudWxsX2ZvcHMsIE5VTEwgfSwKKwkgWzNdID0geyAibnVsbCIsIDA2NjYsICZudWxsX2ZvcHMsIE5VTEwgfSwKICNpZmRlZiBDT05GSUdfREVWUE9SVAotCVsgNF0gPSB7ICJwb3J0IiwgJnBvcnRfZm9wcywgTlVMTCB9LAorCSBbNF0gPSB7ICJwb3J0IiwgMCwgJnBvcnRfZm9wcywgTlVMTCB9LAogI2VuZGlmCi0JWyA1XSA9IHsgInplcm8iLCAmemVyb19mb3BzLCAmemVyb19iZGkgfSwKLQlbIDddID0geyAiZnVsbCIsICZmdWxsX2ZvcHMsIE5VTEwgfSwKLQlbIDhdID0geyAicmFuZG9tIiwgJnJhbmRvbV9mb3BzLCBOVUxMIH0sCi0JWyA5XSA9IHsgInVyYW5kb20iLCAmdXJhbmRvbV9mb3BzLCBOVUxMIH0sCi0JWzExXSA9IHsgImttc2ciLCAma21zZ19mb3BzLCBOVUxMIH0sCisJIFs1XSA9IHsgInplcm8iLCAwNjY2LCAmemVyb19mb3BzLCAmemVyb19iZGkgfSwKKwkgWzddID0geyAiZnVsbCIsIDA2NjYsICZmdWxsX2ZvcHMsIE5VTEwgfSwKKwkgWzhdID0geyAicmFuZG9tIiwgMDY2NiwgJnJhbmRvbV9mb3BzLCBOVUxMIH0sCisJIFs5XSA9IHsgInVyYW5kb20iLCAwNjY2LCAmdXJhbmRvbV9mb3BzLCBOVUxMIH0sCisJWzExXSA9IHsgImttc2ciLCAwLCAma21zZ19mb3BzLCBOVUxMIH0sCiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlbMTJdID0geyAib2xkbWVtIiwgJm9sZG1lbV9mb3BzLCBOVUxMIH0sCisJWzEyXSA9IHsgIm9sZG1lbSIsIDAsICZvbGRtZW1fZm9wcywgTlVMTCB9LAogI2VuZGlmCiB9OwogCkBAIC05MjAsNiArOTIxLDEzIEBACiAJLm9wZW4JCT0gbWVtb3J5X29wZW4sCiB9OwogCitzdGF0aWMgY2hhciAqbWVtX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCit7CisJaWYgKG1vZGUgJiYgZGV2bGlzdFtNSU5PUihkZXYtPmRldnQpXS5tb2RlKQorCQkqbW9kZSA9IGRldmxpc3RbTUlOT1IoZGV2LT5kZXZ0KV0ubW9kZTsKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCBjbGFzcyAqbWVtX2NsYXNzOwogCiBzdGF0aWMgaW50IF9faW5pdCBjaHJfZGV2X2luaXQodm9pZCkKQEAgLTkzNSw2ICs5NDMsNyBAQAogCQlwcmludGsoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIG1lbW9yeSBkZXZzXG4iLCBNRU1fTUFKT1IpOwogCiAJbWVtX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibWVtIik7CisJbWVtX2NsYXNzLT5kZXZub2RlID0gbWVtX2Rldm5vZGU7CiAJZm9yIChtaW5vciA9IDE7IG1pbm9yIDwgQVJSQVlfU0laRShkZXZsaXN0KTsgbWlub3IrKykgewogCQlpZiAoIWRldmxpc3RbbWlub3JdLm5hbWUpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9taXNjLmMgYi9kcml2ZXJzL2NoYXIvbWlzYy5jCmluZGV4IDYyYzk5ZmEuLjA3ZmE2MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9taXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL21pc2MuYwpAQCAtOTEsNyArOTEsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbWlzY19zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBtaXNjX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gbWlzY19zZXFfc3RhcnQsCiAJLm5leHQgID0gbWlzY19zZXFfbmV4dCwKIAkuc3RvcCAgPSBtaXNjX3NlcV9zdG9wLApAQCAtMjYzLDEyICsyNjMsMTQgQEAKIEVYUE9SVF9TWU1CT0wobWlzY19yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKG1pc2NfZGVyZWdpc3Rlcik7CiAKLXN0YXRpYyBjaGFyICptaXNjX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICptaXNjX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJc3RydWN0IG1pc2NkZXZpY2UgKmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmIChjLT5kZXZub2RlKQotCQlyZXR1cm4ga3N0cmR1cChjLT5kZXZub2RlLCBHRlBfS0VSTkVMKTsKKwlpZiAobW9kZSAmJiBjLT5tb2RlKQorCQkqbW9kZSA9IGMtPm1vZGU7CisJaWYgKGMtPm5vZGVuYW1lKQorCQlyZXR1cm4ga3N0cmR1cChjLT5ub2RlbmFtZSwgR0ZQX0tFUk5FTCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI4Nyw3ICsyODksNyBAQAogCWVyciA9IC1FSU87CiAJaWYgKHJlZ2lzdGVyX2NocmRldihNSVNDX01BSk9SLCJtaXNjIiwmbWlzY19mb3BzKSkKIAkJZ290byBmYWlsX3ByaW50azsKLQltaXNjX2NsYXNzLT5ub2RlbmFtZSA9IG1pc2Nfbm9kZW5hbWU7CisJbWlzY19jbGFzcy0+ZGV2bm9kZSA9IG1pc2NfZGV2bm9kZTsKIAlyZXR1cm4gMDsKIAogZmFpbF9wcmludGs6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXIuYyBiL2RyaXZlcnMvY2hhci9teHNlci5jCmluZGV4IGRiZjhkNTIuLjVlMjhkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9teHNlci5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlci5jCkBAIC00OCw3ICs0OCw3IEBACiAKICNpbmNsdWRlICJteHNlci5oIgogCi0jZGVmaW5lCU1YU0VSX1ZFUlNJT04JIjIuMC40IgkJLyogMS4xMiAqLworI2RlZmluZQlNWFNFUl9WRVJTSU9OCSIyLjAuNSIJCS8qIDEuMTQgKi8KICNkZWZpbmUJTVhTRVJNQUpPUgkgMTc0CiAKICNkZWZpbmUgTVhTRVJfQk9BUkRTCQk0CS8qIE1heC4gYm9hcmRzICovCkBAIC02OSw2ICs2OSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUE9TMTA0VUwJMHgxMDQ0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0IxMDgJMHgxMDgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1AxMDJVRgkweDEwMjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DUDExMlVMCTB4MTEyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCMTE0CTB4MTE0MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NQMTE0VUwJMHgxMTQzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0IxMzRJCTB4MTM0MQpAQCAtMTM5LDcgKzE0MCw4IEBACiAJeyAiQ1AtMTM4VSBzZXJpZXMiLAk4LCB9LAogCXsgIlBPUy0xMDRVTCBzZXJpZXMiLAk0LCB9LAogCXsgIkNQLTExNFVMIHNlcmllcyIsCTQsIH0sCi0vKjMwKi8JeyAiQ1AtMTAyVUYgc2VyaWVzIiwJMiwgfQorLyozMCovCXsgIkNQLTEwMlVGIHNlcmllcyIsCTIsIH0sCisJeyAiQ1AtMTEyVUwgc2VyaWVzIiwJMiwgfSwKIH07CiAKIC8qIGRyaXZlcl9kYXRhIGNvcnJlc3BvbmQgdG8gdGhlIGxpbmVzIGluIHRoZSBzdHJ1Y3R1cmUgYWJvdmUKQEAgLTE3MCw2ICsxNzIsNyBAQAogCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9QT1MxMDRVTCksCS5kcml2ZXJfZGF0YSA9IDI4IH0sCiAJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX0NQMTE0VUwpLAkuZHJpdmVyX2RhdGEgPSAyOSB9LAogCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9DUDEwMlVGKSwJLmRyaXZlcl9kYXRhID0gMzAgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfQ1AxMTJVTCksCS5kcml2ZXJfZGF0YSA9IDMxIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG14c2VyX3BjaWJyZHMpOwpAQCAtMjU4LDcgKzI2MSw2IEBACiAJc3RydWN0IG14c2VyX21vbiBtb25fZGF0YTsKIAogCXNwaW5sb2NrX3Qgc2xvY2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7CiB9OwogCiBzdHJ1Y3QgbXhzZXJfYm9hcmQgewpAQCAtODE4LDcgKzgyMCw3IEBACiAJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDVFMpCiAJCXBvcnQtPmljb3VudC5jdHMrKzsKIAlwb3J0LT5tb25fZGF0YS5tb2RlbV9zdGF0dXMgPSBzdGF0dXM7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAogCWlmICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSAmJiAoc3RhdHVzICYgVUFSVF9NU1JfRERDRCkpIHsKIAkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDRCkKQEAgLTk3Myw3ICs5NzUsNyBAQAogCSAqIGNsZWFyIGRlbHRhX21zcl93YWl0IHF1ZXVlIHRvIGF2b2lkIG1lbSBsZWFrczogd2UgbWF5IGZyZWUgdGhlIGlycQogCSAqIGhlcmUgc28gdGhlIHF1ZXVlIG1pZ2h0IG5ldmVyIGJlIHdha2VuIHVwCiAJICovCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAogCS8qCiAJICogRnJlZSB0aGUgSVJRLCBpZiBuZWNlc3NhcnkKQEAgLTEwNzMsMzQgKzEwNzUsMTcgQEAKIH0KIAogCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXJpYWwgcG9ydCBnZXRzIGNsb3NlZC4gIEZpcnN0LCB3ZQotICogd2FpdCBmb3IgdGhlIGxhc3QgcmVtYWluaW5nIGRhdGEgdG8gYmUgc2VudC4gIFRoZW4sIHdlIHVubGluayBpdHMKLSAqIGFzeW5jIHN0cnVjdHVyZSBmcm9tIHRoZSBpbnRlcnJ1cHQgY2hhaW4gaWYgbmVjZXNzYXJ5LCBhbmQgd2UgZnJlZQotICogdGhhdCBJUlEgaWYgbm90aGluZyBpcyBsZWZ0IGluIHRoZSBjaGFpbi4KLSAqLwotc3RhdGljIHZvaWQgbXhzZXJfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBteHNlcl9jbG9zZV9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJmluZm8tPnBvcnQ7Ci0KKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbXhzZXJfcG9ydCwgcG9ydCk7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JaWYgKHR0eS0+aW5kZXggPT0gTVhTRVJfUE9SVFMpCi0JCXJldHVybjsKLQlpZiAoIWluZm8pCi0JCXJldHVybjsKLQotCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydChwb3J0LCB0dHksIGZpbHApID09IDApCi0JCXJldHVybjsKLQogCS8qCiAJICogU2F2ZSB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUsIHNpbmNlIHRoaXMgcG9ydCBtYXkgaGF2ZQogCSAqIHNlcGFyYXRlIHRlcm1pb3MgZm9yIGNhbGxvdXQgYW5kIGRpYWxpbi4KIAkgKgogCSAqIEZJWE1FOiBDYW4gdGhpcyBnbyA/CiAJICovCi0JaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19OT1JNQUxfQUNUSVZFKQorCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX05PUk1BTF9BQ1RJVkUpCiAJCWluZm8tPm5vcm1hbF90ZXJtaW9zID0gKnR0eS0+dGVybWlvczsKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgd2Ugc3RvcCBhY2NlcHRpbmcgaW5wdXQuICBUbyBkbyB0aGlzLCB3ZQpAQCAtMTExMiw3ICsxMDk3LDcgQEAKIAlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykKIAkJaW5mby0+SUVSICY9IH5NT1hBX01VU1RfUkVDVl9JU1I7CiAKLQlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKQEAgLTExMjcsOCArMTExMiwyNiBAQAogCQl9CiAJfQogCW14c2VyX3NodXRkb3duKHR0eSk7Ci0JbXhzZXJfZmx1c2hfYnVmZmVyKHR0eSk7CiAKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsIHBvcnQgZ2V0cyBjbG9zZWQuICBGaXJzdCwgd2UKKyAqIHdhaXQgZm9yIHRoZSBsYXN0IHJlbWFpbmluZyBkYXRhIHRvIGJlIHNlbnQuICBUaGVuLCB3ZSB1bmxpbmsgaXRzCisgKiBhc3luYyBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW50ZXJydXB0IGNoYWluIGlmIG5lY2Vzc2FyeSwgYW5kIHdlIGZyZWUKKyAqIHRoYXQgSVJRIGlmIG5vdGhpbmcgaXMgbGVmdCBpbiB0aGUgY2hhaW4uCisgKi8KK3N0YXRpYyB2b2lkIG14c2VyX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmaW5mby0+cG9ydDsKKworCWlmICh0dHktPmluZGV4ID09IE1YU0VSX1BPUlRTKQorCQlyZXR1cm47CisJaWYgKHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KHBvcnQsIHR0eSwgZmlscCkgPT0gMCkKKwkJcmV0dXJuOworCW14c2VyX2Nsb3NlX3BvcnQodHR5LCBwb3J0KTsKKwlteHNlcl9mbHVzaF9idWZmZXIodHR5KTsKIAkvKiBSaWdodCBub3cgdGhlIHR0eV9wb3J0IHNldCBpcyBkb25lIG91dHNpZGUgb2YgdGhlIGNsb3NlX2VuZCBoZWxwZXIKIAkgICBhcyB3ZSBkb24ndCB5ZXQgaGF2ZSBldmVyeW9uZSB1c2luZyByZWZjb3VudHMgKi8JCiAJdHR5X3BvcnRfY2xvc2VfZW5kKHBvcnQsIHR0eSk7CkBAIC0xNzYxLDcgKzE3NjQsNyBAQAogCQljbm93ID0gaW5mby0+aWNvdW50OwkvKiBub3RlIHRoZSBjb3VudGVycyBvbiBlbnRyeSAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCi0JCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+ZGVsdGFfbXNyX3dhaXQsCisJCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+cG9ydC5kZWx0YV9tc3Jfd2FpdCwKIAkJCQlteHNlcl9jZmxhZ3NfY2hhbmdlZChpbmZvLCBhcmcsICZjbm93KSk7CiAJLyoKIAkgKiBHZXQgY291bnRlciBvZiBpbnB1dCBzZXJpYWwgbGluZSBpbnRlcnJ1cHRzIChEQ0QsUkksRFNSLENUUykKQEAgLTE4MDMsNyArMTgwNiw3IEBACiAKIAkJbG9ja19rZXJuZWwoKTsKIAkJbGVuID0gbXhzZXJfY2hhcnNfaW5fYnVmZmVyKHR0eSk7Ci0JCWxzciA9IGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xTUikgJiBVQVJUX0xTUl9URU1UOworCQlsc3IgPSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9MU1IpICYgVUFSVF9MU1JfVEhSRTsKIAkJbGVuICs9IChsc3IgPyAwIDogMSk7CiAJCXVubG9ja19rZXJuZWwoKTsKIApAQCAtMjQxMyw3ICsyNDE2LDYgQEAKIAkJaW5mby0+cG9ydC5jbG9zZV9kZWxheSA9IDUgKiBIWiAvIDEwOwogCQlpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCA9IDMwICogSFo7CiAJCWluZm8tPm5vcm1hbF90ZXJtaW9zID0gbXh2YXJfc2RyaXZlci0+aW5pdF90ZXJtaW9zOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAJCW1lbXNldCgmaW5mby0+bW9uX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgbXhzZXJfbW9uKSk7CiAJCWluZm8tPmVycl9zaGFkb3cgPSAwOwogCQlzcGluX2xvY2tfaW5pdCgmaW5mby0+c2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fdHR5LmMgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwppbmRleCA0ZTI4YjM1Li4yZTUwZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl90dHkuYworKysgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwpAQCAtMjcyLDcgKzI3Miw4IEBACiAgKgogICoJVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgb25lIG91dHB1dCBjaGFyYWN0ZXIKICAqCShpbmNsdWRpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgVEFCLCBDUiwgTEYsIGV0Yy4pLAotICoJcHV0dGluZyB0aGUgcmVzdWx0cyBpbiB0aGUgdHR5IGRyaXZlcidzIHdyaXRlIGJ1ZmZlci4KKyAqCWRvaW5nIE9QT1NUIHByb2Nlc3NpbmcgYW5kIHB1dHRpbmcgdGhlIHJlc3VsdHMgaW4gdGhlCisgKgl0dHkgZHJpdmVyJ3Mgd3JpdGUgYnVmZmVyLgogICoKICAqCU5vdGUgdGhhdCBMaW51eCBjdXJyZW50bHkgaWdub3JlcyBUQUJETFksIENSRExZLCBWVERMWSwgRkZETFkKICAqCWFuZCBOTERMWS4gIFRoZXkgc2ltcGx5IGFyZW4ndCByZWxldmFudCBpbiB0aGUgd29ybGQgdG9kYXkuCkBAIC0zNTAsOCArMzUxLDkgQEAKICAqCUBjOiBjaGFyYWN0ZXIgKG9yIHBhcnRpYWwgdW5pY29kZSBzeW1ib2wpCiAgKglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKICAqCi0gKglQZXJmb3JtIE9QT1NUIHByb2Nlc3NpbmcuICBSZXR1cm5zIC0xIHdoZW4gdGhlIG91dHB1dCBkZXZpY2UgaXMKLSAqCWZ1bGwgYW5kIHRoZSBjaGFyYWN0ZXIgbXVzdCBiZSByZXRyaWVkLgorICoJT3V0cHV0IG9uZSBjaGFyYWN0ZXIgd2l0aCBPUE9TVCBwcm9jZXNzaW5nLgorICoJUmV0dXJucyAtMSB3aGVuIHRoZSBvdXRwdXQgZGV2aWNlIGlzIGZ1bGwgYW5kIHRoZSBjaGFyYWN0ZXIKKyAqCW11c3QgYmUgcmV0cmllZC4KICAqCiAgKglMb2NraW5nOiBvdXRwdXRfbG9jayB0byBwcm90ZWN0IGNvbHVtbiBzdGF0ZSBhbmQgc3BhY2UgbGVmdAogICoJCSAoYWxzbywgdGhpcyBpcyBjYWxsZWQgZnJvbSBuX3R0eV93cml0ZSB1bmRlciB0aGUKQEAgLTM3Nyw4ICszNzksMTEgQEAKIC8qKgogICoJcHJvY2Vzc19vdXRwdXRfYmxvY2sJCS0JYmxvY2sgcG9zdCBwcm9jZXNzb3IKICAqCUB0dHk6IHRlcm1pbmFsIGRldmljZQotICoJQGluYnVmOiB1c2VyIGJ1ZmZlcgotICoJQG5yOiBudW1iZXIgb2YgYnl0ZXMKKyAqCUBidWY6IGNoYXJhY3RlciBidWZmZXIKKyAqCUBucjogbnVtYmVyIG9mIGJ5dGVzIHRvIG91dHB1dAorICoKKyAqCU91dHB1dCBhIGJsb2NrIG9mIGNoYXJhY3RlcnMgd2l0aCBPUE9TVCBwcm9jZXNzaW5nLgorICoJUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgb3V0cHV0LgogICoKICAqCVRoaXMgcGF0aCBpcyB1c2VkIHRvIHNwZWVkIHVwIGJsb2NrIGNvbnNvbGUgd3JpdGVzLCBhbW9uZyBvdGhlcgogICoJdGhpbmdzIHdoZW4gcHJvY2Vzc2luZyBibG9ja3Mgb2Ygb3V0cHV0IGRhdGEuIEl0IGhhbmRsZXMgb25seQpAQCAtNTcxLDMzICs1NzYsMjMgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQlpZiAoaXNjbnRybChvcCkpIHsKLQkJCQkJaWYgKExfRUNIT0NUTCh0dHkpKSB7Ci0JCQkJCQkvKgotCQkJCQkJICogRW5zdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZQotCQkJCQkJICogZm9yIHRoZSB3aG9sZSBjdHJsIHBhaXIuCi0JCQkJCQkgKi8KLQkJCQkJCWlmIChzcGFjZSA8IDIpIHsKLQkJCQkJCQlub19zcGFjZV9sZWZ0ID0gMTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJCXR0eV9wdXRfY2hhcih0dHksICdeJyk7Ci0JCQkJCQl0dHlfcHV0X2NoYXIodHR5LCBvcCBeIDAxMDApOwotCQkJCQkJdHR5LT5jb2x1bW4gKz0gMjsKLQkJCQkJCXNwYWNlIC09IDI7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoIXNwYWNlKSB7Ci0JCQkJCQkJbm9fc3BhY2VfbGVmdCA9IDE7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQl0dHlfcHV0X2NoYXIodHR5LCBvcCk7Ci0JCQkJCQlzcGFjZS0tOwotCQkJCQl9Ci0JCQkJfQogCQkJCS8qCi0JCQkJICogSWYgYWJvdmUgZmFsbHMgdGhyb3VnaCwgdGhpcyB3YXMgYW4KLQkJCQkgKiB1bmRlZmluZWQgb3AuCisJCQkJICogSWYgdGhlIG9wIGlzIG5vdCBhIHNwZWNpYWwgYnl0ZSBjb2RlLAorCQkJCSAqIGl0IGlzIGEgY3RybCBjaGFyIHRhZ2dlZCB0byBiZSBlY2hvZWQKKwkJCQkgKiBhcyAiXlgiICh3aGVyZSBYIGlzIHRoZSBsZXR0ZXIKKwkJCQkgKiByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wgY2hhcikuCisJCQkJICogTm90ZSB0aGF0IHdlIG11c3QgZW5zdXJlIHRoZXJlIGlzCisJCQkJICogZW5vdWdoIHNwYWNlIGZvciB0aGUgd2hvbGUgY3RybCBwYWlyLgorCQkJCSAqCiAJCQkJICovCisJCQkJaWYgKHNwYWNlIDwgMikgeworCQkJCQlub19zcGFjZV9sZWZ0ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXR0eV9wdXRfY2hhcih0dHksICdeJyk7CisJCQkJdHR5X3B1dF9jaGFyKHR0eSwgb3AgXiAwMTAwKTsKKwkJCQl0dHktPmNvbHVtbiArPSAyOworCQkJCXNwYWNlIC09IDI7CiAJCQkJY3AgKz0gMjsKIAkJCQluciAtPSAyOwogCQkJfQpAQCAtNjA1LDEyICs2MDAsMTggQEAKIAkJCWlmIChub19zcGFjZV9sZWZ0KQogCQkJCWJyZWFrOwogCQl9IGVsc2UgewotCQkJaW50IHJldHZhbDsKLQotCQkJcmV0dmFsID0gZG9fb3V0cHV0X2NoYXIoYywgdHR5LCBzcGFjZSk7Ci0JCQlpZiAocmV0dmFsIDwgMCkKLQkJCQlicmVhazsKLQkJCXNwYWNlIC09IHJldHZhbDsKKwkJCWlmIChPX09QT1NUKHR0eSkgJiYKKwkJCSAgICAhKHRlc3RfYml0KFRUWV9IV19DT09LX09VVCwgJnR0eS0+ZmxhZ3MpKSkgeworCQkJCWludCByZXR2YWwgPSBkb19vdXRwdXRfY2hhcihjLCB0dHksIHNwYWNlKTsKKwkJCQlpZiAocmV0dmFsIDwgMCkKKwkJCQkJYnJlYWs7CisJCQkJc3BhY2UgLT0gcmV0dmFsOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIXNwYWNlKQorCQkJCQlicmVhazsKKwkJCQl0dHlfcHV0X2NoYXIodHR5LCBjKTsKKwkJCQlzcGFjZSAtPSAxOworCQkJfQogCQkJY3AgKz0gMTsKIAkJCW5yIC09IDE7CiAJCX0KQEAgLTc5OCw4ICs3OTksOCBAQAogICoJRWNobyB1c2VyIGlucHV0IGJhY2sgb250byB0aGUgc2NyZWVuLiBUaGlzIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbgogICoJTF9FQ0hPKHR0eSkgaXMgdHJ1ZS4gQ2FsbGVkIGZyb20gdGhlIGRyaXZlciByZWNlaXZlX2J1ZiBwYXRoLgogICoKLSAqCVRoaXMgdmFyaWFudCB0YWdzIGNvbnRyb2wgY2hhcmFjdGVycyB0byBiZSBwb3NzaWJseSBlY2hvZWQgYXMKLSAqCWFzICJeWCIgKHdoZXJlIFggaXMgdGhlIGxldHRlciByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wgY2hhcikuCisgKglUaGlzIHZhcmlhbnQgdGFncyBjb250cm9sIGNoYXJhY3RlcnMgdG8gYmUgZWNob2VkIGFzICJeWCIKKyAqCSh3aGVyZSBYIGlzIHRoZSBsZXR0ZXIgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sIGNoYXIpLgogICoKICAqCUxvY2tpbmc6IGVjaG9fbG9jayB0byBwcm90ZWN0IHRoZSBlY2hvIGJ1ZmZlcgogICovCkBAIC04MTIsNyArODEzLDcgQEAKIAkJYWRkX2VjaG9fYnl0ZShFQ0hPX09QX1NUQVJULCB0dHkpOwogCQlhZGRfZWNob19ieXRlKEVDSE9fT1BfU1RBUlQsIHR0eSk7CiAJfSBlbHNlIHsKLQkJaWYgKGlzY250cmwoYykgJiYgYyAhPSAnXHQnKQorCQlpZiAoTF9FQ0hPQ1RMKHR0eSkgJiYgaXNjbnRybChjKSAmJiBjICE9ICdcdCcpCiAJCQlhZGRfZWNob19ieXRlKEVDSE9fT1BfU1RBUlQsIHR0eSk7CiAJCWFkZF9lY2hvX2J5dGUoYywgdHR5KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCA4ODE5MzRjLi5jMjUwYTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJCX0KIAl9CiAKLQlpZiAoZGV2LT5wcm90byA9PSAwICYmIGNvdW50ID4gZGV2LT5ybGVuIC0gZGV2LT5ycG9zKSB7CisJaWYgKGRldi0+cHJvdG8gPT0gMCAmJiBjb3VudCA+IGRldi0+cmxlbiAtIGRldi0+cnBvcyAmJiBpKSB7CiAJCURFQlVHUCg0LCBkZXYsICJUPTAgYW5kIGNvdW50ID4gYnVmZmVyXG4iKTsKIAkJZGV2LT5yYnVmW2ldID0gZGV2LT5yYnVmW2kgLSAxXTsKIAkJZGV2LT5yYnVmW2kgLSAxXSA9IGRldi0+cHJvY2J5dGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmF3LmMgYi9kcml2ZXJzL2NoYXIvcmF3LmMKaW5kZXggNDAyNjhkYi4uNjRhY2QwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jhdy5jCisrKyBiL2RyaXZlcnMvY2hhci9yYXcuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2RldiByYXdfY2RldjsKIAotc3RhdGljIGNoYXIgKnJhd19ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqcmF3X2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAicmF3LyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CkBAIC0yODksNyArMjg5LDcgQEAKIAkJcmV0ID0gUFRSX0VSUihyYXdfY2xhc3MpOwogCQlnb3RvIGVycm9yX3JlZ2lvbjsKIAl9Ci0JcmF3X2NsYXNzLT5ub2RlbmFtZSA9IHJhd19ub2RlbmFtZTsKKwlyYXdfY2xhc3MtPmRldm5vZGUgPSByYXdfZGV2bm9kZTsKIAlkZXZpY2VfY3JlYXRlKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCAwKSwgTlVMTCwgInJhd2N0bCIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jIGIvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwppbmRleCAxNzE3MTFhLi4zY2ZhMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCWlmIChwb3J0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCiAjaWZkZWYgUkNfUkVQT1JUX09WRVJSVU4KIAlzdGF0dXMgPSByY19pbihicCwgQ0QxODBfUkNTUik7CkBAIC0zNTUsMTggKzM1NSwxOCBAQAogI2VuZGlmCiAJY2ggPSByY19pbihicCwgQ0QxODBfUkRSKTsKIAlpZiAoIXN0YXR1cykKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAlpZiAoc3RhdHVzICYgUkNTUl9UT1VUKSAgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYyVkOiBwb3J0ICVkOiBSZWNlaXZlciB0aW1lb3V0LiAiCiAJCQkJICAgICJIYXJkd2FyZSBwcm9ibGVtcyA/XG4iLAogCQkgICAgICAgYm9hcmRfTm8oYnApLCBwb3J0X05vKHBvcnQpKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCX0gZWxzZSBpZiAoc3RhdHVzICYgUkNTUl9CUkVBSykgIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmMlZDogcG9ydCAlZDogSGFuZGxpbmcgYnJlYWsuLi5cbiIsCiAJCSAgICAgICBib2FyZF9ObyhicCksIHBvcnRfTm8ocG9ydCkpOwogCQlmbGFnID0gVFRZX0JSRUFLOwotCQlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykKKwkJaWYgKHR0eSAmJiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NBSykpCiAJCQlkb19TQUsodHR5KTsKIAogCX0gZWxzZSBpZiAoc3RhdHVzICYgUkNTUl9QRSkKQEAgLTM4MCw4ICszODAsMTIgQEAKIAllbHNlCiAJCWZsYWcgPSBUVFlfTk9STUFMOwogCi0JdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxhZyk7Ci0JdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwlpZiAodHR5KSB7CisJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsYWcpOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KK291dDoKKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAogc3RhdGljIHZvaWQgcmNfcmVjZWl2ZShzdHJ1Y3QgcmlzY29tX2JvYXJkIGNvbnN0ICpicCkKQEAgLTM5NCw3ICszOTgsNyBAQAogCWlmIChwb3J0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCiAJY291bnQgPSByY19pbihicCwgQ0QxODBfUkRDUik7CiAKQEAgLTQwMywxNSArNDA3LDE0IEBACiAjZW5kaWYKIAogCXdoaWxlIChjb3VudC0tKSAgewotCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCAxKSA9PSAwKSAgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicmMlZDogcG9ydCAlZDogV29ya2luZyBhcm91bmQgIgotCQkJCQkgICAgImZsaXAgYnVmZmVyIG92ZXJmbG93LlxuIiwKLQkJCSAgICAgICBib2FyZF9ObyhicCksIHBvcnRfTm8ocG9ydCkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCByY19pbihicCwgQ0QxODBfUkRSKSwgVFRZX05PUk1BTCk7CisJCXU4IGNoID0gcmNfaW4oYnAsIENEMTgwX1JEUik7CisJCWlmICh0dHkpCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBUVFlfTk9STUFMKTsKIAl9Ci0JdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwlpZiAodHR5KSB7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCXR0eV9rcmVmX3B1dCh0dHkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgcmNfdHJhbnNtaXQoc3RydWN0IHJpc2NvbV9ib2FyZCBjb25zdCAqYnApCkBAIC00MjQsMjIgKzQyNywyMiBAQAogCWlmIChwb3J0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCiAJaWYgKHBvcnQtPklFUiAmIElFUl9UWEVNUFRZKSB7CiAJCS8qIEZJRk8gZHJhaW5lZCAqLwogCQlyY19vdXQoYnAsIENEMTgwX0NBUiwgcG9ydF9Obyhwb3J0KSk7CiAJCXBvcnQtPklFUiAmPSB+SUVSX1RYRU1QVFk7CiAJCXJjX291dChicCwgQ0QxODBfSUVSLCBwb3J0LT5JRVIpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAogCWlmICgocG9ydC0+eG1pdF9jbnQgPD0gMCAmJiAhcG9ydC0+YnJlYWtfbGVuZ3RoKQotCSAgICB8fCB0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkKSAgeworCSAgICB8fCAodHR5ICYmICh0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkKSkpICB7CiAJCXJjX291dChicCwgQ0QxODBfQ0FSLCBwb3J0X05vKHBvcnQpKTsKIAkJcG9ydC0+SUVSICY9IH5JRVJfVFhSRFk7CiAJCXJjX291dChicCwgQ0QxODBfSUVSLCBwb3J0LT5JRVIpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChwb3J0LT5icmVha19sZW5ndGgpICB7CkBAIC00NjQsNyArNDY3LDcgQEAKIAkJCXJjX291dChicCwgQ0QxODBfQ0NSLCBDQ1JfQ09SQ0hHMik7CiAJCQlwb3J0LT5icmVha19sZW5ndGggPSAwOwogCQl9Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJY291bnQgPSBDRDE4MF9ORklGTzsKQEAgLTQ4MCw4ICs0ODMsMTAgQEAKIAkJcG9ydC0+SUVSICY9IH5JRVJfVFhSRFk7CiAJCXJjX291dChicCwgQ0QxODBfSUVSLCBwb3J0LT5JRVIpOwogCX0KLQlpZiAocG9ydC0+eG1pdF9jbnQgPD0gcG9ydC0+d2FrZXVwX2NoYXJzKQorCWlmICh0dHkgJiYgcG9ydC0+eG1pdF9jbnQgPD0gcG9ydC0+d2FrZXVwX2NoYXJzKQogCQl0dHlfd2FrZXVwKHR0eSk7CitvdXQ6CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJjX2NoZWNrX21vZGVtKHN0cnVjdCByaXNjb21fYm9hcmQgY29uc3QgKmJwKQpAQCAtNDk0LDM3ICs0OTksNDMgQEAKIAlpZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCW1jciA9IHJjX2luKGJwLCBDRDE4MF9NQ1IpOwogCWlmIChtY3IgJiBNQ1JfQ0RDSEcpIHsKIAkJaWYgKHJjX2luKGJwLCBDRDE4MF9NU1ZSKSAmIE1TVlJfQ0QpCiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnQub3Blbl93YWl0KTsKLQkJZWxzZQorCQllbHNlIGlmICh0dHkpCiAJCQl0dHlfaGFuZ3VwKHR0eSk7CiAJfQogCiAjaWZkZWYgUklTQ09NX0JSQUlOX0RBTUFHRURfQ1RTCiAJaWYgKG1jciAmIE1DUl9DVFNDSEcpICB7CiAJCWlmIChyY19pbihicCwgQ0QxODBfTVNWUikgJiBNU1ZSX0NUUykgIHsKLQkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCQlwb3J0LT5JRVIgfD0gSUVSX1RYUkRZOwotCQkJaWYgKHBvcnQtPnhtaXRfY250IDw9IHBvcnQtPndha2V1cF9jaGFycykKLQkJCQl0dHlfd2FrZXVwKHR0eSk7CisJCQlpZiAodHR5KSB7CisJCQkJdHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQlpZiAocG9ydC0+eG1pdF9jbnQgPD0gcG9ydC0+d2FrZXVwX2NoYXJzKQorCQkJCQl0dHlfd2FrZXVwKHR0eSk7CisJCQl9CiAJCX0gZWxzZSAgewotCQkJdHR5LT5od19zdG9wcGVkID0gMTsKKwkJCWlmICh0dHkpCisJCQkJdHR5LT5od19zdG9wcGVkID0gMTsKIAkJCXBvcnQtPklFUiAmPSB+SUVSX1RYUkRZOwogCQl9CiAJCXJjX291dChicCwgQ0QxODBfSUVSLCBwb3J0LT5JRVIpOwogCX0KIAlpZiAobWNyICYgTUNSX0RTUkNIRykgIHsKIAkJaWYgKHJjX2luKGJwLCBDRDE4MF9NU1ZSKSAmIE1TVlJfRFNSKSAgewotCQkJdHR5LT5od19zdG9wcGVkID0gMDsKIAkJCXBvcnQtPklFUiB8PSBJRVJfVFhSRFk7Ci0JCQlpZiAocG9ydC0+eG1pdF9jbnQgPD0gcG9ydC0+d2FrZXVwX2NoYXJzKQotCQkJCXR0eV93YWtldXAodHR5KTsKKwkJCWlmICh0dHkpIHsKKwkJCQl0dHktPmh3X3N0b3BwZWQgPSAwOworCQkJCWlmIChwb3J0LT54bWl0X2NudCA8PSBwb3J0LT53YWtldXBfY2hhcnMpCisJCQkJCXR0eV93YWtldXAodHR5KTsKKwkJCX0KIAkJfSBlbHNlICB7Ci0JCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQkJaWYgKHR0eSkKKwkJCQl0dHktPmh3X3N0b3BwZWQgPSAxOwogCQkJcG9ydC0+SUVSICY9IH5JRVJfVFhSRFk7CiAJCX0KIAkJcmNfb3V0KGJwLCBDRDE4MF9JRVIsIHBvcnQtPklFUik7CkBAIC01MzMsNiArNTQ0LDcgQEAKIAogCS8qIENsZWFyIGNoYW5nZSBiaXRzICovCiAJcmNfb3V0KGJwLCBDRDE4MF9NQ1IsIDApOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiAvKiBUaGUgbWFpbiBpbnRlcnJ1cHQgcHJvY2Vzc2luZyByb3V0aW5lICovCkBAIC02MzIsOSArNjQ0LDkgQEAKICAqIFNldHRpbmcgdXAgcG9ydCBjaGFyYWN0ZXJpc3RpY3MuCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGRpc2FibGVkIGludGVycnVwdHMKICAqLwotc3RhdGljIHZvaWQgcmNfY2hhbmdlX3NwZWVkKHN0cnVjdCByaXNjb21fYm9hcmQgKmJwLCBzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCByY19jaGFuZ2Vfc3BlZWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHJpc2NvbV9ib2FyZCAqYnAsCisJCQkJCQlzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQudHR5OwogCXVuc2lnbmVkIGxvbmcgYmF1ZDsKIAlsb25nIHRtcDsKIAl1bnNpZ25lZCBjaGFyIGNvcjEgPSAwLCBjb3IzID0gMDsKQEAgLTc4MSw3ICs3OTMsOCBAQAogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCAqLwotc3RhdGljIGludCByY19zZXR1cF9wb3J0KHN0cnVjdCByaXNjb21fYm9hcmQgKmJwLCBzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHJjX3NldHVwX3BvcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHJpc2NvbV9ib2FyZCAqYnAsCisJCQkJCQlzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzkzLDExICs4MDYsMTEgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyaXNjb21fbG9jaywgZmxhZ3MpOwogCi0JY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnBvcnQtPnBvcnQudHR5LT5mbGFncyk7CisJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDEpCiAJCWJwLT5jb3VudCsrOwogCXBvcnQtPnhtaXRfY250ID0gcG9ydC0+eG1pdF9oZWFkID0gcG9ydC0+eG1pdF90YWlsID0gMDsKLQlyY19jaGFuZ2Vfc3BlZWQoYnAsIHBvcnQpOworCXJjX2NoYW5nZV9zcGVlZCh0dHksIGJwLCBwb3J0KTsKIAlwb3J0LT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKQEAgLTg5OCw5ICs5MTEsOSBAQAogCiAJcG9ydC0+cG9ydC5jb3VudCsrOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0OwotCXBvcnQtPnBvcnQudHR5ID0gdHR5OworCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIHR0eSk7CiAKLQllcnJvciA9IHJjX3NldHVwX3BvcnQoYnAsIHBvcnQpOworCWVycm9yID0gcmNfc2V0dXBfcG9ydCh0dHksIGJwLCBwb3J0KTsKIAlpZiAoZXJyb3IgPT0gMCkKIAkJZXJyb3IgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJnBvcnQtPnBvcnQsIHR0eSwgZmlscCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtOTIxLDIwICs5MzQsMTIgQEAKIAl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJjX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIHZvaWQgcmNfY2xvc2VfcG9ydChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgcmlzY29tX2JvYXJkICpicDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByaXNjb21fcG9ydCAqcnAgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IHJpc2NvbV9wb3J0LCBwb3J0KTsKKwlzdHJ1Y3QgcmlzY29tX2JvYXJkICpicCA9IHBvcnRfQm9hcmQocnApOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCWlmICghcG9ydCB8fCByY19wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJjbG9zZSIpKQotCQlyZXR1cm47Ci0KLQlicCA9IHBvcnRfQm9hcmQocG9ydCk7Ci0JCi0JaWYgKHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KCZwb3J0LT5wb3J0LCB0dHksIGZpbHApID09IDApCi0JCXJldHVybjsKIAkKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgd2Ugc3RvcCBhY2NlcHRpbmcgaW5wdXQuICBUbyBkbyB0aGlzLCB3ZQpAQCAtOTQ0LDMxICs5NDksMzcgQEAKIAkgKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyaXNjb21fbG9jaywgZmxhZ3MpOwotCXBvcnQtPklFUiAmPSB+SUVSX1JYRDsKLQlpZiAocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7Ci0JCXBvcnQtPklFUiAmPSB+SUVSX1RYUkRZOwotCQlwb3J0LT5JRVIgfD0gSUVSX1RYRU1QVFk7Ci0JCXJjX291dChicCwgQ0QxODBfQ0FSLCBwb3J0X05vKHBvcnQpKTsKLQkJcmNfb3V0KGJwLCBDRDE4MF9JRVIsIHBvcnQtPklFUik7CisJcnAtPklFUiAmPSB+SUVSX1JYRDsKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCQlycC0+SUVSICY9IH5JRVJfVFhSRFk7CisJCXJwLT5JRVIgfD0gSUVSX1RYRU1QVFk7CisJCXJjX291dChicCwgQ0QxODBfQ0FSLCBwb3J0X05vKHJwKSk7CisJCXJjX291dChicCwgQ0QxODBfSUVSLCBycC0+SUVSKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKIAkJICogaGFzIGNvbXBsZXRlbHkgZHJhaW5lZDsgdGhpcyBpcyBlc3BlY2lhbGx5CiAJCSAqIGltcG9ydGFudCBpZiB0aGVyZSBpcyBhIHRyYW5zbWl0IEZJRk8hCiAJCSAqLwogCQl0aW1lb3V0ID0gamlmZmllcyArIEhaOwotCQl3aGlsZSAocG9ydC0+SUVSICYgSUVSX1RYRU1QVFkpIHsKKwkJd2hpbGUgKHJwLT5JRVIgJiBJRVJfVFhFTVBUWSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MocG9ydC0+dGltZW91dCkpOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhycC0+dGltZW91dCkpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7CiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKIAkJCQlicmVhazsKIAkJfQogCX0KLQlyY19zaHV0ZG93bl9wb3J0KHR0eSwgYnAsIHBvcnQpOwotCXJjX2ZsdXNoX2J1ZmZlcih0dHkpOworCXJjX3NodXRkb3duX3BvcnQocG9ydC0+dHR5LCBicCwgcnApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7Cit9CiAKLQl0dHlfcG9ydF9jbG9zZV9lbmQoJnBvcnQtPnBvcnQsIHR0eSk7CitzdGF0aWMgdm9pZCByY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcmlzY29tX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCisJaWYgKCFwb3J0IHx8IHJjX3BhcmFub2lhX2NoZWNrKHBvcnQsIHR0eS0+bmFtZSwgImNsb3NlIikpCisJCXJldHVybjsKKwl0dHlfcG9ydF9jbG9zZSgmcG9ydC0+cG9ydCwgdHR5LCBmaWxwKTsKIH0KIAogc3RhdGljIGludCByY193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtMTE3MCw3ICsxMTgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByY19zZXRfc2VyaWFsX2luZm8oc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0LAorc3RhdGljIGludCByY19zZXRfc2VyaWFsX2luZm8oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0LAogCQkJCSAgICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpuZXdpbmZvKQogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKQEAgLTExODAsMTcgKzExOTEsNiBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCBuZXdpbmZvLCBzaXplb2YodG1wKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0jaWYgMAotCWlmICgodG1wLmlycSAhPSBicC0+aXJxKSB8fAotCSAgICAodG1wLnBvcnQgIT0gYnAtPmJhc2UpIHx8Ci0JICAgICh0bXAudHlwZSAhPSBQT1JUX0NJUlJVUykgfHwKLQkgICAgKHRtcC5iYXVkX2Jhc2UgIT0gKFJDX09TQ0ZSRVEgKyBDRDE4MF9UUEMvMikgLyBDRDE4MF9UUEMpIHx8Ci0JICAgICh0bXAuY3VzdG9tX2Rpdmlzb3IgIT0gMCkgfHwKLQkgICAgKHRtcC54bWl0X2ZpZm9fc2l6ZSAhPSBDRDE4MF9ORklGTykgfHwKLQkgICAgKHRtcC5mbGFncyAmIH5SSVNDT01fTEVHQUxfRkxBR1MpKQotCQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotCiAJY2hhbmdlX3NwZWVkID0gKChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spICE9CiAJCQkodG1wLmZsYWdzICYgQVNZTkNfU1BEX01BU0spKTsKIApAQCAtMTIxMiw3ICsxMjEyLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKLQkJcmNfY2hhbmdlX3NwZWVkKGJwLCBwb3J0KTsKKwkJcmNfY2hhbmdlX3NwZWVkKHR0eSwgYnAsIHBvcnQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaXNjb21fbG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEyNTUsNyArMTI1NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgVElPQ1NTRVJJQUw6CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJldHZhbCA9IHJjX3NldF9zZXJpYWxfaW5mbyhwb3J0LCBhcmdwKTsKKwkJcmV0dmFsID0gcmNfc2V0X3NlcmlhbF9pbmZvKHR0eSwgcG9ydCwgYXJncCk7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEzNTAsMjEgKzEzNTAsMTIgQEAKIHN0YXRpYyB2b2lkIHJjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCByaXNjb21fcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHJpc2NvbV9ib2FyZCAqYnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChyY19wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJyY19oYW5ndXAiKSkKIAkJcmV0dXJuOwogCi0JYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwotCi0JcmNfc2h1dGRvd25fcG9ydCh0dHksIGJwLCBwb3J0KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7Ci0JcG9ydC0+cG9ydC5jb3VudCA9IDA7Ci0JcG9ydC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CisJcmNfc2h1dGRvd25fcG9ydCh0dHksIHBvcnRfQm9hcmQocG9ydCksIHBvcnQpOworCXR0eV9wb3J0X2hhbmd1cCgmcG9ydC0+cG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJjX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC0xMzc3LDcgKzEzNjgsNyBAQAogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKLQlyY19jaGFuZ2Vfc3BlZWQocG9ydF9Cb2FyZChwb3J0KSwgcG9ydCk7CisJcmNfY2hhbmdlX3NwZWVkKHR0eSwgcG9ydF9Cb2FyZChwb3J0KSwgcG9ydCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAogCWlmICgob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSAmJgpAQCAtMTQxMCw2ICsxNDAxLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIHJpc2NvbV9wb3J0X29wcyA9IHsKIAkuY2Fycmllcl9yYWlzZWQgPSBjYXJyaWVyX3JhaXNlZCwKKwkuc2h1dGRvd24gPSByY19jbG9zZV9wb3J0LAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IDUwZWVjZmUuLjQ0MjAzZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KQEAgLTI1Miw3ICsyNTIsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CiAJaWYgKHJlZ3MpCiAJCXNob3dfcmVncyhyZWdzKTsKLQlwZXJmX2NvdW50ZXJfcHJpbnRfZGVidWcoKTsKKwlwZXJmX2V2ZW50X3ByaW50X2RlYnVnKCk7CiB9CiBzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9zaG93cmVnc19vcCA9IHsKIAkuaGFuZGxlcgk9IHN5c3JxX2hhbmRsZV9zaG93cmVncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IGIwNjAzYjIuLjMyYjk1N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtNjk2LDcgKzY5Niw3IEBACiAKIAljbWQuaGVhZGVyLmluID0gcGNycmVhZF9oZWFkZXI7CiAJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKLQlCVUlMRF9CVUdfT04oY21kLmhlYWRlci5pbi5sZW5ndGggPiBSRUFEX1BDUl9SRVNVTFRfU0laRSk7CisJQlVHX09OKGNtZC5oZWFkZXIuaW4ubGVuZ3RoID4gUkVBRF9QQ1JfUkVTVUxUX1NJWkUpOwogCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIGNtZC5oZWFkZXIuaW4ubGVuZ3RoLAogCQkJICAiYXR0ZW1wdGluZyB0byByZWFkIGEgcGNyIHZhbHVlIik7CiAKQEAgLTc2MCw3ICs3NjAsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNtZC5oZWFkZXIuaW4gPSBwY3JleHRlbmRfaGVhZGVyOwotCUJVSUxEX0JVR19PTihiZTMyX3RvX2NwdShjbWQuaGVhZGVyLmluLmxlbmd0aCkgPiBFWFRFTkRfUENSX1NJWkUpOworCUJVR19PTihiZTMyX3RvX2NwdShjbWQuaGVhZGVyLmluLmxlbmd0aCkgPiBFWFRFTkRfUENSX1NJWkUpOwogCWNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKIAltZW1jcHkoY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uaGFzaCwgaGFzaCwgVFBNX0RJR0VTVF9TSVpFKTsKIAlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBjbWQuaGVhZGVyLmluLmxlbmd0aCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2Jpb3MuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2Jpb3MuYwppbmRleCAwYzJmNTVhLi5iZjIxNzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9iaW9zLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYmlvcy5jCkBAIC0zNDMsMTQgKzM0MywxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRwbV9hc2NpaV9iX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHBtX2FzY2lpX2JfbWVhc3VybWVudHNfc2Vxb3BzID0gewogCS5zdGFydCA9IHRwbV9iaW9zX21lYXN1cmVtZW50c19zdGFydCwKIAkubmV4dCA9IHRwbV9iaW9zX21lYXN1cmVtZW50c19uZXh0LAogCS5zdG9wID0gdHBtX2Jpb3NfbWVhc3VyZW1lbnRzX3N0b3AsCiAJLnNob3cgPSB0cG1fYXNjaWlfYmlvc19tZWFzdXJlbWVudHNfc2hvdywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHBtX2JpbmFyeV9iX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHBtX2JpbmFyeV9iX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSB0cG1fYmlvc19tZWFzdXJlbWVudHNfc3RhcnQsCiAJLm5leHQgPSB0cG1fYmlvc19tZWFzdXJlbWVudHNfbmV4dCwKIAkuc3RvcCA9IHRwbV9iaW9zX21lYXN1cmVtZW50c19zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IGEzYWZhMGMuLmVhMThhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTExODQsNiArMTE4NCw3IEBACiAJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0dHktPnRlcm1pb3MpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodHR5X2luaXRfdGVybWlvcyk7CiAKIC8qKgogICoJdHR5X2RyaXZlcl9pbnN0YWxsX3R0eSgpIC0gaW5zdGFsbCBhIHR0eSBlbnRyeSBpbiB0aGUgZHJpdmVyCkBAIC0xMzg2LDEwICsxMzg3LDE0IEBACiAgKgkJdHR5X211dGV4IC0gc29tZXRpbWVzIG9ubHkKICAqCQl0YWtlcyB0aGUgZmlsZSBsaXN0IGxvY2sgaW50ZXJuYWxseSB3aGVuIHdvcmtpbmcgb24gdGhlIGxpc3QKICAqCW9mIHR0eXMgdGhhdCB0aGUgZHJpdmVyIGtlZXBzLgorICoKKyAqCVRoaXMgbWV0aG9kIGdldHMgY2FsbGVkIGZyb20gYSB3b3JrIHF1ZXVlIHNvIHRoYXQgdGhlIGRyaXZlciBwcml2YXRlCisgKglzaHV0ZG93biBvcHMgY2FuIHNsZWVwIChuZWVkZWQgZm9yIFVTQiBhdCBsZWFzdCkKICAqLwotc3RhdGljIHZvaWQgcmVsZWFzZV9vbmVfdHR5KHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgcmVsZWFzZV9vbmVfdHR5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB0dHlfc3RydWN0LCBrcmVmKTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0dHlfc3RydWN0LCBoYW5ndXBfd29yayk7CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOwogCiAJaWYgKHR0eS0+b3BzLT5zaHV0ZG93bikKQEAgLTE0MDcsNiArMTQxMiwxNSBAQAogCWZyZWVfdHR5X3N0cnVjdCh0dHkpOwogfQogCitzdGF0aWMgdm9pZCBxdWV1ZV9yZWxlYXNlX29uZV90dHkoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgdHR5X3N0cnVjdCwga3JlZik7CisJLyogVGhlIGhhbmd1cCBxdWV1ZSBpcyBub3cgZnJlZSBzbyB3ZSBjYW4gcmV1c2UgaXQgcmF0aGVyIHRoYW4KKwkgICB3YXN0ZSBhIGNodW5rIG9mIG1lbW9yeSBmb3IgZWFjaCBwb3J0ICovCisJSU5JVF9XT1JLKCZ0dHktPmhhbmd1cF93b3JrLCByZWxlYXNlX29uZV90dHkpOworCXNjaGVkdWxlX3dvcmsoJnR0eS0+aGFuZ3VwX3dvcmspOworfQorCiAvKioKICAqCXR0eV9rcmVmX3B1dAkJLQlyZWxlYXNlIGEgdHR5IGtyZWYKICAqCUB0dHk6IHR0eSBkZXZpY2UKQEAgLTE0MTgsNyArMTQzMiw3IEBACiB2b2lkIHR0eV9rcmVmX3B1dChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICh0dHkpCi0JCWtyZWZfcHV0KCZ0dHktPmtyZWYsIHJlbGVhc2Vfb25lX3R0eSk7CisJCWtyZWZfcHV0KCZ0dHktPmtyZWYsIHF1ZXVlX3JlbGVhc2Vfb25lX3R0eSk7CiB9CiBFWFBPUlRfU1lNQk9MKHR0eV9rcmVmX3B1dCk7CiAKQEAgLTIwODUsNyArMjA5OSw3IEBACiAgKgl0aGUgZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IGV4aXN0ZWQuIFRoaXMgcGllY2Ugb2YgaGlzdG9yeSBpcyBwcmVzZXJ2ZWQKICAqCWluIHRoZSBleHBlY3RlZCB0dHkgQVBJIG9mIHBvc2l4IE9TJ3MuCiAgKgotICoJTG9ja2luZzogbm9uZSwgdGhlIG9wZW4gZmxlIGhhbmRsZSBlbnN1cmVzIGl0IHdvbid0IGdvIGF3YXkuCisgKglMb2NraW5nOiBub25lLCB0aGUgb3BlbiBmaWxlIGhhbmRsZSBlbnN1cmVzIGl0IHdvbid0IGdvIGF3YXkuCiAgKi8KIAogc3RhdGljIGludCBmaW9uYmlvKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgX191c2VyICpwKQpAQCAtMzA1NiwxMSArMzA3MCwyMiBAQAogCX0KIH0KIAorc3RhdGljIGNoYXIgKnR0eV9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQoreworCWlmICghbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGRldi0+ZGV2dCA9PSBNS0RFVihUVFlBVVhfTUFKT1IsIDApIHx8CisJICAgIGRldi0+ZGV2dCA9PSBNS0RFVihUVFlBVVhfTUFKT1IsIDIpKQorCQkqbW9kZSA9IDA2NjY7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHR0eV9jbGFzc19pbml0KHZvaWQpCiB7CiAJdHR5X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAidHR5Iik7CiAJaWYgKElTX0VSUih0dHlfY2xhc3MpKQogCQlyZXR1cm4gUFRSX0VSUih0dHlfY2xhc3MpOworCXR0eV9jbGFzcy0+ZGV2bm9kZSA9IHR0eV9kZXZub2RlOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKaW5kZXggYWQ2YmE0ZS4uOGU2N2Q1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYwpAQCAtMzkzLDkgKzM5Myw3IEBACiAJCXRlcm1pb3MtPmNfY2ZsYWcgfD0gKEJPVEhFUiA8PCBJQlNISUZUKTsKICNlbHNlCiAJaWYgKGlmb3VuZCA9PSAtMSB8fCBvZm91bmQgPT0gLTEpIHsKLQkJc3RhdGljIGludCB3YXJuZWQ7Ci0JCWlmICghd2FybmVkKyspCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dHk6IFVuYWJsZSB0byByZXR1cm4gY29ycmVjdCAiCisJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAidHR5OiBVbmFibGUgdG8gcmV0dXJuIGNvcnJlY3QgIgogCQkJICAic3BlZWQgZGF0YSBhcyB5b3VyIGFyY2hpdGVjdHVyZSBuZWVkcyB1cGRhdGluZy5cbiIpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCmluZGV4IGU0OGFmOWYuLmFhZmRiYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKQEAgLTE0NSw0OCArMTQ1LDMzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHR0eV91bnJlZ2lzdGVyX2xkaXNjKTsKIAotCi0vKioKLSAqCXR0eV9sZGlzY190cnlfZ2V0CS0JdHJ5IGFuZCByZWZlcmVuY2UgYW4gbGRpc2MKLSAqCUBkaXNjOiBsZGlzYyBudW1iZXIKLSAqCi0gKglBdHRlbXB0IHRvIG9wZW4gYW5kIGxvY2sgYSBsaW5lIGRpc2NpcGxpbmUgaW50byBwbGFjZS4gUmV0dXJuCi0gKgl0aGUgbGluZSBkaXNjaXBsaW5lIHJlZmNvdW50ZWQgb3IgYW4gZXJyb3IuCi0gKi8KLQotc3RhdGljIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY190cnlfZ2V0KGludCBkaXNjKQorc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzICpnZXRfbGRvcHMoaW50IGRpc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKLQlzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqbGRvcHM7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0KLQlsZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dHlfbGRpc2MpLCBHRlBfS0VSTkVMKTsKLQlpZiAobGQgPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJc3RydWN0IHR0eV9sZGlzY19vcHMgKmxkb3BzLCAqcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eV9sZGlzY19sb2NrLCBmbGFncyk7Ci0JbGQtPm9wcyA9IE5VTEw7CisJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlsZG9wcyA9IHR0eV9sZGlzY3NbZGlzY107Ci0JLyogQ2hlY2sgdGhlIGVudHJ5IGlzIGRlZmluZWQgKi8KIAlpZiAobGRvcHMpIHsKLQkJLyogSWYgdGhlIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCB3ZSBjYW4ndCB1c2UgaXQgKi8KLQkJaWYgKCF0cnlfbW9kdWxlX2dldChsZG9wcy0+b3duZXIpKQotCQkJZXJyID0gLUVBR0FJTjsKLQkJZWxzZSB7Ci0JCQkvKiBsb2NrIGl0ICovCisJCXJldCA9IEVSUl9QVFIoLUVBR0FJTik7CisJCWlmICh0cnlfbW9kdWxlX2dldChsZG9wcy0+b3duZXIpKSB7CiAJCQlsZG9wcy0+cmVmY291bnQrKzsKLQkJCWxkLT5vcHMgPSBsZG9wczsKLQkJCWF0b21pY19zZXQoJmxkLT51c2VycywgMSk7Ci0JCQllcnIgPSAwOworCQkJcmV0ID0gbGRvcHM7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKLQlpZiAoZXJyKSB7Ci0JCWtmcmVlKGxkKTsKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQl9Ci0JcmV0dXJuIGxkOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9sZG9wcyhzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqbGRvcHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOworCWxkb3BzLT5yZWZjb3VudC0tOworCW1vZHVsZV9wdXQobGRvcHMtPm93bmVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHlfbGRpc2NfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTIwNSwxNCArMTkwLDMxIEBACiBzdGF0aWMgc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX2dldChpbnQgZGlzYykKIHsKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwlzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqbGRvcHM7CiAKIAlpZiAoZGlzYyA8IE5fVFRZIHx8IGRpc2MgPj0gTlJfTERJU0NTKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQlsZCA9IHR0eV9sZGlzY190cnlfZ2V0KGRpc2MpOwotCWlmIChJU19FUlIobGQpKSB7CisKKwkvKgorCSAqIEdldCB0aGUgbGRpc2Mgb3BzIC0gd2UgbWF5IG5lZWQgdG8gcmVxdWVzdCB0aGVtIHRvIGJlIGxvYWRlZAorCSAqIGR5bmFtaWNhbGx5IGFuZCB0cnkgYWdhaW4uCisJICovCisJbGRvcHMgPSBnZXRfbGRvcHMoZGlzYyk7CisJaWYgKElTX0VSUihsZG9wcykpIHsKIAkJcmVxdWVzdF9tb2R1bGUoInR0eS1sZGlzYy0lZCIsIGRpc2MpOwotCQlsZCA9IHR0eV9sZGlzY190cnlfZ2V0KGRpc2MpOworCQlsZG9wcyA9IGdldF9sZG9wcyhkaXNjKTsKKwkJaWYgKElTX0VSUihsZG9wcykpCisJCQlyZXR1cm4gRVJSX0NBU1QobGRvcHMpOwogCX0KKworCWxkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR0eV9sZGlzYyksIEdGUF9LRVJORUwpOworCWlmIChsZCA9PSBOVUxMKSB7CisJCXB1dF9sZG9wcyhsZG9wcyk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWxkLT5vcHMgPSBsZG9wczsKKwlhdG9taWNfc2V0KCZsZC0+dXNlcnMsIDEpOwogCXJldHVybiBsZDsKIH0KIApAQCAtMjM0LDEzICsyMzYsMTMgQEAKIHN0YXRpYyBpbnQgdHR5X2xkaXNjc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJaW50IGkgPSAqKGxvZmZfdCAqKXY7Ci0Jc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJc3RydWN0IHR0eV9sZGlzY19vcHMgKmxkb3BzOwogCi0JbGQgPSB0dHlfbGRpc2NfdHJ5X2dldChpKTsKLQlpZiAoSVNfRVJSKGxkKSkKKwlsZG9wcyA9IGdldF9sZG9wcyhpKTsKKwlpZiAoSVNfRVJSKGxkb3BzKSkKIAkJcmV0dXJuIDA7Ci0Jc2VxX3ByaW50ZihtLCAiJS0xMHMgJTJkXG4iLCBsZC0+b3BzLT5uYW1lID8gbGQtPm9wcy0+bmFtZSA6ICI/Pz8iLCBpKTsKLQlwdXRfbGRpc2MobGQpOworCXNlcV9wcmludGYobSwgIiUtMTBzICUyZFxuIiwgbGRvcHMtPm5hbWUgPyBsZG9wcy0+bmFtZSA6ICI/Pz8iLCBpKTsKKwlwdXRfbGRvcHMobGRvcHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCmluZGV4IDk3NjliMTEuLmE0YmJiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCkBAIC0yMyw2ICsyMyw3IEBACiAJbWVtc2V0KHBvcnQsIDAsIHNpemVvZigqcG9ydCkpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPm9wZW5fd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Y2xvc2Vfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOwogCW11dGV4X2luaXQoJnBvcnQtPm11dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmcG9ydC0+bG9jayk7CiAJcG9ydC0+Y2xvc2VfZGVsYXkgPSAoNTAgKiBIWikgLyAxMDA7CkBAIC05Niw2ICs5NywxNCBAQAogfQogRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF90dHlfc2V0KTsKIAorc3RhdGljIHZvaWQgdHR5X3BvcnRfc2h1dGRvd24oc3RydWN0IHR0eV9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT5vcHMtPnNodXRkb3duICYmCisJCXRlc3RfYW5kX2NsZWFyX2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5mbGFncykpCisJCQlwb3J0LT5vcHMtPnNodXRkb3duKHBvcnQpOworCit9CisKIC8qKgogICoJdHR5X3BvcnRfaGFuZ3VwCQktCWhhbmd1cCBoZWxwZXIKICAqCUBwb3J0OiB0dHkgcG9ydApAQCAtMTE2LDYgKzEyNSw4IEBACiAJcG9ydC0+dHR5ID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCXR0eV9wb3J0X3NodXRkb3duKHBvcnQpOwogfQogRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF9oYW5ndXApOwogCkBAIC0yOTYsMTUgKzMwNywxNyBAQAogCiAJaWYgKHBvcnQtPmNvdW50KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHBvcnQtPm9wcy0+ZHJvcCkKKwkJCXBvcnQtPm9wcy0+ZHJvcChwb3J0KTsKIAkJcmV0dXJuIDA7CiAJfQotCXBvcnQtPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJc2V0X2JpdChBU1lOQ0JfQ0xPU0lORywgJnBvcnQtPmZsYWdzKTsKIAl0dHktPmNsb3NpbmcgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAkvKiBEb24ndCBibG9jayBvbiBhIHN0YWxsZWQgcG9ydCwganVzdCBwdWxsIHRoZSBjaGFpbiAqLwogCWlmICh0dHktPmZsb3dfc3RvcHBlZCkKIAkJdHR5X2RyaXZlcl9mbHVzaF9idWZmZXIodHR5KTsKLQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCAmJgorCWlmICh0ZXN0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5mbGFncykgJiYKIAkJCXBvcnQtPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkKIAkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIHBvcnQtPmNsb3Npbmdfd2FpdCk7CiAJaWYgKHBvcnQtPmRyYWluX2RlbGF5KSB7CkBAIC0zMTgsNiArMzMxLDkgQEAKIAkJCXRpbWVvdXQgPSAyICogSFo7CiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lb3V0KTsKIAl9CisJLyogRG9uJ3QgY2FsbCBwb3J0LT5kcm9wIGZvciB0aGUgbGFzdCByZWZlcmVuY2UuIENhbGxlcnMgd2lsbCB3YW50CisJICAgdG8gZHJvcCB0aGUgbGFzdCBhY3RpdmUgcmVmZXJlbmNlIGluIC0+c2h1dGRvd24oKSBvciB0aGUgdHR5CisJICAgc2h1dGRvd24gcGF0aCAqLwogCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF9jbG9zZV9zdGFydCk7CkBAIC0zNDgsMyArMzY0LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF9jbG9zZV9lbmQpOworCit2b2lkIHR0eV9wb3J0X2Nsb3NlKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpZiAodHR5X3BvcnRfY2xvc2Vfc3RhcnQocG9ydCwgdHR5LCBmaWxwKSA9PSAwKQorCQlyZXR1cm47CisJdHR5X3BvcnRfc2h1dGRvd24ocG9ydCk7CisJdHR5X3BvcnRfY2xvc2VfZW5kKHBvcnQsIHR0eSk7CisJdHR5X3BvcnRfdHR5X3NldChwb3J0LCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0wodHR5X3BvcnRfY2xvc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCBjNzRkYWNmLi4wZDMyOGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KICNpbmNsdWRlICJodmNfY29uc29sZS5oIgogCkBAIC02NSw3ICs2Niw3IEBACiAKIAkvKiBhZGRfYnVmIHdhbnRzIGEgdG9rZW4gdG8gaWRlbnRpZnkgdGhpcyBidWZmZXI6IHdlIGhhbmQgaXQgYW55CiAJICogbm9uLU5VTEwgcG9pbnRlciwgc2luY2UgdGhlcmUncyBvbmx5IGV2ZXIgb25lIGJ1ZmZlci4gKi8KLQlpZiAob3V0X3ZxLT52cV9vcHMtPmFkZF9idWYob3V0X3ZxLCBzZywgMSwgMCwgKHZvaWQgKikxKSA9PSAwKSB7CisJaWYgKG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsICh2b2lkICopMSkgPj0gMCkgewogCQkvKiBUZWxsIEhvc3QgdG8gZ28hICovCiAJCW91dF92cS0+dnFfb3BzLT5raWNrKG91dF92cSk7CiAJCS8qIENoaWxsIG91dCB1bnRpbCBpdCdzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLiAqLwpAQCAtODUsNyArODYsNyBAQAogCXNnX2luaXRfb25lKHNnLCBpbmJ1ZiwgUEFHRV9TSVpFKTsKIAogCS8qIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhZGQgb25lIGJ1ZmZlciB0byBhbiBlbXB0eSBxdWV1ZS4gKi8KLQlpZiAoaW5fdnEtPnZxX29wcy0+YWRkX2J1Zihpbl92cSwgc2csIDAsIDEsIGluYnVmKSAhPSAwKQorCWlmIChpbl92cS0+dnFfb3BzLT5hZGRfYnVmKGluX3ZxLCBzZywgMCwgMSwgaW5idWYpIDwgMCkKIAkJQlVHKCk7CiAJaW5fdnEtPnZxX29wcy0+a2ljayhpbl92cSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnQuYyBiL2RyaXZlcnMvY2hhci92dC5jCmluZGV4IDZhYTg4ZjUuLjBjODBjNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dC5jCisrKyBiL2RyaXZlcnMvY2hhci92dC5jCkBAIC0yNTIsNyArMjUyLDYgQEAKIAlzdHJ1Y3QgdnRfbm90aWZpZXJfcGFyYW0gcGFyYW0gPSB7IC52YyA9IHZjIH07CiAJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX1VQREFURSwgJnBhcmFtKTsKIH0KLQogLyoKICAqCUxvdy1MZXZlbCBGdW5jdGlvbnMKICAqLwpAQCAtOTM1LDYgKzkzNCw3IEBACiAKIAlpZiAoQ09OX0lTX1ZJU0lCTEUodmMpKQogCQl1cGRhdGVfc2NyZWVuKHZjKTsKKwl2dF9ldmVudF9wb3N0KFZUX0VWRU5UX1JFU0laRSwgdmMtPnZjX251bSwgdmMtPnZjX251bSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjEyOSwxMSArMjEyOSw3IEBACiAJY3VycmNvbnMgPSB2Yy0+dmNfbnVtOwogCWlmICghdmNfY29uc19hbGxvY2F0ZWQoY3VycmNvbnMpKSB7CiAJICAgIC8qIGNvdWxkIHRoaXMgaGFwcGVuPyAqLwotCSAgICBzdGF0aWMgaW50IGVycm9yID0gMDsKLQkgICAgaWYgKCFlcnJvcikgewotCQllcnJvciA9IDE7Ci0JCXByaW50aygiY29uX3dyaXRlOiB0dHkgJWQgbm90IGFsbG9jYXRlZFxuIiwgY3VycmNvbnMrMSk7Ci0JICAgIH0KKwkJcHJpbnRrX29uY2UoImNvbl93cml0ZTogdHR5ICVkIG5vdCBhbGxvY2F0ZWRcbiIsIGN1cnJjb25zKzEpOwogCSAgICByZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAJICAgIHJldHVybiAwOwogCX0KQEAgLTI5MTAsNiArMjkwNiw5IEBACiAJLmZsdXNoX2NoYXJzID0gY29uX2ZsdXNoX2NoYXJzLAogCS5jaGFyc19pbl9idWZmZXIgPSBjb25fY2hhcnNfaW5fYnVmZmVyLAogCS5pb2N0bCA9IHZ0X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gdnRfY29tcGF0X2lvY3RsLAorI2VuZGlmCiAJLnN0b3AgPSBjb25fc3RvcCwKIAkuc3RhcnQgPSBjb25fc3RhcnQsCiAJLnRocm90dGxlID0gY29uX3Rocm90dGxlLApAQCAtMjk1NSw3ICsyOTU0LDYgQEAKIH0KIAogI2lmbmRlZiBWVF9TSU5HTEVfRFJJVkVSCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnZ0Y29uc29sZV9jbGFzczsKIApAQCAtMzYzOCw2ICszNjM2LDcgQEAKIAkJYmxhbmtfc3RhdGUgPSBibGFua192ZXNhX3dhaXQ7CiAJCW1vZF90aW1lcigmY29uc29sZV90aW1lciwgamlmZmllcyArIHZlc2Ffb2ZmX2ludGVydmFsKTsKIAl9CisJdnRfZXZlbnRfcG9zdChWVF9FVkVOVF9CTEFOSywgdmMtPnZjX251bSwgdmMtPnZjX251bSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRvX2JsYW5rX3NjcmVlbik7CiAKQEAgLTM2ODIsNiArMzY4MSw3IEBACiAJCWNvbnNvbGVfYmxhbmtfaG9vaygwKTsKIAlzZXRfcGFsZXR0ZSh2Yyk7CiAJc2V0X2N1cnNvcih2Yyk7CisJdnRfZXZlbnRfcG9zdChWVF9FVkVOVF9VTkJMQU5LLCB2Yy0+dmNfbnVtLCB2Yy0+dmNfbnVtKTsKIH0KIEVYUE9SVF9TWU1CT0woZG9fdW5ibGFua19zY3JlZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDk1MTg5ZjIuLjI5YzY1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC02Miw2ICs2NCwxMzMgQEAKIHN0YXRpYyB2b2lkIGNvbXBsZXRlX2NoYW5nZV9jb25zb2xlKHN0cnVjdCB2Y19kYXRhICp2Yyk7CiAKIC8qCisgKglVc2VyIHNwYWNlIFZUX0VWRU5UIGhhbmRsZXJzCisgKi8KKworc3RydWN0IHZ0X2V2ZW50X3dhaXQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdnRfZXZlbnQgZXZlbnQ7CisJaW50IGRvbmU7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKHZ0X2V2ZW50cyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZ0X2V2ZW50X2xvY2spOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHZ0X2V2ZW50X3dhaXRxdWV1ZSk7CisKKy8qKgorICoJdnRfZXZlbnRfcG9zdAorICoJQGV2ZW50OiB0aGUgZXZlbnQgdGhhdCBvY2N1cnJlZAorICoJQG9sZDogb2xkIGNvbnNvbGUKKyAqCUBuZXc6IG5ldyBjb25zb2xlCisgKgorICoJUG9zdCBhbiBWVCBldmVudCB0byBpbnRlcmVzdGVkIFZUIGhhbmRsZXJzCisgKi8KKwordm9pZCB2dF9ldmVudF9wb3N0KHVuc2lnbmVkIGludCBldmVudCwgdW5zaWduZWQgaW50IG9sZCwgdW5zaWduZWQgaW50IG5ldykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpoZWFkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHdha2UgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZ0X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwloZWFkID0gJnZ0X2V2ZW50czsKKworCWxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSB7CisJCXN0cnVjdCB2dF9ldmVudF93YWl0ICp2ZSA9IGxpc3RfZW50cnkocG9zLAorCQkJCQkJc3RydWN0IHZ0X2V2ZW50X3dhaXQsIGxpc3QpOworCQlpZiAoISh2ZS0+ZXZlbnQuZXZlbnQgJiBldmVudCkpCisJCQljb250aW51ZTsKKwkJdmUtPmV2ZW50LmV2ZW50ID0gZXZlbnQ7CisJCS8qIGtlcm5lbCB2aWV3IGlzIGNvbnNvbGVzIDAuLm4tMSwgdXNlciBzcGFjZSB2aWV3IGlzCisJCSAgIGNvbnNvbGUgMS4ubiB3aXRoIDAgbWVhbmluZyBjdXJyZW50LCBzbyB3ZSBtdXN0IGJpYXMgKi8KKwkJdmUtPmV2ZW50Lm9sZCA9IG9sZCArIDE7CisJCXZlLT5ldmVudC5uZXcgPSBuZXcgKyAxOworCQl3YWtlID0gMTsKKwkJdmUtPmRvbmUgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2dF9ldmVudF9sb2NrLCBmbGFncyk7CisJaWYgKHdha2UpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdnRfZXZlbnRfd2FpdHF1ZXVlKTsKK30KKworLyoqCisgKgl2dF9ldmVudF93YWl0CQktCXdhaXQgZm9yIGFuIGV2ZW50CisgKglAdnc6IG91ciBldmVudAorICoKKyAqCVdhaXRzIGZvciBhbiBldmVudCB0byBvY2N1ciB3aGljaCBjb21wbGV0ZXMgb3VyIHZ0X2V2ZW50X3dhaXQKKyAqCXN0cnVjdHVyZS4gT24gcmV0dXJuIHRoZSBzdHJ1Y3R1cmUgaGFzIHd2LT5kb25lIHNldCB0byAxIGZvciBzdWNjZXNzCisgKglvciAwIGlmIHNvbWUgZXZlbnQgc3VjaCBhcyBhIHNpZ25hbCBlbmRlZCB0aGUgd2FpdC4KKyAqLworCitzdGF0aWMgdm9pZCB2dF9ldmVudF93YWl0KHN0cnVjdCB2dF9ldmVudF93YWl0ICp2dykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCS8qIFByZXBhcmUgdGhlIGV2ZW50ICovCisJSU5JVF9MSVNUX0hFQUQoJnZ3LT5saXN0KTsKKwl2dy0+ZG9uZSA9IDA7CisJLyogUXVldWUgb3VyIGV2ZW50ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZ0X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmdnctPmxpc3QsICZ2dF9ldmVudHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZ0X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwkvKiBXYWl0IGZvciBpdCB0byBwYXNzICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHZ0X2V2ZW50X3dhaXRxdWV1ZSwgdnctPmRvbmUpOworCS8qIERlcXVldWUgaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnRfZXZlbnRfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZ2dy0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnRfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqCXZ0X2V2ZW50X3dhaXRfaW9jdGwJLQlldmVudCBpb2N0bCBoYW5kbGVyCisgKglAYXJnOiBhcmd1bWVudCB0byBpb2N0bAorICoKKyAqCUltcGxlbWVudCB0aGUgVlRfV0FJVEVWRU5UIGlvY3RsIHVzaW5nIHRoZSBWVCBldmVudCBpbnRlcmZhY2UKKyAqLworCitzdGF0aWMgaW50IHZ0X2V2ZW50X3dhaXRfaW9jdGwoc3RydWN0IHZ0X2V2ZW50IF9fdXNlciAqZXZlbnQpCit7CisJc3RydWN0IHZ0X2V2ZW50X3dhaXQgdnc7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnZ3LmV2ZW50LCBldmVudCwgc2l6ZW9mKHN0cnVjdCB2dF9ldmVudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBIaWdoZXN0IHN1cHBvcnRlZCBldmVudCBmb3Igbm93ICovCisJaWYgKHZ3LmV2ZW50LmV2ZW50ICYgflZUX01BWF9FVkVOVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2dF9ldmVudF93YWl0KCZ2dyk7CisJLyogSWYgaXQgb2NjdXJyZWQgcmVwb3J0IGl0ICovCisJaWYgKHZ3LmRvbmUpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihldmVudCwgJnZ3LmV2ZW50LCBzaXplb2Yoc3RydWN0IHZ0X2V2ZW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVFI7Cit9CisKKy8qKgorICoJdnRfd2FpdGFjdGl2ZQktCWFjdGl2ZSBjb25zb2xlIHdhaXQKKyAqCUBldmVudDogZXZlbnQgY29kZQorICoJQG46IG5ldyBjb25zb2xlCisgKgorICoJSGVscGVyIGZvciBldmVudCB3YWl0cy4gVXNlZCB0byBpbXBsZW1lbnQgdGhlIGxlZ2FjeQorICoJZXZlbnQgd2FpdGluZyBpb2N0bHMgaW4gdGVybXMgb2YgZXZlbnRzCisgKi8KKworaW50IHZ0X3dhaXRhY3RpdmUoaW50IG4pCit7CisJc3RydWN0IHZ0X2V2ZW50X3dhaXQgdnc7CisJZG8geworCQlpZiAobiA9PSBmZ19jb25zb2xlICsgMSkKKwkJCWJyZWFrOworCQl2dy5ldmVudC5ldmVudCA9IFZUX0VWRU5UX1NXSVRDSDsKKwkJdnRfZXZlbnRfd2FpdCgmdncpOworCQlpZiAodncuZG9uZSA9PSAwKQorCQkJcmV0dXJuIC1FSU5UUjsKKwl9IHdoaWxlICh2dy5ldmVudC5uZXcgIT0gbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiB0aGVzZSBhcmUgdGhlIHZhbGlkIGkvbyBwb3J0cyB3ZSdyZSBhbGxvd2VkIHRvIGNoYW5nZS4gdGhleSBtYXAgYWxsIHRoZQogICogdmlkZW8gcG9ydHMKICAqLwpAQCAtMzYwLDYgKzQ4OSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKKworCiAvKgogICogV2UgaGFuZGxlIHRoZSBjb25zb2xlLXNwZWNpZmljIGlvY3RsJ3MgaGVyZS4gIFdlIGFsbG93IHRoZQogICogY2FwYWJpbGl0eSB0byBtb2RpZnkgYW55IGNvbnNvbGUsIG5vdCBqdXN0IHRoZSBmZ19jb25zb2xlLiAKQEAgLTg0Miw2ICs5NzMsNDEgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgVlRfU0VUQUNUSVZBVEU6CisJeworCQlzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUgdnNhOworCisJCWlmICghcGVybSkKKwkJCWdvdG8gZXBlcm07CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2c2EsIChzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUgX191c2VyICopYXJnLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCB2dF9zZXRhY3RpdmF0ZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2c2EuY29uc29sZSA9PSAwIHx8IHZzYS5jb25zb2xlID4gTUFYX05SX0NPTlNPTEVTKQorCQkJcmV0ID0gLUVOWElPOworCQllbHNlIHsKKwkJCXZzYS5jb25zb2xlLS07CisJCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQlyZXQgPSB2Y19hbGxvY2F0ZSh2c2EuY29uc29sZSk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQlzdHJ1Y3QgdmNfZGF0YSAqbnZjOworCQkJCS8qIFRoaXMgaXMgc2FmZSBwcm92aWRpbmcgd2UgZG9uJ3QgZHJvcCB0aGUKKwkJCQkgICBjb25zb2xlIHNlbSBiZXR3ZWVuIHZjX2FsbG9jYXRlIGFuZAorCQkJCSAgIGZpbmlzaGluZyByZWZlcmVuY2luZyBudmMgKi8KKwkJCQludmMgPSB2Y19jb25zW3ZzYS5jb25zb2xlXS5kOworCQkJCW52Yy0+dnRfbW9kZSA9IHZzYS5tb2RlOworCQkJCW52Yy0+dnRfbW9kZS5mcnNpZyA9IDA7CisJCQkJcHV0X3BpZChudmMtPnZ0X3BpZCk7CisJCQkJbnZjLT52dF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKGN1cnJlbnQpKTsKKwkJCX0KKwkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCQkvKiBDb21tZW5jZSBzd2l0Y2ggYW5kIGxvY2sgKi8KKwkJCXNldF9jb25zb2xlKGFyZyk7CisJCX0KKwl9CisKIAkvKgogCSAqIHdhaXQgdW50aWwgdGhlIHNwZWNpZmllZCBWVCBoYXMgYmVlbiBhY3RpdmF0ZWQKIAkgKi8KQEAgLTg1MSw3ICsxMDE3LDcgQEAKIAkJaWYgKGFyZyA9PSAwIHx8IGFyZyA+IE1BWF9OUl9DT05TT0xFUykKIAkJCXJldCA9IC1FTlhJTzsKIAkJZWxzZQotCQkJcmV0ID0gdnRfd2FpdGFjdGl2ZShhcmcgLSAxKTsKKwkJCXJldCA9IHZ0X3dhaXRhY3RpdmUoYXJnKTsKIAkJYnJlYWs7CiAKIAkvKgpAQCAtMTE1OSw2ICsxMzI1LDkgQEAKIAkJcmV0ID0gcHV0X3VzZXIodmMtPnZjX2hpX2ZvbnRfbWFzaywKIAkJCQkJKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKWFyZyk7CiAJCWJyZWFrOworCWNhc2UgVlRfV0FJVEVWRU5UOgorCQlyZXQgPSB2dF9ldmVudF93YWl0X2lvY3RsKChzdHJ1Y3QgdnRfZXZlbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwogCX0KQEAgLTExNzAsNTQgKzEzMzksNiBAQAogCWdvdG8gb3V0OwogfQogCi0vKgotICogU29tZXRpbWVzIHdlIHdhbnQgdG8gd2FpdCB1bnRpbCBhIHBhcnRpY3VsYXIgVlQgaGFzIGJlZW4gYWN0aXZhdGVkLiBXZQotICogZG8gaXQgaW4gYSB2ZXJ5IHNpbXBsZSBtYW5uZXIuIEV2ZXJ5Ym9keSB3YWl0cyBvbiBhIHNpbmdsZSBxdWV1ZSBhbmQKLSAqIGdldCB3b2tlbiB1cCBhdCBvbmNlLiBUaG9zZSB0aGF0IGFyZSBzYXRpc2ZpZWQgZ28gb24gd2l0aCB0aGVpciBidXNpbmVzcywKLSAqIHdoaWxlIHRob3NlIG5vdCByZWFkeSBnbyBiYWNrIHRvIHNsZWVwLiBTZWVtcyBvdmVya2lsbCB0byBhZGQgYSB3YWl0Ci0gKiB0byBlYWNoIHZ0IGp1c3QgZm9yIHRoaXMgLSB1c3VhbGx5IHRoaXMgZG9lcyBub3RoaW5nIQotICovCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodnRfYWN0aXZhdGVfcXVldWUpOwotCi0vKgotICogU2xlZXBzIHVudGlsIGEgdnQgaXMgYWN0aXZhdGVkLCBvciB0aGUgdGFzayBpcyBpbnRlcnJ1cHRlZC4gUmV0dXJucwotICogMCBpZiBhY3RpdmF0aW9uLCAtRUlOVFIgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgaGFuZGxlci4KLSAqLwotaW50IHZ0X3dhaXRhY3RpdmUoaW50IHZ0KQotewotCWludCByZXR2YWw7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlhZGRfd2FpdF9xdWV1ZSgmdnRfYWN0aXZhdGVfcXVldWUsICZ3YWl0KTsKLQlmb3IgKDs7KSB7Ci0JCXJldHZhbCA9IDA7Ci0KLQkJLyoKLQkJICogU3luY2hyb25pemUgd2l0aCByZWRyYXdfc2NyZWVuKCkuIEJ5IGFjcXVpcmluZyB0aGUgY29uc29sZQotCQkgKiBzZW1hcGhvcmUgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnNvbGUgc3dpdGNoIGlzIGNvbXBsZXRlZAotCQkgKiBiZWZvcmUgd2UgcmV0dXJuLiBJZiB3ZSBkaWRuJ3Qgd2FpdCBmb3IgdGhlIHNlbWFwaG9yZSwgd2UKLQkJICogY291bGQgcmV0dXJuIGF0IGEgcG9pbnQgd2hlcmUgZmdfY29uc29sZSBoYXMgYWxyZWFkeSBiZWVuCi0JCSAqIHVwZGF0ZWQsIGJ1dCB0aGUgY29uc29sZSBzd2l0Y2ggaGFzbid0IGJlZW4gY29tcGxldGVkLgotCQkgKi8KLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpZiAodnQgPT0gZmdfY29uc29sZSkgewotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQlyZXR2YWwgPSAtRVJFU1RBUlROT0hBTkQ7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOwotCQlzY2hlZHVsZSgpOwotCX0KLQlyZW1vdmVfd2FpdF9xdWV1ZSgmdnRfYWN0aXZhdGVfcXVldWUsICZ3YWl0KTsKLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2RlZmluZSB2dF93YWtlX3dhaXRhY3RpdmUoKSB3YWtlX3VwKCZ2dF9hY3RpdmF0ZV9xdWV1ZSkKLQogdm9pZCByZXNldF92YyhzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJdmMtPnZjX21vZGUgPSBLRF9URVhUOwpAQCAtMTI1NiwxMiArMTM3NywyMTYgQEAKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisKK3N0cnVjdCBjb21wYXRfY29uc29sZWZvbnRkZXNjIHsKKwl1bnNpZ25lZCBzaG9ydCBjaGFyY291bnQ7ICAgICAgIC8qIGNoYXJhY3RlcnMgaW4gZm9udCAoMjU2IG9yIDUxMikgKi8KKwl1bnNpZ25lZCBzaG9ydCBjaGFyaGVpZ2h0OyAgICAgIC8qIHNjYW4gbGluZXMgcGVyIGNoYXJhY3RlciAoMS0zMikgKi8KKwljb21wYXRfY2FkZHJfdCBjaGFyZGF0YTsJLyogZm9udCBkYXRhIGluIGV4cGFuZGVkIGZvcm0gKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21wYXRfZm9udHhfaW9jdGwoaW50IGNtZCwgc3RydWN0IGNvbXBhdF9jb25zb2xlZm9udGRlc2MgX191c2VyICp1c2VyX2NmZCwKKwkJCSBpbnQgcGVybSwgc3RydWN0IGNvbnNvbGVfZm9udF9vcCAqb3ApCit7CisJc3RydWN0IGNvbXBhdF9jb25zb2xlZm9udGRlc2MgY2ZkYXJnOworCWludCBpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjZmRhcmcsIHVzZXJfY2ZkLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9jb25zb2xlZm9udGRlc2MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUElPX0ZPTlRYOgorCQlpZiAoIXBlcm0pCisJCQlyZXR1cm4gLUVQRVJNOworCQlvcC0+b3AgPSBLRF9GT05UX09QX1NFVDsKKwkJb3AtPmZsYWdzID0gS0RfRk9OVF9GTEFHX09MRDsKKwkJb3AtPndpZHRoID0gODsKKwkJb3AtPmhlaWdodCA9IGNmZGFyZy5jaGFyaGVpZ2h0OworCQlvcC0+Y2hhcmNvdW50ID0gY2ZkYXJnLmNoYXJjb3VudDsKKwkJb3AtPmRhdGEgPSBjb21wYXRfcHRyKGNmZGFyZy5jaGFyZGF0YSk7CisJCXJldHVybiBjb25fZm9udF9vcCh2Y19jb25zW2ZnX2NvbnNvbGVdLmQsIG9wKTsKKwljYXNlIEdJT19GT05UWDoKKwkJb3AtPm9wID0gS0RfRk9OVF9PUF9HRVQ7CisJCW9wLT5mbGFncyA9IEtEX0ZPTlRfRkxBR19PTEQ7CisJCW9wLT53aWR0aCA9IDg7CisJCW9wLT5oZWlnaHQgPSBjZmRhcmcuY2hhcmhlaWdodDsKKwkJb3AtPmNoYXJjb3VudCA9IGNmZGFyZy5jaGFyY291bnQ7CisJCW9wLT5kYXRhID0gY29tcGF0X3B0cihjZmRhcmcuY2hhcmRhdGEpOworCQlpID0gY29uX2ZvbnRfb3AodmNfY29uc1tmZ19jb25zb2xlXS5kLCBvcCk7CisJCWlmIChpKQorCQkJcmV0dXJuIGk7CisJCWNmZGFyZy5jaGFyaGVpZ2h0ID0gb3AtPmhlaWdodDsKKwkJY2ZkYXJnLmNoYXJjb3VudCA9IG9wLT5jaGFyY291bnQ7CisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9jZmQsICZjZmRhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2NvbnNvbGVmb250ZGVzYykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RydWN0IGNvbXBhdF9jb25zb2xlX2ZvbnRfb3AgeworCWNvbXBhdF91aW50X3Qgb3A7ICAgICAgICAvKiBvcGVyYXRpb24gY29kZSBLRF9GT05UX09QXyogKi8KKwljb21wYXRfdWludF90IGZsYWdzOyAgICAgLyogS0RfRk9OVF9GTEFHXyogKi8KKwljb21wYXRfdWludF90IHdpZHRoLCBoZWlnaHQ7ICAgICAvKiBmb250IHNpemUgKi8KKwljb21wYXRfdWludF90IGNoYXJjb3VudDsKKwljb21wYXRfY2FkZHJfdCBkYXRhOyAgICAvKiBmb250IGRhdGEgd2l0aCBoZWlnaHQgZml4ZWQgdG8gMzIgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21wYXRfa2Rmb250b3BfaW9jdGwoc3RydWN0IGNvbXBhdF9jb25zb2xlX2ZvbnRfb3AgX191c2VyICpmb250b3AsCisJCQkgaW50IHBlcm0sIHN0cnVjdCBjb25zb2xlX2ZvbnRfb3AgKm9wLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJaW50IGk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIob3AsIGZvbnRvcCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfY29uc29sZV9mb250X29wKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICghcGVybSAmJiBvcC0+b3AgIT0gS0RfRk9OVF9PUF9HRVQpCisJCXJldHVybiAtRVBFUk07CisJb3AtPmRhdGEgPSBjb21wYXRfcHRyKCgoc3RydWN0IGNvbXBhdF9jb25zb2xlX2ZvbnRfb3AgKilvcCktPmRhdGEpOworCW9wLT5mbGFncyB8PSBLRF9GT05UX0ZMQUdfT0xEOworCWkgPSBjb25fZm9udF9vcCh2Yywgb3ApOworCWlmIChpKQorCQlyZXR1cm4gaTsKKwkoKHN0cnVjdCBjb21wYXRfY29uc29sZV9mb250X29wICopb3ApLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpb3AtPmRhdGE7CisJaWYgKGNvcHlfdG9fdXNlcihmb250b3AsIG9wLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9jb25zb2xlX2ZvbnRfb3ApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb21wYXRfdW5pbWFwZGVzYyB7CisJdW5zaWduZWQgc2hvcnQgZW50cnlfY3Q7CisJY29tcGF0X2NhZGRyX3QgZW50cmllczsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21wYXRfdW5pbWFwX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBjb21wYXRfdW5pbWFwZGVzYyBfX3VzZXIgKnVzZXJfdWQsCisJCQkgaW50IHBlcm0sIHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzdHJ1Y3QgY29tcGF0X3VuaW1hcGRlc2MgdG1wOworCXN0cnVjdCB1bmlwYWlyIF9fdXNlciAqdG1wX2VudHJpZXM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlcl91ZCwgc2l6ZW9mIHRtcCkpCisJCXJldHVybiAtRUZBVUxUOworCXRtcF9lbnRyaWVzID0gY29tcGF0X3B0cih0bXAuZW50cmllcyk7CisJaWYgKHRtcF9lbnRyaWVzKQorCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHRtcF9lbnRyaWVzLAorCQkJCXRtcC5lbnRyeV9jdCpzaXplb2Yoc3RydWN0IHVuaXBhaXIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBQSU9fVU5JTUFQOgorCQlpZiAoIXBlcm0pCisJCQlyZXR1cm4gLUVQRVJNOworCQlyZXR1cm4gY29uX3NldF91bmltYXAodmMsIHRtcC5lbnRyeV9jdCwgdG1wX2VudHJpZXMpOworCWNhc2UgR0lPX1VOSU1BUDoKKwkJaWYgKCFwZXJtICYmIGZnX2NvbnNvbGUgIT0gdmMtPnZjX251bSkKKwkJCXJldHVybiAtRVBFUk07CisJCXJldHVybiBjb25fZ2V0X3VuaW1hcCh2YywgdG1wLmVudHJ5X2N0LCAmKHVzZXJfdWQtPmVudHJ5X2N0KSwgdG1wX2VudHJpZXMpOworCX0KKwlyZXR1cm4gMDsKK30KKworbG9uZyB2dF9jb21wYXRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHZjX2RhdGEgKnZjID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY29uc29sZV9mb250X29wIG9wOwkvKiB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBoZXJlICovCisJc3RydWN0IGtiZF9zdHJ1Y3QgKmtiZDsKKwl1bnNpZ25lZCBpbnQgY29uc29sZTsKKwl2b2lkIF9fdXNlciAqdXAgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IHBlcm07CisJaW50IHJldCA9IDA7CisKKwljb25zb2xlID0gdmMtPnZjX251bTsKKworCWxvY2tfa2VybmVsKCk7CisKKwlpZiAoIXZjX2NvbnNfYWxsb2NhdGVkKGNvbnNvbGUpKSB7IAkvKiBpbXBvc3NpYmxlPyAqLworCQlyZXQgPSAtRU5PSU9DVExDTUQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVG8gaGF2ZSBwZXJtaXNzaW9ucyB0byBkbyBtb3N0IG9mIHRoZSB2dCBpb2N0bHMsIHdlIGVpdGhlciBoYXZlCisJICogdG8gYmUgdGhlIG93bmVyIG9mIHRoZSB0dHksIG9yIGhhdmUgQ0FQX1NZU19UVFlfQ09ORklHLgorCSAqLworCXBlcm0gPSAwOworCWlmIChjdXJyZW50LT5zaWduYWwtPnR0eSA9PSB0dHkgfHwgY2FwYWJsZShDQVBfU1lTX1RUWV9DT05GSUcpKQorCQlwZXJtID0gMTsKKworCWtiZCA9IGtiZF90YWJsZSArIGNvbnNvbGU7CisJc3dpdGNoIChjbWQpIHsKKwkvKgorCSAqIHRoZXNlIG5lZWQgc3BlY2lhbCBoYW5kbGVycyBmb3IgaW5jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlcworCSAqLworCWNhc2UgUElPX0ZPTlRYOgorCWNhc2UgR0lPX0ZPTlRYOgorCQlyZXQgPSBjb21wYXRfZm9udHhfaW9jdGwoY21kLCB1cCwgcGVybSwgJm9wKTsKKwkJYnJlYWs7CisKKwljYXNlIEtERk9OVE9QOgorCQlyZXQgPSBjb21wYXRfa2Rmb250b3BfaW9jdGwodXAsIHBlcm0sICZvcCwgdmMpOworCQlicmVhazsKKworCWNhc2UgUElPX1VOSU1BUDoKKwljYXNlIEdJT19VTklNQVA6CisJCXJldCA9IGRvX3VuaW1hcF9pb2N0bChjbWQsIHVwLCBwZXJtLCB2Yyk7CisJCWJyZWFrOworCisJLyoKKwkgKiBhbGwgdGhlc2UgdHJlYXQgJ2FyZycgYXMgYW4gaW50ZWdlcgorCSAqLworCWNhc2UgS0lPQ1NPVU5EOgorCWNhc2UgS0RNS1RPTkU6CisjaWZkZWYgQ09ORklHX1g4NgorCWNhc2UgS0RBRERJTzoKKwljYXNlIEtEREVMSU86CisjZW5kaWYKKwljYXNlIEtEU0VUTU9ERToKKwljYXNlIEtETUFQRElTUDoKKwljYXNlIEtEVU5NQVBESVNQOgorCWNhc2UgS0RTS0JNT0RFOgorCWNhc2UgS0RTS0JNRVRBOgorCWNhc2UgS0RTS0JMRUQ6CisJY2FzZSBLRFNFVExFRDoKKwljYXNlIEtEU0lHQUNDRVBUOgorCWNhc2UgVlRfQUNUSVZBVEU6CisJY2FzZSBWVF9XQUlUQUNUSVZFOgorCWNhc2UgVlRfUkVMRElTUDoKKwljYXNlIFZUX0RJU0FMTE9DQVRFOgorCWNhc2UgVlRfUkVTSVpFOgorCWNhc2UgVlRfUkVTSVpFWDoKKwkJZ290byBmYWxsYmFjazsKKworCS8qCisJICogdGhlIHJlc3QgaGFzIGEgY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZSBiZWhpbmQgYXJnLAorCSAqIGJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgaXQgdG8gYSBwcm9wZXIgNjQgYml0IHBvaW50ZXIuCisJICovCisJZGVmYXVsdDoKKwkJYXJnID0gKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpOworCQlnb3RvIGZhbGxiYWNrOworCX0KK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKKworZmFsbGJhY2s6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiB2dF9pb2N0bCh0dHksIGZpbGUsIGNtZCwgYXJnKTsKK30KKworCisjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLworCisKIC8qCi0gKiBQZXJmb3JtcyB0aGUgYmFjayBlbmQgb2YgYSB2dCBzd2l0Y2gKKyAqIFBlcmZvcm1zIHRoZSBiYWNrIGVuZCBvZiBhIHZ0IHN3aXRjaC4gQ2FsbGVkIHVuZGVyIHRoZSBjb25zb2xlCisgKiBzZW1hcGhvcmUuCiAgKi8KIHN0YXRpYyB2b2lkIGNvbXBsZXRlX2NoYW5nZV9jb25zb2xlKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAl1bnNpZ25lZCBjaGFyIG9sZF92Y19tb2RlOworCWludCBvbGQgPSBmZ19jb25zb2xlOwogCiAJbGFzdF9jb25zb2xlID0gZmdfY29uc29sZTsKIApAQCAtMTMyNSw3ICsxNjUwLDcgQEAKIAkvKgogCSAqIFdha2UgYW55b25lIHdhaXRpbmcgZm9yIHRoZWlyIFZUIHRvIGFjdGl2YXRlCiAJICovCi0JdnRfd2FrZV93YWl0YWN0aXZlKCk7CisJdnRfZXZlbnRfcG9zdChWVF9FVkVOVF9TV0lUQ0gsIG9sZCwgdmMtPnZjX251bSk7CiAJcmV0dXJuOwogfQogCkBAIC0xMzk4LDMgKzE3MjMsNTggQEAKIAogCWNvbXBsZXRlX2NoYW5nZV9jb25zb2xlKG5ld192Yyk7CiB9CisKKy8qIFBlcmZvcm0gYSBrZXJuZWwgdHJpZ2dlcmVkIFZUIHN3aXRjaCBmb3Igc3VzcGVuZC9yZXN1bWUgKi8KKworc3RhdGljIGludCBkaXNhYmxlX3Z0X3N3aXRjaDsKKworaW50IHZ0X21vdmVfdG9fY29uc29sZSh1bnNpZ25lZCBpbnQgdnQsIGludCBhbGxvYykKK3sKKwlpbnQgcHJldjsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkvKiBHcmFwaGljcyBtb2RlIC0gdXAgdG8gWCAqLworCWlmIChkaXNhYmxlX3Z0X3N3aXRjaCkgeworCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCXJldHVybiAwOworCX0KKwlwcmV2ID0gZmdfY29uc29sZTsKKworCWlmIChhbGxvYyAmJiB2Y19hbGxvY2F0ZSh2dCkpIHsKKwkJLyogd2UgY2FuJ3QgaGF2ZSBhIGZyZWUgVkMgZm9yIG5vdy4gVG9vIGJhZCwKKwkJICogd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHRoZSBzY3JlZW4gZm9yIG5vdy4gKi8KKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlpZiAoc2V0X2NvbnNvbGUodnQpKSB7CisJCS8qCisJCSAqIFdlJ3JlIHVuYWJsZSB0byBzd2l0Y2ggdG8gdGhlIFNVU1BFTkRfQ09OU09MRS4KKwkJICogTGV0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGtub3cgc28gaXQgY2FuIGRlY2lkZQorCQkgKiB3aGF0IHRvIGRvLgorCQkgKi8KKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWlmICh2dF93YWl0YWN0aXZlKHZ0ICsgMSkpIHsKKwkJcHJfZGVidWcoIlN1c3BlbmQ6IENhbid0IHN3aXRjaCBWQ3MuIik7CisJCXJldHVybiAtRUlOVFI7CisJfQorCXJldHVybiBwcmV2OworfQorCisvKgorICogTm9ybWFsbHkgZHVyaW5nIGEgc3VzcGVuZCwgd2UgYWxsb2NhdGUgYSBuZXcgY29uc29sZSBhbmQgc3dpdGNoIHRvIGl0LgorICogV2hlbiB3ZSByZXN1bWUsIHdlIHN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb25zb2xlLiAgVGhpcyBzd2l0Y2gKKyAqIGNhbiBiZSBzbG93LCBzbyBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBmcmFtZWJ1ZmZlciBjYW4gaGFuZGxlIHJlc3RvcmF0aW9uCisgKiBvZiB2aWRlbyByZWdpc3RlcnMgYW55d2F5cywgdGhlcmUncyBsaXR0bGUgcG9pbnQgaW4gZG9pbmcgdGhlIGNvbnNvbGUKKyAqIHN3aXRjaC4gIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBkaXNhYmxlIGl0IGJ5IHBhc3NpbmcgaXQgJzAnLgorICovCit2b2lkIHBtX3NldF92dF9zd2l0Y2goaW50IGRvX3N3aXRjaCkKK3sKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJZGlzYWJsZV92dF9zd2l0Y2ggPSAhZG9fc3dpdGNoOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKK30KK0VYUE9SVF9TWU1CT0wocG1fc2V0X3Z0X3N3aXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKaW5kZXggODVlNWRjMC4uYWJmNGEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYwpAQCAtMTM5LDYgKzEzOSwzMSBAQAogCWNuX25ldGxpbmtfc2VuZChtc2csIENOX0lEWF9QUk9DLCBHRlBfS0VSTkVMKTsKIH0KIAordm9pZCBwcm9jX3NpZF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBjbl9tc2cgKm1zZzsKKwlzdHJ1Y3QgcHJvY19ldmVudCAqZXY7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCV9fdTggYnVmZmVyW0NOX1BST0NfTVNHX1NJWkVdOworCisJaWYgKGF0b21pY19yZWFkKCZwcm9jX2V2ZW50X251bV9saXN0ZW5lcnMpIDwgMSkKKwkJcmV0dXJuOworCisJbXNnID0gKHN0cnVjdCBjbl9tc2cgKilidWZmZXI7CisJZXYgPSAoc3RydWN0IHByb2NfZXZlbnQgKiltc2ctPmRhdGE7CisJZ2V0X3NlcSgmbXNnLT5zZXEsICZldi0+Y3B1KTsKKwlrdGltZV9nZXRfdHMoJnRzKTsgLyogZ2V0IGhpZ2ggcmVzIG1vbm90b25pYyB0aW1lc3RhbXAgKi8KKwlwdXRfdW5hbGlnbmVkKHRpbWVzcGVjX3RvX25zKCZ0cyksIChfX3U2NCAqKSZldi0+dGltZXN0YW1wX25zKTsKKwlldi0+d2hhdCA9IFBST0NfRVZFTlRfU0lEOworCWV2LT5ldmVudF9kYXRhLnNpZC5wcm9jZXNzX3BpZCA9IHRhc2stPnBpZDsKKwlldi0+ZXZlbnRfZGF0YS5zaWQucHJvY2Vzc190Z2lkID0gdGFzay0+dGdpZDsKKworCW1lbWNweSgmbXNnLT5pZCwgJmNuX3Byb2NfZXZlbnRfaWQsIHNpemVvZihtc2ctPmlkKSk7CisJbXNnLT5hY2sgPSAwOyAvKiBub3QgdXNlZCAqLworCW1zZy0+bGVuID0gc2l6ZW9mKCpldik7CisJY25fbmV0bGlua19zZW5kKG1zZywgQ05fSURYX1BST0MsIEdGUF9LRVJORUwpOworfQorCiB2b2lkIHByb2NfZXhpdF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXN0cnVjdCBjbl9tc2cgKm1zZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCmluZGV4IDg1MDRhMjEuLmFkNDFmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWlkbGUuaD4KICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KIAogI2luY2x1ZGUgImNwdWlkbGUuaCIKIApAQCAtOTEsNiArOTIsNyBAQAogCS8qIGdpdmUgdGhlIGdvdmVybm9yIGFuIG9wcG9ydHVuaXR5IHRvIHJlZmxlY3Qgb24gdGhlIG91dGNvbWUgKi8KIAlpZiAoY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5yZWZsZWN0KQogCQljcHVpZGxlX2N1cnJfZ292ZXJub3ItPnJlZmxlY3QoZGV2KTsKKwl0cmFjZV9wb3dlcl9lbmQoMCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYwppbmRleCBmMWRmNTlmLi42ODEwNDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYwpAQCAtMiw4ICsyLDEyIEBACiAgKiBtZW51LmMgLSB0aGUgbWVudSBpZGxlIGdvdmVybm9yCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgQWRhbSBCZWxheSA8YWJlbGF5QG5vdmVsbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjoKKyAqICAgICAgICBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+CiAgKgotICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKiBUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIgYXMgZGVzY3JpYmVkCisgKiBpbiB0aGUgQ09QWUlORyBmaWxlIHRoYXQgYWNvbXBhbmllcyB0aGUgTGludXggS2VybmVsLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEzLDIyICsxNywxNTggQEAKICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotI2RlZmluZSBCUkVBS19GVVpaCTQJLyogNCB1cyAqLwotI2RlZmluZSBQUkVEX0hJU1RPUllfUENUCTUwCisjZGVmaW5lIEJVQ0tFVFMgMTIKKyNkZWZpbmUgUkVTT0xVVElPTiAxMDI0CisjZGVmaW5lIERFQ0FZIDQKKyNkZWZpbmUgTUFYX0lOVEVSRVNUSU5HIDUwMDAwCisKKy8qCisgKiBDb25jZXB0cyBhbmQgaWRlYXMgYmVoaW5kIHRoZSBtZW51IGdvdmVybm9yCisgKgorICogRm9yIHRoZSBtZW51IGdvdmVybm9yLCB0aGVyZSBhcmUgMyBkZWNpc2lvbiBmYWN0b3JzIGZvciBwaWNraW5nIGEgQworICogc3RhdGU6CisgKiAxKSBFbmVyZ3kgYnJlYWsgZXZlbiBwb2ludAorICogMikgUGVyZm9ybWFuY2UgaW1wYWN0CisgKiAzKSBMYXRlbmN5IHRvbGVyYW5jZSAoZnJvbSBwbXFvcyBpbmZyYXN0cnVjdHVyZSkKKyAqIFRoZXNlIHRoZXNlIHRocmVlIGZhY3RvcnMgYXJlIHRyZWF0ZWQgaW5kZXBlbmRlbnRseS4KKyAqCisgKiBFbmVyZ3kgYnJlYWsgZXZlbiBwb2ludAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEMgc3RhdGUgZW50cnkgYW5kIGV4aXQgaGF2ZSBhbiBlbmVyZ3kgY29zdCwgYW5kIGEgY2VydGFpbiBhbW91bnQgb2YgdGltZSBpbgorICogdGhlICBDIHN0YXRlIGlzIHJlcXVpcmVkIHRvIGFjdHVhbGx5IGJyZWFrIGV2ZW4gb24gdGhpcyBjb3N0LiBDUFVJRExFCisgKiBwcm92aWRlcyB1cyB0aGlzIGR1cmF0aW9uIGluIHRoZSAidGFyZ2V0X3Jlc2lkZW5jeSIgZmllbGQuIFNvIGFsbCB0aGF0IHdlCisgKiBuZWVkIGlzIGEgZ29vZCBwcmVkaWN0aW9uIG9mIGhvdyBsb25nIHdlJ2xsIGJlIGlkbGUuIExpa2UgdGhlIHRyYWRpdGlvbmFsCisgKiBtZW51IGdvdmVybm9yLCB3ZSBzdGFydCB3aXRoIHRoZSBhY3R1YWwga25vd24gIm5leHQgdGltZXIgZXZlbnQiIHRpbWUuCisgKgorICogU2luY2UgdGhlcmUgYXJlIG90aGVyIHNvdXJjZSBvZiB3YWtldXBzIChpbnRlcnJ1cHRzIGZvciBleGFtcGxlKSB0aGFuCisgKiB0aGUgbmV4dCB0aW1lciBldmVudCwgdGhpcyBlc3RpbWF0aW9uIGlzIHJhdGhlciBvcHRpbWlzdGljLiBUbyBnZXQgYQorICogbW9yZSByZWFsaXN0aWMgZXN0aW1hdGUsIGEgY29ycmVjdGlvbiBmYWN0b3IgaXMgYXBwbGllZCB0byB0aGUgZXN0aW1hdGUsCisgKiB0aGF0IGlzIGJhc2VkIG9uIGhpc3RvcmljIGJlaGF2aW9yLiBGb3IgZXhhbXBsZSwgaWYgaW4gdGhlIHBhc3QgdGhlIGFjdHVhbAorICogZHVyYXRpb24gYWx3YXlzIHdhcyA1MCUgb2YgdGhlIG5leHQgdGltZXIgdGljaywgdGhlIGNvcnJlY3Rpb24gZmFjdG9yIHdpbGwKKyAqIGJlIDAuNS4KKyAqCisgKiBtZW51IHVzZXMgYSBydW5uaW5nIGF2ZXJhZ2UgZm9yIHRoaXMgY29ycmVjdGlvbiBmYWN0b3IsIGhvd2V2ZXIgaXQgdXNlcyBhCisgKiBzZXQgb2YgZmFjdG9ycywgbm90IGp1c3QgYSBzaW5nbGUgZmFjdG9yLiBUaGlzIHN0ZW1zIGZyb20gdGhlIHJlYWxpemF0aW9uCisgKiB0aGF0IHRoZSByYXRpbyBpcyBkZXBlbmRlbnQgb24gdGhlIG9yZGVyIG9mIG1hZ25pdHVkZSBvZiB0aGUgZXhwZWN0ZWQKKyAqIGR1cmF0aW9uOyBpZiB3ZSBleHBlY3QgNTAwIG1pbGxpc2Vjb25kcyBvZiBpZGxlIHRpbWUgdGhlIGxpa2VsaWhvb2Qgb2YKKyAqIGdldHRpbmcgYW4gaW50ZXJydXB0IHZlcnkgZWFybHkgaXMgbXVjaCBoaWdoZXIgdGhhbiBpZiB3ZSBleHBlY3QgNTAgbWljcm8KKyAqIHNlY29uZHMgb2YgaWRsZSB0aW1lLiBBIHNlY29uZCBpbmRlcGVuZGVudCBmYWN0b3IgdGhhdCBoYXMgYmlnIGltcGFjdCBvbgorICogdGhlIGFjdHVhbCBmYWN0b3IgaXMgaWYgdGhlcmUgaXMgKGRpc2spIElPIG91dHN0YW5kaW5nIG9yIG5vdC4KKyAqIChhcyBhIHNwZWNpYWwgdHdpc3QsIHdlIGNvbnNpZGVyIGV2ZXJ5IHNsZWVwIGxvbmdlciB0aGFuIDUwIG1pbGxpc2Vjb25kcworICogYXMgcGVyZmVjdDsgdGhlcmUgYXJlIG5vIHBvd2VyIGdhaW5zIGZvciBzbGVlcGluZyBsb25nZXIgdGhhbiB0aGlzKQorICoKKyAqIEZvciB0aGVzZSB0d28gcmVhc29ucyB3ZSBrZWVwIGFuIGFycmF5IG9mIDEyIGluZGVwZW5kZW50IGZhY3RvcnMsIHRoYXQgZ2V0cworICogaW5kZXhlZCBiYXNlZCBvbiB0aGUgbWFnbml0dWRlIG9mIHRoZSBleHBlY3RlZCBkdXJhdGlvbiBhcyB3ZWxsIGFzIHRoZQorICogImlzIElPIG91dHN0YW5kaW5nIiBwcm9wZXJ0eS4KKyAqCisgKiBMaW1pdGluZyBQZXJmb3JtYW5jZSBJbXBhY3QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQyBzdGF0ZXMsIGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBsYXJnZSBleGl0IGxhdGVuY2llcywgY2FuIGhhdmUgYSByZWFsCisgKiBub3RpY2FibGUgaW1wYWN0IG9uIHdvcmtsb2Fkcywgd2hpY2ggaXMgbm90IGFjY2VwdGFibGUgZm9yIG1vc3Qgc3lzYWRtaW5zLAorICogYW5kIGluIGFkZGl0aW9uLCBsZXNzIHBlcmZvcm1hbmNlIGhhcyBhIHBvd2VyIHByaWNlIG9mIGl0cyBvd24uCisgKgorICogQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsIG1lbnUgYXNzdW1lcyB0aGF0IHRoZSBmb2xsb3dpbmcgaGV1cmlzdGljCisgKiBob2xkczoKKyAqICAgICBUaGUgYnVzaWVyIHRoZSBzeXN0ZW0sIHRoZSBsZXNzIGltcGFjdCBvZiBDIHN0YXRlcyBpcyBhY2NlcHRhYmxlCisgKgorICogVGhpcyBydWxlLW9mLXRodW1iIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgcGVyZm9ybWFuY2UtbXVsdGlwbGllcjoKKyAqIElmIHRoZSBleGl0IGxhdGVuY3kgdGltZXMgdGhlIHBlcmZvcm1hbmNlIG11bHRpcGxpZXIgaXMgbG9uZ2VyIHRoYW4KKyAqIHRoZSBwcmVkaWN0ZWQgZHVyYXRpb24sIHRoZSBDIHN0YXRlIGlzIG5vdCBjb25zaWRlcmVkIGEgY2FuZGlkYXRlCisgKiBmb3Igc2VsZWN0aW9uIGR1ZSB0byBhIHRvbyBoaWdoIHBlcmZvcm1hbmNlIGltcGFjdC4gU28gdGhlIGhpZ2hlcgorICogdGhpcyBtdWx0aXBsaWVyIGlzLCB0aGUgbG9uZ2VyIHdlIG5lZWQgdG8gYmUgaWRsZSB0byBwaWNrIGEgZGVlcCBDCisgKiBzdGF0ZSwgYW5kIHRodXMgdGhlIGxlc3MgbGlrZWx5IGEgYnVzeSBDUFUgd2lsbCBoaXQgc3VjaCBhIGRlZXAKKyAqIEMgc3RhdGUuCisgKgorICogVHdvIGZhY3RvcnMgYXJlIHVzZWQgaW4gZGV0ZXJtaW5nIHRoaXMgbXVsdGlwbGllcjoKKyAqIGEgdmFsdWUgb2YgMTAgaXMgYWRkZWQgZm9yIGVhY2ggcG9pbnQgb2YgInBlciBjcHUgbG9hZCBhdmVyYWdlIiB3ZSBoYXZlLgorICogYSB2YWx1ZSBvZiA1IHBvaW50cyBpcyBhZGRlZCBmb3IgZWFjaCBwcm9jZXNzIHRoYXQgaXMgd2FpdGluZyBmb3IKKyAqIElPIG9uIHRoaXMgQ1BVLgorICogKHRoZXNlIHZhbHVlcyBhcmUgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCkKKyAqCisgKiBUaGUgbG9hZCBhdmVyYWdlIGZhY3RvciBnaXZlcyBhIGxvbmdlciB0ZXJtIChmZXcgc2Vjb25kcykgaW5wdXQgdG8gdGhlCisgKiBkZWNpc2lvbiwgd2hpbGUgdGhlIGlvd2FpdCB2YWx1ZSBnaXZlcyBhIGNwdSBsb2NhbCBpbnN0YW50YW5pb3VzIGlucHV0LgorICogVGhlIGlvd2FpdCBmYWN0b3IgbWF5IGxvb2sgbG93LCBidXQgcmVhbGl6ZSB0aGF0IHRoaXMgaXMgYWxzbyBhbHJlYWR5CisgKiByZXByZXNlbnRlZCBpbiB0aGUgc3lzdGVtIGxvYWQgYXZlcmFnZS4KKyAqCisgKi8KIAogc3RydWN0IG1lbnVfZGV2aWNlIHsKIAlpbnQJCWxhc3Rfc3RhdGVfaWR4OworCWludCAgICAgICAgICAgICBuZWVkc191cGRhdGU7CiAKIAl1bnNpZ25lZCBpbnQJZXhwZWN0ZWRfdXM7Ci0JdW5zaWduZWQgaW50CXByZWRpY3RlZF91czsKLQl1bnNpZ25lZCBpbnQgICAgY3VycmVudF9wcmVkaWN0ZWRfdXM7Ci0JdW5zaWduZWQgaW50CWxhc3RfbWVhc3VyZWRfdXM7Ci0JdW5zaWduZWQgaW50CWVsYXBzZWRfdXM7CisJdTY0CQlwcmVkaWN0ZWRfdXM7CisJdW5zaWduZWQgaW50CW1lYXN1cmVkX3VzOworCXVuc2lnbmVkIGludAlleGl0X3VzOworCXVuc2lnbmVkIGludAlidWNrZXQ7CisJdTY0CQljb3JyZWN0aW9uX2ZhY3RvcltCVUNLRVRTXTsKIH07CiAKKworI2RlZmluZSBMT0FEX0lOVCh4KSAoKHgpID4+IEZTSElGVCkKKyNkZWZpbmUgTE9BRF9GUkFDKHgpIExPQURfSU5UKCgoeCkgJiAoRklYRURfMS0xKSkgKiAxMDApCisKK3N0YXRpYyBpbnQgZ2V0X2xvYWRhdmcodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRoaXMgPSB0aGlzX2NwdV9sb2FkKCk7CisKKworCXJldHVybiBMT0FEX0lOVCh0aGlzKSAqIDEwICsgTE9BRF9GUkFDKHRoaXMpIC8gMTA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdoaWNoX2J1Y2tldCh1bnNpZ25lZCBpbnQgZHVyYXRpb24pCit7CisJaW50IGJ1Y2tldCA9IDA7CisKKwkvKgorCSAqIFdlIGtlZXAgdHdvIGdyb3VwcyBvZiBzdGF0czsgb25lIHdpdGggbm8KKwkgKiBJTyBwZW5kaW5nLCBvbmUgd2l0aG91dC4KKwkgKiBUaGlzIGFsbG93cyB1cyB0byBjYWxjdWxhdGUKKwkgKiBFKGR1cmF0aW9uKXxpb3dhaXQKKwkgKi8KKwlpZiAobnJfaW93YWl0X2NwdSgpKQorCQlidWNrZXQgPSBCVUNLRVRTLzI7CisKKwlpZiAoZHVyYXRpb24gPCAxMCkKKwkJcmV0dXJuIGJ1Y2tldDsKKwlpZiAoZHVyYXRpb24gPCAxMDApCisJCXJldHVybiBidWNrZXQgKyAxOworCWlmIChkdXJhdGlvbiA8IDEwMDApCisJCXJldHVybiBidWNrZXQgKyAyOworCWlmIChkdXJhdGlvbiA8IDEwMDAwKQorCQlyZXR1cm4gYnVja2V0ICsgMzsKKwlpZiAoZHVyYXRpb24gPCAxMDAwMDApCisJCXJldHVybiBidWNrZXQgKyA0OworCXJldHVybiBidWNrZXQgKyA1OworfQorCisvKgorICogUmV0dXJuIGEgbXVsdGlwbGllciBmb3IgdGhlIGV4aXQgbGF0ZW5jeSB0aGF0IGlzIGludGVuZGVkCisgKiB0byB0YWtlIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cyBpbnRvIGFjY291bnQuCisgKiBUaGUgbW9yZSBwZXJmb3JtYW5jZSBjcml0aWNhbCB3ZSBlc3RpbWF0ZSB0aGUgc3lzdGVtCisgKiB0byBiZSwgdGhlIGhpZ2hlciB0aGlzIG11bHRpcGxpZXIsIGFuZCB0aHVzIHRoZSBoaWdoZXIKKyAqIHRoZSBiYXJyaWVyIHRvIGdvIHRvIGFuIGV4cGVuc2l2ZSBDIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lIGludCBwZXJmb3JtYW5jZV9tdWx0aXBsaWVyKHZvaWQpCit7CisJaW50IG11bHQgPSAxOworCisJLyogZm9yIGhpZ2hlciBsb2FkYXZnLCB3ZSBhcmUgbW9yZSByZWx1Y3RhbnQgKi8KKworCW11bHQgKz0gMiAqIGdldF9sb2FkYXZnKCk7CisKKwkvKiBmb3IgSU8gd2FpdCB0YXNrcyAocGVyIGNwdSEpIHdlIGFkZCA1eCBlYWNoICovCisJbXVsdCArPSAxMCAqIG5yX2lvd2FpdF9jcHUoKTsKKworCXJldHVybiBtdWx0OworfQorCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1lbnVfZGV2aWNlLCBtZW51X2RldmljZXMpOwogCitzdGF0aWMgdm9pZCBtZW51X3VwZGF0ZShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldik7CisKIC8qKgogICogbWVudV9zZWxlY3QgLSBzZWxlY3RzIHRoZSBuZXh0IGlkbGUgc3RhdGUgdG8gZW50ZXIKICAqIEBkZXY6IHRoZSBDUFUKQEAgLTM4LDQxICsxNzgsNjggQEAKIAlzdHJ1Y3QgbWVudV9kZXZpY2UgKmRhdGEgPSAmX19nZXRfY3B1X3ZhcihtZW51X2RldmljZXMpOwogCWludCBsYXRlbmN5X3JlcSA9IHBtX3Fvc19yZXF1aXJlbWVudChQTV9RT1NfQ1BVX0RNQV9MQVRFTkNZKTsKIAlpbnQgaTsKKwlpbnQgbXVsdGlwbGllcjsKIAotCS8qIFNwZWNpYWwgY2FzZSB3aGVuIHVzZXIgaGFzIHNldCB2ZXJ5IHN0cmljdCBsYXRlbmN5IHJlcXVpcmVtZW50ICovCi0JaWYgKHVubGlrZWx5KGxhdGVuY3lfcmVxID09IDApKSB7Ci0JCWRhdGEtPmxhc3Rfc3RhdGVfaWR4ID0gMDsKLQkJcmV0dXJuIDA7CisJZGF0YS0+bGFzdF9zdGF0ZV9pZHggPSAwOworCWRhdGEtPmV4aXRfdXMgPSAwOworCisJaWYgKGRhdGEtPm5lZWRzX3VwZGF0ZSkgeworCQltZW51X3VwZGF0ZShkZXYpOworCQlkYXRhLT5uZWVkc191cGRhdGUgPSAwOwogCX0KIAotCS8qIGRldGVybWluZSB0aGUgZXhwZWN0ZWQgcmVzaWRlbmN5IHRpbWUgKi8KLQlkYXRhLT5leHBlY3RlZF91cyA9Ci0JCSh1MzIpIGt0aW1lX3RvX25zKHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoKCkpIC8gMTAwMDsKKwkvKiBTcGVjaWFsIGNhc2Ugd2hlbiB1c2VyIGhhcyBzZXQgdmVyeSBzdHJpY3QgbGF0ZW5jeSByZXF1aXJlbWVudCAqLworCWlmICh1bmxpa2VseShsYXRlbmN5X3JlcSA9PSAwKSkKKwkJcmV0dXJuIDA7CiAKLQkvKiBSZWNhbGN1bGF0ZSBwcmVkaWN0ZWRfdXMgYmFzZWQgb24gcHJlZGljdGlvbl9oaXN0b3J5X3BjdCAqLwotCWRhdGEtPnByZWRpY3RlZF91cyAqPSBQUkVEX0hJU1RPUllfUENUOwotCWRhdGEtPnByZWRpY3RlZF91cyArPSAoMTAwIC0gUFJFRF9ISVNUT1JZX1BDVCkgKgotCQkJCWRhdGEtPmN1cnJlbnRfcHJlZGljdGVkX3VzOwotCWRhdGEtPnByZWRpY3RlZF91cyAvPSAxMDA7CisJLyogZGV0ZXJtaW5lIHRoZSBleHBlY3RlZCByZXNpZGVuY3kgdGltZSwgcm91bmQgdXAgKi8KKwlkYXRhLT5leHBlY3RlZF91cyA9CisJICAgIERJVl9ST1VORF9VUCgodTMyKWt0aW1lX3RvX25zKHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoKCkpLCAxMDAwKTsKKworCisJZGF0YS0+YnVja2V0ID0gd2hpY2hfYnVja2V0KGRhdGEtPmV4cGVjdGVkX3VzKTsKKworCW11bHRpcGxpZXIgPSBwZXJmb3JtYW5jZV9tdWx0aXBsaWVyKCk7CisKKwkvKgorCSAqIGlmIHRoZSBjb3JyZWN0aW9uIGZhY3RvciBpcyAwIChlZyBmaXJzdCB0aW1lIGluaXQgb3IgY3B1IGhvdHBsdWcKKwkgKiBldGMpLCB3ZSBhY3R1YWxseSB3YW50IHRvIHN0YXJ0IG91dCB3aXRoIGEgdW5pdHkgZmFjdG9yLgorCSAqLworCWlmIChkYXRhLT5jb3JyZWN0aW9uX2ZhY3RvcltkYXRhLT5idWNrZXRdID09IDApCisJCWRhdGEtPmNvcnJlY3Rpb25fZmFjdG9yW2RhdGEtPmJ1Y2tldF0gPSBSRVNPTFVUSU9OICogREVDQVk7CisKKwkvKiBNYWtlIHN1cmUgdG8gcm91bmQgdXAgZm9yIGhhbGYgbWljcm9zZWNvbmRzICovCisJZGF0YS0+cHJlZGljdGVkX3VzID0gRElWX1JPVU5EX0NMT1NFU1QoCisJCWRhdGEtPmV4cGVjdGVkX3VzICogZGF0YS0+Y29ycmVjdGlvbl9mYWN0b3JbZGF0YS0+YnVja2V0XSwKKwkJUkVTT0xVVElPTiAqIERFQ0FZKTsKKworCS8qCisJICogV2Ugd2FudCB0byBkZWZhdWx0IHRvIEMxIChobHQpLCBub3QgdG8gYnVzeSBwb2xsaW5nCisJICogdW5sZXNzIHRoZSB0aW1lciBpcyBoYXBwZW5pbmcgcmVhbGx5IHJlYWxseSBzb29uLgorCSAqLworCWlmIChkYXRhLT5leHBlY3RlZF91cyA+IDUpCisJCWRhdGEtPmxhc3Rfc3RhdGVfaWR4ID0gQ1BVSURMRV9EUklWRVJfU1RBVEVfU1RBUlQ7CisKIAogCS8qIGZpbmQgdGhlIGRlZXBlc3QgaWRsZSBzdGF0ZSB0aGF0IHNhdGlzZmllcyBvdXIgY29uc3RyYWludHMgKi8KLQlmb3IgKGkgPSBDUFVJRExFX0RSSVZFUl9TVEFURV9TVEFSVCArIDE7IGkgPCBkZXYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSBDUFVJRExFX0RSSVZFUl9TVEFURV9TVEFSVDsgaSA8IGRldi0+c3RhdGVfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqcyA9ICZkZXYtPnN0YXRlc1tpXTsKIAotCQlpZiAocy0+dGFyZ2V0X3Jlc2lkZW5jeSA+IGRhdGEtPmV4cGVjdGVkX3VzKQotCQkJYnJlYWs7CiAJCWlmIChzLT50YXJnZXRfcmVzaWRlbmN5ID4gZGF0YS0+cHJlZGljdGVkX3VzKQogCQkJYnJlYWs7CiAJCWlmIChzLT5leGl0X2xhdGVuY3kgPiBsYXRlbmN5X3JlcSkKIAkJCWJyZWFrOworCQlpZiAocy0+ZXhpdF9sYXRlbmN5ICogbXVsdGlwbGllciA+IGRhdGEtPnByZWRpY3RlZF91cykKKwkJCWJyZWFrOworCQlkYXRhLT5leGl0X3VzID0gcy0+ZXhpdF9sYXRlbmN5OworCQlkYXRhLT5sYXN0X3N0YXRlX2lkeCA9IGk7CiAJfQogCi0JZGF0YS0+bGFzdF9zdGF0ZV9pZHggPSBpIC0gMTsKLQlyZXR1cm4gaSAtIDE7CisJcmV0dXJuIGRhdGEtPmxhc3Rfc3RhdGVfaWR4OwogfQogCiAvKioKLSAqIG1lbnVfcmVmbGVjdCAtIGF0dGVtcHRzIHRvIGd1ZXNzIHdoYXQgaGFwcGVuZWQgYWZ0ZXIgZW50cnkKKyAqIG1lbnVfcmVmbGVjdCAtIHJlY29yZHMgdGhhdCBkYXRhIHN0cnVjdHVyZXMgbmVlZCB1cGRhdGUKICAqIEBkZXY6IHRoZSBDUFUKICAqCiAgKiBOT1RFOiBpdCdzIGltcG9ydGFudCB0byBiZSBmYXN0IGhlcmUgYmVjYXVzZSB0aGlzIG9wZXJhdGlvbiB3aWxsIGFkZCB0bwpAQCAtODEsMzkgKzI0OCw2MyBAQAogc3RhdGljIHZvaWQgbWVudV9yZWZsZWN0KHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtZW51X2RldmljZSAqZGF0YSA9ICZfX2dldF9jcHVfdmFyKG1lbnVfZGV2aWNlcyk7CisJZGF0YS0+bmVlZHNfdXBkYXRlID0gMTsKK30KKworLyoqCisgKiBtZW51X3VwZGF0ZSAtIGF0dGVtcHRzIHRvIGd1ZXNzIHdoYXQgaGFwcGVuZWQgYWZ0ZXIgZW50cnkKKyAqIEBkZXY6IHRoZSBDUFUKKyAqLworc3RhdGljIHZvaWQgbWVudV91cGRhdGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1lbnVfZGV2aWNlICpkYXRhID0gJl9fZ2V0X2NwdV92YXIobWVudV9kZXZpY2VzKTsKIAlpbnQgbGFzdF9pZHggPSBkYXRhLT5sYXN0X3N0YXRlX2lkeDsKIAl1bnNpZ25lZCBpbnQgbGFzdF9pZGxlX3VzID0gY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koZGV2KTsKIAlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqdGFyZ2V0ID0gJmRldi0+c3RhdGVzW2xhc3RfaWR4XTsKIAl1bnNpZ25lZCBpbnQgbWVhc3VyZWRfdXM7CisJdTY0IG5ld19mYWN0b3I7CiAKIAkvKgogCSAqIFVnaCwgdGhpcyBpZGxlIHN0YXRlIGRvZXNuJ3Qgc3VwcG9ydCByZXNpZGVuY3kgbWVhc3VyZW1lbnRzLCBzbyB3ZQogCSAqIGFyZSBiYXNpY2FsbHkgbG9zdCBpbiB0aGUgZGFyay4gIEFzIGEgY29tcHJvbWlzZSwgYXNzdW1lIHdlIHNsZXB0Ci0JICogZm9yIG9uZSBmdWxsIHN0YW5kYXJkIHRpbWVyIHRpY2suICBIb3dldmVyLCBiZSBhd2FyZSB0aGF0IHRoaXMKLQkgKiBjb3VsZCBwb3RlbnRpYWxseSByZXN1bHQgaW4gYSBzdWJvcHRpbWFsIHN0YXRlIHRyYW5zaXRpb24uCisJICogZm9yIHRoZSB3aG9sZSBleHBlY3RlZCB0aW1lLgogCSAqLwogCWlmICh1bmxpa2VseSghKHRhcmdldC0+ZmxhZ3MgJiBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCkpKQotCQlsYXN0X2lkbGVfdXMgPSBVU0VDX1BFUl9TRUMgLyBIWjsKKwkJbGFzdF9pZGxlX3VzID0gZGF0YS0+ZXhwZWN0ZWRfdXM7CisKKworCW1lYXN1cmVkX3VzID0gbGFzdF9pZGxlX3VzOwogCiAJLyoKLQkgKiBtZWFzdXJlZF91cyBhbmQgZWxhcHNlZF91cyBhcmUgdGhlIGN1bXVsYXRpdmUgaWRsZSB0aW1lLCBzaW5jZSB0aGUKLQkgKiBsYXN0IHRpbWUgd2Ugd2VyZSB3b2tlbiBvdXQgb2YgaWRsZSBieSBhbiBpbnRlcnJ1cHQuCisJICogV2UgY29ycmVjdCBmb3IgdGhlIGV4aXQgbGF0ZW5jeTsgd2UgYXJlIGFzc3VtaW5nIGhlcmUgdGhhdCB0aGUKKwkgKiBleGl0IGxhdGVuY3kgaGFwcGVucyBhZnRlciB0aGUgZXZlbnQgdGhhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLgogCSAqLwotCWlmIChkYXRhLT5lbGFwc2VkX3VzIDw9IGRhdGEtPmVsYXBzZWRfdXMgKyBsYXN0X2lkbGVfdXMpCi0JCW1lYXN1cmVkX3VzID0gZGF0YS0+ZWxhcHNlZF91cyArIGxhc3RfaWRsZV91czsKKwlpZiAobWVhc3VyZWRfdXMgPiBkYXRhLT5leGl0X3VzKQorCQltZWFzdXJlZF91cyAtPSBkYXRhLT5leGl0X3VzOworCisKKwkvKiB1cGRhdGUgb3VyIGNvcnJlY3Rpb24gcmF0aW8gKi8KKworCW5ld19mYWN0b3IgPSBkYXRhLT5jb3JyZWN0aW9uX2ZhY3RvcltkYXRhLT5idWNrZXRdCisJCQkqIChERUNBWSAtIDEpIC8gREVDQVk7CisKKwlpZiAoZGF0YS0+ZXhwZWN0ZWRfdXMgPiAwICYmIGRhdGEtPm1lYXN1cmVkX3VzIDwgTUFYX0lOVEVSRVNUSU5HKQorCQluZXdfZmFjdG9yICs9IFJFU09MVVRJT04gKiBtZWFzdXJlZF91cyAvIGRhdGEtPmV4cGVjdGVkX3VzOwogCWVsc2UKLQkJbWVhc3VyZWRfdXMgPSAtMTsKKwkJLyoKKwkJICogd2Ugd2VyZSBpZGxlIHNvIGxvbmcgdGhhdCB3ZSBjb3VudCBpdCBhcyBhIHBlcmZlY3QKKwkJICogcHJlZGljdGlvbgorCQkgKi8KKwkJbmV3X2ZhY3RvciArPSBSRVNPTFVUSU9OOwogCi0JLyogUHJlZGljdCB0aW1lIHVudGlsIG5leHQgYnJlYWsgZXZlbnQgKi8KLQlkYXRhLT5jdXJyZW50X3ByZWRpY3RlZF91cyA9IG1heChtZWFzdXJlZF91cywgZGF0YS0+bGFzdF9tZWFzdXJlZF91cyk7CisJLyoKKwkgKiBXZSBkb24ndCB3YW50IDAgYXMgZmFjdG9yOyB3ZSBhbHdheXMgd2FudCBhdCBsZWFzdAorCSAqIGEgdGlueSBiaXQgb2YgZXN0aW1hdGVkIHRpbWUuCisJICovCisJaWYgKG5ld19mYWN0b3IgPT0gMCkKKwkJbmV3X2ZhY3RvciA9IDE7CiAKLQlpZiAobGFzdF9pZGxlX3VzICsgQlJFQUtfRlVaWiA8Ci0JICAgIGRhdGEtPmV4cGVjdGVkX3VzIC0gdGFyZ2V0LT5leGl0X2xhdGVuY3kpIHsKLQkJZGF0YS0+bGFzdF9tZWFzdXJlZF91cyA9IG1lYXN1cmVkX3VzOwotCQlkYXRhLT5lbGFwc2VkX3VzID0gMDsKLQl9IGVsc2UgewotCQlkYXRhLT5lbGFwc2VkX3VzID0gbWVhc3VyZWRfdXM7Ci0JfQorCWRhdGEtPmNvcnJlY3Rpb25fZmFjdG9yW2RhdGEtPmJ1Y2tldF0gPSBuZXdfZmFjdG9yOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaCBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaAppbmRleCA4NzFjMTNiLi4xMmYzNTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCkBAIC0yODYsNyArMjg2LDcgQEAKICAqCQkJaXMgaXJyZXNwZWN0aXZlIG9mIHRoZSBtZW1vcnkgZGV2aWNlcyBiZWluZyBtb3VudGVkCiAgKgkJCW9uIGJvdGggc2lkZXMgb2YgdGhlIG1lbW9yeSBzdGljay4KICAqCi0gKiBTb2NrZXQgc2V0OgkJQWxsIG9mIHRoZSBtZW1vcnkgc3RpY2tzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBmb3IKKyAqIFNvY2tldCBzZXQ6CQlBbGwgb2YgdGhlIG1lbW9yeSBzdGlja3MgdGhhdCBhcmUgcmVxdWlyZWQgZm9yCiAgKgkJCWEgc2luZ2xlIG1lbW9yeSBhY2Nlc3Mgb3IgYWxsIG9mIHRoZSBtZW1vcnkgc3RpY2tzCiAgKgkJCXNwYW5uZWQgYnkgYSBjaGlwLXNlbGVjdCByb3cuICBBIHNpbmdsZSBzb2NrZXQgc2V0CiAgKgkJCWhhcyB0d28gY2hpcC1zZWxlY3Qgcm93cyBhbmQgaWYgZG91YmxlLXNpZGVkIHN0aWNrcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMKaW5kZXggZjc0ZWRhZS4uZTQ4NjRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCkBAIC00NDQsMTYgKzQ0NCwxMyBAQAogCWNhcmQtPmd1aWQgPSBndWlkOwogCiAJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7Ci0JY29uZmlnX3JvbSA9IGdlbmVyYXRlX2NvbmZpZ19yb20oY2FyZCwgJmxlbmd0aCk7Ci0JbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGluaywgJmNhcmRfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZjYXJkX211dGV4KTsKIAorCWNvbmZpZ19yb20gPSBnZW5lcmF0ZV9jb25maWdfcm9tKGNhcmQsICZsZW5ndGgpOwogCXJldCA9IGNhcmQtPmRyaXZlci0+ZW5hYmxlKGNhcmQsIGNvbmZpZ19yb20sIGxlbmd0aCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7Ci0JCWxpc3RfZGVsKCZjYXJkLT5saW5rKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYXJkX211dGV4KTsKLQl9CisJaWYgKHJldCA9PSAwKQorCQlsaXN0X2FkZF90YWlsKCZjYXJkLT5saW5rLCAmY2FyZF9saXN0KTsKKworCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwppbmRleCA0NzliMjJmLi5kYTYyOGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwpAQCAtODM0LDcgKzgzNCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIHRvcG9sb2d5X21hcCA9IHsKLQkubGVuZ3RoCQkJPSAweDIwMCwKKwkubGVuZ3RoCQkJPSAweDQwMCwKIAkuYWRkcmVzc19jYWxsYmFjawk9IGhhbmRsZV90b3BvbG9neV9tYXAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaCBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCmluZGV4IDYwNTI4MTYuLjdmZjZlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCkBAIC05Niw2ICs5NiwyMCBAQAogaW50IGZ3X2NvbXB1dGVfYmxvY2tfY3JjKHUzMiAqYmxvY2spOwogdm9pZCBmd19zY2hlZHVsZV9ibV93b3JrKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIGRlbGF5KTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfY2FyZCAqZndfY2FyZF9nZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit7CisJa3JlZl9nZXQoJmNhcmQtPmtyZWYpOworCisJcmV0dXJuIGNhcmQ7Cit9CisKK3ZvaWQgZndfY2FyZF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZ3X2NhcmRfcHV0KHN0cnVjdCBmd19jYXJkICpjYXJkKQoreworCWtyZWZfcHV0KCZjYXJkLT5rcmVmLCBmd19jYXJkX3JlbGVhc2UpOworfQorCiAKIC8qIC1jZGV2ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKaW5kZXggNzZiMzIxYi4uNWQ1MjQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKQEAgLTEyNzksOCArMTI3OSw4IEBACiAJICogdGhlIGludmVydGVkIHF1YWRsZXRzIGFuZCBhIGhlYWRlciBxdWFkbGV0LCB3ZSBzaGlmdCBvbmUKIAkgKiBiaXQgZXh0cmEgdG8gZ2V0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNlbGYgSURzLgogCSAqLwotCXNlbGZfaWRfY291bnQgPSAocmVnID4+IDMpICYgMHgzZmY7Ci0JaWYgKHNlbGZfaWRfY291bnQgPT0gMCkgeworCXNlbGZfaWRfY291bnQgPSAocmVnID4+IDMpICYgMHhmZjsKKwlpZiAoc2VsZl9pZF9jb3VudCA9PSAwIHx8IHNlbGZfaWRfY291bnQgPiAyNTIpIHsKIAkJZndfbm90aWZ5KCJpbmNvbnNpc3RlbnQgc2VsZiBJRHNcbiIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCBlNWRmODIyLi41MGYwMTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMzU0LDggKzM1NCw3IEBACiAJLyogRFZpQ08gTW9tb2JheSBGWC0zQSB3aXRoIFRTQjQyQUE5QSBicmlkZ2UgKi8gewogCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDAwMjgwMCwKIAkJLm1vZGVsCQkJPSAweDAwMDAwMCwKLQkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9ERUxBWV9JTlFVSVJZIHwKLQkJCQkJICBTQlAyX1dPUktBUk9VTkRfUE9XRVJfQ09ORElUSU9OLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EX1BPV0VSX0NPTkRJVElPTiwKIAl9LAogCS8qIEluaXRpbyBicmlkZ2VzLCBhY3R1YWxseSBvbmx5IG5lZWRlZCBmb3Igc29tZSBvbGRlciBvbmVzICovIHsKIAkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDAyMDAsCkBAIC00MjUsMTkgKzQyNCwyMCBAQAogCXN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUgPSBjYWxsYmFja19kYXRhOwogCXN0cnVjdCBzYnAyX29yYiAqb3JiOwogCXN0cnVjdCBzYnAyX3N0YXR1cyBzdGF0dXM7Ci0Jc2l6ZV90IGhlYWRlcl9zaXplOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodGNvZGUgIT0gVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVCB8fAotCSAgICBsZW5ndGggPT0gMCB8fCBsZW5ndGggPiBzaXplb2Yoc3RhdHVzKSkgeworCSAgICBsZW5ndGggPCA4IHx8IGxlbmd0aCA+IHNpemVvZihzdGF0dXMpKSB7CiAJCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfVFlQRV9FUlJPUik7CiAJCXJldHVybjsKIAl9CiAKLQloZWFkZXJfc2l6ZSA9IG1pbihsZW5ndGgsIDIgKiBzaXplb2YodTMyKSk7Ci0JZndfbWVtY3B5X2Zyb21fYmUzMigmc3RhdHVzLCBwYXlsb2FkLCBoZWFkZXJfc2l6ZSk7Ci0JaWYgKGxlbmd0aCA+IGhlYWRlcl9zaXplKQotCQltZW1jcHkoc3RhdHVzLmRhdGEsIHBheWxvYWQgKyA4LCBsZW5ndGggLSBoZWFkZXJfc2l6ZSk7CisJc3RhdHVzLnN0YXR1cyAgPSBiZTMyX3RvX2NwdXAocGF5bG9hZCk7CisJc3RhdHVzLm9yYl9sb3cgPSBiZTMyX3RvX2NwdXAocGF5bG9hZCArIDQpOworCW1lbXNldChzdGF0dXMuZGF0YSwgMCwgc2l6ZW9mKHN0YXR1cy5kYXRhKSk7CisJaWYgKGxlbmd0aCA+IDgpCisJCW1lbWNweShzdGF0dXMuZGF0YSwgcGF5bG9hZCArIDgsIGxlbmd0aCAtIDgpOworCiAJaWYgKFNUQVRVU19HRVRfU09VUkNFKHN0YXR1cykgPT0gMiB8fCBTVEFUVVNfR0VUX1NPVVJDRShzdGF0dXMpID09IDMpIHsKIAkJZndfbm90aWZ5KCJub24tb3JiIHJlbGF0ZWQgc3RhdHVzIHdyaXRlLCBub3QgaGFuZGxlZFxuIik7CiAJCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfQ09NUExFVEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9tZW1tYXAuYyBiL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMKaW5kZXggZDVlYThhNi4uNTZmOTIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9tZW1tYXAuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL21lbW1hcC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIHsKIAlzdHJ1Y3QgZmlybXdhcmVfbWFwX2VudHJ5ICplbnRyeTsKIAotCWVudHJ5ID0gYWxsb2NfYm9vdG1lbV9sb3coc2l6ZW9mKHN0cnVjdCBmaXJtd2FyZV9tYXBfZW50cnkpKTsKKwllbnRyeSA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBmaXJtd2FyZV9tYXBfZW50cnkpKTsKIAlpZiAoV0FSTl9PTighZW50cnkpKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL0tjb25maWcgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwppbmRleCA2YjRjNDg0Li4yYWQwMTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwpAQCAtMTYyLDYgKzE2MiwxNiBAQAogCSAgU2F5IHllcyBoZXJlIHRvIGFjY2VzcyB0aGUgR1BJTyBzaWduYWxzIG9mIFdNODMxeCBwb3dlciBtYW5hZ2VtZW50CiAJICBjaGlwcyBmcm9tIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcy4KIAorY29uZmlnIEdQSU9fQURQNTUyMAorCXRyaXN0YXRlICJHUElPIFN1cHBvcnQgZm9yIEFEUDU1MjAgUE1JQyIKKwlkZXBlbmRzIG9uIFBNSUNfQURQNTUyMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3Igb24tY2hpcCBHUElPIGZvdW5kCisJICBvbiBBbmFsb2cgRGV2aWNlcyBBRFA1NTIwIFBNSUNzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBhZHA1NTIwLWdwaW8uCisKIGNvbW1lbnQgIlBDSSBHUElPIGV4cGFuZGVyczoiCiAKIGNvbmZpZyBHUElPX0JUOFhYCkBAIC0xODAsNiArMTkwLDEyIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBHUElPX0xBTkdXRUxMCisJYm9vbCAiSW50ZWwgTW9vcmVzdG93biBQbGF0Zm9ybSBMYW5nd2VsbCBHUElPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgSW50ZWwgTW9vcmVzdG93biBwbGF0Zm9ybSBHUElPLgorCiBjb21tZW50ICJTUEkgR1BJTyBleHBhbmRlcnM6IgogCiBjb25maWcgR1BJT19NQVg3MzAxCkBAIC0xOTUsNCArMjExLDIzIEBACiAJICBTUEkgZHJpdmVyIGZvciBNaWNyb2NoaXAgTUNQMjNTMDggSS9PIGV4cGFuZGVyLiAgVGhpcyBwcm92aWRlcwogCSAgYSBHUElPIGludGVyZmFjZSBzdXBwb3J0aW5nIGlucHV0cyBhbmQgb3V0cHV0cy4KIAorY29uZmlnIEdQSU9fTUMzMzg4MAorCXRyaXN0YXRlICJGcmVlc2NhbGUgTUMzMzg4MCBoaWdoLXNpZGUvbG93LXNpZGUgc3dpdGNoIgorCWRlcGVuZHMgb24gU1BJX01BU1RFUgorCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzMzODgwIGhpZ2gtc2lkZS9sb3ctc2lkZSBzd2l0Y2guCisJICBUaGlzIHByb3ZpZGVzIEdQSU8gaW50ZXJmYWNlIHN1cHBvcnRpbmcgaW5wdXRzIGFuZCBvdXRwdXRzLgorCitjb21tZW50ICJBQzk3IEdQSU8gZXhwYW5kZXJzOiIKKworY29uZmlnIEdQSU9fVUNCMTQwMAorCWJvb2wgIlBoaWxpcHMgVUNCMTQwMCBHUElPIgorCWRlcGVuZHMgb24gVUNCMTQwMF9DT1JFCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFVDQjE0MDAgR1BJTyBwaW5zLgorCSAgVGhlIFVDQjE0MDAgaXMgYW4gQUM5NyBhdWRpbyBjb2RlYy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWNiMTQwMF9ncGlvLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IGVhN2M3NDUuLjAwYTUzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTQsMTMgKzQsMTcgQEAKIAogb2JqLSQoQ09ORklHX0dQSU9MSUIpCQkrPSBncGlvbGliLm8KIAorb2JqLSQoQ09ORklHX0dQSU9fQURQNTUyMCkJKz0gYWRwNTUyMC1ncGlvLm8KK29iai0kKENPTkZJR19HUElPX0xBTkdXRUxMKQkrPSBsYW5nd2VsbF9ncGlvLm8KIG9iai0kKENPTkZJR19HUElPX01BWDczMDEpCSs9IG1heDczMDEubwogb2JqLSQoQ09ORklHX0dQSU9fTUFYNzMyWCkJKz0gbWF4NzMyeC5vCitvYmotJChDT05GSUdfR1BJT19NQzMzODgwKQkrPSBtYzMzODgwLm8KIG9iai0kKENPTkZJR19HUElPX01DUDIzUzA4KQkrPSBtY3AyM3MwOC5vCiBvYmotJChDT05GSUdfR1BJT19QQ0E5NTNYKQkrPSBwY2E5NTN4Lm8KIG9iai0kKENPTkZJR19HUElPX1BDRjg1N1gpCSs9IHBjZjg1N3gubwogb2JqLSQoQ09ORklHX0dQSU9fUEwwNjEpCSs9IHBsMDYxLm8KIG9iai0kKENPTkZJR19HUElPX1RXTDQwMzApCSs9IHR3bDQwMzAtZ3Bpby5vCitvYmotJChDT05GSUdfR1BJT19VQ0IxNDAwKQkrPSB1Y2IxNDAwX2dwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fWElMSU5YKQkrPSB4aWxpbnhfZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19CVDhYWCkJKz0gYnQ4eHhncGlvLm8KIG9iai0kKENPTkZJR19HUElPX1ZSNDFYWCkJKz0gdnI0MXh4X2dpdS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vYWRwNTUyMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vYWRwNTUyMC1ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNWJiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9hZHA1NTIwLWdwaW8uYwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIEdQSU8gZHJpdmVyIGZvciBBbmFsb2cgRGV2aWNlcyBBRFA1NTIwIE1GRCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWRwNTUyMC5oPgorCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdHJ1Y3QgYWRwNTUyMF9ncGlvIHsKKwlzdHJ1Y3QgZGV2aWNlICptYXN0ZXI7CisJc3RydWN0IGdwaW9fY2hpcCBncGlvX2NoaXA7CisJdW5zaWduZWQgY2hhciBsdXRbQURQNTUyMF9NQVhHUElPU107CisJdW5zaWduZWQgbG9uZyBvdXRwdXQ7Cit9OworCitzdGF0aWMgaW50IGFkcDU1MjBfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2ZmKQoreworCXN0cnVjdCBhZHA1NTIwX2dwaW8gKmRldjsKKwl1aW50OF90IHJlZ192YWw7CisKKwlkZXYgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFkcDU1MjBfZ3BpbywgZ3Bpb19jaGlwKTsKKworCS8qCisJICogVGhlcmUgYXJlIGRlZGljYXRlZCByZWdpc3RlcnMgZm9yIEdQSU8gSU4vT1VULgorCSAqIE1ha2Ugc3VyZSB3ZSByZXR1cm4gdGhlIHJpZ2h0IHZhbHVlLCBldmVuIHdoZW4gY29uZmlndXJlZCBhcyBvdXRwdXQKKwkgKi8KKworCWlmICh0ZXN0X2JpdChvZmYsICZkZXYtPm91dHB1dCkpCisJCWFkcDU1MjBfcmVhZChkZXYtPm1hc3RlciwgR1BJT19PVVQsICZyZWdfdmFsKTsKKwllbHNlCisJCWFkcDU1MjBfcmVhZChkZXYtPm1hc3RlciwgR1BJT19JTiwgJnJlZ192YWwpOworCisJcmV0dXJuICEhKHJlZ192YWwgJiBkZXYtPmx1dFtvZmZdKTsKK30KKworc3RhdGljIHZvaWQgYWRwNTUyMF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQl1bnNpZ25lZCBvZmYsIGludCB2YWwpCit7CisJc3RydWN0IGFkcDU1MjBfZ3BpbyAqZGV2OworCWRldiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYWRwNTUyMF9ncGlvLCBncGlvX2NoaXApOworCisJaWYgKHZhbCkKKwkJYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgR1BJT19PVVQsIGRldi0+bHV0W29mZl0pOworCWVsc2UKKwkJYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgR1BJT19PVVQsIGRldi0+bHV0W29mZl0pOworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2ZmKQoreworCXN0cnVjdCBhZHA1NTIwX2dwaW8gKmRldjsKKwlkZXYgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFkcDU1MjBfZ3BpbywgZ3Bpb19jaGlwKTsKKworCWNsZWFyX2JpdChvZmYsICZkZXYtPm91dHB1dCk7CisKKwlyZXR1cm4gYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgR1BJT19DRkdfMiwgZGV2LT5sdXRbb2ZmXSk7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTUyMF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJdW5zaWduZWQgb2ZmLCBpbnQgdmFsKQoreworCXN0cnVjdCBhZHA1NTIwX2dwaW8gKmRldjsKKwlpbnQgcmV0ID0gMDsKKwlkZXYgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFkcDU1MjBfZ3BpbywgZ3Bpb19jaGlwKTsKKworCXNldF9iaXQob2ZmLCAmZGV2LT5vdXRwdXQpOworCisJaWYgKHZhbCkKKwkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fT1VULCBkZXYtPmx1dFtvZmZdKTsKKwllbHNlCisJCXJldCB8PSBhZHA1NTIwX2Nscl9iaXRzKGRldi0+bWFzdGVyLCBHUElPX09VVCwgZGV2LT5sdXRbb2ZmXSk7CisKKwlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgR1BJT19DRkdfMiwgZGV2LT5sdXRbb2ZmXSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ncGlvX3BsYXRmcm9tX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkcDU1MjBfZ3BpbyAqZGV2OworCXN0cnVjdCBncGlvX2NoaXAgKmdjOworCWludCByZXQsIGksIGdwaW9zOworCXVuc2lnbmVkIGNoYXIgY3RsX21hc2sgPSAwOworCisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBkZXYtPmlkICE9IElEX0FEUDU1MjApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAib25seSBBRFA1NTIwIHN1cHBvcnRzIEdQSU9cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvYyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYtPm1hc3RlciA9IHBkZXYtPmRldi5wYXJlbnQ7CisKKwlmb3IgKGdwaW9zID0gMCwgaSA9IDA7IGkgPCBBRFA1NTIwX01BWEdQSU9TOyBpKyspCisJCWlmIChwZGF0YS0+Z3Bpb19lbl9tYXNrICYgKDEgPDwgaSkpCisJCQlkZXYtPmx1dFtncGlvcysrXSA9IDEgPDwgaTsKKworCWlmIChncGlvcyA8IDEpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJZ2MgPSAmZGV2LT5ncGlvX2NoaXA7CisJZ2MtPmRpcmVjdGlvbl9pbnB1dCAgPSBhZHA1NTIwX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gYWRwNTUyMF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJZ2MtPmdldCA9IGFkcDU1MjBfZ3Bpb19nZXRfdmFsdWU7CisJZ2MtPnNldCA9IGFkcDU1MjBfZ3Bpb19zZXRfdmFsdWU7CisJZ2MtPmNhbl9zbGVlcCA9IDE7CisKKwlnYy0+YmFzZSA9IHBkYXRhLT5ncGlvX3N0YXJ0OworCWdjLT5uZ3BpbyA9IGdwaW9zOworCWdjLT5sYWJlbCA9IHBkZXYtPm5hbWU7CisJZ2MtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlyZXQgPSBhZHA1NTIwX2Nscl9iaXRzKGRldi0+bWFzdGVyLCBHUElPX0NGR18xLAorCQlwZGF0YS0+Z3Bpb19lbl9tYXNrKTsKKworCWlmIChwZGF0YS0+Z3Bpb19lbl9tYXNrICYgR1BJT19DMykKKwkJY3RsX21hc2sgfD0gQzNfTU9ERTsKKworCWlmIChwZGF0YS0+Z3Bpb19lbl9tYXNrICYgR1BJT19SMykKKwkJY3RsX21hc2sgfD0gUjNfTU9ERTsKKworCWlmIChjdGxfbWFzaykKKwkJcmV0ID0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgTEVEX0NPTlRST0wsCisJCQljdGxfbWFzayk7CisKKwlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgR1BJT19QVUxMVVAsCisJCXBkYXRhLT5ncGlvX3B1bGx1cF9tYXNrKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZkZXYtPmdwaW9fY2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHA1NTIwX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkcDU1MjBfZ3BpbyAqZGV2OworCWludCByZXQ7CisKKwlkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJmRldi0+Z3Bpb19jaGlwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIGZhaWxlZCwgJWRcbiIsCisJCQkJImdwaW9jaGlwX3JlbW92ZSgpIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlrZnJlZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHA1NTIwX2dwaW9fZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImFkcDU1MjAtZ3BpbyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGFkcDU1MjBfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkcDU1MjBfZ3Bpb19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWRwNTUyMF9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhZHA1NTIwX2dwaW9fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDU1MjBfZ3Bpb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFkcDU1MjBfZ3Bpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkcDU1MjBfZ3Bpb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwNTUyMF9ncGlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIEFEUDU1MjAgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkcDU1MjAtZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jIGIvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCmluZGV4IDk4NGI1ODcuLjI1NTlmMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKQEAgLTQ2LDggKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKIC8qIFN0ZWFsIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBidHR2IGRyaXZlci4gKi8KICNpbmNsdWRlICIuLi9tZWRpYS92aWRlby9idDh4eC9idDg0OC5oIgpAQCAtMzMxLDEzICszMzAsMTMgQEAKIAkucmVzdW1lCQk9IGJ0OHh4Z3Bpb19yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IGJ0OHh4Z3Bpb19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidDh4eGdwaW9faW5pdCh2b2lkKQogewogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZidDh4eGdwaW9fcGNpX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChidDh4eGdwaW9faW5pdCkKIAotc3RhdGljIHZvaWQgYnQ4eHhncGlvX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBidDh4eGdwaW9fZXhpdCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYnQ4eHhncGlvX3BjaV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKaW5kZXggNTFhOGQ0MS4uYmIxMWE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC03LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KIAogCiAvKiBPcHRpb25hbCBpbXBsZW1lbnRhdGlvbiBpbmZyYXN0cnVjdHVyZSBmb3IgR1BJTyBpbnRlcmZhY2VzLgpAQCAtNDksNiArNTEsMTMgQEAKICNkZWZpbmUgRkxBR19SRVNFUlZFRAkyCiAjZGVmaW5lIEZMQUdfRVhQT1JUCTMJLyogcHJvdGVjdGVkIGJ5IHN5c2ZzX2xvY2sgKi8KICNkZWZpbmUgRkxBR19TWVNGUwk0CS8qIGV4cG9ydGVkIHZpYSAvc3lzL2NsYXNzL2dwaW8vY29udHJvbCAqLworI2RlZmluZSBGTEFHX1RSSUdfRkFMTAk1CS8qIHRyaWdnZXIgb24gZmFsbGluZyBlZGdlICovCisjZGVmaW5lIEZMQUdfVFJJR19SSVNFCTYJLyogdHJpZ2dlciBvbiByaXNpbmcgZWRnZSAqLworCisjZGVmaW5lIFBERVNDX0lEX1NISUZUCTE2CS8qIGFkZCBuZXcgZmxhZ3MgYmVmb3JlIHRoaXMgb25lICovCisKKyNkZWZpbmUgR1BJT19GTEFHU19NQVNLCQkoKDEgPDwgUERFU0NfSURfU0hJRlQpIC0gMSkKKyNkZWZpbmUgR1BJT19UUklHR0VSX01BU0sJKEJJVChGTEFHX1RSSUdfRkFMTCkgfCBCSVQoRkxBR19UUklHX1JJU0UpKQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJY29uc3QgY2hhcgkJKmxhYmVsOwpAQCAtNTYsNiArNjUsMTUgQEAKIH07CiBzdGF0aWMgc3RydWN0IGdwaW9fZGVzYyBncGlvX2Rlc2NbQVJDSF9OUl9HUElPU107CiAKKyNpZmRlZiBDT05GSUdfR1BJT19TWVNGUworc3RydWN0IHBvbGxfZGVzYyB7CisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJc3RydWN0IHN5c2ZzX2RpcmVudAkqdmFsdWVfc2Q7Cit9OworCitzdGF0aWMgc3RydWN0IGlkciBwZGVzY19pZHI7CisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIGRlc2Nfc2V0X2xhYmVsKHN0cnVjdCBncGlvX2Rlc2MgKmQsIGNvbnN0IGNoYXIgKmxhYmVsKQogewogI2lmZGVmIENPTkZJR19ERUJVR19GUwpAQCAtMTg4LDEwICsyMDYsMTAgQEAKICAqICAgL3ZhbHVlCiAgKiAgICAgICogYWx3YXlzIHJlYWRhYmxlLCBzdWJqZWN0IHRvIGhhcmR3YXJlIGJlaGF2aW9yCiAgKiAgICAgICogbWF5IGJlIHdyaXRhYmxlLCBhcyB6ZXJvL25vbnplcm8KLSAqCi0gKiBSRVZJU0lUIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGFuIGF0dHJpYnV0ZSBmb3IgY29uZmlndXJpbmcgYXN5bmMKLSAqIG5vdGlmaWNhdGlvbnMsIGUuZy4gdG8gc3BlY2lmeSBwb2xsaW5nIGludGVydmFsIG9yIElSUSB0cmlnZ2VyIHR5cGUKLSAqIHRoYXQgd291bGQgZm9yIGV4YW1wbGUgdHJpZ2dlciBhIHBvbGwoKSBvbiB0aGUgInZhbHVlIi4KKyAqICAgL2VkZ2UKKyAqICAgICAgKiBjb25maWd1cmVzIGJlaGF2aW9yIG9mIHBvbGwoMikgb24gL3ZhbHVlCisgKiAgICAgICogYXZhaWxhYmxlIG9ubHkgaWYgcGluIGNhbiBnZW5lcmF0ZSBJUlFzIG9uIGlucHV0CisgKiAgICAgICogaXMgcmVhZC93cml0ZSBhcyAibm9uZSIsICJmYWxsaW5nIiwgInJpc2luZyIsIG9yICJib3RoIgogICovCiAKIHN0YXRpYyBzc2l6ZV90IGdwaW9fZGlyZWN0aW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjg4LDYgKzMwNiwxNzUgQEAKIHN0YXRpYyAvKmNvbnN0Ki8gREVWSUNFX0FUVFIodmFsdWUsIDA2NDQsCiAJCWdwaW9fdmFsdWVfc2hvdywgZ3Bpb192YWx1ZV9zdG9yZSk7CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX3N5c2ZzX2lycShpbnQgaXJxLCB2b2lkICpwcml2KQoreworCXN0cnVjdCB3b3JrX3N0cnVjdAkqd29yayA9IHByaXY7CisKKwlzY2hlZHVsZV93b3JrKHdvcmspOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19ub3RpZnlfc3lzZnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwb2xsX2Rlc2MJKnBkZXNjOworCisJcGRlc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvbGxfZGVzYywgd29yayk7CisJc3lzZnNfbm90aWZ5X2RpcmVudChwZGVzYy0+dmFsdWVfc2QpOworfQorCitzdGF0aWMgaW50IGdwaW9fc2V0dXBfaXJxKHN0cnVjdCBncGlvX2Rlc2MgKmRlc2MsIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgbG9uZyBncGlvX2ZsYWdzKQoreworCXN0cnVjdCBwb2xsX2Rlc2MJKnBkZXNjOworCXVuc2lnbmVkIGxvbmcJCWlycV9mbGFnczsKKwlpbnQJCQlyZXQsIGlycSwgaWQ7CisKKwlpZiAoKGRlc2MtPmZsYWdzICYgR1BJT19UUklHR0VSX01BU0spID09IGdwaW9fZmxhZ3MpCisJCXJldHVybiAwOworCisJaXJxID0gZ3Bpb190b19pcnEoZGVzYyAtIGdwaW9fZGVzYyk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWQgPSBkZXNjLT5mbGFncyA+PiBQREVTQ19JRF9TSElGVDsKKwlwZGVzYyA9IGlkcl9maW5kKCZwZGVzY19pZHIsIGlkKTsKKwlpZiAocGRlc2MpIHsKKwkJZnJlZV9pcnEoaXJxLCAmcGRlc2MtPndvcmspOworCQljYW5jZWxfd29ya19zeW5jKCZwZGVzYy0+d29yayk7CisJfQorCisJZGVzYy0+ZmxhZ3MgJj0gfkdQSU9fVFJJR0dFUl9NQVNLOworCisJaWYgKCFncGlvX2ZsYWdzKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZnJlZV9zZDsKKwl9CisKKwlpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKwlpZiAodGVzdF9iaXQoRkxBR19UUklHX0ZBTEwsICZncGlvX2ZsYWdzKSkKKwkJaXJxX2ZsYWdzIHw9IElSUUZfVFJJR0dFUl9GQUxMSU5HOworCWlmICh0ZXN0X2JpdChGTEFHX1RSSUdfUklTRSwgJmdwaW9fZmxhZ3MpKQorCQlpcnFfZmxhZ3MgfD0gSVJRRl9UUklHR0VSX1JJU0lORzsKKworCWlmICghcGRlc2MpIHsKKwkJcGRlc2MgPSBrbWFsbG9jKHNpemVvZigqcGRlc2MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZGVzYykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCWRvIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlpZiAoaWRyX3ByZV9nZXQoJnBkZXNjX2lkciwgR0ZQX0tFUk5FTCkpCisJCQkJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJnBkZXNjX2lkciwKKwkJCQkJCXBkZXNjLCAxLCAmaWQpOworCQl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZV9tZW07CisKKwkJZGVzYy0+ZmxhZ3MgJj0gR1BJT19GTEFHU19NQVNLOworCQlkZXNjLT5mbGFncyB8PSAodW5zaWduZWQgbG9uZylpZCA8PCBQREVTQ19JRF9TSElGVDsKKworCQlpZiAoZGVzYy0+ZmxhZ3MgPj4gUERFU0NfSURfU0hJRlQgIT0gaWQpIHsKKwkJCXJldCA9IC1FUkFOR0U7CisJCQlnb3RvIGZyZWVfaWQ7CisJCX0KKworCQlwZGVzYy0+dmFsdWVfc2QgPSBzeXNmc19nZXRfZGlyZW50KGRldi0+a29iai5zZCwgInZhbHVlIik7CisJCWlmICghcGRlc2MtPnZhbHVlX3NkKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBmcmVlX2lkOworCQl9CisJCUlOSVRfV09SSygmcGRlc2MtPndvcmssIGdwaW9fbm90aWZ5X3N5c2ZzKTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGdwaW9fc3lzZnNfaXJxLCBpcnFfZmxhZ3MsCisJCQkiZ3Bpb2xpYiIsICZwZGVzYy0+d29yayk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3NkOworCisJZGVzYy0+ZmxhZ3MgfD0gZ3Bpb19mbGFnczsKKwlyZXR1cm4gMDsKKworZnJlZV9zZDoKKwlzeXNmc19wdXQocGRlc2MtPnZhbHVlX3NkKTsKK2ZyZWVfaWQ6CisJaWRyX3JlbW92ZSgmcGRlc2NfaWRyLCBpZCk7CisJZGVzYy0+ZmxhZ3MgJj0gR1BJT19GTEFHU19NQVNLOworZnJlZV9tZW06CisJa2ZyZWUocGRlc2MpOworZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9IHRyaWdnZXJfdHlwZXNbXSA9IHsKKwl7ICJub25lIiwgICAgMCB9LAorCXsgImZhbGxpbmciLCBCSVQoRkxBR19UUklHX0ZBTEwpIH0sCisJeyAicmlzaW5nIiwgIEJJVChGTEFHX1RSSUdfUklTRSkgfSwKKwl7ICJib3RoIiwgICAgQklUKEZMQUdfVFJJR19GQUxMKSB8IEJJVChGTEFHX1RSSUdfUklTRSkgfSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGdwaW9fZWRnZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdAkJCXN0YXR1czsKKworCW11dGV4X2xvY2soJnN5c2ZzX2xvY2spOworCisJaWYgKCF0ZXN0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKSkKKwkJc3RhdHVzID0gLUVJTzsKKwllbHNlIHsKKwkJaW50IGk7CisKKwkJc3RhdHVzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHJpZ2dlcl90eXBlcyk7IGkrKykKKwkJCWlmICgoZGVzYy0+ZmxhZ3MgJiBHUElPX1RSSUdHRVJfTUFTSykKKwkJCQkJPT0gdHJpZ2dlcl90eXBlc1tpXS5mbGFncykgeworCQkJCXN0YXR1cyA9IHNwcmludGYoYnVmLCAiJXNcbiIsCisJCQkJCQkgdHJpZ2dlcl90eXBlc1tpXS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnN5c2ZzX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdwaW9fZWRnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBncGlvX2Rlc2MJKmRlc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90CQkJc3RhdHVzOworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0cmlnZ2VyX3R5cGVzKTsgaSsrKQorCQlpZiAoc3lzZnNfc3RyZXEodHJpZ2dlcl90eXBlc1tpXS5uYW1lLCBidWYpKQorCQkJZ290byBmb3VuZDsKKwlyZXR1cm4gLUVJTlZBTDsKKworZm91bmQ6CisJbXV0ZXhfbG9jaygmc3lzZnNfbG9jayk7CisKKwlpZiAoIXRlc3RfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpKQorCQlzdGF0dXMgPSAtRUlPOworCWVsc2UgeworCQlzdGF0dXMgPSBncGlvX3NldHVwX2lycShkZXNjLCBkZXYsIHRyaWdnZXJfdHlwZXNbaV0uZmxhZ3MpOworCQlpZiAoIXN0YXR1cykKKwkJCXN0YXR1cyA9IHNpemU7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlZGdlLCAwNjQ0LCBncGlvX2VkZ2Vfc2hvdywgZ3Bpb19lZGdlX3N0b3JlKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmdwaW9fYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfZGlyZWN0aW9uLmF0dHIsCiAJJmRldl9hdHRyX3ZhbHVlLmF0dHIsCkBAIC00NzMsNyArNjYwLDcgQEAKIAkJc3RydWN0IGRldmljZQkqZGV2OwogCiAJCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGRlc2MtPmNoaXAtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJICAgIGRlc2MsIGlvbmFtZSA/IGlvbmFtZSA6ICJncGlvJWQiLCBncGlvKTsKKwkJCQlkZXNjLCBpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyVkIiwgZ3Bpbyk7CiAJCWlmIChkZXYpIHsKIAkJCWlmIChkaXJlY3Rpb25fbWF5X2NoYW5nZSkKIAkJCQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKQEAgLTQ4MSw2ICs2NjgsMTQgQEAKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkJJmRldl9hdHRyX3ZhbHVlKTsKKworCQkJaWYgKCFzdGF0dXMgJiYgZ3Bpb190b19pcnEoZ3BpbykgPj0gMAorCQkJCQkmJiAoZGlyZWN0aW9uX21heV9jaGFuZ2UKKwkJCQkJCXx8ICF0ZXN0X2JpdChGTEFHX0lTX09VVCwKKwkJCQkJCQkmZGVzYy0+ZmxhZ3MpKSkKKwkJCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkJJmRldl9hdHRyX2VkZ2UpOworCiAJCQlpZiAoc3RhdHVzICE9IDApCiAJCQkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKIAkJfSBlbHNlCkBAIC01MDUsNiArNzAwLDUxIEBACiB9CiAKIC8qKgorICogZ3Bpb19leHBvcnRfbGluayAtIGNyZWF0ZSBhIHN5c2ZzIGxpbmsgdG8gYW4gZXhwb3J0ZWQgR1BJTyBub2RlCisgKiBAZGV2OiBkZXZpY2UgdW5kZXIgd2hpY2ggdG8gY3JlYXRlIHN5bWxpbmsKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBzeW1saW5rCisgKiBAZ3BpbzogZ3BpbyB0byBjcmVhdGUgc3ltbGluayB0bywgYWxyZWFkeSBleHBvcnRlZAorICoKKyAqIFNldCB1cCBhIHN5bWxpbmsgZnJvbSAvc3lzLy4uLi9kZXYvbmFtZSB0byAvc3lzL2NsYXNzL2dwaW8vZ3Bpb04KKyAqIG5vZGUuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5saW5raW5nLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIGFuIGVycm9yLgorICovCitpbnQgZ3Bpb19leHBvcnRfbGluayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IGdwaW9fZGVzYwkqZGVzYzsKKwlpbnQJCQlzdGF0dXMgPSAtRUlOVkFMOworCisJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKQorCQlnb3RvIGRvbmU7CisKKwltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKKworCWRlc2MgPSAmZ3Bpb19kZXNjW2dwaW9dOworCisJaWYgKHRlc3RfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpKSB7CisJCXN0cnVjdCBkZXZpY2UgKnRkZXY7CisKKwkJdGRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZncGlvX2NsYXNzLCBOVUxMLCBkZXNjLCBtYXRjaF9leHBvcnQpOworCQlpZiAodGRldiAhPSBOVUxMKSB7CisJCQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5rb2JqLCAmdGRldi0+a29iaiwKKwkJCQkJCW5hbWUpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CisKK2RvbmU6CisJaWYgKHN0YXR1cykKKwkJcHJfZGVidWcoIiVzOiBncGlvJWQgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgZ3Bpbywgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChncGlvX2V4cG9ydF9saW5rKTsKKworLyoqCiAgKiBncGlvX3VuZXhwb3J0IC0gcmV2ZXJzZSBlZmZlY3Qgb2YgZ3Bpb19leHBvcnQoKQogICogQGdwaW86IGdwaW8gdG8gbWFrZSB1bmF2YWlsYWJsZQogICoKQEAgLTUyNyw2ICs3NjcsNyBAQAogCiAJCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZncGlvX2NsYXNzLCBOVUxMLCBkZXNjLCBtYXRjaF9leHBvcnQpOwogCQlpZiAoZGV2KSB7CisJCQlncGlvX3NldHVwX2lycShkZXNjLCBkZXYsIDApOwogCQkJY2xlYXJfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpOwogCQkJcHV0X2RldmljZShkZXYpOwogCQkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKQEAgLTYxMSw2ICs4NTIsOCBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdW5zaWduZWQJZ3BpbzsKIAorCWlkcl9pbml0KCZwZGVzY19pZHIpOworCiAJc3RhdHVzID0gY2xhc3NfcmVnaXN0ZXIoJmdwaW9fY2xhc3MpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxMWNlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qIGxhbmd3ZWxsX2dwaW8uYyBNb29yZXN0b3duIHBsYXRmb3JtIExhbmd3ZWxsIGNoaXAgR1BJTyBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMDksICBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIE1vb3Jlc3Rvd24gcGxhdGZvcm0gTGFuZ3dlbGwgY2hpcC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKK3N0cnVjdCBsbndfZ3Bpb19yZWdpc3RlciB7CisJdTMyCUdQTFJbMl07CisJdTMyCUdQRFJbMl07CisJdTMyCUdQU1JbMl07CisJdTMyCUdQQ1JbMl07CisJdTMyCUdSRVJbMl07CisJdTMyCUdGRVJbMl07CisJdTMyCUdFRFJbMl07Cit9OworCitzdHJ1Y3QgbG53X2dwaW8geworCXN0cnVjdCBncGlvX2NoaXAJCWNoaXA7CisJc3RydWN0IGxud19ncGlvX3JlZ2lzdGVyIAkqcmVnX2Jhc2U7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJdW5zaWduZWQJCQlpcnFfYmFzZTsKK307CisKK3N0YXRpYyBpbnQgbG53X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbG53X2dwaW8sIGNoaXApOworCXU4IHJlZyA9IG9mZnNldCAvIDMyOworCXZvaWQgX19pb21lbSAqZ3BscjsKKworCWdwbHIgPSAodm9pZCBfX2lvbWVtICopKCZsbnctPnJlZ19iYXNlLT5HUExSW3JlZ10pOworCXJldHVybiByZWFkbChncGxyKSAmIEJJVChvZmZzZXQgJSAzMik7Cit9CisKK3N0YXRpYyB2b2lkIGxud19ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbG53X2dwaW8sIGNoaXApOworCXU4IHJlZyA9IG9mZnNldCAvIDMyOworCXZvaWQgX19pb21lbSAqZ3BzciwgKmdwY3I7CisKKwlpZiAodmFsdWUpIHsKKwkJZ3BzciA9ICh2b2lkIF9faW9tZW0gKikoJmxudy0+cmVnX2Jhc2UtPkdQU1JbcmVnXSk7CisJCXdyaXRlbChCSVQob2Zmc2V0ICUgMzIpLCBncHNyKTsKKwl9IGVsc2UgeworCQlncGNyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R1BDUltyZWddKTsKKwkJd3JpdGVsKEJJVChvZmZzZXQgJSAzMiksIGdwY3IpOworCX0KK30KKworc3RhdGljIGludCBsbndfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBsbndfZ3BpbywgY2hpcCk7CisJdTggcmVnID0gb2Zmc2V0IC8gMzI7CisJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCBfX2lvbWVtICpncGRyOworCisJZ3BkciA9ICh2b2lkIF9faW9tZW0gKikoJmxudy0+cmVnX2Jhc2UtPkdQRFJbcmVnXSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxudy0+bG9jaywgZmxhZ3MpOworCXZhbHVlID0gcmVhZGwoZ3Bkcik7CisJdmFsdWUgJj0gfkJJVChvZmZzZXQgJSAzMik7CisJd3JpdGVsKHZhbHVlLCBncGRyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsbnctPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsbndfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbG53X2dwaW8sIGNoaXApOworCXU4IHJlZyA9IG9mZnNldCAvIDMyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCBfX2lvbWVtICpncGRyOworCisJbG53X2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCWdwZHIgPSAodm9pZCBfX2lvbWVtICopKCZsbnctPnJlZ19iYXNlLT5HUERSW3JlZ10pOworCXNwaW5fbG9ja19pcnFzYXZlKCZsbnctPmxvY2ssIGZsYWdzKTsKKwl2YWx1ZSA9IHJlYWRsKGdwZHIpOworCXZhbHVlIHw9IEJJVChvZmZzZXQgJSAzMik7OworCXdyaXRlbCh2YWx1ZSwgZ3Bkcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG53LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG53X2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbG53X2dwaW8sIGNoaXApOworCXJldHVybiBsbnctPmlycV9iYXNlICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGxud19pcnFfdHlwZSh1bnNpZ25lZCBpcnEsIHVuc2lnbmVkIHR5cGUpCit7CisJc3RydWN0IGxud19ncGlvICpsbncgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXUzMiBncGlvID0gaXJxIC0gbG53LT5pcnFfYmFzZTsKKwl1OCByZWcgPSBncGlvIC8gMzI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsdWU7CisJdm9pZCBfX2lvbWVtICpncmVyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R1JFUltyZWddKTsKKwl2b2lkIF9faW9tZW0gKmdmZXIgPSAodm9pZCBfX2lvbWVtICopKCZsbnctPnJlZ19iYXNlLT5HRkVSW3JlZ10pOworCisJaWYgKGdwaW8gPCAwIHx8IGdwaW8gPiBsbnctPmNoaXAubmdwaW8pCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pcnFzYXZlKCZsbnctPmxvY2ssIGZsYWdzKTsKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQorCQl2YWx1ZSA9IHJlYWRsKGdyZXIpIHwgQklUKGdwaW8gJSAzMik7CisJZWxzZQorCQl2YWx1ZSA9IHJlYWRsKGdyZXIpICYgKH5CSVQoZ3BpbyAlIDMyKSk7CisJd3JpdGVsKHZhbHVlLCBncmVyKTsKKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQorCQl2YWx1ZSA9IHJlYWRsKGdmZXIpIHwgQklUKGdwaW8gJSAzMik7CisJZWxzZQorCQl2YWx1ZSA9IHJlYWRsKGdmZXIpICYgKH5CSVQoZ3BpbyAlIDMyKSk7CisJd3JpdGVsKHZhbHVlLCBnZmVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsbnctPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfTsKKworc3RhdGljIHZvaWQgbG53X2lycV91bm1hc2sodW5zaWduZWQgaXJxKQoreworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1MzIgZ3BpbyA9IGlycSAtIGxudy0+aXJxX2Jhc2U7CisJdTggcmVnID0gZ3BpbyAvIDMyOworCXZvaWQgX19pb21lbSAqZ2VkcjsKKworCWdlZHIgPSAodm9pZCBfX2lvbWVtICopKCZsbnctPnJlZ19iYXNlLT5HRURSW3JlZ10pOworCXdyaXRlbChCSVQoZ3BpbyAlIDMyKSwgZ2Vkcik7Cit9OworCitzdGF0aWMgdm9pZCBsbndfaXJxX21hc2sodW5zaWduZWQgaXJxKQoreworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsbndfaXJxY2hpcCA9IHsKKwkubmFtZQkJPSAiTE5XLUdQSU8iLAorCS5tYXNrCQk9IGxud19pcnFfbWFzaywKKwkudW5tYXNrCQk9IGxud19pcnFfdW5tYXNrLAorCS5zZXRfdHlwZQk9IGxud19pcnFfdHlwZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBsbndfZ3Bpb19pZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODBmKSB9LAorCXsgMCwgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBsbndfZ3Bpb19pZHMpOworCitzdGF0aWMgdm9pZCBsbndfaXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGxud19ncGlvICpsbncgPSAoc3RydWN0IGxud19ncGlvICopZ2V0X2lycV9kYXRhKGlycSk7CisJdTMyIHJlZywgZ3BpbzsKKwl2b2lkIF9faW9tZW0gKmdlZHI7CisJdTMyIGdlZHJfdjsKKworCS8qIGNoZWNrIEdQSU8gY29udHJvbGxlciB0byBjaGVjayB3aGljaCBwaW4gdHJpZ2dlcmVkIHRoZSBpbnRlcnJ1cHQgKi8KKwlmb3IgKHJlZyA9IDA7IHJlZyA8IGxudy0+Y2hpcC5uZ3BpbyAvIDMyOyByZWcrKykgeworCQlnZWRyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R0VEUltyZWddKTsKKwkJZ2Vkcl92ID0gcmVhZGwoZ2Vkcik7CisJCWlmICghZ2Vkcl92KQorCQkJY29udGludWU7CisJCWZvciAoZ3BpbyA9IHJlZyozMjsgZ3BpbyA8IHJlZyozMiszMjsgZ3BpbysrKSB7CisJCQlnZWRyX3YgPSByZWFkbChnZWRyKTsKKwkJCWlmIChnZWRyX3YgJiBCSVQoZ3BpbyAlIDMyKSkgeworCQkJCXByX2RlYnVnKCJwaW4gJWQgdHJpZ2dlcmVkXG4iLCBncGlvKTsKKwkJCQlnZW5lcmljX2hhbmRsZV9pcnEobG53LT5pcnFfYmFzZSArIGdwaW8pOworCQkJfQorCQl9CisJCS8qIGNsZWFyIHRoZSBlZGdlIGRldGVjdCBzdGF0dXMgYml0ICovCisJCXdyaXRlbChnZWRyX3YsIGdlZHIpOworCX0KKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbG53X2dwaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdm9pZCAqYmFzZTsKKwlpbnQgaTsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGxlbjsKKwlzdHJ1Y3QgbG53X2dwaW8gKmxudzsKKwl1MzIgaXJxX2Jhc2U7CisJdTMyIGdwaW9fYmFzZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCXJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImxhbmd3ZWxsX2dwaW8iKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHJlcXVlc3RpbmcgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnIyOworCX0KKwkvKiBnZXQgdGhlIGlycV9iYXNlIGZyb20gYmFyMSAqLworCXN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCWxlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShzdGFydCwgbGVuKTsKKwlpZiAoIWJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgbWFwcGluZyBiYXIxXG4iKTsKKwkJZ290byBlcnIzOworCX0KKwlpcnFfYmFzZSA9ICoodTMyICopYmFzZTsKKwlncGlvX2Jhc2UgPSAqKCh1MzIgKiliYXNlICsgMSk7CisJLyogcmVsZWFzZSB0aGUgSU8gbWFwcGluZywgc2luY2Ugd2UgYWxyZWFkeSBnZXQgdGhlIGluZm8gZnJvbSBiYXIxICovCisJaW91bm1hcChiYXNlKTsKKwkvKiBnZXQgdGhlIHJlZ2lzdGVyIGJhc2UgZnJvbSBiYXIwICovCisJc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwliYXNlID0gaW9yZW1hcF9ub2NhY2hlKHN0YXJ0LCBsZW4pOworCWlmICghYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciBtYXBwaW5nIGJhcjBcbiIpOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGVycjM7CisJfQorCisJbG53ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxud19ncGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsbncpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgbGFuZ3dlbGxfZ3BpbyBjaGlwIGRhdGFcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjQ7CisJfQorCWxudy0+cmVnX2Jhc2UgPSBiYXNlOworCWxudy0+aXJxX2Jhc2UgPSBpcnFfYmFzZTsKKwlsbnctPmNoaXAubGFiZWwgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKKwlsbnctPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gbG53X2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWxudy0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gbG53X2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwlsbnctPmNoaXAuZ2V0ID0gbG53X2dwaW9fZ2V0OworCWxudy0+Y2hpcC5zZXQgPSBsbndfZ3Bpb19zZXQ7CisJbG53LT5jaGlwLnRvX2lycSA9IGxud19ncGlvX3RvX2lycTsKKwlsbnctPmNoaXAuYmFzZSA9IGdwaW9fYmFzZTsKKwlsbnctPmNoaXAubmdwaW8gPSA2NDsKKwlsbnctPmNoaXAuY2FuX3NsZWVwID0gMDsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgbG53KTsKKwlyZXR2YWwgPSBncGlvY2hpcF9hZGQoJmxudy0+Y2hpcCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJsYW5nd2VsbCBncGlvY2hpcF9hZGQgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyNTsKKwl9CisJc2V0X2lycV9kYXRhKHBkZXYtPmlycSwgbG53KTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihwZGV2LT5pcnEsIGxud19pcnFfaGFuZGxlcik7CisJZm9yIChpID0gMDsgaSA8IGxudy0+Y2hpcC5uZ3BpbzsgaSsrKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGkgKyBsbnctPmlycV9iYXNlLCAmbG53X2lycWNoaXAsCisJCQkJCWhhbmRsZV9zaW1wbGVfaXJxLCAiZGVtdXgiKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaSArIGxudy0+aXJxX2Jhc2UsIGxudyk7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmxudy0+bG9jayk7CisJZ290byBkb25lOworZXJyNToKKwlrZnJlZShsbncpOworZXJyNDoKKwlpb3VubWFwKGJhc2UpOworZXJyMzoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyMjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Citkb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBsbndfZ3Bpb19kcml2ZXIgPSB7CisJLm5hbWUJCT0gImxhbmd3ZWxsX2dwaW8iLAorCS5pZF90YWJsZQk9IGxud19ncGlvX2lkcywKKwkucHJvYmUJCT0gbG53X2dwaW9fcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsbndfZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmxud19ncGlvX2RyaXZlcik7Cit9CisKK2RldmljZV9pbml0Y2FsbChsbndfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCmluZGV4IDdiODJlYWEuLjQ4MDk1NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKKysrIGIvZHJpdmVycy9ncGlvL21heDczMDEuYwpAQCAtMzM5LDMgKzMzOSw0IEBACiBNT0RVTEVfQVVUSE9SKCJKdWVyZ2VuIEJlaXNlcnQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTUFYNzMwMSBTUEkgYmFzZWQgR1BJTy1FeHBhbmRlciIpOworTU9EVUxFX0FMSUFTKCJzcGk6IiBEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbWMzMzg4MC5jIGIvZHJpdmVycy9ncGlvL21jMzM4ODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2QwMWJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL21jMzM4ODAuYwpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIG1jMzM4ODAuYyBNQzMzODgwIGhpZ2gtc2lkZS9sb3ctc2lkZSBzd2l0Y2ggR1BJTyBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogRnJlZXNjYWxlIE1DMzM4ODAgaGlnaC1zaWRlL2xvdy1zaWRlIHN3aXRjaAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL21jMzM4ODAuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm1jMzM4ODAiCisKKy8qCisgKiBQaW4gY29uZmlndXJhdGlvbnMsIHNlZSBNQVg3MzAxIGRhdGFzaGVldCBwYWdlIDYKKyAqLworI2RlZmluZSBQSU5fQ09ORklHX01BU0sgMHgwMworI2RlZmluZSBQSU5fQ09ORklHX0lOX1BVTExVUCAweDAzCisjZGVmaW5lIFBJTl9DT05GSUdfSU5fV09fUFVMTFVQIDB4MDIKKyNkZWZpbmUgUElOX0NPTkZJR19PVVQgMHgwMQorCisjZGVmaW5lIFBJTl9OVU1CRVIgOAorCisKKy8qCisgKiBTb21lIHJlZ2lzdGVycyBtdXN0IGJlIHJlYWQgYmFjayB0byBtb2RpZnkuCisgKiBUbyBzYXZlIHRpbWUgd2UgY2FjaGUgdGhlbSBoZXJlIGluIG1lbW9yeQorICovCitzdHJ1Y3QgbWMzMzg4MCB7CisJc3RydWN0IG11dGV4CWxvY2s7CS8qIHByb3RlY3QgZnJvbSBzaW11bHRhbm91cyBhY2Nlc3NlcyAqLworCXU4CQlwb3J0X2NvbmZpZzsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKK307CisKK3N0YXRpYyBpbnQgbWMzMzg4MF93cml0ZV9jb25maWcoc3RydWN0IG1jMzM4ODAgKm1jKQoreworCXJldHVybiBzcGlfd3JpdGUobWMtPnNwaSwgJm1jLT5wb3J0X2NvbmZpZywgc2l6ZW9mKG1jLT5wb3J0X2NvbmZpZykpOworfQorCisKK3N0YXRpYyBpbnQgX19tYzMzODgwX3NldChzdHJ1Y3QgbWMzMzg4MCAqbWMsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJbWMtPnBvcnRfY29uZmlnIHw9IDEgPDwgb2Zmc2V0OworCWVsc2UKKwkJbWMtPnBvcnRfY29uZmlnICY9IH4oMSA8PCBvZmZzZXQpOworCisJcmV0dXJuIG1jMzM4ODBfd3JpdGVfY29uZmlnKG1jKTsKK30KKworCitzdGF0aWMgdm9pZCBtYzMzODgwX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWMzMzg4MCAqbWMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1jMzM4ODAsIGNoaXApOworCisJbXV0ZXhfbG9jaygmbWMtPmxvY2spOworCisJX19tYzMzODgwX3NldChtYywgb2Zmc2V0LCB2YWx1ZSk7CisKKwltdXRleF91bmxvY2soJm1jLT5sb2NrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWMzMzg4MF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtYzMzODgwICptYzsKKwlzdHJ1Y3QgbWMzMzg4MF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5iYXNlKSB7CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiaW5jb3JyZWN0IG9yIG1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogYml0c19wZXJfd29yZCBjYW5ub3QgYmUgY29uZmlndXJlZCBpbiBwbGF0Zm9ybSBkYXRhCisJICovCisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWMzMzg4MCksIEdGUF9LRVJORUwpOworCWlmICghbWMpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmbWMtPmxvY2spOworCisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgbWMpOworCisJbWMtPnNwaSA9IHNwaTsKKworCW1jLT5jaGlwLmxhYmVsID0gRFJJVkVSX05BTUUsCisJbWMtPmNoaXAuc2V0ID0gbWMzMzg4MF9zZXQ7CisJbWMtPmNoaXAuYmFzZSA9IHBkYXRhLT5iYXNlOworCW1jLT5jaGlwLm5ncGlvID0gUElOX05VTUJFUjsKKwltYy0+Y2hpcC5jYW5fc2xlZXAgPSAxOworCW1jLT5jaGlwLmRldiA9ICZzcGktPmRldjsKKwltYy0+Y2hpcC5vd25lciA9IFRISVNfTU9EVUxFOworCisJbWMtPnBvcnRfY29uZmlnID0gMHgwMDsKKwkvKiB3cml0ZSB0d2ljZSwgYmVjYXVzZSBkdXJpbmcgaW5pdGlhbGlzYXRpb24gdGhlIGZpcnN0IHNldHRpbmcKKwkgKiBpcyBqdXN0IGZvciB0ZXN0aW5nIFNQSSBjb21tdW5pY2F0aW9uLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUKKwkgKiAicmVhbCIgY29uZmlndXJhdGlvbgorCSAqLworCXJldCA9IG1jMzM4ODBfd3JpdGVfY29uZmlnKG1jKTsKKwltYy0+cG9ydF9jb25maWcgPSAweDAwOworCWlmICghcmV0KQorCQlyZXQgPSBtYzMzODgwX3dyaXRlX2NvbmZpZyhtYyk7CisKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHdyaXRpbmcgdG8gIiBEUklWRVJfTkFNRSAiOiAlZFxuIiwgcmV0KTsKKwkJZ290byBleGl0X2Rlc3Ryb3k7CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZtYy0+Y2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2Rlc3Ryb3k7CisKKwlyZXR1cm4gcmV0OworCitleGl0X2Rlc3Ryb3k6CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJbXV0ZXhfZGVzdHJveSgmbWMtPmxvY2spOworCWtmcmVlKG1jKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jMzM4ODBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IG1jMzM4ODAgKm1jOworCWludCByZXQ7CisKKwltYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCWlmIChtYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCisJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZtYy0+Y2hpcCk7CisJaWYgKCFyZXQpIHsKKwkJbXV0ZXhfZGVzdHJveSgmbWMtPmxvY2spOworCQlrZnJlZShtYyk7CisJfSBlbHNlCisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiRmFpbGVkIHRvIHJlbW92ZSB0aGUgR1BJTyBjb250cm9sbGVyOiAlZFxuIiwKKwkJCXJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbWMzMzg4MF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtYzMzODgwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWMzMzg4MF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWMzMzg4MF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJm1jMzM4ODBfZHJpdmVyKTsKK30KKy8qIHJlZ2lzdGVyIGFmdGVyIHNwaSBwb3N0Y29yZSBpbml0Y2FsbCBhbmQgYmVmb3JlCisgKiBzdWJzeXMgaW5pdGNhbGxzIHRoYXQgbWF5IHJlbHkgb24gdGhlc2UgR1BJT3MKKyAqLworc3Vic3lzX2luaXRjYWxsKG1jMzM4ODBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYzMzODgwX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJm1jMzM4ODBfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1jMzM4ODBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYyBiL2RyaXZlcnMvZ3Bpby9tY3AyM3MwOC5jCmluZGV4IGY2ZmFlMGUuLmNkNjUxZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tY3AyM3MwOC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9tY3AyM3MwOC5jCkBAIC02LDEyICs2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL21jcDIzczA4Lmg+CiAKLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotCiAKIC8qIFJlZ2lzdGVycyBhcmUgYWxsIDggYml0cyB3aWRlLgogICoKQEAgLTQzMywzICs0MzEsNCBAQAogbW9kdWxlX2V4aXQobWNwMjNzMDhfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOm1jcDIzczA4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwppbmRleCBjZGI2NTc0Li42YTJmYjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KICNpZmRlZiBDT05GSUdfT0ZfR1BJTwpAQCAtMjAsOCArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLQogI2RlZmluZSBQQ0E5NTNYX0lOUFVUICAgICAgICAgIDAKICNkZWZpbmUgUENBOTUzWF9PVVRQVVQgICAgICAgICAxCiAjZGVmaW5lIFBDQTk1M1hfSU5WRVJUICAgICAgICAgMgpAQCAtNDAsNiArMzksNyBAQAogCXsgInBjYTk1NTciLCA4LCB9LAogCiAJeyAibWF4NzMxMCIsIDgsIH0sCisJeyAibWF4NzMxNSIsIDgsIH0sCiAJeyAicGNhNjEwNyIsIDgsIH0sCiAJeyAidGNhNjQwOCIsIDgsIH0sCiAJeyAidGNhNjQxNiIsIDE2LCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjZjg1N3guYyBiL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMKaW5kZXggOTUyNTcyNC4uMjlmMTljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BjZjg1N3guYworKysgYi9kcml2ZXJzL2dwaW8vcGNmODU3eC5jCkBAIC0yMCwxNCArMjAsMTQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BjZjg1N3guaD4KIAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHBjZjg1N3hfaWRbXSA9IHsKIAl7ICJwY2Y4NTc0IiwgOCB9LAorCXsgInBjZjg1NzRhIiwgOCB9LAogCXsgInBjYTg1NzQiLCA4IH0sCiAJeyAicGNhOTY3MCIsIDggfSwKIAl7ICJwY2E5NjcyIiwgOCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3VjYjE0MDBfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL3VjYjE0MDBfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vdWNiMTQwMF9ncGlvLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBQaGlsaXBzIFVDQjE0MDAgR1BJTyBkcml2ZXIKKyAqCisgKiBBdXRob3I6IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VjYjE0MDAuaD4KKworc3RydWN0IHVjYjE0MDBfZ3Bpb19kYXRhICp1Y2JkYXRhOworCitzdGF0aWMgaW50IHVjYjE0MDBfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKK3sKKwlzdHJ1Y3QgdWNiMTQwMF9ncGlvICpncGlvOworCWdwaW8gPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCB1Y2IxNDAwX2dwaW8sIGdjKTsKKwl1Y2IxNDAwX2dwaW9fc2V0X2RpcmVjdGlvbihncGlvLT5hYzk3LCBvZmYsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVjYjE0MDBfZ3Bpb19kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmYsIGludCB2YWwpCit7CisJc3RydWN0IHVjYjE0MDBfZ3BpbyAqZ3BpbzsKKwlncGlvID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgdWNiMTQwMF9ncGlvLCBnYyk7CisJdWNiMTQwMF9ncGlvX3NldF9kaXJlY3Rpb24oZ3Bpby0+YWM5Nywgb2ZmLCAxKTsKKwl1Y2IxNDAwX2dwaW9fc2V0X3ZhbHVlKGdwaW8tPmFjOTcsIG9mZiwgdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y2IxNDAwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmYpCit7CisJc3RydWN0IHVjYjE0MDBfZ3BpbyAqZ3BpbzsKKwlncGlvID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgdWNiMTQwMF9ncGlvLCBnYyk7CisJcmV0dXJuIHVjYjE0MDBfZ3Bpb19nZXRfdmFsdWUoZ3Bpby0+YWM5Nywgb2ZmKTsKK30KKworc3RhdGljIHZvaWQgdWNiMTQwMF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2ZmLCBpbnQgdmFsKQoreworCXN0cnVjdCB1Y2IxNDAwX2dwaW8gKmdwaW87CisJZ3BpbyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHVjYjE0MDBfZ3BpbywgZ2MpOworCXVjYjE0MDBfZ3Bpb19zZXRfdmFsdWUoZ3Bpby0+YWM5Nywgb2ZmLCB2YWwpOworfQorCitzdGF0aWMgaW50IHVjYjE0MDBfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVjYjE0MDBfZ3BpbyAqdWNiID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWlmICghKHVjYmRhdGEgJiYgdWNiZGF0YS0+Z3Bpb19vZmZzZXQpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgdWNiKTsKKworCXVjYi0+Z2MubGFiZWwgPSAidWNiMTQwMF9ncGlvIjsKKwl1Y2ItPmdjLmJhc2UgPSB1Y2JkYXRhLT5ncGlvX29mZnNldDsKKwl1Y2ItPmdjLm5ncGlvID0gMTA7CisJdWNiLT5nYy5vd25lciA9IFRISVNfTU9EVUxFOworCisJdWNiLT5nYy5kaXJlY3Rpb25faW5wdXQgPSB1Y2IxNDAwX2dwaW9fZGlyX2luOworCXVjYi0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IHVjYjE0MDBfZ3Bpb19kaXJfb3V0OworCXVjYi0+Z2MuZ2V0ID0gdWNiMTQwMF9ncGlvX2dldDsKKwl1Y2ItPmdjLnNldCA9IHVjYjE0MDBfZ3Bpb19zZXQ7CisJdWNiLT5nYy5jYW5fc2xlZXAgPSAxOworCisJZXJyID0gZ3Bpb2NoaXBfYWRkKCZ1Y2ItPmdjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWlmICh1Y2JkYXRhICYmIHVjYmRhdGEtPmdwaW9fc2V0dXApCisJCWVyciA9IHVjYmRhdGEtPmdwaW9fc2V0dXAoJmRldi0+ZGV2LCB1Y2ItPmdjLm5ncGlvKTsKKworZXJyOgorCXJldHVybiBlcnI7CisKK30KKworc3RhdGljIGludCB1Y2IxNDAwX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgdWNiMTQwMF9ncGlvICp1Y2IgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKHVjYmRhdGEgJiYgdWNiZGF0YS0+Z3Bpb190ZWFyZG93bikgeworCQllcnIgPSB1Y2JkYXRhLT5ncGlvX3RlYXJkb3duKCZkZXYtPmRldiwgdWNiLT5nYy5uZ3Bpbyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGdwaW9jaGlwX3JlbW92ZSgmdWNiLT5nYyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWNiMTQwMF9ncGlvX2RyaXZlciA9IHsKKwkucHJvYmUJPSB1Y2IxNDAwX2dwaW9fcHJvYmUsCisJLnJlbW92ZQk9IHVjYjE0MDBfZ3Bpb19yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAidWNiMTQwMF9ncGlvIgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1Y2IxNDAwX2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnVjYjE0MDBfZ3Bpb19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdWNiMTQwMF9ncGlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWNiMTQwMF9ncGlvX2RyaXZlcik7Cit9CisKK3ZvaWQgX19pbml0IHVjYjE0MDBfZ3Bpb19zZXRfZGF0YShzdHJ1Y3QgdWNiMTQwMF9ncGlvX2RhdGEgKmRhdGEpCit7CisJdWNiZGF0YSA9IGRhdGE7Cit9CisKK21vZHVsZV9pbml0KHVjYjE0MDBfZ3Bpb19pbml0KTsKK21vZHVsZV9leGl0KHVjYjE0MDBfZ3Bpb19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFVDQjE0MDAgR1BJTyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggMzliMzkzZC4uZTRkOTcxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTE4LDYgKzE4LDE0IEBACiAJICBkZXRhaWxzLiAgWW91IHNob3VsZCBhbHNvIHNlbGVjdCBhbmQgY29uZmlndXJlIEFHUAogCSAgKC9kZXYvYWdwZ2FydCkgc3VwcG9ydC4KIAorY29uZmlnIERSTV9LTVNfSEVMUEVSCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIERSTQorCXNlbGVjdCBGQgorCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFIGlmICFFTUJFRERFRAorCWhlbHAKKwkgIEZCIGFuZCBDUlRDIGhlbHBlcnMgZm9yIEtNUyBkcml2ZXJzLgorCiBjb25maWcgRFJNX1RUTQogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBEUk0KQEAgLTM2LDYgKzQ0LDcgQEAKIGNvbmZpZyBEUk1fUjEyOAogCXRyaXN0YXRlICJBVEkgUmFnZSAxMjgiCiAJZGVwZW5kcyBvbiBEUk0gJiYgUENJCisJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBBVEkgUmFnZSAxMjggZ3JhcGhpY3MgY2FyZC4gIElmIE0KIAkgIGlzIHNlbGVjdGVkLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHIxMjguICBBR1Agc3VwcG9ydCBmb3IKQEAgLTQ3LDggKzU2LDkgQEAKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCi0Jc2VsZWN0IEZCCi0Jc2VsZWN0IEZSQU1FQlVGRkVSX0NPTlNPTEUgaWYgIUVNQkVEREVECisJc2VsZWN0IEZXX0xPQURFUgorICAgICAgICBzZWxlY3QgRFJNX0tNU19IRUxQRVIKKyAgICAgICAgc2VsZWN0IERSTV9UVE0KIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gQVRJIFJhZGVvbiBncmFwaGljcyBjYXJkLiAgVGhlcmUKIAkgIGFyZSBib3RoIFBDSSBhbmQgQUdQIHZlcnNpb25zLiAgWW91IGRvbid0IG5lZWQgdG8gY2hvb3NlIHRoaXMgdG8KQEAgLTgyLDExICs5MiwxMCBAQAogY29uZmlnIERSTV9JOTE1CiAJdHJpc3RhdGUgImk5MTUgZHJpdmVyIgogCWRlcGVuZHMgb24gQUdQX0lOVEVMCisJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAotCXNlbGVjdCBGQgotCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFIGlmICFFTUJFRERFRAogCSMgaTkxNSBkZXBlbmRzIG9uIEFDUElfVklERU8gd2hlbiBBQ1BJIGlzIGVuYWJsZWQKIAkjIGJ1dCBmb3Igc2VsZWN0IHRvIHdvcmssIG5lZWQgdG8gc2VsZWN0IEFDUElfVklERU8ncyBkZXBlbmRlbmNpZXMsIGljawogCXNlbGVjdCBWSURFT19PVVRQVVRfQ09OVFJPTCBpZiBBQ1BJCkBAIC0xMTYsNiArMTI1LDcgQEAKIGNvbmZpZyBEUk1fTUdBCiAJdHJpc3RhdGUgIk1hdHJveCBnMjAwL2c0MDAiCiAJZGVwZW5kcyBvbiBEUk0KKwlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWF0cm94IEcyMDAsIEc0MDAgb3IgRzQ1MCBncmFwaGljcwogCSAgY2FyZC4gIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWdhLiAgQUdQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggZmUyM2YyOS4uM2M4ODI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMTAsMTEgKzEwLDE1IEBACiAJCWRybV9sb2NrLm8gZHJtX21lbW9yeS5vIGRybV9wcm9jLm8gZHJtX3N0dWIubyBkcm1fdm0ubyBcCiAJCWRybV9hZ3BzdXBwb3J0Lm8gZHJtX3NjYXR0ZXIubyBhdGlfcGNpZ2FydC5vIGRybV9wY2kubyBcCiAJCWRybV9zeXNmcy5vIGRybV9oYXNodGFiLm8gZHJtX3NtYW4ubyBkcm1fbW0ubyBcCi0JCWRybV9jcnRjLm8gZHJtX2NydGNfaGVscGVyLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubyBcCi0JCWRybV9pbmZvLm8gZHJtX2RlYnVnZnMubworCQlkcm1fY3J0Yy5vIGRybV9tb2Rlcy5vIGRybV9lZGlkLm8gXAorCQlkcm1faW5mby5vIGRybV9kZWJ1Z2ZzLm8gZHJtX2VuY29kZXJfc2xhdmUubwogCiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogCitkcm1fa21zX2hlbHBlci15IDo9IGRybV9mYl9oZWxwZXIubyBkcm1fY3J0Y19oZWxwZXIubworCitvYmotJChDT05GSUdfRFJNX0tNU19IRUxQRVIpICs9IGRybV9rbXNfaGVscGVyLm8KKwogb2JqLSQoQ09ORklHX0RSTSkJKz0gZHJtLm8KIG9iai0kKENPTkZJR19EUk1fVFRNKQkrPSB0dG0vCiBvYmotJChDT05GSUdfRFJNX1RERlgpCSs9IHRkZngvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCmluZGV4IDYyNDZlM2YuLjNkMDllMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCkBAIC0zMTAsMTAgKzMxMCwxMCBAQAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+b2Zmc2V0LCBtYXAtPnNpemUpOwogCiAJCWJyZWFrOwotCWNhc2UgX0RSTV9HRU06Ci0JCURSTV9FUlJPUigidHJpZWQgdG8gcm1tYXAgR0VNIG9iamVjdFxuIik7Ci0JCWJyZWFrOwogCX0KKwljYXNlIF9EUk1fR0VNOgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGFkZG1hcCBHRU0gb2JqZWN0XG4iKTsKKwkJYnJlYWs7CiAJY2FzZSBfRFJNX1NDQVRURVJfR0FUSEVSOgogCQlpZiAoIWRldi0+c2cpIHsKIAkJCWtmcmVlKG1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMKaW5kZXggMGU5OTRhMC4uMGUzYmQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYwpAQCAtNDUsNiArNDUsMjMgQEAKIAkJY2xmbHVzaChwYWdlX3ZpcnR1YWwgKyBpKTsKIAlrdW5tYXBfYXRvbWljKHBhZ2VfdmlydHVhbCwgS01fVVNFUjApOwogfQorCitzdGF0aWMgdm9pZCBkcm1fY2FjaGVfZmx1c2hfY2xmbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZXNbXSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJbWIoKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCisJCWRybV9jbGZsdXNoX3BhZ2UoKnBhZ2VzKyspOworCW1iKCk7Cit9CisKK3N0YXRpYyB2b2lkCitkcm1fY2xmbHVzaF9pcGlfaGFuZGxlcih2b2lkICpudWxsKQoreworCXdiaW52ZCgpOworfQogI2VuZGlmCiAKIHZvaWQKQEAgLTUzLDE3ICs3MCwzMCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2KQogCWlmIChjcHVfaGFzX2NsZmx1c2gpIHsKLQkJdW5zaWduZWQgbG9uZyBpOwotCi0JCW1iKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKLQkJCWRybV9jbGZsdXNoX3BhZ2UoKnBhZ2VzKyspOwotCQltYigpOwotCisJCWRybV9jYWNoZV9mbHVzaF9jbGZsdXNoKHBhZ2VzLCBudW1fcGFnZXMpOwogCQlyZXR1cm47CiAJfQogCi0Jd2JpbnZkKCk7CisJaWYgKG9uX2VhY2hfY3B1KGRybV9jbGZsdXNoX2lwaV9oYW5kbGVyLCBOVUxMLCAxKSAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjYWNoZSBmbHVzaC5cbiIpOworCisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQorCXVuc2lnbmVkIGxvbmcgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKKwkJdm9pZCAqcGFnZV92aXJ0dWFsOworCisJCWlmICh1bmxpa2VseShwYWdlID09IE5VTEwpKQorCQkJY29udGludWU7CisKKwkJcGFnZV92aXJ0dWFsID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZV92aXJ0dWFsLAorCQkJCSAgICh1bnNpZ25lZCBsb25nKXBhZ2VfdmlydHVhbCArIFBBR0VfU0laRSk7CisJCWt1bm1hcF9hdG9taWMocGFnZV92aXJ0dWFsLCBLTV9VU0VSMCk7CisJfQorI2Vsc2UKKwlwcmludGsoS0VSTl9FUlIgIkFyY2hpdGVjdHVyZSBoYXMgbm8gZHJtX2NhY2hlLmMgc3VwcG9ydFxuIik7CisJV0FSTl9PTl9PTkNFKDEpOwogI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jbGZsdXNoX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKaW5kZXggMmY2MzFjNy4uYmE3MjhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKQEAgLTY4LDEwICs2OCwxMCBAQAogICovCiBzdGF0aWMgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fc2NhbGluZ19tb2RlX2VudW1fbGlzdFtdID0KIHsKLQl7IERSTV9NT0RFX1NDQUxFX05PTl9HUFUsICJOb24tR1BVIiB9LAotCXsgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTiwgIkZ1bGxzY3JlZW4iIH0sCi0JeyBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRSwgIk5vIHNjYWxlIiB9LAotCXsgRFJNX01PREVfU0NBTEVfQVNQRUNULCAiQXNwZWN0IiB9LAorCXsgRFJNX01PREVfU0NBTEVfTk9ORSwgIk5vbmUiIH0sCisJeyBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOLCAiRnVsbCIgfSwKKwl7IERSTV9NT0RFX1NDQUxFX0NFTlRFUiwgIkNlbnRlciIgfSwKKwl7IERSTV9NT0RFX1NDQUxFX0FTUEVDVCwgIkZ1bGwgYXNwZWN0IiB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZHJtX2RpdGhlcmluZ19tb2RlX2VudW1fbGlzdFtdID0KQEAgLTEwOCw2ICsxMDgsNyBAQAogCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvc2l0ZSwgIkNvbXBvc2l0ZSIgfSwgLyogVFYtb3V0ICovCiAJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPLCAgICAiU1ZJREVPIiAgICB9LCAvKiBUVi1vdXQgKi8KIAl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb25lbnQsICJDb21wb25lbnQiIH0sIC8qIFRWLW91dCAqLworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NDQVJULCAgICAgIlNDQVJUIiAgICAgfSwgLyogVFYtb3V0ICovCiB9OwogCiBEUk1fRU5VTV9OQU1FX0ZOKGRybV9nZXRfdHZfc2VsZWN0X25hbWUsIGRybV90dl9zZWxlY3RfZW51bV9saXN0KQpAQCAtMTE4LDYgKzExOSw3IEBACiAJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQ29tcG9zaXRlLCAiQ29tcG9zaXRlIiB9LCAvKiBUVi1vdXQgKi8KIAl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TVklERU8sICAgICJTVklERU8iICAgIH0sIC8qIFRWLW91dCAqLwogCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvbmVudCwgIkNvbXBvbmVudCIgfSwgLyogVFYtb3V0ICovCisJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU0NBUlQsICAgICAiU0NBUlQiICAgICB9LCAvKiBUVi1vdXQgKi8KIH07CiAKIERSTV9FTlVNX05BTUVfRk4oZHJtX2dldF90dl9zdWJjb25uZWN0b3JfbmFtZSwKQEAgLTE0Niw2ICsxNDgsNyBAQAogCXsgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0LCAiRGlzcGxheVBvcnQiLCAwIH0sCiAJeyBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEsICJIRE1JIFR5cGUgQSIsIDAgfSwKIAl7IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQiwgIkhETUkgVHlwZSBCIiwgMCB9LAorCXsgRFJNX01PREVfQ09OTkVDVE9SX1RWLCAiVFYiLCAwIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fZW5jb2Rlcl9lbnVtX2xpc3RbXSA9CkBAIC0xNjUsNiArMTY4LDcgQEAKIAkJIGVuY29kZXItPmJhc2UuaWQpOwogCXJldHVybiBidWY7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9nZXRfZW5jb2Rlcl9uYW1lKTsKIAogY2hhciAqZHJtX2dldF9jb25uZWN0b3JfbmFtZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewpAQCAtNjk5LDYgKzcwMyw0MiBAQAogCQlkcm1fcHJvcGVydHlfYWRkX2VudW0oZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5LCBpLAogCQkJCSAgICAgIGksIG1vZGVzW2ldKTsKIAorCWRldi0+bW9kZV9jb25maWcudHZfYnJpZ2h0bmVzc19wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLAorCQkJCSAgICAiYnJpZ2h0bmVzcyIsIDIpOworCWRldi0+bW9kZV9jb25maWcudHZfYnJpZ2h0bmVzc19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2JyaWdodG5lc3NfcHJvcGVydHktPnZhbHVlc1sxXSA9IDEwMDsKKworCWRldi0+bW9kZV9jb25maWcudHZfY29udHJhc3RfcHJvcGVydHkgPQorCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwKKwkJCQkgICAgImNvbnRyYXN0IiwgMik7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9jb250cmFzdF9wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2NvbnRyYXN0X3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxMDA7CisKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsCisJCQkJICAgICJmbGlja2VyIHJlZHVjdGlvbiIsIDIpOworCWRldi0+bW9kZV9jb25maWcudHZfZmxpY2tlcl9yZWR1Y3Rpb25fcHJvcGVydHktPnZhbHVlc1swXSA9IDA7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTAwOworCisJZGV2LT5tb2RlX2NvbmZpZy50dl9vdmVyc2Nhbl9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLAorCQkJCSAgICAib3ZlcnNjYW4iLCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X292ZXJzY2FuX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAwOworCWRldi0+bW9kZV9jb25maWcudHZfb3ZlcnNjYW5fcHJvcGVydHktPnZhbHVlc1sxXSA9IDEwMDsKKworCWRldi0+bW9kZV9jb25maWcudHZfc2F0dXJhdGlvbl9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLAorCQkJCSAgICAic2F0dXJhdGlvbiIsIDIpOworCWRldi0+bW9kZV9jb25maWcudHZfc2F0dXJhdGlvbl9wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X3NhdHVyYXRpb25fcHJvcGVydHktPnZhbHVlc1sxXSA9IDEwMDsKKworCWRldi0+bW9kZV9jb25maWcudHZfaHVlX3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsCisJCQkJICAgICJodWUiLCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2h1ZV9wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2h1ZV9wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTAwOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2NyZWF0ZV90dl9wcm9wZXJ0aWVzKTsKQEAgLTEwNDQsNyArMTA4NCw3IEBACiAJCWlmIChmaWxlX3ByaXYtPm1hc3Rlci0+bWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0NPTlRST0wpIHsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LAogCQkJCQkgICAgaGVhZCkgewotCQkJCURSTV9ERUJVRygiQ1JUQyBJRCBpcyAlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CisJCQkJRFJNX0RFQlVHX0tNUygiQ1JUQyBJRCBpcyAlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CiAJCQkJaWYgKHB1dF91c2VyKGNydGMtPmJhc2UuaWQsIGNydGNfaWQgKyBjb3BpZWQpKSB7CiAJCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJCWdvdG8gb3V0OwpAQCAtMTA3Miw3ICsxMTEyLDcgQEAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwKIAkJCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwKIAkJCQkJICAgIGhlYWQpIHsKLQkJCQlEUk1fREVCVUcoIkVOQ09ERVIgSUQgaXMgJWRcbiIsCisJCQkJRFJNX0RFQlVHX0tNUygiRU5DT0RFUiBJRCBpcyAlZFxuIiwKIAkJCQkJICBlbmNvZGVyLT5iYXNlLmlkKTsKIAkJCQlpZiAocHV0X3VzZXIoZW5jb2Rlci0+YmFzZS5pZCwgZW5jb2Rlcl9pZCArCiAJCQkJCSAgICAgY29waWVkKSkgewpAQCAtMTEwMyw3ICsxMTQzLDcgQEAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLAogCQkJCQkgICAgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsCiAJCQkJCSAgICBoZWFkKSB7Ci0JCQkJRFJNX0RFQlVHKCJDT05ORUNUT1IgSUQgaXMgJWRcbiIsCisJCQkJRFJNX0RFQlVHX0tNUygiQ09OTkVDVE9SIElEIGlzICVkXG4iLAogCQkJCQkgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CiAJCQkJaWYgKHB1dF91c2VyKGNvbm5lY3Rvci0+YmFzZS5pZCwKIAkJCQkJICAgICBjb25uZWN0b3JfaWQgKyBjb3BpZWQpKSB7CkBAIC0xMTI3LDcgKzExNjcsNyBAQAogCX0KIAljYXJkX3Jlcy0+Y291bnRfY29ubmVjdG9ycyA9IGNvbm5lY3Rvcl9jb3VudDsKIAotCURSTV9ERUJVRygiQ291bnRlZCAlZCAlZCAlZFxuIiwgY2FyZF9yZXMtPmNvdW50X2NydGNzLAorCURSTV9ERUJVR19LTVMoIkNvdW50ZWQgJWQgJWQgJWRcbiIsIGNhcmRfcmVzLT5jb3VudF9jcnRjcywKIAkJICBjYXJkX3Jlcy0+Y291bnRfY29ubmVjdG9ycywgY2FyZF9yZXMtPmNvdW50X2VuY29kZXJzKTsKIAogb3V0OgpAQCAtMTIzMCw3ICsxMjcwLDcgQEAKIAogCW1lbXNldCgmdV9tb2RlLCAwLCBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKSk7CiAKLQlEUk1fREVCVUcoImNvbm5lY3RvciBpZCAlZDpcbiIsIG91dF9yZXNwLT5jb25uZWN0b3JfaWQpOworCURSTV9ERUJVR19LTVMoImNvbm5lY3RvciBpZCAlZDpcbiIsIG91dF9yZXNwLT5jb25uZWN0b3JfaWQpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAKQEAgLTE0MDYsNyArMTQ0Niw3IEBACiAJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBjcnRjX3JlcS0+Y3J0Y19pZCwKIAkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKLQkJRFJNX0RFQlVHKCJVbmtub3duIENSVEMgSUQgJWRcbiIsIGNydGNfcmVxLT5jcnRjX2lkKTsKKwkJRFJNX0RFQlVHX0tNUygiVW5rbm93biBDUlRDIElEICVkXG4iLCBjcnRjX3JlcS0+Y3J0Y19pZCk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE0MTksNyArMTQ1OSw4IEBACiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGNmYiwKIAkJCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQkJCWlmIChjcnRjZmIgPT0gY3J0YykgewotCQkJCQlEUk1fREVCVUcoIlVzaW5nIGN1cnJlbnQgZmIgZm9yIHNldG1vZGVcbiIpOworCQkJCQlEUk1fREVCVUdfS01TKCJVc2luZyBjdXJyZW50IGZiIGZvciAiCisJCQkJCQkJInNldG1vZGVcbiIpOwogCQkJCQlmYiA9IGNydGMtPmZiOwogCQkJCX0KIAkJCX0KQEAgLTE0MjcsNyArMTQ2OCw4IEBACiAJCQlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIGNydGNfcmVxLT5mYl9pZCwKIAkJCQkJCSAgIERSTV9NT0RFX09CSkVDVF9GQik7CiAJCQlpZiAoIW9iaikgewotCQkJCURSTV9ERUJVRygiVW5rbm93biBGQiBJRCVkXG4iLCBjcnRjX3JlcS0+ZmJfaWQpOworCQkJCURSTV9ERUJVR19LTVMoIlVua25vd24gRkIgSUQlZFxuIiwKKwkJCQkJCWNydGNfcmVxLT5mYl9pZCk7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTE0NDAsMTMgKzE0ODIsMTMgQEAKIAl9CiAKIAlpZiAoY3J0Y19yZXEtPmNvdW50X2Nvbm5lY3RvcnMgPT0gMCAmJiBtb2RlKSB7Ci0JCURSTV9ERUJVRygiQ291bnQgY29ubmVjdG9ycyBpcyAwIGJ1dCBtb2RlIHNldFxuIik7CisJCURSTV9ERUJVR19LTVMoIkNvdW50IGNvbm5lY3RvcnMgaXMgMCBidXQgbW9kZSBzZXRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoY3J0Y19yZXEtPmNvdW50X2Nvbm5lY3RvcnMgPiAwICYmICghbW9kZSB8fCAhZmIpKSB7Ci0JCURSTV9ERUJVRygiQ291bnQgY29ubmVjdG9ycyBpcyAlZCBidXQgbm8gbW9kZSBvciBmYiBzZXRcbiIsCisJCURSTV9ERUJVR19LTVMoIkNvdW50IGNvbm5lY3RvcnMgaXMgJWQgYnV0IG5vIG1vZGUgb3IgZmIgc2V0XG4iLAogCQkJICBjcnRjX3JlcS0+Y291bnRfY29ubmVjdG9ycyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtMTQ3OSw3ICsxNTIxLDggQEAKIAkJCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgb3V0X2lkLAogCQkJCQkJICAgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUik7CiAJCQlpZiAoIW9iaikgewotCQkJCURSTV9ERUJVRygiQ29ubmVjdG9yIGlkICVkIHVua25vd25cbiIsIG91dF9pZCk7CisJCQkJRFJNX0RFQlVHX0tNUygiQ29ubmVjdG9yIGlkICVkIHVua25vd25cbiIsCisJCQkJCQlvdXRfaWQpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0xNTEyLDcgKzE1NTUsNyBAQAogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlpbnQgcmV0ID0gMDsKIAotCURSTV9ERUJVRygiXG4iKTsKKwlEUk1fREVCVUdfS01TKCJcbiIpOwogCiAJaWYgKCFyZXEtPmZsYWdzKSB7CiAJCURSTV9FUlJPUigibm8gb3BlcmF0aW9uIHNldFxuIik7CkBAIC0xNTIyLDcgKzE1NjUsNyBAQAogCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgcmVxLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKLQkJRFJNX0RFQlVHKCJVbmtub3duIENSVEMgSUQgJWRcbiIsIHJlcS0+Y3J0Y19pZCk7CisJCURSTV9ERUJVR19LTVMoIlVua25vd24gQ1JUQyBJRCAlZFxuIiwgcmVxLT5jcnRjX2lkKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDZhYWEyY2IuLmZlODY5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTMzLDE1ICszMyw2IEBACiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKIAotLyoKLSAqIERldGFpbGVkIG1vZGUgaW5mbyBmb3IgODAweDYwMEA2MEh6Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBzdGRfbW9kZXNbXSA9IHsKLQl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9ERUZBVUxULCA0MDAwMCwgODAwLCA4NDAsCi0JCSAgIDk2OCwgMTA1NiwgMCwgNjAwLCA2MDEsIDYwNSwgNjI4LCAwLAotCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotfTsKLQogc3RhdGljIHZvaWQgZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgIGludCBmbGFncykKIHsKQEAgLTk0LDcgKzg1LDcgQEAKIAlpbnQgY291bnQgPSAwOwogCWludCBtb2RlX2ZsYWdzID0gMDsKIAotCURSTV9ERUJVRygiJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJRFJNX0RFQlVHX0tNUygiJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJLyogc2V0IGFsbCBtb2RlcyB0byB0aGUgdW52ZXJpZmllZCBzdGF0ZSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKIAkJbW9kZS0+c3RhdHVzID0gTU9ERV9VTlZFUklGSUVEOwpAQCAtMTAyLDE1ICs5MywxNyBAQAogCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yLT5mdW5jcy0+ZGV0ZWN0KGNvbm5lY3Rvcik7CiAKIAlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpIHsKLQkJRFJNX0RFQlVHKCIlcyBpcyBkaXNjb25uZWN0ZWRcbiIsCisJCURSTV9ERUJVR19LTVMoIiVzIGlzIGRpc2Nvbm5lY3RlZFxuIiwKIAkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKLQkJLyogVE9ETyBzZXQgRURJRCB0byBOVUxMICovCi0JCXJldHVybiAwOworCQlnb3RvIHBydW5lOwogCX0KIAogCWNvdW50ID0gKCpjb25uZWN0b3JfZnVuY3MtPmdldF9tb2RlcykoY29ubmVjdG9yKTsKLQlpZiAoIWNvdW50KQotCQlyZXR1cm4gMDsKKwlpZiAoIWNvdW50KSB7CisJCWNvdW50ID0gZHJtX2FkZF9tb2Rlc19ub2VkaWQoY29ubmVjdG9yLCA4MDAsIDYwMCk7CisJCWlmICghY291bnQpCisJCQlyZXR1cm4gMDsKKwl9CiAKIAlkcm1fbW9kZV9jb25uZWN0b3JfbGlzdF91cGRhdGUoY29ubmVjdG9yKTsKIApAQCAtMTMwLDcgKzEyMyw3IEBACiAJCQkJCQkJCSAgIG1vZGUpOwogCX0KIAotCitwcnVuZToKIAlkcm1fbW9kZV9wcnVuZV9pbnZhbGlkKGRldiwgJmNvbm5lY3Rvci0+bW9kZXMsIHRydWUpOwogCiAJaWYgKGxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+bW9kZXMpKQpAQCAtMTM4LDcgKzEzMSw4IEBACiAKIAlkcm1fbW9kZV9zb3J0KCZjb25uZWN0b3ItPm1vZGVzKTsKIAotCURSTV9ERUJVRygiUHJvYmVkIG1vZGVzIGZvciAlc1xuIiwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwlEUk1fREVCVUdfS01TKCJQcm9iZWQgbW9kZXMgZm9yICVzXG4iLAorCQkJCWRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CiAJCW1vZGUtPnZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CiAKQEAgLTE2NSwzOSArMTU5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMpOwogCi1zdGF0aWMgdm9pZCBkcm1faGVscGVyX2FkZF9zdGRfbW9kZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsICp0OwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RkX21vZGVzKTsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpzdGRtb2RlOwotCi0JCS8qCi0JCSAqIFdoZW4gbm8gdmFsaWQgRURJRCBtb2RlcyBhcmUgYXZhaWxhYmxlIHdlIGVuZCB1cAotCQkgKiBoZXJlIGFuZCBiYWlsZWQgaW4gdGhlIHBhc3QsIG5vdyB3ZSBhZGQgc29tZSBzdGFuZGFyZAotCQkgKiBtb2RlcyBhbmQgbW92ZSBvbi4KLQkJICovCi0JCXN0ZG1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCAmc3RkX21vZGVzW2ldKTsKLQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIHN0ZG1vZGUpOwotCQlkcm1fbW9kZV9saXN0X2NvbmNhdCgmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsCi0JCQkJICAgICAmY29ubmVjdG9yLT5tb2Rlcyk7Ci0KLQkJRFJNX0RFQlVHKCJBZGRpbmcgbW9kZSAlcyB0byAlc1xuIiwgc3RkbW9kZS0+bmFtZSwKLQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKLQl9Ci0JZHJtX21vZGVfc29ydCgmY29ubmVjdG9yLT5tb2Rlcyk7Ci0KLQlEUk1fREVCVUcoIkFkZGVkIHN0ZCBtb2RlcyBvbiAlc1xuIiwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKLQkJbW9kZS0+dnJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKTsKLQotCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7Ci0JCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUobW9kZSk7Ci0JfQotfQotCiAvKioKICAqIGRybV9oZWxwZXJfZW5jb2Rlcl9pbl91c2UgLSBjaGVjayBpZiBhIGdpdmVuIGVuY29kZXIgaXMgaW4gdXNlCiAgKiBAZW5jb2RlcjogZW5jb2RlciB0byBjaGVjawpAQCAtMjU4LDEzICsyMTksMjcgQEAKIHZvaWQgZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2Z1bmNzOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2RlcikKKwkJCWNvbnRpbnVlOworCQlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpCisJCQljb25uZWN0b3ItPmVuY29kZXIgPSBOVUxMOworCX0KKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CiAJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKLQkJaWYgKCFkcm1faGVscGVyX2VuY29kZXJfaW5fdXNlKGVuY29kZXIpKQotCQkJKCplbmNvZGVyX2Z1bmNzLT5kcG1zKShlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJCWlmICghZHJtX2hlbHBlcl9lbmNvZGVyX2luX3VzZShlbmNvZGVyKSkgeworCQkJaWYgKGVuY29kZXJfZnVuY3MtPmRpc2FibGUpCisJCQkJKCplbmNvZGVyX2Z1bmNzLT5kaXNhYmxlKShlbmNvZGVyKTsKKwkJCWVsc2UKKwkJCQkoKmVuY29kZXJfZnVuY3MtPmRwbXMpKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwkJCS8qIGRpc2Nvbm5lY3RvciBlbmNvZGVyIGZyb20gYW55IGNvbm5lY3RvciAqLworCQkJZW5jb2Rlci0+Y3J0YyA9IE5VTEw7CisJCX0KIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewpAQCAtMzEyLDcgKzI4Nyw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKIAkJZW5hYmxlZFtpXSA9IGRybV9jb25uZWN0b3JfZW5hYmxlZChjb25uZWN0b3IsIHRydWUpOwotCQlEUk1fREVCVUcoImNvbm5lY3RvciAlZCBlbmFibGVkPyAlc1xuIiwgY29ubmVjdG9yLT5iYXNlLmlkLAorCQlEUk1fREVCVUdfS01TKCJjb25uZWN0b3IgJWQgZW5hYmxlZD8gJXNcbiIsIGNvbm5lY3Rvci0+YmFzZS5pZCwKIAkJCSAgZW5hYmxlZFtpXSA/ICJ5ZXMiIDogIm5vIik7CiAJCWFueV9lbmFibGVkIHw9IGVuYWJsZWRbaV07CiAJCWkrKzsKQEAgLTM0Miw3ICszMTcsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlEUk1fREVCVUcoImxvb2tpbmcgZm9yIHByZWZlcnJlZCBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKKwkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAogCQkJICBjb25uZWN0b3ItPmJhc2UuaWQpOwogCiAJCW1vZGVzW2ldID0gZHJtX2hhc19wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpOwpAQCAtMzUxLDcgKzMyNiw3IEBACiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGVzW2ldLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKIAkJCQlicmVhazsKIAkJfQotCQlEUk1fREVCVUcoImZvdW5kIG1vZGUgJXNcbiIsIG1vZGVzW2ldID8gbW9kZXNbaV0tPm5hbWUgOgorCQlEUk1fREVCVUdfS01TKCJmb3VuZCBtb2RlICVzXG4iLCBtb2Rlc1tpXSA/IG1vZGVzW2ldLT5uYW1lIDoKIAkJCSAgIm5vbmUiKTsKIAkJaSsrOwogCX0KQEAgLTQwOSw3ICszODQsNyBAQAogCWMgPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAKLQkJaWYgKChjb25uZWN0b3ItPmVuY29kZXItPnBvc3NpYmxlX2NydGNzICYgKDEgPDwgYykpID09IDApIHsKKwkJaWYgKChlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyAmICgxIDw8IGMpKSA9PSAwKSB7CiAJCQljKys7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNDUyLDcgKzQyNyw3IEBACiAJaW50IHdpZHRoLCBoZWlnaHQ7CiAJaW50IGksIHJldDsKIAotCURSTV9ERUJVRygiXG4iKTsKKwlEUk1fREVCVUdfS01TKCJcbiIpOwogCiAJd2lkdGggPSBkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aDsKIAloZWlnaHQgPSBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQ7CkBAIC00NzUsNyArNDUwLDcgQEAKIAlpZiAoIXJldCkKIAkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZmluZCBpbml0aWFsIG1vZGVzXG4iKTsKIAotCURSTV9ERUJVRygicGlja2luZyBDUlRDcyBmb3IgJWR4JWQgY29uZmlnXG4iLCB3aWR0aCwgaGVpZ2h0KTsKKwlEUk1fREVCVUdfS01TKCJwaWNraW5nIENSVENzIGZvciAlZHglZCBjb25maWdcbiIsIHdpZHRoLCBoZWlnaHQpOwogCiAJZHJtX3BpY2tfY3J0Y3MoZGV2LCBjcnRjcywgbW9kZXMsIDAsIHdpZHRoLCBoZWlnaHQpOwogCkBAIC00OTAsMTIgKzQ2NSwxNCBAQAogCQl9CiAKIAkJaWYgKG1vZGUgJiYgY3J0YykgewotCQkJRFJNX0RFQlVHKCJkZXNpcmVkIG1vZGUgJXMgc2V0IG9uIGNydGMgJWRcbiIsCisJCQlEUk1fREVCVUdfS01TKCJkZXNpcmVkIG1vZGUgJXMgc2V0IG9uIGNydGMgJWRcbiIsCiAJCQkJICBtb2RlLT5uYW1lLCBjcnRjLT5iYXNlLmlkKTsKIAkJCWNydGMtPmRlc2lyZWRfbW9kZSA9IG1vZGU7CiAJCQljb25uZWN0b3ItPmVuY29kZXItPmNydGMgPSBjcnRjOwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKIAkJCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9IE5VTEw7CisJCQljb25uZWN0b3ItPmVuY29kZXIgPSBOVUxMOworCQl9CiAJCWkrKzsKIAl9CiAKQEAgLTcwMiwxOCArNjc5LDE3IEBACiBpbnQgZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRybV9jcnRjICoqc2F2ZV9jcnRjcywgKm5ld19jcnRjOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqKnNhdmVfZW5jb2RlcnMsICpuZXdfZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2NydGMgKnNhdmVfY3J0Y3MsICpuZXdfY3J0YywgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICpzYXZlX2VuY29kZXJzLCAqbmV3X2VuY29kZXIsICplbmNvZGVyOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYiA9IE5VTEw7Ci0JYm9vbCBzYXZlX2VuYWJsZWQ7CiAJYm9vbCBtb2RlX2NoYW5nZWQgPSBmYWxzZTsgLyogaWYgdHJ1ZSBkbyBhIGZ1bGwgbW9kZSBzZXQgKi8KIAlib29sIGZiX2NoYW5nZWQgPSBmYWxzZTsgLyogaWYgdHJ1ZSBhbmQgIW1vZGVfY2hhbmdlZCBqdXN0IGRvIGEgZmxpcCAqLwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKnNhdmVfY29ubmVjdG9ycywgKmNvbm5lY3RvcjsKIAlpbnQgY291bnQgPSAwLCBybywgZmFpbCA9IDA7CiAJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jczsKIAlpbnQgcmV0ID0gMDsKIAotCURSTV9ERUJVRygiXG4iKTsKKwlEUk1fREVCVUdfS01TKCJcbiIpOwogCiAJaWYgKCFzZXQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzI2LDM3ICs3MDIsNjAgQEAKIAogCWNydGNfZnVuY3MgPSBzZXQtPmNydGMtPmhlbHBlcl9wcml2YXRlOwogCi0JRFJNX0RFQlVHKCJjcnRjOiAlcCAlZCBmYjogJXAgY29ubmVjdG9yczogJXAgbnVtX2Nvbm5lY3RvcnM6ICVkICh4LCB5KSAoJWksICVpKVxuIiwKKwlEUk1fREVCVUdfS01TKCJjcnRjOiAlcCAlZCBmYjogJXAgY29ubmVjdG9yczogJXAgbnVtX2Nvbm5lY3RvcnM6IgorCQkJIiAlZCAoeCwgeSkgKCVpLCAlaSlcbiIsCiAJCSAgc2V0LT5jcnRjLCBzZXQtPmNydGMtPmJhc2UuaWQsIHNldC0+ZmIsIHNldC0+Y29ubmVjdG9ycywKIAkJICAoaW50KXNldC0+bnVtX2Nvbm5lY3RvcnMsIHNldC0+eCwgc2V0LT55KTsKIAogCWRldiA9IHNldC0+Y3J0Yy0+ZGV2OwogCi0JLyogc2F2ZSBwcmV2aW91cyBjb25maWcgKi8KLQlzYXZlX2VuYWJsZWQgPSBzZXQtPmNydGMtPmVuYWJsZWQ7Ci0KLQkvKgotCSAqIFdlIGRvIG1vZGVfY29uZmlnLm51bV9jb25uZWN0b3JzIGhlcmUgc2luY2Ugd2UnbGwgbG9vayBhdCB0aGUKLQkgKiBDUlRDIGFuZCBlbmNvZGVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGNvbm5lY3RvciBsYXRlci4KLQkgKi8KLQlzYXZlX2NydGNzID0ga3phbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IgKgotCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jcnRjICopLCBHRlBfS0VSTkVMKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGJhY2t1cCBvZiBhbGwgKG5vbi1wb2ludGVyKSBjcnRjLCBlbmNvZGVyIGFuZAorCSAqIGNvbm5lY3RvciBkYXRhLiAqLworCXNhdmVfY3J0Y3MgPSBremFsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2NydGMgKgorCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jcnRjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYXZlX2NydGNzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNhdmVfZW5jb2RlcnMgPSBremFsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciAqCi0JCQkJc2l6ZW9mKHN0cnVjdCBkcm1fZW5jb2RlcnMgKiksIEdGUF9LRVJORUwpOworCXNhdmVfZW5jb2RlcnMgPSBremFsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2VuY29kZXIgKgorCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2VuY29kZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNhdmVfZW5jb2RlcnMpIHsKIAkJa2ZyZWUoc2F2ZV9jcnRjcyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXNhdmVfY29ubmVjdG9ycyA9IGt6YWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yICoKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhdmVfY29ubmVjdG9ycykgeworCQlrZnJlZShzYXZlX2NydGNzKTsKKwkJa2ZyZWUoc2F2ZV9lbmNvZGVycyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIENvcHkgZGF0YS4gTm90ZSB0aGF0IGRyaXZlciBwcml2YXRlIGRhdGEgaXMgbm90IGFmZmVjdGVkLgorCSAqIFNob3VsZCBhbnl0aGluZyBiYWQgaGFwcGVuIG9ubHkgdGhlIGV4cGVjdGVkIHN0YXRlIGlzCisJICogcmVzdG9yZWQsIG5vdCB0aGUgZHJpdmVycyBwZXJzb25hbCBib29ra2VlcGluZy4KKwkgKi8KKwljb3VudCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJc2F2ZV9jcnRjc1tjb3VudCsrXSA9ICpjcnRjOworCX0KKworCWNvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQlzYXZlX2VuY29kZXJzW2NvdW50KytdID0gKmVuY29kZXI7CisJfQorCisJY291bnQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlzYXZlX2Nvbm5lY3RvcnNbY291bnQrK10gPSAqY29ubmVjdG9yOworCX0KKwogCS8qIFdlIHNob3VsZCBiZSBhYmxlIHRvIGNoZWNrIGhlcmUgaWYgdGhlIGZiIGhhcyB0aGUgc2FtZSBwcm9wZXJ0aWVzCiAJICogYW5kIHRoZW4ganVzdCBmbGlwX29yX21vdmUgaXQgKi8KIAlpZiAoc2V0LT5jcnRjLT5mYiAhPSBzZXQtPmZiKSB7CiAJCS8qIElmIHdlIGhhdmUgbm8gZmIgdGhlbiB0cmVhdCBpdCBhcyBhIGZ1bGwgbW9kZSBzZXQgKi8KIAkJaWYgKHNldC0+Y3J0Yy0+ZmIgPT0gTlVMTCkgewotCQkJRFJNX0RFQlVHKCJjcnRjIGhhcyBubyBmYiwgZnVsbCBtb2RlIHNldFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJjcnRjIGhhcyBubyBmYiwgZnVsbCBtb2RlIHNldFxuIik7CiAJCQltb2RlX2NoYW5nZWQgPSB0cnVlOwogCQl9IGVsc2UgaWYgKHNldC0+ZmIgPT0gTlVMTCkgewogCQkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKQEAgLTc3Miw3ICs3NzEsNyBAQAogCQlmYl9jaGFuZ2VkID0gdHJ1ZTsKIAogCWlmIChzZXQtPm1vZGUgJiYgIWRybV9tb2RlX2VxdWFsKHNldC0+bW9kZSwgJnNldC0+Y3J0Yy0+bW9kZSkpIHsKLQkJRFJNX0RFQlVHKCJtb2RlcyBhcmUgZGlmZmVyZW50LCBmdWxsIG1vZGUgc2V0XG4iKTsKKwkJRFJNX0RFQlVHX0tNUygibW9kZXMgYXJlIGRpZmZlcmVudCwgZnVsbCBtb2RlIHNldFxuIik7CiAJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoJnNldC0+Y3J0Yy0+bW9kZSk7CiAJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoc2V0LT5tb2RlKTsKIAkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKQEAgLTc4Myw3ICs3ODIsNiBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgKmNvbm5lY3Rvcl9mdW5jcyA9CiAJCQljb25uZWN0b3ItPmhlbHBlcl9wcml2YXRlOwotCQlzYXZlX2VuY29kZXJzW2NvdW50KytdID0gY29ubmVjdG9yLT5lbmNvZGVyOwogCQluZXdfZW5jb2RlciA9IGNvbm5lY3Rvci0+ZW5jb2RlcjsKIAkJZm9yIChybyA9IDA7IHJvIDwgc2V0LT5udW1fY29ubmVjdG9yczsgcm8rKykgewogCQkJaWYgKHNldC0+Y29ubmVjdG9yc1tyb10gPT0gY29ubmVjdG9yKSB7CkBAIC03OTgsMTUgKzc5NiwyMCBAQAogCQl9CiAKIAkJaWYgKG5ld19lbmNvZGVyICE9IGNvbm5lY3Rvci0+ZW5jb2RlcikgewotCQkJRFJNX0RFQlVHKCJlbmNvZGVyIGNoYW5nZWQsIGZ1bGwgbW9kZSBzd2l0Y2hcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiZW5jb2RlciBjaGFuZ2VkLCBmdWxsIG1vZGUgc3dpdGNoXG4iKTsKIAkJCW1vZGVfY2hhbmdlZCA9IHRydWU7CisJCQkvKiBJZiB0aGUgZW5jb2RlciBpcyByZXVzZWQgZm9yIGFub3RoZXIgY29ubmVjdG9yLCB0aGVuCisJCQkgKiB0aGUgYXBwcm9wcmlhdGUgY3J0YyB3aWxsIGJlIHNldCBsYXRlci4KKwkJCSAqLworCQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlcikKKwkJCQljb25uZWN0b3ItPmVuY29kZXItPmNydGMgPSBOVUxMOwogCQkJY29ubmVjdG9yLT5lbmNvZGVyID0gbmV3X2VuY29kZXI7CiAJCX0KIAl9CiAKIAlpZiAoZmFpbCkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWxfbm9fZW5jb2RlcjsKKwkJZ290byBmYWlsOwogCX0KIAogCWNvdW50ID0gMDsKQEAgLTgxNCw4ICs4MTcsNiBAQAogCQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2RlcikKIAkJCWNvbnRpbnVlOwogCi0JCXNhdmVfY3J0Y3NbY291bnQrK10gPSBjb25uZWN0b3ItPmVuY29kZXItPmNydGM7Ci0KIAkJaWYgKGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9PSBzZXQtPmNydGMpCiAJCQluZXdfY3J0YyA9IE5VTEw7CiAJCWVsc2UKQEAgLTgzMCwxNCArODMxLDE0IEBACiAJCWlmIChuZXdfY3J0YyAmJgogCQkgICAgIWRybV9lbmNvZGVyX2NydGNfb2soY29ubmVjdG9yLT5lbmNvZGVyLCBuZXdfY3J0YykpIHsKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGZhaWxfc2V0X21vZGU7CisJCQlnb3RvIGZhaWw7CiAJCX0KIAkJaWYgKG5ld19jcnRjICE9IGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YykgewotCQkJRFJNX0RFQlVHKCJjcnRjIGNoYW5nZWQsIGZ1bGwgbW9kZSBzd2l0Y2hcbiIpOworCQkJRFJNX0RFQlVHX0tNUygiY3J0YyBjaGFuZ2VkLCBmdWxsIG1vZGUgc3dpdGNoXG4iKTsKIAkJCW1vZGVfY2hhbmdlZCA9IHRydWU7CiAJCQljb25uZWN0b3ItPmVuY29kZXItPmNydGMgPSBuZXdfY3J0YzsKIAkJfQotCQlEUk1fREVCVUcoInNldHRpbmcgY29ubmVjdG9yICVkIGNydGMgdG8gJXBcbiIsCisJCURSTV9ERUJVR19LTVMoInNldHRpbmcgY29ubmVjdG9yICVkIGNydGMgdG8gJXBcbiIsCiAJCQkgIGNvbm5lY3Rvci0+YmFzZS5pZCwgbmV3X2NydGMpOwogCX0KIApAQCAtODUwLDcgKzg1MSw4IEBACiAJCXNldC0+Y3J0Yy0+ZmIgPSBzZXQtPmZiOwogCQlzZXQtPmNydGMtPmVuYWJsZWQgPSAoc2V0LT5tb2RlICE9IE5VTEwpOwogCQlpZiAoc2V0LT5tb2RlICE9IE5VTEwpIHsKLQkJCURSTV9ERUJVRygiYXR0ZW1wdGluZyB0byBzZXQgbW9kZSBmcm9tIHVzZXJzcGFjZVxuIik7CisJCQlEUk1fREVCVUdfS01TKCJhdHRlbXB0aW5nIHRvIHNldCBtb2RlIGZyb20iCisJCQkJCSIgdXNlcnNwYWNlXG4iKTsKIAkJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoc2V0LT5tb2RlKTsKIAkJCWlmICghZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKHNldC0+Y3J0Yywgc2V0LT5tb2RlLAogCQkJCQkJICAgICAgc2V0LT54LCBzZXQtPnksCkBAIC04NTgsNyArODYwLDcgQEAKIAkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQgbW9kZSBvbiBjcnRjICVwXG4iLAogCQkJCQkgIHNldC0+Y3J0Yyk7CiAJCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIGZhaWxfc2V0X21vZGU7CisJCQkJZ290byBmYWlsOwogCQkJfQogCQkJLyogVE9ETyBhcmUgdGhlc2UgbmVlZGVkPyAqLwogCQkJc2V0LT5jcnRjLT5kZXNpcmVkX3ggPSBzZXQtPng7CkBAIC04NjcsNDMgKzg2OSw1MCBAQAogCQl9CiAJCWRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRldik7CiAJfSBlbHNlIGlmIChmYl9jaGFuZ2VkKSB7CisJCXNldC0+Y3J0Yy0+eCA9IHNldC0+eDsKKwkJc2V0LT5jcnRjLT55ID0gc2V0LT55OworCiAJCW9sZF9mYiA9IHNldC0+Y3J0Yy0+ZmI7CiAJCWlmIChzZXQtPmNydGMtPmZiICE9IHNldC0+ZmIpCiAJCQlzZXQtPmNydGMtPmZiID0gc2V0LT5mYjsKIAkJcmV0ID0gY3J0Y19mdW5jcy0+bW9kZV9zZXRfYmFzZShzZXQtPmNydGMsCiAJCQkJCQlzZXQtPngsIHNldC0+eSwgb2xkX2ZiKTsKIAkJaWYgKHJldCAhPSAwKQotCQkgICAgZ290byBmYWlsX3NldF9tb2RlOworCQkJZ290byBmYWlsOwogCX0KIAorCWtmcmVlKHNhdmVfY29ubmVjdG9ycyk7CiAJa2ZyZWUoc2F2ZV9lbmNvZGVycyk7CiAJa2ZyZWUoc2F2ZV9jcnRjcyk7CiAJcmV0dXJuIDA7CiAKLWZhaWxfc2V0X21vZGU6Ci0Jc2V0LT5jcnRjLT5lbmFibGVkID0gc2F2ZV9lbmFibGVkOwotCXNldC0+Y3J0Yy0+ZmIgPSBvbGRfZmI7CitmYWlsOgorCS8qIFJlc3RvcmUgYWxsIHByZXZpb3VzIGRhdGEuICovCiAJY291bnQgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewotCQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2RlcikKLQkJCWNvbnRpbnVlOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCSpjcnRjID0gc2F2ZV9jcnRjc1tjb3VudCsrXTsKKwl9CiAKLQkJY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjID0gc2F2ZV9jcnRjc1tjb3VudCsrXTsKKwljb3VudCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJKmVuY29kZXIgPSBzYXZlX2VuY29kZXJzW2NvdW50KytdOwogCX0KLWZhaWxfbm9fZW5jb2RlcjoKLQlrZnJlZShzYXZlX2NydGNzKTsKKwogCWNvdW50ID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKLQkJY29ubmVjdG9yLT5lbmNvZGVyID0gc2F2ZV9lbmNvZGVyc1tjb3VudCsrXTsKKwkJKmNvbm5lY3RvciA9IHNhdmVfY29ubmVjdG9yc1tjb3VudCsrXTsKIAl9CisKKwlrZnJlZShzYXZlX2Nvbm5lY3RvcnMpOwogCWtmcmVlKHNhdmVfZW5jb2RlcnMpOworCWtmcmVlKHNhdmVfY3J0Y3MpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKTsKIAogYm9vbCBkcm1faGVscGVyX3BsdWdnZWRfZXZlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlEUk1fREVCVUcoIlxuIik7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWRybV9oZWxwZXJfcHJvYmVfY29ubmVjdG9yX21vZGVzKGRldiwgZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgsCiAJCQkJCSBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQpOwpAQCAtOTMyLDcgKzk0MSw2IEBACiAgKi8KIGJvb2wgZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJaW50IGNvdW50ID0gMDsKIAogCWNvdW50ID0gZHJtX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZGV2LApAQCAtOTQwLDE2ICs5NDgsOSBAQAogCQkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7CiAKIAkvKgotCSAqIE5vbmUgb2YgdGhlIGF2YWlsYWJsZSBjb25uZWN0b3JzIGhhZCBhbnkgbW9kZXMsIHNvIGFkZCBzb21lCi0JICogYW5kIHRyeSB0byBsaWdodCB0aGVtIHVwIGFueXdheQorCSAqIHdlIHNob3VsZG4ndCBlbmQgdXAgd2l0aCBubyBtb2RlcyBoZXJlLgogCSAqLwotCWlmICghY291bnQpIHsKLQkJRFJNX0VSUk9SKCJjb25uZWN0b3JzIGhhdmUgbm8gbW9kZXMsIHVzaW5nIHN0YW5kYXJkIG1vZGVzXG4iKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsCi0JCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAotCQkJCSAgICBoZWFkKQotCQkJZHJtX2hlbHBlcl9hZGRfc3RkX21vZGVzKGRldiwgY29ubmVjdG9yKTsKLQl9CisJV0FSTighY291bnQsICJDb25uZWN0ZWQgY29ubmVjdG9yIHdpdGggMCBtb2Rlc1xuIik7CiAKIAlkcm1fc2V0dXBfY3J0Y3MoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggYjM5ZDdiZi4uYTc1Y2E2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC02MywxMiArNjMsMTIgQEAKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRVRfTUFQLCBkcm1fZ2V0bWFwLCAwKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRVRfQ0xJRU5ULCBkcm1fZ2V0Y2xpZW50LCAwKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRVRfU1RBVFMsIGRybV9nZXRzdGF0cywgMCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfU0VUX1ZFUlNJT04sIGRybV9zZXR2ZXJzaW9uLCBEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NFVF9WRVJTSU9OLCBkcm1fc2V0dmVyc2lvbiwgRFJNX01BU1RFUiksCiAKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9TRVRfVU5JUVVFLCBkcm1fc2V0dW5pcXVlLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0JMT0NLLCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9VTkJMT0NLLCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9BVVRIX01BR0lDLCBkcm1fYXV0aG1hZ2ljLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0FVVEhfTUFHSUMsIGRybV9hdXRobWFnaWMsIERSTV9BVVRIfERSTV9NQVNURVIpLAogCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfQUREX01BUCwgZHJtX2FkZG1hcF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9STV9NQVAsIGRybV9ybW1hcF9pb2N0bCwgRFJNX0FVVEgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCA3ZjI3MjhiLi45MGQ3NmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtNjAsNiArNjAsMTIgQEAKICNkZWZpbmUgRURJRF9RVUlSS19GSVJTVF9ERVRBSUxFRF9QUkVGRVJSRUQJKDEgPDwgNSkKIC8qIHVzZSAraHN5bmMgK3ZzeW5jIGZvciBkZXRhaWxlZCBtb2RlICovCiAjZGVmaW5lIEVESURfUVVJUktfREVUQUlMRURfU1lOQ19QUAkJKDEgPDwgNikKKy8qIGRlZmluZSB0aGUgbnVtYmVyIG9mIEV4dGVuc2lvbiBFRElEIGJsb2NrICovCisjZGVmaW5lIE1BWF9FRElEX0VYVF9OVU0gNAorCisjZGVmaW5lIExFVkVMX0RNVAkwCisjZGVmaW5lIExFVkVMX0dURgkxCisjZGVmaW5lIExFVkVMX0NWVAkyCiAKIHN0YXRpYyBzdHJ1Y3QgZWRpZF9xdWlyayB7CiAJY2hhciAqdmVuZG9yOwpAQCAtMjM3LDI4ICsyNDMsMjkxIEBACiAJcHJlZmVycmVkX21vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CiB9CiAKKy8qCisgKiBBZGQgdGhlIEF1dG9nZW5lcmF0ZWQgZnJvbSB0aGUgRE1UIHNwZWMuCisgKiBUaGlzIHRhYmxlIGlzIGNvcGllZCBmcm9tIHhmcmVlODYvbW9kZXMveGY4NkVkaWRNb2Rlcy5jLgorICogQnV0IHRoZSBtb2RlIHdpdGggUmVkdWNlZCBibGFuayBmZWF0dXJlIGlzIGRlbGV0ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkcm1fZG10X21vZGVzW10gPSB7CisJLyogNjQweDM1MEA4NUh6ICovCisJeyBEUk1fTU9ERSgiNjQweDM1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTUwMCwgNjQwLCA2NzIsCisJCSAgIDczNiwgODMyLCAwLCAzNTAsIDM4MiwgMzg1LCA0NDUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogNjQweDQwMEA4NUh6ICovCisJeyBEUk1fTU9ERSgiNjQweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTUwMCwgNjQwLCA2NzIsCisJCSAgIDczNiwgODMyLCAwLCA0MDAsIDQwMSwgNDA0LCA0NDUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogNzIweDQwMEA4NUh6ICovCisJeyBEUk1fTU9ERSgiNzIweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNTUwMCwgNzIwLCA3NTYsCisJCSAgIDgyOCwgOTM2LCAwLCA0MDAsIDQwMSwgNDA0LCA0NDYsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogNjQweDQ4MEA2MEh6ICovCisJeyBEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNTE3NSwgNjQwLCA2NTYsCisJCSAgIDc1MiwgODAwLCAwLCA0ODAsIDQ4OSwgNDkyLCA1MjUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogNjQweDQ4MEA3Mkh6ICovCisJeyBEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTUwMCwgNjQwLCA2NjQsCisJCSAgIDcwNCwgODMyLCAwLCA0ODAsIDQ4OSwgNDkyLCA1MjAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogNjQweDQ4MEA3NUh6ICovCisJeyBEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTUwMCwgNjQwLCA2NTYsCisJCSAgIDcyMCwgODQwLCAwLCA0ODAsIDQ4MSwgNDg0LCA1MDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogNjQweDQ4MEA4NUh6ICovCisJeyBEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNjAwMCwgNjQwLCA2OTYsCisJCSAgIDc1MiwgODMyLCAwLCA0ODAsIDQ4MSwgNDg0LCA1MDksIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogODAweDYwMEA1Nkh6ICovCisJeyBEUk1fTU9ERSgiODAweDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNjAwMCwgODAwLCA4MjQsCisJCSAgIDg5NiwgMTAyNCwgMCwgNjAwLCA2MDEsIDYwMywgNjI1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDgwMHg2MDBANjBIeiAqLworCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNDAwMDAsIDgwMCwgODQwLAorCQkgICA5NjgsIDEwNTYsIDAsIDYwMCwgNjAxLCA2MDUsIDYyOCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiA4MDB4NjAwQDcySHogKi8KKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDUwMDAwLCA4MDAsIDg1NiwKKwkJICAgOTc2LCAxMDQwLCAwLCA2MDAsIDYzNywgNjQzLCA2NjYsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogODAweDYwMEA3NUh6ICovCisJeyBEUk1fTU9ERSgiODAweDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0OTUwMCwgODAwLCA4MTYsCisJCSAgIDg5NiwgMTA1NiwgMCwgNjAwLCA2MDEsIDYwNCwgNjI1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDgwMHg2MDBAODVIeiAqLworCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNTYyNTAsIDgwMCwgODMyLAorCQkgICA4OTYsIDEwNDgsIDAsIDYwMCwgNjAxLCA2MDQsIDYzMSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiA4NDh4NDgwQDYwSHogKi8KKwl7IERSTV9NT0RFKCI4NDh4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDMzNzUwLCA4NDgsIDg2NCwKKwkJICAgOTc2LCAxMDg4LCAwLCA0ODAsIDQ4NiwgNDk0LCA1MTcsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTAyNHg3NjhANDNIeiwgaW50ZXJsYWNlICovCisJeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNDQ5MDAsIDEwMjQsIDEwMzIsCisJCSAgIDEyMDgsIDEyNjQsIDAsIDc2OCwgNzY4LCA3NzIsIDgxNywgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyB8CisJCQlEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgfSwKKwkvKiAxMDI0eDc2OEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjUwMDAsIDEwMjQsIDEwNDgsCisJCSAgIDExODQsIDEzNDQsIDAsIDc2OCwgNzcxLCA3NzcsIDgwNiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwKKwkvKiAxMDI0eDc2OEA3MEh6ICovCisJeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNzUwMDAsIDEwMjQsIDEwNDgsCisJCSAgIDExODQsIDEzMjgsIDAsIDc2OCwgNzcxLCA3NzcsIDgwNiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwKKwkvKiAxMDI0eDc2OEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNzg3NTAsIDEwMjQsIDEwNDAsCisJCSAgIDExMzYsIDEzMTIsIDAsIDc2OCwgNzY5LCA3NzIsIDgwMCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMDI0eDc2OEA4NUh6ICovCisJeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgOTQ1MDAsIDEwMjQsIDEwNzIsCisJCSAgIDEwNzIsIDEzNzYsIDAsIDc2OCwgNzY5LCA3NzIsIDgwOCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMTUyeDg2NEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTE1Mng4NjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTA4MDAwLCAxMTUyLCAxMjE2LAorCQkgICAxMzQ0LCAxNjAwLCAwLCA4NjQsIDg2NSwgODY4LCA5MDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHg3NjhANjBIeiAqLworCXsgRFJNX01PREUoIjEyODB4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDc5NTAwLCAxMjgwLCAxMzQ0LAorCQkgICAxNDcyLCAxNjY0LCAwLCA3NjgsIDc3MSwgNzc4LCA3OTgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHg3NjhANzVIeiAqLworCXsgRFJNX01PREUoIjEyODB4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEwMjI1MCwgMTI4MCwgMTM2MCwKKwkJICAgMTQ4OCwgMTY5NiwgMCwgNzY4LCA3NzEsIDc3OCwgODA1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LAorCS8qIDEyODB4NzY4QDg1SHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMTc1MDAsIDEyODAsIDEzNjAsCisJCSAgIDE0OTYsIDE3MTIsIDAsIDc2OCwgNzcxLCA3NzgsIDgwOSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMjgweDgwMEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTI4MHg4MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgODM1MDAsIDEyODAsIDEzNTIsCisJCSAgIDE0ODAsIDE2ODAsIDAsIDgwMCwgODAzLCA4MDksIDgzMSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwKKwkvKiAxMjgweDgwMEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTI4MHg4MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTA2NTAwLCAxMjgwLCAxMzYwLAorCQkgICAxNDg4LCAxNjk2LCAwLCA4MDAsIDgwMywgODA5LCA4MzgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHg4MDBAODVIeiAqLworCXsgRFJNX01PREUoIjEyODB4ODAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEyMjUwMCwgMTI4MCwgMTM2MCwKKwkJICAgMTQ5NiwgMTcxMiwgMCwgODAwLCA4MDMsIDgwOSwgODQzLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEyODB4OTYwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDk2MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMDgwMDAsIDEyODAsIDEzNzYsCisJCSAgIDE0ODgsIDE4MDAsIDAsIDk2MCwgOTYxLCA5NjQsIDEwMDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHg5NjBAODVIeiAqLworCXsgRFJNX01PREUoIjEyODB4OTYwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE0ODUwMCwgMTI4MCwgMTM0NCwKKwkJICAgMTUwNCwgMTcyOCwgMCwgOTYwLCA5NjEsIDk2NCwgMTAxMSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMjgweDEwMjRANjBIeiAqLworCXsgRFJNX01PREUoIjEyODB4MTAyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMDgwMDAsIDEyODAsIDEzMjgsCisJCSAgIDE0NDAsIDE2ODgsIDAsIDEwMjQsIDEwMjUsIDEwMjgsIDEwNjYsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHgxMDI0QDc1SHogKi8KKwl7IERSTV9NT0RFKCIxMjgweDEwMjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTM1MDAwLCAxMjgwLCAxMjk2LAorCQkgICAxNDQwLCAxNjg4LCAwLCAxMDI0LCAxMDI1LCAxMDI4LCAxMDY2LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDEyODB4MTAyNEA4NUh6ICovCisJeyBEUk1fTU9ERSgiMTI4MHgxMDI0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE1NzUwMCwgMTI4MCwgMTM0NCwKKwkJICAgMTUwNCwgMTcyOCwgMCwgMTAyNCwgMTAyNSwgMTAyOCwgMTA3MiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMzYweDc2OEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTM2MHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgODU1MDAsIDEzNjAsIDE0MjQsCisJCSAgIDE1MzYsIDE3OTIsIDAsIDc2OCwgNzcxLCA3NzcsIDc5NSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNDQweDEwNTBANjBIeiAqLworCXsgRFJNX01PREUoIjE0MDB4MTA1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMjE3NTAsIDE0MDAsIDE0ODgsCisJCSAgIDE2MzIsIDE4NjQsIDAsIDEwNTAsIDEwNTMsIDEwNTcsIDEwODksIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTQ0MHgxMDUwQDc1SHogKi8KKwl7IERSTV9NT0RFKCIxNDAweDEwNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTU2MDAwLCAxNDAwLCAxNTA0LAorCQkgICAxNjQ4LCAxODk2LCAwLCAxMDUwLCAxMDUzLCAxMDU3LCAxMDk5LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE0NDB4MTA1MEA4NUh6ICovCisJeyBEUk1fTU9ERSgiMTQwMHgxMDUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE3OTUwMCwgMTQwMCwgMTUwNCwKKwkJICAgMTY1NiwgMTkxMiwgMCwgMTA1MCwgMTA1MywgMTA1NywgMTEwNSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNDQweDkwMEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTQ0MHg5MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTA2NTAwLCAxNDQwLCAxNTIwLAorCQkgICAxNjcyLCAxOTA0LCAwLCA5MDAsIDkwMywgOTA5LCA5MzQsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTQ0MHg5MDBANzVIeiAqLworCXsgRFJNX01PREUoIjE0NDB4OTAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEzNjc1MCwgMTQ0MCwgMTUzNiwKKwkJICAgMTY4OCwgMTkzNiwgMCwgOTAwLCA5MDMsIDkwOSwgOTQyLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE0NDB4OTAwQDg1SHogKi8KKwl7IERSTV9NT0RFKCIxNDQweDkwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNTcwMDAsIDE0NDAsIDE1NDQsCisJCSAgIDE2OTYsIDE5NTIsIDAsIDkwMCwgOTAzLCA5MDksIDk0OCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNjAweDEyMDBANjBIeiAqLworCXsgRFJNX01PREUoIjE2MDB4MTIwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNjIwMDAsIDE2MDAsIDE2NjQsCisJCSAgIDE4NTYsIDIxNjAsIDAsIDEyMDAsIDEyMDEsIDEyMDQsIDEyNTAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTYwMHgxMjAwQDY1SHogKi8KKwl7IERSTV9NT0RFKCIxNjAweDEyMDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTc1NTAwLCAxNjAwLCAxNjY0LAorCQkgICAxODU2LCAyMTYwLCAwLCAxMjAwLCAxMjAxLCAxMjA0LCAxMjUwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE2MDB4MTIwMEA3MEh6ICovCisJeyBEUk1fTU9ERSgiMTYwMHgxMjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE4OTAwMCwgMTYwMCwgMTY2NCwKKwkJICAgMTg1NiwgMjE2MCwgMCwgMTIwMCwgMTIwMSwgMTIwNCwgMTI1MCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNjAweDEyMDBANzVIeiAqLworCXsgRFJNX01PREUoIjE2MDB4MTIwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMDI1MDAwLCAxNjAwLCAxNjY0LAorCQkgICAxODU2LCAyMTYwLCAwLCAxMjAwLCAxMjAxLCAxMjA0LCAxMjUwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE2MDB4MTIwMEA4NUh6ICovCisJeyBEUk1fTU9ERSgiMTYwMHgxMjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIyOTUwMCwgMTYwMCwgMTY2NCwKKwkJICAgMTg1NiwgMjE2MCwgMCwgMTIwMCwgMTIwMSwgMTIwNCwgMTI1MCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNjgweDEwNTBANjBIeiAqLworCXsgRFJNX01PREUoIjE2ODB4MTA1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNDYyNTAsIDE2ODAsIDE3ODQsCisJCSAgIDE5NjAsIDIyNDAsIDAsIDEwNTAsIDEwNTMsIDEwNTksIDEwODksIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTY4MHgxMDUwQDc1SHogKi8KKwl7IERSTV9NT0RFKCIxNjgweDEwNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTg3MDAwLCAxNjgwLCAxODAwLAorCQkgICAxOTc2LCAyMjcyLCAwLCAxMDUwLCAxMDUzLCAxMDU5LCAxMDk5LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE2ODB4MTA1MEA4NUh6ICovCisJeyBEUk1fTU9ERSgiMTY4MHgxMDUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIxNDc1MCwgMTY4MCwgMTgwOCwKKwkJICAgMTk4NCwgMjI4OCwgMCwgMTA1MCwgMTA1MywgMTA1OSwgMTEwNSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNzkyeDEzNDRANjBIeiAqLworCXsgRFJNX01PREUoIjE3OTJ4MTM0NCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMDQ3NTAsIDE3OTIsIDE5MjAsCisJCSAgIDIxMjAsIDI0NDgsIDAsIDEzNDQsIDEzNDUsIDEzNDgsIDEzOTQsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTcyOXgxMzQ0QDc1SHogKi8KKwl7IERSTV9NT0RFKCIxNzkyeDEzNDQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjYxMDAwLCAxNzkyLCAxODg4LAorCQkgICAyMTA0LCAyNDU2LCAwLCAxMzQ0LCAxMzQ1LCAxMzQ4LCAxNDE3LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE4NTN4MTM5MkA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTg1NngxMzkyIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIxODI1MCwgMTg1NiwgMTk1MiwKKwkJICAgMjE3NiwgMjUyOCwgMCwgMTM5MiwgMTM5MywgMTM5NiwgMTQzOSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxODU2eDEzOTJANzVIeiAqLworCXsgRFJNX01PREUoIjE4NTZ4MTM5MiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyODgwMDAsIDE4NTYsIDE5ODQsCisJCSAgIDIyMDgsIDI1NjAsIDAsIDEzOTIsIDEzOTUsIDEzOTksIDE1MDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTkyMHgxMjAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxOTIweDEyMDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkzMjUwLCAxOTIwLCAyMDU2LAorCQkgICAyMjU2LCAyNTkyLCAwLCAxMjAwLCAxMjAzLCAxMjA5LCAxMjQ1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE5MjB4MTIwMEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTkyMHgxMjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI0NTI1MCwgMTkyMCwgMjA1NiwKKwkJICAgMjI2NCwgMjYwOCwgMCwgMTIwMCwgMTIwMywgMTIwOSwgMTI1NSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxOTIweDEyMDBAODVIeiAqLworCXsgRFJNX01PREUoIjE5MjB4MTIwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyODEyNTAsIDE5MjAsIDIwNjQsCisJCSAgIDIyNzIsIDI2MjQsIDAsIDEyMDAsIDEyMDMsIDEyMDksIDEyNjIsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTkyMHgxNDQwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxOTIweDE0NDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjM0MDAwLCAxOTIwLCAyMDQ4LAorCQkgICAyMjU2LCAyNjAwLCAwLCAxNDQwLCAxNDQxLCAxNDQ0LCAxNTAwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE5MjB4MTQ0MEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTkyMHgxNDQwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI5NzAwMCwgMTkyMCwgMjA2NCwKKwkJICAgMjI4OCwgMjY0MCwgMCwgMTQ0MCwgMTQ0MSwgMTQ0NCwgMTUwMCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAyNTYweDE2MDBANjBIeiAqLworCXsgRFJNX01PREUoIjI1NjB4MTYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNDg1MDAsIDI1NjAsIDI3NTIsCisJCSAgIDMwMzIsIDM1MDQsIDAsIDE2MDAsIDE2MDMsIDE2MDksIDE2NTgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMjU2MHgxNjAwQDc1SFogKi8KKwl7IERSTV9NT0RFKCIyNTYweDE2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNDQzMjUwLCAyNTYwLCAyNzY4LAorCQkgICAzMDQ4LCAzNTM2LCAwLCAxNjAwLCAxNjAzLCAxNjA5LCAxNjcyLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDI1NjB4MTYwMEA4NUhaICovCisJeyBEUk1fTU9ERSgiMjU2MHgxNjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDUwNTI1MCwgMjU2MCwgMjc2OCwKKwkJICAgMzA0OCwgMzUzNiwgMCwgMTYwMCwgMTYwMywgMTYwOSwgMTY4MiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2ZpbmRfZG10KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQlpbnQgaHNpemUsIGludCB2c2l6ZSwgaW50IGZyZXNoKQoreworCWludCBpLCBjb3VudDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqcHRyLCAqbW9kZTsKKworCWNvdW50ID0gc2l6ZW9mKGRybV9kbXRfbW9kZXMpIC8gc2l6ZW9mKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlKTsKKwltb2RlID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlwdHIgPSAmZHJtX2RtdF9tb2Rlc1tpXTsKKwkJaWYgKGhzaXplID09IHB0ci0+aGRpc3BsYXkgJiYKKwkJCXZzaXplID09IHB0ci0+dmRpc3BsYXkgJiYKKwkJCWZyZXNoID09IGRybV9tb2RlX3ZyZWZyZXNoKHB0cikpIHsKKwkJCS8qIGdldCB0aGUgZXhwZWN0ZWQgZGVmYXVsdCBtb2RlICovCisJCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgcHRyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBtb2RlOworfQogLyoqCiAgKiBkcm1fbW9kZV9zdGQgLSBjb252ZXJ0IHN0YW5kYXJkIG1vZGUgaW5mbyAod2lkdGgsIGhlaWdodCwgcmVmcmVzaCkgaW50byBtb2RlCiAgKiBAdDogc3RhbmRhcmQgdGltaW5nIHBhcmFtcworICogQHRpbWluZ19sZXZlbDogc3RhbmRhcmQgdGltaW5nIGxldmVsCiAgKgogICogVGFrZSB0aGUgc3RhbmRhcmQgdGltaW5nIHBhcmFtcyAoaW4gdGhpcyBjYXNlIHdpZHRoLCBhc3BlY3QsIGFuZCByZWZyZXNoKQotICogYW5kIGNvbnZlcnQgdGhlbSBpbnRvIGEgcmVhbCBtb2RlIHVzaW5nIENWVC4KKyAqIGFuZCBjb252ZXJ0IHRoZW0gaW50byBhIHJlYWwgbW9kZSB1c2luZyBDVlQvR1RGL0RNVC4KICAqCiAgKiBQdW50cyBmb3Igbm93LCBidXQgc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBGQiBsYXllcidzIENWVCBiYXNlZCBtb2RlCiAgKiBnZW5lcmF0aW9uIGNvZGUuCiAgKi8KIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZV9zdGQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3Qgc3RkX3RpbWluZyAqdCkKKwkJCQkgICAgICBzdHJ1Y3Qgc3RkX3RpbWluZyAqdCwKKwkJCQkgICAgICBpbnQgdGltaW5nX2xldmVsKQogewogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwotCWludCBoc2l6ZSA9IHQtPmhzaXplICogOCArIDI0OCwgdnNpemU7CisJaW50IGhzaXplLCB2c2l6ZTsKKwlpbnQgdnJlZnJlc2hfcmF0ZTsKIAl1bnNpZ25lZCBhc3BlY3RfcmF0aW8gPSAodC0+dmZyZXFfYXNwZWN0ICYgRURJRF9USU1JTkdfQVNQRUNUX01BU0spCiAJCT4+IEVESURfVElNSU5HX0FTUEVDVF9TSElGVDsKKwl1bnNpZ25lZCB2ZnJlcSA9ICh0LT52ZnJlcV9hc3BlY3QgJiBFRElEX1RJTUlOR19WRlJFUV9NQVNLKQorCQk+PiBFRElEX1RJTUlOR19WRlJFUV9TSElGVDsKIAotCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKLQlpZiAoIW1vZGUpCi0JCXJldHVybiBOVUxMOwotCisJLyogQWNjb3JkaW5nIHRvIHRoZSBFRElEIHNwZWMsIHRoZSBoZGlzcGxheSA9IGhzaXplICogOCArIDI0OCAqLworCWhzaXplID0gdC0+aHNpemUgKiA4ICsgMjQ4OworCS8qIHZyZWZyZXNoX3JhdGUgPSB2ZnJlcSArIDYwICovCisJdnJlZnJlc2hfcmF0ZSA9IHZmcmVxICsgNjA7CisJLyogdGhlIHZkaXNwbGF5IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGFzcGVjdCByYXRpbyAqLwogCWlmIChhc3BlY3RfcmF0aW8gPT0gMCkKIAkJdnNpemUgPSAoaHNpemUgKiAxMCkgLyAxNjsKIAllbHNlIGlmIChhc3BlY3RfcmF0aW8gPT0gMSkKQEAgLTI2Nyw5ICs1MzYsMzAgQEAKIAkJdnNpemUgPSAoaHNpemUgKiA0KSAvIDU7CiAJZWxzZQogCQl2c2l6ZSA9IChoc2l6ZSAqIDkpIC8gMTY7CisJLyogSERUViBoYWNrICovCisJaWYgKGhzaXplID09IDEzNjAgJiYgdnNpemUgPT0gNzY1ICYmIHZyZWZyZXNoX3JhdGUgPT0gNjApIHsKKwkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCk7CisJCW1vZGUtPmhkaXNwbGF5ID0gMTM2NjsKKwkJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52c3luY19zdGFydCAtIDE7CisJCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX2VuZCAtIDE7CisJCXJldHVybiBtb2RlOworCX0KKwltb2RlID0gTlVMTDsKKwkvKiBjaGVjayB3aGV0aGVyIGl0IGNhbiBiZSBmb3VuZCBpbiBkZWZhdWx0IG1vZGUgdGFibGUgKi8KKwltb2RlID0gZHJtX2ZpbmRfZG10KGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlKTsKKwlpZiAobW9kZSkKKwkJcmV0dXJuIG1vZGU7CiAKLQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKLQorCXN3aXRjaCAodGltaW5nX2xldmVsKSB7CisJY2FzZSBMRVZFTF9ETVQ6CisJCWJyZWFrOworCWNhc2UgTEVWRUxfR1RGOgorCQltb2RlID0gZHJtX2d0Zl9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBMRVZFTF9DVlQ6CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDApOworCQlicmVhazsKKwl9CiAJcmV0dXJuIG1vZGU7CiB9CiAKQEAgLTQ1MSw2ICs3NDEsMTkgQEAKIAogCXJldHVybiBtb2RlczsKIH0KKy8qKgorICogc3RhbmFyZF90aW1pbmdfbGV2ZWwgLSBnZXQgc3RkLiB0aW1pbmcgbGV2ZWwoQ1ZUL0dURi9ETVQpCisgKiBAZWRpZDogRURJRCBibG9jayB0byBzY2FuCisgKi8KK3N0YXRpYyBpbnQgc3RhbmRhcmRfdGltaW5nX2xldmVsKHN0cnVjdCBlZGlkICplZGlkKQoreworCWlmIChlZGlkLT5yZXZpc2lvbiA+PSAyKSB7CisJCWlmIChlZGlkLT5yZXZpc2lvbiA+PSA0ICYmIChlZGlkLT5mZWF0dXJlcyAmIERSTV9FRElEX0ZFQVRVUkVfREVGQVVMVF9HVEYpKQorCQkJcmV0dXJuIExFVkVMX0NWVDsKKwkJcmV0dXJuIExFVkVMX0dURjsKKwl9CisJcmV0dXJuIExFVkVMX0RNVDsKK30KIAogLyoqCiAgKiBhZGRfc3RhbmRhcmRfbW9kZXMgLSBnZXQgc3RkLiBtb2RlcyBmcm9tIEVESUQgYW5kIGFkZCB0aGVtCkBAIC00NjMsNiArNzY2LDkgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJaW50IGksIG1vZGVzID0gMDsKKwlpbnQgdGltaW5nX2xldmVsOworCisJdGltaW5nX2xldmVsID0gc3RhbmRhcmRfdGltaW5nX2xldmVsKGVkaWQpOwogCiAJZm9yIChpID0gMDsgaSA8IEVESURfU1REX1RJTUlOR1M7IGkrKykgewogCQlzdHJ1Y3Qgc3RkX3RpbWluZyAqdCA9ICZlZGlkLT5zdGFuZGFyZF90aW1pbmdzW2ldOwpAQCAtNDcyLDcgKzc3OCw4IEBACiAJCWlmICh0LT5oc2l6ZSA9PSAxICYmIHQtPnZmcmVxX2FzcGVjdCA9PSAxKQogCQkJY29udGludWU7CiAKLQkJbmV3bW9kZSA9IGRybV9tb2RlX3N0ZChkZXYsICZlZGlkLT5zdGFuZGFyZF90aW1pbmdzW2ldKTsKKwkJbmV3bW9kZSA9IGRybV9tb2RlX3N0ZChkZXYsICZlZGlkLT5zdGFuZGFyZF90aW1pbmdzW2ldLAorCQkJCQl0aW1pbmdfbGV2ZWwpOwogCQlpZiAobmV3bW9kZSkgewogCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwogCQkJbW9kZXMrKzsKQEAgLTQ5Niw2ICs4MDMsOSBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKIAlpbnQgaSwgaiwgbW9kZXMgPSAwOworCWludCB0aW1pbmdfbGV2ZWw7CisKKwl0aW1pbmdfbGV2ZWwgPSBzdGFuZGFyZF90aW1pbmdfbGV2ZWwoZWRpZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRURJRF9ERVRBSUxFRF9USU1JTkdTOyBpKyspIHsKIAkJc3RydWN0IGRldGFpbGVkX3RpbWluZyAqdGltaW5nID0gJmVkaWQtPmRldGFpbGVkX3RpbWluZ3NbaV07CkBAIC01MjUsNyArODM1LDggQEAKIAkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CiAKIAkJCQkJc3RkID0gJmRhdGEtPmRhdGEudGltaW5nc1tqXTsKLQkJCQkJbmV3bW9kZSA9IGRybV9tb2RlX3N0ZChkZXYsIHN0ZCk7CisJCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsCisJCQkJCQkJICAgICAgIHRpbWluZ19sZXZlbCk7CiAJCQkJCWlmIChuZXdtb2RlKSB7CiAJCQkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CiAJCQkJCQltb2RlcysrOwpAQCAtNTUxLDYgKzg2MiwxMjIgQEAKIAogCXJldHVybiBtb2RlczsKIH0KKy8qKgorICogYWRkX2RldGFpbGVkX21vZGVfZWVkaWQgLSBnZXQgZGV0YWlsZWQgbW9kZSBpbmZvIGZyb20gYWRkdGlvbmFsIHRpbWluZworICogCQkJRURJRCBibG9jaworICogQGNvbm5lY3RvcjogYXR0YWNoZWQgY29ubmVjdG9yCisgKiBAZWRpZDogRURJRCBibG9jayB0byBzY2FuKEl0IGlzIG9ubHkgdG8gZ2V0IGFkZHRpb25hbCB0aW1pbmcgRURJRCBibG9jaykKKyAqIEBxdWlya3M6IHF1aXJrcyB0byBhcHBseQorICoKKyAqIFNvbWUgb2YgdGhlIGRldGFpbGVkIHRpbWluZyBzZWN0aW9ucyBtYXkgY29udGFpbiBtb2RlIGluZm9ybWF0aW9uLiAgR3JhYgorICogaXQgYW5kIGFkZCBpdCB0byB0aGUgbGlzdC4KKyAqLworc3RhdGljIGludCBhZGRfZGV0YWlsZWRfaW5mb19lZWRpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICBzdHJ1Y3QgZWRpZCAqZWRpZCwgdTMyIHF1aXJrcykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJaW50IGksIGosIG1vZGVzID0gMDsKKwljaGFyICplZGlkX2V4dCA9IE5VTEw7CisJc3RydWN0IGRldGFpbGVkX3RpbWluZyAqdGltaW5nOworCXN0cnVjdCBkZXRhaWxlZF9ub25fcGl4ZWwgKmRhdGE7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CisJaW50IGVkaWRfZXh0X251bTsKKwlpbnQgc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0OworCWludCB0aW1pbmdfbGV2ZWw7CisKKwlpZiAoZWRpZC0+dmVyc2lvbiA9PSAxICYmIGVkaWQtPnJldmlzaW9uIDwgMykgeworCQkvKiBJZiB0aGUgRURJRCB2ZXJzaW9uIGlzIGxlc3MgdGhhbiAxLjMsIHRoZXJlIGlzIG5vCisJCSAqIGV4dGVuc2lvbiBFRElELgorCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCWlmICghZWRpZC0+ZXh0ZW5zaW9ucykgeworCQkvKiBpZiB0aGVyZSBpcyBubyBleHRlbnNpb24gRURJRCwgaXQgaXMgdW5uZWNlc3NhcnkgdG8KKwkJICogcGFyc2UgdGhlIEUtRURJRCB0byBnZXQgZGV0YWlsZWQgaW5mbworCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ2hvc2UgcmVhbCBFRElEIGV4dGVuc2lvbiBudW1iZXIgKi8KKwllZGlkX2V4dF9udW0gPSBlZGlkLT5leHRlbnNpb25zID4gTUFYX0VESURfRVhUX05VTSA/CisJCSAgICAgICBNQVhfRURJRF9FWFRfTlVNIDogZWRpZC0+ZXh0ZW5zaW9uczsKKworCS8qIEZpbmQgQ0VBIGV4dGVuc2lvbiAqLworCWZvciAoaSA9IDA7IGkgPCBlZGlkX2V4dF9udW07IGkrKykgeworCQllZGlkX2V4dCA9IChjaGFyICopZWRpZCArIEVESURfTEVOR1RIICogKGkgKyAxKTsKKwkJLyogVGhpcyBibG9jayBpcyBDRUEgZXh0ZW5zaW9uICovCisJCWlmIChlZGlkX2V4dFswXSA9PSAweDAyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gZWRpZF9leHRfbnVtKSB7CisJCS8qIGlmIHRoZXJlIGlzIG5vIGFkZGl0aW9uYWwgdGltaW5nIEVESUQgYmxvY2ssIHJldHVybiAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZXQgdGhlIHN0YXJ0IG9mZnNldCBvZiBkZXRhaWxlZCB0aW1pbmcgYmxvY2sgKi8KKwlzdGFydF9vZmZzZXQgPSBlZGlkX2V4dFsyXTsKKwlpZiAoc3RhcnRfb2Zmc2V0ID09IDApIHsKKwkJLyogSWYgdGhlIHN0YXJ0X29mZnNldCBpcyB6ZXJvLCBpdCBtZWFucyB0aGF0IG5laXRoZXIgZGV0YWlsZWQKKwkJICogaW5mbyBub3IgZGF0YSBibG9jayBleGlzdC4gSW4gc3VjaCBjYXNlIGl0IGlzIGFsc28KKwkJICogdW5uZWNlc3NhcnkgdG8gcGFyc2UgdGhlIGRldGFpbGVkIHRpbWluZyBpbmZvLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJdGltaW5nX2xldmVsID0gc3RhbmRhcmRfdGltaW5nX2xldmVsKGVkaWQpOworCWVuZF9vZmZzZXQgPSBFRElEX0xFTkdUSDsKKwllbmRfb2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nKTsKKwlmb3IgKGkgPSBzdGFydF9vZmZzZXQ7IGkgPCBlbmRfb2Zmc2V0OworCQkJaSArPSBzaXplb2Yoc3RydWN0IGRldGFpbGVkX3RpbWluZykpIHsKKwkJdGltaW5nID0gKHN0cnVjdCBkZXRhaWxlZF90aW1pbmcgKikoZWRpZF9leHQgKyBpKTsKKwkJZGF0YSA9ICZ0aW1pbmctPmRhdGEub3RoZXJfZGF0YTsKKwkJLyogRGV0YWlsZWQgbW9kZSB0aW1pbmcgKi8KKwkJaWYgKHRpbWluZy0+cGl4ZWxfY2xvY2spIHsKKwkJCW5ld21vZGUgPSBkcm1fbW9kZV9kZXRhaWxlZChkZXYsIGVkaWQsIHRpbWluZywgcXVpcmtzKTsKKwkJCWlmICghbmV3bW9kZSkKKwkJCQljb250aW51ZTsKKworCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOworCisJCQltb2RlcysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBPdGhlciB0aW1pbmcgb3IgaW5mbyAqLworCQlzd2l0Y2ggKGRhdGEtPnR5cGUpIHsKKwkJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX1NFUklBTDoKKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfU1RSSU5HOgorCQkJYnJlYWs7CisJCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9SQU5HRToKKwkJCS8qIEdldCBtb25pdG9yIHJhbmdlIGRhdGEgKi8KKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfTkFNRToKKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfQ1BEQVRBOgorCQkJYnJlYWs7CisJCWNhc2UgRURJRF9ERVRBSUxfU1REX01PREVTOgorCQkJLyogRml2ZSBtb2RlcyBwZXIgZGV0YWlsZWQgc2VjdGlvbiAqLworCQkJZm9yIChqID0gMDsgaiA8IDU7IGkrKykgeworCQkJCXN0cnVjdCBzdGRfdGltaW5nICpzdGQ7CisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CisKKwkJCQlzdGQgPSAmZGF0YS0+ZGF0YS50aW1pbmdzW2pdOworCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsIHRpbWluZ19sZXZlbCk7CisJCQkJaWYgKG5ld21vZGUpIHsKKwkJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOworCQkJCQltb2RlcysrOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gbW9kZXM7Cit9CiAKICNkZWZpbmUgRERDX0FERFIgMHg1MAogLyoqCkBAIC01ODQsNyArMTAxMSw2IEBACiAJaWYgKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAyKSA9PSAyKQogCQlyZXR1cm4gMDsKIAotCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gcmVhZCBFRElEIGJsb2NrLlxuIik7CiAJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZG9fcHJvYmVfZGRjX2VkaWQpOwpAQCAtNTk3LDggKzEwMjMsNiBAQAogCiAJcmV0ID0gZHJtX2RvX3Byb2JlX2RkY19lZGlkKGFkYXB0ZXIsIGJ1ZiwgbGVuKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2luZm8oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogbm8gRURJRCBkYXRhXG4iLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJCWdvdG8gZW5kOwogCX0KIAlpZiAoIWVkaWRfaXNfdmFsaWQoKHN0cnVjdCBlZGlkICopYnVmKSkgewpAQCAtNjEwLDcgKzEwMzQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNkZWZpbmUgTUFYX0VESURfRVhUX05VTSA0CiAvKioKICAqIGRybV9nZXRfZWRpZCAtIGdldCBFRElEIGRhdGEsIGlmIGF2YWlsYWJsZQogICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHdlJ3JlIHByb2JpbmcKQEAgLTc2Myw2ICsxMTg2LDcgQEAKIAludW1fbW9kZXMgKz0gYWRkX2VzdGFibGlzaGVkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CiAJbnVtX21vZGVzICs9IGFkZF9zdGFuZGFyZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwogCW51bV9tb2RlcyArPSBhZGRfZGV0YWlsZWRfaW5mbyhjb25uZWN0b3IsIGVkaWQsIHF1aXJrcyk7CisJbnVtX21vZGVzICs9IGFkZF9kZXRhaWxlZF9pbmZvX2VlZGlkKGNvbm5lY3RvciwgZWRpZCwgcXVpcmtzKTsKIAogCWlmIChxdWlya3MgJiAoRURJRF9RVUlSS19QUkVGRVJfTEFSR0VfNjAgfCBFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV83NSkpCiAJCWVkaWRfZml4dXBfcHJlZmVycmVkKGNvbm5lY3RvciwgcXVpcmtzKTsKQEAgLTc4OCwzICsxMjEyLDQ5IEBACiAJcmV0dXJuIG51bV9tb2RlczsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2FkZF9lZGlkX21vZGVzKTsKKworLyoqCisgKiBkcm1fYWRkX21vZGVzX25vZWRpZCAtIGFkZCBtb2RlcyBmb3IgdGhlIGNvbm5lY3RvcnMgd2l0aG91dCBFRElECisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3Igd2UncmUgcHJvYmluZworICogQGhkaXNwbGF5OiB0aGUgaG9yaXpvbnRhbCBkaXNwbGF5IGxpbWl0CisgKiBAdmRpc3BsYXk6IHRoZSB2ZXJ0aWNhbCBkaXNwbGF5IGxpbWl0CisgKgorICogQWRkIHRoZSBzcGVjaWZpZWQgbW9kZXMgdG8gdGhlIGNvbm5lY3RvcidzIG1vZGUgbGlzdC4gT25seSB3aGVuIHRoZQorICogaGRpc3BsYXkvdmRpc3BsYXkgaXMgbm90IGJleW9uZCB0aGUgZ2l2ZW4gbGltaXQsIGl0IHdpbGwgYmUgYWRkZWQuCisgKgorICogUmV0dXJuIG51bWJlciBvZiBtb2RlcyBhZGRlZCBvciAwIGlmIHdlIGNvdWxkbid0IGZpbmQgYW55LgorICovCitpbnQgZHJtX2FkZF9tb2Rlc19ub2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5KQoreworCWludCBpLCBjb3VudCwgbnVtX21vZGVzID0gMDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKnB0cjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisKKwljb3VudCA9IHNpemVvZihkcm1fZG10X21vZGVzKSAvIHNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSk7CisJaWYgKGhkaXNwbGF5IDwgMCkKKwkJaGRpc3BsYXkgPSAwOworCWlmICh2ZGlzcGxheSA8IDApCisJCXZkaXNwbGF5ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXB0ciA9ICZkcm1fZG10X21vZGVzW2ldOworCQlpZiAoaGRpc3BsYXkgJiYgdmRpc3BsYXkpIHsKKwkJCS8qCisJCQkgKiBPbmx5IHdoZW4gdHdvIGFyZSB2YWxpZCwgdGhleSB3aWxsIGJlIHVzZWQgdG8gY2hlY2sKKwkJCSAqIHdoZXRoZXIgdGhlIG1vZGUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBtb2RlIGxpc3Qgb2YKKwkJCSAqIHRoZSBjb25uZWN0b3IuCisJCQkgKi8KKwkJCWlmIChwdHItPmhkaXNwbGF5ID4gaGRpc3BsYXkgfHwKKwkJCQkJcHRyLT52ZGlzcGxheSA+IHZkaXNwbGF5KQorCQkJCWNvbnRpbnVlOworCQl9CisJCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBwdHIpOworCQlpZiAobW9kZSkgeworCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCQkJbnVtX21vZGVzKys7CisJCX0KKwl9CisJcmV0dXJuIG51bV9tb2RlczsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2FkZF9tb2Rlc19ub2VkaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lbmNvZGVyX3NsYXZlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VuY29kZXJfc2xhdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDE4NDY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lbmNvZGVyX3NsYXZlLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRnJhbmNpc2NvIEplcmV6LgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwKKyAqIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUihTKSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybV9lbmNvZGVyX3NsYXZlLmgiCisKKy8qKgorICogZHJtX2kyY19lbmNvZGVyX2luaXQgLSBJbml0aWFsaXplIGFuIEkyQyBzbGF2ZSBlbmNvZGVyCisgKiBAZGV2OglEUk0gZGV2aWNlLgorICogQGVuY29kZXI6ICAgIEVuY29kZXIgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIEkyQyBkZXZpY2UuIFlvdSBhcmVuJ3QKKyAqCQlyZXF1aXJlZCB0byBoYXZlIGNhbGxlZCBkcm1fZW5jb2Rlcl9pbml0KCkgYmVmb3JlLgorICogQGFkYXA6CUkyQyBhZGFwdGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGgKKyAqCQl0aGUgZGV2aWNlLgorICogQGluZm86CUluZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgSTJDIGRldmljZS4KKyAqCQlSZXF1aXJlZCBmaWVsZHMgYXJlIEBhZGRyIGFuZCBAdHlwZS4KKyAqCisgKiBDcmVhdGUgYW4gSTJDIGRldmljZSBvbiB0aGUgc3BlY2lmaWVkIGJ1cyAodGhlIG1vZHVsZSBjb250YWluaW5nIGl0cworICogZHJpdmVyIGlzIHRyYW5zcGFyZW50bHkgbG9hZGVkKSBhbmQgYXR0YWNoIGl0IHRvIHRoZSBzcGVjaWZpZWQKKyAqICZkcm1fZW5jb2Rlcl9zbGF2ZS4gVGhlIEBzbGF2ZV9mdW5jcyBmaWVsZCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGgKKyAqIHRoZSBob29rcyBwcm92aWRlZCBieSB0aGUgc2xhdmUgZHJpdmVyLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSwgaW4gcGFydGljdWxhciwKKyAqIC1FTk9ERVYgaXMgcmV0dXJuZWQgd2hlbiBubyBtYXRjaGluZyBkcml2ZXIgaXMgZm91bmQuCisgKi8KK2ludCBkcm1faTJjX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZSAqZW5jb2RlciwKKwkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkgY29uc3Qgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQoreworCWNoYXIgbW9kYWxpYXNbc2l6ZW9mKEkyQ19NT0RVTEVfUFJFRklYKQorCQkgICAgICArIEkyQ19OQU1FX1NJWkVdOworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSA9IE5VTEw7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZHJtX2kyY19lbmNvZGVyX2RyaXZlciAqZW5jb2Rlcl9kcnY7CisJaW50IGVyciA9IDA7CisKKwlzbnByaW50Zihtb2RhbGlhcywgc2l6ZW9mKG1vZGFsaWFzKSwKKwkJICIlcyVzIiwgSTJDX01PRFVMRV9QUkVGSVgsIGluZm8tPnR5cGUpOworCXJlcXVlc3RfbW9kdWxlKG1vZGFsaWFzKTsKKworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXAsIGluZm8pOworCWlmICghY2xpZW50KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF91bnJlZ2lzdGVyOworCX0KKworCW1vZHVsZSA9IGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXI7CisJaWYgKCF0cnlfbW9kdWxlX2dldChtb2R1bGUpKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF91bnJlZ2lzdGVyOworCX0KKworCWVuY29kZXItPmJ1c19wcml2ID0gY2xpZW50OworCisJZW5jb2Rlcl9kcnYgPSB0b19kcm1faTJjX2VuY29kZXJfZHJpdmVyKGNsaWVudC0+ZHJpdmVyKTsKKworCWVyciA9IGVuY29kZXJfZHJ2LT5lbmNvZGVyX2luaXQoY2xpZW50LCBkZXYsIGVuY29kZXIpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2ZhaWxfdW5yZWdpc3RlcjoKKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwltb2R1bGVfcHV0KG1vZHVsZSk7CitmYWlsOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9pMmNfZW5jb2Rlcl9pbml0KTsKKworLyoqCisgKiBkcm1faTJjX2VuY29kZXJfZGVzdHJveSAtIFVucmVnaXN0ZXIgdGhlIEkyQyBkZXZpY2UgYmFja2luZyBhbiBlbmNvZGVyCisgKiBAZHJtX2VuY29kZXI6CUVuY29kZXIgdG8gYmUgdW5yZWdpc3RlcmVkLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBAZGVzdHJveSBtZXRob2Qgb2YgYW4gSTJDIHNsYXZlCisgKiBlbmNvZGVyIGRyaXZlciBvbmNlIEkyQyBhY2Nlc3MgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAqLwordm9pZCBkcm1faTJjX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZSAqZW5jb2RlciA9IHRvX2VuY29kZXJfc2xhdmUoZHJtX2VuY29kZXIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkcm1faTJjX2VuY29kZXJfZ2V0X2NsaWVudChkcm1fZW5jb2Rlcik7CisJc3RydWN0IG1vZHVsZSAqbW9kdWxlID0gY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcjsKKworCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOworCWVuY29kZXItPmJ1c19wcml2ID0gTlVMTDsKKworCW1vZHVsZV9wdXQobW9kdWxlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2kyY19lbmNvZGVyX2Rlc3Ryb3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0NjcxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTAsMCArMSw3MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+CisgKgorICogRFJNIGZyYW1lYnVmZmVyIGhlbHBlciBmdW5jdGlvbnMKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgIERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICogICAgICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAiZHJtX2ZiX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorCitNT0RVTEVfQVVUSE9SKCJEYXZpZCBBaXJsaWUsIEplc3NlIEJhcm5lcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gS01TIGhlbHBlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKKworc3RhdGljIExJU1RfSEVBRChrZXJuZWxfZmJfaGVscGVyX2xpc3QpOworCitib29sIGRybV9mYl9oZWxwZXJfZm9yY2Vfa2VybmVsX21vZGUodm9pZCkKK3sKKwlpbnQgaSA9IDA7CisJYm9vbCByZXQsIGVycm9yID0gZmFsc2U7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcjsKKworCWlmIChsaXN0X2VtcHR5KCZrZXJuZWxfZmJfaGVscGVyX2xpc3QpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhlbHBlciwgJmtlcm5lbF9mYl9oZWxwZXJfbGlzdCwga2VybmVsX2ZiX2xpc3QpIHsKKwkJZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZoZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKwkJCXJldCA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0KTsKKwkJCWlmIChyZXQpCisJCQkJZXJyb3IgPSB0cnVlOworCQl9CisJfQorCXJldHVybiBlcnJvcjsKK30KKworaW50IGRybV9mYl9oZWxwZXJfcGFuaWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLCB1bnNpZ25lZCBsb25nIHVudW5zZWQsCisJCQl2b2lkICpwYW5pY19zdHIpCit7CisJRFJNX0VSUk9SKCJwYW5pYyBvY2N1cnJlZCwgc3dpdGNoaW5nIGJhY2sgdG8gdGV4dCBjb25zb2xlXG4iKTsKKwlyZXR1cm4gZHJtX2ZiX2hlbHBlcl9mb3JjZV9rZXJuZWxfbW9kZSgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3BhbmljKTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY2VkID0geworCS5ub3RpZmllcl9jYWxsID0gZHJtX2ZiX2hlbHBlcl9wYW5pYywKK307CisKKy8qKgorICogZHJtX2ZiX2hlbHBlcl9yZXN0b3JlIC0gcmVzdG9yZSB0aGUgZnJhbWVidWZmZXIgY29uc29sZSAoa2VybmVsKSBjb25maWcKKyAqCisgKiBSZXN0b3JlJ3MgdGhlIGtlcm5lbCdzIGZiY29uIG1vZGUsIHVzZWQgZm9yIGxhc3RjbG9zZSAmIHBhbmljIHBhdGhzLgorICovCit2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZSh2b2lkKQoreworCWJvb2wgcmV0OworCXJldCA9IGRybV9mYl9oZWxwZXJfZm9yY2Vfa2VybmVsX21vZGUoKTsKKwlpZiAocmV0ID09IHRydWUpCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlc3RvcmUgY3J0YyBjb25maWd1cmF0aW9uXG4iKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9yZXN0b3JlKTsKKworc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQoreworCWRybV9mYl9oZWxwZXJfcmVzdG9yZSgpOworfQorc3RhdGljIERFQ0xBUkVfV09SSyhkcm1fZmJfaGVscGVyX3Jlc3RvcmVfd29yaywgZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX3dvcmtfZm4pOworCitzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX3N5c3JxKGludCBkdW1teTEsIHN0cnVjdCB0dHlfc3RydWN0ICpkdW1teTMpCit7CisJc2NoZWR1bGVfd29yaygmZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX3dvcmspOworfQorCitzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9kcm1fZmJfaGVscGVyX3Jlc3RvcmVfb3AgPSB7CisJLmhhbmRsZXIgPSBkcm1fZmJfaGVscGVyX3N5c3JxLAorCS5oZWxwX21zZyA9ICJmb3JjZS1mYihWKSIsCisJLmFjdGlvbl9tc2cgPSAiUmVzdG9yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIiwKK307CisKK3N0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfb24oc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlpbnQgaTsKKworCS8qCisJICogRm9yIGVhY2ggQ1JUQyBpbiB0aGlzIGZiLCB0dXJuIHRoZSBjcnRjIG9uIHRoZW4sCisJICogZmluZCBhbGwgYXNzb2NpYXRlZCBlbmNvZGVycyBhbmQgdHVybiB0aGVtIG9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9CisJCQkJY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisKKwkJCS8qIE9ubHkgbWVzcyB3aXRoIENSVENzIGluIHRoaXMgZmIgKi8KKwkJCWlmIChjcnRjLT5iYXNlLmlkICE9IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLmNydGNfaWQgfHwKKwkJCSAgICAhY3J0Yy0+ZW5hYmxlZCkKKwkJCQljb250aW51ZTsKKworCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKworCQkJLyogRm91bmQgYSBDUlRDIG9uIHRoaXMgZmIsIG5vdyBmaW5kIGVuY29kZXJzICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQkJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKKwkJCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKworCQkJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCQkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOworCQkJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9vZmYoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBkcG1zX21vZGUpCit7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlpbnQgaTsKKworCS8qCisJICogRm9yIGVhY2ggQ1JUQyBpbiB0aGlzIGZiLCBmaW5kIGFsbCBhc3NvY2lhdGVkIGVuY29kZXJzCisJICogYW5kIHR1cm4gdGhlbSBvZmYsIHRoZW4gdHVybiBvZmYgdGhlIENSVEMuCisJICovCisJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0KKwkJCQljcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKworCQkJLyogT25seSBtZXNzIHdpdGggQ1JUQ3MgaW4gdGhpcyBmYiAqLworCQkJaWYgKGNydGMtPmJhc2UuaWQgIT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0uY3J0Y19pZCB8fAorCQkJICAgICFjcnRjLT5lbmFibGVkKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBGb3VuZCBhIENSVEMgb24gdGhpcyBmYiwgbm93IGZpbmQgZW5jb2RlcnMgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCQkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJCQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2Z1bmNzOworCisJCQkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKKwkJCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQkJCWVuY29kZXJfZnVuY3MtPmRwbXMoZW5jb2RlciwgZHBtc19tb2RlKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCQl9CisJCQl9CisJCQlpZiAoZHBtc19tb2RlID09IERSTV9NT0RFX0RQTVNfT0ZGKSB7CisJCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQkJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBkcG1zX21vZGUpOworCQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQl9CisJCX0KKwl9Cit9CisKK2ludCBkcm1fZmJfaGVscGVyX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3dpdGNoIChibGFuaykgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJZHJtX2ZiX2hlbHBlcl9vbihpbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCWRybV9mYl9oZWxwZXJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1RBTkRCWSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwkJZHJtX2ZiX2hlbHBlcl9vZmYoaW5mbywgRFJNX01PREVfRFBNU19TVEFOREJZKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCQlkcm1fZmJfaGVscGVyX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NVU1BFTkQpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJZHJtX2ZiX2hlbHBlcl9vZmYoaW5mbywgRFJNX01PREVfRFBNU19PRkYpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfYmxhbmspOworCitzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX2NydGNfZnJlZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y3J0Y19jb3VudDsgaSsrKQorCQlrZnJlZShoZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5jb25uZWN0b3JzKTsKKwlrZnJlZShoZWxwZXItPmNydGNfaW5mbyk7Cit9CisKK2ludCBkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLCBpbnQgY3J0Y19jb3VudCwgaW50IG1heF9jb25uX2NvdW50KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBoZWxwZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwloZWxwZXItPmNydGNfaW5mbyA9IGtjYWxsb2MoY3J0Y19jb3VudCwgc2l6ZW9mKHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhlbHBlci0+Y3J0Y19pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhlbHBlci0+Y3J0Y19jb3VudCA9IGNydGNfY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3J0Y19jb3VudDsgaSsrKSB7CisJCWhlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmNvbm5lY3RvcnMgPQorCQkJa2NhbGxvYyhtYXhfY29ubl9jb3VudCwKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9jb25uZWN0b3IgKiksCisJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFoZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5jb25uZWN0b3JzKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQloZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5udW1fY29ubmVjdG9ycyA9IDA7CisJfQorCisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJaGVscGVyLT5jcnRjX2luZm9baV0uY3J0Y19pZCA9IGNydGMtPmJhc2UuaWQ7CisJCWhlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmNydGMgPSBjcnRjOworCQlpKys7CisJfQorCWhlbHBlci0+Y29ubl9saW1pdCA9IG1heF9jb25uX2NvdW50OworCXJldHVybiAwOworb3V0X2ZyZWU6CisJZHJtX2ZiX2hlbHBlcl9jcnRjX2ZyZWUoaGVscGVyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQpOworCitpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sCisJCQkgICAgdW5zaWduZWQgcmVkLAorCQkJICAgIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgIHVuc2lnbmVkIGJsdWUsCisJCQkgICAgdW5zaWduZWQgdHJhbnNwLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZmJfaGVscGVyLT5mYjsKKworCQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKKwkJCWlmIChjcnRjLT5iYXNlLmlkID09IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLmNydGNfaWQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gZmJfaGVscGVyLT5jcnRjX2NvdW50KQorCQkJY29udGludWU7CisKKwkJaWYgKHJlZ25vID4gMjU1KQorCQkJcmV0dXJuIDE7CisKKwkJaWYgKGZiLT5kZXB0aCA9PSA4KSB7CisJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAocmVnbm8gPCAxNikgeworCQkJc3dpdGNoIChmYi0+ZGVwdGgpIHsKKwkJCWNhc2UgMTU6CisJCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9ICgocmVkICYgMHhmODAwKSA+PiAxKSB8CisJCQkJCSgoZ3JlZW4gJiAweGY4MDApID4+ICA2KSB8CisJCQkJCSgoYmx1ZSAmIDB4ZjgwMCkgPj4gMTEpOworCQkJCWJyZWFrOworCQkJY2FzZSAxNjoKKwkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKHJlZCAmIDB4ZjgwMCkgfAorCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAorCQkJCQkoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI0OgorCQkJY2FzZSAzMjoKKwkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0KKwkJCQkJKCgocmVkID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKKwkJCQkJKCgoZ3JlZW4gPj4gOCkgJiAweGZmKSA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8CisJCQkJCSgoKGJsdWUgPj4gOCkgJiAweGZmKSA8PCBpbmZvLT52YXIuYmx1ZS5vZmZzZXQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NldGNvbHJlZyk7CisKK2ludCBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZmJfaGVscGVyLT5mYjsKKwlpbnQgZGVwdGg7CisKKwlpZiAodmFyLT5waXhjbG9jayA9PSAtMSB8fCAhdmFyLT5waXhjbG9jaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBOZWVkIHRvIHJlc2l6ZSB0aGUgZmIgb2JqZWN0ICEhISAqLworCWlmICh2YXItPnhyZXMgPiBmYi0+d2lkdGggfHwgdmFyLT55cmVzID4gZmItPmhlaWdodCkgeworCQlEUk1fRVJST1IoIlJlcXVlc3RlZCB3aWR0aC9oZWlnaHQgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZmIgIgorCQkJICAgIm9iamVjdCAlZHglZCA+ICVkeCVkXG4iLCB2YXItPnhyZXMsIHZhci0+eXJlcywKKwkJCSAgIGZiLT53aWR0aCwgZmItPmhlaWdodCk7CisJCURSTV9FUlJPUigiTmVlZCByZXNpemluZyBjb2RlLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMTY6CisJCWRlcHRoID0gKHZhci0+Z3JlZW4ubGVuZ3RoID09IDYpID8gMTYgOiAxNTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJZGVwdGggPSAodmFyLT50cmFuc3AubGVuZ3RoID4gMCkgPyAzMiA6IDI0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXB0aCA9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZGVwdGgpIHsKKwljYXNlIDg6CisJCXZhci0+cmVkLm9mZnNldCA9IDA7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCWJyZWFrOworCWNhc2UgMTU6CisJCXZhci0+cmVkLm9mZnNldCA9IDEwOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDU7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAxOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAxNTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXZhci0+cmVkLm9mZnNldCA9IDE2OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIDMyOgorCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gODsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9jaGVja192YXIpOworCisvKiB0aGlzIHdpbGwgbGV0IGZiY29uIGRvIHRoZSBtb2RlIGluaXQgKi8KK2ludCBkcm1fZmJfaGVscGVyX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKHZhci0+cGl4Y2xvY2sgIT0gLTEpIHsKKwkJRFJNX0VSUk9SKCJQSVhFTCBDTENPSyBTRVRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCisJCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0uY3J0Y19pZCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCisJCQljb250aW51ZTsKKworCQlpZiAoY3J0Yy0+ZmIgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuZmIpIHsKKwkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcoJmZiX2hlbHBlci0+Y3J0Y19pbmZvLT5tb2RlX3NldCk7CisJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NldF9wYXIpOworCitpbnQgZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWludCByZXQgPSAwOworCWludCBpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CisJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGkgPT0gZmJfaGVscGVyLT5jcnRjX2NvdW50KQorCQkJY29udGludWU7CisKKwkJbW9kZXNldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKworCQltb2Rlc2V0LT54ID0gdmFyLT54b2Zmc2V0OworCQltb2Rlc2V0LT55ID0gdmFyLT55b2Zmc2V0OworCisJCWlmIChtb2Rlc2V0LT5udW1fY29ubmVjdG9ycykgeworCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZyhtb2Rlc2V0KTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQlpZiAoIXJldCkgeworCQkJCWluZm8tPnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0OworCQkJCWluZm8tPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OworCQkJfQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkpOworCitpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmZiX2NyZWF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHVpbnQzMl90IGZiX3dpZHRoLAorCQkJCQkJICAgdWludDMyX3QgZmJfaGVpZ2h0LAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV93aWR0aCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3B0cikpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJdW5zaWduZWQgaW50IGZiX3dpZHRoID0gKHVuc2lnbmVkKS0xLCBmYl9oZWlnaHQgPSAodW5zaWduZWQpLTE7CisJdW5zaWduZWQgaW50IHN1cmZhY2Vfd2lkdGggPSAwLCBzdXJmYWNlX2hlaWdodCA9IDA7CisJaW50IG5ld19mYiA9IDA7CisJaW50IGNydGNfY291bnQgPSAwOworCWludCByZXQsIGksIGNvbm5fY291bnQgPSAwOworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSBOVUxMOworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXI7CisKKwkvKiBmaXJzdCB1cCBnZXQgYSBjb3VudCBvZiBjcnRjcyBub3cgaW4gdXNlIGFuZCBuZXcgbWluL21heGVzIHdpZHRoL2hlaWdodHMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlpZiAoZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkgeworCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZSkgeworCQkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5IDwgZmJfd2lkdGgpCisJCQkJCWZiX3dpZHRoID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheTsKKworCQkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5IDwgZmJfaGVpZ2h0KQorCQkJCQlmYl9oZWlnaHQgPSBjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5OworCisJCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXkgPiBzdXJmYWNlX3dpZHRoKQorCQkJCQlzdXJmYWNlX3dpZHRoID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheTsKKworCQkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5ID4gc3VyZmFjZV9oZWlnaHQpCisJCQkJCXN1cmZhY2VfaGVpZ2h0ID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheTsKKwkJCX0KKwkJCWNydGNfY291bnQrKzsKKwkJfQorCX0KKworCWlmIChjcnRjX2NvdW50ID09IDAgfHwgZmJfd2lkdGggPT0gLTEgfHwgZmJfaGVpZ2h0ID09IC0xKSB7CisJCS8qIGhtbSBldmVyeW9uZSB3ZW50IGF3YXkgLSBhc3N1bWUgVkdBIGNhYmxlIGp1c3QgZmVsbCBvdXQKKwkJICAgYW5kIHdpbGwgY29tZSBiYWNrIGxhdGVyLiAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBkbyB3ZSBoYXZlIGFuIGZiIGFscmVhZHk/ICovCisJaWYgKGxpc3RfZW1wdHkoJmRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QpKSB7CisJCXJldCA9ICgqZmJfY3JlYXRlKShkZXYsIGZiX3dpZHRoLCBmYl9oZWlnaHQsIHN1cmZhY2Vfd2lkdGgsCisJCQkJICAgc3VyZmFjZV9oZWlnaHQsICZmYik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbmV3X2ZiID0gMTsKKwl9IGVsc2UgeworCQlmYiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QsCisJCQkJICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciwgZmlscF9oZWFkKTsKKworCQkvKiBpZiBzb21lb25lIGhvdHBsdWdzIHNvbWV0aGluZyBiaWdnZXIgdGhhbiB3ZSBoYXZlIGFscmVhZHkgYWxsb2NhdGVkLCB3ZSBhcmUgcHduZWQuCisJCSAgIEFzIHJlYWxseSB3ZSBjYW4ndCByZXNpemUgYW4gZmJkZXYgdGhhdCBpcyBpbiB0aGUgd2lsZCBjdXJyZW50bHkgZHVlIHRvIGZiZGV2CisJCSAgIG5vdCByZWFsbHkgYmVpbmcgZGVzaWduZWQgZm9yIHRoZSBsb3dlciBsYXllcnMgbW92aW5nIHN0dWZmIGFyb3VuZCB1bmRlciBpdC4KKwkJICAgLSBzbyBpbiB0aGUgZ3JhbmQgc3R5bGUgb2YgdGhpbmdzIC0gcHVudC4gKi8KKwkJaWYgKChmYi0+d2lkdGggPCBzdXJmYWNlX3dpZHRoKSB8fAorCQkgICAgKGZiLT5oZWlnaHQgPCBzdXJmYWNlX2hlaWdodCkpIHsKKwkJCURSTV9FUlJPUigiRnJhbWVidWZmZXIgbm90IGxhcmdlIGVub3VnaCB0byBzY2FsZSBjb25zb2xlIG9udG8uXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaW5mbyA9IGZiLT5mYmRldjsKKwlmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisKKwljcnRjX2NvdW50ID0gMDsKKwkvKiBva2F5IHdlIG5lZWQgdG8gc2V0dXAgbmV3IGNvbm5lY3RvciBzZXRzIGluIHRoZSBjcnRjcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCW1vZGVzZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9bY3J0Y19jb3VudF0ubW9kZV9zZXQ7CisJCW1vZGVzZXQtPmZiID0gZmI7CisJCWNvbm5fY291bnQgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCisJCQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9PSBtb2Rlc2V0LT5jcnRjKSB7CisJCQkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbY29ubl9jb3VudF0gPSBjb25uZWN0b3I7CisJCQkJCWNvbm5fY291bnQrKzsKKwkJCQkJaWYgKGNvbm5fY291bnQgPiBmYl9oZWxwZXItPmNvbm5fbGltaXQpCisJCQkJCQlCVUcoKTsKKwkJCQl9CisJCX0KKworCQlmb3IgKGkgPSBjb25uX2NvdW50OyBpIDwgZmJfaGVscGVyLT5jb25uX2xpbWl0OyBpKyspCisJCQltb2Rlc2V0LT5jb25uZWN0b3JzW2ldID0gTlVMTDsKKworCQltb2Rlc2V0LT5jcnRjID0gY3J0YzsKKwkJY3J0Y19jb3VudCsrOworCisJCW1vZGVzZXQtPm51bV9jb25uZWN0b3JzID0gY29ubl9jb3VudDsKKwkJaWYgKG1vZGVzZXQtPmNydGMtPmRlc2lyZWRfbW9kZSkgeworCQkJaWYgKG1vZGVzZXQtPm1vZGUpCisJCQkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGVzZXQtPm1vZGUpOworCQkJbW9kZXNldC0+bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsCisJCQkJCQkJICAgbW9kZXNldC0+Y3J0Yy0+ZGVzaXJlZF9tb2RlKTsKKwkJfQorCX0KKwlmYl9oZWxwZXItPmNydGNfY291bnQgPSBjcnRjX2NvdW50OworCWZiX2hlbHBlci0+ZmIgPSBmYjsKKworCWlmIChuZXdfZmIpIHsKKwkJaW5mby0+dmFyLnBpeGNsb2NrID0gLTE7CisJCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlkcm1fZmJfaGVscGVyX3NldF9wYXIoaW5mbyk7CisJfQorCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsIGluZm8tPm5vZGUsCisJICAgICAgIGluZm8tPmZpeC5pZCk7CisKKwkvKiBTd2l0Y2ggYmFjayB0byBrZXJuZWwgY29uc29sZSBvbiBwYW5pYyAqLworCS8qIG11bHRpIGNhcmQgbGlua2VkIGxpc3QgbWF5YmUgKi8KKwlpZiAobGlzdF9lbXB0eSgma2VybmVsX2ZiX2hlbHBlcl9saXN0KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJyZWdpc3RlcmVkIHBhbmljIG5vdGlmaWVyXG4iKTsKKwkJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgICAgICAgJnBhbmljZWQpOworCQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3YnLCAmc3lzcnFfZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX29wKTsKKwl9CisJbGlzdF9hZGQoJmZiX2hlbHBlci0+a2VybmVsX2ZiX2xpc3QsICZrZXJuZWxfZmJfaGVscGVyX2xpc3QpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZSk7CisKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9mcmVlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIpCit7CisJbGlzdF9kZWwoJmhlbHBlci0+a2VybmVsX2ZiX2xpc3QpOworCWlmIChsaXN0X2VtcHR5KCZrZXJuZWxfZmJfaGVscGVyX2xpc3QpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInVucmVnaXN0ZXJlZCBwYW5pYyBub3RpZmllclxuIik7CisJCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkJICZwYW5pY2VkKTsKKwkJdW5yZWdpc3Rlcl9zeXNycV9rZXkoJ3YnLCAmc3lzcnFfZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX29wKTsKKwl9CisJZHJtX2ZiX2hlbHBlcl9jcnRjX2ZyZWUoaGVscGVyKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9mcmVlKTsKKwordm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCkKK3sKKwlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlpbmZvLT5maXgudHlwZV9hdXggPSAwOworCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCisJaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KKwlpbmZvLT5maXgueXdyYXBzdGVwID0gMDsKKwlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CisKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSBwaXRjaDsKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZmlsbF9maXgpOworCit2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQpCit7CisJaW5mby0+cHNldWRvX3BhbGV0dGUgPSBmYi0+cHNldWRvX3BhbGV0dGU7CisJaW5mby0+dmFyLnhyZXNfdmlydHVhbCA9IGZiLT53aWR0aDsKKwlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gZmItPmhlaWdodDsKKwlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBmYi0+Yml0c19wZXJfcGl4ZWw7CisJaW5mby0+dmFyLnhvZmZzZXQgPSAwOworCWluZm8tPnZhci55b2Zmc2V0ID0gMDsKKwlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisJaW5mby0+dmFyLmhlaWdodCA9IC0xOworCWluZm8tPnZhci53aWR0aCA9IC0xOworCisJc3dpdGNoIChmYi0+ZGVwdGgpIHsKKwljYXNlIDg6CisJCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsgLyogOGJpdCBEQUMgKi8KKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOworCQlicmVhazsKKwljYXNlIDE1OgorCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDEwOworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNTsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKKwkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAxNTsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAxOworCQlicmVhazsKKwljYXNlIDE2OgorCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDExOworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNjsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKKwkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIDI0OgorCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDE2OworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOworCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTY7CisJCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA4OworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOworCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OworCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDI0OworCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWluZm8tPnZhci54cmVzID0gZmJfd2lkdGg7CisJaW5mby0+dmFyLnlyZXMgPSBmYl9oZWlnaHQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZmlsbF92YXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKaW5kZXggZmZlOGY0My4uMjMwYzlmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCkBAIC0xNjQsNyArMTY0LDcgQEAKICAqIFJlbW92ZXMgdGhlIG1hcHBpbmcgZnJvbSBoYW5kbGUgdG8gZmlscCBmb3IgdGhpcyBvYmplY3QuCiAgKi8KIHN0YXRpYyBpbnQKLWRybV9nZW1faGFuZGxlX2RlbGV0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsIGludCBoYW5kbGUpCitkcm1fZ2VtX2hhbmRsZV9kZWxldGUoc3RydWN0IGRybV9maWxlICpmaWxwLCB1MzIgaGFuZGxlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CkBAIC0yMDcsNyArMjA3LDcgQEAKIGludAogZHJtX2dlbV9oYW5kbGVfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCQkgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCSAgICAgICBpbnQgKmhhbmRsZXApCisJCSAgICAgICB1MzIgKmhhbmRsZXApCiB7CiAJaW50CXJldDsKIApAQCAtMjIxLDcgKzIyMSw3IEBACiAKIAkvKiBkbyB0aGUgYWxsb2NhdGlvbiB1bmRlciBvdXIgc3BpbmxvY2sgKi8KIAlzcGluX2xvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7Ci0JcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwgb2JqLCAxLCBoYW5kbGVwKTsKKwlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZmlsZV9wcml2LT5vYmplY3RfaWRyLCBvYmosIDEsIChpbnQgKiloYW5kbGVwKTsKIAlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKIAlpZiAocmV0ID09IC1FQUdBSU4pCiAJCWdvdG8gYWdhaW47CkBAIC0yMzcsNyArMjM3LDcgQEAKIC8qKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgbmFtZWQgYnkgdGhlIGhhbmRsZS4gKi8KIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqCiBkcm1fZ2VtX29iamVjdF9sb29rdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxwLAotCQkgICAgICBpbnQgaGFuZGxlKQorCQkgICAgICB1MzIgaGFuZGxlKQogewogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCkBAIC0zNDQsNyArMzQ0LDcgQEAKIAlzdHJ1Y3QgZHJtX2dlbV9vcGVuICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0OwotCWludCBoYW5kbGU7CisJdTMyIGhhbmRsZTsKIAogCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01MzksNyArNTM5LDYgQEAKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEIHwgVk1fSU8gfCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EOwogCXZtYS0+dm1fb3BzID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ZtX29wczsKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcC0+aGFuZGxlOwotCS8qIEZJWE1FOiB1c2UgcGdwcm90X3dyaXRlY29tYmluZSB3aGVuIGF2YWlsYWJsZSAqLwogCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtPnZtX3BhZ2VfcHJvdCk7CiAKIAkvKiBUYWtlIGEgcmVmIGZvciB0aGlzIG1hcHBpbmcgb2YgdGhlIG9iamVjdCwgc28gdGhhdCB0aGUgZmF1bHQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IGY4NWFhZjIuLjBhNmYwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CS8qIEZvciB0YXNrIHF1ZXVlIHN1cHBvcnQgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgogLyoqCiAgKiBHZXQgaW50ZXJydXB0IGZyb20gYnVzIGlkLgogICoKQEAgLTE3MSw2ICsxNzIsMjYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX3ZibGFua19pbml0KTsKIAorc3RhdGljIHZvaWQgZHJtX2lycV92Z2FhcmJfbm9rbXModm9pZCAqY29va2llLCBib29sIHN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb29raWU7CisKKwlpZiAoZGV2LT5kcml2ZXItPnZnYWFyYl9pcnEpIHsKKwkJZGV2LT5kcml2ZXItPnZnYWFyYl9pcnEoZGV2LCBzdGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWRldi0+aXJxX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChzdGF0ZSkKKwkJZGV2LT5kcml2ZXItPmlycV91bmluc3RhbGwoZGV2KTsKKwllbHNlIHsKKwkJZGV2LT5kcml2ZXItPmlycV9wcmVpbnN0YWxsKGRldik7CisJCWRldi0+ZHJpdmVyLT5pcnFfcG9zdGluc3RhbGwoZGV2KTsKKwl9Cit9CisKIC8qKgogICogSW5zdGFsbCBJUlEgaGFuZGxlci4KICAqCkBAIC0yMzEsNiArMjUyLDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCAodm9pZCAqKWRldiwgZHJtX2lycV92Z2FhcmJfbm9rbXMsIE5VTEwpOworCiAJLyogQWZ0ZXIgaW5zdGFsbGluZyBoYW5kbGVyICovCiAJcmV0ID0gZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbChkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0yNzksNiArMzAzLDkgQEAKIAogCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPnBkZXYtPmlycSk7CiAKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwogCWRldi0+ZHJpdmVyLT5pcnFfdW5pbnN0YWxsKGRldik7CiAKIAlmcmVlX2lycShkZXYtPnBkZXYtPmlycSwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwppbmRleCAzZTQ3ODY5Li5jODYxZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybV9tbS5oIgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjZGVmaW5lIE1NX1VOVVNFRF9UQVJHRVQgNAogCkBAIC0zNzAsMyArMzcxLDIzIEBACiAJQlVHX09OKG1tLT5udW1fdW51c2VkICE9IDApOwogfQogRVhQT1JUX1NZTUJPTChkcm1fbW1fdGFrZWRvd24pOworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCitpbnQgZHJtX21tX2R1bXBfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZHJtX21tICptbSkKK3sKKwlzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5OworCWludCB0b3RhbF91c2VkID0gMCwgdG90YWxfZnJlZSA9IDAsIHRvdGFsID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZtbS0+bWxfZW50cnksIG1sX2VudHJ5KSB7CisJCXNlcV9wcmludGYobSwgIjB4JTA4bHgtMHglMDhseDogMHglMDhseDogJXNcbiIsIGVudHJ5LT5zdGFydCwgZW50cnktPnN0YXJ0ICsgZW50cnktPnNpemUsIGVudHJ5LT5zaXplLCBlbnRyeS0+ZnJlZSA/ICJmcmVlIiA6ICJ1c2VkIik7CisJCXRvdGFsICs9IGVudHJ5LT5zaXplOworCQlpZiAoZW50cnktPmZyZWUpCisJCQl0b3RhbF9mcmVlICs9IGVudHJ5LT5zaXplOworCQllbHNlCisJCQl0b3RhbF91c2VkICs9IGVudHJ5LT5zaXplOworCX0KKwlzZXFfcHJpbnRmKG0sICJ0b3RhbDogJWQsIHVzZWQgJWQgZnJlZSAlZFxuIiwgdG90YWwsIHRvdGFsX2ZyZWUsIHRvdGFsX3VzZWQpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fZHVtcF90YWJsZSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwppbmRleCA3OTE0MDk3Li40OTQwNGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCkBAIC04LDYgKzgsOCBAQAogICogQ29weXJpZ2h0IMKpIDIwMDcgRGF2ZSBBaXJsaWUKICAqIENvcHlyaWdodCDCqSAyMDA3LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KICAqICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiBMdWMgVmVyaGFlZ2VuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIEFuZHkgUml0Z2VyICBhcml0Z2VyQG52aWRpYS5jb20KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTM4LDcgKzQwLDYgQEAKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJkcm1fY3J0Yy5oIgogCi0jZGVmaW5lIERSTV9NT0RFU0VUX0RFQlVHCSJkcm1fbW9kZSIKIC8qKgogICogZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZSAtIGRlYnVnIHByaW50IGEgbW9kZQogICogQGRldjogRFJNIGRldmljZQpAQCAtNTEsOCArNTIsOCBAQAogICovCiB2b2lkIGRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7Ci0JRFJNX0RFQlVHX01PREUoRFJNX01PREVTRVRfREVCVUcsCi0JCSJNb2RlbGluZSAlZDpcIiVzXCIgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgMHgleCAweCV4XG4iLAorCURSTV9ERUJVR19LTVMoIk1vZGVsaW5lICVkOlwiJXNcIiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAiCisJCQkiMHgleCAweCV4XG4iLAogCQltb2RlLT5iYXNlLmlkLCBtb2RlLT5uYW1lLCBtb2RlLT52cmVmcmVzaCwgbW9kZS0+Y2xvY2ssCiAJCW1vZGUtPmhkaXNwbGF5LCBtb2RlLT5oc3luY19zdGFydCwKIAkJbW9kZS0+aHN5bmNfZW5kLCBtb2RlLT5odG90YWwsCkBAIC02Miw2ICs2Myw0MjAgQEAKIEVYUE9SVF9TWU1CT0woZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZSk7CiAKIC8qKgorICogZHJtX2N2dF9tb2RlIC1jcmVhdGUgYSBtb2RlbGluZSBiYXNlZCBvbiBDVlQgYWxnb3JpdGhtCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAaGRpc3BsYXk6IGhkaXNwbGF5IHNpemUKKyAqIEB2ZGlzcGxheTogdmRpc3BsYXkgc2l6ZQorICogQHZyZWZyZXNoICA6IHZyZWZyZXNoIHJhdGUKKyAqIEByZWR1Y2VkIDogV2hldGhlciB0aGUgR1RGIGNhbGN1bGF0aW9uIGlzIHNpbXBsaWZpZWQKKyAqIEBpbnRlcmxhY2VkOldoZXRoZXIgdGhlIGludGVybGFjZSBpcyBzdXBwb3J0ZWQKKyAqCisgKiBMT0NLSU5HOgorICogbm9uZS4KKyAqCisgKiByZXR1cm4gdGhlIG1vZGVsaW5lIGJhc2VkIG9uIENWVCBhbGdvcml0aG0KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBnZW5lcmF0ZSB0aGUgbW9kZWxpbmUgYmFzZWQgb24gQ1ZUIGFsZ29yaXRobQorICogYWNjb3JkaW5nIHRvIHRoZSBoZGlzcGxheSwgdmRpc3BsYXksIHZyZWZyZXNoLgorICogSXQgaXMgYmFzZWQgZnJvbSB0aGUgVkVTQShUTSkgQ29vcmRpbmF0ZWQgVmlkZW8gVGltaW5nIEdlbmVyYXRvciBieQorICogR3JhaGFtIExvdmVyaWRnZSBBcHJpbCA5LCAyMDAzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy52ZXNhLm9yZy9wdWJsaWMvQ1ZUL0NWVGQ2cjEueGxzCisgKgorICogQW5kIGl0IGlzIGNvcGllZCBmcm9tIHhmODZDVlRtb2RlIGluIHhzZXJ2ZXIvaHcveGZyZWU4Ni9tb2Rlcy94Zjg2Y3Z0LmMuCisgKiBXaGF0IEkgaGF2ZSBkb25lIGlzIHRvIHRyYW5zbGF0ZSBpdCBieSB1c2luZyBpbnRlZ2VyIGNhbGN1bGF0aW9uLgorICovCisjZGVmaW5lIEhWX0ZBQ1RPUgkJCTEwMDAKK3N0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fY3Z0X21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGhkaXNwbGF5LAorCQkJCSAgICAgIGludCB2ZGlzcGxheSwgaW50IHZyZWZyZXNoLAorCQkJCSAgICAgIGJvb2wgcmVkdWNlZCwgYm9vbCBpbnRlcmxhY2VkKQoreworCS8qIDEpIHRvcC9ib3R0b20gbWFyZ2luIHNpemUgKCUgb2YgaGVpZ2h0KSAtIGRlZmF1bHQ6IDEuOCwgKi8KKyNkZWZpbmUJQ1ZUX01BUkdJTl9QRVJDRU5UQUdFCQkxOAorCS8qIDIpIGNoYXJhY3RlciBjZWxsIGhvcml6b250YWwgZ3JhbnVsYXJpdHkgKHBpeGVscykgLSBkZWZhdWx0IDggKi8KKyNkZWZpbmUJQ1ZUX0hfR1JBTlVMQVJJVFkJCTgKKwkvKiAzKSBNaW5pbXVtIHZlcnRpY2FsIHBvcmNoIChsaW5lcykgLSBkZWZhdWx0IDMgKi8KKyNkZWZpbmUJQ1ZUX01JTl9WX1BPUkNICQkJMworCS8qIDQpIE1pbmltdW0gbnVtYmVyIG9mIHZlcnRpY2FsIGJhY2sgcG9yY2ggbGluZXMgLSBkZWZhdWx0IDYgKi8KKyNkZWZpbmUJQ1ZUX01JTl9WX0JQT1JDSAkJNgorCS8qIFBpeGVsIENsb2NrIHN0ZXAgKGtIeikgKi8KKyNkZWZpbmUgQ1ZUX0NMT0NLX1NURVAJCQkyNTAKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGU7CisJYm9vbCBtYXJnaW5zID0gZmFsc2U7CisJdW5zaWduZWQgaW50IHZmaWVsZHJhdGUsIGhwZXJpb2Q7CisJaW50IGhkaXNwbGF5X3JuZCwgaG1hcmdpbiwgdmRpc3BsYXlfcm5kLCB2bWFyZ2luLCB2c3luYzsKKwlpbnQgaW50ZXJsYWNlOworCisJLyogYWxsb2NhdGUgdGhlIGRybV9kaXNwbGF5X21vZGUgc3RydWN0dXJlLiBJZiBmYWlsdXJlLCB3ZSB3aWxsCisJICogcmV0dXJuIGRpcmVjdGx5CisJICovCisJZHJtX21vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKKwlpZiAoIWRybV9tb2RlKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHRoZSBDVlQgZGVmYXVsdCByZWZyZXNoIHJhdGUgaXMgNjBIeiAqLworCWlmICghdnJlZnJlc2gpCisJCXZyZWZyZXNoID0gNjA7CisKKwkvKiB0aGUgcmVxdWlyZWQgZmllbGQgZnJlc2ggcmF0ZSAqLworCWlmIChpbnRlcmxhY2VkKQorCQl2ZmllbGRyYXRlID0gdnJlZnJlc2ggKiAyOworCWVsc2UKKwkJdmZpZWxkcmF0ZSA9IHZyZWZyZXNoOworCisJLyogaG9yaXpvbnRhbCBwaXhlbHMgKi8KKwloZGlzcGxheV9ybmQgPSBoZGlzcGxheSAtIChoZGlzcGxheSAlIENWVF9IX0dSQU5VTEFSSVRZKTsKKworCS8qIGRldGVybWluZSB0aGUgbGVmdCZyaWdodCBib3JkZXJzICovCisJaG1hcmdpbiA9IDA7CisJaWYgKG1hcmdpbnMpIHsKKwkJaG1hcmdpbiA9IGhkaXNwbGF5X3JuZCAqIENWVF9NQVJHSU5fUEVSQ0VOVEFHRSAvIDEwMDA7CisJCWhtYXJnaW4gLT0gaG1hcmdpbiAlIENWVF9IX0dSQU5VTEFSSVRZOworCX0KKwkvKiBmaW5kIHRoZSB0b3RhbCBhY3RpdmUgcGl4ZWxzICovCisJZHJtX21vZGUtPmhkaXNwbGF5ID0gaGRpc3BsYXlfcm5kICsgMiAqIGhtYXJnaW47CisKKwkvKiBmaW5kIHRoZSBudW1iZXIgb2YgbGluZXMgcGVyIGZpZWxkICovCisJaWYgKGludGVybGFjZWQpCisJCXZkaXNwbGF5X3JuZCA9IHZkaXNwbGF5IC8gMjsKKwllbHNlCisJCXZkaXNwbGF5X3JuZCA9IHZkaXNwbGF5OworCisJLyogZmluZCB0aGUgdG9wICYgYm90dG9tIGJvcmRlcnMgKi8KKwl2bWFyZ2luID0gMDsKKwlpZiAobWFyZ2lucykKKwkJdm1hcmdpbiA9IHZkaXNwbGF5X3JuZCAqIENWVF9NQVJHSU5fUEVSQ0VOVEFHRSAvIDEwMDA7CisKKwlkcm1fbW9kZS0+dmRpc3BsYXkgPSB2ZGlzcGxheSArIDIgKiB2bWFyZ2luOworCisJLyogSW50ZXJsYWNlZCAqLworCWlmIChpbnRlcmxhY2VkKQorCQlpbnRlcmxhY2UgPSAxOworCWVsc2UKKwkJaW50ZXJsYWNlID0gMDsKKworCS8qIERldGVybWluZSBWU3luYyBXaWR0aCBmcm9tIGFzcGVjdCByYXRpbyAqLworCWlmICghKHZkaXNwbGF5ICUgMykgJiYgKCh2ZGlzcGxheSAqIDQgLyAzKSA9PSBoZGlzcGxheSkpCisJCXZzeW5jID0gNDsKKwllbHNlIGlmICghKHZkaXNwbGF5ICUgOSkgJiYgKCh2ZGlzcGxheSAqIDE2IC8gOSkgPT0gaGRpc3BsYXkpKQorCQl2c3luYyA9IDU7CisJZWxzZSBpZiAoISh2ZGlzcGxheSAlIDEwKSAmJiAoKHZkaXNwbGF5ICogMTYgLyAxMCkgPT0gaGRpc3BsYXkpKQorCQl2c3luYyA9IDY7CisJZWxzZSBpZiAoISh2ZGlzcGxheSAlIDQpICYmICgodmRpc3BsYXkgKiA1IC8gNCkgPT0gaGRpc3BsYXkpKQorCQl2c3luYyA9IDc7CisJZWxzZSBpZiAoISh2ZGlzcGxheSAlIDkpICYmICgodmRpc3BsYXkgKiAxNSAvIDkpID09IGhkaXNwbGF5KSkKKwkJdnN5bmMgPSA3OworCWVsc2UgLyogY3VzdG9tICovCisJCXZzeW5jID0gMTA7CisKKwlpZiAoIXJlZHVjZWQpIHsKKwkJLyogc2ltcGxpZnkgdGhlIEdURiBjYWxjdWxhdGlvbiAqLworCQkvKiA0KSBNaW5pbXVtIHRpbWUgb2YgdmVydGljYWwgc3luYyArIGJhY2sgcG9yY2ggaW50ZXJ2YWwgKMK1cykKKwkJICogZGVmYXVsdCA1NTAuMAorCQkgKi8KKwkJaW50IHRtcDEsIHRtcDI7CisjZGVmaW5lIENWVF9NSU5fVlNZTkNfQlAJNTUwCisJCS8qIDMpIE5vbWluYWwgSFN5bmMgd2lkdGggKCUgb2YgbGluZSBwZXJpb2QpIC0gZGVmYXVsdCA4ICovCisjZGVmaW5lIENWVF9IU1lOQ19QRVJDRU5UQUdFCTgKKwkJdW5zaWduZWQgaW50IGhibGFua19wZXJjZW50YWdlOworCQlpbnQgdnN5bmNhbmRiYWNrX3BvcmNoLCB2YmFja19wb3JjaCwgaGJsYW5rOworCisJCS8qIGVzdGltYXRlZCB0aGUgaG9yaXpvbnRhbCBwZXJpb2QgKi8KKwkJdG1wMSA9IEhWX0ZBQ1RPUiAqIDEwMDAwMDAgIC0KKwkJCQlDVlRfTUlOX1ZTWU5DX0JQICogSFZfRkFDVE9SICogdmZpZWxkcmF0ZTsKKwkJdG1wMiA9ICh2ZGlzcGxheV9ybmQgKyAyICogdm1hcmdpbiArIENWVF9NSU5fVl9QT1JDSCkgKiAyICsKKwkJCQlpbnRlcmxhY2U7CisJCWhwZXJpb2QgPSB0bXAxICogMiAvICh0bXAyICogdmZpZWxkcmF0ZSk7CisKKwkJdG1wMSA9IENWVF9NSU5fVlNZTkNfQlAgKiBIVl9GQUNUT1IgLyBocGVyaW9kICsgMTsKKwkJLyogOS4gRmluZCBudW1iZXIgb2YgbGluZXMgaW4gc3luYyArIGJhY2twb3JjaCAqLworCQlpZiAodG1wMSA8ICh2c3luYyArIENWVF9NSU5fVl9QT1JDSCkpCisJCQl2c3luY2FuZGJhY2tfcG9yY2ggPSB2c3luYyArIENWVF9NSU5fVl9QT1JDSDsKKwkJZWxzZQorCQkJdnN5bmNhbmRiYWNrX3BvcmNoID0gdG1wMTsKKwkJLyogMTAuIEZpbmQgbnVtYmVyIG9mIGxpbmVzIGluIGJhY2sgcG9yY2ggKi8KKwkJdmJhY2tfcG9yY2ggPSB2c3luY2FuZGJhY2tfcG9yY2ggLSB2c3luYzsKKwkJZHJtX21vZGUtPnZ0b3RhbCA9IHZkaXNwbGF5X3JuZCArIDIgKiB2bWFyZ2luICsKKwkJCQl2c3luY2FuZGJhY2tfcG9yY2ggKyBDVlRfTUlOX1ZfUE9SQ0g7CisJCS8qIDUpIERlZmluaXRpb24gb2YgSG9yaXpvbnRhbCBibGFua2luZyB0aW1lIGxpbWl0YXRpb24gKi8KKwkJLyogR3JhZGllbnQgKCUva0h6KSAtIGRlZmF1bHQgNjAwICovCisjZGVmaW5lIENWVF9NX0ZBQ1RPUgk2MDAKKwkJLyogT2Zmc2V0ICglKSAtIGRlZmF1bHQgNDAgKi8KKyNkZWZpbmUgQ1ZUX0NfRkFDVE9SCTQwCisJCS8qIEJsYW5raW5nIHRpbWUgc2NhbGluZyBmYWN0b3IgLSBkZWZhdWx0IDEyOCAqLworI2RlZmluZSBDVlRfS19GQUNUT1IJMTI4CisJCS8qIFNjYWxpbmcgZmFjdG9yIHdlaWdodGluZyAtIGRlZmF1bHQgMjAgKi8KKyNkZWZpbmUgQ1ZUX0pfRkFDVE9SCTIwCisjZGVmaW5lIENWVF9NX1BSSU1FCShDVlRfTV9GQUNUT1IgKiBDVlRfS19GQUNUT1IgLyAyNTYpCisjZGVmaW5lIENWVF9DX1BSSU1FCSgoQ1ZUX0NfRkFDVE9SIC0gQ1ZUX0pfRkFDVE9SKSAqIENWVF9LX0ZBQ1RPUiAvIDI1NiArIFwKKwkJCSBDVlRfSl9GQUNUT1IpCisJCS8qIDEyLiBGaW5kIGlkZWFsIGJsYW5raW5nIGR1dHkgY3ljbGUgZnJvbSBmb3JtdWxhICovCisJCWhibGFua19wZXJjZW50YWdlID0gQ1ZUX0NfUFJJTUUgKiBIVl9GQUNUT1IgLSBDVlRfTV9QUklNRSAqCisJCQkJCWhwZXJpb2QgLyAxMDAwOworCQkvKiAxMy4gQmxhbmtpbmcgdGltZSAqLworCQlpZiAoaGJsYW5rX3BlcmNlbnRhZ2UgPCAyMCAqIEhWX0ZBQ1RPUikKKwkJCWhibGFua19wZXJjZW50YWdlID0gMjAgKiBIVl9GQUNUT1I7CisJCWhibGFuayA9IGRybV9tb2RlLT5oZGlzcGxheSAqIGhibGFua19wZXJjZW50YWdlIC8KKwkJCSAoMTAwICogSFZfRkFDVE9SIC0gaGJsYW5rX3BlcmNlbnRhZ2UpOworCQloYmxhbmsgLT0gaGJsYW5rICUgKDIgKiBDVlRfSF9HUkFOVUxBUklUWSk7CisJCS8qIDE0LiBmaW5kIHRoZSB0b3RhbCBwaXhlcyBwZXIgbGluZSAqLworCQlkcm1fbW9kZS0+aHRvdGFsID0gZHJtX21vZGUtPmhkaXNwbGF5ICsgaGJsYW5rOworCQlkcm1fbW9kZS0+aHN5bmNfZW5kID0gZHJtX21vZGUtPmhkaXNwbGF5ICsgaGJsYW5rIC8gMjsKKwkJZHJtX21vZGUtPmhzeW5jX3N0YXJ0ID0gZHJtX21vZGUtPmhzeW5jX2VuZCAtCisJCQkoZHJtX21vZGUtPmh0b3RhbCAqIENWVF9IU1lOQ19QRVJDRU5UQUdFKSAvIDEwMDsKKwkJZHJtX21vZGUtPmhzeW5jX3N0YXJ0ICs9IENWVF9IX0dSQU5VTEFSSVRZIC0KKwkJCWRybV9tb2RlLT5oc3luY19zdGFydCAlIENWVF9IX0dSQU5VTEFSSVRZOworCQkvKiBmaWxsIHRoZSBWc3luYyB2YWx1ZXMgKi8KKwkJZHJtX21vZGUtPnZzeW5jX3N0YXJ0ID0gZHJtX21vZGUtPnZkaXNwbGF5ICsgQ1ZUX01JTl9WX1BPUkNIOworCQlkcm1fbW9kZS0+dnN5bmNfZW5kID0gZHJtX21vZGUtPnZzeW5jX3N0YXJ0ICsgdnN5bmM7CisJfSBlbHNlIHsKKwkJLyogUmVkdWNlZCBibGFua2luZyAqLworCQkvKiBNaW5pbXVtIHZlcnRpY2FsIGJsYW5raW5nIGludGVydmFsIHRpbWUgKMK1cyktIGRlZmF1bHQgNDYwICovCisjZGVmaW5lIENWVF9SQl9NSU5fVkJMQU5LCTQ2MAorCQkvKiBGaXhlZCBudW1iZXIgb2YgY2xvY2tzIGZvciBob3Jpem9udGFsIHN5bmMgKi8KKyNkZWZpbmUgQ1ZUX1JCX0hfU1lOQwkJMzIKKwkJLyogRml4ZWQgbnVtYmVyIG9mIGNsb2NrcyBmb3IgaG9yaXpvbnRhbCBibGFua2luZyAqLworI2RlZmluZSBDVlRfUkJfSF9CTEFOSwkJMTYwCisJCS8qIEZpeGVkIG51bWJlciBvZiBsaW5lcyBmb3IgdmVydGljYWwgZnJvbnQgcG9yY2ggLSBkZWZhdWx0IDMqLworI2RlZmluZSBDVlRfUkJfVkZQT1JDSAkJMworCQlpbnQgdmJpbGluZXM7CisJCWludCB0bXAxLCB0bXAyOworCQkvKiA4LiBFc3RpbWF0ZSBIb3Jpem9udGFsIHBlcmlvZC4gKi8KKwkJdG1wMSA9IEhWX0ZBQ1RPUiAqIDEwMDAwMDAgLQorCQkJQ1ZUX1JCX01JTl9WQkxBTksgKiBIVl9GQUNUT1IgKiB2ZmllbGRyYXRlOworCQl0bXAyID0gdmRpc3BsYXlfcm5kICsgMiAqIHZtYXJnaW47CisJCWhwZXJpb2QgPSB0bXAxIC8gKHRtcDIgKiB2ZmllbGRyYXRlKTsKKwkJLyogOS4gRmluZCBudW1iZXIgb2YgbGluZXMgaW4gdmVydGljYWwgYmxhbmtpbmcgKi8KKwkJdmJpbGluZXMgPSBDVlRfUkJfTUlOX1ZCTEFOSyAqIEhWX0ZBQ1RPUiAvIGhwZXJpb2QgKyAxOworCQkvKiAxMC4gQ2hlY2sgaWYgdmVydGljYWwgYmxhbmtpbmcgaXMgc3VmZmljaWVudCAqLworCQlpZiAodmJpbGluZXMgPCAoQ1ZUX1JCX1ZGUE9SQ0ggKyB2c3luYyArIENWVF9NSU5fVl9CUE9SQ0gpKQorCQkJdmJpbGluZXMgPSBDVlRfUkJfVkZQT1JDSCArIHZzeW5jICsgQ1ZUX01JTl9WX0JQT1JDSDsKKwkJLyogMTEuIEZpbmQgdG90YWwgbnVtYmVyIG9mIGxpbmVzIGluIHZlcnRpY2FsIGZpZWxkICovCisJCWRybV9tb2RlLT52dG90YWwgPSB2ZGlzcGxheV9ybmQgKyAyICogdm1hcmdpbiArIHZiaWxpbmVzOworCQkvKiAxMi4gRmluZCB0b3RhbCBudW1iZXIgb2YgcGl4ZWxzIGluIGEgbGluZSAqLworCQlkcm1fbW9kZS0+aHRvdGFsID0gZHJtX21vZGUtPmhkaXNwbGF5ICsgQ1ZUX1JCX0hfQkxBTks7CisJCS8qIEZpbGwgaW4gSFN5bmMgdmFsdWVzICovCisJCWRybV9tb2RlLT5oc3luY19lbmQgPSBkcm1fbW9kZS0+aGRpc3BsYXkgKyBDVlRfUkJfSF9CTEFOSyAvIDI7CisJCWRybV9tb2RlLT5oc3luY19zdGFydCA9IGRybV9tb2RlLT5oc3luY19lbmQgPSBDVlRfUkJfSF9TWU5DOworCX0KKwkvKiAxNS8xMy4gRmluZCBwaXhlbCBjbG9jayBmcmVxdWVuY3kgKGtIeiBmb3IgeGY4NikgKi8KKwlkcm1fbW9kZS0+Y2xvY2sgPSBkcm1fbW9kZS0+aHRvdGFsICogSFZfRkFDVE9SICogMTAwMCAvIGhwZXJpb2Q7CisJZHJtX21vZGUtPmNsb2NrIC09IGRybV9tb2RlLT5jbG9jayAlIENWVF9DTE9DS19TVEVQOworCS8qIDE4LzE2LiBGaW5kIGFjdHVhbCB2ZXJ0aWNhbCBmcmFtZSBmcmVxdWVuY3kgKi8KKwkvKiBpZ25vcmUgLSBqdXN0IHNldCB0aGUgbW9kZSBmbGFnIGZvciBpbnRlcmxhY2VkICovCisJaWYgKGludGVybGFjZWQpCisJCWRybV9tb2RlLT52dG90YWwgKj0gMjsKKwkvKiBGaWxsIHRoZSBtb2RlIGxpbmUgbmFtZSAqLworCWRybV9tb2RlX3NldF9uYW1lKGRybV9tb2RlKTsKKwlpZiAocmVkdWNlZCkKKwkJZHJtX21vZGUtPmZsYWdzIHw9IChEUk1fTU9ERV9GTEFHX1BIU1lOQyB8CisJCQkJCURSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKKwllbHNlCisJCWRybV9tb2RlLT5mbGFncyB8PSAoRFJNX01PREVfRkxBR19QVlNZTkMgfAorCQkJCQlEUk1fTU9ERV9GTEFHX05IU1lOQyk7CisJaWYgKGludGVybGFjZWQpCisJCWRybV9tb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKKworICAgIHJldHVybiBkcm1fbW9kZTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2N2dF9tb2RlKTsKKworLyoqCisgKiBkcm1fZ3RmX21vZGUgLSBjcmVhdGUgdGhlIG1vZGVsaW5lIGJhc2VkIG9uIEdURiBhbGdvcml0aG0KKyAqCisgKiBAZGV2CQk6ZHJtIGRldmljZQorICogQGhkaXNwbGF5CTpoZGlzcGxheSBzaXplCisgKiBAdmRpc3BsYXkJOnZkaXNwbGF5IHNpemUKKyAqIEB2cmVmcmVzaAk6dnJlZnJlc2ggcmF0ZS4KKyAqIEBpbnRlcmxhY2VkCTp3aGV0aGVyIHRoZSBpbnRlcmxhY2UgaXMgc3VwcG9ydGVkCisgKiBAbWFyZ2lucwk6d2hldGhlciB0aGUgbWFyZ2luIGlzIHN1cHBvcnRlZAorICoKKyAqIExPQ0tJTkcuCisgKiBub25lLgorICoKKyAqIHJldHVybiB0aGUgbW9kZWxpbmUgYmFzZWQgb24gR1RGIGFsZ29yaXRobQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdG8gY3JlYXRlIHRoZSBtb2RlbGluZSBiYXNlZCBvbiB0aGUgR1RGIGFsZ29yaXRobS4KKyAqIEdlbmVyYWxpemVkIFRpbWluZyBGb3JtdWxhIGlzIGRlcml2ZWQgZnJvbToKKyAqCUdURiBTcHJlYWRzaGVldCBieSBBbmR5IE1vcnJpc2ggKDEvNS85NykKKyAqCWF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnZlc2Eub3JnCisgKgorICogQW5kIGl0IGlzIGNvcGllZCBmcm9tIHRoZSBmaWxlIG9mIHhzZXJ2ZXIvaHcveGZyZWU4Ni9tb2Rlcy94Zjg2Z3RmLmMuCisgKiBXaGF0IEkgaGF2ZSBkb25lIGlzIHRvIHRyYW5zbGF0ZSBpdCBieSB1c2luZyBpbnRlZ2VyIGNhbGN1bGF0aW9uLgorICogSSBhbHNvIHJlZmVyIHRvIHRoZSBmdW5jdGlvbiBvZiBmYl9nZXRfbW9kZSBpbiB0aGUgZmlsZSBvZgorICogZHJpdmVycy92aWRlby9mYm1vbi5jCisgKi8KK3N0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fZ3RmX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGhkaXNwbGF5LAorCQkJCSAgICAgIGludCB2ZGlzcGxheSwgaW50IHZyZWZyZXNoLAorCQkJCSAgICAgIGJvb2wgaW50ZXJsYWNlZCwgaW50IG1hcmdpbnMpCit7CisJLyogMSkgdG9wL2JvdHRvbSBtYXJnaW4gc2l6ZSAoJSBvZiBoZWlnaHQpIC0gZGVmYXVsdDogMS44LCAqLworI2RlZmluZQlHVEZfTUFSR0lOX1BFUkNFTlRBR0UJCTE4CisJLyogMikgY2hhcmFjdGVyIGNlbGwgaG9yaXpvbnRhbCBncmFudWxhcml0eSAocGl4ZWxzKSAtIGRlZmF1bHQgOCAqLworI2RlZmluZQlHVEZfQ0VMTF9HUkFOCQkJOAorCS8qIDMpIE1pbmltdW0gdmVydGljYWwgcG9yY2ggKGxpbmVzKSAtIGRlZmF1bHQgMyAqLworI2RlZmluZQlHVEZfTUlOX1ZfUE9SQ0gJCQkxCisJLyogd2lkdGggb2YgdnN5bmMgaW4gbGluZXMgKi8KKyNkZWZpbmUgVl9TWU5DX1JRRAkJCTMKKwkvKiB3aWR0aCBvZiBoc3luYyBhcyAlIG9mIHRvdGFsIGxpbmUgKi8KKyNkZWZpbmUgSF9TWU5DX1BFUkNFTlQJCQk4CisJLyogbWluIHRpbWUgb2YgdnN5bmMgKyBiYWNrIHBvcmNoIChtaWNyb3NlYykgKi8KKyNkZWZpbmUgTUlOX1ZTWU5DX1BMVVNfQlAJCTU1MAorCS8qIGJsYW5raW5nIGZvcm11bGEgZ3JhZGllbnQgKi8KKyNkZWZpbmUgR1RGX00JCQkJNjAwCisJLyogYmxhbmtpbmcgZm9ybXVsYSBvZmZzZXQgKi8KKyNkZWZpbmUgR1RGX0MJCQkJNDAKKwkvKiBibGFua2luZyBmb3JtdWxhIHNjYWxpbmcgZmFjdG9yICovCisjZGVmaW5lIEdURl9LCQkJCTEyOAorCS8qIGJsYW5raW5nIGZvcm11bGEgc2NhbGluZyBmYWN0b3IgKi8KKyNkZWZpbmUgR1RGX0oJCQkJMjAKKwkvKiBDJyBhbmQgTScgYXJlIHBhcnQgb2YgdGhlIEJsYW5raW5nIER1dHkgQ3ljbGUgY29tcHV0YXRpb24gKi8KKyNkZWZpbmUgR1RGX0NfUFJJTUUJCSgoKEdURl9DIC0gR1RGX0opICogR1RGX0sgLyAyNTYpICsgR1RGX0opCisjZGVmaW5lIEdURl9NX1BSSU1FCQkoR1RGX0sgKiBHVEZfTSAvIDI1NikKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGU7CisJdW5zaWduZWQgaW50IGhkaXNwbGF5X3JuZCwgdmRpc3BsYXlfcm5kLCB2ZmllbGRyYXRlX3JxZDsKKwlpbnQgdG9wX21hcmdpbiwgYm90dG9tX21hcmdpbjsKKwlpbnQgaW50ZXJsYWNlOworCXVuc2lnbmVkIGludCBoZnJlcV9lc3Q7CisJaW50IHZzeW5jX3BsdXNfYnAsIHZiYWNrX3BvcmNoOworCXVuc2lnbmVkIGludCB2dG90YWxfbGluZXMsIHZmaWVsZHJhdGVfZXN0LCBocGVyaW9kOworCXVuc2lnbmVkIGludCB2ZmllbGRfcmF0ZSwgdmZyYW1lX3JhdGU7CisJaW50IGxlZnRfbWFyZ2luLCByaWdodF9tYXJnaW47CisJdW5zaWduZWQgaW50IHRvdGFsX2FjdGl2ZV9waXhlbHMsIGlkZWFsX2R1dHlfY3ljbGU7CisJdW5zaWduZWQgaW50IGhibGFuaywgdG90YWxfcGl4ZWxzLCBwaXhlbF9mcmVxOworCWludCBoc3luYywgaGZyb250X3BvcmNoLCB2b2RkX2Zyb250X3BvcmNoX2xpbmVzOworCXVuc2lnbmVkIGludCB0bXAxLCB0bXAyOworCisJZHJtX21vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKKwlpZiAoIWRybV9tb2RlKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIDEuIEluIG9yZGVyIHRvIGdpdmUgY29ycmVjdCByZXN1bHRzLCB0aGUgbnVtYmVyIG9mIGhvcml6b250YWwKKwkgKiBwaXhlbHMgcmVxdWVzdGVkIGlzIGZpcnN0IHByb2Nlc3NlZCB0byBlbnN1cmUgdGhhdCBpdCBpcyBkaXZpc2libGUKKwkgKiBieSB0aGUgY2hhcmFjdGVyIHNpemUsIGJ5IHJvdW5kaW5nIGl0IHRvIHRoZSBuZWFyZXN0IGNoYXJhY3RlcgorCSAqIGNlbGwgYm91bmRhcnk6CisJICovCisJaGRpc3BsYXlfcm5kID0gKGhkaXNwbGF5ICsgR1RGX0NFTExfR1JBTiAvIDIpIC8gR1RGX0NFTExfR1JBTjsKKwloZGlzcGxheV9ybmQgPSBoZGlzcGxheV9ybmQgKiBHVEZfQ0VMTF9HUkFOOworCisJLyogMi4gSWYgaW50ZXJsYWNlIGlzIHJlcXVlc3RlZCwgdGhlIG51bWJlciBvZiB2ZXJ0aWNhbCBsaW5lcyBhc3N1bWVkCisJICogYnkgdGhlIGNhbGN1bGF0aW9uIG11c3QgYmUgaGFsdmVkLCBhcyB0aGUgY29tcHV0YXRpb24gY2FsY3VsYXRlcworCSAqIHRoZSBudW1iZXIgb2YgdmVydGljYWwgbGluZXMgcGVyIGZpZWxkLgorCSAqLworCWlmIChpbnRlcmxhY2VkKQorCQl2ZGlzcGxheV9ybmQgPSB2ZGlzcGxheSAvIDI7CisJZWxzZQorCQl2ZGlzcGxheV9ybmQgPSB2ZGlzcGxheTsKKworCS8qIDMuIEZpbmQgdGhlIGZyYW1lIHJhdGUgcmVxdWlyZWQ6ICovCisJaWYgKGludGVybGFjZWQpCisJCXZmaWVsZHJhdGVfcnFkID0gdnJlZnJlc2ggKiAyOworCWVsc2UKKwkJdmZpZWxkcmF0ZV9ycWQgPSB2cmVmcmVzaDsKKworCS8qIDQuIEZpbmQgbnVtYmVyIG9mIGxpbmVzIGluIFRvcCBtYXJnaW46ICovCisJdG9wX21hcmdpbiA9IDA7CisJaWYgKG1hcmdpbnMpCisJCXRvcF9tYXJnaW4gPSAodmRpc3BsYXlfcm5kICogR1RGX01BUkdJTl9QRVJDRU5UQUdFICsgNTAwKSAvCisJCQkJMTAwMDsKKwkvKiA1LiBGaW5kIG51bWJlciBvZiBsaW5lcyBpbiBib3R0b20gbWFyZ2luOiAqLworCWJvdHRvbV9tYXJnaW4gPSB0b3BfbWFyZ2luOworCisJLyogNi4gSWYgaW50ZXJsYWNlIGlzIHJlcXVpcmVkLCB0aGVuIHNldCB2YXJpYWJsZSBpbnRlcmxhY2U6ICovCisJaWYgKGludGVybGFjZWQpCisJCWludGVybGFjZSA9IDE7CisJZWxzZQorCQlpbnRlcmxhY2UgPSAwOworCisJLyogNy4gRXN0aW1hdGUgdGhlIEhvcml6b250YWwgZnJlcXVlbmN5ICovCisJeworCQl0bXAxID0gKDEwMDAwMDAgIC0gTUlOX1ZTWU5DX1BMVVNfQlAgKiB2ZmllbGRyYXRlX3JxZCkgLyA1MDA7CisJCXRtcDIgPSAodmRpc3BsYXlfcm5kICsgMiAqIHRvcF9tYXJnaW4gKyBHVEZfTUlOX1ZfUE9SQ0gpICoKKwkJCQkyICsgaW50ZXJsYWNlOworCQloZnJlcV9lc3QgPSAodG1wMiAqIDEwMDAgKiB2ZmllbGRyYXRlX3JxZCkgLyB0bXAxOworCX0KKworCS8qIDguIEZpbmQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiBWIHN5bmMgKyBiYWNrIHBvcmNoICovCisJLyogW1YgU1lOQytCUF0gPSBSSU5UKChbTUlOIFZTWU5DK0JQXSAqIGhmcmVxX2VzdCAvIDEwMDAwMDApKSAqLworCXZzeW5jX3BsdXNfYnAgPSBNSU5fVlNZTkNfUExVU19CUCAqIGhmcmVxX2VzdCAvIDEwMDA7CisJdnN5bmNfcGx1c19icCA9ICh2c3luY19wbHVzX2JwICsgNTAwKSAvIDEwMDA7CisJLyogIDkuIEZpbmQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiBWIGJhY2sgcG9yY2ggYWxvbmU6ICovCisJdmJhY2tfcG9yY2ggPSB2c3luY19wbHVzX2JwIC0gVl9TWU5DX1JRRDsKKwkvKiAgMTAuIEZpbmQgdGhlIHRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiBWZXJ0aWNhbCBmaWVsZCBwZXJpb2Q6ICovCisJdnRvdGFsX2xpbmVzID0gdmRpc3BsYXlfcm5kICsgdG9wX21hcmdpbiArIGJvdHRvbV9tYXJnaW4gKworCQkJdnN5bmNfcGx1c19icCArIEdURl9NSU5fVl9QT1JDSDsKKwkvKiAgMTEuIEVzdGltYXRlIHRoZSBWZXJ0aWNhbCBmaWVsZCBmcmVxdWVuY3k6ICovCisJdmZpZWxkcmF0ZV9lc3QgPSBoZnJlcV9lc3QgLyB2dG90YWxfbGluZXM7CisJLyogIDEyLiBGaW5kIHRoZSBhY3R1YWwgaG9yaXpvbnRhbCBwZXJpb2Q6ICovCisJaHBlcmlvZCA9IDEwMDAwMDAgLyAodmZpZWxkcmF0ZV9ycWQgKiB2dG90YWxfbGluZXMpOworCisJLyogIDEzLiBGaW5kIHRoZSBhY3R1YWwgVmVydGljYWwgZmllbGQgZnJlcXVlbmN5OiAqLworCXZmaWVsZF9yYXRlID0gaGZyZXFfZXN0IC8gdnRvdGFsX2xpbmVzOworCS8qICAxNC4gRmluZCB0aGUgVmVydGljYWwgZnJhbWUgZnJlcXVlbmN5OiAqLworCWlmIChpbnRlcmxhY2VkKQorCQl2ZnJhbWVfcmF0ZSA9IHZmaWVsZF9yYXRlIC8gMjsKKwllbHNlCisJCXZmcmFtZV9yYXRlID0gdmZpZWxkX3JhdGU7CisJLyogIDE1LiBGaW5kIG51bWJlciBvZiBwaXhlbHMgaW4gbGVmdCBtYXJnaW46ICovCisJaWYgKG1hcmdpbnMpCisJCWxlZnRfbWFyZ2luID0gKGhkaXNwbGF5X3JuZCAqIEdURl9NQVJHSU5fUEVSQ0VOVEFHRSArIDUwMCkgLworCQkJCTEwMDA7CisJZWxzZQorCQlsZWZ0X21hcmdpbiA9IDA7CisKKwkvKiAxNi5GaW5kIG51bWJlciBvZiBwaXhlbHMgaW4gcmlnaHQgbWFyZ2luOiAqLworCXJpZ2h0X21hcmdpbiA9IGxlZnRfbWFyZ2luOworCS8qIDE3LkZpbmQgdG90YWwgbnVtYmVyIG9mIGFjdGl2ZSBwaXhlbHMgaW4gaW1hZ2UgYW5kIGxlZnQgYW5kIHJpZ2h0ICovCisJdG90YWxfYWN0aXZlX3BpeGVscyA9IGhkaXNwbGF5X3JuZCArIGxlZnRfbWFyZ2luICsgcmlnaHRfbWFyZ2luOworCS8qIDE4LkZpbmQgdGhlIGlkZWFsIGJsYW5raW5nIGR1dHkgY3ljbGUgZnJvbSBibGFua2luZyBkdXR5IGN5Y2xlICovCisJaWRlYWxfZHV0eV9jeWNsZSA9IEdURl9DX1BSSU1FICogMTAwMCAtCisJCQkJKEdURl9NX1BSSU1FICogMTAwMDAwMCAvIGhmcmVxX2VzdCk7CisJLyogMTkuRmluZCB0aGUgbnVtYmVyIG9mIHBpeGVscyBpbiB0aGUgYmxhbmtpbmcgdGltZSB0byB0aGUgbmVhcmVzdAorCSAqIGRvdWJsZSBjaGFyYWN0ZXIgY2VsbDogKi8KKwloYmxhbmsgPSB0b3RhbF9hY3RpdmVfcGl4ZWxzICogaWRlYWxfZHV0eV9jeWNsZSAvCisJCQkoMTAwMDAwIC0gaWRlYWxfZHV0eV9jeWNsZSk7CisJaGJsYW5rID0gKGhibGFuayArIEdURl9DRUxMX0dSQU4pIC8gKDIgKiBHVEZfQ0VMTF9HUkFOKTsKKwloYmxhbmsgPSBoYmxhbmsgKiAyICogR1RGX0NFTExfR1JBTjsKKwkvKiAyMC5GaW5kIHRvdGFsIG51bWJlciBvZiBwaXhlbHM6ICovCisJdG90YWxfcGl4ZWxzID0gdG90YWxfYWN0aXZlX3BpeGVscyArIGhibGFuazsKKwkvKiAyMS5GaW5kIHBpeGVsIGNsb2NrIGZyZXF1ZW5jeTogKi8KKwlwaXhlbF9mcmVxID0gdG90YWxfcGl4ZWxzICogaGZyZXFfZXN0IC8gMTAwMDsKKwkvKiBTdGFnZSAxIGNvbXB1dGF0aW9ucyBhcmUgbm93IGNvbXBsZXRlOyBJIHNob3VsZCByZWFsbHkgcGFzcworCSAqIHRoZSByZXN1bHRzIHRvIGFub3RoZXIgZnVuY3Rpb24gYW5kIGRvIHRoZSBTdGFnZSAyIGNvbXB1dGF0aW9ucywKKwkgKiBidXQgSSBvbmx5IG5lZWQgYSBmZXcgbW9yZSB2YWx1ZXMgc28gSSdsbCBqdXN0IGFwcGVuZCB0aGUKKwkgKiBjb21wdXRhdGlvbnMgaGVyZSBmb3Igbm93ICovCisJLyogMTcuIEZpbmQgdGhlIG51bWJlciBvZiBwaXhlbHMgaW4gdGhlIGhvcml6b250YWwgc3luYyBwZXJpb2Q6ICovCisJaHN5bmMgPSBIX1NZTkNfUEVSQ0VOVCAqIHRvdGFsX3BpeGVscyAvIDEwMDsKKwloc3luYyA9IChoc3luYyArIEdURl9DRUxMX0dSQU4gLyAyKSAvIEdURl9DRUxMX0dSQU47CisJaHN5bmMgPSBoc3luYyAqIEdURl9DRUxMX0dSQU47CisJLyogMTguIEZpbmQgdGhlIG51bWJlciBvZiBwaXhlbHMgaW4gaG9yaXpvbnRhbCBmcm9udCBwb3JjaCBwZXJpb2QgKi8KKwloZnJvbnRfcG9yY2ggPSBoYmxhbmsgLyAyIC0gaHN5bmM7CisJLyogIDM2LiBGaW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIG9kZCBmcm9udCBwb3JjaCBwZXJpb2Q6ICovCisJdm9kZF9mcm9udF9wb3JjaF9saW5lcyA9IEdURl9NSU5fVl9QT1JDSCA7CisKKwkvKiBmaW5hbGx5LCBwYWNrIHRoZSByZXN1bHRzIGluIHRoZSBtb2RlIHN0cnVjdCAqLworCWRybV9tb2RlLT5oZGlzcGxheSA9IGhkaXNwbGF5X3JuZDsKKwlkcm1fbW9kZS0+aHN5bmNfc3RhcnQgPSBoZGlzcGxheV9ybmQgKyBoZnJvbnRfcG9yY2g7CisJZHJtX21vZGUtPmhzeW5jX2VuZCA9IGRybV9tb2RlLT5oc3luY19zdGFydCArIGhzeW5jOworCWRybV9tb2RlLT5odG90YWwgPSB0b3RhbF9waXhlbHM7CisJZHJtX21vZGUtPnZkaXNwbGF5ID0gdmRpc3BsYXlfcm5kOworCWRybV9tb2RlLT52c3luY19zdGFydCA9IHZkaXNwbGF5X3JuZCArIHZvZGRfZnJvbnRfcG9yY2hfbGluZXM7CisJZHJtX21vZGUtPnZzeW5jX2VuZCA9IGRybV9tb2RlLT52c3luY19zdGFydCArIFZfU1lOQ19SUUQ7CisJZHJtX21vZGUtPnZ0b3RhbCA9IHZ0b3RhbF9saW5lczsKKworCWRybV9tb2RlLT5jbG9jayA9IHBpeGVsX2ZyZXE7CisKKwlkcm1fbW9kZV9zZXRfbmFtZShkcm1fbW9kZSk7CisJZHJtX21vZGUtPmZsYWdzID0gRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQzsKKworCWlmIChpbnRlcmxhY2VkKSB7CisJCWRybV9tb2RlLT52dG90YWwgKj0gMjsKKwkJZHJtX21vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCX0KKworCXJldHVybiBkcm1fbW9kZTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2d0Zl9tb2RlKTsKKy8qKgogICogZHJtX21vZGVfc2V0X25hbWUgLSBzZXQgdGhlIG5hbWUgb24gYSBtb2RlCiAgKiBAbW9kZTogbmFtZSB3aWxsIGJlIHNldCBpbiB0aGlzIG1vZGUKICAqCkBAIC0xNTEsNyArNTY2LDkgQEAKICAqIEZJWE1FOiB3aHkgaXMgdGhpcyBuZWVkZWQ/ICBzaG91bGRuJ3QgdnJlZnJlc2ggYmUgc2V0IGFscmVhZHk/CiAgKgogICogUkVUVVJOUzoKLSAqIFZlcnRpY2FsIHJlZnJlc2ggcmF0ZSBvZiBAbW9kZSB4IDEwMDAuIEZvciBwcmVjaXNpb24gcmVhc29ucy4KKyAqIFZlcnRpY2FsIHJlZnJlc2ggcmF0ZS4gSXQgd2lsbCBiZSB0aGUgcmVzdWx0IG9mIGFjdHVhbCB2YWx1ZSBwbHVzIDAuNS4KKyAqIElmIGl0IGlzIDcwLjI4OCwgaXQgd2lsbCByZXR1cm4gNzBIei4KKyAqIElmIGl0IGlzIDU5LjYsIGl0IHdpbGwgcmV0dXJuIDYwSHouCiAgKi8KIGludCBkcm1fbW9kZV92cmVmcmVzaChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKQEAgLTE2MSwxNCArNTc4LDEzIEBACiAJaWYgKG1vZGUtPnZyZWZyZXNoID4gMCkKIAkJcmVmcmVzaCA9IG1vZGUtPnZyZWZyZXNoOwogCWVsc2UgaWYgKG1vZGUtPmh0b3RhbCA+IDAgJiYgbW9kZS0+dnRvdGFsID4gMCkgeworCQlpbnQgdnRvdGFsOworCQl2dG90YWwgPSBtb2RlLT52dG90YWw7CiAJCS8qIHdvcmsgb3V0IHZyZWZyZXNoIHRoZSB2YWx1ZSB3aWxsIGJlIHgxMDAwICovCiAJCWNhbGNfdmFsID0gKG1vZGUtPmNsb2NrICogMTAwMCk7Ci0KIAkJY2FsY192YWwgLz0gbW9kZS0+aHRvdGFsOwotCQljYWxjX3ZhbCAqPSAxMDAwOwotCQljYWxjX3ZhbCAvPSBtb2RlLT52dG90YWw7CisJCXJlZnJlc2ggPSAoY2FsY192YWwgKyB2dG90YWwgLyAyKSAvIHZ0b3RhbDsKIAotCQlyZWZyZXNoID0gY2FsY192YWw7CiAJCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQogCQkJcmVmcmVzaCAqPSAyOwogCQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCkBAIC00MDMsOCArODE5LDcgQEAKIAkJCWxpc3RfZGVsKCZtb2RlLT5oZWFkKTsKIAkJCWlmICh2ZXJib3NlKSB7CiAJCQkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShtb2RlKTsKLQkJCQlEUk1fREVCVUdfTU9ERShEUk1fTU9ERVNFVF9ERUJVRywKLQkJCQkJIk5vdCB1c2luZyAlcyBtb2RlICVkXG4iLAorCQkJCURSTV9ERUJVR19LTVMoIk5vdCB1c2luZyAlcyBtb2RlICVkXG4iLAogCQkJCQltb2RlLT5uYW1lLCBtb2RlLT5zdGF0dXMpOwogCQkJfQogCQkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwppbmRleCBiYmQ0YjNkLi5kMzc5YzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwpAQCAtMTA2LDIwICsxMDYsMjUgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXRtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KGZpbGVzW2ldLm5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLCByb290KTsKKwkJaWYgKHRtcCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQl0bXAtPm1pbm9yID0gbWlub3I7CisJCXRtcC0+aW5mb19lbnQgPSAmZmlsZXNbaV07CisJCWxpc3RfYWRkKCZ0bXAtPmxpc3QsICZtaW5vci0+cHJvY19ub2Rlcy5saXN0KTsKKworCQllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKGZpbGVzW2ldLm5hbWUsIFNfSVJVR08sIHJvb3QsCisJCQkJICAgICAgICZkcm1fcHJvY19mb3BzLCB0bXApOwogCQlpZiAoIWVudCkgewogCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8lcy8lc1xuIiwKIAkJCQkgIG5hbWUsIGZpbGVzW2ldLm5hbWUpOworCQkJbGlzdF9kZWwoJnRtcC0+bGlzdCk7CiAJCQlrZnJlZSh0bXApOwogCQkJcmV0ID0gLTE7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAotCQllbnQtPnByb2NfZm9wcyA9ICZkcm1fcHJvY19mb3BzOwotCQllbnQtPmRhdGEgPSB0bXA7Ci0JCXRtcC0+bWlub3IgPSBtaW5vcjsKLQkJdG1wLT5pbmZvX2VudCA9ICZmaWxlc1tpXTsKLQkJbGlzdF9hZGQoJih0bXAtPmxpc3QpLCAmKG1pbm9yLT5wcm9jX25vZGVzLmxpc3QpKTsKIAl9CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCBmN2E2MTViLi43ZTQyYjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKKyNpbmNsdWRlICJkcm1fc3lzZnMuaCIKICNpbmNsdWRlICJkcm1fY29yZS5oIgogI2luY2x1ZGUgImRybVAuaCIKIApAQCAtNzYsNyArNzcsNyBAQAogCQkgICAgICAgQ09SRV9NSU5PUiwgQ09SRV9QQVRDSExFVkVMLCBDT1JFX0RBVEUpOwogfQogCi1zdGF0aWMgY2hhciAqZHJtX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICpkcm1fZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJkcmkvJXMiLCBkZXZfbmFtZShkZXYpKTsKIH0KQEAgLTExMiw3ICsxMTMsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9jbGFzczsKIAotCWNsYXNzLT5ub2RlbmFtZSA9IGRybV9ub2RlbmFtZTsKKwljbGFzcy0+ZGV2bm9kZSA9IGRybV9kZXZub2RlOwogCiAJcmV0dXJuIGNsYXNzOwogCkBAIC0yNTMsNiArMjU0LDcgQEAKIAkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlOgogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU86CiAJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudDoKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVFY6CiAJCQlwcm9wID0gZGV2LT5tb2RlX2NvbmZpZy50dl9zdWJjb25uZWN0b3JfcHJvcGVydHk7CiAJCQlpc190diA9IDE7CiAJCQlicmVhazsKQEAgLTI5Myw2ICsyOTUsNyBAQAogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CiAJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzoKIAkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50OgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9UVjoKIAkJCXByb3AgPSBkZXYtPm1vZGVfY29uZmlnLnR2X3NlbGVjdF9zdWJjb25uZWN0b3JfcHJvcGVydHk7CiAJCQlpc190diA9IDE7CiAJCQlicmVhazsKQEAgLTM5MSw2ICszOTQsNyBAQAogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CiAJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzoKIAkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50OgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9UVjoKIAkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbm5lY3Rvcl9hdHRyc19vcHQxKTsgaSsrKSB7CiAJCQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjb25uZWN0b3ItPmtkZXYsICZjb25uZWN0b3JfYXR0cnNfb3B0MVtpXSk7CiAJCQkJaWYgKHJldCkKQEAgLTUxOSwzICs1MjMsMjcgQEAKIHsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWlub3ItPmtkZXYpOwogfQorCisKKy8qKgorICogZHJtX2NsYXNzX2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIGEgc3RydWN0IGRldmljZSBpbiB0aGUgZHJtIGNsYXNzLgorICoKKyAqIEBkZXY6IHBvaW50ZXIgdG8gc3RydWN0IGRldmljZSB0byByZWdpc3Rlci4KKyAqCisgKiBAZGV2IHNob3VsZCBoYXZlIGFsbCByZWxldmFudCBtZW1iZXJzIHByZS1maWxsZWQgd2l0aCB0aGUgZXhjZXB0aW9uCisgKiBvZiB0aGUgY2xhc3MgbWVtYmVyLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZGV2aWNlX3R5cGUgbWVtYmVyIG11c3QKKyAqIGJlIHNldC4KKyAqLworCitpbnQgZHJtX2NsYXNzX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGV2LT5jbGFzcyA9IGRybV9jbGFzczsKKwlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKTsKKwordm9pZCBkcm1fY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXZpY2VfdW5yZWdpc3RlcihkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2NsYXNzX2RldmljZV91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggMzBkNmI5OS4uNTI2OWRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTQsMTAgKzQsMTAgQEAKIAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KIGk5MTUteSA6PSBpOTE1X2Rydi5vIGk5MTVfZG1hLm8gaTkxNV9pcnEubyBpOTE1X21lbS5vIFwKKwkgIGk5MTVfZGVidWdmcy5vIFwKICAgICAgICAgICBpOTE1X3N1c3BlbmQubyBcCiAJICBpOTE1X2dlbS5vIFwKIAkgIGk5MTVfZ2VtX2RlYnVnLm8gXAotCSAgaTkxNV9nZW1fZGVidWdmcy5vIFwKIAkgIGk5MTVfZ2VtX3RpbGluZy5vIFwKIAkgIGludGVsX2Rpc3BsYXkubyBcCiAJICBpbnRlbF9jcnQubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMKcmVuYW1lIHRvIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IGNiM2I5NzQuLjFlM2JkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtMTU4LDE2ICsxNTgsMzcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCXNlcV9wcmludGYobSwgIkludGVycnVwdCBlbmFibGU6ICAgICUwOHhcbiIsCi0JCSAgIEk5MTVfUkVBRChJRVIpKTsKLQlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgaWRlbnRpdHk6ICAlMDh4XG4iLAotCQkgICBJOTE1X1JFQUQoSUlSKSk7Ci0Jc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0IG1hc2s6ICAgICAgJTA4eFxuIiwKLQkJICAgSTkxNV9SRUFEKElNUikpOwotCXNlcV9wcmludGYobSwgIlBpcGUgQSBzdGF0OiAgICAgICAgICUwOHhcbiIsCi0JCSAgIEk5MTVfUkVBRChQSVBFQVNUQVQpKTsKLQlzZXFfcHJpbnRmKG0sICJQaXBlIEIgc3RhdDogICAgICAgICAlMDh4XG4iLAotCQkgICBJOTE1X1JFQUQoUElQRUJTVEFUKSk7CisJaWYgKCFJU19JR0RORyhkZXYpKSB7CisJCXNlcV9wcmludGYobSwgIkludGVycnVwdCBlbmFibGU6ICAgICUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoSUVSKSk7CisJCXNlcV9wcmludGYobSwgIkludGVycnVwdCBpZGVudGl0eTogICUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoSUlSKSk7CisJCXNlcV9wcmludGYobSwgIkludGVycnVwdCBtYXNrOiAgICAgICUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoSU1SKSk7CisJCXNlcV9wcmludGYobSwgIlBpcGUgQSBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoUElQRUFTVEFUKSk7CisJCXNlcV9wcmludGYobSwgIlBpcGUgQiBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoUElQRUJTVEFUKSk7CisJfSBlbHNlIHsKKwkJc2VxX3ByaW50ZihtLCAiTm9ydGggRGlzcGxheSBJbnRlcnJ1cHQgZW5hYmxlOgkJJTA4eFxuIiwKKwkJCSAgIEk5MTVfUkVBRChERUlFUikpOworCQlzZXFfcHJpbnRmKG0sICJOb3J0aCBEaXNwbGF5IEludGVycnVwdCBpZGVudGl0eToJJTA4eFxuIiwKKwkJCSAgIEk5MTVfUkVBRChERUlJUikpOworCQlzZXFfcHJpbnRmKG0sICJOb3J0aCBEaXNwbGF5IEludGVycnVwdCBtYXNrOgkJJTA4eFxuIiwKKwkJCSAgIEk5MTVfUkVBRChERUlNUikpOworCQlzZXFfcHJpbnRmKG0sICJTb3V0aCBEaXNwbGF5IEludGVycnVwdCBlbmFibGU6CQklMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKFNERUlFUikpOworCQlzZXFfcHJpbnRmKG0sICJTb3V0aCBEaXNwbGF5IEludGVycnVwdCBpZGVudGl0eToJJTA4eFxuIiwKKwkJCSAgIEk5MTVfUkVBRChTREVJSVIpKTsKKwkJc2VxX3ByaW50ZihtLCAiU291dGggRGlzcGxheSBJbnRlcnJ1cHQgbWFzazoJCSUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoU0RFSU1SKSk7CisJCXNlcV9wcmludGYobSwgIkdyYXBoaWNzIEludGVycnVwdCBlbmFibGU6CQklMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKEdUSUVSKSk7CisJCXNlcV9wcmludGYobSwgIkdyYXBoaWNzIEludGVycnVwdCBpZGVudGl0eToJCSUwOHhcbiIsCisJCQkgICBJOTE1X1JFQUQoR1RJSVIpKTsKKwkJc2VxX3ByaW50ZihtLCAiR3JhcGhpY3MgSW50ZXJydXB0IG1hc2s6CQklMDh4XG4iLAorCQkJICAgSTkxNV9SRUFEKEdUSU1SKSk7CisJfQogCXNlcV9wcmludGYobSwgIkludGVycnVwdHMgcmVjZWl2ZWQ6ICVkXG4iLAogCQkgICBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCkpOwogCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgewpAQCAtMzEyLDE1ICszMzMsMTMgQEAKIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsLCBtYXNrOworCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwogCiAJaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOwogCXRhaWwgPSBJOTE1X1JFQUQoUFJCMF9UQUlMKSAmIFRBSUxfQUREUjsKLQltYXNrID0gZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrOwogCiAJc2VxX3ByaW50ZihtLCAiUmluZ0hlYWQgOiAgJTA4eFxuIiwgaGVhZCk7CiAJc2VxX3ByaW50ZihtLCAiUmluZ1RhaWwgOiAgJTA4eFxuIiwgdGFpbCk7Ci0Jc2VxX3ByaW50ZihtLCAiUmluZ01hc2sgOiAgJTA4eFxuIiwgbWFzayk7CiAJc2VxX3ByaW50ZihtLCAiUmluZ1NpemUgOiAgJTA4bHhcbiIsIGRldl9wcml2LT5yaW5nLlNpemUpOwogCXNlcV9wcmludGYobSwgIkFjdGhkIDogICAgICUwOHhcbiIsIEk5MTVfUkVBRChJU19JOTY1RyhkZXYpID8gQUNUSERfSTk2NSA6IEFDVEhEKSk7CiAKQEAgLTM2Myw3ICszODIsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGk5MTVfZ2VtX2RlYnVnZnNfbGlzdFtdID0geworc3RhdGljIGludCBpOTE1X3JlZ2lzdGVyc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkgeworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgcmVnOworCisjZGVmaW5lIERVTVBfUkFOR0Uoc3RhcnQsIGVuZCkgXAorCWZvciAocmVnPXN0YXJ0OyByZWcgPCBlbmQ7IHJlZyArPSA0KSBcCisJc2VxX3ByaW50ZihtLCAiJTA4eFx0JTA4eFxuIiwgcmVnLCBJOTE1X1JFQUQocmVnKSk7CisKKwlEVU1QX1JBTkdFKDB4MDAwMDAsIDB4MDBmZmYpOyAgIC8qIFZHQSByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MDIwMDAsIDB4MDJmZmYpOyAgIC8qIGluc3RydWN0aW9uLCBtZW1vcnksIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycyAqLworCURVTVBfUkFOR0UoMHgwMzAwMCwgMHgwMzFmZik7ICAgLyogRkVOQ0UgYW5kIFBQR1RUIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDAzMjAwLCAweDAzZmZmKTsgICAvKiBmcmFtZSBidWZmZXIgY29tcHJlc3Npb24gcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDA1MDAwLCAweDA1ZmZmKTsgICAvKiBJL08gY29udHJvbCByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MDYwMDAsIDB4MDZmZmYpOyAgIC8qIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDA3MDAwLCAweDA3ZmZmKTsgICAvKiAzRCBpbnRlcm5hbCBkZWJ1ZyByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MDc0MDAsIDB4MDg4ZmYpOyAgIC8qIEdQRSBkZWJ1ZyByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MGEwMDAsIDB4MGFmZmYpOyAgIC8qIGRpc3BsYXkgcGFsZXR0ZSByZWdpc3RlcnMgKi8KKwlEVU1QX1JBTkdFKDB4MTAwMDAsIDB4MTNmZmYpOyAgIC8qIE1NSU8gTUNIQkFSICovCisJRFVNUF9SQU5HRSgweDMwMDAwLCAweDNmZmZmKTsgICAvKiBvdmVybGF5IHJlZ2lzdGVycyAqLworCURVTVBfUkFOR0UoMHg2MDAwMCwgMHg2ZmZmZik7ICAgLyogZGlzcGxheSBlbmdpbmUgcGlwZWxpbmUgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDcwMDAwLCAweDcyZmZmKTsgICAvKiBkaXNwbGF5IGFuZCBjdXJzb3IgcmVnaXN0ZXJzICovCisJRFVNUF9SQU5HRSgweDczMDAwLCAweDczZmZmKTsgICAvKiBwZXJmb3JtYW5jZSBjb3VudGVycyAqLworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGk5MTVfZGVidWdmc19saXN0W10gPSB7CisJeyJpOTE1X3JlZ3MiLCBpOTE1X3JlZ2lzdGVyc19pbmZvLCAwfSwKIAl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEFDVElWRV9MSVNUfSwKIAl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgRkxVU0hJTkdfTElTVH0sCiAJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIElOQUNUSVZFX0xJU1R9LApAQCAtMzc3LDE5ICs0MjYsMTkgQEAKIAl7Imk5MTVfYmF0Y2hidWZmZXJzIiwgaTkxNV9iYXRjaGJ1ZmZlcl9pbmZvLCAwfSwKIAl7Imk5MTVfZXJyb3Jfc3RhdGUiLCBpOTE1X2Vycm9yX3N0YXRlLCAwfSwKIH07Ci0jZGVmaW5lIEk5MTVfR0VNX0RFQlVHRlNfRU5UUklFUyBBUlJBWV9TSVpFKGk5MTVfZ2VtX2RlYnVnZnNfbGlzdCkKKyNkZWZpbmUgSTkxNV9ERUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0laRShpOTE1X2RlYnVnZnNfbGlzdCkKIAotaW50IGk5MTVfZ2VtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK2ludCBpOTE1X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKIHsKLQlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKGk5MTVfZ2VtX2RlYnVnZnNfbGlzdCwKLQkJCQkJSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTLAorCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoaTkxNV9kZWJ1Z2ZzX2xpc3QsCisJCQkJCUk5MTVfREVCVUdGU19FTlRSSUVTLAogCQkJCQltaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7CiB9CiAKLXZvaWQgaTkxNV9nZW1fZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQordm9pZCBpOTE1X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKIHsKLQlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoaTkxNV9nZW1fZGVidWdmc19saXN0LAotCQkJCSBJOTE1X0dFTV9ERUJVR0ZTX0VOVFJJRVMsIG1pbm9yKTsKKwlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoaTkxNV9kZWJ1Z2ZzX2xpc3QsCisJCQkJIEk5MTVfREVCVUdGU19FTlRSSUVTLCBtaW5vcik7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDUwZDFmNzguLjVhNDlhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMjksMTEgKzI5LDExIEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCi0KLSNkZWZpbmUgSTkxNV9EUlYJImk5MTVfZHJ2IgorI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgogCiAvKiBSZWFsbHkgd2FudCBhbiBPUy1pbmRlcGVuZGVudCByZXNldHRhYmxlIHRpbWVyLiAgV291bGQgbGlrZSB0byBoYXZlCiAgKiB0aGlzIGxvb3AgcnVuIGZvciAoZWcpIDMgc2VjLCBidXQgaGF2ZSB0aGUgdGltZXIgcmVzZXQgZXZlcnkgdGltZQpAQCAtODAsNiArODAsMzQgQEAKIAlyZXR1cm4gLUVCVVNZOwogfQogCisvKiBBcyBhIHJpbmdidWZmZXIgaXMgb25seSBhbGxvd2VkIHRvIHdyYXAgYmV0d2VlbiBpbnN0cnVjdGlvbnMsIGZpbGwKKyAqIHRoZSB0YWlsIHdpdGggTk9PUHMuCisgKi8KK2ludCBpOTE1X3dyYXBfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqdmlydDsKKwlpbnQgcmVtOworCisJcmVtID0gZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIGRldl9wcml2LT5yaW5nLnRhaWw7CisJaWYgKGRldl9wcml2LT5yaW5nLnNwYWNlIDwgcmVtKSB7CisJCWludCByZXQgPSBpOTE1X3dhaXRfcmluZyhkZXYsIHJlbSwgX19mdW5jX18pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gcmVtOworCisJdmlydCA9ICh1bnNpZ25lZCBpbnQgKikKKwkJKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgKyBkZXZfcHJpdi0+cmluZy50YWlsKTsKKwlyZW0gLz0gNDsKKwl3aGlsZSAocmVtLS0pCisJCSp2aXJ0KysgPSBNSV9OT09QOworCisJZGV2X3ByaXYtPnJpbmcudGFpbCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBTZXRzIHVwIHRoZSBoYXJkd2FyZSBzdGF0dXMgcGFnZSBmb3IgZGV2aWNlcyB0aGF0IG5lZWQgYSBwaHlzaWNhbCBhZGRyZXNzCiAgKiBpbiB0aGUgcmVnaXN0ZXIuCkBAIC0xMDEsNyArMTI5LDcgQEAKIAltZW1zZXQoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLCAwLCBQQUdFX1NJWkUpOwogCiAJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKLQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CisJRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4Nyw4ICsyMTUsNyBAQAogCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdiA9IChkcm1faTkxNV9zYXJlYV90ICopCiAJCQkoKHU4ICopbWFzdGVyX3ByaXYtPnNhcmVhLT5oYW5kbGUgKyBpbml0LT5zYXJlYV9wcml2X29mZnNldCk7CiAJfSBlbHNlIHsKLQkJRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwKLQkJCQkic2FyZWEgbm90IGZvdW5kIGFzc3VtaW5nIERSSTIgdXNlcnNwYWNlXG4iKTsKKwkJRFJNX0RFQlVHX0RSSVZFUigic2FyZWEgbm90IGZvdW5kIGFzc3VtaW5nIERSSTIgdXNlcnNwYWNlXG4iKTsKIAl9CiAKIAlpZiAoaW5pdC0+cmluZ19zaXplICE9IDApIHsKQEAgLTIwMCw3ICsyMjcsNiBAQAogCQl9CiAKIAkJZGV2X3ByaXYtPnJpbmcuU2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKLQkJZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrID0gZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDE7CiAKIAkJZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7CiAJCWRldl9wcml2LT5yaW5nLm1hcC5zaXplID0gaW5pdC0+cmluZ19zaXplOwpAQCAtMjM4LDcgKzI2NCw3IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsICIlc1xuIiwgX19mdW5jX18pOworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZSA9PSBOVUxMKSB7CiAJCURSTV9FUlJPUigiY2FuIG5vdCBpb3JlbWFwIHZpcnR1YWwgYWRkcmVzcyBmb3IiCkBAIC0yNTEsMTQgKzI3NywxNCBAQAogCQlEUk1fRVJST1IoIkNhbiBub3QgZmluZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAiaHcgc3RhdHVzIHBhZ2UgQCAlcFxuIiwKKwlEUk1fREVCVUdfRFJJVkVSKCJodyBzdGF0dXMgcGFnZSBAICVwXG4iLAogCQkJCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSk7CiAKIAlpZiAoZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkciAhPSAwKQogCQlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwogCWVsc2UKIAkJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKLQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CisJRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU1Miw3ICs1NzgsNyBAQAogCWlmICghbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwgIiVzOiBwYWdlPSVkIHBmQ3VycmVudFBhZ2U9JWRcbiIsCisJRFJNX0RFQlVHX0RSSVZFUigiJXM6IHBhZ2U9JWQgcGZDdXJyZW50UGFnZT0lZFxuIiwKIAkJCSAgX19mdW5jX18sCiAJCQkgZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSwKIAkJCSBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlKTsKQEAgLTYzMyw4ICs2NTksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLAotCQkJImk5MTUgYmF0Y2hidWZmZXIsIHN0YXJ0ICV4IHVzZWQgJWQgY2xpcHJlY3RzICVkXG4iLAorCURSTV9ERUJVR19EUklWRVIoImk5MTUgYmF0Y2hidWZmZXIsIHN0YXJ0ICV4IHVzZWQgJWQgY2xpcHJlY3RzICVkXG4iLAogCQkJYmF0Y2gtPnN0YXJ0LCBiYXRjaC0+dXNlZCwgYmF0Y2gtPm51bV9jbGlwcmVjdHMpOwogCiAJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwpAQCAtNjgxLDggKzcwNiw3IEBACiAJdm9pZCAqYmF0Y2hfZGF0YTsKIAlpbnQgcmV0OwogCi0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwKLQkJCSJpOTE1IGNtZGJ1ZmZlciwgYnVmICVwIHN6ICVkIGNsaXByZWN0cyAlZFxuIiwKKwlEUk1fREVCVUdfRFJJVkVSKCJpOTE1IGNtZGJ1ZmZlciwgYnVmICVwIHN6ICVkIGNsaXByZWN0cyAlZFxuIiwKIAkJCWNtZGJ1Zi0+YnVmLCBjbWRidWYtPnN6LCBjbWRidWYtPm51bV9jbGlwcmVjdHMpOwogCiAJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwpAQCAtNzM1LDcgKzc1OSw3IEBACiB7CiAJaW50IHJldDsKIAotCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsICIlc1xuIiwgX19mdW5jX18pOworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKQEAgLTc3OCw3ICs4MDIsNyBAQAogCQl2YWx1ZSA9IGRldl9wcml2LT5udW1fZmVuY2VfcmVncyAtIGRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsICJVbmtub3duIHBhcmFtZXRlciAlZFxuIiwKKwkJRFJNX0RFQlVHX0RSSVZFUigiVW5rbm93biBwYXJhbWV0ZXIgJWRcbiIsCiAJCQkJCXBhcmFtLT5wYXJhbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgxOSw3ICs4NDMsNyBAQAogCQlkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0ID0gcGFyYW0tPnZhbHVlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUk1fREVCVUdfRFJJVkVSKEk5MTVfRFJWLCAidW5rbm93biBwYXJhbWV0ZXIgJWRcbiIsCisJCURSTV9ERUJVR19EUklWRVIoInVua25vd24gcGFyYW1ldGVyICVkXG4iLAogCQkJCQlwYXJhbS0+cGFyYW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04NDYsNyArODcwLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JRFJNX0RFQlVHKCJzZXQgc3RhdHVzIHBhZ2UgYWRkciAweCUwOHhcbiIsICh1MzIpaHdzLT5hZGRyKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJzZXQgc3RhdHVzIHBhZ2UgYWRkciAweCUwOHhcbiIsICh1MzIpaHdzLT5hZGRyKTsKIAogCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSBod3MtPmFkZHIgJiAoMHgxZmZmZjw8MTIpOwogCkBAIC04NjgsMTMgKzg5MiwyNSBAQAogCiAJbWVtc2V0KGRldl9wcml2LT5od19zdGF0dXNfcGFnZSwgMCwgUEFHRV9TSVpFKTsKIAlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwotCURSTV9ERUJVR19EUklWRVIoSTkxNV9EUlYsICJsb2FkIGh3cyBIV1NfUEdBIHdpdGggZ2Z4IG1lbSAweCV4XG4iLAorCURSTV9ERUJVR19EUklWRVIoImxvYWQgaHdzIEhXU19QR0Egd2l0aCBnZnggbWVtIDB4JXhcbiIsCiAJCQkJZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7Ci0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwgImxvYWQgaHdzIGF0ICVwXG4iLAorCURSTV9ERUJVR19EUklWRVIoImxvYWQgaHdzIGF0ICVwXG4iLAogCQkJCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaTkxNV9nZXRfYnJpZGdlX2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfcHJpdi0+YnJpZGdlX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIFBDSV9ERVZGTigwLDApKTsKKwlpZiAoIWRldl9wcml2LT5icmlkZ2VfZGV2KSB7CisJCURSTV9FUlJPUigiYnJpZGdlIGRldmljZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCiAvKioKICAqIGk5MTVfcHJvYmVfYWdwIC0gZ2V0IEFHUCBib290dXAgY29uZmlndXJhdGlvbgogICogQHBkZXY6IFBDSSBkZXZpY2UKQEAgLTg4OCwyMCArOTI0LDEzIEBACiBzdGF0aWMgaW50IGk5MTVfcHJvYmVfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90ICphcGVydHVyZV9zaXplLAogCQkJICB1aW50MzJfdCAqcHJlYWxsb2NhdGVkX3NpemUpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MTYgdG1wID0gMDsKIAl1bnNpZ25lZCBsb25nIG92ZXJoZWFkOwogCXVuc2lnbmVkIGxvbmcgc3RvbGVuOwogCi0JYnJpZGdlX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIFBDSV9ERVZGTigwLDApKTsKLQlpZiAoIWJyaWRnZV9kZXYpIHsKLQkJRFJNX0VSUk9SKCJicmlkZ2UgZGV2aWNlIG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KIAkvKiBHZXQgdGhlIGZiIGFwZXJ0dXJlIHNpemUgYW5kICJzdG9sZW4iIG1lbW9yeSBhbW91bnQuICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlX2RldiwgSU5URUxfR01DSF9DVFJMLCAmdG1wKTsKLQlwY2lfZGV2X3B1dChicmlkZ2VfZGV2KTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgSU5URUxfR01DSF9DVFJMLCAmdG1wKTsKIAogCSphcGVydHVyZV9zaXplID0gMTAyNCAqIDEwMjQ7CiAJKnByZWFsbG9jYXRlZF9zaXplID0gMTAyNCAqIDEwMjQ7CkBAIC05ODQsNiArMTAxMywxOSBAQAogCXJldHVybiAwOwogfQogCisvKiB0cnVlID0gZW5hYmxlIGRlY29kZSwgZmFsc2UgPSBkaXNhYmxlIGRlY29kZXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV92Z2Ffc2V0X2RlY29kZSh2b2lkICpjb29raWUsIGJvb2wgc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvb2tpZTsKKworCWludGVsX21vZGVzZXRfdmdhX3NldF9zdGF0ZShkZXYsIHN0YXRlKTsKKwlpZiAoc3RhdGUpCisJCXJldHVybiBWR0FfUlNSQ19MRUdBQ1lfSU8gfCBWR0FfUlNSQ19MRUdBQ1lfTUVNIHwKKwkJICAgICAgIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07CisJZWxzZQorCQlyZXR1cm4gVkdBX1JTUkNfTk9STUFMX0lPIHwgVkdBX1JTUkNfTk9STUFMX01FTTsKK30KKwogc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBsb25nIHByZWFsbG9jX3NpemUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFncF9zaXplKQpAQCAtMTAyOSw2ICsxMDcxLDExIEBACiAJaWYgKHJldCkKIAkJRFJNX0lORk8oImZhaWxlZCB0byBmaW5kIFZCSU9TIHRhYmxlc1xuIik7CiAKKwkvKiBpZiB3ZSBoYXZlID4gMSBWR0EgY2FyZHMsIHRoZW4gZGlzYWJsZSB0aGUgcmFkZW9uIFZHQSByZXNvdXJjZXMgKi8KKwlyZXQgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBpOTE1X3ZnYV9zZXRfZGVjb2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKKwogCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZGVzdHJveV9yaW5nYnVmZmVyOwpAQCAtMTE1MywxMSArMTIwMCwxNiBAQAogCWJhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgbW1pb19iYXIpOwogCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKIAorCWlmIChpOTE1X2dldF9icmlkZ2VfZGV2KGRldikpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBmcmVlX3ByaXY7CisJfQorCiAJZGV2X3ByaXYtPnJlZ3MgPSBpb3JlbWFwKGJhc2UsIHNpemUpOwogCWlmICghZGV2X3ByaXYtPnJlZ3MpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CiAJCXJldCA9IC1FSU87Ci0JCWdvdG8gZnJlZV9wcml2OworCQlnb3RvIHB1dF9icmlkZ2U7CiAJfQogCiAgICAgICAgIGRldl9wcml2LT5tbS5ndHRfbWFwcGluZyA9CkBAIC0xMjY5LDYgKzEzMjEsOCBAQAogCWlvX21hcHBpbmdfZnJlZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcpOwogb3V0X3JtbWFwOgogCWlvdW5tYXAoZGV2X3ByaXYtPnJlZ3MpOworcHV0X2JyaWRnZToKKwlwY2lfZGV2X3B1dChkZXZfcHJpdi0+YnJpZGdlX2Rldik7CiBmcmVlX3ByaXY6CiAJa2ZyZWUoZGV2X3ByaXYpOwogCXJldHVybiByZXQ7CkBAIC0xMjg5LDYgKzEzNDMsNyBAQAogCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwkJdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwogCX0KIAogCWlmIChkZXYtPnBkZXYtPm1zaV9lbmFibGVkKQpAQCAtMTMxMiw2ICsxMzY3LDcgQEAKIAkJaTkxNV9nZW1fbGFzdGNsb3NlKGRldik7CiAJfQogCisJcGNpX2Rldl9wdXQoZGV2X3ByaXYtPmJyaWRnZV9kZXYpOwogCWtmcmVlKGRldi0+ZGV2X3ByaXZhdGUpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzIxLDcgKzEzNzcsNyBAQAogewogCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmk5MTVfZmlsZV9wcml2OwogCi0JRFJNX0RFQlVHX0RSSVZFUihJOTE1X0RSViwgIlxuIik7CisJRFJNX0RFQlVHX0RSSVZFUigiXG4iKTsKIAlpOTE1X2ZpbGVfcHJpdiA9IChzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICopCiAJICAgIGttYWxsb2Moc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIEdGUF9LRVJORUwpOwogCkBAIC0xMzUyLDcgKzE0MDgsNyBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJaWYgKCFkZXZfcHJpdiB8fCBkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCWludGVsZmJfcmVzdG9yZSgpOworCQlkcm1fZmJfaGVscGVyX3Jlc3RvcmUoKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggZmM0YjY4YS4uZGJlNTY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0zNywxMiArMzcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9tb2Rlc2V0ID0gLTE7CitzdGF0aWMgaW50IGk5MTVfbW9kZXNldCA9IC0xOwogbW9kdWxlX3BhcmFtX25hbWVkKG1vZGVzZXQsIGk5MTVfbW9kZXNldCwgaW50LCAwNDAwKTsKIAogdW5zaWduZWQgaW50IGk5MTVfZmJwZXJjcnRjID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChmYnBlcmNydGMsIGk5MTVfZmJwZXJjcnRjLCBpbnQsIDA0MDApOwogCit1bnNpZ25lZCBpbnQgaTkxNV9wb3dlcnNhdmUgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKHBvd2Vyc2F2ZSwgaTkxNV9wb3dlcnNhdmUsIGludCwgMDQwMCk7CisKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXI7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKQEAgLTE4OCw4ICsxOTEsOCBAQAogCS5tYXN0ZXJfY3JlYXRlID0gaTkxNV9tYXN0ZXJfY3JlYXRlLAogCS5tYXN0ZXJfZGVzdHJveSA9IGk5MTVfbWFzdGVyX2Rlc3Ryb3ksCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCi0JLmRlYnVnZnNfaW5pdCA9IGk5MTVfZ2VtX2RlYnVnZnNfaW5pdCwKLQkuZGVidWdmc19jbGVhbnVwID0gaTkxNV9nZW1fZGVidWdmc19jbGVhbnVwLAorCS5kZWJ1Z2ZzX2luaXQgPSBpOTE1X2RlYnVnZnNfaW5pdCwKKwkuZGVidWdmc19jbGVhbnVwID0gaTkxNV9kZWJ1Z2ZzX2NsZWFudXAsCiAjZW5kaWYKIAkuZ2VtX2luaXRfb2JqZWN0ID0gaTkxNV9nZW1faW5pdF9vYmplY3QsCiAJLmdlbV9mcmVlX29iamVjdCA9IGk5MTVfZ2VtX2ZyZWVfb2JqZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNWI0Zjg3ZS4uYTA2MzJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC04NSw3ICs4NSw2IEBACiB9OwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfcmluZ19idWZmZXIgewotCWludCB0YWlsX21hc2s7CiAJdW5zaWduZWQgbG9uZyBTaXplOwogCXU4ICp2aXJ0dWFsX3N0YXJ0OwogCWludCBoZWFkOwpAQCAtMTU2LDYgKzE1NSw3IEBACiAKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKIAlkcm1faTkxNV9yaW5nX2J1ZmZlcl90IHJpbmc7CiAKIAlkcm1fZG1hX2hhbmRsZV90ICpzdGF0dXNfcGFnZV9kbWFoOwpAQCAtMzExLDcgKzMxMSw3IEBACiAJdTMyIHNhdmVJTVI7CiAJdTMyIHNhdmVDQUNIRV9NT0RFXzA7CiAJdTMyIHNhdmVEX1NUQVRFOwotCXUzMiBzYXZlQ0dfMkRfRElTOworCXUzMiBzYXZlRFNQQ0xLX0dBVEVfRDsKIAl1MzIgc2F2ZU1JX0FSQl9TVEFURTsKIAl1MzIgc2F2ZVNXRjBbMTZdOwogCXUzMiBzYXZlU1dGMVsxNl07CkBAIC00NDMsNiArNDQzLDE0IEBACiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcGh5c19vYmplY3QgKnBoeXNfb2Jqc1tJOTE1X01BWF9QSFlTX09CSkVDVF07CiAJfSBtbTsKIAlzdHJ1Y3Qgc2R2b19kZXZpY2VfbWFwcGluZyBzZHZvX21hcHBpbmdzWzJdOworCisJLyogUmVjbG9ja2luZyBzdXBwb3J0ICovCisJYm9vbCByZW5kZXJfcmVjbG9ja19hdmFpbDsKKwlib29sIGx2ZHNfZG93bmNsb2NrX2F2YWlsOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpZGxlX3dvcms7CisJc3RydWN0IHRpbWVyX2xpc3QgaWRsZV90aW1lcjsKKwlib29sIGJ1c3k7CisJdTE2IG9yaWdfY2xvY2s7CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKIAogLyoqIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBlYWNoIGRybV9nZW1fb2JqZWN0ICovCkBAIC01NzUsNiArNTgzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXTsKIGV4dGVybiBpbnQgaTkxNV9tYXhfaW9jdGw7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfZmJwZXJjcnRjOworZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X3Bvd2Vyc2F2ZTsKIAogZXh0ZXJuIGludCBpOTE1X21hc3Rlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlcik7CiBleHRlcm4gdm9pZCBpOTE1X21hc3Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwpAQCAtNzMwLDggKzczOSw4IEBACiB2b2lkIGk5MTVfZHVtcF9scnUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqd2hlcmUpOwogCiAvKiBpOTE1X2RlYnVnZnMuYyAqLwotaW50IGk5MTVfZ2VtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Ci12b2lkIGk5MTVfZ2VtX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitpbnQgaTkxNV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwordm9pZCBpOTE1X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAKIC8qIGk5MTVfc3VzcGVuZC5jICovCiBleHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTc1Nyw2ICs3NjYsNyBAQAogLyogbW9kZXNldHRpbmcgKi8KIGV4dGVybiB2b2lkIGludGVsX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX21vZGVzZXRfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaW50ZWxfbW9kZXNldF92Z2Ffc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgc3RhdGUpOwogCiAvKioKICAqIExvY2sgdGVzdCBmb3Igd2hlbiBpdCdzIGp1c3QgZm9yIHN5bmNocm9uaXphdGlvbiBvZiByaW5nIGFjY2Vzcy4KQEAgLTc4MSwzMyArNzkxLDMyIEBACiAKICNkZWZpbmUgSTkxNV9WRVJCT1NFIDAKIAotI2RlZmluZSBSSU5HX0xPQ0FMUwl1bnNpZ25lZCBpbnQgb3V0cmluZywgcmluZ21hc2ssIG91dGNvdW50OyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBjaGFyICp2aXJ0OworI2RlZmluZSBSSU5HX0xPQ0FMUwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnJpbmdfdmlydF9fOwogCi0jZGVmaW5lIEJFR0lOX0xQX1JJTkcobikgZG8gewkJCQlcCi0JaWYgKEk5MTVfVkVSQk9TRSkJCQkJXAotCQlEUk1fREVCVUcoIkJFR0lOX0xQX1JJTkcoJWQpXG4iLCAobikpOwlcCi0JaWYgKGRldl9wcml2LT5yaW5nLnNwYWNlIDwgKG4pKjQpCQlcCi0JCWk5MTVfd2FpdF9yaW5nKGRldiwgKG4pKjQsIF9fZnVuY19fKTsJCVwKLQlvdXRjb3VudCA9IDA7CQkJCQlcCi0Jb3V0cmluZyA9IGRldl9wcml2LT5yaW5nLnRhaWw7CQkJXAotCXJpbmdtYXNrID0gZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrOwkJXAotCXZpcnQgPSBkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0OwkJXAorI2RlZmluZSBCRUdJTl9MUF9SSU5HKG4pIGRvIHsJCQkJCQlcCisJaW50IGJ5dGVzX18gPSA0KihuKTsJCQkJCQlcCisJaWYgKEk5MTVfVkVSQk9TRSkgRFJNX0RFQlVHKCJCRUdJTl9MUF9SSU5HKCVkKVxuIiwgKG4pKTsJXAorCS8qIGEgd3JhcCBtdXN0IG9jY3VyIGJldHdlZW4gaW5zdHJ1Y3Rpb25zIHNvIHBhZCBiZWZvcmVoYW5kICovCVwKKwlpZiAodW5saWtlbHkgKGRldl9wcml2LT5yaW5nLnRhaWwgKyBieXRlc19fID4gZGV2X3ByaXYtPnJpbmcuU2l6ZSkpIFwKKwkJaTkxNV93cmFwX3JpbmcoZGV2KTsJCQkJCVwKKwlpZiAodW5saWtlbHkgKGRldl9wcml2LT5yaW5nLnNwYWNlIDwgYnl0ZXNfXykpCQkJXAorCQlpOTE1X3dhaXRfcmluZyhkZXYsIGJ5dGVzX18sIF9fZnVuY19fKTsJCQlcCisJcmluZ192aXJ0X18gPSAodW5zaWduZWQgaW50ICopCQkJCQlcCisJICAgICAgICAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCArIGRldl9wcml2LT5yaW5nLnRhaWwpOwlcCisJZGV2X3ByaXYtPnJpbmcudGFpbCArPSBieXRlc19fOwkJCQkJXAorCWRldl9wcml2LT5yaW5nLnRhaWwgJj0gZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDE7CQkJXAorCWRldl9wcml2LT5yaW5nLnNwYWNlIC09IGJ5dGVzX187CQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgT1VUX1JJTkcobikgZG8gewkJCQkJXAorI2RlZmluZSBPVVRfUklORyhuKSBkbyB7CQkJCQkJXAogCWlmIChJOTE1X1ZFUkJPU0UpIERSTV9ERUJVRygiICAgT1VUX1JJTkcgJXhcbiIsIChpbnQpKG4pKTsJXAotCSoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHZpcnQgKyBvdXRyaW5nKSA9IChuKTsJXAotICAgICAgICBvdXRjb3VudCsrOwkJCQkJCVwKLQlvdXRyaW5nICs9IDQ7CQkJCQkJXAotCW91dHJpbmcgJj0gcmluZ21hc2s7CQkJCQlcCisJKnJpbmdfdmlydF9fKysgPSAobik7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBBRFZBTkNFX0xQX1JJTkcoKSBkbyB7CQkJCQkJXAotCWlmIChJOTE1X1ZFUkJPU0UpIERSTV9ERUJVRygiQURWQU5DRV9MUF9SSU5HICV4XG4iLCBvdXRyaW5nKTsJXAotCWRldl9wcml2LT5yaW5nLnRhaWwgPSBvdXRyaW5nOwkJCQkJXAotCWRldl9wcml2LT5yaW5nLnNwYWNlIC09IG91dGNvdW50ICogNDsJCQkJXAotCUk5MTVfV1JJVEUoUFJCMF9UQUlMLCBvdXRyaW5nKTsJCQlcCisJaWYgKEk5MTVfVkVSQk9TRSkJCQkJCQlcCisJCURSTV9ERUJVRygiQURWQU5DRV9MUF9SSU5HICV4XG4iLCBkZXZfcHJpdi0+cmluZy50YWlsKTsJXAorCUk5MTVfV1JJVEUoUFJCMF9UQUlMLCBkZXZfcHJpdi0+cmluZy50YWlsKTsJCQlcCiB9IHdoaWxlKDApCiAKIC8qKgpAQCAtODMwLDYgKzgzOSw3IEBACiAjZGVmaW5lIEk5MTVfR0VNX0hXU19JTkRFWAkJMHgyMAogI2RlZmluZSBJOTE1X0JSRUFEQ1JVTUJfSU5ERVgJCTB4MjEKIAorZXh0ZXJuIGludCBpOTE1X3dyYXBfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKTsKIAogI2RlZmluZSBJU19JODMwKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MzU3NykKQEAgLTkwMyw2ICs5MTMsOSBAQAogLyogZHNwYXJiIGNvbnRyb2xsZWQgYnkgaHcgb25seSAqLwogI2RlZmluZSBEU1BBUkJfSFdDT05UUk9MKGRldikgKElTX0c0WChkZXYpIHx8IElTX0lHRE5HKGRldikpCiAKKyNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikgfHwgSVNfSUdETkcoZGV2KSkKKyNkZWZpbmUgSEFTX1BJUEVfQ1hTUihkZXYpIChJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQorCiAjZGVmaW5lIFBSSU1BUllfUklOR0JVRkZFUl9TSVpFICAgICAgICAgKDEyOCoxMDI0KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDgwZTViYTQuLmM2NzMxNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKQEAgLTExMSw3ICsxMTIsOCBAQAogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlpbnQgaGFuZGxlLCByZXQ7CisJaW50IHJldDsKKwl1MzIgaGFuZGxlOwogCiAJYXJncy0+c2l6ZSA9IHJvdW5kdXAoYXJncy0+c2l6ZSwgUEFHRV9TSVpFKTsKIApAQCAtOTgxLDYgKzk4Myw3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4gKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKIAl1aW50MzJfdCByZWFkX2RvbWFpbnMgPSBhcmdzLT5yZWFkX2RvbWFpbnM7CiAJdWludDMyX3Qgd3JpdGVfZG9tYWluID0gYXJncy0+d3JpdGVfZG9tYWluOwogCWludCByZXQ7CkBAIC0xMDA0LDE1ICsxMDA3LDE3IEBACiAJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOwogCWlmIChvYmogPT0gTlVMTCkKIAkJcmV0dXJuIC1FQkFERjsKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpbnRlbF9tYXJrX2J1c3koZGV2LCBvYmopOworCiAjaWYgV0FUQ0hfQlVGCiAJRFJNX0lORk8oInNldF9kb21haW5faW9jdGwgJXAoJXpkKSwgJTA4eCAlMDh4XG4iLAogCQkgb2JqLCBvYmotPnNpemUsIHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKTsKICNlbmRpZgogCWlmIChyZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fR1RUKSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7Ci0KIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgd3JpdGVfZG9tYWluICE9IDApOwogCiAJCS8qIFVwZGF0ZSB0aGUgTFJVIG9uIHRoZSBmZW5jZSBmb3IgdGhlIENQVSBhY2Nlc3MgdGhhdCdzCkBAIC0yNzc2LDYgKzI3ODEsOCBAQAogCUJVR19PTihvYmotPnBlbmRpbmdfcmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CiAJQlVHX09OKG9iai0+cGVuZGluZ193cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9NQUlOX0NQVSk7CiAKKwlpbnRlbF9tYXJrX2J1c3koZGV2LCBvYmopOworCiAjaWYgV0FUQ0hfQlVGCiAJRFJNX0lORk8oIiVzOiBvYmplY3QgJXAgcmVhZCAlMDh4IC0+ICUwOHggd3JpdGUgJTA4eCAtPiAlMDh4XG4iLAogCQkgX19mdW5jX18sIG9iaiwKQEAgLTQwOTMsNyArNDEwMCw2IEBACiAKIAkvKiBTZXQgdXAgdGhlIGtlcm5lbCBtYXBwaW5nIGZvciB0aGUgcmluZy4gKi8KIAlyaW5nLT5TaXplID0gb2JqLT5zaXplOwotCXJpbmctPnRhaWxfbWFzayA9IG9iai0+c2l6ZSAtIDE7CiAKIAlyaW5nLT5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldDsKIAlyaW5nLT5tYXAuc2l6ZSA9IG9iai0+c2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKaW5kZXggYTJkNTI3Yi4uMjAwZTM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKQEAgLTk0LDIzICs5NCwxNSBAQAogc3RhdGljIGludAogaW50ZWxfYWxsb2NfbWNoYmFyX3Jlc291cmNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJlZyA9IElTX0k5NjVHKGRldikgPyBNQ0hCQVJfSTk2NSA6IE1DSEJBUl9JOTE1OwogCXUzMiB0ZW1wX2xvLCB0ZW1wX2hpID0gMDsKIAl1NjQgbWNoYmFyX2FkZHI7CiAJaW50IHJldCA9IDA7CiAKLQlicmlkZ2VfZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsMCkpOwotCWlmICghYnJpZGdlX2RldikgewotCQlEUk1fREVCVUcoIm5vIGJyaWRnZSBkZXY/IVxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQogCWlmIChJU19JOTY1RyhkZXYpKQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgcmVnICsgNCwgJnRlbXBfaGkpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCByZWcsICZ0ZW1wX2xvKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCByZWcgKyA0LCAmdGVtcF9oaSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCByZWcsICZ0ZW1wX2xvKTsKIAltY2hiYXJfYWRkciA9ICgodTY0KXRlbXBfaGkgPDwgMzIpIHwgdGVtcF9sbzsKIAogCS8qIElmIEFDUEkgZG9lc24ndCBoYXZlIGl0LCBhc3N1bWUgd2UgbmVlZCB0byBhbGxvY2F0ZSBpdCBvdXJzZWx2ZXMgKi8KQEAgLTExOCwzMCArMTEwLDI4IEBACiAJaWYgKG1jaGJhcl9hZGRyICYmCiAJICAgIHBucF9yYW5nZV9yZXNlcnZlZChtY2hiYXJfYWRkciwgbWNoYmFyX2FkZHIgKyBNQ0hCQVJfU0laRSkpIHsKIAkJcmV0ID0gMDsKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dDsKIAl9CiAjZW5kaWYKIAogCS8qIEdldCBzb21lIHNwYWNlIGZvciBpdCAqLwotCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UoYnJpZGdlX2Rldi0+YnVzLCAmZGV2X3ByaXYtPm1jaF9yZXMsCisJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShkZXZfcHJpdi0+YnJpZGdlX2Rldi0+YnVzLCAmZGV2X3ByaXYtPm1jaF9yZXMsCiAJCQkJICAgICBNQ0hCQVJfU0laRSwgTUNIQkFSX1NJWkUsCiAJCQkJICAgICBQQ0lCSU9TX01JTl9NRU0sCiAJCQkJICAgICAwLCAgIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UsCi0JCQkJICAgICBicmlkZ2VfZGV2KTsKKwkJCQkgICAgIGRldl9wcml2LT5icmlkZ2VfZGV2KTsKIAlpZiAocmV0KSB7CiAJCURSTV9ERUJVRygiZmFpbGVkIGJ1cyBhbGxvYzogJWRcbiIsIHJldCk7CiAJCWRldl9wcml2LT5tY2hfcmVzLnN0YXJ0ID0gMDsKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCByZWcgKyA0LAorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCByZWcgKyA0LAogCQkJCSAgICAgICB1cHBlcl8zMl9iaXRzKGRldl9wcml2LT5tY2hfcmVzLnN0YXJ0KSk7CiAKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIHJlZywKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCByZWcsCiAJCQkgICAgICAgbG93ZXJfMzJfYml0cyhkZXZfcHJpdi0+bWNoX3Jlcy5zdGFydCkpOwotb3V0X3B1dDoKLQlwY2lfZGV2X3B1dChicmlkZ2VfZGV2KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUwLDQ0ICsxNDAsMzYgQEAKIHN0YXRpYyBib29sCiBpbnRlbF9zZXR1cF9tY2hiYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgbWNoYmFyX3JlZyA9IElTX0k5NjVHKGRldikgPyBNQ0hCQVJfSTk2NSA6IE1DSEJBUl9JOTE1OwogCXUzMiB0ZW1wOwogCWJvb2wgbmVlZF9kaXNhYmxlID0gZmFsc2UsIGVuYWJsZWQ7CiAKLQlicmlkZ2VfZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsMCkpOwotCWlmICghYnJpZGdlX2RldikgewotCQlEUk1fREVCVUcoIm5vIGJyaWRnZSBkZXY/IVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQogCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKIAkJZW5hYmxlZCA9ICEhKHRlbXAgJiBERVZFTl9NQ0hCQVJfRU4pOwogCX0gZWxzZSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOwogCQllbmFibGVkID0gdGVtcCAmIDE7CiAJfQogCiAJLyogSWYgaXQncyBhbHJlYWR5IGVuYWJsZWQsIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgKi8KIAlpZiAoZW5hYmxlZCkKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dDsKIAogCWlmIChpbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2UoZGV2KSkKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dDsKIAogCW5lZWRfZGlzYWJsZSA9IHRydWU7CiAKIAkvKiBTcGFjZSBpcyBhbGxvY2F0ZWQgb3IgcmVzZXJ2ZWQsIHNvIGVuYWJsZSBpdC4gKi8KIAlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgewotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIERFVkVOX1JFRywKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU5fUkVHLAogCQkJCSAgICAgICB0ZW1wIHwgREVWRU5fTUNIQkFSX0VOKTsKIAl9IGVsc2UgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsIHRlbXAgfCAxKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsIHRlbXAgfCAxKTsKIAl9Ci1vdXRfcHV0OgotCXBjaV9kZXZfcHV0KGJyaWRnZV9kZXYpOwogb3V0OgogCXJldHVybiBuZWVkX2Rpc2FibGU7CiB9CkBAIC0xOTYsMjUgKzE3OCwxOCBAQAogaW50ZWxfdGVhcmRvd25fbWNoYmFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgZGlzYWJsZSkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKIAlpbnQgbWNoYmFyX3JlZyA9IElTX0k5NjVHKGRldikgPyBNQ0hCQVJfSTk2NSA6IE1DSEJBUl9JOTE1OwogCXUzMiB0ZW1wOwogCi0JYnJpZGdlX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIFBDSV9ERVZGTigwLDApKTsKLQlpZiAoIWJyaWRnZV9kZXYpIHsKLQkJRFJNX0RFQlVHKCJubyBicmlkZ2UgZGV2PyFcbiIpOwotCQlyZXR1cm47Ci0JfQotCiAJaWYgKGRpc2FibGUpIHsKIAkJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikpIHsKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU5fUkVHLCAmdGVtcCk7CiAJCQl0ZW1wICY9IH5ERVZFTl9NQ0hCQVJfRU47Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIERFVkVOX1JFRywgdGVtcCk7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsIHRlbXApOwogCQl9IGVsc2UgewotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOwogCQkJdGVtcCAmPSB+MTsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlX2RldiwgbWNoYmFyX3JlZywgdGVtcCk7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCB0ZW1wKTsKIAkJfQogCX0KIApAQCAtMjM0LDcgKzIwOSwxMyBAQAogCXVpbnQzMl90IHN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwogCWJvb2wgbmVlZF9kaXNhYmxlOwogCi0JaWYgKCFJU19JOVhYKGRldikpIHsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQkvKiBPbiBJR0RORyB3aGF0ZXZlciBEUkFNIGNvbmZpZywgR1BVIGFsd2F5cyBkbworCQkgKiBzYW1lIHN3aXp6bGluZyBzZXR1cC4KKwkJICovCisJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOworCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOTsKKwl9IGVsc2UgaWYgKCFJU19JOVhYKGRldikpIHsKIAkJLyogQXMgZmFyIGFzIHdlIGtub3csIHRoZSA4NjUgZG9lc24ndCBoYXZlIHRoZXNlIGJpdCA2CiAJCSAqIHN3aXp6bGluZyBpc3N1ZXMuCiAJCSAqLwpAQCAtMzE3LDEzICsyOTgsNiBAQAogCQl9CiAJfQogCi0JLyogRklYTUU6IGNoZWNrIHdpdGggbWVtb3J5IGNvbmZpZyBvbiBJR0RORyAqLwotCWlmIChJU19JR0RORyhkZXYpKSB7Ci0JCURSTV9FUlJPUigiZGlzYWJsZSB0aWxpbmcgb24gSUdETkcuLi5cbiIpOwotCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKLQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047Ci0JfQotCiAJZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeCA9IHN3aXp6bGVfeDsKIAlkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV95ID0gc3dpenpsZV95OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggN2ViYzg0Yy4uNmM4OWYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC01NjUsNiArNTY1LDI3IEBACiAKIAkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX1NUQVQsIGhvdHBsdWdfc3RhdHVzKTsKIAkJCUk5MTVfUkVBRChQT1JUX0hPVFBMVUdfU1RBVCk7CisKKwkJCS8qIEVPUyBpbnRlcnJ1cHRzIG9jY3VycyAqLworCQkJaWYgKElTX0lHRChkZXYpICYmCisJCQkJKGhvdHBsdWdfc3RhdHVzICYgQ1JUX0VPU19JTlRfU1RBVFVTKSkgeworCQkJCXUzMiB0ZW1wOworCisJCQkJRFJNX0RFQlVHKCJFT1MgaW50ZXJydXB0IG9jY3Vyc1xuIik7CisJCQkJLyogc3RhdHVzIGlzIGFscmVhZHkgY2xlYXJlZCAqLworCQkJCXRlbXAgPSBJOTE1X1JFQUQoQURQQSk7CisJCQkJdGVtcCAmPSB+QURQQV9EQUNfRU5BQkxFOworCQkJCUk5MTVfV1JJVEUoQURQQSwgdGVtcCk7CisKKwkJCQl0ZW1wID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19FTik7CisJCQkJdGVtcCAmPSB+Q1JUX0VPU19JTlRfRU47CisJCQkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIHRlbXApOworCisJCQkJdGVtcCA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfU1RBVCk7CisJCQkJaWYgKHRlbXAgJiBDUlRfRU9TX0lOVF9TVEFUVVMpCisJCQkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX1NUQVQsCisJCQkJCQlDUlRfRU9TX0lOVF9TVEFUVVMpOworCQkJfQogCQl9CiAKIAkJSTkxNV9XUklURShJSVIsIGlpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCAyOTU1MDgzLi4zZjc5NjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTMwLDYgKzMwLDcgQEAKICAqIGZiIGFwZXJ0dXJlIHNpemUgYW5kIHRoZSBhbW91bnQgb2YgcHJlLXJlc2VydmVkIG1lbW9yeS4KICAqLwogI2RlZmluZSBJTlRFTF9HTUNIX0NUUkwJCTB4NTIKKyNkZWZpbmUgSU5URUxfR01DSF9WR0FfRElTQUJMRSAgKDEgPDwgMSkKICNkZWZpbmUgSU5URUxfR01DSF9FTkFCTEVECTB4NAogI2RlZmluZSBJTlRFTF9HTUNIX01FTV9NQVNLCTB4MQogI2RlZmluZSBJTlRFTF9HTUNIX01FTV82NE0JMHgxCkBAIC01NSw3ICs1Niw3IEBACiAvKiBQQ0kgY29uZmlnIHNwYWNlICovCiAKICNkZWZpbmUgSFBMTENDCTB4YzAgLyogODU1IG9ubHkgKi8KLSNkZWZpbmUgICBHQ19DTE9DS19DT05UUk9MX01BU0sJCSgzIDw8IDApCisjZGVmaW5lICAgR0NfQ0xPQ0tfQ09OVFJPTF9NQVNLCQkoMHhmIDw8IDApCiAjZGVmaW5lICAgR0NfQ0xPQ0tfMTMzXzIwMAkJKDAgPDwgMCkKICNkZWZpbmUgICBHQ19DTE9DS18xMDBfMjAwCQkoMSA8PCAwKQogI2RlZmluZSAgIEdDX0NMT0NLXzEwMF8xMzMJCSgyIDw8IDApCkBAIC02NSw2ICs2NiwyNSBAQAogI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfMTkwXzIwMF9NSFoJKDAgPDwgNCkKICNkZWZpbmUgICBHQ19ESVNQTEFZX0NMT0NLXzMzM19NSFoJKDQgPDwgNCkKICNkZWZpbmUgICBHQ19ESVNQTEFZX0NMT0NLX01BU0sJCSg3IDw8IDQpCisjZGVmaW5lICAgR000NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSwkoMHhmIDw8IDApCisjZGVmaW5lICAgR000NV9HQ19SRU5ERVJfQ0xPQ0tfMjY2X01IWgkoOCA8PCAwKQorI2RlZmluZSAgIEdNNDVfR0NfUkVOREVSX0NMT0NLXzMyMF9NSFoJKDkgPDwgMCkKKyNkZWZpbmUgICBHTTQ1X0dDX1JFTkRFUl9DTE9DS180MDBfTUhaCSgweGIgPDwgMCkKKyNkZWZpbmUgICBHTTQ1X0dDX1JFTkRFUl9DTE9DS181MzNfTUhaCSgweGMgPDwgMCkKKyNkZWZpbmUgICBJOTY1X0dDX1JFTkRFUl9DTE9DS19NQVNLCSgweGYgPDwgMCkKKyNkZWZpbmUgICBJOTY1X0dDX1JFTkRFUl9DTE9DS18yNjdfTUhaCSgyIDw8IDApCisjZGVmaW5lICAgSTk2NV9HQ19SRU5ERVJfQ0xPQ0tfMzMzX01IWgkoMyA8PCAwKQorI2RlZmluZSAgIEk5NjVfR0NfUkVOREVSX0NMT0NLXzQ0NF9NSFoJKDQgPDwgMCkKKyNkZWZpbmUgICBJOTY1X0dDX1JFTkRFUl9DTE9DS181MzNfTUhaCSg1IDw8IDApCisjZGVmaW5lICAgSTk0NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSwkoNyA8PCAwKQorI2RlZmluZSAgIEk5NDVfR0NfUkVOREVSX0NMT0NLXzE2Nl9NSFoJKDAgPDwgMCkKKyNkZWZpbmUgICBJOTQ1X0dDX1JFTkRFUl9DTE9DS18yMDBfTUhaCSgxIDw8IDApCisjZGVmaW5lICAgSTk0NV9HQ19SRU5ERVJfQ0xPQ0tfMjUwX01IWgkoMyA8PCAwKQorI2RlZmluZSAgIEk5NDVfR0NfUkVOREVSX0NMT0NLXzQwMF9NSFoJKDUgPDwgMCkKKyNkZWZpbmUgICBJOTE1X0dDX1JFTkRFUl9DTE9DS19NQVNLCSg3IDw8IDApCisjZGVmaW5lICAgSTkxNV9HQ19SRU5ERVJfQ0xPQ0tfMTY2X01IWgkoMCA8PCAwKQorI2RlZmluZSAgIEk5MTVfR0NfUkVOREVSX0NMT0NLXzIwMF9NSFoJKDEgPDwgMCkKKyNkZWZpbmUgICBJOTE1X0dDX1JFTkRFUl9DTE9DS18zMzNfTUhaCSg0IDw8IDApCiAjZGVmaW5lIExCQgkweGY0CiAKIC8qIFZHQSBzdHVmZiAqLwpAQCAtNTUzLDkgKzU3MywxMTggQEAKICNkZWZpbmUgICBEUExMQV9URVNUX01fQllQQVNTCQkoMSA8PCAyKQogI2RlZmluZSAgIERQTExBX0lOUFVUX0JVRkZFUl9FTkFCTEUJKDEgPDwgMCkKICNkZWZpbmUgRF9TVEFURQkJMHg2MTA0Ci0jZGVmaW5lIENHXzJEX0RJUwkweDYyMDAKLSNkZWZpbmUgRFBDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJKDEgPDwgMjQpCi0jZGVmaW5lIENHXzNEX0RJUwkweDYyMDQKKyNkZWZpbmUgIERTVEFURV9QTExfRDNfT0ZGCQkJKDE8PDMpCisjZGVmaW5lICBEU1RBVEVfR0ZYX0NMT0NLX0dBVElORwkJKDE8PDEpCisjZGVmaW5lICBEU1RBVEVfRE9UX0NMT0NLX0dBVElORwkJKDE8PDApCisjZGVmaW5lIERTUENMS19HQVRFX0QJCTB4NjIwMAorIyBkZWZpbmUgRFBVTklUX0JfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAzMCkgLyogOTY1ICovCisjIGRlZmluZSBWU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyOSkgLyogOTY1ICovCisjIGRlZmluZSBWUkhVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjgpIC8qIDk2NSAqLworIyBkZWZpbmUgVlJEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI3KSAvKiA5NjUgKi8KKyMgZGVmaW5lIEFVRFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyNikgLyogOTY1ICovCisjIGRlZmluZSBEUFVOSVRfQV9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI1KSAvKiA5NjUgKi8KKyMgZGVmaW5lIERQQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyNCkgLyogOTY1ICovCisjIGRlZmluZSBUVlJVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjMpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIFRWQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMikgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgVFZGVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIxKSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBUVkVVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjApIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIERWU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxOSkgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgRFNTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE4KSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBEREJVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTcpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIERQUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxNikgLyogOTE1LTk0NSAqLworIyBkZWZpbmUgRFBGVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE1KSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBEUEJNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE0KSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBEUExTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDEzKSAvKiA5MTUtOTQ1ICovCisjIGRlZmluZSBEUExVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTIpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIERQT1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMSkKKyMgZGVmaW5lIERQQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMCkKKyMgZGVmaW5lIERDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDkpCisjIGRlZmluZSBEUFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA4KQorIyBkZWZpbmUgVlJVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNykgLyogOTE1KzogcmVzZXJ2ZWQgKi8KKyMgZGVmaW5lIE9WSFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA2KSAvKiA4MzAtODY1ICovCisjIGRlZmluZSBEUElPVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDYpIC8qIDkxNS05NDUgKi8KKyMgZGVmaW5lIE9WRlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA1KQorIyBkZWZpbmUgT1ZCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDQpCisvKioKKyAqIFRoaXMgYml0IG11c3QgYmUgc2V0IG9uIHRoZSA4MzAgdG8gcHJldmVudCBoYW5ncyB3aGVuIHR1cm5pbmcgb2ZmIHRoZQorICogb3ZlcmxheSBzY2FsZXIuCisgKi8KKyMgZGVmaW5lIE9WUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAzKQorIyBkZWZpbmUgT1ZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIpCisjIGRlZmluZSBPVlVVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMSkKKyMgZGVmaW5lIFpWVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDApIC8qIDgzMCAqLworIyBkZWZpbmUgT1ZMVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDApIC8qIDg0NSw4NjUgKi8KKworI2RlZmluZSBSRU5DTEtfR0FURV9EMQkJMHg2MjA0CisjIGRlZmluZSBCTElUVEVSX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTMpIC8qIDk0NUdNIG9ubHkgKi8KKyMgZGVmaW5lIE1QRUdfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMikgLyogOTQ1R00gb25seSAqLworIyBkZWZpbmUgUENfRkVfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxMSkKKyMgZGVmaW5lIFBDX0JFX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTApCisjIGRlZmluZSBXSU5ET1dFUl9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDkpCisjIGRlZmluZSBJTlRFUlBPTEFUT1JfQ0xPQ0tfR0FURV9ESVNBQkxFCSgxIDw8IDgpCisjIGRlZmluZSBDT0xPUl9DQUxDVUxBVE9SX0NMT0NLX0dBVEVfRElTQUJMRQkoMSA8PCA3KQorIyBkZWZpbmUgTU9USU9OX0NPTVBfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA2KQorIyBkZWZpbmUgTUFHX0NMT0NLX0dBVEVfRElTQUJMRQkJCSgxIDw8IDUpCisvKiogVGhpcyBiaXQgbXVzdCBiZSB1bnNldCBvbiA4NTUsODY1ICovCisjIGRlZmluZSBNRUNJX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNCkKKyMgZGVmaW5lIERDTVBfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAzKQorIyBkZWZpbmUgTUVDX0NMT0NLX0dBVEVfRElTQUJMRQkJCSgxIDw8IDIpCisjIGRlZmluZSBNRUNPX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMSkKKy8qKiBUaGlzIGJpdCBtdXN0IGJlIHNldCBvbiA4NTUsODY1LiAqLworIyBkZWZpbmUgU1ZfQ0xPQ0tfR0FURV9ESVNBQkxFCQkJKDEgPDwgMCkKKyMgZGVmaW5lIEk5MTVfTVBFR19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE2KQorIyBkZWZpbmUgSTkxNV9WTERfSVBfUFJfQ0xPQ0tfR0FURV9ESVNBQkxFCSgxIDw8IDE1KQorIyBkZWZpbmUgSTkxNV9NT1RJT05fQ09NUF9DTE9DS19HQVRFX0RJU0FCTEUJKDEgPDwgMTQpCisjIGRlZmluZSBJOTE1X0JEX0JGX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTMpCisjIGRlZmluZSBJOTE1X1NGX1NFX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTIpCisjIGRlZmluZSBJOTE1X1dNX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTEpCisjIGRlZmluZSBJOTE1X0laX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTApCisjIGRlZmluZSBJOTE1X1BJX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgOSkKKyMgZGVmaW5lIEk5MTVfRElfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA4KQorIyBkZWZpbmUgSTkxNV9TSF9TVl9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDcpCisjIGRlZmluZSBJOTE1X1BMX0RHX1FDX0ZUX0NMT0NLX0dBVEVfRElTQUJMRQkoMSA8PCA2KQorIyBkZWZpbmUgSTkxNV9TQ19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDUpCisjIGRlZmluZSBJOTE1X0ZMX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNCkKKyMgZGVmaW5lIEk5MTVfRE1fQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAzKQorIyBkZWZpbmUgSTkxNV9QU19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDIpCisjIGRlZmluZSBJOTE1X0NDX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMSkKKyMgZGVmaW5lIEk5MTVfQllfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAwKQorCisjIGRlZmluZSBJOTY1X1JDWl9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDMwKQorLyoqIFRoaXMgYml0IG11c3QgYWx3YXlzIGJlIHNldCBvbiA5NjVHLzk2NUdNICovCisjIGRlZmluZSBJOTY1X1JDQ19DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI5KQorIyBkZWZpbmUgSTk2NV9SQ1BCX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMjgpCisjIGRlZmluZSBJOTY1X0RBUF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDI3KQorIyBkZWZpbmUgSTk2NV9ST0NfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyNikKKyMgZGVmaW5lIEk5NjVfR1dfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyNSkKKyMgZGVmaW5lIEk5NjVfVERfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyNCkKKy8qKiBUaGlzIGJpdCBtdXN0IGFsd2F5cyBiZSBzZXQgb24gOTY1RyAqLworIyBkZWZpbmUgSTk2NV9JU0NfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMykKKyMgZGVmaW5lIEk5NjVfSUNfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMikKKyMgZGVmaW5lIEk5NjVfRVVfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMSkKKyMgZGVmaW5lIEk5NjVfSUZfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMCkKKyMgZGVmaW5lIEk5NjVfVENfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxOSkKKyMgZGVmaW5lIEk5NjVfU09fQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxNykKKyMgZGVmaW5lIEk5NjVfRkJDX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTYpCisjIGRlZmluZSBJOTY1X01BUklfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAxNSkKKyMgZGVmaW5lIEk5NjVfTUFTRl9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDE0KQorIyBkZWZpbmUgSTk2NV9NQVdCX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTMpCisjIGRlZmluZSBJOTY1X0VNX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTIpCisjIGRlZmluZSBJOTY1X1VDX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMTEpCisjIGRlZmluZSBJOTY1X1NJX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNikKKyMgZGVmaW5lIEk5NjVfTVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA1KQorIyBkZWZpbmUgSTk2NV9QTF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDQpCisjIGRlZmluZSBJOTY1X0RHX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMykKKyMgZGVmaW5lIEk5NjVfUUNfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyKQorIyBkZWZpbmUgSTk2NV9GVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDEpCisjIGRlZmluZSBJOTY1X0RNX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgMCkKKworI2RlZmluZSBSRU5DTEtfR0FURV9EMgkJMHg2MjA4CisjZGVmaW5lIFZGX1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA5KQorI2RlZmluZSBHU19VTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgQ0xfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDYpCisjZGVmaW5lIFJBTUNMS19HQVRFX0QJCTB4NjIxMAkJLyogQ1JMIG9ubHkgKi8KKyNkZWZpbmUgREVVQwkJCTB4NjIxNCAgICAgICAgICAvKiBDUkwgb25seSAqLwogCiAvKgogICogUGFsZXR0ZSByZWdzCkBAIC02ODMsNiArODEyLDcgQEAKICNkZWZpbmUgICBTRFZPQl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI2KQogI2RlZmluZSAgIFNEVk9DX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjUpCiAjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKKyNkZWZpbmUgICBDUlRfRU9TX0lOVF9FTgkJCSgxIDw8IDEwKQogI2RlZmluZSAgIENSVF9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDkpCiAjZGVmaW5lICAgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUCQkoMSA8PCAzKQogI2RlZmluZSBDUlRfSE9UUExVR19BQ1RJVkFUSU9OX1BFUklPRF8zMgkoMCA8PCA4KQpAQCAtNzE3LDYgKzg0Nyw3IEBACiAjZGVmaW5lICAgRFBDX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgMjgpCiAjZGVmaW5lICAgSERNSURfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCAyNykKICNkZWZpbmUgICBEUERfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCAyNykKKyNkZWZpbmUgICBDUlRfRU9TX0lOVF9TVEFUVVMJCQkoMSA8PCAxMikKICNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCAxMSkKICNkZWZpbmUgICBUVl9IT1RQTFVHX0lOVF9TVEFUVVMJCQkoMSA8PCAxMCkKICNkZWZpbmUgICBDUlRfSE9UUExVR19NT05JVE9SX01BU0sJCSgzIDw8IDgpCkBAIC0xNTg2LDYgKzE3MTcsNyBAQAogI2RlZmluZSAgIFBJUEVDT05GX1BST0dSRVNTSVZFCSgwIDw8IDIxKQogI2RlZmluZSAgIFBJUEVDT05GX0lOVEVSTEFDRV9XX0ZJRUxEX0lORElDQVRJT04JKDYgPDwgMjEpCiAjZGVmaW5lICAgUElQRUNPTkZfSU5URVJMQUNFX0ZJRUxEXzBfT05MWQkJKDcgPDwgMjEpCisjZGVmaW5lICAgUElQRUNPTkZfQ1hTUl9ET1dOQ0xPQ0sJKDE8PDE2KQogI2RlZmluZSBQSVBFQVNUQVQJCTB4NzAwMjQKICNkZWZpbmUgICBQSVBFX0ZJRk9fVU5ERVJSVU5fU1RBVFVTCQkoMVVMPDwzMSkKICNkZWZpbmUgICBQSVBFX0NSQ19FUlJPUl9FTkFCTEUJCQkoMVVMPDwyOSkKQEAgLTE3MzMsNiArMTg2NSw3IEBACiAjZGVmaW5lICAgRElTUFBMQU5FX05PX0xJTkVfRE9VQkxFCQkwCiAjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9GSVJTVAkwCiAjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9TRUNPTkQJKDE8PDE4KQorI2RlZmluZSAgIERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRQkoMTw8MTQpIC8qIElHRE5HICovCiAjZGVmaW5lICAgRElTUFBMQU5FX1RJTEVECQkJKDE8PDEwKQogI2RlZmluZSBEU1BBQUREUgkJMHg3MDE4NAogI2RlZmluZSBEU1BBU1RSSURFCQkweDcwMTg4CkBAIC0xOTEzLDYgKzIwNDYsOSBAQAogI2RlZmluZSBHVElJUiAgIDB4NDQwMTgKICNkZWZpbmUgR1RJRVIgICAweDQ0MDFjCiAKKyNkZWZpbmUgRElTUF9BUkJfQ1RMCTB4NDUwMDAKKyNkZWZpbmUgIERJU1BfVElMRV9TVVJGQUNFX1NXSVpaTElORwkoMTw8MTMpCisKIC8qIFBDSCAqLwogCiAvKiBzb3V0aCBkaXNwbGF5IGVuZ2luZSBpbnRlcnJ1cHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggMWQwNGUxOS4uMjBkNGQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVEX1NUQVRFID0gSTkxNV9SRUFEKERfU1RBVEUpOwotCWRldl9wcml2LT5zYXZlQ0dfMkRfRElTID0gSTkxNV9SRUFEKENHXzJEX0RJUyk7CisJZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EID0gSTkxNV9SRUFEKERTUENMS19HQVRFX0QpOwogCiAJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwogCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7CkBAIC01ODgsNyArNTg4LDcgQEAKIAogCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLwogCUk5MTVfV1JJVEUgKERfU1RBVEUsIGRldl9wcml2LT5zYXZlRF9TVEFURSk7Ci0JSTkxNV9XUklURSAoQ0dfMkRfRElTLCBkZXZfcHJpdi0+c2F2ZUNHXzJEX0RJUyk7CisJSTkxNV9XUklURSAoRFNQQ0xLX0dBVEVfRCwgZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EKTsKIAogCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KIAlJOTE1X1dSSVRFIChDQUNIRV9NT0RFXzAsIGRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wIHwgMHhmZmZmMDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKaW5kZXggZjgwNmZjYy4uMWUyOGMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwpAQCAtMzU1LDggKzM1NSwxNCBAQAogCX0KIAogCWRyaXZlciA9IGZpbmRfc2VjdGlvbihiZGIsIEJEQl9EUklWRVJfRkVBVFVSRVMpOwotCWlmIChkcml2ZXIgJiYgZHJpdmVyLT5sdmRzX2NvbmZpZyA9PSBCREJfRFJJVkVSX0ZFQVRVUkVfRURQKQorCWlmICghZHJpdmVyKQorCQlyZXR1cm47CisKKwlpZiAoZHJpdmVyLT5sdmRzX2NvbmZpZyA9PSBCREJfRFJJVkVSX0ZFQVRVUkVfRURQKQogCQlkZXZfcHJpdi0+ZWRwX3N1cHBvcnQgPSAxOworCisJaWYgKGRyaXZlci0+ZHVhbF9mcmVxdWVuY3kpCisJCWRldl9wcml2LT5yZW5kZXJfcmVjbG9ja19hdmFpbCA9IHRydWU7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCA1OTBmODFjLi44ODgxNGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtNjQsNiArNjQsMzQgQEAKIAl9CiAKIAlJOTE1X1dSSVRFKHJlZywgdGVtcCk7CisKKwlpZiAoSVNfSUdEKGRldikpIHsKKwkJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PRkYpIHsKKwkJCS8qIHR1cm4gb2ZmIERBQyAqLworCQkJdGVtcCA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOworCQkJdGVtcCAmPSB+Q1JUX0VPU19JTlRfRU47CisJCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19FTiwgdGVtcCk7CisKKwkJCXRlbXAgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpOworCQkJaWYgKHRlbXAgJiBDUlRfRU9TX0lOVF9TVEFUVVMpCisJCQkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfU1RBVCwKKwkJCQkJQ1JUX0VPU19JTlRfU1RBVFVTKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHR1cm4gb24gREFDLiBFT1MgaW50ZXJydXB0IG11c3QgYmUgZW5hYmxlZCBhZnRlciBEQUMKKwkJCSAqIGlzIGVuYWJsZWQsIHNvIGl0IHNvdW5kcyBub3QgZ29vZCB0byBlbmFibGUgaXQgaW4KKwkJCSAqIGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCgpCisJCQkgKiB3YWl0IDEyLjVtcyBhZnRlciBEQUMgaXMgZW5hYmxlZAorCQkJICovCisJCQltc2xlZXAoMTMpOworCQkJdGVtcCA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfU1RBVCk7CisJCQlpZiAodGVtcCAmIENSVF9FT1NfSU5UX1NUQVRVUykKKwkJCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULAorCQkJCQlDUlRfRU9TX0lOVF9TVEFUVVMpOworCQkJdGVtcCA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOworCQkJdGVtcCB8PSBDUlRfRU9TX0lOVF9FTjsKKwkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX0VOLCB0ZW1wKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIGludCBpbnRlbF9jcnRfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDc0OGVkNTAuLjAyMjdiMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogYm9vbCBpbnRlbF9waXBlX2hhc190eXBlIChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0eXBlKTsKIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV93YXRlcm1hcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgaW50ZWxfaW5jcmVhc2VfcGxsY2xvY2soc3RydWN0IGRybV9jcnRjICpjcnRjLCBib29sIHNjaGVkdWxlKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIGdpdmVuIHZhbHVlcyAqLwpAQCAtNjcsNiArNjgsOCBAQAogICAgIGludGVsX3AyX3QJICAgIHAyOwogICAgIGJvb2wgKCogZmluZF9wbGwpKGNvbnN0IGludGVsX2xpbWl0X3QgKiwgc3RydWN0IGRybV9jcnRjICosCiAJCSAgICAgIGludCwgaW50LCBpbnRlbF9jbG9ja190ICopOworICAgIGJvb2wgKCogZmluZF9yZWR1Y2VkX3BsbCkoY29uc3QgaW50ZWxfbGltaXRfdCAqLCBzdHJ1Y3QgZHJtX2NydGMgKiwKKwkJCSAgICAgIGludCwgaW50LCBpbnRlbF9jbG9ja190ICopOwogfTsKIAogI2RlZmluZSBJOFhYX0RPVF9NSU4JCSAgMjUwMDAKQEAgLTI2MSw2ICsyNjQsOSBAQAogaW50ZWxfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7CiBzdGF0aWMgYm9vbAoraW50ZWxfZmluZF9iZXN0X3JlZHVjZWRfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7CitzdGF0aWMgYm9vbAogaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCWludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spOwogc3RhdGljIGJvb2wKQEAgLTI4Niw2ICsyOTIsNyBAQAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOFhYX1AyX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk4WFhfUDJfU0xPVywJLnAyX2Zhc3QgPSBJOFhYX1AyX0ZBU1QgfSwKIAkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZmluZF9iZXN0X3JlZHVjZWRfUExMLAogfTsKIAogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2k4eHhfbHZkcyA9IHsKQEAgLTMwMCw2ICszMDcsNyBAQAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOFhYX1AyX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk4WFhfUDJfTFZEU19TTE9XLAkucDJfZmFzdCA9IEk4WFhfUDJfTFZEU19GQVNUIH0sCiAJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9yZWR1Y2VkX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9yZWR1Y2VkX1BMTCwKIH07CiAJCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaTl4eF9zZHZvID0gewpAQCAtMzE0LDYgKzMyMiw3IEBACiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk5WFhfUDJfU0RWT19EQUNfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XLAkucDJfZmFzdCA9IEk5WFhfUDJfU0RWT19EQUNfRkFTVCB9LAogCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCisJLmZpbmRfcmVkdWNlZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfcmVkdWNlZF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaTl4eF9sdmRzID0gewpAQCAtMzMxLDYgKzM0MCw3IEBACiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk5WFhfUDJfTFZEU19TTE9XX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX0xWRFNfU0xPVywJLnAyX2Zhc3QgPSBJOVhYX1AyX0xWRFNfRkFTVCB9LAogCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCisJLmZpbmRfcmVkdWNlZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfcmVkdWNlZF9QTEwsCiB9OwogCiAgICAgLyogYmVsb3cgcGFyYW1ldGVyIGFuZCBmdW5jdGlvbiBpcyBmb3IgRzRYIENoaXBzZXQgRmFtaWx5Ki8KQEAgLTM0OCw2ICszNTgsNyBAQAogCQkgLnAyX2Zhc3QgPSBHNFhfUDJfU0RWT19GQVNUCiAJfSwKIAkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9yZWR1Y2VkX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAogfTsKIAogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2c0eF9oZG1pID0gewpAQCAtMzY0LDYgKzM3NSw3IEBACiAJCSAucDJfZmFzdCA9IEc0WF9QMl9IRE1JX0RBQ19GQVNUCiAJfSwKIAkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9yZWR1Y2VkX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAogfTsKIAogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2c0eF9zaW5nbGVfY2hhbm5lbF9sdmRzID0gewpAQCAtMzg4LDYgKzQwMCw3IEBACiAJCSAucDJfZmFzdCA9IEc0WF9QMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX0ZBU1QKIAl9LAogCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfZzR4X2R1YWxfY2hhbm5lbF9sdmRzID0gewpAQCAtNDEyLDYgKzQyNSw3IEBACiAJCSAucDJfZmFzdCA9IEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19GQVNUCiAJfSwKIAkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9yZWR1Y2VkX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAogfTsKIAogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2c0eF9kaXNwbGF5X3BvcnQgPSB7CkBAIC00NDksNiArNDYzLDcgQEAKIAkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9TRFZPX0RBQ19GQVNUIH0sCiAJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9yZWR1Y2VkX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9yZWR1Y2VkX1BMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pZ2RfbHZkcyA9IHsKQEAgLTQ2NCw2ICs0NzksNyBAQAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOVhYX1AyX0xWRFNfU0xPV19MSU1JVCwKIAkJIC5wMl9zbG93ID0gSTlYWF9QMl9MVkRTX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9MVkRTX1NMT1cgfSwKIAkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAorCS5maW5kX3JlZHVjZWRfcGxsID0gaW50ZWxfZmluZF9iZXN0X3JlZHVjZWRfUExMLAogfTsKIAogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2lnZG5nX3Nkdm8gPSB7CkBAIC02ODgsMTUgKzcwNCwxNiBAQAogCiAJbWVtc2V0IChiZXN0X2Nsb2NrLCAwLCBzaXplb2YgKCpiZXN0X2Nsb2NrKSk7CiAKLQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsgY2xvY2subTErKykgewotCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1pbjsgY2xvY2subTIgPD0gbGltaXQtPm0yLm1heDsgY2xvY2subTIrKykgewotCQkJLyogbTEgaXMgYWx3YXlzIDAgaW4gSUdEICovCi0JCQlpZiAoY2xvY2subTIgPj0gY2xvY2subTEgJiYgIUlTX0lHRChkZXYpKQotCQkJCWJyZWFrOwotCQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsKLQkJCSAgICAgY2xvY2subisrKSB7Ci0JCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5taW47Ci0JCQkJICAgICBjbG9jay5wMSA8PSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSsrKSB7CisJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKKwkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5taW47IGNsb2NrLm0xIDw9IGxpbWl0LT5tMS5tYXg7CisJCSAgICAgY2xvY2subTErKykgeworCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5taW47CisJCQkgICAgIGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKKwkJCQkvKiBtMSBpcyBhbHdheXMgMCBpbiBJR0QgKi8KKwkJCQlpZiAoY2xvY2subTIgPj0gY2xvY2subTEgJiYgIUlTX0lHRChkZXYpKQorCQkJCQlicmVhazsKKwkJCQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47CisJCQkJICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7CiAJCQkJCWludCB0aGlzX2VycjsKIAogCQkJCQlpbnRlbF9jbG9jayhkZXYsIHJlZmNsaywgJmNsb2NrKTsKQEAgLTcxNyw2ICs3MzQsNDYgQEAKIAlyZXR1cm4gKGVyciAhPSB0YXJnZXQpOwogfQogCisKK3N0YXRpYyBib29sCitpbnRlbF9maW5kX2Jlc3RfcmVkdWNlZF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQorCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlpbnRlbF9jbG9ja190IGNsb2NrOworCWludCBlcnIgPSB0YXJnZXQ7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJbWVtY3B5KCZjbG9jaywgYmVzdF9jbG9jaywgc2l6ZW9mKGludGVsX2Nsb2NrX3QpKTsKKworCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OyBjbG9jay5tMSsrKSB7CisJCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOyBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7CisJCQkvKiBtMSBpcyBhbHdheXMgMCBpbiBJR0QgKi8KKwkJCWlmIChjbG9jay5tMiA+PSBjbG9jay5tMSAmJiAhSVNfSUdEKGRldikpCisJCQkJYnJlYWs7CisJCQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OworCQkJICAgICBjbG9jay5uKyspIHsKKwkJCQlpbnQgdGhpc19lcnI7CisKKwkJCQlpbnRlbF9jbG9jayhkZXYsIHJlZmNsaywgJmNsb2NrKTsKKworCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGNydGMsICZjbG9jaykpCisJCQkJCWNvbnRpbnVlOworCisJCQkJdGhpc19lcnIgPSBhYnMoY2xvY2suZG90IC0gdGFyZ2V0KTsKKwkJCQlpZiAodGhpc19lcnIgPCBlcnIpIHsKKwkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKKwkJCQkJZXJyID0gdGhpc19lcnI7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKIHN0YXRpYyBib29sCiBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jaykKQEAgLTc0Nyw3ICs4MDQsNyBAQAogCW1heF9uID0gbGltaXQtPm4ubWF4OwogCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVyaW1lbnQgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KIAlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbWF4X247IGNsb2NrLm4rKykgewotCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yLCBwMSAqLworCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yICovCiAJCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWF4OwogCQkgICAgIGNsb2NrLm0xID49IGxpbWl0LT5tMS5taW47IGNsb2NrLm0xLS0pIHsKIAkJCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWF4OwpAQCAtODMyLDE1ICs4ODksMTQgQEAKIAogCW1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKIAltYXhfbiA9IGxpbWl0LT5uLm1heDsKLQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1cmltZW50IHByZWZlciBzbWFsbGVyIG4gdG8gcHJlY2lzaW9uICovCi0JZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKLQkJLyogYmFzZWQgb24gaGFyZHdhcmUgcmVxdWlybWVudCBwcmVmZXJlIGxhcmdlciBtMSxtMiwgcDEgKi8KLQkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5tYXg7Ci0JCSAgICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgewotCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5tYXg7Ci0JCQkgICAgIGNsb2NrLm0yID49IGxpbWl0LT5tMi5taW47IGNsb2NrLm0yLS0pIHsKLQkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsKLQkJCQkgICAgIGNsb2NrLnAxID49IGxpbWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKKwlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsgY2xvY2sucDEgPj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgeworCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1cmltZW50IHByZWZlciBzbWFsbGVyIG4gdG8gcHJlY2lzaW9uICovCisJCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7CisJCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yICovCisJCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKKwkJCSAgICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgeworCQkJCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWF4OworCQkJCSAgICAgY2xvY2subTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkgewogCQkJCQlpbnQgdGhpc19lcnI7CiAKIAkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7CkBAIC0xMDA4LDYgKzEwNjQsMTAgQEAKIAkJCWRzcGNudHIgJj0gfkRJU1BQTEFORV9USUxFRDsKIAl9CiAKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJLyogbXVzdCBkaXNhYmxlICovCisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFOworCiAJSTkxNV9XUklURShkc3BjbnRyX3JlZywgZHNwY250cik7CiAKIAlTdGFydCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwpAQCAtMTAzMCw4ICsxMDkwLDExIEBACiAKIAlpZiAob2xkX2ZiKSB7CiAJCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIob2xkX2ZiKTsKKwkJb2JqX3ByaXYgPSBpbnRlbF9mYi0+b2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGludGVsX2ZiLT5vYmopOwogCX0KKwlpbnRlbF9pbmNyZWFzZV9wbGxjbG9jayhjcnRjLCB0cnVlKTsKKwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaWYgKCFkZXYtPnByaW1hcnktPm1hc3RlcikKQEAgLTE1ODEsNiArMTY0NCw4IEBACiAJZWxzZQogCQlpOXh4X2NydGNfZHBtcyhjcnRjLCBtb2RlKTsKIAorCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IG1vZGU7CisKIAlpZiAoIWRldi0+cHJpbWFyeS0+bWFzdGVyKQogCQlyZXR1cm47CiAKQEAgLTE2MDMsOCArMTY2OCw2IEBACiAJCURSTV9FUlJPUigiQ2FuJ3QgdXBkYXRlIHBpcGUgJWQgaW4gU0FSRUFcbiIsIHBpcGUpOwogCQlicmVhazsKIAl9Ci0KLQlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSBtb2RlOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3ByZXBhcmUgKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKQEAgLTIwNTQsNiArMjExNywxOCBAQAogCXJldHVybiBzaXplOwogfQogCitzdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZndfYmxjX3NlbGYgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEYpOworCisJaWYgKGk5MTVfcG93ZXJzYXZlKQorCQlmd19ibGNfc2VsZiB8PSBGV19CTENfU0VMRl9FTjsKKwllbHNlCisJCWZ3X2JsY19zZWxmICY9IH5GV19CTENfU0VMRl9FTjsKKwlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBmd19ibGNfc2VsZik7Cit9CisKIHN0YXRpYyB2b2lkIGk5NjVfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTIxMDUsNyArMjE4MCw4IEBACiAJY3dtID0gMjsKIAogCS8qIENhbGMgc3IgZW50cmllcyBmb3Igb25lIHBsYW5lIGNvbmZpZ3MgKi8KLQlpZiAoc3JfaGRpc3BsYXkgJiYgKCFwbGFuZWFfY2xvY2sgfHwgIXBsYW5lYl9jbG9jaykpIHsKKwlpZiAoSEFTX0ZXX0JMQyhkZXYpICYmIHNyX2hkaXNwbGF5ICYmCisJICAgICghcGxhbmVhX2Nsb2NrIHx8ICFwbGFuZWJfY2xvY2spKSB7CiAJCS8qIHNlbGYtcmVmcmVzaCBoYXMgbXVjaCBoaWdoZXIgbGF0ZW5jeSAqLwogCQljb25zdCBzdGF0aWMgaW50IHNyX2xhdGVuY3lfbnMgPSA2MDAwOwogCkBAIC0yMTIwLDggKzIxOTYsNyBAQAogCQlzcndtID0gdG90YWxfc2l6ZSAtIHNyX2VudHJpZXM7CiAJCWlmIChzcndtIDwgMCkKIAkJCXNyd20gPSAxOwotCQlpZiAoSVNfSTlYWChkZXYpKQotCQkJSTkxNV9XUklURShGV19CTENfU0VMRiwgKHNyd20gJiAweDNmKSk7CisJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOIHwgKHNyd20gJiAweDNmKSk7CiAJfQogCiAJRFJNX0RFQlVHKCJTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZCwgQzogJWQsIFNSICVkXG4iLApAQCAtMjE5NSw5ICsyMjcwLDYgQEAKIAl1bnNpZ25lZCBsb25nIHBsYW5lYV9jbG9jayA9IDAsIHBsYW5lYl9jbG9jayA9IDAsIHNyX2Nsb2NrID0gMDsKIAlpbnQgZW5hYmxlZCA9IDAsIHBpeGVsX3NpemUgPSAwOwogCi0JaWYgKERTUEFSQl9IV0NPTlRST0woZGV2KSkKLQkJcmV0dXJuOwotCiAJLyogR2V0IHRoZSBjbG9jayBjb25maWcgZnJvbSBib3RoIHBsYW5lcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAJCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwpAQCAtMjIzMCw3ICsyMzAyLDkgQEAKIAllbHNlIGlmIChJU19JR0QoZGV2KSkKIAkJaWdkX2Rpc2FibGVfY3hzcihkZXYpOwogCi0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0c0WChkZXYpKQorCQlnNHhfdXBkYXRlX3dtKGRldik7CisJZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkKIAkJaTk2NV91cGRhdGVfd20oZGV2KTsKIAllbHNlIGlmIChJU19JOVhYKGRldikgfHwgSVNfTU9CSUxFKGRldikpCiAJCWk5eHhfdXBkYXRlX3dtKGRldiwgcGxhbmVhX2Nsb2NrLCBwbGFuZWJfY2xvY2ssIHNyX2hkaXNwbGF5LApAQCAtMjI2NCw5ICsyMzM4LDkgQEAKIAlpbnQgZHNwcG9zX3JlZyA9IChwaXBlID09IDApID8gRFNQQVBPUyA6IERTUEJQT1M7CiAJaW50IHBpcGVzcmNfcmVnID0gKHBpcGUgPT0gMCkgPyBQSVBFQVNSQyA6IFBJUEVCU1JDOwogCWludCByZWZjbGssIG51bV9vdXRwdXRzID0gMDsKLQlpbnRlbF9jbG9ja190IGNsb2NrOwotCXUzMiBkcGxsID0gMCwgZnAgPSAwLCBkc3BjbnRyLCBwaXBlY29uZjsKLQlib29sIG9rLCBpc19zZHZvID0gZmFsc2UsIGlzX2R2byA9IGZhbHNlOworCWludGVsX2Nsb2NrX3QgY2xvY2ssIHJlZHVjZWRfY2xvY2s7CisJdTMyIGRwbGwgPSAwLCBmcCA9IDAsIGZwMiA9IDAsIGRzcGNudHIsIHBpcGVjb25mOworCWJvb2wgb2ssIGhhc19yZWR1Y2VkX2Nsb2NrID0gZmFsc2UsIGlzX3Nkdm8gPSBmYWxzZSwgaXNfZHZvID0gZmFsc2U7CiAJYm9vbCBpc19jcnQgPSBmYWxzZSwgaXNfbHZkcyA9IGZhbHNlLCBpc190diA9IGZhbHNlLCBpc19kcCA9IGZhbHNlOwogCWJvb2wgaXNfZWRwID0gZmFsc2U7CiAJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9kZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKQEAgLTIzNDksNiArMjQyMywxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAobGltaXQtPmZpbmRfcmVkdWNlZF9wbGwgJiYgZGV2X3ByaXYtPmx2ZHNfZG93bmNsb2NrX2F2YWlsKSB7CisJCW1lbWNweSgmcmVkdWNlZF9jbG9jaywgJmNsb2NrLCBzaXplb2YoaW50ZWxfY2xvY2tfdCkpOworCQloYXNfcmVkdWNlZF9jbG9jayA9IGxpbWl0LT5maW5kX3JlZHVjZWRfcGxsKGxpbWl0LCBjcnRjLAorCQkJCQkJCSAgICAoYWRqdXN0ZWRfbW9kZS0+Y2xvY2sqMy80KSwKKwkJCQkJCQkgICAgcmVmY2xrLAorCQkJCQkJCSAgICAmcmVkdWNlZF9jbG9jayk7CisJfQorCiAJLyogU0RWTyBUViBoYXMgZml4ZWQgUExMIHZhbHVlcyBkZXBlbmQgb24gaXRzIGNsb2NrIHJhbmdlLAogCSAgIHRoaXMgbWlycm9ycyB2YmlvcyBzZXR0aW5nLiAqLwogCWlmIChpc19zZHZvICYmIGlzX3R2KSB7CkBAIC0yMzk0LDEwICsyNDc2LDE3IEBACiAJCQkJICBsaW5rX2J3LCAmbV9uKTsKIAl9CiAKLQlpZiAoSVNfSUdEKGRldikpCisJaWYgKElTX0lHRChkZXYpKSB7CiAJCWZwID0gKDEgPDwgY2xvY2subikgPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7Ci0JZWxzZQorCQlpZiAoaGFzX3JlZHVjZWRfY2xvY2spCisJCQlmcDIgPSAoMSA8PCByZWR1Y2VkX2Nsb2NrLm4pIDw8IDE2IHwKKwkJCQlyZWR1Y2VkX2Nsb2NrLm0xIDw8IDggfCByZWR1Y2VkX2Nsb2NrLm0yOworCX0gZWxzZSB7CiAJCWZwID0gY2xvY2subiA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKKwkJaWYgKGhhc19yZWR1Y2VkX2Nsb2NrKQorCQkJZnAyID0gcmVkdWNlZF9jbG9jay5uIDw8IDE2IHwgcmVkdWNlZF9jbG9jay5tMSA8PCA4IHwKKwkJCQlyZWR1Y2VkX2Nsb2NrLm0yOworCX0KIAogCWlmICghSVNfSUdETkcoZGV2KSkKIAkJZHBsbCA9IERQTExfVkdBX01PREVfRElTOwpAQCAtMjQyNiw2ICsyNTE1LDggQEAKIAkJCS8qIGFsc28gRlBBMSAqLwogCQkJaWYgKElTX0lHRE5HKGRldikpCiAJCQkJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEExX1AxX1BPU1RfRElWX1NISUZUOworCQkJaWYgKElTX0c0WChkZXYpICYmIGhhc19yZWR1Y2VkX2Nsb2NrKQorCQkJCWRwbGwgfD0gKDEgPDwgKHJlZHVjZWRfY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEExX1AxX1BPU1RfRElWX1NISUZUOwogCQl9CiAJCXN3aXRjaCAoY2xvY2sucDIpIHsKIAkJY2FzZSA1OgpAQCAtMjU3Myw2ICsyNjY0LDIyIEBACiAJCXVkZWxheSgxNTApOwogCX0KIAorCWlmIChpc19sdmRzICYmIGhhc19yZWR1Y2VkX2Nsb2NrICYmIGk5MTVfcG93ZXJzYXZlKSB7CisJCUk5MTVfV1JJVEUoZnBfcmVnICsgNCwgZnAyKTsKKwkJaW50ZWxfY3J0Yy0+bG93ZnJlcV9hdmFpbCA9IHRydWU7CisJCWlmIChIQVNfUElQRV9DWFNSKGRldikpIHsKKwkJCURSTV9ERUJVRygiZW5hYmxpbmcgQ3hTUiBkb3duY2xvY2tpbmdcbiIpOworCQkJcGlwZWNvbmYgfD0gUElQRUNPTkZfQ1hTUl9ET1dOQ0xPQ0s7CisJCX0KKwl9IGVsc2UgeworCQlJOTE1X1dSSVRFKGZwX3JlZyArIDQsIGZwKTsKKwkJaW50ZWxfY3J0Yy0+bG93ZnJlcV9hdmFpbCA9IGZhbHNlOworCQlpZiAoSEFTX1BJUEVfQ1hTUihkZXYpKSB7CisJCQlEUk1fREVCVUcoImRpc2FibGluZyBDeFNSIGRvd25jbG9ja2luZ1xuIik7CisJCQlwaXBlY29uZiAmPSB+UElQRUNPTkZfQ1hTUl9ET1dOQ0xPQ0s7CisJCX0KKwl9CisKIAlJOTE1X1dSSVRFKGh0b3RfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwKIAkJICAgKChhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbCAtIDEpIDw8IDE2KSk7CiAJSTkxNV9XUklURShoYmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQgLSAxKSB8CkBAIC0yNjE2LDYgKzI3MjMsMTIgQEAKIAogCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYpOwogCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJLyogZW5hYmxlIGFkZHJlc3Mgc3dpenpsZSBmb3IgdGlsaW5nIGJ1ZmZlciAqLworCQl0ZW1wID0gSTkxNV9SRUFEKERJU1BfQVJCX0NUTCk7CisJCUk5MTVfV1JJVEUoRElTUF9BUkJfQ1RMLCB0ZW1wIHwgRElTUF9USUxFX1NVUkZBQ0VfU1dJWlpMSU5HKTsKKwl9CisKIAlJOTE1X1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyKTsKIAogCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCkBAIC0yNzY5LDEwICsyODgyLDE2IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiOwogCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKIAl1aW50MzJfdCB0ZW1wID0gMDsKIAl1aW50MzJfdCBhZGRlcjsKIAorCWlmIChjcnRjLT5mYikgeworCQlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKKwkJaW50ZWxfbWFya19idXN5KGRldiwgaW50ZWxfZmItPm9iaik7CisJfQorCiAJaWYgKHggPCAwKSB7CiAJCXRlbXAgfD0gQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9YX1NISUZUOwogCQl4ID0gLXg7CkBAIC0zMDcwLDEyICszMTg5LDMxOSBAQAogCXJldHVybiBtb2RlOwogfQogCisjZGVmaW5lIEdQVV9JRExFX1RJTUVPVVQgNTAwIC8qIG1zICovCisKKy8qIFdoZW4gdGhpcyB0aW1lciBmaXJlcywgd2UndmUgYmVlbiBpZGxlIGZvciBhd2hpbGUgKi8KK3N0YXRpYyB2b2lkIGludGVsX2dwdV9pZGxlX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilhcmc7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUcoImlkbGUgdGltZXIgZmlyZWQsIGRvd25jbG9ja2luZ1xuIik7CisKKwlkZXZfcHJpdi0+YnVzeSA9IGZhbHNlOworCisJcXVldWVfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+aWRsZV93b3JrKTsKK30KKwordm9pZCBpbnRlbF9pbmNyZWFzZV9yZW5kZXJjbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHNjaGVkdWxlKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKElTX0lHRE5HKGRldikpCisJCXJldHVybjsKKworCWlmICghZGV2X3ByaXYtPnJlbmRlcl9yZWNsb2NrX2F2YWlsKSB7CisJCURSTV9ERUJVRygibm90IHJlY2xvY2tpbmcgcmVuZGVyIGNsb2NrXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFJlc3RvcmUgcmVuZGVyIGNsb2NrIGZyZXF1ZW5jeSB0byBvcmlnaW5hbCB2YWx1ZSAqLworCWlmIChJU19HNFgoZGV2KSB8fCBJU19JOVhYKGRldikpCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCBkZXZfcHJpdi0+b3JpZ19jbG9jayk7CisJZWxzZSBpZiAoSVNfSTg1WChkZXYpKQorCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBIUExMQ0MsIGRldl9wcml2LT5vcmlnX2Nsb2NrKTsKKwlEUk1fREVCVUcoImluY3JlYXNpbmcgcmVuZGVyIGNsb2NrIGZyZXF1ZW5jeVxuIik7CisKKwkvKiBTY2hlZHVsZSBkb3duY2xvY2sgKi8KKwlpZiAoc2NoZWR1bGUpCisJCW1vZF90aW1lcigmZGV2X3ByaXYtPmlkbGVfdGltZXIsIGppZmZpZXMgKworCQkJICBtc2Vjc190b19qaWZmaWVzKEdQVV9JRExFX1RJTUVPVVQpKTsKK30KKwordm9pZCBpbnRlbF9kZWNyZWFzZV9yZW5kZXJjbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKElTX0lHRE5HKGRldikpCisJCXJldHVybjsKKworCWlmICghZGV2X3ByaXYtPnJlbmRlcl9yZWNsb2NrX2F2YWlsKSB7CisJCURSTV9ERUJVRygibm90IHJlY2xvY2tpbmcgcmVuZGVyIGNsb2NrXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChJU19HNFgoZGV2KSkgeworCQl1MTYgZ2NmZ2M7CisKKwkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOworCisJCS8qIERvd24gdG8gbWluaW11bS4uLiAqLworCQlnY2ZnYyAmPSB+R000NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKKwkJZ2NmZ2MgfD0gR000NV9HQ19SRU5ERVJfQ0xPQ0tfMjY2X01IWjsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOworCX0gZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkgeworCQl1MTYgZ2NmZ2M7CisKKwkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOworCisJCS8qIERvd24gdG8gbWluaW11bS4uLiAqLworCQlnY2ZnYyAmPSB+STk2NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKKwkJZ2NmZ2MgfD0gSTk2NV9HQ19SRU5ERVJfQ0xPQ0tfMjY3X01IWjsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOworCX0gZWxzZSBpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkgeworCQl1MTYgZ2NmZ2M7CisKKwkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOworCisJCS8qIERvd24gdG8gbWluaW11bS4uLiAqLworCQlnY2ZnYyAmPSB+STk0NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKKwkJZ2NmZ2MgfD0gSTk0NV9HQ19SRU5ERVJfQ0xPQ0tfMTY2X01IWjsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOworCX0gZWxzZSBpZiAoSVNfSTkxNUcoZGV2KSkgeworCQl1MTYgZ2NmZ2M7CisKKwkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOworCisJCS8qIERvd24gdG8gbWluaW11bS4uLiAqLworCQlnY2ZnYyAmPSB+STkxNV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKKwkJZ2NmZ2MgfD0gSTkxNV9HQ19SRU5ERVJfQ0xPQ0tfMTY2X01IWjsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOworCX0gZWxzZSBpZiAoSVNfSTg1WChkZXYpKSB7CisJCXUxNiBocGxsY2M7CisKKwkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgJmhwbGxjYyk7CisKKwkJLyogVXAgdG8gbWF4aW11bS4uLiAqLworCQlocGxsY2MgJj0gfkdDX0NMT0NLX0NPTlRST0xfTUFTSzsKKwkJaHBsbGNjIHw9IEdDX0NMT0NLXzEzM18yMDA7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgSFBMTENDLCBocGxsY2MpOworCX0KKwlEUk1fREVCVUcoImRlY3JlYXNpbmcgcmVuZGVyIGNsb2NrIGZyZXF1ZW5jeVxuIik7Cit9CisKKy8qIE5vdGUgdGhhdCBubyBpbmNyZWFzZSBmdW5jdGlvbiBpcyBuZWVkZWQgZm9yIHRoaXMgLSBpbmNyZWFzZV9yZW5kZXJjbG9jaygpCisgKiAgd2lsbCBhbHNvIHJld3JpdGUgdGhlc2UgYml0cworICovCit2b2lkIGludGVsX2RlY3JlYXNlX2Rpc3BsYXljbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWlmIChJU19JR0RORyhkZXYpKQorCQlyZXR1cm47CisKKwlpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSB8fCBJU19JOTE1RyhkZXYpIHx8CisJICAgIElTX0k5MTVHTShkZXYpKSB7CisJCXUxNiBnY2ZnYzsKKworCQkvKiBBZGp1c3QgcmVuZGVyIGNsb2NrLi4uICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZnY2ZnYyk7CisKKwkJLyogRG93biB0byBtaW5pbXVtLi4uICovCisJCWdjZmdjICY9IH4weGYwOworCQlnY2ZnYyB8PSAweDgwOworCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCBnY2ZnYyk7CisJfQorfQorCisjZGVmaW5lIENSVENfSURMRV9USU1FT1VUIDEwMDAgLyogbXMgKi8KKworc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19pZGxlX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gKHN0cnVjdCBpbnRlbF9jcnRjICopYXJnOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZpbnRlbF9jcnRjLT5iYXNlOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOworCisJRFJNX0RFQlVHKCJpZGxlIHRpbWVyIGZpcmVkLCBkb3duY2xvY2tpbmdcbiIpOworCisJaW50ZWxfY3J0Yy0+YnVzeSA9IGZhbHNlOworCisJcXVldWVfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+aWRsZV93b3JrKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfaW5jcmVhc2VfcGxsY2xvY2soc3RydWN0IGRybV9jcnRjICpjcnRjLCBib29sIHNjaGVkdWxlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKKwlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IERQTExfQSA6IERQTExfQjsKKwlpbnQgZHBsbCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKCFkZXZfcHJpdi0+bHZkc19kb3duY2xvY2tfYXZhaWwpCisJCXJldHVybjsKKworCWlmICghSEFTX1BJUEVfQ1hTUihkZXYpICYmIChkcGxsICYgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExKSkgeworCQlEUk1fREVCVUcoInVwY2xvY2tpbmcgTFZEU1xuIik7CisKKwkJLyogVW5sb2NrIHBhbmVsIHJlZ3MgKi8KKwkJSTkxNV9XUklURShQUF9DT05UUk9MLCBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfCAoMHhhYmNkIDw8IDE2KSk7CisKKwkJZHBsbCAmPSB+RElTUExBWV9SQVRFX1NFTEVDVF9GUEExOworCQlJOTE1X1dSSVRFKGRwbGxfcmVnLCBkcGxsKTsKKwkJZHBsbCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CisJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYpOworCQlkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKKwkJaWYgKGRwbGwgJiBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEpCisJCQlEUk1fREVCVUcoImZhaWxlZCB0byB1cGNsb2NrIExWRFMhXG4iKTsKKworCQkvKiAuLi5hbmQgbG9jayB0aGVtIGFnYWluICovCisJCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgSTkxNV9SRUFEKFBQX0NPTlRST0wpICYgMHgzKTsKKwl9CisKKwkvKiBTY2hlZHVsZSBkb3duY2xvY2sgKi8KKwlpZiAoc2NoZWR1bGUpCisJCW1vZF90aW1lcigmaW50ZWxfY3J0Yy0+aWRsZV90aW1lciwgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQ1JUQ19JRExFX1RJTUVPVVQpKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZGVjcmVhc2VfcGxsY2xvY2soc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKKwlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IERQTExfQSA6IERQTExfQjsKKwlpbnQgZHBsbCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKCFkZXZfcHJpdi0+bHZkc19kb3duY2xvY2tfYXZhaWwpCisJCXJldHVybjsKKworCS8qCisJICogU2luY2UgdGhpcyBpcyBjYWxsZWQgYnkgYSB0aW1lciwgd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGluCisJICogdGhlIG1hbnVhbCBjYXNlLgorCSAqLworCWlmICghSEFTX1BJUEVfQ1hTUihkZXYpICYmIGludGVsX2NydGMtPmxvd2ZyZXFfYXZhaWwpIHsKKwkJRFJNX0RFQlVHKCJkb3duY2xvY2tpbmcgTFZEU1xuIik7CisKKwkJLyogVW5sb2NrIHBhbmVsIHJlZ3MgKi8KKwkJSTkxNV9XUklURShQUF9DT05UUk9MLCBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfCAoMHhhYmNkIDw8IDE2KSk7CisKKwkJZHBsbCB8PSBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTE7CisJCUk5MTVfV1JJVEUoZHBsbF9yZWcsIGRwbGwpOworCQlkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisJCWRwbGwgPSBJOTE1X1JFQUQoZHBsbF9yZWcpOworCQlpZiAoIShkcGxsICYgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExKSkKKwkJCURSTV9ERUJVRygiZmFpbGVkIHRvIGRvd25jbG9jayBMVkRTIVxuIik7CisKKwkJLyogLi4uYW5kIGxvY2sgdGhlbSBhZ2FpbiAqLworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIEk5MTVfUkVBRChQUF9DT05UUk9MKSAmIDB4Myk7CisJfQorCit9CisKKy8qKgorICogaW50ZWxfaWRsZV91cGRhdGUgLSBhZGp1c3QgY2xvY2tzIGZvciBpZGxlbmVzcworICogQHdvcms6IHdvcmsgc3RydWN0CisgKgorICogRWl0aGVyIHRoZSBHUFUgb3IgZGlzcGxheSAob3IgYm90aCkgd2VudCBpZGxlLiAgQ2hlY2sgdGhlIGJ1c3kgc3RhdHVzCisgKiBoZXJlIGFuZCBhZGp1c3QgdGhlIENSVEMgYW5kIEdQVSBjbG9ja3MgYXMgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgdm9pZCBpbnRlbF9pZGxlX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBkcm1faTkxNV9wcml2YXRlX3QsCisJCQkJCQkgICAgaWRsZV93b3JrKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CisKKwlpZiAoIWk5MTVfcG93ZXJzYXZlKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwkvKiBHUFUgaXNuJ3QgcHJvY2Vzc2luZywgZG93bmNsb2NrIGl0LiAqLworCWlmICghZGV2X3ByaXYtPmJ1c3kpIHsKKwkJaW50ZWxfZGVjcmVhc2VfcmVuZGVyY2xvY2soZGV2KTsKKwkJaW50ZWxfZGVjcmVhc2VfZGlzcGxheWNsb2NrKGRldik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJLyogU2tpcCBpbmFjdGl2ZSBDUlRDcyAqLworCQlpZiAoIWNydGMtPmZiKQorCQkJY29udGludWU7CisKKwkJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJCWlmICghaW50ZWxfY3J0Yy0+YnVzeSkKKwkJCWludGVsX2RlY3JlYXNlX3BsbGNsb2NrKGNydGMpOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworfQorCisvKioKKyAqIGludGVsX21hcmtfYnVzeSAtIG1hcmsgdGhlIEdQVSBhbmQgcG9zc2libHkgdGhlIGRpc3BsYXkgYnVzeQorICogQGRldjogZHJtIGRldmljZQorICogQG9iajogb2JqZWN0IHdlJ3JlIG9wZXJhdGluZyBvbgorICoKKyAqIENhbGxlcnMgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIEdQVSBpcyBidXN5IHByb2Nlc3NpbmcKKyAqIGNvbW1hbmRzLiAgSWYgQG9iaiBtYXRjaGVzIG9uZSBvZiB0aGUgQ1JUQyBvYmplY3RzIChpLmUuIGl0J3MgYSBzY2Fub3V0CisgKiBidWZmZXIpLCB3ZSdsbCBhbHNvIG1hcmsgdGhlIGRpc3BsYXkgYXMgYnVzeSwgc28gd2Uga25vdyB0byBpbmNyZWFzZSBpdHMKKyAqIGNsb2NrIGZyZXF1ZW5jeS4KKyAqLwordm9pZCBpbnRlbF9tYXJrX2J1c3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gTlVMTDsKKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOworCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlyZXR1cm47CisKKwlkZXZfcHJpdi0+YnVzeSA9IHRydWU7CisJaW50ZWxfaW5jcmVhc2VfcmVuZGVyY2xvY2soZGV2LCB0cnVlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWlmICghY3J0Yy0+ZmIpCisJCQljb250aW51ZTsKKworCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwkJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CisJCWlmIChpbnRlbF9mYi0+b2JqID09IG9iaikgeworCQkJaWYgKCFpbnRlbF9jcnRjLT5idXN5KSB7CisJCQkJLyogTm9uLWJ1c3kgLT4gYnVzeSwgdXBjbG9jayAqLworCQkJCWludGVsX2luY3JlYXNlX3BsbGNsb2NrKGNydGMsIHRydWUpOworCQkJCWludGVsX2NydGMtPmJ1c3kgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQkvKiBCdXN5IC0+IGJ1c3ksIHB1dCBvZmYgdGltZXIgKi8KKwkJCQltb2RfdGltZXIoJmludGVsX2NydGMtPmlkbGVfdGltZXIsIGppZmZpZXMgKworCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQ1JUQ19JRExFX1RJTUVPVVQpKTsKKwkJCX0KKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAKLQlpZiAoaW50ZWxfY3J0Yy0+bW9kZV9zZXQubW9kZSkKLQkJZHJtX21vZGVfZGVzdHJveShjcnRjLT5kZXYsIGludGVsX2NydGMtPm1vZGVfc2V0Lm1vZGUpOwogCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7CiAJa2ZyZWUoaW50ZWxfY3J0Yyk7CiB9CkBAIC0zMTIyLDE1ICszNTQ4LDEwIEBACiAJaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CiAJZHJtX2NydGNfaGVscGVyX2FkZCgmaW50ZWxfY3J0Yy0+YmFzZSwgJmludGVsX2hlbHBlcl9mdW5jcyk7CiAKLQlpbnRlbF9jcnRjLT5tb2RlX3NldC5jcnRjID0gJmludGVsX2NydGMtPmJhc2U7Ci0JaW50ZWxfY3J0Yy0+bW9kZV9zZXQuY29ubmVjdG9ycyA9IChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKikoaW50ZWxfY3J0YyArIDEpOwotCWludGVsX2NydGMtPm1vZGVfc2V0Lm51bV9jb25uZWN0b3JzID0gMDsKKwlpbnRlbF9jcnRjLT5idXN5ID0gZmFsc2U7CiAKLQlpZiAoaTkxNV9mYnBlcmNydGMpIHsKLQotCi0KLQl9CisJc2V0dXBfdGltZXIoJmludGVsX2NydGMtPmlkbGVfdGltZXIsIGludGVsX2NydGNfaWRsZV90aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKWludGVsX2NydGMpOwogfQogCiBpbnQgaW50ZWxfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0zMTM4LDMwICszNTU5LDI2IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2dldF9waXBlX2Zyb21fY3J0Y19pZCAqcGlwZV9mcm9tX2NydGNfaWQgPSBkYXRhOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IE5VTEw7Ci0JaW50IHBpcGUgPSAtMTsKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpkcm1tb2RlX29iajsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKIAogCWlmICghZGV2X3ByaXYpIHsKIAkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGlwZV9mcm9tX2NydGNfaWQtPmNydGNfaWQpIHsKLQkJCXBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJZHJtbW9kZV9vYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIHBpcGVfZnJvbV9jcnRjX2lkLT5jcnRjX2lkLAorCQkJRFJNX01PREVfT0JKRUNUX0NSVEMpOwogCi0JaWYgKHBpcGUgPT0gLTEpIHsKKwlpZiAoIWRybW1vZGVfb2JqKSB7CiAJCURSTV9FUlJPUigibm8gc3VjaCBDUlRDIGlkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcGlwZV9mcm9tX2NydGNfaWQtPnBpcGUgPSBwaXBlOworCWNydGMgPSB0b19pbnRlbF9jcnRjKG9ial90b19jcnRjKGRybW1vZGVfb2JqKSk7CisJcGlwZV9mcm9tX2NydGNfaWQtPnBpcGUgPSBjcnRjLT5waXBlOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBkcm1fY3J0YyAqaW50ZWxfZ2V0X2NydGNfZnJvbV9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQpAQCAtMzM2Miw4ICszNzc5LDU2IEBACiAJLmZiX2NoYW5nZWQgPSBpbnRlbGZiX3Byb2JlLAogfTsKIAordm9pZCBpbnRlbF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKgorCSAqIERpc2FibGUgY2xvY2sgZ2F0aW5nIHJlcG9ydGVkIHRvIHdvcmsgaW5jb3JyZWN0bHkgYWNjb3JkaW5nIHRvIHRoZQorCSAqIHNwZWNzLCBidXQgZW5hYmxlIGFzIG11Y2ggZWxzZSBhcyB3ZSBjYW4uCisJICovCisJaWYgKElTX0c0WChkZXYpKSB7CisJCXVpbnQzMl90IGRzcGNsa19nYXRlOworCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QxLCAwKTsKKwkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMiwgVkZfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICAgICAgR1NfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICAgICAgQ0xfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCQlJOTE1X1dSSVRFKFJBTUNMS19HQVRFX0QsIDApOworCQlkc3BjbGtfZ2F0ZSA9IFZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJCU9WUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJCU9WQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFOworCQlpZiAoSVNfR000NShkZXYpKQorCQkJZHNwY2xrX2dhdGUgfD0gRFNTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CisJCUk5MTVfV1JJVEUoRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dhdGUpOworCX0gZWxzZSBpZiAoSVNfSTk2NUdNKGRldikpIHsKKwkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMSwgSTk2NV9SQ0NfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMiwgMCk7CisJCUk5MTVfV1JJVEUoRFNQQ0xLX0dBVEVfRCwgMCk7CisJCUk5MTVfV1JJVEUoUkFNQ0xLX0dBVEVfRCwgMCk7CisJCUk5MTVfV1JJVEUxNihERVVDLCAwKTsKKwl9IGVsc2UgaWYgKElTX0k5NjVHKGRldikpIHsKKwkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMSwgSTk2NV9SQ1pfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgICAgIEk5NjVfUkNDX0NMT0NLX0dBVEVfRElTQUJMRSB8CisJCSAgICAgICBJOTY1X1JDUEJfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgICAgIEk5NjVfSVNDX0NMT0NLX0dBVEVfRElTQUJMRSB8CisJCSAgICAgICBJOTY1X0ZCQ19DTE9DS19HQVRFX0RJU0FCTEUpOworCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QyLCAwKTsKKwl9IGVsc2UgaWYgKElTX0k5WFgoZGV2KSkgeworCQl1MzIgZHN0YXRlID0gSTkxNV9SRUFEKERfU1RBVEUpOworCisJCWRzdGF0ZSB8PSBEU1RBVEVfUExMX0QzX09GRiB8IERTVEFURV9HRlhfQ0xPQ0tfR0FUSU5HIHwKKwkJCURTVEFURV9ET1RfQ0xPQ0tfR0FUSU5HOworCQlJOTE1X1dSSVRFKERfU1RBVEUsIGRzdGF0ZSk7CisJfSBlbHNlIGlmIChJU19JODU1KGRldikgfHwgSVNfSTg2NUcoZGV2KSkgeworCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QxLCBTVl9DTE9DS19HQVRFX0RJU0FCTEUpOworCX0gZWxzZSBpZiAoSVNfSTgzMChkZXYpKSB7CisJCUk5MTVfV1JJVEUoRFNQQ0xLX0dBVEVfRCwgT1ZSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCX0KK30KKwogdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBudW1fcGlwZTsKIAlpbnQgaTsKIApAQCAtMzM5OCwxNSArMzg2Myw0NyBAQAogCURSTV9ERUJVRygiJWQgZGlzcGxheSBwaXBlJXMgYXZhaWxhYmxlLlxuIiwKIAkJICBudW1fcGlwZSwgbnVtX3BpcGUgPiAxID8gInMiIDogIiIpOwogCisJaWYgKElTX0k4NVgoZGV2KSkKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBIUExMQ0MsICZkZXZfcHJpdi0+b3JpZ19jbG9jayk7CisJZWxzZSBpZiAoSVNfSTlYWChkZXYpIHx8IElTX0c0WChkZXYpKQorCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZGV2X3ByaXYtPm9yaWdfY2xvY2spOworCiAJZm9yIChpID0gMDsgaSA8IG51bV9waXBlOyBpKyspIHsKIAkJaW50ZWxfY3J0Y19pbml0KGRldiwgaSk7CiAJfQogCiAJaW50ZWxfc2V0dXBfb3V0cHV0cyhkZXYpOworCisJaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoZGV2KTsKKworCUlOSVRfV09SSygmZGV2X3ByaXYtPmlkbGVfd29yaywgaW50ZWxfaWRsZV91cGRhdGUpOworCXNldHVwX3RpbWVyKCZkZXZfcHJpdi0+aWRsZV90aW1lciwgaW50ZWxfZ3B1X2lkbGVfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZylkZXYpOwogfQogCiB2b2lkIGludGVsX21vZGVzZXRfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJLyogU2tpcCBpbmFjdGl2ZSBDUlRDcyAqLworCQlpZiAoIWNydGMtPmZiKQorCQkJY29udGludWU7CisKKwkJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJCWludGVsX2luY3JlYXNlX3BsbGNsb2NrKGNydGMsIGZhbHNlKTsKKwkJZGVsX3RpbWVyX3N5bmMoJmludGVsX2NydGMtPmlkbGVfdGltZXIpOworCX0KKworCWludGVsX2luY3JlYXNlX3JlbmRlcmNsb2NrKGRldiwgZmFsc2UpOworCWRlbF90aW1lcl9zeW5jKCZkZXZfcHJpdi0+aWRsZV90aW1lcik7CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwogCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7CiB9CiAKQEAgLTM0MjAsMyArMzkxNywyMCBAQAogCiAJcmV0dXJuICZpbnRlbF9vdXRwdXQtPmVuYzsKIH0KKworLyoKKyAqIHNldCB2Z2EgZGVjb2RlIHN0YXRlIC0gdHJ1ZSA9PSBlbmFibGUgVkdBIGRlY29kZQorICovCitpbnQgaW50ZWxfbW9kZXNldF92Z2Ffc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MTYgZ21jaF9jdHJsOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIElOVEVMX0dNQ0hfQ1RSTCwgJmdtY2hfY3RybCk7CisJaWYgKHN0YXRlKQorCQlnbWNoX2N0cmwgJj0gfklOVEVMX0dNQ0hfVkdBX0RJU0FCTEU7CisJZWxzZQorCQlnbWNoX2N0cmwgfD0gSU5URUxfR01DSF9WR0FfRElTQUJMRTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIElOVEVMX0dNQ0hfQ1RSTCwgZ21jaF9jdHJsKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDJiOTE0ZDcuLmY0ODU2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJZm9yICh0cnkgPSAwOyB0cnkgPCA1OyB0cnkrKykgewogCQkvKiBMb2FkIHRoZSBzZW5kIGRhdGEgaW50byB0aGUgYXV4IGNoYW5uZWwgZGF0YSByZWdpc3RlcnMgKi8KIAkJZm9yIChpID0gMDsgaSA8IHNlbmRfYnl0ZXM7IGkgKz0gNCkgewotCQkJdWludDMyX3QgICAgZCA9IHBhY2tfYXV4KHNlbmQgKyBpLCBzZW5kX2J5dGVzIC0gaSk7OworCQkJdWludDMyX3QgICAgZCA9IHBhY2tfYXV4KHNlbmQgKyBpLCBzZW5kX2J5dGVzIC0gaSk7CiAJCiAJCQlJOTE1X1dSSVRFKGNoX2RhdGEgKyBpLCBkKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCAyNmE2MjI3Li4zZWJiYmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMTE3LDkgKzExNyw5IEBACiAJdWludDMyX3QgY3Vyc29yX2FkZHI7CiAJdTggbHV0X3JbMjU2XSwgbHV0X2dbMjU2XSwgbHV0X2JbMjU2XTsKIAlpbnQgZHBtc19tb2RlOwotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqZmJkZXZfZmI7Ci0JLyogYSBtb2RlX3NldCBmb3IgZmJkZXYgdXNlcnMgb24gdGhpcyBjcnRjICovCi0Jc3RydWN0IGRybV9tb2RlX3NldCBtb2RlX3NldDsKKwlib29sIGJ1c3k7IC8qIGlzIHNjYW5vdXQgYnVmZmVyIGJlaW5nIHVwZGF0ZWQgZnJlcXVlbnRseT8gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBpZGxlX3RpbWVyOworCWJvb2wgbG93ZnJlcV9hdmFpbDsKIH07CiAKICNkZWZpbmUgdG9faW50ZWxfY3J0Yyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGludGVsX2NydGMsIGJhc2UpCkBAIC0xMzgsNiArMTM4LDcgQEAKIGV4dGVybiBib29sIGludGVsX3Nkdm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb3V0cHV0X2RldmljZSk7CiBleHRlcm4gdm9pZCBpbnRlbF9kdm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX3R2X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9tYXJrX2J1c3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogZXh0ZXJuIHZvaWQgaW50ZWxfbHZkc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaW50ZWxfZHBfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZHBfcmVnKTsKIHZvaWQKQEAgLTE3OCw0ICsxNzksNSBAQAogCQkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKIAkJCQkgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiLAogCQkJCSAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisKICNlbmRpZiAvKiBfX0lOVEVMX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCmluZGV4IDFkMzA4MDIuLjdiYTRhMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwpAQCAtMzksMzM5ICszOSwzNCBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJkcm1fY3J0Yy5oIgorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAKIHN0cnVjdCBpbnRlbGZiX3BhciB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqb3VyX21vZGU7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgaGVscGVyOwogCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7Ci0JaW50IGNydGNfY291bnQ7Ci0JLyogY3J0YyBjdXJyZW50bHkgYm91bmQgdG8gdGhpcyAqLwotCXVpbnQzMl90IGNydGNfaWRzWzJdOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpvdXJfbW9kZTsKIH07CiAKLXN0YXRpYyBpbnQgaW50ZWxmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQl1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCi0JCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGFyLT5kZXY7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCWludCBpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0gJmludGVsX2NydGMtPm1vZGVfc2V0OwotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IG1vZGVzZXQtPmZiOwotCi0JCWZvciAoaSA9IDA7IGkgPCBwYXItPmNydGNfY291bnQ7IGkrKykKLQkJCWlmIChjcnRjLT5iYXNlLmlkID09IHBhci0+Y3J0Y19pZHNbaV0pCi0JCQkJYnJlYWs7Ci0KLQkJaWYgKGkgPT0gcGFyLT5jcnRjX2NvdW50KQotCQkJY29udGludWU7Ci0KLQotCQlpZiAocmVnbm8gPiAyNTUpCi0JCQlyZXR1cm4gMTsKLQotCQlpZiAoZmItPmRlcHRoID09IDgpIHsKLQkJCWludGVsX2NydGNfZmJfZ2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHJlZ25vIDwgMTYpIHsKLQkJCXN3aXRjaCAoZmItPmRlcHRoKSB7Ci0JCQljYXNlIDE1OgotCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAotCQkJCQkoKGdyZWVuICYgMHhmODAwKSA+PiAgNikgfAotCQkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMTY6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKLQkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKLQkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyNDoKLQkJCWNhc2UgMzI6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9ICgocmVkICYgMHhmZjAwKSA8PCA4KSB8Ci0JCQkJCShncmVlbiAmIDB4ZmYwMCkgfAotCQkJCQkoKGJsdWUgICYgMHhmZjAwKSA+PiA4KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbnRlbGZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSBwYXItPmludGVsX2ZiOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gJmludGVsX2ZiLT5iYXNlOwotCWludCBkZXB0aDsKLQotCWlmICh2YXItPnBpeGNsb2NrID09IC0xIHx8ICF2YXItPnBpeGNsb2NrKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE5lZWQgdG8gcmVzaXplIHRoZSBmYiBvYmplY3QgISEhICovCi0JaWYgKHZhci0+eHJlcyA+IGZiLT53aWR0aCB8fCB2YXItPnlyZXMgPiBmYi0+aGVpZ2h0KSB7Ci0JCURSTV9FUlJPUigiUmVxdWVzdGVkIHdpZHRoL2hlaWdodCBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBmYiBvYmplY3QgJWR4JWQgPiAlZHglZFxuIix2YXItPnhyZXMsdmFyLT55cmVzLGZiLT53aWR0aCxmYi0+aGVpZ2h0KTsKLQkJRFJNX0VSUk9SKCJOZWVkIHJlc2l6aW5nIGNvZGUuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7Ci0JY2FzZSAxNjoKLQkJZGVwdGggPSAodmFyLT5ncmVlbi5sZW5ndGggPT0gNikgPyAxNiA6IDE1OwotCQlicmVhazsKLQljYXNlIDMyOgotCQlkZXB0aCA9ICh2YXItPnRyYW5zcC5sZW5ndGggPiAwKSA/IDMyIDogMjQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRlcHRoID0gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChkZXB0aCkgewotCWNhc2UgODoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gODsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OwotCQl2YXItPmJsdWUubGVuZ3RoID0gODsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAxNToKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTA7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDU7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gNTsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDE7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDE1OwotCQlicmVhazsKLQljYXNlIDE2OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwotCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDE2OwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA4OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHRoaXMgd2lsbCBsZXQgZmJjb24gZG8gdGhlIG1vZGUgaW5pdCAqLwotLyogRklYTUU6IHRha2UgbW9kZSBjb25maWcgbG9jaz8gKi8KLXN0YXRpYyBpbnQgaW50ZWxmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwYXItPmRldjsKLQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7Ci0JaW50IGk7Ci0KLQlEUk1fREVCVUcoIiVkICVkXG4iLCB2YXItPnhyZXMsIHZhci0+cGl4Y2xvY2spOwotCi0JaWYgKHZhci0+cGl4Y2xvY2sgIT0gLTEpIHsKLQotCQlEUk1fRVJST1IoIlBJWEVMIENMT0NLIFNFVFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQkJaW50IHJldDsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgcGFyLT5jcnRjX2NvdW50OyBpKyspCi0JCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKLQkJCQkJYnJlYWs7Ci0KLQkJCWlmIChpID09IHBhci0+Y3J0Y19jb3VudCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKGNydGMtPmZiID09IGludGVsX2NydGMtPm1vZGVfc2V0LmZiKSB7Ci0JCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcoJmludGVsX2NydGMtPm1vZGVfc2V0KTsKLQkJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQkJCWlmIChyZXQpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IGludGVsZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGludGVsZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBhci0+ZGV2OwotCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwotCWludCByZXQgPSAwOwotCWludCBpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBhci0+Y3J0Y19jb3VudDsgaSsrKQotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKLQkJCQlicmVhazsKLQotCQlpZiAoaSA9PSBwYXItPmNydGNfY291bnQpCi0JCQljb250aW51ZTsKLQotCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQkJbW9kZXNldCA9ICZpbnRlbF9jcnRjLT5tb2RlX3NldDsKLQotCQltb2Rlc2V0LT54ID0gdmFyLT54b2Zmc2V0OwotCQltb2Rlc2V0LT55ID0gdmFyLT55b2Zmc2V0OwotCi0JCWlmIChtb2Rlc2V0LT5udW1fY29ubmVjdG9ycykgewotCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZyhtb2Rlc2V0KTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWluZm8tPnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0OwotCQkJCWluZm8tPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxmYl9vbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGFyLT5kZXY7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlpbnQgaTsKLQotCS8qCi0JICogRm9yIGVhY2ggQ1JUQyBpbiB0aGlzIGZiLCBmaW5kIGFsbCBhc3NvY2lhdGVkIGVuY29kZXJzCi0JICogYW5kIHR1cm4gdGhlbSBvZmYsIHRoZW4gdHVybiBvZmYgdGhlIENSVEMuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwotCi0JCWZvciAoaSA9IDA7IGkgPCBwYXItPmNydGNfY291bnQ7IGkrKykKLQkJCWlmIChjcnRjLT5iYXNlLmlkID09IHBhci0+Y3J0Y19pZHNbaV0pCi0JCQkJYnJlYWs7Ci0KLQkJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09OKTsKLQotCQkvKiBGb3VuZCBhIENSVEMgb24gdGhpcyBmYiwgbm93IGZpbmQgZW5jb2RlcnMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKLQkJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKLQkJCQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2Z1bmNzOwotCQkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKLQkJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpbnRlbGZiX29mZihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGRwbXNfbW9kZSkKLXsKLQlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGFyLT5kZXY7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlpbnQgaTsKLQotCS8qCi0JICogRm9yIGVhY2ggQ1JUQyBpbiB0aGlzIGZiLCBmaW5kIGFsbCBhc3NvY2lhdGVkIGVuY29kZXJzCi0JICogYW5kIHR1cm4gdGhlbSBvZmYsIHRoZW4gdHVybiBvZmYgdGhlIENSVEMuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwotCi0JCWZvciAoaSA9IDA7IGkgPCBwYXItPmNydGNfY291bnQ7IGkrKykKLQkJCWlmIChjcnRjLT5iYXNlLmlkID09IHBhci0+Y3J0Y19pZHNbaV0pCi0JCQkJYnJlYWs7Ci0KLQkJLyogRm91bmQgYSBDUlRDIG9uIHRoaXMgZmIsIG5vdyBmaW5kIGVuY29kZXJzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSB7Ci0JCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKLQkJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7Ci0JCQkJZW5jb2Rlcl9mdW5jcy0+ZHBtcyhlbmNvZGVyLCBkcG1zX21vZGUpOwotCQkJfQotCQl9Ci0JCWlmIChkcG1zX21vZGUgPT0gRFJNX01PREVfRFBNU19PRkYpCi0JCQljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIGRwbXNfbW9kZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGludGVsZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzd2l0Y2ggKGJsYW5rKSB7Ci0JY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotCQlpbnRlbGZiX29uKGluZm8pOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX05PUk1BTDoKLQkJaW50ZWxmYl9vZmYoaW5mbywgRFJNX01PREVfRFBNU19TVEFOREJZKTsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgotCQlpbnRlbGZiX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NUQU5EQlkpOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0JCWludGVsZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1VTUEVORCk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQlpbnRlbGZiX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgaW50ZWxmYl9vcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmZiX2NoZWNrX3ZhciA9IGludGVsZmJfY2hlY2tfdmFyLAotCS5mYl9zZXRfcGFyID0gaW50ZWxmYl9zZXRfcGFyLAotCS5mYl9zZXRjb2xyZWcgPSBpbnRlbGZiX3NldGNvbHJlZywKKwkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZyA9IGRybV9mYl9oZWxwZXJfc2V0Y29scmVnLAogCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0JLmZiX3Bhbl9kaXNwbGF5ID0gaW50ZWxmYl9wYW5fZGlzcGxheSwKLQkuZmJfYmxhbmsgPSBpbnRlbGZiX2JsYW5rLAorCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCisJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBpbnRlbF9mYl9oZWxwZXJfZnVuY3MgPSB7CisJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZmJfZ2FtbWFfc2V0LAorfTsKKworCiAvKioKICAqIEN1cnJldGx5IGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgb2xkIGZyYW1lYnVmZmVyIGlzIHJldXNlZC4KICAqCkBAIC00MTIsMjUgKzEwNywxMCBAQAogfQogRVhQT1JUX1NZTUJPTChpbnRlbGZiX3Jlc2l6ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX21vZGVfc2V0IGtlcm5lbGZiX21vZGU7Ci0KLXN0YXRpYyBpbnQgaW50ZWxmYl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxvbmcgdW51bnNlZCwKLQkJCSB2b2lkICpwYW5pY19zdHIpCi17Ci0JRFJNX0VSUk9SKCJwYW5pYyBvY2N1cnJlZCwgc3dpdGNoaW5nIGJhY2sgdG8gdGV4dCBjb25zb2xlXG4iKTsKLQotCWludGVsZmJfcmVzdG9yZSgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljZWQgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBpbnRlbGZiX3BhbmljLAotfTsKLQogc3RhdGljIGludCBpbnRlbGZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBmYl93aWR0aCwKIAkJCSAgdWludDMyX3QgZmJfaGVpZ2h0LCB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJICB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKLQkJCSAgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICoqaW50ZWxfZmJfcCkKKwkJCSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IGludGVsZmJfcGFyICpwYXI7CkBAIC00NzksNyArMTU5LDcgQEAKIAlsaXN0X2FkZCgmZmItPmZpbHBfaGVhZCwgJmRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QpOwogCiAJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Ci0JKmludGVsX2ZiX3AgPSBpbnRlbF9mYjsKKwkqZmJfcCA9IGZiOwogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxmYl9wYXIpLCBkZXZpY2UpOwogCWlmICghaW5mbykgewpAQCAtNDg5LDIxICsxNjksMTkgQEAKIAogCXBhciA9IGluZm8tPnBhcjsKIAorCXBhci0+aGVscGVyLmZ1bmNzID0gJmludGVsX2ZiX2hlbHBlcl9mdW5jczsKKwlwYXItPmhlbHBlci5kZXYgPSBkZXY7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoJnBhci0+aGVscGVyLCAyLAorCQkJCQkgICAgSU5URUxGQl9DT05OX0xJTUlUKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZjsKKwogCXN0cmNweShpbmZvLT5maXguaWQsICJpbnRlbGRybWZiIik7Ci0JaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0JaW5mby0+Zml4LnR5cGVfYXV4ID0gMDsKLQlpbmZvLT5maXgueHBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwotCWluZm8tPmZpeC55cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCi0JaW5mby0+Zml4Lnl3cmFwc3RlcCA9IDA7Ci0JaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfSTgzMDsKLQlpbmZvLT5maXgudHlwZV9hdXggPSAwOwogCiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKIAogCWluZm8tPmZib3BzID0gJmludGVsZmJfb3BzOwogCi0JaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gZmItPnBpdGNoOwogCiAJLyogc2V0dXAgYXBlcnR1cmUgYmFzZS9zaXplIGZvciB2ZXNhZmIgdGFrZW92ZXIgKi8KIAlpbmZvLT5hcGVydHVyZV9iYXNlID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlOwpAQCAtNTI3LDE4ICsyMDUsOCBAQAogCiAvLwltZW1zZXQoaW5mby0+c2NyZWVuX2Jhc2UsIDAsIHNpemUpOwogCi0JaW5mby0+cHNldWRvX3BhbGV0dGUgPSBmYi0+cHNldWRvX3BhbGV0dGU7Ci0JaW5mby0+dmFyLnhyZXNfdmlydHVhbCA9IGZiLT53aWR0aDsKLQlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gZmItPmhlaWdodDsKLQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBmYi0+Yml0c19wZXJfcGl4ZWw7Ci0JaW5mby0+dmFyLnhvZmZzZXQgPSAwOwotCWluZm8tPnZhci55b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7Ci0JaW5mby0+dmFyLmhlaWdodCA9IC0xOwotCWluZm8tPnZhci53aWR0aCA9IC0xOwotCi0JaW5mby0+dmFyLnhyZXMgPSBmYl93aWR0aDsKLQlpbmZvLT52YXIueXJlcyA9IGZiX2hlaWdodDsKKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCk7CisJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCBmYiwgZmJfd2lkdGgsIGZiX2hlaWdodCk7CiAKIAkvKiBGSVhNRTogd2UgcmVhbGx5IHNob3VsZG4ndCBleHBvc2UgbW1pbyBzcGFjZSBhdCBhbGwgKi8KIAlpbmZvLT5maXgubW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIG1taW9fYmFyKTsKQEAgLTU1MCw2NCArMjE4LDkgQEAKIAlpbmZvLT5waXhtYXAuZmxhZ3MgPSBGQl9QSVhNQVBfU1lTVEVNOwogCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gMTsKIAotCXN3aXRjaChmYi0+ZGVwdGgpIHsKLQljYXNlIDg6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsgLyogOGJpdCBEQUMgKi8KLQkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOwotCQlicmVhazsKLQljYXNlIDE1OgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDEwOwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNTsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAxNTsKLQkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAxOwotCQlicmVhazsKLQljYXNlIDE2OgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDExOwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNjsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIDI0OgotCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDE2OwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTY7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDI0OwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQogCWZiLT5mYmRldiA9IGluZm87CiAKIAlwYXItPmludGVsX2ZiID0gaW50ZWxfZmI7Ci0JcGFyLT5kZXYgPSBkZXY7CiAKIAkvKiBUbyBhbGxvdyByZXNpemVpbmcgd2l0aG91dCBzd2FwcGluZyBidWZmZXJzICovCiAJRFJNX0RFQlVHKCJhbGxvY2F0ZWQgJWR4JWQgZmI6IDB4JTA4eCwgYm8gJXBcbiIsIGludGVsX2ZiLT5iYXNlLndpZHRoLApAQCAtNjI1LDMwNyArMjM4LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpbnRlbGZiX211bHRpX2ZiX3Byb2JlX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm87Ci0Jc3RydWN0IGludGVsZmJfcGFyICpwYXI7Ci0Jc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKLQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKLQlpbnQgbmV3X2ZiID0gMDsKLQlpbnQgcmV0LCBpLCBjb25uX2NvdW50OwotCi0JaWYgKCFkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpKQotCQlyZXR1cm4gMDsKLQotCWlmICghY3J0Yy0+ZGVzaXJlZF9tb2RlKQotCQlyZXR1cm4gMDsKLQotCXdpZHRoID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheTsKLQloZWlnaHQgPSBjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5OwotCi0JLyogaXMgdGhlcmUgYW4gZmIgYm91bmQgdG8gdGhpcyBjcnRjIGFscmVhZHkgKi8KLQlpZiAoIWludGVsX2NydGMtPm1vZGVfc2V0LmZiKSB7Ci0JCXJldCA9IGludGVsZmJfY3JlYXRlKGRldiwgd2lkdGgsIGhlaWdodCwgd2lkdGgsIGhlaWdodCwgJmludGVsX2ZiKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQluZXdfZmIgPSAxOwotCX0gZWxzZSB7Ci0JCWZiID0gaW50ZWxfY3J0Yy0+bW9kZV9zZXQuZmI7Ci0JCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwotCQlpZiAoKGludGVsX2ZiLT5iYXNlLndpZHRoIDwgd2lkdGgpIHx8IChpbnRlbF9mYi0+YmFzZS5oZWlnaHQgPCBoZWlnaHQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW5mbyA9IGludGVsX2ZiLT5iYXNlLmZiZGV2OwotCXBhciA9IGluZm8tPnBhcjsKLQotCW1vZGVzZXQgPSAmaW50ZWxfY3J0Yy0+bW9kZV9zZXQ7Ci0JbW9kZXNldC0+ZmIgPSAmaW50ZWxfZmItPmJhc2U7Ci0JY29ubl9jb3VudCA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Ci0JCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCi0JCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjID09IG1vZGVzZXQtPmNydGMpIHsKLQkJCQltb2Rlc2V0LT5jb25uZWN0b3JzW2Nvbm5fY291bnRdID0gY29ubmVjdG9yOwotCQkJCWNvbm5fY291bnQrKzsKLQkJCQlpZiAoY29ubl9jb3VudCA+IElOVEVMRkJfQ09OTl9MSU1JVCkKLQkJCQkJQlVHKCk7Ci0JCQl9Ci0JfQotCi0JZm9yIChpID0gY29ubl9jb3VudDsgaSA8IElOVEVMRkJfQ09OTl9MSU1JVDsgaSsrKQotCQltb2Rlc2V0LT5jb25uZWN0b3JzW2ldID0gTlVMTDsKLQotCXBhci0+Y3J0Y19pZHNbMF0gPSBjcnRjLT5iYXNlLmlkOwotCi0JbW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMgPSBjb25uX2NvdW50OwotCWlmIChtb2Rlc2V0LT5jcnRjLT5kZXNpcmVkX21vZGUpIHsKLQkJaWYgKG1vZGVzZXQtPm1vZGUpCi0JCQlkcm1fbW9kZV9kZXN0cm95KGRldiwgbW9kZXNldC0+bW9kZSk7Ci0JCW1vZGVzZXQtPm1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LAotCQkJCQkJICAgbW9kZXNldC0+Y3J0Yy0+ZGVzaXJlZF9tb2RlKTsKLQl9Ci0KLQlwYXItPmNydGNfY291bnQgPSAxOwotCi0JaWYgKG5ld19mYikgewotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSAtMTsKLQkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlpbnRlbGZiX3NldF9wYXIoaW5mbyk7Ci0KLQlEUk1fSU5GTygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwKLQkgICAgICAgaW5mby0+Zml4LmlkKTsKLQotCS8qIFN3aXRjaCBiYWNrIHRvIGtlcm5lbCBjb25zb2xlIG9uIHBhbmljICovCi0Ja2VybmVsZmJfbW9kZSA9ICptb2Rlc2V0OwotCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOwotCURSTV9ERUJVRygicmVnaXN0ZXJlZCBwYW5pYyBub3RpZmllclxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbnRlbGZiX211bHRpX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0KLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IHJldCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlyZXQgPSBpbnRlbGZiX211bHRpX2ZiX3Byb2JlX2NydGMoZGV2LCBjcnRjKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxmYl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQl1bnNpZ25lZCBpbnQgZmJfd2lkdGggPSAodW5zaWduZWQpLTEsIGZiX2hlaWdodCA9ICh1bnNpZ25lZCktMTsKLQl1bnNpZ25lZCBpbnQgc3VyZmFjZV93aWR0aCA9IDAsIHN1cmZhY2VfaGVpZ2h0ID0gMDsKLQlpbnQgbmV3X2ZiID0gMDsKLQlpbnQgY3J0Y19jb3VudCA9IDA7Ci0JaW50IHJldCwgaSwgY29ubl9jb3VudCA9IDA7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhcjsKLQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0gTlVMTDsKLQotCURSTV9ERUJVRygiXG4iKTsKLQotCS8qIEdldCBhIGNvdW50IG9mIGNydGNzIG5vdyBpbiB1c2UgYW5kIG5ldyBtaW4vbWF4ZXMgd2lkdGgvaGVpZ2h0cyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCWlmICghZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNydGNfY291bnQrKzsKLQkJaWYgKCFjcnRjLT5kZXNpcmVkX21vZGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBTbWFsbGVzdCBtb2RlIGRldGVybWluZXMgY29uc29sZSBzaXplLi4uICovCi0JCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5IDwgZmJfd2lkdGgpCi0JCQlmYl93aWR0aCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXk7Ci0KLQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXkgPCBmYl9oZWlnaHQpCi0JCQlmYl9oZWlnaHQgPSBjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5OwotCi0JCS8qIC4uLiBidXQgbGFyZ2VzdCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZGltZW5zaW9ucyAqLwotCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheSA+IHN1cmZhY2Vfd2lkdGgpCi0JCQlzdXJmYWNlX3dpZHRoID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheTsKLQotCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheSA+IHN1cmZhY2VfaGVpZ2h0KQotCQkJc3VyZmFjZV9oZWlnaHQgPSBjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5OwotCX0KLQotCWlmIChjcnRjX2NvdW50ID09IDAgfHwgZmJfd2lkdGggPT0gLTEgfHwgZmJfaGVpZ2h0ID09IC0xKSB7Ci0JCS8qIGhtbSBldmVyeW9uZSB3ZW50IGF3YXkgLSBhc3N1bWUgVkdBIGNhYmxlIGp1c3QgZmVsbCBvdXQKLQkJICAgYW5kIHdpbGwgY29tZSBiYWNrIGxhdGVyLiAqLwotCQlEUk1fREVCVUcoIm5vIENSVENzIGF2YWlsYWJsZT9cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLS8vZmFpbAotCS8qIEZpbmQgdGhlIGZiIGZvciBvdXIgbmV3IGNvbmZpZyAqLwotCWlmIChsaXN0X2VtcHR5KCZkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0KSkgewotCQlEUk1fREVCVUcoImNyZWF0aW5nIG5ldyBmYiAoY29uc29sZSBzaXplICVkeCVkLCAiCi0JCQkgICJidWZmZXIgc2l6ZSAlZHglZClcbiIsIGZiX3dpZHRoLCBmYl9oZWlnaHQsCi0JCQkgIHN1cmZhY2Vfd2lkdGgsIHN1cmZhY2VfaGVpZ2h0KTsKLQkJcmV0ID0gaW50ZWxmYl9jcmVhdGUoZGV2LCBmYl93aWR0aCwgZmJfaGVpZ2h0LCBzdXJmYWNlX3dpZHRoLAotCQkJCSAgICAgc3VyZmFjZV9oZWlnaHQsICZpbnRlbF9mYik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbmV3X2ZiID0gMTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKLQotCQlmYiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QsCi0JCQkJICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciwgZmlscF9oZWFkKTsKLQkJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Ci0KLQkJLyogaWYgc29tZW9uZSBob3RwbHVncyBzb21ldGhpbmcgYmlnZ2VyIHRoYW4gd2UgaGF2ZSBhbHJlYWR5Ci0JCSAqIGFsbG9jYXRlZCwgd2UgYXJlIHB3bmVkLiAgQXMgcmVhbGx5IHdlIGNhbid0IHJlc2l6ZSBhbgotCQkgKiBmYmRldiB0aGF0IGlzIGluIHRoZSB3aWxkIGN1cnJlbnRseSBkdWUgdG8gZmJkZXYgbm90IHJlYWxseQotCQkgKiBiZWluZyBkZXNpZ25lZCBmb3IgdGhlIGxvd2VyIGxheWVycyBtb3Zpbmcgc3R1ZmYgYXJvdW5kCi0JCSAqIHVuZGVyIGl0LgotCQkgKiAtIHNvIGluIHRoZSBncmFuZCBzdHlsZSBvZiB0aGluZ3MgLSBwdW50LgotCQkgKi8KLQkJaWYgKChmYi0+d2lkdGggPCBzdXJmYWNlX3dpZHRoKSB8fAotCQkgICAgKGZiLT5oZWlnaHQgPCBzdXJmYWNlX2hlaWdodCkpIHsKLQkJCURSTV9FUlJPUigiZmIgbm90IGxhcmdlIGVub3VnaCBmb3IgY29uc29sZVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLS8vIGZhaWwKLQotCWluZm8gPSBpbnRlbF9mYi0+YmFzZS5mYmRldjsKLQlwYXIgPSBpbmZvLT5wYXI7Ci0KLQljcnRjX2NvdW50ID0gMDsKLQkvKgotCSAqIEZvciBlYWNoIENSVEMsIHNldCB1cCB0aGUgY29ubmVjdG9yIGxpc3QgZm9yIHRoZSBDUlRDJ3MgbW9kZQotCSAqIHNldCBjb25maWd1cmF0aW9uLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKLQotCQltb2Rlc2V0ID0gJmludGVsX2NydGMtPm1vZGVfc2V0OwotCQltb2Rlc2V0LT5mYiA9ICZpbnRlbF9mYi0+YmFzZTsKLQkJY29ubl9jb3VudCA9IDA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwKLQkJCQkgICAgaGVhZCkgewotCQkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmKGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9PSBtb2Rlc2V0LT5jcnRjKSB7Ci0JCQkJbW9kZXNldC0+Y29ubmVjdG9yc1tjb25uX2NvdW50KytdID0gY29ubmVjdG9yOwotCQkJCWlmIChjb25uX2NvdW50ID4gSU5URUxGQl9DT05OX0xJTUlUKQotCQkJCQlCVUcoKTsKLQkJCX0KLQkJfQotCi0JCS8qIFplcm8gb3V0IHJlbWFpbmluZyBjb25uZWN0b3IgcG9pbnRlcnMgKi8KLQkJZm9yIChpID0gY29ubl9jb3VudDsgaSA8IElOVEVMRkJfQ09OTl9MSU1JVDsgaSsrKQotCQkJbW9kZXNldC0+Y29ubmVjdG9yc1tpXSA9IE5VTEw7Ci0KLQkJcGFyLT5jcnRjX2lkc1tjcnRjX2NvdW50KytdID0gY3J0Yy0+YmFzZS5pZDsKLQotCQltb2Rlc2V0LT5udW1fY29ubmVjdG9ycyA9IGNvbm5fY291bnQ7Ci0JCWlmIChtb2Rlc2V0LT5jcnRjLT5kZXNpcmVkX21vZGUpIHsKLQkJCWlmIChtb2Rlc2V0LT5tb2RlKQotCQkJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2Rlc2V0LT5tb2RlKTsKLQkJCW1vZGVzZXQtPm1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LAotCQkJCQkJCSAgIG1vZGVzZXQtPmNydGMtPmRlc2lyZWRfbW9kZSk7Ci0JCX0KLQl9Ci0JcGFyLT5jcnRjX2NvdW50ID0gY3J0Y19jb3VudDsKLQotCWlmIChuZXdfZmIpIHsKLQkJaW5mby0+dmFyLnBpeGNsb2NrID0gLTE7Ci0JCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UKLQkJaW50ZWxmYl9zZXRfcGFyKGluZm8pOwotCi0JRFJNX0lORk8oImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsIGluZm8tPm5vZGUsCi0JICAgICAgIGluZm8tPmZpeC5pZCk7Ci0KLQkvKiBTd2l0Y2ggYmFjayB0byBrZXJuZWwgY29uc29sZSBvbiBwYW5pYyAqLwotCWtlcm5lbGZiX21vZGUgPSAqbW9kZXNldDsKLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY2VkKTsKLQlEUk1fREVCVUcoInJlZ2lzdGVyZWQgcGFuaWMgbm90aWZpZXJcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaW50ZWxmYl9yZXN0b3JlIC0gcmVzdG9yZSB0aGUgZnJhbWVidWZmZXIgY29uc29sZSAoa2VybmVsKSBjb25maWcKLSAqCi0gKiBSZXN0b3JlJ3MgdGhlIGtlcm5lbCdzIGZiY29uIG1vZGUsIHVzZWQgZm9yIGxhc3RjbG9zZSAmIHBhbmljIHBhdGhzLgotICovCi12b2lkIGludGVsZmJfcmVzdG9yZSh2b2lkKQotewotCWludCByZXQ7Ci0JaWYgKChyZXQgPSBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZygma2VybmVsZmJfbW9kZSkpICE9IDApIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVzdG9yZSBjcnRjIGNvbmZpZ3VyYXRpb246ICVkXG4iLAotCQkJICByZXQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaW50ZWxmYl9yZXN0b3JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQotewotCWludGVsZmJfcmVzdG9yZSgpOwotfQotc3RhdGljIERFQ0xBUkVfV09SSyhpbnRlbGZiX3Jlc3RvcmVfd29yaywgaW50ZWxmYl9yZXN0b3JlX3dvcmtfZm4pOwotCi1zdGF0aWMgdm9pZCBpbnRlbGZiX3N5c3JxKGludCBkdW1teTEsIHN0cnVjdCB0dHlfc3RydWN0ICpkdW1teTMpCi17Ci0gICAgICAgIHNjaGVkdWxlX3dvcmsoJmludGVsZmJfcmVzdG9yZV93b3JrKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfaW50ZWxmYl9yZXN0b3JlX29wID0gewotICAgICAgICAuaGFuZGxlciA9IGludGVsZmJfc3lzcnEsCi0gICAgICAgIC5oZWxwX21zZyA9ICJmb3JjZS1mYihWKSIsCi0gICAgICAgIC5hY3Rpb25fbXNnID0gIlJlc3RvcmUgZnJhbWVidWZmZXIgY29uc29sZSIsCi19OwotCiBpbnQgaW50ZWxmYl9wcm9iZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKIAlEUk1fREVCVUcoIlxuIik7Ci0KLQkvKiBzb21ldGhpbmcgaGFzIGNoYW5nZWQgaW4gdGhlIGxvd2VyIGxldmVscyBvZiBoZWxsIC0gZGVhbCB3aXRoIGl0Ci0JICAgaGVyZSAqLwotCi0JLyogdHdvIG1vZGVzIDogYSkgMSBmYiB0byBydWxlIGFsbCBjcnRjcy4KLQkgICAgICAgICAgICAgICBiKSBvbmUgZmIgcGVyIGNydGMuCi0JICAgdHdvIGFjdGlvbnMgMSkgbmV3IGNvbm5lY3RlZCBkZXZpY2UKLQkgICAgICAgICAgICAgICAyKSBkZXZpY2UgcmVtb3ZlZC4KLQkgICBjYXNlIGEvMSA6IGlmIHRoZSBmYiBzdXJmYWNlIGlzbid0IGJpZyBlbm91Z2ggLSByZXNpemUgdGhlIHN1cmZhY2UgZmIuCi0JICAgICAgICAgICAgICBpZiB0aGUgZmIgc2l6ZSBpc24ndCBiaWcgZW5vdWdoIC0gcmVzaXplIGZiIGludG8gc3VyZmFjZS4KLQkJICAgICAgaWYgZXZlcnl0aGluZyBiaWcgZW5vdWdoIGNvbmZpZ3VyZSB0aGUgbmV3IGNydGMvZXRjLgotCSAgIGNhc2UgYS8yIDogdW5kbyB0aGUgY29uZmlndXJhdGlvbgotCSAgICAgICAgICAgICAgcG9zc2libHkgcmVzaXplIGRvd24gdGhlIGZiIHRvIGZpdCB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgIGNhc2UgYi8xIDogc2VlIGlmIGl0IGlzIG9uIGEgbmV3IGNydGMgLSBzZXR1cCBhIG5ldyBmYiBhbmQgYWRkIGl0LgotCSAgIGNhc2UgYi8yIDogdGVhcmRvd24gdGhlIG5ldyBmYi4KLQkqLwotCi0JLyogbW9kZSBhIGZpcnN0ICovCi0JLyogc2VhcmNoIGZvciBhbiBmYiAqLwotCWlmIChpOTE1X2ZicGVyY3J0YyA9PSAxKSB7Ci0JCXJldCA9IGludGVsZmJfbXVsdGlfZmJfcHJvYmUoZGV2KTsKLQl9IGVsc2UgewotCQlyZXQgPSBpbnRlbGZiX3NpbmdsZV9mYl9wcm9iZShkZXYpOwotCX0KLQotCXJlZ2lzdGVyX3N5c3JxX2tleSgndicsICZzeXNycV9pbnRlbGZiX3Jlc3RvcmVfb3ApOwotCisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCBpbnRlbGZiX2NyZWF0ZSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaW50ZWxmYl9wcm9iZSk7CkBAIC05NDAsMTMgKzI1OCwxNCBAQAogCWluZm8gPSBmYi0+ZmJkZXY7CiAKIAlpZiAoaW5mbykgeworCQlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CisJCWlmIChpbmZvLT5wYXIpCisJCQlkcm1fZmJfaGVscGVyX2ZyZWUoJnBhci0+aGVscGVyKTsKIAkJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAl9CiAKLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOwotCW1lbXNldCgma2VybmVsZmJfbW9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9zZXQpKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaW50ZWxmYl9yZW1vdmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYwppbmRleCA2MmI4YmVhLi5jN2VhYjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYwpAQCAtNDIsMTEgKzQyLDExIEBACiAJaWYgKCFJU19JR0QoZGV2KSkKIAkJcmV0dXJuOwogCWlmIChlbmFibGUpCi0JCUk5MTVfV1JJVEUoQ0dfMkRfRElTLAotCQkJSTkxNV9SRUFEKENHXzJEX0RJUykgfCBEUENVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJCUk5MTVfV1JJVEUoRFNQQ0xLX0dBVEVfRCwKKwkJCUk5MTVfUkVBRChEU1BDTEtfR0FURV9EKSB8IERQQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAllbHNlCi0JCUk5MTVfV1JJVEUoQ0dfMkRfRElTLAotCQkJSTkxNV9SRUFEKENHXzJEX0RJUykgJiAofkRQQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKSk7CisJCUk5MTVfV1JJVEUoRFNQQ0xLX0dBVEVfRCwKKwkJCUk5MTVfUkVBRChEU1BDTEtfR0FURV9EKSAmICh+RFBDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCA4ZGYwMmVmLi5kYWZjMGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0zOCwxNiArMzgsNiBAQAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCi0jZGVmaW5lIEk5MTVfTFZEUyAiaTkxNV9sdmRzIgotCi0vKgotICogdGhlIGZvbGxvd2luZyBmb3VyIHNjYWxpbmcgb3B0aW9ucyBhcmUgZGVmaW5lZC4KLSAqICNkZWZpbmUgRFJNX01PREVfU0NBTEVfTk9OX0dQVQkwCi0gKiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4JMQotICogI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRQkyCi0gKiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0FTUEVDVAkzCi0gKi8KLQogLyogUHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIHRoZSBpbnRlZ3JhdGVkIExWRFMgc3VwcG9ydCAqLwogc3RydWN0IGludGVsX2x2ZHNfcHJpdiB7CiAJaW50IGZpdHRpbmdfbW9kZTsKQEAgLTMzNiw3ICszMjYsNyBAQAogCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCAwKTsKIAogCXN3aXRjaCAobHZkc19wcml2LT5maXR0aW5nX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX1NDQUxFX05PX1NDQUxFOgorCWNhc2UgRFJNX01PREVfU0NBTEVfQ0VOVEVSOgogCQkvKgogCQkgKiBGb3IgY2VudGVyZWQgbW9kZXMsIHdlIGhhdmUgdG8gY2FsY3VsYXRlIGJvcmRlciB3aWR0aHMgJgogCQkgKiBoZWlnaHRzIGFuZCBtb2RpZnkgdGhlIHZhbHVlcyBwcm9ncmFtbWVkIGludG8gdGhlIENSVEMuCkBAIC02NzIsOSArNjYyLDggQEAKIAkJCQljb25uZWN0b3ItPmVuY29kZXIpIHsKIAkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjOwogCQlzdHJ1Y3QgaW50ZWxfbHZkc19wcml2ICpsdmRzX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OwotCQlpZiAodmFsdWUgPT0gRFJNX01PREVfU0NBTEVfTk9OX0dQVSkgewotCQkJRFJNX0RFQlVHX0tNUyhJOTE1X0xWRFMsCi0JCQkJCSJub25fR1BVIHByb3BlcnR5IGlzIHVuc3VwcG9ydGVkXG4iKTsKKwkJaWYgKHZhbHVlID09IERSTV9NT0RFX1NDQUxFX05PTkUpIHsKKwkJCURSTV9ERUJVR19LTVMoIm5vIHNjYWxpbmcgbm90IHN1cHBvcnRlZFxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAobHZkc19wcml2LT5maXR0aW5nX21vZGUgPT0gdmFsdWUpIHsKQEAgLTczMSw4ICs3MjAsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbnRlbF9ub19sdmRzX2RtaV9jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCiB7Ci0JRFJNX0RFQlVHX0tNUyhJOTE1X0xWRFMsCi0JCSAgICAgICJTa2lwcGluZyBMVkRTIGluaXRpYWxpemF0aW9uIGZvciAlc1xuIiwgaWQtPmlkZW50KTsKKwlEUk1fREVCVUdfS01TKCJTa2lwcGluZyBMVkRTIGluaXRpYWxpemF0aW9uIGZvciAlc1xuIiwgaWQtPmlkZW50KTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTAyNyw3ICsxMDE1LDcgQEAKIAlyZXR1cm47CiAKIGZhaWxlZDoKLQlEUk1fREVCVUdfS01TKEk5MTVfTFZEUywgIk5vIExWRFMgbW9kZXMgZm91bmQsIGRpc2FibGluZy5cbiIpOworCURSTV9ERUJVR19LTVMoIk5vIExWRFMgbW9kZXMgZm91bmQsIGRpc2FibGluZy5cbiIpOwogCWlmIChpbnRlbF9vdXRwdXQtPmRkY19idXMpCiAJCWludGVsX2kyY19kZXN0cm95KGludGVsX291dHB1dC0+ZGRjX2J1cyk7CiAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKaW5kZXggZDNiNzRiYS4uMGJmMjhlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpAQCAtMzcsNyArMzcsMTkgQEAKICNpbmNsdWRlICJpbnRlbF9zZHZvX3JlZ3MuaCIKIAogI3VuZGVmIFNEVk9fREVCVUcKLSNkZWZpbmUgSTkxNV9TRFZPCSJpOTE1X3Nkdm8iCisKK3N0YXRpYyBjaGFyICp0dl9mb3JtYXRfbmFtZXNbXSA9IHsKKwkiTlRTQ19NIiAgICwgIk5UU0NfSiIgICwgIk5UU0NfNDQzIiwKKwkiUEFMX0IiICAgICwgIlBBTF9EIiAgICwgIlBBTF9HIiAgICwKKwkiUEFMX0giICAgICwgIlBBTF9JIiAgICwgIlBBTF9NIiAgICwKKwkiUEFMX04iICAgICwgIlBBTF9OQyIgICwgIlBBTF82MCIgICwKKwkiU0VDQU1fQiIgICwgIlNFQ0FNX0QiICwgIlNFQ0FNX0ciICwKKwkiU0VDQU1fSyIgICwgIlNFQ0FNX0sxIiwgIlNFQ0FNX0wiICwKKwkiU0VDQU1fNjAiCit9OworCisjZGVmaW5lIFRWX0ZPUk1BVF9OVU0gIChzaXplb2YodHZfZm9ybWF0X25hbWVzKSAvIHNpemVvZigqdHZfZm9ybWF0X25hbWVzKSkKKwogc3RydWN0IGludGVsX3Nkdm9fcHJpdiB7CiAJdTggc2xhdmVfYWRkcjsKIApAQCAtNzEsNiArODMsMTUgQEAKIAkgKi8KIAlib29sIGlzX3R2OwogCisJLyogVGhpcyBpcyBmb3IgY3VycmVudCB0diBmb3JtYXQgbmFtZSAqLworCWNoYXIgKnR2X2Zvcm1hdF9uYW1lOworCisJLyogVGhpcyBjb250YWlucyBhbGwgY3VycmVudCBzdXBwb3J0ZWQgVFYgZm9ybWF0ICovCisJY2hhciAqdHZfZm9ybWF0X3N1cHBvcnRlZFtUVl9GT1JNQVRfTlVNXTsKKwlpbnQgICBmb3JtYXRfc3VwcG9ydGVkX251bTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9mb3JtYXRfcHJvcGVydHk7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfZm9ybWF0X25hbWVfcHJvcGVydHlbVFZfRk9STUFUX05VTV07CisKIAkvKioKIAkgKiBUaGlzIGlzIHNldCBpZiB3ZSB0cmVhdCB0aGUgZGV2aWNlIGFzIEhETUksIGluc3RlYWQgb2YgRFZJLgogCSAqLwpAQCAtOTcsMTQgKzExOCw2IEBACiAJICovCiAJc3RydWN0IGludGVsX3Nkdm9fc2R0dl9yZXNvbHV0aW9uX3JlcGx5IHNkdHZfcmVzb2x1dGlvbnM7CiAKLQkvKioKLQkgKiBDdXJyZW50IHNlbGVjdGVkIFRWIGZvcm1hdC4KLQkgKgotCSAqIFRoaXMgaXMgc3RvcmVkIGluIHRoZSBzYW1lIHN0cnVjdHVyZSB0aGF0J3MgcGFzc2VkIHRvIHRoZSBkZXZpY2UsIGZvcgotCSAqIGNvbnZlbmllbmNlLgotCSAqLwotCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCB0dl9mb3JtYXQ7Ci0KIAkvKgogCSAqIHN1cHBvcnRlZCBlbmNvZGluZyBtb2RlLCB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIEhETUkgaXMKIAkgKiBzdXBwb3J0ZWQKQEAgLTExNCw2ICsxMjcsOSBAQAogCS8qIEREQyBidXMgdXNlZCBieSB0aGlzIFNEVk8gb3V0cHV0ICovCiAJdWludDhfdCBkZGNfYnVzOwogCisJLyogTWFjIG1pbmkgaGFjayAtLSB1c2UgdGhlIHNhbWUgRERDIGFzIHRoZSBhbmFsb2cgY29ubmVjdG9yICovCisJc3RydWN0IGkyY19hZGFwdGVyICphbmFsb2dfZGRjX2J1czsKKwogCWludCBzYXZlX3Nkdm9fbXVsdDsKIAl1MTYgc2F2ZV9hY3RpdmVfb3V0cHV0czsKIAlzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgc2F2ZV9pbnB1dF9kdGRfMSwgc2F2ZV9pbnB1dF9kdGRfMjsKQEAgLTE4OCw3ICsyMDQsNyBAQAogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlEUk1fREVCVUcoImkyYyB0cmFuc2ZlciByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwlEUk1fREVCVUdfS01TKCJpMmMgdHJhbnNmZXIgcmV0dXJuZWQgJWRcbiIsIHJldCk7CiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC0yOTgsNyArMzE0LDcgQEAKIAlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OwogCWludCBpOwogCi0JRFJNX0RFQlVHX0tNUyhJOTE1X1NEVk8sICIlczogVzogJTAyWCAiLAorCURSTV9ERUJVR19LTVMoIiVzOiBXOiAlMDJYICIsCiAJCQkJU0RWT19OQU1FKHNkdm9fcHJpdiksIGNtZCk7CiAJZm9yIChpID0gMDsgaSA8IGFyZ3NfbGVuOyBpKyspCiAJCURSTV9MT0dfS01TKCIlMDJYICIsICgodTggKilhcmdzKVtpXSk7CkBAIC0zNTEsNyArMzY3LDcgQEAKIAlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OwogCWludCBpOwogCi0JRFJNX0RFQlVHX0tNUyhJOTE1X1NEVk8sICIlczogUjogIiwgU0RWT19OQU1FKHNkdm9fcHJpdikpOworCURSTV9ERUJVR19LTVMoIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CiAJZm9yIChpID0gMDsgaSA8IHJlc3BvbnNlX2xlbjsgaSsrKQogCQlEUk1fTE9HX0tNUygiJTAyWCAiLCAoKHU4ICopcmVzcG9uc2UpW2ldKTsKIAlmb3IgKDsgaSA8IDg7IGkrKykKQEAgLTY2OCwxMCArNjg0LDEwIEBACiAJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgJnJlc3BvbnNlLCAxKTsKIAogCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJRFJNX0RFQlVHKCJDb3VsZG4ndCBnZXQgU0RWTyBjbG9jayByYXRlIG11bHRpcGxpZXJcbiIpOworCQlEUk1fREVCVUdfS01TKCJDb3VsZG4ndCBnZXQgU0RWTyBjbG9jayByYXRlIG11bHRpcGxpZXJcbiIpOwogCQlyZXR1cm4gU0RWT19DTE9DS19SQVRFX01VTFRfMVg7CiAJfSBlbHNlIHsKLQkJRFJNX0RFQlVHKCJDdXJyZW50IGNsb2NrIHJhdGUgbXVsdGlwbGllcjogJWRcbiIsIHJlc3BvbnNlKTsKKwkJRFJNX0RFQlVHX0tNUygiQ3VycmVudCBjbG9jayByYXRlIG11bHRpcGxpZXI6ICVkXG4iLCByZXNwb25zZSk7CiAJfQogCiAJcmV0dXJuIHJlc3BvbnNlOwpAQCAtOTQ1LDIzICs5NjEsMjggQEAKIAogc3RhdGljIHZvaWQgaW50ZWxfc2R2b19zZXRfdHZfZm9ybWF0KHN0cnVjdCBpbnRlbF9vdXRwdXQgKm91dHB1dCkKIHsKLQlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBvdXRwdXQtPmRldl9wcml2OwotCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCAqZm9ybWF0LCB1bnNldDsKLQl1OCBzdGF0dXM7CiAKLQlmb3JtYXQgPSAmc2R2b19wcml2LT50dl9mb3JtYXQ7Ci0JbWVtc2V0KCZ1bnNldCwgMCwgc2l6ZW9mKHVuc2V0KSk7Ci0JaWYgKG1lbWNtcChmb3JtYXQsICZ1bnNldCwgc2l6ZW9mKCpmb3JtYXQpKSkgewotCQlEUk1fREVCVUcoIiVzOiBDaG9vc2luZyBkZWZhdWx0IFRWIGZvcm1hdCBvZiBOVFNDLU1cbiIsCi0JCQkJU0RWT19OQU1FKHNkdm9fcHJpdikpOwotCQlmb3JtYXQtPm50c2NfbSA9IDE7Ci0JCWludGVsX3Nkdm9fd3JpdGVfY21kKG91dHB1dCwgU0RWT19DTURfU0VUX1RWX0ZPUk1BVCwgZm9ybWF0LAotCQkJCXNpemVvZigqZm9ybWF0KSk7Ci0JCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShvdXRwdXQsIE5VTEwsIDApOwotCQlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQotCQkJRFJNX0RFQlVHKCIlczogRmFpbGVkIHRvIHNldCBUViBmb3JtYXRcbiIsCi0JCQkJCVNEVk9fTkFNRShzZHZvX3ByaXYpKTsKLQl9CisJc3RydWN0IGludGVsX3Nkdm9fdHZfZm9ybWF0IGZvcm1hdDsKKwlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBvdXRwdXQtPmRldl9wcml2OworCXVpbnQzMl90IGZvcm1hdF9tYXAsIGk7CisJdWludDhfdCBzdGF0dXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFZfRk9STUFUX05VTTsgaSsrKQorCQlpZiAodHZfZm9ybWF0X25hbWVzW2ldID09IHNkdm9fcHJpdi0+dHZfZm9ybWF0X25hbWUpCisJCQlicmVhazsKKworCWZvcm1hdF9tYXAgPSAxIDw8IGk7CisJbWVtc2V0KCZmb3JtYXQsIDAsIHNpemVvZihmb3JtYXQpKTsKKwltZW1jcHkoJmZvcm1hdCwgJmZvcm1hdF9tYXAsIHNpemVvZihmb3JtYXRfbWFwKSA+IHNpemVvZihmb3JtYXQpID8KKwkJCXNpemVvZihmb3JtYXQpIDogc2l6ZW9mKGZvcm1hdF9tYXApKTsKKworCWludGVsX3Nkdm9fd3JpdGVfY21kKG91dHB1dCwgU0RWT19DTURfU0VUX1RWX0ZPUk1BVCwgJmZvcm1hdF9tYXAsCisJCQkgICAgIHNpemVvZihmb3JtYXQpKTsKKworCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShvdXRwdXQsIE5VTEwsIDApOworCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCisJCURSTV9ERUJVRygiJXM6IEZhaWxlZCB0byBzZXQgVFYgZm9ybWF0XG4iLAorCQkJICBTRFZPX05BTUUoc2R2b19wcml2KSk7CiB9CiAKIHN0YXRpYyBib29sIGludGVsX3Nkdm9fbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCkBAIC0xMjMwLDggKzEyNTEsOCBAQAogCQkgKiBhIGdpdmVuIGl0IHRoZSBzdGF0dXMgaXMgYSBzdWNjZXNzLCB3ZSBzdWNjZWVkZWQuCiAJCSAqLwogCQlpZiAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTICYmICFpbnB1dDEpIHsKLQkJCURSTV9ERUJVRygiRmlyc3QgJXMgb3V0cHV0IHJlcG9ydGVkIGZhaWx1cmUgdG8gc3luY1xuIiwKLQkJCQkgICBTRFZPX05BTUUoc2R2b19wcml2KSk7CisJCQlEUk1fREVCVUdfS01TKCJGaXJzdCAlcyBvdXRwdXQgcmVwb3J0ZWQgZmFpbHVyZSB0byAiCisJCQkJCSJzeW5jXG4iLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CiAJCX0KIAogCQlpZiAoMCkKQEAgLTEzMjYsOCArMTM0Nyw4IEBACiAJCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKIAkJc3RhdHVzID0gaW50ZWxfc2R2b19nZXRfdHJhaW5lZF9pbnB1dHMoaW50ZWxfb3V0cHV0LCAmaW5wdXQxLCAmaW5wdXQyKTsKIAkJaWYgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUyAmJiAhaW5wdXQxKQotCQkJRFJNX0RFQlVHKCJGaXJzdCAlcyBvdXRwdXQgcmVwb3J0ZWQgZmFpbHVyZSB0byBzeW5jXG4iLAotCQkJCSAgIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKKwkJCURSTV9ERUJVR19LTVMoIkZpcnN0ICVzIG91dHB1dCByZXBvcnRlZCBmYWlsdXJlIHRvICIKKwkJCQkJInN5bmNcbiIsIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKIAl9CiAKIAlpbnRlbF9zZHZvX3NldF9hY3RpdmVfb3V0cHV0cyhpbnRlbF9vdXRwdXQsIHNkdm9fcHJpdi0+c2F2ZV9hY3RpdmVfb3V0cHV0cyk7CkBAIC0xNDA1LDcgKzE0MjYsNyBAQAogCXU4IHJlc3BvbnNlWzJdOwogCXU4IHN0YXR1czsKIAlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQ7Ci0JRFJNX0RFQlVHKCJcbiIpOworCURSTV9ERUJVR19LTVMoIlxuIik7CiAKIAlpZiAoIWNvbm5lY3RvcikKIAkJcmV0dXJuIDA7CkBAIC0xNDc4LDYgKzE0OTksMzYgQEAKIAlyZXR1cm4gKGNhcHMgPiAxKTsKIH0KIAorc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yICoKK2ludGVsX2ZpbmRfYW5hbG9nX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCQlpZiAoaW50ZWxfb3V0cHV0LT50eXBlID09IElOVEVMX09VVFBVVF9BTkFMT0cpCisJCQlyZXR1cm4gY29ubmVjdG9yOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAoraW50ZWxfYW5hbG9nX2lzX2Nvbm5lY3RlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICphbmFsb2dfY29ubmVjdG9yOworCWFuYWxvZ19jb25uZWN0b3IgPSBpbnRlbF9maW5kX2FuYWxvZ19jb25uZWN0b3IoZGV2KTsKKworCWlmICghYW5hbG9nX2Nvbm5lY3RvcikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGFuYWxvZ19jb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoYW5hbG9nX2Nvbm5lY3RvcikgPT0KKwkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwogaW50ZWxfc2R2b19oZG1pX3NpbmtfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHUxNiByZXNwb25zZSkKIHsKQEAgLTE0ODgsNiArMTUzOSwxNSBAQAogCiAJZWRpZCA9IGRybV9nZXRfZWRpZCgmaW50ZWxfb3V0cHV0LT5iYXNlLAogCQkJICAgIGludGVsX291dHB1dC0+ZGRjX2J1cyk7CisKKwkvKiB3aGVuIHRoZXJlIGlzIG5vIGVkaWQgYW5kIG5vIG1vbml0b3IgaXMgY29ubmVjdGVkIHdpdGggVkdBCisJICogcG9ydCwgdHJ5IHRvIHVzZSB0aGUgQ1JUIGRkYyB0byByZWFkIHRoZSBFRElEIGZvciBEVkktY29ubmVjdG9yCisJICovCisJaWYgKGVkaWQgPT0gTlVMTCAmJgorCSAgICBzZHZvX3ByaXYtPmFuYWxvZ19kZGNfYnVzICYmCisJICAgICFpbnRlbF9hbmFsb2dfaXNfY29ubmVjdGVkKGludGVsX291dHB1dC0+YmFzZS5kZXYpKQorCQllZGlkID0gZHJtX2dldF9lZGlkKCZpbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkJICAgIHNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMpOwogCWlmIChlZGlkICE9IE5VTEwpIHsKIAkJLyogRG9uJ3QgcmVwb3J0IHRoZSBvdXRwdXQgYXMgY29ubmVjdGVkIGlmIGl0J3MgYSBEVkktSQogCQkgKiBjb25uZWN0b3Igd2l0aCBhIG5vbi1kaWdpdGFsIEVESUQgY29taW5nIG91dC4KQEAgLTE1MTYsMTAgKzE1NzYsMTEgQEAKIAlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKIAlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OwogCi0JaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9HRVRfQVRUQUNIRURfRElTUExBWVMsIE5VTEwsIDApOworCWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX291dHB1dCwKKwkJCSAgICAgU0RWT19DTURfR0VUX0FUVEFDSEVEX0RJU1BMQVlTLCBOVUxMLCAwKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsIDIpOwogCi0JRFJNX0RFQlVHKCJTRFZPIHJlc3BvbnNlICVkICVkXG4iLCByZXNwb25zZSAmIDB4ZmYsIHJlc3BvbnNlID4+IDgpOworCURSTV9ERUJVR19LTVMoIlNEVk8gcmVzcG9uc2UgJWQgJWRcbiIsIHJlc3BvbnNlICYgMHhmZiwgcmVzcG9uc2UgPj4gOCk7CiAKIAlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwpAQCAtMTU0MCw1MCArMTYwMSwzMiBAQAogc3RhdGljIHZvaWQgaW50ZWxfc2R2b19nZXRfZGRjX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwlpbnQgbnVtX21vZGVzOwogCiAJLyogc2V0IHRoZSBidXMgc3dpdGNoIGFuZCBnZXQgdGhlIG1vZGVzICovCi0JaW50ZWxfZGRjX2dldF9tb2RlcyhpbnRlbF9vdXRwdXQpOworCW51bV9tb2RlcyA9IGludGVsX2RkY19nZXRfbW9kZXMoaW50ZWxfb3V0cHV0KTsKIAotI2lmIDAKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JLyogTWFjIG1pbmkgaGFjay4gIE9uIHRoaXMgZGV2aWNlLCBJIGdldCBEREMgdGhyb3VnaCB0aGUgYW5hbG9nLCB3aGljaAotCSAqIGxvYWQtZGV0ZWN0cyBhcyBkaXNjb25uZWN0ZWQuICBJIGZhaWwgdG8gRERDIHRocm91Z2ggdGhlIFNEVk8gRERDLAotCSAqIGJ1dCBpdCBkb2VzIGxvYWQtZGV0ZWN0IGFzIGNvbm5lY3RlZC4gIFNvLCBqdXN0IHN0ZWFsIHRoZSBEREMgYml0cwotCSAqIGZyb20gYW5hbG9nIHdoZW4gd2UgZmFpbCBhdCBmaW5kaW5nIGl0IHRoZSByaWdodCB3YXkuCisJLyoKKwkgKiBNYWMgbWluaSBoYWNrLiAgT24gdGhpcyBkZXZpY2UsIHRoZSBEVkktSSBjb25uZWN0b3Igc2hhcmVzIG9uZSBEREMKKwkgKiBsaW5rIGJldHdlZW4gYW5hbG9nIGFuZCBkaWdpdGFsIG91dHB1dHMuIFNvLCBpZiB0aGUgcmVndWxhciBTRFZPCisJICogRERDIGZhaWxzLCBjaGVjayB0byBzZWUgaWYgdGhlIGFuYWxvZyBvdXRwdXQgaXMgZGlzY29ubmVjdGVkLCBpbgorCSAqIHdoaWNoIGNhc2Ugd2UnbGwgbG9vayB0aGVyZSBmb3IgdGhlIGRpZ2l0YWwgRERDIGRhdGEuCiAJICovCi0JY3J0ID0geGY4Nl9jb25maWctPm91dHB1dFswXTsKLQlpbnRlbF9vdXRwdXQgPSBjcnQtPmRyaXZlcl9wcml2YXRlOwotCWlmIChpbnRlbF9vdXRwdXQtPnR5cGUgPT0gSTgzMF9PVVRQVVRfQU5BTE9HICYmCi0JICAgIGNydC0+ZnVuY3MtPmRldGVjdChjcnQpID09IFhGODZPdXRwdXRTdGF0dXNEaXNjb25uZWN0ZWQpIHsKLQkJSTgzMEkyQ0luaXQocFNjcm4sICZpbnRlbF9vdXRwdXQtPnBERENCdXMsIEdQSU9BLCAiQ1JURERDX0EiKTsKLQkJZWRpZF9tb24gPSB4Zjg2T3V0cHV0R2V0RURJRChjcnQsIGludGVsX291dHB1dC0+cEREQ0J1cyk7Ci0JCXhmODZEZXN0cm95STJDQnVzUmVjKGludGVsX291dHB1dC0+cEREQ0J1cywgdHJ1ZSwgdHJ1ZSk7CisJaWYgKG51bV9tb2RlcyA9PSAwICYmCisJICAgIHNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMgJiYKKwkgICAgIWludGVsX2FuYWxvZ19pc19jb25uZWN0ZWQoaW50ZWxfb3V0cHV0LT5iYXNlLmRldikpIHsKKwkJc3RydWN0IGkyY19hZGFwdGVyICpkaWdpdGFsX2RkY19idXM7CisKKwkJLyogU3dpdGNoIHRvIHRoZSBhbmFsb2cgZGRjIGJ1cyBhbmQgdHJ5IHRoYXQKKwkJICovCisJCWRpZ2l0YWxfZGRjX2J1cyA9IGludGVsX291dHB1dC0+ZGRjX2J1czsKKwkJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1czsKKworCQkodm9pZCkgaW50ZWxfZGRjX2dldF9tb2RlcyhpbnRlbF9vdXRwdXQpOworCisJCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGRpZ2l0YWxfZGRjX2J1czsKIAl9Ci0JaWYgKGVkaWRfbW9uKSB7Ci0JCXhmODZPdXRwdXRTZXRFRElEKG91dHB1dCwgZWRpZF9tb24pOwotCQltb2RlcyA9IHhmODZPdXRwdXRHZXRFRElETW9kZXMob3V0cHV0KTsKLQl9Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgY3VycmVudCBUViBmb3JtYXQsIGFuZCBjaG9vc2VzIGEgZGVmYXVsdCBpZgotICogaXQgaGFzbid0IGJlZW4gc2V0LgotICovCi1zdGF0aWMgdm9pZAotaW50ZWxfc2R2b19jaGVja190dl9mb3JtYXQoc3RydWN0IGludGVsX291dHB1dCAqb3V0cHV0KQotewotCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKmRldl9wcml2ID0gb3V0cHV0LT5kZXZfcHJpdjsKLQlzdHJ1Y3QgaW50ZWxfc2R2b190dl9mb3JtYXQgZm9ybWF0OwotCXVpbnQ4X3Qgc3RhdHVzOwotCi0JaW50ZWxfc2R2b193cml0ZV9jbWQob3V0cHV0LCBTRFZPX0NNRF9HRVRfVFZfRk9STUFULCBOVUxMLCAwKTsKLQlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSk7Ci0JaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKLQkJcmV0dXJuOwotCi0JbWVtY3B5KCZkZXZfcHJpdi0+dHZfZm9ybWF0LCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSk7CiB9CiAKIC8qCkBAIC0xNjU2LDE3ICsxNjk5LDI2IEBACiAJc3RydWN0IGludGVsX291dHB1dCAqb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CiAJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gb3V0cHV0LT5kZXZfcHJpdjsKIAlzdHJ1Y3QgaW50ZWxfc2R2b19zZHR2X3Jlc29sdXRpb25fcmVxdWVzdCB0dl9yZXM7Ci0JdWludDMyX3QgcmVwbHkgPSAwOworCXVpbnQzMl90IHJlcGx5ID0gMCwgZm9ybWF0X21hcCA9IDA7CisJaW50IGk7CiAJdWludDhfdCBzdGF0dXM7Ci0JaW50IGkgPSAwOwogCi0JaW50ZWxfc2R2b19jaGVja190dl9mb3JtYXQob3V0cHV0KTsKIAogCS8qIFJlYWQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGlucHV0IHJlc29sdXRpb25zIGZvciB0aGUgc2VsZWN0ZWQgVFYKIAkgKiBmb3JtYXQuCiAJICovCi0JbWVtc2V0KCZ0dl9yZXMsIDAsIHNpemVvZih0dl9yZXMpKTsKLQltZW1jcHkoJnR2X3JlcywgJnNkdm9fcHJpdi0+dHZfZm9ybWF0LCBzaXplb2YodHZfcmVzKSk7CisJZm9yIChpID0gMDsgaSA8IFRWX0ZPUk1BVF9OVU07IGkrKykKKwkJaWYgKHR2X2Zvcm1hdF9uYW1lc1tpXSA9PSAgc2R2b19wcml2LT50dl9mb3JtYXRfbmFtZSkKKwkJCWJyZWFrOworCisJZm9ybWF0X21hcCA9ICgxIDw8IGkpOworCW1lbWNweSgmdHZfcmVzLCAmZm9ybWF0X21hcCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbnRlbF9zZHZvX3NkdHZfcmVzb2x1dGlvbl9yZXF1ZXN0KSA+CisJICAgICAgIHNpemVvZihmb3JtYXRfbWFwKSA/IHNpemVvZihmb3JtYXRfbWFwKSA6CisJICAgICAgIHNpemVvZihzdHJ1Y3QgaW50ZWxfc2R2b19zZHR2X3Jlc29sdXRpb25fcmVxdWVzdCkpOworCisJaW50ZWxfc2R2b19zZXRfdGFyZ2V0X291dHB1dChvdXRwdXQsIHNkdm9fcHJpdi0+Y29udHJvbGxlZF9vdXRwdXQpOworCiAJaW50ZWxfc2R2b193cml0ZV9jbWQob3V0cHV0LCBTRFZPX0NNRF9HRVRfU0RUVl9SRVNPTFVUSU9OX1NVUFBPUlQsCiAJCQkgICAgICZ0dl9yZXMsIHNpemVvZih0dl9yZXMpKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCAmcmVwbHksIDMpOwpAQCAtMTY4MSw2ICsxNzMzLDcgQEAKIAkJCWlmIChubW9kZSkKIAkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3Rvciwgbm1vZGUpOwogCQl9CisKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfc2R2b19nZXRfbHZkc19tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQpAQCAtMTc0OCwxNyArMTgwMSw2MiBAQAogCQlpbnRlbF9pMmNfZGVzdHJveShpbnRlbF9vdXRwdXQtPmkyY19idXMpOwogCWlmIChpbnRlbF9vdXRwdXQtPmRkY19idXMpCiAJCWludGVsX2kyY19kZXN0cm95KGludGVsX291dHB1dC0+ZGRjX2J1cyk7CisJaWYgKHNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMpCisJCWludGVsX2kyY19kZXN0cm95KHNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMpOwogCiAJaWYgKHNkdm9fcHJpdi0+c2R2b19sdmRzX2ZpeGVkX21vZGUgIT0gTlVMTCkKIAkJZHJtX21vZGVfZGVzdHJveShjb25uZWN0b3ItPmRldiwKIAkJCQkgc2R2b19wcml2LT5zZHZvX2x2ZHNfZml4ZWRfbW9kZSk7CiAKKwlpZiAoc2R2b19wcml2LT50dl9mb3JtYXRfcHJvcGVydHkpCisJCWRybV9wcm9wZXJ0eV9kZXN0cm95KGNvbm5lY3Rvci0+ZGV2LAorCQkJCSAgICAgc2R2b19wcml2LT50dl9mb3JtYXRfcHJvcGVydHkpOworCiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKIAlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKIAogCWtmcmVlKGludGVsX291dHB1dCk7CiB9CiAKK3N0YXRpYyBpbnQKK2ludGVsX3Nkdm9fc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJCXVpbnQ2NF90IHZhbCkKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5jcnRjOworCWludCByZXQgPSAwOworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLCBwcm9wZXJ0eSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAocHJvcGVydHkgPT0gc2R2b19wcml2LT50dl9mb3JtYXRfcHJvcGVydHkpIHsKKwkJaWYgKHZhbCA+PSBUVl9GT1JNQVRfTlVNKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHNkdm9fcHJpdi0+dHZfZm9ybWF0X25hbWUgPT0KKwkJICAgIHNkdm9fcHJpdi0+dHZfZm9ybWF0X3N1cHBvcnRlZFt2YWxdKQorCQkJZ290byBvdXQ7CisKKwkJc2R2b19wcml2LT50dl9mb3JtYXRfbmFtZSA9IHNkdm9fcHJpdi0+dHZfZm9ybWF0X3N1cHBvcnRlZFt2YWxdOworCQljaGFuZ2VkID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmJiBjcnRjKQorCQlkcm1fY3J0Y19oZWxwZXJfc2V0X21vZGUoY3J0YywgJmNydGMtPm1vZGUsIGNydGMtPngsCisJCQkJY3J0Yy0+eSwgY3J0Yy0+ZmIpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGludGVsX3Nkdm9faGVscGVyX2Z1bmNzID0gewogCS5kcG1zID0gaW50ZWxfc2R2b19kcG1zLAogCS5tb2RlX2ZpeHVwID0gaW50ZWxfc2R2b19tb2RlX2ZpeHVwLApAQCAtMTc3Myw2ICsxODcxLDcgQEAKIAkucmVzdG9yZSA9IGludGVsX3Nkdm9fcmVzdG9yZSwKIAkuZGV0ZWN0ID0gaW50ZWxfc2R2b19kZXRlY3QsCiAJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLnNldF9wcm9wZXJ0eSA9IGludGVsX3Nkdm9fc2V0X3Byb3BlcnR5LAogCS5kZXN0cm95ID0gaW50ZWxfc2R2b19kZXN0cm95LAogfTsKIApAQCAtMjAxMywxMCArMjExMiw5IEBACiAKIAkJc2R2b19wcml2LT5jb250cm9sbGVkX291dHB1dCA9IDA7CiAJCW1lbWNweShieXRlcywgJnNkdm9fcHJpdi0+Y2Fwcy5vdXRwdXRfZmxhZ3MsIDIpOwotCQlEUk1fREVCVUdfS01TKEk5MTVfU0RWTywKLQkJCQkiJXM6IFVua25vd24gU0RWTyBvdXRwdXQgdHlwZSAoMHglMDJ4JTAyeClcbiIsCi0JCQkJICBTRFZPX05BTUUoc2R2b19wcml2KSwKLQkJCQkgIGJ5dGVzWzBdLCBieXRlc1sxXSk7CisJCURSTV9ERUJVR19LTVMoIiVzOiBVbmtub3duIFNEVk8gb3V0cHV0IHR5cGUgKDB4JTAyeCUwMngpXG4iLAorCQkJICAgICAgU0RWT19OQU1FKHNkdm9fcHJpdiksCisJCQkgICAgICBieXRlc1swXSwgYnl0ZXNbMV0pOwogCQlyZXQgPSBmYWxzZTsKIAl9CiAJaW50ZWxfb3V0cHV0LT5jcnRjX21hc2sgPSAoMSA8PCAwKSB8ICgxIDw8IDEpOwpAQCAtMjAyOSw2ICsyMTI3LDU1IEBACiAKIH0KIAorc3RhdGljIHZvaWQgaW50ZWxfc2R2b190dl9jcmVhdGVfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKyAgICAgIHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3Nkdm9fdHZfZm9ybWF0IGZvcm1hdDsKKwl1aW50MzJfdCBmb3JtYXRfbWFwLCBpOworCXVpbnQ4X3Qgc3RhdHVzOworCisJaW50ZWxfc2R2b19zZXRfdGFyZ2V0X291dHB1dChpbnRlbF9vdXRwdXQsCisJCQkJICAgICBzZHZvX3ByaXYtPmNvbnRyb2xsZWRfb3V0cHV0KTsKKworCWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX291dHB1dCwKKwkJCSAgICAgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9UVl9GT1JNQVRTLCBOVUxMLCAwKTsKKwlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LAorCQkJCQkgICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKTsKKwlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm47CisKKwltZW1jcHkoJmZvcm1hdF9tYXAsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpID4gc2l6ZW9mKGZvcm1hdF9tYXApID8KKwkgICAgICAgc2l6ZW9mKGZvcm1hdF9tYXApIDogc2l6ZW9mKGZvcm1hdCkpOworCisJaWYgKGZvcm1hdF9tYXAgPT0gMCkKKwkJcmV0dXJuOworCisJc2R2b19wcml2LT5mb3JtYXRfc3VwcG9ydGVkX251bSA9IDA7CisJZm9yIChpID0gMCA7IGkgPCBUVl9GT1JNQVRfTlVNOyBpKyspCisJCWlmIChmb3JtYXRfbWFwICYgKDEgPDwgaSkpIHsKKwkJCXNkdm9fcHJpdi0+dHZfZm9ybWF0X3N1cHBvcnRlZAorCQkJW3Nkdm9fcHJpdi0+Zm9ybWF0X3N1cHBvcnRlZF9udW0rK10gPQorCQkJdHZfZm9ybWF0X25hbWVzW2ldOworCQl9CisKKworCXNkdm9fcHJpdi0+dHZfZm9ybWF0X3Byb3BlcnR5ID0KKwkJCWRybV9wcm9wZXJ0eV9jcmVhdGUoCisJCQkJY29ubmVjdG9yLT5kZXYsIERSTV9NT0RFX1BST1BfRU5VTSwKKwkJCQkibW9kZSIsIHNkdm9fcHJpdi0+Zm9ybWF0X3N1cHBvcnRlZF9udW0pOworCisJZm9yIChpID0gMDsgaSA8IHNkdm9fcHJpdi0+Zm9ybWF0X3N1cHBvcnRlZF9udW07IGkrKykKKwkJZHJtX3Byb3BlcnR5X2FkZF9lbnVtKAorCQkJCXNkdm9fcHJpdi0+dHZfZm9ybWF0X3Byb3BlcnR5LCBpLAorCQkJCWksIHNkdm9fcHJpdi0+dHZfZm9ybWF0X3N1cHBvcnRlZFtpXSk7CisKKwlzZHZvX3ByaXYtPnR2X2Zvcm1hdF9uYW1lID0gc2R2b19wcml2LT50dl9mb3JtYXRfc3VwcG9ydGVkWzBdOworCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KAorCQkJY29ubmVjdG9yLCBzZHZvX3ByaXYtPnR2X2Zvcm1hdF9wcm9wZXJ0eSwgMCk7CisKK30KKwogYm9vbCBpbnRlbF9zZHZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG91dHB1dF9kZXZpY2UpCiB7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKQEAgLTIwNjYsMTggKzIyMTMsMjIgQEAKIAkvKiBSZWFkIHRoZSByZWdzIHRvIHRlc3QgaWYgd2UgY2FuIHRhbGsgdG8gdGhlIGRldmljZSAqLwogCWZvciAoaSA9IDA7IGkgPCAweDQwOyBpKyspIHsKIAkJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9vdXRwdXQsIGksICZjaFtpXSkpIHsKLQkJCURSTV9ERUJVR19LTVMoSTkxNV9TRFZPLAotCQkJCQkiTm8gU0RWTyBkZXZpY2UgZm91bmQgb24gU0RWTyVjXG4iLAorCQkJRFJNX0RFQlVHX0tNUygiTm8gU0RWTyBkZXZpY2UgZm91bmQgb24gU0RWTyVjXG4iLAogCQkJCQlvdXRwdXRfZGV2aWNlID09IFNEVk9CID8gJ0InIDogJ0MnKTsKIAkJCWdvdG8gZXJyX2kyYzsKIAkJfQogCX0KIAogCS8qIHNldHVwIHRoZSBEREMgYnVzLiAqLwotCWlmIChvdXRwdXRfZGV2aWNlID09IFNEVk9CKQorCWlmIChvdXRwdXRfZGV2aWNlID09IFNEVk9CKSB7CiAJCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPRSwgIlNEVk9CIEREQyBCVVMiKTsKLQllbHNlCisJCXNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0EsCisJCQkJCQkiU0RWT0IvVkdBIEREQyBCVVMiKTsKKwl9IGVsc2UgewogCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0UsICJTRFZPQyBEREMgQlVTIik7CisJCXNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0EsCisJCQkJCQkiU0RWT0MvVkdBIEREQyBCVVMiKTsKKwl9CiAKIAlpZiAoaW50ZWxfb3V0cHV0LT5kZGNfYnVzID09IE5VTEwpCiAJCWdvdG8gZXJyX2kyYzsKQEAgLTIwOTAsNyArMjI0MSw3IEBACiAKIAlpZiAoaW50ZWxfc2R2b19vdXRwdXRfc2V0dXAoaW50ZWxfb3V0cHV0LAogCQkJCSAgICBzZHZvX3ByaXYtPmNhcHMub3V0cHV0X2ZsYWdzKSAhPSB0cnVlKSB7Ci0JCURSTV9ERUJVRygiU0RWTyBvdXRwdXQgZmFpbGVkIHRvIHNldHVwIG9uIFNEVk8lY1xuIiwKKwkJRFJNX0RFQlVHX0tNUygiU0RWTyBvdXRwdXQgZmFpbGVkIHRvIHNldHVwIG9uIFNEVk8lY1xuIiwKIAkJCSAgb3V0cHV0X2RldmljZSA9PSBTRFZPQiA/ICdCJyA6ICdDJyk7CiAJCWdvdG8gZXJyX2kyYzsKIAl9CkBAIC0yMTExLDYgKzIyNjIsOCBAQAogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmludGVsX291dHB1dC0+ZW5jLCAmaW50ZWxfc2R2b19oZWxwZXJfZnVuY3MpOwogCiAJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpbnRlbF9vdXRwdXQtPmJhc2UsICZpbnRlbF9vdXRwdXQtPmVuYyk7CisJaWYgKHNkdm9fcHJpdi0+aXNfdHYpCisJCWludGVsX3Nkdm9fdHZfY3JlYXRlX3Byb3BlcnR5KGNvbm5lY3Rvcik7CiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKIAogCWludGVsX3Nkdm9fc2VsZWN0X2RkY19idXMoc2R2b19wcml2KTsKQEAgLTIxMjMsNyArMjI3Niw3IEBACiAJCQkJCSAgICAgICAmc2R2b19wcml2LT5waXhlbF9jbG9ja19tYXgpOwogCiAKLQlEUk1fREVCVUdfS01TKEk5MTVfU0RWTywgIiVzIGRldmljZSBWSUQvRElEOiAlMDJYOiUwMlguJTAyWCwgIgorCURSTV9ERUJVR19LTVMoIiVzIGRldmljZSBWSUQvRElEOiAlMDJYOiUwMlguJTAyWCwgIgogCQkJImNsb2NrIHJhbmdlICVkTUh6IC0gJWRNSHosICIKIAkJCSJpbnB1dCAxOiAlYywgaW5wdXQgMjogJWMsICIKIAkJCSJvdXRwdXQgMTogJWMsIG91dHB1dCAyOiAlY1xuIiwKQEAgLTIxNDMsNiArMjI5Niw4IEBACiAJcmV0dXJuIHRydWU7CiAKIGVycl9pMmM6CisJaWYgKHNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMgIT0gTlVMTCkKKwkJaW50ZWxfaTJjX2Rlc3Ryb3koc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyk7CiAJaWYgKGludGVsX291dHB1dC0+ZGRjX2J1cyAhPSBOVUxMKQogCQlpbnRlbF9pMmNfZGVzdHJveShpbnRlbF9vdXRwdXQtPmRkY19idXMpOwogCWlmIChpbnRlbF9vdXRwdXQtPmkyY19idXMgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDViMWM5ZTkuLmM2NGVhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTQzNyw2ICsxNDM3LDM1IEBACiAJcmV0dXJuIHR5cGU7CiB9CiAKKy8qCisgKiBIZXJlIHdlIHNldCBhY2N1cmF0ZSB0diBmb3JtYXQgYWNjb3JkaW5nIHRvIGNvbm5lY3RvciB0eXBlCisgKiBpLmUgQ29tcG9uZW50IFRWIHNob3VsZCBub3QgYmUgYXNzaWduZWQgYnkgTlRTQyBvciBQQUwKKyAqLworc3RhdGljIHZvaWQgaW50ZWxfdHZfZmluZF9iZXR0ZXJfZm9ybWF0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX3R2X3ByaXYgKnR2X3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gaW50ZWxfdHZfbW9kZV9maW5kKGludGVsX291dHB1dCk7CisJaW50IGk7CisKKwlpZiAoKHR2X3ByaXYtPnR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudCkgPT0KKwkJdHZfbW9kZS0+Y29tcG9uZW50X29ubHkpCisJCXJldHVybjsKKworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih0dl9tb2RlcykgLyBzaXplb2YoKnR2X21vZGVzKTsgaSsrKSB7CisJCXR2X21vZGUgPSB0dl9tb2RlcyArIGk7CisKKwkJaWYgKCh0dl9wcml2LT50eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb25lbnQpID09CisJCQl0dl9tb2RlLT5jb21wb25lbnRfb25seSkKKwkJCWJyZWFrOworCX0KKworCXR2X3ByaXYtPnR2X2Zvcm1hdCA9IHR2X21vZGUtPm5hbWU7CisJZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLAorCQljb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcudHZfbW9kZV9wcm9wZXJ0eSwgaSk7Cit9CisKIC8qKgogICogRGV0ZWN0IHRoZSBUViBjb25uZWN0aW9uLgogICoKQEAgLTE0NzMsNiArMTUwMiw3IEBACiAJaWYgKHR5cGUgPCAwKQogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKKwlpbnRlbF90dl9maW5kX2JldHRlcl9mb3JtYXQoY29ubmVjdG9yKTsKIAlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKaW5kZXggNmM2N2EwMi4uM2M5MTdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpjb25zdCBkZXZfcHJpdiA9CiAJICAgIChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCB3YXJwX3NpemUgPSBtZ2Ffd2FycF9taWNyb2NvZGVfc2l6ZShkZXZfcHJpdik7CisJdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IE1HQV9XQVJQX1VDT0RFX1NJWkU7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBvZmZzZXQ7CiAJY29uc3QgdW5zaWduZWQgc2Vjb25kYXJ5X3NpemUgPSBkbWFfYnMtPnNlY29uZGFyeV9iaW5fY291bnQKQEAgLTYxOSw3ICs2MTksNyBAQAogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpjb25zdCBkZXZfcHJpdiA9CiAJICAgIChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCB3YXJwX3NpemUgPSBtZ2Ffd2FycF9taWNyb2NvZGVfc2l6ZShkZXZfcHJpdik7CisJdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IE1HQV9XQVJQX1VDT0RFX1NJWkU7CiAJdW5zaWduZWQgaW50IHByaW1hcnlfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgYmluX2NvdW50OwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCmluZGV4IDNkMjY0ZjI4Li5iZTZjNmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaApAQCAtMTc3LDcgKzE3Nyw2IEBACiBleHRlcm4gaW50IG1nYV9mcmVlbGlzdF9wdXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fYnVmICogYnVmKTsKIAogCQkJCS8qIG1nYV93YXJwLmMgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgbWdhX3dhcnBfbWljcm9jb2RlX3NpemUoY29uc3QgZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiBleHRlcm4gaW50IG1nYV93YXJwX2luc3RhbGxfbWljcm9jb2RlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogZXh0ZXJuIGludCBtZ2Ffd2FycF9pbml0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYwppbmRleCBiNzEwZmFiLi5hNTNiODQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCQkgIE1HQV9XUjM0LCAweDAwMDAwMDAwLAogCQkgIE1HQV9XUjQyLCAweDAwMDBmZmZmLCBNR0FfV1I2MCwgMHgwMDAwZmZmZik7CiAKLQkvKiBQYWRkaW5nIHJlcXVpcmVkIHRvIHRvIGhhcmR3YXJlIGJ1Zy4KKwkvKiBQYWRkaW5nIHJlcXVpcmVkIGR1ZSB0byBoYXJkd2FyZSBidWcuCiAJICovCiAJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4ZmZmZmZmZmYsCiAJCSAgTUdBX0RNQVBBRCwgMHhmZmZmZmZmZiwKQEAgLTMxNyw3ICszMTcsNyBAQAogCQkgIE1HQV9XUjUyLCBNR0FfRzQwMF9XUl9NQUdJQywJLyogdGV4MSB3aWR0aCAgICAgICAgKi8KIAkJICBNR0FfV1I2MCwgTUdBX0c0MDBfV1JfTUFHSUMpOwkvKiB0ZXgxIGhlaWdodCAgICAgICAqLwogCi0JLyogUGFkZGluZyByZXF1aXJlZCB0byB0byBoYXJkd2FyZSBidWcgKi8KKwkvKiBQYWRkaW5nIHJlcXVpcmVkIGR1ZSB0byBoYXJkd2FyZSBidWcgKi8KIAlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHhmZmZmZmZmZiwKIAkJICBNR0FfRE1BUEFELCAweGZmZmZmZmZmLAogCQkgIE1HQV9ETUFQQUQsIDB4ZmZmZmZmZmYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV91Y29kZS5oIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfdWNvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYxMWUyNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV91Y29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2NDUgKzAsMCBAQAotLyogbWdhX3Vjb2RlLmggLS0gTWF0cm94IEcyMDAvRzQwMCBXQVJQIGVuZ2luZSBtaWNyb2NvZGUgLSotIGxpbnV4LWMgLSotCi0gKiBDcmVhdGVkOiBUaHUgSmFuIDExIDIxOjIwOjQzIDIwMDEgYnkgZ2FyZXRoQHZhbGludXguY29tCi0gKgotICogQ29weXJpZ2h0IDE5OTkgTWF0cm94IEdyYXBoaWNzIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBNQVRST1ggR1JBUEhJQ1MgSU5DLiwgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKLSAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgotICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFCi0gKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBLZXJuZWwtYmFzZWQgV0FSUCBlbmdpbmUgbWFuYWdlbWVudDoKLSAqICAgIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4KLSAqLwotCi0vKgotICogV0FSUCBwaXBlcyBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbnMgdGhleSBwZXJmb3JtLCB3aGVyZToKLSAqCi0gKiAgIC0gVCBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHRleHR1cmUgc3RhZ2UgMAotICogICAtIFQyIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgYm90aCB0ZXh0dXJlIHN0YWdlIDAgYW5kIHRleHR1cmUgc3RhZ2UgMQotICogICAtIEcgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB0cmlhbmdsZSBpbnRlbnNpdHkgKEdvdXJhdWQgaW50ZXJwb2xhdGlvbikKLSAqICAgLSBaIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgWiBidWZmZXIgaW50ZXJwb2xhdGlvbgotICogICAtIFMgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBzcGVjdWxhciBoaWdobGlnaHQKLSAqICAgLSBBIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdGhlIGFscGhhIGNoYW5uZWwKLSAqICAgLSBGIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdmVydGV4IGZvZyBpbnRlcnBvbGF0aW9uCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RneltdID0gewotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg5OCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg4MSwgMHgwNCwKLQkweDg5LCAweDA0LAotCTB4MDEsIDB4MDQsCi0JMHgwOSwgMHgwNCwKLQotCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgxMSwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLQkweDQ5LCAweENDLCAweDQ5LCAweENELAotCi0JMHhEMSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDUxLCAweENDLCAweDUxLCAweENELAotCi0JMHg4MCwgMHgwNCwKLQkweDEwLCAweDA0LAotCTB4MDgsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4MDAsIDB4Q0MsIDB4QzAsIDB4Q0QsCi0JMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKLQotCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0JMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKLQotCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0JMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKLQotCTB4MTAsIDB4Q0MsIDB4MTAsIDB4Q0QsCi0JMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKLQotCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0JMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKLQotCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKLQotCTB4NzIsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0JMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4MzAsCi0JMHgxRCwgMHgzMCwKLQkweDU4LCAweEUzLAotCTB4MDAsIDB4RTAsCi0KLQkweEI1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDI0LCAweDQzLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDcyLAotCTB4MDksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDcyLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0JMHg5OCwgMHhFMSwKLQkweEI1LCAweDA1LAotCi0JMHhCRCwgMHgwNSwKLQkweDJFLCAweDMwLAotCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweEEwLCAweEU4LAotCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCi0KLQkweDQwLCAweDNDLCAweDQwLCAweEFELAotCTB4MzIsIDB4NkEsCi0JMHgyQSwgMHgzMCwKLQotCTB4MjAsIDB4NzMsCi0JMHgzMywgMHg2QSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4NzMsCi0KLQkweDFDLCAweDcyLAotCTB4ODMsIDB4RTIsCi0JMHg2MCwgMHg4MCwgMHgxNSwgMHhFQSwKLQotCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0JMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKLQotCTB4NDAsIDB4MzAsCi0JMHgwMCwgMHhFMCwKLQkweENDLCAweEUyLAotCTB4NjQsIDB4NzIsCi0KLQkweDI1LCAweDQyLCAweDUyLCAweEJGLAotCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCi0KLQkweDMwLCAweDJFLCAweDMwLCAweERGLAotCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCi0KLQkweDE4LCAweDFELCAweDQ1LCAweEU5LAotCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCi0KLQkweDJCLCAweDQ5LCAweDUxLCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHg3MywKLQotCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0JMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKLQotCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0JMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0JMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKLQotCTB4QjAsIDB4MTAsCi0JMHgwOCwgMHhFMywKLQkweDQwLCAweDEwLAotCTB4QjgsIDB4MTAsCi0KLQkweDI2LCAweEYwLCAweDMwLCAweENELAotCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCi0KLQkweDJCLCAweDgwLCAweDIwLCAweEU5LAotCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweEE2LCAweDIwLAotCTB4ODgsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLQkweDIwLCAweDJBLCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLQkweDQ2LCAweDI0LCAweDQ2LCAweERGLAotCi0JMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLQkweDIwLCAweDM4LCAweDgwLCAweEJGLAotCi0JMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLQkweDRFLCAweDJDLCAweDRFLCAweERGLAotCi0JMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLQkweDU2LCAweDM0LCAweDU2LCAweERGLAotCi0JMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLQkweDIwLCAweDFELCAweDIwLCAweERGLAotCi0JMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4MDUsCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4ODksIDB4RTIsCi0JMHgyQiwgMHgzMCwKLQotCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4NjgsCi0JMHhCRiwgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLQkweDI4LCAweDA1LAotCTB4OTcsIDB4NzQsCi0KLQkweDAwLCAweEUwLAotCTB4MkEsIDB4MTAsCi0JMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4QywgMHhFMiwKLQkweDk1LCAweDA1LAotCi0JMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLQkweDFGLCAweEMxLCAweDE1LCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBOCwgMHg2NywKLQkweDlGLCAweDZCLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI4LCAweEMwLCAweDI4LCAweEFELAotCTB4MUQsIDB4MjUsCi0JMHgyMCwgMHgwNSwKLQotCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0JMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKLQotCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKLQotCTB4MjAsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweEI2LCAweDQ5LCAweDUxLCAweEJCLAotCi0JMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLQkweDE5LCAweDIwLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLQkweDNELCAweDIwLCAweDNELCAweERGLAotCi0JMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLQkweDFELCAweDIwLCAweDFELCAweERGLAotCi0JMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLQkweDI5LCAweDQ5LCAweDJBLCAweEI4LAotCi0JMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLQkweDNCLCAweDQ4LCAweDUwLCAweEJELAotCi0JMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4ODIsIDB4RTEsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI2LCAweDMwLAotCTB4MjksIDB4MzAsCi0JMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKLQotCTB4MkIsIDB4NzIsCi0JMHhDMiwgMHhFMSwKLQkweDJDLCAweEMwLCAweDQ0LCAweEMyLAotCi0JMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLQkweDBELCAweDI0LCAweDJDLCAweEJGLAotCi0JMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDI1LCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDMyLCAweDNFLCAweDVGLCAweEU5LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4MzAsCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIyLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCi0KLQkweDE5LCAweEMwLCAweEIwLCAweEU4LAotCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCi0KLQkweDMzLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCi0JMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLQkweDI4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCi0KLQkweDlCLCAweDNCLCAweDMzLCAweERGLAotCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCi0KLQkweDMwLCAweDQyLCAweDU2LCAweDlGLAotCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCi0KLQkweDI4LCAweDI4LCAweDI0LCAweEFGLAotCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDA1LCAweDQ3LCAweDU3LCAweEJGLAotCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCi0KLQkweDg4LCAweDgwLCAweDU4LCAweEU5LAotCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCi0KLQkweDMwLCAweDFELCAweDZGLCAweDhGLAotCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDFDLCAweDMwLCAweDI2LCAweERGLAotCTB4MDksIDB4RTMsCi0JMHgzQiwgMHgwNSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweEFDLCAweDIwLAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDJDLCAweDFDLCAweEMwLCAweEFGLAotCi0JMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAwLCAweEUwLAotCTB4QzgsIDB4MzAsCi0KLQkweDMwLCAweDQ2LCAweDMwLCAweEFGLAotCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCi0KLQkweDAwLCAweEUwLAotCTB4MjUsIDB4MjAsCi0JMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKLQotCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MjgsIDB4NzQsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDQ0LCAweDRDLCAweEIwLAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDJELCAweDIwLAotCTB4OUIsIDB4MTAsCi0KLQkweDgyLCAweDNFLCAweDU3LCAweEU5LAotCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCi0KLQkweDFFLCAweEJELCAweDU5LCAweDlGLAotCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDQ3LCAweDM4LCAweEFGLAotCTB4MzQsIDB4MjAsCi0JMHgyQSwgMHgzMCwKLQotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQkweDMyLCAweDIwLAotCTB4MDUsIDB4MjAsCi0KLQkweDg3LCAweDgwLCAweDU3LCAweEU5LAotCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCi0KLQkweDE3LCAweDQyLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHg2QSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweDMyLCAweDAwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI3LCAweEMwLCAweDQ0LCAweEMwLAotCi0JMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDFGLCAweDI2LCAweERGLAotCi0JMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCi0JMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweDNGLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLQkweDJCLCAweDA1LAotCTB4QTcsIDB4MjAsCi0KLQkweDMzLCAweDJCLCAweDM3LCAweERGLAotCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAzLCAweDgwLCAweDBBLCAweEVBLAotCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEIzLCAweDY4LAotCTB4OTcsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0JMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKLQotCTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCi0JMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKLQotCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKLQotCTB4QjMsIDB4MDUsCi0JMHgwMCwgMHhFMCwKLQkweDE2LCAweDI4LCAweDIwLCAweEU5LAotCi0JMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKLQkweDFFLCAweDJCLCAweDIwLCAweEU5LAotCi0JMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDM2LCAweDIwLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDkwLCAweEUyLAotCTB4MDAsIDB4RTAsCi0KLQkweDg1LCAweEZGLCAweDIwLCAweEVBLAotCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDlGLCAweDQxLCAweDQ5LCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDBELCAweDgwLCAweDA3LCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDM1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjUsIDB4MzAsCi0JMHgyRCwgMHgzMCwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweEE3LCAweDVCLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDg0LCAweEZGLCAweDBBLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM5LCAweDQxLCAweEM4LCAweEVDLAotCTB4NDIsIDB4RTEsCi0JMHgwMCwgMHhFMCwKLQotCTB4ODIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4N0YsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RnemFbXSA9IHsKLQotCTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4ODEsIDB4MDQsCi0JMHg4OSwgMHgwNCwKLQkweDAxLCAweDA0LAotCTB4MDksIDB4MDQsCi0KLQkweEM5LCAweDQxLCAweEMwLCAweEVDLAotCTB4MTEsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4NDEsIDB4Q0MsIDB4NDEsIDB4Q0QsCi0JMHg0OSwgMHhDQywgMHg0OSwgMHhDRCwKLQotCTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKLQotCTB4ODAsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQkweDA4LCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDAwLCAweENDLCAweEMwLCAweENELAotCTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCi0KLQkweDhBLCAweDFGLCAweDIwLCAweEU5LAotCTB4OEIsIDB4M0YsIDB4MjAsIDB4RTksCi0KLQkweDQxLCAweDNDLCAweDQxLCAweEFELAotCTB4NDksIDB4M0MsIDB4NDksIDB4QUQsCi0KLQkweDEwLCAweENDLCAweDEwLCAweENELAotCTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCi0KLQkweEI5LCAweDQxLCAweDQ5LCAweEJCLAotCTB4MUYsIDB4RjAsIDB4NDEsIDB4Q0QsCi0KLQkweDUxLCAweDNDLCAweDUxLCAweEFELAotCTB4MDAsIDB4OTgsIDB4ODAsIDB4RTksCi0KLQkweDdELCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDJFLCAweDQxLCAweDJBLCAweEI4LAotCTB4MzQsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDMwLAotCTB4MUQsIDB4MzAsCi0JMHg1OCwgMHhFMywKLQkweDAwLCAweEUwLAotCi0JMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgyNCwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHg3MiwKLQkweDA5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHg3MiwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweDk3LCAweDU3LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDZDLCAweDY0LCAweEM4LCAweEVDLAotCTB4OTgsIDB4RTEsCi0JMHhCNSwgMHgwNSwKLQotCTB4QkQsIDB4MDUsCi0JMHgyRSwgMHgzMCwKLQkweDMyLCAweEMwLCAweEEwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHhBMCwgMHhFOCwKLQkweDc0LCAweDY0LCAweEM4LCAweEVDLAotCi0JMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKLQkweDMyLCAweDZBLAotCTB4MkEsIDB4MzAsCi0KLQkweDIwLCAweDczLAotCTB4MzMsIDB4NkEsCi0JMHgwMCwgMHhFMCwKLQkweDI4LCAweDczLAotCi0JMHgxQywgMHg3MiwKLQkweDgzLCAweEUyLAotCTB4NkIsIDB4ODAsIDB4MTUsIDB4RUEsCi0KLQkweEI4LCAweDNELCAweDI4LCAweERGLAotCTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCi0KLQkweDQwLCAweDMwLAotCTB4MDAsIDB4RTAsCi0JMHhDQywgMHhFMiwKLQkweDY0LCAweDcyLAotCi0JMHgyNSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDJELCAweDQyLCAweDRBLCAweEJGLAotCi0JMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKLQkweDM4LCAweDJFLCAweDM4LCAweERGLAotCi0JMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKLQkweDFFLCAweDE1LCAweDQ1LCAweEU5LAotCi0JMHgyQiwgMHg0OSwgMHg1MSwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4MUYsIDB4NzMsCi0KLQkweDM4LCAweDM4LCAweDQwLCAweEFGLAotCTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCi0KLQkweDI0LCAweDFGLCAweDI0LCAweERGLAotCTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCi0KLQkweDJDLCAweDFGLCAweDJDLCAweERGLAotCTB4MUEsIDB4MzMsIDB4MjAsIDB4RTksCi0KLQkweEIwLCAweDEwLAotCTB4MDgsIDB4RTMsCi0JMHg0MCwgMHgxMCwKLQkweEI4LCAweDEwLAotCi0JMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKLQkweDJGLCAweEYwLCAweDM4LCAweENELAotCi0JMHgyQiwgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDJBLCAweDgwLCAweDIwLCAweEU5LAotCi0JMHhBNiwgMHgyMCwKLQkweDg4LCAweEUyLAotCTB4MDAsIDB4RTAsCi0JMHhBRiwgMHgyMCwKLQotCTB4MjgsIDB4MkEsIDB4MjYsIDB4QUYsCi0JMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCi0JMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKLQotCTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCi0JMHgyMCwgMHgzOCwgMHg4MCwgMHhCRiwKLQotCTB4NDcsIDB4MjQsIDB4NDcsIDB4REYsCi0JMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKLQotCTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCi0JMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKLQotCTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCi0JMHgyMCwgMHgxRCwgMHgyMCwgMHhERiwKLQotCTB4NTcsIDB4MzQsIDB4NTcsIDB4REYsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDA1LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDg5LCAweEUyLAotCTB4MkIsIDB4MzAsCi0KLQkweDNGLCAweEMxLCAweDFELCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEEwLCAweDY4LAotCTB4QkYsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCi0JMHgyOCwgMHgwNSwKLQkweDk3LCAweDc0LAotCi0JMHgwMCwgMHhFMCwKLQkweDJBLCAweDEwLAotCTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4OEMsIDB4RTIsCi0JMHg5NSwgMHgwNSwKLQotCTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCi0JMHgxRiwgMHhDMSwgMHgxNSwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTgsIDB4NjcsCi0JMHg5RiwgMHg2QiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKLQkweDFELCAweDI1LAotCTB4MjAsIDB4MDUsCi0KLQkweDI4LCAweDMyLCAweDgwLCAweEFELAotCTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCi0KLQkweDFDLCAweDgwLCAweDIwLCAweEU5LAotCTB4MjAsIDB4MzMsIDB4MjAsIDB4QUQsCi0KLQkweDIwLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKLQotCTB4MjYsIDB4MkYsIDB4QjAsIDB4RTgsCi0JMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCi0JMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKLQotCTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCi0JMHgxRCwgMHgyMCwgMHgxRCwgMHhERiwKLQotCTB4MjYsIDB4RDAsIDB4MjYsIDB4Q0QsCi0JMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKLQotCTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCi0JMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKLQotCTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDgyLCAweEUxLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNiwgMHgzMCwKLQkweDI5LCAweDMwLAotCTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCi0KLQkweDJCLCAweDcyLAotCTB4QzIsIDB4RTEsCi0JMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKLQotCTB4MDUsIDB4MjQsIDB4MzQsIDB4QkYsCi0JMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKLQotCTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzMiwgMHgzRSwgMHg1RiwgMHhFOSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDMwLAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDMzLCAweDFFLCAweDVGLCAweEU5LAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDBELCAweDQ0LCAweDRDLCAweEIyLAotCi0JMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKLQkweDM0LCAweEMwLCAweDQ0LCAweEM0LAotCi0JMHgzMywgMHg3MywKLQkweDAwLCAweEUwLAotCTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQotCTB4ODQsIDB4M0UsIDB4NTgsIDB4RTksCi0JMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MDUsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweDg1LCAweDFFLCAweDU4LCAweEU5LAotCi0JMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKLQkweDIwLCAweDIwLCAweDQyLCAweEFGLAotCi0JMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKLQkweDgwLCAweDNFLCAweDU3LCAweEU5LAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDMwLCAweDgwLCAweDVGLCAweEU5LAotCi0JMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKLQkweDgxLCAweDFFLCAweDU3LCAweEU5LAotCi0JMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDBELCAweDQ3LCAweDRGLCAweEJGLAotCi0JMHg4OCwgMHg4MCwgMHg1OCwgMHhFOSwKLQkweDFCLCAweDI5LCAweDFCLCAweERGLAotCi0JMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDNBLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKLQkweDA5LCAweEUzLAotCTB4M0IsIDB4MDUsCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4M0IsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHhBQywgMHgyMCwKLQotCTB4MkQsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKLQotCTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgwMCwgMHhFMCwKLQkweEM4LCAweDMwLAotCi0JMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKLQkweDFCLCAweDFCLCAweDQ4LCAweEFGLAotCi0JMHgwMCwgMHhFMCwKLQkweDI1LCAweDIwLAotCTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCi0KLQkweDg2LCAweDgwLCAweDU3LCAweEU5LAotCTB4MzgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDI4LCAweDc0LAotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjAsCi0JMHgyRCwgMHgyMCwKLQkweDlCLCAweDEwLAotCi0JMHg4MiwgMHgzRSwgMHg1NywgMHhFOSwKLQkweDMyLCAweEYwLCAweDFCLCAweENELAotCi0JMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKLQkweDgzLCAweDFFLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKLQkweDM0LCAweDIwLAotCTB4MkEsIDB4MzAsCi0KLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0JMHgzMiwgMHgyMCwKLQkweDA1LCAweDIwLAotCi0JMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKLQkweDFGLCAweDU0LCAweDU3LCAweDlGLAotCi0JMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4NkEsCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzcsIDB4MUUsIDB4NEYsIDB4RTksCi0KLQkweDM3LCAweDMyLCAweDJBLCAweEFGLAotCTB4MDAsIDB4RTAsCi0JMHgzMiwgMHgwMCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKLQotCTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCi0JMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKLQotCTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQotCTB4M0UsIDB4MTcsIDB4NEYsIDB4RTksCi0JMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCi0JMHgyQiwgMHgwNSwKLQkweEE3LCAweDIwLAotCi0JMHgzMywgMHgyQiwgMHgzNywgMHhERiwKLQkweDI3LCAweDE3LCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNiwKLQkweDI1LCAweDQ0LCAweDU0LCAweEI2LAotCi0JMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKLQkweDE3LCAweEMxLCAweDJCLCAweEJELAotCi0JMHgyRCwgMHgyMCwKLQkweDI1LCAweDIwLAotCTB4MDcsIDB4QzAsIDB4NDQsIDB4QzYsCi0KLQkweEIzLCAweDY4LAotCTB4OTcsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0JMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKLQotCTB4MUYsIDB4NjIsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4M0YsIDB4M0QsIDB4NUQsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDA3LCAweDIwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI4LCAweDE5LCAweDYwLCAweEVDLAotCi0JMHhCMywgMHgwNSwKLQkweDAwLCAweEUwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIzLCAweDNCLCAweDMzLCAweEFELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDFGLCAweDI2LCAweDFGLCAweERGLAotCTB4OUQsIDB4MUYsIDB4NEYsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4OUUsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDA3LCAweDA3LCAweDFGLCAweEFGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDlDLCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCi0KLQkweDE2LCAweDI4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDJCLCAweDIwLCAweEU5LAotCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCi0KLQkweDFDLCAweDIzLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4OTAsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQotCTB4N0EsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNSwgMHgzMCwKLQkweDJELCAweDMwLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NzksIDB4RkYsIDB4MEEsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0JMHg0MiwgMHhFMSwKLQkweDAwLCAweEUwLAotCi0JMHg3NywgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg3NCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6YWZbXSA9IHsKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4ODEsIDB4MDQsCi0JMHg4OSwgMHgwNCwKLQkweDAxLCAweDA0LAotCTB4MDksIDB4MDQsCi0KLQkweEM5LCAweDQxLCAweEMwLCAweEVDLAotCTB4MTEsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4NDEsIDB4Q0MsIDB4NDEsIDB4Q0QsCi0JMHg0OSwgMHhDQywgMHg0OSwgMHhDRCwKLQotCTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKLQotCTB4ODAsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQkweDA4LCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDAwLCAweENDLCAweEMwLCAweENELAotCTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCi0KLQkweDhBLCAweDFGLCAweDIwLCAweEU5LAotCTB4OEIsIDB4M0YsIDB4MjAsIDB4RTksCi0KLQkweDQxLCAweDNDLCAweDQxLCAweEFELAotCTB4NDksIDB4M0MsIDB4NDksIDB4QUQsCi0KLQkweDEwLCAweENDLCAweDEwLCAweENELAotCTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCi0KLQkweEI5LCAweDQxLCAweDQ5LCAweEJCLAotCTB4MUYsIDB4RjAsIDB4NDEsIDB4Q0QsCi0KLQkweDUxLCAweDNDLCAweDUxLCAweEFELAotCTB4MDAsIDB4OTgsIDB4ODAsIDB4RTksCi0KLQkweDgzLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCi0KLQkweDIxLCAweDQ1LCAweDgwLCAweEU4LAotCTB4MUEsIDB4NEQsIDB4ODAsIDB4RTgsCi0KLQkweDMxLCAweDU1LCAweDgwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDJFLCAweDQxLCAweDJBLCAweEI4LAotCTB4MzQsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDMwLAotCTB4MUQsIDB4MzAsCi0JMHg1OCwgMHhFMywKLQkweDAwLCAweEUwLAotCi0JMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgyNCwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHg3MiwKLQkweDA5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHg3MiwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweDk3LCAweDU3LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDZDLCAweDY0LCAweEM4LCAweEVDLAotCTB4OTgsIDB4RTEsCi0JMHhCNSwgMHgwNSwKLQotCTB4QkQsIDB4MDUsCi0JMHgyRSwgMHgzMCwKLQkweDMyLCAweEMwLCAweEEwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHhBMCwgMHhFOCwKLQkweDc0LCAweDY0LCAweEM4LCAweEVDLAotCi0JMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKLQkweDMyLCAweDZBLAotCTB4MkEsIDB4MzAsCi0KLQkweDIwLCAweDczLAotCTB4MzMsIDB4NkEsCi0JMHgwMCwgMHhFMCwKLQkweDI4LCAweDczLAotCi0JMHgxQywgMHg3MiwKLQkweDgzLCAweEUyLAotCTB4NkYsIDB4ODAsIDB4MTUsIDB4RUEsCi0KLQkweEI4LCAweDNELCAweDI4LCAweERGLAotCTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCi0KLQkweDQwLCAweDMwLAotCTB4MDAsIDB4RTAsCi0JMHhDQywgMHhFMiwKLQkweDY0LCAweDcyLAotCi0JMHgyNSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDJELCAweDQyLCAweDRBLCAweEJGLAotCi0JMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKLQkweDM4LCAweDJFLCAweDM4LCAweERGLAotCi0JMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKLQkweDFFLCAweDE1LCAweDQ1LCAweEU5LAotCi0JMHgyQiwgMHg0OSwgMHg1MSwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4MUYsIDB4NzMsCi0KLQkweDM4LCAweDM4LCAweDQwLCAweEFGLAotCTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCi0KLQkweDI0LCAweDFGLCAweDI0LCAweERGLAotCTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCi0KLQkweDJDLCAweDFGLCAweDJDLCAweERGLAotCTB4MUEsIDB4MzMsIDB4MjAsIDB4RTksCi0KLQkweEIwLCAweDEwLAotCTB4MDgsIDB4RTMsCi0JMHg0MCwgMHgxMCwKLQkweEI4LCAweDEwLAotCi0JMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKLQkweDJGLCAweEYwLCAweDM4LCAweENELAotCi0JMHgyQiwgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDJBLCAweDgwLCAweDIwLCAweEU5LAotCi0JMHhBNiwgMHgyMCwKLQkweDg4LCAweEUyLAotCTB4MDAsIDB4RTAsCi0JMHhBRiwgMHgyMCwKLQotCTB4MjgsIDB4MkEsIDB4MjYsIDB4QUYsCi0JMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCi0JMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKLQotCTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCi0JMHgyMCwgMHgzOCwgMHg4MCwgMHhCRiwKLQotCTB4NDcsIDB4MjQsIDB4NDcsIDB4REYsCi0JMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKLQotCTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCi0JMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKLQotCTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCi0JMHgyMCwgMHgxRCwgMHgyMCwgMHhERiwKLQotCTB4NTcsIDB4MzQsIDB4NTcsIDB4REYsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDA1LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDg5LCAweEUyLAotCTB4MkIsIDB4MzAsCi0KLQkweDNGLCAweEMxLCAweDFELCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEEwLCAweDY4LAotCTB4QkYsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCi0JMHgyOCwgMHgwNSwKLQkweDk3LCAweDc0LAotCi0JMHgwMCwgMHhFMCwKLQkweDJBLCAweDEwLAotCTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4OEMsIDB4RTIsCi0JMHg5NSwgMHgwNSwKLQotCTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCi0JMHgxRiwgMHhDMSwgMHgxNSwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTgsIDB4NjcsCi0JMHg5RiwgMHg2QiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKLQkweDFELCAweDI1LAotCTB4MjAsIDB4MDUsCi0KLQkweDI4LCAweDMyLCAweDgwLCAweEFELAotCTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCi0KLQkweDFDLCAweDgwLCAweDIwLCAweEU5LAotCTB4MjAsIDB4MzMsIDB4MjAsIDB4QUQsCi0KLQkweDIwLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKLQotCTB4MjYsIDB4MkYsIDB4QjAsIDB4RTgsCi0JMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCi0JMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKLQotCTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCi0JMHgxRCwgMHgyMCwgMHgxRCwgMHhERiwKLQotCTB4MjYsIDB4RDAsIDB4MjYsIDB4Q0QsCi0JMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKLQotCTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCi0JMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKLQotCTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDgyLCAweEUxLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNiwgMHgzMCwKLQkweDI5LCAweDMwLAotCTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCi0KLQkweDJCLCAweDcyLAotCTB4QzIsIDB4RTEsCi0JMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKLQotCTB4MDUsIDB4MjQsIDB4MzQsIDB4QkYsCi0JMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKLQotCTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzMiwgMHgzRSwgMHg1RiwgMHhFOSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDMwLAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDMzLCAweDFFLCAweDVGLCAweEU5LAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDBELCAweDQ0LCAweDRDLCAweEIyLAotCi0JMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKLQkweDM0LCAweEMwLCAweDQ0LCAweEM0LAotCi0JMHgzMywgMHg3MywKLQkweDAwLCAweEUwLAotCTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQotCTB4ODQsIDB4M0UsIDB4NTgsIDB4RTksCi0JMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MDUsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweDg1LCAweDFFLCAweDU4LCAweEU5LAotCi0JMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKLQkweDIwLCAweDIwLCAweDQyLCAweEFGLAotCi0JMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKLQkweDgwLCAweDNFLCAweDU3LCAweEU5LAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDMwLCAweDgwLCAweDVGLCAweEU5LAotCi0JMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKLQkweDgxLCAweDFFLCAweDU3LCAweEU5LAotCi0JMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDBELCAweDQ3LCAweDRGLCAweEJGLAotCi0JMHg4OCwgMHg4MCwgMHg1OCwgMHhFOSwKLQkweDFCLCAweDI5LCAweDFCLCAweERGLAotCi0JMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDNBLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKLQkweDA5LCAweEUzLAotCTB4M0IsIDB4MDUsCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4M0IsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHhBQywgMHgyMCwKLQotCTB4MkQsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKLQotCTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgwMCwgMHhFMCwKLQkweEM4LCAweDMwLAotCi0JMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKLQkweDFCLCAweDFCLCAweDQ4LCAweEFGLAotCi0JMHgwMCwgMHhFMCwKLQkweDI1LCAweDIwLAotCTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCi0KLQkweDg2LCAweDgwLCAweDU3LCAweEU5LAotCTB4MzgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDI4LCAweDc0LAotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjAsCi0JMHgyRCwgMHgyMCwKLQkweDlCLCAweDEwLAotCi0JMHg4MiwgMHgzRSwgMHg1NywgMHhFOSwKLQkweDMyLCAweEYwLCAweDFCLCAweENELAotCi0JMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKLQkweDgzLCAweDFFLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKLQkweDM0LCAweDIwLAotCTB4MkEsIDB4MzAsCi0KLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0JMHgzMiwgMHgyMCwKLQkweDA1LCAweDIwLAotCi0JMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKLQkweDFGLCAweDU0LCAweDU3LCAweDlGLAotCi0JMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4NkEsCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzcsIDB4MUUsIDB4NEYsIDB4RTksCi0KLQkweDM3LCAweDMyLCAweDJBLCAweEFGLAotCTB4MDAsIDB4RTAsCi0JMHgzMiwgMHgwMCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKLQotCTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCi0JMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKLQotCTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQotCTB4M0UsIDB4MTcsIDB4NEYsIDB4RTksCi0JMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCi0JMHgyQiwgMHgwNSwKLQkweEE3LCAweDIwLAotCi0JMHgzMywgMHgyQiwgMHgzNywgMHhERiwKLQkweDI3LCAweDE3LCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwRCwgMHgyMSwgMHgxQSwgMHhCNiwKLQkweDA1LCAweDIxLCAweDMxLCAweEI2LAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNiwKLQkweDI1LCAweDQ0LCAweDU0LCAweEI2LAotCi0JMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKLQkweDE3LCAweEMxLCAweDJCLCAweEJELAotCi0JMHgwRCwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzYsCi0KLQkweEIzLCAweDY4LAotCTB4OTcsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0JMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4RTAsCi0JMHgyNSwgMHgyMCwKLQkweDA3LCAweEMwLCAweDQ0LCAweEM2LAotCi0JMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4MjAsCi0KLQkweDM3LCAweDBGLCAweDVDLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgyRiwgMHgyMCwKLQotCTB4MUYsIDB4NjIsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDA3LCAweDIwLAotCi0JMHgzRiwgMHgzRCwgMHg1RCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI4LCAweDE5LCAweDYwLCAweEVDLAotCi0JMHhCMywgMHgwNSwKLQkweDAwLCAweEUwLAotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0KLQkweDIzLCAweDNCLCAweDMzLCAweEFELAotCTB4MzUsIDB4MTcsIDB4NEYsIDB4RTksCi0KLQkweDFGLCAweDI2LCAweDFGLCAweERGLAotCTB4OUQsIDB4MUYsIDB4NEYsIDB4RTksCi0KLQkweDlFLCAweDNGLCAweDRGLCAweEU5LAotCTB4MzksIDB4MzcsIDB4NEYsIDB4RTksCi0KLQkweDJGLCAweDJGLCAweDE3LCAweEFGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDA3LCAweDA3LCAweDFGLCAweEFGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMxLCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDlDLCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCi0KLQkweDE2LCAweDI4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDJCLCAweDIwLCAweEU5LAotCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCi0KLQkweDFDLCAweDIzLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4OTAsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQotCTB4NzQsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKLQotCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0JMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKLQotCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyNSwgMHgzMCwKLQkweDJELCAweDMwLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NzMsIDB4RkYsIDB4MEEsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0JMHg0MiwgMHhFMSwKLQkweDAwLCAweEUwLAotCi0JMHg3MSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2RSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6ZltdID0gewotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg5OCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg4MSwgMHgwNCwKLQkweDg5LCAweDA0LAotCTB4MDEsIDB4MDQsCi0JMHgwOSwgMHgwNCwKLQotCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgxMSwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLQkweDQ5LCAweENDLCAweDQ5LCAweENELAotCi0JMHhEMSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDUxLCAweENDLCAweDUxLCAweENELAotCi0JMHg4MCwgMHgwNCwKLQkweDEwLCAweDA0LAotCTB4MDgsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4MDAsIDB4Q0MsIDB4QzAsIDB4Q0QsCi0JMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKLQotCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0JMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKLQotCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0JMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKLQotCTB4MTAsIDB4Q0MsIDB4MTAsIDB4Q0QsCi0JMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKLQotCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0JMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKLQotCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKLQotCTB4N0YsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKLQotCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0JMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKLQotCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0JMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4MzAsCi0JMHgxRCwgMHgzMCwKLQkweDU4LCAweEUzLAotCTB4MDAsIDB4RTAsCi0KLQkweEI1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDI0LCAweDQzLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDcyLAotCTB4MDksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDcyLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0JMHg5OCwgMHhFMSwKLQkweEI1LCAweDA1LAotCi0JMHhCRCwgMHgwNSwKLQkweDJFLCAweDMwLAotCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweEEwLCAweEU4LAotCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCi0KLQkweDQwLCAweDNDLCAweDQwLCAweEFELAotCTB4MzIsIDB4NkEsCi0JMHgyQSwgMHgzMCwKLQotCTB4MjAsIDB4NzMsCi0JMHgzMywgMHg2QSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4NzMsCi0KLQkweDFDLCAweDcyLAotCTB4ODMsIDB4RTIsCi0JMHg2QiwgMHg4MCwgMHgxNSwgMHhFQSwKLQotCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0JMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKLQotCTB4NDAsIDB4MzAsCi0JMHgwMCwgMHhFMCwKLQkweENDLCAweEUyLAotCTB4NjQsIDB4NzIsCi0KLQkweDI1LCAweDQyLCAweDUyLCAweEJGLAotCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCi0KLQkweDMwLCAweDJFLCAweDMwLCAweERGLAotCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCi0KLQkweDE4LCAweDFELCAweDQ1LCAweEU5LAotCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCi0KLQkweDJCLCAweDQ5LCAweDUxLCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHg3MywKLQotCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0JMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKLQotCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0JMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0JMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKLQotCTB4QjAsIDB4MTAsCi0JMHgwOCwgMHhFMywKLQkweDQwLCAweDEwLAotCTB4QjgsIDB4MTAsCi0KLQkweDI2LCAweEYwLCAweDMwLCAweENELAotCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCi0KLQkweDJCLCAweDgwLCAweDIwLCAweEU5LAotCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweEE2LCAweDIwLAotCTB4ODgsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLQkweDIwLCAweDJBLCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLQkweDQ2LCAweDI0LCAweDQ2LCAweERGLAotCi0JMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLQkweDIwLCAweDM4LCAweDgwLCAweEJGLAotCi0JMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLQkweDRFLCAweDJDLCAweDRFLCAweERGLAotCi0JMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLQkweDU2LCAweDM0LCAweDU2LCAweERGLAotCi0JMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLQkweDIwLCAweDFELCAweDIwLCAweERGLAotCi0JMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4MDUsCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4ODksIDB4RTIsCi0JMHgyQiwgMHgzMCwKLQotCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4NjgsCi0JMHhCRiwgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLQkweDI4LCAweDA1LAotCTB4OTcsIDB4NzQsCi0KLQkweDAwLCAweEUwLAotCTB4MkEsIDB4MTAsCi0JMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4QywgMHhFMiwKLQkweDk1LCAweDA1LAotCi0JMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLQkweDFGLCAweEMxLCAweDE1LCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBOCwgMHg2NywKLQkweDlGLCAweDZCLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI4LCAweEMwLCAweDI4LCAweEFELAotCTB4MUQsIDB4MjUsCi0JMHgyMCwgMHgwNSwKLQotCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0JMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKLQotCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKLQotCTB4MjAsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweEI2LCAweDQ5LCAweDUxLCAweEJCLAotCi0JMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLQkweDE5LCAweDIwLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLQkweDNELCAweDIwLCAweDNELCAweERGLAotCi0JMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLQkweDFELCAweDIwLCAweDFELCAweERGLAotCi0JMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLQkweDI5LCAweDQ5LCAweDJBLCAweEI4LAotCi0JMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLQkweDNCLCAweDQ4LCAweDUwLCAweEJELAotCi0JMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4ODIsIDB4RTEsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI2LCAweDMwLAotCTB4MjksIDB4MzAsCi0JMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKLQotCTB4MkIsIDB4NzIsCi0JMHhDMiwgMHhFMSwKLQkweDJDLCAweEMwLCAweDQ0LCAweEMyLAotCi0JMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLQkweDBELCAweDI0LCAweDJDLCAweEJGLAotCi0JMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDI1LCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDMyLCAweDNFLCAweDVGLCAweEU5LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4MzAsCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIyLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCi0KLQkweDE5LCAweEMwLCAweEIwLCAweEU4LAotCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCi0KLQkweDMzLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCi0JMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLQkweDI4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCi0KLQkweDlCLCAweDNCLCAweDMzLCAweERGLAotCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCi0KLQkweDMwLCAweDQyLCAweDU2LCAweDlGLAotCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCi0KLQkweDI4LCAweDI4LCAweDI0LCAweEFGLAotCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDA1LCAweDQ3LCAweDU3LCAweEJGLAotCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCi0KLQkweDg4LCAweDgwLCAweDU4LCAweEU5LAotCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCi0KLQkweDMwLCAweDFELCAweDZGLCAweDhGLAotCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDFDLCAweDMwLCAweDI2LCAweERGLAotCTB4MDksIDB4RTMsCi0JMHgzQiwgMHgwNSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweEFDLCAweDIwLAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDJDLCAweDFDLCAweEMwLCAweEFGLAotCi0JMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAwLCAweEUwLAotCTB4QzgsIDB4MzAsCi0KLQkweDMwLCAweDQ2LCAweDMwLCAweEFGLAotCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCi0KLQkweDAwLCAweEUwLAotCTB4MjUsIDB4MjAsCi0JMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKLQotCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MjgsIDB4NzQsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDQ0LCAweDRDLCAweEIwLAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDJELCAweDIwLAotCTB4OUIsIDB4MTAsCi0KLQkweDgyLCAweDNFLCAweDU3LCAweEU5LAotCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCi0KLQkweDFFLCAweEJELCAweDU5LCAweDlGLAotCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDQ3LCAweDM4LCAweEFGLAotCTB4MzQsIDB4MjAsCi0JMHgyQSwgMHgzMCwKLQotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQkweDMyLCAweDIwLAotCTB4MDUsIDB4MjAsCi0KLQkweDg3LCAweDgwLCAweDU3LCAweEU5LAotCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCi0KLQkweDE3LCAweDQyLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHg2QSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweDMyLCAweDAwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI3LCAweEMwLCAweDQ0LCAweEMwLAotCi0JMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDFGLCAweDI2LCAweERGLAotCi0JMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCi0JMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweDNGLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLQkweDJCLCAweDA1LAotCTB4QTcsIDB4MjAsCi0KLQkweDMzLCAweDJCLCAweDM3LCAweERGLAotCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBELCAweDIxLCAweDFBLCAweEI2LAotCTB4MDUsIDB4MjEsIDB4MzEsIDB4QjYsCi0KLQkweDAzLCAweDgwLCAweDJBLCAweEVBLAotCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCi0KLQkweDBELCAweDIwLAotCTB4MDUsIDB4MjAsCi0JMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKLQotCTB4QjMsIDB4NjgsCi0JMHg5NywgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLQkweDNDLCAweDI3LCAweDRGLCAweEU5LAotCi0JMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MkYsIDB4MjAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjgsIDB4MTksIDB4NjAsIDB4RUMsCi0KLQkweEIzLCAweDA1LAotCTB4MDAsIDB4RTAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0JMHgzNSwgMHgxNywgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgzOSwgMHgzNywgMHg0RiwgMHhFOSwKLQotCTB4MkYsIDB4MkYsIDB4MTcsIDB4QUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzEsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKLQotCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0JMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHg5MCwgMHhFMiwKLQkweDAwLCAweEUwLAotCi0JMHg3OCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDE5LCAweEM4LCAweEMxLCAweENELAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDJELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI1LCAweDMwLAotCTB4MkQsIDB4MzAsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg3NywgMHhGRiwgMHgwQSwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKLQkweDQyLCAweEUxLAotCTB4MDAsIDB4RTAsCi0KLQkweDc1LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM4LCAweDQwLCAweEMwLCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDcyLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3pzW10gPSB7Ci0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDk4LCAweEEwLCAweEU5LAotCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDgxLCAweDA0LAotCTB4ODksIDB4MDQsCi0JMHgwMSwgMHgwNCwKLQkweDA5LCAweDA0LAotCi0JMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDExLCAweDA0LAotCTB4MDAsIDB4RTAsCi0KLQkweDQxLCAweENDLCAweDQxLCAweENELAotCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCi0KLQkweEQxLCAweDQxLCAweEMwLCAweEVDLAotCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCi0KLQkweDgwLCAweDA0LAotCTB4MTAsIDB4MDQsCi0JMHgwOCwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLQkweEQxLCAweDQ5LCAweEMwLCAweEVDLAotCi0JMHg4QSwgMHgxRiwgMHgyMCwgMHhFOSwKLQkweDhCLCAweDNGLCAweDIwLCAweEU5LAotCi0JMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLQkweDQ5LCAweDNDLCAweDQ5LCAweEFELAotCi0JMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLQkweDA4LCAweENDLCAweDA4LCAweENELAotCi0JMHhCOSwgMHg0MSwgMHg0OSwgMHhCQiwKLQkweDFGLCAweEYwLCAweDQxLCAweENELAotCi0JMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLQkweDAwLCAweDk4LCAweDgwLCAweEU5LAotCi0JMHg4QiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDFGLCAweDIwLCAweEU5LAotCi0JMHgyMSwgMHg0NSwgMHg4MCwgMHhFOCwKLQkweDFBLCAweDRELCAweDgwLCAweEU4LAotCi0JMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDFELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKLQkweDM0LCAweDUzLCAweEEwLCAweEU4LAotCi0JMHgxNSwgMHgzMCwKLQkweDFELCAweDMwLAotCTB4NTgsIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQotCTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4NzIsCi0JMHgwOSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4NzIsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHg5NywgMHg1NywgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLQkweDk4LCAweEUxLAotCTB4QjUsIDB4MDUsCi0KLQkweEJELCAweDA1LAotCTB4MkUsIDB4MzAsCi0JMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0JMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKLQotCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0JMHgzMiwgMHg2QSwKLQkweDJBLCAweDMwLAotCi0JMHgyMCwgMHg3MywKLQkweDMzLCAweDZBLAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHg3MywKLQotCTB4MUMsIDB4NzIsCi0JMHg4MywgMHhFMiwKLQkweDc3LCAweDgwLCAweDE1LCAweEVBLAotCi0JMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLQkweDMwLCAweDM1LCAweDIwLCAweERGLAotCi0JMHg0MCwgMHgzMCwKLQkweDAwLCAweEUwLAotCTB4Q0MsIDB4RTIsCi0JMHg2NCwgMHg3MiwKLQotCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKLQotCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0JMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKLQotCTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCi0JMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKLQotCTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDczLAotCi0JMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLQkweDMwLCAweDMwLCAweDQwLCAweEFGLAotCi0JMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLQkweDFELCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgyQywgMHgxRiwgMHgyQywgMHhERiwKLQkweDFBLCAweDMzLCAweDIwLCAweEU5LAotCi0JMHhCMCwgMHgxMCwKLQkweDA4LCAweEUzLAotCTB4NDAsIDB4MTAsCi0JMHhCOCwgMHgxMCwKLQotCTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCi0JMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKLQotCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4QTYsIDB4MjAsCi0JMHg4OCwgMHhFMiwKLQkweDAwLCAweEUwLAotCTB4QUYsIDB4MjAsCi0KLQkweDI4LCAweDJBLCAweDI2LCAweEFGLAotCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDFGLCAweDM0LCAweERGLAotCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCi0KLQkweDI4LCAweDMwLCAweDgwLCAweEJGLAotCTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCi0KLQkweDQ3LCAweDI0LCAweDQ3LCAweERGLAotCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCi0KLQkweDRGLCAweDJDLCAweDRGLCAweERGLAotCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCi0KLQkweDI4LCAweDE1LCAweDI4LCAweERGLAotCTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCi0KLQkweDU3LCAweDM0LCAweDU3LCAweERGLAotCTB4MDAsIDB4RTAsCi0JMHgxRCwgMHgwNSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4OSwgMHhFMiwKLQkweDJCLCAweDMwLAotCi0JMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg2OCwKLQkweEJGLCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIwLCAweEMwLCAweDIwLCAweEFGLAotCTB4MjgsIDB4MDUsCi0JMHg5NywgMHg3NCwKLQotCTB4MDAsIDB4RTAsCi0JMHgyQSwgMHgxMCwKLQkweDE2LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLQkweDhDLCAweEUyLAotCTB4OTUsIDB4MDUsCi0KLQkweDI4LCAweEMxLCAweDI4LCAweEFELAotCTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEE4LCAweDY3LAotCTB4OUYsIDB4NkIsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0JMHgxRCwgMHgyNSwKLQkweDIwLCAweDA1LAotCi0JMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLQkweDQwLCAweDJBLCAweDQwLCAweEJELAotCi0JMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLQkweDIwLCAweDMzLCAweDIwLCAweEFELAotCi0JMHgyMCwgMHg3MywKLQkweDAwLCAweEUwLAotCTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCi0KLQkweDI2LCAweDJGLCAweEIwLCAweEU4LAotCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDIwLCAweDM1LCAweERGLAotCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCi0KLQkweDE1LCAweDIwLCAweDE1LCAweERGLAotCTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCi0KLQkweDI2LCAweEQwLCAweDI2LCAweENELAotCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCi0KLQkweDI2LCAweDQwLCAweDgwLCAweEJELAotCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCi0KLQkweDNFLCAweDU0LCAweDU3LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg4MiwgMHhFMSwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjYsIDB4MzAsCi0JMHgyOSwgMHgzMCwKLQkweDQ4LCAweDNDLCAweDQ4LCAweEFELAotCi0JMHgyQiwgMHg3MiwKLQkweEMyLCAweEUxLAotCTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCi0KLQkweDA1LCAweDI0LCAweDM0LCAweEJGLAotCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCi0KLQkweDJELCAweDQ2LCAweDRFLCAweEJGLAotCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDIwLCAweDFELCAweDZGLCAweDhGLAotCTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCi0KLQkweDNFLCAweDUwLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHgzMCwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKLQotCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKLQotCTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCi0JMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKLQotCTB4MzMsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweDNFLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4MjAsCi0KLQkweDg0LCAweDNFLCAweDU4LCAweEU5LAotCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCi0KLQkweDA1LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKLQotCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0JMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKLQotCTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKLQotCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0JMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKLQotCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0JMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKLQotCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0JMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCi0JMHgwOSwgMHhFMywKLQkweDNCLCAweDA1LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDNCLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4QUMsIDB4MjAsCi0KLQkweDJELCAweDQ0LCAweDRDLCAweEI0LAotCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCi0KLQkweDI1LCAweDQ0LCAweDU0LCAweEI0LAotCTB4MDAsIDB4RTAsCi0JMHhDOCwgMHgzMCwKLQotCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0JMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKLQotCTB4MDAsIDB4RTAsCi0JMHgyNSwgMHgyMCwKLQkweDM4LCAweDJDLCAweDRGLCAweEU5LAotCi0JMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKLQkweDM4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgyOCwgMHg3NCwKLQkweDAwLCAweEUwLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIwLAotCTB4MkQsIDB4MjAsCi0JMHg5QiwgMHgxMCwKLQotCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0JMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKLQotCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0JMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCi0JMHgzNCwgMHgyMCwKLQkweDJBLCAweDMwLAotCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCTB4MzIsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQotCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKLQotCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDNCLCAweDZBLAotCi0JMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLQkweDM3LCAweDFFLCAweDRGLCAweEU5LAotCi0JMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLQkweDAwLCAweEUwLAotCTB4MzIsIDB4MDAsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCi0KLQkweDM2LCAweDFGLCAweDRGLCAweEU5LAotCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCi0KLQkweDM3LCAweDFCLCAweDM3LCAweEJGLAotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0KLQkweDNFLCAweDE3LCAweDRGLCAweEU5LAotCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDM0LCAweDFGLCAweDM0LCAweEFGLAotCTB4MkIsIDB4MDUsCi0JMHhBNywgMHgyMCwKLQotCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0JMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKLQotCTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCi0JMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKLQotCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCi0JMHgwNSwgMHgyMSwgMHgzMSwgMHhCMiwKLQotCTB4MDMsIDB4ODAsIDB4MkEsIDB4RUEsCi0JMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKLQotCTB4MkQsIDB4MjAsCi0JMHgyNSwgMHgyMCwKLQkweDA1LCAweDIwLAotCTB4MEQsIDB4MjAsCi0KLQkweEIzLCAweDY4LAotCTB4OTcsIDB4MjUsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0JMHgyRiwgMHhDMCwgMHgyMSwgMHhDMCwKLQotCTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCi0JMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjQsCi0JMHgyRCwgMHgyMSwgMHgxQSwgMHhCNCwKLQotCTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzMsIDB4MDUsCi0JMHgwMCwgMHhFMCwKLQkweDI4LCAweDE5LCAweDYwLCAweEVDLAotCi0JMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MkYsIDB4MjAsCi0KLQkweDIzLCAweDNCLCAweDMzLCAweEFELAotCTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCi0KLQkweEE3LCAweDFFLCAweDRGLCAweEU5LAotCTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCi0KLQkweDJELCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHhBOCwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCi0JMHgyNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCi0JMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKLQkweDBGLCAweEMwLCAweDIxLCAweEMyLAotCi0JMHhBNiwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDYyLCAweDU3LCAweDlGLAotCi0JMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4OEYsIDB4MjAsCi0KLQkweEE1LCAweDM3LCAweDRGLCAweEU5LAotCTB4MEYsIDB4MTcsIDB4MEYsIDB4QUYsCi0KLQkweDA2LCAweEMwLCAweDIxLCAweEM0LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4QTMsIDB4ODAsIDB4NEYsIDB4RTksCi0KLQkweDA2LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHgyNiwgMHgxRiwgMHhERiwKLQotCTB4QTEsIDB4MUYsIDB4NEYsIDB4RTksCi0JMHhBMiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDYsIDB4MDYsIDB4MUYsIDB4QUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKLQotCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0JMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHg5MCwgMHhFMiwKLQkweDAwLCAweEUwLAotCi0JMHg2QywgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDE5LCAweEM4LCAweEMxLCAweENELAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDJELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI1LCAweDMwLAotCTB4MkQsIDB4MzAsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2QiwgMHhGRiwgMHgwQSwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKLQkweDQyLCAweEUxLAotCTB4MDAsIDB4RTAsCi0KLQkweDY5LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM4LCAweDQwLCAweEMwLCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDY2LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3pzYVtdID0gewotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg5OCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg4MSwgMHgwNCwKLQkweDg5LCAweDA0LAotCTB4MDEsIDB4MDQsCi0JMHgwOSwgMHgwNCwKLQotCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgxMSwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLQkweDQ5LCAweENDLCAweDQ5LCAweENELAotCi0JMHhEMSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDUxLCAweENDLCAweDUxLCAweENELAotCi0JMHg4MCwgMHgwNCwKLQkweDEwLCAweDA0LAotCTB4MDgsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4MDAsIDB4Q0MsIDB4QzAsIDB4Q0QsCi0JMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKLQotCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0JMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKLQotCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0JMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKLQotCTB4MTAsIDB4Q0MsIDB4MTAsIDB4Q0QsCi0JMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKLQotCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0JMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKLQotCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKLQotCTB4OEYsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKLQotCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0JMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKLQotCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0JMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4MzAsCi0JMHgxRCwgMHgzMCwKLQkweDU4LCAweEUzLAotCTB4MDAsIDB4RTAsCi0KLQkweEI1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDI0LCAweDQzLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDcyLAotCTB4MDksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDcyLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0JMHg5OCwgMHhFMSwKLQkweEI1LCAweDA1LAotCi0JMHhCRCwgMHgwNSwKLQkweDJFLCAweDMwLAotCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweEEwLCAweEU4LAotCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCi0KLQkweDQwLCAweDNDLCAweDQwLCAweEFELAotCTB4MzIsIDB4NkEsCi0JMHgyQSwgMHgzMCwKLQotCTB4MjAsIDB4NzMsCi0JMHgzMywgMHg2QSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4NzMsCi0KLQkweDFDLCAweDcyLAotCTB4ODMsIDB4RTIsCi0JMHg3QiwgMHg4MCwgMHgxNSwgMHhFQSwKLQotCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0JMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKLQotCTB4NDAsIDB4MzAsCi0JMHgwMCwgMHhFMCwKLQkweENDLCAweEUyLAotCTB4NjQsIDB4NzIsCi0KLQkweDI1LCAweDQyLCAweDUyLCAweEJGLAotCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCi0KLQkweDMwLCAweDJFLCAweDMwLCAweERGLAotCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCi0KLQkweDE4LCAweDFELCAweDQ1LCAweEU5LAotCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCi0KLQkweDJCLCAweDQ5LCAweDUxLCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHg3MywKLQotCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0JMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKLQotCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0JMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0JMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKLQotCTB4QjAsIDB4MTAsCi0JMHgwOCwgMHhFMywKLQkweDQwLCAweDEwLAotCTB4QjgsIDB4MTAsCi0KLQkweDI2LCAweEYwLCAweDMwLCAweENELAotCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCi0KLQkweDJCLCAweDgwLCAweDIwLCAweEU5LAotCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweEE2LCAweDIwLAotCTB4ODgsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLQkweDIwLCAweDJBLCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLQkweDQ2LCAweDI0LCAweDQ2LCAweERGLAotCi0JMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLQkweDIwLCAweDM4LCAweDgwLCAweEJGLAotCi0JMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLQkweDRFLCAweDJDLCAweDRFLCAweERGLAotCi0JMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLQkweDU2LCAweDM0LCAweDU2LCAweERGLAotCi0JMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLQkweDIwLCAweDFELCAweDIwLCAweERGLAotCi0JMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4MDUsCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4ODksIDB4RTIsCi0JMHgyQiwgMHgzMCwKLQotCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4NjgsCi0JMHhCRiwgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLQkweDI4LCAweDA1LAotCTB4OTcsIDB4NzQsCi0KLQkweDAwLCAweEUwLAotCTB4MkEsIDB4MTAsCi0JMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4QywgMHhFMiwKLQkweDk1LCAweDA1LAotCi0JMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLQkweDFGLCAweEMxLCAweDE1LCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBOCwgMHg2NywKLQkweDlGLCAweDZCLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI4LCAweEMwLCAweDI4LCAweEFELAotCTB4MUQsIDB4MjUsCi0JMHgyMCwgMHgwNSwKLQotCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0JMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKLQotCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKLQotCTB4MjAsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweEI2LCAweDQ5LCAweDUxLCAweEJCLAotCi0JMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLQkweDE5LCAweDIwLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLQkweDNELCAweDIwLCAweDNELCAweERGLAotCi0JMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLQkweDFELCAweDIwLCAweDFELCAweERGLAotCi0JMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLQkweDI5LCAweDQ5LCAweDJBLCAweEI4LAotCi0JMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLQkweDNCLCAweDQ4LCAweDUwLCAweEJELAotCi0JMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4ODIsIDB4RTEsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI2LCAweDMwLAotCTB4MjksIDB4MzAsCi0JMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKLQotCTB4MkIsIDB4NzIsCi0JMHhDMiwgMHhFMSwKLQkweDJDLCAweEMwLCAweDQ0LCAweEMyLAotCi0JMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLQkweDBELCAweDI0LCAweDJDLCAweEJGLAotCi0JMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDI1LCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDMyLCAweDNFLCAweDVGLCAweEU5LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4MzAsCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIyLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCi0KLQkweDE5LCAweEMwLCAweEIwLCAweEU4LAotCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCi0KLQkweDMzLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCi0JMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLQkweDI4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCi0KLQkweDlCLCAweDNCLCAweDMzLCAweERGLAotCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCi0KLQkweDMwLCAweDQyLCAweDU2LCAweDlGLAotCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCi0KLQkweDI4LCAweDI4LCAweDI0LCAweEFGLAotCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDA1LCAweDQ3LCAweDU3LCAweEJGLAotCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCi0KLQkweDg4LCAweDgwLCAweDU4LCAweEU5LAotCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCi0KLQkweDMwLCAweDFELCAweDZGLCAweDhGLAotCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDFDLCAweDMwLCAweDI2LCAweERGLAotCTB4MDksIDB4RTMsCi0JMHgzQiwgMHgwNSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweEFDLCAweDIwLAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDJDLCAweDFDLCAweEMwLCAweEFGLAotCi0JMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAwLCAweEUwLAotCTB4QzgsIDB4MzAsCi0KLQkweDMwLCAweDQ2LCAweDMwLCAweEFGLAotCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCi0KLQkweDAwLCAweEUwLAotCTB4MjUsIDB4MjAsCi0JMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKLQotCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MjgsIDB4NzQsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDQ0LCAweDRDLCAweEIwLAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDJELCAweDIwLAotCTB4OUIsIDB4MTAsCi0KLQkweDgyLCAweDNFLCAweDU3LCAweEU5LAotCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCi0KLQkweDFFLCAweEJELCAweDU5LCAweDlGLAotCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDQ3LCAweDM4LCAweEFGLAotCTB4MzQsIDB4MjAsCi0JMHgyQSwgMHgzMCwKLQotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQkweDMyLCAweDIwLAotCTB4MDUsIDB4MjAsCi0KLQkweDg3LCAweDgwLCAweDU3LCAweEU5LAotCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCi0KLQkweDE3LCAweDQyLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHg2QSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweDMyLCAweDAwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI3LCAweEMwLCAweDQ0LCAweEMwLAotCi0JMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDFGLCAweDI2LCAweERGLAotCi0JMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCi0JMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweDNGLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLQkweDJCLCAweDA1LAotCTB4QTcsIDB4MjAsCi0KLQkweDMzLCAweDJCLCAweDM3LCAweERGLAotCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJELCAweDIxLCAweDFBLCAweEIwLAotCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjAsCi0KLQkweDBELCAweDIxLCAweDFBLCAweEIyLAotCTB4MDUsIDB4MjEsIDB4MzEsIDB4QjIsCi0KLQkweDAzLCAweDgwLCAweDJBLCAweEVBLAotCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCi0KLQkweDJELCAweDIwLAotCTB4MjUsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQkweDBELCAweDIwLAotCi0JMHhCMywgMHg2OCwKLQkweDk3LCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweDMzLCAweEFGLAotCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzAsCi0KLQkweDE2LCAweDQyLCAweDU2LCAweDlGLAotCTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCi0KLQkweDFFLCAweDYyLCAweDU3LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDIxLCAweDMxLCAweEI0LAotCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjQsCi0KLQkweDNGLCAweDJGLCAweDVELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMzLCAweDA1LAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKLQotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjYsCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCNiwKLQotCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDJGLCAweDIwLAotCi0JMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKLQkweDFFLCAweDI2LCAweDFFLCAweERGLAotCi0JMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKLQkweDE3LCAweDI2LCAweDE2LCAweERGLAotCi0JMHgyRCwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDJGLCAweDJGLCAweDFFLCAweEFGLAotCTB4MjUsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQotCTB4QTQsIDB4MTYsIDB4NEYsIDB4RTksCi0JMHgwRiwgMHhDMCwgMHgyMSwgMHhDMiwKLQotCTB4QTYsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MEQsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEYsIDB4MjAsCi0KLQkweDE3LCAweDUwLCAweDU2LCAweDlGLAotCTB4QTUsIDB4MzcsIDB4NEYsIDB4RTksCi0KLQkweDA2LCAweEMwLCAweDIxLCAweEM0LAotCTB4MEYsIDB4MTcsIDB4MEYsIDB4QUYsCi0KLQkweDM3LCAweDBGLCAweDVDLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJGLCAweEMwLCAweDQ0LCAweEM2LAotCTB4QTMsIDB4ODAsIDB4NEYsIDB4RTksCi0KLQkweDA2LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHgyNiwgMHgxRiwgMHhERiwKLQotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0JMHg5RCwgMHgxNywgMHg0RiwgMHhFOSwKLQotCTB4QTEsIDB4MUYsIDB4NEYsIDB4RTksCi0JMHhBMiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4MDYsIDB4MUYsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHg5RSwgMHgzNywgMHg0RiwgMHhFOSwKLQkweDJGLCAweDE3LCAweDJGLCAweEFGLAotCi0JMHhBMCwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDlDLCAweDgwLCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDU3LCAweDM5LCAweDIwLCAweEU5LAotCi0JMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDNCLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKLQkweDJCLCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLQkweDU3LCAweDM2LCAweDIwLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDkwLCAweEUyLAotCTB4MDAsIDB4RTAsCi0KLQkweDY4LCAweEZGLCAweDIwLCAweEVBLAotCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDlGLCAweDQxLCAweDQ5LCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDBELCAweDgwLCAweDA3LCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDM1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjUsIDB4MzAsCi0JMHgyRCwgMHgzMCwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweEE3LCAweDVCLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDY3LCAweEZGLCAweDBBLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM5LCAweDQxLCAweEM4LCAweEVDLAotCTB4NDIsIDB4RTEsCi0JMHgwMCwgMHhFMCwKLQotCTB4NjUsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RnenNhZltdID0gewotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg5OCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg4MSwgMHgwNCwKLQkweDg5LCAweDA0LAotCTB4MDEsIDB4MDQsCi0JMHgwOSwgMHgwNCwKLQotCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgxMSwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLQkweDQ5LCAweENDLCAweDQ5LCAweENELAotCi0JMHhEMSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDUxLCAweENDLCAweDUxLCAweENELAotCi0JMHg4MCwgMHgwNCwKLQkweDEwLCAweDA0LAotCTB4MDgsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4MDAsIDB4Q0MsIDB4QzAsIDB4Q0QsCi0JMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKLQotCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0JMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKLQotCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0JMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKLQotCTB4MTAsIDB4Q0MsIDB4MTAsIDB4Q0QsCi0JMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKLQotCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0JMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKLQotCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKLQotCTB4OTQsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKLQotCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0JMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKLQotCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0JMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4MzAsCi0JMHgxRCwgMHgzMCwKLQkweDU4LCAweEUzLAotCTB4MDAsIDB4RTAsCi0KLQkweEI1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDI0LCAweDQzLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDcyLAotCTB4MDksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDcyLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0JMHg5OCwgMHhFMSwKLQkweEI1LCAweDA1LAotCi0JMHhCRCwgMHgwNSwKLQkweDJFLCAweDMwLAotCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweEEwLCAweEU4LAotCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCi0KLQkweDQwLCAweDNDLCAweDQwLCAweEFELAotCTB4MzIsIDB4NkEsCi0JMHgyQSwgMHgzMCwKLQotCTB4MjAsIDB4NzMsCi0JMHgzMywgMHg2QSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4NzMsCi0KLQkweDFDLCAweDcyLAotCTB4ODMsIDB4RTIsCi0JMHg4MCwgMHg4MCwgMHgxNSwgMHhFQSwKLQotCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0JMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKLQotCTB4NDAsIDB4MzAsCi0JMHgwMCwgMHhFMCwKLQkweENDLCAweEUyLAotCTB4NjQsIDB4NzIsCi0KLQkweDI1LCAweDQyLCAweDUyLCAweEJGLAotCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCi0KLQkweDMwLCAweDJFLCAweDMwLCAweERGLAotCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCi0KLQkweDE4LCAweDFELCAweDQ1LCAweEU5LAotCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCi0KLQkweDJCLCAweDQ5LCAweDUxLCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHg3MywKLQotCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0JMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKLQotCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0JMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0JMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKLQotCTB4QjAsIDB4MTAsCi0JMHgwOCwgMHhFMywKLQkweDQwLCAweDEwLAotCTB4QjgsIDB4MTAsCi0KLQkweDI2LCAweEYwLCAweDMwLCAweENELAotCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCi0KLQkweDJCLCAweDgwLCAweDIwLCAweEU5LAotCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweEE2LCAweDIwLAotCTB4ODgsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLQkweDIwLCAweDJBLCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLQkweDQ2LCAweDI0LCAweDQ2LCAweERGLAotCi0JMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLQkweDIwLCAweDM4LCAweDgwLCAweEJGLAotCi0JMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLQkweDRFLCAweDJDLCAweDRFLCAweERGLAotCi0JMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLQkweDU2LCAweDM0LCAweDU2LCAweERGLAotCi0JMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLQkweDIwLCAweDFELCAweDIwLCAweERGLAotCi0JMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4MDUsCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4ODksIDB4RTIsCi0JMHgyQiwgMHgzMCwKLQotCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4NjgsCi0JMHhCRiwgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLQkweDI4LCAweDA1LAotCTB4OTcsIDB4NzQsCi0KLQkweDAwLCAweEUwLAotCTB4MkEsIDB4MTAsCi0JMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4QywgMHhFMiwKLQkweDk1LCAweDA1LAotCi0JMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLQkweDFGLCAweEMxLCAweDE1LCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBOCwgMHg2NywKLQkweDlGLCAweDZCLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI4LCAweEMwLCAweDI4LCAweEFELAotCTB4MUQsIDB4MjUsCi0JMHgyMCwgMHgwNSwKLQotCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0JMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKLQotCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKLQotCTB4MjAsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweEI2LCAweDQ5LCAweDUxLCAweEJCLAotCi0JMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLQkweDE5LCAweDIwLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLQkweDNELCAweDIwLCAweDNELCAweERGLAotCi0JMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLQkweDFELCAweDIwLCAweDFELCAweERGLAotCi0JMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLQkweDI5LCAweDQ5LCAweDJBLCAweEI4LAotCi0JMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLQkweDNCLCAweDQ4LCAweDUwLCAweEJELAotCi0JMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4ODIsIDB4RTEsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI2LCAweDMwLAotCTB4MjksIDB4MzAsCi0JMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKLQotCTB4MkIsIDB4NzIsCi0JMHhDMiwgMHhFMSwKLQkweDJDLCAweEMwLCAweDQ0LCAweEMyLAotCi0JMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLQkweDBELCAweDI0LCAweDJDLCAweEJGLAotCi0JMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDI1LCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDMyLCAweDNFLCAweDVGLCAweEU5LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4MzAsCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIyLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCi0KLQkweDE5LCAweEMwLCAweEIwLCAweEU4LAotCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCi0KLQkweDMzLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCi0JMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLQkweDI4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCi0KLQkweDlCLCAweDNCLCAweDMzLCAweERGLAotCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCi0KLQkweDMwLCAweDQyLCAweDU2LCAweDlGLAotCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCi0KLQkweDI4LCAweDI4LCAweDI0LCAweEFGLAotCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDA1LCAweDQ3LCAweDU3LCAweEJGLAotCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCi0KLQkweDg4LCAweDgwLCAweDU4LCAweEU5LAotCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCi0KLQkweDMwLCAweDFELCAweDZGLCAweDhGLAotCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDFDLCAweDMwLCAweDI2LCAweERGLAotCTB4MDksIDB4RTMsCi0JMHgzQiwgMHgwNSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweEFDLCAweDIwLAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDJDLCAweDFDLCAweEMwLCAweEFGLAotCi0JMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAwLCAweEUwLAotCTB4QzgsIDB4MzAsCi0KLQkweDMwLCAweDQ2LCAweDMwLCAweEFGLAotCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCi0KLQkweDAwLCAweEUwLAotCTB4MjUsIDB4MjAsCi0JMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKLQotCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MjgsIDB4NzQsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDQ0LCAweDRDLCAweEIwLAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDJELCAweDIwLAotCTB4OUIsIDB4MTAsCi0KLQkweDgyLCAweDNFLCAweDU3LCAweEU5LAotCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCi0KLQkweDFFLCAweEJELCAweDU5LCAweDlGLAotCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDQ3LCAweDM4LCAweEFGLAotCTB4MzQsIDB4MjAsCi0JMHgyQSwgMHgzMCwKLQotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQkweDMyLCAweDIwLAotCTB4MDUsIDB4MjAsCi0KLQkweDg3LCAweDgwLCAweDU3LCAweEU5LAotCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCi0KLQkweDE3LCAweDQyLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHg2QSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweDMyLCAweDAwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI3LCAweEMwLCAweDQ0LCAweEMwLAotCi0JMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDFGLCAweDI2LCAweERGLAotCi0JMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCi0JMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweDNGLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLQkweDJCLCAweDA1LAotCTB4QTcsIDB4MjAsCi0KLQkweDMzLCAweDJCLCAweDM3LCAweERGLAotCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJELCAweDIxLCAweDFBLCAweEIwLAotCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjAsCi0KLQkweDBELCAweDIxLCAweDFBLCAweEIyLAotCTB4MDUsIDB4MjEsIDB4MzEsIDB4QjIsCi0KLQkweDAzLCAweDgwLCAweDJBLCAweEVBLAotCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCi0KLQkweDJELCAweDIwLAotCTB4MjUsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQkweDBELCAweDIwLAotCi0JMHhCMywgMHg2OCwKLQkweDk3LCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweDMzLCAweEFGLAotCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzAsCi0KLQkweDE2LCAweDQyLCAweDU2LCAweDlGLAotCTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCi0KLQkweDFFLCAweDYyLCAweDU3LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDIxLCAweDMxLCAweEI0LAotCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjQsCi0KLQkweDNGLCAweDJGLCAweDVELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMzLCAweDA1LAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKLQotCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjYsCi0JMHgwNSwgMHgyMSwgMHgzMSwgMHhCNiwKLQotCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDJGLCAweDIwLAotCi0JMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKLQkweDFFLCAweDI2LCAweDFFLCAweERGLAotCi0JMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKLQkweDE3LCAweDI2LCAweDE2LCAweERGLAotCi0JMHgyRCwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDJGLCAweDJGLCAweDFFLCAweEFGLAotCTB4MjUsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQotCTB4QTQsIDB4MTYsIDB4NEYsIDB4RTksCi0JMHgwRiwgMHhDMCwgMHgyMSwgMHhDMiwKLQotCTB4QTYsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MEQsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQkweDJGLCAweEMwLCAweDIxLCAweEM2LAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNiwKLQkweDI1LCAweDQ0LCAweDU0LCAweEI2LAotCi0JMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEYsIDB4MjAsCi0KLQkweDJELCAweDIwLAotCTB4MjUsIDB4MjAsCi0JMHgwNywgMHhDMCwgMHg0NCwgMHhDNiwKLQotCTB4MTcsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHhBNSwgMHgzNywgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4QzAsIDB4MjEsIDB4QzQsCi0JMHgwRiwgMHgxNywgMHgwRiwgMHhBRiwKLQotCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4M0UsIDB4M0QsIDB4NUQsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDA3LCAweDIwLAotCi0JMHgyRiwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4QTMsIDB4MEYsIDB4NEYsIDB4RTksCi0KLQkweDA2LCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHgyNiwgMHgxRiwgMHhERiwKLQotCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0JMHhBMSwgMHgxRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCi0JMHg5RCwgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzUsIDB4MTcsIDB4NEYsIDB4RTksCi0JMHhBMiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4MDYsIDB4MUYsIDB4QUYsCi0JMHgzOSwgMHgzNywgMHg0RiwgMHhFOSwKLQotCTB4MkYsIDB4MkYsIDB4MTcsIDB4QUYsCi0JMHgwNywgMHgwNywgMHgxRSwgMHhBRiwKLQotCTB4QTAsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHg5RSwgMHgzRSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHg5QywgMHg4MCwgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKLQotCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0JMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHg5MCwgMHhFMiwKLQkweDAwLCAweEUwLAotCi0JMHg2MywgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDE5LCAweEM4LCAweEMxLCAweENELAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDJELCAweDQxLCAweDUxLCAweEJELAotCi0JMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDNELCAweDQwLCAweDUwLCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI1LCAweDMwLAotCTB4MkQsIDB4MzAsCi0KLQkweDM1LCAweDMwLAotCTB4QjUsIDB4MzAsCi0JMHhCRCwgMHgzMCwKLQkweDNELCAweDMwLAotCi0JMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2MiwgMHhGRiwgMHgwQSwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKLQkweDQyLCAweEUxLAotCTB4MDAsIDB4RTAsCi0KLQkweDYwLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM4LCAweDQwLCAweEMwLCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDVELCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3pzZltdID0gewotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg5OCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLQkweDNGLCAweEQ3LCAweDIyLCAweEJELAotCi0JMHg4MSwgMHgwNCwKLQkweDg5LCAweDA0LAotCTB4MDEsIDB4MDQsCi0JMHgwOSwgMHgwNCwKLQotCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgxMSwgMHgwNCwKLQkweDAwLCAweEUwLAotCi0JMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLQkweDQ5LCAweENDLCAweDQ5LCAweENELAotCi0JMHhEMSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDUxLCAweENDLCAweDUxLCAweENELAotCi0JMHg4MCwgMHgwNCwKLQkweDEwLCAweDA0LAotCTB4MDgsIDB4MDQsCi0JMHgwMCwgMHhFMCwKLQotCTB4MDAsIDB4Q0MsIDB4QzAsIDB4Q0QsCi0JMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKLQotCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0JMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKLQotCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0JMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKLQotCTB4MTAsIDB4Q0MsIDB4MTAsIDB4Q0QsCi0JMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKLQotCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0JMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKLQotCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKLQotCTB4OEYsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKLQotCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0JMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKLQotCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0JMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4MTUsIDB4MzAsCi0JMHgxRCwgMHgzMCwKLQkweDU4LCAweEUzLAotCTB4MDAsIDB4RTAsCi0KLQkweEI1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDI0LCAweDQzLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDE1LCAweDcyLAotCTB4MDksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweDFELCAweDcyLAotCi0JMHgzNSwgMHgzMCwKLQkweEI1LCAweDMwLAotCTB4QkQsIDB4MzAsCi0JMHgzRCwgMHgzMCwKLQotCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0JMHg5OCwgMHhFMSwKLQkweEI1LCAweDA1LAotCi0JMHhCRCwgMHgwNSwKLQkweDJFLCAweDMwLAotCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweEEwLCAweEU4LAotCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCi0KLQkweDQwLCAweDNDLCAweDQwLCAweEFELAotCTB4MzIsIDB4NkEsCi0JMHgyQSwgMHgzMCwKLQotCTB4MjAsIDB4NzMsCi0JMHgzMywgMHg2QSwKLQkweDAwLCAweEUwLAotCTB4MjgsIDB4NzMsCi0KLQkweDFDLCAweDcyLAotCTB4ODMsIDB4RTIsCi0JMHg3QiwgMHg4MCwgMHgxNSwgMHhFQSwKLQotCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0JMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKLQotCTB4NDAsIDB4MzAsCi0JMHgwMCwgMHhFMCwKLQkweENDLCAweEUyLAotCTB4NjQsIDB4NzIsCi0KLQkweDI1LCAweDQyLCAweDUyLCAweEJGLAotCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCi0KLQkweDMwLCAweDJFLCAweDMwLCAweERGLAotCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCi0KLQkweDE4LCAweDFELCAweDQ1LCAweEU5LAotCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCi0KLQkweDJCLCAweDQ5LCAweDUxLCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHgxRiwgMHg3MywKLQotCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0JMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKLQotCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0JMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKLQotCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0JMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKLQotCTB4QjAsIDB4MTAsCi0JMHgwOCwgMHhFMywKLQkweDQwLCAweDEwLAotCTB4QjgsIDB4MTAsCi0KLQkweDI2LCAweEYwLCAweDMwLCAweENELAotCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCi0KLQkweDJCLCAweDgwLCAweDIwLCAweEU5LAotCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweEE2LCAweDIwLAotCTB4ODgsIDB4RTIsCi0JMHgwMCwgMHhFMCwKLQkweEFGLCAweDIwLAotCi0JMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLQkweDIwLCAweDJBLCAweEMwLCAweEFGLAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLQkweDQ2LCAweDI0LCAweDQ2LCAweERGLAotCi0JMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLQkweDIwLCAweDM4LCAweDgwLCAweEJGLAotCi0JMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLQkweDRFLCAweDJDLCAweDRFLCAweERGLAotCi0JMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLQkweDU2LCAweDM0LCAweDU2LCAweERGLAotCi0JMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLQkweDIwLCAweDFELCAweDIwLCAweERGLAotCi0JMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLQkweDAwLCAweEUwLAotCTB4MUQsIDB4MDUsCi0KLQkweDA0LCAweDgwLCAweDEwLCAweEVBLAotCTB4ODksIDB4RTIsCi0JMHgyQiwgMHgzMCwKLQotCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QTAsIDB4NjgsCi0JMHhCRiwgMHgyNSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLQkweDI4LCAweDA1LAotCTB4OTcsIDB4NzQsCi0KLQkweDAwLCAweEUwLAotCTB4MkEsIDB4MTAsCi0JMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0JMHg4QywgMHhFMiwKLQkweDk1LCAweDA1LAotCi0JMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLQkweDFGLCAweEMxLCAweDE1LCAweEJELAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBOCwgMHg2NywKLQkweDlGLCAweDZCLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI4LCAweEMwLCAweDI4LCAweEFELAotCTB4MUQsIDB4MjUsCi0JMHgyMCwgMHgwNSwKLQotCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0JMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKLQotCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0JMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKLQotCTB4MjAsIDB4NzMsCi0JMHgwMCwgMHhFMCwKLQkweEI2LCAweDQ5LCAweDUxLCAweEJCLAotCi0JMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLQkweDE5LCAweDIwLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLQkweDNELCAweDIwLCAweDNELCAweERGLAotCi0JMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLQkweDFELCAweDIwLCAweDFELCAweERGLAotCi0JMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLQkweDI5LCAweDQ5LCAweDJBLCAweEI4LAotCi0JMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLQkweDNCLCAweDQ4LCAweDUwLCAweEJELAotCi0JMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4ODIsIDB4RTEsCi0KLQkweDFFLCAweEFGLCAweDU5LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI2LCAweDMwLAotCTB4MjksIDB4MzAsCi0JMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKLQotCTB4MkIsIDB4NzIsCi0JMHhDMiwgMHhFMSwKLQkweDJDLCAweEMwLCAweDQ0LCAweEMyLAotCi0JMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLQkweDBELCAweDI0LCAweDJDLCAweEJGLAotCi0JMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDI1LCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLQkweDMyLCAweDNFLCAweDVGLCAweEU5LAotCi0JMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4M0IsIDB4MzAsCi0KLQkweDFFLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCi0KLQkweDA1LCAweDQ0LCAweDU0LCAweEIyLAotCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCi0KLQkweDE5LCAweEMwLCAweEIwLCAweEU4LAotCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCi0KLQkweDMzLCAweDczLAotCTB4MDAsIDB4RTAsCi0JMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDIwLAotCi0JMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLQkweDI4LCAweDFELCAweDZGLCAweDhGLAotCi0JMHgwNSwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCi0KLQkweDlCLCAweDNCLCAweDMzLCAweERGLAotCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCi0KLQkweDMwLCAweDQyLCAweDU2LCAweDlGLAotCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCi0KLQkweDNGLCAweDhGLCAweDUxLCAweDlGLAotCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCi0KLQkweDI4LCAweDI4LCAweDI0LCAweEFGLAotCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDA1LCAweDQ3LCAweDU3LCAweEJGLAotCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCi0KLQkweDg4LCAweDgwLCAweDU4LCAweEU5LAotCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCi0KLQkweDMwLCAweDFELCAweDZGLCAweDhGLAotCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDFDLCAweDMwLCAweDI2LCAweERGLAotCTB4MDksIDB4RTMsCi0JMHgzQiwgMHgwNSwKLQotCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0JMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKLQotCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweEFDLCAweDIwLAotCi0JMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDJDLCAweDFDLCAweEMwLCAweEFGLAotCi0JMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAwLCAweEUwLAotCTB4QzgsIDB4MzAsCi0KLQkweDMwLCAweDQ2LCAweDMwLCAweEFGLAotCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCi0KLQkweDAwLCAweEUwLAotCTB4MjUsIDB4MjAsCi0JMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKLQotCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0JMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKLQotCTB4MjgsIDB4NzQsCi0JMHgwMCwgMHhFMCwKLQkweDBELCAweDQ0LCAweDRDLCAweEIwLAotCi0JMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDJELCAweDIwLAotCTB4OUIsIDB4MTAsCi0KLQkweDgyLCAweDNFLCAweDU3LCAweEU5LAotCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCi0KLQkweDFFLCAweEJELCAweDU5LCAweDlGLAotCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDQ3LCAweDM4LCAweEFGLAotCTB4MzQsIDB4MjAsCi0JMHgyQSwgMHgzMCwKLQotCTB4MDAsIDB4RTAsCi0JMHgwRCwgMHgyMCwKLQkweDMyLCAweDIwLAotCTB4MDUsIDB4MjAsCi0KLQkweDg3LCAweDgwLCAweDU3LCAweEU5LAotCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCi0KLQkweDE3LCAweDQyLCAweDU2LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHgzQiwgMHg2QSwKLQotCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0JMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKLQotCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0JMHgwMCwgMHhFMCwKLQkweDMyLCAweDAwLAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDI3LCAweEMwLCAweDQ0LCAweEMwLAotCi0JMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweDFGLCAweDFGLCAweDI2LCAweERGLAotCi0JMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLQkweDE3LCAweDI2LCAweDE3LCAweERGLAotCi0JMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLQkweDNGLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLQkweDJCLCAweDA1LAotCTB4QTcsIDB4MjAsCi0KLQkweDMzLCAweDJCLCAweDM3LCAweERGLAotCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCi0KLQkweDM0LCAweDgwLCAweDRGLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJELCAweDIxLCAweDFBLCAweEIwLAotCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjAsCi0KLQkweDBELCAweDIxLCAweDFBLCAweEIyLAotCTB4MDUsIDB4MjEsIDB4MzEsIDB4QjIsCi0KLQkweDAzLCAweDgwLCAweDJBLCAweEVBLAotCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCi0KLQkweDJELCAweDIwLAotCTB4MjUsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQkweDBELCAweDIwLAotCi0JMHhCMywgMHg2OCwKLQkweDk3LCAweDI1LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMzLCAweEMwLCAweDMzLCAweEFGLAotCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzAsCi0KLQkweDE2LCAweDQyLCAweDU2LCAweDlGLAotCTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCi0KLQkweDFFLCAweDYyLCAweDU3LCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDIxLCAweDMxLCAweEI0LAotCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjQsCi0KLQkweDNGLCAweDJGLCAweDVELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMzLCAweDA1LAotCTB4MDAsIDB4RTAsCi0JMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKLQotCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjYsCi0JMHgwNSwgMHgyMSwgMHgzMSwgMHhCNiwKLQotCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDJGLCAweDIwLAotCi0JMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKLQkweDFFLCAweDI2LCAweDFFLCAweERGLAotCi0JMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKLQkweDE3LCAweDI2LCAweDE2LCAweERGLAotCi0JMHgyRCwgMHgyMCwKLQkweDAwLCAweEUwLAotCTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCi0KLQkweDJGLCAweDJGLCAweDFFLCAweEFGLAotCTB4MjUsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQotCTB4QTQsIDB4MTYsIDB4NEYsIDB4RTksCi0JMHgwRiwgMHhDMCwgMHgyMSwgMHhDMiwKLQotCTB4QTYsIDB4ODAsIDB4NEYsIDB4RTksCi0JMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKLQotCTB4MEQsIDB4MjAsCi0JMHgwNSwgMHgyMCwKLQkweDJGLCAweEMwLCAweDIxLCAweEM2LAotCi0JMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4MEYsIDB4MjAsCi0KLQkweDE3LCAweDUwLCAweDU2LCAweDlGLAotCTB4QTUsIDB4MzcsIDB4NEYsIDB4RTksCi0KLQkweDA2LCAweEMwLCAweDIxLCAweEM0LAotCTB4MEYsIDB4MTcsIDB4MEYsIDB4QUYsCi0KLQkweDM3LCAweDBGLCAweDVDLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJGLCAweDIwLAotCTB4MDAsIDB4RTAsCi0JMHhBMywgMHg4MCwgMHg0RiwgMHhFOSwKLQotCTB4MDYsIDB4MjAsCi0JMHgwMCwgMHhFMCwKLQkweDFGLCAweDI2LCAweDFGLCAweERGLAotCi0JMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLQkweDM1LCAweDE3LCAweDRGLCAweEU5LAotCi0JMHhBMSwgMHgxRiwgMHg0RiwgMHhFOSwKLQkweEEyLCAweDNGLCAweDRGLCAweEU5LAotCi0JMHgwNiwgMHgwNiwgMHgxRiwgMHhBRiwKLQkweDM5LCAweDM3LCAweDRGLCAweEU5LAotCi0JMHgyRiwgMHgyRiwgMHgxNywgMHhBRiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhBMCwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgzMSwgMHg4MCwgMHg0RiwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDU3LCAweDM5LCAweDIwLCAweEU5LAotCi0JMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDNCLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKLQkweDJCLCAweDMyLCAweDIwLCAweEU5LAotCi0JMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLQkweDU3LCAweDM2LCAweDIwLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDQwLCAweDQwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDkwLCAweEUyLAotCTB4MDAsIDB4RTAsCi0KLQkweDY4LCAweEZGLCAweDIwLCAweEVBLAotCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCi0KLQkweDFGLCAweEQ3LCAweDE4LCAweEJELAotCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCi0KLQkweDlGLCAweDQxLCAweDQ5LCAweEJELAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDI1LCAweDQxLCAweDQ5LCAweEJELAotCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweDBELCAweDgwLCAweDA3LCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDM1LCAweDQwLCAweDQ4LCAweEJELAotCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MjUsIDB4MzAsCi0JMHgyRCwgMHgzMCwKLQotCTB4MzUsIDB4MzAsCi0JMHhCNSwgMHgzMCwKLQkweEJELCAweDMwLAotCTB4M0QsIDB4MzAsCi0KLQkweDlDLCAweEE3LCAweDVCLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDY3LCAweEZGLCAweDBBLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEM5LCAweDQxLCAweEM4LCAweEVDLAotCTB4NDIsIDB4RTEsCi0JMHgwMCwgMHhFMCwKLQotCTB4NjUsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3pbXSA9IHsKLQotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhEMywgMHg2QiwKLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDIzLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg1MSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg2MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDM5LCAweDY3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDYxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4NzgsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgxMCwgMHgwNCwKLQkweDIwLCAweDA0LAotCi0JMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDYyLCAweEJGLAotCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDUwLCAweEJELAotCTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDUxLCAweEJELAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDBFLCAweEJELAotCTB4OTcsIDB4RTIsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDM1LCAweDQ4LCAweEIxLCAweEU4LAotCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDY2LCAweDMxLCAweDY2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCi0KLQkweDY5LCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDAwLAotCTB4M0QsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDc1LCAweEY4LCAweEVDLAotCTB4MzUsIDB4MjAsCi0JMHgzRCwgMHgyMCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLQkweDU4LCAweDM1LCAweDU4LCAweEJGLAotCi0JMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKLQkweDQ5LCAweDNELCAweDQ5LCAweEJGLAotCi0JMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKLQkweDY5LCAweDNELCAweDY5LCAweEJGLAotCi0JMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLQkweDRELCAweDdELCAweEY4LCAweEVDLAotCi0JMHg1OSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQotCTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKLQotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0JMHg2NywgMHgzRCwgMHg2NywgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRiwgMHg1NywgMHhERiwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKLQotCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0JMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCi0JMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKLQotCTB4MjUsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEI0LAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjQsCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCi0JMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCi0JMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKLQotCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0JMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKLQotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0JMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKLQotCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0JMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKLQotCTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCi0JMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKLQotCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDBFLCAweDc3LAotCi0JMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLQkweDlGLCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU2LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY3LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKLQotCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKLQotCTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNDLCAweEQ3LCAweDNDLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM0LCAweDgwLCAweDM0LCAweEJELAotCTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ4LCAweDgwLCAweDQ4LCAweENGLAotCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCi0KLQkweDY4LCAweDMzLCAweDY4LCAweENGLAotCTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCi0KLQkweEJFLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU4LCAweDMzLCAweDU4LCAweENGLAotCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCi0KLQkweDdELCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6YVtdID0gewotCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDYwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDYxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweEQzLCAweDZCLAotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDUxLCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDYxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg3QywgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDEwLCAweDA0LAotCTB4MjAsIDB4MDQsCi0KLQkweDYxLCAweDUxLCAweEUwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0JMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0JMHg5NywgMHhFMiwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0JMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0JMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKLQotCTB4NkQsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MDAsCi0JMHgzRCwgMHgwMCwKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0JMHgzNSwgMHgyMCwKLQkweDNELCAweDIwLAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAotCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCi0KLQkweDY4LCAweDM1LCAweDY4LCAweEJGLAotCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCi0KLQkweDU5LCAweDNELCAweDU5LCAweEJGLAotCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCi0KLQkweDYzLCAweDYzLCAweDJELCAweERGLAotCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCi0KLQkweDU5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCi0JMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDUwLCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDU2LCAweDNGLCAweDU2LCAweERGLAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDY2LCAweDNELCAweDY2LCAweERGLAotCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQkweDY3LCAweDNELCAweDY3LCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNGLCAweDU3LCAweERGLAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU5LCAweDNGLCAweDU5LCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDY5LCAweDNELCAweDY5LCAweERGLAotCi0JMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLQkweDU4LCAweDNGLCAweDU4LCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLQkweDQ5LCAweDM3LCAweDQ5LCAweERGLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM0LCAweDgwLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEIwLAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEIyLAotCi0JMHgyOSwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDBGLCAweENGLCAweDc0LCAweEM2LAotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5QywgMHgwRiwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgwMiwgMHg0NCwgMHg2NCwgMHhCNCwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjYsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCNiwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDBBLCAweDQ3LCAweDU3LCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ2LCAweDU2LCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzYsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDUzLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ4LCAweDU4LCAweEJGLAotCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDJBLCAweDQ5LCAweDU5LCAweEJGLAotCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCi0KLQkweDgwLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDgyLCAweDMxLCAweDU3LCAweEU5LAotCTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM5LCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCi0KLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCi0KLQkweDhCLCAweDNDLCAweDIwLCAweEU5LAotCTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCi0KLQkweDU3LCAweDBELCAweDIwLCAweEU5LAotCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCi0KLQkweDJCLCAweDUwLCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgwRSwgMHg3NywKLQotCTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCi0JMHg5QiwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCi0KLQkweDY2LCAweDMzLCAweDY2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCi0KLQkweDBCLCAweDQ4LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY4LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU5LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM0LCAweEQ3LCAweDM0LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzQywgMHhENywgMHgzQywgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLQkweDNDLCAweDgwLCAweDNDLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKLQkweDU5LCAweDgwLCAweDU5LCAweENGLAotCi0JMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLQkweDQ5LCAweDNCLCAweDQ5LCAweENGLAotCi0JMHhCQSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKLQkweDY5LCAweDNCLCAweDY5LCAweENGLAotCi0JMHg3OSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdDJnemFmW10gPSB7Ci0KLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBBLCAweDQwLCAweDUwLCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDUxLCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4RDMsIDB4NkIsCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NTEsIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NjEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDgxLCAweDgwLCAweDE1LCAweEVBLAotCTB4MTAsIDB4MDQsCi0JMHgyMCwgMHgwNCwKLQotCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDBGLCAweDUyLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLQkweDFFLCAweDUxLCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDBFLCAweDYxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDYwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDYxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLQkweDk3LCAweEUyLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLQkweDNELCAweDU5LCAweEIxLCAweEU4LAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQkweDY3LCAweDM5LCAweDY3LCAweEJGLAotCi0JMHg3MiwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgwMCwKLQkweDNELCAweDAwLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweDhELCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLQkweDM1LCAweDIwLAotCTB4M0QsIDB4MjAsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDBFLCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0JMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKLQotCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0JMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKLQotCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKLQotCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0JMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKLQotCTB4NTksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0KLQkweDNGLCAweDUzLCAweEEwLCAweEU4LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDUwLCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDBGLCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU5LCAweDc4LCAweEY4LCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCi0KLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCi0KLQkweDQ4LCAweDM3LCAweDQ4LCAweERGLAotCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDY4LCAweDNELCAweDY4LCAweERGLAotCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCi0KLQkweDJFLCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDBGLCAweENGLCAweDc0LCAweEM2LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlDLCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEI0LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEI2LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM4LCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjYsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCNiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4M0QsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDY2LCAweEJGLAotCi0JMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDAyLCAweDQ3LCAweDY3LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlELCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDlFLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLQkweDFBLCAweDQzLCAweDYzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM1LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM5LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLQkweDAyLCAweDQ4LCAweDY4LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLQkweDFBLCAweDQ5LCAweDY5LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweEJGLCAweEVBLAotCi0JMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDgxLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLQkweDg2LCAweDc4LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc5LCAweDU3LCAweEU5LAotCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQkweDhBLCAweDM0LCAweDIwLCAweEU5LAotCi0JMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLQkweDM3LCAweDUwLCAweDYwLCAweEJELAotCi0JMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLQkweDM1LCAweDUxLCAweDYxLCAweEJELAotCi0JMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MEUsIDB4NzcsCi0KLQkweDI0LCAweDUxLCAweDIwLCAweEU5LAotCTB4OTYsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDBFLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDBCLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY2LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU3LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDU3LCAweDgwLCAweDU3LCAweENGLAotCi0JMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDY3LCAweDNCLCAweDY3LCAweENGLAotCi0JMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU4LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ5LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY5LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0JMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0JMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKLQotCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0JMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKLQotCTB4QjUsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0JMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKLQotCTB4NzQsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3pmW10gPSB7Ci0KLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBBLCAweDQwLCAweDUwLCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDUxLCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4RDMsIDB4NkIsCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NTEsIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NjEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDdELCAweDgwLCAweDE1LCAweEVBLAotCTB4MTAsIDB4MDQsCi0JMHgyMCwgMHgwNCwKLQotCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDBGLCAweDUyLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLQkweDFFLCAweDUxLCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDBFLCAweDYxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDYwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDYxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLQkweDk3LCAweEUyLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLQkweDNELCAweDU5LCAweEIxLCAweEU4LAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQkweDY3LCAweDM5LCAweDY3LCAweEJGLAotCi0JMHg2RSwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHgzNSwgMHgwMCwKLQkweDNELCAweDAwLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweDhELCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLQkweDM1LCAweDIwLAotCTB4M0QsIDB4MjAsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDBFLCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0JMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKLQotCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0JMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKLQotCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKLQotCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0JMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKLQotCTB4NTksIDB4RTMsCi0JMHgwMCwgMHhFMCwKLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0KLQkweDNGLCAweDUzLCAweEEwLCAweEU4LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDUwLCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDBGLCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU5LCAweDc4LCAweEY4LCAweEVDLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCi0KLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCi0KLQkweDQ4LCAweDM3LCAweDQ4LCAweERGLAotCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDY4LCAweDNELCAweDY4LCAweERGLAotCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDBGLCAweENGLCAweDc1LCAweEM2LAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDQ0LCAweDU0LCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCi0KLQkweDI4LCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDMxLCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCNCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEI0LAotCi0JMHgyQSwgMHg0NSwgMHg1NSwgMHhCNiwKLQkweDFBLCAweDQ1LCAweDY1LCAweEI2LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM4LCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MEEsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzOSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCi0JMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCi0JMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKLQotCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0JMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKLQotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0JMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKLQotCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0JMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKLQotCTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCi0JMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKLQotCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDBFLCAweDc3LAotCi0JMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLQkweDlBLCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU2LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY3LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKLQotCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKLQotCTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNDLCAweEQ3LCAweDNDLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM0LCAweDgwLCAweDM0LCAweEJELAotCTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ4LCAweDgwLCAweDQ4LCAweENGLAotCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCi0KLQkweDY4LCAweDMzLCAweDY4LCAweENGLAotCTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCi0KLQkweEJCLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU4LCAweDMzLCAweDU4LCAweENGLAotCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCi0KLQkweDc4LCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6c1tdID0gewotCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDYwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDYxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweEQzLCAweDZCLAotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDUxLCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDYxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg4NSwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDEwLCAweDA0LAotCTB4MjAsIDB4MDQsCi0KLQkweDYxLCAweDUxLCAweEUwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0JMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0JMHg5NywgMHhFMiwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0JMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0JMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKLQotCTB4NzYsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MDAsCi0JMHgzRCwgMHgwMCwKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0JMHgzNSwgMHgyMCwKLQkweDNELCAweDIwLAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAotCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCi0KLQkweDY4LCAweDM1LCAweDY4LCAweEJGLAotCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCi0KLQkweDU5LCAweDNELCAweDU5LCAweEJGLAotCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCi0KLQkweDYzLCAweDYzLCAweDJELCAweERGLAotCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCi0KLQkweDU5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCi0JMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDUwLCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDU2LCAweDNGLCAweDU2LCAweERGLAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDY2LCAweDNELCAweDY2LCAweERGLAotCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQkweDY3LCAweDNELCAweDY3LCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNGLCAweDU3LCAweERGLAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU5LCAweDNGLCAweDU5LCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDY5LCAweDNELCAweDY5LCAweERGLAotCi0JMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLQkweDU4LCAweDNGLCAweDU4LCAweERGLAotCi0JMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLQkweDQ5LCAweDM3LCAweDQ5LCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM4LCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEIyLAotCi0JMHgzMSwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDBGLCAweENGLCAweDc1LCAweEMwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNiwgMHgwRiwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDU1LCAweEIyLAotCTB4MUEsIDB4NDUsIDB4NjUsIDB4QjIsCi0KLQkweDBBLCAweDQ1LCAweDU1LCAweEI0LAotCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDY2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweEE3LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweEE4LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDAyLCAweDQ3LCAweDY3LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE0LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE1LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLQkweDFBLCAweDQzLCAweDYzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweEExLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweEEyLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLQkweDAyLCAweDQ4LCAweDY4LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLQkweDFBLCAweDQ5LCAweDY5LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweEJGLCAweEVBLAotCi0JMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDgxLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLQkweDg2LCAweDc4LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc5LCAweDU3LCAweEU5LAotCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQkweDhBLCAweDM0LCAweDIwLCAweEU5LAotCi0JMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLQkweDM3LCAweDUwLCAweDYwLCAweEJELAotCi0JMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLQkweDM1LCAweDUxLCAweDYxLCAweEJELAotCi0JMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MEUsIDB4NzcsCi0KLQkweDI0LCAweDUxLCAweDIwLCAweEU5LAotCTB4OTIsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDBFLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDBCLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY2LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU3LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDU3LCAweDgwLCAweDU3LCAweENGLAotCi0JMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDY3LCAweDNCLCAweDY3LCAweENGLAotCi0JMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU4LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ5LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY5LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0JMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0JMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKLQotCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0JMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKLQotCTB4QjIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0JMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKLQotCTB4NzAsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3pzYVtdID0gewotCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDYwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDYxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweEQzLCAweDZCLAotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDUxLCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDYxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg4QSwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDEwLCAweDA0LAotCTB4MjAsIDB4MDQsCi0KLQkweDYxLCAweDUxLCAweEUwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0JMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0JMHg5NywgMHhFMiwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0JMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0JMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKLQotCTB4N0IsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MDAsCi0JMHgzRCwgMHgwMCwKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0JMHgzNSwgMHgyMCwKLQkweDNELCAweDIwLAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAotCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCi0KLQkweDY4LCAweDM1LCAweDY4LCAweEJGLAotCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCi0KLQkweDU5LCAweDNELCAweDU5LCAweEJGLAotCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCi0KLQkweDYzLCAweDYzLCAweDJELCAweERGLAotCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCi0KLQkweDU5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCi0JMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDUwLCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDU2LCAweDNGLCAweDU2LCAweERGLAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDY2LCAweDNELCAweDY2LCAweERGLAotCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQkweDY3LCAweDNELCAweDY3LCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNGLCAweDU3LCAweERGLAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU5LCAweDNGLCAweDU5LCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDY5LCAweDNELCAweDY5LCAweERGLAotCi0JMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLQkweDU4LCAweDNGLCAweDU4LCAweERGLAotCi0JMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLQkweDQ5LCAweDM3LCAweDQ5LCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM4LCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEIyLAotCi0JMHgzNiwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDBGLCAweENGLCAweDc1LCAweEMwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNiwgMHgwRiwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDU1LCAweEIyLAotCTB4MUEsIDB4NDUsIDB4NjUsIDB4QjIsCi0KLQkweDBBLCAweDQ1LCAweDU1LCAweEI0LAotCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCi0KLQkweDBGLCAweENGLCAweDc0LCAweEM2LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlDLCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE4LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEI2LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDU2LCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ3LCAweDU3LCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTIsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDUzLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ4LCAweDU4LCAweEJGLAotCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDJBLCAweDQ5LCAweDU5LCAweEJGLAotCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCi0KLQkweDgwLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCi0KLQkweDgyLCAweDMxLCAweDU3LCAweEU5LAotCTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM5LCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCi0KLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCi0KLQkweDhCLCAweDNDLCAweDIwLCAweEU5LAotCTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCi0KLQkweDU3LCAweDBELCAweDIwLCAweEU5LAotCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCi0KLQkweDJCLCAweDUwLCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgwRSwgMHg3NywKLQotCTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCi0JMHg4RCwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCi0KLQkweDY2LCAweDMzLCAweDY2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCi0KLQkweDBCLCAweDQ4LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY4LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU5LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM0LCAweEQ3LCAweDM0LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzQywgMHhENywgMHgzQywgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLQkweDNDLCAweDgwLCAweDNDLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKLQkweDU5LCAweDgwLCAweDU5LCAweENGLAotCi0JMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLQkweDQ5LCAweDNCLCAweDQ5LCAweENGLAotCi0JMHhBRCwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKLQkweDY5LCAweDNCLCAweDY5LCAweENGLAotCi0JMHg2QiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdDJnenNhZltdID0gewotCi0JMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDYwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDYxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweEQzLCAweDZCLAotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDUxLCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDYxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg4RSwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDEwLCAweDA0LAotCTB4MjAsIDB4MDQsCi0KLQkweDYxLCAweDUxLCAweEUwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0JMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0JMHg5NywgMHhFMiwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0JMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0JMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKLQotCTB4N0YsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4MzUsIDB4MDAsCi0JMHgzRCwgMHgwMCwKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0JMHgzNSwgMHgyMCwKLQkweDNELCAweDIwLAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAotCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCi0KLQkweDY4LCAweDM1LCAweDY4LCAweEJGLAotCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCi0KLQkweDU5LCAweDNELCAweDU5LCAweEJGLAotCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCi0KLQkweDYzLCAweDYzLCAweDJELCAweERGLAotCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCi0KLQkweDU5LCAweEUzLAotCTB4MDAsIDB4RTAsCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCi0JMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDYzLCAweEEwLCAweEU4LAotCi0JMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDUwLCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDU2LCAweDNGLCAweDU2LCAweERGLAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDY2LCAweDNELCAweDY2LCAweERGLAotCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQkweDY3LCAweDNELCAweDY3LCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNGLCAweDU3LCAweERGLAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU5LCAweDNGLCAweDU5LCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDY5LCAweDNELCAweDY5LCAweERGLAotCi0JMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLQkweDU4LCAweDNGLCAweDU4LCAweERGLAotCi0JMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLQkweDQ5LCAweDM3LCAweDQ5LCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLQkweDAyLCAweDQ0LCAweDY0LCAweEIwLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM4LCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEIyLAotCi0JMHgzQSwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDBGLCAweENGLCAweDc1LCAweEMwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNiwgMHgwRiwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjQsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKLQotCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCi0JMHgwMiwgMHg0NSwgMHg2NSwgMHhCMCwKLQotCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDU1LCAweEIyLAotCTB4MUEsIDB4NDUsIDB4NjUsIDB4QjIsCi0KLQkweDBBLCAweDQ1LCAweDU1LCAweEI0LAotCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCi0KLQkweDBGLCAweENGLCAweDc0LCAweEM2LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDlDLCAweDBGLCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE4LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQkweDFBLCAweDQ0LCAweDY0LCAweEI2LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM2LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NSwgMHg1NSwgMHhCNiwKLQkweDAyLCAweDQ1LCAweDY1LCAweEI2LAotCi0JMHgzRCwgMHhDRiwgMHg3NSwgMHhDNiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDU2LCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDNELCAweDIwLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MEEsIDB4NDcsIDB4NTcsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzOSwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCi0JMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCi0JMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKLQotCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKLQotCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0JMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKLQotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0JMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKLQotCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0JMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKLQotCTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCi0JMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKLQotCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDBFLCAweDc3LAotCi0JMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLQkweDg5LCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU2LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY3LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKLQotCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKLQotCTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCi0JMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0JMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKLQotCTB4MEIsIDB4MDAsCi0JMHgxQiwgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDAwLAotCTB4MUMsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHg2NSwKLQkweDFCLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4NjUsCi0JMHgxQywgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDFCLCAweDYwLCAweEVDLAotCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCi0KLQkweDNDLCAweEQ3LCAweDNDLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDBCLCAweDJCLCAweERFLCAweEU4LAotCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM0LCAweDgwLCAweDM0LCAweEJELAotCTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDBCLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCi0KLQkweDQ4LCAweDgwLCAweDQ4LCAweENGLAotCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCi0KLQkweDY4LCAweDMzLCAweDY4LCAweENGLAotCTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCi0KLQkweEE5LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU4LCAweDMzLCAweDU4LCAweENGLAotCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCi0KLQkweDY3LCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6c2ZbXSA9IHsKLQotCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhEMywgMHg2QiwKLQkweDAwLCAweDhBLCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDIzLCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg1MSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg2MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLQkweDM5LCAweDY3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCi0KLQkweDYxLCAweDQxLCAweEUwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4OEEsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgxMCwgMHgwNCwKLQkweDIwLCAweDA0LAotCi0JMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDYyLCAweEJGLAotCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDUwLCAweEJELAotCTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDUxLCAweEJELAotCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDBFLCAweEJELAotCTB4OTcsIDB4RTIsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDM1LCAweDQ4LCAweEIxLCAweEU4LAotCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDY2LCAweDMxLCAweDY2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCi0KLQkweDdCLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDM1LCAweDAwLAotCTB4M0QsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDc1LCAweEY4LCAweEVDLAotCTB4MzUsIDB4MjAsCi0JMHgzRCwgMHgyMCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLQkweDU4LCAweDM1LCAweDU4LCAweEJGLAotCi0JMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKLQkweDQ5LCAweDNELCAweDQ5LCAweEJGLAotCi0JMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKLQkweDY5LCAweDNELCAweDY5LCAweEJGLAotCi0JMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLQkweDRELCAweDdELCAweEY4LCAweEVDLAotCi0JMHg1OSwgMHhFMywKLQkweDAwLCAweEUwLAotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQotCTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKLQotCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKLQotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0JMHg2NywgMHgzRCwgMHg2NywgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRiwgMHg1NywgMHhERiwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKLQotCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0JMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKLQotCTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCi0JMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzOCwgMHgwRiwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKLQotCTB4MzYsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgwRiwgMHhDRiwgMHg3NSwgMHhDMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDNELCAweENGLCAweDc1LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTYsIDB4MEYsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDU0LCAweEI0LAotCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjQsCi0KLQkweDBBLCAweDQ1LCAweDU1LCAweEIwLAotCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjAsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NSwgMHg1NSwgMHhCMiwKLQkweDFBLCAweDQ1LCAweDY1LCAweEIyLAotCi0JMHgwQSwgMHg0NSwgMHg1NSwgMHhCNCwKLQkweDAyLCAweDQ1LCAweDY1LCAweEI0LAotCi0JMHgwRiwgMHhDRiwgMHg3NSwgMHhDNiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEE3LCAweDMwLCAweDRGLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzMSwgMHgwRiwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDUsIDB4NTUsIDB4QjYsCi0JMHgxQSwgMHg0NSwgMHg2NSwgMHhCNiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDY2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE0LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE1LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLQkweDAyLCAweDQ3LCAweDY3LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEExLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEEyLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLQkweDFBLCAweDQzLCAweDYzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDM1LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDM5LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLQkweDAyLCAweDQ4LCAweDY4LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLQkweDFBLCAweDQ5LCAweDY5LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweEJGLCAweEVBLAotCi0JMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDgxLCAweDM4LCAweDU3LCAweEU5LAotCi0JMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLQkweDg2LCAweDc4LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc5LCAweDU3LCAweEU5LAotCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQkweDhBLCAweDM0LCAweDIwLCAweEU5LAotCi0JMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLQkweDM3LCAweDUwLCAweDYwLCAweEJELAotCi0JMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLQkweDM1LCAweDUxLCAweDYxLCAweEJELAotCi0JMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MEUsIDB4NzcsCi0KLQkweDI0LCAweDUxLCAweDIwLCAweEU5LAotCTB4OEQsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDBFLCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDBCLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDY2LCAweEEwLCAweEU4LAotCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDU3LCAweEEwLCAweEU4LAotCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCi0KLQkweDBCLCAweDAwLAotCTB4MUIsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHgwMCwKLQkweDFDLCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4NjUsCi0JMHgxQiwgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDBDLCAweDY1LAotCTB4MUMsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDBDLCAweDFDLCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLQkweDFCLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLQkweDNCLCAweEQ3LCAweDFCLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDU3LCAweDgwLCAweDU3LCAweENGLAotCi0JMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDY3LCAweDNCLCAweDY3LCAweENGLAotCi0JMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLQkweDFCLCAweDU4LCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLQkweDBDLCAweDQ5LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDY5LCAweEEwLCAweEU4LAotCi0JMHgwQiwgMHgwMCwKLQkweDFCLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEMsIDB4MDAsCi0JMHgxQywgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDBCLCAweDY1LAotCTB4MUIsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgwQywgMHg2NSwKLQkweDFDLCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0JMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgwQywgMHgxQywgMHg2MCwgMHhFQywKLQotCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0JMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKLQotCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0JMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKLQotCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0JMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKLQotCTB4QUQsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0JMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKLQotCTB4NkIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3RneltdID0gewotCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDUwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDUxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweENCLCAweDZCLAotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDQ5LCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDUxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDQ5LCAweDQxLCAweEMwLCAweEVDLAotCTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg1OCwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDA4LCAweDA0LAotCTB4MTAsIDB4MDQsCi0KLQkweDUxLCAweDQ5LCAweEMwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NEEsIDB4QkYsCi0JMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQotCTB4NEEsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDI2LCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0JMHgwMCwgMHhFMCwKLQkweDU5LCAweEUzLAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDNGLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDQ4LCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDI3LCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDQ0LCAweDRDLCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCi0KLQkweDFELCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDFBLCAweDQ0LCAweDU0LCAweEI0LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM4LCAweDNELCAweDIwLCAweEU5LAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDJBLCAweDQ2LCAweDRFLCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ3LCAweDRGLCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDRCLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDM3LCAweDQ4LCAweDUwLCAweEJELAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCi0KLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCi0KLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0KLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCi0KLQkweDJCLCAweDQ4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgyNiwgMHg3NywKLQotCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0JMHhBRiwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MUMsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0JMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDAwLAotCTB4MjQsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHg2NSwKLQkweDIzLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4NjUsCi0JMHgyNCwgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDIzLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDFDLCAweDJCLCAweERFLCAweEU4LAotCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDFDLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweEQ2LCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDRFLCAweDMzLCAweDRFLCAweENGLAotCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCi0KLQkweDlELCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3phW10gPSB7Ci0KLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIyLCAweDQwLCAweDQ4LCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDQ5LCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4Q0IsIDB4NkIsCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NDksIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NTEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDVDLCAweDgwLCAweDE1LCAweEVBLAotCTB4MDgsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQotCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLQkweDI3LCAweDRBLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDFFLCAweDQ5LCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDI2LCAweDUxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDUwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDUxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDRFLCAweDMxLCAweDRFLCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCi0JMHg0RSwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQkweDAwLCAweEUwLAotCTB4NTksIDB4RTMsCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRCwgMHg1NywgMHhERiwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzYsCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQotCTB4MjAsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4OUMsIDB4MjcsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDQ0LCAweDRDLCAweEI0LAotCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjQsCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEI2LAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjYsCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLQkweDAyLCAweDQ3LCAweDU3LCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM2LCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM3LCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLQkweDFBLCAweDQzLCAweDUzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDlELCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDlFLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweDIwLCAweEU5LAotCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQkweDM1LCAweDQ5LCAweDUxLCAweEJELAotCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQkweDU3LCAweDI1LCAweDIwLCAweEU5LAotCi0JMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MjYsIDB4NzcsCi0KLQkweDI0LCAweDQ5LCAweDIwLCAweEU5LAotCTB4QUIsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDI2LCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDFDLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDU2LCAweEEwLCAweEU4LAotCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDI0LCAweDRGLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHgwMCwKLQkweDI0LCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4NjUsCi0JMHgyMywgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDY1LAotCTB4MjQsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHgyMywgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDFELCAweDI0LCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgxQywgMHgyQiwgMHhERSwgMHhFOCwKLQkweDIzLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgxQywgMHhCRCwKLQkweDNCLCAweEQ3LCAweDIzLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDRGLCAweDgwLCAweDRGLCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHhEMywgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg0RSwgMHgzMywgMHg0RSwgMHhDRiwKLQkweDU3LCAweDNCLCAweDU3LCAweENGLAotCi0JMHg5OSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6YWZbXSA9IHsKLQotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhDQiwgMHg2QiwKLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDI5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg0OSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg1MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDM5LCAweDU3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEMwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4NjEsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgwOCwgMHgwNCwKLQkweDEwLCAweDA0LAotCi0JMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDRBLCAweEJGLAotCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDQ4LCAweEJELAotCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDQ5LCAweEJELAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDI2LCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDRGLCAweDM5LCAweDRGLCAweEJGLAotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0KLQkweDUzLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDQyLCAweDczLCAweEY4LCAweEVDLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweEE1LCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDRCLCAweDRCLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCTB4MDAsIDB4RTAsCi0JMHg1OSwgMHhFMywKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDQ4LCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU2LCAweDNELCAweDU2LCAweERGLAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDRFLCAweDNGLCAweDRFLCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDRGLCAweDNGLCAweDRGLCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNELCAweDU3LCAweERGLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDM0LCAweDM3LCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEIyLAotCi0JMHgyNiwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgyNywgMHhDRiwgMHg3NCwgMHhDNiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5QywgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCNCwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDNELCAweENGLCAweDc1LCAweEM2LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEI2LAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDNELCAweDIwLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzOSwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKLQotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0JMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKLQotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0JMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKLQotCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDI2LCAweDc3LAotCi0JMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKLQkweEE2LCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDIzLCAweDRFLCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQkweDFELCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDU3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDY1LAotCTB4MjMsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHg2NSwKLQkweDI0LCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgyMywgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4Q0QsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0JMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKLQotCTB4OTQsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3RnemZbXSA9IHsKLQotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0JMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKLQotCTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKLQotCTB4QzMsIDB4NkIsCi0JMHhDQiwgMHg2QiwKLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDk2LCAweEUyLAotCTB4NDEsIDB4MDQsCi0KLQkweDdCLCAweDQzLCAweEEwLCAweEU4LAotCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweEFELCAweEVFLCAweDI5LCAweDlGLAotCTB4MDAsIDB4RTAsCi0JMHg0OSwgMHgwNCwKLQotCTB4OTAsIDB4RTIsCi0JMHg1MSwgMHgwNCwKLQkweDMxLCAweDQ2LCAweEIxLCAweEU4LAotCi0JMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDM5LCAweDU3LCAweEIxLCAweEU4LAotCi0JMHgwMCwgMHgwNCwKLQkweDQ2LCAweEUyLAotCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDUxLCAweDQxLCAweEMwLCAweEVDLAotCTB4MzEsIDB4MDAsCi0JMHgzOSwgMHgwMCwKLQotCTB4NUQsIDB4ODAsIDB4MTUsIDB4RUEsCi0JMHgwOCwgMHgwNCwKLQkweDEwLCAweDA0LAotCi0JMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKLQkweDJGLCAweDQxLCAweDYwLCAweEVBLAotCi0JMHgzMSwgMHgyMCwKLQkweDM5LCAweDIwLAotCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCi0KLQkweDJBLCAweDQyLCAweDRBLCAweEJGLAotCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCi0KLQkweDFBLCAweDQyLCAweDUyLCAweEJGLAotCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCi0KLQkweDMyLCAweDQwLCAweDQ4LCAweEJELAotCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCi0KLQkweDEyLCAweDQxLCAweDQ5LCAweEJELAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCi0KLQkweEJGLCAweDJGLCAweDI2LCAweEJELAotCTB4MDAsIDB4RTAsCi0JMHg3QiwgMHg3MiwKLQotCTB4MzIsIDB4MjAsCi0JMHgyMiwgMHgyMCwKLQkweDEyLCAweDIwLAotCTB4M0EsIDB4MjAsCi0KLQkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAotCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCi0KLQkweEIzLCAweEUyLCAweDJELCAweDlGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDU2LCAweDMxLCAweDU2LCAweEJGLAotCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCi0KLQkweDRGLCAweDM5LCAweDRGLCAweEJGLAotCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0KLQkweDRGLCAweDgwLCAweDA3LCAweEVBLAotCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCi0KLQkweDQyLCAweDczLCAweEY4LCAweEVDLAotCTB4MDAsIDB4RTAsCi0JMHgyRCwgMHg3MywKLQotCTB4MzMsIDB4NzIsCi0JMHgwQywgMHhFMywKLQkweEE1LCAweDJGLCAweDFFLCAweEJELAotCi0JMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLQkweDRCLCAweDRCLCAweDJELCAweERGLAotCi0JMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLQkweDU4LCAweEUzLAotCTB4MzMsIDB4NjYsCi0KLQkweDUzLCAweDUzLCAweDJELCAweERGLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweEI4LCAweDM4LCAweDMzLCAweEJGLAotCTB4MDAsIDB4RTAsCi0JMHg1OSwgMHhFMywKLQotCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0JMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKLQotCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0JMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4MkQsIDB4NzMsCi0JMHgzMCwgMHg3NiwKLQkweDA1LCAweDgwLCAweDNELCAweEVBLAotCi0JMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLQkweDNELCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKLQkweDJCLCAweDQ4LCAweDNDLCAweEU5LAotCi0JMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCi0JMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLQkweDFELCAweDMyLCAweDQxLCAweEU5LAotCi0JMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLQkweDU2LCAweDNELCAweDU2LCAweERGLAotCi0JMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLQkweDRFLCAweDNGLCAweDRFLCAweERGLAotCi0JMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLQkweDRGLCAweDNGLCAweDRGLCAweERGLAotCi0JMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLQkweDIyLCAweDIyLCAweDJELCAweERGLAotCi0JMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLQkweDNBLCAweDNBLCAweDJELCAweERGLAotCi0JMHg0NywgMHgzNywgMHg0NywgMHhERiwKLQkweDU3LCAweDNELCAweDU3LCAweERGLAotCi0JMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLQkweDM3LCAweENGLCAweDc0LCAweEM0LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDM0LCAweDgwLCAweDIwLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyNywgMHhDRiwgMHg3NSwgMHhDNiwKLQkweDNDLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLQkweDAyLCAweDQ0LCAweDU0LCAweEIwLAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLQkweDFBLCAweDQ0LCAweDU0LCAweEIyLAotCi0JMHgyMCwgMHg4MCwgMHgzQSwgMHhFQSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMyLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzMSwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjQsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCNCwKLQotCTB4MkEsIDB4NDUsIDB4NEQsIDB4QjYsCi0JMHgxQSwgMHg0NSwgMHg1NSwgMHhCNiwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDBBLCAweDQ3LCAweDRGLCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ2LCAweDRFLCAweEJGLAotCTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzYsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDRCLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzUsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzksIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDM3LCAweDQ4LCAweDUwLCAweEJELAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCi0KLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCi0KLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0KLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCi0KLQkweDJCLCAweDQ4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgyNiwgMHg3NywKLQotCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0JMHhBQSwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MUMsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0JMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDAwLAotCTB4MjQsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHg2NSwKLQkweDIzLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4NjUsCi0JMHgyNCwgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDIzLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDFDLCAweDJCLCAweERFLCAweEU4LAotCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDFDLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweEQzLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDRFLCAweDMzLCAweDRFLCAweENGLAotCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCi0KLQkweDk4LCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3pzW10gPSB7Ci0KLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIyLCAweDQwLCAweDQ4LCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDQ5LCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4Q0IsIDB4NkIsCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NDksIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NTEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDY1LCAweDgwLCAweDE1LCAweEVBLAotCTB4MDgsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQotCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLQkweDI3LCAweDRBLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDFFLCAweDQ5LCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDI2LCAweDUxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDUwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDUxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDRFLCAweDMxLCAweDRFLCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCi0JMHg1NywgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQkweDAwLCAweEUwLAotCTB4NTksIDB4RTMsCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRCwgMHg1NywgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQotCTB4MjksIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgyNywgMHhDRiwgMHg3NSwgMHhDMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDNELCAweENGLCAweDc1LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEI0LAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjQsCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEIwLAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NSwgMHg0RCwgMHhCMiwKLQkweDFBLCAweDQ1LCAweDU1LCAweEIyLAotCi0JMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKLQkweDAyLCAweDQ1LCAweDU1LCAweEI0LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKLQotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0JMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKLQotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0JMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKLQotCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDI2LCAweDc3LAotCi0JMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKLQkweEEyLCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDIzLCAweDRFLCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQkweDFELCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDU3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDY1LAotCTB4MjMsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHg2NSwKLQkweDI0LCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgyMywgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4Q0EsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0JMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKLQotCTB4OTAsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3RnenNhW10gPSB7Ci0KLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIyLCAweDQwLCAweDQ4LCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDQ5LCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4Q0IsIDB4NkIsCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NDksIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NTEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDZBLCAweDgwLCAweDE1LCAweEVBLAotCTB4MDgsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQotCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLQkweDI3LCAweDRBLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDFFLCAweDQ5LCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDI2LCAweDUxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDUwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDUxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDRFLCAweDMxLCAweDRFLCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCi0JMHg1QywgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQkweDAwLCAweEUwLAotCTB4NTksIDB4RTMsCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRCwgMHg1NywgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQotCTB4MkUsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgyNywgMHhDRiwgMHg3NSwgMHhDMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDNELCAweENGLCAweDc1LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEI0LAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjQsCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEIwLAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NSwgMHg0RCwgMHhCMiwKLQkweDFBLCAweDQ1LCAweDU1LCAweEIyLAotCi0JMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKLQkweDAyLCAweDQ1LCAweDU1LCAweEI0LAotCi0JMHgyNywgMHhDRiwgMHg3NCwgMHhDNiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEE3LCAweDMwLCAweDRGLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5QywgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE0LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE1LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLQkweDAyLCAweDQ3LCAweDU3LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEExLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEEyLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLQkweDFBLCAweDQzLCAweDUzLCAweEJGLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDlELCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDlFLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDgwLCAweDMxLCAweDU3LCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDgxLCAweDM5LCAweDU3LCAweEU5LAotCi0JMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLQkweDhBLCAweDM2LCAweDIwLCAweEU5LAotCi0JMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLQkweDhCLCAweDNFLCAweDIwLCAweEU5LAotCi0JMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLQkweDg3LCAweDc3LCAweDU3LCAweEU5LAotCi0JMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLQkweDM1LCAweDQ5LCAweDUxLCAweEJELAotCi0JMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLQkweDMwLCAweDFGLCAweDVGLCAweEU5LAotCi0JMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLQkweDU3LCAweDI1LCAweDIwLCAweEU5LAotCi0JMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLQkweDFELCAweDM3LCAweEUxLCAweEVBLAotCi0JMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLQkweDAwLCAweEUwLAotCTB4MjYsIDB4NzcsCi0KLQkweDI0LCAweDQ5LCAweDIwLCAweEU5LAotCTB4OUQsIDB4RkYsIDB4MjAsIDB4RUEsCi0KLQkweDE2LCAweDI2LCAweDIwLCAweEU5LAotCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCi0KLQkweDFDLCAweDQ2LCAweEEwLCAweEU4LAotCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCi0KLQkweDJCLCAweDU2LCAweEEwLCAweEU4LAotCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCi0KLQkweDI0LCAweDRGLCAweEEwLCAweEU4LAotCTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCi0KLQkweDFDLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyQiwgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHgwMCwKLQkweDI0LCAweDAwLAotCTB4MkMsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4NjUsCi0JMHgyMywgMHg2NSwKLQkweDJCLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDY1LAotCTB4MjQsIDB4NjUsCi0JMHgyQywgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHgyMywgMHg2MCwgMHhFQywKLQkweDM2LCAweEQ3LCAweDM2LCAweEFELAotCi0JMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLQkweDFELCAweDI0LCAweDYwLCAweEVDLAotCi0JMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLQkweDJDLCAweDgwLCAweDYwLCAweEVDLAotCi0JMHgxQywgMHgyQiwgMHhERSwgMHhFOCwKLQkweDIzLCAweDgwLCAweERFLCAweEU4LAotCi0JMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLQkweDNFLCAweDgwLCAweDNFLCAweEJELAotCi0JMHgzMywgMHhENywgMHgxQywgMHhCRCwKLQkweDNCLCAweEQ3LCAweDIzLCAweEJELAotCi0JMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLQkweDRGLCAweDgwLCAweDRGLCAweENGLAotCi0JMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLQkweDQ3LCAweDNCLCAweDQ3LCAweENGLAotCi0JMHhDNSwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg0RSwgMHgzMywgMHg0RSwgMHhDRiwKLQkweDU3LCAweDNCLCAweDU3LCAweENGLAotCi0JMHg4QiwgMHhGRiwgMHgyMCwgMHhFQSwKLQkweDU3LCAweEMwLCAweEJGLCAweEVBLAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6c2FmW10gPSB7Ci0KLQkweDAwLCAweDg4LCAweDk4LCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLQkweEZGLCAweDgwLCAweEMwLCAweEU5LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDIyLCAweDQwLCAweDQ4LCAweEJGLAotCTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCi0KLQkweDMyLCAweDQxLCAweDQ5LCAweEJGLAotCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCi0KLQkweEMzLCAweDZCLAotCTB4Q0IsIDB4NkIsCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHg5NiwgMHhFMiwKLQkweDQxLCAweDA0LAotCi0JMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLQkweDczLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKLQkweDAwLCAweEUwLAotCTB4NDksIDB4MDQsCi0KLQkweDkwLCAweEUyLAotCTB4NTEsIDB4MDQsCi0JMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKLQotCTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKLQotCTB4MDAsIDB4MDQsCi0JMHg0NiwgMHhFMiwKLQkweDczLCAweDUzLCAweEEwLCAweEU4LAotCi0JMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLQkweDMxLCAweDAwLAotCTB4MzksIDB4MDAsCi0KLQkweDZFLCAweDgwLCAweDE1LCAweEVBLAotCTB4MDgsIDB4MDQsCi0JMHgxMCwgMHgwNCwKLQotCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0JMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKLQotCTB4MzEsIDB4MjAsCi0JMHgzOSwgMHgyMCwKLQkweDFGLCAweDQyLCAweEEwLCAweEU4LAotCi0JMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLQkweDI3LCAweDRBLCAweEEwLCAweEU4LAotCi0JMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKLQkweDFFLCAweDQ5LCAweDYwLCAweEVBLAotCi0JMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLQkweDI2LCAweDUxLCAweDYwLCAweEVBLAotCi0JMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLQkweDIyLCAweDQwLCAweDUwLCAweEJELAotCi0JMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKLQkweDNBLCAweDQxLCAweDUxLCAweEJELAotCi0JMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLQkweDAwLCAweEUwLAotCTB4N0IsIDB4NzIsCi0KLQkweDMyLCAweDIwLAotCTB4MjIsIDB4MjAsCi0JMHgxMiwgMHgyMCwKLQkweDNBLCAweDIwLAotCi0JMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLQkweDRFLCAweDMxLCAweDRFLCAweEJGLAotCi0JMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLQkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAotCi0JMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKLQkweDU3LCAweDM5LCAweDU3LCAweEJGLAotCi0JMHg2MCwgMHg4MCwgMHgwNywgMHhFQSwKLQkweDI0LCAweDQxLCAweDIwLCAweEU5LAotCi0JMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLQkweDAwLCAweEUwLAotCTB4MkQsIDB4NzMsCi0KLQkweDMzLCAweDcyLAotCTB4MEMsIDB4RTMsCi0JMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKLQotCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0JMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKLQotCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCi0JMHg1OCwgMHhFMywKLQkweDMzLCAweDY2LAotCi0JMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLQkweDAwLCAweEUwLAotCTB4NTksIDB4RTMsCi0KLQkweDFFLCAweDEyLCAweDQxLCAweEU5LAotCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCi0KLQkweDJCLCAweDQwLCAweDNELCAweEU5LAotCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCi0KLQkweDJELCAweDczLAotCTB4MzAsIDB4NzYsCi0JMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKLQotCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0JMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKLQotCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0JMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLQotCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0JMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLQotCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0JMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKLQotCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0JMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKLQotCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0JMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKLQotCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0JMHg1NywgMHgzRCwgMHg1NywgMHhERiwKLQotCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0JMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKLQotCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0JMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKLQotCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCi0JMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKLQotCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0JMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKLQotCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0JMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKLQotCTB4MzIsIDB4ODAsIDB4M0EsIDB4RUEsCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgyNywgMHhDRiwgMHg3NSwgMHhDMCwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCi0KLQkweDNELCAweENGLCAweDc1LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEI0LAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjQsCi0KLQkweDBBLCAweDQ1LCAweDRELCAweEIwLAotCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCi0KLQkweDg4LCAweDczLCAweDVFLCAweEU5LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0JMHgwQSwgMHgyMCwKLQkweDAyLCAweDIwLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweDNFLCAweDMwLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweDNGLCAweDM4LCAweDRGLCAweEU5LAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDNBLCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDNCLCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgyQSwgMHg0NSwgMHg0RCwgMHhCMiwKLQkweDFBLCAweDQ1LCAweDU1LCAweEIyLAotCi0JMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKLQkweDAyLCAweDQ1LCAweDU1LCAweEI0LAotCi0JMHgyNywgMHhDRiwgMHg3NCwgMHhDNiwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEE3LCAweDMwLCAweDRGLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg5QywgMHgyNywgMHgyMCwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCi0JMHgxQSwgMHg0NCwgMHg1NCwgMHhCNiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDUsIDB4NEQsIDB4QjYsCi0JMHgwMiwgMHg0NSwgMHg1NSwgMHhCNiwKLQotCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzYsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLQkweDFBLCAweDQ2LCAweDU2LCAweEJGLAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE0LCAweDMxLCAweDRGLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEE1LCAweDM5LCAweDRGLCAweEU5LAotCi0JMHgzMSwgMHgzRCwgMHgyMCwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDBBLCAweDQ3LCAweDRGLCAweEJGLAotCTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4QTIsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQzLCAweDRCLCAweEJGLAotCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzUsIDB4MzAsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzksIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCi0KLQkweDM3LCAweDQ4LCAweDUwLCAweEJELAotCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCi0KLQkweDg2LCAweDc2LCAweDU3LCAweEU5LAotCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCi0KLQkweDgyLCAweDMwLCAweDU3LCAweEU5LAotCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0KLQkweDgzLCAweDM4LCAweDU3LCAweEU5LAotCTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCi0KLQkweDg0LCAweDMxLCAweDVFLCAweEU5LAotCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0KLQkweDg1LCAweDM5LCAweDVFLCAweEU5LAotCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCi0KLQkweDJCLCAweDQ4LCAweDIwLCAweEU5LAotCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCi0KLQkweDFFLCAweDM1LCAweEUxLCAweEVBLAotCTB4MDAsIDB4RTAsCi0JMHgyNiwgMHg3NywKLQotCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0JMHg5OSwgMHhGRiwgMHgyMCwgMHhFQSwKLQotCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0JMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKLQotCTB4MUMsIDB4NDYsIDB4QTAsIDB4RTgsCi0JMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKLQotCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0JMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKLQotCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0JMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKLQotCTB4MUMsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDJCLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFELCAweDAwLAotCTB4MjQsIDB4MDAsCi0JMHgyQywgMHgwMCwKLQkweDAwLCAweEUwLAotCi0JMHgxQywgMHg2NSwKLQkweDIzLCAweDY1LAotCTB4MkIsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4NjUsCi0JMHgyNCwgMHg2NSwKLQkweDJDLCAweDY1LAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDIzLCAweDYwLCAweEVDLAotCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCi0KLQkweDJCLCAweDgwLCAweDYwLCAweEVDLAotCTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCi0KLQkweDNFLCAweEQ3LCAweDNFLCAweEFELAotCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCi0KLQkweDFDLCAweDJCLCAweERFLCAweEU4LAotCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCi0KLQkweDM2LCAweDgwLCAweDM2LCAweEJELAotCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCi0KLQkweDMzLCAweEQ3LCAweDFDLCAweEJELAotCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCi0KLQkweDQ2LCAweDgwLCAweDQ2LCAweENGLAotCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCi0KLQkweDU2LCAweDMzLCAweDU2LCAweENGLAotCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCi0KLQkweEMxLCAweEZGLCAweDIwLCAweEVBLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDRFLCAweDMzLCAweDRFLCAweENGLAotCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCi0KLQkweDg3LCAweEZGLCAweDIwLCAweEVBLAotCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCi0KLQkweDAwLCAweDgwLCAweEEwLCAweEU5LAotCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCi0KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3pzZltdID0gewotCi0JMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLQkweDAwLCAweDAwLCAweEQ4LCAweEVDLAotCi0JMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCi0JMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKLQkweDJBLCAweDQwLCAweDUwLCAweEJGLAotCi0JMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLQkweDNBLCAweDQxLCAweDUxLCAweEJGLAotCi0JMHhDMywgMHg2QiwKLQkweENCLCAweDZCLAotCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0KLQkweDczLCAweDdCLCAweEM4LCAweEVDLAotCTB4OTYsIDB4RTIsCi0JMHg0MSwgMHgwNCwKLQotCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0JMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKLQotCTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCi0JMHgwMCwgMHhFMCwKLQkweDQ5LCAweDA0LAotCi0JMHg5MCwgMHhFMiwKLQkweDUxLCAweDA0LAotCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCi0KLQkweDQ5LCAweDQxLCAweEMwLCAweEVDLAotCTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCi0KLQkweDAwLCAweDA0LAotCTB4NDYsIDB4RTIsCi0JMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKLQotCTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0JMHgzMSwgMHgwMCwKLQkweDM5LCAweDAwLAotCi0JMHg2QSwgMHg4MCwgMHgxNSwgMHhFQSwKLQkweDA4LCAweDA0LAotCTB4MTAsIDB4MDQsCi0KLQkweDUxLCAweDQ5LCAweEMwLCAweEVDLAotCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCi0KLQkweDMxLCAweDIwLAotCTB4MzksIDB4MjAsCi0JMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKLQotCTB4MkEsIDB4NDIsIDB4NEEsIDB4QkYsCi0JMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKLQotCTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCi0JMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKLQotCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0JMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKLQotCTB4MzIsIDB4NDAsIDB4NDgsIDB4QkQsCi0JMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKLQotCTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCi0JMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKLQotCTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0JMHgwMCwgMHhFMCwKLQkweDdCLCAweDcyLAotCi0JMHgzMiwgMHgyMCwKLQkweDIyLCAweDIwLAotCTB4MTIsIDB4MjAsCi0JMHgzQSwgMHgyMCwKLQotCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0JMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKLQotCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0JMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKLQotCTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCi0JMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLQotCTB4NUMsIDB4ODAsIDB4MDcsIDB4RUEsCi0JMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKLQotCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCi0JMHgwMCwgMHhFMCwKLQkweDJELCAweDczLAotCi0JMHgzMywgMHg3MiwKLQkweDBDLCAweEUzLAotCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCi0KLQkweDQzLCAweDQzLCAweDJELCAweERGLAotCTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCi0KLQkweEFFLCAweDFFLCAweDI2LCAweEJELAotCTB4NTgsIDB4RTMsCi0JMHgzMywgMHg2NiwKLQotCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0JMHgwMCwgMHhFMCwKLQkweDU5LCAweEUzLAotCi0JMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLQkweDFBLCAweDIyLCAweDQxLCAweEU5LAotCi0JMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLQkweDNGLCAweDRCLCAweEEwLCAweEU4LAotCi0JMHgyRCwgMHg3MywKLQkweDMwLCAweDc2LAotCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCi0KLQkweDM3LCAweDQzLCAweEEwLCAweEU4LAotCTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCi0KLQkweDQ4LCAweDcwLCAweEY4LCAweEVDLAotCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCi0KLQkweDFGLCAweDI3LCAweEJDLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE1LCAweEMwLCAweDIwLCAweEU5LAotCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0KLQkweDE4LCAweDNBLCAweDQxLCAweEU5LAotCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0KLQkweDJBLCAweDQwLCAweDIwLCAweEU5LAotCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCi0KLQkweDQ2LCAweDM3LCAweDQ2LCAweERGLAotCTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCi0KLQkweDE2LCAweDMwLCAweDIwLCAweEU5LAotCTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCi0KLQkweDQ3LCAweDM3LCAweDQ3LCAweERGLAotCTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCi0KLQkweDMyLCAweDMyLCAweDJELCAweERGLAotCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCi0KLQkweDEyLCAweDEyLCAweDJELCAweERGLAotCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCi0KLQkweDI3LCAweENGLCAweDc0LCAweEMyLAotCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCi0KLQkweDBBLCAweDQ0LCAweDRDLCAweEIwLAotCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCi0KLQkweDNELCAweENGLCAweDc0LCAweEMwLAotCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzgsIDB4MjcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCi0KLQkweDJBLCAweDQ0LCAweDRDLCAweEIyLAotCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCi0KLQkweDJFLCAweDgwLCAweDNBLCAweEVBLAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzAsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLQkweDMyLCAweDMxLCAweDVGLCAweEU5LAotCi0JMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLQkweDMzLCAweDM5LCAweDVGLCAweEU5LAotCi0JMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKLQkweDM3LCAweENGLCAweDc1LCAweEM0LAotCi0JMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLQkweEE2LCAweDI3LCAweDIwLCAweEU5LAotCi0JMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLQkweEEzLCAweDNELCAweDIwLCAweEU5LAotCi0JMHgyQSwgMHg0NCwgMHg0QywgMHhCNCwKLQkweDFBLCAweDQ0LCAweDU0LCAweEI0LAotCi0JMHgwQSwgMHg0NSwgMHg0RCwgMHhCMCwKLQkweDAyLCAweDQ1LCAweDU1LCAweEIwLAotCi0JMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLQkweDJBLCAweDIwLAotCTB4MUEsIDB4MjAsCi0KLQkweEEwLCAweDM3LCAweDIwLCAweEU5LAotCTB4MEEsIDB4MjAsCi0JMHgwMiwgMHgyMCwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDUsIDB4NEQsIDB4QjIsCi0JMHgxQSwgMHg0NSwgMHg1NSwgMHhCMiwKLQotCTB4MEEsIDB4NDUsIDB4NEQsIDB4QjQsCi0JMHgwMiwgMHg0NSwgMHg1NSwgMHhCNCwKLQotCTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzYsCi0JMHgyQSwgMHgyMCwKLQkweDFBLCAweDIwLAotCi0JMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKLQkweDBBLCAweDIwLAotCTB4MDIsIDB4MjAsCi0KLQkweDMxLCAweDUzLCAweDJGLCAweDlGLAotCTB4MzEsIDB4MjcsIDB4MjAsIDB4RTksCi0KLQkweDM5LCAweEU1LCAweDJDLCAweDlGLAotCTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCi0KLQkweDJBLCAweDQ1LCAweDRELCAweEI2LAotCTB4MUEsIDB4NDUsIDB4NTUsIDB4QjYsCi0KLQkweDMwLCAweDUwLCAweDJFLCAweDlGLAotCTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCi0KLQkweDM4LCAweDIxLCAweDJDLCAweDlGLAotCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCi0KLQkweDAwLCAweDgwLCAweDAwLCAweEU4LAotCTB4MkEsIDB4MjAsCi0JMHgxQSwgMHgyMCwKLQotCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0JMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0JMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKLQotCTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCi0JMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKLQotCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0JMHgzNSwgMHgzMSwgMHg0RiwgMHhFOSwKLQotCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0JMHgzOSwgMHgzOSwgMHg0RiwgMHhFOSwKLQotCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0JMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKLQotCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0JMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKLQotCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0JMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKLQotCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0JMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKLQotCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0JMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLQotCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0JMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKLQotCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0JMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLQotCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0JMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKLQotCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0JMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKLQotCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0JMHgwMCwgMHhFMCwKLQkweDI2LCAweDc3LAotCi0JMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKLQkweDlELCAweEZGLCAweDIwLCAweEVBLAotCi0JMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLQkweDU3LCAweDJFLCAweEJGLCAweEVBLAotCi0JMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLQkweDIzLCAweDRFLCAweEEwLCAweEU4LAotCi0JMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKLQkweDFELCAweDQ3LCAweEEwLCAweEU4LAotCi0JMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLQkweDJDLCAweDU3LCAweEEwLCAweEU4LAotCi0JMHgxQywgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MkIsIDB4MDAsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUQsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDJDLCAweDAwLAotCTB4MDAsIDB4RTAsCi0KLQkweDFDLCAweDY1LAotCTB4MjMsIDB4NjUsCi0JMHgyQiwgMHg2NSwKLQkweDAwLCAweEUwLAotCi0JMHgxRCwgMHg2NSwKLQkweDI0LCAweDY1LAotCTB4MkMsIDB4NjUsCi0JMHgwMCwgMHhFMCwKLQotCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0JMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKLQotCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0JMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKLQotCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0JMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKLQotCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0JMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKLQotCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0JMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKLQotCTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCi0JMHgzQiwgMHhENywgMHgyMywgMHhCRCwKLQotCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0JMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKLQotCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0JMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKLQotCTB4QzUsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLQotCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0JMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKLQotCTB4OEIsIDB4RkYsIDB4MjAsIDB4RUEsCi0JMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKLQotCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0JMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKLQotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3dhcnAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3dhcnAuYwppbmRleCA2NTFiOTNjLi45YWFkNDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV93YXJwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffd2FycC5jCkBAIC0yNywxMzIgKzI3LDEwOCBAQAogICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2loZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKwogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJtZ2FfZHJtLmgiCiAjaW5jbHVkZSAibWdhX2Rydi5oIgotI2luY2x1ZGUgIm1nYV91Y29kZS5oIgorCisjZGVmaW5lIEZJUk1XQVJFX0cyMDAgIm1hdHJveC9nMjAwX3dhcnAuZnciCisjZGVmaW5lIEZJUk1XQVJFX0c0MDAgIm1hdHJveC9nNDAwX3dhcnAuZnciCisKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9HMjAwKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9HNDAwKTsKIAogI2RlZmluZSBNR0FfV0FSUF9DT0RFX0FMSUdOCQkyNTYJLyogaW4gYnl0ZXMgKi8KIAotI2RlZmluZSBXQVJQX1VDT0RFX1NJWkUoIHdoaWNoICkJCQkJCVwKLQkoKHNpemVvZih3aGljaCkgLyBNR0FfV0FSUF9DT0RFX0FMSUdOICsgMSkgKiBNR0FfV0FSUF9DT0RFX0FMSUdOKQotCi0jZGVmaW5lIFdBUlBfVUNPREVfSU5TVEFMTCggd2hpY2gsIHdoZXJlICkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlEUk1fREVCVUcoICIgcGNiYXNlID0gMHglMDhseCAgdmNiYXNlID0gJXBcbiIsIHBjYmFzZSwgdmNiYXNlICk7XAotCWRldl9wcml2LT53YXJwX3BpcGVfcGh5c1t3aGVyZV0gPSBwY2Jhc2U7CQkJXAotCW1lbWNweSggdmNiYXNlLCB3aGljaCwgc2l6ZW9mKHdoaWNoKSApOwkJCQlcCi0JcGNiYXNlICs9IFdBUlBfVUNPREVfU0laRSggd2hpY2ggKTsJCQkJXAotCXZjYmFzZSArPSBXQVJQX1VDT0RFX1NJWkUoIHdoaWNoICk7CQkJCVwKLX0gd2hpbGUgKDApCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWdhX3dhcnBfZzQwMF9taWNyb2NvZGVfc2l6ZSA9Ci0gICAgKFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6KSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6YSkgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnemFmKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6ZikgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnenMpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3pzYSkgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnenNhZikgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnenNmKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJneikgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3phKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnemFmKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnemYpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6cykgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3pzYSkgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3pzYWYpICsgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6c2YpKTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZ2Ffd2FycF9nMjAwX21pY3JvY29kZV9zaXplID0KLSAgICAoV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3opICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3phKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6YWYpICsKLSAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3pmKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6cykgKwotICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnenNhKSArCi0gICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6c2FmKSArIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6c2YpKTsKLQotdW5zaWduZWQgaW50IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGNvbnN0IGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCi17Ci0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCWNhc2UgTUdBX0NBUkRfVFlQRV9HNDAwOgotCWNhc2UgTUdBX0NBUkRfVFlQRV9HNTUwOgotCQlyZXR1cm4gUEFHRV9BTElHTihtZ2Ffd2FycF9nNDAwX21pY3JvY29kZV9zaXplKTsKLQljYXNlIE1HQV9DQVJEX1RZUEVfRzIwMDoKLQkJcmV0dXJuIFBBR0VfQUxJR04obWdhX3dhcnBfZzIwMF9taWNyb2NvZGVfc2l6ZSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IG1nYV93YXJwX2luc3RhbGxfZzQwMF9taWNyb2NvZGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKLXsKLQl1bnNpZ25lZCBjaGFyICp2Y2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+aGFuZGxlOwotCXVuc2lnbmVkIGxvbmcgcGNiYXNlID0gZGV2X3ByaXYtPndhcnAtPm9mZnNldDsKLQotCW1lbXNldChkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMsIDAsIHNpemVvZihkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMpKTsKLQotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6LCBNR0FfV0FSUF9UR1opOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6ZiwgTUdBX1dBUlBfVEdaRik7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3phLCBNR0FfV0FSUF9UR1pBKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3RnemFmLCBNR0FfV0FSUF9UR1pBRik7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3pzLCBNR0FfV0FSUF9UR1pTKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3RnenNmLCBNR0FfV0FSUF9UR1pTRik7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3pzYSwgTUdBX1dBUlBfVEdaU0EpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6c2FmLCBNR0FfV0FSUF9UR1pTQUYpOwotCi0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Mmd6LCBNR0FfV0FSUF9UMkdaKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3pmLCBNR0FfV0FSUF9UMkdaRik7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Mmd6YSwgTUdBX1dBUlBfVDJHWkEpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnemFmLCBNR0FfV0FSUF9UMkdaQUYpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnenMsIE1HQV9XQVJQX1QyR1pTKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3pzZiwgTUdBX1dBUlBfVDJHWlNGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3pzYSwgTUdBX1dBUlBfVDJHWlNBKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3pzYWYsIE1HQV9XQVJQX1QyR1pTQUYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWdhX3dhcnBfaW5zdGFsbF9nMjAwX21pY3JvY29kZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQotewotCXVuc2lnbmVkIGNoYXIgKnZjYmFzZSA9IGRldl9wcml2LT53YXJwLT5oYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBwY2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+b2Zmc2V0OwotCi0JbWVtc2V0KGRldl9wcml2LT53YXJwX3BpcGVfcGh5cywgMCwgc2l6ZW9mKGRldl9wcml2LT53YXJwX3BpcGVfcGh5cykpOwotCi0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzIwMF90Z3osIE1HQV9XQVJQX1RHWik7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzIwMF90Z3pmLCBNR0FfV0FSUF9UR1pGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nMjAwX3RnemEsIE1HQV9XQVJQX1RHWkEpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2cyMDBfdGd6YWYsIE1HQV9XQVJQX1RHWkFGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nMjAwX3RnenMsIE1HQV9XQVJQX1RHWlMpOwotCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2cyMDBfdGd6c2YsIE1HQV9XQVJQX1RHWlNGKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nMjAwX3RnenNhLCBNR0FfV0FSUF9UR1pTQSk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzIwMF90Z3pzYWYsIE1HQV9XQVJQX1RHWlNBRik7Ci0KLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgV0FSUF9VQ09ERV9TSVpFKHNpemUpCQlBTElHTihzaXplLCBNR0FfV0FSUF9DT0RFX0FMSUdOKQogCiBpbnQgbWdhX3dhcnBfaW5zdGFsbF9taWNyb2NvZGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKLQljb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSA9IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGRldl9wcml2KTsKKwl1bnNpZ25lZCBjaGFyICp2Y2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+aGFuZGxlOworCXVuc2lnbmVkIGxvbmcgcGNiYXNlID0gZGV2X3ByaXYtPndhcnAtPm9mZnNldDsKKwljb25zdCBjaGFyICpmaXJtd2FyZV9uYW1lOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICpyZWM7CisJdW5zaWduZWQgaW50IHNpemU7CisJaW50IG5fcGlwZXMsIHdoZXJlOworCWludCByYyA9IDA7CiAKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSBNR0FfQ0FSRF9UWVBFX0c0MDA6CisJY2FzZSBNR0FfQ0FSRF9UWVBFX0c1NTA6CisJCWZpcm13YXJlX25hbWUgPSBGSVJNV0FSRV9HNDAwOworCQluX3BpcGVzID0gTUdBX01BWF9HNDAwX1BJUEVTOworCQlicmVhazsKKwljYXNlIE1HQV9DQVJEX1RZUEVfRzIwMDoKKwkJZmlybXdhcmVfbmFtZSA9IEZJUk1XQVJFX0cyMDA7CisJCW5fcGlwZXMgPSBNR0FfTUFYX0cyMDBfUElQRVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtZ2Ffd2FycCIsIDAsIE5VTEwsIDApOworCWlmIChJU19FUlIocGRldikpIHsKKwkJRFJNX0VSUk9SKCJtZ2E6IEZhaWxlZCB0byByZWdpc3RlciBtaWNyb2NvZGVcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKKwl9CisJcmMgPSByZXF1ZXN0X2loZXhfZmlybXdhcmUoJmZ3LCBmaXJtd2FyZV9uYW1lLCAmcGRldi0+ZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9SKCJtZ2E6IEZhaWxlZCB0byBsb2FkIG1pY3JvY29kZSBcIiVzXCJcbiIsCisJCQkgIGZpcm13YXJlX25hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCisJc2l6ZSA9IDA7CisJd2hlcmUgPSAwOworCWZvciAocmVjID0gKGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqKWZ3LT5kYXRhOworCSAgICAgcmVjOworCSAgICAgcmVjID0gaWhleF9uZXh0X2JpbnJlYyhyZWMpKSB7CisJCXNpemUgKz0gV0FSUF9VQ09ERV9TSVpFKGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7CisJCXdoZXJlKys7CisJfQorCisJaWYgKHdoZXJlICE9IG5fcGlwZXMpIHsKKwkJRFJNX0VSUk9SKCJtZ2E6IEludmFsaWQgbWljcm9jb2RlIFwiJXNcIlxuIiwgZmlybXdhcmVfbmFtZSk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCURSTV9ERUJVRygiTUdBIHVjb2RlIHNpemUgPSAlZCBieXRlc1xuIiwgc2l6ZSk7CiAJaWYgKHNpemUgPiBkZXZfcHJpdi0+d2FycC0+c2l6ZSkgewogCQlEUk1fRVJST1IoIm1pY3JvY29kZSB0b28gbGFyZ2UhICgldSA+ICVsdSlcbiIsCiAJCQkgIHNpemUsIGRldl9wcml2LT53YXJwLT5zaXplKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCWNhc2UgTUdBX0NBUkRfVFlQRV9HNDAwOgotCWNhc2UgTUdBX0NBUkRfVFlQRV9HNTUwOgotCQlyZXR1cm4gbWdhX3dhcnBfaW5zdGFsbF9nNDAwX21pY3JvY29kZShkZXZfcHJpdik7Ci0JY2FzZSBNR0FfQ0FSRF9UWVBFX0cyMDA6Ci0JCXJldHVybiBtZ2Ffd2FycF9pbnN0YWxsX2cyMDBfbWljcm9jb2RlKGRldl9wcml2KTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzLCAwLCBzaXplb2YoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzKSk7CisKKwl3aGVyZSA9IDA7CisJZm9yIChyZWMgPSAoY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICopZnctPmRhdGE7CisJICAgICByZWM7CisJICAgICByZWMgPSBpaGV4X25leHRfYmlucmVjKHJlYykpIHsKKwkJdW5zaWduZWQgaW50IHNyY19zaXplLCBkc3Rfc2l6ZTsKKworCQlEUk1fREVCVUcoIiBwY2Jhc2UgPSAweCUwOGx4ICB2Y2Jhc2UgPSAlcFxuIiwgcGNiYXNlLCB2Y2Jhc2UpOworCQlkZXZfcHJpdi0+d2FycF9waXBlX3BoeXNbd2hlcmVdID0gcGNiYXNlOworCQlzcmNfc2l6ZSA9IGJlMTZfdG9fY3B1KHJlYy0+bGVuKTsKKwkJZHN0X3NpemUgPSBXQVJQX1VDT0RFX1NJWkUoc3JjX3NpemUpOworCQltZW1jcHkodmNiYXNlLCByZWMtPmRhdGEsIHNyY19zaXplKTsKKwkJcGNiYXNlICs9IGRzdF9zaXplOworCQl2Y2Jhc2UgKz0gZHN0X3NpemU7CisJCXdoZXJlKys7CiAJfQorCitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJjOwogfQogCiAjZGVmaW5lIFdNSVNDX0VYUEVDVEVECQkoTUdBX1dVQ09ERUNBQ0hFX0VOQUJMRSB8IE1HQV9XTUFTVEVSX0VOQUJMRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5jCmluZGV4IGM3NWZkMzUuLjRjMzlhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9jY2UuYwpAQCAtMjksNiArMjksOSBAQAogICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgInIxMjhfZHJtLmgiCkBAIC0zNiw1MCArMzksOSBAQAogCiAjZGVmaW5lIFIxMjhfRklGT19ERUJVRwkJMAogCi0vKiBDQ0UgbWljcm9jb2RlIChmcm9tIEFUSSkgKi8KLXN0YXRpYyB1MzIgcjEyOF9jY2VfbWljcm9jb2RlW10gPSB7Ci0JMCwgMjc2ODM4NDAwLCAwLCAyNjg0NDk3OTIsIDIsIDE0MiwgMiwgMTQ1LCAwLCAxMDc2NzY1NzMxLCAwLAotCTE2MTcwMzk5NTEsIDAsIDc3NDU5Mjg3NywgMCwgMTk4NzU0MDI4NiwgMCwgMjMwNzQ5MDk0NlUsIDAsCi0JNTk5NTU4OTI1LCAwLCA1ODk1MDUzMTUsIDAsIDU5NjQ4NzA5MiwgMCwgNTg5NTA1MzE1LCAxLAotCTExNTQ0NTc2LCAxLCAyMDY4NDgsIDEsIDMxMTI5NiwgMSwgMTk4NjU2LCAyLCA5MTIyNzM0MjIsIDExLAotCTI2MjE0NCwgMCwgMCwgMSwgMzM1NTk4MzcsIDEsIDc0MzgsIDEsIDE0ODA5LCAxLCA2NjE1LCAxMiwgMjgsCi0JMSwgNjYxNCwgMTIsIDI4LCAyLCAyMywgMTEsIDE4ODc0MzY4LCAwLCAxNjc5MDkyMiwgMSwgNDA5NjAwLCA5LAotCTMwLCAxLCAxNDc4NTQ3NzIsIDE2LCA0MjA0ODMwNzIsIDMsIDgxOTIsIDAsIDEwMjQwLCAxLCAxOTg2NTYsCi0JMSwgMTU2MzAsIDEsIDUxMjAwLCAxMCwgMzQ4NTgsIDksIDQyLCAxLCAzMzU1OTgyMywgMiwgMTAyNzYsIDEsCi0JMTU3MTcsIDEsIDE1NzE4LCAyLCA0MywgMSwgMTU5MzY5NDgsIDEsIDU3MDQ4MDgzMSwgMSwgMTQ3MTUwNzEsCi0JMTIsIDMyMjEyMzgzMSwgMSwgMzM5NTMxMjUsIDEyLCA1NSwgMSwgMzM1NTk5MDgsIDEsIDE1NzE4LCAyLAotCTQ2LCA0LCAyMDk5MjU4LCAxLCA1MjYzMzYsIDEsIDQ0MjYyMywgNCwgNDE5NDM2NSwgMSwgNTA5OTUyLCAxLAotCTQ1OTAwNywgMywgMCwgMTIsIDkyLCAyLCA0NiwgMTIsIDE3NiwgMSwgMTU3MzQsIDEsIDIwNjg0OCwgMSwKLQkxODQzMiwgMSwgMTMzMTIwLCAxLCAxMDA2NzA3MzQsIDEsIDE0OTUwNCwgMSwgMTY1ODg4LCAxLAotCTE1OTc1OTI4LCAxLCAxMDQ4NTc2LCA2LCAzMTQ1ODA2LCAxLCAxNTcxNSwgMTYsIDIxNTA2NDUyMzJVLCAyLAotCTI2ODQ0OTg1OSwgMiwgMTAzMDcsIDEyLCAxNzYsIDEsIDE1NzM0LCAxLCAxNTczNSwgMSwgMTU2MzAsIDEsCi0JMTU2MzEsIDEsIDUyNTMxMjAsIDYsIDMxNDU4MTAsIDE2LCAyMTUwNjQ1MjMyVSwgMSwgMTU4NjQsIDIsIDgyLAotCTEsIDM0MzMxMCwgMSwgMTA2NDIwNywgMiwgMzE0NTgxMywgMSwgMTU3MjgsIDEsIDc4MTcsIDEsIDE1NzI5LAotCTMsIDE1NzMwLCAxMiwgOTIsIDIsIDk4LCAxLCAxNjE2OCwgMSwgMTYxNjcsIDEsIDE2MDAyLCAxLCAxNjAwOCwKLQkxLCAxNTk3NCwgMSwgMTU5NzUsIDEsIDE1OTkwLCAxLCAxNTk3NiwgMSwgMTU5NzcsIDEsIDE1OTgwLCAwLAotCTE1OTgxLCAxLCAxMDI0MCwgMSwgNTI1MzEyMCwgMSwgMTU3MjAsIDEsIDE5ODY1NiwgNiwgMTEwLCAxLAotCTE4MDIyNCwgMSwgMTAzODI0NzM4LCAyLCAxMTIsIDIsIDMxNDU4MzksIDAsIDUzNjg4NTQ0MCwgMSwKLQkxMTQ4ODAsIDE0LCAxMjUsIDEyLCAyMDY5NzUsIDEsIDMzNTU5OTk1LCAxMiwgMTk4Nzg0LCAwLAotCTMzNTcwMjM2LCAxLCAxNTgwMywgMCwgMTU4MDQsIDMsIDI5NDkxMiwgMSwgMjk0OTEyLCAzLCA0NDIzNzAsCi0JMSwgMTE1NDQ1NzYsIDAsIDgxMTYxMjE2MCwgMSwgMTI1OTMxNTIsIDEsIDExNTM2Mzg0LCAxLAotCTE0MDI0NzA0LCA3LCAzMTAzODI3MjYsIDAsIDEwMjQwLCAxLCAxNDc5NiwgMSwgMTQ3OTcsIDEsIDE0NzkzLAotCTEsIDE0Nzk0LCAwLCAxNDc5NSwgMSwgMjY4Njc5MTY4LCAxLCA5NDM3MTg0LCAxLCAyNjg0NDk3OTIsIDEsCi0JMTk4NjU2LCAxLCA5NDUyODI3LCAxLCAxMDc1ODU0NjAyLCAxLCAxMDc1ODU0NjAzLCAxLCA1NTcwNTYsIDEsCi0JMTE0ODgwLCAxNCwgMTU5LCAxMiwgMTk4Nzg0LCAxLCAxMTA5NDA5MjEzLCAxMiwgMTk4NzgzLCAxLAotCTExMDczMTIwNTksIDEyLCAxOTg3ODQsIDEsIDExMDk0MDkyMTIsIDIsIDE2MiwgMSwgMTA3NTg1NDc4MSwgMSwKLQkxMDczNzU3NjI3LCAxLCAxMDc1ODU0NzgwLCAxLCA1NDA2NzIsIDEsIDEwNDg1NzYwLCA2LCAzMTQ1ODk0LAotCTE2LCAyNzQ3NDEyNDgsIDksIDE2OCwgMywgNDE5NDMwNCwgMywgNDIwOTk0OSwgMCwgMCwgMCwgMjU2LCAxNCwKLQkxNzQsIDEsIDExNDg1NywgMSwgMzM1NjAwMDcsIDEyLCAxNzYsIDAsIDEwMjQwLCAxLCAxMTQ4NTgsIDEsCi0JMzM1NjAwMTgsIDEsIDExNDg1NywgMywgMzM1NjAwMDcsIDEsIDE2MDA4LCAxLCAxMTQ4NzQsIDEsCi0JMzM1NjAzNjAsIDEsIDExNDg3NSwgMSwgMzM1NjAxNTQsIDAsIDE1OTYzLCAwLCAyNTYsIDAsIDQwOTYsIDEsCi0JNDA5NjExLCA5LCAxODgsIDAsIDEwMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi19OworI2RlZmluZSBGSVJNV0FSRV9OQU1FCQkicjEyOC9yMTI4X2NjZS5iaW4iCisKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9OQU1FKTsKIAogc3RhdGljIGludCBSMTI4X1JFQURfUExMKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgYWRkcikKIHsKQEAgLTE3NiwyMCArMTM4LDUwIEBACiAgKi8KIAogLyogTG9hZCB0aGUgbWljcm9jb2RlIGZvciB0aGUgQ0NFICovCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9sb2FkX21pY3JvY29kZShkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBpbnQgcjEyOF9jY2VfbG9hZF9taWNyb2NvZGUoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgX19iZTMyICpmd19kYXRhOworCWludCByYywgaTsKIAogCURSTV9ERUJVRygiXG4iKTsKIAorCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJyMTI4X2NjZSIsIDAsIE5VTEwsIDApOworCWlmIChJU19FUlIocGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyMTI4X2NjZTogRmFpbGVkIHRvIHJlZ2lzdGVyIGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisJfQorCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIEZJUk1XQVJFX05BTUUsICZwZGV2LT5kZXYpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgInIxMjhfY2NlOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICBGSVJNV0FSRV9OQU1FKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlmIChmdy0+c2l6ZSAhPSAyNTYgKiA4KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInIxMjhfY2NlOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIGZ3LT5zaXplLCBGSVJNV0FSRV9OQU1FKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWxlYXNlOworCX0KKwogCXIxMjhfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CiAKKwlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKWZ3LT5kYXRhOwogCVIxMjhfV1JJVEUoUjEyOF9QTTRfTUlDUk9DT0RFX0FERFIsIDApOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQlSMTI4X1dSSVRFKFIxMjhfUE00X01JQ1JPQ09ERV9EQVRBSCwgcjEyOF9jY2VfbWljcm9jb2RlW2kgKiAyXSk7CisJCVIxMjhfV1JJVEUoUjEyOF9QTTRfTUlDUk9DT0RFX0RBVEFILAorCQkJICAgYmUzMl90b19jcHVwKCZmd19kYXRhW2kgKiAyXSkpOwogCQlSMTI4X1dSSVRFKFIxMjhfUE00X01JQ1JPQ09ERV9EQVRBTCwKLQkJCSAgIHIxMjhfY2NlX21pY3JvY29kZVtpICogMiArIDFdKTsKKwkJCSAgIGJlMzJfdG9fY3B1cCgmZndfZGF0YVtpICogMiArIDFdKSk7CiAJfQorCitvdXRfcmVsZWFzZToKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qIEZsdXNoIGFueSBwZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBDQ0UuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQganVzdApAQCAtMzUwLDkgKzM0MiwxNSBAQAogc3RhdGljIGludCByMTI4X2RvX2luaXRfY2NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBkcm1fcjEyOF9pbml0X3QgKiBpbml0KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXY7CisJaW50IHJjOwogCiAJRFJNX0RFQlVHKCJcbiIpOwogCisJaWYgKGRldi0+ZGV2X3ByaXZhdGUpIHsKKwkJRFJNX0RFQlVHKCJjYWxsZWQgd2hlbiBhbHJlYWR5IGluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJZGV2X3ByaXYgPSBremFsbG9jKHNpemVvZihkcm1fcjEyOF9wcml2YXRlX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2X3ByaXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NzUsMTMgKzU3MywxOCBAQAogI2VuZGlmCiAKIAlyMTI4X2NjZV9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYpOwotCXIxMjhfY2NlX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwlyYyA9IHIxMjhfY2NlX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKIAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCiAJcjEyOF9kb19lbmdpbmVfcmVzZXQoZGV2KTsKIAotCXJldHVybiAwOworCWlmIChyYykgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIVxuIik7CisJCXIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmM7CiB9CiAKIGludCByMTI4X2RvX2NsZWFudXBfY2NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpAQCAtNjQ5LDYgKzY1Miw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlpZiAoZGV2X3ByaXYtPmNjZV9ydW5uaW5nIHx8IGRldl9wcml2LT5jY2VfbW9kZSA9PSBSMTI4X1BNNF9OT05QTTQpIHsKIAkJRFJNX0RFQlVHKCJ3aGlsZSBDQ0UgcnVubmluZ1xuIik7CiAJCXJldHVybiAwOwpAQCAtNjcxLDYgKzY3Niw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAkvKiBGbHVzaCBhbnkgcGVuZGluZyBDQ0UgY29tbWFuZHMuICBUaGlzIGVuc3VyZXMgYW55IG91dHN0YW5kaW5nCiAJICogY29tbWFuZHMgYXJlIGV4ZWN0dXRlZCBieSB0aGUgZW5naW5lIGJlZm9yZSB3ZSB0dXJuIGl0IG9mZi4KIAkgKi8KQEAgLTcwOCwxMCArNzE1LDcgQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKLQlpZiAoIWRldl9wcml2KSB7Ci0JCURSTV9ERUJVRygiY2FsbGVkIGJlZm9yZSBpbml0IGRvbmVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKIAlyMTI4X2RvX2NjZV9yZXNldChkZXZfcHJpdik7CiAKQEAgLTcyOCw2ICs3MzIsOCBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAorCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOworCiAJaWYgKGRldl9wcml2LT5jY2VfcnVubmluZykgewogCQlyMTI4X2RvX2NjZV9mbHVzaChkZXZfcHJpdik7CiAJfQpAQCAtNzQxLDYgKzc0Nyw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXYtPmRldl9wcml2YXRlKTsKKwogCXJldHVybiByMTI4X2RvX2VuZ2luZV9yZXNldChkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaAppbmRleCA3OTdhMjZjLi4zYzYwODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKQEAgLTQyMiw2ICs0MjIsMTQgQEAKICAqIE1pc2MgaGVscGVyIG1hY3JvcwogICovCiAKKyNkZWZpbmUgREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihfZGV2X3ByaXYpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCFfZGV2X3ByaXYpIHsJCQkJCQlcCisJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlkcm1fcjEyOF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJmRldl9wcml2LT5yaW5nOyBpbnQgaTsJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYwppbmRleCAwMjZhNDhjLi5hZjI2NjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCkBAIC0xMjQ0LDE0ICsxMjQ0LDE4IEBACiBzdGF0aWMgaW50IHIxMjhfY2NlX2NsZWFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2OwogCWRybV9yMTI4X2NsZWFyX3QgKmNsZWFyID0gZGF0YTsKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCisJc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCiAJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBSMTI4X05SX1NBUkVBX0NMSVBSRUNUUykKIAkJc2FyZWFfcHJpdi0+bmJveCA9IFIxMjhfTlJfU0FSRUFfQ0xJUFJFQ1RTOwogCkBAIC0xMzEyLDYgKzEzMTYsOCBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAorCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOworCiAJUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCWlmICghZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpCkBAIC0xMzMxLDYgKzEzMzcsOCBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAorCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOworCiAJUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCWlmIChzYXJlYV9wcml2LT5uYm94ID4gUjEyOF9OUl9TQVJFQV9DTElQUkVDVFMpCkBAIC0xMzU0LDEwICsxMzYyLDcgQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKLQlpZiAoIWRldl9wcml2KSB7Ci0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKIAlEUk1fREVCVUcoInBpZD0lZCBpbmRleD0lZCBjb3VudD0lZCBkaXNjYXJkPSVkXG4iLAogCQkgIERSTV9DVVJSRU5UUElELCB2ZXJ0ZXgtPmlkeCwgdmVydGV4LT5jb3VudCwgdmVydGV4LT5kaXNjYXJkKTsKQEAgLTE0MTAsMTAgKzE0MTUsNyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCURSTV9ERUJVRygicGlkPSVkIGJ1Zj0lZCBzPSVkIGU9JWQgZD0lZFxuIiwgRFJNX0NVUlJFTlRQSUQsCiAJCSAgZWx0cy0+aWR4LCBlbHRzLT5zdGFydCwgZWx0cy0+ZW5kLCBlbHRzLT5kaXNjYXJkKTsKQEAgLTE0NzYsNiArMTQ3OCw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlEUk1fREVCVUcoInBpZD0lZCBpbmRleD0lZFxuIiwgRFJNX0NVUlJFTlRQSUQsIGJsaXQtPmlkeCk7CiAKIAlpZiAoYmxpdC0+aWR4IDwgMCB8fCBibGl0LT5pZHggPj0gZG1hLT5idWZfY291bnQpIHsKQEAgLTE1MDEsNiArMTUwNSw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJcmV0ID0gLUVJTlZBTDsKQEAgLTE1MzEsNiArMTUzNyw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisKIAlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZtYXNrLCBzdGlwcGxlLT5tYXNrLCAzMiAqIHNpemVvZih1MzIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTE1NTUsMTAgKzE1NjMsNyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCURSTV9ERUJVRygiaWR4PSVkIHM9JWQgZT0lZCBkPSVkXG4iLAogCQkgIGluZGlyZWN0LT5pZHgsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCwKQEAgLTE2MjAsMTAgKzE2MjUsNyBAQAogCWRybV9yMTI4X2dldHBhcmFtX3QgKnBhcmFtID0gZGF0YTsKIAlpbnQgdmFsdWU7CiAKLQlpZiAoIWRldl9wcml2KSB7Ci0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKIAlEUk1fREVCVUcoInBpZD0lZFxuIiwgRFJNX0NVUlJFTlRQSUQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKaW5kZXggMjE2OGQ2Ny4uNTk4MjMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwpAQCAtMSw3ICsxLDYgQEAKIGNvbmZpZyBEUk1fUkFERU9OX0tNUwogCWJvb2wgIkVuYWJsZSBtb2Rlc2V0dGluZyBvbiByYWRlb24gYnkgZGVmYXVsdCIKIAlkZXBlbmRzIG9uIERSTV9SQURFT04KLQlzZWxlY3QgRFJNX1RUTQogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBrZXJuZWwgbW9kZXNldHRpbmcgZW5hYmxlZCBieSBkZWZhdWx0LAogCSAgYW5kIHlvdSBoYXZlIGEgbmV3IGVub3VnaCB1c2Vyc3BhY2UgdG8gc3VwcG9ydCB0aGlzLiBSdW5uaW5nIG9sZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKaW5kZXggMDEzZDM4MC4uMDlhMjg5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtMywxOCArMyw1MyBAQAogIyBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlci4KIAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KKworaG9zdHByb2dzLXkgOj0gbWtyZWd0YWJsZQorCitxdWlldF9jbWRfbWtyZWd0YWJsZSA9IE1LUkVHVEFCTEUgJEAKKyAgICAgIGNtZF9ta3JlZ3RhYmxlID0gJChvYmopL21rcmVndGFibGUgJDwgPiAkQAorCiskKG9iaikvcm41MF9yZWdfc2FmZS5oOiAkKHNyYykvcmVnX3NyY3Mvcm41MCAkKG9iaikvbWtyZWd0YWJsZQorCSQoY2FsbCBpZl9jaGFuZ2VkLG1rcmVndGFibGUpCisKKyQob2JqKS9yMTAwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9yMTAwICQob2JqKS9ta3JlZ3RhYmxlCisJJChjYWxsIGlmX2NoYW5nZWQsbWtyZWd0YWJsZSkKKworJChvYmopL3IyMDBfcmVnX3NhZmUuaDogJChzcmMpL3JlZ19zcmNzL3IyMDAgJChvYmopL21rcmVndGFibGUKKwkkKGNhbGwgaWZfY2hhbmdlZCxta3JlZ3RhYmxlKQorCiskKG9iaikvcnY1MTVfcmVnX3NhZmUuaDogJChzcmMpL3JlZ19zcmNzL3J2NTE1ICQob2JqKS9ta3JlZ3RhYmxlCisJJChjYWxsIGlmX2NoYW5nZWQsbWtyZWd0YWJsZSkKKworJChvYmopL3IzMDBfcmVnX3NhZmUuaDogJChzcmMpL3JlZ19zcmNzL3IzMDAgJChvYmopL21rcmVndGFibGUKKwkkKGNhbGwgaWZfY2hhbmdlZCxta3JlZ3RhYmxlKQorCiskKG9iaikvcnM2MDBfcmVnX3NhZmUuaDogJChzcmMpL3JlZ19zcmNzL3JzNjAwICQob2JqKS9ta3JlZ3RhYmxlCisJJChjYWxsIGlmX2NoYW5nZWQsbWtyZWd0YWJsZSkKKworJChvYmopL3IxMDAubzogJChvYmopL3IxMDBfcmVnX3NhZmUuaCAkKG9iaikvcm41MF9yZWdfc2FmZS5oCisKKyQob2JqKS9yMjAwLm86ICQob2JqKS9yMjAwX3JlZ19zYWZlLmgKKworJChvYmopL3J2NTE1Lm86ICQob2JqKS9ydjUxNV9yZWdfc2FmZS5oCisKKyQob2JqKS9yMzAwLm86ICQob2JqKS9yMzAwX3JlZ19zYWZlLmgKKworJChvYmopL3JzNjAwLm86ICQob2JqKS9yczYwMF9yZWdfc2FmZS5oCisKIHJhZGVvbi15IDo9IHJhZGVvbl9kcnYubyByYWRlb25fY3AubyByYWRlb25fc3RhdGUubyByYWRlb25fbWVtLm8gXAogCXJhZGVvbl9pcnEubyByMzAwX2NtZGJ1Zi5vIHI2MDBfY3AubwotCi1yYWRlb24tJChDT05GSUdfRFJNX1JBREVPTl9LTVMpICs9IHJhZGVvbl9kZXZpY2UubyByYWRlb25fa21zLm8gXAorIyBhZGQgS01TIGRyaXZlcgorcmFkZW9uLXkgKz0gcmFkZW9uX2RldmljZS5vIHJhZGVvbl9rbXMubyBcCiAJcmFkZW9uX2F0b21iaW9zLm8gcmFkZW9uX2FncC5vIGF0b21iaW9zX2NydGMubyByYWRlb25fY29tYmlvcy5vIFwKIAlhdG9tLm8gcmFkZW9uX2ZlbmNlLm8gcmFkZW9uX3R0bS5vIHJhZGVvbl9vYmplY3QubyByYWRlb25fZ2FydC5vIFwKIAlyYWRlb25fbGVnYWN5X2NydGMubyByYWRlb25fbGVnYWN5X2VuY29kZXJzLm8gcmFkZW9uX2Nvbm5lY3RvcnMubyBcCiAJcmFkZW9uX2VuY29kZXJzLm8gcmFkZW9uX2Rpc3BsYXkubyByYWRlb25fY3Vyc29yLm8gcmFkZW9uX2kyYy5vIFwKIAlyYWRlb25fY2xvY2tzLm8gcmFkZW9uX2ZiLm8gcmFkZW9uX2dlbS5vIHJhZGVvbl9yaW5nLm8gcmFkZW9uX2lycV9rbXMubyBcCiAJcmFkZW9uX2NzLm8gcmFkZW9uX2Jpb3MubyByYWRlb25fYmVuY2htYXJrLm8gcjEwMC5vIHIzMDAubyByNDIwLm8gXAotCXJzNDAwLm8gcnM2MDAubyByczY5MC5vIHJ2NTE1Lm8gcjUyMC5vIHI2MDAubyByczc4MC5vIHJ2NzcwLm8gXAotCXJhZGVvbl90ZXN0Lm8KKwlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKKwlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKKwlyNjAwX2JsaXRfa21zLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IGNmNjc5MjguLjVkNDAyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTIzNzQsNiArMjM3NCwxNyBAQAogCUFUT01fTU9ERV9USU1JTkcgYU1vZGVUaW1pbmdzW01BWF9TVVBQT1JURURfVFZfVElNSU5HXTsKIH0gQVRPTV9BTkFMT0dfVFZfSU5GTzsKIAorI2RlZmluZSBNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR19WMV8yICAgIDMKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk9fVjFfMiB7CisJQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfU3VwcG9ydGVkU3RhbmRhcmQ7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfQm9vdFVwRGVmYXVsdFN0YW5kYXJkOworCVVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX0lEOworCVVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX1NsYXZlQWRkcjsKKwlBVE9NX0RURF9GT1JNQVQgICAgICAgICAgYU1vZGVUaW1pbmdzW01BWF9TVVBQT1JURURfVFZfVElNSU5HXTsKK30gQVRPTV9BTkFMT0dfVFZfSU5GT19WMV8yOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgVlJBTSB1c2FnZSBhbmQgdGhlaXIgZGVmaW50aW9ucyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDc0ZDAzNGYuLjZhMDE1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKIAorLyogZXZpbCBidXQgaW5jbHVkaW5nIGF0b21iaW9zLmggaXMgbXVjaCB3b3JzZSAqLworYm9vbCByYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGluZGV4LAorCQkJCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gKmNydGNfdGltaW5nLAorCQkJCWludDMyX3QgKnBpeGVsX2Nsb2NrKTsKIHN0YXRpYyB2b2lkIGF0b21iaW9zX292ZXJzY2FuX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtODksMTcgKzkzLDMyIEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCUVOQUJMRV9TQ0FMRVJfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEVuYWJsZVNjYWxlcik7CisKIAkvKiBmaXhtZSAtIGZpbGwgaW4gZW5jX3ByaXYgZm9yIGF0b20gZGFjICovCiAJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZCA9IFRWX1NURF9OVFNDOworCWJvb2wgaXNfdHYgPSBmYWxzZSwgaXNfY3YgPSBmYWxzZTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAKIAlpZiAoIUFTSUNfSVNfQVZJVk8ocmRldikgJiYgcmFkZW9uX2NydGMtPmNydGNfaWQpCiAJCXJldHVybjsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCS8qIGZpbmQgdHYgc3RkICovCisJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKKwkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIEFUT01fREVWSUNFX1RWX1NVUFBPUlQpIHsKKwkJCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJCQl0dl9zdGQgPSB0dl9kYWMtPnR2X3N0ZDsKKwkJCQlpc190diA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKIAlhcmdzLnVjU2NhbGVyID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAKLQlpZiAocmFkZW9uX2NydGMtPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpIHsKKwlpZiAoaXNfdHYpIHsKIAkJc3dpdGNoICh0dl9zdGQpIHsKIAkJY2FzZSBUVl9TVERfTlRTQzoKIAkJZGVmYXVsdDoKQEAgLTEyOCw3ICsxNDcsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYXJncy51Y0VuYWJsZSA9IFNDQUxFUl9FTkFCTEVfTVVMVElUQVBfTU9ERTsKLQl9IGVsc2UgaWYgKHJhZGVvbl9jcnRjLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKSB7CisJfSBlbHNlIGlmIChpc19jdikgewogCQlhcmdzLnVjVFZTdGFuZGFyZCA9IEFUT01fVFZfQ1Y7CiAJCWFyZ3MudWNFbmFibGUgPSBTQ0FMRVJfRU5BQkxFX01VTFRJVEFQX01PREU7CiAJfSBlbHNlIHsKQEAgLTE1MSw5ICsxNzAsOSBAQAogCQl9CiAJfQogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwotCWlmIChyYWRlb25fY3J0Yy0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkKLQkgICAgJiYgcmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUgJiYgcmRldi0+ZmFtaWx5IDw9IENISVBfUlY1NzApIHsKLQkJYXRvbV9ydjUxNV9mb3JjZV90dl9zY2FsZXIocmRldik7CisJaWYgKChpc190diB8fCBpc19jdikKKwkgICAgJiYgcmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUgJiYgcmRldi0+ZmFtaWx5IDw9IENISVBfUjU4MCkgeworCQlhdG9tX3J2NTE1X2ZvcmNlX3R2X3NjYWxlcihyZGV2LCByYWRlb25fY3J0Yyk7CiAJfQogfQogCkBAIC0zNzAsNiArMzg5LDcgQEAKIAkJCQkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfVVNFX1JFRl9ESVY7CiAJCQl9CiAJCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTQ2OCw2ICs0ODgsMTEgQEAKIAl9CiAKIAlzd2l0Y2ggKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJZmJfZm9ybWF0ID0KKwkJICAgIEFWSVZPX0QxR1JQSF9DT05UUk9MX0RFUFRIXzhCUFAgfAorCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfOEJQUF9JTkRFWEVEOworCQlicmVhazsKIAljYXNlIDE1OgogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMTZCUFAgfApAQCAtNTUxLDQyICs1NzYsNjggQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gY3J0Y190aW1pbmc7CisJaW50IG5lZWRfdHZfdGltaW5ncyA9IDA7CisJYm9vbCByZXQ7CiAKIAkvKiBUT0RPIGNvbG9yIHRpbGluZyAqLwogCW1lbXNldCgmY3J0Y190aW1pbmcsIDAsIHNpemVvZihjcnRjX3RpbWluZykpOwogCi0JLyogVE9ETyB0diAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCS8qIGZpbmQgdHYgc3RkICovCisJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKKwkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAorCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkgeworCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCWlmICh0dl9kYWMpIHsKKwkJCQkJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8CisJCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCisJCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAxOworCQkJCQllbHNlCisJCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KIAl9CiAKIAljcnRjX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQljcnRjX3RpbWluZy51c0hfVG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbDsKLQljcnRjX3RpbWluZy51c0hfRGlzcCA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JY3J0Y190aW1pbmcudXNIX1N5bmNTdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQ7Ci0JY3J0Y190aW1pbmcudXNIX1N5bmNXaWR0aCA9Ci0JICAgIGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKKwlpZiAobmVlZF90dl90aW1pbmdzKSB7CisJCXJldCA9IHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHJkZXYsIG5lZWRfdHZfdGltaW5ncyAtIDEsCisJCQkJCQkgJmNydGNfdGltaW5nLCAmYWRqdXN0ZWRfbW9kZS0+Y2xvY2spOworCQlpZiAocmV0ID09IGZhbHNlKQorCQkJbmVlZF90dl90aW1pbmdzID0gMDsKKwl9CiAKLQljcnRjX3RpbWluZy51c1ZfVG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbDsKLQljcnRjX3RpbWluZy51c1ZfRGlzcCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXk7Ci0JY3J0Y190aW1pbmcudXNWX1N5bmNTdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQ7Ci0JY3J0Y190aW1pbmcudXNWX1N5bmNXaWR0aCA9Ci0JICAgIGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kIC0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydDsKKwlpZiAoIW5lZWRfdHZfdGltaW5ncykgeworCQljcnRjX3RpbWluZy51c0hfVG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbDsKKwkJY3J0Y190aW1pbmcudXNIX0Rpc3AgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5OworCQljcnRjX3RpbWluZy51c0hfU3luY1N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKKwkJY3J0Y190aW1pbmcudXNIX1N5bmNXaWR0aCA9CisJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQ7CiAKLQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKLQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7CisJCWNydGNfdGltaW5nLnVzVl9Ub3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsOworCQljcnRjX3RpbWluZy51c1ZfRGlzcCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXk7CisJCWNydGNfdGltaW5nLnVzVl9TeW5jU3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OworCQljcnRjX3RpbWluZy51c1ZfU3luY1dpZHRoID0KKwkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kIC0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydDsKIAotCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQotCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpCisJCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9WU1lOQ19QT0xBUklUWTsKIAotCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfQ1NZTkMpCi0JCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX0NPTVBPU0lURVNZTkM7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQorCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fSFNZTkNfUE9MQVJJVFk7CiAKLQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fSU5URVJMQUNFOworCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQorCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKIAotCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKLQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fRE9VQkxFX0NMT0NLX01PREU7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQorCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fSU5URVJMQUNFOworCisJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKKwkJCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX0RPVUJMRV9DTE9DS19NT0RFOworCX0KIAogCWF0b21iaW9zX2NydGNfc2V0X3BsbChjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgJmNydGNfdGltaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjkyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgQVZJVk9EX0gKKyNkZWZpbmUgQVZJVk9EX0gKKworCisjZGVmaW5lCUQxQ1JUQ19DT05UUk9MCQkJCQkweDYwODAKKyNkZWZpbmUJCUNSVENfRU4JCQkJCQkoMSA8PCAwKQorI2RlZmluZQlEMUNSVENfVVBEQVRFX0xPQ0sJCQkJMHg2MEU4CisjZGVmaW5lCUQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUwkJCTB4NjExMAorI2RlZmluZQlEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUwkJMHg2MTE4CisKKyNkZWZpbmUJRDJDUlRDX0NPTlRST0wJCQkJCTB4Njg4MAorI2RlZmluZQlEMkNSVENfVVBEQVRFX0xPQ0sJCQkJMHg2OEU4CisjZGVmaW5lCUQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUwkJCTB4NjkxMAorI2RlZmluZQlEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUwkJMHg2OTE4CisKKyNkZWZpbmUJRDFWR0FfQ09OVFJPTAkJCQkJMHgwMzMwCisjZGVmaW5lCQlEVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUJCQkoMSA8PCAwKQorI2RlZmluZQkJRFZHQV9DT05UUk9MX1RJTUlOR19TRUxFQ1QJCQkoMSA8PCA4KQorI2RlZmluZQkJRFZHQV9DT05UUk9MX1NZTkNfUE9MQVJJVFlfU0VMRUNUCQkoMSA8PCA5KQorI2RlZmluZQkJRFZHQV9DT05UUk9MX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QJCSgxIDw8IDEwKQorI2RlZmluZQkJRFZHQV9DT05UUk9MX09WRVJTQ0FOX0NPTE9SX0VOCQkJKDEgPDwgMTYpCisjZGVmaW5lCQlEVkdBX0NPTlRST0xfUk9UQVRFCQkJCSgxIDw8IDI0KQorI2RlZmluZSBEMlZHQV9DT05UUk9MCQkJCQkweDAzMzgKKworI2RlZmluZQlWR0FfSERQX0NPTlRST0wJCQkJCTB4MzI4CisjZGVmaW5lCQlWR0FfTUVNX1BBR0VfU0VMRUNUX0VOCQkJCSgxIDw8IDApCisjZGVmaW5lCQlWR0FfTUVNT1JZX0RJU0FCTEUJCQkJKDEgPDwgNCkKKyNkZWZpbmUJCVZHQV9SQkJNX0xPQ0tfRElTQUJMRQkJCQkoMSA8PCA4KQorI2RlZmluZQkJVkdBX1NPRlRfUkVTRVQJCQkJCSgxIDw8IDE2KQorI2RlZmluZQlWR0FfTUVNT1JZX0JBU0VfQUREUkVTUwkJCQkweDAzMTAKKyNkZWZpbmUJVkdBX1JFTkRFUl9DT05UUk9MCQkJCTB4MDMwMAorI2RlZmluZQkJVkdBX1ZTVEFUVVNfQ05UTF9NQVNLCQkJCTB4MDAwMzAwMDAKKworLyogQVZJVk8gZGlzYWJsZSBWR0EgcmVuZGVyaW5nICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX2F2aXZvX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdmdhX3JlbmRlcjsKKwl2Z2FfcmVuZGVyID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7CisJdmdhX3JlbmRlciAmPSB+VkdBX1ZTVEFUVVNfQ05UTF9NQVNLOworCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIyMTFlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCkBAIC0wLDAgKzEsNzIwIEBACisvKiB1dGlsaXR5IHRvIGNyZWF0ZSB0aGUgcmVnaXN0ZXIgY2hlY2sgdGFibGVzCisgKiB0aGlzIGluY2x1ZGVzIGlubGluZWQgbGlzdC5oIHNhZmUgZm9yIHVzZXJzcGFjZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlCisgKiBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0IEluYy4KKyAqCisgKiBBdXRob3JzOgorICogCUplcm9tZSBHbGlzc2UKKyAqIAlEYXZlIEFpcmxpZQorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCisvKioKKyAqIGNvbnRhaW5lcl9vZiAtIGNhc3QgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUgb3V0IHRvIHRoZSBjb250YWluaW5nIHN0cnVjdHVyZQorICogQHB0cjogICAgdGhlIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4KKyAqIEB0eXBlOiAgIHRoZSB0eXBlIG9mIHRoZSBjb250YWluZXIgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOiB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyIHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqLworI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7ICAgICAgICAgIFwKKwljb25zdCB0eXBlb2YoKCh0eXBlICopMCktPm1lbWJlcikqX19tcHRyID0gKHB0cik7ICAgIFwKKwkJICAgICAodHlwZSAqKSgoY2hhciAqKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpOyB9KQorCisvKgorICogU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBTb21lIG9mIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgKCJfX3h4eCIpIGFyZSB1c2VmdWwgd2hlbgorICogbWFuaXB1bGF0aW5nIHdob2xlIGxpc3RzIHJhdGhlciB0aGFuIHNpbmdsZSBlbnRyaWVzLCBhcworICogc29tZXRpbWVzIHdlIGFscmVhZHkga25vdyB0aGUgbmV4dC9wcmV2IGVudHJpZXMgYW5kIHdlIGNhbgorICogZ2VuZXJhdGUgYmV0dGVyIGNvZGUgYnkgdXNpbmcgdGhlbSBkaXJlY3RseSByYXRoZXIgdGhhbgorICogdXNpbmcgdGhlIGdlbmVyaWMgc2luZ2xlLWVudHJ5IHJvdXRpbmVzLgorICovCisKK3N0cnVjdCBsaXN0X2hlYWQgeworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2OworfTsKKworI2RlZmluZSBMSVNUX0hFQURfSU5JVChuYW1lKSB7ICYobmFtZSksICYobmFtZSkgfQorCisjZGVmaW5lIExJU1RfSEVBRChuYW1lKSBcCisJc3RydWN0IGxpc3RfaGVhZCBuYW1lID0gTElTVF9IRUFEX0lOSVQobmFtZSkKKworc3RhdGljIGlubGluZSB2b2lkIElOSVRfTElTVF9IRUFEKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJbGlzdC0+bmV4dCA9IGxpc3Q7CisJbGlzdC0+cHJldiA9IGxpc3Q7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYmV0d2VlbiB0d28ga25vd24gY29uc2VjdXRpdmUgZW50cmllcy4KKyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQorICovCisjaWZuZGVmIENPTkZJR19ERUJVR19MSVNUCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsCisJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQoreworCW5leHQtPnByZXYgPSBuZXc7CisJbmV3LT5uZXh0ID0gbmV4dDsKKwluZXctPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXc7Cit9CisjZWxzZQorZXh0ZXJuIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsCisJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KTsKKyNlbmRpZgorCisvKioKKyAqIGxpc3RfYWRkIC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAbmV3OiBuZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBoZWFkOiBsaXN0IGhlYWQgdG8gYWRkIGl0IGFmdGVyCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGFmdGVyIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgZ29vZCBmb3IgaW1wbGVtZW50aW5nIHN0YWNrcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlfX2xpc3RfYWRkKG5ldywgaGVhZCwgaGVhZC0+bmV4dCk7Cit9CisKKy8qKgorICogbGlzdF9hZGRfdGFpbCAtIGFkZCBhIG5ldyBlbnRyeQorICogQG5ldzogbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBAaGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBiZWZvcmUKKyAqCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgcXVldWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQtPnByZXYsIGhlYWQpOworfQorCisvKgorICogRGVsZXRlIGEgbGlzdCBlbnRyeSBieSBtYWtpbmcgdGhlIHByZXYvbmV4dCBlbnRyaWVzCisgKiBwb2ludCB0byBlYWNoIG90aGVyLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCit7CisJbmV4dC0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IG5leHQ7Cit9CisKKy8qKgorICogbGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdC4KKyAqIEBlbnRyeTogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCisgKiBOb3RlOiBsaXN0X2VtcHR5KCkgb24gZW50cnkgZG9lcyBub3QgcmV0dXJuIHRydWUgYWZ0ZXIgdGhpcywgdGhlIGVudHJ5IGlzCisgKiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCisgKi8KKyNpZm5kZWYgQ09ORklHX0RFQlVHX0xJU1QKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CisJZW50cnktPm5leHQgPSAodm9pZCAqKTB4REVBREJFRUY7CisJZW50cnktPnByZXYgPSAodm9pZCAqKTB4QkVFRkRFQUQ7Cit9CisjZWxzZQorZXh0ZXJuIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpOworI2VuZGlmCisKKy8qKgorICogbGlzdF9yZXBsYWNlIC0gcmVwbGFjZSBvbGQgZW50cnkgYnkgbmV3IG9uZQorICogQG9sZCA6IHRoZSBlbGVtZW50IHRvIGJlIHJlcGxhY2VkCisgKiBAbmV3IDogdGhlIG5ldyBlbGVtZW50IHRvIGluc2VydAorICoKKyAqIElmIEBvbGQgd2FzIGVtcHR5LCBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9yZXBsYWNlKHN0cnVjdCBsaXN0X2hlYWQgKm9sZCwgc3RydWN0IGxpc3RfaGVhZCAqbmV3KQoreworCW5ldy0+bmV4dCA9IG9sZC0+bmV4dDsKKwluZXctPm5leHQtPnByZXYgPSBuZXc7CisJbmV3LT5wcmV2ID0gb2xkLT5wcmV2OworCW5ldy0+cHJldi0+bmV4dCA9IG5ldzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfcmVwbGFjZV9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKm9sZCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5ldykKK3sKKwlsaXN0X3JlcGxhY2Uob2xkLCBuZXcpOworCUlOSVRfTElTVF9IRUFEKG9sZCk7Cit9CisKKy8qKgorICogbGlzdF9kZWxfaW5pdCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0IGFuZCByZWluaXRpYWxpemUgaXQuCisgKiBAZW50cnk6IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CisJSU5JVF9MSVNUX0hFQUQoZW50cnkpOworfQorCisvKioKKyAqIGxpc3RfbW92ZSAtIGRlbGV0ZSBmcm9tIG9uZSBsaXN0IGFuZCBhZGQgYXMgYW5vdGhlcidzIGhlYWQKKyAqIEBsaXN0OiB0aGUgZW50cnkgdG8gbW92ZQorICogQGhlYWQ6IHRoZSBoZWFkIHRoYXQgd2lsbCBwcmVjZWRlIG91ciBlbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2RlbChsaXN0LT5wcmV2LCBsaXN0LT5uZXh0KTsKKwlsaXN0X2FkZChsaXN0LCBoZWFkKTsKK30KKworLyoqCisgKiBsaXN0X21vdmVfdGFpbCAtIGRlbGV0ZSBmcm9tIG9uZSBsaXN0IGFuZCBhZGQgYXMgYW5vdGhlcidzIHRhaWwKKyAqIEBsaXN0OiB0aGUgZW50cnkgdG8gbW92ZQorICogQGhlYWQ6IHRoZSBoZWFkIHRoYXQgd2lsbCBmb2xsb3cgb3VyIGVudHJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmVfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworCWxpc3RfYWRkX3RhaWwobGlzdCwgaGVhZCk7Cit9CisKKy8qKgorICogbGlzdF9pc19sYXN0IC0gdGVzdHMgd2hldGhlciBAbGlzdCBpcyB0aGUgbGFzdCBlbnRyeSBpbiBsaXN0IEBoZWFkCisgKiBAbGlzdDogdGhlIGVudHJ5IHRvIHRlc3QKKyAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgbGlzdAorICovCitzdGF0aWMgaW5saW5lIGludCBsaXN0X2lzX2xhc3QoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBsaXN0LT5uZXh0ID09IGhlYWQ7Cit9CisKKy8qKgorICogbGlzdF9lbXB0eSAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGlzIGVtcHR5CisgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVzdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cit9CisKKy8qKgorICogbGlzdF9lbXB0eV9jYXJlZnVsIC0gdGVzdHMgd2hldGhlciBhIGxpc3QgaXMgZW1wdHkgYW5kIG5vdCBiZWluZyBtb2RpZmllZAorICogQGhlYWQ6IHRoZSBsaXN0IHRvIHRlc3QKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGlzIGVtcHR5IF9hbmRfIGNoZWNrcyB0aGF0IG5vIG90aGVyIENQVSBtaWdodCBiZQorICogaW4gdGhlIHByb2Nlc3Mgb2YgbW9kaWZ5aW5nIGVpdGhlciBtZW1iZXIgKG5leHQgb3IgcHJldikKKyAqCisgKiBOT1RFOiB1c2luZyBsaXN0X2VtcHR5X2NhcmVmdWwoKSB3aXRob3V0IHN5bmNocm9uaXphdGlvbgorICogY2FuIG9ubHkgYmUgc2FmZSBpZiB0aGUgb25seSBhY3Rpdml0eSB0aGF0IGNhbiBoYXBwZW4KKyAqIHRvIHRoZSBsaXN0IGVudHJ5IGlzIGxpc3RfZGVsX2luaXQoKS4gRWcuIGl0IGNhbm5vdCBiZSB1c2VkCisgKiBpZiBhbm90aGVyIENQVSBjb3VsZCByZS1saXN0X2FkZCgpIGl0LgorICovCitzdGF0aWMgaW5saW5lIGludCBsaXN0X2VtcHR5X2NhcmVmdWwoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0ID0gaGVhZC0+bmV4dDsKKwlyZXR1cm4gKG5leHQgPT0gaGVhZCkgJiYgKG5leHQgPT0gaGVhZC0+cHJldik7Cit9CisKKy8qKgorICogbGlzdF9pc19zaW5ndWxhciAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGhhcyBqdXN0IG9uZSBlbnRyeS4KKyAqIEBoZWFkOiB0aGUgbGlzdCB0byB0ZXN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBsaXN0X2lzX3Npbmd1bGFyKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuICFsaXN0X2VtcHR5KGhlYWQpICYmIChoZWFkLT5uZXh0ID09IGhlYWQtPnByZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2N1dF9wb3NpdGlvbihzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXdfZmlyc3QgPSBlbnRyeS0+bmV4dDsKKwlsaXN0LT5uZXh0ID0gaGVhZC0+bmV4dDsKKwlsaXN0LT5uZXh0LT5wcmV2ID0gbGlzdDsKKwlsaXN0LT5wcmV2ID0gZW50cnk7CisJZW50cnktPm5leHQgPSBsaXN0OworCWhlYWQtPm5leHQgPSBuZXdfZmlyc3Q7CisJbmV3X2ZpcnN0LT5wcmV2ID0gaGVhZDsKK30KKworLyoqCisgKiBsaXN0X2N1dF9wb3NpdGlvbiAtIGN1dCBhIGxpc3QgaW50byB0d28KKyAqIEBsaXN0OiBhIG5ldyBsaXN0IHRvIGFkZCBhbGwgcmVtb3ZlZCBlbnRyaWVzCisgKiBAaGVhZDogYSBsaXN0IHdpdGggZW50cmllcworICogQGVudHJ5OiBhbiBlbnRyeSB3aXRoaW4gaGVhZCwgY291bGQgYmUgdGhlIGhlYWQgaXRzZWxmCisgKglhbmQgaWYgc28gd2Ugd29uJ3QgY3V0IHRoZSBsaXN0CisgKgorICogVGhpcyBoZWxwZXIgbW92ZXMgdGhlIGluaXRpYWwgcGFydCBvZiBAaGVhZCwgdXAgdG8gYW5kCisgKiBpbmNsdWRpbmcgQGVudHJ5LCBmcm9tIEBoZWFkIHRvIEBsaXN0LiBZb3Ugc2hvdWxkCisgKiBwYXNzIG9uIEBlbnRyeSBhbiBlbGVtZW50IHlvdSBrbm93IGlzIG9uIEBoZWFkLiBAbGlzdAorICogc2hvdWxkIGJlIGFuIGVtcHR5IGxpc3Qgb3IgYSBsaXN0IHlvdSBkbyBub3QgY2FyZSBhYm91dAorICogbG9zaW5nIGl0cyBkYXRhLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfY3V0X3Bvc2l0aW9uKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCXJldHVybjsKKwlpZiAobGlzdF9pc19zaW5ndWxhcihoZWFkKSAmJiAoaGVhZC0+bmV4dCAhPSBlbnRyeSAmJiBoZWFkICE9IGVudHJ5KSkKKwkJcmV0dXJuOworCWlmIChlbnRyeSA9PSBoZWFkKQorCQlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwllbHNlCisJCV9fbGlzdF9jdXRfcG9zaXRpb24obGlzdCwgaGVhZCwgZW50cnkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X3NwbGljZShjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmZpcnN0ID0gbGlzdC0+bmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsYXN0ID0gbGlzdC0+cHJldjsKKworCWZpcnN0LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0gZmlyc3Q7CisKKwlsYXN0LT5uZXh0ID0gbmV4dDsKKwluZXh0LT5wcmV2ID0gbGFzdDsKK30KKworLyoqCisgKiBsaXN0X3NwbGljZSAtIGpvaW4gdHdvIGxpc3RzLCB0aGlzIGlzIGRlc2lnbmVkIGZvciBzdGFja3MKKyAqIEBsaXN0OiB0aGUgbmV3IGxpc3QgdG8gYWRkLgorICogQGhlYWQ6IHRoZSBwbGFjZSB0byBhZGQgaXQgaW4gdGhlIGZpcnN0IGxpc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3NwbGljZShjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJaWYgKCFsaXN0X2VtcHR5KGxpc3QpKQorCQlfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQsIGhlYWQtPm5leHQpOworfQorCisvKioKKyAqIGxpc3Rfc3BsaWNlX3RhaWwgLSBqb2luIHR3byBsaXN0cywgZWFjaCBsaXN0IGJlaW5nIGEgcXVldWUKKyAqIEBsaXN0OiB0aGUgbmV3IGxpc3QgdG8gYWRkLgorICogQGhlYWQ6IHRoZSBwbGFjZSB0byBhZGQgaXQgaW4gdGhlIGZpcnN0IGxpc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3NwbGljZV90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJaWYgKCFsaXN0X2VtcHR5KGxpc3QpKQorCQlfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQtPnByZXYsIGhlYWQpOworfQorCisvKioKKyAqIGxpc3Rfc3BsaWNlX2luaXQgLSBqb2luIHR3byBsaXN0cyBhbmQgcmVpbml0aWFsaXNlIHRoZSBlbXB0aWVkIGxpc3QuCisgKiBAbGlzdDogdGhlIG5ldyBsaXN0IHRvIGFkZC4KKyAqIEBoZWFkOiB0aGUgcGxhY2UgdG8gYWRkIGl0IGluIHRoZSBmaXJzdCBsaXN0LgorICoKKyAqIFRoZSBsaXN0IGF0IEBsaXN0IGlzIHJlaW5pdGlhbGlzZWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfc3BsaWNlX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlpZiAoIWxpc3RfZW1wdHkobGlzdCkpIHsKKwkJX19saXN0X3NwbGljZShsaXN0LCBoZWFkLCBoZWFkLT5uZXh0KTsKKwkJSU5JVF9MSVNUX0hFQUQobGlzdCk7CisJfQorfQorCisvKioKKyAqIGxpc3Rfc3BsaWNlX3RhaWxfaW5pdCAtIGpvaW4gdHdvIGxpc3RzIGFuZCByZWluaXRpYWxpc2UgdGhlIGVtcHRpZWQgbGlzdAorICogQGxpc3Q6IHRoZSBuZXcgbGlzdCB0byBhZGQuCisgKiBAaGVhZDogdGhlIHBsYWNlIHRvIGFkZCBpdCBpbiB0aGUgZmlyc3QgbGlzdC4KKyAqCisgKiBFYWNoIG9mIHRoZSBsaXN0cyBpcyBhIHF1ZXVlLgorICogVGhlIGxpc3QgYXQgQGxpc3QgaXMgcmVpbml0aWFsaXNlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9zcGxpY2VfdGFpbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWlmICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQtPnByZXYsIGhlYWQpOworCQlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwl9Cit9CisKKy8qKgorICogbGlzdF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5CisgKiBAcHRyOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgcG9pbnRlci4KKyAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikKKworLyoqCisgKiBsaXN0X2ZpcnN0X2VudHJ5IC0gZ2V0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYSBsaXN0CisgKiBAcHRyOgl0aGUgbGlzdCBoZWFkIHRvIHRha2UgdGhlIGVsZW1lbnQgZnJvbS4KKyAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICogTm90ZSwgdGhhdCBsaXN0IGlzIGV4cGVjdGVkIHRvIGJlIG5vdCBlbXB0eS4KKyAqLworI2RlZmluZSBsaXN0X2ZpcnN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJbGlzdF9lbnRyeSgocHRyKS0+bmV4dCwgdHlwZSwgbWVtYmVyKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2gJLQlpdGVyYXRlIG92ZXIgYSBsaXN0CisgKiBAcG9zOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBfX2xpc3RfZm9yX2VhY2gJLQlpdGVyYXRlIG92ZXIgYSBsaXN0CisgKiBAcG9zOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqCisgKiBUaGlzIHZhcmlhbnQgZGlmZmVycyBmcm9tIGxpc3RfZm9yX2VhY2goKSBpbiB0aGF0IGl0J3MgdGhlCisgKiBzaW1wbGVzdCBwb3NzaWJsZSBsaXN0IGl0ZXJhdGlvbiBjb2RlLCBubyBwcmVmZXRjaGluZyBpcyBkb25lLgorICogVXNlIHRoaXMgZm9yIGNvZGUgdGhhdCBrbm93cyB0aGUgbGlzdCB0byBiZSB2ZXJ5IHNob3J0IChlbXB0eQorICogb3IgMSBlbnRyeSkgbW9zdCBvZiB0aGUgdGltZS4KKyAqLworI2RlZmluZSBfX2xpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX3ByZXYJLQlpdGVyYXRlIG92ZXIgYSBsaXN0IGJhY2t3YXJkcworICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9wcmV2KHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5wcmV2OyBwcmVmZXRjaChwb3MtPnByZXYpLCBwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IHBvcy0+cHJldikKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX3NhZmUgLSBpdGVyYXRlIG92ZXIgYSBsaXN0IHNhZmUgYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBuOgkJYW5vdGhlciAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG4sIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgbiA9IHBvcy0+bmV4dDsgcG9zICE9IChoZWFkKTsgXAorCQlwb3MgPSBuLCBuID0gcG9zLT5uZXh0KQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfcHJldl9zYWZlIC0gaXRlcmF0ZSBvdmVyIGEgbGlzdCBiYWNrd2FyZHMgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG46CQlhbm90aGVyICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9wcmV2X3NhZmUocG9zLCBuLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPnByZXYsIG4gPSBwb3MtPnByZXY7IFwKKwkgICAgIHByZWZldGNoKHBvcy0+cHJldiksIHBvcyAhPSAoaGVhZCk7IFwKKwkgICAgIHBvcyA9IG4sIG4gPSBwb3MtPnByZXYpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeQktCWl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbWVtYmVyKQkJCQlcCisJZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJXAorCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlIC0gaXRlcmF0ZSBiYWNrd2FyZHMgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUuCisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHBvcywgaGVhZCwgbWVtYmVyKQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5wcmV2LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLnByZXYpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJXAorCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5wcmV2LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9wcmVwYXJlX2VudHJ5IC0gcHJlcGFyZSBhIHBvcyBlbnRyeSBmb3IgdXNlIGluIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoKQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBzdGFydCBwb2ludAorICogQGhlYWQ6CXRoZSBoZWFkIG9mIHRoZSBsaXN0CisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICogUHJlcGFyZXMgYSBwb3MgZW50cnkgZm9yIHVzZSBhcyBhIHN0YXJ0IHBvaW50IGluIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoKS4KKyAqLworI2RlZmluZSBsaXN0X3ByZXBhcmVfZW50cnkocG9zLCBoZWFkLCBtZW1iZXIpIFwKKwkoKHBvcykgPyA6IGxpc3RfZW50cnkoaGVhZCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUgLSBjb250aW51ZSBpdGVyYXRpb24gb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBDb250aW51ZSB0byBpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlLCBjb250aW51aW5nIGFmdGVyCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgaGVhZCwgbWVtYmVyKSAJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJICAgICBwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAorCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlIC0gaXRlcmF0ZSBiYWNrd2FyZHMgZnJvbSB0aGUgZ2l2ZW4gcG9pbnQKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBTdGFydCB0byBpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlIGJhY2t3YXJkcywgY29udGludWluZyBhZnRlcgorICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcywgaGVhZCwgbWVtYmVyKQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5wcmV2LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLnByZXYpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCisJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20gLSBpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBJdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlLCBjb250aW51aW5nIGZyb20gY3VycmVudCBwb3NpdGlvbi4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20ocG9zLCBoZWFkLCBtZW1iZXIpIAkJCVwKKwlmb3IgKDsgcHJlZmV0Y2gocG9zLT5tZW1iZXIubmV4dCksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBoZWFkLCBtZW1iZXIpCQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSwJXAorCQluID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAkJCQkJXAorCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlCisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG46CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIEl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUsIGNvbnRpbnVpbmcgYWZ0ZXIgY3VycmVudCBwb2ludCwKKyAqIHNhZmUgYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHBvcywgbiwgaGVhZCwgbWVtYmVyKSAJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpLCAJCVwKKwkJbiA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwkJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJCQkJCQlcCisJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBJdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlIGZyb20gY3VycmVudCBwb2ludCwgc2FmZSBhZ2FpbnN0CisgKiByZW1vdmFsIG9mIGxpc3QgZW50cnkuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2Zyb20ocG9zLCBuLCBoZWFkLCBtZW1iZXIpIAkJCVwKKwlmb3IgKG4gPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJCVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CQkJCQkJXAorCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAbjoJCWFub3RoZXIgdHlwZSAqIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICogSXRlcmF0ZSBiYWNrd2FyZHMgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUsIHNhZmUgYWdhaW5zdCByZW1vdmFsCisgKiBvZiBsaXN0IGVudHJ5LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHBvcywgbiwgaGVhZCwgbWVtYmVyKQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSwJXAorCQluID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5wcmV2LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAkJCQkJXAorCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLnByZXYsIHR5cGVvZigqbiksIG1lbWJlcikpCisKK3N0cnVjdCBvZmZzZXQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgdGFibGUgeworCXN0cnVjdCBsaXN0X2hlYWQgb2Zmc2V0czsKKwl1bnNpZ25lZCBvZmZzZXRfbWF4OworCXVuc2lnbmVkIG5lbnRyeTsKKwl1bnNpZ25lZCAqdGFibGU7CisJY2hhciAqZ3B1X3ByZWZpeDsKK307CisKK3N0cnVjdCBvZmZzZXQgKm9mZnNldF9uZXcodW5zaWduZWQgbykKK3sKKwlzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQ7CisKKwlvZmZzZXQgPSAoc3RydWN0IG9mZnNldCAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG9mZnNldCkpOworCWlmIChvZmZzZXQpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJm9mZnNldC0+bGlzdCk7CisJCW9mZnNldC0+b2Zmc2V0ID0gbzsKKwl9CisJcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCB0YWJsZV9vZmZzZXRfYWRkKHN0cnVjdCB0YWJsZSAqdCwgc3RydWN0IG9mZnNldCAqb2Zmc2V0KQoreworCWxpc3RfYWRkX3RhaWwoJm9mZnNldC0+bGlzdCwgJnQtPm9mZnNldHMpOworfQorCit2b2lkIHRhYmxlX2luaXQoc3RydWN0IHRhYmxlICp0KQoreworCUlOSVRfTElTVF9IRUFEKCZ0LT5vZmZzZXRzKTsKKwl0LT5vZmZzZXRfbWF4ID0gMDsKKwl0LT5uZW50cnkgPSAwOworCXQtPnRhYmxlID0gTlVMTDsKK30KKwordm9pZCB0YWJsZV9wcmludChzdHJ1Y3QgdGFibGUgKnQpCit7CisJdW5zaWduZWQgbmxsb29wLCBpLCBqLCBuLCBjLCBpZDsKKworCW5sbG9vcCA9ICh0LT5uZW50cnkgKyAzKSAvIDQ7CisJYyA9IHQtPm5lbnRyeTsKKwlwcmludGYoInN0YXRpYyBjb25zdCB1bnNpZ25lZCAlc19yZWdfc2FmZV9ibVslZF0gPSB7XG4iLCB0LT5ncHVfcHJlZml4LAorCSAgICAgICB0LT5uZW50cnkpOworCWZvciAoaSA9IDAsIGlkID0gMDsgaSA8IG5sbG9vcDsgaSsrKSB7CisJCW4gPSA0OworCQlpZiAobiA+IGMpCisJCQluID0gYzsKKwkJYyAtPSBuOworCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7CisJCQlpZiAoaiA9PSAwKQorCQkJCXByaW50ZigiXHQiKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiAiKTsKKwkJCXByaW50ZigiMHglMDhYLCIsIHQtPnRhYmxlW2lkKytdKTsKKwkJfQorCQlwcmludGYoIlxuIik7CisJfQorCXByaW50ZigifTtcbiIpOworfQorCitpbnQgdGFibGVfYnVpbGQoc3RydWN0IHRhYmxlICp0KQoreworCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKKwl1bnNpZ25lZCBpLCBtOworCisJdC0+bmVudHJ5ID0gKCh0LT5vZmZzZXRfbWF4ID4+IDIpICsgMzEpIC8gMzI7CisJdC0+dGFibGUgPSAodW5zaWduZWQgKiltYWxsb2Moc2l6ZW9mKHVuc2lnbmVkKSAqIHQtPm5lbnRyeSk7CisJaWYgKHQtPnRhYmxlID09IE5VTEwpCisJCXJldHVybiAtMTsKKwltZW1zZXQodC0+dGFibGUsIDB4ZmYsIHNpemVvZih1bnNpZ25lZCkgKiB0LT5uZW50cnkpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2Zmc2V0LCAmdC0+b2Zmc2V0cywgbGlzdCkgeworCQlpID0gKG9mZnNldC0+b2Zmc2V0ID4+IDIpIC8gMzI7CisJCW0gPSAob2Zmc2V0LT5vZmZzZXQgPj4gMikgJiAzMTsKKwkJbSA9IDEgPDwgbTsKKwkJdC0+dGFibGVbaV0gXj0gbTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyIGdwdV9uYW1lWzEwXTsKK2ludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCUZJTEUgKmZpbGU7CisJcmVnZXhfdCBtYXNrX3JleDsKKwlyZWdtYXRjaF90IG1hdGNoWzRdOworCWNoYXIgYnVmWzEwMjRdOworCXNpemVfdCBlbmQ7CisJaW50IGxlbjsKKwlpbnQgZG9uZSA9IDA7CisJaW50IHI7CisJdW5zaWduZWQgbzsKKwlzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQ7CisJY2hhciBsYXN0X3JlZ19zWzEwXTsKKwlpbnQgbGFzdF9yZWc7CisKKwlpZiAocmVnY29tcAorCSAgICAoJm1hc2tfcmV4LCAiKDB4WzAtOWEtZkEtRl0qKSAqKFtfYS16QS1aMC05XSopIiwgUkVHX0VYVEVOREVEKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisJZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCWlmIChmaWxlID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbjogJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisJZW5kID0gZnRlbGwoZmlsZSk7CisJZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOworCisJLyogZ2V0IGhlYWRlciAqLworCWlmIChmZ2V0cyhidWYsIDEwMjQsIGZpbGUpID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qIGZpcnN0IGxpbmUgd2lsbCBjb250YWluIHRoZSBsYXN0IHJlZ2lzdGVyCisJICogYW5kIGdwdSBuYW1lICovCisJc3NjYW5mKGJ1ZiwgIiVzICVzIiwgZ3B1X25hbWUsIGxhc3RfcmVnX3MpOworCXQtPmdwdV9wcmVmaXggPSBncHVfbmFtZTsKKwlsYXN0X3JlZyA9IHN0cnRvbChsYXN0X3JlZ19zLCBOVUxMLCAxNik7CisKKwlkbyB7CisJCWlmIChmZ2V0cyhidWYsIDEwMjQsIGZpbGUpID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisJCWxlbiA9IHN0cmxlbihidWYpOworCQlpZiAoZnRlbGwoZmlsZSkgPT0gZW5kKQorCQkJZG9uZSA9IDE7CisJCWlmIChsZW4pIHsKKwkJCXIgPSByZWdleGVjKCZtYXNrX3JleCwgYnVmLCA0LCBtYXRjaCwgMCk7CisJCQlpZiAociA9PSBSRUdfTk9NQVRDSCkgeworCQkJfSBlbHNlIGlmIChyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJFcnJvciBtYXRjaGluZyByZWd1bGFyIGV4cHJlc3Npb24gJWQgaW4gJXNcbiIsCisJCQkJCXIsIGZpbGVuYW1lKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9IGVsc2UgeworCQkJCWJ1ZlttYXRjaFswXS5ybV9lb10gPSAwOworCQkJCWJ1ZlttYXRjaFsxXS5ybV9lb10gPSAwOworCQkJCWJ1ZlttYXRjaFsyXS5ybV9lb10gPSAwOworCQkJCW8gPSBzdHJ0b2woJmJ1ZlttYXRjaFsxXS5ybV9zb10sIE5VTEwsIDE2KTsKKwkJCQlvZmZzZXQgPSBvZmZzZXRfbmV3KG8pOworCQkJCXRhYmxlX29mZnNldF9hZGQodCwgb2Zmc2V0KTsKKwkJCQlpZiAobyA+IHQtPm9mZnNldF9tYXgpCisJCQkJCXQtPm9mZnNldF9tYXggPSBvOworCQkJfQorCQl9CisJfSB3aGlsZSAoIWRvbmUpOworCWZjbG9zZShmaWxlKTsKKwlpZiAodC0+b2Zmc2V0X21heCA8IGxhc3RfcmVnKQorCQl0LT5vZmZzZXRfbWF4ID0gbGFzdF9yZWc7CisJcmV0dXJuIHRhYmxlX2J1aWxkKHQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCB0YWJsZSB0OworCisJaWYgKGFyZ2MgIT0gMikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8YXV0aGZpbGU+XG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJdGFibGVfaW5pdCgmdCk7CisJaWYgKHBhcnNlcl9hdXRoKCZ0LCBhcmd2WzFdKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBmaWxlICVzXG4iLCBhcmd2WzFdKTsKKwkJcmV0dXJuIC0xOworCX0KKwl0YWJsZV9wcmludCgmdCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IDY4ZTcyOGUuLmJlNTFjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC0yOSwxNSArMjksNDEgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgotI2luY2x1ZGUgInJhZGVvbl9taWNyb2NvZGUuaCIKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAicjEwMGQuaCIKKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJyMTAwX3JlZ19zYWZlLmgiCisjaW5jbHVkZSAicm41MF9yZWdfc2FmZS5oIgorCisvKiBGaXJtd2FyZSBOYW1lcyAqLworI2RlZmluZSBGSVJNV0FSRV9SMTAwCQkicmFkZW9uL1IxMDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SMjAwCQkicmFkZW9uL1IyMDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SMzAwCQkicmFkZW9uL1IzMDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SNDIwCQkicmFkZW9uL1I0MjBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SUzY5MAkJInJhZGVvbi9SUzY5MF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1JTNjAwCQkicmFkZW9uL1JTNjAwX2NwLmJpbiIKKyNkZWZpbmUgRklSTVdBUkVfUjUyMAkJInJhZGVvbi9SNTIwX2NwLmJpbiIKKworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1IxMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1IyMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1IzMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1I0MjApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1JTNjkwKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SUzYwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjUyMCk7CisKKyNpbmNsdWRlICJyMTAwX3RyYWNrLmgiCiAKIC8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86CiAgKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAKICAqCiAgKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgogICovCitpbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTU4LDIzICs4NCwyOCBAQAogCSAqIGNvdWxkIGVuZCB1cCBpbiB3cm9uZyBhZGRyZXNzLiAqLwogfQogCitpbnQgcjEwMF9wY2lfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJaWYgKHJkZXYtPmdhcnQudGFibGUucmFtLnB0cikgeworCQlXQVJOKDEsICJSMTAwIFBDSSBHQVJUIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIEluaXRpYWxpemUgY29tbW9uIGdhcnQgc3RydWN0dXJlICovCisJciA9IHJhZGVvbl9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJkZXYtPmdhcnQudGFibGVfc2l6ZSA9IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyAqIDQ7CisJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2g7CisJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlOworCXJldHVybiByYWRlb25fZ2FydF90YWJsZV9yYW1fYWxsb2MocmRldik7Cit9CisKIGludCByMTAwX3BjaV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7Ci0JaW50IHI7CiAKLQkvKiBJbml0aWFsaXplIGNvbW1vbiBnYXJ0IHN0cnVjdHVyZSAqLwotCXIgPSByYWRlb25fZ2FydF9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQlpZiAocmRldi0+Z2FydC50YWJsZS5yYW0ucHRyID09IE5VTEwpIHsKLQkJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogNDsKLQkJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9hbGxvYyhyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JfQogCS8qIGRpc2NhcmQgbWVtb3J5IHJlcXVlc3Qgb3V0c2lkZSBvZiBjb25maWd1cmVkIHJhbmdlICovCiAJdG1wID0gUlJFRzMyKFJBREVPTl9BSUNfQ05UTCkgfCBSQURFT05fRElTX09VVF9PRl9QQ0lfR0FSVF9BQ0NFU1M7CiAJV1JFRzMyKFJBREVPTl9BSUNfQ05UTCwgdG1wKTsKQEAgLTExNCwxMyArMTQ1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByMTAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX3BjaV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gcjEwMF9wY2lfZ2FydF9lbmFibGUocmRldik7CisJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOworCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKIApAQCAtMjQ3LDkgKzI3Niw2IEBACiAKIHZvaWQgcjEwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyYWRlb25fZ2FydF90YWJsZV9yYW1fZnJlZShyZGV2KTsKLQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCiAKQEAgLTI3Myw2ICsyOTksMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCByMTAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwlXUkVHMzIoUl8wMDAwNDBfR0VOX0lOVF9DTlRMLCAwKTsKKwkvKiBXYWl0IGFuZCBhY2tub3dsZWRnZSBpcnEgKi8KKwltZGVsYXkoMSk7CisJdG1wID0gUlJFRzMyKFJfMDAwMDQ0X0dFTl9JTlRfU1RBVFVTKTsKKwlXUkVHMzIoUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMsIHRtcCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgcjEwMF9pcnFfYWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IGlycXMgPSBSUkVHMzIoUkFERU9OX0dFTl9JTlRfU1RBVFVTKTsKQEAgLTI5Myw2ICszMzAsOSBAQAogCWlmICghc3RhdHVzKSB7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CisJaWYgKHJkZXYtPnNodXRkb3duKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CiAJd2hpbGUgKHN0YXR1cykgewogCQkvKiBTVyBpbnRlcnJ1cHQgKi8KIAkJaWYgKHN0YXR1cyAmIFJBREVPTl9TV19JTlRfVEVTVCkgewpAQCAtMzY3LDE0ICs0MDcsMjEgQEAKIAkJCXJldHVybiByOwogCQl9CiAJfQotCVdSRUczMigweDc3NCwgcmRldi0+d2IuZ3B1X2FkZHIpOwotCVdSRUczMigweDcwQywgcmRldi0+d2IuZ3B1X2FkZHIgKyAxMDI0KTsKLQlXUkVHMzIoMHg3NzAsIDB4ZmYpOworCVdSRUczMihSXzAwMDc3NF9TQ1JBVENIX0FERFIsIHJkZXYtPndiLmdwdV9hZGRyKTsKKwlXUkVHMzIoUl8wMDA3MENfQ1BfUkJfUlBUUl9BRERSLAorCQlTXzAwMDcwQ19SQl9SUFRSX0FERFIoKHJkZXYtPndiLmdwdV9hZGRyICsgMTAyNCkgPj4gMikpOworCVdSRUczMihSXzAwMDc3MF9TQ1JBVENIX1VNU0ssIDB4ZmYpOwogCXJldHVybiAwOwogfQogCit2b2lkIHIxMDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlXUkVHMzIoUl8wMDA3NzBfU0NSQVRDSF9VTVNLLCAwKTsKK30KKwogdm9pZCByMTAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOwogCWlmIChyZGV2LT53Yi53Yl9vYmopIHsKIAkJcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+d2Iud2Jfb2JqKTsKIAkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT53Yi53Yl9vYmopOwpAQCAtNDYxLDYgKzUwOCwyMSBAQAogLyoKICAqIENQCiAgKi8KK3N0YXRpYyBpbnQgcjEwMF9jcF93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVuc2lnbmVkIGk7CisJdTMyIHRtcDsKKworCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQl0bXAgPSBSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpOworCQlpZiAoIUdfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh0bXApKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCXJldHVybiAtMTsKK30KKwogdm9pZCByMTAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IHI7CkBAIC00NzgsMzMgKzU0MCwzMyBAQAogCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7CiB9CiAKLXN0YXRpYyB2b2lkIHIxMDBfY3BfbG9hZF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCisKKy8qIExvYWQgdGhlIG1pY3JvY29kZSBmb3IgdGhlIENQICovCitzdGF0aWMgaW50IHIxMDBfY3BfaW5pdF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaW50IGk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwljb25zdCBjaGFyICpmd19uYW1lID0gTlVMTDsKKwlpbnQgZXJyOwogCi0JaWYgKHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgR1VJIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOworCURSTV9ERUJVRygiXG4iKTsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJyYWRlb25fY3AiLCAwLCBOVUxMLCAwKTsKKwllcnIgPSBJU19FUlIocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInJhZGVvbl9jcDogRmFpbGVkIHRvIHJlZ2lzdGVyIGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fQUREUiwgMCk7CiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMTAwKSB8fCAocmRldi0+ZmFtaWx5ID09IENISVBfUlYxMDApIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjIwMCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTMTAwKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlMyMDApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIxMDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwgUjEwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsIFIxMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUjEwMDsKIAl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlYyNTApIHx8CiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjI4MCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTMzAwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSMjAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsIFIyMDBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFMLCBSMjAwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1IyMDA7CiAJfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUjMwMCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IzNTApIHx8CiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM1MCkgfHwKQEAgLTUxMiwzMSArNTc0LDE5IEBACiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzQwMCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDgwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSMzAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsIFIzMDBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFMLCBSMzAwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1IzMDA7CiAJfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMpIHx8CiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjQxMCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjQwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFILCBSNDIwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwgUjQyMF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQl9CisJCWZ3X25hbWUgPSBGSVJNV0FSRV9SNDIwOwogCX0gZWxzZSBpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwKSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3NDApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwL1JTNzQwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsIFJTNjkwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwgUlM2OTBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJfQorCQlmd19uYW1lID0gRklSTVdBUkVfUlM2OTA7CiAJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzYwMCkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSUzYwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFILCBSUzYwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsIFJTNjAwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1JTNjAwOwogCX0gZWxzZSBpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNTE1KSB8fAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUjUyMCkgfHwKIAkJICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNTMwKSB8fApAQCAtNTQ0LDkgKzU5NCw0MyBAQAogCQkgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY1NjApIHx8CiAJCSAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjU3MCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjUwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFILCBSNTIwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlXUkVHMzIoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwgUjUyMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQlmd19uYW1lID0gRklSTVdBUkVfUjUyMDsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZyZGV2LT5tZV9mdywgZndfbmFtZSwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInJhZGVvbl9jcDogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkgICAgICAgZndfbmFtZSk7CisJfSBlbHNlIGlmIChyZGV2LT5tZV9mdy0+c2l6ZSAlIDgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicmFkZW9uX2NwOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIHJkZXYtPm1lX2Z3LT5zaXplLCBmd19uYW1lKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJcmVsZWFzZV9maXJtd2FyZShyZGV2LT5tZV9mdyk7CisJCXJkZXYtPm1lX2Z3ID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KK3N0YXRpYyB2b2lkIHIxMDBfY3BfbG9hZF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJY29uc3QgX19iZTMyICpmd19kYXRhOworCWludCBpLCBzaXplOworCisJaWYgKHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUocmRldikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgR1VJIGlkbGUgd2hpbGUgIgorCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOworCX0KKworCWlmIChyZGV2LT5tZV9mdykgeworCQlzaXplID0gcmRldi0+bWVfZnctPnNpemUgLyA0OworCQlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKSZyZGV2LT5tZV9mdy0+ZGF0YVswXTsKKwkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fQUREUiwgMCk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDIpIHsKKwkJCVdSRUczMihSQURFT05fQ1BfTUVfUkFNX0RBVEFILAorCQkJICAgICAgIGJlMzJfdG9fY3B1cCgmZndfZGF0YVtpXSkpOworCQkJV1JFRzMyKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCisJCQkgICAgICAgYmUzMl90b19jcHVwKCZmd19kYXRhW2kgKyAxXSkpOwogCQl9CiAJfQogfQpAQCAtNTg1LDYgKzY2OSwxNSBAQAogCX0gZWxzZSB7CiAJCURSTV9JTkZPKCJyYWRlb246IGNwIGlkbGUgKDB4JTA4WClcbiIsIHRtcCk7CiAJfQorCisJaWYgKCFyZGV2LT5tZV9mdykgeworCQlyID0gcjEwMF9jcF9pbml0X21pY3JvY29kZShyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUhXG4iKTsKKwkJCXJldHVybiByOworCQl9CisJfQorCiAJLyogQWxpZ24gcmluZyBzaXplICovCiAJcmJfYnVmc3ogPSBkcm1fb3JkZXIocmluZ19zaXplIC8gOCk7CiAJcmluZ19zaXplID0gKDEgPDwgKHJiX2J1ZnN6ICsgMSkpICogNDsKQEAgLTY1OCw5ICs3NTEsMTEgQEAKIAogdm9pZCByMTAwX2NwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJaWYgKHIxMDBfY3Bfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlEUk1fRVJST1IoIldhaXQgZm9yIENQIGlkbGUgdGltZW91dCwgc2h1dHRpbmcgZG93biBDUC5cbiIpOworCX0KIAkvKiBEaXNhYmxlIHJpbmcgKi8KLQlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOwotCVdSRUczMihSQURFT05fQ1BfQ1NRX0NOVEwsIDApOworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKIAlyYWRlb25fcmluZ19maW5pKHJkZXYpOwogCURSTV9JTkZPKCJyYWRlb246IGNwIGZpbmFsaXplZFxuIik7CiB9CkBAIC03MTAsNiArODA1LDEyIEBACiAJcmV0dXJuIC0xOwogfQogCit2b2lkIHIxMDBfY3BfY29tbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihSQURFT05fQ1BfUkJfV1BUUiwgcmRldi0+Y3Aud3B0cik7CisJKHZvaWQpUlJFRzMyKFJBREVPTl9DUF9SQl9XUFRSKTsKK30KKwogCiAvKgogICogQ1MgZnVuY3Rpb25zCkBAIC05NjgsMTQ3ICsxMDY5LDM1NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHIxMDBfZ2V0X3Z0eF9zaXplKHVpbnQzMl90IHZ0eF9mbXQpCit7CisJaW50IHZ0eF9zaXplOworCXZ0eF9zaXplID0gMjsKKwkvKiBvcmRlcmVkIGFjY29yZGluZyB0byBiaXRzIGluIHNwZWMgKi8KKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1cwKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfRlBDT0xPUikKKwkJdnR4X3NpemUgKz0gMzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX0ZQQUxQSEEpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9QS0NPTE9SKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfRlBTUEVDKQorCQl2dHhfc2l6ZSArPSAzOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfRlBGT0cpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9QS1NQRUMpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9TVDApCisJCXZ0eF9zaXplICs9IDI7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9TVDEpCisJCXZ0eF9zaXplICs9IDI7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9RMSkKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1NUMikKKwkJdnR4X3NpemUgKz0gMjsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1EyKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfU1QzKQorCQl2dHhfc2l6ZSArPSAyOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfUTMpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9RMCkKKwkJdnR4X3NpemUrKzsKKwkvKiBibGVuZCB3ZWlnaHQgKi8KKwlpZiAodnR4X2ZtdCAmICgweDcgPDwgMTUpKQorCQl2dHhfc2l6ZSArPSAodnR4X2ZtdCA+PiAxNSkgJiAweDc7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9OMCkKKwkJdnR4X3NpemUgKz0gMzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1hZMSkKKwkJdnR4X3NpemUgKz0gMjsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1oxKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10ICYgUkFERU9OX1NFX1ZUWF9GTVRfVzEpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXQgJiBSQURFT05fU0VfVlRYX0ZNVF9OMSkKKwkJdnR4X3NpemUrKzsKKwlpZiAodnR4X2ZtdCAmIFJBREVPTl9TRV9WVFhfRk1UX1opCisJCXZ0eF9zaXplKys7CisJcmV0dXJuIHZ0eF9zaXplOworfQorCiBzdGF0aWMgaW50IHIxMDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QpCisJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkJICAgICAgdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCiB7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1aW50MzJfdCB0bXA7Ci0JdW5zaWduZWQgcmVnOwotCXVuc2lnbmVkIGk7Ci0JdW5zaWduZWQgaWR4OwotCWJvb2wgb25lcmVnOwogCWludCByOworCWludCBpLCBmYWNlOwogCXUzMiB0aWxlX2ZsYWdzID0gMDsKIAogCWliID0gcC0+aWItPnB0cjsKIAlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKLQlpZHggPSBwa3QtPmlkeCArIDE7Ci0JcmVnID0gcGt0LT5yZWc7Ci0Jb25lcmVnID0gZmFsc2U7Ci0JaWYgKENQX1BBQ0tFVDBfR0VUX09ORV9SRUdfV1IoaWJfY2h1bmstPmtkYXRhW3BrdC0+aWR4XSkpIHsKLQkJb25lcmVnID0gdHJ1ZTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8PSBwa3QtPmNvdW50OyBpKyssIGlkeCsrLCByZWcgKz0gNCkgewotCQlzd2l0Y2ggKHJlZykgewotCQljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgotCQkJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHApOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAotCQkJCQkJaWR4LCByZWcpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWJyZWFrOworCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUkFERU9OX0NSVENfR1VJX1RSSUdfVkxJTkU6CisJCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShwKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlicmVhazsKIAkJLyogRklYTUU6IG9ubHkgYWxsb3cgUEFDS0VUMyBibGl0PyBlYXNpZXIgdG8gY2hlY2sgZm9yIG91dCBvZgogCQkgKiByYW5nZSBhY2Nlc3MgKi8KLQkJY2FzZSBSQURFT05fRFNUX1BJVENIX09GRlNFVDoKLQkJY2FzZSBSQURFT05fU1JDX1BJVENIX09GRlNFVDoKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCi0JCQkJCSAgaWR4LCByZWcpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMDNmZmZmZjsKLQkJCXRtcCArPSAoKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCkgPj4gMTApOworCWNhc2UgUkFERU9OX0RTVF9QSVRDSF9PRkZTRVQ6CisJY2FzZSBSQURFT05fU1JDX1BJVENIX09GRlNFVDoKKwkJciA9IHIxMDBfcmVsb2NfcGl0Y2hfb2Zmc2V0KHAsIHBrdCwgaWR4LCByZWcpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX0RFUFRIT0ZGU0VUOgorCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQ6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKKwljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8xOgorCWNhc2UgUkFERU9OX1BQX1RYT0ZGU0VUXzI6CisJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYT0ZGU0VUXzApIC8gMjQ7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8xOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8yOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8zOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF80OgorCQlpID0gKHJlZyAtIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMCkgLyA0OworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzE6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzI6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzM6CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzQ6CisJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMV8wKSAvIDQ7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQlicmVhazsKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMDoKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMToKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMjoKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMzoKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfNDoKKwkJaSA9IChyZWcgLSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QyXzApIC8gNDsKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnRleHR1cmVzWzJdLmN1YmVfaW5mb1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JFX1dJRFRIX0hFSUdIVDoKKwkJdHJhY2stPm1heHkgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDB4N0ZGKTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgorCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CiAKLQkJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01BQ1JPKQotCQkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0RTVF9USUxFX01BQ1JPOwotCQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pIHsKLQkJCQlpZiAocmVnID09IFJBREVPTl9TUkNfUElUQ0hfT0ZGU0VUKSB7Ci0JCQkJCURSTV9FUlJPUigiQ2Fubm90IHNyYyBibGl0IGZyb20gbWljcm90aWxlZCBzdXJmYWNlXG4iKTsKLQkJCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQkJdGlsZV9mbGFncyB8PSBSQURFT05fRFNUX1RJTEVfTUlDUk87Ci0JCQl9CisJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01BQ1JPKQorCQkJdGlsZV9mbGFncyB8PSBSQURFT05fQ09MT1JfVElMRV9FTkFCTEU7CisJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQorCQkJdGlsZV9mbGFncyB8PSBSQURFT05fQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKIAotCQkJdG1wIHw9IHRpbGVfZmxhZ3M7Ci0JCQlpYltpZHhdID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzZmMwMDAwMCkgfCB0bXA7CisJCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgfD0gdGlsZV9mbGFnczsKKwkJaWJbaWR4XSA9IHRtcDsKKworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9DT0xPUlBJVENIX01BU0s7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfREVQVEhQSVRDSDoKKwkJdHJhY2stPnpiLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX0NOVEw6CisJCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CisJCWNhc2UgNzoKKwkJY2FzZSA4OgorCQljYXNlIDk6CisJCWNhc2UgMTE6CisJCWNhc2UgMTI6CisJCQl0cmFjay0+Y2JbMF0uY3BwID0gMTsKIAkJCWJyZWFrOwotCQljYXNlIFJBREVPTl9SQjNEX0RFUFRIT0ZGU0VUOgotCQljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgotCQljYXNlIFIzMDBfUkIzRF9DT0xPUk9GRlNFVDA6Ci0JCWNhc2UgUjMwMF9aQl9ERVBUSE9GRlNFVDoKLQkJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzA6Ci0JCWNhc2UgUjIwMF9QUF9UWE9GRlNFVF8xOgotCQljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMjoKLQkJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzM6Ci0JCWNhc2UgUjIwMF9QUF9UWE9GRlNFVF80OgotCQljYXNlIFIyMDBfUFBfVFhPRkZTRVRfNToKLQkJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKLQkJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMToKLQkJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMjoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wOgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArNDoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzg6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCsxMjoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzE2OgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArMjA6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCsyNDoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzI4OgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArMzI6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCszNjoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzQwOgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArNDQ6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs0ODoKLQkJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzUyOgotCQljYXNlIFIzMDBfVFhfT0ZGU0VUXzArNTY6Ci0JCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs2MDoKLQkJCS8qIHJuNTAgaGFzIG5vIDNEIGVuZ2luZSBzbyBmYWlsIG9uIGFueSAzZCBzZXR1cCAqLwotCQkJaWYgKEFTSUNfSVNfUk41MChwLT5yZGV2KSkgewotCQkJCURSTV9FUlJPUigiYXR0ZW1wdCB0byB1c2UgUk41MCAzRCBlbmdpbmUgZmFpbGVkXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCi0JCQkJCSAgaWR4LCByZWcpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJY2FzZSAxNToKKwkJCXRyYWNrLT5jYlswXS5jcHAgPSAyOwogCQkJYnJlYWs7Ci0JCWNhc2UgUjMwMF9SQjNEX0NPTE9SUElUQ0gwOgotCQljYXNlIFJBREVPTl9SQjNEX0NPTE9SUElUQ0g6Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAotCQkJCQkgIGlkeCwgcmVnKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0KLQkJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01BQ1JPKQotCQkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0NPTE9SX1RJTEVfRU5BQkxFOwotCQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCi0JCQkJdGlsZV9mbGFncyB8PSBSQURFT05fQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKLQotCQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7Ci0JCQl0bXAgfD0gdGlsZV9mbGFnczsKLQkJCWliW2lkeF0gPSB0bXA7Ci0JCQlicmVhazsKLQkJY2FzZSBSQURFT05fUkIzRF9aUEFTU19BRERSOgotCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCWlmIChyKSB7Ci0JCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKLQkJCQkJICBpZHgsIHJlZyk7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiByOwotCQkJfQotCQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWNhc2UgNjoKKwkJCXRyYWNrLT5jYlswXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQkvKiBGSVhNRTogd2UgZG9uJ3Qgd2FudCB0byBhbGxvdyBhbnlvdGhlcnMgcGFja2V0ICovCisJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCisJCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0cmFjay0+el9lbmFibGVkID0gISEoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fWl9FTkFCTEUpOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKKwkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQljYXNlIDA6CisJCQl0cmFjay0+emIuY3BwID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJY2FzZSA0OgorCQljYXNlIDU6CisJCWNhc2UgOToKKwkJY2FzZSAxMToKKwkJCXRyYWNrLT56Yi5jcHAgPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQlpZiAob25lcmVnKSB7Ci0JCQkvKiBGSVhNRTogZm9yYmlkIG9uZXJlZyB3cml0ZSB0byByZWdpc3RlciBvbiByZWxvY2F0ZSAqLworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX1pQQVNTX0FERFI6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1BQX0NOVEw6CisJCXsKKwkJCXVpbnQzMl90IHRlbXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA0OworCQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKQorCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gISEodGVtcCAmICgxIDw8IGkpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFJBREVPTl9TRV9WRl9DTlRMOgorCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fU0VfVlRYX0ZNVDoKKwkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWJfY2h1bmstPmtkYXRhW2lkeF0pOworCQlicmVhazsKKwljYXNlIFJBREVPTl9QUF9URVhfU0laRV8wOgorCWNhc2UgUkFERU9OX1BQX1RFWF9TSVpFXzE6CisJY2FzZSBSQURFT05fUFBfVEVYX1NJWkVfMjoKKwkJaSA9IChyZWcgLSBSQURFT05fUFBfVEVYX1NJWkVfMCkgLyA4OworCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVEVYX1ZTSVpFX01BU0spID4+IFJBREVPTl9URVhfVlNJWkVfU0hJRlQpICsgMTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfVEVYX1BJVENIXzA6CisJY2FzZSBSQURFT05fUFBfVEVYX1BJVENIXzE6CisJY2FzZSBSQURFT05fUFBfVEVYX1BJVENIXzI6CisJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9QSVRDSF8wKSAvIDg7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgMzI7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzA6CisJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMToKKwljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8yOgorCQlpID0gKHJlZyAtIFJBREVPTl9QUF9UWEZJTFRFUl8wKSAvIDI0OworCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fTUFYX01JUF9MRVZFTF9NQVNLKQorCQkJCQkJID4+IFJBREVPTl9NQVhfTUlQX0xFVkVMX1NISUZUKTsKKwkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA2KQorCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfdyA9IGZhbHNlOworCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjcpICYgMHg3OworCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCisJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1BQX1RYRk9STUFUXzA6CisJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMToKKwljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8yOgorCQlpID0gKHJlZyAtIFJBREVPTl9QUF9UWEZPUk1BVF8wKSAvIDI0OworCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfTk9OX1BPV0VSMikgeworCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDE7CisJCX0gZWxzZSB7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gMDsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfTUFTSyk7CisJCX0KKwkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RYRk9STUFUX0NVQklDX01BUF9FTkFCTEUpCisJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAyOworCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfSTg6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX1JHQjMzMjoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfWTg6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMTsKKwkJCWJyZWFrOworCQljYXNlIFJBREVPTl9UWEZPUk1BVF9BSTg4OgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9BUkdCMTU1NToKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCNTY1OgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9BUkdCNDQ0NDoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfVllVWTQyMjoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfWVZZVTQyMjoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfRFhUMToKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfU0hBRE9XMTY6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0xEVURWNjU1OgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9EVURWODg6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFJBREVPTl9UWEZPUk1BVF9BUkdCODg4ODoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCQTg4ODg6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0RYVDIzOgorCQljYXNlIFJBREVPTl9UWEZPUk1BVF9EWFQ0NToKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfU0hBRE9XMzI6CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0xEVURVVjg4ODg6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gNDsKIAkJCWJyZWFrOwogCQl9CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHhmKTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjApICYgMHhmKTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKKwljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgorCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzI6CisJCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpID0gKHJlZyAtIFJBREVPTl9QUF9DVUJJQ19GQUNFU18wKSAvIDQ7CisJCWZvciAoZmFjZSA9IDA7IGZhY2UgPCA0OyBmYWNlKyspIHsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxIDw8ICgodG1wID4+IChmYWNlICogOCkpICYgMHhmKTsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0uaGVpZ2h0ID0gMSA8PCAoKHRtcCA+PiAoKGZhY2UgKiA4KSArIDQpKSAmIDB4Zik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJGb3JiaWRkZW4gcmVnaXN0ZXIgMHglMDRYIGluIGNzIGF0ICVkXG4iLAorCQkgICAgICAgcmVnLCBpZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTM3LDYgKzE0NDcsNyBAQAogewogCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOworCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl1bnNpZ25lZCBpZHg7CiAJdW5zaWduZWQgaSwgYzsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMTQ1LDkgKzE0NTYsMTEgQEAKIAlpYiA9IHAtPmliLT5wdHI7CiAJaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOworCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoIChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKIAkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK107CisJCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKIAkJZm9yIChpID0gMDsgaSA8IChjIC0gMSk7IGkgKz0gMiwgaWR4ICs9IDMpIHsKIAkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJCQlpZiAocikgewpAQCAtMTE1Nyw2ICsxNDcwLDkgQEAKIAkJCQlyZXR1cm4gcjsKIAkJCX0KIAkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7CiAJCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwogCQkJaWYgKHIpIHsKIAkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLApAQCAtMTE2NSw2ICsxNDgxLDkgQEAKIAkJCQlyZXR1cm4gcjsKIAkJCX0KIAkJCWliW2lkeCsyXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMl0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDFdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJCXRyYWNrLT5hcnJheXNbaSArIDFdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjQ7CisJCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSAmPSAweDdGOwogCQl9CiAJCWlmIChjICYgMSkgewogCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTExNzUsNiArMTQ5NCw5IEBACiAJCQkJcmV0dXJuIHI7CiAJCQl9CiAJCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDg7CisJCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKQEAgLTExOTEsNyArMTUxMyw2IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAweDIzOgotCQkvKiBGSVhNRTogY2xlYW51cCAqLwogCQkvKiAzRF9STkRSX0dFTl9JTkRYX1BSSU0gb24gcjEwMC9yMjAwICovCiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJCWlmIChyKSB7CkBAIC0xMjAwLDE4ICsxNTIxLDcxIEBACiAJCQlyZXR1cm4gcjsKIAkJfQogCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPm51bV9hcnJheXMgPSAxOworCQl0cmFjay0+dnR4X3NpemUgPSByMTAwX2dldF92dHhfc2l6ZShpYl9jaHVuay0+a2RhdGFbaWR4KzJdKTsKKworCQl0cmFjay0+YXJyYXlzWzBdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPmFycmF5c1swXS5lc2l6ZSA9IHRyYWNrLT52dHhfc2l6ZTsKKworCQl0cmFjay0+bWF4X2luZHggPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdOworCisJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrM107CisJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lNTUQ6CisJCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHgrMV0gPj4gNCkgJiAweDMpICE9IDMpIHsKKwkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIHVzaW5nIGluLXBhY2tldCB2ZXJ0ZXggZGF0YSAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lNTURfMjoKKwkJaWYgKCgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gNCkgJiAweDMpICE9IDMpIHsKKwkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50OworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIHVzaW5nIGluLXBhY2tldCB2ZXJ0ZXggZGF0YSAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUZfMjoKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWF8yOgorCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgorCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIHVzaW5nIGluZGljZXMgdG8gdmVydGV4IGJ1ZmZlciAqLwogCWNhc2UgUEFDS0VUM19OT1A6CiAJCWJyZWFrOwpAQCAtMTIyNSw4ICsxNTk5LDEyIEBACiBpbnQgcjEwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwa3Q7CisJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCWludCByOwogCisJdHJhY2sgPSBremFsbG9jKHNpemVvZigqdHJhY2spLCBHRlBfS0VSTkVMKTsKKwlyMTAwX2NzX3RyYWNrX2NsZWFyKHAtPnJkZXYsIHRyYWNrKTsKKwlwLT50cmFjayA9IHRyYWNrOwogCWRvIHsKIAkJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlKHAsICZwa3QsIHAtPmlkeCk7CiAJCWlmIChyKSB7CkBAIC0xMjM1LDcgKzE2MTMsMTYgQEAKIAkJcC0+aWR4ICs9IHBrdC5jb3VudCArIDI7CiAJCXN3aXRjaCAocGt0LnR5cGUpIHsKIAkJCWNhc2UgUEFDS0VUX1RZUEUwOgotCQkJCXIgPSByMTAwX3BhY2tldDBfY2hlY2socCwgJnBrdCk7CisJCQkJaWYgKHAtPnJkZXYtPmZhbWlseSA+PSBDSElQX1IyMDApCisJCQkJCXIgPSByMTAwX2NzX3BhcnNlX3BhY2tldDAocCwgJnBrdCwKKwkJCQkJCQkJICBwLT5yZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibSwKKwkJCQkJCQkJICBwLT5yZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibV9zaXplLAorCQkJCQkJCQkgICZyMjAwX3BhY2tldDBfY2hlY2spOworCQkJCWVsc2UKKwkJCQkJciA9IHIxMDBfY3NfcGFyc2VfcGFja2V0MChwLCAmcGt0LAorCQkJCQkJCQkgIHAtPnJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtLAorCQkJCQkJCQkgIHAtPnJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtX3NpemUsCisJCQkJCQkJCSAgJnIxMDBfcGFja2V0MF9jaGVjayk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBBQ0tFVF9UWVBFMjoKIAkJCQlicmVhazsKQEAgLTE1NjgsNiArMTk1NSwyMCBAQAogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKIH0KIAordm9pZCByMTAwX3ZnYV9zZXRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGJvb2wgc3RhdGUpCit7CisJdWludDMyX3QgdGVtcDsKKworCXRlbXAgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19DTlRMKTsKKwlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKKwkJdGVtcCAmPSB+KDE8PDgpOworCQl0ZW1wIHw9ICgxPDw5KTsKKwl9IGVsc2UgeworCQl0ZW1wICY9IH4oMTw8OSk7CisJfQorCVdSRUczMihSQURFT05fQ09ORklHX0NOVEwsIHRlbXApOworfQorCiB2b2lkIHIxMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXIxMDBfdnJhbV9nZXRfdHlwZShyZGV2KTsKQEAgLTE2MzQsNiArMjAzNSwxNSBAQAogCiBpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWlmIChBU0lDX0lTX1JONTAocmRldikpIHsKKwkJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm0gPSBybjUwX3JlZ19zYWZlX2JtOworCQlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShybjUwX3JlZ19zYWZlX2JtKTsKKwl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjIwMCkgeworCQlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibSA9IHIxMDBfcmVnX3NhZmVfYm07CisJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHIxMDBfcmVnX3NhZmVfYm0pOworCX0gZWxzZSB7CisJCXJldHVybiByMjAwX2luaXQocmRldik7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xODM5LDYgKzIyNDksMTEgQEAKIAkJCWZsYWdzIHw9IFIzMDBfU1VSRl9USUxFX01JQ1JPOwogCX0KIAorCWlmICh0aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX1NXQVBfMTZCSVQpCisJCWZsYWdzIHw9IFJBREVPTl9TVVJGX0FQMF9TV1BfMTZCUFAgfCBSQURFT05fU1VSRl9BUDFfU1dQXzE2QlBQOworCWlmICh0aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX1NXQVBfMzJCSVQpCisJCWZsYWdzIHw9IFJBREVPTl9TVVJGX0FQMF9TV1BfMzJCUFAgfCBSQURFT05fU1VSRl9BUDFfU1dQXzMyQlBQOworCiAJRFJNX0RFQlVHKCJ3cml0aW5nIHN1cmZhY2UgJWQgJWQgJXggJXhcbiIsIHJlZywgZmxhZ3MsIG9mZnNldCwgb2Zmc2V0K29ial9zaXplLTEpOwogCVdSRUczMihSQURFT05fU1VSRkFDRTBfSU5GTyArIHN1cmZfaW5kZXgsIGZsYWdzKTsKIAlXUkVHMzIoUkFERU9OX1NVUkZBQ0UwX0xPV0VSX0JPVU5EICsgc3VyZl9pbmRleCwgb2Zmc2V0KTsKQEAgLTIzMzQsMyArMjc0OSw0NjAgQEAKIAkJCSAgKHVuc2lnbmVkIGludClSUkVHMzIoUkFERU9OX0dSUEgyX0JVRkZFUl9DTlRMKSk7CiAJfQogfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcjEwMF9jc190cmFja190ZXh0dXJlX3ByaW50KHN0cnVjdCByMTAwX2NzX3RyYWNrX3RleHR1cmUgKnQpCit7CisJRFJNX0VSUk9SKCJwaXRjaCAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+cGl0Y2gpOworCURSTV9FUlJPUigid2lkdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPndpZHRoKTsKKwlEUk1fRVJST1IoImhlaWdodCAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5oZWlnaHQpOworCURSTV9FUlJPUigibnVtIGxldmVscyAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPm51bV9sZXZlbHMpOworCURSTV9FUlJPUigiZGVwdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnR4ZGVwdGgpOworCURSTV9FUlJPUigiYnBwICAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmNwcCk7CisJRFJNX0VSUk9SKCJjb29yZGluYXRlIHR5cGUgICAgICAgICAgICAlZFxuIiwgdC0+dGV4X2Nvb3JkX3R5cGUpOworCURSTV9FUlJPUigid2lkdGggcm91bmQgdG8gcG93ZXIgb2YgMiAgJWRcbiIsIHQtPnJvdW5kdXBfdyk7CisJRFJNX0VSUk9SKCJoZWlnaHQgcm91bmQgdG8gcG93ZXIgb2YgMiAlZFxuIiwgdC0+cm91bmR1cF9oKTsKK30KKworc3RhdGljIGludCByMTAwX2NzX3RyYWNrX2N1YmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkgICAgICBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2ssIHVuc2lnbmVkIGlkeCkKK3sKKwl1bnNpZ25lZCBmYWNlLCB3LCBoOworCXN0cnVjdCByYWRlb25fb2JqZWN0ICpjdWJlX3JvYmo7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJZm9yIChmYWNlID0gMDsgZmFjZSA8IDU7IGZhY2UrKykgeworCQljdWJlX3JvYmogPSB0cmFjay0+dGV4dHVyZXNbaWR4XS5jdWJlX2luZm9bZmFjZV0ucm9iajsKKwkJdyA9IHRyYWNrLT50ZXh0dXJlc1tpZHhdLmN1YmVfaW5mb1tmYWNlXS53aWR0aDsKKwkJaCA9IHRyYWNrLT50ZXh0dXJlc1tpZHhdLmN1YmVfaW5mb1tmYWNlXS5oZWlnaHQ7CisKKwkJc2l6ZSA9IHcgKiBoOworCQlzaXplICo9IHRyYWNrLT50ZXh0dXJlc1tpZHhdLmNwcDsKKworCQlzaXplICs9IHRyYWNrLT50ZXh0dXJlc1tpZHhdLmN1YmVfaW5mb1tmYWNlXS5vZmZzZXQ7CisKKwkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUoY3ViZV9yb2JqKSkgeworCQkJRFJNX0VSUk9SKCJDdWJlIHRleHR1cmUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvYmplY3Qgc2l6ZSAlbHUgJWx1XG4iLAorCQkJCSAgc2l6ZSwgcmFkZW9uX29iamVjdF9zaXplKGN1YmVfcm9iaikpOworCQkJcjEwMF9jc190cmFja190ZXh0dXJlX3ByaW50KCZ0cmFjay0+dGV4dHVyZXNbaWR4XSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjEwMF9jc190cmFja190ZXh0dXJlX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spCit7CisJc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmo7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIHUsIGksIHcsIGg7CisJaW50IHJldDsKKworCWZvciAodSA9IDA7IHUgPCB0cmFjay0+bnVtX3RleHR1cmU7IHUrKykgeworCQlpZiAoIXRyYWNrLT50ZXh0dXJlc1t1XS5lbmFibGVkKQorCQkJY29udGludWU7CisJCXJvYmogPSB0cmFjay0+dGV4dHVyZXNbdV0ucm9iajsKKwkJaWYgKHJvYmogPT0gTlVMTCkgeworCQkJRFJNX0VSUk9SKCJObyB0ZXh0dXJlIGJvdW5kIHRvIHVuaXQgJXVcbiIsIHUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc2l6ZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPD0gdHJhY2stPnRleHR1cmVzW3VdLm51bV9sZXZlbHM7IGkrKykgeworCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS51c2VfcGl0Y2gpIHsKKwkJCQlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9SMzAwKQorCQkJCQl3ID0gKHRyYWNrLT50ZXh0dXJlc1t1XS5waXRjaCAvIHRyYWNrLT50ZXh0dXJlc1t1XS5jcHApIC8gKDEgPDwgaSk7CisJCQkJZWxzZQorCQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLnBpdGNoIC8gKDEgPDwgaSk7CisJCQl9IGVsc2UgeworCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGggLyAoMSA8PCBpKTsKKwkJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUpCisJCQkJCXcgfD0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoXzExOworCQkJCWlmICh0cmFjay0+dGV4dHVyZXNbdV0ucm91bmR1cF93KQorCQkJCQl3ID0gcm91bmR1cF9wb3dfb2ZfdHdvKHcpOworCQkJfQorCQkJaCA9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHQgLyAoMSA8PCBpKTsKKwkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKKwkJCQloIHw9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHRfMTE7CisJCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnJvdW5kdXBfaCkKKwkJCQloID0gcm91bmR1cF9wb3dfb2ZfdHdvKGgpOworCQkJc2l6ZSArPSB3ICogaDsKKwkJfQorCQlzaXplICo9IHRyYWNrLT50ZXh0dXJlc1t1XS5jcHA7CisJCXN3aXRjaCAodHJhY2stPnRleHR1cmVzW3VdLnRleF9jb29yZF90eXBlKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaXplICo9ICgxIDw8IHRyYWNrLT50ZXh0dXJlc1t1XS50eGRlcHRoKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAodHJhY2stPnNlcGFyYXRlX2N1YmUpIHsKKwkJCQlyZXQgPSByMTAwX2NzX3RyYWNrX2N1YmUocmRldiwgdHJhY2ssIHUpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQl9IGVsc2UKKwkJCQlzaXplICo9IDY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiSW52YWxpZCB0ZXh0dXJlIGNvb3JkaW5hdGUgdHlwZSAldSBmb3IgdW5pdCAiCisJCQkJICAiJXVcbiIsIHRyYWNrLT50ZXh0dXJlc1t1XS50ZXhfY29vcmRfdHlwZSwgdSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoc2l6ZSA+IHJhZGVvbl9vYmplY3Rfc2l6ZShyb2JqKSkgeworCQkJRFJNX0VSUk9SKCJUZXh0dXJlIG9mIHVuaXQgJXUgbmVlZHMgJWx1IGJ5dGVzIGJ1dCBpcyAiCisJCQkJICAiJWx1XG4iLCB1LCBzaXplLCByYWRlb25fb2JqZWN0X3NpemUocm9iaikpOworCQkJcjEwMF9jc190cmFja190ZXh0dXJlX3ByaW50KCZ0cmFjay0+dGV4dHVyZXNbdV0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMTAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spCit7CisJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgcHJpbV93YWxrOworCXVuc2lnbmVkIG52ZXJ0czsKKworCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2NiOyBpKyspIHsKKwkJaWYgKHRyYWNrLT5jYltpXS5yb2JqID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiW2RybV0gTm8gYnVmZmVyIGZvciBjb2xvciBidWZmZXIgJWQgIVxuIiwgaSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzaXplID0gdHJhY2stPmNiW2ldLnBpdGNoICogdHJhY2stPmNiW2ldLmNwcCAqIHRyYWNrLT5tYXh5OworCQlzaXplICs9IHRyYWNrLT5jYltpXS5vZmZzZXQ7CisJCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5jYltpXS5yb2JqKSkgeworCQkJRFJNX0VSUk9SKCJbZHJtXSBCdWZmZXIgdG9vIHNtYWxsIGZvciBjb2xvciBidWZmZXIgJWQgIgorCQkJCSAgIihuZWVkICVsdSBoYXZlICVsdSkgIVxuIiwgaSwgc2l6ZSwKKwkJCQkgIHJhZGVvbl9vYmplY3Rfc2l6ZSh0cmFjay0+Y2JbaV0ucm9iaikpOworCQkJRFJNX0VSUk9SKCJbZHJtXSBjb2xvciBidWZmZXIgJWQgKCV1ICV1ICV1ICV1KVxuIiwKKwkJCQkgIGksIHRyYWNrLT5jYltpXS5waXRjaCwgdHJhY2stPmNiW2ldLmNwcCwKKwkJCQkgIHRyYWNrLT5jYltpXS5vZmZzZXQsIHRyYWNrLT5tYXh5KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWlmICh0cmFjay0+el9lbmFibGVkKSB7CisJCWlmICh0cmFjay0+emIucm9iaiA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIltkcm1dIE5vIGJ1ZmZlciBmb3IgeiBidWZmZXIgIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzaXplID0gdHJhY2stPnpiLnBpdGNoICogdHJhY2stPnpiLmNwcCAqIHRyYWNrLT5tYXh5OworCQlzaXplICs9IHRyYWNrLT56Yi5vZmZzZXQ7CisJCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT56Yi5yb2JqKSkgeworCQkJRFJNX0VSUk9SKCJbZHJtXSBCdWZmZXIgdG9vIHNtYWxsIGZvciB6IGJ1ZmZlciAiCisJCQkJICAiKG5lZWQgJWx1IGhhdmUgJWx1KSAhXG4iLCBzaXplLAorCQkJCSAgcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT56Yi5yb2JqKSk7CisJCQlEUk1fRVJST1IoIltkcm1dIHpidWZmZXIgKCV1ICV1ICV1ICV1KVxuIiwKKwkJCQkgIHRyYWNrLT56Yi5waXRjaCwgdHJhY2stPnpiLmNwcCwKKwkJCQkgIHRyYWNrLT56Yi5vZmZzZXQsIHRyYWNrLT5tYXh5KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXByaW1fd2FsayA9ICh0cmFjay0+dmFwX3ZmX2NudGwgPj4gNCkgJiAweDM7CisJbnZlcnRzID0gKHRyYWNrLT52YXBfdmZfY250bCA+PiAxNikgJiAweEZGRkY7CisJc3dpdGNoIChwcmltX3dhbGspIHsKKwljYXNlIDE6CisJCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2FycmF5czsgaSsrKSB7CisJCQlzaXplID0gdHJhY2stPmFycmF5c1tpXS5lc2l6ZSAqIHRyYWNrLT5tYXhfaW5keCAqIDQ7CisJCQlpZiAodHJhY2stPmFycmF5c1tpXS5yb2JqID09IE5VTEwpIHsKKwkJCQlEUk1fRVJST1IoIihQVyAldSkgVmVydGV4IGFycmF5ICV1IG5vIGJ1ZmZlciAiCisJCQkJCSAgImJvdW5kXG4iLCBwcmltX3dhbGssIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKHNpemUgPiByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmFycmF5c1tpXS5yb2JqKSkgeworCQkJCURSTV9FUlJPUigiKFBXICV1KSBWZXJ0ZXggYXJyYXkgJXUgbmVlZCAlbHUgZHdvcmRzICIKKwkJCQkJICAgImhhdmUgJWx1IGR3b3Jkc1xuIiwgcHJpbV93YWxrLCBpLAorCQkJCQkgICBzaXplID4+IDIsCisJCQkJCSAgIHJhZGVvbl9vYmplY3Rfc2l6ZSh0cmFjay0+YXJyYXlzW2ldLnJvYmopID4+IDIpOworCQkJCURSTV9FUlJPUigiTWF4IGluZGljZXMgJXVcbiIsIHRyYWNrLT5tYXhfaW5keCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9hcnJheXM7IGkrKykgeworCQkJc2l6ZSA9IHRyYWNrLT5hcnJheXNbaV0uZXNpemUgKiAobnZlcnRzIC0gMSkgKiA0OworCQkJaWYgKHRyYWNrLT5hcnJheXNbaV0ucm9iaiA9PSBOVUxMKSB7CisJCQkJRFJNX0VSUk9SKCIoUFcgJXUpIFZlcnRleCBhcnJheSAldSBubyBidWZmZXIgIgorCQkJCQkgICJib3VuZFxuIiwgcHJpbV93YWxrLCBpKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5hcnJheXNbaV0ucm9iaikpIHsKKwkJCQlEUk1fRVJST1IoIihQVyAldSkgVmVydGV4IGFycmF5ICV1IG5lZWQgJWx1IGR3b3JkcyAiCisJCQkJCSAgICJoYXZlICVsdSBkd29yZHNcbiIsIHByaW1fd2FsaywgaSwgc2l6ZSA+PiAyLAorCQkJCQkgICByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmFycmF5c1tpXS5yb2JqKSA+PiAyKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIDM6CisJCXNpemUgPSB0cmFjay0+dnR4X3NpemUgKiBudmVydHM7CisJCWlmIChzaXplICE9IHRyYWNrLT5pbW1kX2R3b3JkcykgeworCQkJRFJNX0VSUk9SKCJJTU1EIGRyYXcgJXUgZHdvcnMgYnV0IG5lZWRzICVsdSBkd29yZHNcbiIsCisJCQkJICB0cmFjay0+aW1tZF9kd29yZHMsIHNpemUpOworCQkJRFJNX0VSUk9SKCJWQVBfVkZfQ05UTC5OVU1fVkVSVElDRVMgJXUsIFZUWF9TSVpFICV1XG4iLAorCQkJCSAgbnZlcnRzLCB0cmFjay0+dnR4X3NpemUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJbZHJtXSBJbnZhbGlkIHByaW1pdGl2ZSB3YWxrICVkIGZvciBWQVBfVkZfQ05UTFxuIiwKKwkJCSAgcHJpbV93YWxrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByMTAwX2NzX3RyYWNrX3RleHR1cmVfY2hlY2socmRldiwgdHJhY2spOworfQorCit2b2lkIHIxMDBfY3NfdHJhY2tfY2xlYXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjaykKK3sKKwl1bnNpZ25lZCBpLCBmYWNlOworCisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjMwMCkgeworCQl0cmFjay0+bnVtX2NiID0gMTsKKwkJaWYgKHJkZXYtPmZhbWlseSA8PSBDSElQX1JTMjAwKQorCQkJdHJhY2stPm51bV90ZXh0dXJlID0gMzsKKwkJZWxzZQorCQkJdHJhY2stPm51bV90ZXh0dXJlID0gNjsKKwkJdHJhY2stPm1heHkgPSAyMDQ4OworCQl0cmFjay0+c2VwYXJhdGVfY3ViZSA9IDE7CisJfSBlbHNlIHsKKwkJdHJhY2stPm51bV9jYiA9IDQ7CisJCXRyYWNrLT5udW1fdGV4dHVyZSA9IDE2OworCQl0cmFjay0+bWF4eSA9IDQwOTY7CisJCXRyYWNrLT5zZXBhcmF0ZV9jdWJlID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9jYjsgaSsrKSB7CisJCXRyYWNrLT5jYltpXS5yb2JqID0gTlVMTDsKKwkJdHJhY2stPmNiW2ldLnBpdGNoID0gODE5MjsKKwkJdHJhY2stPmNiW2ldLmNwcCA9IDE2OworCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gMDsKKwl9CisJdHJhY2stPnpfZW5hYmxlZCA9IHRydWU7CisJdHJhY2stPnpiLnJvYmogPSBOVUxMOworCXRyYWNrLT56Yi5waXRjaCA9IDgxOTI7CisJdHJhY2stPnpiLmNwcCA9IDQ7CisJdHJhY2stPnpiLm9mZnNldCA9IDA7CisJdHJhY2stPnZ0eF9zaXplID0gMHg3RjsKKwl0cmFjay0+aW1tZF9kd29yZHMgPSAweEZGRkZGRkZGVUw7CisJdHJhY2stPm51bV9hcnJheXMgPSAxMTsKKwl0cmFjay0+bWF4X2luZHggPSAweDAwRkZGRkZGVUw7CisJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fYXJyYXlzOyBpKyspIHsKKwkJdHJhY2stPmFycmF5c1tpXS5yb2JqID0gTlVMTDsKKwkJdHJhY2stPmFycmF5c1tpXS5lc2l6ZSA9IDB4N0Y7CisJfQorCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX3RleHR1cmU7IGkrKykgeworCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSAxNjUzNjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMTY1MzY7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxNjUzNjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoXzExID0gMSA8PCAxMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodF8xMSA9IDEgPDwgMTE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gMTI7CisJCWlmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9SUzIwMCkgeworCQkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gMDsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gMDsKKwkJfSBlbHNlIHsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gMTY7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAxOworCQl9CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA2NDsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSBOVUxMOworCQkvKiBDUyBJQiBlbWlzc2lvbiBjb2RlIG1ha2VzIHN1cmUgdGV4dHVyZSB1bml0IGFyZSBkaXNhYmxlZCAqLworCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9IGZhbHNlOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF93ID0gdHJ1ZTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IHRydWU7CisJCWlmICh0cmFjay0+c2VwYXJhdGVfY3ViZSkKKwkJCWZvciAoZmFjZSA9IDA7IGZhY2UgPCA1OyBmYWNlKyspIHsKKwkJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLnJvYmogPSBOVUxMOworCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxNjUzNjsKKwkJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLmhlaWdodCA9IDE2NTM2OworCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ub2Zmc2V0ID0gMDsKKwkJCX0KKwl9Cit9CisKK2ludCByMTAwX3JpbmdfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1aW50MzJfdCBzY3JhdGNoOworCXVpbnQzMl90IHRtcCA9IDA7CisJdW5zaWduZWQgaTsKKwlpbnQgcjsKKworCXIgPSByYWRlb25fc2NyYXRjaF9nZXQocmRldiwgJnNjcmF0Y2gpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBjcCBmYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCVdSRUczMihzY3JhdGNoLCAweENBRkVERUFEKTsKKwlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCAyKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7CisJCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgc2NyYXRjaCk7CisJCXJldHVybiByOworCX0KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKHNjcmF0Y2gsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweERFQURCRUVGKTsKKwlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOworCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQl0bXAgPSBSUkVHMzIoc2NyYXRjaCk7CisJCWlmICh0bXAgPT0gMHhERUFEQkVFRikgeworCQkJYnJlYWs7CisJCX0KKwkJRFJNX1VERUxBWSgxKTsKKwl9CisJaWYgKGkgPCByZGV2LT51c2VjX3RpbWVvdXQpIHsKKwkJRFJNX0lORk8oInJpbmcgdGVzdCBzdWNjZWVkZWQgaW4gJWQgdXNlY3NcbiIsIGkpOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigicmFkZW9uOiByaW5nIHRlc3QgZmFpbGVkIChzcmFjdGgoMHglMDRYKT0weCUwOFgpXG4iLAorCQkJICBzY3JhdGNoLCB0bXApOworCQlyID0gLUVJTlZBTDsKKwl9CisJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKKwlyZXR1cm4gcjsKK30KKwordm9pZCByMTAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fQ1BfSUJfQkFTRSwgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5ncHVfYWRkcik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmxlbmd0aF9kdyk7Cit9CisKK2ludCByMTAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHJhZGVvbl9pYiAqaWI7CisJdWludDMyX3Qgc2NyYXRjaDsKKwl1aW50MzJfdCB0bXAgPSAwOworCXVuc2lnbmVkIGk7CisJaW50IHI7CisKKwlyID0gcmFkZW9uX3NjcmF0Y2hfZ2V0KHJkZXYsICZzY3JhdGNoKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIHRvIGdldCBzY3JhdGNoIHJlZyAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlXUkVHMzIoc2NyYXRjaCwgMHhDQUZFREVBRCk7CisJciA9IHJhZGVvbl9pYl9nZXQocmRldiwgJmliKTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisJaWItPnB0clswXSA9IFBBQ0tFVDAoc2NyYXRjaCwgMCk7CisJaWItPnB0clsxXSA9IDB4REVBREJFRUY7CisJaWItPnB0clsyXSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0clszXSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls0XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls1XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls2XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls3XSA9IFBBQ0tFVDIoMCk7CisJaWItPmxlbmd0aF9kdyA9IDg7CisJciA9IHJhZGVvbl9pYl9zY2hlZHVsZShyZGV2LCBpYik7CisJaWYgKHIpIHsKKwkJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKKwkJcmFkZW9uX2liX2ZyZWUocmRldiwgJmliKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByYWRlb25fZmVuY2Vfd2FpdChpYi0+ZmVuY2UsIGZhbHNlKTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCXRtcCA9IFJSRUczMihzY3JhdGNoKTsKKwkJaWYgKHRtcCA9PSAweERFQURCRUVGKSB7CisJCQlicmVhazsKKwkJfQorCQlEUk1fVURFTEFZKDEpOworCX0KKwlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgeworCQlEUk1fSU5GTygiaWIgdGVzdCBzdWNjZWVkZWQgaW4gJXUgdXNlY3NcbiIsIGkpOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBpYiB0ZXN0IGZhaWxlZCAoc3JhY3RoKDB4JTA0WCk9MHglMDhYKVxuIiwKKwkJCSAgc2NyYXRjaCwgdG1wKTsKKwkJciA9IC1FSU5WQUw7CisJfQorCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgc2NyYXRjaCk7CisJcmFkZW9uX2liX2ZyZWUocmRldiwgJmliKTsKKwlyZXR1cm4gcjsKK30KKwordm9pZCByMTAwX2liX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmFkZW9uX2liX3Bvb2xfZmluaShyZGV2KTsKK30KKworaW50IHIxMDBfaWJfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgcG9vbCAoJWQpLlxuIiwgcik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX2liX3Rlc3QocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCByMTAwX21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX21jX3NhdmUgKnNhdmUpCit7CisJLyogU2h1dGRvd24gQ1Agd2Ugc2hvdWxkbid0IG5lZWQgdG8gZG8gdGhhdCBidXQgYmV0dGVyIGJlIHNhZmUgdGhhbgorCSAqIHNvcnJ5CisJICovCisJcmRldi0+Y3AucmVhZHkgPSBmYWxzZTsKKwlXUkVHMzIoUl8wMDA3NDBfQ1BfQ1NRX0NOVEwsIDApOworCisJLyogU2F2ZSBmZXcgQ1JUQyByZWdpc3RlcnMgKi8KKwlzYXZlLT5HRU5NT19XVCA9IFJSRUczMihSXzAwMDNDMF9HRU5NT19XVCk7CisJc2F2ZS0+Q1JUQ19FWFRfQ05UTCA9IFJSRUczMihSXzAwMDA1NF9DUlRDX0VYVF9DTlRMKTsKKwlzYXZlLT5DUlRDX0dFTl9DTlRMID0gUlJFRzMyKFJfMDAwMDUwX0NSVENfR0VOX0NOVEwpOworCXNhdmUtPkNVUl9PRkZTRVQgPSBSUkVHMzIoUl8wMDAyNjBfQ1VSX09GRlNFVCk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7CisJCXNhdmUtPkNSVEMyX0dFTl9DTlRMID0gUlJFRzMyKFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMKTsKKwkJc2F2ZS0+Q1VSMl9PRkZTRVQgPSBSUkVHMzIoUl8wMDAzNjBfQ1VSMl9PRkZTRVQpOworCX0KKworCS8qIERpc2FibGUgVkdBIGFwZXJ0dXJlIGFjY2VzcyAqLworCVdSRUczMihSXzAwMDNDMF9HRU5NT19XVCwgQ18wMDAzQzBfVkdBX1JBTV9FTiAmIHNhdmUtPkdFTk1PX1dUKTsKKwkvKiBEaXNhYmxlIGN1cnNvciwgb3ZlcmxheSwgY3J0YyAqLworCVdSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VULCBzYXZlLT5DVVJfT0ZGU0VUIHwgU18wMDAyNjBfQ1VSX0xPQ0soMSkpOworCVdSRUczMihSXzAwMDA1NF9DUlRDX0VYVF9DTlRMLCBzYXZlLT5DUlRDX0VYVF9DTlRMIHwKKwkJCQkJU18wMDAwNTRfQ1JUQ19ESVNQTEFZX0RJUygxKSk7CisJV1JFRzMyKFJfMDAwMDUwX0NSVENfR0VOX0NOVEwsCisJCQkoQ18wMDAwNTBfQ1JUQ19DVVJfRU4gJiBzYXZlLT5DUlRDX0dFTl9DTlRMKSB8CisJCQlTXzAwMDA1MF9DUlRDX0RJU1BfUkVRX0VOX0IoMSkpOworCVdSRUczMihSXzAwMDQyMF9PVjBfU0NBTEVfQ05UTCwKKwkJQ18wMDA0MjBfT1YwX09WRVJMQVlfRU4gJiBSUkVHMzIoUl8wMDA0MjBfT1YwX1NDQUxFX0NOVEwpKTsKKwlXUkVHMzIoUl8wMDAyNjBfQ1VSX09GRlNFVCwgQ18wMDAyNjBfQ1VSX0xPQ0sgJiBzYXZlLT5DVVJfT0ZGU0VUKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKKwkJV1JFRzMyKFJfMDAwMzYwX0NVUjJfT0ZGU0VULCBzYXZlLT5DVVIyX09GRlNFVCB8CisJCQkJCQlTXzAwMDM2MF9DVVIyX0xPQ0soMSkpOworCQlXUkVHMzIoUl8wMDAzRjhfQ1JUQzJfR0VOX0NOVEwsCisJCQkoQ18wMDAzRjhfQ1JUQzJfQ1VSX0VOICYgc2F2ZS0+Q1JUQzJfR0VOX0NOVEwpIHwKKwkJCVNfMDAwM0Y4X0NSVEMyX0RJU1BMQVlfRElTKDEpIHwKKwkJCVNfMDAwM0Y4X0NSVEMyX0RJU1BfUkVRX0VOX0IoMSkpOworCQlXUkVHMzIoUl8wMDAzNjBfQ1VSMl9PRkZTRVQsCisJCQlDXzAwMDM2MF9DVVIyX0xPQ0sgJiBzYXZlLT5DVVIyX09GRlNFVCk7CisJfQorfQorCit2b2lkIHIxMDBfbWNfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9tY19zYXZlICpzYXZlKQoreworCS8qIFVwZGF0ZSBiYXNlIGFkZHJlc3MgZm9yIGNydGMgKi8KKwlXUkVHMzIoUl8wMDAyM0NfRElTUExBWV9CQVNFX0FERFIsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24pOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKSkgeworCQlXUkVHMzIoUl8wMDAzM0NfQ1JUQzJfRElTUExBWV9CQVNFX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbik7CisJfQorCS8qIFJlc3RvcmUgQ1JUQyByZWdpc3RlcnMgKi8KKwlXUkVHMzIoUl8wMDAzQzBfR0VOTU9fV1QsIHNhdmUtPkdFTk1PX1dUKTsKKwlXUkVHMzIoUl8wMDAwNTRfQ1JUQ19FWFRfQ05UTCwgc2F2ZS0+Q1JUQ19FWFRfQ05UTCk7CisJV1JFRzMyKFJfMDAwMDUwX0NSVENfR0VOX0NOVEwsIHNhdmUtPkNSVENfR0VOX0NOVEwpOworCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKSkgeworCQlXUkVHMzIoUl8wMDAzRjhfQ1JUQzJfR0VOX0NOVEwsIHNhdmUtPkNSVEMyX0dFTl9DTlRMKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYTgyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaApAQCAtMCwwICsxLDEyNCBAQAorCisjZGVmaW5lIFIxMDBfVFJBQ0tfTUFYX1RFWFRVUkUgMworI2RlZmluZSBSMjAwX1RSQUNLX01BWF9URVhUVVJFIDYKKyNkZWZpbmUgUjMwMF9UUkFDS19NQVhfVEVYVFVSRSAxNgorCisjZGVmaW5lIFIxMDBfTUFYX0NCIDEKKyNkZWZpbmUgUjMwMF9NQVhfQ0IgNAorCisvKgorICogQ1MgZnVuY3Rpb25zCisgKi8KK3N0cnVjdCByMTAwX2NzX3RyYWNrX2NiIHsKKwlzdHJ1Y3QgcmFkZW9uX29iamVjdAkqcm9iajsKKwl1bnNpZ25lZAkJcGl0Y2g7CisJdW5zaWduZWQJCWNwcDsKKwl1bnNpZ25lZAkJb2Zmc2V0OworfTsKKworc3RydWN0IHIxMDBfY3NfdHJhY2tfYXJyYXkgeworCXN0cnVjdCByYWRlb25fb2JqZWN0CSpyb2JqOworCXVuc2lnbmVkCQllc2l6ZTsKK307CisKK3N0cnVjdCByMTAwX2NzX2N1YmVfaW5mbyB7CisJc3RydWN0IHJhZGVvbl9vYmplY3QJKnJvYmo7CisJdW5zaWduZWQgICAgICAgICAgICAgICAgb2Zmc2V0OworCXVuc2lnbmVkCQl3aWR0aDsKKwl1bnNpZ25lZAkJaGVpZ2h0OworfTsKKworc3RydWN0IHIxMDBfY3NfdHJhY2tfdGV4dHVyZSB7CisJc3RydWN0IHJhZGVvbl9vYmplY3QJKnJvYmo7CisJc3RydWN0IHIxMDBfY3NfY3ViZV9pbmZvIGN1YmVfaW5mb1s1XTsgLyogaW5mbyBmb3IgNSBub24tcHJpbWFyeSBmYWNlcyAqLworCXVuc2lnbmVkCQlwaXRjaDsKKwl1bnNpZ25lZAkJd2lkdGg7CisJdW5zaWduZWQJCWhlaWdodDsKKwl1bnNpZ25lZAkJbnVtX2xldmVsczsKKwl1bnNpZ25lZAkJY3BwOworCXVuc2lnbmVkCQl0ZXhfY29vcmRfdHlwZTsKKwl1bnNpZ25lZAkJdHhkZXB0aDsKKwl1bnNpZ25lZAkJd2lkdGhfMTE7CisJdW5zaWduZWQJCWhlaWdodF8xMTsKKwlib29sCQkJdXNlX3BpdGNoOworCWJvb2wJCQllbmFibGVkOworCWJvb2wJCQlyb3VuZHVwX3c7CisJYm9vbAkJCXJvdW5kdXBfaDsKK307CisKK3N0cnVjdCByMTAwX2NzX3RyYWNrX2xpbWl0cyB7CisJdW5zaWduZWQgbnVtX2NiOworCXVuc2lnbmVkIG51bV90ZXh0dXJlOworCXVuc2lnbmVkIG1heF9sZXZlbHM7Cit9OworCitzdHJ1Y3QgcjEwMF9jc190cmFjayB7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXY7CisJdW5zaWduZWQJCQludW1fY2I7CisJdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICBudW1fdGV4dHVyZTsKKwl1bnNpZ25lZAkJCW1heHk7CisJdW5zaWduZWQJCQl2dHhfc2l6ZTsKKwl1bnNpZ25lZAkJCXZhcF92Zl9jbnRsOworCXVuc2lnbmVkCQkJaW1tZF9kd29yZHM7CisJdW5zaWduZWQJCQludW1fYXJyYXlzOworCXVuc2lnbmVkCQkJbWF4X2luZHg7CisJc3RydWN0IHIxMDBfY3NfdHJhY2tfYXJyYXkJYXJyYXlzWzExXTsKKwlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJY2JbUjMwMF9NQVhfQ0JdOworCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAl6YjsKKwlzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlCXRleHR1cmVzW1IzMDBfVFJBQ0tfTUFYX1RFWFRVUkVdOworCWJvb2wJCQkJel9lbmFibGVkOworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVfY3ViZTsKKworfTsKKworaW50IHIxMDBfY3NfdHJhY2tfY2hlY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjayk7Cit2b2lkIHIxMDBfY3NfdHJhY2tfY2xlYXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjayk7CitpbnQgcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYyk7Cit2b2lkIHIxMDBfY3NfZHVtcF9wYWNrZXQoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCk7CisKK2ludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7CisKK2ludCByMjAwX3BhY2tldDBfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCSAgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkgICAgICAgdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpOworCitzdGF0aWMgaW5saW5lIGludCByMTAwX3JlbG9jX3BpdGNoX29mZnNldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkJCQkgIHVuc2lnbmVkIGlkeCwKKwkJCQkJICB1bnNpZ25lZCByZWcpCit7CisJaW50IHI7CisJdTMyIHRpbGVfZmxhZ3MgPSAwOworCXUzMiB0bXA7CisJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CisKKwlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKworCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCSAgaWR4LCByZWcpOworCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCXJldHVybiByOworCX0KKwl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDAzZmZmZmY7CisJdG1wICs9ICgoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSA+PiAxMCk7CisKKwlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKKwkJdGlsZV9mbGFncyB8PSBSQURFT05fRFNUX1RJTEVfTUFDUk87CisJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pIHsKKwkJaWYgKHJlZyA9PSBSQURFT05fU1JDX1BJVENIX09GRlNFVCkgeworCQkJRFJNX0VSUk9SKCJDYW5ub3Qgc3JjIGJsaXQgZnJvbSBtaWNyb3RpbGVkIHN1cmZhY2VcbiIpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdGlsZV9mbGFncyB8PSBSQURFT05fRFNUX1RJTEVfTUlDUk87CisJfQorCisJdG1wIHw9IHRpbGVfZmxhZ3M7CisJcC0+aWItPnB0cltpZHhdID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzZmMwMDAwMCkgfCB0bXA7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiMjU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaApAQCAtMCwwICsxLDYwNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SMTAwRF9IX18KKyNkZWZpbmUgX19SMTAwRF9IX18KKworI2RlZmluZSBDUF9QQUNLRVQwCQkJMHgwMDAwMDAwMAorI2RlZmluZQkJUEFDS0VUMF9CQVNFX0lOREVYX1NISUZUCTAKKyNkZWZpbmUJCVBBQ0tFVDBfQkFTRV9JTkRFWF9NQVNLCQkoMHgxZmZmZiA8PCAwKQorI2RlZmluZQkJUEFDS0VUMF9DT1VOVF9TSElGVAkJMTYKKyNkZWZpbmUJCVBBQ0tFVDBfQ09VTlRfTUFTSwkJKDB4M2ZmZiA8PCAxNikKKyNkZWZpbmUgQ1BfUEFDS0VUMQkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BfUEFDS0VUMgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX1NISUZUCQkwCisjZGVmaW5lCQlQQUNLRVQyX1BBRF9NQVNLCQkoMHgzZmZmZmZmZiA8PCAwKQorI2RlZmluZSBDUF9QQUNLRVQzCQkJMHhDMDAwMDAwMAorI2RlZmluZQkJUEFDS0VUM19JVF9PUENPREVfU0hJRlQJCTgKKyNkZWZpbmUJCVBBQ0tFVDNfSVRfT1BDT0RFX01BU0sJCSgweGZmIDw8IDgpCisjZGVmaW5lCQlQQUNLRVQzX0NPVU5UX1NISUZUCQkxNgorI2RlZmluZQkJUEFDS0VUM19DT1VOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQorLyogUEFDS0VUMyBvcCBjb2RlICovCisjZGVmaW5lCQlQQUNLRVQzX05PUAkJCTB4MTAKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGCQkweDI4CisjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU1NRAkJMHgyOQorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFgJCTB4MkEKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfTE9BRF9WQlBOVFIJCTB4MkYKKyNkZWZpbmUJCVBBQ0tFVDNfSU5EWF9CVUZGRVIJCTB4MzMKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGXzIJCTB4MzQKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1EXzIJCTB4MzUKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTkRYXzIJCTB4MzYKKyNkZWZpbmUJCVBBQ0tFVDNfQklUQkxUX01VTFRJCQkweDlCCisKKyNkZWZpbmUgUEFDS0VUMChyZWcsIG4pCShDUF9QQUNLRVQwIHwJCQkJCVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDBfQkFTRV9JTkRFWCwgKHJlZykgPj4gMikgfAlcCisJCQkgUkVHX1NFVChQQUNLRVQwX0NPVU5ULCAobikpKQorI2RlZmluZSBQQUNLRVQyKHYpCShDUF9QQUNLRVQyIHwgUkVHX1NFVChQQUNLRVQyX1BBRCwgKHYpKSkKKyNkZWZpbmUgUEFDS0VUMyhvcCwgbikJKENQX1BBQ0tFVDMgfAkJCQkJXAorCQkJIFJFR19TRVQoUEFDS0VUM19JVF9PUENPREUsIChvcCkpIHwJCVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDNfQ09VTlQsIChuKSkpCisKKyNkZWZpbmUJUEFDS0VUX1RZUEUwCTAKKyNkZWZpbmUJUEFDS0VUX1RZUEUxCTEKKyNkZWZpbmUJUEFDS0VUX1RZUEUyCTIKKyNkZWZpbmUJUEFDS0VUX1RZUEUzCTMKKworI2RlZmluZSBDUF9QQUNLRVRfR0VUX1RZUEUoaCkgKCgoaCkgPj4gMzApICYgMykKKyNkZWZpbmUgQ1BfUEFDS0VUX0dFVF9DT1VOVChoKSAoKChoKSA+PiAxNikgJiAweDNGRkYpCisjZGVmaW5lIENQX1BBQ0tFVDBfR0VUX1JFRyhoKSAoKChoKSAmIDB4MUZGRikgPDwgMikKKyNkZWZpbmUgQ1BfUEFDS0VUMF9HRVRfT05FX1JFR19XUihoKSAoKChoKSA+PiAxNSkgJiAxKQorI2RlZmluZSBDUF9QQUNLRVQzX0dFVF9PUENPREUoaCkgKCgoaCkgPj4gOCkgJiAweEZGKQorCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAwNDBfR0VOX0lOVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAKKyNkZWZpbmUgICBTXzAwMDA0MF9DUlRDX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA0MF9DUlRDX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9DUlRDX1ZCTEFOSyAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwNDBfQ1JUQ19WTElORSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwNDBfQ1JUQ19WTElORSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfQ1JUQ19WTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDQwX0NSVENfVlNZTkMoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVENfVlNZTkMoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVENfVlNZTkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDA0MF9TTkFQU0hPVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDA0MF9TTkFQU0hPVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9TTkFQU0hPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwNDBfRlBfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwNDBfRlBfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRlBfREVURUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZMSU5FKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZMSU5FKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZMSU5FICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGREYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDBfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgwX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMF9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9DUlRDMl9WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfU05BUFNIT1QyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZCTEFOSyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDA0MF9GUDJfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwNDBfRlAyX0RFVEVDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0ZQMl9ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WU1lOQ19ESUZGX09WRVJfTElNSVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwNDBfVlNZTkNfRElGRl9PVkVSX0xJTUlUKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVCAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDFfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgxX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMV9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDJfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgyX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMl9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgzX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIM19JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9JMkNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDBfSTJDX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0kyQ19JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDBfR1VJX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSV9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSVBIX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDBfVklQSF9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJUEhfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9TV19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDBfU1dfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1NXX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HRVlTRVJWSUxMRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDBfR0VZU0VSVklMTEUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dFWVNFUlZJTExFICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9IRENQX0FVVEhPUklaRURfSU5UKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwNDBfSERDUF9BVVRIT1JJWkVEX0lOVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0hEQ1BfQVVUSE9SSVpFRF9JTlQgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9EVklfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwNDBfRFZJX0kyQ19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RWSV9JMkNfSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDBfR1VJRE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSURNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSURETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDBfVklERE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJRERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDQKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDX1ZCTEFOS19TVEFUICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQ19WQkxBTktfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQ19WQkxBTktfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQ19WQkxBTktfU1RBVF9BSyAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVENfVkxJTkVfU1RBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVENfVkxJTkVfU1RBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVENfVkxJTkVfU1RBVCAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDX1ZMSU5FX1NUQVRfQUsoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDX1ZMSU5FX1NUQVRfQUsoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDX1ZMSU5FX1NUQVRfQUsgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQ19WU1lOQ19TVEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQ19WU1lOQ19TVEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQ19WU1lOQ19TVEFUICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVENfVlNZTkNfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVENfVlNZTkNfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVENfVlNZTkNfU1RBVF9BSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDA0NF9TTkFQU0hPVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDA0NF9TTkFQU0hPVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9TTkFQU0hPVF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwNDRfU05BUFNIT1RfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwNDRfU05BUFNIT1RfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU05BUFNIT1RfU1RBVF9BSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDQ0X0ZQX0RFVEVDVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDQ0X0ZQX0RFVEVDVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0ZQX0RFVEVDVF9TVEFUICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDA0NF9GUF9ERVRFQ1RfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDA0NF9GUF9ERVRFQ1RfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9GUF9ERVRFQ1RfU1RBVF9BSyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQzJfVkxJTkVfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQzJfVkxJTkVfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQzJfVkxJTkVfU1RBVCAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVEMyX1ZMSU5FX1NUQVRfQUsoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVEMyX1ZMSU5FX1NUQVRfQUsoeCkgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVEMyX1ZMSU5FX1NUQVRfQUsgICAgICAgICAgICAgICAgIDB4RkZGRkZGREYKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDMl9WU1lOQ19TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDMl9WU1lOQ19TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDMl9WU1lOQ19TVEFUICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwNDRfQ1JUQzJfVlNZTkNfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDYpCisjZGVmaW5lICAgR18wMDAwNDRfQ1JUQzJfVlNZTkNfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ1JUQzJfVlNZTkNfU1RBVF9BSyAgICAgICAgICAgICAgICAgMHhGRkZGRkZCRgorI2RlZmluZSAgIFNfMDAwMDQ0X1NOQVBTSE9UMl9TVEFUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA3KQorI2RlZmluZSAgIEdfMDAwMDQ0X1NOQVBTSE9UMl9TVEFUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NOQVBTSE9UMl9TVEFUICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGN0YKKyNkZWZpbmUgICBTXzAwMDA0NF9TTkFQU0hPVDJfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDA0NF9TTkFQU0hPVDJfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9TTkFQU0hPVDJfU1RBVF9BSyAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0NSVEMyX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDQ0X0NSVEMyX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NSVEMyX1ZCTEFOS19TVEFUICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDA0NF9DUlRDMl9WQkxBTktfU1RBVF9BSyh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDA0NF9DUlRDMl9WQkxBTktfU1RBVF9BSyh4KSAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9DUlRDMl9WQkxBTktfU1RBVF9BSyAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAwNDRfRlAyX0RFVEVDVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMDQ0X0ZQMl9ERVRFQ1RfU1RBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9GUDJfREVURUNUX1NUQVQgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAwNDRfRlAyX0RFVEVDVF9TVEFUX0FLKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMDQ0X0ZQMl9ERVRFQ1RfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9GUDJfREVURUNUX1NUQVRfQUsgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAwNDRfVlNZTkNfRElGRl9PVkVSX0xJTUlUX1NUQVQoeCkgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwMDQ0X1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVF9TVEFUKHgpICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9WU1lOQ19ESUZGX09WRVJfTElNSVRfU1RBVCAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDAwNDRfVlNZTkNfRElGRl9PVkVSX0xJTUlUX1NUQVRfQUsoeCkgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwMDQ0X1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVF9TVEFUX0FLKHgpICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9WU1lOQ19ESUZGX09WRVJfTElNSVRfU1RBVF9BSyAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgwX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIMF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDBfSU5UICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgwX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIMF9JTlRfQUsoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDBfSU5UX0FLICAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgxX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIMV9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDFfSU5UICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgxX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIMV9JTlRfQUsoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDFfSU5UX0FLICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgyX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIMl9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDJfSU5UICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgyX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIMl9JTlRfQUsoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDJfSU5UX0FLICAgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgzX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIM19JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDNfSU5UICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDAwNDRfRE1BX1ZJUEgzX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMDQ0X0RNQV9WSVBIM19JTlRfQUsoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ETUFfVklQSDNfSU5UX0FLICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDAwNDRfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDQ0X0kyQ19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9JMkNfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfSTJDX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDQ0X0kyQ19JTlRfQUsoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9JMkNfSU5UX0FLICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfR1VJX0lETEVfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDQ0X0dVSV9JRExFX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9HVUlfSURMRV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfR1VJX0lETEVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDQ0X0dVSV9JRExFX1NUQVRfQUsoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9HVUlfSURMRV9TVEFUX0FLICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfVklQSF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDQ0X1ZJUEhfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9WSVBIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfU1dfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwMDQ0X1NXX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9TV19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfU1dfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwMDQ0X1NXX0lOVF9BSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9TV19JTlRfQUsgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfU1dfSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwMDQ0X1NXX0lOVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9TV19JTlRfU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfR0VZU0VSVklMTEVfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwMDQ0X0dFWVNFUlZJTExFX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9HRVlTRVJWSUxMRV9TVEFUICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfR0VZU0VSVklMTEVfU1RBVF9BSyh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwMDQ0X0dFWVNFUlZJTExFX1NUQVRfQUsoeCkgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9HRVlTRVJWSUxMRV9TVEFUX0FLICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfSERDUF9BVVRIT1JJWkVEX0lOVF9TVEFUKHgpICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMDQ0X0hEQ1BfQVVUSE9SSVpFRF9JTlRfU1RBVCh4KSAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9IRENQX0FVVEhPUklaRURfSU5UX1NUQVQgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfSERDUF9BVVRIT1JJWkVEX0lOVF9BSyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMDQ0X0hEQ1BfQVVUSE9SSVpFRF9JTlRfQUsoeCkgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9IRENQX0FVVEhPUklaRURfSU5UX0FLICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfRFZJX0kyQ19JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwMDQ0X0RWSV9JMkNfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9EVklfSTJDX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfRFZJX0kyQ19JTlRfQUsoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwMDQ0X0RWSV9JMkNfSU5UX0FLKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9EVklfSTJDX0lOVF9BSyAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfR1VJRE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwMDQ0X0dVSURNQV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9HVUlETUFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfR1VJRE1BX0FLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwMDQ0X0dVSURNQV9BSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9HVUlETUFfQUsgICAgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfVklERE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwMDQ0X1ZJRERNQV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9WSURETUFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwNDRfVklERE1BX0FLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwMDQ0X1ZJRERNQV9BSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9WSURETUFfQUsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwMDUwX0NSVENfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDUwCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19EQkxfU0NBTl9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNTBfQ1JUQ19EQkxfU0NBTl9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19EQkxfU0NBTl9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfSU5URVJMQUNFX0VOKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDUwX0NSVENfSU5URVJMQUNFX0VOKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDUwX0NSVENfSU5URVJMQUNFX0VOICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDA1MF9DUlRDX0NfU1lOQ19FTih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0NfU1lOQ19FTih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1MF9DUlRDX0NfU1lOQ19FTiAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwNTBfQ1JUQ19QSVhfV0lEVEgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwNTBfQ1JUQ19QSVhfV0lEVEgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19QSVhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjBGRgorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfSUNPTl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0lDT05fRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19JQ09OX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfQ1VSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0NVUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19DVVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfVlNUQVRfTU9ERSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX1ZTVEFUX01PREUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDMpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19WU1RBVF9NT0RFICAgICAgICAgICAgICAgICAgICAgMHhGRkY5RkZGRgorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfQ1VSX01PREUoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0NVUl9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19DVVJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgMHhGRjhGRkZGRgorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfRVhUX0RJU1BfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0VYVF9ESVNQX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19FWFRfRElTUF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDUwX0NSVENfRElTUF9SRVFfRU5fQih4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDA1MF9DUlRDX0RJU1BfUkVRX0VOX0IoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTBfQ1JUQ19ESVNQX1JFUV9FTl9CICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSBSXzAwMDA1NF9DUlRDX0VYVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA1NAorI2RlZmluZSAgIFNfMDAwMDU0X0NSVENfVkdBX1hPVkVSU0NBTih4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVENfVkdBX1hPVkVSU0NBTih4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVENfVkdBX1hPVkVSU0NBTiAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA1NF9WR0FfQkxJTktfUkFURSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDA1NF9WR0FfQkxJTktfUkFURSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDA1NF9WR0FfQkxJTktfUkFURSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY5CisjZGVmaW5lICAgU18wMDAwNTRfVkdBX0FUSV9MSU5FQVIoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwNTRfVkdBX0FUSV9MSU5FQVIoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTRfVkdBX0FUSV9MSU5FQVIgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDU0X1ZHQV8xMjhLQVBfUEFHSU5HKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDU0X1ZHQV8xMjhLQVBfUEFHSU5HKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X1ZHQV8xMjhLQVBfUEFHSU5HICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDA1NF9WR0FfVEVYVF8xMzIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDA1NF9WR0FfVEVYVF8xMzIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9WR0FfVEVYVF8xMzIgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkRGCisjZGVmaW5lICAgU18wMDAwNTRfVkdBX1hDUlRfQ05UX0VOKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDYpCisjZGVmaW5lICAgR18wMDAwNTRfVkdBX1hDUlRfQ05UX0VOKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNTRfVkdBX1hDUlRfQ05UX0VOICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZCRgorI2RlZmluZSAgIFNfMDAwMDU0X0NSVENfSFNZTkNfRElTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVENfSFNZTkNfRElTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDU0X0NSVENfSFNZTkNfRElTICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDA1NF9DUlRDX1ZTWU5DX0RJUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDA1NF9DUlRDX1ZTWU5DX0RJUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9DUlRDX1ZTWU5DX0RJUyAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAwNTRfQ1JUQ19ESVNQTEFZX0RJUyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVENfRElTUExBWV9ESVMoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9DUlRDX0RJU1BMQVlfRElTICAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAwNTRfQ1JUQ19TWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVENfU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9DUlRDX1NZTkNfVFJJU1RBVEUgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDAwNTRfQ1JUQ19IU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVENfSFNZTkNfVFJJU1RBVEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9DUlRDX0hTWU5DX1RSSVNUQVRFICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDAwNTRfQ1JUQ19WU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVENfVlNZTkNfVFJJU1RBVEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9DUlRDX1ZTWU5DX1RSSVNUQVRFICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDAwNTRfQ1JUX09OKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMDU0X0NSVF9PTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9DUlRfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDAwNTRfVkdBX0NVUl9CX1RFU1QoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDU0X1ZHQV9DVVJfQl9URVNUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9WR0FfQ1VSX0JfVEVTVCAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwNTRfVkdBX1BBQ0tfRElTKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDU0X1ZHQV9QQUNLX0RJUyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9WR0FfUEFDS19ESVMgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwNTRfVkdBX01FTV9QU19FTih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDU0X1ZHQV9NRU1fUFNfRU4oeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA1NF9WR0FfTUVNX1BTX0VOICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwNTRfVkNSVENfSURYX01BU1RFUih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDA1NF9WQ1JUQ19JRFhfTUFTVEVSKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwMDU0X1ZDUlRDX0lEWF9NQVNURVIgICAgICAgICAgICAgICAgICAgIDB4ODBGRkZGRkYKKyNkZWZpbmUgUl8wMDAyM0NfRElTUExBWV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgMHgwMDAyM0MKKyNkZWZpbmUgICBTXzAwMDIzQ19ESVNQTEFZX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAyM0NfRElTUExBWV9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAyNjBfQ1VSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyNjAKKyNkZWZpbmUgICBTXzAwMDI2MF9DVVJfT0ZGU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDI2MF9DVVJfT0ZGU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDI2MF9DVVJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweEY4MDAwMDAwCisjZGVmaW5lICAgU18wMDAyNjBfQ1VSX0xPQ0soeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwMjYwX0NVUl9MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDI2MF9DVVJfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwMzNDX0NSVEMyX0RJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgIDB4MDAwMzNDCisjZGVmaW5lICAgU18wMDAzM0NfQ1JUQzJfRElTUExBWV9CQVNFX0FERFIoeCkgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMzNDX0NSVEMyX0RJU1BMQVlfQkFTRV9BRERSKHgpICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDMzQ19DUlRDMl9ESVNQTEFZX0JBU0VfQUREUiAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMzYwX0NVUjJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzYwCisjZGVmaW5lICAgU18wMDAzNjBfQ1VSMl9PRkZTRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAzNjBfQ1VSMl9PRkZTRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAzNjBfQ1VSMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGODAwMDAwMAorI2RlZmluZSAgIFNfMDAwMzYwX0NVUjJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDM2MF9DVVIyX0xPQ0soeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzNjBfQ1VSMl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMDNDMF9HRU5NT19XVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNDMAorI2RlZmluZSAgIFNfMDAwM0MwX0dFTk1PX01PTk9fQUREUkVTU19CKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwM0MwX0dFTk1PX01PTk9fQUREUkVTU19CKHgpICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MwX0dFTk1PX01PTk9fQUREUkVTU19CICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDNDMF9WR0FfUkFNX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDNDMF9WR0FfUkFNX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMF9WR0FfUkFNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAzQzBfVkdBX0NLU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgR18wMDAzQzBfVkdBX0NLU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAzQzBfVkdBX0NLU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMworI2RlZmluZSAgIFNfMDAwM0MwX09ERF9FVkVOX01EX1BHU0VMKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwM0MwX09ERF9FVkVOX01EX1BHU0VMKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MwX09ERF9FVkVOX01EX1BHU0VMICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGREYKKyNkZWZpbmUgICBTXzAwMDNDMF9WR0FfSFNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDNDMF9WR0FfSFNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMF9WR0FfSFNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAzQzBfVkdBX1ZTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAzQzBfVkdBX1ZTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzBfVkdBX1ZTWU5DX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSBSXzAwMDNGOF9DUlRDMl9HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDNGOAorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0RCTF9TQ0FOX0VOKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwM0Y4X0NSVEMyX0RCTF9TQ0FOX0VOKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0RCTF9TQ0FOX0VOICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9JTlRFUkxBQ0VfRU4oeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9JTlRFUkxBQ0VfRU4oeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNGOF9DUlRDMl9JTlRFUkxBQ0VfRU4gICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAzRjhfQ1JUQzJfU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUQzJfU1lOQ19UUklTVEFURSAgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0hTWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwM0Y4X0NSVEMyX0hTWU5DX1RSSVNUQVRFKHgpICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0hTWU5DX1RSSVNUQVRFICAgICAgICAgICAgICAgIDB4RkZGRkZGREYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9WU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDNGOF9DUlRDMl9WU1lOQ19UUklTVEFURSh4KSAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNGOF9DUlRDMl9WU1lOQ19UUklTVEFURSAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAzRjhfQ1JUMl9PTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUMl9PTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzRjhfQ1JUMl9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX1BJWF9XSURUSCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwM0Y4X0NSVEMyX1BJWF9XSURUSCh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX1BJWF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9JQ09OX0VOKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfSUNPTl9FTih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0lDT05fRU4gICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9DVVJfRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfQ1VSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0NVUl9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9DVVJfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjApCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfQ1VSX01PREUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHg3KQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0NVUl9NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4RkY4RkZGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9ESVNQTEFZX0RJUyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfRElTUExBWV9ESVMoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0RJU1BMQVlfRElTICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9ESVNQX1JFUV9FTl9CKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfRElTUF9SRVFfRU5fQih4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0RJU1BfUkVRX0VOX0IgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9DX1NZTkNfRU4oeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfQ19TWU5DX0VOKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0NfU1lOQ19FTiAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9IU1lOQ19ESVMoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfSFNZTkNfRElTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX0hTWU5DX0RJUyAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDNGOF9DUlRDMl9WU1lOQ19ESVMoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfVlNZTkNfRElTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0Y4X0NSVEMyX1ZTWU5DX0RJUyAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgUl8wMDA0MjBfT1YwX1NDQUxFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MjAKKyNkZWZpbmUgICBTXzAwMDQyMF9PVjBfTk9fUkVBRF9CRUhJTkRfU0NBTih4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfTk9fUkVBRF9CRUhJTkRfU0NBTih4KSAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfTk9fUkVBRF9CRUhJTkRfU0NBTiAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA0MjBfT1YwX0hPUlpfUElDS19ORUFSRVNUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA0MjBfT1YwX0hPUlpfUElDS19ORUFSRVNUKHgpICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0hPUlpfUElDS19ORUFSRVNUICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9WRVJUX1BJQ0tfTkVBUkVTVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9WRVJUX1BJQ0tfTkVBUkVTVCh4KSAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwNDIwX09WMF9WRVJUX1BJQ0tfTkVBUkVTVCAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDQyMF9PVjBfU0lHTkVEX1VWKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfU0lHTkVEX1VWKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDQyMF9PVjBfU0lHTkVEX1VWICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDA0MjBfT1YwX0dBTU1BX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDUpCisjZGVmaW5lICAgR18wMDA0MjBfT1YwX0dBTU1BX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDcpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0dBTU1BX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYxRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9TVVJGQUNFX0ZPUk1BVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9TVVJGQUNFX0ZPUk1BVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwNDIwX09WMF9TVVJGQUNFX0ZPUk1BVCAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAwMDQyMF9PVjBfQURBUFRJVkVfREVJTlQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA0MjBfT1YwX0FEQVBUSVZFX0RFSU5UKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwNDIwX09WMF9BREFQVElWRV9ERUlOVCAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDQyMF9PVjBfQ1JUQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA0MjBfT1YwX0NSVENfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwNDIwX09WMF9DUlRDX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDQyMF9PVjBfQlVSU1RfUEVSX1BMQU5FKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwNDIwX09WMF9CVVJTVF9QRVJfUExBTkUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4N0YpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0JVUlNUX1BFUl9QTEFORSAgICAgICAgICAgICAgICAgMHhGRjgwRkZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9ET1VCTEVfQlVGRkVSX1JFR1MoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfRE9VQkxFX0JVRkZFUl9SRUdTKHgpICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0RPVUJMRV9CVUZGRVJfUkVHUyAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9CQU5EV0lEVEgoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfQkFORFdJRFRIKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0JBTkRXSURUSCAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9MSU5fVFJBTlNfQllQQVNTKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfTElOX1RSQU5TX0JZUEFTUyh4KSAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0xJTl9UUkFOU19CWVBBU1MgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9JTlRfRU1VKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfSU5UX0VNVSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX0lOVF9FTVUgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9PVkVSTEFZX0VOKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfT1ZFUkxBWV9FTih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX09WRVJMQVlfRU4gICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwNDIwX09WMF9TT0ZUX1JFU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDQyMF9PVjBfU09GVF9SRVNFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA0MjBfT1YwX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMDcwQ19DUF9SQl9SUFRSX0FERFIgICAgICAgICAgICAgICAgICAgICAweDAwMDcwQworI2RlZmluZSAgIFNfMDAwNzBDX1JCX1JQVFJfU1dBUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwNzBDX1JCX1JQVFJfU1dBUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgzKQorI2RlZmluZSAgIENfMDAwNzBDX1JCX1JQVFJfU1dBUCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkMKKyNkZWZpbmUgICBTXzAwMDcwQ19SQl9SUFRSX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M0ZGRkZGRkYpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3MENfUkJfUlBUUl9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDNGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwNzBDX1JCX1JQVFJfQUREUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUl8wMDA3NDBfQ1BfQ1NRX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3NDAKKyNkZWZpbmUgICBTXzAwMDc0MF9DU1FfQ05UX1BSSU1BUlkoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDApCisjZGVmaW5lICAgR18wMDA3NDBfQ1NRX0NOVF9QUklNQVJZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwNzQwX0NTUV9DTlRfUFJJTUFSWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGMDAKKyNkZWZpbmUgICBTXzAwMDc0MF9DU1FfQ05UX0lORElSRUNUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDgpCisjZGVmaW5lICAgR18wMDA3NDBfQ1NRX0NOVF9JTkRJUkVDVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwNzQwX0NTUV9DTlRfSU5ESVJFQ1QgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwRkYKKyNkZWZpbmUgICBTXzAwMDc0MF9DU1FfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3NDBfQ1NRX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwNzQwX0NTUV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKyNkZWZpbmUgUl8wMDA3NzBfU0NSQVRDSF9VTVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3NzAKKyNkZWZpbmUgICBTXzAwMDc3MF9TQ1JBVENIX1VNU0soeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M0YpIDw8IDApCisjZGVmaW5lICAgR18wMDA3NzBfU0NSQVRDSF9VTVNLKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDNGKQorI2RlZmluZSAgIENfMDAwNzcwX1NDUkFUQ0hfVU1TSyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQzAKKyNkZWZpbmUgICBTXzAwMDc3MF9TQ1JBVENIX1NXQVAoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMTYpCisjZGVmaW5lICAgR18wMDA3NzBfU0NSQVRDSF9TV0FQKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgzKQorI2RlZmluZSAgIENfMDAwNzcwX1NDUkFUQ0hfU1dBUCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQ0ZGRkYKKyNkZWZpbmUgUl8wMDA3NzRfU0NSQVRDSF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3NzQKKyNkZWZpbmUgICBTXzAwMDc3NF9TQ1JBVENIX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRkZGRikgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDc3NF9TQ1JBVENIX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4N0ZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDc3NF9TQ1JBVENIX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9TRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfU0VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1NFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OGM3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAicmFkZW9uX2RybS5oIgorI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKworI2luY2x1ZGUgInIyMDBfcmVnX3NhZmUuaCIKKworI2luY2x1ZGUgInIxMDBfdHJhY2suaCIKKworc3RhdGljIGludCByMjAwX2dldF92dHhfc2l6ZV8wKHVpbnQzMl90IHZ0eF9mbXRfMCkKK3sKKwlpbnQgdnR4X3NpemUsIGk7CisJdnR4X3NpemUgPSAyOworCisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1owKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10XzAgJiBSMjAwX1ZUWF9XMCkKKwkJdnR4X3NpemUrKzsKKwkvKiBibGVuZCB3ZWlnaHQgKi8KKwlpZiAodnR4X2ZtdF8wICYgKDB4NyA8PCBSMjAwX1ZUWF9XRUlHSFRfQ09VTlRfU0hJRlQpKQorCQl2dHhfc2l6ZSArPSAodnR4X2ZtdF8wID4+IFIyMDBfVlRYX1dFSUdIVF9DT1VOVF9TSElGVCkgJiAweDc7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1BWX01BVFJJWF9TRUwpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX04wKQorCQl2dHhfc2l6ZSArPSAzOworCWlmICh2dHhfZm10XzAgJiBSMjAwX1ZUWF9QT0lOVF9TSVpFKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10XzAgJiBSMjAwX1ZUWF9ESVNDUkVURV9GT0cpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1NISU5JTkVTU18wKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10XzAgJiBSMjAwX1ZUWF9TSElOSU5FU1NfMSkKKwkJdnR4X3NpemUrKzsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWludCBjb2xvcl9zaXplID0gKHZ0eF9mbXRfMCA+PiAoMTEgKyAyKmkpKSAmIDB4MzsKKwkJc3dpdGNoIChjb2xvcl9zaXplKSB7CisJCWNhc2UgMDogYnJlYWs7CisJCWNhc2UgMTogdnR4X3NpemUrKzsgYnJlYWs7CisJCWNhc2UgMjogdnR4X3NpemUgKz0gMzsgYnJlYWs7CisJCWNhc2UgMzogdnR4X3NpemUgKz0gNDsgYnJlYWs7CisJCX0KKwl9CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1hZMSkKKwkJdnR4X3NpemUgKz0gMjsKKwlpZiAodnR4X2ZtdF8wICYgUjIwMF9WVFhfWjEpCisJCXZ0eF9zaXplKys7CisJaWYgKHZ0eF9mbXRfMCAmIFIyMDBfVlRYX1cxKQorCQl2dHhfc2l6ZSsrOworCWlmICh2dHhfZm10XzAgJiBSMjAwX1ZUWF9OMSkKKwkJdnR4X3NpemUgKz0gMzsKKwlyZXR1cm4gdnR4X3NpemU7Cit9CisKK3N0YXRpYyBpbnQgcjIwMF9nZXRfdnR4X3NpemVfMSh1aW50MzJfdCB2dHhfZm10XzEpCit7CisJaW50IHZ0eF9zaXplLCBpLCB0ZXhfc2l6ZTsKKwl2dHhfc2l6ZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQl0ZXhfc2l6ZSA9ICh2dHhfZm10XzEgPj4gKGkgKiAzKSkgJiAweDc7CisJCWlmICh0ZXhfc2l6ZSA+IDQpCisJCQljb250aW51ZTsKKwkJdnR4X3NpemUgKz0gdGV4X3NpemU7CisJfQorCXJldHVybiB2dHhfc2l6ZTsKK30KKworaW50IHIyMDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJICAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCSAgICAgICB1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKKwlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOworCXVpbnQzMl90IHRtcDsKKwlpbnQgcjsKKwlpbnQgaTsKKwlpbnQgZmFjZTsKKwl1MzIgdGlsZV9mbGFncyA9IDA7CisKKwlpYiA9IHAtPmliLT5wdHI7CisJaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKKwkJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHApOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWJyZWFrOworCQkvKiBGSVhNRTogb25seSBhbGxvdyBQQUNLRVQzIGJsaXQ/IGVhc2llciB0byBjaGVjayBmb3Igb3V0IG9mCisJCSAqIHJhbmdlIGFjY2VzcyAqLworCWNhc2UgUkFERU9OX0RTVF9QSVRDSF9PRkZTRVQ6CisJY2FzZSBSQURFT05fU1JDX1BJVENIX09GRlNFVDoKKwkJciA9IHIxMDBfcmVsb2NfcGl0Y2hfb2Zmc2V0KHAsIHBrdCwgaWR4LCByZWcpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX0RFUFRIT0ZGU0VUOgorCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQ6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzA6CisJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzE6CisJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzI6CisJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzM6CisJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzQ6CisJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzU6CisJCWkgPSAocmVnIC0gUjIwMF9QUF9UWE9GRlNFVF8wKSAvIDI0OworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQlicmVhazsKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzA6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl8wOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfMDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzA6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV8wOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMToKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzE6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM18xOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfMToKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzE6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8yOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfMjoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzI6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF8yOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfMjoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzM6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl8zOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfMzoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzM6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV8zOgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfNDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzQ6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM180OgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfNDoKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzQ6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV81OgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfNToKKwljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzU6CisJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF81OgorCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfNToKKwkJaSA9IChyZWcgLSBSMjAwX1BQX1RYT0ZGU0VUXzApIC8gMjQ7CisJCWZhY2UgPSAocmVnIC0gKChpICogMjQpICsgUjIwMF9QUF9UWE9GRlNFVF8wKSkgLyA0OworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SRV9XSURUSF9IRUlHSFQ6CisJCXRyYWNrLT5tYXh5ID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweDdGRik7CisJCWJyZWFrOworCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JQSVRDSDoKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCisJCQkJICBpZHgsIHJlZyk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCisJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01BQ1JPKQorCQkJdGlsZV9mbGFncyB8PSBSQURFT05fQ09MT1JfVElMRV9FTkFCTEU7CisJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQorCQkJdGlsZV9mbGFncyB8PSBSQURFT05fQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKKworCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIH4oMHg3IDw8IDE2KTsKKwkJdG1wIHw9IHRpbGVfZmxhZ3M7CisJCWliW2lkeF0gPSB0bXA7CisKKwkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQlicmVhazsKKwljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6CisJCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9DTlRMOgorCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgeworCQljYXNlIDc6CisJCWNhc2UgODoKKwkJY2FzZSA5OgorCQljYXNlIDExOgorCQljYXNlIDEyOgorCQkJdHJhY2stPmNiWzBdLmNwcCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQljYXNlIDQ6CisJCWNhc2UgMTU6CisJCQl0cmFjay0+Y2JbMF0uY3BwID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQl0cmFjay0+Y2JbMF0uY3BwID0gNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG9yIGJ1ZmZlciBmb3JtYXQgKCVkKSAhXG4iLAorCQkJCSAgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSkgeworCQkJRFJNX0VSUk9SKCJObyBzdXBwb3J0IGZvciBkZXB0aCB4eSBvZmZzZXQgaW4ga21zXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1pfRU5BQkxFKTsKKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9aU1RFTkNJTENOVEw6CisJCXN3aXRjaCAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweGYpIHsKKwkJY2FzZSAwOgorCQkJdHJhY2stPnpiLmNwcCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQljYXNlIDk6CisJCWNhc2UgMTE6CisJCQl0cmFjay0+emIuY3BwID0gNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSQURFT05fUkIzRF9aUEFTU19BRERSOgorCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlicmVhazsKKwljYXNlIFJBREVPTl9QUF9DTlRMOgorCQl7CisJCQl1aW50MzJfdCB0ZW1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gNDsKKwkJCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX3RleHR1cmU7IGkrKykKKwkJCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9ICEhKHRlbXAgJiAoMSA8PCBpKSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSQURFT05fU0VfVkZfQ05UTDoKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCWJyZWFrOworCWNhc2UgMHgyMTBjOgorCQkvKiBWQVBfVkZfTUFYX1ZUWF9JTkRYICovCisJCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMEZGRkZGRlVMOworCQlicmVhazsKKwljYXNlIFIyMDBfU0VfVlRYX0ZNVF8wOgorCQl0cmFjay0+dnR4X3NpemUgPSByMjAwX2dldF92dHhfc2l6ZV8wKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJYnJlYWs7CisJY2FzZSBSMjAwX1NFX1ZUWF9GTVRfMToKKwkJdHJhY2stPnZ0eF9zaXplICs9IHIyMDBfZ2V0X3Z0eF9zaXplXzEoaWJfY2h1bmstPmtkYXRhW2lkeF0pOworCQlicmVhazsKKwljYXNlIFIyMDBfUFBfVFhTSVpFXzA6CisJY2FzZSBSMjAwX1BQX1RYU0laRV8xOgorCWNhc2UgUjIwMF9QUF9UWFNJWkVfMjoKKwljYXNlIFIyMDBfUFBfVFhTSVpFXzM6CisJY2FzZSBSMjAwX1BQX1RYU0laRV80OgorCWNhc2UgUjIwMF9QUF9UWFNJWkVfNToKKwkJaSA9IChyZWcgLSBSMjAwX1BQX1RYU0laRV8wKSAvIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVEVYX1ZTSVpFX01BU0spID4+IFJBREVPTl9URVhfVlNJWkVfU0hJRlQpICsgMTsKKwkJYnJlYWs7CisJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMDoKKwljYXNlIFIyMDBfUFBfVFhQSVRDSF8xOgorCWNhc2UgUjIwMF9QUF9UWFBJVENIXzI6CisJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMzoKKwljYXNlIFIyMDBfUFBfVFhQSVRDSF80OgorCWNhc2UgUjIwMF9QUF9UWFBJVENIXzU6CisJCWkgPSAocmVnIC0gUjIwMF9QUF9UWFBJVENIXzApIC8gMzI7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgMzI7CisJCWJyZWFrOworCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8wOgorCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8xOgorCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8yOgorCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8zOgorCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl80OgorCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl81OgorCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhGSUxURVJfMCkgLyAzMjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLm51bV9sZXZlbHMgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUjIwMF9NQVhfTUlQX0xFVkVMX01BU0spCisJCQkJCQkgPj4gUjIwMF9NQVhfTUlQX0xFVkVMX1NISUZUKTsKKwkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA2KQorCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfdyA9IGZhbHNlOworCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjcpICYgMHg3OworCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCisJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF8wOgorCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF8xOgorCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF8yOgorCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF8zOgorCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF80OgorCWNhc2UgUjIwMF9QUF9UWE1VTFRJX0NUTF81OgorCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhNVUxUSV9DVExfMCkgLyAzMjsKKwkJYnJlYWs7CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUX1hfMDoKKwljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF8xOgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzI6CisJY2FzZSBSMjAwX1BQX1RYRk9STUFUX1hfMzoKKwljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF80OgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzU6CisJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF9YXzApIC8gMzI7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDc7CisJCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweDM7CisJCS8qIDJELCAzRCwgQ1VCRSAqLworCQlzd2l0Y2ggKHRtcCkgeworCQljYXNlIDA6CisJCWNhc2UgNToKKwkJY2FzZSA2OgorCQljYXNlIDc6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS50ZXhfY29vcmRfdHlwZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gMjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF8wOgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF8xOgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF8yOgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF8zOgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF80OgorCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF81OgorCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhGT1JNQVRfMCkgLyAzMjsKKwkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUjIwMF9UWEZPUk1BVF9OT05fUE9XRVIyKSB7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gMTsKKwkJfSBlbHNlIHsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAwOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9UWEZPUk1BVF9XSURUSF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfV0lEVEhfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gMSA8PCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX0hFSUdIVF9NQVNLKTsKKwkJfQorCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0k4OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfUkdCMzMyOgorCQljYXNlIFIyMDBfVFhGT1JNQVRfWTg6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMTsKKwkJCWJyZWFrOworCQljYXNlIFIyMDBfVFhGT1JNQVRfRFhUMToKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0FJODg6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9BUkdCMTU1NToKKwkJY2FzZSBSMjAwX1RYRk9STUFUX1JHQjU2NToKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0FSR0I0NDQ0OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfVllVWTQyMjoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX1lWWVU0MjI6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9MRFZEVTY1NToKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0RWRFU4ODoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0FWWVU0NDQ0OgorCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0FSR0I4ODg4OgorCQljYXNlIFIyMDBfVFhGT1JNQVRfUkdCQTg4ODg6CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9BQkdSODg4ODoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0JHUjExMTExMDoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0xEVkRVODg4ODoKKwkJY2FzZSBSMjAwX1RYRk9STUFUX0RYVDIzOgorCQljYXNlIFIyMDBfVFhGT1JNQVRfRFhUNDU6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gNDsKKwkJCWJyZWFrOworCQl9CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHhmKTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjApICYgMHhmKTsKKwkJYnJlYWs7CisJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzA6CisJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzE6CisJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzI6CisJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzM6CisJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzQ6CisJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzU6CisJCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQlpID0gKHJlZyAtIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMCkgLyAzMjsKKwkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgeworCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS5oZWlnaHQgPSAxIDw8ICgodG1wID4+ICgoZmFjZSAqIDgpICsgNCkpICYgMHhmKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCisJCSAgICAgICByZWcsIGlkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibSA9IHIyMDBfcmVnX3NhZmVfYm07CisJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjIwMF9yZWdfc2FmZV9ibSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IDA1MWJjYTYuLmJiMTUxZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC0zMSw3ICszMSwxMCBAQAogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCi0jaW5jbHVkZSAicmFkZW9uX3NoYXJlLmgiCisjaW5jbHVkZSAicjEwMF90cmFjay5oIgorI2luY2x1ZGUgInIzMDBkLmgiCisKKyNpbmNsdWRlICJyMzAwX3JlZ19zYWZlLmgiCiAKIC8qIHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCBkZXBlbmRzIG9uIDogKi8KIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMzksNyArNDIsNiBAQAogaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwogaW50IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9tY19zZXR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTQ3LDE0ICs0OSwxMCBAQAogCQkJIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCQkgdW5zaWduZWQgaWR4KTsKIGludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7Ci1pbnQgcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYyk7CiBpbnQgcjEwMF9jc19wYXJzZV9wYWNrZXQwKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJICBjb25zdCB1bnNpZ25lZCAqYXV0aCwgdW5zaWduZWQgbiwKIAkJCSAgcmFkZW9uX3BhY2tldDBfY2hlY2tfdCBjaGVjayk7Ci12b2lkIHIxMDBfY3NfZHVtcF9wYWNrZXQoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCi0JCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCk7CiBpbnQgcjEwMF9jc190cmFja19jaGVja19wa3QzX2luZHhfYnVmZmVyKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCQkJIHN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKTsKQEAgLTg3LDI2ICs4NSw1NyBAQAogCW1iKCk7CiB9CiAKK2ludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKQoreworCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucHRyOworCisJaWYgKGkgPCAwIHx8IGkgPiByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWFkZHIgPSAobG93ZXJfMzJfYml0cyhhZGRyKSA+PiA4KSB8CisJICAgICAgICgodXBwZXJfMzJfYml0cyhhZGRyKSAmIDB4ZmYpIDw8IDI0KSB8CisJICAgICAgIDB4YzsKKwkvKiBvbiB4ODYgd2Ugd2FudCB0aGlzIHRvIGJlIENQVSBlbmRpYW4sIG9uIHBvd2VycGMKKwkgKiBvbiBwb3dlcnBjIHdpdGhvdXQgSFcgc3dhcHBlcnMsIGl0J2xsIGdldCBzd2FwcGVkIG9uIHdheQorCSAqIGludG8gVlJBTSAtIHNvIG5vIG5lZWQgZm9yIGNwdV90b19sZTMyIG9uIFZSQU0gdGFibGVzICovCisJd3JpdGVsKGFkZHIsICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogNCkpOworCXJldHVybiAwOworfQorCitpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopIHsKKwkJV0FSTigxLCAiUlYzNzAgUENJRSBHQVJUIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIEluaXRpYWxpemUgY29tbW9uIGdhcnQgc3RydWN0dXJlICovCisJciA9IHJhZGVvbl9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQocmRldik7CisJaWYgKHIpCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUENJRSBnYXJ0ICFcbiIpOworCXJkZXYtPmdhcnQudGFibGVfc2l6ZSA9IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyAqIDQ7CisJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaDsKKwlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKKwlyZXR1cm4gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9hbGxvYyhyZGV2KTsKK30KKwogaW50IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdGFibGVfYWRkcjsKIAl1aW50MzJfdCB0bXA7CiAJaW50IHI7CiAKLQkvKiBJbml0aWFsaXplIGNvbW1vbiBnYXJ0IHN0cnVjdHVyZSAqLwotCXIgPSByYWRlb25fZ2FydF9pbml0KHJkZXYpOwotCWlmIChyKSB7CisJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJObyBWUkFNIG9iamVjdCBmb3IgUENJRSBHQVJULlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyID0gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4ocmRldik7CisJaWYgKHIpCiAJCXJldHVybiByOwotCX0KLQlyID0gcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUENJRSBnYXJ0ICFcbiIpOwotCX0KLQlyZGV2LT5nYXJ0LnRhYmxlX3NpemUgPSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA0OwotCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KIAkvKiBkaXNjYXJkIG1lbW9yeSByZXF1ZXN0IG91dHNpZGUgb2YgY29uZmlndXJlZCByYW5nZSAqLwogCXRtcCA9IFJBREVPTl9QQ0lFX1RYX0dBUlRfVU5NQVBQRURfQUNDRVNTX0RJU0NBUkQ7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9DTlRMLCB0bXApOwpAQCAtMTI4LDcgKzE1Nyw3IEBACiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9DTlRMLCB0bXApOwogCXJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gocmRldik7CiAJRFJNX0lORk8oIlBDSUUgR0FSVCBvZiAldU0gZW5hYmxlZCAodGFibGUgYXQgMHglMDhYKS5cbiIsCi0JCSByZGV2LT5tYy5ndHRfc2l6ZSA+PiAyMCwgdGFibGVfYWRkcik7CisJCSAodW5zaWduZWQpKHJkZXYtPm1jLmd0dF9zaXplID4+IDIwKSwgdGFibGVfYWRkcik7CiAJcmRldi0+Z2FydC5yZWFkeSA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDYsNDUgKzE3NSwxMyBAQAogCX0KIH0KIAotaW50IHJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCit2b2lkIHJ2MzcwX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucHRyOwotCi0JaWYgKGkgPCAwIHx8IGkgPiByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWFkZHIgPSAobG93ZXJfMzJfYml0cyhhZGRyKSA+PiA4KSB8Ci0JICAgICAgICgodXBwZXJfMzJfYml0cyhhZGRyKSAmIDB4ZmYpIDw8IDI0KSB8Ci0JICAgICAgIDB4YzsKLQkvKiBvbiB4ODYgd2Ugd2FudCB0aGlzIHRvIGJlIENQVSBlbmRpYW4sIG9uIHBvd2VycGMKLQkgKiBvbiBwb3dlcnBjIHdpdGhvdXQgSFcgc3dhcHBlcnMsIGl0J2xsIGdldCBzd2FwcGVkIG9uIHdheQotCSAqIGludG8gVlJBTSAtIHNvIG5vIG5lZWQgZm9yIGNwdV90b19sZTMyIG9uIFZSQU0gdGFibGVzICovCi0Jd3JpdGVsKGFkZHIsICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogNCkpOwotCXJldHVybiAwOworCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKKwlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCi1pbnQgcjMwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLSNpZiBfX09TX0hBU19BR1AKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCWlmIChyZGV2LT5mYW1pbHkgPiBDSElQX1JWMzUwKSB7Ci0JCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQkJfSBlbHNlIHsKLQkJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewotCQlyZGV2LT5hc2ljLT5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGU7Ci0JCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7Ci0JCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOwotCQlyZXR1cm4gcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKLQl9Ci0JcmV0dXJuIHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOwotfQotCi0KIC8qCiAgKiBNQwogICovCkBAIC0yMzIsMTQgKzIyOSw2IEBACiAKIHZvaWQgcjMwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7Ci0JCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCQlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7Ci0JfSBlbHNlIHsKLQkJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOwotCQlyYWRlb25fZ2FydF90YWJsZV9yYW1fZnJlZShyZGV2KTsKLQl9Ci0JcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAogCkBAIC03MDQsMzA3ICs2OTMsMTMgQEAKIC8qCiAgKiBDUyBmdW5jdGlvbnMKICAqLwotc3RydWN0IHIzMDBfY3NfdHJhY2tfY2IgewotCXN0cnVjdCByYWRlb25fb2JqZWN0CSpyb2JqOwotCXVuc2lnbmVkCQlwaXRjaDsKLQl1bnNpZ25lZAkJY3BwOwotCXVuc2lnbmVkCQlvZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgcjMwMF9jc190cmFja19hcnJheSB7Ci0Jc3RydWN0IHJhZGVvbl9vYmplY3QJKnJvYmo7Ci0JdW5zaWduZWQJCWVzaXplOwotfTsKLQotc3RydWN0IHIzMDBfY3NfdHJhY2tfdGV4dHVyZSB7Ci0Jc3RydWN0IHJhZGVvbl9vYmplY3QJKnJvYmo7Ci0JdW5zaWduZWQJCXBpdGNoOwotCXVuc2lnbmVkCQl3aWR0aDsKLQl1bnNpZ25lZAkJaGVpZ2h0OwotCXVuc2lnbmVkCQludW1fbGV2ZWxzOwotCXVuc2lnbmVkCQljcHA7Ci0JdW5zaWduZWQJCXRleF9jb29yZF90eXBlOwotCXVuc2lnbmVkCQl0eGRlcHRoOwotCXVuc2lnbmVkCQl3aWR0aF8xMTsKLQl1bnNpZ25lZAkJaGVpZ2h0XzExOwotCWJvb2wJCQl1c2VfcGl0Y2g7Ci0JYm9vbAkJCWVuYWJsZWQ7Ci0JYm9vbAkJCXJvdW5kdXBfdzsKLQlib29sCQkJcm91bmR1cF9oOwotfTsKLQotc3RydWN0IHIzMDBfY3NfdHJhY2sgewotCXVuc2lnbmVkCQkJbnVtX2NiOwotCXVuc2lnbmVkCQkJbWF4eTsKLQl1bnNpZ25lZAkJCXZ0eF9zaXplOwotCXVuc2lnbmVkCQkJdmFwX3ZmX2NudGw7Ci0JdW5zaWduZWQJCQlpbW1kX2R3b3JkczsKLQl1bnNpZ25lZAkJCW51bV9hcnJheXM7Ci0JdW5zaWduZWQJCQltYXhfaW5keDsKLQlzdHJ1Y3QgcjMwMF9jc190cmFja19hcnJheQlhcnJheXNbMTFdOwotCXN0cnVjdCByMzAwX2NzX3RyYWNrX2NiIAljYls0XTsKLQlzdHJ1Y3QgcjMwMF9jc190cmFja19jYiAJemI7Ci0Jc3RydWN0IHIzMDBfY3NfdHJhY2tfdGV4dHVyZQl0ZXh0dXJlc1sxNl07Ci0JYm9vbAkJCQl6X2VuYWJsZWQ7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcjMwMF9jc190cmFja190ZXh0dXJlX3ByaW50KHN0cnVjdCByMzAwX2NzX3RyYWNrX3RleHR1cmUgKnQpCi17Ci0JRFJNX0VSUk9SKCJwaXRjaCAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+cGl0Y2gpOwotCURSTV9FUlJPUigid2lkdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPndpZHRoKTsKLQlEUk1fRVJST1IoImhlaWdodCAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5oZWlnaHQpOwotCURSTV9FUlJPUigibnVtIGxldmVscyAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPm51bV9sZXZlbHMpOwotCURSTV9FUlJPUigiZGVwdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnR4ZGVwdGgpOwotCURSTV9FUlJPUigiYnBwICAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmNwcCk7Ci0JRFJNX0VSUk9SKCJjb29yZGluYXRlIHR5cGUgICAgICAgICAgICAlZFxuIiwgdC0+dGV4X2Nvb3JkX3R5cGUpOwotCURSTV9FUlJPUigid2lkdGggcm91bmQgdG8gcG93ZXIgb2YgMiAgJWRcbiIsIHQtPnJvdW5kdXBfdyk7Ci0JRFJNX0VSUk9SKCJoZWlnaHQgcm91bmQgdG8gcG93ZXIgb2YgMiAlZFxuIiwgdC0+cm91bmR1cF9oKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcjMwMF9jc190cmFja190ZXh0dXJlX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJCQkgICAgICBzdHJ1Y3QgcjMwMF9jc190cmFjayAqdHJhY2spCi17Ci0Jc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmo7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIHUsIGksIHcsIGg7Ci0KLQlmb3IgKHUgPSAwOyB1IDwgMTY7IHUrKykgewotCQlpZiAoIXRyYWNrLT50ZXh0dXJlc1t1XS5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCXJvYmogPSB0cmFjay0+dGV4dHVyZXNbdV0ucm9iajsKLQkJaWYgKHJvYmogPT0gTlVMTCkgewotCQkJRFJNX0VSUk9SKCJObyB0ZXh0dXJlIGJvdW5kIHRvIHVuaXQgJXVcbiIsIHUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJc2l6ZSA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPD0gdHJhY2stPnRleHR1cmVzW3VdLm51bV9sZXZlbHM7IGkrKykgewotCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS51c2VfcGl0Y2gpIHsKLQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLnBpdGNoIC8gKDEgPDwgaSk7Ci0JCQl9IGVsc2UgewotCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGggLyAoMSA8PCBpKTsKLQkJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUpCi0JCQkJCXcgfD0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoXzExOwotCQkJCWlmICh0cmFjay0+dGV4dHVyZXNbdV0ucm91bmR1cF93KQotCQkJCQl3ID0gcm91bmR1cF9wb3dfb2ZfdHdvKHcpOwotCQkJfQotCQkJaCA9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHQgLyAoMSA8PCBpKTsKLQkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKLQkJCQloIHw9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHRfMTE7Ci0JCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnJvdW5kdXBfaCkKLQkJCQloID0gcm91bmR1cF9wb3dfb2ZfdHdvKGgpOwotCQkJc2l6ZSArPSB3ICogaDsKLQkJfQotCQlzaXplICo9IHRyYWNrLT50ZXh0dXJlc1t1XS5jcHA7Ci0JCXN3aXRjaCAodHJhY2stPnRleHR1cmVzW3VdLnRleF9jb29yZF90eXBlKSB7Ci0JCWNhc2UgMDoKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlzaXplICo9ICgxIDw8IHRyYWNrLT50ZXh0dXJlc1t1XS50eGRlcHRoKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlzaXplICo9IDY7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiSW52YWxpZCB0ZXh0dXJlIGNvb3JkaW5hdGUgdHlwZSAldSBmb3IgdW5pdCAiCi0JCQkJICAiJXVcbiIsIHRyYWNrLT50ZXh0dXJlc1t1XS50ZXhfY29vcmRfdHlwZSwgdSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoc2l6ZSA+IHJhZGVvbl9vYmplY3Rfc2l6ZShyb2JqKSkgewotCQkJRFJNX0VSUk9SKCJUZXh0dXJlIG9mIHVuaXQgJXUgbmVlZHMgJWx1IGJ5dGVzIGJ1dCBpcyAiCi0JCQkJICAiJWx1XG4iLCB1LCBzaXplLCByYWRlb25fb2JqZWN0X3NpemUocm9iaikpOwotCQkJcjMwMF9jc190cmFja190ZXh0dXJlX3ByaW50KCZ0cmFjay0+dGV4dHVyZXNbdV0pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCByMzAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjMwMF9jc190cmFjayAqdHJhY2spCi17Ci0JdW5zaWduZWQgaTsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgcHJpbV93YWxrOwotCXVuc2lnbmVkIG52ZXJ0czsKLQotCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2NiOyBpKyspIHsKLQkJaWYgKHRyYWNrLT5jYltpXS5yb2JqID09IE5VTEwpIHsKLQkJCURSTV9FUlJPUigiW2RybV0gTm8gYnVmZmVyIGZvciBjb2xvciBidWZmZXIgJWQgIVxuIiwgaSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzaXplID0gdHJhY2stPmNiW2ldLnBpdGNoICogdHJhY2stPmNiW2ldLmNwcCAqIHRyYWNrLT5tYXh5OwotCQlzaXplICs9IHRyYWNrLT5jYltpXS5vZmZzZXQ7Ci0JCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5jYltpXS5yb2JqKSkgewotCQkJRFJNX0VSUk9SKCJbZHJtXSBCdWZmZXIgdG9vIHNtYWxsIGZvciBjb2xvciBidWZmZXIgJWQgIgotCQkJCSAgIihuZWVkICVsdSBoYXZlICVsdSkgIVxuIiwgaSwgc2l6ZSwKLQkJCQkgIHJhZGVvbl9vYmplY3Rfc2l6ZSh0cmFjay0+Y2JbaV0ucm9iaikpOwotCQkJRFJNX0VSUk9SKCJbZHJtXSBjb2xvciBidWZmZXIgJWQgKCV1ICV1ICV1ICV1KVxuIiwKLQkJCQkgIGksIHRyYWNrLT5jYltpXS5waXRjaCwgdHJhY2stPmNiW2ldLmNwcCwKLQkJCQkgIHRyYWNrLT5jYltpXS5vZmZzZXQsIHRyYWNrLT5tYXh5KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCWlmICh0cmFjay0+el9lbmFibGVkKSB7Ci0JCWlmICh0cmFjay0+emIucm9iaiA9PSBOVUxMKSB7Ci0JCQlEUk1fRVJST1IoIltkcm1dIE5vIGJ1ZmZlciBmb3IgeiBidWZmZXIgIVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzaXplID0gdHJhY2stPnpiLnBpdGNoICogdHJhY2stPnpiLmNwcCAqIHRyYWNrLT5tYXh5OwotCQlzaXplICs9IHRyYWNrLT56Yi5vZmZzZXQ7Ci0JCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT56Yi5yb2JqKSkgewotCQkJRFJNX0VSUk9SKCJbZHJtXSBCdWZmZXIgdG9vIHNtYWxsIGZvciB6IGJ1ZmZlciAiCi0JCQkJICAiKG5lZWQgJWx1IGhhdmUgJWx1KSAhXG4iLCBzaXplLAotCQkJCSAgcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT56Yi5yb2JqKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQlwcmltX3dhbGsgPSAodHJhY2stPnZhcF92Zl9jbnRsID4+IDQpICYgMHgzOwotCW52ZXJ0cyA9ICh0cmFjay0+dmFwX3ZmX2NudGwgPj4gMTYpICYgMHhGRkZGOwotCXN3aXRjaCAocHJpbV93YWxrKSB7Ci0JY2FzZSAxOgotCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9hcnJheXM7IGkrKykgewotCQkJc2l6ZSA9IHRyYWNrLT5hcnJheXNbaV0uZXNpemUgKiB0cmFjay0+bWF4X2luZHggKiA0OwotCQkJaWYgKHRyYWNrLT5hcnJheXNbaV0ucm9iaiA9PSBOVUxMKSB7Ci0JCQkJRFJNX0VSUk9SKCIoUFcgJXUpIFZlcnRleCBhcnJheSAldSBubyBidWZmZXIgIgotCQkJCQkgICJib3VuZFxuIiwgcHJpbV93YWxrLCBpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChzaXplID4gcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5hcnJheXNbaV0ucm9iaikpIHsKLQkJCQlEUk1fRVJST1IoIihQVyAldSkgVmVydGV4IGFycmF5ICV1IG5lZWQgJWx1IGR3b3JkcyAiCi0JCQkJCSAgICJoYXZlICVsdSBkd29yZHNcbiIsIHByaW1fd2FsaywgaSwKLQkJCQkJICAgc2l6ZSA+PiAyLAotCQkJCQkgICByYWRlb25fb2JqZWN0X3NpemUodHJhY2stPmFycmF5c1tpXS5yb2JqKSA+PiAyKTsKLQkJCQlEUk1fRVJST1IoIk1heCBpbmRpY2VzICV1XG4iLCB0cmFjay0+bWF4X2luZHgpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fYXJyYXlzOyBpKyspIHsKLQkJCXNpemUgPSB0cmFjay0+YXJyYXlzW2ldLmVzaXplICogKG52ZXJ0cyAtIDEpICogNDsKLQkJCWlmICh0cmFjay0+YXJyYXlzW2ldLnJvYmogPT0gTlVMTCkgewotCQkJCURSTV9FUlJPUigiKFBXICV1KSBWZXJ0ZXggYXJyYXkgJXUgbm8gYnVmZmVyICIKLQkJCQkJICAiYm91bmRcbiIsIHByaW1fd2FsaywgaSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlpZiAoc2l6ZSA+IHJhZGVvbl9vYmplY3Rfc2l6ZSh0cmFjay0+YXJyYXlzW2ldLnJvYmopKSB7Ci0JCQkJRFJNX0VSUk9SKCIoUFcgJXUpIFZlcnRleCBhcnJheSAldSBuZWVkICVsdSBkd29yZHMgIgotCQkJCQkgICAiaGF2ZSAlbHUgZHdvcmRzXG4iLCBwcmltX3dhbGssIGksIHNpemUgPj4gMiwKLQkJCQkJICAgcmFkZW9uX29iamVjdF9zaXplKHRyYWNrLT5hcnJheXNbaV0ucm9iaikgPj4gMik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlzaXplID0gdHJhY2stPnZ0eF9zaXplICogbnZlcnRzOwotCQlpZiAoc2l6ZSAhPSB0cmFjay0+aW1tZF9kd29yZHMpIHsKLQkJCURSTV9FUlJPUigiSU1NRCBkcmF3ICV1IGR3b3JzIGJ1dCBuZWVkcyAlbHUgZHdvcmRzXG4iLAotCQkJCSAgdHJhY2stPmltbWRfZHdvcmRzLCBzaXplKTsKLQkJCURSTV9FUlJPUigiVkFQX1ZGX0NOVEwuTlVNX1ZFUlRJQ0VTICV1LCBWVFhfU0laRSAldVxuIiwKLQkJCQkgIG52ZXJ0cywgdHJhY2stPnZ0eF9zaXplKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigiW2RybV0gSW52YWxpZCBwcmltaXRpdmUgd2FsayAlZCBmb3IgVkFQX1ZGX0NOVExcbiIsCi0JCQkgIHByaW1fd2Fsayk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gcjMwMF9jc190cmFja190ZXh0dXJlX2NoZWNrKHJkZXYsIHRyYWNrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHIzMDBfY3NfdHJhY2tfY2xlYXIoc3RydWN0IHIzMDBfY3NfdHJhY2sgKnRyYWNrKQotewotCXVuc2lnbmVkIGk7Ci0KLQl0cmFjay0+bnVtX2NiID0gNDsKLQl0cmFjay0+bWF4eSA9IDQwOTY7Ci0JZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fY2I7IGkrKykgewotCQl0cmFjay0+Y2JbaV0ucm9iaiA9IE5VTEw7Ci0JCXRyYWNrLT5jYltpXS5waXRjaCA9IDgxOTI7Ci0JCXRyYWNrLT5jYltpXS5jcHAgPSAxNjsKLQkJdHJhY2stPmNiW2ldLm9mZnNldCA9IDA7Ci0JfQotCXRyYWNrLT56X2VuYWJsZWQgPSB0cnVlOwotCXRyYWNrLT56Yi5yb2JqID0gTlVMTDsKLQl0cmFjay0+emIucGl0Y2ggPSA4MTkyOwotCXRyYWNrLT56Yi5jcHAgPSA0OwotCXRyYWNrLT56Yi5vZmZzZXQgPSAwOwotCXRyYWNrLT52dHhfc2l6ZSA9IDB4N0Y7Ci0JdHJhY2stPmltbWRfZHdvcmRzID0gMHhGRkZGRkZGRlVMOwotCXRyYWNrLT5udW1fYXJyYXlzID0gMTE7Ci0JdHJhY2stPm1heF9pbmR4ID0gMHgwMEZGRkZGRlVMOwotCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2FycmF5czsgaSsrKSB7Ci0JCXRyYWNrLT5hcnJheXNbaV0ucm9iaiA9IE5VTEw7Ci0JCXRyYWNrLT5hcnJheXNbaV0uZXNpemUgPSAweDdGOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSAxNjUzNjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMTY1MzY7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxNjUzNjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoXzExID0gMSA8PCAxMTsKLQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodF8xMSA9IDEgPDwgMTE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gMTI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gMTY7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA2NDsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gMTsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSBOVUxMOwotCQkvKiBDUyBJQiBlbWlzc2lvbiBjb2RlIG1ha2VzIHN1cmUgdGV4dHVyZSB1bml0IGFyZSBkaXNhYmxlZCAqLwotCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9IGZhbHNlOwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF93ID0gdHJ1ZTsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IHRydWU7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgcjMwMF9yZWdfc2FmZV9ibVsxNTldID0gewotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHgxN0ZGMUZGRiwgMHhGRkZGRkZGQywgMHhGRkZGRkZGRiwgMHhGRjMwRkZCRiwKLQkweEZGRkZGRkY4LCAweEMzRTZGRkZGLCAweEZGRkZGNkRGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGMDNGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRUZDRSwgMHhGMDBFQkZGRiwgMHgwMDdDMDAwMCwKLQkweEYwMDAwMDc4LCAweEZGMDAwMDA5LCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGN0ZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGQzc4LCAweEZGRkZGRkZGLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGLAotCTB4MzhGRjhGNTAsIDB4RkZGODgwODIsIDB4RjAwMDAwMEMsIDB4RkFFMDA5RkYsCi0JMHgwMDAwRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDBDMTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHhGRkZGMDAwMCwgMHhGRkZGRkZGRiwgMHhGRjgwRkZGRiwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwM0ZDMDEsIDB4RkZGRkZDRjgsIDB4RkY4MDBCMTksCi19OwotCiBzdGF0aWMgaW50IHIzMDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCiB7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7Ci0Jc3RydWN0IHIzMDBfY3NfdHJhY2sgKnRyYWNrOworCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CiAJdWludDMyX3QgdG1wLCB0aWxlX2ZsYWdzID0gMDsKIAl1bnNpZ25lZCBpOwpAQCAtMTAxMiw3ICs3MDcsNyBAQAogCiAJaWIgPSBwLT5pYi0+cHRyOwogCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwotCXRyYWNrID0gKHN0cnVjdCByMzAwX2NzX3RyYWNrKilwLT50cmFjazsKKwl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCXN3aXRjaChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6CiAJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKQEAgLTEwMjYsMjggKzcyMSw5IEBACiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX0RTVF9QSVRDSF9PRkZTRVQ6CiAJY2FzZSBSQURFT05fU1JDX1BJVENIX09GRlNFVDoKLQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIGliWyVkXT0weCUwNFhcbiIsCi0JCQkJCWlkeCwgcmVnKTsKLQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJciA9IHIxMDBfcmVsb2NfcGl0Y2hfb2Zmc2V0KHAsIHBrdCwgaWR4LCByZWcpOworCQlpZiAocikKIAkJCXJldHVybiByOwotCQl9Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMDNmZmZmZjsKLQkJdG1wICs9ICgoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSA+PiAxMCk7Ci0KLQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCi0JCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9EU1RfVElMRV9NQUNSTzsKLQkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pIHsKLQkJCWlmIChyZWcgPT0gUkFERU9OX1NSQ19QSVRDSF9PRkZTRVQpIHsKLQkJCQlEUk1fRVJST1IoIkNhbm5vdCBzcmMgYmxpdCBmcm9tIG1pY3JvdGlsZWQgc3VyZmFjZVxuIik7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJdGlsZV9mbGFncyB8PSBSQURFT05fRFNUX1RJTEVfTUlDUk87Ci0JCX0KLQkJdG1wIHw9IHRpbGVfZmxhZ3M7Ci0JCWliW2lkeF0gPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNmYzAwMDAwKSB8IHRtcDsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1JCM0RfQ09MT1JPRkZTRVQwOgogCWNhc2UgUjMwMF9SQjNEX0NPTE9ST0ZGU0VUMToKQEAgLTEyNTYsNDIgKzkzMiw0MSBAQAogCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjUpICYgMHgzOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSB0bXA7CiAJCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgxRikpIHsKLQkJY2FzZSAwOgotCQljYXNlIDI6Ci0JCWNhc2UgNToKLQkJY2FzZSAxODoKLQkJY2FzZSAyMDoKLQkJY2FzZSAyMToKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9YODoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZNFg0OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1ozWTNYMjoKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSAxOwogCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJY2FzZSAzOgotCQljYXNlIDY6Ci0JCWNhc2UgNzoKLQkJY2FzZSAxMDoKLQkJY2FzZSAxMToKLQkJY2FzZSAxOToKLQkJY2FzZSAyMjoKLQkJY2FzZSAyNDoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9YMTY6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWThYODoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aNVk2WDU6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjZZNVg1OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1c0WjRZNFg0OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1cxWjVZNVg1OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0RYVDE6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRDNETUZUX0N4VjhVODoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9COEc4X0I4Rzg6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRzhSOF9HOEI4OgogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDI7CiAJCQlicmVhazsKLQkJY2FzZSA0OgotCQljYXNlIDg6Ci0JCWNhc2UgOToKLQkJY2FzZSAxMjoKLQkJY2FzZSAxMzoKLQkJY2FzZSAyMzoKLQkJY2FzZSAyNToKLQkJY2FzZSAyNzoKLQkJY2FzZSAzMDoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZMTZYMTY6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjExWTExWDEwOgorCQljYXNlIFIzMDBfVFhfRk9STUFUX1oxMFkxMVgxMToKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9XOFo4WThYODoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9XMloxMFkxMFgxMDoKKwkJY2FzZSAweDE3OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0ZMX0kzMjoKKwkJY2FzZSAweDFlOgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0RYVDM6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRFhUNToKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7Ci0JCWNhc2UgMTQ6Ci0JCWNhc2UgMjY6Ci0JCWNhc2UgMjg6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfVzE2WjE2WTE2WDE2OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0ZMX1IxNkcxNkIxNkExNjoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9GTF9JMzJBMzI6CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gODsKIAkJCWJyZWFrOwotCQljYXNlIDI5OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0ZMX1IzMkczMkIzMkEzMjoKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSAxNjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTMxOSwxMSArOTk0LDExIEBACiAJY2FzZSAweDQ0M0M6CiAJCS8qIFRYX0ZJTFRFUjBfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NDAwKSA+PiAyOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4Nzs7CisJCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDQgfHwgdG1wID09IDYpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKIAkJfQotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMykgJiAweDc7OworCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOwogCQl9CkBAIC0xNDExLDggKzEwODYsOSBAQAogCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKKwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwotCXN0cnVjdCByMzAwX2NzX3RyYWNrICp0cmFjazsKKwlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCXVuc2lnbmVkIGlkeDsKIAl1bnNpZ25lZCBpLCBjOwpAQCAtMTQyMSw3ICsxMDk3LDcgQEAKIAlpYiA9IHAtPmliLT5wdHI7CiAJaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOwotCXRyYWNrID0gKHN0cnVjdCByMzAwX2NzX3RyYWNrKilwLT50cmFjazsKKwl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCXN3aXRjaChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKIAkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK10gJiAweDFGOwpAQCAtMTQ4OCw3ICsxMTY0LDcgQEAKIAkJfQogCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKLQkJciA9IHIzMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQpAQCAtMTUwMywzNSArMTE3OSwzNSBAQAogCQl9CiAJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50OwotCQlyID0gcjMwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUY6CiAJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHggKyAxXTsKLQkJciA9IHIzMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGXzI6CiAJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlyID0gcjMwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFg6CiAJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHggKyAxXTsKLQkJciA9IHIzMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOworCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYXzI6CiAJCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlyID0gcjMwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CisJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CkBAIC0xNTQ4LDExICsxMjI0LDEyIEBACiBpbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwa3Q7Ci0Jc3RydWN0IHIzMDBfY3NfdHJhY2sgdHJhY2s7CisJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCWludCByOwogCi0JcjMwMF9jc190cmFja19jbGVhcigmdHJhY2spOwotCXAtPnRyYWNrID0gJnRyYWNrOworCXRyYWNrID0ga3phbGxvYyhzaXplb2YoKnRyYWNrKSwgR0ZQX0tFUk5FTCk7CisJcjEwMF9jc190cmFja19jbGVhcihwLT5yZGV2LCB0cmFjayk7CisJcC0+dHJhY2sgPSB0cmFjazsKIAlkbyB7CiAJCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZShwLCAmcGt0LCBwLT5pZHgpOwogCQlpZiAocikgewpAQCAtMTU4Miw5ICsxMjU5LDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHIzMDBfc2V0X3JlZ19zYWZlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtID0gcjMwMF9yZWdfc2FmZV9ibTsKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyMzAwX3JlZ19zYWZlX2JtKTsKK30KKworaW50IHIzMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMzAwX3NldF9yZWdfc2FmZShyZGV2KTsKIAlyZXR1cm4gMDsKIH0KKwordm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOworCWludCByOworCisJciA9IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIHIxMDBfbWMgZGVidWdmcyBmaWxlLlxuIik7CisJfQorCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlyMTAwX21jX3N0b3AocmRldiwgJnNhdmUpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJV1JFRzMyKFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiwKKwkJCVNfMDAwMTRDX01DX0FHUF9TVEFSVChyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMTRDX01DX0FHUF9UT1AocmRldi0+bWMuZ3R0X2VuZCA+PiAxNikpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIGxvd2VyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKTsKKwkJV1JFRzMyKFJfMDAwMTVDX0FHUF9CQVNFXzIsCisJCQl1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSAmIDB4ZmYpOworCX0gZWxzZSB7CisJCVdSRUczMihSXzAwMDE0Q19NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIDApOworCQlXUkVHMzIoUl8wMDAxNUNfQUdQX0JBU0VfMiwgMCk7CisJfQorCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlEUk1fSU5GTygiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSBiZWZvcmUgcHJvZ3JhbW1pbmcgTUMuXG4iKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyKFJfMDAwMTQ4X01DX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDE0OF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCVNfMDAwMTQ4X01DX0ZCX1RPUChyZGV2LT5tYy52cmFtX2VuZCA+PiAxNikpOworCXIxMDBfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ODZiNGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IERhdmUgQWlybGllCi0gKiAgICAgICAgICBBbGV4IERldWNoZXIKLSAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKLSAqLwotI2lmbmRlZiBSMzAwX0gKLSNkZWZpbmUgUjMwMF9ICi0KLXN0cnVjdCByMzAwX2FzaWMgewotCWNvbnN0IHVuc2lnbmVkCSpyZWdfc2FmZV9ibTsKLQl1bnNpZ25lZAlyZWdfc2FmZV9ibV9zaXplOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYTNlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SMzAwRF9IX18KKyNkZWZpbmUgX19SMzAwRF9IX18KKworI2RlZmluZSBDUF9QQUNLRVQwCQkJMHgwMDAwMDAwMAorI2RlZmluZQkJUEFDS0VUMF9CQVNFX0lOREVYX1NISUZUCTAKKyNkZWZpbmUJCVBBQ0tFVDBfQkFTRV9JTkRFWF9NQVNLCQkoMHgxZmZmZiA8PCAwKQorI2RlZmluZQkJUEFDS0VUMF9DT1VOVF9TSElGVAkJMTYKKyNkZWZpbmUJCVBBQ0tFVDBfQ09VTlRfTUFTSwkJKDB4M2ZmZiA8PCAxNikKKyNkZWZpbmUgQ1BfUEFDS0VUMQkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BfUEFDS0VUMgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX1NISUZUCQkwCisjZGVmaW5lCQlQQUNLRVQyX1BBRF9NQVNLCQkoMHgzZmZmZmZmZiA8PCAwKQorI2RlZmluZSBDUF9QQUNLRVQzCQkJMHhDMDAwMDAwMAorI2RlZmluZQkJUEFDS0VUM19JVF9PUENPREVfU0hJRlQJCTgKKyNkZWZpbmUJCVBBQ0tFVDNfSVRfT1BDT0RFX01BU0sJCSgweGZmIDw8IDgpCisjZGVmaW5lCQlQQUNLRVQzX0NPVU5UX1NISUZUCQkxNgorI2RlZmluZQkJUEFDS0VUM19DT1VOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQorLyogUEFDS0VUMyBvcCBjb2RlICovCisjZGVmaW5lCQlQQUNLRVQzX05PUAkJCTB4MTAKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGCQkweDI4CisjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU1NRAkJMHgyOQorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFgJCTB4MkEKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfTE9BRF9WQlBOVFIJCTB4MkYKKyNkZWZpbmUJCVBBQ0tFVDNfSU5EWF9CVUZGRVIJCTB4MzMKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19WQlVGXzIJCTB4MzQKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1EXzIJCTB4MzUKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTkRYXzIJCTB4MzYKKyNkZWZpbmUJCVBBQ0tFVDNfQklUQkxUX01VTFRJCQkweDlCCisKKyNkZWZpbmUgUEFDS0VUMChyZWcsIG4pCShDUF9QQUNLRVQwIHwJCQkJCVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDBfQkFTRV9JTkRFWCwgKHJlZykgPj4gMikgfAlcCisJCQkgUkVHX1NFVChQQUNLRVQwX0NPVU5ULCAobikpKQorI2RlZmluZSBQQUNLRVQyKHYpCShDUF9QQUNLRVQyIHwgUkVHX1NFVChQQUNLRVQyX1BBRCwgKHYpKSkKKyNkZWZpbmUgUEFDS0VUMyhvcCwgbikJKENQX1BBQ0tFVDMgfAkJCQkJXAorCQkJIFJFR19TRVQoUEFDS0VUM19JVF9PUENPREUsIChvcCkpIHwJCVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDNfQ09VTlQsIChuKSkpCisKKyNkZWZpbmUJUEFDS0VUX1RZUEUwCTAKKyNkZWZpbmUJUEFDS0VUX1RZUEUxCTEKKyNkZWZpbmUJUEFDS0VUX1RZUEUyCTIKKyNkZWZpbmUJUEFDS0VUX1RZUEUzCTMKKworI2RlZmluZSBDUF9QQUNLRVRfR0VUX1RZUEUoaCkgKCgoaCkgPj4gMzApICYgMykKKyNkZWZpbmUgQ1BfUEFDS0VUX0dFVF9DT1VOVChoKSAoKChoKSA+PiAxNikgJiAweDNGRkYpCisjZGVmaW5lIENQX1BBQ0tFVDBfR0VUX1JFRyhoKSAoKChoKSAmIDB4MUZGRikgPDwgMikKKyNkZWZpbmUgQ1BfUEFDS0VUMF9HRVRfT05FX1JFR19XUihoKSAoKChoKSA+PiAxNSkgJiAxKQorI2RlZmluZSBDUF9QQUNLRVQzX0dFVF9PUENPREUoaCkgKCgoaCkgPj4gOCkgJiAweEZGKQorCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDgKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE0OF9NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0OF9NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0OF9NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTRDCisjZGVmaW5lICAgU18wMDAxNENfTUNfQUdQX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNENfTUNfQUdQX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNENfTUNfQUdQX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMTRDX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDE0Q19NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNENfTUNfQUdQX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDE1Q19BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE1QworI2RlZmluZSAgIFNfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTVDX0FHUF9CQVNFX0FERFJfMiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgUl8wMDAxNzBfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNzAKKyNkZWZpbmUgICBTXzAwMDE3MF9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNzBfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMTcwX0FHUF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggOTc0MjZhNi4uNDlhMmZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTI5LDQ3ICsyOSwxMyBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgInI0MjBkLmgiCiAKLS8qIHI0MjAscjQyMyxydjQxMCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvIDoKLSAqIHI0MjAscjQyMyxydjQxMAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcjQyMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjQyMF9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLQotLyoKLSAqIE1DCi0gKi8KIGludCByNDIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IHI7CiAKLQlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Ci0JfQotCWlmIChyNDIwX2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgcGlwZXMgIVxuIik7Ci0JfQotCi0JcjQyMF9ncHVfaW5pdChyZGV2KTsKLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKLQkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JfQotCiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CiAJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwpAQCAtODcsMzMgKzUzLDkgQEAKIAlpZiAocikgewogCQlyZXR1cm4gcjsKIAl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyMTAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQlyMTAwX21jX3NldHVwKHJkZXYpOwogCXJldHVybiAwOwogfQogCi12b2lkIHI0MjBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7Ci0JcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByNDIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgdG1wOwpAQCAtMTIyLDYgKzY0LDExIEBACiAKIAkvKiBHQV9FTkhBTkNFIHdvcmthcm91bmQgVENMIGRlYWRsb2NrIGlzc3VlICovCiAJV1JFRzMyKDB4NDI3NCwgKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMykpOworCS8qIGFkZCBpZGxlIHdhaXQgYXMgcGVyIGZyZWVkZXNrdG9wLm9yZyBidWcgMjQwNDEgKi8KKwlpZiAocjEwMF9ndWlfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBHVUkgaWRsZSB3aGlsZSAiCisJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CisJfQogCS8qIGdldCBtYXggbnVtYmVyIG9mIHBpcGVzICovCiAJZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoMHg0MDJDKTsKIAludW1fcGlwZXMgPSAoKGdiX3BpcGVfc2VsZWN0ID4+IDEyKSAmIDMpICsgMTsKQEAgLTE3OSwyNSArMTI2LDIzOSBAQAogCQkgcmRldi0+bnVtX2diX3BpcGVzLCByZGV2LT5udW1fel9waXBlcyk7CiB9CiAKLXZvaWQgcjQyMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3UzMiByNDIwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcpCiB7Ci0JcjEwMF9oZHBfcmVzZXQocmRldik7Ci0JcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWlmIChyMzAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CisJdTMyIHI7CisKKwlXUkVHMzIoUl8wMDAxRjhfTUNfSU5EX0lOREVYLCBTXzAwMDFGOF9NQ19JTkRfQUREUihyZWcpKTsKKwlyID0gUlJFRzMyKFJfMDAwMUZDX01DX0lORF9EQVRBKTsKKwlyZXR1cm4gcjsKK30KKwordm9pZCByNDIwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KQoreworCVdSRUczMihSXzAwMDFGOF9NQ19JTkRfSU5ERVgsIFNfMDAwMUY4X01DX0lORF9BRERSKHJlZykgfAorCQlTXzAwMDFGOF9NQ19JTkRfV1JfRU4oMSkpOworCVdSRUczMihSXzAwMDFGQ19NQ19JTkRfREFUQSwgdik7Cit9CisKK3N0YXRpYyB2b2lkIHI0MjBfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7CisJfQorCWlmIChyNDIwX2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHJkZXYpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgcGlwZXMgIVxuIik7CiAJfQogfQogCi0KLS8qCi0gKiByNDIwLHI0MjMscnY0MTAgVlJBTSBpbmZvCi0gKi8KLXZvaWQgcjQyMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByNDIwX2Nsb2NrX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyMzAwX3ZyYW1faW5mbyhyZGV2KTsKKwl1MzIgc2Nsa19jbnRsOworCXNjbGtfY250bCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwlzY2xrX2NudGwgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjApCisJCXNjbGtfY250bCB8PSBTXzAwMDAwRF9GT1JDRV9QWCgxKSB8IFNfMDAwMDBEX0ZPUkNFX1RYKDEpOworCVdSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMLCBzY2xrX2NudGwpOwogfQogCitzdGF0aWMgaW50IHI0MjBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXIzMDBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKSB7CisJCXIgPSByMTAwX3BjaV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJcjQyMF9waXBlc19pbml0KHJkZXYpOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyMTAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJfQorCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHI0MjBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjQyMF9jbG9ja19yZXN1bWUocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9IGVsc2UgeworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjQyMF9jbG9ja19yZXN1bWUocmRldik7CisKKwlyZXR1cm4gcjQyMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcjQyMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcjEwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHI0MjBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CisJfSBlbHNlIHsKKwkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwl9CisJa2ZyZWUocmRldi0+Ymlvcyk7CisJcmRldi0+YmlvcyA9IE5VTEw7Cit9CisKK2ludCByNDIwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KKwl9IGVsc2UgeworCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkJfSBlbHNlIHsKKwkJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwkJfQorCX0KKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KKwlyMzAwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQorCXI0MjBfZGVidWdmcyhyZGV2KTsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCXJldHVybiByOworCX0KKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCXJldHVybiByOworCX0KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgeworCQlyID0gcnYzNzBfcGNpZV9nYXJ0X2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJcjMwMF9zZXRfcmVnX3NhZmUocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHI0MjBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyNDIwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIERlYnVnZnMgaW5mbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OGE3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIFI0MjBEX0gKKyNkZWZpbmUgUjQyMERfSAorCisjZGVmaW5lIFJfMDAwMUY4X01DX0lORF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUY4CisjZGVmaW5lICAgU18wMDAxRjhfTUNfSU5EX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMUY4X01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMDFGOF9NQ19JTkRfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDAxRjhfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAxRjhfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxRjhfTUNfSU5EX1dSX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSBSXzAwMDFGQ19NQ19JTkRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFGQworI2RlZmluZSAgIFNfMDAwMUZDX01DX0lORF9EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDFGQ19NQ19JTkRfREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAxRkNfTUNfSU5EX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworLyogQ0xLIHJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDAwRF9TQ0xLX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRAorI2RlZmluZSAgIFNfMDAwMDBEX1NDTEtfU1JDX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDBEX1NDTEtfU1JDX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3KQorI2RlZmluZSAgIENfMDAwMDBEX1NDTEtfU1JDX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjgKKyNkZWZpbmUgICBTXzAwMDAwRF9DUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDAwRF9DUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9DUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwMERfSERQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwMERfSERQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSERQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDAwMDBEX1RWX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMDBEX1RWX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RWX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGREYKKyNkZWZpbmUgICBTXzAwMDAwRF9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDAwRF9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9FMl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwMERfU0VfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAwMERfU0VfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfU0VfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDAwMDBEX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDBEX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9WSVBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9WSVBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9WSVBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0RJU1AyKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9ESVNQMiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9DUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9IRFAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0RJU1AxKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9ESVNQMSAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9FMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9JRENUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9WSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1BYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9QWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9SQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9UVl9TQ0xLICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TVUJQSUMgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9PVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwppbmRleCBlYmQ2YjBmLi5kNGIwYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwpAQCAtMjgsMTIgKzI4LDkgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotI2luY2x1ZGUgInJhZGVvbl9zaGFyZS5oIgogCiAvKiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAgZGVwZW5kcyBvbiA6ICovCiB2b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xMTksOSArMTE2LDYgQEAKIAogdm9pZCByNTIwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9mcmVlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCA1MzhjZDkwLi5lYWIzMWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtMjUsMTIgKzI1LDQ1IEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgorI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyYWRlb25fbW9kZS5oIgorI2luY2x1ZGUgInI2MDBkLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCisjaW5jbHVkZSAiYXRvbS5oIgogCi0vKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwIGRlcGVuZHMgb24gOiAqLwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworI2RlZmluZSBQRlBfVUNPREVfU0laRSA1NzYKKyNkZWZpbmUgUE00X1VDT0RFX1NJWkUgMTc5MgorI2RlZmluZSBSNzAwX1BGUF9VQ09ERV9TSVpFIDg0OAorI2RlZmluZSBSNzAwX1BNNF9VQ09ERV9TSVpFIDEzNjAKKworLyogRmlybXdhcmUgTmFtZXMgKi8KK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1I2MDBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUjYwMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjEwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjEwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYyMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYyMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjM1X3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjM1X21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2NzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2NzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SUzc4MF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SUzc4MF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzcwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzcwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3MzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3MzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjcxMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjcxMF9tZS5iaW4iKTsKKworaW50IHI2MDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgogICogcjYwMCxydjYxMCxydjYzMCxydjYyMCxydjYzNSxydjY3MApAQCAtMzksODcgKzcyLDI5MyBAQAogICovCiBpbnQgcjYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjYwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHI2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIAogLyoKLSAqIE1DCisgKiBSNjAwIFBDSUUgR0FSVAogICovCi1pbnQgcjYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHI2MDBfZ2FydF9jbGVhcl9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSkKIHsKLQl1aW50MzJfdCB0bXA7CisJdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7CisJdTY0IHB0ZTsKIAotCXI2MDBfZ3B1X2luaXQocmRldik7Ci0KLQkvKiBzZXR1cCB0aGUgZ2FydCBiZWZvcmUgY2hhbmdpbmcgbG9jYXRpb24gc28gd2UgY2FuIGFzayB0bwotCSAqIGRpc2NhcmQgdW5tYXBwZWQgbWMgcmVxdWVzdAotCSAqLwotCS8qIEZJWE1FOiBkaXNhYmxlIG91dCBvZiBnYXJ0IGFjY2VzcyAqLwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiAvIDQwOTY7Ci0JdG1wID0gUkVHX1NFVChSNjAwX0xPR0lDQUxfUEFHRV9OVU1CRVIsIHRtcCk7Ci0JV1JFRzMyKFI2MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCB0bXApOwotCXRtcCA9IChyZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSkgLyA0MDk2OwotCXRtcCA9IFJFR19TRVQoUjYwMF9MT0dJQ0FMX1BBR0VfTlVNQkVSLCB0bXApOwotCVdSRUczMihSNjAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIHRtcCk7Ci0KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKFI2MDBfTUNfRkJfVE9QLCB0bXAgPj4gMjQpOwotCXRtcCB8PSBSRUdfU0VUKFI2MDBfTUNfRkJfQkFTRSwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAyNCk7Ci0JV1JFRzMyKFI2MDBfTUNfVk1fRkJfTE9DQVRJT04sIHRtcCk7Ci0JdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUjYwMF9NQ19BR1BfVE9QLCB0bXAgPj4gMjIpOwotCVdSRUczMihSNjAwX01DX1ZNX0FHUF9UT1AsIHRtcCk7Ci0JdG1wID0gUkVHX1NFVChSNjAwX01DX0FHUF9CT1QsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAyMik7Ci0JV1JFRzMyKFI2MDBfTUNfVk1fQUdQX0JPVCwgdG1wKTsKKwlpZiAoaSA8IDAgfHwgaSA+IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHRlID0gMDsKKwl3cml0ZXEocHRlLCAoKHZvaWQgX19pb21lbSAqKXB0cikgKyAoaSAqIDgpKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCByNjAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJdW5zaWduZWQgaTsKKwl1MzIgdG1wOworCisJV1JFRzMyKFZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9MT1dfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfSU5WQUxJREFUSU9OX0hJR0hfQUREUiwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UsIFJFUVVFU1RfVFlQRSgxKSk7CisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCS8qIHJlYWQgTUNfU1RBVFVTICovCisJCXRtcCA9IFJSRUczMihWTV9DT05URVhUMF9SRVFVRVNUX1JFU1BPTlNFKTsKKwkJdG1wID0gKHRtcCAmIFJFU1BPTlNFX1RZUEVfTUFTSykgPj4gUkVTUE9OU0VfVFlQRV9TSElGVDsKKwkJaWYgKHRtcCA9PSAyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSByNjAwIGZsdXNoIFRMQiBmYWlsZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisJCWlmICh0bXApIHsKKwkJCXJldHVybjsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQogfQogCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHI2MDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHI2MDBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcmRldi0+cGxsX2VycmF0YSA9IDA7CisJaW50IHI7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopIHsKKwkJV0FSTigxLCAiUjYwMCBQQ0lFIEdBUlQgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyogSW5pdGlhbGl6ZSBjb21tb24gZ2FydCBzdHJ1Y3R1cmUgKi8KKwlyID0gcmFkZW9uX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogODsKKwlyZXR1cm4gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9hbGxvYyhyZGV2KTsKK30KKworaW50IHI2MDBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCWludCByLCBpOworCisJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJObyBWUkFNIG9iamVjdCBmb3IgUENJRSBHQVJULlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyID0gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4ocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogU2V0dXAgTDIgY2FjaGUgKi8KKwlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0NBQ0hFIHwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQkJCUVOQUJMRV9MMl9QVEVfQ0FDSEVfTFJVX1VQREFURV9CWV9XUklURSB8CisJCQkJRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoNykpOworCVdSRUczMihWTV9MMl9DTlRMMiwgMCk7CisJV1JFRzMyKFZNX0wyX0NOVEwzLCBCQU5LX1NFTEVDVF8wKDApIHwgQkFOS19TRUxFQ1RfMSgxKSk7CisJLyogU2V0dXAgVExCIGNvbnRyb2wgKi8KKwl0bXAgPSBFTkFCTEVfTDFfVExCIHwgRU5BQkxFX0wxX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpIHwKKwkJRU5BQkxFX1dBSVRfTDJfUVVFUlk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU1lTX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU1lTX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfSERQX0NOVEwsIHRtcCB8IEVOQUJMRV9MMV9TVFJJQ1RfT1JERVJJTkcpOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0hEUF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1JEX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9XUl9BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0JfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9HRlhfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9HRlhfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfUERNQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1NFTV9DTlRMLCB0bXAgfCBFTkFCTEVfU0VNQVBIT1JFX01PREUpOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX1NFTV9DTlRMLCB0bXAgfCBFTkFCTEVfU0VNQVBIT1JFX01PREUpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgcmRldi0+Z2FydC50YWJsZV9hZGRyID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCwgRU5BQkxFX0NPTlRFWFQgfCBQQUdFX1RBQkxFX0RFUFRIKDApIHwKKwkJCQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxUKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUFJPVEVDVElPTl9GQVVMVF9ERUZBVUxUX0FERFIsCisJCQkodTMyKShyZGV2LT5kdW1teV9wYWdlLmFkZHIgPj4gMTIpKTsKKwlmb3IgKGkgPSAxOyBpIDwgNzsgaSsrKQorCQlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIDApOworCisJcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHJkZXYpOworCXJkZXYtPmdhcnQucmVhZHkgPSB0cnVlOworCXJldHVybiAwOworfQorCit2b2lkIHI2MDBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKwlpbnQgaTsKKworCS8qIERpc2FibGUgYWxsIHRhYmxlcyAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCVdSRUczMihWTV9DT05URVhUMF9DTlRMICsgKGkgKiA0KSwgMCk7CisKKwkvKiBEaXNhYmxlIEwyIGNhY2hlICovCisJV1JFRzMyKFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwzLCBCQU5LX1NFTEVDVF8wKDApIHwgQkFOS19TRUxFQ1RfMSgxKSk7CisJLyogU2V0dXAgTDEgVExCIGNvbnRyb2wgKi8KKwl0bXAgPSBFRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfCBFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KSB8CisJCUVOQUJMRV9XQUlUX0wyX1FVRVJZOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1JEX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9XUl9BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0JfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9HRlhfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9HRlhfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfUERNQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1NFTV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX1NFTV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1NZU19DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX1NZU19DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX0hEUF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0hEUF9DTlRMLCB0bXApOworCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaikgeworCQlyYWRlb25fb2JqZWN0X2t1bm1hcChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOworCX0KK30KKwordm9pZCByNjAwX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXI2MDBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9mcmVlKHJkZXYpOworCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKIGludCByNjAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLwotCXJldHVybiAwOworCXVuc2lnbmVkIGk7CisJdTMyIHRtcDsKKworCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQkvKiByZWFkIE1DX1NUQVRVUyAqLworCQl0bXAgPSBSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpICYgMHgzRjAwOworCQlpZiAoIXRtcCkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMSk7CisJfQorCXJldHVybiAtMTsKIH0KIAotdm9pZCByNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcjYwMF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLworCXUzMiBkMXZnYV9jb250cm9sLCBkMnZnYV9jb250cm9sOworCXUzMiB2Z2FfcmVuZGVyX2NvbnRyb2wsIHZnYV9oZHBfY29udHJvbDsKKwl1MzIgZDFjcnRjX2NvbnRyb2wsIGQyY3J0Y19jb250cm9sOworCXUzMiBuZXdfZDFncnBoX3ByaW1hcnksIG5ld19kMWdycGhfc2Vjb25kYXJ5OworCXUzMiBuZXdfZDJncnBoX3ByaW1hcnksIG5ld19kMmdycGhfc2Vjb25kYXJ5OworCXU2NCBvbGRfdnJhbV9zdGFydDsKKwl1MzIgdG1wOworCWludCBpLCBqOworCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDMyOyBpKyssIGogKz0gMHgxOCkgeworCQlXUkVHMzIoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJfQorCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKKworCWQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoRDFWR0FfQ09OVFJPTCk7CisJZDJ2Z2FfY29udHJvbCA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKKwl2Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKKwl2Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKKwlkMWNydGNfY29udHJvbCA9IFJSRUczMihEMUNSVENfQ09OVFJPTCk7CisJZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDJDUlRDX0NPTlRST0wpOworCW9sZF92cmFtX3N0YXJ0ID0gKHU2NCkoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7CisJbmV3X2QxZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7CisJbmV3X2QxZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOworCW5ld19kMWdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7CisJbmV3X2QxZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OworCW5ld19kMmdycGhfcHJpbWFyeSA9IFJSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOworCW5ld19kMmdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKKwluZXdfZDJncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OworCW5ld19kMmdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKKworCS8qIFN0b3AgYWxsIHZpZGVvICovCisJV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOworCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCAwKTsKKwlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKKwlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKKwlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIDApOworCVdSRUczMihEMkNSVENfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisKKwltZGVsYXkoMSk7CisJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwl9CisKKwkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSovCisJV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgVkdBX01FTU9SWV9ESVNBQkxFKTsKKworCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCisJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDEyKTsKKwlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7CisJdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCB8PSAoKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMjQpICYgMHhGRkZGKTsKKwlXUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04sIHRtcCk7CisJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0JBU0UsIChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDgpKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfSU5GTywgKDIgPDwgNykpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCAocmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSkgfCAweDNGRik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxNik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIDApOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgMHgwRkZGRkZGRik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCAweDBGRkZGRkZGKTsKKwl9CisJV1JFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9wcmltYXJ5KTsKKwlXUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfc2Vjb25kYXJ5KTsKKwlXUkVHMzIoRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3ByaW1hcnkpOworCVdSRUczMihEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9zZWNvbmRhcnkpOworCVdSRUczMihWR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisKKwkvKiBVbmxvY2sgaG9zdCBhY2Nlc3MgKi8KKwlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCB2Z2FfaGRwX2NvbnRyb2wpOworCisJbWRlbGF5KDEpOworCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gTUMgbm90IGlkbGUgIVxuIik7CisJfQorCisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMUNSVENfQ09OVFJPTCwgZDFjcnRjX2NvbnRyb2wpOworCVdSRUczMihEMkNSVENfQ09OVFJPTCwgZDJjcnRjX2NvbnRyb2wpOworCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihEMVZHQV9DT05UUk9MLCBkMXZnYV9jb250cm9sKTsKKwlXUkVHMzIoRDJWR0FfQ09OVFJPTCwgZDJ2Z2FfY29udHJvbCk7CisJV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgdmdhX3JlbmRlcl9jb250cm9sKTsKKworCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQorCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KKwlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8KLSAqLwotdm9pZCByNjAwX3ZyYW1fZ2V0X3R5cGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgcjYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKKwlmaXhlZDIwXzEyIGE7CisJdTMyIHRtcDsKIAlpbnQgY2hhbnNpemU7CisJaW50IHI7CiAKKwkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KIAlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKLQotCXRtcCA9IFJSRUczMihSNjAwX1JBTUNGRyk7Ci0JaWYgKHRtcCAmIFI2MDBfQ0hBTlNJWkVfT1ZFUlJJREUpIHsKKwl0bXAgPSBSUkVHMzIoUkFNQ0ZHKTsKKwlpZiAodG1wICYgQ0hBTlNJWkVfT1ZFUlJJREUpIHsKIAkJY2hhbnNpemUgPSAxNjsKLQl9IGVsc2UgaWYgKHRtcCAmIFI2MDBfQ0hBTlNJWkUpIHsKKwl9IGVsc2UgaWYgKHRtcCAmIENIQU5TSVpFX01BU0spIHsKIAkJY2hhbnNpemUgPSA2NDsKIAl9IGVsc2UgewogCQljaGFuc2l6ZSA9IDMyOwpAQCAtMTM1LDM2ICszNzQsMTQ1OSBAQAogCQkJKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjM1KSkgewogCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMiAqIGNoYW5zaXplOwogCX0KLX0KLQotdm9pZCByNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyNjAwX3ZyYW1fZ2V0X3R5cGUocmRldik7Ci0JcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoUjYwMF9DT05GSUdfTUVNU0laRSk7Ci0JcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMucmVhbF92cmFtX3NpemU7Ci0KIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CisJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLworCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CisJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJLyogZ3R0X3NpemUgaXMgc2V0dXAgYnkgcmFkZW9uX2FncF9pbml0ICovCisJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOworCQl0bXAgPSAweEZGRkZGRkZGVUwgLSByZGV2LT5tYy5hZ3BfYmFzZSAtIHJkZXYtPm1jLmd0dF9zaXplOworCQkvKiBUcnkgdG8gcHV0IHZyYW0gYmVmb3JlIG9yIGFmdGVyIEFHUCBiZWNhdXNlIHdlCisJCSAqIHdlIHdhbnQgU1lTVEVNX0FQRVJUVVJFIHRvIGNvdmVyIGJvdGggVlJBTSBhbmQKKwkJICogQUdQIHNvIHRoYXQgR1BVIGNhbiBjYXRjaCBvdXQgb2YgVlJBTS9BR1AgYWNjZXNzCisJCSAqLworCQlpZiAocmRldi0+bWMuZ3R0X2xvY2F0aW9uID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7CisJCQkvKiBFbm91Z2h0IHBsYWNlIGJlZm9yZSAqLworCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiAtCisJCQkJCQkJcmRldi0+bWMubWNfdnJhbV9zaXplOworCQl9IGVsc2UgaWYgKHRtcCA+IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSkgeworCQkJLyogRW5vdWdodCBwbGFjZSBhZnRlciAqLworCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArCisJCQkJCQkJcmRldi0+bWMuZ3R0X3NpemU7CisJCX0gZWxzZSB7CisJCQkvKiBUcnkgdG8gc2V0dXAgVlJBTSB0aGVuIEFHUCBtaWdodCBub3QKKwkJCSAqIG5vdCB3b3JrIG9uIHNvbWUgY2FyZAorCQkJICovCisJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHgwMDAwMDAwMFVMOworCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB7CisJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgorCQkJCQkJCQkweEZGRkYpIDw8IDI0OworCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJCQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOworCQkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7CisJCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KKwkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7CisJCQl9IGVsc2UgaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKKwkJCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KKwkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOworCQkJfSBlbHNlIHsKKwkJCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKKwkJCQkgKiBnYXJ0IHNpemUKKwkJCQkgKi8KKwkJCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7CisJCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7CisJCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwkJCQl9IGVsc2UgeworCQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7CisJCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gMHhGRkZGRkZGRlVMIC0gdG1wOworCQkJCX0KKwkJCX0KKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7CisJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJfQorCX0KKwlyZGV2LT5tYy52cmFtX3N0YXJ0ID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7CisJcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOworCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZTsKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KKwkgKiBkZWZhdWx0IHNldHVwCisJICovCisJYS5mdWxsID0gcmZpeGVkX2NvbnN0KDEwMCk7CisJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2NvbnN0KHJkZXYtPmNsb2NrLmRlZmF1bHRfc2Nsayk7CisJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKKwlyZXR1cm4gMDsKIH0KIAorLyogV2UgZG9lc24ndCBjaGVjayB0aGF0IHRoZSBHUFUgcmVhbGx5IG5lZWRzIGEgcmVzZXQgd2Ugc2ltcGx5IGRvIHRoZQorICogcmVzZXQsIGl0J3MgdXAgdG8gdGhlIGNhbGxlciB0byBkZXRlcm1pbmUgaWYgdGhlIEdQVSBuZWVkcyBvbmUuIFdlCisgKiBtaWdodCBhZGQgYW4gaGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoYXQuCisgKi8KK2ludCByNjAwX2dwdV9zb2Z0X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiBncmJtX2J1c3lfbWFzayA9IFNfMDA4MDEwX1ZDX0JVU1koMSkgfCBTXzAwODAxMF9WR1RfQlVTWV9OT19ETUEoMSkgfAorCQkJCVNfMDA4MDEwX1ZHVF9CVVNZKDEpIHwgU18wMDgwMTBfVEEwM19CVVNZKDEpIHwKKwkJCQlTXzAwODAxMF9UQ19CVVNZKDEpIHwgU18wMDgwMTBfU1hfQlVTWSgxKSB8CisJCQkJU18wMDgwMTBfU0hfQlVTWSgxKSB8IFNfMDA4MDEwX1NQSTAzX0JVU1koMSkgfAorCQkJCVNfMDA4MDEwX1NNWF9CVVNZKDEpIHwgU18wMDgwMTBfU0NfQlVTWSgxKSB8CisJCQkJU18wMDgwMTBfUEFfQlVTWSgxKSB8IFNfMDA4MDEwX0RCMDNfQlVTWSgxKSB8CisJCQkJU18wMDgwMTBfQ1JfQlVTWSgxKSB8IFNfMDA4MDEwX0NCMDNfQlVTWSgxKSB8CisJCQkJU18wMDgwMTBfR1VJX0FDVElWRSgxKTsKKwl1MzIgZ3JibTJfYnVzeV9tYXNrID0gU18wMDgwMTRfU1BJMF9CVVNZKDEpIHwgU18wMDgwMTRfU1BJMV9CVVNZKDEpIHwKKwkJCVNfMDA4MDE0X1NQSTJfQlVTWSgxKSB8IFNfMDA4MDE0X1NQSTNfQlVTWSgxKSB8CisJCQlTXzAwODAxNF9UQTBfQlVTWSgxKSB8IFNfMDA4MDE0X1RBMV9CVVNZKDEpIHwKKwkJCVNfMDA4MDE0X1RBMl9CVVNZKDEpIHwgU18wMDgwMTRfVEEzX0JVU1koMSkgfAorCQkJU18wMDgwMTRfREIwX0JVU1koMSkgfCBTXzAwODAxNF9EQjFfQlVTWSgxKSB8CisJCQlTXzAwODAxNF9EQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0RCM19CVVNZKDEpIHwKKwkJCVNfMDA4MDE0X0NCMF9CVVNZKDEpIHwgU18wMDgwMTRfQ0IxX0JVU1koMSkgfAorCQkJU18wMDgwMTRfQ0IyX0JVU1koMSkgfCBTXzAwODAxNF9DQjNfQlVTWSgxKTsKKwl1MzIgc3JibV9yZXNldCA9IDA7CisKKwkvKiBEaXNhYmxlIENQIHBhcnNpbmcvcHJlZmV0Y2hpbmcgKi8KKwlXUkVHMzIoUl8wMDg2RDhfQ1BfTUVfQ05UTCwgU18wMDg2RDhfQ1BfTUVfSEFMVCgweGZmKSk7CisJLyogQ2hlY2sgaWYgYW55IG9mIHRoZSByZW5kZXJpbmcgYmxvY2sgaXMgYnVzeSBhbmQgcmVzZXQgaXQgKi8KKwlpZiAoKFJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykgJiBncmJtX2J1c3lfbWFzaykgfHwKKwkgICAgKFJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpICYgZ3JibTJfYnVzeV9tYXNrKSkgeworCQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NSKDEpIHwKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfREIoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9DQigxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1BBKDEpIHwKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfU0MoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9TTVgoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9TUEkoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9TWCgxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1NIKDEpIHwKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVEMoMSkgfAorCQkJU18wMDgwMjBfU09GVF9SRVNFVF9UQSgxKSB8CisJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1ZDKDEpIHwKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkdUKDEpKTsKKwkJKHZvaWQpUlJFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCk7CisJCXVkZWxheSg1MCk7CisJCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCQkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKKwl9CisJLyogUmVzZXQgQ1AgKHdlIGFsd2F5cyByZXNldCBDUCkgKi8KKwlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKDEpKTsKKwkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKKwl1ZGVsYXkoNTApOworCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCSh2b2lkKVJSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQpOworCS8qIFJlc2V0IG90aGVycyBHUFUgYmxvY2sgaWYgbmVjZXNzYXJ5ICovCisJaWYgKEdfMDAwRTUwX1JMQ19CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfUkxDKDEpOworCWlmIChHXzAwMEU1MF9HUkJNX1JRX1BFTkRJTkcoUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9HUkJNKDEpOworCWlmIChHXzAwMEU1MF9ISV9SUV9QRU5ESU5HKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfSUgoMSk7CisJaWYgKEdfMDAwRTUwX1ZNQ19CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfVk1DKDEpOworCWlmIChHXzAwMEU1MF9NQ0JfQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKKwkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX01DKDEpOworCWlmIChHXzAwMEU1MF9NQ0RaX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9NQygxKTsKKwlpZiAoR18wMDBFNTBfTUNEWV9CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfTUMoMSk7CisJaWYgKEdfMDAwRTUwX01DRFhfQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKKwkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX01DKDEpOworCWlmIChHXzAwMEU1MF9NQ0RXX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9NQygxKTsKKwlpZiAoR18wMDBFNTBfUkxDX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9STEMoMSk7CisJaWYgKEdfMDAwRTUwX1NFTV9CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfU0VNKDEpOworCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIHNyYm1fcmVzZXQpOworCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOworCXVkZWxheSg1MCk7CisJV1JFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCwgMCk7CisJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CisJLyogV2FpdCBhIGxpdHRsZSBmb3IgdGhpbmdzIHRvIHNldHRsZSBkb3duICovCisJdWRlbGF5KDUwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJldHVybiByNjAwX2dwdV9zb2Z0X3Jlc2V0KHJkZXYpOworfQorCitzdGF0aWMgdTMyIHI2MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcCh1MzIgbnVtX3RpbGVfcGlwZXMsCisJCQkJCSAgICAgdTMyIG51bV9iYWNrZW5kcywKKwkJCQkJICAgICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCit7CisJdTMyIGJhY2tlbmRfbWFwID0gMDsKKwl1MzIgZW5hYmxlZF9iYWNrZW5kc19tYXNrOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX2NvdW50OworCXUzMiBjdXJfcGlwZTsKKwl1MzIgc3dpenpsZV9waXBlW1I2WFhfTUFYX1BJUEVTXTsKKwl1MzIgY3VyX2JhY2tlbmQ7CisJdTMyIGk7CisKKwlpZiAobnVtX3RpbGVfcGlwZXMgPiBSNlhYX01BWF9QSVBFUykKKwkJbnVtX3RpbGVfcGlwZXMgPSBSNlhYX01BWF9QSVBFUzsKKwlpZiAobnVtX3RpbGVfcGlwZXMgPCAxKQorCQludW1fdGlsZV9waXBlcyA9IDE7CisJaWYgKG51bV9iYWNrZW5kcyA+IFI2WFhfTUFYX0JBQ0tFTkRTKQorCQludW1fYmFja2VuZHMgPSBSNlhYX01BWF9CQUNLRU5EUzsKKwlpZiAobnVtX2JhY2tlbmRzIDwgMSkKKwkJbnVtX2JhY2tlbmRzID0gMTsKKworCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDA7CisJZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IFI2WFhfTUFYX0JBQ0tFTkRTOyArK2kpIHsKKwkJaWYgKCgoYmFja2VuZF9kaXNhYmxlX21hc2sgPj4gaSkgJiAxKSA9PSAwKSB7CisJCQllbmFibGVkX2JhY2tlbmRzX21hc2sgfD0gKDEgPDwgaSk7CisJCQkrK2VuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJCX0KKwkJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gbnVtX2JhY2tlbmRzKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gMCkgeworCQllbmFibGVkX2JhY2tlbmRzX21hc2sgPSAxOworCQllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMTsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCAhPSBudW1fYmFja2VuZHMpCisJCW51bV9iYWNrZW5kcyA9IGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisKKwltZW1zZXQoKHVpbnQ4X3QgKikmc3dpenpsZV9waXBlWzBdLCAwLCBzaXplb2YodTMyKSAqIFI2WFhfTUFYX1BJUEVTKTsKKwlzd2l0Y2ggKG51bV90aWxlX3BpcGVzKSB7CisJY2FzZSAxOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQlzd2l6emxlX3BpcGVbM10gPSAzOworCQlicmVhazsKKwljYXNlIDU6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDQ7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNTsKKwkJc3dpenpsZV9waXBlWzRdID0gMTsKKwkJc3dpenpsZV9waXBlWzVdID0gMzsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQlzd2l6emxlX3BpcGVbNF0gPSAxOworCQlzd2l6emxlX3BpcGVbNV0gPSAzOworCQlzd2l6emxlX3BpcGVbNl0gPSA1OworCQlicmVhazsKKwljYXNlIDg6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDU7CisJCXN3aXp6bGVfcGlwZVs3XSA9IDc7CisJCWJyZWFrOworCX0KKworCWN1cl9iYWNrZW5kID0gMDsKKwlmb3IgKGN1cl9waXBlID0gMDsgY3VyX3BpcGUgPCBudW1fdGlsZV9waXBlczsgKytjdXJfcGlwZSkgeworCQl3aGlsZSAoKCgxIDw8IGN1cl9iYWNrZW5kKSAmIGVuYWJsZWRfYmFja2VuZHNfbWFzaykgPT0gMCkKKwkJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSNlhYX01BWF9CQUNLRU5EUzsKKworCQliYWNrZW5kX21hcCB8PSAodTMyKSgoKGN1cl9iYWNrZW5kICYgMykgPDwgKHN3aXp6bGVfcGlwZVtjdXJfcGlwZV0gKiAyKSkpOworCisJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSNlhYX01BWF9CQUNLRU5EUzsKKwl9CisKKwlyZXR1cm4gYmFja2VuZF9tYXA7Cit9CisKK2ludCByNjAwX2NvdW50X3BpcGVfYml0cyh1aW50MzJfdCB2YWwpCit7CisJaW50IGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlyZXQgKz0gdmFsICYgMTsKKwkJdmFsID4+PSAxOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHI2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRpbGluZ19jb25maWc7CisJdTMyIHJhbWNmZzsKKwl1MzIgdG1wOworCWludCBpLCBqOworCXUzMiBzcV9jb25maWc7CisJdTMyIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAwOworCXUzMiBzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gMDsKKwl1MzIgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAwOworCXUzMiBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAwOworCXUzMiBzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAwOworCisJLyogRklYTUU6IGltcGxlbWVudCAqLworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1I2MDA6CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzID0gODsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3NpbWRzID0gNDsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2JhY2tlbmRzID0gNDsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2dwcnMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF90aHJlYWRzID0gMTkyOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2h3X2NvbnRleHRzID0gODsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2dzX3RocmVhZHMgPSAxNjsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnNxX251bV9jZl9pbnN0cyA9IDI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYzMDoKKwljYXNlIENISVBfUlY2MzU6CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9waXBlcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzID0gMjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3NpbWRzID0gMzsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2JhY2tlbmRzID0gMTsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2dwcnMgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF90aHJlYWRzID0gMTkyOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2h3X2NvbnRleHRzID0gODsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X2dzX3RocmVhZHMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3FfbnVtX2NmX2luc3RzID0gMjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjEwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JTODgwOgorCQlyZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgPSAxOworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfdGlsZV9waXBlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9zaW1kcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9iYWNrZW5kcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9ncHJzID0gMTI4OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfdGhyZWFkcyA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9od19jb250ZXh0cyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9nc190aHJlYWRzID0gNDsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnNxX251bV9jZl9pbnN0cyA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDoKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3RpbGVfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfc2ltZHMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMgPSA0OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfZ3BycyA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLnI2MDAubWF4X3RocmVhZHMgPSAxOTI7CisJCXJkZXYtPmNvbmZpZy5yNjAwLm1heF9zdGFja19lbnRyaWVzID0gMjU2OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcucjYwMC5tYXhfZ3NfdGhyZWFkcyA9IDE2OworCQlyZGV2LT5jb25maWcucjYwMC5zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5yNjAwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnI2MDAuc3FfbnVtX2NmX2luc3RzID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDMyOyBpKyssIGogKz0gMHgxOCkgeworCQlXUkVHMzIoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJfQorCisJV1JFRzMyKEdSQk1fQ05UTCwgR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogU2V0dXAgdGlsaW5nICovCisJdGlsaW5nX2NvbmZpZyA9IDA7CisJcmFtY2ZnID0gUlJFRzMyKFJBTUNGRyk7CisJc3dpdGNoIChyZGV2LT5jb25maWcucjYwMC5tYXhfdGlsZV9waXBlcykgeworCWNhc2UgMToKKwkJdGlsaW5nX2NvbmZpZyB8PSBQSVBFX1RJTElORygwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0aWxpbmdfY29uZmlnIHw9IFBJUEVfVElMSU5HKDEpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRpbGluZ19jb25maWcgfD0gUElQRV9USUxJTkcoMik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJdGlsaW5nX2NvbmZpZyB8PSBQSVBFX1RJTElORygzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXRpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKHJhbWNmZyAmIE5PT0ZCQU5LX01BU0spID4+IE5PT0ZCQU5LX1NISUZUKTsKKwl0aWxpbmdfY29uZmlnIHw9IEdST1VQX1NJWkUoMCk7CisJdG1wID0gKHJhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUOworCWlmICh0bXAgPiAzKSB7CisJCXRpbGluZ19jb25maWcgfD0gUk9XX1RJTElORygzKTsKKwkJdGlsaW5nX2NvbmZpZyB8PSBTQU1QTEVfU1BMSVQoMyk7CisJfSBlbHNlIHsKKwkJdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKHRtcCk7CisJCXRpbGluZ19jb25maWcgfD0gU0FNUExFX1NQTElUKHRtcCk7CisJfQorCXRpbGluZ19jb25maWcgfD0gQkFOS19TV0FQUygxKTsKKwl0bXAgPSByNjAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldi0+Y29uZmlnLnI2MDAubWF4X3RpbGVfcGlwZXMsCisJCQkJCQlyZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMsCisJCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMpICYgMHhmZik7CisJdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUCh0bXApOworCVdSRUczMihHQl9USUxJTkdfQ09ORklHLCB0aWxpbmdfY29uZmlnKTsKKwlXUkVHMzIoRENQX1RJTElOR19DT05GSUcsIHRpbGluZ19jb25maWcgJiAweGZmZmYpOworCVdSRUczMihIRFBfVElMSU5HX0NPTkZJRywgdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZik7CisKKwl0bXAgPSBCQUNLRU5EX0RJU0FCTEUoKFI2WFhfTUFYX0JBQ0tFTkRTX01BU0sgPDwgcmRldi0+Y29uZmlnLnI2MDAubWF4X2JhY2tlbmRzKSAmIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spOworCVdSRUczMihDQ19SQl9CQUNLRU5EX0RJU0FCTEUsIHRtcCk7CisKKwkvKiBTZXR1cCBwaXBlcyAqLworCXRtcCA9IElOQUNUSVZFX1FEX1BJUEVTKChSNlhYX01BWF9QSVBFU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5yNjAwLm1heF9waXBlcykgJiBSNlhYX01BWF9QSVBFU19NQVNLKTsKKwl0bXAgfD0gSU5BQ1RJVkVfU0lNRFMoKFI2WFhfTUFYX1NJTURTX01BU0sgPDwgcmRldi0+Y29uZmlnLnI2MDAubWF4X3NpbWRzKSAmIFI2WFhfTUFYX1NJTURTX01BU0spOworCVdSRUczMihDQ19HQ19TSEFERVJfUElQRV9DT05GSUcsIHRtcCk7CisJV1JFRzMyKEdDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHLCB0bXApOworCisJdG1wID0gUjZYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyh0bXAgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwlXUkVHMzIoVkdUX09VVF9ERUFMTE9DX0NOVEwsICh0bXAgKiA0KSAmIERFQUxMT0NfRElTVF9NQVNLKTsKKwlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKHRtcCAqIDQpIC0gMikgJiBWVFhfUkVVU0VfREVQVEhfTUFTSyk7CisKKwkvKiBTZXR1cCBzb21lIENQIHN0YXRlcyAqLworCVdSRUczMihDUF9RVUVVRV9USFJFU0hPTERTLCAoUk9RX0lCMV9TVEFSVCgweDE2KSB8IFJPUV9JQjJfU1RBUlQoMHgyYikpKTsKKwlXUkVHMzIoQ1BfTUVRX1RIUkVTSE9MRFMsIChNRVFfRU5EKDB4NDApIHwgUk9RX0VORCgweDQwKSkpOworCisJV1JFRzMyKFRBX0NOVExfQVVYLCAoRElTQUJMRV9DVUJFX0FOSVNPIHwgU1lOQ19HUkFESUVOVCB8CisJCQkgICAgIFNZTkNfV0FMS0VSIHwgU1lOQ19BTElHTkVSKSk7CisJLyogU2V0dXAgdmFyaW91cyBHUFUgc3RhdGVzICovCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjcwKQorCQlXUkVHMzIoQVJCX0dERUNfUkRfQ05UTCwgMHgwMDAwMDAyMSk7CisKKwl0bXAgPSBSUkVHMzIoU1hfREVCVUdfMSk7CisJdG1wIHw9IFNNWF9FVkVOVF9SRUxFQVNFOworCWlmICgocmRldi0+ZmFtaWx5ID4gQ0hJUF9SNjAwKSkKKwkJdG1wIHw9IEVOQUJMRV9ORVdfU01YX0FERFJFU1M7CisJV1JFRzMyKFNYX0RFQlVHXzEsIHRtcCk7CisKKwlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUjYwMCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MzApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJCVdSRUczMihEQl9ERUJVRywgUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUpOworCX0gZWxzZSB7CisJCVdSRUczMihEQl9ERUJVRywgMCk7CisJfQorCVdSRUczMihEQl9XQVRFUk1BUktTLCAoREVQVEhfRlJFRSg0KSB8IERFUFRIX0NBQ0hFTElORV9GUkVFKDE2KSB8CisJCQkgICAgICAgREVQVEhfRkxVU0goMTYpIHwgREVQVEhfUEVORElOR19GUkVFKDQpKSk7CisKKwlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKKwlXUkVHMzIoVkdUX05VTV9JTlNUQU5DRVMsIDApOworCisJV1JFRzMyKFNQSV9DT05GSUdfQ05UTCwgR1BSX1dSSVRFX1BSSU9SSVRZKDApKTsKKwlXUkVHMzIoU1BJX0NPTkZJR19DTlRMXzEsIFZUWF9ET05FX0RFTEFZKDApKTsKKworCXRtcCA9IFJSRUczMihTUV9NU19GSUZPX1NJWkVTKTsKKwlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJdG1wID0gKENBQ0hFX0ZJRk9fU0laRSgweGEpIHwKKwkJICAgICAgIEZFVENIX0ZJRk9fSElXQVRFUigweGEpIHwKKwkJICAgICAgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKKwkJICAgICAgIEFMVV9VUERBVEVfRklGT19ISVdBVEVSKDB4OCkpOworCX0gZWxzZSBpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUjYwMCkgfHwKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MzApKSB7CisJCXRtcCAmPSB+RE9ORV9GSUZPX0hJV0FURVIoMHhmZik7CisJCXRtcCB8PSBET05FX0ZJRk9fSElXQVRFUigweDQpOworCX0KKwlXUkVHMzIoU1FfTVNfRklGT19TSVpFUywgdG1wKTsKKworCS8qIFNRX0NPTkZJRywgU1FfR1BSX1JFU09VUkNFX01HTVQsIFNRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBTUV9TVEFDS19SRVNPVVJDRV9NR01UCisJICogc2hvdWxkIGJlIGFkanVzdGVkIGFzIG5lZWRlZCBieSB0aGUgMkQvM0QgZHJpdmVycy4gIFRoaXMganVzdCBzZXRzIGRlZmF1bHQgdmFsdWVzCisJICovCisJc3FfY29uZmlnID0gUlJFRzMyKFNRX0NPTkZJRyk7CisJc3FfY29uZmlnICY9IH4oUFNfUFJJTygzKSB8CisJCSAgICAgICBWU19QUklPKDMpIHwKKwkJICAgICAgIEdTX1BSSU8oMykgfAorCQkgICAgICAgRVNfUFJJTygzKSk7CisJc3FfY29uZmlnIHw9IChEWDlfQ09OU1RTIHwKKwkJICAgICAgVkNfRU5BQkxFIHwKKwkJICAgICAgUFNfUFJJTygwKSB8CisJCSAgICAgIFZTX1BSSU8oMSkgfAorCQkgICAgICBHU19QUklPKDIpIHwKKwkJICAgICAgRVNfUFJJTygzKSk7CisKKwlpZiAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SNjAwKSB7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX0dQUlMoMTI0KSB8CisJCQkJCSAgTlVNX1ZTX0dQUlMoMTI0KSB8CisJCQkJCSAgTlVNX0NMQVVTRV9URU1QX0dQUlMoNCkpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19HUFJTKDApIHwKKwkJCQkJICBOVU1fRVNfR1BSUygwKSk7CisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKE5VTV9QU19USFJFQURTKDEzNikgfAorCQkJCQkgICBOVU1fVlNfVEhSRUFEUyg0OCkgfAorCQkJCQkgICBOVU1fR1NfVEhSRUFEUyg0KSB8CisJCQkJCSAgIE5VTV9FU19USFJFQURTKDQpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19TVEFDS19FTlRSSUVTKDEyOCkgfAorCQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMoMTI4KSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfU1RBQ0tfRU5UUklFUygwKSB8CisJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUygwKSk7CisJfSBlbHNlIGlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8CisJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KKwkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CisKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfR1BSUyg0NCkgfAorCQkJCQkgIE5VTV9WU19HUFJTKDQ0KSB8CisJCQkJCSAgTlVNX0NMQVVTRV9URU1QX0dQUlMoMikpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19HUFJTKDE3KSB8CisJCQkJCSAgTlVNX0VTX0dQUlMoMTcpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMoNzkpIHwKKwkJCQkJICAgTlVNX1ZTX1RIUkVBRFMoNzgpIHwKKwkJCQkJICAgTlVNX0dTX1RIUkVBRFMoNCkgfAorCQkJCQkgICBOVU1fRVNfVEhSRUFEUygzMSkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMoNDApIHwKKwkJCQkJICAgIE5VTV9WU19TVEFDS19FTlRSSUVTKDQwKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfU1RBQ0tfRU5UUklFUygzMikgfAorCQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMoMTYpKTsKKwl9IGVsc2UgaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjMwKSB8fAorCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYzNSkpIHsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfR1BSUyg0NCkgfAorCQkJCQkgIE5VTV9WU19HUFJTKDQ0KSB8CisJCQkJCSAgTlVNX0NMQVVTRV9URU1QX0dQUlMoMikpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19HUFJTKDE4KSB8CisJCQkJCSAgTlVNX0VTX0dQUlMoMTgpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMoNzkpIHwKKwkJCQkJICAgTlVNX1ZTX1RIUkVBRFMoNzgpIHwKKwkJCQkJICAgTlVNX0dTX1RIUkVBRFMoNCkgfAorCQkJCQkgICBOVU1fRVNfVEhSRUFEUygzMSkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMoNDApIHwKKwkJCQkJICAgIE5VTV9WU19TVEFDS19FTlRSSUVTKDQwKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfU1RBQ0tfRU5UUklFUygzMikgfAorCQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMoMTYpKTsKKwl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2NzApIHsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfR1BSUyg0NCkgfAorCQkJCQkgIE5VTV9WU19HUFJTKDQ0KSB8CisJCQkJCSAgTlVNX0NMQVVTRV9URU1QX0dQUlMoMikpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19HUFJTKDE3KSB8CisJCQkJCSAgTlVNX0VTX0dQUlMoMTcpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMoNzkpIHwKKwkJCQkJICAgTlVNX1ZTX1RIUkVBRFMoNzgpIHwKKwkJCQkJICAgTlVNX0dTX1RIUkVBRFMoNCkgfAorCQkJCQkgICBOVU1fRVNfVEhSRUFEUygzMSkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMoNjQpIHwKKwkJCQkJICAgIE5VTV9WU19TVEFDS19FTlRSSUVTKDY0KSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMoNjQpKTsKKwl9CisKKwlXUkVHMzIoU1FfQ09ORklHLCBzcV9jb25maWcpOworCVdSRUczMihTUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7CisJV1JFRzMyKFNRX0dQUl9SRVNPVVJDRV9NR01UXzIsICBzcV9ncHJfcmVzb3VyY2VfbWdtdF8yKTsKKwlXUkVHMzIoU1FfVEhSRUFEX1JFU09VUkNFX01HTVQsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKKwlXUkVHMzIoU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOworCVdSRUczMihTUV9TVEFDS19SRVNPVVJDRV9NR01UXzIsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7CisKKwlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihUQ19PTkxZKSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihWQ19BTkRfVEMpKTsKKwl9CisKKwkvKiBNb3JlIGRlZmF1bHQgdmFsdWVzLiAyRC8zRCBkcml2ZXIgc2hvdWxkIGFkanVzdCBhcyBuZWVkZWQgKi8KKwlXUkVHMzIoUEFfU0NfQUFfU0FNUExFX0xPQ1NfMlMsIChTMF9YKDB4YykgfCBTMF9ZKDB4NCkgfAorCQkJCQkgUzFfWCgweDQpIHwgUzFfWSgweGMpKSk7CisJV1JFRzMyKFBBX1NDX0FBX1NBTVBMRV9MT0NTXzRTLCAoUzBfWCgweGUpIHwgUzBfWSgweGUpIHwKKwkJCQkJIFMxX1goMHgyKSB8IFMxX1koMHgyKSB8CisJCQkJCSBTMl9YKDB4YSkgfCBTMl9ZKDB4NikgfAorCQkJCQkgUzNfWCgweDYpIHwgUzNfWSgweGEpKSk7CisJV1JFRzMyKFBBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMCwgKFMwX1goMHhlKSB8IFMwX1koMHhiKSB8CisJCQkJCSAgICAgUzFfWCgweDQpIHwgUzFfWSgweGMpIHwKKwkJCQkJICAgICBTMl9YKDB4MSkgfCBTMl9ZKDB4NikgfAorCQkJCQkgICAgIFMzX1goMHhhKSB8IFMzX1koMHhlKSkpOworCVdSRUczMihQQV9TQ19BQV9TQU1QTEVfTE9DU184U19XRDEsIChTNF9YKDB4NikgfCBTNF9ZKDB4MSkgfAorCQkJCQkgICAgIFM1X1goMHgwKSB8IFM1X1koMHgwKSB8CisJCQkJCSAgICAgUzZfWCgweGIpIHwgUzZfWSgweDQpIHwKKwkJCQkJICAgICBTN19YKDB4NykgfCBTN19ZKDB4OCkpKTsKKworCVdSRUczMihWR1RfU1RSTU9VVF9FTiwgMCk7CisJdG1wID0gcmRldi0+Y29uZmlnLnI2MDAubWF4X3BpcGVzICogMTY7CisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJdG1wICs9IDMyOworCQlicmVhazsKKwljYXNlIENISVBfUlY2NzA6CisJCXRtcCArPSAxMjg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAodG1wID4gMjU2KSB7CisJCXRtcCA9IDI1NjsKKwl9CisJV1JFRzMyKFZHVF9FU19QRVJfR1MsIDEyOCk7CisJV1JFRzMyKFZHVF9HU19QRVJfRVMsIHRtcCk7CisJV1JFRzMyKFZHVF9HU19QRVJfVlMsIDIpOworCVdSRUczMihWR1RfR1NfVkVSVEVYX1JFVVNFLCAxNik7CisKKwkvKiBtb3JlIGRlZmF1bHQgdmFsdWVzLiAyRC8zRCBkcml2ZXIgc2hvdWxkIGFkanVzdCBhcyBuZWVkZWQgKi8KKwlXUkVHMzIoUEFfU0NfTElORV9TVElQUExFX1NUQVRFLCAwKTsKKwlXUkVHMzIoVkdUX1NUUk1PVVRfRU4sIDApOworCVdSRUczMihTWF9NSVNDLCAwKTsKKwlXUkVHMzIoUEFfU0NfTU9ERV9DTlRMLCAwKTsKKwlXUkVHMzIoUEFfU0NfQUFfQ09ORklHLCAwKTsKKwlXUkVHMzIoUEFfU0NfTElORV9TVElQUExFLCAwKTsKKwlXUkVHMzIoU1BJX0lOUFVUX1osIDApOworCVdSRUczMihTUElfUFNfSU5fQ09OVFJPTF8wLCBOVU1fSU5URVJQKDIpKTsKKwlXUkVHMzIoQ0JfQ09MT1I3X0ZSQUcsIDApOworCisJLyogQ2xlYXIgcmVuZGVyIGJ1ZmZlciBiYXNlIGFkZHJlc3NlcyAqLworCVdSRUczMihDQl9DT0xPUjBfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SMV9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1IyX0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjNfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SNF9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1I1X0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjZfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SN19CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1I3X0ZSQUcsIDApOworCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJdG1wID0gVENfTDJfU0laRSg4KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJdG1wID0gVENfTDJfU0laRSg0KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1I2MDA6CisJCXRtcCA9IFRDX0wyX1NJWkUoMCkgfCBMMl9ESVNBQkxFX0xBVEVfSElUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXAgPSBUQ19MMl9TSVpFKDApOworCQlicmVhazsKKwl9CisJV1JFRzMyKFRDX0NOVEwsIHRtcCk7CisKKwl0bXAgPSBSUkVHMzIoSERQX0hPU1RfUEFUSF9DTlRMKTsKKwlXUkVHMzIoSERQX0hPU1RfUEFUSF9DTlRMLCB0bXApOworCisJdG1wID0gUlJFRzMyKEFSQl9QT1ApOworCXRtcCB8PSBFTkFCTEVfVEMxMjg7CisJV1JFRzMyKEFSQl9QT1AsIHRtcCk7CisKKwlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKKwlXUkVHMzIoUEFfQ0xfRU5IQU5DRSwgKENMSVBfVlRYX1JFT1JERVJfRU5BIHwKKwkJCSAgICAgICBOVU1fQ0xJUF9TRVEoMykpKTsKKwlXUkVHMzIoUEFfU0NfRU5IQU5DRSwgRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpKTsKK30KKworCiAvKgogICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCiAgKi8KLXVpbnQzMl90IHI2MDBfcGNpZXBfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQordTMyIHI2MDBfcGNpZXBfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZykKIHsKLQl1aW50MzJfdCByOworCXUzMiByOwogCi0JV1JFRzMyKFI2MDBfUENJRV9QT1JUX0lOREVYLCAoKHJlZykgJiAweGZmKSk7Ci0JKHZvaWQpUlJFRzMyKFI2MDBfUENJRV9QT1JUX0lOREVYKTsKLQlyID0gUlJFRzMyKFI2MDBfUENJRV9QT1JUX0RBVEEpOworCVdSRUczMihQQ0lFX1BPUlRfSU5ERVgsICgocmVnKSAmIDB4ZmYpKTsKKwkodm9pZClSUkVHMzIoUENJRV9QT1JUX0lOREVYKTsKKwlyID0gUlJFRzMyKFBDSUVfUE9SVF9EQVRBKTsKIAlyZXR1cm4gcjsKIH0KIAotdm9pZCByNjAwX3BjaWVwX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdikKK3ZvaWQgcjYwMF9wY2llcF93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnLCB1MzIgdikKIHsKLQlXUkVHMzIoUjYwMF9QQ0lFX1BPUlRfSU5ERVgsICgocmVnKSAmIDB4ZmYpKTsKLQkodm9pZClSUkVHMzIoUjYwMF9QQ0lFX1BPUlRfSU5ERVgpOwotCVdSRUczMihSNjAwX1BDSUVfUE9SVF9EQVRBLCAodikpOwotCSh2b2lkKVJSRUczMihSNjAwX1BDSUVfUE9SVF9EQVRBKTsKKwlXUkVHMzIoUENJRV9QT1JUX0lOREVYLCAoKHJlZykgJiAweGZmKSk7CisJKHZvaWQpUlJFRzMyKFBDSUVfUE9SVF9JTkRFWCk7CisJV1JFRzMyKFBDSUVfUE9SVF9EQVRBLCAodikpOworCSh2b2lkKVJSRUczMihQQ0lFX1BPUlRfREFUQSk7Cit9CisKKworLyoKKyAqIENQICYgUmluZworICovCit2b2lkIHI2MDBfY3Bfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlXUkVHMzIoUl8wMDg2RDhfQ1BfTUVfQ05UTCwgU18wMDg2RDhfQ1BfTUVfSEFMVCgxKSk7Cit9CisKK2ludCByNjAwX2NwX2luaXRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3QgY2hhciAqY2hpcF9uYW1lOworCXNpemVfdCBwZnBfcmVxX3NpemUsIG1lX3JlcV9zaXplOworCWNoYXIgZndfbmFtZVszMF07CisJaW50IGVycjsKKworCURSTV9ERUJVRygiXG4iKTsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJyYWRlb25fY3AiLCAwLCBOVUxMLCAwKTsKKwllcnIgPSBJU19FUlIocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInJhZGVvbl9jcDogRmFpbGVkIHRvIHJlZ2lzdGVyIGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUjYwMDogY2hpcF9uYW1lID0gIlI2MDAiOyBicmVhazsKKwljYXNlIENISVBfUlY2MTA6IGNoaXBfbmFtZSA9ICJSVjYxMCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjYzMDogY2hpcF9uYW1lID0gIlJWNjMwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNjIwOiBjaGlwX25hbWUgPSAiUlY2MjAiOyBicmVhazsKKwljYXNlIENISVBfUlY2MzU6IGNoaXBfbmFtZSA9ICJSVjYzNSI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDogY2hpcF9uYW1lID0gIlJWNjcwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDogY2hpcF9uYW1lID0gIlJTNzgwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNzcwOiBjaGlwX25hbWUgPSAiUlY3NzAiOyBicmVhazsKKwljYXNlIENISVBfUlY3MzA6CisJY2FzZSBDSElQX1JWNzQwOiBjaGlwX25hbWUgPSAiUlY3MzAiOyBicmVhazsKKwljYXNlIENISVBfUlY3MTA6IGNoaXBfbmFtZSA9ICJSVjcxMCI7IGJyZWFrOworCWRlZmF1bHQ6IEJVRygpOworCX0KKworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkgeworCQlwZnBfcmVxX3NpemUgPSBSNzAwX1BGUF9VQ09ERV9TSVpFICogNDsKKwkJbWVfcmVxX3NpemUgPSBSNzAwX1BNNF9VQ09ERV9TSVpFICogNDsKKwl9IGVsc2UgeworCQlwZnBfcmVxX3NpemUgPSBQRlBfVUNPREVfU0laRSAqIDQ7CisJCW1lX3JlcV9zaXplID0gUE00X1VDT0RFX1NJWkUgKiAxMjsKKwl9CisKKwlEUk1fSU5GTygiTG9hZGluZyAlcyBDUCBNaWNyb2NvZGVcbiIsIGNoaXBfbmFtZSk7CisKKwlzbnByaW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfcGZwLmJpbiIsIGNoaXBfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcmRldi0+cGZwX2Z3LCBmd19uYW1lLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAocmRldi0+cGZwX2Z3LT5zaXplICE9IHBmcF9yZXFfc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyNjAwX2NwOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIHJkZXYtPnBmcF9mdy0+c2l6ZSwgZndfbmFtZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXNucHJpbnRmKGZ3X25hbWUsIHNpemVvZihmd19uYW1lKSwgInJhZGVvbi8lc19tZS5iaW4iLCBjaGlwX25hbWUpOworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnJkZXYtPm1lX2Z3LCBmd19uYW1lLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAocmRldi0+bWVfZnctPnNpemUgIT0gbWVfcmVxX3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicjYwMF9jcDogQm9ndXMgbGVuZ3RoICV6dSBpbiBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICByZGV2LT5tZV9mdy0+c2l6ZSwgZndfbmFtZSk7CisJCWVyciA9IC1FSU5WQUw7CisJfQorb3V0OgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCisJaWYgKGVycikgeworCQlpZiAoZXJyICE9IC1FSU5WQUwpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAicjYwMF9jcDogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkJICAgICAgIGZ3X25hbWUpOworCQlyZWxlYXNlX2Zpcm13YXJlKHJkZXYtPnBmcF9mdyk7CisJCXJkZXYtPnBmcF9mdyA9IE5VTEw7CisJCXJlbGVhc2VfZmlybXdhcmUocmRldi0+bWVfZncpOworCQlyZGV2LT5tZV9mdyA9IE5VTEw7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcjYwMF9jcF9sb2FkX21pY3JvY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwljb25zdCBfX2JlMzIgKmZ3X2RhdGE7CisJaW50IGk7CisKKwlpZiAoIXJkZXYtPm1lX2Z3IHx8ICFyZGV2LT5wZnBfZncpCisJCXJldHVybiAtRUlOVkFMOworCisJcjYwMF9jcF9zdG9wKHJkZXYpOworCisJV1JFRzMyKENQX1JCX0NOVEwsIFJCX05PX1VQREFURSB8IFJCX0JMS1NaKDE1KSB8IFJCX0JVRlNaKDMpKTsKKworCS8qIFJlc2V0IGNwICovCisJV1JFRzMyKEdSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9DUCk7CisJUlJFRzMyKEdSQk1fU09GVF9SRVNFVCk7CisJbWRlbGF5KDE1KTsKKwlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCVdSRUczMihDUF9NRV9SQU1fV0FERFIsIDApOworCisJZndfZGF0YSA9IChjb25zdCBfX2JlMzIgKilyZGV2LT5tZV9mdy0+ZGF0YTsKKwlXUkVHMzIoQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkUgKiAzOyBpKyspCisJCVdSRUczMihDUF9NRV9SQU1fREFUQSwKKwkJICAgICAgIGJlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKKworCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopcmRldi0+cGZwX2Z3LT5kYXRhOworCVdSRUczMihDUF9QRlBfVUNPREVfQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCVdSRUczMihDUF9QRlBfVUNPREVfREFUQSwKKwkJICAgICAgIGJlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKKworCVdSRUczMihDUF9QRlBfVUNPREVfQUREUiwgMCk7CisJV1JFRzMyKENQX01FX1JBTV9XQUREUiwgMCk7CisJV1JFRzMyKENQX01FX1JBTV9SQUREUiwgMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByNjAwX2NwX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXVpbnQzMl90IGNwX21lOworCisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgNyk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGNwIGZhaWxlZCB0byBsb2NrIHJpbmcgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX01FX0lOSVRJQUxJWkUsIDUpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDEpOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKSB7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4Myk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHJkZXYtPmNvbmZpZy5yNjAwLm1heF9od19jb250ZXh0cyAtIDEpOworCX0gZWxzZSB7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4MCk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfaHdfY29udGV4dHMgLSAxKTsKKwl9CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUM19NRV9JTklUSUFMSVpFX0RFVklDRV9JRCgxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKKworCWNwX21lID0gMHhmZjsKKwlXUkVHMzIoUl8wMDg2RDhfQ1BfTUVfQ05UTCwgY3BfbWUpOworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9jcF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKwl1MzIgcmJfYnVmc3o7CisJaW50IHI7CisKKwkvKiBSZXNldCBjcCAqLworCVdSRUczMihHUkJNX1NPRlRfUkVTRVQsIFNPRlRfUkVTRVRfQ1ApOworCVJSRUczMihHUkJNX1NPRlRfUkVTRVQpOworCW1kZWxheSgxNSk7CisJV1JFRzMyKEdSQk1fU09GVF9SRVNFVCwgMCk7CisKKwkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLworCXJiX2J1ZnN6ID0gZHJtX29yZGVyKHJkZXYtPmNwLnJpbmdfc2l6ZSAvIDgpOworI2lmZGVmIF9fQklHX0VORElBTgorCVdSRUczMihDUF9SQl9DTlRMLCBCVUZfU1dBUF8zMkJJVCB8IFJCX05PX1VQREFURSB8CisJCShkcm1fb3JkZXIoNDA5Ni84KSA8PCA4KSB8IHJiX2J1ZnN6KTsKKyNlbHNlCisJV1JFRzMyKENQX1JCX0NOVEwsIFJCX05PX1VQREFURSB8IChkcm1fb3JkZXIoNDA5Ni84KSA8PCA4KSB8IHJiX2J1ZnN6KTsKKyNlbmRpZgorCVdSRUczMihDUF9TRU1fV0FJVF9USU1FUiwgMHg0KTsKKworCS8qIFNldCB0aGUgd3JpdGUgcG9pbnRlciBkZWxheSAqLworCVdSRUczMihDUF9SQl9XUFRSX0RFTEFZLCAwKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KKwl0bXAgPSBSUkVHMzIoQ1BfUkJfQ05UTCk7CisJV1JFRzMyKENQX1JCX0NOVEwsIHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKKwlXUkVHMzIoQ1BfUkJfUlBUUl9XUiwgMCk7CisJV1JFRzMyKENQX1JCX1dQVFIsIDApOworCVdSRUczMihDUF9SQl9SUFRSX0FERFIsIHJkZXYtPmNwLmdwdV9hZGRyICYgMHhGRkZGRkZGRik7CisJV1JFRzMyKENQX1JCX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhyZGV2LT5jcC5ncHVfYWRkcikpOworCW1kZWxheSgxKTsKKwlXUkVHMzIoQ1BfUkJfQ05UTCwgdG1wKTsKKworCVdSRUczMihDUF9SQl9CQVNFLCByZGV2LT5jcC5ncHVfYWRkciA+PiA4KTsKKwlXUkVHMzIoQ1BfREVCVUcsICgxIDw8IDI3KSB8ICgxIDw8IDI4KSk7CisKKwlyZGV2LT5jcC5ycHRyID0gUlJFRzMyKENQX1JCX1JQVFIpOworCXJkZXYtPmNwLndwdHIgPSBSUkVHMzIoQ1BfUkJfV1BUUik7CisKKwlyNjAwX2NwX3N0YXJ0KHJkZXYpOworCXJkZXYtPmNwLnJlYWR5ID0gdHJ1ZTsKKwlyID0gcmFkZW9uX3JpbmdfdGVzdChyZGV2KTsKKwlpZiAocikgeworCQlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjYwMF9jcF9jb21taXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJV1JFRzMyKENQX1JCX1dQVFIsIHJkZXYtPmNwLndwdHIpOworCSh2b2lkKVJSRUczMihDUF9SQl9XUFRSKTsKK30KKwordm9pZCByNjAwX3JpbmdfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKQoreworCXUzMiByYl9idWZzejsKKworCS8qIEFsaWduIHJpbmcgc2l6ZSAqLworCXJiX2J1ZnN6ID0gZHJtX29yZGVyKHJpbmdfc2l6ZSAvIDgpOworCXJpbmdfc2l6ZSA9ICgxIDw8IChyYl9idWZzeiArIDEpKSAqIDQ7CisJcmRldi0+Y3AucmluZ19zaXplID0gcmluZ19zaXplOworCXJkZXYtPmNwLmFsaWduX21hc2sgPSAxNiAtIDE7Cit9CisKKworLyoKKyAqIEdQVSBzY3JhdGNoIHJlZ2lzdGVycyBoZWxwZXJzIGZ1bmN0aW9uLgorICovCit2b2lkIHI2MDBfc2NyYXRjaF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCBpOworCisJcmRldi0+c2NyYXRjaC5udW1fcmVnID0gNzsKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+c2NyYXRjaC5udW1fcmVnOyBpKyspIHsKKwkJcmRldi0+c2NyYXRjaC5mcmVlW2ldID0gdHJ1ZTsKKwkJcmRldi0+c2NyYXRjaC5yZWdbaV0gPSBTQ1JBVENIX1JFRzAgKyAoaSAqIDQpOworCX0KK30KKworaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQzMl90IHNjcmF0Y2g7CisJdWludDMyX3QgdG1wID0gMDsKKwl1bnNpZ25lZCBpOworCWludCByOworCisJciA9IHJhZGVvbl9zY3JhdGNoX2dldChyZGV2LCAmc2NyYXRjaCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGNwIGZhaWxlZCB0byBnZXQgc2NyYXRjaCByZWcgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJV1JFRzMyKHNjcmF0Y2gsIDB4Q0FGRURFQUQpOworCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIDMpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBjcCBmYWlsZWQgdG8gbG9jayByaW5nICglZCkuXG4iLCByKTsKKwkJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKKwkJcmV0dXJuIHI7CisJfQorCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgoc2NyYXRjaCAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhERUFEQkVFRik7CisJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJdG1wID0gUlJFRzMyKHNjcmF0Y2gpOworCQlpZiAodG1wID09IDB4REVBREJFRUYpCisJCQlicmVhazsKKwkJRFJNX1VERUxBWSgxKTsKKwl9CisJaWYgKGkgPCByZGV2LT51c2VjX3RpbWVvdXQpIHsKKwkJRFJNX0lORk8oInJpbmcgdGVzdCBzdWNjZWVkZWQgaW4gJWQgdXNlY3NcbiIsIGkpOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigicmFkZW9uOiByaW5nIHRlc3QgZmFpbGVkIChzY3JhdGNoKDB4JTA0WCk9MHglMDhYKVxuIiwKKwkJCSAgc2NyYXRjaCwgdG1wKTsKKwkJciA9IC1FSU5WQUw7CisJfQorCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgc2NyYXRjaCk7CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBXcml0ZWJhY2sKKyAqLworaW50IHI2MDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgeworCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKKwkJCQkJIHRydWUsCisJCQkJCSBSQURFT05fR0VNX0RPTUFJTl9HVFQsCisJCQkJCSBmYWxzZSwgJnJkZXYtPndiLndiX29iaik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIHRvIGNyZWF0ZSBXQiBidWZmZXIgKCVkKS5cbiIsIHIpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJciA9IHJhZGVvbl9vYmplY3RfcGluKHJkZXYtPndiLndiX29iaiwKKwkJCQkgICAgICBSQURFT05fR0VNX0RPTUFJTl9HVFQsCisJCQkJICAgICAgJnJkZXYtPndiLmdwdV9hZGRyKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlyID0gcmFkZW9uX29iamVjdF9rbWFwKHJkZXYtPndiLndiX29iaiwgKHZvaWQgKiopJnJkZXYtPndiLndiKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0KKwlXUkVHMzIoU0NSQVRDSF9BRERSLCAocmRldi0+d2IuZ3B1X2FkZHIgPj4gOCkgJiAweEZGRkZGRkZGKTsKKwlXUkVHMzIoQ1BfUkJfUlBUUl9BRERSLCAocmRldi0+d2IuZ3B1X2FkZHIgKyAxMDI0KSAmIDB4RkZGRkZGRkMpOworCVdSRUczMihDUF9SQl9SUFRSX0FERFJfSEksIHVwcGVyXzMyX2JpdHMocmRldi0+d2IuZ3B1X2FkZHIgKyAxMDI0KSAmIDB4RkYpOworCVdSRUczMihTQ1JBVENIX1VNU0ssIDB4ZmYpOworCXJldHVybiAwOworfQorCit2b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocmRldi0+d2Iud2Jfb2JqKSB7CisJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7CisJCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKKwkJcmFkZW9uX29iamVjdF91bnJlZigmcmRldi0+d2Iud2Jfb2JqKTsKKwkJcmRldi0+d2Iud2IgPSBOVUxMOworCQlyZGV2LT53Yi53Yl9vYmogPSBOVUxMOworCX0KK30KKworCisvKgorICogQ1MKKyAqLwordm9pZCByNjAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCit7CisJLyogRW1pdCBmZW5jZSBzZXF1ZW5jZSAmIGZpcmUgSVJRICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKChyZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGZlbmNlLT5zZXEpOworfQorCitpbnQgcjYwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJICB1aW50NjRfdCBzcmNfb2Zmc2V0LAorCQkgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCisJCSAgdW5zaWduZWQgbnVtX3BhZ2VzLAorCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQoreworCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQoreworCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogNDA5Nik7CisJcjYwMF9rbXNfYmxpdF9jb3B5KHJkZXYsIHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIG51bV9wYWdlcyAqIDQwOTYpOworCXI2MDBfYmxpdF9kb25lX2NvcHkocmRldiwgZmVuY2UpOworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmV0dXJuIDA7Cit9CisKK2ludCByNjAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogRklYTUU6IGltcGxlbWVudCAqLworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9zZXRfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcsCisJCQkgdWludDMyX3QgdGlsaW5nX2ZsYWdzLCB1aW50MzJfdCBwaXRjaCwKKwkJCSB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IG9ial9zaXplKQoreworCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCByNjAwX2NsZWFyX3N1cmZhY2VfcmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgcmVnKQoreworCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KK30KKworCitib29sIHI2MDBfY2FyZF9wb3N0ZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdWludDMyX3QgcmVnOworCisJLyogZmlyc3QgY2hlY2sgQ1JUQ3MgKi8KKwlyZWcgPSBSUkVHMzIoRDFDUlRDX0NPTlRST0wpIHwKKwkJUlJFRzMyKEQyQ1JUQ19DT05UUk9MKTsKKwlpZiAocmVnICYgQ1JUQ19FTikKKwkJcmV0dXJuIHRydWU7CisKKwkvKiB0aGVuIGNoZWNrIE1FTV9TSVpFLCBpbiBjYXNlIHRoZSBjcnRjcyBhcmUgb2ZmICovCisJaWYgKFJSRUczMihDT05GSUdfTUVNU0laRSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitpbnQgcjYwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcjYwMF9ncHVfcmVzZXQocmRldik7CisJcjYwMF9tY19yZXN1bWUocmRldik7CisJciA9IHI2MDBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcjYwMF9ncHVfaW5pdChyZGV2KTsKKworCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKKwkJCSAgICAgICZyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gYmxpdCBvYmplY3QgJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gcmFkZW9uX3JpbmdfaW5pdChyZGV2LCByZGV2LT5jcC5yaW5nX3NpemUpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcjYwMF9jcF9sb2FkX21pY3JvY29kZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHI2MDBfY3BfcmVzdW1lKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcjYwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByNjAwX3ZnYV9zZXRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGJvb2wgc3RhdGUpCit7CisJdWludDMyX3QgdGVtcDsKKworCXRlbXAgPSBSUkVHMzIoQ09ORklHX0NOVEwpOworCWlmIChzdGF0ZSA9PSBmYWxzZSkgeworCQl0ZW1wICY9IH4oMTw8MCk7CisJCXRlbXAgfD0gKDE8PDEpOworCX0gZWxzZSB7CisJCXRlbXAgJj0gfigxPDwxKTsKKwl9CisJV1JFRzMyKENPTkZJR19DTlRMLCB0ZW1wKTsKK30KKworaW50IHI2MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KKwl9CisJLyogcG9zdCBjYXJkICovCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9IGVsc2UgeworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gcjYwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicjYwMCBzdGFydHVwIGZhaWxlZCBvbiByZXN1bWVcbiIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gcjsKK30KKworCitpbnQgcjYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgcmluZyB0byBiZSBlbXB0eSAqLworCXI2MDBfY3Bfc3RvcChyZGV2KTsKKwlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOworCisJcjYwMF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiB1bnBpbiBzaGFkZXJzIGJvICovCisJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CisJcmV0dXJuIDA7Cit9CisKKy8qIFBsYW4gaXMgdG8gbW92ZSBpbml0aWFsaXphdGlvbiBpbiB0aGF0IGZ1bmN0aW9uIGFuZCB1c2UKKyAqIGhlbHBlciBmdW5jdGlvbiBzbyB0aGF0IHJhZGVvbl9kZXZpY2VfaW5pdCBwcmV0dHkgbXVjaAorICogZG8gbm90aGluZyBtb3JlIHRoYW4gY2FsbGluZyBhc2ljIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzCisgKiBzaG91bGQgYWxzbyBhbGxvdyB0byByZW1vdmUgYSBidW5jaCBvZiBjYWxsYmFjayBmdW5jdGlvbgorICogbGlrZSB2cmFtX2luZm8uCisgKi8KK2ludCByNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKKwlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHI2MDBfZGVidWdmc19tY19pbmZvX2luaXQocmRldikpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBtYyAhXG4iKTsKKwl9CisJLyogVGhpcyBkb24ndCBkbyBtdWNoICovCisJciA9IHJhZGVvbl9nZW1faW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogUmVhZCBCSU9TICovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogTXVzdCBiZSBhbiBBVE9NQklPUyAqLworCWlmICghcmRldi0+aXNfYXRvbV9iaW9zKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIFBvc3QgY2FyZCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIXI2MDBfY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyNjAwX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHI2MDBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KKwkJCXI2MDBfZmluaShyZGV2KTsKKwkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKKwkJfQorCQlyZXR1cm4gcjsKKwl9CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZGV2LT5jcC5yaW5nX29iaiA9IE5VTEw7CisJcjYwMF9yaW5nX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCisJaWYgKCFyZGV2LT5tZV9mdyB8fCAhcmRldi0+cGZwX2Z3KSB7CisJCXIgPSByNjAwX2NwX2luaXRfbWljcm9jb2RlKHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSFcbiIpOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisKKwlyID0gcjYwMF9wY2llX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjYwMF9ibGl0X2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgYmxpdHRlciAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKworCXIgPSByNjAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCisJCQlyNjAwX2ZpbmkocmRldik7CisJCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKKwkJCXJldHVybiByNjAwX2luaXQocmRldik7CisJCX0KKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlpZiAocmRldi0+YWNjZWxfd29ya2luZykgeworCQlyID0gcmFkZW9uX2liX3Bvb2xfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKKwkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwkJfQorCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKKwkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogU3VzcGVuZCBvcGVyYXRpb25zICovCisJcjYwMF9zdXNwZW5kKHJkZXYpOworCisJcjYwMF9ibGl0X2ZpbmkocmRldik7CisJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlyNjAwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOworI2lmIF9fT1NfSEFTX0FHUAorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApCisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKyNlbmRpZgorCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKQorCQlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwllbHNlCisJCXJhZGVvbl9jb21iaW9zX2ZpbmkocmRldik7CisJa2ZyZWUocmRldi0+Ymlvcyk7CisJcmRldi0+YmlvcyA9IE5VTEw7CisJcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKK30KKworCisvKgorICogQ1Mgc3R1ZmYKKyAqLwordm9pZCByNjAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJLyogRklYTUU6IGltcGxlbWVudCAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBpYi0+Z3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCB1cHBlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikgJiAweEZGKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBpYi0+bGVuZ3RoX2R3KTsKK30KKworaW50IHI2MDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2liICppYjsKKwl1aW50MzJfdCBzY3JhdGNoOworCXVpbnQzMl90IHRtcCA9IDA7CisJdW5zaWduZWQgaTsKKwlpbnQgcjsKKworCXIgPSByYWRlb25fc2NyYXRjaF9nZXQocmRldiwgJnNjcmF0Y2gpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCVdSRUczMihzY3JhdGNoLCAweENBRkVERUFEKTsKKwlyID0gcmFkZW9uX2liX2dldChyZGV2LCAmaWIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gZ2V0IGliICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCWliLT5wdHJbMF0gPSBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpOworCWliLT5wdHJbMV0gPSAoKHNjcmF0Y2ggLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMik7CisJaWItPnB0clsyXSA9IDB4REVBREJFRUY7CisJaWItPnB0clszXSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls0XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls1XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls2XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls3XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls4XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0cls5XSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0clsxMF0gPSBQQUNLRVQyKDApOworCWliLT5wdHJbMTFdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzEyXSA9IFBBQ0tFVDIoMCk7CisJaWItPnB0clsxM10gPSBQQUNLRVQyKDApOworCWliLT5wdHJbMTRdID0gUEFDS0VUMigwKTsKKwlpYi0+cHRyWzE1XSA9IFBBQ0tFVDIoMCk7CisJaWItPmxlbmd0aF9kdyA9IDE2OworCXIgPSByYWRlb25faWJfc2NoZWR1bGUocmRldiwgaWIpOworCWlmIChyKSB7CisJCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgc2NyYXRjaCk7CisJCXJhZGVvbl9pYl9mcmVlKHJkZXYsICZpYik7CisJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gc2NoZWR1bGUgaWIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHJhZGVvbl9mZW5jZV93YWl0KGliLT5mZW5jZSwgZmFsc2UpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicmFkZW9uOiBmZW5jZSB3YWl0IGZhaWxlZCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJdG1wID0gUlJFRzMyKHNjcmF0Y2gpOworCQlpZiAodG1wID09IDB4REVBREJFRUYpCisJCQlicmVhazsKKwkJRFJNX1VERUxBWSgxKTsKKwl9CisJaWYgKGkgPCByZGV2LT51c2VjX3RpbWVvdXQpIHsKKwkJRFJNX0lORk8oImliIHRlc3Qgc3VjY2VlZGVkIGluICV1IHVzZWNzXG4iLCBpKTsKKwl9IGVsc2UgeworCQlEUk1fRVJST1IoInJhZGVvbjogaWIgdGVzdCBmYWlsZWQgKHNyYWN0aCgweCUwNFgpPTB4JTA4WClcbiIsCisJCQkgIHNjcmF0Y2gsIHRtcCk7CisJCXIgPSAtRUlOVkFMOworCX0KKwlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHNjcmF0Y2gpOworCXJhZGVvbl9pYl9mcmVlKHJkZXYsICZpYik7CisJcmV0dXJuIHI7Cit9CisKKworCisKKy8qCisgKiBEZWJ1Z2ZzIGluZm8KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCitzdGF0aWMgaW50IHI2MDBfZGVidWdmc19jcF9yaW5nX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHJkcCwgd2RwOworCXVuc2lnbmVkIGNvdW50LCBpLCBqOworCisJcmFkZW9uX3JpbmdfZnJlZV9zaXplKHJkZXYpOworCXJkcCA9IFJSRUczMihDUF9SQl9SUFRSKTsKKwl3ZHAgPSBSUkVHMzIoQ1BfUkJfV1BUUik7CisJY291bnQgPSAocmRwICsgcmRldi0+Y3AucmluZ19zaXplIC0gd2RwKSAmIHJkZXYtPmNwLnB0cl9tYXNrOworCXNlcV9wcmludGYobSwgIkNQX1NUQVQgMHglMDh4XG4iLCBSUkVHMzIoQ1BfU1RBVCkpOworCXNlcV9wcmludGYobSwgIkNQX1JCX1dQVFIgMHglMDh4XG4iLCB3ZHApOworCXNlcV9wcmludGYobSwgIkNQX1JCX1JQVFIgMHglMDh4XG4iLCByZHApOworCXNlcV9wcmludGYobSwgIiV1IGZyZWUgZHdvcmRzIGluIHJpbmdcbiIsIHJkZXYtPmNwLnJpbmdfZnJlZV9kdyk7CisJc2VxX3ByaW50ZihtLCAiJXUgZHdvcmRzIGluIHJpbmdcbiIsIGNvdW50KTsKKwlmb3IgKGogPSAwOyBqIDw9IGNvdW50OyBqKyspIHsKKwkJaSA9IChyZHAgKyBqKSAmIHJkZXYtPmNwLnB0cl9tYXNrOworCQlzZXFfcHJpbnRmKG0sICJyWyUwNGRdPTB4JTA4eFxuIiwgaSwgcmRldi0+Y3AucmluZ1tpXSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHI2MDBfZGVidWdmc19tY19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSRUczMl9TWVMobSwgcmRldiwgUl8wMDBFNTBfU1JCTV9TVEFUVVMpOworCURSRUczMl9TWVMobSwgcmRldiwgVk1fTDJfU1RBVFVTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHI2MDBfbWNfaW5mb19saXN0W10gPSB7CisJeyJyNjAwX21jX2luZm8iLCByNjAwX2RlYnVnZnNfbWNfaW5mbywgMCwgTlVMTH0sCisJeyJyNjAwX3JpbmdfaW5mbyIsIHI2MDBfZGVidWdmc19jcF9yaW5nX2luZm8sIDAsIE5VTEx9LAorfTsKKyNlbmRpZgorCitpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlyZXR1cm4gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHI2MDBfbWNfaW5mb19saXN0LCBBUlJBWV9TSVpFKHI2MDBfbWNfaW5mb19saXN0KSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGUyY2NiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwpAQCAtMCwwICsxLDg1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgICBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+CisgKi8KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAicmFkZW9uX2RybS5oIgorI2luY2x1ZGUgInJhZGVvbl9kcnYuaCIKKworI2luY2x1ZGUgInI2MDBfYmxpdF9zaGFkZXJzLmgiCisKKyNkZWZpbmUgRElfUFRfUkVDVExJU1QgICAgICAgIDB4MTEKKyNkZWZpbmUgRElfSU5ERVhfU0laRV8xNl9CSVQgIDB4MAorI2RlZmluZSBESV9TUkNfU0VMX0FVVE9fSU5ERVggMHgyCisKKyNkZWZpbmUgRk1UXzggICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBGTVRfNV82XzUgICAgICAgICAgICAgMHg4CisjZGVmaW5lIEZNVF84XzhfOF84ICAgICAgICAgICAweDFhCisjZGVmaW5lIENPTE9SXzggICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgQ09MT1JfNV82XzUgICAgICAgICAgIDB4OAorI2RlZmluZSBDT0xPUl84XzhfOF84ICAgICAgICAgMHgxYQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9yZW5kZXJfdGFyZ2V0KGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGZvcm1hdCwgaW50IHcsIGludCBoLCB1NjQgZ3B1X2FkZHIpCit7CisJdTMyIGNiX2NvbG9yX2luZm87CisJaW50IHBpdGNoLCBzbGljZTsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwloID0gKGggKyA3KSAmIH43OworCWlmIChoIDwgOCkKKwkJaCA9IDg7CisKKwljYl9jb2xvcl9pbmZvID0gKChmb3JtYXQgPDwgMikgfCAoMSA8PCAyNykpOworCXBpdGNoID0gKHcgLyA4KSAtIDE7CisJc2xpY2UgPSAoKHcgKiBoKSAvIDY0KSAtIDE7CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID4gQ0hJUF9SNjAwKSAmJgorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPCBDSElQX1JWNzcwKSkgeworCQlCRUdJTl9SSU5HKDIxICsgMik7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwkJT1VUX1JJTkcoKFI2MDBfQ0JfQ09MT1IwX0JBU0UgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCQlPVVRfUklORyhncHVfYWRkciA+PiA4KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NVUkZBQ0VfQkFTRV9VUERBVEUsIDApKTsKKwkJT1VUX1JJTkcoMiA8PCAwKTsKKwl9IGVsc2UgeworCQlCRUdJTl9SSU5HKDIxKTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCQlPVVRfUklORygoUjYwMF9DQl9DT0xPUjBfQkFTRSAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJCU9VVF9SSU5HKGdwdV9hZGRyID4+IDgpOworCX0KKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlPVVRfUklORygoUjYwMF9DQl9DT0xPUjBfU0laRSAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoKHBpdGNoIDw8IDApIHwgKHNsaWNlIDw8IDEwKSk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfQ0JfQ09MT1IwX1ZJRVcgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKDApOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX0NCX0NPTE9SMF9JTkZPIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORyhjYl9jb2xvcl9pbmZvKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlPVVRfUklORygoUjYwMF9DQl9DT0xPUjBfVElMRSAtIFI2MDBfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoMCk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfQ0JfQ09MT1IwX0ZSQUcgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKDApOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX0NCX0NPTE9SMF9NQVNLIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygwKTsKKworCUFEVkFOQ0VfUklORygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NwX3NldF9zdXJmYWNlX3N5bmMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAorCQkgICAgdTMyIHN5bmNfdHlwZSwgdTMyIHNpemUsIHU2NCBtY19hZGRyKQoreworCXUzMiBjcF9jb2hlcl9zaXplOworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCWlmIChzaXplID09IDB4ZmZmZmZmZmYpCisJCWNwX2NvaGVyX3NpemUgPSAweGZmZmZmZmZmOworCWVsc2UKKwkJY3BfY29oZXJfc2l6ZSA9ICgoc2l6ZSArIDI1NSkgPj4gOCk7CisKKwlCRUdJTl9SSU5HKDUpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TVVJGQUNFX1NZTkMsIDMpKTsKKwlPVVRfUklORyhzeW5jX3R5cGUpOworCU9VVF9SSU5HKGNwX2NvaGVyX3NpemUpOworCU9VVF9SSU5HKChtY19hZGRyID4+IDgpKTsKKwlPVVRfUklORygxMCk7IC8qIHBvbGwgaW50ZXJ2YWwgKi8KKwlBRFZBTkNFX1JJTkcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfc2hhZGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTY0IGdwdV9hZGRyOworCWludCBpOworCXUzMiAqdnMsICpwczsKKwl1aW50MzJfdCBzcV9wZ21fcmVzb3VyY2VzOworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCS8qIGxvYWQgc2hhZGVycyAqLworCXZzID0gKHUzMiAqKSAoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKyBkZXZfcHJpdi0+YmxpdF92Yi0+b2Zmc2V0KTsKKwlwcyA9ICh1MzIgKikgKChjaGFyICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlICsgZGV2X3ByaXYtPmJsaXRfdmItPm9mZnNldCArIDI1Nik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcjZ4eF92c19zaXplOyBpKyspCisJCXZzW2ldID0gcjZ4eF92c1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgcjZ4eF9wc19zaXplOyBpKyspCisJCXBzW2ldID0gcjZ4eF9wc1tpXTsKKworCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkID0gNTEyOworCisJZ3B1X2FkZHIgPSBkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCArIGRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQ7CisKKwkvKiBzZXR1cCBzaGFkZXIgcmVncyAqLworCXNxX3BnbV9yZXNvdXJjZXMgPSAoMSA8PCAwKTsKKworCUJFR0lOX1JJTkcoOSArIDEyKTsKKwkvKiBWUyAqLworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlPVVRfUklORygoUjYwMF9TUV9QR01fU1RBUlRfVlMgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKGdwdV9hZGRyID4+IDgpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1NRX1BHTV9SRVNPVVJDRVNfVlMgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKHNxX3BnbV9yZXNvdXJjZXMpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1NRX1BHTV9DRl9PRkZTRVRfVlMgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKDApOworCisJLyogUFMgKi8KKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfU1FfUEdNX1NUQVJUX1BTIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygoZ3B1X2FkZHIgKyAyNTYpID4+IDgpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1NRX1BHTV9SRVNPVVJDRVNfUFMgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKHNxX3BnbV9yZXNvdXJjZXMgfCAoMSA8PCAyOCkpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1NRX1BHTV9FWFBPUlRTX1BTIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygyKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlPVVRfUklORygoUjYwMF9TUV9QR01fQ0ZfT0ZGU0VUX1BTIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygwKTsKKwlBRFZBTkNFX1JJTkcoKTsKKworCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCisJCQkgICAgUjYwMF9TSF9BQ1RJT05fRU5BLCA1MTIsIGdwdV9hZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfdnR4X3Jlc291cmNlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTY0IGdwdV9hZGRyKQoreworCXVpbnQzMl90IHNxX3Z0eF9jb25zdGFudF93b3JkMjsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlzcV92dHhfY29uc3RhbnRfd29yZDIgPSAoKChncHVfYWRkciA+PiAzMikgJiAweGZmKSB8ICgxNiA8PCA4KSk7CisKKwlCRUdJTl9SSU5HKDkpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfUkVTT1VSQ0UsIDcpKTsKKwlPVVRfUklORygweDQ2MCk7CisJT1VUX1JJTkcoZ3B1X2FkZHIgJiAweGZmZmZmZmZmKTsKKwlPVVRfUklORyg0OCAtIDEpOworCU9VVF9SSU5HKHNxX3Z0eF9jb25zdGFudF93b3JkMik7CisJT1VUX1JJTkcoMSA8PCAwKTsKKwlPVVRfUklORygwKTsKKwlPVVRfUklORygwKTsKKwlPVVRfUklORyhSNjAwX1NRX1RFWF9WVFhfVkFMSURfQlVGRkVSIDw8IDMwKTsKKwlBRFZBTkNFX1JJTkcoKTsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzg4MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApKQorCQljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAorCQkJCSAgICBSNjAwX1RDX0FDVElPTl9FTkEsIDQ4LCBncHVfYWRkcik7CisJZWxzZQorCQljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAorCQkJCSAgICBSNjAwX1ZDX0FDVElPTl9FTkEsIDQ4LCBncHVfYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X3RleF9yZXNvdXJjZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCisJCSBpbnQgZm9ybWF0LCBpbnQgdywgaW50IGgsIGludCBwaXRjaCwgdTY0IGdwdV9hZGRyKQoreworCXVpbnQzMl90IHNxX3RleF9yZXNvdXJjZV93b3JkMCwgc3FfdGV4X3Jlc291cmNlX3dvcmQxLCBzcV90ZXhfcmVzb3VyY2Vfd29yZDQ7CisJUklOR19MT0NBTFM7CisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKGggPCAxKQorCQloID0gMTsKKworCXNxX3RleF9yZXNvdXJjZV93b3JkMCA9ICgxIDw8IDApOworCXNxX3RleF9yZXNvdXJjZV93b3JkMCB8PSAoKCgocGl0Y2ggPj4gMykgLSAxKSA8PCA4KSB8CisJCQkJICAoKHcgLSAxKSA8PCAxOSkpOworCisJc3FfdGV4X3Jlc291cmNlX3dvcmQxID0gKGZvcm1hdCA8PCAyNik7CisJc3FfdGV4X3Jlc291cmNlX3dvcmQxIHw9ICgoaCAtIDEpIDw8IDApOworCisJc3FfdGV4X3Jlc291cmNlX3dvcmQ0ID0gKCgxIDw8IDE0KSB8CisJCQkJICgwIDw8IDE2KSB8CisJCQkJICgxIDw8IDE5KSB8CisJCQkJICgyIDw8IDIyKSB8CisJCQkJICgzIDw8IDI1KSk7CisKKwlCRUdJTl9SSU5HKDkpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfUkVTT1VSQ0UsIDcpKTsKKwlPVVRfUklORygwKTsKKwlPVVRfUklORyhzcV90ZXhfcmVzb3VyY2Vfd29yZDApOworCU9VVF9SSU5HKHNxX3RleF9yZXNvdXJjZV93b3JkMSk7CisJT1VUX1JJTkcoZ3B1X2FkZHIgPj4gOCk7CisJT1VUX1JJTkcoZ3B1X2FkZHIgPj4gOCk7CisJT1VUX1JJTkcoc3FfdGV4X3Jlc291cmNlX3dvcmQ0KTsKKwlPVVRfUklORygwKTsKKwlPVVRfUklORyhSNjAwX1NRX1RFWF9WVFhfVkFMSURfVEVYVFVSRSA8PCAzMCk7CisJQURWQU5DRV9SSU5HKCk7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfc2Npc3NvcnMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCit7CisJUklOR19MT0NBTFM7CisJRFJNX0RFQlVHKCJcbiIpOworCisJQkVHSU5fUklORygxMik7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMikpOworCU9VVF9SSU5HKChSNjAwX1BBX1NDX1NDUkVFTl9TQ0lTU09SX1RMIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygoeDEgPDwgMCkgfCAoeTEgPDwgMTYpKTsKKwlPVVRfUklORygoeDIgPDwgMCkgfCAoeTIgPDwgMTYpKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09OVEVYVF9SRUcsIDIpKTsKKwlPVVRfUklORygoUjYwMF9QQV9TQ19HRU5FUklDX1NDSVNTT1JfVEwgLSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCU9VVF9SSU5HKCh4MSA8PCAwKSB8ICh5MSA8PCAxNikgfCAoMSA8PCAzMSkpOworCU9VVF9SSU5HKCh4MiA8PCAwKSB8ICh5MiA8PCAxNikpOworCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05URVhUX1JFRywgMikpOworCU9VVF9SSU5HKChSNjAwX1BBX1NDX1dJTkRPV19TQ0lTU09SX1RMIC0gUjYwMF9TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORygoeDEgPDwgMCkgfCAoeTEgPDwgMTYpIHwgKDEgPDwgMzEpKTsKKwlPVVRfUklORygoeDIgPDwgMCkgfCAoeTIgPDwgMTYpKTsKKwlBRFZBTkNFX1JJTkcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkcmF3X2F1dG8oZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCUJFR0lOX1JJTkcoMTApOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09ORklHX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1ZHVF9QUklNSVRJVkVfVFlQRSAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORyhESV9QVF9SRUNUTElTVCk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfSU5ERVhfVFlQRSwgMCkpOworCU9VVF9SSU5HKERJX0lOREVYX1NJWkVfMTZfQklUKTsKKworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9OVU1fSU5TVEFOQ0VTLCAwKSk7CisJT1VUX1JJTkcoMSk7CisKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfRFJBV19JTkRFWF9BVVRPLCAxKSk7CisJT1VUX1JJTkcoMyk7CisJT1VUX1JJTkcoRElfU1JDX1NFTF9BVVRPX0lOREVYKTsKKworCUFEVkFOQ0VfUklORygpOworCUNPTU1JVF9SSU5HKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X2RlZmF1bHRfc3RhdGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWludCBpOworCXUzMiBzcV9jb25maWcsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzI7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMjsKKwlpbnQgbnVtX3BzX2dwcnMsIG51bV92c19ncHJzLCBudW1fdGVtcF9ncHJzLCBudW1fZ3NfZ3BycywgbnVtX2VzX2dwcnM7CisJaW50IG51bV9wc190aHJlYWRzLCBudW1fdnNfdGhyZWFkcywgbnVtX2dzX3RocmVhZHMsIG51bV9lc190aHJlYWRzOworCWludCBudW1fcHNfc3RhY2tfZW50cmllcywgbnVtX3ZzX3N0YWNrX2VudHJpZXMsIG51bV9nc19zdGFja19lbnRyaWVzLCBudW1fZXNfc3RhY2tfZW50cmllczsKKwlSSU5HX0xPQ0FMUzsKKworCXN3aXRjaCAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykpIHsKKwljYXNlIENISVBfUjYwMDoKKwkJbnVtX3BzX2dwcnMgPSAxOTI7CisJCW51bV92c19ncHJzID0gNTY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxMzY7CisJCW51bV92c190aHJlYWRzID0gNDg7CisJCW51bV9nc190aHJlYWRzID0gNDsKKwkJbnVtX2VzX3RocmVhZHMgPSA0OworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMDsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MzA6CisJY2FzZSBDSElQX1JWNjM1OgorCQludW1fcHNfZ3BycyA9IDg0OworCQludW1fdnNfZ3BycyA9IDM2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTQ0OworCQludW1fdnNfdGhyZWFkcyA9IDQwOworCQludW1fZ3NfdGhyZWFkcyA9IDQ7CisJCW51bV9lc190aHJlYWRzID0gNDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAzMjsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjEwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JTODgwOgorCWRlZmF1bHQ6CisJCW51bV9wc19ncHJzID0gODQ7CisJCW51bV92c19ncHJzID0gMzY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxMzY7CisJCW51bV92c190aHJlYWRzID0gNDg7CisJCW51bV9nc190aHJlYWRzID0gNDsKKwkJbnVtX2VzX3RocmVhZHMgPSA0OworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQwOworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDMyOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDE2OworCQlicmVhazsKKwljYXNlIENISVBfUlY2NzA6CisJCW51bV9wc19ncHJzID0gMTQ0OworCQludW1fdnNfZ3BycyA9IDQwOworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTM2OworCQludW1fdnNfdGhyZWFkcyA9IDQ4OworCQludW1fZ3NfdGhyZWFkcyA9IDQ7CisJCW51bV9lc190aHJlYWRzID0gNDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAzMjsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzcwOgorCQludW1fcHNfZ3BycyA9IDE5MjsKKwkJbnVtX3ZzX2dwcnMgPSA1NjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDE4ODsKKwkJbnVtX3ZzX3RocmVhZHMgPSA2MDsKKwkJbnVtX2dzX3RocmVhZHMgPSAwOworCQludW1fZXNfdGhyZWFkcyA9IDA7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gMjU2OworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAwOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDA7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjczMDoKKwljYXNlIENISVBfUlY3NDA6CisJCW51bV9wc19ncHJzID0gODQ7CisJCW51bV92c19ncHJzID0gMzY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxODg7CisJCW51bV92c190aHJlYWRzID0gNjA7CisJCW51bV9nc190aHJlYWRzID0gMDsKKwkJbnVtX2VzX3RocmVhZHMgPSAwOworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMDsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJCW51bV9wc19ncHJzID0gMTkyOworCQludW1fdnNfZ3BycyA9IDU2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTQ0OworCQludW1fdnNfdGhyZWFkcyA9IDQ4OworCQludW1fZ3NfdGhyZWFkcyA9IDA7CisJCW51bV9lc190aHJlYWRzID0gMDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gMTI4OworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDA7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjEwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3ODApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTODgwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjcxMCkpCisJCXNxX2NvbmZpZyA9IDA7CisJZWxzZQorCQlzcV9jb25maWcgPSBSNjAwX1ZDX0VOQUJMRTsKKworCXNxX2NvbmZpZyB8PSAoUjYwMF9EWDlfQ09OU1RTIHwKKwkJICAgICAgUjYwMF9BTFVfSU5TVF9QUkVGRVJfVkVDVE9SIHwKKwkJICAgICAgUjYwMF9QU19QUklPKDApIHwKKwkJICAgICAgUjYwMF9WU19QUklPKDEpIHwKKwkJICAgICAgUjYwMF9HU19QUklPKDIpIHwKKwkJICAgICAgUjYwMF9FU19QUklPKDMpKTsKKworCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoUjYwMF9OVU1fUFNfR1BSUyhudW1fcHNfZ3BycykgfAorCQkJCSAgUjYwMF9OVU1fVlNfR1BSUyhudW1fdnNfZ3BycykgfAorCQkJCSAgUjYwMF9OVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7CisJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19HUFJTKG51bV9nc19ncHJzKSB8CisJCQkJICBSNjAwX05VTV9FU19HUFJTKG51bV9lc19ncHJzKSk7CisJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUyhudW1fcHNfdGhyZWFkcykgfAorCQkJCSAgIFI2MDBfTlVNX1ZTX1RIUkVBRFMobnVtX3ZzX3RocmVhZHMpIHwKKwkJCQkgICBSNjAwX05VTV9HU19USFJFQURTKG51bV9nc190aHJlYWRzKSB8CisJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUyhudW1fZXNfdGhyZWFkcykpOworCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19TVEFDS19FTlRSSUVTKG51bV9wc19zdGFja19lbnRyaWVzKSB8CisJCQkJICAgIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKKwlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoUjYwMF9OVU1fR1NfU1RBQ0tfRU5UUklFUyhudW1fZ3Nfc3RhY2tfZW50cmllcykgfAorCQkJCSAgICBSNjAwX05VTV9FU19TVEFDS19FTlRSSUVTKG51bV9lc19zdGFja19lbnRyaWVzKSk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkgeworCQlCRUdJTl9SSU5HKHI3eHhfZGVmYXVsdF9zaXplICsgMTApOworCQlmb3IgKGkgPSAwOyBpIDwgcjd4eF9kZWZhdWx0X3NpemU7IGkrKykKKwkJCU9VVF9SSU5HKHI3eHhfZGVmYXVsdF9zdGF0ZVtpXSk7CisJfSBlbHNlIHsKKwkJQkVHSU5fUklORyhyNnh4X2RlZmF1bHRfc2l6ZSArIDEwKTsKKwkJZm9yIChpID0gMDsgaSA8IHI2eHhfZGVmYXVsdF9zaXplOyBpKyspCisJCQlPVVRfUklORyhyNnh4X2RlZmF1bHRfc3RhdGVbaV0pOworCX0KKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfRVZFTlRfV1JJVEUsIDApKTsKKwlPVVRfUklORyhSNjAwX0NBQ0hFX0ZMVVNIX0FORF9JTlZfRVZFTlQpOworCS8qIFNRIGNvbmZpZyAqLworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09ORklHX1JFRywgNikpOworCU9VVF9SSU5HKChSNjAwX1NRX0NPTkZJRyAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORyhzcV9jb25maWcpOworCU9VVF9SSU5HKHNxX2dwcl9yZXNvdXJjZV9tZ210XzEpOworCU9VVF9SSU5HKHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOworCU9VVF9SSU5HKHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKKwlPVVRfUklORyhzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOworCU9VVF9SSU5HKHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7CisJQURWQU5DRV9SSU5HKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaTJmKHVpbnQzMl90IGlucHV0KQoreworCXUzMiByZXN1bHQsIGksIGV4cG9uZW50LCBmcmFjdGlvbjsKKworCWlmICgoaW5wdXQgJiAweDNmZmYpID09IDApCisJCXJlc3VsdCA9IDA7IC8qIDAgaXMgYSBzcGVjaWFsIGNhc2UgKi8KKwllbHNlIHsKKwkJZXhwb25lbnQgPSAxNDA7IC8qIGV4cG9uZW50IGJpYXNlZCBieSAxMjc7ICovCisJCWZyYWN0aW9uID0gKGlucHV0ICYgMHgzZmZmKSA8PCAxMDsgLyogY2hlYXQgYW5kIG9ubHkKKwkJCQkJCSAgICAgIGhhbmRsZSBudW1iZXJzIGJlbG93IDJeXjE1ICovCisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlpZiAoZnJhY3Rpb24gJiAweDgwMDAwMCkKKwkJCQlicmVhazsKKwkJCWVsc2UgeworCQkJCWZyYWN0aW9uID0gZnJhY3Rpb24gPDwgMTsgLyoga2VlcAorCQkJCQkJCSAgICAgc2hpZnRpbmcgbGVmdCB1bnRpbCB0b3AgYml0ID0gMSAqLworCQkJCWV4cG9uZW50ID0gZXhwb25lbnQgLSAxOworCQkJfQorCQl9CisJCXJlc3VsdCA9IGV4cG9uZW50IDw8IDIzIHwgKGZyYWN0aW9uICYgMHg3ZmZmZmYpOyAvKiBtYXNrCisJCQkJCQkJCSAgICBvZmYgdG9wIGJpdDsgYXNzdW1lZCAxICovCisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcjYwMF9ub21tX2dldF92YihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZGV2X3ByaXYtPmJsaXRfdmIgPSByYWRlb25fZnJlZWxpc3RfZ2V0KGRldik7CisJaWYgKCFkZXZfcHJpdi0+YmxpdF92YikgeworCQlEUk1fRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSB2ZXJ0ZXggYnVmZmVyIGZvciBibGl0XG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcjYwMF9ub21tX3B1dF92YihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCA9IDA7CisJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgZGV2X3ByaXYtPmJsaXRfdmItPmZpbGVfcHJpdi0+bWFzdGVyLCBkZXZfcHJpdi0+YmxpdF92Yik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcjYwMF9ub21tX2dldF92Yl9wdHIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXJldHVybiAoKChjaGFyICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlICsKKwkJIGRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQgKyBkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCkpOworfQorCitpbnQKK3I2MDBfcHJlcGFyZV9ibGl0X2NvcHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlyNjAwX25vbW1fZ2V0X3ZiKGRldik7CisKKwlkZXZfcHJpdi0+YmxpdF92Yi0+ZmlsZV9wcml2ID0gZmlsZV9wcml2OworCisJc2V0X2RlZmF1bHRfc3RhdGUoZGV2X3ByaXYpOworCXNldF9zaGFkZXJzKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkCityNjAwX2RvbmVfYmxpdF9jb3B5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlCRUdJTl9SSU5HKDUpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9FVkVOVF9XUklURSwgMCkpOworCU9VVF9SSU5HKFI2MDBfQ0FDSEVfRkxVU0hfQU5EX0lOVl9FVkVOVCk7CisJLyogd2FpdCBmb3IgM0QgaWRsZSBjbGVhbiAqLworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09ORklHX1JFRywgMSkpOworCU9VVF9SSU5HKChSNjAwX1dBSVRfVU5USUwgLSBSNjAwX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMik7CisJT1VUX1JJTkcoUkFERU9OX1dBSVRfM0RfSURMRSB8IFJBREVPTl9XQUlUXzNEX0lETEVDTEVBTik7CisKKwlBRFZBTkNFX1JJTkcoKTsKKwlDT01NSVRfUklORygpOworCisJcjYwMF9ub21tX3B1dF92YihkZXYpOworfQorCit2b2lkCityNjAwX2JsaXRfY29weShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCSAgICAgICB1aW50NjRfdCBzcmNfZ3B1X2FkZHIsIHVpbnQ2NF90IGRzdF9ncHVfYWRkciwKKwkgICAgICAgaW50IHNpemVfYnl0ZXMpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgbWF4X2J5dGVzOworCXU2NCB2Yl9hZGRyOworCXUzMiAqdmI7CisKKwl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CisKKwlpZiAoKHNpemVfYnl0ZXMgJiAzKSB8fCAoc3JjX2dwdV9hZGRyICYgMykgfHwgKGRzdF9ncHVfYWRkciAmIDMpKSB7CisJCW1heF9ieXRlcyA9IDgxOTI7CisKKwkJd2hpbGUgKHNpemVfYnl0ZXMpIHsKKwkJCWludCBjdXJfc2l6ZSA9IHNpemVfYnl0ZXM7CisJCQlpbnQgc3JjX3ggPSBzcmNfZ3B1X2FkZHIgJiAyNTU7CisJCQlpbnQgZHN0X3ggPSBkc3RfZ3B1X2FkZHIgJiAyNTU7CisJCQlpbnQgaCA9IDE7CisJCQlzcmNfZ3B1X2FkZHIgPSBzcmNfZ3B1X2FkZHIgJiB+MjU1OworCQkJZHN0X2dwdV9hZGRyID0gZHN0X2dwdV9hZGRyICYgfjI1NTsKKworCQkJaWYgKCFzcmNfeCAmJiAhZHN0X3gpIHsKKwkJCQloID0gKGN1cl9zaXplIC8gbWF4X2J5dGVzKTsKKwkJCQlpZiAoaCA+IDgxOTIpCisJCQkJCWggPSA4MTkyOworCQkJCWlmIChoID09IDApCisJCQkJCWggPSAxOworCQkJCWVsc2UKKwkJCQkJY3VyX3NpemUgPSBtYXhfYnl0ZXM7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdXJfc2l6ZSA+IG1heF9ieXRlcykKKwkJCQkJY3VyX3NpemUgPSBtYXhfYnl0ZXM7CisJCQkJaWYgKGN1cl9zaXplID4gKG1heF9ieXRlcyAtIGRzdF94KSkKKwkJCQkJY3VyX3NpemUgPSAobWF4X2J5dGVzIC0gZHN0X3gpOworCQkJCWlmIChjdXJfc2l6ZSA+IChtYXhfYnl0ZXMgLSBzcmNfeCkpCisJCQkJCWN1cl9zaXplID0gKG1heF9ieXRlcyAtIHNyY194KTsKKwkJCX0KKworCQkJaWYgKChkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCArIDQ4KSA+IGRldl9wcml2LT5ibGl0X3ZiLT50b3RhbCkgeworCisJCQkJcjYwMF9ub21tX3B1dF92YihkZXYpOworCQkJCXI2MDBfbm9tbV9nZXRfdmIoZGV2KTsKKwkJCQlpZiAoIWRldl9wcml2LT5ibGl0X3ZiKQorCQkJCQlyZXR1cm47CisJCQkJc2V0X3NoYWRlcnMoZGV2KTsKKwkJCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CisJCQl9CisKKwkJCXZiWzBdID0gaTJmKGRzdF94KTsKKwkJCXZiWzFdID0gMDsKKwkJCXZiWzJdID0gaTJmKHNyY194KTsKKwkJCXZiWzNdID0gMDsKKworCQkJdmJbNF0gPSBpMmYoZHN0X3gpOworCQkJdmJbNV0gPSBpMmYoaCk7CisJCQl2Yls2XSA9IGkyZihzcmNfeCk7CisJCQl2Yls3XSA9IGkyZihoKTsKKworCQkJdmJbOF0gPSBpMmYoZHN0X3ggKyBjdXJfc2l6ZSk7CisJCQl2Yls5XSA9IGkyZihoKTsKKwkJCXZiWzEwXSA9IGkyZihzcmNfeCArIGN1cl9zaXplKTsKKwkJCXZiWzExXSA9IGkyZihoKTsKKworCQkJLyogc3JjICovCisJCQlzZXRfdGV4X3Jlc291cmNlKGRldl9wcml2LCBGTVRfOCwKKwkJCQkJIHNyY194ICsgY3VyX3NpemUsIGgsIHNyY194ICsgY3VyX3NpemUsCisJCQkJCSBzcmNfZ3B1X2FkZHIpOworCisJCQljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAorCQkJCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCAoc3JjX3ggKyBjdXJfc2l6ZSAqIGgpLCBzcmNfZ3B1X2FkZHIpOworCisJCQkvKiBkc3QgKi8KKwkJCXNldF9yZW5kZXJfdGFyZ2V0KGRldl9wcml2LCBDT0xPUl84LAorCQkJCQkgIGRzdF94ICsgY3VyX3NpemUsIGgsCisJCQkJCSAgZHN0X2dwdV9hZGRyKTsKKworCQkJLyogc2Npc3NvcnMgKi8KKwkJCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHN0X3gsIDAsIGRzdF94ICsgY3VyX3NpemUsIGgpOworCisJCQkvKiBWZXJ0ZXggYnVmZmVyIHNldHVwICovCisJCQl2Yl9hZGRyID0gZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgKworCQkJCWRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQgKworCQkJCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkOworCQkJc2V0X3Z0eF9yZXNvdXJjZShkZXZfcHJpdiwgdmJfYWRkcik7CisKKwkJCS8qIGRyYXcgKi8KKwkJCWRyYXdfYXV0byhkZXZfcHJpdik7CisKKwkJCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCisJCQkJCSAgICBSNjAwX0NCX0FDVElPTl9FTkEgfCBSNjAwX0NCMF9ERVNUX0JBU0VfRU5BLAorCQkJCQkgICAgY3VyX3NpemUgKiBoLCBkc3RfZ3B1X2FkZHIpOworCisJCQl2YiArPSAxMjsKKwkJCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkICs9IDEyICogNDsKKworCQkJc3JjX2dwdV9hZGRyICs9IGN1cl9zaXplICogaDsKKwkJCWRzdF9ncHVfYWRkciArPSBjdXJfc2l6ZSAqIGg7CisJCQlzaXplX2J5dGVzIC09IGN1cl9zaXplICogaDsKKwkJfQorCX0gZWxzZSB7CisJCW1heF9ieXRlcyA9IDgxOTIgKiA0OworCisJCXdoaWxlIChzaXplX2J5dGVzKSB7CisJCQlpbnQgY3VyX3NpemUgPSBzaXplX2J5dGVzOworCQkJaW50IHNyY194ID0gKHNyY19ncHVfYWRkciAmIDI1NSk7CisJCQlpbnQgZHN0X3ggPSAoZHN0X2dwdV9hZGRyICYgMjU1KTsKKwkJCWludCBoID0gMTsKKwkJCXNyY19ncHVfYWRkciA9IHNyY19ncHVfYWRkciAmIH4yNTU7CisJCQlkc3RfZ3B1X2FkZHIgPSBkc3RfZ3B1X2FkZHIgJiB+MjU1OworCisJCQlpZiAoIXNyY194ICYmICFkc3RfeCkgeworCQkJCWggPSAoY3VyX3NpemUgLyBtYXhfYnl0ZXMpOworCQkJCWlmIChoID4gODE5MikKKwkJCQkJaCA9IDgxOTI7CisJCQkJaWYgKGggPT0gMCkKKwkJCQkJaCA9IDE7CisJCQkJZWxzZQorCQkJCQljdXJfc2l6ZSA9IG1heF9ieXRlczsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGN1cl9zaXplID4gbWF4X2J5dGVzKQorCQkJCQljdXJfc2l6ZSA9IG1heF9ieXRlczsKKwkJCQlpZiAoY3VyX3NpemUgPiAobWF4X2J5dGVzIC0gZHN0X3gpKQorCQkJCQljdXJfc2l6ZSA9IChtYXhfYnl0ZXMgLSBkc3RfeCk7CisJCQkJaWYgKGN1cl9zaXplID4gKG1heF9ieXRlcyAtIHNyY194KSkKKwkJCQkJY3VyX3NpemUgPSAobWF4X2J5dGVzIC0gc3JjX3gpOworCQkJfQorCisJCQlpZiAoKGRldl9wcml2LT5ibGl0X3ZiLT51c2VkICsgNDgpID4gZGV2X3ByaXYtPmJsaXRfdmItPnRvdGFsKSB7CisJCQkJcjYwMF9ub21tX3B1dF92YihkZXYpOworCQkJCXI2MDBfbm9tbV9nZXRfdmIoZGV2KTsKKwkJCQlpZiAoIWRldl9wcml2LT5ibGl0X3ZiKQorCQkJCQlyZXR1cm47CisKKwkJCQlzZXRfc2hhZGVycyhkZXYpOworCQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKKwkJCX0KKworCQkJdmJbMF0gPSBpMmYoZHN0X3ggLyA0KTsKKwkJCXZiWzFdID0gMDsKKwkJCXZiWzJdID0gaTJmKHNyY194IC8gNCk7CisJCQl2YlszXSA9IDA7CisKKwkJCXZiWzRdID0gaTJmKGRzdF94IC8gNCk7CisJCQl2Yls1XSA9IGkyZihoKTsKKwkJCXZiWzZdID0gaTJmKHNyY194IC8gNCk7CisJCQl2Yls3XSA9IGkyZihoKTsKKworCQkJdmJbOF0gPSBpMmYoKGRzdF94ICsgY3VyX3NpemUpIC8gNCk7CisJCQl2Yls5XSA9IGkyZihoKTsKKwkJCXZiWzEwXSA9IGkyZigoc3JjX3ggKyBjdXJfc2l6ZSkgLyA0KTsKKwkJCXZiWzExXSA9IGkyZihoKTsKKworCQkJLyogc3JjICovCisJCQlzZXRfdGV4X3Jlc291cmNlKGRldl9wcml2LCBGTVRfOF84XzhfOCwKKwkJCQkJIChzcmNfeCArIGN1cl9zaXplKSAvIDQsCisJCQkJCSBoLCAoc3JjX3ggKyBjdXJfc2l6ZSkgLyA0LAorCQkJCQkgc3JjX2dwdV9hZGRyKTsKKworCQkJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKKwkJCQkJICAgIFI2MDBfVENfQUNUSU9OX0VOQSwgKHNyY194ICsgY3VyX3NpemUgKiBoKSwgc3JjX2dwdV9hZGRyKTsKKworCQkJLyogZHN0ICovCisJCQlzZXRfcmVuZGVyX3RhcmdldChkZXZfcHJpdiwgQ09MT1JfOF84XzhfOCwKKwkJCQkJICBkc3RfeCArIGN1cl9zaXplLCBoLAorCQkJCQkgIGRzdF9ncHVfYWRkcik7CisKKwkJCS8qIHNjaXNzb3JzICovCisJCQlzZXRfc2Npc3NvcnMoZGV2X3ByaXYsIChkc3RfeCAvIDQpLCAwLCAoZHN0X3ggKyBjdXJfc2l6ZSAvIDQpLCBoKTsKKworCQkJLyogVmVydGV4IGJ1ZmZlciBzZXR1cCAqLworCQkJdmJfYWRkciA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsKKwkJCQlkZXZfcHJpdi0+YmxpdF92Yi0+b2Zmc2V0ICsKKwkJCQlkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZDsKKwkJCXNldF92dHhfcmVzb3VyY2UoZGV2X3ByaXYsIHZiX2FkZHIpOworCisJCQkvKiBkcmF3ICovCisJCQlkcmF3X2F1dG8oZGV2X3ByaXYpOworCisJCQljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAorCQkJCQkgICAgUjYwMF9DQl9BQ1RJT05fRU5BIHwgUjYwMF9DQjBfREVTVF9CQVNFX0VOQSwKKwkJCQkJICAgIGN1cl9zaXplICogaCwgZHN0X2dwdV9hZGRyKTsKKworCQkJdmIgKz0gMTI7CisJCQlkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCArPSAxMiAqIDQ7CisKKwkJCXNyY19ncHVfYWRkciArPSBjdXJfc2l6ZSAqIGg7CisJCQlkc3RfZ3B1X2FkZHIgKz0gY3VyX3NpemUgKiBoOworCQkJc2l6ZV9ieXRlcyAtPSBjdXJfc2l6ZSAqIGg7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3I2MDBfYmxpdF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgIHVpbnQ2NF90IHNyY19ncHVfYWRkciwgdWludDY0X3QgZHN0X2dwdV9hZGRyLAorCSAgICAgICBpbnQgc3gsIGludCBzeSwgaW50IGR4LCBpbnQgZHksCisJICAgICAgIGludCB3LCBpbnQgaCwgaW50IHNyY19waXRjaCwgaW50IGRzdF9waXRjaCwgaW50IGNwcCkKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBjYl9mb3JtYXQsIHRleF9mb3JtYXQ7CisJdTY0IHZiX2FkZHI7CisJdTMyICp2YjsKKworCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKKworCWlmICgoZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKyA0OCkgPiBkZXZfcHJpdi0+YmxpdF92Yi0+dG90YWwpIHsKKworCQlyNjAwX25vbW1fcHV0X3ZiKGRldik7CisJCXI2MDBfbm9tbV9nZXRfdmIoZGV2KTsKKwkJaWYgKCFkZXZfcHJpdi0+YmxpdF92YikKKwkJCXJldHVybjsKKworCQlzZXRfc2hhZGVycyhkZXYpOworCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CisJfQorCisJaWYgKGNwcCA9PSA0KSB7CisJCWNiX2Zvcm1hdCA9IENPTE9SXzhfOF84Xzg7CisJCXRleF9mb3JtYXQgPSBGTVRfOF84XzhfODsKKwl9IGVsc2UgaWYgKGNwcCA9PSAyKSB7CisJCWNiX2Zvcm1hdCA9IENPTE9SXzVfNl81OworCQl0ZXhfZm9ybWF0ID0gRk1UXzVfNl81OworCX0gZWxzZSB7CisJCWNiX2Zvcm1hdCA9IENPTE9SXzg7CisJCXRleF9mb3JtYXQgPSBGTVRfODsKKwl9CisKKwl2YlswXSA9IGkyZihkeCk7CisJdmJbMV0gPSBpMmYoZHkpOworCXZiWzJdID0gaTJmKHN4KTsKKwl2YlszXSA9IGkyZihzeSk7CisKKwl2Yls0XSA9IGkyZihkeCk7CisJdmJbNV0gPSBpMmYoZHkgKyBoKTsKKwl2Yls2XSA9IGkyZihzeCk7CisJdmJbN10gPSBpMmYoc3kgKyBoKTsKKworCXZiWzhdID0gaTJmKGR4ICsgdyk7CisJdmJbOV0gPSBpMmYoZHkgKyBoKTsKKwl2YlsxMF0gPSBpMmYoc3ggKyB3KTsKKwl2YlsxMV0gPSBpMmYoc3kgKyBoKTsKKworCS8qIHNyYyAqLworCXNldF90ZXhfcmVzb3VyY2UoZGV2X3ByaXYsIHRleF9mb3JtYXQsCisJCQkgc3JjX3BpdGNoIC8gY3BwLAorCQkJIHN5ICsgaCwgc3JjX3BpdGNoIC8gY3BwLAorCQkJIHNyY19ncHVfYWRkcik7CisKKwljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAorCQkJICAgIFI2MDBfVENfQUNUSU9OX0VOQSwgKHNyY19waXRjaCAqIChzeSArIGgpKSwgc3JjX2dwdV9hZGRyKTsKKworCS8qIGRzdCAqLworCXNldF9yZW5kZXJfdGFyZ2V0KGRldl9wcml2LCBjYl9mb3JtYXQsCisJCQkgIGRzdF9waXRjaCAvIGNwcCwgZHkgKyBoLAorCQkJICBkc3RfZ3B1X2FkZHIpOworCisJLyogc2Npc3NvcnMgKi8KKwlzZXRfc2Npc3NvcnMoZGV2X3ByaXYsIGR4LCBkeSwgZHggKyB3LCBkeSArIGgpOworCisJLyogVmVydGV4IGJ1ZmZlciBzZXR1cCAqLworCXZiX2FkZHIgPSBkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCArCisJCWRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQgKworCQlkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZDsKKwlzZXRfdnR4X3Jlc291cmNlKGRldl9wcml2LCB2Yl9hZGRyKTsKKworCS8qIGRyYXcgKi8KKwlkcmF3X2F1dG8oZGV2X3ByaXYpOworCisJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKKwkJCSAgICBSNjAwX0NCX0FDVElPTl9FTkEgfCBSNjAwX0NCMF9ERVNUX0JBU0VfRU5BLAorCQkJICAgIGRzdF9waXRjaCAqIChkeSArIGgpLCBkc3RfZ3B1X2FkZHIpOworCisJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKz0gMTIgKiA0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZmNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTAsMCArMSw4MDUgQEAKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAicmFkZW9uX2RybS5oIgorI2luY2x1ZGUgInJhZGVvbi5oIgorCisjaW5jbHVkZSAicjYwMGQuaCIKKyNpbmNsdWRlICJyNjAwX2JsaXRfc2hhZGVycy5oIgorCisjZGVmaW5lIERJX1BUX1JFQ1RMSVNUICAgICAgICAweDExCisjZGVmaW5lIERJX0lOREVYX1NJWkVfMTZfQklUICAweDAKKyNkZWZpbmUgRElfU1JDX1NFTF9BVVRPX0lOREVYIDB4MgorCisjZGVmaW5lIEZNVF84ICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgRk1UXzVfNl81ICAgICAgICAgICAgIDB4OAorI2RlZmluZSBGTVRfOF84XzhfOCAgICAgICAgICAgMHgxYQorI2RlZmluZSBDT0xPUl84ICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIENPTE9SXzVfNl81ICAgICAgICAgICAweDgKKyNkZWZpbmUgQ09MT1JfOF84XzhfOCAgICAgICAgIDB4MWEKKworLyogZW1pdHMgMjEgb24gcnY3NzArLCAyMyBvbiByNjAwICovCitzdGF0aWMgdm9pZAorc2V0X3JlbmRlcl90YXJnZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBmb3JtYXQsCisJCSAgaW50IHcsIGludCBoLCB1NjQgZ3B1X2FkZHIpCit7CisJdTMyIGNiX2NvbG9yX2luZm87CisJaW50IHBpdGNoLCBzbGljZTsKKworCWggPSAoaCArIDcpICYgfjc7CisJaWYgKGggPCA4KQorCQloID0gODsKKworCWNiX2NvbG9yX2luZm8gPSAoKGZvcm1hdCA8PCAyKSB8ICgxIDw8IDI3KSk7CisJcGl0Y2ggPSAodyAvIDgpIC0gMTsKKwlzbGljZSA9ICgodyAqIGgpIC8gNjQpIC0gMTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoQ0JfQ09MT1IwX0JBU0UgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyID4+IDgpOworCisJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUjYwMCAmJiByZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKSB7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TVVJGQUNFX0JBU0VfVVBEQVRFLCAwKSk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDIgPDwgMCk7CisJfQorCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChDQl9DT0xPUjBfU0laRSAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHBpdGNoIDw8IDApIHwgKHNsaWNlIDw8IDEwKSk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKENCX0NPTE9SMF9WSUVXIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoQ0JfQ09MT1IwX0lORk8gLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGNiX2NvbG9yX2luZm8pOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChDQl9DT0xPUjBfVElMRSAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKENCX0NPTE9SMF9GUkFHIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoQ0JfQ09MT1IwX01BU0sgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworfQorCisvKiBlbWl0cyA1ZHcgKi8KK3N0YXRpYyB2b2lkCitjcF9zZXRfc3VyZmFjZV9zeW5jKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkgICAgdTMyIHN5bmNfdHlwZSwgdTMyIHNpemUsCisJCSAgICB1NjQgbWNfYWRkcikKK3sKKwl1MzIgY3BfY29oZXJfc2l6ZTsKKworCWlmIChzaXplID09IDB4ZmZmZmZmZmYpCisJCWNwX2NvaGVyX3NpemUgPSAweGZmZmZmZmZmOworCWVsc2UKKwkJY3BfY29oZXJfc2l6ZSA9ICgoc2l6ZSArIDI1NSkgPj4gOCk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU1VSRkFDRV9TWU5DLCAzKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3luY190eXBlKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBjcF9jb2hlcl9zaXplKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBtY19hZGRyID4+IDgpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEwKTsgLyogcG9sbCBpbnRlcnZhbCAqLworfQorCisvKiBlbWl0cyAyMWR3ICsgMSBzdXJmYWNlIHN5bmMgPSAyNmR3ICovCitzdGF0aWMgdm9pZAorc2V0X3NoYWRlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTY0IGdwdV9hZGRyOworCXUzMiBzcV9wZ21fcmVzb3VyY2VzOworCisJLyogc2V0dXAgc2hhZGVyIHJlZ3MgKi8KKwlzcV9wZ21fcmVzb3VyY2VzID0gKDEgPDwgMCk7CisKKwkvKiBWUyAqLworCWdwdV9hZGRyID0gcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQ7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9QR01fU1RBUlRfVlMgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyID4+IDgpOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9QR01fUkVTT1VSQ0VTX1ZTIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9wZ21fcmVzb3VyY2VzKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfUEdNX0NGX09GRlNFVF9WUyAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisKKwkvKiBQUyAqLworCWdwdV9hZGRyID0gcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQ7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9QR01fU1RBUlRfUFMgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyID4+IDgpOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9QR01fUkVTT1VSQ0VTX1BTIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9wZ21fcmVzb3VyY2VzIHwgKDEgPDwgMjgpKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfUEdNX0VYUE9SVFNfUFMgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDIpOworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9QR01fQ0ZfT0ZGU0VUX1BTIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKworCWdwdV9hZGRyID0gcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQ7CisJY3Bfc2V0X3N1cmZhY2Vfc3luYyhyZGV2LCBQQUNLRVQzX1NIX0FDVElPTl9FTkEsIDUxMiwgZ3B1X2FkZHIpOworfQorCisvKiBlbWl0cyA5ICsgMSBzeW5jICg1KSA9IDE0Ki8KK3N0YXRpYyB2b2lkCitzZXRfdnR4X3Jlc291cmNlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1NjQgZ3B1X2FkZHIpCit7CisJdTMyIHNxX3Z0eF9jb25zdGFudF93b3JkMjsKKworCXNxX3Z0eF9jb25zdGFudF93b3JkMiA9ICgodXBwZXJfMzJfYml0cyhncHVfYWRkcikgJiAweGZmKSB8ICgxNiA8PCA4KSk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX1JFU09VUkNFLCA3KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHg0NjApOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyICYgMHhmZmZmZmZmZik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgNDggLSAxKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV92dHhfY29uc3RhbnRfd29yZDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEgPDwgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgU1FfVEVYX1ZUWF9WQUxJRF9CVUZGRVIgPDwgMzApOworCisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzg4MCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzEwKSkKKwkJY3Bfc2V0X3N1cmZhY2Vfc3luYyhyZGV2LAorCQkJCSAgICBQQUNLRVQzX1RDX0FDVElPTl9FTkEsIDQ4LCBncHVfYWRkcik7CisJZWxzZQorCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCisJCQkJICAgIFBBQ0tFVDNfVkNfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKK30KKworLyogZW1pdHMgOSAqLworc3RhdGljIHZvaWQKK3NldF90ZXhfcmVzb3VyY2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCSBpbnQgZm9ybWF0LCBpbnQgdywgaW50IGgsIGludCBwaXRjaCwKKwkJIHU2NCBncHVfYWRkcikKK3sKKwl1aW50MzJfdCBzcV90ZXhfcmVzb3VyY2Vfd29yZDAsIHNxX3RleF9yZXNvdXJjZV93b3JkMSwgc3FfdGV4X3Jlc291cmNlX3dvcmQ0OworCisJaWYgKGggPCAxKQorCQloID0gMTsKKworCXNxX3RleF9yZXNvdXJjZV93b3JkMCA9ICgxIDw8IDApOworCXNxX3RleF9yZXNvdXJjZV93b3JkMCB8PSAoKCgocGl0Y2ggPj4gMykgLSAxKSA8PCA4KSB8CisJCQkJICAoKHcgLSAxKSA8PCAxOSkpOworCisJc3FfdGV4X3Jlc291cmNlX3dvcmQxID0gKGZvcm1hdCA8PCAyNik7CisJc3FfdGV4X3Jlc291cmNlX3dvcmQxIHw9ICgoaCAtIDEpIDw8IDApOworCisJc3FfdGV4X3Jlc291cmNlX3dvcmQ0ID0gKCgxIDw8IDE0KSB8CisJCQkJICgwIDw8IDE2KSB8CisJCQkJICgxIDw8IDE5KSB8CisJCQkJICgyIDw8IDIyKSB8CisJCQkJICgzIDw8IDI1KSk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX1JFU09VUkNFLCA3KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGV4X3Jlc291cmNlX3dvcmQwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90ZXhfcmVzb3VyY2Vfd29yZDEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyID4+IDgpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyID4+IDgpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RleF9yZXNvdXJjZV93b3JkNCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFIDw8IDMwKTsKK30KKworLyogZW1pdHMgMTIgKi8KK3N0YXRpYyB2b2lkCitzZXRfc2Npc3NvcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCB4MSwgaW50IHkxLAorCSAgICAgaW50IHgyLCBpbnQgeTIpCit7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChQQV9TQ19TQ1JFRU5fU0NJU1NPUl9UTCAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHgxIDw8IDApIHwgKHkxIDw8IDE2KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHgyIDw8IDApIHwgKHkyIDw8IDE2KSk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFBBX1NDX0dFTkVSSUNfU0NJU1NPUl9UTCAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHgxIDw8IDApIHwgKHkxIDw8IDE2KSB8ICgxIDw8IDMxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHgyIDw8IDApIHwgKHkyIDw8IDE2KSk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFBBX1NDX1dJTkRPV19TQ0lTU09SX1RMIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDEgPDwgMCkgfCAoeTEgPDwgMTYpIHwgKDEgPDwgMzEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDIgPDwgMCkgfCAoeTIgPDwgMTYpKTsKK30KKworLyogZW1pdHMgMTAgKi8KK3N0YXRpYyB2b2lkCitkcmF3X2F1dG8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFZHVF9QUklNSVRJVkVfVFlQRSAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9QVF9SRUNUTElTVCk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ERVhfVFlQRSwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIERJX0lOREVYX1NJWkVfMTZfQklUKTsKKworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19OVU1fSU5TVEFOQ0VTLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfRFJBV19JTkRFWF9BVVRPLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfU1JDX1NFTF9BVVRPX0lOREVYKTsKKworfQorCisvKiBlbWl0cyAxNCAqLworc3RhdGljIHZvaWQKK3NldF9kZWZhdWx0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiBzcV9jb25maWcsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzI7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMjsKKwlpbnQgbnVtX3BzX2dwcnMsIG51bV92c19ncHJzLCBudW1fdGVtcF9ncHJzLCBudW1fZ3NfZ3BycywgbnVtX2VzX2dwcnM7CisJaW50IG51bV9wc190aHJlYWRzLCBudW1fdnNfdGhyZWFkcywgbnVtX2dzX3RocmVhZHMsIG51bV9lc190aHJlYWRzOworCWludCBudW1fcHNfc3RhY2tfZW50cmllcywgbnVtX3ZzX3N0YWNrX2VudHJpZXMsIG51bV9nc19zdGFja19lbnRyaWVzLCBudW1fZXNfc3RhY2tfZW50cmllczsKKwl1NjQgZ3B1X2FkZHI7CisJaW50IGR3b3JkczsKKworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1I2MDA6CisJCW51bV9wc19ncHJzID0gMTkyOworCQludW1fdnNfZ3BycyA9IDU2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTM2OworCQludW1fdnNfdGhyZWFkcyA9IDQ4OworCQludW1fZ3NfdGhyZWFkcyA9IDQ7CisJCW51bV9lc190aHJlYWRzID0gNDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gMTI4OworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDA7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJbnVtX3BzX2dwcnMgPSA4NDsKKwkJbnVtX3ZzX2dwcnMgPSAzNjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDE0NDsKKwkJbnVtX3ZzX3RocmVhZHMgPSA0MDsKKwkJbnVtX2dzX3RocmVhZHMgPSA0OworCQludW1fZXNfdGhyZWFkcyA9IDQ7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDA7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gNDA7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMzI7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMTY7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYxMDoKKwljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKKwlkZWZhdWx0OgorCQludW1fcHNfZ3BycyA9IDg0OworCQludW1fdnNfZ3BycyA9IDM2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTM2OworCQludW1fdnNfdGhyZWFkcyA9IDQ4OworCQludW1fZ3NfdGhyZWFkcyA9IDQ7CisJCW51bV9lc190aHJlYWRzID0gNDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MDsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAzMjsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjcwOgorCQludW1fcHNfZ3BycyA9IDE0NDsKKwkJbnVtX3ZzX2dwcnMgPSA0MDsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDEzNjsKKwkJbnVtX3ZzX3RocmVhZHMgPSA0ODsKKwkJbnVtX2dzX3RocmVhZHMgPSA0OworCQludW1fZXNfdGhyZWFkcyA9IDQ7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDA7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gNDA7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMzI7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMTY7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjc3MDoKKwkJbnVtX3BzX2dwcnMgPSAxOTI7CisJCW51bV92c19ncHJzID0gNTY7CisJCW51bV90ZW1wX2dwcnMgPSA0OworCQludW1fZ3NfZ3BycyA9IDA7CisJCW51bV9lc19ncHJzID0gMDsKKwkJbnVtX3BzX3RocmVhZHMgPSAxODg7CisJCW51bV92c190aHJlYWRzID0gNjA7CisJCW51bV9nc190aHJlYWRzID0gMDsKKwkJbnVtX2VzX3RocmVhZHMgPSAwOworCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCW51bV9nc19zdGFja19lbnRyaWVzID0gMDsKKwkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MzA6CisJY2FzZSBDSElQX1JWNzQwOgorCQludW1fcHNfZ3BycyA9IDg0OworCQludW1fdnNfZ3BycyA9IDM2OworCQludW1fdGVtcF9ncHJzID0gNDsKKwkJbnVtX2dzX2dwcnMgPSAwOworCQludW1fZXNfZ3BycyA9IDA7CisJCW51bV9wc190aHJlYWRzID0gMTg4OworCQludW1fdnNfdGhyZWFkcyA9IDYwOworCQludW1fZ3NfdGhyZWFkcyA9IDA7CisJCW51bV9lc190aHJlYWRzID0gMDsKKwkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCW51bV92c19zdGFja19lbnRyaWVzID0gMTI4OworCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDA7CisJCW51bV9lc19zdGFja19lbnRyaWVzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCQludW1fcHNfZ3BycyA9IDE5MjsKKwkJbnVtX3ZzX2dwcnMgPSA1NjsKKwkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCW51bV9nc19ncHJzID0gMDsKKwkJbnVtX2VzX2dwcnMgPSAwOworCQludW1fcHNfdGhyZWFkcyA9IDE0NDsKKwkJbnVtX3ZzX3RocmVhZHMgPSA0ODsKKwkJbnVtX2dzX3RocmVhZHMgPSAwOworCQludW1fZXNfdGhyZWFkcyA9IDA7CisJCW51bV9wc19zdGFja19lbnRyaWVzID0gMTI4OworCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDEyODsKKwkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSAwOworCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDA7CisJCWJyZWFrOworCX0KKworCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYyMCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjcxMCkpCisJCXNxX2NvbmZpZyA9IDA7CisJZWxzZQorCQlzcV9jb25maWcgPSBWQ19FTkFCTEU7CisKKwlzcV9jb25maWcgfD0gKERYOV9DT05TVFMgfAorCQkgICAgICBBTFVfSU5TVF9QUkVGRVJfVkVDVE9SIHwKKwkJICAgICAgUFNfUFJJTygwKSB8CisJCSAgICAgIFZTX1BSSU8oMSkgfAorCQkgICAgICBHU19QUklPKDIpIHwKKwkJICAgICAgRVNfUFJJTygzKSk7CisKKwlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19HUFJTKG51bV9wc19ncHJzKSB8CisJCQkJICBOVU1fVlNfR1BSUyhudW1fdnNfZ3BycykgfAorCQkJCSAgTlVNX0NMQVVTRV9URU1QX0dQUlMobnVtX3RlbXBfZ3BycykpOworCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMobnVtX2dzX2dwcnMpIHwKKwkJCQkgIE5VTV9FU19HUFJTKG51bV9lc19ncHJzKSk7CisJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMobnVtX3BzX3RocmVhZHMpIHwKKwkJCQkgICBOVU1fVlNfVEhSRUFEUyhudW1fdnNfdGhyZWFkcykgfAorCQkJCSAgIE5VTV9HU19USFJFQURTKG51bV9nc190aHJlYWRzKSB8CisJCQkJICAgTlVNX0VTX1RIUkVBRFMobnVtX2VzX3RocmVhZHMpKTsKKwlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMobnVtX3BzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKKwlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX1NUQUNLX0VOVFJJRVMobnVtX2dzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMobnVtX2VzX3N0YWNrX2VudHJpZXMpKTsKKworCS8qIGVtaXQgYW4gSUIgcG9pbnRpbmcgYXQgZGVmYXVsdCBzdGF0ZSAqLworCWR3b3JkcyA9IChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICsgMHhmKSAmIH4weGY7CisJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldDsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCB1cHBlcl8zMl9iaXRzKGdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGR3b3Jkcyk7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfRVZFTlRfV1JJVEUsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBDQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKKwkvKiBTUSBjb25maWcgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDYpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfQ09ORklHIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2NvbmZpZyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBpMmYodWludDMyX3QgaW5wdXQpCit7CisJdTMyIHJlc3VsdCwgaSwgZXhwb25lbnQsIGZyYWN0aW9uOworCisJaWYgKChpbnB1dCAmIDB4M2ZmZikgPT0gMCkKKwkJcmVzdWx0ID0gMDsgLyogMCBpcyBhIHNwZWNpYWwgY2FzZSAqLworCWVsc2UgeworCQlleHBvbmVudCA9IDE0MDsgLyogZXhwb25lbnQgYmlhc2VkIGJ5IDEyNzsgKi8KKwkJZnJhY3Rpb24gPSAoaW5wdXQgJiAweDNmZmYpIDw8IDEwOyAvKiBjaGVhdCBhbmQgb25seQorCQkJCQkJICAgICAgaGFuZGxlIG51bWJlcnMgYmVsb3cgMl5eMTUgKi8KKwkJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJCWlmIChmcmFjdGlvbiAmIDB4ODAwMDAwKQorCQkJCWJyZWFrOworCQkJZWxzZSB7CisJCQkJZnJhY3Rpb24gPSBmcmFjdGlvbiA8PCAxOyAvKiBrZWVwCisJCQkJCQkJICAgICBzaGlmdGluZyBsZWZ0IHVudGlsIHRvcCBiaXQgPSAxICovCisJCQkJZXhwb25lbnQgPSBleHBvbmVudCAtIDE7CisJCQl9CisJCX0KKwkJcmVzdWx0ID0gZXhwb25lbnQgPDwgMjMgfCAoZnJhY3Rpb24gJiAweDdmZmZmZik7IC8qIG1hc2sKKwkJCQkJCQkJICAgIG9mZiB0b3AgYml0OyBhc3N1bWVkIDEgKi8KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHI2MDBfYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiBvYmpfc2l6ZTsKKwlpbnQgciwgZHdvcmRzOworCXZvaWQgKnB0cjsKKwl1MzIgcGFja2V0MnNbMTZdOworCWludCBudW1fcGFja2V0MnMgPSAwOworCisJcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCA9IDA7CisKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApCisJCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSByN3h4X2RlZmF1bHRfc2l6ZTsKKwllbHNlCisJCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSByNnh4X2RlZmF1bHRfc2l6ZTsKKworCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CisJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQlwYWNrZXQyc1tudW1fcGFja2V0MnMrK10gPSBQQUNLRVQyKDApOworCQlkd29yZHMrKzsKKwl9CisKKwlvYmpfc2l6ZSA9IGR3b3JkcyAqIDQ7CisJb2JqX3NpemUgPSBBTElHTihvYmpfc2l6ZSwgMjU2KTsKKworCXJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgPSBvYmpfc2l6ZTsKKwlvYmpfc2l6ZSArPSByNnh4X3ZzX3NpemUgKiA0OworCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CisKKwlyZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ID0gb2JqX3NpemU7CisJb2JqX3NpemUgKz0gcjZ4eF9wc19zaXplICogNDsKKwlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOworCisJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIG9ial9zaXplLAorCQkJCSB0cnVlLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLAorCQkJCSBmYWxzZSwgJnJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInI2MDAgZmFpbGVkIHRvIGFsbG9jYXRlIHNoYWRlclxuIik7CisJCXJldHVybiByOworCX0KKworCURSTV9ERUJVRygicjZ4eCBibGl0IGFsbG9jYXRlZCBibyAlMDh4IHZzICUwOHggcHMgJTA4eFxuIiwKKwkJICBvYmpfc2l6ZSwKKwkJICByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0LCByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0KTsKKworCXIgPSByYWRlb25fb2JqZWN0X2ttYXAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosICZwdHIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBibGl0IG9iamVjdCAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkKKwkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJCSAgICByN3h4X2RlZmF1bHRfc3RhdGUsIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KTsKKwllbHNlCisJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQsCisJCQkgICAgcjZ4eF9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisJaWYgKG51bV9wYWNrZXQycykKKwkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCArIChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCksCisJCQkgICAgcGFja2V0MnMsIG51bV9wYWNrZXQycyAqIDQpOworCisKKwltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCwgcjZ4eF92cywgcjZ4eF92c19zaXplICogNCk7CisJbWVtY3B5KHB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQsIHI2eHhfcHMsIHI2eHhfcHNfc2l6ZSAqIDQpOworCisJcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOworCXJldHVybiAwOworfQorCit2b2lkIHI2MDBfYmxpdF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOworCXJhZGVvbl9vYmplY3RfdW5yZWYoJnJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKK30KKworaW50IHI2MDBfdmJfaWJfZ2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXIgPSByYWRlb25faWJfZ2V0KHJkZXYsICZyZGV2LT5yNjAwX2JsaXQudmJfaWIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBJQiBmb3IgdmVydGV4IGJ1ZmZlclxuIik7CisJCXJldHVybiByOworCX0KKworCXJkZXYtPnI2MDBfYmxpdC52Yl90b3RhbCA9IDY0KjEwMjQ7CisJcmRldi0+cjYwMF9ibGl0LnZiX3VzZWQgPSAwOworCXJldHVybiAwOworfQorCit2b2lkIHI2MDBfdmJfaWJfcHV0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJhZGVvbl9mZW5jZV9lbWl0KHJkZXYsIHJkZXYtPnI2MDBfYmxpdC52Yl9pYi0+ZmVuY2UpOworCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJnJkZXYtPnI2MDBfYmxpdC52Yl9pYi0+bGlzdCwgJnJkZXYtPmliX3Bvb2wuc2NoZWR1bGVkX2licyk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwlyYWRlb25faWJfZnJlZShyZGV2LCAmcmRldi0+cjYwMF9ibGl0LnZiX2liKTsKK30KKworaW50IHI2MDBfYmxpdF9wcmVwYXJlX2NvcHkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBzaXplX2J5dGVzKQoreworCWludCByOworCWludCByaW5nX3NpemUsIGxpbmVfc2l6ZTsKKwlpbnQgbWF4X3NpemU7CisJLyogbG9vcHMgb2YgZW1pdHMgNjQgKyBmZW5jZSBlbWl0IHBvc3NpYmxlICovCisJaW50IGR3b3Jkc19wZXJfbG9vcCA9IDc2LCBudW1fbG9vcHM7CisKKwlyID0gcjYwMF92Yl9pYl9nZXQocmRldik7CisJV0FSTl9PTihyKTsKKworCS8qIHNldF9yZW5kZXJfdGFyZ2V0IGVtaXRzIDIgZXh0cmEgZHdvcmRzIG9uIHJ2Nnh4ICovCisJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUjYwMCAmJiByZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKQorCQlkd29yZHNfcGVyX2xvb3AgKz0gMjsKKworCS8qIDggYnBwIHZzIDMyIGJwcCBmb3IgeGZlciB1bml0ICovCisJaWYgKHNpemVfYnl0ZXMgJiAzKQorCQlsaW5lX3NpemUgPSA4MTkyOworCWVsc2UKKwkJbGluZV9zaXplID0gODE5Mio0OworCisJbWF4X3NpemUgPSA4MTkyICogbGluZV9zaXplOworCisJLyogbWFqb3IgbG9vcHMgY292ZXIgdGhlIG1heCBzaXplIHRyYW5zZmVyICovCisJbnVtX2xvb3BzID0gKChzaXplX2J5dGVzICsgbWF4X3NpemUpIC8gbWF4X3NpemUpOworCS8qIG1pbm9yIGxvb3BzIGNvdmVyIHRoZSBleHRyYSBub24gYWxpZ25lZCBiaXRzICovCisJbnVtX2xvb3BzICs9ICgoc2l6ZV9ieXRlcyAlIGxpbmVfc2l6ZSkgPyAxIDogMCk7CisJLyogY2FsY3VsYXRlIG51bWJlciBvZiBsb29wcyBjb3JyZWN0bHkgKi8KKwlyaW5nX3NpemUgPSBudW1fbG9vcHMgKiBkd29yZHNfcGVyX2xvb3A7CisJLyogc2V0IGRlZmF1bHQgICsgc2hhZGVycyAqLworCXJpbmdfc2l6ZSArPSA0MDsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLworCXJpbmdfc2l6ZSArPSAzOyAvKiBmZW5jZSBlbWl0IGZvciBWQiBJQiAqLworCXJpbmdfc2l6ZSArPSA1OyAvKiBkb25lIGNvcHkgKi8KKwlyaW5nX3NpemUgKz0gMzsgLyogZmVuY2UgZW1pdCBmb3IgZG9uZSBjb3B5ICovCisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgcmluZ19zaXplKTsKKwlXQVJOX09OKHIpOworCisJc2V0X2RlZmF1bHRfc3RhdGUocmRldik7IC8qIDE0ICovCisJc2V0X3NoYWRlcnMocmRldik7IC8qIDI2ICovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjYwMF9ibGl0X2RvbmVfY29weShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCit7CisJaW50IHI7CisKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfRVZFTlRfV1JJVEUsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBDQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKKwkvKiB3YWl0IGZvciAzRCBpZGxlIGNsZWFuICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFdBSVRfVU5USUwgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgV0FJVF8zRF9JRExFX2JpdCB8IFdBSVRfM0RfSURMRUNMRUFOX2JpdCk7CisKKwlpZiAocmRldi0+cjYwMF9ibGl0LnZiX2liKQorCQlyNjAwX3ZiX2liX3B1dChyZGV2KTsKKworCWlmIChmZW5jZSkKKwkJciA9IHJhZGVvbl9mZW5jZV9lbWl0KHJkZXYsIGZlbmNlKTsKKworCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7Cit9CisKK3ZvaWQgcjYwMF9rbXNfYmxpdF9jb3B5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJdTY0IHNyY19ncHVfYWRkciwgdTY0IGRzdF9ncHVfYWRkciwKKwkJCWludCBzaXplX2J5dGVzKQoreworCWludCBtYXhfYnl0ZXM7CisJdTY0IHZiX2dwdV9hZGRyOworCXUzMiAqdmI7CisKKwlEUk1fREVCVUcoImVtaXR0aW5nIGNvcHkgJTE2bGx4ICUxNmxseCAlZCAlZFxuIiwgc3JjX2dwdV9hZGRyLCBkc3RfZ3B1X2FkZHIsCisJCSAgc2l6ZV9ieXRlcywgcmRldi0+cjYwMF9ibGl0LnZiX3VzZWQpOworCXZiID0gKHUzMiAqKShyZGV2LT5yNjAwX2JsaXQudmJfaWItPnB0ciArIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkKTsKKwlpZiAoKHNpemVfYnl0ZXMgJiAzKSB8fCAoc3JjX2dwdV9hZGRyICYgMykgfHwgKGRzdF9ncHVfYWRkciAmIDMpKSB7CisJCW1heF9ieXRlcyA9IDgxOTI7CisKKwkJd2hpbGUgKHNpemVfYnl0ZXMpIHsKKwkJCWludCBjdXJfc2l6ZSA9IHNpemVfYnl0ZXM7CisJCQlpbnQgc3JjX3ggPSBzcmNfZ3B1X2FkZHIgJiAyNTU7CisJCQlpbnQgZHN0X3ggPSBkc3RfZ3B1X2FkZHIgJiAyNTU7CisJCQlpbnQgaCA9IDE7CisJCQlzcmNfZ3B1X2FkZHIgPSBzcmNfZ3B1X2FkZHIgJiB+MjU1OworCQkJZHN0X2dwdV9hZGRyID0gZHN0X2dwdV9hZGRyICYgfjI1NTsKKworCQkJaWYgKCFzcmNfeCAmJiAhZHN0X3gpIHsKKwkJCQloID0gKGN1cl9zaXplIC8gbWF4X2J5dGVzKTsKKwkJCQlpZiAoaCA+IDgxOTIpCisJCQkJCWggPSA4MTkyOworCQkJCWlmIChoID09IDApCisJCQkJCWggPSAxOworCQkJCWVsc2UKKwkJCQkJY3VyX3NpemUgPSBtYXhfYnl0ZXM7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdXJfc2l6ZSA+IG1heF9ieXRlcykKKwkJCQkJY3VyX3NpemUgPSBtYXhfYnl0ZXM7CisJCQkJaWYgKGN1cl9zaXplID4gKG1heF9ieXRlcyAtIGRzdF94KSkKKwkJCQkJY3VyX3NpemUgPSAobWF4X2J5dGVzIC0gZHN0X3gpOworCQkJCWlmIChjdXJfc2l6ZSA+IChtYXhfYnl0ZXMgLSBzcmNfeCkpCisJCQkJCWN1cl9zaXplID0gKG1heF9ieXRlcyAtIHNyY194KTsKKwkJCX0KKworCQkJaWYgKChyZGV2LT5yNjAwX2JsaXQudmJfdXNlZCArIDQ4KSA+IHJkZXYtPnI2MDBfYmxpdC52Yl90b3RhbCkgeworCQkJCVdBUk5fT04oMSk7CisKKyNpZiAwCisJCQkJcjYwMF92Yl9pYl9wdXQocmRldik7CisKKwkJCQlyNjAwX25vbW1fcHV0X3ZiKGRldik7CisJCQkJcjYwMF9ub21tX2dldF92YihkZXYpOworCQkJCWlmICghZGV2X3ByaXYtPmJsaXRfdmIpCisJCQkJCXJldHVybjsKKwkJCQlzZXRfc2hhZGVycyhkZXYpOworCQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKKyNlbmRpZgorCQkJfQorCisJCQl2YlswXSA9IGkyZihkc3RfeCk7CisJCQl2YlsxXSA9IDA7CisJCQl2YlsyXSA9IGkyZihzcmNfeCk7CisJCQl2YlszXSA9IDA7CisKKwkJCXZiWzRdID0gaTJmKGRzdF94KTsKKwkJCXZiWzVdID0gaTJmKGgpOworCQkJdmJbNl0gPSBpMmYoc3JjX3gpOworCQkJdmJbN10gPSBpMmYoaCk7CisKKwkJCXZiWzhdID0gaTJmKGRzdF94ICsgY3VyX3NpemUpOworCQkJdmJbOV0gPSBpMmYoaCk7CisJCQl2YlsxMF0gPSBpMmYoc3JjX3ggKyBjdXJfc2l6ZSk7CisJCQl2YlsxMV0gPSBpMmYoaCk7CisKKwkJCS8qIHNyYyA5ICovCisJCQlzZXRfdGV4X3Jlc291cmNlKHJkZXYsIEZNVF84LAorCQkJCQkgc3JjX3ggKyBjdXJfc2l6ZSwgaCwgc3JjX3ggKyBjdXJfc2l6ZSwKKwkJCQkJIHNyY19ncHVfYWRkcik7CisKKwkJCS8qIDUgKi8KKwkJCWNwX3NldF9zdXJmYWNlX3N5bmMocmRldiwKKwkJCQkJICAgIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSwgKHNyY194ICsgY3VyX3NpemUgKiBoKSwgc3JjX2dwdV9hZGRyKTsKKworCQkJLyogZHN0IDIzICovCisJCQlzZXRfcmVuZGVyX3RhcmdldChyZGV2LCBDT0xPUl84LAorCQkJCQkgIGRzdF94ICsgY3VyX3NpemUsIGgsCisJCQkJCSAgZHN0X2dwdV9hZGRyKTsKKworCQkJLyogc2Npc3NvcnMgMTIgKi8KKwkJCXNldF9zY2lzc29ycyhyZGV2LCBkc3RfeCwgMCwgZHN0X3ggKyBjdXJfc2l6ZSwgaCk7CisKKwkJCS8qIDE0ICovCisJCQl2Yl9ncHVfYWRkciA9IHJkZXYtPnI2MDBfYmxpdC52Yl9pYi0+Z3B1X2FkZHIgKyByZGV2LT5yNjAwX2JsaXQudmJfdXNlZDsKKwkJCXNldF92dHhfcmVzb3VyY2UocmRldiwgdmJfZ3B1X2FkZHIpOworCisJCQkvKiBkcmF3IDEwICovCisJCQlkcmF3X2F1dG8ocmRldik7CisKKwkJCS8qIDUgKi8KKwkJCWNwX3NldF9zdXJmYWNlX3N5bmMocmRldiwKKwkJCQkJICAgIFBBQ0tFVDNfQ0JfQUNUSU9OX0VOQSB8IFBBQ0tFVDNfQ0IwX0RFU1RfQkFTRV9FTkEsCisJCQkJCSAgICBjdXJfc2l6ZSAqIGgsIGRzdF9ncHVfYWRkcik7CisKKwkJCXZiICs9IDEyOworCQkJcmRldi0+cjYwMF9ibGl0LnZiX3VzZWQgKz0gMTIgKiA0OworCisJCQlzcmNfZ3B1X2FkZHIgKz0gY3VyX3NpemUgKiBoOworCQkJZHN0X2dwdV9hZGRyICs9IGN1cl9zaXplICogaDsKKwkJCXNpemVfYnl0ZXMgLT0gY3VyX3NpemUgKiBoOworCQl9CisJfSBlbHNlIHsKKwkJbWF4X2J5dGVzID0gODE5MiAqIDQ7CisKKwkJd2hpbGUgKHNpemVfYnl0ZXMpIHsKKwkJCWludCBjdXJfc2l6ZSA9IHNpemVfYnl0ZXM7CisJCQlpbnQgc3JjX3ggPSAoc3JjX2dwdV9hZGRyICYgMjU1KTsKKwkJCWludCBkc3RfeCA9IChkc3RfZ3B1X2FkZHIgJiAyNTUpOworCQkJaW50IGggPSAxOworCQkJc3JjX2dwdV9hZGRyID0gc3JjX2dwdV9hZGRyICYgfjI1NTsKKwkJCWRzdF9ncHVfYWRkciA9IGRzdF9ncHVfYWRkciAmIH4yNTU7CisKKwkJCWlmICghc3JjX3ggJiYgIWRzdF94KSB7CisJCQkJaCA9IChjdXJfc2l6ZSAvIG1heF9ieXRlcyk7CisJCQkJaWYgKGggPiA4MTkyKQorCQkJCQloID0gODE5MjsKKwkJCQlpZiAoaCA9PSAwKQorCQkJCQloID0gMTsKKwkJCQllbHNlCisJCQkJCWN1cl9zaXplID0gbWF4X2J5dGVzOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY3VyX3NpemUgPiBtYXhfYnl0ZXMpCisJCQkJCWN1cl9zaXplID0gbWF4X2J5dGVzOworCQkJCWlmIChjdXJfc2l6ZSA+IChtYXhfYnl0ZXMgLSBkc3RfeCkpCisJCQkJCWN1cl9zaXplID0gKG1heF9ieXRlcyAtIGRzdF94KTsKKwkJCQlpZiAoY3VyX3NpemUgPiAobWF4X2J5dGVzIC0gc3JjX3gpKQorCQkJCQljdXJfc2l6ZSA9IChtYXhfYnl0ZXMgLSBzcmNfeCk7CisJCQl9CisKKwkJCWlmICgocmRldi0+cjYwMF9ibGl0LnZiX3VzZWQgKyA0OCkgPiByZGV2LT5yNjAwX2JsaXQudmJfdG90YWwpIHsKKwkJCQlXQVJOX09OKDEpOworCQkJfQorI2lmIDAKKwkJCWlmICgocmRldi0+YmxpdF92Yi0+dXNlZCArIDQ4KSA+IHJkZXYtPmJsaXRfdmItPnRvdGFsKSB7CisJCQkJcjYwMF9ub21tX3B1dF92YihkZXYpOworCQkJCXI2MDBfbm9tbV9nZXRfdmIoZGV2KTsKKwkJCQlpZiAoIXJkZXYtPmJsaXRfdmIpCisJCQkJCXJldHVybjsKKworCQkJCXNldF9zaGFkZXJzKGRldik7CisJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOworCQkJfQorI2VuZGlmCisKKwkJCXZiWzBdID0gaTJmKGRzdF94IC8gNCk7CisJCQl2YlsxXSA9IDA7CisJCQl2YlsyXSA9IGkyZihzcmNfeCAvIDQpOworCQkJdmJbM10gPSAwOworCisJCQl2Yls0XSA9IGkyZihkc3RfeCAvIDQpOworCQkJdmJbNV0gPSBpMmYoaCk7CisJCQl2Yls2XSA9IGkyZihzcmNfeCAvIDQpOworCQkJdmJbN10gPSBpMmYoaCk7CisKKwkJCXZiWzhdID0gaTJmKChkc3RfeCArIGN1cl9zaXplKSAvIDQpOworCQkJdmJbOV0gPSBpMmYoaCk7CisJCQl2YlsxMF0gPSBpMmYoKHNyY194ICsgY3VyX3NpemUpIC8gNCk7CisJCQl2YlsxMV0gPSBpMmYoaCk7CisKKwkJCS8qIHNyYyA5ICovCisJCQlzZXRfdGV4X3Jlc291cmNlKHJkZXYsIEZNVF84XzhfOF84LAorCQkJCQkgKHNyY194ICsgY3VyX3NpemUpIC8gNCwKKwkJCQkJIGgsIChzcmNfeCArIGN1cl9zaXplKSAvIDQsCisJCQkJCSBzcmNfZ3B1X2FkZHIpOworCQkJLyogNSAqLworCQkJY3Bfc2V0X3N1cmZhY2Vfc3luYyhyZGV2LAorCQkJCQkgICAgUEFDS0VUM19UQ19BQ1RJT05fRU5BLCAoc3JjX3ggKyBjdXJfc2l6ZSAqIGgpLCBzcmNfZ3B1X2FkZHIpOworCisJCQkvKiBkc3QgMjMgKi8KKwkJCXNldF9yZW5kZXJfdGFyZ2V0KHJkZXYsIENPTE9SXzhfOF84XzgsCisJCQkJCSAgZHN0X3ggKyBjdXJfc2l6ZSwgaCwKKwkJCQkJICBkc3RfZ3B1X2FkZHIpOworCisJCQkvKiBzY2lzc29ycyAxMiAgKi8KKwkJCXNldF9zY2lzc29ycyhyZGV2LCAoZHN0X3ggLyA0KSwgMCwgKGRzdF94ICsgY3VyX3NpemUgLyA0KSwgaCk7CisKKwkJCS8qIFZlcnRleCBidWZmZXIgc2V0dXAgMTQgKi8KKwkJCXZiX2dwdV9hZGRyID0gcmRldi0+cjYwMF9ibGl0LnZiX2liLT5ncHVfYWRkciArIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkOworCQkJc2V0X3Z0eF9yZXNvdXJjZShyZGV2LCB2Yl9ncHVfYWRkcik7CisKKwkJCS8qIGRyYXcgMTAgKi8KKwkJCWRyYXdfYXV0byhyZGV2KTsKKworCQkJLyogNSAqLworCQkJY3Bfc2V0X3N1cmZhY2Vfc3luYyhyZGV2LAorCQkJCQkgICAgUEFDS0VUM19DQl9BQ1RJT05fRU5BIHwgUEFDS0VUM19DQjBfREVTVF9CQVNFX0VOQSwKKwkJCQkJICAgIGN1cl9zaXplICogaCwgZHN0X2dwdV9hZGRyKTsKKworCQkJLyogNzggcmluZyBkd29yZHMgcGVyIGxvb3AgKi8KKwkJCXZiICs9IDEyOworCQkJcmRldi0+cjYwMF9ibGl0LnZiX3VzZWQgKz0gMTIgKiA0OworCisJCQlzcmNfZ3B1X2FkZHIgKz0gY3VyX3NpemUgKiBoOworCQkJZHN0X2dwdV9hZGRyICs9IGN1cl9zaXplICogaDsKKwkJCXNpemVfYnl0ZXMgLT0gY3VyX3NpemUgKiBoOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0NWU4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYwpAQCAtMCwwICsxLDEwNzIgQEAKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK2NvbnN0IHUzMiByNnh4X2RlZmF1bHRfc3RhdGVbXSA9Cit7CisJMHhjMDAwMjQwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTI4MDAsCisJMHg4MDAwMDAwMCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMDQ2MDAsCisJMHgwMDAwMDAxNiwKKwkweGMwMDE2ODAwLAorCTB4MDAwMDAwMTAsCisJMHgwMDAyODAwMCwKKwkweGMwMDE2ODAwLAorCTB4MDAwMDAwMTAsCisJMHgwMDAwODAwMCwKKwkweGMwMDE2ODAwLAorCTB4MDAwMDA1NDIsCisJMHgwNzAwMDAwMywKKwkweGMwMDE2ODAwLAorCTB4MDAwMDA1YzUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2ODAwLAorCTB4MDAwMDAzNjMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2ODAwLAorCTB4MDAwMDA2MGMsCisJMHg4MjAwMDAwMCwKKwkweGMwMDE2ODAwLAorCTB4MDAwMDA2MGUsCisJMHgwMTAyMDIwNCwKKwkweGMwMDE2ZjAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2ZjAwLAorCTB4MDAwMDAwMDEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDk2OTAwLAorCTB4MDAwMDAyMmEsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDA0LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDBhLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDBiLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTBjLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTBkLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzQzLAorCTB4MDAwMDAwNjAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzQ0LAorCTB4MDAwMDAwNDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzUxLAorCTB4MDAwMGFhMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTA0LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTBlLAorCTB4MDAwMDAwMDAsCisJMHhjMDA0NjkwMCwKKwkweDAwMDAwMTA1LAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAzNjkwMCwKKwkweDAwMDAwMTA5LAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwNDY5MDAsCisJMHgwMDAwMDMwYywKKwkweDAxMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwNDY5MDAsCisJMHgwMDAwMDA0OCwKKwkweDNmODAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4ZSwKKwkweDAwMDAwMDBmLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4MywKKwkweDAwMDBmZmZmLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4NywKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4OCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4OSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4YSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4YiwKKwkweDIwMDAyMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4YywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5NCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5NSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiNCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk2LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk3LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGI2LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTgsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTksCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYjgsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5YSwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5YiwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiYSwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDljLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDlkLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGJjLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWUsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWYsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYmUsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhMCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhMSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjMCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGEyLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGEzLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGMyLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTQsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTUsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYzQsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhNiwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhNywKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjNiwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE4LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE5LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGM4LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWEsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWIsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwY2EsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhYywKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhZCwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjYywKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFlLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFmLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGNlLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYjAsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYjEsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwZDAsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBiMiwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBiMywKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBkMiwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjkzLAorCTB4MDAwMDQwMTAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzAxLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzEyLAorCTB4ZmZmZmZmZmYsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzA3LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMzA4LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjgzLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjkyLAorCTB4MDAwMDAwMDAsCisJMHhjMDA2NjkwMCwKKwkweDAwMDAwMTBmLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwNDY5MDAsCisJMHgwMDAwMDMwMywKKwkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNSwKKwkweDAwMDAwMDA0LAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4MSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM3ZSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM4MSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4MiwKKwkweDAwMDAwMDA4LAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDMwMiwKKwkweDAwMDAwMDJkLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDM3ZiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiMiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiNiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiNywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiOSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIyNSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIyOSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIzNywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMCwKKwkweDAwMDAwODAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhOSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDEwMywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI5MCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4NywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4OCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4OSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4YSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4YiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4YywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4ZCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4ZSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4ZiwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhNSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhYywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhZCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhZSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJjOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNiwKKwkweDAwMDAwMTAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDIwNCwKKwkweDAwMDEwMDAwLAorCTB4YzAwMzZlMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDEyLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOGYsCisJMHgwMDAwMDAwZiwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxZTgsCisJMHgwMDAwMDAwMSwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDIsCisJMHgwMGNjMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDUsCisJMHgwMDAwMDI0NCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDMsCisJMHgwMDAwMDIxMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxODUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjMsCisJMHgwMDAwMDAwMSwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxOTEsCisJMHgwMDAwMGIwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjUsCisJMHgwMDAwMDAwMCwKK307CisKK2NvbnN0IHUzMiByN3h4X2RlZmF1bHRfc3RhdGVbXSA9Cit7CisJMHhjMDAxMjgwMCwKKwkweDgwMDAwMDAwLAorCTB4ODAwMDAwMDAsCisJMHhjMDAwNDYwMCwKKwkweDAwMDAwMDE2LAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDAxMCwKKwkweDAwMDI4MDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDAxMCwKKwkweDAwMDA4MDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDU0MiwKKwkweDA3MDAwMDAyLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDVjNSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDM2MywKKwkweDAwMDA0MDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDYwYywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY4MDAsCisJMHgwMDAwMDYwZSwKKwkweDAwNDIwMjA0LAorCTB4YzAwMTZmMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTZmMDAsCisJMHgwMDAwMDAwMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwOTY5MDAsCisJMHgwMDAwMDIyYSwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwMDQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwMGEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwMGIsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMGMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMGQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzNDMsCisJMHgwMDAwMDA2MCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzNDQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzNTEsCisJMHgwMDAwYWEwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMDQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMGUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDQ2OTAwLAorCTB4MDAwMDAxMDUsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDQ2OTAwLAorCTB4MDAwMDAzMGMsCisJMHgwMTAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOGUsCisJMHgwMDAwMDAwZiwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODMsCisJMHgwMDAwZmZmZiwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODUsCisJMHgyMDAwMjAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODYsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODcsCisJMHgyMDAwMjAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODgsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODksCisJMHgyMDAwMjAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOGEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOGIsCisJMHgyMDAwMjAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOGMsCisJMHhhYWFhYWFhYSwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTQsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOTUsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYjQsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5NiwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5NywKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiNiwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk4LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDk5LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGI4LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWEsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwOWIsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYmEsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5YywKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA5ZCwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBiYywKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDllLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDlmLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGJlLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTAsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTEsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYzAsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhMiwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhMywKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjMiwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE0LAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGE1LAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGM0LAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTYsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYTcsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwYzYsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhOCwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhOSwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjOCwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFhLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGFiLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGNhLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWMsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYWQsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwY2MsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhZSwKKwkweDgwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBhZiwKKwkweDIwMDAyMDAwLAorCTB4YzAwMjY5MDAsCisJMHgwMDAwMDBjZSwKKwkweDAwMDAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGIwLAorCTB4ODAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGIxLAorCTB4MjAwMDIwMDAsCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMGQwLAorCTB4MDAwMDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYjIsCisJMHg4MDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwYjMsCisJMHgyMDAwMjAwMCwKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAwZDIsCisJMHgwMDAwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI5MywKKwkweDAwNTE0MDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDMwMCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDMwMSwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDMxMiwKKwkweGZmZmZmZmZmLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDMwNywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDMwOCwKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI4MywKKwkweDAwMDAwMDAwLAorCTB4YzAwMTY5MDAsCisJMHgwMDAwMDI5MiwKKwkweDAwMDAwMDAwLAorCTB4YzAwNjY5MDAsCisJMHgwMDAwMDEwZiwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDYsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDcsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDgsCisJMHgwMDAwMDAwMCwKKwkweGMwMDQ2OTAwLAorCTB4MDAwMDAzMDMsCisJMHgzZjgwMDAwMCwKKwkweDNmODAwMDAwLAorCTB4M2Y4MDAwMDAsCisJMHgzZjgwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDUsCisJMHgwMDAwMDAwNCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzN2UsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzODIsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzODAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzODMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzODEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODIsCisJMHgwMDAwMDAwOCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzMDIsCisJMHgwMDAwMDAyZCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAzN2YsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjIsCisJMHgwMDAwMDAwMSwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjYsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjcsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjgsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxYjksCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMjUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMjksCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMzcsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMDAsCisJMHgwMDAwMDgwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMDEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMDIsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYTgsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYTksCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxMDMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOTAsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODYsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODcsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODgsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyODksCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOGEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOGIsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOGMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOGQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOGUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyOGYsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYTEsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYTUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYWMsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYWQsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYWUsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyYzgsCisJMHgwMDAwMDAwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDYsCisJMHgwMDAwMDEwMCwKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyMDQsCisJMHgwMDAxMDAwMCwKKwkweGMwMDM2ZTAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAxMiwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMDhmLAorCTB4MDAwMDAwMGYsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWU4LAorCTB4MDAwMDAwMDEsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjAyLAorCTB4MDBjYzAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjA1LAorCTB4MDAwMDAyNDQsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjAzLAorCTB4MDAwMDAyMTAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWIxLAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTg1LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWIzLAorCTB4MDAwMDAwMDEsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWI0LAorCTB4MDAwMDAwMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMTkxLAorCTB4MDAwMDBiMDAsCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWI1LAorCTB4MDAwMDAwMDAsCit9OworCisvKiBzYW1lIGZvciByNnh4L3I3eHggKi8KK2NvbnN0IHUzMiByNnh4X3ZzW10gPQoreworCTB4MDAwMDAwMDQsCisJMHg4MTAwMDAwMCwKKwkweDAwMDAyMDNjLAorCTB4OTQwMDBiMDgsCisJMHgwMDAwNDAwMCwKKwkweDE0MjAwYjFhLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDNjMDAwMDAwLAorCTB4NjhjZDEwMDAsCisJMHgwMDA4MDAwMCwKKwkweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyIHI2eHhfcHNbXSA9Cit7CisJMHgwMDAwMDAwMiwKKwkweDgwODAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHg5NDIwMDY4OCwKKwkweDAwMDAwMDEwLAorCTB4MDAwZDEwMDAsCisJMHhiMDgwMDAwMCwKKwkweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyIHI2eHhfcHNfc2l6ZSA9IEFSUkFZX1NJWkUocjZ4eF9wcyk7Citjb25zdCB1MzIgcjZ4eF92c19zaXplID0gQVJSQVlfU0laRShyNnh4X3ZzKTsKK2NvbnN0IHUzMiByNnh4X2RlZmF1bHRfc2l6ZSA9IEFSUkFZX1NJWkUocjZ4eF9kZWZhdWx0X3N0YXRlKTsKK2NvbnN0IHUzMiByN3h4X2RlZmF1bHRfc2l6ZSA9IEFSUkFZX1NJWkUocjd4eF9kZWZhdWx0X3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGMzYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5oCkBAIC0wLDAgKzEsMTQgQEAKKworI2lmbmRlZiBSNjAwX0JMSVRfU0hBREVSU19ICisjZGVmaW5lIFI2MDBfQkxJVF9TSEFERVJTX0gKKworZXh0ZXJuIGNvbnN0IHUzMiByNnh4X3BzW107CitleHRlcm4gY29uc3QgdTMyIHI2eHhfdnNbXTsKK2V4dGVybiBjb25zdCB1MzIgcjd4eF9kZWZhdWx0X3N0YXRlW107CitleHRlcm4gY29uc3QgdTMyIHI2eHhfZGVmYXVsdF9zdGF0ZVtdOworCisKK2V4dGVybiBjb25zdCB1MzIgcjZ4eF9wc19zaXplLCByNnh4X3ZzX3NpemU7CitleHRlcm4gY29uc3QgdTMyIHI2eHhfZGVmYXVsdF9zaXplLCByN3h4X2RlZmF1bHRfc2l6ZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCmluZGV4IDIwZjE3OTAuLjZkNWE3MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCkBAIC0zMSw3ICszMSwzOCBAQAogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAKLSNpbmNsdWRlICJyNjAwX21pY3JvY29kZS5oIgorI2RlZmluZSBQRlBfVUNPREVfU0laRSA1NzYKKyNkZWZpbmUgUE00X1VDT0RFX1NJWkUgMTc5MgorI2RlZmluZSBSNzAwX1BGUF9VQ09ERV9TSVpFIDg0OAorI2RlZmluZSBSNzAwX1BNNF9VQ09ERV9TSVpFIDEzNjAKKworLyogRmlybXdhcmUgTmFtZXMgKi8KK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1I2MDBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUjYwMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjEwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjEwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2MzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYyMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjYyMF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjM1X3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNjM1X21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2NzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY2NzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SUzc4MF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SUzc4MF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzcwX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1JWNzcwX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3MzBfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUlY3MzBfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjcxMF9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9SVjcxMF9tZS5iaW4iKTsKKworCitpbnQgcjYwMF9jc19sZWdhY3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxwLAorCQkJdW5zaWduZWQgZmFtaWx5LCB1MzIgKmliLCBpbnQgKmwpOwordm9pZCByNjAwX2NzX2xlZ2FjeV9pbml0KHZvaWQpOworCiAKICMgZGVmaW5lIEFUSV9QQ0lHQVJUX1BBR0VfU0laRQkJNDA5NgkvKio8IFBDSSBHQVJUIHBhZ2Ugc2l6ZSAqLwogIyBkZWZpbmUgQVRJX1BDSUdBUlRfUEFHRV9NQVNLCQkofihBVElfUENJR0FSVF9QQUdFX1NJWkUtMSkpCkBAIC0yNzUsMTEgKzMwNiw5MyBAQAogCXI2MDBfdm1fZmx1c2hfZ2FydF9yYW5nZShkZXYpOwogfQogCi0vKiBsb2FkIHI2MDAgbWljcm9jb2RlICovCitzdGF0aWMgaW50IHI2MDBfY3BfaW5pdF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3QgY2hhciAqY2hpcF9uYW1lOworCXNpemVfdCBwZnBfcmVxX3NpemUsIG1lX3JlcV9zaXplOworCWNoYXIgZndfbmFtZVszMF07CisJaW50IGVycjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJyNjAwX2NwIiwgMCwgTlVMTCwgMCk7CisJZXJyID0gSVNfRVJSKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyNjAwX2NwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgeworCWNhc2UgQ0hJUF9SNjAwOiAgY2hpcF9uYW1lID0gIlI2MDAiOyAgYnJlYWs7CisJY2FzZSBDSElQX1JWNjEwOiBjaGlwX25hbWUgPSAiUlY2MTAiOyBicmVhazsKKwljYXNlIENISVBfUlY2MzA6IGNoaXBfbmFtZSA9ICJSVjYzMCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjYyMDogY2hpcF9uYW1lID0gIlJWNjIwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNjM1OiBjaGlwX25hbWUgPSAiUlY2MzUiOyBicmVhazsKKwljYXNlIENISVBfUlY2NzA6IGNoaXBfbmFtZSA9ICJSVjY3MCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6IGNoaXBfbmFtZSA9ICJSUzc4MCI7IGJyZWFrOworCWNhc2UgQ0hJUF9SVjc3MDogY2hpcF9uYW1lID0gIlJWNzcwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjc0MDogY2hpcF9uYW1lID0gIlJWNzMwIjsgYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOiBjaGlwX25hbWUgPSAiUlY3MTAiOyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgIEJVRygpOworCX0KKworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKSB7CisJCXBmcF9yZXFfc2l6ZSA9IFI3MDBfUEZQX1VDT0RFX1NJWkUgKiA0OworCQltZV9yZXFfc2l6ZSA9IFI3MDBfUE00X1VDT0RFX1NJWkUgKiA0OworCX0gZWxzZSB7CisJCXBmcF9yZXFfc2l6ZSA9IFBGUF9VQ09ERV9TSVpFICogNDsKKwkJbWVfcmVxX3NpemUgPSBQTTRfVUNPREVfU0laRSAqIDEyOworCX0KKworCURSTV9JTkZPKCJMb2FkaW5nICVzIENQIE1pY3JvY29kZVxuIiwgY2hpcF9uYW1lKTsKKworCXNucHJpbnRmKGZ3X25hbWUsIHNpemVvZihmd19uYW1lKSwgInJhZGVvbi8lc19wZnAuYmluIiwgY2hpcF9uYW1lKTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZkZXZfcHJpdi0+cGZwX2Z3LCBmd19uYW1lLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAoZGV2X3ByaXYtPnBmcF9mdy0+c2l6ZSAhPSBwZnBfcmVxX3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicjYwMF9jcDogQm9ndXMgbGVuZ3RoICV6dSBpbiBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+cGZwX2Z3LT5zaXplLCBmd19uYW1lKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJc25wcmludGYoZndfbmFtZSwgc2l6ZW9mKGZ3X25hbWUpLCAicmFkZW9uLyVzX21lLmJpbiIsIGNoaXBfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZGV2X3ByaXYtPm1lX2Z3LCBmd19uYW1lLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAoZGV2X3ByaXYtPm1lX2Z3LT5zaXplICE9IG1lX3JlcV9zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInI2MDBfY3A6IEJvZ3VzIGxlbmd0aCAlenUgaW4gZmlybXdhcmUgXCIlc1wiXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1lX2Z3LT5zaXplLCBmd19uYW1lKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CitvdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJyNjAwX2NwOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQkgICAgICAgZndfbmFtZSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZGV2X3ByaXYtPnBmcF9mdyk7CisJCWRldl9wcml2LT5wZnBfZncgPSBOVUxMOworCQlyZWxlYXNlX2Zpcm13YXJlKGRldl9wcml2LT5tZV9mdyk7CisJCWRldl9wcml2LT5tZV9mdyA9IE5VTEw7CisJfQorCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkIHI2MDBfY3BfbG9hZF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQogeworCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKIAlpbnQgaTsKIAorCWlmICghZGV2X3ByaXYtPm1lX2Z3IHx8ICFkZXZfcHJpdi0+cGZwX2Z3KQorCQlyZXR1cm47CisKIAlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKQEAgLTI5MiwxMTUgKzQwNSwxOCBAQAogCURSTV9VREVMQVkoMTUwMDApOwogCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgMCk7CiAKKwlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKWRldl9wcml2LT5tZV9mdy0+ZGF0YTsKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRSAqIDM7IGkrKykKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkgICAgIGJlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKIAotCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNjAwKSkgewotCQlEUk1fSU5GTygiTG9hZGluZyBSNjAwIENQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFI2MDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUjYwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSNjAwX2NwX21pY3JvY29kZVtpXVsyXSk7Ci0JCX0KKwlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKWRldl9wcml2LT5wZnBfZnctPmRhdGE7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQorCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwKKwkJCSAgICAgYmUzMl90b19jcHVwKGZ3X2RhdGErKykpOwogCi0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUjYwMCBQRlAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUjYwMF9wZnBfbWljcm9jb2RlW2ldKTsKLQl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjEwKSkgewotCQlEUk1fSU5GTygiTG9hZGluZyBSVjYxMCBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYxMF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYxMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYxMF9jcF9taWNyb2NvZGVbaV1bMl0pOwotCQl9Ci0KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjYxMCBQRlAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2MTBfcGZwX21pY3JvY29kZVtpXSk7Ci0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYzMCkpIHsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MzAgQ1AgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2MzBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2MzBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2MzBfY3BfbWljcm9jb2RlW2ldWzJdKTsKLQkJfQotCi0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MzAgUEZQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjMwX3BmcF9taWNyb2NvZGVbaV0pOwotCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNjIwIENQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjIwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjIwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjIwX2NwX21pY3JvY29kZVtpXVsyXSk7Ci0JCX0KLQotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNjIwIFBGUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYyMF9wZnBfbWljcm9jb2RlW2ldKTsKLQl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjM1KSkgewotCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzNSBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYzNV9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYzNV9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjYzNV9jcF9taWNyb2NvZGVbaV1bMl0pOwotCQl9Ci0KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzNSBQRlAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2MzVfcGZwX21pY3JvY29kZVtpXSk7Ci0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjY3MCkpIHsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY2NzAgQ1AgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzBdKTsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzJdKTsKLQkJfQotCi0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY2NzAgUEZQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjcwX3BmcF9taWNyb2NvZGVbaV0pOwotCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3ODApIHx8Ci0JCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTODgwKSkgewotCQlEUk1fSU5GTygiTG9hZGluZyBSUzc4MC9SUzg4MCBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSUzc4MF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSUzc4MF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSUzc4MF9jcF9taWNyb2NvZGVbaV1bMl0pOwotCQl9Ci0KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSUzc4MC9SUzg4MCBQRlAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlM3ODBfcGZwX21pY3JvY29kZVtpXSk7Ci0JfQogCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOwogCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9SQUREUiwgMCk7CkBAIC00NTksMTEgKzQ3NSwxNCBAQAogCXI2MDBfdm1fZmx1c2hfZ2FydF9yYW5nZShkZXYpOwogfQogCi0vKiBsb2FkIHI2MDAgbWljcm9jb2RlICovCiBzdGF0aWMgdm9pZCByNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKKwljb25zdCBfX2JlMzIgKmZ3X2RhdGE7CiAJaW50IGk7CiAKKwlpZiAoIWRldl9wcml2LT5tZV9mdyB8fCAhZGV2X3ByaXYtPnBmcF9mdykKKwkJcmV0dXJuOworCiAJcjYwMF9kb19jcF9zdG9wKGRldl9wcml2KTsKIAogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCkBAIC00NzYsNDggKzQ5NSwxOCBAQAogCURSTV9VREVMQVkoMTUwMDApOwogCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgMCk7CiAKKwlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKWRldl9wcml2LT5wZnBfZnctPmRhdGE7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BGUF9VQ09ERV9TSVpFOyBpKyspCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBiZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwogCi0JaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzcwKSkgewotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNzcwL1JWNzkwIFBGUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QRlBfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNzcwX3BmcF9taWNyb2NvZGVbaV0pOwotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJZndfZGF0YSA9IChjb25zdCBfX2JlMzIgKilkZXZfcHJpdi0+bWVfZnctPmRhdGE7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQorCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwgYmUzMl90b19jcHVwKGZ3X2RhdGErKykpOworCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CiAKLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY3NzAvUlY3OTAgQ1AgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFI3MDBfUE00X1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLCBSVjc3MF9jcF9taWNyb2NvZGVbaV0pOwotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOwotCi0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjczMCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3NDApKSB7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY3MzAvUlY3NDAgUEZQIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BGUF9VQ09ERV9TSVpFOyBpKyspCi0JCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY3MzBfcGZwX21pY3JvY29kZVtpXSk7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKLQotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOwotCQlEUk1fSU5GTygiTG9hZGluZyBSVjczMC9SVjc0MCBDUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsIFJWNzMwX2NwX21pY3JvY29kZVtpXSk7Ci0JCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7Ci0KLQl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzEwKSkgewotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJWNzEwIFBGUCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QRlBfVUNPREVfU0laRTsgaSsrKQotCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNzEwX3BmcF9taWNyb2NvZGVbaV0pOwotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7Ci0KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlY3MTAgQ1AgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IFI3MDBfUE00X1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLCBSVjcxMF9jcF9taWNyb2NvZGVbaV0pOwotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOwotCi0JfQogCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOwogCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9SQUREUiwgMCk7CkBAIC0xODc0LDYgKzE4NjMsOCBAQAogCiAJRFJNX0RFQlVHKCJcbiIpOwogCisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmNzX211dGV4KTsKKwlyNjAwX2NzX2xlZ2FjeV9pbml0KCk7CiAJLyogaWYgd2UgcmVxdWlyZSBuZXcgbWVtb3J5IG1hcCBidXQgd2UgZG9uJ3QgaGF2ZSBpdCBmYWlsICovCiAJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fTkVXX01FTU1BUCkgJiYgIWRldl9wcml2LT5uZXdfbWVtbWFwKSB7CiAJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpc2UgRFJNIG9uIHRoaXMgY2FyZFxuVGhpcyBjYXJkIHJlcXVpcmVzIGEgbmV3IFgub3JnIEREWCBmb3IgM0RcbiIpOwpAQCAtMTkwNSw3ICsxODk2LDcgQEAKIAkvKiBFbmFibGUgdmJsYW5rIG9uIENSVEMxIGZvciBvbGRlciBYIHNlcnZlcnMKIAkgKi8KIAlkZXZfcHJpdi0+dmJsYW5rX2NydGMgPSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMTsKLQorCWRldl9wcml2LT5kb19ib3hlcyA9IDA7CiAJZGV2X3ByaXYtPmNwX21vZGUgPSBpbml0LT5jcF9tb2RlOwogCiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCBhbnl0aGluZyBvdGhlciB0aGFuIGJ1cy1tYXN0ZXJpbmcgcmluZyBtb2RlLApAQCAtMTk5MSwxMSArMTk4MiwxMSBAQAogCX0gZWxzZQogI2VuZGlmCiAJewotCQlkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlID0gKHZvaWQgKilkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0OworCQlkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0OwogCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKIAkJZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlID0KLQkJICAgICh2b2lkICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0OworCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CiAKIAkJRFJNX0RFQlVHKCJkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlICVwXG4iLAogCQkJICBkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlKTsKQEAgLTIxNDcsNiArMjEzOCwxNCBAQAogCQkJcjYwMF92bV9pbml0KGRldik7CiAJfQogCisJaWYgKCFkZXZfcHJpdi0+bWVfZncgfHwgIWRldl9wcml2LT5wZnBfZncpIHsKKwkJaW50IGVyciA9IHI2MDBfY3BfaW5pdF9taWNyb2NvZGUoZGV2X3ByaXYpOworCQlpZiAoZXJyKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIVxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CiAJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKSkKIAkJcjcwMF9jcF9sb2FkX21pY3JvY29kZShkZXZfcHJpdik7CiAJZWxzZQpAQCAtMjI5MSwzICsyMjkwLDIzOSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgcjYwMF9jcF9kaXNwYXRjaF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlciA9IGZpbGVfcHJpdi0+bWFzdGVyOworCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IG1hc3Rlci0+ZHJpdmVyX3ByaXY7CisJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CisJaW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94OworCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpwYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7CisJaW50IGksIGNwcCwgc3JjX3BpdGNoLCBkc3RfcGl0Y2g7CisJdWludDY0X3Qgc3JjLCBkc3Q7CisJUklOR19MT0NBTFM7CisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKGRldl9wcml2LT5jb2xvcl9mbXQgPT0gUkFERU9OX0NPTE9SX0ZPUk1BVF9BUkdCODg4OCkKKwkJY3BwID0gNDsKKwllbHNlCisJCWNwcCA9IDI7CisKKwlpZiAoc2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9PSAwKSB7CisJCXNyY19waXRjaCA9IGRldl9wcml2LT5iYWNrX3BpdGNoOworCQlkc3RfcGl0Y2ggPSBkZXZfcHJpdi0+ZnJvbnRfcGl0Y2g7CisJCXNyYyA9IGRldl9wcml2LT5iYWNrX29mZnNldCArIGRldl9wcml2LT5mYl9sb2NhdGlvbjsKKwkJZHN0ID0gZGV2X3ByaXYtPmZyb250X29mZnNldCArIGRldl9wcml2LT5mYl9sb2NhdGlvbjsKKwl9IGVsc2UgeworCQlzcmNfcGl0Y2ggPSBkZXZfcHJpdi0+ZnJvbnRfcGl0Y2g7CisJCWRzdF9waXRjaCA9IGRldl9wcml2LT5iYWNrX3BpdGNoOworCQlzcmMgPSBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCQlkc3QgPSBkZXZfcHJpdi0+YmFja19vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CisJfQorCisJaWYgKHI2MDBfcHJlcGFyZV9ibGl0X2NvcHkoZGV2LCBmaWxlX3ByaXYpKSB7CisJCURSTV9FUlJPUigidW5hYmxlIHRvIGFsbG9jYXRlIHZlcnRleCBidWZmZXIgZm9yIHN3YXAgYnVmZmVyXG4iKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbmJveDsgaSsrKSB7CisJCWludCB4ID0gcGJveFtpXS54MTsKKwkJaW50IHkgPSBwYm94W2ldLnkxOworCQlpbnQgdyA9IHBib3hbaV0ueDIgLSB4OworCQlpbnQgaCA9IHBib3hbaV0ueTIgLSB5OworCisJCURSTV9ERUJVRygiJWQsJWQtJWQsJWRcbiIsIHgsIHksIHcsIGgpOworCisJCXI2MDBfYmxpdF9zd2FwKGRldiwKKwkJCSAgICAgICBzcmMsIGRzdCwKKwkJCSAgICAgICB4LCB5LCB4LCB5LCB3LCBoLAorCQkJICAgICAgIHNyY19waXRjaCwgZHN0X3BpdGNoLCBjcHApOworCX0KKwlyNjAwX2RvbmVfYmxpdF9jb3B5KGRldik7CisKKwkvKiBJbmNyZW1lbnQgdGhlIGZyYW1lIGNvdW50ZXIuICBUaGUgY2xpZW50LXNpZGUgM0QgZHJpdmVyIG11c3QKKwkgKiB0aHJvdHRsZSB0aGUgZnJhbWVyYXRlIGJ5IHdhaXRpbmcgZm9yIHRoaXMgdmFsdWUgYmVmb3JlCisJICogcGVyZm9ybWluZyB0aGUgc3dhcGJ1ZmZlciBpb2N0bC4KKwkgKi8KKwlzYXJlYV9wcml2LT5sYXN0X2ZyYW1lKys7CisKKwlCRUdJTl9SSU5HKDMpOworCVI2MDBfRlJBTUVfQUdFKHNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOworCUFEVkFOQ0VfUklORygpOworfQorCitpbnQgcjYwMF9jcF9kaXNwYXRjaF90ZXh0dXJlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgICBkcm1fcmFkZW9uX3RleHR1cmVfdCAqdGV4LAorCQkJICAgICBkcm1fcmFkZW9uX3RleF9pbWFnZV90ICppbWFnZSkKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fYnVmICpidWY7CisJdTMyICpidWZmZXI7CisJY29uc3QgdTggX191c2VyICpkYXRhOworCWludCBzaXplLCBwYXNzX3NpemU7CisJdTY0IHNyY19vZmZzZXQsIGRzdF9vZmZzZXQ7CisKKwlpZiAoIXJhZGVvbl9jaGVja19vZmZzZXQoZGV2X3ByaXYsIHRleC0+b2Zmc2V0KSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgZGVzdGluYXRpb24gb2Zmc2V0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogdGhpcyBtaWdodCBmYWlsIGZvciB6ZXJvLXNpemVkIHVwbG9hZHMgLSBhcmUgdGhvc2UgaWxsZWdhbD8gKi8KKwlpZiAoIXJhZGVvbl9jaGVja19vZmZzZXQoZGV2X3ByaXYsIHRleC0+b2Zmc2V0ICsgdGV4LT5oZWlnaHQgKiB0ZXgtPnBpdGNoIC0gMSkpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGZpbmFsIGRlc3RpbmF0aW9uIG9mZnNldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpemUgPSB0ZXgtPmhlaWdodCAqIHRleC0+cGl0Y2g7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRzdF9vZmZzZXQgPSB0ZXgtPm9mZnNldDsKKworCWlmIChyNjAwX3ByZXBhcmVfYmxpdF9jb3B5KGRldiwgZmlsZV9wcml2KSkgeworCQlEUk1fRVJST1IoInVuYWJsZSB0byBhbGxvY2F0ZSB2ZXJ0ZXggYnVmZmVyIGZvciBzd2FwIGJ1ZmZlclxuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlkbyB7CisJCWRhdGEgPSAoY29uc3QgdTggX191c2VyICopaW1hZ2UtPmRhdGE7CisJCXBhc3Nfc2l6ZSA9IHNpemU7CisKKwkJYnVmID0gcmFkZW9uX2ZyZWVsaXN0X2dldChkZXYpOworCQlpZiAoIWJ1ZikgeworCQkJRFJNX0RFQlVHKCJFQUdBSU5cbiIpOworCQkJaWYgKERSTV9DT1BZX1RPX1VTRVIodGV4LT5pbWFnZSwgaW1hZ2UsIHNpemVvZigqaW1hZ2UpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisKKwkJaWYgKHBhc3Nfc2l6ZSA+IGJ1Zi0+dG90YWwpCisJCQlwYXNzX3NpemUgPSBidWYtPnRvdGFsOworCisJCS8qIERpc3BhdGNoIHRoZSBpbmRpcmVjdCBidWZmZXIuCisJCSAqLworCQlidWZmZXIgPQorCQkgICAgKHUzMiAqKSAoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKyBidWYtPm9mZnNldCk7CisKKwkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihidWZmZXIsIGRhdGEsIHBhc3Nfc2l6ZSkpIHsKKwkJCURSTV9FUlJPUigiRUZBVUxUIG9uIHBhZCwgJWQgYnl0ZXNcbiIsIHBhc3Nfc2l6ZSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWJ1Zi0+ZmlsZV9wcml2ID0gZmlsZV9wcml2OworCQlidWYtPnVzZWQgPSBwYXNzX3NpemU7CisJCXNyY19vZmZzZXQgPSBkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCArIGJ1Zi0+b2Zmc2V0OworCisJCXI2MDBfYmxpdF9jb3B5KGRldiwgc3JjX29mZnNldCwgZHN0X29mZnNldCwgcGFzc19zaXplKTsKKworCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBmaWxlX3ByaXYtPm1hc3RlciwgYnVmKTsKKworCQkvKiBVcGRhdGUgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9yIG5leHQgdGltZSAqLworCQlpbWFnZS0+ZGF0YSA9IChjb25zdCB1OCBfX3VzZXIgKilpbWFnZS0+ZGF0YSArIHBhc3Nfc2l6ZTsKKwkJZHN0X29mZnNldCArPSBwYXNzX3NpemU7CisJCXNpemUgLT0gcGFzc19zaXplOworCX0gd2hpbGUgKHNpemUgPiAwKTsKKwlyNjAwX2RvbmVfYmxpdF9jb3B5KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExlZ2FjeSBjcyBpb2N0bAorICovCitzdGF0aWMgdTMyIHJhZGVvbl9jc19pZF9nZXQoc3RydWN0IGRybV9yYWRlb25fcHJpdmF0ZSAqcmFkZW9uKQoreworCS8qIEZJWE1FOiBjaGVjayBpZiB3cmFwIGFmZmVjdCBsYXN0IHJlcG9ydGVkIHdyYXAgJiBzZXF1ZW5jZSAqLworCXJhZGVvbi0+Y3NfaWRfc2NudCA9IChyYWRlb24tPmNzX2lkX3NjbnQgKyAxKSAmIDB4MDBGRkZGRkY7CisJaWYgKCFyYWRlb24tPmNzX2lkX3NjbnQpIHsKKwkJLyogaW5jcmVtZW50IHdyYXAgY291bnRlciAqLworCQlyYWRlb24tPmNzX2lkX3djbnQgKz0gMHgwMTAwMDAwMDsKKwkJLyogdmFsaWQgc2VxdWVuY2UgY291bnRlciBzdGFydCBhdCAxICovCisJCXJhZGVvbi0+Y3NfaWRfc2NudCA9IDE7CisJfQorCXJldHVybiAocmFkZW9uLT5jc19pZF9zY250IHwgcmFkZW9uLT5jc19pZF93Y250KTsKK30KKworc3RhdGljIHZvaWQgcjYwMF9jc19pZF9lbWl0KGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyICppZCkKK3sKKwlSSU5HX0xPQ0FMUzsKKworCSppZCA9IHJhZGVvbl9jc19pZF9nZXQoZGV2X3ByaXYpOworCisJLyogU0NSQVRDSCAyICovCisJQkVHSU5fUklORygzKTsKKwlSNjAwX0NMRUFSX0FHRSgqaWQpOworCUFEVkFOQ0VfUklORygpOworCUNPTU1JVF9SSU5HKCk7Cit9CisKK3N0YXRpYyBpbnQgcjYwMF9pYl9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZnByaXYsCisJCQlzdHJ1Y3QgZHJtX2J1ZiAqKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOworCisJKmJ1ZmZlciA9IE5VTEw7CisJYnVmID0gcmFkZW9uX2ZyZWVsaXN0X2dldChkZXYpOworCWlmICghYnVmKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWJ1Zi0+ZmlsZV9wcml2ID0gZnByaXY7CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcjYwMF9pYl9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYnVmICpidWYsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZwcml2LCBpbnQgbCwgaW50IHIpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChidWYpIHsKKwkJaWYgKCFyKQorCQkJcjYwMF9jcF9kaXNwYXRjaF9pbmRpcmVjdChkZXYsIGJ1ZiwgMCwgbCAqIDQpOworCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBmcHJpdi0+bWFzdGVyLCBidWYpOworCQlDT01NSVRfUklORygpOworCX0KK30KKworaW50IHI2MDBfY3NfbGVnYWN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZnByaXYpCit7CisJc3RydWN0IGRybV9yYWRlb25fcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcmFkZW9uX2NzICpjcyA9IGRhdGE7CisJc3RydWN0IGRybV9idWYgKmJ1ZjsKKwl1bnNpZ25lZCBmYW1pbHk7CisJaW50IGwsIHIgPSAwOworCXUzMiAqaWIsIGNzX2lkID0gMDsKKworCWlmIChkZXZfcHJpdiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZmFtaWx5ID0gZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLOworCWlmIChmYW1pbHkgPCBDSElQX1I2MDApIHsKKwkJRFJNX0VSUk9SKCJjcyBpb2N0bCB2YWxpZCBvbmx5IGZvciBSNlhYICYgUjdYWCBpbiBsZWdhY3kgbW9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+Y3NfbXV0ZXgpOworCS8qIGdldCBpYiAqLworCXIgPSByNjAwX2liX2dldChkZXYsIGZwcml2LCAmYnVmKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoImliX2dldCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJaWIgPSBkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKyBidWYtPm9mZnNldDsKKwkvKiBub3cgcGFyc2UgY29tbWFuZCBzdHJlYW0gKi8KKwlyID0gcjYwMF9jc19sZWdhY3koZGV2LCBkYXRhLCAgZnByaXYsIGZhbWlseSwgaWIsICZsKTsKKwlpZiAocikgeworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyNjAwX2liX2ZyZWUoZGV2LCBidWYsIGZwcml2LCBsLCByKTsKKwkvKiBlbWl0IGNzIGlkIHNlcXVlbmNlICovCisJcjYwMF9jc19pZF9lbWl0KGRldl9wcml2LCAmY3NfaWQpOworCWNzLT5jc19pZCA9IGNzX2lkOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmNzX211dGV4KTsKKwlyZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiODljZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC0wLDAgKzEsNjU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyNjAwZC5oIgorI2luY2x1ZGUgImF2aXZvZC5oIgorCitzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2NfbW0oc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYyk7CitzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKK3R5cGVkZWYgaW50ICgqbmV4dF9yZWxvY190KShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciosIHN0cnVjdCByYWRlb25fY3NfcmVsb2MqKik7CitzdGF0aWMgbmV4dF9yZWxvY190IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MgPSAmcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbTsKKworLyoqCisgKiByNjAwX2NzX3BhY2tldF9wYXJzZSgpIC0gcGFyc2UgY3AgcGFja2V0IGFuZCBwb2ludCBpYiBpbmRleCB0byBuZXh0IHBhY2tldAorICogQHBhcnNlcjoJcGFyc2VyIHN0cnVjdHVyZSBob2xkaW5nIHBhcnNpbmcgY29udGV4dC4KKyAqIEBwa3Q6CXdoZXJlIHRvIHN0b3JlIHBhY2tldCBpbmZvcm1hdGlvbnMKKyAqCisgKiBBc3N1bWUgdGhhdCBjaHVua19pYl9pbmRleCBpcyBwcm9wZXJseSBzZXQuIFdpbGwgcmV0dXJuIC1FSU5WQUwKKyAqIGlmIHBhY2tldCBpcyBiaWdnZXIgdGhhbiByZW1haW5pbmcgaWIgc2l6ZS4gb3IgaWYgcGFja2V0cyBpcyB1bmtub3duLgorICoqLworaW50IHI2MDBfY3NfcGFja2V0X3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCXVuc2lnbmVkIGlkeCkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwl1aW50MzJfdCBoZWFkZXI7CisKKwlpZiAoaWR4ID49IGliX2NodW5rLT5sZW5ndGhfZHcpIHsKKwkJRFJNX0VSUk9SKCJDYW4gbm90IHBhcnNlIHBhY2tldCBhdCAlZCBhZnRlciBDUyBlbmQgJWQgIVxuIiwKKwkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCXBrdC0+aWR4ID0gaWR4OworCXBrdC0+dHlwZSA9IENQX1BBQ0tFVF9HRVRfVFlQRShoZWFkZXIpOworCXBrdC0+Y291bnQgPSBDUF9QQUNLRVRfR0VUX0NPVU5UKGhlYWRlcik7CisJcGt0LT5vbmVfcmVnX3dyID0gMDsKKwlzd2l0Y2ggKHBrdC0+dHlwZSkgeworCWNhc2UgUEFDS0VUX1RZUEUwOgorCQlwa3QtPnJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOworCQlicmVhazsKKwljYXNlIFBBQ0tFVF9UWVBFMzoKKwkJcGt0LT5vcGNvZGUgPSBDUF9QQUNLRVQzX0dFVF9PUENPREUoaGVhZGVyKTsKKwkJYnJlYWs7CisJY2FzZSBQQUNLRVRfVFlQRTI6CisJCXBrdC0+Y291bnQgPSAtMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJVbmtub3duIHBhY2tldCB0eXBlICVkIGF0ICVkICFcbiIsIHBrdC0+dHlwZSwgaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICgocGt0LT5jb3VudCArIDEgKyBwa3QtPmlkeCkgPj0gaWJfY2h1bmstPmxlbmd0aF9kdykgeworCQlEUk1fRVJST1IoIlBhY2tldCAoJWQ6JWQ6JWQpIGVuZCBhZnRlciBDUyBidWZmZXIgKCVkKSAhXG4iLAorCQkJICBwa3QtPmlkeCwgcGt0LT50eXBlLCBwa3QtPmNvdW50LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2NfbW0oKSAtIHBhcnNlIG5leHQgcGFja2V0IHdoaWNoIHNob3VsZCBiZSByZWxvYyBwYWNrZXQzCisgKiBAcGFyc2VyOgkJcGFyc2VyIHN0cnVjdHVyZSBob2xkaW5nIHBhcnNpbmcgY29udGV4dC4KKyAqIEBkYXRhOgkJcG9pbnRlciB0byByZWxvY2F0aW9uIGRhdGEKKyAqIEBvZmZzZXRfc3RhcnQ6CXN0YXJ0aW5nIG9mZnNldAorICogQG9mZnNldF9tYXNrOglvZmZzZXQgbWFzayAodG8gYWxpZ24gc3RhcnQgb2Zmc2V0IG9uKQorICogQHJlbG9jOgkJcmVsb2MgaW5mb3JtYXRpb25zCisgKgorICogQ2hlY2sgbmV4dCBwYWNrZXQgaXMgcmVsb2NhdGlvbiBwYWNrZXQzLCBkbyBibyB2YWxpZGF0aW9uIGFuZCBjb21wdXRlCisgKiBHUFUgb2Zmc2V0IHVzaW5nIHRoZSBwcm92aWRlZCBzdGFydC4KKyAqKi8KK3N0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKnJlbG9jc19jaHVuazsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jOworCXVuc2lnbmVkIGlkeDsKKwlpbnQgcjsKKworCWlmIChwLT5jaHVua19yZWxvY3NfaWR4ID09IC0xKSB7CisJCURSTV9FUlJPUigiTm8gcmVsb2NhdGlvbiBjaHVuayAhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSpjc19yZWxvYyA9IE5VTEw7CisJaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJcmVsb2NzX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19yZWxvY3NfaWR4XTsKKwlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCk7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQorCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKKwlpZiAocDNyZWxvYy50eXBlICE9IFBBQ0tFVF9UWVBFMyB8fCBwM3JlbG9jLm9wY29kZSAhPSBQQUNLRVQzX05PUCkgeworCQlEUk1fRVJST1IoIk5vIHBhY2tldDMgZm9yIHJlbG9jYXRpb24gZm9yIHBhY2tldCBhdCAlZC5cbiIsCisJCQkgIHAzcmVsb2MuaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlkeCA9IGliX2NodW5rLT5rZGF0YVtwM3JlbG9jLmlkeCArIDFdOworCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKKwkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCisJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogRklYTUU6IHdlIGFzc3VtZSByZWxvYyBzaXplIGlzIDQgZHdvcmRzICovCisJKmNzX3JlbG9jID0gcC0+cmVsb2NzX3B0clsoaWR4IC8gNCldOworCXJldHVybiAwOworfQorCisvKioKKyAqIHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbSgpIC0gcGFyc2UgbmV4dCBwYWNrZXQgd2hpY2ggc2hvdWxkIGJlIHJlbG9jIHBhY2tldDMKKyAqIEBwYXJzZXI6CQlwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICogQGRhdGE6CQlwb2ludGVyIHRvIHJlbG9jYXRpb24gZGF0YQorICogQG9mZnNldF9zdGFydDoJc3RhcnRpbmcgb2Zmc2V0CisgKiBAb2Zmc2V0X21hc2s6CW9mZnNldCBtYXNrICh0byBhbGlnbiBzdGFydCBvZmZzZXQgb24pCisgKiBAcmVsb2M6CQlyZWxvYyBpbmZvcm1hdGlvbnMKKyAqCisgKiBDaGVjayBuZXh0IHBhY2tldCBpcyByZWxvY2F0aW9uIHBhY2tldDMsIGRvIGJvIHZhbGlkYXRpb24gYW5kIGNvbXB1dGUKKyAqIEdQVSBvZmZzZXQgdXNpbmcgdGhlIHByb3ZpZGVkIHN0YXJ0LgorICoqLworc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX25vbW0oc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKKwlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICpyZWxvY3NfY2h1bms7CisJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcDNyZWxvYzsKKwl1bnNpZ25lZCBpZHg7CisJaW50IHI7CisKKwlpZiAocC0+Y2h1bmtfcmVsb2NzX2lkeCA9PSAtMSkgeworCQlEUk1fRVJST1IoIk5vIHJlbG9jYXRpb24gY2h1bmsgIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkqY3NfcmVsb2MgPSBOVUxMOworCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CisJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOworCWlmIChyKSB7CisJCXJldHVybiByOworCX0KKwlwLT5pZHggKz0gcDNyZWxvYy5jb3VudCArIDI7CisJaWYgKHAzcmVsb2MudHlwZSAhPSBQQUNLRVRfVFlQRTMgfHwgcDNyZWxvYy5vcGNvZGUgIT0gUEFDS0VUM19OT1ApIHsKKwkJRFJNX0VSUk9SKCJObyBwYWNrZXQzIGZvciByZWxvY2F0aW9uIGZvciBwYWNrZXQgYXQgJWQuXG4iLAorCQkJICBwM3JlbG9jLmlkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZHggPSBpYl9jaHVuay0+a2RhdGFbcDNyZWxvYy5pZHggKyAxXTsKKwlpZiAoaWR4ID49IHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KSB7CisJCURSTV9FUlJPUigiUmVsb2NzIGF0ICVkIGFmdGVyIHJlbG9jYXRpb25zIGNodW5rIGVuZCAlZCAhXG4iLAorCQkJICBpZHgsIHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSpjc19yZWxvYyA9ICZwLT5yZWxvY3NbMF07CisJKCpjc19yZWxvYyktPmxvYmouZ3B1X29mZnNldCA9ICh1NjQpcmVsb2NzX2NodW5rLT5rZGF0YVtpZHggKyAzXSA8PCAzMjsKKwkoKmNzX3JlbG9jKS0+bG9iai5ncHVfb2Zmc2V0IHw9IHJlbG9jc19jaHVuay0+a2RhdGFbaWR4ICsgMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjYwMF9wYWNrZXQwX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6CisJY2FzZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCisJCSAgICAgICByZWcsIGlkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByNjAwX2NzX3BhcnNlX3BhY2tldDAoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCkKK3sKKwl1bnNpZ25lZCByZWcsIGk7CisJdW5zaWduZWQgaWR4OworCWludCByOworCisJaWR4ID0gcGt0LT5pZHggKyAxOworCXJlZyA9IHBrdC0+cmVnOworCWZvciAoaSA9IDA7IGkgPD0gcGt0LT5jb3VudDsgaSsrLCBpZHgrKywgcmVnICs9IDQpIHsKKwkJciA9IHI2MDBfcGFja2V0MF9jaGVjayhwLCBwa3QsIGlkeCwgcmVnKTsKKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHI2MDBfcGFja2V0M19jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOworCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOworCXZvbGF0aWxlIHUzMiAqaWI7CisJdW5zaWduZWQgaWR4OworCXVuc2lnbmVkIGk7CisJdW5zaWduZWQgc3RhcnRfcmVnLCBlbmRfcmVnLCByZWc7CisJaW50IHI7CisKKwlpYiA9IHAtPmliLT5wdHI7CisJaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJaWR4ID0gcGt0LT5pZHggKyAxOworCXN3aXRjaCAocGt0LT5vcGNvZGUpIHsKKwljYXNlIFBBQ0tFVDNfU1RBUlRfM0RfQ01EQlVGOgorCQlpZiAocC0+ZmFtaWx5ID49IENISVBfUlY3NzAgfHwgcGt0LT5jb3VudCkgeworCQkJRFJNX0VSUk9SKCJiYWQgU1RBUlRfM0RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX0NPTlRFWFRfQ09OVFJPTDoKKwkJaWYgKHBrdC0+Y291bnQgIT0gMSkgeworCQkJRFJNX0VSUk9SKCJiYWQgQ09OVEVYVF9DT05UUk9MXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19JTkRFWF9UWVBFOgorCWNhc2UgUEFDS0VUM19OVU1fSU5TVEFOQ0VTOgorCQlpZiAocGt0LT5jb3VudCkgeworCQkJRFJNX0VSUk9SKCJiYWQgSU5ERVhfVFlQRS9OVU1fSU5TVEFOQ0VTXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19EUkFXX0lOREVYOgorCQlpZiAocGt0LT5jb3VudCAhPSAzKSB7CisJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWliW2lkeCswXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCWliW2lkeCsxXSA9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfRFJBV19JTkRFWF9BVVRPOgorCQlpZiAocGt0LT5jb3VudCAhPSAxKSB7CisJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYX0FVVE9cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVhfSU1NRF9CRToKKwljYXNlIFBBQ0tFVDNfRFJBV19JTkRFWF9JTU1EOgorCQlpZiAocGt0LT5jb3VudCA8IDIpIHsKKwkJCURSTV9FUlJPUigiYmFkIERSQVdfSU5ERVhfSU1NRFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfV0FJVF9SRUdfTUVNOgorCQlpZiAocGt0LT5jb3VudCAhPSA1KSB7CisJCQlEUk1fRVJST1IoImJhZCBXQUlUX1JFR19NRU1cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogYml0IDQgaXMgcmVnICgwKSBvciBtZW0gKDEpICovCisJCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4KzBdICYgMHgxMCkgeworCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCWlmIChyKSB7CisJCQkJRFJNX0VSUk9SKCJiYWQgV0FJVF9SRUdfTUVNXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCQlpYltpZHgrMl0gPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU1VSRkFDRV9TWU5DOgorCQlpZiAocGt0LT5jb3VudCAhPSAzKSB7CisJCQlEUk1fRVJST1IoImJhZCBTVVJGQUNFX1NZTkNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogMHhmZmZmZmZmZi8weDAgaXMgZmx1c2ggYWxsIGNhY2hlIGZsYWcgKi8KKwkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHgrMV0gIT0gMHhmZmZmZmZmZiB8fAorCQkgICAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSAhPSAwKSB7CisJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQkJaWYgKHIpIHsKKwkJCQlEUk1fRVJST1IoImJhZCBTVVJGQUNFX1NZTkNcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWJbaWR4KzJdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX0VWRU5UX1dSSVRFOgorCQlpZiAocGt0LT5jb3VudCAhPSAyICYmIHBrdC0+Y291bnQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJiYWQgRVZFTlRfV1JJVEVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHBrdC0+Y291bnQpIHsKKwkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQlpZiAocikgeworCQkJCURSTV9FUlJPUigiYmFkIEVWRU5UX1dSSVRFXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCQlpYltpZHgrMl0gfD0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX0VWRU5UX1dSSVRFX0VPUDoKKwkJaWYgKHBrdC0+Y291bnQgIT0gNCkgeworCQkJRFJNX0VSUk9SKCJiYWQgRVZFTlRfV1JJVEVfRU9QXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoImJhZCBFVkVOVF9XUklURVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpYltpZHgrMV0gKz0gKHUzMikocmVsb2MtPmxvYmouZ3B1X29mZnNldCAmIDB4ZmZmZmZmZmYpOworCQlpYltpZHgrMl0gfD0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19TRVRfQ09ORklHX1JFRzoKKwkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSB8fAorCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX0VORCkgfHwKKwkJICAgIChlbmRfcmVnID49IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgUEFDS0VUM19TRVRfQ09ORklHX1JFR1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgcGt0LT5jb3VudDsgaSsrKSB7CisJCQlyZWcgPSBzdGFydF9yZWcgKyAoNCAqIGkpOworCQkJc3dpdGNoIChyZWcpIHsKKwkJCWNhc2UgQ1BfQ09IRVJfQkFTRToKKwkJCQkvKiB1c2UgUEFDS0VUM19TVVJGQUNFX1NZTkMgKi8KKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX1NFVF9DT05URVhUX1JFRzoKKwkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVDsKKwkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKKwkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQpIHx8CisJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX0VORCkgfHwKKwkJICAgIChlbmRfcmVnID49IFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX0VORCkpIHsKKwkJCURSTV9FUlJPUigiYmFkIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKKwkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7CisJCQlzd2l0Y2ggKHJlZykgeworCQkJY2FzZSBEQl9ERVBUSF9CQVNFOgorCQkJY2FzZSBDQl9DT0xPUjBfQkFTRToKKwkJCWNhc2UgQ0JfQ09MT1IxX0JBU0U6CisJCQljYXNlIENCX0NPTE9SMl9CQVNFOgorCQkJY2FzZSBDQl9DT0xPUjNfQkFTRToKKwkJCWNhc2UgQ0JfQ09MT1I0X0JBU0U6CisJCQljYXNlIENCX0NPTE9SNV9CQVNFOgorCQkJY2FzZSBDQl9DT0xPUjZfQkFTRToKKwkJCWNhc2UgQ0JfQ09MT1I3X0JBU0U6CisJCQljYXNlIFNRX1BHTV9TVEFSVF9GUzoKKwkJCWNhc2UgU1FfUEdNX1NUQVJUX0VTOgorCQkJY2FzZSBTUV9QR01fU1RBUlRfVlM6CisJCQljYXNlIFNRX1BHTV9TVEFSVF9HUzoKKwkJCWNhc2UgU1FfUEdNX1NUQVJUX1BTOgorCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQkJaWYgKHIpIHsKKwkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NPTlRFWFRfUkVHICIKKwkJCQkJCQkiMHglMDRYXG4iLCByZWcpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJaWJbaWR4KzEraV0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVkdUX0RNQV9CQVNFOgorCQkJY2FzZSBWR1RfRE1BX0JBU0VfSEk6CisJCQkJLyogVGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgYnkgRFJBV19JTkRFWCBwYWNrZXQgMyAqLworCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8wOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8xOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8yOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8zOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8wOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8xOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8yOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8zOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8wOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8xOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8yOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8zOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzA6CisJCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMToKKwkJCWNhc2UgVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8yOgorCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzM6CisJCQkJLyogVGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgYnkgU1RSTU9VVF9CVUZGRVIgcGFja2V0IDMgKi8KKwkJCQlEUk1fRVJST1IoImJhZCBjb250ZXh0IHJlZzogMHglMDh4XG4iLCByZWcpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU0VUX1JFU09VUkNFOgorCQlpZiAocGt0LT5jb3VudCAlIDcpIHsKKwkJCURSTV9FUlJPUigiYmFkIFNFVF9SRVNPVVJDRVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfUkVTT1VSQ0VfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVCkgfHwKKwkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfUkVTT1VSQ0VfRU5EKSB8fAorCQkgICAgKGVuZF9yZWcgPj0gUEFDS0VUM19TRVRfUkVTT1VSQ0VfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1JFU09VUkNFXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCAocGt0LT5jb3VudCAvIDcpOyBpKyspIHsKKwkJCXN3aXRjaCAoR19fU1FfVlRYX0NPTlNUQU5UX1RZUEUoaWJbaWR4KyhpKjcpKzYrMV0pKSB7CisJCQljYXNlIFNRX1RFWF9WVFhfVkFMSURfVEVYVFVSRToKKwkJCQkvKiB0ZXggYmFzZSAqLworCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQkJaWYgKHIpIHsKKwkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1JFU09VUkNFXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWliW2lkeCsxKyhpKjcpKzJdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCQkJLyogdGV4IG1pcCBiYXNlICovCisJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCQlpZiAocikgeworCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfUkVTT1VSQ0VcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJaWJbaWR4KzErKGkqNykrM10gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1FfVEVYX1ZUWF9WQUxJRF9CVUZGRVI6CisJCQkJLyogdnR4IGJhc2UgKi8KKwkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQkJCWlmIChyKSB7CisJCQkJCURSTV9FUlJPUigiYmFkIFNFVF9SRVNPVVJDRVxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlpYltpZHgrMSsoaSo3KSswXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmZmZmZmZmKTsKKwkJCQlpYltpZHgrMSsoaSo3KSsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1FfVEVYX1ZUWF9JTlZBTElEX1RFWFRVUkU6CisJCQljYXNlIFNRX1RFWF9WVFhfSU5WQUxJRF9CVUZGRVI6CisJCQlkZWZhdWx0OgorCQkJCURSTV9FUlJPUigiYmFkIFNFVF9SRVNPVVJDRVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX1NFVF9BTFVfQ09OU1Q6CisJCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9PRkZTRVQpIHx8CisJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9FTkQpIHx8CisJCSAgICAoZW5kX3JlZyA+PSBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0FMVV9DT05TVFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1Q6CisJCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVDsKKwkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKKwkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVCkgfHwKKwkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQk9PTF9DT05TVF9FTkQpIHx8CisJCSAgICAoZW5kX3JlZyA+PSBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX0VORCkpIHsKKwkJCURSTV9FUlJPUigiYmFkIFNFVF9CT09MX0NPTlNUXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19TRVRfTE9PUF9DT05TVDoKKwkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUKSB8fAorCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9MT09QX0NPTlNUX0VORCkgfHwKKwkJICAgIChlbmRfcmVnID49IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0xPT1BfQ09OU1RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX1NFVF9DVExfQ09OU1Q6CisJCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DVExfQ09OU1RfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NUTF9DT05TVF9PRkZTRVQpIHx8CisJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0NUTF9DT05TVF9FTkQpIHx8CisJCSAgICAoZW5kX3JlZyA+PSBQQUNLRVQzX1NFVF9DVExfQ09OU1RfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NUTF9DT05TVFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBBQ0tFVDNfU0VUX1NBTVBMRVI6CisJCWlmIChwa3QtPmNvdW50ICUgMykgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1NBTVBMRVJcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX1NBTVBMRVJfT0ZGU0VUOworCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OworCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX1NBTVBMRVJfT0ZGU0VUKSB8fAorCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9TQU1QTEVSX0VORCkgfHwKKwkJICAgIChlbmRfcmVnID49IFBBQ0tFVDNfU0VUX1NBTVBMRVJfRU5EKSkgeworCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1NBTVBMRVJcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQUNLRVQzX1NVUkZBQ0VfQkFTRV9VUERBVEU6CisJCWlmIChwLT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCB8fCBwLT5mYW1pbHkgPT0gQ0hJUF9SNjAwKSB7CisJCQlEUk1fRVJST1IoImJhZCBTVVJGQUNFX0JBU0VfVVBEQVRFXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChwa3QtPmNvdW50KSB7CisJCQlEUk1fRVJST1IoImJhZCBTVVJGQUNFX0JBU0VfVVBEQVRFXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUEFDS0VUM19OT1A6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiUGFja2V0MyBvcGNvZGUgJXggbm90IHN1cHBvcnRlZFxuIiwgcGt0LT5vcGNvZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByNjAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHBrdDsKKwlpbnQgcjsKKworCWRvIHsKKwkJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwa3QsIHAtPmlkeCk7CisJCWlmIChyKSB7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlwLT5pZHggKz0gcGt0LmNvdW50ICsgMjsKKwkJc3dpdGNoIChwa3QudHlwZSkgeworCQljYXNlIFBBQ0tFVF9UWVBFMDoKKwkJCXIgPSByNjAwX2NzX3BhcnNlX3BhY2tldDAocCwgJnBrdCk7CisJCQlicmVhazsKKwkJY2FzZSBQQUNLRVRfVFlQRTI6CisJCQlicmVhazsKKwkJY2FzZSBQQUNLRVRfVFlQRTM6CisJCQlyID0gcjYwMF9wYWNrZXQzX2NoZWNrKHAsICZwa3QpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoIlVua25vd24gcGFja2V0IHR5cGUgJWQgIVxuIiwgcGt0LnR5cGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CisJfSB3aGlsZSAocC0+aWR4IDwgcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF0ubGVuZ3RoX2R3KTsKKyNpZiAwCisJZm9yIChyID0gMDsgciA8IHAtPmliLT5sZW5ndGhfZHc7IHIrKykgeworCQlwcmludGsoS0VSTl9JTkZPICIlMDVkICAweCUwOFhcbiIsIHIsIHAtPmliLT5wdHJbcl0pOworCQltZGVsYXkoMSk7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcjYwMF9jc19wYXJzZXJfcmVsb2NzX2xlZ2FjeShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKK3sKKwlpZiAocC0+Y2h1bmtfcmVsb2NzX2lkeCA9PSAtMSkgeworCQlyZXR1cm4gMDsKKwl9CisJcC0+cmVsb2NzID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJhZGVvbl9jc19yZWxvYyksIEdGUF9LRVJORUwpOworCWlmIChwLT5yZWxvY3MgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY3NfcGFyc2VyX2ZpbmkoKSAtIGNsZWFuIHBhcnNlciBzdGF0ZXMKKyAqIEBwYXJzZXI6CXBhcnNlciBzdHJ1Y3R1cmUgaG9sZGluZyBwYXJzaW5nIGNvbnRleHQuCisgKiBAZXJyb3I6CWVycm9yIG51bWJlcgorICoKKyAqIElmIGVycm9yIGlzIHNldCB0aGFuIHVudmFsaWRhdGUgYnVmZmVyLCBvdGhlcndpc2UganVzdCBmcmVlIG1lbW9yeQorICogdXNlZCBieSBwYXJzaW5nIGNvbnRleHQuCisgKiovCitzdGF0aWMgdm9pZCByNjAwX2NzX3BhcnNlcl9maW5pKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwYXJzZXIsIGludCBlcnJvcikKK3sKKwl1bnNpZ25lZCBpOworCisJa2ZyZWUocGFyc2VyLT5yZWxvY3MpOworCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5jaHVua3M7IGkrKykgeworCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rZGF0YSk7CisJfQorCWtmcmVlKHBhcnNlci0+Y2h1bmtzKTsKKwlrZnJlZShwYXJzZXItPmNodW5rc19hcnJheSk7Cit9CisKK2ludCByNjAwX2NzX2xlZ2FjeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQl1bnNpZ25lZCBmYW1pbHksIHUzMiAqaWIsIGludCAqbCkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciBwYXJzZXI7CisJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CisJc3RydWN0IHJhZGVvbl9pYglmYWtlX2liOworCWludCByOworCisJLyogaW5pdGlhbGl6ZSBwYXJzZXIgKi8KKwltZW1zZXQoJnBhcnNlciwgMCwgc2l6ZW9mKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyKSk7CisJcGFyc2VyLmZpbHAgPSBmaWxwOworCXBhcnNlci5yZGV2ID0gTlVMTDsKKwlwYXJzZXIuZmFtaWx5ID0gZmFtaWx5OworCXBhcnNlci5pYiA9ICZmYWtlX2liOworCWZha2VfaWIucHRyID0gaWI7CisJciA9IHJhZGVvbl9jc19wYXJzZXJfaW5pdCgmcGFyc2VyLCBkYXRhKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciAhXG4iKTsKKwkJcjYwMF9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByNjAwX2NzX3BhcnNlcl9yZWxvY3NfbGVnYWN5KCZwYXJzZXIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHBhcnNlIHJlbG9jYXRpb24gIVxuIik7CisJCXI2MDBfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCXJldHVybiByOworCX0KKwkvKiBDb3B5IHRoZSBwYWNrZXQgaW50byB0aGUgSUIsIHRoZSBwYXJzZXIgd2lsbCByZWFkIGZyb20gdGhlCisJICogaW5wdXQgbWVtb3J5IChjYWNoZWQpIGFuZCB3cml0ZSB0byB0aGUgSUIgKHdoaWNoIGNhbiBiZQorCSAqIHVuY2FjaGVkKS4gKi8KKwlpYl9jaHVuayA9ICZwYXJzZXIuY2h1bmtzW3BhcnNlci5jaHVua19pYl9pZHhdOworCXBhcnNlci5pYi0+bGVuZ3RoX2R3ID0gaWJfY2h1bmstPmxlbmd0aF9kdzsKKwltZW1jcHkoKHZvaWQgKilwYXJzZXIuaWItPnB0ciwgaWJfY2h1bmstPmtkYXRhLCBpYl9jaHVuay0+bGVuZ3RoX2R3KjQpOworCSpsID0gcGFyc2VyLmliLT5sZW5ndGhfZHc7CisJciA9IHI2MDBfY3NfcGFyc2UoJnBhcnNlcik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcjYwMF9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKKwlyZXR1cm4gcjsKK30KKwordm9pZCByNjAwX2NzX2xlZ2FjeV9pbml0KHZvaWQpCit7CisJcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyA9ICZyNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX25vbW07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfbWljcm9jb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfbWljcm9jb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OGM4YjRiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMjk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLSAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICovCi0KLSNpZm5kZWYgUjYwMF9NSUNST0NPREVfSAotI2RlZmluZSBSNjAwX01JQ1JPQ09ERV9ICi0KLXN0YXRpYyBjb25zdCBpbnQgTUVfSlVNUF9UQUJMRV9TVEFSVCA9IDE3NjQ7Ci1zdGF0aWMgY29uc3QgaW50IE1FX0pVTVBfVEFCTEVfRU5EICAgPSAxNzkyOwotCi0jZGVmaW5lIFBGUF9VQ09ERV9TSVpFIDU3NgotI2RlZmluZSBQTTRfVUNPREVfU0laRSAxNzkyCi0jZGVmaW5lIFI3MDBfUEZQX1VDT0RFX1NJWkUgODQ4Ci0jZGVmaW5lIFI3MDBfUE00X1VDT0RFX1NJWkUgMTM2MAotCi1zdGF0aWMgY29uc3QgdTMyIFI2MDBfY3BfbWljcm9jb2RlW11bM10gPSB7Ci0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKLSAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCi0gICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MCB9LAotICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwODcgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJlLCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWUxIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4YzA0MDM2MjAsIDB4MDkwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA4ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOGQgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDhmIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA4ZiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTUgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwOWQgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlhIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5YyB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWMgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGRiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOGMgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMjggfSwKLSAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGM1IH0sCi0gICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZDQgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwY2YgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBjZSB9LAotICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDAgfSwKLSAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQwIH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZDYgfSwKLSAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJlLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWVhIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmMSB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGYxIH0sCi0gICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmNiB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMDQgfSwKLSAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGZkIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAzIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwNCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTBkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTEwIH0sCi0gICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTI3IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEzIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEyZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTUxIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmE0IH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTM4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNTEgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmE0IH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxN2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTg5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTczIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxNmYgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE4NCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJlNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE2NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODEgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE4OCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTI4IH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDA2MDBlMmQsIDB4MWFhIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwNjAwZTJkLCAweDFhYSB9LAotICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFhNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAyZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFjZCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxYzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWQ2IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFjNSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxYmUgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFkNiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDIgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYTQgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTUgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDFmMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MWYyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYTQgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmM5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjA2IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxZmYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjFjIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJlNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzNSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDJmZSB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjY1IH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjUzIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI0OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI0YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjUwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjUzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYWEgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1YSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNWYgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWUgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJkMiB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjNmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MjhjIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI3YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTI4IH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyODYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwNDAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjMiB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmMyIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyYzUgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyYzUgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmM1IH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmM1IH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJjNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjllIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWU0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmM3IH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDgwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzAxIH0sCi0gICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDMzNCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzNkIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTEgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTUgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDM0OSB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzQ5IH0sCi0gICAgeyAweDAwMDAyMTA0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2MCB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDgwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzNzYgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4MCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5OCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzlhIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWYgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzgyIH0sCi0gICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzhlIH0sCi0gICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNWUgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYWIgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2JlIH0sCi0gICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzY2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2NmIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2Q1IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCi0gICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZTIgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZWEgfSwKLSAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHgzZmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCi0gICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKLSAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNlNSB9LAotICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCi0gICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKLSAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNlNSB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQyZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDNjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NDQgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDRkIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NDQ5IH0sCi0gICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NDRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ1NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDZkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDU5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0NmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDY4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0NmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ2ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ3NyB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQzYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NDhhIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDQ4YiB9LAotICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGFlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NGE5IH0sCi0gICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NGFjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiMiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiOSB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGJiIH0sCi0gICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGViIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZGEgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGNlIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTEgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZTAwMDAwMDAsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDRmNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDQwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAotICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAotICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYwMiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTQxIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NDkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTQ5IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTViIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTU5IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NTU0IH0sCi0gICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NTU3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU1YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU1ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAotICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1NmIgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2QgfSwKLSAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTdiIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThkIH0sCi0gICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4YiB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDYxNCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTk5IH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NTlmIH0sCi0gICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDViNyB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2EsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlMSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzVlIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg1ZGMgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NWY5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2MTIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwNDAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjE0IH0sCi0gICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjE3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxMzMwNGVmLCAweDA1OWIwMjM5LCAweDAwMCB9LAotICAgIHsgMHgwMWIwMDE1OSwgMHgwNDI1MDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDIxMjAxZjYsIDB4MDIzOTAxNDIsIDB4MDAwIH0sCi0gICAgeyAweDAyMTAwMjJlLCAweDAyODkwMjJhLCAweDAwMCB9LAotICAgIHsgMHgwM2MyMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDVjZDA1Y2UsIDB4MDMwODA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNWEwLCAweDAzMDkwMzI5LCAweDAwMCB9LAotICAgIHsgMHgwMzEzMDI2YiwgMHgwMzJiMDMxZCwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNTJjLCAweDA1OWIwNTliLCAweDAwMCB9LAotICAgIHsgMHgwM2E1MDU5YiwgMHgwNGEyMDMyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDQ4MTA0MzMsIDB4MDQyMzA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA0YmIwNGVkLCAweDA0MjcwNGM4LCAweDAwMCB9LAotICAgIHsgMHgwNDMzMDRmNCwgMHgwMzNhMDM2NSwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAotICAgIHsgMHgwNTliMDU5YiwgMHgwNWI5MDVhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1OWIsIDB4MDAwNzA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAotICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDNlMzAzZDgsIDB4MDNmMzAzZjEsIDB4MDAwIH0sCi0gICAgeyAweDAzZjkwM2Y1LCAweDAzZjcwM2ZiLCAweDAwMCB9LAotICAgIHsgMHgwNDA3MDQwMywgMHgwNDBmMDQwYiwgMHgwMDAgfSwKLSAgICB7IDB4MDQxNzA0MTMsIDB4MDQxZjA0MWIsIDB4MDAwIH0sCi0gICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAotICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKLSAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwNjAwLCAweDA2MTkwMDA2LCAweDAwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSNjAwX3BmcF9taWNyb2NvZGVbXSA9IHsKLTB4ZDQwMDcxLAotMHhkNDAwNzIsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weDgwMDAwMywKLTB4Y2EwNDAwLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4YzQxODM4LAotMHhjYTI0MDAsCi0weGNhMjgwMCwKLTB4OTU4MWE4LAotMHhjNDFjM2EsCi0weGMzYzAwMCwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDdjNzQ0YiwKLTB4YzIwMDA1LAotMHg5OWMwMDAsCi0weGM0MWMzYSwKLTB4N2M3NDRjLAotMHhjMGZmZjAsCi0weDA0MmMwNCwKLTB4MzA5MDAyLAotMHg3ZDI1MDAsCi0weDM1MTQwMiwKLTB4N2QzNTBiLAotMHgyNTU0MDMsCi0weDdjZDU4MCwKLTB4MjU5YzAzLAotMHg5NWMwMDQsCi0weGQ1MDAxYiwKLTB4N2VkZGMxLAotMHg3ZDlkODAsCi0weGQ2ODAxYiwKLTB4ZDU4MDFiLAotMHhkNDQwMWUsCi0weGQ1NDAxZSwKLTB4ZDY0MDFlLAotMHhkNjgwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg5NzgzZDQsCi0weGQ1YzAxZSwKLTB4Y2EwODAwLAotMHg4MDAwMWIsCi0weGNhMGMwMCwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weDgwMDAwZCwKLTB4YzQxODM4LAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ODAwMDBkLAotMHhjNDE4MzgsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2ExODAwLAotMHhkNDQwMWUsCi0weGQ1ODAxZSwKLTB4ODAwMDU0LAotMHhkNDAwNzMsCi0weGQ0NDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ4MDE5LAotMHhkNGMwMTgsCi0weGQ1MDAxNywKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZTIwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weGQ0ODA2MCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDIsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhkNDgwNjEsCi0weGQ0NDAxZSwKLTB4ODAwMDAyLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weGQ0ODAxNiwKLTB4ZDRjMDE2LAotMHhkNDgwMWUsCi0weDgwMDFiOSwKLTB4ZDRjMDFlLAotMHhjNjA4M2UsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgwMDQsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHhkNDIwMTMsCi0weGQ1NjA2NSwKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGQ1NjAxYywKLTB4ODAwMDAyLAotMHgwNjIwMDEsCi0weGM2MDgzZSwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODNmNywKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weDgwMDA3YSwKLTB4ZDQyMDEzLAotMHhjNjA4M2UsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5ODgzZWYsCi0weGNhMTQwMCwKLTB4ZDQwMDY0LAotMHg4MDAwOGUsCi0weDAwMDAwMCwKLTB4YzQxNDMyLAotMHhjNjE4M2UsCi0weGM0MDgyZiwKLTB4OTU0MDA1LAotMHhjNDBjMzAsCi0weGQ0NDAxZSwKLTB4ODAwMDAyLAotMHhlZTAwMWUsCi0weDk1ODNmNSwKLTB4YzQxMDMxLAotMHhkNDQwMzMsCi0weGQ1MjA2NSwKLTB4ZDRhMDFjLAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZDQwMDczLAotMHhlNDAxNWUsCi0weGQ0MDAxZSwKLTB4ODAwMWI5LAotMHgwNjIwMDEsCi0weDBhMjAwMSwKLTB4ZDYwMDc0LAotMHhjNDA4MzYsCi0weGM2MTA0MCwKLTB4OTg4MDA3LAotMHhjYzM4MzUsCi0weDk1MDEwZiwKLTB4ZDQwMDFmLAotMHhkNDYwNjIsCi0weDgwMDAwMiwKLTB4ZDQyMDYyLAotMHhjYzE0MzMsCi0weDg0MDFiYywKLTB4ZDQwMDcwLAotMHhkNTQwMWUsCi0weDgwMDAwMiwKLTB4ZWUwMDFlLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDRjMDFhLAotMHg4NDAxYmMsCi0weGQ1MDAxYSwKLTB4Y2MwNDQzLAotMHgzNTEwMWYsCi0weDJjOTQwMSwKLTB4N2QwOThiLAotMHg5ODQwMDUsCi0weDdkMTVjYiwKLTB4ZDQwMDFhLAotMHg4MDAxYjksCi0weGQ0MDA2ZCwKLTB4MzQ0NDAxLAotMHhjYzBjNDQsCi0weDk4NDAzYSwKLTB4Y2MyYzQ2LAotMHg5NTgwMDQsCi0weGNjMDQ0NSwKLTB4ODAwMWI5LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4MjgyODAxLAotMHg4NDAwZjMsCi0weGNjMTAwMywKLTB4OTg4MDFiLAotMHgwNDM4MGMsCi0weDg0MDBmMywKLTB4Y2MxMDAzLAotMHg5ODgwMTcsCi0weDA0MzgwOCwKLTB4ODQwMGYzLAotMHhjYzEwMDMsCi0weDk4ODAxMywKLTB4MDQzODA0LAotMHg4NDAwZjMsCi0weGNjMTAwMywKLTB4OTg4MDE0LAotMHhjYzEwNDcsCi0weDlhODAwOSwKLTB4Y2MxNDQ4LAotMHg5ODQwZGEsCi0weGQ0MDA2ZCwKLTB4Y2MxODQ0LAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4ODAwMGNjLAotMHhkNTgwMWEsCi0weDk2YzBkMywKLTB4ZDQwMDZkLAotMHg4MDAxYjksCi0weGQ0MDA2ZSwKLTB4OWFjMDAzLAotMHhkNDAwNmQsCi0weGQ0MDA2ZSwKLTB4ODAwMDAyLAotMHhlYzAwN2YsCi0weDlhYzBjYSwKLTB4ZDQwMDZkLAotMHg4MDAxYjksCi0weGQ0MDA2ZSwKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4N2Q5MTAzLAotMHg3ZGQ1ODMsCi0weDdkMTkwYywKLTB4MzVjYzFmLAotMHgzNTcwMWYsCi0weDdjZjBjYiwKLTB4N2NkMDhiLAotMHg4ODAwMDAsCi0weDdlOGU4YiwKLTB4OTVjMDA0LAotMHhkNDAwNmUsCi0weDgwMDFiOSwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzEwMDMsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weGNjMjQwMywKLTB4Y2MyODAzLAotMHgzNWM0MWYsCi0weDM2YjAxZiwKLTB4N2M3MDRiLAotMHgzNGYwMWYsCi0weDdjNzA0YiwKLTB4MzU3MDFmLAotMHg3YzcwNGIsCi0weDdkODg4MSwKLTB4N2RjY2MxLAotMHg3ZTUxMDEsCi0weDdlOTU0MSwKLTB4N2M5MDgyLAotMHg3Y2Q0YzIsCi0weDdjODQ4YiwKLTB4OWFjMDAzLAotMHg3YzhjOGIsCi0weDJjODgwMSwKLTB4OTg4MDljLAotMHhkNDAwNmQsCi0weDk4NDA5YSwKLTB4ZDQwMDZlLAotMHhjYzA4NDcsCi0weGNjMGM0OCwKLTB4Y2MxMDQ0LAotMHhkNDgwMWEsCi0weGQ0YzAxYSwKLTB4ODAwMTA0LAotMHhkNTAwMWEsCi0weGNjMDgzMiwKLTB4ZDQwMDMyLAotMHg5NDgyZDgsCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDIsCi0weGQ0MDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0NDAxZSwKLTB4Y2ExNDAwLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGQ1NDAzNCwKLTB4ODAwMDAyLAotMHhlZTAwMWUsCi0weDI4MDQwNCwKLTB4ZTIwMDFhLAotMHhlMjAwMWEsCi0weGQ0NDAxYSwKLTB4Y2EzODAwLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weDk4ODJiYywKLTB4MDAwMDAwLAotMHg4NDAxYmMsCi0weGQ3ODA2ZiwKLTB4ODAwMDAyLAotMHhlZTAwMWYsCi0weGNhMDQwMCwKLTB4YzJmZjAwLAotMHhjYzA4MzQsCi0weGMxM2ZmZiwKLTB4N2M3NGNiLAotMHg3Y2M5MGIsCi0weDdkMDEwZiwKLTB4OTkwMmFmLAotMHg3YzczOGIsCi0weDg0MDFiYywKLTB4ZDc4MDZmLAotMHg4MDAwMDIsCi0weGVlMDAxZiwKLTB4Y2EwODAwLAotMHgyODE5MDAsCi0weDdkODk4YiwKLTB4OTU4MDE0LAotMHgyODE0MDQsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhjYTFjMDAsCi0weGNhMjQwMCwKLTB4ZTIwMDFmLAotMHhkNGMwMWEsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHhjYzE4MDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weDdkYTU4YiwKLTB4N2Q5YzQ3LAotMHg5ODQyOTYsCi0weDAwMDAwMCwKLTB4ODAwMTY0LAotMHhkNGMwMWEsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDIsCi0weGVlMDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4MjQ4YzA2LAotMHgwY2NjMDYsCi0weDk4YzAwNiwKLTB4Y2MxMDQ5LAotMHg5OTAwMDQsCi0weGQ0MDA3MSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDIsCi0weGVlMDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDM0ZDAxOCwKLTB4MjUxMDAxLAotMHg5NTAwMWYsCi0weGMxN2ZmZiwKLTB4Y2ExMDAwLAotMHhjYTE0MDAsCi0weGNhMTgwMCwKLTB4ZDQ4MDFkLAotMHhkNGMwMWQsCi0weDdkYjE4YiwKLTB4YzE0MjAyLAotMHhjMmMwMDEsCi0weGQ1ODAxZCwKLTB4MzRkYzBlLAotMHg3ZDVkNGMsCi0weDdmNzM0YywKLTB4ZDc0MDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4YzE0MjAwLAotMHhjMmMwMDAsCi0weDA5OWMwMSwKLTB4MzFkYzEwLAotMHg3ZjVmNGMsCi0weDdmNzM0YywKLTB4N2Q4MzgwLAotMHhkNTgwNmYsCi0weGQ1ODA2NiwKLTB4ZDc0MDFlLAotMHhlYzAwNWUsCi0weGM4MjQwMiwKLTB4ODAwMWI5LAotMHhkNjAwNzQsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDgwMDAwMiwKLTB4ZWUwMDFlLAotMHg4MDAwMDIsCi0weGVlMDAxZiwKLTB4ZDQwMDFmLAotMHg4MDAwMDIsCi0weGQ0MDAxZiwKLTB4ZDQwMDFmLAotMHg4ODAwMDAsCi0weGQ0MDAxZiwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAxMDE3NCwKLTB4MDIwMTdiLAotMHgwMzAwOTAsCi0weDA0MDA4MCwKLTB4MDUwMDA1LAotMHgwNjAwNDAsCi0weDA3MDAzMywKLTB4MDgwMTJmLAotMHgwOTAwNDcsCi0weDBhMDAzNywKLTB4MTAwMWI3LAotMHgxNzAwYTQsCi0weDIyMDEzZCwKLTB4MjMwMTRjLAotMHgyMDAwYjUsCi0weDI0MDEyOCwKLTB4MjcwMDRlLAotMHgyODAwNmIsCi0weDJhMDA2MSwKLTB4MmIwMDUzLAotMHgyZjAwNjYsCi0weDMyMDA4OCwKLTB4MzQwMTgyLAotMHgzYzAxNTksCi0weDNmMDA3MywKLTB4NDEwMThmLAotMHg0NDAxMzEsCi0weDU1MDE3NiwKLTB4NTYwMTdkLAotMHg2MDAwMGMsCi0weDYxMDAzNSwKLTB4NjIwMDM5LAotMHg2MzAwMzksCi0weDY0MDAzOSwKLTB4NjUwMDM5LAotMHg2NjAwMzksCi0weDY3MDAzOSwKLTB4NjgwMDNiLAotMHg2OTAwNDIsCi0weDZhMDA0OSwKLTB4NmIwMDQ5LAotMHg2YzAwNDksCi0weDZkMDA0OSwKLTB4NmUwMDQ5LAotMHg2ZjAwNDksCi0weDczMDFiNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLTB4MDAwMDA3LAotMHgwMDAwMDcsCi0weDAwMDAwNywKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY2MTBfY3BfbWljcm9jb2RlW11bM10gPSB7Ci0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKLSAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCi0gICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKLSAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCi0gICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAotICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKLSAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCi0gICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAotICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKLSAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWMwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAotICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAotICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCi0gICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCi0gICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKLSAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMDIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDQ1IH0sCi0gICAgeyAweDAwODAwMDAwLCAweGMwNDk0YTIwLCAweDQ0NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDRiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2MSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjYgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMyB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTQgfSwKLSAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YjAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhYyB9LAotICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjZSB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGQwIH0sCi0gICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NTAwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUzIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2N2IgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2NiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3YSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4ZiB9LAotICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThkIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWEwIH0sCi0gICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWUgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YjEgfSwKLSAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhZiB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViZSB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjNCB9LAotICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVkMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUzIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDUgfSwKLSAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGUgfSwKLSAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMyB9LAotICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAotICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2QgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjNiIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjOSB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY0MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJkIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjhiIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4ZCB9LAotICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5MCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjkyIH0sCi0gICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4Njk1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxNDIwNTAyLCAweDA1YzAwMjUwLCAweDAwMCB9LAotICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCi0gICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAotICAgIHsgMHgwM2Q3MDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDY0OTA2NGEsIDB4MDMxZjA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWM1LCAweDAzMjAwMzQwLCAweDAwMCB9LAotICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNTUxLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwM2JhMDVjMCwgMHgwNGJiMDM0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDQ5YTA0NTAsIDB4MDQzZDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA0ZDAwNWMwLCAweDA0NDEwNGRkLCAweDAwMCB9LAotICAgIHsgMHgwNDUwMDUwNywgMHgwMzUxMDM3NSwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNjNmMDVjNywgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDAwNzA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCi0gICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAotICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA0MzgwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwNjc5LCAweDA2OTcwMDA2LCAweDAwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjYxMF9wZnBfbWljcm9jb2RlW10gPSB7Ci0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weDdjMDM4YiwKLTB4ODAwMWI4LAotMHg3YzAzOGIsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjNDE4MzgsCi0weGNhMjQwMCwKLTB4Y2EyODAwLAotMHg5NTgxYTgsCi0weGM0MWMzYSwKLTB4YzNjMDAwLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4N2M3NDRiLAotMHhjMjAwMDUsCi0weDk5YzAwMCwKLTB4YzQxYzNhLAotMHg3Yzc0NGMsCi0weGMwZmZmMCwKLTB4MDQyYzA0LAotMHgzMDkwMDIsCi0weDdkMjUwMCwKLTB4MzUxNDAyLAotMHg3ZDM1MGIsCi0weDI1NTQwMywKLTB4N2NkNTgwLAotMHgyNTljMDMsCi0weDk1YzAwNCwKLTB4ZDUwMDFiLAotMHg3ZWRkYzEsCi0weDdkOWQ4MCwKLTB4ZDY4MDFiLAotMHhkNTgwMWIsCi0weGQ0NDAxZSwKLTB4ZDU0MDFlLAotMHhkNjQwMWUsCi0weGQ2ODAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDk3ODNkMywKLTB4ZDVjMDFlLAotMHhjYTA4MDAsCi0weDgwMDAxYSwKLTB4Y2EwYzAwLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTE4MDAsCi0weGQ0NDAxZSwKLTB4ZDU4MDFlLAotMHg4MDAwNTMsCi0weGQ0MDA3NSwKLTB4ZDQ0MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDgwMTksCi0weGQ0YzAxOCwKLTB4ZDUwMDE3LAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhlMjAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4ZDQ4MDYwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGQ0ODA2MSwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ZDQ4MDE2LAotMHhkNGMwMTYsCi0weGQ0ODAxZSwKLTB4ODAwMWI4LAotMHhkNGMwMWUsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODAwNCwKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weGQ0MjAxMywKLTB4ZDU2MDY1LAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZDU2MDFjLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4M2Y3LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ODAwMDc5LAotMHhkNDIwMTMsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk4ODNlZiwKLTB4Y2ExNDAwLAotMHhkNDAwNjQsCi0weDgwMDA4ZCwKLTB4MDAwMDAwLAotMHhjNDE0MzIsCi0weGM2MTg0MywKLTB4YzQwODJmLAotMHg5NTQwMDUsCi0weGM0MGMzMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4OTU4M2Y1LAotMHhjNDEwMzEsCi0weGQ0NDAzMywKLTB4ZDUyMDY1LAotMHhkNGEwMWMsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhlNDAxNWUsCi0weGQ0MDAxZSwKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGNhMTgwMCwKLTB4MGEyMDAxLAotMHhkNjAwNzYsCi0weGM0MDgzNiwKLTB4OTg4MDA3LAotMHhjNjEwNDUsCi0weDk1MDExMCwKLTB4ZDQwMDFmLAotMHhkNDYwNjIsCi0weDgwMDAwMCwKLTB4ZDQyMDYyLAotMHhjYzM4MzUsCi0weGNjMTQzMywKLTB4ODQwMWJiLAotMHhkNDAwNzIsCi0weGQ1NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGUyMDAxYSwKLTB4ODQwMWJiLAotMHhlMjAwMWEsCi0weGNjMTA0YiwKLTB4Y2MwNDQ3LAotMHgyYzk0MDEsCi0weDdkMDk4YiwKLTB4OTg0MDA1LAotMHg3ZDE1Y2IsCi0weGQ0MDAxYSwKLTB4ODAwMWI4LAotMHhkNDAwNmQsCi0weDM0NDQwMSwKLTB4Y2MwYzQ4LAotMHg5ODQwM2EsCi0weGNjMmM0YSwKLTB4OTU4MDA0LAotMHhjYzA0NDksCi0weDgwMDFiOCwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weDI4MjgwMSwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxYiwKLTB4MDQzODBjLAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDE3LAotMHgwNDM4MDgsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTMsCi0weDA0MzgwNCwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxNCwKLTB4Y2MxMDRjLAotMHg5YTgwMDksCi0weGNjMTQ0ZCwKLTB4OTg0MGRjLAotMHhkNDAwNmQsCi0weGNjMTg0OCwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weDgwMDBjOSwKLTB4ZDU4MDFhLAotMHg5NmMwZDUsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weDlhYzAwMywKLTB4ZDQwMDZkLAotMHhkNDAwNmUsCi0weDgwMDAwMCwKLTB4ZWMwMDdmLAotMHg5YWMwY2MsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weDdkOTEwMywKLTB4N2RkNTgzLAotMHg3ZDE5MGMsCi0weDM1Y2MxZiwKLTB4MzU3MDFmLAotMHg3Y2YwY2IsCi0weDdjZDA4YiwKLTB4ODgwMDAwLAotMHg3ZThlOGIsCi0weDk1YzAwNCwKLTB4ZDQwMDZlLAotMHg4MDAxYjgsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MxMDAzLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHhjYzI0MDMsCi0weGNjMjgwMywKLTB4MzVjNDFmLAotMHgzNmIwMWYsCi0weDdjNzA0YiwKLTB4MzRmMDFmLAotMHg3YzcwNGIsCi0weDM1NzAxZiwKLTB4N2M3MDRiLAotMHg3ZDg4ODEsCi0weDdkY2NjMSwKLTB4N2U1MTAxLAotMHg3ZTk1NDEsCi0weDdjOTA4MiwKLTB4N2NkNGMyLAotMHg3Yzg0OGIsCi0weDlhYzAwMywKLTB4N2M4YzhiLAotMHgyYzg4MDEsCi0weDk4ODA5ZSwKLTB4ZDQwMDZkLAotMHg5ODQwOWMsCi0weGQ0MDA2ZSwKLTB4Y2MwODRjLAotMHhjYzBjNGQsCi0weGNjMTA0OCwKLTB4ZDQ4MDFhLAotMHhkNGMwMWEsCi0weDgwMDEwMSwKLTB4ZDUwMDFhLAotMHhjYzA4MzIsCi0weGQ0MDAzMiwKLTB4OTQ4MmQ5LAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDQwMWUsCi0weGNhMTQwMCwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhkNTQwMzQsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHgyODA0MDQsCi0weGUyMDAxYSwKLTB4ZTIwMDFhLAotMHhkNDQwMWEsCi0weGNhMzgwMCwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHg5ODgyYmQsCi0weDAwMDAwMCwKLTB4ODQwMWJiLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA0MDAsCi0weGMyZmYwMCwKLTB4Y2MwODM0LAotMHhjMTNmZmYsCi0weDdjNzRjYiwKLTB4N2NjOTBiLAotMHg3ZDAxMGYsCi0weDk5MDJiMCwKLTB4N2M3MzhiLAotMHg4NDAxYmIsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDgwMCwKLTB4MjgxOTAwLAotMHg3ZDg5OGIsCi0weDk1ODAxNCwKLTB4MjgxNDA0LAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4Y2ExYzAwLAotMHhjYTI0MDAsCi0weGUyMDAxZiwKLTB4ZDRjMDFhLAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4Y2MxODAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHg3ZGE1OGIsCi0weDdkOWM0NywKLTB4OTg0Mjk3LAotMHgwMDAwMDAsCi0weDgwMDE2MSwKLTB4ZDRjMDFhLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weDI0OGMwNiwKLTB4MGNjYzA2LAotMHg5OGMwMDYsCi0weGNjMTA0ZSwKLTB4OTkwMDA0LAotMHhkNDAwNzMsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHgzNGQwMTgsCi0weDI1MTAwMSwKLTB4OTUwMDIxLAotMHhjMTdmZmYsCi0weGNhMTAwMCwKLTB4Y2ExNDAwLAotMHhjYTE4MDAsCi0weGQ0ODAxZCwKLTB4ZDRjMDFkLAotMHg3ZGIxOGIsCi0weGMxNDIwMiwKLTB4YzJjMDAxLAotMHhkNTgwMWQsCi0weDM0ZGMwZSwKLTB4N2Q1ZDRjLAotMHg3ZjczNGMsCi0weGQ3NDAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGMxNDIwMCwKLTB4YzJjMDAwLAotMHgwOTljMDEsCi0weDMxZGMxMCwKLTB4N2Y1ZjRjLAotMHg3ZjczNGMsCi0weDA0MjgwMiwKLTB4N2Q4MzgwLAotMHhkNWE4NmYsCi0weGQ1ODA2NiwKLTB4ZDc0MDFlLAotMHhlYzAwNWUsCi0weGM4MjQwMiwKLTB4YzgyNDAyLAotMHg4MDAxYjgsCi0weGQ2MDA3NiwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhkNDAwMWYsCi0weDgwMDAwMCwKLTB4ZDQwMDFmLAotMHhkNDAwMWYsCi0weDg4MDAwMCwKLTB4ZDQwMDFmLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMTAxNzEsCi0weDAyMDE3OCwKLTB4MDMwMDhmLAotMHgwNDAwN2YsCi0weDA1MDAwMywKLTB4MDYwMDNmLAotMHgwNzAwMzIsCi0weDA4MDEyYywKLTB4MDkwMDQ2LAotMHgwYTAwMzYsCi0weDEwMDFiNiwKLTB4MTcwMGEyLAotMHgyMjAxM2EsCi0weDIzMDE0OSwKLTB4MjAwMGI0LAotMHgyNDAxMjUsCi0weDI3MDA0ZCwKLTB4MjgwMDZhLAotMHgyYTAwNjAsCi0weDJiMDA1MiwKLTB4MmYwMDY1LAotMHgzMjAwODcsCi0weDM0MDE3ZiwKLTB4M2MwMTU2LAotMHgzZjAwNzIsCi0weDQxMDE4YywKLTB4NDQwMTJlLAotMHg1NTAxNzMsCi0weDU2MDE3YSwKLTB4NjAwMDBiLAotMHg2MTAwMzQsCi0weDYyMDAzOCwKLTB4NjMwMDM4LAotMHg2NDAwMzgsCi0weDY1MDAzOCwKLTB4NjYwMDM4LAotMHg2NzAwMzgsCi0weDY4MDAzYSwKLTB4NjkwMDQxLAotMHg2YTAwNDgsCi0weDZiMDA0OCwKLTB4NmMwMDQ4LAotMHg2ZDAwNDgsCi0weDZlMDA0OCwKLTB4NmYwMDQ4LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNjIwX2NwX21pY3JvY29kZVtdWzNdID0gewotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCi0gICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAotICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCi0gICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAotICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKLSAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCi0gICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAotICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKLSAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2OGMgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCi0gICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjQgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA0OSwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzcwIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwODAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4NiB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2IxIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjUgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5YyB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5MCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDA4MDAwMDAwLCAweDAwMjkwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHhjMDIyMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOTIgfSwKLSAgICB7IDB4MDAwMDIxMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOWUgfSwKLSAgICB7IDB4MDAwMDIxMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2FlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MwIH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTcwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNkMyB9LAotICAgIHsgMHg4YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4NDAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHg0MDAwMDAwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2UxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAxODAwLCAweDNlNCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjYsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2U3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAxYzAwLCAweDNlYSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjcsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODIwYzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDk0OGU4LCAweDAwMCB9LAotICAgIHsgMHhhNTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHhjMDIxMDIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2Y3IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA0ODEyMjAsIDB4M2ZmIH0sCi0gICAgeyAweGE3ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ODMsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4YTk4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBjMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhYjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFkODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjg4MCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YjM4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhZjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGIxODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTQ4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDExODIwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAyMThhMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMzE4YzAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDQxOGY4ZTAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA1MThmODgwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNjE4ZTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDcxOGYwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA4MThmM2ZjLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NSB9LAotICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ0YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDU5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjEgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDY2IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2OTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDU5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGE0IH0sCi0gICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGIwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YWMgfSwKLSAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YzMgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YzcgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2UgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkMCB9LAotICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwMCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGVmIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlMyB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUxOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHg5ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4NDAyMTRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDk2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjIyMjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAxNGE4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDEwMDAwMDAwLCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHhlZmZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTM4Y2UsIDB4NjdiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAzMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1NjYgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjAwMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2EgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMWMxMCwgMHg1N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg1N2UgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OGYgfSwKLSAgICB7IDB4MDAwMGEyYjcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTJjNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4ZCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhMCB9LAotICAgIHsgMHgwMDAwYTJiYiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTllIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIxIH0sCi0gICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEyYzYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YWYgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmMzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMGEyYzcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YmUgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDMwNGEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg1YzQgfSwKLSAgICB7IDB4YTQwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIxLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1ZDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwNDAzNjIxLCAweDVlMyB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZTMgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTA5MiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDkzLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjA1IH0sCi0gICAgeyAweDAwMDBhMDkyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwOTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmJhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDFmZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjBlIH0sCi0gICAgeyAweDAwMDRhMDAzLCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwYTAwMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKLSAgICB7IDB4MDAwNGEwMTAsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmIgfSwKLSAgICB7IDB4MDAwNGEwMTEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDExLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDEyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDEzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDE1LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDE2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwMTcsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDBhMDE3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwODAwNjJkLCAweDAwMCB9LAotICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NjNkIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYzYiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2NDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDYyZCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg2MmQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDQwNGMxMSwgMHg2NzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDM4YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDMwMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwNjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDY4YiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjIsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDA0MDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGQgfSwKLSAgICB7IDB4OWYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY5MiB9LAotICAgIHsgMHg5ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTQyMDUwMiwgMHgwNWMwMDI1MCwgMHgwMDAgfSwKLSAgICB7IDB4MDFjMzAxNjgsIDB4MDQzZjA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAotICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDNkNzA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA2NDkwNjRhLCAweDAzMWYwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjNSwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDU1MSwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDNiYTA1YzAsIDB4MDRiYjAzNDQsIDB4MDAwIH0sCi0gICAgeyAweDA0OWEwNDUwLCAweDA0M2QwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNGQwMDVjMCwgMHgwNDQxMDRkZCwgMHgwMDAgfSwKLSAgICB7IDB4MDQ1MDA1MDcsIDB4MDM1MTAzNzUsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDYzZjA1YzcsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDAwMDcwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDAzZjgwM2VkLCAweDA0MDgwNDA2LCAweDAwMCB9LAotICAgIHsgMHgwNDBlMDQwYSwgMHgwNDBjMDQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDQxYzA0MTgsIDB4MDQyNDA0MjAsIDB4MDAwIH0sCi0gICAgeyAweDA0MmMwNDI4LCAweDA0MzQwNDMwLCAweDAwMCB9LAotICAgIHsgMHgwNWMwMDVjMCwgMHgwNDM4MDVjMCwgMHgwMDAgfSwKLSAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDY3OSwgMHgwNjk3MDAwNiwgMHgwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY2MjBfcGZwX21pY3JvY29kZVtdID0gewotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHg3YzAzOGIsCi0weDgwMDFiOCwKLTB4N2MwMzhiLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4YzQxODM4LAotMHhjYTI0MDAsCi0weGNhMjgwMCwKLTB4OTU4MWE4LAotMHhjNDFjM2EsCi0weGMzYzAwMCwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDdjNzQ0YiwKLTB4YzIwMDA1LAotMHg5OWMwMDAsCi0weGM0MWMzYSwKLTB4N2M3NDRjLAotMHhjMGZmZjAsCi0weDA0MmMwNCwKLTB4MzA5MDAyLAotMHg3ZDI1MDAsCi0weDM1MTQwMiwKLTB4N2QzNTBiLAotMHgyNTU0MDMsCi0weDdjZDU4MCwKLTB4MjU5YzAzLAotMHg5NWMwMDQsCi0weGQ1MDAxYiwKLTB4N2VkZGMxLAotMHg3ZDlkODAsCi0weGQ2ODAxYiwKLTB4ZDU4MDFiLAotMHhkNDQwMWUsCi0weGQ1NDAxZSwKLTB4ZDY0MDFlLAotMHhkNjgwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg5NzgzZDMsCi0weGQ1YzAxZSwKLTB4Y2EwODAwLAotMHg4MDAwMWEsCi0weGNhMGMwMCwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2ExODAwLAotMHhkNDQwMWUsCi0weGQ1ODAxZSwKLTB4ODAwMDUzLAotMHhkNDAwNzUsCi0weGQ0NDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ4MDE5LAotMHhkNGMwMTgsCi0weGQ1MDAxNywKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZTIwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weGQ0ODA2MCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhkNDgwNjEsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weGQ0ODAxNiwKLTB4ZDRjMDE2LAotMHhkNDgwMWUsCi0weDgwMDFiOCwKLTB4ZDRjMDFlLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgwMDQsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHhkNDIwMTMsCi0weGQ1NjA2NSwKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGQ1NjAxYywKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODNmNywKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weDgwMDA3OSwKLTB4ZDQyMDEzLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5ODgzZWYsCi0weGNhMTQwMCwKLTB4ZDQwMDY0LAotMHg4MDAwOGQsCi0weDAwMDAwMCwKLTB4YzQxNDMyLAotMHhjNjE4NDMsCi0weGM0MDgyZiwKLTB4OTU0MDA1LAotMHhjNDBjMzAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDk1ODNmNSwKLTB4YzQxMDMxLAotMHhkNDQwMzMsCi0weGQ1MjA2NSwKLTB4ZDRhMDFjLAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZTQwMTVlLAotMHhkNDAwMWUsCi0weDgwMDAwMCwKLTB4MDYyMDAxLAotMHhjYTE4MDAsCi0weDBhMjAwMSwKLTB4ZDYwMDc2LAotMHhjNDA4MzYsCi0weDk4ODAwNywKLTB4YzYxMDQ1LAotMHg5NTAxMTAsCi0weGQ0MDAxZiwKLTB4ZDQ2MDYyLAotMHg4MDAwMDAsCi0weGQ0MjA2MiwKLTB4Y2MzODM1LAotMHhjYzE0MzMsCi0weDg0MDFiYiwKLTB4ZDQwMDcyLAotMHhkNTQwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhlMjAwMWEsCi0weDg0MDFiYiwKLTB4ZTIwMDFhLAotMHhjYzEwNGIsCi0weGNjMDQ0NywKLTB4MmM5NDAxLAotMHg3ZDA5OGIsCi0weDk4NDAwNSwKLTB4N2QxNWNiLAotMHhkNDAwMWEsCi0weDgwMDFiOCwKLTB4ZDQwMDZkLAotMHgzNDQ0MDEsCi0weGNjMGM0OCwKLTB4OTg0MDNhLAotMHhjYzJjNGEsCi0weDk1ODAwNCwKLTB4Y2MwNDQ5LAotMHg4MDAxYjgsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHgyODI4MDEsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMWIsCi0weDA0MzgwYywKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxNywKLTB4MDQzODA4LAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDEzLAotMHgwNDM4MDQsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTQsCi0weGNjMTA0YywKLTB4OWE4MDA5LAotMHhjYzE0NGQsCi0weDk4NDBkYywKLTB4ZDQwMDZkLAotMHhjYzE4NDgsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHg4MDAwYzksCi0weGQ1ODAxYSwKLTB4OTZjMGQ1LAotMHhkNDAwNmQsCi0weDgwMDFiOCwKLTB4ZDQwMDZlLAotMHg5YWMwMDMsCi0weGQ0MDA2ZCwKLTB4ZDQwMDZlLAotMHg4MDAwMDAsCi0weGVjMDA3ZiwKLTB4OWFjMGNjLAotMHhkNDAwNmQsCi0weDgwMDFiOCwKLTB4ZDQwMDZlLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHg3ZDkxMDMsCi0weDdkZDU4MywKLTB4N2QxOTBjLAotMHgzNWNjMWYsCi0weDM1NzAxZiwKLTB4N2NmMGNiLAotMHg3Y2QwOGIsCi0weDg4MDAwMCwKLTB4N2U4ZThiLAotMHg5NWMwMDQsCi0weGQ0MDA2ZSwKLTB4ODAwMWI4LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMTAwMywKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4Y2MyNDAzLAotMHhjYzI4MDMsCi0weDM1YzQxZiwKLTB4MzZiMDFmLAotMHg3YzcwNGIsCi0weDM0ZjAxZiwKLTB4N2M3MDRiLAotMHgzNTcwMWYsCi0weDdjNzA0YiwKLTB4N2Q4ODgxLAotMHg3ZGNjYzEsCi0weDdlNTEwMSwKLTB4N2U5NTQxLAotMHg3YzkwODIsCi0weDdjZDRjMiwKLTB4N2M4NDhiLAotMHg5YWMwMDMsCi0weDdjOGM4YiwKLTB4MmM4ODAxLAotMHg5ODgwOWUsCi0weGQ0MDA2ZCwKLTB4OTg0MDljLAotMHhkNDAwNmUsCi0weGNjMDg0YywKLTB4Y2MwYzRkLAotMHhjYzEwNDgsCi0weGQ0ODAxYSwKLTB4ZDRjMDFhLAotMHg4MDAxMDEsCi0weGQ1MDAxYSwKLTB4Y2MwODMyLAotMHhkNDAwMzIsCi0weDk0ODJkOSwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ0MDFlLAotMHhjYTE0MDAsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4ZDU0MDM0LAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4MjgwNDA0LAotMHhlMjAwMWEsCi0weGUyMDAxYSwKLTB4ZDQ0MDFhLAotMHhjYTM4MDAsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4OTg4MmJkLAotMHgwMDAwMDAsCi0weDg0MDFiYiwKLTB4ZDdhMDZmLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4Y2EwNDAwLAotMHhjMmZmMDAsCi0weGNjMDgzNCwKLTB4YzEzZmZmLAotMHg3Yzc0Y2IsCi0weDdjYzkwYiwKLTB4N2QwMTBmLAotMHg5OTAyYjAsCi0weDdjNzM4YiwKLTB4ODQwMWJiLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA4MDAsCi0weDI4MTkwMCwKLTB4N2Q4OThiLAotMHg5NTgwMTQsCi0weDI4MTQwNCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGNhMWMwMCwKLTB4Y2EyNDAwLAotMHhlMjAwMWYsCi0weGQ0YzAxYSwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weGNjMTgwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4N2RhNThiLAotMHg3ZDljNDcsCi0weDk4NDI5NywKLTB4MDAwMDAwLAotMHg4MDAxNjEsCi0weGQ0YzAxYSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHgyNDhjMDYsCi0weDBjY2MwNiwKLTB4OThjMDA2LAotMHhjYzEwNGUsCi0weDk5MDAwNCwKLTB4ZDQwMDczLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4MzRkMDE4LAotMHgyNTEwMDEsCi0weDk1MDAyMSwKLTB4YzE3ZmZmLAotMHhjYTEwMDAsCi0weGNhMTQwMCwKLTB4Y2ExODAwLAotMHhkNDgwMWQsCi0weGQ0YzAxZCwKLTB4N2RiMThiLAotMHhjMTQyMDIsCi0weGMyYzAwMSwKLTB4ZDU4MDFkLAotMHgzNGRjMGUsCi0weDdkNWQ0YywKLTB4N2Y3MzRjLAotMHhkNzQwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhjMTQyMDAsCi0weGMyYzAwMCwKLTB4MDk5YzAxLAotMHgzMWRjMTAsCi0weDdmNWY0YywKLTB4N2Y3MzRjLAotMHgwNDI4MDIsCi0weDdkODM4MCwKLTB4ZDVhODZmLAotMHhkNTgwNjYsCi0weGQ3NDAxZSwKLTB4ZWMwMDVlLAotMHhjODI0MDIsCi0weGM4MjQwMiwKLTB4ODAwMWI4LAotMHhkNjAwNzYsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4ZDQwMDFmLAotMHg4MDAwMDAsCi0weGQ0MDAxZiwKLTB4ZDQwMDFmLAotMHg4ODAwMDAsCi0weGQ0MDAxZiwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDEwMTcxLAotMHgwMjAxNzgsCi0weDAzMDA4ZiwKLTB4MDQwMDdmLAotMHgwNTAwMDMsCi0weDA2MDAzZiwKLTB4MDcwMDMyLAotMHgwODAxMmMsCi0weDA5MDA0NiwKLTB4MGEwMDM2LAotMHgxMDAxYjYsCi0weDE3MDBhMiwKLTB4MjIwMTNhLAotMHgyMzAxNDksCi0weDIwMDBiNCwKLTB4MjQwMTI1LAotMHgyNzAwNGQsCi0weDI4MDA2YSwKLTB4MmEwMDYwLAotMHgyYjAwNTIsCi0weDJmMDA2NSwKLTB4MzIwMDg3LAotMHgzNDAxN2YsCi0weDNjMDE1NiwKLTB4M2YwMDcyLAotMHg0MTAxOGMsCi0weDQ0MDEyZSwKLTB4NTUwMTczLAotMHg1NjAxN2EsCi0weDYwMDAwYiwKLTB4NjEwMDM0LAotMHg2MjAwMzgsCi0weDYzMDAzOCwKLTB4NjQwMDM4LAotMHg2NTAwMzgsCi0weDY2MDAzOCwKLTB4NjcwMDM4LAotMHg2ODAwM2EsCi0weDY5MDA0MSwKLTB4NmEwMDQ4LAotMHg2YjAwNDgsCi0weDZjMDA0OCwKLTB4NmQwMDQ4LAotMHg2ZTAwNDgsCi0weDZmMDA0OCwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjYzMF9jcF9taWNyb2NvZGVbXVszXSA9IHsKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAotICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKLSAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAotICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKLSAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCi0gICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAotICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCi0gICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAotICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweGMwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMGEyMiwgMHgzNGIgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM1NCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzY0IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmEgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmQgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzODYgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiMSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I1IH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWMgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzkyIH0sCi0gICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzllIH0sCi0gICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNhZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2NlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjMCB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKLSAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKLSAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAotICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjkwYzQwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDg1MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwMiwgMHg0NDggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMjAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDVlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjQsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ2MyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDUsIDB4NjhmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ4ZCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDk2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQ1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGEwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDRhMSB9LAotICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGE5IH0sCi0gICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGM0IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNiIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2QgfSwKLSAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0ZmQgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRlYyB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0ZTAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAotICAgIHsgMHgwMDAwMDAyYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmQsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MDIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4YjUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiOTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDAyODBlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1MTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUyYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmUwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZjFmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweGMwMjIwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHg0MDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAotICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAotICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDY3OCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTYzIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc3IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTdiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThjIH0sCi0gICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OGEgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OWQgfSwKLSAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5YiB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAotICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWJiIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWMxIH0sCi0gICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWNkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDQwMzYyMSwgMHg1ZTAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NWUwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTA5MywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYwMiB9LAotICAgIHsgMHgwMDAwYTA5MiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDkzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYjYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMzLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiYSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmJlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxZmYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwYiB9LAotICAgIHsgMHgwMDA0YTAwMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEwIH0sCi0gICAgeyAweDAwMDRhMDEwLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCi0gICAgeyAweDAwMDRhMDExLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEyLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDEzLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE1LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE2LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDE3LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTAxNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDYzYSB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MzggfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2M2UgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM2IH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjNlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwNDgxMSwgMHg2MmEgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1OSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NjUzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2ODggfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhhIH0sCi0gICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjhkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGYgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDE0MjA0ZmYsIDB4MDViZDAyNTAsIDB4MDAwIH0sCi0gICAgeyAweDAxYzMwMTY4LCAweDA0M2YwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKLSAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCi0gICAgeyAweDAzZDcwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNjQ2MDY0NywgMHgwMzFmMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YzIsIDB4MDMyMDAzNDAsIDB4MDAwIH0sCi0gICAgeyAweDAzMmEwMjgyLCAweDAzNDIwMzM0LCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1NGUsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDAzYmEwNWJkLCAweDA0YjgwMzQ0LCAweDAwMCB9LAotICAgIHsgMHgwNDk3MDQ0ZCwgMHgwNDNkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDRjZDA1YmQsIDB4MDQ0MTA0ZGEsIDB4MDAwIH0sCi0gICAgeyAweDA0NGQwNTA0LCAweDAzNTEwMzc1LCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA2M2MwNWM0LCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwMDA3MDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCi0gICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAotICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDQzODA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjA2NzYsIDB4MDY5NDAwMDYsIDB4MDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNjMwX3BmcF9taWNyb2NvZGVbXSA9IHsKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4N2MwMzhiLAotMHg4MDAxYjgsCi0weDdjMDM4YiwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGM0MTgzOCwKLTB4Y2EyNDAwLAotMHhjYTI4MDAsCi0weDk1ODFhOCwKLTB4YzQxYzNhLAotMHhjM2MwMDAsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHg3Yzc0NGIsCi0weGMyMDAwNSwKLTB4OTljMDAwLAotMHhjNDFjM2EsCi0weDdjNzQ0YywKLTB4YzBmZmYwLAotMHgwNDJjMDQsCi0weDMwOTAwMiwKLTB4N2QyNTAwLAotMHgzNTE0MDIsCi0weDdkMzUwYiwKLTB4MjU1NDAzLAotMHg3Y2Q1ODAsCi0weDI1OWMwMywKLTB4OTVjMDA0LAotMHhkNTAwMWIsCi0weDdlZGRjMSwKLTB4N2Q5ZDgwLAotMHhkNjgwMWIsCi0weGQ1ODAxYiwKLTB4ZDQ0MDFlLAotMHhkNTQwMWUsCi0weGQ2NDAxZSwKLTB4ZDY4MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4OTc4M2QzLAotMHhkNWMwMWUsCi0weGNhMDgwMCwKLTB4ODAwMDFhLAotMHhjYTBjMDAsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMTgwMCwKLTB4ZDQ0MDFlLAotMHhkNTgwMWUsCi0weDgwMDA1MywKLTB4ZDQwMDc1LAotMHhkNDQwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0ODAxOSwKLTB4ZDRjMDE4LAotMHhkNTAwMTcsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGUyMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHhkNDgwNjAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4ZDQ4MDYxLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHhkNDgwMTYsCi0weGQ0YzAxNiwKLTB4ZDQ4MDFlLAotMHg4MDAxYjgsCi0weGQ0YzAxZSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4MDA0LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ZDQyMDEzLAotMHhkNTYwNjUsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhkNTYwMWMsCi0weDgwMDAwMCwKLTB4MDYyMDAxLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgzZjcsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHg4MDAwNzksCi0weGQ0MjAxMywKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTg4M2VmLAotMHhjYTE0MDAsCi0weGQ0MDA2NCwKLTB4ODAwMDhkLAotMHgwMDAwMDAsCi0weGM0MTQzMiwKLTB4YzYxODQzLAotMHhjNDA4MmYsCi0weDk1NDAwNSwKLTB4YzQwYzMwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHg5NTgzZjUsCi0weGM0MTAzMSwKLTB4ZDQ0MDMzLAotMHhkNTIwNjUsCi0weGQ0YTAxYywKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGU0MDE1ZSwKLTB4ZDQwMDFlLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4Y2ExODAwLAotMHgwYTIwMDEsCi0weGQ2MDA3NiwKLTB4YzQwODM2LAotMHg5ODgwMDcsCi0weGM2MTA0NSwKLTB4OTUwMTEwLAotMHhkNDAwMWYsCi0weGQ0NjA2MiwKLTB4ODAwMDAwLAotMHhkNDIwNjIsCi0weGNjMzgzNSwKLTB4Y2MxNDMzLAotMHg4NDAxYmIsCi0weGQ0MDA3MiwKLTB4ZDU0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTIwMDFhLAotMHg4NDAxYmIsCi0weGUyMDAxYSwKLTB4Y2MxMDRiLAotMHhjYzA0NDcsCi0weDJjOTQwMSwKLTB4N2QwOThiLAotMHg5ODQwMDUsCi0weDdkMTVjYiwKLTB4ZDQwMDFhLAotMHg4MDAxYjgsCi0weGQ0MDA2ZCwKLTB4MzQ0NDAxLAotMHhjYzBjNDgsCi0weDk4NDAzYSwKLTB4Y2MyYzRhLAotMHg5NTgwMDQsCi0weGNjMDQ0OSwKLTB4ODAwMWI4LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4MjgyODAxLAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDFiLAotMHgwNDM4MGMsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTcsCi0weDA0MzgwOCwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxMywKLTB4MDQzODA0LAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDE0LAotMHhjYzEwNGMsCi0weDlhODAwOSwKLTB4Y2MxNDRkLAotMHg5ODQwZGMsCi0weGQ0MDA2ZCwKLTB4Y2MxODQ4LAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4ODAwMGM5LAotMHhkNTgwMWEsCi0weDk2YzBkNSwKLTB4ZDQwMDZkLAotMHg4MDAxYjgsCi0weGQ0MDA2ZSwKLTB4OWFjMDAzLAotMHhkNDAwNmQsCi0weGQ0MDA2ZSwKLTB4ODAwMDAwLAotMHhlYzAwN2YsCi0weDlhYzBjYywKLTB4ZDQwMDZkLAotMHg4MDAxYjgsCi0weGQ0MDA2ZSwKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4N2Q5MTAzLAotMHg3ZGQ1ODMsCi0weDdkMTkwYywKLTB4MzVjYzFmLAotMHgzNTcwMWYsCi0weDdjZjBjYiwKLTB4N2NkMDhiLAotMHg4ODAwMDAsCi0weDdlOGU4YiwKLTB4OTVjMDA0LAotMHhkNDAwNmUsCi0weDgwMDFiOCwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzEwMDMsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weGNjMjQwMywKLTB4Y2MyODAzLAotMHgzNWM0MWYsCi0weDM2YjAxZiwKLTB4N2M3MDRiLAotMHgzNGYwMWYsCi0weDdjNzA0YiwKLTB4MzU3MDFmLAotMHg3YzcwNGIsCi0weDdkODg4MSwKLTB4N2RjY2MxLAotMHg3ZTUxMDEsCi0weDdlOTU0MSwKLTB4N2M5MDgyLAotMHg3Y2Q0YzIsCi0weDdjODQ4YiwKLTB4OWFjMDAzLAotMHg3YzhjOGIsCi0weDJjODgwMSwKLTB4OTg4MDllLAotMHhkNDAwNmQsCi0weDk4NDA5YywKLTB4ZDQwMDZlLAotMHhjYzA4NGMsCi0weGNjMGM0ZCwKLTB4Y2MxMDQ4LAotMHhkNDgwMWEsCi0weGQ0YzAxYSwKLTB4ODAwMTAxLAotMHhkNTAwMWEsCi0weGNjMDgzMiwKLTB4ZDQwMDMyLAotMHg5NDgyZDksCi0weGNhMGMwMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0MDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0NDAxZSwKLTB4Y2ExNDAwLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGQ1NDAzNCwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDI4MDQwNCwKLTB4ZTIwMDFhLAotMHhlMjAwMWEsCi0weGQ0NDAxYSwKLTB4Y2EzODAwLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weDk4ODJiZCwKLTB4MDAwMDAwLAotMHg4NDAxYmIsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDQwMCwKLTB4YzJmZjAwLAotMHhjYzA4MzQsCi0weGMxM2ZmZiwKLTB4N2M3NGNiLAotMHg3Y2M5MGIsCi0weDdkMDEwZiwKLTB4OTkwMmIwLAotMHg3YzczOGIsCi0weDg0MDFiYiwKLTB4ZDdhMDZmLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4Y2EwODAwLAotMHgyODE5MDAsCi0weDdkODk4YiwKLTB4OTU4MDE0LAotMHgyODE0MDQsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhjYTFjMDAsCi0weGNhMjQwMCwKLTB4ZTIwMDFmLAotMHhkNGMwMWEsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHhjYzE4MDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weDdkYTU4YiwKLTB4N2Q5YzQ3LAotMHg5ODQyOTcsCi0weDAwMDAwMCwKLTB4ODAwMTYxLAotMHhkNGMwMWEsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4MjQ4YzA2LAotMHgwY2NjMDYsCi0weDk4YzAwNiwKLTB4Y2MxMDRlLAotMHg5OTAwMDQsCi0weGQ0MDA3MywKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDM0ZDAxOCwKLTB4MjUxMDAxLAotMHg5NTAwMjEsCi0weGMxN2ZmZiwKLTB4Y2ExMDAwLAotMHhjYTE0MDAsCi0weGNhMTgwMCwKLTB4ZDQ4MDFkLAotMHhkNGMwMWQsCi0weDdkYjE4YiwKLTB4YzE0MjAyLAotMHhjMmMwMDEsCi0weGQ1ODAxZCwKLTB4MzRkYzBlLAotMHg3ZDVkNGMsCi0weDdmNzM0YywKLTB4ZDc0MDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4YzE0MjAwLAotMHhjMmMwMDAsCi0weDA5OWMwMSwKLTB4MzFkYzEwLAotMHg3ZjVmNGMsCi0weDdmNzM0YywKLTB4MDQyODAyLAotMHg3ZDgzODAsCi0weGQ1YTg2ZiwKLTB4ZDU4MDY2LAotMHhkNzQwMWUsCi0weGVjMDA1ZSwKLTB4YzgyNDAyLAotMHhjODI0MDIsCi0weDgwMDFiOCwKLTB4ZDYwMDc2LAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGQ0MDAxZiwKLTB4ODAwMDAwLAotMHhkNDAwMWYsCi0weGQ0MDAxZiwKLTB4ODgwMDAwLAotMHhkNDAwMWYsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAxMDE3MSwKLTB4MDIwMTc4LAotMHgwMzAwOGYsCi0weDA0MDA3ZiwKLTB4MDUwMDAzLAotMHgwNjAwM2YsCi0weDA3MDAzMiwKLTB4MDgwMTJjLAotMHgwOTAwNDYsCi0weDBhMDAzNiwKLTB4MTAwMWI2LAotMHgxNzAwYTIsCi0weDIyMDEzYSwKLTB4MjMwMTQ5LAotMHgyMDAwYjQsCi0weDI0MDEyNSwKLTB4MjcwMDRkLAotMHgyODAwNmEsCi0weDJhMDA2MCwKLTB4MmIwMDUyLAotMHgyZjAwNjUsCi0weDMyMDA4NywKLTB4MzQwMTdmLAotMHgzYzAxNTYsCi0weDNmMDA3MiwKLTB4NDEwMThjLAotMHg0NDAxMmUsCi0weDU1MDE3MywKLTB4NTYwMTdhLAotMHg2MDAwMGIsCi0weDYxMDAzNCwKLTB4NjIwMDM4LAotMHg2MzAwMzgsCi0weDY0MDAzOCwKLTB4NjUwMDM4LAotMHg2NjAwMzgsCi0weDY3MDAzOCwKLTB4NjgwMDNhLAotMHg2OTAwNDEsCi0weDZhMDA0OCwKLTB4NmIwMDQ4LAotMHg2YzAwNDgsCi0weDZkMDA0OCwKLTB4NmUwMDQ4LAotMHg2ZjAwNDgsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY2MzVfY3BfbWljcm9jb2RlW11bM10gPSB7Ci0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKLSAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCi0gICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKLSAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCi0gICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAotICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKLSAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2MiB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCi0gICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAotICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4OSB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKLSAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKLSAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWJkIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAotICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAotICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKLSAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCi0gICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCi0gICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKLSAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDQ4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1ZSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjMgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OGQgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTEgfSwKLSAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhOSB9LAotICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjYiB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNkIH0sCi0gICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGZkIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWMgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTAyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NzggfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2MyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2YiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3NyB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4YyB9LAotICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThhIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTlkIH0sCi0gICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWIgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YWUgfSwKLSAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhYyB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViYiB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjMSB9LAotICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDIgfSwKLSAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGIgfSwKLSAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMCB9LAotICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyOCB9LAotICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2EgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjM4IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjNlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY2ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4Njg4IH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4YSB9LAotICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY4ZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhmIH0sCi0gICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjkyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxNDIwNGZmLCAweDA1YmQwMjUwLCAweDAwMCB9LAotICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCi0gICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAotICAgIHsgMHgwM2Q3MDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDY0NjA2NDcsIDB4MDMxZjA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWMyLCAweDAzMjAwMzQwLCAweDAwMCB9LAotICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNTRlLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwM2JhMDViZCwgMHgwNGI4MDM0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDQ5NzA0NGQsIDB4MDQzZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA0Y2QwNWJkLCAweDA0NDEwNGRhLCAweDAwMCB9LAotICAgIHsgMHgwNDRkMDUwNCwgMHgwMzUxMDM3NSwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNjNjMDVjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDAwNzA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCi0gICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAotICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCi0gICAgeyAweDA1YmQwNWJkLCAweDA0MzgwNWJkLCAweDAwMCB9LAotICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKLSAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwNjc2LCAweDA2OTQwMDA2LCAweDAwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjYzNV9wZnBfbWljcm9jb2RlW10gPSB7Ci0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weDdjMDM4YiwKLTB4ODAwMWI4LAotMHg3YzAzOGIsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjNDE4MzgsCi0weGNhMjQwMCwKLTB4Y2EyODAwLAotMHg5NTgxYTgsCi0weGM0MWMzYSwKLTB4YzNjMDAwLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4N2M3NDRiLAotMHhjMjAwMDUsCi0weDk5YzAwMCwKLTB4YzQxYzNhLAotMHg3Yzc0NGMsCi0weGMwZmZmMCwKLTB4MDQyYzA0LAotMHgzMDkwMDIsCi0weDdkMjUwMCwKLTB4MzUxNDAyLAotMHg3ZDM1MGIsCi0weDI1NTQwMywKLTB4N2NkNTgwLAotMHgyNTljMDMsCi0weDk1YzAwNCwKLTB4ZDUwMDFiLAotMHg3ZWRkYzEsCi0weDdkOWQ4MCwKLTB4ZDY4MDFiLAotMHhkNTgwMWIsCi0weGQ0NDAxZSwKLTB4ZDU0MDFlLAotMHhkNjQwMWUsCi0weGQ2ODAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDk3ODNkMywKLTB4ZDVjMDFlLAotMHhjYTA4MDAsCi0weDgwMDAxYSwKLTB4Y2EwYzAwLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTE4MDAsCi0weGQ0NDAxZSwKLTB4ZDU4MDFlLAotMHg4MDAwNTMsCi0weGQ0MDA3NSwKLTB4ZDQ0MDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDgwMTksCi0weGQ0YzAxOCwKLTB4ZDUwMDE3LAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ZDUwMDFlLAotMHhlMjAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4ZDQ4MDYwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGQ0ODA2MSwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ZDQ4MDE2LAotMHhkNGMwMTYsCi0weGQ0ODAxZSwKLTB4ODAwMWI4LAotMHhkNGMwMWUsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODAwNCwKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weGQ0MjAxMywKLTB4ZDU2MDY1LAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZDU2MDFjLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4M2Y3LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ODAwMDc5LAotMHhkNDIwMTMsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk4ODNlZiwKLTB4Y2ExNDAwLAotMHhkNDAwNjQsCi0weDgwMDA4ZCwKLTB4MDAwMDAwLAotMHhjNDE0MzIsCi0weGM2MTg0MywKLTB4YzQwODJmLAotMHg5NTQwMDUsCi0weGM0MGMzMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4OTU4M2Y1LAotMHhjNDEwMzEsCi0weGQ0NDAzMywKLTB4ZDUyMDY1LAotMHhkNGEwMWMsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhlNDAxNWUsCi0weGQ0MDAxZSwKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGNhMTgwMCwKLTB4MGEyMDAxLAotMHhkNjAwNzYsCi0weGM0MDgzNiwKLTB4OTg4MDA3LAotMHhjNjEwNDUsCi0weDk1MDExMCwKLTB4ZDQwMDFmLAotMHhkNDYwNjIsCi0weDgwMDAwMCwKLTB4ZDQyMDYyLAotMHhjYzM4MzUsCi0weGNjMTQzMywKLTB4ODQwMWJiLAotMHhkNDAwNzIsCi0weGQ1NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGUyMDAxYSwKLTB4ODQwMWJiLAotMHhlMjAwMWEsCi0weGNjMTA0YiwKLTB4Y2MwNDQ3LAotMHgyYzk0MDEsCi0weDdkMDk4YiwKLTB4OTg0MDA1LAotMHg3ZDE1Y2IsCi0weGQ0MDAxYSwKLTB4ODAwMWI4LAotMHhkNDAwNmQsCi0weDM0NDQwMSwKLTB4Y2MwYzQ4LAotMHg5ODQwM2EsCi0weGNjMmM0YSwKLTB4OTU4MDA0LAotMHhjYzA0NDksCi0weDgwMDFiOCwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weDI4MjgwMSwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxYiwKLTB4MDQzODBjLAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDE3LAotMHgwNDM4MDgsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTMsCi0weDA0MzgwNCwKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxNCwKLTB4Y2MxMDRjLAotMHg5YTgwMDksCi0weGNjMTQ0ZCwKLTB4OTg0MGRjLAotMHhkNDAwNmQsCi0weGNjMTg0OCwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weDgwMDBjOSwKLTB4ZDU4MDFhLAotMHg5NmMwZDUsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weDlhYzAwMywKLTB4ZDQwMDZkLAotMHhkNDAwNmUsCi0weDgwMDAwMCwKLTB4ZWMwMDdmLAotMHg5YWMwY2MsCi0weGQ0MDA2ZCwKLTB4ODAwMWI4LAotMHhkNDAwNmUsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weDdkOTEwMywKLTB4N2RkNTgzLAotMHg3ZDE5MGMsCi0weDM1Y2MxZiwKLTB4MzU3MDFmLAotMHg3Y2YwY2IsCi0weDdjZDA4YiwKLTB4ODgwMDAwLAotMHg3ZThlOGIsCi0weDk1YzAwNCwKLTB4ZDQwMDZlLAotMHg4MDAxYjgsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MxMDAzLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHhjYzI0MDMsCi0weGNjMjgwMywKLTB4MzVjNDFmLAotMHgzNmIwMWYsCi0weDdjNzA0YiwKLTB4MzRmMDFmLAotMHg3YzcwNGIsCi0weDM1NzAxZiwKLTB4N2M3MDRiLAotMHg3ZDg4ODEsCi0weDdkY2NjMSwKLTB4N2U1MTAxLAotMHg3ZTk1NDEsCi0weDdjOTA4MiwKLTB4N2NkNGMyLAotMHg3Yzg0OGIsCi0weDlhYzAwMywKLTB4N2M4YzhiLAotMHgyYzg4MDEsCi0weDk4ODA5ZSwKLTB4ZDQwMDZkLAotMHg5ODQwOWMsCi0weGQ0MDA2ZSwKLTB4Y2MwODRjLAotMHhjYzBjNGQsCi0weGNjMTA0OCwKLTB4ZDQ4MDFhLAotMHhkNGMwMWEsCi0weDgwMDEwMSwKLTB4ZDUwMDFhLAotMHhjYzA4MzIsCi0weGQ0MDAzMiwKLTB4OTQ4MmQ5LAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDQwMWUsCi0weGNhMTQwMCwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhkNTQwMzQsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHgyODA0MDQsCi0weGUyMDAxYSwKLTB4ZTIwMDFhLAotMHhkNDQwMWEsCi0weGNhMzgwMCwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHg5ODgyYmQsCi0weDAwMDAwMCwKLTB4ODQwMWJiLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA0MDAsCi0weGMyZmYwMCwKLTB4Y2MwODM0LAotMHhjMTNmZmYsCi0weDdjNzRjYiwKLTB4N2NjOTBiLAotMHg3ZDAxMGYsCi0weDk5MDJiMCwKLTB4N2M3MzhiLAotMHg4NDAxYmIsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDgwMCwKLTB4MjgxOTAwLAotMHg3ZDg5OGIsCi0weDk1ODAxNCwKLTB4MjgxNDA0LAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4Y2ExYzAwLAotMHhjYTI0MDAsCi0weGUyMDAxZiwKLTB4ZDRjMDFhLAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4Y2MxODAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHg3ZGE1OGIsCi0weDdkOWM0NywKLTB4OTg0Mjk3LAotMHgwMDAwMDAsCi0weDgwMDE2MSwKLTB4ZDRjMDFhLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weDI0OGMwNiwKLTB4MGNjYzA2LAotMHg5OGMwMDYsCi0weGNjMTA0ZSwKLTB4OTkwMDA0LAotMHhkNDAwNzMsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHgzNGQwMTgsCi0weDI1MTAwMSwKLTB4OTUwMDIxLAotMHhjMTdmZmYsCi0weGNhMTAwMCwKLTB4Y2ExNDAwLAotMHhjYTE4MDAsCi0weGQ0ODAxZCwKLTB4ZDRjMDFkLAotMHg3ZGIxOGIsCi0weGMxNDIwMiwKLTB4YzJjMDAxLAotMHhkNTgwMWQsCi0weDM0ZGMwZSwKLTB4N2Q1ZDRjLAotMHg3ZjczNGMsCi0weGQ3NDAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGMxNDIwMCwKLTB4YzJjMDAwLAotMHgwOTljMDEsCi0weDMxZGMxMCwKLTB4N2Y1ZjRjLAotMHg3ZjczNGMsCi0weDA0MjgwMiwKLTB4N2Q4MzgwLAotMHhkNWE4NmYsCi0weGQ1ODA2NiwKLTB4ZDc0MDFlLAotMHhlYzAwNWUsCi0weGM4MjQwMiwKLTB4YzgyNDAyLAotMHg4MDAxYjgsCi0weGQ2MDA3NiwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhkNDAwMWYsCi0weDgwMDAwMCwKLTB4ZDQwMDFmLAotMHhkNDAwMWYsCi0weDg4MDAwMCwKLTB4ZDQwMDFmLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMTAxNzEsCi0weDAyMDE3OCwKLTB4MDMwMDhmLAotMHgwNDAwN2YsCi0weDA1MDAwMywKLTB4MDYwMDNmLAotMHgwNzAwMzIsCi0weDA4MDEyYywKLTB4MDkwMDQ2LAotMHgwYTAwMzYsCi0weDEwMDFiNiwKLTB4MTcwMGEyLAotMHgyMjAxM2EsCi0weDIzMDE0OSwKLTB4MjAwMGI0LAotMHgyNDAxMjUsCi0weDI3MDA0ZCwKLTB4MjgwMDZhLAotMHgyYTAwNjAsCi0weDJiMDA1MiwKLTB4MmYwMDY1LAotMHgzMjAwODcsCi0weDM0MDE3ZiwKLTB4M2MwMTU2LAotMHgzZjAwNzIsCi0weDQxMDE4YywKLTB4NDQwMTJlLAotMHg1NTAxNzMsCi0weDU2MDE3YSwKLTB4NjAwMDBiLAotMHg2MTAwMzQsCi0weDYyMDAzOCwKLTB4NjMwMDM4LAotMHg2NDAwMzgsCi0weDY1MDAzOCwKLTB4NjYwMDM4LAotMHg2NzAwMzgsCi0weDY4MDAzYSwKLTB4NjkwMDQxLAotMHg2YTAwNDgsCi0weDZiMDA0OCwKLTB4NmMwMDQ4LAotMHg2ZDAwNDgsCi0weDZlMDA0OCwKLTB4NmYwMDQ4LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNjcwX2NwX21pY3JvY29kZVtdWzNdID0gewotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCi0gICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAotICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAotICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKLSAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0ZCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCi0gICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAotICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCi0gICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKLSAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCi0gICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCi0gICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTYgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKLSAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCi0gICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAotICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKLSAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKLSAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY3YiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCi0gICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCi0gICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjI0IH0sCi0gICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCi0gICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCi0gICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjIgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2YSB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjYgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIzIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWQgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmMgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzgyIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYWQgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZiB9LAotICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzk4IH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTQgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhNCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM4ZSB9LAotICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5YSB9LAotICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2M0IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOCB9LAotICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2M5IH0sCi0gICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2RhIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZGQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2UwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCi0gICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZWQgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZjUgfSwKLSAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MDggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCi0gICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKLSAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmMCB9LAotICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCi0gICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKLSAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDNlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NTkgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NjAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2NSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc5IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0NzkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ODMgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NiB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0OTcgfSwKLSAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ5ZiB9LAotICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiNiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiYSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMSB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMzIH0sCi0gICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGYzIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZTIgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGQ2IH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGY4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTBjIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCi0gICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NmEgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU1OSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2MSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU2ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTY1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU2ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YmMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4MiB9LAotICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTgwIH0sCi0gICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkzIH0sCi0gICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTEgfSwKLSAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTQgfSwKLSAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhMiB9LAotICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViMSB9LAotICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDViNyB9LAotICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDViYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWQ2IH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVkNiB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZjggfSwKLSAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MDEgfSwKLSAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwNiB9LAotICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYxZSB9LAotICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2MzAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYyB9LAotICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjIwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NGQgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NDcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmEgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2N2EgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjdjIH0sCi0gICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjdmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2ODEgfSwKLSAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2ODQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMTQyMDRmNSwgMHgwNWIzMDI1MCwgMHgwMDAgfSwKLSAgICB7IDB4MDFjMzAxNjgsIDB4MDQzNTA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAotICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKLSAgICB7IDB4MDNjZDA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDA2M2MwNjNkLCAweDAzMWYwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDViOCwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKLSAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDU0NCwgMHgwNWIzMDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDNiMjA1YjMsIDB4MDRhZTAzNDQsIDB4MDAwIH0sCi0gICAgeyAweDA0OGQwNDQzLCAweDA0MzMwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNGMzMDViMywgMHgwNDM3MDRkMCwgMHgwMDAgfSwKLSAgICB7IDB4MDQ0MzA0ZmEsIDB4MDM1MTAzNzEsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDViMzA1YjMsIDB4MDYzMjA1YmEsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWIzLCAweDAwMDcwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDAzZWUwM2UzLCAweDAzZmUwM2ZjLCAweDAwMCB9LAotICAgIHsgMHgwNDA0MDQwMCwgMHgwNDAyMDQwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDQxMjA0MGUsIDB4MDQxYTA0MTYsIDB4MDAwIH0sCi0gICAgeyAweDA0MjIwNDFlLCAweDA0MmEwNDI2LCAweDAwMCB9LAotICAgIHsgMHgwNWIzMDViMywgMHgwNDJlMDViMywgMHgwMDAgfSwKLSAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCi0gICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAyMDY2OCwgMHgwNjg2MDAwNiwgMHgwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY2NzBfcGZwX21pY3JvY29kZVtdID0gewotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHg3YzAzOGIsCi0weDgwMDFiOCwKLTB4N2MwMzhiLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4YzQxODM4LAotMHhjYTI0MDAsCi0weGNhMjgwMCwKLTB4OTU4MWE4LAotMHhjNDFjM2EsCi0weGMzYzAwMCwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weDdjNzQ0YiwKLTB4YzIwMDA1LAotMHg5OWMwMDAsCi0weGM0MWMzYSwKLTB4N2M3NDRjLAotMHhjMGZmZjAsCi0weDA0MmMwNCwKLTB4MzA5MDAyLAotMHg3ZDI1MDAsCi0weDM1MTQwMiwKLTB4N2QzNTBiLAotMHgyNTU0MDMsCi0weDdjZDU4MCwKLTB4MjU5YzAzLAotMHg5NWMwMDQsCi0weGQ1MDAxYiwKLTB4N2VkZGMxLAotMHg3ZDlkODAsCi0weGQ2ODAxYiwKLTB4ZDU4MDFiLAotMHhkNDQwMWUsCi0weGQ1NDAxZSwKLTB4ZDY0MDFlLAotMHhkNjgwMWUsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHg5NzgzZDMsCi0weGQ1YzAxZSwKLTB4Y2EwODAwLAotMHg4MDAwMWEsCi0weGNhMGMwMCwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ODAwMDBjLAotMHhjNDE4MzgsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2ExODAwLAotMHhkNDQwMWUsCi0weGQ1ODAxZSwKLTB4ODAwMDUzLAotMHhkNDAwNzUsCi0weGQ0NDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ4MDE5LAotMHhkNGMwMTgsCi0weGQ1MDAxNywKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZTIwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weGQ0ODA2MCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhkNDgwNjEsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDgwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weGQ0ODAxNiwKLTB4ZDRjMDE2LAotMHhkNDgwMWUsCi0weDgwMDFiOCwKLTB4ZDRjMDFlLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5NDgwMDQsCi0weGNhMTQwMCwKLTB4ZTQyMGYzLAotMHhkNDIwMTMsCi0weGQ1NjA2NSwKLTB4ZDRlMDFjLAotMHhkNTIwMWMsCi0weGQ1NjAxYywKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODNmNywKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weDgwMDA3OSwKLTB4ZDQyMDEzLAotMHhjNjA4NDMsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHg5ODgzZWYsCi0weGNhMTQwMCwKLTB4ZDQwMDY0LAotMHg4MDAwOGQsCi0weDAwMDAwMCwKLTB4YzQxNDMyLAotMHhjNjE4NDMsCi0weGM0MDgyZiwKLTB4OTU0MDA1LAotMHhjNDBjMzAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDk1ODNmNSwKLTB4YzQxMDMxLAotMHhkNDQwMzMsCi0weGQ1MjA2NSwKLTB4ZDRhMDFjLAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZTQwMTVlLAotMHhkNDAwMWUsCi0weDgwMDAwMCwKLTB4MDYyMDAxLAotMHhjYTE4MDAsCi0weDBhMjAwMSwKLTB4ZDYwMDc2LAotMHhjNDA4MzYsCi0weDk4ODAwNywKLTB4YzYxMDQ1LAotMHg5NTAxMTAsCi0weGQ0MDAxZiwKLTB4ZDQ2MDYyLAotMHg4MDAwMDAsCi0weGQ0MjA2MiwKLTB4Y2MzODM1LAotMHhjYzE0MzMsCi0weDg0MDFiYiwKLTB4ZDQwMDcyLAotMHhkNTQwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhlMjAwMWEsCi0weDg0MDFiYiwKLTB4ZTIwMDFhLAotMHhjYzEwNGIsCi0weGNjMDQ0NywKLTB4MmM5NDAxLAotMHg3ZDA5OGIsCi0weDk4NDAwNSwKLTB4N2QxNWNiLAotMHhkNDAwMWEsCi0weDgwMDFiOCwKLTB4ZDQwMDZkLAotMHgzNDQ0MDEsCi0weGNjMGM0OCwKLTB4OTg0MDNhLAotMHhjYzJjNGEsCi0weDk1ODAwNCwKLTB4Y2MwNDQ5LAotMHg4MDAxYjgsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHgyODI4MDEsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMWIsCi0weDA0MzgwYywKLTB4ODQwMGYwLAotMHhjYzEwMDMsCi0weDk4ODAxNywKLTB4MDQzODA4LAotMHg4NDAwZjAsCi0weGNjMTAwMywKLTB4OTg4MDEzLAotMHgwNDM4MDQsCi0weDg0MDBmMCwKLTB4Y2MxMDAzLAotMHg5ODgwMTQsCi0weGNjMTA0YywKLTB4OWE4MDA5LAotMHhjYzE0NGQsCi0weDk4NDBkYywKLTB4ZDQwMDZkLAotMHhjYzE4NDgsCi0weGQ1MDAxYSwKLTB4ZDU0MDFhLAotMHg4MDAwYzksCi0weGQ1ODAxYSwKLTB4OTZjMGQ1LAotMHhkNDAwNmQsCi0weDgwMDFiOCwKLTB4ZDQwMDZlLAotMHg5YWMwMDMsCi0weGQ0MDA2ZCwKLTB4ZDQwMDZlLAotMHg4MDAwMDAsCi0weGVjMDA3ZiwKLTB4OWFjMGNjLAotMHhkNDAwNmQsCi0weDgwMDFiOCwKLTB4ZDQwMDZlLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHg3ZDkxMDMsCi0weDdkZDU4MywKLTB4N2QxOTBjLAotMHgzNWNjMWYsCi0weDM1NzAxZiwKLTB4N2NmMGNiLAotMHg3Y2QwOGIsCi0weDg4MDAwMCwKLTB4N2U4ZThiLAotMHg5NWMwMDQsCi0weGQ0MDA2ZSwKLTB4ODAwMWI4LAotMHhkNDAwMWEsCi0weGQ0YzAxYSwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMTAwMywKLTB4Y2MxNDAzLAotMHhjYzE4MDMsCi0weGNjMWMwMywKLTB4Y2MyNDAzLAotMHhjYzI4MDMsCi0weDM1YzQxZiwKLTB4MzZiMDFmLAotMHg3YzcwNGIsCi0weDM0ZjAxZiwKLTB4N2M3MDRiLAotMHgzNTcwMWYsCi0weDdjNzA0YiwKLTB4N2Q4ODgxLAotMHg3ZGNjYzEsCi0weDdlNTEwMSwKLTB4N2U5NTQxLAotMHg3YzkwODIsCi0weDdjZDRjMiwKLTB4N2M4NDhiLAotMHg5YWMwMDMsCi0weDdjOGM4YiwKLTB4MmM4ODAxLAotMHg5ODgwOWUsCi0weGQ0MDA2ZCwKLTB4OTg0MDljLAotMHhkNDAwNmUsCi0weGNjMDg0YywKLTB4Y2MwYzRkLAotMHhjYzEwNDgsCi0weGQ0ODAxYSwKLTB4ZDRjMDFhLAotMHg4MDAxMDEsCi0weGQ1MDAxYSwKLTB4Y2MwODMyLAotMHhkNDAwMzIsCi0weDk0ODJkOSwKLTB4Y2EwYzAwLAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4ZDQ0MDFlLAotMHhjYTE0MDAsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGQ1NDAxZSwKLTB4ZDU0MDM0LAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4MjgwNDA0LAotMHhlMjAwMWEsCi0weGUyMDAxYSwKLTB4ZDQ0MDFhLAotMHhjYTM4MDAsCi0weGNjMDgwMywKLTB4Y2MwYzAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4OTg4MmJkLAotMHgwMDAwMDAsCi0weDg0MDFiYiwKLTB4ZDdhMDZmLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4Y2EwNDAwLAotMHhjMmZmMDAsCi0weGNjMDgzNCwKLTB4YzEzZmZmLAotMHg3Yzc0Y2IsCi0weDdjYzkwYiwKLTB4N2QwMTBmLAotMHg5OTAyYjAsCi0weDdjNzM4YiwKLTB4ODQwMWJiLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA4MDAsCi0weDI4MTkwMCwKLTB4N2Q4OThiLAotMHg5NTgwMTQsCi0weDI4MTQwNCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGNhMWMwMCwKLTB4Y2EyNDAwLAotMHhlMjAwMWYsCi0weGQ0YzAxYSwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weGNjMTgwMywKLTB4Y2MyYzAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4N2RhNThiLAotMHg3ZDljNDcsCi0weDk4NDI5NywKLTB4MDAwMDAwLAotMHg4MDAxNjEsCi0weGQ0YzAxYSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGU0MDEzZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHgyNDhjMDYsCi0weDBjY2MwNiwKLTB4OThjMDA2LAotMHhjYzEwNGUsCi0weDk5MDAwNCwKLTB4ZDQwMDczLAotMHhlNDAxMWUsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4MzRkMDE4LAotMHgyNTEwMDEsCi0weDk1MDAyMSwKLTB4YzE3ZmZmLAotMHhjYTEwMDAsCi0weGNhMTQwMCwKLTB4Y2ExODAwLAotMHhkNDgwMWQsCi0weGQ0YzAxZCwKLTB4N2RiMThiLAotMHhjMTQyMDIsCi0weGMyYzAwMSwKLTB4ZDU4MDFkLAotMHgzNGRjMGUsCi0weDdkNWQ0YywKLTB4N2Y3MzRjLAotMHhkNzQwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhjMTQyMDAsCi0weGMyYzAwMCwKLTB4MDk5YzAxLAotMHgzMWRjMTAsCi0weDdmNWY0YywKLTB4N2Y3MzRjLAotMHgwNDI4MDIsCi0weDdkODM4MCwKLTB4ZDVhODZmLAotMHhkNTgwNjYsCi0weGQ3NDAxZSwKLTB4ZWMwMDVlLAotMHhjODI0MDIsCi0weGM4MjQwMiwKLTB4ODAwMWI4LAotMHhkNjAwNzYsCi0weGQ0NDAxZSwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZiwKLTB4ZDQwMDFmLAotMHg4MDAwMDAsCi0weGQ0MDAxZiwKLTB4ZDQwMDFmLAotMHg4ODAwMDAsCi0weGQ0MDAxZiwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDEwMTcxLAotMHgwMjAxNzgsCi0weDAzMDA4ZiwKLTB4MDQwMDdmLAotMHgwNTAwMDMsCi0weDA2MDAzZiwKLTB4MDcwMDMyLAotMHgwODAxMmMsCi0weDA5MDA0NiwKLTB4MGEwMDM2LAotMHgxMDAxYjYsCi0weDE3MDBhMiwKLTB4MjIwMTNhLAotMHgyMzAxNDksCi0weDIwMDBiNCwKLTB4MjQwMTI1LAotMHgyNzAwNGQsCi0weDI4MDA2YSwKLTB4MmEwMDYwLAotMHgyYjAwNTIsCi0weDJmMDA2NSwKLTB4MzIwMDg3LAotMHgzNDAxN2YsCi0weDNjMDE1NiwKLTB4M2YwMDcyLAotMHg0MTAxOGMsCi0weDQ0MDEyZSwKLTB4NTUwMTczLAotMHg1NjAxN2EsCi0weDYwMDAwYiwKLTB4NjEwMDM0LAotMHg2MjAwMzgsCi0weDYzMDAzOCwKLTB4NjQwMDM4LAotMHg2NTAwMzgsCi0weDY2MDAzOCwKLTB4NjcwMDM4LAotMHg2ODAwM2EsCi0weDY5MDA0MSwKLTB4NmEwMDQ4LAotMHg2YjAwNDgsCi0weDZjMDA0OCwKLTB4NmQwMDQ4LAotMHg2ZTAwNDgsCi0weDZmMDA0OCwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSUzc4MF9jcF9taWNyb2NvZGVbXVszXSA9IHsKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZDEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAotICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKLSAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAotICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCi0gICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKLSAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKLSAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCi0gICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAotICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZjMgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAotICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAotICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAotICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKLSAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAotICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCi0gICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAotICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKLSAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAotICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZjIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAotICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCi0gICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKLSAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCi0gICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCi0gICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCi0gICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAotICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCi0gICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MjEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAotICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCi0gICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAotICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkMSB9LAotICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKLSAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCi0gICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCi0gICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAotICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAotICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAotICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZmIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmNiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAotICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4YTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzU1IH0sCi0gICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNWUgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YyB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4Mzc0IH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzY3IH0sCi0gICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmEgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM2NyB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3NiB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOGMgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNyB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I5IH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTIgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZSB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2FlIH0sCi0gICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTYgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAotICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4Mzk4IH0sCi0gICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2E0IH0sCi0gICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNiNCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MyIH0sCi0gICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKLSAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAotICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKLSAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKLSAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAotICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAotICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKLSAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAotICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKLSAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAotICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCi0gICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAotICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4YzAzMDBhMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAzNDQwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCi0gICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NyB9LAotICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ1MCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ1MCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAotICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDYxIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMjAyMDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjkgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDZlIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2MjcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0OGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2EgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDhlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OGUgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODkgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4ZSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDhlIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAotICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDk4IH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0YTEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDYxIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWIgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGFjIH0sCi0gICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGI4IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YjQgfSwKLSAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2IgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDYyNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0Y2YgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZDYgfSwKLSAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkOCB9LAotICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwOCB9LAotICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGY3IH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlYiB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCi0gICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwZCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUyMSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTM2IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAotICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAotICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAotICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAotICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKLSAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYxMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTZjIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCi0gICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzQgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAotICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc0IH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTgyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzggfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAotICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTgwIH0sCi0gICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2MjcgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTgyIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTg0IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjMyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkyIH0sCi0gICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDI2MmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTAgfSwKLSAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTAgfSwKLSAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMjYyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjI5LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5ZSB9LAotICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAotICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM1LCAweDAwMjAyNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCi0gICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDM2LCAweDAwMjAyNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWI4IH0sCi0gICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAotICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWJlIH0sCi0gICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWMzIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDVkNiB9LAotICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkYSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzMgfSwKLSAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1ZGEgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCi0gICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDVjZCB9LAotICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg1Y2QgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWYzIH0sCi0gICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNzQgfSwKLSAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCi0gICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NWVkIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAotICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCi0gICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCi0gICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDYwNyB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjIwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKLSAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDYyMiB9LAotICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDYyNSB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjI3IH0sCi0gICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjJhIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKLSAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKLSAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCi0gICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAotICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCi0gICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKLSAgICB7IDB4MDE0MjA1MGEsIDB4MDViYTAyNTAsIDB4MDAwIH0sCi0gICAgeyAweDAxYzMwMTY4LCAweDA0NDEwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKLSAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCi0gICAgeyAweDAzZDcwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwNWUyMDVlMywgMHgwMzFmMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDMyMDA1YmYsIDB4MDMyMDAzNGEsIDB4MDAwIH0sCi0gICAgeyAweDAzMzQwMjgyLCAweDAzNGMwMzNlLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDViYTA1NTcsIDB4MDViYTAzMmEsIDB4MDAwIH0sCi0gICAgeyAweDAzYmMwNWJhLCAweDA0YzMwMzRlLCAweDAwMCB9LAotICAgIHsgMHgwNGEyMDQ1NSwgMHgwNDNmMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDRkODA1YmEsIDB4MDQ0MzA0ZTUsIDB4MDAwIH0sCi0gICAgeyAweDA0NTUwNTBmLCAweDAzNWIwMzdiLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCi0gICAgeyAweDA1YmEwNWJhLCAweDA1ZDgwNWMxLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDViYSwgMHgwMDA3MDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCi0gICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKLSAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCi0gICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAotICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKLSAgICB7IDB4MDViYTA1YmEsIDB4MDQzYTA0MzgsIDB4MDAwIH0sCi0gICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAotICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKLSAgICB7IDB4MDAwMjA2MGUsIDB4MDYyYzAwMDYsIDB4MDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJTNzgwX3BmcF9taWNyb2NvZGVbXSA9IHsKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4N2MwMzhiLAotMHg4MDAxZGIsCi0weDdjMDM4YiwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGM0MTgzOCwKLTB4Y2EyNDAwLAotMHhjYTI4MDAsCi0weDk1ODFjYiwKLTB4YzQxYzNhLAotMHhjM2MwMDAsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHg3Yzc0NGIsCi0weGMyMDAwNSwKLTB4OTljMDAwLAotMHhjNDFjM2EsCi0weDdjNzQ0YywKLTB4YzBmZmUwLAotMHgwNDJjMDgsCi0weDMwOTAwMiwKLTB4N2QyNTAwLAotMHgzNTE0MDIsCi0weDdkMzUwYiwKLTB4MjU1NDA3LAotMHg3Y2Q1ODAsCi0weDI1OWMwNywKLTB4OTVjMDA0LAotMHhkNTAwMWIsCi0weDdlZGRjMSwKLTB4N2Q5ZDgwLAotMHhkNjgwMWIsCi0weGQ1ODAxYiwKLTB4ZDQ0MDFlLAotMHhkNTQwMWUsCi0weGQ2NDAxZSwKLTB4ZDY4MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4OTc4M2QzLAotMHhkNWMwMWUsCi0weGNhMDgwMCwKLTB4ODAwMDFhLAotMHhjYTBjMDAsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHg4MDAwMGMsCi0weGM0MTgzOCwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weDgwMDAwYywKLTB4YzQxODM4LAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTFlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhlNDAxM2UsCi0weGQ0MDAxZSwKLTB4ZDQ0MDFlLAotMHhlZTAwMWUsCi0weGNhMDQwMCwKLTB4YTAwMDAwLAotMHg3ZTgyOGIsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHg4MDAxZGIsCi0weGQ0ODAyNCwKLTB4Y2EwODAwLAotMHg3YzAwYzAsCi0weGM4MTQyNSwKLTB4YzgxODI0LAotMHg3Yzk0ODgsCi0weDdjOTg4MCwKLTB4YzIwMDAzLAotMHhkNDAwNzUsCi0weDdjNzQ0YywKLTB4ODAwMDY0LAotMHhkNDQwMWUsCi0weGNhMTgwMCwKLTB4ZDQ0MDFlLAotMHhkNTgwMWUsCi0weDgwMDA2MiwKLTB4ZDQwMDc1LAotMHhkNDQwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0ODAxOSwKLTB4ZDRjMDE4LAotMHhkNTAwMTcsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGUyMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZDQwMDc1LAotMHhkNDQwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weGQ0ODAxOSwKLTB4ZDRjMDE4LAotMHhkNTAwMTcsCi0weGQ0ODAxZSwKLTB4ZDRjMDFlLAotMHhkNTAwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4Y2EwODAwLAotMHgyNDhjMDEsCi0weGQ0ODA2MCwKLTB4OTRjMDAzLAotMHgwNDEwMDEsCi0weDA0MTAwMiwKLTB4ZDUwMDI1LAotMHhkNDQwMWUsCi0weDgwMDAwMCwKLTB4ZDQ4MDFlLAotMHhjYTA4MDAsCi0weGQ0ODA2MSwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGQ0ODAxZSwKLTB4Y2EwODAwLAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ZDQ4MDE2LAotMHhkNGMwMTYsCi0weGQ0ODAxZSwKLTB4ODAwMWRiLAotMHhkNGMwMWUsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk0ODAwNCwKLTB4Y2ExNDAwLAotMHhlNDIwZjMsCi0weGQ0MjAxMywKLTB4ZDU2MDY1LAotMHhkNGUwMWMsCi0weGQ1MjAxYywKLTB4ZDU2MDFjLAotMHg4MDAwMDAsCi0weDA2MjAwMSwKLTB4YzYwODQzLAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4OTQ4M2Y3LAotMHhjYTE0MDAsCi0weGU0MjBmMywKLTB4ODAwMDljLAotMHhkNDIwMTMsCi0weGM2MDg0MywKLTB4Y2EwYzAwLAotMHhjYTEwMDAsCi0weDk4ODNlZiwKLTB4Y2ExNDAwLAotMHhkNDAwNjQsCi0weDgwMDBiMCwKLTB4MDAwMDAwLAotMHhjNDE0MzIsCi0weGM2MTg0MywKLTB4YzQwODJmLAotMHg5NTQwMDUsCi0weGM0MGMzMCwKLTB4ZDQ0MDFlLAotMHg4MDAwMDAsCi0weGVlMDAxZSwKLTB4OTU4M2Y1LAotMHhjNDEwMzEsCi0weGQ0NDAzMywKLTB4ZDUyMDY1LAotMHhkNGEwMWMsCi0weGQ0ZTAxYywKLTB4ZDUyMDFjLAotMHhlNDAxNWUsCi0weGQ0MDAxZSwKLTB4ODAwMDAwLAotMHgwNjIwMDEsCi0weGNhMTgwMCwKLTB4MGEyMDAxLAotMHhkNjAwNzYsCi0weGM0MDgzNiwKLTB4OTg4MDA3LAotMHhjNjEwNDUsCi0weDk1MDExMCwKLTB4ZDQwMDFmLAotMHhkNDYwNjIsCi0weDgwMDAwMCwKLTB4ZDQyMDYyLAotMHhjYzM4MzUsCi0weGNjMTQzMywKLTB4ODQwMWRlLAotMHhkNDAwNzIsCi0weGQ1NDAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGUyMDAxYSwKLTB4ODQwMWRlLAotMHhlMjAwMWEsCi0weGNjMTA0YiwKLTB4Y2MwNDQ3LAotMHgyYzk0MDEsCi0weDdkMDk4YiwKLTB4OTg0MDA1LAotMHg3ZDE1Y2IsCi0weGQ0MDAxYSwKLTB4ODAwMWRiLAotMHhkNDAwNmQsCi0weDM0NDQwMSwKLTB4Y2MwYzQ4LAotMHg5ODQwM2EsCi0weGNjMmM0YSwKLTB4OTU4MDA0LAotMHhjYzA0NDksCi0weDgwMDFkYiwKLTB4ZDQwMDFhLAotMHhkNGMwMWEsCi0weDI4MjgwMSwKLTB4ODQwMTEzLAotMHhjYzEwMDMsCi0weDk4ODAxYiwKLTB4MDQzODBjLAotMHg4NDAxMTMsCi0weGNjMTAwMywKLTB4OTg4MDE3LAotMHgwNDM4MDgsCi0weDg0MDExMywKLTB4Y2MxMDAzLAotMHg5ODgwMTMsCi0weDA0MzgwNCwKLTB4ODQwMTEzLAotMHhjYzEwMDMsCi0weDk4ODAxNCwKLTB4Y2MxMDRjLAotMHg5YTgwMDksCi0weGNjMTQ0ZCwKLTB4OTg0MGRjLAotMHhkNDAwNmQsCi0weGNjMTg0OCwKLTB4ZDUwMDFhLAotMHhkNTQwMWEsCi0weDgwMDBlYywKLTB4ZDU4MDFhLAotMHg5NmMwZDUsCi0weGQ0MDA2ZCwKLTB4ODAwMWRiLAotMHhkNDAwNmUsCi0weDlhYzAwMywKLTB4ZDQwMDZkLAotMHhkNDAwNmUsCi0weDgwMDAwMCwKLTB4ZWMwMDdmLAotMHg5YWMwY2MsCi0weGQ0MDA2ZCwKLTB4ODAwMWRiLAotMHhkNDAwNmUsCi0weGNjMTQwMywKLTB4Y2MxODAzLAotMHhjYzFjMDMsCi0weDdkOTEwMywKLTB4N2RkNTgzLAotMHg3ZDE5MGMsCi0weDM1Y2MxZiwKLTB4MzU3MDFmLAotMHg3Y2YwY2IsCi0weDdjZDA4YiwKLTB4ODgwMDAwLAotMHg3ZThlOGIsCi0weDk1YzAwNCwKLTB4ZDQwMDZlLAotMHg4MDAxZGIsCi0weGQ0MDAxYSwKLTB4ZDRjMDFhLAotMHhjYzA4MDMsCi0weGNjMGMwMywKLTB4Y2MxMDAzLAotMHhjYzE0MDMsCi0weGNjMTgwMywKLTB4Y2MxYzAzLAotMHhjYzI0MDMsCi0weGNjMjgwMywKLTB4MzVjNDFmLAotMHgzNmIwMWYsCi0weDdjNzA0YiwKLTB4MzRmMDFmLAotMHg3YzcwNGIsCi0weDM1NzAxZiwKLTB4N2M3MDRiLAotMHg3ZDg4ODEsCi0weDdkY2NjMSwKLTB4N2U1MTAxLAotMHg3ZTk1NDEsCi0weDdjOTA4MiwKLTB4N2NkNGMyLAotMHg3Yzg0OGIsCi0weDlhYzAwMywKLTB4N2M4YzhiLAotMHgyYzg4MDEsCi0weDk4ODA5ZSwKLTB4ZDQwMDZkLAotMHg5ODQwOWMsCi0weGQ0MDA2ZSwKLTB4Y2MwODRjLAotMHhjYzBjNGQsCi0weGNjMTA0OCwKLTB4ZDQ4MDFhLAotMHhkNGMwMWEsCi0weDgwMDEyNCwKLTB4ZDUwMDFhLAotMHhjYzA4MzIsCi0weGQ0MDAzMiwKLTB4OTQ4MmI2LAotMHhjYTBjMDAsCi0weGQ0NDAxZSwKLTB4ODAwMDAwLAotMHhkNDAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhjYTA4MDAsCi0weGNhMGMwMCwKLTB4Y2ExMDAwLAotMHhkNDQwMWUsCi0weGNhMTQwMCwKLTB4ZDQ4MDFlLAotMHhkNGMwMWUsCi0weGQ1MDAxZSwKLTB4ZDU0MDFlLAotMHhkNTQwMzQsCi0weDgwMDAwMCwKLTB4ZWUwMDFlLAotMHgyODA0MDQsCi0weGUyMDAxYSwKLTB4ZTIwMDFhLAotMHhkNDQwMWEsCi0weGNhMzgwMCwKLTB4Y2MwODAzLAotMHhjYzBjMDMsCi0weGNjMGMwMywKLTB4Y2MwYzAzLAotMHg5ODgyOWEsCi0weDAwMDAwMCwKLTB4ODQwMWRlLAotMHhkN2EwNmYsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhjYTA0MDAsCi0weGMyZmYwMCwKLTB4Y2MwODM0LAotMHhjMTNmZmYsCi0weDdjNzRjYiwKLTB4N2NjOTBiLAotMHg3ZDAxMGYsCi0weDk5MDI4ZCwKLTB4N2M3MzhiLAotMHg4NDAxZGUsCi0weGQ3YTA2ZiwKLTB4ODAwMDAwLAotMHhlZTAwMWYsCi0weGNhMDgwMCwKLTB4MjgxOTAwLAotMHg3ZDg5OGIsCi0weDk1ODAxNCwKLTB4MjgxNDA0LAotMHhjYTBjMDAsCi0weGNhMTAwMCwKLTB4Y2ExYzAwLAotMHhjYTI0MDAsCi0weGUyMDAxZiwKLTB4ZDRjMDFhLAotMHhkNTAwMWEsCi0weGQ1NDAxYSwKLTB4Y2MxODAzLAotMHhjYzJjMDMsCi0weGNjMmMwMywKLTB4Y2MyYzAzLAotMHg3ZGE1OGIsCi0weDdkOWM0NywKLTB4OTg0Mjc0LAotMHgwMDAwMDAsCi0weDgwMDE4NCwKLTB4ZDRjMDFhLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGVlMDAxZSwKLTB4Y2EwNDAwLAotMHhhMDAwMDAsCi0weDdlODI4YiwKLTB4ZTQwMTNlLAotMHhkNDAwMWUsCi0weGQ0NDAxZSwKLTB4ZWUwMDFlLAotMHhjYTA0MDAsCi0weGEwMDAwMCwKLTB4N2U4MjhiLAotMHhjYTA4MDAsCi0weDI0OGMwNiwKLTB4MGNjYzA2LAotMHg5OGMwMDYsCi0weGNjMTA0ZSwKLTB4OTkwMDA0LAotMHhkNDAwNzMsCi0weGU0MDExZSwKLTB4ZDQwMDFlLAotMHhkNDQwMWUsCi0weGQ0ODAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weGNhMDgwMCwKLTB4Y2EwYzAwLAotMHgzNGQwMTgsCi0weDI1MTAwMSwKLTB4OTUwMDIxLAotMHhjMTdmZmYsCi0weGNhMTAwMCwKLTB4Y2ExNDAwLAotMHhjYTE4MDAsCi0weGQ0ODAxZCwKLTB4ZDRjMDFkLAotMHg3ZGIxOGIsCi0weGMxNDIwMiwKLTB4YzJjMDAxLAotMHhkNTgwMWQsCi0weDM0ZGMwZSwKLTB4N2Q1ZDRjLAotMHg3ZjczNGMsCi0weGQ3NDAxZSwKLTB4ZDUwMDFlLAotMHhkNTQwMWUsCi0weGMxNDIwMCwKLTB4YzJjMDAwLAotMHgwOTljMDEsCi0weDMxZGMxMCwKLTB4N2Y1ZjRjLAotMHg3ZjczNGMsCi0weDA0MjgwMiwKLTB4N2Q4MzgwLAotMHhkNWE4NmYsCi0weGQ1ODA2NiwKLTB4ZDc0MDFlLAotMHhlYzAwNWUsCi0weGM4MjQwMiwKLTB4YzgyNDAyLAotMHg4MDAxZGIsCi0weGQ2MDA3NiwKLTB4ZDQ0MDFlLAotMHhkNDgwMWUsCi0weGQ0YzAxZSwKLTB4ODAwMDAwLAotMHhlZTAwMWUsCi0weDgwMDAwMCwKLTB4ZWUwMDFmLAotMHhkNDAwMWYsCi0weDgwMDAwMCwKLTB4ZDQwMDFmLAotMHhkNDAwMWYsCi0weDg4MDAwMCwKLTB4ZDQwMDFmLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAwMDAwMCwKLTB4MDAwMDAwLAotMHgwMDAwMDAsCi0weDAxMDE5NCwKLTB4MDIwMTliLAotMHgwMzAwYjIsCi0weDA0MDBhMiwKLTB4MDUwMDAzLAotMHgwNjAwM2YsCi0weDA3MDAzMiwKLTB4MDgwMTRmLAotMHgwOTAwNDYsCi0weDBhMDAzNiwKLTB4MTAwMWQ5LAotMHgxNzAwYzUsCi0weDIyMDE1ZCwKLTB4MjMwMTZjLAotMHgyMDAwZDcsCi0weDI0MDE0OCwKLTB4MjYwMDRkLAotMHgyNzAwNWMsCi0weDI4MDA4ZCwKLTB4MjkwMDUxLAotMHgyYTAwN2UsCi0weDJiMDA2MSwKLTB4MmYwMDg4LAotMHgzMjAwYWEsCi0weDM0MDFhMiwKLTB4MzYwMDZmLAotMHgzYzAxNzksCi0weDNmMDA5NSwKLTB4NDEwMWFmLAotMHg0NDAxNTEsCi0weDU1MDE5NiwKLTB4NTYwMTlkLAotMHg2MDAwMGIsCi0weDYxMDAzNCwKLTB4NjIwMDM4LAotMHg2MzAwMzgsCi0weDY0MDAzOCwKLTB4NjUwMDM4LAotMHg2NjAwMzgsCi0weDY3MDAzOCwKLTB4NjgwMDNhLAotMHg2OTAwNDEsCi0weDZhMDA0OCwKLTB4NmIwMDQ4LAotMHg2YzAwNDgsCi0weDZkMDA0OCwKLTB4NmUwMDQ4LAotMHg2ZjAwNDgsCi0weDczMDFkOSwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLTB4MDAwMDA2LAotMHgwMDAwMDYsCi0weDAwMDAwNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY3NzBfY3BfbWljcm9jb2RlW10gPSB7Ci0weGNjMDAwM2VhLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg4MDAwMDAwMSwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMDAxLAotMHhjYzQwMDA0MSwKLTB4N2M0MGMwMDAsCi0weGMwMTYwMDA0LAotMHgzMGQwM2ZmZiwKLTB4N2QxNTAwMGMsCi0weGNjMTEwMDAwLAotMHgyOGQ4MDAxZSwKLTB4MzE5ODAwMDEsCi0weDI4ZGMwMDFmLAotMHhjODIwMDAwNCwKLTB4OTVjMDAwMDYsCi0weDdjNDI0MDAwLAotMHhjYzAwMDA2MiwKLTB4N2U1NjgwMGMsCi0weGNjMjkwMDAwLAotMHhjODI0MDAwNCwKLTB4N2UyNjAwMGIsCi0weDk1ODAwMDA2LAotMHg3YzQyYzAwMCwKLTB4Y2MwMDAwNjIsCi0weDdlZDcwMDBjLAotMHhjYzMxMDAwMCwKLTB4YzgyYzAwMDQsCi0weDdlMmUwMDBjLAotMHhjYzAwMDA2MiwKLTB4MzExMDNmZmYsCi0weDgwMDAwMDAxLAotMHhjZTExMDAwMCwKLTB4N2M0MGMwMDAsCi0weDgwMDAwMDAxLAotMHhjYzQwMDA0MCwKLTB4ODAwMDAwMDEsCi0weGNjNDEyMjU3LAotMHg3YzQxODAwMCwKLTB4Y2M0MDAwNDUsCi0weGNjNDAwMDQ4LAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGNjNDAwMDQ1LAotMHhjYzQwMDA0OCwKLTB4N2M0MGMwMDAsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDA0MGNhMWZkLAotMHhjMDEyMDAwMSwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHg3Y2QwYzAwYywKLTB4Y2M0MTIyNWMsCi0weGNjNDFhMWZjLAotMHhkMDRkMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAwMDEsCi0weGNjNDEyMjVkLAotMHg3YzQwODAwMCwKLTB4N2M0MGMwMDAsCi0weGMwMmEwMDAyLAotMHg3YzQxMDAwMCwKLTB4N2QyOTAwMGMsCi0weDMwOTQwMDAxLAotMHgzMDk4MDAwNiwKLTB4MzA5YzAzMDAsCi0weDI5ZGMwMDA4LAotMHg3YzQyMDAwMCwKLTB4N2M0MjQwMDAsCi0weDk1NDAwMDBmLAotMHhjMDJlMDAwNCwKLTB4MDVmMDIyNTgsCi0weDdmMmYwMDBjLAotMHhjYzMxMDAwMCwKLTB4YzgyODAwMDQsCi0weGNjYzEyMTY5LAotMHhjZDAxMjE2YSwKLTB4Y2U4MTIxNmIsCi0weDBkYjQwMDAyLAotMHhjYzAxMjE2YywKLTB4OTc0MDAwMGUsCi0weDBkYjQwMDAwLAotMHg4MDAwMDA3YiwKLTB4YzgzNDAwMGEsCi0weDBkYjQwMDAyLAotMHg5NzQwMDAwOSwKLTB4MGRiNDAwMDAsCi0weGMwMmUwMDA0LAotMHgwNWYwMjI1OCwKLTB4N2YyZjAwMGMsCi0weGNjMzEwMDAwLAotMHhjODI4MDAwNCwKLTB4ODAwMDAwN2IsCi0weGM4MzQwMDBhLAotMHg5NzQwMDAwNCwKLTB4N2UwMjgwMDAsCi0weDgwMDAwMDdiLAotMHhjODM0MDAwYSwKLTB4MGRiNDAwMDQsCi0weDk3NDBmZjhjLAotMHgwMDAwMDAwMCwKLTB4Y2UwMTIxNmQsCi0weGNlNDEyMTZlLAotMHhjODI4MDAwMywKLTB4YzgzNDAwMGEsCi0weDliNDAwMDA0LAotMHgwNDNjMDAwNSwKLTB4ODQwMDAyNmQsCi0weGNjMDAwMDYyLAotMHgwZGY0MDAwMCwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U2LAotMHhjZTgxYTJiNywKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNCwKLTB4ODAwMDAwMDEsCi0weGNmYzFhMmQxLAotMHgwZGY0MDAwMSwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U3LAotMHhjZTgxYTJiYiwKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNSwKLTB4ODAwMDAwMDEsCi0weGNmYzFhMmQyLAotMHgwZGY0MDAwMiwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U4LAotMHhjZTgxYTJiZiwKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNiwKLTB4ODAwMDAwMDEsCi0weGNmYzFhMmQzLAotMHhjODJjMDNlOSwKLTB4Y2U4MWEyYzMsCi0weGMwMzAwMDA2LAotMHg3ZWYzNDAyOCwKLTB4YzAzMDAwMjAsCi0weDdmNmI4MDIwLAotMHg3ZmIzYzAyOSwKLTB4Y2Y4MWEyYzcsCi0weDgwMDAwMDAxLAotMHhjZmMxYTJkNCwKLTB4ODAwMDAwMDEsCi0weGNjNDAwMDQyLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDI5MTQwMDFkLAotMHgzMTU0MDAwMSwKLTB4OTk0MDAwMGQsCi0weDMxMTgxMDAwLAotMHhjODFjMDAxMSwKLTB4MDlkYzAwMDEsCi0weDk1YzBmZmZmLAotMHhjODFjMDAxMSwKLTB4Y2NjMTIxMDAsCi0weGNkMDEyMTAxLAotMHhjY2MxMjEwMiwKLTB4Y2QwMTIxMDMsCi0weDA0MTgwMDA0LAotMHg4MDAwMDM5ZiwKLTB4Y2Q4MWEyYTQsCi0weGMwMmEwMDA0LAotMHg5NTgwMDAwOCwKLTB4MzZhODIxYTMsCi0weGNjMjkwMDAwLAotMHhjODI4MDAwNCwKLTB4YzgxYzAwMTEsCi0weDBkZTQwMDQwLAotMHg5NjQwZmZmZiwKLTB4YzgxYzAwMTEsCi0weGNjYzEyMTcwLAotMHhjZDAxMjE3MSwKLTB4YzgyMDAwMTIsCi0weDk2MDAwMDAwLAotMHhjODIwMDAxMiwKLTB4ODAwMDAzOWYsCi0weGNjMDAwMDY0LAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weGNjMDAwMDQ1LAotMHhjYzAwMDA0OCwKLTB4NDBkNDAwMDMsCi0weGNkNDEyMjVjLAotMHhjZDAxYTFmYywKLTB4YzAxYTAwMDEsCi0weDA0MWNhMWZkLAotMHg3ZGQ5YzAwYywKLTB4N2M0MjAwMDAsCi0weDA4Y2MwMDAxLAotMHgwNjI0MDAwMSwKLTB4MDYyODAwMDIsCi0weGNlMWQwMDAwLAotMHhjZTVkMDAwMCwKLTB4OThjMGZmZmEsCi0weGNlOWQwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg3YzQwYzAwMCwKLTB4MzBkMDAwMDEsCi0weDI4Y2MwMDAxLAotMHg3YzQxNDAwMCwKLTB4OTUwMDAwMDYsCi0weDdjNDE4MDAwLAotMHhjZDQxMjE2ZCwKLTB4Y2Q4MTIxNmUsCi0weDgwMDAwMGYzLAotMHhjODFjMDAwMywKLTB4YzAyMjAwMDQsCi0weDdlMTYwMDBjLAotMHhjYzIxMDAwMCwKLTB4YzgxYzAwMDQsCi0weDdjNDI0MDAwLAotMHg5OGMwMDAwNCwKLTB4N2M0MjgwMDAsCi0weDgwMDAwMDAxLAotMHhjZGU1MDAwMCwKLTB4Y2U0MTIxNjksCi0weGNlODEyMTZhLAotMHhjZGMxMjE2YiwKLTB4ODAwMDAwMDEsCi0weGNjMDEyMTZjLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4N2M0MWMwMDAsCi0weDI4YTQwMDA4LAotMHgzMjY0MDBmZiwKLTB4MGU2ODAwM2MsCi0weDk2ODAwMDBhLAotMHg3YzAyMDAwMCwKLTB4N2M0MjAwMDAsCi0weDFlMzAwMDAzLAotMHhjYzAwMDA2YSwKLTB4OWIwMDAwMDMsCi0weDQyMjAwMDA1LAotMHgwNDIwMDA0MCwKLTB4ODAwMDAxMTAsCi0weDdjMDI0MDAwLAotMHg3ZTAyNDAwMCwKLTB4OWE0MDAwMDAsCi0weDBhNjQwMDAxLAotMHgzMGVjMDAxMCwKLTB4OWFjMDAwMGEsCi0weGNjMDAwMDYyLAotMHhjMDJhMDAwNCwKLTB4YzgyYzAwMjEsCi0weDdlOTI4MDBjLAotMHhjYzAwMDA0MSwKLTB4Y2MyOTAwMDAsCi0weGNlYzAwMDIxLAotMHg4MDAwMDEyMCwKLTB4YzgzMDAwMDQsCi0weGNkMDEyMTZkLAotMHhjZDQxMjE2ZSwKLTB4YzgzMDAwMDMsCi0weDdmMWYwMDBiLAotMHgzMGY0MDAwNywKLTB4Mjc3ODAwMDEsCi0weDk3NDAwMDJhLAotMHgwN2I4MDEyNSwKLTB4OWY4MDAwMDAsCi0weDAwMDAwMDAwLAotMHg4MDAwMDEzNSwKLTB4N2YxYjgwMDQsCi0weDgwMDAwMTM5LAotMHg3ZjFiODAwNSwKLTB4ODAwMDAxM2QsCi0weDdmMWI4MDAyLAotMHg4MDAwMDE0MSwKLTB4N2YxYjgwMDMsCi0weDgwMDAwMTQ1LAotMHg3ZjFiODAwNywKLTB4ODAwMDAxNDksCi0weDdmMWI4MDA2LAotMHg4MDAwMDE0ZSwKLTB4MjhhNDAwMDgsCi0weDliODAwMDE5LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWUsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAxNSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVlLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMTEsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZSwKLTB4MzI2NDAwZmYsCi0weDliODAwMDBkLAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWUsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAwOSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVlLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMDUsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZSwKLTB4MzI2NDAwZmYsCi0weDI4YTQwMDA4LAotMHgzMjY0MDBmZiwKLTB4MGU2ODAwM2MsCi0weDlhODBmZWIxLAotMHgyOGVjMDAwOCwKLTB4N2M0MzQwMDAsCi0weDdjNDM4MDAwLAotMHg3YzQzYzAwMCwKLTB4OTZjMDAwMDcsCi0weGNjMDAwMDYyLAotMHhjZjQxMjE2OSwKLTB4Y2Y4MTIxNmEsCi0weGNmYzEyMTZiLAotMHg4MDAwMDAwMSwKLTB4Y2MwMTIxNmMsCi0weDgwMDAwMDAxLAotMHhjZmY1MDAwMCwKLTB4Y2MwMDAwNmIsCi0weDg0MDAwM2EyLAotMHgwZTY4MDAzYywKLTB4OWE4MDAwMDQsCi0weGM4MjgwMDE1LAotMHg4MDAwMDAwMSwKLTB4ZDA0MDAwN2YsCi0weDk2ODBmZmFiLAotMHg3ZTAyNDAwMCwKLTB4ODQwMDAyM2IsCi0weGMwMGUwMDAyLAotMHhjYzAwMDA0MSwKLTB4ODAwMDAyMzksCi0weGNjYzEzMDRhLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weGMwMWUwMDAxLAotMHgyOTI0MDAxMiwKLTB4YzAyMjAwMDIsCi0weDk2NDAwMDA1LAotMHhjMDI2MDAwNCwKLTB4YzAyN2ZmZmIsCi0weDdkMjUwMDBiLAotMHhjMDI2MDAwMCwKLTB4N2RkMjgwMGIsCi0weDdlMTJjMDBiLAotMHg3ZDI1MDAwYywKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MxMjE2OSwKLTB4OWE4MDAwMGEsCi0weGNkMDEyMTZhLAotMHhjZDQxMjE2YiwKLTB4OTZjMGZlODIsCi0weGNkODEyMTZjLAotMHhjODMwMDAxOCwKLTB4OTcwMDAwMDAsCi0weGM4MzAwMDE4LAotMHg4MDAwMDAwMSwKLTB4Y2MwMDAwMTgsCi0weDg0MDAwM2EyLAotMHhjYzAwMDA3ZiwKLTB4YzgxNDAwMTMsCi0weGM4MTgwMDE0LAotMHhjZDQxMjE2YiwKLTB4OTZjMGZlNzYsCi0weGNkODEyMTZjLAotMHg4MDAwMDE4MiwKLTB4YzgzMDAwMTgsCi0weGM4MGMwMDA4LAotMHg5OGMwMDAwMCwKLTB4YzgwYzAwMDgsCi0weDdjNDEwMDAwLAotMHg5NTAwMDAwMiwKLTB4MDAwMDAwMDAsCi0weDdjNDE0MDAwLAotMHhjODIwMDAwOSwKLTB4Y2M0MDAwNDMsCi0weGNlMDFhMWY0LAotMHhjYzQwMDA0NCwKLTB4YzAwZTgwMDAsCi0weDdjNDI0MDAwLAotMHg3YzQyODAwMCwKLTB4MmFhYzAwMWYsCi0weDk2YzBmZTYzLAotMHhjMDM1ZjAwMCwKLTB4Y2U0MDAzZTIsCi0weDMyNzgwMDAzLAotMHgyNjdjMDAwOCwKLTB4N2ZmN2MwMGIsCi0weDdmZmJjMDBjLAotMHgyYTc4MDAxOCwKLTB4Y2ZjMDAzZTMsCi0weGNmODAwM2U0LAotMHgyNmIwMDAwMiwKLTB4N2YzZjAwMDAsCi0weGNmMDAwM2U1LAotMHg4MDAwMDMxZiwKLTB4N2M4MGMwMDAsCi0weDdjNDBjMDAwLAotMHgyOGQwMDAwOCwKLTB4MzExMDAwMGYsCi0weDk1MDAwMDBmLAotMHgyNTI4MDAwMSwKLTB4MDZhODAxYjMsCi0weDllODAwMDAwLAotMHgwMDAwMDAwMCwKLTB4ODAwMDAxZDQsCi0weGMwMTIwODAwLAotMHg4MDAwMDFlMiwKLTB4YzgxNDAwMGYsCi0weDgwMDAwMWU5LAotMHhjODE0MDAxMCwKLTB4ODAwMDAxZjAsCi0weGNjYzFhMmE0LAotMHg4MDAwMDFmOSwKLTB4YzgxNDAwMTEsCi0weDMwZDAwMDNmLAotMHgwZDI4MDAxNSwKLTB4OWE4MDAwMTIsCi0weDBkMjgwMDFlLAotMHg5YTgwMDAxZSwKLTB4MGQyODAwMjAsCi0weDlhODAwMDIzLAotMHgwZDI0MDAwZiwKLTB4MGQyODAwMTAsCi0weDdlNmE4MDBjLAotMHg5YTgwMDAyNiwKLTB4MGQyMDAwMDQsCi0weDBkMjQwMDE0LAotMHgwZDI4MDAyOCwKLTB4N2U2MjQwMGMsCi0weDdlYTY4MDBjLAotMHg5YTgwMDAyYSwKLTB4YzgxNDAwMTEsCi0weDgwMDAwMDAxLAotMHhjY2MxYTJhNCwKLTB4YzAxMjA4MDAsCi0weDdjNDE0MDAwLAotMHg3ZDBjYzAwYywKLTB4YzAxMjAwMDgsCi0weDI5NTgwMDAzLAotMHgyOTVjMDAwYywKLTB4N2M0MjAwMDAsCi0weDdkZDFjMDBiLAotMHgyNjIwMDAxNCwKLTB4N2UxZTQwMGMsCi0weDdlNGU4MDBjLAotMHhjZTgxYTJhNCwKLTB4ODAwMDAwMDEsCi0weGNkODFhMWZlLAotMHhjODE0MDAwZiwKLTB4MDQxMDIxMGUsCi0weDk1NDAwMDAwLAotMHhjODE0MDAwZiwKLTB4ZDA1MTAwMDAsCi0weDgwMDAwMDAxLAotMHhjY2MxYTJhNCwKLTB4YzgxNDAwMTAsCi0weDA0MTAyMTA4LAotMHg5NTQwMDAwMCwKLTB4YzgxNDAwMTAsCi0weGQwNTEwMDAwLAotMHg4MDAwMDAwMSwKLTB4Y2NjMWEyYTQsCi0weGNjYzFhMmE0LAotMHgwNDEwMDAwMSwKLTB4Y2QwMDAwMTksCi0weDg0MDAwM2EyLAotMHhjYzAwMDA3ZiwKLTB4YzgxMDAwMTksCi0weDk5MDAwMDAwLAotMHhjODEwMDAxOSwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHgwNDEwMjEwMCwKLTB4MDk1NDAwMDEsCi0weDk1NDBmZmZmLAotMHhjODE0MDAxMSwKLTB4ZDA1MTAwMDAsCi0weDgwMDAwMzlmLAotMHhjY2MxYTJhNCwKLTB4N2M0MGMwMDAsCi0weGNjNDAwMDBkLAotMHg5NGMwZmRmZiwKLTB4Y2M0MDAwMGUsCi0weDdjNDEwMDAwLAotMHg5NTAwMDAwNSwKLTB4MDhjYzAwMDEsCi0weGM4MTQwMDA1LAotMHg5OTQwMDAxNCwKLTB4MDAwMDAwMDAsCi0weDk4YzBmZmZiLAotMHg3YzQxMDAwMCwKLTB4ODAwMDAwMDIsCi0weDdkMDA4MDAwLAotMHhjODE0MDAwNSwKLTB4N2M0MGMwMDAsCi0weDk5NDAwMDBjLAotMHhjODE4MDAwYywKLTB4N2M0MTAwMDAsCi0weDk1ODBmZGVlLAotMHhjODIwMDAwZSwKLTB4YzgxYzAwMGQsCi0weDY2MjAwMDIwLAotMHg3ZTFlMDAyYywKLTB4MjUyNDAwMDIsCi0weDdlNjI0MDIwLAotMHg4MDAwMDAwMSwKLTB4Y2NlNjAwMDAsCi0weDdjNDEwMDAwLAotMHhjYzAwMDA2YywKLTB4Y2MwMDAwNmQsCi0weGM4MTgwMDFmLAotMHhjODFjMDAxZSwKLTB4NjU5ODAwMjAsCi0weDdkZDljMDJjLAotMHg3Y2Q0YzAwYywKLTB4Y2NkZTAwMDAsCi0weDQ1ZGMwMDA0LAotMHhjODI4MDAxNywKLTB4OTY4MDAwMGYsCi0weGMwMGUwMDAxLAotMHgyODY4MDAwOCwKLTB4MmFhYzAwMTYsCi0weDMyYTgwMGZmLAotMHgwZWIwMDA0OSwKLTB4N2YyZjAwMGIsCi0weDk3MDAwMDA2LAotMHgwMDAwMDAwMCwKLTB4YzgxNDAwMDUsCi0weDdjNDBjMDAwLAotMHg4MDAwMDIyMywKLTB4N2M0MTAwMDAsCi0weDgwMDAwMjI2LAotMHhkMDQwMDA3ZiwKLTB4ODQwMDAyM2IsCi0weGNjMDAwMDQxLAotMHhjY2MxMzA0YSwKLTB4OTQwMDAwMDAsCi0weGM4M2MwMDFhLAotMHgwNDNjMDAwNSwKLTB4Y2ZjMWEyYTQsCi0weGMwMzYxZjkwLAotMHhjMDM4N2ZmZiwKLTB4N2MwM2MwMTAsCi0weDdmN2I0MDBjLAotMHhjZjQxMjE3YywKLTB4Y2ZjMTIxN2QsCi0weGNjMDEyMTdlLAotMHhjMDNhMDAwNCwKLTB4MDQzNDIxN2YsCi0weDdmN2I0MDBjLAotMHhjYzM1MDAwMCwKLTB4YzgzYzAwMDQsCi0weDJiZmMwMDFmLAotMHgwNDM4MDAyMCwKLTB4OTdjMDAwMDUsCi0weGNjMDAwMDYyLAotMHg5YjgwMDAwMCwKLTB4MGJiODAwMDEsCi0weDgwMDAwMjQ3LAotMHhjYzAwMDA3MSwKLTB4Y2MwMWExZjQsCi0weDA0MzgwMDE2LAotMHhjMDM2MDAwMiwKLTB4Y2Y4MWEyYTQsCi0weDg4MDAwMDAwLAotMHhjZjQxMjAxMCwKLTB4N2M0MGMwMDAsCi0weDI4ZDAwMDFjLAotMHg5NTAwMDAwNSwKLTB4MDRkNDAwMDEsCi0weGNkNDAwMDY1LAotMHg4MDAwMDAwMSwKLTB4Y2Q0MDAwNjgsCi0weDA5NTQwMDAyLAotMHg4MDAwMDAwMSwKLTB4Y2Q0MDAwNjYsCi0weDg0MDAwMjZjLAotMHhjODE4MDNlYSwKLTB4N2M0MGMwMDAsCi0weDk5ODBmZDlkLAotMHhjODE0MDAxNiwKLTB4MDhkMDAwMDEsCi0weDk5NDAwMDJiLAotMHhjZDAwMDA2OCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4MDQzYzAwMDUsCi0weGNmYzFhMmE0LAotMHhjYzAxYTFmNCwKLTB4ODQwMDAzYTIsCi0weGNjMDAwMDQ2LAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weDg0MDAwMjdlLAotMHhjODE4MDNlYSwKLTB4N2M0MGMwMDAsCi0weDk5ODBmZDhiLAotMHhjODE0MDAxNiwKLTB4MDhkMDAwMDEsCi0weDk5NDAwMDE5LAotMHhjZDAwMDA2OCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4MDQzYzAwMjIsCi0weGNmYzFhMmE0LAotMHg4NDAwMDNhMiwKLTB4Y2MwMDAwNDcsCi0weDg4MDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4YzgxMDAwMTYsCi0weDk5MDAwMDBkLAotMHhjYzQwMDA2NywKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHhjODE4MDNlYSwKLTB4OTk4MGZkNzcsCi0weDdjNDBjMDAwLAotMHg5NGMwMDAwMywKLTB4YzgxMDAwMTYsCi0weDk5MDAwMDA0LAotMHhjY2MwMDA2OCwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHg4NDAwMDIzYiwKLTB4YzAxNDgwMDAsCi0weGNjMDAwMDQxLAotMHhjZDQxMzA0YSwKLTB4YzAxNDgwMDAsCi0weDk5MDAwMDAwLAotMHhjODEwMDAxNiwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHhjMDEyMDAwMSwKLTB4N2M1MTQwMGMsCi0weDgwMDAwMDAxLAotMHhkMDU1MDAwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weDI5MWMwMDFmLAotMHhjY2MwMDA0YSwKLTB4Y2QwMDAwNGIsCi0weDk1YzAwMDAzLAotMHhjMDFjODAwMCwKLTB4Y2RjMTIwMTAsCi0weGRkODMwMDAwLAotMHgwNTVjMjAwMCwKLTB4Y2MwMDAwNjIsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDRjLAotMHhjZDAwMDA0ZCwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNhMDAwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA0ZSwKLTB4Y2QwMDAwNGYsCi0weGRkODMwMDAwLAotMHgwNTVjYzAwMCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTAsCi0weGNkMDAwMDUxLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2Y4ZTAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDUyLAotMHhjZDAwMDA1MywKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmODgwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1NCwKLTB4Y2QwMDAwNTUsCi0weGRkODMwMDAwLAotMHgwNTVjZTAwMCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTYsCi0weGNkMDAwMDU3LAotMHhkZDgzMDAwMCwKLTB4MDU1Y2YwMDAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDU4LAotMHhjZDAwMDA1OSwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmM2ZjLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weGQwNDMyMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzYTAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2MwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmOGUwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjg4MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2UwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjNmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4YzgxNDAzZTAsCi0weGNjNDMwMDAwLAotMHhjYzQzMDAwMCwKLTB4Y2M0MzAwMDAsCi0weDdkNDVjMDAwLAotMHhjZGMzMDAwMCwKLTB4ZDA0MzAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDdjNDBjMDAwLAotMHhjODEwMDNlMiwKLTB4YzgxNDAzZTUsCi0weGM4MTgwM2UzLAotMHhjODFjMDNlNCwKLTB4Y2Q4MTIxNjksCi0weGNkYzEyMTZhLAotMHhjY2MxMjE2YiwKLTB4Y2MwMTIxNmMsCi0weDA0MjAwMDA0LAotMHg3ZGExODAwMCwKLTB4N2Q5NjQwMDIsCi0weDk2NDBmY2Q3LAotMHhjZDgwMDNlMywKLTB4MzEyODAwMDMsCi0weGMwMmRmMDAwLAotMHgyNTE4MDAwOCwKLTB4N2RhZDgwMGIsCi0weDdkYTk4MDBjLAotMHg4MDAwMDAwMSwKLTB4Y2Q4MDAzZTMsCi0weDMwOGNmZmZmLAotMHhkMDRkMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHgyOTI0MDAxOCwKLTB4MzI2NDAwMDEsCi0weDlhNDAwMDEzLAotMHhjODE0MDAyMCwKLTB4MTU1ODAwMDIsCi0weDk1ODBmZmZmLAotMHhjODE0MDAyMCwKLTB4Y2MwMDAwNmUsCi0weGNjYzEyMTgwLAotMHhjZDAxMjE4ZCwKLTB4Y2M0MTIxODEsCi0weDI5MTQwMDFmLAotMHgzNDU4ODAwMCwKLTB4Y2Q4MTIxOGMsCi0weDk1NDBmY2I5LAotMHhjYzQxMjE4MiwKLTB4YzgxNDAwMjAsCi0weDk5NDBmZmZmLAotMHhjODE0MDAyMCwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weDdjNDFjMDAwLAotMHg2NWI0MDAyMCwKLTB4N2Y1NzQwMmMsCi0weGQ0Mzc4MTAwLAotMHg0Nzc0MDAwNCwKLTB4ZDQzNzgxMDAsCi0weDQ3NzQwMDA0LAotMHhkNDM3ODEwMCwKLTB4NDc3NDAwMDQsCi0weDA5ZGMwMDA0LAotMHhkNDM3ODEwMCwKLTB4OTljMGZmZjgsCi0weDQ3NzQwMDA0LAotMHgyOTI0MDAxZiwKLTB4YzAzODAwMTksCi0weDk2NDBmY2ExLAotMHhjMDNlMDAwNCwKLTB4Y2Y4MTIxZjgsCi0weDM3ZTAyMWY5LAotMHhjYzIxMDAwMCwKLTB4YzgyMDAwMDQsCi0weDJhMjAwMDE4LAotMHgzMjIwMDAwMSwKLTB4OWEwMGZmZmIsCi0weGNmODEyMWY4LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weDdjNDBjMDAwLAotMHgyOGQwMDAxOCwKLTB4MzExMDAwMDEsCi0weGMwMTYwMDgwLAotMHg5NTAwMDAwMywKLTB4YzAyYTAwMDQsCi0weDdjZDRjMDBjLAotMHhjY2MxMjE3YywKLTB4Y2M0MTIxN2QsCi0weGNjNDEyMTdlLAotMHg3YzQxODAwMCwKLTB4MWRiMDAwMDMsCi0weDM2YTAyMTdmLAotMHg5YjAwMDAwMywKLTB4NDE5YzAwMDUsCi0weDA0MWMwMDQwLAotMHg5OWMwMDAwMCwKLTB4MDlkYzAwMDEsCi0weGNjMjEwMDAwLAotMHhjODI0MDAwNCwKLTB4MmE2YzAwMWYsCi0weDQxOWMwMDA1LAotMHg5YWMwZmZmYSwKLTB4Y2M4MDAwNjIsCi0weDgwMDAwMDAyLAotMHg3YzQwODAwMCwKLTB4N2M0MGMwMDAsCi0weDA0ZDQwM2U2LAotMHg4MDAwMDAwMSwKLTB4Y2M1NDAwMDAsCi0weDgwMDAwMzlmLAotMHhjYzQwMDNlYSwKLTB4YzAxYzgwMDAsCi0weDA0NGNhMDAwLAotMHhjZGMxMjAxMCwKLTB4N2M0MTAwMDAsCi0weGM4MTQwMDA5LAotMHgwNDE4MDAwMCwKLTB4MDQxYzAwMDgsCi0weGNkODAwMDcxLAotMHgwOWRjMDAwMSwKLTB4MDU5ODAwMDEsCi0weGNkMGQwMDAwLAotMHg5OWMwZmZmYywKLTB4Y2M4MDAwNjIsCi0weDgwMDAwMzlmLAotMHhjZDQwMDA3MSwKLTB4YzAwZTAxMDAsCi0weGNjMDAwMDQxLAotMHhjY2MxMzA0YSwKLTB4YzgzYzAwN2YsCi0weGNjMDAwMDdmLAotMHg4MDAwMDAwMSwKLTB4Y2MwMDAwN2YsCi0weGNjMDAwMDdmLAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMTAzMzMsCi0weDAwMTAwMDA0LAotMHgwMDE3MDAwNiwKLTB4MDAyMTAwMDgsCi0weDAwMjcwMDI4LAotMHgwMDI4MDAyMywKLTB4MDAyOTAwMjksCi0weDAwMmEwMDI2LAotMHgwMDJiMDAyOSwKLTB4MDAyZDAwMzgsCi0weDAwMmUwMDNmLAotMHgwMDJmMDA0YSwKLTB4MDAzNDAwNGMsCi0weDAwMzYwMDMwLAotMHgwMDM5MDBhZiwKLTB4MDAzYTAwZDAsCi0weDAwM2IwMGU1LAotMHgwMDNjMDBmZCwKLTB4MDAzZDAxNmMsCi0weDAwM2YwMGFkLAotMHgwMDQxMDMzOCwKLTB4MDA0MzAzNmMsCi0weDAwNDQwMThmLAotMHgwMDQ1MDBmZCwKLTB4MDA0NjAxYWQsCi0weDAwNDcwMWFkLAotMHgwMDQ4MDIwMCwKLTB4MDA0OTAyMGUsCi0weDAwNGEwMjU3LAotMHgwMDRiMDI4NCwKLTB4MDA1MjAyNjEsCi0weDAwNTMwMjczLAotMHgwMDU0MDI4OSwKLTB4MDA1NzAyOWIsCi0weDAwNjAwMjlmLAotMHgwMDYxMDJhZSwKLTB4MDA2MjAyYjgsCi0weDAwNjMwMmMyLAotMHgwMDY0MDJjYywKLTB4MDA2NTAyZDYsCi0weDAwNjYwMmUwLAotMHgwMDY3MDJlYSwKLTB4MDA2ODAyZjQsCi0weDAwNjkwMmY4LAotMHgwMDZhMDJmYywKLTB4MDA2YjAzMDAsCi0weDAwNmMwMzA0LAotMHgwMDZkMDMwOCwKLTB4MDA2ZTAzMGMsCi0weDAwNmYwMzEwLAotMHgwMDcwMDMxNCwKLTB4MDA3MjAzODYsCi0weDAwNzQwMzhjLAotMHgwMDc5MDM4YSwKLTB4MDA3YzAzMWUsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotMHgwMDBmMDM5YiwKLTB4MDAwZjAzOWIsCi0weDAwMGYwMzliLAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSVjc3MF9wZnBfbWljcm9jb2RlW10gPSB7Ci0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weDgwMDAwMDAwLAotMHhkYzAzMDAwMCwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhjODE4MDAwZSwKLTB4MzE5ODAwMDEsCi0weDdjNDI0MDAwLAotMHg5NTgwMDI1MiwKLTB4N2M0MjgwMDAsCi0weGM4MWMwMDFjLAotMHhjMDM3YzAwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3Y2I0ODAwYiwKLTB4YzAzNjAwMDMsCi0weDk5YzAwMDAwLAotMHhjODFjMDAxYywKLTB4N2NiNDgwMGMsCi0weDI0ZDQwMDAyLAotMHg3ZDY1NDAwMCwKLTB4Y2Q0MDAwNDMsCi0weGNlODAwMDQzLAotMHhjZDAwMDA0MywKLTB4Y2M4MDAwNDAsCi0weGNlNDAwMDQwLAotMHhjZTgwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weGRjM2EwMDAwLAotMHg5NzgwZmZkZSwKLTB4Y2QwMDAwNDAsCi0weDdjNDBjMDAwLAotMHg4MDAwMDAxOCwKLTB4N2M0MTAwMDAsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGM4MTgwMDBlLAotMHg4MDAwMDAwYywKLTB4MzE5ODAwMDIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGM4MTgwMDBlLAotMHgyODhjMDAwOCwKLTB4MzBjYzAwMGYsCi0weDM0MTAwMDAxLAotMHg3ZDBkMDAwOCwKLTB4ODAwMDAwMGMsCi0weDdkOTE4MDBiLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4ZDQwMDAzYzAsCi0weGQ0MDAwZmMwLAotMHhkNDAwMGZhMiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhjYzQwMDNmOSwKLTB4ODAwMDAyNjEsCi0weGNjNDAwM2Y4LAotMHhjODIwMDNmOCwKLTB4YzgxYzAzZjksCi0weGM4MTgwM2ZiLAotMHhjMDM3ZmZmZiwKLTB4N2M0MTQwMDAsCi0weGNmNDFhMjllLAotMHg2NjIwMDAyMCwKLTB4N2RlMWMwMmMsCi0weDdkNThjMDA4LAotMHg3Y2RjYzAyMCwKLTB4NjhkMDAwMjAsCi0weGMwMzYwMDAzLAotMHhjYzAwMDA1NCwKLTB4N2NiNDgwMGMsCi0weDgwMDAwMDZhLAotMHhjYzgwMDA0MCwKLTB4N2M0MTgwMDAsCi0weGNkODFhMjllLAotMHhjYzgwMDA0MCwKLTB4Y2Q4MDAwNDAsCi0weDgwMDAwMDY4LAotMHhjYzAwMDA1NCwKLTB4YzAxOWZmZmYsCi0weGNjODAwMDQwLAotMHhjZDgxYTI5ZSwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4Y2NjMWExZmEsCi0weGNkMDFhMWY5LAotMHhjZDQxYTI5ZCwKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHhjZDQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGNjMDAwMDU0LAotMHhjYzgwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4Y2NjMWExZmEsCi0weGNkMDFhMWY5LAotMHhjZDQxYTI5ZCwKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHhjZDQwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weDdjNDBjMDAwLAotMHgzMGQwMDAwMSwKLTB4Y2NjMWEyOWYsCi0weDk1MDAwMDAzLAotMHgwNDE0MDAwMSwKLTB4MDQxNDAwMDIsCi0weGNkNDAwM2ZiLAotMHhjYzgwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGNjYzAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2M4MDAwNDAsCi0weGNjYzFhMmEyLAotMHg4MDAwMDAwMCwKLTB4Y2NjMDAwNDAsCi0weDdjNDBjMDAwLAotMHgyOGQ0MDAxZiwKLTB4Y2M4MDAwNDAsCi0weDk1NDAwMDAzLAotMHg3YzQxMDAwMCwKLTB4Y2NjMDAwNTcsCi0weDI5MTgwMDFmLAotMHhjY2MwMDA0MCwKLTB4OTU4MDAwMDMsCi0weGNkMDAwMDQwLAotMHhjZDAwMDA1OCwKLTB4ODAwMDAyNjEsCi0weGNjMDAwMDdmLAotMHhjODIwMDAxNywKLTB4YzgzMDAwMjIsCi0weDlhMDAwMDA2LAotMHgwZTI4MDAwMSwKLTB4YzgyNDAwMWUsCi0weDBhNjQwMDAxLAotMHhkNDAwMTI0MCwKLTB4Y2U0MDAwNDAsCi0weGMwMzZjMDAwLAotMHg5NjgwMDAwNywKLTB4Mzc3NDc5MDAsCi0weDA0MWMwMDAxLAotMHhjZjQwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNmMDAwM2ZhLAotMHg3YzAzMDAwMCwKLTB4Y2EwYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5NGMwMDAwNCwKLTB4N2M0MTQwMDAsCi0weGQ0MjAwMmM0LAotMHhjZGUwMDA0NCwKLTB4OWIwMDAwMGIsCi0weDdjNDE4MDAwLAotMHhjYzAwMDA0YiwKLTB4Y2RhMDAwNDksCi0weGNkMjAwMDQxLAotMHhjZDYwMDA0MSwKLTB4Y2RhMDAwNDEsCi0weDA2MjAwMDAxLAotMHhjZTAwMDA1NiwKLTB4ODAwMDAyNjEsCi0weGNjMDAwMDdmLAotMHhjODI4MDAyMCwKLTB4YzgyYzAwMjEsCi0weGNjMDAwMDYzLAotMHg3ZWVhNDAwMSwKLTB4NjU3NDAwMjAsCi0weDdmNTM0MDJjLAotMHgyNjljMDAwMiwKLTB4N2RmNWMwMjAsCi0weDY5ZjgwMDIwLAotMHhjZTgwMDA0YiwKLTB4Y2U2MDAwNDksCi0weGNkZTAwMDQxLAotMHhjZmEwMDA0MSwKLTB4Y2U2MDAwNDEsCi0weDI3MWMwMDAyLAotMHg3ZGY1YzAyMCwKLTB4NjlmODAwMjAsCi0weDdkYjI0MDAxLAotMHhjZjAwMDA0YiwKLTB4Y2U2MDAwNDksCi0weGNkZTAwMDQxLAotMHhjZmEwMDA0MSwKLTB4ODAwMDAwYmQsCi0weGNlNjAwMDQxLAotMHhjODIwMDAxNywKLTB4YzgzMDAwMjIsCi0weDlhMDAwMDA2LAotMHgwZTI4MDAwMSwKLTB4YzgyNDAwMWUsCi0weDBhNjQwMDAxLAotMHhkNDAwMTI0MCwKLTB4Y2U0MDAwNDAsCi0weGNhMGMwMDEwLAotMHg3YzQxMDAwMCwKLTB4OTRjMDAwMGIsCi0weGMwMzZjMDAwLAotMHg5NjgwMDAwNywKLTB4Mzc3NDc5MDAsCi0weDA0MWMwMDAxLAotMHhjZjQwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNmMDAwM2ZhLAotMHg3YzAzMDAwMCwKLTB4ODAwMDAwYjYsCi0weDdjNDE0MDAwLAotMHhjYzAwMDA0OCwKLTB4ODAwMDAwZWYsCi0weDAwMDAwMDAwLAotMHhjODIwMDAxNywKLTB4YzgxYzAwMjMsCi0weDBlMjQwMDAyLAotMHg5OWMwMDAxNSwKLTB4N2M0MTgwMDAsCi0weDBhMjAwMDAxLAotMHhjZTAwMDA1NiwKLTB4ZDQwMDA0NDAsCi0weGNjMDAwMDQwLAotMHhjMDM2YzAwMCwKLTB4Y2ExNDAwMTMsCi0weDk2NDAwMDA3LAotMHgzNzc0NzkwMCwKLTB4Y2Y0MDAwNDAsCi0weGNjMDAwMDQwLAotMHhjODMwMDNmYSwKLTB4ODAwMDAxMDQsCi0weGNmMDAwMDIyLAotMHhjYzAwMDAyMiwKLTB4OTU0MDAxNWQsCi0weGNjMDAwMDdmLAotMHhjY2EwMDA0NiwKLTB4ODAwMDAwMDAsCi0weGNjMjAwMDQ2LAotMHg4MDAwMDI2MSwKLTB4Y2MwMDAwNjQsCi0weGM4MjAwMDE3LAotMHhjODEwMDAxZiwKLTB4OTYwMDAwMDUsCi0weDA5MTAwMDAxLAotMHhkNDAwMDQ0MCwKLTB4Y2QwMDAwNDAsCi0weGNkMDAwMDIyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weGM4MGMwMDI1LAotMHg5NGMwZmVlYiwKLTB4YzgxMDAwMDgsCi0weGNkMDAwMDQwLAotMHhkNDAwMGZjMCwKLTB4ODAwMDAwMDAsCi0weGQ0MDAwZmEyLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weGNjYzAwM2ZkLAotMHhjZDAwMDNmYywKLTB4Y2NjMDAwNDIsCi0weGNkMDAwMDQyLAotMHgyOTE0MDAxZiwKLTB4MjkxODAwMTAsCi0weDMxOTgwMDA3LAotMHgzYjVjMDAwMSwKLTB4N2Q3NjAwMGIsCi0weDk5ODAwMDA1LAotMHg3ZDVlNDAwYiwKLTB4Y2MwMDAwNDIsCi0weDgwMDAwMjYxLAotMHhjYzAwMDA0ZCwKLTB4Mjk5ODAwMDEsCi0weDI5MmMwMDA4LAotMHg5OTgwMDAzZCwKLTB4MzJlYzAwMDEsCi0weDk2MDAwMDA0LAotMHgyOTMwMDAwYywKLTB4ODAwMDAyNjEsCi0weGNjMDAwMDQyLAotMHgwNDE0MDAxMCwKLTB4Y2Q0MDAwNDIsCi0weDMzMzAwMDAxLAotMHgzNDI4MDAwMSwKLTB4ODQwMDAxNWUsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxYiwKLTB4MDQzODAwMGMsCi0weDg0MDAwMTVlLAotMHhjODE0MDAwMywKLTB4OWI0MDAwMTcsCi0weDA0MzgwMDA4LAotMHg4NDAwMDE1ZSwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDEzLAotMHgwNDM4MDAwNCwKLTB4ODQwMDAxNWUsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxNSwKLTB4YzgwYzAzZmQsCi0weDlhODAwMDA5LAotMHhjODEwMDNmYywKLTB4OWIwMDAxMTgsCi0weGNjMDAwMDRkLAotMHgwNDE0MDAxMCwKLTB4Y2NjMDAwNDIsCi0weGNkMDAwMDQyLAotMHg4MDAwMDEzNiwKLTB4Y2Q0MDAwNDIsCi0weDk2YzAwMTExLAotMHhjYzAwMDA0ZCwKLTB4ODAwMDAyNjEsCi0weGNjMDAwMDRlLAotMHg5YWMwMDAwMywKLTB4Y2MwMDAwNGQsCi0weGNjMDAwMDRlLAotMHhkZjgzMDAwMCwKLTB4ODAwMDAwMDAsCi0weGQ4MDMwMWZmLAotMHg5YWMwMDEwNywKLTB4Y2MwMDAwNGQsCi0weDgwMDAwMjYxLAotMHhjYzAwMDA0ZSwKLTB4YzgxODAwMDMsCi0weGM4MWMwMDAzLAotMHhjODIwMDAwMywKLTB4N2Q1ZDQwMDMsCi0weDdkYTFjMDAzLAotMHg3ZDVkNDAwYywKLTB4MmExMDAwMWYsCi0weDI5OWMwMDFmLAotMHg3ZDFkMDAwYiwKLTB4N2QxNzQwMGIsCi0weDg4MDAwMDAwLAotMHg3ZTkyODAwYiwKLTB4OTY0MDAwMDQsCi0weGNjMDAwMDRlLAotMHg4MDAwMDI2MSwKLTB4Y2MwMDAwNDIsCi0weDA0MzgwMDA4LAotMHhjZjgwMDA0MiwKLTB4YzgwODAwMDMsCi0weGM4MGMwMDAzLAotMHhjODEwMDAwMywKLTB4YzgxNDAwMDMsCi0weGM4MTgwMDAzLAotMHhjODFjMDAwMywKLTB4YzgyNDAwMDMsCi0weGM4MjgwMDAzLAotMHgyOWZjMDAxZiwKLTB4MmFiMDAwMWYsCi0weDdmZjNjMDBiLAotMHgyOGYwMDAxZiwKLTB4N2ZmM2MwMGIsCi0weDI5NzAwMDFmLAotMHg3ZmYzYzAwYiwKLTB4N2Q4ODgwMDEsCi0weDdkY2NjMDAxLAotMHg3ZTUxMDAwMSwKLTB4N2U5NTQwMDEsCi0weDdjOTA4MDAyLAotMHg3Y2Q0YzAwMiwKLTB4N2NiYzgwMGIsCi0weDlhYzAwMDAzLAotMHg3YzhmNDAwYiwKLTB4MzhiNDAwMDEsCi0weDliNDAwMGQ4LAotMHhjYzAwMDA0ZCwKLTB4OWJjMDAwZDYsCi0weGNjMDAwMDRlLAotMHhjODBjMDNmZCwKLTB4YzgxMDAzZmMsCi0weGNjYzAwMDQyLAotMHg4MDAwMDE2ZiwKLTB4Y2QwMDAwNDIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhjYzQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weGNjNDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2NjMDAwNDAsCi0weGNjYzAwMDBkLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwNDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4NjUxNDAwMjAsCi0weDdkNGQ0MDJjLAotMHgyNDU4MDAwMiwKLTB4N2Q1OTgwMjAsCi0weDdjNDFjMDAwLAotMHhjZDgwMDA0MiwKLTB4Njk5ODAwMjAsCi0weGNkODAwMDQyLAotMHhjZGMwMDA0MiwKLTB4YzAyM2MwMDAsCi0weDA1ZTQwMDAyLAotMHg3Y2EwODAwYiwKLTB4MjY2NDAwMTAsCi0weDdjYTQ4MDBjLAotMHhjYzgwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNjYzAwMDQwLAotMHg5NWMwMDAwZSwKLTB4Y2QwMDAwNDAsCi0weDA5ZGMwMDAxLAotMHhjODI4MDAwMywKLTB4OTY4MDAwMDgsCi0weGNlODAwMDQwLAotMHhjODM0MDAxZCwKLTB4OTc0MDAwMDAsCi0weGM4MzQwMDFkLAotMHgyNmE4MDAwOCwKLTB4ODQwMDAyNjQsCi0weGNjMmIwMDAwLAotMHg5OWMwZmZmNywKLTB4MDlkYzAwMDEsCi0weGRjM2EwMDAwLAotMHg5NzgwMDAwNCwKLTB4N2M0MTgwMDAsCi0weDgwMDAwMWEzLAotMHgyNTk4MDAwMiwKLTB4YTAwMDAwMDAsCi0weDdkODA4MDAwLAotMHhjODE4MDAxZCwKLTB4N2M0MGMwMDAsCi0weDY0ZDAwMDA4LAotMHg5NTgwMDAwMCwKLTB4YzgxODAwMWQsCi0weGNjMTMwMDAwLAotMHhjYzgwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weDgwMDAwMDAwLAotMHhjYzQwMDA0MCwKLTB4YzgxMDAwMWYsCi0weDdjNDBjMDAwLAotMHhjYzgwMDA0MCwKLTB4N2NkMTQwMGMsCi0weGNkNDAwMDQwLAotMHgwNTE4MDAwMSwKLTB4ODAwMDAwMDAsCi0weGNkODAwMDIyLAotMHg3YzQwYzAwMCwKLTB4NjQ1MDAwMjAsCi0weDg0MDAwMjY0LAotMHhjYzAwMDA2MSwKLTB4N2NkMGMwMmMsCi0weGM4MjAwMDE3LAotMHhjOGQ2MDAwMCwKLTB4OTk0MDAwMDgsCi0weDdjNDM4MDAwLAotMHhkZjgzMDAwMCwKLTB4Y2ZhMDAwNGYsCi0weDg0MDAwMjY0LAotMHhjYzAwMDA2MiwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDdmLAotMHg4MDAwMDI2MSwKLTB4Y2MwMDAwNjIsCi0weDg0MDAwMjY0LAotMHhjYzAwMDA2MSwKLTB4YzgyMDAwMTcsCi0weDdjNDBjMDAwLAotMHhjMDM2ZmYwMCwKLTB4YzgxMDAwMGQsCi0weGMwMzAzZmZmLAotMHg3Y2Y1NDAwYiwKLTB4N2Q1MTgwMGIsCi0weDdkODE4MDBmLAotMHg5OTgwMDAwOCwKLTB4N2NmMzgwMGIsCi0weGRmODMwMDAwLAotMHhjZmEwMDA0ZiwKLTB4ODQwMDAyNjQsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMjYxLAotMHhjYzAwMDA2MiwKLTB4ODQwMDAyNjQsCi0weDdjNDBjMDAwLAotMHgyOGRjMDAwOCwKLTB4OTVjMDAwMTksCi0weDMwZGMwMDEwLAotMHg3YzQxMDAwMCwKLTB4OTljMDAwMDQsCi0weDY0NTQwMDIwLAotMHg4MDAwMDIwOSwKLTB4YzkxZDAwMDAsCi0weDdkMTUwMDJjLAotMHhjOTFlMDAwMCwKLTB4N2M0MjAwMDAsCi0weDdjNDI0MDAwLAotMHg3YzQxODAwMCwKLTB4N2RlNWMwMGIsCi0weDdkZTI4MDA3LAotMHg5YTgwMDAwZSwKLTB4NDFhYzAwMDUsCi0weDlhYzAwMDAwLAotMHgwYWVjMDAwMSwKLTB4MzBkYzAwMTAsCi0weDk5YzAwMDA0LAotMHgwMDAwMDAwMCwKLTB4ODAwMDAyMGMsCi0weGM5MWQwMDAwLAotMHg4MDAwMDIwYywKLTB4YzkxZTAwMDAsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weGM4MGMwMDI1LAotMHg5NGMwZmRlMywKLTB4YzgxMDAwMDgsCi0weGNkMDAwMDQwLAotMHhkNDAwMGZjMCwKLTB4ODAwMDAwMDAsCi0weGQ0MDAwZmEyLAotMHhkNDAwMDM0MCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4N2M0MGMwMDAsCi0weDMwZDAwMDA2LAotMHgwZDEwMDAwNiwKLTB4OTkwMDAwMDcsCi0weGM4MTQwMDE1LAotMHg5OTQwMDAwNSwKLTB4Y2MwMDAwNTIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2M0ZDAwMDAsCi0weGRjM2EwMDAwLAotMHg5NzgwZmRiYywKLTB4MDRjYzAwMDEsCi0weDgwMDAwMjQzLAotMHhjYzRkMDAwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHgyOTI0MDAxOCwKLTB4MzI2NDAwMDEsCi0weDk2NDAwMDBmLAotMHhjYzgwMDA0MCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHg3YzQxYzAwMCwKLTB4Y2NjMDAwNDMsCi0weGNkMDAwMDQzLAotMHgzMWRjN2ZmZiwKLTB4Y2RjMDAwNDMsCi0weGNjYzAwMDQwLAotMHhjZDAwMDA0MCwKLTB4Y2Q0MDAwNDAsCi0weGNkODAwMDQwLAotMHg4MDAwMDAwMCwKLTB4Y2RjMDAwNDAsCi0weGNjYzAwMDQwLAotMHhjZDAwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDQwLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weGNjMDAwMDdmLAotMHg4MDAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weGNjMDAwMDdmLAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDMwMjIzLAotMHgwMDA0MDIyYiwKLTB4MDAwNTAwYTAsCi0weDAwMDIwMDAzLAotMHgwMDA2MDAzYywKLTB4MDAwNzAwMjcsCi0weDAwMDgwMTkyLAotMHgwMDA5MDA0NCwKLTB4MDAwYTAwMmQsCi0weDAwMTAwMjVmLAotMHgwMDE3MDBmMSwKLTB4MDAyMjAxZDgsCi0weDAwMjMwMWU5LAotMHgwMDI2MDA0YywKLTB4MDAyNzAwNWYsCi0weDAwMjAwMTFiLAotMHgwMDI4MDA5MywKLTB4MDAyOTAwNGYsCi0weDAwMmEwMDg0LAotMHgwMDJiMDA2NSwKLTB4MDAyZjAwOGUsCi0weDAwMzIwMGQ5LAotMHgwMDM0MDIzMywKLTB4MDAzNjAwNzUsCi0weDAwMzkwMTBiLAotMHgwMDNjMDFmZCwKLTB4MDAzZjAwYTAsCi0weDAwNDEwMjQ4LAotMHgwMDQ0MDE5NSwKLTB4MDA0ODAxOWUsCi0weDAwNDkwMWM2LAotMHgwMDRhMDFkMCwKLTB4MDA1NTAyMjYsCi0weDAwNTYwMjJlLAotMHgwMDYwMDAwYSwKLTB4MDA2MTAwMmEsCi0weDAwNjIwMDMwLAotMHgwMDYzMDAzMCwKLTB4MDA2NDAwMzAsCi0weDAwNjUwMDMwLAotMHgwMDY2MDAzMCwKLTB4MDA2NzAwMzAsCi0weDAwNjgwMDM3LAotMHgwMDY5MDAzZiwKLTB4MDA2YTAwNDcsCi0weDAwNmIwMDQ3LAotMHgwMDZjMDA0NywKLTB4MDA2ZDAwNDcsCi0weDAwNmUwMDQ3LAotMHgwMDZmMDA0NywKLTB4MDA3MDAwNDcsCi0weDAwNzMwMjVmLAotMHgwMDdiMDI0MSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY3MzBfcGZwX21pY3JvY29kZVtdID0gewotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHg4MDAwMDAwMCwKLTB4ZGMwMzAwMDAsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4YzgxODAwMGUsCi0weDMxOTgwMDAxLAotMHg3YzQyNDAwMCwKLTB4OTU4MDAyM2EsCi0weDdjNDI4MDAwLAotMHhjODFjMDAxYywKLTB4YzAzN2MwMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2NiNDgwMGIsCi0weGMwMzYwMDAzLAotMHg5OWMwMDAwMCwKLTB4YzgxYzAwMWMsCi0weDdjYjQ4MDBjLAotMHgyNGQ0MDAwMiwKLTB4N2Q2NTQwMDAsCi0weGNkNDAwMDQzLAotMHhjZTgwMDA0MywKLTB4Y2QwMDAwNDMsCi0weGNjODAwMDQwLAotMHhjZTQwMDA0MCwKLTB4Y2U4MDAwNDAsCi0weGNjYzAwMDQwLAotMHhkYzNhMDAwMCwKLTB4OTc4MGZmZGUsCi0weGNkMDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4ODAwMDAwMTgsCi0weDdjNDEwMDAwLAotMHhkNDAwMDM0MCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjODE4MDAwZSwKLTB4ODAwMDAwMGMsCi0weDMxOTgwMDAyLAotMHhkNDAwMDNjMCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjODE4MDAwZSwKLTB4Mjg4YzAwMDgsCi0weDMwY2MwMDBmLAotMHgzNDEwMDAwMSwKLTB4N2QwZDAwMDgsCi0weDgwMDAwMDBjLAotMHg3ZDkxODAwYiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhkNDAwMDM0MCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4Y2M0MDAzZjksCi0weDgwMDAwMjQ5LAotMHhjYzQwMDNmOCwKLTB4YzAzN2ZmZmYsCi0weDdjNDE0MDAwLAotMHhjZjQxYTI5ZSwKLTB4YzgyMDAzZjgsCi0weGM4MWMwM2Y5LAotMHg2NjIwMDAyMCwKLTB4YzgxODAzZmIsCi0weDdkZTFjMDJjLAotMHg3ZDU4YzAwOCwKLTB4N2NkY2MwMjAsCi0weDY5MTAwMDIwLAotMHhjMDM2MDAwMywKLTB4Y2MwMDAwNTQsCi0weDdjYjQ4MDBjLAotMHg4MDAwMDA2OSwKLTB4Y2M4MDAwNDAsCi0weDdjNDE4MDAwLAotMHhjZDgxYTI5ZSwKLTB4Y2M4MDAwNDAsCi0weDgwMDAwMDY3LAotMHhjZDgwMDA0MCwKLTB4YzAxOWZmZmYsCi0weGNjODAwMDQwLAotMHhjZDgxYTI5ZSwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4Y2NjMWExZmEsCi0weGNkMDFhMWY5LAotMHhjZDQxYTI5ZCwKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHhjZDQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGNjMDAwMDU0LAotMHhjYzgwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4Y2NjMWExZmEsCi0weGNkMDFhMWY5LAotMHhjZDQxYTI5ZCwKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHhjZDQwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weDdjNDBjMDAwLAotMHgzMGQwMDAwMSwKLTB4Y2NjMWEyOWYsCi0weDk1MDAwMDAzLAotMHgwNDE0MDAwMSwKLTB4MDQxNDAwMDIsCi0weGNkNDAwM2ZiLAotMHhjYzgwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGNjYzAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2M4MDAwNDAsCi0weGNjYzFhMmEyLAotMHg4MDAwMDAwMCwKLTB4Y2NjMDAwNDAsCi0weDdjNDBjMDAwLAotMHgyOGQ0MDAxZiwKLTB4Y2M4MDAwNDAsCi0weDk1NDAwMDAzLAotMHg3YzQxMDAwMCwKLTB4Y2NjMDAwNTcsCi0weDI5MTgwMDFmLAotMHhjY2MwMDA0MCwKLTB4OTU4MDAwMDMsCi0weGNkMDAwMDQwLAotMHhjZDAwMDA1OCwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDdmLAotMHhjODIwMDAxNywKLTB4YzgzMDAwMjIsCi0weDlhMDAwMDA2LAotMHgwZTI4MDAwMSwKLTB4YzgyNDAwMWUsCi0weDBhNjQwMDAxLAotMHhkNDAwMTI0MCwKLTB4Y2U0MDAwNDAsCi0weGMwMzZjMDAwLAotMHg5NjgwMDAwNywKLTB4Mzc3NDc5MDAsCi0weDA0MWMwMDAxLAotMHhjZjQwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNmMDAwM2ZhLAotMHg3YzAzMDAwMCwKLTB4Y2EwYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5NGMwMDAwNCwKLTB4N2M0MTQwMDAsCi0weGQ0MjAwMmM0LAotMHhjZGUwMDA0NCwKLTB4OWIwMDAwMGIsCi0weDdjNDE4MDAwLAotMHhjYzAwMDA0YiwKLTB4Y2RhMDAwNDksCi0weGNkMjAwMDQxLAotMHhjZDYwMDA0MSwKLTB4Y2RhMDAwNDEsCi0weDA2MjAwMDAxLAotMHhjZTAwMDA1NiwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDdmLAotMHhjODI4MDAyMCwKLTB4YzgyYzAwMjEsCi0weGNjMDAwMDYzLAotMHg3ZWVhNDAwMSwKLTB4NjU3NDAwMjAsCi0weDdmNTM0MDJjLAotMHgyNjljMDAwMiwKLTB4N2RmNWMwMjAsCi0weDY5ZjgwMDIwLAotMHhjZTgwMDA0YiwKLTB4Y2U2MDAwNDksCi0weGNkZTAwMDQxLAotMHhjZmEwMDA0MSwKLTB4Y2U2MDAwNDEsCi0weDI3MWMwMDAyLAotMHg3ZGY1YzAyMCwKLTB4NjlmODAwMjAsCi0weDdkYjI0MDAxLAotMHhjZjAwMDA0YiwKLTB4Y2U2MDAwNDksCi0weGNkZTAwMDQxLAotMHhjZmEwMDA0MSwKLTB4ODAwMDAwYmMsCi0weGNlNjAwMDQxLAotMHhjODIwMDAxNywKLTB4YzgzMDAwMjIsCi0weDlhMDAwMDA2LAotMHgwZTI4MDAwMSwKLTB4YzgyNDAwMWUsCi0weDBhNjQwMDAxLAotMHhkNDAwMTI0MCwKLTB4Y2U0MDAwNDAsCi0weGNhMGMwMDEwLAotMHg3YzQxMDAwMCwKLTB4OTRjMDAwMGIsCi0weGMwMzZjMDAwLAotMHg5NjgwMDAwNywKLTB4Mzc3NDc5MDAsCi0weDA0MWMwMDAxLAotMHhjZjQwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNmMDAwM2ZhLAotMHg3YzAzMDAwMCwKLTB4ODAwMDAwYjUsCi0weDdjNDE0MDAwLAotMHhjYzAwMDA0OCwKLTB4ODAwMDAwZWUsCi0weDAwMDAwMDAwLAotMHhjODIwMDAxNywKLTB4YzgxYzAwMjMsCi0weDBlMjQwMDAyLAotMHg5OWMwMDAxNSwKLTB4N2M0MTgwMDAsCi0weDBhMjAwMDAxLAotMHhjZTAwMDA1NiwKLTB4ZDQwMDA0NDAsCi0weGNjMDAwMDQwLAotMHhjMDM2YzAwMCwKLTB4Y2ExNDAwMTMsCi0weDk2NDAwMDA3LAotMHgzNzc0NzkwMCwKLTB4Y2Y0MDAwNDAsCi0weGNjMDAwMDQwLAotMHhjODMwMDNmYSwKLTB4ODAwMDAxMDMsCi0weGNmMDAwMDIyLAotMHhjYzAwMDAyMiwKLTB4OTU0MDAxNDYsCi0weGNjMDAwMDdmLAotMHhjY2EwMDA0NiwKLTB4ODAwMDAwMDAsCi0weGNjMjAwMDQ2LAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNjQsCi0weGM4MjAwMDE3LAotMHhjODEwMDAxZiwKLTB4OTYwMDAwMDUsCi0weDA5MTAwMDAxLAotMHhkNDAwMDQ0MCwKLTB4Y2QwMDAwNDAsCi0weGNkMDAwMDIyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weGM4MGMwMDI1LAotMHg5NGMwZmVlYywKLTB4YzgxMDAwMDgsCi0weGNkMDAwMDQwLAotMHhkNDAwMGZjMCwKLTB4ODAwMDAwMDAsCi0weGQ0MDAwZmEyLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weGNjYzAwM2ZkLAotMHhjZDAwMDNmYywKLTB4Y2NjMDAwNDIsCi0weGNkMDAwMDQyLAotMHgyOTE0MDAxZiwKLTB4MjkxODAwMTAsCi0weDMxOTgwMDA3LAotMHgzYjVjMDAwMSwKLTB4N2Q3NjAwMGIsCi0weDk5ODAwMDA1LAotMHg3ZDVlNDAwYiwKLTB4Y2MwMDAwNDIsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA0ZCwKLTB4Mjk5ODAwMDEsCi0weDI5MmMwMDA4LAotMHg5OTgwMDAzZCwKLTB4MzJlYzAwMDEsCi0weDk2MDAwMDA0LAotMHgyOTMwMDAwYywKLTB4ODAwMDAyNDksCi0weGNjMDAwMDQyLAotMHgwNDE0MDAxMCwKLTB4Y2Q0MDAwNDIsCi0weDMzMzAwMDAxLAotMHgzNDI4MDAwMSwKLTB4ODQwMDAxNWQsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxYiwKLTB4MDQzODAwMGMsCi0weDg0MDAwMTVkLAotMHhjODE0MDAwMywKLTB4OWI0MDAwMTcsCi0weDA0MzgwMDA4LAotMHg4NDAwMDE1ZCwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDEzLAotMHgwNDM4MDAwNCwKLTB4ODQwMDAxNWQsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxNSwKLTB4YzgwYzAzZmQsCi0weDlhODAwMDA5LAotMHhjODEwMDNmYywKLTB4OWIwMDAxMDEsCi0weGNjMDAwMDRkLAotMHgwNDE0MDAxMCwKLTB4Y2NjMDAwNDIsCi0weGNkMDAwMDQyLAotMHg4MDAwMDEzNSwKLTB4Y2Q0MDAwNDIsCi0weDk2YzAwMGZhLAotMHhjYzAwMDA0ZCwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDRlLAotMHg5YWMwMDAwMywKLTB4Y2MwMDAwNGQsCi0weGNjMDAwMDRlLAotMHhkZjgzMDAwMCwKLTB4ODAwMDAwMDAsCi0weGQ4MDMwMWZmLAotMHg5YWMwMDBmMCwKLTB4Y2MwMDAwNGQsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA0ZSwKLTB4YzgxODAwMDMsCi0weGM4MWMwMDAzLAotMHhjODIwMDAwMywKLTB4N2Q1ZDQwMDMsCi0weDdkYTFjMDAzLAotMHg3ZDVkNDAwYywKLTB4MmExMDAwMWYsCi0weDI5OWMwMDFmLAotMHg3ZDFkMDAwYiwKLTB4N2QxNzQwMGIsCi0weDg4MDAwMDAwLAotMHg3ZTkyODAwYiwKLTB4OTY0MDAwMDQsCi0weGNjMDAwMDRlLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNDIsCi0weDA0MzgwMDA4LAotMHhjZjgwMDA0MiwKLTB4YzgwODAwMDMsCi0weGM4MGMwMDAzLAotMHhjODEwMDAwMywKLTB4YzgxNDAwMDMsCi0weGM4MTgwMDAzLAotMHhjODFjMDAwMywKLTB4YzgyNDAwMDMsCi0weGM4MjgwMDAzLAotMHgyOWZjMDAxZiwKLTB4MmFiMDAwMWYsCi0weDdmZjNjMDBiLAotMHgyOGYwMDAxZiwKLTB4N2ZmM2MwMGIsCi0weDI5NzAwMDFmLAotMHg3ZmYzYzAwYiwKLTB4N2Q4ODgwMDEsCi0weDdkY2NjMDAxLAotMHg3ZTUxMDAwMSwKLTB4N2U5NTQwMDEsCi0weDdjOTA4MDAyLAotMHg3Y2Q0YzAwMiwKLTB4N2NiYzgwMGIsCi0weDlhYzAwMDAzLAotMHg3YzhmNDAwYiwKLTB4MzhiNDAwMDEsCi0weDliNDAwMGMxLAotMHhjYzAwMDA0ZCwKLTB4OWJjMDAwYmYsCi0weGNjMDAwMDRlLAotMHhjODBjMDNmZCwKLTB4YzgxMDAzZmMsCi0weGNjYzAwMDQyLAotMHg4MDAwMDE2ZSwKLTB4Y2QwMDAwNDIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhjYzQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weGNjNDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2NjMDAwNDAsCi0weGNjYzAwMDBkLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwNDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4NjUxNDAwMjAsCi0weDdkNGQ0MDJjLAotMHgyNDU4MDAwMiwKLTB4N2Q1OTgwMjAsCi0weDdjNDFjMDAwLAotMHhjZDgwMDA0MiwKLTB4Njk5ODAwMjAsCi0weGNkODAwMDQyLAotMHhjZGMwMDA0MiwKLTB4YzAyM2MwMDAsCi0weDA1ZTQwMDAyLAotMHg3Y2EwODAwYiwKLTB4MjY2NDAwMTAsCi0weDdjYTQ4MDBjLAotMHhjYzgwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNjYzAwMDQwLAotMHg5NWMwMDAwZSwKLTB4Y2QwMDAwNDAsCi0weDA5ZGMwMDAxLAotMHhjODI4MDAwMywKLTB4OTY4MDAwMDgsCi0weGNlODAwMDQwLAotMHhjODM0MDAxZCwKLTB4OTc0MDAwMDAsCi0weGM4MzQwMDFkLAotMHgyNmE4MDAwOCwKLTB4ODQwMDAyNGMsCi0weGNjMmIwMDAwLAotMHg5OWMwZmZmNywKLTB4MDlkYzAwMDEsCi0weGRjM2EwMDAwLAotMHg5NzgwMDAwNCwKLTB4N2M0MTgwMDAsCi0weDgwMDAwMWEyLAotMHgyNTk4MDAwMiwKLTB4YTAwMDAwMDAsCi0weDdkODA4MDAwLAotMHhjODE4MDAxZCwKLTB4N2M0MGMwMDAsCi0weDY0ZDAwMDA4LAotMHg5NTgwMDAwMCwKLTB4YzgxODAwMWQsCi0weGNjMTMwMDAwLAotMHhjYzgwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weDgwMDAwMDAwLAotMHhjYzQwMDA0MCwKLTB4YzgxMDAwMWYsCi0weDdjNDBjMDAwLAotMHhjYzgwMDA0MCwKLTB4N2NkMTQwMGMsCi0weGNkNDAwMDQwLAotMHgwNTE4MDAwMSwKLTB4ODAwMDAwMDAsCi0weGNkODAwMDIyLAotMHg3YzQwYzAwMCwKLTB4NjQ1MDAwMjAsCi0weDg0MDAwMjRjLAotMHhjYzAwMDA2MSwKLTB4N2NkMGMwMmMsCi0weGM4MjAwMDE3LAotMHhjOGQ2MDAwMCwKLTB4OTk0MDAwMDgsCi0weDdjNDM4MDAwLAotMHhkZjgzMDAwMCwKLTB4Y2ZhMDAwNGYsCi0weDg0MDAwMjRjLAotMHhjYzAwMDA2MiwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDdmLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNjIsCi0weDg0MDAwMjRjLAotMHhjYzAwMDA2MSwKLTB4YzgyMDAwMTcsCi0weDdjNDBjMDAwLAotMHhjMDM2ZmYwMCwKLTB4YzgxMDAwMGQsCi0weGMwMzAzZmZmLAotMHg3Y2Y1NDAwYiwKLTB4N2Q1MTgwMGIsCi0weDdkODE4MDBmLAotMHg5OTgwMDAwOCwKLTB4N2NmMzgwMGIsCi0weGRmODMwMDAwLAotMHhjZmEwMDA0ZiwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA2MiwKLTB4ODQwMDAyNGMsCi0weDdjNDBjMDAwLAotMHgyOGRjMDAwOCwKLTB4OTVjMDAwMTksCi0weDMwZGMwMDEwLAotMHg3YzQxMDAwMCwKLTB4OTljMDAwMDQsCi0weDY0NTQwMDIwLAotMHg4MDAwMDIwOCwKLTB4YzkxZDAwMDAsCi0weDdkMTUwMDJjLAotMHhjOTFlMDAwMCwKLTB4N2M0MjAwMDAsCi0weDdjNDI0MDAwLAotMHg3YzQxODAwMCwKLTB4N2RlNWMwMGIsCi0weDdkZTI4MDA3LAotMHg5YTgwMDAwZSwKLTB4NDFhYzAwMDUsCi0weDlhYzAwMDAwLAotMHgwYWVjMDAwMSwKLTB4MzBkYzAwMTAsCi0weDk5YzAwMDA0LAotMHgwMDAwMDAwMCwKLTB4ODAwMDAyMGIsCi0weGM5MWQwMDAwLAotMHg4MDAwMDIwYiwKLTB4YzkxZTAwMDAsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weGM4MGMwMDI1LAotMHg5NGMwZmRlNCwKLTB4YzgxMDAwMDgsCi0weGNkMDAwMDQwLAotMHhkNDAwMGZjMCwKLTB4ODAwMDAwMDAsCi0weGQ0MDAwZmEyLAotMHhkNDAwMDM0MCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4N2M0MGMwMDAsCi0weDMwZDAwMDA2LAotMHgwZDEwMDAwNiwKLTB4OTkwMDAwMDcsCi0weGM4MTQwMDE1LAotMHg5OTQwMDAwNSwKLTB4Y2MwMDAwNTIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2M0ZDAwMDAsCi0weGRjM2EwMDAwLAotMHg5NzgwZmRiZCwKLTB4MDRjYzAwMDEsCi0weDgwMDAwMjQyLAotMHhjYzRkMDAwMCwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODAwMDAwMDAsCi0weGNjMDAwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAzMDIyMiwKLTB4MDAwNDAyMmEsCi0weDAwMDUwMDlmLAotMHgwMDAyMDAwMywKLTB4MDAwNjAwM2MsCi0weDAwMDcwMDI3LAotMHgwMDA4MDE5MSwKLTB4MDAwOTAwNDQsCi0weDAwMGEwMDJkLAotMHgwMDEwMDI0NywKLTB4MDAxNzAwZjAsCi0weDAwMjIwMWQ3LAotMHgwMDIzMDFlOCwKLTB4MDAyNjAwNGMsCi0weDAwMjcwMDVmLAotMHgwMDIwMDExYSwKLTB4MDAyODAwOTIsCi0weDAwMjkwMDRmLAotMHgwMDJhMDA4MywKLTB4MDAyYjAwNjQsCi0weDAwMmYwMDhkLAotMHgwMDMyMDBkOCwKLTB4MDAzNDAyMzIsCi0weDAwMzYwMDc0LAotMHgwMDM5MDEwYSwKLTB4MDAzYzAxZmMsCi0weDAwM2YwMDlmLAotMHgwMDQxMDAwNSwKLTB4MDA0NDAxOTQsCi0weDAwNDgwMTlkLAotMHgwMDQ5MDFjNSwKLTB4MDA0YTAxY2YsCi0weDAwNTUwMjI1LAotMHgwMDU2MDIyZCwKLTB4MDA2MDAwMGEsCi0weDAwNjEwMDJhLAotMHgwMDYyMDAzMCwKLTB4MDA2MzAwMzAsCi0weDAwNjQwMDMwLAotMHgwMDY1MDAzMCwKLTB4MDA2NjAwMzAsCi0weDAwNjcwMDMwLAotMHgwMDY4MDAzNywKLTB4MDA2OTAwM2YsCi0weDAwNmEwMDQ3LAotMHgwMDZiMDA0NywKLTB4MDA2YzAwNDcsCi0weDAwNmQwMDQ3LAotMHgwMDZlMDA0NywKLTB4MDA2ZjAwNDcsCi0weDAwNzAwMDQ3LAotMHgwMDczMDI0NywKLTB4MDA3YjAyNDAsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNzMwX2NwX21pY3JvY29kZVtdID0gewotMHhjYzAwMDNlYSwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAwMDEsCi0weGQwNDAwMDdmLAotMHg4MDAwMDAwMSwKLTB4Y2M0MDAwNDEsCi0weDdjNDBjMDAwLAotMHhjMDE2MDAwNCwKLTB4MzBkMDNmZmYsCi0weDdkMTUwMDBjLAotMHhjYzExMDAwMCwKLTB4MjhkODAwMWUsCi0weDMxOTgwMDAxLAotMHgyOGRjMDAxZiwKLTB4YzgyMDAwMDQsCi0weDk1YzAwMDA2LAotMHg3YzQyNDAwMCwKLTB4Y2MwMDAwNjIsCi0weDdlNTY4MDBjLAotMHhjYzI5MDAwMCwKLTB4YzgyNDAwMDQsCi0weDdlMjYwMDBiLAotMHg5NTgwMDAwNiwKLTB4N2M0MmMwMDAsCi0weGNjMDAwMDYyLAotMHg3ZWQ3MDAwYywKLTB4Y2MzMTAwMDAsCi0weGM4MmMwMDA0LAotMHg3ZTJlMDAwYywKLTB4Y2MwMDAwNjIsCi0weDMxMTAzZmZmLAotMHg4MDAwMDAwMSwKLTB4Y2UxMTAwMDAsCi0weDdjNDBjMDAwLAotMHg4MDAwMDAwMSwKLTB4Y2M0MDAwNDAsCi0weDgwMDAwMDAxLAotMHhjYzQxMjI1NywKLTB4N2M0MTgwMDAsCi0weGNjNDAwMDQ1LAotMHhjYzQwMDA0OCwKLTB4Y2M0MTIyNWMsCi0weGNjNDFhMWZjLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhjYzQwMDA0NSwKLTB4Y2M0MDAwNDgsCi0weDdjNDBjMDAwLAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGNjMDAwMDQ1LAotMHhjYzAwMDA0OCwKLTB4Y2M0MTIyNWMsCi0weGNjNDFhMWZjLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHgwNDBjYTFmZCwKLTB4YzAxMjAwMDEsCi0weGNjMDAwMDQ1LAotMHhjYzAwMDA0OCwKLTB4N2NkMGMwMGMsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4ZDA0ZDAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDgwMDAwMDAxLAotMHhjYzQxMjI1ZCwKLTB4N2M0MDgwMDAsCi0weDdjNDBjMDAwLAotMHhjMDJhMDAwMiwKLTB4N2M0MTAwMDAsCi0weDdkMjkwMDBjLAotMHgzMDk0MDAwMSwKLTB4MzA5ODAwMDYsCi0weDMwOWMwMzAwLAotMHgyOWRjMDAwOCwKLTB4N2M0MjAwMDAsCi0weDdjNDI0MDAwLAotMHg5NTQwMDAwZiwKLTB4YzAyZTAwMDQsCi0weDA1ZjAyMjU4LAotMHg3ZjJmMDAwYywKLTB4Y2MzMTAwMDAsCi0weGM4MjgwMDA0LAotMHhjY2MxMjE2OSwKLTB4Y2QwMTIxNmEsCi0weGNlODEyMTZiLAotMHgwZGI0MDAwMiwKLTB4Y2MwMTIxNmMsCi0weDk3NDAwMDBlLAotMHgwZGI0MDAwMCwKLTB4ODAwMDAwN2IsCi0weGM4MzQwMDBhLAotMHgwZGI0MDAwMiwKLTB4OTc0MDAwMDksCi0weDBkYjQwMDAwLAotMHhjMDJlMDAwNCwKLTB4MDVmMDIyNTgsCi0weDdmMmYwMDBjLAotMHhjYzMxMDAwMCwKLTB4YzgyODAwMDQsCi0weDgwMDAwMDdiLAotMHhjODM0MDAwYSwKLTB4OTc0MDAwMDQsCi0weDdlMDI4MDAwLAotMHg4MDAwMDA3YiwKLTB4YzgzNDAwMGEsCi0weDBkYjQwMDA0LAotMHg5NzQwZmY4YywKLTB4MDAwMDAwMDAsCi0weGNlMDEyMTZkLAotMHhjZTQxMjE2ZSwKLTB4YzgyODAwMDMsCi0weGM4MzQwMDBhLAotMHg5YjQwMDAwNCwKLTB4MDQzYzAwMDUsCi0weDg0MDAwMjZiLAotMHhjYzAwMDA2MiwKLTB4MGRmNDAwMDAsCi0weDk3NDAwMDBiLAotMHhjODJjMDNlNiwKLTB4Y2U4MWEyYjcsCi0weGMwMzAwMDA2LAotMHg3ZWYzNDAyOCwKLTB4YzAzMDAwMjAsCi0weDdmNmI4MDIwLAotMHg3ZmIzYzAyOSwKLTB4Y2Y4MWEyYzQsCi0weDgwMDAwMDAxLAotMHhjZmMxYTJkMSwKLTB4MGRmNDAwMDEsCi0weDk3NDAwMDBiLAotMHhjODJjMDNlNywKLTB4Y2U4MWEyYmIsCi0weGMwMzAwMDA2LAotMHg3ZWYzNDAyOCwKLTB4YzAzMDAwMjAsCi0weDdmNmI4MDIwLAotMHg3ZmIzYzAyOSwKLTB4Y2Y4MWEyYzUsCi0weDgwMDAwMDAxLAotMHhjZmMxYTJkMiwKLTB4MGRmNDAwMDIsCi0weDk3NDAwMDBiLAotMHhjODJjMDNlOCwKLTB4Y2U4MWEyYmYsCi0weGMwMzAwMDA2LAotMHg3ZWYzNDAyOCwKLTB4YzAzMDAwMjAsCi0weDdmNmI4MDIwLAotMHg3ZmIzYzAyOSwKLTB4Y2Y4MWEyYzYsCi0weDgwMDAwMDAxLAotMHhjZmMxYTJkMywKLTB4YzgyYzAzZTksCi0weGNlODFhMmMzLAotMHhjMDMwMDAwNiwKLTB4N2VmMzQwMjgsCi0weGMwMzAwMDIwLAotMHg3ZjZiODAyMCwKLTB4N2ZiM2MwMjksCi0weGNmODFhMmM3LAotMHg4MDAwMDAwMSwKLTB4Y2ZjMWEyZDQsCi0weDgwMDAwMDAxLAotMHhjYzQwMDA0MiwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHgyOTE0MDAxZCwKLTB4MzE1NDAwMDEsCi0weDk5NDAwMDBjLAotMHgzMTE4MTAwMCwKLTB4YzgxYzAwMTEsCi0weDk1YzAwMDAwLAotMHhjODFjMDAxMSwKLTB4Y2NjMTIxMDAsCi0weGNkMDEyMTAxLAotMHhjY2MxMjEwMiwKLTB4Y2QwMTIxMDMsCi0weDA0MTgwMDA0LAotMHg4MDAwMDM3YywKLTB4Y2Q4MWEyYTQsCi0weGMwMmEwMDA0LAotMHg5NTgwMDAwOCwKLTB4MzZhODIxYTMsCi0weGNjMjkwMDAwLAotMHhjODI4MDAwNCwKLTB4YzgxYzAwMTEsCi0weDBkZTQwMDQwLAotMHg5NjQwZmZmZiwKLTB4YzgxYzAwMTEsCi0weGNjYzEyMTcwLAotMHhjZDAxMjE3MSwKLTB4YzgyMDAwMTIsCi0weDk2MDAwMDAwLAotMHhjODIwMDAxMiwKLTB4ODAwMDAzN2MsCi0weGNjMDAwMDY0LAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weGNjMDAwMDQ1LAotMHhjYzAwMDA0OCwKLTB4NDBkNDAwMDMsCi0weGNkNDEyMjVjLAotMHhjZDAxYTFmYywKLTB4YzAxYTAwMDEsCi0weDA0MWNhMWZkLAotMHg3ZGQ5YzAwYywKLTB4N2M0MjAwMDAsCi0weDA4Y2MwMDAxLAotMHgwNjI0MDAwMSwKLTB4MDYyODAwMDIsCi0weGNlMWQwMDAwLAotMHhjZTVkMDAwMCwKLTB4OThjMGZmZmEsCi0weGNlOWQwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg3YzQwYzAwMCwKLTB4MzBkMDAwMDEsCi0weDI4Y2MwMDAxLAotMHg3YzQxNDAwMCwKLTB4OTUwMDAwMDYsCi0weDdjNDE4MDAwLAotMHhjZDQxMjE2ZCwKLTB4Y2Q4MTIxNmUsCi0weDgwMDAwMGYyLAotMHhjODFjMDAwMywKLTB4YzAyMjAwMDQsCi0weDdlMTYwMDBjLAotMHhjYzIxMDAwMCwKLTB4YzgxYzAwMDQsCi0weDdjNDI0MDAwLAotMHg5OGMwMDAwNCwKLTB4N2M0MjgwMDAsCi0weDgwMDAwMDAxLAotMHhjZGU1MDAwMCwKLTB4Y2U0MTIxNjksCi0weGNlODEyMTZhLAotMHhjZGMxMjE2YiwKLTB4ODAwMDAwMDEsCi0weGNjMDEyMTZjLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4N2M0MWMwMDAsCi0weDI4YTQwMDA4LAotMHgzMjY0MDBmZiwKLTB4MGU2ODAwM2MsCi0weDk2ODAwMDBhLAotMHg3YzAyMDAwMCwKLTB4N2M0MjAwMDAsCi0weDFlMzAwMDAzLAotMHhjYzAwMDA2YSwKLTB4OWIwMDAwMDMsCi0weDQyMjAwMDA1LAotMHgwNDIwMDA0MCwKLTB4ODAwMDAxMGYsCi0weDdjMDI0MDAwLAotMHg3ZTAyNDAwMCwKLTB4OWE0MDAwMDAsCi0weDBhNjQwMDAxLAotMHgzMGVjMDAxMCwKLTB4OWFjMDAwMGEsCi0weGNjMDAwMDYyLAotMHhjMDJhMDAwNCwKLTB4YzgyYzAwMjEsCi0weDdlOTI4MDBjLAotMHhjYzAwMDA0MSwKLTB4Y2MyOTAwMDAsCi0weGNlYzAwMDIxLAotMHg4MDAwMDExZiwKLTB4YzgzMDAwMDQsCi0weGNkMDEyMTZkLAotMHhjZDQxMjE2ZSwKLTB4YzgzMDAwMDMsCi0weDdmMWYwMDBiLAotMHgzMGY0MDAwNywKLTB4Mjc3ODAwMDEsCi0weDk3NDAwMDJhLAotMHgwN2I4MDEyNCwKLTB4OWY4MDAwMDAsCi0weDAwMDAwMDAwLAotMHg4MDAwMDEzNCwKLTB4N2YxYjgwMDQsCi0weDgwMDAwMTM4LAotMHg3ZjFiODAwNSwKLTB4ODAwMDAxM2MsCi0weDdmMWI4MDAyLAotMHg4MDAwMDE0MCwKLTB4N2YxYjgwMDMsCi0weDgwMDAwMTQ0LAotMHg3ZjFiODAwNywKLTB4ODAwMDAxNDgsCi0weDdmMWI4MDA2LAotMHg4MDAwMDE0ZCwKLTB4MjhhNDAwMDgsCi0weDliODAwMDE5LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWQsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAxNSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVkLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMTEsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZCwKLTB4MzI2NDAwZmYsCi0weDliODAwMDBkLAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWQsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAwOSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVkLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMDUsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZCwKLTB4MzI2NDAwZmYsCi0weDI4YTQwMDA4LAotMHgzMjY0MDBmZiwKLTB4MGU2ODAwM2MsCi0weDlhODBmZWIyLAotMHgyOGVjMDAwOCwKLTB4N2M0MzQwMDAsCi0weDdjNDM4MDAwLAotMHg3YzQzYzAwMCwKLTB4OTZjMDAwMDcsCi0weGNjMDAwMDYyLAotMHhjZjQxMjE2OSwKLTB4Y2Y4MTIxNmEsCi0weGNmYzEyMTZiLAotMHg4MDAwMDAwMSwKLTB4Y2MwMTIxNmMsCi0weDgwMDAwMDAxLAotMHhjZmY1MDAwMCwKLTB4Y2MwMDAwNmIsCi0weDg0MDAwMzdmLAotMHgwZTY4MDAzYywKLTB4OWE4MDAwMDQsCi0weGM4MjgwMDE1LAotMHg4MDAwMDAwMSwKLTB4ZDA0MDAwN2YsCi0weDk2ODBmZmFiLAotMHg3ZTAyNDAwMCwKLTB4ODQwMDAyMzksCi0weGMwMGUwMDAyLAotMHhjYzAwMDA0MSwKLTB4ODAwMDAyMzcsCi0weGNjYzEzMDRhLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weGMwMWUwMDAxLAotMHgyOTI0MDAxMiwKLTB4YzAyMjAwMDIsCi0weDk2NDAwMDA1LAotMHhjMDI2MDAwNCwKLTB4YzAyN2ZmZmIsCi0weDdkMjUwMDBiLAotMHhjMDI2MDAwMCwKLTB4N2RkMjgwMGIsCi0weDdlMTJjMDBiLAotMHg3ZDI1MDAwYywKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MxMjE2OSwKLTB4OWE4MDAwMGEsCi0weGNkMDEyMTZhLAotMHhjZDQxMjE2YiwKLTB4OTZjMGZlODMsCi0weGNkODEyMTZjLAotMHhjODMwMDAxOCwKLTB4OTcwMDAwMDAsCi0weGM4MzAwMDE4LAotMHg4MDAwMDAwMSwKLTB4Y2MwMDAwMTgsCi0weDg0MDAwMzdmLAotMHhjYzAwMDA3ZiwKLTB4YzgxNDAwMTMsCi0weGM4MTgwMDE0LAotMHhjZDQxMjE2YiwKLTB4OTZjMGZlNzcsCi0weGNkODEyMTZjLAotMHg4MDAwMDE4MSwKLTB4YzgzMDAwMTgsCi0weGM4MGMwMDA4LAotMHg5OGMwMDAwMCwKLTB4YzgwYzAwMDgsCi0weDdjNDEwMDAwLAotMHg5NTAwMDAwMiwKLTB4MDAwMDAwMDAsCi0weDdjNDE0MDAwLAotMHhjODIwMDAwOSwKLTB4Y2M0MDAwNDMsCi0weGNlMDFhMWY0LAotMHhjYzQwMDA0NCwKLTB4YzAwZTgwMDAsCi0weDdjNDI0MDAwLAotMHg3YzQyODAwMCwKLTB4MmFhYzAwMWYsCi0weDk2YzBmZTY0LAotMHhjMDM1ZjAwMCwKLTB4Y2U0MDAzZTIsCi0weDMyNzgwMDAzLAotMHgyNjdjMDAwOCwKLTB4N2ZmN2MwMGIsCi0weDdmZmJjMDBjLAotMHgyYTc4MDAxOCwKLTB4Y2ZjMDAzZTMsCi0weGNmODAwM2U0LAotMHgyNmIwMDAwMiwKLTB4N2YzZjAwMDAsCi0weGNmMDAwM2U1LAotMHg4MDAwMDMxZCwKLTB4N2M4MGMwMDAsCi0weDdjNDBjMDAwLAotMHgyOGQwMDAwOCwKLTB4MzExMDAwMGYsCi0weDk1MDAwMDBmLAotMHgyNTI4MDAwMSwKLTB4MDZhODAxYjIsCi0weDllODAwMDAwLAotMHgwMDAwMDAwMCwKLTB4ODAwMDAxZDMsCi0weGMwMTIwODAwLAotMHg4MDAwMDFlMSwKLTB4YzgxNDAwMGYsCi0weDgwMDAwMWU4LAotMHhjODE0MDAxMCwKLTB4ODAwMDAxZWYsCi0weGNjYzFhMmE0LAotMHg4MDAwMDFmOCwKLTB4YzgxNDAwMTEsCi0weDMwZDAwMDNmLAotMHgwZDI4MDAxNSwKLTB4OWE4MDAwMTIsCi0weDBkMjgwMDFlLAotMHg5YTgwMDAxZSwKLTB4MGQyODAwMjAsCi0weDlhODAwMDIzLAotMHgwZDI0MDAwZiwKLTB4MGQyODAwMTAsCi0weDdlNmE4MDBjLAotMHg5YTgwMDAyNiwKLTB4MGQyMDAwMDQsCi0weDBkMjQwMDE0LAotMHgwZDI4MDAyOCwKLTB4N2U2MjQwMGMsCi0weDdlYTY4MDBjLAotMHg5YTgwMDAyYSwKLTB4YzgxNDAwMTEsCi0weDgwMDAwMDAxLAotMHhjY2MxYTJhNCwKLTB4YzAxMjA4MDAsCi0weDdjNDE0MDAwLAotMHg3ZDBjYzAwYywKLTB4YzAxMjAwMDgsCi0weDI5NTgwMDAzLAotMHgyOTVjMDAwYywKLTB4N2M0MjAwMDAsCi0weDdkZDFjMDBiLAotMHgyNjIwMDAxNCwKLTB4N2UxZTQwMGMsCi0weDdlNGU4MDBjLAotMHhjZTgxYTJhNCwKLTB4ODAwMDAwMDEsCi0weGNkODFhMWZlLAotMHhjODE0MDAwZiwKLTB4MDQxMDIxMGUsCi0weDk1NDAwMDAwLAotMHhjODE0MDAwZiwKLTB4ZDA1MTAwMDAsCi0weDgwMDAwMDAxLAotMHhjY2MxYTJhNCwKLTB4YzgxNDAwMTAsCi0weDA0MTAyMTA4LAotMHg5NTQwMDAwMCwKLTB4YzgxNDAwMTAsCi0weGQwNTEwMDAwLAotMHg4MDAwMDAwMSwKLTB4Y2NjMWEyYTQsCi0weGNjYzFhMmE0LAotMHgwNDEwMDAwMSwKLTB4Y2QwMDAwMTksCi0weDg0MDAwMzdmLAotMHhjYzAwMDA3ZiwKLTB4YzgxMDAwMTksCi0weDk5MDAwMDAwLAotMHhjODEwMDAxOSwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHgwNDEwMjEwMCwKLTB4OTU0MDAwMDAsCi0weGM4MTQwMDExLAotMHhkMDUxMDAwMCwKLTB4ODAwMDAzN2MsCi0weGNjYzFhMmE0LAotMHg3YzQwYzAwMCwKLTB4Y2M0MDAwMGQsCi0weDk0YzBmZTAxLAotMHhjYzQwMDAwZSwKLTB4N2M0MTAwMDAsCi0weDk1MDAwMDA1LAotMHgwOGNjMDAwMSwKLTB4YzgxNDAwMDUsCi0weDk5NDAwMDE0LAotMHgwMDAwMDAwMCwKLTB4OThjMGZmZmIsCi0weDdjNDEwMDAwLAotMHg4MDAwMDAwMiwKLTB4N2QwMDgwMDAsCi0weGM4MTQwMDA1LAotMHg3YzQwYzAwMCwKLTB4OTk0MDAwMGMsCi0weGM4MTgwMDBjLAotMHg3YzQxMDAwMCwKLTB4OTU4MGZkZjAsCi0weGM4MjAwMDBlLAotMHhjODFjMDAwZCwKLTB4NjYyMDAwMjAsCi0weDdlMWUwMDJjLAotMHgyNTI0MDAwMiwKLTB4N2U2MjQwMjAsCi0weDgwMDAwMDAxLAotMHhjY2U2MDAwMCwKLTB4N2M0MTAwMDAsCi0weGNjMDAwMDZjLAotMHhjYzAwMDA2ZCwKLTB4YzgxODAwMWYsCi0weGM4MWMwMDFlLAotMHg2NTk4MDAyMCwKLTB4N2RkOWMwMmMsCi0weDdjZDRjMDBjLAotMHhjY2RlMDAwMCwKLTB4NDVkYzAwMDQsCi0weGM4MjgwMDE3LAotMHg5NjgwMDAwZiwKLTB4YzAwZTAwMDEsCi0weDI4NjgwMDA4LAotMHgyYWFjMDAxNiwKLTB4MzJhODAwZmYsCi0weDBlYjAwMDQ5LAotMHg3ZjJmMDAwYiwKLTB4OTcwMDAwMDYsCi0weDAwMDAwMDAwLAotMHhjODE0MDAwNSwKLTB4N2M0MGMwMDAsCi0weDgwMDAwMjIxLAotMHg3YzQxMDAwMCwKLTB4ODAwMDAyMjQsCi0weGQwNDAwMDdmLAotMHg4NDAwMDIzOSwKLTB4Y2MwMDAwNDEsCi0weGNjYzEzMDRhLAotMHg5NDAwMDAwMCwKLTB4YzgzYzAwMWEsCi0weDA0M2MwMDA1LAotMHhjZmMxYTJhNCwKLTB4YzAzNjFmOTAsCi0weGMwMzg3ZmZmLAotMHg3YzAzYzAxMCwKLTB4N2Y3YjQwMGMsCi0weGNmNDEyMTdjLAotMHhjZmMxMjE3ZCwKLTB4Y2MwMTIxN2UsCi0weGMwM2EwMDA0LAotMHgwNDM0MjE3ZiwKLTB4N2Y3YjQwMGMsCi0weGNjMzUwMDAwLAotMHhjODNjMDAwNCwKLTB4MmJmYzAwMWYsCi0weDA0MzgwMDIwLAotMHg5N2MwMDAwNSwKLTB4Y2MwMDAwNjIsCi0weDliODAwMDAwLAotMHgwYmI4MDAwMSwKLTB4ODAwMDAyNDUsCi0weGNjMDAwMDcxLAotMHhjYzAxYTFmNCwKLTB4MDQzODAwMTYsCi0weGMwMzYwMDAyLAotMHhjZjgxYTJhNCwKLTB4ODgwMDAwMDAsCi0weGNmNDEyMDEwLAotMHg3YzQwYzAwMCwKLTB4MjhkMDAwMWMsCi0weDk1MDAwMDA1LAotMHgwNGQ0MDAwMSwKLTB4Y2Q0MDAwNjUsCi0weDgwMDAwMDAxLAotMHhjZDQwMDA2OCwKLTB4MDk1NDAwMDIsCi0weDgwMDAwMDAxLAotMHhjZDQwMDA2NiwKLTB4ODQwMDAyNmEsCi0weGM4MTgwM2VhLAotMHg3YzQwYzAwMCwKLTB4OTk4MGZkOWYsCi0weGM4MTQwMDE2LAotMHgwOGQwMDAwMSwKLTB4OTk0MDAwMmIsCi0weGNkMDAwMDY4LAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHgwNDNjMDAwNSwKLTB4Y2ZjMWEyYTQsCi0weGNjMDFhMWY0LAotMHg4NDAwMDM3ZiwKLTB4Y2MwMDAwNDYsCi0weDg4MDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4ODQwMDAyN2MsCi0weGM4MTgwM2VhLAotMHg3YzQwYzAwMCwKLTB4OTk4MGZkOGQsCi0weGM4MTQwMDE2LAotMHgwOGQwMDAwMSwKLTB4OTk0MDAwMTksCi0weGNkMDAwMDY4LAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHgwNDNjMDAyMiwKLTB4Y2ZjMWEyYTQsCi0weDg0MDAwMzdmLAotMHhjYzAwMDA0NywKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHhjODEwMDAxNiwKLTB4OTkwMDAwMGQsCi0weGNjNDAwMDY3LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weGM4MTgwM2VhLAotMHg5OTgwZmQ3OSwKLTB4N2M0MGMwMDAsCi0weDk0YzAwMDAzLAotMHhjODEwMDAxNiwKLTB4OTkwMDAwMDQsCi0weGNjYzAwMDY4LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weDg0MDAwMjM5LAotMHhjMDE0ODAwMCwKLTB4Y2MwMDAwNDEsCi0weGNkNDEzMDRhLAotMHhjMDE0ODAwMCwKLTB4OTkwMDAwMDAsCi0weGM4MTAwMDE2LAotMHg4MDAwMDAwMiwKLTB4N2M0MDgwMDAsCi0weGMwMTIwMDAxLAotMHg3YzUxNDAwYywKLTB4ODAwMDAwMDEsCi0weGQwNTUwMDAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4MjkxYzAwMWYsCi0weGNjYzAwMDRhLAotMHhjZDAwMDA0YiwKLTB4OTVjMDAwMDMsCi0weGMwMWM4MDAwLAotMHhjZGMxMjAxMCwKLTB4ZGQ4MzAwMDAsCi0weDA1NWMyMDAwLAotMHhjYzAwMDA2MiwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNGMsCi0weGNkMDAwMDRkLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2EwMDAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDRlLAotMHhjZDAwMDA0ZiwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNjMDAwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1MCwKLTB4Y2QwMDAwNTEsCi0weGRkODMwMDAwLAotMHgwNTVjZjhlMCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTIsCi0weGNkMDAwMDUzLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2Y4ODAsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDU0LAotMHhjZDAwMDA1NSwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNlMDAwLAotMHg4MDAwMDAwMSwKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1NiwKLTB4Y2QwMDAwNTcsCi0weGRkODMwMDAwLAotMHgwNTVjZjAwMCwKLTB4ODAwMDAwMDEsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTgsCi0weGNkMDAwMDU5LAotMHhkZDgzMDAwMCwKLTB4MDU1Y2YzZmMsCi0weDgwMDAwMDAxLAotMHhkODFmNDEwMCwKLTB4ZDA0MzIwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNhMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzYzAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2Y4ZTAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmODgwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZTAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2YwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNmM2ZjLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhjODE0MDNlMCwKLTB4Y2M0MzAwMDAsCi0weGNjNDMwMDAwLAotMHhjYzQzMDAwMCwKLTB4N2Q0NWMwMDAsCi0weGNkYzMwMDAwLAotMHhkMDQzMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4N2M0MGMwMDAsCi0weGM4MTAwM2UyLAotMHhjODE0MDNlNSwKLTB4YzgxODAzZTMsCi0weGM4MWMwM2U0LAotMHhjZDgxMjE2OSwKLTB4Y2RjMTIxNmEsCi0weGNjYzEyMTZiLAotMHhjYzAxMjE2YywKLTB4MDQyMDAwMDQsCi0weDdkYTE4MDAwLAotMHg3ZDk2NDAwMiwKLTB4OTY0MGZjZDksCi0weGNkODAwM2UzLAotMHgzMTI4MDAwMywKLTB4YzAyZGYwMDAsCi0weDI1MTgwMDA4LAotMHg3ZGFkODAwYiwKLTB4N2RhOTgwMGMsCi0weDgwMDAwMDAxLAotMHhjZDgwMDNlMywKLTB4MzA4Y2ZmZmYsCi0weGQwNGQwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhjODE0MDAyMCwKLTB4MTU1ODAwMDIsCi0weDk1ODBmZmZmLAotMHhjODE0MDAyMCwKLTB4Y2MwMDAwNmUsCi0weGNjNDEyMTgwLAotMHg3YzQwYzAwMCwKLTB4Y2NjMTIxOGQsCi0weGNjNDEyMTgxLAotMHgyOGQwMDAxZiwKLTB4MzQ1ODgwMDAsCi0weGNkODEyMThjLAotMHg5NTAwZmNiZiwKLTB4Y2M0MTIxODIsCi0weGM4MTQwMDIwLAotMHg5OTQwZmZmZiwKLTB4YzgxNDAwMjAsCi0weDgwMDAwMDAyLAotMHg3YzQwODAwMCwKLTB4N2M0MGMwMDAsCi0weDI4ZDAwMDE4LAotMHgzMTEwMDAwMSwKLTB4YzAxNjAwODAsCi0weDk1MDAwMDAzLAotMHhjMDJhMDAwNCwKLTB4N2NkNGMwMGMsCi0weGNjYzEyMTdjLAotMHhjYzQxMjE3ZCwKLTB4Y2M0MTIxN2UsCi0weDdjNDE4MDAwLAotMHgxZGIwMDAwMywKLTB4MzZhMDIxN2YsCi0weDliMDAwMDAzLAotMHg0MTljMDAwNSwKLTB4MDQxYzAwNDAsCi0weDk5YzAwMDAwLAotMHgwOWRjMDAwMSwKLTB4Y2MyMTAwMDAsCi0weGM4MjQwMDA0LAotMHgyYTZjMDAxZiwKLTB4NDE5YzAwMDUsCi0weDlhYzBmZmZhLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAwMDIsCi0weDdjNDA4MDAwLAotMHg3YzQwYzAwMCwKLTB4MDRkNDAzZTYsCi0weDgwMDAwMDAxLAotMHhjYzU0MDAwMCwKLTB4ODAwMDAzN2MsCi0weGNjNDAwM2VhLAotMHhjMDFjODAwMCwKLTB4MDQ0Y2EwMDAsCi0weGNkYzEyMDEwLAotMHg3YzQxMDAwMCwKLTB4YzgxNDAwMDksCi0weDA0MTgwMDAwLAotMHgwNDFjMDAwOCwKLTB4Y2Q4MDAwNzEsCi0weDA5ZGMwMDAxLAotMHgwNTk4MDAwMSwKLTB4Y2QwZDAwMDAsCi0weDk5YzBmZmZjLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAzN2MsCi0weGNkNDAwMDcxLAotMHhjMDBlMDEwMCwKLTB4Y2MwMDAwNDEsCi0weGNjYzEzMDRhLAotMHhjODNjMDA3ZiwKLTB4Y2MwMDAwN2YsCi0weDgwMDAwMDAxLAotMHhjYzAwMDA3ZiwKLTB4Y2MwMDAwN2YsCi0weDg4MDAwMDAwLAotMHhjYzAwMDA3ZiwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDEwMzMxLAotMHgwMDEwMDAwNCwKLTB4MDAxNzAwMDYsCi0weDAwMjEwMDA4LAotMHgwMDI3MDAyOCwKLTB4MDAyODAwMjMsCi0weDAwMjkwMDI5LAotMHgwMDJhMDAyNiwKLTB4MDAyYjAwMjksCi0weDAwMmQwMDM4LAotMHgwMDJlMDAzZiwKLTB4MDAyZjAwNGEsCi0weDAwMzQwMDRjLAotMHgwMDM2MDAzMCwKLTB4MDAzOTAwYWYsCi0weDAwM2EwMGNmLAotMHgwMDNiMDBlNCwKLTB4MDAzYzAwZmMsCi0weDAwM2QwMTZiLAotMHgwMDNmMDBhZCwKLTB4MDA0MTAzMzYsCi0weDAwNDMwMzQ5LAotMHgwMDQ0MDE4ZSwKLTB4MDA0NTAwZmMsCi0weDAwNDYwMWFjLAotMHgwMDQ3MDFhYywKLTB4MDA0ODAxZmUsCi0weDAwNDkwMjBjLAotMHgwMDRhMDI1NSwKLTB4MDA0YjAyODIsCi0weDAwNTIwMjVmLAotMHgwMDUzMDI3MSwKLTB4MDA1NDAyODcsCi0weDAwNTcwMjk5LAotMHgwMDYwMDI5ZCwKLTB4MDA2MTAyYWMsCi0weDAwNjIwMmI2LAotMHgwMDYzMDJjMCwKLTB4MDA2NDAyY2EsCi0weDAwNjUwMmQ0LAotMHgwMDY2MDJkZSwKLTB4MDA2NzAyZTgsCi0weDAwNjgwMmYyLAotMHgwMDY5MDJmNiwKLTB4MDA2YTAyZmEsCi0weDAwNmIwMmZlLAotMHgwMDZjMDMwMiwKLTB4MDA2ZDAzMDYsCi0weDAwNmUwMzBhLAotMHgwMDZmMDMwZSwKLTB4MDA3MDAzMTIsCi0weDAwNzIwMzYzLAotMHgwMDc0MDM2OSwKLTB4MDA3OTAzNjcsCi0weDAwN2MwMzFjLAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLTB4MDAwZjAzNzgsCi0weDAwMGYwMzc4LAotMHgwMDBmMDM3OCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlY3MTBfcGZwX21pY3JvY29kZVtdID0gewotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHg4MDAwMDAwMCwKLTB4ZGMwMzAwMDAsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4YzgxODAwMGUsCi0weDMxOTgwMDAxLAotMHg3YzQyNDAwMCwKLTB4OTU4MDAyM2EsCi0weDdjNDI4MDAwLAotMHhjODFjMDAxYywKLTB4YzAzN2MwMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2NiNDgwMGIsCi0weGMwMzYwMDAzLAotMHg5OWMwMDAwMCwKLTB4YzgxYzAwMWMsCi0weDdjYjQ4MDBjLAotMHgyNGQ0MDAwMiwKLTB4N2Q2NTQwMDAsCi0weGNkNDAwMDQzLAotMHhjZTgwMDA0MywKLTB4Y2QwMDAwNDMsCi0weGNjODAwMDQwLAotMHhjZTQwMDA0MCwKLTB4Y2U4MDAwNDAsCi0weGNjYzAwMDQwLAotMHhkYzNhMDAwMCwKLTB4OTc4MGZmZGUsCi0weGNkMDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4ODAwMDAwMTgsCi0weDdjNDEwMDAwLAotMHhkNDAwMDM0MCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjODE4MDAwZSwKLTB4ODAwMDAwMGMsCi0weDMxOTgwMDAyLAotMHhkNDAwMDNjMCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjODE4MDAwZSwKLTB4Mjg4YzAwMDgsCi0weDMwY2MwMDBmLAotMHgzNDEwMDAwMSwKLTB4N2QwZDAwMDgsCi0weDgwMDAwMDBjLAotMHg3ZDkxODAwYiwKLTB4Y2M4MDAwNDAsCi0weGQwNDAwMDQwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weDdlODI4MDBiLAotMHhkNDAwMDM0MCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4Y2M0MDAzZjksCi0weDgwMDAwMjQ5LAotMHhjYzQwMDNmOCwKLTB4YzAzN2ZmZmYsCi0weDdjNDE0MDAwLAotMHhjZjQxYTI5ZSwKLTB4YzgyMDAzZjgsCi0weGM4MWMwM2Y5LAotMHg2NjIwMDAyMCwKLTB4YzgxODAzZmIsCi0weDdkZTFjMDJjLAotMHg3ZDU4YzAwOCwKLTB4N2NkY2MwMjAsCi0weDY5MTAwMDIwLAotMHhjMDM2MDAwMywKLTB4Y2MwMDAwNTQsCi0weDdjYjQ4MDBjLAotMHg4MDAwMDA2OSwKLTB4Y2M4MDAwNDAsCi0weDdjNDE4MDAwLAotMHhjZDgxYTI5ZSwKLTB4Y2M4MDAwNDAsCi0weDgwMDAwMDY3LAotMHhjZDgwMDA0MCwKLTB4YzAxOWZmZmYsCi0weGNjODAwMDQwLAotMHhjZDgxYTI5ZSwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4Y2NjMWExZmEsCi0weGNkMDFhMWY5LAotMHhjZDQxYTI5ZCwKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHhjZDQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGNjMDAwMDU0LAotMHhjYzgwMDA0MCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4Y2NjMWExZmEsCi0weGNkMDFhMWY5LAotMHhjZDQxYTI5ZCwKLTB4Y2NjMDAwNDAsCi0weGNkMDAwMDQwLAotMHhjZDQwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weDdjNDBjMDAwLAotMHgzMGQwMDAwMSwKLTB4Y2NjMWEyOWYsCi0weDk1MDAwMDAzLAotMHgwNDE0MDAwMSwKLTB4MDQxNDAwMDIsCi0weGNkNDAwM2ZiLAotMHhjYzgwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGNjYzAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2M4MDAwNDAsCi0weGNjYzFhMmEyLAotMHg4MDAwMDAwMCwKLTB4Y2NjMDAwNDAsCi0weDdjNDBjMDAwLAotMHgyOGQ0MDAxZiwKLTB4Y2M4MDAwNDAsCi0weDk1NDAwMDAzLAotMHg3YzQxMDAwMCwKLTB4Y2NjMDAwNTcsCi0weDI5MTgwMDFmLAotMHhjY2MwMDA0MCwKLTB4OTU4MDAwMDMsCi0weGNkMDAwMDQwLAotMHhjZDAwMDA1OCwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDdmLAotMHhjODIwMDAxNywKLTB4YzgzMDAwMjIsCi0weDlhMDAwMDA2LAotMHgwZTI4MDAwMSwKLTB4YzgyNDAwMWUsCi0weDBhNjQwMDAxLAotMHhkNDAwMTI0MCwKLTB4Y2U0MDAwNDAsCi0weGMwMzZjMDAwLAotMHg5NjgwMDAwNywKLTB4Mzc3NDc5MDAsCi0weDA0MWMwMDAxLAotMHhjZjQwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNmMDAwM2ZhLAotMHg3YzAzMDAwMCwKLTB4Y2EwYzAwMTAsCi0weDdjNDEwMDAwLAotMHg5NGMwMDAwNCwKLTB4N2M0MTQwMDAsCi0weGQ0MjAwMmM0LAotMHhjZGUwMDA0NCwKLTB4OWIwMDAwMGIsCi0weDdjNDE4MDAwLAotMHhjYzAwMDA0YiwKLTB4Y2RhMDAwNDksCi0weGNkMjAwMDQxLAotMHhjZDYwMDA0MSwKLTB4Y2RhMDAwNDEsCi0weDA2MjAwMDAxLAotMHhjZTAwMDA1NiwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDdmLAotMHhjODI4MDAyMCwKLTB4YzgyYzAwMjEsCi0weGNjMDAwMDYzLAotMHg3ZWVhNDAwMSwKLTB4NjU3NDAwMjAsCi0weDdmNTM0MDJjLAotMHgyNjljMDAwMiwKLTB4N2RmNWMwMjAsCi0weDY5ZjgwMDIwLAotMHhjZTgwMDA0YiwKLTB4Y2U2MDAwNDksCi0weGNkZTAwMDQxLAotMHhjZmEwMDA0MSwKLTB4Y2U2MDAwNDEsCi0weDI3MWMwMDAyLAotMHg3ZGY1YzAyMCwKLTB4NjlmODAwMjAsCi0weDdkYjI0MDAxLAotMHhjZjAwMDA0YiwKLTB4Y2U2MDAwNDksCi0weGNkZTAwMDQxLAotMHhjZmEwMDA0MSwKLTB4ODAwMDAwYmMsCi0weGNlNjAwMDQxLAotMHhjODIwMDAxNywKLTB4YzgzMDAwMjIsCi0weDlhMDAwMDA2LAotMHgwZTI4MDAwMSwKLTB4YzgyNDAwMWUsCi0weDBhNjQwMDAxLAotMHhkNDAwMTI0MCwKLTB4Y2U0MDAwNDAsCi0weGNhMGMwMDEwLAotMHg3YzQxMDAwMCwKLTB4OTRjMDAwMGIsCi0weGMwMzZjMDAwLAotMHg5NjgwMDAwNywKLTB4Mzc3NDc5MDAsCi0weDA0MWMwMDAxLAotMHhjZjQwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNmMDAwM2ZhLAotMHg3YzAzMDAwMCwKLTB4ODAwMDAwYjUsCi0weDdjNDE0MDAwLAotMHhjYzAwMDA0OCwKLTB4ODAwMDAwZWUsCi0weDAwMDAwMDAwLAotMHhjODIwMDAxNywKLTB4YzgxYzAwMjMsCi0weDBlMjQwMDAyLAotMHg5OWMwMDAxNSwKLTB4N2M0MTgwMDAsCi0weDBhMjAwMDAxLAotMHhjZTAwMDA1NiwKLTB4ZDQwMDA0NDAsCi0weGNjMDAwMDQwLAotMHhjMDM2YzAwMCwKLTB4Y2ExNDAwMTMsCi0weDk2NDAwMDA3LAotMHgzNzc0NzkwMCwKLTB4Y2Y0MDAwNDAsCi0weGNjMDAwMDQwLAotMHhjODMwMDNmYSwKLTB4ODAwMDAxMDMsCi0weGNmMDAwMDIyLAotMHhjYzAwMDAyMiwKLTB4OTU0MDAxNDYsCi0weGNjMDAwMDdmLAotMHhjY2EwMDA0NiwKLTB4ODAwMDAwMDAsCi0weGNjMjAwMDQ2LAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNjQsCi0weGM4MjAwMDE3LAotMHhjODEwMDAxZiwKLTB4OTYwMDAwMDUsCi0weDA5MTAwMDAxLAotMHhkNDAwMDQ0MCwKLTB4Y2QwMDAwNDAsCi0weGNkMDAwMDIyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weGM4MGMwMDI1LAotMHg5NGMwZmVlYywKLTB4YzgxMDAwMDgsCi0weGNkMDAwMDQwLAotMHhkNDAwMGZjMCwKLTB4ODAwMDAwMDAsCi0weGQ0MDAwZmEyLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weGNjYzAwM2ZkLAotMHhjZDAwMDNmYywKLTB4Y2NjMDAwNDIsCi0weGNkMDAwMDQyLAotMHgyOTE0MDAxZiwKLTB4MjkxODAwMTAsCi0weDMxOTgwMDA3LAotMHgzYjVjMDAwMSwKLTB4N2Q3NjAwMGIsCi0weDk5ODAwMDA1LAotMHg3ZDVlNDAwYiwKLTB4Y2MwMDAwNDIsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA0ZCwKLTB4Mjk5ODAwMDEsCi0weDI5MmMwMDA4LAotMHg5OTgwMDAzZCwKLTB4MzJlYzAwMDEsCi0weDk2MDAwMDA0LAotMHgyOTMwMDAwYywKLTB4ODAwMDAyNDksCi0weGNjMDAwMDQyLAotMHgwNDE0MDAxMCwKLTB4Y2Q0MDAwNDIsCi0weDMzMzAwMDAxLAotMHgzNDI4MDAwMSwKLTB4ODQwMDAxNWQsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxYiwKLTB4MDQzODAwMGMsCi0weDg0MDAwMTVkLAotMHhjODE0MDAwMywKLTB4OWI0MDAwMTcsCi0weDA0MzgwMDA4LAotMHg4NDAwMDE1ZCwKLTB4YzgxNDAwMDMsCi0weDliNDAwMDEzLAotMHgwNDM4MDAwNCwKLTB4ODQwMDAxNWQsCi0weGM4MTQwMDAzLAotMHg5YjQwMDAxNSwKLTB4YzgwYzAzZmQsCi0weDlhODAwMDA5LAotMHhjODEwMDNmYywKLTB4OWIwMDAxMDEsCi0weGNjMDAwMDRkLAotMHgwNDE0MDAxMCwKLTB4Y2NjMDAwNDIsCi0weGNkMDAwMDQyLAotMHg4MDAwMDEzNSwKLTB4Y2Q0MDAwNDIsCi0weDk2YzAwMGZhLAotMHhjYzAwMDA0ZCwKLTB4ODAwMDAyNDksCi0weGNjMDAwMDRlLAotMHg5YWMwMDAwMywKLTB4Y2MwMDAwNGQsCi0weGNjMDAwMDRlLAotMHhkZjgzMDAwMCwKLTB4ODAwMDAwMDAsCi0weGQ4MDMwMWZmLAotMHg5YWMwMDBmMCwKLTB4Y2MwMDAwNGQsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA0ZSwKLTB4YzgxODAwMDMsCi0weGM4MWMwMDAzLAotMHhjODIwMDAwMywKLTB4N2Q1ZDQwMDMsCi0weDdkYTFjMDAzLAotMHg3ZDVkNDAwYywKLTB4MmExMDAwMWYsCi0weDI5OWMwMDFmLAotMHg3ZDFkMDAwYiwKLTB4N2QxNzQwMGIsCi0weDg4MDAwMDAwLAotMHg3ZTkyODAwYiwKLTB4OTY0MDAwMDQsCi0weGNjMDAwMDRlLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNDIsCi0weDA0MzgwMDA4LAotMHhjZjgwMDA0MiwKLTB4YzgwODAwMDMsCi0weGM4MGMwMDAzLAotMHhjODEwMDAwMywKLTB4YzgxNDAwMDMsCi0weGM4MTgwMDAzLAotMHhjODFjMDAwMywKLTB4YzgyNDAwMDMsCi0weGM4MjgwMDAzLAotMHgyOWZjMDAxZiwKLTB4MmFiMDAwMWYsCi0weDdmZjNjMDBiLAotMHgyOGYwMDAxZiwKLTB4N2ZmM2MwMGIsCi0weDI5NzAwMDFmLAotMHg3ZmYzYzAwYiwKLTB4N2Q4ODgwMDEsCi0weDdkY2NjMDAxLAotMHg3ZTUxMDAwMSwKLTB4N2U5NTQwMDEsCi0weDdjOTA4MDAyLAotMHg3Y2Q0YzAwMiwKLTB4N2NiYzgwMGIsCi0weDlhYzAwMDAzLAotMHg3YzhmNDAwYiwKLTB4MzhiNDAwMDEsCi0weDliNDAwMGMxLAotMHhjYzAwMDA0ZCwKLTB4OWJjMDAwYmYsCi0weGNjMDAwMDRlLAotMHhjODBjMDNmZCwKLTB4YzgxMDAzZmMsCi0weGNjYzAwMDQyLAotMHg4MDAwMDE2ZSwKLTB4Y2QwMDAwNDIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhjYzQwMDA0MCwKLTB4Y2M0MDAwNDAsCi0weGNjNDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2NjMDAwNDAsCi0weGNjYzAwMDBkLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwNDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4NjUxNDAwMjAsCi0weDdkNGQ0MDJjLAotMHgyNDU4MDAwMiwKLTB4N2Q1OTgwMjAsCi0weDdjNDFjMDAwLAotMHhjZDgwMDA0MiwKLTB4Njk5ODAwMjAsCi0weGNkODAwMDQyLAotMHhjZGMwMDA0MiwKLTB4YzAyM2MwMDAsCi0weDA1ZTQwMDAyLAotMHg3Y2EwODAwYiwKLTB4MjY2NDAwMTAsCi0weDdjYTQ4MDBjLAotMHhjYzgwMDA0MCwKLTB4Y2RjMDAwNDAsCi0weGNjYzAwMDQwLAotMHg5NWMwMDAwZSwKLTB4Y2QwMDAwNDAsCi0weDA5ZGMwMDAxLAotMHhjODI4MDAwMywKLTB4OTY4MDAwMDgsCi0weGNlODAwMDQwLAotMHhjODM0MDAxZCwKLTB4OTc0MDAwMDAsCi0weGM4MzQwMDFkLAotMHgyNmE4MDAwOCwKLTB4ODQwMDAyNGMsCi0weGNjMmIwMDAwLAotMHg5OWMwZmZmNywKLTB4MDlkYzAwMDEsCi0weGRjM2EwMDAwLAotMHg5NzgwMDAwNCwKLTB4N2M0MTgwMDAsCi0weDgwMDAwMWEyLAotMHgyNTk4MDAwMiwKLTB4YTAwMDAwMDAsCi0weDdkODA4MDAwLAotMHhjODE4MDAxZCwKLTB4N2M0MGMwMDAsCi0weDY0ZDAwMDA4LAotMHg5NTgwMDAwMCwKLTB4YzgxODAwMWQsCi0weGNjMTMwMDAwLAotMHhjYzgwMDA0MCwKLTB4Y2NjMDAwNDAsCi0weDgwMDAwMDAwLAotMHhjYzQwMDA0MCwKLTB4YzgxMDAwMWYsCi0weDdjNDBjMDAwLAotMHhjYzgwMDA0MCwKLTB4N2NkMTQwMGMsCi0weGNkNDAwMDQwLAotMHgwNTE4MDAwMSwKLTB4ODAwMDAwMDAsCi0weGNkODAwMDIyLAotMHg3YzQwYzAwMCwKLTB4NjQ1MDAwMjAsCi0weDg0MDAwMjRjLAotMHhjYzAwMDA2MSwKLTB4N2NkMGMwMmMsCi0weGM4MjAwMDE3LAotMHhjOGQ2MDAwMCwKLTB4OTk0MDAwMDgsCi0weDdjNDM4MDAwLAotMHhkZjgzMDAwMCwKLTB4Y2ZhMDAwNGYsCi0weDg0MDAwMjRjLAotMHhjYzAwMDA2MiwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDdmLAotMHg4MDAwMDI0OSwKLTB4Y2MwMDAwNjIsCi0weDg0MDAwMjRjLAotMHhjYzAwMDA2MSwKLTB4YzgyMDAwMTcsCi0weDdjNDBjMDAwLAotMHhjMDM2ZmYwMCwKLTB4YzgxMDAwMGQsCi0weGMwMzAzZmZmLAotMHg3Y2Y1NDAwYiwKLTB4N2Q1MTgwMGIsCi0weDdkODE4MDBmLAotMHg5OTgwMDAwOCwKLTB4N2NmMzgwMGIsCi0weGRmODMwMDAwLAotMHhjZmEwMDA0ZiwKLTB4ODQwMDAyNGMsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMCwKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMjQ5LAotMHhjYzAwMDA2MiwKLTB4ODQwMDAyNGMsCi0weDdjNDBjMDAwLAotMHgyOGRjMDAwOCwKLTB4OTVjMDAwMTksCi0weDMwZGMwMDEwLAotMHg3YzQxMDAwMCwKLTB4OTljMDAwMDQsCi0weDY0NTQwMDIwLAotMHg4MDAwMDIwOCwKLTB4YzkxZDAwMDAsCi0weDdkMTUwMDJjLAotMHhjOTFlMDAwMCwKLTB4N2M0MjAwMDAsCi0weDdjNDI0MDAwLAotMHg3YzQxODAwMCwKLTB4N2RlNWMwMGIsCi0weDdkZTI4MDA3LAotMHg5YTgwMDAwZSwKLTB4NDFhYzAwMDUsCi0weDlhYzAwMDAwLAotMHgwYWVjMDAwMSwKLTB4MzBkYzAwMTAsCi0weDk5YzAwMDA0LAotMHgwMDAwMDAwMCwKLTB4ODAwMDAyMGIsCi0weGM5MWQwMDAwLAotMHg4MDAwMDIwYiwKLTB4YzkxZTAwMDAsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weGM4MGMwMDI1LAotMHg5NGMwZmRlNCwKLTB4YzgxMDAwMDgsCi0weGNkMDAwMDQwLAotMHhkNDAwMGZjMCwKLTB4ODAwMDAwMDAsCi0weGQ0MDAwZmEyLAotMHhkNDAwMDM0MCwKLTB4ZDQwMDBmYzAsCi0weGQ0MDAwZmEyLAotMHhjYzgwMDA0MCwKLTB4ZDA0MDAwNDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4N2U4MjgwMGIsCi0weGQ0MDAwM2MwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhkMDQwMDA0MCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHg3ZTgyODAwYiwKLTB4N2M0MGMwMDAsCi0weDMwZDAwMDA2LAotMHgwZDEwMDAwNiwKLTB4OTkwMDAwMDcsCi0weGM4MTQwMDE1LAotMHg5OTQwMDAwNSwKLTB4Y2MwMDAwNTIsCi0weGQ0MDAwMzQwLAotMHhkNDAwMGZjMCwKLTB4ZDQwMDBmYTIsCi0weGNjODAwMDQwLAotMHhjY2MwMDA0MCwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDQwLAotMHg3YzQwYzAwMCwKLTB4Y2M0ZDAwMDAsCi0weGRjM2EwMDAwLAotMHg5NzgwZmRiZCwKLTB4MDRjYzAwMDEsCi0weDgwMDAwMjQyLAotMHhjYzRkMDAwMCwKLTB4ODAwMDAwMDAsCi0weGQwNDAwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODAwMDAwMDAsCi0weGNjMDAwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAzMDIyMiwKLTB4MDAwNDAyMmEsCi0weDAwMDUwMDlmLAotMHgwMDAyMDAwMywKLTB4MDAwNjAwM2MsCi0weDAwMDcwMDI3LAotMHgwMDA4MDE5MSwKLTB4MDAwOTAwNDQsCi0weDAwMGEwMDJkLAotMHgwMDEwMDI0NywKLTB4MDAxNzAwZjAsCi0weDAwMjIwMWQ3LAotMHgwMDIzMDFlOCwKLTB4MDAyNjAwNGMsCi0weDAwMjcwMDVmLAotMHgwMDIwMDExYSwKLTB4MDAyODAwOTIsCi0weDAwMjkwMDRmLAotMHgwMDJhMDA4MywKLTB4MDAyYjAwNjQsCi0weDAwMmYwMDhkLAotMHgwMDMyMDBkOCwKLTB4MDAzNDAyMzIsCi0weDAwMzYwMDc0LAotMHgwMDM5MDEwYSwKLTB4MDAzYzAxZmMsCi0weDAwM2YwMDlmLAotMHgwMDQxMDAwNSwKLTB4MDA0NDAxOTQsCi0weDAwNDgwMTlkLAotMHgwMDQ5MDFjNSwKLTB4MDA0YTAxY2YsCi0weDAwNTUwMjI1LAotMHgwMDU2MDIyZCwKLTB4MDA2MDAwMGEsCi0weDAwNjEwMDJhLAotMHgwMDYyMDAzMCwKLTB4MDA2MzAwMzAsCi0weDAwNjQwMDMwLAotMHgwMDY1MDAzMCwKLTB4MDA2NjAwMzAsCi0weDAwNjcwMDMwLAotMHgwMDY4MDAzNywKLTB4MDA2OTAwM2YsCi0weDAwNmEwMDQ3LAotMHgwMDZiMDA0NywKLTB4MDA2YzAwNDcsCi0weDAwNmQwMDQ3LAotMHgwMDZlMDA0NywKLTB4MDA2ZjAwNDcsCi0weDAwNzAwMDQ3LAotMHgwMDczMDI0NywKLTB4MDA3YjAyNDAsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi0weDAwMDAwMDA1LAotMHgwMDAwMDAwNSwKLTB4MDAwMDAwMDUsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJWNzEwX2NwX21pY3JvY29kZVtdID0gewotMHhjYzAwMDNlYSwKLTB4MDQwODAwMDMsCi0weGNjODAwMDQzLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg4MDAwMDAwMywKLTB4ZDA0MDAwN2YsCi0weDgwMDAwMDAzLAotMHhjYzQwMDA0MSwKLTB4N2M0MGMwMDAsCi0weGMwMTYwMDA0LAotMHgzMGQwM2ZmZiwKLTB4N2QxNTAwMGMsCi0weGNjMTEwMDAwLAotMHgyOGQ4MDAxZSwKLTB4MzE5ODAwMDEsCi0weDI4ZGMwMDFmLAotMHhjODIwMDAwNCwKLTB4OTVjMDAwMDYsCi0weDdjNDI0MDAwLAotMHhjYzAwMDA2MiwKLTB4N2U1NjgwMGMsCi0weGNjMjkwMDAwLAotMHhjODI0MDAwNCwKLTB4N2UyNjAwMGIsCi0weDk1ODAwMDA2LAotMHg3YzQyYzAwMCwKLTB4Y2MwMDAwNjIsCi0weDdlZDcwMDBjLAotMHhjYzMxMDAwMCwKLTB4YzgyYzAwMDQsCi0weDdlMmUwMDBjLAotMHhjYzAwMDA2MiwKLTB4MzExMDNmZmYsCi0weDgwMDAwMDAzLAotMHhjZTExMDAwMCwKLTB4N2M0MGMwMDAsCi0weDgwMDAwMDAzLAotMHhjYzQwMDA0MCwKLTB4ODAwMDAwMDMsCi0weGNjNDEyMjU3LAotMHg3YzQxODAwMCwKLTB4Y2M0MDAwNDUsCi0weGNjNDAwMDQ4LAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGNjNDAwMDQ1LAotMHhjYzQwMDA0OCwKLTB4N2M0MGMwMDAsCi0weGNjNDEyMjVjLAotMHhjYzQxYTFmYywKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHhjYzQxMjI1YywKLTB4Y2M0MWExZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDA0MGNhMWZkLAotMHhjMDEyMDAwMSwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHg3Y2QwYzAwYywKLTB4Y2M0MTIyNWMsCi0weGNjNDFhMWZjLAotMHhkMDRkMDAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ODAwMDAwMDMsCi0weGNjNDEyMjVkLAotMHg3YzQwODAwMCwKLTB4N2M0MGMwMDAsCi0weGMwMmEwMDAyLAotMHg3YzQxMDAwMCwKLTB4N2QyOTAwMGMsCi0weDMwOTQwMDAxLAotMHgzMDk4MDAwNiwKLTB4MzA5YzAzMDAsCi0weDI5ZGMwMDA4LAotMHg3YzQyMDAwMCwKLTB4N2M0MjQwMDAsCi0weDk1NDAwMDBmLAotMHhjMDJlMDAwNCwKLTB4MDVmMDIyNTgsCi0weDdmMmYwMDBjLAotMHhjYzMxMDAwMCwKLTB4YzgyODAwMDQsCi0weGNjYzEyMTY5LAotMHhjZDAxMjE2YSwKLTB4Y2U4MTIxNmIsCi0weDBkYjQwMDAyLAotMHhjYzAxMjE2YywKLTB4OTc0MDAwMGUsCi0weDBkYjQwMDAwLAotMHg4MDAwMDA3ZCwKLTB4YzgzNDAwMGEsCi0weDBkYjQwMDAyLAotMHg5NzQwMDAwOSwKLTB4MGRiNDAwMDAsCi0weGMwMmUwMDA0LAotMHgwNWYwMjI1OCwKLTB4N2YyZjAwMGMsCi0weGNjMzEwMDAwLAotMHhjODI4MDAwNCwKLTB4ODAwMDAwN2QsCi0weGM4MzQwMDBhLAotMHg5NzQwMDAwNCwKLTB4N2UwMjgwMDAsCi0weDgwMDAwMDdkLAotMHhjODM0MDAwYSwKLTB4MGRiNDAwMDQsCi0weDk3NDBmZjhjLAotMHgwMDAwMDAwMCwKLTB4Y2UwMTIxNmQsCi0weGNlNDEyMTZlLAotMHhjODI4MDAwMywKLTB4YzgzNDAwMGEsCi0weDliNDAwMDA0LAotMHgwNDNjMDAwNSwKLTB4ODQwMDAyNmQsCi0weGNjMDAwMDYyLAotMHgwZGY0MDAwMCwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U2LAotMHhjZTgxYTJiNywKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNCwKLTB4ODAwMDAwMDMsCi0weGNmYzFhMmQxLAotMHgwZGY0MDAwMSwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U3LAotMHhjZTgxYTJiYiwKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNSwKLTB4ODAwMDAwMDMsCi0weGNmYzFhMmQyLAotMHgwZGY0MDAwMiwKLTB4OTc0MDAwMGIsCi0weGM4MmMwM2U4LAotMHhjZTgxYTJiZiwKLTB4YzAzMDAwMDYsCi0weDdlZjM0MDI4LAotMHhjMDMwMDAyMCwKLTB4N2Y2YjgwMjAsCi0weDdmYjNjMDI5LAotMHhjZjgxYTJjNiwKLTB4ODAwMDAwMDMsCi0weGNmYzFhMmQzLAotMHhjODJjMDNlOSwKLTB4Y2U4MWEyYzMsCi0weGMwMzAwMDA2LAotMHg3ZWYzNDAyOCwKLTB4YzAzMDAwMjAsCi0weDdmNmI4MDIwLAotMHg3ZmIzYzAyOSwKLTB4Y2Y4MWEyYzcsCi0weDgwMDAwMDAzLAotMHhjZmMxYTJkNCwKLTB4ODAwMDAwMDMsCi0weGNjNDAwMDQyLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDI5MTQwMDFkLAotMHgzMTU0MDAwMSwKLTB4OTk0MDAwMGMsCi0weDMxMTgxMDAwLAotMHhjODFjMDAxMSwKLTB4OTVjMDAwMDAsCi0weGM4MWMwMDExLAotMHhjY2MxMjEwMCwKLTB4Y2QwMTIxMDEsCi0weGNjYzEyMTAyLAotMHhjZDAxMjEwMywKLTB4MDQxODAwMDQsCi0weDgwMDAwMzdlLAotMHhjZDgxYTJhNCwKLTB4YzAyYTAwMDQsCi0weDk1ODAwMDA4LAotMHgzNmE4MjFhMywKLTB4Y2MyOTAwMDAsCi0weGM4MjgwMDA0LAotMHhjODFjMDAxMSwKLTB4MGRlNDAwNDAsCi0weDk2NDBmZmZmLAotMHhjODFjMDAxMSwKLTB4Y2NjMTIxNzAsCi0weGNkMDEyMTcxLAotMHhjODIwMDAxMiwKLTB4OTYwMDAwMDAsCi0weGM4MjAwMDEyLAotMHg4MDAwMDM3ZSwKLTB4Y2MwMDAwNjQsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2MwMDAwNDUsCi0weGNjMDAwMDQ4LAotMHg0MGQ0MDAwMywKLTB4Y2Q0MTIyNWMsCi0weGNkMDFhMWZjLAotMHhjMDFhMDAwMSwKLTB4MDQxY2ExZmQsCi0weDdkZDljMDBjLAotMHg3YzQyMDAwMCwKLTB4MDhjYzAwMDEsCi0weDA2MjQwMDAxLAotMHgwNjI4MDAwMiwKLTB4Y2UxZDAwMDAsCi0weGNlNWQwMDAwLAotMHg5OGMwZmZmYSwKLTB4Y2U5ZDAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDdjNDBjMDAwLAotMHgzMGQwMDAwMSwKLTB4MjhjYzAwMDEsCi0weDdjNDE0MDAwLAotMHg5NTAwMDAwNiwKLTB4N2M0MTgwMDAsCi0weGNkNDEyMTZkLAotMHhjZDgxMjE2ZSwKLTB4ODAwMDAwZjQsCi0weGM4MWMwMDAzLAotMHhjMDIyMDAwNCwKLTB4N2UxNjAwMGMsCi0weGNjMjEwMDAwLAotMHhjODFjMDAwNCwKLTB4N2M0MjQwMDAsCi0weDk4YzAwMDA0LAotMHg3YzQyODAwMCwKLTB4ODAwMDAwMDMsCi0weGNkZTUwMDAwLAotMHhjZTQxMjE2OSwKLTB4Y2U4MTIxNmEsCi0weGNkYzEyMTZiLAotMHg4MDAwMDAwMywKLTB4Y2MwMTIxNmMsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHg3YzQxYzAwMCwKLTB4MjhhNDAwMDgsCi0weDMyNjQwMGZmLAotMHgwZTY4MDAzYywKLTB4OTY4MDAwMGEsCi0weDdjMDIwMDAwLAotMHg3YzQyMDAwMCwKLTB4MWUzMDAwMDMsCi0weGNjMDAwMDZhLAotMHg5YjAwMDAwMywKLTB4NDIyMDAwMDUsCi0weDA0MjAwMDQwLAotMHg4MDAwMDExMSwKLTB4N2MwMjQwMDAsCi0weDdlMDI0MDAwLAotMHg5YTQwMDAwMCwKLTB4MGE2NDAwMDEsCi0weDMwZWMwMDEwLAotMHg5YWMwMDAwYSwKLTB4Y2MwMDAwNjIsCi0weGMwMmEwMDA0LAotMHhjODJjMDAyMSwKLTB4N2U5MjgwMGMsCi0weGNjMDAwMDQxLAotMHhjYzI5MDAwMCwKLTB4Y2VjMDAwMjEsCi0weDgwMDAwMTIxLAotMHhjODMwMDAwNCwKLTB4Y2QwMTIxNmQsCi0weGNkNDEyMTZlLAotMHhjODMwMDAwMywKLTB4N2YxZjAwMGIsCi0weDMwZjQwMDA3LAotMHgyNzc4MDAwMSwKLTB4OTc0MDAwMmEsCi0weDA3YjgwMTI2LAotMHg5ZjgwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDgwMDAwMTM2LAotMHg3ZjFiODAwNCwKLTB4ODAwMDAxM2EsCi0weDdmMWI4MDA1LAotMHg4MDAwMDEzZSwKLTB4N2YxYjgwMDIsCi0weDgwMDAwMTQyLAotMHg3ZjFiODAwMywKLTB4ODAwMDAxNDYsCi0weDdmMWI4MDA3LAotMHg4MDAwMDE0YSwKLTB4N2YxYjgwMDYsCi0weDgwMDAwMTRmLAotMHgyOGE0MDAwOCwKLTB4OWI4MDAwMTksCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZiwKLTB4MzI2NDAwZmYsCi0weDliODAwMDE1LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWYsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAxMSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVmLAotMHgzMjY0MDBmZiwKLTB4OWI4MDAwMGQsCi0weDI4YTQwMDA4LAotMHg4MDAwMDE1ZiwKLTB4MzI2NDAwZmYsCi0weDliODAwMDA5LAotMHgyOGE0MDAwOCwKLTB4ODAwMDAxNWYsCi0weDMyNjQwMGZmLAotMHg5YjgwMDAwNSwKLTB4MjhhNDAwMDgsCi0weDgwMDAwMTVmLAotMHgzMjY0MDBmZiwKLTB4MjhhNDAwMDgsCi0weDMyNjQwMGZmLAotMHgwZTY4MDAzYywKLTB4OWE4MGZlYjIsCi0weDI4ZWMwMDA4LAotMHg3YzQzNDAwMCwKLTB4N2M0MzgwMDAsCi0weDdjNDNjMDAwLAotMHg5NmMwMDAwNywKLTB4Y2MwMDAwNjIsCi0weGNmNDEyMTY5LAotMHhjZjgxMjE2YSwKLTB4Y2ZjMTIxNmIsCi0weDgwMDAwMDAzLAotMHhjYzAxMjE2YywKLTB4ODAwMDAwMDMsCi0weGNmZjUwMDAwLAotMHhjYzAwMDA2YiwKLTB4ODQwMDAzODEsCi0weDBlNjgwMDNjLAotMHg5YTgwMDAwNCwKLTB4YzgyODAwMTUsCi0weDgwMDAwMDAzLAotMHhkMDQwMDA3ZiwKLTB4OTY4MGZmYWIsCi0weDdlMDI0MDAwLAotMHg4NDAwMDIzYiwKLTB4YzAwZTAwMDIsCi0weGNjMDAwMDQxLAotMHg4MDAwMDIzOSwKLTB4Y2NjMTMwNGEsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4YzAxZTAwMDEsCi0weDI5MjQwMDEyLAotMHhjMDIyMDAwMiwKLTB4OTY0MDAwMDUsCi0weGMwMjYwMDA0LAotMHhjMDI3ZmZmYiwKLTB4N2QyNTAwMGIsCi0weGMwMjYwMDAwLAotMHg3ZGQyODAwYiwKLTB4N2UxMmMwMGIsCi0weDdkMjUwMDBjLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzEyMTY5LAotMHg5YTgwMDAwYSwKLTB4Y2QwMTIxNmEsCi0weGNkNDEyMTZiLAotMHg5NmMwZmU4MywKLTB4Y2Q4MTIxNmMsCi0weGM4MzAwMDE4LAotMHg5NzAwMDAwMCwKLTB4YzgzMDAwMTgsCi0weDgwMDAwMDAzLAotMHhjYzAwMDAxOCwKLTB4ODQwMDAzODEsCi0weGNjMDAwMDdmLAotMHhjODE0MDAxMywKLTB4YzgxODAwMTQsCi0weGNkNDEyMTZiLAotMHg5NmMwZmU3NywKLTB4Y2Q4MTIxNmMsCi0weDgwMDAwMTgzLAotMHhjODMwMDAxOCwKLTB4YzgwYzAwMDgsCi0weDk4YzAwMDAwLAotMHhjODBjMDAwOCwKLTB4N2M0MTAwMDAsCi0weDk1MDAwMDAyLAotMHgwMDAwMDAwMCwKLTB4N2M0MTQwMDAsCi0weGM4MjAwMDA5LAotMHhjYzQwMDA0MywKLTB4Y2UwMWExZjQsCi0weGNjNDAwMDQ0LAotMHhjMDBlODAwMCwKLTB4N2M0MjQwMDAsCi0weDdjNDI4MDAwLAotMHgyYWFjMDAxZiwKLTB4OTZjMGZlNjQsCi0weGMwMzVmMDAwLAotMHhjZTQwMDNlMiwKLTB4MzI3ODAwMDMsCi0weDI2N2MwMDA4LAotMHg3ZmY3YzAwYiwKLTB4N2ZmYmMwMGMsCi0weDJhNzgwMDE4LAotMHhjZmMwMDNlMywKLTB4Y2Y4MDAzZTQsCi0weDI2YjAwMDAyLAotMHg3ZjNmMDAwMCwKLTB4Y2YwMDAzZTUsCi0weDgwMDAwMzFmLAotMHg3YzgwYzAwMCwKLTB4N2M0MGMwMDAsCi0weDI4ZDAwMDA4LAotMHgzMTEwMDAwZiwKLTB4OTUwMDAwMGYsCi0weDI1MjgwMDAxLAotMHgwNmE4MDFiNCwKLTB4OWU4MDAwMDAsCi0weDAwMDAwMDAwLAotMHg4MDAwMDFkNSwKLTB4YzAxMjA4MDAsCi0weDgwMDAwMWUzLAotMHhjODE0MDAwZiwKLTB4ODAwMDAxZWEsCi0weGM4MTQwMDEwLAotMHg4MDAwMDFmMSwKLTB4Y2NjMWEyYTQsCi0weDgwMDAwMWZhLAotMHhjODE0MDAxMSwKLTB4MzBkMDAwM2YsCi0weDBkMjgwMDE1LAotMHg5YTgwMDAxMiwKLTB4MGQyODAwMWUsCi0weDlhODAwMDFlLAotMHgwZDI4MDAyMCwKLTB4OWE4MDAwMjMsCi0weDBkMjQwMDBmLAotMHgwZDI4MDAxMCwKLTB4N2U2YTgwMGMsCi0weDlhODAwMDI2LAotMHgwZDIwMDAwNCwKLTB4MGQyNDAwMTQsCi0weDBkMjgwMDI4LAotMHg3ZTYyNDAwYywKLTB4N2VhNjgwMGMsCi0weDlhODAwMDJhLAotMHhjODE0MDAxMSwKLTB4ODAwMDAwMDMsCi0weGNjYzFhMmE0LAotMHhjMDEyMDgwMCwKLTB4N2M0MTQwMDAsCi0weDdkMGNjMDBjLAotMHhjMDEyMDAwOCwKLTB4Mjk1ODAwMDMsCi0weDI5NWMwMDBjLAotMHg3YzQyMDAwMCwKLTB4N2RkMWMwMGIsCi0weDI2MjAwMDE0LAotMHg3ZTFlNDAwYywKLTB4N2U0ZTgwMGMsCi0weGNlODFhMmE0LAotMHg4MDAwMDAwMywKLTB4Y2Q4MWExZmUsCi0weGM4MTQwMDBmLAotMHgwNDEwMjEwZSwKLTB4OTU0MDAwMDAsCi0weGM4MTQwMDBmLAotMHhkMDUxMDAwMCwKLTB4ODAwMDAwMDMsCi0weGNjYzFhMmE0LAotMHhjODE0MDAxMCwKLTB4MDQxMDIxMDgsCi0weDk1NDAwMDAwLAotMHhjODE0MDAxMCwKLTB4ZDA1MTAwMDAsCi0weDgwMDAwMDAzLAotMHhjY2MxYTJhNCwKLTB4Y2NjMWEyYTQsCi0weDA0MTAwMDAxLAotMHhjZDAwMDAxOSwKLTB4ODQwMDAzODEsCi0weGNjMDAwMDdmLAotMHhjODEwMDAxOSwKLTB4OTkwMDAwMDAsCi0weGM4MTAwMDE5LAotMHg4MDAwMDAwNCwKLTB4N2M0MDgwMDAsCi0weDA0MTAyMTAwLAotMHg5NTQwMDAwMCwKLTB4YzgxNDAwMTEsCi0weGQwNTEwMDAwLAotMHg4MDAwMDM3ZSwKLTB4Y2NjMWEyYTQsCi0weDdjNDBjMDAwLAotMHhjYzQwMDAwZCwKLTB4OTRjMGZlMDEsCi0weGNjNDAwMDBlLAotMHg3YzQxMDAwMCwKLTB4OTUwMDAwMDUsCi0weDA4Y2MwMDAxLAotMHhjODE0MDAwNSwKLTB4OTk0MDAwMTQsCi0weDAwMDAwMDAwLAotMHg5OGMwZmZmYiwKLTB4N2M0MTAwMDAsCi0weDgwMDAwMDA0LAotMHg3ZDAwODAwMCwKLTB4YzgxNDAwMDUsCi0weDdjNDBjMDAwLAotMHg5OTQwMDAwYywKLTB4YzgxODAwMGMsCi0weDdjNDEwMDAwLAotMHg5NTgwZmRmMCwKLTB4YzgyMDAwMGUsCi0weGM4MWMwMDBkLAotMHg2NjIwMDAyMCwKLTB4N2UxZTAwMmMsCi0weDI1MjQwMDAyLAotMHg3ZTYyNDAyMCwKLTB4ODAwMDAwMDMsCi0weGNjZTYwMDAwLAotMHg3YzQxMDAwMCwKLTB4Y2MwMDAwNmMsCi0weGNjMDAwMDZkLAotMHhjODE4MDAxZiwKLTB4YzgxYzAwMWUsCi0weDY1OTgwMDIwLAotMHg3ZGQ5YzAyYywKLTB4N2NkNGMwMGMsCi0weGNjZGUwMDAwLAotMHg0NWRjMDAwNCwKLTB4YzgyODAwMTcsCi0weDk2ODAwMDBmLAotMHhjMDBlMDAwMSwKLTB4Mjg2ODAwMDgsCi0weDJhYWMwMDE2LAotMHgzMmE4MDBmZiwKLTB4MGViMDAwNDksCi0weDdmMmYwMDBiLAotMHg5NzAwMDAwNiwKLTB4MDAwMDAwMDAsCi0weGM4MTQwMDA1LAotMHg3YzQwYzAwMCwKLTB4ODAwMDAyMjMsCi0weDdjNDEwMDAwLAotMHg4MDAwMDIyNiwKLTB4ZDA0MDAwN2YsCi0weDg0MDAwMjNiLAotMHhjYzAwMDA0MSwKLTB4Y2NjMTMwNGEsCi0weDk0MDAwMDAwLAotMHhjODNjMDAxYSwKLTB4MDQzYzAwMDUsCi0weGNmYzFhMmE0LAotMHhjMDM2MWY5MCwKLTB4YzAzODdmZmYsCi0weDdjMDNjMDEwLAotMHg3ZjdiNDAwYywKLTB4Y2Y0MTIxN2MsCi0weGNmYzEyMTdkLAotMHhjYzAxMjE3ZSwKLTB4YzAzYTAwMDQsCi0weDA0MzQyMTdmLAotMHg3ZjdiNDAwYywKLTB4Y2MzNTAwMDAsCi0weGM4M2MwMDA0LAotMHgyYmZjMDAxZiwKLTB4MDQzODAwMjAsCi0weDk3YzAwMDA1LAotMHhjYzAwMDA2MiwKLTB4OWI4MDAwMDAsCi0weDBiYjgwMDAxLAotMHg4MDAwMDI0NywKLTB4Y2MwMDAwNzEsCi0weGNjMDFhMWY0LAotMHgwNDM4MDAxNiwKLTB4YzAzNjAwMDIsCi0weGNmODFhMmE0LAotMHg4ODAwMDAwMCwKLTB4Y2Y0MTIwMTAsCi0weDdjNDBjMDAwLAotMHgyOGQwMDAxYywKLTB4OTUwMDAwMDUsCi0weDA0ZDQwMDAxLAotMHhjZDQwMDA2NSwKLTB4ODAwMDAwMDMsCi0weGNkNDAwMDY4LAotMHgwOTU0MDAwMiwKLTB4ODAwMDAwMDMsCi0weGNkNDAwMDY2LAotMHg4NDAwMDI2YywKLTB4YzgxODAzZWEsCi0weDdjNDBjMDAwLAotMHg5OTgwZmQ5ZiwKLTB4YzgxNDAwMTYsCi0weDA4ZDAwMDAxLAotMHg5OTQwMDAyYiwKLTB4Y2QwMDAwNjgsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDA0M2MwMDA1LAotMHhjZmMxYTJhNCwKLTB4Y2MwMWExZjQsCi0weDg0MDAwMzgxLAotMHhjYzAwMDA0NiwKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHg4NDAwMDI3ZSwKLTB4YzgxODAzZWEsCi0weDdjNDBjMDAwLAotMHg5OTgwZmQ4ZCwKLTB4YzgxNDAwMTYsCi0weDA4ZDAwMDAxLAotMHg5OTQwMDAxOSwKLTB4Y2QwMDAwNjgsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weDA0M2MwMDIyLAotMHhjZmMxYTJhNCwKLTB4ODQwMDAzODEsCi0weGNjMDAwMDQ3LAotMHg4ODAwMDAwMCwKLTB4Y2MwMDAwN2YsCi0weGM4MTAwMDE2LAotMHg5OTAwMDAwZCwKLTB4Y2M0MDAwNjcsCi0weDgwMDAwMDA0LAotMHg3YzQwODAwMCwKLTB4YzgxODAzZWEsCi0weDk5ODBmZDc5LAotMHg3YzQwYzAwMCwKLTB4OTRjMDAwMDMsCi0weGM4MTAwMDE2LAotMHg5OTAwMDAwNCwKLTB4Y2NjMDAwNjgsCi0weDgwMDAwMDA0LAotMHg3YzQwODAwMCwKLTB4ODQwMDAyM2IsCi0weGMwMTQ4MDAwLAotMHhjYzAwMDA0MSwKLTB4Y2Q0MTMwNGEsCi0weGMwMTQ4MDAwLAotMHg5OTAwMDAwMCwKLTB4YzgxMDAwMTYsCi0weDgwMDAwMDA0LAotMHg3YzQwODAwMCwKLTB4YzAxMjAwMDEsCi0weDdjNTE0MDBjLAotMHg4MDAwMDAwMywKLTB4ZDA1NTAwMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHgyOTFjMDAxZiwKLTB4Y2NjMDAwNGEsCi0weGNkMDAwMDRiLAotMHg5NWMwMDAwMywKLTB4YzAxYzgwMDAsCi0weGNkYzEyMDEwLAotMHhkZDgzMDAwMCwKLTB4MDU1YzIwMDAsCi0weGNjMDAwMDYyLAotMHg4MDAwMDAwMywKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA0YywKLTB4Y2QwMDAwNGQsCi0weGRkODMwMDAwLAotMHgwNTVjYTAwMCwKLTB4ODAwMDAwMDMsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNGUsCi0weGNkMDAwMDRmLAotMHhkZDgzMDAwMCwKLTB4MDU1Y2MwMDAsCi0weDgwMDAwMDAzLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDUwLAotMHhjZDAwMDA1MSwKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmOGUwLAotMHg4MDAwMDAwMywKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1MiwKLTB4Y2QwMDAwNTMsCi0weGRkODMwMDAwLAotMHgwNTVjZjg4MCwKLTB4ODAwMDAwMDMsCi0weGQ4MWY0MTAwLAotMHg3YzQwYzAwMCwKLTB4N2M0MTAwMDAsCi0weDdjNDE0MDAwLAotMHg3YzQxODAwMCwKLTB4Y2NjMDAwNTQsCi0weGNkMDAwMDU1LAotMHhkZDgzMDAwMCwKLTB4MDU1Y2UwMDAsCi0weDgwMDAwMDAzLAotMHhkODFmNDEwMCwKLTB4N2M0MGMwMDAsCi0weDdjNDEwMDAwLAotMHg3YzQxNDAwMCwKLTB4N2M0MTgwMDAsCi0weGNjYzAwMDU2LAotMHhjZDAwMDA1NywKLTB4ZGQ4MzAwMDAsCi0weDA1NWNmMDAwLAotMHg4MDAwMDAwMywKLTB4ZDgxZjQxMDAsCi0weDdjNDBjMDAwLAotMHg3YzQxMDAwMCwKLTB4N2M0MTQwMDAsCi0weDdjNDE4MDAwLAotMHhjY2MwMDA1OCwKLTB4Y2QwMDAwNTksCi0weGRkODMwMDAwLAotMHgwNTVjZjNmYywKLTB4ODAwMDAwMDMsCi0weGQ4MWY0MTAwLAotMHhkMDQzMjAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2EwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNjMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjhlMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2Y4ODAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGQwNDNlMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHhkMDQzZjAwMCwKLTB4N2M0MDgwMDAsCi0weGEwMDAwMDAwLAotMHhjYzgwMDA2MiwKLTB4ZDA0M2YzZmMsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGM4MTQwM2UwLAotMHhjYzQzMDAwMCwKLTB4Y2M0MzAwMDAsCi0weGNjNDMwMDAwLAotMHg3ZDQ1YzAwMCwKLTB4Y2RjMzAwMDAsCi0weGQwNDMwMDAwLAotMHg3YzQwODAwMCwKLTB4YTAwMDAwMDAsCi0weGNjODAwMDYyLAotMHg3YzQwYzAwMCwKLTB4YzgxMDAzZTIsCi0weGM4MTQwM2U1LAotMHhjODE4MDNlMywKLTB4YzgxYzAzZTQsCi0weGNkODEyMTY5LAotMHhjZGMxMjE2YSwKLTB4Y2NjMTIxNmIsCi0weGNjMDEyMTZjLAotMHgwNDIwMDAwNCwKLTB4N2RhMTgwMDAsCi0weDdkOTY0MDAyLAotMHg5NjQwZmNkOSwKLTB4Y2Q4MDAzZTMsCi0weDMxMjgwMDAzLAotMHhjMDJkZjAwMCwKLTB4MjUxODAwMDgsCi0weDdkYWQ4MDBiLAotMHg3ZGE5ODAwYywKLTB4ODAwMDAwMDMsCi0weGNkODAwM2UzLAotMHgzMDhjZmZmZiwKLTB4ZDA0ZDAwMDAsCi0weDdjNDA4MDAwLAotMHhhMDAwMDAwMCwKLTB4Y2M4MDAwNjIsCi0weGM4MTQwMDIwLAotMHgxNTU4MDAwMiwKLTB4OTU4MGZmZmYsCi0weGM4MTQwMDIwLAotMHhjYzAwMDA2ZSwKLTB4Y2M0MTIxODAsCi0weDdjNDBjMDAwLAotMHhjY2MxMjE4ZCwKLTB4Y2M0MTIxODEsCi0weDI4ZDAwMDFmLAotMHgzNDU4ODAwMCwKLTB4Y2Q4MTIxOGMsCi0weDk1MDBmY2JmLAotMHhjYzQxMjE4MiwKLTB4YzgxNDAwMjAsCi0weDk5NDBmZmZmLAotMHhjODE0MDAyMCwKLTB4ODAwMDAwMDQsCi0weDdjNDA4MDAwLAotMHg3YzQwYzAwMCwKLTB4MjhkMDAwMTgsCi0weDMxMTAwMDAxLAotMHhjMDE2MDA4MCwKLTB4OTUwMDAwMDMsCi0weGMwMmEwMDA0LAotMHg3Y2Q0YzAwYywKLTB4Y2NjMTIxN2MsCi0weGNjNDEyMTdkLAotMHhjYzQxMjE3ZSwKLTB4N2M0MTgwMDAsCi0weDFkYjAwMDAzLAotMHgzNmEwMjE3ZiwKLTB4OWIwMDAwMDMsCi0weDQxOWMwMDA1LAotMHgwNDFjMDA0MCwKLTB4OTljMDAwMDAsCi0weDA5ZGMwMDAxLAotMHhjYzIxMDAwMCwKLTB4YzgyNDAwMDQsCi0weDJhNmMwMDFmLAotMHg0MTljMDAwNSwKLTB4OWFjMGZmZmEsCi0weGNjODAwMDYyLAotMHg4MDAwMDAwNCwKLTB4N2M0MDgwMDAsCi0weDdjNDBjMDAwLAotMHgwNGQ0MDNlNiwKLTB4ODAwMDAwMDMsCi0weGNjNTQwMDAwLAotMHg4MDAwMDM3ZSwKLTB4Y2M0MDAzZWEsCi0weGMwMWM4MDAwLAotMHgwNDRjYTAwMCwKLTB4Y2RjMTIwMTAsCi0weDdjNDEwMDAwLAotMHhjODE0MDAwOSwKLTB4MDQxODAwMDAsCi0weDA0MWMwMDA4LAotMHhjZDgwMDA3MSwKLTB4MDlkYzAwMDEsCi0weDA1OTgwMDAxLAotMHhjZDBkMDAwMCwKLTB4OTljMGZmZmMsCi0weGNjODAwMDYyLAotMHg4MDAwMDM3ZSwKLTB4Y2Q0MDAwNzEsCi0weGMwMGUwMTAwLAotMHhjYzAwMDA0MSwKLTB4Y2NjMTMwNGEsCi0weGM4M2MwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODAwMDAwMDMsCi0weGNjMDAwMDdmLAotMHhjYzAwMDA3ZiwKLTB4ODgwMDAwMDAsCi0weGNjMDAwMDdmLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLAotMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsCi0weDAwMDEwMzMzLAotMHgwMDEwMDAwNiwKLTB4MDAxNzAwMDgsCi0weDAwMjEwMDBhLAotMHgwMDI3MDAyYSwKLTB4MDAyODAwMjUsCi0weDAwMjkwMDJiLAotMHgwMDJhMDAyOCwKLTB4MDAyYjAwMmIsCi0weDAwMmQwMDNhLAotMHgwMDJlMDA0MSwKLTB4MDAyZjAwNGMsCi0weDAwMzQwMDRlLAotMHgwMDM2MDAzMiwKLTB4MDAzOTAwYjEsCi0weDAwM2EwMGQxLAotMHgwMDNiMDBlNiwKLTB4MDAzYzAwZmUsCi0weDAwM2QwMTZkLAotMHgwMDNmMDBhZiwKLTB4MDA0MTAzMzgsCi0weDAwNDMwMzRiLAotMHgwMDQ0MDE5MCwKLTB4MDA0NTAwZmUsCi0weDAwNDYwMWFlLAotMHgwMDQ3MDFhZSwKLTB4MDA0ODAyMDAsCi0weDAwNDkwMjBlLAotMHgwMDRhMDI1NywKLTB4MDA0YjAyODQsCi0weDAwNTIwMjYxLAotMHgwMDUzMDI3MywKLTB4MDA1NDAyODksCi0weDAwNTcwMjliLAotMHgwMDYwMDI5ZiwKLTB4MDA2MTAyYWUsCi0weDAwNjIwMmI4LAotMHgwMDYzMDJjMiwKLTB4MDA2NDAyY2MsCi0weDAwNjUwMmQ2LAotMHgwMDY2MDJlMCwKLTB4MDA2NzAyZWEsCi0weDAwNjgwMmY0LAotMHgwMDY5MDJmOCwKLTB4MDA2YTAyZmMsCi0weDAwNmIwMzAwLAotMHgwMDZjMDMwNCwKLTB4MDA2ZDAzMDgsCi0weDAwNmUwMzBjLAotMHgwMDZmMDMxMCwKLTB4MDA3MDAzMTQsCi0weDAwNzIwMzY1LAotMHgwMDc0MDM2YiwKLTB4MDA3OTAzNjksCi0weDAwN2MwMzFlLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLTB4MDAwZjAzN2EsCi0weDAwMGYwMzdhLAotMHgwMDBmMDM3YSwKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOTAyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTAsMCArMSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgUjYwMERfSAorI2RlZmluZSBSNjAwRF9ICisKKyNkZWZpbmUgQ1BfUEFDS0VUMgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX1NISUZUCQkwCisjZGVmaW5lCQlQQUNLRVQyX1BBRF9NQVNLCQkoMHgzZmZmZmZmZiA8PCAwKQorCisjZGVmaW5lIFBBQ0tFVDIodikJKENQX1BBQ0tFVDIgfCBSRUdfU0VUKFBBQ0tFVDJfUEFELCAodikpKQorCisjZGVmaW5lIFI2WFhfTUFYX1NIX0dQUlMJCQkyNTYKKyNkZWZpbmUgUjZYWF9NQVhfVEVNUF9HUFJTCQkJMTYKKyNkZWZpbmUgUjZYWF9NQVhfU0hfVEhSRUFEUwkJCTI1NgorI2RlZmluZSBSNlhYX01BWF9TSF9TVEFDS19FTlRSSUVTCQk0MDk2CisjZGVmaW5lIFI2WFhfTUFYX0JBQ0tFTkRTCQkJOAorI2RlZmluZSBSNlhYX01BWF9CQUNLRU5EU19NQVNLCQkJMHhmZgorI2RlZmluZSBSNlhYX01BWF9TSU1EUwkJCQk4CisjZGVmaW5lIFI2WFhfTUFYX1NJTURTX01BU0sJCQkweGZmCisjZGVmaW5lIFI2WFhfTUFYX1BJUEVTCQkJCTgKKyNkZWZpbmUgUjZYWF9NQVhfUElQRVNfTUFTSwkJCTB4ZmYKKworLyogUFRFIGZsYWdzICovCisjZGVmaW5lIFBURV9WQUxJRAkJCQkoMSA8PCAwKQorI2RlZmluZSBQVEVfU1lTVEVNCQkJCSgxIDw8IDEpCisjZGVmaW5lIFBURV9TTk9PUEVECQkJCSgxIDw8IDIpCisjZGVmaW5lIFBURV9SRUFEQUJMRQkJCQkoMSA8PCA1KQorI2RlZmluZSBQVEVfV1JJVEVBQkxFCQkJCSgxIDw8IDYpCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZQlBUkJfUE9QCQkJCQkJMHgyNDE4CisjZGVmaW5lIAlFTkFCTEVfVEMxMjgJCQkJCSgxIDw8IDMwKQorI2RlZmluZQlBUkJfR0RFQ19SRF9DTlRMCQkJCTB4MjQ2QworCisjZGVmaW5lCUNDX0dDX1NIQURFUl9QSVBFX0NPTkZJRwkJCTB4ODk1MAorI2RlZmluZQlDQ19SQl9CQUNLRU5EX0RJU0FCTEUJCQkJMHg5OEY0CisjZGVmaW5lCQlCQUNLRU5EX0RJU0FCTEUoeCkJCQkJKCh4KSA8PCAxNikKKworI2RlZmluZQlDQl9DT0xPUjBfQkFTRQkJCQkJMHgyODA0MAorI2RlZmluZQlDQl9DT0xPUjFfQkFTRQkJCQkJMHgyODA0NAorI2RlZmluZQlDQl9DT0xPUjJfQkFTRQkJCQkJMHgyODA0OAorI2RlZmluZQlDQl9DT0xPUjNfQkFTRQkJCQkJMHgyODA0QworI2RlZmluZQlDQl9DT0xPUjRfQkFTRQkJCQkJMHgyODA1MAorI2RlZmluZQlDQl9DT0xPUjVfQkFTRQkJCQkJMHgyODA1NAorI2RlZmluZQlDQl9DT0xPUjZfQkFTRQkJCQkJMHgyODA1OAorI2RlZmluZQlDQl9DT0xPUjdfQkFTRQkJCQkJMHgyODA1QworI2RlZmluZQlDQl9DT0xPUjdfRlJBRwkJCQkJMHgyODBGQworCisjZGVmaW5lIENCX0NPTE9SMF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwNjAKKyNkZWZpbmUgQ0JfQ09MT1IwX1ZJRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA4MAorI2RlZmluZSBDQl9DT0xPUjBfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MGEwCisjZGVmaW5lIENCX0NPTE9SMF9USUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwYzAKKyNkZWZpbmUgQ0JfQ09MT1IwX0ZSQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBlMAorI2RlZmluZSBDQl9DT0xPUjBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MTAwCisKKyNkZWZpbmUJQ09ORklHX01FTVNJWkUJCQkJCTB4NTQyOAorI2RlZmluZSBDT05GSUdfQ05UTAkJCQkJMHg1NDI0CisjZGVmaW5lCUNQX1NUQVQJCQkJCQkweDg2ODAKKyNkZWZpbmUJQ1BfQ09IRVJfQkFTRQkJCQkJMHg4NUY4CisjZGVmaW5lCUNQX0RFQlVHCQkJCQkweEMxRkMKKyNkZWZpbmUJUl8wMDg2RDhfQ1BfTUVfQ05UTAkJCTB4ODZEOAorI2RlZmluZQkJU18wMDg2RDhfQ1BfTUVfSEFMVCh4KQkJCSgoKHgpICYgMSk8PDI4KQorI2RlZmluZQkJQ18wMDg2RDhfQ1BfTUVfSEFMVCh4KQkJCSgoeCkgJiAweEVGRkZGRkZGKQorI2RlZmluZQlDUF9NRV9SQU1fREFUQQkJCQkJMHhDMTYwCisjZGVmaW5lCUNQX01FX1JBTV9SQUREUgkJCQkJMHhDMTU4CisjZGVmaW5lCUNQX01FX1JBTV9XQUREUgkJCQkJMHhDMTVDCisjZGVmaW5lIENQX01FUV9USFJFU0hPTERTCQkJCTB4ODc2NAorI2RlZmluZQkJTUVRX0VORCh4KQkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCVJPUV9FTkQoeCkJCQkJCSgoeCkgPDwgMjQpCisjZGVmaW5lCUNQX1BFUkZNT05fQ05UTAkJCQkJMHg4N0ZDCisjZGVmaW5lCUNQX1BGUF9VQ09ERV9BRERSCQkJCTB4QzE1MAorI2RlZmluZQlDUF9QRlBfVUNPREVfREFUQQkJCQkweEMxNTQKKyNkZWZpbmUJQ1BfUVVFVUVfVEhSRVNIT0xEUwkJCQkweDg3NjAKKyNkZWZpbmUJCVJPUV9JQjFfU1RBUlQoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJUk9RX0lCMl9TVEFSVCh4KQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCUNQX1JCX0JBU0UJCQkJCTB4QzEwMAorI2RlZmluZQlDUF9SQl9DTlRMCQkJCQkweEMxMDQKKyNkZWZpbmUJCVJCX0JVRlNaKHgpCQkJCQkoKHgpPDwwKQorI2RlZmluZQkJUkJfQkxLU1ooeCkJCQkJCSgoeCk8PDgpCisjZGVmaW5lCQlSQl9OT19VUERBVEUJCQkJCSgxPDwyNykKKyNkZWZpbmUJCVJCX1JQVFJfV1JfRU5BCQkJCQkoMTw8MzEpCisjZGVmaW5lCQlCVUZfU1dBUF8zMkJJVAkJCQkJKDIgPDwgMTYpCisjZGVmaW5lCUNQX1JCX1JQVFIJCQkJCTB4ODcwMAorI2RlZmluZQlDUF9SQl9SUFRSX0FERFIJCQkJCTB4QzEwQworI2RlZmluZQlDUF9SQl9SUFRSX0FERFJfSEkJCQkJMHhDMTEwCisjZGVmaW5lCUNQX1JCX1JQVFJfV1IJCQkJCTB4QzEwOAorI2RlZmluZQlDUF9SQl9XUFRSCQkJCQkweEMxMTQKKyNkZWZpbmUJQ1BfUkJfV1BUUl9BRERSCQkJCQkweEMxMTgKKyNkZWZpbmUJQ1BfUkJfV1BUUl9BRERSX0hJCQkJCTB4QzExQworI2RlZmluZQlDUF9SQl9XUFRSX0RFTEFZCQkJCTB4ODcwNAorI2RlZmluZQlDUF9ST1FfSUIxX1NUQVQJCQkJCTB4ODc4NAorI2RlZmluZQlDUF9ST1FfSUIyX1NUQVQJCQkJCTB4ODc4OAorI2RlZmluZQlDUF9TRU1fV0FJVF9USU1FUgkJCQkweDg1QkMKKworI2RlZmluZQlEQl9ERUJVRwkJCQkJMHg5ODMwCisjZGVmaW5lCQlQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORQkJCSgxIDw8IDMxKQorI2RlZmluZQlEQl9ERVBUSF9CQVNFCQkJCQkweDI4MDBDCisjZGVmaW5lCURCX1dBVEVSTUFSS1MJCQkJCTB4OTgzOAorI2RlZmluZQkJREVQVEhfRlJFRSh4KQkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJREVQVEhfRkxVU0goeCkJCQkJCSgoeCkgPDwgNSkKKyNkZWZpbmUJCURFUFRIX1BFTkRJTkdfRlJFRSh4KQkJCQkoKHgpIDw8IDE1KQorI2RlZmluZQkJREVQVEhfQ0FDSEVMSU5FX0ZSRUUoeCkJCQkJKCh4KSA8PCAyMCkKKworI2RlZmluZQlEQ1BfVElMSU5HX0NPTkZJRwkJCQkweDZDQTAKKyNkZWZpbmUJCVBJUEVfVElMSU5HKHgpCQkJCQkoKHgpIDw8IDEpCisjZGVmaW5lIAlCQU5LX1RJTElORyh4KQkJCQkJKCh4KSA8PCA0KQorI2RlZmluZQkJR1JPVVBfU0laRSh4KQkJCQkJKCh4KSA8PCA2KQorI2RlZmluZQkJUk9XX1RJTElORyh4KQkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJQkFOS19TV0FQUyh4KQkJCQkJKCh4KSA8PCAxMSkKKyNkZWZpbmUJCVNBTVBMRV9TUExJVCh4KQkJCQkJKCh4KSA8PCAxNCkKKyNkZWZpbmUJCUJBQ0tFTkRfTUFQKHgpCQkJCQkoKHgpIDw8IDE2KQorCisjZGVmaW5lIEdCX1RJTElOR19DT05GSUcJCQkJMHg5OEYwCisKKyNkZWZpbmUJR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcJCQkweDg5NTQKKyNkZWZpbmUJCUlOQUNUSVZFX1FEX1BJUEVTKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCUlOQUNUSVZFX1FEX1BJUEVTX01BU0sJCQkJMHgwMDAwRkYwMAorI2RlZmluZQkJSU5BQ1RJVkVfU0lNRFMoeCkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCUlOQUNUSVZFX1NJTURTX01BU0sJCQkJMHgwMEZGMDAwMAorCisjZGVmaW5lIFNRX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzAwCisjICAgICAgIGRlZmluZSBWQ19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIEVYUE9SVF9TUkNfQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgRFg5X0NPTlNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjICAgICAgIGRlZmluZSBBTFVfSU5TVF9QUkVGRVJfVkVDVE9SICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyMgICAgICAgZGVmaW5lIERYMTBfQ0xBTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorIyAgICAgICBkZWZpbmUgQ0xBVVNFX1NFUV9QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFBTX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI0KQorIyAgICAgICBkZWZpbmUgVlNfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjYpCisjICAgICAgIGRlZmluZSBHU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIEVTX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDMwKQorI2RlZmluZSBTUV9HUFJfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwNAorIyAgICAgICBkZWZpbmUgTlVNX1BTX0dQUlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIE5VTV9WU19HUFJTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgTlVNX0NMQVVTRV9URU1QX0dQUlMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjgpCisjZGVmaW5lIFNRX0dQUl9SRVNPVVJDRV9NR01UXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzA4CisjICAgICAgIGRlZmluZSBOVU1fR1NfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgTlVNX0VTX0dQUlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFNRX1RIUkVBRF9SRVNPVVJDRV9NR01UICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzBjCisjICAgICAgIGRlZmluZSBOVU1fUFNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgTlVNX1ZTX1RIUkVBRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIE5VTV9HU19USFJFQURTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgTlVNX0VTX1RIUkVBRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjZGVmaW5lIFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzEwCisjICAgICAgIGRlZmluZSBOVU1fUFNfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgTlVNX1ZTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzE0CisjICAgICAgIGRlZmluZSBOVU1fR1NfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgTlVNX0VTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisKKyNkZWZpbmUgR1JCTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjICAgICAgIGRlZmluZSBHUkJNX1JFQURfVElNRU9VVCh4KSAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyNkZWZpbmUJR1JCTV9TVEFUVVMJCQkJCTB4ODAxMAorI2RlZmluZQkJQ01ERklGT19BVkFJTF9NQVNLCQkJCTB4MDAwMDAwMUYKKyNkZWZpbmUJCUdVSV9BQ1RJVkUJCQkJCSgxPDwzMSkKKyNkZWZpbmUJR1JCTV9TVEFUVVMyCQkJCQkweDgwMTQKKyNkZWZpbmUJR1JCTV9TT0ZUX1JFU0VUCQkJCQkweDgwMjAKKyNkZWZpbmUJCVNPRlRfUkVTRVRfQ1AJCQkJCSgxPDwwKQorCisjZGVmaW5lCUhEUF9IT1NUX1BBVEhfQ05UTAkJCQkweDJDMDAKKyNkZWZpbmUJSERQX05PTlNVUkZBQ0VfQkFTRQkJCQkweDJDMDQKKyNkZWZpbmUJSERQX05PTlNVUkZBQ0VfSU5GTwkJCQkweDJDMDgKKyNkZWZpbmUJSERQX05PTlNVUkZBQ0VfU0laRQkJCQkweDJDMEMKKyNkZWZpbmUgSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTAkJCTB4NTRBMAorI2RlZmluZQlIRFBfVElMSU5HX0NPTkZJRwkJCQkweDJGM0MKKworI2RlZmluZSBNQ19WTV9BR1BfVE9QCQkJCQkweDIxODQKKyNkZWZpbmUgTUNfVk1fQUdQX0JPVAkJCQkJMHgyMTg4CisjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIxOEMKKyNkZWZpbmUgTUNfVk1fRkJfTE9DQVRJT04JCQkJMHgyMTgwCisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQV9DTlRMCQkJMHgyMTlDCisjZGVmaW5lIAlFTkFCTEVfTDFfVExCCQkJCQkoMSA8PCAwKQorI2RlZmluZQkJRU5BQkxFX0wxX0ZSQUdNRU5UX1BST0NFU1NJTkcJCQkoMSA8PCAxKQorI2RlZmluZQkJRU5BQkxFX0wxX1NUUklDVF9PUkRFUklORwkJCSgxIDw8IDIpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfTUFTSwkJCQkweDAwMDAwMEMwCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfU0hJRlQJCQk2CisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfUEFfT05MWQkJCSgwIDw8IDYpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfVVNFX1NZU19NQVAJCQkoMSA8PCA2KQorI2RlZmluZQkJU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUwkJCSgyIDw8IDYpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUwkJCSgzIDw8IDYpCisjZGVmaW5lCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVQkoMCA8PCA4KQorI2RlZmluZQkJU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UJKDEgPDwgOCkKKyNkZWZpbmUJCUVOQUJMRV9TRU1BUEhPUkVfTU9ERQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUJCUVOQUJMRV9XQUlUX0wyX1FVRVJZCQkJCSgxIDw8IDExKQorI2RlZmluZQkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKHgpCQkJKCgoeCkgJiA3KSA8PCAxMikKKyNkZWZpbmUJCUVGRkVDVElWRV9MMV9UTEJfU0laRV9NQVNLCQkJMHgwMDAwNzAwMAorI2RlZmluZQkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFX1NISUZUCQkJMTIKKyNkZWZpbmUJCUVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpCQkJKCgoeCkgJiA3KSA8PCAxNSkKKyNkZWZpbmUJCUVGRkVDVElWRV9MMV9RVUVVRV9TSVpFX01BU0sJCQkweDAwMDM4MDAwCisjZGVmaW5lCQlFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRV9TSElGVAkJCTE1CisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQl9DTlRMCQkJMHgyMUEwCisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0JfUkRfR0ZYX0NOVEwJCQkweDIxRkMKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DQl9SRF9IRFBfQ05UTAkJCTB4MjIwNAorI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNCX1JEX1BETUFfQ05UTAkJCTB4MjIwOAorI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNCX1JEX1NFTV9DTlRMCQkJMHgyMjBDCisjZGVmaW5lCU1DX1ZNX0wxX1RMQl9NQ0JfUkRfU1lTX0NOVEwJCQkweDIyMDAKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DRF9XUl9BX0NOVEwJCQkweDIxQTQKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DRF9XUl9CX0NOVEwJCQkweDIxQTgKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DQl9XUl9HRlhfQ05UTAkJCTB4MjIxMAorI2RlZmluZSBNQ19WTV9MMV9UTEJfTUNCX1dSX0hEUF9DTlRMCQkJMHgyMjE4CisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0JfV1JfUERNQV9DTlRMCQkJMHgyMjFDCisjZGVmaW5lIE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU0VNX0NOVEwJCQkweDIyMjAKKyNkZWZpbmUgTUNfVk1fTDFfVExCX01DQl9XUl9TWVNfQ05UTAkJCTB4MjIxNAorI2RlZmluZSBNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIJCQkweDIxOTAKKyNkZWZpbmUJCUxPR0lDQUxfUEFHRV9OVU1CRVJfTUFTSwkJCTB4MDAwRkZGRkYKKyNkZWZpbmUJCUxPR0lDQUxfUEFHRV9OVU1CRVJfU0hJRlQJCQkwCisjZGVmaW5lIE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIJCQkweDIxOTQKKyNkZWZpbmUgTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUgkJMHgyMTk4CisKKyNkZWZpbmUJUEFfQ0xfRU5IQU5DRQkJCQkJMHg4QTE0CisjZGVmaW5lCQlDTElQX1ZUWF9SRU9SREVSX0VOQQkJCQkoMSA8PCAwKQorI2RlZmluZQkJTlVNX0NMSVBfU0VRKHgpCQkJCQkoKHgpIDw8IDEpCisjZGVmaW5lIFBBX1NDX0FBX0NPTkZJRwkJCQkJMHgyOEMwNAorI2RlZmluZQlQQV9TQ19BQV9TQU1QTEVfTE9DU18yUwkJCQkweDhCNDAKKyNkZWZpbmUJUEFfU0NfQUFfU0FNUExFX0xPQ1NfNFMJCQkJMHg4QjQ0CisjZGVmaW5lCVBBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMAkJCTB4OEI0OAorI2RlZmluZQlQQV9TQ19BQV9TQU1QTEVfTE9DU184U19XRDEJCQkweDhCNEMKKyNkZWZpbmUJCVMwX1goeCkJCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlTMF9ZKHgpCQkJCQkJKCh4KSA8PCA0KQorI2RlZmluZQkJUzFfWCh4KQkJCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCVMxX1koeCkJCQkJCQkoKHgpIDw8IDEyKQorI2RlZmluZQkJUzJfWCh4KQkJCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCQlTMl9ZKHgpCQkJCQkJKCh4KSA8PCAyMCkKKyNkZWZpbmUJCVMzX1goeCkJCQkJCQkoKHgpIDw8IDI0KQorI2RlZmluZQkJUzNfWSh4KQkJCQkJCSgoeCkgPDwgMjgpCisjZGVmaW5lCQlTNF9YKHgpCQkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJUzRfWSh4KQkJCQkJCSgoeCkgPDwgNCkKKyNkZWZpbmUJCVM1X1goeCkJCQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCQlTNV9ZKHgpCQkJCQkJKCh4KSA8PCAxMikKKyNkZWZpbmUJCVM2X1goeCkJCQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQkJUzZfWSh4KQkJCQkJCSgoeCkgPDwgMjApCisjZGVmaW5lCQlTN19YKHgpCQkJCQkJKCh4KSA8PCAyNCkKKyNkZWZpbmUJCVM3X1koeCkJCQkJCQkoKHgpIDw8IDI4KQorI2RlZmluZSBQQV9TQ19DTElQUkVDVF9SVUxFCQkJCTB4MjgyMGMKKyNkZWZpbmUJUEFfU0NfRU5IQU5DRQkJCQkJMHg4QkYwCisjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX1RJTEVfQ05UKHgpCQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgUEFfU0NfTElORV9TVElQUExFCQkJCTB4MjhBMEMKKyNkZWZpbmUJUEFfU0NfTElORV9TVElQUExFX1NUQVRFCQkJMHg4QjEwCisjZGVmaW5lIFBBX1NDX01PREVfQ05UTAkJCQkJMHgyOEE0QworI2RlZmluZQlQQV9TQ19NVUxUSV9DSElQX0NOVEwJCQkJMHg4QjIwCisKKyNkZWZpbmUgUEFfU0NfU0NSRUVOX1NDSVNTT1JfVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAzMAorI2RlZmluZSBQQV9TQ19HRU5FUklDX1NDSVNTT1JfVEwgICAgICAgICAgICAgICAgICAgICAgICAweDI4MjQwCisjZGVmaW5lIFBBX1NDX1dJTkRPV19TQ0lTU09SX1RMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMDQKKworI2RlZmluZQlQQ0lFX1BPUlRfSU5ERVgJCQkJCTB4MDAzOAorI2RlZmluZQlQQ0lFX1BPUlRfREFUQQkJCQkJMHgwMDNDCisKKyNkZWZpbmUgUkFNQ0ZHCQkJCQkJMHgyNDA4CisjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAorI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMQorI2RlZmluZQkJTk9PRlJBTktfU0hJRlQJCQkJCTEKKyNkZWZpbmUJCU5PT0ZSQU5LX01BU0sJCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUJCU5PT0ZST1dTX1NISUZUCQkJCQkyCisjZGVmaW5lCQlOT09GUk9XU19NQVNLCQkJCQkweDAwMDAwMDFDCisjZGVmaW5lCQlOT09GQ09MU19TSElGVAkJCQkJNQorI2RlZmluZQkJTk9PRkNPTFNfTUFTSwkJCQkJMHgwMDAwMDA2MAorI2RlZmluZQkJQ0hBTlNJWkVfU0hJRlQJCQkJCTcKKyNkZWZpbmUJCUNIQU5TSVpFX01BU0sJCQkJCTB4MDAwMDAwODAKKyNkZWZpbmUJCUJVUlNUTEVOR1RIX1NISUZUCQkJCTgKKyNkZWZpbmUJCUJVUlNUTEVOR1RIX01BU0sJCQkJMHgwMDAwMDEwMAorI2RlZmluZQkJQ0hBTlNJWkVfT1ZFUlJJREUJCQkJKDEgPDwgMTApCisKKyNkZWZpbmUJU0NSQVRDSF9SRUcwCQkJCQkweDg1MDAKKyNkZWZpbmUJU0NSQVRDSF9SRUcxCQkJCQkweDg1MDQKKyNkZWZpbmUJU0NSQVRDSF9SRUcyCQkJCQkweDg1MDgKKyNkZWZpbmUJU0NSQVRDSF9SRUczCQkJCQkweDg1MEMKKyNkZWZpbmUJU0NSQVRDSF9SRUc0CQkJCQkweDg1MTAKKyNkZWZpbmUJU0NSQVRDSF9SRUc1CQkJCQkweDg1MTQKKyNkZWZpbmUJU0NSQVRDSF9SRUc2CQkJCQkweDg1MTgKKyNkZWZpbmUJU0NSQVRDSF9SRUc3CQkJCQkweDg1MUMKKyNkZWZpbmUJU0NSQVRDSF9VTVNLCQkJCQkweDg1NDAKKyNkZWZpbmUJU0NSQVRDSF9BRERSCQkJCQkweDg1NDQKKworI2RlZmluZQlTUElfQ09ORklHX0NOVEwJCQkJCTB4OTEwMAorI2RlZmluZQkJR1BSX1dSSVRFX1BSSU9SSVRZKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCURJU0FCTEVfSU5URVJQXzEJCQkJKDEgPDwgNSkKKyNkZWZpbmUJU1BJX0NPTkZJR19DTlRMXzEJCQkJMHg5MTNDCisjZGVmaW5lCQlWVFhfRE9ORV9ERUxBWSh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlJTlRFUlBfT05FX1BSSU1fUEVSX1JPVwkJCQkoMSA8PCA0KQorI2RlZmluZQlTUElfSU5QVVRfWgkJCQkJMHgyODZEOAorI2RlZmluZQlTUElfUFNfSU5fQ09OVFJPTF8wCQkJCTB4Mjg2Q0MKKyNkZWZpbmUJCU5VTV9JTlRFUlAoeCkJCQkJCSgoeCk8PDApCisjZGVmaW5lCQlQT1NJVElPTl9FTkEJCQkJCSgxPDw4KQorI2RlZmluZQkJUE9TSVRJT05fQ0VOVFJPSUQJCQkJKDE8PDkpCisjZGVmaW5lCQlQT1NJVElPTl9BRERSKHgpCQkJCSgoeCk8PDEwKQorI2RlZmluZQkJUEFSQU1fR0VOKHgpCQkJCQkoKHgpPDwxNSkKKyNkZWZpbmUJCVBBUkFNX0dFTl9BRERSKHgpCQkJCSgoeCk8PDE5KQorI2RlZmluZQkJQkFSWUNfU0FNUExFX0NOVEwoeCkJCQkJKCh4KTw8MjYpCisjZGVmaW5lCQlQRVJTUF9HUkFESUVOVF9FTkEJCQkJKDE8PDI4KQorI2RlZmluZQkJTElORUFSX0dSQURJRU5UX0VOQQkJCQkoMTw8MjkpCisjZGVmaW5lCQlQT1NJVElPTl9TQU1QTEUJCQkJCSgxPDwzMCkKKyNkZWZpbmUJCUJBUllDX0FUX1NBTVBMRV9FTkEJCQkJKDE8PDMxKQorI2RlZmluZQlTUElfUFNfSU5fQ09OVFJPTF8xCQkJCTB4Mjg2RDAKKyNkZWZpbmUJCUdFTl9JTkRFWF9QSVgJCQkJCSgxPDwwKQorI2RlZmluZQkJR0VOX0lOREVYX1BJWF9BRERSKHgpCQkJCSgoeCk8PDEpCisjZGVmaW5lCQlGUk9OVF9GQUNFX0VOQQkJCQkJKDE8PDgpCisjZGVmaW5lCQlGUk9OVF9GQUNFX0NIQU4oeCkJCQkJKCh4KTw8OSkKKyNkZWZpbmUJCUZST05UX0ZBQ0VfQUxMX0JJVFMJCQkJKDE8PDExKQorI2RlZmluZQkJRlJPTlRfRkFDRV9BRERSKHgpCQkJCSgoeCk8PDEyKQorI2RlZmluZQkJRk9HX0FERFIoeCkJCQkJCSgoeCk8PDE3KQorI2RlZmluZQkJRklYRURfUFRfUE9TSVRJT05fRU5BCQkJCSgxPDwyNCkKKyNkZWZpbmUJCUZJWEVEX1BUX1BPU0lUSU9OX0FERFIoeCkJCQkoKHgpPDwyNSkKKworI2RlZmluZQlTUV9NU19GSUZPX1NJWkVTCQkJCTB4OENGMAorI2RlZmluZQkJQ0FDSEVfRklGT19TSVpFKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCUZFVENIX0ZJRk9fSElXQVRFUih4KQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCQlET05FX0ZJRk9fSElXQVRFUih4KQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQkJQUxVX1VQREFURV9GSUZPX0hJV0FURVIoeCkJCQkoKHgpIDw8IDI0KQorI2RlZmluZQlTUV9QR01fU1RBUlRfRVMJCQkJCTB4Mjg4ODAKKyNkZWZpbmUJU1FfUEdNX1NUQVJUX0ZTCQkJCQkweDI4ODk0CisjZGVmaW5lCVNRX1BHTV9TVEFSVF9HUwkJCQkJMHgyODg2QworI2RlZmluZQlTUV9QR01fU1RBUlRfUFMJCQkJCTB4Mjg4NDAKKyNkZWZpbmUgU1FfUEdNX1JFU09VUkNFU19QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODg1MAorI2RlZmluZSBTUV9QR01fRVhQT1JUU19QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODU0CisjZGVmaW5lIFNRX1BHTV9DRl9PRkZTRVRfUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4Y2MKKyNkZWZpbmUJU1FfUEdNX1NUQVJUX1ZTCQkJCQkweDI4ODU4CisjZGVmaW5lIFNRX1BHTV9SRVNPVVJDRVNfVlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg4NjgKKyNkZWZpbmUgU1FfUEdNX0NGX09GRlNFVF9WUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODhkMAorI2RlZmluZQlTUV9WVFhfQ09OU1RBTlRfV09SRDZfMAkJCQkweDM4MDE4CisjZGVmaW5lCQlTX19TUV9WVFhfQ09OU1RBTlRfVFlQRSh4KQkJCSgoKHgpICYgMykgPDwgMzApCisjZGVmaW5lCQlHX19TUV9WVFhfQ09OU1RBTlRfVFlQRSh4KQkJCSgoKHgpID4+IDMwKSAmIDMpCisjZGVmaW5lCQkJU1FfVEVYX1ZUWF9JTlZBTElEX1RFWFRVUkUJCQkweDAKKyNkZWZpbmUJCQlTUV9URVhfVlRYX0lOVkFMSURfQlVGRkVSCQkJMHgxCisjZGVmaW5lCQkJU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFCQkJMHgyCisjZGVmaW5lCQkJU1FfVEVYX1ZUWF9WQUxJRF9CVUZGRVIJCQkJMHgzCisKKworI2RlZmluZQlTWF9NSVNDCQkJCQkJMHgyODM1MAorI2RlZmluZQlTWF9ERUJVR18xCQkJCQkweDkwNTQKKyNkZWZpbmUJCVNNWF9FVkVOVF9SRUxFQVNFCQkJCSgxIDw8IDApCisjZGVmaW5lCQlFTkFCTEVfTkVXX1NNWF9BRERSRVNTCQkJCSgxIDw8IDE2KQorCisjZGVmaW5lCVRBX0NOVExfQVVYCQkJCQkweDk1MDgKKyNkZWZpbmUJCURJU0FCTEVfQ1VCRV9XUkFQCQkJCSgxIDw8IDApCisjZGVmaW5lCQlESVNBQkxFX0NVQkVfQU5JU08JCQkJKDEgPDwgMSkKKyNkZWZpbmUJCVNZTkNfR1JBRElFTlQJCQkJCSgxIDw8IDI0KQorI2RlZmluZQkJU1lOQ19XQUxLRVIJCQkJCSgxIDw8IDI1KQorI2RlZmluZQkJU1lOQ19BTElHTkVSCQkJCQkoMSA8PCAyNikKKyNkZWZpbmUJCUJJTElORUFSX1BSRUNJU0lPTl82X0JJVAkJCSgwIDw8IDMxKQorI2RlZmluZQkJQklMSU5FQVJfUFJFQ0lTSU9OXzhfQklUCQkJKDEgPDwgMzEpCisKKyNkZWZpbmUJVENfQ05UTAkJCQkJCTB4OTYwOAorI2RlZmluZQkJVENfTDJfU0laRSh4KQkJCQkJKCh4KTw8NSkKKyNkZWZpbmUJCUwyX0RJU0FCTEVfTEFURV9ISVQJCQkJKDE8PDkpCisKKworI2RlZmluZQlWR1RfQ0FDSEVfSU5WQUxJREFUSU9OCQkJCTB4ODhDNAorI2RlZmluZQkJQ0FDSEVfSU5WQUxJREFUSU9OKHgpCQkJCSgoeCk8PDApCisjZGVmaW5lCQkJVkNfT05MWQkJCQkJCTAKKyNkZWZpbmUJCQlUQ19PTkxZCQkJCQkJMQorI2RlZmluZQkJCVZDX0FORF9UQwkJCQkJMgorI2RlZmluZQlWR1RfRE1BX0JBU0UJCQkJCTB4Mjg3RTgKKyNkZWZpbmUJVkdUX0RNQV9CQVNFX0hJCQkJCQkweDI4N0U0CisjZGVmaW5lCVZHVF9FU19QRVJfR1MJCQkJCTB4ODhDQworI2RlZmluZQlWR1RfR1NfUEVSX0VTCQkJCQkweDg4QzgKKyNkZWZpbmUJVkdUX0dTX1BFUl9WUwkJCQkJMHg4OEU4CisjZGVmaW5lCVZHVF9HU19WRVJURVhfUkVVU0UJCQkJMHg4OEQ0CisjZGVmaW5lIFZHVF9QUklNSVRJVkVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk1OAorI2RlZmluZQlWR1RfTlVNX0lOU1RBTkNFUwkJCQkweDg5NzQKKyNkZWZpbmUJVkdUX09VVF9ERUFMTE9DX0NOVEwJCQkJMHgyOEM1QworI2RlZmluZQkJREVBTExPQ19ESVNUX01BU0sJCQkJMHgwMDAwMDA3RgorI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8wCQkJMHgyOEIxMAorI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8xCQkJMHgyOEIxNAorI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8yCQkJMHgyOEIxOAorI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF8zCQkJMHgyOEIxYworI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8wCQkJMHgyOEI0NAorI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8xCQkJMHgyOEI0OAorI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8yCQkJMHgyOEI0YworI2RlZmluZQlWR1RfU1RSTU9VVF9CQVNFX09GRlNFVF9ISV8zCQkJMHgyOEI1MAorI2RlZmluZQlWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8wCQkJMHgyOEFEOAorI2RlZmluZQlWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8xCQkJMHgyOEFFOAorI2RlZmluZQlWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8yCQkJMHgyOEFGOAorI2RlZmluZQlWR1RfU1RSTU9VVF9CVUZGRVJfQkFTRV8zCQkJMHgyOEIwOAorI2RlZmluZQlWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzAJCQkweDI4QURDCisjZGVmaW5lCVZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMQkJCTB4MjhBRUMKKyNkZWZpbmUJVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8yCQkJMHgyOEFGQworI2RlZmluZQlWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzMJCQkweDI4QjBDCisjZGVmaW5lCVZHVF9TVFJNT1VUX0VOCQkJCQkweDI4QUIwCisjZGVmaW5lCVZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTAkJCTB4MjhDNTgKKyNkZWZpbmUJCVZUWF9SRVVTRV9ERVBUSF9NQVNLCQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgVkdUX0VWRU5UX0lOSVRJQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOGE5MAorIyAgICAgICBkZWZpbmUgQ0FDSEVfRkxVU0hfQU5EX0lOVl9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICgweDE2IDw8IDApCisKKyNkZWZpbmUgVk1fQ09OVEVYVDBfQ05UTAkJCQkweDE0MTAKKyNkZWZpbmUJCUVOQUJMRV9DT05URVhUCQkJCQkoMSA8PCAwKQorI2RlZmluZQkJUEFHRV9UQUJMRV9ERVBUSCh4KQkJCQkoKCh4KSAmIDMpIDw8IDEpCisjZGVmaW5lCQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxUCQkoMSA8PCA0KQorI2RlZmluZSBWTV9DT05URVhUMF9JTlZBTElEQVRJT05fTE9XX0FERFIJCTB4MTQ5MAorI2RlZmluZSBWTV9DT05URVhUMF9JTlZBTElEQVRJT05fSElHSF9BRERSCQkweDE0QjAKKyNkZWZpbmUgVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIJCTB4MTU3NAorI2RlZmluZSBWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIJCTB4MTU5NAorI2RlZmluZSBWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSCQkJMHgxNUI0CisjZGVmaW5lIFZNX0NPTlRFWFQwX1BST1RFQ1RJT05fRkFVTFRfREVGQVVMVF9BRERSCTB4MTU1NAorI2RlZmluZSBWTV9DT05URVhUMF9SRVFVRVNUX1JFU1BPTlNFCQkJMHgxNDcwCisjZGVmaW5lCQlSRVFVRVNUX1RZUEUoeCkJCQkJCSgoKHgpICYgMHhmKSA8PCAwKQorI2RlZmluZQkJUkVTUE9OU0VfVFlQRV9NQVNLCQkJCTB4MDAwMDAwRjAKKyNkZWZpbmUJCVJFU1BPTlNFX1RZUEVfU0hJRlQJCQkJNAorI2RlZmluZSBWTV9MMl9DTlRMCQkJCQkweDE0MDAKKyNkZWZpbmUJCUVOQUJMRV9MMl9DQUNIRQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCUVOQUJMRV9MMl9GUkFHTUVOVF9QUk9DRVNTSU5HCQkJKDEgPDwgMSkKKyNkZWZpbmUJCUVOQUJMRV9MMl9QVEVfQ0FDSEVfTFJVX1VQREFURV9CWV9XUklURQkJKDEgPDwgOSkKKyNkZWZpbmUJCUVGRkVDVElWRV9MMl9RVUVVRV9TSVpFKHgpCQkJKCgoeCkgJiA3KSA8PCAxMykKKyNkZWZpbmUgVk1fTDJfQ05UTDIJCQkJCTB4MTQwNAorI2RlZmluZQkJSU5WQUxJREFURV9BTExfTDFfVExCUwkJCQkoMSA8PCAwKQorI2RlZmluZQkJSU5WQUxJREFURV9MMl9DQUNIRQkJCQkoMSA8PCAxKQorI2RlZmluZSBWTV9MMl9DTlRMMwkJCQkJMHgxNDA4CisjZGVmaW5lCQlCQU5LX1NFTEVDVF8wKHgpCQkJCSgoKHgpICYgMHgxZikgPDwgMCkKKyNkZWZpbmUJCUJBTktfU0VMRUNUXzEoeCkJCQkJKCgoeCkgJiAweDFmKSA8PCA1KQorI2RlZmluZQkJTDJfQ0FDSEVfVVBEQVRFX01PREUoeCkJCQkJKCgoeCkgJiAzKSA8PCAxMCkKKyNkZWZpbmUJVk1fTDJfU1RBVFVTCQkJCQkweDE0MEMKKyNkZWZpbmUJCUwyX0JVU1kJCQkJCQkoMSA8PCAwKQorCisjZGVmaW5lCVdBSVRfVU5USUwJCQkJCTB4ODA0MAorI2RlZmluZSAgICAgICAgIFdBSVRfMkRfSURMRV9iaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQorI2RlZmluZSAgICAgICAgIFdBSVRfM0RfSURMRV9iaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQorI2RlZmluZSAgICAgICAgIFdBSVRfMkRfSURMRUNMRUFOX2JpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSAgICAgICAgIFdBSVRfM0RfSURMRUNMRUFOX2JpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQorCisKKworLyoKKyAqIFBNNAorICovCisjZGVmaW5lCVBBQ0tFVF9UWVBFMAkwCisjZGVmaW5lCVBBQ0tFVF9UWVBFMQkxCisjZGVmaW5lCVBBQ0tFVF9UWVBFMgkyCisjZGVmaW5lCVBBQ0tFVF9UWVBFMwkzCisKKyNkZWZpbmUgQ1BfUEFDS0VUX0dFVF9UWVBFKGgpICgoKGgpID4+IDMwKSAmIDMpCisjZGVmaW5lIENQX1BBQ0tFVF9HRVRfQ09VTlQoaCkgKCgoaCkgPj4gMTYpICYgMHgzRkZGKQorI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9SRUcoaCkgKCgoaCkgJiAweEZGRkYpIDw8IDIpCisjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCisjZGVmaW5lIFBBQ0tFVDAocmVnLCBuKQkoKFBBQ0tFVF9UWVBFMCA8PCAzMCkgfAkJCQlcCisJCQkgKCgocmVnKSA+PiAyKSAmIDB4RkZGRikgfAkJCVwKKwkJCSAoKG4pICYgMHgzRkZGKSA8PCAxNikKKyNkZWZpbmUgUEFDS0VUMyhvcCwgbikJKChQQUNLRVRfVFlQRTMgPDwgMzApIHwJCQkJXAorCQkJICgoKG9wKSAmIDB4RkYpIDw8IDgpIHwJCQkJXAorCQkJICgobikgJiAweDNGRkYpIDw8IDE2KQorCisvKiBQYWNrZXQgMyB0eXBlcyAqLworI2RlZmluZQlQQUNLRVQzX05PUAkJCQkJMHgxMAorI2RlZmluZQlQQUNLRVQzX0lORElSRUNUX0JVRkZFUl9FTkQJCQkweDE3CisjZGVmaW5lCVBBQ0tFVDNfU0VUX1BSRURJQ0FUSU9OCQkJCTB4MjAKKyNkZWZpbmUJUEFDS0VUM19SRUdfUk1XCQkJCQkweDIxCisjZGVmaW5lCVBBQ0tFVDNfQ09ORF9FWEVDCQkJCTB4MjIKKyNkZWZpbmUJUEFDS0VUM19QUkVEX0VYRUMJCQkJMHgyMworI2RlZmluZQlQQUNLRVQzX1NUQVJUXzNEX0NNREJVRgkJCQkweDI0CisjZGVmaW5lCVBBQ0tFVDNfRFJBV19JTkRFWF8yCQkJCTB4MjcKKyNkZWZpbmUJUEFDS0VUM19DT05URVhUX0NPTlRST0wJCQkJMHgyOAorI2RlZmluZQlQQUNLRVQzX0RSQVdfSU5ERVhfSU1NRF9CRQkJCTB4MjkKKyNkZWZpbmUJUEFDS0VUM19JTkRFWF9UWVBFCQkJCTB4MkEKKyNkZWZpbmUJUEFDS0VUM19EUkFXX0lOREVYCQkJCTB4MkIKKyNkZWZpbmUJUEFDS0VUM19EUkFXX0lOREVYX0FVVE8JCQkJMHgyRAorI2RlZmluZQlQQUNLRVQzX0RSQVdfSU5ERVhfSU1NRAkJCQkweDJFCisjZGVmaW5lCVBBQ0tFVDNfTlVNX0lOU1RBTkNFUwkJCQkweDJGCisjZGVmaW5lCVBBQ0tFVDNfU1RSTU9VVF9CVUZGRVJfVVBEQVRFCQkJMHgzNAorI2RlZmluZQlQQUNLRVQzX0lORElSRUNUX0JVRkZFUl9NUAkJCTB4MzgKKyNkZWZpbmUJUEFDS0VUM19NRU1fU0VNQVBIT1JFCQkJCTB4MzkKKyNkZWZpbmUJUEFDS0VUM19NUEVHX0lOREVYCQkJCTB4M0EKKyNkZWZpbmUJUEFDS0VUM19XQUlUX1JFR19NRU0JCQkJMHgzQworI2RlZmluZQlQQUNLRVQzX01FTV9XUklURQkJCQkweDNECisjZGVmaW5lCVBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSCQkJCTB4MzIKKyNkZWZpbmUJUEFDS0VUM19DUF9JTlRFUlJVUFQJCQkJMHg0MAorI2RlZmluZQlQQUNLRVQzX1NVUkZBQ0VfU1lOQwkJCQkweDQzCisjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19DQjBfREVTVF9CQVNFX0VOQSAgICAoMSA8PCA2KQorIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjMpCisjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19WQ19BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyNCkKKyMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX0NCX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDI1KQorIyAgICAgICAgICAgICAgZGVmaW5lIFBBQ0tFVDNfREJfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjYpCisjICAgICAgICAgICAgICBkZWZpbmUgUEFDS0VUM19TSF9BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyNykKKyMgICAgICAgICAgICAgIGRlZmluZSBQQUNLRVQzX1NNWF9BQ1RJT05fRU5BICAgICAgICgxIDw8IDI4KQorI2RlZmluZQlQQUNLRVQzX01FX0lOSVRJQUxJWkUJCQkJMHg0NAorI2RlZmluZQkJUEFDS0VUM19NRV9JTklUSUFMSVpFX0RFVklDRV9JRCh4KSAoKHgpIDw8IDE2KQorI2RlZmluZQlQQUNLRVQzX0NPTkRfV1JJVEUJCQkJMHg0NQorI2RlZmluZQlQQUNLRVQzX0VWRU5UX1dSSVRFCQkJCTB4NDYKKyNkZWZpbmUJUEFDS0VUM19FVkVOVF9XUklURV9FT1AJCQkJMHg0NworI2RlZmluZQlQQUNLRVQzX09ORV9SRUdfV1JJVEUJCQkJMHg1NworI2RlZmluZQlQQUNLRVQzX1NFVF9DT05GSUdfUkVHCQkJCTB4NjgKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUCQkJMHgwMDAwODAwMAorI2RlZmluZQkJUEFDS0VUM19TRVRfQ09ORklHX1JFR19FTkQJCQkweDAwMDBhYzAwCisjZGVmaW5lCVBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHCQkJCTB4NjkKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVAkJCTB4MDAwMjgwMDAKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX0VORAkJCTB4MDAwMjkwMDAKKyNkZWZpbmUJUEFDS0VUM19TRVRfQUxVX0NPTlNUCQkJCTB4NkEKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0FMVV9DT05TVF9PRkZTRVQJCQkweDAwMDMwMDAwCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9BTFVfQ09OU1RfRU5ECQkJMHgwMDAzMjAwMAorI2RlZmluZQlQQUNLRVQzX1NFVF9CT09MX0NPTlNUCQkJCTB4NkIKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUCQkJMHgwMDAzZTM4MAorI2RlZmluZQkJUEFDS0VUM19TRVRfQk9PTF9DT05TVF9FTkQJCQkweDAwMDQwMDAwCisjZGVmaW5lCVBBQ0tFVDNfU0VUX0xPT1BfQ09OU1QJCQkJMHg2QworI2RlZmluZQkJUEFDS0VUM19TRVRfTE9PUF9DT05TVF9PRkZTRVQJCQkweDAwMDNlMjAwCisjZGVmaW5lCQlQQUNLRVQzX1NFVF9MT09QX0NPTlNUX0VORAkJCTB4MDAwM2UzODAKKyNkZWZpbmUJUEFDS0VUM19TRVRfUkVTT1VSQ0UJCQkJMHg2RAorI2RlZmluZQkJUEFDS0VUM19TRVRfUkVTT1VSQ0VfT0ZGU0VUCQkJMHgwMDAzODAwMAorI2RlZmluZQkJUEFDS0VUM19TRVRfUkVTT1VSQ0VfRU5ECQkJMHgwMDAzYzAwMAorI2RlZmluZQlQQUNLRVQzX1NFVF9TQU1QTEVSCQkJCTB4NkUKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX1NBTVBMRVJfT0ZGU0VUCQkJMHgwMDAzYzAwMAorI2RlZmluZQkJUEFDS0VUM19TRVRfU0FNUExFUl9FTkQJCQkJMHgwMDAzY2ZmMAorI2RlZmluZQlQQUNLRVQzX1NFVF9DVExfQ09OU1QJCQkJMHg2RgorI2RlZmluZQkJUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVAkJCTB4MDAwM2NmZjAKKyNkZWZpbmUJCVBBQ0tFVDNfU0VUX0NUTF9DT05TVF9FTkQJCQkweDAwMDNlMjAwCisjZGVmaW5lCVBBQ0tFVDNfU1VSRkFDRV9CQVNFX1VQREFURQkJCTB4NzMKKworCisjZGVmaW5lCVJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVAkJMHg4MDIwCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKHgpCQkoKCh4KSAmIDEpIDw8IDApCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0NCKHgpCQkoKCh4KSAmIDEpIDw8IDEpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0NSKHgpCQkoKCh4KSAmIDEpIDw8IDIpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0RCKHgpCQkoKCh4KSAmIDEpIDw8IDMpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1BBKHgpCQkoKCh4KSAmIDEpIDw8IDUpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1NDKHgpCQkoKCh4KSAmIDEpIDw8IDYpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1NNWCh4KQkJKCgoeCkgJiAxKSA8PCA3KQorI2RlZmluZQkJU18wMDgwMjBfU09GVF9SRVNFVF9TUEkoeCkJCSgoKHgpICYgMSkgPDwgOCkKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfU0goeCkJCSgoKHgpICYgMSkgPDwgOSkKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfU1goeCkJCSgoKHgpICYgMSkgPDwgMTApCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1RDKHgpCQkoKCh4KSAmIDEpIDw8IDExKQorI2RlZmluZQkJU18wMDgwMjBfU09GVF9SRVNFVF9UQSh4KQkJKCgoeCkgJiAxKSA8PCAxMikKKyNkZWZpbmUJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkMoeCkJCSgoKHgpICYgMSkgPDwgMTMpCisjZGVmaW5lCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1ZHVCh4KQkJKCgoeCkgJiAxKSA8PCAxNCkKKyNkZWZpbmUJUl8wMDgwMTBfR1JCTV9TVEFUVVMJCQkweDgwMTAKKyNkZWZpbmUJCVNfMDA4MDEwX0NNREZJRk9fQVZBSUwoeCkJCSgoKHgpICYgMHgxRikgPDwgMCkKKyNkZWZpbmUJCVNfMDA4MDEwX0NQX1JRX1BFTkRJTkcoeCkJCSgoKHgpICYgMSkgPDwgNikKKyNkZWZpbmUJCVNfMDA4MDEwX0NGX1JRX1BFTkRJTkcoeCkJCSgoKHgpICYgMSkgPDwgNykKKyNkZWZpbmUJCVNfMDA4MDEwX1BGX1JRX1BFTkRJTkcoeCkJCSgoKHgpICYgMSkgPDwgOCkKKyNkZWZpbmUJCVNfMDA4MDEwX0dSQk1fRUVfQlVTWSh4KQkJKCgoeCkgJiAxKSA8PCAxMCkKKyNkZWZpbmUJCVNfMDA4MDEwX1ZDX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDExKQorI2RlZmluZQkJU18wMDgwMTBfREIwM19DTEVBTih4KQkJCSgoKHgpICYgMSkgPDwgMTIpCisjZGVmaW5lCQlTXzAwODAxMF9DQjAzX0NMRUFOKHgpCQkJKCgoeCkgJiAxKSA8PCAxMykKKyNkZWZpbmUJCVNfMDA4MDEwX1ZHVF9CVVNZX05PX0RNQSh4KQkJKCgoeCkgJiAxKSA8PCAxNikKKyNkZWZpbmUJCVNfMDA4MDEwX1ZHVF9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxNykKKyNkZWZpbmUJCVNfMDA4MDEwX1RBMDNfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMTgpCisjZGVmaW5lCQlTXzAwODAxMF9UQ19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxOSkKKyNkZWZpbmUJCVNfMDA4MDEwX1NYX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDIwKQorI2RlZmluZQkJU18wMDgwMTBfU0hfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMjEpCisjZGVmaW5lCQlTXzAwODAxMF9TUEkwM19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyMikKKyNkZWZpbmUJCVNfMDA4MDEwX1NNWF9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyMykKKyNkZWZpbmUJCVNfMDA4MDEwX1NDX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDI0KQorI2RlZmluZQkJU18wMDgwMTBfUEFfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMjUpCisjZGVmaW5lCQlTXzAwODAxMF9EQjAzX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDI2KQorI2RlZmluZQkJU18wMDgwMTBfQ1JfQlVTWSh4KQkJCSgoKHgpICYgMSkgPDwgMjcpCisjZGVmaW5lCQlTXzAwODAxMF9DUF9DT0hFUkVOQ1lfQlVTWSh4KQkJKCgoeCkgJiAxKSA8PCAyOCkKKyNkZWZpbmUJCVNfMDA4MDEwX0NQX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDI5KQorI2RlZmluZQkJU18wMDgwMTBfQ0IwM19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAzMCkKKyNkZWZpbmUJCVNfMDA4MDEwX0dVSV9BQ1RJVkUoeCkJCQkoKCh4KSAmIDEpIDw8IDMxKQorI2RlZmluZQkJR18wMDgwMTBfQ01ERklGT19BVkFJTCh4KQkJKCgoeCkgPj4gMCkgJiAweDFGKQorI2RlZmluZQkJR18wMDgwMTBfQ1BfUlFfUEVORElORyh4KQkJKCgoeCkgPj4gNikgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfQ0ZfUlFfUEVORElORyh4KQkJKCgoeCkgPj4gNykgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfUEZfUlFfUEVORElORyh4KQkJKCgoeCkgPj4gOCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfR1JCTV9FRV9CVVNZKHgpCQkoKCh4KSA+PiAxMCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfVkNfQlVTWSh4KQkJCSgoKHgpID4+IDExKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9EQjAzX0NMRUFOKHgpCQkJKCgoeCkgPj4gMTIpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX0NCMDNfQ0xFQU4oeCkJCQkoKCh4KSA+PiAxMykgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfVkdUX0JVU1lfTk9fRE1BKHgpCQkoKCh4KSA+PiAxNikgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfVkdUX0JVU1koeCkJCQkoKCh4KSA+PiAxNykgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfVEEwM19CVVNZKHgpCQkJKCgoeCkgPj4gMTgpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX1RDX0JVU1koeCkJCQkoKCh4KSA+PiAxOSkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfU1hfQlVTWSh4KQkJCSgoKHgpID4+IDIwKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9TSF9CVVNZKHgpCQkJKCgoeCkgPj4gMjEpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX1NQSTAzX0JVU1koeCkJCQkoKCh4KSA+PiAyMikgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfU01YX0JVU1koeCkJCQkoKCh4KSA+PiAyMykgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfU0NfQlVTWSh4KQkJCSgoKHgpID4+IDI0KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9QQV9CVVNZKHgpCQkJKCgoeCkgPj4gMjUpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX0RCMDNfQlVTWSh4KQkJCSgoKHgpID4+IDI2KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9DUl9CVVNZKHgpCQkJKCgoeCkgPj4gMjcpICYgMSkKKyNkZWZpbmUJCUdfMDA4MDEwX0NQX0NPSEVSRU5DWV9CVVNZKHgpCQkoKCh4KSA+PiAyOCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfQ1BfQlVTWSh4KQkJCSgoKHgpID4+IDI5KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxMF9DQjAzX0JVU1koeCkJCQkoKCh4KSA+PiAzMCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTBfR1VJX0FDVElWRSh4KQkJCSgoKHgpID4+IDMxKSAmIDEpCisjZGVmaW5lCVJfMDA4MDE0X0dSQk1fU1RBVFVTMgkJCTB4ODAxNAorI2RlZmluZQkJU18wMDgwMTRfQ1JfQ0xFQU4oeCkJCQkoKCh4KSAmIDEpIDw8IDApCisjZGVmaW5lCQlTXzAwODAxNF9TTVhfQ0xFQU4oeCkJCQkoKCh4KSAmIDEpIDw8IDEpCisjZGVmaW5lCQlTXzAwODAxNF9TUEkwX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDgpCisjZGVmaW5lCQlTXzAwODAxNF9TUEkxX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDkpCisjZGVmaW5lCQlTXzAwODAxNF9TUEkyX0JVU1koeCkJCQkoKCh4KSAmIDEpIDw8IDEwKQorI2RlZmluZQkJU18wMDgwMTRfU1BJM19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxMSkKKyNkZWZpbmUJCVNfMDA4MDE0X1RBMF9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxMikKKyNkZWZpbmUJCVNfMDA4MDE0X1RBMV9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxMykKKyNkZWZpbmUJCVNfMDA4MDE0X1RBMl9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxNCkKKyNkZWZpbmUJCVNfMDA4MDE0X1RBM19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxNSkKKyNkZWZpbmUJCVNfMDA4MDE0X0RCMF9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxNikKKyNkZWZpbmUJCVNfMDA4MDE0X0RCMV9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxNykKKyNkZWZpbmUJCVNfMDA4MDE0X0RCMl9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxOCkKKyNkZWZpbmUJCVNfMDA4MDE0X0RCM19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAxOSkKKyNkZWZpbmUJCVNfMDA4MDE0X0NCMF9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyMCkKKyNkZWZpbmUJCVNfMDA4MDE0X0NCMV9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyMSkKKyNkZWZpbmUJCVNfMDA4MDE0X0NCMl9CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyMikKKyNkZWZpbmUJCVNfMDA4MDE0X0NCM19CVVNZKHgpCQkJKCgoeCkgJiAxKSA8PCAyMykKKyNkZWZpbmUJCUdfMDA4MDE0X0NSX0NMRUFOKHgpCQkJKCgoeCkgPj4gMCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTRfU01YX0NMRUFOKHgpCQkJKCgoeCkgPj4gMSkgJiAxKQorI2RlZmluZQkJR18wMDgwMTRfU1BJMF9CVVNZKHgpCQkJKCgoeCkgPj4gOCkgJiAxKQorI2RlZmluZQkJR18wMDgwMTRfU1BJMV9CVVNZKHgpCQkJKCgoeCkgPj4gOSkgJiAxKQorI2RlZmluZQkJR18wMDgwMTRfU1BJMl9CVVNZKHgpCQkJKCgoeCkgPj4gMTApICYgMSkKKyNkZWZpbmUJCUdfMDA4MDE0X1NQSTNfQlVTWSh4KQkJCSgoKHgpID4+IDExKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9UQTBfQlVTWSh4KQkJCSgoKHgpID4+IDEyKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9UQTFfQlVTWSh4KQkJCSgoKHgpID4+IDEzKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9UQTJfQlVTWSh4KQkJCSgoKHgpID4+IDE0KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9UQTNfQlVTWSh4KQkJCSgoKHgpID4+IDE1KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9EQjBfQlVTWSh4KQkJCSgoKHgpID4+IDE2KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9EQjFfQlVTWSh4KQkJCSgoKHgpID4+IDE3KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9EQjJfQlVTWSh4KQkJCSgoKHgpID4+IDE4KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9EQjNfQlVTWSh4KQkJCSgoKHgpID4+IDE5KSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9DQjBfQlVTWSh4KQkJCSgoKHgpID4+IDIwKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9DQjFfQlVTWSh4KQkJCSgoKHgpID4+IDIxKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9DQjJfQlVTWSh4KQkJCSgoKHgpID4+IDIyKSAmIDEpCisjZGVmaW5lCQlHXzAwODAxNF9DQjNfQlVTWSh4KQkJCSgoKHgpID4+IDIzKSAmIDEpCisjZGVmaW5lCVJfMDAwRTUwX1NSQk1fU1RBVFVTCQkJCTB4MEU1MAorI2RlZmluZQkJR18wMDBFNTBfUkxDX1JRX1BFTkRJTkcoeCkJCSgoKHgpID4+IDMpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX1JDVV9SUV9QRU5ESU5HKHgpCQkoKCh4KSA+PiA0KSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9HUkJNX1JRX1BFTkRJTkcoeCkJCSgoKHgpID4+IDUpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX0hJX1JRX1BFTkRJTkcoeCkJCSgoKHgpID4+IDYpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX0lPX0VYVEVSTl9TSUdOQUwoeCkJCSgoKHgpID4+IDcpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX1ZNQ19CVVNZKHgpCQkJKCgoeCkgPj4gOCkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfTUNCX0JVU1koeCkJCQkoKCh4KSA+PiA5KSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9NQ0RaX0JVU1koeCkJCQkoKCh4KSA+PiAxMCkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfTUNEWV9CVVNZKHgpCQkJKCgoeCkgPj4gMTEpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX01DRFhfQlVTWSh4KQkJCSgoKHgpID4+IDEyKSAmIDEpCisjZGVmaW5lCQlHXzAwMEU1MF9NQ0RXX0JVU1koeCkJCQkoKCh4KSA+PiAxMykgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfU0VNX0JVU1koeCkJCQkoKCh4KSA+PiAxNCkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfUkxDX0JVU1koeCkJCQkoKCh4KSA+PiAxNSkgJiAxKQorI2RlZmluZQlSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQJCQkweDBFNjAKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfQklGKHgpCQkoKCh4KSAmIDEpIDw8IDEpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0NHKHgpCQkoKCh4KSAmIDEpIDw8IDIpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0NNQyh4KQkJKCgoeCkgJiAxKSA8PCAzKQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9DU0MoeCkJCSgoKHgpICYgMSkgPDwgNCkKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfREMoeCkJCSgoKHgpICYgMSkgPDwgNSkKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfR1JCTSh4KQkJKCgoeCkgJiAxKSA8PCA4KQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9IRFAoeCkJCSgoKHgpICYgMSkgPDwgOSkKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfSUgoeCkJCSgoKHgpICYgMSkgPDwgMTApCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX01DKHgpCQkoKCh4KSAmIDEpIDw8IDExKQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9STEMoeCkJCSgoKHgpICYgMSkgPDwgMTMpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX1JPTSh4KQkJKCgoeCkgJiAxKSA8PCAxNCkKKyNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfU0VNKHgpCQkoKCh4KSAmIDEpIDw8IDE1KQorI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9UU0MoeCkJCSgoKHgpICYgMSkgPDwgMTYpCisjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX1ZNQyh4KQkJKCgoeCkgJiAxKSA8PCAxNykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCBiNTE5ZmIyLi5jODM5YjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTUxLDcgKzUxLDYgQEAKIAogI2luY2x1ZGUgInJhZGVvbl9tb2RlLmgiCiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgotI2luY2x1ZGUgInIzMDAuaCIKIAogLyoKICAqIE1vZHVsZXMgcGFyYW1ldGVycy4KQEAgLTY2LDYgKzY1LDcgQEAKIGV4dGVybiBpbnQgcmFkZW9uX2JlbmNobWFya2luZzsKIGV4dGVybiBpbnQgcmFkZW9uX3Rlc3Rpbmc7CiBleHRlcm4gaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGU7CitleHRlcm4gaW50IHJhZGVvbl90djsKIAogLyoKICAqIENvcHkgZnJvbSByYWRlb25fZHJ2Lmggc28gd2UgZG9uJ3QgaGF2ZSB0byBpbmNsdWRlIGJvdGggYW5kIGhhdmUgY29uZmxpY3RpbmcKQEAgLTc1LDYgKzc1LDcgQEAKICNkZWZpbmUgUkFERU9OX0lCX1BPT0xfU0laRQkJMTYKICNkZWZpbmUgUkFERU9OX0RFQlVHRlNfTUFYX05VTV9GSUxFUwkzMgogI2RlZmluZSBSQURFT05GQl9DT05OX0xJTUlUCQk0CisjZGVmaW5lIFJBREVPTl9CSU9TX05VTV9TQ1JBVENICQk4CiAKIGVudW0gcmFkZW9uX2ZhbWlseSB7CiAJQ0hJUF9SMTAwLApAQCAtMTA3LDE0ICsxMDgsMTUgQEAKIAlDSElQX1I2MDAsCiAJQ0hJUF9SVjYxMCwKIAlDSElQX1JWNjMwLAorCUNISVBfUlY2NzAsCiAJQ0hJUF9SVjYyMCwKIAlDSElQX1JWNjM1LAotCUNISVBfUlY2NzAsCiAJQ0hJUF9SUzc4MCwKKwlDSElQX1JTODgwLAogCUNISVBfUlY3NzAsCiAJQ0hJUF9SVjczMCwKIAlDSElQX1JWNzEwLAotCUNISVBfUlM4ODAsCisJQ0hJUF9SVjc0MCwKIAlDSElQX0xBU1QsCiB9OwogCkBAIC0xNTEsMTAgKzE1MywyMSBAQAogICovCiBib29sIHJhZGVvbl9nZXRfYmlvcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKKworLyoKKyAqIER1bW15IHBhZ2UKKyAqLworc3RydWN0IHJhZGVvbl9kdW1teV9wYWdlIHsKKwlzdHJ1Y3QgcGFnZQkqcGFnZTsKKwlkbWFfYWRkcl90CWFkZHI7Cit9OworaW50IHJhZGVvbl9kdW1teV9wYWdlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByYWRlb25fZHVtbXlfcGFnZV9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworCiAvKgogICogQ2xvY2tzCiAgKi8KLQogc3RydWN0IHJhZGVvbl9jbG9jayB7CiAJc3RydWN0IHJhZGVvbl9wbGwgcDFwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgcDJwbGw7CkBAIC0xNjUsNiArMTc4LDcgQEAKIAl1aW50MzJfdCBkZWZhdWx0X3NjbGs7CiB9OwogCisKIC8qCiAgKiBGZW5jZXMuCiAgKi8KQEAgLTMzMSwxNCArMzQ1LDE4IEBACiAJcmVzb3VyY2Vfc2l6ZV90CQlhcGVyX3NpemU7CiAJcmVzb3VyY2Vfc2l6ZV90CQlhcGVyX2Jhc2U7CiAJcmVzb3VyY2Vfc2l6ZV90CQlhZ3BfYmFzZTsKLQl1bnNpZ25lZAkJZ3R0X2xvY2F0aW9uOwotCXVuc2lnbmVkCQlndHRfc2l6ZTsKLQl1bnNpZ25lZAkJdnJhbV9sb2NhdGlvbjsKIAkvKiBmb3Igc29tZSBjaGlwcyB3aXRoIDw9IDMyTUIgd2UgbmVlZCB0byBsaWUKIAkgKiBhYm91dCB2cmFtIHNpemUgbmVhciBtYyBmYiBsb2NhdGlvbiAqLwotCXVuc2lnbmVkCQltY192cmFtX3NpemU7CisJdTY0CQkJbWNfdnJhbV9zaXplOworCXU2NAkJCWd0dF9sb2NhdGlvbjsKKwl1NjQJCQlndHRfc2l6ZTsKKwl1NjQJCQlndHRfc3RhcnQ7CisJdTY0CQkJZ3R0X2VuZDsKKwl1NjQJCQl2cmFtX2xvY2F0aW9uOworCXU2NAkJCXZyYW1fc3RhcnQ7CisJdTY0CQkJdnJhbV9lbmQ7CiAJdW5zaWduZWQJCXZyYW1fd2lkdGg7Ci0JdW5zaWduZWQJCXJlYWxfdnJhbV9zaXplOworCXU2NAkJCXJlYWxfdnJhbV9zaXplOwogCWludAkJCXZyYW1fbXRycjsKIAlib29sCQkJdnJhbV9pc19kZHI7CiB9OwpAQCAtMzg1LDYgKzQwMywxMCBAQAogCXVpbnQzMl90CQlsZW5ndGhfZHc7CiB9OwogCisvKgorICogbG9ja2luZyAtCisgKiBtdXRleCBwcm90ZWN0cyBzY2hlZHVsZWRfaWJzLCByZWFkeSwgYWxsb2NfYm0KKyAqLwogc3RydWN0IHJhZGVvbl9pYl9wb29sIHsKIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwogCXN0cnVjdCByYWRlb25fb2JqZWN0CSpyb2JqOwpAQCAtNDEwLDYgKzQzMiwxNiBAQAogCWJvb2wJCQlyZWFkeTsKIH07CiAKK3N0cnVjdCByNjAwX2JsaXQgeworCXN0cnVjdCByYWRlb25fb2JqZWN0CSpzaGFkZXJfb2JqOworCXU2NCBzaGFkZXJfZ3B1X2FkZHI7CisJdTMyIHZzX29mZnNldCwgcHNfb2Zmc2V0OworCXUzMiBzdGF0ZV9vZmZzZXQ7CisJdTMyIHN0YXRlX2xlbjsKKwl1MzIgdmJfdXNlZCwgdmJfdG90YWw7CisJc3RydWN0IHJhZGVvbl9pYiAqdmJfaWI7Cit9OworCiBpbnQgcmFkZW9uX2liX2dldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqKmliKTsKIHZvaWQgcmFkZW9uX2liX2ZyZWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKippYik7CiBpbnQgcmFkZW9uX2liX3NjaGVkdWxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYik7CkBAIC00NjIsNiArNDk0LDcgQEAKIAlpbnQJCQljaHVua19yZWxvY3NfaWR4OwogCXN0cnVjdCByYWRlb25faWIJKmliOwogCXZvaWQJCQkqdHJhY2s7CisJdW5zaWduZWQJCWZhbWlseTsKIH07CiAKIHN0cnVjdCByYWRlb25fY3NfcGFja2V0IHsKQEAgLTU1OCwxMyArNTkxLDE5IEBACiAgKi8KIHN0cnVjdCByYWRlb25fYXNpYyB7CiAJaW50ICgqaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCXZvaWQgKCpmaW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJaW50ICgqc3VzcGVuZCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCplcnJhdGEpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqdnJhbV9pbmZvKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJdm9pZCAoKnZnYV9zZXRfc3RhdGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKTsKIAlpbnQgKCpncHVfcmVzZXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCptY19pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKm1jX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCp3Yl9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKndiX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwlpbnQgKCpnYXJ0X2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwl2b2lkICgqZ2FydF9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqZ2FydF9lbmFibGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqZ2FydF9kaXNhYmxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKmdhcnRfdGxiX2ZsdXNoKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC01NzIsNyArNjExLDExIEBACiAJaW50ICgqY3BfaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CiAJdm9pZCAoKmNwX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqY3BfZGlzYWJsZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCXZvaWQgKCpjcF9jb21taXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqcmluZ19zdGFydCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCWludCAoKnJpbmdfdGVzdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCXZvaWQgKCpyaW5nX2liX2V4ZWN1dGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYik7CisJaW50ICgqaWJfdGVzdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKmlycV9zZXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCppcnFfcHJvY2Vzcykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXUzMiAoKmdldF92YmxhbmtfY291bnRlcikoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKQEAgLTYwNCw4ICs2NDcsNjAgQEAKIAl2b2lkICgqYmFuZHdpZHRoX3VwZGF0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogfTsKIAorLyoKKyAqIEFzaWMgc3RydWN0dXJlcworICovCitzdHJ1Y3QgcjEwMF9hc2ljIHsKKwljb25zdCB1bnNpZ25lZAkqcmVnX3NhZmVfYm07CisJdW5zaWduZWQJcmVnX3NhZmVfYm1fc2l6ZTsKK307CisKK3N0cnVjdCByMzAwX2FzaWMgeworCWNvbnN0IHVuc2lnbmVkCSpyZWdfc2FmZV9ibTsKKwl1bnNpZ25lZAlyZWdfc2FmZV9ibV9zaXplOworfTsKKworc3RydWN0IHI2MDBfYXNpYyB7CisJdW5zaWduZWQgbWF4X3BpcGVzOworCXVuc2lnbmVkIG1heF90aWxlX3BpcGVzOworCXVuc2lnbmVkIG1heF9zaW1kczsKKwl1bnNpZ25lZCBtYXhfYmFja2VuZHM7CisJdW5zaWduZWQgbWF4X2dwcnM7CisJdW5zaWduZWQgbWF4X3RocmVhZHM7CisJdW5zaWduZWQgbWF4X3N0YWNrX2VudHJpZXM7CisJdW5zaWduZWQgbWF4X2h3X2NvbnRleHRzOworCXVuc2lnbmVkIG1heF9nc190aHJlYWRzOworCXVuc2lnbmVkIHN4X21heF9leHBvcnRfc2l6ZTsKKwl1bnNpZ25lZCBzeF9tYXhfZXhwb3J0X3Bvc19zaXplOworCXVuc2lnbmVkIHN4X21heF9leHBvcnRfc214X3NpemU7CisJdW5zaWduZWQgc3FfbnVtX2NmX2luc3RzOworfTsKKworc3RydWN0IHJ2NzcwX2FzaWMgeworCXVuc2lnbmVkIG1heF9waXBlczsKKwl1bnNpZ25lZCBtYXhfdGlsZV9waXBlczsKKwl1bnNpZ25lZCBtYXhfc2ltZHM7CisJdW5zaWduZWQgbWF4X2JhY2tlbmRzOworCXVuc2lnbmVkIG1heF9ncHJzOworCXVuc2lnbmVkIG1heF90aHJlYWRzOworCXVuc2lnbmVkIG1heF9zdGFja19lbnRyaWVzOworCXVuc2lnbmVkIG1heF9od19jb250ZXh0czsKKwl1bnNpZ25lZCBtYXhfZ3NfdGhyZWFkczsKKwl1bnNpZ25lZCBzeF9tYXhfZXhwb3J0X3NpemU7CisJdW5zaWduZWQgc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZTsKKwl1bnNpZ25lZCBzeF9tYXhfZXhwb3J0X3NteF9zaXplOworCXVuc2lnbmVkIHNxX251bV9jZl9pbnN0czsKKwl1bnNpZ25lZCBzeF9udW1fb2Zfc2V0czsKKwl1bnNpZ25lZCBzY19wcmltX2ZpZm9fc2l6ZTsKKwl1bnNpZ25lZCBzY19oaXpfdGlsZV9maWZvX3NpemU7CisJdW5zaWduZWQgc2NfZWFybHl6X3RpbGVfZmlmb19maXplOworfTsKKwogdW5pb24gcmFkZW9uX2FzaWNfY29uZmlnIHsKIAlzdHJ1Y3QgcjMwMF9hc2ljCXIzMDA7CisJc3RydWN0IHIxMDBfYXNpYwlyMTAwOworCXN0cnVjdCByNjAwX2FzaWMJcjYwMDsKKwlzdHJ1Y3QgcnY3NzBfYXNpYwlydjc3MDsKIH07CiAKIApAQCAtNjQ2LDYgKzc0MSw3IEBACiB0eXBlZGVmIHZvaWQgKCpyYWRlb25fd3JlZ190KShzdHJ1Y3QgcmFkZW9uX2RldmljZSosIHVpbnQzMl90LCB1aW50MzJfdCk7CiAKIHN0cnVjdCByYWRlb25fZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKIAlzdHJ1Y3QgZHJtX2RldmljZQkJKmRkZXY7CiAJc3RydWN0IHBjaV9kZXYJCQkqcGRldjsKIAkvKiBBU0lDICovCkBAIC02ODksMTMgKzc4NSwyMCBAQAogCXN0cnVjdCByYWRlb25fYXNpYwkJKmFzaWM7CiAJc3RydWN0IHJhZGVvbl9nZW0JCWdlbTsKIAlzdHJ1Y3QgcmFkZW9uX3BtCQlwbTsKKwl1aW50MzJfdAkJCWJpb3Nfc2NyYXRjaFtSQURFT05fQklPU19OVU1fU0NSQVRDSF07CiAJc3RydWN0IG11dGV4CQkJY3NfbXV0ZXg7CiAJc3RydWN0IHJhZGVvbl93YgkJd2I7CisJc3RydWN0IHJhZGVvbl9kdW1teV9wYWdlCWR1bW15X3BhZ2U7CiAJYm9vbAkJCQlncHVfbG9ja3VwOwogCWJvb2wJCQkJc2h1dGRvd247CiAJYm9vbAkJCQlzdXNwZW5kOwogCWJvb2wJCQkJbmVlZF9kbWEzMjsKKwlib29sCQkJCW5ld19pbml0X3BhdGg7CisJYm9vbAkJCQlhY2NlbF93b3JraW5nOwogCXN0cnVjdCByYWRlb25fc3VyZmFjZV9yZWcgc3VyZmFjZV9yZWdzW1JBREVPTl9HRU1fTUFYX1NVUkZBQ0VTXTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1lX2Z3OwkvKiBhbGwgZmFtaWx5IE1FIGZpcm13YXJlICovCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpwZnBfZnc7CS8qIHI2LzcwMCBQRlAgZmlybXdhcmUgKi8KKwlzdHJ1Y3QgcjYwMF9ibGl0IHI2MDBfYmxpdDsKIH07CiAKIGludCByYWRlb25fZGV2aWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC03MDUsNiArODA4LDEzIEBACiB2b2lkIHJhZGVvbl9kZXZpY2VfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcmFkZW9uX2dwdV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAorLyogcjYwMCBibGl0ICovCitpbnQgcjYwMF9ibGl0X3ByZXBhcmVfY29weShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHNpemVfYnl0ZXMpOwordm9pZCByNjAwX2JsaXRfZG9uZV9jb3B5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7Cit2b2lkIHI2MDBfa21zX2JsaXRfY29weShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCXU2NCBzcmNfZ3B1X2FkZHIsIHU2NCBkc3RfZ3B1X2FkZHIsCisJCQlpbnQgc2l6ZV9ieXRlcyk7CisKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgcjEwMF9tbV9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpCiB7CiAJaWYgKHJlZyA8IDB4MTAwMDApCkBAIC03MzIsNiArODQyLDcgQEAKICNkZWZpbmUgUlJFRzgocmVnKSByZWFkYigoKHZvaWQgX19pb21lbSAqKXJkZXYtPnJtbWlvKSArIChyZWcpKQogI2RlZmluZSBXUkVHOChyZWcsIHYpIHdyaXRlYih2LCAoKHZvaWQgX19pb21lbSAqKXJkZXYtPnJtbWlvKSArIChyZWcpKQogI2RlZmluZSBSUkVHMzIocmVnKSByMTAwX21tX3JyZWcocmRldiwgKHJlZykpCisjZGVmaW5lIERSRUczMihyZWcpIHByaW50ayhLRVJOX0lORk8gIlJFR0lTVEVSOiAiICNyZWcgIiA6IDB4JTA4WFxuIiwgcjEwMF9tbV9ycmVnKHJkZXYsIChyZWcpKSkKICNkZWZpbmUgV1JFRzMyKHJlZywgdikgcjEwMF9tbV93cmVnKHJkZXYsIChyZWcpLCAodikpCiAjZGVmaW5lIFJFR19TRVQoRklFTEQsIHYpICgoKHYpIDw8IEZJRUxEIyNfU0hJRlQpICYgRklFTEQjI19NQVNLKQogI2RlZmluZSBSRUdfR0VUKEZJRUxELCB2KSAoKCh2KSA8PCBGSUVMRCMjX1NISUZUKSAmIEZJRUxEIyNfTUFTSykKQEAgLTc1NSw2ICs4NjYsNyBAQAogCQl0bXBfIHw9ICgodmFsKSAmIH4obWFzaykpOwkJCVwKIAkJV1JFRzMyX1BMTChyZWcsIHRtcF8pOwkJCQlcCiAJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFJFRzMyX1NZUyhzcWYsIHJkZXYsIHJlZykgc2VxX3ByaW50Zigoc3FmKSwgI3JlZyAiIDogMHglMDhYXG4iLCByMTAwX21tX3JyZWcoKHJkZXYpLCAocmVnKSkpCiAKIC8qCiAgKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKQEAgLTgxOSw1MSArOTMxLDYgQEAKIC8qCiAgKiBSSU5HIGhlbHBlcnMuCiAgKi8KLSNkZWZpbmUgQ1BfUEFDS0VUMAkJCTB4MDAwMDAwMDAKLSNkZWZpbmUJCVBBQ0tFVDBfQkFTRV9JTkRFWF9TSElGVAkwCi0jZGVmaW5lCQlQQUNLRVQwX0JBU0VfSU5ERVhfTUFTSwkJKDB4MWZmZmYgPDwgMCkKLSNkZWZpbmUJCVBBQ0tFVDBfQ09VTlRfU0hJRlQJCTE2Ci0jZGVmaW5lCQlQQUNLRVQwX0NPVU5UX01BU0sJCSgweDNmZmYgPDwgMTYpCi0jZGVmaW5lIENQX1BBQ0tFVDEJCQkweDQwMDAwMDAwCi0jZGVmaW5lIENQX1BBQ0tFVDIJCQkweDgwMDAwMDAwCi0jZGVmaW5lCQlQQUNLRVQyX1BBRF9TSElGVAkJMAotI2RlZmluZQkJUEFDS0VUMl9QQURfTUFTSwkJKDB4M2ZmZmZmZmYgPDwgMCkKLSNkZWZpbmUgQ1BfUEFDS0VUMwkJCTB4QzAwMDAwMDAKLSNkZWZpbmUJCVBBQ0tFVDNfSVRfT1BDT0RFX1NISUZUCQk4Ci0jZGVmaW5lCQlQQUNLRVQzX0lUX09QQ09ERV9NQVNLCQkoMHhmZiA8PCA4KQotI2RlZmluZQkJUEFDS0VUM19DT1VOVF9TSElGVAkJMTYKLSNkZWZpbmUJCVBBQ0tFVDNfQ09VTlRfTUFTSwkJKDB4M2ZmZiA8PCAxNikKLS8qIFBBQ0tFVDMgb3AgY29kZSAqLwotI2RlZmluZQkJUEFDS0VUM19OT1AJCQkweDEwCi0jZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfVkJVRgkJMHgyOAotI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lNTUQJCTB4MjkKLSNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTkRYCQkweDJBCi0jZGVmaW5lCQlQQUNLRVQzXzNEX0xPQURfVkJQTlRSCQkweDJGCi0jZGVmaW5lCQlQQUNLRVQzX0lORFhfQlVGRkVSCQkweDMzCi0jZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfVkJVRl8yCQkweDM0Ci0jZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU1NRF8yCQkweDM1Ci0jZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU5EWF8yCQkweDM2Ci0jZGVmaW5lCQlQQUNLRVQzX0JJVEJMVF9NVUxUSQkJMHg5QgotCi0jZGVmaW5lIFBBQ0tFVDAocmVnLCBuKQkoQ1BfUEFDS0VUMCB8CQkJCQlcCi0JCQkgUkVHX1NFVChQQUNLRVQwX0JBU0VfSU5ERVgsIChyZWcpID4+IDIpIHwJXAotCQkJIFJFR19TRVQoUEFDS0VUMF9DT1VOVCwgKG4pKSkKLSNkZWZpbmUgUEFDS0VUMih2KQkoQ1BfUEFDS0VUMiB8IFJFR19TRVQoUEFDS0VUMl9QQUQsICh2KSkpCi0jZGVmaW5lIFBBQ0tFVDMob3AsIG4pCShDUF9QQUNLRVQzIHwJCQkJCVwKLQkJCSBSRUdfU0VUKFBBQ0tFVDNfSVRfT1BDT0RFLCAob3ApKSB8CQlcCi0JCQkgUkVHX1NFVChQQUNLRVQzX0NPVU5ULCAobikpKQotCi0jZGVmaW5lCVBBQ0tFVF9UWVBFMAkwCi0jZGVmaW5lCVBBQ0tFVF9UWVBFMQkxCi0jZGVmaW5lCVBBQ0tFVF9UWVBFMgkyCi0jZGVmaW5lCVBBQ0tFVF9UWVBFMwkzCi0KLSNkZWZpbmUgQ1BfUEFDS0VUX0dFVF9UWVBFKGgpICgoKGgpID4+IDMwKSAmIDMpCi0jZGVmaW5lIENQX1BBQ0tFVF9HRVRfQ09VTlQoaCkgKCgoaCkgPj4gMTYpICYgMHgzRkZGKQotI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9SRUcoaCkgKCgoaCkgJiAweDFGRkYpIDw8IDIpCi0jZGVmaW5lIENQX1BBQ0tFVDBfR0VUX09ORV9SRUdfV1IoaCkgKCgoaCkgPj4gMTUpICYgMSkKLSNkZWZpbmUgQ1BfUEFDS0VUM19HRVRfT1BDT0RFKGgpICgoKGgpID4+IDgpICYgMHhGRikKLQogc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbl9yaW5nX3dyaXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCB2KQogewogI2lmIERSTV9ERUJVR19DT0RFCkBAIC04ODIsMTQgKzk0OSwyMCBAQAogICogQVNJQ3MgbWFjcm8uCiAgKi8KICNkZWZpbmUgcmFkZW9uX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT5pbml0KChyZGV2KSkKKyNkZWZpbmUgcmFkZW9uX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5maW5pKChyZGV2KSkKKyNkZWZpbmUgcmFkZW9uX3Jlc3VtZShyZGV2KSAocmRldiktPmFzaWMtPnJlc3VtZSgocmRldikpCisjZGVmaW5lIHJhZGVvbl9zdXNwZW5kKHJkZXYpIChyZGV2KS0+YXNpYy0+c3VzcGVuZCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9jc19wYXJzZShwKSByZGV2LT5hc2ljLT5jc19wYXJzZSgocCkpCiAjZGVmaW5lIHJhZGVvbl9lcnJhdGEocmRldikgKHJkZXYpLT5hc2ljLT5lcnJhdGEoKHJkZXYpKQogI2RlZmluZSByYWRlb25fdnJhbV9pbmZvKHJkZXYpIChyZGV2KS0+YXNpYy0+dnJhbV9pbmZvKChyZGV2KSkKKyNkZWZpbmUgcmFkZW9uX3ZnYV9zZXRfc3RhdGUocmRldiwgc3RhdGUpIChyZGV2KS0+YXNpYy0+dmdhX3NldF9zdGF0ZSgocmRldiksIChzdGF0ZSkpCiAjZGVmaW5lIHJhZGVvbl9ncHVfcmVzZXQocmRldikgKHJkZXYpLT5hc2ljLT5ncHVfcmVzZXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fbWNfaW5pdChyZGV2KSAocmRldiktPmFzaWMtPm1jX2luaXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fbWNfZmluaShyZGV2KSAocmRldiktPmFzaWMtPm1jX2ZpbmkoKHJkZXYpKQogI2RlZmluZSByYWRlb25fd2JfaW5pdChyZGV2KSAocmRldiktPmFzaWMtPndiX2luaXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fd2JfZmluaShyZGV2KSAocmRldiktPmFzaWMtPndiX2ZpbmkoKHJkZXYpKQorI2RlZmluZSByYWRlb25fZ3B1X2dhcnRfaW5pdChyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfaW5pdCgocmRldikpCisjZGVmaW5lIHJhZGVvbl9ncHVfZ2FydF9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9maW5pKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2dhcnRfZW5hYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9lbmFibGUoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2FydF9kaXNhYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9kaXNhYmxlKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2dhcnRfdGxiX2ZsdXNoKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF90bGJfZmx1c2goKHJkZXYpKQpAQCAtODk3LDcgKzk3MCwxMSBAQAogI2RlZmluZSByYWRlb25fY3BfaW5pdChyZGV2LHJzaXplKSAocmRldiktPmFzaWMtPmNwX2luaXQoKHJkZXYpLCAocnNpemUpKQogI2RlZmluZSByYWRlb25fY3BfZmluaShyZGV2KSAocmRldiktPmFzaWMtPmNwX2ZpbmkoKHJkZXYpKQogI2RlZmluZSByYWRlb25fY3BfZGlzYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmNwX2Rpc2FibGUoKHJkZXYpKQorI2RlZmluZSByYWRlb25fY3BfY29tbWl0KHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfY29tbWl0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3Jpbmdfc3RhcnQocmRldikgKHJkZXYpLT5hc2ljLT5yaW5nX3N0YXJ0KChyZGV2KSkKKyNkZWZpbmUgcmFkZW9uX3JpbmdfdGVzdChyZGV2KSAocmRldiktPmFzaWMtPnJpbmdfdGVzdCgocmRldikpCisjZGVmaW5lIHJhZGVvbl9yaW5nX2liX2V4ZWN1dGUocmRldiwgaWIpIChyZGV2KS0+YXNpYy0+cmluZ19pYl9leGVjdXRlKChyZGV2KSwgKGliKSkKKyNkZWZpbmUgcmFkZW9uX2liX3Rlc3QocmRldikgKHJkZXYpLT5hc2ljLT5pYl90ZXN0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2lycV9zZXQocmRldikgKHJkZXYpLT5hc2ljLT5pcnFfc2V0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2lycV9wcm9jZXNzKHJkZXYpIChyZGV2KS0+YXNpYy0+aXJxX3Byb2Nlc3MoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyKHJkZXYsIGNydGMpIChyZGV2KS0+YXNpYy0+Z2V0X3ZibGFua19jb3VudGVyKChyZGV2KSwgKGNydGMpKQpAQCAtOTEzLDQgKzk5MCw4OCBAQAogI2RlZmluZSByYWRlb25fY2xlYXJfc3VyZmFjZV9yZWcocmRldiwgcikgKChyZGV2KS0+YXNpYy0+Y2xlYXJfc3VyZmFjZV9yZWcoKHJkZXYpLCAocikpKQogI2RlZmluZSByYWRlb25fYmFuZHdpZHRoX3VwZGF0ZShyZGV2KSAocmRldiktPmFzaWMtPmJhbmR3aWR0aF91cGRhdGUoKHJkZXYpKQogCisvKiBDb21tb24gZnVuY3Rpb25zICovCitleHRlcm4gaW50IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcmFkZW9uX21vZGVzZXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByYWRlb25fbW9kZXNldF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBib29sIHJhZGVvbl9jYXJkX3Bvc3RlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJhZGVvbl9jbG9ja3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByYWRlb25fY2xvY2tzX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3NjcmF0Y2hfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByYWRlb25fc3VyZmFjZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcmFkZW9uX2NzX3BhcnNlcl9pbml0KHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCB2b2lkICpkYXRhKTsKKworLyogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwICovCitzdHJ1Y3QgcjEwMF9tY19zYXZlIHsKKwl1MzIJR0VOTU9fV1Q7CisJdTMyCUNSVENfRVhUX0NOVEw7CisJdTMyCUNSVENfR0VOX0NOVEw7CisJdTMyCUNSVEMyX0dFTl9DTlRMOworCXUzMglDVVJfT0ZGU0VUOworCXUzMglDVVIyX09GRlNFVDsKK307CitleHRlcm4gdm9pZCByMTAwX2NwX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2NwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CitleHRlcm4gdm9pZCByMTAwX2NwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9wY2lfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3BjaV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9wY2lfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9wY2lfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9wY2lfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOworZXh0ZXJuIGludCByMTAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX2liX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2liX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX21jX3NhdmUgKnNhdmUpOworZXh0ZXJuIHZvaWQgcjEwMF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX21jX3NhdmUgKnNhdmUpOworZXh0ZXJuIHZvaWQgcjEwMF92cmFtX2luaXRfc2l6ZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF93Yl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKKy8qIHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCAqLworZXh0ZXJuIHZvaWQgcjMwMF9zZXRfcmVnX3NhZmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIzMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworLyogcjQyMCxyNDIzLHJ2NDEwICovCitleHRlcm4gdTMyIHI0MjBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZyk7CitleHRlcm4gdm9pZCByNDIwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KTsKK2V4dGVybiBpbnQgcjQyMF9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKKy8qIHJ2NTE1ICovCitleHRlcm4gdm9pZCBydjUxNV9iYW5kd2lkdGhfYXZpdm9fdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworLyogcnM2OTAsIHJzNzQwICovCitleHRlcm4gdm9pZCByczY5MF9saW5lX2J1ZmZlcl9hZGp1c3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMSwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUyKTsKKworLyogcjYwMCwgcnY2MTAsIHJ2NjMwLCBydjYyMCwgcnY2MzUsIHJ2NjcwLCByczc4MCwgcnM4ODAgKi8KK2V4dGVybiBib29sIHI2MDBfY2FyZF9wb3N0ZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF9jcF9zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfcmluZ19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOworZXh0ZXJuIGludCByNjAwX2NwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI2MDBfY291bnRfcGlwZV9iaXRzKHVpbnQzMl90IHZhbCk7CitleHRlcm4gaW50IHI2MDBfZ2FydF9jbGVhcl9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSk7CitleHRlcm4gaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI2MDBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjYwMF9pYl90ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjYwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfc2NyYXRjaF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjYwMF9ibGl0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjYwMF9ibGl0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX2NwX2luaXRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjYwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCA5M2Q4Zjg4Li44OTY4Zjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC00MiwyMyArNDIsMjggQEAKICAqIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MAogICovCiBpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByMjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcjEwMF9tbV9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogdm9pZCByMTAwX21tX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiB2b2lkIHIxMDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByMTAwX3ZnYV9zZXRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGJvb2wgc3RhdGUpOwogaW50IHIxMDBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdTMyIHIxMDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiBpbnQgcjEwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByMTAwX3BjaV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByMTAwX3BjaV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9wY2lfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfcGNpX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIGludCByMTAwX2NwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CiB2b2lkIHIxMDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfY3BfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHIxMDBfY3BfY29tbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtNzcsMjQgKzgyLDM0IEBACiAJCQkgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBvYmpfc2l6ZSk7CiBpbnQgcjEwMF9jbGVhcl9zdXJmYWNlX3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHJlZyk7CiB2b2lkIHIxMDBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHIxMDBfcmluZ19pYl9leGVjdXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYik7CitpbnQgcjEwMF9pYl90ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByMTAwX3JpbmdfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjEwMF9hc2ljID0gewogCS5pbml0ID0gJnIxMDBfaW5pdCwKIAkuZXJyYXRhID0gJnIxMDBfZXJyYXRhLAogCS52cmFtX2luZm8gPSAmcjEwMF92cmFtX2luZm8sCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjEwMF9ncHVfcmVzZXQsCiAJLm1jX2luaXQgPSAmcjEwMF9tY19pbml0LAogCS5tY19maW5pID0gJnIxMDBfbWNfZmluaSwKIAkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCiAJLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMTAwX2dhcnRfZW5hYmxlLAorCS5nYXJ0X2luaXQgPSAmcjEwMF9wY2lfZ2FydF9pbml0LAorCS5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pLAorCS5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZSwKIAkuZ2FydF9kaXNhYmxlID0gJnIxMDBfcGNpX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKIAkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCiAJLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAogCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKKwkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIxMDBfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMTI2LDcgKzE0MSw5IEBACiB2b2lkIHIzMDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CiBpbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7Ci1pbnQgcjMwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBydjM3MF9wY2llX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CkBAIC0xNDMsMTkgKzE2MCwyNiBAQAogCS5pbml0ID0gJnIzMDBfaW5pdCwKIAkuZXJyYXRhID0gJnIzMDBfZXJyYXRhLAogCS52cmFtX2luZm8gPSAmcjMwMF92cmFtX2luZm8sCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCiAJLm1jX2luaXQgPSAmcjMwMF9tY19pbml0LAogCS5tY19maW5pID0gJnIzMDBfbWNfZmluaSwKIAkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCiAJLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMzAwX2dhcnRfZW5hYmxlLAorCS5nYXJ0X2luaXQgPSAmcjEwMF9wY2lfZ2FydF9pbml0LAorCS5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pLAorCS5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZSwKIAkuZ2FydF9kaXNhYmxlID0gJnIxMDBfcGNpX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKIAkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCiAJLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAogCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKKwkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMTc2LDI3ICsyMDAsMzUgQEAKIC8qCiAgKiByNDIwLHI0MjMscnY0MTAKICAqLwotdm9pZCByNDIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNDIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNDIwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjQyMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjQyMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjQyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNDIwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcjQyMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyNDIwX3ZyYW1faW5mbywKKwkuaW5pdCA9ICZyNDIwX2luaXQsCisJLmZpbmkgPSAmcjQyMF9maW5pLAorCS5zdXNwZW5kID0gJnI0MjBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnI0MjBfcmVzdW1lLAorCS5lcnJhdGEgPSBOVUxMLAorCS52cmFtX2luZm8gPSBOVUxMLAorCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnI0MjBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyNDIwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcjMwMF9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlLAorCS5tY19pbml0ID0gTlVMTCwKKwkubWNfZmluaSA9IE5VTEwsCisJLndiX2luaXQgPSBOVUxMLAorCS53Yl9maW5pID0gTlVMTCwKKwkuZ2FydF9lbmFibGUgPSBOVUxMLAorCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKKwkuY3BfaW5pdCA9IE5VTEwsCisJLmNwX2ZpbmkgPSBOVUxMLAorCS5jcF9kaXNhYmxlID0gTlVMTCwKKwkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmliX3Rlc3QgPSBOVUxMLAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjIyLDYgKzI1NCw4IEBACiB2b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNDAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNDAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJzNDAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczQwMF9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0yMzIsMTEgKzI2NiwxNCBAQAogCS5pbml0ID0gJnIzMDBfaW5pdCwKIAkuZXJyYXRhID0gJnJzNDAwX2VycmF0YSwKIAkudnJhbV9pbmZvID0gJnJzNDAwX3ZyYW1faW5mbywKKwkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKIAkubWNfaW5pdCA9ICZyczQwMF9tY19pbml0LAogCS5tY19maW5pID0gJnJzNDAwX21jX2ZpbmksCiAJLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAogCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKKwkuZ2FydF9pbml0ID0gJnJzNDAwX2dhcnRfaW5pdCwKKwkuZ2FydF9maW5pID0gJnJzNDAwX2dhcnRfZmluaSwKIAkuZ2FydF9lbmFibGUgPSAmcnM0MDBfZ2FydF9lbmFibGUsCiAJLmdhcnRfZGlzYWJsZSA9ICZyczQwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLApAQCAtMjQ0LDcgKzI4MSwxMSBAQAogCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKIAkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCiAJLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0yNjYsNyArMzA3LDcgQEAKIC8qCiAgKiByczYwMC4KICAqLwotaW50IHJzNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKmRldik7CitpbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0yNzQsNiArMzE1LDggQEAKIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CitpbnQgcnM2MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcnM2MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTI4NSwxMSArMzI4LDE0IEBACiAJLmluaXQgPSAmcnM2MDBfaW5pdCwKIAkuZXJyYXRhID0gJnJzNjAwX2VycmF0YSwKIAkudnJhbV9pbmZvID0gJnJzNjAwX3ZyYW1faW5mbywKKwkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKIAkubWNfaW5pdCA9ICZyczYwMF9tY19pbml0LAogCS5tY19maW5pID0gJnJzNjAwX21jX2ZpbmksCiAJLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAogCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKKwkuZ2FydF9pbml0ID0gJnJzNjAwX2dhcnRfaW5pdCwKKwkuZ2FydF9maW5pID0gJnJzNjAwX2dhcnRfZmluaSwKIAkuZ2FydF9lbmFibGUgPSAmcnM2MDBfZ2FydF9lbmFibGUsCiAJLmdhcnRfZGlzYWJsZSA9ICZyczYwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNjAwX2dhcnRfdGxiX2ZsdXNoLApAQCAtMjk3LDcgKzM0MywxMSBAQAogCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKIAkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCiAJLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0zMjgsMTEgKzM3OCwxNCBAQAogCS5pbml0ID0gJnJzNjAwX2luaXQsCiAJLmVycmF0YSA9ICZyczY5MF9lcnJhdGEsCiAJLnZyYW1faW5mbyA9ICZyczY5MF92cmFtX2luZm8sCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCiAJLm1jX2luaXQgPSAmcnM2OTBfbWNfaW5pdCwKIAkubWNfZmluaSA9ICZyczY5MF9tY19maW5pLAogCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKIAkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCisJLmdhcnRfaW5pdCA9ICZyczQwMF9nYXJ0X2luaXQsCisJLmdhcnRfZmluaSA9ICZyczQwMF9nYXJ0X2ZpbmksCiAJLmdhcnRfZW5hYmxlID0gJnJzNDAwX2dhcnRfZW5hYmxlLAogCS5nYXJ0X2Rpc2FibGUgPSAmcnM0MDBfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyczQwMF9nYXJ0X3RsYl9mbHVzaCwKQEAgLTM0MCw3ICszOTMsMTEgQEAKIAkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCiAJLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAogCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKKwkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMzc4LDE5ICs0MzUsMjYgQEAKIAkuaW5pdCA9ICZydjUxNV9pbml0LAogCS5lcnJhdGEgPSAmcnY1MTVfZXJyYXRhLAogCS52cmFtX2luZm8gPSAmcnY1MTVfdnJhbV9pbmZvLAorCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NTE1X2dwdV9yZXNldCwKIAkubWNfaW5pdCA9ICZydjUxNV9tY19pbml0LAogCS5tY19maW5pID0gJnJ2NTE1X21jX2ZpbmksCiAJLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAogCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcjMwMF9nYXJ0X2VuYWJsZSwKKwkuZ2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0LAorCS5nYXJ0X2ZpbmkgPSAmcnYzNzBfcGNpZV9nYXJ0X2ZpbmksCisJLmdhcnRfZW5hYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9lbmFibGUsCiAJLmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCiAJLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAogCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKIAkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCisJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZydjUxNV9yaW5nX3N0YXJ0LAorCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC00MjEsMTkgKzQ4NSwyNiBAQAogCS5pbml0ID0gJnJ2NTE1X2luaXQsCiAJLmVycmF0YSA9ICZyNTIwX2VycmF0YSwKIAkudnJhbV9pbmZvID0gJnI1MjBfdnJhbV9pbmZvLAorCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NTE1X2dwdV9yZXNldCwKIAkubWNfaW5pdCA9ICZyNTIwX21jX2luaXQsCiAJLm1jX2ZpbmkgPSAmcjUyMF9tY19maW5pLAogCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKIAkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnIzMDBfZ2FydF9lbmFibGUsCisJLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKKwkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAorCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAogCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAogCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKIAkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCiAJLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAorCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNDUyLDkgKzUyMywxMzAgQEAKIH07CiAKIC8qCi0gKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwLHJzNzgwLHJ2NzcwLHJ2NzMwLHJ2NzEwCisgKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwLHJzNzgwLHJzODgwCiAgKi8KK2ludCByNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI2MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjYwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByNjAwX3ZnYV9zZXRfc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGJvb2wgc3RhdGUpOworaW50IHI2MDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHI2MDBfY3BfY29tbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHVpbnQzMl90IHI2MDBfcGNpZXBfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcjYwMF9wY2llcF93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOworaW50IHI2MDBfY3NfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApOwordm9pZCByNjAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworaW50IHI2MDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCSAgdWludDY0X3Qgc3JjX29mZnNldCwKKwkJICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkgIHVuc2lnbmVkIG51bV9wYWdlcywKKwkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CitpbnQgcjYwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByNjAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjYwMF9zZXRfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcsCisJCQkgdWludDMyX3QgdGlsaW5nX2ZsYWdzLCB1aW50MzJfdCBwaXRjaCwKKwkJCSB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IG9ial9zaXplKTsKK2ludCByNjAwX2NsZWFyX3N1cmZhY2VfcmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgcmVnKTsKK3ZvaWQgcjYwMF9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKK2ludCByNjAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByNjAwX2NvcHlfYmxpdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJICAgdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKKwkJICAgdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjYwMF9hc2ljID0geworCS5lcnJhdGEgPSBOVUxMLAorCS5pbml0ID0gJnI2MDBfaW5pdCwKKwkuZmluaSA9ICZyNjAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjYwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjYwMF9yZXN1bWUsCisJLmNwX2NvbW1pdCA9ICZyNjAwX2NwX2NvbW1pdCwKKwkudnJhbV9pbmZvID0gTlVMTCwKKwkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCisJLmdwdV9yZXNldCA9ICZyNjAwX2dwdV9yZXNldCwKKwkubWNfaW5pdCA9IE5VTEwsCisJLm1jX2ZpbmkgPSBOVUxMLAorCS53Yl9pbml0ID0gJnI2MDBfd2JfaW5pdCwKKwkud2JfZmluaSA9ICZyNjAwX3diX2ZpbmksCisJLmdhcnRfZW5hYmxlID0gTlVMTCwKKwkuZ2FydF9kaXNhYmxlID0gTlVMTCwKKwkuZ2FydF90bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCisJLmNwX2luaXQgPSBOVUxMLAorCS5jcF9maW5pID0gTlVMTCwKKwkuY3BfZGlzYWJsZSA9IE5VTEwsCisJLnJpbmdfc3RhcnQgPSBOVUxMLAorCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyNjAwX2liX3Rlc3QsCisJLmlycV9zZXQgPSAmcjYwMF9pcnFfc2V0LAorCS5pcnFfcHJvY2VzcyA9ICZyNjAwX2lycV9wcm9jZXNzLAorCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjYwMF9mZW5jZV9yaW5nX2VtaXQsCisJLmNzX3BhcnNlID0gJnI2MDBfY3NfcGFyc2UsCisJLmNvcHlfYmxpdCA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuY29weV9kbWEgPSAmcjYwMF9jb3B5X2JsaXQsCisJLmNvcHkgPSAmcjYwMF9jb3B5X2JsaXQsCisJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAorCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCisJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKKwkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCisJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyNTIwX2JhbmR3aWR0aF91cGRhdGUsCit9OworCisvKgorICogcnY3NzAscnY3MzAscnY3MTAscnY3NDAKKyAqLworaW50IHJ2NzcwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBydjc3MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjc3MF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjc3MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJ2NzcwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnY3NzBfYXNpYyA9IHsKKwkuZXJyYXRhID0gTlVMTCwKKwkuaW5pdCA9ICZydjc3MF9pbml0LAorCS5maW5pID0gJnJ2NzcwX2ZpbmksCisJLnN1c3BlbmQgPSAmcnY3NzBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJ2NzcwX3Jlc3VtZSwKKwkuY3BfY29tbWl0ID0gJnI2MDBfY3BfY29tbWl0LAorCS52cmFtX2luZm8gPSBOVUxMLAorCS5ncHVfcmVzZXQgPSAmcnY3NzBfZ3B1X3Jlc2V0LAorCS52Z2Ffc2V0X3N0YXRlID0gJnI2MDBfdmdhX3NldF9zdGF0ZSwKKwkubWNfaW5pdCA9IE5VTEwsCisJLm1jX2ZpbmkgPSBOVUxMLAorCS53Yl9pbml0ID0gJnI2MDBfd2JfaW5pdCwKKwkud2JfZmluaSA9ICZyNjAwX3diX2ZpbmksCisJLmdhcnRfZW5hYmxlID0gTlVMTCwKKwkuZ2FydF9kaXNhYmxlID0gTlVMTCwKKwkuZ2FydF90bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCisJLmNwX2luaXQgPSBOVUxMLAorCS5jcF9maW5pID0gTlVMTCwKKwkuY3BfZGlzYWJsZSA9IE5VTEwsCisJLnJpbmdfc3RhcnQgPSBOVUxMLAorCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkuaWJfdGVzdCA9ICZyNjAwX2liX3Rlc3QsCisJLmlycV9zZXQgPSAmcjYwMF9pcnFfc2V0LAorCS5pcnFfcHJvY2VzcyA9ICZyNjAwX2lycV9wcm9jZXNzLAorCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjYwMF9mZW5jZV9yaW5nX2VtaXQsCisJLmNzX3BhcnNlID0gJnI2MDBfY3NfcGFyc2UsCisJLmNvcHlfYmxpdCA9ICZyNjAwX2NvcHlfYmxpdCwKKwkuY29weV9kbWEgPSAmcjYwMF9jb3B5X2JsaXQsCisJLmNvcHkgPSAmcjYwMF9jb3B5X2JsaXQsCisJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAorCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCisJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKKwkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCisJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyNTIwX2JhbmR3aWR0aF91cGRhdGUsCit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IGZjZmU1YzAuLjc0Mzc0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkJICAgICB1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlLAogCQkJCSAgICAgaW50ICpjb25uZWN0b3JfdHlwZSwKIAkJCQkgICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCi0JCQkJICAgICB1aW50OF90ICpsaW5lX211eCkKKwkJCQkgICAgIHVpbnQxNl90ICpsaW5lX211eCkKIHsKIAogCS8qIEFzdXMgTTJBLVZNIEhETUkgYm9hcmQgbGlzdHMgdGhlIERWSSBwb3J0IGFzIEhETUkgKi8KQEAgLTE0MywyMCArMTQzLDMxIEBACiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogc29tZSBCSU9TZXMgc2VlbSB0byByZXBvcnQgREFDIG9uIEhETUkgLSB0aGV5IGh1cnQgbWUgd2l0aCB0aGVpciBsaWVzICovCi0JaWYgKCgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKSB8fAotCSAgICAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQikpIHsKLQkJaWYgKHN1cHBvcnRlZF9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1JUX1NVUFBPUlQpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KIAkvKiBBU1VTIEhEIDM2MDAgWFQgYm9hcmQgbGlzdHMgdGhlIERWSSBwb3J0IGFzIEhETUkgKi8KIAlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTU5OCkgJiYKIAkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwNDMpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMWRhKSkgewotCQlpZiAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQikgewotCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CisJCWlmICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKSB7CisJCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKKwkJfQorCX0KKworCS8qIEFTVVMgSEQgMzQ1MCBib2FyZCBsaXN0cyB0aGUgRFZJIHBvcnQgYXMgSERNSSAqLworCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NUM1KSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTA0MykgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAxZTIpKSB7CisJCWlmICgqY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKSB7CisJCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKKwkJfQorCX0KKworCS8qIHNvbWUgQklPU2VzIHNlZW0gdG8gcmVwb3J0IERBQyBvbiBIRE1JIC0gdXN1YWxseSB0aGlzIGlzIGEgYm9hcmQgd2l0aAorCSAqIEhETUkgKyBWR0EgcmVwb3J0aW5nIGFzIEhETUkKKwkgKi8KKwlpZiAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSkgeworCQlpZiAoc3VwcG9ydGVkX2RldmljZSAmIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpIHsKKwkJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E7CisJCQkqbGluZV9tdXggPSAwOwogCQl9CiAJfQogCkBAIC0xOTIsMTEgKzIwMywxMSBAQAogCURSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGUsCiAJRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKIAlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKKwlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKIAlEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTiwKIAlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKIAlEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEsCiAJRFJNX01PREVfQ09OTkVDVE9SX0hETUlCLAotCURSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQiwKIAlEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywKIAlEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTiwKIAlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKQEAgLTIxOCw3ICsyMjksNyBAQAogCUFUT01fT0JKRUNUX0hFQURFUiAqb2JqX2hlYWRlcjsKIAlpbnQgaSwgaiwgcGF0aF9zaXplLCBkZXZpY2Vfc3VwcG9ydDsKIAlpbnQgY29ubmVjdG9yX3R5cGU7Ci0JdWludDE2X3QgaWdwX2xhbmVfaW5mbzsKKwl1aW50MTZfdCBpZ3BfbGFuZV9pbmZvLCBjb25uX2lkOwogCWJvb2wgbGlua2I7CiAJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBkZGNfYnVzOwogCkBAIC0zNzAsMTAgKzM4MSw2IEBACiAJCQkJCQkgICAgICAgJiYgcmVjb3JkLT4KIAkJCQkJCSAgICAgICB1Y1JlY29yZFR5cGUgPD0KIAkJCQkJCSAgICAgICBBVE9NX01BWF9PQkpFQ1RfUkVDT1JEX05VTUJFUikgewotCQkJCQkJCURSTV9FUlJPUgotCQkJCQkJCSAgICAoInJlY29yZCB0eXBlICVkXG4iLAotCQkJCQkJCSAgICAgcmVjb3JkLT4KLQkJCQkJCQkgICAgIHVjUmVjb3JkVHlwZSk7CiAJCQkJCQkJc3dpdGNoIChyZWNvcmQtPgogCQkJCQkJCQl1Y1JlY29yZFR5cGUpIHsKIAkJCQkJCQljYXNlIEFUT01fSTJDX1JFQ09SRF9UWVBFOgpAQCAtNDA5LDkgKzQxNiwxNSBAQAogCQkJZWxzZQogCQkJCWRkY19idXMgPSByYWRlb25fbG9va3VwX2dwaW8oZGV2LCBsaW5lX211eCk7CiAKKwkJCWNvbm5faWQgPSBsZTE2X3RvX2NwdShwYXRoLT51c0Nvbm5PYmplY3RJZCk7CisKKwkJCWlmICghcmFkZW9uX2F0b21fYXBwbHlfcXVpcmtzCisJCQkgICAgKGRldiwgbGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpLCAmY29ubmVjdG9yX3R5cGUsCisJCQkgICAgICZkZGNfYnVzLCAmY29ubl9pZCkpCisJCQkJY29udGludWU7CisKIAkJCXJhZGVvbl9hZGRfYXRvbV9jb25uZWN0b3IoZGV2LAotCQkJCQkJICBsZTE2X3RvX2NwdShwYXRoLT4KLQkJCQkJCQkgICAgICB1c0Nvbm5PYmplY3RJZCksCisJCQkJCQkgIGNvbm5faWQsCiAJCQkJCQkgIGxlMTZfdG9fY3B1KHBhdGgtPgogCQkJCQkJCSAgICAgIHVzRGV2aWNlVGFnKSwKIAkJCQkJCSAgY29ubmVjdG9yX3R5cGUsICZkZGNfYnVzLApAQCAtNDI3LDcgKzQ0MCw3IEBACiAKIHN0cnVjdCBiaW9zX2Nvbm5lY3RvciB7CiAJYm9vbCB2YWxpZDsKLQl1aW50OF90IGxpbmVfbXV4OworCXVpbnQxNl90IGxpbmVfbXV4OwogCXVpbnQxNl90IGRldmljZXM7CiAJaW50IGNvbm5lY3Rvcl90eXBlOwogCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgZGRjX2J1czsKQEAgLTQ3MSwxMSArNDg0LDYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGkgPT0gQVRPTV9ERVZJQ0VfVFYxX0lOREVYKSB7Ci0JCQlEUk1fREVCVUcoIlNraXBwaW5nIFRWIE91dFxuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWJpb3NfY29ubmVjdG9yc1tpXS5jb25uZWN0b3JfdHlwZSA9CiAJCSAgICBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3JfY29udmVydFtjaS5zdWNDb25uZWN0b3JJbmZvLgogCQkJCQkJCXNiZkFjY2Vzcy4KQEAgLTcxMSw5ICs3MTksOCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICpyYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhzdHJ1Y3QKLQkJCQkJCQkgICAgICByYWRlb25fZW5jb2RlcgotCQkJCQkJCSAgICAgICplbmNvZGVyKQorYm9vbCByYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC03MjQsNyArNzMxLDYgQEAKIAl1aW50OF90IGZyZXYsIGNyZXY7CiAJdWludDE2X3QgbWF4ZnJlcTsKIAlpbnQgaTsKLQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnRtZHMgPSBOVUxMOwogCiAJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsICZmcmV2LAogCQkJICAgICAgICZjcmV2LCAmZGF0YV9vZmZzZXQpOwpAQCAtNzM0LDEyICs3NDAsNiBAQAogCQkJCSAgICAgICBkYXRhX29mZnNldCk7CiAKIAlpZiAodG1kc19pbmZvKSB7Ci0JCXRtZHMgPQotCQkgICAga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCF0bWRzKQotCQkJcmV0dXJuIE5VTEw7Ci0KIAkJbWF4ZnJlcSA9IGxlMTZfdG9fY3B1KHRtZHNfaW5mby0+dXNNYXhGcmVxdWVuY3kpOwogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCQl0bWRzLT50bWRzX3BsbFtpXS5mcmVxID0KQEAgLTc2NSw4ICs3NjUsOSBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCXJldHVybiB0cnVlOwogCX0KLQlyZXR1cm4gdG1kczsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHVuaW9uIGx2ZHNfaW5mbyB7CkBAIC04NTgsNiArODU5LDcyIEBACiAJcmV0dXJuIHBfZGFjOwogfQogCitib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCisJCQkJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqY3J0Y190aW1pbmcsCisJCQkJaW50MzJfdCAqcGl4ZWxfY2xvY2spCit7CisJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CisJQVRPTV9BTkFMT0dfVFZfSU5GTyAqdHZfaW5mbzsKKwlBVE9NX0FOQUxPR19UVl9JTkZPX1YxXzIgKnR2X2luZm9fdjFfMjsKKwlBVE9NX0RURF9GT1JNQVQgKmR0ZF90aW1pbmdzOworCWludCBkYXRhX2luZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgQW5hbG9nVFZfSW5mbyk7CisJdTggZnJldiwgY3JldjsKKwl1aW50MTZfdCBkYXRhX29mZnNldDsKKworCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGRhdGFfaW5kZXgsIE5VTEwsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKKworCXN3aXRjaCAoY3JldikgeworCWNhc2UgMToKKwkJdHZfaW5mbyA9IChBVE9NX0FOQUxPR19UVl9JTkZPICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOworCQlpZiAoaW5kZXggPiBNQVhfU1VQUE9SVEVEX1RWX1RJTUlORykKKwkJCXJldHVybiBmYWxzZTsKKworCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9Ub3RhbCk7CisJCWNydGNfdGltaW5nLT51c0hfRGlzcCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfRGlzcCk7CisJCWNydGNfdGltaW5nLT51c0hfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jU3RhcnQpOworCQljcnRjX3RpbWluZy0+dXNIX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1dpZHRoKTsKKworCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9Ub3RhbCk7CisJCWNydGNfdGltaW5nLT51c1ZfRGlzcCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfRGlzcCk7CisJCWNydGNfdGltaW5nLT51c1ZfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jU3RhcnQpOworCQljcnRjX3RpbWluZy0+dXNWX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1dpZHRoKTsKKworCQljcnRjX3RpbWluZy0+c3VzTW9kZU1pc2NJbmZvID0gdHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS5zdXNNb2RlTWlzY0luZm87CisKKwkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5SaWdodCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuUmlnaHQpOworCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkxlZnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhbkxlZnQpOworCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkJvdHRvbSA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuQm90dG9tKTsKKwkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5Ub3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhblRvcCk7CisJCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOworCisJCWlmIChpbmRleCA9PSAxKSB7CisJCQkvKiBQQUwgdGltaW5ncyBhcHBlYXIgdG8gaGF2ZSB3cm9uZyB2YWx1ZXMgZm9yIHRvdGFscyAqLworCQkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCAtPSAxOworCQkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCAtPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdHZfaW5mb192MV8yID0gKEFUT01fQU5BTE9HX1RWX0lORk9fVjFfMiAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKwkJaWYgKGluZGV4ID4gTUFYX1NVUFBPUlRFRF9UVl9USU1JTkdfVjFfMikKKwkJCXJldHVybiBmYWxzZTsKKworCQlkdGRfdGltaW5ncyA9ICZ0dl9pbmZvX3YxXzItPmFNb2RlVGltaW5nc1tpbmRleF07CisJCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hCbGFua2luZ19UaW1lKTsKKwkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSk7CisJCWNydGNfdGltaW5nLT51c0hfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY09mZnNldCk7CisJCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNXaWR0aCk7CisJCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZCbGFua2luZ19UaW1lKTsKKwkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSk7CisJCWNydGNfdGltaW5nLT51c1ZfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY09mZnNldCk7CisJCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVlN5bmNXaWR0aCk7CisKKwkJY3J0Y190aW1pbmctPnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOworCQkqcGl4ZWxfY2xvY2sgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNQaXhDbGspICogMTA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqCiByYWRlb25fYXRvbWJpb3NfZ2V0X3R2X2RhY19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlcikKIHsKQEAgLTk0OCwxMCArMTAxNSwxMCBAQAogCXVpbnQzMl90IGJpb3NfMl9zY3JhdGNoLCBiaW9zXzZfc2NyYXRjaDsKIAogCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7Ci0JCWJpb3NfMl9zY3JhdGNoID0gUlJFRzMyKFI2MDBfQklPU18wX1NDUkFUQ0gpOworCQliaW9zXzJfc2NyYXRjaCA9IFJSRUczMihSNjAwX0JJT1NfMl9TQ1JBVENIKTsKIAkJYmlvc182X3NjcmF0Y2ggPSBSUkVHMzIoUjYwMF9CSU9TXzZfU0NSQVRDSCk7CiAJfSBlbHNlIHsKLQkJYmlvc18yX3NjcmF0Y2ggPSBSUkVHMzIoUkFERU9OX0JJT1NfMF9TQ1JBVENIKTsKKwkJYmlvc18yX3NjcmF0Y2ggPSBSUkVHMzIoUkFERU9OX0JJT1NfMl9TQ1JBVENIKTsKIAkJYmlvc182X3NjcmF0Y2ggPSBSUkVHMzIoUkFERU9OX0JJT1NfNl9TQ1JBVENIKTsKIAl9CiAKQEAgLTk3MSw2ICsxMDM4LDM0IEBACiAKIH0KIAordm9pZCByYWRlb25fc2F2ZV9iaW9zX3NjcmF0Y2hfcmVncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1aW50MzJfdCBzY3JhdGNoX3JlZzsKKwlpbnQgaTsKKworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQlzY3JhdGNoX3JlZyA9IFI2MDBfQklPU18wX1NDUkFUQ0g7CisJZWxzZQorCQlzY3JhdGNoX3JlZyA9IFJBREVPTl9CSU9TXzBfU0NSQVRDSDsKKworCWZvciAoaSA9IDA7IGkgPCBSQURFT05fQklPU19OVU1fU0NSQVRDSDsgaSsrKQorCQlyZGV2LT5iaW9zX3NjcmF0Y2hbaV0gPSBSUkVHMzIoc2NyYXRjaF9yZWcgKyAoaSAqIDQpKTsKK30KKwordm9pZCByYWRlb25fcmVzdG9yZV9iaW9zX3NjcmF0Y2hfcmVncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1aW50MzJfdCBzY3JhdGNoX3JlZzsKKwlpbnQgaTsKKworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQlzY3JhdGNoX3JlZyA9IFI2MDBfQklPU18wX1NDUkFUQ0g7CisJZWxzZQorCQlzY3JhdGNoX3JlZyA9IFJBREVPTl9CSU9TXzBfU0NSQVRDSDsKKworCWZvciAoaSA9IDA7IGkgPCBSQURFT05fQklPU19OVU1fU0NSQVRDSDsgaSsrKQorCQlXUkVHMzIoc2NyYXRjaF9yZWcgKyAoaSAqIDQpLCByZGV2LT5iaW9zX3NjcmF0Y2hbaV0pOworfQorCiB2b2lkIHJhZGVvbl9hdG9tX291dHB1dF9sb2NrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgYm9vbCBsb2NrKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCmluZGV4IGEzN2NiY2UuLjE1MmVlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCkBAIC0xMDIsMTAgKzEwMiwxMiBAQAogCQkJcDFwbGwtPnJlZmVyZW5jZV9kaXYgPSAxMjsKIAkJaWYgKHAycGxsLT5yZWZlcmVuY2VfZGl2IDwgMikKIAkJCXAycGxsLT5yZWZlcmVuY2VfZGl2ID0gMTI7Ci0JCWlmIChzcGxsLT5yZWZlcmVuY2VfZGl2IDwgMikKLQkJCXNwbGwtPnJlZmVyZW5jZV9kaXYgPQotCQkJICAgIFJSRUczMl9QTEwoUkFERU9OX01fU1BMTF9SRUZfRkJfRElWKSAmCi0JCQkgICAgUkFERU9OX01fU1BMTF9SRUZfRElWX01BU0s7CisJCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1JTNjAwKSB7CisJCQlpZiAoc3BsbC0+cmVmZXJlbmNlX2RpdiA8IDIpCisJCQkJc3BsbC0+cmVmZXJlbmNlX2RpdiA9CisJCQkJCVJSRUczMl9QTEwoUkFERU9OX01fU1BMTF9SRUZfRkJfRElWKSAmCisJCQkJCVJBREVPTl9NX1NQTExfUkVGX0RJVl9NQVNLOworCQl9CiAJCWlmIChtcGxsLT5yZWZlcmVuY2VfZGl2IDwgMikKIAkJCW1wbGwtPnJlZmVyZW5jZV9kaXYgPSBzcGxsLT5yZWZlcmVuY2VfZGl2OwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggMmEwMjdlMC4uNzQ4MjY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtODYzLDggKzg2MywxMCBAQAogCWludCB0bXAsIGk7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2x2ZHMgKmx2ZHMgPSBOVUxMOwogCi0JaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkKLQkJcmV0dXJuIHJhZGVvbl9sZWdhY3lfZ2V0X2x2ZHNfaW5mb19mcm9tX3JlZ3MocmRldik7CisJaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkgeworCQlsdmRzID0gcmFkZW9uX2xlZ2FjeV9nZXRfbHZkc19pbmZvX2Zyb21fcmVncyhyZGV2KTsKKwkJZ290byBvdXQ7CisJfQogCiAJbGNkX2luZm8gPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX0xDRF9JTkZPX1RBQkxFKTsKIApAQCAtOTY1LDExICs5NjcsMTMgQEAKIAkJCQlsdmRzLT5uYXRpdmVfbW9kZS5mbGFncyA9IDA7CiAJCQl9CiAJCX0KLQkJZW5jb2Rlci0+bmF0aXZlX21vZGUgPSBsdmRzLT5uYXRpdmVfbW9kZTsKIAl9IGVsc2UgewogCQlEUk1fSU5GTygiTm8gcGFuZWwgaW5mbyBmb3VuZCBpbiBCSU9TXG4iKTsKLQkJcmV0dXJuIHJhZGVvbl9sZWdhY3lfZ2V0X2x2ZHNfaW5mb19mcm9tX3JlZ3MocmRldik7CisJCWx2ZHMgPSByYWRlb25fbGVnYWN5X2dldF9sdmRzX2luZm9fZnJvbV9yZWdzKHJkZXYpOwogCX0KK291dDoKKwlpZiAobHZkcykKKwkJZW5jb2Rlci0+bmF0aXZlX21vZGUgPSBsdmRzLT5uYXRpdmVfbW9kZTsKIAlyZXR1cm4gbHZkczsKIH0KIApAQCAtOTk0LDQ4ICs5OTgsMzcgQEAKIAl7ezE1MDAwLCAweGIwMTU1fSwgezB4ZmZmZmZmZmYsIDB4YjAxY2J9LCB7MCwgMH0sIHswLCAwfX0sCS8qIENISVBfUlM0ODAgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMKLSAgICAqcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fdGFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitib29sIHJhZGVvbl9sZWdhY3lfZ2V0X3RtZHNfaW5mb19mcm9tX3RhYmxlKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJICAgIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqdG1kcykKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpOwotCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqdG1kcyA9IE5VTEw7Ci0KLQl0bWRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXRtZHMpCi0JCXJldHVybiBOVUxMOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQl0bWRzLT50bWRzX3BsbFtpXS52YWx1ZSA9Ci0JCSAgICBkZWZhdWx0X3RtZHNfcGxsW3JkZXYtPmZhbWlseV1baV0udmFsdWU7CisJCQlkZWZhdWx0X3RtZHNfcGxsW3JkZXYtPmZhbWlseV1baV0udmFsdWU7CiAJCXRtZHMtPnRtZHNfcGxsW2ldLmZyZXEgPSBkZWZhdWx0X3RtZHNfcGxsW3JkZXYtPmZhbWlseV1baV0uZnJlcTsKIAl9CiAKLQlyZXR1cm4gdG1kczsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICpyYWRlb25fY29tYmlvc19nZXRfdG1kc19pbmZvKHN0cnVjdAotCQkJCQkJCSAgICAgcmFkZW9uX2VuY29kZXIKLQkJCQkJCQkgICAgICplbmNvZGVyKQorYm9vbCByYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV9jb21iaW9zKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJICAgICAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDE2X3QgdG1kc19pbmZvOwogCWludCBpLCBuOwogCXVpbnQ4X3QgdmVyOwotCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqdG1kcyA9IE5VTEw7CiAKIAlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlyZXR1cm4gcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fdGFibGUocmRldik7CisJCXJldHVybiBmYWxzZTsKIAogCXRtZHNfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfREZQX0lORk9fVEFCTEUpOwogCiAJaWYgKHRtZHNfaW5mbykgewotCQl0bWRzID0KLQkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyksIEdGUF9LRVJORUwpOwotCi0JCWlmICghdG1kcykKLQkJCXJldHVybiBOVUxMOwogCiAJCXZlciA9IFJCSU9TOCh0bWRzX2luZm8pOwogCQlEUk1fSU5GTygiREZQIHRhYmxlIHJldmlzaW9uOiAlZFxuIiwgdmVyKTsKQEAgLTEwNzMsNiArMTA2NiwyMyBAQAogCQl9CiAJfSBlbHNlCiAJCURSTV9JTkZPKCJObyBUTURTIGluZm8gZm91bmQgaW4gQklPU1xuIik7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqcmFkZW9uX2NvbWJpb3NfZ2V0X3RtZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzID0gTlVMTDsKKwlib29sIHJldDsKKworCXRtZHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMpLCBHRlBfS0VSTkVMKTsKKworCWlmICghdG1kcykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSByYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV9jb21iaW9zKGVuY29kZXIsIHRtZHMpOworCWlmIChyZXQgPT0gZmFsc2UpCisJCXJhZGVvbl9sZWdhY3lfZ2V0X3RtZHNfaW5mb19mcm9tX3RhYmxlKGVuY29kZXIsIHRtZHMpOworCiAJcmV0dXJuIHRtZHM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwppbmRleCA3MGVkZTZhLi5hZjFkNTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgImF0b20uaCIKIAogZXh0ZXJuIHZvaWQKIHJhZGVvbl9jb21iaW9zX2Nvbm5lY3RlZF9zY3JhdGNoX3JlZ3Moc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKQEAgLTM4LDYgKzM5LDE1IEBACiAJCQkJICAgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCQkgICAgICAgYm9vbCBjb25uZWN0ZWQpOwogCitzdGF0aWMgdm9pZCByYWRlb25fcHJvcGVydHlfY2hhbmdlX21vZGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29kZXItPmNydGM7CisKKwlpZiAoY3J0YyAmJiBjcnRjLT5lbmFibGVkKSB7CisJCWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShjcnRjLCAmY3J0Yy0+bW9kZSwKKwkJCQkJIGNydGMtPngsIGNydGMtPnksIGNydGMtPmZiKTsKKwl9Cit9CiBzdGF0aWMgdm9pZAogcmFkZW9uX2Nvbm5lY3Rvcl91cGRhdGVfc2NyYXRjaF9yZWdzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKQogewpAQCAtNzcsNiArODcsMjcgQEAKIAl9CiB9CiAKK3N0cnVjdCBkcm1fZW5jb2RlciAqcmFkZW9uX2ZpbmRfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgZW5jb2Rlcl90eXBlKQoreworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7CisJCWlmIChjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldID09IDApCisJCQlicmVhazsKKworCQlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChjb25uZWN0b3ItPmRldiwgY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSwgRFJNX01PREVfT0JKRUNUX0VOQ09ERVIpOworCQlpZiAoIW9iaikKKwkJCWNvbnRpbnVlOworCisJCWVuY29kZXIgPSBvYmpfdG9fZW5jb2RlcihvYmopOworCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09IGVuY29kZXJfdHlwZSkKKwkJCXJldHVybiBlbmNvZGVyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogc3RydWN0IGRybV9lbmNvZGVyICpyYWRlb25fYmVzdF9zaW5nbGVfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCWludCBlbmNfaWQgPSBjb25uZWN0b3ItPmVuY29kZXJfaWRzWzBdOwpAQCAtOTQsNiArMTI1LDUzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiByYWRlb25fY29ubmVjdG9yX2FuYWxvZ19lbmNvZGVyX2NvbmZsaWN0X3NvbHZlCisgKiAtIHNlYXJjaCBmb3Igb3RoZXIgY29ubmVjdG9ycyBzaGFyaW5nIHRoaXMgZW5jb2RlcgorICogICBpZiBwcmlvcml0eSBpcyB0cnVlLCB0aGVuIHNldCB0aGVtIGRpc2Nvbm5lY3RlZCBpZiB0aGlzIGlzIGNvbm5lY3RlZAorICogICBpZiBwcmlvcml0eSBpcyBmYWxzZSwgc2V0IHVzIGRpc2Nvbm5lY3RlZCBpZiB0aGV5IGFyZSBjb25uZWN0ZWQKKyAqLworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3JhZGVvbl9jb25uZWN0b3JfYW5hbG9nX2VuY29kZXJfY29uZmxpY3Rfc29sdmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJICAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY3VycmVudF9zdGF0dXMsCisJCQkJCSAgICAgICBib29sIHByaW9yaXR5KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uZmxpY3Q7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbmZsaWN0LCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoY29uZmxpY3QgPT0gY29ubmVjdG9yKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7IGkrKykgeworCQkJaWYgKGNvbmZsaWN0LT5lbmNvZGVyX2lkc1tpXSA9PSAwKQorCQkJCWJyZWFrOworCisJCQkvKiBpZiB0aGUgSURzIG1hdGNoICovCisJCQlpZiAoY29uZmxpY3QtPmVuY29kZXJfaWRzW2ldID09IGVuY29kZXItPmJhc2UuaWQpIHsKKwkJCQlpZiAoY29uZmxpY3QtPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAocHJpb3JpdHkgPT0gdHJ1ZSkgeworCQkJCQlEUk1fSU5GTygiMTogY29uZmxpY3RpbmcgZW5jb2RlcnMgc3dpdGNoaW5nIG9mZiAlc1xuIiwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25mbGljdCkpOworCQkJCQlEUk1fSU5GTygiaW4gZmF2b3Igb2YgJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJCQkJCWNvbmZsaWN0LT5zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCQkJcmFkZW9uX2Nvbm5lY3Rvcl91cGRhdGVfc2NyYXRjaF9yZWdzKGNvbmZsaWN0LCBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRFJNX0lORk8oIjI6IGNvbmZsaWN0aW5nIGVuY29kZXJzIHN3aXRjaGluZyBvZmYgJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJCQkJCURSTV9JTkZPKCJpbiBmYXZvciBvZiAlc1xuIiwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25mbGljdCkpOworCQkJCQljdXJyZW50X3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gY3VycmVudF9zdGF0dXM7CisKK30KKwogc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpyYWRlb25fZnBfbmF0aXZlX21vZGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CkBAIC0xMjYsMTIgKzIwNCwxNzEgQEAKIAlyZXR1cm4gbW9kZTsKIH0KIAorc3RhdGljIHZvaWQgcmFkZW9uX2FkZF9jb21tb25fbW9kZXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKKwlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CisJaW50IGk7CisJc3RydWN0IG1vZGVfc2l6ZSB7CisJCWludCB3OworCQlpbnQgaDsKKwl9IGNvbW1vbl9tb2Rlc1sxN10gPSB7CisJCXsgNjQwLCAgNDgwfSwKKwkJeyA3MjAsICA0ODB9LAorCQl7IDgwMCwgIDYwMH0sCisJCXsgODQ4LCAgNDgwfSwKKwkJezEwMjQsICA3Njh9LAorCQl7MTE1MiwgIDc2OH0sCisJCXsxMjgwLCAgNzIwfSwKKwkJezEyODAsICA4MDB9LAorCQl7MTI4MCwgIDg1NH0sCisJCXsxMjgwLCAgOTYwfSwKKwkJezEyODAsIDEwMjR9LAorCQl7MTQ0MCwgIDkwMH0sCisJCXsxNDAwLCAxMDUwfSwKKwkJezE2ODAsIDEwNTB9LAorCQl7MTYwMCwgMTIwMH0sCisJCXsxOTIwLCAxMDgwfSwKKwkJezE5MjAsIDEyMDB9CisJfTsKKworCWZvciAoaSA9IDA7IGkgPCAxNzsgaSsrKSB7CisJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKKwkJCWlmIChjb21tb25fbW9kZXNbaV0udyA+IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIHx8CisJCQkgICAgY29tbW9uX21vZGVzW2ldLmggPiBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyB8fAorCQkJICAgIChjb21tb25fbW9kZXNbaV0udyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyAmJgorCQkJICAgICBjb21tb25fbW9kZXNbaV0uaCA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53IDwgMzIwIHx8IGNvbW1vbl9tb2Rlc1tpXS5oIDwgMjAwKQorCQkJY29udGludWU7CisKKwkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGNvbW1vbl9tb2Rlc1tpXS53LCBjb21tb25fbW9kZXNbaV0uaCwgNjAsIGZhbHNlLCBmYWxzZSk7CisJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKKwl9Cit9CisKIGludCByYWRlb25fY29ubmVjdG9yX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKIAkJCQkgIHVpbnQ2NF90IHZhbCkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyOworCisJaWYgKHByb3BlcnR5ID09IHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5KSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOworCisJCS8qIG5lZWQgdG8gZmluZCBkaWdpdGFsIGVuY29kZXIgb24gY29ubmVjdG9yICovCisJCWVuY29kZXIgPSByYWRlb25fZmluZF9lbmNvZGVyKGNvbm5lY3RvciwgRFJNX01PREVfRU5DT0RFUl9UTURTKTsKKwkJaWYgKCFlbmNvZGVyKQorCQkJcmV0dXJuIDA7CisKKwkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKworCQlpZiAoIXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdikKKwkJCXJldHVybiAwOworCisJCWRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJZGlnLT5jb2hlcmVudF9tb2RlID0gdmFsID8gdHJ1ZSA6IGZhbHNlOworCQlyYWRlb25fcHJvcGVydHlfY2hhbmdlX21vZGUoJnJhZGVvbl9lbmNvZGVyLT5iYXNlKTsKKwl9CisKKwlpZiAocHJvcGVydHkgPT0gcmRldi0+bW9kZV9pbmZvLnR2X3N0ZF9wcm9wZXJ0eSkgeworCQllbmNvZGVyID0gcmFkZW9uX2ZpbmRfZW5jb2Rlcihjb25uZWN0b3IsIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMpOworCQlpZiAoIWVuY29kZXIpIHsKKwkJCWVuY29kZXIgPSByYWRlb25fZmluZF9lbmNvZGVyKGNvbm5lY3RvciwgRFJNX01PREVfRU5DT0RFUl9EQUMpOworCQl9CisKKwkJaWYgKCFlbmNvZGVyKQorCQkJcmV0dXJuIDA7CisKKwkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJaWYgKCFyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICpkYWNfaW50OworCQkJZGFjX2ludCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJCWRhY19pbnQtPnR2X3N0ZCA9IHZhbDsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKmRhY19pbnQ7CisJCQlkYWNfaW50ID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJZGFjX2ludC0+dHZfc3RkID0gdmFsOworCQl9CisJCXJhZGVvbl9wcm9wZXJ0eV9jaGFuZ2VfbW9kZSgmcmFkZW9uX2VuY29kZXItPmJhc2UpOworCX0KKworCWlmIChwcm9wZXJ0eSA9PSByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHkpIHsKKwkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPQorCQkJdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJCWlmICh2YWwgPT0gMCkKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IGZhbHNlOworCQllbHNlCisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOworCX0KKworCWlmIChwcm9wZXJ0eSA9PSByZGV2LT5tb2RlX2luZm8udG1kc19wbGxfcHJvcGVydHkpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzID0gTlVMTDsKKwkJYm9vbCByZXQgPSBmYWxzZTsKKwkJLyogbmVlZCB0byBmaW5kIGRpZ2l0YWwgZW5jb2RlciBvbiBjb25uZWN0b3IgKi8KKwkJZW5jb2RlciA9IHJhZGVvbl9maW5kX2VuY29kZXIoY29ubmVjdG9yLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOworCQlpZiAoIWVuY29kZXIpCisJCQlyZXR1cm4gMDsKKworCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCisJCXRtZHMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCWlmICghdG1kcykKKwkJCXJldHVybiAwOworCisJCWlmICh2YWwgPT0gMCkgeworCQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykKKwkJCQlyZXQgPSByYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhyYWRlb25fZW5jb2RlciwgdG1kcyk7CisJCQllbHNlCisJCQkJcmV0ID0gcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fY29tYmlvcyhyYWRlb25fZW5jb2RlciwgdG1kcyk7CisJCX0KKwkJaWYgKHZhbCA9PSAxIHx8IHJldCA9PSBmYWxzZSkgeworCQkJcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fdGFibGUocmFkZW9uX2VuY29kZXIsIHRtZHMpOworCQl9CisJCXJhZGVvbl9wcm9wZXJ0eV9jaGFuZ2VfbW9kZSgmcmFkZW9uX2VuY29kZXItPmJhc2UpOworCX0KKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCByYWRlb25fZml4dXBfbHZkc19uYXRpdmVfbW9kZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0JdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCisJLyogVHJ5IHRvIGdldCBuYXRpdmUgbW9kZSBkZXRhaWxzIGZyb20gRURJRCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdCwgKm1vZGU7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkgeworCQkJaWYgKG1vZGUtPmhkaXNwbGF5ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICYmCisJCQkgICAgbW9kZS0+dmRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMpIHsKKwkJCQluYXRpdmVfbW9kZS0+aGJsYW5rID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aGRpc3BsYXk7CisJCQkJbmF0aXZlX21vZGUtPmhvdmVycGx1cyA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXk7CisJCQkJbmF0aXZlX21vZGUtPmhzeW5jX3dpZHRoID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJCQkJbmF0aXZlX21vZGUtPnZibGFuayA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZkaXNwbGF5OworCQkJCW5hdGl2ZV9tb2RlLT52b3ZlcnBsdXMgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5OworCQkJCW5hdGl2ZV9tb2RlLT52c3luY193aWR0aCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCQkJCW5hdGl2ZV9tb2RlLT5kb3RjbG9jayA9IG1vZGUtPmNsb2NrOworCQkJCURSTV9JTkZPKCJEZXRlcm1pbmVkIExWRFMgbmF0aXZlIG1vZGUgZGV0YWlscyBmcm9tIEVESURcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmICghbmF0aXZlX21vZGUtPmRvdGNsb2NrKSB7CisJCURSTV9JTkZPKCJObyBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMsIGRpc2FibGluZyBSTVhcbiIpOworCQlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBSTVhfT0ZGOworCX0KK30KIAogc3RhdGljIGludCByYWRlb25fbHZkc19nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKQEAgLTE0Myw2ICszODAsMTIgQEAKIAlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgewogCQlyZXQgPSByYWRlb25fZGRjX2dldF9tb2RlcyhyYWRlb25fY29ubmVjdG9yKTsKIAkJaWYgKHJldCA+IDApIHsKKwkJCWVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOworCQkJaWYgKGVuY29kZXIpIHsKKwkJCQlyYWRlb25fZml4dXBfbHZkc19uYXRpdmVfbW9kZShlbmNvZGVyLCBjb25uZWN0b3IpOworCQkJCS8qIGFkZCBzY2FsZWQgbW9kZXMgKi8KKwkJCQlyYWRlb25fYWRkX2NvbW1vbl9tb2RlcyhlbmNvZGVyLCBjb25uZWN0b3IpOworCQkJfQogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTE1Niw3ICszOTksMTAgQEAKIAlpZiAobW9kZSkgewogCQlyZXQgPSAxOwogCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJCS8qIGFkZCBzY2FsZWQgbW9kZXMgKi8KKwkJcmFkZW9uX2FkZF9jb21tb25fbW9kZXMoZW5jb2RlciwgY29ubmVjdG9yKTsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODYsNiArNDMyLDQyIEBACiAJa2ZyZWUoY29ubmVjdG9yKTsKIH0KIAorc3RhdGljIGludCByYWRlb25fbHZkc19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkJICAgIHVpbnQ2NF90IHZhbHVlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyOworCWVudW0gcmFkZW9uX3JteF90eXBlIHJteF90eXBlOworCisJRFJNX0RFQlVHKCJcbiIpOworCWlmIChwcm9wZXJ0eSAhPSBkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY29ubmVjdG9yLT5lbmNvZGVyKQorCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGNvbm5lY3Rvci0+ZW5jb2Rlcik7CisJZWxzZSB7CisJCXN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqY29ubmVjdG9yX2Z1bmNzID0gY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZTsKKwkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2Rlcihjb25uZWN0b3JfZnVuY3MtPmJlc3RfZW5jb2Rlcihjb25uZWN0b3IpKTsKKwl9CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSBEUk1fTU9ERV9TQ0FMRV9OT05FOiBybXhfdHlwZSA9IFJNWF9PRkY7IGJyZWFrOworCWNhc2UgRFJNX01PREVfU0NBTEVfQ0VOVEVSOiBybXhfdHlwZSA9IFJNWF9DRU5URVI7IGJyZWFrOworCWNhc2UgRFJNX01PREVfU0NBTEVfQVNQRUNUOiBybXhfdHlwZSA9IFJNWF9BU1BFQ1Q7IGJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOOiBybXhfdHlwZSA9IFJNWF9GVUxMOyBicmVhazsKKwl9CisJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9PSBybXhfdHlwZSkKKwkJcmV0dXJuIDA7CisKKwlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBybXhfdHlwZTsKKworCXJhZGVvbl9wcm9wZXJ0eV9jaGFuZ2VfbW9kZSgmcmFkZW9uX2VuY29kZXItPmJhc2UpOworCXJldHVybiAwOworfQorCisKIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyByYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewogCS5nZXRfbW9kZXMgPSByYWRlb25fbHZkc19nZXRfbW9kZXMsCiAJLm1vZGVfdmFsaWQgPSByYWRlb25fbHZkc19tb2RlX3ZhbGlkLApAQCAtMTk3LDcgKzQ3OSw3IEBACiAJLmRldGVjdCA9IHJhZGVvbl9sdmRzX2RldGVjdCwKIAkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKIAkuZGVzdHJveSA9IHJhZGVvbl9jb25uZWN0b3JfZGVzdHJveSwKLQkuc2V0X3Byb3BlcnR5ID0gcmFkZW9uX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCisJLnNldF9wcm9wZXJ0eSA9IHJhZGVvbl9sdmRzX3NldF9wcm9wZXJ0eSwKIH07CiAKIHN0YXRpYyBpbnQgcmFkZW9uX3ZnYV9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKQEAgLTIxMyw3ICs0OTUsNiBAQAogc3RhdGljIGludCByYWRlb25fdmdhX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewotCiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKQEAgLTIyNSwyMiArNTA2LDI0IEBACiAJYm9vbCBkcmV0OwogCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKKwllbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKKwlpZiAoIWVuY29kZXIpCisJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKIAlpZiAoZHJldCkKIAkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJZWxzZSB7Ci0JCS8qIGlmIEVESUQgZmFpbHMgdG8gYSBsb2FkIGRldGVjdCAqLwotCQllbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKLQkJaWYgKCFlbmNvZGVyKQotCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Ci0JCWVsc2UgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KSB7CiAJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CiAJCQlyZXQgPSBlbmNvZGVyX2Z1bmNzLT5kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKTsKIAkJfQogCX0KIAorCWlmIChyZXQgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCisJCXJldCA9IHJhZGVvbl9jb25uZWN0b3JfYW5hbG9nX2VuY29kZXJfY29uZmxpY3Rfc29sdmUoY29ubmVjdG9yLCBlbmNvZGVyLCByZXQsIHRydWUpOwogCXJhZGVvbl9jb25uZWN0b3JfdXBkYXRlX3NjcmF0Y2hfcmVncyhjb25uZWN0b3IsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI1OSwyMSArNTQyLDk3IEBACiAJLnNldF9wcm9wZXJ0eSA9IHJhZGVvbl9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAogfTsKIAorc3RhdGljIGludCByYWRlb25fdHZfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdHZfbW9kZTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisKKwllbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKKwlpZiAoIWVuY29kZXIpCisJCXJldHVybiAwOworCisJLyogYXZpdm8gY2hpcHMgY2FuIHNjYWxlIGFueSBtb2RlICovCisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JTNjAwKQorCQkvKiBhZGQgc2NhbGVkIG1vZGVzICovCisJCXJhZGVvbl9hZGRfY29tbW9uX21vZGVzKGVuY29kZXIsIGNvbm5lY3Rvcik7CisJZWxzZSB7CisJCS8qIG9ubHkgODAweDYwMCBpcyBzdXBwb3J0ZWQgcmlnaHQgbm93IG9uIHByZS1hdml2byBjaGlwcyAqLworCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UpOworCQl0dl9tb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIHR2X21vZGUpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByYWRlb25fdHZfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByYWRlb25fdHZfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KQorCQlyZXR1cm4gcmV0OworCisJZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisJaWYgKCFlbmNvZGVyKQorCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwllbHNlIHsKKwkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQlyZXQgPSBlbmNvZGVyX2Z1bmNzLT5kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKTsKKwl9CisJaWYgKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKKwkJcmV0ID0gcmFkZW9uX2Nvbm5lY3Rvcl9hbmFsb2dfZW5jb2Rlcl9jb25mbGljdF9zb2x2ZShjb25uZWN0b3IsIGVuY29kZXIsIHJldCwgZmFsc2UpOworCXJhZGVvbl9jb25uZWN0b3JfdXBkYXRlX3NjcmF0Y2hfcmVncyhjb25uZWN0b3IsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSByYWRlb25fdHZfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gcmFkZW9uX3R2X21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyLAorfTsKKworc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgcmFkZW9uX3R2X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IHJhZGVvbl90dl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSByYWRlb25fY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnNldF9wcm9wZXJ0eSA9IHJhZGVvbl9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAorfTsKKwogc3RhdGljIGludCByYWRlb25fZHZpX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCWludCByZXQ7CiAKIAlyZXQgPSByYWRlb25fZGRjX2dldF9tb2RlcyhyYWRlb25fY29ubmVjdG9yKTsKLQkvKiByZXNldCBzY3JhdGNoIHJlZ3MgaGVyZSBzaW5jZSByYWRlb25fZHZpX2RldGVjdCBkb2Vzbid0IGNoZWNrIGRpZ2l0YWwgYml0ICovCi0JcmFkZW9uX2Nvbm5lY3Rvcl91cGRhdGVfc2NyYXRjaF9yZWdzKGNvbm5lY3RvciwgY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpOwogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBEVkkgaXMgY29tcGxpY2F0ZWQKKyAqIERvIGEgRERDIHByb2JlLCBpZiBEREMgcHJvYmUgcGFzc2VzLCBnZXQgdGhlIGZ1bGwgRURJRCBzbworICogd2UgY2FuIGRvIGFuYWxvZy9kaWdpdGFsIG1vbml0b3IgZGV0ZWN0aW9uIGF0IHRoaXMgcG9pbnQuCisgKiBJZiB0aGUgbW9uaXRvciBpcyBhbiBhbmFsb2cgbW9uaXRvciBvciB3ZSBnb3Qgbm8gRERDLAorICogd2UgbmVlZCB0byBmaW5kIHRoZSBEQUMgZW5jb2RlciBvYmplY3QgZm9yIHRoaXMgY29ubmVjdG9yLgorICogSWYgd2UgZ290IG5vIEREQywgd2UgZG8gbG9hZCBkZXRlY3Rpb24gb24gdGhlIERBQyBlbmNvZGVyIG9iamVjdC4KKyAqIElmIHdlIGdvdCBhbmFsb2cgRERDIG9yIGxvYWQgZGV0ZWN0aW9uIHBhc3NlcyBvbiB0aGUgREFDIGVuY29kZXIKKyAqIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyBhbmFsb2cgZW5jb2RlciBpcyBzaGFyZWQgd2l0aCBhbnlvbmUgZWxzZSAoVFYpCisgKiBpZiBpdHMgc2hhcmVkIHdlIGhhdmUgdG8gc2V0IHRoZSBvdGhlciBjb25uZWN0b3IgdG8gZGlzY29ubmVjdGVkLgorICovCiBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByYWRlb25fZHZpX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBOVUxMOwogCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7CiAJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOwogCWludCBpOwpAQCAtMjgzLDkgKzY0MiwyOSBAQAogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAxKTsKIAlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yKTsKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7Ci0JaWYgKGRyZXQpCi0JCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCWVsc2UgeworCWlmIChkcmV0KSB7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAxKTsKKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOworCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CisKKwkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CisJCQlEUk1fRVJST1IoIkREQyByZXNwb25kZWQgYnV0IG5vdCBFRElEIGZvdW5kIGZvciAlc1xuIiwKKwkJCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJCX0gZWxzZSB7CisJCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9ICEhKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCk7CisKKwkJCS8qIGlmIHRoaXMgaXNuJ3QgYSBkaWdpdGFsIG1vbml0b3IKKwkJCSAgIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBhbnkKKwkJCSAgIFRWIGNvbmZsaWN0cyAqLworCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCX0KKwl9CisKKwlpZiAoKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgJiYgKHJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID09IHRydWUpKQorCQlnb3RvIG91dDsKKworCS8qIGZpbmQgYW5hbG9nIGVuY29kZXIgKi8KKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBEUk1fQ09OTkVDVE9SX01BWF9FTkNPREVSOyBpKyspIHsKIAkJCWlmIChjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldID09IDApCiAJCQkJYnJlYWs7CkBAIC0zMDAsMTUgKzY3OSwyMyBAQAogCiAJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CiAJCQlpZiAoZW5jb2Rlcl9mdW5jcy0+ZGV0ZWN0KSB7Ci0JCQkJcmV0ID0gZW5jb2Rlcl9mdW5jcy0+ZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3Rvcik7Ci0JCQkJaWYgKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgewotCQkJCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9IDA7Ci0JCQkJCWJyZWFrOworCQkJCWlmIChyZXQgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKKwkJCQkJcmV0ID0gZW5jb2Rlcl9mdW5jcy0+ZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3Rvcik7CisJCQkJCWlmIChyZXQgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKKwkJCQkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gZmFsc2U7CisJCQkJCX0KIAkJCQl9CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CiAKKwlpZiAoKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgJiYgKHJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID09IGZhbHNlKSAmJgorCSAgICBlbmNvZGVyKSB7CisJCXJldCA9IHJhZGVvbl9jb25uZWN0b3JfYW5hbG9nX2VuY29kZXJfY29uZmxpY3Rfc29sdmUoY29ubmVjdG9yLCBlbmNvZGVyLCByZXQsIHRydWUpOworCX0KKworb3V0OgogCS8qIHVwZGF0ZWQgaW4gZ2V0IG1vZGVzIGFzIHdlbGwgc2luY2Ugd2UgbmVlZCB0byBrbm93IGlmIGl0J3MgYW5hbG9nIG9yIGRpZ2l0YWwgKi8KIAlyYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3MoY29ubmVjdG9yLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC0zMzIsNyArNzE5LDcgQEAKIAogCQllbmNvZGVyID0gb2JqX3RvX2VuY29kZXIob2JqKTsKIAotCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID09IHRydWUpIHsKIAkJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0gRFJNX01PREVfRU5DT0RFUl9UTURTKQogCQkJCXJldHVybiBlbmNvZGVyOwogCQl9IGVsc2UgewpAQCAtMzc5LDE2ICs3NjYsMTQgQEAKIAkJCSAgYm9vbCBsaW5rYiwKIAkJCSAgdWludDMyX3QgaWdwX2xhbmVfaW5mbykKIHsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJdWludDMyX3Qgc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbE5vbmU7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwotCWlmICgoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pIHx8Ci0JICAgIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPKSB8fAotCSAgICAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZSkgfHwKLQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOKSkKKwlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCiAJCXJldHVybjsKIAogCS8qIHNlZSBpZiB3ZSBhbHJlYWR5IGFkZGVkIGl0ICovCkBAIC00MTcsNiArODAyLDkgQEAKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwpAQCAtNDI2LDYgKzgxNCw5IEBACiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKKwkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKQEAgLTQ0Myw2ICs4MzQsMTIgQEAKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKKwkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOgpAQCAtNDU5LDYgKzg1Niw5IEBACiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKIAkJc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OgpAQCAtNDgwLDYgKzg4MCwxMyBAQAogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKKwkJaWYgKHJhZGVvbl90diA9PSAxKSB7CisJCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKKwkJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJfQorCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyksIEdGUF9LRVJORUwpOwpAQCAtNDk1LDYgKzkwMiwxMCBAQAogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCWRybV9tb2RlX2NyZWF0ZV9zY2FsaW5nX21vZGVfcHJvcGVydHkoZGV2KTsKKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCSAgICAgIGRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LAorCQkJCQkgICAgICBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOKTsKIAkJc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CiAJCWJyZWFrOwogCX0KQEAgLTUxNywxNSArOTI4LDEzIEBACiAJCQkgICAgaW50IGNvbm5lY3Rvcl90eXBlLAogCQkJICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMpCiB7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJdWludDMyX3Qgc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbE5vbmU7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwotCWlmICgoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pIHx8Ci0JICAgIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPKSB8fAotCSAgICAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZSkgfHwKLQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOKSkKKwlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCiAJCXJldHVybjsKIAogCS8qIHNlZSBpZiB3ZSBhbHJlYWR5IGFkZGVkIGl0ICovCkBAIC01NTQsNiArOTYzLDkgQEAKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwpAQCAtNTYzLDYgKzk3NSw5IEBACiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKKwkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKQEAgLTU3MiwxMiArOTg3LDIyIEBACiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFZJIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CisJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKKwkJCQkJCSAgICAgIDEpOwogCQl9CiAJCXN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxIb3Jpem9udGFsUkdCOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU86CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlOgogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU46CisJCWlmIChyYWRlb25fdHYgPT0gMSkgeworCQkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7CisJCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKKwkJCQkJCSAgICAgIDEpOworCQl9CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7CkBAIC01ODcsNiArMTAxMiw5IEBACiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCSAgICAgIGRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LAorCQkJCQkgICAgICBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOKTsKIAkJc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCmluZGV4IDdhNTJjNDYuLjRmN2FmYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwpAQCAtMzYsMTAgKzM2LDI1IEBACiAjaW5jbHVkZSAicmFkZW9uX2Rydi5oIgogI2luY2x1ZGUgInIzMDBfcmVnLmgiCiAKLSNpbmNsdWRlICJyYWRlb25fbWljcm9jb2RlLmgiCi0KICNkZWZpbmUgUkFERU9OX0ZJRk9fREVCVUcJMAogCisvKiBGaXJtd2FyZSBOYW1lcyAqLworI2RlZmluZSBGSVJNV0FSRV9SMTAwCQkicmFkZW9uL1IxMDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SMjAwCQkicmFkZW9uL1IyMDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SMzAwCQkicmFkZW9uL1IzMDBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SNDIwCQkicmFkZW9uL1I0MjBfY3AuYmluIgorI2RlZmluZSBGSVJNV0FSRV9SUzY5MAkJInJhZGVvbi9SUzY5MF9jcC5iaW4iCisjZGVmaW5lIEZJUk1XQVJFX1JTNjAwCQkicmFkZW9uL1JTNjAwX2NwLmJpbiIKKyNkZWZpbmUgRklSTVdBUkVfUjUyMAkJInJhZGVvbi9SNTIwX2NwLmJpbiIKKworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1IxMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1IyMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1IzMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1I0MjApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1JTNjkwKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SUzYwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUjUyMCk7CisKIHN0YXRpYyBpbnQgcmFkZW9uX2RvX2NsZWFudXBfY3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogc3RhdGljIHZvaWQgcmFkZW9uX2RvX2NwX3N0YXJ0KGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogCkBAIC00NjAsMzcgKzQ3NSwzNCBAQAogICovCiAKIC8qIExvYWQgdGhlIG1pY3JvY29kZSBmb3IgdGhlIENQICovCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfbG9hZF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyBpbnQgcmFkZW9uX2NwX2luaXRfbWljcm9jb2RlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IGNoYXIgKmZ3X25hbWUgPSBOVUxMOworCWludCBlcnI7CisKIAlEUk1fREVCVUcoIlxuIik7CiAKLQlyYWRlb25fZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJhZGVvbl9jcCIsIDAsIE5VTEwsIDApOworCWVyciA9IElTX0VSUihwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFkZW9uX2NwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9BRERSLCAwKTsKIAlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjEwMCkgfHwKIAkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYxMDApIHx8CiAJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMjAwKSB8fAogCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzEwMCkgfHwKIAkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlMyMDApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIxMDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwKLQkJCQkgICAgIFIxMDBfY3BfbWljcm9jb2RlW2ldWzFdKTsKLQkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAotCQkJCSAgICAgUjEwMF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQl9CisJCWZ3X25hbWUgPSBGSVJNV0FSRV9SMTAwOwogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjIwMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYyNTApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMjgwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzMwMCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjIwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFILAotCQkJCSAgICAgUjIwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCi0JCQkJICAgICBSMjAwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1IyMDA7CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SMzAwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SMzUwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjM1MCkgfHwKQEAgLTQ5OCwzOSArNTEwLDE5IEBACiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjMwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFILAotCQkJCSAgICAgUjMwMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCi0JCQkJICAgICBSMzAwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1IzMDA7CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIzKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjQxMCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjQwMCBNaWNyb2NvZGVcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFILAotCQkJCSAgICAgUjQyMF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCi0JCQkJICAgICBSNDIwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1I0MjA7CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwL1JTNzQwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCi0JCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMV0pOwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCi0JCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMF0pOwotCQl9CisJCWZ3X25hbWUgPSBGSVJNV0FSRV9SUzY5MDsKIAl9IGVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUlM2MDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwKLQkJCQkgICAgIFJTNjAwX2NwX21pY3JvY29kZVtpXVsxXSk7Ci0JCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKLQkJCQkgICAgIFJTNjAwX2NwX21pY3JvY29kZVtpXVswXSk7Ci0JCX0KKwkJZndfbmFtZSA9IEZJUk1XQVJFX1JTNjAwOwogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MTUpIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I1MjApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTMwKSB8fApAQCAtNTM4LDExICs1MzAsNDEgQEAKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1NjApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTcwKSkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSNTAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlmd19uYW1lID0gRklSTVdBUkVfUjUyMDsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZkZXZfcHJpdi0+bWVfZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyYWRlb25fY3A6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJICAgICAgIGZ3X25hbWUpOworCX0gZWxzZSBpZiAoZGV2X3ByaXYtPm1lX2Z3LT5zaXplICUgOCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyYWRlb25fY3A6IEJvZ3VzIGxlbmd0aCAlenUgaW4gZmlybXdhcmUgXCIlc1wiXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1lX2Z3LT5zaXplLCBmd19uYW1lKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJcmVsZWFzZV9maXJtd2FyZShkZXZfcHJpdi0+bWVfZncpOworCQlkZXZfcHJpdi0+bWVfZncgPSBOVUxMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCByYWRlb25fY3BfbG9hZF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKKwlpbnQgaSwgc2l6ZTsKKworCXJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKKworCWlmIChkZXZfcHJpdi0+bWVfZncpIHsKKwkJc2l6ZSA9IGRldl9wcml2LT5tZV9mdy0+c2l6ZSAvIDQ7CisJCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopJmRldl9wcml2LT5tZV9mdy0+ZGF0YVswXTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fQUREUiwgMCk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDIpIHsKIAkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFILAotCQkJCSAgICAgUjUyMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJCSAgICAgYmUzMl90b19jcHVwKCZmd19kYXRhW2ldKSk7CiAJCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKLQkJCQkgICAgIFI1MjBfY3BfbWljcm9jb2RlW2ldWzBdKTsKKwkJCQkgICAgIGJlMzJfdG9fY3B1cCgmZndfZGF0YVtpICsgMV0pKTsKIAkJfQogCX0KIH0KQEAgLTU5NCw2ICs2MTYsMTggQEAKIAogCWRldl9wcml2LT5jcF9ydW5uaW5nID0gMTsKIAorCS8qIG9uIHI0MjAsIGFueSBETUEgZnJvbSBDUCB0byBzeXN0ZW0gbWVtb3J5IHdoaWxlIDJEIGlzIGFjdGl2ZQorCSAqIGNhbiBjYXVzZSBhIGhhbmcuICB3b3JrYXJvdW5kIGlzIHRvIHF1ZXVlIGEgQ1AgUkVTWU5DIHRva2VuCisJICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgeworCQlCRUdJTl9SSU5HKDMpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFIzMDBfQ1BfUkVTWU5DX0FERFIsIDEpKTsKKwkJT1VUX1JJTkcoNSk7IC8qIHNjcmF0Y2ggcmVnIDUgKi8KKwkJT1VUX1JJTkcoMHhkZWFkYmVlZik7CisJCUFEVkFOQ0VfUklORygpOworCQlDT01NSVRfUklORygpOworCX0KKwogCUJFR0lOX1JJTkcoOCk7CiAJLyogaXN5bmMgY2FuIG9ubHkgYmUgd3JpdHRlbiB0aHJvdWdoIGNwIG9uIHI1eHggd3JpdGUgaXQgaGVyZSAqLwogCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX0lTWU5DX0NOVEwsIDApKTsKQEAgLTYzMSw4ICs2NjUsMTkgQEAKICAqLwogc3RhdGljIHZvaWQgcmFkZW9uX2RvX2NwX3N0b3AoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKKwlSSU5HX0xPQ0FMUzsKIAlEUk1fREVCVUcoIlxuIik7CiAKKwkvKiBmaW5pc2ggdGhlIHBlbmRpbmcgQ1BfUkVTWU5DIHRva2VuICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgeworCQlCRUdJTl9SSU5HKDIpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFIzMDBfUkIzRF9EU1RDQUNIRV9DVExTVEFULCAwKSk7CisJCU9VVF9SSU5HKFIzMDBfUkIzRF9EQ19GSU5JU0gpOworCQlBRFZBTkNFX1JJTkcoKTsKKwkJQ09NTUlUX1JJTkcoKTsKKwkJcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOworCX0KKwogCVJBREVPTl9XUklURShSQURFT05fQ1BfQ1NRX0NOVEwsIFJBREVPTl9DU1FfUFJJRElTX0lORERJUyk7CiAKIAlkZXZfcHJpdi0+Y3BfcnVubmluZyA9IDA7CkBAIC0xNDk1LDYgKzE1NDAsMTQgQEAKIAkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAxKTsKIAl9CiAKKwlpZiAoIWRldl9wcml2LT5tZV9mdykgeworCQlpbnQgZXJyID0gcmFkZW9uX2NwX2luaXRfbWljcm9jb2RlKGRldl9wcml2KTsKKwkJaWYgKGVycikgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSFcbiIpOworCQkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CiAJcmFkZW9uX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKIAlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2LCBmaWxlX3ByaXYpOwogCkBAIC0xNzY0LDYgKzE4MTcsMTQgQEAKIAkJCXI2MDBfZG9fY2xlYW51cF9jcChkZXYpOwogCQllbHNlCiAJCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQlpZiAoZGV2X3ByaXYtPm1lX2Z3KSB7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGRldl9wcml2LT5tZV9mdyk7CisJCQlkZXZfcHJpdi0+bWVfZncgPSBOVUxMOworCQl9CisJCWlmIChkZXZfcHJpdi0+cGZwX2Z3KSB7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGRldl9wcml2LT5wZnBfZncpOworCQkJZGV2X3ByaXYtPnBmcF9mdyA9IE5VTEw7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCmluZGV4IGExNjkwNjcuLjEyZjU5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCWNkYXRhID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpdXNlcl9jaHVuay5jaHVua19kYXRhOwogCiAJCXNpemUgPSBwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ICogc2l6ZW9mKHVpbnQzMl90KTsKLQkJcC0+Y2h1bmtzW2ldLmtkYXRhID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJcC0+Y2h1bmtzW2ldLmtkYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHAtPmNodW5rc1tpXS5rZGF0YSA9PSBOVUxMKSB7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMTg1LDYgKzE4NSw3IEBACiAJCQltdXRleF91bmxvY2soJnBhcnNlci0+cmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKIAkJfQogCX0KKwlrZnJlZShwYXJzZXItPnRyYWNrKTsKIAlrZnJlZShwYXJzZXItPnJlbG9jcyk7CiAJa2ZyZWUocGFyc2VyLT5yZWxvY3NfcHRyKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5uY2h1bmtzOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggNzY5M2Y3Yy4uZGFmNWRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vcmFkZW9uX2RybS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyYWRlb25fYXNpYy5oIgpAQCAtMzcsNyArMzgsNyBAQAogLyoKICAqIENsZWFyIEdQVSBzdXJmYWNlIHJlZ2lzdGVycy4KICAqLwotc3RhdGljIHZvaWQgcmFkZW9uX3N1cmZhY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcmFkZW9uX3N1cmZhY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogY2hlY2sgdGhpcyBvdXQgKi8KIAlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9SNjAwKSB7CkBAIC01Niw3ICs1Nyw3IEBACiAvKgogICogR1BVIHNjcmF0Y2ggcmVnaXN0ZXJzIGhlbHBlcnMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkIHJhZGVvbl9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJhZGVvbl9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGk7CiAKQEAgLTE1NiwxNiArMTU3LDE4IEBACiAJCXRtcCA9ICh0bXAgKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDEpICYgfihyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwogCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7CiAJfQotCURSTV9JTkZPKCJyYWRlb246IFZSQU0gJXVNXG4iLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA+PiAyMCk7CisJcmRldi0+bWMudnJhbV9zdGFydCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247CisJcmRldi0+bWMudnJhbV9lbmQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKKwlyZGV2LT5tYy5ndHRfc3RhcnQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb247CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKKwlEUk1fSU5GTygicmFkZW9uOiBWUkFNICV1TVxuIiwgKHVuc2lnbmVkKShyZGV2LT5tYy5tY192cmFtX3NpemUgPj4gMjApKTsKIAlEUk1fSU5GTygicmFkZW9uOiBWUkFNIGZyb20gMHglMDhYIHRvIDB4JTA4WFxuIiwKLQkJIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24sCi0JCSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSk7Ci0JaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplICE9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSkKLQkJRFJNX0lORk8oInJhZGVvbjogVlJBTSBsZXNzIHRoYW4gYXBlcnR1cmUgd29ya2Fyb3VuZCBlbmFibGVkXG4iKTsKLQlEUk1fSU5GTygicmFkZW9uOiBHVFQgJXVNXG4iLCByZGV2LT5tYy5ndHRfc2l6ZSA+PiAyMCk7CisJCSAodW5zaWduZWQpcmRldi0+bWMudnJhbV9sb2NhdGlvbiwKKwkJICh1bnNpZ25lZCkocmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpKTsKKwlEUk1fSU5GTygicmFkZW9uOiBHVFQgJXVNXG4iLCAodW5zaWduZWQpKHJkZXYtPm1jLmd0dF9zaXplID4+IDIwKSk7CiAJRFJNX0lORk8oInJhZGVvbjogR1RUIGZyb20gMHglMDhYIHRvIDB4JTA4WFxuIiwKLQkJIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiwKLQkJIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7CisJCSAodW5zaWduZWQpcmRldi0+bWMuZ3R0X2xvY2F0aW9uLAorCQkgKHVuc2lnbmVkKShyZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDEpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTczLDcgKzE3Niw3IEBACiAvKgogICogR1BVIGhlbHBlcnMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyBib29sIHJhZGVvbl9jYXJkX3Bvc3RlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2Jvb2wgcmFkZW9uX2NhcmRfcG9zdGVkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHJlZzsKIApAQCAtMjA1LDYgKzIwOCwzMSBAQAogCiB9CiAKK2ludCByYWRlb25fZHVtbXlfcGFnZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJkZXYtPmR1bW15X3BhZ2UucGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0RNQTMyIHwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmIChyZGV2LT5kdW1teV9wYWdlLnBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmRldi0+ZHVtbXlfcGFnZS5hZGRyID0gcGNpX21hcF9wYWdlKHJkZXYtPnBkZXYsIHJkZXYtPmR1bW15X3BhZ2UucGFnZSwKKwkJCQkJMCwgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmICghcmRldi0+ZHVtbXlfcGFnZS5hZGRyKSB7CisJCV9fZnJlZV9wYWdlKHJkZXYtPmR1bW15X3BhZ2UucGFnZSk7CisJCXJkZXYtPmR1bW15X3BhZ2UucGFnZSA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCByYWRlb25fZHVtbXlfcGFnZV9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyZGV2LT5kdW1teV9wYWdlLnBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCXBjaV91bm1hcF9wYWdlKHJkZXYtPnBkZXYsIHJkZXYtPmR1bW15X3BhZ2UuYWRkciwKKwkJCVBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlfX2ZyZWVfcGFnZShyZGV2LT5kdW1teV9wYWdlLnBhZ2UpOworCXJkZXYtPmR1bW15X3BhZ2UucGFnZSA9IE5VTEw7Cit9CisKIAogLyoKICAqIFJlZ2lzdGVycyBhY2Nlc3NvcnMgZnVuY3Rpb25zLgpAQCAtMjQzLDYgKzI3MSwxMCBAQAogCQlyZGV2LT5wbGxfcnJlZyA9ICZyMTAwX3BsbF9ycmVnOwogCQlyZGV2LT5wbGxfd3JlZyA9ICZyMTAwX3BsbF93cmVnOwogCX0KKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjQyMCkgeworCQlyZGV2LT5tY19ycmVnID0gJnI0MjBfbWNfcnJlZzsKKwkJcmRldi0+bWNfd3JlZyA9ICZyNDIwX21jX3dyZWc7CisJfQogCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkgewogCQlyZGV2LT5tY19ycmVnID0gJnJ2NTE1X21jX3JyZWc7CiAJCXJkZXYtPm1jX3dyZWcgPSAmcnY1MTVfbWNfd3JlZzsKQEAgLTI4OSw2ICszMjEsMTQgQEAKIAljYXNlIENISVBfUlYzNTA6CiAJY2FzZSBDSElQX1JWMzgwOgogCQlyZGV2LT5hc2ljID0gJnIzMDBfYXNpYzsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdDsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZmluaSA9ICZydjM3MF9wY2llX2dhcnRfZmluaTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZW5hYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9lbmFibGU7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGU7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCQkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2U7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBDSElQX1I0MjA6CiAJY2FzZSBDSElQX1I0MjM6CkBAIC0zMjMsOSArMzYzLDE1IEBACiAJY2FzZSBDSElQX1JWNjM1OgogCWNhc2UgQ0hJUF9SVjY3MDoKIAljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JTODgwOgorCQlyZGV2LT5hc2ljID0gJnI2MDBfYXNpYzsKKwkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNzcwOgogCWNhc2UgQ0hJUF9SVjczMDoKIAljYXNlIENISVBfUlY3MTA6CisJY2FzZSBDSElQX1JWNzQwOgorCQlyZGV2LT5hc2ljID0gJnJ2NzcwX2FzaWM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIEZJWE1FOiBub3Qgc3VwcG9ydGVkIHlldCAqLwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM0MSw3ICszODcsNiBAQAogewogCWludCByOwogCi0JcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCXIgPSByYWRlb25fc3RhdGljX2Nsb2Nrc19pbml0KHJkZXYtPmRkZXYpOwogCWlmIChyKSB7CiAJCXJldHVybiByOwpAQCAtNDM2LDEwICs0ODEsMTggQEAKIHsKIH0KIAotaW50IHJhZGVvbl9tb2Rlc2V0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByYWRlb25fbW9kZXNldF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKy8qIGlmIHdlIGdldCB0cmFuc2l0aW9uZWQgdG8gb25seSBvbmUgZGV2aWNlLCB0YWsgVkdBIGJhY2sgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKHZvaWQgKmNvb2tpZSwgYm9vbCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNvb2tpZTsKIAotCisJcmFkZW9uX3ZnYV9zZXRfc3RhdGUocmRldiwgc3RhdGUpOworCWlmIChzdGF0ZSkKKwkJcmV0dXJuIFZHQV9SU1JDX0xFR0FDWV9JTyB8IFZHQV9SU1JDX0xFR0FDWV9NRU0gfAorCQkgICAgICAgVkdBX1JTUkNfTk9STUFMX0lPIHwgVkdBX1JTUkNfTk9STUFMX01FTTsKKwllbHNlCisJCXJldHVybiBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOworfQogLyoKICAqIFJhZGVvbiBkZXZpY2UuCiAgKi8KQEAgLTQ0OCwxMSArNTAxLDEyIEBACiAJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJICAgICAgIHVpbnQzMl90IGZsYWdzKQogewotCWludCByLCByZXQ7CisJaW50IHI7CiAJaW50IGRtYV9iaXRzOwogCiAJRFJNX0lORk8oInJhZGVvbjogSW5pdGlhbGl6aW5nIGtlcm5lbCBtb2Rlc2V0dGluZy5cbiIpOwogCXJkZXYtPnNodXRkb3duID0gZmFsc2U7CisJcmRldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAlyZGV2LT5kZGV2ID0gZGRldjsKIAlyZGV2LT5wZGV2ID0gcGRldjsKIAlyZGV2LT5mbGFncyA9IGZsYWdzOwpAQCAtNDYxLDM1ICs1MTUsNDUgQEAKIAlyZGV2LT51c2VjX3RpbWVvdXQgPSBSQURFT05fTUFYX1VTRUNfVElNRU9VVDsKIAlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKIAlyZGV2LT5ncHVfbG9ja3VwID0gZmFsc2U7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCS8qIG11dGV4IGluaXRpYWxpemF0aW9uIGFyZSBhbGwgZG9uZSBoZXJlIHNvIHdlCiAJICogY2FuIHJlY2FsbCBmdW5jdGlvbiB3aXRob3V0IGhhdmluZyBsb2NraW5nIGlzc3VlcyAqLwogCW11dGV4X2luaXQoJnJkZXYtPmNzX211dGV4KTsKIAltdXRleF9pbml0KCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAltdXRleF9pbml0KCZyZGV2LT5jcC5tdXRleCk7CiAJcndsb2NrX2luaXQoJnJkZXYtPmZlbmNlX2Rydi5sb2NrKTsKLQotCWlmIChyYWRlb25fYWdwbW9kZSA9PSAtMSkgewotCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUlY1MTUgfHwKLQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzgwIHx8Ci0JCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjQxMCB8fAotCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUjQyMykgewotCQkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSUUgbW9kZVxuIik7Ci0JCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKLQkJfSBlbHNlIHsKLQkJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0kgbW9kZVxuIik7Ci0JCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOwotCQl9Ci0JfQorCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5nZW0ub2JqZWN0cyk7CiAKIAkvKiBTZXQgYXNpYyBmdW5jdGlvbnMgKi8KIAlyID0gcmFkZW9uX2FzaWNfaW5pdChyZGV2KTsKIAlpZiAocikgewogCQlyZXR1cm4gcjsKIAl9Ci0JciA9IHJhZGVvbl9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOworCisJaWYgKHJhZGVvbl9hZ3Btb2RlID09IC0xKSB7CisJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUgfHwKKwkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzgwIHx8CisJCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjQxMCB8fAorCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUjQyMykgeworCQkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSUUgbW9kZVxuIik7CisJCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdDsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZmluaSA9ICZydjM3MF9wY2llX2dhcnRfZmluaTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfZW5hYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9lbmFibGU7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGU7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCQkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2U7CisJCX0gZWxzZSB7CisJCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJIG1vZGVcbiIpOworCQkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSTsKKwkJCXJkZXYtPmFzaWMtPmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQ7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pOworCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcjEwMF9wY2lfZ2FydF9lbmFibGU7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlOworCQkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2g7CisJCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2U7CisJCX0KIAl9CiAKIAkvKiBzZXQgRE1BIG1hc2sgKyBuZWVkX2RtYTMyIGZsYWdzLgpAQCAtNTIxLDE1NiArNTg1LDE1MCBAQAogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIGJhc2U6IDB4JTA4WFxuIiwgKHVpbnQzMl90KXJkZXYtPnJtbWlvX2Jhc2UpOwogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIHNpemU6ICV1XG4iLCAodW5zaWduZWQpcmRldi0+cm1taW9fc2l6ZSk7CiAKLQkvKiBTZXR1cCBlcnJhdGEgZmxhZ3MgKi8KLQlyYWRlb25fZXJyYXRhKHJkZXYpOwotCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KLQlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOwotCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KLQlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCXJkZXYtPm5ld19pbml0X3BhdGggPSBmYWxzZTsKKwlyID0gcmFkZW9uX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQogCi0JLyogVE9ETzogZGlzYWJsZSBWR0EgbmVlZCB0byB1c2UgVkdBIHJlcXVlc3QgKi8KLQkvKiBCSU9TKi8KLQlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgewotCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKLQkJCXJldHVybiAtRUlOVkFMOworCS8qIGlmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiBkaXNhYmxlIHRoZSByYWRlb24gVkdBIHJlc291cmNlcyAqLworCXIgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7CisJaWYgKHIpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7CisKKwlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKKwkJLyogU2V0dXAgZXJyYXRhIGZsYWdzICovCisJCXJhZGVvbl9lcnJhdGEocmRldik7CisJCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwkJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLworCQlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCisJCS8qIEJJT1MqLworCQlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9IGVsc2UgewotCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JfQotCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KLQkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLwotCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKLQkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CiAJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCQkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOworCQkJaWYgKHIpIHsKKwkJCQlyZXR1cm4gcjsKKwkJCX0KIAkJfSBlbHNlIHsKLQkJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwkJCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOworCQkJaWYgKHIpIHsKKwkJCQlyZXR1cm4gcjsKKwkJCX0KIAkJfQotCX0KLQkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwotCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXJhZGVvbl92cmFtX2luZm8ocmRldik7CisJCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwkJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJCS8qIEZJWE1FOiB3aGF0IGRvIHdlIHdhbnQgdG8gZG8gaGVyZSA/ICovCisJCX0KKwkJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwkJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJCQl9IGVsc2UgeworCQkJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwkJCX0KKwkJfQorCQkvKiBHZXQgY2xvY2sgJiB2cmFtIGluZm9ybWF0aW9uICovCisJCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkJcmFkZW9uX3ZyYW1faW5mbyhyZGV2KTsKKwkJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwkJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CiAKLQkvKiBBZGQgYW4gTVRSUiBmb3IgdGhlIFZSQU0gKi8KLQlyZGV2LT5tYy52cmFtX210cnIgPSBtdHJyX2FkZChyZGV2LT5tYy5hcGVyX2Jhc2UsIHJkZXYtPm1jLmFwZXJfc2l6ZSwKLQkJCQkgICAgICBNVFJSX1RZUEVfV1JDT01CLCAxKTsKLQlEUk1fSU5GTygiRGV0ZWN0ZWQgVlJBTSBSQU09JXVNLCBCQVI9JXVNXG4iLAotCQkgcmRldi0+bWMucmVhbF92cmFtX3NpemUgPj4gMjAsCi0JCSAodW5zaWduZWQpcmRldi0+bWMuYXBlcl9zaXplID4+IDIwKTsKLQlEUk1fSU5GTygiUkFNIHdpZHRoICVkYml0cyAlY0RSXG4iLAotCQkgcmRldi0+bWMudnJhbV93aWR0aCwgcmRldi0+bWMudnJhbV9pc19kZHIgPyAnRCcgOiAnUycpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHJhZGVvbl9tY19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQkvKiBGZW5jZSBkcml2ZXIgKi8KLQlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0JLyogTWVtb3J5IG1hbmFnZXIgKi8KLQlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQotCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLwotCXIgPSByYWRlb25fZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKCFyKSB7Ci0JCXIgPSByYWRlb25fZ2VtX2luaXQocmRldik7Ci0JfQorCQkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCQlyID0gcmFkZW9uX21jX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyZXR1cm4gcjsKKwkJfQorCQkvKiBGZW5jZSBkcml2ZXIgKi8KKwkJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CisJCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmV0dXJuIHI7CisJCX0KKwkJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwkJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXJldHVybiByOworCQl9CisJCXIgPSByYWRlb25fZ3B1X2dhcnRfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCisJCXIgPSByYWRlb25fZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIDA7CisJCQlyID0gcmFkZW9uX2dlbV9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiAwOwogCi0JLyogMU0gcmluZyBidWZmZXIgKi8KLQlpZiAoIXIpIHsKKwkJLyogMU0gcmluZyBidWZmZXIgKi8KIAkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKLQl9Ci0JaWYgKCFyKSB7CisJCWlmIChyKQorCQkJcmV0dXJuIDA7CiAJCXIgPSByYWRlb25fd2JfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKKwkJaWYgKHIpCiAJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOwotCQkJcmV0dXJuIHI7Ci0JCX0KLQl9Ci0JaWYgKCFyKSB7CiAJCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOwotCQkJcmV0dXJuIHI7Ci0JCX0KLQl9Ci0JaWYgKCFyKSB7CisJCWlmIChyKQorCQkJcmV0dXJuIDA7CiAJCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwotCQkJcmV0dXJuIHI7Ci0JCX0KKwkJaWYgKHIpCisJCQlyZXR1cm4gMDsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CiAJfQotCXJldCA9IHI7Ci0JciA9IHJhZGVvbl9tb2Rlc2V0X2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCWlmICghcmV0KSB7Ci0JCURSTV9JTkZPKCJyYWRlb246IGtlcm5lbCBtb2Rlc2V0dGluZyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuXG4iKTsKLQl9CisJRFJNX0lORk8oInJhZGVvbjoga2VybmVsIG1vZGVzZXR0aW5nIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC5cbiIpOwogCWlmIChyYWRlb25fdGVzdGluZykgewogCQlyYWRlb25fdGVzdF9tb3ZlcyhyZGV2KTsKIAl9CiAJaWYgKHJhZGVvbl9iZW5jaG1hcmtpbmcpIHsKIAkJcmFkZW9uX2JlbmNobWFyayhyZGV2KTsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCByYWRlb25fZGV2aWNlX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaWYgKHJkZXYgPT0gTlVMTCB8fCByZGV2LT5ybW1pbyA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9CiAJRFJNX0lORk8oInJhZGVvbjogZmluaXNoaW5nIGRldmljZS5cbiIpOwogCXJkZXYtPnNodXRkb3duID0gdHJ1ZTsKIAkvKiBPcmRlciBtYXR0ZXIgc28gYmVjYXJlZnVsbCBpZiB5b3UgcmVhcnJhbmdlIGFueXRoaW5ncyAqLwotCXJhZGVvbl9tb2Rlc2V0X2ZpbmkocmRldik7Ci0JcmFkZW9uX2liX3Bvb2xfZmluaShyZGV2KTsKLQlyYWRlb25fY3BfZmluaShyZGV2KTsKLQlyYWRlb25fd2JfZmluaShyZGV2KTsKLQlyYWRlb25fZ2VtX2ZpbmkocmRldik7Ci0JcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCS8qIG1jX2ZpbmkgbXVzdCBiZSBhZnRlciBvYmplY3RfZmluaSAqLwotCXJhZGVvbl9tY19maW5pKHJkZXYpOworCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgeworCQlyYWRlb25faWJfcG9vbF9maW5pKHJkZXYpOworCQlyYWRlb25fY3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX3diX2ZpbmkocmRldik7CisJCXJhZGVvbl9ncHVfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJCXJhZGVvbl9tY19maW5pKHJkZXYpOwogI2lmIF9fT1NfSEFTX0FHUAotCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwogI2VuZGlmCi0JcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKLQlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7Ci0JcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKKwkJcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOworCQlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCQl9IGVsc2UgeworCQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwkJfQorCQlrZnJlZShyZGV2LT5iaW9zKTsKKwkJcmRldi0+YmlvcyA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwkJcmFkZW9uX2ZpbmkocmRldik7CiAJfQotCWtmcmVlKHJkZXYtPmJpb3MpOwotCXJkZXYtPmJpb3MgPSBOVUxMOwogCWlvdW5tYXAocmRldi0+cm1taW8pOwogCXJkZXYtPnJtbWlvID0gTlVMTDsKIH0KQEAgLTcwOCwxNSArNzY2LDE5IEBACiAJLyogd2FpdCBmb3IgZ3B1IHRvIGZpbmlzaCBwcm9jZXNzaW5nIGN1cnJlbnQgYmF0Y2ggKi8KIAlyYWRlb25fZmVuY2Vfd2FpdF9sYXN0KHJkZXYpOwogCi0JcmFkZW9uX2NwX2Rpc2FibGUocmRldik7Ci0JcmFkZW9uX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyYWRlb25fc2F2ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKIAorCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgeworCQlyYWRlb25fY3BfZGlzYWJsZShyZGV2KTsKKwkJcmFkZW9uX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkJcmRldi0+aXJxLnN3X2ludCA9IGZhbHNlOworCQlyYWRlb25faXJxX3NldChyZGV2KTsKKwl9IGVsc2UgeworCQlyYWRlb25fc3VzcGVuZChyZGV2KTsKKwl9CiAJLyogZXZpY3QgcmVtYWluaW5nIHZyYW0gbWVtb3J5ICovCiAJcmFkZW9uX29iamVjdF9ldmljdF92cmFtKHJkZXYpOwogCi0JcmRldi0+aXJxLnN3X2ludCA9IGZhbHNlOwotCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwotCiAJcGNpX3NhdmVfc3RhdGUoZGV2LT5wZGV2KTsKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewogCQkvKiBTaHV0IGRvd24gdGhlIGRldmljZSAqLwpAQCAtNzQzLDM4ICs4MDUsNDMgQEAKIAl9CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKIAkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCi0JaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKLQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQl9Ci0JLyogcG9zdCBjYXJkICovCi0JaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKKwkJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJCS8qIEZJWE1FOiB3aGF0IGRvIHdlIHdhbnQgdG8gZG8gaGVyZSA/ICovCisJCX0KKwkJLyogcG9zdCBjYXJkICovCisJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCQl9IGVsc2UgeworCQkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCQl9CisJCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQkvKiBFbmFibGUgSVJRICovCisJCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCQlyYWRlb25faXJxX3NldChyZGV2KTsKKwkJLyogSW5pdGlhbGl6ZSBHUFUgTWVtb3J5IENvbnRyb2xsZXIgKi8KKwkJciA9IHJhZGVvbl9tY19pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJZ290byBvdXQ7CisJCX0KKwkJciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCWdvdG8gb3V0OworCQl9CisJCXIgPSByYWRlb25fY3BfaW5pdChyZGV2LCByZGV2LT5jcC5yaW5nX3NpemUpOworCQlpZiAocikgeworCQkJZ290byBvdXQ7CisJCX0KIAl9IGVsc2UgewotCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7Ci0JfQotCS8qIEluaXRpYWxpemUgY2xvY2tzICovCi0JciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCXJldHVybiByOwotCX0KLQkvKiBFbmFibGUgSVJRICovCi0JcmRldi0+aXJxLnN3X2ludCA9IHRydWU7Ci0JcmFkZW9uX2lycV9zZXQocmRldik7Ci0JLyogSW5pdGlhbGl6ZSBHUFUgTWVtb3J5IENvbnRyb2xsZXIgKi8KLQlyID0gcmFkZW9uX21jX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJZ290byBvdXQ7Ci0JfQotCXIgPSByYWRlb25fZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKHIpIHsKLQkJZ290byBvdXQ7Ci0JfQotCXIgPSByYWRlb25fY3BfaW5pdChyZGV2LCByZGV2LT5jcC5yaW5nX3NpemUpOwotCWlmIChyKSB7Ci0JCWdvdG8gb3V0OworCQlyYWRlb25fcmVzdW1lKHJkZXYpOwogCX0KIG91dDoKKwlyYWRlb25fcmVzdG9yZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKIAlmYl9zZXRfc3VzcGVuZChyZGV2LT5mYmRldl9pbmZvLCAwKTsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCBhOGZhMWJiLi41ZDgxNDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0xNTgsOSArMTU4LDYgQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CiAKLQlpZiAocmFkZW9uX2NydGMtPm1vZGVfc2V0Lm1vZGUpIHsKLQkJZHJtX21vZGVfZGVzdHJveShjcnRjLT5kZXYsIHJhZGVvbl9jcnRjLT5tb2RlX3NldC5tb2RlKTsKLQl9CiAJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKIAlrZnJlZShyYWRlb25fY3J0Yyk7CiB9CkBAIC0xODksOSArMTg2LDExIEBACiAJcmFkZW9uX2NydGMtPmNydGNfaWQgPSBpbmRleDsKIAlyZGV2LT5tb2RlX2luZm8uY3J0Y3NbaW5kZXhdID0gcmFkZW9uX2NydGM7CiAKKyNpZiAwCiAJcmFkZW9uX2NydGMtPm1vZGVfc2V0LmNydGMgPSAmcmFkZW9uX2NydGMtPmJhc2U7CiAJcmFkZW9uX2NydGMtPm1vZGVfc2V0LmNvbm5lY3RvcnMgPSAoc3RydWN0IGRybV9jb25uZWN0b3IgKiopKHJhZGVvbl9jcnRjICsgMSk7CiAJcmFkZW9uX2NydGMtPm1vZGVfc2V0Lm51bV9jb25uZWN0b3JzID0gMDsKKyNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCXJhZGVvbl9jcnRjLT5sdXRfcltpXSA9IGkgPDwgMjsKQEAgLTMxMyw3ICszMTIsNyBAQAogCX0KIH0KIAotYm9vbCByYWRlb25fc2V0dXBfZW5jX2Nvbm4oc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyBib29sIHJhZGVvbl9zZXR1cF9lbmNfY29ubihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHJtX2Nvbm5lY3RvcjsKQEAgLTM0Nyw5ICszNDYsMTMgQEAKIAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJcmV0dXJuIC0xOwotCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAxKTsKLQllZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7Ci0JcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOworCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CisJCWVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOworCX0gZWxzZQorCQllZGlkID0gcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZDsKKwogCWlmIChlZGlkKSB7CiAJCS8qIHVwZGF0ZSBkaWdpdGFsIGJpdHMgaGVyZSAqLwogCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQpAQCAtMzYyLDcgKzM2NSw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgTlVMTCk7Ci0JcmV0dXJuIC0xOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJhZGVvbl9kZGNfZHVtcChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQpAQCAtNjIwLDYgKzYyMyw4MyBAQAogCS5mYl9jaGFuZ2VkID0gcmFkZW9uZmJfcHJvYmUsCiB9OwogCitzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IHsKKwlpbnQgdHlwZTsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgcmFkZW9uX3RtZHNfcGxsX2VudW1fbGlzdFtdID0KK3sJeyAwLCAiZHJpdmVyIiB9LAorCXsgMSwgImJpb3MiIH0sCit9OworCitzdGF0aWMgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCByYWRlb25fdHZfc3RkX2VudW1fbGlzdFtdID0KK3sJeyBUVl9TVERfTlRTQywgIm50c2MiIH0sCisJeyBUVl9TVERfUEFMLCAicGFsIiB9LAorCXsgVFZfU1REX1BBTF9NLCAicGFsLW0iIH0sCisJeyBUVl9TVERfUEFMXzYwLCAicGFsLTYwIiB9LAorCXsgVFZfU1REX05UU0NfSiwgIm50c2MtaiIgfSwKKwl7IFRWX1NURF9TQ0FSVF9QQUwsICJzY2FydC1wYWwiIH0sCisJeyBUVl9TVERfUEFMX0NOLCAicGFsLWNuIiB9LAorCXsgVFZfU1REX1NFQ0FNLCAic2VjYW0iIH0sCit9OworCitpbnQgcmFkZW9uX21vZGVzZXRfY3JlYXRlX3Byb3BzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCBpLCBzejsKKworCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHkgPQorCQkJZHJtX3Byb3BlcnR5X2NyZWF0ZShyZGV2LT5kZGV2LAorCQkJCQkgICAgRFJNX01PREVfUFJPUF9SQU5HRSwKKwkJCQkJICAgICJjb2hlcmVudCIsIDIpOworCQlpZiAoIXJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHktPnZhbHVlc1swXSA9IDA7CisJCXJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAxOworCX0KKworCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQlzeiA9IEFSUkFZX1NJWkUocmFkZW9uX3RtZHNfcGxsX2VudW1fbGlzdCk7CisJCXJkZXYtPm1vZGVfaW5mby50bWRzX3BsbF9wcm9wZXJ0eSA9CisJCQlkcm1fcHJvcGVydHlfY3JlYXRlKHJkZXYtPmRkZXYsCisJCQkJCSAgICBEUk1fTU9ERV9QUk9QX0VOVU0sCisJCQkJCSAgICAidG1kc19wbGwiLCBzeik7CisJCWZvciAoaSA9IDA7IGkgPCBzejsgaSsrKSB7CisJCQlkcm1fcHJvcGVydHlfYWRkX2VudW0ocmRldi0+bW9kZV9pbmZvLnRtZHNfcGxsX3Byb3BlcnR5LAorCQkJCQkgICAgICBpLAorCQkJCQkgICAgICByYWRlb25fdG1kc19wbGxfZW51bV9saXN0W2ldLnR5cGUsCisJCQkJCSAgICAgIHJhZGVvbl90bWRzX3BsbF9lbnVtX2xpc3RbaV0ubmFtZSk7CisJCX0KKwl9CisKKwlyZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHkgPQorCQlkcm1fcHJvcGVydHlfY3JlYXRlKHJkZXYtPmRkZXYsCisJCQkJICAgIERSTV9NT0RFX1BST1BfUkFOR0UsCisJCQkJICAgICJsb2FkIGRldGVjdGlvbiIsIDIpOworCWlmICghcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHktPnZhbHVlc1swXSA9IDA7CisJcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAxOworCisJZHJtX21vZGVfY3JlYXRlX3NjYWxpbmdfbW9kZV9wcm9wZXJ0eShyZGV2LT5kZGV2KTsKKworCXN6ID0gQVJSQVlfU0laRShyYWRlb25fdHZfc3RkX2VudW1fbGlzdCk7CisJcmRldi0+bW9kZV9pbmZvLnR2X3N0ZF9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUocmRldi0+ZGRldiwKKwkJCQkgICAgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCSAgICAidHYgc3RhbmRhcmQiLCBzeik7CisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJZHJtX3Byb3BlcnR5X2FkZF9lbnVtKHJkZXYtPm1vZGVfaW5mby50dl9zdGRfcHJvcGVydHksCisJCQkJICAgICAgaSwKKwkJCQkgICAgICByYWRlb25fdHZfc3RkX2VudW1fbGlzdFtpXS50eXBlLAorCQkJCSAgICAgIHJhZGVvbl90dl9zdGRfZW51bV9saXN0W2ldLm5hbWUpOworCX0KKworCXJldHVybiAwOworfQorCiBpbnQgcmFkZW9uX21vZGVzZXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgbnVtX2NydGMgPSAyLCBpOwpAQCAtNjQwLDYgKzcyMCwxMCBAQAogCiAJcmRldi0+ZGRldi0+bW9kZV9jb25maWcuZmJfYmFzZSA9IHJkZXYtPm1jLmFwZXJfYmFzZTsKIAorCXJldCA9IHJhZGVvbl9tb2Rlc2V0X2NyZWF0ZV9wcm9wcyhyZGV2KTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQogCS8qIGFsbG9jYXRlIGNydGNzIC0gVE9ETyBzaW5nbGUgY3J0YyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY3J0YzsgaSsrKSB7CiAJCXJhZGVvbl9jcnRjX2luaXQocmRldi0+ZGRldiwgaSk7CkBAIC02NzgsNyArNzYyLDYgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoZmlyc3QpIHsKIAkJCXJhZGVvbl9jcnRjLT5ybXhfdHlwZSA9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZTsKLQkJCXJhZGVvbl9jcnRjLT5kZXZpY2VzID0gcmFkZW9uX2VuY29kZXItPmRldmljZXM7CiAJCQltZW1jcHkoJnJhZGVvbl9jcnRjLT5uYXRpdmVfbW9kZSwKIAkJCQkmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlLAogCQkJCXNpemVvZihzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IDBiZDU4NzkuLjUwZmNlNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EUk1fUkFERU9OX0tNUykKIC8qCiAgKiBLTVMgd3JhcHBlci4KICAqLwpAQCAtNzcsMTEgKzc2LDkgQEAKIGludCByYWRlb25fZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKIHZvaWQgcmFkZW9uX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAjZW5kaWYKLSNlbmRpZgogCiAKIGludCByYWRlb25fbm9fd2I7Ci0jaWYgZGVmaW5lZChDT05GSUdfRFJNX1JBREVPTl9LTVMpCiBpbnQgcmFkZW9uX21vZGVzZXQgPSAtMTsKIGludCByYWRlb25fZHluY2xrcyA9IC0xOwogaW50IHJhZGVvbl9yNHh4X2F0b20gPSAwOwpAQCAtOTEsMTIgKzg4LDExIEBACiBpbnQgcmFkZW9uX2JlbmNobWFya2luZyA9IDA7CiBpbnQgcmFkZW9uX3Rlc3RpbmcgPSAwOwogaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGUgPSAwOwotI2VuZGlmCitpbnQgcmFkZW9uX3R2ID0gMTsKIAogTU9EVUxFX1BBUk1fREVTQyhub193YiwgIkRpc2FibGUgQUdQIHdyaXRlYmFjayBmb3Igc2NyYXRjaCByZWdpc3RlcnMiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChub193YiwgcmFkZW9uX25vX3diLCBpbnQsIDA0NDQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFJNX1JBREVPTl9LTVMpCiBNT0RVTEVfUEFSTV9ERVNDKG1vZGVzZXQsICJEaXNhYmxlL0VuYWJsZSBtb2Rlc2V0dGluZyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG1vZGVzZXQsIHJhZGVvbl9tb2Rlc2V0LCBpbnQsIDA0MDApOwogCkBAIC0xMjMsNyArMTE5LDkgQEAKIAogTU9EVUxFX1BBUk1fREVTQyhjb25uZWN0b3JfdGFibGUsICJGb3JjZSBjb25uZWN0b3IgdGFibGUiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChjb25uZWN0b3JfdGFibGUsIHJhZGVvbl9jb25uZWN0b3JfdGFibGUsIGludCwgMDQ0NCk7Ci0jZW5kaWYKKworTU9EVUxFX1BBUk1fREVTQyh0diwgIlRWIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7Cittb2R1bGVfcGFyYW1fbmFtZWQodHYsIHJhZGVvbl90diwgaW50LCAwNDQ0KTsKIAogc3RhdGljIGludCByYWRlb25fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0yMTUsNyArMjEzLDYgQEAKIAkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMLAogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RSTV9SQURFT05fS01TKQogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGttc19kcml2ZXI7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC0yODksNyArMjg2LDcgQEAKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCSAuY29tcGF0X2lvY3RsID0gTlVMTCwKKwkJIC5jb21wYXRfaW9jdGwgPSByYWRlb25fa21zX2NvbXBhdF9pb2N0bCwKICNlbmRpZgogCX0sCiAKQEAgLTMwOSw3ICszMDYsNiBAQAogCS5taW5vciA9IEtNU19EUklWRVJfTUlOT1IsCiAJLnBhdGNobGV2ZWwgPSBLTVNfRFJJVkVSX1BBVENITEVWRUwsCiB9OwotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyOwogCkBAIC0zMTcsNyArMzEzLDYgQEAKIHsKIAlkcml2ZXIgPSAmZHJpdmVyX29sZDsKIAlkcml2ZXItPm51bV9pb2N0bHMgPSByYWRlb25fbWF4X2lvY3RsOwotI2lmIGRlZmluZWQoQ09ORklHX0RSTV9SQURFT05fS01TKQogI2lmZGVmIENPTkZJR19WR0FfQ09OU09MRQogCWlmICh2Z2Fjb25fdGV4dF9mb3JjZSgpICYmIHJhZGVvbl9tb2Rlc2V0ID09IC0xKSB7CiAJCURSTV9JTkZPKCJWR0FDT04gZGlzYWJsZSByYWRlb24ga2VybmVsIG1vZGVzZXR0aW5nLlxuIik7CkBAIC0zMjgsOCArMzIzLDEzIEBACiAjZW5kaWYKIAkvKiBpZiBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KIAlpZiAocmFkZW9uX21vZGVzZXQgPT0gLTEpIHsKLQkJRFJNX0lORk8oInJhZGVvbiBkZWZhdWx0IHRvIGtlcm5lbCBtb2Rlc2V0dGluZy5cbiIpOworI2lmZGVmIENPTkZJR19EUk1fUkFERU9OX0tNUworCQlEUk1fSU5GTygicmFkZW9uIGRlZmF1bHRpbmcgdG8ga2VybmVsIG1vZGVzZXR0aW5nLlxuIik7CiAJCXJhZGVvbl9tb2Rlc2V0ID0gMTsKKyNlbHNlCisJCURSTV9JTkZPKCJyYWRlb24gZGVmYXVsdGluZyB0byB1c2Vyc3BhY2UgbW9kZXNldHRpbmcuXG4iKTsKKwkJcmFkZW9uX21vZGVzZXQgPSAwOworI2VuZGlmCiAJfQogCWlmIChyYWRlb25fbW9kZXNldCA9PSAxKSB7CiAJCURSTV9JTkZPKCJyYWRlb24ga2VybmVsIG1vZGVzZXR0aW5nIGVuYWJsZWQuXG4iKTsKQEAgLTMzOSw3ICszMzksNiBAQAogCX0KIAkvKiBpZiB0aGUgdmdhIGNvbnNvbGUgc2V0dGluZyBpcyBlbmFibGVkIHN0aWxsCiAJICogbGV0IG1vZHByb2JlIG92ZXJyaWRlIGl0ICovCi0jZW5kaWYKIAlyZXR1cm4gZHJtX2luaXQoZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCA2ZmEzMmRhLi5jYjBjZmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMzEsNiArMzEsOSBAQAogI2lmbmRlZiBfX1JBREVPTl9EUlZfSF9fCiAjZGVmaW5lIF9fUkFERU9OX0RSVl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwogCkBAIC0zNTMsNiArMzU2LDE0IEBACiAJaW50IHI3MDBfc2NfaGl6X3RpbGVfZmlmb19zaXplOwogCWludCByNzAwX3NjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZTsKIAorCXN0cnVjdCBtdXRleCBjc19tdXRleDsKKwl1MzIgY3NfaWRfc2NudDsKKwl1MzIgY3NfaWRfd2NudDsKKwkvKiByNnh4L3I3eHggZHJtIGJsaXQgdmVydGV4IGJ1ZmZlciAqLworCXN0cnVjdCBkcm1fYnVmICpibGl0X3ZiOworCisJLyogZmlybXdhcmUgKi8KKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1lX2Z3LCAqcGZwX2Z3OwogfSBkcm1fcmFkZW9uX3ByaXZhdGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9idWZfcHJpdiB7CkBAIC0zOTEsNiArNDAyLDkgQEAKIAkJKG9mZiA+PSBnYXJ0X3N0YXJ0ICYmIG9mZiA8PSBnYXJ0X2VuZCkpOwogfQogCisvKiByYWRlb25fc3RhdGUuYyAqLworZXh0ZXJuIHZvaWQgcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBkcm1fYnVmICpidWYpOworCiAJCQkJLyogcmFkZW9uX2NwLmMgKi8KIGV4dGVybiBpbnQgcmFkZW9uX2NwX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCByYWRlb25fY3Bfc3RhcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwpAQCAtNDU3LDYgKzQ3MSw4IEBACiAJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gbG9uZyByYWRlb25fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBsb25nIHJhZGVvbl9rbXNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIGV4dGVybiBpbnQgcmFkZW9uX21hc3Rlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlcik7CiBleHRlcm4gdm9pZCByYWRlb25fbWFzdGVyX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlcik7CkBAIC00ODIsNiArNDk4LDIyIEBACiAJCQkJICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpOwogZXh0ZXJuIGludCByNjAwX3BhZ2VfdGFibGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfcGFnZV90YWJsZV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKTsKK2V4dGVybiBpbnQgcjYwMF9jc19sZWdhY3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmcHJpdik7CitleHRlcm4gdm9pZCByNjAwX2NwX2Rpc3BhdGNoX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCByNjAwX2NwX2Rpc3BhdGNoX3RleHR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJICAgIGRybV9yYWRlb25fdGV4dHVyZV90ICp0ZXgsCisJCQkJICAgIGRybV9yYWRlb25fdGV4X2ltYWdlX3QgKmltYWdlKTsKKy8qIHI2MDBfYmxpdC5jICovCitleHRlcm4gaW50IHI2MDBfcHJlcGFyZV9ibGl0X2NvcHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgcjYwMF9kb25lX2JsaXRfY29weShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfYmxpdF9jb3B5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICB1aW50NjRfdCBzcmNfZ3B1X2FkZHIsIHVpbnQ2NF90IGRzdF9ncHVfYWRkciwKKwkJCSAgIGludCBzaXplX2J5dGVzKTsKK2V4dGVybiB2b2lkIHI2MDBfYmxpdF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICB1aW50NjRfdCBzcmNfZ3B1X2FkZHIsIHVpbnQ2NF90IGRzdF9ncHVfYWRkciwKKwkJCSAgIGludCBzeCwgaW50IHN5LCBpbnQgZHgsIGludCBkeSwKKwkJCSAgIGludCB3LCBpbnQgaCwgaW50IHNyY19waXRjaCwgaW50IGRzdF9waXRjaCwgaW50IGNwcCk7CiAKIC8qIEZsYWdzIGZvciBzdGF0cy5ib3hlcwogICovCkBAIC0xMDY3LDYgKzEwOTksOSBAQAogIwlkZWZpbmUgUkFERU9OX0NTUV9QUklCTV9JTkRCTQkJKDQgPDwgMjgpCiAjCWRlZmluZSBSQURFT05fQ1NRX1BSSVBJT19JTkRQSU8JCSgxNSA8PCAyOCkKIAorI2RlZmluZSBSMzAwX0NQX1JFU1lOQ19BRERSCQkweDA3NzgKKyNkZWZpbmUgUjMwMF9DUF9SRVNZTkNfREFUQQkJMHgwNzdjCisKICNkZWZpbmUgUkFERU9OX0FJQ19DTlRMCQkJMHgwMWQwCiAjCWRlZmluZSBSQURFT05fUENJR0FSVF9UUkFOU0xBVEVfRU4JKDEgPDwgMCkKICMJZGVmaW5lIFJTNDAwX01TSV9SRUFSTQkgICAgICAgICAgICAgICAgKDEgPDwgMykKQEAgLTExMDksMTMgKzExNDQsNzEgQEAKICMJZGVmaW5lIFJBREVPTl9DTlRMX0JJVEJMVF9NVUxUSQkJMHgwMDAwOUIwMAogIwlkZWZpbmUgUkFERU9OX0NOVExfU0VUX1NDSVNTT1JTCQkweEMwMDAxRTAwCiAKLSMJZGVmaW5lIFI2MDBfSVRfSU5ESVJFQ1RfQlVGRkVSCQkweDAwMDAzMjAwCi0jCWRlZmluZSBSNjAwX0lUX01FX0lOSVRJQUxJWkUJCTB4MDAwMDQ0MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfSU5ESVJFQ1RfQlVGRkVSX0VORCAgICAgIDB4MDAwMDE3MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU0VUX1BSRURJQ0FUSU9OICAgICAgICAgIDB4MDAwMDIwMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfUkVHX1JNVyAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfQ09ORF9FWEVDICAgICAgICAgICAgICAgIDB4MDAwMDIyMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfUFJFRF9FWEVDICAgICAgICAgICAgICAgIDB4MDAwMDIzMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU1RBUlRfM0RfQ01EQlVGICAgICAgICAgIDB4MDAwMDI0MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfRFJBV19JTkRFWF8yICAgICAgICAgICAgIDB4MDAwMDI3MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfQ09OVEVYVF9DT05UUk9MICAgICAgICAgIDB4MDAwMDI4MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfRFJBV19JTkRFWF9JTU1EX0JFICAgICAgIDB4MDAwMDI5MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfSU5ERVhfVFlQRSAgICAgICAgICAgICAgIDB4MDAwMDJBMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfRFJBV19JTkRFWCAgICAgICAgICAgICAgIDB4MDAwMDJCMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfRFJBV19JTkRFWF9BVVRPICAgICAgICAgIDB4MDAwMDJEMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfRFJBV19JTkRFWF9JTU1EICAgICAgICAgIDB4MDAwMDJFMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfTlVNX0lOU1RBTkNFUyAgICAgICAgICAgIDB4MDAwMDJGMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU1RSTU9VVF9CVUZGRVJfVVBEQVRFICAgIDB4MDAwMDM0MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfSU5ESVJFQ1RfQlVGRkVSX01QICAgICAgIDB4MDAwMDM4MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfTUVNX1NFTUFQSE9SRSAgICAgICAgICAgIDB4MDAwMDM5MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfTVBFR19JTkRFWCAgICAgICAgICAgICAgIDB4MDAwMDNBMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfV0FJVF9SRUdfTUVNICAgICAgICAgICAgIDB4MDAwMDNDMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfTUVNX1dSSVRFICAgICAgICAgICAgICAgIDB4MDAwMDNEMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfSU5ESVJFQ1RfQlVGRkVSICAgICAgICAgIDB4MDAwMDMyMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfQ1BfSU5URVJSVVBUICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU1VSRkFDRV9TWU5DICAgICAgICAgICAgIDB4MDAwMDQzMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX0NCMF9ERVNUX0JBU0VfRU5BICAgICgxIDw8IDYpCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9UQ19BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyMykKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1ZDX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDI0KQorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfQ0JfQUNUSU9OX0VOQSAgICAgICAgKDEgPDwgMjUpCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9EQl9BQ1RJT05fRU5BICAgICAgICAoMSA8PCAyNikKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NIX0FDVElPTl9FTkEgICAgICAgICgxIDw8IDI3KQorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU01YX0FDVElPTl9FTkEgICAgICAgKDEgPDwgMjgpCisjICAgICAgIGRlZmluZSBSNjAwX0lUX01FX0lOSVRJQUxJWkUgICAgICAgICAgICAweDAwMDA0NDAwCiAjCSAgICAgICBkZWZpbmUgUjYwMF9NRV9JTklUSUFMSVpFX0RFVklDRV9JRCh4KSAoKHgpIDw8IDE2KQotIwlkZWZpbmUgUjYwMF9JVF9FVkVOVF9XUklURQkJMHgwMDAwNDYwMAotIwlkZWZpbmUgUjYwMF9JVF9TRVRfQ09ORklHX1JFRwkJMHgwMDAwNjgwMAotIwlkZWZpbmUgUjYwMF9TRVRfQ09ORklHX1JFR19PRkZTRVQgICAgICAgMHgwMDAwODAwMAotIwlkZWZpbmUgUjYwMF9TRVRfQ09ORklHX1JFR19FTkQgICAgICAgICAgMHgwMDAwYWMwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9DT05EX1dSSVRFICAgICAgICAgICAgICAgMHgwMDAwNDUwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9FVkVOVF9XUklURSAgICAgICAgICAgICAgMHgwMDAwNDYwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9FVkVOVF9XUklURV9FT1AgICAgICAgICAgMHgwMDAwNDcwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9PTkVfUkVHX1dSSVRFICAgICAgICAgICAgMHgwMDAwNTcwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TRVRfQ09ORklHX1JFRyAgICAgICAgICAgMHgwMDAwNjgwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUIDB4MDAwMDgwMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9DT05GSUdfUkVHX0VORCAgIDB4MDAwMGFjMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU0VUX0NPTlRFWFRfUkVHICAgICAgICAgIDB4MDAwMDY5MDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9DT05URVhUX1JFR19PRkZTRVQgMHgwMDAyODAwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0NPTlRFWFRfUkVHX0VORCAgMHgwMDAyOTAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TRVRfQUxVX0NPTlNUICAgICAgICAgICAgMHgwMDAwNkEwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0FMVV9DT05TVF9PRkZTRVQgMHgwMDAzMDAwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0FMVV9DT05TVF9FTkQgICAgMHgwMDAzMjAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9JVF9TRVRfQk9PTF9DT05TVCAgICAgICAgICAgMHgwMDAwNkIwMAorIyAgICAgICAgICAgICAgZGVmaW5lIFI2MDBfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUIDB4MDAwM2UzODAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9CT09MX0NPTlNUX0VORCAgIDB4MDAwNDAwMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfSVRfU0VUX0xPT1BfQ09OU1QgICAgICAgICAgIDB4MDAwMDZDMDAKKyMgICAgICAgICAgICAgIGRlZmluZSBSNjAwX1NFVF9MT09QX0NPTlNUX09GRlNFVCAweDAwMDNlMjAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfTE9PUF9DT05TVF9FTkQgICAweDAwMDNlMzgwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX1NFVF9SRVNPVVJDRSAgICAgICAgICAgICAweDAwMDA2RDAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfUkVTT1VSQ0VfT0ZGU0VUICAweDAwMDM4MDAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfUkVTT1VSQ0VfRU5EICAgICAweDAwMDNjMDAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TUV9URVhfVlRYX0lOVkFMSURfVEVYVFVSRSAgMHgwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TUV9URVhfVlRYX0lOVkFMSURfQlVGRkVSICAgMHgxCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TUV9URVhfVlRYX1ZBTElEX1RFWFRVUkUgICAgMHgyCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TUV9URVhfVlRYX1ZBTElEX0JVRkZFUiAgICAgMHgzCisjICAgICAgIGRlZmluZSBSNjAwX0lUX1NFVF9TQU1QTEVSICAgICAgICAgICAgICAweDAwMDA2RTAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfU0FNUExFUl9PRkZTRVQgICAweDAwMDNjMDAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfU0FNUExFUl9FTkQgICAgICAweDAwMDNjZmYwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX1NFVF9DVExfQ09OU1QgICAgICAgICAgICAweDAwMDA2RjAwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfQ1RMX0NPTlNUX09GRlNFVCAweDAwMDNjZmYwCisjICAgICAgICAgICAgICBkZWZpbmUgUjYwMF9TRVRfQ1RMX0NPTlNUX0VORCAgICAweDAwMDNlMjAwCisjICAgICAgIGRlZmluZSBSNjAwX0lUX1NVUkZBQ0VfQkFTRV9VUERBVEUgICAgICAweDAwMDA3MzAwCiAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVF9NQVNLCQkweEMwMDAwMDAwCiAjZGVmaW5lIFJBREVPTl9DUF9QQUNLRVRfQ09VTlRfTUFTSwkweDNmZmYwMDAwCkBAIC0xNTkzLDYgKzE2ODYsNTIgQEAKICNkZWZpbmUgUjYwMF9DQl9DT0xPUjdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwNWMKICNkZWZpbmUgUjYwMF9DQl9DT0xPUjdfRlJBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwZmMKIAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA2MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9WSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA4MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBhMAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9USUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBjMAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9GUkFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBlMAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODEwMAorCisjZGVmaW5lIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY1MzgKKyNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZMSU5FX1NUQVJUX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NmQzOAorI2RlZmluZSBSNjAwX0NQX0NPSEVSX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NWY4CisjZGVmaW5lIFI2MDBfREJfREVQVEhfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDBjCisjZGVmaW5lIFI2MDBfU1FfUEdNX1NUQVJUX0ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODk0CisjZGVmaW5lIFI2MDBfU1FfUEdNX1NUQVJUX0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODgwCisjZGVmaW5lIFI2MDBfU1FfUEdNX1NUQVJUX1ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODU4CisjZGVmaW5lIFI2MDBfU1FfUEdNX1JFU09VUkNFU19WUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODY4CisjZGVmaW5lIFI2MDBfU1FfUEdNX0NGX09GRlNFVF9WUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4OGQwCisjZGVmaW5lIFI2MDBfU1FfUEdNX1NUQVJUX0dTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODZjCisjZGVmaW5lIFI2MDBfU1FfUEdNX1NUQVJUX1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODQwCisjZGVmaW5lIFI2MDBfU1FfUEdNX1JFU09VUkNFU19QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODUwCisjZGVmaW5lIFI2MDBfU1FfUEdNX0VYUE9SVFNfUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4ODU0CisjZGVmaW5lIFI2MDBfU1FfUEdNX0NGX09GRlNFVF9QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4OGNjCisjZGVmaW5lIFI2MDBfVkdUX0RNQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4N2U4CisjZGVmaW5lIFI2MDBfVkdUX0RNQV9CQVNFX0hJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4N2U0CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfMCAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YjEwCisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfMSAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YjE0CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfMiAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YjE4CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfMyAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YjFjCisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfSElfMCAgICAgICAgICAgICAgICAgICAgICAweDI4YjQ0CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfSElfMSAgICAgICAgICAgICAgICAgICAgICAweDI4YjQ4CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfSElfMiAgICAgICAgICAgICAgICAgICAgICAweDI4YjRjCisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQkFTRV9PRkZTRVRfSElfMyAgICAgICAgICAgICAgICAgICAgICAweDI4YjUwCisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX0JBU0VfMCAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YWQ4CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX0JBU0VfMSAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YWU4CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX0JBU0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YWY4CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX0JBU0VfMyAgICAgICAgICAgICAgICAgICAgICAgICAweDI4YjA4CisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8wICAgICAgICAgICAgICAgICAgICAgICAweDI4YWRjCisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8xICAgICAgICAgICAgICAgICAgICAgICAweDI4YWVjCisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8yICAgICAgICAgICAgICAgICAgICAgICAweDI4YWZjCisjZGVmaW5lIFI2MDBfVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8zICAgICAgICAgICAgICAgICAgICAgICAweDI4YjBjCisKKyNkZWZpbmUgUjYwMF9WR1RfUFJJTUlUSVZFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk1OAorCisjZGVmaW5lIFI2MDBfUEFfU0NfU0NSRUVOX1NDSVNTT1JfVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDMwCisjZGVmaW5lIFI2MDBfUEFfU0NfR0VORVJJQ19TQ0lTU09SX1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MjQwCisjZGVmaW5lIFI2MDBfUEFfU0NfV0lORE9XX1NDSVNTT1JfVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MjA0CisKICNkZWZpbmUgUjYwMF9UQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTYwOAogIyAgICAgICBkZWZpbmUgUjYwMF9UQ19MMl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA1KQogIyAgICAgICBkZWZpbmUgUjYwMF9MMl9ESVNBQkxFX0xBVEVfSElUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDBhOTI3MDYuLjYyMTY0NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMTI2LDYgKzEyNiwyMyBAQAogCX0KIH0KIAordm9pZCByYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyID09IGVuY29kZXIpIHsKKwkJCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCQkJcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgPSByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXM7CisJCQlEUk1fREVCVUcoInNldHRpbmcgYWN0aXZlIGRldmljZSB0byAlMDh4IGZyb20gJTA4eCAlMDh4IGZvciBlbmNvZGVyICVkXG4iLAorCQkJCSAgcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UsIHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzLAorCQkJCSAgcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcywgZW5jb2Rlci0+ZW5jb2Rlcl90eXBlKTsKKwkJfQorCX0KK30KKwogc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yICoKIHJhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKQEAgLTIyNCw5ICsyNDEsMTIgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJREFDX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OIGFyZ3M7CiAJaW50IGluZGV4ID0gMCwgbnVtID0gMDsKLQkvKiBmaXhtZSAtIGZpbGwgaW4gZW5jX3ByaXYgZm9yIGF0b20gZGFjICovCisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICpkYWNfaW5mbyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKIAllbnVtIHJhZGVvbl90dl9zdGQgdHZfc3RkID0gVFZfU1REX05UU0M7CiAKKwlpZiAoZGFjX2luZm8tPnR2X3N0ZCkKKwkJdHZfc3RkID0gZGFjX2luZm8tPnR2X3N0ZDsKKwogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKQEAgLTI0NCw5ICsyNjQsOSBAQAogCiAJYXJncy51Y0FjdGlvbiA9IGFjdGlvbjsKIAotCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpCisJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkKIAkJYXJncy51Y0RhY1N0YW5kYXJkID0gQVRPTV9EQUMxX1BTMjsKLQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJYXJncy51Y0RhY1N0YW5kYXJkID0gQVRPTV9EQUMxX0NWOwogCWVsc2UgewogCQlzd2l0Y2ggKHR2X3N0ZCkgewpAQCAtMjc5LDE2ICsyOTksMTkgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJVFZfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gYXJnczsKIAlpbnQgaW5kZXggPSAwOwotCS8qIGZpeG1lIC0gZmlsbCBpbiBlbmNfcHJpdiBmb3IgYXRvbSBkYWMgKi8KKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKmRhY19pbmZvID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwogCWVudW0gcmFkZW9uX3R2X3N0ZCB0dl9zdGQgPSBUVl9TVERfTlRTQzsKIAorCWlmIChkYWNfaW5mby0+dHZfc3RkKQorCQl0dl9zdGQgPSBkYWNfaW5mby0+dHZfc3RkOworCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVkVuY29kZXJDb250cm9sKTsKIAogCWFyZ3Muc1RWRW5jb2Rlci51Y0FjdGlvbiA9IGFjdGlvbjsKIAotCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCWFyZ3Muc1RWRW5jb2Rlci51Y1R2U3RhbmRhcmQgPSBBVE9NX1RWX0NWOwogCWVsc2UgewogCQlzd2l0Y2ggKHR2X3N0ZCkgewpAQCAtNTIwLDYgKzU0Myw3IEBACiAKIAlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOiAvKiBIRE1JLUIgaXMgYmFzaWNhbGx5IERMLURWSTsgYW5hbG9nIHdvcmtzIGZpbmUgKi8KIAkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKChzdHJ1Y3QgZWRpZCAqKWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0cikpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpCkBAIC01MjksNyArNTUzLDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjoKIAlkZWZhdWx0OgogCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwpAQCAtODI1LDEwICs4NDgsMTAgQEAKIAogCS8qIFhYWDogZml4IHVwIHNjcmF0Y2ggcmVnIGhhbmRsaW5nICovCiAJdGVtcCA9IFJSRUczMihyZWcpOwotCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCVdSRUczMihyZWcsIChBVE9NX1MzX1RWMV9BQ1RJVkUgfAogCQkJICAgICAocmFkZW9uX2NydGMtPmNydGNfaWQgPDwgMTgpKSk7Ci0JZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCVdSRUczMihyZWcsIChBVE9NX1MzX0NWX0FDVElWRSB8IChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA8PCAyNCkpKTsKIAllbHNlCiAJCVdSRUczMihyZWcsIDApOwpAQCAtODUxLDkgKzg3NCwxOSBAQAogCURJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BTX0FMTE9DQVRJT04gYXJnczsKIAlpbnQgaW5kZXggPSAwOwogCWJvb2wgaXNfZGlnID0gZmFsc2U7CisJaW50IGRldmljZXM7CiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKKwkvKiBvbiBEUE1TIG9mZiB3ZSBoYXZlIG5vIGlkZWEgaWYgYWN0aXZlIGRldmljZSBpcyBtZWFuaW5nZnVsICovCisJaWYgKG1vZGUgIT0gRFJNX01PREVfRFBNU19PTiAmJiAhcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UpCisJCWRldmljZXMgPSByYWRlb25fZW5jb2Rlci0+ZGV2aWNlczsKKwllbHNlCisJCWRldmljZXMgPSByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZTsKKworCURSTV9ERUJVRygiZW5jb2RlciBkcG1zICVkIHRvIG1vZGUgJWQsIGRldmljZXMgJTA4eCwgYWN0aXZlX2RldmljZXMgJTA4eFxuIiwKKwkJICByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCwgbW9kZSwgcmFkZW9uX2VuY29kZXItPmRldmljZXMsCisJCSAgcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UpOwogCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1RNRFMxOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxOgpAQCAtODgxLDE4ICs5MTQsMTggQEAKIAkJYnJlYWs7CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMxOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzE6Ci0JCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFRWMU91dHB1dENvbnRyb2wpOwotCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJZWxzZSBpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgQ1YxT3V0cHV0Q29udHJvbCk7CiAJCWVsc2UKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgREFDMU91dHB1dENvbnRyb2wpOwogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzI6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMjoKLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgVFYxT3V0cHV0Q29udHJvbCk7Ci0JCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQllbHNlIGlmIChkZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDVjFPdXRwdXRDb250cm9sKTsKIAkJZWxzZQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBEQUMyT3V0cHV0Q29udHJvbCk7CkBAIC05NzksMTggKzEwMTIsMTggQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMToKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzE6Ci0JCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQorCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCQkJYXJncy52MS51Y0RldmljZSA9IEFUT01fREVWSUNFX1RWMV9JTkRFWDsKLQkJCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKIAkJCQkJYXJncy52MS51Y0RldmljZSA9IEFUT01fREVWSUNFX0NWX0lOREVYOwogCQkJCWVsc2UKIAkJCQkJYXJncy52MS51Y0RldmljZSA9IEFUT01fREVWSUNFX0NSVDFfSU5ERVg7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzI6CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCQkJCWFyZ3MudjEudWNEZXZpY2UgPSBBVE9NX0RFVklDRV9UVjFfSU5ERVg7Ci0JCQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQkJCWFyZ3MudjEudWNEZXZpY2UgPSBBVE9NX0RFVklDRV9DVl9JTkRFWDsKIAkJCQllbHNlCiAJCQkJCWFyZ3MudjEudWNEZXZpY2UgPSBBVE9NX0RFVklDRV9DUlQyX0lOREVYOwpAQCAtMTAxOSwxNyArMTA1MiwxNyBAQAogCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMxOgotCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9UVl9FTkNPREVSX0lEOwotCQkJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfVFZfRU5DT0RFUl9JRDsKIAkJCQllbHNlCiAJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9EQUMxX0VOQ09ERVJfSUQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCiAJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9UVl9FTkNPREVSX0lEOwotCQkJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfVFZfRU5DT0RFUl9JRDsKIAkJCQllbHNlCiAJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9EQUMyX0VOQ09ERVJfSUQ7CkBAIC0xMDk3LDcgKzExMzAsNyBAQAogCWF0b21iaW9zX3NldF9lbmNvZGVyX2NydGNfc291cmNlKGVuY29kZXIpOwogCiAJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCWF0b21iaW9zX3l1dl9zZXR1cChlbmNvZGVyLCB0cnVlKTsKIAkJZWxzZQogCQkJYXRvbWJpb3NfeXV2X3NldHVwKGVuY29kZXIsIGZhbHNlKTsKQEAgLTExMzUsNyArMTE2OCw3IEBACiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMyOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzI6CiAJCWF0b21iaW9zX2RhY19zZXR1cChlbmNvZGVyLCBBVE9NX0VOQUJMRSk7Ci0JCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlhdG9tYmlvc190dl9zZXR1cChlbmNvZGVyLCBBVE9NX0VOQUJMRSk7CiAJCWJyZWFrOwogCX0KQEAgLTExNDMsMTEgKzExNzYsMTIgQEAKIH0KIAogc3RhdGljIGJvb2wKLWF0b21iaW9zX2RhY19sb2FkX2RldGVjdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCithdG9tYmlvc19kYWNfbG9hZF9kZXRlY3Qoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAogCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUIHwKIAkJCQkgICAgICAgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCB8CkBAIC0xMTY4LDE1ICsxMjAyLDE1IEBACiAJCWVsc2UKIAkJCWFyZ3Muc0RhY2xvYWQudWNEYWNUeXBlID0gQVRPTV9EQUNfQjsKIAotCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQpCisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKQogCQkJYXJncy5zRGFjbG9hZC51c0RldmljZUlEID0gY3B1X3RvX2xlMTYoQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKLQkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpCisJCWVsc2UgaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpCiAJCQlhcmdzLnNEYWNsb2FkLnVzRGV2aWNlSUQgPSBjcHVfdG9fbGUxNihBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpOwotCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NWX1NVUFBPUlQpIHsKKwkJZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NWX1NVUFBPUlQpIHsKIAkJCWFyZ3Muc0RhY2xvYWQudXNEZXZpY2VJRCA9IGNwdV90b19sZTE2KEFUT01fREVWSUNFX0NWX1NVUFBPUlQpOwogCQkJaWYgKGNyZXYgPj0gMykKIAkJCQlhcmdzLnNEYWNsb2FkLnVjTWlzYyA9IERBQ19MT0FEX01JU0NfWVByUGI7Ci0JCX0gZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkgeworCQl9IGVsc2UgaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkgewogCQkJYXJncy5zRGFjbG9hZC51c0RldmljZUlEID0gY3B1X3RvX2xlMTYoQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOwogCQkJaWYgKGNyZXYgPj0gMykKIAkJCQlhcmdzLnNEYWNsb2FkLnVjTWlzYyA9IERBQ19MT0FEX01JU0NfWVByUGI7CkBAIC0xMTk1LDkgKzEyMjksMTAgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CiAJdWludDMyX3QgYmlvc18wX3NjcmF0Y2g7CiAKLQlpZiAoIWF0b21iaW9zX2RhY19sb2FkX2RldGVjdChlbmNvZGVyKSkgeworCWlmICghYXRvbWJpb3NfZGFjX2xvYWRfZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3RvcikpIHsKIAkJRFJNX0RFQlVHKCJkZXRlY3QgcmV0dXJuZWQgZmFsc2UgXG4iKTsKIAkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKIAl9CkBAIC0xMjA3LDE3ICsxMjQyLDIwIEBACiAJZWxzZQogCQliaW9zXzBfc2NyYXRjaCA9IFJSRUczMihSQURFT05fQklPU18wX1NDUkFUQ0gpOwogCi0JRFJNX0RFQlVHKCJCaW9zIDAgc2NyYXRjaCAleFxuIiwgYmlvc18wX3NjcmF0Y2gpOwotCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCkgeworCURSTV9ERUJVRygiQmlvcyAwIHNjcmF0Y2ggJXggJTA4eFxuIiwgYmlvc18wX3NjcmF0Y2gsIHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCkgewogCQlpZiAoYmlvc18wX3NjcmF0Y2ggJiBBVE9NX1MwX0NSVDFfTUFTSykKIAkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKLQl9IGVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKSB7CisJfQorCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKSB7CiAJCWlmIChiaW9zXzBfc2NyYXRjaCAmIEFUT01fUzBfQ1JUMl9NQVNLKQogCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCX0gZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSB7CisJfQorCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkgewogCQlpZiAoYmlvc18wX3NjcmF0Y2ggJiAoQVRPTV9TMF9DVl9NQVNLfEFUT01fUzBfQ1ZfTUFTS19BKSkKIAkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKLQl9IGVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpIHsKKwl9CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkgewogCQlpZiAoYmlvc18wX3NjcmF0Y2ggJiAoQVRPTV9TMF9UVjFfQ09NUE9TSVRFIHwgQVRPTV9TMF9UVjFfQ09NUE9TSVRFX0EpKQogCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOyAvKiBDVFYgKi8KIAkJZWxzZSBpZiAoYmlvc18wX3NjcmF0Y2ggJiAoQVRPTV9TMF9UVjFfU1ZJREVPIHwgQVRPTV9TMF9UVjFfU1ZJREVPX0EpKQpAQCAtMTIzMCw2ICsxMjY4LDggQEAKIHsKIAlyYWRlb25fYXRvbV9vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fYXRvbV9lbmNvZGVyX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9hdG9tX2VuY29kZXJfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTEyMzgsMTIgKzEyNzgsMjAgQEAKIAlyYWRlb25fYXRvbV9vdXRwdXRfbG9jayhlbmNvZGVyLCBmYWxzZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9hdG9tX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXJhZGVvbl9hdG9tX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgPSAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyByYWRlb25fYXRvbV9kaWdfaGVscGVyX2Z1bmNzID0gewogCS5kcG1zID0gcmFkZW9uX2F0b21fZW5jb2Rlcl9kcG1zLAogCS5tb2RlX2ZpeHVwID0gcmFkZW9uX2F0b21fbW9kZV9maXh1cCwKIAkucHJlcGFyZSA9IHJhZGVvbl9hdG9tX2VuY29kZXJfcHJlcGFyZSwKIAkubW9kZV9zZXQgPSByYWRlb25fYXRvbV9lbmNvZGVyX21vZGVfc2V0LAogCS5jb21taXQgPSByYWRlb25fYXRvbV9lbmNvZGVyX2NvbW1pdCwKKwkuZGlzYWJsZSA9IHJhZGVvbl9hdG9tX2VuY29kZXJfZGlzYWJsZSwKIAkvKiBubyBkZXRlY3QgZm9yIFRNRFMvTFZEUyB5ZXQgKi8KIH07CiAKQEAgLTEyNjgsNiArMTMxNiwxOCBAQAogCS5kZXN0cm95ID0gcmFkZW9uX2VuY19kZXN0cm95LAogfTsKIAorc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICoKK3JhZGVvbl9hdG9tYmlvc19zZXRfZGFjX2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgKmRhYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyksIEdGUF9LRVJORUwpOworCisJaWYgKCFkYWMpCisJCXJldHVybiBOVUxMOworCisJZGFjLT50dl9zdGQgPSBUVl9TVERfTlRTQzsKKwlyZXR1cm4gZGFjOworfQorCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKgogcmFkZW9uX2F0b21iaW9zX3NldF9kaWdfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyKQogewpAQCAtMTMzNiw2ICsxMzk2LDcgQEAKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMxOgogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzI6CiAJCWRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmcmFkZW9uX2F0b21fZW5jX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX1RWREFDKTsKKwkJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gcmFkZW9uX2F0b21iaW9zX3NldF9kYWNfaW5mbyhyYWRlb25fZW5jb2Rlcik7CiAJCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJnJhZGVvbl9hdG9tX2RhY19oZWxwZXJfZnVuY3MpOwogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RWTzE6CkBAIC0xMzQ1LDggKzE0MDYsMTQgQEAKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9MVlRNQToKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgotCQlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnJhZGVvbl9hdG9tX2VuY19mdW5jcywgRFJNX01PREVfRU5DT0RFUl9UTURTKTsKLQkJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gcmFkZW9uX2F0b21iaW9zX3NldF9kaWdfaW5mbyhyYWRlb25fZW5jb2Rlcik7CisJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKKwkJCXJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9IFJNWF9GVUxMOworCQkJZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZyYWRlb25fYXRvbV9lbmNfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfTFZEUyk7CisJCQlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSByYWRlb25fYXRvbWJpb3NfZ2V0X2x2ZHNfaW5mbyhyYWRlb25fZW5jb2Rlcik7CisJCX0gZWxzZSB7CisJCQlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnJhZGVvbl9hdG9tX2VuY19mdW5jcywgRFJNX01PREVfRU5DT0RFUl9UTURTKTsKKwkJCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IHJhZGVvbl9hdG9tYmlvc19zZXRfZGlnX2luZm8ocmFkZW9uX2VuY29kZXIpOworCQl9CiAJCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgJnJhZGVvbl9hdG9tX2RpZ19oZWxwZXJfZnVuY3MpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwppbmRleCBlYzM4M2VkLi45NDRlNGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKQEAgLTI4LDE1ICsyOCw3IEBACiAgICAgICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCkBAIC00NSwzNzUgKzM3LDI0IEBACiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogCisjaW5jbHVkZSAiZHJtX2ZiX2hlbHBlci5oIgorCiBzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSB7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UJCSpyZGV2OwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlCQkqbW9kZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciBoZWxwZXI7CiAJc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlcgkqcmZiOwotCWludAkJCQljcnRjX2NvdW50OwotCS8qIGNydGMgY3VycmVudGx5IGJvdW5kIHRvIHRoaXMgKi8KLQl1aW50MzJfdAkJCWNydGNfaWRzWzJdOworCXN0cnVjdCByYWRlb25fZGV2aWNlCQkqcmRldjsKIH07CiAKLXN0YXRpYyBpbnQgcmFkZW9uZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLAotCQkJICAgICAgdW5zaWduZWQgcmVkLAotCQkJICAgICAgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgICB1bnNpZ25lZCBibHVlLAotCQkJICAgICAgdW5zaWduZWQgdHJhbnNwLAotCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmZiZGV2LT5yZGV2LT5kZGV2OwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlpbnQgaTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKLQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9ICZyYWRlb25fY3J0Yy0+bW9kZV9zZXQ7Ci0JCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbW9kZXNldC0+ZmI7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHJmYmRldi0+Y3J0Y19jb3VudDsgaSsrKSB7Ci0JCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSByZmJkZXYtPmNydGNfaWRzW2ldKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGkgPT0gcmZiZGV2LT5jcnRjX2NvdW50KSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocmVnbm8gPiAyNTUpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChmYi0+ZGVwdGggPT0gOCkgewotCQkJcmFkZW9uX2NydGNfZmJfZ2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHJlZ25vIDwgMTYpIHsKLQkJCXN3aXRjaCAoZmItPmRlcHRoKSB7Ci0JCQljYXNlIDE1OgotCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAotCQkJCQkoKGdyZWVuICYgMHhmODAwKSA+PiAgNikgfAotCQkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMTY6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKLQkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKLQkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyNDoKLQkJCWNhc2UgMzI6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9Ci0JCQkJCSgoKHJlZCA+PiA4KSAmIDB4ZmYpIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8Ci0JCQkJCSgoKGdyZWVuID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJCQkoKChibHVlID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByYWRlb25mYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSAqcmZiZGV2ID0gaW5mby0+cGFyOwotCXN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgKnJmYiA9IHJmYmRldi0+cmZiOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gJnJmYi0+YmFzZTsKLQlpbnQgZGVwdGg7Ci0KLQlpZiAodmFyLT5waXhjbG9jayA9PSAtMSB8fCAhdmFyLT5waXhjbG9jaykgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyogTmVlZCB0byByZXNpemUgdGhlIGZiIG9iamVjdCAhISEgKi8KLQlpZiAodmFyLT54cmVzID4gZmItPndpZHRoIHx8IHZhci0+eXJlcyA+IGZiLT5oZWlnaHQpIHsKLQkJRFJNX0VSUk9SKCJSZXF1ZXN0ZWQgd2lkdGgvaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZiICIKLQkJCSAgICJvYmplY3QgJWR4JWQgPiAlZHglZFxuIiwgdmFyLT54cmVzLCB2YXItPnlyZXMsCi0JCQkgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOwotCQlEUk1fRVJST1IoIk5lZWQgcmVzaXppbmcgY29kZS5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKLQljYXNlIDE2OgotCQlkZXB0aCA9ICh2YXItPmdyZWVuLmxlbmd0aCA9PSA2KSA/IDE2IDogMTU7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWRlcHRoID0gKHZhci0+dHJhbnNwLmxlbmd0aCA+IDApID8gMzIgOiAyNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGRlcHRoKSB7Ci0JY2FzZSA4OgotCQl2YXItPnJlZC5vZmZzZXQgPSAwOwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA4OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KLQljYXNlIDE1OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxMDsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA1OwotCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMTU7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDExOwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA1OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA1OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIDI0OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gODsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OwotCQl2YXItPmJsdWUubGVuZ3RoID0gODsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OwotCQlicmVhazsKLSNlbHNlCi0JY2FzZSAyNDoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gODsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAxNjsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDI0OwotCQl2YXItPnJlZC5sZW5ndGggPSA4OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIDMyOgotCQl2YXItPnJlZC5vZmZzZXQgPSA4OwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDE2OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMjQ7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiB0aGlzIHdpbGwgbGV0IGZiY29uIGRvIHRoZSBtb2RlIGluaXQgKi8KLXN0YXRpYyBpbnQgcmFkZW9uZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSAqcmZiZGV2ID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZmJkZXYtPnJkZXYtPmRkZXY7Ci0Jc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlpbnQgcmV0OwotCWludCBpOwotCi0JaWYgKHZhci0+cGl4Y2xvY2sgIT0gLTEpIHsKLQkJRFJNX0VSUk9SKCJQSVhFTCBDTENPSyBTRVRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHJmYmRldi0+Y3J0Y19jb3VudDsgaSsrKSB7Ci0JCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSByZmJkZXYtPmNydGNfaWRzW2ldKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGkgPT0gcmZiZGV2LT5jcnRjX2NvdW50KSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J0Yy0+ZmIgPT0gcmFkZW9uX2NydGMtPm1vZGVfc2V0LmZiKSB7Ci0JCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKCZyYWRlb25fY3J0Yy0+bW9kZV9zZXQpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCWlmIChyZXQpIHsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJhZGVvbmZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCByYWRlb25fZmJfZGV2aWNlICpyZmJkZXYgPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJmYmRldi0+cmRldi0+ZGRldjsKLQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0OwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjOwotCWludCByZXQgPSAwOwotCWludCBpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJZm9yIChpID0gMDsgaSA8IHJmYmRldi0+Y3J0Y19jb3VudDsgaSsrKSB7Ci0JCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSByZmJkZXYtPmNydGNfaWRzW2ldKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoaSA9PSByZmJkZXYtPmNydGNfY291bnQpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKLQkJbW9kZXNldCA9ICZyYWRlb25fY3J0Yy0+bW9kZV9zZXQ7Ci0KLQkJbW9kZXNldC0+eCA9IHZhci0+eG9mZnNldDsKLQkJbW9kZXNldC0+eSA9IHZhci0+eW9mZnNldDsKLQotCQlpZiAobW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMpIHsKLQkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcobW9kZXNldCk7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQkJaWYgKCFyZXQpIHsKLQkJCQlpbmZvLT52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKLQkJCQlpbmZvLT52YXIueW9mZnNldCA9IHZhci0+eW9mZnNldDsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCByYWRlb25mYl9vbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSAqcmZiZGV2ID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZmJkZXYtPnJkZXYtPmRkZXY7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlpbnQgaTsKLQotCS8qCi0JICogRm9yIGVhY2ggQ1JUQyBpbiB0aGlzIGZiLCBmaW5kIGFsbCBhc3NvY2lhdGVkIGVuY29kZXJzCi0JICogYW5kIHR1cm4gdGhlbSBvZmYsIHRoZW4gdHVybiBvZmYgdGhlIENSVEMuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwotCi0JCWZvciAoaSA9IDA7IGkgPCByZmJkZXYtPmNydGNfY291bnQ7IGkrKykgewotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcmZiZGV2LT5jcnRjX2lkc1tpXSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgRFJNX01PREVfRFBNU19PTik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0KLQkJLyogRm91bmQgYSBDUlRDIG9uIHRoaXMgZmIsIG5vdyBmaW5kIGVuY29kZXJzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSB7Ci0JCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKLQotCQkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKLQkJCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwotCQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJhZGVvbmZiX29mZihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGRwbXNfbW9kZSkKLXsKLQlzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSAqcmZiZGV2ID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZmJkZXYtPnJkZXYtPmRkZXY7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlpbnQgaTsKLQotCS8qCi0JICogRm9yIGVhY2ggQ1JUQyBpbiB0aGlzIGZiLCBmaW5kIGFsbCBhc3NvY2lhdGVkIGVuY29kZXJzCi0JICogYW5kIHR1cm4gdGhlbSBvZmYsIHRoZW4gdHVybiBvZmYgdGhlIENSVEMuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwotCi0JCWZvciAoaSA9IDA7IGkgPCByZmJkZXYtPmNydGNfY291bnQ7IGkrKykgewotCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcmZiZGV2LT5jcnRjX2lkc1tpXSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJLyogRm91bmQgYSBDUlRDIG9uIHRoaXMgZmIsIG5vdyBmaW5kIGVuY29kZXJzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSB7Ci0JCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKLQotCQkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKLQkJCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIGRwbXNfbW9kZSk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCX0KLQkJfQotCQlpZiAoZHBtc19tb2RlID09IERSTV9NT0RFX0RQTVNfT0ZGKSB7Ci0JCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQkJCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgZHBtc19tb2RlKTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCX0KLQl9Ci19Ci0KLWludCByYWRlb25mYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN3aXRjaCAoYmxhbmspIHsKLQljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCXJhZGVvbmZiX29uKGluZm8pOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX05PUk1BTDoKLQkJcmFkZW9uZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1RBTkRCWSk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKLQkJcmFkZW9uZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1RBTkRCWSk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLQkJcmFkZW9uZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1VTUEVORCk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQlyYWRlb25mYl9vZmYoaW5mbywgRFJNX01PREVfRFBNU19PRkYpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHJhZGVvbmZiX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuZmJfY2hlY2tfdmFyID0gcmFkZW9uZmJfY2hlY2tfdmFyLAotCS5mYl9zZXRfcGFyID0gcmFkZW9uZmJfc2V0X3BhciwKLQkuZmJfc2V0Y29scmVnID0gcmFkZW9uZmJfc2V0Y29scmVnLAorCS5mYl9jaGVja192YXIgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnID0gZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcsCiAJLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKLQkuZmJfcGFuX2Rpc3BsYXkgPSByYWRlb25mYl9wYW5fZGlzcGxheSwKLQkuZmJfYmxhbmsgPSByYWRlb25mYl9ibGFuaywKKwkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAorCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCiB9OwogCiAvKioKQEAgLTQ1NiwyMSArOTcsNiBAQAogfQogRVhQT1JUX1NZTUJPTChyYWRlb25mYl9yZXNpemUpOwogCi1zdGF0aWMgc3RydWN0IGRybV9tb2RlX3NldCBwYW5pY19tb2RlOwotCi1pbnQgcmFkZW9uZmJfcGFuaWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLCB1bnNpZ25lZCBsb25nIHVudW5zZWQsCi0JCSAgdm9pZCAqcGFuaWNfc3RyKQotewotCURSTV9FUlJPUigicGFuaWMgb2NjdXJyZWQsIHN3aXRjaGluZyBiYWNrIHRvIHRleHQgY29uc29sZVxuIik7Ci0JZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcoJnBhbmljX21vZGUpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChyYWRlb25mYl9wYW5pYyk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNlZCA9IHsKLQkubm90aWZpZXJfY2FsbCA9IHJhZGVvbmZiX3BhbmljLAotfTsKLQogc3RhdGljIGludCByYWRlb25fYWxpZ25fcGl0Y2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCB3aWR0aCwgaW50IGJwcCwgYm9vbCB0aWxlZCkKIHsKIAlpbnQgYWxpZ25lZCA9IHdpZHRoOwpAQCAtNDk1LDExICsxMjEsMTYgQEAKIAlyZXR1cm4gYWxpZ25lZDsKIH0KIAotaW50IHJhZGVvbmZiX2NyZWF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyByYWRlb25fZmJfaGVscGVyX2Z1bmNzID0geworCS5nYW1tYV9zZXQgPSByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQsCit9OworCitpbnQgcmFkZW9uZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCSAgICB1aW50MzJfdCBmYl93aWR0aCwgdWludDMyX3QgZmJfaGVpZ2h0LAogCQkgICAgdWludDMyX3Qgc3VyZmFjZV93aWR0aCwgdWludDMyX3Qgc3VyZmFjZV9oZWlnaHQsCi0JCSAgICBzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyICoqcmZiX3ApCisJCSAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcCkKIHsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IHJhZGVvbl9mYl9kZXZpY2UgKnJmYmRldjsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IE5VTEw7CkBAIC01MTMsNiArMTQ0LDcgQEAKIAl2b2lkICpmYnB0ciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJYm9vbCBmYl90aWxlZCA9IGZhbHNlOyAvKiB1c2VmdWwgZm9yIHRlc3RpbmcgKi8KKwl1MzIgdGlsaW5nX2ZsYWdzID0gMDsKIAogCW1vZGVfY21kLndpZHRoID0gc3VyZmFjZV93aWR0aDsKIAltb2RlX2NtZC5oZWlnaHQgPSBzdXJmYWNlX2hlaWdodDsKQEAgLTUzNyw3ICsxNjksMjIgQEAKIAlyb2JqID0gZ29iai0+ZHJpdmVyX3ByaXZhdGU7CiAKIAlpZiAoZmJfdGlsZWQpCi0JCXJhZGVvbl9vYmplY3Rfc2V0X3RpbGluZ19mbGFncyhyb2JqLCBSQURFT05fVElMSU5HX01BQ1JPfFJBREVPTl9USUxJTkdfU1VSRkFDRSwgbW9kZV9jbWQucGl0Y2gpOworCQl0aWxpbmdfZmxhZ3MgPSBSQURFT05fVElMSU5HX01BQ1JPOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJc3dpdGNoIChtb2RlX2NtZC5icHApIHsKKwljYXNlIDMyOgorCQl0aWxpbmdfZmxhZ3MgfD0gUkFERU9OX1RJTElOR19TV0FQXzMyQklUOworCQlicmVhazsKKwljYXNlIDE2OgorCQl0aWxpbmdfZmxhZ3MgfD0gUkFERU9OX1RJTElOR19TV0FQXzE2QklUOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKyNlbmRpZgorCisJaWYgKHRpbGluZ19mbGFncykKKwkJcmFkZW9uX29iamVjdF9zZXRfdGlsaW5nX2ZsYWdzKHJvYmosIHRpbGluZ19mbGFncyB8IFJBREVPTl9USUxJTkdfU1VSRkFDRSwgbW9kZV9jbWQucGl0Y2gpOwogCW11dGV4X2xvY2soJnJkZXYtPmRkZXYtPnN0cnVjdF9tdXRleCk7CiAJZmIgPSByYWRlb25fZnJhbWVidWZmZXJfY3JlYXRlKHJkZXYtPmRkZXYsICZtb2RlX2NtZCwgZ29iaik7CiAJaWYgKGZiID09IE5VTEwpIHsKQEAgLTU1NCw4ICsyMDEsOCBAQAogCiAJbGlzdF9hZGQoJmZiLT5maWxwX2hlYWQsICZyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCk7CiAKKwkqZmJfcCA9IGZiOwogCXJmYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihmYik7Ci0JKnJmYl9wID0gcmZiOwogCXJkZXYtPmZiZGV2X3JmYiA9IHJmYjsKIAlyZGV2LT5mYmRldl9yb2JqID0gcm9iajsKIApAQCAtNTY0LDcgKzIxMSwxNSBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bnJlZjsKIAl9CisKKwlyZGV2LT5mYmRldl9pbmZvID0gaW5mbzsKIAlyZmJkZXYgPSBpbmZvLT5wYXI7CisJcmZiZGV2LT5oZWxwZXIuZnVuY3MgPSAmcmFkZW9uX2ZiX2hlbHBlcl9mdW5jczsKKwlyZmJkZXYtPmhlbHBlci5kZXYgPSBkZXY7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoJnJmYmRldi0+aGVscGVyLCAyLAorCQkJCQkgICAgUkFERU9ORkJfQ09OTl9MSU1JVCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5yZWY7CiAKIAlpZiAoZmJfdGlsZWQpCiAJCXJhZGVvbl9vYmplY3RfY2hlY2tfdGlsaW5nKHJvYmosIDAsIDApOwpAQCAtNTc3LDMzICsyMzIsMTkgQEAKIAltZW1zZXRfaW8oZmJwdHIsIDAsIGFsaWduZWRfc2l6ZSk7CiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKLQlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKLQlpbmZvLT5maXgudHlwZV9hdXggPSAwOwotCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCi0JaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KLQlpbmZvLT5maXgueXdyYXBzdGVwID0gMDsKLQlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOwotCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CisKKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCk7CisKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOwogCWluZm8tPmZib3BzID0gJnJhZGVvbmZiX29wczsKLQlpbmZvLT5maXgubGluZV9sZW5ndGggPSBmYi0+cGl0Y2g7CisKIAl0bXAgPSBmYl9ncHVhZGRyIC0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IHJkZXYtPm1jLmFwZXJfYmFzZSArIHRtcDsKIAlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOwogCWluZm8tPnNjcmVlbl9iYXNlID0gZmJwdHI7CiAJaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwotCWluZm8tPnBzZXVkb19wYWxldHRlID0gZmItPnBzZXVkb19wYWxldHRlOwotCWluZm8tPnZhci54cmVzX3ZpcnR1YWwgPSBmYi0+d2lkdGg7Ci0JaW5mby0+dmFyLnlyZXNfdmlydHVhbCA9IGZiLT5oZWlnaHQ7Ci0JaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gZmItPmJpdHNfcGVyX3BpeGVsOwotCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIueW9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwotCWluZm8tPnZhci5oZWlnaHQgPSAtMTsKLQlpbmZvLT52YXIud2lkdGggPSAtMTsKLQlpbmZvLT52YXIueHJlcyA9IGZiX3dpZHRoOwotCWluZm8tPnZhci55cmVzID0gZmJfaGVpZ2h0OworCisJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCBmYiwgZmJfd2lkdGgsIGZiX2hlaWdodCk7CiAKIAkvKiBzZXR1cCBhcGVydHVyZSBiYXNlL3NpemUgZm9yIHZlc2FmYiB0YWtlb3ZlciAqLwogCWluZm8tPmFwZXJ0dXJlX2Jhc2UgPSByZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlOwpAQCAtNjI2LDgzICsyNjcsNiBAQAogCURSTV9JTkZPKCJmYiBkZXB0aCBpcyAlZFxuIiwgZmItPmRlcHRoKTsKIAlEUk1fSU5GTygiICAgcGl0Y2ggaXMgJWRcbiIsIGZiLT5waXRjaCk7CiAKLQlzd2l0Y2ggKGZiLT5kZXB0aCkgewotCWNhc2UgODoKLQkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OyAvKiA4Yml0IERBQyAqLwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7Ci0JCWJyZWFrOwotI2lmZGVmIF9fTElUVExFX0VORElBTgotCWNhc2UgMTU6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTA7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA1OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDU7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDE1OwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTE7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA1OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDU7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA2OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA1OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTY7Ci0JCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxNjsKLQkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7Ci0JCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7Ci0JCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMjQ7Ci0JCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gODsKLQkJYnJlYWs7Ci0jZWxzZQotCWNhc2UgMjQ6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gODsKLQkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDE2OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAyNDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gODsKLQkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDE2OwotCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAyNDsKLQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OwotCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKLQkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOwotCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JfQotCiAJZmItPmZiZGV2ID0gaW5mbzsKIAlyZmJkZXYtPnJmYiA9IHJmYjsKIAlyZmJkZXYtPnJkZXYgPSByZGV2OwpAQCAtNzI2LDE0NSArMjkwLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByYWRlb25mYl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0JdW5zaWduZWQgaW50IGZiX3dpZHRoID0gKHVuc2lnbmVkKS0xLCBmYl9oZWlnaHQgPSAodW5zaWduZWQpLTE7Ci0JdW5zaWduZWQgaW50IHN1cmZhY2Vfd2lkdGggPSAwLCBzdXJmYWNlX2hlaWdodCA9IDA7Ci0JaW50IG5ld19mYiA9IDA7Ci0JaW50IGNydGNfY291bnQgPSAwOwotCWludCByZXQsIGksIGNvbm5fY291bnQgPSAwOwotCXN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgKnJmYjsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSAqcmZiZGV2OwotCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSBOVUxMOwotCi0JLyogZmlyc3QgdXAgZ2V0IGEgY291bnQgb2YgY3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmcmRldi0+ZGRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCWlmIChkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpKSB7Ci0JCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlKSB7Ci0JCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXkgPCBmYl93aWR0aCkKLQkJCQkJZmJfd2lkdGggPSBjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5OwotCi0JCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXkgPCBmYl9oZWlnaHQpCi0JCQkJCWZiX2hlaWdodCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXk7Ci0KLQkJCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheSA+IHN1cmZhY2Vfd2lkdGgpCi0JCQkJCXN1cmZhY2Vfd2lkdGggPSBjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5OwotCi0JCQkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXkgPiBzdXJmYWNlX2hlaWdodCkKLQkJCQkJc3VyZmFjZV9oZWlnaHQgPSBjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5OwotCQkJfQotCQkJY3J0Y19jb3VudCsrOwotCQl9Ci0JfQotCi0JaWYgKGNydGNfY291bnQgPT0gMCB8fCBmYl93aWR0aCA9PSAtMSB8fCBmYl9oZWlnaHQgPT0gLTEpIHsKLQkJLyogaG1tIGV2ZXJ5b25lIHdlbnQgYXdheSAtIGFzc3VtZSBWR0EgY2FibGUganVzdCBmZWxsIG91dAotCQkgICBhbmQgd2lsbCBjb21lIGJhY2sgbGF0ZXIuICovCi0JCXJldHVybiAwOwotCX0KLQotCS8qIGRvIHdlIGhhdmUgYW4gZmIgYWxyZWFkeT8gKi8KLQlpZiAobGlzdF9lbXB0eSgmcmRldi0+ZGRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QpKSB7Ci0JCS8qIGNyZWF0ZSBhbiBmYiBpZiB3ZSBkb24ndCBoYXZlIG9uZSAqLwotCQlyZXQgPSByYWRlb25mYl9jcmVhdGUocmRldiwgZmJfd2lkdGgsIGZiX2hlaWdodCwgc3VyZmFjZV93aWR0aCwgc3VyZmFjZV9oZWlnaHQsICZyZmIpOwotCQlpZiAocmV0KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQluZXdfZmIgPSAxOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCQlmYiA9IGxpc3RfZmlyc3RfZW50cnkoJnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyLCBmaWxwX2hlYWQpOwotCQlyZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoZmIpOwotCi0JCS8qIGlmIHNvbWVvbmUgaG90cGx1Z3Mgc29tZXRoaW5nIGJpZ2dlciB0aGFuIHdlIGhhdmUgYWxyZWFkeSBhbGxvY2F0ZWQsIHdlIGFyZSBwd25lZC4KLQkJICAgQXMgcmVhbGx5IHdlIGNhbid0IHJlc2l6ZSBhbiBmYmRldiB0aGF0IGlzIGluIHRoZSB3aWxkIGN1cnJlbnRseSBkdWUgdG8gZmJkZXYKLQkJICAgbm90IHJlYWxseSBiZWluZyBkZXNpZ25lZCBmb3IgdGhlIGxvd2VyIGxheWVycyBtb3Zpbmcgc3R1ZmYgYXJvdW5kIHVuZGVyIGl0LgotCQkgICAtIHNvIGluIHRoZSBncmFuZCBzdHlsZSBvZiB0aGluZ3MgLSBwdW50LiAqLwotCQlpZiAoKGZiLT53aWR0aCA8IHN1cmZhY2Vfd2lkdGgpIHx8IChmYi0+aGVpZ2h0IDwgc3VyZmFjZV9oZWlnaHQpKSB7Ci0JCQlEUk1fRVJST1IoIkZyYW1lYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2ggdG8gc2NhbGUgY29uc29sZSBvbnRvLlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWluZm8gPSByZmItPmJhc2UuZmJkZXY7Ci0JcmRldi0+ZmJkZXZfaW5mbyA9IGluZm87Ci0JcmZiZGV2ID0gaW5mby0+cGFyOwotCi0JY3J0Y19jb3VudCA9IDA7Ci0JLyogb2theSB3ZSBuZWVkIHRvIHNldHVwIG5ldyBjb25uZWN0b3Igc2V0cyBpbiB0aGUgY3J0Y3MgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwotCQltb2Rlc2V0ID0gJnJhZGVvbl9jcnRjLT5tb2RlX3NldDsKLQkJbW9kZXNldC0+ZmIgPSAmcmZiLT5iYXNlOwotCQljb25uX2NvdW50ID0gMDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZyZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewotCQkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlcikKLQkJCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjID09IG1vZGVzZXQtPmNydGMpIHsKLQkJCQkJbW9kZXNldC0+Y29ubmVjdG9yc1tjb25uX2NvdW50XSA9IGNvbm5lY3RvcjsKLQkJCQkJY29ubl9jb3VudCsrOwotCQkJCQlpZiAoY29ubl9jb3VudCA+IFJBREVPTkZCX0NPTk5fTElNSVQpCi0JCQkJCQlCVUcoKTsKLQkJCQl9Ci0JCX0KLQotCQlmb3IgKGkgPSBjb25uX2NvdW50OyBpIDwgUkFERU9ORkJfQ09OTl9MSU1JVDsgaSsrKQotCQkJbW9kZXNldC0+Y29ubmVjdG9yc1tpXSA9IE5VTEw7Ci0KLQotCQlyZmJkZXYtPmNydGNfaWRzW2NydGNfY291bnQrK10gPSBjcnRjLT5iYXNlLmlkOwotCi0JCW1vZGVzZXQtPm51bV9jb25uZWN0b3JzID0gY29ubl9jb3VudDsKLQkJaWYgKG1vZGVzZXQtPmNydGMtPmRlc2lyZWRfbW9kZSkgewotCQkJaWYgKG1vZGVzZXQtPm1vZGUpIHsKLQkJCQlkcm1fbW9kZV9kZXN0cm95KHJkZXYtPmRkZXYsIG1vZGVzZXQtPm1vZGUpOwotCQkJfQotCQkJbW9kZXNldC0+bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShyZGV2LT5kZGV2LAotCQkJCQkJCSAgIG1vZGVzZXQtPmNydGMtPmRlc2lyZWRfbW9kZSk7Ci0JCX0KLQl9Ci0JcmZiZGV2LT5jcnRjX2NvdW50ID0gY3J0Y19jb3VudDsKLQotCWlmIChuZXdfZmIpIHsKLQkJaW5mby0+dmFyLnBpeGNsb2NrID0gLTE7Ci0JCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQlyYWRlb25mYl9zZXRfcGFyKGluZm8pOwotCX0KLQlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBpbmZvLT5ub2RlLAotCSAgICAgICBpbmZvLT5maXguaWQpOwotCi0JLyogU3dpdGNoIGJhY2sgdG8ga2VybmVsIGNvbnNvbGUgb24gcGFuaWMgKi8KLQlwYW5pY19tb2RlID0gKm1vZGVzZXQ7Ci0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNlZCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicmVnaXN0ZXJlZCBwYW5pYyBub3RpZmllclxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogaW50IHJhZGVvbmZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKLQotCS8qIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBpbiB0aGUgbG93ZXIgbGV2ZWxzIG9mIGhlbGwgLSBkZWFsIHdpdGggaXQKLQkgICBoZXJlICovCi0KLQkvKiB0d28gbW9kZXMgOiBhKSAxIGZiIHRvIHJ1bGUgYWxsIGNydGNzLgotCSAgICAgICAgICAgICAgIGIpIG9uZSBmYiBwZXIgY3J0Yy4KLQkgICB0d28gYWN0aW9ucyAxKSBuZXcgY29ubmVjdGVkIGRldmljZQotCSAgICAgICAgICAgICAgIDIpIGRldmljZSByZW1vdmVkLgotCSAgIGNhc2UgYS8xIDogaWYgdGhlIGZiIHN1cmZhY2UgaXNuJ3QgYmlnIGVub3VnaCAtIHJlc2l6ZSB0aGUgc3VyZmFjZSBmYi4KLQkgICAgICAgICAgICAgIGlmIHRoZSBmYiBzaXplIGlzbid0IGJpZyBlbm91Z2ggLSByZXNpemUgZmIgaW50byBzdXJmYWNlLgotCQkgICAgICBpZiBldmVyeXRoaW5nIGJpZyBlbm91Z2ggY29uZmlndXJlIHRoZSBuZXcgY3J0Yy9ldGMuCi0JICAgY2FzZSBhLzIgOiB1bmRvIHRoZSBjb25maWd1cmF0aW9uCi0JICAgICAgICAgICAgICBwb3NzaWJseSByZXNpemUgZG93biB0aGUgZmIgdG8gZml0IHRoZSBuZXcgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgY2FzZSBiLzEgOiBzZWUgaWYgaXQgaXMgb24gYSBuZXcgY3J0YyAtIHNldHVwIGEgbmV3IGZiIGFuZCBhZGQgaXQuCi0JICAgY2FzZSBiLzIgOiB0ZWFyZG93biB0aGUgbmV3IGZiLgotCSovCi0JcmV0ID0gcmFkZW9uZmJfc2luZ2xlX2ZiX3Byb2JlKGRldi0+ZGV2X3ByaXZhdGUpOworCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgJnJhZGVvbmZiX2NyZWF0ZSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocmFkZW9uZmJfcHJvYmUpOwpAQCAtODgwLDE2ICszMDksMTcgQEAKIAl9CiAJaW5mbyA9IGZiLT5mYmRldjsKIAlpZiAoaW5mbykgeworCQlzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSAqcmZiZGV2ID0gaW5mby0+cGFyOwogCQlyb2JqID0gcmZiLT5vYmotPmRyaXZlcl9wcml2YXRlOwogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCQlyYWRlb25fb2JqZWN0X2t1bm1hcChyb2JqKTsKIAkJcmFkZW9uX29iamVjdF91bnBpbihyb2JqKTsKKwkJZHJtX2ZiX2hlbHBlcl9mcmVlKCZyZmJkZXYtPmhlbHBlcik7CiAJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAidW5yZWdpc3RlcmVkIHBhbmljIG5vdGlmaWVyXG4iKTsKLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOwotCW1lbXNldCgmcGFuaWNfbW9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9zZXQpKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChyYWRlb25mYl9yZW1vdmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKaW5kZXggYjRlNDhkZC4uM2JlYjI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCkBAIC01Myw5ICs1Myw5IEBACiAJCSAqIGF3YXkKIAkJICovCiAJCVdSRUczMihyZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcsIGZlbmNlLT5zZXEpOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXJhZGVvbl9mZW5jZV9yaW5nX2VtaXQocmRldiwgZmVuY2UpOwotCX0KKwogCWZlbmNlLT5lbWl0ZWQgPSB0cnVlOwogCWZlbmNlLT50aW1lb3V0ID0gamlmZmllcyArICgoMjAwMCAqIEhaKSAvIDEwMDApOwogCWxpc3RfZGVsKCZmZW5jZS0+bGlzdCk7CkBAIC0xNjgsNyArMTY4LDM4IEBACiAJcmV0dXJuIHNpZ25hbGVkOwogfQogCi1pbnQgcmFkZW9uX2ZlbmNlX3dhaXQoc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UsIGJvb2wgaW50ZXJydXB0aWJsZSkKK2ludCByNjAwX2ZlbmNlX3dhaXQoc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UsICBib29sIGludHIsIGJvb2wgbGF6eSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldjsKKwlpbnQgcmV0ID0gMDsKKworCXJkZXYgPSBmZW5jZS0+cmRldjsKKworCV9fc2V0X2N1cnJlbnRfc3RhdGUoaW50ciA/IFRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCXdoaWxlICgxKSB7CisJCWlmIChyYWRlb25fZmVuY2Vfc2lnbmFsZWQoZmVuY2UpKQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZmVuY2UtPnRpbWVvdXQpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsYXp5KQorCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKworCQlpZiAoaW50ciAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0KKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJldHVybiByZXQ7Cit9CisKKworaW50IHJhZGVvbl9mZW5jZV93YWl0KHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlLCBib29sIGludHIpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXY7CiAJdW5zaWduZWQgbG9uZyBjdXJfamlmZmllczsKQEAgLTE3Niw3ICsyMDcsNiBAQAogCWJvb2wgZXhwaXJlZCA9IGZhbHNlOwogCWludCByOwogCi0KIAlpZiAoZmVuY2UgPT0gTlVMTCkgewogCQlXQVJOKDEsICJRdWVyeWluZyBhbiBpbnZhbGlkIGZlbmNlIDogJXAgIVxuIiwgZmVuY2UpOwogCQlyZXR1cm4gMDsKQEAgLTE4NSwxMyArMjE1LDIyIEBACiAJaWYgKHJhZGVvbl9mZW5jZV9zaWduYWxlZChmZW5jZSkpIHsKIAkJcmV0dXJuIDA7CiAJfQorCisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKKwkJciA9IHI2MDBfZmVuY2Vfd2FpdChmZW5jZSwgaW50ciwgMCk7CisJCWlmIChyID09IC1FUkVTVEFSVFNZUykKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldHVybiByOworCX0KKwogcmV0cnk6CiAJY3VyX2ppZmZpZXMgPSBqaWZmaWVzOwogCXRpbWVvdXQgPSBIWiAvIDEwMDsKIAlpZiAodGltZV9hZnRlcihmZW5jZS0+dGltZW91dCwgY3VyX2ppZmZpZXMpKSB7CiAJCXRpbWVvdXQgPSBmZW5jZS0+dGltZW91dCAtIGN1cl9qaWZmaWVzOwogCX0KLQlpZiAoaW50ZXJydXB0aWJsZSkgeworCisJaWYgKGludHIpIHsKIAkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHJkZXYtPmZlbmNlX2Rydi5xdWV1ZSwKIAkJCQlyYWRlb25fZmVuY2Vfc2lnbmFsZWQoZmVuY2UpLCB0aW1lb3V0KTsKIAkJaWYgKHVubGlrZWx5KHIgPT0gLUVSRVNUQVJUU1lTKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCmluZGV4IDI5Nzc1MzkuLmE5MzFhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKQEAgLTc1LDcgKzc1LDYgQEAKIAogaW50IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fYWxsb2Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDY0X3QgZ3B1X2FkZHI7CiAJaW50IHI7CiAKIAlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmogPT0gTlVMTCkgewpAQCAtODgsNiArODcsMTQgQEAKIAkJCXJldHVybiByOwogCQl9CiAJfQorCXJldHVybiAwOworfQorCitpbnQgcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdWludDY0X3QgZ3B1X2FkZHI7CisJaW50IHI7CisKIAlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmosCiAJCQkgICAgICBSQURFT05fR0VNX0RPTUFJTl9WUkFNLCAmZ3B1X2FkZHIpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faW9jMzIuYwppbmRleCA1NmRlY2RhLi5hMWJmMTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMKQEAgLTQyMiwzICs0MjIsMTggQEAKIAogCXJldHVybiByZXQ7CiB9CisKK2xvbmcgcmFkZW9uX2ttc19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOworCWludCByZXQ7CisKKwlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFKQorCQlyZXR1cm4gZHJtX2NvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CisKKwlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KKwlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jCmluZGV4IDk4MzZjNzAuLmI3OWVjYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jCkBAIC0xODgsNiArMTg4LDkgQEAKIAl1MzIgc3RhdDsKIAl1MzIgcjUwMF9kaXNwX2ludDsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXJldHVybiBJUlFfTk9ORTsKKwogCS8qIE9ubHkgY29uc2lkZXIgdGhlIGJpdHMgd2UncmUgaW50ZXJlc3RlZCBpbiAtIG90aGVycyBjb3VsZCBiZSB1c2VkCiAJICogb3V0c2lkZSB0aGUgRFJNCiAJICovCkBAIC0yODYsNiArMjg5LDkgQEAKIAlkcm1fcmFkZW9uX2lycV9lbWl0X3QgKmVtaXQgPSBkYXRhOwogCWludCByZXN1bHQ7CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoIWRldl9wcml2KSB7CkBAIC0zMTUsNiArMzIxLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyZXR1cm4gcmFkZW9uX3dhaXRfaXJxKGRldiwgaXJxd2FpdC0+aXJxX3NlcSk7CiB9CiAKQEAgLTMyNiw2ICszMzUsOSBAQAogCSAgICAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgZHVtbXk7CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm47CisKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKQEAgLTM0NSw2ICszNTcsOSBAQAogCiAJZGV2LT5tYXhfdmJsYW5rX2NvdW50ID0gMHgwMDFmZmZmZjsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXJldHVybiAwOworCiAJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CiAKIAlyZXR1cm4gMDsKQEAgLTM1Nyw2ICszNzIsOSBAQAogCWlmICghZGV2X3ByaXYpCiAJCXJldHVybjsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXJldHVybjsKKwogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjAwKQogCQlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIDApOwogCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCmluZGV4IDk4MDVlNGIuLjE4NDExNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKLSNpbmNsdWRlICJyYWRlb25fbWljcm9jb2RlLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAiYXRvbS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCmluZGV4IGRjZTA5YWQuLjcwOWJkODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jCkBAIC01NCwxMiArNTQsMjMgQEAKIAkJZmxhZ3MgfD0gUkFERU9OX0lTX1BDSTsKIAl9CiAKKwkvKiByYWRlb25fZGV2aWNlX2luaXQgc2hvdWxkIHJlcG9ydCBvbmx5IGZhdGFsIGVycm9yCisJICogbGlrZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIG9yIGlvbWFwcGluZyBmYWlsdXJlLAorCSAqIG9yIG1lbW9yeSBtYW5hZ2VyIGluaXRpYWxpemF0aW9uIGZhaWx1cmUsIGl0IG11c3QKKwkgKiBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBHUFUgTUMgY29udHJvbGxlciBhbmQgcGVybWl0CisJICogVlJBTSBhbGxvY2F0aW9uCisJICovCiAJciA9IHJhZGVvbl9kZXZpY2VfaW5pdChyZGV2LCBkZXYsIGRldi0+cGRldiwgZmxhZ3MpOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgcmFkZW9uLCBkaXNhYmxpbmcgSU9DVExcbiIpOwotCQlyYWRlb25fZGV2aWNlX2ZpbmkocmRldik7Ci0JCWtmcmVlKHJkZXYpOwotCQlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKKwkJRFJNX0VSUk9SKCJGYXRhbCBlcnJvciB3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSByYWRlb24uXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCS8qIEFnYWluIG1vZGVzZXRfaW5pdCBzaG91bGQgZmFpbCBvbmx5IG9uIGZhdGFsIGVycm9yCisJICogb3RoZXJ3aXNlIGl0IHNob3VsZCBwcm92aWRlIGVub3VnaCBmdW5jdGlvbmFsaXRpZXMKKwkgKiBmb3Igc2hhZG93ZmIgdG8gcnVuCisJICovCisJciA9IHJhZGVvbl9tb2Rlc2V0X2luaXQocmRldik7CisJaWYgKHIpIHsKIAkJcmV0dXJuIHI7CiAJfQogCXJldHVybiAwOwpAQCAtNjksNiArODAsOSBAQAogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmIChyZGV2ID09IE5VTEwpCisJCXJldHVybiAwOworCXJhZGVvbl9tb2Rlc2V0X2ZpbmkocmRldik7CiAJcmFkZW9uX2RldmljZV9maW5pKHJkZXYpOwogCWtmcmVlKHJkZXYpOwogCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOwpAQCAtOTgsNiArMTEyLDkgQEAKIAljYXNlIFJBREVPTl9JTkZPX05VTV9aX1BJUEVTOgogCQl2YWx1ZSA9IHJkZXYtPm51bV96X3BpcGVzOwogCQlicmVhazsKKwljYXNlIFJBREVPTl9JTkZPX0FDQ0VMX1dPUktJTkc6CisJCXZhbHVlID0gcmRldi0+YWNjZWxfd29ya2luZzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0RFQlVHKCJJbnZhbGlkIHJlcXVlc3QgJWRcbiIsIGluZm8tPnJlcXVlc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IDBkYTcyZjEuLjJiOTk3YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+CiAjaW5jbHVkZSAicmFkZW9uX2ZpeGVkLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXRvbS5oIgogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3JteF9tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLApAQCAtMzQwLDYgKzM0MSw5IEBACiAJdWludDMyX3QgY3J0Y19waXRjaDsKIAogCXN3aXRjaCAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlmb3JtYXQgPSAyOworCQlicmVhazsKIAljYXNlIDE1OiAgICAgIC8qICA1NTUgKi8KIAkJZm9ybWF0ID0gMzsKIAkJYnJlYWs7CkBAIC00MDAsMTEgKzQwNCwzMyBAQAogCXVpbnQzMl90IGNydGNfb2Zmc2V0LCBjcnRjX29mZnNldF9jbnRsLCBjcnRjX3RpbGVfeDBfeTAgPSAwOwogCXVpbnQzMl90IGNydGNfcGl0Y2gsIHBpdGNoX3BpeGVsczsKIAl1aW50MzJfdCB0aWxpbmdfZmxhZ3M7CisJaW50IGZvcm1hdDsKKwl1aW50MzJfdCBnZW5fY250bF9yZWcsIGdlbl9jbnRsX3ZhbDsKIAogCURSTV9ERUJVRygiXG4iKTsKIAogCXJhZGVvbl9mYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CiAKKwlzd2l0Y2ggKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJZm9ybWF0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSAxNTogICAgICAvKiAgNTU1ICovCisJCWZvcm1hdCA9IDM7CisJCWJyZWFrOworCWNhc2UgMTY6ICAgICAgLyogIDU2NSAqLworCQlmb3JtYXQgPSA0OworCQlicmVhazsKKwljYXNlIDI0OiAgICAgIC8qICBSR0IgKi8KKwkJZm9ybWF0ID0gNTsKKwkJYnJlYWs7CisJY2FzZSAzMjogICAgICAvKiB4UkdCICovCisJCWZvcm1hdCA9IDY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAlvYmogPSByYWRlb25fZmItPm9iajsKIAlpZiAocmFkZW9uX2dlbV9vYmplY3RfcGluKG9iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwgJmJhc2UpKSB7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDU3LDYgKzQ4Myw5IEBACiAJfSBlbHNlIHsKIAkJaW50IG9mZnNldCA9IHkgKiBwaXRjaF9waXhlbHMgKyB4OwogCQlzd2l0Y2ggKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCkgeworCQljYXNlIDg6CisJCQlvZmZzZXQgKj0gMTsKKwkJCWJyZWFrOwogCQljYXNlIDE1OgogCQljYXNlIDE2OgogCQkJb2Zmc2V0ICo9IDI7CkBAIC00NzUsNiArNTA0LDE2IEBACiAKIAliYXNlICY9IH43OwogCisJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDEpCisJCWdlbl9jbnRsX3JlZyA9IFJBREVPTl9DUlRDMl9HRU5fQ05UTDsKKwllbHNlCisJCWdlbl9jbnRsX3JlZyA9IFJBREVPTl9DUlRDX0dFTl9DTlRMOworCisJZ2VuX2NudGxfdmFsID0gUlJFRzMyKGdlbl9jbnRsX3JlZyk7CisJZ2VuX2NudGxfdmFsICY9IH4oMHhmIDw8IDgpOworCWdlbl9jbnRsX3ZhbCB8PSAoZm9ybWF0IDw8IDgpOworCVdSRUczMihnZW5fY250bF9yZWcsIGdlbl9jbnRsX3ZhbCk7CisKIAljcnRjX29mZnNldCA9ICh1MzIpYmFzZTsKIAogCVdSRUczMihSQURFT05fRElTUExBWV9CQVNFX0FERFIgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIHJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHIpOwpAQCAtNTAxLDYgKzU0MCw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlpbnQgZm9ybWF0OwogCWludCBoc3luY19zdGFydDsKIAlpbnQgaHN5bmNfd2lkOwpAQCAtNTA5LDEwICs1NDksMjQgQEAKIAl1aW50MzJfdCBjcnRjX2hfc3luY19zdHJ0X3dpZDsKIAl1aW50MzJfdCBjcnRjX3ZfdG90YWxfZGlzcDsKIAl1aW50MzJfdCBjcnRjX3Zfc3luY19zdHJ0X3dpZDsKKwlib29sIGlzX3R2ID0gZmFsc2U7CiAKIAlEUk1fREVCVUcoIlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkgeworCQkJCWlzX3R2ID0gdHJ1ZTsKKwkJCQlEUk1fSU5GTygiY3J0YyAlZCBpcyBjb25uZWN0ZWQgdG8gYSBUVlxuIiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQogCiAJc3dpdGNoIChjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWZvcm1hdCA9IDI7CisJCWJyZWFrOwogCWNhc2UgMTU6ICAgICAgLyogIDU1NSAqLwogCQlmb3JtYXQgPSAzOwogCQlicmVhazsKQEAgLTY0Miw2ICs2OTYsMTEgQEAKIAkJV1JFRzMyKFJBREVPTl9DUlRDX0VYVF9DTlRMLCBjcnRjX2V4dF9jbnRsKTsKIAl9CiAKKwlpZiAoaXNfdHYpCisJCXJhZGVvbl9sZWdhY3lfdHZfYWRqdXN0X2NydGNfcmVnKGVuY29kZXIsICZjcnRjX2hfdG90YWxfZGlzcCwKKwkJCQkJCSAmY3J0Y19oX3N5bmNfc3RydF93aWQsICZjcnRjX3ZfdG90YWxfZGlzcCwKKwkJCQkJCSAmY3J0Y192X3N5bmNfc3RydF93aWQpOworCiAJV1JFRzMyKFJBREVPTl9DUlRDX0hfVE9UQUxfRElTUCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgY3J0Y19oX3RvdGFsX2Rpc3ApOwogCVdSRUczMihSQURFT05fQ1JUQ19IX1NZTkNfU1RSVF9XSUQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGNydGNfaF9zeW5jX3N0cnRfd2lkKTsKIAlXUkVHMzIoUkFERU9OX0NSVENfVl9UT1RBTF9ESVNQICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBjcnRjX3ZfdG90YWxfZGlzcCk7CkBAIC02NjgsNyArNzI3LDcgQEAKIAl1aW50MzJfdCBwbGxfcmVmX2RpdiA9IDA7CiAJdWludDMyX3QgcGxsX2ZiX3Bvc3RfZGl2ID0gMDsKIAl1aW50MzJfdCBodG90YWxfY250bCA9IDA7Ci0KKwlib29sIGlzX3R2ID0gZmFsc2U7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnBsbDsKIAogCXN0cnVjdCB7CkBAIC03MDMsNiArNzYyLDEzIEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSB7CisJCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisKKwkJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIEFUT01fREVWSUNFX1RWX1NVUFBPUlQpIHsKKwkJCQlpc190diA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgIT0gRFJNX01PREVfRU5DT0RFUl9EQUMpCiAJCQkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfTk9fT0REX1BPU1RfRElWOwogCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSA9PSBEUk1fTU9ERV9FTkNPREVSX0xWRFMpIHsKQEAgLTc2Niw2ICs4MzIsMTIgQEAKIAkJCQkJICB+KFJBREVPTl9QSVgyQ0xLX1NSQ19TRUxfTUFTSykpIHwKIAkJCQkJIFJBREVPTl9QSVgyQ0xLX1NSQ19TRUxfUDJQTExDTEspOwogCisJCWlmIChpc190dikgeworCQkJcmFkZW9uX2xlZ2FjeV90dl9hZGp1c3RfcGxsMihlbmNvZGVyLCAmaHRvdGFsX2NudGwsCisJCQkJCQkgICAgICZwbGxfcmVmX2RpdiwgJnBsbF9mYl9wb3N0X2RpdiwKKwkJCQkJCSAgICAgJnBpeGNsa3NfY250bCk7CisJCX0KKwogCQlXUkVHMzJfUExMX1AoUkFERU9OX1BJWENMS1NfQ05UTCwKIAkJCSAgICAgUkFERU9OX1BJWDJDTEtfU1JDX1NFTF9DUFVDTEssCiAJCQkgICAgIH4oUkFERU9OX1BJWDJDTEtfU1JDX1NFTF9NQVNLKSk7CkBAIC04MjAsNiArODkyLDE1IEBACiAKIAkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCBwaXhjbGtzX2NudGwpOwogCX0gZWxzZSB7CisJCXVpbnQzMl90IHBpeGNsa3NfY250bDsKKworCisJCWlmIChpc190dikgeworCQkJcGl4Y2xrc19jbnRsID0gUlJFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMKTsKKwkJCXJhZGVvbl9sZWdhY3lfdHZfYWRqdXN0X3BsbDEoZW5jb2RlciwgJmh0b3RhbF9jbnRsLCAmcGxsX3JlZl9kaXYsCisJCQkJCQkgICAgICZwbGxfZmJfcG9zdF9kaXYsICZwaXhjbGtzX2NudGwpOworCQl9CisKIAkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX01PQklMSVRZKSB7CiAJCQkvKiBBIHRlbXBvcmFsIHdvcmthcm91bmQgZm9yIHRoZSBvY2NhdGlvbmFsIGJsYW5raW5nIG9uIGNlcnRhaW4gbGFwdG9wIHBhbmVscy4KIAkJCSAgIFRoaXMgYXBwZWFycyB0byByZWxhdGVkIHRvIHRoZSBQTEwgZGl2aWRlciByZWdpc3RlcnMgKGZhaWwgdG8gbG9jaz8pLgpAQCAtOTE0LDYgKzk5NSw4IEBACiAJCQkgICAgIFJBREVPTl9WQ0xLX1NSQ19TRUxfUFBMTENMSywKIAkJCSAgICAgfihSQURFT05fVkNMS19TUkNfU0VMX01BU0spKTsKIAorCQlpZiAoaXNfdHYpCisJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHBpeGNsa3NfY250bCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCmluZGV4IDkzMjI2NzUuLmIxNTQ3ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCkBAIC0yOSw2ICsyOSwxNSBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKIAorc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2Z1bmNzOworCisJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCWVuY29kZXJfZnVuY3MtPmRwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCXJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlID0gMDsKK30KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9sdmRzX2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKIHsKQEAgLTk4LDYgKzEwNyw4IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X2x2ZHNfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisKKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9sdmRzX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0xOTUsNiArMjA2LDcgQEAKIAkucHJlcGFyZSA9IHJhZGVvbl9sZWdhY3lfbHZkc19wcmVwYXJlLAogCS5tb2RlX3NldCA9IHJhZGVvbl9sZWdhY3lfbHZkc19tb2RlX3NldCwKIAkuY29tbWl0ID0gcmFkZW9uX2xlZ2FjeV9sdmRzX2NvbW1pdCwKKwkuZGlzYWJsZSA9IHJhZGVvbl9sZWdhY3lfZW5jb2Rlcl9kaXNhYmxlLAogfTsKIAogCkBAIC0yNjAsNiArMjcyLDcgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTQwMiw2ICs0MTUsNyBAQAogCS5tb2RlX3NldCA9IHJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfbW9kZV9zZXQsCiAJLmNvbW1pdCA9IHJhZGVvbl9sZWdhY3lfcHJpbWFyeV9kYWNfY29tbWl0LAogCS5kZXRlY3QgPSByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2RldGVjdCwKKwkuZGlzYWJsZSA9IHJhZGVvbl9sZWdhY3lfZW5jb2Rlcl9kaXNhYmxlLAogfTsKIAogCkBAIC00NTQsNiArNDY4LDcgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdG1kc19pbnRfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTU2Niw2ICs1ODEsNyBAQAogCS5wcmVwYXJlID0gcmFkZW9uX2xlZ2FjeV90bWRzX2ludF9wcmVwYXJlLAogCS5tb2RlX3NldCA9IHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfbW9kZV9zZXQsCiAJLmNvbW1pdCA9IHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfY29tbWl0LAorCS5kaXNhYmxlID0gcmFkZW9uX2xlZ2FjeV9lbmNvZGVyX2Rpc2FibGUsCiB9OwogCiAKQEAgLTYyMCw2ICs2MzYsNyBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV90bWRzX2V4dF9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV90bWRzX2V4dF9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtNzA2LDYgKzcyMyw3IEBACiAJLnByZXBhcmUgPSByYWRlb25fbGVnYWN5X3RtZHNfZXh0X3ByZXBhcmUsCiAJLm1vZGVfc2V0ID0gcmFkZW9uX2xlZ2FjeV90bWRzX2V4dF9tb2RlX3NldCwKIAkuY29tbWl0ID0gcmFkZW9uX2xlZ2FjeV90bWRzX2V4dF9jb21taXQsCisJLmRpc2FibGUgPSByYWRlb25fbGVnYWN5X2VuY29kZXJfZGlzYWJsZSwKIH07CiAKIApAQCAtNzI3LDE3ICs3NDUsMjEgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJdWludDMyX3QgZnAyX2dlbl9jbnRsID0gMCwgY3J0YzJfZ2VuX2NudGwgPSAwLCB0dl9kYWNfY250bCA9IDA7Ci0JLyogdWludDMyX3QgdHZfbWFzdGVyX2NudGwgPSAwOyAqLwotCisJdWludDMyX3QgdHZfbWFzdGVyX2NudGwgPSAwOworCWJvb2wgaXNfdHY7CiAJRFJNX0RFQlVHKCJcbiIpOwogCisJaXNfdHYgPSByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIEFUT01fREVWSUNFX1RWX1NVUFBPUlQgPyB0cnVlIDogZmFsc2U7CisKIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkKIAkJZnAyX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9GUDJfR0VOX0NOVEwpOwogCWVsc2UgewotCQljcnRjMl9nZW5fY250bCA9IFJSRUczMihSQURFT05fQ1JUQzJfR0VOX0NOVEwpOwotCQkvKiAgRklYTUUgVFYgKi8KLQkJLyogdHZfbWFzdGVyX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX01BU1RFUl9DTlRMKTsgKi8KKwkJaWYgKGlzX3R2KQorCQkJdHZfbWFzdGVyX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX01BU1RFUl9DTlRMKTsKKwkJZWxzZQorCQkJY3J0YzJfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMKTsKIAkJdHZfZGFjX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKIAl9CiAKQEAgLTc0NiwyMCArNzY4LDIzIEBACiAJCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7CiAJCQlmcDJfZ2VuX2NudGwgfD0gKFJBREVPTl9GUDJfT04gfCBSQURFT05fRlAyX0RWT19FTik7CiAJCX0gZWxzZSB7Ci0JCQljcnRjMl9nZW5fY250bCB8PSBSQURFT05fQ1JUQzJfQ1JUMl9PTjsKLQkJCS8qIHR2X21hc3Rlcl9jbnRsIHw9IFJBREVPTl9UVl9PTjsgKi8KKwkJCWlmIChpc190dikKKwkJCQl0dl9tYXN0ZXJfY250bCB8PSBSQURFT05fVFZfT047CisJCQllbHNlCisJCQkJY3J0YzJfZ2VuX2NudGwgfD0gUkFERU9OX0NSVEMyX0NSVDJfT047CisKIAkJCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIwIHx8Ci0JCQkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMgfHwKLQkJCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUlY0MTApCisJCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUjQyMyB8fAorCQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwKQogCQkJCXR2X2RhY19jbnRsICY9IH4oUjQyMF9UVl9EQUNfUkRBQ1BEIHwKLQkJCQkJCVI0MjBfVFZfREFDX0dEQUNQRCB8Ci0JCQkJCQlSNDIwX1RWX0RBQ19CREFDUEQgfAotCQkJCQkJUkFERU9OX1RWX0RBQ19CR1NMRUVQKTsKKwkJCQkJCSBSNDIwX1RWX0RBQ19HREFDUEQgfAorCQkJCQkJIFI0MjBfVFZfREFDX0JEQUNQRCB8CisJCQkJCQkgUkFERU9OX1RWX0RBQ19CR1NMRUVQKTsKIAkJCWVsc2UKIAkJCQl0dl9kYWNfY250bCAmPSB+KFJBREVPTl9UVl9EQUNfUkRBQ1BEIHwKLQkJCQkJCVJBREVPTl9UVl9EQUNfR0RBQ1BEIHwKLQkJCQkJCVJBREVPTl9UVl9EQUNfQkRBQ1BEIHwKLQkJCQkJCVJBREVPTl9UVl9EQUNfQkdTTEVFUCk7CisJCQkJCQkgUkFERU9OX1RWX0RBQ19HREFDUEQgfAorCQkJCQkJIFJBREVPTl9UVl9EQUNfQkRBQ1BEIHwKKwkJCQkJCSBSQURFT05fVFZfREFDX0JHU0xFRVApOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOgpAQCAtNzY4LDggKzc5MywxMSBAQAogCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkKIAkJCWZwMl9nZW5fY250bCAmPSB+KFJBREVPTl9GUDJfT04gfCBSQURFT05fRlAyX0RWT19FTik7CiAJCWVsc2UgewotCQkJY3J0YzJfZ2VuX2NudGwgJj0gflJBREVPTl9DUlRDMl9DUlQyX09OOwotCQkJLyogdHZfbWFzdGVyX2NudGwgJj0gflJBREVPTl9UVl9PTjsgKi8KKwkJCWlmIChpc190dikKKwkJCQl0dl9tYXN0ZXJfY250bCAmPSB+UkFERU9OX1RWX09OOworCQkJZWxzZQorCQkJCWNydGMyX2dlbl9jbnRsICY9IH5SQURFT05fQ1JUQzJfQ1JUMl9PTjsKKwogCQkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjAgfHwKIAkJCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUjQyMyB8fAogCQkJCQlyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjQxMCkKQEAgLTc4OSw4ICs4MTcsMTAgQEAKIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkgewogCQlXUkVHMzIoUkFERU9OX0ZQMl9HRU5fQ05UTCwgZnAyX2dlbl9jbnRsKTsKIAl9IGVsc2UgewotCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLCBjcnRjMl9nZW5fY250bCk7Ci0JCS8qIFdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsIHR2X21hc3Rlcl9jbnRsKTsgKi8KKwkJaWYgKGlzX3R2KQorCQkJV1JFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCwgdHZfbWFzdGVyX2NudGwpOworCQllbHNlCisJCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLCBjcnRjMl9nZW5fY250bCk7CiAJCVdSRUczMihSQURFT05fVFZfREFDX0NOVEwsIHR2X2RhY19jbnRsKTsKIAl9CiAKQEAgLTgwOSw2ICs4MzksNyBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV90dl9kYWNfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdHZfZGFjX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC04MzEsMTEgKzg2MiwxNSBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKIAl1aW50MzJfdCB0dl9kYWNfY250bCwgZ3Bpb3BhZF9hID0gMCwgZGFjMl9jbnRsLCBkaXNwX291dHB1dF9jbnRsID0gMDsKLQl1aW50MzJfdCBkaXNwX2h3X2RlYnVnID0gMCwgZnAyX2dlbl9jbnRsID0gMDsKKwl1aW50MzJfdCBkaXNwX2h3X2RlYnVnID0gMCwgZnAyX2dlbl9jbnRsID0gMCwgZGlzcF90dl9vdXRfY250bCA9IDA7CisJYm9vbCBpc190diA9IGZhbHNlOwogCiAJRFJNX0RFQlVHKCJcbiIpOwogCisJaXNfdHYgPSByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIEFUT01fREVWSUNFX1RWX1NVUFBPUlQgPyB0cnVlIDogZmFsc2U7CisKIAlpZiAocmRldi0+ZmFtaWx5ICE9IENISVBfUjIwMCkgewogCQl0dl9kYWNfY250bCA9IFJSRUczMihSQURFT05fVFZfREFDX0NOVEwpOwogCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMCB8fApAQCAtODU4LDcgKzg5Myw3IEBACiAJCX0KIAogCQkvKiAgRklYTUUgVFYgKi8KLQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdikgeworCQlpZiAodHZfZGFjKSB7CiAJCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CiAJCQl0dl9kYWNfY250bCB8PSAoUkFERU9OX1RWX0RBQ19OQkxBTksgfAogCQkJCQlSQURFT05fVFZfREFDX05IT0xEIHwKQEAgLTg3NSw0NCArOTEwLDkzIEBACiAJaWYgKEFTSUNfSVNfUjMwMChyZGV2KSkgewogCQlncGlvcGFkX2EgPSBSUkVHMzIoUkFERU9OX0dQSU9QQURfQSkgfCAxOwogCQlkaXNwX291dHB1dF9jbnRsID0gUlJFRzMyKFJBREVPTl9ESVNQX09VVFBVVF9DTlRMKTsKLQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApCi0JCWZwMl9nZW5fY250bCA9IFJSRUczMihSQURFT05fRlAyX0dFTl9DTlRMKTsKKwl9CisKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCB8fCBBU0lDX0lTX1IzMDAocmRldikpCisJCWRpc3BfdHZfb3V0X2NudGwgPSBSUkVHMzIoUkFERU9OX0RJU1BfVFZfT1VUX0NOVEwpOwogCWVsc2UKIAkJZGlzcF9od19kZWJ1ZyA9IFJSRUczMihSQURFT05fRElTUF9IV19ERUJVRyk7CiAKLQlkYWMyX2NudGwgPSBSUkVHMzIoUkFERU9OX0RBQ19DTlRMMikgfCBSQURFT05fREFDMl9EQUMyX0NMS19TRUw7CisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApCisJCWZwMl9nZW5fY250bCA9IFJSRUczMihSQURFT05fRlAyX0dFTl9DTlRMKTsKIAotCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7Ci0JCWlmIChBU0lDX0lTX1IzMDAocmRldikpIHsKLQkJCWRpc3Bfb3V0cHV0X2NudGwgJj0gflJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9NQVNLOwotCQkJZGlzcF9vdXRwdXRfY250bCB8PSBSQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfQ1JUQzsKLQkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7Ci0JCQlmcDJfZ2VuX2NudGwgJj0gfihSMjAwX0ZQMl9TT1VSQ0VfU0VMX01BU0sgfAotCQkJCQkgIFJBREVPTl9GUDJfRFZPX1JBVEVfU0VMX1NEUik7Ci0JCX0gZWxzZQotCQkJZGlzcF9od19kZWJ1ZyB8PSBSQURFT05fQ1JUMl9ESVNQMV9TRUw7CisJaWYgKGlzX3R2KSB7CisJCXVpbnQzMl90IGRhY19jbnRsOworCisJCWRhY19jbnRsID0gUlJFRzMyKFJBREVPTl9EQUNfQ05UTCk7CisJCWRhY19jbnRsICY9IH5SQURFT05fREFDX1RWT19FTjsKKwkJV1JFRzMyKFJBREVPTl9EQUNfQ05UTCwgZGFjX2NudGwpOworCisJCWlmIChBU0lDX0lTX1IzMDAocmRldikpCisJCQlncGlvcGFkX2EgPSBSUkVHMzIoUkFERU9OX0dQSU9QQURfQSkgJiB+MTsKKworCQlkYWMyX2NudGwgPSBSUkVHMzIoUkFERU9OX0RBQ19DTlRMMikgJiB+UkFERU9OX0RBQzJfREFDMl9DTEtfU0VMOworCQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgeworCQkJaWYgKEFTSUNfSVNfUjMwMChyZGV2KSkgeworCQkJCWRpc3Bfb3V0cHV0X2NudGwgJj0gflJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9NQVNLOworCQkJCWRpc3Bfb3V0cHV0X2NudGwgfD0gKFJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9DUlRDIHwKKwkJCQkJCSAgICAgUkFERU9OX0RJU1BfVFZfU09VUkNFX0NSVEMpOworCQkJfQorCQkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1IyMDApIHsKKwkJCQlkaXNwX3R2X291dF9jbnRsICY9IH5SQURFT05fRElTUF9UVl9QQVRIX1NSQ19DUlRDMjsKKwkJCX0gZWxzZSB7CisJCQkJZGlzcF9od19kZWJ1ZyB8PSBSQURFT05fQ1JUMl9ESVNQMV9TRUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoQVNJQ19JU19SMzAwKHJkZXYpKSB7CisJCQkJZGlzcF9vdXRwdXRfY250bCAmPSB+UkFERU9OX0RJU1BfVFZEQUNfU09VUkNFX01BU0s7CisJCQkJZGlzcF9vdXRwdXRfY250bCB8PSBSQURFT05fRElTUF9UVl9TT1VSQ0VfQ1JUQzsKKwkJCX0KKwkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SMjAwKSB7CisJCQkJZGlzcF90dl9vdXRfY250bCB8PSBSQURFT05fRElTUF9UVl9QQVRIX1NSQ19DUlRDMjsKKwkJCX0gZWxzZSB7CisJCQkJZGlzcF9od19kZWJ1ZyAmPSB+UkFERU9OX0NSVDJfRElTUDFfU0VMOworCQkJfQorCQl9CisJCVdSRUczMihSQURFT05fREFDX0NOVEwyLCBkYWMyX2NudGwpOwogCX0gZWxzZSB7Ci0JCWlmIChBU0lDX0lTX1IzMDAocmRldikpIHsKLQkJCWRpc3Bfb3V0cHV0X2NudGwgJj0gflJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9NQVNLOwotCQkJZGlzcF9vdXRwdXRfY250bCB8PSBSQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfQ1JUQzI7Ci0JCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkgewotCQkJZnAyX2dlbl9jbnRsICY9IH4oUjIwMF9GUDJfU09VUkNFX1NFTF9NQVNLIHwKLQkJCQkJICBSQURFT05fRlAyX0RWT19SQVRFX1NFTF9TRFIpOwotCQkJZnAyX2dlbl9jbnRsIHw9IFIyMDBfRlAyX1NPVVJDRV9TRUxfQ1JUQzI7Ci0JCX0gZWxzZQotCQkJZGlzcF9od19kZWJ1ZyAmPSB+UkFERU9OX0NSVDJfRElTUDFfU0VMOwotCX0KIAotCVdSRUczMihSQURFT05fREFDX0NOVEwyLCBkYWMyX2NudGwpOworCQlkYWMyX2NudGwgPSBSUkVHMzIoUkFERU9OX0RBQ19DTlRMMikgfCBSQURFT05fREFDMl9EQUMyX0NMS19TRUw7CisKKwkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApIHsKKwkJCWlmIChBU0lDX0lTX1IzMDAocmRldikpIHsKKwkJCQlkaXNwX291dHB1dF9jbnRsICY9IH5SQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfTUFTSzsKKwkJCQlkaXNwX291dHB1dF9jbnRsIHw9IFJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9DUlRDOworCQkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7CisJCQkJZnAyX2dlbl9jbnRsICY9IH4oUjIwMF9GUDJfU09VUkNFX1NFTF9NQVNLIHwKKwkJCQkJCSAgUkFERU9OX0ZQMl9EVk9fUkFURV9TRUxfU0RSKTsKKwkJCX0gZWxzZQorCQkJCWRpc3BfaHdfZGVidWcgfD0gUkFERU9OX0NSVDJfRElTUDFfU0VMOworCQl9IGVsc2UgeworCQkJaWYgKEFTSUNfSVNfUjMwMChyZGV2KSkgeworCQkJCWRpc3Bfb3V0cHV0X2NudGwgJj0gflJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9NQVNLOworCQkJCWRpc3Bfb3V0cHV0X2NudGwgfD0gUkFERU9OX0RJU1BfVFZEQUNfU09VUkNFX0NSVEMyOworCQkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7CisJCQkJZnAyX2dlbl9jbnRsICY9IH4oUjIwMF9GUDJfU09VUkNFX1NFTF9NQVNLIHwKKwkJCQkJCSAgUkFERU9OX0ZQMl9EVk9fUkFURV9TRUxfU0RSKTsKKwkJCQlmcDJfZ2VuX2NudGwgfD0gUjIwMF9GUDJfU09VUkNFX1NFTF9DUlRDMjsKKwkJCX0gZWxzZQorCQkJCWRpc3BfaHdfZGVidWcgJj0gflJBREVPTl9DUlQyX0RJU1AxX1NFTDsKKwkJfQorCQlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgZGFjMl9jbnRsKTsKKwl9CiAKIAlpZiAoQVNJQ19JU19SMzAwKHJkZXYpKSB7CiAJCVdSRUczMl9QKFJBREVPTl9HUElPUEFEX0EsIGdwaW9wYWRfYSwgfjEpOwotCQlXUkVHMzIoUkFERU9OX0RJU1BfVFZfT1VUX0NOVEwsIGRpc3Bfb3V0cHV0X2NudGwpOwotCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkKLQkJV1JFRzMyKFJBREVPTl9GUDJfR0VOX0NOVEwsIGZwMl9nZW5fY250bCk7CisJCVdSRUczMihSQURFT05fRElTUF9PVVRQVVRfQ05UTCwgZGlzcF9vdXRwdXRfY250bCk7CisJfQorCisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1IyMDApCisJCVdSRUczMihSQURFT05fRElTUF9UVl9PVVRfQ05UTCwgZGlzcF90dl9vdXRfY250bCk7CiAJZWxzZQogCQlXUkVHMzIoUkFERU9OX0RJU1BfSFdfREVCVUcsIGRpc3BfaHdfZGVidWcpOwogCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1IyMDApCisJCVdSRUczMihSQURFT05fRlAyX0dFTl9DTlRMLCBmcDJfZ2VuX2NudGwpOworCisJaWYgKGlzX3R2KQorCQlyYWRlb25fbGVnYWN5X3R2X21vZGVfc2V0KGVuY29kZXIsIG1vZGUsIGFkanVzdGVkX21vZGUpOworCiAJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykKIAkJcmFkZW9uX2F0b21iaW9zX2VuY29kZXJfY3J0Y19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgcmFkZW9uX2NydGMtPmNydGNfaWQpOwogCWVsc2UKQEAgLTkyMCw2ICsxMDA0LDE0MSBAQAogCiB9CiAKK3N0YXRpYyBib29sIHIzMDBfbGVnYWN5X3R2X2RldGVjdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGNydGMyX2dlbl9jbnRsLCB0dl9kYWNfY250bCwgZGFjX2NudGwyLCBkYWNfZXh0X2NudGw7CisJdWludDMyX3QgZGlzcF9vdXRwdXRfY250bCwgZ3Bpb3BhZF9hLCB0bXA7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJLyogc2F2ZSByZWdzIG5lZWRlZCAqLworCWdwaW9wYWRfYSA9IFJSRUczMihSQURFT05fR1BJT1BBRF9BKTsKKwlkYWNfY250bDIgPSBSUkVHMzIoUkFERU9OX0RBQ19DTlRMMik7CisJY3J0YzJfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMKTsKKwlkYWNfZXh0X2NudGwgPSBSUkVHMzIoUkFERU9OX0RBQ19FWFRfQ05UTCk7CisJdHZfZGFjX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKKwlkaXNwX291dHB1dF9jbnRsID0gUlJFRzMyKFJBREVPTl9ESVNQX09VVFBVVF9DTlRMKTsKKworCVdSRUczMl9QKFJBREVPTl9HUElPUEFEX0EsIDAsIH4xKTsKKworCVdSRUczMihSQURFT05fREFDX0NOVEwyLCBSQURFT05fREFDMl9EQUMyX0NMS19TRUwpOworCisJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwKKwkgICAgICAgUkFERU9OX0NSVEMyX0NSVDJfT04gfCBSQURFT05fQ1JUQzJfVlNZTkNfVFJJU1RBVCk7CisKKwl0bXAgPSBkaXNwX291dHB1dF9jbnRsICYgflJBREVPTl9ESVNQX1RWREFDX1NPVVJDRV9NQVNLOworCXRtcCB8PSBSQURFT05fRElTUF9UVkRBQ19TT1VSQ0VfQ1JUQzI7CisJV1JFRzMyKFJBREVPTl9ESVNQX09VVFBVVF9DTlRMLCB0bXApOworCisJV1JFRzMyKFJBREVPTl9EQUNfRVhUX0NOVEwsCisJICAgICAgIFJBREVPTl9EQUMyX0ZPUkNFX0JMQU5LX09GRl9FTiB8CisJICAgICAgIFJBREVPTl9EQUMyX0ZPUkNFX0RBVEFfRU4gfAorCSAgICAgICBSQURFT05fREFDX0ZPUkNFX0RBVEFfU0VMX1JHQiB8CisJICAgICAgICgweGVjIDw8IFJBREVPTl9EQUNfRk9SQ0VfREFUQV9TSElGVCkpOworCisJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwKKwkgICAgICAgUkFERU9OX1RWX0RBQ19TVERfTlRTQyB8CisJICAgICAgICg4IDw8IFJBREVPTl9UVl9EQUNfQkdBREpfU0hJRlQpIHwKKwkgICAgICAgKDYgPDwgUkFERU9OX1RWX0RBQ19EQUNBREpfU0hJRlQpKTsKKworCVJSRUczMihSQURFT05fVFZfREFDX0NOVEwpOworCW1kZWxheSg0KTsKKworCVdSRUczMihSQURFT05fVFZfREFDX0NOVEwsCisJICAgICAgIFJBREVPTl9UVl9EQUNfTkJMQU5LIHwKKwkgICAgICAgUkFERU9OX1RWX0RBQ19OSE9MRCB8CisJICAgICAgIFJBREVPTl9UVl9NT05JVE9SX0RFVEVDVF9FTiB8CisJICAgICAgIFJBREVPTl9UVl9EQUNfU1REX05UU0MgfAorCSAgICAgICAoOCA8PCBSQURFT05fVFZfREFDX0JHQURKX1NISUZUKSB8CisJICAgICAgICg2IDw8IFJBREVPTl9UVl9EQUNfREFDQURKX1NISUZUKSk7CisKKwlSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKKwltZGVsYXkoNik7CisKKwl0bXAgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKKwlpZiAoKHRtcCAmIFJBREVPTl9UVl9EQUNfR0RBQ0RFVCkgIT0gMCkgeworCQlmb3VuZCA9IHRydWU7CisJCURSTV9ERUJVRygiUy12aWRlbyBUViBjb25uZWN0aW9uIGRldGVjdGVkXG4iKTsKKwl9IGVsc2UgaWYgKCh0bXAgJiBSQURFT05fVFZfREFDX0JEQUNERVQpICE9IDApIHsKKwkJZm91bmQgPSB0cnVlOworCQlEUk1fREVCVUcoIkNvbXBvc2l0ZSBUViBjb25uZWN0aW9uIGRldGVjdGVkXG4iKTsKKwl9CisKKwlXUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMLCB0dl9kYWNfY250bCk7CisJV1JFRzMyKFJBREVPTl9EQUNfRVhUX0NOVEwsIGRhY19leHRfY250bCk7CisJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOworCVdSRUczMihSQURFT05fRElTUF9PVVRQVVRfQ05UTCwgZGlzcF9vdXRwdXRfY250bCk7CisJV1JFRzMyKFJBREVPTl9EQUNfQ05UTDIsIGRhY19jbnRsMik7CisJV1JFRzMyX1AoUkFERU9OX0dQSU9QQURfQSwgZ3Bpb3BhZF9hLCB+MSk7CisJcmV0dXJuIGZvdW5kOworfQorCitzdGF0aWMgYm9vbCByYWRlb25fbGVnYWN5X3R2X2RldGVjdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgdHZfZGFjX2NudGwsIGRhY19jbnRsMjsKKwl1aW50MzJfdCBjb25maWdfY250bCwgdHZfcHJlX2RhY19tdXhfY250bCwgdHZfbWFzdGVyX2NudGwsIHRtcDsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlpZiAoQVNJQ19JU19SMzAwKHJkZXYpKQorCQlyZXR1cm4gcjMwMF9sZWdhY3lfdHZfZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3Rvcik7CisKKwlkYWNfY250bDIgPSBSUkVHMzIoUkFERU9OX0RBQ19DTlRMMik7CisJdHZfbWFzdGVyX2NudGwgPSBSUkVHMzIoUkFERU9OX1RWX01BU1RFUl9DTlRMKTsKKwl0dl9kYWNfY250bCA9IFJSRUczMihSQURFT05fVFZfREFDX0NOVEwpOworCWNvbmZpZ19jbnRsID0gUlJFRzMyKFJBREVPTl9DT05GSUdfQ05UTCk7CisJdHZfcHJlX2RhY19tdXhfY250bCA9IFJSRUczMihSQURFT05fVFZfUFJFX0RBQ19NVVhfQ05UTCk7CisKKwl0bXAgPSBkYWNfY250bDIgJiB+UkFERU9OX0RBQzJfREFDMl9DTEtfU0VMOworCVdSRUczMihSQURFT05fREFDX0NOVEwyLCB0bXApOworCisJdG1wID0gdHZfbWFzdGVyX2NudGwgfCBSQURFT05fVFZfT047CisJdG1wICY9IH4oUkFERU9OX1RWX0FTWU5DX1JTVCB8CisJCSBSQURFT05fUkVTVEFSVF9QSEFTRV9GSVggfAorCQkgUkFERU9OX0NSVF9GSUZPX0NFX0VOIHwKKwkJIFJBREVPTl9UVl9GSUZPX0NFX0VOIHwKKwkJIFJBREVPTl9SRV9TWU5DX05PV19TRUxfTUFTSyk7CisJdG1wIHw9IFJBREVPTl9UVl9GSUZPX0FTWU5DX1JTVCB8IFJBREVPTl9DUlRfQVNZTkNfUlNUOworCVdSRUczMihSQURFT05fVFZfTUFTVEVSX0NOVEwsIHRtcCk7CisKKwl0bXAgPSBSQURFT05fVFZfREFDX05CTEFOSyB8IFJBREVPTl9UVl9EQUNfTkhPTEQgfAorCQlSQURFT05fVFZfTU9OSVRPUl9ERVRFQ1RfRU4gfCBSQURFT05fVFZfREFDX1NURF9OVFNDIHwKKwkJKDggPDwgUkFERU9OX1RWX0RBQ19CR0FESl9TSElGVCk7CisKKwlpZiAoY29uZmlnX2NudGwgJiBSQURFT05fQ0ZHX0FUSV9SRVZfSURfTUFTSykKKwkJdG1wIHw9ICg0IDw8IFJBREVPTl9UVl9EQUNfREFDQURKX1NISUZUKTsKKwllbHNlCisJCXRtcCB8PSAoOCA8PCBSQURFT05fVFZfREFDX0RBQ0FESl9TSElGVCk7CisJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdG1wKTsKKworCXRtcCA9IFJBREVPTl9DX0dSTl9FTiB8IFJBREVPTl9DTVBfQkxVX0VOIHwKKwkJUkFERU9OX1JFRF9NWF9GT1JDRV9EQUNfREFUQSB8CisJCVJBREVPTl9HUk5fTVhfRk9SQ0VfREFDX0RBVEEgfAorCQlSQURFT05fQkxVX01YX0ZPUkNFX0RBQ19EQVRBIHwKKwkJKDB4MTA5IDw8IFJBREVPTl9UVl9GT1JDRV9EQUNfREFUQV9TSElGVCk7CisJV1JFRzMyKFJBREVPTl9UVl9QUkVfREFDX01VWF9DTlRMLCB0bXApOworCisJbWRlbGF5KDMpOworCXRtcCA9IFJSRUczMihSQURFT05fVFZfREFDX0NOVEwpOworCWlmICh0bXAgJiBSQURFT05fVFZfREFDX0dEQUNERVQpIHsKKwkJZm91bmQgPSB0cnVlOworCQlEUk1fREVCVUcoIlMtdmlkZW8gVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CisJfSBlbHNlIGlmICgodG1wICYgUkFERU9OX1RWX0RBQ19CREFDREVUKSAhPSAwKSB7CisJCWZvdW5kID0gdHJ1ZTsKKwkJRFJNX0RFQlVHKCJDb21wb3NpdGUgVFYgY29ubmVjdGlvbiBkZXRlY3RlZFxuIik7CisJfQorCisJV1JFRzMyKFJBREVPTl9UVl9QUkVfREFDX01VWF9DTlRMLCB0dl9wcmVfZGFjX211eF9jbnRsKTsKKwlXUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMLCB0dl9kYWNfY250bCk7CisJV1JFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCwgdHZfbWFzdGVyX2NudGwpOworCVdSRUczMihSQURFT05fREFDX0NOVEwyLCBkYWNfY250bDIpOworCXJldHVybiBmb3VuZDsKK30KKwogc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgcmFkZW9uX2xlZ2FjeV90dl9kYWNfZGV0ZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCQkJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CkBAIC05MjgsOSArMTE0NywyOSBAQAogCXVpbnQzMl90IGNydGMyX2dlbl9jbnRsLCB0dl9kYWNfY250bCwgZGFjX2NudGwyLCBkYWNfZXh0X2NudGw7CiAJdWludDMyX3QgZGlzcF9od19kZWJ1ZywgZGlzcF9vdXRwdXRfY250bCwgZ3Bpb3BhZF9hLCBwaXhjbGtzX2NudGwsIHRtcDsKIAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGZvdW5kID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKIAlib29sIGNvbG9yID0gdHJ1ZTsKIAotCS8qICBGSVhNRSB0diAqLworCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8gfHwKKwkgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlIHx8CisJICAgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU4pIHsKKwkJYm9vbCB0dl9kZXRlY3Q7CisKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYmICEocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiBBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCQl0dl9kZXRlY3QgPSByYWRlb25fbGVnYWN5X3R2X2RldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOworCQlpZiAodHZfZGV0ZWN0ICYmIHR2X2RhYykKKwkJCWZvdW5kID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCXJldHVybiBmb3VuZDsKKwl9CisKKwkvKiBkb24ndCBwcm9iZSBpZiB0aGUgZW5jb2RlciBpcyBiZWluZyB1c2VkIGZvciBzb21ldGhpbmcgZWxzZSBub3QgQ1JUIHJlbGF0ZWQgKi8KKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiYgIShyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkgeworCQlEUk1fSU5GTygibm90IGRldGVjdGluZyBkdWUgdG8gJTA4eFxuIiwgcmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UpOworCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJfQogCiAJLyogc2F2ZSB0aGUgcmVncyB3ZSBuZWVkICovCiAJcGl4Y2xrc19jbnRsID0gUlJFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMKTsKQEAgLTEwMTMsOCArMTI1Miw3IEBACiAJfQogCVdSRUczMl9QTEwoUkFERU9OX1BJWENMS1NfQ05UTCwgcGl4Y2xrc19jbnRsKTsKIAotCS8qIHJldHVybiBmb3VuZDsgKi8KLQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJcmV0dXJuIGZvdW5kOwogCiB9CiAKQEAgLTEwMjUsNiArMTI2Myw3IEBACiAJLm1vZGVfc2V0ID0gcmFkZW9uX2xlZ2FjeV90dl9kYWNfbW9kZV9zZXQsCiAJLmNvbW1pdCA9IHJhZGVvbl9sZWdhY3lfdHZfZGFjX2NvbW1pdCwKIAkuZGV0ZWN0ID0gcmFkZW9uX2xlZ2FjeV90dl9kYWNfZGV0ZWN0LAorCS5kaXNhYmxlID0gcmFkZW9uX2xlZ2FjeV9lbmNvZGVyX2Rpc2FibGUsCiB9OwogCiAKQEAgLTEwMzIsNiArMTI3MSwzMCBAQAogCS5kZXN0cm95ID0gcmFkZW9uX2VuY19kZXN0cm95LAogfTsKIAorCitzdGF0aWMgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICpyYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzID0gTlVMTDsKKwlib29sIHJldDsKKworCXRtZHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMpLCBHRlBfS0VSTkVMKTsKKworCWlmICghdG1kcykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKQorCQlyZXQgPSByYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhlbmNvZGVyLCB0bWRzKTsKKwllbHNlCisJCXJldCA9IHJhZGVvbl9sZWdhY3lfZ2V0X3RtZHNfaW5mb19mcm9tX2NvbWJpb3MoZW5jb2RlciwgdG1kcyk7CisKKwlpZiAocmV0ID09IGZhbHNlKQorCQlyYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV90YWJsZShlbmNvZGVyLCB0bWRzKTsKKworCXJldHVybiB0bWRzOworfQorCiB2b2lkCiByYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGVuY29kZXJfaWQsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UpCiB7CkBAIC0xMDc4LDEwICsxMzQxLDcgQEAKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1RNRFMxOgogCQlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnJhZGVvbl9sZWdhY3lfdG1kc19pbnRfZW5jX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOwogCQlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZyYWRlb25fbGVnYWN5X3RtZHNfaW50X2hlbHBlcl9mdW5jcyk7Ci0JCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCi0JCQlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSByYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhyYWRlb25fZW5jb2Rlcik7Ci0JCWVsc2UKLQkJCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IHJhZGVvbl9jb21iaW9zX2dldF90bWRzX2luZm8ocmFkZW9uX2VuY29kZXIpOworCQlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSByYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm8ocmFkZW9uX2VuY29kZXIpOwogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CiAJCWRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmcmFkZW9uX2xlZ2FjeV9wcmltYXJ5X2RhY19lbmNfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfREFDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV90di5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X3R2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExMmJiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV90di5jCkBAIC0wLDAgKzEsOTA0IEBACisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorI2luY2x1ZGUgInJhZGVvbi5oIgorCisvKgorICogSW50ZWdyYXRlZCBUViBvdXQgc3VwcG9ydCBiYXNlZCBvbiB0aGUgR0FUT1MgY29kZSBieQorICogRmVkZXJpY28gVWxpdmkgPGZ1bGl2aUBseWNvcy5jb20+CisgKi8KKworCisvKgorICogTGltaXRzIG9mIGgvdiBwb3NpdGlvbnMgKGhQb3MgJiB2UG9zKQorICovCisjZGVmaW5lIE1BWF9IX1BPU0lUSU9OIDUgLyogUmFuZ2U6IFstNS4uNV0sIG5lZ2F0aXZlIGlzIG9uIHRoZSBsZWZ0LCAwIGlzIGRlZmF1bHQsIHBvc2l0aXZlIGlzIG9uIHRoZSByaWdodCAqLworI2RlZmluZSBNQVhfVl9QT1NJVElPTiA1IC8qIFJhbmdlOiBbLTUuLjVdLCBuZWdhdGl2ZSBpcyB1cCwgMCBpcyBkZWZhdWx0LCBwb3NpdGl2ZSBpcyBkb3duICovCisKKy8qCisgKiBVbml0IGZvciBoUG9zIChpbiBUViBjbG9jayBwZXJpb2RzKQorICovCisjZGVmaW5lIEhfUE9TX1VOSVQgMTAKKworLyoKKyAqIEluZGV4ZXMgaW4gaC4gY29kZSB0aW1pbmcgdGFibGUgZm9yIGhvcml6b250YWwgbGluZSBwb3NpdGlvbiBhZGp1c3RtZW50CisgKi8KKyNkZWZpbmUgSF9UQUJMRV9QT1MxIDYKKyNkZWZpbmUgSF9UQUJMRV9QT1MyIDgKKworLyoKKyAqIExpbWl0cyBvZiBob3IuIHNpemUgKGhTaXplKQorICovCisjZGVmaW5lIE1BWF9IX1NJWkUgNSAvKiBSYW5nZTogWy01Li41XSwgbmVnYXRpdmUgaXMgc21hbGxlciwgcG9zaXRpdmUgaXMgbGFyZ2VyICovCisKKy8qIHR2IHN0YW5kYXJkIGNvbnN0YW50cyAqLworI2RlZmluZSBOVFNDX1RWX0NMT0NLX1QgMjMzCisjZGVmaW5lIE5UU0NfVFZfVkZUT1RBTCAxCisjZGVmaW5lIE5UU0NfVFZfTElORVNfUEVSX0ZSQU1FIDUyNQorI2RlZmluZSBOVFNDX1RWX1pFUk9fSF9TSVpFIDQ3OTE2NgorI2RlZmluZSBOVFNDX1RWX0hfU0laRV9VTklUIDk0NzgKKworI2RlZmluZSBQQUxfVFZfQ0xPQ0tfVCAxODgKKyNkZWZpbmUgUEFMX1RWX1ZGVE9UQUwgMworI2RlZmluZSBQQUxfVFZfTElORVNfUEVSX0ZSQU1FIDYyNQorI2RlZmluZSBQQUxfVFZfWkVST19IX1NJWkUgNDczMjAwCisjZGVmaW5lIFBBTF9UVl9IX1NJWkVfVU5JVCA5MzYwCisKKy8qIHR2IHBsbCBzZXR0aW5nIGZvciAyNyBtaHogcmVmIGNsayAqLworI2RlZmluZSBOVFNDX1RWX1BMTF9NXzI3IDIyCisjZGVmaW5lIE5UU0NfVFZfUExMX05fMjcgMTc1CisjZGVmaW5lIE5UU0NfVFZfUExMX1BfMjcgNQorCisjZGVmaW5lIFBBTF9UVl9QTExfTV8yNyAxMTMKKyNkZWZpbmUgUEFMX1RWX1BMTF9OXzI3IDY2OAorI2RlZmluZSBQQUxfVFZfUExMX1BfMjcgMworCisvKiB0diBwbGwgc2V0dGluZyBmb3IgMTQgbWh6IHJlZiBjbGsgKi8KKyNkZWZpbmUgTlRTQ19UVl9QTExfTV8xNCAzMworI2RlZmluZSBOVFNDX1RWX1BMTF9OXzE0IDY5MworI2RlZmluZSBOVFNDX1RWX1BMTF9QXzE0IDcKKworI2RlZmluZSBWRVJUX0xFQURfSU5fTElORVMgMgorI2RlZmluZSBGUkFDX0JJVFMgMHhlCisjZGVmaW5lIEZSQUNfTUFTSyAweDNmZmYKKworc3RydWN0IHJhZGVvbl90dl9tb2RlX2NvbnN0YW50cyB7CisJdWludDE2X3QgaG9yX3Jlc29sdXRpb247CisJdWludDE2X3QgdmVyX3Jlc29sdXRpb247CisJZW51bSByYWRlb25fdHZfc3RkIHN0YW5kYXJkOworCXVpbnQxNl90IGhvcl90b3RhbDsKKwl1aW50MTZfdCB2ZXJfdG90YWw7CisJdWludDE2X3QgaG9yX3N0YXJ0OworCXVpbnQxNl90IGhvcl9zeW5jc3RhcnQ7CisJdWludDE2X3QgdmVyX3N5bmNzdGFydDsKKwl1bnNpZ25lZCBkZWZfcmVzdGFydDsKKwl1aW50MTZfdCBjcnRjUExMX047CisJdWludDhfdCAgY3J0Y1BMTF9NOworCXVpbnQ4X3QgIGNydGNQTExfcG9zdF9kaXY7CisJdW5zaWduZWQgcGl4X3RvX3R2OworfTsKKworc3RhdGljIGNvbnN0IHVpbnQxNl90IGhvcl90aW1pbmdfTlRTQ1tdID0geworCTB4MDAwNywKKwkweDAwM2YsCisJMHgwMjYzLAorCTB4MGEyNCwKKwkweDJhNmIsCisJMHgwYTM2LAorCTB4MTI2ZCwgLyogSF9UQUJMRV9QT1MxICovCisJMHgxYmZlLAorCTB4MWE4ZiwgLyogSF9UQUJMRV9QT1MyICovCisJMHgxZWM3LAorCTB4Mzg2MywKKwkweDFiZmUsCisJMHgxYmZlLAorCTB4MWEyYSwKKwkweDFlOTUsCisJMHgwZTMxLAorCTB4MjAxYiwKKwkwCit9OworCitzdGF0aWMgY29uc3QgdWludDE2X3QgdmVydF90aW1pbmdfTlRTQ1tdID0geworCTB4MjAwMSwKKwkweDIwMGQsCisJMHgxMDA2LAorCTB4MGMwNiwKKwkweDEwMDYsCisJMHgxODE4LAorCTB4MjFlMywKKwkweDEwMDYsCisJMHgwYzA2LAorCTB4MTAwNiwKKwkweDE4MTcsCisJMHgyMWQ0LAorCTB4MDAwMiwKKwkwCit9OworCitzdGF0aWMgY29uc3QgdWludDE2X3QgaG9yX3RpbWluZ19QQUxbXSA9IHsKKwkweDAwMDcsCisJMHgwMDU4LAorCTB4MDI3YywKKwkweDBhMzEsCisJMHgyYTc3LAorCTB4MGE5NSwKKwkweDEyNGYsIC8qIEhfVEFCTEVfUE9TMSAqLworCTB4MWJmZSwKKwkweDFiMjIsIC8qIEhfVEFCTEVfUE9TMiAqLworCTB4MWVmOSwKKwkweDM4N2MsCisJMHgxYmZlLAorCTB4MWJmZSwKKwkweDFiMzEsCisJMHgxZWI1LAorCTB4MGU0MywKKwkweDIwMWIsCisJMAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQxNl90IHZlcnRfdGltaW5nX1BBTFtdID0gCXsKKwkweDIwMDEsCisJMHgyMDBjLAorCTB4MTAwNSwKKwkweDBjMDUsCisJMHgxMDA1LAorCTB4MTQwMSwKKwkweDE4MjEsCisJMHgyMjQwLAorCTB4MTAwNSwKKwkweDBjMDUsCisJMHgxMDA1LAorCTB4MTQwMSwKKwkweDE4MjIsCisJMHgyMjMwLAorCTB4MDAwMiwKKwkwCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGF2YWlsYWJsZU1vZGVzCisgKgorICogVGFibGUgb2YgYWxsIGFsbG93ZWQgbW9kZXMgZm9yIHR2IG91dHB1dAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IHN0cnVjdCByYWRlb25fdHZfbW9kZV9jb25zdGFudHMgYXZhaWxhYmxlX3R2X21vZGVzW10gPSB7CisJeyAgIC8qIE5UU0MgdGltaW5nIGZvciAyNyBNaHogcmVmIGNsayAqLworCQk4MDAsICAgICAgICAgICAgICAgIC8qIGhvclJlc29sdXRpb24gKi8KKwkJNjAwLCAgICAgICAgICAgICAgICAvKiB2ZXJSZXNvbHV0aW9uICovCisJCVRWX1NURF9OVFNDLCAgICAgICAgLyogc3RhbmRhcmQgKi8KKwkJOTkwLCAgICAgICAgICAgICAgICAvKiBob3JUb3RhbCAqLworCQk3NDAsICAgICAgICAgICAgICAgIC8qIHZlclRvdGFsICovCisJCTgxMywgICAgICAgICAgICAgICAgLyogaG9yU3RhcnQgKi8KKwkJODI0LCAgICAgICAgICAgICAgICAvKiBob3JTeW5jU3RhcnQgKi8KKwkJNjMyLCAgICAgICAgICAgICAgICAvKiB2ZXJTeW5jU3RhcnQgKi8KKwkJNjI1NTkyLCAgICAgICAgICAgICAvKiBkZWZSZXN0YXJ0ICovCisJCTU5MiwgICAgICAgICAgICAgICAgLyogY3J0Y1BMTF9OICovCisJCTkxLCAgICAgICAgICAgICAgICAgLyogY3J0Y1BMTF9NICovCisJCTQsICAgICAgICAgICAgICAgICAgLyogY3J0Y1BMTF9wb3N0RGl2ICovCisJCTEwMjIsICAgICAgICAgICAgICAgLyogcGl4VG9UViAqLworCX0sCisJeyAgIC8qIFBBTCB0aW1pbmcgZm9yIDI3IE1oeiByZWYgY2xrICovCisJCTgwMCwgICAgICAgICAgICAgICAvKiBob3JSZXNvbHV0aW9uICovCisJCTYwMCwgICAgICAgICAgICAgICAvKiB2ZXJSZXNvbHV0aW9uICovCisJCVRWX1NURF9QQUwsICAgICAgICAvKiBzdGFuZGFyZCAqLworCQkxMTQ0LCAgICAgICAgICAgICAgLyogaG9yVG90YWwgKi8KKwkJNzA2LCAgICAgICAgICAgICAgIC8qIHZlclRvdGFsICovCisJCTgxMiwgICAgICAgICAgICAgICAvKiBob3JTdGFydCAqLworCQk4MjQsICAgICAgICAgICAgICAgLyogaG9yU3luY1N0YXJ0ICovCisJCTY2OSwgICAgICAgICAgICAgICAvKiB2ZXJTeW5jU3RhcnQgKi8KKwkJNjk2NzAwLCAgICAgICAgICAgIC8qIGRlZlJlc3RhcnQgKi8KKwkJMTM4MiwgICAgICAgICAgICAgIC8qIGNydGNQTExfTiAqLworCQkyMzEsICAgICAgICAgICAgICAgLyogY3J0Y1BMTF9NICovCisJCTQsICAgICAgICAgICAgICAgICAvKiBjcnRjUExMX3Bvc3REaXYgKi8KKwkJNzU5LCAgICAgICAgICAgICAgIC8qIHBpeFRvVFYgKi8KKwl9LAorCXsgICAvKiBOVFNDIHRpbWluZyBmb3IgMTQgTWh6IHJlZiBjbGsgKi8KKwkJODAwLCAgICAgICAgICAgICAgICAvKiBob3JSZXNvbHV0aW9uICovCisJCTYwMCwgICAgICAgICAgICAgICAgLyogdmVyUmVzb2x1dGlvbiAqLworCQlUVl9TVERfTlRTQywgICAgICAgIC8qIHN0YW5kYXJkICovCisJCTEwMTgsICAgICAgICAgICAgICAgLyogaG9yVG90YWwgKi8KKwkJNzI3LCAgICAgICAgICAgICAgICAvKiB2ZXJUb3RhbCAqLworCQk4MTMsICAgICAgICAgICAgICAgIC8qIGhvclN0YXJ0ICovCisJCTg0MCwgICAgICAgICAgICAgICAgLyogaG9yU3luY1N0YXJ0ICovCisJCTYzMywgICAgICAgICAgICAgICAgLyogdmVyU3luY1N0YXJ0ICovCisJCTYzMDYyNywgICAgICAgICAgICAgLyogZGVmUmVzdGFydCAqLworCQkzNDcsICAgICAgICAgICAgICAgIC8qIGNydGNQTExfTiAqLworCQkxNCwgICAgICAgICAgICAgICAgIC8qIGNydGNQTExfTSAqLworCQkJOCwgICAgICAgICAgICAgICAgICAvKiBjcnRjUExMX3Bvc3REaXYgKi8KKwkJMTAyMiwgICAgICAgICAgICAgICAvKiBwaXhUb1RWICovCisJfSwKK307CisKKyNkZWZpbmUgTl9BVkFJTEFCTEVfTU9ERVMgQVJSQVlfU0laRShhdmFpbGFibGVfdHZfbW9kZXMpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmFkZW9uX3R2X21vZGVfY29uc3RhbnRzICpyYWRlb25fbGVnYWN5X3R2X2dldF9zdGRfbW9kZShzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyLAorCQkJCQkJCQkJICAgIHVpbnQxNl90ICpwbGxfcmVmX2ZyZXEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJhZGVvbl9lbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJY29uc3Qgc3RydWN0IHJhZGVvbl90dl9tb2RlX2NvbnN0YW50cyAqY29uc3RfcHRyOworCXN0cnVjdCByYWRlb25fcGxsICpwbGw7CisKKwlyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKHJhZGVvbl9lbmNvZGVyLT5iYXNlLmNydGMpOworCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAxKQorCQlwbGwgPSAmcmRldi0+Y2xvY2sucDJwbGw7CisJZWxzZQorCQlwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7CisKKwlpZiAocGxsX3JlZl9mcmVxKQorCQkqcGxsX3JlZl9mcmVxID0gcGxsLT5yZWZlcmVuY2VfZnJlcTsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSkgeworCQlpZiAocGxsLT5yZWZlcmVuY2VfZnJlcSA9PSAyNzAwKQorCQkJY29uc3RfcHRyID0gJmF2YWlsYWJsZV90dl9tb2Rlc1swXTsKKwkJZWxzZQorCQkJY29uc3RfcHRyID0gJmF2YWlsYWJsZV90dl9tb2Rlc1syXTsKKwl9IGVsc2UgeworCQlpZiAocGxsLT5yZWZlcmVuY2VfZnJlcSA9PSAyNzAwKQorCQkJY29uc3RfcHRyID0gJmF2YWlsYWJsZV90dl9tb2Rlc1sxXTsKKwkJZWxzZQorCQkJY29uc3RfcHRyID0gJmF2YWlsYWJsZV90dl9tb2Rlc1sxXTsgLyogRklYIE1FICovCisJfQorCXJldHVybiBjb25zdF9wdHI7Cit9CisKK3N0YXRpYyBsb25nIFlDT0VGX3ZhbHVlWzVdID0geyAyLCAyLCAwLCA0LCAwIH07CitzdGF0aWMgbG9uZyBZQ09FRl9FTl92YWx1ZVs1XSA9IHsgMSwgMSwgMCwgMSwgMCB9Oworc3RhdGljIGxvbmcgU0xPUEVfdmFsdWVbNV0gPSB7IDEsIDIsIDIsIDQsIDggfTsKK3N0YXRpYyBsb25nIFNMT1BFX2xpbWl0WzVdID0geyA2LCA1LCA0LCAzLCAyIH07CisKK3N0YXRpYyB2b2lkIHJhZGVvbl93YWl0X3BsbF9sb2NrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgdW5zaWduZWQgbl90ZXN0cywKKwkJCQkgdW5zaWduZWQgbl93YWl0X2xvb3BzLCB1bnNpZ25lZCBjbnRfdGhyZXNob2xkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHNhdmVfcGxsX3Rlc3Q7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlXUkVHMzIoUkFERU9OX1RFU1RfREVCVUdfTVVYLCAoUlJFRzMyKFJBREVPTl9URVNUX0RFQlVHX01VWCkgJiAweGZmZmY2MGZmKSB8IDB4MTAwKTsKKwlzYXZlX3BsbF90ZXN0ID0gUlJFRzMyX1BMTChSQURFT05fUExMX1RFU1RfQ05UTCk7CisJV1JFRzMyX1BMTChSQURFT05fUExMX1RFU1RfQ05UTCwgc2F2ZV9wbGxfdGVzdCAmIH5SQURFT05fUExMX01BU0tfUkVBRF9CKTsKKworCVdSRUc4KFJBREVPTl9DTE9DS19DTlRMX0lOREVYLCBSQURFT05fUExMX1RFU1RfQ05UTCk7CisJZm9yIChpID0gMDsgaSA8IG5fdGVzdHM7IGkrKykgeworCQlXUkVHOChSQURFT05fQ0xPQ0tfQ05UTF9EQVRBICsgMywgMCk7CisJCWZvciAoaiA9IDA7IGogPCBuX3dhaXRfbG9vcHM7IGorKykKKwkJCWlmIChSUkVHOChSQURFT05fQ0xPQ0tfQ05UTF9EQVRBICsgMykgPj0gY250X3RocmVzaG9sZCkKKwkJCQlicmVhazsKKwl9CisJV1JFRzMyX1BMTChSQURFT05fUExMX1RFU1RfQ05UTCwgc2F2ZV9wbGxfdGVzdCk7CisJV1JFRzMyKFJBREVPTl9URVNUX0RFQlVHX01VWCwgUlJFRzMyKFJBREVPTl9URVNUX0RFQlVHX01VWCkgJiAweGZmZmZlMGZmKTsKK30KKworCitzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3R2X3dyaXRlX2ZpZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciwKKwkJCQkJdWludDE2X3QgYWRkciwgdWludDMyX3QgdmFsdWUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJhZGVvbl9lbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgdG1wOworCWludCBpID0gMDsKKworCVdSRUczMihSQURFT05fVFZfSE9TVF9XUklURV9EQVRBLCB2YWx1ZSk7CisKKwlXUkVHMzIoUkFERU9OX1RWX0hPU1RfUkRfV1RfQ05UTCwgYWRkcik7CisJV1JFRzMyKFJBREVPTl9UVl9IT1NUX1JEX1dUX0NOVEwsIGFkZHIgfCBSQURFT05fSE9TVF9GSUZPX1dUKTsKKworCWRvIHsKKwkJdG1wID0gUlJFRzMyKFJBREVPTl9UVl9IT1NUX1JEX1dUX0NOVEwpOworCQlpZiAoKHRtcCAmIFJBREVPTl9IT1NUX0ZJRk9fV1RfQUNLKSA9PSAwKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9IHdoaWxlIChpIDwgMTAwMDApOworCVdSRUczMihSQURFT05fVFZfSE9TVF9SRF9XVF9DTlRMLCAwKTsKK30KKworI2lmIDAgLyogaW5jbHVkZWQgZm9yIGNvbXBsZXRlbmVzcyAqLworc3RhdGljIHVpbnQzMl90IHJhZGVvbl9sZWdhY3lfdHZfcmVhZF9maWZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIsIHVpbnQxNl90IGFkZHIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJhZGVvbl9lbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgdG1wOworCWludCBpID0gMDsKKworCVdSRUczMihSQURFT05fVFZfSE9TVF9SRF9XVF9DTlRMLCBhZGRyKTsKKwlXUkVHMzIoUkFERU9OX1RWX0hPU1RfUkRfV1RfQ05UTCwgYWRkciB8IFJBREVPTl9IT1NUX0ZJRk9fUkQpOworCisJZG8geworCQl0bXAgPSBSUkVHMzIoUkFERU9OX1RWX0hPU1RfUkRfV1RfQ05UTCk7CisJCWlmICgodG1wICYgUkFERU9OX0hPU1RfRklGT19SRF9BQ0spID09IDApCisJCQlicmVhazsKKwkJaSsrOworCX0gd2hpbGUgKGkgPCAxMDAwMCk7CisJV1JFRzMyKFJBREVPTl9UVl9IT1NUX1JEX1dUX0NOVEwsIDApOworCXJldHVybiBSUkVHMzIoUkFERU9OX1RWX0hPU1RfUkVBRF9EQVRBKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdWludDE2X3QgcmFkZW9uX2dldF9odGltaW5nX3RhYmxlc19hZGRyKHVpbnQzMl90IHR2X3V2X2FkcikKK3sKKwl1aW50MTZfdCBoX3RhYmxlOworCisJc3dpdGNoICgodHZfdXZfYWRyICYgUkFERU9OX0hDT0RFX1RBQkxFX1NFTF9NQVNLKSA+PiBSQURFT05fSENPREVfVEFCTEVfU0VMX1NISUZUKSB7CisJY2FzZSAwOgorCQloX3RhYmxlID0gUkFERU9OX1RWX01BWF9GSUZPX0FERFJfSU5URVJOQUw7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaF90YWJsZSA9ICgodHZfdXZfYWRyICYgUkFERU9OX1RBQkxFMV9CT1RfQURSX01BU0spID4+IFJBREVPTl9UQUJMRTFfQk9UX0FEUl9TSElGVCkgKiAyOworCQlicmVhazsKKwljYXNlIDI6CisJCWhfdGFibGUgPSAoKHR2X3V2X2FkciAmIFJBREVPTl9UQUJMRTNfVE9QX0FEUl9NQVNLKSA+PiBSQURFT05fVEFCTEUzX1RPUF9BRFJfU0hJRlQpICogMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaF90YWJsZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gaF90YWJsZTsKK30KKworc3RhdGljIHVpbnQxNl90IHJhZGVvbl9nZXRfdnRpbWluZ190YWJsZXNfYWRkcih1aW50MzJfdCB0dl91dl9hZHIpCit7CisJdWludDE2X3Qgdl90YWJsZTsKKworCXN3aXRjaCAoKHR2X3V2X2FkciAmIFJBREVPTl9WQ09ERV9UQUJMRV9TRUxfTUFTSykgPj4gUkFERU9OX1ZDT0RFX1RBQkxFX1NFTF9TSElGVCkgeworCWNhc2UgMDoKKwkJdl90YWJsZSA9ICgodHZfdXZfYWRyICYgUkFERU9OX01BWF9VVl9BRFJfTUFTSykgPj4gUkFERU9OX01BWF9VVl9BRFJfU0hJRlQpICogMiArIDE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdl90YWJsZSA9ICgodHZfdXZfYWRyICYgUkFERU9OX1RBQkxFMV9CT1RfQURSX01BU0spID4+IFJBREVPTl9UQUJMRTFfQk9UX0FEUl9TSElGVCkgKiAyICsgMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2X3RhYmxlID0gKCh0dl91dl9hZHIgJiBSQURFT05fVEFCTEUzX1RPUF9BRFJfTUFTSykgPj4gUkFERU9OX1RBQkxFM19UT1BfQURSX1NISUZUKSAqIDIgKyAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2X3RhYmxlID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiB2X3RhYmxlOworfQorCitzdGF0aWMgdm9pZCByYWRlb25fcmVzdG9yZV90dl90aW1pbmdfdGFibGVzKHN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJhZGVvbl9lbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCXVpbnQxNl90IGhfdGFibGUsIHZfdGFibGU7CisJdWludDMyX3QgdG1wOworCWludCBpOworCisJV1JFRzMyKFJBREVPTl9UVl9VVl9BRFIsIHR2X2RhYy0+dHYudHZfdXZfYWRyKTsKKwloX3RhYmxlID0gcmFkZW9uX2dldF9odGltaW5nX3RhYmxlc19hZGRyKHR2X2RhYy0+dHYudHZfdXZfYWRyKTsKKwl2X3RhYmxlID0gcmFkZW9uX2dldF92dGltaW5nX3RhYmxlc19hZGRyKHR2X2RhYy0+dHYudHZfdXZfYWRyKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSF9DT0RFX1RJTUlOR19MRU47IGkgKz0gMiwgaF90YWJsZS0tKSB7CisJCXRtcCA9ICgodWludDMyX3QpdHZfZGFjLT50di5oX2NvZGVfdGltaW5nW2ldIDw8IDE0KSB8ICgodWludDMyX3QpdHZfZGFjLT50di5oX2NvZGVfdGltaW5nW2krMV0pOworCQlyYWRlb25fbGVnYWN5X3R2X3dyaXRlX2ZpZm8ocmFkZW9uX2VuY29kZXIsIGhfdGFibGUsIHRtcCk7CisJCWlmICh0dl9kYWMtPnR2LmhfY29kZV90aW1pbmdbaV0gPT0gMCB8fCB0dl9kYWMtPnR2LmhfY29kZV90aW1pbmdbaSArIDFdID09IDApCisJCQlicmVhazsKKwl9CisJZm9yIChpID0gMDsgaSA8IE1BWF9WX0NPREVfVElNSU5HX0xFTjsgaSArPSAyLCB2X3RhYmxlKyspIHsKKwkJdG1wID0gKCh1aW50MzJfdCl0dl9kYWMtPnR2LnZfY29kZV90aW1pbmdbaSsxXSA8PCAxNCkgfCAoKHVpbnQzMl90KXR2X2RhYy0+dHYudl9jb2RlX3RpbWluZ1tpXSk7CisJCXJhZGVvbl9sZWdhY3lfdHZfd3JpdGVfZmlmbyhyYWRlb25fZW5jb2Rlciwgdl90YWJsZSwgdG1wKTsKKwkJaWYgKHR2X2RhYy0+dHYudl9jb2RlX3RpbWluZ1tpXSA9PSAwIHx8IHR2X2RhYy0+dHYudl9jb2RlX3RpbWluZ1tpICsgMV0gPT0gMCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV93cml0ZV90dl9yZXN0YXJ0cyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByYWRlb25fZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKnR2X2RhYyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwlXUkVHMzIoUkFERU9OX1RWX0ZSRVNUQVJULCB0dl9kYWMtPnR2LmZyZXN0YXJ0KTsKKwlXUkVHMzIoUkFERU9OX1RWX0hSRVNUQVJULCB0dl9kYWMtPnR2LmhyZXN0YXJ0KTsKKwlXUkVHMzIoUkFERU9OX1RWX1ZSRVNUQVJULCB0dl9kYWMtPnR2LnZyZXN0YXJ0KTsKK30KKworc3RhdGljIGJvb2wgcmFkZW9uX2xlZ2FjeV90dl9pbml0X3Jlc3RhcnRzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGM7CisJaW50IHJlc3RhcnQ7CisJdW5zaWduZWQgaW50IGhfdG90YWwsIHZfdG90YWwsIGZfdG90YWw7CisJaW50IHZfb2Zmc2V0LCBoX29mZnNldDsKKwl1MTYgcDEsIHAyLCBoX2luYzsKKwlib29sIGhfY2hhbmdlZDsKKwljb25zdCBzdHJ1Y3QgcmFkZW9uX3R2X21vZGVfY29uc3RhbnRzICpjb25zdF9wdHI7CisJc3RydWN0IHJhZGVvbl9wbGwgKnBsbDsKKworCXJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMocmFkZW9uX2VuY29kZXItPmJhc2UuY3J0Yyk7CisJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDEpCisJCXBsbCA9ICZyZGV2LT5jbG9jay5wMnBsbDsKKwllbHNlCisJCXBsbCA9ICZyZGV2LT5jbG9jay5wMXBsbDsKKworCWNvbnN0X3B0ciA9IHJhZGVvbl9sZWdhY3lfdHZfZ2V0X3N0ZF9tb2RlKHJhZGVvbl9lbmNvZGVyLCBOVUxMKTsKKwlpZiAoIWNvbnN0X3B0cikKKwkJcmV0dXJuIGZhbHNlOworCisJaF90b3RhbCA9IGNvbnN0X3B0ci0+aG9yX3RvdGFsOworCXZfdG90YWwgPSBjb25zdF9wdHItPnZlcl90b3RhbDsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMXzYwKQorCQlmX3RvdGFsID0gTlRTQ19UVl9WRlRPVEFMICsgMTsKKwllbHNlCisJCWZfdG90YWwgPSBQQUxfVFZfVkZUT1RBTCArIDE7CisKKwkvKiBhZGp1c3QgcG9zaXRpb25zIDEmMiBpbiBob3IuIGNvZCB0aW1pbmcgdGFibGUgKi8KKwloX29mZnNldCA9IHR2X2RhYy0+aF9wb3MgKiBIX1BPU19VTklUOworCisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF9NKSB7CisJCWhfb2Zmc2V0IC09IDUwOworCQlwMSA9IGhvcl90aW1pbmdfTlRTQ1tIX1RBQkxFX1BPUzFdOworCQlwMiA9IGhvcl90aW1pbmdfTlRTQ1tIX1RBQkxFX1BPUzJdOworCX0gZWxzZSB7CisJCXAxID0gaG9yX3RpbWluZ19QQUxbSF9UQUJMRV9QT1MxXTsKKwkJcDIgPSBob3JfdGltaW5nX1BBTFtIX1RBQkxFX1BPUzJdOworCX0KKworCXAxID0gKHUxNikoKGludClwMSArIGhfb2Zmc2V0KTsKKwlwMiA9ICh1MTYpKChpbnQpcDIgLSBoX29mZnNldCk7CisKKwloX2NoYW5nZWQgPSAocDEgIT0gdHZfZGFjLT50di5oX2NvZGVfdGltaW5nW0hfVEFCTEVfUE9TMV0gfHwKKwkJICAgICBwMiAhPSB0dl9kYWMtPnR2LmhfY29kZV90aW1pbmdbSF9UQUJMRV9QT1MyXSk7CisKKwl0dl9kYWMtPnR2LmhfY29kZV90aW1pbmdbSF9UQUJMRV9QT1MxXSA9IHAxOworCXR2X2RhYy0+dHYuaF9jb2RlX3RpbWluZ1tIX1RBQkxFX1BPUzJdID0gcDI7CisKKwkvKiBDb252ZXJ0IGhPZmZzZXQgZnJvbSBuLiBvZiBUViBjbG9jayBwZXJpb2RzIHRvIG4uIG9mIENSVEMgY2xvY2sgcGVyaW9kcyAoQ1JUQyBwaXhlbHMpICovCisJaF9vZmZzZXQgPSAoaF9vZmZzZXQgKiAoaW50KShjb25zdF9wdHItPnBpeF90b190dikpIC8gMTAwMDsKKworCS8qIGFkanVzdCByZXN0YXJ0ICovCisJcmVzdGFydCA9IGNvbnN0X3B0ci0+ZGVmX3Jlc3RhcnQ7CisKKwkvKgorCSAqIGNvbnZlcnQgdl9wb3MgVFYgbGluZXMgdG8gbi4gb2YgQ1JUQyBwaXhlbHMKKwkgKi8KKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00gfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF82MCkKKwkJdl9vZmZzZXQgPSAoKGludCkodl90b3RhbCAqIGhfdG90YWwpICogMiAqIHR2X2RhYy0+dl9wb3MpIC8gKGludCkoTlRTQ19UVl9MSU5FU19QRVJfRlJBTUUpOworCWVsc2UKKwkJdl9vZmZzZXQgPSAoKGludCkodl90b3RhbCAqIGhfdG90YWwpICogMiAqIHR2X2RhYy0+dl9wb3MpIC8gKGludCkoUEFMX1RWX0xJTkVTX1BFUl9GUkFNRSk7CisKKwlyZXN0YXJ0IC09IHZfb2Zmc2V0ICsgaF9vZmZzZXQ7CisKKwlEUk1fREVCVUcoImNvbXB1dGVfcmVzdGFydHM6IGRlZiA9ICV1IGggPSAlZCB2ID0gJWQsIHAxID0gJTA0eCwgcDIgPSAlMDR4LCByZXN0YXJ0ID0gJWRcbiIsCisJCSAgY29uc3RfcHRyLT5kZWZfcmVzdGFydCwgdHZfZGFjLT5oX3BvcywgdHZfZGFjLT52X3BvcywgcDEsIHAyLCByZXN0YXJ0KTsKKworCXR2X2RhYy0+dHYuaHJlc3RhcnQgPSByZXN0YXJ0ICUgaF90b3RhbDsKKwlyZXN0YXJ0IC89IGhfdG90YWw7CisJdHZfZGFjLT50di52cmVzdGFydCA9IHJlc3RhcnQgJSB2X3RvdGFsOworCXJlc3RhcnQgLz0gdl90b3RhbDsKKwl0dl9kYWMtPnR2LmZyZXN0YXJ0ID0gcmVzdGFydCAlIGZfdG90YWw7CisKKwlEUk1fREVCVUcoImNvbXB1dGVfcmVzdGFydDogRi9IL1Y9JXUsJXUsJXVcbiIsCisJCSAgKHVuc2lnbmVkKXR2X2RhYy0+dHYuZnJlc3RhcnQsCisJCSAgKHVuc2lnbmVkKXR2X2RhYy0+dHYudnJlc3RhcnQsCisJCSAgKHVuc2lnbmVkKXR2X2RhYy0+dHYuaHJlc3RhcnQpOworCisJLyogY29tcHV0ZSBoX2luYyBmcm9tIGhzaXplICovCisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF9NKQorCQloX2luYyA9ICh1MTYpKChpbnQpKGNvbnN0X3B0ci0+aG9yX3Jlc29sdXRpb24gKiA0MDk2ICogTlRTQ19UVl9DTE9DS19UKSAvCisJCQkgICAgICAodHZfZGFjLT5oX3NpemUgKiAoaW50KShOVFNDX1RWX0hfU0laRV9VTklUKSArIChpbnQpKE5UU0NfVFZfWkVST19IX1NJWkUpKSk7CisJZWxzZQorCQloX2luYyA9ICh1MTYpKChpbnQpKGNvbnN0X3B0ci0+aG9yX3Jlc29sdXRpb24gKiA0MDk2ICogUEFMX1RWX0NMT0NLX1QpIC8KKwkJCSAgICAgICh0dl9kYWMtPmhfc2l6ZSAqIChpbnQpKFBBTF9UVl9IX1NJWkVfVU5JVCkgKyAoaW50KShQQUxfVFZfWkVST19IX1NJWkUpKSk7CisKKwl0dl9kYWMtPnR2LnRpbWluZ19jbnRsID0gKHR2X2RhYy0+dHYudGltaW5nX2NudGwgJiB+UkFERU9OX0hfSU5DX01BU0spIHwKKwkJKCh1MzIpaF9pbmMgPDwgUkFERU9OX0hfSU5DX1NISUZUKTsKKworCURSTV9ERUJVRygiY29tcHV0ZV9yZXN0YXJ0OiBoX3NpemUgPSAlZCBoX2luYyA9ICVkXG4iLCB0dl9kYWMtPmhfc2l6ZSwgaF9pbmMpOworCisJcmV0dXJuIGhfY2hhbmdlZDsKK30KKwordm9pZCByYWRlb25fbGVnYWN5X3R2X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCWNvbnN0IHN0cnVjdCByYWRlb25fdHZfbW9kZV9jb25zdGFudHMgKmNvbnN0X3B0cjsKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjOworCWludCBpOworCXVpbnQxNl90IHBsbF9yZWZfZnJlcTsKKwl1aW50MzJfdCB2ZXJ0X3NwYWNlLCBmbGlja2VyX3JlbW92YWwsIHRtcDsKKwl1aW50MzJfdCB0dl9tYXN0ZXJfY250bCwgdHZfcmdiX2NudGwsIHR2X2RhY19jbnRsOworCXVpbnQzMl90IHR2X21vZHVsYXRvcl9jbnRsMSwgdHZfbW9kdWxhdG9yX2NudGwyOworCXVpbnQzMl90IHR2X3ZzY2FsZXJfY250bDEsIHR2X3ZzY2FsZXJfY250bDI7CisJdWludDMyX3QgdHZfcGxsX2NudGwsIHR2X3BsbF9jbnRsMSwgdHZfZnRvdGFsOworCXVpbnQzMl90IHR2X3lfZmFsbF9jbnRsLCB0dl95X3Jpc2VfY250bCwgdHZfeV9zYXdfdG9vdGhfY250bDsKKwl1aW50MzJfdCBtLCBuLCBwOworCWNvbnN0IHVpbnQxNl90ICpob3JfdGltaW5nOworCWNvbnN0IHVpbnQxNl90ICp2ZXJ0X3RpbWluZzsKKworCWNvbnN0X3B0ciA9IHJhZGVvbl9sZWdhY3lfdHZfZ2V0X3N0ZF9tb2RlKHJhZGVvbl9lbmNvZGVyLCAmcGxsX3JlZl9mcmVxKTsKKwlpZiAoIWNvbnN0X3B0cikKKwkJcmV0dXJuOworCisJcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhlbmNvZGVyLT5jcnRjKTsKKworCXR2X21hc3Rlcl9jbnRsID0gKFJBREVPTl9WSU5fQVNZTkNfUlNUIHwKKwkJCSAgUkFERU9OX0NSVF9GSUZPX0NFX0VOIHwKKwkJCSAgUkFERU9OX1RWX0ZJRk9fQ0VfRU4gfAorCQkJICBSQURFT05fVFZfT04pOworCisJaWYgKCFBU0lDX0lTX1IzMDAocmRldikpCisJCXR2X21hc3Rlcl9jbnRsIHw9IFJBREVPTl9UVkNMS19BTFdBWVNfT05iOworCisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0opCisJCXR2X21hc3Rlcl9jbnRsIHw9IFJBREVPTl9SRVNUQVJUX1BIQVNFX0ZJWDsKKworCXR2X21vZHVsYXRvcl9jbnRsMSA9IChSQURFT05fU0xFV19SQVRFX0xJTUlUIHwKKwkJCSAgICAgIFJBREVPTl9TWU5DX1RJUF9MRVZFTCB8CisJCQkgICAgICBSQURFT05fWUZMVF9FTiB8CisJCQkgICAgICBSQURFT05fVVZGTFRfRU4gfAorCQkJICAgICAgKDYgPDwgUkFERU9OX0NZX0ZJTFRfQkxFTkRfU0hJRlQpKTsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KKSB7CisJCXR2X21vZHVsYXRvcl9jbnRsMSB8PSAoMHg0NiA8PCBSQURFT05fU0VUX1VQX0xFVkVMX1NISUZUKSB8CisJCQkoMHgzYiA8PCBSQURFT05fQkxBTktfTEVWRUxfU0hJRlQpOworCQl0dl9tb2R1bGF0b3JfY250bDIgPSAoLTExMSAmIFJBREVPTl9UVl9VX0JVUlNUX0xFVkVMX01BU0spIHwKKwkJCSgoMCAmIFJBREVPTl9UVl9WX0JVUlNUX0xFVkVMX01BU0spIDw8IFJBREVPTl9UVl9WX0JVUlNUX0xFVkVMX1NISUZUKTsKKwl9IGVsc2UgaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9TQ0FSVF9QQUwpIHsKKwkJdHZfbW9kdWxhdG9yX2NudGwxIHw9IFJBREVPTl9BTFRfUEhBU0VfRU47CisJCXR2X21vZHVsYXRvcl9jbnRsMiA9ICgwICYgUkFERU9OX1RWX1VfQlVSU1RfTEVWRUxfTUFTSykgfAorCQkJKCgwICYgUkFERU9OX1RWX1ZfQlVSU1RfTEVWRUxfTUFTSykgPDwgUkFERU9OX1RWX1ZfQlVSU1RfTEVWRUxfU0hJRlQpOworCX0gZWxzZSB7CisJCXR2X21vZHVsYXRvcl9jbnRsMSB8PSBSQURFT05fQUxUX1BIQVNFX0VOIHwKKwkJCSgweDNiIDw8IFJBREVPTl9TRVRfVVBfTEVWRUxfU0hJRlQpIHwKKwkJCSgweDNiIDw8IFJBREVPTl9CTEFOS19MRVZFTF9TSElGVCk7CisJCXR2X21vZHVsYXRvcl9jbnRsMiA9ICgtNzggJiBSQURFT05fVFZfVV9CVVJTVF9MRVZFTF9NQVNLKSB8CisJCQkoKDYyICYgUkFERU9OX1RWX1ZfQlVSU1RfTEVWRUxfTUFTSykgPDwgUkFERU9OX1RWX1ZfQlVSU1RfTEVWRUxfU0hJRlQpOworCX0KKworCisJdHZfcmdiX2NudGwgPSAoUkFERU9OX1JHQl9ESVRIRVJfRU4KKwkJICAgICAgIHwgUkFERU9OX1RWT1VUX1NDQUxFX0VOCisJCSAgICAgICB8ICgweDBiIDw8IFJBREVPTl9VVlJBTV9SRUFEX01BUkdJTl9TSElGVCkKKwkJICAgICAgIHwgKDB4MDcgPDwgUkFERU9OX0ZJRk9SQU1fRkZNQUNST19SRUFEX01BUkdJTl9TSElGVCkKKwkJICAgICAgIHwgUkFERU9OX1JHQl9BVFRFTl9TRUwoMHgzKQorCQkgICAgICAgfCBSQURFT05fUkdCX0FUVEVOX1ZBTCgweGMpKTsKKworCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAxKQorCQl0dl9yZ2JfY250bCB8PSBSQURFT05fUkdCX1NSQ19TRUxfQ1JUQzI7CisJZWxzZSB7CisJCWlmIChyYWRlb25fY3J0Yy0+cm14X3R5cGUgIT0gUk1YX09GRikKKwkJCXR2X3JnYl9jbnRsIHw9IFJBREVPTl9SR0JfU1JDX1NFTF9STVg7CisJCWVsc2UKKwkJCXR2X3JnYl9jbnRsIHw9IFJBREVPTl9SR0JfU1JDX1NFTF9DUlRDMTsKKwl9CisKKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00gfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF82MCkKKwkJdmVydF9zcGFjZSA9IGNvbnN0X3B0ci0+dmVyX3RvdGFsICogMiAqIDEwMDAwIC8gTlRTQ19UVl9MSU5FU19QRVJfRlJBTUU7CisJZWxzZQorCQl2ZXJ0X3NwYWNlID0gY29uc3RfcHRyLT52ZXJfdG90YWwgKiAyICogMTAwMDAgLyBQQUxfVFZfTElORVNfUEVSX0ZSQU1FOworCisJdG1wID0gUlJFRzMyKFJBREVPTl9UVl9WU0NBTEVSX0NOVEwxKTsKKwl0bXAgJj0gMHhlM2ZmMDAwMDsKKwl0bXAgfD0gKHZlcnRfc3BhY2UgKiAoMSA8PCBGUkFDX0JJVFMpIC8gMTAwMDApOworCXR2X3ZzY2FsZXJfY250bDEgPSB0bXA7CisKKwlpZiAocGxsX3JlZl9mcmVxID09IDI3MDApCisJCXR2X3ZzY2FsZXJfY250bDEgfD0gUkFERU9OX1JFU1RBUlRfRklFTEQ7CisKKwlpZiAoY29uc3RfcHRyLT5ob3JfcmVzb2x1dGlvbiA9PSAxMDI0KQorCQl0dl92c2NhbGVyX2NudGwxIHw9ICg0IDw8IFJBREVPTl9ZX0RFTF9XX1NJR19TSElGVCk7CisJZWxzZQorCQl0dl92c2NhbGVyX2NudGwxIHw9ICgyIDw8IFJBREVPTl9ZX0RFTF9XX1NJR19TSElGVCk7CisKKwkvKiBzY2FsZSB1cCBmb3IgaW50IGRpdmlkZSAqLworCXRtcCA9IGNvbnN0X3B0ci0+dmVyX3RvdGFsICogMiAqIDEwMDA7CisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF9NIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfNjApIHsKKwkJdG1wIC89IE5UU0NfVFZfTElORVNfUEVSX0ZSQU1FOworCX0gZWxzZSB7CisJCXRtcCAvPSBQQUxfVFZfTElORVNfUEVSX0ZSQU1FOworCX0KKwlmbGlja2VyX3JlbW92YWwgPSAodG1wICsgNTAwKSAvIDEwMDA7CisKKwlpZiAoZmxpY2tlcl9yZW1vdmFsIDwgMykKKwkJZmxpY2tlcl9yZW1vdmFsID0gMzsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7CisJCWlmIChmbGlja2VyX3JlbW92YWwgPT0gU0xPUEVfbGltaXRbaV0pCisJCQlicmVhazsKKwl9CisKKwl0dl95X3Nhd190b290aF9jbnRsID0gKHZlcnRfc3BhY2UgKiBTTE9QRV92YWx1ZVtpXSAqICgxIDw8IChGUkFDX0JJVFMgLSAxKSkgKworCQkJCTUwMDEpIC8gMTAwMDAgLyA4IHwgKChTTE9QRV92YWx1ZVtpXSAqCisJCQkJKDEgPDwgKEZSQUNfQklUUyAtIDEpKSAvIDgpIDw8IDE2KTsKKwl0dl95X2ZhbGxfY250bCA9CisJCShZQ09FRl9FTl92YWx1ZVtpXSA8PCAxNykgfCAoKFlDT0VGX3ZhbHVlW2ldICogKDEgPDwgOCkgLyA4KSA8PCAyNCkgfAorCQlSQURFT05fWV9GQUxMX1BJTkdfUE9ORyB8ICgyNzIgKiBTTE9QRV92YWx1ZVtpXSAvIDgpICogKDEgPDwgKEZSQUNfQklUUyAtIDEpKSAvCisJCTEwMjQ7CisJdHZfeV9yaXNlX2NudGwgPSBSQURFT05fWV9SSVNFX1BJTkdfUE9OR3wKKwkJKGZsaWNrZXJfcmVtb3ZhbCAqIDEwMjQgLSAyNzIpICogU0xPUEVfdmFsdWVbaV0gLyA4ICogKDEgPDwgKEZSQUNfQklUUyAtIDEpKSAvIDEwMjQ7CisKKwl0dl92c2NhbGVyX2NudGwyID0gUlJFRzMyKFJBREVPTl9UVl9WU0NBTEVSX0NOVEwyKSAmIDB4MDBmZmZmZjA7CisJdHZfdnNjYWxlcl9jbnRsMiB8PSAoMHgxMCA8PCAyNCkgfAorCQlSQURFT05fRElUSEVSX01PREUgfAorCQlSQURFT05fWV9PVVRQVVRfRElUSEVSX0VOIHwKKwkJUkFERU9OX1VWX09VVFBVVF9ESVRIRVJfRU4gfAorCQlSQURFT05fVVZfVE9fQlVGX0RJVEhFUl9FTjsKKworCXRtcCA9ICh0dl92c2NhbGVyX2NudGwxID4+IFJBREVPTl9VVl9JTkNfU0hJRlQpICYgUkFERU9OX1VWX0lOQ19NQVNLOworCXRtcCA9ICgoMTYzODQgKiAyNTYgKiAxMCkgLyB0bXAgKyA1KSAvIDEwOworCXRtcCA9ICh0bXAgPDwgUkFERU9OX1VWX09VVFBVVF9QT1NUX1NDQUxFX1NISUZUKSB8IDB4MDAwYjAwMDA7CisJdHZfZGFjLT50di50aW1pbmdfY250bCA9IHRtcDsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9QQUxfTSB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMXzYwKQorCQl0dl9kYWNfY250bCA9IHR2X2RhYy0+bnRzY190dmRhY19hZGo7CisJZWxzZQorCQl0dl9kYWNfY250bCA9IHR2X2RhYy0+cGFsX3R2ZGFjX2FkajsKKworCXR2X2RhY19jbnRsIHw9IFJBREVPTl9UVl9EQUNfTkJMQU5LIHwgUkFERU9OX1RWX0RBQ19OSE9MRDsKKworCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KKQorCQl0dl9kYWNfY250bCB8PSBSQURFT05fVFZfREFDX1NURF9OVFNDOworCWVsc2UKKwkJdHZfZGFjX2NudGwgfD0gUkFERU9OX1RWX0RBQ19TVERfUEFMOworCisJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8CisJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0opIHsKKwkJaWYgKHBsbF9yZWZfZnJlcSA9PSAyNzAwKSB7CisJCQltID0gTlRTQ19UVl9QTExfTV8yNzsKKwkJCW4gPSBOVFNDX1RWX1BMTF9OXzI3OworCQkJcCA9IE5UU0NfVFZfUExMX1BfMjc7CisJCX0gZWxzZSB7CisJCQltID0gTlRTQ19UVl9QTExfTV8xNDsKKwkJCW4gPSBOVFNDX1RWX1BMTF9OXzE0OworCQkJcCA9IE5UU0NfVFZfUExMX1BfMTQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocGxsX3JlZl9mcmVxID09IDI3MDApIHsKKwkJCW0gPSBQQUxfVFZfUExMX01fMjc7CisJCQluID0gUEFMX1RWX1BMTF9OXzI3OworCQkJcCA9IFBBTF9UVl9QTExfUF8yNzsKKwkJfSBlbHNlIHsKKwkJCW0gPSBQQUxfVFZfUExMX01fMjc7CisJCQluID0gUEFMX1RWX1BMTF9OXzI3OworCQkJcCA9IFBBTF9UVl9QTExfUF8yNzsKKwkJfQorCX0KKworCXR2X3BsbF9jbnRsID0gKG0gJiBSQURFT05fVFZfTTBMT19NQVNLKSB8CisJCSgoKG0gPj4gOCkgJiBSQURFT05fVFZfTTBISV9NQVNLKSA8PCBSQURFT05fVFZfTTBISV9TSElGVCkgfAorCQkoKG4gJiBSQURFT05fVFZfTjBMT19NQVNLKSA8PCBSQURFT05fVFZfTjBMT19TSElGVCkgfAorCQkoKChuID4+IDkpICYgUkFERU9OX1RWX04wSElfTUFTSykgPDwgUkFERU9OX1RWX04wSElfU0hJRlQpIHwKKwkJKChwICYgUkFERU9OX1RWX1BfTUFTSykgPDwgUkFERU9OX1RWX1BfU0hJRlQpOworCisJdHZfcGxsX2NudGwxID0gKCgoNCAmIFJBREVPTl9UVlBDUF9NQVNLKSA8PCBSQURFT05fVFZQQ1BfU0hJRlQpIHwKKwkJCSgoNCAmIFJBREVPTl9UVlBWR19NQVNLKSA8PCBSQURFT05fVFZQVkdfU0hJRlQpIHwKKwkJCSgoMSAmIFJBREVPTl9UVlBEQ19NQVNLKSA8PCBSQURFT05fVFZQRENfU0hJRlQpIHwKKwkJCVJBREVPTl9UVkNMS19TUkNfU0VMX1RWUExMIHwKKwkJCVJBREVPTl9UVlBMTF9URVNUX0RJUyk7CisKKwl0dl9kYWMtPnR2LnR2X3V2X2FkciA9IDB4Yzg7CisKKwlpZiAodHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0MgfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX05UU0NfSiB8fAorCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00gfHwKKwkgICAgdHZfZGFjLT50dl9zdGQgPT0gVFZfU1REX1BBTF82MCkgeworCQl0dl9mdG90YWwgPSBOVFNDX1RWX1ZGVE9UQUw7CisJCWhvcl90aW1pbmcgPSBob3JfdGltaW5nX05UU0M7CisJCXZlcnRfdGltaW5nID0gdmVydF90aW1pbmdfTlRTQzsKKwl9IGVsc2UgeworCQlob3JfdGltaW5nID0gaG9yX3RpbWluZ19QQUw7CisJCXZlcnRfdGltaW5nID0gdmVydF90aW1pbmdfUEFMOworCQl0dl9mdG90YWwgPSBQQUxfVFZfVkZUT1RBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hfQ09ERV9USU1JTkdfTEVOOyBpKyspIHsKKwkJaWYgKCh0dl9kYWMtPnR2LmhfY29kZV90aW1pbmdbaV0gPSBob3JfdGltaW5nW2ldKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9WX0NPREVfVElNSU5HX0xFTjsgaSsrKSB7CisJCWlmICgodHZfZGFjLT50di52X2NvZGVfdGltaW5nW2ldID0gdmVydF90aW1pbmdbaV0pID09IDApCisJCQlicmVhazsKKwl9CisKKwlyYWRlb25fbGVnYWN5X3R2X2luaXRfcmVzdGFydHMoZW5jb2Rlcik7CisKKwkvKiBwbGF5IHdpdGggREFDX0NOVEwgKi8KKwkvKiBwbGF5IHdpdGggR1BJT1BBRF9BICovCisJLyogRElTUF9PVVRQVVRfQ05UTCAqLworCS8qIHVzZSByZWZlcmVuY2UgZnJlcSAqLworCisJLyogcHJvZ3JhbSB0aGUgVFYgcmVnaXN0ZXJzICovCisJV1JFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCwgKHR2X21hc3Rlcl9jbnRsIHwgUkFERU9OX1RWX0FTWU5DX1JTVCB8CisJCQkJICAgICAgIFJBREVPTl9DUlRfQVNZTkNfUlNUIHwgUkFERU9OX1RWX0ZJRk9fQVNZTkNfUlNUKSk7CisKKwl0bXAgPSBSUkVHMzIoUkFERU9OX1RWX0RBQ19DTlRMKTsKKwl0bXAgJj0gflJBREVPTl9UVl9EQUNfTkJMQU5LOworCXRtcCB8PSBSQURFT05fVFZfREFDX0JHU0xFRVAgfAorCQlSQURFT05fVFZfREFDX1JEQUNQRCB8CisJCVJBREVPTl9UVl9EQUNfR0RBQ1BEIHwKKwkJUkFERU9OX1RWX0RBQ19CREFDUEQ7CisJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdG1wKTsKKworCS8qIFRWIFBMTCAqLworCVdSRUczMl9QTExfUChSQURFT05fVFZfUExMX0NOVEwxLCAwLCB+UkFERU9OX1RWQ0xLX1NSQ19TRUxfVFZQTEwpOworCVdSRUczMl9QTEwoUkFERU9OX1RWX1BMTF9DTlRMLCB0dl9wbGxfY250bCk7CisJV1JFRzMyX1BMTF9QKFJBREVPTl9UVl9QTExfQ05UTDEsIFJBREVPTl9UVlBMTF9SRVNFVCwgflJBREVPTl9UVlBMTF9SRVNFVCk7CisKKwlyYWRlb25fd2FpdF9wbGxfbG9jayhlbmNvZGVyLCAyMDAsIDgwMCwgMTM1KTsKKworCVdSRUczMl9QTExfUChSQURFT05fVFZfUExMX0NOVEwxLCAwLCB+UkFERU9OX1RWUExMX1JFU0VUKTsKKworCXJhZGVvbl93YWl0X3BsbF9sb2NrKGVuY29kZXIsIDMwMCwgMTYwLCAyNyk7CisJcmFkZW9uX3dhaXRfcGxsX2xvY2soZW5jb2RlciwgMjAwLCA4MDAsIDEzNSk7CisKKwlXUkVHMzJfUExMX1AoUkFERU9OX1RWX1BMTF9DTlRMMSwgMCwgfjB4Zik7CisJV1JFRzMyX1BMTF9QKFJBREVPTl9UVl9QTExfQ05UTDEsIFJBREVPTl9UVkNMS19TUkNfU0VMX1RWUExMLCB+UkFERU9OX1RWQ0xLX1NSQ19TRUxfVFZQTEwpOworCisJV1JFRzMyX1BMTF9QKFJBREVPTl9UVl9QTExfQ05UTDEsICgxIDw8IFJBREVPTl9UVlBEQ19TSElGVCksIH5SQURFT05fVFZQRENfTUFTSyk7CisJV1JFRzMyX1BMTF9QKFJBREVPTl9UVl9QTExfQ05UTDEsIDAsIH5SQURFT05fVFZQTExfU0xFRVApOworCisJLyogVFYgSFYgKi8KKwlXUkVHMzIoUkFERU9OX1RWX1JHQl9DTlRMLCB0dl9yZ2JfY250bCk7CisJV1JFRzMyKFJBREVPTl9UVl9IVE9UQUwsIGNvbnN0X3B0ci0+aG9yX3RvdGFsIC0gMSk7CisJV1JFRzMyKFJBREVPTl9UVl9IRElTUCwgY29uc3RfcHRyLT5ob3JfcmVzb2x1dGlvbiAtIDEpOworCVdSRUczMihSQURFT05fVFZfSFNUQVJULCBjb25zdF9wdHItPmhvcl9zdGFydCk7CisKKwlXUkVHMzIoUkFERU9OX1RWX1ZUT1RBTCwgY29uc3RfcHRyLT52ZXJfdG90YWwgLSAxKTsKKwlXUkVHMzIoUkFERU9OX1RWX1ZESVNQLCBjb25zdF9wdHItPnZlcl9yZXNvbHV0aW9uIC0gMSk7CisJV1JFRzMyKFJBREVPTl9UVl9GVE9UQUwsIHR2X2Z0b3RhbCk7CisJV1JFRzMyKFJBREVPTl9UVl9WU0NBTEVSX0NOVEwxLCB0dl92c2NhbGVyX2NudGwxKTsKKwlXUkVHMzIoUkFERU9OX1RWX1ZTQ0FMRVJfQ05UTDIsIHR2X3ZzY2FsZXJfY250bDIpOworCisJV1JFRzMyKFJBREVPTl9UVl9ZX0ZBTExfQ05UTCwgdHZfeV9mYWxsX2NudGwpOworCVdSRUczMihSQURFT05fVFZfWV9SSVNFX0NOVEwsIHR2X3lfcmlzZV9jbnRsKTsKKwlXUkVHMzIoUkFERU9OX1RWX1lfU0FXX1RPT1RIX0NOVEwsIHR2X3lfc2F3X3Rvb3RoX2NudGwpOworCisJV1JFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCwgKHR2X21hc3Rlcl9jbnRsIHwgUkFERU9OX1RWX0FTWU5DX1JTVCB8CisJCQkJICAgICAgIFJBREVPTl9DUlRfQVNZTkNfUlNUKSk7CisKKwkvKiBUViByZXN0YXJ0cyAqLworCXJhZGVvbl9sZWdhY3lfd3JpdGVfdHZfcmVzdGFydHMocmFkZW9uX2VuY29kZXIpOworCisJLyogdHYgdGltaW5ncyAqLworCXJhZGVvbl9yZXN0b3JlX3R2X3RpbWluZ190YWJsZXMocmFkZW9uX2VuY29kZXIpOworCisJV1JFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCwgKHR2X21hc3Rlcl9jbnRsIHwgUkFERU9OX1RWX0FTWU5DX1JTVCkpOworCisJLyogdHYgc3RkICovCisJV1JFRzMyKFJBREVPTl9UVl9TWU5DX0NOVEwsIChSQURFT05fU1lOQ19QVUIgfCBSQURFT05fVFZfU1lOQ19JT19EUklWRSkpOworCVdSRUczMihSQURFT05fVFZfVElNSU5HX0NOVEwsIHR2X2RhYy0+dHYudGltaW5nX2NudGwpOworCVdSRUczMihSQURFT05fVFZfTU9EVUxBVE9SX0NOVEwxLCB0dl9tb2R1bGF0b3JfY250bDEpOworCVdSRUczMihSQURFT05fVFZfTU9EVUxBVE9SX0NOVEwyLCB0dl9tb2R1bGF0b3JfY250bDIpOworCVdSRUczMihSQURFT05fVFZfUFJFX0RBQ19NVVhfQ05UTCwgKFJBREVPTl9ZX1JFRF9FTiB8CisJCQkJCSAgICBSQURFT05fQ19HUk5fRU4gfAorCQkJCQkgICAgUkFERU9OX0NNUF9CTFVfRU4gfAorCQkJCQkgICAgUkFERU9OX0RBQ19ESVRIRVJfRU4pKTsKKworCVdSRUczMihSQURFT05fVFZfQ1JDX0NOVEwsIDApOworCisJV1JFRzMyKFJBREVPTl9UVl9NQVNURVJfQ05UTCwgdHZfbWFzdGVyX2NudGwpOworCisJV1JFRzMyKFJBREVPTl9UVl9HQUlOX0xJTUlUX1NFVFRJTkdTLCAoKDB4MTdmIDw8IFJBREVPTl9VVl9HQUlOX0xJTUlUX1NISUZUKSB8CisJCQkJCSAgICAgICAoMHg1ZmYgPDwgUkFERU9OX1lfR0FJTl9MSU1JVF9TSElGVCkpKTsKKwlXUkVHMzIoUkFERU9OX1RWX0xJTkVBUl9HQUlOX1NFVFRJTkdTLCAoKDB4MTAwIDw8IFJBREVPTl9VVl9HQUlOX1NISUZUKSB8CisJCQkJCQkoMHgxMDAgPDwgUkFERU9OX1lfR0FJTl9TSElGVCkpKTsKKworCVdSRUczMihSQURFT05fVFZfREFDX0NOVEwsIHR2X2RhY19jbnRsKTsKKworfQorCit2b2lkIHJhZGVvbl9sZWdhY3lfdHZfYWRqdXN0X2NydGNfcmVnKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgICB1aW50MzJfdCAqaF90b3RhbF9kaXNwLCB1aW50MzJfdCAqaF9zeW5jX3N0cnRfd2lkLAorCQkJCSAgICAgIHVpbnQzMl90ICp2X3RvdGFsX2Rpc3AsIHVpbnQzMl90ICp2X3N5bmNfc3RydF93aWQpCit7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCWNvbnN0IHN0cnVjdCByYWRlb25fdHZfbW9kZV9jb25zdGFudHMgKmNvbnN0X3B0cjsKKwl1aW50MzJfdCB0bXA7CisKKwljb25zdF9wdHIgPSByYWRlb25fbGVnYWN5X3R2X2dldF9zdGRfbW9kZShyYWRlb25fZW5jb2RlciwgTlVMTCk7CisJaWYgKCFjb25zdF9wdHIpCisJCXJldHVybjsKKworCSpoX3RvdGFsX2Rpc3AgPSAoKChjb25zdF9wdHItPmhvcl9yZXNvbHV0aW9uIC8gOCkgLSAxKSA8PCBSQURFT05fQ1JUQ19IX0RJU1BfU0hJRlQpIHwKKwkJKCgoY29uc3RfcHRyLT5ob3JfdG90YWwgLyA4KSAtIDEpIDw8IFJBREVPTl9DUlRDX0hfVE9UQUxfU0hJRlQpOworCisJdG1wID0gKmhfc3luY19zdHJ0X3dpZDsKKwl0bXAgJj0gfihSQURFT05fQ1JUQ19IX1NZTkNfU1RSVF9QSVggfCBSQURFT05fQ1JUQ19IX1NZTkNfU1RSVF9DSEFSKTsKKwl0bXAgfD0gKCgoY29uc3RfcHRyLT5ob3Jfc3luY3N0YXJ0IC8gOCkgLSAxKSA8PCBSQURFT05fQ1JUQ19IX1NZTkNfU1RSVF9DSEFSX1NISUZUKSB8CisJCShjb25zdF9wdHItPmhvcl9zeW5jc3RhcnQgJiA3KTsKKwkqaF9zeW5jX3N0cnRfd2lkID0gdG1wOworCisJKnZfdG90YWxfZGlzcCA9ICgoY29uc3RfcHRyLT52ZXJfcmVzb2x1dGlvbiAtIDEpIDw8IFJBREVPTl9DUlRDX1ZfRElTUF9TSElGVCkgfAorCQkoKGNvbnN0X3B0ci0+dmVyX3RvdGFsIC0gMSkgPDwgUkFERU9OX0NSVENfVl9UT1RBTF9TSElGVCk7CisKKwl0bXAgPSAqdl9zeW5jX3N0cnRfd2lkOworCXRtcCAmPSB+UkFERU9OX0NSVENfVl9TWU5DX1NUUlQ7CisJdG1wIHw9ICgoY29uc3RfcHRyLT52ZXJfc3luY3N0YXJ0IC0gMSkgPDwgUkFERU9OX0NSVENfVl9TWU5DX1NUUlRfU0hJRlQpOworCSp2X3N5bmNfc3RydF93aWQgPSB0bXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9wb3N0X2RpdihpbnQgdmFsdWUpCit7CisJaW50IHBvc3RfZGl2OworCXN3aXRjaCAodmFsdWUpIHsKKwljYXNlIDE6IHBvc3RfZGl2ID0gMDsgYnJlYWs7CisJY2FzZSAyOiBwb3N0X2RpdiA9IDE7IGJyZWFrOworCWNhc2UgMzogcG9zdF9kaXYgPSA0OyBicmVhazsKKwljYXNlIDQ6IHBvc3RfZGl2ID0gMjsgYnJlYWs7CisJY2FzZSA2OiBwb3N0X2RpdiA9IDY7IGJyZWFrOworCWNhc2UgODogcG9zdF9kaXYgPSAzOyBicmVhazsKKwljYXNlIDEyOiBwb3N0X2RpdiA9IDc7IGJyZWFrOworCWNhc2UgMTY6CisJZGVmYXVsdDogcG9zdF9kaXYgPSA1OyBicmVhazsKKwl9CisJcmV0dXJuIHBvc3RfZGl2OworfQorCit2b2lkIHJhZGVvbl9sZWdhY3lfdHZfYWRqdXN0X3BsbDEoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgdWludDMyX3QgKmh0b3RhbF9jbnRsLCB1aW50MzJfdCAqcHBsbF9yZWZfZGl2LAorCQkJCSAgdWludDMyX3QgKnBwbGxfZGl2XzMsIHVpbnQzMl90ICpwaXhjbGtzX2NudGwpCit7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCWNvbnN0IHN0cnVjdCByYWRlb25fdHZfbW9kZV9jb25zdGFudHMgKmNvbnN0X3B0cjsKKworCWNvbnN0X3B0ciA9IHJhZGVvbl9sZWdhY3lfdHZfZ2V0X3N0ZF9tb2RlKHJhZGVvbl9lbmNvZGVyLCBOVUxMKTsKKwlpZiAoIWNvbnN0X3B0cikKKwkJcmV0dXJuOworCisJKmh0b3RhbF9jbnRsID0gKGNvbnN0X3B0ci0+aG9yX3RvdGFsICYgMHg3KSB8IFJBREVPTl9IVE9UX0NOVExfVkdBX0VOOworCisJKnBwbGxfcmVmX2RpdiA9IGNvbnN0X3B0ci0+Y3J0Y1BMTF9NOworCisJKnBwbGxfZGl2XzMgPSAoY29uc3RfcHRyLT5jcnRjUExMX04gJiAweDdmZikgfCAoZ2V0X3Bvc3RfZGl2KGNvbnN0X3B0ci0+Y3J0Y1BMTF9wb3N0X2RpdikgPDwgMTYpOworCSpwaXhjbGtzX2NudGwgJj0gfihSQURFT05fUElYMkNMS19TUkNfU0VMX01BU0sgfCBSQURFT05fUElYQ0xLX1RWX1NSQ19TRUwpOworCSpwaXhjbGtzX2NudGwgfD0gUkFERU9OX1BJWDJDTEtfU1JDX1NFTF9QMlBMTENMSzsKK30KKwordm9pZCByYWRlb25fbGVnYWN5X3R2X2FkanVzdF9wbGwyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgIHVpbnQzMl90ICpodG90YWwyX2NudGwsIHVpbnQzMl90ICpwMnBsbF9yZWZfZGl2LAorCQkJCSAgdWludDMyX3QgKnAycGxsX2Rpdl8wLCB1aW50MzJfdCAqcGl4Y2xrc19jbnRsKQoreworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwljb25zdCBzdHJ1Y3QgcmFkZW9uX3R2X21vZGVfY29uc3RhbnRzICpjb25zdF9wdHI7CisKKwljb25zdF9wdHIgPSByYWRlb25fbGVnYWN5X3R2X2dldF9zdGRfbW9kZShyYWRlb25fZW5jb2RlciwgTlVMTCk7CisJaWYgKCFjb25zdF9wdHIpCisJCXJldHVybjsKKworCSpodG90YWwyX2NudGwgPSAoY29uc3RfcHRyLT5ob3JfdG90YWwgJiAweDcpOworCisJKnAycGxsX3JlZl9kaXYgPSBjb25zdF9wdHItPmNydGNQTExfTTsKKworCSpwMnBsbF9kaXZfMCA9IChjb25zdF9wdHItPmNydGNQTExfTiAmIDB4N2ZmKSB8IChnZXRfcG9zdF9kaXYoY29uc3RfcHRyLT5jcnRjUExMX3Bvc3RfZGl2KSA8PCAxNik7CisJKnBpeGNsa3NfY250bCAmPSB+UkFERU9OX1BJWDJDTEtfU1JDX1NFTF9NQVNLOworCSpwaXhjbGtzX2NudGwgfD0gUkFERU9OX1BJWDJDTEtfU1JDX1NFTF9QMlBMTENMSyB8IFJBREVPTl9QSVhDTEtfVFZfU1JDX1NFTDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbWljcm9jb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9taWNyb2NvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM0OGM5ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9taWNyb2NvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLSAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICovCi0KLSNpZm5kZWYgUkFERU9OX01JQ1JPQ09ERV9ICi0jZGVmaW5lIFJBREVPTl9NSUNST0NPREVfSAotCi0vKiBwcm9kdWN0aW9uIHJhZGVvbiB1Y29kZSByMXh4LXI2eHggKi8KLXN0YXRpYyBjb25zdCB1MzIgUjEwMF9jcF9taWNyb2NvZGVbXVsyXSA9IHsKLSAgICB7IDB4MjEwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MjAwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwYjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NmY1YjRkNGMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGM0YzQyN2YsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NWI1NjhhOTIsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGNhMDljNmQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4YWQ0YzRjNGMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGNlMWFmM2QsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZDhhZmFmYWYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZDY0YzRjZGMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGNkMTBkMTAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwZjAwMDAsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4MzYyZjI0MmQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZjAwMDAsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4MzYyZjI4MmQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwZTcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDJjOTcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwZjAwMDEsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4MzMzYTM3MzAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc3ZWYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAwMDAwMWEgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDB4MDAwMDAwMWUgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAwMDAwMWEgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDB4MDAwMDAwMWUgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMjEsIDB4MDAwMDAwMWEgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDB4MDAwMDAwMWUgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwMmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDY3ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc3ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDM3ZTEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDY3ZTEsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDc3ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc3ZTEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc3ZTEsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MTAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwMmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDY3ZTAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDc2NzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzgsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMzgwMmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI2NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzgsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDAwMmYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDAwMmYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMDAwMTggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDE2MDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwOTgwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4NjRjMDYwM2UsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwODAwMDAsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDQwMDI1MWQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1ODAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjc1ODEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1ODAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjc1ODEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNDksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMTkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMTEwNTUsIDB4MDAwMDAwMTQgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMTIgfSwKLSAgICB7IDB4MDQwMDI1MGYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDUwNGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NjUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NjYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNTgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDFlNjU1YjQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4NDQwMWIwZTQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDFjMTEwZTQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjY2NjcwNjYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwYzI1NjUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNjYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwMDI1NjQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NjYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MDEwNjksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAxMDEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwZDgwZmYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA4MDAwNmMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwZjkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwZTAwZmYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDAwOGYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDAwNWIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNDEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MGMwMDM1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNDkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNTEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDFlNzg1ZjgsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAyMDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwN2UsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDc1NjMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDc1ZjAsIDB4MDAwMDAwMjEgfSwKLSAgICB7IDB4MjAwMDcwNzMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDUwNzMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1MGYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDBhMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwODMsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDA2MDc1ZjAsIDB4MDAwMDAwMjEgfSwKLSAgICB7IDB4MDAwMDc1ZjgsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwODMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYTc1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAyMDc1MGYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwODYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc1NzAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzIsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDBhMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NjgsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwOTUsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwNTgwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MGM2MDc1NjIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwOTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwOTYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwMDcwZTUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwZTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwZTUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwYTgsIDB4MDAwMDAwMWMgfSwKLSAgICB7IDB4MDAwNjUwYWEsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwMDI1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwYWIsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwMDc1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwOTAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwOTAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwZDgwMDIsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDc4MzIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwZTcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDJjOTcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4MjEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4MDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDEyMDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjAwNzcwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDEyMDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjAwMDcwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDEyMDc1MWIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODA0MDc1MGEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODA0MDc1MGIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAxMTAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwZTUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwYzYsIDB4MDAwMDAwMWMgfSwKLSAgICB7IDB4MDAwNjEwYWIsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4ODQ0MDc1YmQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwYWEsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4ODQwMDc1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwYWIsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4ODQ0MDc1YmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwYzksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4ODA0MDc1YmQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODAwMDc1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODA0MDc1YmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAxMDgwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDE0MDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwY2QsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MjBjMDcwMDAsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4MDAwMDAwY2YsIDB4MDAwMDAwMTIgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDA4MDc1MWQsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc3NWMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDBhMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2NjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQ2MDI3NWQsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDFlMDA4MzAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjEwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NjQ2NDYxNGQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4Njk2ODc0MjAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwNzMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwZDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1ZTEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDIzOTQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDgsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUjIwMF9jcF9taWNyb2NvZGVbXVsyXSA9IHsKLSAgICB7IDB4MjEwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MjAwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwYmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYzMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4N2E2ODVlNWQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NWQ1ZDU1ODgsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4Njg2NTkxOTcsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NWRhMTlmNzgsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NWQ1ZDVkNWQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NWRlZTVkNTAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZjJhY2FjYWMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZTc1ZGY5ZTksIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4YjFkZDBlMTEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZTJhZmFmYWYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwZjAwMDAsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4NDUyZjIzMmQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMTMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZjAwMDAsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4NDUyZjI3MmQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwZjAwMDEsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDB4M2U0ZDRhMzcsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc3ZWYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMWEgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDB4MDAwMDAwMWUgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMWEgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDB4MDAwMDAwMWUgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMWEgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDB4MDAwMDAwMWUgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzgwMmEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDY3ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwMTYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc3ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDM3ZTEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDY3ZTEsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDc3ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc3ZTEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc3ZTEsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MTAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDdmMDA3ZjAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwMmEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDY3ZTAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMzgwMmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzgsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMzgwMmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzgsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMzgwMmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI2NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwMmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzgsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMzgwMmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI3NDMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc2NzgsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDAwMmYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDAwMmYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDAwMzcsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDAwMzcsIDB4MDAwMDAwMTggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDE2MDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwOTgwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4NjRjMDYwNTEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwODAwMDAsIDB4MDAwMDAwMTYgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDQwMDI1MWQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1ODAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjc1ODEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1ODAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjc1ODEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNWEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMTkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMTEwNjQsIDB4MDAwMDAwMTQgfSwKLSAgICB7IDB4MDAwMDAwNjQsIDB4MDAwMDAwMTIgfSwKLSAgICB7IDB4MDQwMDI1MGYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDUwNWUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc1NjUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NjYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDFlNjU1YjQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4NDQwMWIwZjAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDFjMTEwZjAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjY2NjcwNzEsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwYzI1NjUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNzEsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwMDI1NjQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NjYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwNjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MDEwNzQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAxMDEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwZDgwZmYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA4MDAwNzcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwZjkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwZTAwZmYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMDAwNjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc1NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNDEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MGMwMDM1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNDkwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNTEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDFlNzg1ZjgsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAyMDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwODcsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDc1NjMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDc1ZjAsIDB4MDAwMDAwMjEgfSwKLSAgICB7IDB4MjAwMDcwN2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDUwN2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc1NzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzcsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1MGYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDBhMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwOGEsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDA2MDc1ZjAsIDB4MDAwMDAwMjEgfSwKLSAgICB7IDB4MDAwMDc1ZjgsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwOGEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYTc1MGUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAyMDc1MGYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwOGQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc1NzAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NzIsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDBhMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1NjgsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwOTgsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwNTgwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MGM2MDc1NjIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwOWEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA2MDAwOTksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwMDcwZjEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwZjEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwYTcsIDB4MDAwMDAwMWMgfSwKLSAgICB7IDB4MDAwNjUwYTksIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwMDI1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwYWEsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDQwMDc1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwOTAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwOTAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwZDgwMDIsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4MjEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4MDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4MDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDE2NjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjcxY2MsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDI4NmYxY2QsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwYjcsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MjEwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwYmUsIDB4MDAwMDAwMWMgfSwKLSAgICB7IDB4MDAwNjUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwYjAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MzgwNjcwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwYTAwYmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MjAwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDEyMDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjAwNzcwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDEyMDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjAwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwNjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDEyMDc1MWIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODA0MDc1MGEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODA0MDc1MGIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAxMTAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwZjEsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwZDEsIDB4MDAwMDAwMWMgfSwKLSAgICB7IDB4MDAwNjEwYWEsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4ODQ0MDc1YmQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwYTksIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4ODQwMDc1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwNjEwYWEsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4ODQ0MDc1YmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4ODA0MDc1YmQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODAwMDc1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4ODA0MDc1YmMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAxMDgwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDE0MDAwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2MDAwZDgsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MjBjMDcwMDAsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4MDAwMDAwZGEsIDB4MDAwMDAwMTIgfSwKLSAgICB7IDB4MDA4MDAwMDAsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDA4MDc1MWQsIDB4MDAwMDAwMDYgfSwKLSAgICB7IDB4MDAwMDI1YmIsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDQwZDQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc3NWMsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDBhMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2NjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQ2MDI3NWQsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc5OTksIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDBhMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDA2NjEwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQ2MDI5OWIsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4MDAwMDQwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDFlMDA4MzAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MjEwMDcwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDUwMDAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMzgwNTYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDI1ZTAsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc1ZTEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMzgwZWQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDQwMDczOTQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4YzQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4YzUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc4YzYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc5MjQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc5MjUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc5MjYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwZjIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDc5MjQsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc5MjUsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDc5MjYsIDB4MDAwMDAwMDIgfSwKLSAgICB7IDB4MDAwMDAwZjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUjMwMF9jcF9taWNyb2NvZGVbXVsyXSA9IHsKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwYWUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4Njc1NTRiNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE0YTQ0NzUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NTU1MjdkODMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE4YzhiNjUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGFlZjRhZjYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGFlMTRhNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZTQ5Nzk3OTcsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZGI0YWViZGQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4OWNjYzRhNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZDE5ODk4OTgsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGEwZjlhZDYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwNDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOTMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDMsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjY2U4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwM2EsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MjAwMDQ1MWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwNTEsIDB4MDAwMDAwMjggfSwKLSAgICB7IDB4MDAwMDAwNTEsIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDgwMDQ1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGEwNGIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDNjY2E1YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDU0MzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NGNjY2UwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgyNzQ1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMDQ1NjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDA4MDIwNjEsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAyMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDEwMDAwNjQsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAxZjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYzAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMTIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwODIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MTgwMDY1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwOTIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYTIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzQsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwMGU1NjMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMGU1ZjksIDB4MDAwMDAwYzIgfSwKLSAgICB7IDB4MDAwMDAwNjksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwNjksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzcsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGU1ZjksIDB4MDAwMDAwYzIgfSwKLSAgICB7IDB4MDAwMDAwNzcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAxNGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwN2EsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzIsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwODQsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwYjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MThjMGU1NjIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwODYsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDBjMDAwODUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwNzAwZTMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwOTIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwY2EwOTQsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMDQ1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwOTUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMGU1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAxMjAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAxMjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDIsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MmUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDJjY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2UxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwZGUxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYTQsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYTEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwYTYsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwYWQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NzAwY2UwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwYTksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwZWUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MGU1MWIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA4MGU1MGEsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1MGIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNzAwZTMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYzAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwYzIwOTUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDg4MGU1YmQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwYzIwOTQsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMGU1YmIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwYzIwOTUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDg4MGU1YmMsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMDAwYzMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDA4MGU1YmQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1YmMsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMTAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI4MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwYzcsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4NDE4MGUwMDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDAwYzksIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDEwMGU1MWQsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDQ1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDgwYzMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGYzY2UsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzY2YsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGYzZDIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzZDMsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGYzOWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzOWUsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDNjMDA4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MjAwMDQ1ZTAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ZTEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwNzAwZTAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMGUzOTQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4YzQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZTQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZWIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDJjMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZjMsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4YzAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxZDAwMTgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYTAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZmIsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDUwMGEwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUjQyMF9jcF9taWNyb2NvZGVbXVsyXSA9IHsKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwOTksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwOWQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4NGE1NTRiNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE0YTQ0NjcsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NTU1MjZmNzUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGE3ZTdkNjUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ZDlkM2RmZjYsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGFjNTRhNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4Yzg4MjgyODIsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4YmY0YWNmYzEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4ODdiMDRhNGEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4YjU4MzgzODMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4NGEwZjg1YmEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4YjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMTgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4NTcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMWUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwYzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMjgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYwNDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmEsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmMsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMmUsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzIsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYxODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOTMsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzYsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwZDAwMzgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGYzOGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDMsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjY2U4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ4MDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwM2EsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MjAwMDQ1MWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQ1ODAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2U1ODEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNDcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwNTEsIDB4MDAwMDAwMjggfSwKLSAgICB7IDB4MDAwMDAwNTEsIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDgwMDQ1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGEwNGIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDNjY2E1YjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDU0MzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NGNjY2UwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgyNzQ1NjUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNWUsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDgwMDQ1NjQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDA4MDIwNjEsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAyMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDEwMDAwNjQsIDB4MDAwMDAwMTAgfSwKLSAgICB7IDB4MDAxZjIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYzAwZmYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDAwNzIsIDB4MDAwMDAwMzAgfSwKLSAgICB7IDB4MDAwMDAwNTUsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNjksIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGU1ZjksIDB4MDAwMDAwYzIgfSwKLSAgICB7IDB4MDAwMDAwNjksIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAxNGU1MGUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MGU1MGYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwNmMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU1NzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NzIsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1NjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDAwYjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MThjMGU1NjIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwNzgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDBjMDAwNzcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwNzAwYzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1YmMsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4MjEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4MmUsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDJjY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2UxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwZGUxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwOGYsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4MDBjMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwOGMsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwMjAgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwOTgsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NzAwY2UwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxNDAwOTQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwZWUwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI0MGU1MWIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDA4MGU1MGEsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1MGIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNzAwYzcsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYTQsIDB4MDAwMDAwMzggfSwKLSAgICB7IDB4MDA4MGU1YmQsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAwMGU1YmIsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDA4MGU1YmMsIDB4MDAwMDAwMDUgfSwKLSAgICB7IDB4MDAyMTAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDI4MDAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjMDAwYWIsIDB4MDAwMDAwMTggfSwKLSAgICB7IDB4NDE4MGUwMDAsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDAwYWQsIDB4MDAwMDAwMjQgfSwKLSAgICB7IDB4MDEwMDAwMDAsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDEwMGU1MWQsIDB4MDAwMDAwMGMgfSwKLSAgICB7IDB4MDAwMDQ1YmIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDgwYTcsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGYzY2UsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzY2YsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGYzZDIsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzZDMsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGYzOWQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDE0MGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDBjYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDhjMDUzOWUsIDB4MDAwMDAwNDAgfSwKLSAgICB7IDB4MDAwMDgwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDNjMDA4MzAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4NDIwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MjAwMDQ1ZTAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU1ZTEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDAwMDEsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwNzAwYzQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMGUzOTQsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGU4YzQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzUsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU4YzYsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwYzgsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGU5MjgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MjksIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGU5MmEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwY2YsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDJjMDIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwNjAwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZDcsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMDgwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4YzAwMGUwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGUxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwMGUxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZGUsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwZGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDAwMGEwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAxOWUxY2MsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYjAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDUwMGEwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDgwMDQxY2QsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwY2EwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZmIsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwYzIwMDAsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxZDAwMTgsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAxYTAwMDEsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMDAwZmIsIDB4MDAwMDAwMzQgfSwKLSAgICB7IDB4MDAwMDAwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDB4MDUwMGEwNGEsIDB4MDAwMDAwMDggfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLSAgICB7IDAwMDAwMDAwMDAsIDAwMDAwMDAwMDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgUlM2MDBfY3BfbWljcm9jb2RlW11bMl0gPSB7Ci0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMGEwLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMGE0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDRhNTU0YjRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhNGE0NDY3LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDU1NTI2Zjc1LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhN2U3ZDY1LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhZTc0YWY2LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhZDM0YTRhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGQ2ODk4OTg5LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGNkNGFkZGNmLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDhlYmU0YWUyLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweGMzOGE4YThhLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDRhMGY4Y2M4LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDEyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlOGI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlOGI2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDE4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFhLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFjLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODU3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDFlLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDIwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODI1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDIyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBlODMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMGMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMGMxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDI4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMDQxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJhLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJjLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDJlLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDMwLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTg3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDMyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzkzLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM2LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzhhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGQwMDM4LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMDBmMzhlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDQzLCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwY2NlODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0ODAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDNhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDIwMDA0NTFkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlNTgxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0NTgwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlNTgxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDQ3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBhMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDIyMDUxLCAweDAwMDAwMDI4IH0sCi0gICAgeyAweDAwMDAwMDUxLCAweDAwMDAwMDI0IH0sCi0gICAgeyAweDA4MDA0NTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBhMDRiLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTY1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDUyLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAzY2NhNWI0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1NDMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDIyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDRjY2NlMDVlLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4Mjc0NTY1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDVlLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDA0NTY0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDU1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwODAyMDYxLCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMjAyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMGZmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxMDAwMDY0LCAweDAwMDAwMDEwIH0sCi0gICAgeyAweDAwMWYyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWMwMGZmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDAwMDcyLCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDAwMDAwMDU1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTc2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTc3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDY5LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwYzBlNWY5LCAweDAwMDAwMGMyIH0sCi0gICAgeyAweDAwMDAwMDY5LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMTRlNTBlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDBlNTBmLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwYzAwMDZjLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlNTcwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTcxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTcyLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNTY4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDc2LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwMGIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDE4YzBlNTYyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDc4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwYzAwMDc3LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDcwMGQ1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDg0LCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMGNhMDg2LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDA0NWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDg3LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDBlNWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlNWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNWJjLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMTIwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMTIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWIwMDAyLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlODIxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlODJlLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAyY2NhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGNlMWNjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA1MGRlMWNkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDk2LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDAwYzBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMDkzLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDAwMDk4LCAweDAwMDAwMDIwIH0sCi0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDlmLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMGNhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTYwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDcwMGNlMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMTQwMDliLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAyNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMGVlMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyNDAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyNDBlNTFiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwODBlNTBhLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwODBlNTBiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMjIwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDcwMGQ1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGIyLCAweDAwMDAwMDM4IH0sCi0gICAgeyAweDAwMGMyMDg3LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4ODBlNWJkLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMGMyMDg2LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4MDBlNWJiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMGMyMDg3LCAweDAwMDAwMDMwIH0sCi0gICAgeyAweDA4ODBlNWJjLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDAwMGI1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwODBlNWJkLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMDBlNWJiLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwODBlNWJjLCAweDAwMDAwMDA1IH0sCi0gICAgeyAweDAwMjEwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAyODAwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwYzAwMGI5LCAweDAwMDAwMDE4IH0sCi0gICAgeyAweDQxODBlMDAwLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDAwMGJiLCAweDAwMDAwMDI0IH0sCi0gICAgeyAweDAxMDAwMDAwLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAxMDBlNTFkLCAweDAwMDAwMDBjIH0sCi0gICAgeyAweDAwMDA0NWJiLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDA4MGI1LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBmM2NlLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1M2NmLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBmM2QyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1M2QzLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBmMzlkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAxNDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwY2MyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4YzA1MzllLCAweDAwMDAwMDQwIH0sCi0gICAgeyAweDAwMDA4MDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAzYzAwODMwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDQyMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDIwMDA0NWUwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlNWUxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDAwMDAxLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDcwMGQyLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDBlMzk0LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBlOGM0LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOGM1LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOGM2LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTJhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGQ2LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDBlOTI4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTI5LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlOTJhLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGRkLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwZTAwMTE2LCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDcwMGUxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDA4MDA0MDFjLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDIwMDA1MGU3LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDBlMDFkLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGU0LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAyYzAyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDYwMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGViLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMGU4LCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDAwMDA4MDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweGMwMDBlMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMGMyMDAwLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWQwMDE4LCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMWEwMDAxLCAweDAwMDAwMDA0IH0sCi0gICAgeyAweDAwMDAwMGZiLCAweDAwMDAwMDM0IH0sCi0gICAgeyAweDAwMDAwMDRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAweDA1MDBhMDRhLCAweDAwMDAwMDA4IH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0gICAgeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIFJTNjkwX2NwX21pY3JvY29kZVtdWzJdID0gewotICAgIHsgMHgwMDAwMDBkZCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDBkZiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDBhMCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDBhNCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHg0YTU1NGI0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTRhNDQ2NywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg1NTUyNmY3NSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTdlN2Q2NSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YWQ3NGFmNiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YWM5NGE0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhjYzg5ODk4OSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhjMzRhZDNjNSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg4ZTRhNGE0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YThhOGE4YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTBmOGM0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZThiNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZThiNiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxYSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxYywgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxZSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgyNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyMCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgyNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgzMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjBjMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjBjMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjA0MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyYSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyYywgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyZSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzMCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM5MywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM4YSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM4ZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA0MywgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGNjZTgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDAzYSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgyMDAwNDUxZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDU4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA0NywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAzMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAyMjA1MSwgMHgwMDAwMDAyOCB9LAotICAgIHsgMHgwMDAwMDA1MSwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwODAwNDUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwYTA0YiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU2NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1MiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwM2NjYTViNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTQzMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAyMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0Y2NjZTA1ZSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODI3NDU2NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1ZSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwNDU2NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1NSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDgwMjA2MSwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDIwMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDBmZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTAwMDA2NCwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDFmMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFjMDBmZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwMDA3MiwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwMDAwMDA1NSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU3NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA2OSwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGMwZTVmOSwgMHgwMDAwMDBjMiB9LAotICAgIHsgMHgwMDAwMDA2OSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDE0ZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDQwZTUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGMwMDA2YywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU3MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3MiwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2OCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA3NiwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMDBiMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgxOGMwZTU2MiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA3OCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMGMwMDA3NywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDA3MDBjYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA4NCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDBjYTA4NiwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwNDViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjA4NywgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwZTViYywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTViYywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDEyMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDEyMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMiwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyZSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMmNjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTFjYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTBkZTFjZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA5NiwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGMwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA5MywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA5OCwgMHgwMDAwMDAyMCB9LAotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA5ZiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE2MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg3MDBjZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDA5YiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MDBlZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDEwMDAwMCwgMHgwMDAwMDAyYyB9LAotICAgIHsgMHgwMDAwNDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwODAwNDVjOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDI0MDAwNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNGQwYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjQwZTUxYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDgwZTUwYSwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDgwZTUwYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDIyMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDA3MDBjYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBiNywgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDBjMjA4NywgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODgwZTViZCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDBjMjA4NiwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwZTViYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDBjMjA4NywgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODgwZTViYywgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwMDBiYSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDgwZTViZCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDgwZTViYywgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDIxMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjgwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGMwMDBiZSwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHg0MTgwZTAwMCwgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwMDBjMCwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMTAwZTUxZCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwNDViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwODBiYSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwM2MwMDgzMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgyMDAwNDVlMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTVlMSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDA3MDBjOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwZTM5NCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZThjNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZThjNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZThjNiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyYSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBjYywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTkyOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyYSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBkMywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMmMwMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDA2MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBkYiwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDBkOCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHhjMDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDBlMSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDBlMSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDI1MDAxYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDIzMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDI1MDAwNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBlNiwgMHgwMDAwMDAzNCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDI0NDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDVjOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDI0MDAwNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNGQwYiwgMHgwMDAwMDAwYyB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFkMDAxOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFhMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBmYiwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDA0YSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwNTAwYTA0YSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBSNTIwX2NwX21pY3JvY29kZVtdWzJdID0gewotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA5OSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA5ZCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHg0YTU1NGI0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTRhNDQ2NywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg1NTUyNmY3NSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTdlN2Q2NSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhlMGRhZTZmNiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YWM1NGE0YSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhjODgyODI4MiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhiZjRhY2ZjMSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg4N2IwNGFkNSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHhiNTgzODM4MywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHg0YTBmODViYSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZThiNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZThiNiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxYSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxYywgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTg1NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAxZSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgyNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyMCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgyNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTgzMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjBjMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjBjMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyYSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyYywgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAyZSwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzMCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzMiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjE4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM5MywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzNiwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM4YSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBkMDAzOCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZjM4ZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA0MywgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGNjZTgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDAzYSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgyMDAwNDUxZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDU4MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA0NywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAzMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAyMjA1MSwgMHgwMDAwMDAyOCB9LAotICAgIHsgMHgwMDAwMDA1MSwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwODAwNDUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwYTA0YiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU2NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1MiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwM2NjYTViNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTQzMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAyMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0Y2NjZTA1ZSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODI3NDU2NSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1ZSwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwODAwNDU2NCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA1NSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDgwMjA2MSwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDIwMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDBmZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTAwMDA2NCwgMHgwMDAwMDAxMCB9LAotICAgIHsgMHgwMDFmMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFjMDBmZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwMDA3MiwgMHgwMDAwMDAzMCB9LAotICAgIHsgMHgwMDAwMDA1NSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU3NiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3NywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA2OSwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGMwZTVmOSwgMHgwMDAwMDBjMiB9LAotICAgIHsgMHgwMDAwMDA2OSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDE0ZTUwZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDQwZTUwZiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGMwMDA2YywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTU3MCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3MSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU3MiwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTU2OCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA3NiwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMDBiMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgxOGMwZTU2MiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA3OCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMGMwMDA3NywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDA3MDBjNywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA4MCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTViYywgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTgyZSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMmNjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjZTFjYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTBkZTFjZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA4ZiwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHgwMGMwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDA4YywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwMDA5MSwgMHgwMDAwMDAyMCB9LAotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDA5OCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE2MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg3MDBjZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDE0MDA5NCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MDBlZTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjQwZTUxYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDgwZTUwYSwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDgwZTUwYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDIyMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDA3MDBjNywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBhNCwgMHgwMDAwMDAzOCB9LAotICAgIHsgMHgwMDgwZTViZCwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDgwZTViYywgMHgwMDAwMDAwNSB9LAotICAgIHsgMHgwMDIxMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMjgwMDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGMwMDBhYiwgMHgwMDAwMDAxOCB9LAotICAgIHsgMHg0MTgwZTAwMCwgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwMDBhZCwgMHgwMDAwMDAyNCB9LAotICAgIHsgMHgwMTAwMDAwMCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMTAwZTUxZCwgMHgwMDAwMDAwYyB9LAotICAgIHsgMHgwMDAwNDViYiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwODBhNywgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZjNjZSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwOGMwNTNjZiwgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZjNkMiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwOGMwNTNkMywgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZjM5ZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwOGMwNTM5ZSwgMHgwMDAwMDA0MCB9LAotICAgIHsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwM2MwMDgzMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgyMDAwNDVlMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTVlMSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDAwMSwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDA3MDBjNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwZTM5NCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZThjNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZThjNSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZThjNiwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyYSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBjOCwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwZTkyOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyOSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTkyYSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBjZiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHhkZWFkYmVlZiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwMDExNiwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDA3MDBkMywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNTBlNywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDA3MDBkNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDAxYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwZTAxZCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMmMwMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDA2MDAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBkZSwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDBkYiwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwODAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHhjMDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwZTFjYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTAwZTFjZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBlNSwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDBlMSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDE5ZTFjYywgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwNTAwYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwODAwNDFjZCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBmYiwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDA0YSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFkMDAxOCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDFhMDAwMSwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwMDBmYiwgMHgwMDAwMDAzNCB9LAotICAgIHsgMHgwMDAwMDA0YSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMHgwNTAwYTA0YSwgMHgwMDAwMDAwOCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotICAgIHsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotfTsKLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCAzYjA5YTFmLi41NzBhNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC0xNzUsNiArMTc1LDE1IEBACiAJZW51bSByYWRlb25fY29ubmVjdG9yX3RhYmxlIGNvbm5lY3Rvcl90YWJsZTsKIAlib29sIG1vZGVfY29uZmlnX2luaXRpYWxpemVkOwogCXN0cnVjdCByYWRlb25fY3J0YyAqY3J0Y3NbMl07CisJLyogRFZJLUkgcHJvcGVydGllcyAqLworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmNvaGVyZW50X21vZGVfcHJvcGVydHk7CisJLyogREFDIGVuYWJsZSBsb2FkIGRldGVjdCAqLworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmxvYWRfZGV0ZWN0X3Byb3BlcnR5OworCS8qIFRWIHN0YW5kYXJkIGxvYWQgZGV0ZWN0ICovCisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfc3RkX3Byb3BlcnR5OworCS8qIGxlZ2FjeSBUTURTIFBMTCBkZXRlY3QgKi8KKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0bWRzX3BsbF9wcm9wZXJ0eTsKKwogfTsKIAogc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSB7CkBAIC0xODgsNiArMTk3LDIxIEBACiAJdWludDMyX3QgZmxhZ3M7CiB9OwogCisjZGVmaW5lIE1BWF9IX0NPREVfVElNSU5HX0xFTiAzMgorI2RlZmluZSBNQVhfVl9DT0RFX1RJTUlOR19MRU4gMzIKKworLyogbmVlZCB0byBzdG9yZSB0aGVzZSBhcyByZWFkaW5nCisgICBiYWNrIGNvZGUgdGFibGVzIGlzIGV4Y2Vzc2l2ZSAqLworc3RydWN0IHJhZGVvbl90dl9yZWdzIHsKKwl1aW50MzJfdCB0dl91dl9hZHI7CisJdWludDMyX3QgdGltaW5nX2NudGw7CisJdWludDMyX3QgaHJlc3RhcnQ7CisJdWludDMyX3QgdnJlc3RhcnQ7CisJdWludDMyX3QgZnJlc3RhcnQ7CisJdWludDE2X3QgaF9jb2RlX3RpbWluZ1tNQVhfSF9DT0RFX1RJTUlOR19MRU5dOworCXVpbnQxNl90IHZfY29kZV90aW1pbmdbTUFYX1ZfQ09ERV9USU1JTkdfTEVOXTsKK307CisKIHN0cnVjdCByYWRlb25fY3J0YyB7CiAJc3RydWN0IGRybV9jcnRjIGJhc2U7CiAJaW50IGNydGNfaWQ7CkBAIC0xOTUsOCArMjE5LDYgQEAKIAlib29sIGVuYWJsZWQ7CiAJYm9vbCBjYW5fdGlsZTsKIAl1aW50MzJfdCBjcnRjX29mZnNldDsKLQlzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyICpmYmRldl9mYjsKLQlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVfc2V0OwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqY3Vyc29yX2JvOwogCXVpbnQ2NF90IGN1cnNvcl9hZGRyOwogCWludCBjdXJzb3Jfd2lkdGg7CkBAIC0yMDQsNyArMjI2LDYgQEAKIAl1aW50MzJfdCBsZWdhY3lfZGlzcGxheV9iYXNlX2FkZHI7CiAJdWludDMyX3QgbGVnYWN5X2N1cnNvcl9vZmZzZXQ7CiAJZW51bSByYWRlb25fcm14X3R5cGUgcm14X3R5cGU7Ci0JdWludDMyX3QgZGV2aWNlczsKIAlmaXhlZDIwXzEyIHZzYzsKIAlmaXhlZDIwXzEyIGhzYzsKIAlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOwpAQCAtMjM2LDcgKzI1NywxMyBAQAogCXVpbnQzMl90IG50c2NfdHZkYWNfYWRqOwogCXVpbnQzMl90IHBhbF90dmRhY19hZGo7CiAKKwlpbnQgICAgICAgICAgICAgICBoX3BvczsKKwlpbnQgICAgICAgICAgICAgICB2X3BvczsKKwlpbnQgICAgICAgICAgICAgICBoX3NpemU7CisJaW50ICAgICAgICAgICAgICAgc3VwcG9ydGVkX3R2X3N0ZHM7CisJYm9vbCAgICAgICAgICAgICAgdHZfb247CiAJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZDsKKwlzdHJ1Y3QgcmFkZW9uX3R2X3JlZ3MgdHY7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgewpAQCAtMjU1LDEwICsyODIsMTUgQEAKIAlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAorc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjIHsKKwllbnVtIHJhZGVvbl90dl9zdGQgdHZfc3RkOworfTsKKwogc3RydWN0IHJhZGVvbl9lbmNvZGVyIHsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgYmFzZTsKIAl1aW50MzJfdCBlbmNvZGVyX2lkOwogCXVpbnQzMl90IGRldmljZXM7CisJdWludDMyX3QgYWN0aXZlX2RldmljZTsKIAl1aW50MzJfdCBmbGFnczsKIAl1aW50MzJfdCBwaXhlbF9jbG9jazsKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKQEAgLTI3Niw4ICszMDgsMTIgQEAKIAl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CiAJdWludDMyX3QgZGV2aWNlczsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICpkZGNfYnVzOwotCWludCB1c2VfZGlnaXRhbDsKKwlib29sIHVzZV9kaWdpdGFsOworCS8qIHdlIG5lZWQgdG8gbWluZCB0aGUgRURJRCBiZXR3ZWVuIGRldGVjdAorCSAgIGFuZCBnZXQgbW9kZXMgZHVlIHRvIGFuYWxvZy9kaWdpdGFsL3R2ZW5jb2RlciAqLworCXN0cnVjdCBlZGlkICplZGlkOwogCXZvaWQgKmNvbl9wcml2OworCWJvb2wgZGFjX2xvYWRfZGV0ZWN0OwogfTsKIAogc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciB7CkBAIC0zMTAsNiArMzQ2LDcgQEAKIHN0cnVjdCBkcm1fZW5jb2RlciAqcmFkZW9uX2VuY29kZXJfbGVnYWN5X3RtZHNfZXh0X2FkZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgYmlvc19pbmRleCk7CiBleHRlcm4gdm9pZCBhdG9tYmlvc19leHRlcm5hbF90bWRzX3NldHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IGFjdGlvbik7CiBleHRlcm4gaW50IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiAKIGV4dGVybiB2b2lkIHJhZGVvbl9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiBleHRlcm4gaW50IGF0b21iaW9zX2NydGNfc2V0X2Jhc2Uoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCkBAIC0zMzcsMTYgKzM3NCwxOCBAQAogZXh0ZXJuIGJvb2wgcmFkZW9uX2NvbWJpb3NfZ2V0X2Nsb2NrX2luZm8oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICoKIHJhZGVvbl9hdG9tYmlvc19nZXRfbHZkc19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2Rlcik7Ci1leHRlcm4gc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICoKLXJhZGVvbl9hdG9tYmlvc19nZXRfdG1kc19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2Rlcik7Citib29sIHJhZGVvbl9hdG9tYmlvc19nZXRfdG1kc19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfaW50X3RtZHMgKnRtZHMpOworYm9vbCByYWRlb25fbGVnYWN5X2dldF90bWRzX2luZm9fZnJvbV9jb21iaW9zKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJICAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzKTsKK2Jvb2wgcmFkZW9uX2xlZ2FjeV9nZXRfdG1kc19pbmZvX2Zyb21fdGFibGUoc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzKTsKIGV4dGVybiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMgKgogcmFkZW9uX2F0b21iaW9zX2dldF9wcmltYXJ5X2RhY19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2Rlcik7CiBleHRlcm4gc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqCiByYWRlb25fYXRvbWJpb3NfZ2V0X3R2X2RhY19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2Rlcik7CiBleHRlcm4gc3RydWN0IHJhZGVvbl9lbmNvZGVyX2x2ZHMgKgogcmFkZW9uX2NvbWJpb3NfZ2V0X2x2ZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOwotZXh0ZXJuIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9pbnRfdG1kcyAqCi1yYWRlb25fY29tYmlvc19nZXRfdG1kc19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2Rlcik7CiBleHRlcm4gdm9pZCByYWRlb25fY29tYmlvc19nZXRfZXh0X3RtZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpOwogZXh0ZXJuIHN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKgogcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2RhY19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2Rlcik7CkBAIC0zNTYsNiArMzk1LDggQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9jb21iaW9zX2luaXRpYWxpemVfYmlvc19zY3JhdGNoX3JlZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCByYWRlb25fYXRvbV9vdXRwdXRfbG9jayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wgbG9jayk7CiBleHRlcm4gdm9pZCByYWRlb25fYXRvbV9pbml0aWFsaXplX2Jpb3Nfc2NyYXRjaF9yZWdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3NhdmVfYmlvc19zY3JhdGNoX3JlZ3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQKIHJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2NydGNfc2NyYXRjaF9yZWdzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IGNydGMpOwogZXh0ZXJuIHZvaWQKQEAgLTM5Niw2ICs0MzcsMTkgQEAKIGJvb2wgcmFkZW9uX2NydGNfc2NhbGluZ19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKTsKLXZvaWQgYXRvbV9ydjUxNV9mb3JjZV90dl9zY2FsZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBhdG9tX3J2NTE1X2ZvcmNlX3R2X3NjYWxlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0Yyk7CiAKKy8qIGxlZ2FjeSB0diAqLwordm9pZCByYWRlb25fbGVnYWN5X3R2X2FkanVzdF9jcnRjX3JlZyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAgdWludDMyX3QgKmhfdG90YWxfZGlzcCwgdWludDMyX3QgKmhfc3luY19zdHJ0X3dpZCwKKwkJCQkgICAgICB1aW50MzJfdCAqdl90b3RhbF9kaXNwLCB1aW50MzJfdCAqdl9zeW5jX3N0cnRfd2lkKTsKK3ZvaWQgcmFkZW9uX2xlZ2FjeV90dl9hZGp1c3RfcGxsMShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICB1aW50MzJfdCAqaHRvdGFsX2NudGwsIHVpbnQzMl90ICpwcGxsX3JlZl9kaXYsCisJCQkJICB1aW50MzJfdCAqcHBsbF9kaXZfMywgdWludDMyX3QgKnBpeGNsa3NfY250bCk7Cit2b2lkIHJhZGVvbl9sZWdhY3lfdHZfYWRqdXN0X3BsbDIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgdWludDMyX3QgKmh0b3RhbDJfY250bCwgdWludDMyX3QgKnAycGxsX3JlZl9kaXYsCisJCQkJICB1aW50MzJfdCAqcDJwbGxfZGl2XzAsIHVpbnQzMl90ICpwaXhjbGtzX2NudGwpOwordm9pZCByYWRlb25fbGVnYWN5X3R2X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKaW5kZXggYjg1ZmI4My4uNzNhZjQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKQEAgLTE4OCw2ICsxODgsNyBAQAogCWlmIChwdHIpIHsKIAkJKnB0ciA9IHJvYmotPmtwdHI7CiAJfQorCXJhZGVvbl9vYmplY3RfY2hlY2tfdGlsaW5nKHJvYmosIDAsIDApOwogCXJldHVybiAwOwogfQogCkBAIC0yMDAsNiArMjAxLDcgQEAKIAl9CiAJcm9iai0+a3B0ciA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJnJvYmotPnRvYmoubG9jayk7CisJcmFkZW9uX29iamVjdF9jaGVja190aWxpbmcocm9iaiwgMCwgMCk7CiAJdHRtX2JvX2t1bm1hcCgmcm9iai0+a21hcCk7CiB9CiAKQEAgLTM2OSw2ICszNzEsMTQgQEAKIAogaW50IHJhZGVvbl9vYmplY3RfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwkvKiBBZGQgYW4gTVRSUiBmb3IgdGhlIFZSQU0gKi8KKwlyZGV2LT5tYy52cmFtX210cnIgPSBtdHJyX2FkZChyZGV2LT5tYy5hcGVyX2Jhc2UsIHJkZXYtPm1jLmFwZXJfc2l6ZSwKKwkJCU1UUlJfVFlQRV9XUkNPTUIsIDEpOworCURSTV9JTkZPKCJEZXRlY3RlZCBWUkFNIFJBTT0lbGx1TSwgQkFSPSVsbHVNXG4iLAorCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPj4gMjAsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+bWMuYXBlcl9zaXplID4+IDIwKTsKKwlEUk1fSU5GTygiUkFNIHdpZHRoICVkYml0cyAlY0RSXG4iLAorCQkJcmRldi0+bWMudnJhbV93aWR0aCwgcmRldi0+bWMudnJhbV9pc19kZHIgPyAnRCcgOiAnUycpOwogCXJldHVybiByYWRlb25fdHRtX2luaXQocmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKaW5kZXggNDczZTQ3Ny4uMTBlOGFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKQEAgLTM3LDYgKzM3LDcgQEAKICAqIFRUTS4KICAqLwogc3RydWN0IHJhZGVvbl9tbWFuIHsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYgICAgICAgIGJvX2dsb2JhbF9yZWY7CiAJc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlCW1lbV9nbG9iYWxfcmVmOwogCWJvb2wJCQkJbWVtX2dsb2JhbF9yZWZlcmVuY2VkOwogCXN0cnVjdCB0dG1fYm9fZGV2aWNlCQliZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAppbmRleCA0ZGY0M2Y2Li4yMWRhODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaApAQCAtMTk0NSw2ICsxOTQ1LDExIEBACiAjICAgICAgIGRlZmluZSBSQURFT05fVFhGT1JNQVRfRFhUMSAgICAgICAgICAgICAgICgxMiA8PCAgMCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9UWEZPUk1BVF9EWFQyMyAgICAgICAgICAgICAgKDE0IDw8ICAwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX1RYRk9STUFUX0RYVDQ1ICAgICAgICAgICAgICAoMTUgPDwgIDApCisjCWRlZmluZSBSQURFT05fVFhGT1JNQVRfU0hBRE9XMTYgICAgICAgICAgICgxNiA8PCAgMCkKKyMJZGVmaW5lIFJBREVPTl9UWEZPUk1BVF9TSEFET1czMiAgICAgICAgICAgKDE3IDw8ICAwKQorIyAgICAgICBkZWZpbmUgUkFERU9OX1RYRk9STUFUX0RVRFY4OCAgICAgICAgICAgICAoMTggPDwgIDApCisjICAgICAgIGRlZmluZSBSQURFT05fVFhGT1JNQVRfTERVRFY2NTUgICAgICAgICAgICgxOSA8PCAgMCkKKyMgICAgICAgZGVmaW5lIFJBREVPTl9UWEZPUk1BVF9MRFVEVVY4ODg4ICAgICAgICAgKDIwIDw8ICAwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLICAgICAgICAoMzEgPDwgIDApCiAjICAgICAgIGRlZmluZSBSQURFT05fVFhGT1JNQVRfRk9STUFUX1NISUZUICAgICAgIDAKICMgICAgICAgZGVmaW5lIFJBREVPTl9UWEZPUk1BVF9BUFBMRV9ZVVZfTU9ERSAgICAgKDEgIDw8ICA1KQpAQCAtMjIwMyw3ICsyMjA4LDcgQEAKICMgICAgICAgZGVmaW5lIFJBREVPTl9ST1BfRU5BQkxFICAgICAgICAgICAgICAgKDEgIDw8ICA2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX1NURU5DSUxfRU5BQkxFICAgICAgICAgICAoMSAgPDwgIDcpCiAjICAgICAgIGRlZmluZSBSQURFT05fWl9FTkFCTEUgICAgICAgICAgICAgICAgICgxICA8PCAgOCkKLSMgICAgICAgZGVmaW5lIFJBREVPTl9ERVBUSF9YWl9PRkZFU1RfRU5BQkxFICAgKDEgIDw8ICA5KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSAgICAoMSAgPDwgIDkpCiAjICAgICAgIGRlZmluZSBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQgIDEwCiAKICMgICAgICAgZGVmaW5lIFJBREVPTl9DT0xPUl9GT1JNQVRfQVJHQjE1NTUgICAgMwpAQCAtMjc3Myw3ICsyNzc4LDEyIEBACiAjICAgICAgIGRlZmluZSBSMjAwX1RYRk9STUFUX0RYVDEJCSgxMiA8PCAwKQogIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9EWFQyMwkJKDE0IDw8IDApCiAjICAgICAgIGRlZmluZSBSMjAwX1RYRk9STUFUX0RYVDQ1CQkoMTUgPDwgMCkKKyMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfRFZEVTg4CQkoMTggPDwgMCkKKyMgICAgICAgZGVmaW5lIFIyMDBfVFhGT1JNQVRfTERWRFU2NTUJCSgxOSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9MRFZEVTg4ODgJCSgyMCA8PCAwKQorIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9HUjE2MTYJCSgyMSA8PCAwKQogIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9BQkdSODg4OAkJKDIyIDw8IDApCisjICAgICAgIGRlZmluZSBSMjAwX1RYRk9STUFUX0JHUjExMTExMAkJKDIzIDw8IDApCiAjICAgICAgIGRlZmluZSBSMjAwX1RYRk9STUFUX0ZPUk1BVF9NQVNLCSgzMSA8PAkwKQogIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9GT1JNQVRfU0hJRlQJMAogIyAgICAgICBkZWZpbmUgUjIwMF9UWEZPUk1BVF9BTFBIQV9JTl9NQVAJKDEgPDwgNikKQEAgLTI4MTgsNiArMjgyOCwxMyBAQAogI2RlZmluZSBSMjAwX1BQX1RYUElUQ0hfNAkJCTB4MmM5MCAvKiBOUE9UIG9ubHkgKi8KICNkZWZpbmUgUjIwMF9QUF9UWFBJVENIXzUJCQkweDJjYjAgLyogTlBPVCBvbmx5ICovCiAKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19GQUNFU18wCQkJMHgyYzE4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMQkJCTB4MmMzOAorI2RlZmluZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzIJCQkweDJjNTgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19GQUNFU18zCQkJMHgyYzc4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNAkJCTB4MmM5OAorI2RlZmluZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzUJCQkweDJjYjgKKwogI2RlZmluZSBSMjAwX1BQX1RYT0ZGU0VUXzAJCQkweDJkMDAKICMgICAgICAgZGVmaW5lIFIyMDBfVFhPX0VORElBTl9OT19TV0FQCQkoMCA8PCAwKQogIyAgICAgICBkZWZpbmUgUjIwMF9UWE9fRU5ESUFOX0JZVEVfU1dBUAkoMSA8PCAwKQpAQCAtMjgyOSwxMSArMjg0Niw0NCBAQAogIyAgICAgICBkZWZpbmUgUjIwMF9UWE9fTUlDUk9fVElMRQkJKDEgPDwgMykKICMgICAgICAgZGVmaW5lIFIyMDBfVFhPX09GRlNFVF9NQVNLCQkweGZmZmZmZmUwCiAjICAgICAgIGRlZmluZSBSMjAwX1RYT19PRkZTRVRfU0hJRlQJCTUKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMCAgICAgICAgIDB4MmQwNAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl8wICAgICAgICAgMHgyZDA4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzAgICAgICAgICAweDJkMGMKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfMCAgICAgICAgIDB4MmQxMAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV8wICAgICAgICAgMHgyZDE0CisKICNkZWZpbmUgUjIwMF9QUF9UWE9GRlNFVF8xCQkJMHgyZDE4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzEgICAgICAgICAweDJkMWMKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfMSAgICAgICAgIDB4MmQyMAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM18xICAgICAgICAgMHgyZDI0CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzEgICAgICAgICAweDJkMjgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfMSAgICAgICAgIDB4MmQyYworCiAjZGVmaW5lIFIyMDBfUFBfVFhPRkZTRVRfMgkJCTB4MmQzMAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8yICAgICAgICAgMHgyZDM0CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzIgICAgICAgICAweDJkMzgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfMiAgICAgICAgIDB4MmQzYworI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF8yICAgICAgICAgMHgyZDQwCisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzIgICAgICAgICAweDJkNDQKKwogI2RlZmluZSBSMjAwX1BQX1RYT0ZGU0VUXzMJCQkweDJkNDgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMyAgICAgICAgIDB4MmQ0YworI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMl8zICAgICAgICAgMHgyZDUwCisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YzXzMgICAgICAgICAweDJkNTQKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjRfMyAgICAgICAgIDB4MmQ1OAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNV8zICAgICAgICAgMHgyZDVjCiAjZGVmaW5lIFIyMDBfUFBfVFhPRkZTRVRfNAkJCTB4MmQ2MAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV80ICAgICAgICAgMHgyZDY0CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzQgICAgICAgICAweDJkNjgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjNfNCAgICAgICAgIDB4MmQ2YworI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GNF80ICAgICAgICAgMHgyZDcwCisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y1XzQgICAgICAgICAweDJkNzQKICNkZWZpbmUgUjIwMF9QUF9UWE9GRlNFVF81CQkJMHgyZDc4CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzUgICAgICAgICAweDJkN2MKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfNSAgICAgICAgIDB4MmQ4MAorI2RlZmluZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GM181ICAgICAgICAgMHgyZDg0CisjZGVmaW5lIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0Y0XzUgICAgICAgICAweDJkODgKKyNkZWZpbmUgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjVfNSAgICAgICAgIDB4MmQ4YwogCiAjZGVmaW5lIFIyMDBfUFBfVEZBQ1RPUl8wCQkJMHgyZWUwCiAjZGVmaW5lIFIyMDBfUFBfVEZBQ1RPUl8xCQkJMHgyZWU0CkBAIC0zMTc1LDYgKzMyMjUsMTEgQEAKICMgICAgICAgZGVmaW5lIFIyMDBfRk9SQ0VfSU5PUkRFUl9QUk9DCQkoMTw8MzEpCiAjZGVmaW5lIFIyMDBfUFBfQ05UTF9YCQkJCTB4MmNjNAogI2RlZmluZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzAJCQkweDJjMWMKKyNkZWZpbmUgUjIwMF9QUF9UWE1VTFRJX0NUTF8xCQkJMHgyYzNjCisjZGVmaW5lIFIyMDBfUFBfVFhNVUxUSV9DVExfMgkJCTB4MmM1YworI2RlZmluZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzMJCQkweDJjN2MKKyNkZWZpbmUgUjIwMF9QUF9UWE1VTFRJX0NUTF80CQkJMHgyYzljCisjZGVmaW5lIFIyMDBfUFBfVFhNVUxUSV9DVExfNQkJCTB4MmNiYwogI2RlZmluZSBSMjAwX1NFX1ZUWF9TVEFURV9DTlRMCQkJMHgyMTgwCiAjICAgICAgIGRlZmluZSBSMjAwX1VQREFURV9VU0VSX0NPTE9SXzBfRU5BX01BU0sgKDE8PDE2KQogCkBAIC0zMjAwLDYgKzMyNTUsMjQgQEAKICNkZWZpbmUgUkFERU9OX0NQX1JCX1dQVFIgICAgICAgICAgICAgICAgICAgMHgwNzE0CiAjZGVmaW5lIFJBREVPTl9DUF9SQl9SUFRSX1dSICAgICAgICAgICAgICAgIDB4MDcxYwogCisjZGVmaW5lIFJBREVPTl9TQ1JBVENIX1VNU0sJCSAgICAweDA3NzAKKyNkZWZpbmUgUkFERU9OX1NDUkFUQ0hfQUREUgkJICAgIDB4MDc3NAorCisjZGVmaW5lIFI2MDBfQ1BfUkJfQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4YzEwMAorI2RlZmluZSBSNjAwX0NQX1JCX0NOVEwgICAgICAgICAgICAgICAgICAgICAweGMxMDQKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQlVGU1ooeCkgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9SQl9CTEtTWih4KSAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1JCX05PX1VQREFURSAgICAgICAgICAgICgxIDw8IDI3KQorIyAgICAgICBkZWZpbmUgUjYwMF9SQl9SUFRSX1dSX0VOQSAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSX1dSICAgICAgICAgICAgICAgICAgMHhjMTA4CisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUl9BRERSICAgICAgICAgICAgICAgIDB4YzEwYworI2RlZmluZSBSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSAgICAgICAgICAgICAweGMxMTAKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSICAgICAgICAgICAgICAgICAgICAgMHhjMTE0CisjZGVmaW5lIFI2MDBfQ1BfUkJfV1BUUl9BRERSICAgICAgICAgICAgICAgIDB4YzExOAorI2RlZmluZSBSNjAwX0NQX1JCX1dQVFJfQUREUl9ISSAgICAgICAgICAgICAweGMxMWMKKyNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSICAgICAgICAgICAgICAgICAgICAgMHg4NzAwCisjZGVmaW5lIFI2MDBfQ1BfUkJfV1BUUl9ERUxBWSAgICAgICAgICAgICAgIDB4ODcwNAorCiAjZGVmaW5lIFJBREVPTl9DUF9JQl9CQVNFICAgICAgICAgICAgICAgICAgIDB4MDczOAogI2RlZmluZSBSQURFT05fQ1BfSUJfQlVGU1ogICAgICAgICAgICAgICAgICAweDA3M2MKIApAQCAtMzQwNyw3ICszNDgwLDkgQEAKICMgICAgICAgZGVmaW5lIFJBREVPTl9SR0JfQ09OVkVSVF9CWV9QQVNTCSAgKDEgPDwgMTApCiAjICAgICAgIGRlZmluZSBSQURFT05fVVZSQU1fUkVBRF9NQVJHSU5fU0hJRlQJICAxNgogIyAgICAgICBkZWZpbmUgUkFERU9OX0ZJRk9SQU1fRkZNQUNST19SRUFEX01BUkdJTl9TSElGVAkgIDIwCi0jCWRlZmluZSBSQURFT05fVFZPVVRfU0NBTEVfRU4JCSAgKDEgPDwgMjYpCisjICAgICAgIGRlZmluZSBSQURFT05fUkdCX0FUVEVOX1NFTCh4KSAgICAgICAgICAgICgoeCkgPDwgMjQpCisjICAgICAgIGRlZmluZSBSQURFT05fVFZPVVRfU0NBTEVfRU4gICAgICAgICAgICAgICgxIDw8IDI2KQorIyAgICAgICBkZWZpbmUgUkFERU9OX1JHQl9BVFRFTl9WQUwoeCkgICAgICAgICAgICAoKHgpIDw8IDI4KQogI2RlZmluZSBSQURFT05fVFZfU1lOQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDgKICMgICAgICAgZGVmaW5lIFJBREVPTl9TWU5DX09FICAgICAgICAgICAgICAgICAgICAgKDEgPDwgIDApCiAjICAgICAgIGRlZmluZSBSQURFT05fU1lOQ19PVVQgICAgICAgICAgICAgICAgICAgICgxIDw8ICAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCmluZGV4IDYwZDE1OTMuLjc0N2I0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKQEAgLTU2LDEwICs1NiwxMiBAQAogCQlzZXRfYml0KGksIHJkZXYtPmliX3Bvb2wuYWxsb2NfYm0pOwogCQlyZGV2LT5pYl9wb29sLmlic1tpXS5sZW5ndGhfZHcgPSAwOwogCQkqaWIgPSAmcmRldi0+aWJfcG9vbC5pYnNbaV07CisJCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAobGlzdF9lbXB0eSgmcmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzKSkgewogCQkvKiB3ZSBnbyBkbyBub3RoaW5ncyBoZXJlICovCisJCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJCURSTV9FUlJPUigiYWxsIElCIGFsbG9jYXRlZCBub25lIHNjaGVkdWxlZC5cbiIpOwogCQlyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC02OSwxMCArNzEsMTMgQEAKIAkJCSBzdHJ1Y3QgcmFkZW9uX2liLCBsaXN0KTsKIAlpZiAobmliLT5mZW5jZSA9PSBOVUxMKSB7CiAJCS8qIHdlIGdvIGRvIG5vdGhpbmdzIGhlcmUgKi8KKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAkJRFJNX0VSUk9SKCJJQiAlbHUgc2NoZWR1bGVkIHdpdGhvdXQgYSBmZW5jZS5cbiIsIG5pYi0+aWR4KTsKIAkJciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KKwltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCiAJciA9IHJhZGVvbl9mZW5jZV93YWl0KG5pYi0+ZmVuY2UsIGZhbHNlKTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogSUIoJWx1OjB4JTAxNmxYOiV1KVxuIiwgbmliLT5pZHgsCkBAIC04MSwxMiArODYsMTcgQEAKIAkJZ290byBvdXQ7CiAJfQogCXJhZGVvbl9mZW5jZV91bnJlZigmbmliLT5mZW5jZSk7CisKIAluaWItPmxlbmd0aF9kdyA9IDA7CisKKwkvKiBzY2hlZHVsZWQgbGlzdCBpcyBhY2Nlc3NlZCBoZXJlICovCisJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiAJbGlzdF9kZWwoJm5pYi0+bGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJm5pYi0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwogCSppYiA9IG5pYjsKIG91dDoKLQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogCWlmIChyKSB7CiAJCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwogCX0gZWxzZSB7CkBAIC0xMTEsNDcgKzEyMSwzNiBAQAogCX0KIAlsaXN0X2RlbCgmdG1wLT5saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmdG1wLT5saXN0KTsKLQlpZiAodG1wLT5mZW5jZSkgeworCWlmICh0bXAtPmZlbmNlKQogCQlyYWRlb25fZmVuY2VfdW5yZWYoJnRtcC0+ZmVuY2UpOwotCX0KKwogCXRtcC0+bGVuZ3RoX2R3ID0gMDsKIAljbGVhcl9iaXQodG1wLT5pZHgsIHJkZXYtPmliX3Bvb2wuYWxsb2NfYm0pOwogCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhZGVvbl9pYl9hbGlnbihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCi17Ci0Jd2hpbGUgKChpYi0+bGVuZ3RoX2R3ICYgcmRldi0+Y3AuYWxpZ25fbWFzaykpIHsKLQkJaWItPnB0cltpYi0+bGVuZ3RoX2R3KytdID0gUEFDS0VUMigwKTsKLQl9Ci19Ci0KIGludCByYWRlb25faWJfc2NoZWR1bGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKQogewogCWludCByID0gMDsKIAotCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCXJhZGVvbl9pYl9hbGlnbihyZGV2LCBpYik7CiAJaWYgKCFpYi0+bGVuZ3RoX2R3IHx8ICFyZGV2LT5jcC5yZWFkeSkgewogCQkvKiBUT0RPOiBOb3RoaW5ncyBpbiB0aGUgaWIgd2Ugc2hvdWxkIHJlcG9ydC4gKi8KLQkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAkJRFJNX0VSUk9SKCJyYWRlb246IGNvdWxkbid0IHNjaGVkdWxlIElCKCVsdSkuXG4iLCBpYi0+aWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCiAJLyogNjQgZHdvcmRzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGZlbmNlIHRvbyAqLwogCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIDY0KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogc2NoZWR1bGluZyBJQiBmYWlsbGVkICglZCkuXG4iLCByKTsKLQkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAkJcmV0dXJuIHI7CiAJfQotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX0NQX0lCX0JBU0UsIDEpKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBpYi0+Z3B1X2FkZHIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOworCXJhZGVvbl9yaW5nX2liX2V4ZWN1dGUocmRldiwgaWIpOwogCXJhZGVvbl9mZW5jZV9lbWl0KHJkZXYsIGliLT5mZW5jZSk7Ci0JcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKKwltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZpYi0+bGlzdCwgJnJkZXYtPmliX3Bvb2wuc2NoZWR1bGVkX2licyk7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjIsNiArMTYxLDggQEAKIAlpbnQgaTsKIAlpbnQgciA9IDA7CiAKKwlpZiAocmRldi0+aWJfcG9vbC5yb2JqKQorCQlyZXR1cm4gMDsKIAkvKiBBbGxvY2F0ZSAxTSBvYmplY3QgYnVmZmVyICovCiAJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmliX3Bvb2wuc2NoZWR1bGVkX2licyk7CiAJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsICBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQsCkBAIC0yMTUsNjkgKzIxNiwxNiBAQAogCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CiB9CiAKLWludCByYWRlb25faWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlzdHJ1Y3QgcmFkZW9uX2liICppYjsKLQl1aW50MzJfdCBzY3JhdGNoOwotCXVpbnQzMl90IHRtcCA9IDA7Ci0JdW5zaWduZWQgaTsKLQlpbnQgcjsKLQotCXIgPSByYWRlb25fc2NyYXRjaF9nZXQocmRldiwgJnNjcmF0Y2gpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnICglZCkuXG4iLCByKTsKLQkJcmV0dXJuIHI7Ci0JfQotCVdSRUczMihzY3JhdGNoLCAweENBRkVERUFEKTsKLQlyID0gcmFkZW9uX2liX2dldChyZGV2LCAmaWIpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQlpYi0+cHRyWzBdID0gUEFDS0VUMChzY3JhdGNoLCAwKTsKLQlpYi0+cHRyWzFdID0gMHhERUFEQkVFRjsKLQlpYi0+cHRyWzJdID0gUEFDS0VUMigwKTsKLQlpYi0+cHRyWzNdID0gUEFDS0VUMigwKTsKLQlpYi0+cHRyWzRdID0gUEFDS0VUMigwKTsKLQlpYi0+cHRyWzVdID0gUEFDS0VUMigwKTsKLQlpYi0+cHRyWzZdID0gUEFDS0VUMigwKTsKLQlpYi0+cHRyWzddID0gUEFDS0VUMigwKTsKLQlpYi0+bGVuZ3RoX2R3ID0gODsKLQlyID0gcmFkZW9uX2liX3NjaGVkdWxlKHJkZXYsIGliKTsKLQlpZiAocikgewotCQlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHNjcmF0Y2gpOwotCQlyYWRlb25faWJfZnJlZShyZGV2LCAmaWIpOwotCQlyZXR1cm4gcjsKLQl9Ci0JciA9IHJhZGVvbl9mZW5jZV93YWl0KGliLT5mZW5jZSwgZmFsc2UpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKLQkJdG1wID0gUlJFRzMyKHNjcmF0Y2gpOwotCQlpZiAodG1wID09IDB4REVBREJFRUYpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCURSTV9VREVMQVkoMSk7Ci0JfQotCWlmIChpIDwgcmRldi0+dXNlY190aW1lb3V0KSB7Ci0JCURSTV9JTkZPKCJpYiB0ZXN0IHN1Y2NlZWRlZCBpbiAldSB1c2Vjc1xuIiwgaSk7Ci0JfSBlbHNlIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IGliIHRlc3QgZmFpbGVkIChzcmFjdGgoMHglMDRYKT0weCUwOFgpXG4iLAotCQkJICBzY3JhdGNoLCB0bXApOwotCQlyID0gLUVJTlZBTDsKLQl9Ci0JcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKLQlyYWRlb25faWJfZnJlZShyZGV2LCAmaWIpOwotCXJldHVybiByOwotfQotCiAKIC8qCiAgKiBSaW5nLgogICovCiB2b2lkIHJhZGVvbl9yaW5nX2ZyZWVfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZGV2LT5jcC5ycHRyID0gUlJFRzMyKFJBREVPTl9DUF9SQl9SUFRSKTsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKKwkJcmRldi0+Y3AucnB0ciA9IFJSRUczMihSNjAwX0NQX1JCX1JQVFIpOworCWVsc2UKKwkJcmRldi0+Y3AucnB0ciA9IFJSRUczMihSQURFT05fQ1BfUkJfUlBUUik7CiAJLyogVGhpcyB3b3JrcyBiZWNhdXNlIHJpbmdfc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KIAlyZGV2LT5jcC5yaW5nX2ZyZWVfZHcgPSAocmRldi0+Y3AucnB0ciArIChyZGV2LT5jcC5yaW5nX3NpemUgLyA0KSk7CiAJcmRldi0+Y3AucmluZ19mcmVlX2R3IC09IHJkZXYtPmNwLndwdHI7CkBAIC0zMjAsMTEgKzI2OCwxMCBAQAogCWNvdW50X2R3X3BhZCA9IChyZGV2LT5jcC5hbGlnbl9tYXNrICsgMSkgLQogCQkgICAgICAgKHJkZXYtPmNwLndwdHIgJiByZGV2LT5jcC5hbGlnbl9tYXNrKTsKIAlmb3IgKGkgPSAwOyBpIDwgY291bnRfZHdfcGFkOyBpKyspIHsKLQkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMigwKSk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDIgPDwgMzApOwogCX0KIAlEUk1fTUVNT1JZQkFSUklFUigpOwotCVdSRUczMihSQURFT05fQ1BfUkJfV1BUUiwgcmRldi0+Y3Aud3B0cik7Ci0JKHZvaWQpUlJFRzMyKFJBREVPTl9DUF9SQl9XUFRSKTsKKwlyYWRlb25fY3BfY29tbWl0KHJkZXYpOwogCW11dGV4X3VubG9jaygmcmRldi0+Y3AubXV0ZXgpOwogfQogCkBAIC0zMzQsNDYgKzI4MSw2IEBACiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5jcC5tdXRleCk7CiB9CiAKLWludCByYWRlb25fcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHNjcmF0Y2g7Ci0JdWludDMyX3QgdG1wID0gMDsKLQl1bnNpZ25lZCBpOwotCWludCByOwotCi0JciA9IHJhZGVvbl9zY3JhdGNoX2dldChyZGV2LCAmc2NyYXRjaCk7Ci0JaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IGNwIGZhaWxlZCB0byBnZXQgc2NyYXRjaCByZWcgKCVkKS5cbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0JV1JFRzMyKHNjcmF0Y2gsIDB4Q0FGRURFQUQpOwotCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIDIpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBjcCBmYWlsZWQgdG8gbG9jayByaW5nICglZCkuXG4iLCByKTsKLQkJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCBzY3JhdGNoKTsKLQkJcmV0dXJuIHI7Ci0JfQotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoc2NyYXRjaCwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4REVBREJFRUYpOwotCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7Ci0JZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7Ci0JCXRtcCA9IFJSRUczMihzY3JhdGNoKTsKLQkJaWYgKHRtcCA9PSAweERFQURCRUVGKSB7Ci0JCQlicmVhazsKLQkJfQotCQlEUk1fVURFTEFZKDEpOwotCX0KLQlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgewotCQlEUk1fSU5GTygicmluZyB0ZXN0IHN1Y2NlZWRlZCBpbiAlZCB1c2Vjc1xuIiwgaSk7Ci0JfSBlbHNlIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IHJpbmcgdGVzdCBmYWlsZWQgKHNyYWN0aCgweCUwNFgpPTB4JTA4WClcbiIsCi0JCQkgIHNjcmF0Y2gsIHRtcCk7Ci0JCXIgPSAtRUlOVkFMOwotCX0KLQlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHNjcmF0Y2gpOwotCXJldHVybiByOwotfQotCiBpbnQgcmFkZW9uX3JpbmdfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKQogewogCWludCByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2hhcmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3NoYXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTc3MzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2hhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KLSAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczogRGF2ZSBBaXJsaWUKLSAqICAgICAgICAgIEFsZXggRGV1Y2hlcgotICogICAgICAgICAgSmVyb21lIEdsaXNzZQotICovCi0jaWZuZGVmIF9fUkFERU9OX1NIQVJFX0hfXwotI2RlZmluZSBfX1JBREVPTl9TSEFSRV9IX18KLQotdm9pZCByMTAwX3ZyYW1faW5pdF9zaXplcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLXZvaWQgcnM2OTBfbGluZV9idWZmZXJfYWRqdXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxLAotCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUyKTsKLQotdm9pZCBydjUxNV9iYW5kd2lkdGhfYXZpdm9fdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCAyODgyZjQwLi4zODUzN2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTE1NDYsNyArMTU0Niw3IEBACiAJfSB3aGlsZSAoaSA8IG5ib3gpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlciwgc3RydWN0IGRybV9idWYgKmJ1ZikKK3ZvaWQgcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBkcm1fYnVmICpidWYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBtYXN0ZXItPmRyaXZlcl9wcml2OwpAQCAtMjIxMyw3ICsyMjEzLDEwIEBACiAJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlzYXJlYV9wcml2LT5uYm94ID0gUkFERU9OX05SX1NBUkVBX0NMSVBSRUNUUzsKIAotCXJhZGVvbl9jcF9kaXNwYXRjaF9zd2FwKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXI2MDBfY3BfZGlzcGF0Y2hfc3dhcChkZXYsIGZpbGVfcHJpdik7CisJZWxzZQorCQlyYWRlb25fY3BfZGlzcGF0Y2hfc3dhcChkZXYsIGZpbGVfcHJpdi0+bWFzdGVyKTsKIAlzYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOwogCiAJQ09NTUlUX1JJTkcoKTsKQEAgLTI0MTIsNyArMjQxNSwxMCBAQAogCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAJVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JcmV0ID0gcmFkZW9uX2NwX2Rpc3BhdGNoX3RleHR1cmUoZGV2LCBmaWxlX3ByaXYsIHRleCwgJmltYWdlKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXQgPSByNjAwX2NwX2Rpc3BhdGNoX3RleHR1cmUoZGV2LCBmaWxlX3ByaXYsIHRleCwgJmltYWdlKTsKKwllbHNlCisJCXJldCA9IHJhZGVvbl9jcF9kaXNwYXRjaF90ZXh0dXJlKGRldiwgZmlsZV9wcml2LCB0ZXgsICZpbWFnZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjQ5NSw4ICsyNTAxLDkgQEAKIAkJcmFkZW9uX2NwX2Rpc3BhdGNoX2luZGlyZWN0KGRldiwgYnVmLCBpbmRpcmVjdC0+c3RhcnQsIGluZGlyZWN0LT5lbmQpOwogCX0KIAotCWlmIChpbmRpcmVjdC0+ZGlzY2FyZCkKKwlpZiAoaW5kaXJlY3QtPmRpc2NhcmQpIHsKIAkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIsIGJ1Zik7CisJfQogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKQEAgLTMwMjcsNyArMzAzNCwxMCBAQAogCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKGRldl9wcml2LCAyKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fSVJRX05SOgotCQl2YWx1ZSA9IGRybV9kZXZfdG9faXJxKGRldik7CisJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IDA7CisJCWVsc2UKKwkJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fR0FSVF9CQVNFOgogCQl2YWx1ZSA9IGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0OwpAQCAtMzIyNyw3ICszMjM3LDggQEAKIAlEUk1fSU9DVExfREVGKERSTV9SQURFT05fSVJRX1dBSVQsIHJhZGVvbl9pcnFfd2FpdCwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9TRVRQQVJBTSwgcmFkZW9uX2NwX3NldHBhcmFtLCBEUk1fQVVUSCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX1NVUkZfQUxMT0MsIHJhZGVvbl9zdXJmYWNlX2FsbG9jLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX1NVUkZfRlJFRSwgcmFkZW9uX3N1cmZhY2VfZnJlZSwgRFJNX0FVVEgpCisJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX1NVUkZfRlJFRSwgcmFkZW9uX3N1cmZhY2VfZnJlZSwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9DUywgcjYwMF9jc19sZWdhY3lfaW9jdGwsIERSTV9BVVRIKQogfTsKIAogaW50IHJhZGVvbl9tYXhfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShyYWRlb25faW9jdGxzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggMTVjMzUzMS4uYWNkODg5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTM1LDExICszNSwxNCBAQAogI2luY2x1ZGUgPHR0bS90dG1fbW9kdWxlLmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vcmFkZW9uX2RybS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogCiAjZGVmaW5lIERSTV9GSUxFX1BBR0VfT0ZGU0VUICgweDEwMDAwMDAwMFVMTCA+PiBQQUdFX1NISUZUKQogCitzdGF0aWMgaW50IHJhZGVvbl90dG1fZGVidWdmc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwogc3RhdGljIHN0cnVjdCByYWRlb25fZGV2aWNlICpyYWRlb25fZ2V0X3JkZXYoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9tbWFuICptbWFuOwpAQCAtNzcsOSArODAsMjUgQEAKIAlnbG9iYWxfcmVmLT5yZWxlYXNlID0gJnJhZGVvbl90dG1fbWVtX2dsb2JhbF9yZWxlYXNlOwogCXIgPSB0dG1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOwogCWlmIChyICE9IDApIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgcmVmZXJlbmNpbmcgYSBnbG9iYWwgVFRNIG1lbW9yeSBvYmplY3QuXG4iKTsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgc2V0dGluZyB1cCBUVE0gbWVtb3J5IGFjY291bnRpbmcgIgorCQkJICAic3Vic3lzdGVtLlxuIik7CiAJCXJldHVybiByOwogCX0KKworCXJkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5tZW1fZ2xvYiA9CisJCXJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWYub2JqZWN0OworCWdsb2JhbF9yZWYgPSAmcmRldi0+bW1hbi5ib19nbG9iYWxfcmVmLnJlZjsKKwlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IFRUTV9HTE9CQUxfVFRNX0JPOworCWdsb2JhbF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0IHR0bV9ib19nbG9iYWwpOworCWdsb2JhbF9yZWYtPmluaXQgPSAmdHRtX2JvX2dsb2JhbF9pbml0OworCWdsb2JhbF9yZWYtPnJlbGVhc2UgPSAmdHRtX2JvX2dsb2JhbF9yZWxlYXNlOworCXIgPSB0dG1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOworCWlmIChyICE9IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgc2V0dGluZyB1cCBUVE0gQk8gc3Vic3lzdGVtLlxuIik7CisJCXR0bV9nbG9iYWxfaXRlbV91bnJlZigmcmRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZik7CisJCXJldHVybiByOworCX0KKwogCXJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWZlcmVuY2VkID0gdHJ1ZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg3LDYgKzEwNiw3IEBACiBzdGF0aWMgdm9pZCByYWRlb25fdHRtX2dsb2JhbF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWlmIChyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJlbmNlZCkgeworCQl0dG1fZ2xvYmFsX2l0ZW1fdW5yZWYoJnJkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5yZWYpOwogCQl0dG1fZ2xvYmFsX2l0ZW1fdW5yZWYoJnJkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWYpOwogCQlyZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJlbmNlZCA9IGZhbHNlOwogCX0KQEAgLTI4Niw5ICszMDYsMTEgQEAKIAlyID0gdHRtX2JvX21vdmVfdHRtKGJvLCB0cnVlLCBub193YWl0LCBuZXdfbWVtKTsKIG91dF9jbGVhbnVwOgogCWlmICh0bXBfbWVtLm1tX25vZGUpIHsKLQkJc3Bpbl9sb2NrKCZyZGV2LT5tbWFuLmJkZXYubHJ1X2xvY2spOworCQlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IHJkZXYtPm1tYW4uYmRldi5nbG9iOworCisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlkcm1fbW1fcHV0X2Jsb2NrKHRtcF9tZW0ubW1fbm9kZSk7Ci0JCXNwaW5fdW5sb2NrKCZyZGV2LT5tbWFuLmJkZXYubHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIHI7CkBAIC0zMjMsOSArMzQ1LDExIEBACiAJfQogb3V0X2NsZWFudXA6CiAJaWYgKHRtcF9tZW0ubW1fbm9kZSkgewotCQlzcGluX2xvY2soJnJkZXYtPm1tYW4uYmRldi5scnVfbG9jayk7CisJCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gcmRldi0+bW1hbi5iZGV2Lmdsb2I7CisKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCWRybV9tbV9wdXRfYmxvY2sodG1wX21lbS5tbV9ub2RlKTsKLQkJc3Bpbl91bmxvY2soJnJkZXYtPm1tYW4uYmRldi5scnVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCXJldHVybiByOwogCX0KIAlyZXR1cm4gcjsKQEAgLTM1Miw5ICszNzYsOCBAQAogCQlyYWRlb25fbW92ZV9udWxsKGJvLCBuZXdfbWVtKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghcmRldi0+Y3AucmVhZHkpIHsKKwlpZiAoIXJkZXYtPmNwLnJlYWR5IHx8IHJkZXYtPmFzaWMtPmNvcHkgPT0gTlVMTCkgewogCQkvKiB1c2UgbWVtY3B5ICovCi0JCURSTV9FUlJPUigiQ1AgaXMgbm90IHJlYWR5IHVzZSBtZW1jcHkuXG4iKTsKIAkJZ290byBtZW1jcHk7CiAJfQogCkBAIC00NDYsNyArNDY5LDcgQEAKIAl9CiAJLyogTm8gb3RoZXJzIHVzZXIgb2YgYWRkcmVzcyBzcGFjZSBzbyBzZXQgaXQgdG8gMCAqLwogCXIgPSB0dG1fYm9fZGV2aWNlX2luaXQoJnJkZXYtPm1tYW4uYmRldiwKLQkJCSAgICAgICByZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmLm9iamVjdCwKKwkJCSAgICAgICByZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmLm9iamVjdCwKIAkJCSAgICAgICAmcmFkZW9uX2JvX2RyaXZlciwgRFJNX0ZJTEVfUEFHRV9PRkZTRVQsCiAJCQkgICAgICAgcmRldi0+bmVlZF9kbWEzMik7CiAJaWYgKHIpIHsKQEAgLTQ3MSw3ICs0OTQsNyBAQAogCQlyZXR1cm4gcjsKIAl9CiAJRFJNX0lORk8oInJhZGVvbjogJXVNIG9mIFZSQU0gbWVtb3J5IHJlYWR5XG4iLAotCQkgcmRldi0+bWMucmVhbF92cmFtX3NpemUgLyAoMTAyNCAqIDEwMjQpKTsKKwkJICh1bnNpZ25lZClyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogCXIgPSB0dG1fYm9faW5pdF9tbSgmcmRldi0+bW1hbi5iZGV2LCBUVE1fUExfVFQsIDAsCiAJCQkgICAoKHJkZXYtPm1jLmd0dF9zaXplKSA+PiBQQUdFX1NISUZUKSk7CiAJaWYgKHIpIHsKQEAgLTQ3OSwxMCArNTAyLDE2IEBACiAJCXJldHVybiByOwogCX0KIAlEUk1fSU5GTygicmFkZW9uOiAldU0gb2YgR1RUIG1lbW9yeSByZWFkeS5cbiIsCi0JCSByZGV2LT5tYy5ndHRfc2l6ZSAvICgxMDI0ICogMTAyNCkpOworCQkgKHVuc2lnbmVkKShyZGV2LT5tYy5ndHRfc2l6ZSAvICgxMDI0ICogMTAyNCkpKTsKIAlpZiAodW5saWtlbHkocmRldi0+bW1hbi5iZGV2LmRldl9tYXBwaW5nID09IE5VTEwpKSB7CiAJCXJkZXYtPm1tYW4uYmRldi5kZXZfbWFwcGluZyA9IHJkZXYtPmRkZXYtPmRldl9tYXBwaW5nOwogCX0KKworCXIgPSByYWRlb25fdHRtX2RlYnVnZnNfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0IGRlYnVnZnNcbiIpOworCQlyZXR1cm4gcjsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1NywzICs2ODYsNTAgQEAKIAlndHQtPmJvdW5kID0gZmFsc2U7CiAJcmV0dXJuICZndHQtPmJhY2tlbmQ7CiB9CisKKyNkZWZpbmUgUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTIDIKKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9tZW1fdHlwZXNfbGlzdFtSQURFT05fREVCVUdGU19NRU1fVFlQRVNdOworc3RhdGljIGNoYXIgcmFkZW9uX21lbV90eXBlc19uYW1lc1tSQURFT05fREVCVUdGU19NRU1fVFlQRVNdWzMyXTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorc3RhdGljIGludCByYWRlb25fbW1fZHVtcF90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRlOworCXN0cnVjdCBkcm1fbW0gKm1tID0gKHN0cnVjdCBkcm1fbW0gKilub2RlLT5pbmZvX2VudC0+ZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IHJkZXYtPm1tYW4uYmRldi5nbG9iOworCisJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJcmV0ID0gZHJtX21tX2R1bXBfdGFibGUobSwgbW0pOworCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHJhZGVvbl90dG1fZGVidWdmc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVuc2lnbmVkIGk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTOyBpKyspIHsKKwkJaWYgKGkgPT0gMCkKKwkJCXNwcmludGYocmFkZW9uX21lbV90eXBlc19uYW1lc1tpXSwgInJhZGVvbl92cmFtX21tIik7CisJCWVsc2UKKwkJCXNwcmludGYocmFkZW9uX21lbV90eXBlc19uYW1lc1tpXSwgInJhZGVvbl9ndHRfbW0iKTsKKwkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLm5hbWUgPSByYWRlb25fbWVtX3R5cGVzX25hbWVzW2ldOworCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uc2hvdyA9ICZyYWRlb25fbW1fZHVtcF90YWJsZTsKKwkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRyaXZlcl9mZWF0dXJlcyA9IDA7CisJCWlmIChpID09IDApCisJCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZGF0YSA9ICZyZGV2LT5tbWFuLmJkZXYubWFuW1RUTV9QTF9WUkFNXS5tYW5hZ2VyOworCQllbHNlCisJCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZGF0YSA9ICZyZGV2LT5tbWFuLmJkZXYubWFuW1RUTV9QTF9UVF0ubWFuYWdlcjsKKworCX0KKwlyZXR1cm4gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHJhZGVvbl9tZW1fdHlwZXNfbGlzdCwgUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTKTsKKworI2VuZGlmCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IxMDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IxMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlZTA2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjEwMApAQCAtMCwwICsxLDEwNSBAQAorcjEwMCAweDMyOTQKKzB4MTQzNCBTUkNfWV9YCisweDE0MzggRFNUX1lfWAorMHgxNDNDIERTVF9IRUlHSFRfV0lEVEgKKzB4MTQ2QyBEUF9HVUlfTUFTVEVSX0NOVEwKKzB4MTQ3NCBCUlVTSF9ZX1gKKzB4MTQ3OCBEUF9CUlVTSF9CS0dEX0NMUgorMHgxNDdDIERQX0JSVVNIX0ZSR0RfQ0xSCisweDE0ODAgQlJVU0hfREFUQTAKKzB4MTQ4NCBCUlVTSF9EQVRBMQorMHgxNTk4IERTVF9XSURUSF9IRUlHSFQKKzB4MTVDMCBDTFJfQ01QX0NOVEwKKzB4MTVDNCBDTFJfQ01QX0NMUl9TUkMKKzB4MTVDOCBDTFJfQ01QX0NMUl9EU1QKKzB4MTVDQyBDTFJfQ01QX01TSworMHgxNUQ4IERQX1NSQ19GUkdEX0NMUgorMHgxNURDIERQX1NSQ19CS0dEX0NMUgorMHgxNjAwIERTVF9MSU5FX1NUQVJUCisweDE2MDQgRFNUX0xJTkVfRU5ECisweDE2MDggRFNUX0xJTkVfUEFUQ09VTlQKKzB4MTZDMCBEUF9DTlRMCisweDE2Q0MgRFBfV1JJVEVfTVNLCisweDE2RDAgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SCisweDE2RTggREVGQVVMVF9TQ19CT1RUT01fUklHSFQKKzB4MTZFQyBTQ19UT1BfTEVGVAorMHgxNkYwIFNDX0JPVFRPTV9SSUdIVAorMHgxNkY0IFNSQ19TQ19CT1RUT01fUklHSFQKKzB4MTcxNCBEU1RDQUNIRV9DVExTVEFUCisweDE3MjAgV0FJVF9VTlRJTAorMHgxNzJDIFJCQk1fR1VJQ05UTAorMHgxODEwIEZPR18zRF9UQUJMRV9TVEFSVAorMHgxODE0IEZPR18zRF9UQUJMRV9FTkQKKzB4MWExNCBGT0dfVEFCTEVfSU5ERVgKKzB4MWExOCBGT0dfVEFCTEVfREFUQQorMHgxYzE0IFBQX01JU0MKKzB4MWMxOCBQUF9GT0dfQ09MT1IKKzB4MWMxYyBSRV9TT0xJRF9DT0xPUgorMHgxYzIwIFJCM0RfQkxFTkRDTlRMCisweDFjNGMgU0VfQ05UTAorMHgxYzUwIFNFX0NPT1JEX0ZNVAorMHgxYzYwIFBQX1RYQ0JMRU5EXzAKKzB4MWM2NCBQUF9UWEFCTEVORF8wCisweDFjNjggUFBfVEZBQ1RPUl8wCisweDFjNzggUFBfVFhDQkxFTkRfMQorMHgxYzdjIFBQX1RYQUJMRU5EXzEKKzB4MWM4MCBQUF9URkFDVE9SXzEKKzB4MWM5MCBQUF9UWENCTEVORF8yCisweDFjOTQgUFBfVFhBQkxFTkRfMgorMHgxYzk4IFBQX1RGQUNUT1JfMgorMHgxY2M4IFJFX1NUSVBQTEVfQUREUgorMHgxY2NjIFJFX1NUSVBQTEVfREFUQQorMHgxY2QwIFJFX0xJTkVfUEFUVEVSTgorMHgxY2Q0IFJFX0xJTkVfU1RBVEUKKzB4MWQ0MCBQUF9CT1JERVJfQ09MT1IwCisweDFkNDQgUFBfQk9SREVSX0NPTE9SMQorMHgxZDQ4IFBQX0JPUkRFUl9DT0xPUjIKKzB4MWQ3YyBSQjNEX1NURU5DSUxSRUZNQVNLCisweDFkODAgUkIzRF9ST1BDTlRMCisweDFkODQgUkIzRF9QTEFORU1BU0sKKzB4MWQ5OCBWQVBfVlBPUlRfWFNDQUxFCisweDFkOUMgVkFQX1ZQT1JUX1hPRkZTRVQKKzB4MWRhMCBWQVBfVlBPUlRfWVNDQUxFCisweDFkYTQgVkFQX1ZQT1JUX1lPRkZTRVQKKzB4MWRhOCBWQVBfVlBPUlRfWlNDQUxFCisweDFkYWMgVkFQX1ZQT1JUX1pPRkZTRVQKKzB4MWRiMCBTRV9aQklBU19GQUNUT1IKKzB4MWRiNCBTRV9aQklBU19DT05TVEFOVAorMHgxZGI4IFNFX0xJTkVfV0lEVEgKKzB4MjE0MCBTRV9DTlRMX1NUQVRVUworMHgyMjAwIFNFX1RDTF9WRUNUT1JfSU5EWF9SRUcKKzB4MjIwNCBTRV9UQ0xfVkVDVE9SX0RBVEFfUkVHCisweDIyMDggU0VfVENMX1NDQUxBUl9JTkRYX1JFRworMHgyMjBjIFNFX1RDTF9TQ0FMQVJfREFUQV9SRUcKKzB4MjIxMCBTRV9UQ0xfTUFURVJJQUxfRU1JU1NJVkVfUkVECisweDIyMTQgU0VfVENMX01BVEVSSUFMX0VNSVNTSVZFX0dSRUVOCisweDIyMTggU0VfVENMX01BVEVSSUFMX0VNSVNTSVZFX0JMVUUKKzB4MjIxYyBTRV9UQ0xfTUFURVJJQUxfRU1JU1NJVkVfQUxQSEEKKzB4MjIyMCBTRV9UQ0xfTUFURVJJQUxfQU1CSUVOVF9SRUQKKzB4MjIyNCBTRV9UQ0xfTUFURVJJQUxfQU1CSUVOVF9HUkVFTgorMHgyMjI4IFNFX1RDTF9NQVRFUklBTF9BTUJJRU5UX0JMVUUKKzB4MjIyYyBTRV9UQ0xfTUFURVJJQUxfQU1CSUVOVF9BTFBIQQorMHgyMjMwIFNFX1RDTF9NQVRFUklBTF9ESUZGVVNFX1JFRAorMHgyMjM0IFNFX1RDTF9NQVRFUklBTF9ESUZGVVNFX0dSRUVOCisweDIyMzggU0VfVENMX01BVEVSSUFMX0RJRkZVU0VfQkxVRQorMHgyMjNjIFNFX1RDTF9NQVRFUklBTF9ESUZGVVNFX0FMUEhBCisweDIyNDAgU0VfVENMX01BVEVSSUFMX1NQRUNVTEFSX1JFRAorMHgyMjQ0IFNFX1RDTF9NQVRFUklBTF9TUEVDVUxBUl9HUkVFTgorMHgyMjQ4IFNFX1RDTF9NQVRFUklBTF9TUEVDVUxBUl9CTFVFCisweDIyNGMgU0VfVENMX01BVEVSSUFMX1NQRUNVTEFSX0FMUEhBCisweDIyNTAgU0VfVENMX1NISU5JTkVTUworMHgyMjU0IFNFX1RDTF9PVVRQVVRfVlRYX0ZNVAorMHgyMjU4IFNFX1RDTF9PVVRQVVRfVlRYX1NFTAorMHgyMjVjIFNFX1RDTF9NQVRSSVhfU0VMRUNUXzAKKzB4MjI2MCBTRV9UQ0xfTUFUUklYX1NFTEVDVF8xCisweDIyNjQgU0VfVENMX1VDUF9WRVJUX0JMRU5EX0NOVEwKKzB4MjI2OCBTRV9UQ0xfVEVYVFVSRV9QUk9DX0NUTAorMHgyMjZjIFNFX1RDTF9MSUdIVF9NT0RFTF9DVEwKKzB4MjI3MCBTRV9UQ0xfUEVSX0xJR0hUX0NUTF8wCisweDIyNzQgU0VfVENMX1BFUl9MSUdIVF9DVExfMQorMHgyMjc4IFNFX1RDTF9QRVJfTElHSFRfQ1RMXzIKKzB4MjI3YyBTRV9UQ0xfUEVSX0xJR0hUX0NUTF8zCisweDIyODQgU0VfVENMX1NUQVRFX0ZMVVNICisweDI2YzAgUkVfVE9QX0xFRlQKKzB4MjZjNCBSRV9NSVNDCisweDMyOTAgUkIzRF9aUEFTU19EQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IyMDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IyMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyMWM4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjIwMApAQCAtMCwwICsxLDE4NCBAQAorcjIwMCAweDMyOTQKKzB4MTQzNCBTUkNfWV9YCisweDE0MzggRFNUX1lfWAorMHgxNDNDIERTVF9IRUlHSFRfV0lEVEgKKzB4MTQ2QyBEUF9HVUlfTUFTVEVSX0NOVEwKKzB4MTQ3NCBCUlVTSF9ZX1gKKzB4MTQ3OCBEUF9CUlVTSF9CS0dEX0NMUgorMHgxNDdDIERQX0JSVVNIX0ZSR0RfQ0xSCisweDE0ODAgQlJVU0hfREFUQTAKKzB4MTQ4NCBCUlVTSF9EQVRBMQorMHgxNTk4IERTVF9XSURUSF9IRUlHSFQKKzB4MTVDMCBDTFJfQ01QX0NOVEwKKzB4MTVDNCBDTFJfQ01QX0NMUl9TUkMKKzB4MTVDOCBDTFJfQ01QX0NMUl9EU1QKKzB4MTVDQyBDTFJfQ01QX01TSworMHgxNUQ4IERQX1NSQ19GUkdEX0NMUgorMHgxNURDIERQX1NSQ19CS0dEX0NMUgorMHgxNjAwIERTVF9MSU5FX1NUQVJUCisweDE2MDQgRFNUX0xJTkVfRU5ECisweDE2MDggRFNUX0xJTkVfUEFUQ09VTlQKKzB4MTZDMCBEUF9DTlRMCisweDE2Q0MgRFBfV1JJVEVfTVNLCisweDE2RDAgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SCisweDE2RTggREVGQVVMVF9TQ19CT1RUT01fUklHSFQKKzB4MTZFQyBTQ19UT1BfTEVGVAorMHgxNkYwIFNDX0JPVFRPTV9SSUdIVAorMHgxNkY0IFNSQ19TQ19CT1RUT01fUklHSFQKKzB4MTcxNCBEU1RDQUNIRV9DVExTVEFUCisweDE3MjAgV0FJVF9VTlRJTAorMHgxNzJDIFJCQk1fR1VJQ05UTAorMHgxYzE0IFBQX01JU0MKKzB4MWMxOCBQUF9GT0dfQ09MT1IKKzB4MWMxYyBSRV9TT0xJRF9DT0xPUgorMHgxYzIwIFJCM0RfQkxFTkRDTlRMCisweDFjNGMgU0VfQ05UTAorMHgxYzUwIFJFX0NOVEwKKzB4MWNjOCBSRV9TVElQUExFX0FERFIKKzB4MWNjYyBSRV9TVElQUExFX0RBVEEKKzB4MWNkMCBSRV9MSU5FX1BBVFRFUk4KKzB4MWNkNCBSRV9MSU5FX1NUQVRFCisweDFjZDggUkVfU0NJU1NPUl9UTF8wCisweDFjZGMgUkVfU0NJU1NPUl9CUl8wCisweDFjZTAgUkVfU0NJU1NPUl9UTF8xCisweDFjZTQgUkVfU0NJU1NPUl9CUl8xCisweDFjZTggUkVfU0NJU1NPUl9UTF8yCisweDFjZWMgUkVfU0NJU1NPUl9CUl8yCisweDFkNjAgUkIzRF9ERVBUSFhZX09GRlNFVAorMHgxZDdjIFJCM0RfU1RFTkNJTFJFRk1BU0sKKzB4MWQ4MCBSQjNEX1JPUENOVEwKKzB4MWQ4NCBSQjNEX1BMQU5FTUFTSworMHgxZDk4IFZBUF9WUE9SVF9YU0NBTEUKKzB4MWQ5YyBWQVBfVlBPUlRfWE9GRlNFVAorMHgxZGEwIFZBUF9WUE9SVF9ZU0NBTEUKKzB4MWRhNCBWQVBfVlBPUlRfWU9GRlNFVAorMHgxZGE4IFZBUF9WUE9SVF9aU0NBTEUKKzB4MWRhYyBWQVBfVlBPUlRfWk9GRlNFVAorMHgxZGIwIFNFX1pCSUFTX0ZBQ1RPUgorMHgxZGI0IFNFX1pCSUFTX0NPTlNUQU5UCisweDFkYjggU0VfTElORV9XSURUSAorMHgyMDgwIFNFX1ZBUF9DTlRMCisweDIwOTAgU0VfVENMX09VVFBVVF9WVFhfRk1UXzAKKzB4MjA5NCBTRV9UQ0xfT1VUUFVUX1ZUWF9GTVRfMQorMHgyMGIwIFNFX1ZURV9DTlRMCisweDIxNDAgU0VfQ05UTF9TVEFUVVMKKzB4MjE4MCBTRV9WVFhfU1RBVEVfQ05UTAorMHgyMjAwIFNFX1RDTF9WRUNUT1JfSU5EWF9SRUcKKzB4MjIwNCBTRV9UQ0xfVkVDVE9SX0RBVEFfUkVHCisweDIyMDggU0VfVENMX1NDQUxBUl9JTkRYX1JFRworMHgyMjBjIFNFX1RDTF9TQ0FMQVJfREFUQV9SRUcKKzB4MjIzMCBTRV9UQ0xfTUFUUklYX1NFTF8wCisweDIyMzQgU0VfVENMX01BVFJJWF9TRUxfMQorMHgyMjM4IFNFX1RDTF9NQVRSSVhfU0VMXzIKKzB4MjIzYyBTRV9UQ0xfTUFUUklYX1NFTF8zCisweDIyNDAgU0VfVENMX01BVFJJWF9TRUxfNAorMHgyMjUwIFNFX1RDTF9PVVRQVVRfVlRYX0NPTVBfU0VMCisweDIyNTQgU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8wCisweDIyNTggU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8xCisweDIyNWMgU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8yCisweDIyNjAgU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8zCisweDIyNjggU0VfVENMX0xJR0hUX01PREVMX0NUTF8wCisweDIyNmMgU0VfVENMX0xJR0hUX01PREVMX0NUTF8xCisweDIyNzAgU0VfVENMX1BFUl9MSUdIVF9DVExfMAorMHgyMjc0IFNFX1RDTF9QRVJfTElHSFRfQ1RMXzEKKzB4MjI3OCBTRV9UQ0xfUEVSX0xJR0hUX0NUTF8yCisweDIyN2MgU0VfVENMX1BFUl9MSUdIVF9DVExfMworMHgyMjg0IFZBUF9QVlNfU1RBVEVfRkxVU0hfUkVHCisweDIyYTggU0VfVENMX1RFWF9QUk9DX0NUTF8yCisweDIyYWMgU0VfVENMX1RFWF9QUk9DX0NUTF8zCisweDIyYjAgU0VfVENMX1RFWF9QUk9DX0NUTF8wCisweDIyYjQgU0VfVENMX1RFWF9QUk9DX0NUTF8xCisweDIyYjggU0VfVENMX1RFWF9DWUxfV1JBUF9DVEwKKzB4MjJjMCBTRV9UQ0xfVUNQX1ZFUlRfQkxFTkRfQ05UTAorMHgyMmM0IFNFX1RDTF9QT0lOVF9TUFJJVEVfQ05UTAorMHgyNjQ4IFJFX1BPSU5UU0laRQorMHgyNmMwIFJFX1RPUF9MRUZUCisweDI2YzQgUkVfTUlTQworMHgyNmYwIFJFX0FVWF9TQ0lTU09SX0NOVEwKKzB4MmMxNCBQUF9CT1JERVJfQ09MT1JfMAorMHgyYzM0IFBQX0JPUkRFUl9DT0xPUl8xCisweDJjNTQgUFBfQk9SREVSX0NPTE9SXzIKKzB4MmM3NCBQUF9CT1JERVJfQ09MT1JfMworMHgyYzk0IFBQX0JPUkRFUl9DT0xPUl80CisweDJjYjQgUFBfQk9SREVSX0NPTE9SXzUKKzB4MmNjNCBQUF9DTlRMX1gKKzB4MmNmOCBQUF9UUklfUEVSRgorMHgyY2ZjIFBQX1BFUkZfQ05UTAorMHgyZDljIFBQX1RBTV9ERUJVRzMKKzB4MmVlMCBQUF9URkFDVE9SXzAKKzB4MmVlNCBQUF9URkFDVE9SXzEKKzB4MmVlOCBQUF9URkFDVE9SXzIKKzB4MmVlYyBQUF9URkFDVE9SXzMKKzB4MmVmMCBQUF9URkFDVE9SXzQKKzB4MmVmNCBQUF9URkFDVE9SXzUKKzB4MmVmOCBQUF9URkFDVE9SXzYKKzB4MmVmYyBQUF9URkFDVE9SXzcKKzB4MmYwMCBQUF9UWENCTEVORF8wCisweDJmMDQgUFBfVFhDQkxFTkQyXzAKKzB4MmYwOCBQUF9UWEFCTEVORF8wCisweDJmMGMgUFBfVFhBQkxFTkQyXzAKKzB4MmYxMCBQUF9UWENCTEVORF8xCisweDJmMTQgUFBfVFhDQkxFTkQyXzEKKzB4MmYxOCBQUF9UWEFCTEVORF8xCisweDJmMWMgUFBfVFhBQkxFTkQyXzEKKzB4MmYyMCBQUF9UWENCTEVORF8yCisweDJmMjQgUFBfVFhDQkxFTkQyXzIKKzB4MmYyOCBQUF9UWEFCTEVORF8yCisweDJmMmMgUFBfVFhBQkxFTkQyXzIKKzB4MmYzMCBQUF9UWENCTEVORF8zCisweDJmMzQgUFBfVFhDQkxFTkQyXzMKKzB4MmYzOCBQUF9UWEFCTEVORF8zCisweDJmM2MgUFBfVFhBQkxFTkQyXzMKKzB4MmY0MCBQUF9UWENCTEVORF80CisweDJmNDQgUFBfVFhDQkxFTkQyXzQKKzB4MmY0OCBQUF9UWEFCTEVORF80CisweDJmNGMgUFBfVFhBQkxFTkQyXzQKKzB4MmY1MCBQUF9UWENCTEVORF81CisweDJmNTQgUFBfVFhDQkxFTkQyXzUKKzB4MmY1OCBQUF9UWEFCTEVORF81CisweDJmNWMgUFBfVFhBQkxFTkQyXzUKKzB4MmY2MCBQUF9UWENCTEVORF82CisweDJmNjQgUFBfVFhDQkxFTkQyXzYKKzB4MmY2OCBQUF9UWEFCTEVORF82CisweDJmNmMgUFBfVFhBQkxFTkQyXzYKKzB4MmY3MCBQUF9UWENCTEVORF83CisweDJmNzQgUFBfVFhDQkxFTkQyXzcKKzB4MmY3OCBQUF9UWEFCTEVORF83CisweDJmN2MgUFBfVFhBQkxFTkQyXzcKKzB4MmY4MCBQUF9UWENCTEVORF84CisweDJmODQgUFBfVFhDQkxFTkQyXzgKKzB4MmY4OCBQUF9UWEFCTEVORF84CisweDJmOGMgUFBfVFhBQkxFTkQyXzgKKzB4MmY5MCBQUF9UWENCTEVORF85CisweDJmOTQgUFBfVFhDQkxFTkQyXzkKKzB4MmY5OCBQUF9UWEFCTEVORF85CisweDJmOWMgUFBfVFhBQkxFTkQyXzkKKzB4MmZhMCBQUF9UWENCTEVORF8xMAorMHgyZmE0IFBQX1RYQ0JMRU5EMl8xMAorMHgyZmE4IFBQX1RYQUJMRU5EXzEwCisweDJmYWMgUFBfVFhBQkxFTkQyXzEwCisweDJmYjAgUFBfVFhDQkxFTkRfMTEKKzB4MmZiNCBQUF9UWENCTEVORDJfMTEKKzB4MmZiOCBQUF9UWEFCTEVORF8xMQorMHgyZmJjIFBQX1RYQUJMRU5EMl8xMQorMHgyZmMwIFBQX1RYQ0JMRU5EXzEyCisweDJmYzQgUFBfVFhDQkxFTkQyXzEyCisweDJmYzggUFBfVFhBQkxFTkRfMTIKKzB4MmZjYyBQUF9UWEFCTEVORDJfMTIKKzB4MmZkMCBQUF9UWENCTEVORF8xMworMHgyZmQ0IFBQX1RYQ0JMRU5EMl8xMworMHgyZmQ4IFBQX1RYQUJMRU5EXzEzCisweDJmZGMgUFBfVFhBQkxFTkQyXzEzCisweDJmZTAgUFBfVFhDQkxFTkRfMTQKKzB4MmZlNCBQUF9UWENCTEVORDJfMTQKKzB4MmZlOCBQUF9UWEFCTEVORF8xNAorMHgyZmVjIFBQX1RYQUJMRU5EMl8xNAorMHgyZmYwIFBQX1RYQ0JMRU5EXzE1CisweDJmZjQgUFBfVFhDQkxFTkQyXzE1CisweDJmZjggUFBfVFhBQkxFTkRfMTUKKzB4MmZmYyBQUF9UWEFCTEVORDJfMTUKKzB4MzIxOCBSQjNEX0JMRU5DT0xPUgorMHgzMjFjIFJCM0RfQUJMRU5EQ05UTAorMHgzMjIwIFJCM0RfQ0JMRU5EQ05UTAorMHgzMjkwIFJCM0RfWlBBU1NfREFUQQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljNDY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMApAQCAtMCwwICsxLDcyOSBAQAorcjMwMCAweDRmNjAKKzB4MTQzNCBTUkNfWV9YCisweDE0MzggRFNUX1lfWAorMHgxNDNDIERTVF9IRUlHSFRfV0lEVEgKKzB4MTQ2QyBEUF9HVUlfTUFTVEVSX0NOVEwKKzB4MTQ3NCBCUlVTSF9ZX1gKKzB4MTQ3OCBEUF9CUlVTSF9CS0dEX0NMUgorMHgxNDdDIERQX0JSVVNIX0ZSR0RfQ0xSCisweDE0ODAgQlJVU0hfREFUQTAKKzB4MTQ4NCBCUlVTSF9EQVRBMQorMHgxNTk4IERTVF9XSURUSF9IRUlHSFQKKzB4MTVDMCBDTFJfQ01QX0NOVEwKKzB4MTVDNCBDTFJfQ01QX0NMUl9TUkMKKzB4MTVDOCBDTFJfQ01QX0NMUl9EU1QKKzB4MTVDQyBDTFJfQ01QX01TSworMHgxNUQ4IERQX1NSQ19GUkdEX0NMUgorMHgxNURDIERQX1NSQ19CS0dEX0NMUgorMHgxNjAwIERTVF9MSU5FX1NUQVJUCisweDE2MDQgRFNUX0xJTkVfRU5ECisweDE2MDggRFNUX0xJTkVfUEFUQ09VTlQKKzB4MTZDMCBEUF9DTlRMCisweDE2Q0MgRFBfV1JJVEVfTVNLCisweDE2RDAgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SCisweDE2RTggREVGQVVMVF9TQ19CT1RUT01fUklHSFQKKzB4MTZFQyBTQ19UT1BfTEVGVAorMHgxNkYwIFNDX0JPVFRPTV9SSUdIVAorMHgxNkY0IFNSQ19TQ19CT1RUT01fUklHSFQKKzB4MTcxNCBEU1RDQUNIRV9DVExTVEFUCisweDE3MjAgV0FJVF9VTlRJTAorMHgxNzJDIFJCQk1fR1VJQ05UTAorMHgxRDk4IFZBUF9WUE9SVF9YU0NBTEUKKzB4MUQ5QyBWQVBfVlBPUlRfWE9GRlNFVAorMHgxREEwIFZBUF9WUE9SVF9ZU0NBTEUKKzB4MURBNCBWQVBfVlBPUlRfWU9GRlNFVAorMHgxREE4IFZBUF9WUE9SVF9aU0NBTEUKKzB4MURBQyBWQVBfVlBPUlRfWk9GRlNFVAorMHgyMDgwIFZBUF9DTlRMCisweDIwOTAgVkFQX09VVF9WVFhfRk1UXzAKKzB4MjA5NCBWQVBfT1VUX1ZUWF9GTVRfMQorMHgyMEIwIFZBUF9WVEVfQ05UTAorMHgyMTM4IFZBUF9WRl9NSU5fVlRYX0lORFgKKzB4MjE0MCBWQVBfQ05UTF9TVEFUVVMKKzB4MjE1MCBWQVBfUFJPR19TVFJFQU1fQ05UTF8wCisweDIxNTQgVkFQX1BST0dfU1RSRUFNX0NOVExfMQorMHgyMTU4IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzIKKzB4MjE1QyBWQVBfUFJPR19TVFJFQU1fQ05UTF8zCisweDIxNjAgVkFQX1BST0dfU1RSRUFNX0NOVExfNAorMHgyMTY0IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzUKKzB4MjE2OCBWQVBfUFJPR19TVFJFQU1fQ05UTF82CisweDIxNkMgVkFQX1BST0dfU1RSRUFNX0NOVExfNworMHgyMTgwIFZBUF9WVFhfU1RBVEVfQ05UTAorMHgyMTg0IFZBUF9WU01fVlRYX0FTU00KKzB4MjE4OCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMAorMHgyMThDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xCisweDIxOTAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzIKKzB4MjE5NCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMworMHgyMTk4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR180CisweDIxOUMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzUKKzB4MjFBMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNgorMHgyMUE0IFZBUF9WVFhfU1RBVEVfSU5EX1JFR183CisweDIxQTggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzgKKzB4MjFBQyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfOQorMHgyMUIwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMAorMHgyMUI0IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMQorMHgyMUI4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMgorMHgyMUJDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMworMHgyMUMwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xNAorMHgyMUM0IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xNQorMHgyMURDIFZBUF9QU0NfU0dOX05PUk1fQ05UTAorMHgyMUUwIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8wCisweDIxRTQgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzEKKzB4MjFFOCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMgorMHgyMUVDIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8zCisweDIxRjAgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzQKKzB4MjFGNCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNQorMHgyMUY4IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF82CisweDIxRkMgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzcKKzB4MjIwMCBWQVBfUFZTX1ZFQ1RPUl9JTkRYX1JFRworMHgyMjA0IFZBUF9QVlNfVkVDVE9SX0RBVEFfUkVHCisweDIyMDggVkFQX1BWU19WRUNUT1JfREFUQV9SRUdfMTI4CisweDIyMUMgVkFQX0NMSVBfQ05UTAorMHgyMjIwIFZBUF9HQl9WRVJUX0NMSVBfQURKCisweDIyMjQgVkFQX0dCX1ZFUlRfRElTQ19BREoKKzB4MjIyOCBWQVBfR0JfSE9SWl9DTElQX0FESgorMHgyMjJDIFZBUF9HQl9IT1JaX0RJU0NfQURKCisweDIyMzAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMAorMHgyMjM0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzEKKzB4MjIzOCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18yCisweDIyM0MgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMworMHgyMjQwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzQKKzB4MjI0NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU181CisweDIyNDggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNgorMHgyMjRDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzcKKzB4MjI1MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU184CisweDIyNTQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfOQorMHgyMjU4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzEwCisweDIyNUMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTEKKzB4MjI2MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMgorMHgyMjY0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzEzCisweDIyNjggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTQKKzB4MjI2QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xNQorMHgyMjg0IFZBUF9QVlNfU1RBVEVfRkxVU0hfUkVHCisweDIyODggVkFQX1BWU19WVFhfVElNRU9VVF9SRUcKKzB4MjI5MCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzAKKzB4MjI5NCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEKKzB4MjI5OCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzIKKzB4MjI5QyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzMKKzB4MjJBMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzQKKzB4MjJBNCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzUKKzB4MjJBOCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzYKKzB4MjJBQyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzcKKzB4MjJCMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzgKKzB4MjJCNCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzkKKzB4MjJCOCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEwCisweDIyQkMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMQorMHgyMkMwIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTIKKzB4MjJDNCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEzCisweDIyQzggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xNAorMHgyMkNDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTUKKzB4MjJEMCBWQVBfUFZTX0NPREVfQ05UTF8wCisweDIyRDQgVkFQX1BWU19DT05TVF9DTlRMCisweDIyRDggVkFQX1BWU19DT0RFX0NOVExfMQorMHgyMkRDIFZBUF9QVlNfRkxPV19DTlRMX09QQworMHgzNDJDIFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVAorMHg0MDAwIEdCX1ZBUF9SQVNURVJfVlRYX0ZNVF8wCisweDQwMDQgR0JfVkFQX1JBU1RFUl9WVFhfRk1UXzEKKzB4NDAwOCBHQl9FTkFCTEUKKzB4NDAxQyBHQl9TRUxFQ1QKKzB4NDAyMCBHQl9BQV9DT05GSUcKKzB4NDAyNCBHQl9GSUZPX1NJWkUKKzB4NDEwMCBUWF9JTlZBTFRBR1MKKzB4NDIwMCBHQV9QT0lOVF9TMAorMHg0MjA0IEdBX1BPSU5UX1QwCisweDQyMDggR0FfUE9JTlRfUzEKKzB4NDIwQyBHQV9QT0lOVF9UMQorMHg0MjE0IEdBX1RSSUFOR0xFX1NUSVBQTEUKKzB4NDIxQyBHQV9QT0lOVF9TSVpFCisweDQyMzAgR0FfUE9JTlRfTUlOTUFYCisweDQyMzQgR0FfTElORV9DTlRMCisweDQyMzggR0FfTElORV9TVElQUExFX0NPTkZJRworMHg0MjYwIEdBX0xJTkVfU1RJUFBMRV9WQUxVRQorMHg0MjY0IEdBX0xJTkVfUzAKKzB4NDI2OCBHQV9MSU5FX1MxCisweDQyNzggR0FfQ09MT1JfQ09OVFJPTAorMHg0MjdDIEdBX1NPTElEX1JHCisweDQyODAgR0FfU09MSURfQkEKKzB4NDI4OCBHQV9QT0xZX01PREUKKzB4NDI4QyBHQV9ST1VORF9NT0RFCisweDQyOTAgR0FfT0ZGU0VUCisweDQyOTQgR0FfRk9HX1NDQUxFCisweDQyOTggR0FfRk9HX09GRlNFVAorMHg0MkEwIFNVX1RFWF9XUkFQCisweDQyQTQgU1VfUE9MWV9PRkZTRVRfRlJPTlRfU0NBTEUKKzB4NDJBOCBTVV9QT0xZX09GRlNFVF9GUk9OVF9PRkZTRVQKKzB4NDJBQyBTVV9QT0xZX09GRlNFVF9CQUNLX1NDQUxFCisweDQyQjAgU1VfUE9MWV9PRkZTRVRfQkFDS19PRkZTRVQKKzB4NDJCNCBTVV9QT0xZX09GRlNFVF9FTkFCTEUKKzB4NDJCOCBTVV9DVUxMX01PREUKKzB4NDJDMCBTVV9ERVBUSF9TQ0FMRQorMHg0MkM0IFNVX0RFUFRIX09GRlNFVAorMHg0MkM4IFNVX1JFR19ERVNUCisweDQzMDAgUlNfQ09VTlQKKzB4NDMwNCBSU19JTlNUX0NPVU5UCisweDQzMTAgUlNfSVBfMAorMHg0MzE0IFJTX0lQXzEKKzB4NDMxOCBSU19JUF8yCisweDQzMUMgUlNfSVBfMworMHg0MzIwIFJTX0lQXzQKKzB4NDMyNCBSU19JUF81CisweDQzMjggUlNfSVBfNgorMHg0MzJDIFJTX0lQXzcKKzB4NDMzMCBSU19JTlNUXzAKKzB4NDMzNCBSU19JTlNUXzEKKzB4NDMzOCBSU19JTlNUXzIKKzB4NDMzQyBSU19JTlNUXzMKKzB4NDM0MCBSU19JTlNUXzQKKzB4NDM0NCBSU19JTlNUXzUKKzB4NDM0OCBSU19JTlNUXzYKKzB4NDM0QyBSU19JTlNUXzcKKzB4NDM1MCBSU19JTlNUXzgKKzB4NDM1NCBSU19JTlNUXzkKKzB4NDM1OCBSU19JTlNUXzEwCisweDQzNUMgUlNfSU5TVF8xMQorMHg0MzYwIFJTX0lOU1RfMTIKKzB4NDM2NCBSU19JTlNUXzEzCisweDQzNjggUlNfSU5TVF8xNAorMHg0MzZDIFJTX0lOU1RfMTUKKzB4NDNBNCBTQ19IWVBFUlpfRU4KKzB4NDNBOCBTQ19FREdFUlVMRQorMHg0M0IwIFNDX0NMSVBfMF9BCisweDQzQjQgU0NfQ0xJUF8wX0IKKzB4NDNCOCBTQ19DTElQXzFfQQorMHg0M0JDIFNDX0NMSVBfMV9CCisweDQzQzAgU0NfQ0xJUF8yX0EKKzB4NDNDNCBTQ19DTElQXzJfQgorMHg0M0M4IFNDX0NMSVBfM19BCisweDQzQ0MgU0NfQ0xJUF8zX0IKKzB4NDNEMCBTQ19DTElQX1JVTEUKKzB4NDNFMCBTQ19TQ0lTU09SMAorMHg0M0U4IFNDX1NDUkVFTkRPT1IKKzB4NDQ0MCBUWF9GSUxURVIxXzAKKzB4NDQ0NCBUWF9GSUxURVIxXzEKKzB4NDQ0OCBUWF9GSUxURVIxXzIKKzB4NDQ0QyBUWF9GSUxURVIxXzMKKzB4NDQ1MCBUWF9GSUxURVIxXzQKKzB4NDQ1NCBUWF9GSUxURVIxXzUKKzB4NDQ1OCBUWF9GSUxURVIxXzYKKzB4NDQ1QyBUWF9GSUxURVIxXzcKKzB4NDQ2MCBUWF9GSUxURVIxXzgKKzB4NDQ2NCBUWF9GSUxURVIxXzkKKzB4NDQ2OCBUWF9GSUxURVIxXzEwCisweDQ0NkMgVFhfRklMVEVSMV8xMQorMHg0NDcwIFRYX0ZJTFRFUjFfMTIKKzB4NDQ3NCBUWF9GSUxURVIxXzEzCisweDQ0NzggVFhfRklMVEVSMV8xNAorMHg0NDdDIFRYX0ZJTFRFUjFfMTUKKzB4NDU4MCBUWF9DSFJPTUFfS0VZXzAKKzB4NDU4NCBUWF9DSFJPTUFfS0VZXzEKKzB4NDU4OCBUWF9DSFJPTUFfS0VZXzIKKzB4NDU4QyBUWF9DSFJPTUFfS0VZXzMKKzB4NDU5MCBUWF9DSFJPTUFfS0VZXzQKKzB4NDU5NCBUWF9DSFJPTUFfS0VZXzUKKzB4NDU5OCBUWF9DSFJPTUFfS0VZXzYKKzB4NDU5QyBUWF9DSFJPTUFfS0VZXzcKKzB4NDVBMCBUWF9DSFJPTUFfS0VZXzgKKzB4NDVBNCBUWF9DSFJPTUFfS0VZXzkKKzB4NDVBOCBUWF9DSFJPTUFfS0VZXzEwCisweDQ1QUMgVFhfQ0hST01BX0tFWV8xMQorMHg0NUIwIFRYX0NIUk9NQV9LRVlfMTIKKzB4NDVCNCBUWF9DSFJPTUFfS0VZXzEzCisweDQ1QjggVFhfQ0hST01BX0tFWV8xNAorMHg0NUJDIFRYX0NIUk9NQV9LRVlfMTUKKzB4NDVDMCBUWF9CT1JERVJfQ09MT1JfMAorMHg0NUM0IFRYX0JPUkRFUl9DT0xPUl8xCisweDQ1QzggVFhfQk9SREVSX0NPTE9SXzIKKzB4NDVDQyBUWF9CT1JERVJfQ09MT1JfMworMHg0NUQwIFRYX0JPUkRFUl9DT0xPUl80CisweDQ1RDQgVFhfQk9SREVSX0NPTE9SXzUKKzB4NDVEOCBUWF9CT1JERVJfQ09MT1JfNgorMHg0NURDIFRYX0JPUkRFUl9DT0xPUl83CisweDQ1RTAgVFhfQk9SREVSX0NPTE9SXzgKKzB4NDVFNCBUWF9CT1JERVJfQ09MT1JfOQorMHg0NUU4IFRYX0JPUkRFUl9DT0xPUl8xMAorMHg0NUVDIFRYX0JPUkRFUl9DT0xPUl8xMQorMHg0NUYwIFRYX0JPUkRFUl9DT0xPUl8xMgorMHg0NUY0IFRYX0JPUkRFUl9DT0xPUl8xMworMHg0NUY4IFRYX0JPUkRFUl9DT0xPUl8xNAorMHg0NUZDIFRYX0JPUkRFUl9DT0xPUl8xNQorMHg0NjAwIFVTX0NPTkZJRworMHg0NjA0IFVTX1BJWFNJWkUKKzB4NDYwOCBVU19DT0RFX09GRlNFVAorMHg0NjBDIFVTX1JFU0VUCisweDQ2MTAgVVNfQ09ERV9BRERSXzAKKzB4NDYxNCBVU19DT0RFX0FERFJfMQorMHg0NjE4IFVTX0NPREVfQUREUl8yCisweDQ2MUMgVVNfQ09ERV9BRERSXzMKKzB4NDYyMCBVU19URVhfSU5TVF8wCisweDQ2MjQgVVNfVEVYX0lOU1RfMQorMHg0NjI4IFVTX1RFWF9JTlNUXzIKKzB4NDYyQyBVU19URVhfSU5TVF8zCisweDQ2MzAgVVNfVEVYX0lOU1RfNAorMHg0NjM0IFVTX1RFWF9JTlNUXzUKKzB4NDYzOCBVU19URVhfSU5TVF82CisweDQ2M0MgVVNfVEVYX0lOU1RfNworMHg0NjQwIFVTX1RFWF9JTlNUXzgKKzB4NDY0NCBVU19URVhfSU5TVF85CisweDQ2NDggVVNfVEVYX0lOU1RfMTAKKzB4NDY0QyBVU19URVhfSU5TVF8xMQorMHg0NjUwIFVTX1RFWF9JTlNUXzEyCisweDQ2NTQgVVNfVEVYX0lOU1RfMTMKKzB4NDY1OCBVU19URVhfSU5TVF8xNAorMHg0NjVDIFVTX1RFWF9JTlNUXzE1CisweDQ2NjAgVVNfVEVYX0lOU1RfMTYKKzB4NDY2NCBVU19URVhfSU5TVF8xNworMHg0NjY4IFVTX1RFWF9JTlNUXzE4CisweDQ2NkMgVVNfVEVYX0lOU1RfMTkKKzB4NDY3MCBVU19URVhfSU5TVF8yMAorMHg0Njc0IFVTX1RFWF9JTlNUXzIxCisweDQ2NzggVVNfVEVYX0lOU1RfMjIKKzB4NDY3QyBVU19URVhfSU5TVF8yMworMHg0NjgwIFVTX1RFWF9JTlNUXzI0CisweDQ2ODQgVVNfVEVYX0lOU1RfMjUKKzB4NDY4OCBVU19URVhfSU5TVF8yNgorMHg0NjhDIFVTX1RFWF9JTlNUXzI3CisweDQ2OTAgVVNfVEVYX0lOU1RfMjgKKzB4NDY5NCBVU19URVhfSU5TVF8yOQorMHg0Njk4IFVTX1RFWF9JTlNUXzMwCisweDQ2OUMgVVNfVEVYX0lOU1RfMzEKKzB4NDZBNCBVU19PVVRfRk1UXzAKKzB4NDZBOCBVU19PVVRfRk1UXzEKKzB4NDZBQyBVU19PVVRfRk1UXzIKKzB4NDZCMCBVU19PVVRfRk1UXzMKKzB4NDZCNCBVU19XX0ZNVAorMHg0NkMwIFVTX0FMVV9SR0JfQUREUl8wCisweDQ2QzQgVVNfQUxVX1JHQl9BRERSXzEKKzB4NDZDOCBVU19BTFVfUkdCX0FERFJfMgorMHg0NkNDIFVTX0FMVV9SR0JfQUREUl8zCisweDQ2RDAgVVNfQUxVX1JHQl9BRERSXzQKKzB4NDZENCBVU19BTFVfUkdCX0FERFJfNQorMHg0NkQ4IFVTX0FMVV9SR0JfQUREUl82CisweDQ2REMgVVNfQUxVX1JHQl9BRERSXzcKKzB4NDZFMCBVU19BTFVfUkdCX0FERFJfOAorMHg0NkU0IFVTX0FMVV9SR0JfQUREUl85CisweDQ2RTggVVNfQUxVX1JHQl9BRERSXzEwCisweDQ2RUMgVVNfQUxVX1JHQl9BRERSXzExCisweDQ2RjAgVVNfQUxVX1JHQl9BRERSXzEyCisweDQ2RjQgVVNfQUxVX1JHQl9BRERSXzEzCisweDQ2RjggVVNfQUxVX1JHQl9BRERSXzE0CisweDQ2RkMgVVNfQUxVX1JHQl9BRERSXzE1CisweDQ3MDAgVVNfQUxVX1JHQl9BRERSXzE2CisweDQ3MDQgVVNfQUxVX1JHQl9BRERSXzE3CisweDQ3MDggVVNfQUxVX1JHQl9BRERSXzE4CisweDQ3MEMgVVNfQUxVX1JHQl9BRERSXzE5CisweDQ3MTAgVVNfQUxVX1JHQl9BRERSXzIwCisweDQ3MTQgVVNfQUxVX1JHQl9BRERSXzIxCisweDQ3MTggVVNfQUxVX1JHQl9BRERSXzIyCisweDQ3MUMgVVNfQUxVX1JHQl9BRERSXzIzCisweDQ3MjAgVVNfQUxVX1JHQl9BRERSXzI0CisweDQ3MjQgVVNfQUxVX1JHQl9BRERSXzI1CisweDQ3MjggVVNfQUxVX1JHQl9BRERSXzI2CisweDQ3MkMgVVNfQUxVX1JHQl9BRERSXzI3CisweDQ3MzAgVVNfQUxVX1JHQl9BRERSXzI4CisweDQ3MzQgVVNfQUxVX1JHQl9BRERSXzI5CisweDQ3MzggVVNfQUxVX1JHQl9BRERSXzMwCisweDQ3M0MgVVNfQUxVX1JHQl9BRERSXzMxCisweDQ3NDAgVVNfQUxVX1JHQl9BRERSXzMyCisweDQ3NDQgVVNfQUxVX1JHQl9BRERSXzMzCisweDQ3NDggVVNfQUxVX1JHQl9BRERSXzM0CisweDQ3NEMgVVNfQUxVX1JHQl9BRERSXzM1CisweDQ3NTAgVVNfQUxVX1JHQl9BRERSXzM2CisweDQ3NTQgVVNfQUxVX1JHQl9BRERSXzM3CisweDQ3NTggVVNfQUxVX1JHQl9BRERSXzM4CisweDQ3NUMgVVNfQUxVX1JHQl9BRERSXzM5CisweDQ3NjAgVVNfQUxVX1JHQl9BRERSXzQwCisweDQ3NjQgVVNfQUxVX1JHQl9BRERSXzQxCisweDQ3NjggVVNfQUxVX1JHQl9BRERSXzQyCisweDQ3NkMgVVNfQUxVX1JHQl9BRERSXzQzCisweDQ3NzAgVVNfQUxVX1JHQl9BRERSXzQ0CisweDQ3NzQgVVNfQUxVX1JHQl9BRERSXzQ1CisweDQ3NzggVVNfQUxVX1JHQl9BRERSXzQ2CisweDQ3N0MgVVNfQUxVX1JHQl9BRERSXzQ3CisweDQ3ODAgVVNfQUxVX1JHQl9BRERSXzQ4CisweDQ3ODQgVVNfQUxVX1JHQl9BRERSXzQ5CisweDQ3ODggVVNfQUxVX1JHQl9BRERSXzUwCisweDQ3OEMgVVNfQUxVX1JHQl9BRERSXzUxCisweDQ3OTAgVVNfQUxVX1JHQl9BRERSXzUyCisweDQ3OTQgVVNfQUxVX1JHQl9BRERSXzUzCisweDQ3OTggVVNfQUxVX1JHQl9BRERSXzU0CisweDQ3OUMgVVNfQUxVX1JHQl9BRERSXzU1CisweDQ3QTAgVVNfQUxVX1JHQl9BRERSXzU2CisweDQ3QTQgVVNfQUxVX1JHQl9BRERSXzU3CisweDQ3QTggVVNfQUxVX1JHQl9BRERSXzU4CisweDQ3QUMgVVNfQUxVX1JHQl9BRERSXzU5CisweDQ3QjAgVVNfQUxVX1JHQl9BRERSXzYwCisweDQ3QjQgVVNfQUxVX1JHQl9BRERSXzYxCisweDQ3QjggVVNfQUxVX1JHQl9BRERSXzYyCisweDQ3QkMgVVNfQUxVX1JHQl9BRERSXzYzCisweDQ3QzAgVVNfQUxVX0FMUEhBX0FERFJfMAorMHg0N0M0IFVTX0FMVV9BTFBIQV9BRERSXzEKKzB4NDdDOCBVU19BTFVfQUxQSEFfQUREUl8yCisweDQ3Q0MgVVNfQUxVX0FMUEhBX0FERFJfMworMHg0N0QwIFVTX0FMVV9BTFBIQV9BRERSXzQKKzB4NDdENCBVU19BTFVfQUxQSEFfQUREUl81CisweDQ3RDggVVNfQUxVX0FMUEhBX0FERFJfNgorMHg0N0RDIFVTX0FMVV9BTFBIQV9BRERSXzcKKzB4NDdFMCBVU19BTFVfQUxQSEFfQUREUl84CisweDQ3RTQgVVNfQUxVX0FMUEhBX0FERFJfOQorMHg0N0U4IFVTX0FMVV9BTFBIQV9BRERSXzEwCisweDQ3RUMgVVNfQUxVX0FMUEhBX0FERFJfMTEKKzB4NDdGMCBVU19BTFVfQUxQSEFfQUREUl8xMgorMHg0N0Y0IFVTX0FMVV9BTFBIQV9BRERSXzEzCisweDQ3RjggVVNfQUxVX0FMUEhBX0FERFJfMTQKKzB4NDdGQyBVU19BTFVfQUxQSEFfQUREUl8xNQorMHg0ODAwIFVTX0FMVV9BTFBIQV9BRERSXzE2CisweDQ4MDQgVVNfQUxVX0FMUEhBX0FERFJfMTcKKzB4NDgwOCBVU19BTFVfQUxQSEFfQUREUl8xOAorMHg0ODBDIFVTX0FMVV9BTFBIQV9BRERSXzE5CisweDQ4MTAgVVNfQUxVX0FMUEhBX0FERFJfMjAKKzB4NDgxNCBVU19BTFVfQUxQSEFfQUREUl8yMQorMHg0ODE4IFVTX0FMVV9BTFBIQV9BRERSXzIyCisweDQ4MUMgVVNfQUxVX0FMUEhBX0FERFJfMjMKKzB4NDgyMCBVU19BTFVfQUxQSEFfQUREUl8yNAorMHg0ODI0IFVTX0FMVV9BTFBIQV9BRERSXzI1CisweDQ4MjggVVNfQUxVX0FMUEhBX0FERFJfMjYKKzB4NDgyQyBVU19BTFVfQUxQSEFfQUREUl8yNworMHg0ODMwIFVTX0FMVV9BTFBIQV9BRERSXzI4CisweDQ4MzQgVVNfQUxVX0FMUEhBX0FERFJfMjkKKzB4NDgzOCBVU19BTFVfQUxQSEFfQUREUl8zMAorMHg0ODNDIFVTX0FMVV9BTFBIQV9BRERSXzMxCisweDQ4NDAgVVNfQUxVX0FMUEhBX0FERFJfMzIKKzB4NDg0NCBVU19BTFVfQUxQSEFfQUREUl8zMworMHg0ODQ4IFVTX0FMVV9BTFBIQV9BRERSXzM0CisweDQ4NEMgVVNfQUxVX0FMUEhBX0FERFJfMzUKKzB4NDg1MCBVU19BTFVfQUxQSEFfQUREUl8zNgorMHg0ODU0IFVTX0FMVV9BTFBIQV9BRERSXzM3CisweDQ4NTggVVNfQUxVX0FMUEhBX0FERFJfMzgKKzB4NDg1QyBVU19BTFVfQUxQSEFfQUREUl8zOQorMHg0ODYwIFVTX0FMVV9BTFBIQV9BRERSXzQwCisweDQ4NjQgVVNfQUxVX0FMUEhBX0FERFJfNDEKKzB4NDg2OCBVU19BTFVfQUxQSEFfQUREUl80MgorMHg0ODZDIFVTX0FMVV9BTFBIQV9BRERSXzQzCisweDQ4NzAgVVNfQUxVX0FMUEhBX0FERFJfNDQKKzB4NDg3NCBVU19BTFVfQUxQSEFfQUREUl80NQorMHg0ODc4IFVTX0FMVV9BTFBIQV9BRERSXzQ2CisweDQ4N0MgVVNfQUxVX0FMUEhBX0FERFJfNDcKKzB4NDg4MCBVU19BTFVfQUxQSEFfQUREUl80OAorMHg0ODg0IFVTX0FMVV9BTFBIQV9BRERSXzQ5CisweDQ4ODggVVNfQUxVX0FMUEhBX0FERFJfNTAKKzB4NDg4QyBVU19BTFVfQUxQSEFfQUREUl81MQorMHg0ODkwIFVTX0FMVV9BTFBIQV9BRERSXzUyCisweDQ4OTQgVVNfQUxVX0FMUEhBX0FERFJfNTMKKzB4NDg5OCBVU19BTFVfQUxQSEFfQUREUl81NAorMHg0ODlDIFVTX0FMVV9BTFBIQV9BRERSXzU1CisweDQ4QTAgVVNfQUxVX0FMUEhBX0FERFJfNTYKKzB4NDhBNCBVU19BTFVfQUxQSEFfQUREUl81NworMHg0OEE4IFVTX0FMVV9BTFBIQV9BRERSXzU4CisweDQ4QUMgVVNfQUxVX0FMUEhBX0FERFJfNTkKKzB4NDhCMCBVU19BTFVfQUxQSEFfQUREUl82MAorMHg0OEI0IFVTX0FMVV9BTFBIQV9BRERSXzYxCisweDQ4QjggVVNfQUxVX0FMUEhBX0FERFJfNjIKKzB4NDhCQyBVU19BTFVfQUxQSEFfQUREUl82MworMHg0OEMwIFVTX0FMVV9SR0JfSU5TVF8wCisweDQ4QzQgVVNfQUxVX1JHQl9JTlNUXzEKKzB4NDhDOCBVU19BTFVfUkdCX0lOU1RfMgorMHg0OENDIFVTX0FMVV9SR0JfSU5TVF8zCisweDQ4RDAgVVNfQUxVX1JHQl9JTlNUXzQKKzB4NDhENCBVU19BTFVfUkdCX0lOU1RfNQorMHg0OEQ4IFVTX0FMVV9SR0JfSU5TVF82CisweDQ4REMgVVNfQUxVX1JHQl9JTlNUXzcKKzB4NDhFMCBVU19BTFVfUkdCX0lOU1RfOAorMHg0OEU0IFVTX0FMVV9SR0JfSU5TVF85CisweDQ4RTggVVNfQUxVX1JHQl9JTlNUXzEwCisweDQ4RUMgVVNfQUxVX1JHQl9JTlNUXzExCisweDQ4RjAgVVNfQUxVX1JHQl9JTlNUXzEyCisweDQ4RjQgVVNfQUxVX1JHQl9JTlNUXzEzCisweDQ4RjggVVNfQUxVX1JHQl9JTlNUXzE0CisweDQ4RkMgVVNfQUxVX1JHQl9JTlNUXzE1CisweDQ5MDAgVVNfQUxVX1JHQl9JTlNUXzE2CisweDQ5MDQgVVNfQUxVX1JHQl9JTlNUXzE3CisweDQ5MDggVVNfQUxVX1JHQl9JTlNUXzE4CisweDQ5MEMgVVNfQUxVX1JHQl9JTlNUXzE5CisweDQ5MTAgVVNfQUxVX1JHQl9JTlNUXzIwCisweDQ5MTQgVVNfQUxVX1JHQl9JTlNUXzIxCisweDQ5MTggVVNfQUxVX1JHQl9JTlNUXzIyCisweDQ5MUMgVVNfQUxVX1JHQl9JTlNUXzIzCisweDQ5MjAgVVNfQUxVX1JHQl9JTlNUXzI0CisweDQ5MjQgVVNfQUxVX1JHQl9JTlNUXzI1CisweDQ5MjggVVNfQUxVX1JHQl9JTlNUXzI2CisweDQ5MkMgVVNfQUxVX1JHQl9JTlNUXzI3CisweDQ5MzAgVVNfQUxVX1JHQl9JTlNUXzI4CisweDQ5MzQgVVNfQUxVX1JHQl9JTlNUXzI5CisweDQ5MzggVVNfQUxVX1JHQl9JTlNUXzMwCisweDQ5M0MgVVNfQUxVX1JHQl9JTlNUXzMxCisweDQ5NDAgVVNfQUxVX1JHQl9JTlNUXzMyCisweDQ5NDQgVVNfQUxVX1JHQl9JTlNUXzMzCisweDQ5NDggVVNfQUxVX1JHQl9JTlNUXzM0CisweDQ5NEMgVVNfQUxVX1JHQl9JTlNUXzM1CisweDQ5NTAgVVNfQUxVX1JHQl9JTlNUXzM2CisweDQ5NTQgVVNfQUxVX1JHQl9JTlNUXzM3CisweDQ5NTggVVNfQUxVX1JHQl9JTlNUXzM4CisweDQ5NUMgVVNfQUxVX1JHQl9JTlNUXzM5CisweDQ5NjAgVVNfQUxVX1JHQl9JTlNUXzQwCisweDQ5NjQgVVNfQUxVX1JHQl9JTlNUXzQxCisweDQ5NjggVVNfQUxVX1JHQl9JTlNUXzQyCisweDQ5NkMgVVNfQUxVX1JHQl9JTlNUXzQzCisweDQ5NzAgVVNfQUxVX1JHQl9JTlNUXzQ0CisweDQ5NzQgVVNfQUxVX1JHQl9JTlNUXzQ1CisweDQ5NzggVVNfQUxVX1JHQl9JTlNUXzQ2CisweDQ5N0MgVVNfQUxVX1JHQl9JTlNUXzQ3CisweDQ5ODAgVVNfQUxVX1JHQl9JTlNUXzQ4CisweDQ5ODQgVVNfQUxVX1JHQl9JTlNUXzQ5CisweDQ5ODggVVNfQUxVX1JHQl9JTlNUXzUwCisweDQ5OEMgVVNfQUxVX1JHQl9JTlNUXzUxCisweDQ5OTAgVVNfQUxVX1JHQl9JTlNUXzUyCisweDQ5OTQgVVNfQUxVX1JHQl9JTlNUXzUzCisweDQ5OTggVVNfQUxVX1JHQl9JTlNUXzU0CisweDQ5OUMgVVNfQUxVX1JHQl9JTlNUXzU1CisweDQ5QTAgVVNfQUxVX1JHQl9JTlNUXzU2CisweDQ5QTQgVVNfQUxVX1JHQl9JTlNUXzU3CisweDQ5QTggVVNfQUxVX1JHQl9JTlNUXzU4CisweDQ5QUMgVVNfQUxVX1JHQl9JTlNUXzU5CisweDQ5QjAgVVNfQUxVX1JHQl9JTlNUXzYwCisweDQ5QjQgVVNfQUxVX1JHQl9JTlNUXzYxCisweDQ5QjggVVNfQUxVX1JHQl9JTlNUXzYyCisweDQ5QkMgVVNfQUxVX1JHQl9JTlNUXzYzCisweDQ5QzAgVVNfQUxVX0FMUEhBX0lOU1RfMAorMHg0OUM0IFVTX0FMVV9BTFBIQV9JTlNUXzEKKzB4NDlDOCBVU19BTFVfQUxQSEFfSU5TVF8yCisweDQ5Q0MgVVNfQUxVX0FMUEhBX0lOU1RfMworMHg0OUQwIFVTX0FMVV9BTFBIQV9JTlNUXzQKKzB4NDlENCBVU19BTFVfQUxQSEFfSU5TVF81CisweDQ5RDggVVNfQUxVX0FMUEhBX0lOU1RfNgorMHg0OURDIFVTX0FMVV9BTFBIQV9JTlNUXzcKKzB4NDlFMCBVU19BTFVfQUxQSEFfSU5TVF84CisweDQ5RTQgVVNfQUxVX0FMUEhBX0lOU1RfOQorMHg0OUU4IFVTX0FMVV9BTFBIQV9JTlNUXzEwCisweDQ5RUMgVVNfQUxVX0FMUEhBX0lOU1RfMTEKKzB4NDlGMCBVU19BTFVfQUxQSEFfSU5TVF8xMgorMHg0OUY0IFVTX0FMVV9BTFBIQV9JTlNUXzEzCisweDQ5RjggVVNfQUxVX0FMUEhBX0lOU1RfMTQKKzB4NDlGQyBVU19BTFVfQUxQSEFfSU5TVF8xNQorMHg0QTAwIFVTX0FMVV9BTFBIQV9JTlNUXzE2CisweDRBMDQgVVNfQUxVX0FMUEhBX0lOU1RfMTcKKzB4NEEwOCBVU19BTFVfQUxQSEFfSU5TVF8xOAorMHg0QTBDIFVTX0FMVV9BTFBIQV9JTlNUXzE5CisweDRBMTAgVVNfQUxVX0FMUEhBX0lOU1RfMjAKKzB4NEExNCBVU19BTFVfQUxQSEFfSU5TVF8yMQorMHg0QTE4IFVTX0FMVV9BTFBIQV9JTlNUXzIyCisweDRBMUMgVVNfQUxVX0FMUEhBX0lOU1RfMjMKKzB4NEEyMCBVU19BTFVfQUxQSEFfSU5TVF8yNAorMHg0QTI0IFVTX0FMVV9BTFBIQV9JTlNUXzI1CisweDRBMjggVVNfQUxVX0FMUEhBX0lOU1RfMjYKKzB4NEEyQyBVU19BTFVfQUxQSEFfSU5TVF8yNworMHg0QTMwIFVTX0FMVV9BTFBIQV9JTlNUXzI4CisweDRBMzQgVVNfQUxVX0FMUEhBX0lOU1RfMjkKKzB4NEEzOCBVU19BTFVfQUxQSEFfSU5TVF8zMAorMHg0QTNDIFVTX0FMVV9BTFBIQV9JTlNUXzMxCisweDRBNDAgVVNfQUxVX0FMUEhBX0lOU1RfMzIKKzB4NEE0NCBVU19BTFVfQUxQSEFfSU5TVF8zMworMHg0QTQ4IFVTX0FMVV9BTFBIQV9JTlNUXzM0CisweDRBNEMgVVNfQUxVX0FMUEhBX0lOU1RfMzUKKzB4NEE1MCBVU19BTFVfQUxQSEFfSU5TVF8zNgorMHg0QTU0IFVTX0FMVV9BTFBIQV9JTlNUXzM3CisweDRBNTggVVNfQUxVX0FMUEhBX0lOU1RfMzgKKzB4NEE1QyBVU19BTFVfQUxQSEFfSU5TVF8zOQorMHg0QTYwIFVTX0FMVV9BTFBIQV9JTlNUXzQwCisweDRBNjQgVVNfQUxVX0FMUEhBX0lOU1RfNDEKKzB4NEE2OCBVU19BTFVfQUxQSEFfSU5TVF80MgorMHg0QTZDIFVTX0FMVV9BTFBIQV9JTlNUXzQzCisweDRBNzAgVVNfQUxVX0FMUEhBX0lOU1RfNDQKKzB4NEE3NCBVU19BTFVfQUxQSEFfSU5TVF80NQorMHg0QTc4IFVTX0FMVV9BTFBIQV9JTlNUXzQ2CisweDRBN0MgVVNfQUxVX0FMUEhBX0lOU1RfNDcKKzB4NEE4MCBVU19BTFVfQUxQSEFfSU5TVF80OAorMHg0QTg0IFVTX0FMVV9BTFBIQV9JTlNUXzQ5CisweDRBODggVVNfQUxVX0FMUEhBX0lOU1RfNTAKKzB4NEE4QyBVU19BTFVfQUxQSEFfSU5TVF81MQorMHg0QTkwIFVTX0FMVV9BTFBIQV9JTlNUXzUyCisweDRBOTQgVVNfQUxVX0FMUEhBX0lOU1RfNTMKKzB4NEE5OCBVU19BTFVfQUxQSEFfSU5TVF81NAorMHg0QTlDIFVTX0FMVV9BTFBIQV9JTlNUXzU1CisweDRBQTAgVVNfQUxVX0FMUEhBX0lOU1RfNTYKKzB4NEFBNCBVU19BTFVfQUxQSEFfSU5TVF81NworMHg0QUE4IFVTX0FMVV9BTFBIQV9JTlNUXzU4CisweDRBQUMgVVNfQUxVX0FMUEhBX0lOU1RfNTkKKzB4NEFCMCBVU19BTFVfQUxQSEFfSU5TVF82MAorMHg0QUI0IFVTX0FMVV9BTFBIQV9JTlNUXzYxCisweDRBQjggVVNfQUxVX0FMUEhBX0lOU1RfNjIKKzB4NEFCQyBVU19BTFVfQUxQSEFfSU5TVF82MworMHg0QkMwIEZHX0ZPR19CTEVORAorMHg0QkM0IEZHX0ZPR19GQUNUT1IKKzB4NEJDOCBGR19GT0dfQ09MT1JfUgorMHg0QkNDIEZHX0ZPR19DT0xPUl9HCisweDRCRDAgRkdfRk9HX0NPTE9SX0IKKzB4NEJENCBGR19BTFBIQV9GVU5DCisweDRCRDggRkdfREVQVEhfU1JDCisweDRDMDAgVVNfQUxVX0NPTlNUX1JfMAorMHg0QzA0IFVTX0FMVV9DT05TVF9HXzAKKzB4NEMwOCBVU19BTFVfQ09OU1RfQl8wCisweDRDMEMgVVNfQUxVX0NPTlNUX0FfMAorMHg0QzEwIFVTX0FMVV9DT05TVF9SXzEKKzB4NEMxNCBVU19BTFVfQ09OU1RfR18xCisweDRDMTggVVNfQUxVX0NPTlNUX0JfMQorMHg0QzFDIFVTX0FMVV9DT05TVF9BXzEKKzB4NEMyMCBVU19BTFVfQ09OU1RfUl8yCisweDRDMjQgVVNfQUxVX0NPTlNUX0dfMgorMHg0QzI4IFVTX0FMVV9DT05TVF9CXzIKKzB4NEMyQyBVU19BTFVfQ09OU1RfQV8yCisweDRDMzAgVVNfQUxVX0NPTlNUX1JfMworMHg0QzM0IFVTX0FMVV9DT05TVF9HXzMKKzB4NEMzOCBVU19BTFVfQ09OU1RfQl8zCisweDRDM0MgVVNfQUxVX0NPTlNUX0FfMworMHg0QzQwIFVTX0FMVV9DT05TVF9SXzQKKzB4NEM0NCBVU19BTFVfQ09OU1RfR180CisweDRDNDggVVNfQUxVX0NPTlNUX0JfNAorMHg0QzRDIFVTX0FMVV9DT05TVF9BXzQKKzB4NEM1MCBVU19BTFVfQ09OU1RfUl81CisweDRDNTQgVVNfQUxVX0NPTlNUX0dfNQorMHg0QzU4IFVTX0FMVV9DT05TVF9CXzUKKzB4NEM1QyBVU19BTFVfQ09OU1RfQV81CisweDRDNjAgVVNfQUxVX0NPTlNUX1JfNgorMHg0QzY0IFVTX0FMVV9DT05TVF9HXzYKKzB4NEM2OCBVU19BTFVfQ09OU1RfQl82CisweDRDNkMgVVNfQUxVX0NPTlNUX0FfNgorMHg0QzcwIFVTX0FMVV9DT05TVF9SXzcKKzB4NEM3NCBVU19BTFVfQ09OU1RfR183CisweDRDNzggVVNfQUxVX0NPTlNUX0JfNworMHg0QzdDIFVTX0FMVV9DT05TVF9BXzcKKzB4NEM4MCBVU19BTFVfQ09OU1RfUl84CisweDRDODQgVVNfQUxVX0NPTlNUX0dfOAorMHg0Qzg4IFVTX0FMVV9DT05TVF9CXzgKKzB4NEM4QyBVU19BTFVfQ09OU1RfQV84CisweDRDOTAgVVNfQUxVX0NPTlNUX1JfOQorMHg0Qzk0IFVTX0FMVV9DT05TVF9HXzkKKzB4NEM5OCBVU19BTFVfQ09OU1RfQl85CisweDRDOUMgVVNfQUxVX0NPTlNUX0FfOQorMHg0Q0EwIFVTX0FMVV9DT05TVF9SXzEwCisweDRDQTQgVVNfQUxVX0NPTlNUX0dfMTAKKzB4NENBOCBVU19BTFVfQ09OU1RfQl8xMAorMHg0Q0FDIFVTX0FMVV9DT05TVF9BXzEwCisweDRDQjAgVVNfQUxVX0NPTlNUX1JfMTEKKzB4NENCNCBVU19BTFVfQ09OU1RfR18xMQorMHg0Q0I4IFVTX0FMVV9DT05TVF9CXzExCisweDRDQkMgVVNfQUxVX0NPTlNUX0FfMTEKKzB4NENDMCBVU19BTFVfQ09OU1RfUl8xMgorMHg0Q0M0IFVTX0FMVV9DT05TVF9HXzEyCisweDRDQzggVVNfQUxVX0NPTlNUX0JfMTIKKzB4NENDQyBVU19BTFVfQ09OU1RfQV8xMgorMHg0Q0QwIFVTX0FMVV9DT05TVF9SXzEzCisweDRDRDQgVVNfQUxVX0NPTlNUX0dfMTMKKzB4NENEOCBVU19BTFVfQ09OU1RfQl8xMworMHg0Q0RDIFVTX0FMVV9DT05TVF9BXzEzCisweDRDRTAgVVNfQUxVX0NPTlNUX1JfMTQKKzB4NENFNCBVU19BTFVfQ09OU1RfR18xNAorMHg0Q0U4IFVTX0FMVV9DT05TVF9CXzE0CisweDRDRUMgVVNfQUxVX0NPTlNUX0FfMTQKKzB4NENGMCBVU19BTFVfQ09OU1RfUl8xNQorMHg0Q0Y0IFVTX0FMVV9DT05TVF9HXzE1CisweDRDRjggVVNfQUxVX0NPTlNUX0JfMTUKKzB4NENGQyBVU19BTFVfQ09OU1RfQV8xNQorMHg0RDAwIFVTX0FMVV9DT05TVF9SXzE2CisweDREMDQgVVNfQUxVX0NPTlNUX0dfMTYKKzB4NEQwOCBVU19BTFVfQ09OU1RfQl8xNgorMHg0RDBDIFVTX0FMVV9DT05TVF9BXzE2CisweDREMTAgVVNfQUxVX0NPTlNUX1JfMTcKKzB4NEQxNCBVU19BTFVfQ09OU1RfR18xNworMHg0RDE4IFVTX0FMVV9DT05TVF9CXzE3CisweDREMUMgVVNfQUxVX0NPTlNUX0FfMTcKKzB4NEQyMCBVU19BTFVfQ09OU1RfUl8xOAorMHg0RDI0IFVTX0FMVV9DT05TVF9HXzE4CisweDREMjggVVNfQUxVX0NPTlNUX0JfMTgKKzB4NEQyQyBVU19BTFVfQ09OU1RfQV8xOAorMHg0RDMwIFVTX0FMVV9DT05TVF9SXzE5CisweDREMzQgVVNfQUxVX0NPTlNUX0dfMTkKKzB4NEQzOCBVU19BTFVfQ09OU1RfQl8xOQorMHg0RDNDIFVTX0FMVV9DT05TVF9BXzE5CisweDRENDAgVVNfQUxVX0NPTlNUX1JfMjAKKzB4NEQ0NCBVU19BTFVfQ09OU1RfR18yMAorMHg0RDQ4IFVTX0FMVV9DT05TVF9CXzIwCisweDRENEMgVVNfQUxVX0NPTlNUX0FfMjAKKzB4NEQ1MCBVU19BTFVfQ09OU1RfUl8yMQorMHg0RDU0IFVTX0FMVV9DT05TVF9HXzIxCisweDRENTggVVNfQUxVX0NPTlNUX0JfMjEKKzB4NEQ1QyBVU19BTFVfQ09OU1RfQV8yMQorMHg0RDYwIFVTX0FMVV9DT05TVF9SXzIyCisweDRENjQgVVNfQUxVX0NPTlNUX0dfMjIKKzB4NEQ2OCBVU19BTFVfQ09OU1RfQl8yMgorMHg0RDZDIFVTX0FMVV9DT05TVF9BXzIyCisweDRENzAgVVNfQUxVX0NPTlNUX1JfMjMKKzB4NEQ3NCBVU19BTFVfQ09OU1RfR18yMworMHg0RDc4IFVTX0FMVV9DT05TVF9CXzIzCisweDREN0MgVVNfQUxVX0NPTlNUX0FfMjMKKzB4NEQ4MCBVU19BTFVfQ09OU1RfUl8yNAorMHg0RDg0IFVTX0FMVV9DT05TVF9HXzI0CisweDREODggVVNfQUxVX0NPTlNUX0JfMjQKKzB4NEQ4QyBVU19BTFVfQ09OU1RfQV8yNAorMHg0RDkwIFVTX0FMVV9DT05TVF9SXzI1CisweDREOTQgVVNfQUxVX0NPTlNUX0dfMjUKKzB4NEQ5OCBVU19BTFVfQ09OU1RfQl8yNQorMHg0RDlDIFVTX0FMVV9DT05TVF9BXzI1CisweDREQTAgVVNfQUxVX0NPTlNUX1JfMjYKKzB4NERBNCBVU19BTFVfQ09OU1RfR18yNgorMHg0REE4IFVTX0FMVV9DT05TVF9CXzI2CisweDREQUMgVVNfQUxVX0NPTlNUX0FfMjYKKzB4NERCMCBVU19BTFVfQ09OU1RfUl8yNworMHg0REI0IFVTX0FMVV9DT05TVF9HXzI3CisweDREQjggVVNfQUxVX0NPTlNUX0JfMjcKKzB4NERCQyBVU19BTFVfQ09OU1RfQV8yNworMHg0REMwIFVTX0FMVV9DT05TVF9SXzI4CisweDREQzQgVVNfQUxVX0NPTlNUX0dfMjgKKzB4NERDOCBVU19BTFVfQ09OU1RfQl8yOAorMHg0RENDIFVTX0FMVV9DT05TVF9BXzI4CisweDRERDAgVVNfQUxVX0NPTlNUX1JfMjkKKzB4NERENCBVU19BTFVfQ09OU1RfR18yOQorMHg0REQ4IFVTX0FMVV9DT05TVF9CXzI5CisweDREREMgVVNfQUxVX0NPTlNUX0FfMjkKKzB4NERFMCBVU19BTFVfQ09OU1RfUl8zMAorMHg0REU0IFVTX0FMVV9DT05TVF9HXzMwCisweDRERTggVVNfQUxVX0NPTlNUX0JfMzAKKzB4NERFQyBVU19BTFVfQ09OU1RfQV8zMAorMHg0REYwIFVTX0FMVV9DT05TVF9SXzMxCisweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKKzB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQorMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCisweDRFMDQgUkIzRF9CTEVORENOVExfUjMKKzB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKKzB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSworMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKKzB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCisweDRFMTggUkIzRF9ST1BDTlRMX1IzCisweDRFMUMgUkIzRF9DTFJDTVBfRkxJUEVfUjMKKzB4NEUyMCBSQjNEX0NMUkNNUF9DTFJfUjMKKzB4NEUyNCBSQjNEX0NMUkNNUF9NU0tfUjMKKzB4NEU0OCBSQjNEX0RFQlVHX0NUTAorMHg0RTRDIFJCM0RfRFNUQ0FDSEVfQ1RMU1RBVF9SMworMHg0RTUwIFJCM0RfRElUSEVSX0NUTAorMHg0RTU0IFJCM0RfQ01BU0tfT0ZGU0VUMAorMHg0RTU4IFJCM0RfQ01BU0tfT0ZGU0VUMQorMHg0RTVDIFJCM0RfQ01BU0tfT0ZGU0VUMgorMHg0RTYwIFJCM0RfQ01BU0tfT0ZGU0VUMworMHg0RTY0IFJCM0RfQ01BU0tfUElUQ0gwCisweDRFNjggUkIzRF9DTUFTS19QSVRDSDEKKzB4NEU2QyBSQjNEX0NNQVNLX1BJVENIMgorMHg0RTcwIFJCM0RfQ01BU0tfUElUQ0gzCisweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCisweDRFNzggUkIzRF9DTUFTS19EV09SRAorMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAorMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAorMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICisweDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCisweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECisweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECisweDRGMDQgWkJfWlNURU5DSUxDTlRMCisweDRGMDggWkJfU1RFTkNJTFJFRk1BU0sKKzB4NEYxNCBaQl9aVE9QCisweDRGMTggWkJfWkNBQ0hFX0NUTFNUQVQKKzB4NEYxQyBaQl9CV19DTlRMCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCisweDRGMzAgWkJfWk1BU0tfT0ZGU0VUCisweDRGMzQgWkJfWk1BU0tfUElUQ0gKKzB4NEYzOCBaQl9aTUFTS19XUklOREVYCisweDRGM0MgWkJfWk1BU0tfRFdPUkQKKzB4NEY0MCBaQl9aTUFTS19SRElOREVYCisweDRGNDQgWkJfSElaX09GRlNFVAorMHg0RjQ4IFpCX0hJWl9XUklOREVYCisweDRGNEMgWkJfSElaX0RXT1JECisweDRGNTAgWkJfSElaX1JESU5ERVgKKzB4NEY1NCBaQl9ISVpfUElUQ0gKKzB4NEY1OCBaQl9aUEFTU19EQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JuNTAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JuNTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4N2I2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3Mvcm41MApAQCAtMCwwICsxLDMwIEBACitybjUwIDB4MzI5NAorMHgxNDM0IFNSQ19ZX1gKKzB4MTQzOCBEU1RfWV9YCisweDE0M0MgRFNUX0hFSUdIVF9XSURUSAorMHgxNDZDIERQX0dVSV9NQVNURVJfQ05UTAorMHgxNDc0IEJSVVNIX1lfWAorMHgxNDc4IERQX0JSVVNIX0JLR0RfQ0xSCisweDE0N0MgRFBfQlJVU0hfRlJHRF9DTFIKKzB4MTQ4MCBCUlVTSF9EQVRBMAorMHgxNDg0IEJSVVNIX0RBVEExCisweDE1OTggRFNUX1dJRFRIX0hFSUdIVAorMHgxNUMwIENMUl9DTVBfQ05UTAorMHgxNUM0IENMUl9DTVBfQ0xSX1NSQworMHgxNUM4IENMUl9DTVBfQ0xSX0RTVAorMHgxNUNDIENMUl9DTVBfTVNLCisweDE1RDggRFBfU1JDX0ZSR0RfQ0xSCisweDE1REMgRFBfU1JDX0JLR0RfQ0xSCisweDE2MDAgRFNUX0xJTkVfU1RBUlQKKzB4MTYwNCBEU1RfTElORV9FTkQKKzB4MTYwOCBEU1RfTElORV9QQVRDT1VOVAorMHgxNkMwIERQX0NOVEwKKzB4MTZDQyBEUF9XUklURV9NU0sKKzB4MTZEMCBEUF9DTlRMX1hESVJfWURJUl9ZTUFKT1IKKzB4MTZFOCBERUZBVUxUX1NDX0JPVFRPTV9SSUdIVAorMHgxNkVDIFNDX1RPUF9MRUZUCisweDE2RjAgU0NfQk9UVE9NX1JJR0hUCisweDE2RjQgU1JDX1NDX0JPVFRPTV9SSUdIVAorMHgxNzE0IERTVENBQ0hFX0NUTFNUQVQKKzB4MTcyMCBXQUlUX1VOVElMCisweDE3MkMgUkJCTV9HVUlDTlRMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JzNjAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNjMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMApAQCAtMCwwICsxLDcyOSBAQAorcnM2MDAgMHg2ZDQwCisweDE0MzQgU1JDX1lfWAorMHgxNDM4IERTVF9ZX1gKKzB4MTQzQyBEU1RfSEVJR0hUX1dJRFRICisweDE0NkMgRFBfR1VJX01BU1RFUl9DTlRMCisweDE0NzQgQlJVU0hfWV9YCisweDE0NzggRFBfQlJVU0hfQktHRF9DTFIKKzB4MTQ3QyBEUF9CUlVTSF9GUkdEX0NMUgorMHgxNDgwIEJSVVNIX0RBVEEwCisweDE0ODQgQlJVU0hfREFUQTEKKzB4MTU5OCBEU1RfV0lEVEhfSEVJR0hUCisweDE1QzAgQ0xSX0NNUF9DTlRMCisweDE1QzQgQ0xSX0NNUF9DTFJfU1JDCisweDE1QzggQ0xSX0NNUF9DTFJfRFNUCisweDE1Q0MgQ0xSX0NNUF9NU0sKKzB4MTVEOCBEUF9TUkNfRlJHRF9DTFIKKzB4MTVEQyBEUF9TUkNfQktHRF9DTFIKKzB4MTYwMCBEU1RfTElORV9TVEFSVAorMHgxNjA0IERTVF9MSU5FX0VORAorMHgxNjA4IERTVF9MSU5FX1BBVENPVU5UCisweDE2QzAgRFBfQ05UTAorMHgxNkNDIERQX1dSSVRFX01TSworMHgxNkQwIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUgorMHgxNkU4IERFRkFVTFRfU0NfQk9UVE9NX1JJR0hUCisweDE2RUMgU0NfVE9QX0xFRlQKKzB4MTZGMCBTQ19CT1RUT01fUklHSFQKKzB4MTZGNCBTUkNfU0NfQk9UVE9NX1JJR0hUCisweDE3MTQgRFNUQ0FDSEVfQ1RMU1RBVAorMHgxNzIwIFdBSVRfVU5USUwKKzB4MTcyQyBSQkJNX0dVSUNOVEwKKzB4MUQ5OCBWQVBfVlBPUlRfWFNDQUxFCisweDFEOUMgVkFQX1ZQT1JUX1hPRkZTRVQKKzB4MURBMCBWQVBfVlBPUlRfWVNDQUxFCisweDFEQTQgVkFQX1ZQT1JUX1lPRkZTRVQKKzB4MURBOCBWQVBfVlBPUlRfWlNDQUxFCisweDFEQUMgVkFQX1ZQT1JUX1pPRkZTRVQKKzB4MjA4MCBWQVBfQ05UTAorMHgyMDkwIFZBUF9PVVRfVlRYX0ZNVF8wCisweDIwOTQgVkFQX09VVF9WVFhfRk1UXzEKKzB4MjBCMCBWQVBfVlRFX0NOVEwKKzB4MjEzOCBWQVBfVkZfTUlOX1ZUWF9JTkRYCisweDIxNDAgVkFQX0NOVExfU1RBVFVTCisweDIxNTAgVkFQX1BST0dfU1RSRUFNX0NOVExfMAorMHgyMTU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzEKKzB4MjE1OCBWQVBfUFJPR19TVFJFQU1fQ05UTF8yCisweDIxNUMgVkFQX1BST0dfU1RSRUFNX0NOVExfMworMHgyMTYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzQKKzB4MjE2NCBWQVBfUFJPR19TVFJFQU1fQ05UTF81CisweDIxNjggVkFQX1BST0dfU1RSRUFNX0NOVExfNgorMHgyMTZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzcKKzB4MjE4MCBWQVBfVlRYX1NUQVRFX0NOVEwKKzB4MjE4NCBWQVBfVlNNX1ZUWF9BU1NNCisweDIxODggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzAKKzB4MjE4QyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMQorMHgyMTkwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18yCisweDIxOTQgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzMKKzB4MjE5OCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNAorMHgyMTlDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR181CisweDIxQTAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzYKKzB4MjFBNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNworMHgyMUE4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR184CisweDIxQUMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzkKKzB4MjFCMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTAKKzB4MjFCNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTEKKzB4MjFCOCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTIKKzB4MjFCQyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTMKKzB4MjFDMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTQKKzB4MjFDNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTUKKzB4MjFEQyBWQVBfUFNDX1NHTl9OT1JNX0NOVEwKKzB4MjFFMCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMAorMHgyMUU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8xCisweDIxRTggVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzIKKzB4MjFFQyBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMworMHgyMUYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF80CisweDIxRjQgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzUKKzB4MjFGOCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNgorMHgyMUZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF83CisweDIyMDAgVkFQX1BWU19WRUNUT1JfSU5EWF9SRUcKKzB4MjIwNCBWQVBfUFZTX1ZFQ1RPUl9EQVRBX1JFRworMHgyMjA4IFZBUF9QVlNfVkVDVE9SX0RBVEFfUkVHXzEyOAorMHgyMjFDIFZBUF9DTElQX0NOVEwKKzB4MjIyMCBWQVBfR0JfVkVSVF9DTElQX0FESgorMHgyMjI0IFZBUF9HQl9WRVJUX0RJU0NfQURKCisweDIyMjggVkFQX0dCX0hPUlpfQ0xJUF9BREoKKzB4MjIyQyBWQVBfR0JfSE9SWl9ESVNDX0FESgorMHgyMjMwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzAKKzB4MjIzNCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xCisweDIyMzggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMgorMHgyMjNDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzMKKzB4MjI0MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU180CisweDIyNDQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNQorMHgyMjQ4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzYKKzB4MjI0QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU183CisweDIyNTAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfOAorMHgyMjU0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzkKKzB4MjI1OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMAorMHgyMjVDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzExCisweDIyNjAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTIKKzB4MjI2NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMworMHgyMjY4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzE0CisweDIyNkMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTUKKzB4MjI4NCBWQVBfUFZTX1NUQVRFX0ZMVVNIX1JFRworMHgyMjg4IFZBUF9QVlNfVlRYX1RJTUVPVVRfUkVHCisweDIyOTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8wCisweDIyOTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xCisweDIyOTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8yCisweDIyOUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8zCisweDIyQTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF80CisweDIyQTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF81CisweDIyQTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF82CisweDIyQUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF83CisweDIyQjAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF84CisweDIyQjQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF85CisweDIyQjggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMAorMHgyMkJDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTEKKzB4MjJDMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEyCisweDIyQzQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMworMHgyMkM4IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTQKKzB4MjJDQyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzE1CisweDIyRDAgVkFQX1BWU19DT0RFX0NOVExfMAorMHgyMkQ0IFZBUF9QVlNfQ09OU1RfQ05UTAorMHgyMkQ4IFZBUF9QVlNfQ09ERV9DTlRMXzEKKzB4MjJEQyBWQVBfUFZTX0ZMT1dfQ05UTF9PUEMKKzB4MzQyQyBSQjJEX0RTVENBQ0hFX0NUTFNUQVQKKzB4NDAwMCBHQl9WQVBfUkFTVEVSX1ZUWF9GTVRfMAorMHg0MDA0IEdCX1ZBUF9SQVNURVJfVlRYX0ZNVF8xCisweDQwMDggR0JfRU5BQkxFCisweDQwMUMgR0JfU0VMRUNUCisweDQwMjAgR0JfQUFfQ09ORklHCisweDQwMjQgR0JfRklGT19TSVpFCisweDQxMDAgVFhfSU5WQUxUQUdTCisweDQyMDAgR0FfUE9JTlRfUzAKKzB4NDIwNCBHQV9QT0lOVF9UMAorMHg0MjA4IEdBX1BPSU5UX1MxCisweDQyMEMgR0FfUE9JTlRfVDEKKzB4NDIxNCBHQV9UUklBTkdMRV9TVElQUExFCisweDQyMUMgR0FfUE9JTlRfU0laRQorMHg0MjMwIEdBX1BPSU5UX01JTk1BWAorMHg0MjM0IEdBX0xJTkVfQ05UTAorMHg0MjM4IEdBX0xJTkVfU1RJUFBMRV9DT05GSUcKKzB4NDI2MCBHQV9MSU5FX1NUSVBQTEVfVkFMVUUKKzB4NDI2NCBHQV9MSU5FX1MwCisweDQyNjggR0FfTElORV9TMQorMHg0Mjc4IEdBX0NPTE9SX0NPTlRST0wKKzB4NDI3QyBHQV9TT0xJRF9SRworMHg0MjgwIEdBX1NPTElEX0JBCisweDQyODggR0FfUE9MWV9NT0RFCisweDQyOEMgR0FfUk9VTkRfTU9ERQorMHg0MjkwIEdBX09GRlNFVAorMHg0Mjk0IEdBX0ZPR19TQ0FMRQorMHg0Mjk4IEdBX0ZPR19PRkZTRVQKKzB4NDJBMCBTVV9URVhfV1JBUAorMHg0MkE0IFNVX1BPTFlfT0ZGU0VUX0ZST05UX1NDQUxFCisweDQyQTggU1VfUE9MWV9PRkZTRVRfRlJPTlRfT0ZGU0VUCisweDQyQUMgU1VfUE9MWV9PRkZTRVRfQkFDS19TQ0FMRQorMHg0MkIwIFNVX1BPTFlfT0ZGU0VUX0JBQ0tfT0ZGU0VUIAorMHg0MkI0IFNVX1BPTFlfT0ZGU0VUX0VOQUJMRQorMHg0MkI4IFNVX0NVTExfTU9ERQorMHg0MkMwIFNVX0RFUFRIX1NDQUxFCisweDQyQzQgU1VfREVQVEhfT0ZGU0VUCisweDQyQzggU1VfUkVHX0RFU1QKKzB4NDMwMCBSU19DT1VOVAorMHg0MzA0IFJTX0lOU1RfQ09VTlQKKzB4NDMxMCBSU19JUF8wCisweDQzMTQgUlNfSVBfMQorMHg0MzE4IFJTX0lQXzIKKzB4NDMxQyBSU19JUF8zCisweDQzMjAgUlNfSVBfNAorMHg0MzI0IFJTX0lQXzUKKzB4NDMyOCBSU19JUF82CisweDQzMkMgUlNfSVBfNworMHg0MzMwIFJTX0lOU1RfMAorMHg0MzM0IFJTX0lOU1RfMQorMHg0MzM4IFJTX0lOU1RfMgorMHg0MzNDIFJTX0lOU1RfMworMHg0MzQwIFJTX0lOU1RfNAorMHg0MzQ0IFJTX0lOU1RfNQorMHg0MzQ4IFJTX0lOU1RfNgorMHg0MzRDIFJTX0lOU1RfNworMHg0MzUwIFJTX0lOU1RfOAorMHg0MzU0IFJTX0lOU1RfOQorMHg0MzU4IFJTX0lOU1RfMTAKKzB4NDM1QyBSU19JTlNUXzExCisweDQzNjAgUlNfSU5TVF8xMgorMHg0MzY0IFJTX0lOU1RfMTMKKzB4NDM2OCBSU19JTlNUXzE0CisweDQzNkMgUlNfSU5TVF8xNQorMHg0M0E0IFNDX0hZUEVSWl9FTgorMHg0M0E4IFNDX0VER0VSVUxFCisweDQzQjAgU0NfQ0xJUF8wX0EKKzB4NDNCNCBTQ19DTElQXzBfQgorMHg0M0I4IFNDX0NMSVBfMV9BCisweDQzQkMgU0NfQ0xJUF8xX0IKKzB4NDNDMCBTQ19DTElQXzJfQQorMHg0M0M0IFNDX0NMSVBfMl9CCisweDQzQzggU0NfQ0xJUF8zX0EKKzB4NDNDQyBTQ19DTElQXzNfQgorMHg0M0QwIFNDX0NMSVBfUlVMRQorMHg0M0UwIFNDX1NDSVNTT1IwCisweDQzRTggU0NfU0NSRUVORE9PUgorMHg0NDQwIFRYX0ZJTFRFUjFfMAorMHg0NDQ0IFRYX0ZJTFRFUjFfMQorMHg0NDQ4IFRYX0ZJTFRFUjFfMgorMHg0NDRDIFRYX0ZJTFRFUjFfMworMHg0NDUwIFRYX0ZJTFRFUjFfNAorMHg0NDU0IFRYX0ZJTFRFUjFfNQorMHg0NDU4IFRYX0ZJTFRFUjFfNgorMHg0NDVDIFRYX0ZJTFRFUjFfNworMHg0NDYwIFRYX0ZJTFRFUjFfOAorMHg0NDY0IFRYX0ZJTFRFUjFfOQorMHg0NDY4IFRYX0ZJTFRFUjFfMTAKKzB4NDQ2QyBUWF9GSUxURVIxXzExCisweDQ0NzAgVFhfRklMVEVSMV8xMgorMHg0NDc0IFRYX0ZJTFRFUjFfMTMKKzB4NDQ3OCBUWF9GSUxURVIxXzE0CisweDQ0N0MgVFhfRklMVEVSMV8xNQorMHg0NTgwIFRYX0NIUk9NQV9LRVlfMAorMHg0NTg0IFRYX0NIUk9NQV9LRVlfMQorMHg0NTg4IFRYX0NIUk9NQV9LRVlfMgorMHg0NThDIFRYX0NIUk9NQV9LRVlfMworMHg0NTkwIFRYX0NIUk9NQV9LRVlfNAorMHg0NTk0IFRYX0NIUk9NQV9LRVlfNQorMHg0NTk4IFRYX0NIUk9NQV9LRVlfNgorMHg0NTlDIFRYX0NIUk9NQV9LRVlfNworMHg0NUEwIFRYX0NIUk9NQV9LRVlfOAorMHg0NUE0IFRYX0NIUk9NQV9LRVlfOQorMHg0NUE4IFRYX0NIUk9NQV9LRVlfMTAKKzB4NDVBQyBUWF9DSFJPTUFfS0VZXzExCisweDQ1QjAgVFhfQ0hST01BX0tFWV8xMgorMHg0NUI0IFRYX0NIUk9NQV9LRVlfMTMKKzB4NDVCOCBUWF9DSFJPTUFfS0VZXzE0CisweDQ1QkMgVFhfQ0hST01BX0tFWV8xNQorMHg0NUMwIFRYX0JPUkRFUl9DT0xPUl8wCisweDQ1QzQgVFhfQk9SREVSX0NPTE9SXzEKKzB4NDVDOCBUWF9CT1JERVJfQ09MT1JfMgorMHg0NUNDIFRYX0JPUkRFUl9DT0xPUl8zCisweDQ1RDAgVFhfQk9SREVSX0NPTE9SXzQKKzB4NDVENCBUWF9CT1JERVJfQ09MT1JfNQorMHg0NUQ4IFRYX0JPUkRFUl9DT0xPUl82CisweDQ1REMgVFhfQk9SREVSX0NPTE9SXzcKKzB4NDVFMCBUWF9CT1JERVJfQ09MT1JfOAorMHg0NUU0IFRYX0JPUkRFUl9DT0xPUl85CisweDQ1RTggVFhfQk9SREVSX0NPTE9SXzEwCisweDQ1RUMgVFhfQk9SREVSX0NPTE9SXzExCisweDQ1RjAgVFhfQk9SREVSX0NPTE9SXzEyCisweDQ1RjQgVFhfQk9SREVSX0NPTE9SXzEzCisweDQ1RjggVFhfQk9SREVSX0NPTE9SXzE0CisweDQ1RkMgVFhfQk9SREVSX0NPTE9SXzE1CisweDQ2MDAgVVNfQ09ORklHCisweDQ2MDQgVVNfUElYU0laRQorMHg0NjA4IFVTX0NPREVfT0ZGU0VUCisweDQ2MEMgVVNfUkVTRVQKKzB4NDYxMCBVU19DT0RFX0FERFJfMAorMHg0NjE0IFVTX0NPREVfQUREUl8xCisweDQ2MTggVVNfQ09ERV9BRERSXzIKKzB4NDYxQyBVU19DT0RFX0FERFJfMworMHg0NjIwIFVTX1RFWF9JTlNUXzAKKzB4NDYyNCBVU19URVhfSU5TVF8xCisweDQ2MjggVVNfVEVYX0lOU1RfMgorMHg0NjJDIFVTX1RFWF9JTlNUXzMKKzB4NDYzMCBVU19URVhfSU5TVF80CisweDQ2MzQgVVNfVEVYX0lOU1RfNQorMHg0NjM4IFVTX1RFWF9JTlNUXzYKKzB4NDYzQyBVU19URVhfSU5TVF83CisweDQ2NDAgVVNfVEVYX0lOU1RfOAorMHg0NjQ0IFVTX1RFWF9JTlNUXzkKKzB4NDY0OCBVU19URVhfSU5TVF8xMAorMHg0NjRDIFVTX1RFWF9JTlNUXzExCisweDQ2NTAgVVNfVEVYX0lOU1RfMTIKKzB4NDY1NCBVU19URVhfSU5TVF8xMworMHg0NjU4IFVTX1RFWF9JTlNUXzE0CisweDQ2NUMgVVNfVEVYX0lOU1RfMTUKKzB4NDY2MCBVU19URVhfSU5TVF8xNgorMHg0NjY0IFVTX1RFWF9JTlNUXzE3CisweDQ2NjggVVNfVEVYX0lOU1RfMTgKKzB4NDY2QyBVU19URVhfSU5TVF8xOQorMHg0NjcwIFVTX1RFWF9JTlNUXzIwCisweDQ2NzQgVVNfVEVYX0lOU1RfMjEKKzB4NDY3OCBVU19URVhfSU5TVF8yMgorMHg0NjdDIFVTX1RFWF9JTlNUXzIzCisweDQ2ODAgVVNfVEVYX0lOU1RfMjQKKzB4NDY4NCBVU19URVhfSU5TVF8yNQorMHg0Njg4IFVTX1RFWF9JTlNUXzI2CisweDQ2OEMgVVNfVEVYX0lOU1RfMjcKKzB4NDY5MCBVU19URVhfSU5TVF8yOAorMHg0Njk0IFVTX1RFWF9JTlNUXzI5CisweDQ2OTggVVNfVEVYX0lOU1RfMzAKKzB4NDY5QyBVU19URVhfSU5TVF8zMQorMHg0NkE0IFVTX09VVF9GTVRfMAorMHg0NkE4IFVTX09VVF9GTVRfMQorMHg0NkFDIFVTX09VVF9GTVRfMgorMHg0NkIwIFVTX09VVF9GTVRfMworMHg0NkI0IFVTX1dfRk1UCisweDQ2QzAgVVNfQUxVX1JHQl9BRERSXzAKKzB4NDZDNCBVU19BTFVfUkdCX0FERFJfMQorMHg0NkM4IFVTX0FMVV9SR0JfQUREUl8yCisweDQ2Q0MgVVNfQUxVX1JHQl9BRERSXzMKKzB4NDZEMCBVU19BTFVfUkdCX0FERFJfNAorMHg0NkQ0IFVTX0FMVV9SR0JfQUREUl81CisweDQ2RDggVVNfQUxVX1JHQl9BRERSXzYKKzB4NDZEQyBVU19BTFVfUkdCX0FERFJfNworMHg0NkUwIFVTX0FMVV9SR0JfQUREUl84CisweDQ2RTQgVVNfQUxVX1JHQl9BRERSXzkKKzB4NDZFOCBVU19BTFVfUkdCX0FERFJfMTAKKzB4NDZFQyBVU19BTFVfUkdCX0FERFJfMTEKKzB4NDZGMCBVU19BTFVfUkdCX0FERFJfMTIKKzB4NDZGNCBVU19BTFVfUkdCX0FERFJfMTMKKzB4NDZGOCBVU19BTFVfUkdCX0FERFJfMTQKKzB4NDZGQyBVU19BTFVfUkdCX0FERFJfMTUKKzB4NDcwMCBVU19BTFVfUkdCX0FERFJfMTYKKzB4NDcwNCBVU19BTFVfUkdCX0FERFJfMTcKKzB4NDcwOCBVU19BTFVfUkdCX0FERFJfMTgKKzB4NDcwQyBVU19BTFVfUkdCX0FERFJfMTkKKzB4NDcxMCBVU19BTFVfUkdCX0FERFJfMjAKKzB4NDcxNCBVU19BTFVfUkdCX0FERFJfMjEKKzB4NDcxOCBVU19BTFVfUkdCX0FERFJfMjIKKzB4NDcxQyBVU19BTFVfUkdCX0FERFJfMjMKKzB4NDcyMCBVU19BTFVfUkdCX0FERFJfMjQKKzB4NDcyNCBVU19BTFVfUkdCX0FERFJfMjUKKzB4NDcyOCBVU19BTFVfUkdCX0FERFJfMjYKKzB4NDcyQyBVU19BTFVfUkdCX0FERFJfMjcKKzB4NDczMCBVU19BTFVfUkdCX0FERFJfMjgKKzB4NDczNCBVU19BTFVfUkdCX0FERFJfMjkKKzB4NDczOCBVU19BTFVfUkdCX0FERFJfMzAKKzB4NDczQyBVU19BTFVfUkdCX0FERFJfMzEKKzB4NDc0MCBVU19BTFVfUkdCX0FERFJfMzIKKzB4NDc0NCBVU19BTFVfUkdCX0FERFJfMzMKKzB4NDc0OCBVU19BTFVfUkdCX0FERFJfMzQKKzB4NDc0QyBVU19BTFVfUkdCX0FERFJfMzUKKzB4NDc1MCBVU19BTFVfUkdCX0FERFJfMzYKKzB4NDc1NCBVU19BTFVfUkdCX0FERFJfMzcKKzB4NDc1OCBVU19BTFVfUkdCX0FERFJfMzgKKzB4NDc1QyBVU19BTFVfUkdCX0FERFJfMzkKKzB4NDc2MCBVU19BTFVfUkdCX0FERFJfNDAKKzB4NDc2NCBVU19BTFVfUkdCX0FERFJfNDEKKzB4NDc2OCBVU19BTFVfUkdCX0FERFJfNDIKKzB4NDc2QyBVU19BTFVfUkdCX0FERFJfNDMKKzB4NDc3MCBVU19BTFVfUkdCX0FERFJfNDQKKzB4NDc3NCBVU19BTFVfUkdCX0FERFJfNDUKKzB4NDc3OCBVU19BTFVfUkdCX0FERFJfNDYKKzB4NDc3QyBVU19BTFVfUkdCX0FERFJfNDcKKzB4NDc4MCBVU19BTFVfUkdCX0FERFJfNDgKKzB4NDc4NCBVU19BTFVfUkdCX0FERFJfNDkKKzB4NDc4OCBVU19BTFVfUkdCX0FERFJfNTAKKzB4NDc4QyBVU19BTFVfUkdCX0FERFJfNTEKKzB4NDc5MCBVU19BTFVfUkdCX0FERFJfNTIKKzB4NDc5NCBVU19BTFVfUkdCX0FERFJfNTMKKzB4NDc5OCBVU19BTFVfUkdCX0FERFJfNTQKKzB4NDc5QyBVU19BTFVfUkdCX0FERFJfNTUKKzB4NDdBMCBVU19BTFVfUkdCX0FERFJfNTYKKzB4NDdBNCBVU19BTFVfUkdCX0FERFJfNTcKKzB4NDdBOCBVU19BTFVfUkdCX0FERFJfNTgKKzB4NDdBQyBVU19BTFVfUkdCX0FERFJfNTkKKzB4NDdCMCBVU19BTFVfUkdCX0FERFJfNjAKKzB4NDdCNCBVU19BTFVfUkdCX0FERFJfNjEKKzB4NDdCOCBVU19BTFVfUkdCX0FERFJfNjIKKzB4NDdCQyBVU19BTFVfUkdCX0FERFJfNjMKKzB4NDdDMCBVU19BTFVfQUxQSEFfQUREUl8wCisweDQ3QzQgVVNfQUxVX0FMUEhBX0FERFJfMQorMHg0N0M4IFVTX0FMVV9BTFBIQV9BRERSXzIKKzB4NDdDQyBVU19BTFVfQUxQSEFfQUREUl8zCisweDQ3RDAgVVNfQUxVX0FMUEhBX0FERFJfNAorMHg0N0Q0IFVTX0FMVV9BTFBIQV9BRERSXzUKKzB4NDdEOCBVU19BTFVfQUxQSEFfQUREUl82CisweDQ3REMgVVNfQUxVX0FMUEhBX0FERFJfNworMHg0N0UwIFVTX0FMVV9BTFBIQV9BRERSXzgKKzB4NDdFNCBVU19BTFVfQUxQSEFfQUREUl85CisweDQ3RTggVVNfQUxVX0FMUEhBX0FERFJfMTAKKzB4NDdFQyBVU19BTFVfQUxQSEFfQUREUl8xMQorMHg0N0YwIFVTX0FMVV9BTFBIQV9BRERSXzEyCisweDQ3RjQgVVNfQUxVX0FMUEhBX0FERFJfMTMKKzB4NDdGOCBVU19BTFVfQUxQSEFfQUREUl8xNAorMHg0N0ZDIFVTX0FMVV9BTFBIQV9BRERSXzE1CisweDQ4MDAgVVNfQUxVX0FMUEhBX0FERFJfMTYKKzB4NDgwNCBVU19BTFVfQUxQSEFfQUREUl8xNworMHg0ODA4IFVTX0FMVV9BTFBIQV9BRERSXzE4CisweDQ4MEMgVVNfQUxVX0FMUEhBX0FERFJfMTkKKzB4NDgxMCBVU19BTFVfQUxQSEFfQUREUl8yMAorMHg0ODE0IFVTX0FMVV9BTFBIQV9BRERSXzIxCisweDQ4MTggVVNfQUxVX0FMUEhBX0FERFJfMjIKKzB4NDgxQyBVU19BTFVfQUxQSEFfQUREUl8yMworMHg0ODIwIFVTX0FMVV9BTFBIQV9BRERSXzI0CisweDQ4MjQgVVNfQUxVX0FMUEhBX0FERFJfMjUKKzB4NDgyOCBVU19BTFVfQUxQSEFfQUREUl8yNgorMHg0ODJDIFVTX0FMVV9BTFBIQV9BRERSXzI3CisweDQ4MzAgVVNfQUxVX0FMUEhBX0FERFJfMjgKKzB4NDgzNCBVU19BTFVfQUxQSEFfQUREUl8yOQorMHg0ODM4IFVTX0FMVV9BTFBIQV9BRERSXzMwCisweDQ4M0MgVVNfQUxVX0FMUEhBX0FERFJfMzEKKzB4NDg0MCBVU19BTFVfQUxQSEFfQUREUl8zMgorMHg0ODQ0IFVTX0FMVV9BTFBIQV9BRERSXzMzCisweDQ4NDggVVNfQUxVX0FMUEhBX0FERFJfMzQKKzB4NDg0QyBVU19BTFVfQUxQSEFfQUREUl8zNQorMHg0ODUwIFVTX0FMVV9BTFBIQV9BRERSXzM2CisweDQ4NTQgVVNfQUxVX0FMUEhBX0FERFJfMzcKKzB4NDg1OCBVU19BTFVfQUxQSEFfQUREUl8zOAorMHg0ODVDIFVTX0FMVV9BTFBIQV9BRERSXzM5CisweDQ4NjAgVVNfQUxVX0FMUEhBX0FERFJfNDAKKzB4NDg2NCBVU19BTFVfQUxQSEFfQUREUl80MQorMHg0ODY4IFVTX0FMVV9BTFBIQV9BRERSXzQyCisweDQ4NkMgVVNfQUxVX0FMUEhBX0FERFJfNDMKKzB4NDg3MCBVU19BTFVfQUxQSEFfQUREUl80NAorMHg0ODc0IFVTX0FMVV9BTFBIQV9BRERSXzQ1CisweDQ4NzggVVNfQUxVX0FMUEhBX0FERFJfNDYKKzB4NDg3QyBVU19BTFVfQUxQSEFfQUREUl80NworMHg0ODgwIFVTX0FMVV9BTFBIQV9BRERSXzQ4CisweDQ4ODQgVVNfQUxVX0FMUEhBX0FERFJfNDkKKzB4NDg4OCBVU19BTFVfQUxQSEFfQUREUl81MAorMHg0ODhDIFVTX0FMVV9BTFBIQV9BRERSXzUxCisweDQ4OTAgVVNfQUxVX0FMUEhBX0FERFJfNTIKKzB4NDg5NCBVU19BTFVfQUxQSEFfQUREUl81MworMHg0ODk4IFVTX0FMVV9BTFBIQV9BRERSXzU0CisweDQ4OUMgVVNfQUxVX0FMUEhBX0FERFJfNTUKKzB4NDhBMCBVU19BTFVfQUxQSEFfQUREUl81NgorMHg0OEE0IFVTX0FMVV9BTFBIQV9BRERSXzU3CisweDQ4QTggVVNfQUxVX0FMUEhBX0FERFJfNTgKKzB4NDhBQyBVU19BTFVfQUxQSEFfQUREUl81OQorMHg0OEIwIFVTX0FMVV9BTFBIQV9BRERSXzYwCisweDQ4QjQgVVNfQUxVX0FMUEhBX0FERFJfNjEKKzB4NDhCOCBVU19BTFVfQUxQSEFfQUREUl82MgorMHg0OEJDIFVTX0FMVV9BTFBIQV9BRERSXzYzCisweDQ4QzAgVVNfQUxVX1JHQl9JTlNUXzAKKzB4NDhDNCBVU19BTFVfUkdCX0lOU1RfMQorMHg0OEM4IFVTX0FMVV9SR0JfSU5TVF8yCisweDQ4Q0MgVVNfQUxVX1JHQl9JTlNUXzMKKzB4NDhEMCBVU19BTFVfUkdCX0lOU1RfNAorMHg0OEQ0IFVTX0FMVV9SR0JfSU5TVF81CisweDQ4RDggVVNfQUxVX1JHQl9JTlNUXzYKKzB4NDhEQyBVU19BTFVfUkdCX0lOU1RfNworMHg0OEUwIFVTX0FMVV9SR0JfSU5TVF84CisweDQ4RTQgVVNfQUxVX1JHQl9JTlNUXzkKKzB4NDhFOCBVU19BTFVfUkdCX0lOU1RfMTAKKzB4NDhFQyBVU19BTFVfUkdCX0lOU1RfMTEKKzB4NDhGMCBVU19BTFVfUkdCX0lOU1RfMTIKKzB4NDhGNCBVU19BTFVfUkdCX0lOU1RfMTMKKzB4NDhGOCBVU19BTFVfUkdCX0lOU1RfMTQKKzB4NDhGQyBVU19BTFVfUkdCX0lOU1RfMTUKKzB4NDkwMCBVU19BTFVfUkdCX0lOU1RfMTYKKzB4NDkwNCBVU19BTFVfUkdCX0lOU1RfMTcKKzB4NDkwOCBVU19BTFVfUkdCX0lOU1RfMTgKKzB4NDkwQyBVU19BTFVfUkdCX0lOU1RfMTkKKzB4NDkxMCBVU19BTFVfUkdCX0lOU1RfMjAKKzB4NDkxNCBVU19BTFVfUkdCX0lOU1RfMjEKKzB4NDkxOCBVU19BTFVfUkdCX0lOU1RfMjIKKzB4NDkxQyBVU19BTFVfUkdCX0lOU1RfMjMKKzB4NDkyMCBVU19BTFVfUkdCX0lOU1RfMjQKKzB4NDkyNCBVU19BTFVfUkdCX0lOU1RfMjUKKzB4NDkyOCBVU19BTFVfUkdCX0lOU1RfMjYKKzB4NDkyQyBVU19BTFVfUkdCX0lOU1RfMjcKKzB4NDkzMCBVU19BTFVfUkdCX0lOU1RfMjgKKzB4NDkzNCBVU19BTFVfUkdCX0lOU1RfMjkKKzB4NDkzOCBVU19BTFVfUkdCX0lOU1RfMzAKKzB4NDkzQyBVU19BTFVfUkdCX0lOU1RfMzEKKzB4NDk0MCBVU19BTFVfUkdCX0lOU1RfMzIKKzB4NDk0NCBVU19BTFVfUkdCX0lOU1RfMzMKKzB4NDk0OCBVU19BTFVfUkdCX0lOU1RfMzQKKzB4NDk0QyBVU19BTFVfUkdCX0lOU1RfMzUKKzB4NDk1MCBVU19BTFVfUkdCX0lOU1RfMzYKKzB4NDk1NCBVU19BTFVfUkdCX0lOU1RfMzcKKzB4NDk1OCBVU19BTFVfUkdCX0lOU1RfMzgKKzB4NDk1QyBVU19BTFVfUkdCX0lOU1RfMzkKKzB4NDk2MCBVU19BTFVfUkdCX0lOU1RfNDAKKzB4NDk2NCBVU19BTFVfUkdCX0lOU1RfNDEKKzB4NDk2OCBVU19BTFVfUkdCX0lOU1RfNDIKKzB4NDk2QyBVU19BTFVfUkdCX0lOU1RfNDMKKzB4NDk3MCBVU19BTFVfUkdCX0lOU1RfNDQKKzB4NDk3NCBVU19BTFVfUkdCX0lOU1RfNDUKKzB4NDk3OCBVU19BTFVfUkdCX0lOU1RfNDYKKzB4NDk3QyBVU19BTFVfUkdCX0lOU1RfNDcKKzB4NDk4MCBVU19BTFVfUkdCX0lOU1RfNDgKKzB4NDk4NCBVU19BTFVfUkdCX0lOU1RfNDkKKzB4NDk4OCBVU19BTFVfUkdCX0lOU1RfNTAKKzB4NDk4QyBVU19BTFVfUkdCX0lOU1RfNTEKKzB4NDk5MCBVU19BTFVfUkdCX0lOU1RfNTIKKzB4NDk5NCBVU19BTFVfUkdCX0lOU1RfNTMKKzB4NDk5OCBVU19BTFVfUkdCX0lOU1RfNTQKKzB4NDk5QyBVU19BTFVfUkdCX0lOU1RfNTUKKzB4NDlBMCBVU19BTFVfUkdCX0lOU1RfNTYKKzB4NDlBNCBVU19BTFVfUkdCX0lOU1RfNTcKKzB4NDlBOCBVU19BTFVfUkdCX0lOU1RfNTgKKzB4NDlBQyBVU19BTFVfUkdCX0lOU1RfNTkKKzB4NDlCMCBVU19BTFVfUkdCX0lOU1RfNjAKKzB4NDlCNCBVU19BTFVfUkdCX0lOU1RfNjEKKzB4NDlCOCBVU19BTFVfUkdCX0lOU1RfNjIKKzB4NDlCQyBVU19BTFVfUkdCX0lOU1RfNjMKKzB4NDlDMCBVU19BTFVfQUxQSEFfSU5TVF8wCisweDQ5QzQgVVNfQUxVX0FMUEhBX0lOU1RfMQorMHg0OUM4IFVTX0FMVV9BTFBIQV9JTlNUXzIKKzB4NDlDQyBVU19BTFVfQUxQSEFfSU5TVF8zCisweDQ5RDAgVVNfQUxVX0FMUEhBX0lOU1RfNAorMHg0OUQ0IFVTX0FMVV9BTFBIQV9JTlNUXzUKKzB4NDlEOCBVU19BTFVfQUxQSEFfSU5TVF82CisweDQ5REMgVVNfQUxVX0FMUEhBX0lOU1RfNworMHg0OUUwIFVTX0FMVV9BTFBIQV9JTlNUXzgKKzB4NDlFNCBVU19BTFVfQUxQSEFfSU5TVF85CisweDQ5RTggVVNfQUxVX0FMUEhBX0lOU1RfMTAKKzB4NDlFQyBVU19BTFVfQUxQSEFfSU5TVF8xMQorMHg0OUYwIFVTX0FMVV9BTFBIQV9JTlNUXzEyCisweDQ5RjQgVVNfQUxVX0FMUEhBX0lOU1RfMTMKKzB4NDlGOCBVU19BTFVfQUxQSEFfSU5TVF8xNAorMHg0OUZDIFVTX0FMVV9BTFBIQV9JTlNUXzE1CisweDRBMDAgVVNfQUxVX0FMUEhBX0lOU1RfMTYKKzB4NEEwNCBVU19BTFVfQUxQSEFfSU5TVF8xNworMHg0QTA4IFVTX0FMVV9BTFBIQV9JTlNUXzE4CisweDRBMEMgVVNfQUxVX0FMUEhBX0lOU1RfMTkKKzB4NEExMCBVU19BTFVfQUxQSEFfSU5TVF8yMAorMHg0QTE0IFVTX0FMVV9BTFBIQV9JTlNUXzIxCisweDRBMTggVVNfQUxVX0FMUEhBX0lOU1RfMjIKKzB4NEExQyBVU19BTFVfQUxQSEFfSU5TVF8yMworMHg0QTIwIFVTX0FMVV9BTFBIQV9JTlNUXzI0CisweDRBMjQgVVNfQUxVX0FMUEhBX0lOU1RfMjUKKzB4NEEyOCBVU19BTFVfQUxQSEFfSU5TVF8yNgorMHg0QTJDIFVTX0FMVV9BTFBIQV9JTlNUXzI3CisweDRBMzAgVVNfQUxVX0FMUEhBX0lOU1RfMjgKKzB4NEEzNCBVU19BTFVfQUxQSEFfSU5TVF8yOQorMHg0QTM4IFVTX0FMVV9BTFBIQV9JTlNUXzMwCisweDRBM0MgVVNfQUxVX0FMUEhBX0lOU1RfMzEKKzB4NEE0MCBVU19BTFVfQUxQSEFfSU5TVF8zMgorMHg0QTQ0IFVTX0FMVV9BTFBIQV9JTlNUXzMzCisweDRBNDggVVNfQUxVX0FMUEhBX0lOU1RfMzQKKzB4NEE0QyBVU19BTFVfQUxQSEFfSU5TVF8zNQorMHg0QTUwIFVTX0FMVV9BTFBIQV9JTlNUXzM2CisweDRBNTQgVVNfQUxVX0FMUEhBX0lOU1RfMzcKKzB4NEE1OCBVU19BTFVfQUxQSEFfSU5TVF8zOAorMHg0QTVDIFVTX0FMVV9BTFBIQV9JTlNUXzM5CisweDRBNjAgVVNfQUxVX0FMUEhBX0lOU1RfNDAKKzB4NEE2NCBVU19BTFVfQUxQSEFfSU5TVF80MQorMHg0QTY4IFVTX0FMVV9BTFBIQV9JTlNUXzQyCisweDRBNkMgVVNfQUxVX0FMUEhBX0lOU1RfNDMKKzB4NEE3MCBVU19BTFVfQUxQSEFfSU5TVF80NAorMHg0QTc0IFVTX0FMVV9BTFBIQV9JTlNUXzQ1CisweDRBNzggVVNfQUxVX0FMUEhBX0lOU1RfNDYKKzB4NEE3QyBVU19BTFVfQUxQSEFfSU5TVF80NworMHg0QTgwIFVTX0FMVV9BTFBIQV9JTlNUXzQ4CisweDRBODQgVVNfQUxVX0FMUEhBX0lOU1RfNDkKKzB4NEE4OCBVU19BTFVfQUxQSEFfSU5TVF81MAorMHg0QThDIFVTX0FMVV9BTFBIQV9JTlNUXzUxCisweDRBOTAgVVNfQUxVX0FMUEhBX0lOU1RfNTIKKzB4NEE5NCBVU19BTFVfQUxQSEFfSU5TVF81MworMHg0QTk4IFVTX0FMVV9BTFBIQV9JTlNUXzU0CisweDRBOUMgVVNfQUxVX0FMUEhBX0lOU1RfNTUKKzB4NEFBMCBVU19BTFVfQUxQSEFfSU5TVF81NgorMHg0QUE0IFVTX0FMVV9BTFBIQV9JTlNUXzU3CisweDRBQTggVVNfQUxVX0FMUEhBX0lOU1RfNTgKKzB4NEFBQyBVU19BTFVfQUxQSEFfSU5TVF81OQorMHg0QUIwIFVTX0FMVV9BTFBIQV9JTlNUXzYwCisweDRBQjQgVVNfQUxVX0FMUEhBX0lOU1RfNjEKKzB4NEFCOCBVU19BTFVfQUxQSEFfSU5TVF82MgorMHg0QUJDIFVTX0FMVV9BTFBIQV9JTlNUXzYzCisweDRCQzAgRkdfRk9HX0JMRU5ECisweDRCQzQgRkdfRk9HX0ZBQ1RPUgorMHg0QkM4IEZHX0ZPR19DT0xPUl9SCisweDRCQ0MgRkdfRk9HX0NPTE9SX0cKKzB4NEJEMCBGR19GT0dfQ09MT1JfQgorMHg0QkQ0IEZHX0FMUEhBX0ZVTkMKKzB4NEJEOCBGR19ERVBUSF9TUkMKKzB4NEMwMCBVU19BTFVfQ09OU1RfUl8wCisweDRDMDQgVVNfQUxVX0NPTlNUX0dfMAorMHg0QzA4IFVTX0FMVV9DT05TVF9CXzAKKzB4NEMwQyBVU19BTFVfQ09OU1RfQV8wCisweDRDMTAgVVNfQUxVX0NPTlNUX1JfMQorMHg0QzE0IFVTX0FMVV9DT05TVF9HXzEKKzB4NEMxOCBVU19BTFVfQ09OU1RfQl8xCisweDRDMUMgVVNfQUxVX0NPTlNUX0FfMQorMHg0QzIwIFVTX0FMVV9DT05TVF9SXzIKKzB4NEMyNCBVU19BTFVfQ09OU1RfR18yCisweDRDMjggVVNfQUxVX0NPTlNUX0JfMgorMHg0QzJDIFVTX0FMVV9DT05TVF9BXzIKKzB4NEMzMCBVU19BTFVfQ09OU1RfUl8zCisweDRDMzQgVVNfQUxVX0NPTlNUX0dfMworMHg0QzM4IFVTX0FMVV9DT05TVF9CXzMKKzB4NEMzQyBVU19BTFVfQ09OU1RfQV8zCisweDRDNDAgVVNfQUxVX0NPTlNUX1JfNAorMHg0QzQ0IFVTX0FMVV9DT05TVF9HXzQKKzB4NEM0OCBVU19BTFVfQ09OU1RfQl80CisweDRDNEMgVVNfQUxVX0NPTlNUX0FfNAorMHg0QzUwIFVTX0FMVV9DT05TVF9SXzUKKzB4NEM1NCBVU19BTFVfQ09OU1RfR181CisweDRDNTggVVNfQUxVX0NPTlNUX0JfNQorMHg0QzVDIFVTX0FMVV9DT05TVF9BXzUKKzB4NEM2MCBVU19BTFVfQ09OU1RfUl82CisweDRDNjQgVVNfQUxVX0NPTlNUX0dfNgorMHg0QzY4IFVTX0FMVV9DT05TVF9CXzYKKzB4NEM2QyBVU19BTFVfQ09OU1RfQV82CisweDRDNzAgVVNfQUxVX0NPTlNUX1JfNworMHg0Qzc0IFVTX0FMVV9DT05TVF9HXzcKKzB4NEM3OCBVU19BTFVfQ09OU1RfQl83CisweDRDN0MgVVNfQUxVX0NPTlNUX0FfNworMHg0QzgwIFVTX0FMVV9DT05TVF9SXzgKKzB4NEM4NCBVU19BTFVfQ09OU1RfR184CisweDRDODggVVNfQUxVX0NPTlNUX0JfOAorMHg0QzhDIFVTX0FMVV9DT05TVF9BXzgKKzB4NEM5MCBVU19BTFVfQ09OU1RfUl85CisweDRDOTQgVVNfQUxVX0NPTlNUX0dfOQorMHg0Qzk4IFVTX0FMVV9DT05TVF9CXzkKKzB4NEM5QyBVU19BTFVfQ09OU1RfQV85CisweDRDQTAgVVNfQUxVX0NPTlNUX1JfMTAKKzB4NENBNCBVU19BTFVfQ09OU1RfR18xMAorMHg0Q0E4IFVTX0FMVV9DT05TVF9CXzEwCisweDRDQUMgVVNfQUxVX0NPTlNUX0FfMTAKKzB4NENCMCBVU19BTFVfQ09OU1RfUl8xMQorMHg0Q0I0IFVTX0FMVV9DT05TVF9HXzExCisweDRDQjggVVNfQUxVX0NPTlNUX0JfMTEKKzB4NENCQyBVU19BTFVfQ09OU1RfQV8xMQorMHg0Q0MwIFVTX0FMVV9DT05TVF9SXzEyCisweDRDQzQgVVNfQUxVX0NPTlNUX0dfMTIKKzB4NENDOCBVU19BTFVfQ09OU1RfQl8xMgorMHg0Q0NDIFVTX0FMVV9DT05TVF9BXzEyCisweDRDRDAgVVNfQUxVX0NPTlNUX1JfMTMKKzB4NENENCBVU19BTFVfQ09OU1RfR18xMworMHg0Q0Q4IFVTX0FMVV9DT05TVF9CXzEzCisweDRDREMgVVNfQUxVX0NPTlNUX0FfMTMKKzB4NENFMCBVU19BTFVfQ09OU1RfUl8xNAorMHg0Q0U0IFVTX0FMVV9DT05TVF9HXzE0CisweDRDRTggVVNfQUxVX0NPTlNUX0JfMTQKKzB4NENFQyBVU19BTFVfQ09OU1RfQV8xNAorMHg0Q0YwIFVTX0FMVV9DT05TVF9SXzE1CisweDRDRjQgVVNfQUxVX0NPTlNUX0dfMTUKKzB4NENGOCBVU19BTFVfQ09OU1RfQl8xNQorMHg0Q0ZDIFVTX0FMVV9DT05TVF9BXzE1CisweDREMDAgVVNfQUxVX0NPTlNUX1JfMTYKKzB4NEQwNCBVU19BTFVfQ09OU1RfR18xNgorMHg0RDA4IFVTX0FMVV9DT05TVF9CXzE2CisweDREMEMgVVNfQUxVX0NPTlNUX0FfMTYKKzB4NEQxMCBVU19BTFVfQ09OU1RfUl8xNworMHg0RDE0IFVTX0FMVV9DT05TVF9HXzE3CisweDREMTggVVNfQUxVX0NPTlNUX0JfMTcKKzB4NEQxQyBVU19BTFVfQ09OU1RfQV8xNworMHg0RDIwIFVTX0FMVV9DT05TVF9SXzE4CisweDREMjQgVVNfQUxVX0NPTlNUX0dfMTgKKzB4NEQyOCBVU19BTFVfQ09OU1RfQl8xOAorMHg0RDJDIFVTX0FMVV9DT05TVF9BXzE4CisweDREMzAgVVNfQUxVX0NPTlNUX1JfMTkKKzB4NEQzNCBVU19BTFVfQ09OU1RfR18xOQorMHg0RDM4IFVTX0FMVV9DT05TVF9CXzE5CisweDREM0MgVVNfQUxVX0NPTlNUX0FfMTkKKzB4NEQ0MCBVU19BTFVfQ09OU1RfUl8yMAorMHg0RDQ0IFVTX0FMVV9DT05TVF9HXzIwCisweDRENDggVVNfQUxVX0NPTlNUX0JfMjAKKzB4NEQ0QyBVU19BTFVfQ09OU1RfQV8yMAorMHg0RDUwIFVTX0FMVV9DT05TVF9SXzIxCisweDRENTQgVVNfQUxVX0NPTlNUX0dfMjEKKzB4NEQ1OCBVU19BTFVfQ09OU1RfQl8yMQorMHg0RDVDIFVTX0FMVV9DT05TVF9BXzIxCisweDRENjAgVVNfQUxVX0NPTlNUX1JfMjIKKzB4NEQ2NCBVU19BTFVfQ09OU1RfR18yMgorMHg0RDY4IFVTX0FMVV9DT05TVF9CXzIyCisweDRENkMgVVNfQUxVX0NPTlNUX0FfMjIKKzB4NEQ3MCBVU19BTFVfQ09OU1RfUl8yMworMHg0RDc0IFVTX0FMVV9DT05TVF9HXzIzCisweDRENzggVVNfQUxVX0NPTlNUX0JfMjMKKzB4NEQ3QyBVU19BTFVfQ09OU1RfQV8yMworMHg0RDgwIFVTX0FMVV9DT05TVF9SXzI0CisweDREODQgVVNfQUxVX0NPTlNUX0dfMjQKKzB4NEQ4OCBVU19BTFVfQ09OU1RfQl8yNAorMHg0RDhDIFVTX0FMVV9DT05TVF9BXzI0CisweDREOTAgVVNfQUxVX0NPTlNUX1JfMjUKKzB4NEQ5NCBVU19BTFVfQ09OU1RfR18yNQorMHg0RDk4IFVTX0FMVV9DT05TVF9CXzI1CisweDREOUMgVVNfQUxVX0NPTlNUX0FfMjUKKzB4NERBMCBVU19BTFVfQ09OU1RfUl8yNgorMHg0REE0IFVTX0FMVV9DT05TVF9HXzI2CisweDREQTggVVNfQUxVX0NPTlNUX0JfMjYKKzB4NERBQyBVU19BTFVfQ09OU1RfQV8yNgorMHg0REIwIFVTX0FMVV9DT05TVF9SXzI3CisweDREQjQgVVNfQUxVX0NPTlNUX0dfMjcKKzB4NERCOCBVU19BTFVfQ09OU1RfQl8yNworMHg0REJDIFVTX0FMVV9DT05TVF9BXzI3CisweDREQzAgVVNfQUxVX0NPTlNUX1JfMjgKKzB4NERDNCBVU19BTFVfQ09OU1RfR18yOAorMHg0REM4IFVTX0FMVV9DT05TVF9CXzI4CisweDREQ0MgVVNfQUxVX0NPTlNUX0FfMjgKKzB4NEREMCBVU19BTFVfQ09OU1RfUl8yOQorMHg0REQ0IFVTX0FMVV9DT05TVF9HXzI5CisweDRERDggVVNfQUxVX0NPTlNUX0JfMjkKKzB4NEREQyBVU19BTFVfQ09OU1RfQV8yOQorMHg0REUwIFVTX0FMVV9DT05TVF9SXzMwCisweDRERTQgVVNfQUxVX0NPTlNUX0dfMzAKKzB4NERFOCBVU19BTFVfQ09OU1RfQl8zMAorMHg0REVDIFVTX0FMVV9DT05TVF9BXzMwCisweDRERjAgVVNfQUxVX0NPTlNUX1JfMzEKKzB4NERGNCBVU19BTFVfQ09OU1RfR18zMQorMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCisweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKKzB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMworMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMworMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCisweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgorMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKKzB4NEUxOCBSQjNEX1JPUENOVExfUjMKKzB4NEUxQyBSQjNEX0NMUkNNUF9GTElQRV9SMworMHg0RTIwIFJCM0RfQ0xSQ01QX0NMUl9SMworMHg0RTI0IFJCM0RfQ0xSQ01QX01TS19SMworMHg0RTQ4IFJCM0RfREVCVUdfQ1RMCisweDRFNEMgUkIzRF9EU1RDQUNIRV9DVExTVEFUX1IzCisweDRFNTAgUkIzRF9ESVRIRVJfQ1RMCisweDRFNTQgUkIzRF9DTUFTS19PRkZTRVQwCisweDRFNTggUkIzRF9DTUFTS19PRkZTRVQxCisweDRFNUMgUkIzRF9DTUFTS19PRkZTRVQyCisweDRFNjAgUkIzRF9DTUFTS19PRkZTRVQzCisweDRFNjQgUkIzRF9DTUFTS19QSVRDSDAKKzB4NEU2OCBSQjNEX0NNQVNLX1BJVENIMQorMHg0RTZDIFJCM0RfQ01BU0tfUElUQ0gyCisweDRFNzAgUkIzRF9DTUFTS19QSVRDSDMKKzB4NEU3NCBSQjNEX0NNQVNLX1dSSU5ERVgKKzB4NEU3OCBSQjNEX0NNQVNLX0RXT1JECisweDRFN0MgUkIzRF9DTUFTS19SRElOREVYCisweDRFODAgUkIzRF9BQVJFU09MVkVfT0ZGU0VUCisweDRFODQgUkIzRF9BQVJFU09MVkVfUElUQ0gKKzB4NEU4OCBSQjNEX0FBUkVTT0xWRV9DVEwKKzB4NEVBMCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0xURV9USFJFU0hPTEQKKzB4NEVBNCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0dURV9USFJFU0hPTEQKKzB4NEYwNCBaQl9aU1RFTkNJTENOVEwKKzB4NEYwOCBaQl9TVEVOQ0lMUkVGTUFTSworMHg0RjE0IFpCX1pUT1AKKzB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAorMHg0RjFDIFpCX0JXX0NOVEwKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKKzB4NEYzMCBaQl9aTUFTS19PRkZTRVQKKzB4NEYzNCBaQl9aTUFTS19QSVRDSAorMHg0RjM4IFpCX1pNQVNLX1dSSU5ERVgKKzB4NEYzQyBaQl9aTUFTS19EV09SRAorMHg0RjQwIFpCX1pNQVNLX1JESU5ERVgKKzB4NEY0NCBaQl9ISVpfT0ZGU0VUCisweDRGNDggWkJfSElaX1dSSU5ERVgKKzB4NEY0QyBaQl9ISVpfRFdPUkQKKzB4NEY1MCBaQl9ISVpfUkRJTkRFWAorMHg0RjU0IFpCX0hJWl9QSVRDSAorMHg0RjU4IFpCX1pQQVNTX0RBVEEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDJhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CkBAIC0wLDAgKzEsNDg2IEBACitydjUxNSAweDZkNDAKKzB4MTQzNCBTUkNfWV9YCisweDE0MzggRFNUX1lfWAorMHgxNDNDIERTVF9IRUlHSFRfV0lEVEgKKzB4MTQ2QyBEUF9HVUlfTUFTVEVSX0NOVEwKKzB4MTQ3NCBCUlVTSF9ZX1gKKzB4MTQ3OCBEUF9CUlVTSF9CS0dEX0NMUgorMHgxNDdDIERQX0JSVVNIX0ZSR0RfQ0xSCisweDE0ODAgQlJVU0hfREFUQTAKKzB4MTQ4NCBCUlVTSF9EQVRBMQorMHgxNTk4IERTVF9XSURUSF9IRUlHSFQKKzB4MTVDMCBDTFJfQ01QX0NOVEwKKzB4MTVDNCBDTFJfQ01QX0NMUl9TUkMKKzB4MTVDOCBDTFJfQ01QX0NMUl9EU1QKKzB4MTVDQyBDTFJfQ01QX01TSworMHgxNUQ4IERQX1NSQ19GUkdEX0NMUgorMHgxNURDIERQX1NSQ19CS0dEX0NMUgorMHgxNjAwIERTVF9MSU5FX1NUQVJUCisweDE2MDQgRFNUX0xJTkVfRU5ECisweDE2MDggRFNUX0xJTkVfUEFUQ09VTlQKKzB4MTZDMCBEUF9DTlRMCisweDE2Q0MgRFBfV1JJVEVfTVNLCisweDE2RDAgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SCisweDE2RTggREVGQVVMVF9TQ19CT1RUT01fUklHSFQKKzB4MTZFQyBTQ19UT1BfTEVGVAorMHgxNkYwIFNDX0JPVFRPTV9SSUdIVAorMHgxNkY0IFNSQ19TQ19CT1RUT01fUklHSFQKKzB4MTcxNCBEU1RDQUNIRV9DVExTVEFUCisweDE3MjAgV0FJVF9VTlRJTAorMHgxNzJDIFJCQk1fR1VJQ05UTAorMHgxRDk4IFZBUF9WUE9SVF9YU0NBTEUKKzB4MUQ5QyBWQVBfVlBPUlRfWE9GRlNFVAorMHgxREEwIFZBUF9WUE9SVF9ZU0NBTEUKKzB4MURBNCBWQVBfVlBPUlRfWU9GRlNFVAorMHgxREE4IFZBUF9WUE9SVF9aU0NBTEUKKzB4MURBQyBWQVBfVlBPUlRfWk9GRlNFVAorMHgyMDgwIFZBUF9DTlRMCisweDIwOTAgVkFQX09VVF9WVFhfRk1UXzAKKzB4MjA5NCBWQVBfT1VUX1ZUWF9GTVRfMQorMHgyMEIwIFZBUF9WVEVfQ05UTAorMHgyMTM4IFZBUF9WRl9NSU5fVlRYX0lORFgKKzB4MjE0MCBWQVBfQ05UTF9TVEFUVVMKKzB4MjE1MCBWQVBfUFJPR19TVFJFQU1fQ05UTF8wCisweDIxNTQgVkFQX1BST0dfU1RSRUFNX0NOVExfMQorMHgyMTU4IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzIKKzB4MjE1QyBWQVBfUFJPR19TVFJFQU1fQ05UTF8zCisweDIxNjAgVkFQX1BST0dfU1RSRUFNX0NOVExfNAorMHgyMTY0IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzUKKzB4MjE2OCBWQVBfUFJPR19TVFJFQU1fQ05UTF82CisweDIxNkMgVkFQX1BST0dfU1RSRUFNX0NOVExfNworMHgyMTgwIFZBUF9WVFhfU1RBVEVfQ05UTAorMHgyMTg0IFZBUF9WU01fVlRYX0FTU00KKzB4MjE4OCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMAorMHgyMThDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xCisweDIxOTAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzIKKzB4MjE5NCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMworMHgyMTk4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR180CisweDIxOUMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzUKKzB4MjFBMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNgorMHgyMUE0IFZBUF9WVFhfU1RBVEVfSU5EX1JFR183CisweDIxQTggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzgKKzB4MjFBQyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfOQorMHgyMUIwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMAorMHgyMUI0IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMQorMHgyMUI4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMgorMHgyMUJDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xMworMHgyMUMwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xNAorMHgyMUM0IFZBUF9WVFhfU1RBVEVfSU5EX1JFR18xNQorMHgyMURDIFZBUF9QU0NfU0dOX05PUk1fQ05UTAorMHgyMUUwIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8wCisweDIxRTQgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzEKKzB4MjFFOCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMgorMHgyMUVDIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8zCisweDIxRjAgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzQKKzB4MjFGNCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNQorMHgyMUY4IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF82CisweDIxRkMgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzcKKzB4MjIwMCBWQVBfUFZTX1ZFQ1RPUl9JTkRYX1JFRworMHgyMjA0IFZBUF9QVlNfVkVDVE9SX0RBVEFfUkVHCisweDIyMDggVkFQX1BWU19WRUNUT1JfREFUQV9SRUdfMTI4CisweDIyMTggVkFQX1RFWF9UT19DT0xPUl9DTlRMCisweDIyMUMgVkFQX0NMSVBfQ05UTAorMHgyMjIwIFZBUF9HQl9WRVJUX0NMSVBfQURKCisweDIyMjQgVkFQX0dCX1ZFUlRfRElTQ19BREoKKzB4MjIyOCBWQVBfR0JfSE9SWl9DTElQX0FESgorMHgyMjJDIFZBUF9HQl9IT1JaX0RJU0NfQURKCisweDIyMzAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMAorMHgyMjM0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzEKKzB4MjIzOCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18yCisweDIyM0MgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMworMHgyMjQwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzQKKzB4MjI0NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU181CisweDIyNDggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNgorMHgyMjRDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzcKKzB4MjI1MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU184CisweDIyNTQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfOQorMHgyMjU4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzEwCisweDIyNUMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTEKKzB4MjI2MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMgorMHgyMjY0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzEzCisweDIyNjggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTQKKzB4MjI2QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xNQorMHgyMjg0IFZBUF9QVlNfU1RBVEVfRkxVU0hfUkVHCisweDIyODggVkFQX1BWU19WVFhfVElNRU9VVF9SRUcKKzB4MjI5MCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzAKKzB4MjI5NCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEKKzB4MjI5OCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzIKKzB4MjI5QyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzMKKzB4MjJBMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzQKKzB4MjJBNCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzUKKzB4MjJBOCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzYKKzB4MjJBQyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzcKKzB4MjJCMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzgKKzB4MjJCNCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzkKKzB4MjJCOCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEwCisweDIyQkMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMQorMHgyMkMwIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTIKKzB4MjJDNCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEzCisweDIyQzggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xNAorMHgyMkNDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTUKKzB4MjJEMCBWQVBfUFZTX0NPREVfQ05UTF8wCisweDIyRDQgVkFQX1BWU19DT05TVF9DTlRMCisweDIyRDggVkFQX1BWU19DT0RFX0NOVExfMQorMHgyMkRDIFZBUF9QVlNfRkxPV19DTlRMX09QQworMHgyNTAwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzAKKzB4MjUwNCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV18wCisweDI1MDggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfMQorMHgyNTBDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzEKKzB4MjUxMCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV18yCisweDI1MTQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfMgorMHgyNTE4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzMKKzB4MjUxQyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV18zCisweDI1MjAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfNAorMHgyNTI0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzQKKzB4MjUyOCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV181CisweDI1MkMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfNQorMHgyNTMwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzYKKzB4MjUzNCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV182CisweDI1MzggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfNworMHgyNTNDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzcKKzB4MjU0MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV184CisweDI1NDQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfOAorMHgyNTQ4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzkKKzB4MjU0QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV185CisweDI1NTAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfMTAKKzB4MjU1NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV18xMAorMHgyNTU4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzExCisweDI1NUMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfMTEKKzB4MjU2MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV18xMgorMHgyNTY0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzEyCisweDI1NjggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfTFdfMTMKKzB4MjU2QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19VV18xMworMHgyNTcwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX0xXXzE0CisweDI1NzQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfVVdfMTQKKzB4MjU3OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU19MV18xNQorMHgyNTdDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTX1VXXzE1CisweDM0MkMgUkIyRF9EU1RDQUNIRV9DVExTVEFUCisweDQwMDAgR0JfVkFQX1JBU1RFUl9WVFhfRk1UXzAKKzB4NDAwNCBHQl9WQVBfUkFTVEVSX1ZUWF9GTVRfMQorMHg0MDA4IEdCX0VOQUJMRQorMHg0MDFDIEdCX1NFTEVDVAorMHg0MDIwIEdCX0FBX0NPTkZJRworMHg0MDI0IEdCX0ZJRk9fU0laRQorMHg0MTAwIFRYX0lOVkFMVEFHUworMHg0MjAwIEdBX1BPSU5UX1MwCisweDQyMDQgR0FfUE9JTlRfVDAKKzB4NDIwOCBHQV9QT0lOVF9TMQorMHg0MjBDIEdBX1BPSU5UX1QxCisweDQyMTQgR0FfVFJJQU5HTEVfU1RJUFBMRQorMHg0MjFDIEdBX1BPSU5UX1NJWkUKKzB4NDIzMCBHQV9QT0lOVF9NSU5NQVgKKzB4NDIzNCBHQV9MSU5FX0NOVEwKKzB4NDIzOCBHQV9MSU5FX1NUSVBQTEVfQ09ORklHCisweDQyNjAgR0FfTElORV9TVElQUExFX1ZBTFVFCisweDQyNjQgR0FfTElORV9TMAorMHg0MjY4IEdBX0xJTkVfUzEKKzB4NDI3OCBHQV9DT0xPUl9DT05UUk9MCisweDQyN0MgR0FfU09MSURfUkcKKzB4NDI4MCBHQV9TT0xJRF9CQQorMHg0Mjg4IEdBX1BPTFlfTU9ERQorMHg0MjhDIEdBX1JPVU5EX01PREUKKzB4NDI5MCBHQV9PRkZTRVQKKzB4NDI5NCBHQV9GT0dfU0NBTEUKKzB4NDI5OCBHQV9GT0dfT0ZGU0VUCisweDQyQTAgU1VfVEVYX1dSQVAKKzB4NDJBNCBTVV9QT0xZX09GRlNFVF9GUk9OVF9TQ0FMRQorMHg0MkE4IFNVX1BPTFlfT0ZGU0VUX0ZST05UX09GRlNFVAorMHg0MkFDIFNVX1BPTFlfT0ZGU0VUX0JBQ0tfU0NBTEUKKzB4NDJCMCBTVV9QT0xZX09GRlNFVF9CQUNLX09GRlNFVAorMHg0MkI0IFNVX1BPTFlfT0ZGU0VUX0VOQUJMRQorMHg0MkI4IFNVX0NVTExfTU9ERQorMHg0MkMwIFNVX0RFUFRIX1NDQUxFCisweDQyQzQgU1VfREVQVEhfT0ZGU0VUCisweDQyQzggU1VfUkVHX0RFU1QKKzB4NDMwMCBSU19DT1VOVAorMHg0MzA0IFJTX0lOU1RfQ09VTlQKKzB4NDA3NCBSU19JUF8wCisweDQwNzggUlNfSVBfMQorMHg0MDdDIFJTX0lQXzIKKzB4NDA4MCBSU19JUF8zCisweDQwODQgUlNfSVBfNAorMHg0MDg4IFJTX0lQXzUKKzB4NDA4QyBSU19JUF82CisweDQwOTAgUlNfSVBfNworMHg0MDk0IFJTX0lQXzgKKzB4NDA5OCBSU19JUF85CisweDQwOUMgUlNfSVBfMTAKKzB4NDBBMCBSU19JUF8xMQorMHg0MEE0IFJTX0lQXzEyCisweDQwQTggUlNfSVBfMTMKKzB4NDBBQyBSU19JUF8xNAorMHg0MEIwIFJTX0lQXzE1CisweDQzMjAgUlNfSU5TVF8wCisweDQzMjQgUlNfSU5TVF8xCisweDQzMjggUlNfSU5TVF8yCisweDQzMkMgUlNfSU5TVF8zCisweDQzMzAgUlNfSU5TVF80CisweDQzMzQgUlNfSU5TVF81CisweDQzMzggUlNfSU5TVF82CisweDQzM0MgUlNfSU5TVF83CisweDQzNDAgUlNfSU5TVF84CisweDQzNDQgUlNfSU5TVF85CisweDQzNDggUlNfSU5TVF8xMAorMHg0MzRDIFJTX0lOU1RfMTEKKzB4NDM1MCBSU19JTlNUXzEyCisweDQzNTQgUlNfSU5TVF8xMworMHg0MzU4IFJTX0lOU1RfMTQKKzB4NDM1QyBSU19JTlNUXzE1CisweDQzQTQgU0NfSFlQRVJaX0VOCisweDQzQTggU0NfRURHRVJVTEUKKzB4NDNCMCBTQ19DTElQXzBfQQorMHg0M0I0IFNDX0NMSVBfMF9CCisweDQzQjggU0NfQ0xJUF8xX0EKKzB4NDNCQyBTQ19DTElQXzFfQgorMHg0M0MwIFNDX0NMSVBfMl9BCisweDQzQzQgU0NfQ0xJUF8yX0IKKzB4NDNDOCBTQ19DTElQXzNfQQorMHg0M0NDIFNDX0NMSVBfM19CCisweDQzRDAgU0NfQ0xJUF9SVUxFCisweDQzRTAgU0NfU0NJU1NPUjAKKzB4NDNFOCBTQ19TQ1JFRU5ET09SCisweDQ0NDAgVFhfRklMVEVSMV8wCisweDQ0NDQgVFhfRklMVEVSMV8xCisweDQ0NDggVFhfRklMVEVSMV8yCisweDQ0NEMgVFhfRklMVEVSMV8zCisweDQ0NTAgVFhfRklMVEVSMV80CisweDQ0NTQgVFhfRklMVEVSMV81CisweDQ0NTggVFhfRklMVEVSMV82CisweDQ0NUMgVFhfRklMVEVSMV83CisweDQ0NjAgVFhfRklMVEVSMV84CisweDQ0NjQgVFhfRklMVEVSMV85CisweDQ0NjggVFhfRklMVEVSMV8xMAorMHg0NDZDIFRYX0ZJTFRFUjFfMTEKKzB4NDQ3MCBUWF9GSUxURVIxXzEyCisweDQ0NzQgVFhfRklMVEVSMV8xMworMHg0NDc4IFRYX0ZJTFRFUjFfMTQKKzB4NDQ3QyBUWF9GSUxURVIxXzE1CisweDQ1ODAgVFhfQ0hST01BX0tFWV8wCisweDQ1ODQgVFhfQ0hST01BX0tFWV8xCisweDQ1ODggVFhfQ0hST01BX0tFWV8yCisweDQ1OEMgVFhfQ0hST01BX0tFWV8zCisweDQ1OTAgVFhfQ0hST01BX0tFWV80CisweDQ1OTQgVFhfQ0hST01BX0tFWV81CisweDQ1OTggVFhfQ0hST01BX0tFWV82CisweDQ1OUMgVFhfQ0hST01BX0tFWV83CisweDQ1QTAgVFhfQ0hST01BX0tFWV84CisweDQ1QTQgVFhfQ0hST01BX0tFWV85CisweDQ1QTggVFhfQ0hST01BX0tFWV8xMAorMHg0NUFDIFRYX0NIUk9NQV9LRVlfMTEKKzB4NDVCMCBUWF9DSFJPTUFfS0VZXzEyCisweDQ1QjQgVFhfQ0hST01BX0tFWV8xMworMHg0NUI4IFRYX0NIUk9NQV9LRVlfMTQKKzB4NDVCQyBUWF9DSFJPTUFfS0VZXzE1CisweDQ1QzAgVFhfQk9SREVSX0NPTE9SXzAKKzB4NDVDNCBUWF9CT1JERVJfQ09MT1JfMQorMHg0NUM4IFRYX0JPUkRFUl9DT0xPUl8yCisweDQ1Q0MgVFhfQk9SREVSX0NPTE9SXzMKKzB4NDVEMCBUWF9CT1JERVJfQ09MT1JfNAorMHg0NUQ0IFRYX0JPUkRFUl9DT0xPUl81CisweDQ1RDggVFhfQk9SREVSX0NPTE9SXzYKKzB4NDVEQyBUWF9CT1JERVJfQ09MT1JfNworMHg0NUUwIFRYX0JPUkRFUl9DT0xPUl84CisweDQ1RTQgVFhfQk9SREVSX0NPTE9SXzkKKzB4NDVFOCBUWF9CT1JERVJfQ09MT1JfMTAKKzB4NDVFQyBUWF9CT1JERVJfQ09MT1JfMTEKKzB4NDVGMCBUWF9CT1JERVJfQ09MT1JfMTIKKzB4NDVGNCBUWF9CT1JERVJfQ09MT1JfMTMKKzB4NDVGOCBUWF9CT1JERVJfQ09MT1JfMTQKKzB4NDVGQyBUWF9CT1JERVJfQ09MT1JfMTUKKzB4NDI1MCBHQV9VU19WRUNUT1JfSU5ERVgKKzB4NDI1NCBHQV9VU19WRUNUT1JfREFUQQorMHg0NjAwIFVTX0NPTkZJRworMHg0NjA0IFVTX1BJWFNJWkUKKzB4NDYyMCBVU19GQ19CT09MX0NPTlNUCisweDQ2MjQgVVNfRkNfQ1RSTAorMHg0NjMwIFVTX0NPREVfQUREUgorMHg0NjM0IFVTX0NPREVfUkFOR0UKKzB4NDYzOCBVU19DT0RFX09GRlNFVAorMHg0NkE0IFVTX09VVF9GTVRfMAorMHg0NkE4IFVTX09VVF9GTVRfMQorMHg0NkFDIFVTX09VVF9GTVRfMgorMHg0NkIwIFVTX09VVF9GTVRfMworMHg0NkI0IFVTX1dfRk1UCisweDRCQzAgRkdfRk9HX0JMRU5ECisweDRCQzQgRkdfRk9HX0ZBQ1RPUgorMHg0QkM4IEZHX0ZPR19DT0xPUl9SCisweDRCQ0MgRkdfRk9HX0NPTE9SX0cKKzB4NEJEMCBGR19GT0dfQ09MT1JfQgorMHg0QkQ0IEZHX0FMUEhBX0ZVTkMKKzB4NEJEOCBGR19ERVBUSF9TUkMKKzB4NEMwMCBVU19BTFVfQ09OU1RfUl8wCisweDRDMDQgVVNfQUxVX0NPTlNUX0dfMAorMHg0QzA4IFVTX0FMVV9DT05TVF9CXzAKKzB4NEMwQyBVU19BTFVfQ09OU1RfQV8wCisweDRDMTAgVVNfQUxVX0NPTlNUX1JfMQorMHg0QzE0IFVTX0FMVV9DT05TVF9HXzEKKzB4NEMxOCBVU19BTFVfQ09OU1RfQl8xCisweDRDMUMgVVNfQUxVX0NPTlNUX0FfMQorMHg0QzIwIFVTX0FMVV9DT05TVF9SXzIKKzB4NEMyNCBVU19BTFVfQ09OU1RfR18yCisweDRDMjggVVNfQUxVX0NPTlNUX0JfMgorMHg0QzJDIFVTX0FMVV9DT05TVF9BXzIKKzB4NEMzMCBVU19BTFVfQ09OU1RfUl8zCisweDRDMzQgVVNfQUxVX0NPTlNUX0dfMworMHg0QzM4IFVTX0FMVV9DT05TVF9CXzMKKzB4NEMzQyBVU19BTFVfQ09OU1RfQV8zCisweDRDNDAgVVNfQUxVX0NPTlNUX1JfNAorMHg0QzQ0IFVTX0FMVV9DT05TVF9HXzQKKzB4NEM0OCBVU19BTFVfQ09OU1RfQl80CisweDRDNEMgVVNfQUxVX0NPTlNUX0FfNAorMHg0QzUwIFVTX0FMVV9DT05TVF9SXzUKKzB4NEM1NCBVU19BTFVfQ09OU1RfR181CisweDRDNTggVVNfQUxVX0NPTlNUX0JfNQorMHg0QzVDIFVTX0FMVV9DT05TVF9BXzUKKzB4NEM2MCBVU19BTFVfQ09OU1RfUl82CisweDRDNjQgVVNfQUxVX0NPTlNUX0dfNgorMHg0QzY4IFVTX0FMVV9DT05TVF9CXzYKKzB4NEM2QyBVU19BTFVfQ09OU1RfQV82CisweDRDNzAgVVNfQUxVX0NPTlNUX1JfNworMHg0Qzc0IFVTX0FMVV9DT05TVF9HXzcKKzB4NEM3OCBVU19BTFVfQ09OU1RfQl83CisweDRDN0MgVVNfQUxVX0NPTlNUX0FfNworMHg0QzgwIFVTX0FMVV9DT05TVF9SXzgKKzB4NEM4NCBVU19BTFVfQ09OU1RfR184CisweDRDODggVVNfQUxVX0NPTlNUX0JfOAorMHg0QzhDIFVTX0FMVV9DT05TVF9BXzgKKzB4NEM5MCBVU19BTFVfQ09OU1RfUl85CisweDRDOTQgVVNfQUxVX0NPTlNUX0dfOQorMHg0Qzk4IFVTX0FMVV9DT05TVF9CXzkKKzB4NEM5QyBVU19BTFVfQ09OU1RfQV85CisweDRDQTAgVVNfQUxVX0NPTlNUX1JfMTAKKzB4NENBNCBVU19BTFVfQ09OU1RfR18xMAorMHg0Q0E4IFVTX0FMVV9DT05TVF9CXzEwCisweDRDQUMgVVNfQUxVX0NPTlNUX0FfMTAKKzB4NENCMCBVU19BTFVfQ09OU1RfUl8xMQorMHg0Q0I0IFVTX0FMVV9DT05TVF9HXzExCisweDRDQjggVVNfQUxVX0NPTlNUX0JfMTEKKzB4NENCQyBVU19BTFVfQ09OU1RfQV8xMQorMHg0Q0MwIFVTX0FMVV9DT05TVF9SXzEyCisweDRDQzQgVVNfQUxVX0NPTlNUX0dfMTIKKzB4NENDOCBVU19BTFVfQ09OU1RfQl8xMgorMHg0Q0NDIFVTX0FMVV9DT05TVF9BXzEyCisweDRDRDAgVVNfQUxVX0NPTlNUX1JfMTMKKzB4NENENCBVU19BTFVfQ09OU1RfR18xMworMHg0Q0Q4IFVTX0FMVV9DT05TVF9CXzEzCisweDRDREMgVVNfQUxVX0NPTlNUX0FfMTMKKzB4NENFMCBVU19BTFVfQ09OU1RfUl8xNAorMHg0Q0U0IFVTX0FMVV9DT05TVF9HXzE0CisweDRDRTggVVNfQUxVX0NPTlNUX0JfMTQKKzB4NENFQyBVU19BTFVfQ09OU1RfQV8xNAorMHg0Q0YwIFVTX0FMVV9DT05TVF9SXzE1CisweDRDRjQgVVNfQUxVX0NPTlNUX0dfMTUKKzB4NENGOCBVU19BTFVfQ09OU1RfQl8xNQorMHg0Q0ZDIFVTX0FMVV9DT05TVF9BXzE1CisweDREMDAgVVNfQUxVX0NPTlNUX1JfMTYKKzB4NEQwNCBVU19BTFVfQ09OU1RfR18xNgorMHg0RDA4IFVTX0FMVV9DT05TVF9CXzE2CisweDREMEMgVVNfQUxVX0NPTlNUX0FfMTYKKzB4NEQxMCBVU19BTFVfQ09OU1RfUl8xNworMHg0RDE0IFVTX0FMVV9DT05TVF9HXzE3CisweDREMTggVVNfQUxVX0NPTlNUX0JfMTcKKzB4NEQxQyBVU19BTFVfQ09OU1RfQV8xNworMHg0RDIwIFVTX0FMVV9DT05TVF9SXzE4CisweDREMjQgVVNfQUxVX0NPTlNUX0dfMTgKKzB4NEQyOCBVU19BTFVfQ09OU1RfQl8xOAorMHg0RDJDIFVTX0FMVV9DT05TVF9BXzE4CisweDREMzAgVVNfQUxVX0NPTlNUX1JfMTkKKzB4NEQzNCBVU19BTFVfQ09OU1RfR18xOQorMHg0RDM4IFVTX0FMVV9DT05TVF9CXzE5CisweDREM0MgVVNfQUxVX0NPTlNUX0FfMTkKKzB4NEQ0MCBVU19BTFVfQ09OU1RfUl8yMAorMHg0RDQ0IFVTX0FMVV9DT05TVF9HXzIwCisweDRENDggVVNfQUxVX0NPTlNUX0JfMjAKKzB4NEQ0QyBVU19BTFVfQ09OU1RfQV8yMAorMHg0RDUwIFVTX0FMVV9DT05TVF9SXzIxCisweDRENTQgVVNfQUxVX0NPTlNUX0dfMjEKKzB4NEQ1OCBVU19BTFVfQ09OU1RfQl8yMQorMHg0RDVDIFVTX0FMVV9DT05TVF9BXzIxCisweDRENjAgVVNfQUxVX0NPTlNUX1JfMjIKKzB4NEQ2NCBVU19BTFVfQ09OU1RfR18yMgorMHg0RDY4IFVTX0FMVV9DT05TVF9CXzIyCisweDRENkMgVVNfQUxVX0NPTlNUX0FfMjIKKzB4NEQ3MCBVU19BTFVfQ09OU1RfUl8yMworMHg0RDc0IFVTX0FMVV9DT05TVF9HXzIzCisweDRENzggVVNfQUxVX0NPTlNUX0JfMjMKKzB4NEQ3QyBVU19BTFVfQ09OU1RfQV8yMworMHg0RDgwIFVTX0FMVV9DT05TVF9SXzI0CisweDREODQgVVNfQUxVX0NPTlNUX0dfMjQKKzB4NEQ4OCBVU19BTFVfQ09OU1RfQl8yNAorMHg0RDhDIFVTX0FMVV9DT05TVF9BXzI0CisweDREOTAgVVNfQUxVX0NPTlNUX1JfMjUKKzB4NEQ5NCBVU19BTFVfQ09OU1RfR18yNQorMHg0RDk4IFVTX0FMVV9DT05TVF9CXzI1CisweDREOUMgVVNfQUxVX0NPTlNUX0FfMjUKKzB4NERBMCBVU19BTFVfQ09OU1RfUl8yNgorMHg0REE0IFVTX0FMVV9DT05TVF9HXzI2CisweDREQTggVVNfQUxVX0NPTlNUX0JfMjYKKzB4NERBQyBVU19BTFVfQ09OU1RfQV8yNgorMHg0REIwIFVTX0FMVV9DT05TVF9SXzI3CisweDREQjQgVVNfQUxVX0NPTlNUX0dfMjcKKzB4NERCOCBVU19BTFVfQ09OU1RfQl8yNworMHg0REJDIFVTX0FMVV9DT05TVF9BXzI3CisweDREQzAgVVNfQUxVX0NPTlNUX1JfMjgKKzB4NERDNCBVU19BTFVfQ09OU1RfR18yOAorMHg0REM4IFVTX0FMVV9DT05TVF9CXzI4CisweDREQ0MgVVNfQUxVX0NPTlNUX0FfMjgKKzB4NEREMCBVU19BTFVfQ09OU1RfUl8yOQorMHg0REQ0IFVTX0FMVV9DT05TVF9HXzI5CisweDRERDggVVNfQUxVX0NPTlNUX0JfMjkKKzB4NEREQyBVU19BTFVfQ09OU1RfQV8yOQorMHg0REUwIFVTX0FMVV9DT05TVF9SXzMwCisweDRERTQgVVNfQUxVX0NPTlNUX0dfMzAKKzB4NERFOCBVU19BTFVfQ09OU1RfQl8zMAorMHg0REVDIFVTX0FMVV9DT05TVF9BXzMwCisweDRERjAgVVNfQUxVX0NPTlNUX1JfMzEKKzB4NERGNCBVU19BTFVfQ09OU1RfR18zMQorMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCisweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKKzB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMworMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMworMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCisweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgorMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKKzB4NEUxOCBSQjNEX1JPUENOVExfUjMKKzB4NEUxQyBSQjNEX0NMUkNNUF9GTElQRV9SMworMHg0RTIwIFJCM0RfQ0xSQ01QX0NMUl9SMworMHg0RTI0IFJCM0RfQ0xSQ01QX01TS19SMworMHg0RTQ4IFJCM0RfREVCVUdfQ1RMCisweDRFNEMgUkIzRF9EU1RDQUNIRV9DVExTVEFUX1IzCisweDRFNTAgUkIzRF9ESVRIRVJfQ1RMCisweDRFNTQgUkIzRF9DTUFTS19PRkZTRVQwCisweDRFNTggUkIzRF9DTUFTS19PRkZTRVQxCisweDRFNUMgUkIzRF9DTUFTS19PRkZTRVQyCisweDRFNjAgUkIzRF9DTUFTS19PRkZTRVQzCisweDRFNjQgUkIzRF9DTUFTS19QSVRDSDAKKzB4NEU2OCBSQjNEX0NNQVNLX1BJVENIMQorMHg0RTZDIFJCM0RfQ01BU0tfUElUQ0gyCisweDRFNzAgUkIzRF9DTUFTS19QSVRDSDMKKzB4NEU3NCBSQjNEX0NNQVNLX1dSSU5ERVgKKzB4NEU3OCBSQjNEX0NNQVNLX0RXT1JECisweDRFN0MgUkIzRF9DTUFTS19SRElOREVYCisweDRFODAgUkIzRF9BQVJFU09MVkVfT0ZGU0VUCisweDRFODQgUkIzRF9BQVJFU09MVkVfUElUQ0gKKzB4NEU4OCBSQjNEX0FBUkVTT0xWRV9DVEwKKzB4NEVBMCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0xURV9USFJFU0hPTEQKKzB4NEVBNCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0dURV9USFJFU0hPTEQKKzB4NEVGOCBSQjNEX0NPTlNUQU5UX0NPTE9SX0FSCisweDRFRkMgUkIzRF9DT05TVEFOVF9DT0xPUl9HQgorMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAorMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCisweDRGMTQgWkJfWlRPUAorMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMUMgWkJfQldfQ05UTAorMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQorMHg0RjMwIFpCX1pNQVNLX09GRlNFVAorMHg0RjM0IFpCX1pNQVNLX1BJVENICisweDRGMzggWkJfWk1BU0tfV1JJTkRFWAorMHg0RjNDIFpCX1pNQVNLX0RXT1JECisweDRGNDAgWkJfWk1BU0tfUkRJTkRFWAorMHg0RjQ0IFpCX0hJWl9PRkZTRVQKKzB4NEY0OCBaQl9ISVpfV1JJTkRFWAorMHg0RjRDIFpCX0hJWl9EV09SRAorMHg0RjUwIFpCX0hJWl9SRElOREVYCisweDRGNTQgWkJfSElaX1BJVENICisweDRGNTggWkJfWlBBU1NfREFUQQorMHg0RkQ0IFpCX1NURU5DSUxSRUZNQVNLX0JGCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKaW5kZXggYjI5YWZmZC4uYTNmYmRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotI2luY2x1ZGUgInJhZGVvbl9zaGFyZS5oIgogCiAvKiByczQwMCxyczQ4MCBkZXBlbmRzIG9uIDogKi8KIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtNjMsNyArNjIsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVuYWJsZSB0byB1c2UgSUdQIEdBUlQgc2l6ZSAldU1cbiIsCi0JCQkgIHJkZXYtPm1jLmd0dF9zaXplID4+IDIwKTsKKwkJCSAgKHVuc2lnbmVkKShyZGV2LT5tYy5ndHRfc2l6ZSA+PiAyMCkpOwogCQlEUk1fRVJST1IoIlZhbGlkIEdBUlQgc2l6ZSBmb3IgSUdQIGFyZSAzMk0sNjRNLDEyOE0sMjU2TSw1MTJNLDFHLDJHXG4iKTsKIAkJRFJNX0VSUk9SKCJGb3JjaW5nIHRvIDMyTSBHQVJUIHNpemVcbiIpOwogCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CkBAIC05MywyMCArOTIsNDEgQEAKIAlXUkVHMzJfTUMoUlM0ODBfR0FSVF9DQUNIRV9DTlRSTCwgMCk7CiB9CiAKK2ludCByczQwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS5yYW0ucHRyKSB7CisJCVdBUk4oMSwgIlJTNDAwIEdBUlQgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyogQ2hlY2sgZ2FydCBzaXplICovCisJc3dpdGNoKHJkZXYtPm1jLmd0dF9zaXplIC8gKDEwMjQgKiAxMDI0KSkgeworCWNhc2UgMzI6CisJY2FzZSA2NDoKKwljYXNlIDEyODoKKwljYXNlIDI1NjoKKwljYXNlIDUxMjoKKwljYXNlIDEwMjQ6CisJY2FzZSAyMDQ4OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogSW5pdGlhbGl6ZSBjb21tb24gZ2FydCBzdHJ1Y3R1cmUgKi8KKwlyID0gcmFkZW9uX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChyZGV2KSkKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSUzQwMCBHQVJUICFcbiIpOworCXJkZXYtPmdhcnQudGFibGVfc2l6ZSA9IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyAqIDQ7CisJcmV0dXJuIHJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9hbGxvYyhyZGV2KTsKK30KKwogaW50IHJzNDAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHNpemVfcmVnOwogCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCS8qIEluaXRpYWxpemUgY29tbW9uIGdhcnQgc3RydWN0dXJlICovCi0JciA9IHJhZGVvbl9nYXJ0X2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCWlmIChyczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSUzQwMCBHQVJUICFcbiIpOwotCX0KIAogCXRtcCA9IFJSRUczMl9NQyhSUzY5MF9BSUNfQ1RSTF9TQ1JBVENIKTsKIAl0bXAgfD0gUlM2OTBfRElTX09VVF9PRl9QQ0lfR0FSVF9BQ0NFU1M7CkBAIC0xMzcsMTMgKzE1Nyw2IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnJhbS5wdHIgPT0gTlVMTCkgewotCQlyZGV2LT5nYXJ0LnRhYmxlX3NpemUgPSByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgKiA0OwotCQlyID0gcmFkZW9uX2dhcnRfdGFibGVfcmFtX2FsbG9jKHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQl9CiAJLyogSXQgc2hvdWxkIGJlIGZpbmUgdG8gcHJvZ3JhbSBpdCB0byBtYXggdmFsdWUgKi8KIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTAgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkgewogCQlXUkVHMzJfTUMoUlM2OTBfTUNDRkdfQUdQX0JBU0UsIDB4RkZGRkZGRkYpOwpAQCAtMjAyLDYgKzIxNSwxMyBAQAogCVdSRUczMl9NQyhSUzQ4MF9BR1BfQUREUkVTU19TUEFDRV9TSVpFLCAwKTsKIH0KIAordm9pZCByczQwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOworCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7Cit9CisKIGludCByczQwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcikKIHsKIAl1aW50MzJfdCBlbnRyeTsKQEAgLTI1NiwxNCArMjc2LDEyIEBACiAJKHZvaWQpUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7CiAJV1JFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgdG1wKTsKIAkodm9pZClSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKKwogCXJldHVybiAwOwogfQogCiB2b2lkIHJzNDAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X3RhYmxlX3JhbV9mcmVlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCmluZGV4IDAyZmQxMWEuLjBlNzkxZTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJhdml2b2QuaCIKKworI2luY2x1ZGUgInJzNjAwX3JlZ19zYWZlLmgiCiAKIC8qIHJzNjAwIGRlcGVuZHMgb24gOiAqLwogdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC02NiwyMiArNjksMzUgQEAKIAl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOwogfQogCi1pbnQgcnM2MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgcnM2MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKLQlpbnQgaTsKIAlpbnQgcjsKIAorCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaikgeworCQlXQVJOKDEsICJSUzYwMCBHQVJUIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQogCS8qIEluaXRpYWxpemUgY29tbW9uIGdhcnQgc3RydWN0dXJlICovCiAJciA9IHJhZGVvbl9nYXJ0X2luaXQocmRldik7CiAJaWYgKHIpIHsKIAkJcmV0dXJuIHI7CiAJfQogCXJkZXYtPmdhcnQudGFibGVfc2l6ZSA9IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyAqIDg7Ci0JciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fYWxsb2MocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7CisJcmV0dXJuIHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fYWxsb2MocmRldik7Cit9CisKK2ludCByczYwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1aW50MzJfdCB0bXA7CisJaW50IHIsIGk7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmogPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIk5vIFZSQU0gb2JqZWN0IGZvciBQQ0lFIEdBUlQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAJLyogRklYTUU6IHNldHVwIGRlZmF1bHQgcGFnZSAqLwogCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwKIAkJIChSUzYwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSg2KSB8CkBAIC0xMzYsOCArMTUyLDE3IEBACiAJdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX0NOVEwxKTsKIAl0bXAgJj0gflJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUzsKIAlXUkVHMzJfTUMoUlM2MDBfTUNfQ05UTDEsIHRtcCk7Ci0JcmFkZW9uX29iamVjdF9rdW5tYXAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOwotCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOworCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaikgeworCQlyYWRlb25fb2JqZWN0X2t1bm1hcChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOworCX0KK30KKwordm9pZCByczYwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM2MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKKwlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCiAjZGVmaW5lIFI2MDBfUFRFX1ZBTElEICAgICAoMSA8PCAwKQpAQCAtMTczLDYgKzE5OCw4IEBACiAJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CiAJfQogCisJcmFkZW9uX2F2aXZvX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwogCXRtcCA9IFJSRUczMihBVklWT19EMVZHQV9DT05UUk9MKTsKIAlXUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCwgdG1wICYgfkFWSVZPX0RWR0FfQ09OVFJPTF9NT0RFX0VOQUJMRSk7CiAJdG1wID0gUlJFRzMyKEFWSVZPX0QyVkdBX0NPTlRST0wpOwpAQCAtMjMzLDkgKzI2MCw2IEBACiAKIHZvaWQgcnM2MDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0JcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9mcmVlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKIApAQCAtMjUxLDExICsyNzUsOSBAQAogCQl0bXAgfD0gUkFERU9OX1NXX0lOVF9FTkFCTEU7CiAJfQogCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzBdKSB7Ci0JCXRtcCB8PSBBVklWT19ESVNQTEFZX0lOVF9TVEFUVVM7CiAJCW1vZGVfaW50IHw9IEFWSVZPX0QxTU9ERV9JTlRfTUFTSzsKIAl9CiAJaWYgKHJkZXYtPmlycS5jcnRjX3ZibGFua19pbnRbMV0pIHsKLQkJdG1wIHw9IEFWSVZPX0RJU1BMQVlfSU5UX1NUQVRVUzsKIAkJbW9kZV9pbnQgfD0gQVZJVk9fRDJNT0RFX0lOVF9NQVNLOwogCX0KIAlXUkVHMzIoUkFERU9OX0dFTl9JTlRfQ05UTCwgdG1wKTsKQEAgLTQxMCw2NCArNDMyLDYgQEAKIAlXUkVHMzIoUlM2MDBfTUNfREFUQSwgdik7CiB9CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCByczYwMF9yZWdfc2FmZV9ibVsyMTldID0gewotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHgxN0ZGMUZGRiwgMHhGRkZGRkZGQywgMHhGRkZGRkZGRiwgMHhGRjMwRkZCRiwKLQkweEZGRkZGRkY4LCAweEMzRTZGRkZGLCAweEZGRkZGNkRGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGMDNGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRUZDRSwgMHhGMDBFQkZGRiwgMHgwMDdDMDAwMCwKLQkweEYwMDAwMDc4LCAweEZGMDAwMDA5LCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGN0ZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGQzc4LCAweEZGRkZGRkZGLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGLAotCTB4MzhGRjhGNTAsIDB4RkZGODgwODIsIDB4RjAwMDAwMEMsIDB4RkFFMDA5RkYsCi0JMHgwMDAwRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDBDMTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHhGRkZGMDAwMCwgMHhGRkZGRkZGRiwgMHhGRjgwRkZGRiwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwM0ZDMDEsIDB4RkZGRkZDRjgsIDB4RkY4MDBCMTksIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi19OwotCiBpbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHJzNjAwX3JlZ19zYWZlX2JtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCmluZGV4IDg3OTg4MjUuLjBmNTg1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKQEAgLTk0LDkgKzk0LDYgQEAKIAogdm9pZCByczY5MF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyYWRlb25fZ2FydF90YWJsZV9yYW1fZnJlZShyZGV2KTsKLQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCiAKQEAgLTY1Miw0ICs2NDksMyBAQAogCVdSRUczMihSUzY5MF9NQ19EQVRBLCB2KTsKIAlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM3ODAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM3ODAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFmZmNmZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNzgwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgotICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBEYXZlIEFpcmxpZQotICogICAgICAgICAgQWxleCBEZXVjaGVyCi0gKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCi0gKi8KLSNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgotI2luY2x1ZGUgInJhZGVvbi5oIgotCi0vKiByczc4MCAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByczc4MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLWludCByczc4MF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM3ODBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcnM3ODBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyczc4MF9ncHVfaW5pdChyZGV2KTsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCi0KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHJzNzgwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIHJzNzgwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLwotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHJzNzgwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQotaW50IHJzNzgwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLwotCXJldHVybiAwOwotfQotCi12b2lkIHJzNzgwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KLX0KLQotCi0vKgotICogVlJBTSBpbmZvCi0gKi8KLXZvaWQgcnM3ODBfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCi19Ci0KLXZvaWQgcnM3ODBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJzNzgwX3ZyYW1fZ2V0X3R5cGUocmRldik7Ci0KLQkvKiBGSVhNRTogaW1wbGVtZW50ICovCi0JLyogQ291bGQgYXBlciBzaXplIHJlcG9ydCAwID8gKi8KLQlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwotCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCmluZGV4IDA1NjZmYjYuLmZkNzk5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKQEAgLTI3LDE4ICsyNywxNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicnY1MTVyLmgiCisjaW5jbHVkZSAicnY1MTVkLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCi0jaW5jbHVkZSAicmFkZW9uX3NoYXJlLmgiCiAKKyNpbmNsdWRlICJydjUxNV9yZWdfc2FmZS5oIgogLyogcnY1MTUgZGVwZW5kcyBvbiA6ICovCiB2b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2NwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX3JiMmRfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfY3BfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKLWludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xMjYsOSArMTI0LDYgQEAKIAogdm9pZCBydjUxNV9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCXJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fZnJlZShyZGV2KTsKLQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCiAKQEAgLTQ2NCwzMDEgKzQ1OSwyNDQgQEAKICNlbmRpZgogfQogCi0KIC8qCiAgKiBBc2ljIGluaXRpYWxpemF0aW9uCiAgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCByNTAwX3JlZ19zYWZlX2JtWzIxOV0gPSB7Ci0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweDE3RkYxRkZGLCAweEZGRkZGRkZDLCAweEZGRkZGRkZGLCAweEZGMzBGRkJGLAotCTB4RkZGRkZGRjgsIDB4QzNFNkZGRkYsIDB4RkZGRkY2REYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkYwM0YsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZFRkNFLCAweEYwMEVCRkZGLCAweDAwN0MwMDAwLAotCTB4RjAwMDAwMzgsIDB4RkYwMDAwMDksIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkY3RkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4MUZGRkZDNzgsIDB4RkZGRkUwMDAsIDB4RkZGRkZGRkUsIDB4RkZGRkZGRkYsCi0JMHgzOENGOEY1MCwgMHhGRkY4ODA4MiwgMHhGRjAwMDBGQywgMHhGQUUwMDlGRiwKLQkweDAwMDBGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweDAwMDAwMDAwLAotCTB4RkZGRjhDRkMsIDB4RkZGRkMxRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGODBGRkZGLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAzRkMwMSwgMHgzRkZGRkNGOCwgMHhGRjgwMEIxOSwgMHhGRkRGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLX07Ci0KIGludCBydjUxNV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtID0gcjUwMF9yZWdfc2FmZV9ibTsKLQlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyNTAwX3JlZ19zYWZlX2JtKTsKKwlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHJ2NTE1X3JlZ19zYWZlX2JtOworCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHJ2NTE1X3JlZ19zYWZlX2JtKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBhdG9tX3J2NTE1X2ZvcmNlX3R2X3NjYWxlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgYXRvbV9ydjUxNV9mb3JjZV90dl9zY2FsZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fY3J0YyAqY3J0YykKIHsKKwlpbnQgaW5kZXhfcmVnID0gMHg2NTc4ICsgY3J0Yy0+Y3J0Y19vZmZzZXQ7CisJaW50IGRhdGFfcmVnID0gMHg2NTdjICsgY3J0Yy0+Y3J0Y19vZmZzZXQ7CiAKLQlXUkVHMzIoMHg2NTlDLCAweDApOwotCVdSRUczMigweDY1OTQsIDB4NzA1KTsKLQlXUkVHMzIoMHg2NUE0LCAweDEwMDAxKTsKLQlXUkVHMzIoMHg2NUQ4LCAweDApOwotCVdSRUczMigweDY1QjAsIDB4MCk7Ci0JV1JFRzMyKDB4NjVDMCwgMHgwKTsKLQlXUkVHMzIoMHg2NUQ0LCAweDApOwotCVdSRUczMigweDY1NzgsIDB4MCk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NDE4ODBBOCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgxKTsKLQlXUkVHMzIoMHg2NTdDLCAweDg0MjA4NjgwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGODgwQjApOwotCVdSRUczMigweDY1NzgsIDB4MTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgzRDg4MDg4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDEwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NDYwODY4MCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgxMDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGMDgwRDApOwotCVdSRUczMigweDY1NzgsIDB4MjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgzOTg4MDY4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDIwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NEEwODY4MCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgyMDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGMDgwRjgpOwotCVdSRUczMigweDY1NzgsIDB4MzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgzNTg4MDU4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDMwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NEUwODY2MCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHgzMDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGODgxMjApOwotCVdSRUczMigweDY1NzgsIDB4NDAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgzMTg4MDQwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDQwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NTAwODY2MCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg0MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGODgxNTApOwotCVdSRUczMigweDY1NzgsIDB4NTAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgyRDg4MDMwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDUwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NTQwODY0MCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg1MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGODgxODApOwotCVdSRUczMigweDY1NzgsIDB4NjAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgyQTA4MDE4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDYwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NTgwODYyMCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg2MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGMDgxQjgpOwotCVdSRUczMigweDY1NzgsIDB4NzAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgyNjA4MDEwKTsKLQlXUkVHMzIoMHg2NTc4LCAweDcwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NUEwODYwMCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg3MDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgxRjApOwotCVdSRUczMigweDY1NzgsIDB4ODAwKTsKLQlXUkVHMzIoMHg2NTdDLCAweDgyMjhCRkY4KTsKLQlXUkVHMzIoMHg2NTc4LCAweDgwMSk7Ci0JV1JFRzMyKDB4NjU3QywgMHg4NUUwODVFMCk7Ci0JV1JFRzMyKDB4NjU3OCwgMHg4MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZGODgyMjgpOwotCVdSRUczMigweDY1NzgsIDB4MTAwMDApOwotCVdSRUczMigweDY1N0MsIDB4ODJBOEJGMDApOwotCVdSRUczMigweDY1NzgsIDB4MTAwMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODJBMDhDQzApOwotCVdSRUczMigweDY1NzgsIDB4MTAwMDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAwOEJFRjgpOwotCVdSRUczMigweDY1NzgsIDB4MTAxMDApOwotCVdSRUczMigweDY1N0MsIDB4ODFGMEJGMjgpOwotCVdSRUczMigweDY1NzgsIDB4MTAxMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODM2MDhDQTApOwotCVdSRUczMigweDY1NzgsIDB4MTAxMDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAxOEJFRDApOwotCVdSRUczMigweDY1NzgsIDB4MTAyMDApOwotCVdSRUczMigweDY1N0MsIDB4ODE0OEJGMzgpOwotCVdSRUczMigweDY1NzgsIDB4MTAyMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODQ0MDhDODApOwotCVdSRUczMigweDY1NzgsIDB4MTAyMDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAwOEJFQjgpOwotCVdSRUczMigweDY1NzgsIDB4MTAzMDApOwotCVdSRUczMigweDY1N0MsIDB4ODBCMEJGNzgpOwotCVdSRUczMigweDY1NzgsIDB4MTAzMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODUwMDhDMjApOwotCVdSRUczMigweDY1NzgsIDB4MTAzMDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAyMEJFQTApOwotCVdSRUczMigweDY1NzgsIDB4MTA0MDApOwotCVdSRUczMigweDY1N0MsIDB4ODAyOEJGOTApOwotCVdSRUczMigweDY1NzgsIDB4MTA0MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODVFMDhCQzApOwotCVdSRUczMigweDY1NzgsIDB4MTA0MDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAxOEJFOTApOwotCVdSRUczMigweDY1NzgsIDB4MTA1MDApOwotCVdSRUczMigweDY1N0MsIDB4QkZCOEJGQjApOwotCVdSRUczMigweDY1NzgsIDB4MTA1MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODZDMDhCNDApOwotCVdSRUczMigweDY1NzgsIDB4MTA1MDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAxMEJFOTApOwotCVdSRUczMigweDY1NzgsIDB4MTA2MDApOwotCVdSRUczMigweDY1N0MsIDB4QkY1OEJGQzgpOwotCVdSRUczMigweDY1NzgsIDB4MTA2MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODdBMDhBQTApOwotCVdSRUczMigweDY1NzgsIDB4MTA2MDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAxMEJFOTgpOwotCVdSRUczMigweDY1NzgsIDB4MTA3MDApOwotCVdSRUczMigweDY1N0MsIDB4QkYxMEJGRjApOwotCVdSRUczMigweDY1NzgsIDB4MTA3MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODg2MDg5RTApOwotCVdSRUczMigweDY1NzgsIDB4MTA3MDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAxOEJFQjApOwotCVdSRUczMigweDY1NzgsIDB4MTA4MDApOwotCVdSRUczMigweDY1N0MsIDB4QkVEOEJGRTgpOwotCVdSRUczMigweDY1NzgsIDB4MTA4MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODk0MDg5NDApOwotCVdSRUczMigweDY1NzgsIDB4MTA4MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZFOEJFRDgpOwotCVdSRUczMigweDY1NzgsIDB4MjAwMDApOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAwMDEpOwotCVdSRUczMigweDY1N0MsIDB4OTAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAwMDIpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAwMDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAxMDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAxMDEpOwotCVdSRUczMigweDY1N0MsIDB4OEZFMEJGNzApOwotCVdSRUczMigweDY1NzgsIDB4MjAxMDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZFODgwQzApOwotCVdSRUczMigweDY1NzgsIDB4MjAxMDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAyMDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxOEJGRjgpOwotCVdSRUczMigweDY1NzgsIDB4MjAyMDEpOwotCVdSRUczMigweDY1N0MsIDB4OEY4MEJGMDgpOwotCVdSRUczMigweDY1NzgsIDB4MjAyMDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZEMDgxQTApOwotCVdSRUczMigweDY1NzgsIDB4MjAyMDMpOwotCVdSRUczMigweDY1N0MsIDB4QkZGODgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAzMDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxODgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjAzMDEpOwotCVdSRUczMigweDY1N0MsIDB4OEVFMEJFQzApOwotCVdSRUczMigweDY1NzgsIDB4MjAzMDIpOwotCVdSRUczMigweDY1N0MsIDB4QkZCMDgyQTApOwotCVdSRUczMigweDY1NzgsIDB4MjAzMDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjA0MDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxODgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjA0MDEpOwotCVdSRUczMigweDY1N0MsIDB4OEUwMEJFQTApOwotCVdSRUczMigweDY1NzgsIDB4MjA0MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkY4ODgzQzApOwotCVdSRUczMigweDY1NzgsIDB4MjA0MDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjA1MDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxODgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjA1MDEpOwotCVdSRUczMigweDY1N0MsIDB4OEQwMEJFOTApOwotCVdSRUczMigweDY1NzgsIDB4MjA1MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkY1ODg1MDApOwotCVdSRUczMigweDY1NzgsIDB4MjA1MDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDgpOwotCVdSRUczMigweDY1NzgsIDB4MjA2MDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxODgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjA2MDEpOwotCVdSRUczMigweDY1N0MsIDB4OEJDMEJFOTgpOwotCVdSRUczMigweDY1NzgsIDB4MjA2MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkYzMDg2NjApOwotCVdSRUczMigweDY1NzgsIDB4MjA2MDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDgpOwotCVdSRUczMigweDY1NzgsIDB4MjA3MDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjA3MDEpOwotCVdSRUczMigweDY1N0MsIDB4OEE4MEJFQjApOwotCVdSRUczMigweDY1NzgsIDB4MjA3MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkYwMDg3QzApOwotCVdSRUczMigweDY1NzgsIDB4MjA3MDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDgpOwotCVdSRUczMigweDY1NzgsIDB4MjA4MDApOwotCVdSRUczMigweDY1N0MsIDB4ODAxMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MjA4MDEpOwotCVdSRUczMigweDY1N0MsIDB4ODkyMEJFRDApOwotCVdSRUczMigweDY1NzgsIDB4MjA4MDIpOwotCVdSRUczMigweDY1N0MsIDB4QkVEMDg5MjApOwotCVdSRUczMigweDY1NzgsIDB4MjA4MDMpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMTApOwotCVdSRUczMigweDY1NzgsIDB4MzAwMDApOwotCVdSRUczMigweDY1N0MsIDB4OTAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MzAwMDEpOwotCVdSRUczMigweDY1N0MsIDB4ODAwMDgwMDApOwotCVdSRUczMigweDY1NzgsIDB4MzAxMDApOwotCVdSRUczMigweDY1N0MsIDB4OEZFMEJGOTApOwotCVdSRUczMigweDY1NzgsIDB4MzAxMDEpOwotCVdSRUczMigweDY1N0MsIDB4QkZGODgwQTApOwotCVdSRUczMigweDY1NzgsIDB4MzAyMDApOwotCVdSRUczMigweDY1N0MsIDB4OEY2MEJGNDApOwotCVdSRUczMigweDY1NzgsIDB4MzAyMDEpOwotCVdSRUczMigweDY1N0MsIDB4QkZFODgxODApOwotCVdSRUczMigweDY1NzgsIDB4MzAzMDApOwotCVdSRUczMigweDY1N0MsIDB4OEVDMEJGMDApOwotCVdSRUczMigweDY1NzgsIDB4MzAzMDEpOwotCVdSRUczMigweDY1N0MsIDB4QkZDODgyODApOwotCVdSRUczMigweDY1NzgsIDB4MzA0MDApOwotCVdSRUczMigweDY1N0MsIDB4OERFMEJFRTApOwotCVdSRUczMigweDY1NzgsIDB4MzA0MDEpOwotCVdSRUczMigweDY1N0MsIDB4QkZBMDgzQTApOwotCVdSRUczMigweDY1NzgsIDB4MzA1MDApOwotCVdSRUczMigweDY1N0MsIDB4OENFMEJFRDApOwotCVdSRUczMigweDY1NzgsIDB4MzA1MDEpOwotCVdSRUczMigweDY1N0MsIDB4QkY3ODg0RTApOwotCVdSRUczMigweDY1NzgsIDB4MzA2MDApOwotCVdSRUczMigweDY1N0MsIDB4OEJBMEJFRDgpOwotCVdSRUczMigweDY1NzgsIDB4MzA2MDEpOwotCVdSRUczMigweDY1N0MsIDB4QkY1MDg2NDApOwotCVdSRUczMigweDY1NzgsIDB4MzA3MDApOwotCVdSRUczMigweDY1N0MsIDB4OEE2MEJFRTgpOwotCVdSRUczMigweDY1NzgsIDB4MzA3MDEpOwotCVdSRUczMigweDY1N0MsIDB4QkYyMDg3QTApOwotCVdSRUczMigweDY1NzgsIDB4MzA4MDApOwotCVdSRUczMigweDY1N0MsIDB4ODkwMEJGMDApOwotCVdSRUczMigweDY1NzgsIDB4MzA4MDEpOwotCVdSRUczMigweDY1N0MsIDB4QkYwMDg5MDApOworCVdSRUczMigweDY1OUMgKyBjcnRjLT5jcnRjX29mZnNldCwgMHgwKTsKKwlXUkVHMzIoMHg2NTk0ICsgY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4NzA1KTsKKwlXUkVHMzIoMHg2NUE0ICsgY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4MTAwMDEpOworCVdSRUczMigweDY1RDggKyBjcnRjLT5jcnRjX29mZnNldCwgMHgwKTsKKwlXUkVHMzIoMHg2NUIwICsgY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4MCk7CisJV1JFRzMyKDB4NjVDMCArIGNydGMtPmNydGNfb2Zmc2V0LCAweDApOworCVdSRUczMigweDY1RDQgKyBjcnRjLT5jcnRjX29mZnNldCwgMHgwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDApOworCVdSRUczMihkYXRhX3JlZywgMHg4NDE4ODBBOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODQyMDg2ODApOworCVdSRUczMihpbmRleF9yZWcsIDB4Mik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjg4MEIwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgzRDg4MDg4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg0NjA4NjgwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjA4MEQwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgzOTg4MDY4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg0QTA4NjgwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjA4MEY4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgzNTg4MDU4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg0RTA4NjYwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjg4MTIwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDQwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgzMTg4MDQwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDQwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg1MDA4NjYwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDQwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjg4MTUwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDUwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgyRDg4MDMwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDUwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg1NDA4NjQwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDUwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjg4MTgwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDYwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgyQTA4MDE4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDYwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg1ODA4NjIwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDYwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjA4MUI4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDcwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgyNjA4MDEwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDcwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg1QTA4NjAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDcwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MUYwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDgwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgyMjhCRkY4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDgwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDg1RTA4NUUwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDgwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjg4MjI4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMDAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODJBOEJGMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAwMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4MkEwOENDMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDAwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDhCRUY4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMTAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODFGMEJGMjgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAxMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4MzYwOENBMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDEwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMThCRUQwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMjAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODE0OEJGMzgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAyMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NDQwOEM4MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDIwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDhCRUI4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwMzAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODBCMEJGNzgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MTAzMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NTAwOEMyMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDMwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMjBCRUEwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNDAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAyOEJGOTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA0MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NUUwOEJDMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDQwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMThCRTkwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNTAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkZCOEJGQjApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA1MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4NkMwOEI0MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDUwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMTBCRTkwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNjAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkY1OEJGQzgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA2MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4N0EwOEFBMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDYwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMTBCRTk4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwNzAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkYxMEJGRjApOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA3MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4ODYwODlFMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDcwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMThCRUIwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDEwODAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkVEOEJGRTgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MTA4MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4OTQwODk0MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgxMDgwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRThCRUQ4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMDAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAwMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg5MDAwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDAwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMDAzKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAxMDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MDEwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDEwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhGRTBCRjcwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMTAyKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkZFODgwQzApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAxMDMpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDIwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMThCRkY4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMjAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OEY4MEJGMDgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAyMDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkQwODFBMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDIwMyk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRjg4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMzAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAxODgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjAzMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4RUUwQkVDMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDMwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGQjA4MkEwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwMzAzKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA0MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MDE4ODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDQwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhFMDBCRUEwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNDAyKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkY4ODgzQzApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA0MDMpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDUwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMTg4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNTAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OEQwMEJFOTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA1MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRjU4ODUwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDUwMyk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MDA4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNjAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAxODgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA2MDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4QkMwQkU5OCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDYwMik7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGMzA4NjYwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNjAzKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODAwMDgwMDgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA3MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4MDEwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDcwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhBODBCRUIwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwNzAyKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkYwMDg3QzApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA3MDMpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODAwOCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDgwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMTA4MDAwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDIwODAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4ODkyMEJFRDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MjA4MDIpOworCVdSRUczMihkYXRhX3JlZywgMHhCRUQwODkyMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgyMDgwMyk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDgwMDA4MDEwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMDAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OTAwMDgwMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzAwMDEpOworCVdSRUczMihkYXRhX3JlZywgMHg4MDAwODAwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDEwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhGRTBCRjkwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMTAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkZGODgwQTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzAyMDApOworCVdSRUczMihkYXRhX3JlZywgMHg4RjYwQkY0MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDIwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGRTg4MTgwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwMzAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OEVDMEJGMDApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzAzMDEpOworCVdSRUczMihkYXRhX3JlZywgMHhCRkM4ODI4MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDQwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhERTBCRUUwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwNDAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkZBMDgzQTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzA1MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4Q0UwQkVEMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDUwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGNzg4NEUwKTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwNjAwKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4OEJBMEJFRDgpOworCVdSRUczMihpbmRleF9yZWcsIDB4MzA2MDEpOworCVdSRUczMihkYXRhX3JlZywgMHhCRjUwODY0MCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDcwMCk7CisJV1JFRzMyKGRhdGFfcmVnLCAweDhBNjBCRUU4KTsKKwlXUkVHMzIoaW5kZXhfcmVnLCAweDMwNzAxKTsKKwlXUkVHMzIoZGF0YV9yZWcsIDB4QkYyMDg3QTApOworCVdSRUczMihpbmRleF9yZWcsIDB4MzA4MDApOworCVdSRUczMihkYXRhX3JlZywgMHg4OTAwQkYwMCk7CisJV1JFRzMyKGluZGV4X3JlZywgMHgzMDgwMSk7CisJV1JFRzMyKGRhdGFfcmVnLCAweEJGMDA4OTAwKTsKIH0KIAogc3RydWN0IHJ2NTE1X3dhdGVybWFyayB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ci5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaApzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ci5oCnJlbmFtZSB0byBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ZC5oCmluZGV4IGYzY2Y4NDAuLmE2NWUxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaApAQCAtMjUsMTAgKzI1LDEyIEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLwotI2lmbmRlZiBSVjUxNVJfSAotI2RlZmluZSBSVjUxNVJfSAorI2lmbmRlZiBfX1JWNTE1RF9IX18KKyNkZWZpbmUgX19SVjUxNURfSF9fCiAKLS8qIFJWNTE1IHJlZ2lzdGVycyAqLworLyoKKyAqIFJWNTE1IHJlZ2lzdGVycworICovCiAjZGVmaW5lIFBDSUVfSU5ERVgJCQkweDAwMzAKICNkZWZpbmUgUENJRV9EQVRBCQkJMHgwMDM0CiAjZGVmaW5lCU1DX0lORF9JTkRFWAkJCTB4MDA3MApAQCAtMTY2LDUgKzE2OCw1MyBAQAogI2RlZmluZQkJTUNfR0xPQldfSU5JVF9MQVRfTUFTSwkJCTB4RjAwMDAwMDAKIAogCisvKgorICogUE00IHBhY2tldAorICovCisjZGVmaW5lIENQX1BBQ0tFVDAJCQkweDAwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQwX0JBU0VfSU5ERVhfU0hJRlQJMAorI2RlZmluZQkJUEFDS0VUMF9CQVNFX0lOREVYX01BU0sJCSgweDFmZmZmIDw8IDApCisjZGVmaW5lCQlQQUNLRVQwX0NPVU5UX1NISUZUCQkxNgorI2RlZmluZQkJUEFDS0VUMF9DT1VOVF9NQVNLCQkoMHgzZmZmIDw8IDE2KQorI2RlZmluZSBDUF9QQUNLRVQxCQkJMHg0MDAwMDAwMAorI2RlZmluZSBDUF9QQUNLRVQyCQkJMHg4MDAwMDAwMAorI2RlZmluZQkJUEFDS0VUMl9QQURfU0hJRlQJCTAKKyNkZWZpbmUJCVBBQ0tFVDJfUEFEX01BU0sJCSgweDNmZmZmZmZmIDw8IDApCisjZGVmaW5lIENQX1BBQ0tFVDMJCQkweEMwMDAwMDAwCisjZGVmaW5lCQlQQUNLRVQzX0lUX09QQ09ERV9TSElGVAkJOAorI2RlZmluZQkJUEFDS0VUM19JVF9PUENPREVfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJCVBBQ0tFVDNfQ09VTlRfU0hJRlQJCTE2CisjZGVmaW5lCQlQQUNLRVQzX0NPVU5UX01BU0sJCSgweDNmZmYgPDwgMTYpCisvKiBQQUNLRVQzIG9wIGNvZGUgKi8KKyNkZWZpbmUJCVBBQ0tFVDNfTk9QCQkJMHgxMAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUYJCTB4MjgKKyNkZWZpbmUJCVBBQ0tFVDNfM0RfRFJBV19JTU1ECQkweDI5CisjZGVmaW5lCQlQQUNLRVQzXzNEX0RSQVdfSU5EWAkJMHgyQQorI2RlZmluZQkJUEFDS0VUM18zRF9MT0FEX1ZCUE5UUgkJMHgyRgorI2RlZmluZQkJUEFDS0VUM19JTkRYX0JVRkZFUgkJMHgzMworI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX1ZCVUZfMgkJMHgzNAorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lNTURfMgkJMHgzNQorI2RlZmluZQkJUEFDS0VUM18zRF9EUkFXX0lORFhfMgkJMHgzNgorI2RlZmluZQkJUEFDS0VUM19CSVRCTFRfTVVMVEkJCTB4OUIKKworI2RlZmluZSBQQUNLRVQwKHJlZywgbikJKENQX1BBQ0tFVDAgfAkJCQkJXAorCQkJIFJFR19TRVQoUEFDS0VUMF9CQVNFX0lOREVYLCAocmVnKSA+PiAyKSB8CVwKKwkJCSBSRUdfU0VUKFBBQ0tFVDBfQ09VTlQsIChuKSkpCisjZGVmaW5lIFBBQ0tFVDIodikJKENQX1BBQ0tFVDIgfCBSRUdfU0VUKFBBQ0tFVDJfUEFELCAodikpKQorI2RlZmluZSBQQUNLRVQzKG9wLCBuKQkoQ1BfUEFDS0VUMyB8CQkJCQlcCisJCQkgUkVHX1NFVChQQUNLRVQzX0lUX09QQ09ERSwgKG9wKSkgfAkJXAorCQkJIFJFR19TRVQoUEFDS0VUM19DT1VOVCwgKG4pKSkKKworI2RlZmluZQlQQUNLRVRfVFlQRTAJMAorI2RlZmluZQlQQUNLRVRfVFlQRTEJMQorI2RlZmluZQlQQUNLRVRfVFlQRTIJMgorI2RlZmluZQlQQUNLRVRfVFlQRTMJMworCisjZGVmaW5lIENQX1BBQ0tFVF9HRVRfVFlQRShoKSAoKChoKSA+PiAzMCkgJiAzKQorI2RlZmluZSBDUF9QQUNLRVRfR0VUX0NPVU5UKGgpICgoKGgpID4+IDE2KSAmIDB4M0ZGRikKKyNkZWZpbmUgQ1BfUEFDS0VUMF9HRVRfUkVHKGgpICgoKGgpICYgMHgxRkZGKSA8PCAyKQorI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCisjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggMjFkOGZmZC4uYjU3NGM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtMjUsMTAwICsyNSwxMDM4IEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJtLmgiCisjaW5jbHVkZSAicnY3NzBkLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCisjaW5jbHVkZSAiYXRvbS5oIgogCi0vKiBydjc3MCxydjczMCxydjcxMCAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisjZGVmaW5lIFI3MDBfUEZQX1VDT0RFX1NJWkUgODQ4CisjZGVmaW5lIFI3MDBfUE00X1VDT0RFX1NJWkUgMTM2MAogCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgotICogcnY3NzAscnY3MzAscnY3MTAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgorc3RhdGljIHZvaWQgcnY3NzBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCBydjc3MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworCisvKgorICogR0FSVAogICovCi1pbnQgcnY3NzBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NzcwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjc3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IHIsIGk7CisKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmogPT0gTlVMTCkgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIk5vIFZSQU0gb2JqZWN0IGZvciBQQ0lFIEdBUlQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogU2V0dXAgTDIgY2FjaGUgKi8KKwlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0NBQ0hFIHwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQkJCUVOQUJMRV9MMl9QVEVfQ0FDSEVfTFJVX1VQREFURV9CWV9XUklURSB8CisJCQkJRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoNykpOworCVdSRUczMihWTV9MMl9DTlRMMiwgMCk7CisJV1JFRzMyKFZNX0wyX0NOVEwzLCBCQU5LX1NFTEVDVCgwKSB8IENBQ0hFX1VQREFURV9NT0RFKDIpKTsKKwkvKiBTZXR1cCBUTEIgY29udHJvbCAqLworCXRtcCA9IEVOQUJMRV9MMV9UTEIgfCBFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTIHwKKwkJU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgfAorCQlFRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfCBFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgcmRldi0+Z2FydC50YWJsZV9hZGRyID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCwgRU5BQkxFX0NPTlRFWFQgfCBQQUdFX1RBQkxFX0RFUFRIKDApIHwKKwkJCQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxUKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUFJPVEVDVElPTl9GQVVMVF9ERUZBVUxUX0FERFIsCisJCQkodTMyKShyZGV2LT5kdW1teV9wYWdlLmFkZHIgPj4gMTIpKTsKKwlmb3IgKGkgPSAxOyBpIDwgNzsgaSsrKQorCQlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIDApOworCisJcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHJkZXYpOworCXJkZXYtPmdhcnQucmVhZHkgPSB0cnVlOworCXJldHVybiAwOworfQorCit2b2lkIHJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBEaXNhYmxlIGFsbCB0YWJsZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIDApOworCisJLyogU2V0dXAgTDIgY2FjaGUgKi8KKwlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQkJCUVGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDcpKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDIsIDApOworCVdSRUczMihWTV9MMl9DTlRMMywgQkFOS19TRUxFQ1QoMCkgfCBDQUNIRV9VUERBVEVfTU9ERSgyKSk7CisJLyogU2V0dXAgVExCIGNvbnRyb2wgKi8KKwl0bXAgPSBFRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfCBFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOworCWlmIChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaikgeworCQlyYWRlb25fb2JqZWN0X2t1bm1hcChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOworCX0KK30KKwordm9pZCBydjc3MF9wY2llX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlydjc3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7CisJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKK30KIAogCiAvKgogICogTUMKICAqLwotaW50IHJ2NzcwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCBydjc3MF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3QgdG1wOworCXUzMiBkMXZnYV9jb250cm9sLCBkMnZnYV9jb250cm9sOworCXUzMiB2Z2FfcmVuZGVyX2NvbnRyb2wsIHZnYV9oZHBfY29udHJvbDsKKwl1MzIgZDFjcnRjX2NvbnRyb2wsIGQyY3J0Y19jb250cm9sOworCXUzMiBuZXdfZDFncnBoX3ByaW1hcnksIG5ld19kMWdycGhfc2Vjb25kYXJ5OworCXUzMiBuZXdfZDJncnBoX3ByaW1hcnksIG5ld19kMmdycGhfc2Vjb25kYXJ5OworCXU2NCBvbGRfdnJhbV9zdGFydDsKKwl1MzIgdG1wOworCWludCBpLCBqOwogCi0JcnY3NzBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDMyOyBpKyssIGogKz0gMHgxOCkgeworCQlXUkVHMzIoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJfQorCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKIAotCS8qIHNldHVwIHRoZSBnYXJ0IGJlZm9yZSBjaGFuZ2luZyBsb2NhdGlvbiBzbyB3ZSBjYW4gYXNrIHRvCi0JICogZGlzY2FyZCB1bm1hcHBlZCBtYyByZXF1ZXN0Ci0JICovCi0JLyogRklYTUU6IGRpc2FibGUgb3V0IG9mIGdhcnQgYWNjZXNzICovCi0JdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uIC8gNDA5NjsKLQl0bXAgPSBSRUdfU0VUKFI3MDBfTE9HSUNBTF9QQUdFX05VTUJFUiwgdG1wKTsKLQlXUkVHMzIoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIHRtcCk7Ci0JdG1wID0gKHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplKSAvIDQwOTY7Ci0JdG1wID0gUkVHX1NFVChSNzAwX0xPR0lDQUxfUEFHRV9OVU1CRVIsIHRtcCk7Ci0JV1JFRzMyKFI3MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgdG1wKTsKKwlkMXZnYV9jb250cm9sID0gUlJFRzMyKEQxVkdBX0NPTlRST0wpOworCWQydmdhX2NvbnRyb2wgPSBSUkVHMzIoRDJWR0FfQ09OVFJPTCk7CisJdmdhX3JlbmRlcl9jb250cm9sID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7CisJdmdhX2hkcF9jb250cm9sID0gUlJFRzMyKFZHQV9IRFBfQ09OVFJPTCk7CisJZDFjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDFDUlRDX0NPTlRST0wpOworCWQyY3J0Y19jb250cm9sID0gUlJFRzMyKEQyQ1JUQ19DT05UUk9MKTsKKwlvbGRfdnJhbV9zdGFydCA9ICh1NjQpKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJiAweEZGRkYpIDw8IDI0OworCW5ld19kMWdycGhfcHJpbWFyeSA9IFJSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOworCW5ld19kMWdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKKwluZXdfZDFncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OworCW5ld19kMWdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKKwluZXdfZDJncnBoX3ByaW1hcnkgPSBSUkVHMzIoRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKTsKKwluZXdfZDJncnBoX3NlY29uZGFyeSA9IFJSRUczMihEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyk7CisJbmV3X2QyZ3JwaF9wcmltYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKKwluZXdfZDJncnBoX3NlY29uZGFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7CiAKLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHJ2NzcwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7CisJLyogU3RvcCBhbGwgdmlkZW8gKi8KKwlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQyVkdBX0NPTlRST0wsIDApOworCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIDApOworCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMUNSVENfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKKwlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKKworCW1kZWxheSgxKTsKKwlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOwogCX0KIAotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUjcwMF9NQ19GQl9UT1AsIHRtcCA+PiAyNCk7Ci0JdG1wIHw9IFJFR19TRVQoUjcwMF9NQ19GQl9CQVNFLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDI0KTsKLQlXUkVHMzIoUjcwMF9NQ19WTV9GQl9MT0NBVElPTiwgdG1wKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSNzAwX01DX0FHUF9UT1AsIHRtcCA+PiAyMik7Ci0JV1JFRzMyKFI3MDBfTUNfVk1fQUdQX1RPUCwgdG1wKTsKLQl0bXAgPSBSRUdfU0VUKFI3MDBfTUNfQUdQX0JPVCwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uID4+IDIyKTsKLQlXUkVHMzIoUjcwMF9NQ19WTV9BR1BfQk9ULCB0bXApOwotCXJldHVybiAwOwotfQorCS8qIExvY2tvdXQgYWNjZXNzIHRocm91Z2ggVkdBIGFwZXJ0dXJlKi8KKwlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCBWR0FfTUVNT1JZX0RJU0FCTEUpOwogCi12b2lkIHJ2NzcwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLworCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCisJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDEyKTsKKwlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7CisJdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCB8PSAoKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMjQpICYgMHhGRkZGKTsKKwlXUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04sIHRtcCk7CisJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0JBU0UsIChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDgpKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfSU5GTywgKDIgPDwgNykpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCAocmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSkgfCAweDNGRik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxNik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIDApOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgMHgwRkZGRkZGRik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCAweDBGRkZGRkZGKTsKKwl9CisJV1JFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9wcmltYXJ5KTsKKwlXUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfc2Vjb25kYXJ5KTsKKwlXUkVHMzIoRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3ByaW1hcnkpOworCVdSRUczMihEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9zZWNvbmRhcnkpOworCVdSRUczMihWR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisKKwkvKiBVbmxvY2sgaG9zdCBhY2Nlc3MgKi8KKwlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCB2Z2FfaGRwX2NvbnRyb2wpOworCisJbWRlbGF5KDEpOworCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gTUMgbm90IGlkbGUgIVxuIik7CisJfQorCisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihEMUNSVENfQ09OVFJPTCwgZDFjcnRjX2NvbnRyb2wpOworCVdSRUczMihEMkNSVENfQ09OVFJPTCwgZDJjcnRjX2NvbnRyb2wpOworCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihEMVZHQV9DT05UUk9MLCBkMXZnYV9jb250cm9sKTsKKwlXUkVHMzIoRDJWR0FfQ09OVFJPTCwgZDJ2Z2FfY29udHJvbCk7CisJV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgdmdhX3JlbmRlcl9jb250cm9sKTsKKworCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQorCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KKwlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogfQogCiAKIC8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucworICogQ1AuCiAgKi8KLXZvaWQgcnY3NzBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByNzAwX2NwX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcmRldi0+cGxsX2VycmF0YSA9IDA7CisJV1JFRzMyKENQX01FX0NOVEwsIChDUF9NRV9IQUxUIHwgQ1BfUEZQX0hBTFQpKTsKIH0KIAotaW50IHJ2NzcwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCisKK3N0YXRpYyBpbnQgcnY3NzBfY3BfbG9hZF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JLyogRklYTUU6IGltcGxlbWVudCAqLworCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKKwlpbnQgaTsKKworCWlmICghcmRldi0+bWVfZncgfHwgIXJkZXYtPnBmcF9mdykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyNzAwX2NwX3N0b3AocmRldik7CisJV1JFRzMyKENQX1JCX0NOVEwsIFJCX05PX1VQREFURSB8ICgxNSA8PCA4KSB8ICgzIDw8IDApKTsKKworCS8qIFJlc2V0IGNwICovCisJV1JFRzMyKEdSQk1fU09GVF9SRVNFVCwgU09GVF9SRVNFVF9DUCk7CisJUlJFRzMyKEdSQk1fU09GVF9SRVNFVCk7CisJbWRlbGF5KDE1KTsKKwlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopcmRldi0+cGZwX2Z3LT5kYXRhOworCVdSRUczMihDUF9QRlBfVUNPREVfQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IFI3MDBfUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJV1JFRzMyKENQX1BGUF9VQ09ERV9EQVRBLCBiZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CisJV1JFRzMyKENQX1BGUF9VQ09ERV9BRERSLCAwKTsKKworCWZ3X2RhdGEgPSAoY29uc3QgX19iZTMyICopcmRldi0+bWVfZnctPmRhdGE7CisJV1JFRzMyKENQX01FX1JBTV9XQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IFI3MDBfUE00X1VDT0RFX1NJWkU7IGkrKykKKwkJV1JFRzMyKENQX01FX1JBTV9EQVRBLCBiZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CisKKwlXUkVHMzIoQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCVdSRUczMihDUF9NRV9SQU1fV0FERFIsIDApOworCVdSRUczMihDUF9NRV9SQU1fUkFERFIsIDApOwogCXJldHVybiAwOwogfQogCi12b2lkIHJ2NzcwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KLX0KLQogCiAvKgotICogVlJBTSBpbmZvCisgKiBDb3JlIGZ1bmN0aW9ucwogICovCi12b2lkIHJ2NzcwX3ZyYW1fZ2V0X3R5cGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdTMyIHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcCh1MzIgbnVtX3RpbGVfcGlwZXMsCisJCQkJCQl1MzIgbnVtX2JhY2tlbmRzLAorCQkJCQkJdTMyIGJhY2tlbmRfZGlzYWJsZV9tYXNrKQogewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KKwl1MzIgYmFja2VuZF9tYXAgPSAwOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX21hc2s7CisJdTMyIGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJdTMyIGN1cl9waXBlOworCXUzMiBzd2l6emxlX3BpcGVbUjdYWF9NQVhfUElQRVNdOworCXUzMiBjdXJfYmFja2VuZDsKKwl1MzIgaTsKKworCWlmIChudW1fdGlsZV9waXBlcyA+IFI3WFhfTUFYX1BJUEVTKQorCQludW1fdGlsZV9waXBlcyA9IFI3WFhfTUFYX1BJUEVTOworCWlmIChudW1fdGlsZV9waXBlcyA8IDEpCisJCW51bV90aWxlX3BpcGVzID0gMTsKKwlpZiAobnVtX2JhY2tlbmRzID4gUjdYWF9NQVhfQkFDS0VORFMpCisJCW51bV9iYWNrZW5kcyA9IFI3WFhfTUFYX0JBQ0tFTkRTOworCWlmIChudW1fYmFja2VuZHMgPCAxKQorCQludW1fYmFja2VuZHMgPSAxOworCisJZW5hYmxlZF9iYWNrZW5kc19tYXNrID0gMDsKKwllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUjdYWF9NQVhfQkFDS0VORFM7ICsraSkgeworCQlpZiAoKChiYWNrZW5kX2Rpc2FibGVfbWFzayA+PiBpKSAmIDEpID09IDApIHsKKwkJCWVuYWJsZWRfYmFja2VuZHNfbWFzayB8PSAoMSA8PCBpKTsKKwkJCSsrZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKwkJfQorCQlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSBudW1fYmFja2VuZHMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSAwKSB7CisJCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDE7CisJCWVuYWJsZWRfYmFja2VuZHNfY291bnQgPSAxOworCX0KKworCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKKwkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKworCW1lbXNldCgodWludDhfdCAqKSZzd2l6emxlX3BpcGVbMF0sIDAsIHNpemVvZih1MzIpICogUjdYWF9NQVhfUElQRVMpOworCXN3aXRjaCAobnVtX3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSAxOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDM7CisJCXN3aXp6bGVfcGlwZVszXSA9IDE7CisJCWJyZWFrOworCWNhc2UgNToKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA1OworCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlicmVhazsKKwljYXNlIDc6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDU7CisJCWJyZWFrOworCWNhc2UgODoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJc3dpenpsZV9waXBlWzZdID0gNzsKKwkJc3dpenpsZV9waXBlWzddID0gNTsKKwkJYnJlYWs7CisJfQorCisJY3VyX2JhY2tlbmQgPSAwOworCWZvciAoY3VyX3BpcGUgPSAwOyBjdXJfcGlwZSA8IG51bV90aWxlX3BpcGVzOyArK2N1cl9waXBlKSB7CisJCXdoaWxlICgoKDEgPDwgY3VyX2JhY2tlbmQpICYgZW5hYmxlZF9iYWNrZW5kc19tYXNrKSA9PSAwKQorCQkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI3WFhfTUFYX0JBQ0tFTkRTOworCisJCWJhY2tlbmRfbWFwIHw9ICh1MzIpKCgoY3VyX2JhY2tlbmQgJiAzKSA8PCAoc3dpenpsZV9waXBlW2N1cl9waXBlXSAqIDIpKSk7CisKKwkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI3WFhfTUFYX0JBQ0tFTkRTOworCX0KKworCXJldHVybiBiYWNrZW5kX21hcDsKIH0KIAotdm9pZCBydjc3MF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCBydjc3MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlydjc3MF92cmFtX2dldF90eXBlKHJkZXYpOworCWludCBpLCBqLCBudW1fcWRfcGlwZXM7CisJdTMyIHN4X2RlYnVnXzE7CisJdTMyIHNteF9kY19jdGwwOworCXUzMiBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwl1MzIgdmd0X2dzX3Blcl9lczsKKwl1MzIgZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOworCXUzMiBzcV9tc19maWZvX3NpemVzOworCXUzMiBzcV9jb25maWc7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210OworCXUzMiBoZHBfaG9zdF9wYXRoX2NudGw7CisJdTMyIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzA7CisJdTMyIGJhY2tlbmRfbWFwOworCXUzMiBnYl90aWxpbmdfY29uZmlnID0gMDsKKwl1MzIgY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gMDsKKwl1MzIgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gMDsKKwl1MzIgbWNfYXJiX3JhbWNmZzsKKwl1MzIgZGJfZGVidWc0OwogCi0JLyogRklYTUU6IGltcGxlbWVudCAqLworCS8qIHNldHVwIGNoaXAgc3BlY3MgKi8KKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SVjc3MDoKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc2ltZHMgPSAxMDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3BycyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3N0YWNrX2VudHJpZXMgPSA1MTI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2dzX3RocmVhZHMgPSAxNiAqIDI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTEyOworCQlyZGV2LT5jb25maWcucnY3NzAuc3FfbnVtX2NmX2luc3RzID0gMjsKKworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbnVtX29mX3NldHMgPSA3OworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfcHJpbV9maWZvX3NpemUgPSAweEY5OworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MzA6CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfcGlwZXMgPSAyOworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3NpbWRzID0gODsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3BycyA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2dzX3RocmVhZHMgPSAxNiAqIDI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMjI0OworCQlyZGV2LT5jb25maWcucnY3NzAuc3FfbnVtX2NmX2luc3RzID0gMjsKKworCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbnVtX29mX3NldHMgPSA3OworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfcHJpbV9maWZvX3NpemUgPSAweGY5OworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSA9IDB4MTMwOworCQlpZiAocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPiAxNikgeworCQkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfcG9zX3NpemUgLT0gMTY7CisJCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSArPSAxNjsKKwkJfQorCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfcGlwZXMgPSAyOworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXMgPSAyOworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3NpbWRzID0gMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3BycyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aHJlYWRzID0gMTkyOworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfaHdfY29udGV4dHMgPSA0OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2dzX3RocmVhZHMgPSA4ICogMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgPSAxMTI7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zcV9udW1fY2ZfaW5zdHMgPSAxOworCisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9udW1fb2Zfc2V0cyA9IDc7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4NDA7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfZWFybHl6X3RpbGVfZmlmb19maXplID0gMHgxMzA7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjc0MDoKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc2ltZHMgPSA4OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzID0gNDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcucnY3NzAubWF4X3RocmVhZHMgPSAyNDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc3RhY2tfZW50cmllcyA9IDUxMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9od19jb250ZXh0cyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3NfdGhyZWFkcyA9IDE2ICogMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSAzMjsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgPSAyMjQ7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9udW1fb2Zfc2V0cyA9IDc7CisJCXJkZXYtPmNvbmZpZy5ydjc3MC5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4MTAwOworCQlyZGV2LT5jb25maWcucnY3NzAuc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSA9IDB4MTMwOworCisJCWlmIChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA+IDE2KSB7CisJCQlyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAtPSAxNjsKKwkJCXJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NteF9zaXplICs9IDE2OworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIEluaXRpYWxpemUgSERQICovCisJaiA9IDA7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJV1JFRzMyKCgweDJjMTQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzE4ICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMxYyArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMjAgKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzI0ICsgaiksIDB4MDAwMDAwMDApOworCQlqICs9IDB4MTg7CisJfQorCisJV1JFRzMyKEdSQk1fQ05UTCwgR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogc2V0dXAgdGlsaW5nLCBzaW1kLCBwaXBlIGNvbmZpZyAqLworCW1jX2FyYl9yYW1jZmcgPSBSUkVHMzIoTUNfQVJCX1JBTUNGRyk7CisKKwlzd2l0Y2ggKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcykgeworCWNhc2UgMToKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBQSVBFX1RJTElORygwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFBJUEVfVElMSU5HKDEpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUElQRV9USUxJTkcoMik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBQSVBFX1RJTElORygzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzcwKQorCQlnYl90aWxpbmdfY29uZmlnIHw9IEJBTktfVElMSU5HKDEpOworCWVsc2UKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygobWNfYXJiX3JhbWNmZyAmIE5PT0ZCQU5LX1NISUZUKSA+PiBOT09GQkFOS19NQVNLKTsKKworCWdiX3RpbGluZ19jb25maWcgfD0gR1JPVVBfU0laRSgwKTsKKworCWlmICgoKG1jX2FyYl9yYW1jZmcgJiBOT09GUk9XU19NQVNLKSAmIE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOworCQlnYl90aWxpbmdfY29uZmlnIHw9IFNBTVBMRV9TUExJVCgzKTsKKwl9IGVsc2UgeworCQlnYl90aWxpbmdfY29uZmlnIHw9CisJCQlST1dfVElMSU5HKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSk7CisJCWdiX3RpbGluZ19jb25maWcgfD0KKwkJCVNBTVBMRV9TUExJVCgoKG1jX2FyYl9yYW1jZmcgJiBOT09GUk9XU19NQVNLKSA+PiBOT09GUk9XU19TSElGVCkpOworCX0KKworCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19TV0FQUygxKTsKKworCWJhY2tlbmRfbWFwID0gcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcywKKwkJCQkJCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzLAorCQkJCQkJCSgweGZmIDw8IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfYmFja2VuZHMpICYgMHhmZik7CisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CisKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQorCQlJTkFDVElWRV9RRF9QSVBFUygoUjdYWF9NQVhfUElQRVNfTUFTSyA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X3BpcGVzKSAmIFI3WFhfTUFYX1BJUEVTX01BU0spOworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQorCQlJTkFDVElWRV9TSU1EUygoUjdYWF9NQVhfU0lNRFNfTUFTSyA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X3NpbWRzKSAmIFI3WFhfTUFYX1NJTURTX01BU0spOworCisJY2NfcmJfYmFja2VuZF9kaXNhYmxlID0KKwkJQkFDS0VORF9ESVNBQkxFKChSN1hYX01BWF9CQUNLRU5EU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfYmFja2VuZHMpICYgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyk7CisKKwlXUkVHMzIoR0JfVElMSU5HX0NPTkZJRywgZ2JfdGlsaW5nX2NvbmZpZyk7CisJV1JFRzMyKERDUF9USUxJTkdfQ09ORklHLCAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCVdSRUczMihIRFBfVElMSU5HX0NPTkZJRywgKGdiX3RpbGluZ19jb25maWcgJiAweGZmZmYpKTsKKworCVdSRUczMihDQ19SQl9CQUNLRU5EX0RJU0FCTEUsICAgICAgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKKwlXUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHLCAgIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisJV1JFRzMyKEdDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHLCBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOworCisJV1JFRzMyKENDX1NZU19SQl9CQUNLRU5EX0RJU0FCTEUsIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CisJV1JFRzMyKENHVFNfU1lTX1RDQ19ESVNBQkxFLCAwKTsKKwlXUkVHMzIoQ0dUU19UQ0NfRElTQUJMRSwgMCk7CisJV1JFRzMyKENHVFNfVVNFUl9TWVNfVENDX0RJU0FCTEUsIDApOworCVdSRUczMihDR1RTX1VTRVJfVENDX0RJU0FCTEUsIDApOworCisJbnVtX3FkX3BpcGVzID0KKwkJUjdYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyhjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwlXUkVHMzIoVkdUX09VVF9ERUFMTE9DX0NOVEwsIChudW1fcWRfcGlwZXMgKiA0KSAmIERFQUxMT0NfRElTVF9NQVNLKTsKKwlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKG51bV9xZF9waXBlcyAqIDQpIC0gMikgJiBWVFhfUkVVU0VfREVQVEhfTUFTSyk7CisKKwkvKiBzZXQgSFcgZGVmYXVsdHMgZm9yIDNEIGVuZ2luZSAqLworCVdSRUczMihDUF9RVUVVRV9USFJFU0hPTERTLCAoUk9RX0lCMV9TVEFSVCgweDE2KSB8CisJCQkJCQlST1FfSUIyX1NUQVJUKDB4MmIpKSk7CisKKwlXUkVHMzIoQ1BfTUVRX1RIUkVTSE9MRFMsIFNUUV9TUExJVCgweDMwKSk7CisKKwlXUkVHMzIoVEFfQ05UTF9BVVgsIChESVNBQkxFX0NVQkVfQU5JU08gfAorCQkJCQlTWU5DX0dSQURJRU5UIHwKKwkJCQkJU1lOQ19XQUxLRVIgfAorCQkJCQlTWU5DX0FMSUdORVIpKTsKKworCXN4X2RlYnVnXzEgPSBSUkVHMzIoU1hfREVCVUdfMSk7CisJc3hfZGVidWdfMSB8PSBFTkFCTEVfTkVXX1NNWF9BRERSRVNTOworCVdSRUczMihTWF9ERUJVR18xLCBzeF9kZWJ1Z18xKTsKKworCXNteF9kY19jdGwwID0gUlJFRzMyKFNNWF9EQ19DVEwwKTsKKwlzbXhfZGNfY3RsMCAmPSB+Q0FDSEVfREVQVEgoMHgxZmYpOworCXNteF9kY19jdGwwIHw9IENBQ0hFX0RFUFRIKChyZGV2LT5jb25maWcucnY3NzAuc3hfbnVtX29mX3NldHMgKiA2NCkgLSAxKTsKKwlXUkVHMzIoU01YX0RDX0NUTDAsIHNteF9kY19jdGwwKTsKKworCVdSRUczMihTTVhfRVZFTlRfQ1RMLCAoRVNfRkxVU0hfQ1RMKDQpIHwKKwkJCQkJICBHU19GTFVTSF9DVEwoNCkgfAorCQkJCQkgIEFDS19GTFVTSF9DVEwoMykgfAorCQkJCQkgIFNZTkNfRkxVU0hfQ1RMKSk7CisKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3NzApCisJCVdSRUczMihEQl9ERUJVRzMsIERCX0NMS19PRkZfREVMQVkoMHgxZikpOworCWVsc2UgeworCQlkYl9kZWJ1ZzQgPSBSUkVHMzIoREJfREVCVUc0KTsKKwkJZGJfZGVidWc0IHw9IERJU0FCTEVfVElMRV9DT1ZFUkVEX0ZPUl9QU19JVEVSOworCQlXUkVHMzIoREJfREVCVUc0LCBkYl9kZWJ1ZzQpOworCX0KKworCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKKwkJCQkJCSAgIFBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKKworCVdSRUczMihQQV9TQ19GSUZPX1NJWkUsIChTQ19QUklNX0ZJRk9fU0laRShyZGV2LT5jb25maWcucnY3NzAuc2NfcHJpbV9maWZvX3NpemUpIHwKKwkJCQkJCSBTQ19ISVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSkgfAorCQkJCQkJIFNDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcucnY3NzAuc2NfZWFybHl6X3RpbGVfZmlmb19maXplKSkpOworCisJV1JFRzMyKFBBX1NDX01VTFRJX0NISVBfQ05UTCwgMCk7CisKKwlXUkVHMzIoVkdUX05VTV9JTlNUQU5DRVMsIDEpOworCisJV1JFRzMyKFNQSV9DT05GSUdfQ05UTCwgR1BSX1dSSVRFX1BSSU9SSVRZKDApKTsKKworCVdSRUczMihTUElfQ09ORklHX0NOVExfMSwgVlRYX0RPTkVfREVMQVkoNCkpOworCisJV1JFRzMyKENQX1BFUkZNT05fQ05UTCwgMCk7CisKKwlzcV9tc19maWZvX3NpemVzID0gKENBQ0hFX0ZJRk9fU0laRSgxNiAqIHJkZXYtPmNvbmZpZy5ydjc3MC5zcV9udW1fY2ZfaW5zdHMpIHwKKwkJCSAgICBET05FX0ZJRk9fSElXQVRFUigweGUwKSB8CisJCQkgICAgQUxVX1VQREFURV9GSUZPX0hJV0FURVIoMHg4KSk7CisJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwljYXNlIENISVBfUlY3NzA6CisJCXNxX21zX2ZpZm9fc2l6ZXMgfD0gRkVUQ0hfRklGT19ISVdBVEVSKDB4MSk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjczMDoKKwljYXNlIENISVBfUlY3MTA6CisJY2FzZSBDSElQX1JWNzQwOgorCWRlZmF1bHQ6CisJCXNxX21zX2ZpZm9fc2l6ZXMgfD0gRkVUQ0hfRklGT19ISVdBVEVSKDB4NCk7CisJCWJyZWFrOworCX0KKwlXUkVHMzIoU1FfTVNfRklGT19TSVpFUywgc3FfbXNfZmlmb19zaXplcyk7CisKKwkvKiBTUV9DT05GSUcsIFNRX0dQUl9SRVNPVVJDRV9NR01ULCBTUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVAorCSAqIHNob3VsZCBiZSBhZGp1c3RlZCBhcyBuZWVkZWQgYnkgdGhlIDJELzNEIGRyaXZlcnMuICBUaGlzIGp1c3Qgc2V0cyBkZWZhdWx0IHZhbHVlcworCSAqLworCXNxX2NvbmZpZyA9IFJSRUczMihTUV9DT05GSUcpOworCXNxX2NvbmZpZyAmPSB+KFBTX1BSSU8oMykgfAorCQkgICAgICAgVlNfUFJJTygzKSB8CisJCSAgICAgICBHU19QUklPKDMpIHwKKwkJICAgICAgIEVTX1BSSU8oMykpOworCXNxX2NvbmZpZyB8PSAoRFg5X0NPTlNUUyB8CisJCSAgICAgIFZDX0VOQUJMRSB8CisJCSAgICAgIEVYUE9SVF9TUkNfQyB8CisJCSAgICAgIFBTX1BSSU8oMCkgfAorCQkgICAgICBWU19QUklPKDEpIHwKKwkJICAgICAgR1NfUFJJTygyKSB8CisJCSAgICAgIEVTX1BSSU8oMykpOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjcxMCkKKwkJLyogbm8gdmVydGV4IGNhY2hlICovCisJCXNxX2NvbmZpZyAmPSB+VkNfRU5BQkxFOworCisJV1JFRzMyKFNRX0NPTkZJRywgc3FfY29uZmlnKTsKKworCVdSRUczMihTUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgKE5VTV9QU19HUFJTKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiAyNCkvNjQpIHwKKwkJCQkJIE5VTV9WU19HUFJTKChyZGV2LT5jb25maWcucnY3NzAubWF4X2dwcnMgKiAyNCkvNjQpIHwKKwkJCQkJIE5VTV9DTEFVU0VfVEVNUF9HUFJTKCgocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzICogMjQpLzY0KS8yKSkpOworCisJV1JFRzMyKFNRX0dQUl9SRVNPVVJDRV9NR01UXzIsICAoTlVNX0dTX0dQUlMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3BycyAqIDcpLzY0KSB8CisJCQkJCSBOVU1fRVNfR1BSUygocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzICogNykvNjQpKSk7CisKKwlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChOVU1fUFNfVEhSRUFEUygocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aHJlYWRzICogNCkvOCkgfAorCQkJCSAgIE5VTV9WU19USFJFQURTKChyZGV2LT5jb25maWcucnY3NzAubWF4X3RocmVhZHMgKiAyKS84KSB8CisJCQkJICAgTlVNX0VTX1RIUkVBRFMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGhyZWFkcyAqIDEpLzgpKTsKKwlpZiAoKChyZGV2LT5jb25maWcucnY3NzAubWF4X3RocmVhZHMgKiAxKSAvIDgpID4gcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9nc190aHJlYWRzKQorCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCB8PSBOVU1fR1NfVEhSRUFEUyhyZGV2LT5jb25maWcucnY3NzAubWF4X2dzX3RocmVhZHMpOworCWVsc2UKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgfD0gTlVNX0dTX1RIUkVBRFMoKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfZ3NfdGhyZWFkcyAqIDEpLzgpOworCVdSRUczMihTUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCisJV1JFRzMyKFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMSwgKE5VTV9QU19TVEFDS19FTlRSSUVTKChyZGV2LT5jb25maWcucnY3NzAubWF4X3N0YWNrX2VudHJpZXMgKiAxKS80KSB8CisJCQkJCQkgICAgIE5VTV9WU19TVEFDS19FTlRSSUVTKChyZGV2LT5jb25maWcucnY3NzAubWF4X3N0YWNrX2VudHJpZXMgKiAxKS80KSkpOworCisJV1JFRzMyKFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgKE5VTV9HU19TVEFDS19FTlRSSUVTKChyZGV2LT5jb25maWcucnY3NzAubWF4X3N0YWNrX2VudHJpZXMgKiAxKS80KSB8CisJCQkJCQkgICAgIE5VTV9FU19TVEFDS19FTlRSSUVTKChyZGV2LT5jb25maWcucnY3NzAubWF4X3N0YWNrX2VudHJpZXMgKiAxKS80KSkpOworCisJc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMCA9IChTSU1EQV9SSU5HMCgocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzICogMzgpLzY0KSB8CisJCQkJICAgICBTSU1EQV9SSU5HMSgocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzICogMzgpLzY0KSB8CisJCQkJICAgICBTSU1EQl9SSU5HMCgocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzICogMzgpLzY0KSB8CisJCQkJICAgICBTSU1EQl9SSU5HMSgocmRldi0+Y29uZmlnLnJ2NzcwLm1heF9ncHJzICogMzgpLzY0KSk7CisKKwlXUkVHMzIoU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMCwgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMCk7CisJV1JFRzMyKFNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzEsIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzApOworCVdSRUczMihTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8yLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlXUkVHMzIoU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMywgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMCk7CisJV1JFRzMyKFNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzQsIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzApOworCVdSRUczMihTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl81LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlXUkVHMzIoU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNiwgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMCk7CisJV1JFRzMyKFNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzcsIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzApOworCisJV1JFRzMyKFBBX1NDX0ZPUkNFX0VPVl9NQVhfQ05UUywgKEZPUkNFX0VPVl9NQVhfQ0xLX0NOVCg0MDk1KSB8CisJCQkJCSAgRk9SQ0VfRU9WX01BWF9SRVpfQ05UKDI1NSkpKTsKKworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjcxMCkKKwkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChDQUNIRV9JTlZBTElEQVRJT04oVENfT05MWSkgfAorCQkJCQkJQVVUT19JTlZMRF9FTihFU19BTkRfR1NfQVVUTykpKTsKKwllbHNlCisJCVdSRUczMihWR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCAoQ0FDSEVfSU5WQUxJREFUSU9OKFZDX0FORF9UQykgfAorCQkJCQkJQVVUT19JTlZMRF9FTihFU19BTkRfR1NfQVVUTykpKTsKKworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjczMDoKKwljYXNlIENISVBfUlY3NDA6CisJCWdzX3ByaW1fYnVmZmVyX2RlcHRoID0gMzg0OworCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJCWdzX3ByaW1fYnVmZmVyX2RlcHRoID0gMTI4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwludW1fZ3NfdmVydHNfcGVyX3RocmVhZCA9IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfcGlwZXMgKiAxNjsKKwl2Z3RfZ3NfcGVyX2VzID0gZ3NfcHJpbV9idWZmZXJfZGVwdGggKyBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwkvKiBNYXggdmFsdWUgZm9yIHRoaXMgaXMgMjU2ICovCisJaWYgKHZndF9nc19wZXJfZXMgPiAyNTYpCisJCXZndF9nc19wZXJfZXMgPSAyNTY7CisKKwlXUkVHMzIoVkdUX0VTX1BFUl9HUywgMTI4KTsKKwlXUkVHMzIoVkdUX0dTX1BFUl9FUywgdmd0X2dzX3Blcl9lcyk7CisJV1JFRzMyKFZHVF9HU19QRVJfVlMsIDIpOworCisJLyogbW9yZSBkZWZhdWx0IHZhbHVlcy4gMkQvM0QgZHJpdmVyIHNob3VsZCBhZGp1c3QgYXMgbmVlZGVkICovCisJV1JFRzMyKFZHVF9HU19WRVJURVhfUkVVU0UsIDE2KTsKKwlXUkVHMzIoUEFfU0NfTElORV9TVElQUExFX1NUQVRFLCAwKTsKKwlXUkVHMzIoVkdUX1NUUk1PVVRfRU4sIDApOworCVdSRUczMihTWF9NSVNDLCAwKTsKKwlXUkVHMzIoUEFfU0NfTU9ERV9DTlRMLCAwKTsKKwlXUkVHMzIoUEFfU0NfRURHRVJVTEUsIDB4YWFhYWFhYWEpOworCVdSRUczMihQQV9TQ19BQV9DT05GSUcsIDApOworCVdSRUczMihQQV9TQ19DTElQUkVDVF9SVUxFLCAweGZmZmYpOworCVdSRUczMihQQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVdSRUczMihTUElfSU5QVVRfWiwgMCk7CisJV1JFRzMyKFNQSV9QU19JTl9DT05UUk9MXzAsIE5VTV9JTlRFUlAoMikpOworCVdSRUczMihDQl9DT0xPUjdfRlJBRywgMCk7CisKKwkvKiBjbGVhciByZW5kZXIgYnVmZmVyIGJhc2UgYWRkcmVzc2VzICovCisJV1JFRzMyKENCX0NPTE9SMF9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1IxX0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjJfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SM19CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1I0X0JBU0UsIDApOworCVdSRUczMihDQl9DT0xPUjVfQkFTRSwgMCk7CisJV1JFRzMyKENCX0NPTE9SNl9CQVNFLCAwKTsKKwlXUkVHMzIoQ0JfQ09MT1I3X0JBU0UsIDApOworCisJV1JFRzMyKFRDUF9DTlRMLCAwKTsKKworCWhkcF9ob3N0X3BhdGhfY250bCA9IFJSRUczMihIRFBfSE9TVF9QQVRIX0NOVEwpOworCVdSRUczMihIRFBfSE9TVF9QQVRIX0NOVEwsIGhkcF9ob3N0X3BhdGhfY250bCk7CisKKwlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKKworCVdSRUczMihQQV9DTF9FTkhBTkNFLCAoQ0xJUF9WVFhfUkVPUkRFUl9FTkEgfAorCQkJCQkgIE5VTV9DTElQX1NFUSgzKSkpOworCit9CisKK2ludCBydjc3MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWZpeGVkMjBfMTIgYTsKKwl1MzIgdG1wOworCWludCByOworCisJLyogR2V0IFZSQU0gaW5mb3JtYXRpb25zICovCisJLyogRklYTUU6IERvbid0IGtub3cgaG93IHRvIGRldGVybWluZSB2cmFtIHdpZHRoLCBuZWVkIHRvIGNoZWNrCisJICogdnJhbV93aWR0aCB1c2FnZQorCSAqLworCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAxMjg7CisJcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOwogCS8qIENvdWxkIGFwZXIgc2l6ZSByZXBvcnQgMCA/ICovCiAJcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKIAlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJcmRldi0+bWMubWNfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKKwlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQkvKiBndHRfc2l6ZSBpcyBzZXR1cCBieSByYWRlb25fYWdwX2luaXQgKi8KKwkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7CisJCXRtcCA9IDB4RkZGRkZGRkZVTCAtIHJkZXYtPm1jLmFncF9iYXNlIC0gcmRldi0+bWMuZ3R0X3NpemU7CisJCS8qIFRyeSB0byBwdXQgdnJhbSBiZWZvcmUgb3IgYWZ0ZXIgQUdQIGJlY2F1c2Ugd2UKKwkJICogd2Ugd2FudCBTWVNURU1fQVBFUlRVUkUgdG8gY292ZXIgYm90aCBWUkFNIGFuZAorCQkgKiBBR1Agc28gdGhhdCBHUFUgY2FuIGNhdGNoIG91dCBvZiBWUkFNL0FHUCBhY2Nlc3MKKwkJICovCisJCWlmIChyZGV2LT5tYy5ndHRfbG9jYXRpb24gPiByZGV2LT5tYy5tY192cmFtX3NpemUpIHsKKwkJCS8qIEVub3VnaHQgcGxhY2UgYmVmb3JlICovCisJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uIC0KKwkJCQkJCQlyZGV2LT5tYy5tY192cmFtX3NpemU7CisJCX0gZWxzZSBpZiAodG1wID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7CisJCQkvKiBFbm91Z2h0IHBsYWNlIGFmdGVyICovCisJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsKKwkJCQkJCQlyZGV2LT5tYy5ndHRfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCS8qIFRyeSB0byBzZXR1cCBWUkFNIHRoZW4gQUdQIG1pZ2h0IG5vdAorCQkJICogbm90IHdvcmsgb24gc29tZSBjYXJkCisJCQkgKi8KKwkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7CisJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCX0KKwl9IGVsc2UgeworCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHgwMDAwMDAwMFVMOworCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCX0KKwlyZGV2LT5tYy52cmFtX3N0YXJ0ID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7CisJcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOworCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZTsKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KKwkgKiBkZWZhdWx0IHNldHVwCisJICovCisJYS5mdWxsID0gcmZpeGVkX2NvbnN0KDEwMCk7CisJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2NvbnN0KHJkZXYtPmNsb2NrLmRlZmF1bHRfc2Nsayk7CisJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKKwlyZXR1cm4gMDsKK30KK2ludCBydjc3MF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogRklYTUU6IGltcGxlbWVudCBhbnkgcnY3NzAgc3BlY2lmaWMgYml0cyAqLworCXJldHVybiByNjAwX2dwdV9yZXNldChyZGV2KTsKK30KKworc3RhdGljIGludCBydjc3MF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcmFkZW9uX2dwdV9yZXNldChyZGV2KTsKKwlydjc3MF9tY19yZXN1bWUocmRldik7CisJciA9IHJ2NzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NzcwX2dwdV9pbml0KHJkZXYpOworCisJciA9IHJhZGVvbl9vYmplY3RfcGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLAorCQkJICAgICAgJnJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBibGl0IG9iamVjdCAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKworCXIgPSByYWRlb25fcmluZ19pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSBydjc3MF9jcF9sb2FkX21pY3JvY29kZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHI2MDBfY3BfcmVzdW1lKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcjYwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKK30KKworaW50IHJ2NzcwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCS8qIEZJWE1FOiB3aGF0IGRvIHdlIHdhbnQgdG8gZG8gaGVyZSA/ICovCisJfQorCS8qIHBvc3QgY2FyZCAqLworCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfSBlbHNlIHsKKwkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCX0KKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQorCisJciA9IHJ2NzcwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyNjAwIHN0YXJ0dXAgZmFpbGVkIG9uIHJlc3VtZVxuIik7CisJCXJldHVybiByOworCX0KKworCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiByOworCit9CisKK2ludCBydjc3MF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgcmluZyB0byBiZSBlbXB0eSAqLworCXI3MDBfY3Bfc3RvcChyZGV2KTsKKwlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOworCXJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCisJLyogdW5waW4gc2hhZGVycyBibyAqLworICAgICAgICByYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKKwlyZXR1cm4gMDsKK30KKworLyogUGxhbiBpcyB0byBtb3ZlIGluaXRpYWxpemF0aW9uIGluIHRoYXQgZnVuY3Rpb24gYW5kIHVzZQorICogaGVscGVyIGZ1bmN0aW9uIHNvIHRoYXQgcmFkZW9uX2RldmljZV9pbml0IHByZXR0eSBtdWNoCisgKiBkbyBub3RoaW5nIG1vcmUgdGhhbiBjYWxsaW5nIGFzaWMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMKKyAqIHNob3VsZCBhbHNvIGFsbG93IHRvIHJlbW92ZSBhIGJ1bmNoIG9mIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBsaWtlIHZyYW1faW5mby4KKyAqLworaW50IHJ2NzcwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKKwlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogVGhpcyBkb24ndCBkbyBtdWNoICovCisJciA9IHJhZGVvbl9nZW1faW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogUmVhZCBCSU9TICovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogTXVzdCBiZSBhbiBBVE9NQklPUyAqLworCWlmICghcmRldi0+aXNfYXRvbV9iaW9zKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIFBvc3QgY2FyZCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIXI2MDBfY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyNjAwX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2NzcwX21jX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCisJCQlydjc3MF9maW5pKHJkZXYpOworCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKKwkJfQorCQlyZXR1cm4gcjsKKwl9CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZGV2LT5jcC5yaW5nX29iaiA9IE5VTEw7CisJcjYwMF9yaW5nX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCisJaWYgKCFyZGV2LT5tZV9mdyB8fCAhcmRldi0+cGZwX2Z3KSB7CisJCXIgPSByNjAwX2NwX2luaXRfbWljcm9jb2RlKHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSFcbiIpOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisKKwlyID0gcjYwMF9wY2llX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjYwMF9ibGl0X2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgYmxpdHRlciAoJWQpLlxuIiwgcik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisKKwlyID0gcnY3NzBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KKwkJCXJ2NzcwX2ZpbmkocmRldik7CisJCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKKwkJCXJldHVybiBydjc3MF9pbml0KHJkZXYpOworCQl9CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJaWYgKHJkZXYtPmFjY2VsX3dvcmtpbmcpIHsKKwkJciA9IHJhZGVvbl9pYl9wb29sX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgcG9vbCAoJWQpLlxuIiwgcik7CisJCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJCX0KKwkJciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CisJCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnY3NzBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlydjc3MF9zdXNwZW5kKHJkZXYpOworCisJcjYwMF9ibGl0X2ZpbmkocmRldik7CisJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlydjc3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9jbG9ja3NfZmluaShyZGV2KTsKKyNpZiBfX09TX0hBU19BR1AKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKQorCQlyYWRlb25fYWdwX2ZpbmkocmRldik7CisjZW5kaWYKKwlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwl9IGVsc2UgeworCQlyYWRlb25fY29tYmlvc19maW5pKHJkZXYpOworCX0KKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKKwlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5YzNkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgUlY3NzBfSAorI2RlZmluZSBSVjc3MF9ICisKKyNkZWZpbmUgUjdYWF9NQVhfU0hfR1BSUyAgICAgICAgICAgMjU2CisjZGVmaW5lIFI3WFhfTUFYX1RFTVBfR1BSUyAgICAgICAgIDE2CisjZGVmaW5lIFI3WFhfTUFYX1NIX1RIUkVBRFMgICAgICAgIDI1NgorI2RlZmluZSBSN1hYX01BWF9TSF9TVEFDS19FTlRSSUVTICA0MDk2CisjZGVmaW5lIFI3WFhfTUFYX0JBQ0tFTkRTICAgICAgICAgIDgKKyNkZWZpbmUgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyAgICAgMHhmZgorI2RlZmluZSBSN1hYX01BWF9TSU1EUyAgICAgICAgICAgICAxNgorI2RlZmluZSBSN1hYX01BWF9TSU1EU19NQVNLICAgICAgICAweGZmZmYKKyNkZWZpbmUgUjdYWF9NQVhfUElQRVMgICAgICAgICAgICAgOAorI2RlZmluZSBSN1hYX01BWF9QSVBFU19NQVNLICAgICAgICAweGZmCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZQlDQl9DT0xPUjBfQkFTRQkJCQkJMHgyODA0MAorI2RlZmluZQlDQl9DT0xPUjFfQkFTRQkJCQkJMHgyODA0NAorI2RlZmluZQlDQl9DT0xPUjJfQkFTRQkJCQkJMHgyODA0OAorI2RlZmluZQlDQl9DT0xPUjNfQkFTRQkJCQkJMHgyODA0QworI2RlZmluZQlDQl9DT0xPUjRfQkFTRQkJCQkJMHgyODA1MAorI2RlZmluZQlDQl9DT0xPUjVfQkFTRQkJCQkJMHgyODA1NAorI2RlZmluZQlDQl9DT0xPUjZfQkFTRQkJCQkJMHgyODA1OAorI2RlZmluZQlDQl9DT0xPUjdfQkFTRQkJCQkJMHgyODA1QworI2RlZmluZQlDQl9DT0xPUjdfRlJBRwkJCQkJMHgyODBGQworCisjZGVmaW5lCUNDX0dDX1NIQURFUl9QSVBFX0NPTkZJRwkJCTB4ODk1MAorI2RlZmluZQlDQ19SQl9CQUNLRU5EX0RJU0FCTEUJCQkJMHg5OEY0CisjZGVmaW5lCQlCQUNLRU5EX0RJU0FCTEUoeCkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJQ0NfU1lTX1JCX0JBQ0tFTkRfRElTQUJMRQkJCTB4M0Y4OAorCisjZGVmaW5lCUNHVFNfU1lTX1RDQ19ESVNBQkxFCQkJCTB4M0Y5MAorI2RlZmluZQlDR1RTX1RDQ19ESVNBQkxFCQkJCTB4OTE0OAorI2RlZmluZQlDR1RTX1VTRVJfU1lTX1RDQ19ESVNBQkxFCQkJMHgzRjk0CisjZGVmaW5lCUNHVFNfVVNFUl9UQ0NfRElTQUJMRQkJCQkweDkxNEMKKworI2RlZmluZQlDT05GSUdfTUVNU0laRQkJCQkJMHg1NDI4CisKKyNkZWZpbmUJQ1BfTUVfQ05UTAkJCQkJMHg4NkQ4CisjZGVmaW5lCQlDUF9NRV9IQUxUCQkJCQkoMTw8MjgpCisjZGVmaW5lCQlDUF9QRlBfSEFMVAkJCQkJKDE8PDI2KQorI2RlZmluZQlDUF9NRV9SQU1fREFUQQkJCQkJMHhDMTYwCisjZGVmaW5lCUNQX01FX1JBTV9SQUREUgkJCQkJMHhDMTU4CisjZGVmaW5lCUNQX01FX1JBTV9XQUREUgkJCQkJMHhDMTVDCisjZGVmaW5lIENQX01FUV9USFJFU0hPTERTCQkJCTB4ODc2NAorI2RlZmluZQkJU1RRX1NQTElUKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCUNQX1BFUkZNT05fQ05UTAkJCQkJMHg4N0ZDCisjZGVmaW5lCUNQX1BGUF9VQ09ERV9BRERSCQkJCTB4QzE1MAorI2RlZmluZQlDUF9QRlBfVUNPREVfREFUQQkJCQkweEMxNTQKKyNkZWZpbmUJQ1BfUVVFVUVfVEhSRVNIT0xEUwkJCQkweDg3NjAKKyNkZWZpbmUJCVJPUV9JQjFfU1RBUlQoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJUk9RX0lCMl9TVEFSVCh4KQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCUNQX1JCX0NOVEwJCQkJCTB4QzEwNAorI2RlZmluZQkJUkJfQlVGU1ooeCkJCQkJCSgoeCk8PDApCisjZGVmaW5lCQlSQl9CTEtTWih4KQkJCQkJKCh4KTw8OCkKKyNkZWZpbmUJCVJCX05PX1VQREFURQkJCQkJKDE8PDI3KQorI2RlZmluZQkJUkJfUlBUUl9XUl9FTkEJCQkJCSgxPDwzMSkKKyNkZWZpbmUJCUJVRl9TV0FQXzMyQklUCQkJCQkoMiA8PCAxNikKKyNkZWZpbmUJQ1BfUkJfUlBUUgkJCQkJMHg4NzAwCisjZGVmaW5lCUNQX1JCX1JQVFJfQUREUgkJCQkJMHhDMTBDCisjZGVmaW5lCUNQX1JCX1JQVFJfQUREUl9ISQkJCQkweEMxMTAKKyNkZWZpbmUJQ1BfUkJfUlBUUl9XUgkJCQkJMHhDMTA4CisjZGVmaW5lCUNQX1JCX1dQVFIJCQkJCTB4QzExNAorI2RlZmluZQlDUF9SQl9XUFRSX0FERFIJCQkJCTB4QzExOAorI2RlZmluZQlDUF9SQl9XUFRSX0FERFJfSEkJCQkJMHhDMTFDCisjZGVmaW5lCUNQX1JCX1dQVFJfREVMQVkJCQkJMHg4NzA0CisjZGVmaW5lCUNQX1NFTV9XQUlUX1RJTUVSCQkJCTB4ODVCQworCisjZGVmaW5lCURCX0RFQlVHMwkJCQkJMHg5OEIwCisjZGVmaW5lCQlEQl9DTEtfT0ZGX0RFTEFZKHgpCQkJCSgoeCkgPDwgMTEpCisjZGVmaW5lIERCX0RFQlVHNAkJCQkJMHg5QjhDCisjZGVmaW5lCQlESVNBQkxFX1RJTEVfQ09WRVJFRF9GT1JfUFNfSVRFUgkJKDEgPDwgNikKKworI2RlZmluZQlEQ1BfVElMSU5HX0NPTkZJRwkJCQkweDZDQTAKKyNkZWZpbmUJCVBJUEVfVElMSU5HKHgpCQkJCQkoKHgpIDw8IDEpCisjZGVmaW5lIAlCQU5LX1RJTElORyh4KQkJCQkJKCh4KSA8PCA0KQorI2RlZmluZQkJR1JPVVBfU0laRSh4KQkJCQkJKCh4KSA8PCA2KQorI2RlZmluZQkJUk9XX1RJTElORyh4KQkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJQkFOS19TV0FQUyh4KQkJCQkJKCh4KSA8PCAxMSkKKyNkZWZpbmUJCVNBTVBMRV9TUExJVCh4KQkJCQkJKCh4KSA8PCAxNCkKKyNkZWZpbmUJCUJBQ0tFTkRfTUFQKHgpCQkJCQkoKHgpIDw8IDE2KQorCisjZGVmaW5lIEdCX1RJTElOR19DT05GSUcJCQkJMHg5OEYwCisKKyNkZWZpbmUJR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcJCQkweDg5NTQKKyNkZWZpbmUJCUlOQUNUSVZFX1FEX1BJUEVTKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCUlOQUNUSVZFX1FEX1BJUEVTX01BU0sJCQkJMHgwMDAwRkYwMAorI2RlZmluZQkJSU5BQ1RJVkVfU0lNRFMoeCkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCUlOQUNUSVZFX1NJTURTX01BU0sJCQkJMHgwMEZGMDAwMAorCisjZGVmaW5lCUdSQk1fQ05UTAkJCQkJMHg4MDAwCisjZGVmaW5lCQlHUkJNX1JFQURfVElNRU9VVCh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCUdSQk1fU09GVF9SRVNFVAkJCQkJMHg4MDIwCisjZGVmaW5lCQlTT0ZUX1JFU0VUX0NQCQkJCQkoMTw8MCkKKyNkZWZpbmUJR1JCTV9TVEFUVVMJCQkJCTB4ODAxMAorI2RlZmluZQkJQ01ERklGT19BVkFJTF9NQVNLCQkJCTB4MDAwMDAwMEYKKyNkZWZpbmUJCUdVSV9BQ1RJVkUJCQkJCSgxPDwzMSkKKyNkZWZpbmUJR1JCTV9TVEFUVVMyCQkJCQkweDgwMTQKKworI2RlZmluZQlIRFBfSE9TVF9QQVRIX0NOVEwJCQkJMHgyQzAwCisjZGVmaW5lCUhEUF9OT05TVVJGQUNFX0JBU0UJCQkJMHgyQzA0CisjZGVmaW5lCUhEUF9OT05TVVJGQUNFX0lORk8JCQkJMHgyQzA4CisjZGVmaW5lCUhEUF9OT05TVVJGQUNFX1NJWkUJCQkJMHgyQzBDCisjZGVmaW5lIEhEUF9SRUdfQ09IRVJFTkNZX0ZMVVNIX0NOVEwJCQkweDU0QTAKKyNkZWZpbmUJSERQX1RJTElOR19DT05GSUcJCQkJMHgyRjNDCisKKyNkZWZpbmUJTUNfQVJCX1JBTUNGRwkJCQkJMHgyNzYwCisjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAorI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMworI2RlZmluZQkJTk9PRlJBTktfU0hJRlQJCQkJCTIKKyNkZWZpbmUJCU5PT0ZSQU5LX01BU0sJCQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUJCU5PT0ZST1dTX1NISUZUCQkJCQkzCisjZGVmaW5lCQlOT09GUk9XU19NQVNLCQkJCQkweDAwMDAwMDM4CisjZGVmaW5lCQlOT09GQ09MU19TSElGVAkJCQkJNgorI2RlZmluZQkJTk9PRkNPTFNfTUFTSwkJCQkJMHgwMDAwMDBDMAorI2RlZmluZQkJQ0hBTlNJWkVfU0hJRlQJCQkJCTgKKyNkZWZpbmUJCUNIQU5TSVpFX01BU0sJCQkJCTB4MDAwMDAxMDAKKyNkZWZpbmUJCUJVUlNUTEVOR1RIX1NISUZUCQkJCTkKKyNkZWZpbmUJCUJVUlNUTEVOR1RIX01BU0sJCQkJMHgwMDAwMDIwMAorI2RlZmluZQlNQ19WTV9BR1BfVE9QCQkJCQkweDIwMjgKKyNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCisjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKKyNkZWZpbmUJTUNfVk1fRkJfTE9DQVRJT04JCQkJMHgyMDI0CisjZGVmaW5lCU1DX1ZNX01CX0wxX1RMQjBfQ05UTAkJCQkweDIyMzQKKyNkZWZpbmUJTUNfVk1fTUJfTDFfVExCMV9DTlRMCQkJCTB4MjIzOAorI2RlZmluZQlNQ19WTV9NQl9MMV9UTEIyX0NOVEwJCQkJMHgyMjNDCisjZGVmaW5lCU1DX1ZNX01CX0wxX1RMQjNfQ05UTAkJCQkweDIyNDAKKyNkZWZpbmUJCUVOQUJMRV9MMV9UTEIJCQkJCSgxIDw8IDApCisjZGVmaW5lCQlFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORwkJCSgxIDw8IDEpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfUEFfT05MWQkJCSgwIDw8IDMpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfVVNFX1NZU19NQVAJCQkoMSA8PCAzKQorI2RlZmluZQkJU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUwkJCSgyIDw8IDMpCisjZGVmaW5lCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUwkJCSgzIDw8IDMpCisjZGVmaW5lCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVQkoMCA8PCA1KQorI2RlZmluZQkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKHgpCQkJKCh4KTw8MTUpCisjZGVmaW5lCQlFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSh4KQkJCSgoeCk8PDE4KQorI2RlZmluZQlNQ19WTV9NRF9MMV9UTEIwX0NOVEwJCQkJMHgyNjU0CisjZGVmaW5lCU1DX1ZNX01EX0wxX1RMQjFfQ05UTAkJCQkweDI2NTgKKyNkZWZpbmUJTUNfVk1fTURfTDFfVExCMl9DTlRMCQkJCTB4MjY1QworI2RlZmluZQlNQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSCQkweDIwM0MKKyNkZWZpbmUJTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUgkJCTB4MjAzOAorI2RlZmluZQlNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIJCQkweDIwMzQKKworI2RlZmluZQlQQV9DTF9FTkhBTkNFCQkJCQkweDhBMTQKKyNkZWZpbmUJCUNMSVBfVlRYX1JFT1JERVJfRU5BCQkJCSgxIDw8IDApCisjZGVmaW5lCQlOVU1fQ0xJUF9TRVEoeCkJCQkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgUEFfU0NfQUFfQ09ORklHCQkJCQkweDI4QzA0CisjZGVmaW5lIFBBX1NDX0NMSVBSRUNUX1JVTEUJCQkJMHgyODIwQworI2RlZmluZQlQQV9TQ19FREdFUlVMRQkJCQkJMHgyODIzMAorI2RlZmluZQlQQV9TQ19GSUZPX1NJWkUJCQkJCTB4OEJDQworI2RlZmluZQkJU0NfUFJJTV9GSUZPX1NJWkUoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJU0NfSElaX1RJTEVfRklGT19TSVpFKHgpCQkJKCh4KSA8PCAxMikKKyNkZWZpbmUJUEFfU0NfRk9SQ0VfRU9WX01BWF9DTlRTCQkJMHg4QjI0CisjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkJCQkoKHgpPDwwKQorI2RlZmluZQkJRk9SQ0VfRU9WX01BWF9SRVpfQ05UKHgpCQkJKCh4KTw8MTYpCisjZGVmaW5lIFBBX1NDX0xJTkVfU1RJUFBMRQkJCQkweDI4QTBDCisjZGVmaW5lCVBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURQkJCTB4OEIxMAorI2RlZmluZSBQQV9TQ19NT0RFX0NOVEwJCQkJCTB4MjhBNEMKKyNkZWZpbmUJUEFfU0NfTVVMVElfQ0hJUF9DTlRMCQkJCTB4OEIyMAorI2RlZmluZQkJU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHgpCQkJKCh4KSA8PCAyMCkKKworI2RlZmluZQlTQ1JBVENIX1JFRzAJCQkJCTB4ODUwMAorI2RlZmluZQlTQ1JBVENIX1JFRzEJCQkJCTB4ODUwNAorI2RlZmluZQlTQ1JBVENIX1JFRzIJCQkJCTB4ODUwOAorI2RlZmluZQlTQ1JBVENIX1JFRzMJCQkJCTB4ODUwQworI2RlZmluZQlTQ1JBVENIX1JFRzQJCQkJCTB4ODUxMAorI2RlZmluZQlTQ1JBVENIX1JFRzUJCQkJCTB4ODUxNAorI2RlZmluZQlTQ1JBVENIX1JFRzYJCQkJCTB4ODUxOAorI2RlZmluZQlTQ1JBVENIX1JFRzcJCQkJCTB4ODUxQworI2RlZmluZQlTQ1JBVENIX1VNU0sJCQkJCTB4ODU0MAorI2RlZmluZQlTQ1JBVENIX0FERFIJCQkJCTB4ODU0NAorCisjZGVmaW5lCVNNWF9EQ19DVEwwCQkJCQkweEEwMjAKKyNkZWZpbmUJCVVTRV9IQVNIX0ZVTkNUSU9OCQkJCSgxIDw8IDApCisjZGVmaW5lCQlDQUNIRV9ERVBUSCh4KQkJCQkJKCh4KSA8PCAxKQorI2RlZmluZQkJRkxVU0hfQUxMX09OX0VWRU5UCQkJCSgxIDw8IDEwKQorI2RlZmluZQkJU1RBTExfT05fRVZFTlQJCQkJCSgxIDw8IDExKQorI2RlZmluZQlTTVhfRVZFTlRfQ1RMCQkJCQkweEEwMkMKKyNkZWZpbmUJCUVTX0ZMVVNIX0NUTCh4KQkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJR1NfRkxVU0hfQ1RMKHgpCQkJCQkoKHgpIDw8IDMpCisjZGVmaW5lCQlBQ0tfRkxVU0hfQ1RMKHgpCQkJCSgoeCkgPDwgNikKKyNkZWZpbmUJCVNZTkNfRkxVU0hfQ1RMCQkJCQkoMSA8PCA4KQorCisjZGVmaW5lCVNQSV9DT05GSUdfQ05UTAkJCQkJMHg5MTAwCisjZGVmaW5lCQlHUFJfV1JJVEVfUFJJT1JJVFkoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJRElTQUJMRV9JTlRFUlBfMQkJCQkoMSA8PCA1KQorI2RlZmluZQlTUElfQ09ORklHX0NOVExfMQkJCQkweDkxM0MKKyNkZWZpbmUJCVZUWF9ET05FX0RFTEFZKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCUlOVEVSUF9PTkVfUFJJTV9QRVJfUk9XCQkJCSgxIDw8IDQpCisjZGVmaW5lCVNQSV9JTlBVVF9aCQkJCQkweDI4NkQ4CisjZGVmaW5lCVNQSV9QU19JTl9DT05UUk9MXzAJCQkJMHgyODZDQworI2RlZmluZQkJTlVNX0lOVEVSUCh4KQkJCQkJKCh4KTw8MCkKKyNkZWZpbmUJCVBPU0lUSU9OX0VOQQkJCQkJKDE8PDgpCisjZGVmaW5lCQlQT1NJVElPTl9DRU5UUk9JRAkJCQkoMTw8OSkKKyNkZWZpbmUJCVBPU0lUSU9OX0FERFIoeCkJCQkJKCh4KTw8MTApCisjZGVmaW5lCQlQQVJBTV9HRU4oeCkJCQkJCSgoeCk8PDE1KQorI2RlZmluZQkJUEFSQU1fR0VOX0FERFIoeCkJCQkJKCh4KTw8MTkpCisjZGVmaW5lCQlCQVJZQ19TQU1QTEVfQ05UTCh4KQkJCQkoKHgpPDwyNikKKyNkZWZpbmUJCVBFUlNQX0dSQURJRU5UX0VOQQkJCQkoMTw8MjgpCisjZGVmaW5lCQlMSU5FQVJfR1JBRElFTlRfRU5BCQkJCSgxPDwyOSkKKyNkZWZpbmUJCVBPU0lUSU9OX1NBTVBMRQkJCQkJKDE8PDMwKQorI2RlZmluZQkJQkFSWUNfQVRfU0FNUExFX0VOQQkJCQkoMTw8MzEpCisKKyNkZWZpbmUJU1FfQ09ORklHCQkJCQkweDhDMDAKKyNkZWZpbmUJCVZDX0VOQUJMRQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUJCUVYUE9SVF9TUkNfQwkJCQkJKDEgPDwgMSkKKyNkZWZpbmUJCURYOV9DT05TVFMJCQkJCSgxIDw8IDIpCisjZGVmaW5lCQlBTFVfSU5TVF9QUkVGRVJfVkVDVE9SCQkJCSgxIDw8IDMpCisjZGVmaW5lCQlEWDEwX0NMQU1QCQkJCQkoMSA8PCA0KQorI2RlZmluZQkJQ0xBVVNFX1NFUV9QUklPKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCVBTX1BSSU8oeCkJCQkJCSgoeCkgPDwgMjQpCisjZGVmaW5lCQlWU19QUklPKHgpCQkJCQkoKHgpIDw8IDI2KQorI2RlZmluZQkJR1NfUFJJTyh4KQkJCQkJKCh4KSA8PCAyOCkKKyNkZWZpbmUJU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMAkJCTB4OERCMAorI2RlZmluZQkJU0lNREFfUklORzAoeCkJCQkJCSgoeCk8PDApCisjZGVmaW5lCQlTSU1EQV9SSU5HMSh4KQkJCQkJKCh4KTw8OCkKKyNkZWZpbmUJCVNJTURCX1JJTkcwKHgpCQkJCQkoKHgpPDwxNikKKyNkZWZpbmUJCVNJTURCX1JJTkcxKHgpCQkJCQkoKHgpPDwyNCkKKyNkZWZpbmUJU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMQkJCTB4OERCNAorI2RlZmluZQlTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8yCQkJMHg4REI4CisjZGVmaW5lCVNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzMJCQkweDhEQkMKKyNkZWZpbmUJU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNAkJCTB4OERDMAorI2RlZmluZQlTUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl81CQkJMHg4REM0CisjZGVmaW5lCVNRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzYJCQkweDhEQzgKKyNkZWZpbmUJU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNwkJCTB4OERDQworI2RlZmluZQkJRVNfUFJJTyh4KQkJCQkJKCh4KSA8PCAzMCkKKyNkZWZpbmUJU1FfR1BSX1JFU09VUkNFX01HTVRfMQkJCQkweDhDMDQKKyNkZWZpbmUJCU5VTV9QU19HUFJTKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlOVU1fVlNfR1BSUyh4KQkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCURZTl9HUFJfRU5BQkxFCQkJCQkoMSA8PCAyNykKKyNkZWZpbmUJCU5VTV9DTEFVU0VfVEVNUF9HUFJTKHgpCQkJCSgoeCkgPDwgMjgpCisjZGVmaW5lCVNRX0dQUl9SRVNPVVJDRV9NR01UXzIJCQkJMHg4QzA4CisjZGVmaW5lCQlOVU1fR1NfR1BSUyh4KQkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJTlVNX0VTX0dQUlMoeCkJCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCVNRX01TX0ZJRk9fU0laRVMJCQkJMHg4Q0YwCisjZGVmaW5lCQlDQUNIRV9GSUZPX1NJWkUoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJRkVUQ0hfRklGT19ISVdBVEVSKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCURPTkVfRklGT19ISVdBVEVSKHgpCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCQlBTFVfVVBEQVRFX0ZJRk9fSElXQVRFUih4KQkJCSgoeCkgPDwgMjQpCisjZGVmaW5lCVNRX1NUQUNLX1JFU09VUkNFX01HTVRfMQkJCTB4OEMxMAorI2RlZmluZQkJTlVNX1BTX1NUQUNLX0VOVFJJRVMoeCkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJTlVNX1ZTX1NUQUNLX0VOVFJJRVMoeCkJCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yCQkJMHg4QzE0CisjZGVmaW5lCQlOVU1fR1NfU1RBQ0tfRU5UUklFUyh4KQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlOVU1fRVNfU1RBQ0tfRU5UUklFUyh4KQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQlTUV9USFJFQURfUkVTT1VSQ0VfTUdNVAkJCQkweDhDMEMKKyNkZWZpbmUJCU5VTV9QU19USFJFQURTKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCU5VTV9WU19USFJFQURTKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCU5VTV9HU19USFJFQURTKHgpCQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lCQlOVU1fRVNfVEhSRUFEUyh4KQkJCQkoKHgpIDw8IDI0KQorCisjZGVmaW5lCVNYX0RFQlVHXzEJCQkJCTB4OTA1OAorI2RlZmluZQkJRU5BQkxFX05FV19TTVhfQUREUkVTUwkJCQkoMSA8PCAxNikKKyNkZWZpbmUJU1hfRVhQT1JUX0JVRkZFUl9TSVpFUwkJCQkweDkwMEMKKyNkZWZpbmUJCUNPTE9SX0JVRkZFUl9TSVpFKHgpCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCVBPU0lUSU9OX0JVRkZFUl9TSVpFKHgpCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCVNNWF9CVUZGRVJfU0laRSh4KQkJCQkoKHgpIDw8IDE2KQorI2RlZmluZQlTWF9NSVNDCQkJCQkJMHgyODM1MAorCisjZGVmaW5lCVRBX0NOVExfQVVYCQkJCQkweDk1MDgKKyNkZWZpbmUJCURJU0FCTEVfQ1VCRV9XUkFQCQkJCSgxIDw8IDApCisjZGVmaW5lCQlESVNBQkxFX0NVQkVfQU5JU08JCQkJKDEgPDwgMSkKKyNkZWZpbmUJCVNZTkNfR1JBRElFTlQJCQkJCSgxIDw8IDI0KQorI2RlZmluZQkJU1lOQ19XQUxLRVIJCQkJCSgxIDw8IDI1KQorI2RlZmluZQkJU1lOQ19BTElHTkVSCQkJCQkoMSA8PCAyNikKKyNkZWZpbmUJCUJJTElORUFSX1BSRUNJU0lPTl82X0JJVAkJCSgwIDw8IDMxKQorI2RlZmluZQkJQklMSU5FQVJfUFJFQ0lTSU9OXzhfQklUCQkJKDEgPDwgMzEpCisKKyNkZWZpbmUJVENQX0NOVEwJCQkJCTB4OTYxMAorCisjZGVmaW5lCVZHVF9DQUNIRV9JTlZBTElEQVRJT04JCQkJMHg4OEM0CisjZGVmaW5lCQlDQUNIRV9JTlZBTElEQVRJT04oeCkJCQkJKCh4KTw8MCkKKyNkZWZpbmUJCQlWQ19PTkxZCQkJCQkJMAorI2RlZmluZQkJCVRDX09OTFkJCQkJCQkxCisjZGVmaW5lCQkJVkNfQU5EX1RDCQkJCQkyCisjZGVmaW5lCQlBVVRPX0lOVkxEX0VOKHgpCQkJCSgoeCkgPDwgNikKKyNkZWZpbmUJCQlOT19BVVRPCQkJCQkJMAorI2RlZmluZQkJCUVTX0FVVE8JCQkJCQkxCisjZGVmaW5lCQkJR1NfQVVUTwkJCQkJCTIKKyNkZWZpbmUJCQlFU19BTkRfR1NfQVVUTwkJCQkJMworI2RlZmluZQlWR1RfRVNfUEVSX0dTCQkJCQkweDg4Q0MKKyNkZWZpbmUJVkdUX0dTX1BFUl9FUwkJCQkJMHg4OEM4CisjZGVmaW5lCVZHVF9HU19QRVJfVlMJCQkJCTB4ODhFOAorI2RlZmluZQlWR1RfR1NfVkVSVEVYX1JFVVNFCQkJCTB4ODhENAorI2RlZmluZQlWR1RfTlVNX0lOU1RBTkNFUwkJCQkweDg5NzQKKyNkZWZpbmUJVkdUX09VVF9ERUFMTE9DX0NOVEwJCQkJMHgyOEM1QworI2RlZmluZQkJREVBTExPQ19ESVNUX01BU0sJCQkJMHgwMDAwMDA3RgorI2RlZmluZQlWR1RfU1RSTU9VVF9FTgkJCQkJMHgyOEFCMAorI2RlZmluZQlWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwJCQkweDI4QzU4CisjZGVmaW5lCQlWVFhfUkVVU0VfREVQVEhfTUFTSwkJCQkweDAwMDAwMEZGCisKKyNkZWZpbmUgVk1fQ09OVEVYVDBfQ05UTAkJCQkweDE0MTAKKyNkZWZpbmUJCUVOQUJMRV9DT05URVhUCQkJCQkoMSA8PCAwKQorI2RlZmluZQkJUEFHRV9UQUJMRV9ERVBUSCh4KQkJCQkoKCh4KSAmIDMpIDw8IDEpCisjZGVmaW5lCQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxUCQkoMSA8PCA0KQorI2RlZmluZQlWTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUgkJMHgxNTNDCisjZGVmaW5lCVZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIJCQkweDE1N0MKKyNkZWZpbmUJVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9TVEFSVF9BRERSCQkweDE1NUMKKyNkZWZpbmUgVk1fQ09OVEVYVDBfUFJPVEVDVElPTl9GQVVMVF9ERUZBVUxUX0FERFIJMHgxNTE4CisjZGVmaW5lIFZNX0wyX0NOVEwJCQkJCTB4MTQwMAorI2RlZmluZQkJRU5BQkxFX0wyX0NBQ0hFCQkJCQkoMSA8PCAwKQorI2RlZmluZQkJRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcJCQkoMSA8PCAxKQorI2RlZmluZQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFCQkoMSA8PCA5KQorI2RlZmluZQkJRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkJCQkoKCh4KSAmIDcpIDw8IDE0KQorI2RlZmluZSBWTV9MMl9DTlRMMgkJCQkJMHgxNDA0CisjZGVmaW5lCQlJTlZBTElEQVRFX0FMTF9MMV9UTEJTCQkJCSgxIDw8IDApCisjZGVmaW5lCQlJTlZBTElEQVRFX0wyX0NBQ0hFCQkJCSgxIDw8IDEpCisjZGVmaW5lIFZNX0wyX0NOVEwzCQkJCQkweDE0MDgKKyNkZWZpbmUJCUJBTktfU0VMRUNUKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlDQUNIRV9VUERBVEVfTU9ERSh4KQkJCQkoKHgpIDw8IDYpCisjZGVmaW5lCVZNX0wyX1NUQVRVUwkJCQkJMHgxNDBDCisjZGVmaW5lCQlMMl9CVVNZCQkJCQkJKDEgPDwgMCkKKworI2RlZmluZQlXQUlUX1VOVElMCQkJCQkweDgwNDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwppbmRleCBjMmIwZDcxLi44N2MwNjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKQEAgLTQ0LDYgKzQ0LDM5IEBACiAKIHN0YXRpYyBpbnQgdHRtX2JvX3NldHVwX3ZtKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOwogc3RhdGljIGludCB0dG1fYm9fc3dhcG91dChzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgKnNocmluayk7CitzdGF0aWMgdm9pZCB0dG1fYm9fZ2xvYmFsX2tvYmpfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHR0bV9ib19jb3VudCA9IHsKKwkubmFtZSA9ICJib19jb3VudCIsCisJLm1vZGUgPSBTX0lSVUdPCit9OworCitzdGF0aWMgc3NpemVfdCB0dG1fYm9fZ2xvYmFsX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJCSAgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0KKwkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB0dG1fYm9fZ2xvYmFsLCBrb2JqKTsKKworCXJldHVybiBzbnByaW50ZihidWZmZXIsIFBBR0VfU0laRSwgIiVsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKSBhdG9taWNfcmVhZCgmZ2xvYi0+Ym9fY291bnQpKTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnR0bV9ib19nbG9iYWxfYXR0cnNbXSA9IHsKKwkmdHRtX2JvX2NvdW50LAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHR0bV9ib19nbG9iYWxfb3BzID0geworCS5zaG93ID0gJnR0bV9ib19nbG9iYWxfc2hvdworfTsKKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgdHRtX2JvX2dsb2Jfa29ial90eXBlICA9IHsKKwkucmVsZWFzZSA9ICZ0dG1fYm9fZ2xvYmFsX2tvYmpfcmVsZWFzZSwKKwkuc3lzZnNfb3BzID0gJnR0bV9ib19nbG9iYWxfb3BzLAorCS5kZWZhdWx0X2F0dHJzID0gdHRtX2JvX2dsb2JhbF9hdHRycworfTsKKwogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHR0bV9ib190eXBlX2ZsYWdzKHVuc2lnbmVkIHR5cGUpCiB7CkBAIC02NiwxMCArOTksMTEgQEAKIAogCWlmIChiby0+dHRtKQogCQl0dG1fdHRfZGVzdHJveShiby0+dHRtKTsKKwlhdG9taWNfZGVjKCZiby0+Z2xvYi0+Ym9fY291bnQpOwogCWlmIChiby0+ZGVzdHJveSkKIAkJYm8tPmRlc3Ryb3koYm8pOwogCWVsc2UgewotCQl0dG1fbWVtX2dsb2JhbF9mcmVlKGJkZXYtPm1lbV9nbG9iLCBiby0+YWNjX3NpemUsIGZhbHNlKTsKKwkJdHRtX21lbV9nbG9iYWxfZnJlZShiZGV2LT5nbG9iLT5tZW1fZ2xvYiwgYm8tPmFjY19zaXplKTsKIAkJa2ZyZWUoYm8pOwogCX0KIH0KQEAgLTEwNiw3ICsxNDAsNyBAQAogCQlrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7CiAKIAkJaWYgKGJvLT50dG0gIT0gTlVMTCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYm8tPnN3YXAsICZiZGV2LT5zd2FwX2xydSk7CisJCQlsaXN0X2FkZF90YWlsKCZiby0+c3dhcCwgJmJvLT5nbG9iLT5zd2FwX2xydSk7CiAJCQlrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7CiAJCX0KIAl9CkBAIC0xNDEsNyArMTc1LDcgQEAKIAkJCSAgYm9vbCBpbnRlcnJ1cHRpYmxlLAogCQkJICBib29sIG5vX3dhaXQsIGJvb2wgdXNlX3NlcXVlbmNlLCB1aW50MzJfdCBzZXF1ZW5jZSkKIHsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAJaW50IHJldDsKIAogCXdoaWxlICh1bmxpa2VseShhdG9taWNfY21weGNoZygmYm8tPnJlc2VydmVkLCAwLCAxKSAhPSAwKSkgewpAQCAtMTUzLDkgKzE4Nyw5IEBACiAJCWlmIChub193YWl0KQogCQkJcmV0dXJuIC1FQlVTWTsKIAotCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlyZXQgPSB0dG1fYm9fd2FpdF91bnJlc2VydmVkKGJvLCBpbnRlcnJ1cHRpYmxlKTsKLQkJc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJcmV0dXJuIHJldDsKQEAgLTE4MSwxNiArMjE1LDE2IEBACiAJCSAgIGJvb2wgaW50ZXJydXB0aWJsZSwKIAkJICAgYm9vbCBub193YWl0LCBib29sIHVzZV9zZXF1ZW5jZSwgdWludDMyX3Qgc2VxdWVuY2UpCiB7Ci0Jc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSBiby0+YmRldjsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJvLT5nbG9iOwogCWludCBwdXRfY291bnQgPSAwOwogCWludCByZXQ7CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAlyZXQgPSB0dG1fYm9fcmVzZXJ2ZV9sb2NrZWQoYm8sIGludGVycnVwdGlibGUsIG5vX3dhaXQsIHVzZV9zZXF1ZW5jZSwKIAkJCQkgICAgc2VxdWVuY2UpOwogCWlmIChsaWtlbHkocmV0ID09IDApKQogCQlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKLQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAKIAl3aGlsZSAocHV0X2NvdW50LS0pCiAJCWtyZWZfcHV0KCZiby0+bGlzdF9rcmVmLCB0dG1fYm9fcmVmX2J1Zyk7CkBAIC0yMDAsMTMgKzIzNCwxMyBAQAogCiB2b2lkIHR0bV9ib191bnJlc2VydmUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKIHsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAl0dG1fYm9fYWRkX3RvX2xydShibyk7CiAJYXRvbWljX3NldCgmYm8tPnJlc2VydmVkLCAwKTsKIAl3YWtlX3VwX2FsbCgmYm8tPmV2ZW50X3F1ZXVlKTsKLQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9ib191bnJlc2VydmUpOwogCkBAIC0yMTcsNiArMjUxLDcgQEAKIHN0YXRpYyBpbnQgdHRtX2JvX2FkZF90dG0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgYm9vbCB6ZXJvX2FsbG9jKQogewogCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKIAlpbnQgcmV0ID0gMDsKIAl1aW50MzJfdCBwYWdlX2ZsYWdzID0gMDsKIApAQCAtMjMyLDE0ICsyNjcsMTQgQEAKIAkJCXBhZ2VfZmxhZ3MgfD0gVFRNX1BBR0VfRkxBR19aRVJPX0FMTE9DOwogCWNhc2UgdHRtX2JvX3R5cGVfa2VybmVsOgogCQliby0+dHRtID0gdHRtX3R0X2NyZWF0ZShiZGV2LCBiby0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCi0JCQkJCXBhZ2VfZmxhZ3MsIGJkZXYtPmR1bW15X3JlYWRfcGFnZSk7CisJCQkJCXBhZ2VfZmxhZ3MsIGdsb2ItPmR1bW15X3JlYWRfcGFnZSk7CiAJCWlmICh1bmxpa2VseShiby0+dHRtID09IE5VTEwpKQogCQkJcmV0ID0gLUVOT01FTTsKIAkJYnJlYWs7CiAJY2FzZSB0dG1fYm9fdHlwZV91c2VyOgogCQliby0+dHRtID0gdHRtX3R0X2NyZWF0ZShiZGV2LCBiby0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCiAJCQkJCXBhZ2VfZmxhZ3MgfCBUVE1fUEFHRV9GTEFHX1VTRVIsCi0JCQkJCWJkZXYtPmR1bW15X3JlYWRfcGFnZSk7CisJCQkJCWdsb2ItPmR1bW15X3JlYWRfcGFnZSk7CiAJCWlmICh1bmxpa2VseShiby0+dHRtID09IE5VTEwpKQogCQkJcmV0ID0gLUVOT01FTTsKIAkJYnJlYWs7CkBAIC0zNjAsNiArMzk1LDcgQEAKIHN0YXRpYyBpbnQgdHRtX2JvX2NsZWFudXBfcmVmcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBib29sIHJlbW92ZV9hbGwpCiB7CiAJc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSBiby0+YmRldjsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJvLT5nbG9iOwogCXN0cnVjdCB0dG1fYm9fZHJpdmVyICpkcml2ZXIgPSBiZGV2LT5kcml2ZXI7CiAJaW50IHJldDsKIApAQCAtMzcxLDcgKzQwNyw3IEBACiAKIAkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKIAotCQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCXJldCA9IHR0bV9ib19yZXNlcnZlX2xvY2tlZChibywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7CiAJCUJVR19PTihyZXQpOwogCQlpZiAoYm8tPnR0bSkKQEAgLTM4Niw3ICs0MjIsNyBAQAogCQkJYm8tPm1lbS5tbV9ub2RlID0gTlVMTDsKIAkJfQogCQlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAogCQlhdG9taWNfc2V0KCZiby0+cmVzZXJ2ZWQsIDApOwogCkBAIC0zOTYsMTQgKzQzMiwxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmYm8tPmRkZXN0cm95KSkgewogCQl2b2lkICpzeW5jX29iaiA9IGJvLT5zeW5jX29iajsKIAkJdm9pZCAqc3luY19vYmpfYXJnID0gYm8tPnN5bmNfb2JqX2FyZzsKIAogCQlrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7CiAJCWxpc3RfYWRkX3RhaWwoJmJvLT5kZGVzdHJveSwgJmJkZXYtPmRkZXN0cm95KTsKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJc3Bpbl91bmxvY2soJmJvLT5sb2NrKTsKIAogCQlpZiAoc3luY19vYmopCkBAIC00MTMsNyArNDQ5LDcgQEAKIAkJcmV0ID0gMDsKIAogCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CiAJCXJldCA9IC1FQlVTWTsKIAl9CkBAIC00MjgsMTEgKzQ2NCwxMiBAQAogCiBzdGF0aWMgaW50IHR0bV9ib19kZWxheWVkX2RlbGV0ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwgYm9vbCByZW1vdmVfYWxsKQogeworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYmRldi0+Z2xvYjsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmVudHJ5LCAqbmVudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICpuZXh0OwogCWludCByZXQ7CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgbmV4dCwgJmJkZXYtPmRkZXN0cm95KSB7CiAJCWVudHJ5ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QsIGRkZXN0cm95KTsKIAkJbmVudHJ5ID0gTlVMTDsKQEAgLTQ0OSwxNiArNDg2LDE2IEBACiAJCX0KIAkJa3JlZl9nZXQoJmVudHJ5LT5saXN0X2tyZWYpOwogCi0JCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCXJldCA9IHR0bV9ib19jbGVhbnVwX3JlZnMoZW50cnksIHJlbW92ZV9hbGwpOwogCQlrcmVmX3B1dCgmZW50cnktPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7CiAKLQkJc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlpZiAobmVudHJ5KSB7CiAJCQlib29sIG5leHRfb25saXN0ID0gIWxpc3RfZW1wdHkobmV4dCk7Ci0JCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJCWtyZWZfcHV0KCZuZW50cnktPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7Ci0JCQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQkJLyoKIAkJCSAqIFNvbWVvbmUgbWlnaHQgaGF2ZSByYWNlZCB1cyBhbmQgcmVtb3ZlZCB0aGUKIAkJCSAqIG5leHQgZW50cnkgZnJvbSB0aGUgbGlzdC4gV2UgZG9uJ3QgYm90aGVyIHJlc3RhcnRpbmcKQEAgLTQ3Miw3ICs1MDksNyBAQAogCQkJYnJlYWs7CiAJfQogCXJldCA9ICFsaXN0X2VtcHR5KCZiZGV2LT5kZGVzdHJveSk7Ci0Jc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUyMiw2ICs1NTksNyBAQAogewogCWludCByZXQgPSAwOwogCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKIAlzdHJ1Y3QgdHRtX21lbV9yZWcgZXZpY3RfbWVtOwogCXVpbnQzMl90IHByb3Bvc2VkX3BsYWNlbWVudDsKIApAQCAtNTcwLDEyICs2MDgsMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJaWYgKGV2aWN0X21lbS5tbV9ub2RlKSB7CiAJCWRybV9tbV9wdXRfYmxvY2soZXZpY3RfbWVtLm1tX25vZGUpOwogCQlldmljdF9tZW0ubW1fbm9kZSA9IE5VTEw7CiAJfQotCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAliby0+ZXZpY3RlZCA9IHRydWU7CiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTU5MCw2ICs2MjgsNyBAQAogCQkJCSAgdWludDMyX3QgbWVtX3R5cGUsCiAJCQkJICBib29sIGludGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdCkKIHsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJkZXYtPmdsb2I7CiAJc3RydWN0IGRybV9tbV9ub2RlICpub2RlOwogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqZW50cnk7CiAJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbV90eXBlXTsKQEAgLTYwMyw3ICs2NDIsNyBAQAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAlkbyB7CiAJCW5vZGUgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJm1hbi0+bWFuYWdlciwgbnVtX3BhZ2VzLAogCQkJCQkgIG1lbS0+cGFnZV9hbGlnbm1lbnQsIDEpOwpAQCAtNjI0LDcgKzY2Myw3IEBACiAJCWlmIChsaWtlbHkocmV0ID09IDApKQogCQkJcHV0X2NvdW50ID0gdHRtX2JvX2RlbF9mcm9tX2xydShlbnRyeSk7CiAKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQkJcmV0dXJuIHJldDsKQEAgLTY0MCwyMSArNjc5LDIxIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAl9IHdoaWxlICgxKTsKIAogCWlmICghbm9kZSkgewotCQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlub2RlID0gZHJtX21tX2dldF9ibG9ja19hdG9taWMobm9kZSwgbnVtX3BhZ2VzLCBtZW0tPnBhZ2VfYWxpZ25tZW50KTsKIAlpZiAodW5saWtlbHkoIW5vZGUpKSB7Ci0JCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCWdvdG8gcmV0cnlfcHJlX2dldDsKIAl9CiAKLQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJbWVtLT5tbV9ub2RlID0gbm9kZTsKIAltZW0tPm1lbV90eXBlID0gbWVtX3R5cGU7CiAJcmV0dXJuIDA7CkBAIC03MjMsNiArNzYyLDcgQEAKIAkJICAgICBib29sIGludGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdCkKIHsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW47CiAKIAl1aW50MzJfdCBudW1fcHJpb3MgPSBiZGV2LT5kcml2ZXItPm51bV9tZW1fdHlwZV9wcmlvOwpAQCAtNzYyLDIwICs4MDIsMjAgQEAKIAkJCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCQkJcmV0dXJuIHJldDsKIAotCQkJCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCQkJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQkJCW5vZGUgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJm1hbi0+bWFuYWdlciwKIAkJCQkJCQkgIG1lbS0+bnVtX3BhZ2VzLAogCQkJCQkJCSAgbWVtLT5wYWdlX2FsaWdubWVudCwKIAkJCQkJCQkgIDEpOwogCQkJCWlmICh1bmxpa2VseSghbm9kZSkpIHsKLQkJCQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCW5vZGUgPSBkcm1fbW1fZ2V0X2Jsb2NrX2F0b21pYyhub2RlLAogCQkJCQkJCSAgICAgICBtZW0tPm51bV9wYWdlcywKIAkJCQkJCQkgICAgICAgbWVtLT4KIAkJCQkJCQkgICAgICAgcGFnZV9hbGlnbm1lbnQpOwotCQkJCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAkJCX0gd2hpbGUgKCFub2RlKTsKIAkJfQogCQlpZiAobm9kZSkKQEAgLTg0OCw3ICs4ODgsNyBAQAogCQkgICAgICAgdWludDMyX3QgcHJvcG9zZWRfcGxhY2VtZW50LAogCQkgICAgICAgYm9vbCBpbnRlcnJ1cHRpYmxlLCBib29sIG5vX3dhaXQpCiB7Ci0Jc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSBiby0+YmRldjsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJvLT5nbG9iOwogCWludCByZXQgPSAwOwogCXN0cnVjdCB0dG1fbWVtX3JlZyBtZW07CiAKQEAgLTg4NCw5ICs5MjQsOSBAQAogCiBvdXRfdW5sb2NrOgogCWlmIChyZXQgJiYgbWVtLm1tX25vZGUpIHsKLQkJc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlkcm1fbW1fcHV0X2Jsb2NrKG1lbS5tbV9ub2RlKTsKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMjIsNiArMTA2Miw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmJvLT5kZGVzdHJveSk7CiAJSU5JVF9MSVNUX0hFQUQoJmJvLT5zd2FwKTsKIAliby0+YmRldiA9IGJkZXY7CisJYm8tPmdsb2IgPSBiZGV2LT5nbG9iOwogCWJvLT50eXBlID0gdHlwZTsKIAliby0+bnVtX3BhZ2VzID0gbnVtX3BhZ2VzOwogCWJvLT5tZW0ubWVtX3R5cGUgPSBUVE1fUExfU1lTVEVNOwpAQCAtMTAzNCw2ICsxMDc1LDcgQEAKIAliby0+c2VxX3ZhbGlkID0gZmFsc2U7CiAJYm8tPnBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlID0gcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2U7CiAJYm8tPmFjY19zaXplID0gYWNjX3NpemU7CisJYXRvbWljX2luYygmYm8tPmdsb2ItPmJvX2NvdW50KTsKIAogCXJldCA9IHR0bV9ib19jaGVja19wbGFjZW1lbnQoYm8sIGZsYWdzLCAwVUxMKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQpAQCAtMTA3MiwxMyArMTExNCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTCh0dG1fYnVmZmVyX29iamVjdF9pbml0KTsKIAotc3RhdGljIGlubGluZSBzaXplX3QgdHRtX2JvX3NpemUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCitzdGF0aWMgaW5saW5lIHNpemVfdCB0dG1fYm9fc2l6ZShzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiwKIAkJCQkgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCiB7CiAJc2l6ZV90IHBhZ2VfYXJyYXlfc2l6ZSA9IChudW1fcGFnZXMgKiBzaXplb2Yodm9pZCAqKSArIFBBR0VfU0laRSAtIDEpICYKIAkgICAgUEFHRV9NQVNLOwogCi0JcmV0dXJuIGJkZXYtPnR0bV9ib19zaXplICsgMiAqIHBhZ2VfYXJyYXlfc2l6ZTsKKwlyZXR1cm4gZ2xvYi0+dHRtX2JvX3NpemUgKyAyICogcGFnZV9hcnJheV9zaXplOwogfQogCiBpbnQgdHRtX2J1ZmZlcl9vYmplY3RfY3JlYXRlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LApAQCAtMTA5MywxOCArMTEzNSwxOCBAQAogewogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87CiAJaW50IHJldDsKLQlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iID0gYmRldi0+bWVtX2dsb2I7CisJc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYiA9IGJkZXYtPmdsb2ItPm1lbV9nbG9iOwogCiAJc2l6ZV90IGFjY19zaXplID0KLQkgICAgdHRtX2JvX3NpemUoYmRldiwgKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUKTsKLQlyZXQgPSB0dG1fbWVtX2dsb2JhbF9hbGxvYyhtZW1fZ2xvYiwgYWNjX3NpemUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCSAgICB0dG1fYm9fc2l6ZShiZGV2LT5nbG9iLCAoc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpOworCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKG1lbV9nbG9iLCBhY2Nfc2l6ZSwgZmFsc2UsIGZhbHNlKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwogCiAJYm8gPSBremFsbG9jKHNpemVvZigqYm8pLCBHRlBfS0VSTkVMKTsKIAogCWlmICh1bmxpa2VseShibyA9PSBOVUxMKSkgewotCQl0dG1fbWVtX2dsb2JhbF9mcmVlKG1lbV9nbG9iLCBhY2Nfc2l6ZSwgZmFsc2UpOworCQl0dG1fbWVtX2dsb2JhbF9mcmVlKG1lbV9nbG9iLCBhY2Nfc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTE1MCw2ICsxMTkyLDcgQEAKIAkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJCSAgIHVuc2lnbmVkIG1lbV90eXBlLCBib29sIGFsbG93X2Vycm9ycykKIHsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJkZXYtPmdsb2I7CiAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICplbnRyeTsKIAlpbnQgcmV0OwogCWludCBwdXRfY291bnQ7CkBAIC0xMTU4LDMwICsxMjAxLDMxIEBACiAJICogQ2FuJ3QgdXNlIHN0YW5kYXJkIGxpc3QgdHJhdmVyc2FsIHNpbmNlIHdlJ3JlIHVubG9ja2luZy4KIAkgKi8KIAotCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QsIGxydSk7CiAJCWtyZWZfZ2V0KCZlbnRyeS0+bGlzdF9rcmVmKTsKIAkJcmV0ID0gdHRtX2JvX3Jlc2VydmVfbG9ja2VkKGVudHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKIAkJcHV0X2NvdW50ID0gdHRtX2JvX2RlbF9mcm9tX2xydShlbnRyeSk7Ci0JCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCXdoaWxlIChwdXRfY291bnQtLSkKIAkJCWtyZWZfcHV0KCZlbnRyeS0+bGlzdF9rcmVmLCB0dG1fYm9fcmVmX2J1Zyk7CiAJCUJVR19PTihyZXQpOwogCQlyZXQgPSB0dG1fYm9fbGVhdmVfbGlzdChlbnRyeSwgbWVtX3R5cGUsIGFsbG93X2Vycm9ycyk7CiAJCXR0bV9ib191bnJlc2VydmUoZW50cnkpOwogCQlrcmVmX3B1dCgmZW50cnktPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7Ci0JCXNwaW5fbG9jaygmYmRldi0+bHJ1X2xvY2spOworCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAl9CiAKLQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50IHR0bV9ib19jbGVhbl9tbShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwgdW5zaWduZWQgbWVtX3R5cGUpCiB7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiZGV2LT5nbG9iOwogCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuOwogCWludCByZXQgPSAtRUlOVkFMOwogCkBAIC0xMjA0LDEzICsxMjQ4LDEzIEBACiAJaWYgKG1lbV90eXBlID4gMCkgewogCQl0dG1fYm9fZm9yY2VfbGlzdF9jbGVhbihiZGV2LCAmbWFuLT5scnUsIG1lbV90eXBlLCBmYWxzZSk7CiAKLQkJc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQlpZiAoZHJtX21tX2NsZWFuKCZtYW4tPm1hbmFnZXIpKQogCQkJZHJtX21tX3Rha2Vkb3duKCZtYW4tPm1hbmFnZXIpOwogCQllbHNlCiAJCQlyZXQgPSAtRUJVU1k7CiAKLQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTI4NCwxMSArMTMyOCw4MiBAQAogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9faW5pdF9tbSk7CiAKK3N0YXRpYyB2b2lkIHR0bV9ib19nbG9iYWxfa29ial9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0KKwkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB0dG1fYm9fZ2xvYmFsLCBrb2JqKTsKKworCXR0bV9tZW1fdW5yZWdpc3Rlcl9zaHJpbmsoZ2xvYi0+bWVtX2dsb2IsICZnbG9iLT5zaHJpbmspOworCV9fZnJlZV9wYWdlKGdsb2ItPmR1bW15X3JlYWRfcGFnZSk7CisJa2ZyZWUoZ2xvYik7Cit9CisKK3ZvaWQgdHRtX2JvX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQoreworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gcmVmLT5vYmplY3Q7CisKKwlrb2JqZWN0X2RlbCgmZ2xvYi0+a29iaik7CisJa29iamVjdF9wdXQoJmdsb2ItPmtvYmopOworfQorRVhQT1JUX1NZTUJPTCh0dG1fYm9fZ2xvYmFsX3JlbGVhc2UpOworCitpbnQgdHRtX2JvX2dsb2JhbF9pbml0KHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQoreworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsX3JlZiAqYm9fcmVmID0KKwkJY29udGFpbmVyX29mKHJlZiwgc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmLCByZWYpOworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gcmVmLT5vYmplY3Q7CisJaW50IHJldDsKKworCW11dGV4X2luaXQoJmdsb2ItPmRldmljZV9saXN0X211dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmZ2xvYi0+bHJ1X2xvY2spOworCWdsb2ItPm1lbV9nbG9iID0gYm9fcmVmLT5tZW1fZ2xvYjsKKwlnbG9iLT5kdW1teV9yZWFkX3BhZ2UgPSBhbGxvY19wYWdlKF9fR0ZQX1pFUk8gfCBHRlBfRE1BMzIpOworCisJaWYgKHVubGlrZWx5KGdsb2ItPmR1bW15X3JlYWRfcGFnZSA9PSBOVUxMKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ub19kcnA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmdsb2ItPnN3YXBfbHJ1KTsKKwlJTklUX0xJU1RfSEVBRCgmZ2xvYi0+ZGV2aWNlX2xpc3QpOworCisJdHRtX21lbV9pbml0X3NocmluaygmZ2xvYi0+c2hyaW5rLCB0dG1fYm9fc3dhcG91dCk7CisJcmV0ID0gdHRtX21lbV9yZWdpc3Rlcl9zaHJpbmsoZ2xvYi0+bWVtX2dsb2IsICZnbG9iLT5zaHJpbmspOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFRUTV9QRlgKKwkJICAgICAgICJDb3VsZCBub3QgcmVnaXN0ZXIgYnVmZmVyIG9iamVjdCBzd2Fwb3V0LlxuIik7CisJCWdvdG8gb3V0X25vX3NocmluazsKKwl9CisKKwlnbG9iLT50dG1fYm9fZXh0cmFfc2l6ZSA9CisJCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB0dG1fdHQpKSArCisJCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB0dG1fYmFja2VuZCkpOworCisJZ2xvYi0+dHRtX2JvX3NpemUgPSBnbG9iLT50dG1fYm9fZXh0cmFfc2l6ZSArCisJCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCkpOworCisJYXRvbWljX3NldCgmZ2xvYi0+Ym9fY291bnQsIDApOworCisJa29iamVjdF9pbml0KCZnbG9iLT5rb2JqLCAmdHRtX2JvX2dsb2Jfa29ial90eXBlKTsKKwlyZXQgPSBrb2JqZWN0X2FkZCgmZ2xvYi0+a29iaiwgdHRtX2dldF9rb2JqKCksICJidWZmZXJfb2JqZWN0cyIpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWtvYmplY3RfcHV0KCZnbG9iLT5rb2JqKTsKKwlyZXR1cm4gcmV0Oworb3V0X25vX3NocmluazoKKwlfX2ZyZWVfcGFnZShnbG9iLT5kdW1teV9yZWFkX3BhZ2UpOworb3V0X25vX2RycDoKKwlrZnJlZShnbG9iKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0dG1fYm9fZ2xvYmFsX2luaXQpOworCisKIGludCB0dG1fYm9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYpCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgaSA9IFRUTV9OVU1fTUVNX1RZUEVTOwogCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuOworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYmRldi0+Z2xvYjsKIAogCXdoaWxlIChpLS0pIHsKIAkJbWFuID0gJmJkZXYtPm1hbltpXTsKQEAgLTEzMDQsMTAwICsxNDE5LDc0IEBACiAJCX0KIAl9CiAKKwltdXRleF9sb2NrKCZnbG9iLT5kZXZpY2VfbGlzdF9tdXRleCk7CisJbGlzdF9kZWwoJmJkZXYtPmRldmljZV9saXN0KTsKKwltdXRleF91bmxvY2soJmdsb2ItPmRldmljZV9saXN0X211dGV4KTsKKwogCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmYmRldi0+d3EpKQogCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJd2hpbGUgKHR0bV9ib19kZWxheWVkX2RlbGV0ZShiZGV2LCB0cnVlKSkKIAkJOwogCi0Jc3Bpbl9sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJaWYgKGxpc3RfZW1wdHkoJmJkZXYtPmRkZXN0cm95KSkKIAkJVFRNX0RFQlVHKCJEZWxheWVkIGRlc3Ryb3kgbGlzdCB3YXMgY2xlYW5cbiIpOwogCiAJaWYgKGxpc3RfZW1wdHkoJmJkZXYtPm1hblswXS5scnUpKQogCQlUVE1fREVCVUcoIlN3YXAgbGlzdCB3YXMgY2xlYW5cbiIpOwotCXNwaW5fdW5sb2NrKCZiZGV2LT5scnVfbG9jayk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKIAotCXR0bV9tZW1fdW5yZWdpc3Rlcl9zaHJpbmsoYmRldi0+bWVtX2dsb2IsICZiZGV2LT5zaHJpbmspOwogCUJVR19PTighZHJtX21tX2NsZWFuKCZiZGV2LT5hZGRyX3NwYWNlX21tKSk7CiAJd3JpdGVfbG9jaygmYmRldi0+dm1fbG9jayk7CiAJZHJtX21tX3Rha2Vkb3duKCZiZGV2LT5hZGRyX3NwYWNlX21tKTsKIAl3cml0ZV91bmxvY2soJmJkZXYtPnZtX2xvY2spOwogCi0JX19mcmVlX3BhZ2UoYmRldi0+ZHVtbXlfcmVhZF9wYWdlKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9fZGV2aWNlX3JlbGVhc2UpOwogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb24gZHJtIGRyaXZlciBsb2FkLgotICogSWYgeW91IGRlY2lkZSB0byBjYWxsIGl0IGZyb20gZmlyc3RvcGVuLCB5b3UgbXVzdCBwcm90ZWN0IHRoZSBjYWxsCi0gKiBmcm9tIGEgcG90ZW50aWFsbHkgcmFjaW5nIHR0bV9ib19kcml2ZXJfZmluaXNoIGluIGxhc3RjbG9zZS4KLSAqIChUaGlzIG1heSBoYXBwZW4gb24gWCBzZXJ2ZXIgcmVzdGFydCkuCi0gKi8KLQogaW50IHR0bV9ib19kZXZpY2VfaW5pdChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKLQkJICAgICAgIHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2IsCi0JCSAgICAgICBzdHJ1Y3QgdHRtX2JvX2RyaXZlciAqZHJpdmVyLCB1aW50NjRfdCBmaWxlX3BhZ2Vfb2Zmc2V0LAorCQkgICAgICAgc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsCisJCSAgICAgICBzdHJ1Y3QgdHRtX2JvX2RyaXZlciAqZHJpdmVyLAorCQkgICAgICAgdWludDY0X3QgZmlsZV9wYWdlX29mZnNldCwKIAkJICAgICAgIGJvb2wgbmVlZF9kbWEzMikKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWJkZXYtPmR1bW15X3JlYWRfcGFnZSA9IE5VTEw7CiAJcndsb2NrX2luaXQoJmJkZXYtPnZtX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZiZGV2LT5scnVfbG9jayk7Ci0KIAliZGV2LT5kcml2ZXIgPSBkcml2ZXI7Ci0JYmRldi0+bWVtX2dsb2IgPSBtZW1fZ2xvYjsKIAogCW1lbXNldChiZGV2LT5tYW4sIDAsIHNpemVvZihiZGV2LT5tYW4pKTsKIAotCWJkZXYtPmR1bW15X3JlYWRfcGFnZSA9IGFsbG9jX3BhZ2UoX19HRlBfWkVSTyB8IEdGUF9ETUEzMik7Ci0JaWYgKHVubGlrZWx5KGJkZXYtPmR1bW15X3JlYWRfcGFnZSA9PSBOVUxMKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9lcnIwOwotCX0KLQogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc3lzdGVtIG1lbW9yeSBidWZmZXIgdHlwZS4KIAkgKiBPdGhlciB0eXBlcyBuZWVkIHRvIGJlIGRyaXZlciAvIElPQ1RMIGluaXRpYWxpemVkLgogCSAqLwogCXJldCA9IHR0bV9ib19pbml0X21tKGJkZXYsIFRUTV9QTF9TWVNURU0sIDAsIDApOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjE7CisJCWdvdG8gb3V0X25vX3N5czsKIAogCWJkZXYtPmFkZHJfc3BhY2VfcmIgPSBSQl9ST09UOwogCXJldCA9IGRybV9tbV9pbml0KCZiZGV2LT5hZGRyX3NwYWNlX21tLCBmaWxlX3BhZ2Vfb2Zmc2V0LCAweDEwMDAwMDAwKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlnb3RvIG91dF9lcnIyOworCQlnb3RvIG91dF9ub19hZGRyX21tOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmJkZXYtPndxLCB0dG1fYm9fZGVsYXllZF93b3JrcXVldWUpOwogCWJkZXYtPm5pY2VfbW9kZSA9IHRydWU7CiAJSU5JVF9MSVNUX0hFQUQoJmJkZXYtPmRkZXN0cm95KTsKLQlJTklUX0xJU1RfSEVBRCgmYmRldi0+c3dhcF9scnUpOwogCWJkZXYtPmRldl9tYXBwaW5nID0gTlVMTDsKKwliZGV2LT5nbG9iID0gZ2xvYjsKIAliZGV2LT5uZWVkX2RtYTMyID0gbmVlZF9kbWEzMjsKLQl0dG1fbWVtX2luaXRfc2hyaW5rKCZiZGV2LT5zaHJpbmssIHR0bV9ib19zd2Fwb3V0KTsKLQlyZXQgPSB0dG1fbWVtX3JlZ2lzdGVyX3NocmluayhtZW1fZ2xvYiwgJmJkZXYtPnNocmluayk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgVFRNX1BGWAotCQkgICAgICAgIkNvdWxkIG5vdCByZWdpc3RlciBidWZmZXIgb2JqZWN0IHN3YXBvdXQuXG4iKTsKLQkJZ290byBvdXRfZXJyMjsKLQl9CiAKLQliZGV2LT50dG1fYm9fZXh0cmFfc2l6ZSA9Ci0JCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB0dG1fdHQpKSArCi0JCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB0dG1fYmFja2VuZCkpOwotCi0JYmRldi0+dHRtX2JvX3NpemUgPSBiZGV2LT50dG1fYm9fZXh0cmFfc2l6ZSArCi0JCXR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCkpOworCW11dGV4X2xvY2soJmdsb2ItPmRldmljZV9saXN0X211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZiZGV2LT5kZXZpY2VfbGlzdCwgJmdsb2ItPmRldmljZV9saXN0KTsKKwltdXRleF91bmxvY2soJmdsb2ItPmRldmljZV9saXN0X211dGV4KTsKIAogCXJldHVybiAwOwotb3V0X2VycjI6CitvdXRfbm9fYWRkcl9tbToKIAl0dG1fYm9fY2xlYW5fbW0oYmRldiwgMCk7Ci1vdXRfZXJyMToKLQlfX2ZyZWVfcGFnZShiZGV2LT5kdW1teV9yZWFkX3BhZ2UpOwotb3V0X2VycjA6CitvdXRfbm9fc3lzOgogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9ib19kZXZpY2VfaW5pdCk7CkBAIC0xNjQ3LDIxICsxNzM2LDIxIEBACiAKIHN0YXRpYyBpbnQgdHRtX2JvX3N3YXBvdXQoc3RydWN0IHR0bV9tZW1fc2hyaW5rICpzaHJpbmspCiB7Ci0Jc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPQotCSAgICBjb250YWluZXJfb2Yoc2hyaW5rLCBzdHJ1Y3QgdHRtX2JvX2RldmljZSwgc2hyaW5rKTsKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9CisJICAgIGNvbnRhaW5lcl9vZihzaHJpbmssIHN0cnVjdCB0dG1fYm9fZ2xvYmFsLCBzaHJpbmspOwogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87CiAJaW50IHJldCA9IC1FQlVTWTsKIAlpbnQgcHV0X2NvdW50OwogCXVpbnQzMl90IHN3YXBfcGxhY2VtZW50ID0gKFRUTV9QTF9GTEFHX0NBQ0hFRCB8IFRUTV9QTF9GTEFHX1NZU1RFTSk7CiAKLQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAl3aGlsZSAocmV0ID09IC1FQlVTWSkgewotCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmYmRldi0+c3dhcF9scnUpKSkgewotCQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmdsb2ItPnN3YXBfbHJ1KSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQkJYm8gPSBsaXN0X2ZpcnN0X2VudHJ5KCZiZGV2LT5zd2FwX2xydSwKKwkJYm8gPSBsaXN0X2ZpcnN0X2VudHJ5KCZnbG9iLT5zd2FwX2xydSwKIAkJCQkgICAgICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QsIHN3YXApOwogCQlrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7CiAKQEAgLTE2NzMsMTYgKzE3NjIsMTYgQEAKIAogCQlyZXQgPSB0dG1fYm9fcmVzZXJ2ZV9sb2NrZWQoYm8sIGZhbHNlLCB0cnVlLCBmYWxzZSwgMCk7CiAJCWlmICh1bmxpa2VseShyZXQgPT0gLUVCVVNZKSkgewotCQkJc3Bpbl91bmxvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCQl0dG1fYm9fd2FpdF91bnJlc2VydmVkKGJvLCBmYWxzZSk7CiAJCQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7Ci0JCQlzcGluX2xvY2soJmJkZXYtPmxydV9sb2NrKTsKKwkJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCQl9CiAJfQogCiAJQlVHX09OKHJldCAhPSAwKTsKIAlwdXRfY291bnQgPSB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKLQlzcGluX3VubG9jaygmYmRldi0+bHJ1X2xvY2spOworCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAKIAl3aGlsZSAocHV0X2NvdW50LS0pCiAJCWtyZWZfcHV0KCZiby0+bGlzdF9rcmVmLCB0dG1fYm9fcmVmX2J1Zyk7CkBAIC0xNzM2LDYgKzE4MjUsNiBAQAogCiB2b2lkIHR0bV9ib19zd2Fwb3V0X2FsbChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldikKIHsKLQl3aGlsZSAodHRtX2JvX3N3YXBvdXQoJmJkZXYtPnNocmluaykgPT0gMCkKKwl3aGlsZSAodHRtX2JvX3N3YXBvdXQoJmJkZXYtPmdsb2ItPnNocmluaykgPT0gMCkKIAkJOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCmluZGV4IGFkNGFkYTAuLmM3MDkyN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKQEAgLTQxLDkgKzQxLDkgQEAKIAlzdHJ1Y3QgdHRtX21lbV9yZWcgKm9sZF9tZW0gPSAmYm8tPm1lbTsKIAogCWlmIChvbGRfbWVtLT5tbV9ub2RlKSB7Ci0JCXNwaW5fbG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZiby0+Z2xvYi0+bHJ1X2xvY2spOwogCQlkcm1fbW1fcHV0X2Jsb2NrKG9sZF9tZW0tPm1tX25vZGUpOwotCQlzcGluX3VubG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmJvLT5nbG9iLT5scnVfbG9jayk7CiAJfQogCW9sZF9tZW0tPm1tX25vZGUgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fZ2xvYmFsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYwppbmRleCAwYjE0ZWIxLi41NDE3NDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYwpAQCAtNzEsNyArNzEsNyBAQAogCiAJbXV0ZXhfbG9jaygmaXRlbS0+bXV0ZXgpOwogCWlmIChpdGVtLT5yZWZjb3VudCA9PSAwKSB7Ci0JCWl0ZW0tPm9iamVjdCA9IGttYWxsb2MocmVmLT5zaXplLCBHRlBfS0VSTkVMKTsKKwkJaXRlbS0+b2JqZWN0ID0ga3phbGxvYyhyZWYtPnNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAodW5saWtlbHkoaXRlbS0+b2JqZWN0ID09IE5VTEwpKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfZXJyOwpAQCAtODksNyArODksNiBAQAogCW11dGV4X3VubG9jaygmaXRlbS0+bXV0ZXgpOwogCXJldHVybiAwOwogb3V0X2VycjoKLQlrZnJlZShpdGVtLT5vYmplY3QpOwogCW11dGV4X3VubG9jaygmaXRlbS0+bXV0ZXgpOwogCWl0ZW0tPm9iamVjdCA9IE5VTEw7CiAJcmV0dXJuIHJldDsKQEAgLTEwNSw3ICsxMDQsNiBAQAogCUJVR19PTihyZWYtPm9iamVjdCAhPSBpdGVtLT5vYmplY3QpOwogCWlmICgtLWl0ZW0tPnJlZmNvdW50ID09IDApIHsKIAkJcmVmLT5yZWxlYXNlKHJlZik7Ci0JCWtmcmVlKGl0ZW0tPm9iamVjdCk7CiAJCWl0ZW0tPm9iamVjdCA9IE5VTEw7CiAJfQogCW11dGV4X3VubG9jaygmaXRlbS0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbWVtb3J5LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYwppbmRleCA4NzMyM2Q0Li4wNzJjMjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYwpAQCAtMjYsMTUgKzI2LDE4MCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAidHRtL3R0bV9tZW1vcnkuaCIKKyNpbmNsdWRlICJ0dG0vdHRtX21vZHVsZS5oIgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2RlZmluZSBUVE1fUEZYICJbVFRNXSAiCiAjZGVmaW5lIFRUTV9NRU1PUllfQUxMT0NfUkVUUklFUyA0CiAKK3N0cnVjdCB0dG1fbWVtX3pvbmUgeworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisJc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdWludDY0X3Qgem9uZV9tZW07CisJdWludDY0X3QgZW1lcl9tZW07CisJdWludDY0X3QgbWF4X21lbTsKKwl1aW50NjRfdCBzd2FwX2xpbWl0OworCXVpbnQ2NF90IHVzZWRfbWVtOworfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdHRtX21lbV9zeXMgPSB7CisJLm5hbWUgPSAiem9uZV9tZW1vcnkiLAorCS5tb2RlID0gU19JUlVHTworfTsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHR0bV9tZW1fZW1lciA9IHsKKwkubmFtZSA9ICJlbWVyZ2VuY3lfbWVtb3J5IiwKKwkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdHRtX21lbV9tYXggPSB7CisJLm5hbWUgPSAiYXZhaWxhYmxlX21lbW9yeSIsCisJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUgorfTsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHR0bV9tZW1fc3dhcCA9IHsKKwkubmFtZSA9ICJzd2FwX2xpbWl0IiwKKwkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdHRtX21lbV91c2VkID0geworCS5uYW1lID0gInVzZWRfbWVtb3J5IiwKKwkubW9kZSA9IFNfSVJVR08KK307CisKK3N0YXRpYyB2b2lkIHR0bV9tZW1fem9uZV9rb2JqX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZSA9CisJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdHRtX21lbV96b25lLCBrb2JqKTsKKworCXByaW50ayhLRVJOX0lORk8gVFRNX1BGWAorCSAgICAgICAiWm9uZSAlN3M6IFVzZWQgbWVtb3J5IGF0IGV4aXQ6ICVsbHUga2lCLlxuIiwKKwkgICAgICAgem9uZS0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgem9uZS0+dXNlZF9tZW0gPj4gMTApOworCWtmcmVlKHpvbmUpOworfQorCitzdGF0aWMgc3NpemVfdCB0dG1fbWVtX3pvbmVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmUgPQorCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHR0bV9tZW1fem9uZSwga29iaik7CisJdWludDY0X3QgdmFsID0gMDsKKworCXNwaW5fbG9jaygmem9uZS0+Z2xvYi0+bG9jayk7CisJaWYgKGF0dHIgPT0gJnR0bV9tZW1fc3lzKQorCQl2YWwgPSB6b25lLT56b25lX21lbTsKKwllbHNlIGlmIChhdHRyID09ICZ0dG1fbWVtX2VtZXIpCisJCXZhbCA9IHpvbmUtPmVtZXJfbWVtOworCWVsc2UgaWYgKGF0dHIgPT0gJnR0bV9tZW1fbWF4KQorCQl2YWwgPSB6b25lLT5tYXhfbWVtOworCWVsc2UgaWYgKGF0dHIgPT0gJnR0bV9tZW1fc3dhcCkKKwkJdmFsID0gem9uZS0+c3dhcF9saW1pdDsKKwllbHNlIGlmIChhdHRyID09ICZ0dG1fbWVtX3VzZWQpCisJCXZhbCA9IHpvbmUtPnVzZWRfbWVtOworCXNwaW5fdW5sb2NrKCZ6b25lLT5nbG9iLT5sb2NrKTsKKworCXJldHVybiBzbnByaW50ZihidWZmZXIsIFBBR0VfU0laRSwgIiVsbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSB2YWwgPj4gMTApOworfQorCitzdGF0aWMgdm9pZCB0dG1fY2hlY2tfc3dhcHBpbmcoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iKTsKKworc3RhdGljIHNzaXplX3QgdHRtX21lbV96b25lX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmUgPQorCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHR0bV9tZW1fem9uZSwga29iaik7CisJaW50IGNoYXJzOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXVpbnQ2NF90IHZhbDY0OworCisJY2hhcnMgPSBzc2NhbmYoYnVmZmVyLCAiJWx1IiwgJnZhbCk7CisJaWYgKGNoYXJzID09IDApCisJCXJldHVybiBzaXplOworCisJdmFsNjQgPSB2YWw7CisJdmFsNjQgPDw9IDEwOworCisJc3Bpbl9sb2NrKCZ6b25lLT5nbG9iLT5sb2NrKTsKKwlpZiAodmFsNjQgPiB6b25lLT56b25lX21lbSkKKwkJdmFsNjQgPSB6b25lLT56b25lX21lbTsKKwlpZiAoYXR0ciA9PSAmdHRtX21lbV9lbWVyKSB7CisJCXpvbmUtPmVtZXJfbWVtID0gdmFsNjQ7CisJCWlmICh6b25lLT5tYXhfbWVtID4gdmFsNjQpCisJCQl6b25lLT5tYXhfbWVtID0gdmFsNjQ7CisJfSBlbHNlIGlmIChhdHRyID09ICZ0dG1fbWVtX21heCkgeworCQl6b25lLT5tYXhfbWVtID0gdmFsNjQ7CisJCWlmICh6b25lLT5lbWVyX21lbSA8IHZhbDY0KQorCQkJem9uZS0+ZW1lcl9tZW0gPSB2YWw2NDsKKwl9IGVsc2UgaWYgKGF0dHIgPT0gJnR0bV9tZW1fc3dhcCkKKwkJem9uZS0+c3dhcF9saW1pdCA9IHZhbDY0OworCXNwaW5fdW5sb2NrKCZ6b25lLT5nbG9iLT5sb2NrKTsKKworCXR0bV9jaGVja19zd2FwcGluZyh6b25lLT5nbG9iKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHRtX21lbV96b25lX2F0dHJzW10gPSB7CisJJnR0bV9tZW1fc3lzLAorCSZ0dG1fbWVtX2VtZXIsCisJJnR0bV9tZW1fbWF4LAorCSZ0dG1fbWVtX3N3YXAsCisJJnR0bV9tZW1fdXNlZCwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHN5c2ZzX29wcyB0dG1fbWVtX3pvbmVfb3BzID0geworCS5zaG93ID0gJnR0bV9tZW1fem9uZV9zaG93LAorCS5zdG9yZSA9ICZ0dG1fbWVtX3pvbmVfc3RvcmUKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIHR0bV9tZW1fem9uZV9rb2JqX3R5cGUgPSB7CisJLnJlbGVhc2UgPSAmdHRtX21lbV96b25lX2tvYmpfcmVsZWFzZSwKKwkuc3lzZnNfb3BzID0gJnR0bV9tZW1fem9uZV9vcHMsCisJLmRlZmF1bHRfYXR0cnMgPSB0dG1fbWVtX3pvbmVfYXR0cnMsCit9OworCitzdGF0aWMgdm9pZCB0dG1fbWVtX2dsb2JhbF9rb2JqX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iID0KKwkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB0dG1fbWVtX2dsb2JhbCwga29iaik7CisKKwlrZnJlZShnbG9iKTsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgdHRtX21lbV9nbG9iX2tvYmpfdHlwZSA9IHsKKwkucmVsZWFzZSA9ICZ0dG1fbWVtX2dsb2JhbF9rb2JqX3JlbGVhc2UsCit9OworCitzdGF0aWMgYm9vbCB0dG1fem9uZXNfYWJvdmVfc3dhcF90YXJnZXQoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJCQlib29sIGZyb21fd3EsIHVpbnQ2NF90IGV4dHJhKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmU7CisJdWludDY0X3QgdGFyZ2V0OworCisJZm9yIChpID0gMDsgaSA8IGdsb2ItPm51bV96b25lczsgKytpKSB7CisJCXpvbmUgPSBnbG9iLT56b25lc1tpXTsKKworCQlpZiAoZnJvbV93cSkKKwkJCXRhcmdldCA9IHpvbmUtPnN3YXBfbGltaXQ7CisJCWVsc2UgaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQl0YXJnZXQgPSB6b25lLT5lbWVyX21lbTsKKwkJZWxzZQorCQkJdGFyZ2V0ID0gem9uZS0+bWF4X21lbTsKKworCQl0YXJnZXQgPSAoZXh0cmEgPiB0YXJnZXQpID8gMFVMTCA6IHRhcmdldDsKKworCQlpZiAoem9uZS0+dXNlZF9tZW0gPiB0YXJnZXQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiAvKioKICAqIEF0IHRoaXMgcG9pbnQgd2Ugb25seSBzdXBwb3J0IGEgc2luZ2xlIHNocmluayBjYWxsYmFjay4KICAqIEV4dGVuZCB0aGlzIGlmIG5lZWRlZCwgcGVyaGFwcyB1c2luZyBhIGxpbmtlZCBsaXN0IG9mIGNhbGxiYWNrcy4KQEAgLTQyLDM0ICsyMDcsMTcgQEAKICAqIG1hbnkgdGhyZWFkcyBtYXkgdHJ5IHRvIHN3YXAgb3V0IGF0IGFueSBnaXZlbiB0aW1lLgogICovCiAKLXN0YXRpYyB2b2lkIHR0bV9zaHJpbmsoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLCBib29sIGZyb21fd29ya3F1ZXVlLAorc3RhdGljIHZvaWQgdHRtX3NocmluayhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsIGJvb2wgZnJvbV93cSwKIAkJICAgICAgIHVpbnQ2NF90IGV4dHJhKQogewogCWludCByZXQ7CiAJc3RydWN0IHR0bV9tZW1fc2hyaW5rICpzaHJpbms7Ci0JdWludDY0X3QgdGFyZ2V0OwotCXVpbnQ2NF90IHRvdGFsX3RhcmdldDsKIAogCXNwaW5fbG9jaygmZ2xvYi0+bG9jayk7CiAJaWYgKGdsb2ItPnNocmluayA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCWlmIChmcm9tX3dvcmtxdWV1ZSkgewotCQl0YXJnZXQgPSBnbG9iLT5zd2FwX2xpbWl0OwotCQl0b3RhbF90YXJnZXQgPSBnbG9iLT50b3RhbF9tZW1vcnlfc3dhcF9saW1pdDsKLQl9IGVsc2UgaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJdG90YWxfdGFyZ2V0ID0gZ2xvYi0+ZW1lcl90b3RhbF9tZW1vcnk7Ci0JCXRhcmdldCA9IGdsb2ItPmVtZXJfbWVtb3J5OwotCX0gZWxzZSB7Ci0JCXRvdGFsX3RhcmdldCA9IGdsb2ItPm1heF90b3RhbF9tZW1vcnk7Ci0JCXRhcmdldCA9IGdsb2ItPm1heF9tZW1vcnk7Ci0JfQotCi0JdG90YWxfdGFyZ2V0ID0gKGV4dHJhID49IHRvdGFsX3RhcmdldCkgPyAwIDogdG90YWxfdGFyZ2V0IC0gZXh0cmE7Ci0JdGFyZ2V0ID0gKGV4dHJhID49IHRhcmdldCkgPyAwIDogdGFyZ2V0IC0gZXh0cmE7Ci0KLQl3aGlsZSAoZ2xvYi0+dXNlZF9tZW1vcnkgPiB0YXJnZXQgfHwKLQkgICAgICAgZ2xvYi0+dXNlZF90b3RhbF9tZW1vcnkgPiB0b3RhbF90YXJnZXQpIHsKKwl3aGlsZSAodHRtX3pvbmVzX2Fib3ZlX3N3YXBfdGFyZ2V0KGdsb2IsIGZyb21fd3EsIGV4dHJhKSkgewogCQlzaHJpbmsgPSBnbG9iLT5zaHJpbms7CiAJCXNwaW5fdW5sb2NrKCZnbG9iLT5sb2NrKTsKIAkJcmV0ID0gc2hyaW5rLT5kb19zaHJpbmsoc2hyaW5rKTsKQEAgLTgxLDYgKzIyOSw4IEBACiAJc3Bpbl91bmxvY2soJmdsb2ItPmxvY2spOwogfQogCisKKwogc3RhdGljIHZvaWQgdHRtX3Nocmlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IgPQpAQCAtODksNjMgKzIzOSwxOTggQEAKIAl0dG1fc2hyaW5rKGdsb2IsIHRydWUsIDBVTEwpOwogfQogCitzdGF0aWMgaW50IHR0bV9tZW1faW5pdF9rZXJuZWxfem9uZShzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzeXNpbmZvICpzaSkKK3sKKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lID0ga3phbGxvYyhzaXplb2YoKnpvbmUpLCBHRlBfS0VSTkVMKTsKKwl1aW50NjRfdCBtZW07CisJaW50IHJldDsKKworCWlmICh1bmxpa2VseSghem9uZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtID0gc2ktPnRvdGFscmFtIC0gc2ktPnRvdGFsaGlnaDsKKwltZW0gKj0gc2ktPm1lbV91bml0OworCisJem9uZS0+bmFtZSA9ICJrZXJuZWwiOworCXpvbmUtPnpvbmVfbWVtID0gbWVtOworCXpvbmUtPm1heF9tZW0gPSBtZW0gPj4gMTsKKwl6b25lLT5lbWVyX21lbSA9IChtZW0gPj4gMSkgKyAobWVtID4+IDIpOworCXpvbmUtPnN3YXBfbGltaXQgPSB6b25lLT5tYXhfbWVtIC0gKG1lbSA+PiAzKTsKKwl6b25lLT51c2VkX21lbSA9IDA7CisJem9uZS0+Z2xvYiA9IGdsb2I7CisJZ2xvYi0+em9uZV9rZXJuZWwgPSB6b25lOworCWtvYmplY3RfaW5pdCgmem9uZS0+a29iaiwgJnR0bV9tZW1fem9uZV9rb2JqX3R5cGUpOworCXJldCA9IGtvYmplY3RfYWRkKCZ6b25lLT5rb2JqLCAmZ2xvYi0+a29iaiwgem9uZS0+bmFtZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlrb2JqZWN0X3B1dCgmem9uZS0+a29iaik7CisJCXJldHVybiByZXQ7CisJfQorCWdsb2ItPnpvbmVzW2dsb2ItPm51bV96b25lcysrXSA9IHpvbmU7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorc3RhdGljIGludCB0dG1fbWVtX2luaXRfaGlnaG1lbV96b25lKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzeXNpbmZvICpzaSkKK3sKKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lID0ga3phbGxvYyhzaXplb2YoKnpvbmUpLCBHRlBfS0VSTkVMKTsKKwl1aW50NjRfdCBtZW07CisJaW50IHJldDsKKworCWlmICh1bmxpa2VseSghem9uZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHNpLT50b3RhbGhpZ2ggPT0gMCkKKwkJcmV0dXJuIDA7CisKKwltZW0gPSBzaS0+dG90YWxyYW07CisJbWVtICo9IHNpLT5tZW1fdW5pdDsKKworCXpvbmUtPm5hbWUgPSAiaGlnaG1lbSI7CisJem9uZS0+em9uZV9tZW0gPSBtZW07CisJem9uZS0+bWF4X21lbSA9IG1lbSA+PiAxOworCXpvbmUtPmVtZXJfbWVtID0gKG1lbSA+PiAxKSArIChtZW0gPj4gMik7CisJem9uZS0+c3dhcF9saW1pdCA9IHpvbmUtPm1heF9tZW0gLSAobWVtID4+IDMpOworCXpvbmUtPnVzZWRfbWVtID0gMDsKKwl6b25lLT5nbG9iID0gZ2xvYjsKKwlnbG9iLT56b25lX2hpZ2htZW0gPSB6b25lOworCWtvYmplY3RfaW5pdCgmem9uZS0+a29iaiwgJnR0bV9tZW1fem9uZV9rb2JqX3R5cGUpOworCXJldCA9IGtvYmplY3RfYWRkKCZ6b25lLT5rb2JqLCAmZ2xvYi0+a29iaiwgem9uZS0+bmFtZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlrb2JqZWN0X3B1dCgmem9uZS0+a29iaik7CisJCXJldHVybiByZXQ7CisJfQorCWdsb2ItPnpvbmVzW2dsb2ItPm51bV96b25lcysrXSA9IHpvbmU7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGludCB0dG1fbWVtX2luaXRfZG1hMzJfem9uZShzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCisJCQkJICAgY29uc3Qgc3RydWN0IHN5c2luZm8gKnNpKQoreworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmUgPSBremFsbG9jKHNpemVvZigqem9uZSksIEdGUF9LRVJORUwpOworCXVpbnQ2NF90IG1lbTsKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KCF6b25lKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW0gPSBzaS0+dG90YWxyYW07CisJbWVtICo9IHNpLT5tZW1fdW5pdDsKKworCS8qKgorCSAqIE5vIHNwZWNpYWwgZG1hMzIgem9uZSBuZWVkZWQuCisJICovCisKKwlpZiAobWVtIDw9ICgodWludDY0X3QpIDFVTEwgPDwgMzIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogTGltaXQgbWF4IGRtYTMyIG1lbW9yeSB0byA0R0IgZm9yIG5vdworCSAqIHVudGlsIHdlIGNhbiBmaWd1cmUgb3V0IGhvdyBiaWcgdGhpcworCSAqIHpvbmUgcmVhbGx5IGlzLgorCSAqLworCisJbWVtID0gKCh1aW50NjRfdCkgMVVMTCA8PCAzMik7CisJem9uZS0+bmFtZSA9ICJkbWEzMiI7CisJem9uZS0+em9uZV9tZW0gPSBtZW07CisJem9uZS0+bWF4X21lbSA9IG1lbSA+PiAxOworCXpvbmUtPmVtZXJfbWVtID0gKG1lbSA+PiAxKSArIChtZW0gPj4gMik7CisJem9uZS0+c3dhcF9saW1pdCA9IHpvbmUtPm1heF9tZW0gLSAobWVtID4+IDMpOworCXpvbmUtPnVzZWRfbWVtID0gMDsKKwl6b25lLT5nbG9iID0gZ2xvYjsKKwlnbG9iLT56b25lX2RtYTMyID0gem9uZTsKKwlrb2JqZWN0X2luaXQoJnpvbmUtPmtvYmosICZ0dG1fbWVtX3pvbmVfa29ial90eXBlKTsKKwlyZXQgPSBrb2JqZWN0X2FkZCgmem9uZS0+a29iaiwgJmdsb2ItPmtvYmosIHpvbmUtPm5hbWUpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJa29iamVjdF9wdXQoJnpvbmUtPmtvYmopOworCQlyZXR1cm4gcmV0OworCX0KKwlnbG9iLT56b25lc1tnbG9iLT5udW1fem9uZXMrK10gPSB6b25lOworCXJldHVybiAwOworfQorI2VuZGlmCisKIGludCB0dG1fbWVtX2dsb2JhbF9pbml0KHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYikKIHsKIAlzdHJ1Y3Qgc3lzaW5mbyBzaTsKLQl1aW50NjRfdCBtZW07CisJaW50IHJldDsKKwlpbnQgaTsKKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lOwogCiAJc3Bpbl9sb2NrX2luaXQoJmdsb2ItPmxvY2spOwogCWdsb2ItPnN3YXBfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidHRtX3N3YXAiKTsKIAlJTklUX1dPUksoJmdsb2ItPndvcmssIHR0bV9zaHJpbmtfd29yayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZ2xvYi0+cXVldWUpOworCWtvYmplY3RfaW5pdCgmZ2xvYi0+a29iaiwgJnR0bV9tZW1fZ2xvYl9rb2JqX3R5cGUpOworCXJldCA9IGtvYmplY3RfYWRkKCZnbG9iLT5rb2JqLAorCQkJICB0dG1fZ2V0X2tvYmooKSwKKwkJCSAgIm1lbW9yeV9hY2NvdW50aW5nIik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlrb2JqZWN0X3B1dCgmZ2xvYi0+a29iaik7CisJCXJldHVybiByZXQ7CisJfQogCiAJc2lfbWVtaW5mbygmc2kpOwogCi0JbWVtID0gc2kudG90YWxyYW0gLSBzaS50b3RhbGhpZ2g7Ci0JbWVtICo9IHNpLm1lbV91bml0OwotCi0JZ2xvYi0+bWF4X21lbW9yeSA9IG1lbSA+PiAxOwotCWdsb2ItPmVtZXJfbWVtb3J5ID0gKG1lbSA+PiAxKSArIChtZW0gPj4gMik7Ci0JZ2xvYi0+c3dhcF9saW1pdCA9IGdsb2ItPm1heF9tZW1vcnkgLSAobWVtID4+IDMpOwotCWdsb2ItPnVzZWRfbWVtb3J5ID0gMDsKLQlnbG9iLT51c2VkX3RvdGFsX21lbW9yeSA9IDA7Ci0JZ2xvYi0+c2hyaW5rID0gTlVMTDsKLQotCW1lbSA9IHNpLnRvdGFscmFtOwotCW1lbSAqPSBzaS5tZW1fdW5pdDsKLQotCWdsb2ItPm1heF90b3RhbF9tZW1vcnkgPSBtZW0gPj4gMTsKLQlnbG9iLT5lbWVyX3RvdGFsX21lbW9yeSA9IChtZW0gPj4gMSkgKyAobWVtID4+IDIpOwotCi0JZ2xvYi0+dG90YWxfbWVtb3J5X3N3YXBfbGltaXQgPSBnbG9iLT5tYXhfdG90YWxfbWVtb3J5IC0gKG1lbSA+PiAzKTsKLQotCXByaW50ayhLRVJOX0lORk8gVFRNX1BGWCAiVFRNIGF2YWlsYWJsZSBncmFwaGljcyBtZW1vcnk6ICVsbHUgTWlCXG4iLAotCSAgICAgICBnbG9iLT5tYXhfdG90YWxfbWVtb3J5ID4+IDIwKTsKLQlwcmludGsoS0VSTl9JTkZPIFRUTV9QRlggIlRUTSBhdmFpbGFibGUgb2JqZWN0IG1lbW9yeTogJWxsdSBNaUJcbiIsCi0JICAgICAgIGdsb2ItPm1heF9tZW1vcnkgPj4gMjApOwotCisJcmV0ID0gdHRtX21lbV9pbml0X2tlcm5lbF96b25lKGdsb2IsICZzaSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfbm9fem9uZTsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCXJldCA9IHR0bV9tZW1faW5pdF9oaWdobWVtX3pvbmUoZ2xvYiwgJnNpKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9ub196b25lOworI2Vsc2UKKwlyZXQgPSB0dG1fbWVtX2luaXRfZG1hMzJfem9uZShnbG9iLCAmc2kpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X25vX3pvbmU7CisjZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgZ2xvYi0+bnVtX3pvbmVzOyArK2kpIHsKKwkJem9uZSA9IGdsb2ItPnpvbmVzW2ldOworCQlwcmludGsoS0VSTl9JTkZPIFRUTV9QRlgKKwkJICAgICAgICJab25lICU3czogQXZhaWxhYmxlIGdyYXBoaWNzIG1lbW9yeTogJWxsdSBraUIuXG4iLAorCQkgICAgICAgem9uZS0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgem9uZS0+bWF4X21lbSA+PiAxMCk7CisJfQogCXJldHVybiAwOworb3V0X25vX3pvbmU6CisJdHRtX21lbV9nbG9iYWxfcmVsZWFzZShnbG9iKTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh0dG1fbWVtX2dsb2JhbF9pbml0KTsKIAogdm9pZCB0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYikKIHsKLQlwcmludGsoS0VSTl9JTkZPIFRUTV9QRlggIlVzZWQgdG90YWwgbWVtb3J5IGlzICVsbHUgYnl0ZXMuXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWdsb2ItPnVzZWRfdG90YWxfbWVtb3J5KTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lOworCiAJZmx1c2hfd29ya3F1ZXVlKGdsb2ItPnN3YXBfcXVldWUpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGdsb2ItPnN3YXBfcXVldWUpOwogCWdsb2ItPnN3YXBfcXVldWUgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBnbG9iLT5udW1fem9uZXM7ICsraSkgeworCQl6b25lID0gZ2xvYi0+em9uZXNbaV07CisJCWtvYmplY3RfZGVsKCZ6b25lLT5rb2JqKTsKKwkJa29iamVjdF9wdXQoJnpvbmUtPmtvYmopOworCX0KKwlrb2JqZWN0X2RlbCgmZ2xvYi0+a29iaik7CisJa29iamVjdF9wdXQoJmdsb2ItPmtvYmopOwogfQogRVhQT1JUX1NZTUJPTCh0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHR0bV9jaGVja19zd2FwcGluZyhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IpCitzdGF0aWMgdm9pZCB0dG1fY2hlY2tfc3dhcHBpbmcoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iKQogewotCWJvb2wgbmVlZHNfc3dhcHBpbmc7CisJYm9vbCBuZWVkc19zd2FwcGluZyA9IGZhbHNlOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmU7CiAKIAlzcGluX2xvY2soJmdsb2ItPmxvY2spOwotCW5lZWRzX3N3YXBwaW5nID0gKGdsb2ItPnVzZWRfbWVtb3J5ID4gZ2xvYi0+c3dhcF9saW1pdCB8fAotCQkJICBnbG9iLT51c2VkX3RvdGFsX21lbW9yeSA+Ci0JCQkgIGdsb2ItPnRvdGFsX21lbW9yeV9zd2FwX2xpbWl0KTsKKwlmb3IgKGkgPSAwOyBpIDwgZ2xvYi0+bnVtX3pvbmVzOyArK2kpIHsKKwkJem9uZSA9IGdsb2ItPnpvbmVzW2ldOworCQlpZiAoem9uZS0+dXNlZF9tZW0gPiB6b25lLT5zd2FwX2xpbWl0KSB7CisJCQluZWVkc19zd2FwcGluZyA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwogCXNwaW5fdW5sb2NrKCZnbG9iLT5sb2NrKTsKIAogCWlmICh1bmxpa2VseShuZWVkc19zd2FwcGluZykpCkBAIC0xNTMsNDQgKzQzOCw2MCBAQAogCiB9CiAKLXZvaWQgdHRtX21lbV9nbG9iYWxfZnJlZShzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCi0JCQkgdWludDY0X3QgYW1vdW50LCBib29sIGhpbWVtKQorc3RhdGljIHZvaWQgdHRtX21lbV9nbG9iYWxfZnJlZV96b25lKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKKwkJCQkgICAgIHN0cnVjdCB0dG1fbWVtX3pvbmUgKnNpbmdsZV96b25lLAorCQkJCSAgICAgdWludDY0X3QgYW1vdW50KQogeworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmU7CisKIAlzcGluX2xvY2soJmdsb2ItPmxvY2spOwotCWdsb2ItPnVzZWRfdG90YWxfbWVtb3J5IC09IGFtb3VudDsKLQlpZiAoIWhpbWVtKQotCQlnbG9iLT51c2VkX21lbW9yeSAtPSBhbW91bnQ7Ci0Jd2FrZV91cF9hbGwoJmdsb2ItPnF1ZXVlKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ2xvYi0+bnVtX3pvbmVzOyArK2kpIHsKKwkJem9uZSA9IGdsb2ItPnpvbmVzW2ldOworCQlpZiAoc2luZ2xlX3pvbmUgJiYgem9uZSAhPSBzaW5nbGVfem9uZSkKKwkJCWNvbnRpbnVlOworCQl6b25lLT51c2VkX21lbSAtPSBhbW91bnQ7CisJfQogCXNwaW5fdW5sb2NrKCZnbG9iLT5sb2NrKTsKIH0KIAordm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKKwkJCSB1aW50NjRfdCBhbW91bnQpCit7CisJcmV0dXJuIHR0bV9tZW1fZ2xvYmFsX2ZyZWVfem9uZShnbG9iLCBOVUxMLCBhbW91bnQpOworfQorCiBzdGF0aWMgaW50IHR0bV9tZW1fZ2xvYmFsX3Jlc2VydmUoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAotCQkJCSAgdWludDY0X3QgYW1vdW50LCBib29sIGhpbWVtLCBib29sIHJlc2VydmUpCisJCQkJICBzdHJ1Y3QgdHRtX21lbV96b25lICpzaW5nbGVfem9uZSwKKwkJCQkgIHVpbnQ2NF90IGFtb3VudCwgYm9vbCByZXNlcnZlKQogewogCXVpbnQ2NF90IGxpbWl0OwotCXVpbnQ2NF90IGxvbWVtX2xpbWl0OwogCWludCByZXQgPSAtRU5PTUVNOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmU7CiAKIAlzcGluX2xvY2soJmdsb2ItPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBnbG9iLT5udW1fem9uZXM7ICsraSkgeworCQl6b25lID0gZ2xvYi0+em9uZXNbaV07CisJCWlmIChzaW5nbGVfem9uZSAmJiB6b25lICE9IHNpbmdsZV96b25lKQorCQkJY29udGludWU7CiAKLQlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQlsaW1pdCA9IGdsb2ItPmVtZXJfdG90YWxfbWVtb3J5OwotCQlsb21lbV9saW1pdCA9IGdsb2ItPmVtZXJfbWVtb3J5OwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gZ2xvYi0+bWF4X3RvdGFsX21lbW9yeTsKLQkJbG9tZW1fbGltaXQgPSBnbG9iLT5tYXhfbWVtb3J5OworCQlsaW1pdCA9IChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSA/CisJCQl6b25lLT5lbWVyX21lbSA6IHpvbmUtPm1heF9tZW07CisKKwkJaWYgKHpvbmUtPnVzZWRfbWVtID4gbGltaXQpCisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaWYgKHVubGlrZWx5KGdsb2ItPnVzZWRfdG90YWxfbWVtb3J5ICsgYW1vdW50ID4gbGltaXQpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0JaWYgKHVubGlrZWx5KCFoaW1lbSAmJiBnbG9iLT51c2VkX21lbW9yeSArIGFtb3VudCA+IGxvbWVtX2xpbWl0KSkKLQkJZ290byBvdXRfdW5sb2NrOwotCiAJaWYgKHJlc2VydmUpIHsKLQkJZ2xvYi0+dXNlZF90b3RhbF9tZW1vcnkgKz0gYW1vdW50OwotCQlpZiAoIWhpbWVtKQotCQkJZ2xvYi0+dXNlZF9tZW1vcnkgKz0gYW1vdW50OworCQlmb3IgKGkgPSAwOyBpIDwgZ2xvYi0+bnVtX3pvbmVzOyArK2kpIHsKKwkJCXpvbmUgPSBnbG9iLT56b25lc1tpXTsKKwkJCWlmIChzaW5nbGVfem9uZSAmJiB6b25lICE9IHNpbmdsZV96b25lKQorCQkJCWNvbnRpbnVlOworCQkJem9uZS0+dXNlZF9tZW0gKz0gYW1vdW50OworCQl9CiAJfQorCiAJcmV0ID0gMDsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJmdsb2ItPmxvY2spOwpAQCAtMTk5LDEyICs1MDAsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgdHRtX21lbV9nbG9iYWxfYWxsb2Moc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLCB1aW50NjRfdCBtZW1vcnksCi0JCQkgYm9vbCBub193YWl0LCBib29sIGludGVycnVwdGlibGUsIGJvb2wgaGltZW0pCisKK3N0YXRpYyBpbnQgdHRtX21lbV9nbG9iYWxfYWxsb2Nfem9uZShzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCisJCQkJICAgICBzdHJ1Y3QgdHRtX21lbV96b25lICpzaW5nbGVfem9uZSwKKwkJCQkgICAgIHVpbnQ2NF90IG1lbW9yeSwKKwkJCQkgICAgIGJvb2wgbm9fd2FpdCwgYm9vbCBpbnRlcnJ1cHRpYmxlKQogewogCWludCBjb3VudCA9IFRUTV9NRU1PUllfQUxMT0NfUkVUUklFUzsKIAotCXdoaWxlICh1bmxpa2VseSh0dG1fbWVtX2dsb2JhbF9yZXNlcnZlKGdsb2IsIG1lbW9yeSwgaGltZW0sIHRydWUpCisJd2hpbGUgKHVubGlrZWx5KHR0bV9tZW1fZ2xvYmFsX3Jlc2VydmUoZ2xvYiwKKwkJCQkJICAgICAgIHNpbmdsZV96b25lLAorCQkJCQkgICAgICAgbWVtb3J5LCB0cnVlKQogCQkJIT0gMCkpIHsKIAkJaWYgKG5vX3dhaXQpCiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIxNiw2ICs1MjIsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwgdWludDY0X3QgbWVtb3J5LAorCQkJIGJvb2wgbm9fd2FpdCwgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCS8qKgorCSAqIE5vcm1hbCBhbGxvY2F0aW9ucyBvZiBrZXJuZWwgbWVtb3J5IGFyZSByZWdpc3RlcmVkIGluCisJICogYWxsIHpvbmVzLgorCSAqLworCisJcmV0dXJuIHR0bV9tZW1fZ2xvYmFsX2FsbG9jX3pvbmUoZ2xvYiwgTlVMTCwgbWVtb3J5LCBub193YWl0LAorCQkJCQkgaW50ZXJydXB0aWJsZSk7Cit9CisKK2ludCB0dG1fbWVtX2dsb2JhbF9hbGxvY19wYWdlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKKwkJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgYm9vbCBub193YWl0LCBib29sIGludGVycnVwdGlibGUpCit7CisKKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lID0gTlVMTDsKKworCS8qKgorCSAqIFBhZ2UgYWxsb2NhdGlvbnMgbWF5IGJlIHJlZ2lzdGVkIGluIGEgc2luZ2xlIHpvbmUKKwkgKiBvbmx5IGlmIGhpZ2htZW0gb3IgIWRtYTMyLgorCSAqLworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkgJiYgZ2xvYi0+em9uZV9oaWdobWVtICE9IE5VTEwpCisJCXpvbmUgPSBnbG9iLT56b25lX2hpZ2htZW07CisjZWxzZQorCWlmIChnbG9iLT56b25lX2RtYTMyICYmIHBhZ2VfdG9fcGZuKHBhZ2UpID4gMHgwMDEwMDAwMFVMKQorCQl6b25lID0gZ2xvYi0+em9uZV9rZXJuZWw7CisjZW5kaWYKKwlyZXR1cm4gdHRtX21lbV9nbG9iYWxfYWxsb2Nfem9uZShnbG9iLCB6b25lLCBQQUdFX1NJWkUsIG5vX3dhaXQsCisJCQkJCSBpbnRlcnJ1cHRpYmxlKTsKK30KKwordm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlX3BhZ2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lID0gTlVMTDsKKworI2lmZGVmIENPTkZJR19ISUdITUVNCisJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpICYmIGdsb2ItPnpvbmVfaGlnaG1lbSAhPSBOVUxMKQorCQl6b25lID0gZ2xvYi0+em9uZV9oaWdobWVtOworI2Vsc2UKKwlpZiAoZ2xvYi0+em9uZV9kbWEzMiAmJiBwYWdlX3RvX3BmbihwYWdlKSA+IDB4MDAxMDAwMDBVTCkKKwkJem9uZSA9IGdsb2ItPnpvbmVfa2VybmVsOworI2VuZGlmCisJdHRtX21lbV9nbG9iYWxfZnJlZV96b25lKGdsb2IsIHpvbmUsIFBBR0VfU0laRSk7Cit9CisKKwogc2l6ZV90IHR0bV9yb3VuZF9wb3Qoc2l6ZV90IHNpemUpCiB7CiAJaWYgKChzaXplICYgKHNpemUgLSAxKSkgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX21vZHVsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKaW5kZXggNTljZTgxOS4uOWE2ZWRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbW9kdWxlLmMKQEAgLTI5LDE2ICsyOSw3MiBAQAogICogCSAgICBKZXJvbWUgR2xpc3NlCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDx0dG0vdHRtX21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSAidHRtL3R0bV9tb2R1bGUuaCIKKyNpbmNsdWRlICJkcm1fc3lzZnMuaCIKKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGV4aXRfcSk7CithdG9taWNfdCBkZXZpY2VfcmVsZWFzZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgdHRtX2RybV9jbGFzc190eXBlID0geworCS5uYW1lID0gInR0bSIsCisJLyoqCisJICogQWRkIHBtIG9wcyBoZXJlLgorCSAqLworfTsKKworc3RhdGljIHZvaWQgdHRtX2RybV9jbGFzc19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJYXRvbWljX3NldCgmZGV2aWNlX3JlbGVhc2VkLCAxKTsKKwl3YWtlX3VwX2FsbCgmZXhpdF9xKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2UgdHRtX2RybV9jbGFzc19kZXZpY2UgPSB7CisJLnR5cGUgPSAmdHRtX2RybV9jbGFzc190eXBlLAorCS5yZWxlYXNlID0gJnR0bV9kcm1fY2xhc3NfZGV2aWNlX3JlbGVhc2UKK307CisKK3N0cnVjdCBrb2JqZWN0ICp0dG1fZ2V0X2tvYmoodm9pZCkKK3sKKwlzdHJ1Y3Qga29iamVjdCAqa29iaiA9ICZ0dG1fZHJtX2NsYXNzX2RldmljZS5rb2JqOworCUJVR19PTihrb2JqID09IE5VTEwpOworCXJldHVybiBrb2JqOworfQogCiBzdGF0aWMgaW50IF9faW5pdCB0dG1faW5pdCh2b2lkKQogeworCWludCByZXQ7CisKKwlyZXQgPSBkZXZfc2V0X25hbWUoJnR0bV9kcm1fY2xhc3NfZGV2aWNlLCAidHRtIik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKwogCXR0bV9nbG9iYWxfaW5pdCgpOworCisJYXRvbWljX3NldCgmZGV2aWNlX3JlbGVhc2VkLCAwKTsKKwlyZXQgPSBkcm1fY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZ0dG1fZHJtX2NsYXNzX2RldmljZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfbm9fZGV2X3JlZzsKKwogCXJldHVybiAwOworb3V0X25vX2Rldl9yZWc6CisJYXRvbWljX3NldCgmZGV2aWNlX3JlbGVhc2VkLCAxKTsKKwl3YWtlX3VwX2FsbCgmZXhpdF9xKTsKKwl0dG1fZ2xvYmFsX3JlbGVhc2UoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdHRtX2V4aXQodm9pZCkKIHsKKwlkcm1fY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJnR0bV9kcm1fY2xhc3NfZGV2aWNlKTsKKworCS8qKgorCSAqIFJlZnVzZSB0byB1bmxvYWQgdW50aWwgdGhlIFRUTSBkZXZpY2UgaXMgcmVsZWFzZWQuCisJICogTm90IHN1cmUgdGhpcyBpcyAxMDAlIG5lZWRlZC4KKwkgKi8KKworCXdhaXRfZXZlbnQoZXhpdF9xLCBhdG9taWNfcmVhZCgmZGV2aWNlX3JlbGVhc2VkKSA9PSAxKTsKIAl0dG1fZ2xvYmFsX3JlbGVhc2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKaW5kZXggYjhiNmM0YS4uYTU1ZWUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCkBAIC0zNCw3NiArMzQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlICJkcm1fY2FjaGUuaCIKICNpbmNsdWRlICJ0dG0vdHRtX21vZHVsZS5oIgogI2luY2x1ZGUgInR0bS90dG1fYm9fZHJpdmVyLmgiCiAjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKIAogc3RhdGljIGludCB0dG1fdHRfc3dhcGluKHN0cnVjdCB0dG1fdHQgKnR0bSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODYpCi1zdGF0aWMgdm9pZCB0dG1fdHRfY2xmbHVzaF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXVpbnQ4X3QgKnBhZ2VfdmlydHVhbDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWlmICh1bmxpa2VseShwYWdlID09IE5VTEwpKQotCQlyZXR1cm47Ci0KLQlwYWdlX3ZpcnR1YWwgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFOyBpICs9IGJvb3RfY3B1X2RhdGEueDg2X2NsZmx1c2hfc2l6ZSkKLQkJY2xmbHVzaChwYWdlX3ZpcnR1YWwgKyBpKTsKLQotCWt1bm1hcF9hdG9taWMocGFnZV92aXJ0dWFsLCBLTV9VU0VSMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR0bV90dF9jYWNoZV9mbHVzaF9jbGZsdXNoKHN0cnVjdCBwYWdlICpwYWdlc1tdLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKLXsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQltYigpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKLQkJdHRtX3R0X2NsZmx1c2hfcGFnZSgqcGFnZXMrKyk7Ci0JbWIoKTsKLX0KLSNlbGlmICFkZWZpbmVkKF9fcG93ZXJwY19fKQotc3RhdGljIHZvaWQgdHRtX3R0X2lwaV9oYW5kbGVyKHZvaWQgKm51bGwpCi17Ci0JOwotfQotI2VuZGlmCi0KLXZvaWQgdHRtX3R0X2NhY2hlX2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlc1tdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKLXsKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4NikKLQlpZiAoY3B1X2hhc19jbGZsdXNoKSB7Ci0JCXR0bV90dF9jYWNoZV9mbHVzaF9jbGZsdXNoKHBhZ2VzLCBudW1fcGFnZXMpOwotCQlyZXR1cm47Ci0JfQotI2VsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKLQkJdm9pZCAqcGFnZV92aXJ0dWFsOwotCi0JCWlmICh1bmxpa2VseShwYWdlID09IE5VTEwpKQotCQkJY29udGludWU7Ci0KLQkJcGFnZV92aXJ0dWFsID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfdmlydHVhbCwKLQkJCQkgICAodW5zaWduZWQgbG9uZykgcGFnZV92aXJ0dWFsICsgUEFHRV9TSVpFKTsKLQkJa3VubWFwX2F0b21pYyhwYWdlX3ZpcnR1YWwsIEtNX1VTRVIwKTsKLQl9Ci0jZWxzZQotCWlmIChvbl9lYWNoX2NwdSh0dG1fdHRfaXBpX2hhbmRsZXIsIE5VTEwsIDEpICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYCi0JCSAgICAgICAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGRybSBjYWNoZSBmbHVzaC5cbiIpOwotI2VuZGlmCi19Ci0KIC8qKgogICogQWxsb2NhdGVzIHN0b3JhZ2UgZm9yIHBvaW50ZXJzIHRvIHRoZSBwYWdlcyB0aGF0IGJhY2sgdGhlIHR0bS4KICAqCkBAIC0xNzksNyArMTE2LDcgQEAKIAkJCXNldF9wYWdlX2RpcnR5X2xvY2socGFnZSk7CiAKIAkJdHRtLT5wYWdlc1tpXSA9IE5VTEw7Ci0JCXR0bV9tZW1fZ2xvYmFsX2ZyZWUodHRtLT5iZGV2LT5tZW1fZ2xvYiwgUEFHRV9TSVpFLCBmYWxzZSk7CisJCXR0bV9tZW1fZ2xvYmFsX2ZyZWUodHRtLT5nbG9iLT5tZW1fZ2xvYiwgUEFHRV9TSVpFKTsKIAkJcHV0X3BhZ2UocGFnZSk7CiAJfQogCXR0bS0+c3RhdGUgPSB0dF91bnBvcHVsYXRlZDsKQEAgLTE5MCw4ICsxMjcsNyBAQAogc3RhdGljIHN0cnVjdCBwYWdlICpfX3R0bV90dF9nZXRfcGFnZShzdHJ1Y3QgdHRtX3R0ICp0dG0sIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcDsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IHR0bS0+YmRldjsKLQlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iID0gYmRldi0+bWVtX2dsb2I7CisJc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYiA9IHR0bS0+Z2xvYi0+bWVtX2dsb2I7CiAJaW50IHJldDsKIAogCXdoaWxlIChOVUxMID09IChwID0gdHRtLT5wYWdlc1tpbmRleF0pKSB7CkBAIC0yMDAsMjEgKzEzNiwxNCBAQAogCQlpZiAoIXApCiAJCQlyZXR1cm4gTlVMTDsKIAotCQlpZiAoUGFnZUhpZ2hNZW0ocCkpIHsKLQkJCXJldCA9Ci0JCQkgICAgdHRtX21lbV9nbG9iYWxfYWxsb2MobWVtX2dsb2IsIFBBR0VfU0laRSwKLQkJCQkJCSBmYWxzZSwgZmFsc2UsIHRydWUpOwotCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCQlnb3RvIG91dF9lcnI7CisJCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jX3BhZ2UobWVtX2dsb2IsIHAsIGZhbHNlLCBmYWxzZSk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlnb3RvIG91dF9lcnI7CisKKwkJaWYgKFBhZ2VIaWdoTWVtKHApKQogCQkJdHRtLT5wYWdlc1stLXR0bS0+Zmlyc3RfaGltZW1fcGFnZV0gPSBwOwotCQl9IGVsc2UgewotCQkJcmV0ID0KLQkJCSAgICB0dG1fbWVtX2dsb2JhbF9hbGxvYyhtZW1fZ2xvYiwgUEFHRV9TSVpFLAotCQkJCQkJIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCQlnb3RvIG91dF9lcnI7CisJCWVsc2UKIAkJCXR0bS0+cGFnZXNbKyt0dG0tPmxhc3RfbG9tZW1fcGFnZV0gPSBwOwotCQl9CiAJfQogCXJldHVybiBwOwogb3V0X2VycjoKQEAgLTMxMCw3ICsyMzksNyBAQAogCX0KIAogCWlmICh0dG0tPmNhY2hpbmdfc3RhdGUgPT0gdHRfY2FjaGVkKQotCQl0dG1fdHRfY2FjaGVfZmx1c2godHRtLT5wYWdlcywgdHRtLT5udW1fcGFnZXMpOworCQlkcm1fY2xmbHVzaF9wYWdlcyh0dG0tPnBhZ2VzLCB0dG0tPm51bV9wYWdlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7ICsraSkgewogCQljdXJfcGFnZSA9IHR0bS0+cGFnZXNbaV07CkBAIC0zNjgsOCArMjk3LDggQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgVFRNX1BGWAogCQkJCSAgICAgICAiRXJyb25lb3VzIHBhZ2UgY291bnQuICIKIAkJCQkgICAgICAgIkxlYWtpbmcgcGFnZXMuXG4iKTsKLQkJCXR0bV9tZW1fZ2xvYmFsX2ZyZWUodHRtLT5iZGV2LT5tZW1fZ2xvYiwgUEFHRV9TSVpFLAotCQkJCQkgICAgUGFnZUhpZ2hNZW0oY3VyX3BhZ2UpKTsKKwkJCXR0bV9tZW1fZ2xvYmFsX2ZyZWVfcGFnZSh0dG0tPmdsb2ItPm1lbV9nbG9iLAorCQkJCQkJIGN1cl9wYWdlKTsKIAkJCV9fZnJlZV9wYWdlKGN1cl9wYWdlKTsKIAkJfQogCX0KQEAgLTQxNCw3ICszNDMsNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKIAlpbnQgcmV0OwogCWludCB3cml0ZSA9ICh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1dSSVRFKSAhPSAwOwotCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2IgPSB0dG0tPmJkZXYtPm1lbV9nbG9iOworCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2IgPSB0dG0tPmdsb2ItPm1lbV9nbG9iOwogCiAJQlVHX09OKG51bV9wYWdlcyAhPSB0dG0tPm51bV9wYWdlcyk7CiAJQlVHX09OKCh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1VTRVIpID09IDApOwpAQCAtNDI0LDcgKzM1Myw3IEBACiAJICovCiAKIAlyZXQgPSB0dG1fbWVtX2dsb2JhbF9hbGxvYyhtZW1fZ2xvYiwgbnVtX3BhZ2VzICogUEFHRV9TSVpFLAotCQkJCSAgIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQkJCSAgIGZhbHNlLCBmYWxzZSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDM1LDcgKzM2NCw3IEBACiAKIAlpZiAocmV0ICE9IG51bV9wYWdlcyAmJiB3cml0ZSkgewogCQl0dG1fdHRfZnJlZV91c2VyX3BhZ2VzKHR0bSk7Ci0JCXR0bV9tZW1fZ2xvYmFsX2ZyZWUobWVtX2dsb2IsIG51bV9wYWdlcyAqIFBBR0VfU0laRSwgZmFsc2UpOworCQl0dG1fbWVtX2dsb2JhbF9mcmVlKG1lbV9nbG9iLCBudW1fcGFnZXMgKiBQQUdFX1NJWkUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQ1OSw4ICszODgsNyBAQAogCWlmICghdHRtKQogCQlyZXR1cm4gTlVMTDsKIAotCXR0bS0+YmRldiA9IGJkZXY7Ci0KKwl0dG0tPmdsb2IgPSBiZGV2LT5nbG9iOwogCXR0bS0+bnVtX3BhZ2VzID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCXR0bS0+Zmlyc3RfaGltZW1fcGFnZSA9IHR0bS0+bnVtX3BhZ2VzOwogCXR0bS0+bGFzdF9sb21lbV9wYWdlID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCAxMTFhZmJlLi4yNGQ5MGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTIwNSwxMyArMjA1LDYgQEAKIAlTdXBwb3J0IGZvciBOLVRyaWcgdG91Y2ggc2NyZWVuLgogCiBjb25maWcgSElEX1BBTlRIRVJMT1JECi0JdHJpc3RhdGUgIlBhbnRoZXJsb3JkIGRldmljZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKLQlkZXBlbmRzIG9uIFVTQl9ISUQKLQlkZWZhdWx0ICFFTUJFRERFRAotCS0tLWhlbHAtLS0KLQlTdXBwb3J0IGZvciBQYW50aGVyTG9yZC9HcmVlbkFzaWEgYmFzZWQgZGV2aWNlIHN1cHBvcnQuCi0KLWNvbmZpZyBISURfUEFOVEhFUkxPUkQKIAl0cmlzdGF0ZSAiUGFudGhlcmxvcmQgc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKIAlkZWZhdWx0ICFFTUJFRERFRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggMzQyYjdkMy4uYmUzNGQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMDg5LDggKzEwODksNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JYnVmID0ga21hbGxvYyhzaXplb2YoY2hhcikgKiBISURfREVCVUdfQlVGU0laRSwKLQkJCWludGVycnVwdCA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKHNpemVvZihjaGFyKSAqIEhJRF9ERUJVR19CVUZTSVpFLCBHRlBfQVRPTUlDKTsKIAogCWlmICghYnVmKSB7CiAJCXJlcG9ydCA9IGhpZF9nZXRfcmVwb3J0KHJlcG9ydF9lbnVtLCBkYXRhKTsKQEAgLTEyMzgsNiArMTIzNywxNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2Nvbm5lY3QpOwogCit2b2lkIGhpZF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWlmIChoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCisJCWhpZGlucHV0X2Rpc2Nvbm5lY3QoaGRldik7CisJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCWhkZXYtPmhpZGRldl9kaXNjb25uZWN0KGhkZXYpOworCWlmIChoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEUkFXKQorCQloaWRyYXdfZGlzY29ubmVjdChoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF9kaXNjb25uZWN0KTsKKwogLyogYSBsaXN0IG9mIGRldmljZXMgZm9yIHdoaWNoIHRoZXJlIGlzIGEgc3BlY2lhbGl6ZWQgZHJpdmVyIG9uIEhJRCBidXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfYmxhY2tsaXN0W10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKaW5kZXggMWIwZTA3YS4uMDNiZDcwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKQEAgLTEwNDEsMTMgKzEwNDEsNiBAQAogCiAJaGlkX2NhbmNlbF9kZWxheWVkX3N0dWZmKHVzYmhpZCk7CiAKLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCi0JCWhpZGlucHV0X2Rpc2Nvbm5lY3QoaGlkKTsKLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKQotCQloaWRkZXZfZGlzY29ubmVjdChoaWQpOwotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCi0JCWhpZHJhd19kaXNjb25uZWN0KGhpZCk7Ci0KIAloaWQtPmNsYWltZWQgPSAwOwogCiAJdXNiX2ZyZWVfdXJiKHVzYmhpZC0+dXJiaW4pOwpAQCAtMTA4NSw3ICsxMDc4LDcgQEAKIAkuaGlkaW5wdXRfaW5wdXRfZXZlbnQgPSB1c2JfaGlkaW5wdXRfaW5wdXRfZXZlbnQsCiB9OwogCi1zdGF0aWMgaW50IGhpZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCB1c2JoaWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKQEAgLTExMTcsNiArMTExMCw3IEBACiAJaGlkLT5mZl9pbml0ID0gaGlkX3BpZGZmX2luaXQ7CiAjaWZkZWYgQ09ORklHX1VTQl9ISURERVYKIAloaWQtPmhpZGRldl9jb25uZWN0ID0gaGlkZGV2X2Nvbm5lY3Q7CisJaGlkLT5oaWRkZXZfZGlzY29ubmVjdCA9IGhpZGRldl9kaXNjb25uZWN0OwogCWhpZC0+aGlkZGV2X2hpZF9ldmVudCA9IGhpZGRldl9oaWRfZXZlbnQ7CiAJaGlkLT5oaWRkZXZfcmVwb3J0X2V2ZW50ID0gaGlkZGV2X3JlcG9ydF9ldmVudDsKICNlbmRpZgpAQCAtMTE3Nyw3ICsxMTcxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBoaWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3N0YXRpYyB2b2lkIHVzYmhpZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQ7CkBAIC0xMzU5LDggKzEzNTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGlkX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNiaGlkIiwKLQkucHJvYmUgPQloaWRfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQloaWRfZGlzY29ubmVjdCwKKwkucHJvYmUgPQl1c2JoaWRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JoaWRfZGlzY29ubmVjdCwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCA9CWhpZF9zdXNwZW5kLAogCS5yZXN1bWUgPQloaWRfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDRkMWRjMGMuLjhiNmVlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTg1MiwxNCArODUyLDE0IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBjaGFyICpoaWRkZXZfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKmhpZGRldl9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInVzYi8lcyIsIGRldl9uYW1lKGRldikpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgaGlkZGV2X2NsYXNzID0gewogCS5uYW1lID0JCSJoaWRkZXYlZCIsCi0JLm5vZGVuYW1lID0JaGlkZGV2X25vZGVuYW1lLAorCS5kZXZub2RlID0JaGlkZGV2X2Rldm5vZGUsCiAJLmZvcHMgPQkJJmhpZGRldl9mb3BzLAogCS5taW5vcl9iYXNlID0JSElEREVWX01JTk9SX0JBU0UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZGN4eC5jIGIvZHJpdmVycy9od21vbi9hZGN4eC5jCmluZGV4IDI0MjI5NGQuLjVlOWUwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRjeHguYworKysgYi9kcml2ZXJzL2h3bW9uL2FkY3h4LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNkZWZpbmUgRFJWTkFNRQkJImFkY3h4IgpAQCAtMTU3LDggKzE1OCw5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGFkY3h4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBjaGFubmVscykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkY3h4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CisJaW50IGNoYW5uZWxzID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGFkY3h4ICphZGM7CiAJaW50IHN0YXR1czsKIAlpbnQgaTsKQEAgLTIwNCwyNiArMjA2LDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZGN4eDFzX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JcmV0dXJuIGFkY3h4X3Byb2JlKHNwaSwgMSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGFkY3h4MnNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlyZXR1cm4gYWRjeHhfcHJvYmUoc3BpLCAyKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgYWRjeHg0c19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXJldHVybiBhZGN4eF9wcm9iZShzcGksIDQpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZGN4eDhzX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JcmV0dXJuIGFkY3h4X3Byb2JlKHNwaSwgOCk7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZleGl0IGFkY3h4X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZGN4eCAqYWRjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CkBAIC0yNDEsNzkgKzIyMywzMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWRjeHgxc19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiYWRjeHgxcyIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCT0gYWRjeHgxc19wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AoYWRjeHhfcmVtb3ZlKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBhZGN4eF9pZHNbXSA9IHsKKwl7ICJhZGN4eDFzIiwgMSB9LAorCXsgImFkY3h4MnMiLCAyIH0sCisJeyAiYWRjeHg0cyIsIDQgfSwKKwl7ICJhZGN4eDhzIiwgOCB9LAorCXsgfSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgYWRjeHhfaWRzKTsKIAotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkY3h4MnNfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkY3h4X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZQk9ICJhZGN4eDJzIiwKKwkJLm5hbWUJPSAiYWRjeHgiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAotCS5wcm9iZQk9IGFkY3h4MnNfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGFkY3h4X3JlbW92ZSksCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWRjeHg0c19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiYWRjeHg0cyIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCT0gYWRjeHg0c19wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AoYWRjeHhfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZGN4eDhzX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJhZGN4eDhzIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJPSBhZGN4eDhzX3Byb2JlLAorCS5pZF90YWJsZSA9IGFkY3h4X2lkcywKKwkucHJvYmUJPSBhZGN4eF9wcm9iZSwKIAkucmVtb3ZlCT0gX19kZXZleGl0X3AoYWRjeHhfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYWRjeHgodm9pZCkKIHsKLQlpbnQgc3RhdHVzOwotCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4MXNfZHJpdmVyKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIHJlZ18xX2ZhaWxlZDsKLQotCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4MnNfZHJpdmVyKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIHJlZ18yX2ZhaWxlZDsKLQotCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4NHNfZHJpdmVyKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIHJlZ180X2ZhaWxlZDsKLQotCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4OHNfZHJpdmVyKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIHJlZ184X2ZhaWxlZDsKLQotCXJldHVybiBzdGF0dXM7Ci0KLXJlZ184X2ZhaWxlZDoKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4NHNfZHJpdmVyKTsKLXJlZ180X2ZhaWxlZDoKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4MnNfZHJpdmVyKTsKLXJlZ18yX2ZhaWxlZDoKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkY3h4MXNfZHJpdmVyKTsKLXJlZ18xX2ZhaWxlZDoKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZGN4eF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9hZGN4eCh2b2lkKQogewotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWRjeHgxc19kcml2ZXIpOwotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWRjeHgyc19kcml2ZXIpOwotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWRjeHg0c19kcml2ZXIpOwotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWRjeHg4c19kcml2ZXIpOworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWRjeHhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9hZGN4eCk7CkBAIC0zMjIsOCArMjU4LDMgQEAKIE1PRFVMRV9BVVRIT1IoIk1hcmMgUGlnbmF0Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgYWRjeHg4c3h4eCBMaW51eCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotTU9EVUxFX0FMSUFTKCJhZGN4eDFzIik7Ci1NT0RVTEVfQUxJQVMoImFkY3h4MnMiKTsKLU1PRFVMRV9BTElBUygiYWRjeHg0cyIpOwotTU9EVUxFX0FMSUFTKCJhZGN4eDhzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCmluZGV4IGIxMWUwNmYuLmFmYzU5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCkBAIC04MywxNiArODMsMTQgQEAKIAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJY2hhciBsb3dfcG93ZXI7CQkvKiAhPTAgaWYgZGV2aWNlIGluIGxvdyBwb3dlciBtb2RlICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIAotCXM4IHRlbXBfbWF4WzJdOwkJLyogUmVnaXN0ZXIgdmFsdWVzICovCi0JczggdGVtcF9taW5bMl07Ci0JczggdGVtcFsyXTsKKwlpbnQgdGVtcF9tYXhbMl07CQkvKiBSZWdpc3RlciB2YWx1ZXMgKi8KKwlpbnQgdGVtcF9taW5bMl07CisJaW50IHRlbXBbMl07CiAJdTggYWxhcm1zOwogCS8qIFNwZWNpYWwgdmFsdWVzIGZvciBBRE0xMDIzIG9ubHkgKi8KLQl1OCByZW1vdGVfdGVtcF9wcmVjOwotCXU4IHJlbW90ZV90ZW1wX29zX3ByZWM7Ci0JdTggcmVtb3RlX3RlbXBfaHlzdF9wcmVjOwogCXU4IHJlbW90ZV90ZW1wX29mZnNldDsKIAl1OCByZW1vdGVfdGVtcF9vZmZzZXRfcHJlYzsKIH07CkBAIC0xNDEsNyArMTM5LDcgQEAKIAlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OwogCXN0cnVjdCBhZG0xMDIxX2RhdGEgKmRhdGEgPSBhZG0xMDIxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAxMDAwICogZGF0YS0+dGVtcFtpbmRleF0pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wW2luZGV4XSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9tYXgoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTUwLDcgKzE0OCw3IEBACiAJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKIAlzdHJ1Y3QgYWRtMTAyMV9kYXRhICpkYXRhID0gYWRtMTAyMV91cGRhdGVfZGV2aWNlKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMTAwMCAqIGRhdGEtPnRlbXBfbWF4W2luZGV4XSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXBfbWF4W2luZGV4XSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9taW4oc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTU5LDcgKzE1Nyw3IEBACiAJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKIAlzdHJ1Y3QgYWRtMTAyMV9kYXRhICpkYXRhID0gYWRtMTAyMV91cGRhdGVfZGV2aWNlKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMTAwMCAqIGRhdGEtPnRlbXBfbWluW2luZGV4XSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXBfbWluW2luZGV4XSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIxNiw2ICsyMTQsMzUgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfbG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFkbTEwMjFfZGF0YSAqZGF0YSA9IGFkbTEwMjFfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5sb3dfcG93ZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfbG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkbTEwMjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBsb3dfcG93ZXIgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApICE9IDA7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJaWYgKGxvd19wb3dlciAhPSBkYXRhLT5sb3dfcG93ZXIpIHsKKwkJaW50IGNvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgKKwkJCWNsaWVudCwgQURNMTAyMV9SRUdfQ09ORklHX1IpOworCQlkYXRhLT5sb3dfcG93ZXIgPSBsb3dfcG93ZXI7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRE0xMDIxX1JFR19DT05GSUdfVywKKwkJCShjb25maWcgJiAweEJGKSB8IChsb3dfcG93ZXIgPDwgNikpOworCX0KKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LAogCQkJICBzZXRfdGVtcF9tYXgsIDApOwpAQCAtMjMzLDYgKzI2MCw3IEBACiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAyKTsKIAogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxvd19wb3dlciwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbG93X3Bvd2VyLCBzZXRfbG93X3Bvd2VyKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkbTEwMjFfYXR0cmlidXRlc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCkBAIC0yNDcsNiArMjc1LDcgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfZmF1bHQuZGV2X2F0dHIuYXR0ciwKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJJmRldl9hdHRyX2xvd19wb3dlci5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTQxMiwyNSArNDQxLDI3IEBACiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgYWRtMTAyMSB1cGRhdGVcbiIpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJCWRhdGEtPnRlbXBbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURNMTAyMV9SRUdfVEVNUChpKSk7Ci0JCQlkYXRhLT50ZW1wX21heFtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRE0xMDIxX1JFR19UT1NfUihpKSk7Ci0JCQlkYXRhLT50ZW1wX21pbltpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRE0xMDIxX1JFR19USFlTVF9SKGkpKTsKKwkJCWRhdGEtPnRlbXBbaV0gPSAxMDAwICoKKwkJCQkoczgpIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgKKwkJCQkJY2xpZW50LCBBRE0xMDIxX1JFR19URU1QKGkpKTsKKwkJCWRhdGEtPnRlbXBfbWF4W2ldID0gMTAwMCAqCisJCQkJKHM4KSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoCisJCQkJCWNsaWVudCwgQURNMTAyMV9SRUdfVE9TX1IoaSkpOworCQkJZGF0YS0+dGVtcF9taW5baV0gPSAxMDAwICoKKwkJCQkoczgpIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgKKwkJCQkJY2xpZW50LCBBRE0xMDIxX1JFR19USFlTVF9SKGkpKTsKIAkJfQogCQlkYXRhLT5hbGFybXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAogCQkJCQkJQURNMTAyMV9SRUdfU1RBVFVTKSAmIDB4N2M7CiAJCWlmIChkYXRhLT50eXBlID09IGFkbTEwMjMpIHsKLQkJCWRhdGEtPnJlbW90ZV90ZW1wX3ByZWMgPQotCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRE0xMDIzX1JFR19SRU1fVEVNUF9QUkVDKTsKLQkJCWRhdGEtPnJlbW90ZV90ZW1wX29zX3ByZWMgPQotCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRE0xMDIzX1JFR19SRU1fVE9TX1BSRUMpOwotCQkJZGF0YS0+cmVtb3RlX3RlbXBfaHlzdF9wcmVjID0KLQkJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURNMTAyM19SRUdfUkVNX1RIWVNUX1BSRUMpOworCQkJLyogVGhlIEFETTEwMjMgcHJvdmlkZXMgMyBleHRyYSBiaXRzIG9mIHByZWNpc2lvbiBmb3IKKwkJCSAqIHRoZSByZW1vdGUgc2Vuc29yIGluIGV4dHJhIHJlZ2lzdGVycy4gKi8KKwkJCWRhdGEtPnRlbXBbMV0gKz0gMTI1ICogKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgKKwkJCQljbGllbnQsIEFETTEwMjNfUkVHX1JFTV9URU1QX1BSRUMpID4+IDUpOworCQkJZGF0YS0+dGVtcF9tYXhbMV0gKz0gMTI1ICogKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgKKwkJCQljbGllbnQsIEFETTEwMjNfUkVHX1JFTV9UT1NfUFJFQykgPj4gNSk7CisJCQlkYXRhLT50ZW1wX21pblsxXSArPSAxMjUgKiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKAorCQkJCWNsaWVudCwgQURNMTAyM19SRUdfUkVNX1RIWVNUX1BSRUMpID4+IDUpOwogCQkJZGF0YS0+cmVtb3RlX3RlbXBfb2Zmc2V0ID0KIAkJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAogCQkJCQkJQURNMTAyM19SRUdfUkVNX09GRlNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggNzUzYjM0OC4uN2VhNmE4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwpAQCAtMTc4LDYgKzE3OCw4IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIHN0YXRpYyBzMTYgcmVzdF94Owogc3RhdGljIHMxNiByZXN0X3k7CitzdGF0aWMgdTggYmFja2xpZ2h0X3N0YXRlWzJdOworCiBzdGF0aWMgc3RydWN0IGRldmljZSAqaHdtb25fZGV2Owogc3RhdGljIHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICphcHBsZXNtY19pZGV2OwogCkBAIC00OTcsMTcgKzQ5OSwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFwcGxlc21jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCisvKiBTeW5jaHJvbml6ZSBkZXZpY2Ugd2l0aCBtZW1vcml6ZWQgYmFja2xpZ2h0IHN0YXRlICovCitzdGF0aWMgaW50IGFwcGxlc21jX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGFwcGxlc21jX2RldmljZV9pbml0KCk7CisJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7CisJaWYgKGFwcGxlc21jX2xpZ2h0KQorCQlhcHBsZXNtY193cml0ZV9rZXkoQkFDS0xJR0hUX0tFWSwgYmFja2xpZ2h0X3N0YXRlLCAyKTsKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCXJldHVybiAwOwogfQogCisvKiBSZWluaXRpYWxpemUgZGV2aWNlIG9uIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uICovCitzdGF0aWMgaW50IGFwcGxlc21jX3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQgPSBhcHBsZXNtY19kZXZpY2VfaW5pdCgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGFwcGxlc21jX3BtX3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYXBwbGVzbWNfcG1fb3BzID0geworCS5yZXN1bWUgPSBhcHBsZXNtY19wbV9yZXN1bWUsCisJLnJlc3RvcmUgPSBhcHBsZXNtY19wbV9yZXN0b3JlLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXBwbGVzbWNfZHJpdmVyID0gewogCS5wcm9iZSA9IGFwcGxlc21jX3Byb2JlLAotCS5yZXN1bWUgPSBhcHBsZXNtY19yZXN1bWUsCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUgPSAiYXBwbGVzbWMiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJmFwcGxlc21jX3BtX29wcywKIAl9LAogfTsKIApAQCAtODA0LDE3ICs4MjUsMTAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLS8qIFN0b3JlIHRoZSBuZXh0IGJhY2tsaWdodCB2YWx1ZSB0byBiZSB3cml0dGVuIGJ5IHRoZSB3b3JrICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGJhY2tsaWdodF92YWx1ZTsKLQogc3RhdGljIHZvaWQgYXBwbGVzbWNfYmFja2xpZ2h0X3NldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JdTggYnVmZmVyWzJdOwotCiAJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7Ci0JYnVmZmVyWzBdID0gYmFja2xpZ2h0X3ZhbHVlOwotCWJ1ZmZlclsxXSA9IDB4MDA7Ci0JYXBwbGVzbWNfd3JpdGVfa2V5KEJBQ0tMSUdIVF9LRVksIGJ1ZmZlciwgMik7CisJYXBwbGVzbWNfd3JpdGVfa2V5KEJBQ0tMSUdIVF9LRVksIGJhY2tsaWdodF9zdGF0ZSwgMik7CiAJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKIH0KIHN0YXRpYyBERUNMQVJFX1dPUksoYmFja2xpZ2h0X3dvcmssICZhcHBsZXNtY19iYWNrbGlnaHRfc2V0KTsKQEAgLTgyNCw3ICs4MzgsNyBAQAogewogCWludCByZXQ7CiAKLQliYWNrbGlnaHRfdmFsdWUgPSB2YWx1ZTsKKwliYWNrbGlnaHRfc3RhdGVbMF0gPSB2YWx1ZTsKIAlyZXQgPSBxdWV1ZV93b3JrKGFwcGxlc21jX2xlZF93cSwgJmJhY2tsaWdodF93b3JrKTsKIAogCWlmIChkZWJ1ZyAmJiAoIXJldCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKaW5kZXggOTNjMTcyMi4uOTcyY2Y0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCisrKyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJCX0KIAl9CiAKLQlpZiAoaXNtb2JpbGUpIHsKKwlpZiAoaXNtb2JpbGUgfHwgYy0+eDg2X21vZGVsID09IDB4MWMpIHsKIAogCQllcnIgPSByZG1zcl9zYWZlX29uX2NwdShpZCwgMHhlZSwgJmVheCwgJmVkeCk7CiAJCWlmIChlcnIpIHsKQEAgLTQxNyw3ICs0MTcsNyBAQAogCQlpZiAoKGMtPmNwdWlkX2xldmVsIDwgMCkgfHwgKGMtPng4NiAhPSAweDYpIHx8CiAJCSAgICAhKChjLT54ODZfbW9kZWwgPT0gMHhlKSB8fCAoYy0+eDg2X21vZGVsID09IDB4ZikgfHwKIAkJCShjLT54ODZfbW9kZWwgPT0gMHgxNikgfHwgKGMtPng4Nl9tb2RlbCA9PSAweDE3KSB8fAotCQkJKGMtPng4Nl9tb2RlbCA9PSAweDFBKSkpIHsKKwkJCShjLT54ODZfbW9kZWwgPT0gMHgxQSkgfHwgKGMtPng4Nl9tb2RlbCA9PSAweDFjKSkpIHsKIAogCQkJLyogc3VwcG9ydGVkIENQVSBub3QgZm91bmQsIGJ1dCByZXBvcnQgdGhlIHVua25vd24KIAkJCSAgIGZhbWlseSA2IENQVSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwppbmRleCA5ODE0ZDUxLi4yYzJjYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwpAQCAtMTEzNCw3ICsxMTM0LDcgQEAKIAkJcmVzID0gUFdNX0ZSRVFfRlJPTV9SRUcoZGF0YS0+cHdtX2ZyZXFbaXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfUFdNX0VOQUJMRToKLQkJaWYgKGl4ID4gMykgeworCQlpZiAoaXggPj0gMykgewogCQkJcmVzID0gMTsgLyogcHdtWzUtNl0gaGFyZC13aXJlZCB0byBtYW51YWwgbW9kZSAqLwogCQl9IGVsc2UgewogCQkJcmVzID0gUFdNX0VOX0ZST01fUkVHKGRhdGEtPnB3bV9jb25maWdbaXhdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCmluZGV4IDI3MTMzOGIuLmNmNWFmYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwpAQCAtNDU0LDYgKzQ1NCwxNSBAQAogCQkJCQkocC0+Y2xpY2tfdGhyZXNoX3kgPDwgNCkpOwogCQl9CiAKKwkJaWYgKHAtPndha2V1cF9mbGFncyAmJiAoZGV2LT53aG9hbWkgPT0gTElTX1NJTkdMRV9JRCkpIHsKKwkJCWRldi0+d3JpdGUoZGV2LCBGRl9XVV9DRkdfMSwgcC0+d2FrZXVwX2ZsYWdzKTsKKwkJCWRldi0+d3JpdGUoZGV2LCBGRl9XVV9USFNfMSwgcC0+d2FrZXVwX3RocmVzaCAmIDB4N2YpOworCQkJLyogZGVmYXVsdCB0byAyLjVtcyBmb3Igbm93ICovCisJCQlkZXYtPndyaXRlKGRldiwgRkZfV1VfRFVSQVRJT05fMSwgMSk7CisJCQkvKiBlbmFibGUgaGlnaCBwYXNzIGZpbHRlciBmb3IgYm90aCBmcmVlLWZhbGwgdW5pdHMgKi8KKwkJCWRldi0+d3JpdGUoZGV2LCBDVFJMX1JFRzIsIEhQX0ZGX1dVMSB8IEhQX0ZGX1dVMik7CisJCX0KKwogCQlpZiAocC0+aXJxX2NmZykKIAkJCWRldi0+d3JpdGUoZGV2LCBDVFJMX1JFRzMsIHAtPmlycV9jZmcpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmggYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oCmluZGV4IGUzMjBlMmYuLjNlMWZmNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmgKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuaApAQCAtNTgsMTUgKzU4LDE3IEBACiAJT1VUWl9MCQk9IDB4MkMsCiAJT1VUWl9ICQk9IDB4MkQsCiAJT1VUWgkJPSAweDJELAotCUZGX1dVX0NGRwk9IDB4MzAsCi0JRkZfV1VfU1JDCT0gMHgzMSwKLQlGRl9XVV9BQ0sJPSAweDMyLAotCUZGX1dVX1RIU19MCT0gMHgzNCwKLQlGRl9XVV9USFNfSAk9IDB4MzUsCi0JRkZfV1VfRFVSQVRJT04JPSAweDM2LAogfTsKIAogZW51bSBsaXMzMDJkX3JlZyB7CisJRkZfV1VfQ0ZHXzEJPSAweDMwLAorCUZGX1dVX1NSQ18xCT0gMHgzMSwKKwlGRl9XVV9USFNfMQk9IDB4MzIsCisJRkZfV1VfRFVSQVRJT05fMSA9IDB4MzMsCisJRkZfV1VfQ0ZHXzIJPSAweDM0LAorCUZGX1dVX1NSQ18yCT0gMHgzNSwKKwlGRl9XVV9USFNfMgk9IDB4MzYsCisJRkZfV1VfRFVSQVRJT05fMiA9IDB4MzcsCiAJQ0xJQ0tfQ0ZHCT0gMHgzOCwKIAlDTElDS19TUkMJPSAweDM5LAogCUNMSUNLX1RIU1lfWAk9IDB4M0IsCkBAIC03Nyw2ICs3OSwxMiBAQAogfTsKIAogZW51bSBsaXMzbHYwMmRfcmVnIHsKKwlGRl9XVV9DRkcJPSAweDMwLAorCUZGX1dVX1NSQwk9IDB4MzEsCisJRkZfV1VfQUNLCT0gMHgzMiwKKwlGRl9XVV9USFNfTAk9IDB4MzQsCisJRkZfV1VfVEhTX0gJPSAweDM1LAorCUZGX1dVX0RVUkFUSU9OCT0gMHgzNiwKIAlERF9DRkcJCT0gMHgzOCwKIAlERF9TUkMJCT0gMHgzOSwKIAlERF9BQ0sJCT0gMHgzQSwKQEAgLTEwNyw2ICsxMTUsMTAgQEAKIAlDVFJMMl9GUwk9IDB4ODAsIC8qIEZ1bGwgU2NhbGUgc2VsZWN0aW9uICovCiB9OwogCitlbnVtIGxpczMwMmRfY3RybDIgeworCUhQX0ZGX1dVMgk9IDB4MDgsCisJSFBfRkZfV1UxCT0gMHgwNCwKK307CiAKIGVudW0gbGlzM2x2MDJkX2N0cmwzIHsKIAlDVFJMM19DRlMwCT0gMHgwMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmRfc3BpLmMKaW5kZXggMzgyN2ZmMC4uZWNkNzM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9saXMzbHYwMmRfc3BpLmMKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmRfc3BpLmMKQEAgLTY2LDE3ICs2NiwxNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JbGlzM19kZXYuYnVzX3ByaXYgPSBzcGk7Ci0JbGlzM19kZXYuaW5pdCA9IGxpczNfc3BpX2luaXQ7Ci0JbGlzM19kZXYucmVhZCA9IGxpczNfc3BpX3JlYWQ7Ci0JbGlzM19kZXYud3JpdGUgPSBsaXMzX3NwaV93cml0ZTsKLQlsaXMzX2Rldi5pcnEgPSBzcGktPmlycTsKLQlsaXMzX2Rldi5hYyA9IGxpczNsdjAyZF9heGlzX25vcm1hbDsKLQlsaXMzX2Rldi5wZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJbGlzM19kZXYuYnVzX3ByaXYJPSBzcGk7CisJbGlzM19kZXYuaW5pdAkJPSBsaXMzX3NwaV9pbml0OworCWxpczNfZGV2LnJlYWQJCT0gbGlzM19zcGlfcmVhZDsKKwlsaXMzX2Rldi53cml0ZQkJPSBsaXMzX3NwaV93cml0ZTsKKwlsaXMzX2Rldi5pcnEJCT0gc3BpLT5pcnE7CisJbGlzM19kZXYuYWMJCT0gbGlzM2x2MDJkX2F4aXNfbm9ybWFsOworCWxpczNfZGV2LnBkYXRhCQk9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3BpX3NldF9kcnZkYXRhKHNwaSwgJmxpczNfZGV2KTsKIAotCXJldCA9IGxpczNsdjAyZF9pbml0X2RldmljZSgmbGlzM19kZXYpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGxpczNsdjAyZF9pbml0X2RldmljZSgmbGlzM19kZXYpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaXMzMDJkbF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCkBAIC04Nyw2ICs4NiwzMiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGxpczNsdjAyZF9zcGlfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlpZiAoIWxpczMtPnBkYXRhLT53YWtldXBfZmxhZ3MpCisJCWxpczNsdjAyZF9wb3dlcm9mZigmbGlzM19kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGlzM2x2MDJkX3NwaV9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlpZiAoIWxpczMtPnBkYXRhLT53YWtldXBfZmxhZ3MpCisJCWxpczNsdjAyZF9wb3dlcm9uKGxpczMpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGxpczNsdjAyZF9zcGlfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGxpczNsdjAyZF9zcGlfcmVzdW1lCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbGlzMzAyZGxfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyCSA9IHsKIAkJLm5hbWUgICA9IERSVl9OQU1FLApAQCAtOTQsNiArMTE5LDggQEAKIAl9LAogCS5wcm9iZQk9IGxpczMwMmRsX3NwaV9wcm9iZSwKIAkucmVtb3ZlCT0gX19kZXZleGl0X3AobGlzMzAyZGxfc3BpX3JlbW92ZSksCisJLnN1c3BlbmQgPSBsaXMzbHYwMmRfc3BpX3N1c3BlbmQsCisJLnJlc3VtZSAgPSBsaXMzbHYwMmRfc3BpX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGxpczMwMmRsX2luaXQodm9pZCkKQEAgLTExMiw0ICsxMzksNCBAQAogTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigibGlzM2x2MDJkIFNQSSBnbHVlIGxheWVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KK01PRFVMRV9BTElBUygic3BpOiIgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTcwLmMgYi9kcml2ZXJzL2h3bW9uL2xtNzAuYwppbmRleCBhZTYyMDRmLi5hYjhhNWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzAuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogCkBAIC0xMzAsMTEgKzEzMSwyMCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjb21tb25fcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGNoaXApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsbTcwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CisJaW50IGNoaXAgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbG03MCAqcF9sbTcwOwogCWludCBzdGF0dXM7CiAKKwkvKiBzaWduYWxpbmcgaXMgU1BJX01PREVfMCBmb3IgYm90aCBMTTcwIGFuZCBUTVAxMjEgKi8KKwlpZiAoc3BpLT5tb2RlICYgKFNQSV9DUE9MIHwgU1BJX0NQSEEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIDMtd2lyZSBsaW5rIChzaGFyZWQgU0kvU08pIGZvciBMTTcwICovCisJaWYgKGNoaXAgPT0gTE03MF9DSElQX0xNNzAgJiYgIShzcGktPm1vZGUgJiBTUElfM1dJUkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIE5PVEU6ICB3ZSBhc3N1bWUgOC1iaXQgd29yZHMsIGFuZCBjb252ZXJ0IHRvIDE2IGJpdHMgbWFudWFsbHkgKi8KIAogCXBfbG03MCA9IGt6YWxsb2Moc2l6ZW9mICpwX2xtNzAsIEdGUF9LRVJORUwpOwpAQCAtMTcwLDI0ICsxODAsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGxtNzBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQkvKiBzaWduYWxpbmcgaXMgU1BJX01PREVfMCBvbiBhIDMtd2lyZSBsaW5rIChzaGFyZWQgU0kvU08pICovCi0JaWYgKChzcGktPm1vZGUgJiAoU1BJX0NQT0wgfCBTUElfQ1BIQSkpIHx8ICEoc3BpLT5tb2RlICYgU1BJXzNXSVJFKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gY29tbW9uX3Byb2JlKHNwaSwgTE03MF9DSElQX0xNNzApOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB0bXAxMjFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQkvKiBzaWduYWxpbmcgaXMgU1BJX01PREVfMCB3aXRoIG9ubHkgTUlTTyBjb25uZWN0ZWQgKi8KLQlpZiAoc3BpLT5tb2RlICYgKFNQSV9DUE9MIHwgU1BJX0NQSEEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBjb21tb25fcHJvYmUoc3BpLCBMTTcwX0NISVBfVE1QMTIxKTsKLX0KLQogc3RhdGljIGludCBfX2RldmV4aXQgbG03MF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgbG03MCAqcF9sbTcwID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CkBAIC0yMDEsNDEgKzE5MywzMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgdG1wMTIxX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJ0bXAxMjEiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQk9IHRtcDEyMV9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AobG03MF9yZW1vdmUpLAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgbG03MF9pZHNbXSA9IHsKKwl7ICJsbTcwIiwgICBMTTcwX0NISVBfTE03MCB9LAorCXsgInRtcDEyMSIsIExNNzBfQ0hJUF9UTVAxMjEgfSwKKwl7IH0sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGxtNzBfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxtNzBfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImxtNzAiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAorCS5pZF90YWJsZSA9IGxtNzBfaWRzLAogCS5wcm9iZQk9IGxtNzBfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGxtNzBfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfbG03MCh2b2lkKQogewotCWludCByZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZsbTcwX2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnRtcDEyMV9kcml2ZXIpOwotCWlmIChyZXQpCi0JCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbG03MF9kcml2ZXIpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbG03MF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9sbTcwKHZvaWQpCiB7CiAJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsbTcwX2RyaXZlcik7Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0bXAxMjFfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9sbTcwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTExMS5jIGIvZHJpdmVycy9od21vbi9tYXgxMTExLmMKaW5kZXggYmZhYTY2NS4uOWFjNDk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxMTExLmMKKysrIGIvZHJpdmVycy9od21vbi9tYXgxMTExLmMKQEAgLTI0MiwzICsyNDIsNCBAQAogTU9EVUxFX0FVVEhPUigiRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDExMTEgQURDIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6bWF4MTExMSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zaHQxNS5jIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCmluZGV4IDYyOTBhMjUuLjMwM2MwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYworKysgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzaHQxNV9hdHRyX2dyb3VwKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInN5c2ZzIGNyZWF0ZSBmYWlsZWQiKTsKLQkJZ290byBlcnJfZnJlZV9kYXRhOworCQlnb3RvIGVycl9yZWxlYXNlX2dwaW9fZGF0YTsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKSwKQEAgLTU4MSwxMCArNTgxLDEyIEBACiAJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRhdGEtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBlcnJfcmVsZWFzZV9ncGlvX2RhdGE7CisJCWdvdG8gZXJyX3JlbGVhc2VfaXJxOwogCX0KIAlyZXR1cm4gMDsKIAorZXJyX3JlbGVhc2VfaXJxOgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpLCBkYXRhKTsKIGVycl9yZWxlYXNlX2dwaW9fZGF0YToKIAlncGlvX2ZyZWUoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSk7CiBlcnJfcmVsZWFzZV9ncGlvX3NjazoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL0tjb25maWcgYi9kcml2ZXJzL2kyYy9LY29uZmlnCmluZGV4IDcxMWNhMDguLmQ3ZWNlMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvS2NvbmZpZwpAQCAtMjcsNiArMjcsMTQgQEAKIAlib29sZWFuCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBJMkNfQ09NUEFUCisJYm9vbGVhbiAiRW5hYmxlIGNvbXBhdGliaWxpdHkgYml0cyBmb3Igb2xkIHVzZXItc3BhY2UiCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biBsbS1zZW5zb3JzIDMuMS4xIG9yIG9sZGVyLCBvciBhbnkKKwkgIG90aGVyIHVzZXItc3BhY2UgcGFja2FnZSB3aGljaCBleHBlY3RzIGkyYyBhZGFwdGVycyB0byBiZSBjbGFzcworCSAgZGV2aWNlcy4gSWYgeW91IGRvbid0IGtub3csIHNheSBZLgorCiBjb25maWcgSTJDX0NIQVJERVYKIAl0cmlzdGF0ZSAiSTJDIGRldmljZSBpbnRlcmZhY2UiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRleCA4MjA2NDQyLi42YmVkZDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtMTEzLDcgKzExMyw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtaXNjaC4KIAogY29uZmlnIEkyQ19QSUlYNAotCXRyaXN0YXRlICJJbnRlbCBQSUlYNCBhbmQgY29tcGF0aWJsZSAoQVRJL1NlcnZlcndvcmtzL0Jyb2FkY29tL1NNU0MpIgorCXRyaXN0YXRlICJJbnRlbCBQSUlYNCBhbmQgY29tcGF0aWJsZSAoQVRJL0FNRC9TZXJ2ZXJ3b3Jrcy9Ccm9hZGNvbS9TTVNDKSIKIAlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZSBJbnRlbApAQCAtMTI4LDYgKzEyOCw3IEBACiAJICAgIEFUSSBTQjYwMAogCSAgICBBVEkgU0I3MDAKIAkgICAgQVRJIFNCODAwCisJICAgIEFNRCBTQjkwMAogCSAgICBTZXJ2ZXJ3b3JrcyBPU0I0CiAJICAgIFNlcnZlcndvcmtzIENTQjUKIAkgICAgU2VydmVyd29ya3MgQ1NCNgpAQCAtMjMxLDYgKzIzMiwyMiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXZpYXByby4KIAoraWYgQUNQSQorCitjb21tZW50ICJBQ1BJIGRyaXZlcnMiCisKK2NvbmZpZyBJMkNfU0NNSQorCXRyaXN0YXRlICJTTUJ1cyBDb250cm9sIE1ldGhvZCBJbnRlcmZhY2UiCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFNNQnVzIENvbnRyb2wgTWV0aG9kIEludGVyZmFjZS4gSXQgbmVlZHMgdGhlCisJICBCSU9TIHRvIGRlY2xhcmUgQUNQSSBjb250cm9sIG1ldGhvZHMgYXMgZGVzY3JpYmVkIGluIHRoZSBTTUJ1cyBDb250cm9sCisJICBNZXRob2QgSW50ZXJmYWNlIHNwZWNpZmljYXRpb24uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGkyYy1zY21pLgorCitlbmRpZiAjIEFDUEkKKwogY29tbWVudCAiTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIgogCWRlcGVuZHMgb24gUFBDX0NIUlAgfHwgUFBDX1BNQUMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IGU2NTQyNjNiLi5mZjkzN2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCkBAIC0yLDYgKzIsOSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGkyYyBidXMgZHJpdmVycy4KICMKIAorIyBBQ1BJIGRyaXZlcnMKK29iai0kKENPTkZJR19JMkNfU0NNSSkJCSs9IGkyYy1zY21pLm8KKwogIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwogb2JqLSQoQ09ORklHX0kyQ19BTEkxNTM1KQkrPSBpMmMtYWxpMTUzNS5vCiBvYmotJChDT05GSUdfSTJDX0FMSTE1NjMpCSs9IGkyYy1hbGkxNTYzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCmluZGV4IDBiNDg2YTYuLjRhZmJhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwpAQCAtNjA5LDEzICs2MDksMTIgQEAKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZpMmNfaW14X2RyaXZlciwgaTJjX2lteF9wcm9iZSk7CiB9CitzdWJzeXNfaW5pdGNhbGwoaTJjX2FkYXBfaW14X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaTJjX2FkYXBfaW14X2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX2lteF9kcml2ZXIpOwogfQotCi1tb2R1bGVfaW5pdChpMmNfYWRhcF9pbXhfaW5pdCk7CiBtb2R1bGVfZXhpdChpMmNfYWRhcF9pbXhfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKaW5kZXggYzM4NjlkOS4uYmJhYjBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKQEAgLTI5MywxMyArMjkzLDEzIEBACiAJfQogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgaXJxcmV0dXJuX3QKIG12NjR4eHhfaTJjX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBtdjY0eHh4X2kyY19kYXRhCSpkcnZfZGF0YSA9IGRldl9pZDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXUzMgkJc3RhdHVzOwotCWludAkJcmMgPSBJUlFfTk9ORTsKKwlpcnFyZXR1cm5fdAlyYyA9IElSUV9OT05FOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7CiAJd2hpbGUgKHJlYWRsKGRydl9kYXRhLT5yZWdfYmFzZSArIE1WNjRYWFhfSTJDX1JFR19DT05UUk9MKSAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKaW5kZXggMDI0OWE3ZC4uYTc4MmM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwpAQCAtMjIsNiArMjIsNyBAQAogCUludGVsIFBJSVg0LCA0NDBNWAogCVNlcnZlcndvcmtzIE9TQjQsIENTQjUsIENTQjYsIEhULTEwMDAsIEhULTExMDAKIAlBVEkgSVhQMjAwLCBJWFAzMDAsIElYUDQwMCwgU0I2MDAsIFNCNzAwLCBTQjgwMAorCUFNRCBTQjkwMAogCVNNU0MgVmljdG9yeTY2CiAKICAgIE5vdGU6IHdlIGFzc3VtZSB0aGVyZSBjYW4gb25seSBiZSBvbmUgZGV2aWNlLCB3aXRoIG9uZSBTTUJ1cyBpbnRlcmZhY2UuCkBAIC00NzksNiArNDgwLDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1NCWDAwX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCiAJCSAgICAgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLApAQCAtNDk5LDkgKzUwMSwxMCBAQAogewogCWludCByZXR2YWw7CiAKLQlpZiAoKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRJKSAmJgotCSAgICAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVElfU0JYMDBfU01CVVMpICYmCi0JICAgIChkZXYtPnJldmlzaW9uID49IDB4NDApKQorCWlmICgoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkgJiYKKwkgICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVRJX1NCWDAwX1NNQlVTICYmCisJICAgICBkZXYtPnJldmlzaW9uID49IDB4NDApIHx8CisJICAgIGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EKQogCQkvKiBiYXNlIGFkZHJlc3MgbG9jYXRpb24gZXRjIGNoYW5nZWQgaW4gU0I4MDAgKi8KIAkJcmV0dmFsID0gcGlpeDRfc2V0dXBfc2I4MDAoZGV2LCBpZCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKaW5kZXggZWMxNWNmZi4uNmZmNmMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCkBAIC01ODYsNyArNTg2LDggQEAKIAlhbGdfZGF0YS0+bWlmLnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpMmNfcG54LT5hZGFwdGVyOwogCiAJLyogUmVnaXN0ZXIgSS9PIHJlc291cmNlICovCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSwgcGRldi0+bmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSwKKwkJCQlwZGV2LT5uYW1lKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCSAgICAgICAiSS9PIHJlZ2lvbiAweCUwOHggZm9yIEkyQyBhbHJlYWR5IGluIHVzZS5cbiIsCiAJCSAgICAgICBhbGdfZGF0YS0+YmFzZSk7CkBAIC02NTAsNyArNjUxLDcgQEAKIG91dF91bm1hcDoKIAlpb3VubWFwKCh2b2lkICopYWxnX2RhdGEtPmlvYWRkcik7CiBvdXRfcmVsZWFzZToKLQlyZWxlYXNlX3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKIG91dF9kcnZkYXRhOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogb3V0OgpAQCAtNjY3LDcgKzY2OCw3IEBACiAJaTJjX2RlbF9hZGFwdGVyKGFkYXApOwogCWkyY19wbngtPnNldF9jbG9ja19zdG9wKHBkZXYpOwogCWlvdW5tYXAoKHZvaWQgKilhbGdfZGF0YS0+aW9hZGRyKTsKLQlyZWxlYXNlX3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zY21pLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzZhMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zY21pLmMKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgKiBTTUJ1cyBkcml2ZXIgZm9yIEFDUEkgU01CdXMgQ01JCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IENyYW5lIENhaSA8Y3JhbmUuY2FpQGFtZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisKKyNkZWZpbmUgQUNQSV9TTUJVU19IQ19DTEFTUwkJInNtYnVzIgorI2RlZmluZSBBQ1BJX1NNQlVTX0hDX0RFVklDRV9OQU1FCSJjbWkiCisKK0FDUElfTU9EVUxFX05BTUUoInNtYnVzX2NtaSIpOworCitzdHJ1Y3Qgc21idXNfbWV0aG9kc190IHsKKwljaGFyICptdF9pbmZvOworCWNoYXIgKm10X3NicjsKKwljaGFyICptdF9zYnc7Cit9OworCitzdHJ1Y3QgYWNwaV9zbWJ1c19jbWkgeworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsKKwl1OCBjYXBfaW5mbzoxOworCXU4IGNhcF9yZWFkOjE7CisJdTggY2FwX3dyaXRlOjE7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNtYnVzX21ldGhvZHNfdCBzbWJ1c19tZXRob2RzID0geworCS5tdF9pbmZvID0gIl9TQkkiLAorCS5tdF9zYnIgID0gIl9TQlIiLAorCS5tdF9zYncgID0gIl9TQlciLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBhY3BpX3NtYnVzX2NtaV9pZHNbXSA9IHsKKwl7IlNNQlVTMDEiLCAwfSwKKwl7IiIsIDB9Cit9OworCisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX09LCQkJMHgwMAorI2RlZmluZSBBQ1BJX1NNQlVTX1NUQVRVU19GQUlMCQkJMHgwNworI2RlZmluZSBBQ1BJX1NNQlVTX1NUQVRVU19ETkFLCQkJMHgxMAorI2RlZmluZSBBQ1BJX1NNQlVTX1NUQVRVU19ERVJSCQkJMHgxMQorI2RlZmluZSBBQ1BJX1NNQlVTX1NUQVRVU19DTURfREVOWQkJMHgxMgorI2RlZmluZSBBQ1BJX1NNQlVTX1NUQVRVU19VTktOT1dOCQkweDEzCisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX0FDQ19ERU5ZCQkweDE3CisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX1RJTUVPVVQJCTB4MTgKKyNkZWZpbmUgQUNQSV9TTUJVU19TVEFUVVNfTk9UU1VQCQkweDE5CisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX0JVU1kJCQkweDFhCisjZGVmaW5lIEFDUElfU01CVVNfU1RBVFVTX1BFQwkJCTB4MWYKKworI2RlZmluZSBBQ1BJX1NNQlVTX1BSVENMX1dSSVRFCQkJMHgwMAorI2RlZmluZSBBQ1BJX1NNQlVTX1BSVENMX1JFQUQJCQkweDAxCisjZGVmaW5lIEFDUElfU01CVVNfUFJUQ0xfUVVJQ0sJCQkweDAyCisjZGVmaW5lIEFDUElfU01CVVNfUFJUQ0xfQllURQkJCTB4MDQKKyNkZWZpbmUgQUNQSV9TTUJVU19QUlRDTF9CWVRFX0RBVEEJCTB4MDYKKyNkZWZpbmUgQUNQSV9TTUJVU19QUlRDTF9XT1JEX0RBVEEJCTB4MDgKKyNkZWZpbmUgQUNQSV9TTUJVU19QUlRDTF9CTE9DS19EQVRBCQkweDBhCisKKworc3RhdGljIGludAorYWNwaV9zbWJ1c19jbWlfYWNjZXNzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdTE2IGFkZHIsIHVuc2lnbmVkIHNob3J0IGZsYWdzLAorCQkgICBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsIGludCBzaXplLAorCQkgICB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgYWNwaV9zbWJ1c19jbWkgKnNtYnVzX2NtaSA9IGFkYXAtPmFsZ29fZGF0YTsKKwl1bnNpZ25lZCBjaGFyIHByb3RvY29sOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJdW5pb24gYWNwaV9vYmplY3QgbXRfcGFyYW1zWzVdOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGtnOworCWNoYXIgKm1ldGhvZDsKKwlpbnQgbGVuID0gMDsKKworCWRldl9kYmcoJmFkYXAtPmRldiwgImFjY2VzcyBzaXplOiAlZCAlc1xuIiwgc2l6ZSwKKwkJKHJlYWRfd3JpdGUpID8gIlJFQUQiIDogIldSSVRFIik7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSBJMkNfU01CVVNfUVVJQ0s6CisJCXByb3RvY29sID0gQUNQSV9TTUJVU19QUlRDTF9RVUlDSzsKKwkJY29tbWFuZCA9IDA7CisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkgeworCQkJbXRfcGFyYW1zWzNdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwkJCW10X3BhcmFtc1szXS5pbnRlZ2VyLnZhbHVlID0gMDsKKwkJCW10X3BhcmFtc1s0XS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJCQltdF9wYXJhbXNbNF0uaW50ZWdlci52YWx1ZSA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEkyQ19TTUJVU19CWVRFOgorCQlwcm90b2NvbCA9IEFDUElfU01CVVNfUFJUQ0xfQllURTsKKwkJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1dSSVRFKSB7CisJCQltdF9wYXJhbXNbM10udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCQkJbXRfcGFyYW1zWzNdLmludGVnZXIudmFsdWUgPSAwOworCQkJbXRfcGFyYW1zWzRdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwkJCW10X3BhcmFtc1s0XS5pbnRlZ2VyLnZhbHVlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNvbW1hbmQgPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJMkNfU01CVVNfQllURV9EQVRBOgorCQlwcm90b2NvbCA9IEFDUElfU01CVVNfUFJUQ0xfQllURV9EQVRBOworCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpIHsKKwkJCW10X3BhcmFtc1szXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJCQltdF9wYXJhbXNbM10uaW50ZWdlci52YWx1ZSA9IDE7CisJCQltdF9wYXJhbXNbNF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCQkJbXRfcGFyYW1zWzRdLmludGVnZXIudmFsdWUgPSBkYXRhLT5ieXRlOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJMkNfU01CVVNfV09SRF9EQVRBOgorCQlwcm90b2NvbCA9IEFDUElfU01CVVNfUFJUQ0xfV09SRF9EQVRBOworCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpIHsKKwkJCW10X3BhcmFtc1szXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJCQltdF9wYXJhbXNbM10uaW50ZWdlci52YWx1ZSA9IDI7CisJCQltdF9wYXJhbXNbNF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCQkJbXRfcGFyYW1zWzRdLmludGVnZXIudmFsdWUgPSBkYXRhLT53b3JkOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJMkNfU01CVVNfQkxPQ0tfREFUQToKKwkJcHJvdG9jb2wgPSBBQ1BJX1NNQlVTX1BSVENMX0JMT0NLX0RBVEE7CisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkgeworCQkJbGVuID0gZGF0YS0+YmxvY2tbMF07CisJCQlpZiAobGVuID09IDAgfHwgbGVuID4gSTJDX1NNQlVTX0JMT0NLX01BWCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW10X3BhcmFtc1szXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJCQltdF9wYXJhbXNbM10uaW50ZWdlci52YWx1ZSA9IGxlbjsKKwkJCW10X3BhcmFtc1s0XS50eXBlID0gQUNQSV9UWVBFX0JVRkZFUjsKKwkJCW10X3BhcmFtc1s0XS5idWZmZXIucG9pbnRlciA9IGRhdGEtPmJsb2NrICsgMTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl93YXJuKCZhZGFwLT5kZXYsICJVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiAlZFxuIiwgc2l6ZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgeworCQlwcm90b2NvbCB8PSBBQ1BJX1NNQlVTX1BSVENMX1JFQUQ7CisJCW1ldGhvZCA9IHNtYnVzX21ldGhvZHMubXRfc2JyOworCQlpbnB1dC5jb3VudCA9IDM7CisJfSBlbHNlIHsKKwkJcHJvdG9jb2wgfD0gQUNQSV9TTUJVU19QUlRDTF9XUklURTsKKwkJbWV0aG9kID0gc21idXNfbWV0aG9kcy5tdF9zYnc7CisJCWlucHV0LmNvdW50ID0gNTsKKwl9CisKKwlpbnB1dC5wb2ludGVyID0gbXRfcGFyYW1zOworCW10X3BhcmFtc1swXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJbXRfcGFyYW1zWzBdLmludGVnZXIudmFsdWUgPSBwcm90b2NvbDsKKwltdF9wYXJhbXNbMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCW10X3BhcmFtc1sxXS5pbnRlZ2VyLnZhbHVlID0gYWRkcjsKKwltdF9wYXJhbXNbMl0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCW10X3BhcmFtc1syXS5pbnRlZ2VyLnZhbHVlID0gY29tbWFuZDsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHNtYnVzX2NtaS0+aGFuZGxlLCBtZXRob2QsICZpbnB1dCwKKwkJCQkgICAgICAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkV2YWx1YXRpbmcgJXM6ICVpIiwgbWV0aG9kLCBzdGF0dXMpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcGtnID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKHBrZyAmJiBwa2ctPnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpCisJCW9iaiA9IHBrZy0+cGFja2FnZS5lbGVtZW50czsKKwllbHNlIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgYXJndW1lbnQgdHlwZSIpKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCWlmIChvYmogPT0gTlVMTCB8fCBvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgYXJndW1lbnQgdHlwZSIpKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzdWx0ID0gb2JqLT5pbnRlZ2VyLnZhbHVlOworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIiVzIHJldHVybiBzdGF0dXM6ICVpXG4iLAorCQkJICBtZXRob2QsIHJlc3VsdCkpOworCisJc3dpdGNoIChyZXN1bHQpIHsKKwljYXNlIEFDUElfU01CVVNfU1RBVFVTX09LOgorCQlyZXN1bHQgPSAwOworCQlicmVhazsKKwljYXNlIEFDUElfU01CVVNfU1RBVFVTX0JVU1k6CisJCXJlc3VsdCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJY2FzZSBBQ1BJX1NNQlVTX1NUQVRVU19USU1FT1VUOgorCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dDsKKwljYXNlIEFDUElfU01CVVNfU1RBVFVTX0ROQUs6CisJCXJlc3VsdCA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1dSSVRFIHx8IHNpemUgPT0gSTJDX1NNQlVTX1FVSUNLKQorCQlnb3RvIG91dDsKKworCW9iaiA9IHBrZy0+cGFja2FnZS5lbGVtZW50cyArIDE7CisJaWYgKG9iaiA9PSBOVUxMIHx8IG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhcmd1bWVudCB0eXBlIikpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlsZW4gPSBvYmotPmludGVnZXIudmFsdWU7CisJb2JqID0gcGtnLT5wYWNrYWdlLmVsZW1lbnRzICsgMjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIEkyQ19TTUJVU19CWVRFOgorCWNhc2UgSTJDX1NNQlVTX0JZVEVfREFUQToKKwljYXNlIEkyQ19TTUJVU19XT1JEX0RBVEE6CisJCWlmIChvYmogPT0gTlVMTCB8fCBvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFyZ3VtZW50IHR5cGUiKSk7CisJCQlyZXN1bHQgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGxlbiA9PSAyKQorCQkJZGF0YS0+d29yZCA9IG9iai0+aW50ZWdlci52YWx1ZTsKKwkJZWxzZQorCQkJZGF0YS0+Ynl0ZSA9IG9iai0+aW50ZWdlci52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBJMkNfU01CVVNfQkxPQ0tfREFUQToKKwkJaWYgKG9iaiA9PSBOVUxMIHx8IG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBhcmd1bWVudCB0eXBlIikpOworCQkJcmVzdWx0ID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBJMkNfU01CVVNfQkxPQ0tfTUFYKQorCQkJcmV0dXJuIC1FUFJPVE87CisJCWRhdGEtPmJsb2NrWzBdID0gbGVuOworCQltZW1jcHkoZGF0YS0+YmxvY2sgKyAxLCBvYmotPmJ1ZmZlci5wb2ludGVyLCBsZW4pOworCQlicmVhazsKKwl9CisKK291dDoKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJZGV2X2RiZygmYWRhcC0+ZGV2LCAiVHJhbnNhY3Rpb24gc3RhdHVzOiAlaVxuIiwgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdTMyIGFjcGlfc21idXNfY21pX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhY3BpX3NtYnVzX2NtaSAqc21idXNfY21pID0gYWRhcHRlci0+YWxnb19kYXRhOworCXUzMiByZXQ7CisKKwlyZXQgPSBzbWJ1c19jbWktPmNhcF9yZWFkIHwgc21idXNfY21pLT5jYXBfd3JpdGUgPworCQlJMkNfRlVOQ19TTUJVU19RVUlDSyA6IDA7CisKKwlyZXQgfD0gc21idXNfY21pLT5jYXBfcmVhZCA/CisJCShJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfAorCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSB8CisJCUkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBIHwKKwkJSTJDX0ZVTkNfU01CVVNfUkVBRF9CTE9DS19EQVRBKSA6IDA7CisKKwlyZXQgfD0gc21idXNfY21pLT5jYXBfd3JpdGUgPworCQkoSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSB8CisJCUkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSB8CisJCUkyQ19GVU5DX1NNQlVTX1dSSVRFX1dPUkRfREFUQSB8CisJCUkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEEpIDogMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhY3BpX3NtYnVzX2NtaV9hbGdvcml0aG0gPSB7CisJLnNtYnVzX3hmZXIgPSBhY3BpX3NtYnVzX2NtaV9hY2Nlc3MsCisJLmZ1bmN0aW9uYWxpdHkgPSBhY3BpX3NtYnVzX2NtaV9mdW5jLAorfTsKKworCitzdGF0aWMgaW50IGFjcGlfc21idXNfY21pX2FkZF9jYXAoc3RydWN0IGFjcGlfc21idXNfY21pICpzbWJ1c19jbWksCisJCQkJICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoIXN0cmNtcChuYW1lLCBzbWJ1c19tZXRob2RzLm10X2luZm8pKSB7CisJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHNtYnVzX2NtaS0+aGFuZGxlLAorCQkJCQlzbWJ1c19tZXRob2RzLm10X2luZm8sCisJCQkJCU5VTEwsICZidWZmZXIpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJFdmFsdWF0aW5nICVzOiAlaSIsCisJCQkJICAgc21idXNfbWV0aG9kcy5tdF9pbmZvLCBzdGF0dXMpKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJb2JqID0gYnVmZmVyLnBvaW50ZXI7CisJCWlmIChvYmogJiYgb2JqLT50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKQorCQkJb2JqID0gb2JqLT5wYWNrYWdlLmVsZW1lbnRzOworCQllbHNlIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFyZ3VtZW50IHR5cGUiKSk7CisJCQlrZnJlZShidWZmZXIucG9pbnRlcik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWlmIChvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFyZ3VtZW50IHR5cGUiKSk7CisJCQlrZnJlZShidWZmZXIucG9pbnRlcik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfSBlbHNlCisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJTTUJ1cyBDTUkgVmVyc2lvbiAleCIKKwkJCQkJICAiXG4iLCAoaW50KW9iai0+aW50ZWdlci52YWx1ZSkpOworCisJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJc21idXNfY21pLT5jYXBfaW5mbyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsIHNtYnVzX21ldGhvZHMubXRfc2JyKSkKKwkJc21idXNfY21pLT5jYXBfcmVhZCA9IDE7CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBzbWJ1c19tZXRob2RzLm10X3NidykpCisJCXNtYnVzX2NtaS0+Y2FwX3dyaXRlID0gMTsKKwllbHNlCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlVuc3VwcG9ydGVkIENNSSBtZXRob2Q6ICVzXG4iLAorCQkJCSBuYW1lKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfc21idXNfY21pX3F1ZXJ5X21ldGhvZHMoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbGV2ZWwsCisJCQl2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKQoreworCWNoYXIgbm9kZV9uYW1lWzVdOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IHNpemVvZihub2RlX25hbWUpLCBub2RlX25hbWUgfTsKKwlzdHJ1Y3QgYWNwaV9zbWJ1c19jbWkgKnNtYnVzX2NtaSA9IGNvbnRleHQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfU0lOR0xFX05BTUUsICZidWZmZXIpOworCisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlhY3BpX3NtYnVzX2NtaV9hZGRfY2FwKHNtYnVzX2NtaSwgbm9kZV9uYW1lKTsKKworCXJldHVybiBBRV9PSzsKK30KKworc3RhdGljIGludCBhY3BpX3NtYnVzX2NtaV9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGFjcGlfc21idXNfY21pICpzbWJ1c19jbWk7CisKKwlzbWJ1c19jbWkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9zbWJ1c19jbWkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNtYnVzX2NtaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbWJ1c19jbWktPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfU01CVVNfSENfREVWSUNFX05BTUUpOworCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1NNQlVTX0hDX0NMQVNTKTsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gc21idXNfY21pOworCXNtYnVzX2NtaS0+Y2FwX2luZm8gPSAwOworCXNtYnVzX2NtaS0+Y2FwX3JlYWQgPSAwOworCXNtYnVzX2NtaS0+Y2FwX3dyaXRlID0gMDsKKworCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX01FVEhPRCwgc21idXNfY21pLT5oYW5kbGUsIDEsCisJCQkgICAgYWNwaV9zbWJ1c19jbWlfcXVlcnlfbWV0aG9kcywgc21idXNfY21pLCBOVUxMKTsKKworCWlmIChzbWJ1c19jbWktPmNhcF9pbmZvID09IDApCisJCWdvdG8gZXJyOworCisJc25wcmludGYoc21idXNfY21pLT5hZGFwdGVyLm5hbWUsIHNpemVvZihzbWJ1c19jbWktPmFkYXB0ZXIubmFtZSksCisJCSJTTUJ1cyBDTUkgYWRhcHRlciAlcyAoJXMpIiwKKwkJYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLAorCQlhY3BpX2RldmljZV91aWQoZGV2aWNlKSk7CisJc21idXNfY21pLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJc21idXNfY21pLT5hZGFwdGVyLmFsZ28gPSAmYWNwaV9zbWJ1c19jbWlfYWxnb3JpdGhtOworCXNtYnVzX2NtaS0+YWRhcHRlci5hbGdvX2RhdGEgPSBzbWJ1c19jbWk7CisJc21idXNfY21pLT5hZGFwdGVyLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OIHwgSTJDX0NMQVNTX1NQRDsKKwlzbWJ1c19jbWktPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZkZXZpY2UtPmRldjsKKworCWlmIChpMmNfYWRkX2FkYXB0ZXIoJnNtYnVzX2NtaS0+YWRhcHRlcikpIHsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJDb3VsZG4ndCByZWdpc3RlciBhZGFwdGVyIVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUoc21idXNfY21pKTsKKwlkZXZpY2UtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBhY3BpX3NtYnVzX2NtaV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQoreworCXN0cnVjdCBhY3BpX3NtYnVzX2NtaSAqc21idXNfY21pID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCisJaTJjX2RlbF9hZGFwdGVyKCZzbWJ1c19jbWktPmFkYXB0ZXIpOworCWtmcmVlKHNtYnVzX2NtaSk7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3NtYnVzX2NtaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBBQ1BJX1NNQlVTX0hDX0RFVklDRV9OQU1FLAorCS5jbGFzcyA9IEFDUElfU01CVVNfSENfQ0xBU1MsCisJLmlkcyA9IGFjcGlfc21idXNfY21pX2lkcywKKwkub3BzID0geworCQkuYWRkID0gYWNwaV9zbWJ1c19jbWlfYWRkLAorCQkucmVtb3ZlID0gYWNwaV9zbWJ1c19jbWlfcmVtb3ZlLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3NtYnVzX2NtaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9zbWJ1c19jbWlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFjcGlfc21idXNfY21pX2V4aXQodm9pZCkKK3sKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9zbWJ1c19jbWlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWNwaV9zbWJ1c19jbWlfaW5pdCk7Cittb2R1bGVfZXhpdChhY3BpX3NtYnVzX2NtaV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ3JhbmUgQ2FpIDxjcmFuZS5jYWlAYW1kLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBTTUJ1cyBDTUkgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRhb3MtZXZtLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRhb3MtZXZtLmMKaW5kZXggMjI0YWExMi4uZGQzOWMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10YW9zLWV2bS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGFvcy1ldm0uYwpAQCAtMzIsMTAgKzMyLDEyIEBACiAKICNkZWZpbmUgVEFPU19TVEFURV9JTklUCQkwCiAjZGVmaW5lIFRBT1NfU1RBVEVfSURMRQkJMQotI2RlZmluZSBUQU9TX1NUQVRFX1NFTkQJCTIKKyNkZWZpbmUgVEFPU19TVEFURV9FT0ZGCQkyCiAjZGVmaW5lIFRBT1NfU1RBVEVfUkVDVgkJMwogCiAjZGVmaW5lIFRBT1NfQ01EX1JFU0VUCQkweDEyCisjZGVmaW5lIFRBT1NfQ01EX0VDSE9fT04JJysnCisjZGVmaW5lIFRBT1NfQ01EX0VDSE9fT0ZGCSctJwogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOwogCkBAIC0xMDIsMTcgKzEwNCw5IEBACiAKIAkvKiBTZW5kIHRoZSB0cmFuc2FjdGlvbiB0byB0aGUgVEFPUyBFVk0gKi8KIAlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJDb21tYW5kIGJ1ZmZlcjogJXNcbiIsIHRhb3MtPmJ1ZmZlcik7Ci0JdGFvcy0+cG9zID0gMDsKLQl0YW9zLT5zdGF0ZSA9IFRBT1NfU1RBVEVfU0VORDsKLQlzZXJpb193cml0ZShzZXJpbywgdGFvcy0+YnVmZmVyWzBdKTsKLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgdGFvcy0+c3RhdGUgPT0gVEFPU19TVEFURV9JRExFLAotCQkJCQkgbXNlY3NfdG9famlmZmllcygyNTApKTsKLQlpZiAodGFvcy0+c3RhdGUgIT0gVEFPU19TVEFURV9JRExFKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlRyYW5zYWN0aW9uIGZhaWxlZCAiCi0JCQkiKHN0YXRlPSVkLCBwb3M9JWQpXG4iLCB0YW9zLT5zdGF0ZSwgdGFvcy0+cG9zKTsKLQkJdGFvcy0+YWRkciA9IDA7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlmb3IgKHAgPSB0YW9zLT5idWZmZXI7ICpwOyBwKyspCisJCXNlcmlvX3dyaXRlKHNlcmlvLCAqcCk7CisKIAl0YW9zLT5hZGRyID0gYWRkcjsKIAogCS8qIFN0YXJ0IHRoZSB0cmFuc2FjdGlvbiBhbmQgcmVhZCB0aGUgYW5zd2VyICovCkBAIC0xMjIsNyArMTE2LDcgQEAKIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgdGFvcy0+c3RhdGUgPT0gVEFPU19TVEFURV9JRExFLAogCQkJCQkgbXNlY3NfdG9famlmZmllcygxNTApKTsKIAlpZiAodGFvcy0+c3RhdGUgIT0gVEFPU19TVEFURV9JRExFCi0JIHx8IHRhb3MtPnBvcyAhPSA2KSB7CisJIHx8IHRhb3MtPnBvcyAhPSA1KSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlRyYW5zYWN0aW9uIHRpbWVvdXQgKHBvcz0lZClcbiIsCiAJCQl0YW9zLT5wb3MpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTEzMCw3ICsxMjQsNyBAQAogCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkFuc3dlciBidWZmZXI6ICVzXG4iLCB0YW9zLT5idWZmZXIpOwogCiAJLyogSW50ZXJwcmV0IHRoZSByZXR1cm5lZCBzdHJpbmcgKi8KLQlwID0gdGFvcy0+YnVmZmVyICsgMjsKKwlwID0gdGFvcy0+YnVmZmVyICsgMTsKIAlwWzNdID0gJ1wwJzsKIAlpZiAoIXN0cmNtcChwLCAiTkFLIikpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTczLDEzICsxNjcsOSBAQAogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ3cSk7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBUQU9TX1NUQVRFX1NFTkQ6Ci0JCWlmICh0YW9zLT5idWZmZXJbKyt0YW9zLT5wb3NdKQotCQkJc2VyaW9fd3JpdGUoc2VyaW8sIHRhb3MtPmJ1ZmZlclt0YW9zLT5wb3NdKTsKLQkJZWxzZSB7Ci0JCQl0YW9zLT5zdGF0ZSA9IFRBT1NfU1RBVEVfSURMRTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmd3EpOwotCQl9CisJY2FzZSBUQU9TX1NUQVRFX0VPRkY6CisJCXRhb3MtPnN0YXRlID0gVEFPU19TVEFURV9JRExFOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJndxKTsKIAkJYnJlYWs7CiAJY2FzZSBUQU9TX1NUQVRFX1JFQ1Y6CiAJCXRhb3MtPmJ1ZmZlclt0YW9zLT5wb3MrK10gPSBkYXRhOwpAQCAtMjU3LDYgKzI0NywxOSBAQAogCX0KIAlzdHJsY3B5KGFkYXB0ZXItPm5hbWUsIG5hbWUsIHNpemVvZihhZGFwdGVyLT5uYW1lKSk7CiAKKwkvKiBUdXJuIGVjaG8gb2ZmIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgKi8KKwl0YW9zLT5zdGF0ZSA9IFRBT1NfU1RBVEVfRU9GRjsKKwlzZXJpb193cml0ZShzZXJpbywgVEFPU19DTURfRUNIT19PRkYpOworCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIHRhb3MtPnN0YXRlID09IFRBT1NfU1RBVEVfSURMRSwKKwkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoMjUwKSk7CisJaWYgKHRhb3MtPnN0YXRlICE9IFRBT1NfU1RBVEVfSURMRSkgeworCQllcnIgPSAtRU5PREVWOworCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJFY2hvIG9mZiBmYWlsZWQgIgorCQkJIihzdGF0ZT0lZClcbiIsIHRhb3MtPnN0YXRlKTsKKwkJZ290byBleGl0X2Nsb3NlOworCX0KKwogCWVyciA9IGkyY19hZGRfYWRhcHRlcihhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfY2xvc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYwppbmRleCA2NDhlY2M2Li5jZjk5NGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKQEAgLTIxNyw4ICsyMTcsMTAgQEAKIAlyZXR1cm47CiAKICBlcnJvcjoKLQlkZXZfZXJyKCZpZmFjZS0+YWRhcHRlci5kZXYsICIlcyBpbiBzdGF0ZSAlc1xuIiwgZXJybXNnLAotCQlzY3gyMDBfYWNiX3N0YXRlX25hbWVbaWZhY2UtPnN0YXRlXSk7CisJZGV2X2VycigmaWZhY2UtPmFkYXB0ZXIuZGV2LAorCQkiJXMgaW4gc3RhdGUgJXMgKGFkZHI9MHglMDJ4LCBsZW49JWQsIHN0YXR1cz0weCUwMngpXG4iLCBlcnJtc2csCisJCXNjeDIwMF9hY2Jfc3RhdGVfbmFtZVtpZmFjZS0+c3RhdGVdLCBpZmFjZS0+YWRkcmVzc19ieXRlLAorCQlpZmFjZS0+bGVuLCBzdGF0dXMpOwogCiAJaWZhY2UtPnN0YXRlID0gc3RhdGVfaWRsZTsKIAlpZmFjZS0+cmVzdWx0ID0gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmluZGV4IDAyZDc0NmMuLmY5NjE4ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpAQCAtMTYsNTQgKzE2LDYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGRzMTY4Mi4KIAotY29uZmlnIFNFTlNPUlNfUENGODU3NAotCXRyaXN0YXRlICJQaGlsaXBzIFBDRjg1NzQgYW5kIFBDRjg1NzRBIChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBHUElPX1BDRjg1N1ggPSAibiIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgUGhpbGlwcyBQQ0Y4NTc0IGFuZCAKLQkgIFBDRjg1NzRBIGNoaXBzLiBUaGVzZSBjaGlwcyBhcmUgOC1iaXQgSS9PIGV4cGFuZGVycyBmb3IgdGhlIEkyQyBidXMuCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHBjZjg1NzQuCi0KLQkgIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZHJvcHBlZCBzb29uLiBVc2UKLQkgIGRyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMgaW5zdGVhZC4KLQotCSAgVGhlc2UgZGV2aWNlcyBhcmUgaGFyZCB0byBkZXRlY3QgYW5kIHJhcmVseSBmb3VuZCBvbiBtYWluc3RyZWFtCi0JICBoYXJkd2FyZS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBQQ0Y4NTc1Ci0JdHJpc3RhdGUgIlBoaWxpcHMgUENGODU3NSAoREVQUkVDQVRFRCkiCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBHUElPX1BDRjg1N1ggPSAibiIKLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgUGhpbGlwcyBQQ0Y4NTc1IGNoaXAuCi0JICBUaGlzIGNoaXAgaXMgYSAxNi1iaXQgSS9PIGV4cGFuZGVyIGZvciB0aGUgSTJDIGJ1cy4gIFNldmVyYWwgb3RoZXIKLQkgIGNoaXAgbWFudWZhY3R1cmVycyBzZWxsIGVxdWl2YWxlbnQgY2hpcHMsIGUuZy4gVGV4YXMgSW5zdHJ1bWVudHMuCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHBjZjg1NzUuCi0KLQkgIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZHJvcHBlZCBzb29uLiBVc2UKLQkgIGRyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMgaW5zdGVhZC4KLQotCSAgVGhpcyBkZXZpY2UgaXMgaGFyZCB0byBkZXRlY3QgYW5kIGlzIHJhcmVseSBmb3VuZCBvbiBtYWluc3RyZWFtCi0JICBoYXJkd2FyZS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBTRU5TT1JTX1BDQTk1MzkKLQl0cmlzdGF0ZSAiUGhpbGlwcyBQQ0E5NTM5IDE2LWJpdCBJL08gcG9ydCAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgR1BJT19QQ0E5NTNYID0gIm4iCi0JaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFBDQTk1MzkKLQkgIDE2LWJpdCBJL08gcG9ydC4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcGNhOTUzOS4KLQotCSAgVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBkcm9wcGVkIHNvb24uIFVzZQotCSAgZHJpdmVycy9ncGlvL3BjYTk1M3guYyBpbnN0ZWFkLgotCiBjb25maWcgU0VOU09SU19UU0wyNTUwCiAJdHJpc3RhdGUgIlRhb3MgVFNMMjU1MCBhbWJpZW50IGxpZ2h0IHNlbnNvciIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQppbmRleCBmNDY4MGQxLi43NDljZjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQpAQCAtMTEsOSArMTEsNiBAQAogIwogCiBvYmotJChDT05GSUdfRFMxNjgyKQkJKz0gZHMxNjgyLm8KLW9iai0kKENPTkZJR19TRU5TT1JTX1BDQTk1MzkpCSs9IHBjYTk1Mzkubwotb2JqLSQoQ09ORklHX1NFTlNPUlNfUENGODU3NCkJKz0gcGNmODU3NC5vCi1vYmotJChDT05GSUdfUENGODU3NSkJCSs9IHBjZjg1NzUubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVFNMMjU1MCkJKz0gdHNsMjU1MC5vCiAKIGlmZXEgKCQoQ09ORklHX0kyQ19ERUJVR19DSElQKSx5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvcGNhOTUzOS5jIGIvZHJpdmVycy9pMmMvY2hpcHMvcGNhOTUzOS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzBkZTRlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL3BjYTk1MzkuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICAgIHBjYTk1MzkuYyAtIDE2LWJpdCBJL08gcG9ydCB3aXRoIGludGVycnVwdCBhbmQgcmVzZXQKLQotICAgIENvcHlyaWdodCAoQykgMjAwNSBCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0qLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgotCi0vKiBBZGRyZXNzZXMgdG8gc2Nhbjogbm9uZSwgZGV2aWNlIGlzIG5vdCBhdXRvZGV0ZWN0ZWQgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKHBjYTk1MzkpOwotCi1lbnVtIHBjYTk1MzlfY21kCi17Ci0JUENBOTUzOV9JTlBVVF8wCQk9IDAsCi0JUENBOTUzOV9JTlBVVF8xCQk9IDEsCi0JUENBOTUzOV9PVVRQVVRfMAk9IDIsCi0JUENBOTUzOV9PVVRQVVRfMQk9IDMsCi0JUENBOTUzOV9JTlZFUlRfMAk9IDQsCi0JUENBOTUzOV9JTlZFUlRfMQk9IDUsCi0JUENBOTUzOV9ESVJFQ1RJT05fMAk9IDYsCi0JUENBOTUzOV9ESVJFQ1RJT05fMQk9IDcsCi19OwotCi0vKiBmb2xsb3dpbmcgYXJlIHRoZSBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KLXN0YXRpYyBzc2l6ZV90IHBjYTk1Mzlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnBzYSA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJCSAgICAgcHNhLT5pbmRleCkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBwY2E5NTM5X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqcHNhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwotCWlmICh2YWwgPiAweGZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcHNhLT5pbmRleCwgdmFsKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIERlZmluZSB0aGUgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLQotI2RlZmluZSBQQ0E5NTM5X0VOVFJZX1JPKG5hbWUsIGNtZF9pZHgpIFwKLQlzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHBjYTk1Mzlfc2hvdywgTlVMTCwgY21kX2lkeCkKLQotI2RlZmluZSBQQ0E5NTM5X0VOVFJZX1JXKG5hbWUsIGNtZF9pZHgpIFwKLQlzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08gfCBTX0lXVVNSLCBwY2E5NTM5X3Nob3csIFwKLQkJCQkgIHBjYTk1Mzlfc3RvcmUsIGNtZF9pZHgpCi0KLVBDQTk1MzlfRU5UUllfUk8oaW5wdXQwLCBQQ0E5NTM5X0lOUFVUXzApOwotUENBOTUzOV9FTlRSWV9STyhpbnB1dDEsIFBDQTk1MzlfSU5QVVRfMSk7Ci1QQ0E5NTM5X0VOVFJZX1JXKG91dHB1dDAsIFBDQTk1MzlfT1VUUFVUXzApOwotUENBOTUzOV9FTlRSWV9SVyhvdXRwdXQxLCBQQ0E5NTM5X09VVFBVVF8xKTsKLVBDQTk1MzlfRU5UUllfUlcoaW52ZXJ0MCwgUENBOTUzOV9JTlZFUlRfMCk7Ci1QQ0E5NTM5X0VOVFJZX1JXKGludmVydDEsIFBDQTk1MzlfSU5WRVJUXzEpOwotUENBOTUzOV9FTlRSWV9SVyhkaXJlY3Rpb24wLCBQQ0E5NTM5X0RJUkVDVElPTl8wKTsKLVBDQTk1MzlfRU5UUllfUlcoZGlyZWN0aW9uMSwgUENBOTUzOV9ESVJFQ1RJT05fMSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2E5NTM5X2F0dHJpYnV0ZXNbXSA9IHsKLQkmc2Vuc29yX2Rldl9hdHRyX2lucHV0MC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfaW5wdXQxLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9vdXRwdXQwLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9vdXRwdXQxLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbnZlcnQwLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbnZlcnQxLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9kaXJlY3Rpb24wLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9kaXJlY3Rpb24xLmRldl9hdHRyLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNhOTUzOV9kZWZhdHRyX2dyb3VwID0gewotCS5hdHRycyA9IHBjYTk1MzlfYXR0cmlidXRlcywKLX07Ci0KLS8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBwY2E5NTM5X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlzdHJsY3B5KGluZm8tPnR5cGUsICJwY2E5NTM5IiwgSTJDX05BTUVfU0laRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2E5NTM5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwKLQkJCQkgICZwY2E5NTM5X2RlZmF0dHJfZ3JvdXApOwotfQotCi1zdGF0aWMgaW50IHBjYTk1MzlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGNhOTUzOV9kZWZhdHRyX2dyb3VwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHBjYTk1MzlfaWRbXSA9IHsKLQl7ICJwY2E5NTM5IiwgMCB9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBjYTk1MzlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gInBjYTk1MzkiLAotCX0sCi0JLnByb2JlCQk9IHBjYTk1MzlfcHJvYmUsCi0JLnJlbW92ZQkJPSBwY2E5NTM5X3JlbW92ZSwKLQkuaWRfdGFibGUJPSBwY2E5NTM5X2lkLAotCi0JLmRldGVjdAkJPSBwY2E5NTM5X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBjYTk1MzlfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmcGNhOTUzOV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcGNhOTUzOV9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJnBjYTk1MzlfZHJpdmVyKTsKLX0KLQotTU9EVUxFX0FVVEhPUigiQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBDQTk1MzkgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KHBjYTk1MzlfaW5pdCk7Ci1tb2R1bGVfZXhpdChwY2E5NTM5X2V4aXQpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTc0LmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTc0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYzMwOTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvcGNmODU3NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChjKSAyMDAwICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICBEYW4gRWF0b24gPGRhbi5lYXRvbkByb2NrZXRsb2dpeC5jb20+Ci0gICAgUG9ydGVkIHRvIExpbnV4IDIuNiBieSBBdXJlbGllbiBKYXJubyA8YXVyZWwzMkBkZWJpYW4ub3JnPiB3aXRoIAotICAgIHRoZSBoZWxwIG9mIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgICAKLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotLyogQSBmZXcgbm90ZXMgYWJvdXQgdGhlIFBDRjg1NzQ6Ci0KLSogVGhlIFBDRjg1NzQgaXMgYW4gOC1iaXQgSS9PIGV4cGFuZGVyIGZvciB0aGUgSTJDIGJ1cyBwcm9kdWNlZCBieQotICBQaGlsaXBzIFNlbWljb25kdWN0b3JzLiAgSXQgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGJ5dGUgSTJDCi0gIGludGVyZmFjZSB0byB1cCB0byA4IHNlcGFyYXRlIGRldmljZXMuCi0gIAotKiBUaGUgUENGODU3NCBhcHBlYXJzIGFzIGEgdmVyeSBzaW1wbGUgU01CdXMgZGV2aWNlIHdoaWNoIGNhbiBiZQotICByZWFkIGZyb20gb3Igd3JpdHRlbiB0byB3aXRoIFNNQlVTIGJ5dGUgcmVhZC93cml0ZSBhY2Nlc3Nlcy4KLQotICAtLURhbgotCi0qLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQotLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUsIGRldmljZSBjYW4ndCBiZSBkZXRlY3RlZCAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzIocGNmODU3NCwgcGNmODU3NGEpOwotCi0vKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KLXN0cnVjdCBwY2Y4NTc0X2RhdGEgewotCWludCB3cml0ZTsJCQkvKiBSZW1lbWJlciBsYXN0IHdyaXR0ZW4gdmFsdWUgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIHBjZjg1NzRfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KLS8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCkpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocmVhZCwgU19JUlVHTywgc2hvd19yZWFkLCBOVUxMKTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHBjZjg1NzRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YSh0b19pMmNfY2xpZW50KGRldikpOwotCi0JaWYgKGRhdGEtPndyaXRlIDwgMCkKLQkJcmV0dXJuIGRhdGEtPndyaXRlOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPndyaXRlKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgcGNmODU3NF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKLQotCWlmICh2YWwgPiAweGZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRhdGEtPndyaXRlID0gdmFsOwotCWkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgZGF0YS0+d3JpdGUpOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHdyaXRlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd193cml0ZSwgc2V0X3dyaXRlKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjZjg1NzRfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9yZWFkLmF0dHIsCi0JJmRldl9hdHRyX3dyaXRlLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNmODU3NF9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IHBjZjg1NzRfYXR0cmlidXRlcywKLX07Ci0KLS8qCi0gKiBSZWFsIGNvZGUKLSAqLwotCi0vKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgcGNmODU3NF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0JY29uc3QgY2hhciAqY2xpZW50X25hbWU7Ci0KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIE5vdywgd2Ugd291bGQgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uIEJ1dCB0aGUgUENGODU3NCBpcyBwbGFpbmx5Ci0JICAgaW1wb3NzaWJsZSB0byBkZXRlY3QhIFN0dXBpZCBjaGlwLiAqLwotCi0JLyogRGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUgKi8KLQlpZiAoa2luZCA8PSAwKSB7Ci0JCWlmIChjbGllbnQtPmFkZHIgPj0gMHgzOCAmJiBjbGllbnQtPmFkZHIgPD0gMHgzZikKLQkJCWtpbmQgPSBwY2Y4NTc0YTsKLQkJZWxzZQotCQkJa2luZCA9IHBjZjg1NzQ7Ci0JfQotCi0JaWYgKGtpbmQgPT0gcGNmODU3NGEpCi0JCWNsaWVudF9uYW1lID0gInBjZjg1NzRhIjsKLQllbHNlCi0JCWNsaWVudF9uYW1lID0gInBjZjg1NzQiOwotCXN0cmxjcHkoaW5mby0+dHlwZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNmODU3NF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgcGNmODU3NF9kYXRhICpkYXRhOwotCWludCBlcnI7Ci0KLQlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjZjg1NzRfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBQQ0Y4NTc0IGNoaXAgKi8KLQlwY2Y4NTc0X2luaXRfY2xpZW50KGNsaWVudCk7Ci0KLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnBjZjg1NzRfYXR0cl9ncm91cCk7Ci0JaWYgKGVycikKLQkJZ290byBleGl0X2ZyZWU7Ci0JcmV0dXJuIDA7Ci0KLSAgICAgIGV4aXRfZnJlZToKLQlrZnJlZShkYXRhKTsKLSAgICAgIGV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwY2Y4NTc0X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnBjZjg1NzRfYXR0cl9ncm91cCk7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCXJldHVybiAwOwotfQotCi0vKiBDYWxsZWQgd2hlbiB3ZSBoYXZlIGZvdW5kIGEgbmV3IFBDRjg1NzQuICovCi1zdGF0aWMgdm9pZCBwY2Y4NTc0X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHBjZjg1NzRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWRhdGEtPndyaXRlID0gLUVBR0FJTjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHBjZjg1NzRfaWRbXSA9IHsKLQl7ICJwY2Y4NTc0IiwgMCB9LAotCXsgInBjZjg1NzRhIiwgMCB9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBjZjg1NzRfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gInBjZjg1NzQiLAotCX0sCi0JLnByb2JlCQk9IHBjZjg1NzRfcHJvYmUsCi0JLnJlbW92ZQkJPSBwY2Y4NTc0X3JlbW92ZSwKLQkuaWRfdGFibGUJPSBwY2Y4NTc0X2lkLAotCi0JLmRldGVjdAkJPSBwY2Y4NTc0X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBjZjg1NzRfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmcGNmODU3NF9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcGNmODU3NF9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJnBjZjg1NzRfZHJpdmVyKTsKLX0KLQotCi1NT0RVTEVfQVVUSE9SCi0gICAgKCJGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCAiCi0gICAgICJQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LCAiCi0gICAgICJEYW4gRWF0b24gPGRhbi5lYXRvbkByb2NrZXRsb2dpeC5jb20+ICIKLSAgICAgImFuZCBBdXJlbGllbiBKYXJubyA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBDRjg1NzQgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KHBjZjg1NzRfaW5pdCk7Ci1tb2R1bGVfZXhpdChwY2Y4NTc0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvcGNmODU3NS5jIGIvZHJpdmVycy9pMmMvY2hpcHMvcGNmODU3NS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2ZkN2NiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1NzUuYworKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICBwY2Y4NTc1LmMKLQotICBBYm91dCB0aGUgUENGODU3NSBjaGlwOiB0aGUgUENGODU3NSBpcyBhIDE2LWJpdCBJL08gZXhwYW5kZXIgZm9yIHRoZSBJMkMgYnVzCi0gIHByb2R1Y2VkIGJ5IGEuby4gUGhpbGlwcyBTZW1pY29uZHVjdG9ycy4KLQotICBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBIZW5uZXJpY2gsIEFuYWxvZyBEZXZpY2VzIEluYy4KLSAgPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4KLSAgQmFzZWQgb24gcGNmODU3NC5jLgotCi0gIENvcHlyaWdodCAoYykgMjAwNyBCYXJ0IFZhbiBBc3NjaGUgPGJhcnQudmFuYXNzY2hlQGdtYWlsLmNvbT4uCi0gIFBvcnRlZCB0aGlzIGRyaXZlciBmcm9tIHVjTGludXggdG8gdGhlIG1haW5zdHJlYW0gTGludXgga2VybmVsLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPiAgLyoga3phbGxvYygpICovCi0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4gLyogc3lzZnNfY3JlYXRlX2dyb3VwKCkgKi8KLQotLyogQWRkcmVzc2VzIHRvIHNjYW46IG5vbmUsIGRldmljZSBjYW4ndCBiZSBkZXRlY3RlZCAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EOwotCi0KLS8qIEVhY2ggY2xpZW50IGhhcyB0aGlzIGFkZGl0aW9uYWwgZGF0YSAqLwotc3RydWN0IHBjZjg1NzVfZGF0YSB7Ci0JaW50IHdyaXRlOwkJLyogbGFzdCB3cml0dGVuIHZhbHVlLCBvciBlcnJvciBjb2RlICovCi19OwotCi0vKiBmb2xsb3dpbmcgYXJlIHRoZSBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXUxNiB2YWw7Ci0JdTggaW9waW5fc3RhdGVbMl07Ci0KLQlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBpb3Bpbl9zdGF0ZSwgMik7Ci0KLQl2YWwgPSBpb3Bpbl9zdGF0ZVswXTsKLQl2YWwgfD0gaW9waW5fc3RhdGVbMV0gPDwgODsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB2YWwpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocmVhZCwgU19JUlVHTywgc2hvd19yZWFkLCBOVUxMKTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHBjZjg1NzVfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChkYXRhLT53cml0ZSA8IDApCi0JCXJldHVybiBkYXRhLT53cml0ZTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+d3JpdGUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBwY2Y4NTc1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCXU4IGlvcGluX3N0YXRlWzJdOwotCi0JaWYgKHZhbCA+IDB4ZmZmZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkYXRhLT53cml0ZSA9IHZhbDsKLQotCWlvcGluX3N0YXRlWzBdID0gdmFsICYgMHhGRjsKLQlpb3Bpbl9zdGF0ZVsxXSA9IHZhbCA+PiA4OwotCi0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgaW9waW5fc3RhdGUsIDIpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIod3JpdGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3dyaXRlLCBzZXRfd3JpdGUpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGNmODU3NV9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX3JlYWQuYXR0ciwKLQkmZGV2X2F0dHJfd3JpdGUuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2Y4NTc1X2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gcGNmODU3NV9hdHRyaWJ1dGVzLAotfTsKLQotLyoKLSAqIFJlYWwgY29kZQotICovCi0KLS8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBwY2Y4NTc1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBUaGlzIGlzIHRoZSBwbGFjZSB0byBkZXRlY3Qgd2hldGhlciB0aGUgY2hpcCBhdCB0aGUgc3BlY2lmaWVkCi0JICAgYWRkcmVzcyByZWFsbHkgaXMgYSBQQ0Y4NTc1IGNoaXAuIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIG1ldGhvZCBrbm93bgotCSAgIHRvIGRldGVjdCB3aGV0aGVyIGFuIEkyQyBjaGlwIGlzIGEgUENGODU3NSBvciBhbnkgb3RoZXIgSTJDIGNoaXAuICovCi0KLQlzdHJsY3B5KGluZm8tPnR5cGUsICJwY2Y4NTc1IiwgSTJDX05BTUVfU0laRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2Y4NTc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBwY2Y4NTc1X2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNmODU3NV9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQlkYXRhLT53cml0ZSA9IC1FQUdBSU47Ci0KLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnBjZjg1NzVfYXR0cl9ncm91cCk7Ci0JaWYgKGVycikKLQkJZ290byBleGl0X2ZyZWU7Ci0KLQlyZXR1cm4gMDsKLQotZXhpdF9mcmVlOgotCWtmcmVlKGRhdGEpOwotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHBjZjg1NzVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGNmODU3NV9hdHRyX2dyb3VwKTsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwY2Y4NTc1X2lkW10gPSB7Ci0JeyAicGNmODU3NSIsIDAgfSwKLQl7IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwY2Y4NTc1X2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJLm5hbWUJPSAicGNmODU3NSIsCi0JfSwKLQkucHJvYmUJCT0gcGNmODU3NV9wcm9iZSwKLQkucmVtb3ZlCQk9IHBjZjg1NzVfcmVtb3ZlLAotCS5pZF90YWJsZQk9IHBjZjg1NzVfaWQsCi0KLQkuZGV0ZWN0CQk9IHBjZjg1NzVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcGNmODU3NV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZwY2Y4NTc1X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwY2Y4NTc1X2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmcGNmODU3NV9kcml2ZXIpOwotfQotCi1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiwgIgotCSAgICAgICJCYXJ0IFZhbiBBc3NjaGUgPGJhcnQudmFuYXNzY2hlQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigicGNmODU3NSBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQocGNmODU3NV9pbml0KTsKLW1vZHVsZV9leGl0KHBjZjg1NzVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy90c2wyNTUwLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy90c2wyNTUwLmMKaW5kZXggYjk2ZjMwMi4uYWE5NmJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvdHNsMjU1MC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RzbDI1NTAuYwpAQCAtMjQsMTAgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjZGVmaW5lIFRTTDI1NTBfRFJWX05BTUUJInRzbDI1NTAiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMS4xLjIiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMS4yIgogCiAvKgogICogRGVmaW5lcwpAQCAtOTYsMzIgKzk1LDEzIEBACiAKIHN0YXRpYyBpbnQgdHNsMjU1MF9nZXRfYWRjX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNtZCkKIHsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQlpbnQgbG9vcCA9IDAsIHJldCA9IDA7CisJaW50IHJldDsKIAotCS8qCi0JICogUmVhZCBBREMgY2hhbm5lbCB3YWl0aW5nIGF0IG1vc3QgNDAwbXMgKHNlZSBkYXRhIHNoZWV0IGZvciBmdXJ0aGVyCi0JICogaW5mbykuCi0JICogVG8gYXZvaWQgbG9uZyBidXN5IHdhaXQgd2Ugc3BpbiBmb3IgZmV3IG1pbGxpc2Vjb25kcyB0aGVuCi0JICogc3RhcnQgc2xlZXBpbmcuCi0JICovCi0JZW5kID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNDAwKTsKLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kKSkgewotCQlpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIGNtZCk7Ci0KLQkJaWYgKGxvb3ArKyA8IDUpCi0JCQltZGVsYXkoMSk7Ci0JCWVsc2UKLQkJCW1zbGVlcCgxKTsKLQotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJZWxzZSBpZiAocmV0ICYgMHgwMDgwKQotCQkJYnJlYWs7Ci0JfQorCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNtZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJaWYgKCEocmV0ICYgMHg4MCkpCi0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gcmV0ICYgMHg3ZjsJLyogcmVtb3ZlIHRoZSAidmFsaWQiIGJpdCAqLwogfQogCkBAIC0yODUsOCArMjY1LDYgQEAKIAkJcmV0dXJuIHJldDsKIAljaDAgPSByZXQ7CiAKLQltZGVsYXkoMSk7Ci0KIAlyZXQgPSB0c2wyNTUwX2dldF9hZGNfdmFsdWUoY2xpZW50LCBUU0wyNTUwX1JFQURfQURDMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC0zNDUsMTEgKzMyMywxMCBAQAogCSAqIFByb2JlIHRoZSBjaGlwLiBUbyBkbyBzbyB3ZSB0cnkgdG8gcG93ZXIgdXAgdGhlIGRldmljZSBhbmQgdGhlbiB0bwogCSAqIHJlYWQgYmFjayB0aGUgMHgwMyBjb2RlCiAJICovCi0JZXJyID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBUU0wyNTUwX1BPV0VSX1VQKTsKKwllcnIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBUU0wyNTUwX1BPV0VSX1VQKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQltZGVsYXkoMSk7Ci0JaWYgKGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KSAhPSBUU0wyNTUwX1BPV0VSX1VQKQorCWlmIChlcnIgIT0gVFNMMjU1MF9QT1dFUl9VUCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZGF0YS0+cG93ZXJfc3RhdGUgPSAxOwogCkBAIC0zNzQsNyArMzUxLDggQEAKIAlzdHJ1Y3QgdHNsMjU1MF9kYXRhICpkYXRhOwogCWludCAqb3Btb2RlLCBlcnIgPSAwOwogCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFKSkgeworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURQorCQkJCQkgICAgfCBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBleGl0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCmluZGV4IDBlNDVjMjkuLjhkODBmY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwpAQCAtNDYsNiArNDYsNyBAQAogc3RhdGljIERFRklORV9JRFIoaTJjX2FkYXB0ZXJfaWRyKTsKIHN0YXRpYyBMSVNUX0hFQUQodXNlcnNwYWNlX2RldmljZXMpOwogCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGkyY19jbGllbnRfdHlwZTsKIHN0YXRpYyBpbnQgaTJjX2NoZWNrX2FkZHIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcik7CiBzdGF0aWMgaW50IGkyY19kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyKTsKIApAQCAtNjQsOSArNjUsMTMgQEAKIAogc3RhdGljIGludCBpMmNfZGV2aWNlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBpMmNfZHJpdmVyCSpkcml2ZXIgPSB0b19pMmNfZHJpdmVyKGRydik7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7CisJc3RydWN0IGkyY19kcml2ZXIJKmRyaXZlcjsKIAorCWlmICghY2xpZW50KQorCQlyZXR1cm4gMDsKKworCWRyaXZlciA9IHRvX2kyY19kcml2ZXIoZHJ2KTsKIAkvKiBtYXRjaCBvbiBhbiBpZCB0YWJsZSBpZiB0aGVyZSBpcyBvbmUgKi8KIAlpZiAoZHJpdmVyLT5pZF90YWJsZSkKIAkJcmV0dXJuIGkyY19tYXRjaF9pZChkcml2ZXItPmlkX3RhYmxlLCBjbGllbnQpICE9IE5VTEw7CkBAIC05NCwxMCArOTksMTQgQEAKIAogc3RhdGljIGludCBpMmNfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBpMmNfZHJpdmVyCSpkcml2ZXIgPSB0b19pMmNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgaTJjX2RyaXZlcgkqZHJpdmVyOwogCWludCBzdGF0dXM7CiAKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuIDA7CisKKwlkcml2ZXIgPSB0b19pMmNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlpZiAoIWRyaXZlci0+cHJvYmUgfHwgIWRyaXZlci0+aWRfdGFibGUpCiAJCXJldHVybiAtRU5PREVWOwogCWNsaWVudC0+ZHJpdmVyID0gZHJpdmVyOwpAQCAtMTE0LDExICsxMjMsMTEgQEAKIAogc3RhdGljIGludCBpMmNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgaTJjX2RyaXZlcgkqZHJpdmVyOwogCWludAkJCXN0YXR1czsKIAotCWlmICghZGV2LT5kcml2ZXIpCisJaWYgKCFjbGllbnQgfHwgIWRldi0+ZHJpdmVyKQogCQlyZXR1cm4gMDsKIAogCWRyaXZlciA9IHRvX2kyY19kcml2ZXIoZGV2LT5kcml2ZXIpOwpAQCAtMTM2LDM3ICsxNDUsNDAgQEAKIAogc3RhdGljIHZvaWQgaTJjX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7CiAJc3RydWN0IGkyY19kcml2ZXIgKmRyaXZlcjsKIAotCWlmICghZGV2LT5kcml2ZXIpCisJaWYgKCFjbGllbnQgfHwgIWRldi0+ZHJpdmVyKQogCQlyZXR1cm47CiAJZHJpdmVyID0gdG9faTJjX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJaWYgKGRyaXZlci0+c2h1dGRvd24pCi0JCWRyaXZlci0+c2h1dGRvd24odG9faTJjX2NsaWVudChkZXYpKTsKKwkJZHJpdmVyLT5zaHV0ZG93bihjbGllbnQpOwogfQogCiBzdGF0aWMgaW50IGkyY19kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpMmNfdmVyaWZ5X2NsaWVudChkZXYpOwogCXN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXI7CiAKLQlpZiAoIWRldi0+ZHJpdmVyKQorCWlmICghY2xpZW50IHx8ICFkZXYtPmRyaXZlcikKIAkJcmV0dXJuIDA7CiAJZHJpdmVyID0gdG9faTJjX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJaWYgKCFkcml2ZXItPnN1c3BlbmQpCiAJCXJldHVybiAwOwotCXJldHVybiBkcml2ZXItPnN1c3BlbmQodG9faTJjX2NsaWVudChkZXYpLCBtZXNnKTsKKwlyZXR1cm4gZHJpdmVyLT5zdXNwZW5kKGNsaWVudCwgbWVzZyk7CiB9CiAKIHN0YXRpYyBpbnQgaTJjX2RldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpMmNfdmVyaWZ5X2NsaWVudChkZXYpOwogCXN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXI7CiAKLQlpZiAoIWRldi0+ZHJpdmVyKQorCWlmICghY2xpZW50IHx8ICFkZXYtPmRyaXZlcikKIAkJcmV0dXJuIDA7CiAJZHJpdmVyID0gdG9faTJjX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJaWYgKCFkcml2ZXItPnJlc3VtZSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGRyaXZlci0+cmVzdW1lKHRvX2kyY19jbGllbnQoZGV2KSk7CisJcmV0dXJuIGRyaXZlci0+cmVzdW1lKGNsaWVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGkyY19jbGllbnRfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTc1LDEwICsxODcsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXNob3dfY2xpZW50X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjbGllbnQtPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkZXYtPnR5cGUgPT0gJmkyY19jbGllbnRfdHlwZSA/CisJCSAgICAgICB0b19pMmNfY2xpZW50KGRldiktPm5hbWUgOiB0b19pMmNfYWRhcHRlcihkZXYpLT5uYW1lKTsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTE4OCwxOCArMjAwLDI4IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMlc1xuIiwgSTJDX01PRFVMRV9QUkVGSVgsIGNsaWVudC0+bmFtZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpMmNfZGV2X2F0dHJzW10gPSB7Ci0JX19BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfY2xpZW50X25hbWUsIE5VTEwpLAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kYWxpYXMsIFNfSVJVR08sIHNob3dfbW9kYWxpYXMsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTJjX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCiAJLyogbW9kYWxpYXMgaGVscHMgY29sZHBsdWc6ICBtb2Rwcm9iZSAkKGNhdCAuLi4vbW9kYWxpYXMpICovCi0JX19BVFRSKG1vZGFsaWFzLCBTX0lSVUdPLCBzaG93X21vZGFsaWFzLCBOVUxMKSwKLQl7IH0sCisJJmRldl9hdHRyX21vZGFsaWFzLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaTJjX2Rldl9hdHRyX2dyb3VwID0geworCS5hdHRycwkJPSBpMmNfZGV2X2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmkyY19kZXZfYXR0cl9ncm91cHNbXSA9IHsKKwkmaTJjX2Rldl9hdHRyX2dyb3VwLAorCU5VTEwKIH07CiAKIHN0cnVjdCBidXNfdHlwZSBpMmNfYnVzX3R5cGUgPSB7CiAJLm5hbWUJCT0gImkyYyIsCi0JLmRldl9hdHRycwk9IGkyY19kZXZfYXR0cnMsCiAJLm1hdGNoCQk9IGkyY19kZXZpY2VfbWF0Y2gsCi0JLnVldmVudAkJPSBpMmNfZGV2aWNlX3VldmVudCwKIAkucHJvYmUJCT0gaTJjX2RldmljZV9wcm9iZSwKIAkucmVtb3ZlCQk9IGkyY19kZXZpY2VfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IGkyY19kZXZpY2Vfc2h1dGRvd24sCkBAIC0yMDgsNiArMjMwLDEyIEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaTJjX2J1c190eXBlKTsKIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBpMmNfY2xpZW50X3R5cGUgPSB7CisJLmdyb3VwcwkJPSBpMmNfZGV2X2F0dHJfZ3JvdXBzLAorCS51ZXZlbnQJCT0gaTJjX2RldmljZV91ZXZlbnQsCisJLnJlbGVhc2UJPSBpMmNfY2xpZW50X2Rldl9yZWxlYXNlLAorfTsKKwogCiAvKioKICAqIGkyY192ZXJpZnlfY2xpZW50IC0gcmV0dXJuIHBhcmFtZXRlciBhcyBpMmNfY2xpZW50LCBvciBOVUxMCkBAIC0yMjAsNyArMjQ4LDcgQEAKICAqLwogc3RydWN0IGkyY19jbGllbnQgKmkyY192ZXJpZnlfY2xpZW50KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKGRldi0+YnVzID09ICZpMmNfYnVzX3R5cGUpCisJcmV0dXJuIChkZXYtPnR5cGUgPT0gJmkyY19jbGllbnRfdHlwZSkKIAkJCT8gdG9faTJjX2NsaWVudChkZXYpCiAJCQk6IE5VTEw7CiB9CkBAIC0yNzMsNyArMzAxLDcgQEAKIAogCWNsaWVudC0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmFkYXB0ZXItPmRldjsKIAljbGllbnQtPmRldi5idXMgPSAmaTJjX2J1c190eXBlOwotCWNsaWVudC0+ZGV2LnJlbGVhc2UgPSBpMmNfY2xpZW50X2Rldl9yZWxlYXNlOworCWNsaWVudC0+ZGV2LnR5cGUgPSAmaTJjX2NsaWVudF90eXBlOwogCiAJZGV2X3NldF9uYW1lKCZjbGllbnQtPmRldiwgIiVkLSUwNHgiLCBpMmNfYWRhcHRlcl9pZChhZGFwKSwKIAkJICAgICBjbGllbnQtPmFkZHIpOwpAQCAtMzY4LDEzICszOTYsNiBAQAogCWNvbXBsZXRlKCZhZGFwLT5kZXZfcmVsZWFzZWQpOwogfQogCi1zdGF0aWMgc3NpemVfdAotc2hvd19hZGFwdGVyX25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IHRvX2kyY19hZGFwdGVyKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGFkYXAtPm5hbWUpOwotfQotCiAvKgogICogTGV0IHVzZXJzIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHRocm91Z2ggc3lzZnMuIFRoaXMgY2FuIGJlIHVzZWQgd2hlbgogICogcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24gY29kZSBkb2Vzbid0IGNvbnRhaW4gdGhlIHByb3BlciBkYXRhIGZvcgpAQCAtNDkzLDE5ICs1MTQsMzQgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaTJjX2FkYXB0ZXJfYXR0cnNbXSA9IHsKLQlfX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19hZGFwdGVyX25hbWUsIE5VTEwpLAotCV9fQVRUUihuZXdfZGV2aWNlLCBTX0lXVVNSLCBOVUxMLCBpMmNfc3lzZnNfbmV3X2RldmljZSksCi0JX19BVFRSKGRlbGV0ZV9kZXZpY2UsIFNfSVdVU1IsIE5VTEwsIGkyY19zeXNmc19kZWxldGVfZGV2aWNlKSwKLQl7IH0sCitzdGF0aWMgREVWSUNFX0FUVFIobmV3X2RldmljZSwgU19JV1VTUiwgTlVMTCwgaTJjX3N5c2ZzX25ld19kZXZpY2UpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGV0ZV9kZXZpY2UsIFNfSVdVU1IsIE5VTEwsIGkyY19zeXNmc19kZWxldGVfZGV2aWNlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmkyY19hZGFwdGVyX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX25hbWUuYXR0ciwKKwkmZGV2X2F0dHJfbmV3X2RldmljZS5hdHRyLAorCSZkZXZfYXR0cl9kZWxldGVfZGV2aWNlLmF0dHIsCisJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGFzcyBpMmNfYWRhcHRlcl9jbGFzcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSAiaTJjLWFkYXB0ZXIiLAotCS5kZXZfYXR0cnMJCT0gaTJjX2FkYXB0ZXJfYXR0cnMsCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpMmNfYWRhcHRlcl9hdHRyX2dyb3VwID0geworCS5hdHRycwkJPSBpMmNfYWRhcHRlcl9hdHRycywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppMmNfYWRhcHRlcl9hdHRyX2dyb3Vwc1tdID0geworCSZpMmNfYWRhcHRlcl9hdHRyX2dyb3VwLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgaTJjX2FkYXB0ZXJfdHlwZSA9IHsKKwkuZ3JvdXBzCQk9IGkyY19hZGFwdGVyX2F0dHJfZ3JvdXBzLAorCS5yZWxlYXNlCT0gaTJjX2FkYXB0ZXJfZGV2X3JlbGVhc2UsCit9OworCisjaWZkZWYgQ09ORklHX0kyQ19DT01QQVQKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfY29tcGF0ICppMmNfYWRhcHRlcl9jb21wYXRfY2xhc3M7CisjZW5kaWYKKwogc3RhdGljIHZvaWQgaTJjX3NjYW5fc3RhdGljX2JvYXJkX2luZm8oc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBpMmNfZGV2aW5mbwkqZGV2aW5mbzsKQEAgLTU1NSwxNCArNTkxLDIyIEBACiAJCWFkYXAtPnRpbWVvdXQgPSBIWjsKIAogCWRldl9zZXRfbmFtZSgmYWRhcC0+ZGV2LCAiaTJjLSVkIiwgYWRhcC0+bnIpOwotCWFkYXAtPmRldi5yZWxlYXNlID0gJmkyY19hZGFwdGVyX2Rldl9yZWxlYXNlOwotCWFkYXAtPmRldi5jbGFzcyA9ICZpMmNfYWRhcHRlcl9jbGFzczsKKwlhZGFwLT5kZXYuYnVzID0gJmkyY19idXNfdHlwZTsKKwlhZGFwLT5kZXYudHlwZSA9ICZpMmNfYWRhcHRlcl90eXBlOwogCXJlcyA9IGRldmljZV9yZWdpc3RlcigmYWRhcC0+ZGV2KTsKIAlpZiAocmVzKQogCQlnb3RvIG91dF9saXN0OwogCiAJZGV2X2RiZygmYWRhcC0+ZGV2LCAiYWRhcHRlciBbJXNdIHJlZ2lzdGVyZWRcbiIsIGFkYXAtPm5hbWUpOwogCisjaWZkZWYgQ09ORklHX0kyQ19DT01QQVQKKwlyZXMgPSBjbGFzc19jb21wYXRfY3JlYXRlX2xpbmsoaTJjX2FkYXB0ZXJfY29tcGF0X2NsYXNzLCAmYWRhcC0+ZGV2LAorCQkJCSAgICAgICBhZGFwLT5kZXYucGFyZW50KTsKKwlpZiAocmVzKQorCQlkZXZfd2FybigmYWRhcC0+ZGV2LAorCQkJICJGYWlsZWQgdG8gY3JlYXRlIGNvbXBhdGliaWxpdHkgY2xhc3MgbGlua1xuIik7CisjZW5kaWYKKwogCS8qIGNyZWF0ZSBwcmUtZGVjbGFyZWQgZGV2aWNlIG5vZGVzICovCiAJaWYgKGFkYXAtPm5yIDwgX19pMmNfZmlyc3RfZHluYW1pY19idXNfbnVtKQogCQlpMmNfc2Nhbl9zdGF0aWNfYm9hcmRfaW5mbyhhZGFwKTsKQEAgLTc0MSw2ICs3ODUsMTEgQEAKIAkgICBjaGVja2luZyB0aGUgcmV0dXJuZWQgdmFsdWUuICovCiAJcmVzID0gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZhZGFwLT5kZXYsIE5VTEwsIF9fdW5yZWdpc3Rlcl9jbGllbnQpOwogCisjaWZkZWYgQ09ORklHX0kyQ19DT01QQVQKKwljbGFzc19jb21wYXRfcmVtb3ZlX2xpbmsoaTJjX2FkYXB0ZXJfY29tcGF0X2NsYXNzLCAmYWRhcC0+ZGV2LAorCQkJCSBhZGFwLT5kZXYucGFyZW50KTsKKyNlbmRpZgorCiAJLyogY2xlYW4gdXAgdGhlIHN5c2ZzIHJlcHJlc2VudGF0aW9uICovCiAJaW5pdF9jb21wbGV0aW9uKCZhZGFwLT5kZXZfcmVsZWFzZWQpOwogCWRldmljZV91bnJlZ2lzdGVyKCZhZGFwLT5kZXYpOwpAQCAtNzY4LDkgKzgxNywxMyBAQAogCiBzdGF0aWMgaW50IF9fYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGRldik7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIgPSBkYXRhOwogCisJaWYgKGRldi0+dHlwZSAhPSAmaTJjX2FkYXB0ZXJfdHlwZSkKKwkJcmV0dXJuIDA7CisJYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGRldik7CisKIAlpMmNfZGV0ZWN0KGFkYXB0ZXIsIGRyaXZlcik7CiAKIAkvKiBMZWdhY3kgZHJpdmVycyBzY2FuIGkyYyBidXNzZXMgZGlyZWN0bHkgKi8KQEAgLTgwOSw4ICs4NjIsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZkcml2ZXItPmNsaWVudHMpOwogCS8qIFdhbGsgdGhlIGFkYXB0ZXJzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudCAqLwogCW11dGV4X2xvY2soJmNvcmVfbG9jayk7Ci0JY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZpMmNfYWRhcHRlcl9jbGFzcywgTlVMTCwgZHJpdmVyLAotCQkJICAgICAgX19hdHRhY2hfYWRhcHRlcik7CisJYnVzX2Zvcl9lYWNoX2RldigmaTJjX2J1c190eXBlLCBOVUxMLCBkcml2ZXIsIF9fYXR0YWNoX2FkYXB0ZXIpOwogCW11dGV4X3VubG9jaygmY29yZV9sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtODE5LDEwICs4NzEsMTQgQEAKIAogc3RhdGljIGludCBfX2RldGFjaF9hZGFwdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihkZXYpOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyID0gZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCAqX247CiAKKwlpZiAoZGV2LT50eXBlICE9ICZpMmNfYWRhcHRlcl90eXBlKQorCQlyZXR1cm4gMDsKKwlhZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoZGV2KTsKKwogCS8qIFJlbW92ZSB0aGUgZGV2aWNlcyB3ZSBjcmVhdGVkIG91cnNlbHZlcyBhcyB0aGUgcmVzdWx0IG9mIGhhcmR3YXJlCiAJICogcHJvYmluZyAodXNpbmcgYSBkcml2ZXIncyBkZXRlY3QgbWV0aG9kKSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGllbnQsIF9uLCAmZHJpdmVyLT5jbGllbnRzLCBkZXRlY3RlZCkgewpAQCAtODUwLDggKzkwNiw3IEBACiB2b2lkIGkyY19kZWxfZHJpdmVyKHN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIpCiB7CiAJbXV0ZXhfbG9jaygmY29yZV9sb2NrKTsKLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJmkyY19hZGFwdGVyX2NsYXNzLCBOVUxMLCBkcml2ZXIsCi0JCQkgICAgICBfX2RldGFjaF9hZGFwdGVyKTsKKwlidXNfZm9yX2VhY2hfZGV2KCZpMmNfYnVzX3R5cGUsIE5VTEwsIGRyaXZlciwgX19kZXRhY2hfYWRhcHRlcik7CiAJbXV0ZXhfdW5sb2NrKCZjb3JlX2xvY2spOwogCiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJpdmVyKTsKQEAgLTk0MCwxNyArOTk1LDIzIEBACiAJcmV0dmFsID0gYnVzX3JlZ2lzdGVyKCZpMmNfYnVzX3R5cGUpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0JcmV0dmFsID0gY2xhc3NfcmVnaXN0ZXIoJmkyY19hZGFwdGVyX2NsYXNzKTsKLQlpZiAocmV0dmFsKQorI2lmZGVmIENPTkZJR19JMkNfQ09NUEFUCisJaTJjX2FkYXB0ZXJfY29tcGF0X2NsYXNzID0gY2xhc3NfY29tcGF0X3JlZ2lzdGVyKCJpMmMtYWRhcHRlciIpOworCWlmICghaTJjX2FkYXB0ZXJfY29tcGF0X2NsYXNzKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gYnVzX2VycjsKKwl9CisjZW5kaWYKIAlyZXR2YWwgPSBpMmNfYWRkX2RyaXZlcigmZHVtbXlfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsYXNzX2VycjsKIAlyZXR1cm4gMDsKIAogY2xhc3NfZXJyOgotCWNsYXNzX3VucmVnaXN0ZXIoJmkyY19hZGFwdGVyX2NsYXNzKTsKKyNpZmRlZiBDT05GSUdfSTJDX0NPTVBBVAorCWNsYXNzX2NvbXBhdF91bnJlZ2lzdGVyKGkyY19hZGFwdGVyX2NvbXBhdF9jbGFzcyk7CiBidXNfZXJyOgorI2VuZGlmCiAJYnVzX3VucmVnaXN0ZXIoJmkyY19idXNfdHlwZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTk1OCw3ICsxMDE5LDkgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpMmNfZXhpdCh2b2lkKQogewogCWkyY19kZWxfZHJpdmVyKCZkdW1teV9kcml2ZXIpOwotCWNsYXNzX3VucmVnaXN0ZXIoJmkyY19hZGFwdGVyX2NsYXNzKTsKKyNpZmRlZiBDT05GSUdfSTJDX0NPTVBBVAorCWNsYXNzX2NvbXBhdF91bnJlZ2lzdGVyKGkyY19hZGFwdGVyX2NvbXBhdF9jbGFzcyk7CisjZW5kaWYKIAlidXNfdW5yZWdpc3RlcigmaTJjX2J1c190eXBlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKaW5kZXggYzUwOWM5OS4uYzBjZjQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCkBAIC0xMTQsOCArMTE0LDYgQEAKIAl1bnNpZ25lZCBpbnQgYnVzLCBkZXZudW0sIGZ1bmM7CiAJYWNwaV9pbnRlZ2VyIGFkZHI7CiAJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZTsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0gey5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwKLQkJCQkJLnBvaW50ZXIgPSBOVUxMfTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8JKmRpbmZvID0gTlVMTDsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKQEAgLTEzNCwxMiArMTMyLDExIEBACiAJCWdvdG8gZXJyOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGRldl9oYW5kbGUsICZidWZmZXIpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGRldl9oYW5kbGUsICZkaW5mbyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCURFQlBSSU5UKCJnZXRfb2JqZWN0X2luZm8gZm9yIGRldmljZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9Ci0JZGluZm8gPSBidWZmZXIucG9pbnRlcjsKIAlpZiAoZGluZm8gJiYgKGRpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQURSKSAmJgogCSAgICBkaW5mby0+YWRkcmVzcyA9PSBhZGRyKSB7CiAJCSpwY2lkZXZmbiA9IGFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IGI3OWNhNDEuLjY0MjA3ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC0xNjg2LDcgKzE2ODYsNyBAQAogCXJldHVybiAgMDsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGVjZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZWNkX29wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkJPSBpZGVjZF9vcGVuLAogCS5yZWxlYXNlCQk9IGlkZWNkX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCmluZGV4IDIxNDExOTAuLjc1MzI0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIAlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5pb2N0bChkcml2ZSwgYmRldiwgbW9kZSwgY21kLCBhcmcpOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZV9nZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZV9nZF9vcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gaWRlX2dkX29wZW4sCiAJLnJlbGVhc2UJCT0gaWRlX2dkX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDhkZTQ0MmMuLjYzYzUzZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xMjEyLDcgKzEyMTIsNyBAQAogewogCWludCBpZHggPSAtRU5PRU5UOwogCXU4IGJvb3RhYmxlID0gKGQgJiYgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9OX0JPT1RBQkxFKSkgPyAwIDogMTsKLQl1OCBpID0gKGQgJiYgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUURfMk5EX1BPUlQpKSA/IDEgOiAwOzsKKwl1OCBpID0gKGQgJiYgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUURfMk5EX1BPUlQpKSA/IDEgOiAwOwogCiAJLyoKIAkgKiBDbGFpbSBhbiB1bmFzc2lnbmVkIHNsb3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCA5ZDZmNjJiLi41OGZjOTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTE5MTMsNyArMTkxMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGV0YXBlX2Jsb2NrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRldGFwZV9ibG9ja19vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGlkZXRhcGVfb3BlbiwKIAkucmVsZWFzZQk9IGlkZXRhcGVfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3VtYzg2NzIuYyBiL2RyaXZlcnMvaWRlL3VtYzg2NzIuYwppbmRleCAwNjA4ZDQxLi42MGY5MzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS91bWM4NjcyLmMKKysrIGIvZHJpdmVycy9pZGUvdW1jODY3Mi5jCkBAIC0xNzAsOSArMTcwLDkgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAodW1jODY3Ml9wcm9iZSgpID09IDApCi0JCXJldHVybiAwOzsKKwkJcmV0dXJuIDA7CiBvdXQ6Ci0JcmV0dXJuIC1FTk9ERVY7OworCXJldHVybiAtRU5PREVWOwogfQogCiBtb2R1bGVfaW5pdCh1bWM4NjcyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCBkYTVmODgyLi4wYmMzZDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtMjI3Miw4ICsyMjcyLDEwIEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmZmktPnN0YXRlX211dGV4KSkKKwlpZiAoIW11dGV4X3RyeWxvY2soJmZpLT5zdGF0ZV9tdXRleCkpIHsKKwkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsKIAkJcmV0dXJuIC1FQUdBSU47CisJfQogCiAJc3dpdGNoIChmaS0+c3RhdGUpIHsKIAljYXNlIG9wZW5lZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggNTJiMjVmOC4uZjE5OTg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTM3Miw4ICszNzIsNyBAQAogCS8qIERWaUNPIE1vbW9iYXkgRlgtM0Egd2l0aCBUU0I0MkFBOUEgYnJpZGdlICovIHsKIAkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI4MDAsCiAJCS5tb2RlbAkJCT0gMHgwMDAwMDAsCi0JCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfREVMQVlfSU5RVUlSWSB8Ci0JCQkJCSAgU0JQMl9XT1JLQVJPVU5EX1BPV0VSX0NPTkRJVElPTiwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9QT1dFUl9DT05ESVRJT04sCiAJfSwKIAkvKiBJbml0aW8gYnJpZGdlcywgYWN0dWFsbHkgb25seSBuZWVkZWQgZm9yIHNvbWUgb2xkZXIgb25lcyAqLyB7CiAJCS5maXJtd2FyZV9yZXZpc2lvbgk9IDB4MDAwMjAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYwppbmRleCA3NjYzYTJhLi43NTUwYTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYwpAQCAtMjQ2Myw3ICsyNDYzLDcgQEAKIAlpbnQgcmV0OwogCiAJZWhjYV9tcl9sZW4gPSAwOwotCXJldCA9IHdhbGtfbWVtb3J5X3Jlc291cmNlKDAsIDFVTEwgPDwgTUFYX1BIWVNNRU1fQklUUywgTlVMTCwKKwlyZXQgPSB3YWxrX3N5c3RlbV9yYW1fcmFuZ2UoMCwgMVVMTCA8PCBNQVhfUEhZU01FTV9CSVRTLCBOVUxMLAogCQkJCSAgIGVoY2FfY3JlYXRlX2J1c21hcF9jYWxsYmFjayk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCmluZGV4IDAyODMxYWQuLjRiZDM5YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYwpAQCAtODA5LDcgKzgwOSw3IEBACiAgKiBlcnJvcnMuICBXZSBvbmx5IGJvdGhlciB0byBkbyB0aGlzIGF0IGxvYWQgdGltZSwgYmVjYXVzZSBpdCdzIE9LIGlmCiAgKiBpdCBoYXBwZW5lZCBiZWZvcmUgd2Ugd2VyZSBsb2FkZWQgKGZpcnN0IHRpbWUgYWZ0ZXIgYm9vdC9yZXNldCksCiAgKiBidXQgYW55IHRpbWUgYWZ0ZXIgdGhhdCwgaXQncyBmYXRhbCBhbnl3YXkuICBBbHNvIG5lZWQgdG8gbm90IGNoZWNrCi0gKiBmb3IgZm9yIHVwcGVyIGJ5dGUgZXJyb3JzIGlmIHdlIGFyZSBpbiA4IGJpdCBtb2RlLCBzbyBmaWd1cmUgb3V0CisgKiBmb3IgdXBwZXIgYnl0ZSBlcnJvcnMgaWYgd2UgYXJlIGluIDggYml0IG1vZGUsIHNvIGZpZ3VyZSBvdXQKICAqIG91ciB3aWR0aC4gIEZvciBub3csIGF0IGxlYXN0LCBhbHNvIGNvbXBsYWluIGlmIGl0J3MgOCBiaXQuCiAgKi8KIHN0YXRpYyB2b2lkIHNsYXZlX29yX3ByaV9ibGsoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCA4NTE3OTFkLi41NTY1MzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xMjY1LDE0ICsxMjY1LDE0IEBACiAJLnVldmVudAkJPSBpbnB1dF9kZXZfdWV2ZW50LAogfTsKIAotc3RhdGljIGNoYXIgKmlucHV0X25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICppbnB1dF9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImlucHV0LyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIHN0cnVjdCBjbGFzcyBpbnB1dF9jbGFzcyA9IHsKIAkubmFtZQkJPSAiaW5wdXQiLAotCS5ub2RlbmFtZQk9IGlucHV0X25vZGVuYW1lLAorCS5kZXZub2RlCT0gaW5wdXRfZGV2bm9kZSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpbnB1dF9jbGFzcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCBjOTUyM2U0Li5hZGIwOWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC0yMjksNyArMjI5LDcgQEAKIH07CiAKIC8qCi0gKiBTeXN0ZW0tc3BlY2lmaWMga2V0eW1hcCBmaXh1cCByb3V0aW5lCisgKiBTeXN0ZW0tc3BlY2lmaWMga2V5bWFwIGZpeHVwIHJvdXRpbmUKICAqLwogc3RhdGljIHZvaWQgKCphdGtiZF9wbGF0Zm9ybV9maXh1cCkoc3RydWN0IGF0a2JkICosIGNvbnN0IHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgKmF0a2JkX3BsYXRmb3JtX2ZpeHVwX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCmluZGV4IDFhNTBiZTMuLjc2ZDY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCkBAIC0yMjIsNiArMjIyLDIyIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZ2lfYnRucy4KIAorY29uZmlnIElOUFVUX1dJTkJPTkRfQ0lSCisJdHJpc3RhdGUgIldpbmJvbmQgSVIgcmVtb3RlIGNvbnRyb2wiCisJZGVwZW5kcyBvbiBYODYgJiYgUE5QCisJc2VsZWN0IExFRFNfQ0xBU1MKKwlzZWxlY3QgQklUUkVWRVJTRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJUiByZW1vdGUgZnVuY3Rpb25hbGl0eSBmb3VuZAorCSAgaW4gc29tZSBXaW5ib25kIFN1cGVySS9PIGNoaXBzLiBDdXJyZW50bHkgb25seSB0aGUgV1BDRDM3NkkKKwkgIGNoaXAgaXMgc3VwcG9ydGVkIChpbmNsdWRlZCBpbiBzb21lIEludGVsIE1lZGlhIHNlcmllcyBtb3RoZXJib2FyZHMpLgorCisJICBJUiBSZWNlaXZlIGFuZCB3YWtlLW9uLUlSIGZyb20gc3VzcGVuZCBhbmQgcG93ZXItb2ZmIGlzIGN1cnJlbnRseQorCSAgc3VwcG9ydGVkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCB3aW5ib25kX2Npci4KKwogY29uZmlnIEhQX1NEQ19SVEMKIAl0cmlzdGF0ZSAiSFAgU0RDIFJlYWwgVGltZSBDbG9jayIKIAlkZXBlbmRzIG9uIChHU0MgfHwgSFAzMDApICYmIFNFUklPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKaW5kZXggYmY0ZGI2Mi4uYThiODQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX0lOUFVUX1NQQVJDU1BLUikJCSs9IHNwYXJjc3Brci5vCiBvYmotJChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT04pCSs9IHR3bDQwMzAtcHdyYnV0dG9uLm8KIG9iai0kKENPTkZJR19JTlBVVF9VSU5QVVQpCQkrPSB1aW5wdXQubworb2JqLSQoQ09ORklHX0lOUFVUX1dJTkJPTkRfQ0lSKQkJKz0gd2luYm9uZC1jaXIubwogb2JqLSQoQ09ORklHX0lOUFVUX1dJU1RST05fQlROUykJKz0gd2lzdHJvbl9idG5zLm8KIG9iai0kKENPTkZJR19JTlBVVF9XTTgzMVhfT04pCQkrPSB3bTgzMXgtb24ubwogb2JqLSQoQ09ORklHX0lOUFVUX1lFQUxJTkspCQkrPSB5ZWFsaW5rLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzMDlmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jCkBAIC0wLDAgKzEsMTYxNCBAQAorLyoKKyAqICB3aW5ib25kLWNpci5jIC0gRHJpdmVyIGZvciB0aGUgQ29uc3VtZXIgSVIgZnVuY3Rpb25hbGl0eSBvZiBXaW5ib25kCisgKiAgICAgICAgICAgICAgICAgIFN1cGVySS9PIGNoaXBzLgorICoKKyAqICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIFdpbmJvbmQgV1BDRDM3NmkgY2hpcCAoUE5QIGlkIFdFQzEwMjIpLCBidXQKKyAqICBjb3VsZCBwcm9iYWJseSBzdXBwb3J0IG90aGVycyAoV2luYm9uZCBXRUMxMDJYLCBOYXRTZW1pLCBldGMpCisgKiAgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLgorICoKKyAqICBPcmlnaW5hbCBBdXRob3I6IERhdmlkIEjkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KKyAqICAgICBDb3B5cmlnaHQgKEMpIDIwMDkgRGF2aWQgSORyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgorICoKKyAqICBEZWRpY2F0ZWQgdG8gTWF0aWxkYSwgbXkgbmV3Ym9ybiBkYXVnaHRlciwgd2l0aG91dCB3aG9zZSBsb3ZpbmcgYXR0ZW50aW9uCisgKiAgdGhpcyBkcml2ZXIgd291bGQgaGF2ZSBiZWVuIGZpbmlzaGVkIGluIGhhbGYgdGhlIHRpbWUgYW5kIHdpdGggYSBmcmFjdGlvbgorICogIG9mIHRoZSBidWdzLgorICoKKyAqICBXcml0dGVuIHVzaW5nOgorICogICAgbyBXaW5ib25kIFdQQ0QzNzZJIGRhdGFzaGVldCBoZWxwZnVsbHkgcHJvdmlkZWQgYnkgSmVzc2UgQmFybmVzIGF0IEludGVsCisgKiAgICBvIE5hdFNlbWkgUEM4NzMzOC9QQzk3MzM4IGRhdGFzaGVldCAoZm9yIHRoZSBzZXJpYWwgcG9ydCBzdHVmZikKKyAqICAgIG8gRFNEVCBkdW1wcworICoKKyAqICBTdXBwb3J0ZWQgZmVhdHVyZXM6CisgKiAgICBvIFJDNgorICogICAgbyBXYWtlLU9uLUNJUiBmdW5jdGlvbmFsaXR5CisgKgorICogIFRvIGRvOgorICogICAgbyBUZXN0IE5FQyBhbmQgUkM1CisgKgorICogIExlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXI6CisgKiAgICBvIExlYXJuaW5nIChJIGhhdmUgbmVpdGhlciB0aGUgaGFyZHdhcmUsIG5vciB0aGUgbmVlZCkKKyAqICAgIG8gSVIgVHJhbnNtaXQgKGliaWQpCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBEUlZOQU1FICJ3aW5ib25kLWNpciIKKworLyogQ0VJUiBXYWtlLVVwIFJlZ2lzdGVycywgcmVsYXRpdmUgdG8gZGF0YS0+d2Jhc2UgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NUTAkweDAzIC8qIENFSVIgUmVjZWl2ZXIgQ29udHJvbAkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX1NUUwkweDA0IC8qIENFSVIgUmVjZWl2ZXIgU3RhdHVzCQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfRVZfRU4JMHgwNSAvKiBDRUlSIFJlY2VpdmVyIEV2ZW50IEVuYWJsZQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ05UTAkweDA2IC8qIENFSVIgUmVjZWl2ZXIgQ291bnRlciBMb3cJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NOVEgJMHgwNyAvKiBDRUlSIFJlY2VpdmVyIENvdW50ZXIgSGlnaAkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfSU5ERVgJMHgwOCAvKiBDRUlSIFJlY2VpdmVyIEluZGV4CQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfREFUQQkweDA5IC8qIENFSVIgUmVjZWl2ZXIgRGF0YQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NTTAkweDBBIC8qIENFSVIgUmUuIENvbXBhcmUgU3RybGVuCQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ0ZHMQkweDBCIC8qIENFSVIgUmUuIENvbmZpZ3VyYXRpb24gMQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ0ZHMgkweDBDIC8qIENFSVIgUmUuIENvbmZpZ3VyYXRpb24gMgkqLworCisvKiBDRUlSIEVuaGFuY2VkIEZ1bmN0aW9uYWxpdHkgUmVnaXN0ZXJzLCByZWxhdGl2ZSB0byBkYXRhLT5lYmFzZSAgICAgICAqLworI2RlZmluZSBXQkNJUl9SRUdfRUNFSVJfQ1RTCTB4MDAgLyogRW5oYW5jZWQgSVIgQ29udHJvbCBTdGF0dXMJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX0VDRUlSX0NDVEwJMHgwMSAvKiBJbmZyYXJlZCBDb3VudGVyIENvbnRyb2wJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX0VDRUlSX0NOVF9MTwkweDAyIC8qIEluZnJhcmVkIENvdW50ZXIgTFNCCQkqLworI2RlZmluZSBXQkNJUl9SRUdfRUNFSVJfQ05UX0hJCTB4MDMgLyogSW5mcmFyZWQgQ291bnRlciBNU0IJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19FQ0VJUl9JUkVNCTB4MDQgLyogSW5mcmFyZWQgRW1pdHRlciBTdGF0dXMJCSovCisKKy8qIFNQMyBCYW5rZWQgUmVnaXN0ZXJzLCByZWxhdGl2ZSB0byBkYXRhLT5zYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQlNSCTB4MDMgLyogQmFuayBTZWxlY3QsIGFsbCBiYW5rcwkJKi8KKwkJCQkgICAgICAvKiBCYW5rIDAJCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19SWERBVEEJMHgwMCAvKiBGSUZPIFJYIGRhdGEgKHIpCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX1RYREFUQQkweDAwIC8qIEZJRk8gVFggZGF0YSAodykJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSUVSCTB4MDEgLyogSW50ZXJydXB0IEVuYWJsZQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19FSVIJMHgwMiAvKiBFdmVudCBJZGVudGlmaWNhdGlvbiAocikJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19GQ1IJMHgwMiAvKiBGSUZPIENvbnRyb2wgKHcpCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX01DUgkweDA0IC8qIE1vZGUgQ29udHJvbAkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfTFNSCTB4MDUgLyogTGluayBTdGF0dXMJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX01TUgkweDA2IC8qIE1vZGVtIFN0YXR1cwkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQVNDUgkweDA3IC8qIEF1eCBTdGF0dXMgYW5kIENvbnRyb2wJCSovCisJCQkJICAgICAgLyogQmFuayAyCQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQkdETAkweDAwIC8qIEJhdWQgRGl2aXNvciBMU0IJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQkdESAkweDAxIC8qIEJhdWQgRGl2aXNvciBNU0IJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfRVhDUjEJMHgwMiAvKiBFeHRlbmRlZCBDb250cm9sIDEJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfRVhDUjIJMHgwNCAvKiBFeHRlbmRlZCBDb250cm9sIDIJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfVFhGTFYJMHgwNiAvKiBUWCBGSUZPIExldmVsCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19SWEZMVgkweDA3IC8qIFJYIEZJRk8gTGV2ZWwJCQkqLworCQkJCSAgICAgIC8qIEJhbmsgMwkJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX01SSUQJMHgwMCAvKiBNb2R1bGUgSWRlbnRpZmljYXRpb24JCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfU0hfTENSCTB4MDEgLyogTENSIFNoYWRvdwkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfU0hfRkNSCTB4MDIgLyogRkNSIFNoYWRvdwkJCSovCisJCQkJICAgICAgLyogQmFuayA0CQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDUjEJMHgwMiAvKiBJbmZyYXJlZCBDb250cm9sIDEJCSovCisJCQkJICAgICAgLyogQmFuayA1CQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDUjIJMHgwNCAvKiBJbmZyYXJlZCBDb250cm9sIDIJCSovCisJCQkJICAgICAgLyogQmFuayA2CQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDUjMJMHgwMCAvKiBJbmZyYXJlZCBDb250cm9sIDMJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfU0lSX1BXCTB4MDIgLyogU0lSIFB1bHNlIFdpZHRoCQkqLworCQkJCSAgICAgIC8qIEJhbmsgNwkJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSUlhEQwkweDAwIC8qIElSIFJYIERlbW9kIENvbnRyb2wJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJUWE1DCTB4MDEgLyogSVIgVFggTW9kIENvbnRyb2wJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfUkNDRkcJMHgwMiAvKiBDRUlSIENvbmZpZwkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDRkcxCTB4MDQgLyogSW5mcmFyZWQgQ29uZmlnIDEJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDRkc0CTB4MDcgLyogSW5mcmFyZWQgQ29uZmlnIDQJCSovCisKKy8qCisgKiBNYWdpYyB2YWx1ZXMgZm9sbG93CisgKi8KKworLyogTm8gaW50ZXJydXB0cyBmb3IgV0JDSVJfUkVHX1NQM19JRVIgYW5kIFdCQ0lSX1JFR19TUDNfRUlSICovCisjZGVmaW5lIFdCQ0lSX0lSUV9OT05FCQkweDAwCisvKiBSWCBkYXRhIGJpdCBmb3IgV0JDSVJfUkVHX1NQM19JRVIgYW5kIFdCQ0lSX1JFR19TUDNfRUlSICovCisjZGVmaW5lIFdCQ0lSX0lSUV9SWAkJMHgwMQorLyogT3Zlci9VbmRlci1mbG93IGJpdCBmb3IgV0JDSVJfUkVHX1NQM19JRVIgYW5kIFdCQ0lSX1JFR19TUDNfRUlSICovCisjZGVmaW5lIFdCQ0lSX0lSUV9FUlIJCTB4MDQKKy8qIExlZCBlbmFibGUvZGlzYWJsZSBiaXQgZm9yIFdCQ0lSX1JFR19FQ0VJUl9DVFMgKi8KKyNkZWZpbmUgV0JDSVJfTEVEX0VOQUJMRQkweDgwCisvKiBSWCBkYXRhIGF2YWlsYWJsZSBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfTFNSICovCisjZGVmaW5lIFdCQ0lSX1JYX0FWQUlMCQkweDAxCisvKiBSWCBkaXNhYmxlIGJpdCBmb3IgV0JDSVJfUkVHX1NQM19BU0NSICovCisjZGVmaW5lIFdCQ0lSX1JYX0RJU0FCTEUJMHgyMAorLyogRXh0ZW5kZWQgbW9kZSBlbmFibGUgYml0IGZvciBXQkNJUl9SRUdfU1AzX0VYQ1IxICovCisjZGVmaW5lIFdCQ0lSX0VYVF9FTkFCTEUJMHgwMQorLyogU2VsZWN0IGNvbXBhcmUgcmVnaXN0ZXIgaW4gV0JDSVJfUkVHX1dDRUlSX0lOREVYIChiaXRzIDUgJiA2KSAqLworI2RlZmluZSBXQkNJUl9SRUdTRUxfQ09NUEFSRQkweDEwCisvKiBTZWxlY3QgbWFzayByZWdpc3RlciBpbiBXQkNJUl9SRUdfV0NFSVJfSU5ERVggKGJpdHMgNSAmIDYpICovCisjZGVmaW5lIFdCQ0lSX1JFR1NFTF9NQVNLCTB4MjAKKy8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2Ygc2VsZWN0ZWQgcmVnaXN0ZXIgaW4gV0JDSVJfUkVHX1dDRUlSX0lOREVYICovCisjZGVmaW5lIFdCQ0lSX1JFR19BRERSMAkJMHgwMAorCisvKiBWYWxpZCBiYW5rcyBmb3IgdGhlIFNQMyBVQVJUICovCitlbnVtIHdiY2lyX2JhbmsgeworCVdCQ0lSX0JBTktfMCAgICAgICAgICA9IDB4MDAsCisJV0JDSVJfQkFOS18xICAgICAgICAgID0gMHg4MCwKKwlXQkNJUl9CQU5LXzIgICAgICAgICAgPSAweEUwLAorCVdCQ0lSX0JBTktfMyAgICAgICAgICA9IDB4RTQsCisJV0JDSVJfQkFOS180ICAgICAgICAgID0gMHhFOCwKKwlXQkNJUl9CQU5LXzUgICAgICAgICAgPSAweEVDLAorCVdCQ0lSX0JBTktfNiAgICAgICAgICA9IDB4RjAsCisJV0JDSVJfQkFOS183ICAgICAgICAgID0gMHhGNCwKK307CisKKy8qIFN1cHBvcnRlZCBJUiBQcm90b2NvbHMgKi8KK2VudW0gd2JjaXJfcHJvdG9jb2wgeworCUlSX1BST1RPQ09MX1JDNSAgICAgICAgICA9IDB4MCwKKwlJUl9QUk9UT0NPTF9ORUMgICAgICAgICAgPSAweDEsCisJSVJfUFJPVE9DT0xfUkM2ICAgICAgICAgID0gMHgyLAorfTsKKworLyogTWlzYyAqLworI2RlZmluZSBXQkNJUl9OQU1FCSJXaW5ib25kIENJUiIKKyNkZWZpbmUgV0JDSVJfSURfRkFNSUxZICAgICAgICAgIDB4RjEgLyogRmFtaWx5IElEIGZvciB0aGUgV1BDRDM3NkkJKi8KKyNkZWZpbmUJV0JDSVJfSURfQ0hJUCAgICAgICAgICAgIDB4MDQgLyogQ2hpcCBJRCBmb3IgdGhlIFdQQ0QzNzZJCSovCisjZGVmaW5lIElSX0tFWVBSRVNTX1RJTUVPVVQgICAgICAgMjUwIC8qIEZJWE1FOiBzaG91bGQgYmUgcGVyLXByb3RvY29sPyAqLworI2RlZmluZSBJTlZBTElEX1NDQU5DT0RFICAgMHg3RkZGRkZGRiAvKiBJbnZhbGlkIHdpdGggYWxsIHByb3RvcwkqLworI2RlZmluZSBXQUtFVVBfSU9NRU1fTEVOICAgICAgICAgMHgxMCAvKiBXYWtlLVVwIEkvTyBSZWcgTGVuCQkqLworI2RlZmluZSBFSEZVTkNfSU9NRU1fTEVOICAgICAgICAgMHgxMCAvKiBFbmhhbmNlZCBGdW5jIEkvTyBSZWcgTGVuCSovCisjZGVmaW5lIFNQX0lPTUVNX0xFTiAgICAgICAgICAgICAweDA4IC8qIFNlcmlhbCBQb3J0IDMgKElSKSBSZWcgTGVuCSovCisjZGVmaW5lIFdCQ0lSX01BWF9JRExFX0JZVEVTICAgICAgIDEwCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sod2JjaXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhrZXl0YWJsZV9sb2NrKTsKKworc3RydWN0IHdiY2lyX2tleSB7CisJdTMyIHNjYW5jb2RlOworCXVuc2lnbmVkIGludCBrZXljb2RlOworfTsKKworc3RydWN0IHdiY2lyX2tleWVudHJ5IHsKKwlzdHJ1Y3Qgd2JjaXJfa2V5IGtleTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgc3RydWN0IHdiY2lyX2tleSByYzZfZGVmX2tleW1hcFtdID0geworCXsgMHg4MDBGMDQwMCwgS0VZX05VTUVSSUNfMAkJfSwKKwl7IDB4ODAwRjA0MDEsIEtFWV9OVU1FUklDXzEJCX0sCisJeyAweDgwMEYwNDAyLCBLRVlfTlVNRVJJQ18yCQl9LAorCXsgMHg4MDBGMDQwMywgS0VZX05VTUVSSUNfMwkJfSwKKwl7IDB4ODAwRjA0MDQsIEtFWV9OVU1FUklDXzQJCX0sCisJeyAweDgwMEYwNDA1LCBLRVlfTlVNRVJJQ181CQl9LAorCXsgMHg4MDBGMDQwNiwgS0VZX05VTUVSSUNfNgkJfSwKKwl7IDB4ODAwRjA0MDcsIEtFWV9OVU1FUklDXzcJCX0sCisJeyAweDgwMEYwNDA4LCBLRVlfTlVNRVJJQ184CQl9LAorCXsgMHg4MDBGMDQwOSwgS0VZX05VTUVSSUNfOQkJfSwKKwl7IDB4ODAwRjA0MUQsIEtFWV9OVU1FUklDX1NUQVIJCX0sCisJeyAweDgwMEYwNDFDLCBLRVlfTlVNRVJJQ19QT1VORAkJfSwKKwl7IDB4ODAwRjA0MTAsIEtFWV9WT0xVTUVVUAkJfSwKKwl7IDB4ODAwRjA0MTEsIEtFWV9WT0xVTUVET1dOCQl9LAorCXsgMHg4MDBGMDQxMiwgS0VZX0NIQU5ORUxVUAkJfSwKKwl7IDB4ODAwRjA0MTMsIEtFWV9DSEFOTkVMRE9XTgkJfSwKKwl7IDB4ODAwRjA0MEUsIEtFWV9NVVRFCQkJfSwKKwl7IDB4ODAwRjA0MEQsIEtFWV9WRU5ET1IJCX0sIC8qIFZpc3RhIExvZ28gS2V5ICovCisJeyAweDgwMEYwNDFFLCBLRVlfVVAJCQl9LAorCXsgMHg4MDBGMDQxRiwgS0VZX0RPV04JCQl9LAorCXsgMHg4MDBGMDQyMCwgS0VZX0xFRlQJCQl9LAorCXsgMHg4MDBGMDQyMSwgS0VZX1JJR0hUCQkJfSwKKwl7IDB4ODAwRjA0MjIsIEtFWV9PSwkJCX0sCisJeyAweDgwMEYwNDIzLCBLRVlfRVNDCQkJfSwKKwl7IDB4ODAwRjA0MEYsIEtFWV9JTkZPCQkJfSwKKwl7IDB4ODAwRjA0MEEsIEtFWV9DTEVBUgkJCX0sCisJeyAweDgwMEYwNDBCLCBLRVlfRU5URVIJCQl9LAorCXsgMHg4MDBGMDQ1QiwgS0VZX1JFRAkJCX0sCisJeyAweDgwMEYwNDVDLCBLRVlfR1JFRU4JCQl9LAorCXsgMHg4MDBGMDQ1RCwgS0VZX1lFTExPVwkJfSwKKwl7IDB4ODAwRjA0NUUsIEtFWV9CTFVFCQkJfSwKKwl7IDB4ODAwRjA0NUEsIEtFWV9URVhUCQkJfSwKKwl7IDB4ODAwRjA0MjcsIEtFWV9TV0lUQ0hWSURFT01PREUJfSwKKwl7IDB4ODAwRjA0MEMsIEtFWV9QT1dFUgkJCX0sCisJeyAweDgwMEYwNDUwLCBLRVlfUkFESU8JCQl9LAorCXsgMHg4MDBGMDQ0OCwgS0VZX1BWUgkJCX0sCisJeyAweDgwMEYwNDQ3LCBLRVlfQVVESU8JCQl9LAorCXsgMHg4MDBGMDQyNiwgS0VZX0VQRwkJCX0sCisJeyAweDgwMEYwNDQ5LCBLRVlfQ0FNRVJBCQl9LAorCXsgMHg4MDBGMDQyNSwgS0VZX1RWCQkJfSwKKwl7IDB4ODAwRjA0NEEsIEtFWV9WSURFTwkJCX0sCisJeyAweDgwMEYwNDI0LCBLRVlfRFZECQkJfSwKKwl7IDB4ODAwRjA0MTYsIEtFWV9QTEFZCQkJfSwKKwl7IDB4ODAwRjA0MTgsIEtFWV9QQVVTRQkJCX0sCisJeyAweDgwMEYwNDE5LCBLRVlfU1RPUAkJCX0sCisJeyAweDgwMEYwNDE0LCBLRVlfRkFTVEZPUldBUkQJCX0sCisJeyAweDgwMEYwNDFBLCBLRVlfTkVYVAkJCX0sCisJeyAweDgwMEYwNDFCLCBLRVlfUFJFVklPVVMJCX0sCisJeyAweDgwMEYwNDE1LCBLRVlfUkVXSU5ECQl9LAorCXsgMHg4MDBGMDQxNywgS0VZX1JFQ09SRAkJfSwKK307CisKKy8qIFJlZ2lzdGVycyBhbmQgb3RoZXIgc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHdiY2lyX2xvY2sgKi8KK3N0cnVjdCB3YmNpcl9kYXRhIHsKKwl1bnNpZ25lZCBsb25nIHdiYXNlOyAgICAgICAgLyogV2FrZS1VcCBCYXNlYWRkcgkJKi8KKwl1bnNpZ25lZCBsb25nIGViYXNlOyAgICAgICAgLyogRW5oYW5jZWQgRnVuYy4gQmFzZWFkZHIJKi8KKwl1bnNpZ25lZCBsb25nIHNiYXNlOyAgICAgICAgLyogU2VyaWFsIFBvcnQgQmFzZWFkZHIJKi8KKwl1bnNpZ25lZCBpbnQgIGlycTsgICAgICAgICAgLyogU2VyaWFsIFBvcnQgSVJRCQkqLworCisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyX2tleXVwOworCXN0cnVjdCBsZWRfdHJpZ2dlciAqcnh0cmlnZ2VyOworCXN0cnVjdCBsZWRfdHJpZ2dlciAqdHh0cmlnZ2VyOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkOworCisJdTMyIGxhc3Rfc2NhbmNvZGU7CisJdW5zaWduZWQgaW50IGxhc3Rfa2V5Y29kZTsKKwl1OCBsYXN0X3RvZ2dsZTsKKwl1OCBrZXlwcmVzc2VkOworCXVuc2lnbmVkIGxvbmcga2V5dXBfamlmZmllczsKKwl1bnNpZ25lZCBpbnQgaWRsZV9jb3VudDsKKworCS8qIFJYIGlyZGF0YSBhbmQgcGFyc2luZyBzdGF0ZSAqLworCXVuc2lnbmVkIGxvbmcgaXJkYXRhWzMwXTsKKwl1bnNpZ25lZCBpbnQgaXJkYXRhX2NvdW50OworCXVuc2lnbmVkIGludCBpcmRhdGFfaWRsZTsKKwl1bnNpZ25lZCBpbnQgaXJkYXRhX29mZjsKKwl1bnNpZ25lZCBpbnQgaXJkYXRhX2Vycm9yOworCisJLyogUHJvdGVjdGVkIGJ5IGtleXRhYmxlX2xvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGtleXRhYmxlOworfTsKKworc3RhdGljIGVudW0gd2JjaXJfcHJvdG9jb2wgcHJvdG9jb2wgPSBJUl9QUk9UT0NPTF9SQzY7Cittb2R1bGVfcGFyYW0ocHJvdG9jb2wsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcm90b2NvbCwgIklSIHByb3RvY29sIHRvIHVzZSAiCisJCSAiKDAgPSBSQzUsIDEgPSBORUMsIDIgPSBSQzZBLCBkZWZhdWx0KSIpOworCitzdGF0aWMgaW50IGludmVydDsgLyogZGVmYXVsdCA9IDAgKi8KK21vZHVsZV9wYXJhbShpbnZlcnQsIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJJbnZlcnQgdGhlIHNpZ25hbCBmcm9tIHRoZSBJUiByZWNlaXZlciIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHdha2Vfc2MgPSAweDgwMEYwNDBDOworbW9kdWxlX3BhcmFtKHdha2Vfc2MsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh3YWtlX3NjLCAiU2NhbmNvZGUgb2YgdGhlIHBvd2VyLW9uIElSIGNvbW1hbmQiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCB3YWtlX3JjNm1vZGUgPSA2OworbW9kdWxlX3BhcmFtKHdha2VfcmM2bW9kZSwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdha2VfcmM2bW9kZSwgIlJDNiBtb2RlIGZvciB0aGUgcG93ZXItb24gY29tbWFuZCAiCisJCSAiKDAgPSAwLCA2ID0gNkEsIGRlZmF1bHQpIik7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBVVElMSVRZIEZVTkNUSU9OUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgd2JjaXJfbG9jayAqLworc3RhdGljIHZvaWQKK3diY2lyX3NldF9iaXRzKHVuc2lnbmVkIGxvbmcgYWRkciwgdTggYml0cywgdTggbWFzaykKK3sKKwl1OCB2YWw7CisKKwl2YWwgPSBpbmIoYWRkcik7CisJdmFsID0gKCh2YWwgJiB+bWFzaykgfCAoYml0cyAmIG1hc2spKTsKKwlvdXRiKHZhbCwgYWRkcik7Cit9CisKKy8qIFNlbGVjdHMgdGhlIHJlZ2lzdGVyIGJhbmsgZm9yIHRoZSBzZXJpYWwgcG9ydCAqLworc3RhdGljIGlubGluZSB2b2lkCit3YmNpcl9zZWxlY3RfYmFuayhzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSwgZW51bSB3YmNpcl9iYW5rIGJhbmspCit7CisJb3V0YihiYW5rLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQlNSKTsKK30KKworc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MKK3diY2lyX2xlZF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCB3YmNpcl9kYXRhLAorCQkJCQkgICAgICAgbGVkKTsKKworCWlmIChpbmIoZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ1RTKSAmIFdCQ0lSX0xFRF9FTkFCTEUpCisJCXJldHVybiBMRURfRlVMTDsKKwllbHNlCisJCXJldHVybiBMRURfT0ZGOworfQorCitzdGF0aWMgdm9pZAord2JjaXJfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCB3YmNpcl9kYXRhLAorCQkJCQkgICAgICAgbGVkKTsKKworCXdiY2lyX3NldF9iaXRzKGRhdGEtPmViYXNlICsgV0JDSVJfUkVHX0VDRUlSX0NUUywKKwkJICAgICAgIGJyaWdodG5lc3MgPT0gTEVEX09GRiA/IDB4MDAgOiBXQkNJUl9MRURfRU5BQkxFLAorCQkgICAgICAgV0JDSVJfTEVEX0VOQUJMRSk7Cit9CisKKy8qIE1hbmNoZXN0ZXIgZW5jb2RlcyBiaXRzIHRvIFJDNiBtZXNzYWdlIGNlbGxzIChzZWUgd2JjaXJfcGFyc2VfcmM2KSAqLworc3RhdGljIHU4Cit3YmNpcl90b19yYzZjZWxscyh1OCB2YWwpCit7CisJdTggY29kZWQgPSAweDAwOworCWludCBpOworCisJdmFsICY9IDB4MEY7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAodmFsICYgMHgwMSkKKwkJCWNvZGVkIHw9IDB4MDIgPDwgKGkgKiAyKTsKKwkJZWxzZQorCQkJY29kZWQgfD0gMHgwMSA8PCAoaSAqIDIpOworCQl2YWwgPj49IDE7CisJfQorCisJcmV0dXJuIGNvZGVkOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSU5QVVQgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdW5zaWduZWQgaW50Cit3YmNpcl9kb19nZXRrZXljb2RlKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhLCB1MzIgc2NhbmNvZGUpCit7CisJc3RydWN0IHdiY2lyX2tleWVudHJ5ICprZXllbnRyeTsKKwl1bnNpZ25lZCBpbnQga2V5Y29kZSA9IEtFWV9SRVNFUlZFRDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVhZF9sb2NrX2lycXNhdmUoJmtleXRhYmxlX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoa2V5ZW50cnksICZkYXRhLT5rZXl0YWJsZSwgbGlzdCkgeworCQlpZiAoa2V5ZW50cnktPmtleS5zY2FuY29kZSA9PSBzY2FuY29kZSkgeworCQkJa2V5Y29kZSA9IGtleWVudHJ5LT5rZXkua2V5Y29kZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgma2V5dGFibGVfbG9jaywgZmxhZ3MpOworCXJldHVybiBrZXljb2RlOworfQorCitzdGF0aWMgaW50Cit3YmNpcl9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQgKmtleWNvZGUpCit7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJKmtleWNvZGUgPSAoaW50KXdiY2lyX2RvX2dldGtleWNvZGUoZGF0YSwgKHUzMilzY2FuY29kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3diY2lyX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc3NjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdiY2lyX2tleWVudHJ5ICprZXllbnRyeTsKKwlzdHJ1Y3Qgd2JjaXJfa2V5ZW50cnkgKm5ld19rZXllbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBvbGRfa2V5Y29kZSA9IEtFWV9SRVNFUlZFRDsKKwl1MzIgc2NhbmNvZGUgPSAodTMyKXNzY2FuY29kZTsKKworCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdfa2V5ZW50cnkgPSBrbWFsbG9jKHNpemVvZigqbmV3X2tleWVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfa2V5ZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZrZXl0YWJsZV9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleWVudHJ5LCAmZGF0YS0+a2V5dGFibGUsIGxpc3QpIHsKKwkJaWYgKGtleWVudHJ5LT5rZXkuc2NhbmNvZGUgIT0gc2NhbmNvZGUpCisJCQljb250aW51ZTsKKworCQlvbGRfa2V5Y29kZSA9IGtleWVudHJ5LT5rZXkua2V5Y29kZTsKKwkJa2V5ZW50cnktPmtleS5rZXljb2RlID0ga2V5Y29kZTsKKworCQlpZiAoa2V5ZW50cnktPmtleS5rZXljb2RlID09IEtFWV9SRVNFUlZFRCkgeworCQkJbGlzdF9kZWwoJmtleWVudHJ5LT5saXN0KTsKKwkJCWtmcmVlKGtleWVudHJ5KTsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCisJaWYgKG9sZF9rZXljb2RlID09IEtFWV9SRVNFUlZFRCkgeworCQluZXdfa2V5ZW50cnktPmtleS5zY2FuY29kZSA9IHNjYW5jb2RlOworCQluZXdfa2V5ZW50cnktPmtleS5rZXljb2RlID0ga2V5Y29kZTsKKwkJbGlzdF9hZGQoJm5ld19rZXllbnRyeS0+bGlzdCwgJmRhdGEtPmtleXRhYmxlKTsKKwl9IGVsc2UgeworCQlrZnJlZShuZXdfa2V5ZW50cnkpOworCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShrZXllbnRyeSwgJmRhdGEtPmtleXRhYmxlLCBsaXN0KSB7CisJCQlpZiAoa2V5ZW50cnktPmtleS5rZXljb2RlID09IG9sZF9rZXljb2RlKSB7CisJCQkJc2V0X2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmtleXRhYmxlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRpbWVyIGZ1bmN0aW9uIHRvIHJlcG9ydCBrZXl1cCBldmVudCBzb21lIHRpbWUgYWZ0ZXIga2V5ZG93biBpcworICogcmVwb3J0ZWQgYnkgdGhlIElTUi4KKyAqLworc3RhdGljIHZvaWQKK3diY2lyX2tleXVwKHVuc2lnbmVkIGxvbmcgY29va2llKQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gKHN0cnVjdCB3YmNpcl9kYXRhICopY29va2llOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIGRhdGEtPmtleXVwX2ppZmZpZXMgaXMgdXNlZCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaWYgYQorCSAqIGhhcmR3YXJlIGludGVycnVwdCBvY2N1cnMgYXQgdGhpcyBwb2ludCBhbmQgdGhlIGtleXVwIHRpbWVyCisJICogZXZlbnQgaXMgbW92ZWQgZnVydGhlciBpbnRvIHRoZSBmdXR1cmUgYXMgYSByZXN1bHQuCisJICoKKwkgKiBUaGUgdGltZXIgd2lsbCB0aGVuIGJlIHJlYWN0aXZhdGVkIGFuZCB0aGlzIGZ1bmN0aW9uIGNhbGxlZAorCSAqIGFnYWluIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gZXhpdCBncmFjZWZ1bGx5IGluIHRoYXQgY2FzZQorCSAqIHRvIGFsbG93IHRoZSBpbnB1dCBzdWJzeXN0ZW0gdG8gZG8gaXRzIGF1dG8tcmVwZWF0IG1hZ2ljIG9yCisJICogYSBrZXl1cCBldmVudCBtaWdodCBmb2xsb3cgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGtleWRvd24uCisJICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2JjaXJfbG9jaywgZmxhZ3MpOworCisJaWYgKHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhkYXRhLT5rZXl1cF9qaWZmaWVzKSAmJiBkYXRhLT5rZXlwcmVzc2VkKSB7CisJCWRhdGEtPmtleXByZXNzZWQgPSAwOworCQlsZWRfdHJpZ2dlcl9ldmVudChkYXRhLT5yeHRyaWdnZXIsIExFRF9PRkYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRhdGEtPmlucHV0X2RldiwgZGF0YS0+bGFzdF9rZXljb2RlLCAwKTsKKwkJaW5wdXRfc3luYyhkYXRhLT5pbnB1dF9kZXYpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndiY2lyX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3diY2lyX2tleWRvd24oc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEsIHUzMiBzY2FuY29kZSwgdTggdG9nZ2xlKQoreworCXVuc2lnbmVkIGludCBrZXljb2RlOworCisJLyogUmVwZWF0PyAqLworCWlmIChkYXRhLT5sYXN0X3NjYW5jb2RlID09IHNjYW5jb2RlICYmCisJICAgIGRhdGEtPmxhc3RfdG9nZ2xlID09IHRvZ2dsZSAmJgorCSAgICBkYXRhLT5rZXlwcmVzc2VkKQorCQlnb3RvIHNldF90aW1lcjsKKwlkYXRhLT5sYXN0X3NjYW5jb2RlID0gc2NhbmNvZGU7CisKKwkvKiBEbyB3ZSBuZWVkIHRvIHJlbGVhc2UgYW4gb2xkIGtleXByZXNzPyAqLworCWlmIChkYXRhLT5rZXlwcmVzc2VkKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZGF0YS0+aW5wdXRfZGV2LCBkYXRhLT5sYXN0X2tleWNvZGUsIDApOworCQlpbnB1dF9zeW5jKGRhdGEtPmlucHV0X2Rldik7CisJCWRhdGEtPmtleXByZXNzZWQgPSAwOworCX0KKworCS8qIFJlcG9ydCBzY2FuY29kZSAqLworCWlucHV0X2V2ZW50KGRhdGEtPmlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTiwgKGludClzY2FuY29kZSk7CisKKwkvKiBEbyB3ZSBrbm93IHRoaXMgc2NhbmNvZGU/ICovCisJa2V5Y29kZSA9IHdiY2lyX2RvX2dldGtleWNvZGUoZGF0YSwgc2NhbmNvZGUpOworCWlmIChrZXljb2RlID09IEtFWV9SRVNFUlZFRCkKKwkJZ290byBzZXRfdGltZXI7CisKKwkvKiBSZWdpc3RlciBhIGtleXByZXNzICovCisJaW5wdXRfcmVwb3J0X2tleShkYXRhLT5pbnB1dF9kZXYsIGtleWNvZGUsIDEpOworCWRhdGEtPmtleXByZXNzZWQgPSAxOworCWRhdGEtPmxhc3Rfa2V5Y29kZSA9IGtleWNvZGU7CisJZGF0YS0+bGFzdF90b2dnbGUgPSB0b2dnbGU7CisKK3NldF90aW1lcjoKKwlpbnB1dF9zeW5jKGRhdGEtPmlucHV0X2Rldik7CisJbGVkX3RyaWdnZXJfZXZlbnQoZGF0YS0+cnh0cmlnZ2VyLAorCQkJICBkYXRhLT5rZXlwcmVzc2VkID8gTEVEX0ZVTEwgOiBMRURfT0ZGKTsKKwlkYXRhLT5rZXl1cF9qaWZmaWVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSVJfS0VZUFJFU1NfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZkYXRhLT50aW1lcl9rZXl1cCwgZGF0YS0+a2V5dXBfamlmZmllcyk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJUiBQQVJTSU5HIEZVTkNUSU9OUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUmVzZXRzIGFsbCBpcmRhdGEgKi8KK3N0YXRpYyB2b2lkCit3YmNpcl9yZXNldF9pcmRhdGEoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCit7CisJbWVtc2V0KGRhdGEtPmlyZGF0YSwgMCwgc2l6ZW9mKGRhdGEtPmlyZGF0YSkpOworCWRhdGEtPmlyZGF0YV9jb3VudCA9IDA7CisJZGF0YS0+aXJkYXRhX29mZiA9IDA7CisJZGF0YS0+aXJkYXRhX2Vycm9yID0gMDsKK30KKworLyogQWRkcyBvbmUgYml0IG9mIGlyZGF0YSAqLworc3RhdGljIHZvaWQKK2FkZF9pcmRhdGFfYml0KHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhLCBpbnQgc2V0KQoreworCWlmIChkYXRhLT5pcmRhdGFfY291bnQgPj0gc2l6ZW9mKGRhdGEtPmlyZGF0YSkgKiA4KSB7CisJCWRhdGEtPmlyZGF0YV9lcnJvciA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2V0KQorCQlfX3NldF9iaXQoZGF0YS0+aXJkYXRhX2NvdW50LCBkYXRhLT5pcmRhdGEpOworCWRhdGEtPmlyZGF0YV9jb3VudCsrOworfQorCisvKiBHZXRzIGNvdW50IGJpdHMgb2YgaXJkYXRhICovCitzdGF0aWMgdTE2CitnZXRfYml0cyhzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSwgaW50IGNvdW50KQoreworCXUxNiB2YWwgPSAweDA7CisKKwlpZiAoZGF0YS0+aXJkYXRhX2NvdW50IC0gZGF0YS0+aXJkYXRhX29mZiA8IGNvdW50KSB7CisJCWRhdGEtPmlyZGF0YV9lcnJvciA9IDE7CisJCXJldHVybiAweDA7CisJfQorCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQl2YWwgPDw9IDE7CisJCWlmICh0ZXN0X2JpdChkYXRhLT5pcmRhdGFfb2ZmLCBkYXRhLT5pcmRhdGEpKQorCQkJdmFsIHw9IDB4MTsKKwkJY291bnQtLTsKKwkJZGF0YS0+aXJkYXRhX29mZisrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIFJlYWRzIDE2IGNlbGxzIGFuZCBjb252ZXJ0cyB0aGVtIHRvIGEgYnl0ZSAqLworc3RhdGljIHU4Cit3YmNpcl9yYzZjZWxsc190b19ieXRlKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQoreworCXUxNiByYXcgPSBnZXRfYml0cyhkYXRhLCAxNik7CisJdTggdmFsID0gMHgwMDsKKwlpbnQgYml0OworCisJZm9yIChiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKykgeworCQlzd2l0Y2ggKHJhdyAmIDB4MDMpIHsKKwkJY2FzZSAweDAxOgorCQkJYnJlYWs7CisJCWNhc2UgMHgwMjoKKwkJCXZhbCB8PSAoMHgwMSA8PCBiaXQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYXRhLT5pcmRhdGFfZXJyb3IgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJcmF3ID4+PSAyOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIERlY29kZXMgYSBudW1iZXIgb2YgYml0cyBmcm9tIHJhdyBSQzUgZGF0YSAqLworc3RhdGljIHU4Cit3YmNpcl9nZXRfcmM1Yml0cyhzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXUxNiByYXcgPSBnZXRfYml0cyhkYXRhLCBjb3VudCAqIDIpOworCXU4IHZhbCA9IDB4MDA7CisJaW50IGJpdDsKKworCWZvciAoYml0ID0gMDsgYml0IDwgY291bnQ7IGJpdCsrKSB7CisJCXN3aXRjaCAocmF3ICYgMHgwMykgeworCQljYXNlIDB4MDE6CisJCQl2YWwgfD0gKDB4MDEgPDwgYml0KTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDI6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRhdGEtPmlyZGF0YV9lcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCQlyYXcgPj49IDI7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQKK3diY2lyX3BhcnNlX3JjNihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQoreworCS8qCisJICogTm9ybWFsIGJpdHMgYXJlIG1hbmNoZXN0ZXIgY29kZWQgYXMgZm9sbG93czoKKwkgKiBjZWxsMCArIGNlbGwxID0gbG9naWMgIjAiCisJICogY2VsbDEgKyBjZWxsMCA9IGxvZ2ljICIxIgorCSAqCisJICogVGhlIElSIHB1bHNlIGhhcyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6CisJICoKKwkgKiBMZWFkZXIJCS0gNiAqIGNlbGwxIC0gZGlzY2FyZGVkCisJICogR2FwICAgIAkJLSAyICogY2VsbDAgLSBkaXNjYXJkZWQKKwkgKiBTdGFydCBiaXQJCS0gTm9ybWFsIENvZGluZyAtIGFsd2F5cyAiMSIKKwkgKiBNb2RlIEJpdCAyIC0gMAktIE5vcm1hbCBDb2RpbmcKKwkgKiBUb2dnbGUgYml0CQktIE5vcm1hbCBDb2Rpbmcgd2l0aCBkb3VibGUgYml0IHRpbWUsCisJICoJCQkgIGUuZy4gY2VsbDAgKyBjZWxsMCArIGNlbGwxICsgY2VsbDEKKwkgKgkJCSAgbWVhbnMgbG9naWMgIjAiLgorCSAqCisJICogVGhlIHJlc3QgZGVwZW5kcyBvbiB0aGUgbW9kZSwgdGhlIGZvbGxvd2luZyBtb2RlcyBhcmUga25vd246CisJICoKKwkgKiBNT0RFIDA6CisJICogIEFkZHJlc3MgQml0IDcgLSAwCS0gTm9ybWFsIENvZGluZworCSAqICBDb21tYW5kIEJpdCA3IC0gMAktIE5vcm1hbCBDb2RpbmcKKwkgKgorCSAqIE1PREUgNjoKKwkgKiAgVGhlIGFib3ZlIFRvZ2dsZSBCaXQgaXMgdXNlZCBhcyBhIHN1Ym1vZGUgYml0LCAwID0gQSwgMSA9IEIuCisJICogIFN1Ym1vZGUgQiBpcyBmb3IgcG9pbnRpbmcgZGV2aWNlcywgb25seSByZW1vdGVzIHVzaW5nIHN1Ym1vZGUgQQorCSAqICBhcmUgc3VwcG9ydGVkLgorCSAqCisJICogIEN1c3RvbWVyIHJhbmdlIGJpdAktIDAgPT4gQ3VzdG9tZXIgPSA3IGJpdHMsIDAuLi4xMjcKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIDEgPT4gQ3VzdG9tZXIgPSAxNSBiaXRzLCAzMjc2OC4uLjY1NTM1CisJICogIEN1c3RvbWVyIEJpdHMJLSBOb3JtYWwgQ29kaW5nCisJICoKKwkgKiAgQ3VzdG9tZXIgY29kZXMgYXJlIGFsbG9jYXRlZCBieSBQaGlsaXBzLiBUaGUgcmVzdCBvZiB0aGUgYml0cworCSAqICBhcmUgY3VzdG9tZXIgZGVwZW5kZW50LiBUaGUgZm9sbG93aW5nIGlzIGNvbW1vbmx5IHVzZWQgKGFuZCB0aGUKKwkgKiAgb25seSBzdXBwb3J0ZWQgY29uZmlnKToKKwkgKgorCSAqICBUb2dnbGUgQml0CQktIE5vcm1hbCBDb2RpbmcKKwkgKiAgQWRkcmVzcyBCaXQgNiAtIDAJLSBOb3JtYWwgQ29kaW5nCisJICogIENvbW1hbmQgQml0IDcgLSAwCS0gTm9ybWFsIENvZGluZworCSAqCisJICogQWxsIG1vZGVzIGFyZSBmb2xsb3dlZCBieSBhdCBsZWFzdCA2ICogY2VsbDAuCisJICoKKwkgKiBNT0RFIDAgbXNnbGVuOgorCSAqICAxICogMiAoc3RhcnQgYml0KSArIDMgKiAyIChtb2RlKSArIDIgKiAyICh0b2dnbGUpICsKKwkgKiAgOCAqIDIgKGFkZHJlc3MpICsgOCAqIDIgKGNvbW1hbmQpID0KKwkgKiAgNDQgY2VsbHMKKwkgKgorCSAqIE1PREUgNkEgbXNnbGVuOgorCSAqICAxICogMiAoc3RhcnQgYml0KSArIDMgKiAyIChtb2RlKSArIDIgKiAyIChzdWJtb2RlKSArCisJICogIDEgKiAyIChjdXN0b21lciByYW5nZSBiaXQpICsgNy8xNSAqIDIgKGN1c3RvbWVyIGJpdHMpICsKKwkgKiAgMSAqIDIgKHRvZ2dsZSBiaXQpICsgNyAqIDIgKGFkZHJlc3MpICsgOCAqIDIgKGNvbW1hbmQpID0KKwkgKiAgNjAgLSA3NiBjZWxscworCSAqLworCXU4IG1vZGU7CisJdTggdG9nZ2xlOworCXUxNiBjdXN0b21lciA9IDB4MDsKKwl1OCBhZGRyZXNzOworCXU4IGNvbW1hbmQ7CisJdTMyIHNjYW5jb2RlOworCisJLyogTGVhZGVyIG1hcmsgKi8KKwl3aGlsZSAoZ2V0X2JpdHMoZGF0YSwgMSkgJiYgIWRhdGEtPmlyZGF0YV9lcnJvcikKKwkJLyogRG8gbm90aGluZyAqLzsKKworCS8qIExlYWRlciBzcGFjZSAqLworCWlmIChnZXRfYml0cyhkYXRhLCAxKSkgeworCQlkZXZfZGJnKGRldiwgIlJDNiAtIEludmFsaWQgbGVhZGVyIHNwYWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFN0YXJ0IGJpdCAqLworCWlmIChnZXRfYml0cyhkYXRhLCAyKSAhPSAweDAyKSB7CisJCWRldl9kYmcoZGV2LCAiUkM2IC0gSW52YWxpZCBzdGFydCBiaXRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogTW9kZSAqLworCW1vZGUgPSBnZXRfYml0cyhkYXRhLCA2KTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDB4MTU6IC8qIDAxMDEwMSA9IGIwMDAgKi8KKwkJbW9kZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMHgyOTogLyogMTAxMDAxID0gYjExMCAqLworCQltb2RlID0gNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJSQzYgLSBJbnZhbGlkIG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogVG9nZ2xlIGJpdCAvIFN1Ym1vZGUgYml0ICovCisJdG9nZ2xlID0gZ2V0X2JpdHMoZGF0YSwgNCk7CisJc3dpdGNoICh0b2dnbGUpIHsKKwljYXNlIDB4MDM6CisJCXRvZ2dsZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMHgwQzoKKwkJdG9nZ2xlID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJSQzYgLSBUb2dnbGUgYml0IGVycm9yXG4iKTsKKwkJYnJlYWs7CisJfQorCisJLyogQ3VzdG9tZXIgKi8KKwlpZiAobW9kZSA9PSA2KSB7CisJCWlmICh0b2dnbGUgIT0gMCkgeworCQkJZGV2X2RiZyhkZXYsICJSQzZCIC0gTm90IFN1cHBvcnRlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQljdXN0b21lciA9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7CisKKwkJaWYgKGN1c3RvbWVyICYgMHg4MCkgeworCQkJLyogMTUgYml0IGN1c3RvbWVyIHZhbHVlICovCisJCQljdXN0b21lciA8PD0gODsKKwkJCWN1c3RvbWVyIHw9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7CisJCX0KKwl9CisKKwkvKiBBZGRyZXNzICovCisJYWRkcmVzcyA9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7CisJaWYgKG1vZGUgPT0gNikgeworCQl0b2dnbGUgPSBhZGRyZXNzID4+IDc7CisJCWFkZHJlc3MgJj0gMHg3RjsKKwl9CisKKwkvKiBDb21tYW5kICovCisJY29tbWFuZCA9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7CisKKwkvKiBDcmVhdGUgc2NhbmNvZGUgKi8KKwlzY2FuY29kZSA9ICBjb21tYW5kOworCXNjYW5jb2RlIHw9IGFkZHJlc3MgPDwgODsKKwlzY2FuY29kZSB8PSBjdXN0b21lciA8PCAxNjsKKworCS8qIExhc3Qgc2FuaXR5IGNoZWNrICovCisJaWYgKGRhdGEtPmlyZGF0YV9lcnJvcikgeworCQlkZXZfZGJnKGRldiwgIlJDNiAtIENlbGwgZXJyb3IocylcbiIpOworCQlyZXR1cm47CisJfQorCisJZGV2X2luZm8oZGV2LCAiSVItUkM2IGFkIDB4JTAyWCBjbSAweCUwMlggY3UgMHglMDRYICIKKwkJInRvZ2dsZSAldSBtb2RlICV1IHNjYW4gMHglMDhYXG4iLAorCQlhZGRyZXNzLAorCQljb21tYW5kLAorCQljdXN0b21lciwKKwkJKHVuc2lnbmVkIGludCl0b2dnbGUsCisJCSh1bnNpZ25lZCBpbnQpbW9kZSwKKwkJc2NhbmNvZGUpOworCisJd2JjaXJfa2V5ZG93bihkYXRhLCBzY2FuY29kZSwgdG9nZ2xlKTsKK30KKworc3RhdGljIHZvaWQKK3diY2lyX3BhcnNlX3JjNShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQoreworCS8qCisJICogQml0cyBhcmUgbWFuY2hlc3RlciBjb2RlZCBhcyBmb2xsb3dzOgorCSAqIGNlbGwxICsgY2VsbDAgPSBsb2dpYyAiMCIKKwkgKiBjZWxsMCArIGNlbGwxID0gbG9naWMgIjEiCisJICogKGkuZS4gdGhlIHJldmVyc2Ugb2YgUkM2KQorCSAqCisJICogU3RhcnQgYml0IDEJCS0gIjEiIC0gZGlzY2FyZGVkCisJICogU3RhcnQgYml0IDIJCS0gTXVzdCBiZSBpbnZlcnRlZCB0byBnZXQgY29tbWFuZCBiaXQgNgorCSAqIFRvZ2dsZSBiaXQKKwkgKiBBZGRyZXNzIEJpdCA0IC0gMAorCSAqIENvbW1hbmQgQml0IDUgLSAwCisJICovCisJdTggdG9nZ2xlOworCXU4IGFkZHJlc3M7CisJdTggY29tbWFuZDsKKwl1MzIgc2NhbmNvZGU7CisKKwkvKiBTdGFydCBiaXQgMSAqLworCWlmICghZ2V0X2JpdHMoZGF0YSwgMSkpIHsKKwkJZGV2X2RiZyhkZXYsICJSQzUgLSBJbnZhbGlkIHN0YXJ0IGJpdFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBTdGFydCBiaXQgMiAqLworCWlmICghd2JjaXJfZ2V0X3JjNWJpdHMoZGF0YSwgMSkpCisJCWNvbW1hbmQgPSAweDQwOworCWVsc2UKKwkJY29tbWFuZCA9IDB4MDA7CisKKwl0b2dnbGUgICA9IHdiY2lyX2dldF9yYzViaXRzKGRhdGEsIDEpOworCWFkZHJlc3MgID0gd2JjaXJfZ2V0X3JjNWJpdHMoZGF0YSwgNSk7CisJY29tbWFuZCB8PSB3YmNpcl9nZXRfcmM1Yml0cyhkYXRhLCA2KTsKKwlzY2FuY29kZSA9IGFkZHJlc3MgPDwgNyB8IGNvbW1hbmQ7CisKKwkvKiBMYXN0IHNhbml0eSBjaGVjayAqLworCWlmIChkYXRhLT5pcmRhdGFfZXJyb3IpIHsKKwkJZGV2X2RiZyhkZXYsICJSQzUgLSBJbnZhbGlkIG1lc3NhZ2VcbiIpOworCQlyZXR1cm47CisJfQorCisJZGV2X2RiZyhkZXYsICJJUi1SQzUgYWQgJXUgY20gJXUgdCAldSBzICV1XG4iLAorCQkodW5zaWduZWQgaW50KWFkZHJlc3MsCisJCSh1bnNpZ25lZCBpbnQpY29tbWFuZCwKKwkJKHVuc2lnbmVkIGludCl0b2dnbGUsCisJCSh1bnNpZ25lZCBpbnQpc2NhbmNvZGUpOworCisJd2JjaXJfa2V5ZG93bihkYXRhLCBzY2FuY29kZSwgdG9nZ2xlKTsKK30KKworc3RhdGljIHZvaWQKK3diY2lyX3BhcnNlX25lYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQoreworCS8qCisJICogRWFjaCBiaXQgcmVwcmVzZW50cyA1NjAgdXMuCisJICoKKwkgKiBMZWFkZXIJCS0gOSBtcyBidXJzdAorCSAqIEdhcAkJCS0gNC41IG1zIHNpbGVuY2UKKwkgKiBBZGRyZXNzMSBiaXQgMCAtIDcJLSBBZGRyZXNzIDEKKwkgKiBBZGRyZXNzMiBiaXQgMCAtIDcJLSBBZGRyZXNzIDIKKwkgKiBDb21tYW5kMSBiaXQgMCAtIDcJLSBDb21tYW5kIDEKKwkgKiBDb21tYW5kMiBiaXQgMCAtIDcJLSBDb21tYW5kIDIKKwkgKgorCSAqIE5vdGUgdGhlIGJpdCBvcmRlciEKKwkgKgorCSAqIFdpdGggdGhlIG9sZCBORUMgcHJvdG9jb2wsIEFkZHJlc3MyIHdhcyB0aGUgaW52ZXJzZSBvZiBBZGRyZXNzMQorCSAqIGFuZCBDb21tYW5kMiB3YXMgdGhlIGludmVyc2Ugb2YgQ29tbWFuZDEgYW5kIHdlcmUgdXNlZCBhcworCSAqIGFuIGVycm9yIGNoZWNrLgorCSAqCisJICogV2l0aCBORUMgZXh0ZW5kZWQsIEFkZHJlc3MxIGlzIHRoZSBMU0Igb2YgdGhlIEFkZHJlc3MgYW5kCisJICogQWRkcmVzczIgaXMgdGhlIE1TQiwgQ29tbWFuZCBwYXJzaW5nIHJlbWFpbnMgdW5jaGFuZ2VkLgorCSAqCisJICogQSByZXBlYXQgbWVzc2FnZSBpcyBjb2RlZCBhczoKKwkgKiBMZWFkZXIJCS0gOSBtcyBidXJzdAorCSAqIEdhcAkJCS0gMi4yNSBtcyBzaWxlbmNlCisJICogUmVwZWF0CQktIDU2MCB1cyBhY3RpdmUKKwkgKi8KKwl1OCBhZGRyZXNzMTsKKwl1OCBhZGRyZXNzMjsKKwl1OCBjb21tYW5kMTsKKwl1OCBjb21tYW5kMjsKKwl1MTYgYWRkcmVzczsKKwl1MzIgc2NhbmNvZGU7CisKKwkvKiBMZWFkZXIgbWFyayAqLworCXdoaWxlIChnZXRfYml0cyhkYXRhLCAxKSAmJiAhZGF0YS0+aXJkYXRhX2Vycm9yKQorCQkvKiBEbyBub3RoaW5nICovOworCisJLyogTGVhZGVyIHNwYWNlICovCisJaWYgKGdldF9iaXRzKGRhdGEsIDQpKSB7CisJCWRldl9kYmcoZGV2LCAiTkVDIC0gSW52YWxpZCBsZWFkZXIgc3BhY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogUmVwZWF0PyAqLworCWlmIChnZXRfYml0cyhkYXRhLCAxKSkgeworCQlpZiAoIWRhdGEtPmtleXByZXNzZWQpIHsKKwkJCWRldl9kYmcoZGV2LCAiTkVDIC0gU3RyYXkgcmVwZWF0IG1lc3NhZ2VcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJZGV2X2RiZyhkZXYsICJJUi1ORUMgcmVwZWF0IHMgJXVcbiIsCisJCQkodW5zaWduZWQgaW50KWRhdGEtPmxhc3Rfc2NhbmNvZGUpOworCisJCXdiY2lyX2tleWRvd24oZGF0YSwgZGF0YS0+bGFzdF9zY2FuY29kZSwgZGF0YS0+bGFzdF90b2dnbGUpOworCQlyZXR1cm47CisJfQorCisJLyogUmVtYWluaW5nIGxlYWRlciBzcGFjZSAqLworCWlmIChnZXRfYml0cyhkYXRhLCAzKSkgeworCQlkZXZfZGJnKGRldiwgIk5FQyAtIEludmFsaWQgbGVhZGVyIHNwYWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWFkZHJlc3MxICA9IGJpdHJldjgoZ2V0X2JpdHMoZGF0YSwgOCkpOworCWFkZHJlc3MyICA9IGJpdHJldjgoZ2V0X2JpdHMoZGF0YSwgOCkpOworCWNvbW1hbmQxICA9IGJpdHJldjgoZ2V0X2JpdHMoZGF0YSwgOCkpOworCWNvbW1hbmQyICA9IGJpdHJldjgoZ2V0X2JpdHMoZGF0YSwgOCkpOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKGRhdGEtPmlyZGF0YV9lcnJvcikgeworCQlkZXZfZGJnKGRldiwgIk5FQyAtIEludmFsaWQgbWVzc2FnZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBjb21tYW5kIHZhbGlkaXR5ICovCisJaWYgKGNvbW1hbmQxICE9IH5jb21tYW5kMikgeworCQlkZXZfZGJnKGRldiwgIk5FQyAtIENvbW1hbmQgYnl0ZXMgbWlzbWF0Y2hcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogQ2hlY2sgZm9yIGV4dGVuZGVkIE5FQyBwcm90b2NvbCAqLworCWFkZHJlc3MgPSBhZGRyZXNzMTsKKwlpZiAoYWRkcmVzczEgIT0gfmFkZHJlc3MyKQorCQlhZGRyZXNzIHw9IGFkZHJlc3MyIDw8IDg7CisKKwlzY2FuY29kZSA9IGFkZHJlc3MgPDwgOCB8IGNvbW1hbmQxOworCisJZGV2X2RiZyhkZXYsICJJUi1ORUMgYWQgJXUgY20gJXUgcyAldVxuIiwKKwkJKHVuc2lnbmVkIGludClhZGRyZXNzLAorCQkodW5zaWduZWQgaW50KWNvbW1hbmQxLAorCQkodW5zaWduZWQgaW50KXNjYW5jb2RlKTsKKworCXdiY2lyX2tleWRvd24oZGF0YSwgc2NhbmNvZGUsICFkYXRhLT5sYXN0X3RvZ2dsZSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJTlRFUlJVUFQgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaXJxcmV0dXJuX3QKK3diY2lyX2lycV9oYW5kbGVyKGludCBpcnFubywgdm9pZCAqY29va2llKQoreworCXN0cnVjdCBwbnBfZGV2ICpkZXZpY2UgPSBjb29raWU7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBwbnBfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGV2aWNlLT5kZXY7CisJdTggc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggaXJkYXRhWzhdOworCWludCBpOworCXVuc2lnbmVkIGludCBodzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3YmNpcl9sb2NrLCBmbGFncyk7CisKKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCisJc3RhdHVzID0gaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FSVIpOworCisJaWYgKCEoc3RhdHVzICYgKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YmNpcl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAoc3RhdHVzICYgV0JDSVJfSVJRX0VSUikKKwkJZGF0YS0+aXJkYXRhX2Vycm9yID0gMTsKKworCWlmICghKHN0YXR1cyAmIFdCQ0lSX0lSUV9SWCkpCisJCWdvdG8gb3V0OworCisJLyogU2luY2UgUlhIRExFViBpcyBzZXQsIGF0IGxlYXN0IDggYnl0ZXMgYXJlIGluIHRoZSBGSUZPICovCisJaW5zYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfUlhEQVRBLCAmaXJkYXRhWzBdLCA4KTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoaXJkYXRhKTsgaSsrKSB7CisJCWh3ID0gaHdlaWdodDgoaXJkYXRhW2ldKTsKKwkJaWYgKGh3ID4gNCkKKwkJCWFkZF9pcmRhdGFfYml0KGRhdGEsIDApOworCQllbHNlCisJCQlhZGRfaXJkYXRhX2JpdChkYXRhLCAxKTsKKworCQlpZiAoaHcgPT0gOCkKKwkJCWRhdGEtPmlkbGVfY291bnQrKzsKKwkJZWxzZQorCQkJZGF0YS0+aWRsZV9jb3VudCA9IDA7CisJfQorCisJaWYgKGRhdGEtPmlkbGVfY291bnQgPiBXQkNJUl9NQVhfSURMRV9CWVRFUykgeworCQkvKiBTZXQgUlhJTkFDVElWRS4uLiAqLworCQlvdXRiKFdCQ0lSX1JYX0RJU0FCTEUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19BU0NSKTsKKworCQkvKiAuLi5hbmQgZHJhaW4gdGhlIEZJRk8gKi8KKwkJd2hpbGUgKGluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTFNSKSAmIFdCQ0lSX1JYX0FWQUlMKQorCQkJaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19SWERBVEEpOworCisJCWRldl9kYmcoZGV2LCAiSVJEQVRBOlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5pcmRhdGFfY291bnQ7IGkgKz0gQklUU19QRVJfTE9ORykKKwkJCWRldl9kYmcoZGV2LCAiMHglMDhsWFxuIiwgZGF0YS0+aXJkYXRhW2kvQklUU19QRVJfTE9OR10pOworCisJCXN3aXRjaCAocHJvdG9jb2wpIHsKKwkJY2FzZSBJUl9QUk9UT0NPTF9SQzU6CisJCQl3YmNpcl9wYXJzZV9yYzUoZGV2LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIElSX1BST1RPQ09MX1JDNjoKKwkJCXdiY2lyX3BhcnNlX3JjNihkZXYsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgorCQkJd2JjaXJfcGFyc2VfbmVjKGRldiwgZGF0YSk7CisJCQlicmVhazsKKwkJfQorCisJCXdiY2lyX3Jlc2V0X2lyZGF0YShkYXRhKTsKKwkJZGF0YS0+aWRsZV9jb3VudCA9IDA7CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2JjaXJfbG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNVU1BFTkQvUkVTVU1FIEZVTkNUSU9OUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK3diY2lyX3NodXRkb3duKHN0cnVjdCBwbnBfZGV2ICpkZXZpY2UpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRldmljZS0+ZGV2OworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gcG5wX2dldF9kcnZkYXRhKGRldmljZSk7CisJaW50IGRvX3dha2UgPSAxOworCXU4IG1hdGNoWzExXTsKKwl1OCBtYXNrWzExXTsKKwl1OCByYzZfY3NsID0gMDsKKwlpbnQgaTsKKworCW1lbXNldChtYXRjaCwgMCwgc2l6ZW9mKG1hdGNoKSk7CisJbWVtc2V0KG1hc2ssIDAsIHNpemVvZihtYXNrKSk7CisKKwlpZiAod2FrZV9zYyA9PSBJTlZBTElEX1NDQU5DT0RFIHx8ICFkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7CisJCWRvX3dha2UgPSAwOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBJUl9QUk9UT0NPTF9SQzU6CisJCWlmICh3YWtlX3NjID4gMHhGRkYpIHsKKwkJCWRvX3dha2UgPSAwOworCQkJZGV2X2VycihkZXYsICJSQzUgLSBJbnZhbGlkIHdha2Ugc2NhbmNvZGVcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBNYXNrID0gMTMgYml0cywgZXggdG9nZ2xlICovCisJCW1hc2tbMF0gPSAweEZGOworCQltYXNrWzFdID0gMHgxNzsKKworCQltYXRjaFswXSAgPSAod2FrZV9zYyAmIDB4MDAzRik7ICAgICAgLyogNiBjb21tYW5kIGJpdHMgKi8KKwkJbWF0Y2hbMF0gfD0gKHdha2Vfc2MgJiAweDAxODApID4+IDE7IC8qIDIgYWRkcmVzcyBiaXRzICovCisJCW1hdGNoWzFdICA9ICh3YWtlX3NjICYgMHgwRTAwKSA+PiA5OyAvKiAzIGFkZHJlc3MgYml0cyAqLworCQlpZiAoISh3YWtlX3NjICYgMHgwMDQwKSkgICAgICAgICAgICAgLyogMm5kIHN0YXJ0IGJpdCAgKi8KKwkJCW1hdGNoWzFdIHw9IDB4MTA7CisKKwkJYnJlYWs7CisKKwljYXNlIElSX1BST1RPQ09MX05FQzoKKwkJaWYgKHdha2Vfc2MgPiAweEZGRkZGRikgeworCQkJZG9fd2FrZSA9IDA7CisJCQlkZXZfZXJyKGRldiwgIk5FQyAtIEludmFsaWQgd2FrZSBzY2FuY29kZVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCW1hc2tbMF0gPSBtYXNrWzFdID0gbWFza1syXSA9IG1hc2tbM10gPSAweEZGOworCisJCW1hdGNoWzFdID0gYml0cmV2OCgod2FrZV9zYyAmIDB4RkYpKTsKKwkJbWF0Y2hbMF0gPSB+bWF0Y2hbMV07CisKKwkJbWF0Y2hbM10gPSBiaXRyZXY4KCh3YWtlX3NjICYgMHhGRjAwKSA+PiA4KTsKKwkJaWYgKHdha2Vfc2MgPiAweEZGRkYpCisJCQltYXRjaFsyXSA9IGJpdHJldjgoKHdha2Vfc2MgJiAweEZGMDAwMCkgPj4gMTYpOworCQllbHNlCisJCQltYXRjaFsyXSA9IH5tYXRjaFszXTsKKworCQlicmVhazsKKworCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgorCisJCWlmICh3YWtlX3JjNm1vZGUgPT0gMCkgeworCQkJaWYgKHdha2Vfc2MgPiAweEZGRkYpIHsKKwkJCQlkb193YWtlID0gMDsKKwkJCQlkZXZfZXJyKGRldiwgIlJDNiAtIEludmFsaWQgd2FrZSBzY2FuY29kZVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIENvbW1hbmQgKi8KKwkJCW1hdGNoWzBdID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgMCk7CisJCQltYXNrWzBdICA9IDB4RkY7CisJCQltYXRjaFsxXSA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDQpOworCQkJbWFza1sxXSAgPSAweEZGOworCisJCQkvKiBBZGRyZXNzICovCisJCQltYXRjaFsyXSA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDgpOworCQkJbWFza1syXSAgPSAweEZGOworCQkJbWF0Y2hbM10gPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDEyKTsKKwkJCW1hc2tbM10gID0gMHhGRjsKKworCQkJLyogSGVhZGVyICovCisJCQltYXRjaFs0XSA9IDB4NTA7IC8qIG1vZGUxID0gbW9kZTAgPSAwLCBpZ25vcmUgdG9nZ2xlICovCisJCQltYXNrWzRdICA9IDB4RjA7CisJCQltYXRjaFs1XSA9IDB4MDk7IC8qIHN0YXJ0IGJpdCA9IDEsIG1vZGUyID0gMCAqLworCQkJbWFza1s1XSAgPSAweDBGOworCisJCQlyYzZfY3NsID0gNDQ7CisKKwkJfSBlbHNlIGlmICh3YWtlX3JjNm1vZGUgPT0gNikgeworCQkJaSA9IDA7CisKKwkJCS8qIENvbW1hbmQgKi8KKwkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDApOworCQkJbWFza1tpKytdID0gMHhGRjsKKwkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDQpOworCQkJbWFza1tpKytdID0gMHhGRjsKKworCQkJLyogQWRkcmVzcyArIFRvZ2dsZSAqLworCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgOCk7CisJCQltYXNrW2krK10gPSAweEZGOworCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAxMik7CisJCQltYXNrW2krK10gPSAweDNGOworCisJCQkvKiBDdXN0b21lciBiaXRzIDcgLSAwICovCisJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDE2KTsKKwkJCW1hc2tbaSsrXSA9IDB4RkY7CisJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDIwKTsKKwkJCW1hc2tbaSsrXSA9IDB4RkY7CisKKwkJCWlmICh3YWtlX3NjICYgMHg4MDAwMDAwMCkgeworCQkJCS8qIEN1c3RvbWVyIHJhbmdlIGJpdCBhbmQgYml0cyAxNSAtIDggKi8KKwkJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDI0KTsKKwkJCQltYXNrW2krK10gPSAweEZGOworCQkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMjgpOworCQkJCW1hc2tbaSsrXSA9IDB4RkY7CisJCQkJcmM2X2NzbCA9IDc2OworCQkJfSBlbHNlIGlmICh3YWtlX3NjIDw9IDB4MDA3RkZGRkYpIHsKKwkJCQlyYzZfY3NsID0gNjA7CisJCQl9IGVsc2UgeworCQkJCWRvX3dha2UgPSAwOworCQkJCWRldl9lcnIoZGV2LCAiUkM2IC0gSW52YWxpZCB3YWtlIHNjYW5jb2RlXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogSGVhZGVyICovCisJCQltYXRjaFtpXSAgPSAweDkzOyAvKiBtb2RlMSA9IG1vZGUwID0gMSwgc3VibW9kZSA9IDAgKi8KKwkJCW1hc2tbaSsrXSA9IDB4RkY7CisJCQltYXRjaFtpXSAgPSAweDBBOyAvKiBzdGFydCBiaXQgPSAxLCBtb2RlMiA9IDEgKi8KKwkJCW1hc2tbaSsrXSA9IDB4MEY7CisKKwkJfSBlbHNlIHsKKwkJCWRvX3dha2UgPSAwOworCQkJZGV2X2VycihkZXYsICJSQzYgLSBJbnZhbGlkIHdha2UgbW9kZVxuIik7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRvX3dha2UgPSAwOworCQlicmVhazsKKwl9CisKK2ZpbmlzaDoKKwlpZiAoZG9fd2FrZSkgeworCQkvKiBTZXQgY29tcGFyZSBhbmQgY29tcGFyZSBtYXNrICovCisJCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0lOREVYLAorCQkJICAgICAgIFdCQ0lSX1JFR1NFTF9DT01QQVJFIHwgV0JDSVJfUkVHX0FERFIwLAorCQkJICAgICAgIDB4M0YpOworCQlvdXRzYihkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9EQVRBLCBtYXRjaCwgMTEpOworCQl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWCwKKwkJCSAgICAgICBXQkNJUl9SRUdTRUxfTUFTSyB8IFdCQ0lSX1JFR19BRERSMCwKKwkJCSAgICAgICAweDNGKTsKKwkJb3V0c2IoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfREFUQSwgbWFzaywgMTEpOworCisJCS8qIFJDNiBDb21wYXJlIFN0cmluZyBMZW4gKi8KKwkJb3V0YihyYzZfY3NsLCBkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9DU0wpOworCisJCS8qIENsZWFyIHN0YXR1cyBiaXRzIE5FQ19SRVAsIEJVRkYsIE1TR19FTkQsIE1BVENIICovCisJCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX1NUUywgMHgxNywgMHgxNyk7CisKKwkJLyogQ2xlYXIgQlVGRl9FTiwgQ2xlYXIgRU5EX0VOLCBTZXQgTUFUQ0hfRU4gKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfRVZfRU4sIDB4MDEsIDB4MDcpOworCisJCS8qIFNldCBDRUlSX0VOICovCisJCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NUTCwgMHgwMSwgMHgwMSk7CisKKwl9IGVsc2UgeworCQkvKiBDbGVhciBCVUZGX0VOLCBDbGVhciBFTkRfRU4sIENsZWFyIE1BVENIX0VOICovCisJCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0VWX0VOLCAweDAwLCAweDA3KTsKKworCQkvKiBDbGVhciBDRUlSX0VOICovCisJCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NUTCwgMHgwMCwgMHgwMSk7CisJfQorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJb3V0YihXQkNJUl9JUlFfTk9ORSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lFUik7Cit9CisKK3N0YXRpYyBpbnQKK3diY2lyX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKmRldmljZSwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXdiY2lyX3NodXRkb3duKGRldmljZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3diY2lyX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlKQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gcG5wX2dldF9kcnZkYXRhKGRldmljZSk7CisKKwkvKiBDbGVhciBCVUZGX0VOLCBDbGVhciBFTkRfRU4sIENsZWFyIE1BVENIX0VOICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfRVZfRU4sIDB4MDAsIDB4MDcpOworCisJLyogQ2xlYXIgQ0VJUl9FTiAqLworCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NUTCwgMHgwMCwgMHgwMSk7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCXdiY2lyX3Jlc2V0X2lyZGF0YShkYXRhKTsKKwlvdXRiKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCisJcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTRVRVUC9JTklUIEZVTkNUSU9OUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK3diY2lyX2NmZ19jZWlyKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQoreworCXU4IHRtcDsKKworCS8qIFNldCBQUk9UX1NFTCwgUlhfSU5WLCBDbGVhciBDRUlSX0VOIChuZWVkZWQgZm9yIHRoZSBsZWQpICovCisJdG1wID0gcHJvdG9jb2wgPDwgNDsKKwlpZiAoaW52ZXJ0KQorCQl0bXAgfD0gMHgwODsKKwlvdXRiKHRtcCwgZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMKTsKKworCS8qIENsZWFyIHN0YXR1cyBiaXRzIE5FQ19SRVAsIEJVRkYsIE1TR19FTkQsIE1BVENIICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfU1RTLCAweDE3LCAweDE3KTsKKworCS8qIENsZWFyIEJVRkZfRU4sIENsZWFyIEVORF9FTiwgQ2xlYXIgTUFUQ0hfRU4gKi8KKwl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMCwgMHgwNyk7CisKKwkvKiBTZXQgUkM1IGNlbGwgdGltZSB0byBjb3JyZXNwb25kIHRvIDM2IGtIeiAqLworCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NGRzEsIDB4NEEsIDB4N0YpOworCisJLyogU2V0IElSVFhfSU5WICovCisJaWYgKGludmVydCkKKwkJb3V0YigweDA0LCBkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DQ1RMKTsKKwllbHNlCisJCW91dGIoMHgwMCwgZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ0NUTCk7CisKKwkvKgorCSAqIENsZWFyIElSIExFRCwgc2V0IFNQMyBjbG9jayB0byAyNE1oegorCSAqIHNldCBTUDNfSVJSWF9TVyB0byBiaW5hcnkgMDEsIGhlbHBmdWxseSBub3QgZG9jdW1lbnRlZAorCSAqLworCW91dGIoMHgxMCwgZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ1RTKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3diY2lyX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXZpY2UsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRldmljZS0+ZGV2OworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlpZiAoIShwbnBfcG9ydF9sZW4oZGV2aWNlLCAwKSA9PSBFSEZVTkNfSU9NRU1fTEVOICYmCisJICAgICAgcG5wX3BvcnRfbGVuKGRldmljZSwgMSkgPT0gV0FLRVVQX0lPTUVNX0xFTiAmJgorCSAgICAgIHBucF9wb3J0X2xlbihkZXZpY2UsIDIpID09IFNQX0lPTUVNX0xFTikpIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHJlc291cmNlc1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJcG5wX3NldF9kcnZkYXRhKGRldmljZSwgZGF0YSk7CisKKwlkYXRhLT5lYmFzZSA9IHBucF9wb3J0X3N0YXJ0KGRldmljZSwgMCk7CisJZGF0YS0+d2Jhc2UgPSBwbnBfcG9ydF9zdGFydChkZXZpY2UsIDEpOworCWRhdGEtPnNiYXNlID0gcG5wX3BvcnRfc3RhcnQoZGV2aWNlLCAyKTsKKwlkYXRhLT5pcnEgPSBwbnBfaXJxKGRldmljZSwgMCk7CisKKwlpZiAoZGF0YS0+d2Jhc2UgPT0gMCB8fCBkYXRhLT5lYmFzZSA9PSAwIHx8CisJICAgIGRhdGEtPnNiYXNlID09IDAgfHwgZGF0YS0+aXJxID09IDApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXhpdF9mcmVlX2RhdGE7CisJfQorCisJZGV2X2RiZygmZGV2aWNlLT5kZXYsICJGb3VuZCBkZXZpY2UgIgorCQkiKHc6IDB4JWxYLCBlOiAweCVsWCwgczogMHglbFgsIGk6ICV1KVxuIiwKKwkJZGF0YS0+d2Jhc2UsIGRhdGEtPmViYXNlLCBkYXRhLT5zYmFzZSwgZGF0YS0+aXJxKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oZGF0YS0+d2Jhc2UsIFdBS0VVUF9JT01FTV9MRU4sIERSVk5BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAiUmVnaW9uIDB4JWx4LTB4JWx4IGFscmVhZHkgaW4gdXNlIVxuIiwKKwkJCWRhdGEtPndiYXNlLCBkYXRhLT53YmFzZSArIFdBS0VVUF9JT01FTV9MRU4gLSAxKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXRfZnJlZV9kYXRhOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oZGF0YS0+ZWJhc2UsIEVIRlVOQ19JT01FTV9MRU4sIERSVk5BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAiUmVnaW9uIDB4JWx4LTB4JWx4IGFscmVhZHkgaW4gdXNlIVxuIiwKKwkJCWRhdGEtPmViYXNlLCBkYXRhLT5lYmFzZSArIEVIRlVOQ19JT01FTV9MRU4gLSAxKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXRfcmVsZWFzZV93YmFzZTsKKwl9CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGRhdGEtPnNiYXNlLCBTUF9JT01FTV9MRU4sIERSVk5BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAiUmVnaW9uIDB4JWx4LTB4JWx4IGFscmVhZHkgaW4gdXNlIVxuIiwKKwkJCWRhdGEtPnNiYXNlLCBkYXRhLT5zYmFzZSArIFNQX0lPTUVNX0xFTiAtIDEpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXhpdF9yZWxlYXNlX2ViYXNlOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKGRhdGEtPmlycSwgd2JjaXJfaXJxX2hhbmRsZXIsCisJCQkgIElSUUZfRElTQUJMRUQsIERSVk5BTUUsIGRldmljZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjbGFpbSBJUlEgJXVcbiIsIGRhdGEtPmlycSk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBleGl0X3JlbGVhc2Vfc2Jhc2U7CisJfQorCisJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJjaXItdHgiLCAmZGF0YS0+dHh0cmlnZ2VyKTsKKwlpZiAoIWRhdGEtPnR4dHJpZ2dlcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfZnJlZV9pcnE7CisJfQorCisJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJjaXItcngiLCAmZGF0YS0+cnh0cmlnZ2VyKTsKKwlpZiAoIWRhdGEtPnJ4dHJpZ2dlcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl90eHRyaWdnZXI7CisJfQorCisJZGF0YS0+bGVkLm5hbWUgPSAiY2lyOjphY3Rpdml0eSI7CisJZGF0YS0+bGVkLmRlZmF1bHRfdHJpZ2dlciA9ICJjaXItcngiOworCWRhdGEtPmxlZC5icmlnaHRuZXNzX3NldCA9IHdiY2lyX2xlZF9icmlnaHRuZXNzX3NldDsKKwlkYXRhLT5sZWQuYnJpZ2h0bmVzc19nZXQgPSB3YmNpcl9sZWRfYnJpZ2h0bmVzc19nZXQ7CisJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZkZXZpY2UtPmRldiwgJmRhdGEtPmxlZCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X3VucmVnaXN0ZXJfcnh0cmlnZ2VyOworCisJZGF0YS0+aW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkYXRhLT5pbnB1dF9kZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3VucmVnaXN0ZXJfbGVkOworCX0KKworCWRhdGEtPmlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlkYXRhLT5pbnB1dF9kZXYtPm5hbWUgPSBXQkNJUl9OQU1FOworCWRhdGEtPmlucHV0X2Rldi0+cGh5cyA9ICJ3YmNpci9jaXIwIjsKKwlkYXRhLT5pbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlkYXRhLT5pbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBQQ0lfVkVORE9SX0lEX1dJTkJPTkQ7CisJZGF0YS0+aW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gV0JDSVJfSURfRkFNSUxZOworCWRhdGEtPmlucHV0X2Rldi0+aWQudmVyc2lvbiA9IFdCQ0lSX0lEX0NISVA7CisJZGF0YS0+aW5wdXRfZGV2LT5nZXRrZXljb2RlID0gd2JjaXJfZ2V0a2V5Y29kZTsKKwlkYXRhLT5pbnB1dF9kZXYtPnNldGtleWNvZGUgPSB3YmNpcl9zZXRrZXljb2RlOworCWlucHV0X3NldF9jYXBhYmlsaXR5KGRhdGEtPmlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTik7CisJaW5wdXRfc2V0X2RydmRhdGEoZGF0YS0+aW5wdXRfZGV2LCBkYXRhKTsKKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9mcmVlX2lucHV0OworCisJZGF0YS0+bGFzdF9zY2FuY29kZSA9IElOVkFMSURfU0NBTkNPREU7CisJSU5JVF9MSVNUX0hFQUQoJmRhdGEtPmtleXRhYmxlKTsKKwlzZXR1cF90aW1lcigmZGF0YS0+dGltZXJfa2V5dXAsIHdiY2lyX2tleXVwLCAodW5zaWduZWQgbG9uZylkYXRhKTsKKworCS8qIExvYWQgZGVmYXVsdCBrZXltYXBzICovCisJaWYgKHByb3RvY29sID09IElSX1BST1RPQ09MX1JDNikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmM2X2RlZl9rZXltYXApOyBpKyspIHsKKwkJCWVyciA9IHdiY2lyX3NldGtleWNvZGUoZGF0YS0+aW5wdXRfZGV2LAorCQkJCQkgICAgICAgKGludClyYzZfZGVmX2tleW1hcFtpXS5zY2FuY29kZSwKKwkJCQkJICAgICAgIChpbnQpcmM2X2RlZl9rZXltYXBbaV0ua2V5Y29kZSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXhpdF91bnJlZ2lzdGVyX2tleXM7CisJCX0KKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJmRldmljZS0+ZGV2LCAxKTsKKworCXdiY2lyX2NmZ19jZWlyKGRhdGEpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKKworCS8qIEVuYWJsZSBleHRlbmRlZCBtb2RlICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18yKTsKKwlvdXRiKFdCQ0lSX0VYVF9FTkFCTEUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMSk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBiYXVkIGdlbmVyYXRvciwgSVIgZGF0YSB3aWxsIGJlIHNhbXBsZWQgYXQKKwkgKiBhIGJpdHJhdGUgb2Y6ICgyNE1oeiAqIHByZXNjYWxlcikgLyAoZGl2aXNvciAqIDE2KS4KKwkgKgorCSAqIFRoZSBFQ0lSIHJlZ2lzdGVycyBpbmNsdWRlIGEgZmxhZyB0byBjaGFuZ2UgdGhlCisJICogMjRNaHogY2xvY2sgZnJlcSB0byA0OE1oei4KKwkgKgorCSAqIEl0J3Mgbm90IGRvY3VtZW50ZWQgaW4gdGhlIHNwZWNzLCBidXQgZmlmbyBsZXZlbHMKKwkgKiBvdGhlciB0aGFuIDE2IHNlZW1zIHRvIGJlIHVuc3VwcG9ydGVkLgorCSAqLworCisJLyogcHJlc2NhbGVyIDEuMCwgdHgvcnggZmlmbyBsdmwgMTYgKi8KKwlvdXRiKDB4MzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMik7CisKKwkvKiBTZXQgYmF1ZCBkaXZpc29yIHRvIGdlbmVyYXRlIG9uZSBieXRlIHBlciBiaXQvY2VsbCAqLworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIElSX1BST1RPQ09MX1JDNToKKwkJb3V0YigweEE3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7CisJCWJyZWFrOworCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgorCQlvdXRiKDB4NTMsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKKwkJYnJlYWs7CisJY2FzZSBJUl9QUk9UT0NPTF9ORUM6CisJCW91dGIoMHg2OSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOworCQlicmVhazsKKwl9CisJb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdESCk7CisKKwkvKiBTZXQgQ0VJUiBtb2RlICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKDB4QzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NQ1IpOworCWluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTFNSKTsgLyogQ2xlYXIgTFNSICovCisJaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NU1IpOyAvKiBDbGVhciBNU1IgKi8KKworCS8qIERpc2FibGUgUlggZGVtb2QsIHJ1bi1sZW5ndGggZW5jb2RpbmcvZGVjb2RpbmcsIHNldCBmcmVxIHNwYW4gKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzcpOworCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JDQ0ZHKTsKKworCS8qIERpc2FibGUgdGltZXIgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzQpOworCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IxKTsKKworCS8qIEVuYWJsZSBNU1IgaW50ZXJydXB0LCBDbGVhciBBVVhfSVJYICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS181KTsKKwlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMik7CisKKwkvKiBEaXNhYmxlIENSQyAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNik7CisJb3V0YigweDIwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjMpOworCisJLyogU2V0IFJYL1RYIChkZSltb2R1bGF0aW9uIGZyZXEsIG5vdCByZWFsbHkgdXNlZCAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNyk7CisJb3V0YigweEYyLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJSWERDKTsKKwlvdXRiKDB4NjksIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUlRYTUMpOworCisJLyogU2V0IGludmVydCBhbmQgcGluIGRpcmVjdGlvbiAqLworCWlmIChpbnZlcnQpCisJCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ0ZHNCk7CisJZWxzZQorCQlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNGRzQpOworCisJLyogU2V0IEZJRk8gdGhyZXNob2xkcyAoUlggPSA4LCBUWCA9IDMpLCByZXNldCBSWC9UWCAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7CisJb3V0YigweDk3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRkNSKTsKKworCS8qIENsZWFyIEFVWCBzdGF0dXMgYml0cyAqLworCW91dGIoMHhFMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0FTQ1IpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlvdXRiKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCisJcmV0dXJuIDA7CisKK2V4aXRfdW5yZWdpc3Rlcl9rZXlzOgorCWlmICghbGlzdF9lbXB0eSgmZGF0YS0+a2V5dGFibGUpKSB7CisJCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5OworCQlzdHJ1Y3Qgd2JjaXJfa2V5ZW50cnkgKmtleXRtcDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCBrZXl0bXAsICZkYXRhLT5rZXl0YWJsZSwgbGlzdCkgeworCQkJbGlzdF9kZWwoJmtleS0+bGlzdCk7CisJCQlrZnJlZShrZXkpOworCQl9CisJfQorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7CisJLyogQ2FuJ3QgY2FsbCBpbnB1dF9mcmVlX2RldmljZSBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlICovCisJZGF0YS0+aW5wdXRfZGV2ID0gTlVMTDsKK2V4aXRfZnJlZV9pbnB1dDoKKwlpbnB1dF9mcmVlX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOworZXhpdF91bnJlZ2lzdGVyX2xlZDoKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZGF0YS0+bGVkKTsKK2V4aXRfdW5yZWdpc3Rlcl9yeHRyaWdnZXI6CisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoZGF0YS0+cnh0cmlnZ2VyKTsKK2V4aXRfdW5yZWdpc3Rlcl90eHRyaWdnZXI6CisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoZGF0YS0+dHh0cmlnZ2VyKTsKK2V4aXRfZnJlZV9pcnE6CisJZnJlZV9pcnEoZGF0YS0+aXJxLCBkZXZpY2UpOworZXhpdF9yZWxlYXNlX3NiYXNlOgorCXJlbGVhc2VfcmVnaW9uKGRhdGEtPnNiYXNlLCBTUF9JT01FTV9MRU4pOworZXhpdF9yZWxlYXNlX2ViYXNlOgorCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmViYXNlLCBFSEZVTkNfSU9NRU1fTEVOKTsKK2V4aXRfcmVsZWFzZV93YmFzZToKKwlyZWxlYXNlX3JlZ2lvbihkYXRhLT53YmFzZSwgV0FLRVVQX0lPTUVNX0xFTik7CitleGl0X2ZyZWVfZGF0YToKKwlrZnJlZShkYXRhKTsKKwlwbnBfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0Cit3YmNpcl9yZW1vdmUoc3RydWN0IHBucF9kZXYgKmRldmljZSkKK3sKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IHBucF9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5OworCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5dG1wOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKKworCWRlbF90aW1lcl9zeW5jKCZkYXRhLT50aW1lcl9rZXl1cCk7CisKKwlmcmVlX2lycShkYXRhLT5pcnEsIGRldmljZSk7CisKKwkvKiBDbGVhciBzdGF0dXMgYml0cyBORUNfUkVQLCBCVUZGLCBNU0dfRU5ELCBNQVRDSCAqLworCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX1NUUywgMHgxNywgMHgxNyk7CisKKwkvKiBDbGVhciBDRUlSX0VOICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAwLCAweDAxKTsKKworCS8qIENsZWFyIEJVRkZfRU4sIEVORF9FTiwgTUFUQ0hfRU4gKi8KKwl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMCwgMHgwNyk7CisKKwkvKiBUaGlzIHdpbGwgZ2VuZXJhdGUgYSBrZXl1cCBldmVudCBpZiBuZWNlc3NhcnkgKi8KKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOworCisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoZGF0YS0+cnh0cmlnZ2VyKTsKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShkYXRhLT50eHRyaWdnZXIpOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkYXRhLT5sZWQpOworCisJLyogVGhpcyBpcyBvayBzaW5jZSAmZGF0YS0+bGVkIGlzbid0IGFjdHVhbGx5IHVzZWQgKi8KKwl3YmNpcl9sZWRfYnJpZ2h0bmVzc19zZXQoJmRhdGEtPmxlZCwgTEVEX09GRik7CisKKwlyZWxlYXNlX3JlZ2lvbihkYXRhLT53YmFzZSwgV0FLRVVQX0lPTUVNX0xFTik7CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+ZWJhc2UsIEVIRlVOQ19JT01FTV9MRU4pOworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPnNiYXNlLCBTUF9JT01FTV9MRU4pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwga2V5dG1wLCAmZGF0YS0+a2V5dGFibGUsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmtleS0+bGlzdCk7CisJCWtmcmVlKGtleSk7CisJfQorCisJa2ZyZWUoZGF0YSk7CisKKwlwbnBfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHdiY2lyX2lkc1tdID0geworCXsgIldFQzEwMjIiLCAwIH0sCisJeyAiIiwgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHdiY2lyX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciB3YmNpcl9kcml2ZXIgPSB7CisJLm5hbWUgICAgID0gV0JDSVJfTkFNRSwKKwkuaWRfdGFibGUgPSB3YmNpcl9pZHMsCisJLnByb2JlICAgID0gd2JjaXJfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod2JjaXJfcmVtb3ZlKSwKKwkuc3VzcGVuZCAgPSB3YmNpcl9zdXNwZW5kLAorCS5yZXN1bWUgICA9IHdiY2lyX3Jlc3VtZSwKKwkuc2h1dGRvd24gPSB3YmNpcl9zaHV0ZG93bgorfTsKKworc3RhdGljIGludCBfX2luaXQKK3diY2lyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgSVJfUFJPVE9DT0xfUkM1OgorCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgorCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBJbnZhbGlkIHByb3RvY29sIGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmd2JjaXJfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBVbmFibGUgdG8gcmVnaXN0ZXIgZHJpdmVyXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAord2JjaXJfZXhpdCh2b2lkKQoreworCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmd2JjaXJfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiRGF2aWQgSORyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFN1cGVySS9PIENvbnN1bWVyIElSIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdCh3YmNpcl9pbml0KTsKK21vZHVsZV9leGl0KHdiY2lyX2V4aXQpOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc3LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3Ny5jCmluZGV4IGVjYWViN2UuLmViODM5MzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3Ny5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc3LmMKQEAgLTg0MiwzICs4NDIsNCBAQAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUQ3ODc3IHRvdWNoc2NyZWVuIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6YWQ3ODc3Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYwppbmRleCA1ZDhhNzAzLi4xOWI0ZGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKQEAgLTc3OSwzICs3NzksNCBAQAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUQ3ODc5KC0xKSB0b3VjaHNjcmVlbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOmFkNzg3OSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCBiYTlkMzhjLi4wOWM4MTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtMTI1NiwzICsxMjU2LDQgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBRFM3ODQ2IFRvdWNoU2NyZWVuIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6YWRzNzg0NiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYwppbmRleCBiZmY3MmQ4Li45ZjhmNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYwpAQCAtODksNyArODksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2FwaWZzX3NvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNhcGlmc19zb3BzID0KIHsKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiAJLnJlbW91bnRfZnMJPSBjYXBpZnNfcmVtb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGl1dGlsLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpdXRpbC5jCmluZGV4IDE2ZjJlNDYuLjI2NjI2ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGl1dGlsLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaXV0aWwuYwpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIAlpZiAoIWdfZGViYnVmLT5idWYpIHsKIAkJa2ZyZWUoZ19jbXNnKTsKIAkJa2ZyZWUoZ19kZWJidWYpOwotCQlyZXR1cm4gLUVOT01FTTs7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAlnX2RlYmJ1Zi0+c2l6ZSA9IENERUJVR19HU0laRTsKIAlnX2RlYmJ1Zi0+YnVmWzBdID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwppbmRleCA1MGVkNzc4Li4wOWQ0ZGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCkBAIC04OSwxNCArODksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY29udHJvbGxlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9jb250cm9sbGVyX29wcyA9IHsKIAkuc3RhcnQJPSBjb250cm9sbGVyX3N0YXJ0LAogCS5uZXh0CT0gY29udHJvbGxlcl9uZXh0LAogCS5zdG9wCT0gY29udHJvbGxlcl9zdG9wLAogCS5zaG93CT0gY29udHJvbGxlcl9zaG93LAogfTsKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY29udHJzdGF0c19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9jb250cnN0YXRzX29wcyA9IHsKIAkuc3RhcnQJPSBjb250cm9sbGVyX3N0YXJ0LAogCS5uZXh0CT0gY29udHJvbGxlcl9uZXh0LAogCS5zdG9wCT0gY29udHJvbGxlcl9zdG9wLApAQCAtMTk0LDE0ICsxOTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfYXBwbGljYXRpb25zX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2FwcGxpY2F0aW9uc19vcHMgPSB7CiAJLnN0YXJ0CT0gYXBwbGljYXRpb25zX3N0YXJ0LAogCS5uZXh0CT0gYXBwbGljYXRpb25zX25leHQsCiAJLnN0b3AJPSBhcHBsaWNhdGlvbnNfc3RvcCwKIAkuc2hvdwk9IGFwcGxpY2F0aW9uc19zaG93LAogfTsKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfYXBwbHN0YXRzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2FwcGxzdGF0c19vcHMgPSB7CiAJLnN0YXJ0CT0gYXBwbGljYXRpb25zX3N0YXJ0LAogCS5uZXh0CT0gYXBwbGljYXRpb25zX25leHQsCiAJLnN0b3AJPSBhcHBsaWNhdGlvbnNfc3RvcCwKQEAgLTI2NCw3ICsyNjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9jYXBpX2RyaXZlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9jYXBpX2RyaXZlcl9vcHMgPSB7CiAJLnN0YXJ0CT0gY2FwaV9kcml2ZXJfc3RhcnQsCiAJLm5leHQJPSBjYXBpX2RyaXZlcl9uZXh0LAogCS5zdG9wCT0gY2FwaV9kcml2ZXJfc3RvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKaW5kZXggOGZmN2UzNS4uZjMzYWMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKQEAgLTQwOCwzMyArNDA4LDI4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBlcnJvciByZXR1cm5zICovCi0KIHN0YXRpYyBpbnQgaWZfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGNhcmRzdGF0ZSAqY3M7Ci0JaW50IHJldHZhbCA9IC1FTk9ERVY7CisJaW50IHJldHZhbCA9IDA7CiAKIAljcyA9IChzdHJ1Y3QgY2FyZHN0YXRlICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFjcykgewogCQlwcl9lcnIoIiVzOiBubyBjYXJkc3RhdGVcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiAwOwogCX0KIAogCWdpZ19kYmcoREVCVUdfSUYsICIldTogJXMoKSIsIGNzLT5taW5vcl9pbmRleCwgX19mdW5jX18pOwogCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsgLy8gRklYTUUgLUVJTlRSPworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKLQlpZiAoIWNzLT5jb25uZWN0ZWQpIHsKKwlpZiAoIWNzLT5jb25uZWN0ZWQpCiAJCWdpZ19kYmcoREVCVUdfSUYsICJub3QgY29ubmVjdGVkIik7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JfSBlbHNlIGlmICghY3MtPm9wZW5fY291bnQpCisJZWxzZSBpZiAoIWNzLT5vcGVuX2NvdW50KQogCQlkZXZfd2Fybihjcy0+ZGV2LCAiJXM6IGRldmljZSBub3Qgb3BlbmVkXG4iLCBfX2Z1bmNfXyk7Ci0JZWxzZSBpZiAoY3MtPm1zdGF0ZSAhPSBNU19MT0NLRUQpIHsKKwllbHNlIGlmIChjcy0+bXN0YXRlICE9IE1TX0xPQ0tFRCkKIAkJZGV2X3dhcm4oY3MtPmRldiwgImNhbid0IHdyaXRlIHRvIHVubG9ja2VkIGRldmljZVxuIik7Ci0JCXJldHZhbCA9IC1FQlVTWTsKLQl9IGVsc2UKKwllbHNlCiAJCXJldHZhbCA9IGNzLT5vcHMtPmNoYXJzX2luX2J1ZmZlcihjcyk7CiAKIAltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKaW5kZXggNzE4OGM1OS4uYWRiMWU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwpAQCAtNzYxLDcgKzc2MSw3IEBACiAgKiBCZSBhd2FyZSB0aGF0IHRoaXMgaXMgbm90IGFuIGF0b21pYyBvcGVyYXRpb24gd2hlbiBzbGVlcCAhPSAwLCBldmVuIHRob3VnaCAKICAqIGludGVycnVwdHMgYXJlIHR1cm5lZCBvZmYhIFdlbGwsIGxpa2UgdGhhdCB3ZSBhcmUgY3VycmVudGx5IG9ubHkgY2FsbGVkCiAgKiBvbiBiZWhhbGYgb2YgYSByZWFkIHN5c3RlbSBjYWxsIG9uIHJhdyBkZXZpY2UgZmlsZXMgKHdoaWNoIGFyZSBkb2N1bWVudGVkCi0gKiB0byBiZSBkYW5nZXJvdXMgYW5kIGZvciBmb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seSkuIFRoZSBpbm9kZSBzZW1hcGhvcmUKKyAqIHRvIGJlIGRhbmdlcm91cyBhbmQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkpLiBUaGUgaW5vZGUgc2VtYXBob3JlCiAgKiB0YWtlcyBjYXJlIHRoYXQgdGhpcyBpcyBub3QgY2FsbGVkIGZvciB0aGUgc2FtZSBtaW5vciBkZXZpY2UgbnVtYmVyIHdoaWxlCiAgKiB3ZSBhcmUgc2xlZXBpbmcsIGJ1dCBhY2Nlc3MgaXMgbm90IHNlcmlhbGl6ZWQgYWdhaW5zdCBzaW11bHRhbmVvdXMgcmVhZCgpCiAgKiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHR0eUkgZGV2aWNlLiBDYW4gb3RoZXIgdWdseSBldmVudHMsIGxpa2UgY2hhbmdlcwpAQCAtODczLDcgKzg3Myw3IEBACiAgKiBCZSBhd2FyZSB0aGF0IHRoaXMgaXMgbm90IGFuIGF0b21pYyBvcGVyYXRpb24gd2hlbiBzbGVlcCAhPSAwLCBldmVuIHRob3VnaAogICogaW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZiEgV2VsbCwgbGlrZSB0aGF0IHdlIGFyZSBjdXJyZW50bHkgb25seSBjYWxsZWQKICAqIG9uIGJlaGFsZiBvZiBhIHJlYWQgc3lzdGVtIGNhbGwgb24gcmF3IGRldmljZSBmaWxlcyAod2hpY2ggYXJlIGRvY3VtZW50ZWQKLSAqIHRvIGJlIGRhbmdlcm91cyBhbmQgZm9yIGZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5KS4gVGhlIGlub2RlIHNlbWFwaG9yZQorICogdG8gYmUgZGFuZ2Vyb3VzIGFuZCBmb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seSkuIFRoZSBpbm9kZSBzZW1hcGhvcmUKICAqIHRha2VzIGNhcmUgdGhhdCB0aGlzIGlzIG5vdCBjYWxsZWQgZm9yIHRoZSBzYW1lIG1pbm9yIGRldmljZSBudW1iZXIgd2hpbGUKICAqIHdlIGFyZSBzbGVlcGluZywgYnV0IGFjY2VzcyBpcyBub3Qgc2VyaWFsaXplZCBhZ2FpbnN0IHNpbXVsdGFuZW91cyByZWFkKCkKICAqIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgdHR5SSBkZXZpY2UuIENhbiBvdGhlciB1Z2x5IGV2ZW50cywgbGlrZSBjaGFuZ2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1kYWMxMjRzMDg1LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1kYWMxMjRzMDg1LmMKaW5kZXggMDk4ZDlhYS4uMjkxM2Q3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtZGFjMTI0czA4NS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWRhYzEyNHMwODUuYwpAQCAtMTQ4LDMgKzE0OCw0IEBACiBNT0RVTEVfQVVUSE9SKCJHdWVubmFkaSBMaWFraG92ZXRza2kgPGxnQGRlbnguZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRBQzEyNFMwODUgTEVEIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJzcGk6ZGFjMTI0czA4NSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvY29yZS5jIGIvZHJpdmVycy9sZ3Vlc3QvY29yZS5jCmluZGV4IDFlMmNiODQuLjg3NDRkMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2NvcmUuYworKysgYi9kcml2ZXJzL2xndWVzdC9jb3JlLmMKQEAgLTY3LDEyICs2NywxMSBAQAogCSAqIHNvIHdlIG1ha2Ugc3VyZSB0aGV5J3JlIHplcm9lZC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgVE9UQUxfU1dJVENIRVJfUEFHRVM7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghYWRkcikgeworCQlzd2l0Y2hlcl9wYWdlW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pOworCQlpZiAoIXN3aXRjaGVyX3BhZ2VbaV0pIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGZyZWVfc29tZV9wYWdlczsKIAkJfQotCQlzd2l0Y2hlcl9wYWdlW2ldID0gdmlydF90b19wYWdlKGFkZHIpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jIGIvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYwppbmRleCBhOGQwYWVlLi5jZjk0MzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMKQEAgLTM4MCw3ICszODAsNyBAQAogCQkgKiBBbmQgd2UgY29weSB0aGUgZmxhZ3MgdG8gdGhlIHNoYWRvdyBQTUQgZW50cnkuICBUaGUgcGFnZQogCQkgKiBudW1iZXIgaW4gdGhlIHNoYWRvdyBQTUQgaXMgdGhlIHBhZ2Ugd2UganVzdCBhbGxvY2F0ZWQuCiAJCSAqLwotCQluYXRpdmVfc2V0X3BtZChzcG1kLCBfX3BtZChfX3BhKHB0ZXBhZ2UpIHwgcG1kX2ZsYWdzKGdwbWQpKSk7CisJCXNldF9wbWQoc3BtZCwgX19wbWQoX19wYShwdGVwYWdlKSB8IHBtZF9mbGFncyhncG1kKSkpOwogCX0KIAogCS8qCkBAIC00NDcsNyArNDQ3LDcgQEAKIAkJICogd2Ugd2lsbCBjb21lIGJhY2sgaGVyZSB3aGVuIGEgd3JpdGUgZG9lcyBhY3R1YWxseSBvY2N1ciwgc28KIAkJICogd2UgY2FuIHVwZGF0ZSB0aGUgR3Vlc3QncyBfUEFHRV9ESVJUWSBmbGFnLgogCQkgKi8KLQkJbmF0aXZlX3NldF9wdGUoc3B0ZSwgZ3B0ZV90b19zcHRlKGNwdSwgcHRlX3dycHJvdGVjdChncHRlKSwgMCkpOworCQlzZXRfcHRlKHNwdGUsIGdwdGVfdG9fc3B0ZShjcHUsIHB0ZV93cnByb3RlY3QoZ3B0ZSksIDApKTsKIAogCS8qCiAJICogRmluYWxseSwgd2Ugd3JpdGUgdGhlIEd1ZXN0IFBURSBlbnRyeSBiYWNrOiB3ZSd2ZSBzZXQgdGhlCkBAIC01MjgsNyArNTI4LDcgQEAKIAkJLyogTm93IHdlIGNhbiBmcmVlIHRoZSBwYWdlIG9mIFBURXMgKi8KIAkJZnJlZV9wYWdlKChsb25nKXB0ZXBhZ2UpOwogCQkvKiBBbmQgemVybyBvdXQgdGhlIFBNRCBlbnRyeSBzbyB3ZSBuZXZlciByZWxlYXNlIGl0IHR3aWNlLiAqLwotCQluYXRpdmVfc2V0X3BtZChzcG1kLCBfX3BtZCgwKSk7CisJCXNldF9wbWQoc3BtZCwgX19wbWQoMCkpOwogCX0KIH0KIApAQCAtODMzLDE1ICs4MzMsMTUgQEAKIAkJCSAqLwogCQkJaWYgKHB0ZV9mbGFncyhncHRlKSAmIChfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKSkgewogCQkJCWNoZWNrX2dwdGUoY3B1LCBncHRlKTsKLQkJCQluYXRpdmVfc2V0X3B0ZShzcHRlLAotCQkJCQkJZ3B0ZV90b19zcHRlKGNwdSwgZ3B0ZSwKKwkJCQlzZXRfcHRlKHNwdGUsCisJCQkJCWdwdGVfdG9fc3B0ZShjcHUsIGdwdGUsCiAJCQkJCQlwdGVfZmxhZ3MoZ3B0ZSkgJiBfUEFHRV9ESVJUWSkpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSAqIE90aGVyd2lzZSBraWxsIGl0IGFuZCB3ZSBjYW4gZGVtYW5kX3BhZ2UoKQogCQkJCSAqIGl0IGluIGxhdGVyLgogCQkJCSAqLwotCQkJCW5hdGl2ZV9zZXRfcHRlKHNwdGUsIF9fcHRlKDApKTsKKwkJCQlzZXRfcHRlKHNwdGUsIF9fcHRlKDApKTsKIAkJCX0KICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCQl9CkBAIC04OTQsNyArODk0LDcgQEAKICAqIHRlbGxzIHVzIHRoZXkndmUgY2hhbmdlZC4gIFdoZW4gdGhlIEd1ZXN0IHRyaWVzIHRvIHVzZSB0aGUgbmV3IGVudHJ5IGl0IHdpbGwKICAqIGZhdWx0IGFuZCBkZW1hbmRfcGFnZSgpIHdpbGwgZml4IGl0IHVwLgogICoKLSAqIFNvIHdpdGggdGhhdCBpbiBtaW5kIGhlcmUncyBvdXIgY29kZSB0byB0byB1cGRhdGUgYSAodG9wLWxldmVsKSBQR0QgZW50cnk6CisgKiBTbyB3aXRoIHRoYXQgaW4gbWluZCBoZXJlJ3Mgb3VyIGNvZGUgdG8gdXBkYXRlIGEgKHRvcC1sZXZlbCkgUEdEIGVudHJ5OgogICovCiB2b2lkIGd1ZXN0X3NldF9wZ2Qoc3RydWN0IGxndWVzdCAqbGcsIHVuc2lnbmVkIGxvbmcgZ3BnZGlyLCB1MzIgaWR4KQogewpAQCAtOTgzLDI1ICs5ODMsMjIgQEAKIAkgKi8KIAlmb3IgKGkgPSBqID0gMDsgaSA8IG1hcHBlZF9wYWdlcyAmJiBqIDwgUFRSU19QRVJfUE1EOwogCSAgICAgaSArPSBQVFJTX1BFUl9QVEUsIGorKykgewotCQkvKiBGSVhNRTogbmF0aXZlX3NldF9wbWQgaXMgb3ZlcmtpbGwgaGVyZS4gKi8KLQkJbmF0aXZlX3NldF9wbWQoJnBtZCwgX19wbWQoKCh1bnNpZ25lZCBsb25nKShsaW5lYXIgKyBpKQotCQktIG1lbV9iYXNlKSB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIpKTsKKwkJcG1kID0gcGZuX3BtZCgoKHVuc2lnbmVkIGxvbmcpJmxpbmVhcltpXSAtIG1lbV9iYXNlKS9QQUdFX1NJWkUsCisJCQkgICAgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSKSk7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcigmcG1kc1tqXSwgJnBtZCwgc2l6ZW9mKHBtZCkpICE9IDApCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAkvKiBPbmUgUEdEIGVudHJ5LCBwb2ludGluZyB0byB0aGF0IFBNRCBwYWdlLiAqLwotCXNldF9wZ2QoJnBnZCwgX19wZ2QoKCh1MzIpcG1kcyAtIG1lbV9iYXNlKSB8IF9QQUdFX1BSRVNFTlQpKTsKKwlwZ2QgPSBfX3BnZCgoKHVuc2lnbmVkIGxvbmcpcG1kcyAtIG1lbV9iYXNlKSB8IF9QQUdFX1BSRVNFTlQpOwogCS8qIENvcHkgaXQgaW4gYXMgdGhlIGZpcnN0IFBHRCBlbnRyeSAoaWUuIGFkZHJlc3NlcyAwLTFHKS4gKi8KIAlpZiAoY29weV90b191c2VyKCZwZ2RpclswXSwgJnBnZCwgc2l6ZW9mKHBnZCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwogCS8qCi0JICogQW5kIHRoZSB0aGlyZCBQR0QgZW50cnkgKGllLiBhZGRyZXNzZXMgM0ctNEcpLgotCSAqCi0JICogRklYTUU6IFRoaXMgYXNzdW1lcyB0aGF0IFBBR0VfT0ZGU0VUIGZvciB0aGUgR3Vlc3QgaXMgMHhDMDAwMDAwMC4KKwkgKiBBbmQgdGhlIG90aGVyIFBHRCBlbnRyeSB0byBtYWtlIHRoZSBsaW5lYXIgbWFwcGluZyBhdCBQQUdFX09GRlNFVAogCSAqLwotCWlmIChjb3B5X3RvX3VzZXIoJnBnZGlyWzNdLCAmcGdkLCBzaXplb2YocGdkKSkgIT0gMCkKKwlpZiAoY29weV90b191c2VyKCZwZ2RpcltLRVJORUxfUEdEX0JPVU5EQVJZXSwgJnBnZCwgc2l6ZW9mKHBnZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKICNlbHNlCiAJLyoKQEAgLTExNDEsMTUgKzExMzgsMTMgQEAKIHsKIAlwdGVfdCAqc3dpdGNoZXJfcHRlX3BhZ2UgPSBfX2dldF9jcHVfdmFyKHN3aXRjaGVyX3B0ZV9wYWdlcyk7CiAJcHRlX3QgcmVnc19wdGU7Ci0JdW5zaWduZWQgbG9uZyBwZm47CiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCXBtZF90IHN3aXRjaGVyX3BtZDsKIAlwbWRfdCAqcG1kX3RhYmxlOwogCi0JLyogRklYTUU6IG5hdGl2ZV9zZXRfcG1kIGlzIG92ZXJraWxsIGhlcmUuICovCi0JbmF0aXZlX3NldF9wbWQoJnN3aXRjaGVyX3BtZCwgcGZuX3BtZChfX3BhKHN3aXRjaGVyX3B0ZV9wYWdlKSA+PgotCQkgICAgICAgUEFHRV9TSElGVCwgUEFHRV9LRVJORUxfRVhFQykpOworCXN3aXRjaGVyX3BtZCA9IHBmbl9wbWQoX19wYShzd2l0Y2hlcl9wdGVfcGFnZSkgPj4gUEFHRV9TSElGVCwKKwkJCSAgICAgICBQQUdFX0tFUk5FTF9FWEVDKTsKIAogCS8qIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIHBtZCBwYWdlIGlzLCBieSByZWFkaW5nIHRoZSBQR0QsIGFuZCBjb252ZXJ0aW5nCiAJICogaXQgdG8gYSB2aXJ0dWFsIGFkZHJlc3MuICovCkBAIC0xMTU3LDcgKzExNTIsNyBAQAogCQkJcGdkaXJzW2NwdS0+Y3B1X3BnZF0ucGdkaXJbU1dJVENIRVJfUEdEX0lOREVYXSkKIAkJCQkJCQkJPDwgUEFHRV9TSElGVCk7CiAJLyogTm93IHdyaXRlIGl0IGludG8gdGhlIHNoYWRvdyBwYWdlIHRhYmxlLiAqLwotCW5hdGl2ZV9zZXRfcG1kKCZwbWRfdGFibGVbU1dJVENIRVJfUE1EX0lOREVYXSwgc3dpdGNoZXJfcG1kKTsKKwlzZXRfcG1kKCZwbWRfdGFibGVbU1dJVENIRVJfUE1EX0lOREVYXSwgc3dpdGNoZXJfcG1kKTsKICNlbHNlCiAJcGdkX3Qgc3dpdGNoZXJfcGdkOwogCkBAIC0xMTc5LDEwICsxMTc0LDggQEAKIAkgKiBwYWdlIGlzIGFscmVhZHkgbWFwcGVkIHRoZXJlLCB3ZSBkb24ndCBoYXZlIHRvIGNvcHkgdGhlbSBvdXQKIAkgKiBhZ2Fpbi4KIAkgKi8KLQlwZm4gPSBfX3BhKGNwdS0+cmVnc19wYWdlKSA+PiBQQUdFX1NISUZUOwotCW5hdGl2ZV9zZXRfcHRlKCZyZWdzX3B0ZSwgcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMKSk7Ci0JbmF0aXZlX3NldF9wdGUoJnN3aXRjaGVyX3B0ZV9wYWdlW3B0ZV9pbmRleCgodW5zaWduZWQgbG9uZylwYWdlcyldLAotCQkJcmVnc19wdGUpOworCXJlZ3NfcHRlID0gcGZuX3B0ZShfX3BhKGNwdS0+cmVnc19wYWdlKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCk7CisJc2V0X3B0ZSgmc3dpdGNoZXJfcHRlX3BhZ2VbcHRlX2luZGV4KCh1bnNpZ25lZCBsb25nKXBhZ2VzKV0sIHJlZ3NfcHRlKTsKIH0KIC8qOiovCiAKQEAgLTEyMDksNyArMTIwMiw3IEBACiAKIAkvKiBUaGUgZmlyc3QgZW50cmllcyBhcmUgZWFzeTogdGhleSBtYXAgdGhlIFN3aXRjaGVyIGNvZGUuICovCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKLQkJbmF0aXZlX3NldF9wdGUoJnB0ZVtpXSwgbWtfcHRlKHN3aXRjaGVyX3BhZ2VbaV0sCisJCXNldF9wdGUoJnB0ZVtpXSwgbWtfcHRlKHN3aXRjaGVyX3BhZ2VbaV0sCiAJCQkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVHxfUEFHRV9BQ0NFU1NFRCkpKTsKIAl9CiAKQEAgLTEyMTcsMTQgKzEyMTAsMTQgQEAKIAlpID0gcGFnZXMgKyBjcHUqMjsKIAogCS8qIEZpcnN0IHBhZ2UgKEd1ZXN0IHJlZ2lzdGVycykgaXMgd3JpdGFibGUgZnJvbSB0aGUgR3Vlc3QgKi8KLQluYXRpdmVfc2V0X3B0ZSgmcHRlW2ldLCBwZm5fcHRlKHBhZ2VfdG9fcGZuKHN3aXRjaGVyX3BhZ2VbaV0pLAorCXNldF9wdGUoJnB0ZVtpXSwgcGZuX3B0ZShwYWdlX3RvX3Bmbihzd2l0Y2hlcl9wYWdlW2ldKSwKIAkJCSBfX3BncHJvdChfUEFHRV9QUkVTRU5UfF9QQUdFX0FDQ0VTU0VEfF9QQUdFX1JXKSkpOwogCiAJLyoKIAkgKiBUaGUgc2Vjb25kIHBhZ2UgY29udGFpbnMgdGhlICJzdHJ1Y3QgbGd1ZXN0X3JvX3N0YXRlIiwgYW5kIGlzCiAJICogcmVhZC1vbmx5LgogCSAqLwotCW5hdGl2ZV9zZXRfcHRlKCZwdGVbaSsxXSwgcGZuX3B0ZShwYWdlX3RvX3Bmbihzd2l0Y2hlcl9wYWdlW2krMV0pLAorCXNldF9wdGUoJnB0ZVtpKzFdLCBwZm5fcHRlKHBhZ2VfdG9fcGZuKHN3aXRjaGVyX3BhZ2VbaSsxXSksCiAJCQkgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UfF9QQUdFX0FDQ0VTU0VEKSkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9yYWNrLW1ldGVyLmMgYi9kcml2ZXJzL21hY2ludG9zaC9yYWNrLW1ldGVyLmMKaW5kZXggYTk4YWI3Mi4uOTNmYjMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvcmFjay1tZXRlci5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3JhY2stbWV0ZXIuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAKIAkJaWYgKGNwdSA+IDEpCiAJCQljb250aW51ZTsKLQkJcmNwdSA9ICZybS0+Y3B1W2NwdV07OworCQlyY3B1ID0gJnJtLT5jcHVbY3B1XTsKIAkJcmNwdS0+cHJldl9pZGxlID0gZ2V0X2NwdV9pZGxlX3RpbWUoY3B1KTsKIAkJcmNwdS0+cHJldl93YWxsID0gamlmZmllczY0X3RvX2NwdXRpbWU2NChnZXRfamlmZmllc182NCgpKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgJnJtLT5jcHVbY3B1XS5zbmlmZmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCmluZGV4IDdmNzdmMTguLmE2Nzk0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYworKysgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKQEAgLTE1MzIsNyArMTUzMiw3IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgX2RtX21pc2MgPSB7CiAJLm1pbm9yIAkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCiAJLm5hbWUgIAkJPSBETV9OQU1FLAotCS5kZXZub2RlCT0gIm1hcHBlci9jb250cm9sIiwKKwkubm9kZW5hbWUJPSAibWFwcGVyL2NvbnRyb2wiLAogCS5mb3BzICAJCT0gJl9jdGxfZm9wcwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IGVlZTI4ZmEuLjM3NmYxYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTE3MTYsNyArMTcxNiw3IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZG1fYmxrX2RvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRtX2Jsa19kb3BzOwogCiBzdGF0aWMgdm9pZCBkbV93cV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKQEAgLTI2NjMsNyArMjY2Myw3IEBACiAJa2ZyZWUocG9vbHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRtX2Jsa19kb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkbV9ibGtfZG9wcyA9IHsKIAkub3BlbiA9IGRtX2Jsa19vcGVuLAogCS5yZWxlYXNlID0gZG1fYmxrX2Nsb3NlLAogCS5pb2N0bCA9IGRtX2Jsa19pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCA5ZGQ4NzIwLi42YWE0OTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzOwogCiBzdGF0aWMgaW50IHN0YXJ0X3JlYWRvbmx5OwogCkBAIC01NTU2LDcgKzU1NTYsNyBAQAogCW1kZGV2LT5jaGFuZ2VkID0gMDsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWRfZm9wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBtZF9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGY4ZmMxODguLmY1NWQyZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAorKysgYi9kcml2ZXJzL21kL21kLmgKQEAgLTIwMSw3ICsyMDEsNyBAQAogCSAqIElOVFI6ICAgICByZXN5bmMgbmVlZHMgdG8gYmUgYWJvcnRlZCBmb3Igc29tZSByZWFzb24KIAkgKiBET05FOiAgICAgdGhyZWFkIGlzIGRvbmUgYW5kIGlzIHdhaXRpbmcgdG8gYmUgcmVhcGVkCiAJICogUkVRVUVTVDogIHVzZXItc3BhY2UgaGFzIHJlcXVlc3RlZCBhIHN5bmMgKHVzZWQgd2l0aCBTWU5DKQotCSAqIENIRUNLOiAgICB1c2VyLXNwYWNlIHJlcXVlc3QgZm9yIGZvciBjaGVjay1vbmx5LCBubyByZXBhaXIKKwkgKiBDSEVDSzogICAgdXNlci1zcGFjZSByZXF1ZXN0IGZvciBjaGVjay1vbmx5LCBubyByZXBhaXIKIAkgKiBSRVNIQVBFOiAgQSByZXNoYXBlIGlzIGhhcHBlbmluZwogCSAqCiAJICogSWYgbmVpdGhlciBTWU5DIG9yIFJFU0hBUEUgYXJlIHNldCwgdGhlbiBpdCBpcyBhIHJlY292ZXJ5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggODllNzY4MS4uZDJkM2ZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC0xNTAsNiArMTUwLDcgQEAKIAl9CiAKIAltcF9iaCA9IG1lbXBvb2xfYWxsb2MoY29uZi0+cG9vbCwgR0ZQX05PSU8pOworCW1lbXNldChtcF9iaCwgMCwgc2l6ZW9mKCptcF9iaCkpOwogCiAJbXBfYmgtPm1hc3Rlcl9iaW8gPSBiaW87CiAJbXBfYmgtPm1kZGV2ID0gbWRkZXY7CkBAIC00OTMsNyArNDk0LDcgQEAKIAl9CiAJbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPndvcmtpbmdfZGlza3M7CiAKLQljb25mLT5wb29sID0gbWVtcG9vbF9jcmVhdGVfa3phbGxvY19wb29sKE5SX1JFU0VSVkVEX0JVRlMsCisJY29uZi0+cG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChOUl9SRVNFUlZFRF9CVUZTLAogCQkJCQkJIHNpemVvZihzdHJ1Y3QgbXVsdGlwYXRoX2JoKSk7CiAJaWYgKGNvbmYtPnBvb2wgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKaW5kZXggZmM3NmMzMC4uMTU1YzkzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYwpAQCAtMjEwLDcgKzIxMCw4IEBACiAJdGRhMTgyNzFfaTJjX2dhdGVfY3RybChmZSwgMCk7CiAKIAlpZiAocmV0ICE9IDEpCi0JCXRkYV9lcnIoIkVSUk9SOiBpMmNfdHJhbnNmZXIgcmV0dXJuZWQ6ICVkXG4iLCByZXQpOworCQl0ZGFfZXJyKCJFUlJPUjogaWR4ID0gMHgleCwgbGVuID0gJWQsICIKKwkJCSJpMmNfdHJhbnNmZXIgcmV0dXJuZWQ6ICVkXG4iLCBpZHgsIGxlbiwgcmV0KTsKIAogCXJldHVybiAocmV0ID09IDEgPyAwIDogcmV0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggYmM0YjAwNC4uNjQ1OTUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTM2LDYgKzM2LDI3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludCB0ZGExODI3MV90b2dnbGVfb3V0cHV0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgc3RhbmRieSkKK3sKKwlzdHJ1Y3QgdGRhMTgyNzFfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCisJaW50IHJldCA9IHRkYTE4MjcxX3NldF9zdGFuZGJ5X21vZGUoZmUsIHN0YW5kYnkgPyAxIDogMCwKKwkJCXByaXYtPm91dHB1dF9vcHQgJiBUREExODI3MV9PVVRQVVRfTFRfT0ZGID8gMSA6IDAsCisJCQlwcml2LT5vdXRwdXRfb3B0ICYgVERBMTgyNzFfT1VUUFVUX1hUX09GRiA/IDEgOiAwKTsKKworCWlmICh0ZGFfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwl0ZGFfZGJnKCIlcyBtb2RlOiB4dGFsIG9zY2lsbGF0b3IgJXMsIHNsYXZlIHR1bmVyIGxvb3AgdGhydSAlc1xuIiwKKwkJc3RhbmRieSA/ICJzdGFuZGJ5IiA6ICJhY3RpdmUiLAorCQlwcml2LT5vdXRwdXRfb3B0ICYgVERBMTgyNzFfT1VUUFVUX1hUX09GRiA/ICJvZmYiIDogIm9uIiwKKwkJcHJpdi0+b3V0cHV0X29wdCAmIFREQTE4MjcxX09VVFBVVF9MVF9PRkYgPyAib2ZmIiA6ICJvbiIpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0YXRpYyBpbmxpbmUgaW50IGNoYXJnZV9wdW1wX3NvdXJjZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGZvcmNlKQogewogCXN0cnVjdCB0ZGExODI3MV9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CkBAIC0yNzEsNyArMjkyLDcgQEAKIAl0ZGExODI3MV9sb29rdXBfbWFwKGZlLCBSRl9DQUxfRENfT1ZFUl9EVCwgJmZyZXEsICZkY19vdmVyX2R0KTsKIAogCS8qIGNhbGN1bGF0ZSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gKi8KLQlyZmNhbF9jb21wID0gZGNfb3Zlcl9kdCAqICh0bV9jdXJyZW50IC0gcHJpdi0+dG1fcmZjYWwpOworCXJmY2FsX2NvbXAgPSBkY19vdmVyX2R0ICogKHRtX2N1cnJlbnQgLSBwcml2LT50bV9yZmNhbCkgLyAxMDAwOwogCiAJcmVnc1tSX0VCMTRdID0gYXBwcm94ICsgcmZjYWxfY29tcDsKIAlyZXQgPSB0ZGExODI3MV93cml0ZV9yZWdzKGZlLCBSX0VCMTQsIDEpOwpAQCAtODAwLDcgKzgyMSw3IEBACiAKIAltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKIAotCS8qIHBvd2VyIHVwICovCisJLyogZnVsbCBwb3dlciB1cCAqLwogCXJldCA9IHRkYTE4MjcxX3NldF9zdGFuZGJ5X21vZGUoZmUsIDAsIDAsIDApOwogCWlmICh0ZGFfZmFpbChyZXQpKQogCQlnb3RvIGZhaWw7CkBAIC04MTgsNiArODM5LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB0ZGExODI3MV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdGRhMTgyNzFfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIGVudGVyIHN0YW5kYnkgbW9kZSwgd2l0aCByZXF1aXJlZCBvdXRwdXQgZmVhdHVyZXMgZW5hYmxlZCAqLworCXJldCA9IHRkYTE4MjcxX3RvZ2dsZV9vdXRwdXQoZmUsIDEpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IHRkYTE4MjcxX2FnYyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKQEAgLTgyNyw4ICs4NjMsOSBAQAogCiAJc3dpdGNoIChwcml2LT5jb25maWcpIHsKIAljYXNlIDA6Ci0JCS8qIG5vIExOQSAqLwotCQl0ZGFfZGJnKCJubyBhZ2MgY29uZmlndXJhdGlvbiBwcm92aWRlZFxuIik7CisJCS8qIG5vIGV4dGVybmFsIGFnYyBjb25maWd1cmF0aW9uIHJlcXVpcmVkICovCisJCWlmICh0ZGExODI3MV9kZWJ1ZyAmIERCR19BRFYpCisJCQl0ZGFfZGJnKCJubyBhZ2MgY29uZmlndXJhdGlvbiBwcm92aWRlZFxuIik7CiAJCWJyZWFrOwogCWNhc2UgMzoKIAkJLyogc3dpdGNoIHdpdGggR1BJTyBvZiBzYWE3MTN4ICovCkBAIC0xMDEwLDIyICsxMDQ3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHRkYTE4MjcxX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQotewotCXN0cnVjdCB0ZGExODI3MV9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCi0JLyogc3RhbmRieSBtb2RlIHcvIHNsYXZlIHR1bmVyIG91dHB1dAotCSAqICYgbG9vcCB0aHJ1ICYgeHRhbCBvc2NpbGxhdG9yIG9uICovCi0JcmV0ID0gdGRhMTgyNzFfc2V0X3N0YW5kYnlfbW9kZShmZSwgMSwgMCwgMCk7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCB0ZGExODI3MV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCB0ZGExODI3MV9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CkBAIC0xMTk5LDYgKzEyMjAsOSBAQAogCQlwcml2LT5nYXRlID0gKGNmZykgPyBjZmctPmdhdGUgOiBUREExODI3MV9HQVRFX0FVVE87CiAJCXByaXYtPnJvbGUgPSAoY2ZnKSA/IGNmZy0+cm9sZSA6IFREQTE4MjcxX01BU1RFUjsKIAkJcHJpdi0+Y29uZmlnID0gKGNmZykgPyBjZmctPmNvbmZpZyA6IDA7CisJCXByaXYtPnNtYWxsX2kyYyA9IChjZmcpID8gY2ZnLT5zbWFsbF9pMmMgOiAwOworCQlwcml2LT5vdXRwdXRfb3B0ID0gKGNmZykgPworCQkJY2ZnLT5vdXRwdXRfb3B0IDogVERBMTgyNzFfT1VUUFVUX0xUX1hUX09OOwogCiAJCS8qIHRkYTE4MjcxX2NhbF9vbl9zdGFydHVwID09IC0xIHdoZW4gY2FsCiAJCSAqIG1vZHVsZSBvcHRpb24gaXMgdW5zZXQgKi8KQEAgLTEyMTYsOSArMTI0MCw2IEBACiAKIAkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OwogCi0JCWlmIChjZmcpCi0JCQlwcml2LT5zbWFsbF9pMmMgPSBjZmctPnNtYWxsX2kyYzsKLQogCQlpZiAodGRhX2ZhaWwodGRhMTgyNzFfZ2V0X2lkKGZlKSkpCiAJCQlnb3RvIGZhaWw7CiAKQEAgLTEyMzgsOSArMTI1OSwxOSBAQAogCQkvKiBleGlzdGluZyB0dW5lciBpbnN0YW5jZSAqLwogCQlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CiAKLQkJLyogYWxsb3cgZHZiIGRyaXZlciB0byBvdmVycmlkZSBpMmMgZ2F0ZSBzZXR0aW5nICovCi0JCWlmICgoY2ZnKSAmJiAoY2ZnLT5nYXRlICE9IFREQTE4MjcxX0dBVEVfQU5BTE9HKSkKLQkJCXByaXYtPmdhdGUgPSBjZmctPmdhdGU7CisJCS8qIGFsbG93IGR2YiBkcml2ZXIgdG8gb3ZlcnJpZGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQlpZiAoY2ZnKSB7CisJCQlpZiAoY2ZnLT5nYXRlICE9IFREQTE4MjcxX0dBVEVfQU5BTE9HKQorCQkJCXByaXYtPmdhdGUgPSBjZmctPmdhdGU7CisJCQlpZiAoY2ZnLT5yb2xlKQorCQkJCXByaXYtPnJvbGUgPSBjZmctPnJvbGU7CisJCQlpZiAoY2ZnLT5jb25maWcpCisJCQkJcHJpdi0+Y29uZmlnID0gY2ZnLT5jb25maWc7CisJCQlpZiAoY2ZnLT5zbWFsbF9pMmMpCisJCQkJcHJpdi0+c21hbGxfaTJjID0gY2ZnLT5zbWFsbF9pMmM7CisJCQlpZiAoY2ZnLT5vdXRwdXRfb3B0KQorCQkJCXByaXYtPm91dHB1dF9vcHQgPSBjZmctPm91dHB1dF9vcHQ7CisJCX0KIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYwppbmRleCBhYjE0Y2ViLi5lMjFmZGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1tYXBzLmMKQEAgLTk2MiwxMCArOTYyLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY2lkX3RhcmdldF9tYXAgdGRhMTgyNzFfY2lkX3RhcmdldFtdID0gewogCXsgLnJmbWF4ID0gIDQ2MDAwLCAudGFyZ2V0ID0gMHgwNCwgLmxpbWl0ID0gIDE4MDAgfSwKIAl7IC5yZm1heCA9ICA1MjIwMCwgLnRhcmdldCA9IDB4MGEsIC5saW1pdCA9ICAxNTAwIH0sCi0JeyAucmZtYXggPSAgNzkxMDAsIC50YXJnZXQgPSAweDAxLCAubGltaXQgPSAgNDAwMCB9LAorCXsgLnJmbWF4ID0gIDcwMTAwLCAudGFyZ2V0ID0gMHgwMSwgLmxpbWl0ID0gIDQwMDAgfSwKIAl7IC5yZm1heCA9IDEzNjgwMCwgLnRhcmdldCA9IDB4MTgsIC5saW1pdCA9ICA0MDAwIH0sCiAJeyAucmZtYXggPSAxNTY3MDAsIC50YXJnZXQgPSAweDE4LCAubGltaXQgPSAgNDAwMCB9LAotCXsgLnJmbWF4ID0gMTU2NzAwLCAudGFyZ2V0ID0gMHgxOCwgLmxpbWl0ID0gIDQwMDAgfSwKIAl7IC5yZm1heCA9IDE4NjI1MCwgLnRhcmdldCA9IDB4MGEsIC5saW1pdCA9ICA0MDAwIH0sCiAJeyAucmZtYXggPSAyMzAwMDAsIC50YXJnZXQgPSAweDBhLCAubGltaXQgPSAgNDAwMCB9LAogCXsgLnJmbWF4ID0gMzQ1MDAwLCAudGFyZ2V0ID0gMHgxOCwgLmxpbWl0ID0gIDQwMDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCmluZGV4IGU2YTgwYWQuLjJiZWUyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaApAQCAtMTA4LDYgKzEwOCw3IEBACiAJZW51bSB0ZGExODI3MV9yb2xlIHJvbGU7CiAJZW51bSB0ZGExODI3MV9pMmNfZ2F0ZSBnYXRlOwogCWVudW0gdGRhMTgyNzFfdmVyIGlkOworCWVudW0gdGRhMTgyNzFfb3V0cHV0X29wdGlvbnMgb3V0cHV0X29wdDsKIAogCXVuc2lnbmVkIGludCBjb25maWc7IC8qIGludGVyZmFjZSB0byBzYWE3MTN4IC8gdGRhODI5eCAqLwogCXVuc2lnbmVkIGludCB0bV9yZmNhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKaW5kZXggNzFiYWM5NS4uMzIzZjI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKQEAgLTY3LDYgKzY3LDE3IEBACiAJVERBMTgyNzFfR0FURV9ESUdJVEFMLAogfTsKIAorZW51bSB0ZGExODI3MV9vdXRwdXRfb3B0aW9ucyB7CisJLyogc2xhdmUgdHVuZXIgb3V0cHV0ICYgbG9vcCB0aHJ1ICYgeHRhbCBvc2NpbGxhdG9yIGFsd2F5cyBvbiAqLworCVREQTE4MjcxX09VVFBVVF9MVF9YVF9PTiA9IDAsCisKKwkvKiBzbGF2ZSB0dW5lciBvdXRwdXQgbG9vcCB0aHJ1IG9mZiAqLworCVREQTE4MjcxX09VVFBVVF9MVF9PRkYgPSAxLAorCisJLyogeHRhbCBvc2NpbGxhdG9yIG9mZiAqLworCVREQTE4MjcxX09VVFBVVF9YVF9PRkYgPSAyLAorfTsKKwogc3RydWN0IHRkYTE4MjcxX2NvbmZpZyB7CiAJLyogb3ZlcnJpZGUgZGVmYXVsdCBpZiBmcmVxIC8gc3RkIHNldHRpbmdzIChvcHRpb25hbCkgKi8KIAlzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcCAqc3RkX21hcDsKQEAgLTc3LDYgKzg4LDkgQEAKIAkvKiB1c2UgaTJjIGdhdGUgcHJvdmlkZWQgYnkgYW5hbG9nIG9yIGRpZ2l0YWwgZGVtb2QgKi8KIAllbnVtIHRkYTE4MjcxX2kyY19nYXRlIGdhdGU7CiAKKwkvKiBvdXRwdXQgb3B0aW9ucyB0aGF0IGNhbiBiZSBkaXNhYmxlZCAqLworCWVudW0gdGRhMTgyNzFfb3V0cHV0X29wdGlvbnMgb3V0cHV0X29wdDsKKwogCS8qIGZvcmNlIHJmIHRyYWNraW5nIGZpbHRlciBjYWxpYnJhdGlvbiBvbiBzdGFydHVwICovCiAJdW5zaWduZWQgaW50IHJmX2NhbF9vbl9zdGFydHVwOjE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKaW5kZXggNWM2ZWYxZS4uMmI4NzZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKQEAgLTEzMjAsNiArMTMyMCwyMyBAQAogCX0sCiB9OwogCisvKiAtLS0tLS0tLS0gVFVORVJfUEhJTElQU19DVTEyMTZMIC0gRFZCLUMgTklNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9jdTEyMTZsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMjUgLypNSHoqLywgMHhjZSwgMHgwMSB9LAorCXsgMTYgKiA0NDQuMjUgLypNSHoqLywgMHhjZSwgMHgwMiB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHhjZSwgMHgwNCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19jdTEyMTZsX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfRElHSVRBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX2N1MTIxNmxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9jdTEyMTZsX3JhbmdlcyksCisJCS5pZmZyZXEgPSAxNiAqIDM2LjEyNSwgLypNSHoqLworCX0sCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHR1bmVydHlwZSB0dW5lcnNbXSA9IHsKQEAgLTE3NzgsNiArMTc5NSwxNiBAQAogCQkucGFyYW1zID0gdHVuZXJfcGFydHNuaWNfcHRpXzVuZjA1X3BhcmFtcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGFydHNuaWNfcHRpXzVuZjA1X3BhcmFtcyksCiAJfSwKKwlbVFVORVJfUEhJTElQU19DVTEyMTZMXSA9IHsKKwkJLm5hbWUgPSAiUGhpbGlwcyBDVTEyMTZMIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfY3UxMjE2bF9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfY3UxMjE2bF9wYXJhbXMpLAorCQkuc3RlcHNpemUgPSA2MjUwMCwKKwl9LAorCVtUVU5FUl9OWFBfVERBMTgyNzFdID0geworCQkubmFtZSAgID0gIk5YUCBUREExODI3MSIsCisJCS8qIHNlZSB0ZGExODI3MS1mZS5jIGZvciBkZXRhaWxzICovCisJfSwKIH07CiBFWFBPUlRfU1lNQk9MKHR1bmVycyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCmluZGV4IDFkMGU0YjEuLjM1ZDA4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwpAQCAtNjgsNiArNjgsMTAgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIElFRUUxMzk0CiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL0tjb25maWciCiAKK2NvbW1lbnQgIlN1cHBvcnRlZCBFYXJ0aHNvZnQgUFQxIEFkYXB0ZXJzIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQworc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9wdDEvS2NvbmZpZyIKKwogY29tbWVudCAiU3VwcG9ydGVkIERWQiBGcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKaW5kZXggNjA5MmE1Yi4uMTZkMjYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIG11bHRpbWVkaWEgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLW9iai15ICAgICAgICA6PSBkdmItY29yZS8gZnJvbnRlbmRzLyB0dHBjaS8gdHR1c2ItZGVjLyB0dHVzYi1idWRnZXQvIGIyYzIvIGJ0OHh4LyBkdmItdXNiLyBwbHV0bzIvIHNpYW5vLyBkbTExMDUvCitvYmoteSAgICAgICAgOj0gZHZiLWNvcmUvIGZyb250ZW5kcy8gdHRwY2kvIHR0dXNiLWRlYy8gdHR1c2ItYnVkZ2V0LyBiMmMyLyBidDh4eC8gZHZiLXVzYi8gcGx1dG8yLyBzaWFuby8gZG0xMTA1LyBwdDEvCiAKIG9iai0kKENPTkZJR19EVkJfRklSRURUVikJKz0gZmlyZXdpcmUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IGQxM2ViY2IuLmRkZjYzOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC04NTAsNiArODUwLDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2NsZWFyX2NhY2hlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWludCBpOworCisJbWVtc2V0KCYoZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZSksIDAsCisJCQlzaXplb2Yoc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzKSk7CisKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN0YXRlID0gRFRWX0NMRUFSOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX1VOREVGSU5FRDsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmludmVyc2lvbiA9IElOVkVSU0lPTl9BVVRPOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZmVjX2lubmVyID0gRkVDX0FVVE87CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE87CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogPSBCQU5EV0lEVEhfQVVUTzsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfQVVUTzsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmhpZXJhcmNoeSA9IEhJRVJBUkNIWV9BVVRPOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3ltYm9sX3JhdGUgPSBRQU1fQVVUTzsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmNvZGVfcmF0ZV9IUCA9IEZFQ19BVVRPOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuY29kZV9yYXRlX0xQID0gRkVDX0FVVE87CisKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID0gLTE7CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID0gLTE7CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zdWJjaGFubmVsID0gLTE7CisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2lkeCA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZCA9IDB4NzsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uZmVjID0gRkVDX0FVVE87CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbiA9IFFBTV9BVVRPOworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLmludGVybGVhdmluZyA9IC0xOworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLnNlZ21lbnRfY291bnQgPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBfRFRWX0NNRChuLCBzLCBiKSBcCitbbl0gPSB7IFwKKwkubmFtZSA9ICNuLCBcCisJLmNtZCAgPSBuLCBcCisJLnNldCAgPSBzLFwKKwkuYnVmZmVyID0gYiBcCit9CisKIHN0YXRpYyBzdHJ1Y3QgZHR2X2NtZHNfaCBkdHZfY21kc1tdID0gewogCVtEVFZfVFVORV0gPSB7CiAJCS5uYW1lCT0gIkRUVl9UVU5FIiwKQEAgLTk0OSw2ICs5OTIsNDcgQEAKIAkJLmNtZAk9IERUVl9UUkFOU01JU1NJT05fTU9ERSwKIAkJLnNldAk9IDEsCiAJfSwKKworCV9EVFZfQ01EKERUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTiwgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORywgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX1NCX1NVQkNIQU5ORUxfSUQsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWCwgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUl9FTkFCTEVELCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJBX0ZFQywgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OLCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkcsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkJfRkVDLCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJCX01PRFVMQVRJT04sIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkJfU0VHTUVOVF9DT1VOVCwgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQl9USU1FX0lOVEVSTEVBVklORywgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQ19GRUMsIDEsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkNfTU9EVUxBVElPTiwgMSwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQ19TRUdNRU5UX0NPVU5ULCAxLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJDX1RJTUVfSU5URVJMRUFWSU5HLCAxLCAwKSwKKworCV9EVFZfQ01EKERUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTiwgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORywgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX1NCX1NVQkNIQU5ORUxfSUQsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWCwgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUl9FTkFCTEVELCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJBX0ZFQywgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OLCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkcsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkJfRkVDLCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJCX01PRFVMQVRJT04sIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkJfU0VHTUVOVF9DT1VOVCwgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQl9USU1FX0lOVEVSTEVBVklORywgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQ19GRUMsIDAsIDApLAorCV9EVFZfQ01EKERUVl9JU0RCVF9MQVlFUkNfTU9EVUxBVElPTiwgMCwgMCksCisJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQ19TRUdNRU5UX0NPVU5ULCAwLCAwKSwKKwlfRFRWX0NNRChEVFZfSVNEQlRfTEFZRVJDX1RJTUVfSU5URVJMRUFWSU5HLCAwLCAwKSwKKworCV9EVFZfQ01EKERUVl9JU0RCU19UU19JRCwgMSwgMCksCisKIAkvKiBHZXQgKi8KIAlbRFRWX0RJU0VRQ19TTEFWRV9SRVBMWV0gPSB7CiAJCS5uYW1lCT0gIkRUVl9ESVNFUUNfU0xBVkVfUkVQTFkiLApAQCAtOTU2LDYgKzEwNDAsNyBAQAogCQkuc2V0CT0gMCwKIAkJLmJ1ZmZlcgk9IDEsCiAJfSwKKwogCVtEVFZfQVBJX1ZFUlNJT05dID0gewogCQkubmFtZQk9ICJEVFZfQVBJX1ZFUlNJT04iLAogCQkuY21kCT0gRFRWX0FQSV9WRVJTSU9OLApAQCAtMTE2NSwxNCArMTI1MCwyMSBAQAogCWlmKGMtPmRlbGl2ZXJ5X3N5c3RlbSA9PSBTWVNfSVNEQlQpIHsKIAkJLyogRmFrZSBvdXQgYSBnZW5lcmljIERWQi1UIHJlcXVlc3Qgc28gd2UgcGFzcyB2YWxpZGF0aW9uIGluIHRoZSBpb2N0bCAqLwogCQlwLT5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7Ci0JCXAtPmludmVyc2lvbiA9IElOVkVSU0lPTl9BVVRPOworCQlwLT5pbnZlcnNpb24gPSBjLT5pbnZlcnNpb247CiAJCXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUUFNX0FVVE87CiAJCXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfQVVUTzsKIAkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ19BVVRPOwotCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIX0FVVE87CiAJCXAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE87CiAJCXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMX0FVVE87CiAJCXAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfQVVUTzsKKwkJaWYgKGMtPmJhbmR3aWR0aF9oeiA9PSA4MDAwMDAwKQorCQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF84X01IWjsKKwkJZWxzZSBpZiAoYy0+YmFuZHdpZHRoX2h6ID09IDcwMDAwMDApCisJCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzdfTUhaOworCQllbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPT0gNjAwMDAwMCkKKwkJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfNl9NSFo7CisJCWVsc2UKKwkJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfQVVUTzsKIAl9CiB9CiAKQEAgLTEyNzQsNiArMTM2Niw2NSBAQAogCWNhc2UgRFRWX0hJRVJBUkNIWToKIAkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmhpZXJhcmNoeTsKIAkJYnJlYWs7CisKKwkvKiBJU0RCLVQgU3VwcG9ydCBoZXJlICovCisJY2FzZSBEVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT046CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfU0JfU1VCQ0hBTk5FTF9JRDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3N1YmNoYW5uZWw7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NCX1NFR01FTlRfSURYOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHg7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQ6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50OworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUl9FTkFCTEVEOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZDsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJBX0ZFQzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLmZlYzsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJBX01PRFVMQVRJT046CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkFfU0VHTUVOVF9DT1VOVDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLnNlZ21lbnRfY291bnQ7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQV9USU1FX0lOVEVSTEVBVklORzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLmludGVybGVhdmluZzsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJCX0ZFQzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLmZlYzsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJCX01PRFVMQVRJT046CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5tb2R1bGF0aW9uOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkJfU0VHTUVOVF9DT1VOVDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLnNlZ21lbnRfY291bnQ7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQl9USU1FX0lOVEVSTEVBVklORzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLmludGVybGVhdmluZzsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJDX0ZFQzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLmZlYzsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJDX01PRFVMQVRJT046CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5tb2R1bGF0aW9uOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkNfU0VHTUVOVF9DT1VOVDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLnNlZ21lbnRfY291bnQ7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLmludGVybGVhdmluZzsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlNfVFNfSUQ6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2Ric190c19pZDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IC0xOwogCX0KQEAgLTEzMDIsMTAgKzE0NTMsOCBAQAogCQkvKiBSZXNldCBhIGNhY2hlIG9mIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGZyb250ZW5kIGhlcmUuIFRoaXMgZG9lcwogCQkgKiBub3QgZWZmZWN0IGhhcmR3YXJlLgogCQkgKi8KKwkJZHZiX2Zyb250ZW5kX2NsZWFyX2NhY2hlKGZlKTsKIAkJZHByaW50aygiJXMoKSBGbHVzaGluZyBwcm9wZXJ0eSBjYWNoZVxuIiwgX19mdW5jX18pOwotCQltZW1zZXQoJmZlLT5kdHZfcHJvcGVydHlfY2FjaGUsIDAsIHNpemVvZihzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMpKTsKLQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9IHR2cC0+Y21kOwotCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19VTkRFRklORUQ7CiAJCWJyZWFrOwogCWNhc2UgRFRWX1RVTkU6CiAJCS8qIGludGVycHJldCB0aGUgY2FjaGUgb2YgZGF0YSwgYnVpbGQgZWl0aGVyIGEgdHJhZGl0aW9uYWwgZnJvbnRlbmQKQEAgLTEzNzEsNiArMTUyMCw2NSBAQAogCWNhc2UgRFRWX0hJRVJBUkNIWToKIAkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5oaWVyYXJjaHkgPSB0dnAtPnUuZGF0YTsKIAkJYnJlYWs7CisKKwkvKiBJU0RCLVQgU3VwcG9ydCBoZXJlICovCisJY2FzZSBEVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT046CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfU0JfU1VCQ0hBTk5FTF9JRDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zdWJjaGFubmVsID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NCX1NFR01FTlRfSURYOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQ6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUl9FTkFCTEVEOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X2xheWVyX2VuYWJsZWQgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJBX0ZFQzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5mZWMgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJBX01PRFVMQVRJT046CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0ubW9kdWxhdGlvbiA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkFfU0VHTUVOVF9DT1VOVDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5zZWdtZW50X2NvdW50ID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQV9USU1FX0lOVEVSTEVBVklORzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5pbnRlcmxlYXZpbmcgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJCX0ZFQzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5mZWMgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJCX01PRFVMQVRJT046CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0ubW9kdWxhdGlvbiA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkJfU0VHTUVOVF9DT1VOVDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5zZWdtZW50X2NvdW50ID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQl9USU1FX0lOVEVSTEVBVklORzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5pbnRlcmxlYXZpbmcgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJDX0ZFQzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5mZWMgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlRfTEFZRVJDX01PRFVMQVRJT046CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0ubW9kdWxhdGlvbiA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JU0RCVF9MQVlFUkNfU0VHTUVOVF9DT1VOVDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5zZWdtZW50X2NvdW50ID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5pbnRlcmxlYXZpbmcgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSVNEQlNfVFNfSUQ6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnNfdHNfaWQgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKaW5kZXggZTE3NmRhNC4uODEwZjA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKQEAgLTM0MSw2ICszNDEsMjMgQEAKIAlmZV9yb2xsb2ZmX3QJCXJvbGxvZmY7CiAKIAlmZV9kZWxpdmVyeV9zeXN0ZW1fdAlkZWxpdmVyeV9zeXN0ZW07CisKKwkvKiBJU0RCLVQgc3BlY2lmaWNzICovCisJdTgJCQlpc2RidF9wYXJ0aWFsX3JlY2VwdGlvbjsKKwl1OAkJCWlzZGJ0X3NiX21vZGU7CisJdTgJCQlpc2RidF9zYl9zdWJjaGFubmVsOworCXUzMgkJCWlzZGJ0X3NiX3NlZ21lbnRfaWR4OworCXUzMgkJCWlzZGJ0X3NiX3NlZ21lbnRfY291bnQ7CisJdTgJCQlpc2RidF9sYXllcl9lbmFibGVkOworCXN0cnVjdCB7CisJICAgIHU4CQkJc2VnbWVudF9jb3VudDsKKwkgICAgZmVfY29kZV9yYXRlX3QJZmVjOworCSAgICBmZV9tb2R1bGF0aW9uX3QJbW9kdWxhdGlvbjsKKwkgICAgdTgJCQlpbnRlcmxlYXZpbmc7CisJfSBsYXllclszXTsKKworCS8qIElTREItVCBzcGVjaWZpY3MgKi8KKwl1MzIJCQlpc2Ric190c19pZDsKIH07CiAKIHN0cnVjdCBkdmJfZnJvbnRlbmQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCA0NzlkZDA1Li45NDE1OWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjaGFyICpkdmJfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKmR2Yl9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIApAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCWR2Yl9jbGFzcy0+ZGV2X3VldmVudCA9IGR2Yl91ZXZlbnQ7Ci0JZHZiX2NsYXNzLT5ub2RlbmFtZSA9IGR2Yl9ub2RlbmFtZTsKKwlkdmJfY2xhc3MtPmRldm5vZGUgPSBkdmJfZGV2bm9kZTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggOGI4YmMwNC4uMGU0Yjk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtNzEsNiArNzEsNyBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0RJQjcwMDBNIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9ESUI4MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xHRFQzMzA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCkBAIC04Nyw3ICs4OCw3IEBACiAJICBBdmVybWVkaWEgYW5kIG90aGVyIGJpZyBhbmQgc21hbGwgY29tcGFuaWVzLgogCiAJICBGb3IgYW4gdXAtdG8tZGF0ZSBsaXN0IG9mIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBoYXZlIGEgbG9vawotCSAgb24gdGhlIExpbnV4LURWQiBXaWtpIGF0IHd3dy5saW51eHR2Lm9yZy4KKwkgIG9uIHRoZSBMaW51eFRWIFdpa2kgYXQgd3d3LmxpbnV4dHYub3JnLgogCiAJICBTYXkgWSBpZiB5b3Ugb3duIHN1Y2ggYSBkZXZpY2UgYW5kIHdhbnQgdG8gdXNlIGl0LiBZb3Ugc2hvdWxkIGJ1aWxkIGl0IGFzCiAJICBhIG1vZHVsZS4KQEAgLTMxNSwzICszMTYsOSBAQAogCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBJbnRlbCBDRTYyMzAgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisKK2NvbmZpZyBEVkJfVVNCX0ZSSUlPCisJdHJpc3RhdGUgIkZyaWlvIElTREItVCBVU0IyLjAgUmVjZWl2ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9VU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEphcGFuZXNlIERUViByZWNlaXZlciBGcmlpby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCmluZGV4IGY5MjczNGUuLjg1YjgzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQpAQCAtNzksNiArNzksOSBAQAogZHZiLXVzYi1jZTYyMzAtb2JqcyA9IGNlNjIzMC5vCiBvYmotJChDT05GSUdfRFZCX1VTQl9DRTYyMzApICs9IGR2Yi11c2ItY2U2MjMwLm8KIAorZHZiLXVzYi1mcmlpby1vYmpzID0gZnJpaW8ubyBmcmlpby1mZS5vCitvYmotJChDT05GSUdfRFZCX1VTQl9GUklJTykgKz0gZHZiLXVzYi1mcmlpby5vCisKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KICMgZHVlIHRvIHR1bmVyLXhjMzAyOAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwppbmRleCA5OWNkZDBkMS4uY2YwNDJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCkBAIC02MSwxMCArNjEsMTMgQEAKIAogc3RhdGljIGludCBhZjkwMTVfcndfdWRldihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHJlcV90ICpyZXEpCiB7CisjZGVmaW5lIEJVRl9MRU4gNjMKKyNkZWZpbmUgUkVRX0hEUl9MRU4gOCAvKiBzZW5kIGhlYWRlciBzaXplICovCisjZGVmaW5lIEFDS19IRFJfTEVOIDIgLyogcmVjZSBoZWFkZXIgc2l6ZSAqLwogCWludCBhY3RfbGVuLCByZXQ7Ci0JdTggYnVmWzY0XTsKKwl1OCBidWZbQlVGX0xFTl07CiAJdTggd3JpdGUgPSAxOwotCXU4IG1zZ19sZW4gPSA4OworCXU4IG1zZ19sZW4gPSBSRVFfSERSX0xFTjsKIAlzdGF0aWMgdTggc2VxOyAvKiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhZjkwMTVfdXNiX211dGV4KSA8IDApCkBAIC05NCw3ICs5Nyw3IEBACiAJCWJyZWFrOwogCWNhc2UgV1JJVEVfTUVNT1JZOgogCQlpZiAoKChyZXEtPmFkZHIgJiAweGZmMDApID09IDB4ZmYwMCkgfHwKLQkJICAgICgocmVxLT5hZGRyICYgMHhhZTAwKSA9PSAweGFlMDApKQorCQkgICAgKChyZXEtPmFkZHIgJiAweGZmMDApID09IDB4YWUwMCkpCiAJCQlidWZbMF0gPSBXUklURV9WSVJUVUFMX01FTU9SWTsKIAljYXNlIFdSSVRFX1ZJUlRVQUxfTUVNT1JZOgogCWNhc2UgQ09QWV9GSVJNV0FSRToKQEAgLTEwNywxNyArMTEwLDI2IEBACiAJCWdvdG8gZXJyb3JfdW5sb2NrOwogCX0KIAorCS8qIGJ1ZmZlciBvdmVyZmxvdyBjaGVjayAqLworCWlmICgod3JpdGUgJiYgKHJlcS0+ZGF0YV9sZW4gPiBCVUZfTEVOIC0gUkVRX0hEUl9MRU4pKSB8fAorCQkoIXdyaXRlICYmIChyZXEtPmRhdGFfbGVuID4gQlVGX0xFTiAtIEFDS19IRFJfTEVOKSkpIHsKKwkJZXJyKCJ0b28gbXVjaCBkYXRhOyBjbWQ6JWQgbGVuOiVkIiwgcmVxLT5jbWQsIHJlcS0+ZGF0YV9sZW4pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX3VubG9jazsKKwl9CisKIAkvKiB3cml0ZSByZXF1ZXN0ZWQgKi8KIAlpZiAod3JpdGUpIHsKLQkJbWVtY3B5KCZidWZbOF0sIHJlcS0+ZGF0YSwgcmVxLT5kYXRhX2xlbik7CisJCW1lbWNweSgmYnVmW1JFUV9IRFJfTEVOXSwgcmVxLT5kYXRhLCByZXEtPmRhdGFfbGVuKTsKIAkJbXNnX2xlbiArPSByZXEtPmRhdGFfbGVuOwogCX0KKwogCWRlYl94ZmVyKCI+Pj4gIik7CiAJZGVidWdfZHVtcChidWYsIG1zZ19sZW4sIGRlYl94ZmVyKTsKIAogCS8qIHNlbmQgcmVxICovCiAJcmV0ID0gdXNiX2J1bGtfbXNnKHVkZXYsIHVzYl9zbmRidWxrcGlwZSh1ZGV2LCAweDAyKSwgYnVmLCBtc2dfbGVuLAotCSZhY3RfbGVuLCBBRjkwMTVfVVNCX1RJTUVPVVQpOworCQkmYWN0X2xlbiwgQUY5MDE1X1VTQl9USU1FT1VUKTsKIAlpZiAocmV0KQogCQllcnIoImJ1bGsgbWVzc2FnZSBmYWlsZWQ6JWQgKCVkLyVkKSIsIHJldCwgbXNnX2xlbiwgYWN0X2xlbik7CiAJZWxzZQpAQCAtMTMwLDEwICsxNDIsMTQgQEAKIAlpZiAocmVxLT5jbWQgPT0gRE9XTkxPQURfRklSTVdBUkUgfHwgcmVxLT5jbWQgPT0gUkVDT05ORUNUX1VTQikKIAkJZ290byBleGl0X3VubG9jazsKIAotCS8qIHJlY2VpdmUgYWNrIGFuZCBkYXRhIGlmIHJlYWQgcmVxICovCi0JbXNnX2xlbiA9IDEgKyAxICsgcmVxLT5kYXRhX2xlbjsgIC8qIHNlcSArIHN0YXR1cyArIGRhdGEgbGVuICovCisJLyogd3JpdGUgcmVjZWl2ZXMgc2VxICsgc3RhdHVzID0gMiBieXRlcworCSAgIHJlYWQgcmVjZWl2ZXMgc2VxICsgc3RhdHVzICsgZGF0YSA9IDIgKyBOIGJ5dGVzICovCisJbXNnX2xlbiA9IEFDS19IRFJfTEVOOworCWlmICghd3JpdGUpCisJCW1zZ19sZW4gKz0gcmVxLT5kYXRhX2xlbjsKKwogCXJldCA9IHVzYl9idWxrX21zZyh1ZGV2LCB1c2JfcmN2YnVsa3BpcGUodWRldiwgMHg4MSksIGJ1ZiwgbXNnX2xlbiwKLQkJCSAgICZhY3RfbGVuLCBBRjkwMTVfVVNCX1RJTUVPVVQpOworCQkmYWN0X2xlbiwgQUY5MDE1X1VTQl9USU1FT1VUKTsKIAlpZiAocmV0KSB7CiAJCWVycigicmVjdiBidWxrIG1lc3NhZ2UgZmFpbGVkOiVkIiwgcmV0KTsKIAkJcmV0ID0gLTE7CkBAIC0xNTksNyArMTc1LDcgQEAKIAogCS8qIHJlYWQgcmVxdWVzdCwgY29weSByZXR1cm5lZCBkYXRhIHRvIHJldHVybiBidWYgKi8KIAlpZiAoIXdyaXRlKQotCQltZW1jcHkocmVxLT5kYXRhLCAmYnVmWzJdLCByZXEtPmRhdGFfbGVuKTsKKwkJbWVtY3B5KHJlcS0+ZGF0YSwgJmJ1ZltBQ0tfSERSX0xFTl0sIHJlcS0+ZGF0YV9sZW4pOwogCiBlcnJvcl91bmxvY2s6CiBleGl0X3VubG9jazoKQEAgLTM2OSwxMiArMzg1LDE0IEBACiAJdTggIHBhY2tldF9zaXplOwogCWRlYl9pbmZvKCIlczogVVNCIHNwZWVkOiVkXG4iLCBfX2Z1bmNfXywgZC0+dWRldi0+c3BlZWQpOwogCisJLyogV2luZG93cyBkcml2ZXIgdXNlcyBwYWNrZXQgY291bnQgMjEgZm9yIFVTQjEuMSBhbmQgMzQ4IGZvciBVU0IyLjAuCisJICAgV2UgdXNlIHNtYWxsZXIgLSBhYm91dCAxLzQgZnJvbSB0aGUgb3JpZ2luYWwsIDUgYW5kIDg3LiAqLwogI2RlZmluZSBUU19QQUNLRVRfU0laRSAgICAgICAgICAgIDE4OAogCi0jZGVmaW5lIFRTX1VTQjIwX1BBQ0tFVF9DT1VOVCAgICAgMzQ4CisjZGVmaW5lIFRTX1VTQjIwX1BBQ0tFVF9DT1VOVCAgICAgIDg3CiAjZGVmaW5lIFRTX1VTQjIwX0ZSQU1FX1NJWkUgICAgICAgKFRTX1BBQ0tFVF9TSVpFKlRTX1VTQjIwX1BBQ0tFVF9DT1VOVCkKIAotI2RlZmluZSBUU19VU0IxMV9QQUNLRVRfQ09VTlQgICAgICAyMQorI2RlZmluZSBUU19VU0IxMV9QQUNLRVRfQ09VTlQgICAgICAgNQogI2RlZmluZSBUU19VU0IxMV9GUkFNRV9TSVpFICAgICAgIChUU19QQUNLRVRfU0laRSpUU19VU0IxMV9QQUNLRVRfQ09VTlQpCiAKICNkZWZpbmUgVFNfVVNCMjBfTUFYX1BBQ0tFVF9TSVpFICA1MTIKQEAgLTg2OCwxMyArODg2LDEzIEBACiAJCS8qIFVTQjEuMSBzZXQgc21hbGxlciBidWZmZXJzaXplIGFuZCBkaXNhYmxlIDJuZCBhZGFwdGVyICovCiAJCWlmICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgewogCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0uYWRhcHRlclswXS5zdHJlYW0udS5idWxrLmJ1ZmZlcnNpemUKLQkJCQk9IFRTX1VTQjExX01BWF9QQUNLRVRfU0laRTsKKwkJCQk9IFRTX1VTQjExX0ZSQU1FX1NJWkU7CiAJCQkvKiBkaXNhYmxlIDJuZCBhZGFwdGVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQogCQkJICAgUElELWZpbHRlcnMgKi8KIAkJCWFmOTAxNV9jb25maWcuZHVhbF9tb2RlID0gMDsKIAkJfSBlbHNlIHsKIAkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLmFkYXB0ZXJbMF0uc3RyZWFtLnUuYnVsay5idWZmZXJzaXplCi0JCQkJPSBUU19VU0IyMF9NQVhfUEFDS0VUX1NJWkU7CisJCQkJPSBUU19VU0IyMF9GUkFNRV9TSVpFOwogCQl9CiAJfQogCkBAIC0xMzEwLDcgKzEzMjgsNyBAQAogCQkJCQkudSA9IHsKIAkJCQkJCS5idWxrID0gewogCQkJCQkJCS5idWZmZXJzaXplID0KLQkJCQkJCVRTX1VTQjIwX01BWF9QQUNLRVRfU0laRSwKKwkJCQkJCVRTX1VTQjIwX0ZSQU1FX1NJWkUsCiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9LApAQCAtMTQxNiw3ICsxNDM0LDcgQEAKIAkJCQkJLnUgPSB7CiAJCQkJCQkuYnVsayA9IHsKIAkJCQkJCQkuYnVmZmVyc2l6ZSA9Ci0JCQkJCQlUU19VU0IyMF9NQVhfUEFDS0VUX1NJWkUsCisJCQkJCQlUU19VU0IyMF9GUkFNRV9TSVpFLAogCQkJCQkJfQogCQkJCQl9CiAJCQkJfSwKQEAgLTE1MjIsNyArMTU0MCw3IEBACiAJCQkJCS51ID0gewogCQkJCQkJLmJ1bGsgPSB7CiAJCQkJCQkJLmJ1ZmZlcnNpemUgPQotCQkJCQkJVFNfVVNCMjBfTUFYX1BBQ0tFVF9TSVpFLAorCQkJCQkJVFNfVVNCMjBfRlJBTUVfU0laRSwKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwppbmRleCA3MzgxYWZmLi4yYWU3ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKQEAgLTIwMywxMSArMjAzLDExIEBACiAKIHN0YXRpYyBpbnQgYW55c2VlX210MzUyX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RhdGljIHU4IGNsb2NrX2NvbmZpZyBbXSAgPSB7IENMT0NLX0NUTCwgIDB4MzgsIDB4MjggfTsKLQlzdGF0aWMgdTggcmVzZXQgW10gICAgICAgICA9IHsgUkVTRVQsICAgICAgMHg4MCB9OwotCXN0YXRpYyB1OCBhZGNfY3RsXzFfY2ZnIFtdID0geyBBRENfQ1RMXzEsICAweDQwIH07Ci0Jc3RhdGljIHU4IGFnY19jZmcgW10gICAgICAgPSB7IEFHQ19UQVJHRVQsIDB4MjgsIDB4MjAgfTsKLQlzdGF0aWMgdTggZ3BwX2N0bF9jZmcgW10gICA9IHsgR1BQX0NUTCwgICAgMHgzMyB9OworCXN0YXRpYyB1OCBjbG9ja19jb25maWdbXSAgID0geyBDTE9DS19DVEwsICAweDM4LCAweDI4IH07CisJc3RhdGljIHU4IHJlc2V0W10gICAgICAgICAgPSB7IFJFU0VULCAgICAgIDB4ODAgfTsKKwlzdGF0aWMgdTggYWRjX2N0bF8xX2NmZ1tdICA9IHsgQURDX0NUTF8xLCAgMHg0MCB9OworCXN0YXRpYyB1OCBhZ2NfY2ZnW10gICAgICAgID0geyBBR0NfVEFSR0VULCAweDI4LCAweDIwIH07CisJc3RhdGljIHU4IGdwcF9jdGxfY2ZnW10gICAgPSB7IEdQUF9DVEwsICAgIDB4MzMgfTsKIAlzdGF0aWMgdTggY2FwdF9yYW5nZV9jZmdbXSA9IHsgQ0FQVF9SQU5HRSwgMHgzMiB9OwogCiAJbXQzNTJfd3JpdGUoZmUsIGNsb2NrX2NvbmZpZywgICBzaXplb2YoY2xvY2tfY29uZmlnKSk7CkBAIC00ODUsNyArNDg1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYW55c2VlX3RhYmxlIFtdID0geworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFueXNlZV90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfVklEX0NZUFJFU1MsIFVTQl9QSURfQU5ZU0VFKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX0FNVCwgICAgIFVTQl9QSURfQU5ZU0VFKSB9LAogCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTUxMSw3ICs1MTEsNyBAQAogCQkJCS5lbmRwb2ludCA9IDB4ODIsCiAJCQkJLnUgPSB7CiAJCQkJCS5idWxrID0gewotCQkJCQkJLmJ1ZmZlcnNpemUgPSA1MTIsCisJCQkJCQkuYnVmZmVyc2l6ZSA9ICgxNio1MTIpLAogCQkJCQl9CiAJCQkJfQogCQkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCmluZGV4IDUyYmFkYzAuLjA3MzdjNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJCQkJLmVuZHBvaW50ID0gMHg4MiwKIAkJCQkudSA9IHsKIAkJCQkJLmJ1bGsgPSB7Ci0JCQkJCQkuYnVmZmVyc2l6ZSA9IDUxMiwKKwkJCQkJCS5idWZmZXJzaXplID0gKDE2KjUxMiksCiAJCQkJCX0KIAkJCQl9CiAJCQl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggZDFkNmY0NC4uMGIyODEyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC00LDEzICs0LDE0IEBACiAgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQogICoJU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtNyBEaUJjb20sIFNBCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTkgRGlCY29tLCBTQSBldCBhbAogICovCiAjaW5jbHVkZSAiZGliMDcwMC5oIgogCiAjaW5jbHVkZSAiZGliMzAwMG1jLmgiCiAjaW5jbHVkZSAiZGliNzAwMG0uaCIKICNpbmNsdWRlICJkaWI3MDAwcC5oIgorI2luY2x1ZGUgImRpYjgwMDAuaCIKICNpbmNsdWRlICJtdDIwNjAuaCIKICNpbmNsdWRlICJtdDIyNjYuaCIKICNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKQEAgLTEwOTgsMTEgKzEwOTksMTMgQEAKIAogc3RhdGljIGludCBkaWI3MDcwX3R1bmVyX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYpCiB7CisJZGViX2luZm8oInJlc2V0OiAlZCIsIG9ub2ZmKTsKIAlyZXR1cm4gZGliNzAwMHBfc2V0X2dwaW8oZmUsIDgsIDAsICFvbm9mZik7CiB9CiAKIHN0YXRpYyBpbnQgZGliNzA3MF90dW5lcl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQogeworCWRlYl9pbmZvKCJzbGVlcDogJWQiLCBvbm9mZik7CiAJcmV0dXJuIGRpYjcwMDBwX3NldF9ncGlvKGZlLCA5LCAwLCBvbm9mZik7CiB9CiAKQEAgLTExMTIsMTYgKzExMTUsMjYgQEAKIAkJLnJlc2V0ID0gZGliNzA3MF90dW5lcl9yZXNldCwKIAkJLnNsZWVwID0gZGliNzA3MF90dW5lcl9zbGVlcCwKIAkJLmNsb2NrX2toeiA9IDEyMDAwLAotCQkuY2xvY2tfcGFkX2RyaXZlID0gNAorCQkuY2xvY2tfcGFkX2RyaXZlID0gNCwKKwkJLmNoYXJnZV9wdW1wID0gMiwKIAl9LCB7CiAJCS5pMmNfYWRkcmVzcyA9IERFRkFVTFRfRElCMDA3MF9JMkNfQUREUkVTUywKIAkJLnJlc2V0ID0gZGliNzA3MF90dW5lcl9yZXNldCwKIAkJLnNsZWVwID0gZGliNzA3MF90dW5lcl9zbGVlcCwKIAkJLmNsb2NrX2toeiA9IDEyMDAwLAotCisJCS5jaGFyZ2VfcHVtcCA9IDIsCiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyBkaWI3NzcwcF9kaWIwMDcwX2NvbmZpZyA9IHsKKwkgLmkyY19hZGRyZXNzID0gREVGQVVMVF9ESUIwMDcwX0kyQ19BRERSRVNTLAorCSAucmVzZXQgPSBkaWI3MDcwX3R1bmVyX3Jlc2V0LAorCSAuc2xlZXAgPSBkaWI3MDcwX3R1bmVyX3NsZWVwLAorCSAuY2xvY2tfa2h6ID0gMTIwMDAsCisJIC5jbG9ja19wYWRfZHJpdmUgPSAwLAorCSAuZmxpcF9jaGlwID0gMSwKK307CisKIHN0YXRpYyBpbnQgZGliNzA3MF9zZXRfcGFyYW1fb3ZlcnJpZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQogewogCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OwpAQCAtMTEzOSw2ICsxMTUyLDQ1IEBACiAJcmV0dXJuIHN0YXRlLT5zZXRfcGFyYW1fc2F2ZShmZSwgZmVwKTsKIH0KIAorc3RhdGljIGludCBkaWI3NzcwX3NldF9wYXJhbV9vdmVycmlkZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJIHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OworCSBzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlICpzdGF0ZSA9IGFkYXAtPnByaXY7CisKKwkgdTE2IG9mZnNldDsKKwkgdTggYmFuZCA9IEJBTkRfT0ZfRlJFUVVFTkNZKGZlcC0+ZnJlcXVlbmN5LzEwMDApOworCSBzd2l0Y2ggKGJhbmQpIHsKKwkgY2FzZSBCQU5EX1ZIRjoKKwkJICBkaWI3MDAwcF9zZXRfZ3BpbyhmZSwgMCwgMCwgMSk7CisJCSAgb2Zmc2V0ID0gODUwOworCQkgIGJyZWFrOworCSBjYXNlIEJBTkRfVUhGOgorCSBkZWZhdWx0OgorCQkgIGRpYjcwMDBwX3NldF9ncGlvKGZlLCAwLCAwLCAwKTsKKwkJICBvZmZzZXQgPSAyNTA7CisJCSAgYnJlYWs7CisJIH0KKwkgZGViX2luZm8oIldCRCBmb3IgRGlCNzAwMFA6ICVkXG4iLCBvZmZzZXQgKyBkaWIwMDcwX3diZF9vZmZzZXQoZmUpKTsKKwkgZGliNzAwMHBfc2V0X3diZF9yZWYoZmUsIG9mZnNldCArIGRpYjAwNzBfd2JkX29mZnNldChmZSkpOworCSByZXR1cm4gc3RhdGUtPnNldF9wYXJhbV9zYXZlKGZlLCBmZXApOworfQorCitzdGF0aWMgaW50IGRpYjc3NzBwX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCSBzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlICpzdCA9IGFkYXAtPnByaXY7CisJIHN0cnVjdCBpMmNfYWRhcHRlciAqdHVuX2kyYyA9IGRpYjcwMDBwX2dldF9pMmNfbWFzdGVyKGFkYXAtPmZlLAorCQkJIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CisKKwkgaWYgKGR2Yl9hdHRhY2goZGliMDA3MF9hdHRhY2gsIGFkYXAtPmZlLCB0dW5faTJjLAorCQkJCSAmZGliNzc3MHBfZGliMDA3MF9jb25maWcpID09IE5VTEwpCisJCSByZXR1cm4gLUVOT0RFVjsKKworCSBzdC0+c2V0X3BhcmFtX3NhdmUgPSBhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zOworCSBhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZGliNzc3MF9zZXRfcGFyYW1fb3ZlcnJpZGU7CisJIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRpYjcwNzBwX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCXN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUgKnN0ID0gYWRhcC0+cHJpdjsKQEAgLTEyMTcsNiArMTI2OSwzMDYgQEAKIAlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogfQogCisvKiBESUI4MDd4IGdlbmVyaWMgKi8KK3N0YXRpYyBzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIGRpYjgwN3hfYWdjX2NvbmZpZ1syXSA9IHsKKwl7CisJCUJBTkRfVkhGLAorCQkvKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLAorCQkgKiBQX2FnY19mcmVxX3B3bV9kaXY9MSwgUF9hZ2NfaW52X3B3bTE9MCwKKwkJICogUF9hZ2NfaW52X3B3bTI9MCxQX2FnY19pbmhfZGNfcnZfZXN0PTAsCisJCSAqIFBfYWdjX3RpbWVfZXN0PTMsIFBfYWdjX2ZyZWV6ZT0wLCBQX2FnY19uYl9lc3Q9NSwKKwkJICogUF9hZ2Nfd3JpdGU9MCAqLworCQkoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoNyA8PCAxMSkgfCAoMCA8PCAxMCkgfCAoMCA8PCA5KSB8CisJCQkoMCA8PCA4KSB8ICgzIDw8IDUpIHwgKDAgPDwgNCkgfCAoNSA8PCAxKSB8CisJCQkoMCA8PCAwKSwgLyogc2V0dXAqLworCisJCTYwMCwgLyogaW52X2dhaW4qLworCQkxMCwgIC8qIHRpbWVfc3RhYmlsaXoqLworCisJCTAsICAvKiBhbHBoYV9sZXZlbCovCisJCTExOCwgIC8qIHRobG9jayovCisKKwkJMCwgICAgIC8qIHdiZF9pbnYqLworCQkzNTMwLCAgLyogd2JkX3JlZiovCisJCTEsICAgICAvKiB3YmRfc2VsKi8KKwkJNSwgICAgIC8qIHdiZF9hbHBoYSovCisKKwkJNjU1MzUsICAvKiBhZ2MxX21heCovCisJCTAsICAvKiBhZ2MxX21pbiovCisKKwkJNjU1MzUsICAvKiBhZ2MyX21heCovCisJCTAsICAgICAgLyogYWdjMl9taW4qLworCisJCTAsICAgICAgLyogYWdjMV9wdDEqLworCQk0MCwgICAgIC8qIGFnYzFfcHQyKi8KKwkJMTgzLCAgICAvKiBhZ2MxX3B0MyovCisJCTIwNiwgICAgLyogYWdjMV9zbG9wZTEqLworCQkyNTUsICAgIC8qIGFnYzFfc2xvcGUyKi8KKwkJNzIsICAgICAvKiBhZ2MyX3B0MSovCisJCTE1MiwgICAgLyogYWdjMl9wdDIqLworCQk4OCwgICAgIC8qIGFnYzJfc2xvcGUxKi8KKwkJOTAsICAgICAvKiBhZ2MyX3Nsb3BlMiovCisKKwkJMTcsICAvKiBhbHBoYV9tYW50Ki8KKwkJMjcsICAvKiBhbHBoYV9leHAqLworCQkyMywgIC8qIGJldGFfbWFudCovCisJCTUxLCAgLyogYmV0YV9leHAqLworCisJCTAsICAvKiBwZXJmb3JtX2FnY19zb2Z0c3BsaXQqLworCX0sIHsKKwkJQkFORF9VSEYsCisJCS8qIFBfYWdjX3VzZV9zZF9tb2QxPTAsIFBfYWdjX3VzZV9zZF9tb2QyPTAsCisJCSAqIFBfYWdjX2ZyZXFfcHdtX2Rpdj0xLCBQX2FnY19pbnZfcHdtMT0wLAorCQkgKiBQX2FnY19pbnZfcHdtMj0wLCBQX2FnY19pbmhfZGNfcnZfZXN0PTAsCisJCSAqIFBfYWdjX3RpbWVfZXN0PTMsIFBfYWdjX2ZyZWV6ZT0wLCBQX2FnY19uYl9lc3Q9NSwKKwkJICogUF9hZ2Nfd3JpdGU9MCAqLworCQkoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoMSA8PCAxMSkgfCAoMCA8PCAxMCkgfCAoMCA8PCA5KSB8CisJCQkoMCA8PCA4KSB8ICgzIDw8IDUpIHwgKDAgPDwgNCkgfCAoNSA8PCAxKSB8CisJCQkoMCA8PCAwKSwgLyogc2V0dXAgKi8KKworCQk2MDAsIC8qIGludl9nYWluKi8KKwkJMTAsICAvKiB0aW1lX3N0YWJpbGl6Ki8KKworCQkwLCAgLyogYWxwaGFfbGV2ZWwqLworCQkxMTgsICAvKiB0aGxvY2sqLworCisJCTAsICAgICAvKiB3YmRfaW52Ki8KKwkJMzUzMCwgIC8qIHdiZF9yZWYqLworCQkxLCAgICAgLyogd2JkX3NlbCovCisJCTUsICAgICAvKiB3YmRfYWxwaGEqLworCisJCTY1NTM1LCAgLyogYWdjMV9tYXgqLworCQkwLCAgLyogYWdjMV9taW4qLworCisJCTY1NTM1LCAgLyogYWdjMl9tYXgqLworCQkwLCAgICAgIC8qIGFnYzJfbWluKi8KKworCQkwLCAgICAgIC8qIGFnYzFfcHQxKi8KKwkJNDAsICAgICAvKiBhZ2MxX3B0MiovCisJCTE4MywgICAgLyogYWdjMV9wdDMqLworCQkyMDYsICAgIC8qIGFnYzFfc2xvcGUxKi8KKwkJMjU1LCAgICAvKiBhZ2MxX3Nsb3BlMiovCisJCTcyLCAgICAgLyogYWdjMl9wdDEqLworCQkxNTIsICAgIC8qIGFnYzJfcHQyKi8KKwkJODgsICAgICAvKiBhZ2MyX3Nsb3BlMSovCisJCTkwLCAgICAgLyogYWdjMl9zbG9wZTIqLworCisJCTE3LCAgLyogYWxwaGFfbWFudCovCisJCTI3LCAgLyogYWxwaGFfZXhwKi8KKwkJMjMsICAvKiBiZXRhX21hbnQqLworCQk1MSwgIC8qIGJldGFfZXhwKi8KKworCQkwLCAgLyogcGVyZm9ybV9hZ2Nfc29mdHNwbGl0Ki8KKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGRpYngwMDBfYmFuZHdpZHRoX2NvbmZpZyBkaWI4MDd4X2J3X2NvbmZpZ18xMl9taHogPSB7CisJNjAwMDAsIDE1MDAwLCAvKiBpbnRlcm5hbCwgc2FtcGxpbmcqLworCTEsIDIwLCAzLCAxLCAwLCAvKiBwbGxfY2ZnOiBwcmVkaXYsIHJhdGlvLCByYW5nZSwgcmVzZXQsIGJ5cGFzcyovCisJMCwgMCwgMSwgMSwgMiwgLyogbWlzYzogcmVmZGl2LCBieXBjbGtfZGl2LCBJT19DTEtfZW5fY29yZSwKKwkJCSAgQURDbGtTcmMsIG1vZHVsbyAqLworCSgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1OTkgPDwgMCksIC8qIHNhZF9jZmc6IHJlZnNlbCwgc2VsLCBmcmVxXzE1ayovCisJKDAgPDwgMjUpIHwgMCwgLyogaWZyZXEgPSAwLjAwMDAwMCBNSHoqLworCTE4MTc5NzU1LCAvKiB0aW1mKi8KKwkxMjAwMDAwMCwgLyogeHRhbF9oeiovCit9OworCitzdGF0aWMgc3RydWN0IGRpYjgwMDBfY29uZmlnIGRpYjgwN3hfZGliODAwMF9jb25maWdbMl0gPSB7CisJeworCQkub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcyA9IDEsCisKKwkJLmFnY19jb25maWdfY291bnQgPSAyLAorCQkuYWdjID0gZGliODA3eF9hZ2NfY29uZmlnLAorCQkucGxsID0gJmRpYjgwN3hfYndfY29uZmlnXzEyX21oeiwKKwkJLnR1bmVyX2lzX2Jhc2ViYW5kID0gMSwKKworCQkuZ3Bpb19kaXIgPSBESUI4MDAwX0dQSU9fREVGQVVMVF9ESVJFQ1RJT05TLAorCQkuZ3Bpb192YWwgPSBESUI4MDAwX0dQSU9fREVGQVVMVF9WQUxVRVMsCisJCS5ncGlvX3B3bV9wb3MgPSBESUI4MDAwX0dQSU9fREVGQVVMVF9QV01fUE9TLAorCisJCS5ob3N0YnVzX2RpdmVyc2l0eSA9IDEsCisJCS5kaXZfY2ZnID0gMSwKKwkJLmFnY19jb250cm9sID0gJmRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyLAorCQkub3V0cHV0X21vZGUgPSBPVVRNT0RFX01QRUcyX0ZJRk8sCisJCS5kcml2ZXMgPSAweDJkOTgsCisJfSwgeworCQkub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcyA9IDEsCisKKwkJLmFnY19jb25maWdfY291bnQgPSAyLAorCQkuYWdjID0gZGliODA3eF9hZ2NfY29uZmlnLAorCQkucGxsID0gJmRpYjgwN3hfYndfY29uZmlnXzEyX21oeiwKKwkJLnR1bmVyX2lzX2Jhc2ViYW5kID0gMSwKKworCQkuZ3Bpb19kaXIgPSBESUI4MDAwX0dQSU9fREVGQVVMVF9ESVJFQ1RJT05TLAorCQkuZ3Bpb192YWwgPSBESUI4MDAwX0dQSU9fREVGQVVMVF9WQUxVRVMsCisJCS5ncGlvX3B3bV9wb3MgPSBESUI4MDAwX0dQSU9fREVGQVVMVF9QV01fUE9TLAorCisJCS5ob3N0YnVzX2RpdmVyc2l0eSA9IDEsCisJCS5hZ2NfY29udHJvbCA9ICZkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlciwKKwkJLm91dHB1dF9tb2RlID0gT1VUTU9ERV9NUEVHMl9GSUZPLAorCQkuZHJpdmVzID0gMHgyZDk4LAorCX0KK307CisKK3N0YXRpYyBpbnQgZGliODA3eF90dW5lcl9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQoreworCXJldHVybiBkaWI4MDAwX3NldF9ncGlvKGZlLCA1LCAwLCAhb25vZmYpOworfQorCitzdGF0aWMgaW50IGRpYjgwN3hfdHVuZXJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKK3sKKwlyZXR1cm4gZGliODAwMF9zZXRfZ3BpbyhmZSwgMCwgMCwgb25vZmYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpYjAwNzBfd2JkX2dhaW5fY2ZnIGRpYjgwNzBfd2JkX2dhaW5fY2ZnW10gPSB7CisgICAgeyAyNDAsICAgICAgN30sCisgICAgeyAweGZmZmYsICAgNn0sCit9OworCitzdGF0aWMgc3RydWN0IGRpYjAwNzBfY29uZmlnIGRpYjgwN3hfZGliMDA3MF9jb25maWdbMl0gPSB7CisJeworCQkuaTJjX2FkZHJlc3MgPSBERUZBVUxUX0RJQjAwNzBfSTJDX0FERFJFU1MsCisJCS5yZXNldCA9IGRpYjgwN3hfdHVuZXJfcmVzZXQsCisJCS5zbGVlcCA9IGRpYjgwN3hfdHVuZXJfc2xlZXAsCisJCS5jbG9ja19raHogPSAxMjAwMCwKKwkJLmNsb2NrX3BhZF9kcml2ZSA9IDQsCisJCS52Z2FfZmlsdGVyID0gMSwKKwkJLmZvcmNlX2NyeXN0YWxfbW9kZSA9IDEsCisJCS5lbmFibGVfdGhpcmRfb3JkZXJfZmlsdGVyID0gMSwKKwkJLmNoYXJnZV9wdW1wID0gMCwKKwkJLndiZF9nYWluID0gZGliODA3MF93YmRfZ2Fpbl9jZmcsCisJCS5vc2NfYnVmZmVyX3N0YXRlID0gMCwKKwkJLmZyZXFfb2Zmc2V0X2toel91aGYgPSAtMTAwLAorCQkuZnJlcV9vZmZzZXRfa2h6X3ZoZiA9IC0xMDAsCisJfSwgeworCQkuaTJjX2FkZHJlc3MgPSBERUZBVUxUX0RJQjAwNzBfSTJDX0FERFJFU1MsCisJCS5yZXNldCA9IGRpYjgwN3hfdHVuZXJfcmVzZXQsCisJCS5zbGVlcCA9IGRpYjgwN3hfdHVuZXJfc2xlZXAsCisJCS5jbG9ja19raHogPSAxMjAwMCwKKwkJLmNsb2NrX3BhZF9kcml2ZSA9IDIsCisJCS52Z2FfZmlsdGVyID0gMSwKKwkJLmZvcmNlX2NyeXN0YWxfbW9kZSA9IDEsCisJCS5lbmFibGVfdGhpcmRfb3JkZXJfZmlsdGVyID0gMSwKKwkJLmNoYXJnZV9wdW1wID0gMCwKKwkJLndiZF9nYWluID0gZGliODA3MF93YmRfZ2Fpbl9jZmcsCisJCS5vc2NfYnVmZmVyX3N0YXRlID0gMCwKKwkJLmZyZXFfb2Zmc2V0X2toel91aGYgPSAtMjUsCisJCS5mcmVxX29mZnNldF9raHpfdmhmID0gLTI1LAorCX0KK307CisKK3N0YXRpYyBpbnQgZGliODA3eF9zZXRfcGFyYW1fb3ZlcnJpZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUgKnN0YXRlID0gYWRhcC0+cHJpdjsKKworCXUxNiBvZmZzZXQgPSBkaWIwMDcwX3diZF9vZmZzZXQoZmUpOworCXU4IGJhbmQgPSBCQU5EX09GX0ZSRVFVRU5DWShmZXAtPmZyZXF1ZW5jeS8xMDAwKTsKKwlzd2l0Y2ggKGJhbmQpIHsKKwljYXNlIEJBTkRfVkhGOgorCQlvZmZzZXQgKz0gNzUwOworCQlicmVhazsKKwljYXNlIEJBTkRfVUhGOiAgLyogZmFsbC10aHJ1IHdhbnRlZCAqLworCWRlZmF1bHQ6CisJCW9mZnNldCArPSAyNTA7IGJyZWFrOworCX0KKwlkZWJfaW5mbygiV0JEIGZvciBEaUI4MDAwOiAlZFxuIiwgb2Zmc2V0KTsKKwlkaWI4MDAwX3NldF93YmRfcmVmKGZlLCBvZmZzZXQpOworCisJcmV0dXJuIHN0YXRlLT5zZXRfcGFyYW1fc2F2ZShmZSwgZmVwKTsKK30KKworc3RhdGljIGludCBkaWI4MDd4X3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUgKnN0ID0gYWRhcC0+cHJpdjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnR1bl9pMmMgPSBkaWI4MDAwX2dldF9pMmNfbWFzdGVyKGFkYXAtPmZlLAorCQkJRElCWDAwMF9JMkNfSU5URVJGQUNFX1RVTkVSLCAxKTsKKworCWlmIChhZGFwLT5pZCA9PSAwKSB7CisJCWlmIChkdmJfYXR0YWNoKGRpYjAwNzBfYXR0YWNoLCBhZGFwLT5mZSwgdHVuX2kyYywKKwkJCQkmZGliODA3eF9kaWIwMDcwX2NvbmZpZ1swXSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CisJCWlmIChkdmJfYXR0YWNoKGRpYjAwNzBfYXR0YWNoLCBhZGFwLT5mZSwgdHVuX2kyYywKKwkJCQkmZGliODA3eF9kaWIwMDcwX2NvbmZpZ1sxXSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0LT5zZXRfcGFyYW1fc2F2ZSA9IGFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXM7CisJYWRhcC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGRpYjgwN3hfc2V0X3BhcmFtX292ZXJyaWRlOworCXJldHVybiAwOworfQorCisKKy8qIFNUSzgwN3ggKi8KK3N0YXRpYyBpbnQgc3RrODA3eF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoMTApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPOSwgR1BJT19PVVQsIDEpOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNCwgR1BJT19PVVQsIDEpOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNywgR1BJT19PVVQsIDEpOworCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDApOworCisJZGliMDcwMF9jdHJsX2Nsb2NrKGFkYXAtPmRldiwgNzIsIDEpOworCisJbXNsZWVwKDEwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDEwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKKworCWRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKKwkJCQkweDgwKTsKKworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI4MDAwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsCisJCQkgICAgICAmZGliODA3eF9kaWI4MDAwX2NvbmZpZ1swXSk7CisKKwlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/ICAtRU5PREVWIDogMDsKK30KKworLyogU1RLODA3eFBWUiAqLworc3RhdGljIGludCBzdGs4MDd4cHZyX2Zyb250ZW5kX2F0dGFjaDAoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAwKTsKKwltc2xlZXAoMzApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNiwgR1BJT19PVVQsIDEpOworCW1zbGVlcCg1MDApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPOSwgR1BJT19PVVQsIDEpOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNCwgR1BJT19PVVQsIDEpOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNywgR1BJT19PVVQsIDEpOworCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDApOworCisJZGliMDcwMF9jdHJsX2Nsb2NrKGFkYXAtPmRldiwgNzIsIDEpOworCisJbXNsZWVwKDEwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDEwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKKworCS8qIGluaXRpYWxpemUgSUMgMCAqLworCWRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAweDEyLCAweDgwKTsKKworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI4MDAwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsCisJCQkgICAgICAmZGliODA3eF9kaWI4MDAwX2NvbmZpZ1swXSk7CisKKwlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCitzdGF0aWMgaW50IHN0azgwN3hwdnJfZnJvbnRlbmRfYXR0YWNoMShzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCS8qIGluaXRpYWxpemUgSUMgMSAqLworCWRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAweDIyLCAweDgyKTsKKworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI4MDAwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODIsCisJCQkgICAgICAmZGliODA3eF9kaWI4MDAwX2NvbmZpZ1sxXSk7CisKKwlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCisKIC8qIFNUSzcwNzBQRCAqLwogc3RhdGljIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgc3RrNzA3MHBkX2RpYjcwMDBwX2NvbmZpZ1syXSA9IHsKIAl7CkBAIC0xNTAwLDcgKzE4NTIsMTUgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywJVVNCX1BJRF9URVJSQVRFQ19UMykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywJVVNCX1BJRF9URVJSQVRFQ19UNSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ZVUFOLCAgICAgIFVTQl9QSURfWVVBTl9TVEs3NzAwRCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ZVUFOLAlVU0JfUElEX1lVQU5fU1RLNzcwMERfMikgfSwKKy8qIDU1ICoveyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwJVVNCX1BJRF9ZVUFOX1NUSzc3MDBEXzIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfUElOTkFDTEUsCVVTQl9QSURfUElOTkFDTEVfUENUVjczQSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9QSU5OQUNMRSwJVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzNFU0UpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfUElOTkFDTEUsCVVTQl9QSURfUElOTkFDTEVfUENUVjI4MkUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLAlVU0JfUElEX0RJQkNPTV9TVEs3NzcwUCkgfSwKKy8qIDYwICoveyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsCVVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9UX1hYU18yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwgICAgVVNCX1BJRF9ESUJDT01fU1RLODA3WFBWUikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ESUJDT00sICAgIFVTQl9QSURfRElCQ09NX1NUSzgwN1hQKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1BJWEVMVklFVywgVVNCX1BJRF9QSVhFTFZJRVdfU0JUVkQpIH0sCiAJeyAwIH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRpYjA3MDBfdXNiX2lkX3RhYmxlKTsKQEAgLTE1NjUsNyArMTkyNSw3IEBACiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQkJeyAgICJMZWFkdGVrIFdpbmZhc3QgRFRWIERvbmdsZSAoU1RLNzcwMFAgYmFzZWQpIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs4XSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM0XSB9LAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzhdIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQkJeyAgICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIEV4cHJlc3MiLApAQCAtMTc2NCw2ICsyMTI0LDQxIEBACiAKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAorCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBzdGs3MDcwcF9mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWI3MDcwcF90dW5lcl9hdHRhY2gsCisKKwkJCQlESUIwNzAwX0RFRkFVTFRfU1RSRUFNSU5HX0NPTkZJRygweDAyKSwKKworCQkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJfSwKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDMsCisJCS5kZXZpY2VzID0geworCQkJeyAgICJQaW5uYWNsZSBQQ1RWIDczQSIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNTZdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJQaW5uYWNsZSBQQ1RWIDczZSBTRSIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNTddLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJQaW5uYWNsZSBQQ1RWIDI4MmUiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU4XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJfSwKKworCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yY19rZXlzKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CisKKwl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKKwogCQkubnVtX2FkYXB0ZXJzID0gMiwKIAkJLmFkYXB0ZXIgPSB7CiAJCQl7CkBAIC0xOTI3LDYgKzIzMjIsMTAyIEBACiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQl9LAorCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCisJCS5udW1fYWRhcHRlcnMgPSAxLAorCQkuYWRhcHRlciA9IHsKKwkJCXsKKwkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHN0azcwNzBwX2Zyb250ZW5kX2F0dGFjaCwKKwkJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYjc3NzBwX3R1bmVyX2F0dGFjaCwKKworCQkJCURJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKDB4MDIpLAorCisJCQkJLnNpemVfb2ZfcHJpdiA9CisJCQkJCXNpemVvZihzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCX0sCisJCX0sCisKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAyLAorCQkuZGV2aWNlcyA9IHsKKwkJCXsgICAiRGlCY29tIFNUSzc3NzBQIHJlZmVyZW5jZSBkZXNpZ24iLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU5XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBUIFVTQiBYWFMgKEhEKSIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzRdLCAmZGliMDcwMF91c2JfaWRfdGFibGVbNjBdIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQl9LAorCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yY19rZXlzKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CisJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCisJCS5udW1fYWRhcHRlcnMgPSAxLAorCQkuYWRhcHRlciA9IHsKKwkJCXsKKwkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHN0azgwN3hfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgID0gZGliODA3eF90dW5lcl9hdHRhY2gsCisKKwkJCQlESUIwNzAwX0RFRkFVTFRfU1RSRUFNSU5HX0NPTkZJRygweDAyKSwKKworCQkJCS5zaXplX29mX3ByaXYgPQorCQkJCQlzaXplb2Yoc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSksCisJCQl9LAorCQl9LAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkJLmRldmljZXMgPSB7CisJCQl7ICAgIkRpQmNvbSBTVEs4MDd4UCByZWZlcmVuY2UgZGVzaWduIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs2Ml0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAgIlByb2xpbmsgUGl4ZWx2aWV3IFNCVFZEIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs2M10sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCX0sCisKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCisJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCisJCS5udW1fYWRhcHRlcnMgPSAyLAorCQkuYWRhcHRlciA9IHsKKwkJCXsKKwkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHN0azgwN3hwdnJfZnJvbnRlbmRfYXR0YWNoMCwKKwkJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYjgwN3hfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisKKwkJCQkuc2l6ZV9vZl9wcml2ID0KKwkJCQkJc2l6ZW9mKHN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJCXsKKwkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHN0azgwN3hwdnJfZnJvbnRlbmRfYXR0YWNoMSwKKwkJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYjgwN3hfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMyksCisKKwkJCQkuc2l6ZV9vZl9wcml2ID0KKwkJCQkJc2l6ZW9mKHN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJfSwKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJCS5kZXZpY2VzID0geworCQkJeyAgICJEaUJjb20gU1RLODA3eFBWUiByZWZlcmVuY2UgZGVzaWduIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs2MV0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCX0sCisKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggMTg1YTUwNi4uYTU0OGMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtNDYsNiArNDYsNyBAQAogI2RlZmluZSBVU0JfVklEX01TSV8yCQkJCTB4MTQ2MgogI2RlZmluZSBVU0JfVklEX09QRVJBMQkJCQkweDY5NWMKICNkZWZpbmUgVVNCX1ZJRF9QSU5OQUNMRQkJCTB4MjMwNAorI2RlZmluZSBVU0JfVklEX1BJWEVMVklFVwkJCTB4MTU1NAogI2RlZmluZSBVU0JfVklEX1RFQ0hOT1RSRU5ECQkJMHgwYjQ4CiAjZGVmaW5lIFVTQl9WSURfVEVSUkFURUMJCQkweDBjY2QKICNkZWZpbmUgVVNCX1ZJRF9URUxFU1RBUgkJCTB4MTBiOQpAQCAtNTksNiArNjAsNyBAQAogI2RlZmluZSBVU0JfVklEX1lVQU4JCQkJMHgxMTY0CiAjZGVmaW5lIFVTQl9WSURfWFRFTlNJT05TCQkJMHgxYWU3CiAjZGVmaW5lIFVTQl9WSURfSFVNQVhfQ09FWAkJCTB4MTBiOQorI2RlZmluZSBVU0JfVklEXzc3NAkJCQkweDdhNjkKIAogLyogUHJvZHVjdCBJRHMgKi8KICNkZWZpbmUgVVNCX1BJRF9BRFNURUNIX1VTQjJfQ09MRAkJCTB4YTMzMwpAQCAtOTUsNyArOTcsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMF9VNzAwMAkJCTB4NzAwMQogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs3MDcwUAkJCQkweDFlYmMKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzA3MFBECQkJMHgxZWJlCisjZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzgwN1hQCQkJCTB4MWY5MAorI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs4MDdYUFZSCQkJMHgxZjk4CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX0FOQ0hPUl8yMTM1X0NPTEQJCQkweDIxMzEKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzc3MFAJCQkJMHgxZTgwCiAjZGVmaW5lIFVTQl9QSURfRFBPU0hfTTkyMDZfQ09MRAkJCTB4OTIwNgogI2RlZmluZSBVU0JfUElEX0RQT1NIX005MjA2X1dBUk0JCQkweGEwOTAKICNkZWZpbmUgVVNCX1BJRF9VTklXSUxMX1NUSzc3MDBQCQkJMHg2MDAzCkBAIC0xODQsNiArMTg5LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX0hUX0VYUFJFU1MJCTB4MDA2MAogI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9FWFBSRVNTCQkweDAwNjIKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfWFhTCQkJMHgwMDc4CisjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9UX1hYU18yCQkweDAwYWIKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19UMwkJCQkweDEwYTAKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19UNQkJCQkweDEwYTEKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9FWFBSRVNTQ0FSRF8zMjBDWAkJMHgwMjJlCkBAIC0xOTUsNiArMjAxLDEwIEBACiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczRQkJCTB4MDIzNwogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFCQkJMHgwMjNhCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjgwMUVfU0UJCQkweDAyM2IKKyNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzNBCQkJMHgwMjQzCisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczRVNFCQkJMHgwMjQ1CisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjI4MkUJCQkweDAyNDgKKyNkZWZpbmUgVVNCX1BJRF9QSVhFTFZJRVdfU0JUVkQJCQkJMHg1MDEwCiAjZGVmaW5lIFVTQl9QSURfUENUVl8yMDBFCQkJCTB4MDIwZQogI2RlZmluZSBVU0JfUElEX1BDVFZfNDAwRQkJCQkweDAyMGYKICNkZWZpbmUgVVNCX1BJRF9QQ1RWXzQ1MEUJCQkJMHgwMjIyCkBAIC0yNjUsNSArMjc1LDYgQEAKICNkZWZpbmUgVVNCX1BJRF9FTEdBVE9fRVlFVFZfRFRUX0RseAkJCTB4MDAyMAogI2RlZmluZSBVU0JfUElEX0RWQl9UX1VTQl9TVElDS19ISUdIX1NQRUVEX0NPTEQJCTB4NTAwMAogI2RlZmluZSBVU0JfUElEX0RWQl9UX1VTQl9TVElDS19ISUdIX1NQRUVEX1dBUk0JCTB4NTAwMQorI2RlZmluZSBVU0JfUElEX0ZSSUlPX1dISVRFCQkJCTB4MDAwMQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGRmZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jCkBAIC0wLDAgKzEsNDgzIEBACisvKiBEVkIgVVNCIGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZSBGcmlpbyBVU0IyLjAgSVNEQi1UIHJlY2VpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBa2loaXJvIFRzdWthZGEgPHRza2QyQHlhaG9vLmNvLmpwPgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGJhc2VkIG9mZiB0aGUgdGhlIGdsODYxIGFuZCB2cDcwMnggbW9kdWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJmcmlpby5oIgorCitzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKKwlzdHJ1Y3QgamR2YnQ5MDUwMl9jb25maWcgY29uZmlnOworfTsKKworLyogTk9URTogVEM5MDUwMiBoYXMgMTZiaXQgcmVnaXN0ZXItYWRkcmVzcz8gKi8KKy8qIHJlZ2lzdGVyIDB4MDEwMCBpcyB1c2VkIGZvciByZWFkaW5nIFBMTCBzdGF0dXMsIHNvIHJlZyBpcyB1MTYgaGVyZSAqLworc3RhdGljIGludCBqZHZidDkwNTAyX3JlZ19yZWFkKHN0cnVjdCBqZHZidDkwNTAyX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBjb25zdCB1MTYgcmVnLCB1OCAqYnVmLCBjb25zdCBzaXplX3QgY291bnQpCit7CisJaW50IHJldDsKKwl1OCB3YnVmWzNdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXTsKKworCXdidWZbMF0gPSByZWcgJiAweEZGOworCXdidWZbMV0gPSAwOworCXdidWZbMl0gPSByZWcgPj4gODsKKworCW1zZ1swXS5hZGRyID0gc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzOworCW1zZ1swXS5mbGFncyA9IDA7CisJbXNnWzBdLmJ1ZiA9IHdidWY7CisJbXNnWzBdLmxlbiA9IHNpemVvZih3YnVmKTsKKworCW1zZ1sxXS5hZGRyID0gbXNnWzBdLmFkZHI7CisJbXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnWzFdLmJ1ZiA9IGJ1ZjsKKwltc2dbMV0ubGVuID0gY291bnQ7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGViX2ZlKCIgcmVnIHJlYWQgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogY3VycmVudGx5IDE2Yml0IHJlZ2lzdGVyLWFkZHJlc3MgaXMgbm90IHVzZWQsIHNvIHJlZyBpcyB1OCBoZXJlICovCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfc2luZ2xlX3JlZ193cml0ZShzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIGNvbnN0IHU4IHJlZywgY29uc3QgdTggdmFsKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwl1OCB3YnVmWzJdOworCisJd2J1ZlswXSA9IHJlZzsKKwl3YnVmWzFdID0gdmFsOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3M7CisJbXNnLmZsYWdzID0gMDsKKwltc2cuYnVmID0gd2J1ZjsKKwltc2cubGVuID0gc2l6ZW9mKHdidWYpOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CisJCWRlYl9mZSgiIHJlZyB3cml0ZSBmYWlsZWQuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfamR2YnQ5MDUwMl93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgZXJyLCBpOworCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHsKKwkJZXJyID0gamR2YnQ5MDUwMl9zaW5nbGVfcmVnX3dyaXRlKHN0YXRlLAorCQkJCQkJICBidWZbMF0gKyBpLCBidWZbaSArIDFdKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHJlYWQgcGxsIHN0YXR1cyBieXRlIHZpYSB0aGUgZGVtb2R1bGF0b3IncyBJMkMgcmVnaXN0ZXIgKi8KKy8qIG5vdGU6IFdpbiBib3ggcmVhZHMgaXQgYnkgOEIgYmxvY2sgYXQgdGhlIEkyQyBhZGRyIDB4MzAgZnJvbSByZWc6MHg4MCAqLworc3RhdGljIGludCBqZHZidDkwNTAyX3BsbF9yZWFkKHN0cnVjdCBqZHZidDkwNTAyX3N0YXRlICpzdGF0ZSwgdTggKnJlc3VsdCkKK3sKKwlpbnQgcmV0OworCisJLyogKzEgZm9yIHJlYWRpbmcgKi8KKwl1OCBwbGxfYWRkcl9ieXRlID0gKHN0YXRlLT5jb25maWcucGxsX2FkZHJlc3MgPDwgMSkgKyAxOworCisJKnJlc3VsdCA9IDA7CisKKwlyZXQgPSBqZHZidDkwNTAyX3NpbmdsZV9yZWdfd3JpdGUoc3RhdGUsIEpEVkJUOTA1MDJfMk5EX0kyQ19SRUcsCisJCQkJCSAgcGxsX2FkZHJfYnl0ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IGpkdmJ0OTA1MDJfcmVnX3JlYWQoc3RhdGUsIDB4MDEwMCwgcmVzdWx0LCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJZGViX2ZlKCJQTEwgcmVhZCB2YWw6JTAyeFxuIiwgKnJlc3VsdCk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWRlYl9mZSgiJXM6cmV0ID09ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gLUVSRU1PVEVJTzsKK30KKworCisvKiBzZXQgcGxsIGZyZXF1ZW5jeSB2aWEgdGhlIGRlbW9kdWxhdG9yJ3MgSTJDIHJlZ2lzdGVyICovCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfcGxsX3NldF9mcmVxKHN0cnVjdCBqZHZidDkwNTAyX3N0YXRlICpzdGF0ZSwgdTMyIGZyZXEpCit7CisJaW50IHJldDsKKwlpbnQgcmV0cnk7CisJdTggcmVzMTsKKwl1OCByZXMyWzldOworCisJdTggcGxsX2ZyZXFfY21kW1BMTF9DTURfTEVOXTsKKwl1OCBwbGxfYWdjX2NtZFtQTExfQ01EX0xFTl07CisJc3RydWN0IGkyY19tc2cgbXNnWzJdOworCXUzMiBmOworCisJZGViX2ZlKCIlczogZnJlcT0lZCwgc3RlcD0lZFxuIiwgX19mdW5jX18sIGZyZXEsCisJICAgICAgIHN0YXRlLT5mcm9udGVuZC5vcHMuaW5mby5mcmVxdWVuY3lfc3RlcHNpemUpOworCS8qIGZyZXEgLT4gb3NjaWxhdG9yIGZyZXF1ZW5jeSBjb252ZXJzaW9uLiAqLworCS8qIGZyZXE6IDQ3MywwMDAsMDAwICsgbio2LDAwMCwwMDAgKG5vIDEvN01IeiBzaGlmdCB0byBjZW50ZXIgZnJlcSkgKi8KKwkvKiBhZGQgNDAwWzEvNyBNSFpdID0gNTcuMTQyODU3TUh6LiAgIDU3TUh6IGZvciB0aGUgSUYsICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLzdNSHogZm9yIGNlbnRlciBmcmVxIHNoaWZ0ICovCisJZiA9IGZyZXEgLyBzdGF0ZS0+ZnJvbnRlbmQub3BzLmluZm8uZnJlcXVlbmN5X3N0ZXBzaXplOworCWYgKz0gNDAwOworCXBsbF9mcmVxX2NtZFtERU1PRF9SRURJUkVDVF9SRUddID0gSkRWQlQ5MDUwMl8yTkRfSTJDX1JFRzsgLyogMHhGRSAqLworCXBsbF9mcmVxX2NtZFtBRERSRVNTX0JZVEVdID0gc3RhdGUtPmNvbmZpZy5wbGxfYWRkcmVzcyA8PCAxOworCXBsbF9mcmVxX2NtZFtESVZJREVSX0JZVEUxXSA9IChmID4+IDgpICYgMHg3RjsKKwlwbGxfZnJlcV9jbWRbRElWSURFUl9CWVRFMl0gPSBmICYgMHhGRjsKKwlwbGxfZnJlcV9jbWRbQ09OVFJPTF9CWVRFXSA9IDB4QjI7IC8qIHJlZi5kaXZpZGVyOjI4LCA0TUh6LzI4PTEvN01IeiAqLworCXBsbF9mcmVxX2NtZFtCQU5EU1dJVENIX0JZVEVdID0gMHgwODsJLyogVUhGIGJhbmQgKi8KKworCW1zZ1swXS5hZGRyID0gc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzOworCW1zZ1swXS5mbGFncyA9IDA7CisJbXNnWzBdLmJ1ZiA9IHBsbF9mcmVxX2NtZDsKKwltc2dbMF0ubGVuID0gc2l6ZW9mKHBsbF9mcmVxX2NtZCk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZ1swXSwgMSk7CisJaWYgKHJldCAhPSAxKQorCQlnb3RvIGVycm9yOworCisJdWRlbGF5KDUwKTsKKworCXBsbF9hZ2NfY21kW0RFTU9EX1JFRElSRUNUX1JFR10gPSBwbGxfZnJlcV9jbWRbREVNT0RfUkVESVJFQ1RfUkVHXTsKKwlwbGxfYWdjX2NtZFtBRERSRVNTX0JZVEVdID0gcGxsX2ZyZXFfY21kW0FERFJFU1NfQllURV07CisJcGxsX2FnY19jbWRbRElWSURFUl9CWVRFMV0gPSBwbGxfZnJlcV9jbWRbRElWSURFUl9CWVRFMV07CisJcGxsX2FnY19jbWRbRElWSURFUl9CWVRFMl0gPSBwbGxfZnJlcV9jbWRbRElWSURFUl9CWVRFMl07CisJcGxsX2FnY19jbWRbQ09OVFJPTF9CWVRFXSA9IDB4OUE7IC8qICBBR0NfQ1RSTCBpbnN0ZWFkIG9mIEJBTkRTV0lUQ0ggKi8KKwlwbGxfYWdjX2NtZFtBR0NfQ1RSTF9CWVRFXSA9IDB4NTA7CisJLyogQUdDIFRpbWUgQ29uc3RhbnQgMnMsIEFHQyB0YWtlLW92ZXIgcG9pbnQ6MTAzZEJ1Vihsb3dlc3QpICovCisKKwltc2dbMV0uYWRkciA9IG1zZ1swXS5hZGRyOworCW1zZ1sxXS5mbGFncyA9IDA7CisJbXNnWzFdLmJ1ZiA9IHBsbF9hZ2NfY21kOworCW1zZ1sxXS5sZW4gPSBzaXplb2YocGxsX2FnY19jbWQpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2dbMV0sIDEpOworCWlmIChyZXQgIT0gMSkKKwkJZ290byBlcnJvcjsKKworCS8qIEkgZG9uJ3Qga25vdyB3aGF0IHRoZXNlIGNtZHMgYXJlIGZvciwgICovCisJLyogYnV0IHRoZSBVU0IgbG9nIG9uIGEgd2luZG93cyBib3ggY29udGFpbnMgdGhlbSAqLworCXJldCA9IGpkdmJ0OTA1MDJfc2luZ2xlX3JlZ193cml0ZShzdGF0ZSwgMHgwMSwgMHg0MCk7CisJcmV0IHw9IGpkdmJ0OTA1MDJfc2luZ2xlX3JlZ193cml0ZShzdGF0ZSwgMHgwMSwgMHgwMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwl1ZGVsYXkoMTAwKTsKKworCS8qIHdhaXQgZm9yIHRoZSBkZW1vZCB0byBiZSByZWFkeT8gKi8KKyNkZWZpbmUgUkVUUllfQ09VTlQgNQorCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IFJFVFJZX0NPVU5UOyByZXRyeSsrKSB7CisJCXJldCA9IGpkdmJ0OTA1MDJfcmVnX3JlYWQoc3RhdGUsIDB4MDA5NiwgJnJlczEsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJLyogaWYgKHJlczEgIT0gMHgwMCkgZ290byBlcnJvcjsgKi8KKwkJcmV0ID0gamR2YnQ5MDUwMl9yZWdfcmVhZChzdGF0ZSwgMHgwMEIwLCByZXMyLCBzaXplb2YocmVzMikpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJaWYgKHJlczJbMF0gPj0gMHhBNykKKwkJCWJyZWFrOworCQltc2xlZXAoMTAwKTsKKwl9CisJaWYgKHJldHJ5ID49IFJFVFJZX0NPVU5UKSB7CisJCWRlYl9mZSgiJXM6IEZFIGRvZXMgbm90IGdldCByZWFkeSBhZnRlciBmcmVxIHNldHRpbmcuXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycm9yOgorCWRlYl9mZSgiJXM6cmV0ID09ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gLUVSRU1PVEVJTzsKK30KKworc3RhdGljIGludCBqZHZidDkwNTAyX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdGUpCit7CisJdTggcmVzdWx0OworCWludCByZXQ7CisKKwkqc3RhdGUgPSBGRV9IQVNfU0lHTkFMOworCisJcmV0ID0gamR2YnQ5MDUwMl9wbGxfcmVhZChmZS0+ZGVtb2R1bGF0b3JfcHJpdiwgJnJlc3VsdCk7CisJaWYgKHJldCkgeworCQlkZWJfZmUoIiVzOnJldCA9PSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCSpzdGF0ZSA9IEZFX0hBU19TSUdOQUwKKwkJfCBGRV9IQVNfQ0FSUklFUgorCQl8IEZFX0hBU19WSVRFUkJJCisJCXwgRkVfSEFTX1NZTkM7CisKKwlpZiAocmVzdWx0ICYgUExMX1NUQVRVU19MT0NLRUQpCisJCSpzdGF0ZSB8PSBGRV9IQVNfTE9DSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCSpiZXIgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCSAgIHUxNiAqc3RyZW5ndGgpCit7CisJaW50IHJldDsKKwl1OCByYnVmWzM3XTsKKworCSpzdHJlbmd0aCA9IDA7CisKKwkvKiBzdGF0dXMgcmVnaXN0ZXIgKGluY2wuIHNpZ25hbCBzdHJlbmd0aCkgOiAweDg5ICAqLworCS8qIFRPRE86IHJlYWQganVzdCB0aGUgbmVjZXNzYXJ5IHJlZ2lzdGVycyBbMHg4Qi4uMHg4RF0/ICovCisJcmV0ID0gamR2YnQ5MDUwMl9yZWdfcmVhZChmZS0+ZGVtb2R1bGF0b3JfcHJpdiwgMHgwMDg5LAorCQkJCSAgcmJ1Ziwgc2l6ZW9mKHJidWYpKTsKKworCWlmIChyZXQpIHsKKwkJZGViX2ZlKCIlczpyZXQgPT0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwkvKiBzaWduYWxfc3RyZW5ndGg6IHJidWZbMi00XSAoMjRiaXQgQkUpLCB1c2UgbG93ZXIgMTZiaXQgZm9yIG5vdy4gKi8KKwkqc3RyZW5ndGggPSAocmJ1ZlszXSA8PCA4KSArIHJidWZbNF07CisJaWYgKHJidWZbMl0pCisJCSpzdHJlbmd0aCA9IDB4ZmZmZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCSpzbnIgPSAweDAxMDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQoreworCSp1Y2Jsb2NrcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICpmcykKK3sKKwlmcy0+bWluX2RlbGF5X21zID0gNTAwOworCWZzLT5zdGVwX3NpemUgPSAwOworCWZzLT5tYXhfZHJpZnQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgamR2YnQ5MDUwMl9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXAtPmludmVyc2lvbiA9IElOVkVSU0lPTl9BVVRPOworCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfNl9NSFo7CisJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ19BVVRPOworCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsKKwlwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV82NDsKKwlwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOworCXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMX0FVVE87CisJcC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9BVVRPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpkdmJ0OTA1MDJfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwkvKioKKwkgKiBOT1RFOiBpZ25vcmUgYWxsIHRoZSBwYXJhbXRlcnMgZXhjZXB0IGZyZXF1ZW5jeS4KKwkgKiAgICAgICBvdGhlcnMgc2hvdWxkIGJlIGZpeGVkIHRvIHRoZSBwcm9wZXIgdmFsdWUgZm9yIElTREItVCwKKwkgKiAgICAgICBidXQgZG9uJ3QgY2hlY2sgaGVyZS4KKwkgKi8KKworCXN0cnVjdCBqZHZidDkwNTAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisKKwlkZWJfZmUoIiVzOiBGcmVxOiVkXG4iLCBfX2Z1bmNfXywgcC0+ZnJlcXVlbmN5KTsKKworCXJldCA9IGpkdmJ0OTA1MDJfcGxsX3NldF9mcmVxKHN0YXRlLCBwLT5mcmVxdWVuY3kpOworCWlmIChyZXQpIHsKKwkJZGViX2ZlKCIlczpyZXQgPT0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqZHZidDkwNTAyX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWRlYl9mZSgiJXMgY2FsbGVkLlxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCisKKy8qKgorICogKHJlZywgdmFsKSBjb21tYWQgbGlzdCB0byBpbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICogIGNhcHR1cmVkIG9uIGEgV2luZG93cyBib3guCisgKi8KK3N0YXRpYyB1OCBpbml0X2NvZGVbXVsyXSA9IHsKKwl7MHgwMSwgMHg0MH0sCisJezB4MDQsIDB4Mzh9LAorCXsweDA1LCAweDQwfSwKKwl7MHgwNywgMHg0MH0sCisJezB4MEYsIDB4NEZ9LAorCXsweDExLCAweDIxfSwKKwl7MHgxMiwgMHgwQn0sCisJezB4MTMsIDB4MkZ9LAorCXsweDE0LCAweDMxfSwKKwl7MHgxNiwgMHgwMn0sCisJezB4MjEsIDB4QzR9LAorCXsweDIyLCAweDIwfSwKKwl7MHgyQywgMHg3OX0sCisJezB4MkQsIDB4MzR9LAorCXsweDJGLCAweDAwfSwKKwl7MHgzMCwgMHgyOH0sCisJezB4MzEsIDB4MzF9LAorCXsweDMyLCAweERGfSwKKwl7MHgzOCwgMHgwMX0sCisJezB4MzksIDB4Nzh9LAorCXsweDNCLCAweDMzfSwKKwl7MHgzQywgMHgzM30sCisJezB4NDgsIDB4OTB9LAorCXsweDUxLCAweDY4fSwKKwl7MHg1RSwgMHgzOH0sCisJezB4NzEsIDB4MDB9LAorCXsweDcyLCAweDA4fSwKKwl7MHg3NywgMHgwMH0sCisJezB4QzAsIDB4MjF9LAorCXsweEMxLCAweDEwfSwKKwl7MHhFNCwgMHgxQX0sCisJezB4RUEsIDB4MUZ9LAorCXsweDc3LCAweDAwfSwKKwl7MHg3MSwgMHgwMH0sCisJezB4NzEsIDB4MDB9LAorCXsweDc2LCAweDBDfSwKK307CisKK2NvbnN0IHN0YXRpYyBpbnQgaW5pdF9jb2RlX2xlbiA9IHNpemVvZihpbml0X2NvZGUpIC8gc2l6ZW9mKHU4WzJdKTsKKworc3RhdGljIGludCBqZHZidDkwNTAyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJaW50IGkgPSAtMTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCXN0cnVjdCBqZHZidDkwNTAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZGViX2ZlKCIlcyBjYWxsZWQuXG4iLCBfX2Z1bmNfXyk7CisKKwltc2cuYWRkciA9IHN0YXRlLT5jb25maWcuZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSAyOworCWZvciAoaSA9IDA7IGkgPCBpbml0X2NvZGVfbGVuOyBpKyspIHsKKwkJbXNnLmJ1ZiA9IGluaXRfY29kZVtpXTsKKwkJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCQlpZiAocmV0ICE9IDEpCisJCQlnb3RvIGVycm9yOworCX0KKwltc2xlZXAoMTAwKTsKKworCXJldHVybiAwOworCitlcnJvcjoKKwlkZWJfZmUoIiVzOiBpbml0X2NvZGVbJWRdIGZhaWxlZC4gcmV0PT0lZFxuIiwgX19mdW5jX18sIGksIHJldCk7CisJcmV0dXJuIC1FUkVNT1RFSU87Cit9CisKKworc3RhdGljIHZvaWQgamR2YnQ5MDUwMl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBqZHZidDkwNTAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWtmcmVlKHN0YXRlKTsKK30KKworCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgamR2YnQ5MDUwMl9vcHM7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmpkdmJ0OTA1MDJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCisJZGViX2luZm8oIiVzIGNhbGxlZC5cbiIsIF9fZnVuY19fKTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgamR2YnQ5MDUwMl9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJc3RhdGUtPmkyYyA9ICZkLT5pMmNfYWRhcDsKKwltZW1jcHkoJnN0YXRlLT5jb25maWcsICZmcmlpb19mZV9jb25maWcsIHNpemVvZihmcmlpb19mZV9jb25maWcpKTsKKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZqZHZidDkwNTAyX29wcywKKwkgICAgICAgc2l6ZW9mKGpkdmJ0OTA1MDJfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCWlmIChqZHZidDkwNTAyX2luaXQoJnN0YXRlLT5mcm9udGVuZCkgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGpkdmJ0OTA1MDJfb3BzID0geworCisJLmluZm8gPSB7CisJCS5uYW1lCQkJPSAiQ29tdGVjaCBKRFZCVDkwNTAyIElTREItVCIsCisJCS50eXBlCQkJPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbgkJPSA0NzMwMDAwMDAsIC8qIFVIRiAxM2NoLCBjZW50ZXIgKi8KKwkJLmZyZXF1ZW5jeV9tYXgJCT0gNzY3MTQyODU3LCAvKiBVSEYgNjJjaCwgY2VudGVyICovCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJPSBKRFZCVDkwNTAyX1BMTF9DTEsgLworCQkJCQkJCUpEVkJUOTA1MDJfUExMX0RJVklERVIsCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKKworCQkvKiBOT1RFOiB0aGlzIGRyaXZlciBpZ25vcmVzIGFsbCBwYXJhbWV0ZXJzIGJ1dCBmcmVxdWVuY3kuICovCisJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKKwkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCQlGRV9DQU5fRkVDXzRfNSB8IEZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ182XzcgfAorCQkJRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDXzhfOSB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8CisJCQlGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8CisJCQlGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTyB8CisJCQlGRV9DQU5fSElFUkFSQ0hZX0FVVE8sCisJfSwKKworCS5yZWxlYXNlID0gamR2YnQ5MDUwMl9yZWxlYXNlLAorCisJLmluaXQgPSBqZHZidDkwNTAyX2luaXQsCisJLnNsZWVwID0gamR2YnQ5MDUwMl9zbGVlcCwKKwkud3JpdGUgPSBfamR2YnQ5MDUwMl93cml0ZSwKKworCS5zZXRfZnJvbnRlbmQgPSBqZHZidDkwNTAyX3NldF9mcm9udGVuZCwKKwkuZ2V0X2Zyb250ZW5kID0gamR2YnQ5MDUwMl9nZXRfZnJvbnRlbmQsCisJLmdldF90dW5lX3NldHRpbmdzID0gamR2YnQ5MDUwMl9nZXRfdHVuZV9zZXR0aW5ncywKKworCS5yZWFkX3N0YXR1cyA9IGpkdmJ0OTA1MDJfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gamR2YnQ5MDUwMl9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBqZHZidDkwNTAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IGpkdmJ0OTA1MDJfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgPSBqZHZidDkwNTAyX3JlYWRfdWNibG9ja3MsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTY1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qIERWQiBVU0IgY29tcGxpYW50IExpbnV4IGRyaXZlciBmb3IgdGhlIEZyaWlvIFVTQjIuMCBJU0RCLVQgcmVjZWl2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFraWhpcm8gVHN1a2FkYSA8dHNrZDJAeWFob28uY28uanA+CisgKgorICogVGhpcyBtb2R1bGUgaXMgYmFzZWQgb2ZmIHRoZSB0aGUgZ2w4NjEgYW5kIHZwNzAyeCBtb2R1bGVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCisjaW5jbHVkZSAiZnJpaW8uaCIKKworLyogZGVidWcgKi8KK2ludCBkdmJfdXNiX2ZyaWlvX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2ZyaWlvX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKwkJICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8sMj14ZmVyLDQ9cmMsOD1mZSAob3ItYWJsZSkpLiIKKwkJIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKKy8qKgorICogSW5kaXJlY3QgSTJDIGFjY2VzcyB0byB0aGUgUExMIHZpYSBGRS4KKyAqIHdob2xlIEkyQyBwcm90b2NvbCBkYXRhIHRvIHRoZSBQTEwgaXMgc2VudCB2aWEgdGhlIEZFJ3MgSTJDIHJlZ2lzdGVyLgorICogVGhpcyBpcyBkb25lIGJ5IGEgY29udHJvbCBtc2cgdG8gdGhlIEZFIHdpdGggdGhlIEkyQyBkYXRhIGFjY29tcGFuaWVkLCBhbmQKKyAqIGEgc3BlY2lmaWMgVVNCIHJlcXVlc3QgbnVtYmVyIGlzIGFzc2lnbmVkIGZvciB0aGF0IHB1cnBvc2UuCisgKgorICogdGhpcyBmdW5jIHNlbmRzIHdidWZbMS4uXSB0byB0aGUgSTJDIHJlZ2lzdGVyIHdidWZbMF0gYXQgYWRkciAoPSBhdCBGRSkuCisgKiBUT0RPOiByZWZvY3RvcmVkLCBzbWFydGVyIGkyYyBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZ2w4NjFfaTJjX2N0cmxtc2dfZGF0YShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGFkZHIsCisJCQkJICB1OCAqd2J1ZiwgdTE2IHdsZW4sIHU4ICpyYnVmLCB1MTYgcmxlbikKK3sKKwl1MTYgaW5kZXggPSB3YnVmWzBdOwkvKiBtdXN0IGJlIEpEVkJUOTA1MDJfMk5EX0kyQ19SRUcoPTB4RkUpICovCisJdTE2IHZhbHVlID0gYWRkciA8PCAoOCArIDEpOworCWludCB3byA9IChyYnVmID09IE5VTEwgfHwgcmxlbiA9PSAwKTsJLyogd3JpdGUgb25seSAqLworCXU4IHJlcSwgdHlwZTsKKworCWRlYl94ZmVyKCJ3cml0ZSB0byBQTEw6MHglMDJ4IHZpYSBGRSByZWc6MHglMDJ4LCBsZW46JWRcbiIsCisJCSB3YnVmWzFdLCB3YnVmWzBdLCB3bGVuIC0gMSk7CisKKwlpZiAod28gJiYgd2xlbiA+PSAyKSB7CisJCXJlcSA9IEdMODYxX1JFUV9JMkNfREFUQV9DVFJMX1dSSVRFOworCQl0eXBlID0gR0w4NjFfV1JJVEU7CisJCXVkZWxheSgyMCk7CisJCXJldHVybiB1c2JfY29udHJvbF9tc2coZC0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJCSAgICAgICByZXEsIHR5cGUsIHZhbHVlLCBpbmRleCwKKwkJCQkgICAgICAgJndidWZbMV0sIHdsZW4gLSAxLCAyMDAwKTsKKwl9CisKKwlkZWJfeGZlcigibm90IHN1cHBvcnRlZCBjdHJsLW1zZywgYWJvcnRpbmcuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIG5vcm1hbCBJMkMgYWNjZXNzICh3aXRob3V0IGV4dHJhIGRhdGEgYXJndW1lbnRzKS4KKyAqIHdyaXRlIHRvIHRoZSByZWdpc3RlciB3YnVmWzBdIGF0IEkyQyBhZGRyZXNzIGFkZHIgd2l0aCB0aGUgdmFsdWUgd2J1ZlsxXSwKKyAqICBvciByZWFkIGZyb20gdGhlIHJlZ2lzdGVyIHdidWZbMF0uCisgKiByZWdpc3RlciBhZGRyZXNzIGNhbiBiZSAxNmJpdCAod2J1ZlsyXTw8OCB8IHdidWZbMF0pIGlmIHdsZW49PTMKKyAqLworc3RhdGljIGludCBnbDg2MV9pMmNfbXNnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggYWRkciwKKwkJCSB1OCAqd2J1ZiwgdTE2IHdsZW4sIHU4ICpyYnVmLCB1MTYgcmxlbikKK3sKKwl1MTYgaW5kZXg7CisJdTE2IHZhbHVlID0gYWRkciA8PCAoOCArIDEpOworCWludCB3byA9IChyYnVmID09IE5VTEwgfHwgcmxlbiA9PSAwKTsJLyogd3JpdGUtb25seSAqLworCXU4IHJlcSwgdHlwZTsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKworCS8qIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGluZGlyZWN0IEkyQyBhY2Nlc3MgdG8gdGhlIFBMTCB2aWEgRkUsICovCisJaWYgKGFkZHIgPT0gZnJpaW9fZmVfY29uZmlnLmRlbW9kX2FkZHJlc3MgJiYKKwkgICAgd2J1ZlswXSA9PSBKRFZCVDkwNTAyXzJORF9JMkNfUkVHKQorCQlyZXR1cm4gZ2w4NjFfaTJjX2N0cmxtc2dfZGF0YShkLCBhZGRyLCB3YnVmLCB3bGVuLCByYnVmLCBybGVuKTsKKworCWlmICh3bykgeworCQlyZXEgPSBHTDg2MV9SRVFfSTJDX1dSSVRFOworCQl0eXBlID0gR0w4NjFfV1JJVEU7CisJCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCk7CisJfSBlbHNlIHsJCS8qIHJ3ICovCisJCXJlcSA9IEdMODYxX1JFUV9JMkNfUkVBRDsKKwkJdHlwZSA9IEdMODYxX1JFQUQ7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwgMCk7CisJfQorCisJc3dpdGNoICh3bGVuKSB7CisJY2FzZSAxOgorCQlpbmRleCA9IHdidWZbMF07CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaW5kZXggPSB3YnVmWzBdOworCQl2YWx1ZSA9IHZhbHVlICsgd2J1ZlsxXTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkvKiBzcGVjaWFsIGNhc2UgZm9yIDE2Yml0IHJlZ2lzdGVyLWFkZHJlc3MgKi8KKwkJaW5kZXggPSAod2J1ZlsyXSA8PCA4KSB8IHdidWZbMF07CisJCXZhbHVlID0gdmFsdWUgKyB3YnVmWzFdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZWJfeGZlcigid2xlbiA9ICV4LCBhYm9ydGluZy4iLCB3bGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW1zbGVlcCgxKTsKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsIHBpcGUsIHJlcSwgdHlwZSwKKwkJCSAgICAgICB2YWx1ZSwgaW5kZXgsIHJidWYsIHJsZW4sIDIwMDApOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgZ2w4NjFfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwKKwkJCSAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCBpOworCisKKwlpZiAobnVtID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJLyogd3JpdGUvcmVhZCByZXF1ZXN0ICovCisJCWlmIChpICsgMSA8IG51bSAmJiAobXNnW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJaWYgKGdsODYxX2kyY19tc2coZCwgbXNnW2ldLmFkZHIsCisJCQkJCSAgbXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbiwKKwkJCQkJICBtc2dbaSArIDFdLmJ1ZiwgbXNnW2kgKyAxXS5sZW4pIDwgMCkKKwkJCQlicmVhazsKKwkJCWkrKzsKKwkJfSBlbHNlCisJCQlpZiAoZ2w4NjFfaTJjX21zZyhkLCBtc2dbaV0uYWRkciwgbXNnW2ldLmJ1ZiwKKwkJCQkJICBtc2dbaV0ubGVuLCBOVUxMLCAwKSA8IDApCisJCQkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdTMyIGdsODYxX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCisKK3N0YXRpYyBpbnQgZnJpaW9fZXh0X2N0bChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLAorCQkJIHUzMiBzYXRfY29sb3IsIGludCBsbmJfb24pCit7CisJaW50IGk7CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJdTggYnVmWzJdOworCXUzMiBtYXNrOworCXU4IGxuYiA9IChsbmJfb24pID8gRlJJSU9fQ1RMX0xOQiA6IDA7CisKKwltc2cuYWRkciA9IDB4MDA7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gMjsKKwltc2cuYnVmID0gYnVmOworCisJYnVmWzBdID0gMHgwMDsKKworCS8qIHNlbmQgMmJpdCBoZWFkZXIgKCZCMTApICovCisJYnVmWzFdID0gbG5iIHwgRlJJSU9fQ1RMX0xFRCB8IEZSSUlPX0NUTF9TVFJPQkU7CisJcmV0ID0gZ2w4NjFfaTJjX3hmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCWJ1ZlsxXSB8PSBGUklJT19DVExfQ0xLOworCXJldCArPSBnbDg2MV9pMmNfeGZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwlidWZbMV0gPSBsbmIgfCBGUklJT19DVExfU1RST0JFOworCXJldCArPSBnbDg2MV9pMmNfeGZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJYnVmWzFdIHw9IEZSSUlPX0NUTF9DTEs7CisJcmV0ICs9IGdsODYxX2kyY194ZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKworCS8qIHNlbmQgMzJiaXQoc2F0dXIsIFIsIEcsIEIpIGRhdGEgaW4gc2VyaWFsICovCisJbWFzayA9IDEgPDwgMzE7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJYnVmWzFdID0gbG5iIHwgRlJJSU9fQ1RMX1NUUk9CRTsKKwkJaWYgKHNhdF9jb2xvciAmIG1hc2spCisJCQlidWZbMV0gfD0gRlJJSU9fQ1RMX0xFRDsKKwkJcmV0ICs9IGdsODYxX2kyY194ZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwkJYnVmWzFdIHw9IEZSSUlPX0NUTF9DTEs7CisJCXJldCArPSBnbDg2MV9pMmNfeGZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCW1hc2sgPj49IDE7CisJfQorCisJLyogc2V0IHRoZSBzdHJvYmUgb2ZmICovCisJYnVmWzFdID0gbG5iOworCXJldCArPSBnbDg2MV9pMmNfeGZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJYnVmWzFdIHw9IEZSSUlPX0NUTF9DTEs7CisJcmV0ICs9IGdsODYxX2kyY194ZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKworCXJldHVybiAocmV0ID09IDcwKTsKK30KKworCitzdGF0aWMgaW50IGZyaWlvX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZik7CisKKy8qIFRPRE86IG1vdmUgdGhlc2UgaW5pdCBjbWRzIHRvIHRoZSBGRSdzIGluaXQgcm91dGluZT8gKi8KK3N0YXRpYyB1OCBzdHJlYW1pbmdfaW5pdF9jbWRzW11bMl0gPSB7CisJezB4MzMsIDB4MDh9LAorCXsweDM3LCAweDQwfSwKKwl7MHgzQSwgMHgxRn0sCisJezB4M0IsIDB4RkZ9LAorCXsweDNDLCAweDFGfSwKKwl7MHgzRCwgMHhGRn0sCisJezB4MzgsIDB4MDB9LAorCXsweDM1LCAweDAwfSwKKwl7MHgzOSwgMHgwMH0sCisJezB4MzYsIDB4MDB9LAorfTsKK3N0YXRpYyBpbnQgY21kbGVuID0gc2l6ZW9mKHN0cmVhbWluZ19pbml0X2NtZHMpIC8gMjsKKworLyoKKyAqIENvbW1hbmQgc2VxdWVuY2UgaW4gdGhpcyBpbml0IGZ1bmN0aW9uIGlzIGEgcmVwbGF5CisgKiAgb2YgdGhlIGNhcHR1cmVkIFVTQiBjb21tYW5kcyBmcm9tIHRoZSBXaW5kb3dzIHByb3ByaWV0YXJ5IGRyaXZlci4KKyAqLworc3RhdGljIGludCBmcmlpb19pbml0aWFsaXplKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCWludCByZXRyeSA9IDA7CisJdTggcmJ1ZlsyXTsKKwl1OCB3YnVmWzNdOworCisJZGViX2luZm8oIiVzIGNhbGxlZC5cbiIsIF9fZnVuY19fKTsKKworCS8qIHVzZSBnbDg2MV9pMmNfbXNnIGluc3RlYWQgb2YgZ2w4NjFfaTJjX3hmZXIoKSwgKi8KKwkvKiBiZWNhdXNlIHRoZSBpMmMgZGV2aWNlIGlzIG5vdCBzZXQgdXAgeWV0LiAqLworCXdidWZbMF0gPSAweDExOworCXdidWZbMV0gPSAweDAyOworCXJldCA9IGdsODYxX2kyY19tc2coZCwgMHgwMCwgd2J1ZiwgMiwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisJbXNsZWVwKDIpOworCisJd2J1ZlswXSA9IDB4MTE7CisJd2J1ZlsxXSA9IDB4MDA7CisJcmV0ID0gZ2w4NjFfaTJjX21zZyhkLCAweDAwLCB3YnVmLCAyLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKwltc2xlZXAoMSk7CisKKwkvKiBmb2xsb3dpbmcgbXNncyBzaG91bGQgYmUgaW4gdGhlIEZFJ3MgaW5pdCBjb2RlPyAqLworCS8qIGNtZCBzZXF1ZW5jZSB0byBpZGVudGlmeSB0aGUgZGV2aWNlIHR5cGU/IChmcmlpbyBibGFjay93aGl0ZSkgKi8KKwl3YnVmWzBdID0gMHgwMzsKKwl3YnVmWzFdID0gMHg4MDsKKwkvKiBjYW4ndCB1c2UgZ2w4NjFfaTJjX2NtZCwgYXMgdGhlIHJlZ2lzdGVyLWFkZHIgaXMgMTZiaXQoMHgwMTAwKSAqLworCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCksCisJCQkgICAgICBHTDg2MV9SRVFfSTJDX0RBVEFfQ1RSTF9XUklURSwgR0w4NjFfV1JJVEUsCisJCQkgICAgICAweDEyMDAsIDB4MDEwMCwgd2J1ZiwgMiwgMjAwMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwltc2xlZXAoMik7CisJd2J1ZlswXSA9IDB4MDA7CisJd2J1ZlsyXSA9IDB4MDE7CQkvKiByZWcuMHgwMTAwICovCisJd2J1ZlsxXSA9IDB4MDA7CisJcmV0ID0gZ2w4NjFfaTJjX21zZyhkLCAweDEyID4+IDEsIHdidWYsIDMsIHJidWYsIDIpOworCS8qIG15IEZyaWlvIFdoaXRlIHJldHVybnMgMHhmZmZmLiAqLworCWlmIChyZXQgPCAwIHx8IHJidWZbMF0gIT0gMHhmZiB8fCByYnVmWzFdICE9IDB4ZmYpCisJCWdvdG8gZXJyb3I7CisKKwltc2xlZXAoMik7CisJd2J1ZlswXSA9IDB4MDM7CisJd2J1ZlsxXSA9IDB4ODA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkLT51ZGV2LCAwKSwKKwkJCSAgICAgIEdMODYxX1JFUV9JMkNfREFUQV9DVFJMX1dSSVRFLCBHTDg2MV9XUklURSwKKwkJCSAgICAgIDB4OTAwMCwgMHgwMTAwLCB3YnVmLCAyLCAyMDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCW1zbGVlcCgyKTsKKwl3YnVmWzBdID0gMHgwMDsKKwl3YnVmWzJdID0gMHgwMTsJCS8qIHJlZy4weDAxMDAgKi8KKwl3YnVmWzFdID0gMHgwMDsKKwlyZXQgPSBnbDg2MV9pMmNfbXNnKGQsIDB4OTAgPj4gMSwgd2J1ZiwgMywgcmJ1ZiwgMik7CisJLyogbXkgRnJpaW8gV2hpdGUgcmV0dXJucyAweGZmZmYgYWdhaW4uICovCisJaWYgKHJldCA8IDAgfHwgcmJ1ZlswXSAhPSAweGZmIHx8IHJidWZbMV0gIT0gMHhmZikKKwkJZ290byBlcnJvcjsKKworCW1zbGVlcCgxKTsKKworcmVzdGFydDoKKwkvKiA9PT09PT09PT09PT0gc3RhcnQgREVNT0QgaW5pdCBjbWRzID09PT09PT09PT09PT09PT09PSAqLworCS8qIHJlYWQgUExMIHN0YXR1cyB0byBjbGVhciB0aGUgUE9SIGJpdCAqLworCXdidWZbMF0gPSBKRFZCVDkwNTAyXzJORF9JMkNfUkVHOworCXdidWZbMV0gPSAoRlJJSU9fUExMX0FERFIgPDwgMSkgKyAxOwkvKiArMSBmb3IgcmVhZGluZyAqLworCXJldCA9IGdsODYxX2kyY19tc2coZCwgRlJJSU9fREVNT0RfQUREUiwgd2J1ZiwgMiwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwltc2xlZXAoNSk7CisJLyogbm90ZTogREVNT0RVTEFUT1IgaGFzIDE2Yml0IHJlZ2lzdGVyLWFkZHJlc3MuICovCisJd2J1ZlswXSA9IDB4MDA7CisJd2J1ZlsyXSA9IDB4MDE7CQkvKiByZWcgYWRkcjogMHgwMTAwICovCisJd2J1ZlsxXSA9IDB4MDA7CQkvKiB2YWw6IG5vdCB1c2VkICovCisJcmV0ID0gZ2w4NjFfaTJjX21zZyhkLCBGUklJT19ERU1PRF9BRERSLCB3YnVmLCAzLCByYnVmLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKy8qCisJbXNsZWVwKDEpOworCXdidWZbMF0gPSAweDgwOworCXdidWZbMV0gPSAweDAwOworCXJldCA9IGdsODYxX2kyY19tc2coZCwgRlJJSU9fREVNT0RfQUREUiwgd2J1ZiwgMiwgcmJ1ZiwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisgKi8KKwlpZiAocmJ1ZlswXSAmIDB4ODApIHsJLyogc3RpbGwgaW4gUG93ZXJPblJlc2V0IHN0YXRlPyAqLworCQlpZiAoKytyZXRyeSA+IDMpIHsKKwkJCWRlYl9pbmZvKCJmYWlsZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IgorCQkJCSAiIEZFIGRlbW9kIHN0YXR1czoweCUwMnhcbiIsIHJidWZbMF0pOworCQkJZ290byBlcnJvcjsKKwkJfQorCQltc2xlZXAoMTAwKTsKKwkJZ290byByZXN0YXJ0OworCX0KKworCS8qIFRPRE86IGNoZWNrIHJldHVybiB2YWx1ZSBpbiByYnVmICovCisJLyogPT09PT09PT09PT0gZW5kIERFTU9EIGluaXQgY21kcyA9PT09PT09PT09PT09PT09PT09PT0gKi8KKwltc2xlZXAoMSk7CisKKwl3YnVmWzBdID0gMHgzMDsKKwl3YnVmWzFdID0gMHgwNDsKKwlyZXQgPSBnbDg2MV9pMmNfbXNnKGQsIDB4MDAsIHdidWYsIDIsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJbXNsZWVwKDIpOworCS8qIGZvbGxvd2luZyAyIGNtZHMgdW5uZWNlc3Nhcnk/ICovCisJd2J1ZlswXSA9IDB4MDA7CisJd2J1ZlsxXSA9IDB4MDE7CisJcmV0ID0gZ2w4NjFfaTJjX21zZyhkLCAweDAwLCB3YnVmLCAyLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXdidWZbMF0gPSAweDA2OworCXdidWZbMV0gPSAweDBGOworCXJldCA9IGdsODYxX2kyY19tc2coZCwgMHgwMCwgd2J1ZiwgMiwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzb21lIHN0cmVhbWluZyBjdGwgY21kcyAobWF5YmUpICovCisJbXNsZWVwKDEwKTsKKwlmb3IgKGkgPSAwOyBpIDwgY21kbGVuOyBpKyspIHsKKwkJcmV0ID0gZ2w4NjFfaTJjX21zZyhkLCAweDAwLCBzdHJlYW1pbmdfaW5pdF9jbWRzW2ldLCAyLAorCQkJCSAgICBOVUxMLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCQltc2xlZXAoMSk7CisJfQorCW1zbGVlcCgyMCk7CisKKwkvKiBjaGFuZ2UgdGhlIExFRCBjb2xvciBldGMuICovCisJcmV0ID0gZnJpaW9fc3RyZWFtaW5nX2N0cmwoJmQtPmFkYXB0ZXJbMF0sIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWRlYl9pbmZvKCIlczpyZXQgPT0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCXJldHVybiAtRUlPOworfQorCisvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KKworc3RhdGljIGludCBmcmlpb19zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCit7CisJaW50IHJldDsKKworCWRlYl9pbmZvKCIlcyBjYWxsZWQuKCVkKVxuIiwgX19mdW5jX18sIG9ub2ZmKTsKKworCS8qIHNldCB0aGUgTEVEIGNvbG9yIGFuZCBzYXR1cmF0aW9uIChhbmQgTE5CIG9uKSAqLworCWlmIChvbm9mZikKKwkJcmV0ID0gZnJpaW9fZXh0X2N0bChhZGFwLCAweDY0MDBmZjY0LCAxKTsKKwllbHNlCisJCXJldCA9IGZyaWlvX2V4dF9jdGwoYWRhcCwgMHg5NmZmMDBmZiwgMSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJZGViX2luZm8oIiVzIGZhaWxlZCB0byBzZW5kIGNtZHguIHJldD09JWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnJpaW9fZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJaWYgKGZyaWlvX2luaXRpYWxpemUoYWRhcC0+ZGV2KSA8IDApCisJCXJldHVybiAtRUlPOworCisJYWRhcC0+ZmUgPSBqZHZidDkwNTAyX2F0dGFjaChhZGFwLT5kZXYpOworCWlmIChhZGFwLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGZyaWlvX3Byb3BlcnRpZXM7CisKK3N0YXRpYyBpbnQgZnJpaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwlpbnQgcmV0OworCisJaWYgKGludGYtPm51bV9hbHRzZXR0aW5nIDwgR0w4NjFfQUxUU0VUVElOR19DT1VOVCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaW50ZiwgRlJJSU9fQlVMS19BTFRTRVRUSU5HKTsKKwlpZiAoYWx0ID09IE5VTEwpIHsKKwkJZGViX3JjKCJub3QgYWx0IGZvdW5kIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAorCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCWFsdC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRlYl9yYygiZmFpbGVkIHRvIHNldCBhbHQtc2V0dGluZyFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmZyaWlvX3Byb3BlcnRpZXMsCisJCQkJICBUSElTX01PRFVMRSwgJmQsIGFkYXB0ZXJfbnIpOworCWlmIChyZXQgPT0gMCkKKwkJZnJpaW9fc3RyZWFtaW5nX2N0cmwoJmQtPmFkYXB0ZXJbMF0sIDEpOworCisJcmV0dXJuIHJldDsKK30KKworCitzdHJ1Y3QgamR2YnQ5MDUwMl9jb25maWcgZnJpaW9fZmVfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gRlJJSU9fREVNT0RfQUREUiwKKwkucGxsX2FkZHJlc3MgPSBGUklJT19QTExfQUREUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBnbDg2MV9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgICA9IGdsODYxX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZ2w4NjFfaTJjX2Z1bmMsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZnJpaW9fdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF83NzQsIFVTQl9QSURfRlJJSU9fV0hJVEUpIH0sCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBmcmlpb190YWJsZSk7CisKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGZyaWlvX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKworCS5zaXplX29mX3ByaXYgPSAwLAorCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCS8qIGNhcHM6MCA9PiAgbm8gcGlkIGZpbHRlciwgMTg4QiBUUyBwYWNrZXQgKi8KKwkJLyogR0w4NjEgaGFzIGEgSFcgcGlkIGZpbHRlciwgYnV0IG5vIGluZm8gYXZhaWxhYmxlLiAqLworCQl7CisJCQkuY2FwcyAgPSAwLAorCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGZyaWlvX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS5zdHJlYW1pbmdfY3RybCA9IGZyaWlvX3N0cmVhbWluZ19jdHJsLAorCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLyogY291bnQgPD0gTUFYX05PX1VSQlNfRk9SX0RBVEFfU1RSRUFNKDEwKSAqLworCQkJCS5jb3VudCA9IDgsCisJCQkJLmVuZHBvaW50ID0gMHgwMSwKKwkJCQkudSA9IHsKKwkJCQkJLyogR0w4NjEgaGFzIDZLQiBidWYgaW5zaWRlICovCisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSAxNjM4NCwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0KKwl9LAorCS5pMmNfYWxnbyA9ICZnbDg2MV9pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeworCQkJLm5hbWUgPSAiNzc0IEZyaWlvIElTREItVCBVU0IyLjAiLAorCQkJLmNvbGRfaWRzID0geyBOVUxMIH0sCisJCQkud2FybV9pZHMgPSB7ICZmcmlpb190YWJsZVswXSwgTlVMTCB9LAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBmcmlpb19kcml2ZXIgPSB7CisJLm5hbWUJCT0gImR2Yl91c2JfZnJpaW8iLAorCS5wcm9iZQkJPSBmcmlpb19wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlCT0gZnJpaW9fdGFibGUsCit9OworCisKKy8qIG1vZHVsZSBzdHVmZiAqLworc3RhdGljIGludCBfX2luaXQgZnJpaW9fbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZmcmlpb19kcml2ZXIpOworCWlmIChyZXQpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGZyaWlvX21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmZyaWlvX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGZyaWlvX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGZyaWlvX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWtpaGlybyBUc3VrYWRhIDx0c2tkMkB5YWhvby5jby5qcD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBGcmlpbyBJU0RCLVQgVVNCMi4wIFJlY2VpdmVyIik7CitNT0RVTEVfVkVSU0lPTigiMC4yIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4ZDU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8uaApAQCAtMCwwICsxLDk5IEBACisvKiBEVkIgVVNCIGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZSBGcmlpbyBVU0IyLjAgSVNEQi1UIHJlY2VpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBa2loaXJvIFRzdWthZGEgPHRza2QyQHlhaG9vLmNvLmpwPgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGJhc2VkIG9mZiB0aGUgdGhlIGdsODYxIGFuZCB2cDcwMnggbW9kdWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworI2lmbmRlZiBfRFZCX1VTQl9GUklJT19IXworI2RlZmluZSBfRFZCX1VTQl9GUklJT19IXworCisvKioKKyAqICAgICAgRnJpaW8gQ29tcG9uZW50cworICogICAgICAgVVNCIGh1YjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVNDI1NAorICogICAgICAgICBVU0IgY29udHJvbGxlcigrIFRTIGRteCAmIHN0cmVhbWluZyk6IEdMODYxCisgKiAgICAgICAgIEZyb250ZW5kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tdGVjaCBKRFZCVC05MDUwMgorICogICAgICAgICAgICAgKHR1bmVyIFBMTDogICAgICAgICAgICAgICAgICAgICAgIHR1YTYwMzQsIEkyQyBhZGRyOigweEMwID4+IDEpKQorICogICAgICAgICAgICAgKE9GRE0gZGVtb2R1bGF0b3I6ICAgICAgICAgICAgICAgIFRDOTA1MDIsIEkyQyBhZGRyOigweDMwID4+IDEpKQorICogICAgICAgICBMRUQgeDMgKCtMTkIpIGNvbnRyb2xsOiAgICAgICAgICAgICAgIFBJQyAxNkY2NzYKKyAqICAgICAgICAgRUVQUk9NOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNEMwOAorICoKKyAqICAgICAgICAoVVNCIHNtYXJ0IGNhcmQgcmVhZGVyOiAgICAgICAgICAgICAgICBBVTk1MjIpCisgKgorICovCisKKyNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJmcmlpbyIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKK2V4dGVybiBpbnQgZHZiX3VzYl9mcmlpb19kZWJ1ZzsKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2ZyaWlvX2RlYnVnLCAweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfZnJpaW9fZGVidWcsIDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl9yYyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9mcmlpb19kZWJ1ZywgMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX2ZlKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2ZyaWlvX2RlYnVnLCAweDA4LCBhcmdzKQorCisvKiBWZW5kb3IgcmVxdWVzdHMgKi8KKyNkZWZpbmUgR0w4NjFfV1JJVEUJCTB4NDAKKyNkZWZpbmUgR0w4NjFfUkVBRAkJMHhjMAorCisvKiBjb21tYW5kIGJ5dGVzICovCisjZGVmaW5lIEdMODYxX1JFUV9JMkNfV1JJVEUJMHgwMQorI2RlZmluZSBHTDg2MV9SRVFfSTJDX1JFQUQJMHgwMgorLyogRm9yIGNvbnRyb2wgbXNnIHdpdGggZGF0YSBhcmd1bWVudCAqLworLyogVXNlZCBmb3IgYWNjZXNzaW5nIHRoZSBQTEwgb24gdGhlIHNlY29uZGFyeSBJMkMgYnVzIG9mIEZFIHZpYSBHTDg2MSAqLworI2RlZmluZSBHTDg2MV9SRVFfSTJDX0RBVEFfQ1RSTF9XUklURQkweDAzCisKKyNkZWZpbmUgR0w4NjFfQUxUU0VUVElOR19DT1VOVAkyCisjZGVmaW5lIEZSSUlPX0JVTEtfQUxUU0VUVElORwkwCisjZGVmaW5lIEZSSUlPX0lTT0NfQUxUU0VUVElORwkxCisKKy8qIExFRCAmIExOQiBjb250cm9sIHZpYSBQSUMuICovCisvKiBiYXNpY2FsbHksIGl0J3Mgc2VyaWFsIGNvbnRyb2wgd2l0aCBjbG9jayBhbmQgc3Ryb2JlLiAqLworLyogd3JpdGUgdGhlIGJlbG93IDRiaXQgY29udHJvbCBkYXRhIHRvIHRoZSByZWcgMHgwMCBhdCB0aGUgSTJDIGFkZHIgMHgwMCAqLworLyogd2hlbiBjb250cm9sbGluZyB0aGUgTEVEcywgMzJiaXQoc2F0dXJhdGlvbiwgUiwgRywgQikgaXMgc2VudCBvbiB0aGUgYml0MyovCisjZGVmaW5lIEZSSUlPX0NUTF9MTkIgKDEgPDwgMCkKKyNkZWZpbmUgRlJJSU9fQ1RMX1NUUk9CRSAoMSA8PCAxKQorI2RlZmluZSBGUklJT19DVExfQ0xLICgxIDw8IDIpCisjZGVmaW5lIEZSSUlPX0NUTF9MRUQgKDEgPDwgMykKKworLyogRnJvbnQgRW5kIHJlbGF0ZWQgKi8KKworI2RlZmluZSBGUklJT19ERU1PRF9BRERSICAoMHgzMCA+PiAxKQorI2RlZmluZSBGUklJT19QTExfQUREUiAgKDB4QzAgPj4gMSkKKworI2RlZmluZSBKRFZCVDkwNTAyX1BMTF9DTEsJNDAwMDAwMAorI2RlZmluZSBKRFZCVDkwNTAyX1BMTF9ESVZJREVSCTI4CisKKyNkZWZpbmUgSkRWQlQ5MDUwMl8yTkRfSTJDX1JFRyAweEZFCisKKy8qIGJ5dGUgaW5kZXggZm9yIHBsbCBpMmMgY29tbWFuZCBkYXRhIHN0cnVjdHVyZSovCisvKiBzZWUgZGF0YXNoZWV0IGZvciB0dWE2MDM0ICovCisjZGVmaW5lIERFTU9EX1JFRElSRUNUX1JFRyAwCisjZGVmaW5lIEFERFJFU1NfQllURSAgICAgICAxCisjZGVmaW5lIERJVklERVJfQllURTEgICAgICAyCisjZGVmaW5lIERJVklERVJfQllURTIgICAgICAzCisjZGVmaW5lIENPTlRST0xfQllURSAgICAgICA0CisjZGVmaW5lIEJBTkRTV0lUQ0hfQllURSAgICA1CisjZGVmaW5lIEFHQ19DVFJMX0JZVEUgICAgICA1CisjZGVmaW5lIFBMTF9DTURfTEVOICAgICAgICA2CisKKy8qIGJpdCBtYXNrcyBmb3IgUExMIFNUQVRVUyByZXNwb25zZSAqLworI2RlZmluZSBQTExfU1RBVFVTX1BPUl9NT0RFICAgMHg4MCAvKiAxOiBQb3dlciBvbiBSZXNldCAodGVzdCkgTW9kZSAqLworI2RlZmluZSBQTExfU1RBVFVTX0xPQ0tFRCAgICAgMHg0MCAvKiAxOiBsb2NrZWQgKi8KKyNkZWZpbmUgUExMX1NUQVRVU19BR0NfQUNUSVZFIDB4MDggLyogMTphY3RpdmUgKi8KKyNkZWZpbmUgUExMX1NUQVRVU19URVNUTU9ERSAgIDB4MDcgLyogZGlnaXRhbCBvdXRwdXQgbGV2ZWwgKDUgbGV2ZWwpICovCisgIC8qIDAuMTVWY2Mgc3RlcCAgIDB4MDA6IDwgMC4xNVZjYywgLi4uLCAweDA0OiA+PSAwLjZWY2MgKDw9IDFWY2MpICovCisKKworc3RydWN0IGpkdmJ0OTA1MDJfY29uZmlnIHsKKwl1OCBkZW1vZF9hZGRyZXNzOyAvKiBpMmMgYWRkciBmb3IgZGVtb2R1bGF0b3IgSUMgKi8KKwl1OCBwbGxfYWRkcmVzczsgICAvKiBQTEwgYWRkciBvbiB0aGUgc2Vjb25kYXJ5IGkyYyovCit9OworZXh0ZXJuIHN0cnVjdCBqZHZidDkwNTAyX2NvbmZpZyBmcmlpb19mZV9jb25maWc7CisKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpqZHZidDkwNTAyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKaW5kZXggYWVjN2ExOS4uZWY5YjdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwpAQCAtMzM3LDYgKzMzNyw4IEBACiAJaW50IGksIHBhc3MsIHJldCA9IDA7CiAKIAlidWZmID0ga21hbGxvYyg2NTUzNiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZmYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoKHJldCA9IG05MjB4X3JlYWQodWRldiwgTTkyMDZfRklMVEVSLCAweDAsIDB4ODAwMCwgcmVhZCwgNCkpICE9IDApCiAJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggYjc5NGU4Ni4uZDdjNDgzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKQEAgLTQ4NCw2ICs0ODQsMTQgQEAKIAkgIEFOIElTREItVCBEUVBTSywgUVBTSywgMTZRQU0gYW5kIDY0UUFNIDFzZWcgdHVuZXIgbW9kdWxlLgogCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfRElCODAwMAorCXRyaXN0YXRlICJEaUJjb20gODAwME1CL01DIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIGRyaXZlciBmb3IgRGlCY29tJ3MgRGlCODAwMCBJU0RCLVQvSVNEQi1Uc2IgZGVtb2R1bGF0b3IuCisJICBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29tbWVudCAiRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggM2I0OWQzNy4uMzUyMzc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX0RWQl9ESUIzMDAwTUMpICs9IGRpYjMwMDBtYy5vIGRpYngwMDBfY29tbW9uLm8KIG9iai0kKENPTkZJR19EVkJfRElCNzAwME0pICs9IGRpYjcwMDBtLm8gZGlieDAwMF9jb21tb24ubwogb2JqLSQoQ09ORklHX0RWQl9ESUI3MDAwUCkgKz0gZGliNzAwMHAubyBkaWJ4MDAwX2NvbW1vbi5vCitvYmotJChDT05GSUdfRFZCX0RJQjgwMDApICs9IGRpYjgwMDAubyBkaWJ4MDAwX2NvbW1vbi5vCiBvYmotJChDT05GSUdfRFZCX01UMzEyKSArPSBtdDMxMi5vCiBvYmotJChDT05GSUdfRFZCX1ZFUzE4MjApICs9IHZlczE4MjAubwogb2JqLSQoQ09ORklHX0RWQl9WRVMxWDkzKSArPSB2ZXMxeDkzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMKaW5kZXggOWU5YTc1NS4uNzQ5ODFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMKQEAgLTc5Miw2ICs3OTIsMTEgQEAKIAl9CiAKIAlkZW1vZF9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXU4NTIyX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmIChkZW1vZF9jb25maWcgPT0gTlVMTCkgeworCQlpZiAoaW5zdGFuY2UgPT0gMSkKKwkJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCWRlbW9kX2NvbmZpZy0+ZGVtb2RfYWRkcmVzcyA9IDB4OGUgPj4gMTsKIAogCXN0YXRlLT5jb25maWcgPSBkZW1vZF9jb25maWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuYwppbmRleCBkYTkyY2JlLi4yYmUxN2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmMKQEAgLTEsMTIgKzEsMjkgQEAKIC8qCiAgKiBMaW51eC1EVkIgRHJpdmVyIGZvciBEaUJjb20ncyBEaUIwMDcwIGJhc2UtYmFuZCBSRiBUdW5lci4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtNyBEaUJjb20gKGh0dHA6Ly93d3cuZGliY29tLmZyLykKKyAqIENvcHlyaWdodCAoQykgMjAwNS05IERpQmNvbSAoaHR0cDovL3d3dy5kaWJjb20uZnIvKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqCisgKiBUaGlzIGNvZGUgaXMgbW9yZSBvciBsZXNzIGdlbmVyYXRlZCBmcm9tIGFub3RoZXIgZHJpdmVyLCBwbGVhc2UKKyAqIGV4Y3VzZSBzb21lIGNvZGluZ3N0eWxlIG9kZGl0aWVzLgorICoKICAqLworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKQEAgLTE5LDI3ICszNiw2NSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInR1cm4gb24gZGVidWdnaW5nIChkZWZhdWx0OiAwKSIpOwogCi0jZGVmaW5lIGRwcmludGsoYXJncy4uLikgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKEtFUk5fREVCVUcgIkRpQjAwNzA6ICIpOyBwcmludGsoYXJncyk7IHByaW50aygiXG4iKTsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgXAorCWlmIChkZWJ1ZykgeyBcCisJCXByaW50ayhLRVJOX0RFQlVHICJEaUIwMDcwOiAiKTsgXAorCQlwcmludGsoYXJncyk7IFwKKwkJcHJpbnRrKCJcbiIpOyBcCisJfSBcCit9IHdoaWxlICgwKQogCiAjZGVmaW5lIERJQjAwNzBfUDFEICAweDAwCiAjZGVmaW5lIERJQjAwNzBfUDFGICAweDAxCiAjZGVmaW5lIERJQjAwNzBfUDFHICAweDAzCiAjZGVmaW5lIERJQjAwNzBTX1AxQSAweDAyCiAKK2VudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSB7CisJQ1RfVFVORVJfU1RBUlQgPSAxMCwKKwlDVF9UVU5FUl9TVEVQXzAsCisJQ1RfVFVORVJfU1RFUF8xLAorCUNUX1RVTkVSX1NURVBfMiwKKwlDVF9UVU5FUl9TVEVQXzMsCisJQ1RfVFVORVJfU1RFUF80LAorCUNUX1RVTkVSX1NURVBfNSwKKwlDVF9UVU5FUl9TVEVQXzYsCisJQ1RfVFVORVJfU1RFUF83LAorCUNUX1RVTkVSX1NUT1AsCit9OworCisjZGVmaW5lIEZFX0NBTExCQUNLX1RJTUVfTkVWRVIgMHhmZmZmZmZmZgorCiBzdHJ1Y3QgZGliMDA3MF9zdGF0ZSB7CiAJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CiAJY29uc3Qgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmc7CiAJdTE2IHdiZF9mZl9vZmZzZXQ7CiAJdTggcmV2aXNpb247CisKKwllbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZTsKKwl1MzIgY3VycmVudF9yZjsKKworCS8qIGZvciB0aGUgY2FwdHJpbSBiaW5hcnkgc2VhcmNoICovCisJczggc3RlcDsKKwl1MTYgYWRjX2RpZmY7CisKKwlzOCBjYXB0cmltOworCXM4IGZjYXB0cmltOworCXUxNiBsbzQ7CisKKwljb25zdCBzdHJ1Y3QgZGliMDA3MF90dW5pbmcgKmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleDsKKwljb25zdCBzdHJ1Y3QgZGliMDA3MF9sbmFfbWF0Y2ggKmxuYV9tYXRjaDsKKworCXU4IHdiZF9nYWluX2N1cnJlbnQ7CisJdTE2IHdiZF9vZmZzZXRfM18zWzJdOwogfTsKIAogc3RhdGljIHVpbnQxNl90IGRpYjAwNzBfcmVhZF9yZWcoc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlLCB1OCByZWcpCiB7CiAJdTggYlsyXTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7Ci0JCXsgLmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwgICAgICAgIC5idWYgPSAmcmVnLCAubGVuID0gMSB9LAotCQl7IC5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYiwgIC5sZW4gPSAyIH0sCisJCXsuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyZXNzLC5mbGFncyA9IDAsLmJ1ZiA9ICZyZWcsLmxlbiA9IDF9LAorCQl7LmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkcmVzcywuZmxhZ3MgPSBJMkNfTV9SRCwuYnVmID0gYiwubGVuID0gMn0sCiAJfTsKIAlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMikgIT0gMikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJEaUIwMDcwIEkyQyByZWFkIGZhaWxlZFxuIik7CkBAIC01MSw3ICsxMDYsNyBAQAogc3RhdGljIGludCBkaWIwMDcwX3dyaXRlX3JlZyhzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTE2IHZhbCkKIHsKIAl1OCBiWzNdID0geyByZWcsIHZhbCA+PiA4LCB2YWwgJiAweGZmIH07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYiwgLmxlbiA9IDMgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkcmVzcywuZmxhZ3MgPSAwLC5idWYgPSBiLC5sZW4gPSAzIH07CiAJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRpQjAwNzAgSTJDIHdyaXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRVJFTU9URUlPOwpAQCAtNTksNTUgKzExNCw3MSBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEhBUkRfUkVTRVQoc3RhdGUpIGRvIHsgaWYgKHN0YXRlLT5jZmctPnJlc2V0KSB7IHN0YXRlLT5jZmctPnJlc2V0KHN0YXRlLT5mZSwxKTsgbXNsZWVwKDEwKTsgc3RhdGUtPmNmZy0+cmVzZXQoc3RhdGUtPmZlLDApOyBtc2xlZXAoMTApOyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIEhBUkRfUkVTRVQoc3RhdGUpIGRvIHsgXAorICAgIHN0YXRlLT5jZmctPnNsZWVwKHN0YXRlLT5mZSwgMCk7IFwKKyAgICBpZiAoc3RhdGUtPmNmZy0+cmVzZXQpIHsgXAorCXN0YXRlLT5jZmctPnJlc2V0KHN0YXRlLT5mZSwxKTsgbXNsZWVwKDEwKTsgXAorCXN0YXRlLT5jZmctPnJlc2V0KHN0YXRlLT5mZSwwKTsgbXNsZWVwKDEwKTsgXAorICAgIH0gXAorfSB3aGlsZSAoMCkKIAogc3RhdGljIGludCBkaWIwMDcwX3NldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqY2gpCiB7Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0ID0gZmUtPnR1bmVyX3ByaXY7Ci0JdTE2IHRtcCA9IDA7Ci0JdG1wID0gZGliMDA3MF9yZWFkX3JlZyhzdCwgMHgwMikgJiAweDNmZmY7CisJc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJdTE2IHRtcCA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MDIpICYgMHgzZmZmOwogCi0gICAgc3dpdGNoKEJBTkRXSURUSF9UT19LSFooY2gtPnUub2ZkbS5iYW5kd2lkdGgpKSB7Ci0JCWNhc2UgIDgwMDA6Ci0JCQl0bXAgfD0gKDAgPDwgMTQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgIDcwMDA6Ci0JCQl0bXAgfD0gKDEgPDwgMTQpOwotCQkJYnJlYWs7Ci0JY2FzZSAgNjAwMDoKLQkJCXRtcCB8PSAoMiA8PCAxNCk7Ci0JCQlicmVhazsKLQljYXNlIDUwMDA6Ci0JCWRlZmF1bHQ6Ci0JCQl0bXAgfD0gKDMgPDwgMTQpOwotCQkJYnJlYWs7CisJaWYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmJhbmR3aWR0aF9oeiAvIDEwMDAgPiA3MDAwKQorCQl0bXAgfD0gKDAgPDwgMTQpOworCWVsc2UgaWYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmJhbmR3aWR0aF9oeiAvIDEwMDAgPiA2MDAwKQorCQl0bXAgfD0gKDEgPDwgMTQpOworCWVsc2UgaWYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmJhbmR3aWR0aF9oeiAvIDEwMDAgPiA1MDAwKQorCQl0bXAgfD0gKDIgPDwgMTQpOworCWVsc2UKKwkJdG1wIHw9ICgzIDw8IDE0KTsKKworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDAyLCB0bXApOworCisJLyogc2hhcnBlbiB0aGUgQkIgZmlsdGVyIGluIElTREItVCB0byBoYXZlIGhpZ2hlciBpbW11bml0eSB0byBhZGphY2VudCBjaGFubmVscyAqLworCWlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPT0gU1lTX0lTREJUKSB7CisJCXUxNiB2YWx1ZSA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MTcpOworCisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE3LCB2YWx1ZSAmIDB4ZmZmYyk7CisJCXRtcCA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MDEpICYgMHgwMWZmOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwMSwgdG1wIHwgKDYwIDw8IDkpKTsKKworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgdmFsdWUpOwogCX0KLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgwMiwgdG1wKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGliMDA3MF9jYXB0cmltKHN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdCwgdTE2IExPNCkKK3N0YXRpYyBpbnQgZGliMDA3MF9jYXB0cmltKHN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSwgZW51bSBmcm9udGVuZF90dW5lX3N0YXRlICp0dW5lX3N0YXRlKQogewotCWludDhfdCBjYXB0cmltLCBmY2FwdHJpbSwgc3RlcF9zaWduLCBzdGVwOwotCXUxNiBhZGMsIGFkY19kaWZmID0gMzAwMDsKKwlpbnQ4X3Qgc3RlcF9zaWduOworCXUxNiBhZGM7CisJaW50IHJldCA9IDA7CiAKKwlpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfVFVORVJfU1RFUF8wKSB7CiAKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MGYsIDB4ZWQxMCk7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE3LCAweDAwMzQpOwogCi0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MGYsIDB4ZWQxMCk7Ci0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTcsICAgIDB4MDAzNCk7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE4LCAweDAwMzIpOworCQlzdGF0ZS0+c3RlcCA9IHN0YXRlLT5jYXB0cmltID0gc3RhdGUtPmZjYXB0cmltID0gNjQ7CisJCXN0YXRlLT5hZGNfZGlmZiA9IDMwMDA7CisJCXJldCA9IDIwOwogCi0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTgsIDB4MDAzMik7Ci0JbXNsZWVwKDIpOworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfMTsKKwl9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfMSkgeworCQlzdGF0ZS0+c3RlcCAvPSAyOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNCwgc3RhdGUtPmxvNCB8IHN0YXRlLT5jYXB0cmltKTsKKwkJcmV0ID0gMTU7CiAKLQlzdGVwID0gY2FwdHJpbSA9IGZjYXB0cmltID0gNjQ7CisJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF8yOworCX0gZWxzZSBpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfVFVORVJfU1RFUF8yKSB7CiAKLQlkbyB7Ci0JCXN0ZXAgLz0gMjsKLQkJZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTQsIExPNCB8IGNhcHRyaW0pOwotCQltc2xlZXAoMSk7Ci0JCWFkYyA9IGRpYjAwNzBfcmVhZF9yZWcoc3QsIDB4MTkpOworCQlhZGMgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDE5KTsKIAotCQlkcHJpbnRrKCAiQ0FQVFJJTT0laGQ7IEFEQyA9ICVoZCAoQURDKSAmICVkbVYiLCBjYXB0cmltLCBhZGMsICh1MzIpIGFkYyoodTMyKTE4MDAvKHUzMikxMDI0KTsKKwkJZHByaW50aygiQ0FQVFJJTT0laGQ7IEFEQyA9ICVoZCAoQURDKSAmICVkbVYiLCBzdGF0ZS0+Y2FwdHJpbSwgYWRjLCAodTMyKSBhZGMgKiAodTMyKSAxODAwIC8gKHUzMikgMTAyNCk7CiAKIAkJaWYgKGFkYyA+PSA0MDApIHsKIAkJCWFkYyAtPSA0MDA7CkBAIC0xMTcsMzc5ICsxODgsNDMwIEBACiAJCQlzdGVwX3NpZ24gPSAxOwogCQl9CiAKLQkJaWYgKGFkYyA8IGFkY19kaWZmKSB7Ci0JCQlkcHJpbnRrKCAiQ0FQVFJJTT0laGQgaXMgY2xvc2VyIHRvIHRhcmdldCAoJWhkLyVoZCkiLCBjYXB0cmltLCBhZGMsIGFkY19kaWZmKTsKLQkJCWFkY19kaWZmID0gYWRjOwotCQkJZmNhcHRyaW0gPSBjYXB0cmltOwotCi0KKwkJaWYgKGFkYyA8IHN0YXRlLT5hZGNfZGlmZikgeworCQkJZHByaW50aygiQ0FQVFJJTT0laGQgaXMgY2xvc2VyIHRvIHRhcmdldCAoJWhkLyVoZCkiLCBzdGF0ZS0+Y2FwdHJpbSwgYWRjLCBzdGF0ZS0+YWRjX2RpZmYpOworCQkJc3RhdGUtPmFkY19kaWZmID0gYWRjOworCQkJc3RhdGUtPmZjYXB0cmltID0gc3RhdGUtPmNhcHRyaW07CiAKIAkJfQotCQljYXB0cmltICs9IChzdGVwX3NpZ24gKiBzdGVwKTsKLQl9IHdoaWxlIChzdGVwID49IDEpOworCQlzdGF0ZS0+Y2FwdHJpbSArPSAoc3RlcF9zaWduICogc3RhdGUtPnN0ZXApOwogCi0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTQsIExPNCB8IGZjYXB0cmltKTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxOCwgMHgwN2ZmKTsKKwkJaWYgKHN0YXRlLT5zdGVwID49IDEpCisJCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfMTsKKwkJZWxzZQorCQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzM7CisKKwl9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfMykgeworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNCwgc3RhdGUtPmxvNCB8IHN0YXRlLT5mY2FwdHJpbSk7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE4LCAweDA3ZmYpOworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfNDsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCi0jZGVmaW5lIExQRgkxMDAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmluZSBmb3IgdGhlIGxvb3AgZmlsdGVyIDEwMGtIeiBieSBkZWZhdWx0IDE2LTA3LTA2Ci0jZGVmaW5lIExPNF9TRVRfVkNPX0hGRElWKGwsIHYsIGgpICAgbCB8PSAoKHYpIDw8IDExKSB8ICgoaCkgPDwgNykKLSNkZWZpbmUgTE80X1NFVF9TRChsLCBzKSAgICAgICAgICAgICBsIHw9ICgocykgPDwgMTQpIHwgKChzKSA8PCAxMikKLSNkZWZpbmUgTE80X1NFVF9DVFJJTShsLCBjKSAgICAgICAgICBsIHw9ICAoYykgPDwgMTAKK3N0YXRpYyBpbnQgZGliMDA3MF9zZXRfY3RybF9sbzUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHZjb19iaWFzX3RyaW0sIHU4IGhmX2Rpdl90cmltLCB1OCBjcF9jdXJyZW50LCB1OCB0aGlyZF9vcmRlcl9maWx0KQoreworCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXUxNiBsbzUgPSAodGhpcmRfb3JkZXJfZmlsdCA8PCAxNCkgfCAoMCA8PCAxMykgfCAoMSA8PCAxMikgfCAoMyA8PCA5KSB8IChjcF9jdXJyZW50IDw8IDYpIHwgKGhmX2Rpdl90cmltIDw8IDMpIHwgKHZjb19iaWFzX3RyaW0gPDwgMCk7CisJZHByaW50aygiQ1RSTF9MTzU6IDB4JXgiLCBsbzUpOworCXJldHVybiBkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNSwgbG81KTsKK30KKwordm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggb3BlbikKK3sKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCWlmIChvcGVuKSB7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFiLCAweGZmMDApOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxYSwgMHgwMDAwKTsKKwl9IGVsc2UgeworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxYiwgMHg0MTEyKTsKKwkJaWYgKHN0YXRlLT5jZmctPnZnYV9maWx0ZXIgIT0gMCkgeworCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWEsIHN0YXRlLT5jZmctPnZnYV9maWx0ZXIpOworCQkJZHByaW50aygidmdhIGZpbHRlciByZWdpc3RlciBpcyBzZXQgdG8gJXgiLCBzdGF0ZS0+Y2ZnLT52Z2FfZmlsdGVyKTsKKwkJfSBlbHNlCisJCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxYSwgMHgwMDA5KTsKKwl9Cit9CisKK0VYUE9SVF9TWU1CT0woZGliMDA3MF9jdHJsX2FnY19maWx0ZXIpOworc3RydWN0IGRpYjAwNzBfdHVuaW5nIHsKKwl1MzIgbWF4X2ZyZXE7CQkvKiBmb3IgZXZlcnkgZnJlcXVlbmN5IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGF0IGZpZWxkOiB0aGlzIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QgKi8KKwl1OCBzd2l0Y2hfdHJpbTsKKwl1OCB2Y29fYmFuZDsKKwl1OCBoZmRpdjsKKwl1OCB2Y29fbXVsdGk7CisJdTggcHJlc2M7CisJdTggd2JkbXV4OworCXUxNiB0dW5lcl9lbmFibGU7Cit9OworCitzdHJ1Y3QgZGliMDA3MF9sbmFfbWF0Y2ggeworCXUzMiBtYXhfZnJlcTsJCS8qIGZvciBldmVyeSBmcmVxdWVuY3kgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoYXQgZmllbGQ6IHRoaXMgaW5mb3JtYXRpb24gaXMgY29ycmVjdCAqLworCXU4IGxuYV9iYW5kOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX3R1bmluZyBkaWIwMDcwc190dW5pbmdfdGFibGVbXSA9IHsKKwl7NTcwMDAwLCAyLCAxLCAzLCA2LCA2LCAyLCAweDQwMDAgfCAweDA4MDB9LAkvKiBVSEYgKi8KKwl7NzAwMDAwLCAyLCAwLCAyLCA0LCAyLCAyLCAweDQwMDAgfCAweDA4MDB9LAorCXs4NjM5OTksIDIsIDEsIDIsIDQsIDIsIDIsIDB4NDAwMCB8IDB4MDgwMH0sCisJezE1MDAwMDAsIDAsIDEsIDEsIDIsIDIsIDQsIDB4MjAwMCB8IDB4MDQwMH0sCS8qIExCQU5EICovCisJezE2MDAwMDAsIDAsIDEsIDEsIDIsIDIsIDQsIDB4MjAwMCB8IDB4MDQwMH0sCisJezIwMDAwMDAsIDAsIDEsIDEsIDIsIDIsIDQsIDB4MjAwMCB8IDB4MDQwMH0sCisJezB4ZmZmZmZmZmYsIDAsIDAsIDgsIDEsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMH0sCS8qIFNCQU5EICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpYjAwNzBfdHVuaW5nIGRpYjAwNzBfdHVuaW5nX3RhYmxlW10gPSB7CisJezExNTAwMCwgMSwgMCwgNywgMjQsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMH0sCS8qIEZNIGJlbG93IDkyTUh6IGNhbm5vdCBiZSB0dW5lZCAqLworCXsxNzk1MDAsIDEsIDAsIDMsIDE2LCAyLCAxLCAweDgwMDAgfCAweDEwMDB9LAkvKiBWSEYgKi8KKwl7MTg5OTk5LCAxLCAxLCAzLCAxNiwgMiwgMSwgMHg4MDAwIHwgMHgxMDAwfSwKKwl7MjUwMDAwLCAxLCAwLCA2LCAxMiwgMiwgMSwgMHg4MDAwIHwgMHgxMDAwfSwKKwl7NTY5OTk5LCAyLCAxLCA1LCA2LCAyLCAyLCAweDQwMDAgfCAweDA4MDB9LAkvKiBVSEYgKi8KKwl7Njk5OTk5LCAyLCAwLCAxLCA0LCAyLCAyLCAweDQwMDAgfCAweDA4MDB9LAorCXs4NjM5OTksIDIsIDEsIDEsIDQsIDIsIDIsIDB4NDAwMCB8IDB4MDgwMH0sCisJezB4ZmZmZmZmZmYsIDAsIDEsIDAsIDIsIDIsIDQsIDB4MjAwMCB8IDB4MDQwMH0sCS8qIExCQU5EIG9yIGV2ZXJ5dGhpbmcgaGlnaGVyIHRoYW4gVUhGICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpYjAwNzBfbG5hX21hdGNoIGRpYjAwNzBfbG5hX2ZsaXBfY2hpcFtdID0geworCXsxODAwMDAsIDB9LAkJLyogVkhGICovCisJezE4ODAwMCwgMX0sCisJezE5NjQwMCwgMn0sCisJezI1MDAwMCwgM30sCisJezU1MDAwMCwgMH0sCQkvKiBVSEYgKi8KKwl7NTkwMDAwLCAxfSwKKwl7NjY2MDAwLCAzfSwKKwl7ODY0MDAwLCA1fSwKKwl7MTUwMDAwMCwgMH0sCQkvKiBMQkFORCBvciBldmVyeXRoaW5nIGhpZ2hlciB0aGFuIFVIRiAqLworCXsxNjAwMDAwLCAxfSwKKwl7MjAwMDAwMCwgM30sCisJezB4ZmZmZmZmZmYsIDd9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX2xuYV9tYXRjaCBkaWIwMDcwX2xuYVtdID0geworCXsxODAwMDAsIDB9LAkJLyogVkhGICovCisJezE4ODAwMCwgMX0sCisJezE5NjQwMCwgMn0sCisJezI1MDAwMCwgM30sCisJezU1MDAwMCwgMn0sCQkvKiBVSEYgKi8KKwl7NjUwMDAwLCAzfSwKKwl7NzUwMDAwLCA1fSwKKwl7ODUwMDAwLCA2fSwKKwl7ODY0MDAwLCA3fSwKKwl7MTUwMDAwMCwgMH0sCQkvKiBMQkFORCBvciBldmVyeXRoaW5nIGhpZ2hlciB0aGFuIFVIRiAqLworCXsxNjAwMDAwLCAxfSwKKwl7MjAwMDAwMCwgM30sCisJezB4ZmZmZmZmZmYsIDd9LAorfTsKKworI2RlZmluZSBMUEYJMTAwCQkvLyBkZWZpbmUgZm9yIHRoZSBsb29wIGZpbHRlciAxMDBrSHogYnkgZGVmYXVsdCAxNi0wNy0wNgogc3RhdGljIGludCBkaWIwMDcwX3R1bmVfZGlnaXRhbChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpjaCkKIHsKLQlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3QgPSBmZS0+dHVuZXJfcHJpdjsKLQl1MzIgZnJlcSA9IGNoLT5mcmVxdWVuY3kvMTAwMCArIChCQU5EX09GX0ZSRVFVRU5DWShjaC0+ZnJlcXVlbmN5LzEwMDApID09IEJBTkRfVkhGID8gc3QtPmNmZy0+ZnJlcV9vZmZzZXRfa2h6X3ZoZiA6IHN0LT5jZmctPmZyZXFfb2Zmc2V0X2toel91aGYpOworCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCi0JdTggYmFuZCA9IEJBTkRfT0ZfRlJFUVVFTkNZKGZyZXEpLCBjOworCWNvbnN0IHN0cnVjdCBkaWIwMDcwX3R1bmluZyAqdHVuZTsKKwljb25zdCBzdHJ1Y3QgZGliMDA3MF9sbmFfbWF0Y2ggKmxuYV9tYXRjaDsKIAotCS8qKioqKioqKioqKioqKioqKioqVkNPKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JdTE2IGxvNCA9IDA7CisJZW51bSBmcm9udGVuZF90dW5lX3N0YXRlICp0dW5lX3N0YXRlID0gJnN0YXRlLT50dW5lX3N0YXRlOworCWludCByZXQgPSAxMDsJCS8qIDFtcyBpcyB0aGUgZGVmYXVsdCBkZWxheSBtb3N0IG9mIHRoZSB0aW1lICovCiAKLQl1OCBSRUZESVYsIFBSRVNDID0gMjsKLQl1MzIgRkJEaXYsIFJlc3QsIEZSRUYsIFZDT0Zfa0h6OwotCXUxNiBOdW0sIERlbjsKLQkvKioqKioqKioqKioqKioqKioqKkZyb250RW5kKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXUxNiB2YWx1ZSA9IDA7CisJdTggYmFuZCA9ICh1OCkgQkFORF9PRl9GUkVRVUVOQ1koZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3kgLyAxMDAwKTsKKwl1MzIgZnJlcSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5IC8gMTAwMCArIChiYW5kID09IEJBTkRfVkhGID8gc3RhdGUtPmNmZy0+ZnJlcV9vZmZzZXRfa2h6X3ZoZiA6IHN0YXRlLT5jZmctPmZyZXFfb2Zmc2V0X2toel91aGYpOwogCi0JZHByaW50ayggIlR1bmluZyBmb3IgQmFuZDogJWhkICglZCBrSHopIiwgYmFuZCwgZnJlcSk7CisjaWZkZWYgQ09ORklHX1NZU19JU0RCVAorCWlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPT0gU1lTX0lTREJUICYmIHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkKKwkJaWYgKCgoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpCisJCSAgICAgJiYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09ICgoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAvIDIpICsgMSkpKQorCQkgICAgfHwgKCgoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpID09IDApCisJCQkmJiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggPT0gKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgLyAyKSkpCisJCSAgICB8fCAoKChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50ICUgMikgPT0gMCkKKwkJCSYmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2lkeCA9PSAoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgLyAyKSArIDEpKSkpCisJCQlmcmVxICs9IDg1MDsKKyNlbmRpZgorCWlmIChzdGF0ZS0+Y3VycmVudF9yZiAhPSBmcmVxKSB7CiAKLQotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE3LCAweDMwKTsKLQotCWRpYjAwNzBfc2V0X2JhbmR3aWR0aChmZSwgY2gpOwkvKiBjIGlzIHVzZWQgYXMgSEYgKi8KLQlzd2l0Y2ggKHN0LT5yZXZpc2lvbikgeworCQlzd2l0Y2ggKHN0YXRlLT5yZXZpc2lvbikgewogCQljYXNlIERJQjAwNzBTX1AxQToKLQkJCXN3aXRjaCAoYmFuZCkgewotCQkJCWNhc2UgQkFORF9MQkFORDoKLQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAxLCAxKTsKLQkJCQkJYyA9IDI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQkFORF9TQkFORDoKLQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAwLCAwKTsKLQkJCQkJTE80X1NFVF9DVFJJTShsbzQsIDEpOwotCQkJCQljID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBCQU5EX1VIRjoKLQkJCQlkZWZhdWx0OgotCQkJCQlpZiAoZnJlcSA8IDU3MDAwMCkgewotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAxLCAzKTsKLQkJCQkJCVBSRVNDID0gNjsgYyA9IDY7Ci0JCQkJCX0gZWxzZSBpZiAoZnJlcSA8IDY4MDAwMCkgewotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAwLCAyKTsKLQkJCQkJCWMgPSA0OwotCQkJCQl9IGVsc2UgewotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAxLCAyKTsKLQkJCQkJCWMgPSA0OwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJfSBicmVhazsKLQotCQljYXNlIERJQjAwNzBfUDFHOgotCQljYXNlIERJQjAwNzBfUDFGOgorCQkJdHVuZSA9IGRpYjAwNzBzX3R1bmluZ190YWJsZTsKKwkJCWxuYV9tYXRjaCA9IGRpYjAwNzBfbG5hOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzd2l0Y2ggKGJhbmQpIHsKLQkJCQljYXNlIEJBTkRfRk06Ci0JCQkJCQlMTzRfU0VUX1ZDT19IRkRJVihsbzQsIDAsIDcpOwotCQkJCQkJYyA9IDI0OwotCQkJCQlicmVhazsKLQkJCQljYXNlIEJBTkRfTEJBTkQ6Ci0JCQkJCQlMTzRfU0VUX1ZDT19IRkRJVihsbzQsIDEsIDApOwotCQkJCQkJYyA9IDI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQkFORF9WSEY6Ci0JCQkJCWlmIChmcmVxIDwgMTgwMDAwKSB7Ci0JCQkJCQlMTzRfU0VUX1ZDT19IRkRJVihsbzQsIDAsIDMpOwotCQkJCQkJYyA9IDE2OwotCQkJCQl9IGVsc2UgaWYgKGZyZXEgPCAxOTAwMDApIHsKLQkJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMSwgMyk7Ci0JCQkJCQljID0gMTY7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlMTzRfU0VUX1ZDT19IRkRJVihsbzQsIDAsIDYpOwotCQkJCQkJYyA9IDEyOwotCQkJCQl9Ci0JCQkJCWJyZWFrOworCQkJdHVuZSA9IGRpYjAwNzBfdHVuaW5nX3RhYmxlOworCQkJaWYgKHN0YXRlLT5jZmctPmZsaXBfY2hpcCkKKwkJCQlsbmFfbWF0Y2ggPSBkaWIwMDcwX2xuYV9mbGlwX2NoaXA7CisJCQllbHNlCisJCQkJbG5hX21hdGNoID0gZGliMDA3MF9sbmE7CisJCQlicmVhazsKKwkJfQorCQl3aGlsZSAoZnJlcSA+IHR1bmUtPm1heF9mcmVxKQkvKiBmaW5kIHRoZSByaWdodCBvbmUgKi8KKwkJCXR1bmUrKzsKKwkJd2hpbGUgKGZyZXEgPiBsbmFfbWF0Y2gtPm1heF9mcmVxKQkvKiBmaW5kIHRoZSByaWdodCBvbmUgKi8KKwkJCWxuYV9tYXRjaCsrOwogCi0JCQkJY2FzZSBCQU5EX1VIRjoKLQkJCQlkZWZhdWx0OgotCQkJCQlpZiAoZnJlcSA8IDU3MDAwMCkgewotCQkJCQkJTE80X1NFVF9WQ09fSEZESVYobG80LCAxLCA1KTsKLQkJCQkJCWMgPSA2OwotCQkJCQl9IGVsc2UgaWYgKGZyZXEgPCA3MDAwMDApIHsKLQkJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMCwgMSk7Ci0JCQkJCQljID0gNDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMSwgMSk7Ci0JCQkJCQljID0gNDsKLQkJCQkJfQotCQkJCQlicmVhazsKKwkJc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleCA9IHR1bmU7CisJCXN0YXRlLT5sbmFfbWF0Y2ggPSBsbmFfbWF0Y2g7CisJfQorCisJaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NUQVJUKSB7CisJCWRwcmludGsoIlR1bmluZyBmb3IgQmFuZDogJWhkICglZCBrSHopIiwgYmFuZCwgZnJlcSk7CisJCWlmIChzdGF0ZS0+Y3VycmVudF9yZiAhPSBmcmVxKSB7CisJCQl1OCBSRUZESVY7CisJCQl1MzIgRkJEaXYsIFJlc3QsIEZSRUYsIFZDT0Zfa0h6OworCQkJdTggRGVuOworCisJCQlzdGF0ZS0+Y3VycmVudF9yZiA9IGZyZXE7CisJCQlzdGF0ZS0+bG80ID0gKHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnZjb19iYW5kIDw8IDExKSB8IChzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT5oZmRpdiA8PCA3KTsKKworCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTcsIDB4MzApOworCisJCQlWQ09GX2tIeiA9IHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnZjb19tdWx0aSAqIGZyZXEgKiAyOworCisJCQlzd2l0Y2ggKGJhbmQpIHsKKwkJCWNhc2UgQkFORF9WSEY6CisJCQkJUkVGRElWID0gKHU4KSAoKHN0YXRlLT5jZmctPmNsb2NrX2toeiArIDk5OTkpIC8gMTAwMDApOworCQkJCWJyZWFrOworCQkJY2FzZSBCQU5EX0ZNOgorCQkJCVJFRkRJViA9ICh1OCkgKChzdGF0ZS0+Y2ZnLT5jbG9ja19raHopIC8gMTAwMCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVJFRkRJViA9ICh1OCkgKHN0YXRlLT5jZmctPmNsb2NrX2toeiAvIDEwMDAwKTsKKwkJCQlicmVhazsKIAkJCX0KLQkJYnJlYWs7CisJCQlGUkVGID0gc3RhdGUtPmNmZy0+Y2xvY2tfa2h6IC8gUkVGRElWOworCisJCQlzd2l0Y2ggKHN0YXRlLT5yZXZpc2lvbikgeworCQkJY2FzZSBESUIwMDcwU19QMUE6CisJCQkJRkJEaXYgPSAoVkNPRl9rSHogLyBzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT5wcmVzYyAvIEZSRUYpOworCQkJCVJlc3QgPSAoVkNPRl9rSHogLyBzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT5wcmVzYykgLSBGQkRpdiAqIEZSRUY7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRElCMDA3MF9QMUc6CisJCQljYXNlIERJQjAwNzBfUDFGOgorCQkJZGVmYXVsdDoKKwkJCQlGQkRpdiA9IChmcmVxIC8gKEZSRUYgLyAyKSk7CisJCQkJUmVzdCA9IDIgKiBmcmVxIC0gRkJEaXYgKiBGUkVGOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoUmVzdCA8IExQRikKKwkJCQlSZXN0ID0gMDsKKwkJCWVsc2UgaWYgKFJlc3QgPCAyICogTFBGKQorCQkJCVJlc3QgPSAyICogTFBGOworCQkJZWxzZSBpZiAoUmVzdCA+IChGUkVGIC0gTFBGKSkgeworCQkJCVJlc3QgPSAwOworCQkJCUZCRGl2ICs9IDE7CisJCQl9IGVsc2UgaWYgKFJlc3QgPiAoRlJFRiAtIDIgKiBMUEYpKQorCQkJCVJlc3QgPSBGUkVGIC0gMiAqIExQRjsKKwkJCVJlc3QgPSAoUmVzdCAqIDY1MjgpIC8gKEZSRUYgLyAxMCk7CisKKwkJCURlbiA9IDE7CisJCQlpZiAoUmVzdCA+IDApIHsKKwkJCQlzdGF0ZS0+bG80IHw9ICgxIDw8IDE0KSB8ICgxIDw8IDEyKTsKKwkJCQlEZW4gPSAyNTU7CisJCQl9CisKKwkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDExLCAodTE2KSBGQkRpdik7CisJCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxMiwgKERlbiA8PCA4KSB8IFJFRkRJVik7CisJCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxMywgKHUxNikgUmVzdCk7CisKKwkJCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gRElCMDA3MFNfUDFBKSB7CisKKwkJCQlpZiAoYmFuZCA9PSBCQU5EX1NCQU5EKSB7CisJCQkJCWRpYjAwNzBfc2V0X2N0cmxfbG81KGZlLCAyLCA0LCAzLCAwKTsKKwkJCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWQsIDB4RkZGRik7CisJCQkJfSBlbHNlCisJCQkJCWRpYjAwNzBfc2V0X2N0cmxfbG81KGZlLCA1LCA0LCAzLCAxKTsKKwkJCX0KKworCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MjAsCisJCQkJCSAgMHgwMDQwIHwgMHgwMDIwIHwgMHgwMDEwIHwgMHgwMDA4IHwgMHgwMDAyIHwgMHgwMDAxIHwgc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+dHVuZXJfZW5hYmxlKTsKKworCQkJZHByaW50aygiUkVGRElWOiAlaGQsIEZSRUY6ICVkIiwgUkVGRElWLCBGUkVGKTsKKwkJCWRwcmludGsoIkZCRElWOiAlZCwgUmVzdDogJWQiLCBGQkRpdiwgUmVzdCk7CisJCQlkcHJpbnRrKCJOdW06ICVoZCwgRGVuOiAlaGQsIFNEOiAlaGQiLCAodTE2KSBSZXN0LCBEZW4sIChzdGF0ZS0+bG80ID4+IDEyKSAmIDB4MSk7CisJCQlkcHJpbnRrKCJIRkRJViBjb2RlOiAlaGQiLCBzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT5oZmRpdik7CisJCQlkcHJpbnRrKCJWQ08gPSAlaGQiLCBzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT52Y29fYmFuZCk7CisJCQlkcHJpbnRrKCJWQ09GOiAoKCVoZColZCkgPDwgMSkpIiwgc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+dmNvX211bHRpLCBmcmVxKTsKKworCQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzA7CisJCX0gZWxzZSB7CS8qIHdlIGFyZSBhbHJlYWR5IHR1bmVkIHRvIHRoaXMgZnJlcXVlbmN5IC0gdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdCAgKi8KKwkJCXJldCA9IDUwOwkvKiB3YWtldXAgdGltZSAqLworCQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzU7CisJCX0KKwl9IGVsc2UgaWYgKCgqdHVuZV9zdGF0ZSA+IENUX1RVTkVSX1NUQVJUKSAmJiAoKnR1bmVfc3RhdGUgPCBDVF9UVU5FUl9TVEVQXzQpKSB7CisKKwkJcmV0ID0gZGliMDA3MF9jYXB0cmltKHN0YXRlLCB0dW5lX3N0YXRlKTsKKworCX0gZWxzZSBpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfVFVORVJfU1RFUF80KSB7CisJCWNvbnN0IHN0cnVjdCBkaWIwMDcwX3diZF9nYWluX2NmZyAqdG1wID0gc3RhdGUtPmNmZy0+d2JkX2dhaW47CisJCWlmICh0bXAgIT0gTlVMTCkgeworCQkJd2hpbGUgKGZyZXEgLyAxMDAwID4gdG1wLT5mcmVxKQkvKiBmaW5kIHRoZSByaWdodCBvbmUgKi8KKwkJCQl0bXArKzsKKwkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDBmLAorCQkJCQkgICgwIDw8IDE1KSB8ICgxIDw8IDE0KSB8ICgzIDw8IDEyKSB8ICh0bXAtPndiZF9nYWluX3ZhbCA8PCA5KSB8ICgwIDw8IDgpIHwgKDEgPDwgNykgfCAoc3RhdGUtPgorCQkJCQkJCQkJCQkJCQkJCWN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+CisJCQkJCQkJCQkJCQkJCQkJd2JkbXV4IDw8IDApKTsKKwkJCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gdG1wLT53YmRfZ2Fpbl92YWw7CisJCX0gZWxzZSB7CisJCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZiwKKwkJCQkJICAoMCA8PCAxNSkgfCAoMSA8PCAxNCkgfCAoMyA8PCAxMikgfCAoNiA8PCA5KSB8ICgwIDw8IDgpIHwgKDEgPDwgNykgfCAoc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+CisJCQkJCQkJCQkJCQkJCXdiZG11eCA8PCAwKSk7CisJCQlzdGF0ZS0+d2JkX2dhaW5fY3VycmVudCA9IDY7CisJCX0KKworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwNiwgMHgzZmZmKTsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDcsCisJCQkJICAoc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+c3dpdGNoX3RyaW0gPDwgMTEpIHwgKDcgPDwgOCkgfCAoc3RhdGUtPmxuYV9tYXRjaC0+bG5hX2JhbmQgPDwgMykgfCAoMyA8PCAwKSk7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDA4LCAoc3RhdGUtPmxuYV9tYXRjaC0+bG5hX2JhbmQgPDwgMTApIHwgKDMgPDwgNykgfCAoMTI3KSk7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDBkLCAweDBkODApOworCisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE4LCAweDA3ZmYpOworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgMHgwMDMzKTsKKworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfNTsKKwl9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfNSkgeworCQlkaWIwMDcwX3NldF9iYW5kd2lkdGgoZmUsIGNoKTsKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVE9QOworCX0gZWxzZSB7CisJCXJldCA9IEZFX0NBTExCQUNLX1RJTUVfTkVWRVI7CS8qIHR1bmVyIGZpbmlzaGVkLCB0aW1lIHRvIGNhbGwgYWdhaW4gaW5maW5pdGUgKi8KIAl9CisJcmV0dXJuIHJldDsKK30KIAotCWRwcmludGsoICJIRkRJViBjb2RlOiAlaGQiLCAobG80ID4+IDcpICYgMHhmKTsKLQlkcHJpbnRrKCAiVkNPID0gJWhkIiwgKGxvNCA+PiAxMSkgJiAweDMpOworc3RhdGljIGludCBkaWIwMDcwX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwl1aW50MzJfdCByZXQ7CiAKKwlzdGF0ZS0+dHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NUQVJUOwogCi0JVkNPRl9rSHogPSAoYyAqIGZyZXEpICogMjsKLQlkcHJpbnRrKCAiVkNPRiBpbiBrSHo6ICVkICgoJWhkKiVkKSA8PCAxKSkiLFZDT0Zfa0h6LCBjLCBmcmVxKTsKLQotCXN3aXRjaCAoYmFuZCkgewotCQljYXNlIEJBTkRfVkhGOgotCQkJUkVGRElWID0gKHU4KSAoKHN0LT5jZmctPmNsb2NrX2toeiArIDk5OTkpIC8gMTAwMDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgQkFORF9GTToKLQkJCVJFRkRJViA9ICh1OCkgKChzdC0+Y2ZnLT5jbG9ja19raHopIC8gMTAwMCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVJFRkRJViA9ICh1OCkgKCBzdC0+Y2ZnLT5jbG9ja19raHogIC8gMTAwMDApOwotCQkJYnJlYWs7Ci0JfQotCUZSRUYgPSBzdC0+Y2ZnLT5jbG9ja19raHogLyBSRUZESVY7Ci0KLQlkcHJpbnRrKCAiUkVGRElWOiAlaGQsIEZSRUY6ICVkIiwgUkVGRElWLCBGUkVGKTsKLQotCi0KLQlzd2l0Y2ggKHN0LT5yZXZpc2lvbikgewotCQljYXNlIERJQjAwNzBTX1AxQToKLQkJCUZCRGl2ID0gKFZDT0Zfa0h6IC8gUFJFU0MgLyBGUkVGKTsKLQkJCVJlc3QgID0gKFZDT0Zfa0h6IC8gUFJFU0MpIC0gRkJEaXYgKiBGUkVGOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBESUIwMDcwX1AxRzoKLQkJY2FzZSBESUIwMDcwX1AxRjoKLQkJZGVmYXVsdDoKLQkJCUZCRGl2ID0gKGZyZXEgLyAoRlJFRiAvIDIpKTsKLQkJCVJlc3QgID0gMiAqIGZyZXEgLSBGQkRpdiAqIEZSRUY7Ci0JCQlicmVhazsKLQl9Ci0KLQotCSAgICAgaWYgKFJlc3QgPCBMUEYpICAgICAgICAgICAgICBSZXN0ID0gMDsKLQllbHNlIGlmIChSZXN0IDwgMiAqIExQRikgICAgICAgICAgUmVzdCA9IDIgKiBMUEY7Ci0JZWxzZSBpZiAoUmVzdCA+IChGUkVGIC0gTFBGKSkgICB7IFJlc3QgPSAwIDsgRkJEaXYgKz0gMTsgfQotCWVsc2UgaWYgKFJlc3QgPiAoRlJFRiAtIDIgKiBMUEYpKSBSZXN0ID0gRlJFRiAtIDIgKiBMUEY7Ci0JUmVzdCA9IChSZXN0ICogNjUyOCkgLyAoRlJFRiAvIDEwKTsKLQlkcHJpbnRrKCAiRkJESVY6ICVkLCBSZXN0OiAlZCIsIEZCRGl2LCBSZXN0KTsKLQotCU51bSA9IDA7Ci0JRGVuID0gMTsKLQotCWlmIChSZXN0ID4gMCkgewotCQlMTzRfU0VUX1NEKGxvNCwgMSk7Ci0JCURlbiA9IDI1NTsKLQkJTnVtID0gKHUxNilSZXN0OwotCX0KLQlkcHJpbnRrKCAiTnVtOiAlaGQsIERlbjogJWhkLCBTRDogJWhkIixOdW0sIERlbiwgKGxvNCA+PiAxMikgJiAweDEpOwotCi0KLQotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDExLCAodTE2KUZCRGl2KTsKLQotCi0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTIsIChEZW4gPDwgOCkgfCBSRUZESVYpOwotCi0KLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxMywgTnVtKTsKLQotCi0JdmFsdWUgPSAweDAwNDAgfCAweDAwMjAgfCAweDAwMTAgfCAweDAwMDggfCAweDAwMDIgfCAweDAwMDE7Ci0KLQlzd2l0Y2ggKGJhbmQpIHsKLQkJY2FzZSBCQU5EX1VIRjogICB2YWx1ZSB8PSAweDQwMDAgfCAweDA4MDA7IGJyZWFrOwotCQljYXNlIEJBTkRfTEJBTkQ6IHZhbHVlIHw9IDB4MjAwMCB8IDB4MDQwMDsgYnJlYWs7Ci0JCWRlZmF1bHQ6ICAgICAgICAgdmFsdWUgfD0gMHg4MDAwIHwgMHgxMDAwOyBicmVhazsKLQl9Ci0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MjAsIHZhbHVlKTsKLQotCWRpYjAwNzBfY2FwdHJpbShzdCwgbG80KTsKLQlpZiAoc3QtPnJldmlzaW9uID09IERJQjAwNzBTX1AxQSkgewotCQlpZiAoYmFuZCA9PSBCQU5EX1NCQU5EKQotCQkJZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MTUsIDB4MTZlMik7CisJZG8geworCQlyZXQgPSBkaWIwMDcwX3R1bmVfZGlnaXRhbChmZSwgcCk7CisJCWlmIChyZXQgIT0gRkVfQ0FMTEJBQ0tfVElNRV9ORVZFUikKKwkJCW1zbGVlcChyZXQgLyAxMCk7CiAJCWVsc2UKLQkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE1LCAweDU2ZTUpOwotCX0KLQotCi0KLQlzd2l0Y2ggKGJhbmQpIHsKLQkJY2FzZSBCQU5EX1VIRjogICB2YWx1ZSA9IDB4N2M4MjsgYnJlYWs7Ci0JCWNhc2UgQkFORF9MQkFORDogdmFsdWUgPSAweDdjODQ7IGJyZWFrOwotCQlkZWZhdWx0OiAgICAgICAgIHZhbHVlID0gMHg3YzgxOyBicmVhazsKLQl9Ci0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MGYsIHZhbHVlKTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgwNiwgMHgzZmZmKTsKLQotCS8qIEZyb250IEVuZCAqLwotCS8qIGMgPT0gVFVORSwgdmFsdWUgPSBTV0lUQ0ggKi8KLQljID0gMDsKLQl2YWx1ZSA9IDA7Ci0Jc3dpdGNoIChiYW5kKSB7Ci0JCWNhc2UgQkFORF9GTToKLQkJCWMgPSAwOyB2YWx1ZSA9IDE7Ci0JCWJyZWFrOwotCi0JCWNhc2UgQkFORF9WSEY6Ci0JCQlpZiAoZnJlcSA8PSAxODAwMDApIGMgPSAwOwotCQkJZWxzZSBpZiAoZnJlcSA8PSAxODgyMDApIGMgPSAxOwotCQkJZWxzZSBpZiAoZnJlcSA8PSAxOTY0MDApIGMgPSAyOwotCQkJZWxzZSBjID0gMzsKLQkJCXZhbHVlID0gMTsKLQkJYnJlYWs7Ci0KLQkJY2FzZSBCQU5EX0xCQU5EOgotCQkJaWYgKGZyZXEgPD0gMTUwMDAwMCkgYyA9IDA7Ci0JCQllbHNlIGlmIChmcmVxIDw9IDE2MDAwMDApIGMgPSAxOwotCQkJZWxzZSBjID0gMzsKLQkJYnJlYWs7Ci0KLQkJY2FzZSBCQU5EX1NCQU5EOgotCQkJYyA9IDc7Ci0JCQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxZCwweEZGRkYpOwotCQlicmVhazsKLQotCQljYXNlIEJBTkRfVUhGOgotCQlkZWZhdWx0OgotCQkJaWYgKHN0LT5jZmctPmZsaXBfY2hpcCkgewotCQkJCWlmIChmcmVxIDw9IDU1MDAwMCkgYyA9IDA7Ci0JCQkJZWxzZSBpZiAoZnJlcSA8PSA1OTAwMDApIGMgPSAxOwotCQkJCWVsc2UgaWYgKGZyZXEgPD0gNjY2MDAwKSBjID0gMzsKLQkJCQllbHNlIGMgPSA1OwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoZnJlcSA8PSA1NTAwMDApIGMgPSAyOwotCQkJCWVsc2UgaWYgKGZyZXEgPD0gNjUwMDAwKSBjID0gMzsKLQkJCQllbHNlIGlmIChmcmVxIDw9IDc1MDAwMCkgYyA9IDU7Ci0JCQkJZWxzZSBpZiAoZnJlcSA8PSA4NTAwMDApIGMgPSA2OwotCQkJCWVsc2UgYyA9IDc7Ci0JCQl9Ci0JCQl2YWx1ZSA9IDI7Ci0JCWJyZWFrOwotCX0KLQotCS8qIGRlZmF1bHQ6IExOQV9NQVRDSD03LCBCSUFTPTMgKi8KLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgwNywgKHZhbHVlIDw8IDExKSB8ICg3IDw8IDgpIHwgKGMgPDwgMykgfCAoMyA8PCAwKSk7Ci0JZGliMDA3MF93cml0ZV9yZWcoc3QsIDB4MDgsIChjIDw8IDEwKSB8ICgzIDw8IDcpIHwgKDEyNykpOwotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDBkLCAweDBkODApOwotCi0KLQlkaWIwMDcwX3dyaXRlX3JlZyhzdCwgMHgxOCwgICAweDA3ZmYpOwotCWRpYjAwNzBfd3JpdGVfcmVnKHN0LCAweDE3LCAweDAwMzMpOworCQkJYnJlYWs7CisJfSB3aGlsZSAoc3RhdGUtPnR1bmVfc3RhdGUgIT0gQ1RfVFVORVJfU1RPUCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkaWIwMDcwX3dha2V1cChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3QgPSBmZS0+dHVuZXJfcHJpdjsKLQlpZiAoc3QtPmNmZy0+c2xlZXApCi0JCXN0LT5jZmctPnNsZWVwKGZlLCAwKTsKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpZiAoc3RhdGUtPmNmZy0+c2xlZXApCisJCXN0YXRlLT5jZmctPnNsZWVwKGZlLCAwKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkaWIwMDcwX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdCA9IGZlLT50dW5lcl9wcml2OwotCWlmIChzdC0+Y2ZnLT5zbGVlcCkKLQkJc3QtPmNmZy0+c2xlZXAoZmUsIDEpOworCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCWlmIChzdGF0ZS0+Y2ZnLT5zbGVlcCkKKwkJc3RhdGUtPmNmZy0+c2xlZXAoZmUsIDEpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2IGRpYjAwNzBfcDFmX2RlZmF1bHRzW10gPQotCi17CitzdGF0aWMgY29uc3QgdTE2IGRpYjAwNzBfcDFmX2RlZmF1bHRzW10gPSB7CiAJNywgMHgwMiwKLQkJMHgwMDA4LAotCQkweDAwMDAsCi0JCTB4MDAwMCwKLQkJMHgwMDAwLAotCQkweDAwMDAsCi0JCTB4MDAwMiwKLQkJMHgwMTAwLAorCTB4MDAwOCwKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDAwMCwKKwkweDAwMDAsCisJMHgwMDAyLAorCTB4MDEwMCwKIAogCTMsIDB4MGQsCi0JCTB4MGQ4MCwKLQkJMHgwMDAxLAotCQkweDAwMDAsCisJMHgwZDgwLAorCTB4MDAwMSwKKwkweDAwMDAsCiAKIAk0LCAweDExLAotCQkweDAwMDAsCi0JCTB4MDEwMywKLQkJMHgwMDAwLAotCQkweDAwMDAsCisJMHgwMDAwLAorCTB4MDEwMywKKwkweDAwMDAsCisJMHgwMDAwLAogCiAJMywgMHgxNiwKLQkJMHgwMDA0IHwgMHgwMDQwLAotCQkweDAwMzAsCi0JCTB4MDdmZiwKKwkweDAwMDQgfCAweDAwNDAsCisJMHgwMDMwLAorCTB4MDdmZiwKIAogCTYsIDB4MWIsCi0JCTB4NDExMiwKLQkJMHhmZjAwLAotCQkweGMwN2YsCi0JCTB4MDAwMCwKLQkJMHgwMTgwLAotCQkweDQwMDAgfCAweDA4MDAgfCAweDAwNDAgfCAweDAwMjAgfCAweDAwMTAgfCAweDAwMDggfCAweDAwMDIgfCAweDAwMDEsCisJMHg0MTEyLAorCTB4ZmYwMCwKKwkweGMwN2YsCisJMHgwMDAwLAorCTB4MDE4MCwKKwkweDQwMDAgfCAweDA4MDAgfCAweDAwNDAgfCAweDAwMjAgfCAweDAwMTAgfCAweDAwMDggfCAweDAwMDIgfCAweDAwMDEsCiAKIAkwLAogfTsKIAotc3RhdGljIHZvaWQgZGliMDA3MF93YmRfY2FsaWJyYXRpb24oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCitzdGF0aWMgdTE2IGRpYjAwNzBfcmVhZF93YmRfb2Zmc2V0KHN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSwgdTggZ2FpbikKIHsKLQl1MTYgd2JkX29mZnM7Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJdTE2IHR1bmVyX2VuID0gZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgyMCk7CisJdTE2IG9mZnNldDsKIAotCWlmIChzdGF0ZS0+Y2ZnLT5zbGVlcCkKLQkJc3RhdGUtPmNmZy0+c2xlZXAoZmUsIDApOwotCi0JZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MGYsIDB4NmQ4MSk7Ci0JZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MjAsIDB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSk7CisJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTgsIDB4MDdmZik7CisJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MjAsIDB4MDgwMCB8IDB4NDAwMCB8IDB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSk7CisJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MGYsICgxIDw8IDE0KSB8ICgyIDw8IDEyKSB8IChnYWluIDw8IDkpIHwgKDEgPDwgOCkgfCAoMSA8PCA3KSB8ICgwIDw8IDApKTsKIAltc2xlZXAoOSk7Ci0Jd2JkX29mZnMgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDE5KTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyMCwgMCk7Ci0Jc3RhdGUtPndiZF9mZl9vZmZzZXQgPSAoKHdiZF9vZmZzICogOCAqIDE4IC8gMzMgKyAxKSAvIDIpOwotCWRwcmludGsoICJXQkRTdGFydCA9ICVkIChWYXJnZW4pIC0gRkYgPSAlaGQiLCAodTMyKSB3YmRfb2ZmcyAqIDE4MDAvMTAyNCwgc3RhdGUtPndiZF9mZl9vZmZzZXQpOworCW9mZnNldCA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MTkpOworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDIwLCB0dW5lcl9lbik7CisJcmV0dXJuIG9mZnNldDsKK30KIAotCWlmIChzdGF0ZS0+Y2ZnLT5zbGVlcCkKLQkJc3RhdGUtPmNmZy0+c2xlZXAoZmUsIDEpOwotCitzdGF0aWMgdm9pZCBkaWIwMDcwX3diZF9vZmZzZXRfY2FsaWJyYXRpb24oc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlKQoreworCXU4IGdhaW47CisJZm9yIChnYWluID0gNjsgZ2FpbiA8IDg7IGdhaW4rKykgeworCQlzdGF0ZS0+d2JkX29mZnNldF8zXzNbZ2FpbiAtIDZdID0gKChkaWIwMDcwX3JlYWRfd2JkX29mZnNldChzdGF0ZSwgZ2FpbikgKiA4ICogMTggLyAzMyArIDEpIC8gMik7CisJCWRwcmludGsoIkdhaW46ICVkLCBXQkRPZmZzZXQgKDMuM1YpID0gJWhkIiwgZ2Fpbiwgc3RhdGUtPndiZF9vZmZzZXRfM18zW2dhaW4gLSA2XSk7CisJfQogfQogCiB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdCA9IGZlLT50dW5lcl9wcml2OwotCXJldHVybiBzdC0+d2JkX2ZmX29mZnNldDsKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwljb25zdCBzdHJ1Y3QgZGliMDA3MF93YmRfZ2Fpbl9jZmcgKnRtcCA9IHN0YXRlLT5jZmctPndiZF9nYWluOworCXUzMiBmcmVxID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3kgLyAxMDAwOworCisJaWYgKHRtcCAhPSBOVUxMKSB7CisJCXdoaWxlIChmcmVxIC8gMTAwMCA+IHRtcC0+ZnJlcSkJLyogZmluZCB0aGUgcmlnaHQgb25lICovCisJCQl0bXArKzsKKwkJc3RhdGUtPndiZF9nYWluX2N1cnJlbnQgPSB0bXAtPndiZF9nYWluX3ZhbDsKKwl9IGVsc2UKKwkJc3RhdGUtPndiZF9nYWluX2N1cnJlbnQgPSA2OworCisJcmV0dXJuIHN0YXRlLT53YmRfb2Zmc2V0XzNfM1tzdGF0ZS0+d2JkX2dhaW5fY3VycmVudCAtIDZdOwogfQogCiBFWFBPUlRfU1lNQk9MKGRpYjAwNzBfd2JkX29mZnNldCk7Ci1zdGF0aWMgaW50IGRpYjAwNzBfc2V0X2N0cmxfbG81KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCB2Y29fYmlhc190cmltLCB1OCBoZl9kaXZfdHJpbSwgdTggY3BfY3VycmVudCwgdTggdGhpcmRfb3JkZXJfZmlsdCkKLXsKLQlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKLSAgICB1MTYgbG81ID0gKHRoaXJkX29yZGVyX2ZpbHQgPDwgMTQpIHwgKDAgPDwgMTMpIHwgKDEgPDwgMTIpIHwgKDMgPDwgOSkgfCAoY3BfY3VycmVudCA8PCA2KSB8IChoZl9kaXZfdHJpbSA8PCAzKSB8ICh2Y29fYmlhc190cmltIDw8IDApOwotCWRwcmludGsoICJDVFJMX0xPNTogMHgleCIsIGxvNSk7Ci0JcmV0dXJuIGRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE1LCBsbzUpOwotfQogCiAjZGVmaW5lIHBnbV9yZWFkX3dvcmQodykgKCp3KQotc3RhdGljIGludCBkaWIwMDcwX3Jlc2V0KHN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQgZGliMDA3MF9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKIAl1MTYgbCwgciwgKm47CiAKIAlIQVJEX1JFU0VUKHN0YXRlKTsKIAotCiAjaWZuZGVmIEZPUkNFX1NCQU5EX1RVTkVSCiAJaWYgKChkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDIyKSA+PiA5KSAmIDB4MSkKIAkJc3RhdGUtPnJldmlzaW9uID0gKGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MWYpID4+IDgpICYgMHhmZjsKIAllbHNlCisjZWxzZQorI3dhcm5pbmcgZm9yY2luZyBTQkFORAogI2VuZGlmCi0JCXN0YXRlLT5yZXZpc2lvbiA9IERJQjAwNzBTX1AxQTsKKwlzdGF0ZS0+cmV2aXNpb24gPSBESUIwMDcwU19QMUE7CiAKIAkvKiBQMUYgb3Igbm90ICovCi0JZHByaW50ayggIlJldmlzaW9uOiAleCIsIHN0YXRlLT5yZXZpc2lvbik7CisJZHByaW50aygiUmV2aXNpb246ICV4Iiwgc3RhdGUtPnJldmlzaW9uKTsKIAogCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gRElCMDA3MF9QMUQpIHsKLQkJZHByaW50ayggIkVycm9yOiB0aGlzIGRyaXZlciBpcyBub3QgdG8gYmUgdXNlZCBtZWFudCBmb3IgUDFEIG9yIGVhcmxpZXIiKTsKKwkJZHByaW50aygiRXJyb3I6IHRoaXMgZHJpdmVyIGlzIG5vdCB0byBiZSB1c2VkIG1lYW50IGZvciBQMUQgb3IgZWFybGllciIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ5OCw3ICs2MjAsNyBAQAogCXdoaWxlIChsKSB7CiAJCXIgPSBwZ21fcmVhZF93b3JkKG4rKyk7CiAJCWRvIHsKLQkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAodTgpciwgcGdtX3JlYWRfd29yZChuKyspKTsKKwkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAodTgpIHIsIHBnbV9yZWFkX3dvcmQobisrKSk7CiAJCQlyKys7CiAJCX0gd2hpbGUgKC0tbCk7CiAJCWwgPSBwZ21fcmVhZF93b3JkKG4rKyk7CkBAIC01MTQsMjQgKzYzNiwyNSBAQAogCXIgfD0gc3RhdGUtPmNmZy0+b3NjX2J1ZmZlcl9zdGF0ZSA8PCAzOwogCiAJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTAsIHIpOwotCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFmLCAoMSA8PCA4KSB8ICgoc3RhdGUtPmNmZy0+Y2xvY2tfcGFkX2RyaXZlICYgMHhmKSA8PCA0KSk7CisJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWYsICgxIDw8IDgpIHwgKChzdGF0ZS0+Y2ZnLT5jbG9ja19wYWRfZHJpdmUgJiAweGYpIDw8IDUpKTsKIAogCWlmIChzdGF0ZS0+Y2ZnLT5pbnZlcnRfaXEpIHsKIAkJciA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MDIpICYgMHhmZmRmOwogCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwMiwgciB8ICgxIDw8IDUpKTsKIAl9CiAKLQogCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gRElCMDA3MFNfUDFBKQotCQlkaWIwMDcwX3NldF9jdHJsX2xvNShzdGF0ZS0+ZmUsIDQsIDcsIDMsIDEpOworCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgMiwgNCwgMywgMCk7CiAJZWxzZQotCQlkaWIwMDcwX3NldF9jdHJsX2xvNShzdGF0ZS0+ZmUsIDQsIDQsIDIsIDApOworCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgNSwgNCwgc3RhdGUtPmNmZy0+Y2hhcmdlX3B1bXAsIHN0YXRlLT5jZmctPmVuYWJsZV90aGlyZF9vcmRlcl9maWx0ZXIpOwogCiAJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDEsICg1NCA8PCA5KSB8IDB4YzgpOworCisJZGliMDA3MF93YmRfb2Zmc2V0X2NhbGlicmF0aW9uKHN0YXRlKTsKKwogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgZGliMDA3MF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCWtmcmVlKGZlLT50dW5lcl9wcml2KTsKQEAgLTUzOSwyMyArNjYyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBkaWIwMDcwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBkaWIwMDcwX29wcyA9IHsKIAkuaW5mbyA9IHsKLQkJLm5hbWUgICAgICAgICAgID0gIkRpQmNvbSBEaUIwMDcwIiwKLQkJLmZyZXF1ZW5jeV9taW4gID0gIDQ1MDAwMDAwLAotCQkuZnJlcXVlbmN5X21heCAgPSA4NjAwMDAwMDAsCi0JCS5mcmVxdWVuY3lfc3RlcCA9ICAgICAgMTAwMCwKLQl9LAotCS5yZWxlYXNlICAgICAgID0gZGliMDA3MF9yZWxlYXNlLAorCQkgLm5hbWUgPSAiRGlCY29tIERpQjAwNzAiLAorCQkgLmZyZXF1ZW5jeV9taW4gPSA0NTAwMDAwMCwKKwkJIC5mcmVxdWVuY3lfbWF4ID0gODYwMDAwMDAwLAorCQkgLmZyZXF1ZW5jeV9zdGVwID0gMTAwMCwKKwkJIH0sCisJLnJlbGVhc2UgPSBkaWIwMDcwX3JlbGVhc2UsCiAKLQkuaW5pdCAgICAgICAgICA9IGRpYjAwNzBfd2FrZXVwLAotCS5zbGVlcCAgICAgICAgID0gZGliMDA3MF9zbGVlcCwKLQkuc2V0X3BhcmFtcyAgICA9IGRpYjAwNzBfdHVuZV9kaWdpdGFsLAotLy8JLmdldF9mcmVxdWVuY3kgPSBkaWIwMDcwX2dldF9mcmVxdWVuY3ksCi0vLwkuZ2V0X2JhbmR3aWR0aCA9IGRpYjAwNzBfZ2V0X2JhbmR3aWR0aAorCS5pbml0ID0gZGliMDA3MF93YWtldXAsCisJLnNsZWVwID0gZGliMDA3MF9zbGVlcCwKKwkuc2V0X3BhcmFtcyA9IGRpYjAwNzBfdHVuZSwKKworLy8gICAgICAuZ2V0X2ZyZXF1ZW5jeSA9IGRpYjAwNzBfZ2V0X2ZyZXF1ZW5jeSwKKy8vICAgICAgLmdldF9iYW5kd2lkdGggPSBkaWIwMDcwX2dldF9iYW5kd2lkdGgKIH07CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZykKIHsKIAlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGliMDA3MF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQpAQCAtNTYzLDI1ICs2ODcsMjQgQEAKIAogCXN0YXRlLT5jZmcgPSBjZmc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKLQlzdGF0ZS0+ZmUgID0gZmU7CisJc3RhdGUtPmZlID0gZmU7CiAJZmUtPnR1bmVyX3ByaXYgPSBzdGF0ZTsKIAotCWlmIChkaWIwMDcwX3Jlc2V0KHN0YXRlKSAhPSAwKQorCWlmIChkaWIwMDcwX3Jlc2V0KGZlKSAhPSAwKQogCQlnb3RvIGZyZWVfbWVtOwogCi0JZGliMDA3MF93YmRfY2FsaWJyYXRpb24oZmUpOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiRGlCMDA3MDogc3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWRcbiIpOwogCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZkaWIwMDcwX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CiAKIAlmZS0+dHVuZXJfcHJpdiA9IHN0YXRlOwogCXJldHVybiBmZTsKIAotZnJlZV9tZW06CisgZnJlZV9tZW06CiAJa2ZyZWUoc3RhdGUpOwogCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKIAlyZXR1cm4gTlVMTDsKIH0KKwogRVhQT1JUX1NZTUJPTChkaWIwMDcwX2F0dGFjaCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYm9ldHRjaGVyQGRpYmNvbS5mcj4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCmluZGV4IDk2NzBmNWQuLjhhMmUxZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaApAQCAtMTUsNiArMTUsMTEgQEAKIAogI2RlZmluZSBERUZBVUxUX0RJQjAwNzBfSTJDX0FERFJFU1MgMHg2MAogCitzdHJ1Y3QgZGliMDA3MF93YmRfZ2Fpbl9jZmcgeworCXUxNiBmcmVxOworCXUxNiB3YmRfZ2Fpbl92YWw7Cit9OworCiBzdHJ1Y3QgZGliMDA3MF9jb25maWcgewogCXU4IGkyY19hZGRyZXNzOwogCkBAIC0yNiwyNiArMzEsMjggQEAKIAlpbnQgZnJlcV9vZmZzZXRfa2h6X3VoZjsKIAlpbnQgZnJlcV9vZmZzZXRfa2h6X3ZoZjsKIAotCXU4IG9zY19idWZmZXJfc3RhdGU7IC8qIDA9IG5vcm1hbCwgMT0gdHJpLXN0YXRlICovCi0JdTMyICBjbG9ja19raHo7Ci0JdTggY2xvY2tfcGFkX2RyaXZlOyAvKiAoRHJpdmUgKyAxKSAqIDJtQSAqLworCXU4IG9zY19idWZmZXJfc3RhdGU7CS8qIDA9IG5vcm1hbCwgMT0gdHJpLXN0YXRlICovCisJdTMyIGNsb2NrX2toejsKKwl1OCBjbG9ja19wYWRfZHJpdmU7CS8qIChEcml2ZSArIDEpICogMm1BICovCiAKLQl1OCBpbnZlcnRfaXE7IC8qIGludmVydCBRIC0gaW4gY2FzZSBJIG9yIFEgaXMgaW52ZXJ0ZWQgb24gdGhlIGJvYXJkICovCisJdTggaW52ZXJ0X2lxOwkJLyogaW52ZXJ0IFEgLSBpbiBjYXNlIEkgb3IgUSBpcyBpbnZlcnRlZCBvbiB0aGUgYm9hcmQgKi8KIAotCXU4IGZvcmNlX2NyeXN0YWxfbW9kZTsgLyogaWYgPT0gMCAtPiBkZWNpc2lvbiBpcyBtYWRlIGluIHRoZSBkcml2ZXIgZGVmYXVsdDogPDI0IC0+IDIsID49MjQgLT4gMSAqLworCXU4IGZvcmNlX2NyeXN0YWxfbW9kZTsJLyogaWYgPT0gMCAtPiBkZWNpc2lvbiBpcyBtYWRlIGluIHRoZSBkcml2ZXIgZGVmYXVsdDogPDI0IC0+IDIsID49MjQgLT4gMSAqLwogCiAJdTggZmxpcF9jaGlwOworCXU4IGVuYWJsZV90aGlyZF9vcmRlcl9maWx0ZXI7CisJdTggY2hhcmdlX3B1bXA7CisKKwljb25zdCBzdHJ1Y3QgZGliMDA3MF93YmRfZ2Fpbl9jZmcgKndiZF9nYWluOworCisJdTggdmdhX2ZpbHRlcjsKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfRElCMDA3MCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKLQkJCQkJICAgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpOworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpOwogZXh0ZXJuIHUxNiBkaWIwMDcwX3diZF9vZmZzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKLQkJCQkJCSAgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CkBAIC01Nyw1ICs2NCw2IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAjZW5kaWYKK2V4dGVybiB2b2lkIGRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggb3Blbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwppbmRleCBmYzk2ZmJmLi41NWVmNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCisjaW5jbHVkZSAiZHZiX21hdGguaCIKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKIAogI2luY2x1ZGUgImRpYjcwMDBwLmgiCkBAIC0xMjE3LDcgKzEyMTgsMzcgQEAKIAogc3RhdGljIGludCBkaWI3MDAwcF9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2ICpzbnIpCiB7Ci0JKnNuciA9IDB4MDAwMDsKKwlzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHZhbDsKKwlzMzIgc2lnbmFsX21hbnQsIHNpZ25hbF9leHAsIG5vaXNlX21hbnQsIG5vaXNlX2V4cDsKKwl1MzIgcmVzdWx0ID0gMDsKKworCXZhbCA9IGRpYjcwMDBwX3JlYWRfd29yZChzdGF0ZSwgNDc5KTsKKwlub2lzZV9tYW50ID0gKHZhbCA+PiA0KSAmIDB4ZmY7CisJbm9pc2VfZXhwID0gKCh2YWwgJiAweGYpIDw8IDIpOworCXZhbCA9IGRpYjcwMDBwX3JlYWRfd29yZChzdGF0ZSwgNDgwKTsKKwlub2lzZV9leHAgKz0gKCh2YWwgPj4gMTQpICYgMHgzKTsKKwlpZiAoKG5vaXNlX2V4cCAmIDB4MjApICE9IDApCisJCW5vaXNlX2V4cCAtPSAweDQwOworCisJc2lnbmFsX21hbnQgPSAodmFsID4+IDYpICYgMHhGRjsKKwlzaWduYWxfZXhwICA9ICh2YWwgJiAweDNGKTsKKwlpZiAoKHNpZ25hbF9leHAgJiAweDIwKSAhPSAwKQorCQlzaWduYWxfZXhwIC09IDB4NDA7CisKKwlpZiAoc2lnbmFsX21hbnQgIT0gMCkKKwkJcmVzdWx0ID0gaW50bG9nMTAoMikgKiAxMCAqIHNpZ25hbF9leHAgKyAxMCAqCisJCQlpbnRsb2cxMChzaWduYWxfbWFudCk7CisJZWxzZQorCQlyZXN1bHQgPSBpbnRsb2cxMCgyKSAqIDEwICogc2lnbmFsX2V4cCAtIDEwMDsKKworCWlmIChub2lzZV9tYW50ICE9IDApCisJCXJlc3VsdCAtPSBpbnRsb2cxMCgyKSAqIDEwICogbm9pc2VfZXhwICsgMTAgKgorCQkJaW50bG9nMTAobm9pc2VfbWFudCk7CisJZWxzZQorCQlyZXN1bHQgLT0gaW50bG9nMTAoMikgKiAxMCAqIG5vaXNlX2V4cCAtIDEwMDsKKworCSpzbnIgPSByZXN1bHQgLyAoKDEgPDwgMjQpIC8gMTApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTJjNzkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYwpAQCAtMCwwICsxLDIyNzcgQEAKKy8qCisgKiBMaW51eC1EVkIgRHJpdmVyIGZvciBEaUJjb20ncyBEaUI4MDAwIGNoaXAgKElTREItVCkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpQmNvbSAoaHR0cDovL3d3dy5kaWJjb20uZnIvKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfbWF0aC5oIgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNpbmNsdWRlICJkaWI4MDAwLmgiCisKKyNkZWZpbmUgTEFZRVJfQUxMIC0xCisjZGVmaW5lIExBWUVSX0EgICAxCisjZGVmaW5lIExBWUVSX0IgICAyCisjZGVmaW5lIExBWUVSX0MgICAzCisKKyNkZWZpbmUgRkVfQ0FMTEJBQ0tfVElNRV9ORVZFUiAweGZmZmZmZmZmCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAidHVybiBvbiBkZWJ1Z2dpbmcgKGRlZmF1bHQ6IDApIik7CisKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBkbyB7IGlmIChkZWJ1ZykgeyBwcmludGsoS0VSTl9ERUJVRyAiRGlCODAwMDogIik7IHByaW50ayhhcmdzKTsgcHJpbnRrKCJcbiIpOyB9IH0gd2hpbGUgKDApCisKK2VudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSB7CisJQ1RfQUdDX1NUQVJUID0gMjAsCisJQ1RfQUdDX1NURVBfMCwKKwlDVF9BR0NfU1RFUF8xLAorCUNUX0FHQ19TVEVQXzIsCisJQ1RfQUdDX1NURVBfMywKKwlDVF9BR0NfU1RFUF80LAorCUNUX0FHQ19TVE9QLAorCisJQ1RfREVNT0RfU1RBUlQgPSAzMCwKK307CisKKyNkZWZpbmUgRkVfU1RBVFVTX1RVTkVfRkFJTEVEIDAKKworc3RydWN0IGkyY19kZXZpY2UgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKKwl1OCBhZGRyOworfTsKKworc3RydWN0IGRpYjgwMDBfc3RhdGUgeworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZmU7CisJc3RydWN0IGRpYjgwMDBfY29uZmlnIGNmZzsKKworCXN0cnVjdCBpMmNfZGV2aWNlIGkyYzsKKworCXN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgaTJjX21hc3RlcjsKKworCXUxNiB3YmRfcmVmOworCisJdTggY3VycmVudF9iYW5kOworCXUzMiBjdXJyZW50X2JhbmR3aWR0aDsKKwlzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnICpjdXJyZW50X2FnYzsKKwl1MzIgdGltZjsKKwl1MzIgdGltZl9kZWZhdWx0OworCisJdTggZGl2X2ZvcmNlX29mZjoxOworCXU4IGRpdl9zdGF0ZToxOworCXUxNiBkaXZfc3luY193YWl0OworCisJdTggYWdjX3N0YXRlOworCXU4IGRpZmZlcmVudGlhbF9jb25zdGVsbGF0aW9uOworCXU4IGRpdmVyc2l0eV9vbm9mZjsKKworCXMxNiBiZXJfbW9uaXRvcmVkX2xheWVyOworCXUxNiBncGlvX2RpcjsKKwl1MTYgZ3Bpb192YWw7CisKKwl1MTYgcmV2aXNpb247CisJdTggaXNkYnRfY2ZnX2xvYWRlZDsKKwllbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZTsKKwl1MzIgc3RhdHVzOworfTsKKworZW51bSBkaWI4MDAwX3Bvd2VyX21vZGUgeworCURJQjgwMDBNX1BPV0VSX0FMTCA9IDAsCisJRElCODAwME1fUE9XRVJfSU5URVJGQUNFX09OTFksCit9OworCitzdGF0aWMgdTE2IGRpYjgwMDBfaTJjX3JlYWQxNihzdHJ1Y3QgaTJjX2RldmljZSAqaTJjLCB1MTYgcmVnKQoreworCXU4IHdiWzJdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OworCXU4IHJiWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJey5hZGRyID0gaTJjLT5hZGRyID4+IDEsLmZsYWdzID0gMCwuYnVmID0gd2IsLmxlbiA9IDJ9LAorCQl7LmFkZHIgPSBpMmMtPmFkZHIgPj4gMSwuZmxhZ3MgPSBJMkNfTV9SRCwuYnVmID0gcmIsLmxlbiA9IDJ9LAorCX07CisKKwlpZiAoaTJjX3RyYW5zZmVyKGkyYy0+YWRhcCwgbXNnLCAyKSAhPSAyKQorCQlkcHJpbnRrKCJpMmMgcmVhZCBlcnJvciBvbiAlZCIsIHJlZyk7CisKKwlyZXR1cm4gKHJiWzBdIDw8IDgpIHwgcmJbMV07Cit9CisKK3N0YXRpYyB1MTYgZGliODAwMF9yZWFkX3dvcmQoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKQoreworCXJldHVybiBkaWI4MDAwX2kyY19yZWFkMTYoJnN0YXRlLT5pMmMsIHJlZyk7Cit9CisKK3N0YXRpYyB1MzIgZGliODAwMF9yZWFkMzIoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKQoreworCXUxNiByd1syXTsKKworCXJ3WzBdID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIHJlZyArIDApOworCXJ3WzFdID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIHJlZyArIDEpOworCisJcmV0dXJuICgocndbMF0gPDwgMTYpIHwgKHJ3WzFdKSk7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9pMmNfd3JpdGUxNihzdHJ1Y3QgaTJjX2RldmljZSAqaTJjLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXU4IGJbNF0gPSB7CisJCShyZWcgPj4gOCkgJiAweGZmLCByZWcgJiAweGZmLAorCQkodmFsID4+IDgpICYgMHhmZiwgdmFsICYgMHhmZiwKKwl9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBpMmMtPmFkZHIgPj4gMSwuZmxhZ3MgPSAwLC5idWYgPSBiLC5sZW4gPSA0CisJfTsKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKGkyYy0+YWRhcCwgJm1zZywgMSkgIT0gMSA/IC1FUkVNT1RFSU8gOiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfd3JpdGVfd29yZChzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJcmV0dXJuIGRpYjgwMDBfaTJjX3dyaXRlMTYoJnN0YXRlLT5pMmMsIHJlZywgdmFsKTsKK30KKworY29uc3QgaW50MTZfdCBjb2VmZl8ya19zYl8xc2VnX2RxcHNrWzhdID0geworCSg3NjkgPDwgNSkgfCAweDBhLCAoNzQ1IDw8IDUpIHwgMHgwMywgKDU5NSA8PCA1KSB8IDB4MGQsICg3NjkgPDwgNSkgfCAweDBhLCAoOTIwIDw8IDUpIHwgMHgwOSwgKDc4NCA8PCA1KSB8IDB4MDIsICg1MTkgPDwgNSkgfCAweDBjLAorCSAgICAoOTIwIDw8IDUpIHwgMHgwOQorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl8ya19zYl8xc2VnWzhdID0geworCSg2OTIgPDwgNSkgfCAweDBiLCAoNjgzIDw8IDUpIHwgMHgwMSwgKDUxOSA8PCA1KSB8IDB4MDksICg2OTIgPDwgNSkgfCAweDBiLCAwIHwgMHgxZiwgMCB8IDB4MWYsIDAgfCAweDFmLCAwIHwgMHgxZgorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl8ya19zYl8zc2VnXzBkcXBza18xZHFwc2tbOF0gPSB7CisJKDgzMiA8PCA1KSB8IDB4MTAsICg5MTIgPDwgNSkgfCAweDA1LCAoOTAwIDw8IDUpIHwgMHgxMiwgKDgzMiA8PCA1KSB8IDB4MTAsICgtOTMxIDw8IDUpIHwgMHgwZiwgKDkxMiA8PCA1KSB8IDB4MDQsICg4MDcgPDwgNSkgfCAweDExLAorCSAgICAoLTkzMSA8PCA1KSB8IDB4MGYKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfM3NlZ18wZHFwc2tbOF0gPSB7CisJKDYyMiA8PCA1KSB8IDB4MGMsICg5NDEgPDwgNSkgfCAweDA0LCAoNzk2IDw8IDUpIHwgMHgxMCwgKDYyMiA8PCA1KSB8IDB4MGMsICg5ODIgPDwgNSkgfCAweDBjLCAoNTE5IDw8IDUpIHwgMHgwMiwgKDU3MiA8PCA1KSB8IDB4MGUsCisJICAgICg5ODIgPDwgNSkgfCAweDBjCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzJrX3NiXzNzZWdfMWRxcHNrWzhdID0geworCSg2OTkgPDwgNSkgfCAweDE0LCAoNjA3IDw8IDUpIHwgMHgwNCwgKDk0NCA8PCA1KSB8IDB4MTMsICg2OTkgPDwgNSkgfCAweDE0LCAoLTcyMCA8PCA1KSB8IDB4MGQsICg2NDAgPDwgNSkgfCAweDAzLCAoODY2IDw8IDUpIHwgMHgxMiwKKwkgICAgKC03MjAgPDwgNSkgfCAweDBkCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzJrX3NiXzNzZWdbOF0gPSB7CisJKDY2NCA8PCA1KSB8IDB4MGMsICg5MjUgPDwgNSkgfCAweDAzLCAoOTM3IDw8IDUpIHwgMHgxMCwgKDY2NCA8PCA1KSB8IDB4MGMsICgtNjEwIDw8IDUpIHwgMHgwYSwgKDY5NyA8PCA1KSB8IDB4MDEsICg4MzYgPDwgNSkgfCAweDBlLAorCSAgICAoLTYxMCA8PCA1KSB8IDB4MGEKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfNGtfc2JfMXNlZ19kcXBza1s4XSA9IHsKKwkoLTk1NSA8PCA1KSB8IDB4MGUsICg2ODcgPDwgNSkgfCAweDA0LCAoODE4IDw8IDUpIHwgMHgxMCwgKC05NTUgPDwgNSkgfCAweDBlLCAoLTkyMiA8PCA1KSB8IDB4MGQsICg3NTAgPDwgNSkgfCAweDAzLCAoNjY1IDw8IDUpIHwgMHgwZiwKKwkgICAgKC05MjIgPDwgNSkgfCAweDBkCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzFzZWdbOF0gPSB7CisJKDYzOCA8PCA1KSB8IDB4MGQsICg2ODMgPDwgNSkgfCAweDAyLCAoNjM4IDw8IDUpIHwgMHgwZCwgKDYzOCA8PCA1KSB8IDB4MGQsICgtNjU1IDw8IDUpIHwgMHgwYSwgKDUxNyA8PCA1KSB8IDB4MDAsICg2OTggPDwgNSkgfCAweDBkLAorCSAgICAoLTY1NSA8PCA1KSB8IDB4MGEKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfNGtfc2JfM3NlZ18wZHFwc2tfMWRxcHNrWzhdID0geworCSgtNzA3IDw8IDUpIHwgMHgxNCwgKDkxMCA8PCA1KSB8IDB4MDYsICg4ODkgPDwgNSkgfCAweDE2LCAoLTcwNyA8PCA1KSB8IDB4MTQsICgtOTU4IDw8IDUpIHwgMHgxMywgKDk5MyA8PCA1KSB8IDB4MDUsICg1MjMgPDwgNSkgfCAweDE0LAorCSAgICAoLTk1OCA8PCA1KSB8IDB4MTMKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfNGtfc2JfM3NlZ18wZHFwc2tbOF0gPSB7CisJKC03MjMgPDwgNSkgfCAweDEzLCAoOTEwIDw8IDUpIHwgMHgwNSwgKDc3NyA8PCA1KSB8IDB4MTQsICgtNzIzIDw8IDUpIHwgMHgxMywgKC01NjggPDwgNSkgfCAweDBmLCAoNTQ3IDw8IDUpIHwgMHgwMywgKDY5NiA8PCA1KSB8IDB4MTIsCisJICAgICgtNTY4IDw8IDUpIHwgMHgwZgorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8zc2VnXzFkcXBza1s4XSA9IHsKKwkoLTk0MCA8PCA1KSB8IDB4MTUsICg2MDcgPDwgNSkgfCAweDA1LCAoOTE1IDw8IDUpIHwgMHgxNiwgKC05NDAgPDwgNSkgfCAweDE1LCAoLTg0OCA8PCA1KSB8IDB4MTMsICg2ODMgPDwgNSkgfCAweDA0LCAoNTQzIDw8IDUpIHwgMHgxNCwKKwkgICAgKC04NDggPDwgNSkgfCAweDEzCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzNzZWdbOF0gPSB7CisJKDYxMiA8PCA1KSB8IDB4MTIsICg5MTAgPDwgNSkgfCAweDA0LCAoODY0IDw8IDUpIHwgMHgxNCwgKDYxMiA8PCA1KSB8IDB4MTIsICgtODY5IDw8IDUpIHwgMHgxMywgKDY4MyA8PCA1KSB8IDB4MDIsICg4NjkgPDwgNSkgfCAweDEyLAorCSAgICAoLTg2OSA8PCA1KSB8IDB4MTMKK307CisKK2NvbnN0IGludDE2X3QgY29lZmZfOGtfc2JfMXNlZ19kcXBza1s4XSA9IHsKKwkoLTgzNSA8PCA1KSB8IDB4MTIsICg2ODQgPDwgNSkgfCAweDA1LCAoNzM1IDw8IDUpIHwgMHgxNCwgKC04MzUgPDwgNSkgfCAweDEyLCAoLTU5OCA8PCA1KSB8IDB4MTAsICg3ODEgPDwgNSkgfCAweDA0LCAoNzM5IDw8IDUpIHwgMHgxMywKKwkgICAgKC01OTggPDwgNSkgfCAweDEwCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzFzZWdbOF0gPSB7CisJKDY3MyA8PCA1KSB8IDB4MGYsICg2ODMgPDwgNSkgfCAweDAzLCAoODA4IDw8IDUpIHwgMHgxMiwgKDY3MyA8PCA1KSB8IDB4MGYsICg1ODUgPDwgNSkgfCAweDBmLCAoNTEyIDw8IDUpIHwgMHgwMSwgKDc4MCA8PCA1KSB8IDB4MGYsCisJICAgICg1ODUgPDwgNSkgfCAweDBmCit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzNzZWdfMGRxcHNrXzFkcXBza1s4XSA9IHsKKwkoODYzIDw8IDUpIHwgMHgxNywgKDkzMCA8PCA1KSB8IDB4MDcsICg4NzggPDwgNSkgfCAweDE5LCAoODYzIDw8IDUpIHwgMHgxNywgKDAgPDwgNSkgfCAweDE0LCAoNTIxIDw8IDUpIHwgMHgwNSwgKDk4MCA8PCA1KSB8IDB4MTgsCisJICAgICgwIDw8IDUpIHwgMHgxNAorfTsKKworY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8zc2VnXzBkcXBza1s4XSA9IHsKKwkoLTkyNCA8PCA1KSB8IDB4MTcsICg5MTAgPDwgNSkgfCAweDA2LCAoNzc0IDw8IDUpIHwgMHgxNywgKC05MjQgPDwgNSkgfCAweDE3LCAoLTg3NyA8PCA1KSB8IDB4MTUsICg1NjUgPDwgNSkgfCAweDA0LCAoNTUzIDw8IDUpIHwgMHgxNSwKKwkgICAgKC04NzcgPDwgNSkgfCAweDE1Cit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzNzZWdfMWRxcHNrWzhdID0geworCSgtOTIxIDw8IDUpIHwgMHgxOSwgKDYwNyA8PCA1KSB8IDB4MDYsICg4ODEgPDwgNSkgfCAweDE5LCAoLTkyMSA8PCA1KSB8IDB4MTksICgtOTIxIDw8IDUpIHwgMHgxNCwgKDcxMyA8PCA1KSB8IDB4MDUsICgxMDE4IDw8IDUpIHwgMHgxOCwKKwkgICAgKC05MjEgPDwgNSkgfCAweDE0Cit9OworCitjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzNzZWdbOF0gPSB7CisJKDUxNCA8PCA1KSB8IDB4MTQsICg5MTAgPDwgNSkgfCAweDA1LCAoODYxIDw8IDUpIHwgMHgxNywgKDUxNCA8PCA1KSB8IDB4MTQsICg2OTAgPDwgNSkgfCAweDE0LCAoNjgzIDw8IDUpIHwgMHgwMywgKDY2MiA8PCA1KSB8IDB4MTUsCisJICAgICg2OTAgPDwgNSkgfCAweDE0Cit9OworCitjb25zdCBpbnQxNl90IGFuYV9mZV9jb2VmZl8zc2VnWzI0XSA9IHsKKwk4MSwgODAsIDc4LCA3NCwgNjgsIDYxLCA1NCwgNDUsIDM3LCAyOCwgMTksIDExLCA0LCAxMDIyLCAxMDE3LCAxMDEzLCAxMDEwLCAxMDA4LCAxMDA4LCAxMDA4LCAxMDA4LCAxMDEwLCAxMDE0LCAxMDE3Cit9OworCitjb25zdCBpbnQxNl90IGFuYV9mZV9jb2VmZl8xc2VnWzI0XSA9IHsKKwkyNDksIDIyNiwgMTY0LCA4MiwgNSwgOTgxLCA5NzAsIDk4OCwgMTAxOCwgMjAsIDMxLCAyNiwgOCwgMTAxMiwgMTAwMCwgMTAxOCwgMTAxMiwgOCwgMTUsIDE0LCA5LCAzLCAxMDE3LCAxMDAzCit9OworCitjb25zdCBpbnQxNl90IGFuYV9mZV9jb2VmZl8xM3NlZ1syNF0gPSB7CisJMzk2LCAzMDUsIDEwNSwgLTUxLCAtNzcsIC0xMiwgNDEsIDMxLCAtMTEsIC0zMCwgLTExLCAxNCwgMTUsIC0yLCAtMTMsIC03LCA1LCA4LCAxLCAtNiwgLTcsIC0zLCAwLCAxCit9OworCitzdGF0aWMgdTE2IGZmdF90b19tb2RlKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKK3sKKwl1MTYgbW9kZTsKKwlzd2l0Y2ggKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUpIHsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgorCQltb2RlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzoKKwkJbW9kZSA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOgorCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6CisJCW1vZGUgPSAzOworCQlicmVhazsKKwl9CisJcmV0dXJuIG1vZGU7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjgwMDBfc2V0X2FjcXVpc2l0aW9uX21vZGUoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlKQoreworCXUxNiBudWQgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjk4KTsKKwludWQgfD0gKDEgPDwgMykgfCAoMSA8PCAwKTsKKwlkcHJpbnRrKCJhY3F1aXNpdGlvbiBtb2RlIGFjdGl2YXRlZCIpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjk4LCBudWQpOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2V0X291dHB1dF9tb2RlKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpCit7CisJdTE2IG91dHJlZywgZmlmb190aHJlc2hvbGQsIHNtb19tb2RlLCBzcmFtID0gMHgwMjA1OwkvKiBieSBkZWZhdWx0IFNEUkFNIGRlaW50bHYgaXMgZW5hYmxlZCAqLworCisJb3V0cmVnID0gMDsKKwlmaWZvX3RocmVzaG9sZCA9IDE3OTI7CisJc21vX21vZGUgPSAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI5OSkgJiAweDAwNTApIHwgKDEgPDwgMSk7CisKKwlkcHJpbnRrKCItSS0gIFNldHRpbmcgb3V0cHV0IG1vZGUgZm9yIGRlbW9kICVwIHRvICVkIiwgJnN0YXRlLT5mZSwgbW9kZSk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE9VVE1PREVfTVBFRzJfUEFSX0dBVEVEX0NMSzoJLy8gU1RCcyB3aXRoIHBhcmFsbGVsIGdhdGVkIGNsb2NrCisJCW91dHJlZyA9ICgxIDw8IDEwKTsJLyogMHgwNDAwICovCisJCWJyZWFrOworCWNhc2UgT1VUTU9ERV9NUEVHMl9QQVJfQ09OVF9DTEs6CS8vIFNUQnMgd2l0aCBwYXJhbGxlbCBjb250aW51ZXMgY2xvY2sKKwkJb3V0cmVnID0gKDEgPDwgMTApIHwgKDEgPDwgNik7CS8qIDB4MDQ0MCAqLworCQlicmVhazsKKwljYXNlIE9VVE1PREVfTVBFRzJfU0VSSUFMOgkvLyBTVEJzIHdpdGggc2VyaWFsIGlucHV0CisJCW91dHJlZyA9ICgxIDw8IDEwKSB8ICgyIDw8IDYpIHwgKDAgPDwgMSk7CS8qIDB4MDQ4MiAqLworCQlicmVhazsKKwljYXNlIE9VVE1PREVfRElWRVJTSVRZOgorCQlpZiAoc3RhdGUtPmNmZy5ob3N0YnVzX2RpdmVyc2l0eSkgeworCQkJb3V0cmVnID0gKDEgPDwgMTApIHwgKDQgPDwgNik7CS8qIDB4MDUwMCAqLworCQkJc3JhbSAmPSAweGZkZmY7CisJCX0gZWxzZQorCQkJc3JhbSB8PSAweDBjMDA7CisJCWJyZWFrOworCWNhc2UgT1VUTU9ERV9NUEVHMl9GSUZPOgkvLyBlLmcuIFVTQiBmZWVkaW5nCisJCXNtb19tb2RlIHw9ICgzIDw8IDEpOworCQlmaWZvX3RocmVzaG9sZCA9IDUxMjsKKwkJb3V0cmVnID0gKDEgPDwgMTApIHwgKDUgPDwgNik7CisJCWJyZWFrOworCWNhc2UgT1VUTU9ERV9ISUdIX1o6CS8vIGRpc2FibGUKKwkJb3V0cmVnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIE9VVE1PREVfQU5BTE9HX0FEQzoKKwkJb3V0cmVnID0gKDEgPDwgMTApIHwgKDMgPDwgNik7CisJCWRpYjgwMDBfc2V0X2FjcXVpc2l0aW9uX21vZGUoc3RhdGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRwcmludGsoIlVuaGFuZGxlZCBvdXRwdXRfbW9kZSBwYXNzZWQgdG8gYmUgc2V0IGZvciBkZW1vZCAlcCIsICZzdGF0ZS0+ZmUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RhdGUtPmNmZy5vdXRwdXRfbXBlZzJfaW5fMTg4X2J5dGVzKQorCQlzbW9fbW9kZSB8PSAoMSA8PCA1KTsKKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjk5LCBzbW9fbW9kZSk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMDAsIGZpZm9fdGhyZXNob2xkKTsJLyogc3luY2hyb25vdXMgZnJlYWQgKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODYsIG91dHJlZyk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMjkxLCBzcmFtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2V0X2RpdmVyc2l0eV9pbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBzeW5jX3dhaXQgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjczKSAmIDB4ZmZmMDsKKworCWlmICghc3RhdGUtPmRpZmZlcmVudGlhbF9jb25zdGVsbGF0aW9uKSB7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcyLCAxIDw8IDkpOwkvL2R2c3lfb2ZmX2xtb2Q0ID0gMQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3Mywgc3luY193YWl0IHwgKDEgPDwgMikgfCAyKTsJLy8gc3luY19lbmFibGUgPSAxOyBjb21iX21vZGUgPSAyCisJfSBlbHNlIHsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzIsIDApOwkvL2R2c3lfb2ZmX2xtb2Q0ID0gMAorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3Mywgc3luY193YWl0KTsJLy8gc3luY19lbmFibGUgPSAwOyBjb21iX21vZGUgPSAwCisJfQorCXN0YXRlLT5kaXZlcnNpdHlfb25vZmYgPSBvbm9mZjsKKworCXN3aXRjaCAob25vZmYpIHsKKwljYXNlIDA6CQkvKiBvbmx5IHVzZSB0aGUgaW50ZXJuYWwgd2F5IC0gbm90IHRoZSBkaXZlcnNpdHkgaW5wdXQgKi8KKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzAsIDEpOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3MSwgMCk7CisJCWJyZWFrOworCWNhc2UgMToJCS8qIGJvdGggd2F5cyAqLworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3MCwgNik7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcxLCA2KTsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLyogb25seSB0aGUgZGl2ZXJzaXR5IGlucHV0ICovCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjcwLCAwKTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzEsIDEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjgwMDBfc2V0X3Bvd2VyX21vZGUoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlLCBlbnVtIGRpYjgwMDBfcG93ZXJfbW9kZSBtb2RlKQoreworCS8qIGJ5IGRlZmF1bHQgZXZlcnl0aGluZyBpcyBnb2luZyB0byBiZSBwb3dlcmVkIG9mZiAqLworCXUxNiByZWdfNzc0ID0gMHgzZmZmLCByZWdfNzc1ID0gMHhmZmZmLCByZWdfNzc2ID0gMHhmZmZmLAorCSAgICByZWdfOTAwID0gKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA5MDApICYgMHhmZmZjKSB8IDB4MywgcmVnXzEyODAgPSAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDEyODApICYgMHgwMGZmKSB8IDB4ZmYwMDsKKworCS8qIG5vdywgZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0ZWQgbW9kZSwgd2UgcG93ZXIgb24gKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwkJLyogcG93ZXIgdXAgZXZlcnl0aGluZyBpbiB0aGUgZGVtb2QgKi8KKwljYXNlIERJQjgwMDBNX1BPV0VSX0FMTDoKKwkJcmVnXzc3NCA9IDB4MDAwMDsKKwkJcmVnXzc3NSA9IDB4MDAwMDsKKwkJcmVnXzc3NiA9IDB4MDAwMDsKKwkJcmVnXzkwMCAmPSAweGZmZmM7CisJCXJlZ18xMjgwICY9IDB4MDBmZjsKKwkJYnJlYWs7CisJY2FzZSBESUI4MDAwTV9QT1dFUl9JTlRFUkZBQ0VfT05MWToKKwkJcmVnXzEyODAgJj0gMHgwMGZmOworCQlicmVhazsKKwl9CisKKwlkcHJpbnRrKCJwb3dlcm1vZGUgOiA3NzQgOiAleCA7IDc3NSA6ICV4OyA3NzYgOiAleCA7IDkwMCA6ICV4OyAxMjgwIDogJXgiLCByZWdfNzc0LCByZWdfNzc1LCByZWdfNzc2LCByZWdfOTAwLCByZWdfMTI4MCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzQsIHJlZ183NzQpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzc1LCByZWdfNzc1KTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc3NiwgcmVnXzc3Nik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDAsIHJlZ185MDApOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTI4MCwgcmVnXzEyODApOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2V0X2FkY19zdGF0ZShzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIGVudW0gZGlieDAwMF9hZGNfc3RhdGVzIG5vKQoreworCWludCByZXQgPSAwOworCXUxNiByZWdfOTA3ID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDkwNyksIHJlZ185MDggPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgOTA4KTsKKworCXN3aXRjaCAobm8pIHsKKwljYXNlIERJQlgwMDBfU0xPV19BRENfT046CisJCXJlZ185MDggfD0gKDEgPDwgMSkgfCAoMSA8PCAwKTsKKwkJcmV0IHw9IGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTA4LCByZWdfOTA4KTsKKwkJcmVnXzkwOCAmPSB+KDEgPDwgMSk7CisJCWJyZWFrOworCisJY2FzZSBESUJYMDAwX1NMT1dfQURDX09GRjoKKwkJcmVnXzkwOCB8PSAoMSA8PCAxKSB8ICgxIDw8IDApOworCQlicmVhazsKKworCWNhc2UgRElCWDAwMF9BRENfT046CisJCXJlZ185MDcgJj0gMHgwZmZmOworCQlyZWdfOTA4ICY9IDB4MDAwMzsKKwkJYnJlYWs7CisKKwljYXNlIERJQlgwMDBfQURDX09GRjoJLy8gbGVhdmUgdGhlIFZCRyB2b2x0YWdlIG9uCisJCXJlZ185MDcgfD0gKDEgPDwgMTQpIHwgKDEgPDwgMTMpIHwgKDEgPDwgMTIpOworCQlyZWdfOTA4IHw9ICgxIDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAzKSB8ICgxIDw8IDIpOworCQlicmVhazsKKworCWNhc2UgRElCWDAwMF9WQkdfRU5BQkxFOgorCQlyZWdfOTA3ICY9IH4oMSA8PCAxNSk7CisJCWJyZWFrOworCisJY2FzZSBESUJYMDAwX1ZCR19ESVNBQkxFOgorCQlyZWdfOTA3IHw9ICgxIDw8IDE1KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXQgfD0gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDcsIHJlZ185MDcpOworCXJldCB8PSBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkwOCwgcmVnXzkwOCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIHUzMiBidykKK3sKKwl1MzIgdGltZjsKKworCWlmIChidyA9PSAwKQorCQlidyA9IDYwMDA7CisKKwlpZiAoc3RhdGUtPnRpbWYgPT0gMCkgeworCQlkcHJpbnRrKCJ1c2luZyBkZWZhdWx0IHRpbWYiKTsKKwkJdGltZiA9IHN0YXRlLT50aW1mX2RlZmF1bHQ7CisJfSBlbHNlIHsKKwkJZHByaW50aygidXNpbmcgdXBkYXRlZCB0aW1mIik7CisJCXRpbWYgPSBzdGF0ZS0+dGltZjsKKwl9CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI5LCAodTE2KSAoKHRpbWYgPj4gMTYpICYgMHhmZmZmKSk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMCwgKHUxNikgKCh0aW1mKSAmIDB4ZmZmZikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9zYWRfY2FsaWIoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlKQoreworLyogaW50ZXJuYWwgKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkyMywgKDAgPDwgMSkgfCAoMCA8PCAwKSk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MjQsIDc3Nik7CS8vIDAuNjI1KjMuMyAvIDQwOTYKKworCS8qIGRvIHRoZSBjYWxpYnJhdGlvbiAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTIzLCAoMSA8PCAwKSk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MjMsICgwIDw8IDApKTsKKworCW1zbGVlcCgxKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRpYjgwMDBfc2V0X3diZF9yZWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpZiAodmFsdWUgPiA0MDk1KQorCQl2YWx1ZSA9IDQwOTU7CisJc3RhdGUtPndiZF9yZWYgPSB2YWx1ZTsKKwlyZXR1cm4gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMDYsIHZhbHVlKTsKK30KKworRVhQT1JUX1NZTUJPTChkaWI4MDAwX3NldF93YmRfcmVmKTsKK3N0YXRpYyB2b2lkIGRpYjgwMDBfcmVzZXRfcGxsX2NvbW1vbihzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIGNvbnN0IHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgKmJ3KQoreworCWRwcmludGsoImlmcmVxOiAlZCAleCwgaW52ZXJzaW9uOiAlZCIsIGJ3LT5pZnJlcSwgYnctPmlmcmVxLCBidy0+aWZyZXEgPj4gMjUpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjMsICh1MTYpICgoKGJ3LT5pbnRlcm5hbCAqIDEwMDApID4+IDE2KSAmIDB4ZmZmZikpOwkvKiBQX3NlY19sZW4gKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI0LCAodTE2KSAoKGJ3LT5pbnRlcm5hbCAqIDEwMDApICYgMHhmZmZmKSk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNywgKHUxNikgKChidy0+aWZyZXEgPj4gMTYpICYgMHgwMWZmKSk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyOCwgKHUxNikgKGJ3LT5pZnJlcSAmIDB4ZmZmZikpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjYsICh1MTYpICgoYnctPmlmcmVxID4+IDI1KSAmIDB4MDAwMykpOworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MjIsIGJ3LT5zYWRfY2ZnKTsKK30KKworc3RhdGljIHZvaWQgZGliODAwMF9yZXNldF9wbGwoc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgKnBsbCA9IHN0YXRlLT5jZmcucGxsOworCXUxNiBjbGtfY2ZnMTsKKworCS8vIGNsa19jZmcwCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDEsIChwbGwtPnBsbF9wcmVkaXYgPDwgOCkgfCAocGxsLT5wbGxfcmF0aW8gPDwgMCkpOworCisJLy8gY2xrX2NmZzEKKwljbGtfY2ZnMSA9ICgxIDw8IDEwKSB8ICgwIDw8IDkpIHwgKHBsbC0+SU9fQ0xLX2VuX2NvcmUgPDwgOCkgfAorCSAgICAocGxsLT5ieXBjbGtfZGl2IDw8IDUpIHwgKHBsbC0+ZW5hYmxlX3JlZmRpdiA8PCA0KSB8ICgxIDw8IDMpIHwgKHBsbC0+cGxsX3JhbmdlIDw8IDEpIHwgKHBsbC0+cGxsX3Jlc2V0IDw8IDApOworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDIsIGNsa19jZmcxKTsKKwljbGtfY2ZnMSA9IChjbGtfY2ZnMSAmIDB4ZmZmNykgfCAocGxsLT5wbGxfYnlwYXNzIDw8IDMpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTAyLCBjbGtfY2ZnMSk7CisKKwlkcHJpbnRrKCJjbGtfY2ZnMTogMHglMDR4IiwgY2xrX2NmZzEpOwkvKiAweDUwNyAxIDAgMSAwMDAgMCAwIDExIDEgKi8KKworCS8qIHNtcGxfY2ZnOiBQX3JlZmNsa3NlbD0yLCBQX2Vuc21wbHNlbD0xIG5vZGl2c21wbD0xICovCisJaWYgKHN0YXRlLT5jZmcucGxsLT5BRENsa1NyYyA9PSAwKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkwNCwgKDAgPDwgMTUpIHwgKDAgPDwgMTIpIHwgKDAgPDwgMTApIHwgKHBsbC0+bW9kdWxvIDw8IDgpIHwgKHBsbC0+QURDbGtTcmMgPDwgNykgfCAoMCA8PCAxKSk7CisJZWxzZSBpZiAoc3RhdGUtPmNmZy5yZWZjbGtzZWwgIT0gMCkKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDQsCisJCQkJICAgKDAgPDwgMTUpIHwgKDEgPDwgMTIpIHwgKChzdGF0ZS0+Y2ZnLnJlZmNsa3NlbCAmIDB4MykgPDwgMTApIHwgKHBsbC0+bW9kdWxvIDw8IDgpIHwgKHBsbC0+CisJCQkJCQkJCQkJCQkJCQlBRENsa1NyYyA8PCA3KSB8ICgwIDw8IDEpKTsKKwllbHNlCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTA0LCAoMCA8PCAxNSkgfCAoMSA8PCAxMikgfCAoMyA8PCAxMCkgfCAocGxsLT5tb2R1bG8gPDwgOCkgfCAocGxsLT5BRENsa1NyYyA8PCA3KSB8ICgwIDw8IDEpKTsKKworCWRpYjgwMDBfcmVzZXRfcGxsX2NvbW1vbihzdGF0ZSwgcGxsKTsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3Jlc2V0X2dwaW8oc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0KQoreworCS8qIHJlc2V0IHRoZSBHUElPcyAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdCwgMTAyOSwgc3QtPmNmZy5ncGlvX2Rpcik7CisJZGliODAwMF93cml0ZV93b3JkKHN0LCAxMDMwLCBzdC0+Y2ZnLmdwaW9fdmFsKTsKKworCS8qIFRPRE8gNzgyIGlzIFBfZ3Bpb19vZCAqLworCisJZGliODAwMF93cml0ZV93b3JkKHN0LCAxMDMyLCBzdC0+Y2ZnLmdwaW9fcHdtX3Bvcyk7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3QsIDEwMzcsIHN0LT5jZmcucHdtX2ZyZXFfZGl2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX2NmZ19ncGlvKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdCwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKK3sKKwlzdC0+Y2ZnLmdwaW9fZGlyID0gZGliODAwMF9yZWFkX3dvcmQoc3QsIDEwMjkpOworCXN0LT5jZmcuZ3Bpb19kaXIgJj0gfigxIDw8IG51bSk7CS8qIHJlc2V0IHRoZSBkaXJlY3Rpb24gYml0ICovCisJc3QtPmNmZy5ncGlvX2RpciB8PSAoZGlyICYgMHgxKSA8PCBudW07CS8qIHNldCB0aGUgbmV3IGRpcmVjdGlvbiAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdCwgMTAyOSwgc3QtPmNmZy5ncGlvX2Rpcik7CisKKwlzdC0+Y2ZnLmdwaW9fdmFsID0gZGliODAwMF9yZWFkX3dvcmQoc3QsIDEwMzApOworCXN0LT5jZmcuZ3Bpb192YWwgJj0gfigxIDw8IG51bSk7CS8qIHJlc2V0IHRoZSBkaXJlY3Rpb24gYml0ICovCisJc3QtPmNmZy5ncGlvX3ZhbCB8PSAodmFsICYgMHgwMSkgPDwgbnVtOwkvKiBzZXQgdGhlIG5ldyB2YWx1ZSAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdCwgMTAzMCwgc3QtPmNmZy5ncGlvX3ZhbCk7CisKKwlkcHJpbnRrKCJncGlvIGRpcjogJXg6IGdwaW8gdmFsOiAleCIsIHN0LT5jZmcuZ3Bpb19kaXIsIHN0LT5jZmcuZ3Bpb192YWwpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkaWI4MDAwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXJldHVybiBkaWI4MDAwX2NmZ19ncGlvKHN0YXRlLCBudW0sIGRpciwgdmFsKTsKK30KKworRVhQT1JUX1NZTUJPTChkaWI4MDAwX3NldF9ncGlvKTsKK3N0YXRpYyBjb25zdCB1MTYgZGliODAwMF9kZWZhdWx0c1tdID0geworCS8qIGF1dG8gc2VhcmNoIGNvbmZpZ3VyYXRpb24gLSBsb2NrMCBieSBkZWZhdWx0IHdhaXRpbmcKKwkgKiBmb3IgY3BpbF9sb2NrOyBsb2NrMSBjcGlsX2xvY2s7IGxvY2syIHRtY2Nfc3luY19sb2NrICovCisJMywgNywKKwkweDAwMDQsCisJMHgwNDAwLAorCTB4MDgxNCwKKworCTEyLCAxMSwKKwkweDAwMWIsCisJMHg3NzQwLAorCTB4MDA1YiwKKwkweDhkODAsCisJMHgwMWM5LAorCTB4YzM4MCwKKwkweDAwMDAsCisJMHgwMDgwLAorCTB4MDAwMCwKKwkweDAwOTAsCisJMHgwMDAxLAorCTB4ZDRjMCwKKworCS8qMSwgMzIsCisJICAgMHg2NjgwIC8vIFBfY29ybV90aHJlcyBMb2NrIGFsZ29yaXRobXMgY29uZmlndXJhdGlvbiAqLworCisJMTEsIDgwLAkJCS8qIHNldCBBREMgbGV2ZWwgdG8gLTE2ICovCisJKDEgPDwgMTMpIC0gODI1IC0gMTE3LAorCSgxIDw8IDEzKSAtIDgzNyAtIDExNywKKwkoMSA8PCAxMykgLSA4MTEgLSAxMTcsCisJKDEgPDwgMTMpIC0gNzY2IC0gMTE3LAorCSgxIDw8IDEzKSAtIDczNyAtIDExNywKKwkoMSA8PCAxMykgLSA2OTMgLSAxMTcsCisJKDEgPDwgMTMpIC0gNjQ4IC0gMTE3LAorCSgxIDw8IDEzKSAtIDYxOSAtIDExNywKKwkoMSA8PCAxMykgLSA1NzUgLSAxMTcsCisJKDEgPDwgMTMpIC0gNTMxIC0gMTE3LAorCSgxIDw8IDEzKSAtIDUwMSAtIDExNywKKworCTQsIDEwOCwKKwkwLAorCTAsCisJMCwKKwkwLAorCisJMSwgMTc1LAorCTB4MDQxMCwKKwkxLCAxNzksCisJODE5MiwJCQkvLyBQX2ZmdF9uYl90b19jdXQKKworCTYsIDE4MSwKKwkweDI4MDAsCQkJLy8gUF9jb2ZmX2NvcnRocmVzXyAoIDJrIDRrIDhrICkgMHgyODAwCisJMHgyODAwLAorCTB4MjgwMCwKKwkweDI4MDAsCQkJLy8gUF9jb2ZmX2NwaWx0aHJlc18gKCAyayA0ayA4ayApIDB4MjgwMAorCTB4MjgwMCwKKwkweDI4MDAsCisKKwkyLCAxOTMsCisJMHgwNjY2LAkJCS8vIFBfcGhhM190aHJlcworCTB4MDAwMCwJCQkvLyBQX2N0aV91c2VfY3BlLCBQX2N0aV91c2VfcHJvZworCisJMiwgMjA1LAorCTB4MjAwZiwJCQkvLyBQX2NzcHVfcmVndWwsIFBfY3NwdV93aW5fY3V0CisJMHgwMDBmLAkJCS8vIFBfZGVzX3NoaWZ0X3dvcmsKKworCTUsIDIxNSwKKwkweDAyM2QsCQkJLy8gUF9hZHBfcmVndWxfY250CisJMHgwMGE0LAkJCS8vIFBfYWRwX25vaXNlX2NudAorCTB4MDBhNCwJCQkvLyBQX2FkcF9yZWd1bF9leHQKKwkweDdmZjAsCQkJLy8gUF9hZHBfbm9pc2VfZXh0CisJMHgzY2NjLAkJCS8vIFBfYWRwX2ZpbAorCisJMSwgMjMwLAorCTB4MDAwMCwJCQkvLyBQXzJkX2J5cF90aV9udW0KKworCTEsIDI2MywKKwkweDgwMCwJCQkvL1BfZXF1YWxfdGhyZXNfd2duCisKKwkxLCAyNjgsCisJKDIgPDwgOSkgfCAzOSwJCS8vIFBfZXF1YWxfY3RybF9zeW5jaHJvLCBQX2VxdWFsX3NwZWVkbW9kZQorCisJMSwgMjcwLAorCTB4MDAwMSwJCQkvLyBQX2Rpdl9sb2NrMF93YWl0CisJMSwgMjg1LAorCTB4MDAyMCwJCQkvL3BfZmVjXworCTEsIDI5OSwKKwkweDAwNjIsCQkJLy8gUF9zbW9fbW9kZSwgUF9zbW9fcnNfZGlzY2FyZCwgUF9zbW9fZmlmb19mbHVzaCwgUF9zbW9fcGlkX3BhcnNlLCBQX3Ntb19lcnJvcl9kaXNjYXJkCisKKwkxLCAzMzgsCisJKDEgPDwgMTIpIHwJCS8vIFBfY3RybF9jb3JtX3RocmVzNHByZV9mcmVxX2luaD0xCisJICAgICgxIDw8IDEwKSB8CQkvLyBQX2N0cmxfcHJlX2ZyZXFfbW9kZV9zYXQ9MQorCSAgICAoMCA8PCA5KSB8CQkvLyBQX2N0cmxfcHJlX2ZyZXFfaW5oPTAKKwkgICAgKDMgPDwgNSkgfAkJLy8gUF9jdHJsX3ByZV9mcmVxX3N0ZXA9MworCSAgICAoMSA8PCAwKSwJCS8vIFBfcHJlX2ZyZXFfd2luX2xlbj0xCisKKwkxLCA5MDMsCisJKDAgPDwgNCkgfCAyLAkJLy8gUF9kaXZjbGtzZWw9MCBQX2RpdmJpdHNlbD0yICh3YXMgY2xrPTMsYml0PTEgZm9yIE1QVykKKworCTAsCit9OworCitzdGF0aWMgdTE2IGRpYjgwMDBfaWRlbnRpZnkoc3RydWN0IGkyY19kZXZpY2UgKmNsaWVudCkKK3sKKwl1MTYgdmFsdWU7CisKKwkvL2JlY2F1c2Ugb2YgZ2xpdGNoZXMgc29tZXRpbWVzCisJdmFsdWUgPSBkaWI4MDAwX2kyY19yZWFkMTYoY2xpZW50LCA4OTYpOworCisJaWYgKCh2YWx1ZSA9IGRpYjgwMDBfaTJjX3JlYWQxNihjbGllbnQsIDg5NikpICE9IDB4MDFiMykgeworCQlkcHJpbnRrKCJ3cm9uZyBWZW5kb3IgSUQgKHJlYWQ9MHgleCkiLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXZhbHVlID0gZGliODAwMF9pMmNfcmVhZDE2KGNsaWVudCwgODk3KTsKKwlpZiAodmFsdWUgIT0gMHg4MDAwICYmIHZhbHVlICE9IDB4ODAwMSAmJiB2YWx1ZSAhPSAweDgwMDIpIHsKKwkJZHByaW50aygid3JvbmcgRGV2aWNlIElEICgleCkiLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAodmFsdWUpIHsKKwljYXNlIDB4ODAwMDoKKwkJZHByaW50aygiZm91bmQgRGlCODAwMEEiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDE6CisJCWRwcmludGsoImZvdW5kIERpQjgwMDBCIik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAyOgorCQlkcHJpbnRrKCJmb3VuZCBEaUI4MDAwQyIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODcsIDB4MDAwMyk7CS8qIHNyYW0gbGVhZCBpbiwgcmR5ICovCisKKwlpZiAoKHN0YXRlLT5yZXZpc2lvbiA9IGRpYjgwMDBfaWRlbnRpZnkoJnN0YXRlLT5pMmMpKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gMHg4MDAwKQorCQlkcHJpbnRrKCJlcnJvciA6IGRpYjgwMDAgTUEgbm90IHN1cHBvcnRlZCIpOworCisJZGlieDAwMF9yZXNldF9pMmNfbWFzdGVyKCZzdGF0ZS0+aTJjX21hc3Rlcik7CisKKwlkaWI4MDAwX3NldF9wb3dlcl9tb2RlKHN0YXRlLCBESUI4MDAwTV9QT1dFUl9BTEwpOworCisJLyogYWx3YXlzIGxlYXZlIHRoZSBWQkcgdm9sdGFnZSBvbiAtIGl0IGNvbnN1bWVzIGFsbW9zdCBub3RoaW5nIGJ1dCB0YWtlcyBhIGxvbmcgdGltZSB0byBzdGFydCAqLworCWRpYjgwMDBfc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9WQkdfRU5BQkxFKTsKKworCS8qIHJlc3RhcnQgYWxsIHBhcnRzICovCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzAsIDB4ZmZmZik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzEsIDB4ZmZmZik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzIsIDB4ZmZmYyk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA4OTgsIDB4MDAwYyk7CS8vIHNhZAorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTI4MCwgMHgwMDRkKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODEsIDB4MDAwYyk7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc3MCwgMHgwMDAwKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc3MSwgMHgwMDAwKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDc3MiwgMHgwMDAwKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDg5OCwgMHgwMDA0KTsJLy8gc2FkCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMjgwLCAweDAwMDApOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTI4MSwgMHgwMDAwKTsKKworCS8qIGRyaXZlcyAqLworCWlmIChzdGF0ZS0+Y2ZnLmRyaXZlcykKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDYsIHN0YXRlLT5jZmcuZHJpdmVzKTsKKwllbHNlIHsKKwkJZHByaW50aygidXNpbmcgc3RhbmRhcmQgUEFELWRyaXZlLXNldHRpbmdzLCBwbGVhc2UgYWRqdXN0IHNldHRpbmdzIGluIGNvbmZpZy1zdHJ1Y3QgdG8gYmUgb3B0aW1hbC4iKTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDYsIDB4MmQ5OCk7CS8vIG1pbiBkcml2ZSBTRFJBTSAtIG5vdCBvcHRpbWFsIC0gYWRqdXN0CisJfQorCisJZGliODAwMF9yZXNldF9wbGwoc3RhdGUpOworCisJaWYgKGRpYjgwMDBfcmVzZXRfZ3BpbyhzdGF0ZSkgIT0gMCkKKwkJZHByaW50aygiR1BJTyByZXNldCB3YXMgbm90IHN1Y2Nlc3NmdWwuIik7CisKKwlpZiAoZGliODAwMF9zZXRfb3V0cHV0X21vZGUoc3RhdGUsIE9VVE1PREVfSElHSF9aKSAhPSAwKQorCQlkcHJpbnRrKCJPVVRQVVRfTU9ERSBjb3VsZCBub3QgYmUgcmVzZXR0ZWQuIik7CisKKwlzdGF0ZS0+Y3VycmVudF9hZ2MgPSBOVUxMOworCisJLy8gUF9pcWNfYWxwaGFfcGhhLCBQX2lxY19hbHBoYV9hbXAsIFBfaXFjX2RjY19hbHBoYSwgLi4uCisJLyogUF9pcWNfY2EyID0gMDsgUF9pcWNfaW1wbmNfb24gPSAwOyBQX2lxY19tb2RlID0gMDsgKi8KKwlpZiAoc3RhdGUtPmNmZy5wbGwtPmlmcmVxID09IDApCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNDAsIDB4MDc1NSk7CS8qIFBfaXFjX2NvcnJfaW5oID0gMCBlbmFibGUgSVFjb3JyIGJsb2NrICovCisJZWxzZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDQwLCAweDFmNTUpOwkvKiBQX2lxY19jb3JyX2luaCA9IDEgZGlzYWJsZSBJUWNvcnIgYmxvY2sgKi8KKworCXsKKwkJdTE2IGwgPSAwLCByOworCQljb25zdCB1MTYgKm47CisJCW4gPSBkaWI4MDAwX2RlZmF1bHRzOworCQlsID0gKm4rKzsKKwkJd2hpbGUgKGwpIHsKKwkJCXIgPSAqbisrOworCQkJZG8geworCQkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgciwgKm4rKyk7CisJCQkJcisrOworCQkJfSB3aGlsZSAoLS1sKTsKKwkJCWwgPSAqbisrOworCQl9CisJfQorCXN0YXRlLT5pc2RidF9jZmdfbG9hZGVkID0gMDsKKworCS8vZGl2X2NmZyBvdmVycmlkZSBmb3Igc3BlY2lhbCBjb25maWdzCisJaWYgKHN0YXRlLT5jZmcuZGl2X2NmZyAhPSAwKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDkwMywgc3RhdGUtPmNmZy5kaXZfY2ZnKTsKKworCS8qIHVuZm9yY2UgZGl2c3RyIHJlZ2FyZGxlc3Mgd2hldGhlciBpMmMgZW51bWVyYXRpb24gd2FzIGRvbmUgb3Igbm90ICovCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMjg1LCBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMTI4NSkgJiB+KDEgPDwgMSkpOworCisJZGliODAwMF9zZXRfYmFuZHdpZHRoKHN0YXRlLCA2MDAwKTsKKworCWRpYjgwMDBfc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9TTE9XX0FEQ19PTik7CisJZGliODAwMF9zYWRfY2FsaWIoc3RhdGUpOworCWRpYjgwMDBfc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9TTE9XX0FEQ19PRkYpOworCisJZGliODAwMF9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCODAwME1fUE9XRVJfSU5URVJGQUNFX09OTFkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjgwMDBfcmVzdGFydF9hZ2Moc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlKQoreworCS8vIFBfcmVzdGFydF9pcWMgJiBQX3Jlc3RhcnRfYWdjCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzAsIDB4MGEwMCk7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzAsIDB4MDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF91cGRhdGVfbG5hKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKK3sKKwl1MTYgZHluX2dhaW47CisKKwlpZiAoc3RhdGUtPmNmZy51cGRhdGVfbG5hKSB7CisJCS8vIHJlYWQgZHluX2dhaW4gaGVyZSAoYmVjYXVzZSBpdCBpcyBkZW1vZC1kZXBlbmRlbnQgYW5kIG5vdCB0dW5lcikKKwkJZHluX2dhaW4gPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMzkwKTsKKworCQlpZiAoc3RhdGUtPmNmZy51cGRhdGVfbG5hKCZzdGF0ZS0+ZmUsIGR5bl9nYWluKSkgewkvLyBMTkEgaGFzIGNoYW5nZWQKKwkJCWRpYjgwMDBfcmVzdGFydF9hZ2Moc3RhdGUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9zZXRfYWdjX2NvbmZpZyhzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUsIHU4IGJhbmQpCit7CisJc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyAqYWdjID0gTlVMTDsKKwlpbnQgaTsKKwlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBiYW5kICYmIHN0YXRlLT5jdXJyZW50X2FnYyAhPSBOVUxMKQorCQlyZXR1cm4gMDsKKwlzdGF0ZS0+Y3VycmVudF9iYW5kID0gYmFuZDsKKworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+Y2ZnLmFnY19jb25maWdfY291bnQ7IGkrKykKKwkJaWYgKHN0YXRlLT5jZmcuYWdjW2ldLmJhbmRfY2FwcyAmIGJhbmQpIHsKKwkJCWFnYyA9ICZzdGF0ZS0+Y2ZnLmFnY1tpXTsKKwkJCWJyZWFrOworCQl9CisKKwlpZiAoYWdjID09IE5VTEwpIHsKKwkJZHByaW50aygibm8gdmFsaWQgQUdDIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yIGJhbmQgMHglMDJ4IiwgYmFuZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN0YXRlLT5jdXJyZW50X2FnYyA9IGFnYzsKKworCS8qIEFHQyAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzYsIGFnYy0+c2V0dXApOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcsIGFnYy0+aW52X2dhaW4pOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzgsIGFnYy0+dGltZV9zdGFiaWxpeik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMDEsIChhZ2MtPmFscGhhX2xldmVsIDw8IDEyKSB8IGFnYy0+dGhsb2NrKTsKKworCS8vIERlbW9kIEFHQyBsb29wIGNvbmZpZ3VyYXRpb24KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEwMiwgKGFnYy0+YWxwaGFfbWFudCA8PCA1KSB8IGFnYy0+YWxwaGFfZXhwKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEwMywgKGFnYy0+YmV0YV9tYW50IDw8IDYpIHwgYWdjLT5iZXRhX2V4cCk7CisKKwlkcHJpbnRrKCJXQkQ6IHJlZjogJWQsIHNlbDogJWQsIGFjdGl2ZTogJWQsIGFscGhhOiAlZCIsCisJCXN0YXRlLT53YmRfcmVmICE9IDAgPyBzdGF0ZS0+d2JkX3JlZiA6IGFnYy0+d2JkX3JlZiwgYWdjLT53YmRfc2VsLCAhYWdjLT5wZXJmb3JtX2FnY19zb2Z0c3BsaXQsIGFnYy0+d2JkX3NlbCk7CisKKwkvKiBBR0MgY29udGludWVkICovCisJaWYgKHN0YXRlLT53YmRfcmVmICE9IDApCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTA2LCBzdGF0ZS0+d2JkX3JlZik7CisJZWxzZQkJCS8vIHVzZSBkZWZhdWx0CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTA2LCBhZ2MtPndiZF9yZWYpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTA3LCAoYWdjLT53YmRfYWxwaGEgPDwgOSkgfCAoYWdjLT5wZXJmb3JtX2FnY19zb2Z0c3BsaXQgPDwgOCkpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTA4LCBhZ2MtPmFnYzFfbWF4KTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEwOSwgYWdjLT5hZ2MxX21pbik7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMTAsIGFnYy0+YWdjMl9tYXgpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTExLCBhZ2MtPmFnYzJfbWluKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDExMiwgKGFnYy0+YWdjMV9wdDEgPDwgOCkgfCBhZ2MtPmFnYzFfcHQyKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDExMywgKGFnYy0+YWdjMV9zbG9wZTEgPDwgOCkgfCBhZ2MtPmFnYzFfc2xvcGUyKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDExNCwgKGFnYy0+YWdjMl9wdDEgPDwgOCkgfCBhZ2MtPmFnYzJfcHQyKTsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDExNSwgKGFnYy0+YWdjMl9zbG9wZTEgPDwgOCkgfCBhZ2MtPmFnYzJfc2xvcGUyKTsKKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzUsIGFnYy0+YWdjMV9wdDMpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTIzLCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDkyMykgJiAweGZmZTMpIHwgKGFnYy0+d2JkX2ludiA8PCA0KSB8IChhZ2MtPndiZF9zZWwgPDwgMikpOwkvKkxCIDogOTI5IC0+IDkyMyAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9hZ2Nfc29mdF9zcGxpdChzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUpCit7CisJdTE2IGFnYywgc3BsaXRfb2Zmc2V0OworCisJaWYgKCFzdGF0ZS0+Y3VycmVudF9hZ2MgfHwgIXN0YXRlLT5jdXJyZW50X2FnYy0+cGVyZm9ybV9hZ2Nfc29mdHNwbGl0IHx8IHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWF4ID09IDApCisJCXJldHVybiBGRV9DQUxMQkFDS19USU1FX05FVkVSOworCisJLy8gbl9hZ2NfZ2xvYmFsCisJYWdjID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDM5MCk7CisKKwlpZiAoYWdjID4gc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5taW5fdGhyZXMpCisJCXNwbGl0X29mZnNldCA9IHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWluOworCWVsc2UgaWYgKGFnYyA8IHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWF4X3RocmVzKQorCQlzcGxpdF9vZmZzZXQgPSBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1heDsKKwllbHNlCisJCXNwbGl0X29mZnNldCA9IHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWF4ICoKKwkJICAgIChhZ2MgLSBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1pbl90aHJlcykgLyAoc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5tYXhfdGhyZXMgLSBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1pbl90aHJlcyk7CisKKwlkcHJpbnRrKCJBR0Mgc3BsaXRfb2Zmc2V0OiAlZCIsIHNwbGl0X29mZnNldCk7CisKKwkvLyBQX2FnY19mb3JjZV9zcGxpdCBhbmQgUF9hZ2Nfc3BsaXRfb2Zmc2V0CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMDcsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMTA3KSAmIDB4ZmYwMCkgfCBzcGxpdF9vZmZzZXQpOworCXJldHVybiA1MDAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfYWdjX3N0YXJ0dXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJZW51bSBmcm9udGVuZF90dW5lX3N0YXRlICp0dW5lX3N0YXRlID0gJnN0YXRlLT50dW5lX3N0YXRlOworCisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKCp0dW5lX3N0YXRlKSB7CisJY2FzZSBDVF9BR0NfU1RBUlQ6CisJCS8vIHNldCBwb3dlci11cCBsZXZlbDogaW50ZXJmK2FuYWxvZytBR0MKKworCQlkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3RhdGUsIERJQlgwMDBfQURDX09OKTsKKworCQlpZiAoZGliODAwMF9zZXRfYWdjX2NvbmZpZyhzdGF0ZSwgKHVuc2lnbmVkIGNoYXIpKEJBTkRfT0ZfRlJFUVVFTkNZKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5IC8gMTAwMCkpKSAhPSAwKSB7CisJCQkqdHVuZV9zdGF0ZSA9IENUX0FHQ19TVE9QOworCQkJc3RhdGUtPnN0YXR1cyA9IEZFX1NUQVRVU19UVU5FX0ZBSUxFRDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gNzA7CisJCSp0dW5lX3N0YXRlID0gQ1RfQUdDX1NURVBfMDsKKwkJYnJlYWs7CisKKwljYXNlIENUX0FHQ19TVEVQXzA6CisJCS8vQUdDIGluaXRpYWxpemF0aW9uCisJCWlmIChzdGF0ZS0+Y2ZnLmFnY19jb250cm9sKQorCQkJc3RhdGUtPmNmZy5hZ2NfY29udHJvbCgmc3RhdGUtPmZlLCAxKTsKKworCQlkaWI4MDAwX3Jlc3RhcnRfYWdjKHN0YXRlKTsKKworCQkvLyB3YWl0IEFHQyByb3VnaCBsb2NrIHRpbWUKKwkJcmV0ID0gNTA7CisJCSp0dW5lX3N0YXRlID0gQ1RfQUdDX1NURVBfMTsKKwkJYnJlYWs7CisKKwljYXNlIENUX0FHQ19TVEVQXzE6CisJCS8vIHdhaXQgQUdDIGFjY3VyYXRlIGxvY2sgdGltZQorCQlyZXQgPSA3MDsKKworCQlpZiAoZGliODAwMF91cGRhdGVfbG5hKHN0YXRlKSkKKwkJCS8vIHdhaXQgb25seSBBR0Mgcm91Z2ggbG9jayB0aW1lCisJCQlyZXQgPSA1MDsKKwkJZWxzZQorCQkJKnR1bmVfc3RhdGUgPSBDVF9BR0NfU1RFUF8yOworCQlicmVhazsKKworCWNhc2UgQ1RfQUdDX1NURVBfMjoKKwkJZGliODAwMF9hZ2Nfc29mdF9zcGxpdChzdGF0ZSk7CisKKwkJaWYgKHN0YXRlLT5jZmcuYWdjX2NvbnRyb2wpCisJCQlzdGF0ZS0+Y2ZnLmFnY19jb250cm9sKCZzdGF0ZS0+ZmUsIDApOworCisJCSp0dW5lX3N0YXRlID0gQ1RfQUdDX1NUT1A7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IGRpYjgwMDBfYWdjX3NvZnRfc3BsaXQoc3RhdGUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgdm9pZCBkaWI4MDAwX3VwZGF0ZV90aW1mKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKK3sKKwl1MzIgdGltZiA9IHN0YXRlLT50aW1mID0gZGliODAwMF9yZWFkMzIoc3RhdGUsIDQzNSk7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI5LCAodTE2KSAodGltZiA+PiAxNikpOworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzAsICh1MTYpICh0aW1mICYgMHhmZmZmKSk7CisJZHByaW50aygiVXBkYXRlZCB0aW1pbmcgZnJlcXVlbmN5OiAlZCAoZGVmYXVsdDogJWQpIiwgc3RhdGUtPnRpbWYsIHN0YXRlLT50aW1mX2RlZmF1bHQpOworfQorCitzdGF0aWMgdm9pZCBkaWI4MDAwX3NldF9jaGFubmVsKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSwgdTggc2VxLCB1OCBhdXRvc2VhcmNoaW5nKQoreworCXUxNiBtb2RlLCBtYXhfY29uc3RlbGxhdGlvbiwgc2VnX2RpZmZfbWFzayA9IDAsIG5ic2VnX2RpZmYgPSAwOworCXU4IGd1YXJkLCBjcmF0ZSwgY29uc3RlbGxhdGlvbiwgdGltZUk7CisJdTggcGVybXVfc2VnW10gPSB7IDYsIDUsIDcsIDQsIDgsIDMsIDksIDIsIDEwLCAxLCAxMSwgMCwgMTIgfTsKKwl1MTYgaSwgY29lZmZbNF0sIFBfY2ZyX2xlZnRfZWRnZSA9IDAsIFBfY2ZyX3JpZ2h0X2VkZ2UgPSAwLCBzZWdfbWFzazEzID0gMHgxZmZmOwkvLyBBbGwgMTMgc2VnbWVudHMgZW5hYmxlZAorCWNvbnN0IHMxNiAqbmNvZWZmLCAqYW5hX2ZlOworCXUxNiB0bWNjX3BvdyA9IDA7CisJdTE2IGNvZmZfcG93ID0gMHgyODAwOworCXUxNiBpbml0X3ByYnMgPSAweGZmZjsKKwl1MTYgYW5hX2dhaW4gPSAwOworCXUxNiBhZGNfdGFyZ2V0XzE2ZEJbMTFdID0geworCQkoMSA8PCAxMykgLSA4MjUgLSAxMTcsCisJCSgxIDw8IDEzKSAtIDgzNyAtIDExNywKKwkJKDEgPDwgMTMpIC0gODExIC0gMTE3LAorCQkoMSA8PCAxMykgLSA3NjYgLSAxMTcsCisJCSgxIDw8IDEzKSAtIDczNyAtIDExNywKKwkJKDEgPDwgMTMpIC0gNjkzIC0gMTE3LAorCQkoMSA8PCAxMykgLSA2NDggLSAxMTcsCisJCSgxIDw8IDEzKSAtIDYxOSAtIDExNywKKwkJKDEgPDwgMTMpIC0gNTc1IC0gMTE3LAorCQkoMSA8PCAxMykgLSA1MzEgLSAxMTcsCisJCSgxIDw8IDEzKSAtIDUwMSAtIDExNworCX07CisKKwlpZiAoc3RhdGUtPmJlcl9tb25pdG9yZWRfbGF5ZXIgIT0gTEFZRVJfQUxMKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4NSwgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyODUpICYgMHg2MCkgfCBzdGF0ZS0+YmVyX21vbml0b3JlZF9sYXllcik7CisJZWxzZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4NSwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI4NSkgJiAweDYwKTsKKworCWkgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjYpICYgMTsJLy8gUF9kZHNfaW52c3BlYworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjYsIHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaW52ZXJzaW9uIF4gaSk7CisKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlKSB7CisJCS8vY29tcHV0ZSBuZXcgZGRzX2ZyZXEgZm9yIHRoZSBzZWcgYW5kIGFkanVzdCBwcmJzCisJCWludCBzZWdfb2Zmc2V0ID0KKwkJICAgIHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggLSAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50IC8gMikgLQorCQkgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpOworCQlpbnQgY2xrID0gc3RhdGUtPmNmZy5wbGwtPmludGVybmFsOworCQl1MzIgc2VndG9kZHMgPSAoKHUzMikgKDQzMCA8PCAyMykgLyBjbGspIDw8IDM7CS8vIHNlZ3RvZGRzID0gU2VnQlcgLyBGY2xrICogcG93KDIsMjYpCisJCWludCBkZHNfb2Zmc2V0ID0gc2VnX29mZnNldCAqIHNlZ3RvZGRzOworCQlpbnQgbmV3X2Rkcywgc3ViX2NoYW5uZWw7CisJCWlmICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50ICUgMikgPT0gMCkJLy8gaWYgZXZlbgorCQkJZGRzX29mZnNldCAtPSAoaW50KShzZWd0b2RkcyAvIDIpOworCisJCWlmIChzdGF0ZS0+Y2ZnLnBsbC0+aWZyZXEgPT0gMCkgeworCQkJaWYgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmludmVyc2lvbiBeIGkpID09IDApIHsKKwkJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI2LCBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjYpIHwgMSk7CisJCQkJbmV3X2RkcyA9IGRkc19vZmZzZXQ7CisJCQl9IGVsc2UKKwkJCQluZXdfZGRzID0gZGRzX29mZnNldDsKKworCQkJLy8gV2Ugc2hpZnQgdHVuaW5nIGZyZXF1ZW5jeSBpZiB0aGUgd2FudGVkIHNlZ21lbnQgaXMgOgorCQkJLy8gIC0gdGhlIHNlZ21lbnQgb2YgY2VudGVyIGZyZXF1ZW5jeSB3aXRoIGFuIG9kZCB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMKKwkJCS8vICAtIHRoZSBzZWdtZW50IHRvIHRoZSBsZWZ0IG9mIGNlbnRlciBmcmVxdWVuY3kgd2l0aCBhbiBldmVuIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cworCQkJLy8gIC0gdGhlIHNlZ21lbnQgdG8gdGhlIHJpZ2h0IG9mIGNlbnRlciBmcmVxdWVuY3kgd2l0aCBhbiBldmVuIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cworCQkJaWYgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9PSBTWVNfSVNEQlQpICYmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkKKwkJCSAgICAmJgorCQkJICAgICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAlIDIpCisJCQkgICAgICAmJiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2lkeCA9PQorCQkJCSAgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgLyAyKSArIDEpKSkKKwkJCSAgICAgfHwgKCgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50ICUgMikgPT0gMCkKKwkJCQkgJiYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggPT0gKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9jb3VudCAvIDIpKSkKKwkJCSAgICAgfHwgKCgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50ICUgMikgPT0gMCkKKwkJCQkgJiYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggPT0KKwkJCQkgICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50IC8gMikgKyAxKSkpCisJCQkgICAgKSkgeworCQkJCW5ld19kZHMgLT0gKCh1MzIpICg4NTAgPDwgMjIpIC8gY2xrKSA8PCA0OwkvLyBuZXdfZGRzID0gODUwIChmcmVxIHNoaWZ0IGluIEtIeikgLyBGY2xrICogcG93KDIsMjYpCisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaW52ZXJzaW9uIF4gaSkgPT0gMCkKKwkJCQluZXdfZGRzID0gc3RhdGUtPmNmZy5wbGwtPmlmcmVxIC0gZGRzX29mZnNldDsKKwkJCWVsc2UKKwkJCQluZXdfZGRzID0gc3RhdGUtPmNmZy5wbGwtPmlmcmVxICsgZGRzX29mZnNldDsKKwkJfQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3LCAodTE2KSAoKG5ld19kZHMgPj4gMTYpICYgMHgwMWZmKSk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjgsICh1MTYpIChuZXdfZGRzICYgMHhmZmZmKSk7CisJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgJSAyKQkvLyBpZiBvZGQKKwkJCXN1Yl9jaGFubmVsID0gKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3N1YmNoYW5uZWwgKyAoMyAqIHNlZ19vZmZzZXQpICsgMSkgJSA0MSkgLyAzOworCQllbHNlCQkvLyBpZiBldmVuCisJCQlzdWJfY2hhbm5lbCA9ICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zdWJjaGFubmVsICsgKDMgKiBzZWdfb2Zmc2V0KSkgJSA0MSkgLyAzOworCQlzdWJfY2hhbm5lbCAtPSA2OworCisJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFXzJLCisJCSAgICB8fCBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFXzRLKSB7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIxOSwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDIxOSkgfCAweDEpOwkvL2FkcF9wYXNzID0xCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE5MCwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDE5MCkgfCAoMHgxIDw8IDE0KSk7CS8vcGhhM19mb3JjZV9waGFfc2hpZnQgPSAxCisJCX0gZWxzZSB7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIxOSwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDIxOSkgJiAweGZmZmUpOwkvL2FkcF9wYXNzID0wCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE5MCwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDE5MCkgJiAweGJmZmYpOwkvL3BoYTNfZm9yY2VfcGhhX3NoaWZ0ID0gMAorCQl9CisKKwkJc3dpdGNoIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlKSB7CisJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6CisJCQlzd2l0Y2ggKHN1Yl9jaGFubmVsKSB7CisJCQljYXNlIC02OgorCQkJCWluaXRfcHJicyA9IDB4MDsKKwkJCQlicmVhazsJLy8gNDEsIDAsIDEKKwkJCWNhc2UgLTU6CisJCQkJaW5pdF9wcmJzID0gMHg0MjM7CisJCQkJYnJlYWs7CS8vIDAyfjA0CisJCQljYXNlIC00OgorCQkJCWluaXRfcHJicyA9IDB4OTsKKwkJCQlicmVhazsJLy8gMDV+MDcKKwkJCWNhc2UgLTM6CisJCQkJaW5pdF9wcmJzID0gMHg1Qzc7CisJCQkJYnJlYWs7CS8vIDA4fjEwCisJCQljYXNlIC0yOgorCQkJCWluaXRfcHJicyA9IDB4N0E2OworCQkJCWJyZWFrOwkvLyAxMX4xMworCQkJY2FzZSAtMToKKwkJCQlpbml0X3ByYnMgPSAweDNEODsKKwkJCQlicmVhazsJLy8gMTR+MTYKKwkJCWNhc2UgMDoKKwkJCQlpbml0X3ByYnMgPSAweDUyNzsKKwkJCQlicmVhazsJLy8gMTd+MTkKKwkJCWNhc2UgMToKKwkJCQlpbml0X3ByYnMgPSAweDdGRjsKKwkJCQlicmVhazsJLy8gMjB+MjIKKwkJCWNhc2UgMjoKKwkJCQlpbml0X3ByYnMgPSAweDc5QjsKKwkJCQlicmVhazsJLy8gMjN+MjUKKwkJCWNhc2UgMzoKKwkJCQlpbml0X3ByYnMgPSAweDNENjsKKwkJCQlicmVhazsJLy8gMjZ+MjgKKwkJCWNhc2UgNDoKKwkJCQlpbml0X3ByYnMgPSAweDNBMjsKKwkJCQlicmVhazsJLy8gMjl+MzEKKwkJCWNhc2UgNToKKwkJCQlpbml0X3ByYnMgPSAweDUzQjsKKwkJCQlicmVhazsJLy8gMzJ+MzQKKwkJCWNhc2UgNjoKKwkJCQlpbml0X3ByYnMgPSAweDJGNDsKKwkJCQlicmVhazsJLy8gMzV+MzcKKwkJCWRlZmF1bHQ6CisJCQljYXNlIDc6CisJCQkJaW5pdF9wcmJzID0gMHgyMTM7CisJCQkJYnJlYWs7CS8vIDM4fjQwCisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzRLOgorCQkJc3dpdGNoIChzdWJfY2hhbm5lbCkgeworCQkJY2FzZSAtNjoKKwkJCQlpbml0X3ByYnMgPSAweDA7CisJCQkJYnJlYWs7CS8vIDQxLCAwLCAxCisJCQljYXNlIC01OgorCQkJCWluaXRfcHJicyA9IDB4MjA4OworCQkJCWJyZWFrOwkvLyAwMn4wNAorCQkJY2FzZSAtNDoKKwkJCQlpbml0X3ByYnMgPSAweEMzOworCQkJCWJyZWFrOwkvLyAwNX4wNworCQkJY2FzZSAtMzoKKwkJCQlpbml0X3ByYnMgPSAweDdCOTsKKwkJCQlicmVhazsJLy8gMDh+MTAKKwkJCWNhc2UgLTI6CisJCQkJaW5pdF9wcmJzID0gMHg0MjM7CisJCQkJYnJlYWs7CS8vIDExfjEzCisJCQljYXNlIC0xOgorCQkJCWluaXRfcHJicyA9IDB4NUM3OworCQkJCWJyZWFrOwkvLyAxNH4xNgorCQkJY2FzZSAwOgorCQkJCWluaXRfcHJicyA9IDB4M0Q4OworCQkJCWJyZWFrOwkvLyAxN34xOQorCQkJY2FzZSAxOgorCQkJCWluaXRfcHJicyA9IDB4N0ZGOworCQkJCWJyZWFrOwkvLyAyMH4yMgorCQkJY2FzZSAyOgorCQkJCWluaXRfcHJicyA9IDB4M0Q2OworCQkJCWJyZWFrOwkvLyAyM34yNQorCQkJY2FzZSAzOgorCQkJCWluaXRfcHJicyA9IDB4NTNCOworCQkJCWJyZWFrOwkvLyAyNn4yOAorCQkJY2FzZSA0OgorCQkJCWluaXRfcHJicyA9IDB4MjEzOworCQkJCWJyZWFrOwkvLyAyOX4zMQorCQkJY2FzZSA1OgorCQkJCWluaXRfcHJicyA9IDB4Mjk7CisJCQkJYnJlYWs7CS8vIDMyfjM0CisJCQljYXNlIDY6CisJCQkJaW5pdF9wcmJzID0gMHhEMDsKKwkJCQlicmVhazsJLy8gMzV+MzcKKwkJCWRlZmF1bHQ6CisJCQljYXNlIDc6CisJCQkJaW5pdF9wcmJzID0gMHg0OEU7CisJCQkJYnJlYWs7CS8vIDM4fjQwCisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgorCQkJc3dpdGNoIChzdWJfY2hhbm5lbCkgeworCQkJY2FzZSAtNjoKKwkJCQlpbml0X3ByYnMgPSAweDA7CisJCQkJYnJlYWs7CS8vIDQxLCAwLCAxCisJCQljYXNlIC01OgorCQkJCWluaXRfcHJicyA9IDB4NzQwOworCQkJCWJyZWFrOwkvLyAwMn4wNAorCQkJY2FzZSAtNDoKKwkJCQlpbml0X3ByYnMgPSAweDA2OTsKKwkJCQlicmVhazsJLy8gMDV+MDcKKwkJCWNhc2UgLTM6CisJCQkJaW5pdF9wcmJzID0gMHg3REQ7CisJCQkJYnJlYWs7CS8vIDA4fjEwCisJCQljYXNlIC0yOgorCQkJCWluaXRfcHJicyA9IDB4MjA4OworCQkJCWJyZWFrOwkvLyAxMX4xMworCQkJY2FzZSAtMToKKwkJCQlpbml0X3ByYnMgPSAweDdCOTsKKwkJCQlicmVhazsJLy8gMTR+MTYKKwkJCWNhc2UgMDoKKwkJCQlpbml0X3ByYnMgPSAweDVDNzsKKwkJCQlicmVhazsJLy8gMTd+MTkKKwkJCWNhc2UgMToKKwkJCQlpbml0X3ByYnMgPSAweDdGRjsKKwkJCQlicmVhazsJLy8gMjB+MjIKKwkJCWNhc2UgMjoKKwkJCQlpbml0X3ByYnMgPSAweDUzQjsKKwkJCQlicmVhazsJLy8gMjN+MjUKKwkJCWNhc2UgMzoKKwkJCQlpbml0X3ByYnMgPSAweDI5OworCQkJCWJyZWFrOwkvLyAyNn4yOAorCQkJY2FzZSA0OgorCQkJCWluaXRfcHJicyA9IDB4NDhFOworCQkJCWJyZWFrOwkvLyAyOX4zMQorCQkJY2FzZSA1OgorCQkJCWluaXRfcHJicyA9IDB4NEM0OworCQkJCWJyZWFrOwkvLyAzMn4zNAorCQkJY2FzZSA2OgorCQkJCWluaXRfcHJicyA9IDB4MzY3OworCQkJCWJyZWFrOwkvLyAzM34zNworCQkJZGVmYXVsdDoKKwkJCWNhc2UgNzoKKwkJCQlpbml0X3ByYnMgPSAweDY4NDsKKwkJCQlicmVhazsJLy8gMzh+NDAKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsJCS8vIGlmIG5vdCBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNywgKHUxNikgKChzdGF0ZS0+Y2ZnLnBsbC0+aWZyZXEgPj4gMTYpICYgMHgwMWZmKSk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjgsICh1MTYpIChzdGF0ZS0+Y2ZnLnBsbC0+aWZyZXEgJiAweGZmZmYpKTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNiwgKHUxNikgKChzdGF0ZS0+Y2ZnLnBsbC0+aWZyZXEgPj4gMjUpICYgMHgwMDAzKSk7CisJfQorCS8qUF9tb2RlID09ID8/ICovCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMCwgKHNlcSA8PCA0KSk7CisJLy8gIGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjg3LCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI4NykgJiAweGUwMDApIHwgMHgxMDAwKTsKKworCXN3aXRjaCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCkgeworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjoKKwkJZ3VhcmQgPSAwOworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMTY6CisJCWd1YXJkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzg6CisJCWd1YXJkID0gMjsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzQ6CisJZGVmYXVsdDoKKwkJZ3VhcmQgPSAzOworCQlicmVhazsKKwl9CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDEsIChpbml0X3ByYnMgPDwgMikgfCAoZ3VhcmQgJiAweDMpKTsJLy8gQUREUiAxCisKKwltYXhfY29uc3RlbGxhdGlvbiA9IERRUFNLOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc3dpdGNoIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24pIHsKKwkJY2FzZSBEUVBTSzoKKwkJCWNvbnN0ZWxsYXRpb24gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgUVBTSzoKKwkJCWNvbnN0ZWxsYXRpb24gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgUUFNXzE2OgorCQkJY29uc3RlbGxhdGlvbiA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBRQU1fNjQ6CisJCWRlZmF1bHQ6CisJCQljb25zdGVsbGF0aW9uID0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLmZlYykgeworCQljYXNlIEZFQ18xXzI6CisJCQljcmF0ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBGRUNfMl8zOgorCQkJY3JhdGUgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgRkVDXzNfNDoKKwkJCWNyYXRlID0gMzsKKwkJCWJyZWFrOworCQljYXNlIEZFQ181XzY6CisJCQljcmF0ZSA9IDU7CisJCQlicmVhazsKKwkJY2FzZSBGRUNfN184OgorCQlkZWZhdWx0OgorCQkJY3JhdGUgPSA3OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uaW50ZXJsZWF2aW5nID4gMCkgJiYKKwkJICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5pbnRlcmxlYXZpbmcgPD0gMykgfHwKKwkJICAgICAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5pbnRlcmxlYXZpbmcgPT0gNCAmJiBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkpCisJCSAgICApCisJCQl0aW1lSSA9IHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uaW50ZXJsZWF2aW5nOworCQllbHNlCisJCQl0aW1lSSA9IDA7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMiArIGksIChjb25zdGVsbGF0aW9uIDw8IDEwKSB8ICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5zZWdtZW50X2NvdW50ICYgMHhmKSA8PCA2KSB8CisJCQkJICAgKGNyYXRlIDw8IDMpIHwgdGltZUkpOworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5zZWdtZW50X2NvdW50ID4gMCkgeworCQkJc3dpdGNoIChtYXhfY29uc3RlbGxhdGlvbikgeworCQkJY2FzZSBEUVBTSzoKKwkJCWNhc2UgUVBTSzoKKwkJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5tb2R1bGF0aW9uID09IFFBTV8xNiB8fAorCQkJCSAgICBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPT0gUUFNXzY0KQorCQkJCQltYXhfY29uc3RlbGxhdGlvbiA9IHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUFNXzE2OgorCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPT0gUUFNXzY0KQorCQkJCQltYXhfY29uc3RlbGxhdGlvbiA9IHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCW1vZGUgPSBmZnRfdG9fbW9kZShzdGF0ZSk7CisKKwkvL2RpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNSwgMTMpOyAvKnBfbGFzdF9zZWcgPSAxMyovCisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI3NCwgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyNzQpICYgMHhmZmNmKSB8CisJCQkgICAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gJiAxKSA8PCA1KSB8ICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS4KKwkJCQkJCQkJCQkJCSBpc2RidF9zYl9tb2RlICYgMSkgPDwgNCkpOworCisJZHByaW50aygibW9kZSA9ICVkIDsgZ3VhcmQgPSAlZCIsIG1vZGUsIHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwpOworCisJLyogc2lnbmFsIG9wdGltaXphdGlvbiBwYXJhbWV0ZXIgKi8KKworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uKSB7CisJCXNlZ19kaWZmX21hc2sgPSAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID09IERRUFNLKSA8PCBwZXJtdV9zZWdbMF07CisJCWZvciAoaSA9IDE7IGkgPCAzOyBpKyspCisJCQluYnNlZ19kaWZmICs9CisJCQkgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbiA9PSBEUVBTSykgKiBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLnNlZ21lbnRfY291bnQ7CisJCWZvciAoaSA9IDA7IGkgPCBuYnNlZ19kaWZmOyBpKyspCisJCQlzZWdfZGlmZl9tYXNrIHw9IDEgPDwgcGVybXVfc2VnW2kgKyAxXTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJbmJzZWdfZGlmZiArPQorCQkJICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPT0gRFFQU0spICogc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5zZWdtZW50X2NvdW50OworCQlmb3IgKGkgPSAwOyBpIDwgbmJzZWdfZGlmZjsgaSsrKQorCQkJc2VnX2RpZmZfbWFzayB8PSAxIDw8IHBlcm11X3NlZ1tpXTsKKwl9CisJZHByaW50aygibmJzZWdfZGlmZiA9ICVYICglZCkiLCBzZWdfZGlmZl9tYXNrLCBzZWdfZGlmZl9tYXNrKTsKKworCXN0YXRlLT5kaWZmZXJlbnRpYWxfY29uc3RlbGxhdGlvbiA9IChzZWdfZGlmZl9tYXNrICE9IDApOworCWRpYjgwMDBfc2V0X2RpdmVyc2l0eV9pbigmc3RhdGUtPmZlLCBzdGF0ZS0+ZGl2ZXJzaXR5X29ub2ZmKTsKKworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkgewkvLyBJU0RCLVRzYgorCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAxKQkvLyAzLXNlZ21lbnRzCisJCQlzZWdfbWFzazEzID0gMHgwMEUwOworCQllbHNlCQkvLyAxLXNlZ21lbnQKKwkJCXNlZ19tYXNrMTMgPSAweDAwNDA7CisJfSBlbHNlCisJCXNlZ19tYXNrMTMgPSAweDFmZmY7CisKKwkvLyBXUklURTogTW9kZSAmIERpZmYgbWFzaworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMCwgKG1vZGUgPDwgMTMpIHwgc2VnX2RpZmZfbWFzayk7CisKKwlpZiAoKHNlZ19kaWZmX21hc2spIHx8IChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUpKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI2OCwgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAyNjgpICYgMHhGOUZGKSB8IDB4MDIwMCk7CisJZWxzZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI2OCwgKDIgPDwgOSkgfCAzOSk7CS8vaW5pdCB2YWx1ZQorCisJLy8gLS0tLSBTTUFMTCAtLS0tCisJLy8gUF9zbWFsbF9zZWdfZGlmZgorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzUyLCBzZWdfZGlmZl9tYXNrKTsJLy8gQUREUiAzNTIKKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzUzLCBzZWdfbWFzazEzKTsJLy8gQUREUiAzNTMKKworLyogICAgIC8vIFBfc21hbGxfbmFycm93X2JhbmQ9MCwgUF9zbWFsbF9sYXN0X3NlZz0xMywgUF9zbWFsbF9vZmZzZXRfbnVtX2Nhcj01ICovCisJLy8gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNTEsIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPDwgOCkgfCAoMTMgPDwgNCkgfCA1ICk7CisKKwkvLyAtLS0tIFNNQUxMIC0tLS0KKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpIHsKKwkJc3dpdGNoIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlKSB7CisJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6CisJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAwKSB7CS8vIDEtc2VnCisJCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0ubW9kdWxhdGlvbiA9PSBEUVBTSykJLy8gRFFQU0sKKwkJCQkJbmNvZWZmID0gY29lZmZfMmtfc2JfMXNlZ19kcXBzazsKKwkJCQllbHNlCS8vIFFQU0sgb3IgUUFNCisJCQkJCW5jb2VmZiA9IGNvZWZmXzJrX3NiXzFzZWc7CisJCQl9IGVsc2UgewkvLyAzLXNlZ21lbnRzCisJCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0ubW9kdWxhdGlvbiA9PSBEUVBTSykgewkvLyBEUVBTSyBvbiBjZW50cmFsIHNlZ21lbnQKKwkJCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0ubW9kdWxhdGlvbiA9PSBEUVBTSykJLy8gRFFQU0sgb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzJrX3NiXzNzZWdfMGRxcHNrXzFkcXBzazsKKwkJCQkJZWxzZQkvLyBRUFNLIG9yIFFBTSBvbiBleHRlcm5hbCBzZWdtZW50cworCQkJCQkJbmNvZWZmID0gY29lZmZfMmtfc2JfM3NlZ18wZHFwc2s7CisJCQkJfSBlbHNlIHsJLy8gUVBTSyBvciBRQU0gb24gY2VudHJhbCBzZWdtZW50CisJCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPT0gRFFQU0spCS8vIERRUFNLIG9uIGV4dGVybmFsIHNlZ21lbnRzCisJCQkJCQluY29lZmYgPSBjb2VmZl8ya19zYl8zc2VnXzFkcXBzazsKKwkJCQkJZWxzZQkvLyBRUFNLIG9yIFFBTSBvbiBleHRlcm5hbCBzZWdtZW50cworCQkJCQkJbmNvZWZmID0gY29lZmZfMmtfc2JfM3NlZzsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzRLOgorCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPT0gMCkgewkvLyAxLXNlZworCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPT0gRFFQU0spCS8vIERRUFNLCisJCQkJCW5jb2VmZiA9IGNvZWZmXzRrX3NiXzFzZWdfZHFwc2s7CisJCQkJZWxzZQkvLyBRUFNLIG9yIFFBTQorCQkJCQluY29lZmYgPSBjb2VmZl80a19zYl8xc2VnOworCQkJfSBlbHNlIHsJLy8gMy1zZWdtZW50cworCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPT0gRFFQU0spIHsJLy8gRFFQU0sgb24gY2VudHJhbCBzZWdtZW50CisJCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPT0gRFFQU0spIHsJLy8gRFFQU0sgb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzRrX3NiXzNzZWdfMGRxcHNrXzFkcXBzazsKKwkJCQkJfSBlbHNlIHsJLy8gUVBTSyBvciBRQU0gb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzRrX3NiXzNzZWdfMGRxcHNrOworCQkJCQl9CisJCQkJfSBlbHNlIHsJLy8gUVBTSyBvciBRQU0gb24gY2VudHJhbCBzZWdtZW50CisJCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPT0gRFFQU0spIHsJLy8gRFFQU0sgb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzRrX3NiXzNzZWdfMWRxcHNrOworCQkJCQl9IGVsc2UJLy8gUVBTSyBvciBRQU0gb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzRrX3NiXzNzZWc7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOgorCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgorCQlkZWZhdWx0OgorCQkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPT0gMCkgewkvLyAxLXNlZworCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPT0gRFFQU0spCS8vIERRUFNLCisJCQkJCW5jb2VmZiA9IGNvZWZmXzhrX3NiXzFzZWdfZHFwc2s7CisJCQkJZWxzZQkvLyBRUFNLIG9yIFFBTQorCQkJCQluY29lZmYgPSBjb2VmZl84a19zYl8xc2VnOworCQkJfSBlbHNlIHsJLy8gMy1zZWdtZW50cworCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPT0gRFFQU0spIHsJLy8gRFFQU0sgb24gY2VudHJhbCBzZWdtZW50CisJCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPT0gRFFQU0spIHsJLy8gRFFQU0sgb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzhrX3NiXzNzZWdfMGRxcHNrXzFkcXBzazsKKwkJCQkJfSBlbHNlIHsJLy8gUVBTSyBvciBRQU0gb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzhrX3NiXzNzZWdfMGRxcHNrOworCQkJCQl9CisJCQkJfSBlbHNlIHsJLy8gUVBTSyBvciBRQU0gb24gY2VudHJhbCBzZWdtZW50CisJCQkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPT0gRFFQU0spIHsJLy8gRFFQU0sgb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzhrX3NiXzNzZWdfMWRxcHNrOworCQkJCQl9IGVsc2UJLy8gUVBTSyBvciBRQU0gb24gZXh0ZXJuYWwgc2VnbWVudHMKKwkJCQkJCW5jb2VmZiA9IGNvZWZmXzhrX3NiXzNzZWc7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKQorCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNDMgKyBpLCBuY29lZmZbaV0pOworCisJLy8gUF9zbWFsbF9jb2VmX2V4dF9lbmFibGU9SVNEQi1Uc2IsIFBfc21hbGxfbmFycm93X2JhbmQ9SVNEQi1Uc2IsIFBfc21hbGxfbGFzdF9zZWc9MTMsIFBfc21hbGxfb2Zmc2V0X251bV9jYXI9NQorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzUxLAorCQkJICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA8PCA5KSB8IChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPDwgOCkgfCAoMTMgPDwgNCkgfCA1KTsKKworCS8vIC0tLS0gQ09GRiAtLS0tCisJLy8gQ2FybG9mZiwgdGhlIG1vc3Qgcm9idXN0CisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKSB7CS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIC0gdXNlIGJvdGggVE1DQyBhbmQgQUMgcGlsb3RzCisKKwkJLy8gUF9jb2ZmX2NwaWxfYWxwaGE9NCwgUF9jb2ZmX2luaD0wLCBQX2NvZmZfY3BpbF93aW5sZW49NjQKKwkJLy8gUF9jb2ZmX25hcnJvd19iYW5kPTEsIFBfY29mZl9zcXVhcmVfdmFsPTEsIFBfY29mZl9vbmVfc2VnPX5wYXJ0aWFsX3JjcHQsIFBfY29mZl91c2VfdG1jYz0xLCBQX2NvZmZfdXNlX2FjPTEKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODcsCisJCQkJICAgKDQgPDwgMTIpIHwgKDAgPDwgMTEpIHwgKDYzIDw8IDUpIHwgKDB4MyA8PCAzKSB8ICgofnN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gJiAxKSA8PCAyKQorCQkJCSAgIHwgMHgzKTsKKworLyogICAgICAgICAgICAgLy8gUF9zbWFsbF9jb2VmX2V4dF9lbmFibGUgPSAxICovCisvKiAgICAgICAgICAgICBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM1MSwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDM1MSkgfCAweDIwMCk7ICovCisKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPT0gMCkgewkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAxIHNlZworCisJCQkvLyBQX2NvZmZfd2lubGVuPTYzLCBQX2NvZmZfdGhyZXNfbG9jaz0xNSwgUF9jb2ZmX29uZV9zZWdfd2lkdGg9IChQX21vZGUgPT0gMykgLCBQX2NvZmZfb25lX3NlZ19zeW09IChQX21vZGUtMSkKKwkJCWlmIChtb2RlID09IDMpCisJCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODAsIDB4MWZjZiB8ICgobW9kZSAtIDEpIDw8IDE0KSk7CisJCQllbHNlCisJCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODAsIDB4MGZjZiB8ICgobW9kZSAtIDEpIDw8IDE0KSk7CisJCQkvLyBQX2N0cmxfY29ybV90aHJlczRwcmVfZnJlcV9pbmg9MSxQX2N0cmxfcHJlX2ZyZXFfbW9kZV9zYXQ9MSwKKwkJCS8vIFBfY3RybF9wcmVfZnJlcV9pbmg9MCwgUF9jdHJsX3ByZV9mcmVxX3N0ZXAgPSA1LCBQX3ByZV9mcmVxX3dpbl9sZW49NAorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMzgsICgxIDw8IDEyKSB8ICgxIDw8IDEwKSB8ICgwIDw8IDkpIHwgKDUgPDwgNSkgfCA0KTsKKwkJCS8vIFBfY3RybF9wcmVfZnJlcV93aW5fbGVuPTE2LCBQX2N0cmxfcHJlX2ZyZXFfdGhyZXNfbG9ja2luPTgKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzQwLCAoMTYgPDwgNikgfCAoOCA8PCAwKSk7CisJCQkvLyBQX2N0cmxfcHJlX2ZyZXFfdGhyZXNfbG9ja291dD02LCBQX3NtYWxsX3VzZV90bWNjL2FjL2NwPTEKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzQxLCAoNiA8PCAzKSB8ICgxIDw8IDIpIHwgKDEgPDwgMSkgfCAoMSA8PCAwKSk7CisKKwkJCS8vIFBfY29mZl9jb3J0aHJlc184aywgNGssIDJrIGFuZCBQX2NvZmZfY3BpbHRocmVzXzhrLCA0aywgMmsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgxLCAzMDApOworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODIsIDE1MCk7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MywgODApOworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODQsIDMwMCk7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4NSwgMTUwKTsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg2LCA4MCk7CisJCX0gZWxzZSB7CS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDMgc2VnCisJCQkvLyBQX2NvZmZfb25lX3NlZ19zeW09IDEsIFBfY29mZl9vbmVfc2VnX3dpZHRoPSAxLCBQX2NvZmZfd2lubGVuPTYzLCBQX2NvZmZfdGhyZXNfbG9jaz0xNQorCQkJLyogICAgICAgICAgICAgICAgIGlmIChtb2RlID09IDMpICovCisJCQkvKiAgICAgICAgICAgICAgICAgICAgIGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgwLCAweDJmY2EgfCAoKDApIDw8IDE0KSk7ICovCisJCQkvKiAgICAgICAgICAgICAgICAgZWxzZSAqLworCQkJLyogICAgICAgICAgICAgICAgICAgICBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MCwgMHgyZmNhIHwgKCgxKSA8PCAxNCkpOyAqLworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODAsIDB4MWZjZiB8ICgxIDw8IDE0KSk7CisKKwkJCS8vIFBfY3RybF9jb3JtX3RocmVzNHByZV9mcmVxX2luaCA9IDEsIFBfY3RybF9wcmVfZnJlcV9tb2RlX3NhdD0xLAorCQkJLy8gUF9jdHJsX3ByZV9mcmVxX2luaD0wLCBQX2N0cmxfcHJlX2ZyZXFfc3RlcCA9IDQsIFBfcHJlX2ZyZXFfd2luX2xlbj00CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDMzOCwgKDEgPDwgMTIpIHwgKDEgPDwgMTApIHwgKDAgPDwgOSkgfCAoNCA8PCA1KSB8IDQpOworCQkJLy8gUF9jdHJsX3ByZV9mcmVxX3dpbl9sZW49MTYsIFBfY3RybF9wcmVfZnJlcV90aHJlc19sb2NraW49OAorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNDAsICgxNiA8PCA2KSB8ICg4IDw8IDApKTsKKwkJCS8vUF9jdHJsX3ByZV9mcmVxX3RocmVzX2xvY2tvdXQ9NiwgUF9zbWFsbF91c2VfdG1jYy9hYy9jcD0xCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM0MSwgKDYgPDwgMykgfCAoMSA8PCAyKSB8ICgxIDw8IDEpIHwgKDEgPDwgMCkpOworCisJCQkvLyBQX2NvZmZfY29ydGhyZXNfOGssIDRrLCAyayBhbmQgUF9jb2ZmX2NwaWx0aHJlc184aywgNGssIDJrCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MSwgMzUwKTsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgyLCAzMDApOworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODMsIDI1MCk7CisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4NCwgMzUwKTsKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg1LCAzMDApOworCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODYsIDI1MCk7CisJCX0KKworCX0gZWxzZSBpZiAoc3RhdGUtPmlzZGJ0X2NmZ19sb2FkZWQgPT0gMCkgewkvLyBpZiBub3QgU291bmQgQnJvYWRjYXN0aW5nIG1vZGUgOiBwdXQgZGVmYXVsdCB2YWx1ZXMgZm9yIDEzIHNlZ21lbnRzCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTgwLCAoMTYgPDwgNikgfCA5KTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODcsICg0IDw8IDEyKSB8ICg4IDw8IDUpIHwgMHgyKTsKKwkJY29mZl9wb3cgPSAweDI4MDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MSArIGksIGNvZmZfcG93KTsKKworCQkvLyBQX2N0cmxfY29ybV90aHJlczRwcmVfZnJlcV9pbmg9MSwgUF9jdHJsX3ByZV9mcmVxX21vZGVfc2F0PTEsCisJCS8vIFBfY3RybF9wcmVfZnJlcV9tb2RlX3NhdD0xLCBQX2N0cmxfcHJlX2ZyZXFfaW5oPTAsIFBfY3RybF9wcmVfZnJlcV9zdGVwID0gMywgUF9wcmVfZnJlcV93aW5fbGVuPTEKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMzgsICgxIDw8IDEyKSB8ICgxIDw8IDEwKSB8ICgwIDw8IDkpIHwgKDMgPDwgNSkgfCAxKTsKKworCQkvLyBQX2N0cmxfcHJlX2ZyZXFfd2luX2xlbj04LCBQX2N0cmxfcHJlX2ZyZXFfdGhyZXNfbG9ja2luPTYKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNDAsICg4IDw8IDYpIHwgKDYgPDwgMCkpOworCQkvLyBQX2N0cmxfcHJlX2ZyZXFfdGhyZXNfbG9ja291dD00LCBQX3NtYWxsX3VzZV90bWNjL2FjL2NwPTEKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNDEsICg0IDw8IDMpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApKTsKKwl9CisJLy8gLS0tLSBGRlQgLS0tLQorCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSAmJiBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApCS8vIDEtc2VnCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTc4LCA2NCk7CS8vIFBfZmZ0X3Bvd3JhbmdlPTY0CisJZWxzZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE3OCwgMzIpOwkvLyBQX2ZmdF9wb3dyYW5nZT0zMgorCisJLyogbWFrZSB0aGUgY3BpbF9jb2ZmX2xvY2sgbW9yZSByb2J1c3QgYnV0IHNsb3dlciBwX2NvZmZfd2lubGVuCisJICogNmJpdHM7IHBfY29mZl90aHJlc19sb2NrIDZiaXRzIChmb3IgY29mZiBsb2NrIGlmIG5lZWRlZCkKKwkgKi8KKwkvKiBpZiAoICggbmJzZWdfZGlmZj4wKSYmKG5ic2VnX2RpZmY8MTMpKQorCSAgIGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTg3LCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDE4NykgJiAweGZmZmIpIHwgKDEgPDwgMykpOyAqLworCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxODksIH5zZWdfbWFzazEzIHwgc2VnX2RpZmZfbWFzayk7CS8qIFBfbG1vZDRfc2VnX2luaCAgICAgICAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTkyLCB+c2VnX21hc2sxMyB8IHNlZ19kaWZmX21hc2spOwkvKiBQX3BoYTNfc2VnX2luaCAgICAgICAgKi8KKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIyNSwgfnNlZ19tYXNrMTMgfCBzZWdfZGlmZl9tYXNrKTsJLyogUF90YWNfc2VnX2luaCAgICAgICAgICovCisJaWYgKCghc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlKSAmJiAoc3RhdGUtPmNmZy5wbGwtPmlmcmVxID09IDApKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI2NiwgfnNlZ19tYXNrMTMgfCBzZWdfZGlmZl9tYXNrIHwgMHg0MCk7CS8qIFBfZXF1YWxfbm9pc2Vfc2VnX2luaCAqLworCWVsc2UKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNjYsIH5zZWdfbWFzazEzIHwgc2VnX2RpZmZfbWFzayk7CS8qIFBfZXF1YWxfbm9pc2Vfc2VnX2luaCAqLworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjg3LCB+c2VnX21hc2sxMyB8IDB4MTAwMCk7CS8qIFBfdG1jY19zZWdfaW5oICAgICAgICAqLworCS8vZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyODgsIH5zZWdfbWFzazEzIHwgc2VnX2RpZmZfbWFzayk7IC8qIFBfdG1jY19zZWdfZXFfaW5oICovCisJaWYgKCFhdXRvc2VhcmNoaW5nKQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI4OCwgKH5zZWdfbWFzazEzIHwgc2VnX2RpZmZfbWFzaykgJiAweDFmZmYpOwkvKiBQX3RtY2Nfc2VnX2VxX2luaCAqLworCWVsc2UKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyODgsIDB4MWZmZik7CS8vZGlzYWJsZSBlcXVhbGlzYXRpb24gb2YgdGhlIHRtY2Mgd2hlbiBhdXRvc2VhcmNoIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgRFFQU0sgY2hhbm5lbHMuCisJZHByaW50aygiMjg3ID0gJVggKCVkKSIsIH5zZWdfbWFzazEzIHwgMHgxMDAwLCB+c2VnX21hc2sxMyB8IDB4MTAwMCk7CisKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIxMSwgc2VnX21hc2sxMyAmICh+c2VnX2RpZmZfbWFzaykpOwkvKiBQX2Rlc19zZWdfZW5hYmxlZCAgICAgKi8KKworCS8qIG9mZnNldCBsb29wIHBhcmFtZXRlcnMgKi8KKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpIHsKKwkJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPT0gMCkJLy8gU291bmQgQnJvYWRjYXN0aW5nIG1vZGUgMSBzZWcKKwkJCS8qIFBfdGltZl9hbHBoYSA9ICgxMS1QX21vZGUpLCBQX2Nvcm1fYWxwaGE9NiwgUF9jb3JtX3RocmVzPTB4ODAgKi8KKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzIsICgoMTEgLSBtb2RlKSA8PCAxMikgfCAoNiA8PCA4KSB8IDB4NDApOworCisJCWVsc2UJCS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDMgc2VnCisJCQkvKiBQX3RpbWZfYWxwaGEgPSAoMTAtUF9tb2RlKSwgUF9jb3JtX2FscGhhPTYsIFBfY29ybV90aHJlcz0weDgwICovCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDMyLCAoKDEwIC0gbW9kZSkgPDwgMTIpIHwgKDYgPDwgOCkgfCAweDYwKTsKKwl9IGVsc2UKKwkJLy8gVE9ETyBpbiAxMyBzZWcsIHRpbWZfYWxwaGEgY2FuIGFsd2F5cyBiZSB0aGUgc2FtZSBvciBub3QgPworCQkvKiBQX3RpbWZfYWxwaGEgPSAoOS1QX21vZGUsIFBfY29ybV9hbHBoYT02LCBQX2Nvcm1fdGhyZXM9MHg4MCAqLworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDMyLCAoKDkgLSBtb2RlKSA8PCAxMikgfCAoNiA8PCA4KSB8IDB4ODApOworCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKSB7CisJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApCS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDEgc2VnCisJCQkvKiBQX2N0cmxfcGhhX29mZl9tYXg9MyAgIFBfY3RybF9zZnJlcV9pbmggPTAgIFBfY3RybF9zZnJlcV9zdGVwID0gKDExLVBfbW9kZSkgICovCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM3LCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDEwIC0gbW9kZSkpOworCisJCWVsc2UJCS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDMgc2VnCisJCQkvKiBQX2N0cmxfcGhhX29mZl9tYXg9MyAgIFBfY3RybF9zZnJlcV9pbmggPTAgIFBfY3RybF9zZnJlcV9zdGVwID0gKDEwLVBfbW9kZSkgICovCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM3LCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDkgLSBtb2RlKSk7CisJfSBlbHNlCisJCS8qIFBfY3RybF9waGFfb2ZmX21heD0zICAgUF9jdHJsX3NmcmVxX2luaCA9MCAgUF9jdHJsX3NmcmVxX3N0ZXAgPSA5ICAqLworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM3LCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDggLSBtb2RlKSk7CisKKwkvKiBQX2R2c3lfc3luY193YWl0IC0gcmV1c2UgbW9kZSAqLworCXN3aXRjaCAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSkgeworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6CisJCW1vZGUgPSAyNTY7CisJCWJyZWFrOworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfNEs6CisJCW1vZGUgPSAxMjg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzoKKwkJbW9kZSA9IDY0OworCQlicmVhazsKKwl9CisJaWYgKHN0YXRlLT5jZmcuZGl2ZXJzaXR5X2RlbGF5ID09IDApCisJCW1vZGUgPSAobW9kZSAqICgxIDw8IChndWFyZCkpICogMykgLyAyICsgNDg7CS8vIGFkZCA1MCUgU0ZOIG1hcmdpbiArIGNvbXBlbnNhdGUgZm9yIG9uZSBEVlNZLWZpZm8KKwllbHNlCisJCW1vZGUgPSAobW9kZSAqICgxIDw8IChndWFyZCkpICogMykgLyAyICsgc3RhdGUtPmNmZy5kaXZlcnNpdHlfZGVsYXk7CS8vIGFkZCA1MCUgU0ZOIG1hcmdpbiArIGNvbXBlbnNhdGUgZm9yIERWU1ktZmlmbworCW1vZGUgPDw9IDQ7CisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNzMsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjczKSAmIDB4MDAwZikgfCBtb2RlKTsKKworCS8qIGNoYW5uZWwgZXN0aW1hdGlvbiBmaW5lIGNvbmZpZ3VyYXRpb24gKi8KKwlzd2l0Y2ggKG1heF9jb25zdGVsbGF0aW9uKSB7CisJY2FzZSBRQU1fNjQ6CisJCWFuYV9nYWluID0gMHg3OwkvLyAtMSA6IGF2b2lkIGRlZl9lc3Qgc2F0dXJhdGlvbiB3aGVuIEFEQyB0YXJnZXQgaXMgLTE2ZEIKKwkJY29lZmZbMF0gPSAweDAxNDg7CS8qIFBfYWRwX3JlZ3VsX2NudCAwLjA0ICovCisJCWNvZWZmWzFdID0gMHhmZmYwOwkvKiBQX2FkcF9ub2lzZV9jbnQgLTAuMDAyICovCisJCWNvZWZmWzJdID0gMHgwMGE0OwkvKiBQX2FkcF9yZWd1bF9leHQgMC4wMiAqLworCQljb2VmZlszXSA9IDB4ZmZmODsJLyogUF9hZHBfbm9pc2VfZXh0IC0wLjAwMSAqLworCQkvL2lmICghc3RhdGUtPmNmZy5ob3N0YnVzX2RpdmVyc2l0eSkgLy9pZiBkaXZlcnNpdHksIHdlIHNob3VsZCBwcmVoYXBzIHVzZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbWF4X2NvbnN0YWxsYXRpb24gLTEKKwkJYnJlYWs7CisJY2FzZSBRQU1fMTY6CisJCWFuYV9nYWluID0gMHg3OwkvLyAtMSA6IGF2b2lkIGRlZl9lc3Qgc2F0dXJhdGlvbiB3aGVuIEFEQyB0YXJnZXQgaXMgLTE2ZEIKKwkJY29lZmZbMF0gPSAweDAyM2Q7CS8qIFBfYWRwX3JlZ3VsX2NudCAwLjA3ICovCisJCWNvZWZmWzFdID0gMHhmZmRmOwkvKiBQX2FkcF9ub2lzZV9jbnQgLTAuMDA0ICovCisJCWNvZWZmWzJdID0gMHgwMGE0OwkvKiBQX2FkcF9yZWd1bF9leHQgMC4wMiAqLworCQljb2VmZlszXSA9IDB4ZmZmMDsJLyogUF9hZHBfbm9pc2VfZXh0IC0wLjAwMiAqLworCQkvL2lmICghKChzdGF0ZS0+Y2ZnLmhvc3RidXNfZGl2ZXJzaXR5KSAmJiAobWF4X2NvbnN0ZWxsYXRpb24gPT0gUUFNXzE2KSkpCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFuYV9nYWluID0gMDsJLy8gMCA6IGdvZXMgYWxvbmcgd2l0aCBBREMgdGFyZ2V0IGF0IC0yMmRCIHRvIGtlZXAgZ29vZCBtb2JpbGUgcGVyZm9ybWFuY2UgYW5kIGxvY2sgYXQgc2Vuc2l0aXZpdHkgbGV2ZWwKKwkJY29lZmZbMF0gPSAweDA5OWE7CS8qIFBfYWRwX3JlZ3VsX2NudCAwLjMgKi8KKwkJY29lZmZbMV0gPSAweGZmYWU7CS8qIFBfYWRwX25vaXNlX2NudCAtMC4wMSAqLworCQljb2VmZlsyXSA9IDB4MDMzMzsJLyogUF9hZHBfcmVndWxfZXh0IDAuMSAqLworCQljb2VmZlszXSA9IDB4ZmZmODsJLyogUF9hZHBfbm9pc2VfZXh0IC0wLjAwMiAqLworCQlicmVhazsKKwl9CisJZm9yIChtb2RlID0gMDsgbW9kZSA8IDQ7IG1vZGUrKykKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyMTUgKyBtb2RlLCBjb2VmZlttb2RlXSk7CisKKwkvLyB1cGRhdGUgYW5hX2dhaW4gZGVwZW5kaW5nIG9uIG1heCBjb25zdGVsbGF0aW9uCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMTYsIGFuYV9nYWluKTsKKwkvLyB1cGRhdGUgQURDIHRhcmdldCBkZXBlbmRpbmcgb24gYW5hX2dhaW4KKwlpZiAoYW5hX2dhaW4pIHsJCS8vIHNldCAtMTZkQiBBREMgdGFyZ2V0IGZvciBhbmFfZ2Fpbj0tMQorCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgODAgKyBpLCBhZGNfdGFyZ2V0XzE2ZEJbaV0pOworCX0gZWxzZSB7CQkvLyBzZXQgLTIyZEIgQURDIHRhcmdldCBmb3IgYW5hX2dhaW49MAorCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgODAgKyBpLCBhZGNfdGFyZ2V0XzE2ZEJbaV0gLSAzNTUpOworCX0KKworCS8vIC0tLS0gQU5BX0ZFIC0tLS0KKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlKSB7CisJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDEpCS8vIDMtc2VnbWVudHMKKwkJCWFuYV9mZSA9IGFuYV9mZV9jb2VmZl8zc2VnOworCQllbHNlCQkvLyAxLXNlZ21lbnQKKwkJCWFuYV9mZSA9IGFuYV9mZV9jb2VmZl8xc2VnOworCX0gZWxzZQorCQlhbmFfZmUgPSBhbmFfZmVfY29lZmZfMTNzZWc7CisKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEgfHwgc3RhdGUtPmlzZGJ0X2NmZ19sb2FkZWQgPT0gMCkKKwkJZm9yIChtb2RlID0gMDsgbW9kZSA8IDI0OyBtb2RlKyspCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDExNyArIG1vZGUsIGFuYV9mZVttb2RlXSk7CisKKwkvLyAtLS0tIENIQU5fQkxLIC0tLS0KKwlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykgeworCQlpZiAoKCgofnNlZ19kaWZmX21hc2spID4+IGkpICYgMSkgPT0gMSkgeworCQkJUF9jZnJfbGVmdF9lZGdlICs9ICgxIDw8IGkpICogKChpID09IDApIHx8ICgoKChzZWdfbWFzazEzICYgKH5zZWdfZGlmZl9tYXNrKSkgPj4gKGkgLSAxKSkgJiAxKSA9PSAwKSk7CisJCQlQX2Nmcl9yaWdodF9lZGdlICs9ICgxIDw8IGkpICogKChpID09IDEyKSB8fCAoKCgoc2VnX21hc2sxMyAmICh+c2VnX2RpZmZfbWFzaykpID4+IChpICsgMSkpICYgMSkgPT0gMCkpOworCQl9CisJfQorCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjIyLCBQX2Nmcl9sZWZ0X2VkZ2UpOwkvLyBQX2Nmcl9sZWZ0X2VkZ2UKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIyMywgUF9jZnJfcmlnaHRfZWRnZSk7CS8vIFBfY2ZyX3JpZ2h0X2VkZ2UKKwkvLyAiUF9jc3B1X2xlZnRfZWRnZSIgIG5vdCB1c2VkID0+IGRvIG5vdCBjYXJlCisJLy8gIlBfY3NwdV9yaWdodF9lZGdlIiBub3QgdXNlZCA9PiBkbyBub3QgY2FyZQorCisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKSB7CS8vIElTREItVHNiCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjI4LCAxKTsJLy8gUF8yZF9tb2RlX2J5cD0xCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjA1LCBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMjA1KSAmIDB4ZmZmMCk7CS8vIFBfY3NwdV93aW5fY3V0ID0gMAorCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbiA9PSAwCS8vIDEtc2VnbWVudAorCQkgICAgJiYgc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV8ySykgeworCQkJLy9kaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDIxOSwgZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDIxOSkgJiAweGZmZmUpOyAvLyBQX2FkcF9wYXNzID0gMAorCQkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNjUsIDE1KTsJLy8gUF9lcXVhbF9ub2lzZV9zZWwgPSAxNQorCQl9CisJfSBlbHNlIGlmIChzdGF0ZS0+aXNkYnRfY2ZnX2xvYWRlZCA9PSAwKSB7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjI4LCAwKTsJLy8gZGVmYXVsdCB2YWx1ZQorCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI2NSwgMzEpOwkvLyBkZWZhdWx0IHZhbHVlCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjA1LCAweDIwMGYpOwkvLyBpbml0IHZhbHVlCisJfQorCS8vIC0tLS0gVE1DQyAtLS0tCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJdG1jY19wb3cgKz0KKwkJICAgICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbiA9PSBEUVBTSykgKiA0ICsgMSkgKiBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLnNlZ21lbnRfY291bnQpOworCS8vIFF1YW50aWYgb2YgIlBfdG1jY19kZWNfdGhyZXNfP2siIGlzICgwLCA1K21vZGUsIDkpOworCS8vIFRocmVzaG9sZCBpcyBzZXQgYXQgMS80IG9mIG1heCBwb3dlci4KKwl0bWNjX3BvdyAqPSAoMSA8PCAoOSAtIDIpKTsKKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjkwLCB0bWNjX3Bvdyk7CS8vIFBfdG1jY19kZWNfdGhyZXNfMmsKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDI5MSwgdG1jY19wb3cpOwkvLyBQX3RtY2NfZGVjX3RocmVzXzRrCisJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyOTIsIHRtY2NfcG93KTsJLy8gUF90bWNjX2RlY190aHJlc184aworCS8vZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyODcsICgxIDw8IDEzKSB8IDB4MTAwMCApOworCS8vIC0tLS0gUEhBMyAtLS0tCisKKwlpZiAoc3RhdGUtPmlzZGJ0X2NmZ19sb2FkZWQgPT0gMCkKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyNTAsIDMyODUpOwkvKnBfMmRfaHNwZWVkX3RocjAgKi8KKworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkKKwkJc3RhdGUtPmlzZGJ0X2NmZ19sb2FkZWQgPSAwOworCWVsc2UKKwkJc3RhdGUtPmlzZGJ0X2NmZ19sb2FkZWQgPSAxOworCit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9hdXRvc2VhcmNoX3N0YXJ0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXU4IGZhY3RvcjsKKwl1MzIgdmFsdWU7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpbnQgc2xpc3QgPSAwOworCisJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pbnZlcnNpb24gPSAwOworCWlmICghc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlKQorCQlzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLnNlZ21lbnRfY291bnQgPSAxMzsKKwlzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPSBRQU1fNjQ7CisJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5mZWMgPSBGRUNfMl8zOworCXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uaW50ZXJsZWF2aW5nID0gMDsKKworCS8vY2hvb3NlIHRoZSByaWdodCBsaXN0LCBpbiBzYiwgYWx3YXlzIGRvIGV2ZXJ5dGhpbmcKKwlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlKSB7CisJCXN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsKKwkJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfODsKKwkJc2xpc3QgPSA3OworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDAsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMCkgJiAweDlmZmYpIHwgKDEgPDwgMTMpKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPKSB7CisJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV9BVVRPKSB7CisJCQkJc2xpc3QgPSA3OworCQkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMCwgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAwKSAmIDB4OWZmZikgfCAoMSA8PCAxMykpOwkvLyBQX21vZGUgPSAxIHRvIGhhdmUgYXV0b3NlYXJjaCBzdGFydCBvayB3aXRoIG1vZGUyCisJCQl9IGVsc2UKKwkJCQlzbGlzdCA9IDM7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV9BVVRPKSB7CisJCQkJc2xpc3QgPSAyOworCQkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMCwgKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAwKSAmIDB4OWZmZikgfCAoMSA8PCAxMykpOwkvLyBQX21vZGUgPSAxCisJCQl9IGVsc2UKKwkJCQlzbGlzdCA9IDA7CisJCX0KKworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV9BVVRPKQorCQkJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPKQorCQkJc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfODsKKworCQlkcHJpbnRrKCJ1c2luZyBsaXN0IGZvciBhdXRvc2VhcmNoIDogJWQiLCBzbGlzdCk7CisJCWRpYjgwMDBfc2V0X2NoYW5uZWwoc3RhdGUsICh1bnNpZ25lZCBjaGFyKXNsaXN0LCAxKTsKKwkJLy9kaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDAsIChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMCkgJiAweDlmZmYpIHwgKDEgPDwgMTMpKTsgIC8vIFBfbW9kZSA9IDEKKworCQlmYWN0b3IgPSAxOworCisJCS8vc2V0IGxvY2tfbWFzayB2YWx1ZXMKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA2LCAweDQpOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDcsIDB4OCk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOCwgMHgxMDAwKTsKKworCQkvL3NldCBsb2NrX21hc2sgd2FpdCB0aW1lIHZhbHVlcworCQl2YWx1ZSA9IDUwICogc3RhdGUtPmNmZy5wbGwtPmludGVybmFsICogZmFjdG9yOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDExLCAodTE2KSAoKHZhbHVlID4+IDE2KSAmIDB4ZmZmZikpOwkvLyBsb2NrMCB3YWl0IHRpbWUKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMiwgKHUxNikgKHZhbHVlICYgMHhmZmZmKSk7CS8vIGxvY2swIHdhaXQgdGltZQorCQl2YWx1ZSA9IDEwMCAqIHN0YXRlLT5jZmcucGxsLT5pbnRlcm5hbCAqIGZhY3RvcjsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxMywgKHUxNikgKCh2YWx1ZSA+PiAxNikgJiAweGZmZmYpKTsJLy8gbG9jazEgd2FpdCB0aW1lCisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMTQsICh1MTYpICh2YWx1ZSAmIDB4ZmZmZikpOwkvLyBsb2NrMSB3YWl0IHRpbWUKKwkJdmFsdWUgPSAxMDAwICogc3RhdGUtPmNmZy5wbGwtPmludGVybmFsICogZmFjdG9yOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDE1LCAodTE2KSAoKHZhbHVlID4+IDE2KSAmIDB4ZmZmZikpOwkvLyBsb2NrMiB3YWl0IHRpbWUKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAxNiwgKHUxNikgKHZhbHVlICYgMHhmZmZmKSk7CS8vIGxvY2syIHdhaXQgdGltZQorCisJCXZhbHVlID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDApOworCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDAsICh1MTYpICgoMSA8PCAxNSkgfCB2YWx1ZSkpOworCQlkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMTI4NCk7CS8vIHJlc2V0IHRoZSBJTlQuIG5faXJxX3BlbmRpbmcKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAwLCAodTE2KSB2YWx1ZSk7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX2F1dG9zZWFyY2hfaXJxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBpcnFfcGVuZGluZyA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCAxMjg0KTsKKworCWlmIChpcnFfcGVuZGluZyAmIDB4MSkgewkvLyBmYWlsZWQKKwkJZHByaW50aygiZGliODAwMF9hdXRvc2VhcmNoX2lycSBmYWlsZWQiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGlycV9wZW5kaW5nICYgMHgyKSB7CS8vIHN1Y2NlZWRlZAorCQlkcHJpbnRrKCJkaWI4MDAwX2F1dG9zZWFyY2hfaXJxIHN1Y2NlZWRlZCIpOworCQlyZXR1cm4gMjsKKwl9CisKKwlyZXR1cm4gMDsJCS8vIHN0aWxsIHBlbmRpbmcKK30KKworc3RhdGljIGludCBkaWI4MDAwX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldCA9IDA7CisJdTE2IHZhbHVlLCBtb2RlID0gZmZ0X3RvX21vZGUoc3RhdGUpOworCisJLy8gd2UgYXJlIGFscmVhZHkgdHVuZWQgLSBqdXN0IHJlc3VtaW5nIGZyb20gc3VzcGVuZAorCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpYjgwMDBfc2V0X2JhbmR3aWR0aChzdGF0ZSwgc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwKTsKKwlkaWI4MDAwX3NldF9jaGFubmVsKHN0YXRlLCAwLCAwKTsKKworCS8vIHJlc3RhcnQgZGVtb2QKKwlyZXQgfD0gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA3NzAsIDB4NDAwMCk7CisJcmV0IHw9IGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgNzcwLCAweDAwMDApOworCW1zbGVlcCg0NSk7CisKKwkvKiBQX2N0cmxfaW5oX2Nvcj0wLCBQX2N0cmxfYWxwaGFfY29yPTQsIFBfY3RybF9pbmhfaXNpPTAsIFBfY3RybF9hbHBoYV9pc2k9MyAqLworCS8qICByZXQgfD0gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAyOSwgKDAgPDwgOSkgfCAoNCA8PCA1KSB8ICgwIDw8IDQpIHwgKDMgPDwgMCkgKTsgIHdvcmthcm91bmQgaW5oX2lzaSBzdGF5cyBhdCAxICovCisKKwkvLyBuZXZlciBhY2hpZXZlZCBhIGxvY2sgYmVmb3JlIC0gd2FpdCBmb3IgdGltZnJlcSB0byB1cGRhdGUKKwlpZiAoc3RhdGUtPnRpbWYgPT0gMCkgeworCQlpZiAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpIHsKKwkJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApCS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDEgc2VnCisJCQkJbXNsZWVwKDMwMCk7CisJCQllbHNlCS8vIFNvdW5kIEJyb2FkY2FzdGluZyBtb2RlIDMgc2VnCisJCQkJbXNsZWVwKDUwMCk7CisJCX0gZWxzZQkJLy8gMTMgc2VnCisJCQltc2xlZXAoMjAwKTsKKwl9CisJLy9kdW1wX3JlZyhzdGF0ZSk7CisJaWYgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKSB7CisJCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID09IDApIHsJLy8gU291bmQgQnJvYWRjYXN0aW5nIG1vZGUgMSBzZWcKKworCQkJLyogUF90aW1mX2FscGhhID0gKDEzLVBfbW9kZSkgLCBQX2Nvcm1fYWxwaGE9NiwgUF9jb3JtX3RocmVzPTB4NDAgIGFscGhhIHRvIGNoZWNrIG9uIGJvYXJkICovCisJCQlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDMyLCAoKDEzIC0gbW9kZSkgPDwgMTIpIHwgKDYgPDwgOCkgfCAweDQwKTsKKwkJCS8vZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMiwgKDggPDwgMTIpIHwgKDYgPDwgOCkgfCAweDgwKTsKKworCQkJLyogIFBfY3RybF9zZnJlcV9zdGVwPSAoMTItUF9tb2RlKSAgIFBfY3RybF9zZnJlcV9pbmggPTAgICAgIFBfY3RybF9waGFfb2ZmX21heCAgKi8KKwkJCXJldCB8PSBkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDM3LCAoMTIgLSBtb2RlKSB8ICgoNSArIG1vZGUpIDw8IDUpKTsKKworCQl9IGVsc2UgewkvLyBTb3VuZCBCcm9hZGNhc3RpbmcgbW9kZSAzIHNlZworCisJCQkvKiBQX3RpbWZfYWxwaGEgPSAoMTItUF9tb2RlKSAsIFBfY29ybV9hbHBoYT02LCBQX2Nvcm1fdGhyZXM9MHg2MCAgYWxwaGEgdG8gY2hlY2sgb24gYm9hcmQgKi8KKwkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzIsICgoMTIgLSBtb2RlKSA8PCAxMikgfCAoNiA8PCA4KSB8IDB4NjApOworCisJCQlyZXQgfD0gZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNywgKDExIC0gbW9kZSkgfCAoKDUgKyBtb2RlKSA8PCA1KSk7CisJCX0KKworCX0gZWxzZSB7CQkvLyAxMyBzZWcKKwkJLyogUF90aW1mX2FscGhhID0gOCAsIFBfY29ybV9hbHBoYT02LCBQX2Nvcm1fdGhyZXM9MHg4MCAgYWxwaGEgdG8gY2hlY2sgb24gYm9hcmQgKi8KKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzMiwgKCgxMSAtIG1vZGUpIDw8IDEyKSB8ICg2IDw8IDgpIHwgMHg4MCk7CisKKwkJcmV0IHw9IGRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzcsICgxMCAtIG1vZGUpIHwgKCg1ICsgbW9kZSkgPDwgNSkpOworCisJfQorCisJLy8gd2UgYWNoaWV2ZWQgYSBjb2ZmX2NwaWxfbG9jayAtIGl0J3MgdGltZSB0byB1cGRhdGUgdGhlIHRpbWYKKwlpZiAoKGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NjgpID4+IDExKSAmIDB4MSkKKwkJZGliODAwMF91cGRhdGVfdGltZihzdGF0ZSk7CisKKwkvL25vdyB0aGF0IHR1bmUgaXMgZmluaXNoZWQsIGxvY2swIHNob3VsZCBsb2NrIG9uIGZlY19tcGVnIHRvIG91dHB1dCB0aGlzIGxvY2sgb24gTVBfTE9DSy4gSXQncyBjaGFuZ2VkIGluIGF1dG9zZWFyY2ggc3RhcnQKKwlkaWI4MDAwX3dyaXRlX3dvcmQoc3RhdGUsIDYsIDB4MjAwKTsKKworCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gMHg4MDAyKSB7CisJCXZhbHVlID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDkwMyk7CisJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgOTAzLCB2YWx1ZSAmIH4oMSA8PCAzKSk7CisJCW1zbGVlcCgxKTsKKwkJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCA5MDMsIHZhbHVlIHwgKDEgPDwgMykpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF93YWtldXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkaWI4MDAwX3NldF9wb3dlcl9tb2RlKHN0YXRlLCBESUI4MDAwTV9QT1dFUl9BTEwpOworCWRpYjgwMDBfc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9BRENfT04pOworCWlmIChkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3RhdGUsIERJQlgwMDBfU0xPV19BRENfT04pICE9IDApCisJCWRwcmludGsoImNvdWxkIG5vdCBzdGFydCBTbG93IEFEQyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliODAwMF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3QgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpZiAoMSkgeworCQlkaWI4MDAwX3NldF9vdXRwdXRfbW9kZShzdCwgT1VUTU9ERV9ISUdIX1opOworCQlkaWI4MDAwX3NldF9wb3dlcl9tb2RlKHN0LCBESUI4MDAwTV9QT1dFUl9JTlRFUkZBQ0VfT05MWSk7CisJCXJldHVybiBkaWI4MDAwX3NldF9hZGNfc3RhdGUoc3QsIERJQlgwMDBfU0xPV19BRENfT0ZGKSB8IGRpYjgwMDBfc2V0X2FkY19zdGF0ZShzdCwgRElCWDAwMF9BRENfT0ZGKTsKKwl9IGVsc2UgeworCisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBkaWI4MDAwX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IGksIHZhbCA9IDA7CisKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmJhbmR3aWR0aF9oeiA9IDYwMDAwMDA7CisKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTA4KSAmIDB4MTsKKworCXZhbCA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NzApOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaW52ZXJzaW9uID0gKHZhbCAmIDB4NDApID4+IDY7CisJc3dpdGNoICgodmFsICYgMHgzMCkgPj4gNCkgeworCWNhc2UgMToKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOworCQlicmVhazsKKwljYXNlIDM6CisJZGVmYXVsdDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHZhbCAmIDB4MykgeworCWNhc2UgMDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7CisJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIEdJID0gMS8zMiAiKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsKKwkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgR0kgPSAxLzE2ICIpOworCQlicmVhazsKKwljYXNlIDI6CisJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIEdJID0gMS84ICIpOworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV84OworCQlicmVhazsKKwljYXNlIDM6CisJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIEdJID0gMS80ICIpOworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV80OworCQlicmVhazsKKwl9CisKKwl2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTA1KTsKKwlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3BhcnRpYWxfcmVjZXB0aW9uID0gdmFsICYgMTsKKwlkcHJpbnRrKCJkaWI4MDAwX2dldF9mcm9udGVuZCA6IHBhcnRpYWxfcmVjZXB0aW9uID0gJWQgIiwgZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9wYXJ0aWFsX3JlY2VwdGlvbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXZhbCA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA0OTMgKyBpKTsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5zZWdtZW50X2NvdW50ID0gdmFsICYgMHgwRjsKKwkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCBzZWdtZW50cyA9ICVkICIsIGksIGZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uc2VnbWVudF9jb3VudCk7CisKKwkJdmFsID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDQ5OSArIGkpOworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLmludGVybGVhdmluZyA9IHZhbCAmIDB4MzsKKwkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCB0aW1lX2ludGx2ID0gJWQgIiwgaSwgZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5pbnRlcmxlYXZpbmcpOworCisJCXZhbCA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA0ODEgKyBpKTsKKwkJc3dpdGNoICh2YWwgJiAweDcpIHsKKwkJY2FzZSAxOgorCQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5mZWMgPSBGRUNfMV8yOworCQkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCBDb2RlIFJhdGUgPSAxLzIgIiwgaSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5mZWMgPSBGRUNfMl8zOworCQkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCBDb2RlIFJhdGUgPSAyLzMgIiwgaSk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5mZWMgPSBGRUNfM180OworCQkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCBDb2RlIFJhdGUgPSAzLzQgIiwgaSk7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllcltpXS5mZWMgPSBGRUNfNV82OworCQkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCBDb2RlIFJhdGUgPSA1LzYgIiwgaSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0uZmVjID0gRkVDXzdfODsKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgQ29kZSBSYXRlID0gNy84ICIsIGkpOworCQkJYnJlYWs7CisJCX0KKworCQl2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNDg3ICsgaSk7CisJCXN3aXRjaCAodmFsICYgMHgzKSB7CisJCWNhc2UgMDoKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgRFFQU0sgIiwgaSk7CisJCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPSBEUVBTSzsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyW2ldLm1vZHVsYXRpb24gPSBRUFNLOworCQkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCBRUFNLICIsIGkpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbiA9IFFBTV8xNjsKKwkJCWRwcmludGsoImRpYjgwMDBfZ2V0X2Zyb250ZW5kIDogTGF5ZXIgJWQgUUFNMTYgIiwgaSk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQlkZWZhdWx0OgorCQkJZHByaW50aygiZGliODAwMF9nZXRfZnJvbnRlbmQgOiBMYXllciAlZCBRQU02NCAiLCBpKTsKKwkJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbaV0ubW9kdWxhdGlvbiA9IFFBTV82NDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgdGltZSwgcmV0OworCisJZGliODAwMF9zZXRfb3V0cHV0X21vZGUoc3RhdGUsIE9VVE1PREVfSElHSF9aKTsKKworCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKQorCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBmZXApOworCisJLyogc3RhcnQgdXAgdGhlIEFHQyAqLworCXN0YXRlLT50dW5lX3N0YXRlID0gQ1RfQUdDX1NUQVJUOworCWRvIHsKKwkJdGltZSA9IGRpYjgwMDBfYWdjX3N0YXJ0dXAoZmUpOworCQlpZiAodGltZSAhPSBGRV9DQUxMQkFDS19USU1FX05FVkVSKQorCQkJbXNsZWVwKHRpbWUgLyAxMCk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0gd2hpbGUgKHN0YXRlLT50dW5lX3N0YXRlICE9IENUX0FHQ19TVE9QKTsKKworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeSA9PSAwKSB7CisJCWRwcmludGsoImRpYjgwMDA6IG11c3QgYXQgbGVhc3Qgc3BlY2lmeSBmcmVxdWVuY3kgIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmJhbmR3aWR0aF9oeiA9PSAwKSB7CisJCWRwcmludGsoImRpYjgwMDA6IG5vIGJhbmR3aWR0aCBzcGVjaWZpZWQsIHNldCB0byBkZWZhdWx0ICIpOworCQlzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmJhbmR3aWR0aF9oeiA9IDYwMDAwMDA7CisJfQorCisJc3RhdGUtPnR1bmVfc3RhdGUgPSBDVF9ERU1PRF9TVEFSVDsKKworCWlmICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gIT0gU1lTX0lTREJUKSB8fAorCSAgICAoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pbnZlcnNpb24gPT0gSU5WRVJTSU9OX0FVVE8pIHx8CisJICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8pIHx8CisJICAgIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsID09IEdVQVJEX0lOVEVSVkFMX0FVVE8pIHx8CisJICAgICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZCAmICgxIDw8IDApKSAhPSAwKSAmJgorCSAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uc2VnbWVudF9jb3VudCAhPSAweGZmKSAmJgorCSAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uc2VnbWVudF9jb3VudCAhPSAwKSAmJgorCSAgICAgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLm1vZHVsYXRpb24gPT0gUUFNX0FVVE8pIHx8CisJICAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uZmVjID09IEZFQ19BVVRPKSkpIHx8CisJICAgICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZCAmICgxIDw8IDEpKSAhPSAwKSAmJgorCSAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0uc2VnbWVudF9jb3VudCAhPSAweGZmKSAmJgorCSAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0uc2VnbWVudF9jb3VudCAhPSAwKSAmJgorCSAgICAgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLm1vZHVsYXRpb24gPT0gUUFNX0FVVE8pIHx8CisJICAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0uZmVjID09IEZFQ19BVVRPKSkpIHx8CisJICAgICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZCAmICgxIDw8IDIpKSAhPSAwKSAmJgorCSAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uc2VnbWVudF9jb3VudCAhPSAweGZmKSAmJgorCSAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uc2VnbWVudF9jb3VudCAhPSAwKSAmJgorCSAgICAgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLm1vZHVsYXRpb24gPT0gUUFNX0FVVE8pIHx8CisJICAgICAgKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uZmVjID09IEZFQ19BVVRPKSkpIHx8CisJICAgICgoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uc2VnbWVudF9jb3VudCA9PSAwKSB8fAorCSAgICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9sYXllcl9lbmFibGVkICYgKDEgPDwgMCkpID09IDApKSAmJgorCSAgICAgKChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLnNlZ21lbnRfY291bnQgPT0gMCkgfHwKKwkgICAgICAoKHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfbGF5ZXJfZW5hYmxlZCAmICgyIDw8IDApKSA9PSAwKSkgJiYKKwkgICAgICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS5zZWdtZW50X2NvdW50ID09IDApIHx8ICgoc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9sYXllcl9lbmFibGVkICYgKDMgPDwgMCkpID09IDApKSkpIHsKKwkJaW50IGkgPSA4MDAsIGZvdW5kOworCisJCWRpYjgwMDBfc2V0X2JhbmR3aWR0aChzdGF0ZSwgZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwKTsKKwkJZGliODAwMF9hdXRvc2VhcmNoX3N0YXJ0KGZlKTsKKwkJZG8geworCQkJbXNsZWVwKDEwKTsKKwkJCWZvdW5kID0gZGliODAwMF9hdXRvc2VhcmNoX2lycShmZSk7CisJCX0gd2hpbGUgKGZvdW5kID09IDAgJiYgaS0tKTsKKworCQlkcHJpbnRrKCJGcmVxdWVuY3kgJWQgSHosIGF1dG9zZWFyY2ggcmV0dXJuczogJWQiLCBmZXAtPmZyZXF1ZW5jeSwgZm91bmQpOworCisJCWlmIChmb3VuZCA9PSAwIHx8IGZvdW5kID09IDEpCisJCQlyZXR1cm4gMDsJLy8gbm8gY2hhbm5lbCBmb3VuZAorCisJCWRpYjgwMDBfZ2V0X2Zyb250ZW5kKGZlLCBmZXApOworCX0KKworCXJldCA9IGRpYjgwMDBfdHVuZShmZSk7CisKKwkvKiBtYWtlIHRoaXMgYSBjb25maWcgcGFyYW1ldGVyICovCisJZGliODAwMF9zZXRfb3V0cHV0X21vZGUoc3RhdGUsIHN0YXRlLT5jZmcub3V0cHV0X21vZGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqIHN0YXQpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IGxvY2sgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTY4KTsKKworCSpzdGF0ID0gMDsKKworCWlmICgobG9jayA+PiAxNCkgJiAxKQkvLyBBR0MKKwkJKnN0YXQgfD0gRkVfSEFTX1NJR05BTDsKKworCWlmICgobG9jayA+PiA4KSAmIDEpCS8vIEVxdWFsCisJCSpzdGF0IHw9IEZFX0hBU19DQVJSSUVSOworCisJaWYgKChsb2NrID4+IDMpICYgMSkJLy8gVE1DQ19TWU5DCisJCSpzdGF0IHw9IEZFX0hBU19TWU5DOworCisJaWYgKChsb2NrID4+IDUpICYgNykJLy8gRkVDIE1QRUcKKwkJKnN0YXQgfD0gRkVfSEFTX0xPQ0s7CisKKwlsb2NrID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU1NCk7CS8vIFZpdGVyYmkgTGF5ZXIgQQorCWlmIChsb2NrICYgMHgwMSkKKwkJKnN0YXQgfD0gRkVfSEFTX1ZJVEVSQkk7CisKKwlsb2NrID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU1NSk7CS8vIFZpdGVyYmkgTGF5ZXIgQgorCWlmIChsb2NrICYgMHgwMSkKKwkJKnN0YXQgfD0gRkVfSEFTX1ZJVEVSQkk7CisKKwlsb2NrID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU1Nik7CS8vIFZpdGVyYmkgTGF5ZXIgQworCWlmIChsb2NrICYgMHgwMSkKKwkJKnN0YXQgfD0gRkVfSEFTX1ZJVEVSQkk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKiBiZXIpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJKmJlciA9IChkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTYwKSA8PCAxNikgfCBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTYxKTsJLy8gMTMgc2VnbWVudHMKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3JlYWRfdW5jX2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICogdW5jKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCSp1bmMgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTY1KTsJLy8gcGFja2V0IGVycm9yIG9uIDEzIHNlZworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwMDBfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqIHN0cmVuZ3RoKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiB2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgMzkwKTsKKwkqc3RyZW5ndGggPSA2NTUzNSAtIHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI4MDAwX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKiBzbnIpCit7CisJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHZhbDsKKwlzMzIgc2lnbmFsX21hbnQsIHNpZ25hbF9leHAsIG5vaXNlX21hbnQsIG5vaXNlX2V4cDsKKwl1MzIgcmVzdWx0ID0gMDsKKworCXZhbCA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NDIpOworCW5vaXNlX21hbnQgPSAodmFsID4+IDYpICYgMHhmZjsKKwlub2lzZV9leHAgPSAodmFsICYgMHgzZik7CisKKwl2YWwgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTQzKTsKKwlzaWduYWxfbWFudCA9ICh2YWwgPj4gNikgJiAweGZmOworCXNpZ25hbF9leHAgPSAodmFsICYgMHgzZik7CisKKwlpZiAoKG5vaXNlX2V4cCAmIDB4MjApICE9IDApCisJCW5vaXNlX2V4cCAtPSAweDQwOworCWlmICgoc2lnbmFsX2V4cCAmIDB4MjApICE9IDApCisJCXNpZ25hbF9leHAgLT0gMHg0MDsKKworCWlmIChzaWduYWxfbWFudCAhPSAwKQorCQlyZXN1bHQgPSBpbnRsb2cxMCgyKSAqIDEwICogc2lnbmFsX2V4cCArIDEwICogaW50bG9nMTAoc2lnbmFsX21hbnQpOworCWVsc2UKKwkJcmVzdWx0ID0gaW50bG9nMTAoMikgKiAxMCAqIHNpZ25hbF9leHAgLSAxMDA7CisJaWYgKG5vaXNlX21hbnQgIT0gMCkKKwkJcmVzdWx0IC09IGludGxvZzEwKDIpICogMTAgKiBub2lzZV9leHAgKyAxMCAqIGludGxvZzEwKG5vaXNlX21hbnQpOworCWVsc2UKKwkJcmVzdWx0IC09IGludGxvZzEwKDIpICogMTAgKiBub2lzZV9leHAgLSAxMDA7CisKKwkqc25yID0gcmVzdWx0IC8gKDEgPDwgMjQpOworCXJldHVybiAwOworfQorCitpbnQgZGliODAwMF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICpob3N0LCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHU4IGZpcnN0X2FkZHIpCit7CisJaW50IGsgPSAwOworCXU4IG5ld19hZGRyID0gMDsKKwlzdHJ1Y3QgaTJjX2RldmljZSBjbGllbnQgPSB7LmFkYXAgPSBob3N0IH07CisKKwlmb3IgKGsgPSBub19vZl9kZW1vZHMgLSAxOyBrID49IDA7IGstLSkgeworCQkvKiBkZXNpZ25hdGVkIGkyYyBhZGRyZXNzICovCisJCW5ld19hZGRyID0gZmlyc3RfYWRkciArIChrIDw8IDEpOworCisJCWNsaWVudC5hZGRyID0gbmV3X2FkZHI7CisJCWRpYjgwMDBfaTJjX3dyaXRlMTYoJmNsaWVudCwgMTI4NywgMHgwMDAzKTsJLyogc3JhbSBsZWFkIGluLCByZHkgKi8KKwkJaWYgKGRpYjgwMDBfaWRlbnRpZnkoJmNsaWVudCkgPT0gMCkgeworCQkJZGliODAwMF9pMmNfd3JpdGUxNigmY2xpZW50LCAxMjg3LCAweDAwMDMpOwkvKiBzcmFtIGxlYWQgaW4sIHJkeSAqLworCQkJY2xpZW50LmFkZHIgPSBkZWZhdWx0X2FkZHI7CisJCQlpZiAoZGliODAwMF9pZGVudGlmeSgmY2xpZW50KSA9PSAwKSB7CisJCQkJZHByaW50aygiIyVkOiBub3QgaWRlbnRpZmllZCIsIGspOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJLyogc3RhcnQgZGl2ZXJzaXR5IHRvIHB1bGxfZG93biBkaXZfc3RyIC0ganVzdCBmb3IgaTJjLWVudW1lcmF0aW9uICovCisJCWRpYjgwMDBfaTJjX3dyaXRlMTYoJmNsaWVudCwgMTI4NiwgKDEgPDwgMTApIHwgKDQgPDwgNikpOworCisJCS8qIHNldCBuZXcgaTJjIGFkZHJlc3MgYW5kIGZvcmNlIGRpdnN0YXJ0ICovCisJCWRpYjgwMDBfaTJjX3dyaXRlMTYoJmNsaWVudCwgMTI4NSwgKG5ld19hZGRyIDw8IDIpIHwgMHgyKTsKKwkJY2xpZW50LmFkZHIgPSBuZXdfYWRkcjsKKwkJZGliODAwMF9pZGVudGlmeSgmY2xpZW50KTsKKworCQlkcHJpbnRrKCJJQyAlZCBpbml0aWFsaXplZCAodG8gaTJjX2FkZHJlc3MgMHgleCkiLCBrLCBuZXdfYWRkcik7CisJfQorCisJZm9yIChrID0gMDsgayA8IG5vX29mX2RlbW9kczsgaysrKSB7CisJCW5ld19hZGRyID0gZmlyc3RfYWRkciB8IChrIDw8IDEpOworCQljbGllbnQuYWRkciA9IG5ld19hZGRyOworCisJCS8vIHVuZm9yY2UgZGl2c3RyCisJCWRpYjgwMDBfaTJjX3dyaXRlMTYoJmNsaWVudCwgMTI4NSwgbmV3X2FkZHIgPDwgMik7CisKKwkJLyogZGVhY3RpdmF0ZSBkaXYgLSBpdCB3YXMganVzdCBmb3IgaTJjLWVudW1lcmF0aW9uICovCisJCWRpYjgwMDBfaTJjX3dyaXRlMTYoJmNsaWVudCwgMTI4NiwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woZGliODAwMF9pMmNfZW51bWVyYXRpb24pOworc3RhdGljIGludCBkaWI4MDAwX2ZlX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCit7CisJdHVuZS0+bWluX2RlbGF5X21zID0gMTAwMDsKKwl0dW5lLT5zdGVwX3NpemUgPSAwOworCXR1bmUtPm1heF9kcmlmdCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjgwMDBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3QgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkaWJ4MDAwX2V4aXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIpOworCWtmcmVlKHN0KTsKK30KKworc3RydWN0IGkyY19hZGFwdGVyICpkaWI4MDAwX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpbnRmLCBpbnQgZ2F0aW5nKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXJldHVybiBkaWJ4MDAwX2dldF9pMmNfYWRhcHRlcigmc3QtPmkyY19tYXN0ZXIsIGludGYsIGdhdGluZyk7Cit9CisKK0VYUE9SVF9TWU1CT0woZGliODAwMF9nZXRfaTJjX21hc3Rlcik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkaWI4MDAwX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJIC5uYW1lID0gIkRpQmNvbSA4MDAwIElTREItVCIsCisJCSAudHlwZSA9IEZFX09GRE0sCisJCSAuZnJlcXVlbmN5X21pbiA9IDQ0MjUwMDAwLAorCQkgLmZyZXF1ZW5jeV9tYXggPSA4NjcyNTAwMDAsCisJCSAuZnJlcXVlbmN5X3N0ZXBzaXplID0gNjI1MDAsCisJCSAuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCSBGRV9DQU5fUVBTSyB8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV9BVVRPIHwKKwkJIEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwgRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfCBGRV9DQU5fUkVDT1ZFUiB8IEZFX0NBTl9ISUVSQVJDSFlfQVVUTywKKwkJIH0sCisKKwkucmVsZWFzZSA9IGRpYjgwMDBfcmVsZWFzZSwKKworCS5pbml0ID0gZGliODAwMF93YWtldXAsCisJLnNsZWVwID0gZGliODAwMF9zbGVlcCwKKworCS5zZXRfZnJvbnRlbmQgPSBkaWI4MDAwX3NldF9mcm9udGVuZCwKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgPSBkaWI4MDAwX2ZlX2dldF90dW5lX3NldHRpbmdzLAorCS5nZXRfZnJvbnRlbmQgPSBkaWI4MDAwX2dldF9mcm9udGVuZCwKKworCS5yZWFkX3N0YXR1cyA9IGRpYjgwMDBfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gZGliODAwMF9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBkaWI4MDAwX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IGRpYjgwMDBfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgPSBkaWI4MDAwX3JlYWRfdW5jX2Jsb2NrcywKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjgwMDBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliODAwMF9jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGU7CisKKwlkcHJpbnRrKCJkaWI4MDAwX2F0dGFjaCIpOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGliODAwMF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweSgmc3RhdGUtPmNmZywgY2ZnLCBzaXplb2Yoc3RydWN0IGRpYjgwMDBfY29uZmlnKSk7CisJc3RhdGUtPmkyYy5hZGFwID0gaTJjX2FkYXA7CisJc3RhdGUtPmkyYy5hZGRyID0gaTJjX2FkZHI7CisJc3RhdGUtPmdwaW9fdmFsID0gY2ZnLT5ncGlvX3ZhbDsKKwlzdGF0ZS0+Z3Bpb19kaXIgPSBjZmctPmdwaW9fZGlyOworCisJLyogRW5zdXJlIHRoZSBvdXRwdXQgbW9kZSByZW1haW5zIGF0IHRoZSBwcmV2aW91cyBkZWZhdWx0IGlmIGl0J3MKKwkgKiBub3Qgc3BlY2lmaWNhbGx5IHNldCBieSB0aGUgY2FsbGVyLgorCSAqLworCWlmICgoc3RhdGUtPmNmZy5vdXRwdXRfbW9kZSAhPSBPVVRNT0RFX01QRUcyX1NFUklBTCkgJiYgKHN0YXRlLT5jZmcub3V0cHV0X21vZGUgIT0gT1VUTU9ERV9NUEVHMl9QQVJfR0FURURfQ0xLKSkKKwkJc3RhdGUtPmNmZy5vdXRwdXRfbW9kZSA9IE9VVE1PREVfTVBFRzJfRklGTzsKKworCWZlID0gJnN0YXRlLT5mZTsKKwlmZS0+ZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCW1lbWNweSgmc3RhdGUtPmZlLm9wcywgJmRpYjgwMDBfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKworCXN0YXRlLT50aW1mX2RlZmF1bHQgPSBjZmctPnBsbC0+dGltZjsKKworCWlmIChkaWI4MDAwX2lkZW50aWZ5KCZzdGF0ZS0+aTJjKSA9PSAwKQorCQlnb3RvIGVycm9yOworCisJZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoJnN0YXRlLT5pMmNfbWFzdGVyLCBESUI4MDAwLCBzdGF0ZS0+aTJjLmFkYXAsIHN0YXRlLT5pMmMuYWRkcik7CisKKwlkaWI4MDAwX3Jlc2V0KGZlKTsKKworCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMjg1LCAoZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDI4NSkgJiB+MHg2MCkgfCAoMyA8PCA1KSk7CS8qIGJlcl9yc19sZW4gPSAzICovCisKKwlyZXR1cm4gZmU7CisKKyBlcnJvcjoKKwlrZnJlZShzdGF0ZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0woZGliODAwMF9hdHRhY2gpOworCitNT0RVTEVfQVVUSE9SKCJPbGl2aWVyIEdyZW5pZSA8T2xpdmllci5HcmVuaWVAZGliY29tLmZyLCAiICJQYXRyaWNrIEJvZXR0Y2hlciA8cGJvZXR0Y2hlckBkaWJjb20uZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpQmNvbSA4MDAwIElTREItVCBkZW1vZHVsYXRvciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2ZGUzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmgKQEAgLTAsMCArMSw3OSBAQAorI2lmbmRlZiBESUI4MDAwX0gKKyNkZWZpbmUgRElCODAwMF9ICisKKyNpbmNsdWRlICJkaWJ4MDAwX2NvbW1vbi5oIgorCitzdHJ1Y3QgZGliODAwMF9jb25maWcgeworCXU4IG91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXM7CisJdTggaG9zdGJ1c19kaXZlcnNpdHk7CisJdTggdHVuZXJfaXNfYmFzZWJhbmQ7CisJaW50ICgqdXBkYXRlX2xuYSkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTE2IGFnY19nbG9iYWwpOworCisJdTggYWdjX2NvbmZpZ19jb3VudDsKKwlzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnICphZ2M7CisJc3RydWN0IGRpYngwMDBfYmFuZHdpZHRoX2NvbmZpZyAqcGxsOworCisjZGVmaW5lIERJQjgwMDBfR1BJT19ERUZBVUxUX0RJUkVDVElPTlMgMHhmZmZmCisJdTE2IGdwaW9fZGlyOworI2RlZmluZSBESUI4MDAwX0dQSU9fREVGQVVMVF9WQUxVRVMgICAgIDB4MDAwMAorCXUxNiBncGlvX3ZhbDsKKyNkZWZpbmUgRElCODAwMF9HUElPX1BXTV9QT1MwKHYpICAgICAgICAoKHYgJiAweGYpIDw8IDEyKQorI2RlZmluZSBESUI4MDAwX0dQSU9fUFdNX1BPUzEodikgICAgICAgICgodiAmIDB4ZikgPDwgOCApCisjZGVmaW5lIERJQjgwMDBfR1BJT19QV01fUE9TMih2KSAgICAgICAgKCh2ICYgMHhmKSA8PCA0ICkKKyNkZWZpbmUgRElCODAwMF9HUElPX1BXTV9QT1MzKHYpICAgICAgICAgKHYgJiAweGYpCisjZGVmaW5lIERJQjgwMDBfR1BJT19ERUZBVUxUX1BXTV9QT1MgICAgMHhmZmZmCisJdTE2IGdwaW9fcHdtX3BvczsKKwl1MTYgcHdtX2ZyZXFfZGl2OworCisJdm9pZCAoKmFnY19jb250cm9sKSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBiZWZvcmUpOworCisJdTE2IGRyaXZlczsKKwl1MTYgZGl2ZXJzaXR5X2RlbGF5OworCXU4IGRpdl9jZmc7CisJdTggb3V0cHV0X21vZGU7CisJdTggcmVmY2xrc2VsOworfTsKKworI2RlZmluZSBERUZBVUxUX0RJQjgwMDBfSTJDX0FERFJFU1MgMTgKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUI4MDAwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjgwMDBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliODAwMF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIsIHN0cnVjdCBkaWI4MDAwX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjgwMDBfZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSwgaW50KTsKKworZXh0ZXJuIGludCBkaWI4MDAwX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmhvc3QsIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwgdTggZmlyc3RfYWRkcik7CisKK2V4dGVybiBpbnQgZGliODAwMF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpOworZXh0ZXJuIGludCBkaWI4MDAwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTE2IHZhbHVlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjgwMDBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliODAwMF9jb25maWcgKmNmZykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjgwMDBfZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGksIGludCB4KQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCitpbnQgZGliODAwMF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICpob3N0LCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHU4IGZpcnN0X2FkZHIpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK2ludCBkaWI4MDAwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitpbnQgZGliODAwMF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYwppbmRleCAzMTVlMDllLi40ZWZjYTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYwpAQCAtMTUsMjkgKzE1LDMxIEBACiAJCSh2YWwgPj4gOCkgJiAweGZmLCB2YWwgJiAweGZmLAogCX07CiAJc3RydWN0IGkyY19tc2cgbXNnID0gewotCQkuYWRkciA9IG1zdC0+aTJjX2FkZHIsIC5mbGFncyA9IDAsIC5idWYgPSBiLCAubGVuID0gNAorCQkuYWRkciA9IG1zdC0+aTJjX2FkZHIsLmZsYWdzID0gMCwuYnVmID0gYiwubGVuID0gNAogCX07CiAJcmV0dXJuIGkyY190cmFuc2Zlcihtc3QtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxID8gLUVSRU1PVEVJTyA6IDA7CiB9CiAKIAotc3RhdGljIGludCBkaWJ4MDAwX2kyY19zZWxlY3RfaW50ZXJmYWNlKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZikKK3N0YXRpYyBpbnQgZGlieDAwMF9pMmNfc2VsZWN0X2ludGVyZmFjZShzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsCisJCQkJCWVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYpCiB7CiAJaWYgKG1zdC0+ZGV2aWNlX3JldiA+IERJQjMwMDBNQyAmJiBtc3QtPnNlbGVjdGVkX2ludGVyZmFjZSAhPSBpbnRmKSB7Ci0JCWRwcmludGsoInNlbGVjdGluZyBpbnRlcmZhY2U6ICVkXG4iLGludGYpOworCQlkcHJpbnRrKCJzZWxlY3RpbmcgaW50ZXJmYWNlOiAlZFxuIiwgaW50Zik7CiAJCW1zdC0+c2VsZWN0ZWRfaW50ZXJmYWNlID0gaW50ZjsKIAkJcmV0dXJuIGRpYngwMDBfd3JpdGVfd29yZChtc3QsIG1zdC0+YmFzZV9yZWcgKyA0LCBpbnRmKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGlieDAwMF9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgdTggdHhbNF0sIHU4IGFkZHIsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgZGlieDAwMF9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgdTggdHhbNF0sCisJCQkJIHU4IGFkZHIsIGludCBvbm9mZikKIHsKIAl1MTYgdmFsOwogCiAKIAlpZiAob25vZmYpCi0JCXZhbCA9IGFkZHIgPDwgODsgLy8gYml0IDcgPSB1c2UgbWFzdGVyIG9yIG5vdCwgaWYgMCwgdGhlIGdhdGUgaXMgb3BlbgorCQl2YWwgPSBhZGRyIDw8IDg7CS8vIGJpdCA3ID0gdXNlIG1hc3RlciBvciBub3QsIGlmIDAsIHRoZSBnYXRlIGlzIG9wZW4KIAllbHNlCiAJCXZhbCA9IDEgPDwgNzsKIApAQCAtNDUsNyArNDcsNyBAQAogCQl2YWwgPDw9IDE7CiAKIAl0eFswXSA9ICgoKG1zdC0+YmFzZV9yZWcgKyAxKSA+PiA4KSAmIDB4ZmYpOwotCXR4WzFdID0gKCAobXN0LT5iYXNlX3JlZyArIDEpICAgICAgICYgMHhmZik7CisJdHhbMV0gPSAoKG1zdC0+YmFzZV9yZWcgKyAxKSAmIDB4ZmYpOwogCXR4WzJdID0gdmFsID4+IDg7CiAJdHhbM10gPSB2YWwgJiAweGZmOwogCkBAIC01Nyw1OSArNTksNzggQEAKIAlyZXR1cm4gSTJDX0ZVTkNfSTJDOwogfQogCi1zdGF0aWMgaW50IGRpYngwMDBfaTJjX2dhdGVkX3R1bmVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sIGludCBudW0pCitzdGF0aWMgaW50IGRpYngwMDBfaTJjX2dhdGVkX3R1bmVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJc3RydWN0IGkyY19tc2cgbXNnW10sIGludCBudW0pCiB7CiAJc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CiAJc3RydWN0IGkyY19tc2cgbVsyICsgbnVtXTsKIAl1OCB0eF9vcGVuWzRdLCB0eF9jbG9zZVs0XTsKIAotCW1lbXNldChtLDAsIHNpemVvZihzdHJ1Y3QgaTJjX21zZykgKiAoMiArIG51bSkpOworCW1lbXNldChtLCAwLCBzaXplb2Yoc3RydWN0IGkyY19tc2cpICogKDIgKyBudW0pKTsKIAogCWRpYngwMDBfaTJjX3NlbGVjdF9pbnRlcmZhY2UobXN0LCBESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVIpOwogCi0JZGlieDAwMF9pMmNfZ2F0ZV9jdHJsKG1zdCwgdHhfb3BlbiwgIG1zZ1swXS5hZGRyLCAxKTsKKwlkaWJ4MDAwX2kyY19nYXRlX2N0cmwobXN0LCB0eF9vcGVuLCBtc2dbMF0uYWRkciwgMSk7CiAJbVswXS5hZGRyID0gbXN0LT5pMmNfYWRkcjsKLQltWzBdLmJ1ZiAgPSB0eF9vcGVuOwotCW1bMF0ubGVuICA9IDQ7CisJbVswXS5idWYgPSB0eF9vcGVuOworCW1bMF0ubGVuID0gNDsKIAogCW1lbWNweSgmbVsxXSwgbXNnLCBzaXplb2Yoc3RydWN0IGkyY19tc2cpICogbnVtKTsKIAogCWRpYngwMDBfaTJjX2dhdGVfY3RybChtc3QsIHR4X2Nsb3NlLCAwLCAwKTsKLQltW251bSsxXS5hZGRyID0gbXN0LT5pMmNfYWRkcjsKLQltW251bSsxXS5idWYgID0gdHhfY2xvc2U7Ci0JbVtudW0rMV0ubGVuICA9IDQ7CisJbVtudW0gKyAxXS5hZGRyID0gbXN0LT5pMmNfYWRkcjsKKwltW251bSArIDFdLmJ1ZiA9IHR4X2Nsb3NlOworCW1bbnVtICsgMV0ubGVuID0gNDsKIAotCXJldHVybiBpMmNfdHJhbnNmZXIobXN0LT5pMmNfYWRhcCwgbSwgMitudW0pID09IDIgKyBudW0gPyBudW0gOiAtRUlPOworCXJldHVybiBpMmNfdHJhbnNmZXIobXN0LT5pMmNfYWRhcCwgbSwgMiArIG51bSkgPT0gMiArIG51bSA/IG51bSA6IC1FSU87CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl9hbGdvID0gewotCS5tYXN0ZXJfeGZlciAgID0gZGlieDAwMF9pMmNfZ2F0ZWRfdHVuZXJfeGZlciwKKwkubWFzdGVyX3hmZXIgPSBkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl94ZmVyLAogCS5mdW5jdGlvbmFsaXR5ID0gZGlieDAwMF9pMmNfZnVuYywKIH07CiAKLXN0cnVjdCBpMmNfYWRhcHRlciAqIGRpYngwMDBfZ2V0X2kyY19hZGFwdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwgaW50IGdhdGluZykKK3N0cnVjdCBpMmNfYWRhcHRlciAqZGlieDAwMF9nZXRfaTJjX2FkYXB0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0LAorCQkJCQkgICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwKKwkJCQkJICAgIGludCBnYXRpbmcpCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICppMmMgPSBOVUxMOwogCiAJc3dpdGNoIChpbnRmKSB7Ci0JCWNhc2UgRElCWDAwMF9JMkNfSU5URVJGQUNFX1RVTkVSOgotCQkJaWYgKGdhdGluZykKLQkJCQlpMmMgPSAmbXN0LT5nYXRlZF90dW5lcl9pMmNfYWRhcDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJEaUJYMDAwOiBpbmNvcnJlY3QgSTJDIGludGVyZmFjZSBzZWxlY3RlZFxuIik7Ci0JCQlicmVhazsKKwljYXNlIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUjoKKwkJaWYgKGdhdGluZykKKwkJCWkyYyA9ICZtc3QtPmdhdGVkX3R1bmVyX2kyY19hZGFwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkRpQlgwMDA6IGluY29ycmVjdCBJMkMgaW50ZXJmYWNlIHNlbGVjdGVkXG4iKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIGkyYzsKIH0KKwogRVhQT1JUX1NZTUJPTChkaWJ4MDAwX2dldF9pMmNfYWRhcHRlcik7CiAKLXN0YXRpYyBpbnQgaTJjX2FkYXB0ZXJfaW5pdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSAqYWxnbywgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KQordm9pZCBkaWJ4MDAwX3Jlc2V0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KQoreworCS8qIGluaXRpYWxpemUgdGhlIGkyYy1tYXN0ZXIgYnkgY2xvc2luZyB0aGUgZ2F0ZSAqLworCXU4IHR4WzRdOworCXN0cnVjdCBpMmNfbXNnIG0gPSB7LmFkZHIgPSBtc3QtPmkyY19hZGRyLC5idWYgPSB0eCwubGVuID0gNCB9OworCisJZGlieDAwMF9pMmNfZ2F0ZV9jdHJsKG1zdCwgdHgsIDAsIDApOworCWkyY190cmFuc2Zlcihtc3QtPmkyY19hZGFwLCAmbSwgMSk7CisJbXN0LT5zZWxlY3RlZF9pbnRlcmZhY2UgPSAweGZmOwkvLyB0aGUgZmlyc3QgdGltZSBmb3JjZSBhIHNlbGVjdCBvZiB0aGUgSTJDCisJZGlieDAwMF9pMmNfc2VsZWN0X2ludGVyZmFjZShtc3QsIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUik7Cit9CisKK0VYUE9SVF9TWU1CT0woZGlieDAwMF9yZXNldF9pMmNfbWFzdGVyKTsKKworc3RhdGljIGludCBpMmNfYWRhcHRlcl9pbml0KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkgICAgc3RydWN0IGkyY19hbGdvcml0aG0gKmFsZ28sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KQogewogCXN0cm5jcHkoaTJjX2FkYXAtPm5hbWUsIG5hbWUsIHNpemVvZihpMmNfYWRhcC0+bmFtZSkpOwotCWkyY19hZGFwLT5jbGFzcyAgICAgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTCwKLQlpMmNfYWRhcC0+YWxnbyAgICAgID0gYWxnbzsKKwlpMmNfYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTCwgaTJjX2FkYXAtPmFsZ28gPSBhbGdvOwogCWkyY19hZGFwLT5hbGdvX2RhdGEgPSBOVUxMOwogCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXAsIG1zdCk7CiAJaWYgKGkyY19hZGRfYWRhcHRlcihpMmNfYWRhcCkgPCAwKQpAQCAtMTE3LDM0ICsxMzgsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgdTE2IGRldmljZV9yZXYsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyKQoraW50IGRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgdTE2IGRldmljZV9yZXYsCisJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIpCiB7CiAJdTggdHhbNF07Ci0Jc3RydWN0IGkyY19tc2cgbSA9IHsgLmFkZHIgPSBpMmNfYWRkciA+PiAxLCAuYnVmID0gdHgsIC5sZW4gPSA0IH07CisJc3RydWN0IGkyY19tc2cgbSA9IHsuYWRkciA9IGkyY19hZGRyID4+IDEsLmJ1ZiA9IHR4LC5sZW4gPSA0IH07CiAKIAltc3QtPmRldmljZV9yZXYgPSBkZXZpY2VfcmV2OwotCW1zdC0+aTJjX2FkYXAgICA9IGkyY19hZGFwOwotCW1zdC0+aTJjX2FkZHIgICA9IGkyY19hZGRyID4+IDE7CisJbXN0LT5pMmNfYWRhcCA9IGkyY19hZGFwOworCW1zdC0+aTJjX2FkZHIgPSBpMmNfYWRkciA+PiAxOwogCi0JaWYgKGRldmljZV9yZXYgPT0gRElCNzAwMFApCisJaWYgKGRldmljZV9yZXYgPT0gRElCNzAwMFAgfHwgZGV2aWNlX3JldiA9PSBESUI4MDAwKQogCQltc3QtPmJhc2VfcmVnID0gMTAyNDsKIAllbHNlCiAJCW1zdC0+YmFzZV9yZWcgPSA3Njg7CiAKLSAgICBpZiAoaTJjX2FkYXB0ZXJfaW5pdCgmbXN0LT5nYXRlZF90dW5lcl9pMmNfYWRhcCwgJmRpYngwMDBfaTJjX2dhdGVkX3R1bmVyX2FsZ28sICJEaUJYMDAwIHR1bmVyIEkyQyBidXMiLCBtc3QpICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAiRGlCWDAwMDogY291bGQgbm90IGluaXRpYWxpemUgdGhlIHR1bmVyIGkyY19hZGFwdGVyXG4iKTsKKwlpZiAoaTJjX2FkYXB0ZXJfaW5pdAorCSAgICAoJm1zdC0+Z2F0ZWRfdHVuZXJfaTJjX2FkYXAsICZkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl9hbGdvLAorCSAgICAgIkRpQlgwMDAgdHVuZXIgSTJDIGJ1cyIsIG1zdCkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiRGlCWDAwMDogY291bGQgbm90IGluaXRpYWxpemUgdGhlIHR1bmVyIGkyY19hZGFwdGVyXG4iKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIGkyYy1tYXN0ZXIgYnkgY2xvc2luZyB0aGUgZ2F0ZSAqLwogCWRpYngwMDBfaTJjX2dhdGVfY3RybChtc3QsIHR4LCAwLCAwKTsKIAogCXJldHVybiBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsICZtLCAxKSA9PSAxOwogfQorCiBFWFBPUlRfU1lNQk9MKGRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKTsKIAogdm9pZCBkaWJ4MDAwX2V4aXRfaTJjX21hc3RlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QpCiB7CiAJaTJjX2RlbF9hZGFwdGVyKCZtc3QtPmdhdGVkX3R1bmVyX2kyY19hZGFwKTsKIH0KKwogRVhQT1JUX1NZTUJPTChkaWJ4MDAwX2V4aXRfaTJjX21hc3Rlcik7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYm9ldHRjaGVyQGRpYmNvbS5mcj4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmgKaW5kZXggODRlNGQ1My4uNWJlMTBlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIERJQlgwMDBfQ09NTU9OX0gKIAogZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgewotCURJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiAgICA9IDAsCisJRElCWDAwMF9JMkNfSU5URVJGQUNFX1RVTkVSID0gMCwKIAlESUJYMDAwX0kyQ19JTlRFUkZBQ0VfR1BJT18xXzIgPSAxLAogCURJQlgwMDBfSTJDX0lOVEVSRkFDRV9HUElPXzNfNCA9IDIKIH07CkBAIC0xMiwyMiArMTIsMjkgQEAKICNkZWZpbmUgRElCNzAwMCAgIDIKICNkZWZpbmUgRElCNzAwMFAgIDExCiAjZGVmaW5lIERJQjcwMDBNQyAxMgorI2RlZmluZSBESUI4MDAwICAgMTMKIAl1MTYgZGV2aWNlX3JldjsKIAogCWVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIHNlbGVjdGVkX2ludGVyZmFjZTsKIAotLy8Jc3RydWN0IGkyY19hZGFwdGVyICB0dW5lcl9pMmNfYWRhcDsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgIGdhdGVkX3R1bmVyX2kyY19hZGFwOworLy8gICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgIHR1bmVyX2kyY19hZGFwOworCXN0cnVjdCBpMmNfYWRhcHRlciBnYXRlZF90dW5lcl9pMmNfYWRhcDsKIAogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7Ci0JdTggICAgICAgICAgICAgICAgICBpMmNfYWRkcjsKKwl1OCBpMmNfYWRkcjsKIAogCXUxNiBiYXNlX3JlZzsKIH07CiAKLWV4dGVybiBpbnQgZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0LCB1MTYgZGV2aWNlX3Jldiwgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIpOwotZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqIGRpYngwMDBfZ2V0X2kyY19hZGFwdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwgaW50IGdhdGluZyk7CitleHRlcm4gaW50IGRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwKKwkJCQkgICB1MTYgZGV2aWNlX3Jldiwgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkgICB1OCBpMmNfYWRkcik7CitleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICpkaWJ4MDAwX2dldF9pMmNfYWRhcHRlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyCisJCQkJCQkgICAqbXN0LAorCQkJCQkJICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UKKwkJCQkJCSAgIGludGYsIGludCBnYXRpbmcpOwogZXh0ZXJuIHZvaWQgZGlieDAwMF9leGl0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KTsKK2V4dGVybiB2b2lkIGRpYngwMDBfcmVzZXRfaTJjX21hc3RlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QpOwogCiAjZGVmaW5lIEJBTkRfTEJBTkQgMHgwMQogI2RlZmluZSBCQU5EX1VIRiAgIDB4MDIKQEAgLTQxLDE4ICs0OCwxOCBAQAogCQkJCQkJCQkJKGZyZXFfa0h6KSA8PSAyMDAwMDAwID8gQkFORF9MQkFORCA6IEJBTkRfU0JBTkQgKQogCiBzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIHsKLQkvKiBkZWZpbmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBBR0Mtc2V0dGluZyAtIHVzaW5nIHRoZSBCQU5EXy1kZWZpbmVzKi8KLQl1OCAgYmFuZF9jYXBzOworCS8qIGRlZmluZXMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGlzIEFHQy1zZXR0aW5nIC0gdXNpbmcgdGhlIEJBTkRfLWRlZmluZXMgKi8KKwl1OCBiYW5kX2NhcHM7CiAKIAl1MTYgc2V0dXA7CiAKIAl1MTYgaW52X2dhaW47CiAJdTE2IHRpbWVfc3RhYmlsaXo7CiAKLQl1OCAgYWxwaGFfbGV2ZWw7CisJdTggYWxwaGFfbGV2ZWw7CiAJdTE2IHRobG9jazsKIAotCXU4ICB3YmRfaW52OworCXU4IHdiZF9pbnY7CiAJdTE2IHdiZF9yZWY7CiAJdTggd2JkX3NlbDsKIAl1OCB3YmRfYWxwaGE7CkBAIC05Miw4ICs5OSw4IEBACiB9OwogCiBzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnIHsKLQl1MzIgICBpbnRlcm5hbDsKLQl1MzIgICBzYW1wbGluZzsKKwl1MzIgaW50ZXJuYWw7CisJdTMyIHNhbXBsaW5nOwogCiAJdTggcGxsX3ByZWRpdjsKIAl1OCBwbGxfcmF0aW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jCmluZGV4IGViNzJhOTguLmUzMzRiNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jCkBAIC0zNjMsNiArMzYzLDggQEAKIAogCXN0cnVjdCBsZ2R0MzMwNF9zdGF0ZSAqc3RhdGU7CiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAJc3RhdGUtPmFkZHIgPSBjb25maWctPmkyY19hZGRyZXNzOwogCXN0YXRlLT5pMmMgPSBpMmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmMKaW5kZXggM2Y1YTBlMS4uMzE1NmI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmMKQEAgLTE2OSw2ICsxNjksOCBAQAogCiAJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlOwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHM5MjFfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlzdGF0ZS0+YWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CiAJc3RhdGUtPmkyYyA9IGkyYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1MDFkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9LY29uZmlnCkBAIC0wLDAgKzEsMTIgQEAKK2NvbmZpZyBEVkJfUFQxCisJdHJpc3RhdGUgIlBUMSBjYXJkcyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwloZWxwCisJICBTdXBwb3J0IGZvciBFYXJ0aHNvZnQgUFQxIFBDSSBjYXJkcy4KKworCSAgU2luY2UgdGhlc2UgY2FyZHMgaGF2ZSBubyBNUEVHIGRlY29kZXIgb25ib2FyZCwgdGhleSB0cmFuc21pdAorCSAgb25seSBjb21wcmVzc2VkIE1QRUcgZGF0YSBvdmVyIHRoZSBQQ0kgYnVzLCBzbyB5b3UgbmVlZAorCSAgYW4gZXh0ZXJuYWwgc29mdHdhcmUgZGVjb2RlciB0byB3YXRjaCBUViBvbiB5b3VyIGNvbXB1dGVyLgorCisJICBTYXkgWSBvciBNIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZkYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorZWFydGgtcHQxLW9ianMgOj0gcHQxLm8gdmExajVqZjgwMDdzLm8gdmExajVqZjgwMDd0Lm8KKworb2JqLSQoQ09ORklHX0RWQl9QVDEpICs9IGVhcnRoLXB0MS5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlNjIzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYwpAQCAtMCwwICsxLDEwNTcgQEAKKy8qCisgKiBkcml2ZXIgZm9yIEVhcnRoc29mdCBQVDEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSElSQU5PIFRha2FoaXRvIDxoaXJhbm90YWthQHpuZy5pbmZvPgorICoKKyAqIGJhc2VkIG9uIHB0MWR2ciAtIGh0dHA6Ly9wdDFkdnIuc291cmNlZm9yZ2UuanAvCisgKiAJYnkgVG9tb2FraSBJc2hpa2F3YSA8dG9teUB1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisKKyNpbmNsdWRlICJkdmJkZXYuaCIKKyNpbmNsdWRlICJkdmJfZGVtdXguaCIKKyNpbmNsdWRlICJkbXhkZXYuaCIKKyNpbmNsdWRlICJkdmJfbmV0LmgiCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNpbmNsdWRlICJ2YTFqNWpmODAwN3QuaCIKKyNpbmNsdWRlICJ2YTFqNWpmODAwN3MuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAiZWFydGgtcHQxIgorCisjZGVmaW5lIFBUMV9QQUdFX1NISUZUIDEyCisjZGVmaW5lIFBUMV9QQUdFX1NJWkUgKDEgPDwgUFQxX1BBR0VfU0hJRlQpCisjZGVmaW5lIFBUMV9OUl9VUEFDS0VUUyAxMDI0CisjZGVmaW5lIFBUMV9OUl9CVUZTIDUxMQorCitzdHJ1Y3QgcHQxX2J1ZmZlcl9wYWdlIHsKKwlfX2xlMzIgdXBhY2tldHNbUFQxX05SX1VQQUNLRVRTXTsKK307CisKK3N0cnVjdCBwdDFfdGFibGVfcGFnZSB7CisJX19sZTMyIG5leHRfcGZuOworCV9fbGUzMiBidWZfcGZuc1tQVDFfTlJfQlVGU107Cit9OworCitzdHJ1Y3QgcHQxX2J1ZmZlciB7CisJc3RydWN0IHB0MV9idWZmZXJfcGFnZSAqcGFnZTsKKwlkbWFfYWRkcl90IGFkZHI7Cit9OworCitzdHJ1Y3QgcHQxX3RhYmxlIHsKKwlzdHJ1Y3QgcHQxX3RhYmxlX3BhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBhZGRyOworCXN0cnVjdCBwdDFfYnVmZmVyIGJ1ZnNbUFQxX05SX0JVRlNdOworfTsKKworI2RlZmluZSBQVDFfTlJfQURBUFMgNAorCitzdHJ1Y3QgcHQxX2FkYXB0ZXI7CisKK3N0cnVjdCBwdDEgeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CisJaW50IGkyY19ydW5uaW5nOworCXN0cnVjdCBwdDFfYWRhcHRlciAqYWRhcHNbUFQxX05SX0FEQVBTXTsKKwlzdHJ1Y3QgcHQxX3RhYmxlICp0YWJsZXM7CisJc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkOworfTsKKworc3RydWN0IHB0MV9hZGFwdGVyIHsKKwlzdHJ1Y3QgcHQxICpwdDE7CisJaW50IGluZGV4OworCisJdTggKmJ1ZjsKKwlpbnQgdXBhY2tldF9jb3VudDsKKwlpbnQgcGFja2V0X2NvdW50OworCisJc3RydWN0IGR2Yl9hZGFwdGVyIGFkYXA7CisJc3RydWN0IGR2Yl9kZW11eCBkZW11eDsKKwlpbnQgdXNlcnM7CisJc3RydWN0IGRteGRldiBkbXhkZXY7CisJc3RydWN0IGR2Yl9uZXQgbmV0OworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOworCWludCAoKm9yaWdfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSk7Cit9OworCisjZGVmaW5lIHB0MV9wcmludGsobGV2ZWwsIHB0MSwgZm9ybWF0LCBhcmcuLi4pCVwKKwlkZXZfcHJpbnRrKGxldmVsLCAmKHB0MSktPnBkZXYtPmRldiwgZm9ybWF0LCAjI2FyZykKKworc3RhdGljIHZvaWQgcHQxX3dyaXRlX3JlZyhzdHJ1Y3QgcHQxICpwdDEsIGludCByZWcsIHUzMiBkYXRhKQoreworCXdyaXRlbChkYXRhLCBwdDEtPnJlZ3MgKyByZWcgKiA0KTsKK30KKworc3RhdGljIHUzMiBwdDFfcmVhZF9yZWcoc3RydWN0IHB0MSAqcHQxLCBpbnQgcmVnKQoreworCXJldHVybiByZWFkbChwdDEtPnJlZ3MgKyByZWcgKiA0KTsKK30KKworc3RhdGljIGludCBwdDFfbnJfdGFibGVzID0gNjQ7Cittb2R1bGVfcGFyYW1fbmFtZWQobnJfdGFibGVzLCBwdDFfbnJfdGFibGVzLCBpbnQsIDApOworCitzdGF0aWMgdm9pZCBwdDFfaW5jcmVtZW50X3RhYmxlX2NvdW50KHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMDAwMDAyMCk7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9pbml0X3RhYmxlX2NvdW50KHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMDAwMDAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9yZWdpc3Rlcl90YWJsZXMoc3RydWN0IHB0MSAqcHQxLCB1MzIgZmlyc3RfcGZuKQoreworCXB0MV93cml0ZV9yZWcocHQxLCA1LCBmaXJzdF9wZm4pOworCXB0MV93cml0ZV9yZWcocHQxLCAwLCAweDBjMDAwMDQwKTsKK30KKworc3RhdGljIHZvaWQgcHQxX3VucmVnaXN0ZXJfdGFibGVzKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwODA4MDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgcHQxX3N5bmMoc3RydWN0IHB0MSAqcHQxKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA1NzsgaSsrKSB7CisJCWlmIChwdDFfcmVhZF9yZWcocHQxLCAwKSAmIDB4MjAwMDAwMDApCisJCQlyZXR1cm4gMDsKKwkJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDAwMDAwMDgpOworCX0KKwlwdDFfcHJpbnRrKEtFUk5fRVJSLCBwdDEsICJjb3VsZCBub3Qgc3luY1xuIik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB1NjQgcHQxX2lkZW50aWZ5KHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaTsKKwl1NjQgaWQ7CisJaWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCA1NzsgaSsrKSB7CisJCWlkIHw9ICh1NjQpKHB0MV9yZWFkX3JlZyhwdDEsIDApID4+IDMwICYgMSkgPDwgaTsKKwkJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDAwMDAwMDgpOworCX0KKwlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBpbnQgcHQxX3VubG9jayhzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGk7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDAsIDB4MDAwMDAwMDgpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKHB0MV9yZWFkX3JlZyhwdDEsIDApICYgMHg4MDAwMDAwMCkKKwkJCXJldHVybiAwOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisJfQorCXB0MV9wcmludGsoS0VSTl9FUlIsIHB0MSwgImNvdWxkIG5vdCB1bmxvY2tcbiIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHB0MV9yZXNldF9wY2koc3RydWN0IHB0MSAqcHQxKQoreworCWludCBpOworCXB0MV93cml0ZV9yZWcocHQxLCAwLCAweDAxMDEwMDAwKTsKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMTAwMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaWYgKHB0MV9yZWFkX3JlZyhwdDEsIDApICYgMHgwMDAwMDAwMSkKKwkJCXJldHVybiAwOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisJfQorCXB0MV9wcmludGsoS0VSTl9FUlIsIHB0MSwgImNvdWxkIG5vdCByZXNldCBQQ0lcbiIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHB0MV9yZXNldF9yYW0oc3RydWN0IHB0MSAqcHQxKQoreworCWludCBpOworCXB0MV93cml0ZV9yZWcocHQxLCAwLCAweDAyMDIwMDAwKTsKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMjAwMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaWYgKHB0MV9yZWFkX3JlZyhwdDEsIDApICYgMHgwMDAwMDAwMikKKwkJCXJldHVybiAwOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisJfQorCXB0MV9wcmludGsoS0VSTl9FUlIsIHB0MSwgImNvdWxkIG5vdCByZXNldCBSQU1cbiIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHB0MV9kb19lbmFibGVfcmFtKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaSwgajsKKwl1MzIgc3RhdHVzOworCXN0YXR1cyA9IHB0MV9yZWFkX3JlZyhwdDEsIDApICYgMHgwMDAwMDAwNDsKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwMDAwMDAwMik7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IDEwMjQ7IGorKykgeworCQkJaWYgKChwdDFfcmVhZF9yZWcocHQxLCAwKSAmIDB4MDAwMDAwMDQpICE9IHN0YXR1cykKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisJfQorCXB0MV9wcmludGsoS0VSTl9FUlIsIHB0MSwgImNvdWxkIG5vdCBlbmFibGUgUkFNXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwdDFfZW5hYmxlX3JhbShzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGksIHJldDsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcmV0ID0gcHQxX2RvX2VuYWJsZV9yYW0ocHQxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHQxX2Rpc2FibGVfcmFtKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMCwgMHgwYjBiMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9zZXRfc3RyZWFtKHN0cnVjdCBwdDEgKnB0MSwgaW50IGluZGV4LCBpbnQgZW5hYmxlZCkKK3sKKwlwdDFfd3JpdGVfcmVnKHB0MSwgMiwgMSA8PCAoaW5kZXggKyA4KSB8IGVuYWJsZWQgPDwgaW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBwdDFfaW5pdF9zdHJlYW1zKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgUFQxX05SX0FEQVBTOyBpKyspCisJCXB0MV9zZXRfc3RyZWFtKHB0MSwgaSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcHQxX2ZpbHRlcihzdHJ1Y3QgcHQxICpwdDEsIHN0cnVjdCBwdDFfYnVmZmVyX3BhZ2UgKnBhZ2UpCit7CisJdTMyIHVwYWNrZXQ7CisJaW50IGk7CisJaW50IGluZGV4OworCXN0cnVjdCBwdDFfYWRhcHRlciAqYWRhcDsKKwlpbnQgb2Zmc2V0OworCXU4ICpidWY7CisKKwlpZiAoIXBhZ2UtPnVwYWNrZXRzW1BUMV9OUl9VUEFDS0VUUyAtIDFdKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBQVDFfTlJfVVBBQ0tFVFM7IGkrKykgeworCQl1cGFja2V0ID0gbGUzMl90b19jcHUocGFnZS0+dXBhY2tldHNbaV0pOworCQlpbmRleCA9ICh1cGFja2V0ID4+IDI5KSAtIDE7CisJCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gIFBUMV9OUl9BREFQUykKKwkJCWNvbnRpbnVlOworCisJCWFkYXAgPSBwdDEtPmFkYXBzW2luZGV4XTsKKwkJaWYgKHVwYWNrZXQgPj4gMjUgJiAxKQorCQkJYWRhcC0+dXBhY2tldF9jb3VudCA9IDA7CisJCWVsc2UgaWYgKCFhZGFwLT51cGFja2V0X2NvdW50KQorCQkJY29udGludWU7CisKKwkJYnVmID0gYWRhcC0+YnVmOworCQlvZmZzZXQgPSBhZGFwLT5wYWNrZXRfY291bnQgKiAxODggKyBhZGFwLT51cGFja2V0X2NvdW50ICogMzsKKwkJYnVmW29mZnNldF0gPSB1cGFja2V0ID4+IDE2OworCQlidWZbb2Zmc2V0ICsgMV0gPSB1cGFja2V0ID4+IDg7CisJCWlmIChhZGFwLT51cGFja2V0X2NvdW50ICE9IDYyKQorCQkJYnVmW29mZnNldCArIDJdID0gdXBhY2tldDsKKworCQlpZiAoKythZGFwLT51cGFja2V0X2NvdW50ID49IDYzKSB7CisJCQlhZGFwLT51cGFja2V0X2NvdW50ID0gMDsKKwkJCWlmICgrK2FkYXAtPnBhY2tldF9jb3VudCA+PSAyMSkgeworCQkJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmYWRhcC0+ZGVtdXgsIGJ1ZiwgMjEpOworCQkJCWFkYXAtPnBhY2tldF9jb3VudCA9IDA7CisJCQl9CisJCX0KKwl9CisKKwlwYWdlLT51cGFja2V0c1tQVDFfTlJfVVBBQ0tFVFMgLSAxXSA9IDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcHQxX3RocmVhZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBwdDEgKnB0MTsKKwlpbnQgdGFibGVfaW5kZXg7CisJaW50IGJ1Zl9pbmRleDsKKwlzdHJ1Y3QgcHQxX2J1ZmZlcl9wYWdlICpwYWdlOworCisJcHQxID0gZGF0YTsKKwlzZXRfZnJlZXphYmxlKCk7CisKKwl0YWJsZV9pbmRleCA9IDA7CisJYnVmX2luZGV4ID0gMDsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCXRyeV90b19mcmVlemUoKTsKKworCQlwYWdlID0gcHQxLT50YWJsZXNbdGFibGVfaW5kZXhdLmJ1ZnNbYnVmX2luZGV4XS5wYWdlOworCQlpZiAoIXB0MV9maWx0ZXIocHQxLCBwYWdlKSkgeworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKChIWiArIDk5OSkgLyAxMDAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCsrYnVmX2luZGV4ID49IFBUMV9OUl9CVUZTKSB7CisJCQlwdDFfaW5jcmVtZW50X3RhYmxlX2NvdW50KHB0MSk7CisJCQlidWZfaW5kZXggPSAwOworCQkJaWYgKCsrdGFibGVfaW5kZXggPj0gcHQxX25yX3RhYmxlcykKKwkJCQl0YWJsZV9pbmRleCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHQxX2ZyZWVfcGFnZShzdHJ1Y3QgcHQxICpwdDEsIHZvaWQgKnBhZ2UsIGRtYV9hZGRyX3QgYWRkcikKK3sKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHQxLT5wZGV2LT5kZXYsIFBUMV9QQUdFX1NJWkUsIHBhZ2UsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCAqcHQxX2FsbG9jX3BhZ2Uoc3RydWN0IHB0MSAqcHQxLCBkbWFfYWRkcl90ICphZGRycCwgdTMyICpwZm5wKQoreworCXZvaWQgKnBhZ2U7CisJZG1hX2FkZHJfdCBhZGRyOworCisJcGFnZSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcHQxLT5wZGV2LT5kZXYsIFBUMV9QQUdFX1NJWkUsICZhZGRyLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlCVUdfT04oYWRkciAmIChQVDFfUEFHRV9TSVpFIC0gMSkpOworCUJVR19PTihhZGRyID4+IFBUMV9QQUdFX1NISUZUID4+IDMxID4+IDEpOworCisJKmFkZHJwID0gYWRkcjsKKwkqcGZucCA9IGFkZHIgPj4gUFQxX1BBR0VfU0hJRlQ7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9jbGVhbnVwX2J1ZmZlcihzdHJ1Y3QgcHQxICpwdDEsIHN0cnVjdCBwdDFfYnVmZmVyICpidWYpCit7CisJcHQxX2ZyZWVfcGFnZShwdDEsIGJ1Zi0+cGFnZSwgYnVmLT5hZGRyKTsKK30KKworc3RhdGljIGludAorcHQxX2luaXRfYnVmZmVyKHN0cnVjdCBwdDEgKnB0MSwgc3RydWN0IHB0MV9idWZmZXIgKmJ1ZiwgIHUzMiAqcGZucCkKK3sKKwlzdHJ1Y3QgcHQxX2J1ZmZlcl9wYWdlICpwYWdlOworCWRtYV9hZGRyX3QgYWRkcjsKKworCXBhZ2UgPSBwdDFfYWxsb2NfcGFnZShwdDEsICZhZGRyLCBwZm5wKTsKKwlpZiAocGFnZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhZ2UtPnVwYWNrZXRzW1BUMV9OUl9VUEFDS0VUUyAtIDFdID0gMDsKKworCWJ1Zi0+cGFnZSA9IHBhZ2U7CisJYnVmLT5hZGRyID0gYWRkcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHQxX2NsZWFudXBfdGFibGUoc3RydWN0IHB0MSAqcHQxLCBzdHJ1Y3QgcHQxX3RhYmxlICp0YWJsZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQVDFfTlJfQlVGUzsgaSsrKQorCQlwdDFfY2xlYW51cF9idWZmZXIocHQxLCAmdGFibGUtPmJ1ZnNbaV0pOworCisJcHQxX2ZyZWVfcGFnZShwdDEsIHRhYmxlLT5wYWdlLCB0YWJsZS0+YWRkcik7Cit9CisKK3N0YXRpYyBpbnQKK3B0MV9pbml0X3RhYmxlKHN0cnVjdCBwdDEgKnB0MSwgc3RydWN0IHB0MV90YWJsZSAqdGFibGUsIHUzMiAqcGZucCkKK3sKKwlzdHJ1Y3QgcHQxX3RhYmxlX3BhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBhZGRyOworCWludCBpLCByZXQ7CisJdTMyIGJ1Zl9wZm47CisKKwlwYWdlID0gcHQxX2FsbG9jX3BhZ2UocHQxLCAmYWRkciwgcGZucCk7CisJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgUFQxX05SX0JVRlM7IGkrKykgeworCQlyZXQgPSBwdDFfaW5pdF9idWZmZXIocHQxLCAmdGFibGUtPmJ1ZnNbaV0sICZidWZfcGZuKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQlwYWdlLT5idWZfcGZuc1tpXSA9IGNwdV90b19sZTMyKGJ1Zl9wZm4pOworCX0KKworCXB0MV9pbmNyZW1lbnRfdGFibGVfY291bnQocHQxKTsKKwl0YWJsZS0+cGFnZSA9IHBhZ2U7CisJdGFibGUtPmFkZHIgPSBhZGRyOworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKGktLSkKKwkJcHQxX2NsZWFudXBfYnVmZmVyKHB0MSwgJnRhYmxlLT5idWZzW2ldKTsKKworCXB0MV9mcmVlX3BhZ2UocHQxLCBwYWdlLCBhZGRyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwdDFfY2xlYW51cF90YWJsZXMoc3RydWN0IHB0MSAqcHQxKQoreworCXN0cnVjdCBwdDFfdGFibGUgKnRhYmxlczsKKwlpbnQgaTsKKworCXRhYmxlcyA9IHB0MS0+dGFibGVzOworCXB0MV91bnJlZ2lzdGVyX3RhYmxlcyhwdDEpOworCisJZm9yIChpID0gMDsgaSA8IHB0MV9ucl90YWJsZXM7IGkrKykKKwkJcHQxX2NsZWFudXBfdGFibGUocHQxLCAmdGFibGVzW2ldKTsKKworCXZmcmVlKHRhYmxlcyk7Cit9CisKK3N0YXRpYyBpbnQgcHQxX2luaXRfdGFibGVzKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlzdHJ1Y3QgcHQxX3RhYmxlICp0YWJsZXM7CisJaW50IGksIHJldDsKKwl1MzIgZmlyc3RfcGZuLCBwZm47CisKKwl0YWJsZXMgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcHQxX3RhYmxlKSAqIHB0MV9ucl90YWJsZXMpOworCWlmICh0YWJsZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwdDFfaW5pdF90YWJsZV9jb3VudChwdDEpOworCisJaSA9IDA7CisJaWYgKHB0MV9ucl90YWJsZXMpIHsKKwkJcmV0ID0gcHQxX2luaXRfdGFibGUocHQxLCAmdGFibGVzWzBdLCAmZmlyc3RfcGZuKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCQlpKys7CisJfQorCisJd2hpbGUgKGkgPCBwdDFfbnJfdGFibGVzKSB7CisJCXJldCA9IHB0MV9pbml0X3RhYmxlKHB0MSwgJnRhYmxlc1tpXSwgJnBmbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwkJdGFibGVzW2kgLSAxXS5wYWdlLT5uZXh0X3BmbiA9IGNwdV90b19sZTMyKHBmbik7CisJCWkrKzsKKwl9CisKKwl0YWJsZXNbcHQxX25yX3RhYmxlcyAtIDFdLnBhZ2UtPm5leHRfcGZuID0gY3B1X3RvX2xlMzIoZmlyc3RfcGZuKTsKKworCXB0MV9yZWdpc3Rlcl90YWJsZXMocHQxLCBmaXJzdF9wZm4pOworCXB0MS0+dGFibGVzID0gdGFibGVzOworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKGktLSkKKwkJcHQxX2NsZWFudXBfdGFibGUocHQxLCAmdGFibGVzW2ldKTsKKworCXZmcmVlKHRhYmxlcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwdDFfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCit7CisJc3RydWN0IHB0MV9hZGFwdGVyICphZGFwOworCWFkYXAgPSBjb250YWluZXJfb2YoZmVlZC0+ZGVtdXgsIHN0cnVjdCBwdDFfYWRhcHRlciwgZGVtdXgpOworCWlmICghYWRhcC0+dXNlcnMrKykKKwkJcHQxX3NldF9zdHJlYW0oYWRhcC0+cHQxLCBhZGFwLT5pbmRleCwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHQxX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCit7CisJc3RydWN0IHB0MV9hZGFwdGVyICphZGFwOworCWFkYXAgPSBjb250YWluZXJfb2YoZmVlZC0+ZGVtdXgsIHN0cnVjdCBwdDFfYWRhcHRlciwgZGVtdXgpOworCWlmICghLS1hZGFwLT51c2VycykKKwkJcHQxX3NldF9zdHJlYW0oYWRhcC0+cHQxLCBhZGFwLT5pbmRleCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitwdDFfc2V0X3Bvd2VyKHN0cnVjdCBwdDEgKnB0MSwgaW50IHBvd2VyLCBpbnQgbG5iLCBpbnQgcmVzZXQpCit7CisJcHQxX3dyaXRlX3JlZyhwdDEsIDEsIHBvd2VyIHwgbG5iIDw8IDEgfCAhcmVzZXQgPDwgMyk7Cit9CisKK3N0YXRpYyBpbnQgcHQxX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisJc3RydWN0IHB0MV9hZGFwdGVyICphZGFwOworCWludCBsbmI7CisKKwlhZGFwID0gY29udGFpbmVyX29mKGZlLT5kdmIsIHN0cnVjdCBwdDFfYWRhcHRlciwgYWRhcCk7CisKKwlzd2l0Y2ggKHZvbHRhZ2UpIHsKKwljYXNlIFNFQ19WT0xUQUdFXzEzOiAvKiBhY3R1YWxseSAxMVYgKi8KKwkJbG5iID0gMjsKKwkJYnJlYWs7CisJY2FzZSBTRUNfVk9MVEFHRV8xODogLyogYWN0dWFsbHkgMTVWICovCisJCWxuYiA9IDM7CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlsbmIgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdDFfc2V0X3Bvd2VyKGFkYXAtPnB0MSwgMSwgbG5iLCAwKTsKKworCWlmIChhZGFwLT5vcmlnX3NldF92b2x0YWdlKQorCQlyZXR1cm4gYWRhcC0+b3JpZ19zZXRfdm9sdGFnZShmZSwgdm9sdGFnZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHQxX2ZyZWVfYWRhcHRlcihzdHJ1Y3QgcHQxX2FkYXB0ZXIgKmFkYXApCit7CisJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoYWRhcC0+ZmUpOworCWR2Yl9uZXRfcmVsZWFzZSgmYWRhcC0+bmV0KTsKKwlhZGFwLT5kZW11eC5kbXguY2xvc2UoJmFkYXAtPmRlbXV4LmRteCk7CisJZHZiX2RteGRldl9yZWxlYXNlKCZhZGFwLT5kbXhkZXYpOworCWR2Yl9kbXhfcmVsZWFzZSgmYWRhcC0+ZGVtdXgpOworCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmFkYXAtPmFkYXApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylhZGFwLT5idWYpOworCWtmcmVlKGFkYXApOworfQorCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RhdGljIHN0cnVjdCBwdDFfYWRhcHRlciAqCitwdDFfYWxsb2NfYWRhcHRlcihzdHJ1Y3QgcHQxICpwdDEsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBwdDFfYWRhcHRlciAqYWRhcDsKKwl2b2lkICpidWY7CisJc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcDsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eDsKKwlzdHJ1Y3QgZG14ZGV2ICpkbXhkZXY7CisJaW50IHJldDsKKworCWFkYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHQxX2FkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkYXApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJYWRhcC0+cHQxID0gcHQxOworCisJYWRhcC0+b3JpZ19zZXRfdm9sdGFnZSA9IGZlLT5vcHMuc2V0X3ZvbHRhZ2U7CisJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IHB0MV9zZXRfdm9sdGFnZTsKKworCWJ1ZiA9ICh1OCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlhZGFwLT5idWYgPSBidWY7CisJYWRhcC0+dXBhY2tldF9jb3VudCA9IDA7CisJYWRhcC0+cGFja2V0X2NvdW50ID0gMDsKKworCWR2Yl9hZGFwID0gJmFkYXAtPmFkYXA7CisJZHZiX2FkYXAtPnByaXYgPSBhZGFwOworCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKGR2Yl9hZGFwLCBEUklWRVJfTkFNRSwgVEhJU19NT0RVTEUsCisJCQkJICAgJnB0MS0+cGRldi0+ZGV2LCBhZGFwdGVyX25yKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9wYWdlOworCisJZGVtdXggPSAmYWRhcC0+ZGVtdXg7CisJZGVtdXgtPmRteC5jYXBhYmlsaXRpZXMgPSBETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HOworCWRlbXV4LT5wcml2ID0gYWRhcDsKKwlkZW11eC0+ZmVlZG51bSA9IDI1NjsKKwlkZW11eC0+ZmlsdGVybnVtID0gMjU2OworCWRlbXV4LT5zdGFydF9mZWVkID0gcHQxX3N0YXJ0X2ZlZWQ7CisJZGVtdXgtPnN0b3BfZmVlZCA9IHB0MV9zdG9wX2ZlZWQ7CisJZGVtdXgtPndyaXRlX3RvX2RlY29kZXIgPSBOVUxMOworCXJldCA9IGR2Yl9kbXhfaW5pdChkZW11eCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfYWRhcHRlcjsKKworCWRteGRldiA9ICZhZGFwLT5kbXhkZXY7CisJZG14ZGV2LT5maWx0ZXJudW0gPSAyNTY7CisJZG14ZGV2LT5kZW11eCA9ICZkZW11eC0+ZG14OworCWRteGRldi0+Y2FwYWJpbGl0aWVzID0gMDsKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoZG14ZGV2LCBkdmJfYWRhcCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2RteF9yZWxlYXNlOworCisJZHZiX25ldF9pbml0KGR2Yl9hZGFwLCAmYWRhcC0+bmV0LCAmZGVtdXgtPmRteCk7CisKKwlyZXQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoZHZiX2FkYXAsIGZlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfbmV0X3JlbGVhc2U7CisJYWRhcC0+ZmUgPSBmZTsKKworCXJldHVybiBhZGFwOworCitlcnJfbmV0X3JlbGVhc2U6CisJZHZiX25ldF9yZWxlYXNlKCZhZGFwLT5uZXQpOworCWFkYXAtPmRlbXV4LmRteC5jbG9zZSgmYWRhcC0+ZGVtdXguZG14KTsKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmFkYXAtPmRteGRldik7CitlcnJfZG14X3JlbGVhc2U6CisJZHZiX2RteF9yZWxlYXNlKGRlbXV4KTsKK2Vycl91bnJlZ2lzdGVyX2FkYXB0ZXI6CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcCk7CitlcnJfZnJlZV9wYWdlOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpOworZXJyX2tmcmVlOgorCWtmcmVlKGFkYXApOworZXJyOgorCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9jbGVhbnVwX2FkYXB0ZXJzKHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgUFQxX05SX0FEQVBTOyBpKyspCisJCXB0MV9mcmVlX2FkYXB0ZXIocHQxLT5hZGFwc1tpXSk7Cit9CisKK3N0cnVjdCBwdDFfY29uZmlnIHsKKwlzdHJ1Y3QgdmExajVqZjgwMDdzX2NvbmZpZyB2YTFqNWpmODAwN3NfY29uZmlnOworCXN0cnVjdCB2YTFqNWpmODAwN3RfY29uZmlnIHZhMWo1amY4MDA3dF9jb25maWc7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHB0MV9jb25maWcgcHQxX2NvbmZpZ3NbMl0gPSB7CisJeworCQl7IC5kZW1vZF9hZGRyZXNzID0gMHgxYiB9LAorCQl7IC5kZW1vZF9hZGRyZXNzID0gMHgxYSB9LAorCX0sIHsKKwkJeyAuZGVtb2RfYWRkcmVzcyA9IDB4MTkgfSwKKwkJeyAuZGVtb2RfYWRkcmVzcyA9IDB4MTggfSwKKwl9LAorfTsKKworc3RhdGljIGludCBwdDFfaW5pdF9hZGFwdGVycyhzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGksIGo7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKwljb25zdCBzdHJ1Y3QgcHQxX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlWzRdOworCXN0cnVjdCBwdDFfYWRhcHRlciAqYWRhcDsKKwlpbnQgcmV0OworCisJaSA9IDA7CisJaiA9IDA7CisKKwlpMmNfYWRhcCA9ICZwdDEtPmkyY19hZGFwOworCWRvIHsKKwkJY29uZmlnID0gJnB0MV9jb25maWdzW2kgLyAyXTsKKworCQlmZVtpXSA9IHZhMWo1amY4MDA3c19hdHRhY2goJmNvbmZpZy0+dmExajVqZjgwMDdzX2NvbmZpZywKKwkJCQkJICAgIGkyY19hZGFwKTsKKwkJaWYgKCFmZVtpXSkgeworCQkJcmV0ID0gLUVOT0RFVjsgLyogVGhpcyBkb2VzIG5vdCBzb3VuZCBuaWNlLi4uICovCisJCQlnb3RvIGVycjsKKwkJfQorCQlpKys7CisKKwkJZmVbaV0gPSB2YTFqNWpmODAwN3RfYXR0YWNoKCZjb25maWctPnZhMWo1amY4MDA3dF9jb25maWcsCisJCQkJCSAgICBpMmNfYWRhcCk7CisJCWlmICghZmVbaV0pIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycjsKKwkJfQorCQlpKys7CisKKwkJcmV0ID0gdmExajVqZjgwMDdzX3ByZXBhcmUoZmVbaSAtIDJdKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQlyZXQgPSB2YTFqNWpmODAwN3RfcHJlcGFyZShmZVtpIC0gMV0pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCisJfSB3aGlsZSAoaSA8IDQpOworCisJZG8geworCQlhZGFwID0gcHQxX2FsbG9jX2FkYXB0ZXIocHQxLCBmZVtqXSk7CisJCWlmIChJU19FUlIoYWRhcCkpCisJCQlnb3RvIGVycjsKKwkJYWRhcC0+aW5kZXggPSBqOworCQlwdDEtPmFkYXBzW2pdID0gYWRhcDsKKwl9IHdoaWxlICgrK2ogPCA0KTsKKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKGktLSA+IGopCisJCWZlW2ldLT5vcHMucmVsZWFzZShmZVtpXSk7CisKKwl3aGlsZSAoai0tKQorCQlwdDFfZnJlZV9hZGFwdGVyKHB0MS0+YWRhcHNbal0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHQxX2kyY19lbWl0KHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCBidXN5LCBpbnQgcmVhZF9lbmFibGUsCisJCQkgaW50IGNsb2NrLCBpbnQgZGF0YSwgaW50IG5leHRfYWRkcikKK3sKKwlwdDFfd3JpdGVfcmVnKHB0MSwgNCwgYWRkciA8PCAxOCB8IGJ1c3kgPDwgMTMgfCByZWFkX2VuYWJsZSA8PCAxMiB8CisJCSAgICAgICFjbG9jayA8PCAxMSB8ICFkYXRhIDw8IDEwIHwgbmV4dF9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgcHQxX2kyY193cml0ZV9iaXQoc3RydWN0IHB0MSAqcHQxLCBpbnQgYWRkciwgaW50ICphZGRycCwgaW50IGRhdGEpCit7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciwgICAgIDEsIDAsIDAsIGRhdGEsIGFkZHIgKyAxKTsKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMSwgMSwgMCwgMSwgZGF0YSwgYWRkciArIDIpOworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIgKyAyLCAxLCAwLCAwLCBkYXRhLCBhZGRyICsgMyk7CisJKmFkZHJwID0gYWRkciArIDM7Cit9CisKK3N0YXRpYyB2b2lkIHB0MV9pMmNfcmVhZF9iaXQoc3RydWN0IHB0MSAqcHQxLCBpbnQgYWRkciwgaW50ICphZGRycCkKK3sKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyLCAgICAgMSwgMCwgMCwgMSwgYWRkciArIDEpOworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIgKyAxLCAxLCAwLCAxLCAxLCBhZGRyICsgMik7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciArIDIsIDEsIDEsIDEsIDEsIGFkZHIgKyAzKTsKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMywgMSwgMCwgMCwgMSwgYWRkciArIDQpOworCSphZGRycCA9IGFkZHIgKyA0OworfQorCitzdGF0aWMgdm9pZCBwdDFfaTJjX3dyaXRlX2J5dGUoc3RydWN0IHB0MSAqcHQxLCBpbnQgYWRkciwgaW50ICphZGRycCwgaW50IGRhdGEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJcHQxX2kyY193cml0ZV9iaXQocHQxLCBhZGRyLCAmYWRkciwgZGF0YSA+PiAoNyAtIGkpICYgMSk7CisJcHQxX2kyY193cml0ZV9iaXQocHQxLCBhZGRyLCAmYWRkciwgMSk7CisJKmFkZHJwID0gYWRkcjsKK30KKworc3RhdGljIHZvaWQgcHQxX2kyY19yZWFkX2J5dGUoc3RydWN0IHB0MSAqcHQxLCBpbnQgYWRkciwgaW50ICphZGRycCwgaW50IGxhc3QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJcHQxX2kyY19yZWFkX2JpdChwdDEsIGFkZHIsICZhZGRyKTsKKwlwdDFfaTJjX3dyaXRlX2JpdChwdDEsIGFkZHIsICZhZGRyLCBsYXN0KTsKKwkqYWRkcnAgPSBhZGRyOworfQorCitzdGF0aWMgdm9pZCBwdDFfaTJjX3ByZXBhcmUoc3RydWN0IHB0MSAqcHQxLCBpbnQgYWRkciwgaW50ICphZGRycCkKK3sKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyLCAgICAgMSwgMCwgMSwgMSwgYWRkciArIDEpOworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIgKyAxLCAxLCAwLCAxLCAwLCBhZGRyICsgMik7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciArIDIsIDEsIDAsIDAsIDAsIGFkZHIgKyAzKTsKKwkqYWRkcnAgPSBhZGRyICsgMzsKK30KKworc3RhdGljIHZvaWQKK3B0MV9pMmNfd3JpdGVfbXNnKHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIsIGludCAqYWRkcnAsIHN0cnVjdCBpMmNfbXNnICptc2cpCit7CisJaW50IGk7CisJcHQxX2kyY19wcmVwYXJlKHB0MSwgYWRkciwgJmFkZHIpOworCXB0MV9pMmNfd3JpdGVfYnl0ZShwdDEsIGFkZHIsICZhZGRyLCBtc2ctPmFkZHIgPDwgMSk7CisJZm9yIChpID0gMDsgaSA8IG1zZy0+bGVuOyBpKyspCisJCXB0MV9pMmNfd3JpdGVfYnl0ZShwdDEsIGFkZHIsICZhZGRyLCBtc2ctPmJ1ZltpXSk7CisJKmFkZHJwID0gYWRkcjsKK30KKworc3RhdGljIHZvaWQKK3B0MV9pMmNfcmVhZF9tc2coc3RydWN0IHB0MSAqcHQxLCBpbnQgYWRkciwgaW50ICphZGRycCwgc3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlpbnQgaTsKKwlwdDFfaTJjX3ByZXBhcmUocHQxLCBhZGRyLCAmYWRkcik7CisJcHQxX2kyY193cml0ZV9ieXRlKHB0MSwgYWRkciwgJmFkZHIsIG1zZy0+YWRkciA8PCAxIHwgMSk7CisJZm9yIChpID0gMDsgaSA8IG1zZy0+bGVuOyBpKyspCisJCXB0MV9pMmNfcmVhZF9ieXRlKHB0MSwgYWRkciwgJmFkZHIsIGkgPT0gbXNnLT5sZW4gLSAxKTsKKwkqYWRkcnAgPSBhZGRyOworfQorCitzdGF0aWMgaW50IHB0MV9pMmNfZW5kKHN0cnVjdCBwdDEgKnB0MSwgaW50IGFkZHIpCit7CisJcHQxX2kyY19lbWl0KHB0MSwgYWRkciwgICAgIDEsIDAsIDAsIDAsIGFkZHIgKyAxKTsKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMSwgMSwgMCwgMSwgMCwgYWRkciArIDIpOworCXB0MV9pMmNfZW1pdChwdDEsIGFkZHIgKyAyLCAxLCAwLCAxLCAxLCAwKTsKKworCXB0MV93cml0ZV9yZWcocHQxLCAwLCAweDAwMDAwMDA0KTsKKwlkbyB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRUlOVFI7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgoSFogKyA5OTkpIC8gMTAwMCk7CisJfSB3aGlsZSAocHQxX3JlYWRfcmVnKHB0MSwgMCkgJiAweDAwMDAwMDgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHQxX2kyY19iZWdpbihzdHJ1Y3QgcHQxICpwdDEsIGludCAqYWRkcnApCit7CisJaW50IGFkZHI7CisJYWRkciA9IDA7CisKKwlwdDFfaTJjX2VtaXQocHQxLCBhZGRyLCAgICAgMCwgMCwgMSwgMSwgYWRkciAvKiBpdHNlbGYgKi8pOworCWFkZHIgPSBhZGRyICsgMTsKKworCWlmICghcHQxLT5pMmNfcnVubmluZykgeworCQlwdDFfaTJjX2VtaXQocHQxLCBhZGRyLCAgICAgMSwgMCwgMSwgMSwgYWRkciArIDEpOworCQlwdDFfaTJjX2VtaXQocHQxLCBhZGRyICsgMSwgMSwgMCwgMSwgMCwgYWRkciArIDIpOworCQlhZGRyID0gYWRkciArIDI7CisJCXB0MS0+aTJjX3J1bm5pbmcgPSAxOworCX0KKwkqYWRkcnAgPSBhZGRyOworfQorCitzdGF0aWMgaW50IHB0MV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBwdDEgKnB0MTsKKwlpbnQgaTsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnLCAqbmV4dF9tc2c7CisJaW50IGFkZHIsIHJldDsKKwl1MTYgbGVuOworCXUzMiB3b3JkOworCisJcHQxID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQltc2cgPSAmbXNnc1tpXTsKKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldHVybiAtRU5PVFNVUFA7CisKKwkJaWYgKGkgKyAxIDwgbnVtKQorCQkJbmV4dF9tc2cgPSAmbXNnc1tpICsgMV07CisJCWVsc2UKKwkJCW5leHRfbXNnID0gTlVMTDsKKworCQlpZiAobmV4dF9tc2cgJiYgbmV4dF9tc2ctPmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCWkrKzsKKworCQkJbGVuID0gbmV4dF9tc2ctPmxlbjsKKwkJCWlmIChsZW4gPiA0KQorCQkJCXJldHVybiAtRU5PVFNVUFA7CisKKwkJCXB0MV9pMmNfYmVnaW4ocHQxLCAmYWRkcik7CisJCQlwdDFfaTJjX3dyaXRlX21zZyhwdDEsIGFkZHIsICZhZGRyLCBtc2cpOworCQkJcHQxX2kyY19yZWFkX21zZyhwdDEsIGFkZHIsICZhZGRyLCBuZXh0X21zZyk7CisJCQlyZXQgPSBwdDFfaTJjX2VuZChwdDEsIGFkZHIpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJd29yZCA9IHB0MV9yZWFkX3JlZyhwdDEsIDIpOworCQkJd2hpbGUgKGxlbi0tKSB7CisJCQkJbmV4dF9tc2ctPmJ1ZltsZW5dID0gd29yZDsKKwkJCQl3b3JkID4+PSA4OworCQkJfQorCQl9IGVsc2UgeworCQkJcHQxX2kyY19iZWdpbihwdDEsICZhZGRyKTsKKwkJCXB0MV9pMmNfd3JpdGVfbXNnKHB0MSwgYWRkciwgJmFkZHIsIG1zZyk7CisJCQlyZXQgPSBwdDFfaTJjX2VuZChwdDEsIGFkZHIpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyB1MzIgcHQxX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gcHQxX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IHB0MV9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IHB0MV9pMmNfZnVuYywKK307CisKK3N0YXRpYyB2b2lkIHB0MV9pMmNfd2FpdChzdHJ1Y3QgcHQxICpwdDEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQorCQlwdDFfaTJjX2VtaXQocHQxLCAwLCAwLCAwLCAxLCAxLCAwKTsKK30KKworc3RhdGljIHZvaWQgcHQxX2kyY19pbml0KHN0cnVjdCBwdDEgKnB0MSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQorCQlwdDFfaTJjX2VtaXQocHQxLCBpLCAwLCAwLCAxLCAxLCAwKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHB0MV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHB0MSAqcHQxOworCXZvaWQgX19pb21lbSAqcmVnczsKKworCXB0MSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlyZWdzID0gcHQxLT5yZWdzOworCisJa3RocmVhZF9zdG9wKHB0MS0+a3RocmVhZCk7CisJcHQxX2NsZWFudXBfdGFibGVzKHB0MSk7CisJcHQxX2NsZWFudXBfYWRhcHRlcnMocHQxKTsKKwlwdDFfZGlzYWJsZV9yYW0ocHQxKTsKKwlwdDFfc2V0X3Bvd2VyKHB0MSwgMCwgMCwgMSk7CisJaTJjX2RlbF9hZGFwdGVyKCZwdDEtPmkyY19hZGFwKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUocHQxKTsKKwlwY2lfaW91bm1hcChwZGV2LCByZWdzKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3B0MV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgcmV0OworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgcHQxICpwdDE7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWQ7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CisKKwlyZWdzID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghcmVncykgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOworCX0KKworCXB0MSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwdDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB0MSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKKwl9CisKKwlwdDEtPnBkZXYgPSBwZGV2OworCXB0MS0+cmVncyA9IHJlZ3M7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHB0MSk7CisKKwlpMmNfYWRhcCA9ICZwdDEtPmkyY19hZGFwOworCWkyY19hZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMOworCWkyY19hZGFwLT5hbGdvID0gJnB0MV9pMmNfYWxnbzsKKwlpMmNfYWRhcC0+YWxnb19kYXRhID0gTlVMTDsKKwlpMmNfYWRhcC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaTJjX3NldF9hZGFwZGF0YShpMmNfYWRhcCwgcHQxKTsKKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoaTJjX2FkYXApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9rZnJlZTsKKworCXB0MV9zZXRfcG93ZXIocHQxLCAwLCAwLCAxKTsKKworCXB0MV9pMmNfaW5pdChwdDEpOworCXB0MV9pMmNfd2FpdChwdDEpOworCisJcmV0ID0gcHQxX3N5bmMocHQxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfaTJjX2RlbF9hZGFwdGVyOworCisJcHQxX2lkZW50aWZ5KHB0MSk7CisKKwlyZXQgPSBwdDFfdW5sb2NrKHB0MSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2kyY19kZWxfYWRhcHRlcjsKKworCXJldCA9IHB0MV9yZXNldF9wY2kocHQxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfaTJjX2RlbF9hZGFwdGVyOworCisJcmV0ID0gcHQxX3Jlc2V0X3JhbShwdDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9pMmNfZGVsX2FkYXB0ZXI7CisKKwlyZXQgPSBwdDFfZW5hYmxlX3JhbShwdDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9pMmNfZGVsX2FkYXB0ZXI7CisKKwlwdDFfaW5pdF9zdHJlYW1zKHB0MSk7CisKKwlwdDFfc2V0X3Bvd2VyKHB0MSwgMSwgMCwgMSk7CisJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoKEhaICsgNDkpIC8gNTApOworCisJcHQxX3NldF9wb3dlcihwdDEsIDEsIDAsIDApOworCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKChIWiArIDk5OSkgLyAxMDAwKTsKKworCXJldCA9IHB0MV9pbml0X2FkYXB0ZXJzKHB0MSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3B0MV9kaXNhYmxlX3JhbTsKKworCXJldCA9IHB0MV9pbml0X3RhYmxlcyhwdDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wdDFfY2xlYW51cF9hZGFwdGVyczsKKworCWt0aHJlYWQgPSBrdGhyZWFkX3J1bihwdDFfdGhyZWFkLCBwdDEsICJwdDEiKTsKKwlpZiAoSVNfRVJSKGt0aHJlYWQpKSB7CisJCXJldCA9IFBUUl9FUlIoa3RocmVhZCk7CisJCWdvdG8gZXJyX3B0MV9jbGVhbnVwX3RhYmxlczsKKwl9CisKKwlwdDEtPmt0aHJlYWQgPSBrdGhyZWFkOworCXJldHVybiAwOworCitlcnJfcHQxX2NsZWFudXBfdGFibGVzOgorCXB0MV9jbGVhbnVwX3RhYmxlcyhwdDEpOworZXJyX3B0MV9jbGVhbnVwX2FkYXB0ZXJzOgorCXB0MV9jbGVhbnVwX2FkYXB0ZXJzKHB0MSk7CitlcnJfcHQxX2Rpc2FibGVfcmFtOgorCXB0MV9kaXNhYmxlX3JhbShwdDEpOworCXB0MV9zZXRfcG93ZXIocHQxLCAwLCAwLCAxKTsKK2Vycl9pMmNfZGVsX2FkYXB0ZXI6CisJaTJjX2RlbF9hZGFwdGVyKGkyY19hZGFwKTsKK2Vycl9rZnJlZToKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUocHQxKTsKK2Vycl9wY2lfaW91bm1hcDoKKwlwY2lfaW91bm1hcChwZGV2LCByZWdzKTsKK2Vycl9wY2lfcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2VycjoKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdDFfaWRfdGFibGVbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoMHgxMGVlLCAweDIxMWEpIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdDFfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcHQxX2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwkucHJvYmUJCT0gcHQxX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHQxX3JlbW92ZSksCisJLmlkX3RhYmxlCT0gcHQxX2lkX3RhYmxlLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBwdDFfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwdDFfZHJpdmVyKTsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHQxX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnB0MV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwdDFfaW5pdCk7Cittb2R1bGVfZXhpdChwdDFfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIlRha2FoaXRvIEhJUkFOTyA8aGlyYW5vdGFrYUB6bmcuaW5mbz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRWFydGhzb2Z0IFBUMSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3MuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGI5NDBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3cy5jCkBAIC0wLDAgKzEsNjU4IEBACisvKgorICogSVNEQi1TIGRyaXZlciBmb3IgVkExSjVKRjgwMDcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSElSQU5PIFRha2FoaXRvIDxoaXJhbm90YWthQHpuZy5pbmZvPgorICoKKyAqIGJhc2VkIG9uIHB0MWR2ciAtIGh0dHA6Ly9wdDFkdnIuc291cmNlZm9yZ2UuanAvCisgKiAJYnkgVG9tb2FraSBJc2hpa2F3YSA8dG9teUB1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgInZhMWo1amY4MDA3cy5oIgorCitlbnVtIHZhMWo1amY4MDA3c190dW5lX3N0YXRlIHsKKwlWQTFKNUpGODAwN1NfSURMRSwKKwlWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8xLAorCVZBMUo1SkY4MDA3U19TRVRfRlJFUVVFTkNZXzIsCisJVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMywKKwlWQTFKNUpGODAwN1NfQ0hFQ0tfRlJFUVVFTkNZLAorCVZBMUo1SkY4MDA3U19TRVRfTU9EVUxBVElPTiwKKwlWQTFKNUpGODAwN1NfQ0hFQ0tfTU9EVUxBVElPTiwKKwlWQTFKNUpGODAwN1NfU0VUX1RTX0lELAorCVZBMUo1SkY4MDA3U19DSEVDS19UU19JRCwKKwlWQTFKNUpGODAwN1NfVFJBQ0ssCit9OworCitzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlIHsKKwljb25zdCBzdHJ1Y3QgdmExajVqZjgwMDdzX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZlOworCWVudW0gdmExajVqZjgwMDdzX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZTsKK307CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDdzX2dldF9mcm9udGVuZF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXJldHVybiBEVkJGRV9BTEdPX0hXOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3NfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJc3dpdGNoIChzdGF0ZS0+dHVuZV9zdGF0ZSkgeworCWNhc2UgVkExSjVKRjgwMDdTX0lETEU6CisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8xOgorCWNhc2UgVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMjoKKwljYXNlIFZBMUo1SkY4MDA3U19TRVRfRlJFUVVFTkNZXzM6CisJY2FzZSBWQTFKNUpGODAwN1NfQ0hFQ0tfRlJFUVVFTkNZOgorCQkqc3RhdHVzID0gMDsKKwkJcmV0dXJuIDA7CisKKworCWNhc2UgVkExSjVKRjgwMDdTX1NFVF9NT0RVTEFUSU9OOgorCWNhc2UgVkExSjVKRjgwMDdTX0NIRUNLX01PRFVMQVRJT046CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3U19TRVRfVFNfSUQ6CisJY2FzZSBWQTFKNUpGODAwN1NfQ0hFQ0tfVFNfSUQ6CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdTX1RSQUNLOgorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19MT0NLOworCQlyZXR1cm4gMDsKKwl9CisKKwlCVUcoKTsKK30KKworc3RydWN0IHZhMWo1amY4MDA3c19jYl9tYXAgeworCXUzMiBmcmVxdWVuY3k7CisJdTggY2I7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3c19jYl9tYXAgdmExajVqZjgwMDdzX2NiX21hcHNbXSA9IHsKKwl7ICA5ODYwMDAsIDB4YjIgfSwKKwl7IDEwNzIwMDAsIDB4ZDIgfSwKKwl7IDExNTQwMDAsIDB4ZTIgfSwKKwl7IDEyOTEwMDAsIDB4MjAgfSwKKwl7IDE0NDcwMDAsIDB4NDAgfSwKKwl7IDE2MTUwMDAsIDB4NjAgfSwKKwl7IDE3OTEwMDAsIDB4ODAgfSwKKwl7IDE5NzIwMDAsIDB4YTAgfSwKK307CisKK3N0YXRpYyB1OCB2YTFqNWpmODAwN3NfbG9va3VwX2NiKHUzMiBmcmVxdWVuY3kpCit7CisJaW50IGk7CisJY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3c19jYl9tYXAgKm1hcDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhMWo1amY4MDA3c19jYl9tYXBzKTsgaSsrKSB7CisJCW1hcCA9ICZ2YTFqNWpmODAwN3NfY2JfbWFwc1tpXTsKKwkJaWYgKGZyZXF1ZW5jeSA8IG1hcC0+ZnJlcXVlbmN5KQorCQkJcmV0dXJuIG1hcC0+Y2I7CisJfQorCXJldHVybiAweGMwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19zZXRfZnJlcXVlbmN5XzEoc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUpCit7CisJdTMyIGZyZXF1ZW5jeTsKKwl1MTYgd29yZDsKKwl1OCBidWZbNl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJZnJlcXVlbmN5ID0gc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3k7CisKKwl3b3JkID0gKGZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwOworCWlmIChmcmVxdWVuY3kgPCAxMDcyMDAwKQorCQl3b3JkID0gKHdvcmQgPDwgMSAmIH4weDFmKSB8ICh3b3JkICYgMHgwZik7CisKKwlidWZbMF0gPSAweGZlOworCWJ1ZlsxXSA9IDB4YzA7CisJYnVmWzJdID0gMHg0MCB8IHdvcmQgPj4gODsKKwlidWZbM10gPSB3b3JkOworCWJ1Zls0XSA9IDB4ZTA7CisJYnVmWzVdID0gdmExajVqZjgwMDdzX2xvb2t1cF9jYihmcmVxdWVuY3kpOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19zZXRfZnJlcXVlbmN5XzIoc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUpCit7CisJdTggYnVmWzNdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWJ1ZlswXSA9IDB4ZmU7CisJYnVmWzFdID0gMHhjMDsKKwlidWZbMl0gPSAweGU0OworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19zZXRfZnJlcXVlbmN5XzMoc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUpCit7CisJdTMyIGZyZXF1ZW5jeTsKKwl1OCBidWZbNF07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJZnJlcXVlbmN5ID0gc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3k7CisKKwlidWZbMF0gPSAweGZlOworCWJ1ZlsxXSA9IDB4YzA7CisJYnVmWzJdID0gMHhmNDsKKwlidWZbM10gPSB2YTFqNWpmODAwN3NfbG9va3VwX2NiKGZyZXF1ZW5jeSkgfCAweDQ7CisKKwltc2cuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gc2l6ZW9mKGJ1Zik7CisJbXNnLmJ1ZiA9IGJ1ZjsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmFkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhMWo1amY4MDA3c19jaGVja19mcmVxdWVuY3koc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUsIGludCAqbG9jaykKK3sKKwl1OCBhZGRyOworCXU4IHdyaXRlX2J1ZlsyXSwgcmVhZF9idWZbMV07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCWFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCisJd3JpdGVfYnVmWzBdID0gMHhmZTsKKwl3cml0ZV9idWZbMV0gPSAweGMxOworCisJbXNnc1swXS5hZGRyID0gYWRkcjsKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzBdLmxlbiA9IHNpemVvZih3cml0ZV9idWYpOworCW1zZ3NbMF0uYnVmID0gd3JpdGVfYnVmOworCisJbXNnc1sxXS5hZGRyID0gYWRkcjsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1sxXS5sZW4gPSBzaXplb2YocmVhZF9idWYpOworCW1zZ3NbMV0uYnVmID0gcmVhZF9idWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCBtc2dzLCAyKSAhPSAyKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCSpsb2NrID0gcmVhZF9idWZbMF0gJiAweDQwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19zZXRfbW9kdWxhdGlvbihzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJYnVmWzBdID0gMHgwMzsKKwlidWZbMV0gPSAweDAxOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3NfY2hlY2tfbW9kdWxhdGlvbihzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZSwgaW50ICpsb2NrKQoreworCXU4IGFkZHI7CisJdTggd3JpdGVfYnVmWzFdLCByZWFkX2J1ZlsxXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOworCisJYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisKKwl3cml0ZV9idWZbMF0gPSAweGMzOworCisJbXNnc1swXS5hZGRyID0gYWRkcjsKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzBdLmxlbiA9IHNpemVvZih3cml0ZV9idWYpOworCW1zZ3NbMF0uYnVmID0gd3JpdGVfYnVmOworCisJbXNnc1sxXS5hZGRyID0gYWRkcjsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1sxXS5sZW4gPSBzaXplb2YocmVhZF9idWYpOworCW1zZ3NbMV0uYnVmID0gcmVhZF9idWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCBtc2dzLCAyKSAhPSAyKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCSpsb2NrID0gIShyZWFkX2J1ZlswXSAmIDB4MTApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3Nfc2V0X3RzX2lkKHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlKQoreworCXUzMiB0c19pZDsKKwl1OCBidWZbM107CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJdHNfaWQgPSBzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJzX3RzX2lkOworCWlmICghdHNfaWQpCisJCXJldHVybiAwOworCisJYnVmWzBdID0gMHg4ZjsKKwlidWZbMV0gPSB0c19pZCA+PiA4OworCWJ1ZlsyXSA9IHRzX2lkOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3NfY2hlY2tfdHNfaWQoc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUsIGludCAqbG9jaykKK3sKKwl1OCBhZGRyOworCXU4IHdyaXRlX2J1ZlsxXSwgcmVhZF9idWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKwl1MzIgdHNfaWQ7CisKKwl0c19pZCA9IHN0YXRlLT5mZS5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnNfdHNfaWQ7CisJaWYgKCF0c19pZCkgeworCQkqbG9jayA9IDE7CisJCXJldHVybiAwOworCX0KKworCWFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCisJd3JpdGVfYnVmWzBdID0gMHhlNjsKKworCW1zZ3NbMF0uYWRkciA9IGFkZHI7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1swXS5sZW4gPSBzaXplb2Yod3JpdGVfYnVmKTsKKwltc2dzWzBdLmJ1ZiA9IHdyaXRlX2J1ZjsKKworCW1zZ3NbMV0uYWRkciA9IGFkZHI7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMV0ubGVuID0gc2l6ZW9mKHJlYWRfYnVmKTsKKwltc2dzWzFdLmJ1ZiA9IHJlYWRfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgbXNncywgMikgIT0gMikKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwkqbG9jayA9IChyZWFkX2J1ZlswXSA8PCA4IHwgcmVhZF9idWZbMV0pID09IHRzX2lkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3NfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKKwkJICB1bnNpZ25lZCBpbnQgbW9kZV9mbGFncywgIHVuc2lnbmVkIGludCAqZGVsYXksCisJCSAgZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0OworCWludCBsb2NrOworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChwYXJhbXMgIT0gTlVMTCkKKwkJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8xOworCisJc3dpdGNoIChzdGF0ZS0+dHVuZV9zdGF0ZSkgeworCWNhc2UgVkExSjVKRjgwMDdTX0lETEU6CisJCSpkZWxheSA9IDMgKiBIWjsKKwkJKnN0YXR1cyA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8xOgorCQlyZXQgPSB2YTFqNWpmODAwN3Nfc2V0X2ZyZXF1ZW5jeV8xKHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMjsKKwkJKmRlbGF5ID0gMDsKKwkJKnN0YXR1cyA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX0ZSRVFVRU5DWV8yOgorCQlyZXQgPSB2YTFqNWpmODAwN3Nfc2V0X2ZyZXF1ZW5jeV8yKHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX1NFVF9GUkVRVUVOQ1lfMzsKKwkJKmRlbGF5ID0gKEhaICsgOTkpIC8gMTAwOworCQkqc3RhdHVzID0gMDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3U19TRVRfRlJFUVVFTkNZXzM6CisJCXJldCA9IHZhMWo1amY4MDA3c19zZXRfZnJlcXVlbmN5XzMoc3RhdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1NfQ0hFQ0tfRlJFUVVFTkNZOworCQkqZGVsYXkgPSAwOworCQkqc3RhdHVzID0gMDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3U19DSEVDS19GUkVRVUVOQ1k6CisJCXJldCA9IHZhMWo1amY4MDA3c19jaGVja19mcmVxdWVuY3koc3RhdGUsICZsb2NrKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmICghbG9jaykgIHsKKwkJCSpkZWxheSA9IChIWiArIDk5OSkgLyAxMDAwOworCQkJKnN0YXR1cyA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX1NFVF9NT0RVTEFUSU9OOworCQkqZGVsYXkgPSAwOworCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3U19TRVRfTU9EVUxBVElPTjoKKwkJcmV0ID0gdmExajVqZjgwMDdzX3NldF9tb2R1bGF0aW9uKHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX0NIRUNLX01PRFVMQVRJT047CisJCSpkZWxheSA9IDA7CisJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdTX0NIRUNLX01PRFVMQVRJT046CisJCXJldCA9IHZhMWo1amY4MDA3c19jaGVja19tb2R1bGF0aW9uKHN0YXRlLCAmbG9jayk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoIWxvY2spICB7CisJCQkqZGVsYXkgPSAoSFogKyA0OSkgLyA1MDsKKwkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3U19TRVRfVFNfSUQ7CisJCSpkZWxheSA9IDA7CisJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVI7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1NfU0VUX1RTX0lEOgorCQlyZXQgPSB2YTFqNWpmODAwN3Nfc2V0X3RzX2lkKHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX0NIRUNLX1RTX0lEOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdTX0NIRUNLX1RTX0lEOgorCQlyZXQgPSB2YTFqNWpmODAwN3NfY2hlY2tfdHNfaWQoc3RhdGUsICZsb2NrKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmICghbG9jaykgIHsKKwkJCSpkZWxheSA9IChIWiArIDk5KSAvIDEwMDsKKwkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVI7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX1RSQUNLOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgVkExSjVKRjgwMDdTX1RSQUNLOgorCQkqZGVsYXkgPSAzICogSFo7CisJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfTE9DSzsKKwkJcmV0dXJuIDA7CisJfQorCisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDdzX2luaXRfZnJlcXVlbmN5KHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlKQoreworCXU4IGJ1Zls0XTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwlidWZbMF0gPSAweGZlOworCWJ1ZlsxXSA9IDB4YzA7CisJYnVmWzJdID0gMHhmMDsKKwlidWZbM10gPSAweDA0OworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19zZXRfc2xlZXAoc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGUsIGludCBzbGVlcCkKK3sKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJYnVmWzBdID0gMHgxNzsKKwlidWZbMV0gPSBzbGVlcCA/IDB4MDEgOiAweDAwOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3c19zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0OworCisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXJldCA9IHZhMWo1amY4MDA3c19pbml0X2ZyZXF1ZW5jeShzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gdmExajVqZjgwMDdzX3NldF9zbGVlcChzdGF0ZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDdzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHZhMWo1amY4MDA3c19zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdTX0lETEU7CisKKwlyZXR1cm4gdmExajVqZjgwMDdzX3NldF9zbGVlcChzdGF0ZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHZhMWo1amY4MDA3c19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlOworCXN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgdmExajVqZjgwMDdzX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiVkExSjVKRjgwMDcgSVNEQi1TIiwKKwkJLnR5cGUgPSBGRV9RUFNLLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gMTAwMCwKKwkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FBTV9BVVRPIHwgRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfCBGRV9DQU5fSElFUkFSQ0hZX0FVVE8sCisJfSwKKworCS5nZXRfZnJvbnRlbmRfYWxnbyA9IHZhMWo1amY4MDA3c19nZXRfZnJvbnRlbmRfYWxnbywKKwkucmVhZF9zdGF0dXMgPSB2YTFqNWpmODAwN3NfcmVhZF9zdGF0dXMsCisJLnR1bmUgPSB2YTFqNWpmODAwN3NfdHVuZSwKKwkuc2xlZXAgPSB2YTFqNWpmODAwN3Nfc2xlZXAsCisJLmluaXQgPSB2YTFqNWpmODAwN3NfaW5pdCwKKwkucmVsZWFzZSA9IHZhMWo1amY4MDA3c19yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2YTFqNWpmODAwN3NfcHJlcGFyZV8xKHN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlKQoreworCXU4IGFkZHI7CisJdTggd3JpdGVfYnVmWzFdLCByZWFkX2J1ZlsxXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOworCisJYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisKKwl3cml0ZV9idWZbMF0gPSAweDA3OworCisJbXNnc1swXS5hZGRyID0gYWRkcjsKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzBdLmxlbiA9IHNpemVvZih3cml0ZV9idWYpOworCW1zZ3NbMF0uYnVmID0gd3JpdGVfYnVmOworCisJbXNnc1sxXS5hZGRyID0gYWRkcjsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1sxXS5sZW4gPSBzaXplb2YocmVhZF9idWYpOworCW1zZ3NbMV0uYnVmID0gcmVhZF9idWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCBtc2dzLCAyKSAhPSAyKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCWlmIChyZWFkX2J1ZlswXSAhPSAweDQxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgdTggdmExajVqZjgwMDdzX3ByZXBhcmVfYnVmc1tdWzJdID0geworCXsweDA0LCAweDAyfSwgezB4MGQsIDB4NTV9LCB7MHgxMSwgMHg0MH0sIHsweDEzLCAweDgwfSwgezB4MTcsIDB4MDF9LAorCXsweDFjLCAweDBhfSwgezB4MWQsIDB4YWF9LCB7MHgxZSwgMHgyMH0sIHsweDFmLCAweDg4fSwgezB4NTEsIDB4YjB9LAorCXsweDUyLCAweDg5fSwgezB4NTMsIDB4YjN9LCB7MHg1YSwgMHgyZH0sIHsweDViLCAweGQzfSwgezB4ODUsIDB4Njl9LAorCXsweDg3LCAweDA0fSwgezB4OGUsIDB4MDJ9LCB7MHhhMywgMHhmN30sIHsweGE1LCAweGMwfSwKK307CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDdzX3ByZXBhcmVfMihzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBhZGRyOworCXU4IGJ1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJaW50IGk7CisKKwlhZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKworCW1zZy5hZGRyID0gYWRkcjsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSAyOworCW1zZy5idWYgPSBidWY7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmExajVqZjgwMDdzX3ByZXBhcmVfYnVmcyk7IGkrKykgeworCQltZW1jcHkoYnVmLCB2YTFqNWpmODAwN3NfcHJlcGFyZV9idWZzW2ldLCBzaXplb2YoYnVmKSk7CisJCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmFkYXAsICZtc2csIDEpICE9IDEpCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdmExajVqZjgwMDd0X2F0dGFjaCAqLworaW50IHZhMWo1amY4MDA3c19wcmVwYXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Nfc3RhdGUgKnN0YXRlOworCWludCByZXQ7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJcmV0ID0gdmExajVqZjgwMDdzX3ByZXBhcmVfMShzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB2YTFqNWpmODAwN3NfcHJlcGFyZV8yKHN0YXRlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiB2YTFqNWpmODAwN3NfaW5pdF9mcmVxdWVuY3koc3RhdGUpOworfQorCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICoKK3ZhMWo1amY4MDA3c19hdHRhY2goY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3c19jb25maWcgKmNvbmZpZywKKwkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmExajVqZjgwMDdzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5hZGFwID0gYWRhcDsKKworCWZlID0gJnN0YXRlLT5mZTsKKwltZW1jcHkoJmZlLT5vcHMsICZ2YTFqNWpmODAwN3Nfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlmZS0+ZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCisJYnVmWzBdID0gMHgwMTsKKwlidWZbMV0gPSAweDgwOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGZlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3cy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjI4YTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvdmExajVqZjgwMDdzLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIElTREItUyBkcml2ZXIgZm9yIFZBMUo1SkY4MDA3CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhJUkFOTyBUYWthaGl0byA8aGlyYW5vdGFrYUB6bmcuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBwdDFkdnIgLSBodHRwOi8vcHQxZHZyLnNvdXJjZWZvcmdlLmpwLworICogCWJ5IFRvbW9ha2kgSXNoaWthd2EgPHRvbXlAdXNlcnMuc291cmNlZm9yZ2UuanA+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBWQTFKNUpGODAwN1NfSAorI2RlZmluZSBWQTFKNUpGODAwN1NfSAorCitzdHJ1Y3QgdmExajVqZjgwMDdzX2NvbmZpZyB7CisJdTggZGVtb2RfYWRkcmVzczsKK307CisKK3N0cnVjdCBpMmNfYWRhcHRlcjsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqCit2YTFqNWpmODAwN3NfYXR0YWNoKGNvbnN0IHN0cnVjdCB2YTFqNWpmODAwN3NfY29uZmlnICpjb25maWcsCisJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOworCisvKiBtdXN0IGJlIGNhbGxlZCBhZnRlciB2YTFqNWpmODAwN3RfYXR0YWNoICovCitpbnQgdmExajVqZjgwMDdzX3ByZXBhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS92YTFqNWpmODAwN3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTExN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3dC5jCkBAIC0wLDAgKzEsNDY4IEBACisvKgorICogSVNEQi1UIGRyaXZlciBmb3IgVkExSjVKRjgwMDcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSElSQU5PIFRha2FoaXRvIDxoaXJhbm90YWthQHpuZy5pbmZvPgorICoKKyAqIGJhc2VkIG9uIHB0MWR2ciAtIGh0dHA6Ly9wdDFkdnIuc291cmNlZm9yZ2UuanAvCisgKiAJYnkgVG9tb2FraSBJc2hpa2F3YSA8dG9teUB1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImR2Yl9tYXRoLmgiCisjaW5jbHVkZSAidmExajVqZjgwMDd0LmgiCisKK2VudW0gdmExajVqZjgwMDd0X3R1bmVfc3RhdGUgeworCVZBMUo1SkY4MDA3VF9JRExFLAorCVZBMUo1SkY4MDA3VF9TRVRfRlJFUVVFTkNZLAorCVZBMUo1SkY4MDA3VF9DSEVDS19GUkVRVUVOQ1ksCisJVkExSjVKRjgwMDdUX1NFVF9NT0RVTEFUSU9OLAorCVZBMUo1SkY4MDA3VF9DSEVDS19NT0RVTEFUSU9OLAorCVZBMUo1SkY4MDA3VF9UUkFDSywKKwlWQTFKNUpGODAwN1RfQUJPUlQsCit9OworCitzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlIHsKKwljb25zdCBzdHJ1Y3QgdmExajVqZjgwMDd0X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZlOworCWVudW0gdmExajVqZjgwMDd0X3R1bmVfc3RhdGUgdHVuZV9zdGF0ZTsKK307CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDd0X2dldF9mcm9udGVuZF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXJldHVybiBEVkJGRV9BTEdPX0hXOworfQorCitzdGF0aWMgaW50Cit2YTFqNWpmODAwN3RfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJc3dpdGNoIChzdGF0ZS0+dHVuZV9zdGF0ZSkgeworCWNhc2UgVkExSjVKRjgwMDdUX0lETEU6CisJY2FzZSBWQTFKNUpGODAwN1RfU0VUX0ZSRVFVRU5DWToKKwljYXNlIFZBMUo1SkY4MDA3VF9DSEVDS19GUkVRVUVOQ1k6CisJCSpzdGF0dXMgPSAwOworCQlyZXR1cm4gMDsKKworCisJY2FzZSBWQTFKNUpGODAwN1RfU0VUX01PRFVMQVRJT046CisJY2FzZSBWQTFKNUpGODAwN1RfQ0hFQ0tfTU9EVUxBVElPTjoKKwljYXNlIFZBMUo1SkY4MDA3VF9BQk9SVDoKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdUX1RSQUNLOgorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19MT0NLOworCQlyZXR1cm4gMDsKKwl9CisKKwlCVUcoKTsKK30KKworc3RydWN0IHZhMWo1amY4MDA3dF9jYl9tYXAgeworCXUzMiBmcmVxdWVuY3k7CisJdTggY2I7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3dF9jYl9tYXAgdmExajVqZjgwMDd0X2NiX21hcHNbXSA9IHsKKwl7ICA5MDAwMDAwMCwgMHg4MCB9LAorCXsgMTQwMDAwMDAwLCAweDgxIH0sCisJeyAxNzAwMDAwMDAsIDB4YTEgfSwKKwl7IDIyMDAwMDAwMCwgMHg2MiB9LAorCXsgMzMwMDAwMDAwLCAweGEyIH0sCisJeyA0MDIwMDAwMDAsIDB4ZTIgfSwKKwl7IDQ1MDAwMDAwMCwgMHg2NCB9LAorCXsgNTUwMDAwMDAwLCAweDg0IH0sCisJeyA2MDAwMDAwMDAsIDB4YTQgfSwKKwl7IDcwMDAwMDAwMCwgMHhjNCB9LAorfTsKKworc3RhdGljIHU4IHZhMWo1amY4MDA3dF9sb29rdXBfY2IodTMyIGZyZXF1ZW5jeSkKK3sKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3QgdmExajVqZjgwMDd0X2NiX21hcCAqbWFwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmExajVqZjgwMDd0X2NiX21hcHMpOyBpKyspIHsKKwkJbWFwID0gJnZhMWo1amY4MDA3dF9jYl9tYXBzW2ldOworCQlpZiAoZnJlcXVlbmN5IDwgbWFwLT5mcmVxdWVuY3kpCisJCQlyZXR1cm4gbWFwLT5jYjsKKwl9CisJcmV0dXJuIDB4ZTQ7Cit9CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDd0X3NldF9mcmVxdWVuY3koc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGUpCit7CisJdTMyIGZyZXF1ZW5jeTsKKwl1MTYgd29yZDsKKwl1OCBidWZbNl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJZnJlcXVlbmN5ID0gc3RhdGUtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3k7CisKKwl3b3JkID0gKGZyZXF1ZW5jeSArIDcxNDI4KSAvIDE0Mjg1NyArIDM5OTsKKwlidWZbMF0gPSAweGZlOworCWJ1ZlsxXSA9IDB4YzI7CisJYnVmWzJdID0gd29yZCA+PiA4OworCWJ1ZlszXSA9IHdvcmQ7CisJYnVmWzRdID0gMHg4MDsKKwlidWZbNV0gPSB2YTFqNWpmODAwN3RfbG9va3VwX2NiKGZyZXF1ZW5jeSk7CisKKwltc2cuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gc2l6ZW9mKGJ1Zik7CisJbXNnLmJ1ZiA9IGJ1ZjsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmFkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhMWo1amY4MDA3dF9jaGVja19mcmVxdWVuY3koc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGUsIGludCAqbG9jaykKK3sKKwl1OCBhZGRyOworCXU4IHdyaXRlX2J1ZlsyXSwgcmVhZF9idWZbMV07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCWFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCisJd3JpdGVfYnVmWzBdID0gMHhmZTsKKwl3cml0ZV9idWZbMV0gPSAweGMzOworCisJbXNnc1swXS5hZGRyID0gYWRkcjsKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzBdLmxlbiA9IHNpemVvZih3cml0ZV9idWYpOworCW1zZ3NbMF0uYnVmID0gd3JpdGVfYnVmOworCisJbXNnc1sxXS5hZGRyID0gYWRkcjsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1sxXS5sZW4gPSBzaXplb2YocmVhZF9idWYpOworCW1zZ3NbMV0uYnVmID0gcmVhZF9idWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCBtc2dzLCAyKSAhPSAyKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCSpsb2NrID0gcmVhZF9idWZbMF0gJiAweDQwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3dF9zZXRfbW9kdWxhdGlvbihzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJYnVmWzBdID0gMHgwMTsKKwlidWZbMV0gPSAweDQwOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhMWo1amY4MDA3dF9jaGVja19tb2R1bGF0aW9uKHN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlLAorCQkJCQkgaW50ICpsb2NrLCBpbnQgKnJldHJ5KQoreworCXU4IGFkZHI7CisJdTggd3JpdGVfYnVmWzFdLCByZWFkX2J1ZlsxXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOworCisJYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisKKwl3cml0ZV9idWZbMF0gPSAweDgwOworCisJbXNnc1swXS5hZGRyID0gYWRkcjsKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzBdLmxlbiA9IHNpemVvZih3cml0ZV9idWYpOworCW1zZ3NbMF0uYnVmID0gd3JpdGVfYnVmOworCisJbXNnc1sxXS5hZGRyID0gYWRkcjsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1sxXS5sZW4gPSBzaXplb2YocmVhZF9idWYpOworCW1zZ3NbMV0uYnVmID0gcmVhZF9idWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCBtc2dzLCAyKSAhPSAyKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCSpsb2NrID0gIShyZWFkX2J1ZlswXSAmIDB4MTApOworCSpyZXRyeSA9IHJlYWRfYnVmWzBdICYgMHg4MDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmExajVqZjgwMDd0X3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCisJCSAgdW5zaWduZWQgaW50IG1vZGVfZmxhZ3MsICB1bnNpZ25lZCBpbnQgKmRlbGF5LAorCQkgIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGU7CisJaW50IHJldDsKKwlpbnQgbG9jaywgcmV0cnk7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaWYgKHBhcmFtcyAhPSBOVUxMKQorCQlzdGF0ZS0+dHVuZV9zdGF0ZSA9IFZBMUo1SkY4MDA3VF9TRVRfRlJFUVVFTkNZOworCisJc3dpdGNoIChzdGF0ZS0+dHVuZV9zdGF0ZSkgeworCWNhc2UgVkExSjVKRjgwMDdUX0lETEU6CisJCSpkZWxheSA9IDMgKiBIWjsKKwkJKnN0YXR1cyA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBWQTFKNUpGODAwN1RfU0VUX0ZSRVFVRU5DWToKKwkJcmV0ID0gdmExajVqZjgwMDd0X3NldF9mcmVxdWVuY3koc3RhdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1RfQ0hFQ0tfRlJFUVVFTkNZOworCQkqZGVsYXkgPSAwOworCQkqc3RhdHVzID0gMDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3VF9DSEVDS19GUkVRVUVOQ1k6CisJCXJldCA9IHZhMWo1amY4MDA3dF9jaGVja19mcmVxdWVuY3koc3RhdGUsICZsb2NrKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmICghbG9jaykgIHsKKwkJCSpkZWxheSA9IChIWiArIDk5OSkgLyAxMDAwOworCQkJKnN0YXR1cyA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdUX1NFVF9NT0RVTEFUSU9OOworCQkqZGVsYXkgPSAwOworCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZBMUo1SkY4MDA3VF9TRVRfTU9EVUxBVElPTjoKKwkJcmV0ID0gdmExajVqZjgwMDd0X3NldF9tb2R1bGF0aW9uKHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT50dW5lX3N0YXRlID0gVkExSjVKRjgwMDdUX0NIRUNLX01PRFVMQVRJT047CisJCSpkZWxheSA9IDA7CisJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdUX0NIRUNLX01PRFVMQVRJT046CisJCXJldCA9IHZhMWo1amY4MDA3dF9jaGVja19tb2R1bGF0aW9uKHN0YXRlLCAmbG9jaywgJnJldHJ5KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmICghbG9jaykgIHsKKwkJCWlmICghcmV0cnkpICB7CisJCQkJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1RfQUJPUlQ7CisJCQkJKmRlbGF5ID0gMyAqIEhaOworCQkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMOworCQkJCXJldHVybiAwOworCQkJfQorCQkJKmRlbGF5ID0gKEhaICsgOTk5KSAvIDEwMDA7CisJCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1RfVFJBQ0s7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBWQTFKNUpGODAwN1RfVFJBQ0s6CisJCSpkZWxheSA9IDMgKiBIWjsKKwkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19MT0NLOworCQlyZXR1cm4gMDsKKworCWNhc2UgVkExSjVKRjgwMDdUX0FCT1JUOgorCQkqZGVsYXkgPSAzICogSFo7CisJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMOworCQlyZXR1cm4gMDsKKwl9CisKKwlCVUcoKTsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3RfaW5pdF9mcmVxdWVuY3koc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGUpCit7CisJdTggYnVmWzddOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWJ1ZlswXSA9IDB4ZmU7CisJYnVmWzFdID0gMHhjMjsKKwlidWZbMl0gPSAweDAxOworCWJ1ZlszXSA9IDB4OGY7CisJYnVmWzRdID0gMHhjMTsKKwlidWZbNV0gPSAweDgwOworCWJ1Zls2XSA9IDB4ODA7CisKKwltc2cuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gc2l6ZW9mKGJ1Zik7CisJbXNnLmJ1ZiA9IGJ1ZjsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmFkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDd0X3NldF9zbGVlcChzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlICpzdGF0ZSwgaW50IHNsZWVwKQoreworCXU4IGJ1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwlidWZbMF0gPSAweDAzOworCWJ1ZlsxXSA9IHNsZWVwID8gMHg5MCA6IDB4ODA7CisKKwltc2cuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gc2l6ZW9mKGJ1Zik7CisJbXNnLmJ1ZiA9IGJ1ZjsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmFkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmExajVqZjgwMDd0X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlOworCWludCByZXQ7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJcmV0ID0gdmExajVqZjgwMDd0X2luaXRfZnJlcXVlbmN5KHN0YXRlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiB2YTFqNWpmODAwN3Rfc2V0X3NsZWVwKHN0YXRlLCAxKTsKK30KKworc3RhdGljIGludCB2YTFqNWpmODAwN3RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RhdGUtPnR1bmVfc3RhdGUgPSBWQTFKNUpGODAwN1RfSURMRTsKKworCXJldHVybiB2YTFqNWpmODAwN3Rfc2V0X3NsZWVwKHN0YXRlLCAwKTsKK30KKworc3RhdGljIHZvaWQgdmExajVqZjgwMDd0X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHZhMWo1amY4MDA3dF9zdGF0ZSAqc3RhdGU7CisJc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyB2YTFqNWpmODAwN3Rfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJWQTFKNUpGODAwNyBJU0RCLVQiLAorCQkudHlwZSA9IEZFX09GRE0sCisJCS5mcmVxdWVuY3lfbWluID0gOTAwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ID0gNzcwMDAwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gMTQyODU3LAorCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUUFNX0FVVE8gfCBGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8CisJCQlGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTyB8IEZFX0NBTl9ISUVSQVJDSFlfQVVUTywKKwl9LAorCisJLmdldF9mcm9udGVuZF9hbGdvID0gdmExajVqZjgwMDd0X2dldF9mcm9udGVuZF9hbGdvLAorCS5yZWFkX3N0YXR1cyA9IHZhMWo1amY4MDA3dF9yZWFkX3N0YXR1cywKKwkudHVuZSA9IHZhMWo1amY4MDA3dF90dW5lLAorCS5zbGVlcCA9IHZhMWo1amY4MDA3dF9zbGVlcCwKKwkuaW5pdCA9IHZhMWo1amY4MDA3dF9pbml0LAorCS5yZWxlYXNlID0gdmExajVqZjgwMDd0X3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3QgdTggdmExajVqZjgwMDd0X3ByZXBhcmVfYnVmc1tdWzJdID0geworCXsweDAzLCAweDkwfSwgezB4MTQsIDB4OGZ9LCB7MHgxYywgMHgyYX0sIHsweDFkLCAweGE4fSwgezB4MWUsIDB4YTJ9LAorCXsweDIyLCAweDgzfSwgezB4MzEsIDB4MGR9LCB7MHgzMiwgMHhlMH0sIHsweDM5LCAweGQzfSwgezB4M2EsIDB4MDB9LAorCXsweDVjLCAweDQwfSwgezB4NWYsIDB4ODB9LCB7MHg3NSwgMHgwMn0sIHsweDc2LCAweDRlfSwgezB4NzcsIDB4MDN9LAorCXsweGVmLCAweDAxfQorfTsKKworaW50IHZhMWo1amY4MDA3dF9wcmVwYXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB2YTFqNWpmODAwN3Rfc3RhdGUgKnN0YXRlOworCXU4IGJ1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJaW50IGk7CisKKwlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YTFqNWpmODAwN3RfcHJlcGFyZV9idWZzKTsgaSsrKSB7CisJCW1lbWNweShidWYsIHZhMWo1amY4MDA3dF9wcmVwYXJlX2J1ZnNbaV0sIHNpemVvZihidWYpKTsKKwkJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+YWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCXJldHVybiB2YTFqNWpmODAwN3RfaW5pdF9mcmVxdWVuY3koc3RhdGUpOworfQorCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICoKK3ZhMWo1amY4MDA3dF9hdHRhY2goY29uc3Qgc3RydWN0IHZhMWo1amY4MDA3dF9jb25maWcgKmNvbmZpZywKKwkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwl1OCBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmExajVqZjgwMDd0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5hZGFwID0gYWRhcDsKKworCWZlID0gJnN0YXRlLT5mZTsKKwltZW1jcHkoJmZlLT5vcHMsICZ2YTFqNWpmODAwN3Rfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlmZS0+ZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCisJYnVmWzBdID0gMHgwMTsKKwlidWZbMV0gPSAweDgwOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IHNpemVvZihidWYpOworCW1zZy5idWYgPSBidWY7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5hZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGZlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3dC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3ZhMWo1amY4MDA3dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNDk5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvdmExajVqZjgwMDd0LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIElTREItVCBkcml2ZXIgZm9yIFZBMUo1SkY4MDA3CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhJUkFOTyBUYWthaGl0byA8aGlyYW5vdGFrYUB6bmcuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBwdDFkdnIgLSBodHRwOi8vcHQxZHZyLnNvdXJjZWZvcmdlLmpwLworICogCWJ5IFRvbW9ha2kgSXNoaWthd2EgPHRvbXlAdXNlcnMuc291cmNlZm9yZ2UuanA+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBWQTFKNUpGODAwN1RfSAorI2RlZmluZSBWQTFKNUpGODAwN1RfSAorCitzdHJ1Y3QgdmExajVqZjgwMDd0X2NvbmZpZyB7CisJdTggZGVtb2RfYWRkcmVzczsKK307CisKK3N0cnVjdCBpMmNfYWRhcHRlcjsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqCit2YTFqNWpmODAwN3RfYXR0YWNoKGNvbnN0IHN0cnVjdCB2YTFqNWpmODAwN3RfY29uZmlnICpjb25maWcsCisJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOworCisvKiBtdXN0IGJlIGNhbGxlZCBhZnRlciB2YTFqNWpmODAwN3NfYXR0YWNoICovCitpbnQgdmExajVqZjgwMDd0X3ByZXBhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYwppbmRleCBiZDlhYjlkLi5mYTZhNjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogCQkJCQkgICAgJm1zZywgc2l6ZW9mKG1zZykpOwogfQogCi0vKiBuZXcgR1BJTyBtYW5hZ21lbnQgaW1wbGVtZW50YXRpb24gKi8KKy8qIG5ldyBHUElPIG1hbmFnZW1lbnQgaW1wbGVtZW50YXRpb24gKi8KIHN0YXRpYyBpbnQgR2V0R3Bpb1BpblBhcmFtcyh1MzIgUGluTnVtLCB1MzIgKnBUcmFuc2xhdGVkUGluTnVtLAogCQl1MzIgKnBHcm91cE51bSwgdTMyICpwR3JvdXBDZmcpIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCmluZGV4IGYxMTA4YzYuLmVlYzE4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKQEAgLTY1NywxMiArNjU3LDEyIEBACiBleHRlcm4gdm9pZCBzbXNjb3JlX3B1dGJ1ZmZlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKIAkJCSAgICAgIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYik7CiAKLS8qIG9sZCBHUElPIG1hbmFnbWVudCAqLworLyogb2xkIEdQSU8gbWFuYWdlbWVudCAqLwogaW50IHNtc2NvcmVfY29uZmlndXJlX2dwaW8oc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIHUzMiBwaW4sCiAJCQkgICBzdHJ1Y3Qgc21zY29yZV9jb25maWdfZ3BpbyAqcGluY29uZmlnKTsKIGludCBzbXNjb3JlX3NldF9ncGlvKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCB1MzIgcGluLCBpbnQgbGV2ZWwpOwogCi0vKiBuZXcgR1BJTyBtYW5hZ21lbnQgKi8KKy8qIG5ldyBHUElPIG1hbmFnZW1lbnQgKi8KIGV4dGVybiBpbnQgc21zY29yZV9ncGlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgdTggUGluTnVtLAogCQlzdHJ1Y3Qgc21zY29yZV9ncGlvX2NvbmZpZyAqcEdwaW9Db25maWcpOwogZXh0ZXJuIGludCBzbXNjb3JlX2dwaW9fc2V0X2xldmVsKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCB1OCBQaW5OdW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggMjVhMzZhZC4uYTg3YTQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IHRvIFNpNDcxMyBGTSBSYWRpbyBUcmFuc21pdHRlci4KIAkgIFRoaXMgZGV2aWNlIGNhbiB0cmFuc21pdCBhdWRpbyB0aHJvdWdoIEZNLiBJdCBjYW4gdHJhbnNtaXQKLQkgIEVEUyBhbmQgRUJEUyBzaWduYWxzIGFzIHdlbGwuIFRoaXMgbW9kdWxlIGlzIHRoZSB2NGwyIHJhZGlvCisJICBSRFMgYW5kIFJCRFMgc2lnbmFscyBhcyB3ZWxsLiBUaGlzIG1vZHVsZSBpcyB0aGUgdjRsMiByYWRpbwogCSAgaW50ZXJmYWNlIGZvciB0aGUgaTJjIGRyaXZlciBvZiB0aGlzIGRldmljZS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKaW5kZXggNTc1YmY5ZC4uYTEyMzkwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwpAQCAtNDYsNyArNDYsNyBAQAogICogVmVyc2lvbiAwLjExOglDb252ZXJ0ZWQgdG8gdjRsMl9kZXZpY2UuCiAgKgogICogTWFueSB0aGluZ3MgdG8gZG86Ci0gKiAJLSBDb3JyZWN0IHBvd2VyIG1hbmFnbWVudCBvZiBkZXZpY2UgKHN1c3BlbmQgJiByZXN1bWUpCisgKiAJLSBDb3JyZWN0IHBvd2VyIG1hbmFnZW1lbnQgb2YgZGV2aWNlIChzdXNwZW5kICYgcmVzdW1lKQogICogCS0gQWRkIGNvZGUgZm9yIHNjYW5uaW5nIGFuZCBzbW9vdGggdHVuaW5nCiAgKiAJLSBBZGQgY29kZSBmb3Igc2Vuc2l0aXZpdHkgdmFsdWUKICAqIAktIENvcnJlY3QgbWlzdGFrZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzEzLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcxMy5jCmluZGV4IDY1YzE0YjcuLjE3MGJiZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MTMuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggMWQ3NTg1Mi4uZTYxODZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMjY1LDYgKzI2NSwxNSBAQAogCiBjb21tZW50ICJWaWRlbyBkZWNvZGVycyIKIAorY29uZmlnIFZJREVPX0FEVjcxODAKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURWNzE4MCBkZWNvZGVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURWNzE4MCB2aWRlbyBkZWNvZGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZHY3MTgwLgorCiBjb25maWcgVklERU9fQlQ4MTkKIAl0cmlzdGF0ZSAiQlQ4MTlBIFZpZGVvU3RyZWFtIGRlY29kZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwpAQCAtNDkzLDYgKzUwMiwzOSBAQAogCiBlbmRtZW51ICMgZW5jb2RlciAvIGRlY29kZXIgY2hpcHMKIAorY29uZmlnIERJU1BMQVlfREFWSU5DSV9ETTY0NlhfRVZNCisJdHJpc3RhdGUgIkRNNjQ2eCBFVk0gVmlkZW8gRGlzcGxheSIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBNQUNIX0RBVklOQ0lfRE02NDY3X0VWTQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJc2VsZWN0IFZJREVPX0RBVklOQ0lfVlBJRgorCXNlbGVjdCBWSURFT19BRFY3MzQzCisJc2VsZWN0IFZJREVPX1RIUzczMDMKKwloZWxwCisJICBTdXBwb3J0IGZvciBETTY0NjcgYmFzZWQgZGlzcGxheSBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwaWZfZGlzcGxheS4KKworY29uZmlnIENBUFRVUkVfREFWSU5DSV9ETTY0NlhfRVZNCisJdHJpc3RhdGUgIkRNNjQ2eCBFVk0gVmlkZW8gQ2FwdHVyZSIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBNQUNIX0RBVklOQ0lfRE02NDY3X0VWTQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJc2VsZWN0IFZJREVPX0RBVklOQ0lfVlBJRgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIERNNjQ2NyBiYXNlZCBjYXB0dXJlIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBpZl9jYXB0dXJlLgorCitjb25maWcgVklERU9fREFWSU5DSV9WUElGCisJdHJpc3RhdGUgIkRhVmluY2kgVlBJRiBEcml2ZXIiCisJZGVwZW5kcyBvbiBESVNQTEFZX0RBVklOQ0lfRE02NDZYX0VWTQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIERhVmluY2kgVlBJRiBEcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwaWYuCisKIGNvbmZpZyBWSURFT19WSVZJCiAJdHJpc3RhdGUgIlZpcnR1YWwgVmlkZW8gRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIgJiYgIVNQQVJDMzIgJiYgIVNQQVJDNjQKQEAgLTUwNSw2ICs1NDcsNTUgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdGVzdCB2aWRlbyBhcHBzIG9yIGRlYnVnIFY0TCBkZXZpY2VzLgogCSAgSW4gZG91YnQsIHNheSBOLgogCitjb25maWcgVklERU9fVlBTU19TWVNURU0KKwl0cmlzdGF0ZSAiVlBTUyBTeXN0ZW0gbW9kdWxlIGRyaXZlciIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHZwc3Mgc3lzdGVtIG1vZHVsZSBmb3IgdmlkZW8gZHJpdmVyCisJZGVmYXVsdCB5CisKK2NvbmZpZyBWSURFT19WUEZFX0NBUFRVUkUKKwl0cmlzdGF0ZSAiVlBGRSBWaWRlbyBDYXB0dXJlIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgQVJDSF9EQVZJTkNJCisJc2VsZWN0IFZJREVPQlVGX0RNQV9DT05USUcKKwloZWxwCisJICBTdXBwb3J0IGZvciBETVhYWFggVlBGRSBiYXNlZCBmcmFtZSBncmFiYmVyLiBUaGlzIGlzIHRoZQorCSAgY29tbW9uIFY0TDIgbW9kdWxlIGZvciBmb2xsb3dpbmcgRE1YWFggU29DcyBmcm9tIFRleGFzCisJICBJbnN0cnVtZW50czotIERNNjQ0NiAmIERNMzU1LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLWNhcHR1cmUuCisKK2NvbmZpZyBWSURFT19ETTY0NDZfQ0NEQworCXRyaXN0YXRlICJETTY0NDYgQ0NEQyBIVyBtb2R1bGUiCisJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE02NDR4ICYmIFZJREVPX1ZQRkVfQ0FQVFVSRQorCXNlbGVjdCBWSURFT19WUFNTX1NZU1RFTQorCWRlZmF1bHQgeQorCWhlbHAKKwkgICBFbmFibGVzIERhVmluY2kgQ0NEIGh3IG1vZHVsZS4gRGFWaW5jaSBDQ0RDIGh3IGludGVyZmFjZXMKKwkgICB3aXRoIGRlY29kZXIgbW9kdWxlcyBzdWNoIGFzIFRWUDUxNDYgb3ZlciBCVDY1NiBvcgorCSAgIHNlbnNvciBtb2R1bGUgc3VjaCBhcyBNVDlUMDAxIG92ZXIgYSByYXcgaW50ZXJmYWNlLiBUaGlzCisJICAgbW9kdWxlIGNvbmZpZ3VyZXMgdGhlIGludGVyZmFjZSBhbmQgQ0NEQy9JU0lGIHRvIGRvCisJICAgdmlkZW8gZnJhbWUgY2FwdHVyZSBmcm9tIHNsYXZlIGRlY29kZXJzLgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwZmUuCisKK2NvbmZpZyBWSURFT19ETTM1NV9DQ0RDCisJdHJpc3RhdGUgIkRNMzU1IENDREMgSFcgbW9kdWxlIgorCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNMzU1ICYmIFZJREVPX1ZQRkVfQ0FQVFVSRQorCXNlbGVjdCBWSURFT19WUFNTX1NZU1RFTQorCWRlZmF1bHQgeQorCWhlbHAKKwkgICBFbmFibGVzIERNMzU1IENDRCBodyBtb2R1bGUuIERNMzU1IENDREMgaHcgaW50ZXJmYWNlcworCSAgIHdpdGggZGVjb2RlciBtb2R1bGVzIHN1Y2ggYXMgVFZQNTE0NiBvdmVyIEJUNjU2IG9yCisJICAgc2Vuc29yIG1vZHVsZSBzdWNoIGFzIE1UOVQwMDEgb3ZlciBhIHJhdyBpbnRlcmZhY2UuIFRoaXMKKwkgICBtb2R1bGUgY29uZmlndXJlcyB0aGUgaW50ZXJmYWNlIGFuZCBDQ0RDL0lTSUYgdG8gZG8KKwkgICB2aWRlbyBmcmFtZSBjYXB0dXJlIGZyb20gYSBzbGF2ZSBkZWNvZGVycworCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwZmUuCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCiBjb25maWcgVklERU9fUE1TCkBAIC02OTAsNiArNzgxLDggQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvS2NvbmZpZyIKKwogY29uZmlnIFZJREVPX00zMlJfQVIKIAl0cmlzdGF0ZSAiQVIgZGV2aWNlcyIKIAlkZXBlbmRzIG9uIE0zMlIgJiYgVklERU9fVjRMMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggOWYyZTMyMS4uZTU0MTkzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC00NSw2ICs0NSw3IEBACiBvYmotJChDT05GSUdfVklERU9fU0FBNzE5MSkgKz0gc2FhNzE5MS5vCiBvYmotJChDT05GSUdfVklERU9fQURWNzE3MCkgKz0gYWR2NzE3MC5vCiBvYmotJChDT05GSUdfVklERU9fQURWNzE3NSkgKz0gYWR2NzE3NS5vCitvYmotJChDT05GSUdfVklERU9fQURWNzE4MCkgKz0gYWR2NzE4MC5vCiBvYmotJChDT05GSUdfVklERU9fQURWNzM0MykgKz0gYWR2NzM0My5vCiBvYmotJChDT05GSUdfVklERU9fVlBYMzIyMCkgKz0gdnB4MzIyMC5vCiBvYmotJChDT05GSUdfVklERU9fQlQ4MTkpICs9IGJ0ODE5Lm8KQEAgLTE1NCwxMiArMTU1LDE3IEBACiBvYmotJChDT05GSUdfVklERU9fUFhBMjd4KQkJKz0gcHhhX2NhbWVyYS5vCiBvYmotJChDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSkJKz0gc2hfbW9iaWxlX2NldV9jYW1lcmEubwogCitvYmotJChDT05GSUdfQVJDSF9EQVZJTkNJKQkJKz0gZGF2aW5jaS8KKwogb2JqLSQoQ09ORklHX1ZJREVPX0FVMDgyOCkgKz0gYXUwODI4LwogCiBvYmotJChDT05GSUdfVVNCX1ZJREVPX0NMQVNTKQkrPSB1dmMvCitvYmotJChDT05GSUdfVklERU9fU0FBNzE2NCkgICAgICs9IHNhYTcxNjQvCiAKIG9iai0kKENPTkZJR19WSURFT19JUl9JMkMpICArPSBpci1rYmQtaTJjLm8KIAorb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkJKz0gZGF2aW5jaS8KKwogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiM2NiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxODAuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIGFkdjcxODAuYyBBbmFsb2cgRGV2aWNlcyBBRFY3MTgwIHZpZGVvIGRlY29kZXIgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImFkdjcxODAiCisKKyNkZWZpbmUgQURWNzE4MF9JTlBVVF9DT05UUk9MX1JFRwkweDAwCisjZGVmaW5lIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9QQUxfQkdfTlRTQ19KX1NFQ0FNCTB4MDAKKyNkZWZpbmUgQURWNzE4MF9BVVRPREVURUNUX0VOQUJMRV9SRUcJMHgwNworI2RlZmluZSBBRFY3MTgwX0FVVE9ERVRFQ1RfREVGQVVMVAkweDdmCisKKworI2RlZmluZSBBRFY3MTgwX1NUQVRVUzFfUkVHIDB4MTAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX01BU0sgMHg3MAorI2RlZmluZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfTlRTTV9NX0oJMHgwMAorI2RlZmluZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfTlRTQ180XzQzIDB4MTAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1BBTF9NCTB4MjAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1BBTF82MAkweDMwCisjZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9QQUxfQl9HCTB4NDAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1NFQ0FNCTB4NTAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1BBTF9DT01CCTB4NjAKKyNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1NFQ0FNXzUyNQkweDcwCisKKyNkZWZpbmUgQURWNzE4MF9JREVOVF9SRUcgMHgxMQorI2RlZmluZSBBRFY3MTgwX0lEXzcxODAgMHgxOAorCisKK3N0cnVjdCBhZHY3MTgwX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7Cit9OworCitzdGF0aWMgdjRsMl9zdGRfaWQgZGV0ZXJtaW5lX25vcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1OCBzdGF0dXMxID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9TVEFUVVMxX1JFRyk7CisKKwlzd2l0Y2ggKHN0YXR1czEgJiBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfTUFTSykgeworCWNhc2UgQURWNzE4MF9TVEFUVVMxX0FVVE9EX05UU01fTV9KOgorCQlyZXR1cm4gVjRMMl9TVERfTlRTQ19NX0pQOworCWNhc2UgQURWNzE4MF9TVEFUVVMxX0FVVE9EX05UU0NfNF80MzoKKwkJcmV0dXJuIFY0TDJfU1REX05UU0NfNDQzOworCWNhc2UgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1BBTF9NOgorCQlyZXR1cm4gVjRMMl9TVERfUEFMX007CisJY2FzZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfUEFMXzYwOgorCQlyZXR1cm4gVjRMMl9TVERfUEFMXzYwOworCWNhc2UgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1BBTF9CX0c6CisJCXJldHVybiBWNEwyX1NURF9QQUw7CisJY2FzZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfU0VDQU06CisJCXJldHVybiBWNEwyX1NURF9TRUNBTTsKKwljYXNlIEFEVjcxODBfU1RBVFVTMV9BVVRPRF9QQUxfQ09NQjoKKwkJcmV0dXJuIFY0TDJfU1REX1BBTF9OYyB8IFY0TDJfU1REX1BBTF9OOworCWNhc2UgQURWNzE4MF9TVEFUVVMxX0FVVE9EX1NFQ0FNXzUyNToKKwkJcmV0dXJuIFY0TDJfU1REX1NFQ0FNOworCWRlZmF1bHQ6CisJCXJldHVybiBWNEwyX1NURF9VTktOT1dOOworCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSwgc2QpOworfQorCitzdGF0aWMgaW50IGFkdjcxODBfcXVlcnlzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwkqc3RkID0gZGV0ZXJtaW5lX25vcm0oY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHY3MTgwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfQURWNzE4MCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGFkdjcxODBfdmlkZW9fb3BzID0geworCS5xdWVyeXN0ZCA9IGFkdjcxODBfcXVlcnlzdGQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGFkdjcxODBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGFkdjcxODBfZ19jaGlwX2lkZW50LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYWR2NzE4MF9vcHMgPSB7CisJLmNvcmUgPSAmYWR2NzE4MF9jb3JlX29wcywKKwkudmlkZW8gPSAmYWR2NzE4MF92aWRlb19vcHMsCit9OworCisvKgorICogR2VuZXJpYyBpMmMgcHJvYmUKKyAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKKyAqLworCitzdGF0aWMgaW50IGFkdjcxODBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgcmV0OworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVJTzsKKworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZzdGF0ZS0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmFkdjcxODBfb3BzKTsKKworCS8qIEluaXRpYWxpemUgYWR2NzE4MCAqLworCS8qIGVuYWJsZSBhdXRvZGV0ZWN0aW9uICovCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9SRUcsCisJCUFEVjcxODBfSU5QVVRfQ09OVFJPTF9QQUxfQkdfTlRTQ19KX1NFQ0FNKTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQlBRFY3MTgwX0FVVE9ERVRFQ1RfRU5BQkxFX1JFRywKKwkJCUFEVjcxODBfQVVUT0RFVEVDVF9ERUZBVUxUKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJCSI6IEZhaWxlZCB0byBjb21tdW5pY2F0ZSB0byBjaGlwOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHY3MTgwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWR2NzE4MF9pZFtdID0geworCXtEUklWRVJfTkFNRSwgMH0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWR2NzE4MF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZHY3MTgwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9LAorCS5wcm9iZQkJPSBhZHY3MTgwX3Byb2JlLAorCS5yZW1vdmUJCT0gYWR2NzE4MF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gYWR2NzE4MF9pZCwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGFkdjcxODBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWR2NzE4MF9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgYWR2NzE4MF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFkdjcxODBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR2NzE4MF9pbml0KTsKK21vZHVsZV9leGl0KGFkdjcxODBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQW5hbG9nIERldmljZXMgQURWNzE4MCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTW9jZWFuIExhYm9yYXRvcmllcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjczNDMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzM0My5jCmluZGV4IDMwZjVjYWYuLmRmMjZmMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzM0My5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzM0My5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgPG1lZGlhL2FkdjczNDMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwppbmRleCA4MzBjNGE5Li41N2RkOTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJCSAgIGJlIGFic3RyYWN0ZWQgb3V0IGlmIHdlIGV2ZXIgbmVlZCB0byBzdXBwb3J0IGEgZGlmZmVyZW50CiAJCSAgIGRlbW9kKSAqLwogCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAotCQkJCSJhdTg1MjIiLCAiYXU4NTIyIiwgMHg4ZSA+PiAxKTsKKwkJCQkiYXU4NTIyIiwgImF1ODUyMiIsIDB4OGUgPj4gMSwgTlVMTCk7CiAJCWlmIChzZCA9PSBOVUxMKQogCQkJcHJpbnRrKEtFUk5fRVJSICJhbmFsb2cgc3ViZGV2IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCX0KQEAgLTIyMSw3ICsyMjEsNyBAQAogCWlmIChkZXYtPmJvYXJkLnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKSB7CiAJCS8qIExvYWQgdGhlIHR1bmVyIG1vZHVsZSwgd2hpY2ggZG9lcyB0aGUgYXR0YWNoICovCiAJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCi0JCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT5ib2FyZC50dW5lcl9hZGRyKTsKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPmJvYXJkLnR1bmVyX2FkZHIsIE5VTEwpOwogCQlpZiAoc2QgPT0gTlVMTCkKIAkJCXByaW50ayhLRVJOX0VSUiAidHVuZXIgc3ViZGV2IHJlZ2lzdHJhdGlvbiBmYWlsXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCBiNDIyNTFmLi4xMjI3OWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMzUyNCw4ICszNTI0LDggQEAKIAkJfTsKIAkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCi0JCQkmYnR2LT5jLmkyY19hZGFwLCAic2FhNjU4OCIsICJzYWE2NTg4IiwgYWRkcnMpOworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKKwkJCSZidHYtPmMuaTJjX2FkYXAsICJzYWE2NTg4IiwgInNhYTY1ODgiLCAwLCBhZGRycyk7CiAJCWJ0di0+aGFzX3NhYTY1ODggPSAoc2QgIT0gTlVMTCk7CiAJfQogCkBAIC0zNTQ5LDggKzM1NDksOCBAQAogCQkJSTJDX0NMSUVOVF9FTkQKIAkJfTsKIAotCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAotCQkJJmJ0di0+Yy5pMmNfYWRhcCwgIm1zcDM0MDAiLCAibXNwMzQwMCIsIGFkZHJzKTsKKwkJYnR2LT5zZF9tc3AzNHh4ID0gdjRsMl9pMmNfbmV3X3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAorCQkJJmJ0di0+Yy5pMmNfYWRhcCwgIm1zcDM0MDAiLCAibXNwMzQwMCIsIDAsIGFkZHJzKTsKIAkJaWYgKGJ0di0+c2RfbXNwMzR4eCkKIAkJCXJldHVybjsKIAkJZ290byBub19hdWRpbzsKQEAgLTM1NjMsMTYgKzM1NjMsMTYgQEAKIAkJCUkyQ19DTElFTlRfRU5ECiAJCX07CiAKLQkJaWYgKHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCi0JCQkJJmJ0di0+Yy5pMmNfYWRhcCwgInRkYTc0MzIiLCAidGRhNzQzMiIsIGFkZHJzKSkKKwkJaWYgKHY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKKwkJCQkmYnR2LT5jLmkyY19hZGFwLCAidGRhNzQzMiIsICJ0ZGE3NDMyIiwgMCwgYWRkcnMpKQogCQkJcmV0dXJuOwogCQlnb3RvIG5vX2F1ZGlvOwogCX0KIAogCWNhc2UgMzogewogCQkvKiBUaGUgdXNlciBzcGVjaWZpZWQgdGhhdCB3ZSBzaG91bGQgcHJvYmUgZm9yIHR2YXVkaW8gKi8KLQkJYnR2LT5zZF90dmF1ZGlvID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKLQkJCSZidHYtPmMuaTJjX2FkYXAsICJ0dmF1ZGlvIiwgInR2YXVkaW8iLCB0dmF1ZGlvX2FkZHJzKCkpOworCQlidHYtPnNkX3R2YXVkaW8gPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCisJCQkmYnR2LT5jLmkyY19hZGFwLCAidHZhdWRpbyIsICJ0dmF1ZGlvIiwgMCwgdHZhdWRpb19hZGRycygpKTsKIAkJaWYgKGJ0di0+c2RfdHZhdWRpbykKIAkJCXJldHVybjsKIAkJZ290byBub19hdWRpbzsKQEAgLTM1OTEsMTMgKzM1OTEsMTMgQEAKIAkgICBpdCByZWFsbHkgaXMgYSBtc3AzNDAwLCBzbyBpdCB3aWxsIHJldHVybiBOVUxMIHdoZW4gdGhlIGRldmljZQogCSAgIGZvdW5kIGlzIHJlYWxseSBzb21ldGhpbmcgZWxzZSAoZS5nLiBhIHRlYTYzMDApLiAqLwogCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub19tc3AzNHh4KSB7Ci0JCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2X2FkZHIoJmJ0di0+Yy52NGwyX2RldiwKKwkJYnR2LT5zZF9tc3AzNHh4ID0gdjRsMl9pMmNfbmV3X3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAogCQkJJmJ0di0+Yy5pMmNfYWRhcCwgIm1zcDM0MDAiLCAibXNwMzQwMCIsCi0JCQlJMkNfQUREUl9NU1AzNDAwID4+IDEpOworCQkJMCwgSTJDX0FERFJTKEkyQ19BRERSX01TUDM0MDAgPj4gMSkpOwogCX0gZWxzZSBpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tc3AzNHh4X2FsdCkgewotCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZidHYtPmMudjRsMl9kZXYsCisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKIAkJCSZidHYtPmMuaTJjX2FkYXAsICJtc3AzNDAwIiwgIm1zcDM0MDAiLAotCQkJSTJDX0FERFJfTVNQMzQwMF9BTFQgPj4gMSk7CisJCQkwLCBJMkNfQUREUlMoSTJDX0FERFJfTVNQMzQwMF9BTFQgPj4gMSkpOwogCX0KIAogCS8qIElmIHdlIGZvdW5kIGEgbXNwMzR4eCwgdGhlbiB3ZSdyZSBkb25lLiAqLwpAQCAtMzYxMSwxNCArMzYxMSwxNCBAQAogCQkJSTJDX0NMSUVOVF9FTkQKIAkJfTsKIAotCQlpZiAodjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKLQkJCQkmYnR2LT5jLmkyY19hZGFwLCAidGRhNzQzMiIsICJ0ZGE3NDMyIiwgYWRkcnMpKQorCQlpZiAodjRsMl9pMmNfbmV3X3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAorCQkJCSZidHYtPmMuaTJjX2FkYXAsICJ0ZGE3NDMyIiwgInRkYTc0MzIiLCAwLCBhZGRycykpCiAJCQlyZXR1cm47CiAJfQogCiAJLyogTm93IHNlZSBpZiB3ZSBjYW4gZmluZCBvbmUgb2YgdGhlIHR2YXVkaW8gZGV2aWNlcy4gKi8KLQlidHYtPnNkX3R2YXVkaW8gPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAotCQkmYnR2LT5jLmkyY19hZGFwLCAidHZhdWRpbyIsICJ0dmF1ZGlvIiwgdHZhdWRpb19hZGRycygpKTsKKwlidHYtPnNkX3R2YXVkaW8gPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCisJCSZidHYtPmMuaTJjX2FkYXAsICJ0dmF1ZGlvIiwgInR2YXVkaW8iLCAwLCB0dmF1ZGlvX2FkZHJzKCkpOwogCWlmIChidHYtPnNkX3R2YXVkaW8pCiAJCXJldHVybjsKIApAQCAtMzY0MSwxNSArMzY0MSwxNSBAQAogCiAJCS8qIExvYWQgdHVuZXIgbW9kdWxlIGJlZm9yZSBpc3N1aW5nIHR1bmVyIGNvbmZpZyBjYWxsISAqLwogCQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfcmFkaW8pCi0JCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAorCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAogCQkJCSZidHYtPmMuaTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfUkFESU8pKTsKLQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKKwkJCQkwLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19SQURJTykpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZidHYtPmMudjRsMl9kZXYsCiAJCQkJJmJ0di0+Yy5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQl2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOwotCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLnY0bDJfZGV2LAorCQkJCTAsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCXY0bDJfaTJjX25ld19zdWJkZXYoJmJ0di0+Yy52NGwyX2RldiwKIAkJCQkmYnR2LT5jLmkyY19hZGFwLCAidHVuZXIiLCAidHVuZXIiLAotCQkJCXY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX1RWX1dJVEhfREVNT0QpKTsKKwkJCQkwLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19UVl9XSVRIX0RFTU9EKSk7CiAKIAkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWOwogCQl0dW5fc2V0dXAudHlwZSA9IGJ0di0+dHVuZXJfdHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDljMTQ5YTcuLjY1N2M0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMTk1NSw3ICsxOTU1LDcgQEAKIAogCWNhbS0+c2Vuc29yX2FkZHIgPSAweDQyOwogCWNhbS0+c2Vuc29yID0gdjRsMl9pMmNfbmV3X3N1YmRldigmY2FtLT52NGwyX2RldiwgJmNhbS0+aTJjX2FkYXB0ZXIsCi0JCQkib3Y3NjcwIiwgIm92NzY3MCIsIGNhbS0+c2Vuc29yX2FkZHIpOworCQkJIm92NzY3MCIsICJvdjc2NzAiLCBjYW0tPnNlbnNvcl9hZGRyLCBOVUxMKTsKIAlpZiAoY2FtLT5zZW5zb3IgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF9zbWJ1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKaW5kZXggZGQwMjI0Zi4uNmRkNTFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQkgIk51bWJlciBvZiBlbmNvZGVyIFBDTSBidWZmZXJzXG4iCiAJCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY19wY21fKiBwYXJhbWV0ZXJzIik7CiAKLU1PRFVMRV9QQVJNX0RFU0MoY3gxOF9maXJzdF9taW5vciwgIlNldCBrZXJuZWwgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKK01PRFVMRV9QQVJNX0RFU0MoY3gxOF9maXJzdF9taW5vciwgIlNldCBkZXZpY2Ugbm9kZSBudW1iZXIgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOwogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIFZlcmt1aWwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ1gyMzQxOCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKaW5kZXggZGEzOTVmZS4uMjQ3NzQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCS8qIE91ciBkZWZhdWx0IGluZm9ybWF0aW9uIGZvciBpci1rYmQtaTJjLmMgdG8gdXNlICovCiAJc3dpdGNoIChodykgewogCWNhc2UgQ1gxOF9IV19aOEYwODExX0lSX1JYX0hBVVA6Ci0JCWluZm8ucGxhdGZvcm1fZGF0YSA9ICZ6OGYwODExX2lyX2luaXRfZGF0YTsKKwkJaW5mby5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikgJno4ZjA4MTFfaXJfaW5pdF9kYXRhOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTEzOSwxNiArMTM5LDE2IEBACiAKIAlpZiAoaHcgPT0gQ1gxOF9IV19UVU5FUikgewogCQkvKiBzcGVjaWFsIHR1bmVyIGdyb3VwIGhhbmRsaW5nICovCi0JCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmN4LT52NGwyX2RldiwKLQkJCQlhZGFwLCBtb2QsIHR5cGUsIGN4LT5jYXJkX2kyYy0+cmFkaW8pOworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmN4LT52NGwyX2RldiwKKwkJCQlhZGFwLCBtb2QsIHR5cGUsIDAsIGN4LT5jYXJkX2kyYy0+cmFkaW8pOwogCQlpZiAoc2QgIT0gTlVMTCkKIAkJCXNkLT5ncnBfaWQgPSBodzsKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY3gtPnY0bDJfZGV2LAotCQkJCWFkYXAsIG1vZCwgdHlwZSwgY3gtPmNhcmRfaTJjLT5kZW1vZCk7CisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmY3gtPnY0bDJfZGV2LAorCQkJCWFkYXAsIG1vZCwgdHlwZSwgMCwgY3gtPmNhcmRfaTJjLT5kZW1vZCk7CiAJCWlmIChzZCAhPSBOVUxMKQogCQkJc2QtPmdycF9pZCA9IGh3OwotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjeC0+djRsMl9kZXYsCi0JCQkJYWRhcCwgbW9kLCB0eXBlLCBjeC0+Y2FyZF9pMmMtPnR2KTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjeC0+djRsMl9kZXYsCisJCQkJYWRhcCwgbW9kLCB0eXBlLCAwLCBjeC0+Y2FyZF9pMmMtPnR2KTsKIAkJaWYgKHNkICE9IE5VTEwpCiAJCQlzZC0+Z3JwX2lkID0gaHc7CiAJCXJldHVybiBzZCAhPSBOVUxMID8gMCA6IC0xOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCXJldHVybiAtMTsKIAogCS8qIEl0J3MgYW4gSTJDIGRldmljZSBvdGhlciB0aGFuIGFuIGFuYWxvZyB0dW5lciBvciBJUiBjaGlwICovCi0Jc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjeC0+djRsMl9kZXYsIGFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSk7CisJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjeC0+djRsMl9kZXYsIGFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSwgTlVMTCk7CiAJaWYgKHNkICE9IE5VTEwpCiAJCXNkLT5ncnBfaWQgPSBodzsKIAlyZXR1cm4gc2QgIT0gTlVMTCA/IDAgOiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwppbmRleCA1NGQyNDhlLi43ZGY1MTNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwpAQCAtMjQ1LDkgKzI0NSw5IEBACiAJdmlkZW9fc2V0X2RydmRhdGEocy0+dmlkZW9fZGV2LCBzKTsKIAogCS8qIFJlZ2lzdGVyIGRldmljZS4gRmlyc3QgdHJ5IHRoZSBkZXNpcmVkIG1pbm9yLCB0aGVuIGFueSBmcmVlIG9uZS4gKi8KLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+dmlkZW9fZGV2LCB2ZmxfdHlwZSwgbnVtKTsKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Vfbm9fd2FybihzLT52aWRlb19kZXYsIHZmbF90eXBlLCBudW0pOwogCWlmIChyZXQgPCAwKSB7Ci0JCUNYMThfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKKwkJQ1gxOF9FUlIoIkNvdWxkbid0IHJlZ2lzdGVyIHY0bDIgZGV2aWNlIGZvciAlcyAoZGV2aWNlIG5vZGUgbnVtYmVyICVkKVxuIiwKIAkJCXMtPm5hbWUsIG51bSk7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnZpZGVvX2Rldik7CiAJCXMtPnZpZGVvX2RldiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYwppbmRleCA2M2QyMjM5Li4zMTljNDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNhcmRzLmMKQEAgLTMxMyw3ICszMTMsNyBAQAogCWlmIChkZXYtPmJvYXJkLmRlY29kZXIgPT0gQ1gyMzFYWF9BVkRFQ09ERVIpIHsKIAkJZGV2LT5zZF9jeDI1ODQwID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkJJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCwKLQkJCQkJImN4MjU4NDAiLCAiY3gyNTg0MCIsIDB4ODggPj4gMSk7CisJCQkJCSJjeDI1ODQwIiwgImN4MjU4NDAiLCAweDg4ID4+IDEsIE5VTEwpOwogCQlpZiAoZGV2LT5zZF9jeDI1ODQwID09IE5VTEwpCiAJCQljeDIzMXh4X2luZm8oImN4MjU4NDAgc3ViZGV2IHJlZ2lzdHJhdGlvbiBmYWlsdXJlXG4iKTsKIAkJY3gyNTg0MF9jYWxsKGRldiwgY29yZSwgbG9hZF9mdyk7CkBAIC0zMjMsNyArMzIzLDcgQEAKIAlpZiAoZGV2LT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkgewogCQlkZXYtPnNkX3R1bmVyID0JdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAotCQkJCSJ0dW5lciIsICJ0dW5lciIsIDB4YzIgPj4gMSk7CisJCQkJInR1bmVyIiwgInR1bmVyIiwgMHhjMiA+PiAxLCBOVUxMKTsKIAkJaWYgKGRldi0+c2RfdHVuZXIgPT0gTlVMTCkKIAkJCWN4MjMxeHhfaW5mbygidHVuZXIgc3ViZGV2IHJlZ2lzdHJhdGlvbiBmYWlsdXJlXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCmluZGV4IDAzMTYyNTcuLmMwNDIyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAl2b2lkICpwcml2OwogfTsKIAotc3RydWN0IG11dGV4IGdwaW9fbXV0ZXg7LyogVHdvIENpTWF4J3MgdXNlcyBzYW1lIEdQSU8gbGluZXMgKi8KIAogaW50IG5ldHVwX3JlYWRfaTJjKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGFkZHIsIHU4IHJlZywKIAkJCQkJCXU4ICpidWYsIGludCBsZW4pCkBAIC0xODMsMTAgKzE4MiwxMSBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCW11dGV4X2xvY2soJmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmRldi0+Z3Bpb19sb2NrKTsKIAogCS8qIHdyaXRlIGFkZHIgKi8KIAljeF93cml0ZShNQzQxN19PRU4sIE5FVFVQX0VOX0FMTCk7CisJbXNsZWVwKDIpOwogCWN4X3dyaXRlKE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYgfAogCQkJCU5FVFVQX0FETE8gfCAoMHhmZiAmIGFkZHIpKTsKIAljeF9jbGVhcihNQzQxN19SV0QsIE5FVFVQX0FETE8pOwpAQCAtMTk0LDkgKzE5NCwxMCBAQAogCQkJCU5FVFVQX0FESEkgfCAoMHhmZiAmIChhZGRyID4+IDgpKSk7CiAJY3hfY2xlYXIoTUM0MTdfUldELCBORVRVUF9BREhJKTsKIAotCWlmIChyZWFkKSAvKiBkYXRhIGluICovCisJaWYgKHJlYWQpIHsgLyogZGF0YSBpbiAqLwogCQljeF93cml0ZShNQzQxN19PRU4sIE5FVFVQX0VOX0FMTCB8IE5FVFVQX0RBVEEpOwotCWVsc2UgLyogZGF0YSBvdXQgKi8KKwkJbXNsZWVwKDIpOworCX0gZWxzZSAvKiBkYXRhIG91dCAqLwogCQljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwgZGF0YSk7CiAKIAkvKiBjaG9vc2UgY2hpcCAqLwpAQCAtMjA2LDcgKzIwNyw3IEBACiAJY3hfY2xlYXIoTUM0MTdfUldELCAocmVhZCkgPyBORVRVUF9SRCA6IE5FVFVQX1dSKTsKIAltZW0gPSBuZXR1cF9jaV9nZXRfbWVtKGRldik7CiAKLQltdXRleF91bmxvY2soJmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmZGV2LT5ncGlvX2xvY2spOwogCiAJaWYgKCFyZWFkKQogCQlpZiAobWVtIDwgMCkKQEAgLTQwMyw3ICs0MDQsNiBAQAogCXN3aXRjaCAocG9ydC0+bnIpIHsKIAljYXNlIDE6CiAJCXN0YXRlLT5jaV9pMmNfYWRkciA9IDB4NDA7Ci0JCW11dGV4X2luaXQoJmdwaW9fbXV0ZXgpOwogCQlicmVhazsKIAljYXNlIDI6CiAJCXN0YXRlLT5jaV9pMmNfYWRkciA9IDB4NDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCAzMTQzZDg1Li5iZmRmNzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKQEAgLTIxMCw2ICsyMTAsMTAgQEAKIAkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19FTkNPREVSLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMF0gPSB7CisJCS5uYW1lCQk9ICJDb21wcm8gVmlkZW9NYXRlIEU4MDAiLAorCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2Jjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9ib2FyZHMpOwogCkBAIC0zNDEsNiArMzQ1LDEwIEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDg1NDEsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MTg1OCwKKwkJLnN1YmRldmljZSA9IDB4ZTgwMCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FODAwLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9zdWJpZHMpOwpAQCAtNTM2LDYgKzU0NCw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CiAJCS8qIFR1bmVyIFJlc2V0IENvbW1hbmQgKi8KIAkJYml0bWFzayA9IDB4MDQ7CiAJCWJyZWFrOwpAQCAtNjg3LDYgKzY5Niw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CisJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMDoKIAkJLyogR1BJTy0yICB4YzMwMjggdHVuZXIgcmVzZXQgKi8KIAogCQkvKiBUaGUgZm9sbG93aW5nIEdQSU8ncyBhcmUgb24gdGhlIGludGVybmFsIEFWQ29yZSAoY3gyNTg0MCkgKi8KQEAgLTkxMSw2ICs5MjEsNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1NToKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CiAJZGVmYXVsdDoKIAkJdHMyLT5nZW5fY3RybF92YWwgID0gMHhjOyAvKiBTZXJpYWwgYnVzICsgcHVuY3R1cmVkIGNsb2NrICovCiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwpAQCAtOTI3LDkgKzkzOCwxMCBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMDoKIAkJZGV2LT5zZF9jeDI1ODQwID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYnVzWzJdLmkyY19hZGFwLAotCQkJCSJjeDI1ODQwIiwgImN4MjU4NDAiLCAweDg4ID4+IDEpOworCQkJCSJjeDI1ODQwIiwgImN4MjU4NDAiLCAweDg4ID4+IDEsIE5VTEwpOwogCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgY29yZSwgbG9hZF9mdyk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwppbmRleCA0MGQ0MzhkLi5jMzEyODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCkBAIC03NTgsNiArNzU4LDcgQEAKIAlpbnQgaTsKIAogCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisJbXV0ZXhfaW5pdCgmZGV2LT5ncGlvX2xvY2spOwogCiAJYXRvbWljX2luYygmZGV2LT5yZWZjb3VudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggMDIyZmFkNy4uNDVlMTNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTI1NSwxNSArMjU1LDE4IEBACiBzdGF0aWMgc3RydWN0IHRkYTE4MjcxX2NvbmZpZyBoYXVwcGF1Z2VfdGRhMTgyNzFfY29uZmlnID0gewogCS5zdGRfbWFwID0gJmhhdXBwYXVnZV90ZGExODI3MV9zdGRfbWFwLAogCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLm91dHB1dF9vcHQgPSBUREExODI3MV9PVVRQVVRfTFRfT0ZGLAogfTsKIAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX2h2cjEyMDBfdHVuZXJfY29uZmlnID0gewogCS5zdGRfbWFwID0gJmhhdXBwYXVnZV9odnIxMjAwX3RkYTE4MjcxX3N0ZF9tYXAsCiAJLmdhdGUgICAgPSBUREExODI3MV9HQVRFX0FOQUxPRywKKwkub3V0cHV0X29wdCA9IFREQTE4MjcxX09VVFBVVF9MVF9PRkYsCiB9OwogCiBzdGF0aWMgc3RydWN0IHRkYTE4MjcxX2NvbmZpZyBoYXVwcGF1Z2VfaHZyMTIxMF90dW5lcl9jb25maWcgPSB7CiAJLmdhdGUgICAgPSBUREExODI3MV9HQVRFX0RJR0lUQUwsCisJLm91dHB1dF9vcHQgPSBUREExODI3MV9PVVRQVVRfTFRfT0ZGLAogfTsKIAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9zdGRfbWFwIGhhdXBwYXVnZV9odnIxMjd4X3N0ZF9tYXAgPSB7CkBAIC0yNzUsNiArMjc4LDcgQEAKIAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX2h2cjEyN3hfY29uZmlnID0gewogCS5zdGRfbWFwID0gJmhhdXBwYXVnZV9odnIxMjd4X3N0ZF9tYXAsCisJLm91dHB1dF9vcHQgPSBUREExODI3MV9PVVRQVVRfTFRfT0ZGLAogfTsKIAogc3RhdGljIHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgaGF1cHBhdWdlX2xnZHQzMzA1X2NvbmZpZyA9IHsKQEAgLTc0Myw2ICs3NDcsNyBAQAogCX0KIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwogCiAJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IDVkNjA5MzMuLjY1NGNjMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMTUyMSwxMSArMTUyMSwxMSBAQAogCQlpZiAoZGV2LT50dW5lcl9hZGRyKQogCQkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCi0JCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT50dW5lcl9hZGRyKTsKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPnR1bmVyX2FkZHIsIE5VTEwpOwogCQllbHNlCi0JCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAorCQkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCi0JCQkJInR1bmVyIiwgInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfVFYpKTsKKwkJCQkidHVuZXIiLCAidHVuZXIiLCAwLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19UVikpOwogCQlpZiAoc2QpIHsKIAkJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IDg2ZjI2OTQuLmNjN2ExNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtNzgsNiArNzgsNyBAQAogI2RlZmluZSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODUwNiAgICAgICAgICAgICAyMgogI2RlZmluZSBDWDIzODg1X0JPQVJEX01BR0lDUFJPX1BST0hEVFZFMiAgICAgICAyMwogI2RlZmluZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwICAgICAgICAyNAorI2RlZmluZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMCAgICAyNQogCiAjZGVmaW5lIEdQSU9fMCAweDAwMDAwMDAxCiAjZGVmaW5lIEdQSU9fMSAweDAwMDAwMDAyCkBAIC0zMjUsNiArMzI2LDcgQEAKIAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIG5yOwogCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgIGxvY2s7CisJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgZ3Bpb19sb2NrOwogCiAJLyogYm9hcmQgZGV0YWlscyAqLwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIGJvYXJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWVlcHJvbS5jCmluZGV4IDA0MmJiYmIuLjk4YTQ4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMKQEAgLTk3LDExICs5NywxMSBAQAogewogCWludCBpLCBqOwogCi0JY2luZm8tPnJldiA9ICBuZXR1cF9lZXByb21fcmVhZChpMmNfYWRhcCwgMTMpOworCWNpbmZvLT5yZXYgPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIDYzKTsKIAotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgNjsgaSsrLCBqKyspCisJZm9yIChpID0gNjQsIGogPSAwOyBpIDwgNzA7IGkrKywgaisrKQogCQljaW5mby0+cG9ydFswXS5tYWNbal0gPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIGkpOwogCi0JZm9yIChpID0gNiwgaiA9IDA7IGkgPCAxMjsgaSsrLCBqKyspCisJZm9yIChpID0gNzAsIGogPSAwOyBpIDwgNzY7IGkrKywgaisrKQogCQljaW5mby0+cG9ydFsxXS5tYWNbal0gPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIGkpOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggMzU2ZDY4OS4uZmJkYzFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTEzNzEsNyArMTM3MSw3IEBACiAJLmFkdmlzZV9yZWxlYXNlCT0gY3g4ODAyX2JsYWNrYmlyZF9hZHZpc2VfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQgYmxhY2tiaXJkX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGJsYWNrYmlyZF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4eCBibGFja2JpcmQgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAogCSAgICAgICAoQ1g4OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKQEAgLTEzODQsNyArMTM4NCw3IEBACiAJcmV0dXJuIGN4ODgwMl9yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9ibGFja2JpcmRfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgYmxhY2tiaXJkX2Zpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBibGFja2JpcmRfZmluaSh2b2lkKQogewogCWN4ODgwMl91bnJlZ2lzdGVyX2RyaXZlcigmY3g4ODAyX2JsYWNrYmlyZF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggZTVmMDdmYi4uMzNiZTYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC0zNDM5LDIwICszNDM5LDIwIEBACiAJCSAgIFRoZSByYWRpb190eXBlIGlzIHNvbWV0aW1lcyBtaXNzaW5nLCBvciBzZXQgdG8gVU5TRVQgYnV0CiAJCSAgIGxhdGVyIGNvZGUgY29uZmlndXJlcyBhIHRlYTU3NjcuCiAJCSAqLwotCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY29yZS0+djRsMl9kZXYsICZjb3JlLT5pMmNfYWRhcCwKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmY29yZS0+djRsMl9kZXYsICZjb3JlLT5pMmNfYWRhcCwKIAkJCQkidHVuZXIiLCAidHVuZXIiLAotCQkJCXY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX1JBRElPKSk7CisJCQkJMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfUkFESU8pKTsKIAkJaWYgKGhhc19kZW1vZCkKLQkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT52NGwyX2RldiwKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmNvcmUtPnY0bDJfZGV2LAogCQkJCSZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQl2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOworCQkJCTAsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CiAJCWlmIChjb3JlLT5ib2FyZC50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHsKLQkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT52NGwyX2RldiwKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmNvcmUtPnY0bDJfZGV2LAogCQkJCSZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQloYXNfZGVtb2QgPyB0dl9hZGRycyArIDQgOiB0dl9hZGRycyk7CisJCQkJMCwgaGFzX2RlbW9kID8gdHZfYWRkcnMgKyA0IDogdHZfYWRkcnMpOwogCQl9IGVsc2UgewogCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmY29yZS0+djRsMl9kZXYsICZjb3JlLT5pMmNfYWRhcCwKLQkJCQkidHVuZXIiLCAidHVuZXIiLCBjb3JlLT5ib2FyZC50dW5lcl9hZGRyKTsKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBjb3JlLT5ib2FyZC50dW5lcl9hZGRyLCBOVUxMKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCA2ZTVkMTQyLi41MThiY2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAKIAkuYWR2aXNlX3JlbGVhc2UgPSBjeDg4MDJfZHZiX2FkdmlzZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIGludCBkdmJfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZHZiX2luaXQodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJjeDg4LzI6IGN4MjM4OHggZHZiIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKIAkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCkBAIC0xMzYzLDcgKzEzNjMsNyBAQAogCXJldHVybiBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfZHZiX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGR2Yl9maW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZHZiX2Zpbmkodm9pZCkKIHsKIAljeDg4MDJfdW5yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9kdmJfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCA3MTcyZGNmLi5kZTlmZjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC04NzAsNyArODcwLDcgQEAKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChjeDg4MDJfcmVtb3ZlKSwKIH07CiAKLXN0YXRpYyBpbnQgY3g4ODAyX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGN4ODgwMl9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3g4OC8yOiBjeDIzODh4IE1QRUctVFMgRHJpdmVyIE1hbmFnZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCiAJICAgICAgIChDWDg4X1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLApAQCAtODgzLDcgKzg4Myw3IEBACiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9wY2lfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgY3g4ODAyX2Zpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeDg4MDJfZmluaSh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY3g4ODAyX3BjaV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggMmJiNTRjMy4uNTdlNmIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC0xODgxLDE0ICsxODgxLDE0IEBACiAKIAlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1dNODc3NSkKIAkJdjRsMl9pMmNfbmV3X3N1YmRldigmY29yZS0+djRsMl9kZXYsICZjb3JlLT5pMmNfYWRhcCwKLQkJCQkid204Nzc1IiwgIndtODc3NSIsIDB4MzYgPj4gMSk7CisJCQkJIndtODc3NSIsICJ3bTg3NzUiLCAweDM2ID4+IDEsIE5VTEwpOwogCiAJaWYgKGNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgPT0gVjRMMl9JREVOVF9UVkFVRElPKSB7CiAJCS8qIFRoaXMgcHJvYmVzIGZvciBhIHRkYTk4NzQgYXMgaXMgdXNlZCBvbiBzb21lCiAJCSAgIFBpeGVsdmlldyBVbHRyYSBib2FyZHMuICovCi0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2X2FkZHIoJmNvcmUtPnY0bDJfZGV2LAorCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT52NGwyX2RldiwKIAkJCQkmY29yZS0+aTJjX2FkYXAsCi0JCQkJInR2YXVkaW8iLCAidHZhdWRpbyIsIDB4YjAgPj4gMSk7CisJCQkJInR2YXVkaW8iLCAidHZhdWRpbyIsIDAsIEkyQ19BRERSUygweGIwID4+IDEpKTsKIAl9CiAKIAlzd2l0Y2ggKGNvcmUtPmJvYXJkbnIpIHsKQEAgLTIxMTMsNyArMjExMyw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgY3g4ODAwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGN4ODgwMF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3g4OC8wOiBjeDIzODh4IHY0bDIgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAogCSAgICAgICAoQ1g4OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKQEAgLTIxMjYsNyArMjEyNiw3IEBACiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMF9wY2lfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgY3g4ODAwX2Zpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeDg4MDBfZmluaSh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY3g4ODAwX3BjaV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKaW5kZXggMDY2NGQxMS4uZWU0Mzg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCkBAIC03NDgsMTQgKzc0OCwxNCBAQAogCS5yZWxlYXNlID0JZGFidXNiX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgY2hhciAqZGFidXNiX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICpkYWJ1c2JfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJ1c2IvJXMiLCBkZXZfbmFtZShkZXYpKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGRhYnVzYl9jbGFzcyA9IHsKIAkubmFtZSA9CQkiZGFidXNiJWQiLAotCS5ub2RlbmFtZSA9CWRhYnVzYl9ub2RlbmFtZSwKKwkuZGV2bm9kZSA9CWRhYnVzYl9kZXZub2RlLAogCS5mb3BzID0JCSZkYWJ1c2JfZm9wcywKIAkubWlub3JfYmFzZSA9CURBQlVTQl9NSU5PUiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4YjhmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZQpAQCAtMCwwICsxLDE3IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgZGF2aW5jaSB2aWRlbyBkZXZpY2UgZHJpdmVycy4KKyMKKworIyBWUElGCitvYmotJChDT05GSUdfVklERU9fREFWSU5DSV9WUElGKSArPSB2cGlmLm8KKworI0RNNjQ2eCBFVk0gRGlzcGxheSBkcml2ZXIKK29iai0kKENPTkZJR19ESVNQTEFZX0RBVklOQ0lfRE02NDZYX0VWTSkgKz0gdnBpZl9kaXNwbGF5Lm8KKyNETTY0NnggRVZNIENhcHR1cmUgZHJpdmVyCitvYmotJChDT05GSUdfQ0FQVFVSRV9EQVZJTkNJX0RNNjQ2WF9FVk0pICs9IHZwaWZfY2FwdHVyZS5vCisKKyMgQ2FwdHVyZTogRE02NDQ2IGFuZCBETTM1NQorb2JqLSQoQ09ORklHX1ZJREVPX1ZQU1NfU1lTVEVNKSArPSB2cHNzLm8KK29iai0kKENPTkZJR19WSURFT19WUEZFX0NBUFRVUkUpICs9IHZwZmVfY2FwdHVyZS5vCitvYmotJChDT05GSUdfVklERU9fRE02NDQ2X0NDREMpICs9IGRtNjQ0eF9jY2RjLm8KK29iai0kKENPTkZJR19WSURFT19ETTM1NV9DQ0RDKSArPSBkbTM1NV9jY2RjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9jY2RjX2h3X2RldmljZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2NjZGNfaHdfZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiOWIzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9jY2RjX2h3X2RldmljZS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIGNjZGMgZGV2aWNlIEFQSQorICovCisjaWZuZGVmIF9DQ0RDX0hXX0RFVklDRV9ICisjZGVmaW5lIF9DQ0RDX0hXX0RFVklDRV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGZlX3R5cGVzLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9jY2RjX3R5cGVzLmg+CisKKy8qCisgKiBjY2RjIGh3IG9wZXJhdGlvbnMKKyAqLworc3RydWN0IGNjZGNfaHdfb3BzIHsKKwkvKiBQb2ludGVyIHRvIGluaXRpYWxpemUgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBjY2RjIGRldmljZSAqLworCWludCAoKm9wZW4pIChzdHJ1Y3QgZGV2aWNlICpkZXYpOworCS8qIFBvaW50ZXIgdG8gZGVpbml0aWFsaXplIGZ1bmN0aW9uICovCisJaW50ICgqY2xvc2UpIChzdHJ1Y3QgZGV2aWNlICpkZXYpOworCS8qIHNldCBjY2RjIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgKCpzZXRfY2NkY19iYXNlKSh2b2lkICpiYXNlLCBpbnQgc2l6ZSk7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBlbmFibGUgb3IgZGlzYWJsZSBjY2RjICovCisJdm9pZCAoKmVuYWJsZSkgKGludCBlbik7CisJLyogcmVzZXQgc2JsLiBvbmx5IGZvciA2NDQ2ICovCisJdm9pZCAoKnJlc2V0KSAodm9pZCk7CisJLyogZW5hYmxlIG91dHB1dCB0byBzZHJhbSAqLworCXZvaWQgKCplbmFibGVfb3V0X3RvX3NkcmFtKSAoaW50IGVuKTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIHNldCBodyBwYXJhbWV0ZXJzICovCisJaW50ICgqc2V0X2h3X2lmX3BhcmFtcykgKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbSk7CisJLyogZ2V0IGludGVyZmFjZSBwYXJhbWV0ZXJzICovCisJaW50ICgqZ2V0X2h3X2lmX3BhcmFtcykgKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbSk7CisJLyoKKwkgKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIHNldCBwYXJhbWV0ZXJzLiBVc2VkCisJICogZm9yIGltcGxlbWVudGluZyBWUEZFX1NfQ0NEQ19QQVJBTVMKKwkgKi8KKwlpbnQgKCpzZXRfcGFyYW1zKSAodm9pZCAqcGFyYW1zKTsKKwkvKgorCSAqIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gZ2V0IHBhcmFtZXRlci4gVXNlZAorCSAqIGZvciBpbXBsZW1lbnRpbmcgVlBGRV9HX0NDRENfUEFSQU1TCisJICovCisJaW50ICgqZ2V0X3BhcmFtcykgKHZvaWQgKnBhcmFtcyk7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBjb25maWd1cmUgY2NkYyAqLworCWludCAoKmNvbmZpZ3VyZSkgKHZvaWQpOworCisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzZXQgYnVmZmVyIHR5cGUgKi8KKwlpbnQgKCpzZXRfYnVmdHlwZSkgKGVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlKTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGdldCBidWZmZXIgdHlwZSAqLworCWVudW0gY2NkY19idWZ0eXBlICgqZ2V0X2J1ZnR5cGUpICh2b2lkKTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIHNldCBmcmFtZSBmb3JtYXQgKi8KKwlpbnQgKCpzZXRfZnJhbWVfZm9ybWF0KSAoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KTsKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGdldCBmcmFtZSBmb3JtYXQgKi8KKwllbnVtIGNjZGNfZnJtZm10ICgqZ2V0X2ZyYW1lX2Zvcm1hdCkgKHZvaWQpOworCS8qIGVudW1lcmF0ZSBodyBwaXggZm9ybWF0cyAqLworCWludCAoKmVudW1fcGl4KSh1MzIgKmh3X3BpeCwgaW50IGkpOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gc2V0IGJ1ZmZlciB0eXBlICovCisJdTMyICgqZ2V0X3BpeGVsX2Zvcm1hdCkgKHZvaWQpOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gZ2V0IHBpeGVsIGZvcm1hdC4gKi8KKwlpbnQgKCpzZXRfcGl4ZWxfZm9ybWF0KSAodTMyIHBpeGZtdCk7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzZXQgaW1hZ2Ugd2luZG93ICovCisJaW50ICgqc2V0X2ltYWdlX3dpbmRvdykgKHN0cnVjdCB2NGwyX3JlY3QgKndpbik7CisJLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzZXQgaW1hZ2Ugd2luZG93ICovCisJdm9pZCAoKmdldF9pbWFnZV93aW5kb3cpIChzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gZ2V0IGxpbmUgbGVuZ3RoICovCisJdW5zaWduZWQgaW50ICgqZ2V0X2xpbmVfbGVuZ3RoKSAodm9pZCk7CisKKwkvKiBRdWVyeSBDQ0RDIGNvbnRyb2wgSURzICovCisJaW50ICgqcXVlcnljdHJsKShzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKTsKKwkvKiBTZXQgQ0NEQyBjb250cm9sICovCisJaW50ICgqc2V0X2NvbnRyb2wpKHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworCS8qIEdldCBDQ0RDIGNvbnRyb2wgKi8KKwlpbnQgKCpnZXRfY29udHJvbCkoc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CisKKwkvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIHNldCBmcmFtZSBidWZmZXIgYWRkcmVzcyAqLworCXZvaWQgKCpzZXRmYmFkZHIpICh1bnNpZ25lZCBsb25nIGFkZHIpOworCS8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gZ2V0IGZpZWxkIGlkICovCisJaW50ICgqZ2V0ZmlkKSAodm9pZCk7Cit9OworCitzdHJ1Y3QgY2NkY19od19kZXZpY2UgeworCS8qIGNjZGMgZGV2aWNlIG5hbWUgKi8KKwljaGFyIG5hbWVbMzJdOworCS8qIG1vZHVsZSBvd25lciAqLworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCS8qIGh3IG9wcyAqLworCXN0cnVjdCBjY2RjX2h3X29wcyBod19vcHM7Cit9OworCisvKiBVc2VkIGJ5IENDREMgbW9kdWxlIHRvIHJlZ2lzdGVyICYgdW5yZWdpc3RlciB3aXRoIHZwZmUgY2FwdHVyZSBkcml2ZXIgKi8KK2ludCB2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKHN0cnVjdCBjY2RjX2h3X2RldmljZSAqZGV2KTsKK3ZvaWQgdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKHN0cnVjdCBjY2RjX2h3X2RldmljZSAqZGV2KTsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MjljYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jCkBAIC0wLDAgKzEsOTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENDREMgaGFyZHdhcmUgbW9kdWxlIGZvciBETTM1NQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhpcyBtb2R1bGUgaXMgZm9yIGNvbmZpZ3VyaW5nIERNMzU1IENDRCBjb250cm9sbGVyIG9mIFZQRkUgdG8gY2FwdHVyZQorICogUmF3IHl1diBvciBCYXllciBSR0IgZGF0YSBmcm9tIGEgZGVjb2Rlci4gQ0NEQyBoYXMgc2V2ZXJhbCBtb2R1bGVzCisgKiBzdWNoIGFzIERlZmVjdCBQaXhlbCBDb3JyZWN0aW9uLCBDb2xvciBTcGFjZSBDb252ZXJzaW9uIGV0YyB0bworICogcHJlLXByb2Nlc3MgdGhlIEJheWVyIFJHQiBkYXRhLCBiZWZvcmUgd3JpdGluZyBpdCB0byBTRFJBTS4gVGhpcworICogbW9kdWxlIGFsc28gYWxsb3dzIGFwcGxpY2F0aW9uIHRvIGNvbmZpZ3VyZSBpbmRpdmlkdWFsCisgKiBtb2R1bGUgcGFyYW1ldGVycyB0aHJvdWdoIFZQRkVfQ01EX1NfQ0NEQ19SQVdfUEFSQU1TIElPQ1RMLgorICogVG8gZG8gc28sIGFwcGxpY2F0aW9uIGluY2x1ZGUgZG0zNTVfY2NkYy5oIGFuZCB2cGZlX2NhcHR1cmUuaCBoZWFkZXIKKyAqIGZpbGVzLiBUaGUgc2V0cGFyYW1zKCkgQVBJIGlzIGNhbGxlZCBieSB2cGZlX2NhcHR1cmUgZHJpdmVyCisgKiB0byBjb25maWd1cmUgbW9kdWxlIHBhcmFtZXRlcnMKKyAqCisgKiBUT0RPOiAxKSBSYXcgYmF5ZXIgcGFyYW1ldGVyIHNldHRpbmdzIGFuZCBiYXllciBjYXB0dXJlCisgKiAJIDIpIFNwbGl0IG1vZHVsZSBwYXJhbWV0ZXIgc3RydWN0dXJlIHRvIG1vZHVsZSBzcGVjaWZpYyBpb2N0bCBzdHJ1Y3RzCisgKgkgMykgYWRkIHN1cHBvcnQgZm9yIGxlbnNlIHNoYWRpbmcgY29ycmVjdGlvbgorICoJIDQpIGludmVzdGlnYXRlIGlmIGVudW0gdXNlZCBmb3IgdXNlciBzcGFjZSB0eXBlIGRlZmluaXRpb24KKyAqIAkgICAgdG8gYmUgcmVwbGFjZWQgYnkgI2RlZmluZXMgb3IgaW50ZWdlcgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBzcy5oPgorI2luY2x1ZGUgImRtMzU1X2NjZGNfcmVncy5oIgorI2luY2x1ZGUgImNjZGNfaHdfZGV2aWNlLmgiCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ0NEQyBEcml2ZXIgZm9yIERNMzU1Iik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworCitzdGF0aWMgc3RydWN0IGRldmljZSAqZGV2OworCisvKiBPYmplY3QgZm9yIENDREMgcmF3IG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGNjZGNfaHdfcGFyYW1zX3JhdyA9IHsKKwkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKKwkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAorCS53aW4gPSBDQ0RDX1dJTl9WR0EsCisJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS5nYWluID0geworCQkucl95ZSA9IDI1NiwKKwkJLmdiX2cgPSAyNTYsCisJCS5ncl9jeSA9IDI1NiwKKwkJLmJfbWcgPSAyNTYKKwl9LAorCS5jb25maWdfcGFyYW1zID0geworCQkuZGF0YXNmdCA9IDIsCisJCS5kYXRhX3N6ID0gQ0NEQ19EQVRBXzEwQklUUywKKwkJLm1maWx0MSA9IENDRENfTk9fTUVESUFOX0ZJTFRFUjEsCisJCS5tZmlsdDIgPSBDQ0RDX05PX01FRElBTl9GSUxURVIyLAorCQkuYWxhdyA9IHsKKwkJCS5nYW1hX3dkID0gMiwKKwkJfSwKKwkJLmJsa19jbGFtcCA9IHsKKwkJCS5zYW1wbGVfcGl4ZWwgPSAxLAorCQkJLmRjX3N1YiA9IDI1CisJCX0sCisJCS5jb2xfcGF0X2ZpZWxkMCA9IHsKKwkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAorCQkJLm9sZXAgPSBDQ0RDX0JMVUUsCisJCQkuZWxvcCA9IENDRENfUkVELAorCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAorCQl9LAorCQkuY29sX3BhdF9maWVsZDEgPSB7CisJCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKKwkJCS5vbGVwID0gQ0NEQ19CTFVFLAorCQkJLmVsb3AgPSBDQ0RDX1JFRCwKKwkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKKwkJfSwKKwl9LAorfTsKKworCisvKiBPYmplY3QgZm9yIENDREMgeWNiY3IgbW9kZSAqLworc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciBjY2RjX2h3X3BhcmFtc195Y2JjciA9IHsKKwkud2luID0gQ0NEQ19XSU5fUEFMLAorCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKKwkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS5idDY1Nl9lbmFibGUgPSAxLAorCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKKwkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECit9OworCitzdGF0aWMgZW51bSB2cGZlX2h3X2lmX3R5cGUgY2NkY19pZl90eXBlOworc3RhdGljIHZvaWQgKl9faW9tZW0gY2NkY19iYXNlX2FkZHI7CitzdGF0aWMgaW50IGNjZGNfYWRkcl9zaXplOworCisvKiBSYXcgQmF5ZXIgZm9ybWF0cyAqLworc3RhdGljIHUzMiBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tdID0KKwkJe1Y0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfUElYX0ZNVF9TQkdHUjE2fTsKKworLyogUmF3IFlVViBmb3JtYXRzICovCitzdGF0aWMgdTMyIGNjZGNfcmF3X3l1dl9waXhfZm9ybWF0c1tdID0KKwkJe1Y0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX1BJWF9GTVRfWVVZVn07CisKKy8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLworc3RhdGljIGlubGluZSB1MzIgcmVncih1MzIgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBjY2RjX3NldF9jY2RjX2Jhc2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJY2NkY19iYXNlX2FkZHIgPSBhZGRyOworCWNjZGNfYWRkcl9zaXplID0gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgY2NkY19lbmFibGUoaW50IGVuKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCXRlbXAgPSByZWdyKFNZTkNFTik7CisJdGVtcCAmPSAofkNDRENfU1lOQ0VOX1ZESERFTl9NQVNLKTsKKwl0ZW1wIHw9IChlbiAmIENDRENfU1lOQ0VOX1ZESERFTl9NQVNLKTsKKwlyZWd3KHRlbXAsIFNZTkNFTik7Cit9CisKK3N0YXRpYyB2b2lkIGNjZGNfZW5hYmxlX291dHB1dF90b19zZHJhbShpbnQgZW4pCit7CisJdW5zaWduZWQgaW50IHRlbXA7CisJdGVtcCA9IHJlZ3IoU1lOQ0VOKTsKKwl0ZW1wICY9ICh+KENDRENfU1lOQ0VOX1dFTl9NQVNLKSk7CisJdGVtcCB8PSAoKGVuIDw8IENDRENfU1lOQ0VOX1dFTl9TSElGVCkgJiBDQ0RDX1NZTkNFTl9XRU5fTUFTSyk7CisJcmVndyh0ZW1wLCBTWU5DRU4pOworfQorCitzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19nYWluX29mZnNldCh2b2lkKQoreworCS8qIGNvbmZpZ3VyZSBnYWluICovCisJcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5yX3llLCBSWUVHQUlOKTsKKwlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdyX2N5LCBHUkNZR0FJTik7CisJcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5nYl9nLCBHQkdHQUlOKTsKKwlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmJfbWcsIEJNR0dBSU4pOworCS8qIGNvbmZpZ3VyZSBvZmZzZXQgKi8KKwlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5jY2RjX29mZnNldCwgT0ZGU0VUKTsKK30KKworLyoKKyAqIGNjZGNfcmVzdG9yZV9kZWZhdWx0cygpCisgKiBUaGlzIGZ1bmN0aW9uIHJlc3RvcmUgcG93ZXIgb24gZGVmYXVsdHMgaW4gdGhlIGNjZGMgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbnQgY2NkY19yZXN0b3JlX2RlZmF1bHRzKHZvaWQpCit7CisJaW50IGk7CisKKwlkZXZfZGJnKGRldiwgIlxuc3RhcnRpbmcgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJLyogc2V0IGFsbCByZWdpc3RlcnMgdG8gemVybyAqLworCWZvciAoaSA9IDA7IGkgPD0gQ0NEQ19SRUdfTEFTVDsgaSArPSA0KQorCQlyZWd3KDAsIGkpOworCisJLyogbm93IG92ZXJyaWRlIHRoZSB2YWx1ZXMgd2l0aCBwb3dlciBvbiBkZWZhdWx0cyBpbiByZWdpc3RlcnMgKi8KKwlyZWd3KE1PREVTRVRfREVGQVVMVCwgTU9ERVNFVCk7CisJLyogbm8gY3VsbGluZyBzdXBwb3J0ICovCisJcmVndyhDVUxIX0RFRkFVTFQsIENVTEgpOworCXJlZ3coQ1VMVl9ERUZBVUxULCBDVUxWKTsKKwkvKiBTZXQgZGVmYXVsdCBHYWluIGFuZCBPZmZzZXQgKi8KKwljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5yX3llID0gR0FJTl9ERUZBVUxUOworCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdiX2cgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ3JfY3kgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19od19wYXJhbXNfcmF3LmdhaW4uYl9tZyA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NvbmZpZ19nYWluX29mZnNldCgpOworCXJlZ3coT1VUQ0xJUF9ERUZBVUxULCBPVVRDTElQKTsKKwlyZWd3KExTQ0NGRzJfREVGQVVMVCwgTFNDQ0ZHMik7CisJLyogc2VsZWN0IGNjZGMgaW5wdXQgKi8KKwlpZiAodnBzc19zZWxlY3RfY2NkY19zb3VyY2UoVlBTU19DQ0RDSU4pKSB7CisJCWRldl9kYmcoZGV2LCAiXG5jb3VsZG4ndCBzZWxlY3QgY2NkYyBpbnB1dCBzb3VyY2UiKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIHNlbGVjdCBjY2RjIGNsb2NrICovCisJaWYgKHZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQ0NEQ19DTE9DSywgMSkgPCAwKSB7CisJCWRldl9kYmcoZGV2LCAiXG5jb3VsZG4ndCBlbmFibGUgY2NkYyBjbG9jayIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjY2RjX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCWRldiA9IGRldmljZTsKKwlyZXR1cm4gY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19jbG9zZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJLyogZGlzYWJsZSBjbG9jayAqLworCXZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQ0NEQ19DTE9DSywgMCk7CisJLyogZG8gbm90aGluZyBmb3Igbm93ICovCisJcmV0dXJuIDA7Cit9CisvKgorICogY2NkY19zZXR3aW4oKQorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgd2luZG93IHNpemUgdG8KKyAqIGJlIGNhcHR1cmUgaW4gQ0NEQyByZWcuCisgKi8KK3N0YXRpYyB2b2lkIGNjZGNfc2V0d2luKHN0cnVjdCB2NGwyX3JlY3QgKmltYWdlX3dpbiwKKwkJCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCwgaW50IHBwYykKK3sKKwlpbnQgaG9yel9zdGFydCwgaG9yel9ucl9waXhlbHM7CisJaW50IHZlcnRfc3RhcnQsIHZlcnRfbnJfbGluZXM7CisJaW50IG1pZF9pbWcgPSAwOworCisJZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfc2V0d2luLi4uIik7CisKKwkvKgorCSAqIHBwYyAtIHBlciBwaXhlbCBjb3VudC4gaW5kaWNhdGVzIGhvdyBtYW55IHBpeGVscyBwZXIgY2VsbAorCSAqIG91dHB1dCB0byBTRFJBTS4gZXhhbXBsZSwgZm9yIHljYmNyLCBpdCBpcyBvbmUgeSBhbmQgb25lIGMsIHNvIDIuCisJICogcmF3IGNhcHR1cmUgdGhpcyBpcyAxCisJICovCisJaG9yel9zdGFydCA9IGltYWdlX3dpbi0+bGVmdCA8PCAocHBjIC0gMSk7CisJaG9yel9ucl9waXhlbHMgPSAoKGltYWdlX3dpbi0+d2lkdGgpIDw8IChwcGMgLSAxKSkgLSAxOworCisJLyogV3JpdGluZyB0aGUgaG9yaXpvbnRhbCBpbmZvIGludG8gdGhlIHJlZ2lzdGVycyAqLworCXJlZ3coaG9yel9zdGFydCwgU1BIKTsKKwlyZWd3KGhvcnpfbnJfcGl4ZWxzLCBOUEgpOworCXZlcnRfc3RhcnQgPSBpbWFnZV93aW4tPnRvcDsKKworCWlmIChmcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpIHsKKwkJdmVydF9ucl9saW5lcyA9IChpbWFnZV93aW4tPmhlaWdodCA+PiAxKSAtIDE7CisJCXZlcnRfc3RhcnQgPj49IDE7CisJCS8qIFNpbmNlIGZpcnN0IGxpbmUgZG9lc24ndCBoYXZlIGFueSBkYXRhICovCisJCXZlcnRfc3RhcnQgKz0gMTsKKwkJLyogY29uZmlndXJlIFZESU5UMCBhbmQgVkRJTlQxICovCisJCXJlZ3codmVydF9zdGFydCwgVkRJTlQwKTsKKwl9IGVsc2UgeworCQkvKiBTaW5jZSBmaXJzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAqLworCQl2ZXJ0X3N0YXJ0ICs9IDE7CisJCXZlcnRfbnJfbGluZXMgPSBpbWFnZV93aW4tPmhlaWdodCAtIDE7CisJCS8qIGNvbmZpZ3VyZSBWRElOVDAgYW5kIFZESU5UMSAqLworCQltaWRfaW1nID0gdmVydF9zdGFydCArIChpbWFnZV93aW4tPmhlaWdodCAvIDIpOworCQlyZWd3KHZlcnRfc3RhcnQsIFZESU5UMCk7CisJCXJlZ3cobWlkX2ltZywgVkRJTlQxKTsKKwl9CisJcmVndyh2ZXJ0X3N0YXJ0ICYgQ0NEQ19TVEFSVF9WRVJfT05FX01BU0ssIFNMVjApOworCXJlZ3codmVydF9zdGFydCAmIENDRENfU1RBUlRfVkVSX1RXT19NQVNLLCBTTFYxKTsKKwlyZWd3KHZlcnRfbnJfbGluZXMgJiBDQ0RDX05VTV9MSU5FU19WRVIsIE5MVik7CisJZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOworfQorCitzdGF0aWMgaW50IHZhbGlkYXRlX2NjZGNfcGFyYW0oc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNjZGNwYXJhbSkKK3sKKwlpZiAoY2NkY3BhcmFtLT5kYXRhc2Z0IDwgQ0NEQ19EQVRBX05PX1NISUZUIHx8CisJICAgIGNjZGNwYXJhbS0+ZGF0YXNmdCA+IENDRENfREFUQV9TSElGVF82QklUKSB7CisJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNoaWZ0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNjZGNwYXJhbS0+bWZpbHQxIDwgQ0NEQ19OT19NRURJQU5fRklMVEVSMSB8fAorCSAgICBjY2RjcGFyYW0tPm1maWx0MSA+IENDRENfTUVESUFOX0ZJTFRFUjEpIHsKKwkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIxXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNjZGNwYXJhbS0+bWZpbHQyIDwgQ0NEQ19OT19NRURJQU5fRklMVEVSMiB8fAorCSAgICBjY2RjcGFyYW0tPm1maWx0MiA+IENDRENfTUVESUFOX0ZJTFRFUjIpIHsKKwkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChjY2RjcGFyYW0tPm1lZF9maWx0X3RocmVzIDwgMCkgfHwKKwkgICAoY2NkY3BhcmFtLT5tZWRfZmlsdF90aHJlcyA+IENDRENfTUVEX0ZJTFRfVEhSRVNIKSkgeworCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlciB0aHJlc29sZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjY2RjcGFyYW0tPmRhdGFfc3ogPCBDQ0RDX0RBVEFfMTZCSVRTIHx8CisJICAgIGNjZGNwYXJhbS0+ZGF0YV9zeiA+IENDRENfREFUQV84QklUUykgeworCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaXplXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNjZGNwYXJhbS0+YWxhdy5lbmFibGUpIHsKKwkJaWYgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgQ0NEQ19HQU1NQV9CSVRTXzEzXzQgfHwKKwkJICAgIGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkID4gQ0NEQ19HQU1NQV9CSVRTXzA5XzApIHsKKwkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBBTEFXXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKGNjZGNwYXJhbS0+YmxrX2NsYW1wLmJfY2xhbXBfZW5hYmxlKSB7CisJCWlmIChjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfcGl4ZWwgPCBDQ0RDX1NBTVBMRV8xUElYRUxTIHx8CisJCSAgICBjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfcGl4ZWwgPiBDQ0RDX1NBTVBMRV8xNlBJWEVMUykgeworCQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBwaXhlbFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX2xuIDwgQ0NEQ19TQU1QTEVfMUxJTkVTIHx8CisJCSAgICBjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfbG4gPiBDQ0RDX1NBTVBMRV8xNkxJTkVTKSB7CisJCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIGxpbmVzXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBQYXJhbWV0ZXIgb3BlcmF0aW9ucyAqLworc3RhdGljIGludCBjY2RjX3NldF9wYXJhbXModm9pZCBfX3VzZXIgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyBjY2RjX3Jhd19wYXJhbXM7CisJaW50IHg7CisKKwkvKiBvbmx5IHJhdyBtb2R1bGUgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIElPQ1RMICovCisJaWYgKGNjZGNfaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl4ID0gY29weV9mcm9tX3VzZXIoJmNjZGNfcmF3X3BhcmFtcywgcGFyYW1zLCBzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CisJaWYgKHgpIHsKKwkJZGV2X2RiZyhkZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmcgY2NkYyIKKwkJCSJwYXJhbXMsICVkXG4iLCB4KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCF2YWxpZGF0ZV9jY2RjX3BhcmFtKCZjY2RjX3Jhd19wYXJhbXMpKSB7CisJCW1lbWNweSgmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMsCisJCQkmY2NkY19yYXdfcGFyYW1zLAorCQkJc2l6ZW9mKGNjZGNfcmF3X3BhcmFtcykpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgWUNiQ3IgdmlkZW8gY2FwdHVyZSAqLworc3RhdGljIHZvaWQgY2NkY19jb25maWdfeWNiY3Iodm9pZCkKK3sKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc195Y2JjcjsKKwl1MzIgdGVtcDsKKworCS8qIGZpcnN0IHNldCB0aGUgQ0NEQyBwb3dlciBvbiBkZWZhdWx0cyB2YWx1ZXMgaW4gYWxsIHJlZ2lzdGVycyAqLworCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ195Y2Jjci4uLiIpOworCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOworCisJLyogY29uZmlndXJlIHBpeGVsIGZvcm1hdCAmIHZpZGVvIGZyYW1lIGZvcm1hdCAqLworCXRlbXAgPSAoKChwYXJhbXMtPnBpeF9mbXQgJiBDQ0RDX0lOUFVUX01PREVfTUFTSykgPDwKKwkJQ0NEQ19JTlBVVF9NT0RFX1NISUZUKSB8CisJCSgocGFyYW1zLT5mcm1fZm10ICYgQ0NEQ19GUk1fRk1UX01BU0spIDw8CisJCUNDRENfRlJNX0ZNVF9TSElGVCkpOworCisJLyogc2V0dXAgQlQuNjU2IHN5bmMgbW9kZSAqLworCWlmIChwYXJhbXMtPmJ0NjU2X2VuYWJsZSkgeworCQlyZWd3KENDRENfUkVDNjU2SUZfQlQ2NTZfRU4sIFJFQzY1NklGKTsKKwkJLyoKKwkJICogY29uZmlndXJlIHRoZSBGSUQsIFZELCBIRCBwaW4gcG9sYXJpdHkgZmxkLGhkIHBvbCBwb3NpdGl2ZSwKKwkJICogdmQgbmVnYXRpdmUsIDgtYml0IHBhY2sgbW9kZQorCQkgKi8KKwkJdGVtcCB8PSBDQ0RDX1ZEX1BPTF9ORUdBVElWRTsKKwl9IGVsc2UgewkJLyogeS9jIGV4dGVybmFsIHN5bmMgbW9kZSAqLworCQl0ZW1wIHw9ICgoKHBhcmFtcy0+ZmlkX3BvbCAmIENDRENfRklEX1BPTF9NQVNLKSA8PAorCQkJQ0NEQ19GSURfUE9MX1NISUZUKSB8CisJCQkoKHBhcmFtcy0+aGRfcG9sICYgQ0NEQ19IRF9QT0xfTUFTSykgPDwKKwkJCUNDRENfSERfUE9MX1NISUZUKSB8CisJCQkoKHBhcmFtcy0+dmRfcG9sICYgQ0NEQ19WRF9QT0xfTUFTSykgPDwKKwkJCUNDRENfVkRfUE9MX1NISUZUKSk7CisJfQorCisJLyogcGFjayB0aGUgZGF0YSB0byA4LWJpdCAqLworCXRlbXAgfD0gQ0NEQ19EQVRBX1BBQ0tfRU5BQkxFOworCisJcmVndyh0ZW1wLCBNT0RFU0VUKTsKKworCS8qIGNvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwljY2RjX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMik7CisKKwkvKiBjb25maWd1cmUgdGhlIG9yZGVyIG9mIHkgY2IgY3IgaW4gU0QtUkFNICovCisJdGVtcCA9IChwYXJhbXMtPnBpeF9vcmRlciA8PCBDQ0RDX1k4UE9TX1NISUZUKTsKKwl0ZW1wIHw9IENDRENfTEFUQ0hfT05fVlNZTkNfRElTQUJMRSB8IENDRENfQ0NEQ0ZHX0ZJRE1EX05PX0xBVENIX1ZTWU5DOworCXJlZ3codGVtcCwgQ0NEQ0ZHKTsKKworCS8qCisJICogY29uZmlndXJlIHRoZSBob3Jpem9udGFsIGxpbmUgb2Zmc2V0LiBUaGlzIGlzIGRvbmUgYnkgcm91bmRpbmcgdXAKKwkgKiB3aWR0aCB0byBhIG11bHRpcGxlIG9mIDE2IHBpeGVscyBhbmQgbXVsdGlwbHkgYnkgdHdvIHRvIGFjY291bnQgZm9yCisJICogeTpjYjpjciA0OjI6MiBkYXRhCisJICovCisJcmVndygoKHBhcmFtcy0+d2luLndpZHRoICogMiArIDMxKSA+PiA1KSwgSFNJWkUpOworCisJLyogY29uZmlndXJlIHRoZSBtZW1vcnkgbGluZSBvZmZzZXQgKi8KKwlpZiAocGFyYW1zLT5idWZfdHlwZSA9PSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVEKSB7CisJCS8qIHR3byBmaWVsZHMgYXJlIGludGVybGVhdmVkIGluIG1lbW9yeSAqLworCQlyZWd3KENDRENfU0RPRlNUX0ZJRUxEX0lOVEVSTEVBVkVELCBTRE9GU1QpOworCX0KKworCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOworfQorCisvKgorICogY2NkY19jb25maWdfYmxhY2tfY2xhbXAoKQorICogY29uZmlndXJlIHBhcmFtZXRlcnMgZm9yIE9wdGljYWwgQmxhY2sgQ2xhbXAKKyAqLworc3RhdGljIHZvaWQgY2NkY19jb25maWdfYmxhY2tfY2xhbXAoc3RydWN0IGNjZGNfYmxhY2tfY2xhbXAgKmJjbGFtcCkKK3sKKwl1MzIgdmFsOworCisJaWYgKCFiY2xhbXAtPmJfY2xhbXBfZW5hYmxlKSB7CisJCS8qIGNvbmZpZ3VyZSBEQ1N1YiAqLworCQlyZWd3KGJjbGFtcC0+ZGNfc3ViICYgQ0NEQ19CTEtfRENfU1VCX01BU0ssIERDU1VCKTsKKwkJcmVndygweDAwMDAsIENMQU1QKTsKKwkJcmV0dXJuOworCX0KKwkvKiBFbmFibGUgdGhlIEJsYWNrIGNsYW1waW5nLCBzZXQgc2FtcGxlIGxpbmVzIGFuZCBwaXhlbHMgKi8KKwl2YWwgPSAoYmNsYW1wLT5zdGFydF9waXhlbCAmIENDRENfQkxLX1NUX1BYTF9NQVNLKSB8CisJICAgICAgKChiY2xhbXAtPnNhbXBsZV9waXhlbCAmIENDRENfQkxLX1NBTVBMRV9MTl9NQVNLKSA8PAorCQlDQ0RDX0JMS19TQU1QTEVfTE5fU0hJRlQpIHwgQ0NEQ19CTEtfQ0xBTVBfRU5BQkxFOworCXJlZ3codmFsLCBDTEFNUCk7CisKKwkvKiBJZiBCbGFjayBjbGFtcGluZyBpcyBlbmFibGUgdGhlbiBtYWtlIGRjc3ViIDAgKi8KKwl2YWwgPSAoYmNsYW1wLT5zYW1wbGVfbG4gJiBDQ0RDX05VTV9MSU5FX0NBTENfTUFTSykKKwkJCTw8IENDRENfTlVNX0xJTkVfQ0FMQ19TSElGVDsKKwlyZWd3KHZhbCwgRENTVUIpOworfQorCisvKgorICogY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2UoKQorICogY29uZmlndXJlIHBhcmFtZXRlcnMgZm9yIEJsYWNrIENvbXBlbnNhdGlvbgorICovCitzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19ibGFja19jb21wZW5zZShzdHJ1Y3QgY2NkY19ibGFja19jb21wZW5zYXRpb24gKmJjb21wKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSAoYmNvbXAtPmIgJiBDQ0RDX0JMS19DT01QX01BU0spIHwKKwkJKChiY29tcC0+Z2IgJiBDQ0RDX0JMS19DT01QX01BU0spIDw8CisJCUNDRENfQkxLX0NPTVBfR0JfQ09NUF9TSElGVCk7CisJcmVndyh2YWwsIEJMS0NNUDEpOworCisJdmFsID0gKChiY29tcC0+Z3IgJiBDQ0RDX0JMS19DT01QX01BU0spIDw8CisJCUNDRENfQkxLX0NPTVBfR1JfQ09NUF9TSElGVCkgfAorCQkoKGJjb21wLT5yICYgQ0NEQ19CTEtfQ09NUF9NQVNLKSA8PAorCQlDQ0RDX0JMS19DT01QX1JfQ09NUF9TSElGVCk7CisJcmVndyh2YWwsIEJMS0NNUDApOworfQorCisvKgorICogY2NkY193cml0ZV9kZmNfZW50cnkoKQorICogd3JpdGUgYW4gZW50cnkgaW4gdGhlIGRmYyB0YWJsZS4KKyAqLworaW50IGNjZGNfd3JpdGVfZGZjX2VudHJ5KGludCBpbmRleCwgc3RydWN0IGNjZGNfdmVydGljYWxfZGZ0ICpkZmMpCit7CisvKiBUT0RPIFRoaXMgaXMgdG8gYmUgcmUtdmlzaXRlZCBhbmQgYWRqdXN0ZWQgKi8KKyNkZWZpbmUgREZDX1dSSVRFX1dBSVRfQ09VTlQJMTAwMAorCXUzMiB2YWwsIGNvdW50ID0gREZDX1dSSVRFX1dBSVRfQ09VTlQ7CisKKwlyZWd3KGRmYy0+ZGZ0X2NvcnJfdmVydFtpbmRleF0sIERGQ01FTTApOworCXJlZ3coZGZjLT5kZnRfY29ycl9ob3J6W2luZGV4XSwgREZDTUVNMSk7CisJcmVndyhkZmMtPmRmdF9jb3JyX3N1YjFbaW5kZXhdLCBERkNNRU0yKTsKKwlyZWd3KGRmYy0+ZGZ0X2NvcnJfc3ViMltpbmRleF0sIERGQ01FTTMpOworCXJlZ3coZGZjLT5kZnRfY29ycl9zdWIzW2luZGV4XSwgREZDTUVNNCk7CisJLyogc2V0IFdSIGJpdCB0byB3cml0ZSAqLworCXZhbCA9IHJlZ3IoREZDTUVNQ1RMKSB8IENDRENfREZDTUVNQ1RMX0RGQ01XUl9NQVNLOworCXJlZ3codmFsLCBERkNNRU1DVEwpOworCisJLyoKKwkgKiBBc3N1bWUsIGl0IGlzIHZlcnkgc2hvcnQuIElmIHdlIGdldCBhbiBlcnJvciwgd2UgbmVlZCB0bworCSAqIGFkanVzdCB0aGlzIHZhbHVlCisJICovCisJd2hpbGUgKHJlZ3IoREZDTUVNQ1RMKSAmIENDRENfREZDTUVNQ1RMX0RGQ01XUl9NQVNLKQorCQljb3VudC0tOworCS8qCisJICogVE9ETyBXZSBleHBlY3QgdGhlIGNvdW50IHRvIGJlIG5vbi16ZXJvIHRvIGJlIHN1Y2Nlc3NmdWwuIEFkanVzdAorCSAqIHRoZSBjb3VudCBpZiB3cml0ZSByZXF1aXJlcyBtb3JlIHRpbWUKKwkgKi8KKworCWlmIChjb3VudCkgeworCQlkZXZfZXJyKGRldiwgImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjY2RjX2NvbmZpZ192ZGZjKCkKKyAqIGNvbmZpZ3VyZSBwYXJhbWV0ZXJzIGZvciBWZXJ0aWNhbCBEZWZlY3QgQ29ycmVjdGlvbgorICovCitzdGF0aWMgaW50IGNjZGNfY29uZmlnX3ZkZmMoc3RydWN0IGNjZGNfdmVydGljYWxfZGZ0ICpkZmMpCit7CisJdTMyIHZhbDsKKwlpbnQgaTsKKworCS8qIENvbmZpZ3VyZSBHZW5lcmFsIERlZmVjdCBDb3JyZWN0aW9uLiBUaGUgdGFibGUgdXNlZCBpcyBmcm9tIElQSVBFICovCisJdmFsID0gZGZjLT5nZW5fZGZ0X2VuICYgQ0NEQ19ERkNDVExfR0RGQ0VOX01BU0s7CisKKwkvKiBDb25maWd1cmUgVmVydGljYWwgRGVmZWN0IENvcnJlY3Rpb24gaWYgbmVlZGVkICovCisJaWYgKCFkZmMtPnZlcl9kZnRfZW4pIHsKKwkJLyogRW5hYmxlIG9ubHkgR2VuZXJhbCBEZWZlY3QgQ29ycmVjdGlvbiAqLworCQlyZWd3KHZhbCwgREZDQ1RMKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRmYy0+dGFibGVfc2l6ZSA+IENDRENfREZUX1RBQkxFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsIHw9IENDRENfREZDQ1RMX1ZERkNfRElTQUJMRTsKKwl2YWwgfD0gKGRmYy0+ZGZ0X2NvcnJfY3RsLnZkZmNzbCAmIENDRENfREZDQ1RMX1ZERkNTTF9NQVNLKSA8PAorCQlDQ0RDX0RGQ0NUTF9WREZDU0xfU0hJRlQ7CisJdmFsIHw9IChkZmMtPmRmdF9jb3JyX2N0bC52ZGZjdWRhICYgQ0NEQ19ERkNDVExfVkRGQ1VEQV9NQVNLKSA8PAorCQlDQ0RDX0RGQ0NUTF9WREZDVURBX1NISUZUOworCXZhbCB8PSAoZGZjLT5kZnRfY29ycl9jdGwudmRmbHNmdCAmIENDRENfREZDQ1RMX1ZERkxTRlRfTUFTSykgPDwKKwkJQ0NEQ19ERkNDVExfVkRGTFNGVF9TSElGVDsKKwlyZWd3KHZhbCAsIERGQ0NUTCk7CisKKwkvKiBjbGVhciBhZGRyZXNzIHB0ciB0byBvZmZzZXQgMCAqLworCXZhbCA9IENDRENfREZDTUVNQ1RMX0RGQ01BUlNUX01BU0sgPDwgQ0NEQ19ERkNNRU1DVExfREZDTUFSU1RfU0hJRlQ7CisKKwkvKiB3cml0ZSBkZWZlY3QgdGFibGUgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBkZmMtPnRhYmxlX3NpemU7IGkrKykgeworCQkvKiBpbmNyZW1lbnQgYWRkcmVzcyBmb3Igbm9uIHplcm8gaW5kZXggKi8KKwkJaWYgKGkgIT0gMCkKKwkJCXZhbCA9IENDRENfREZDTUVNQ1RMX0lOQ19BRERSOworCQlyZWd3KHZhbCwgREZDTUVNQ1RMKTsKKwkJaWYgKGNjZGNfd3JpdGVfZGZjX2VudHJ5KGksIGRmYykgPCAwKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogdXBkYXRlIHNhdHVyYXRpb24gbGV2ZWwgYW5kIGVuYWJsZSBkZmMgKi8KKwlyZWd3KGRmYy0+c2F0dXJhdGlvbl9jdGwgJiBDQ0RDX1ZEQ19ERkNWU0FUX01BU0ssIERGQ1ZTQVQpOworCXZhbCA9IHJlZ3IoREZDQ1RMKSB8IChDQ0RDX0RGQ0NUTF9WREZDRU5fTUFTSyA8PAorCQkJQ0NEQ19ERkNDVExfVkRGQ0VOX1NISUZUKTsKKwlyZWd3KHZhbCwgREZDQ1RMKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNjZGNfY29uZmlnX2NzYygpCisgKiBjb25maWd1cmUgcGFyYW1ldGVycyBmb3IgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICogRWFjaCByZWdpc3RlciBDU0NNMC03IGhhcyB0d28gdmFsdWVzIGluIFM4UTUgZm9ybWF0LgorICovCitzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19jc2Moc3RydWN0IGNjZGNfY3NjICpjc2MpCit7CisJdTMyIHZhbDEsIHZhbDI7CisJaW50IGk7CisKKwlpZiAoIWNzYy0+ZW5hYmxlKQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgdGhlIENTQyBzdWItbW9kdWxlICovCisJcmVndyhDQ0RDX0NTQ19FTkFCTEUsIENTQ0NUTCk7CisKKwkvKiBDb252ZXJ0aW5nIHRoZSBjby1lZmYgYXMgcGVyIHRoZSBmb3JtYXQgb2YgdGhlIHJlZ2lzdGVyICovCisJZm9yIChpID0gMDsgaSA8IENDRENfQ1NDX0NPRUZGX1RBQkxFX1NJWkU7IGkrKykgeworCQlpZiAoKGkgJSAyKSA9PSAwKSB7CisJCQkvKiBDU0NNIC0gTFNCICovCisJCQl2YWwxID0gKGNzYy0+Y29lZmZbaV0uaW50ZWdlciAmCisJCQkJQ0NEQ19DU0NfQ09FRl9JTlRFR19NQVNLKQorCQkJCTw8IENDRENfQ1NDX0NPRUZfSU5URUdfU0hJRlQ7CisJCQkvKgorCQkJICogY29udmVydCBkZWNpbWFsIHBhcnQgdG8gYmluYXJ5LiBVc2UgMiBkZWNpbWFsCisJCQkgKiBwcmVjaXNpb24sIHVzZXIgdmFsdWVzIHJhbmdlIGZyb20gLjAwIC0gMC45OQorCQkJICovCisJCQl2YWwxIHw9ICgoKGNzYy0+Y29lZmZbaV0uZGVjaW1hbCAmCisJCQkJQ0NEQ19DU0NfQ09FRl9ERUNJTUFMX01BU0spICoKKwkJCQlDQ0RDX0NTQ19ERUNfTUFYKSAvIDEwMCk7CisJCX0gZWxzZSB7CisKKwkJCS8qIENTQ00gLSBNU0IgKi8KKwkJCXZhbDIgPSAoY3NjLT5jb2VmZltpXS5pbnRlZ2VyICYKKwkJCQlDQ0RDX0NTQ19DT0VGX0lOVEVHX01BU0spCisJCQkJPDwgQ0NEQ19DU0NfQ09FRl9JTlRFR19TSElGVDsKKwkJCXZhbDIgfD0gKCgoY3NjLT5jb2VmZltpXS5kZWNpbWFsICYKKwkJCQkgQ0NEQ19DU0NfQ09FRl9ERUNJTUFMX01BU0spICoKKwkJCQkgQ0NEQ19DU0NfREVDX01BWCkgLyAxMDApOworCQkJdmFsMiA8PD0gQ0NEQ19DU0NNX01TQl9TSElGVDsKKwkJCXZhbDIgfD0gdmFsMTsKKwkJCXJlZ3codmFsMiwgKENTQ00wICsgKChpIC0gMSkgPDwgMSkpKTsKKwkJfQorCX0KK30KKworLyoKKyAqIGNjZGNfY29uZmlnX2NvbG9yX3BhdHRlcm5zKCkKKyAqIGNvbmZpZ3VyZSBwYXJhbWV0ZXJzIGZvciBjb2xvciBwYXR0ZXJucworICovCitzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19jb2xvcl9wYXR0ZXJucyhzdHJ1Y3QgY2NkY19jb2xfcGF0ICpwYXQwLAorCQkJCSAgICAgICBzdHJ1Y3QgY2NkY19jb2xfcGF0ICpwYXQxKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSAocGF0MC0+b2xvcCB8IChwYXQwLT5vbGVwIDw8IDIpIHwgKHBhdDAtPmVsb3AgPDwgNCkgfAorCQkocGF0MC0+ZWxlcCA8PCA2KSB8IChwYXQxLT5vbG9wIDw8IDgpIHwgKHBhdDEtPm9sZXAgPDwgMTApIHwKKwkJKHBhdDEtPmVsb3AgPDwgMTIpIHwgKHBhdDEtPmVsZXAgPDwgMTQpKTsKKwlyZWd3KHZhbCwgQ09MUFROKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSBDQ0RDIGZvciBSYXcgbW9kZSBpbWFnZSBjYXB0dXJlICovCitzdGF0aWMgaW50IGNjZGNfY29uZmlnX3Jhdyh2b2lkKQoreworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc19yYXc7CisJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQorCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKworCS8qIHJlc3RvcmUgcG93ZXIgb24gZGVmYXVsdHMgdG8gcmVnaXN0ZXIgKi8KKwljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKKworCS8qIENDRENGRyByZWdpc3RlcjoKKwkgKiBzZXQgQ0NEIE5vdCB0byBzd2FwIGlucHV0IHNpbmNlIGlucHV0IGlzIFJBVyBkYXRhCisJICogc2V0IEZJRCBkZXRlY3Rpb24gZnVuY3Rpb24gdG8gTGF0Y2ggYXQgVi1TeW5jCisJICogc2V0IFdFTkxPRyAtIGNjZGMgdmFsaWQgYXJlYSB0byBBTkQKKwkgKiBzZXQgVFJHU0VMIHRvIFdFTkJJVAorCSAqIHNldCBFWFRSRyB0byBESVNBQkxFCisJICogZGlzYWJsZSBsYXRjaGluZyBmdW5jdGlvbiBvbiBWU1lOQyAtIHNoYWRvd2VkIHJlZ2lzdGVycworCSAqLworCXJlZ3coQ0NEQ19ZQ0lOU1dQX1JBVyB8IENDRENfQ0NEQ0ZHX0ZJRE1EX0xBVENIX1ZTWU5DIHwKKwkgICAgIENDRENfQ0NEQ0ZHX1dFTkxPR19BTkQgfCBDQ0RDX0NDRENGR19UUkdTRUxfV0VOIHwKKwkgICAgIENDRENfQ0NEQ0ZHX0VYVFJHX0RJU0FCTEUgfCBDQ0RDX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUsIENDRENGRyk7CisKKwkvKgorCSAqIFNldCBWREhEIGRpcmVjdGlvbiB0byBpbnB1dCwgIGlucHV0IHR5cGUgdG8gcmF3IGlucHV0CisJICogbm9ybWFsIGRhdGEgcG9sYXJpdHksIGRvIG5vdCB1c2UgZXh0ZXJuYWwgV0VOCisJICovCisJdmFsID0gKENDRENfVkRIRE9VVF9JTlBVVCB8IENDRENfUkFXX0lQX01PREUgfCBDQ0RDX0RBVEFQT0xfTk9STUFMIHwKKwkJQ0NEQ19FWFdFTl9ESVNBQkxFKTsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5IChNT0RFU0VULlZEUE9MKSwgaG9yaXpvbnRhbAorCSAqIHN5bmMgcG9sYXJpdHkgKE1PREVTRVQuSERQT0wpLCBmaWVsZCBpZCBwb2xhcml0eSAoTU9ERVNFVC5GTERQT0wpLAorCSAqIGZyYW1lIGZvcm1hdChwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2UpLCAmIHBpeGVsIGZvcm1hdCAoSW5wdXQgbW9kZSkKKwkgKi8KKwl2YWwgfD0gKCgocGFyYW1zLT52ZF9wb2wgJiBDQ0RDX1ZEX1BPTF9NQVNLKSA8PCBDQ0RDX1ZEX1BPTF9TSElGVCkgfAorCQkoKHBhcmFtcy0+aGRfcG9sICYgQ0NEQ19IRF9QT0xfTUFTSykgPDwgQ0NEQ19IRF9QT0xfU0hJRlQpIHwKKwkJKChwYXJhbXMtPmZpZF9wb2wgJiBDQ0RDX0ZJRF9QT0xfTUFTSykgPDwgQ0NEQ19GSURfUE9MX1NISUZUKSB8CisJCSgocGFyYW1zLT5mcm1fZm10ICYgQ0NEQ19GUk1fRk1UX01BU0spIDw8IENDRENfRlJNX0ZNVF9TSElGVCkgfAorCQkoKHBhcmFtcy0+cGl4X2ZtdCAmIENDRENfUElYX0ZNVF9NQVNLKSA8PCBDQ0RDX1BJWF9GTVRfU0hJRlQpKTsKKworCS8qIHNldCBwYWNrIGZvciBhbGF3IGNvbXByZXNzaW9uICovCisJaWYgKChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykgfHwKKwkgICAgIGNvbmZpZ19wYXJhbXMtPmFsYXcuZW5hYmxlKQorCQl2YWwgfD0gQ0NEQ19EQVRBX1BBQ0tfRU5BQkxFOworCisJLyogQ29uZmlndXJlIGZvciBMUEYgKi8KKwlpZiAoY29uZmlnX3BhcmFtcy0+bHBmX2VuYWJsZSkKKwkJdmFsIHw9IChjb25maWdfcGFyYW1zLT5scGZfZW5hYmxlICYgQ0NEQ19MUEZfTUFTSykgPDwKKwkJCUNDRENfTFBGX1NISUZUOworCisJLyogQ29uZmlndXJlIHRoZSBkYXRhIHNoaWZ0ICovCisJdmFsIHw9IChjb25maWdfcGFyYW1zLT5kYXRhc2Z0ICYgQ0NEQ19EQVRBU0ZUX01BU0spIDw8CisJCUNDRENfREFUQVNGVF9TSElGVDsKKwlyZWd3KHZhbCAsIE1PREVTRVQpOworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gTU9ERVNFVC4uLlxuIiwgdmFsKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgTWVkaWFuIEZpbHRlciB0aHJlc2hvbGQgKi8KKwlyZWd3KChjb25maWdfcGFyYW1zLT5tZWRfZmlsdF90aHJlcykgJiBDQ0RDX01FRF9GSUxUX1RIUkVTSCwgTUVERklMVCk7CisKKwkvKiBDb25maWd1cmUgR0FNTUFXRCByZWdpc3Rlci4gZGVmYXVyIDExLTIsIGFuZCBNb3NhaWMgY2ZhIHBhdHRlcm4gKi8KKwl2YWwgPSBDQ0RDX0dBTU1BX0JJVFNfMTFfMiA8PCBDQ0RDX0dBTU1BV0RfSU5QVVRfU0hJRlQgfAorCQlDQ0RDX0NGQV9NT1NBSUM7CisKKwkvKiBFbmFibGUgYW5kIGNvbmZpZ3VyZSBhTGF3IHJlZ2lzdGVyIGlmIG5lZWRlZCAqLworCWlmIChjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgeworCQl2YWwgfD0gKENDRENfQUxBV19FTkFCTEUgfAorCQkJKChjb25maWdfcGFyYW1zLT5hbGF3LmdhbWFfd2QgJgorCQkJQ0NEQ19BTEFXX0dBTUFfV0RfTUFTSykgPDwKKwkJCUNDRENfR0FNTUFXRF9JTlBVVF9TSElGVCkpOworCX0KKworCS8qIENvbmZpZ3VyZSBNZWRpYW4gZmlsdGVyMSAmIGZpbHRlcjIgKi8KKwl2YWwgfD0gKChjb25maWdfcGFyYW1zLT5tZmlsdDEgPDwgQ0NEQ19NRklMVDFfU0hJRlQpIHwKKwkJKGNvbmZpZ19wYXJhbXMtPm1maWx0MiA8PCBDQ0RDX01GSUxUMl9TSElGVCkpOworCisJcmVndyh2YWwsIEdBTU1BV0QpOworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gR0FNTUFXRC4uLlxuIiwgdmFsKTsKKworCS8qIGNvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwljY2RjX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMSk7CisKKwkvKiBPcHRpY2FsIENsYW1wIEF2ZXJhZ2luZyAqLworCWNjZGNfY29uZmlnX2JsYWNrX2NsYW1wKCZjb25maWdfcGFyYW1zLT5ibGtfY2xhbXApOworCisJLyogQmxhY2sgbGV2ZWwgY29tcGVuc2F0aW9uICovCisJY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2UoJmNvbmZpZ19wYXJhbXMtPmJsa19jb21wKTsKKworCS8qIFZlcnRpY2FsIERlZmVjdCBDb3JyZWN0aW9uIGlmIG5lZWRlZCAqLworCWlmIChjY2RjX2NvbmZpZ192ZGZjKCZjb25maWdfcGFyYW1zLT52ZXJ0aWNhbF9kZnQpIDwgMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBjb2xvciBzcGFjZSBjb252ZXJzaW9uICovCisJY2NkY19jb25maWdfY3NjKCZjb25maWdfcGFyYW1zLT5jc2MpOworCisJLyogY29sb3IgcGF0dGVybiAqLworCWNjZGNfY29uZmlnX2NvbG9yX3BhdHRlcm5zKCZjb25maWdfcGFyYW1zLT5jb2xfcGF0X2ZpZWxkMCwKKwkJCQkgICAmY29uZmlnX3BhcmFtcy0+Y29sX3BhdF9maWVsZDEpOworCisJLyogQ29uZmlndXJlIHRoZSBHYWluICAmIG9mZnNldCBjb250cm9sICovCisJY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQoKTsKKworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKKworCS8qIENvbmZpZ3VyZSBEQVRBT0ZTVCAgcmVnaXN0ZXIgKi8KKwl2YWwgPSAoY29uZmlnX3BhcmFtcy0+ZGF0YV9vZmZzZXQuaG9yel9vZmZzZXQgJiBDQ0RDX0RBVEFPRlNUX01BU0spIDw8CisJCUNDRENfREFUQU9GU1RfSF9TSElGVDsKKwl2YWwgfD0gKGNvbmZpZ19wYXJhbXMtPmRhdGFfb2Zmc2V0LnZlcnRfb2Zmc2V0ICYgQ0NEQ19EQVRBT0ZTVF9NQVNLKSA8PAorCQlDQ0RDX0RBVEFPRlNUX1ZfU0hJRlQ7CisJcmVndyh2YWwsIERBVEFPRlNUKTsKKworCS8qIGNvbmZpZ3VyaW5nIEhTSVpFIHJlZ2lzdGVyICovCisJdmFsID0gKHBhcmFtcy0+aG9yel9mbGlwX2VuYWJsZSAmIENDRENfSFNJWkVfRkxJUF9NQVNLKSA8PAorCQlDQ0RDX0hTSVpFX0ZMSVBfU0hJRlQ7CisKKwkvKiBJZiBwYWNrIDggaXMgZW5hYmxlIHRoZW4gMSBwaXhlbCB3aWxsIHRha2UgMSBieXRlICovCisJaWYgKChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykgfHwKKwkgICAgIGNvbmZpZ19wYXJhbXMtPmFsYXcuZW5hYmxlKSB7CisJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCkgKyAzMSkgPj4gNSkgJgorCQkJQ0NEQ19IU0laRV9WQUxfTUFTSzsKKworCQkvKiBhZGp1c3QgdG8gbXVsdGlwbGUgb2YgMzIgKi8KKwkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKKwkJICAgICAgICgoKHBhcmFtcy0+d2luLndpZHRoKSArIDMxKSA+PiA1KSAmCisJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLKTsKKwl9IGVsc2UgeworCQkvKiBlbHNlIG9uZSBwaXhlbCB3aWxsIHRha2UgMiBieXRlICovCisJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpID4+IDUpICYKKwkJCUNDRENfSFNJWkVfVkFMX01BU0s7CisKKwkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBIU0laRS4uLlxuIiwKKwkJICAgICAgICgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgPj4gNSkgJgorCQkJQ0NEQ19IU0laRV9WQUxfTUFTSyk7CisJfQorCXJlZ3codmFsLCBIU0laRSk7CisKKwkvKiBDb25maWd1cmUgU0RPRlNUIHJlZ2lzdGVyICovCisJaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbmFibGUpIHsKKwkJCS8qIEZvciBpbnRlcmxhY2UgaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KENDRENfU0RPRlNUX0lOVEVSTEFDRV9JTlZFUlNFLCBTRE9GU1QpOworCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJCUNDRENfU0RPRlNUX0lOVEVSTEFDRV9JTlZFUlNFKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZvciBpbnRlcmxhY2Ugbm9uIGludmVyc2UgbW9kZSAqLworCQkJcmVndyhDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfTk9STUFMLCBTRE9GU1QpOworCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJCUNDRENfU0RPRlNUX0lOVEVSTEFDRV9OT1JNQUwpOworCQl9CisJfSBlbHNlIGlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKKwkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuYWJsZSkgeworCQkJLyogRm9yIHByb2dlc3NpdmUgaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KENDRENfU0RPRlNUX1BST0dSRVNTSVZFX0lOVkVSU0UsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQkJQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfSU5WRVJTRSk7CisJCX0gZWxzZSB7CisJCQkvKiBGb3IgcHJvZ2Vzc2l2ZSBub24gaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KENDRENfU0RPRlNUX1BST0dSRVNTSVZFX05PUk1BTCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCQlDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9OT1JNQUwpOworCQl9CisJfQorCWRldl9kYmcoZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19jb25maWd1cmUodm9pZCkKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jb25maWdfcmF3KCk7CisJZWxzZQorCQljY2RjX2NvbmZpZ195Y2JjcigpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjZGNfc2V0X2J1ZnR5cGUoZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGUpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJZWxzZQorCQljY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCXJldHVybiAwOworfQorc3RhdGljIGVudW0gY2NkY19idWZ0eXBlIGNjZGNfZ2V0X2J1ZnR5cGUodm9pZCkKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlOworCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZTsKK30KKworc3RhdGljIGludCBjY2RjX2VudW1fcGl4KHUzMiAqcGl4LCBpbnQgaSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmIChpIDwgQVJSQVlfU0laRShjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0cykpIHsKKwkJCSpwaXggPSBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tpXTsKKwkJCXJldCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2NkY19yYXdfeXV2X3BpeF9mb3JtYXRzKSkgeworCQkJKnBpeCA9IGNjZGNfcmF3X3l1dl9waXhfZm9ybWF0c1tpXTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjY2RjX3NldF9waXhlbF9mb3JtYXQodTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9CisJCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3OworCisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQljY2RjX2h3X3BhcmFtc19yYXcucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQorCQkJYWxhdy0+ZW5hYmxlID0gMTsKKwkJZWxzZSBpZiAocGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9TQkdHUjE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKKwkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOworCQllbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1VZVlkpCisJCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorc3RhdGljIHUzMiBjY2RjX2dldF9waXhlbF9mb3JtYXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9CisJCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3OworCXUzMiBwaXhmbXQ7CisKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlpZiAoYWxhdy0+ZW5hYmxlKQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKKwkJZWxzZQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CisJZWxzZSB7CisJCWlmIChjY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJZWxzZQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJfQorCXJldHVybiBwaXhmbXQ7Cit9CitzdGF0aWMgaW50IGNjZGNfc2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19od19wYXJhbXNfcmF3LndpbiA9ICp3aW47CisJZWxzZQorCQljY2RjX2h3X3BhcmFtc195Y2Jjci53aW4gPSAqd2luOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjY2RjX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCSp3aW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luOworCWVsc2UKKwkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjY2RjX2dldF9saW5lX2xlbmd0aCh2b2lkKQoreworCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KKwkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmICgoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHx8CisJCSAgICAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpKQorCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aDsKKwkJZWxzZQorCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aCAqIDI7CisJfSBlbHNlCisJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbi53aWR0aCAqIDI7CisJcmV0dXJuIEFMSUdOKGxlbiwgMzIpOworfQorCitzdGF0aWMgaW50IGNjZGNfc2V0X2ZyYW1lX2Zvcm1hdChlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQgPSBmcm1fZm10OworCWVsc2UKKwkJY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdDsKKwllbHNlCisJCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10OworfQorCitzdGF0aWMgaW50IGNjZGNfZ2V0ZmlkKHZvaWQpCit7CisJcmV0dXJuICAocmVncihNT0RFU0VUKSA+PiAxNSkgJiAxOworfQorCisvKiBtaXNjIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjY2RjX3NldGZiYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmVndygoYWRkciA+PiAyMSkgJiAweDAwN2YsIFNUQURSSCk7CisJcmVndygoYWRkciA+PiA1KSAmIDB4MGZmZmYsIFNUQURSTCk7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCit7CisJY2NkY19pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCisJc3dpdGNoIChwYXJhbXMtPmlmX3R5cGUpIHsKKwljYXNlIFZQRkVfQlQ2NTY6CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfODoKKwkJY2NkY19od19wYXJhbXNfeWNiY3IudmRfcG9sID0gcGFyYW1zLT52ZHBvbDsKKwkJY2NkY19od19wYXJhbXNfeWNiY3IuaGRfcG9sID0gcGFyYW1zLT5oZHBvbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVE9ETyBhZGQgc3VwcG9ydCBmb3IgcmF3IGJheWVyIGhlcmUgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNjZGNfaHdfZGV2aWNlIGNjZGNfaHdfZGV2ID0geworCS5uYW1lID0gIkRNMzU1IENDREMiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5od19vcHMgPSB7CisJCS5vcGVuID0gY2NkY19vcGVuLAorCQkuY2xvc2UgPSBjY2RjX2Nsb3NlLAorCQkuc2V0X2NjZGNfYmFzZSA9IGNjZGNfc2V0X2NjZGNfYmFzZSwKKwkJLmVuYWJsZSA9IGNjZGNfZW5hYmxlLAorCQkuZW5hYmxlX291dF90b19zZHJhbSA9IGNjZGNfZW5hYmxlX291dHB1dF90b19zZHJhbSwKKwkJLnNldF9od19pZl9wYXJhbXMgPSBjY2RjX3NldF9od19pZl9wYXJhbXMsCisJCS5zZXRfcGFyYW1zID0gY2NkY19zZXRfcGFyYW1zLAorCQkuY29uZmlndXJlID0gY2NkY19jb25maWd1cmUsCisJCS5zZXRfYnVmdHlwZSA9IGNjZGNfc2V0X2J1ZnR5cGUsCisJCS5nZXRfYnVmdHlwZSA9IGNjZGNfZ2V0X2J1ZnR5cGUsCisJCS5lbnVtX3BpeCA9IGNjZGNfZW51bV9waXgsCisJCS5zZXRfcGl4ZWxfZm9ybWF0ID0gY2NkY19zZXRfcGl4ZWxfZm9ybWF0LAorCQkuZ2V0X3BpeGVsX2Zvcm1hdCA9IGNjZGNfZ2V0X3BpeGVsX2Zvcm1hdCwKKwkJLnNldF9mcmFtZV9mb3JtYXQgPSBjY2RjX3NldF9mcmFtZV9mb3JtYXQsCisJCS5nZXRfZnJhbWVfZm9ybWF0ID0gY2NkY19nZXRfZnJhbWVfZm9ybWF0LAorCQkuc2V0X2ltYWdlX3dpbmRvdyA9IGNjZGNfc2V0X2ltYWdlX3dpbmRvdywKKwkJLmdldF9pbWFnZV93aW5kb3cgPSBjY2RjX2dldF9pbWFnZV93aW5kb3csCisJCS5nZXRfbGluZV9sZW5ndGggPSBjY2RjX2dldF9saW5lX2xlbmd0aCwKKwkJLnNldGZiYWRkciA9IGNjZGNfc2V0ZmJhZGRyLAorCQkuZ2V0ZmlkID0gY2NkY19nZXRmaWQsCisJfSwKK307CisKK3N0YXRpYyBpbnQgZG0zNTVfY2NkY19pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICJkbTM1NV9jY2RjX2luaXRcbiIpOworCWlmICh2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2RldikgPCAwKQorCQlyZXR1cm4gLTE7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsCisJCWNjZGNfaHdfZGV2Lm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbTM1NV9jY2RjX2V4aXQodm9pZCkKK3sKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKK30KKworbW9kdWxlX2luaXQoZG0zNTVfY2NkY19pbml0KTsKK21vZHVsZV9leGl0KGRtMzU1X2NjZGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkY19yZWdzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkY19yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkMmVmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjX3JlZ3MuaApAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfRE0zNTVfQ0NEQ19SRUdTX0gKKyNkZWZpbmUgX0RNMzU1X0NDRENfUkVHU19ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyogUmVnaXN0ZXIgT0ZGU0VUIERlZmluaXRpb25zCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNZTkNFTgkJCQkweDAwCisjZGVmaW5lIE1PREVTRVQJCQkJMHgwNAorI2RlZmluZSBIRFdJRFRICQkJCTB4MDgKKyNkZWZpbmUgVkRXSURUSAkJCQkweDBjCisjZGVmaW5lIFBQTE4JCQkJMHgxMAorI2RlZmluZSBMUEZSCQkJCTB4MTQKKyNkZWZpbmUgU1BICQkJCTB4MTgKKyNkZWZpbmUgTlBICQkJCTB4MWMKKyNkZWZpbmUgU0xWMAkJCQkweDIwCisjZGVmaW5lIFNMVjEJCQkJMHgyNAorI2RlZmluZSBOTFYJCQkJMHgyOAorI2RlZmluZSBDVUxICQkJCTB4MmMKKyNkZWZpbmUgQ1VMVgkJCQkweDMwCisjZGVmaW5lIEhTSVpFCQkJCTB4MzQKKyNkZWZpbmUgU0RPRlNUCQkJCTB4MzgKKyNkZWZpbmUgU1RBRFJICQkJCTB4M2MKKyNkZWZpbmUgU1RBRFJMCQkJCTB4NDAKKyNkZWZpbmUgQ0xBTVAJCQkJMHg0NAorI2RlZmluZSBEQ1NVQgkJCQkweDQ4CisjZGVmaW5lIENPTFBUTgkJCQkweDRjCisjZGVmaW5lIEJMS0NNUDAJCQkJMHg1MAorI2RlZmluZSBCTEtDTVAxCQkJCTB4NTQKKyNkZWZpbmUgTUVERklMVAkJCQkweDU4CisjZGVmaW5lIFJZRUdBSU4JCQkJMHg1YworI2RlZmluZSBHUkNZR0FJTgkJCTB4NjAKKyNkZWZpbmUgR0JHR0FJTgkJCQkweDY0CisjZGVmaW5lIEJNR0dBSU4JCQkJMHg2OAorI2RlZmluZSBPRkZTRVQJCQkJMHg2YworI2RlZmluZSBPVVRDTElQCQkJCTB4NzAKKyNkZWZpbmUgVkRJTlQwCQkJCTB4NzQKKyNkZWZpbmUgVkRJTlQxCQkJCTB4NzgKKyNkZWZpbmUgUlNWMAkJCQkweDdjCisjZGVmaW5lIEdBTU1BV0QJCQkJMHg4MAorI2RlZmluZSBSRUM2NTZJRgkJCTB4ODQKKyNkZWZpbmUgQ0NEQ0ZHCQkJCTB4ODgKKyNkZWZpbmUgRk1UQ0ZHCQkJCTB4OGMKKyNkZWZpbmUgRk1UUExFTgkJCQkweDkwCisjZGVmaW5lIEZNVFNQSAkJCQkweDk0CisjZGVmaW5lIEZNVExOSAkJCQkweDk4CisjZGVmaW5lIEZNVFNMVgkJCQkweDljCisjZGVmaW5lIEZNVExOVgkJCQkweGEwCisjZGVmaW5lIEZNVFJMRU4JCQkJMHhhNAorI2RlZmluZSBGTVRIQ05UCQkJCTB4YTgKKyNkZWZpbmUgRk1UX0FERFJfUFRSX0IJCQkweGFjCisjZGVmaW5lIEZNVF9BRERSX1BUUihpKQkJCShGTVRfQUREUl9QVFJfQiArIChpICogNCkpCisjZGVmaW5lIEZNVFBHTV9WRjAJCQkweGNjCisjZGVmaW5lIEZNVFBHTV9WRjEJCQkweGQwCisjZGVmaW5lIEZNVFBHTV9BUDAJCQkweGQ0CisjZGVmaW5lIEZNVFBHTV9BUDEJCQkweGQ4CisjZGVmaW5lIEZNVFBHTV9BUDIJCQkweGRjCisjZGVmaW5lIEZNVFBHTV9BUDMgICAgICAgICAgICAgICAgICAgICAgMHhlMAorI2RlZmluZSBGTVRQR01fQVA0ICAgICAgICAgICAgICAgICAgICAgIDB4ZTQKKyNkZWZpbmUgRk1UUEdNX0FQNSAgICAgICAgICAgICAgICAgICAgICAweGU4CisjZGVmaW5lIEZNVFBHTV9BUDYgICAgICAgICAgICAgICAgICAgICAgMHhlYworI2RlZmluZSBGTVRQR01fQVA3ICAgICAgICAgICAgICAgICAgICAgIDB4ZjAKKyNkZWZpbmUgTFNDQ0ZHMSAgICAgICAgICAgICAgICAgICAgICAgICAweGY0CisjZGVmaW5lIExTQ0NGRzIgICAgICAgICAgICAgICAgICAgICAgICAgMHhmOAorI2RlZmluZSBMU0NIMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmMKKyNkZWZpbmUgTFNDVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMAorI2RlZmluZSBMU0NLSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTA0CisjZGVmaW5lIExTQ0tWICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDgKKyNkZWZpbmUgTFNDTUVNQ1RMICAgICAgICAgICAgICAgICAgICAgICAweDEwYworI2RlZmluZSBMU0NNRU1EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwCisjZGVmaW5lIExTQ01FTVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTQKKyNkZWZpbmUgREZDQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDExOAorI2RlZmluZSBERkNWU0FUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTFjCisjZGVmaW5lIERGQ01FTUNUTCAgICAgICAgICAgICAgICAgICAgICAgMHgxMjAKKyNkZWZpbmUgREZDTUVNMCAgICAgICAgICAgICAgICAgICAgICAgICAweDEyNAorI2RlZmluZSBERkNNRU0xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTI4CisjZGVmaW5lIERGQ01FTTIgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMmMKKyNkZWZpbmUgREZDTUVNMyAgICAgICAgICAgICAgICAgICAgICAgICAweDEzMAorI2RlZmluZSBERkNNRU00ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTM0CisjZGVmaW5lIENTQ0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMzgKKyNkZWZpbmUgQ1NDTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEzYworI2RlZmluZSBDU0NNMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwCisjZGVmaW5lIENTQ00yICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDQKKyNkZWZpbmUgQ1NDTTMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0OAorI2RlZmluZSBDU0NNNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTRjCisjZGVmaW5lIENTQ001ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTAKKyNkZWZpbmUgQ1NDTTYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1NAorI2RlZmluZSBDU0NNNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTU4CisjZGVmaW5lIERBVEFPRlNUCQkJMHgxNWMKKyNkZWZpbmUgQ0NEQ19SRUdfTEFTVAkJCURBVEFPRlNUCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoJRGVmaW5lIGZvciB2YXJpb3VzIHJlZ2lzdGVyIGJpdCBtYXNrIGFuZCBzaGlmdHMgZm9yIENDREMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDQ0RDX1JBV19JUF9NT0RFCQkJMAorI2RlZmluZSBDQ0RDX1ZESERPVVRfSU5QVVQJCQkwCisjZGVmaW5lIENDRENfWUNJTlNXUF9SQVcJCQkoMCA8PCA0KQorI2RlZmluZSBDQ0RDX0VYV0VOX0RJU0FCTEUgCQkJMAorI2RlZmluZSBDQ0RDX0RBVEFQT0xfTk9STUFMCQkJMAorI2RlZmluZSBDQ0RDX0NDRENGR19GSURNRF9MQVRDSF9WU1lOQwkJMAorI2RlZmluZSBDQ0RDX0NDRENGR19GSURNRF9OT19MQVRDSF9WU1lOQwkoMSA8PCA2KQorI2RlZmluZSBDQ0RDX0NDRENGR19XRU5MT0dfQU5ECQkJMAorI2RlZmluZSBDQ0RDX0NDRENGR19UUkdTRUxfV0VOCQkJMAorI2RlZmluZSBDQ0RDX0NDRENGR19FWFRSR19ESVNBQkxFCQkwCisjZGVmaW5lIENDRENfQ0ZBX01PU0FJQwkJCQkwCisjZGVmaW5lIENDRENfWThQT1NfU0hJRlQJCQkxMQorCisjZGVmaW5lIENDRENfVkRDX0RGQ1ZTQVRfTUFTSwkJCTB4M2ZmZgorI2RlZmluZSBDQ0RDX0RBVEFPRlNUX01BU0sJCQkweDBmZgorI2RlZmluZSBDQ0RDX0RBVEFPRlNUX0hfU0hJRlQJCQkwCisjZGVmaW5lIENDRENfREFUQU9GU1RfVl9TSElGVAkJCTgKKyNkZWZpbmUgQ0NEQ19HQU1NQVdEX0NGQV9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX0dBTU1BV0RfQ0ZBX1NISUZUCQkJNQorI2RlZmluZSBDQ0RDX0dBTU1BV0RfSU5QVVRfU0hJRlQJCTIKKyNkZWZpbmUgQ0NEQ19GSURfUE9MX01BU0sJCQkxCisjZGVmaW5lIENDRENfRklEX1BPTF9TSElGVAkJCTQKKyNkZWZpbmUgQ0NEQ19IRF9QT0xfTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19IRF9QT0xfU0hJRlQJCQkzCisjZGVmaW5lIENDRENfVkRfUE9MX01BU0sJCQkxCisjZGVmaW5lIENDRENfVkRfUE9MX1NISUZUCQkJMgorI2RlZmluZSBDQ0RDX1ZEX1BPTF9ORUdBVElWRQkJCSgxIDw8IDIpCisjZGVmaW5lIENDRENfRlJNX0ZNVF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX0ZSTV9GTVRfU0hJRlQJCQk3CisjZGVmaW5lIENDRENfREFUQV9TWl9NQVNLCQkJNworI2RlZmluZSBDQ0RDX0RBVEFfU1pfU0hJRlQJCQk4CisjZGVmaW5lIENDRENfVkRIRE9VVF9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX1ZESERPVVRfU0hJRlQJCQkwCisjZGVmaW5lIENDRENfRVhXRU5fTUFTSwkJCQkxCisjZGVmaW5lIENDRENfRVhXRU5fU0hJRlQJCQk1CisjZGVmaW5lIENDRENfSU5QVVRfTU9ERV9NQVNLCQkJMworI2RlZmluZSBDQ0RDX0lOUFVUX01PREVfU0hJRlQJCQkxMgorI2RlZmluZSBDQ0RDX1BJWF9GTVRfTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19QSVhfRk1UX1NISUZUCQkJMTIKKyNkZWZpbmUgQ0NEQ19EQVRBUE9MX01BU0sJCQkxCisjZGVmaW5lIENDRENfREFUQVBPTF9TSElGVAkJCTYKKyNkZWZpbmUgQ0NEQ19XRU5fRU5BQkxFCQkJCSgxIDw8IDEpCisjZGVmaW5lIENDRENfVkRIREVOX0VOQUJMRQkJCSgxIDw8IDE2KQorI2RlZmluZSBDQ0RDX0xQRl9FTkFCTEUJCQkJKDEgPDwgMTQpCisjZGVmaW5lIENDRENfQUxBV19FTkFCTEUJCQkxCisjZGVmaW5lIENDRENfQUxBV19HQU1BX1dEX01BU0sJCQk3CisjZGVmaW5lIENDRENfUkVDNjU2SUZfQlQ2NTZfRU4JCQkzCisKKyNkZWZpbmUgQ0NEQ19GTVRDRkdfRk1UTU9ERV9NQVNLIAkJMworI2RlZmluZSBDQ0RDX0ZNVENGR19GTVRNT0RFX1NISUZUCQkxCisjZGVmaW5lIENDRENfRk1UQ0ZHX0xOVU1fTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19GTVRDRkdfTE5VTV9TSElGVAkJCTQKKyNkZWZpbmUgQ0NEQ19GTVRDRkdfQUREUklOQ19NQVNLCQk3CisjZGVmaW5lIENDRENfRk1UQ0ZHX0FERFJJTkNfU0hJRlQJCTgKKworI2RlZmluZSBDQ0RDX0NDRENGR19GSURNRF9TSElGVAkJCTYKKyNkZWZpbmUJQ0NEQ19DQ0RDRkdfV0VOTE9HX1NISUZUCQk4CisjZGVmaW5lIENDRENfQ0NEQ0ZHX1RSR1NFTF9TSElGVAkJOQorI2RlZmluZSBDQ0RDX0NDRENGR19FWFRSR19TSElGVAkJCTEwCisjZGVmaW5lIENDRENfQ0NEQ0ZHX01TQklOVklfU0hJRlQJCTEzCisKKyNkZWZpbmUgQ0NEQ19IU0laRV9GTElQX1NISUZUCQkJMTIKKyNkZWZpbmUgQ0NEQ19IU0laRV9GTElQX01BU0sJCQkxCisjZGVmaW5lIENDRENfSFNJWkVfVkFMX01BU0sJCQkweEZGRgorI2RlZmluZSBDQ0RDX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRAkJMHgyNDkKKyNkZWZpbmUgQ0NEQ19TRE9GU1RfSU5URVJMQUNFX0lOVkVSU0UJCTB4NEI2RAorI2RlZmluZSBDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfTk9STUFMCQkweDBCNkQKKyNkZWZpbmUgQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfSU5WRVJTRQkJMHg0MDAwCisjZGVmaW5lIENDRENfU0RPRlNUX1BST0dSRVNTSVZFX05PUk1BTAkJMAorI2RlZmluZSBDQ0RDX1NUQVJUX1BYX0hPUl9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIENDRENfTlVNX1BYX0hPUl9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIENDRENfU1RBUlRfVkVSX09ORV9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIENDRENfU1RBUlRfVkVSX1RXT19NQVNLCQkJMHg3RkZGCisjZGVmaW5lIENDRENfTlVNX0xJTkVTX1ZFUgkJCTB4N0ZGRgorCisjZGVmaW5lIENDRENfQkxLX0NMQU1QX0VOQUJMRQkJCSgxIDw8IDE1KQorI2RlZmluZSBDQ0RDX0JMS19TR0FJTl9NQVNLCQkJMHgxRgorI2RlZmluZSBDQ0RDX0JMS19TVF9QWExfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBDQ0RDX0JMS19TQU1QTEVfTE5fTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19CTEtfU0FNUExFX0xOX1NISUZUCQkxMworCisjZGVmaW5lIENDRENfTlVNX0xJTkVfQ0FMQ19NQVNLCQkJMworI2RlZmluZSBDQ0RDX05VTV9MSU5FX0NBTENfU0hJRlQJCTE0CisKKyNkZWZpbmUgQ0NEQ19CTEtfRENfU1VCX01BU0sJCQkweDNGRkYKKyNkZWZpbmUgQ0NEQ19CTEtfQ09NUF9NQVNLCQkJMHhGRgorI2RlZmluZSBDQ0RDX0JMS19DT01QX0dCX0NPTVBfU0hJRlQJCTgKKyNkZWZpbmUgQ0NEQ19CTEtfQ09NUF9HUl9DT01QX1NISUZUCQkwCisjZGVmaW5lIENDRENfQkxLX0NPTVBfUl9DT01QX1NISUZUCQk4CisjZGVmaW5lIENDRENfTEFUQ0hfT05fVlNZTkNfRElTQUJMRQkJKDEgPDwgMTUpCisjZGVmaW5lIENDRENfTEFUQ0hfT05fVlNZTkNfRU5BQkxFCQkoMCA8PCAxNSkKKyNkZWZpbmUgQ0NEQ19GUENfRU5BQkxFCQkJCSgxIDw8IDE1KQorI2RlZmluZSBDQ0RDX0ZQQ19GUENfTlVNX01BU0sgCQkJMHg3RkZGCisjZGVmaW5lIENDRENfREFUQV9QQUNLX0VOQUJMRQkJCSgxIDw8IDExKQorI2RlZmluZSBDQ0RDX0ZNVF9IT1JaX0ZNVExOSF9NQVNLCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRfSE9SWl9GTVRTUEhfTUFTSwkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UX0hPUlpfRk1UU1BIX1NISUZUCQkxNgorI2RlZmluZSBDQ0RDX0ZNVF9WRVJUX0ZNVExOVl9NQVNLCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRfVkVSVF9GTVRTTFZfTUFTSwkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UX1ZFUlRfRk1UU0xWX1NISUZUCQkxNgorI2RlZmluZSBDQ0RDX1ZQX09VVF9WRVJUX05VTV9NQVNLCQkweDNGRkYKKyNkZWZpbmUgQ0NEQ19WUF9PVVRfVkVSVF9OVU1fU0hJRlQJCTE3CisjZGVmaW5lIENDRENfVlBfT1VUX0hPUlpfTlVNX01BU0sJCTB4MUZGRgorI2RlZmluZSBDQ0RDX1ZQX09VVF9IT1JaX05VTV9TSElGVAkJNAorI2RlZmluZSBDQ0RDX1ZQX09VVF9IT1JaX1NUX01BU0sJCTB4RgorCisjZGVmaW5lIENDRENfQ1NDX0NPRUZfSU5URUdfTUFTSwkJNworI2RlZmluZSBDQ0RDX0NTQ19DT0VGX0RFQ0lNQUxfTUFTSwkJMHgxZgorI2RlZmluZSBDQ0RDX0NTQ19DT0VGX0lOVEVHX1NISUZUCQk1CisjZGVmaW5lIENDRENfQ1NDTV9NU0JfU0hJRlQJCQk4CisjZGVmaW5lIENDRENfQ1NDX0VOQUJMRQkJCQkxCisjZGVmaW5lIENDRENfQ1NDX0RFQ19NQVgJCQkzMgorCisjZGVmaW5lIENDRENfTUZJTFQxX1NISUZUCQkJMTAKKyNkZWZpbmUgQ0NEQ19NRklMVDJfU0hJRlQJCQk4CisjZGVmaW5lIENDRENfTUVEX0ZJTFRfVEhSRVNICQkJMHgzRkZGCisjZGVmaW5lIENDRENfTFBGX01BU0sJCQkJMQorI2RlZmluZSBDQ0RDX0xQRl9TSElGVAkJCQkxNAorI2RlZmluZSBDQ0RDX09GRlNFVF9NQVNLCQkJMHgzRkYKKyNkZWZpbmUgQ0NEQ19EQVRBU0ZUX01BU0sJCQk3CisjZGVmaW5lIENDRENfREFUQVNGVF9TSElGVAkJCTgKKworI2RlZmluZSBDQ0RDX0RGX0VOQUJMRQkJCQkxCisKKyNkZWZpbmUgQ0NEQ19GTVRQTEVOX1AwX01BU0sJCQkweEYKKyNkZWZpbmUgQ0NEQ19GTVRQTEVOX1AxX01BU0sJCQkweEYKKyNkZWZpbmUgQ0NEQ19GTVRQTEVOX1AyX01BU0sJCQk3CisjZGVmaW5lIENDRENfRk1UUExFTl9QM19NQVNLCQkJNworI2RlZmluZSBDQ0RDX0ZNVFBMRU5fUDBfU0hJRlQJCQkwCisjZGVmaW5lIENDRENfRk1UUExFTl9QMV9TSElGVAkJCTQKKyNkZWZpbmUgQ0NEQ19GTVRQTEVOX1AyX1NISUZUCQkJOAorI2RlZmluZSBDQ0RDX0ZNVFBMRU5fUDNfU0hJRlQJCQkxMgorCisjZGVmaW5lIENDRENfRk1UU1BIX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRMTkhfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBDQ0RDX0ZNVFNMVl9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIENDRENfRk1UTE5WX01BU0sJCQkweDdGRkYKKyNkZWZpbmUgQ0NEQ19GTVRSTEVOX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRIQ05UX01BU0sJCQkweDFGRkYKKworI2RlZmluZSBDQ0RDX0FEUF9JTklUX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19BRFBfTElORV9TSElGVAkJCTEzCisjZGVmaW5lIENDRENfQURQX0xJTkVfTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19GTVRQR05fQVBUUl9NQVNLCQkJNworCisjZGVmaW5lIENDRENfREZDQ1RMX0dERkNFTl9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX0RGQ0NUTF9WREZDRU5fTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGQ19ESVNBQkxFCQkoMCA8PCA0KQorI2RlZmluZSBDQ0RDX0RGQ0NUTF9WREZDRU5fU0hJRlQJCTQKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGQ1NMX01BU0sJCQkzCisjZGVmaW5lIENDRENfREZDQ1RMX1ZERkNTTF9TSElGVAkJNQorI2RlZmluZSBDQ0RDX0RGQ0NUTF9WREZDVURBX01BU0sJCTEKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGQ1VEQV9TSElGVAkJNworI2RlZmluZSBDQ0RDX0RGQ0NUTF9WREZMU0ZUX01BU0sJCTMKKyNkZWZpbmUgQ0NEQ19ERkNDVExfVkRGTFNGVF9TSElGVAkJOAorI2RlZmluZSBDQ0RDX0RGQ01FTUNUTF9ERkNNQVJTVF9NQVNLCQkxCisjZGVmaW5lIENDRENfREZDTUVNQ1RMX0RGQ01BUlNUX1NISUZUCQkyCisjZGVmaW5lIENDRENfREZDTUVNQ1RMX0RGQ01XUl9NQVNLCQkxCisjZGVmaW5lIENDRENfREZDTUVNQ1RMX0RGQ01XUl9TSElGVAkJMAorI2RlZmluZSBDQ0RDX0RGQ01FTUNUTF9JTkNfQUREUgkJCSgwIDw8IDIpCisKKyNkZWZpbmUgQ0NEQ19MU0NDRkdfR0ZUU0ZfTUFTSwkJCTcKKyNkZWZpbmUgQ0NEQ19MU0NDRkdfR0ZUU0ZfU0hJRlQJCQkxCisjZGVmaW5lIENDRENfTFNDQ0ZHX0dGVElOVl9NQVNLCQkJMHhmCisjZGVmaW5lIENDRENfTFNDQ0ZHX0dGVElOVl9TSElGVAkJNAorI2RlZmluZSBDQ0RDX0xTQ19HRlRBQkxFX1NFTF9NQVNLCQkzCisjZGVmaW5lIENDRENfTFNDX0dGVEFCTEVfRVBFTF9TSElGVAkJOAorI2RlZmluZSBDQ0RDX0xTQ19HRlRBQkxFX09QRUxfU0hJRlQJCTEwCisjZGVmaW5lIENDRENfTFNDX0dGVEFCTEVfRVBPTF9TSElGVAkJMTIKKyNkZWZpbmUgQ0NEQ19MU0NfR0ZUQUJMRV9PUE9MX1NISUZUCQkxNAorI2RlZmluZSBDQ0RDX0xTQ19HRk1PREVfTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19MU0NfR0ZNT0RFX1NISUZUCQkJNAorI2RlZmluZSBDQ0RDX0xTQ19ESVNBQkxFCQkJMAorI2RlZmluZSBDQ0RDX0xTQ19FTkFCTEUJCQkJMQorI2RlZmluZSBDQ0RDX0xTQ19UQUJMRTFfU0xDCQkJMAorI2RlZmluZSBDQ0RDX0xTQ19UQUJMRTJfU0xDCQkJMQorI2RlZmluZSBDQ0RDX0xTQ19UQUJMRTNfU0xDCQkJMgorI2RlZmluZSBDQ0RDX0xTQ19NRU1BRERSX1JFU0VUCQkJKDEgPDwgMikKKyNkZWZpbmUgQ0NEQ19MU0NfTUVNQUREUl9JTkNSCQkJKDAgPDwgMikKKyNkZWZpbmUgQ0NEQ19MU0NfRlJBQ19NQVNLX1QxCQkJMHhGRgorI2RlZmluZSBDQ0RDX0xTQ19JTlRfTUFTSwkJCTMKKyNkZWZpbmUgQ0NEQ19MU0NfRlJBQ19NQVNLCQkJMHgzRkZGCisjZGVmaW5lIENDRENfTFNDX0NFTlRSRV9NQVNLCQkJMHgzRkZGCisjZGVmaW5lIENDRENfTFNDX0NPRUZfTUFTSwkJCTB4ZmYKKyNkZWZpbmUgQ0NEQ19MU0NfQ09FRkxfU0hJRlQJCQkwCisjZGVmaW5lIENDRENfTFNDX0NPRUZVX1NISUZUCQkJOAorI2RlZmluZSBDQ0RDX0dBSU5fTUFTSwkJCQkweDdGRgorI2RlZmluZSBDQ0RDX1NZTkNFTl9WREhERU5fTUFTSwkJCSgxIDw8IDApCisjZGVmaW5lIENDRENfU1lOQ0VOX1dFTl9NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgQ0NEQ19TWU5DRU5fV0VOX1NISUZUCQkJMQorCisvKiBQb3dlciBvbiBEZWZhdWx0cyBpbiBoYXJkd2FyZSAqLworI2RlZmluZSBNT0RFU0VUX0RFRkFVTFQJCQkJMHgyMDAKKyNkZWZpbmUgQ1VMSF9ERUZBVUxUCQkJCTB4RkZGRgorI2RlZmluZSBDVUxWX0RFRkFVTFQJCQkJMHhGRgorI2RlZmluZSBHQUlOX0RFRkFVTFQJCQkJMjU2CisjZGVmaW5lIE9VVENMSVBfREVGQVVMVAkJCQkweDNGRkYKKyNkZWZpbmUgTFNDQ0ZHMl9ERUZBVUxUCQkJCTB4RQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxOWE5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jCkBAIC0wLDAgKzEsODc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENDREMgaGFyZHdhcmUgbW9kdWxlIGZvciBETTY0NDYKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGZvciBjb25maWd1cmluZyBDQ0QgY29udHJvbGxlciBvZiBETTY0NDYgVlBGRSB0byBjYXB0dXJlCisgKiBSYXcgeXV2IG9yIEJheWVyIFJHQiBkYXRhIGZyb20gYSBkZWNvZGVyLiBDQ0RDIGhhcyBzZXZlcmFsIG1vZHVsZXMKKyAqIHN1Y2ggYXMgRGVmZWN0IFBpeGVsIENvcnJlY3Rpb24sIENvbG9yIFNwYWNlIENvbnZlcnNpb24gZXRjIHRvCisgKiBwcmUtcHJvY2VzcyB0aGUgUmF3IEJheWVyIFJHQiBkYXRhLCBiZWZvcmUgd3JpdGluZyBpdCB0byBTRFJBTS4gVGhpcworICogbW9kdWxlIGFsc28gYWxsb3dzIGFwcGxpY2F0aW9uIHRvIGNvbmZpZ3VyZSBpbmRpdmlkdWFsCisgKiBtb2R1bGUgcGFyYW1ldGVycyB0aHJvdWdoIFZQRkVfQ01EX1NfQ0NEQ19SQVdfUEFSQU1TIElPQ1RMLgorICogVG8gZG8gc28sIGFwcGxpY2F0aW9uIGluY2x1ZGVzIGRtNjQ0eF9jY2RjLmggYW5kIHZwZmVfY2FwdHVyZS5oIGhlYWRlcgorICogZmlsZXMuICBUaGUgc2V0cGFyYW1zKCkgQVBJIGlzIGNhbGxlZCBieSB2cGZlX2NhcHR1cmUgZHJpdmVyCisgKiB0byBjb25maWd1cmUgbW9kdWxlIHBhcmFtZXRlcnMuIFRoaXMgZmlsZSBpcyBuYW1lZCBETTY0NHggc28gdGhhdCBvdGhlcgorICogdmFyaWFudHMgc3VjaCBETTY0NDMgbWF5IGJlIHN1cHBvcnRlZCB1c2luZyB0aGUgc2FtZSBtb2R1bGUuCisgKgorICogVE9ETzogVGVzdCBSYXcgYmF5ZXIgcGFyYW1ldGVyIHNldHRpbmdzIGFuZCBiYXllciBjYXB0dXJlCisgKiAJIFNwbGl0IG1vZHVsZSBwYXJhbWV0ZXIgc3RydWN0dXJlIHRvIG1vZHVsZSBzcGVjaWZpYyBpb2N0bCBzdHJ1Y3RzCisgKiAJIGludmVzdGlnYXRlIGlmIGVudW0gdXNlZCBmb3IgdXNlciBzcGFjZSB0eXBlIGRlZmluaXRpb24KKyAqIAkgdG8gYmUgcmVwbGFjZWQgYnkgI2RlZmluZXMgb3IgaW50ZWdlcgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvZG02NDR4X2NjZGMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKyNpbmNsdWRlICJkbTY0NHhfY2NkY19yZWdzLmgiCisjaW5jbHVkZSAiY2NkY19od19kZXZpY2UuaCIKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDQ0RDIERyaXZlciBmb3IgRE02NDQ2Iik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworCitzdGF0aWMgc3RydWN0IGRldmljZSAqZGV2OworCisvKiBPYmplY3QgZm9yIENDREMgcmF3IG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGNjZGNfaHdfcGFyYW1zX3JhdyA9IHsKKwkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKKwkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAorCS53aW4gPSBDQ0RDX1dJTl9WR0EsCisJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS5jb25maWdfcGFyYW1zID0geworCQkuZGF0YV9zeiA9IENDRENfREFUQV8xMEJJVFMsCisJfSwKK307CisKKy8qIE9iamVjdCBmb3IgQ0NEQyB5Y2JjciBtb2RlICovCitzdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIGNjZGNfaHdfcGFyYW1zX3ljYmNyID0geworCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKKwkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJLndpbiA9IENDRENfV0lOX1BBTCwKKwkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJLmJ0NjU2X2VuYWJsZSA9IDEsCisJLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAorCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQKK307CisKKyNkZWZpbmUgQ0NEQ19NQVhfUkFXX1lVVl9GT1JNQVRTCTIKKworLyogUmF3IEJheWVyIGZvcm1hdHMgKi8KK3N0YXRpYyB1MzIgY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbXSA9CisJe1Y0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfUElYX0ZNVF9TQkdHUjE2fTsKKworLyogUmF3IFlVViBmb3JtYXRzICovCitzdGF0aWMgdTMyIGNjZGNfcmF3X3l1dl9waXhfZm9ybWF0c1tdID0KKwl7VjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfUElYX0ZNVF9ZVVlWfTsKKworc3RhdGljIHZvaWQgKl9faW9tZW0gY2NkY19iYXNlX2FkZHI7CitzdGF0aWMgaW50IGNjZGNfYWRkcl9zaXplOworc3RhdGljIGVudW0gdnBmZV9od19pZl90eXBlIGNjZGNfaWZfdHlwZTsKKworLyogcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzICovCitzdGF0aWMgaW5saW5lIHUzMiByZWdyKHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGNjZGNfc2V0X2NjZGNfYmFzZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwljY2RjX2Jhc2VfYWRkciA9IGFkZHI7CisJY2NkY19hZGRyX3NpemUgPSBzaXplOworfQorCitzdGF0aWMgdm9pZCBjY2RjX2VuYWJsZShpbnQgZmxhZykKK3sKKwlyZWd3KGZsYWcsIENDRENfUENSKTsKK30KKworc3RhdGljIHZvaWQgY2NkY19lbmFibGVfdnBvcnQoaW50IGZsYWcpCit7CisJaWYgKGZsYWcpCisJCS8qIGVuYWJsZSB2aWRlbyBwb3J0ICovCisJCXJlZ3coQ0NEQ19FTkFCTEVfVklERU9fUE9SVCwgQ0NEQ19GTVRDRkcpOworCWVsc2UKKwkJcmVndyhDQ0RDX0RJU0FCTEVfVklERU9fUE9SVCwgQ0NEQ19GTVRDRkcpOworfQorCisvKgorICogY2NkY19zZXR3aW4oKQorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgd2luZG93IHNpemUKKyAqIHRvIGJlIGNhcHR1cmUgaW4gQ0NEQyByZWcKKyAqLwordm9pZCBjY2RjX3NldHdpbihzdHJ1Y3QgdjRsMl9yZWN0ICppbWFnZV93aW4sCisJCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCwKKwkJaW50IHBwYykKK3sKKwlpbnQgaG9yel9zdGFydCwgaG9yel9ucl9waXhlbHM7CisJaW50IHZlcnRfc3RhcnQsIHZlcnRfbnJfbGluZXM7CisJaW50IHZhbCA9IDAsIG1pZF9pbWcgPSAwOworCisJZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfc2V0d2luLi4uIik7CisJLyoKKwkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKKwkgKiBvdXRwdXQgdG8gU0RSQU0uIGV4YW1wbGUsIGZvciB5Y2JjciwgaXQgaXMgb25lIHkgYW5kIG9uZSBjLCBzbyAyLgorCSAqIHJhdyBjYXB0dXJlIHRoaXMgaXMgMQorCSAqLworCWhvcnpfc3RhcnQgPSBpbWFnZV93aW4tPmxlZnQgPDwgKHBwYyAtIDEpOworCWhvcnpfbnJfcGl4ZWxzID0gKGltYWdlX3dpbi0+d2lkdGggPDwgKHBwYyAtIDEpKSAtIDE7CisJcmVndygoaG9yel9zdGFydCA8PCBDQ0RDX0hPUlpfSU5GT19TUEhfU0hJRlQpIHwgaG9yel9ucl9waXhlbHMsCisJICAgICBDQ0RDX0hPUlpfSU5GTyk7CisKKwl2ZXJ0X3N0YXJ0ID0gaW1hZ2Vfd2luLT50b3A7CisKKwlpZiAoZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCXZlcnRfbnJfbGluZXMgPSAoaW1hZ2Vfd2luLT5oZWlnaHQgPj4gMSkgLSAxOworCQl2ZXJ0X3N0YXJ0ID4+PSAxOworCQkvKiBTaW5jZSBmaXJzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAqLworCQl2ZXJ0X3N0YXJ0ICs9IDE7CisJCS8qIGNvbmZpZ3VyZSBWRElOVDAgKi8KKwkJdmFsID0gKHZlcnRfc3RhcnQgPDwgQ0NEQ19WRElOVF9WRElOVDBfU0hJRlQpOworCQlyZWd3KHZhbCwgQ0NEQ19WRElOVCk7CisKKwl9IGVsc2UgeworCQkvKiBTaW5jZSBmaXJzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAqLworCQl2ZXJ0X3N0YXJ0ICs9IDE7CisJCXZlcnRfbnJfbGluZXMgPSBpbWFnZV93aW4tPmhlaWdodCAtIDE7CisJCS8qCisJCSAqIGNvbmZpZ3VyZSBWRElOVDAgYW5kIFZESU5UMS4gVkRJTlQxIHdpbGwgYmUgYXQgaGFsZgorCQkgKiBvZiBpbWFnZSBoZWlnaHQKKwkJICovCisJCW1pZF9pbWcgPSB2ZXJ0X3N0YXJ0ICsgKGltYWdlX3dpbi0+aGVpZ2h0IC8gMik7CisJCXZhbCA9ICh2ZXJ0X3N0YXJ0IDw8IENDRENfVkRJTlRfVkRJTlQwX1NISUZUKSB8CisJCSAgICAobWlkX2ltZyAmIENDRENfVkRJTlRfVkRJTlQxX01BU0spOworCQlyZWd3KHZhbCwgQ0NEQ19WRElOVCk7CisKKwl9CisJcmVndygodmVydF9zdGFydCA8PCBDQ0RDX1ZFUlRfU1RBUlRfU0xWMF9TSElGVCkgfCB2ZXJ0X3N0YXJ0LAorCSAgICAgQ0NEQ19WRVJUX1NUQVJUKTsKKwlyZWd3KHZlcnRfbnJfbGluZXMsIENDRENfVkVSVF9MSU5FUyk7CisJZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOworfQorCitzdGF0aWMgdm9pZCBjY2RjX3JlYWRyZWdzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwl2YWwgPSByZWdyKENDRENfQUxBVyk7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19DTEFNUCk7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBDTEFNUC4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfRENTVUIpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX0JMS0NNUCk7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBCTEtDTVAuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX0ZQQ19BRERSKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19GUEMpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19GTVRDRkcpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19DT0xQVE4pOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ09MUFROLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19GTVRfSE9SWik7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKKwl2YWwgPSByZWdyKENDRENfRk1UX1ZFUlQpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX0hTSVpFX09GRik7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBIU0laRV9PRkYuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX1NET0ZTVCk7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBTRE9GU1QuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX1ZQX09VVCk7CisJZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX1NZTl9NT0RFKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19IT1JaX0lORk8pOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gSE9SWl9JTkZPLi4uXG4iLCB2YWwpOworCXZhbCA9IHJlZ3IoQ0NEQ19WRVJUX1NUQVJUKTsKKwlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfU1RBUlQuLi5cbiIsIHZhbCk7CisJdmFsID0gcmVncihDQ0RDX1ZFUlRfTElORVMpOworCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9MSU5FUy4uLlxuIiwgdmFsKTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9jY2RjX3BhcmFtKHN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjY2RjcGFyYW0pCit7CisJaWYgKGNjZGNwYXJhbS0+YWxhdy5lbmFibGUpIHsKKwkJaWYgKChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA+IENDRENfR0FNTUFfQklUU18wOV8wKSB8fAorCQkgICAgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgQ0NEQ19HQU1NQV9CSVRTXzE1XzYpIHx8CisJCSAgICAoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPCBjY2RjcGFyYW0tPmRhdGFfc3opKSB7CisJCQlkZXZfZGJnKGRldiwgIlxuSW52YWxpZCBkYXRhIGxpbmUgc2VsZWN0Iik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2NkY191cGRhdGVfcmF3X3BhcmFtcyhzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqcmF3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9CisJCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwl1bnNpZ25lZCBpbnQgKmZwY192aXJ0YWRkciA9IE5VTEw7CisJdW5zaWduZWQgaW50ICpmcGNfcGh5c2FkZHIgPSBOVUxMOworCisJbWVtY3B5KGNvbmZpZ19wYXJhbXMsIHJhd19wYXJhbXMsIHNpemVvZigqcmF3X3BhcmFtcykpOworCS8qCisJICogYWxsb2NhdGUgbWVtb3J5IGZvciBmYXVsdCBwaXhlbCB0YWJsZSBhbmQgY29weSB0aGUgdXNlcgorCSAqIHZhbHVlcyB0byB0aGUgdGFibGUKKwkgKi8KKwlpZiAoIWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5lbmFibGUpCisJCXJldHVybiAwOworCisJZnBjX3BoeXNhZGRyID0gKHVuc2lnbmVkIGludCAqKWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcGNfdGFibGVfYWRkcjsKKwlmcGNfdmlydGFkZHIgPSAodW5zaWduZWQgaW50ICopcGh5c190b192aXJ0KAorCQkJCSh1bnNpZ25lZCBsb25nKWZwY19waHlzYWRkcik7CisJLyoKKwkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEZQQyB0YWJsZSBpZiBjdXJyZW50CisJICogRlBDIHRhYmxlIGJ1ZmZlciBpcyBub3QgYmlnIGVub3VnaCB0bworCSAqIGFjY29tb2RhdGUgRlBDIE51bWJlciByZXF1ZXN0ZWQKKwkgKi8KKwlpZiAocmF3X3BhcmFtcy0+ZmF1bHRfcHhsLmZwX251bSAhPSBjb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtKSB7CisJCWlmIChmcGNfcGh5c2FkZHIgIT0gTlVMTCkgeworCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylmcGNfcGh5c2FkZHIsCisJCQkJICAgZ2V0X29yZGVyCisJCQkJICAgKGNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0gKgorCQkJCSAgIEZQX05VTV9CWVRFUykpOworCQl9CisKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBGUEMgdGFibGUgKi8KKwkJZnBjX3ZpcnRhZGRyID0KKwkJCSh1bnNpZ25lZCBpbnQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLAorCQkJCQkJCSBnZXRfb3JkZXIocmF3X3BhcmFtcy0+CisJCQkJCQkJIGZhdWx0X3B4bC5mcF9udW0gKgorCQkJCQkJCSBGUF9OVU1fQllURVMpKTsKKworCQlpZiAoZnBjX3ZpcnRhZGRyID09IE5VTEwpIHsKKwkJCWRldl9kYmcoZGV2LAorCQkJCSJcblVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEZQQyIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJZnBjX3BoeXNhZGRyID0KKwkJICAgICh1bnNpZ25lZCBpbnQgKil2aXJ0X3RvX3BoeXMoKHZvaWQgKilmcGNfdmlydGFkZHIpOworCX0KKworCS8qIENvcHkgbnVtYmVyIG9mIGZhdWx0IHBpeGVscyBhbmQgRlBDIHRhYmxlICovCisJY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwX251bSA9IHJhd19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW07CisJaWYgKGNvcHlfZnJvbV91c2VyKGZwY192aXJ0YWRkciwKKwkJCSh2b2lkIF9fdXNlciAqKXJhd19wYXJhbXMtPmZhdWx0X3B4bC5mcGNfdGFibGVfYWRkciwKKwkJCWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0gKiBGUF9OVU1fQllURVMpKSB7CisJCWRldl9kYmcoZGV2LCAiXG4gY29weV9mcm9tX3VzZXIgZmFpbGVkIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHIgPSAodW5zaWduZWQgaW50KWZwY19waHlzYWRkcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjY2RjX2Nsb3NlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9CisJCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwl1bnNpZ25lZCBpbnQgKmZwY19waHlzYWRkciA9IE5VTEwsICpmcGNfdmlydGFkZHIgPSBOVUxMOworCisJZnBjX3BoeXNhZGRyID0gKHVuc2lnbmVkIGludCAqKWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcGNfdGFibGVfYWRkcjsKKworCWlmIChmcGNfcGh5c2FkZHIgIT0gTlVMTCkgeworCQlmcGNfdmlydGFkZHIgPSAodW5zaWduZWQgaW50ICopCisJCSAgICBwaHlzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpZnBjX3BoeXNhZGRyKTsKKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylmcGNfdmlydGFkZHIsCisJCQkgICBnZXRfb3JkZXIoY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwX251bSAqCisJCQkgICBGUF9OVU1fQllURVMpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKQorICogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIGRlZmF1bHRzIHRvIGFsbCBDQ0RDIHJlZ2lzdGVycworICovCitzdGF0aWMgdm9pZCBjY2RjX3Jlc3RvcmVfZGVmYXVsdHModm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIGRpc2FibGUgQ0NEQyAqLworCWNjZGNfZW5hYmxlKDApOworCS8qIHNldCBhbGwgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWUgKi8KKwlmb3IgKGkgPSA0OyBpIDw9IDB4OTQ7IGkgKz0gNCkKKwkJcmVndygwLCAgaSk7CisJcmVndyhDQ0RDX05PX0NVTExJTkcsIENDRENfQ1VMTElORyk7CisJcmVndyhDQ0RDX0dBTU1BX0JJVFNfMTFfMiwgQ0NEQ19BTEFXKTsKK30KKworc3RhdGljIGludCBjY2RjX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCWRldiA9IGRldmljZTsKKwljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2VuYWJsZV92cG9ydCgxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2NkY19zYmxfcmVzZXQodm9pZCkKK3sKKwl2cHNzX2NsZWFyX3dibF9vdmVyZmxvdyhWUFNTX1BDUl9DQ0RDX1dCTF9PKTsKK30KKworLyogUGFyYW1ldGVyIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgY2NkY19zZXRfcGFyYW1zKHZvaWQgX191c2VyICpwYXJhbXMpCit7CisJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgY2NkY19yYXdfcGFyYW1zOworCWludCB4OworCisJaWYgKGNjZGNfaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl4ID0gY29weV9mcm9tX3VzZXIoJmNjZGNfcmF3X3BhcmFtcywgcGFyYW1zLCBzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CisJaWYgKHgpIHsKKwkJZGV2X2RiZyhkZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmciCisJCQkgICAiY2NkYyBwYXJhbXMsICVkXG4iLCB4KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCF2YWxpZGF0ZV9jY2RjX3BhcmFtKCZjY2RjX3Jhd19wYXJhbXMpKSB7CisJCWlmICghY2NkY191cGRhdGVfcmF3X3BhcmFtcygmY2NkY19yYXdfcGFyYW1zKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIGNjZGNfY29uZmlnX3ljYmNyKCkKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgWUNiQ3IgdmlkZW8gY2FwdHVyZQorICovCit2b2lkIGNjZGNfY29uZmlnX3ljYmNyKHZvaWQpCit7CisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfeWNiY3I7CisJdTMyIHN5bl9tb2RlOworCisJZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CisJLyoKKwkgKiBmaXJzdCByZXN0b3JlIHRoZSBDQ0RDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcworCSAqIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIHdlIGFzc3VtZSBkZWZhdWx0IHZhbHVlcyB0byBiZSBzZXQgaW4KKwkgKiBhIGxvdCBvZiByZWdpc3RlcnMgdGhhdCB3ZSBkaWRuJ3QgdG91Y2gKKwkgKi8KKwljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKKworCS8qCisJICogY29uZmlndXJlIHBpeGVsIGZvcm1hdCwgZnJhbWUgZm9ybWF0LCBjb25maWd1cmUgdmlkZW8gZnJhbWUKKwkgKiBmb3JtYXQsIGVuYWJsZSBvdXRwdXQgdG8gU0RSQU0sIGVuYWJsZSBpbnRlcm5hbCB0aW1pbmcgZ2VuZXJhdG9yCisJICogYW5kIDhiaXQgcGFjayBtb2RlCisJICovCisJc3luX21vZGUgPSAoKChwYXJhbXMtPnBpeF9mbXQgJiBDQ0RDX1NZTl9NT0RFX0lOUE1PRF9NQVNLKSA8PAorCQkgICAgQ0NEQ19TWU5fTU9ERV9JTlBNT0RfU0hJRlQpIHwKKwkJICAgICgocGFyYW1zLT5mcm1fZm10ICYgQ0NEQ19TWU5fRkxETU9ERV9NQVNLKSA8PAorCQkgICAgQ0NEQ19TWU5fRkxETU9ERV9TSElGVCkgfCBDQ0RDX1ZESERFTl9FTkFCTEUgfAorCQkgICAgQ0NEQ19XRU5fRU5BQkxFIHwgQ0NEQ19EQVRBX1BBQ0tfRU5BQkxFKTsKKworCS8qIHNldHVwIEJULjY1NiBzeW5jIG1vZGUgKi8KKwlpZiAocGFyYW1zLT5idDY1Nl9lbmFibGUpIHsKKwkJcmVndyhDQ0RDX1JFQzY1NklGX0JUNjU2X0VOLCBDQ0RDX1JFQzY1NklGKTsKKworCQkvKgorCQkgKiBjb25maWd1cmUgdGhlIEZJRCwgVkQsIEhEIHBpbiBwb2xhcml0eSwKKwkJICogZmxkLGhkIHBvbCBwb3NpdGl2ZSwgdmQgbmVnYXRpdmUsIDgtYml0IGRhdGEKKwkJICovCisJCXN5bl9tb2RlIHw9IENDRENfU1lOX01PREVfVkRfUE9MX05FR0FUSVZFIHwgQ0NEQ19TWU5fTU9ERV84QklUUzsKKwl9IGVsc2UgeworCQkvKiB5L2MgZXh0ZXJuYWwgc3luYyBtb2RlICovCisJCXN5bl9tb2RlIHw9ICgoKHBhcmFtcy0+ZmlkX3BvbCAmIENDRENfRklEX1BPTF9NQVNLKSA8PAorCQkJICAgICBDQ0RDX0ZJRF9QT0xfU0hJRlQpIHwKKwkJCSAgICAgKChwYXJhbXMtPmhkX3BvbCAmIENDRENfSERfUE9MX01BU0spIDw8CisJCQkgICAgIENDRENfSERfUE9MX1NISUZUKSB8CisJCQkgICAgICgocGFyYW1zLT52ZF9wb2wgJiBDQ0RDX1ZEX1BPTF9NQVNLKSA8PAorCQkJICAgICBDQ0RDX1ZEX1BPTF9TSElGVCkpOworCX0KKwlyZWd3KHN5bl9tb2RlLCBDQ0RDX1NZTl9NT0RFKTsKKworCS8qIGNvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwljY2RjX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMik7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSB0aGUgb3JkZXIgb2YgeSBjYiBjciBpbiBTRFJBTSwgYW5kIGRpc2FibGUgbGF0Y2gKKwkgKiBpbnRlcm5hbCByZWdpc3RlciBvbiB2c3luYworCSAqLworCXJlZ3coKHBhcmFtcy0+cGl4X29yZGVyIDw8IENDRENfQ0NEQ0ZHX1k4UE9TX1NISUZUKSB8CisJCSBDQ0RDX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUsIENDRENfQ0NEQ0ZHKTsKKworCS8qCisJICogY29uZmlndXJlIHRoZSBob3Jpem9udGFsIGxpbmUgb2Zmc2V0LiBUaGlzIHNob3VsZCBiZSBhCisJICogb24gMzIgYnl0ZSBib25kYXJ5LiBTbyBjbGVhciBMU0IgNSBiaXRzCisJICovCisJcmVndygoKHBhcmFtcy0+d2luLndpZHRoICogMiAgKyAzMSkgJiB+MHgxZiksIENDRENfSFNJWkVfT0ZGKTsKKworCS8qIGNvbmZpZ3VyZSB0aGUgbWVtb3J5IGxpbmUgb2Zmc2V0ICovCisJaWYgKHBhcmFtcy0+YnVmX3R5cGUgPT0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRCkKKwkJLyogdHdvIGZpZWxkcyBhcmUgaW50ZXJsZWF2ZWQgaW4gbWVtb3J5ICovCisJCXJlZ3coQ0NEQ19TRE9GU1RfRklFTERfSU5URVJMRUFWRUQsIENDRENfU0RPRlNUKTsKKworCWNjZGNfc2JsX3Jlc2V0KCk7CisJZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CisJY2NkY19yZWFkcmVncygpOworfQorCitzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19ibGFja19jbGFtcChzdHJ1Y3QgY2NkY19ibGFja19jbGFtcCAqYmNsYW1wKQoreworCXUzMiB2YWw7CisKKwlpZiAoIWJjbGFtcC0+ZW5hYmxlKSB7CisJCS8qIGNvbmZpZ3VyZSBEQ1N1YiAqLworCQl2YWwgPSAoYmNsYW1wLT5kY19zdWIpICYgQ0NEQ19CTEtfRENfU1VCX01BU0s7CisJCXJlZ3codmFsLCBDQ0RDX0RDU1VCKTsKKwkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKKwkJcmVndyhDQ0RDX0NMQU1QX0RFRkFVTFRfVkFMLCBDQ0RDX0NMQU1QKTsKKwkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIENMQU1QLi4uXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIENvbmZpZ3VyZSBnYWluLCAgU3RhcnQgcGl4ZWwsIE5vIG9mIGxpbmUgdG8gYmUgYXZnLAorCSAqIE5vIG9mIHBpeGVsL2xpbmUgdG8gYmUgYXZnLCAmIEVuYWJsZSB0aGUgQmxhY2sgY2xhbXBpbmcKKwkgKi8KKwl2YWwgPSAoKGJjbGFtcC0+c2dhaW4gJiBDQ0RDX0JMS19TR0FJTl9NQVNLKSB8CisJICAgICAgICgoYmNsYW1wLT5zdGFydF9waXhlbCAmIENDRENfQkxLX1NUX1BYTF9NQVNLKSA8PAorCQlDQ0RDX0JMS19TVF9QWExfU0hJRlQpIHwKKwkgICAgICAgKChiY2xhbXAtPnNhbXBsZV9sbiAmIENDRENfQkxLX1NBTVBMRV9MSU5FX01BU0spIDw8CisJCUNDRENfQkxLX1NBTVBMRV9MSU5FX1NISUZUKSB8CisJICAgICAgICgoYmNsYW1wLT5zYW1wbGVfcGl4ZWwgJiBDQ0RDX0JMS19TQU1QTEVfTE5fTUFTSykgPDwKKwkJQ0NEQ19CTEtfU0FNUExFX0xOX1NISUZUKSB8IENDRENfQkxLX0NMQU1QX0VOQUJMRSk7CisJcmVndyh2YWwsIENDRENfQ0xBTVApOworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CisJLyogSWYgQmxhY2sgY2xhbXBpbmcgaXMgZW5hYmxlIHRoZW4gbWFrZSBkY3N1YiAwICovCisJcmVndyhDQ0RDX0RDU1VCX0RFRkFVTFRfVkFMLCBDQ0RDX0RDU1VCKTsKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAwMDAwMDAwIHRvIERDU1VCLi4uXG4iKTsKK30KKworc3RhdGljIHZvaWQgY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2Uoc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uICpiY29tcCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gKChiY29tcC0+YiAmIENDRENfQkxLX0NPTVBfTUFTSykgfAorCSAgICAgICgoYmNvbXAtPmdiICYgQ0NEQ19CTEtfQ09NUF9NQVNLKSA8PAorCSAgICAgICBDQ0RDX0JMS19DT01QX0dCX0NPTVBfU0hJRlQpIHwKKwkgICAgICAoKGJjb21wLT5nciAmIENDRENfQkxLX0NPTVBfTUFTSykgPDwKKwkgICAgICAgQ0NEQ19CTEtfQ09NUF9HUl9DT01QX1NISUZUKSB8CisJICAgICAgKChiY29tcC0+ciAmIENDRENfQkxLX0NPTVBfTUFTSykgPDwKKwkgICAgICAgQ0NEQ19CTEtfQ09NUF9SX0NPTVBfU0hJRlQpKTsKKwlyZWd3KHZhbCwgQ0NEQ19CTEtDTVApOworfQorCitzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ19mcGMoc3RydWN0IGNjZGNfZmF1bHRfcGl4ZWwgKmZwYykKK3sKKwl1MzIgdmFsOworCisJLyogSW5pdGlhbGx5IGRpc2FibGUgRlBDICovCisJdmFsID0gQ0NEQ19GUENfRElTQUJMRTsKKwlyZWd3KHZhbCwgQ0NEQ19GUEMpOworCisJaWYgKCFmcGMtPmVuYWJsZSkKKwkJcmV0dXJuOworCisJLyogQ29uZmlndXJlIEZhdWx0IHBpeGVsIGlmIG5lZWRlZCAqLworCXJlZ3coZnBjLT5mcGNfdGFibGVfYWRkciwgQ0NEQ19GUENfQUREUik7CisJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwKKwkJICAgICAgIChmcGMtPmZwY190YWJsZV9hZGRyKSk7CisJLyogV3JpdGUgdGhlIEZQQyBwYXJhbXMgd2l0aCBGUEMgZGlzYWJsZSAqLworCXZhbCA9IGZwYy0+ZnBfbnVtICYgQ0NEQ19GUENfRlBDX05VTV9NQVNLOworCXJlZ3codmFsLCBDQ0RDX0ZQQyk7CisKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKKwkvKiByZWFkIHRoZSBGUEMgcmVnaXN0ZXIgKi8KKwl2YWwgPSByZWdyKENDRENfRlBDKSB8IENDRENfRlBDX0VOQUJMRTsKKwlyZWd3KHZhbCwgQ0NEQ19GUEMpOworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOworfQorCisvKgorICogY2NkY19jb25maWdfcmF3KCkKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgUmF3IGNhcHR1cmUgbW9kZQorICovCit2b2lkIGNjZGNfY29uZmlnX3Jhdyh2b2lkKQoreworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc19yYXc7CisJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQorCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJdW5zaWduZWQgaW50IHN5bl9tb2RlID0gMDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCisJLyogICAgICBSZXNldCBDQ0RDICovCisJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CisKKwkvKiBEaXNhYmxlIGxhdGNoaW5nIGZ1bmN0aW9uIHJlZ2lzdGVycyBvbiBWU1lOQyAgKi8KKwlyZWd3KENDRENfTEFUQ0hfT05fVlNZTkNfRElTQUJMRSwgQ0NEQ19DQ0RDRkcpOworCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkoU1lOX01PREUuVkRQT0wpLAorCSAqIGhvcml6b250YWwgc3luYyBwb2xhcml0eSAoU1lOX01PREUuSERQT0wpLCBmcmFtZSBpZCBwb2xhcml0eQorCSAqIChTWU5fTU9ERS5GTERQT0wpLCBmcmFtZSBmb3JtYXQocHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlKSwKKwkgKiBkYXRhIHNpemUoU1lOTU9ERS5EQVRTSVopLCAmcGl4ZWwgZm9ybWF0IChJbnB1dCBtb2RlKSwgb3V0cHV0CisJICogU0RSQU0sIGVuYWJsZSBpbnRlcm5hbCB0aW1pbmcgZ2VuZXJhdG9yCisJICovCisJc3luX21vZGUgPQorCQkoKChwYXJhbXMtPnZkX3BvbCAmIENDRENfVkRfUE9MX01BU0spIDw8IENDRENfVkRfUE9MX1NISUZUKSB8CisJCSgocGFyYW1zLT5oZF9wb2wgJiBDQ0RDX0hEX1BPTF9NQVNLKSA8PCBDQ0RDX0hEX1BPTF9TSElGVCkgfAorCQkoKHBhcmFtcy0+ZmlkX3BvbCAmIENDRENfRklEX1BPTF9NQVNLKSA8PCBDQ0RDX0ZJRF9QT0xfU0hJRlQpIHwKKwkJKChwYXJhbXMtPmZybV9mbXQgJiBDQ0RDX0ZSTV9GTVRfTUFTSykgPDwgQ0NEQ19GUk1fRk1UX1NISUZUKSB8CisJCSgoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiAmIENDRENfREFUQV9TWl9NQVNLKSA8PAorCQlDQ0RDX0RBVEFfU1pfU0hJRlQpIHwKKwkJKChwYXJhbXMtPnBpeF9mbXQgJiBDQ0RDX1BJWF9GTVRfTUFTSykgPDwgQ0NEQ19QSVhfRk1UX1NISUZUKSB8CisJCUNDRENfV0VOX0VOQUJMRSB8IENDRENfVkRIREVOX0VOQUJMRSk7CisKKwkvKiBFbmFibGUgYW5kIGNvbmZpZ3VyZSBhTGF3IHJlZ2lzdGVyIGlmIG5lZWRlZCAqLworCWlmIChjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgeworCQl2YWwgPSAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZ2FtYV93ZCAmCisJCSAgICAgIENDRENfQUxBV19HQU1BX1dEX01BU0spIHwgQ0NEQ19BTEFXX0VOQUJMRSk7CisJCXJlZ3codmFsLCBDQ0RDX0FMQVcpOworCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEFMQVcuLi5cbiIsIHZhbCk7CisJfQorCisJLyogQ29uZmlndXJlIHZpZGVvIHdpbmRvdyAqLworCWNjZGNfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCBDQ0RDX1BQQ19SQVcpOworCisJLyogQ29uZmlndXJlIEJsYWNrIENsYW1wICovCisJY2NkY19jb25maWdfYmxhY2tfY2xhbXAoJmNvbmZpZ19wYXJhbXMtPmJsa19jbGFtcCk7CisKKwkvKiBDb25maWd1cmUgQmxhY2sgbGV2ZWwgY29tcGVuc2F0aW9uICovCisJY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2UoJmNvbmZpZ19wYXJhbXMtPmJsa19jb21wKTsKKworCS8qIENvbmZpZ3VyZSBGYXVsdCBQaXhlbCBDb3JyZWN0aW9uICovCisJY2NkY19jb25maWdfZnBjKCZjb25maWdfcGFyYW1zLT5mYXVsdF9weGwpOworCisJLyogSWYgZGF0YSBzaXplIGlzIDggYml0IHRoZW4gcGFjayB0aGUgZGF0YSAqLworCWlmICgoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpIHx8CisJICAgICBjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkKKwkJc3luX21vZGUgfD0gQ0NEQ19EQVRBX1BBQ0tfRU5BQkxFOworCisjaWZkZWYgQ09ORklHX0RNNjQ0WF9WSURFT19QT1JUX0VOQUJMRQorCS8qIGVuYWJsZSB2aWRlbyBwb3J0ICovCisJdmFsID0gQ0NEQ19FTkFCTEVfVklERU9fUE9SVDsKKyNlbHNlCisJLyogZGlzYWJsZSB2aWRlbyBwb3J0ICovCisJdmFsID0gQ0NEQ19ESVNBQkxFX1ZJREVPX1BPUlQ7CisjZW5kaWYKKworCWlmIChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykKKwkJdmFsIHw9IChDQ0RDX0RBVEFfMTBCSVRTICYgQ0NEQ19GTVRDRkdfVlBJTl9NQVNLKQorCQkgICAgPDwgQ0NEQ19GTVRDRkdfVlBJTl9TSElGVDsKKwllbHNlCisJCXZhbCB8PSAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiAmIENDRENfRk1UQ0ZHX1ZQSU5fTUFTSykKKwkJICAgIDw8IENDRENfRk1UQ0ZHX1ZQSU5fU0hJRlQ7CisJLyogV3JpdGUgdmFsdWUgaW4gRk1UQ0ZHICovCisJcmVndyh2YWwsIENDRENfRk1UQ0ZHKTsKKworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOworCS8qIENvbmZpZ3VyZSB0aGUgY29sb3IgcGF0dGVybiBhY2NvcmRpbmcgdG8gbXQ5dDAwMSBzZW5zb3IgKi8KKwlyZWd3KENDRENfQ09MUFROX1ZBTCwgQ0NEQ19DT0xQVE4pOworCisJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHhCQjExQkIxMSB0byBDT0xQVE4uLi5cbiIpOworCS8qCisJICogQ29uZmlndXJlIERhdGEgZm9ybWF0dGVyKFZpZGVvIHBvcnQpIHBpeGVsIHNlbGVjdGlvbgorCSAqIChGTVRfSE9SWiwgRk1UX1ZFUlQpCisJICovCisJdmFsID0gKChwYXJhbXMtPndpbi5sZWZ0ICYgQ0NEQ19GTVRfSE9SWl9GTVRTUEhfTUFTSykgPDwKKwkgICAgICBDQ0RDX0ZNVF9IT1JaX0ZNVFNQSF9TSElGVCkgfAorCSAgICAgIChwYXJhbXMtPndpbi53aWR0aCAmIENDRENfRk1UX0hPUlpfRk1UTE5IX01BU0spOworCXJlZ3codmFsLCBDQ0RDX0ZNVF9IT1JaKTsKKworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CisJdmFsID0gKHBhcmFtcy0+d2luLnRvcCAmIENDRENfRk1UX1ZFUlRfRk1UU0xWX01BU0spCisJICAgIDw8IENDRENfRk1UX1ZFUlRfRk1UU0xWX1NISUZUOworCWlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpCisJCXZhbCB8PSAocGFyYW1zLT53aW4uaGVpZ2h0KSAmIENDRENfRk1UX1ZFUlRfRk1UTE5WX01BU0s7CisJZWxzZQorCQl2YWwgfD0gKHBhcmFtcy0+d2luLmhlaWdodCA+PiAxKSAmIENDRENfRk1UX1ZFUlRfRk1UTE5WX01BU0s7CisKKwlkZXZfZGJnKGRldiwgIlxucGFyYW1zLT53aW4uaGVpZ2h0ICAweCV4IC4uLlxuIiwKKwkgICAgICAgcGFyYW1zLT53aW4uaGVpZ2h0KTsKKwlyZWd3KHZhbCwgQ0NEQ19GTVRfVkVSVCk7CisKKwlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOworCisJZGV2X2RiZyhkZXYsICJcbmJlbG93IHJlZ3codmFsLCBGTVRfVkVSVCkuLi4iKTsKKworCS8qCisJICogQ29uZmlndXJlIEhvcml6b250YWwgb2Zmc2V0IHJlZ2lzdGVyLiBJZiBwYWNrIDggaXMgZW5hYmxlZCB0aGVuCisJICogMSBwaXhlbCB3aWxsIHRha2UgMSBieXRlCisJICovCisJaWYgKChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykgfHwKKwkgICAgY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpCisJCXJlZ3coKHBhcmFtcy0+d2luLndpZHRoICsgQ0NEQ18zMkJZVEVfQUxJR05fVkFMKSAmCisJCSAgICBDQ0RDX0hTSVpFX09GRl9NQVNLLCBDQ0RDX0hTSVpFX09GRik7CisJZWxzZQorCQkvKiBlbHNlIG9uZSBwaXhlbCB3aWxsIHRha2UgMiBieXRlICovCisJCXJlZ3coKChwYXJhbXMtPndpbi53aWR0aCAqIENDRENfVFdPX0JZVEVTX1BFUl9QSVhFTCkgKworCQkgICAgQ0NEQ18zMkJZVEVfQUxJR05fVkFMKSAmIENDRENfSFNJWkVfT0ZGX01BU0ssCisJCSAgICBDQ0RDX0hTSVpFX09GRik7CisKKwkvKiBTZXQgdmFsdWUgZm9yIFNET0ZTVCAqLworCWlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CisJCQkvKiBGb3IgaW50ZWxhY2UgaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KENDRENfSU5URVJMQUNFRF9JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKKwkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4NEI2RCB0byBTRE9GU1QuLi5cbiIpOworCQl9CisKKwkJZWxzZSB7CisJCQkvKiBGb3IgaW50ZWxhY2Ugbm9uIGludmVyc2UgbW9kZSAqLworCQkJcmVndyhDQ0RDX0lOVEVSTEFDRURfTk9fSU1BR0VfSU5WRVJULCBDQ0RDX1NET0ZTVCk7CisJCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAyNDkgdG8gU0RPRlNULi4uXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CisJCXJlZ3coQ0NEQ19QUk9HUkVTU0lWRV9OT19JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKKwkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIFNET0ZTVC4uLlxuIik7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgdmlkZW8gcG9ydCBwaXhlbCBzZWxlY3Rpb24gKFZQT1VUKQorCSAqIEhlcmUgLTEgaXMgdG8gbWFrZSB0aGUgaGVpZ2h0IHZhbHVlIGxlc3MgdGhhbiBGTVRfVkVSVC5GTVRMTlYKKwkgKi8KKwlpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKQorCQl2YWwgPSAoKChwYXJhbXMtPndpbi5oZWlnaHQgLSAxKSAmIENDRENfVlBfT1VUX1ZFUlRfTlVNX01BU0spKQorCQkgICAgPDwgQ0NEQ19WUF9PVVRfVkVSVF9OVU1fU0hJRlQ7CisJZWxzZQorCQl2YWwgPQorCQkgICAgKCgoKHBhcmFtcy0+d2luLmhlaWdodCA+PiBDQ0RDX0lOVEVSTEFDRURfSEVJR0hUX1NISUZUKSAtCisJCSAgICAgMSkgJiBDQ0RDX1ZQX09VVF9WRVJUX05VTV9NQVNLKSkgPDwKKwkJICAgIENDRENfVlBfT1VUX1ZFUlRfTlVNX1NISUZUOworCisJdmFsIHw9ICgoKChwYXJhbXMtPndpbi53aWR0aCkpKSAmIENDRENfVlBfT1VUX0hPUlpfTlVNX01BU0spCisJICAgIDw8IENDRENfVlBfT1VUX0hPUlpfTlVNX1NISUZUOworCXZhbCB8PSAocGFyYW1zLT53aW4ubGVmdCkgJiBDQ0RDX1ZQX09VVF9IT1JaX1NUX01BU0s7CisJcmVndyh2YWwsIENDRENfVlBfT1VUKTsKKworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOworCXJlZ3coc3luX21vZGUsIENDRENfU1lOX01PREUpOworCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHN5bl9tb2RlKTsKKworCWNjZGNfc2JsX3Jlc2V0KCk7CisJZGV2X2RiZyhkZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwljY2RjX3JlYWRyZWdzKCk7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19jb25maWd1cmUodm9pZCkKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NvbmZpZ19yYXcoKTsKKwllbHNlCisJCWNjZGNfY29uZmlnX3ljYmNyKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19zZXRfYnVmdHlwZShlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSkKK3sKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwllbHNlCisJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBjY2RjX2dldF9idWZ0eXBlKHZvaWQpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZTsKKwlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGU7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19lbnVtX3BpeCh1MzIgKnBpeCwgaW50IGkpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHMpKSB7CisJCQkqcGl4ID0gY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbaV07CisJCQlyZXQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGNjZGNfcmF3X3l1dl9waXhfZm9ybWF0cykpIHsKKwkJCSpwaXggPSBjY2RjX3Jhd195dXZfcGl4X2Zvcm1hdHNbaV07CisJCQlyZXQgPSAwOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2NkY19zZXRfcGl4ZWxfZm9ybWF0KHUzMiBwaXhmbXQpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQljY2RjX2h3X3BhcmFtc19yYXcucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQorCQkJY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdy5lbmFibGUgPSAxOworCQllbHNlIGlmIChwaXhmbXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCWVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfVVlWWSkKKwkJCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY2NkY19nZXRfcGl4ZWxfZm9ybWF0KHZvaWQpCit7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPQorCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdzsKKwl1MzIgcGl4Zm10OworCisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaWYgKGFsYXctPmVuYWJsZSkKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJCWVsc2UKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjE2OworCWVsc2UgeworCQlpZiAoY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCWVsc2UKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCX0KKwlyZXR1cm4gcGl4Zm10OworfQorCitzdGF0aWMgaW50IGNjZGNfc2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19od19wYXJhbXNfcmF3LndpbiA9ICp3aW47CisJZWxzZQorCQljY2RjX2h3X3BhcmFtc195Y2Jjci53aW4gPSAqd2luOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjY2RjX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCSp3aW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luOworCWVsc2UKKwkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjY2RjX2dldF9saW5lX2xlbmd0aCh2b2lkKQoreworCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KKwkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmICgoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHx8CisJCSAgICAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpKQorCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aDsKKwkJZWxzZQorCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aCAqIDI7CisJfSBlbHNlCisJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbi53aWR0aCAqIDI7CisJcmV0dXJuIEFMSUdOKGxlbiwgMzIpOworfQorCitzdGF0aWMgaW50IGNjZGNfc2V0X2ZyYW1lX2Zvcm1hdChlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCit7CisJaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQgPSBmcm1fZm10OworCWVsc2UKKwkJY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQoreworCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdDsKKwllbHNlCisJCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10OworfQorCitzdGF0aWMgaW50IGNjZGNfZ2V0ZmlkKHZvaWQpCit7CisJcmV0dXJuIChyZWdyKENDRENfU1lOX01PREUpID4+IDE1KSAmIDE7Cit9CisKKy8qIG1pc2Mgb3BlcmF0aW9ucyAqLworc3RhdGljIGlubGluZSB2b2lkIGNjZGNfc2V0ZmJhZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZWd3KGFkZHIgJiAweGZmZmZmZmUwLCBDQ0RDX1NEUl9BRERSKTsKK30KKworc3RhdGljIGludCBjY2RjX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gKnBhcmFtcykKK3sKKwljY2RjX2lmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CisKKwlzd2l0Y2ggKHBhcmFtcy0+aWZfdHlwZSkgeworCWNhc2UgVlBGRV9CVDY1NjoKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgorCQljY2RjX2h3X3BhcmFtc195Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOworCQljY2RjX2h3X3BhcmFtc195Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPIGFkZCBzdXBwb3J0IGZvciByYXcgYmF5ZXIgaGVyZSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2NkY19od19kZXZpY2UgY2NkY19od19kZXYgPSB7CisJLm5hbWUgPSAiRE02NDQ2IENDREMiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5od19vcHMgPSB7CisJCS5vcGVuID0gY2NkY19vcGVuLAorCQkuY2xvc2UgPSBjY2RjX2Nsb3NlLAorCQkuc2V0X2NjZGNfYmFzZSA9IGNjZGNfc2V0X2NjZGNfYmFzZSwKKwkJLnJlc2V0ID0gY2NkY19zYmxfcmVzZXQsCisJCS5lbmFibGUgPSBjY2RjX2VuYWJsZSwKKwkJLnNldF9od19pZl9wYXJhbXMgPSBjY2RjX3NldF9od19pZl9wYXJhbXMsCisJCS5zZXRfcGFyYW1zID0gY2NkY19zZXRfcGFyYW1zLAorCQkuY29uZmlndXJlID0gY2NkY19jb25maWd1cmUsCisJCS5zZXRfYnVmdHlwZSA9IGNjZGNfc2V0X2J1ZnR5cGUsCisJCS5nZXRfYnVmdHlwZSA9IGNjZGNfZ2V0X2J1ZnR5cGUsCisJCS5lbnVtX3BpeCA9IGNjZGNfZW51bV9waXgsCisJCS5zZXRfcGl4ZWxfZm9ybWF0ID0gY2NkY19zZXRfcGl4ZWxfZm9ybWF0LAorCQkuZ2V0X3BpeGVsX2Zvcm1hdCA9IGNjZGNfZ2V0X3BpeGVsX2Zvcm1hdCwKKwkJLnNldF9mcmFtZV9mb3JtYXQgPSBjY2RjX3NldF9mcmFtZV9mb3JtYXQsCisJCS5nZXRfZnJhbWVfZm9ybWF0ID0gY2NkY19nZXRfZnJhbWVfZm9ybWF0LAorCQkuc2V0X2ltYWdlX3dpbmRvdyA9IGNjZGNfc2V0X2ltYWdlX3dpbmRvdywKKwkJLmdldF9pbWFnZV93aW5kb3cgPSBjY2RjX2dldF9pbWFnZV93aW5kb3csCisJCS5nZXRfbGluZV9sZW5ndGggPSBjY2RjX2dldF9saW5lX2xlbmd0aCwKKwkJLnNldGZiYWRkciA9IGNjZGNfc2V0ZmJhZGRyLAorCQkuZ2V0ZmlkID0gY2NkY19nZXRmaWQsCisJfSwKK307CisKK3N0YXRpYyBpbnQgZG02NDR4X2NjZGNfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX05PVElDRSAiZG02NDR4X2NjZGNfaW5pdFxuIik7CisJaWYgKHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KSA8IDApCisJCXJldHVybiAtMTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwKKwkJY2NkY19od19kZXYubmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtNjQ0eF9jY2RjX2V4aXQodm9pZCkKK3sKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKK30KKworbW9kdWxlX2luaXQoZG02NDR4X2NjZGNfaW5pdCk7Cittb2R1bGVfZXhpdChkbTY0NHhfY2NkY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkY19yZWdzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGNfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNWQwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGNfcmVncy5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9ETTY0NFhfQ0NEQ19SRUdTX0gKKyNkZWZpbmUgX0RNNjQ0WF9DQ0RDX1JFR1NfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJlZ2lzdGVyIE9GRlNFVCBEZWZpbml0aW9ucworXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDQ0RDX1BJRAkJCQkweDAKKyNkZWZpbmUgQ0NEQ19QQ1IJCQkJMHg0CisjZGVmaW5lIENDRENfU1lOX01PREUJCQkJMHg4CisjZGVmaW5lIENDRENfSERfVkRfV0lECQkJCTB4YworI2RlZmluZSBDQ0RDX1BJWF9MSU5FUwkJCQkweDEwCisjZGVmaW5lIENDRENfSE9SWl9JTkZPCQkJCTB4MTQKKyNkZWZpbmUgQ0NEQ19WRVJUX1NUQVJUCQkJCTB4MTgKKyNkZWZpbmUgQ0NEQ19WRVJUX0xJTkVTCQkJCTB4MWMKKyNkZWZpbmUgQ0NEQ19DVUxMSU5HCQkJCTB4MjAKKyNkZWZpbmUgQ0NEQ19IU0laRV9PRkYJCQkJMHgyNAorI2RlZmluZSBDQ0RDX1NET0ZTVAkJCQkweDI4CisjZGVmaW5lIENDRENfU0RSX0FERFIJCQkJMHgyYworI2RlZmluZSBDQ0RDX0NMQU1QCQkJCTB4MzAKKyNkZWZpbmUgQ0NEQ19EQ1NVQgkJCQkweDM0CisjZGVmaW5lIENDRENfQ09MUFROCQkJCTB4MzgKKyNkZWZpbmUgQ0NEQ19CTEtDTVAJCQkJMHgzYworI2RlZmluZSBDQ0RDX0ZQQwkJCQkweDQwCisjZGVmaW5lIENDRENfRlBDX0FERFIJCQkJMHg0NAorI2RlZmluZSBDQ0RDX1ZESU5UCQkJCTB4NDgKKyNkZWZpbmUgQ0NEQ19BTEFXCQkJCTB4NGMKKyNkZWZpbmUgQ0NEQ19SRUM2NTZJRgkJCQkweDUwCisjZGVmaW5lIENDRENfQ0NEQ0ZHCQkJCTB4NTQKKyNkZWZpbmUgQ0NEQ19GTVRDRkcJCQkJMHg1OAorI2RlZmluZSBDQ0RDX0ZNVF9IT1JaCQkJCTB4NWMKKyNkZWZpbmUgQ0NEQ19GTVRfVkVSVAkJCQkweDYwCisjZGVmaW5lIENDRENfRk1UX0FERFIwCQkJCTB4NjQKKyNkZWZpbmUgQ0NEQ19GTVRfQUREUjEJCQkJMHg2OAorI2RlZmluZSBDQ0RDX0ZNVF9BRERSMgkJCQkweDZjCisjZGVmaW5lIENDRENfRk1UX0FERFIzCQkJCTB4NzAKKyNkZWZpbmUgQ0NEQ19GTVRfQUREUjQJCQkJMHg3NAorI2RlZmluZSBDQ0RDX0ZNVF9BRERSNQkJCQkweDc4CisjZGVmaW5lIENDRENfRk1UX0FERFI2CQkJCTB4N2MKKyNkZWZpbmUgQ0NEQ19GTVRfQUREUjcJCQkJMHg4MAorI2RlZmluZSBDQ0RDX1BSR0VWRU5fMAkJCQkweDg0CisjZGVmaW5lIENDRENfUFJHRVZFTl8xCQkJCTB4ODgKKyNkZWZpbmUgQ0NEQ19QUkdPRERfMAkJCQkweDhjCisjZGVmaW5lIENDRENfUFJHT0REXzEJCQkJMHg5MAorI2RlZmluZSBDQ0RDX1ZQX09VVAkJCQkweDk0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKglEZWZpbmUgZm9yIHZhcmlvdXMgcmVnaXN0ZXIgYml0IG1hc2sgYW5kIHNoaWZ0cyBmb3IgQ0NEQworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0NEQ19GSURfUE9MX01BU0sJCQkxCisjZGVmaW5lIENDRENfRklEX1BPTF9TSElGVAkJCTQKKyNkZWZpbmUgQ0NEQ19IRF9QT0xfTUFTSwkJCTEKKyNkZWZpbmUgQ0NEQ19IRF9QT0xfU0hJRlQJCQkzCisjZGVmaW5lIENDRENfVkRfUE9MX01BU0sJCQkxCisjZGVmaW5lIENDRENfVkRfUE9MX1NISUZUCQkJMgorI2RlZmluZSBDQ0RDX0hTSVpFX09GRl9NQVNLCQkJMHhmZmZmZmZlMAorI2RlZmluZSBDQ0RDXzMyQllURV9BTElHTl9WQUwJCQkzMQorI2RlZmluZSBDQ0RDX0ZSTV9GTVRfTUFTSwkJCTB4MQorI2RlZmluZSBDQ0RDX0ZSTV9GTVRfU0hJRlQJCQk3CisjZGVmaW5lIENDRENfREFUQV9TWl9NQVNLCQkJNworI2RlZmluZSBDQ0RDX0RBVEFfU1pfU0hJRlQJCQk4CisjZGVmaW5lIENDRENfUElYX0ZNVF9NQVNLCQkJMworI2RlZmluZSBDQ0RDX1BJWF9GTVRfU0hJRlQJCQkxMgorI2RlZmluZSBDQ0RDX1ZQMlNEUl9ESVNBQkxFCQkJMHhGRkZCRkZGRgorI2RlZmluZSBDQ0RDX1dFTl9FTkFCTEUJCQkJKDEgPDwgMTcpCisjZGVmaW5lIENDRENfU0RSMlJTWl9ESVNBQkxFCQkJMHhGRkY3RkZGRgorI2RlZmluZSBDQ0RDX1ZESERFTl9FTkFCTEUJCQkoMSA8PCAxNikKKyNkZWZpbmUgQ0NEQ19MUEZfRU5BQkxFCQkJCSgxIDw8IDE0KQorI2RlZmluZSBDQ0RDX0FMQVdfRU5BQkxFCQkJKDEgPDwgMykKKyNkZWZpbmUgQ0NEQ19BTEFXX0dBTUFfV0RfTUFTSwkJCTcKKyNkZWZpbmUgQ0NEQ19CTEtfQ0xBTVBfRU5BQkxFCQkJKDEgPDwgMzEpCisjZGVmaW5lIENDRENfQkxLX1NHQUlOX01BU0sJCQkweDFGCisjZGVmaW5lIENDRENfQkxLX1NUX1BYTF9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIENDRENfQkxLX1NUX1BYTF9TSElGVAkJCTEwCisjZGVmaW5lIENDRENfQkxLX1NBTVBMRV9MTl9NQVNLCQkJNworI2RlZmluZSBDQ0RDX0JMS19TQU1QTEVfTE5fU0hJRlQJCTI4CisjZGVmaW5lIENDRENfQkxLX1NBTVBMRV9MSU5FX01BU0sJCTcKKyNkZWZpbmUgQ0NEQ19CTEtfU0FNUExFX0xJTkVfU0hJRlQJCTI1CisjZGVmaW5lIENDRENfQkxLX0RDX1NVQl9NQVNLCQkJMHgwM0ZGRgorI2RlZmluZSBDQ0RDX0JMS19DT01QX01BU0sJCQkweEZGCisjZGVmaW5lIENDRENfQkxLX0NPTVBfR0JfQ09NUF9TSElGVAkJOAorI2RlZmluZSBDQ0RDX0JMS19DT01QX0dSX0NPTVBfU0hJRlQJCTE2CisjZGVmaW5lIENDRENfQkxLX0NPTVBfUl9DT01QX1NISUZUCQkyNAorI2RlZmluZSBDQ0RDX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUJCSgxIDw8IDE1KQorI2RlZmluZSBDQ0RDX0ZQQ19FTkFCTEUJCQkJKDEgPDwgMTUpCisjZGVmaW5lIENDRENfRlBDX0RJU0FCTEUJCQkwCisjZGVmaW5lIENDRENfRlBDX0ZQQ19OVU1fTUFTSyAJCQkweDdGRkYKKyNkZWZpbmUgQ0NEQ19EQVRBX1BBQ0tfRU5BQkxFCQkJKDEgPDwgMTEpCisjZGVmaW5lIENDRENfRk1UQ0ZHX1ZQSU5fTUFTSwkJCTcKKyNkZWZpbmUgQ0NEQ19GTVRDRkdfVlBJTl9TSElGVAkJCTEyCisjZGVmaW5lIENDRENfRk1UX0hPUlpfRk1UTE5IX01BU0sJCTB4MUZGRgorI2RlZmluZSBDQ0RDX0ZNVF9IT1JaX0ZNVFNQSF9NQVNLCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRfSE9SWl9GTVRTUEhfU0hJRlQJCTE2CisjZGVmaW5lIENDRENfRk1UX1ZFUlRfRk1UTE5WX01BU0sJCTB4MUZGRgorI2RlZmluZSBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9NQVNLCQkweDFGRkYKKyNkZWZpbmUgQ0NEQ19GTVRfVkVSVF9GTVRTTFZfU0hJRlQJCTE2CisjZGVmaW5lIENDRENfVlBfT1VUX1ZFUlRfTlVNX01BU0sJCTB4M0ZGRgorI2RlZmluZSBDQ0RDX1ZQX09VVF9WRVJUX05VTV9TSElGVAkJMTcKKyNkZWZpbmUgQ0NEQ19WUF9PVVRfSE9SWl9OVU1fTUFTSwkJMHgxRkZGCisjZGVmaW5lIENDRENfVlBfT1VUX0hPUlpfTlVNX1NISUZUCQk0CisjZGVmaW5lIENDRENfVlBfT1VUX0hPUlpfU1RfTUFTSwkJMHhGCisjZGVmaW5lIENDRENfSE9SWl9JTkZPX1NQSF9TSElGVAkJMTYKKyNkZWZpbmUgQ0NEQ19WRVJUX1NUQVJUX1NMVjBfU0hJRlQJCTE2CisjZGVmaW5lIENDRENfVkRJTlRfVkRJTlQwX1NISUZUCQkJMTYKKyNkZWZpbmUgQ0NEQ19WRElOVF9WRElOVDFfTUFTSwkJCTB4RkZGRgorI2RlZmluZSBDQ0RDX1BQQ19SQVcJCQkJMQorI2RlZmluZSBDQ0RDX0RDU1VCX0RFRkFVTFRfVkFMCQkJMAorI2RlZmluZSBDQ0RDX0NMQU1QX0RFRkFVTFRfVkFMCQkJMAorI2RlZmluZSBDQ0RDX0VOQUJMRV9WSURFT19QT1JUCQkJMHg4MDAwCisjZGVmaW5lIENDRENfRElTQUJMRV9WSURFT19QT1JUCQkJMAorI2RlZmluZSBDQ0RDX0NPTFBUTl9WQUwJCQkJMHhCQjExQkIxMQorI2RlZmluZSBDQ0RDX1RXT19CWVRFU19QRVJfUElYRUwJCTIKKyNkZWZpbmUgQ0NEQ19JTlRFUkxBQ0VEX0lNQUdFX0lOVkVSVAkJMHg0QjZECisjZGVmaW5lIENDRENfSU5URVJMQUNFRF9OT19JTUFHRV9JTlZFUlQJCTB4MDI0OQorI2RlZmluZSBDQ0RDX1BST0dSRVNTSVZFX0lNQUdFX0lOVkVSVAkJMHg0MDAwCisjZGVmaW5lIENDRENfUFJPR1JFU1NJVkVfTk9fSU1BR0VfSU5WRVJUCTAKKyNkZWZpbmUgQ0NEQ19JTlRFUkxBQ0VEX0hFSUdIVF9TSElGVAkJMQorI2RlZmluZSBDQ0RDX1NZTl9NT0RFX0lOUE1PRF9TSElGVAkJMTIKKyNkZWZpbmUgQ0NEQ19TWU5fTU9ERV9JTlBNT0RfTUFTSwkJMworI2RlZmluZSBDQ0RDX1NZTl9NT0RFXzhCSVRTCQkJKDcgPDwgOCkKKyNkZWZpbmUgQ0NEQ19TWU5fRkxETU9ERV9NQVNLCQkJMQorI2RlZmluZSBDQ0RDX1NZTl9GTERNT0RFX1NISUZUCQkJNworI2RlZmluZSBDQ0RDX1JFQzY1NklGX0JUNjU2X0VOCQkJMworI2RlZmluZSBDQ0RDX1NZTl9NT0RFX1ZEX1BPTF9ORUdBVElWRQkJKDEgPDwgMikKKyNkZWZpbmUgQ0NEQ19DQ0RDRkdfWThQT1NfU0hJRlQJCQkxMQorI2RlZmluZSBDQ0RDX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRAkJMHgyNDkKKyNkZWZpbmUgQ0NEQ19OT19DVUxMSU5HCQkJCTB4ZmZmZjAwZmYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMmNlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKQEAgLTAsMCArMSwyMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogRHJpdmVyIG5hbWUgOiBWUEZFIENhcHR1cmUgZHJpdmVyCisgKiAgICBWUEZFIENhcHR1cmUgZHJpdmVyIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gY2FwdHVyZSBhbmQgc3RyZWFtIHZpZGVvCisgKiAgICBmcmFtZXMgb24gRGFWaW5jaSBTb0NzIChETTY0NDYsIERNMzU1IGV0YykgZnJvbSBhIFlVViBzb3VyY2Ugc3VjaCBhcworICogICAgVFZQNTE0NiBvciAgUmF3IEJheWVyIFJHQiBpbWFnZSBkYXRhIGZyb20gYW4gaW1hZ2Ugc2Vuc29yCisgKiAgICBzdWNoIGFzIE1pY3JvbnMnIE1UOVQwMDEsIE1UOVQwMzEgZXRjLgorICoKKyAqICAgIFRoZXNlIFNvQ3MgaGF2ZSwgaW4gY29tbW9uLCBhIFZpZGVvIFByb2Nlc3NpbmcgU3Vic3lzdGVtIChWUFNTKSB0aGF0CisgKiAgICBjb25zaXN0cyBvZiBhIFZpZGVvIFByb2Nlc3NpbmcgRnJvbnQgRW5kIChWUEZFKSBmb3IgY2FwdHVyaW5nCisgKiAgICB2aWRlby9yYXcgaW1hZ2UgZGF0YSBhbmQgVmlkZW8gUHJvY2Vzc2luZyBCYWNrIEVuZCAoVlBCRSkgZm9yIGRpc3BsYXlpbmcKKyAqICAgIFlVViBkYXRhIHRocm91Z2ggYW4gaW4tYnVpbHQgYW5hbG9nIGVuY29kZXIgb3IgRGlnaXRhbCBMQ0QgcG9ydC4gVGhpcworICogICAgZHJpdmVyIGlzIGZvciBjYXB0dXJlIHRocm91Z2ggVlBGRS4gQSB0eXBpY2FsIEVWTSB1c2luZyB0aGVzZSBTb0NzIGhhdmUKKyAqICAgIGZvbGxvd2luZyBoaWdoIGxldmVsIGNvbmZpZ3VyYXRpb24uCisgKgorICoKKyAqICAgIGRlY29kZXIoVFZQNTE0Ni8JCVlVVi8KKyAqIAkgICAgIE1UOVQwMDEpICAgLS0+ICBSYXcgQmF5ZXIgUkdCIC0tLT4gTVVYIC0+IFZQRkUgKENDREMvSVNJRikKKyAqICAgIAkJCQlkYXRhIGlucHV0ICAgICAgICAgICAgICB8ICAgICAgfAorICoJCQkJCQkJViAgICAgIHwKKyAqCQkJCQkJICAgICAgU0RSQU0gICAgfAorICoJCQkJCQkJICAgICAgIFYKKyAqCQkJCQkJCSAgIEltYWdlIFByb2Nlc3NvcgorICoJCQkJCQkJICAgICAgIHwKKyAqCQkJCQkJCSAgICAgICBWCisgKgkJCQkJCQkgICAgIFNEUkFNCisgKiAgICBUaGUgZGF0YSBmbG93IGhhcHBlbnMgZnJvbSBhIGRlY29kZXIgY29ubmVjdGVkIHRvIHRoZSBWUEZFIG92ZXIgYQorICogICAgWVVWIGVtYmVkZGVkIChCVC42NTYvQlQuMTEyMCkgb3Igc2VwYXJhdGUgc3luYyBvciByYXcgYmF5ZXIgcmdiIGludGVyZmFjZQorICogICAgYW5kIHRvIHRoZSBpbnB1dCBvZiBWUEZFIHRocm91Z2ggYW4gb3B0aW9uYWwgTVVYIChpZiBtb3JlIGlucHV0cyBhcmUKKyAqICAgIHRvIGJlIGludGVyZmFjZWQgb24gdGhlIEVWTSkuIFRoZSBpbnB1dCBkYXRhIGlzIGZpcnN0IHBhc3NlZCB0aHJvdWdoCisgKiAgICBDQ0RDIChDQ0QgQ29udHJvbGxlciwgYS5rLmEgSW1hZ2UgU2Vuc29yIEludGVyZmFjZSwgSVNJRikuIFRoZSBDQ0RDCisgKiAgICBkb2VzIHZlcnkgbGl0dGxlIG9yIG5vIHByb2Nlc3Npbmcgb24gWVVWIGRhdGEgYW5kIGRvZXMgcHJlLXByb2Nlc3MgUmF3CisgKiAgICBCYXllciBSR0IgZGF0YSB0aHJvdWdoIG1vZHVsZXMgc3VjaCBhcyBEZWZlY3QgUGl4ZWwgQ29ycmVjdGlvbiAoREZDKQorICogICAgQ29sb3IgU3BhY2UgQ29udmVyc2lvbiAoQ1NDKSwgZGF0YSBnYWluL29mZnNldCBldGMuIEFmdGVyIHRoaXMsIGRhdGEKKyAqICAgIGNhbiBiZSB3cml0dGVuIHRvIFNEUkFNIG9yIGNhbiBiZSBjb25uZWN0ZWQgdG8gdGhlIGltYWdlIHByb2Nlc3NpbmcKKyAqICAgIGJsb2NrIHN1Y2ggYXMgSVBJUEUgKG9uIERNMzU1IG9ubHkpLgorICoKKyAqICAgIEZlYXR1cmVzIHN1cHBvcnRlZAorICogIAkJLSBNTUFQIElPCisgKgkJLSBDYXB0dXJlIHVzaW5nIFRWUDUxNDYgb3ZlciBCVC42NTYKKyAqCQktIHN1cHBvcnQgZm9yIGludGVyZmFjaW5nIGRlY29kZXJzIHVzaW5nIHN1YiBkZXZpY2UgbW9kZWwKKyAqCQktIFdvcmsgd2l0aCBETTM1NSBvciBETTY0NDYgQ0NEQyB0byBkbyBSYXcgQmF5ZXIgUkdCL1lVVgorICoJCSAgZGF0YSBjYXB0dXJlIHRvIFNEUkFNLgorICogICAgVE9ETyBsaXN0CisgKgkJLSBTdXBwb3J0IG11bHRpcGxlIFJFUUJVRiBhZnRlciBvcGVuCisgKgkJLSBTdXBwb3J0IGZvciBkZS1hbGxvY2F0aW5nIGJ1ZmZlcnMgdGhyb3VnaCBSRVFCVUYKKyAqCQktIFN1cHBvcnQgZm9yIFJhdyBCYXllciBSR0IgY2FwdHVyZQorICoJCS0gU3VwcG9ydCBmb3IgY2hhaW5pbmcgSW1hZ2UgUHJvY2Vzc29yCisgKgkJLSBTdXBwb3J0IGZvciBzdGF0aWMgYWxsb2NhdGlvbiBvZiBidWZmZXJzCisgKgkJLSBTdXBwb3J0IGZvciBVU0VSUFRSIElPCisgKgkJLSBTdXBwb3J0IGZvciBTVFJFQU1PTiBiZWZvcmUgUUJVRgorICoJCS0gU3VwcG9ydCBmb3IgY29udHJvbCBpb2N0bHMKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBmZV9jYXB0dXJlLmg+CisjaW5jbHVkZSAiY2NkY19od19kZXZpY2UuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyB1MzIgbnVtYnVmZmVycyA9IDM7CitzdGF0aWMgdTMyIGJ1ZnNpemUgPSAoNzIwICogNTc2ICogMik7CisKK21vZHVsZV9wYXJhbShudW1idWZmZXJzLCB1aW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShidWZzaXplLCB1aW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhudW1idWZmZXJzLCAiYnVmZmVyIGNvdW50IChkZWZhdWx0OjMpIik7CitNT0RVTEVfUEFSTV9ERVNDKGJ1ZnNpemUsICJidWZmZXIgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdDo3MjAgeCA1NzYgeCAyKSIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIDAtMSIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlZQRkUgVmlkZW8gZm9yIExpbnV4IENhcHR1cmUgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworCisvKiBzdGFuZGFyZCBpbmZvcm1hdGlvbiAqLworc3RydWN0IHZwZmVfc3RhbmRhcmQgeworCXY0bDJfc3RkX2lkIHN0ZF9pZDsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKKwlzdHJ1Y3QgdjRsMl9mcmFjdCBwaXhlbGFzcGVjdDsKKwkvKiAwIC0gcHJvZ3Jlc3NpdmUsIDEgLSBpbnRlcmxhY2VkICovCisJaW50IGZyYW1lX2Zvcm1hdDsKK307CisKKy8qIGNjZGMgY29uZmlndXJhdGlvbiAqLworc3RydWN0IGNjZGNfY29uZmlnIHsKKwkvKiBUaGlzIG1ha2Ugc3VyZSB2cGZlIGlzIHByb2JlZCBhbmQgcmVhZHkgdG8gZ28gKi8KKwlpbnQgdnBmZV9wcm9iZWQ7CisJLyogbmFtZSBvZiBjY2RjIGRldmljZSAqLworCWNoYXIgbmFtZVszMl07CisJLyogZm9yIHN0b3JpbmcgbWVtIG1hcHMgZm9yIENDREMgKi8KKwlpbnQgY2NkY19hZGRyX3NpemU7CisJdm9pZCAqX19pb21lbSBjY2RjX2FkZHI7Cit9OworCisvKiBkYXRhIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgdnBmZV9jb25maWdfcGFyYW1zIGNvbmZpZ19wYXJhbXMgPSB7CisJLm1pbl9udW1idWZmZXJzID0gMywKKwkubnVtYnVmZmVycyA9IDMsCisJLm1pbl9idWZzaXplID0gNzIwICogNDgwICogMiwKKwkuZGV2aWNlX2J1ZnNpemUgPSA3MjAgKiA1NzYgKiAyLAorfTsKKworLyogY2NkYyBkZXZpY2UgcmVnaXN0ZXJlZCAqLworc3RhdGljIHN0cnVjdCBjY2RjX2h3X2RldmljZSAqY2NkY19kZXY7CisvKiBsb2NrIGZvciBhY2Nlc3NpbmcgY2NkYyBpbmZvcm1hdGlvbiAqLworc3RhdGljIERFRklORV9NVVRFWChjY2RjX2xvY2spOworLyogY2NkYyBjb25maWd1cmF0aW9uICovCitzdGF0aWMgc3RydWN0IGNjZGNfY29uZmlnICpjY2RjX2NmZzsKKworY29uc3Qgc3RydWN0IHZwZmVfc3RhbmRhcmQgdnBmZV9zdGFuZGFyZHNbXSA9IHsKKwl7VjRMMl9TVERfNTI1XzYwLCA3MjAsIDQ4MCwgezExLCAxMH0sIDF9LAorCXtWNEwyX1NURF82MjVfNTAsIDcyMCwgNTc2LCB7NTQsIDU5fSwgMX0sCit9OworCisvKiBVc2VkIHdoZW4gcmF3IEJheWVyIGltYWdlIGZyb20gY2NkYyBpcyBkaXJlY3RseSBjYXB0dXJlZCB0byBTRFJBTSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2cGZlX3BpeGVsX2Zvcm1hdCB2cGZlX3BpeF9mbXRzW10gPSB7CisJeworCQkuZm10ZGVzYyA9IHsKKwkJCS5pbmRleCA9IDAsCisJCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCS5kZXNjcmlwdGlvbiA9ICJCYXllciBHclJCR2IgOGJpdCBBLUxhdyBjb21wci4iLAorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJfSwKKwkJLmJwcCA9IDEsCisJfSwKKwl7CisJCS5mbXRkZXNjID0geworCQkJLmluZGV4ID0gMSwKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmRlc2NyaXB0aW9uID0gIkJheWVyIEdyUkJHYiAtIDE2Yml0IiwKKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjE2LAorCQl9LAorCQkuYnBwID0gMiwKKwl9LAorCXsKKwkJLmZtdGRlc2MgPSB7CisJCQkuaW5kZXggPSAyLAorCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZGVzY3JpcHRpb24gPSAiQmF5ZXIgR3JSQkdiIDhiaXQgRFBDTSBjb21wci4iLAorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNOCwKKwkJfSwKKwkJLmJwcCA9IDEsCisJfSwKKwl7CisJCS5mbXRkZXNjID0geworCQkJLmluZGV4ID0gMywKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmRlc2NyaXB0aW9uID0gIllDYkNyIDQ6MjoyIEludGVybGVhdmVkIFVZVlkiLAorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCX0sCisJCS5icHAgPSAyLAorCX0sCisJeworCQkuZm10ZGVzYyA9IHsKKwkJCS5pbmRleCA9IDQsCisJCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCS5kZXNjcmlwdGlvbiA9ICJZQ2JDciA0OjI6MiBJbnRlcmxlYXZlZCBZVVlWIiwKKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQl9LAorCQkuYnBwID0gMiwKKwl9LAorCXsKKwkJLmZtdGRlc2MgPSB7CisJCQkuaW5kZXggPSA1LAorCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZGVzY3JpcHRpb24gPSAiWS9DYkNyIDQ6MjowIC0gU2VtaSBwbGFuYXIiLAorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX05WMTIsCisJCX0sCisJCS5icHAgPSAxLAorCX0sCit9OworCisvKgorICogdnBmZV9sb29rdXBfcGl4X2Zvcm1hdCgpCisgKiBsb29rdXAgYW4gZW50cnkgaW4gdGhlIHZwZmUgcGl4IGZvcm1hdCB0YWJsZSBiYXNlZCBvbiBwaXhfZm9ybWF0CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBmZV9waXhlbF9mb3JtYXQgKnZwZmVfbG9va3VwX3BpeF9mb3JtYXQodTMyIHBpeF9mb3JtYXQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2cGZlX3BpeF9mbXRzKTsgaSsrKSB7CisJCWlmIChwaXhfZm9ybWF0ID09IHZwZmVfcGl4X2ZtdHNbaV0uZm10ZGVzYy5waXhlbGZvcm1hdCkKKwkJCXJldHVybiAmdnBmZV9waXhfZm10c1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiB2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlLiBDQ0RDIG1vZHVsZSBjYWxscyB0aGlzIHRvCisgKiByZWdpc3RlciB3aXRoIHZwZmUgY2FwdHVyZQorICovCitpbnQgdnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZShzdHJ1Y3QgY2NkY19od19kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlwcmludGsoS0VSTl9OT1RJQ0UgInZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2U6ICVzXG4iLCBkZXYtPm5hbWUpOworCisJQlVHX09OKCFkZXYtPmh3X29wcy5vcGVuKTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLmVuYWJsZSk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfaHdfaWZfcGFyYW1zKTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLmNvbmZpZ3VyZSk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfYnVmdHlwZSk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRfYnVmdHlwZSk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5lbnVtX3BpeCk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfZnJhbWVfZm9ybWF0KTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLmdldF9mcmFtZV9mb3JtYXQpOworCUJVR19PTighZGV2LT5od19vcHMuZ2V0X3BpeGVsX2Zvcm1hdCk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfcGl4ZWxfZm9ybWF0KTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLnNldF9wYXJhbXMpOworCUJVR19PTighZGV2LT5od19vcHMuc2V0X2ltYWdlX3dpbmRvdyk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRfaW1hZ2Vfd2luZG93KTsKKwlCVUdfT04oIWRldi0+aHdfb3BzLmdldF9saW5lX2xlbmd0aCk7CisJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRmYmFkZHIpOworCUJVR19PTighZGV2LT5od19vcHMuZ2V0ZmlkKTsKKworCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CisJaWYgKE5VTEwgPT0gY2NkY19jZmcpIHsKKwkJLyoKKwkJICogVE9ETy4gV2lsbCB0aGlzIGV2ZXIgaGFwcGVuPyBpZiBzbywgd2UgbmVlZCB0byBmaXggaXQuCisJCSAqIFByb2FiYWJseSB3ZSBuZWVkIHRvIGFkZCB0aGUgcmVxdWVzdCB0byBhIGxpbmtlZCBsaXN0IGFuZAorCQkgKiB3YWxrIHRocm91Z2ggaXQgZHVyaW5nIHZwZmUgcHJvYmUKKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAidnBmZSBjYXB0dXJlIG5vdCBpbml0aWFsaXplZFxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoc3RyY21wKGRldi0+bmFtZSwgY2NkY19jZmctPm5hbWUpKSB7CisJCS8qIGlnbm9yZSB0aGlzIGNjZGMgKi8KKwkJcmV0ID0gLTE7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWlmIChjY2RjX2RldikgeworCQlwcmludGsoS0VSTl9FUlIgImNjZGMgYWxyZWFkeSByZWdpc3RlcmVkXG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWNjZGNfZGV2ID0gZGV2OworCWRldi0+aHdfb3BzLnNldF9jY2RjX2Jhc2UoY2NkY19jZmctPmNjZGNfYWRkciwKKwkJCQkgIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSk7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UpOworCisvKgorICogdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlLiBDQ0RDIG1vZHVsZSBjYWxscyB0aGlzIHRvCisgKiB1bnJlZ2lzdGVyIHdpdGggdnBmZSBjYXB0dXJlCisgKi8KK3ZvaWQgdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKHN0cnVjdCBjY2RjX2h3X2RldmljZSAqZGV2KQoreworCWlmIChOVUxMID09IGRldikgeworCQlwcmludGsoS0VSTl9FUlIgImludmFsaWQgY2NkYyBkZXZpY2UgcHRyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ayhLRVJOX05PVElDRSAidnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlLCBkZXYtPm5hbWUgPSAlc1xuIiwKKwkJZGV2LT5uYW1lKTsKKworCWlmIChzdHJjbXAoZGV2LT5uYW1lLCBjY2RjX2NmZy0+bmFtZSkpIHsKKwkJLyogaWdub3JlIHRoaXMgY2NkYyAqLworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKKwljY2RjX2RldiA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0wodnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKTsKKworLyoKKyAqIHZwZmVfZ2V0X2NjZGNfaW1hZ2VfZm9ybWF0IC0gR2V0IGltYWdlIHBhcmFtZXRlcnMgYmFzZWQgb24gQ0NEQyBzZXR0aW5ncworICovCitzdGF0aWMgaW50IHZwZmVfZ2V0X2NjZGNfaW1hZ2VfZm9ybWF0KHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYsCisJCQkJIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0IGltYWdlX3dpbjsKKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKKwllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQ7CisKKwltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CisJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCWNjZGNfZGV2LT5od19vcHMuZ2V0X2ltYWdlX3dpbmRvdygmaW1hZ2Vfd2luKTsKKwlmLT5mbXQucGl4LndpZHRoID0gaW1hZ2Vfd2luLndpZHRoOworCWYtPmZtdC5waXguaGVpZ2h0ID0gaW1hZ2Vfd2luLmhlaWdodDsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGNjZGNfZGV2LT5od19vcHMuZ2V0X2xpbmVfbGVuZ3RoKCk7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmJ5dGVzcGVybGluZSAqCisJCQkJZi0+Zm10LnBpeC5oZWlnaHQ7CisJYnVmX3R5cGUgPSBjY2RjX2Rldi0+aHdfb3BzLmdldF9idWZ0eXBlKCk7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IGNjZGNfZGV2LT5od19vcHMuZ2V0X3BpeGVsX2Zvcm1hdCgpOworCWZybV9mbXQgPSBjY2RjX2Rldi0+aHdfb3BzLmdldF9mcmFtZV9mb3JtYXQoKTsKKwlpZiAoZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkKKwkJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwllbHNlIGlmIChmcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpIHsKKwkJaWYgKGJ1Zl90eXBlID09IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQpCisJCQlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQllbHNlIGlmIChidWZfdHlwZSA9PSBDQ0RDX0JVRlRZUEVfRkxEX1NFUEFSQVRFRCkKKwkJCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX1NFUV9UQjsKKwkJZWxzZSB7CisJCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBidWZfdHlwZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGZybV9mbXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGZlX2NvbmZpZ19jY2RjX2ltYWdlX2Zvcm1hdCgpCisgKiBGb3IgYSBwaXggZm9ybWF0LCBjb25maWd1cmUgY2NkYyB0byBzZXR1cCB0aGUgY2FwdHVyZQorICovCitzdGF0aWMgaW50IHZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0KHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjY2RjX2Rldi0+aHdfb3BzLnNldF9waXhlbF9mb3JtYXQoCisJCQl2cGZlX2Rldi0+Zm10LmZtdC5waXgucGl4ZWxmb3JtYXQpIDwgMCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJImNvdWxkbid0IHNldCBwaXggZm9ybWF0IGluIGNjZGNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogY29uZmlndXJlIHRoZSBpbWFnZSB3aW5kb3cgKi8KKwljY2RjX2Rldi0+aHdfb3BzLnNldF9pbWFnZV93aW5kb3coJnZwZmVfZGV2LT5jcm9wKTsKKworCXN3aXRjaCAodnBmZV9kZXYtPmZtdC5mbXQucGl4LmZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCS8qIGRvIG5vdGhpbmcsIHNpbmNlIGl0IGlzIGRlZmF1bHQgKi8KKwkJcmV0ID0gY2NkY19kZXYtPmh3X29wcy5zZXRfYnVmdHlwZSgKKwkJCQlDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVEKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX05PTkU6CisJCWZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRTsKKwkJLyogYnVmZmVyIHR5cGUgb25seSBhcHBsaWNhYmxlIGZvciBpbnRlcmxhY2VkIHNjYW4gKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX1NFUV9UQjoKKwkJcmV0ID0gY2NkY19kZXYtPmh3X29wcy5zZXRfYnVmdHlwZSgKKwkJCQlDQ0RDX0JVRlRZUEVfRkxEX1NFUEFSQVRFRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNldCB0aGUgZnJhbWUgZm9ybWF0ICovCisJaWYgKCFyZXQpCisJCXJldCA9IGNjZGNfZGV2LT5od19vcHMuc2V0X2ZyYW1lX2Zvcm1hdChmcm1fZm10KTsKKwlyZXR1cm4gcmV0OworfQorLyoKKyAqIHZwZmVfY29uZmlnX2ltYWdlX2Zvcm1hdCgpCisgKiBGb3IgYSBnaXZlbiBzdGFuZGFyZCwgdGhpcyBmdW5jdGlvbnMgc2V0cyB1cCB0aGUgZGVmYXVsdAorICogcGl4IGZvcm1hdCAmIGNyb3AgdmFsdWVzIGluIHRoZSB2cGZlIGRldmljZSBhbmQgY2NkYy4gIEl0IGZpcnN0CisgKiBzdGFydHMgd2l0aCBkZWZhdWx0cyBiYXNlZCB2YWx1ZXMgZnJvbSB0aGUgc3RhbmRhcmQgdGFibGUuCisgKiBJdCB0aGVuIGNoZWNrcyBpZiBzdWIgZGV2aWNlIHN1cHBvcnQgZ19mbXQgYW5kIHRoZW4gb3ZlcnJpZGUgdGhlCisgKiB2YWx1ZXMgYmFzZWQgb24gdGhhdC5TZXRzIGNyb3AgdmFsdWVzIHRvIG1hdGNoIHdpdGggc2NhbiByZXNvbHV0aW9uCisgKiBzdGFydGluZyBhdCAwLDAuIEl0IGNhbGxzIHZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0KCkgc2V0IHRoZQorICogdmFsdWVzIGluIGNjZGMKKyAqLworc3RhdGljIGludCB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiwKKwkJCQkgICAgY29uc3QgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvID0gdnBmZV9kZXYtPmN1cnJlbnRfc3ViZGV2OworCWludCBpLCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBmZV9zdGFuZGFyZHMpOyBpKyspIHsKKwkJaWYgKHZwZmVfc3RhbmRhcmRzW2ldLnN0ZF9pZCAmICpzdGRfaWQpIHsKKwkJCXZwZmVfZGV2LT5zdGRfaW5mby5hY3RpdmVfcGl4ZWxzID0KKwkJCQkJdnBmZV9zdGFuZGFyZHNbaV0ud2lkdGg7CisJCQl2cGZlX2Rldi0+c3RkX2luZm8uYWN0aXZlX2xpbmVzID0KKwkJCQkJdnBmZV9zdGFuZGFyZHNbaV0uaGVpZ2h0OworCQkJdnBmZV9kZXYtPnN0ZF9pbmZvLmZyYW1lX2Zvcm1hdCA9CisJCQkJCXZwZmVfc3RhbmRhcmRzW2ldLmZyYW1lX2Zvcm1hdDsKKwkJCXZwZmVfZGV2LT5zdGRfaW5kZXggPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSAgQVJSQVlfU0laRSh2cGZlX3N0YW5kYXJkcykpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgInN0YW5kYXJkIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2cGZlX2Rldi0+Y3JvcC50b3AgPSAwOworCXZwZmVfZGV2LT5jcm9wLmxlZnQgPSAwOworCXZwZmVfZGV2LT5jcm9wLndpZHRoID0gdnBmZV9kZXYtPnN0ZF9pbmZvLmFjdGl2ZV9waXhlbHM7CisJdnBmZV9kZXYtPmNyb3AuaGVpZ2h0ID0gdnBmZV9kZXYtPnN0ZF9pbmZvLmFjdGl2ZV9saW5lczsKKwl2cGZlX2Rldi0+Zm10LmZtdC5waXgud2lkdGggPSB2cGZlX2Rldi0+Y3JvcC53aWR0aDsKKwl2cGZlX2Rldi0+Zm10LmZtdC5waXguaGVpZ2h0ID0gdnBmZV9kZXYtPmNyb3AuaGVpZ2h0OworCisJLyogZmlyc3QgZmllbGQgYW5kIGZyYW1lIGZvcm1hdCBiYXNlZCBvbiBzdGFuZGFyZCBmcmFtZSBmb3JtYXQgKi8KKwlpZiAodnBmZV9kZXYtPnN0ZF9pbmZvLmZyYW1lX2Zvcm1hdCkgeworCQl2cGZlX2Rldi0+Zm10LmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCS8qIGFzc3VtZSBWNEwyX1BJWF9GTVRfVVlWWSBhcyBkZWZhdWx0ICovCisJCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCX0gZWxzZSB7CisJCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJLyogYXNzdW1lIFY0TDJfUElYX0ZNVF9TQkdHUjggKi8KKwkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKKwl9CisKKwkvKiBpZiBzdWIgZGV2aWNlIHN1cHBvcnRzIGdfZm10LCBvdmVycmlkZSB0aGUgZGVmYXVsdHMgKi8KKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJc2RpbmZvLT5ncnBfaWQsIHZpZGVvLCBnX2ZtdCwgJnZwZmVfZGV2LT5mbXQpOworCisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkiZXJyb3IgaW4gZ2V0dGluZyBnX2ZtdCBmcm9tIHN1YiBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFNldHMgdGhlIHZhbHVlcyBpbiBDQ0RDICovCisJcmV0ID0gdnBmZV9jb25maWdfY2NkY19pbWFnZV9mb3JtYXQodnBmZV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBVcGRhdGUgdGhlIHZhbHVlcyBvZiBzaXplaW1hZ2UgYW5kIGJ5dGVzcGVybGluZSAqLworCWlmICghcmV0KSB7CisJCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmUgPQorCQkJY2NkY19kZXYtPmh3X29wcy5nZXRfbGluZV9sZW5ndGgoKTsKKwkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LnNpemVpbWFnZSA9CisJCQl2cGZlX2Rldi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lICoKKwkJCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5oZWlnaHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9pbml0aWFsaXplX2RldmljZShzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQoreworCWludCByZXQgPSAwOworCisJLyogc2V0IGZpcnN0IGlucHV0IG9mIGN1cnJlbnQgc3ViZGV2aWNlIGFzIHRoZSBjdXJyZW50IGlucHV0ICovCisJdnBmZV9kZXYtPmN1cnJlbnRfaW5wdXQgPSAwOworCisJLyogc2V0IGRlZmF1bHQgc3RhbmRhcmQgKi8KKwl2cGZlX2Rldi0+c3RkX2luZGV4ID0gMDsKKworCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmb3JtYXQgaW5mb3JtYXRpb24gKi8KKwlyZXQgPSB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQodnBmZV9kZXYsCisJCQkJJnZwZmVfc3RhbmRhcmRzW3ZwZmVfZGV2LT5zdGRfaW5kZXhdLnN0ZF9pZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIG5vdyBvcGVuIHRoZSBjY2RjIGRldmljZSB0byBpbml0aWFsaXplIGl0ICovCisJbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKKwlpZiAoTlVMTCA9PSBjY2RjX2RldikgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiY2NkYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNjZGNfZGV2LT5vd25lcikpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkNvdWxkbid0IGxvY2sgY2NkYyBtb2R1bGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVubG9jazsKKwl9CisJcmV0ID0gY2NkY19kZXYtPmh3X29wcy5vcGVuKHZwZmVfZGV2LT5wZGV2KTsKKwlpZiAoIXJldCkKKwkJdnBmZV9kZXYtPmluaXRpYWxpemVkID0gMTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmNjZGNfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHZwZmVfb3BlbiA6IEl0IGNyZWF0ZXMgb2JqZWN0IG9mIGZpbGUgaGFuZGxlIHN0cnVjdHVyZSBhbmQKKyAqIHN0b3JlcyBpdCBpbiBwcml2YXRlX2RhdGEgIG1lbWJlciBvZiBmaWxlcG9pbnRlcgorICovCitzdGF0aWMgaW50IHZwZmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdnBmZV9maCAqZmg7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfb3BlblxuIik7CisKKwlpZiAoIXZwZmVfZGV2LT5jZmctPm51bV9zdWJkZXZzKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJObyBkZWNvZGVyIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgKi8KKwlmaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2cGZlX2ZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlIGhhbmRsZSBvYmplY3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogc3RvcmUgcG9pbnRlciB0byBmaCBpbiBwcml2YXRlX2RhdGEgbWVtYmVyIG9mIGZpbGUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+dnBmZV9kZXYgPSB2cGZlX2RldjsKKwltdXRleF9sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJLyogSWYgZGVjb2RlciBpcyBub3QgaW5pdGlhbGl6ZWQuIGluaXRpYWxpemUgaXQgKi8KKwlpZiAoIXZwZmVfZGV2LT5pbml0aWFsaXplZCkgeworCQlpZiAodnBmZV9pbml0aWFsaXplX2RldmljZSh2cGZlX2RldikpIHsKKwkJCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJLyogSW5jcmVtZW50IGRldmljZSB1c3JzIGNvdW50ZXIgKi8KKwl2cGZlX2Rldi0+dXNycysrOworCS8qIFNldCBpb19hbGxvd2VkIG1lbWJlciB0byBmYWxzZSAqLworCWZoLT5pb19hbGxvd2VkID0gMDsKKwkvKiBJbml0aWFsaXplIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgdG8gZGVmYXVsdCBwcmlvcml0eSAqLworCWZoLT5wcmlvID0gVjRMMl9QUklPUklUWV9VTlNFVDsKKwl2NGwyX3ByaW9fb3BlbigmdnBmZV9kZXYtPnByaW8sICZmaC0+cHJpbyk7CisJbXV0ZXhfdW5sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZwZmVfc2NoZWR1bGVfbmV4dF9idWZmZXIoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwl2cGZlX2Rldi0+bmV4dF9mcm0gPSBsaXN0X2VudHJ5KHZwZmVfZGV2LT5kbWFfcXVldWUubmV4dCwKKwkJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgcXVldWUpOworCWxpc3RfZGVsKCZ2cGZlX2Rldi0+bmV4dF9mcm0tPnF1ZXVlKTsKKwl2cGZlX2Rldi0+bmV4dF9mcm0tPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCWFkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZwZmVfZGV2LT5uZXh0X2ZybSk7CisJY2NkY19kZXYtPmh3X29wcy5zZXRmYmFkZHIoYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHZwZmVfcHJvY2Vzc19idWZmZXJfY29tcGxldGUoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsdWU7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnRpbWV2YWx1ZSk7CisJdnBmZV9kZXYtPmN1cl9mcm0tPnRzID0gdGltZXZhbHVlOworCXZwZmVfZGV2LT5jdXJfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJdnBmZV9kZXYtPmN1cl9mcm0tPnNpemUgPSB2cGZlX2Rldi0+Zm10LmZtdC5waXguc2l6ZWltYWdlOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdnBmZV9kZXYtPmN1cl9mcm0tPmRvbmUpOworCXZwZmVfZGV2LT5jdXJfZnJtID0gdnBmZV9kZXYtPm5leHRfZnJtOworfQorCisvKiBJU1IgZm9yIFZJTlQwKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2cGZlX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IGRldl9pZDsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBmaWQ7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgIlxuU3RhcnRpbmcgdnBmZV9pc3IuLi5cbiIpOworCWZpZWxkID0gdnBmZV9kZXYtPmZtdC5mbXQucGl4LmZpZWxkOworCisJLyogaWYgc3RyZWFtaW5nIG5vdCBzdGFydGVkLCBkb24ndCBkbyBhbnl0aGluZyAqLworCWlmICghdnBmZV9kZXYtPnN0YXJ0ZWQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCS8qIG9ubHkgZm9yIDY0NDYgdGhpcyB3aWxsIGJlIGFwcGxpY2FibGUgKi8KKwlpZiAoTlVMTCAhPSBjY2RjX2Rldi0+aHdfb3BzLnJlc2V0KQorCQljY2RjX2Rldi0+aHdfb3BzLnJlc2V0KCk7CisKKwlpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9OT05FKSB7CisJCS8qIGhhbmRsZSBwcm9ncmVzc2l2ZSBmcmFtZSBjYXB0dXJlICovCisJCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJImZyYW1lIGZvcm1hdCBpcyBwcm9ncmVzc2l2ZS4uLlxuIik7CisJCWlmICh2cGZlX2Rldi0+Y3VyX2ZybSAhPSB2cGZlX2Rldi0+bmV4dF9mcm0pCisJCQl2cGZlX3Byb2Nlc3NfYnVmZmVyX2NvbXBsZXRlKHZwZmVfZGV2KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8qIGludGVybGFjZWQgb3IgVEIgY2FwdHVyZSBjaGVjayB3aGljaCBmaWVsZCB3ZSBhcmUgaW4gaGFyZHdhcmUgKi8KKwlmaWQgPSBjY2RjX2Rldi0+aHdfb3BzLmdldGZpZCgpOworCisJLyogc3dpdGNoIHRoZSBzb2Z0d2FyZSBtYWludGFpbmVkIGZpZWxkIGlkICovCisJdnBmZV9kZXYtPmZpZWxkX2lkIF49IDE7CisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJmaWVsZCBpZCA9ICV4OiV4LlxuIiwKKwkJZmlkLCB2cGZlX2Rldi0+ZmllbGRfaWQpOworCWlmIChmaWQgPT0gdnBmZV9kZXYtPmZpZWxkX2lkKSB7CisJCS8qIHdlIGFyZSBpbi1zeW5jIGhlcmUsY29udGludWUgKi8KKwkJaWYgKGZpZCA9PSAwKSB7CisJCQkvKgorCQkJICogT25lIGZyYW1lIGlzIGp1c3QgYmVpbmcgY2FwdHVyZWQuIElmIHRoZSBuZXh0IGZyYW1lCisJCQkgKiBpcyBhdmFpbGFibGUsIHJlbGVhc2UgdGhlIGN1cnJlbnQgZnJhbWUgYW5kIG1vdmUgb24KKwkJCSAqLworCQkJaWYgKHZwZmVfZGV2LT5jdXJfZnJtICE9IHZwZmVfZGV2LT5uZXh0X2ZybSkKKwkJCQl2cGZlX3Byb2Nlc3NfYnVmZmVyX2NvbXBsZXRlKHZwZmVfZGV2KTsKKwkJCS8qCisJCQkgKiBiYXNlZCBvbiB3aGV0aGVyIHRoZSB0d28gZmllbGRzIGFyZSBzdG9yZWQKKwkJCSAqIGludGVybGVhdmVseSBvciBzZXBhcmF0ZWx5IGluIG1lbW9yeSwgcmVjb25maWd1cmUKKwkJCSAqIHRoZSBDQ0RDIG1lbW9yeSBhZGRyZXNzCisJCQkgKi8KKwkJCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX1NFUV9UQikgeworCQkJCWFkZHIgPQorCQkJCSAgdmlkZW9idWZfdG9fZG1hX2NvbnRpZyh2cGZlX2Rldi0+Y3VyX2ZybSk7CisJCQkJYWRkciArPSB2cGZlX2Rldi0+ZmllbGRfb2ZmOworCQkJCWNjZGNfZGV2LT5od19vcHMuc2V0ZmJhZGRyKGFkZHIpOworCQkJfQorCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJCS8qCisJCSAqIGlmIG9uZSBmaWVsZCBpcyBqdXN0IGJlaW5nIGNhcHR1cmVkIGNvbmZpZ3VyZQorCQkgKiB0aGUgbmV4dCBmcmFtZSBnZXQgdGhlIG5leHQgZnJhbWUgZnJvbSB0aGUgZW1wdHkKKwkJICogcXVldWUgaWYgbm8gZnJhbWUgaXMgYXZhaWxhYmxlIGhvbGQgb24gdG8gdGhlCisJCSAqIGN1cnJlbnQgYnVmZmVyCisJCSAqLworCQlzcGluX2xvY2soJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmdnBmZV9kZXYtPmRtYV9xdWV1ZSkgJiYKKwkJICAgIHZwZmVfZGV2LT5jdXJfZnJtID09IHZwZmVfZGV2LT5uZXh0X2ZybSkKKwkJCXZwZmVfc2NoZWR1bGVfbmV4dF9idWZmZXIodnBmZV9kZXYpOworCQlzcGluX3VubG9jaygmdnBmZV9kZXYtPmRtYV9xdWV1ZV9sb2NrKTsKKwl9IGVsc2UgaWYgKGZpZCA9PSAwKSB7CisJCS8qCisJCSAqIG91dCBvZiBzeW5jLiBSZWNvdmVyIGZyb20gYW55IGhhcmR3YXJlIG91dC1vZi1zeW5jLgorCQkgKiBNYXkgbG9vc2Ugb25lIGZyYW1lCisJCSAqLworCQl2cGZlX2Rldi0+ZmllbGRfaWQgPSBmaWQ7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogdmRpbnQxX2lzciAtIGlzciBoYW5kbGVyIGZvciBWSU5UMSBpbnRlcnJ1cHQgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2ZGludDFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gZGV2X2lkOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJcbkluc2lkZSB2ZGludDFfaXNyLi4uXG4iKTsKKworCS8qIGlmIHN0cmVhbWluZyBub3Qgc3RhcnRlZCwgZG9uJ3QgZG8gYW55dGhpbmcgKi8KKwlpZiAoIXZwZmVfZGV2LT5zdGFydGVkKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlzcGluX2xvY2soJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jayk7CisJaWYgKCh2cGZlX2Rldi0+Zm10LmZtdC5waXguZmllbGQgPT0gVjRMMl9GSUVMRF9OT05FKSAmJgorCSAgICAhbGlzdF9lbXB0eSgmdnBmZV9kZXYtPmRtYV9xdWV1ZSkgJiYKKwkgICAgdnBmZV9kZXYtPmN1cl9mcm0gPT0gdnBmZV9kZXYtPm5leHRfZnJtKQorCQl2cGZlX3NjaGVkdWxlX25leHRfYnVmZmVyKHZwZmVfZGV2KTsKKwlzcGluX3VubG9jaygmdnBmZV9kZXYtPmRtYV9xdWV1ZV9sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHZwZmVfZGV0YWNoX2lycShzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQoreworCWVudW0gY2NkY19mcm1mbXQgZnJhbWVfZm9ybWF0OworCisJZnJhbWVfZm9ybWF0ID0gY2NkY19kZXYtPmh3X29wcy5nZXRfZnJhbWVfZm9ybWF0KCk7CisJaWYgKGZyYW1lX2Zvcm1hdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkKKwkJZnJlZV9pcnEoSVJRX1ZESU5UMSwgdnBmZV9kZXYpOworfQorCitzdGF0aWMgaW50IHZwZmVfYXR0YWNoX2lycShzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQoreworCWVudW0gY2NkY19mcm1mbXQgZnJhbWVfZm9ybWF0OworCisJZnJhbWVfZm9ybWF0ID0gY2NkY19kZXYtPmh3X29wcy5nZXRfZnJhbWVfZm9ybWF0KCk7CisJaWYgKGZyYW1lX2Zvcm1hdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkgeworCQlyZXR1cm4gcmVxdWVzdF9pcnEodnBmZV9kZXYtPmNjZGNfaXJxMSwgdmRpbnQxX2lzciwKKwkJCQkgICAgSVJRRl9ESVNBQkxFRCwgInZwZmVfY2FwdHVyZTEiLAorCQkJCSAgICB2cGZlX2Rldik7CisJfQorCXJldHVybiAwOworfQorCisvKiB2cGZlX3N0b3BfY2NkY19jYXB0dXJlOiBzdG9wIHN0cmVhbWluZyBpbiBjY2RjL2lzaWYgKi8KK3N0YXRpYyB2b2lkIHZwZmVfc3RvcF9jY2RjX2NhcHR1cmUoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwl2cGZlX2Rldi0+c3RhcnRlZCA9IDA7CisJY2NkY19kZXYtPmh3X29wcy5lbmFibGUoMCk7CisJaWYgKGNjZGNfZGV2LT5od19vcHMuZW5hYmxlX291dF90b19zZHJhbSkKKwkJY2NkY19kZXYtPmh3X29wcy5lbmFibGVfb3V0X3RvX3NkcmFtKDApOworfQorCisvKgorICogdnBmZV9yZWxlYXNlIDogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGJ1ZmZlciBxdWV1ZSwgZnJlZXMgdGhlCisgKiBidWZmZXJzIGFuZCB0aGUgdnBmZSBmaWxlICBoYW5kbGUKKyAqLworc3RhdGljIGludCB2cGZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IHJldDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9yZWxlYXNlXG4iKTsKKworCS8qIEdldCB0aGUgZGV2aWNlIGxvY2sgKi8KKwltdXRleF9sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJLyogaWYgdGhpcyBpbnN0YW5jZSBpcyBkb2luZyBJTyAqLworCWlmIChmaC0+aW9fYWxsb3dlZCkgeworCQlpZiAodnBmZV9kZXYtPnN0YXJ0ZWQpIHsKKwkJCXNkaW5mbyA9IHZwZmVfZGV2LT5jdXJyZW50X3N1YmRldjsKKwkJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkJCQkJIHNkaW5mby0+Z3JwX2lkLAorCQkJCQkJCSB2aWRlbywgc19zdHJlYW0sIDApOworCQkJaWYgKHJldCAmJiAocmV0ICE9IC1FTk9JT0NUTENNRCkpCisJCQkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCQkic3RyZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsKKwkJCXZwZmVfc3RvcF9jY2RjX2NhcHR1cmUodnBmZV9kZXYpOworCQkJdnBmZV9kZXRhY2hfaXJxKHZwZmVfZGV2KTsKKwkJCXZpZGVvYnVmX3N0cmVhbW9mZigmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZSk7CisJCX0KKwkJdnBmZV9kZXYtPmlvX3VzcnMgPSAwOworCQl2cGZlX2Rldi0+bnVtYnVmZmVycyA9IGNvbmZpZ19wYXJhbXMubnVtYnVmZmVyczsKKwl9CisKKwkvKiBEZWNyZW1lbnQgZGV2aWNlIHVzcnMgY291bnRlciAqLworCXZwZmVfZGV2LT51c3JzLS07CisJLyogQ2xvc2UgdGhlIHByaW9yaXR5ICovCisJdjRsMl9wcmlvX2Nsb3NlKCZ2cGZlX2Rldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGZpbGUgaGFuZGxlICovCisJaWYgKCF2cGZlX2Rldi0+dXNycykgeworCQl2cGZlX2Rldi0+aW5pdGlhbGl6ZWQgPSAwOworCQlpZiAoY2NkY19kZXYtPmh3X29wcy5jbG9zZSkKKwkJCWNjZGNfZGV2LT5od19vcHMuY2xvc2UodnBmZV9kZXYtPnBkZXYpOworCQltb2R1bGVfcHV0KGNjZGNfZGV2LT5vd25lcik7CisJfQorCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJLyogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIHRvIGZpbGUgaGFuZGxlIG9iamVjdCAqLworCWtmcmVlKGZoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwZmVfbW1hcCA6IEl0IGlzIHVzZWQgdG8gbWFwIGtlcm5lbCBzcGFjZSBidWZmZXJzCisgKiBpbnRvIHVzZXIgc3BhY2VzCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwkvKiBHZXQgdGhlIGRldmljZSBvYmplY3QgYW5kIGZpbGUgaGFuZGxlIG9iamVjdCAqLworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX21tYXBcbiIpOworCisJcmV0dXJuIHZpZGVvYnVmX21tYXBfbWFwcGVyKCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlLCB2bWEpOworfQorCisvKgorICogdnBmZV9wb2xsOiBJdCBpcyB1c2VkIGZvciBzZWxlY3QvcG9sbCBzeXN0ZW0gY2FsbAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHZwZmVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9wb2xsXG4iKTsKKworCWlmICh2cGZlX2Rldi0+c3RhcnRlZCkKKwkJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGUsCisJCQkJCSAgICAmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZSwgd2FpdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHZwZmUgY2FwdHVyZSBkcml2ZXIgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZwZmVfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZwZmVfb3BlbiwKKwkucmVsZWFzZSA9IHZwZmVfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsCisJLm1tYXAgPSB2cGZlX21tYXAsCisJLnBvbGwgPSB2cGZlX3BvbGwKK307CisKKy8qCisgKiB2cGZlX2NoZWNrX2Zvcm1hdCgpCisgKiBUaGlzIGZ1bmN0aW9uIGFkanVzdCB0aGUgaW5wdXQgcGl4ZWwgZm9ybWF0IGFzIHBlciBoYXJkd2FyZQorICogY2FwYWJpbGl0aWVzIGFuZCB1cGRhdGUgdGhlIHNhbWUgaW4gcGl4Zm10LgorICogRm9sbG93aW5nIGFsZ29yaXRobSB1c2VkIDotCisgKgorICoJSWYgZ2l2ZW4gcGl4Zm9ybWF0IGlzIG5vdCBpbiB0aGUgdnBmZSBsaXN0IG9mIHBpeCBmb3JtYXRzIG9yIG5vdAorICoJc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSwgY3VycmVudCB2YWx1ZSBvZiBwaXhmb3JtYXQgaW4gdGhlIGRldmljZQorICoJaXMgdXNlZAorICoJSWYgZ2l2ZW4gZmllbGQgaXMgbm90IHN1cHBvcnRlZCwgdGhlbiBjdXJyZW50IGZpZWxkIGlzIHVzZWQuIElmIGZpZWxkCisgKglpcyBkaWZmZXJlbnQgZnJvbSBjdXJyZW50LCB0aGVuIGl0IGlzIG1hdGNoZWQgd2l0aCB0aGF0IGZyb20gc3ViIGRldmljZS4KKyAqCU1pbmltdW0gaGVpZ2h0IGlzIDIgbGluZXMgZm9yIGludGVybGFjZWQgb3IgdGIgZmllbGQgYW5kIDEgbGluZSBmb3IKKyAqCXByb2dyZXNzaXZlLiBNYXhpbXVtIGhlaWdodCBpcyBjbGFtcGVkIHRvIGFjdGl2ZSBhY3RpdmUgbGluZXMgb2Ygc2NhbgorICoJTWluaW11bSB3aWR0aCBpcyAzMiBieXRlcyBpbiBtZW1vcnkgYW5kIHdpZHRoIGlzIGNsYW1wZWQgdG8gYWN0aXZlCisgKglwaXhlbHMgb2Ygc2Nhbi4KKyAqCWJ5dGVzcGVybGluZSBpcyBhIG11bHRpcGxlIG9mIDMyLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZwZmVfcGl4ZWxfZm9ybWF0ICoKKwl2cGZlX2NoZWNrX2Zvcm1hdChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2LAorCQkJICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQpCit7CisJdTMyIG1pbl9oZWlnaHQgPSAxLCBtaW5fd2lkdGggPSAzMiwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OworCWNvbnN0IHN0cnVjdCB2cGZlX3BpeGVsX2Zvcm1hdCAqdnBmZV9waXhfZm10OworCXUzMiBwaXg7CisJaW50IHRlbXAsIGZvdW5kOworCisJdnBmZV9waXhfZm10ID0gdnBmZV9sb29rdXBfcGl4X2Zvcm1hdChwaXhmbXQtPnBpeGVsZm9ybWF0KTsKKwlpZiAoTlVMTCA9PSB2cGZlX3BpeF9mbXQpIHsKKwkJLyoKKwkJICogdXNlIGN1cnJlbnQgcGl4ZWwgZm9ybWF0IGluIHRoZSB2cGZlIGRldmljZS4gV2UKKwkJICogd2lsbCBmaW5kIHRoaXMgcGl4IGZvcm1hdCBpbiB0aGUgdGFibGUKKwkJICovCisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSB2cGZlX2Rldi0+Zm10LmZtdC5waXgucGl4ZWxmb3JtYXQ7CisJCXZwZmVfcGl4X2ZtdCA9IHZwZmVfbG9va3VwX3BpeF9mb3JtYXQocGl4Zm10LT5waXhlbGZvcm1hdCk7CisJfQorCisJLyogY2hlY2sgaWYgaHcgc3VwcG9ydHMgaXQgKi8KKwl0ZW1wID0gMDsKKwlmb3VuZCA9IDA7CisJd2hpbGUgKGNjZGNfZGV2LT5od19vcHMuZW51bV9waXgoJnBpeCwgdGVtcCkgPj0gMCkgeworCQlpZiAodnBmZV9waXhfZm10LT5mbXRkZXNjLnBpeGVsZm9ybWF0ID09IHBpeCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJdGVtcCsrOworCX0KKworCWlmICghZm91bmQpIHsKKwkJLyogdXNlIGN1cnJlbnQgcGl4ZWwgZm9ybWF0ICovCisJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSB2cGZlX2Rldi0+Zm10LmZtdC5waXgucGl4ZWxmb3JtYXQ7CisJCS8qCisJCSAqIFNpbmNlIHRoaXMgaXMgY3VycmVudGx5IHVzZWQgaW4gdGhlIHZwZmUgZGV2aWNlLCB3ZQorCQkgKiB3aWxsIGZpbmQgdGhpcyBwaXggZm9ybWF0IGluIHRoZSB0YWJsZQorCQkgKi8KKwkJdnBmZV9waXhfZm10ID0gdnBmZV9sb29rdXBfcGl4X2Zvcm1hdChwaXhmbXQtPnBpeGVsZm9ybWF0KTsKKwl9CisKKwkvKiBjaGVjayB3aGF0IGZpZWxkIGZvcm1hdCBpcyBzdXBwb3J0ZWQgKi8KKwlpZiAocGl4Zm10LT5maWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgeworCQkvKiBpZiBmaWVsZCBpcyBhbnksIHVzZSBjdXJyZW50IHZhbHVlIGFzIGRlZmF1bHQgKi8KKwkJcGl4Zm10LT5maWVsZCA9IHZwZmVfZGV2LT5mbXQuZm10LnBpeC5maWVsZDsKKwl9CisKKwkvKgorCSAqIGlmIGZpZWxkIGlzIG5vdCBzYW1lIGFzIGN1cnJlbnQgZmllbGQgaW4gdGhlIHZwZmUgZGV2aWNlCisJICogdHJ5IG1hdGNoaW5nIHRoZSBmaWVsZCB3aXRoIHRoZSBzdWIgZGV2aWNlIGZpZWxkCisJICovCisJaWYgKHZwZmVfZGV2LT5mbXQuZm10LnBpeC5maWVsZCAhPSBwaXhmbXQtPmZpZWxkKSB7CisJCS8qCisJCSAqIElmIGZpZWxkIHZhbHVlIGlzIG5vdCBpbiB0aGUgc3VwcG9ydGVkIGZpZWxkcywgdXNlIGN1cnJlbnQKKwkJICogZmllbGQgdXNlZCBpbiB0aGUgZGV2aWNlIGFzIGRlZmF1bHQKKwkJICovCisJCXN3aXRjaCAocGl4Zm10LT5maWVsZCkgeworCQljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKKwkJY2FzZSBWNEwyX0ZJRUxEX1NFUV9UQjoKKwkJCS8qIGlmIHN1YiBkZXZpY2UgaXMgc3VwcG9ydGluZyBwcm9ncmVzc2l2ZSwgdXNlIHRoYXQgKi8KKwkJCWlmICghdnBmZV9kZXYtPnN0ZF9pbmZvLmZyYW1lX2Zvcm1hdCkKKwkJCQlwaXhmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9GSUVMRF9OT05FOgorCQkJaWYgKHZwZmVfZGV2LT5zdGRfaW5mby5mcmFtZV9mb3JtYXQpCisJCQkJcGl4Zm10LT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiB1c2UgY3VycmVudCBmaWVsZCBhcyBkZWZhdWx0ICovCisJCQlwaXhmbXQtPmZpZWxkID0gdnBmZV9kZXYtPmZtdC5mbXQucGl4LmZpZWxkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBOb3cgYWRqdXN0IGltYWdlIHJlc29sdXRpb25zIHN1cHBvcnRlZCAqLworCWlmIChwaXhmbXQtPmZpZWxkID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fAorCSAgICBwaXhmbXQtPmZpZWxkID09IFY0TDJfRklFTERfU0VRX1RCKQorCQltaW5faGVpZ2h0ID0gMjsKKworCW1heF93aWR0aCA9IHZwZmVfZGV2LT5zdGRfaW5mby5hY3RpdmVfcGl4ZWxzOworCW1heF9oZWlnaHQgPSB2cGZlX2Rldi0+c3RkX2luZm8uYWN0aXZlX2xpbmVzOworCW1pbl93aWR0aCAvPSB2cGZlX3BpeF9mbXQtPmJwcDsKKworCXY0bDJfaW5mbygmdnBmZV9kZXYtPnY0bDJfZGV2LCAid2lkdGggPSAlZCwgaGVpZ2h0ID0gJWQsIGJwcCA9ICVkXG4iLAorCQkgIHBpeGZtdC0+d2lkdGgsIHBpeGZtdC0+aGVpZ2h0LCB2cGZlX3BpeF9mbXQtPmJwcCk7CisKKwlwaXhmbXQtPndpZHRoID0gY2xhbXAoKHBpeGZtdC0+d2lkdGgpLCBtaW5fd2lkdGgsIG1heF93aWR0aCk7CisJcGl4Zm10LT5oZWlnaHQgPSBjbGFtcCgocGl4Zm10LT5oZWlnaHQpLCBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0KTsKKworCS8qIElmIGludGVybGFjZWQsIGFkanVzdCBoZWlnaHQgdG8gYmUgYSBtdWx0aXBsZSBvZiAyICovCisJaWYgKHBpeGZtdC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEKQorCQlwaXhmbXQtPmhlaWdodCAmPSAofjEpOworCS8qCisJICogcmVjYWxjdWxhdGUgYnl0ZXNwZXJsaW5lIGFuZCBzaXplaW1hZ2Ugc2luY2Ugd2lkdGgKKwkgKiBhbmQgaGVpZ2h0IG1pZ2h0IGhhdmUgY2hhbmdlZAorCSAqLworCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gKCgocGl4Zm10LT53aWR0aCAqIHZwZmVfcGl4X2ZtdC0+YnBwKSArIDMxKQorCQkJCSYgfjMxKTsKKwlpZiAocGl4Zm10LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTlYxMikKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPQorCQkJcGl4Zm10LT5ieXRlc3BlcmxpbmUgKiBwaXhmbXQtPmhlaWdodCArCisJCQkoKHBpeGZtdC0+Ynl0ZXNwZXJsaW5lICogcGl4Zm10LT5oZWlnaHQpID4+IDEpOworCWVsc2UKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0OworCisJdjRsMl9pbmZvKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJhZGp1c3RlZCB3aWR0aCA9ICVkLCBoZWlnaHQgPSIKKwkJICIgJWQsIGJwcCA9ICVkLCBieXRlc3BlcmxpbmUgPSAlZCwgc2l6ZWltYWdlID0gJWRcbiIsCisJCSBwaXhmbXQtPndpZHRoLCBwaXhmbXQtPmhlaWdodCwgdnBmZV9waXhfZm10LT5icHAsCisJCSBwaXhmbXQtPmJ5dGVzcGVybGluZSwgcGl4Zm10LT5zaXplaW1hZ2UpOworCXJldHVybiB2cGZlX3BpeF9mbXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgICAgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3F1ZXJ5Y2FwXG4iKTsKKworCWNhcC0+dmVyc2lvbiA9IFZQRkVfQ0FQVFVSRV9WRVJTSU9OX0NPREU7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCXN0cmxjcHkoY2FwLT5kcml2ZXIsIENBUFRVUkVfRFJWX05BTUUsIHNpemVvZihjYXAtPmRyaXZlcikpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgIlZQRkUiLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCXN0cmxjcHkoY2FwLT5jYXJkLCB2cGZlX2Rldi0+Y2ZnLT5jYXJkX25hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGZlX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldCA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfZ19mbXRfdmlkX2NhcFxuIik7CisJLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgZm9ybWF0ICovCisJKmZtdCA9IHZwZmVfZGV2LT5mbXQ7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGZlX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJCSAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwljb25zdCBzdHJ1Y3QgdnBmZV9waXhlbF9mb3JtYXQgKnBpeF9mbXQ7CisJaW50IHRlbXBfaW5kZXg7CisJdTMyIHBpeDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9lbnVtX2ZtdF92aWRfY2FwXG4iKTsKKworCWlmIChjY2RjX2Rldi0+aHdfb3BzLmVudW1fcGl4KCZwaXgsIGZtdC0+aW5kZXgpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBmb3JtYXQgKi8KKwlwaXhfZm10ID0gdnBmZV9sb29rdXBfcGl4X2Zvcm1hdChwaXgpOworCWlmIChOVUxMICE9IHBpeF9mbXQpIHsKKwkJdGVtcF9pbmRleCA9IGZtdC0+aW5kZXg7CisJCSpmbXQgPSBwaXhfZm10LT5mbXRkZXNjOworCQlmbXQtPmluZGV4ID0gdGVtcF9pbmRleDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZwZmVfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwljb25zdCBzdHJ1Y3QgdnBmZV9waXhlbF9mb3JtYXQgKnBpeF9mbXRzOworCWludCByZXQgPSAwOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3NfZm10X3ZpZF9jYXBcbiIpOworCisJLyogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmICh2cGZlX2Rldi0+c3RhcnRlZCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiU3RyZWFtaW5nIGlzIHN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIENoZWNrIGZvciB2YWxpZCBmcmFtZSBmb3JtYXQgKi8KKwlwaXhfZm10cyA9IHZwZmVfY2hlY2tfZm9ybWF0KHZwZmVfZGV2LCAmZm10LT5mbXQucGl4KTsKKworCWlmIChOVUxMID09IHBpeF9mbXRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHN0b3JlIHRoZSBwaXhlbCBmb3JtYXQgaW4gdGhlIGRldmljZSAgb2JqZWN0ICovCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2cGZlX2Rldi0+bG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEZpcnN0IGRldGFjaCBhbnkgSVJRIGlmIGN1cnJlbnRseSBhdHRhY2hlZCAqLworCXZwZmVfZGV0YWNoX2lycSh2cGZlX2Rldik7CisJdnBmZV9kZXYtPmZtdCA9ICpmbXQ7CisJLyogc2V0IGltYWdlIGNhcHR1cmUgcGFyYW1ldGVycyBpbiB0aGUgY2NkYyAqLworCXJldCA9IHZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0KHZwZmVfZGV2KTsKKwltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWNvbnN0IHN0cnVjdCB2cGZlX3BpeGVsX2Zvcm1hdCAqcGl4X2ZtdHM7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfdHJ5X2ZtdF92aWRfY2FwXG4iKTsKKworCXBpeF9mbXRzID0gdnBmZV9jaGVja19mb3JtYXQodnBmZV9kZXYsICZmLT5mbXQucGl4KTsKKwlpZiAoTlVMTCA9PSBwaXhfZm10cykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGZlX2dldF9zdWJkZXZfaW5wdXRfaW5kZXggLSBHZXQgc3ViZGV2IGluZGV4IGFuZCBzdWJkZXYgaW5wdXQgaW5kZXggZm9yIGEKKyAqIGdpdmVuIGFwcCBpbnB1dCBpbmRleAorICovCitzdGF0aWMgaW50IHZwZmVfZ2V0X3N1YmRldl9pbnB1dF9pbmRleChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2LAorCQkJCQlpbnQgKnN1YmRldl9pbmRleCwKKwkJCQkJaW50ICpzdWJkZXZfaW5wdXRfaW5kZXgsCisJCQkJCWludCBhcHBfaW5wdXRfaW5kZXgpCit7CisJc3RydWN0IHZwZmVfY29uZmlnICpjZmcgPSB2cGZlX2Rldi0+Y2ZnOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX3N1YmRldnM7IGkrKykgeworCQlzZGluZm8gPSAmY2ZnLT5zdWJfZGV2c1tpXTsKKwkJaWYgKGFwcF9pbnB1dF9pbmRleCA8IChqICsgc2RpbmZvLT5udW1faW5wdXRzKSkgeworCQkJKnN1YmRldl9pbmRleCA9IGk7CisJCQkqc3ViZGV2X2lucHV0X2luZGV4ID0gYXBwX2lucHV0X2luZGV4IC0gajsKKwkJCXJldHVybiAwOworCQl9CisJCWogKz0gc2RpbmZvLT5udW1faW5wdXRzOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHZwZmVfZ2V0X2FwcF9pbnB1dCAtIEdldCBhcHAgaW5wdXQgaW5kZXggZm9yIGEgZ2l2ZW4gc3ViZGV2IGlucHV0IGluZGV4CisgKiBkcml2ZXIgc3RvcmVzIHRoZSBpbnB1dCBpbmRleCBvZiB0aGUgY3VycmVudCBzdWIgZGV2aWNlIGFuZCB0cmFuc2xhdGUgaXQKKyAqIHdoZW4gYXBwbGljYXRpb24gcmVxdWVzdCB0aGUgY3VycmVudCBpbnB1dAorICovCitzdGF0aWMgaW50IHZwZmVfZ2V0X2FwcF9pbnB1dF9pbmRleChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2LAorCQkJCSAgICBpbnQgKmFwcF9pbnB1dF9pbmRleCkKK3sKKwlzdHJ1Y3QgdnBmZV9jb25maWcgKmNmZyA9IHZwZmVfZGV2LT5jZmc7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlpbnQgaSwgaiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5udW1fc3ViZGV2czsgaSsrKSB7CisJCXNkaW5mbyA9ICZjZmctPnN1Yl9kZXZzW2ldOworCQlpZiAoIXN0cmNtcChzZGluZm8tPm5hbWUsIHZwZmVfZGV2LT5jdXJyZW50X3N1YmRldi0+bmFtZSkpIHsKKwkJCWlmICh2cGZlX2Rldi0+Y3VycmVudF9pbnB1dCA+PSBzZGluZm8tPm51bV9pbnB1dHMpCisJCQkJcmV0dXJuIC0xOworCQkJKmFwcF9pbnB1dF9pbmRleCA9IGogKyB2cGZlX2Rldi0+Y3VycmVudF9pbnB1dDsKKwkJCXJldHVybiAwOworCQl9CisJCWogKz0gc2RpbmZvLT5udW1faW5wdXRzOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2cGZlX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJIHN0cnVjdCB2NGwyX2lucHV0ICppbnApCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlpbnQgc3ViZGV2LCBpbmRleCA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfZW51bV9pbnB1dFxuIik7CisKKwlpZiAodnBmZV9nZXRfc3ViZGV2X2lucHV0X2luZGV4KHZwZmVfZGV2LAorCQkJCQkmc3ViZGV2LAorCQkJCQkmaW5kZXgsCisJCQkJCWlucC0+aW5kZXgpIDwgMCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiaW5wdXQgaW5mb3JtYXRpb24gbm90IGZvdW5kIgorCQkJICIgZm9yIHRoZSBzdWJkZXZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2RpbmZvID0gJnZwZmVfZGV2LT5jZmctPnN1Yl9kZXZzW3N1YmRldl07CisJbWVtY3B5KGlucCwgJnNkaW5mby0+aW5wdXRzW2luZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2dfaW5wdXRcbiIpOworCisJcmV0dXJuIHZwZmVfZ2V0X2FwcF9pbnB1dF9pbmRleCh2cGZlX2RldiwgaW5kZXgpOworfQorCisKK3N0YXRpYyBpbnQgdnBmZV9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlpbnQgc3ViZGV2X2luZGV4LCBpbnBfaW5kZXg7CisJc3RydWN0IHZwZmVfcm91dGUgKnJvdXRlOworCXUzMiBpbnB1dCA9IDAsIG91dHB1dCA9IDA7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfc19pbnB1dFxuIik7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZwZmVfZGV2LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBJZiBzdHJlYW1pbmcgaXMgc3RhcnRlZCByZXR1cm4gZGV2aWNlIGJ1c3kKKwkgKiBlcnJvcgorCSAqLworCWlmICh2cGZlX2Rldi0+c3RhcnRlZCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiU3RyZWFtaW5nIGlzIG9uXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQorCisJaWYgKHZwZmVfZ2V0X3N1YmRldl9pbnB1dF9pbmRleCh2cGZlX2RldiwKKwkJCQkJJnN1YmRldl9pbmRleCwKKwkJCQkJJmlucF9pbmRleCwKKwkJCQkJaW5kZXgpIDwgMCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiaW52YWxpZCBpbnB1dCBpbmRleFxuIik7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisKKwlzZGluZm8gPSAmdnBmZV9kZXYtPmNmZy0+c3ViX2RldnNbc3ViZGV2X2luZGV4XTsKKwlyb3V0ZSA9ICZzZGluZm8tPnJvdXRlc1tpbnBfaW5kZXhdOworCWlmIChyb3V0ZSAmJiBzZGluZm8tPmNhbl9yb3V0ZSkgeworCQlpbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwkJb3V0cHV0ID0gcm91dGUtPm91dHB1dDsKKwl9CisKKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCBzZGluZm8tPmdycF9pZCwKKwkJCQkJIHZpZGVvLCBzX3JvdXRpbmcsIGlucHV0LCBvdXRwdXQsIDApOworCisJaWYgKHJldCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJInZwZmVfZG9pb2N0bDplcnJvciBpbiBzZXR0aW5nIGlucHV0IGluIGRlY29kZXJcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQorCXZwZmVfZGV2LT5jdXJyZW50X3N1YmRldiA9IHNkaW5mbzsKKwl2cGZlX2Rldi0+Y3VycmVudF9pbnB1dCA9IGluZGV4OworCXZwZmVfZGV2LT5zdGRfaW5kZXggPSAwOworCisJLyogc2V0IHRoZSBidXMvaW50ZXJmYWNlIHBhcmFtZXRlciBmb3IgdGhlIHN1YiBkZXZpY2UgaW4gY2NkYyAqLworCXJldCA9IGNjZGNfZGV2LT5od19vcHMuc2V0X2h3X2lmX3BhcmFtcygmc2RpbmZvLT5jY2RjX2lmX3BhcmFtcyk7CisJaWYgKHJldCkKKwkJZ290byB1bmxvY2tfb3V0OworCisJLyogc2V0IHRoZSBkZWZhdWx0IGltYWdlIHBhcmFtZXRlcnMgaW4gdGhlIGRldmljZSAqLworCXJldCA9IHZwZmVfY29uZmlnX2ltYWdlX2Zvcm1hdCh2cGZlX2RldiwKKwkJCQkmdnBmZV9zdGFuZGFyZHNbdnBmZV9kZXYtPnN0ZF9pbmRleF0uc3RkX2lkKTsKK3VubG9ja19vdXQ6CisJbXV0ZXhfdW5sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGZlX3F1ZXJ5c3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkX2lkKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IHJldCA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcXVlcnlzdGRcbiIpOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2cGZlX2Rldi0+bG9jayk7CisJc2RpbmZvID0gdnBmZV9kZXYtPmN1cnJlbnRfc3ViZGV2OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyogQ2FsbCBxdWVyeXN0ZCBmdW5jdGlvbiBvZiBkZWNvZGVyIGRldmljZSAqLworCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsIHNkaW5mby0+Z3JwX2lkLAorCQkJCQkgdmlkZW8sIHF1ZXJ5c3RkLCBzdGRfaWQpOworCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCWludCByZXQgPSAwOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3Nfc3RkXG4iKTsKKworCS8qIENhbGwgZGVjb2RlciBkcml2ZXIgZnVuY3Rpb24gdG8gc2V0IHRoZSBzdGFuZGFyZCAqLworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnBmZV9kZXYtPmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZGluZm8gPSB2cGZlX2Rldi0+Y3VycmVudF9zdWJkZXY7CisJLyogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQsIHJldHVybiBkZXZpY2UgYnVzeSBlcnJvciAqLworCWlmICh2cGZlX2Rldi0+c3RhcnRlZCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAic3RyZWFtaW5nIGlzIHN0YXJ0ZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisKKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCBzZGluZm8tPmdycF9pZCwKKwkJCQkJIGNvcmUsIHNfc3RkLCAqc3RkX2lkKTsKKwlpZiAocmV0IDwgMCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiRmFpbGVkIHRvIHNldCBzdGFuZGFyZFxuIik7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisJcmV0ID0gdnBmZV9jb25maWdfaW1hZ2VfZm9ybWF0KHZwZmVfZGV2LCBzdGRfaWQpOworCit1bmxvY2tfb3V0OgorCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9nX3N0ZFxuIik7CisKKwkqc3RkX2lkID0gdnBmZV9zdGFuZGFyZHNbdnBmZV9kZXYtPnN0ZF9pbmRleF0uc3RkX2lkOworCXJldHVybiAwOworfQorLyoKKyAqICBWaWRlb2J1ZiBvcGVyYXRpb25zCisgKi8KK3N0YXRpYyBpbnQgdnBmZV92aWRlb2J1Zl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJCXVuc2lnbmVkIGludCAqY291bnQsCisJCQkJdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCB2cGZlX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IGZoLT52cGZlX2RldjsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9idWZmZXJfc2V0dXBcbiIpOworCSpzaXplID0gY29uZmlnX3BhcmFtcy5kZXZpY2VfYnVmc2l6ZTsKKworCWlmICgqY291bnQgPCBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzKQorCQkqY291bnQgPSBjb25maWdfcGFyYW1zLm1pbl9udW1idWZmZXJzOworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkiY291bnQ9JWQsIHNpemU9JWRcbiIsICpjb3VudCwgKnNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwZmVfdmlkZW9idWZfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3QgdnBmZV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBmaC0+dnBmZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfYnVmZmVyX3ByZXBhcmVcbiIpOworCisJLyogSWYgYnVmZmVyIGlzIG5vdCBpbml0aWFsaXplZCwgaW5pdGlhbGl6ZSBpdCAqLworCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgeworCQl2Yi0+d2lkdGggPSB2cGZlX2Rldi0+Zm10LmZtdC5waXgud2lkdGg7CisJCXZiLT5oZWlnaHQgPSB2cGZlX2Rldi0+Zm10LmZtdC5waXguaGVpZ2h0OworCQl2Yi0+c2l6ZSA9IHZwZmVfZGV2LT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7CisJCXZiLT5maWVsZCA9IGZpZWxkOworCX0KKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdnBmZV92aWRlb2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCS8qIEdldCB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0IGFuZCBkZXZpY2Ugb2JqZWN0ICovCisJc3RydWN0IHZwZmVfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gZmgtPnZwZmVfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfYnVmZmVyX3F1ZXVlXG4iKTsKKworCS8qIGFkZCB0aGUgYnVmZmVyIHRvIHRoZSBETUEgcXVldWUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnBmZV9kZXYtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmdnBmZV9kZXYtPmRtYV9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBmZV9kZXYtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwkvKiBDaGFuZ2Ugc3RhdGUgb2YgdGhlIGJ1ZmZlciAqLworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKK30KKworc3RhdGljIHZvaWQgdnBmZV92aWRlb2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgdnBmZV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBmaC0+dnBmZV9kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV92aWRlb2J1Zl9yZWxlYXNlXG4iKTsKKworCS8qCisJICogV2UgbmVlZCB0byBmbHVzaCB0aGUgYnVmZmVyIGZyb20gdGhlIGRtYSBxdWV1ZSBzaW5jZQorCSAqIHRoZXkgYXJlIGRlLWFsbG9jYXRlZAorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cGZlX2Rldi0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlJTklUX0xJU1RfSEVBRCgmdnBmZV9kZXYtPmRtYV9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBmZV9kZXYtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgdnBmZV92aWRlb2J1Zl9xb3BzID0geworCS5idWZfc2V0dXAgICAgICA9IHZwZmVfdmlkZW9idWZfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICAgID0gdnBmZV92aWRlb2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IHZwZmVfdmlkZW9idWZfcXVldWUsCisJLmJ1Zl9yZWxlYXNlICAgID0gdnBmZV92aWRlb2J1Zl9yZWxlYXNlLAorfTsKKworLyoKKyAqIHZwZmVfcmVxYnVmcy4gY3VycmVudGx5IHN1cHBvcnQgUkVRQlVGIG9ubHkgb25jZSBvcGVuaW5nCisgKiB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHZwZmVfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXFfYnVmKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9yZXFidWZzXG4iKTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gcmVxX2J1Zi0+dHlwZSkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBidWZmZXIgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IHJlcV9idWYtPm1lbW9yeSkgeworCQkvKiB3ZSBkb24ndCBzdXBwb3J0IHVzZXIgcHRyIElPICovCisJCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9yZXFidWZzOiIKKwkJCSAiIFVTRVJQVFIgSU8gbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAgLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZwZmVfZGV2LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHZwZmVfZGV2LT5pb191c3JzICE9IDApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIk9ubHkgb25lIElPIHVzZXIgYWxsb3dlZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKworCXZwZmVfZGV2LT5tZW1vcnkgPSByZXFfYnVmLT5tZW1vcnk7CisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlLAorCQkJCSZ2cGZlX3ZpZGVvYnVmX3FvcHMsCisJCQkJTlVMTCwKKwkJCQkmdnBmZV9kZXYtPmlycWxvY2ssCisJCQkJcmVxX2J1Zi0+dHlwZSwKKwkJCQl2cGZlX2Rldi0+Zm10LmZtdC5waXguZmllbGQsCisJCQkJc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLAorCQkJCWZoKTsKKworCWZoLT5pb19hbGxvd2VkID0gMTsKKwl2cGZlX2Rldi0+aW9fdXNycyA9IDE7CisJSU5JVF9MSVNUX0hFQUQoJnZwZmVfZGV2LT5kbWFfcXVldWUpOworCXJldCA9IHZpZGVvYnVmX3JlcWJ1ZnMoJnZwZmVfZGV2LT5idWZmZXJfcXVldWUsIHJlcV9idWYpOwordW5sb2NrX291dDoKKwltdXRleF91bmxvY2soJnZwZmVfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcXVlcnlidWZcbiIpOworCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSBidWYtPnR5cGUpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXR1cm4gIC1FSU5WQUw7CisJfQorCisJaWYgKHZwZmVfZGV2LT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogQ2FsbCB2aWRlb2J1Zl9xdWVyeWJ1ZiB0byBnZXQgaW5mb3JtYXRpb24gKi8KKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJnZwZmVfZGV2LT5idWZmZXJfcXVldWUsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdnBmZV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfcWJ1ZlxuIik7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IHAtPnR5cGUpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgZmlsZSBoYW5kbGUgaXMgbm90IGFsbG93ZWQgdG8gZG8gSU8sCisJICogcmV0dXJuIGVycm9yCisJICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiZmgtPmlvX2FsbG93ZWRcbiIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisJcmV0dXJuIHZpZGVvYnVmX3FidWYoJnZwZmVfZGV2LT5idWZmZXJfcXVldWUsIHApOworfQorCitzdGF0aWMgaW50IHZwZmVfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCSAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX2RxYnVmXG4iKTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gYnVmLT50eXBlKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGJ1ZiB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZSwKKwkJCQkgICAgICBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworLyoKKyAqIHZwZmVfY2FsY3VsYXRlX29mZnNldHMgOiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYnVmZmVycyBvZmZzZXQKKyAqIGZvciB0b3AgYW5kIGJvdHRvbSBmaWVsZAorICovCitzdGF0aWMgdm9pZCB2cGZlX2NhbGN1bGF0ZV9vZmZzZXRzKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJc3RydWN0IHY0bDJfcmVjdCBpbWFnZV93aW47CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfY2FsY3VsYXRlX29mZnNldHNcbiIpOworCisJY2NkY19kZXYtPmh3X29wcy5nZXRfaW1hZ2Vfd2luZG93KCZpbWFnZV93aW4pOworCXZwZmVfZGV2LT5maWVsZF9vZmYgPSBpbWFnZV93aW4uaGVpZ2h0ICogaW1hZ2Vfd2luLndpZHRoOworfQorCisvKiB2cGZlX3N0YXJ0X2NjZGNfY2FwdHVyZTogc3RhcnQgc3RyZWFtaW5nIGluIGNjZGMvaXNpZiAqLworc3RhdGljIHZvaWQgdnBmZV9zdGFydF9jY2RjX2NhcHR1cmUoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwljY2RjX2Rldi0+aHdfb3BzLmVuYWJsZSgxKTsKKwlpZiAoY2NkY19kZXYtPmh3X29wcy5lbmFibGVfb3V0X3RvX3NkcmFtKQorCQljY2RjX2Rldi0+aHdfb3BzLmVuYWJsZV9vdXRfdG9fc2RyYW0oMSk7CisJdnBmZV9kZXYtPnN0YXJ0ZWQgPSAxOworfQorCisvKgorICogdnBmZV9zdHJlYW1vbi4gQXNzdW1lIHRoZSBETUEgcXVldWUgaXMgbm90IGVtcHR5LgorICogYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gY2FsbCBRQlVGIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIGlvY3RsLiBJZiBub3QsIGRyaXZlciByZXR1cm5zIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBlbnVtIHY0bDJfYnVmX3R5cGUgYnVmX3R5cGUpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCByZXQgPSAwOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2cGZlX3N0cmVhbW9uXG4iKTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gYnVmX3R5cGUpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBmaWxlIGhhbmRsZSBpcyBub3QgYWxsb3dlZCBJTywgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiZmgtPmlvX2FsbG93ZWRcbiIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlzZGluZm8gPSB2cGZlX2Rldi0+Y3VycmVudF9zdWJkZXY7CisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwZmVfZGV2LT52NGwyX2Rldiwgc2RpbmZvLT5ncnBfaWQsCisJCQkJCXZpZGVvLCBzX3N0cmVhbSwgMSk7CisKKwlpZiAocmV0ICYmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKSkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAic3RyZWFtIG9uIGZhaWxlZCBpbiBzdWJkZXZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBidWZmZXIgcXVldWUgaXMgZW1wdHksIHJldHVybiBlcnJvciAqLworCWlmIChsaXN0X2VtcHR5KCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlLnN0cmVhbSkpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgImJ1ZmZlciBxdWV1ZSBpcyBlbXB0eVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIENhbGwgdmlkZW9idWZfc3RyZWFtb24gdG8gc3RhcnQgc3RyZWFtaW5nICogaW4gdmlkZW9idWYgKi8KKwlyZXQgPSB2aWRlb2J1Zl9zdHJlYW1vbigmdnBmZV9kZXYtPmJ1ZmZlcl9xdWV1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2cGZlX2Rldi0+bG9jayk7CisJaWYgKHJldCkKKwkJZ290byBzdHJlYW1vZmY7CisJLyogR2V0IHRoZSBuZXh0IGZyYW1lIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLworCXZwZmVfZGV2LT5uZXh0X2ZybSA9IGxpc3RfZW50cnkodnBmZV9kZXYtPmRtYV9xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7CisJdnBmZV9kZXYtPmN1cl9mcm0gPSB2cGZlX2Rldi0+bmV4dF9mcm07CisJLyogUmVtb3ZlIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgcXVldWUgKi8KKwlsaXN0X2RlbCgmdnBmZV9kZXYtPmN1cl9mcm0tPnF1ZXVlKTsKKwkvKiBNYXJrIHN0YXRlIG9mIHRoZSBjdXJyZW50IGZyYW1lIHRvIGFjdGl2ZSAqLworCXZwZmVfZGV2LT5jdXJfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkvKiBJbml0aWFsaXplIGZpZWxkX2lkIGFuZCBzdGFydGVkIG1lbWJlciAqLworCXZwZmVfZGV2LT5maWVsZF9pZCA9IDA7CisJYWRkciA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcodnBmZV9kZXYtPmN1cl9mcm0pOworCisJLyogQ2FsY3VsYXRlIGZpZWxkIG9mZnNldCAqLworCXZwZmVfY2FsY3VsYXRlX29mZnNldHModnBmZV9kZXYpOworCisJaWYgKHZwZmVfYXR0YWNoX2lycSh2cGZlX2RldikgPCAwKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkgIkVycm9yIGluIGF0dGFjaGluZyBpbnRlcnJ1cHQgaGFuZGxlXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKwlpZiAoY2NkY19kZXYtPmh3X29wcy5jb25maWd1cmUoKSA8IDApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSAiRXJyb3IgaW4gY29uZmlndXJpbmcgY2NkY1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisJY2NkY19kZXYtPmh3X29wcy5zZXRmYmFkZHIoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKTsKKwl2cGZlX3N0YXJ0X2NjZGNfY2FwdHVyZSh2cGZlX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJcmV0dXJuIHJldDsKK3VubG9ja19vdXQ6CisJbXV0ZXhfdW5sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CitzdHJlYW1vZmY6CisJcmV0ID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZ2cGZlX2Rldi0+YnVmZmVyX3F1ZXVlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICBlbnVtIHY0bDJfYnVmX3R5cGUgYnVmX3R5cGUpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IHJldCA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfc3RyZWFtb2ZmXG4iKTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gYnVmX3R5cGUpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBpbyBpcyBhbGxvd2VkIGZvciB0aGlzIGZpbGUgaGFuZGxlLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAoIWZoLT5pb19hbGxvd2VkKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJmaC0+aW9fYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCS8qIElmIHN0cmVhbWluZyBpcyBub3Qgc3RhcnRlZCwgcmV0dXJuIGVycm9yICovCisJaWYgKCF2cGZlX2Rldi0+c3RhcnRlZCkgeworCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAiZGV2aWNlIHN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZwZmVfZGV2LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdnBmZV9zdG9wX2NjZGNfY2FwdHVyZSh2cGZlX2Rldik7CisJdnBmZV9kZXRhY2hfaXJxKHZwZmVfZGV2KTsKKworCXNkaW5mbyA9IHZwZmVfZGV2LT5jdXJyZW50X3N1YmRldjsKKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCBzZGluZm8tPmdycF9pZCwKKwkJCQkJdmlkZW8sIHNfc3RyZWFtLCAwKTsKKworCWlmIChyZXQgJiYgKHJldCAhPSAtRU5PSU9DVExDTUQpKQorCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LCAic3RyZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsKKwlyZXQgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoJnZwZmVfZGV2LT5idWZmZXJfcXVldWUpOworCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9jcm9wY2FwXG4iKTsKKworCWlmICh2cGZlX2Rldi0+c3RkX2luZGV4ID4gQVJSQVlfU0laRSh2cGZlX3N0YW5kYXJkcykpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGNyb3AsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jcm9wY2FwKSk7CisJY3JvcC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwljcm9wLT5ib3VuZHMud2lkdGggPSBjcm9wLT5kZWZyZWN0LndpZHRoID0KKwkJdnBmZV9zdGFuZGFyZHNbdnBmZV9kZXYtPnN0ZF9pbmRleF0ud2lkdGg7CisJY3JvcC0+Ym91bmRzLmhlaWdodCA9IGNyb3AtPmRlZnJlY3QuaGVpZ2h0ID0KKwkJdnBmZV9zdGFuZGFyZHNbdnBmZV9kZXYtPnN0ZF9pbmRleF0uaGVpZ2h0OworCWNyb3AtPnBpeGVsYXNwZWN0ID0gdnBmZV9zdGFuZGFyZHNbdnBmZV9kZXYtPnN0ZF9pbmRleF0ucGl4ZWxhc3BlY3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwgInZwZmVfZ19jcm9wXG4iKTsKKworCWNyb3AtPmMgPSB2cGZlX2Rldi0+Y3JvcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGZlX3NfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9zX2Nyb3BcbiIpOworCisJaWYgKHZwZmVfZGV2LT5zdGFydGVkKSB7CisJCS8qIG1ha2Ugc3VyZSBzdHJlYW1pbmcgaXMgbm90IHN0YXJ0ZWQgKi8KKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSJDYW5ub3QgY2hhbmdlIGNyb3Agd2hlbiBzdHJlYW1pbmcgaXMgT05cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnBmZV9kZXYtPmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY3JvcC0+Yy50b3AgPCAwIHx8IGNyb3AtPmMubGVmdCA8IDApIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSJkb2Vzbid0IHN1cHBvcnQgbmVnYXRpdmUgdmFsdWVzIGZvciB0b3AgJiBsZWZ0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKworCS8qIGFkanVzdCB0aGUgd2lkdGggdG8gMTYgcGl4ZWwgYm91bmRyeSAqLworCWNyb3AtPmMud2lkdGggPSAoKGNyb3AtPmMud2lkdGggKyAxNSkgJiB+MHhmKTsKKworCS8qIG1ha2Ugc3VyZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCAqLworCWlmICgoY3JvcC0+Yy5sZWZ0ICsgY3JvcC0+Yy53aWR0aCA+CisJCXZwZmVfZGV2LT5zdGRfaW5mby5hY3RpdmVfcGl4ZWxzKSB8fAorCSAgICAoY3JvcC0+Yy50b3AgKyBjcm9wLT5jLmhlaWdodCA+CisJCXZwZmVfZGV2LT5zdGRfaW5mby5hY3RpdmVfbGluZXMpKSB7CisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJFcnJvciBpbiBTX0NST1AgcGFyYW1zXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKwljY2RjX2Rldi0+aHdfb3BzLnNldF9pbWFnZV93aW5kb3coJmNyb3AtPmMpOworCXZwZmVfZGV2LT5mbXQuZm10LnBpeC53aWR0aCA9IGNyb3AtPmMud2lkdGg7CisJdnBmZV9kZXYtPmZtdC5mbXQucGl4LmhlaWdodCA9IGNyb3AtPmMuaGVpZ2h0OworCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmUgPQorCQljY2RjX2Rldi0+aHdfb3BzLmdldF9saW5lX2xlbmd0aCgpOworCXZwZmVfZGV2LT5mbXQuZm10LnBpeC5zaXplaW1hZ2UgPQorCQl2cGZlX2Rldi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lICoKKwkJdnBmZV9kZXYtPmZtdC5mbXQucGl4LmhlaWdodDsKKwl2cGZlX2Rldi0+Y3JvcCA9IGNyb3AtPmM7Cit1bmxvY2tfb3V0OgorCW11dGV4X3VubG9jaygmdnBmZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGxvbmcgdnBmZV9wYXJhbV9oYW5kbGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlpbnQgY21kLCB2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBmZV9kZXYtPnY0bDJfZGV2LCAidnBmZV9wYXJhbV9oYW5kbGVyXG4iKTsKKworCWlmICh2cGZlX2Rldi0+c3RhcnRlZCkgeworCQkvKiBvbmx5IGFsbG93ZWQgaWYgc3RyZWFtaW5nIGlzIG5vdCBzdGFydGVkICovCisJCXY0bDJfZXJyKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJkZXZpY2UgYWxyZWFkeSBzdGFydGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZwZmVfZGV2LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZQRkVfQ01EX1NfQ0NEQ19SQVdfUEFSQU1TOgorCQl2NGwyX3dhcm4oJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSAgIlZQRkVfQ01EX1NfQ0NEQ19SQVdfUEFSQU1TOiBleHBlcmltZW50YWwgaW9jdGxcbiIpOworCQlyZXQgPSBjY2RjX2Rldi0+aHdfb3BzLnNldF9wYXJhbXMocGFyYW0pOworCQlpZiAocmV0KSB7CisJCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJCSJFcnJvciBpbiBzZXR0aW5nIHBhcmFtZXRlcnMgaW4gQ0NEQ1xuIik7CisJCQlnb3RvIHVubG9ja19vdXQ7CisJCX0KKwkJaWYgKHZwZmVfZ2V0X2NjZGNfaW1hZ2VfZm9ybWF0KHZwZmVfZGV2LCAmdnBmZV9kZXYtPmZtdCkgPCAwKSB7CisJCQl2NGwyX2VycigmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJCSJJbnZhbGlkIGltYWdlIGZvcm1hdCBhdCBDQ0RDXG4iKTsKKwkJCWdvdG8gdW5sb2NrX291dDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KK3VubG9ja19vdXQ6CisJbXV0ZXhfdW5sb2NrKCZ2cGZlX2Rldi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworCisvKiB2cGZlIGNhcHR1cmUgaW9jdGwgb3BlcmF0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2cGZlX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCSA9IHZwZmVfcXVlcnljYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwICAgID0gdnBmZV9nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZwZmVfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgICAgPSB2cGZlX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgID0gdnBmZV90cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19lbnVtX2lucHV0CSA9IHZwZmVfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQJCSA9IHZwZmVfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCSA9IHZwZmVfc19pbnB1dCwKKwkudmlkaW9jX3F1ZXJ5c3RkCSA9IHZwZmVfcXVlcnlzdGQsCisJLnZpZGlvY19zX3N0ZAkJID0gdnBmZV9zX3N0ZCwKKwkudmlkaW9jX2dfc3RkCQkgPSB2cGZlX2dfc3RkLAorCS52aWRpb2NfcmVxYnVmcwkJID0gdnBmZV9yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJID0gdnBmZV9xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYJCSA9IHZwZmVfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQkgPSB2cGZlX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JID0gdnBmZV9zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZgkgPSB2cGZlX3N0cmVhbW9mZiwKKwkudmlkaW9jX2Nyb3BjYXAJCSA9IHZwZmVfY3JvcGNhcCwKKwkudmlkaW9jX2dfY3JvcAkJID0gdnBmZV9nX2Nyb3AsCisJLnZpZGlvY19zX2Nyb3AJCSA9IHZwZmVfc19jcm9wLAorCS52aWRpb2NfZGVmYXVsdAkJID0gdnBmZV9wYXJhbV9oYW5kbGVyLAorfTsKKworc3RhdGljIHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9pbml0aWFsaXplKHZvaWQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldjsKKworCS8qIERlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMgc2hvdWxkIGJlIDMgKi8KKwlpZiAoKG51bWJ1ZmZlcnMgPiAwKSAmJgorCSAgICAobnVtYnVmZmVycyA8IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnMpKQorCQludW1idWZmZXJzID0gY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVyczsKKworCS8qCisJICogU2V0IGJ1ZmZlciBzaXplIHRvIG1pbiBidWZmZXJzIHNpemUgaWYgaW52YWxpZCBidWZmZXIgc2l6ZSBpcworCSAqIGdpdmVuCisJICovCisJaWYgKGJ1ZnNpemUgPCBjb25maWdfcGFyYW1zLm1pbl9idWZzaXplKQorCQlidWZzaXplID0gY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZTsKKworCWNvbmZpZ19wYXJhbXMubnVtYnVmZmVycyA9IG51bWJ1ZmZlcnM7CisKKwlpZiAobnVtYnVmZmVycykKKwkJY29uZmlnX3BhcmFtcy5kZXZpY2VfYnVmc2l6ZSA9IGJ1ZnNpemU7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSBvYmplY3RzICovCisJdnBmZV9kZXYgPSBremFsbG9jKHNpemVvZigqdnBmZV9kZXYpLCBHRlBfS0VSTkVMKTsKKworCXJldHVybiB2cGZlX2RldjsKK30KKworc3RhdGljIHZvaWQgdnBmZV9kaXNhYmxlX2Nsb2NrKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCit7CisJc3RydWN0IHZwZmVfY29uZmlnICp2cGZlX2NmZyA9IHZwZmVfZGV2LT5jZmc7CisKKwljbGtfZGlzYWJsZSh2cGZlX2NmZy0+dnBzc2Nsayk7CisJY2xrX3B1dCh2cGZlX2NmZy0+dnBzc2Nsayk7CisJY2xrX2Rpc2FibGUodnBmZV9jZmctPnNsYXZlY2xrKTsKKwljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7CisJdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCisJCSAidnBmZSB2cHNzIG1hc3RlciAmIHNsYXZlIGNsb2NrcyBkaXNhYmxlZFxuIik7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9lbmFibGVfY2xvY2soc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKK3sKKwlzdHJ1Y3QgdnBmZV9jb25maWcgKnZwZmVfY2ZnID0gdnBmZV9kZXYtPmNmZzsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCXZwZmVfY2ZnLT52cHNzY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3NfbWFzdGVyIik7CisJaWYgKE5VTEwgPT0gdnBmZV9jZmctPnZwc3NjbGspIHsKKwkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwgIk5vIGNsb2NrIGRlZmluZWQgZm9yIgorCQkJICJ2cHNzX21hc3RlclxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnZwc3NjbGspKSB7CisJCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCisJCQkidnBmZSB2cHNzIG1hc3RlciBjbG9jayBub3QgZW5hYmxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwl2NGwyX2luZm8odnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKKwkJICJ2cGZlIHZwc3MgbWFzdGVyIGNsb2NrIGVuYWJsZWRcbiIpOworCisJdnBmZV9jZmctPnNsYXZlY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3Nfc2xhdmUiKTsKKwlpZiAoTlVMTCA9PSB2cGZlX2NmZy0+c2xhdmVjbGspIHsKKwkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKKwkJCSJObyBjbG9jayBkZWZpbmVkIGZvciB2cHNzIHNsYXZlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnNsYXZlY2xrKSkgeworCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAorCQkJICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgbm90IGVuYWJsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgZW5hYmxlZFxuIik7CisJcmV0dXJuIDA7CitvdXQ6CisJaWYgKHZwZmVfY2ZnLT52cHNzY2xrKQorCQljbGtfcHV0KHZwZmVfY2ZnLT52cHNzY2xrKTsKKwlpZiAodnBmZV9jZmctPnNsYXZlY2xrKQorCQljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiB2cGZlX3Byb2JlIDogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGRldmljZSBlbnRyaWVzIGJ5IHJlZ2lzdGVyCisgKiBpdHNlbGYgdG8gdGhlIFY0TDIgZHJpdmVyIGFuZCBpbml0aWFsaXplcyBmaWVsZHMgb2YgZWFjaAorICogZGV2aWNlIG9iamVjdHMKKyAqLworc3RhdGljIF9faW5pdCBpbnQgdnBmZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJc3RydWN0IHZwZmVfY29uZmlnICp2cGZlX2NmZzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczE7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlpbnQgcmV0ID0gLUVOT01FTSwgaSwgajsKKwlpbnQgbnVtX3N1YmRldnMgPSAwOworCisJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugb2JqZWN0ICovCisJdnBmZV9kZXYgPSB2cGZlX2luaXRpYWxpemUoKTsKKworCWlmICghdnBmZV9kZXYpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKKwkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB2cGZlX2RldlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJdnBmZV9kZXYtPnBkZXYgPSAmcGRldi0+ZGV2OworCisJaWYgKE5VTEwgPT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byBnZXQgdnBmZSBjb25maWdcbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKKwl9CisKKwl2cGZlX2NmZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXZwZmVfZGV2LT5jZmcgPSB2cGZlX2NmZzsKKwlpZiAoTlVMTCA9PSB2cGZlX2NmZy0+Y2NkYyB8fAorCSAgICBOVUxMID09IHZwZmVfY2ZnLT5jYXJkX25hbWUgfHwKKwkgICAgTlVMTCA9PSB2cGZlX2NmZy0+c3ViX2RldnMpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIm51bGwgcHRyIGluIHZwZmVfY2ZnXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07CisJfQorCisJLyogZW5hYmxlIHZwc3MgY2xvY2tzICovCisJcmV0ID0gdnBmZV9lbmFibGVfY2xvY2sodnBmZV9kZXYpOworCWlmIChyZXQpCisJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOworCisJbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGNjZGMgY29uZmlndXJhdGlvbiAqLworCWNjZGNfY2ZnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNjZGNfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gY2NkY19jZmcpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKKwkJCSAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBjY2RjX2NmZ1xuIik7CisJCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwl9CisKKwlzdHJuY3B5KGNjZGNfY2ZnLT5uYW1lLCB2cGZlX2NmZy0+Y2NkYywgMzIpOworCS8qIEdldCBWSU5UMCBpcnEgcmVzb3VyY2UgKi8KKwlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlczEpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKKwkJCSAiVW5hYmxlIHRvIGdldCBpbnRlcnJ1cHQgZm9yIFZJTlQwXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOworCX0KKwl2cGZlX2Rldi0+Y2NkY19pcnEwID0gcmVzMS0+c3RhcnQ7CisKKwkvKiBHZXQgVklOVDEgaXJxIHJlc291cmNlICovCisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LAorCQkJCUlPUkVTT1VSQ0VfSVJRLCAxKTsKKwlpZiAoIXJlczEpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKKwkJCSAiVW5hYmxlIHRvIGdldCBpbnRlcnJ1cHQgZm9yIFZJTlQxXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOworCX0KKwl2cGZlX2Rldi0+Y2NkY19pcnExID0gcmVzMS0+c3RhcnQ7CisKKwkvKiBHZXQgYWRkcmVzcyBiYXNlIG9mIENDREMgKi8KKwlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlczEpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKKwkJCSJVbmFibGUgdG8gZ2V0IHJlZ2lzdGVyIGFkZHJlc3MgbWFwXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOworCX0KKworCWNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSA9IHJlczEtPmVuZCAtIHJlczEtPnN0YXJ0ICsgMTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMxLT5zdGFydCwgY2NkY19jZmctPmNjZGNfYWRkcl9zaXplLAorCQkJCXBkZXYtPmRldi5kcml2ZXItPm5hbWUpKSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkiRmFpbGVkIHJlcXVlc3RfbWVtX3JlZ2lvbiBmb3IgY2NkYyBiYXNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7CisJfQorCWNjZGNfY2ZnLT5jY2RjX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzMS0+c3RhcnQsCisJCQkJCSAgICAgY2NkY19jZmctPmNjZGNfYWRkcl9zaXplKTsKKwlpZiAoIWNjZGNfY2ZnLT5jY2RjX2FkZHIpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byBpb3JlbWFwIGNjZGMgYWRkclxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBwcm9iZV9vdXRfcmVsZWFzZV9tZW0xOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHZwZmVfZGV2LT5jY2RjX2lycTAsIHZwZmVfaXNyLCBJUlFGX0RJU0FCTEVELAorCQkJICAidnBmZV9jYXB0dXJlMCIsIHZwZmVfZGV2KTsKKworCWlmICgwICE9IHJldCkgeworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0XG4iKTsKKwkJZ290byBwcm9iZV9vdXRfdW5tYXAxOworCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmlkZW8gZGV2aWNlICovCisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gdmZkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkiVW5hYmxlIHRvIGFsbG9jIHZpZGVvIGRldmljZVxuIik7CisJCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfaXJxOworCX0KKworCS8qIEluaXRpYWxpemUgZmllbGQgb2YgdmlkZW8gZGV2aWNlICovCisJdmZkLT5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXZmZC0+Zm9wcwkJPSAmdnBmZV9mb3BzOworCXZmZC0+aW9jdGxfb3BzCQk9ICZ2cGZlX2lvY3RsX29wczsKKwl2ZmQtPm1pbm9yCQk9IC0xOworCXZmZC0+dHZub3JtcwkJPSAwOworCXZmZC0+Y3VycmVudF9ub3JtCT0gVjRMMl9TVERfUEFMOworCXZmZC0+djRsMl9kZXYgCQk9ICZ2cGZlX2Rldi0+djRsMl9kZXY7CisJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwKKwkJICIlc19WJWQuJWQuJWQiLAorCQkgQ0FQVFVSRV9EUlZfTkFNRSwKKwkJIChWUEZFX0NBUFRVUkVfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCisJCSAoVlBGRV9DQVBUVVJFX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsCisJCSAoVlBGRV9DQVBUVVJFX1ZFUlNJT05fQ09ERSkgJiAweGZmKTsKKwkvKiBTZXQgdmlkZW9fZGV2IHRvIHRoZSB2aWRlbyBkZXZpY2UgKi8KKwl2cGZlX2Rldi0+dmlkZW9fZGV2CT0gdmZkOworCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJnZwZmVfZGV2LT52NGwyX2Rldik7CisJaWYgKHJldCkgeworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAorCQkJIlVuYWJsZSB0byByZWdpc3RlciB2NGwyIGRldmljZS5cbiIpOworCQlnb3RvIHByb2JlX291dF92aWRlb19yZWxlYXNlOworCX0KKwl2NGwyX2luZm8oJnZwZmVfZGV2LT52NGwyX2RldiwgInY0bDIgZGV2aWNlIHJlZ2lzdGVyZWRcbiIpOworCXNwaW5fbG9ja19pbml0KCZ2cGZlX2Rldi0+aXJxbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnZwZmVfZGV2LT5kbWFfcXVldWVfbG9jayk7CisJbXV0ZXhfaW5pdCgmdnBmZV9kZXYtPmxvY2spOworCisJLyogSW5pdGlhbGl6ZSBmaWVsZCBvZiB0aGUgZGV2aWNlIG9iamVjdHMgKi8KKwl2cGZlX2Rldi0+bnVtYnVmZmVycyA9IGNvbmZpZ19wYXJhbXMubnVtYnVmZmVyczsKKworCS8qIEluaXRpYWxpemUgcHJpbyBtZW1iZXIgb2YgZGV2aWNlIG9iamVjdCAqLworCXY0bDJfcHJpb19pbml0KCZ2cGZlX2Rldi0+cHJpbyk7CisJLyogcmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCSJ0cnlpbmcgdG8gcmVnaXN0ZXIgdnBmZSBkZXZpY2UuXG4iKTsKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJInZpZGVvX2Rldj0leFxuIiwgKGludCkmdnBmZV9kZXYtPnZpZGVvX2Rldik7CisJdnBmZV9kZXYtPmZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2cGZlX2Rldi0+dmlkZW9fZGV2LAorCQkJCSAgICBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisKKwlpZiAocmV0KSB7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCisJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHZpZGVvIGRldmljZS5cbiIpOworCQlnb3RvIHByb2JlX291dF92NGwyX3VucmVnaXN0ZXI7CisJfQorCisJdjRsMl9pbmZvKCZ2cGZlX2Rldi0+djRsMl9kZXYsICJ2aWRlbyBkZXZpY2UgcmVnaXN0ZXJlZFxuIik7CisJLyogc2V0IHRoZSBkcml2ZXIgZGF0YSBpbiBwbGF0Zm9ybSBkZXZpY2UgKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB2cGZlX2Rldik7CisJLyogc2V0IGRyaXZlciBwcml2YXRlIGRhdGEgKi8KKwl2aWRlb19zZXRfZHJ2ZGF0YSh2cGZlX2Rldi0+dmlkZW9fZGV2LCB2cGZlX2Rldik7CisJaTJjX2FkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoMSk7CisJdnBmZV9jZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwludW1fc3ViZGV2cyA9IHZwZmVfY2ZnLT5udW1fc3ViZGV2czsKKwl2cGZlX2Rldi0+c2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYgKikgKiBudW1fc3ViZGV2cywKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSB2cGZlX2Rldi0+c2QpIHsKKwkJdjRsMl9lcnIoJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBzdWJkZXZpY2UgcG9pbnRlcnNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHByb2JlX291dF92aWRlb191bnJlZ2lzdGVyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fc3ViZGV2czsgaSsrKSB7CisJCXN0cnVjdCB2NGwyX2lucHV0ICppbnBzOworCisJCXNkaW5mbyA9ICZ2cGZlX2NmZy0+c3ViX2RldnNbaV07CisKKwkJLyogTG9hZCB1cCB0aGUgc3ViZGV2aWNlICovCisJCXZwZmVfZGV2LT5zZFtpXSA9CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZ2cGZlX2Rldi0+djRsMl9kZXYsCisJCQkJCQkgIGkyY19hZGFwLAorCQkJCQkJICBzZGluZm8tPm5hbWUsCisJCQkJCQkgICZzZGluZm8tPmJvYXJkX2luZm8sCisJCQkJCQkgIE5VTEwpOworCQlpZiAodnBmZV9kZXYtPnNkW2ldKSB7CisJCQl2NGwyX2luZm8oJnZwZmVfZGV2LT52NGwyX2RldiwKKwkJCQkgICJ2NGwyIHN1YiBkZXZpY2UgJXMgcmVnaXN0ZXJlZFxuIiwKKwkJCQkgIHNkaW5mby0+bmFtZSk7CisJCQl2cGZlX2Rldi0+c2RbaV0tPmdycF9pZCA9IHNkaW5mby0+Z3JwX2lkOworCQkJLyogdXBkYXRlIHR2bm9ybXMgZnJvbSB0aGUgc3ViIGRldmljZXMgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBzZGluZm8tPm51bV9pbnB1dHM7IGorKykgeworCQkJCWlucHMgPSAmc2RpbmZvLT5pbnB1dHNbal07CisJCQkJdmZkLT50dm5vcm1zIHw9IGlucHMtPnN0ZDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXY0bDJfaW5mbygmdnBmZV9kZXYtPnY0bDJfZGV2LAorCQkJCSAgInY0bDIgc3ViIGRldmljZSAlcyByZWdpc3RlciBmYWlsc1xuIiwKKwkJCQkgIHNkaW5mby0+bmFtZSk7CisJCQlnb3RvIHByb2JlX3NkX291dDsKKwkJfQorCX0KKworCS8qIHNldCBmaXJzdCBzdWIgZGV2aWNlIGFzIGN1cnJlbnQgb25lICovCisJdnBmZV9kZXYtPmN1cnJlbnRfc3ViZGV2ID0gJnZwZmVfY2ZnLT5zdWJfZGV2c1swXTsKKworCS8qIFdlIGhhdmUgYXQgbGVhc3Qgb25lIHN1YiBkZXZpY2UgdG8gd29yayB3aXRoICovCisJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOworCXJldHVybiAwOworCitwcm9iZV9zZF9vdXQ6CisJa2ZyZWUodnBmZV9kZXYtPnNkKTsKK3Byb2JlX291dF92aWRlb191bnJlZ2lzdGVyOgorCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZwZmVfZGV2LT52aWRlb19kZXYpOworcHJvYmVfb3V0X3Y0bDJfdW5yZWdpc3RlcjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2cGZlX2Rldi0+djRsMl9kZXYpOworcHJvYmVfb3V0X3ZpZGVvX3JlbGVhc2U6CisJaWYgKHZwZmVfZGV2LT52aWRlb19kZXYtPm1pbm9yID09IC0xKQorCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2cGZlX2Rldi0+dmlkZW9fZGV2KTsKK3Byb2JlX291dF9yZWxlYXNlX2lycToKKwlmcmVlX2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2Rldik7Citwcm9iZV9vdXRfdW5tYXAxOgorCWlvdW5tYXAoY2NkY19jZmctPmNjZGNfYWRkcik7Citwcm9iZV9vdXRfcmVsZWFzZV9tZW0xOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMxLT5zdGFydCwgcmVzMS0+ZW5kIC0gcmVzMS0+c3RhcnQgKyAxKTsKK3Byb2JlX2Rpc2FibGVfY2xvY2s6CisJdnBmZV9kaXNhYmxlX2Nsb2NrKHZwZmVfZGV2KTsKKwltdXRleF91bmxvY2soJmNjZGNfbG9jayk7CisJa2ZyZWUoY2NkY19jZmcpOworcHJvYmVfZnJlZV9kZXZfbWVtOgorCWtmcmVlKHZwZmVfZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdnBmZV9yZW1vdmUgOiBJdCB1bi1yZWdpc3RlciBkZXZpY2UgZnJvbSBWNEwyIGRyaXZlcgorICovCitzdGF0aWMgaW50IHZwZmVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJdjRsMl9pbmZvKHBkZXYtPmRldi5kcml2ZXIsICJ2cGZlX3JlbW92ZVxuIik7CisKKwlmcmVlX2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2Rldik7CisJa2ZyZWUodnBmZV9kZXYtPnNkKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2cGZlX2Rldi0+djRsMl9kZXYpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZwZmVfZGV2LT52aWRlb19kZXYpOworCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaW91bm1hcChjY2RjX2NmZy0+Y2NkY19hZGRyKTsKKwltdXRleF91bmxvY2soJmNjZGNfbG9jayk7CisJdnBmZV9kaXNhYmxlX2Nsb2NrKHZwZmVfZGV2KTsKKwlrZnJlZSh2cGZlX2Rldik7CisJa2ZyZWUoY2NkY19jZmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2cGZlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIGFkZCBzdXNwZW5kIGNvZGUgaGVyZSBsYXRlciAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludAordnBmZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIGFkZCByZXN1bWUgY29kZSBoZXJlIGxhdGVyICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdnBmZV9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gdnBmZV9zdXNwZW5kLAorCS5yZXN1bWUgPSB2cGZlX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZwZmVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gQ0FQVFVSRV9EUlZfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZ2cGZlX2Rldl9wbV9vcHMsCisJfSwKKwkucHJvYmUgPSB2cGZlX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh2cGZlX3JlbW92ZSksCit9OworCitzdGF0aWMgX19pbml0IGludCB2cGZlX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgInZwZmVfaW5pdFxuIik7CisJLyogUmVnaXN0ZXIgZHJpdmVyIHRvIHRoZSBrZXJuZWwgKi8KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2cGZlX2RyaXZlcik7Cit9CisKKy8qCisgKiB2cGZlX2NsZWFudXAgOiBUaGlzIGZ1bmN0aW9uIHVuLXJlZ2lzdGVycyBkZXZpY2UgZHJpdmVyCisgKi8KK3N0YXRpYyB2b2lkIHZwZmVfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cGZlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZwZmVfaW5pdCk7Cittb2R1bGVfZXhpdCh2cGZlX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZWFjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmMKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiB2cGlmIC0gRE02NDZ4IFZpZGVvIFBvcnQgSW50ZXJmYWNlIGRyaXZlcgorICogVlBJRiBpcyBhIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciBmb3IgdmlkZW8gZGF0YS4gSXQgaGFzIHR3byBjaGFubmVscygwLCAxKQorICogdGhhdCByZWNlaXZlaW5nIHZpZGVvIGJ5dGUgc3RyZWFtIGFuZCB0d28gY2hhbm5lbHMoMiwgMykgZm9yIHZpZGVvIG91dHB1dC4KKyAqIFRoZSBoYXJkd2FyZSBzdXBwb3J0cyBTRFRWLCBIRFRWIGZvcm1hdHMsIHJhdyBkYXRhIGNhcHR1cmUuCisgKiBDdXJyZW50bHksIHRoZSBkcml2ZXIgc3VwcG9ydHMgTlRTQyBhbmQgUEFMIHN0YW5kYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgLmFzIGlzLiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSAidnBpZi5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIERhVmluY2kgVmlkZW8gUG9ydCBJbnRlcmZhY2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgVlBJRl9DSDBfTUFYX01PREVTCSgyMikKKyNkZWZpbmUgVlBJRl9DSDFfTUFYX01PREVTCSgwMikKKyNkZWZpbmUgVlBJRl9DSDJfTUFYX01PREVTCSgxNSkKKyNkZWZpbmUgVlBJRl9DSDNfTUFYX01PREVTCSgwMikKKworc3RhdGljIHJlc291cmNlX3NpemVfdAlyZXNfbGVuOworc3RhdGljIHN0cnVjdCByZXNvdXJjZQkqcmVzOworc3BpbmxvY2tfdCB2cGlmX2xvY2s7CisKK3ZvaWQgX19pb21lbSAqdnBpZl9iYXNlOworCitzdGF0aWMgaW5saW5lIHZvaWQgdnBpZl93cl9iaXQodTMyIHJlZywgdTMyIGJpdCwgdTMyIHZhbCkKK3sKKwlpZiAodmFsKQorCQl2cGlmX3NldF9iaXQocmVnLCBiaXQpOworCWVsc2UKKwkJdnBpZl9jbHJfYml0KHJlZywgYml0KTsKK30KKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIFZQSUYgc2l6ZSByZWdpc3RlcidzIG9mZnNldHMgKi8KK3N0cnVjdCB2cGlmX3JlZ2lzdGVycyB7CisJdTMyIGhfY2ZnLCB2X2NmZ18wMCwgdl9jZmdfMDEsIHZfY2ZnXzAyLCB2X2NmZywgY2hfY3RybDsKKwl1MzIgbGluZV9vZmZzZXQsIHZhbmMwX3N0cnQsIHZhbmMwX3NpemUsIHZhbmMxX3N0cnQ7CisJdTMyIHZhbmMxX3NpemUsIHdpZHRoX21hc2ssIGxlbl9tYXNrOworCXU4IG1heF9tb2RlczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBpZl9yZWdpc3RlcnMgdnBpZnJlZ3NbVlBJRl9OVU1fQ0hBTk5FTFNdID0geworCS8qIENoYW5uZWwwICovCisJeworCQlWUElGX0NIMF9IX0NGRywgVlBJRl9DSDBfVl9DRkdfMDAsIFZQSUZfQ0gwX1ZfQ0ZHXzAxLAorCQlWUElGX0NIMF9WX0NGR18wMiwgVlBJRl9DSDBfVl9DRkdfMDMsIFZQSUZfQ0gwX0NUUkwsCisJCVZQSUZfQ0gwX0lNR19BRERfT0ZTVCwgMCwgMCwgMCwgMCwgMHgxRkZGLCAweEZGRiwKKwkJVlBJRl9DSDBfTUFYX01PREVTLAorCX0sCisJLyogQ2hhbm5lbDEgKi8KKwl7CisJCVZQSUZfQ0gxX0hfQ0ZHLCBWUElGX0NIMV9WX0NGR18wMCwgVlBJRl9DSDFfVl9DRkdfMDEsCisJCVZQSUZfQ0gxX1ZfQ0ZHXzAyLCBWUElGX0NIMV9WX0NGR18wMywgVlBJRl9DSDFfQ1RSTCwKKwkJVlBJRl9DSDFfSU1HX0FERF9PRlNULCAwLCAwLCAwLCAwLCAweDFGRkYsIDB4RkZGLAorCQlWUElGX0NIMV9NQVhfTU9ERVMsCisJfSwKKwkvKiBDaGFubmVsMiAqLworCXsKKwkJVlBJRl9DSDJfSF9DRkcsIFZQSUZfQ0gyX1ZfQ0ZHXzAwLCBWUElGX0NIMl9WX0NGR18wMSwKKwkJVlBJRl9DSDJfVl9DRkdfMDIsIFZQSUZfQ0gyX1ZfQ0ZHXzAzLCBWUElGX0NIMl9DVFJMLAorCQlWUElGX0NIMl9JTUdfQUREX09GU1QsIFZQSUZfQ0gyX1ZBTkMwX1NUUlQsIFZQSUZfQ0gyX1ZBTkMwX1NJWkUsCisJCVZQSUZfQ0gyX1ZBTkMxX1NUUlQsIFZQSUZfQ0gyX1ZBTkMxX1NJWkUsIDB4N0ZGLCAweDdGRiwKKwkJVlBJRl9DSDJfTUFYX01PREVTCisJfSwKKwkvKiBDaGFubmVsMyAqLworCXsKKwkJVlBJRl9DSDNfSF9DRkcsIFZQSUZfQ0gzX1ZfQ0ZHXzAwLCBWUElGX0NIM19WX0NGR18wMSwKKwkJVlBJRl9DSDNfVl9DRkdfMDIsIFZQSUZfQ0gzX1ZfQ0ZHXzAzLCBWUElGX0NIM19DVFJMLAorCQlWUElGX0NIM19JTUdfQUREX09GU1QsIFZQSUZfQ0gzX1ZBTkMwX1NUUlQsIFZQSUZfQ0gzX1ZBTkMwX1NJWkUsCisJCVZQSUZfQ0gzX1ZBTkMxX1NUUlQsIFZQSUZfQ0gzX1ZBTkMxX1NJWkUsIDB4N0ZGLCAweDdGRiwKKwkJVlBJRl9DSDNfTUFYX01PREVTCisJfSwKK307CisKKy8qIHZwaWZfc2V0X21vZGVfaW5mbzoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgY29uZmlnIHBhcmFtZXRlcnMKKyAqIEFzIHBlciB0aGUgc3RhbmRhcmQgaW4gdGhlIGNoYW5uZWwsIGNvbmZpZ3VyZSB0aGUgdmFsdWVzIG9mIEwxLCBMMywKKyAqIEw1LCBMNyAgTDksIEwxMSBpbiBWUElGIFJlZ2lzdGVyICwgYWxzbyB3cml0ZSB3aWR0aCBhbmQgaGVpZ2h0CisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfc2V0X21vZGVfaW5mbyhjb25zdCBzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKmNvbmZpZywKKwkJCQl1OCBjaGFubmVsX2lkLCB1OCBjb25maWdfY2hhbm5lbF9pZCkKK3sKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IChjb25maWctPmVhdjJzYXYgJiB2cGlmcmVnc1tjb25maWdfY2hhbm5lbF9pZF0ud2lkdGhfbWFzayk7CisJdmFsdWUgPDw9IFZQSUZfQ0hfTEVOX1NISUZUOworCXZhbHVlIHw9IChjb25maWctPnNhdjJlYXYgJiB2cGlmcmVnc1tjb25maWdfY2hhbm5lbF9pZF0ud2lkdGhfbWFzayk7CisJcmVndyh2YWx1ZSwgdnBpZnJlZ3NbY2hhbm5lbF9pZF0uaF9jZmcpOworCisJdmFsdWUgPSAoY29uZmlnLT5sMSAmIHZwaWZyZWdzW2NvbmZpZ19jaGFubmVsX2lkXS5sZW5fbWFzayk7CisJdmFsdWUgPDw9IFZQSUZfQ0hfTEVOX1NISUZUOworCXZhbHVlIHw9IChjb25maWctPmwzICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLmxlbl9tYXNrKTsKKwlyZWd3KHZhbHVlLCB2cGlmcmVnc1tjaGFubmVsX2lkXS52X2NmZ18wMCk7CisKKwl2YWx1ZSA9IChjb25maWctPmw1ICYgdnBpZnJlZ3NbY29uZmlnX2NoYW5uZWxfaWRdLmxlbl9tYXNrKTsKKwl2YWx1ZSA8PD0gVlBJRl9DSF9MRU5fU0hJRlQ7CisJdmFsdWUgfD0gKGNvbmZpZy0+bDcgJiB2cGlmcmVnc1tjb25maWdfY2hhbm5lbF9pZF0ubGVuX21hc2spOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLnZfY2ZnXzAxKTsKKworCXZhbHVlID0gKGNvbmZpZy0+bDkgJiB2cGlmcmVnc1tjb25maWdfY2hhbm5lbF9pZF0ubGVuX21hc2spOworCXZhbHVlIDw8PSBWUElGX0NIX0xFTl9TSElGVDsKKwl2YWx1ZSB8PSAoY29uZmlnLT5sMTEgJiB2cGlmcmVnc1tjb25maWdfY2hhbm5lbF9pZF0ubGVuX21hc2spOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLnZfY2ZnXzAyKTsKKworCXZhbHVlID0gKGNvbmZpZy0+dnNpemUgJiB2cGlmcmVnc1tjb25maWdfY2hhbm5lbF9pZF0ubGVuX21hc2spOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLnZfY2ZnKTsKK30KKworLyogY29uZmlnX3ZwaWZfcGFyYW1zCisgKiBGdW5jdGlvbiB0byBzZXQgdGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFubmVsCisgKiBNYWlubHkgbW9kaWZpZXMgdGhlIGNoYW5uZWwgY2lvbnRyb2wgcmVnaXN0ZXIKKyAqIEl0IHNldHMgZnJhbWUgZm9ybWF0LCB5YyBtdXggbW9kZQorICovCitzdGF0aWMgdm9pZCBjb25maWdfdnBpZl9wYXJhbXMoc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmcGFyYW1zLAorCQkJCXU4IGNoYW5uZWxfaWQsIHU4IGZvdW5kKQoreworCWNvbnN0IHN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqY29uZmlnID0gJnZwaWZwYXJhbXMtPnN0ZF9pbmZvOworCXUzMiB2YWx1ZSwgY2hfbmlwLCByZWc7CisJdTggc3RhcnQsIGVuZDsKKwlpbnQgaTsKKworCXN0YXJ0ID0gY2hhbm5lbF9pZDsKKwllbmQgPSBjaGFubmVsX2lkICsgZm91bmQ7CisKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CisJCXJlZyA9IHZwaWZyZWdzW2ldLmNoX2N0cmw7CisJCWlmIChjaGFubmVsX2lkIDwgMikKKwkJCWNoX25pcCA9IFZQSUZfQ0FQVFVSRV9DSF9OSVA7CisJCWVsc2UKKwkJCWNoX25pcCA9IFZQSUZfRElTUExBWV9DSF9OSVA7CisKKwkJdnBpZl93cl9iaXQocmVnLCBjaF9uaXAsIGNvbmZpZy0+ZnJtX2ZtdCk7CisJCXZwaWZfd3JfYml0KHJlZywgVlBJRl9DSF9ZQ19NVVhfQklULCBjb25maWctPnljbXV4X21vZGUpOworCQl2cGlmX3dyX2JpdChyZWcsIFZQSUZfQ0hfSU5QVVRfRklFTERfRlJBTUVfQklULAorCQkJCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuc3RvcmFnZV9tb2RlKTsKKworCQkvKiBTZXQgcmFzdGVyIHNjYW5uaW5nIFNEUiBGb3JtYXQgKi8KKwkJdnBpZl9jbHJfYml0KHJlZywgVlBJRl9DSF9TRFJfRk1UX0JJVCk7CisJCXZwaWZfd3JfYml0KHJlZywgVlBJRl9DSF9EQVRBX01PREVfQklULCBjb25maWctPmNhcHR1cmVfZm9ybWF0KTsKKworCQlpZiAoY2hhbm5lbF9pZCA+IDEpCS8qIFNldCB0aGUgUGl4ZWwgZW5hYmxlIGJpdCAqLworCQkJdnBpZl9zZXRfYml0KHJlZywgVlBJRl9ESVNQTEFZX1BJWF9FTl9CSVQpOworCQllbHNlIGlmIChjb25maWctPmNhcHR1cmVfZm9ybWF0KSB7CisJCQkvKiBTZXQgdGhlIHBvbGFyaXR5IG9mIHZhcmlvdXMgcGlucyAqLworCQkJdnBpZl93cl9iaXQocmVnLCBWUElGX0NIX0ZJRF9QT0xBUklUWV9CSVQsCisJCQkJCXZwaWZwYXJhbXMtPmlmYWNlLmZpZF9wb2wpOworCQkJdnBpZl93cl9iaXQocmVnLCBWUElGX0NIX1ZfVkFMSURfUE9MQVJJVFlfQklULAorCQkJCQl2cGlmcGFyYW1zLT5pZmFjZS52ZF9wb2wpOworCQkJdnBpZl93cl9iaXQocmVnLCBWUElGX0NIX0hfVkFMSURfUE9MQVJJVFlfQklULAorCQkJCQl2cGlmcGFyYW1zLT5pZmFjZS5oZF9wb2wpOworCisJCQl2YWx1ZSA9IHJlZ3IocmVnKTsKKwkJCS8qIFNldCBkYXRhIHdpZHRoICovCisJCQl2YWx1ZSAmPSAoKH4odW5zaWduZWQgaW50KSgweDMpKSA8PAorCQkJCQlWUElGX0NIX0RBVEFfV0lEVEhfQklUKTsKKwkJCXZhbHVlIHw9ICgodnBpZnBhcmFtcy0+cGFyYW1zLmRhdGFfc3opIDw8CisJCQkJCQkgICAgIFZQSUZfQ0hfREFUQV9XSURUSF9CSVQpOworCQkJcmVndyh2YWx1ZSwgcmVnKTsKKwkJfQorCisJCS8qIFdyaXRlIHRoZSBwaXRjaCBpbiB0aGUgZHJpdmVyICovCisJCXJlZ3coKHZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5ocGl0Y2gpLAorCQkJCQkJdnBpZnJlZ3NbaV0ubGluZV9vZmZzZXQpOworCX0KK30KKworLyogdnBpZl9zZXRfdmlkZW9fcGFyYW1zCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHZpZGVvIHBhcmFtZXRlcnMgaW4gVlBJRiByZWdpc3RlcgorICovCitpbnQgdnBpZl9zZXRfdmlkZW9fcGFyYW1zKHN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZnBhcmFtcywgdTggY2hhbm5lbF9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgKmNvbmZpZyA9ICZ2cGlmcGFyYW1zLT5zdGRfaW5mbzsKKwlpbnQgZm91bmQgPSAxOworCisJdnBpZl9zZXRfbW9kZV9pbmZvKGNvbmZpZywgY2hhbm5lbF9pZCwgY2hhbm5lbF9pZCk7CisJaWYgKCFjb25maWctPnljbXV4X21vZGUpIHsKKwkJLyogWUMgYXJlIG9uIHNlcGFyYXRlIGNoYW5uZWxzIChIRFRWIGZvcm1hdHMpICovCisJCXZwaWZfc2V0X21vZGVfaW5mbyhjb25maWcsIGNoYW5uZWxfaWQgKyAxLCBjaGFubmVsX2lkKTsKKwkJZm91bmQgPSAyOworCX0KKworCWNvbmZpZ192cGlmX3BhcmFtcyh2cGlmcGFyYW1zLCBjaGFubmVsX2lkLCBmb3VuZCk7CisKKwlyZWd3KDB4ODAsIFZQSUZfUkVRX1NJWkUpOworCXJlZ3coMHgwMSwgVlBJRl9FTVVMQVRJT05fQ1RSTCk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CitFWFBPUlRfU1lNQk9MKHZwaWZfc2V0X3ZpZGVvX3BhcmFtcyk7CisKK3ZvaWQgdnBpZl9zZXRfdmJpX2Rpc3BsYXlfcGFyYW1zKHN0cnVjdCB2cGlmX3ZiaV9wYXJhbXMgKnZiaXBhcmFtcywKKwkJCQl1OCBjaGFubmVsX2lkKQoreworCXUzMiB2YWx1ZTsKKworCXZhbHVlID0gMHgzRjggJiAodmJpcGFyYW1zLT5oc3RhcnQwKTsKKwl2YWx1ZSB8PSAweDNGRkZGRkYgJiAoKHZiaXBhcmFtcy0+dnN0YXJ0MCkgPDwgMTYpOworCXJlZ3codmFsdWUsIHZwaWZyZWdzW2NoYW5uZWxfaWRdLnZhbmMwX3N0cnQpOworCisJdmFsdWUgPSAweDNGOCAmICh2YmlwYXJhbXMtPmhzdGFydDEpOworCXZhbHVlIHw9IDB4M0ZGRkZGRiAmICgodmJpcGFyYW1zLT52c3RhcnQxKSA8PCAxNik7CisJcmVndyh2YWx1ZSwgdnBpZnJlZ3NbY2hhbm5lbF9pZF0udmFuYzFfc3RydCk7CisKKwl2YWx1ZSA9IDB4M0Y4ICYgKHZiaXBhcmFtcy0+aHNpemUwKTsKKwl2YWx1ZSB8PSAweDNGRkZGRkYgJiAoKHZiaXBhcmFtcy0+dnNpemUwKSA8PCAxNik7CisJcmVndyh2YWx1ZSwgdnBpZnJlZ3NbY2hhbm5lbF9pZF0udmFuYzBfc2l6ZSk7CisKKwl2YWx1ZSA9IDB4M0Y4ICYgKHZiaXBhcmFtcy0+aHNpemUxKTsKKwl2YWx1ZSB8PSAweDNGRkZGRkYgJiAoKHZiaXBhcmFtcy0+dnNpemUxKSA8PCAxNik7CisJcmVndyh2YWx1ZSwgdnBpZnJlZ3NbY2hhbm5lbF9pZF0udmFuYzFfc2l6ZSk7CisKK30KK0VYUE9SVF9TWU1CT0wodnBpZl9zZXRfdmJpX2Rpc3BsYXlfcGFyYW1zKTsKKworaW50IHZwaWZfY2hhbm5lbF9nZXRmaWQodTggY2hhbm5lbF9pZCkKK3sKKwlyZXR1cm4gKHJlZ3IodnBpZnJlZ3NbY2hhbm5lbF9pZF0uY2hfY3RybCkgJiBWUElGX0NIX0ZJRF9NQVNLKQorCQkJCQk+PiBWUElGX0NIX0ZJRF9TSElGVDsKK30KK0VYUE9SVF9TWU1CT0wodnBpZl9jaGFubmVsX2dldGZpZCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHZwaWZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PRU5UOworCisJcmVzX2xlbiA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX2xlbiwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FQlVTWTsKKworCXZwaWZfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzX2xlbik7CisJaWYgKCF2cGlmX2Jhc2UpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGZhaWw7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnZwaWZfbG9jayk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgInZwaWYgcHJvYmUgc3VjY2Vzc1xuIik7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19sZW4pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpb3VubWFwKHZwaWZfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19sZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cGlmX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ2cGlmIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodnBpZl9yZW1vdmUpLAorCS5wcm9iZSA9IHZwaWZfcHJvYmUsCit9OworCitzdGF0aWMgdm9pZCB2cGlmX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnBpZl9kcml2ZXIpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB2cGlmX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2cGlmX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodnBpZl9pbml0KTsKK21vZHVsZV9leGl0KHZwaWZfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODg0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5oCkBAIC0wLDAgKzEsNjQyIEBACisvKgorICogVlBJRiBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAuYXMgaXMuIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIFZQSUZfSAorI2RlZmluZSBWUElGX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZG02NDZ4Lmg+CisKKy8qIE1heGltdW0gY2hhbm5lbCBhbGxvd2VkICovCisjZGVmaW5lIFZQSUZfTlVNX0NIQU5ORUxTCQkoNCkKKyNkZWZpbmUgVlBJRl9DQVBUVVJFX05VTV9DSEFOTkVMUwkoMikKKyNkZWZpbmUgVlBJRl9ESVNQTEFZX05VTV9DSEFOTkVMUwkoMikKKworLyogTWFjcm9zIHRvIHJlYWQvd3JpdGUgcmVnaXN0ZXJzICovCitleHRlcm4gdm9pZCBfX2lvbWVtICp2cGlmX2Jhc2U7CitleHRlcm4gc3BpbmxvY2tfdCB2cGlmX2xvY2s7CisKKyNkZWZpbmUgcmVncihyZWcpICAgICAgICAgICAgICAgcmVhZGwoKHJlZykgKyB2cGlmX2Jhc2UpCisjZGVmaW5lIHJlZ3codmFsdWUsIHJlZykgICAgICAgIHdyaXRlbCh2YWx1ZSwgKHJlZyArIHZwaWZfYmFzZSkpCisKKy8qIFJlZ2lzdGVyIEFkZHJlc3NzIE9mZnNldHMgKi8KKyNkZWZpbmUgVlBJRl9QSUQJCQkoMHgwMDAwKQorI2RlZmluZSBWUElGX0NIMF9DVFJMCQkJKDB4MDAwNCkKKyNkZWZpbmUgVlBJRl9DSDFfQ1RSTAkJCSgweDAwMDgpCisjZGVmaW5lIFZQSUZfQ0gyX0NUUkwJCQkoMHgwMDBDKQorI2RlZmluZSBWUElGX0NIM19DVFJMCQkJKDB4MDAxMCkKKworI2RlZmluZSBWUElGX0lOVEVOCQkJKDB4MDAyMCkKKyNkZWZpbmUgVlBJRl9JTlRFTl9TRVQJCQkoMHgwMDI0KQorI2RlZmluZSBWUElGX0lOVEVOX0NMUgkJCSgweDAwMjgpCisjZGVmaW5lIFZQSUZfU1RBVFVTCQkJKDB4MDAyQykKKyNkZWZpbmUgVlBJRl9TVEFUVVNfQ0xSCQkJKDB4MDAzMCkKKyNkZWZpbmUgVlBJRl9FTVVMQVRJT05fQ1RSTAkJKDB4MDAzNCkKKyNkZWZpbmUgVlBJRl9SRVFfU0laRQkJCSgweDAwMzgpCisKKyNkZWZpbmUgVlBJRl9DSDBfVE9QX1NUUlRfQUREX0xVTUEJKDB4MDA0MCkKKyNkZWZpbmUgVlBJRl9DSDBfQlRNX1NUUlRfQUREX0xVTUEJKDB4MDA0NCkKKyNkZWZpbmUgVlBJRl9DSDBfVE9QX1NUUlRfQUREX0NIUk9NQQkoMHgwMDQ4KQorI2RlZmluZSBWUElGX0NIMF9CVE1fU1RSVF9BRERfQ0hST01BCSgweDAwNGMpCisjZGVmaW5lIFZQSUZfQ0gwX1RPUF9TVFJUX0FERF9IQU5DCSgweDAwNTApCisjZGVmaW5lIFZQSUZfQ0gwX0JUTV9TVFJUX0FERF9IQU5DCSgweDAwNTQpCisjZGVmaW5lIFZQSUZfQ0gwX1RPUF9TVFJUX0FERF9WQU5DCSgweDAwNTgpCisjZGVmaW5lIFZQSUZfQ0gwX0JUTV9TVFJUX0FERF9WQU5DCSgweDAwNWMpCisjZGVmaW5lIFZQSUZfQ0gwX1NQX0NGRwkJCSgweDAwNjApCisjZGVmaW5lIFZQSUZfQ0gwX0lNR19BRERfT0ZTVAkJKDB4MDA2NCkKKyNkZWZpbmUgVlBJRl9DSDBfSEFOQ19BRERfT0ZTVAkJKDB4MDA2OCkKKyNkZWZpbmUgVlBJRl9DSDBfSF9DRkcJCQkoMHgwMDZjKQorI2RlZmluZSBWUElGX0NIMF9WX0NGR18wMAkJKDB4MDA3MCkKKyNkZWZpbmUgVlBJRl9DSDBfVl9DRkdfMDEJCSgweDAwNzQpCisjZGVmaW5lIFZQSUZfQ0gwX1ZfQ0ZHXzAyCQkoMHgwMDc4KQorI2RlZmluZSBWUElGX0NIMF9WX0NGR18wMwkJKDB4MDA3YykKKworI2RlZmluZSBWUElGX0NIMV9UT1BfU1RSVF9BRERfTFVNQQkoMHgwMDgwKQorI2RlZmluZSBWUElGX0NIMV9CVE1fU1RSVF9BRERfTFVNQQkoMHgwMDg0KQorI2RlZmluZSBWUElGX0NIMV9UT1BfU1RSVF9BRERfQ0hST01BCSgweDAwODgpCisjZGVmaW5lIFZQSUZfQ0gxX0JUTV9TVFJUX0FERF9DSFJPTUEJKDB4MDA4YykKKyNkZWZpbmUgVlBJRl9DSDFfVE9QX1NUUlRfQUREX0hBTkMJKDB4MDA5MCkKKyNkZWZpbmUgVlBJRl9DSDFfQlRNX1NUUlRfQUREX0hBTkMJKDB4MDA5NCkKKyNkZWZpbmUgVlBJRl9DSDFfVE9QX1NUUlRfQUREX1ZBTkMJKDB4MDA5OCkKKyNkZWZpbmUgVlBJRl9DSDFfQlRNX1NUUlRfQUREX1ZBTkMJKDB4MDA5YykKKyNkZWZpbmUgVlBJRl9DSDFfU1BfQ0ZHCQkJKDB4MDBhMCkKKyNkZWZpbmUgVlBJRl9DSDFfSU1HX0FERF9PRlNUCQkoMHgwMGE0KQorI2RlZmluZSBWUElGX0NIMV9IQU5DX0FERF9PRlNUCQkoMHgwMGE4KQorI2RlZmluZSBWUElGX0NIMV9IX0NGRwkJCSgweDAwYWMpCisjZGVmaW5lIFZQSUZfQ0gxX1ZfQ0ZHXzAwCQkoMHgwMGIwKQorI2RlZmluZSBWUElGX0NIMV9WX0NGR18wMQkJKDB4MDBiNCkKKyNkZWZpbmUgVlBJRl9DSDFfVl9DRkdfMDIJCSgweDAwYjgpCisjZGVmaW5lIFZQSUZfQ0gxX1ZfQ0ZHXzAzCQkoMHgwMGJjKQorCisjZGVmaW5lIFZQSUZfQ0gyX1RPUF9TVFJUX0FERF9MVU1BCSgweDAwYzApCisjZGVmaW5lIFZQSUZfQ0gyX0JUTV9TVFJUX0FERF9MVU1BCSgweDAwYzQpCisjZGVmaW5lIFZQSUZfQ0gyX1RPUF9TVFJUX0FERF9DSFJPTUEJKDB4MDBjOCkKKyNkZWZpbmUgVlBJRl9DSDJfQlRNX1NUUlRfQUREX0NIUk9NQQkoMHgwMGNjKQorI2RlZmluZSBWUElGX0NIMl9UT1BfU1RSVF9BRERfSEFOQwkoMHgwMGQwKQorI2RlZmluZSBWUElGX0NIMl9CVE1fU1RSVF9BRERfSEFOQwkoMHgwMGQ0KQorI2RlZmluZSBWUElGX0NIMl9UT1BfU1RSVF9BRERfVkFOQwkoMHgwMGQ4KQorI2RlZmluZSBWUElGX0NIMl9CVE1fU1RSVF9BRERfVkFOQwkoMHgwMGRjKQorI2RlZmluZSBWUElGX0NIMl9TUF9DRkcJCQkoMHgwMGUwKQorI2RlZmluZSBWUElGX0NIMl9JTUdfQUREX09GU1QJCSgweDAwZTQpCisjZGVmaW5lIFZQSUZfQ0gyX0hBTkNfQUREX09GU1QJCSgweDAwZTgpCisjZGVmaW5lIFZQSUZfQ0gyX0hfQ0ZHCQkJKDB4MDBlYykKKyNkZWZpbmUgVlBJRl9DSDJfVl9DRkdfMDAJCSgweDAwZjApCisjZGVmaW5lIFZQSUZfQ0gyX1ZfQ0ZHXzAxCQkoMHgwMGY0KQorI2RlZmluZSBWUElGX0NIMl9WX0NGR18wMgkJKDB4MDBmOCkKKyNkZWZpbmUgVlBJRl9DSDJfVl9DRkdfMDMJCSgweDAwZmMpCisjZGVmaW5lIFZQSUZfQ0gyX0hBTkMwX1NUUlQJCSgweDAxMDApCisjZGVmaW5lIFZQSUZfQ0gyX0hBTkMwX1NJWkUJCSgweDAxMDQpCisjZGVmaW5lIFZQSUZfQ0gyX0hBTkMxX1NUUlQJCSgweDAxMDgpCisjZGVmaW5lIFZQSUZfQ0gyX0hBTkMxX1NJWkUJCSgweDAxMGMpCisjZGVmaW5lIFZQSUZfQ0gyX1ZBTkMwX1NUUlQJCSgweDAxMTApCisjZGVmaW5lIFZQSUZfQ0gyX1ZBTkMwX1NJWkUJCSgweDAxMTQpCisjZGVmaW5lIFZQSUZfQ0gyX1ZBTkMxX1NUUlQJCSgweDAxMTgpCisjZGVmaW5lIFZQSUZfQ0gyX1ZBTkMxX1NJWkUJCSgweDAxMWMpCisKKyNkZWZpbmUgVlBJRl9DSDNfVE9QX1NUUlRfQUREX0xVTUEJKDB4MDE0MCkKKyNkZWZpbmUgVlBJRl9DSDNfQlRNX1NUUlRfQUREX0xVTUEJKDB4MDE0NCkKKyNkZWZpbmUgVlBJRl9DSDNfVE9QX1NUUlRfQUREX0NIUk9NQQkoMHgwMTQ4KQorI2RlZmluZSBWUElGX0NIM19CVE1fU1RSVF9BRERfQ0hST01BCSgweDAxNGMpCisjZGVmaW5lIFZQSUZfQ0gzX1RPUF9TVFJUX0FERF9IQU5DCSgweDAxNTApCisjZGVmaW5lIFZQSUZfQ0gzX0JUTV9TVFJUX0FERF9IQU5DCSgweDAxNTQpCisjZGVmaW5lIFZQSUZfQ0gzX1RPUF9TVFJUX0FERF9WQU5DCSgweDAxNTgpCisjZGVmaW5lIFZQSUZfQ0gzX0JUTV9TVFJUX0FERF9WQU5DCSgweDAxNWMpCisjZGVmaW5lIFZQSUZfQ0gzX1NQX0NGRwkJCSgweDAxNjApCisjZGVmaW5lIFZQSUZfQ0gzX0lNR19BRERfT0ZTVAkJKDB4MDE2NCkKKyNkZWZpbmUgVlBJRl9DSDNfSEFOQ19BRERfT0ZTVAkJKDB4MDE2OCkKKyNkZWZpbmUgVlBJRl9DSDNfSF9DRkcJCQkoMHgwMTZjKQorI2RlZmluZSBWUElGX0NIM19WX0NGR18wMAkJKDB4MDE3MCkKKyNkZWZpbmUgVlBJRl9DSDNfVl9DRkdfMDEJCSgweDAxNzQpCisjZGVmaW5lIFZQSUZfQ0gzX1ZfQ0ZHXzAyCQkoMHgwMTc4KQorI2RlZmluZSBWUElGX0NIM19WX0NGR18wMwkJKDB4MDE3YykKKyNkZWZpbmUgVlBJRl9DSDNfSEFOQzBfU1RSVAkJKDB4MDE4MCkKKyNkZWZpbmUgVlBJRl9DSDNfSEFOQzBfU0laRQkJKDB4MDE4NCkKKyNkZWZpbmUgVlBJRl9DSDNfSEFOQzFfU1RSVAkJKDB4MDE4OCkKKyNkZWZpbmUgVlBJRl9DSDNfSEFOQzFfU0laRQkJKDB4MDE4YykKKyNkZWZpbmUgVlBJRl9DSDNfVkFOQzBfU1RSVAkJKDB4MDE5MCkKKyNkZWZpbmUgVlBJRl9DSDNfVkFOQzBfU0laRQkJKDB4MDE5NCkKKyNkZWZpbmUgVlBJRl9DSDNfVkFOQzFfU1RSVAkJKDB4MDE5OCkKKyNkZWZpbmUgVlBJRl9DSDNfVkFOQzFfU0laRQkJKDB4MDE5YykKKworI2RlZmluZSBWUElGX0lPREZUX0NUUkwJCQkoMHgwMWMwKQorCisvKiBGdW5jdGlvbnMgZm9yIGJpdCBNYW5pcHVsYXRpb24gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2cGlmX3NldF9iaXQodTMyIHJlZywgdTMyIGJpdCkKK3sKKwlyZWd3KChyZWdyKHJlZykpIHwgKDB4MDEgPDwgYml0KSwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZwaWZfY2xyX2JpdCh1MzIgcmVnLCB1MzIgYml0KQoreworCXJlZ3coKChyZWdyKHJlZykpICYgfigweDAxIDw8IGJpdCkpLCByZWcpOworfQorCisvKiBNYWNybyBmb3IgR2VuZXJhdGluZyBtYXNrICovCisjaWZkZWYgR0VORVJBVEVfTUFTSworI3VuZGVmIEdFTkVSQVRFX01BU0sKKyNlbmRpZgorCisjZGVmaW5lIEdFTkVSQVRFX01BU0soYml0cywgcG9zKSBcCisJCSgoKCgweEZGRkZGRkZGKSA8PCAoMzIgLSBiaXRzKSkgPj4gKDMyIC0gYml0cykpIDw8IHBvcykKKworLyogQml0IHBvc2l0aW9ucyBpbiB0aGUgY2hhbm5lbCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBWUElGX0NIX0RBVEFfTU9ERV9CSVQJKDIpCisjZGVmaW5lIFZQSUZfQ0hfWUNfTVVYX0JJVAkoMykKKyNkZWZpbmUgVlBJRl9DSF9TRFJfRk1UX0JJVAkoNCkKKyNkZWZpbmUgVlBJRl9DSF9IQU5DX0VOX0JJVAkoOCkKKyNkZWZpbmUgVlBJRl9DSF9WQU5DX0VOX0JJVAkoOSkKKworI2RlZmluZSBWUElGX0NBUFRVUkVfQ0hfTklQCSgxMCkKKyNkZWZpbmUgVlBJRl9ESVNQTEFZX0NIX05JUAkoMTEpCisKKyNkZWZpbmUgVlBJRl9ESVNQTEFZX1BJWF9FTl9CSVQJKDEwKQorCisjZGVmaW5lIFZQSUZfQ0hfSU5QVVRfRklFTERfRlJBTUVfQklUCSgxMikKKworI2RlZmluZSBWUElGX0NIX0ZJRF9QT0xBUklUWV9CSVQJKDE1KQorI2RlZmluZSBWUElGX0NIX1ZfVkFMSURfUE9MQVJJVFlfQklUCSgxNCkKKyNkZWZpbmUgVlBJRl9DSF9IX1ZBTElEX1BPTEFSSVRZX0JJVAkoMTMpCisjZGVmaW5lIFZQSUZfQ0hfREFUQV9XSURUSF9CSVQJCSgyOCkKKworI2RlZmluZSBWUElGX0NIX0NMS19FREdFX0NUUkxfQklUCSgzMSkKKworLyogTWFzayB2YXJpb3VzIGxlbmd0aCAqLworI2RlZmluZSBWUElGX0NIX0VBVlNBVl9NQVNLCUdFTkVSQVRFX01BU0soMTMsIDApCisjZGVmaW5lIFZQSUZfQ0hfTEVOX01BU0sJR0VORVJBVEVfTUFTSygxMiwgMCkKKyNkZWZpbmUgVlBJRl9DSF9XSURUSF9NQVNLCUdFTkVSQVRFX01BU0soMTMsIDApCisjZGVmaW5lIFZQSUZfQ0hfTEVOX1NISUZUCSgxNikKKworLyogVlBJRiBtYXNrcyBmb3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIFZQSUZfUkVRX1NJWkVfTUFTSwkoMHgxZmYpCisKKy8qIGJpdCBwb3NvdGlvbiBvZiBpbnRlcnJ1cHQgdnBpZl9jaF9pbnRyIHJlZ2lzdGVyICovCisjZGVmaW5lIFZQSUZfSU5URU5fRlJBTUVfQ0gwCSgweDAwMDAwMDAxKQorI2RlZmluZSBWUElGX0lOVEVOX0ZSQU1FX0NIMQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgVlBJRl9JTlRFTl9GUkFNRV9DSDIJKDB4MDAwMDAwMDQpCisjZGVmaW5lIFZQSUZfSU5URU5fRlJBTUVfQ0gzCSgweDAwMDAwMDA4KQorCisvKiBiaXQgcG9zaXRpb24gb2YgY2xvY2sgYW5kIGNoYW5uZWwgZW5hYmxlIGluIHZwaWZfY2huX2N0cmwgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBWUElGX0NIMF9DTEtfRU4JCSgweDAwMDAwMDAyKQorI2RlZmluZSBWUElGX0NIMF9FTgkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIFZQSUZfQ0gxX0NMS19FTgkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIFZQSUZfQ0gxX0VOCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVlBJRl9DSDJfQ0xLX0VOCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgVlBJRl9DSDJfRU4JCSgweDAwMDAwMDAxKQorI2RlZmluZSBWUElGX0NIM19DTEtfRU4JCSgweDAwMDAwMDAyKQorI2RlZmluZSBWUElGX0NIM19FTgkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIFZQSUZfQ0hfQ0xLX0VOCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgVlBJRl9DSF9FTgkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgVlBJRl9JTlRfVE9QCSgweDAwKQorI2RlZmluZSBWUElGX0lOVF9CT1RUT00JKDB4MDEpCisjZGVmaW5lIFZQSUZfSU5UX0JPVEgJKDB4MDIpCisKKyNkZWZpbmUgVlBJRl9DSDBfSU5UX0NUUkxfU0hJRlQJKDYpCisjZGVmaW5lIFZQSUZfQ0gxX0lOVF9DVFJMX1NISUZUCSg2KQorI2RlZmluZSBWUElGX0NIMl9JTlRfQ1RSTF9TSElGVAkoNikKKyNkZWZpbmUgVlBJRl9DSDNfSU5UX0NUUkxfU0hJRlQJKDYpCisjZGVmaW5lIFZQSUZfQ0hfSU5UX0NUUkxfU0hJRlQJKDYpCisKKy8qIGVuYWJsZWQgaW50ZXJydXB0IG9uIGJvdGggdGhlIGZpZWxkcyBvbiB2cGlkX2NoMF9jdHJsIHJlZ2lzdGVyICovCisjZGVmaW5lIGNoYW5uZWwwX2ludHJfYXNzZXJ0KCkJKHJlZ3coKHJlZ3IoVlBJRl9DSDBfQ1RSTCl8XAorCShWUElGX0lOVF9CT1RIIDw8IFZQSUZfQ0gwX0lOVF9DVFJMX1NISUZUKSksIFZQSUZfQ0gwX0NUUkwpKQorCisvKiBlbmFibGVkIGludGVycnVwdCBvbiBib3RoIHRoZSBmaWVsZHMgb24gdnBpZF9jaDFfY3RybCByZWdpc3RlciAqLworI2RlZmluZSBjaGFubmVsMV9pbnRyX2Fzc2VydCgpCShyZWd3KChyZWdyKFZQSUZfQ0gxX0NUUkwpfFwKKwkoVlBJRl9JTlRfQk9USCA8PCBWUElGX0NIMV9JTlRfQ1RSTF9TSElGVCkpLCBWUElGX0NIMV9DVFJMKSkKKworLyogZW5hYmxlZCBpbnRlcnJ1cHQgb24gYm90aCB0aGUgZmllbGRzIG9uIHZwaWRfY2gwX2N0cmwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgY2hhbm5lbDJfaW50cl9hc3NlcnQoKSAJKHJlZ3coKHJlZ3IoVlBJRl9DSDJfQ1RSTCl8XAorCShWUElGX0lOVF9CT1RIIDw8IFZQSUZfQ0gyX0lOVF9DVFJMX1NISUZUKSksIFZQSUZfQ0gyX0NUUkwpKQorCisvKiBlbmFibGVkIGludGVycnVwdCBvbiBib3RoIHRoZSBmaWVsZHMgb24gdnBpZF9jaDFfY3RybCByZWdpc3RlciAqLworI2RlZmluZSBjaGFubmVsM19pbnRyX2Fzc2VydCgpIAkocmVndygocmVncihWUElGX0NIM19DVFJMKXxcCisJKFZQSUZfSU5UX0JPVEggPDwgVlBJRl9DSDNfSU5UX0NUUkxfU0hJRlQpKSwgVlBJRl9DSDNfQ1RSTCkpCisKKyNkZWZpbmUgVlBJRl9DSF9GSURfTUFTSwkoMHgyMCkKKyNkZWZpbmUgVlBJRl9DSF9GSURfU0hJRlQJKDUpCisKKyNkZWZpbmUgVlBJRl9OVFNDX1ZCSV9TVEFSVF9GSUVMRDAJKDEpCisjZGVmaW5lIFZQSUZfTlRTQ19WQklfU1RBUlRfRklFTEQxCSgyNjMpCisjZGVmaW5lIFZQSUZfUEFMX1ZCSV9TVEFSVF9GSUVMRDAJKDYyNCkKKyNkZWZpbmUgVlBJRl9QQUxfVkJJX1NUQVJUX0ZJRUxEMQkoMzExKQorCisjZGVmaW5lIFZQSUZfTlRTQ19IQklfU1RBUlRfRklFTEQwCSgxKQorI2RlZmluZSBWUElGX05UU0NfSEJJX1NUQVJUX0ZJRUxEMQkoMjYzKQorI2RlZmluZSBWUElGX1BBTF9IQklfU1RBUlRfRklFTEQwCSg2MjQpCisjZGVmaW5lIFZQSUZfUEFMX0hCSV9TVEFSVF9GSUVMRDEJKDMxMSkKKworI2RlZmluZSBWUElGX05UU0NfVkJJX0NPVU5UX0ZJRUxEMAkoMjApCisjZGVmaW5lIFZQSUZfTlRTQ19WQklfQ09VTlRfRklFTEQxCSgxOSkKKyNkZWZpbmUgVlBJRl9QQUxfVkJJX0NPVU5UX0ZJRUxEMAkoMjQpCisjZGVmaW5lIFZQSUZfUEFMX1ZCSV9DT1VOVF9GSUVMRDEJKDI1KQorCisjZGVmaW5lIFZQSUZfTlRTQ19IQklfQ09VTlRfRklFTEQwCSgyNjMpCisjZGVmaW5lIFZQSUZfTlRTQ19IQklfQ09VTlRfRklFTEQxCSgyNjIpCisjZGVmaW5lIFZQSUZfUEFMX0hCSV9DT1VOVF9GSUVMRDAJKDMxMikKKyNkZWZpbmUgVlBJRl9QQUxfSEJJX0NPVU5UX0ZJRUxEMQkoMzEzKQorCisjZGVmaW5lIFZQSUZfTlRTQ19WQklfU0FNUExFU19QRVJfTElORQkoNzIwKQorI2RlZmluZSBWUElGX1BBTF9WQklfU0FNUExFU19QRVJfTElORQkoNzIwKQorI2RlZmluZSBWUElGX05UU0NfSEJJX1NBTVBMRVNfUEVSX0xJTkUJKDI2OCkKKyNkZWZpbmUgVlBJRl9QQUxfSEJJX1NBTVBMRVNfUEVSX0xJTkUJKDI4MCkKKworI2RlZmluZSBWUElGX0NIX1ZBTkNfRU4JCQkoMHgyMCkKKyNkZWZpbmUgVlBJRl9ETUFfUkVRX1NJWkUJCSgweDA4MCkKKyNkZWZpbmUgVlBJRl9FTVVMQVRJT05fRElTQUJMRQkJKDB4MDEpCisKK2V4dGVybiB1OCBpcnFfdnBpZl9jYXB0dXJlX2NoYW5uZWxbVlBJRl9OVU1fQ0hBTk5FTFNdOworCisvKiBpbmxpbmUgZnVuY3Rpb24gdG8gZW5hYmxlL2Rpc2FibGUgY2hhbm5lbDAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY2hhbm5lbDAoaW50IGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKQorCQlyZWd3KChyZWdyKFZQSUZfQ0gwX0NUUkwpIHwgKFZQSUZfQ0gwX0VOKSksIFZQSUZfQ0gwX0NUUkwpOworCWVsc2UKKwkJcmVndygocmVncihWUElGX0NIMF9DVFJMKSAmICh+VlBJRl9DSDBfRU4pKSwgVlBJRl9DSDBfQ1RSTCk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBlbmFibGUvZGlzYWJsZSBjaGFubmVsMSAqLworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9jaGFubmVsMShpbnQgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXJlZ3coKHJlZ3IoVlBJRl9DSDFfQ1RSTCkgfCAoVlBJRl9DSDFfRU4pKSwgVlBJRl9DSDFfQ1RSTCk7CisJZWxzZQorCQlyZWd3KChyZWdyKFZQSUZfQ0gxX0NUUkwpICYgKH5WUElGX0NIMV9FTikpLCBWUElGX0NIMV9DVFJMKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwwICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbm5lbDBfaW50cl9lbmFibGUoaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwaWZfbG9jaywgZmxhZ3MpOworCisJaWYgKGVuYWJsZSkgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pIHwgMHgxMCksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IDB4MTApLCBWUElGX0lOVEVOX1NFVCk7CisKKwkJcmVndygocmVncihWUElGX0lOVEVOKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gwKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDApLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9IGVsc2UgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pICYgKH5WUElGX0lOVEVOX0ZSQU1FX0NIMCkpLCBWUElGX0lOVEVOKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOX1NFVCkgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMCksCisJCQkJCQkJVlBJRl9JTlRFTl9TRVQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cGlmX2xvY2ssIGZsYWdzKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwxICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbm5lbDFfaW50cl9lbmFibGUoaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwaWZfbG9jaywgZmxhZ3MpOworCisJaWYgKGVuYWJsZSkgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pIHwgMHgxMCksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IDB4MTApLCBWUElGX0lOVEVOX1NFVCk7CisKKwkJcmVndygocmVncihWUElGX0lOVEVOKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gxKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDEpLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9IGVsc2UgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pICYgKH5WUElGX0lOVEVOX0ZSQU1FX0NIMSkpLCBWUElGX0lOVEVOKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOX1NFVCkgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMSksCisJCQkJCQkJVlBJRl9JTlRFTl9TRVQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cGlmX2xvY2ssIGZsYWdzKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIHNldCBidWZmZXIgYWRkcmVzc2VzIGluIGNhc2Ugb2YgWS9DIG5vbiBtdXggbW9kZSAqLworc3RhdGljIGlubGluZSB2b2lkIGNoMF9zZXRfdmlkZW9idWZfYWRkcl95Y19ubXV4KHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfbHVtYSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCQkgdW5zaWduZWQgbG9uZyB0b3Bfc3RydF9jaHJvbWEsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9jaHJvbWEpCit7CisJcmVndyh0b3Bfc3RydF9sdW1hLCBWUElGX0NIMF9UT1BfU1RSVF9BRERfTFVNQSk7CisJcmVndyhidG1fc3RydF9sdW1hLCBWUElGX0NIMF9CVE1fU1RSVF9BRERfTFVNQSk7CisJcmVndyh0b3Bfc3RydF9jaHJvbWEsIFZQSUZfQ0gxX1RPUF9TVFJUX0FERF9DSFJPTUEpOworCXJlZ3coYnRtX3N0cnRfY2hyb21hLCBWUElGX0NIMV9CVE1fU1RSVF9BRERfQ0hST01BKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIHNldCBidWZmZXIgYWRkcmVzc2VzIGluIFZQSUYgcmVnaXN0ZXJzIGZvciB2aWRlbyBkYXRhICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2gwX3NldF92aWRlb2J1Zl9hZGRyKHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfY2hyb21hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9jaHJvbWEpCit7CisJcmVndyh0b3Bfc3RydF9sdW1hLCBWUElGX0NIMF9UT1BfU1RSVF9BRERfTFVNQSk7CisJcmVndyhidG1fc3RydF9sdW1hLCBWUElGX0NIMF9CVE1fU1RSVF9BRERfTFVNQSk7CisJcmVndyh0b3Bfc3RydF9jaHJvbWEsIFZQSUZfQ0gwX1RPUF9TVFJUX0FERF9DSFJPTUEpOworCXJlZ3coYnRtX3N0cnRfY2hyb21hLCBWUElGX0NIMF9CVE1fU1RSVF9BRERfQ0hST01BKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoMV9zZXRfdmlkZW9idWZfYWRkcih1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2Nocm9tYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCisJcmVndyh0b3Bfc3RydF9sdW1hLCBWUElGX0NIMV9UT1BfU1RSVF9BRERfTFVNQSk7CisJcmVndyhidG1fc3RydF9sdW1hLCBWUElGX0NIMV9CVE1fU1RSVF9BRERfTFVNQSk7CisJcmVndyh0b3Bfc3RydF9jaHJvbWEsIFZQSUZfQ0gxX1RPUF9TVFJUX0FERF9DSFJPTUEpOworCXJlZ3coYnRtX3N0cnRfY2hyb21hLCBWUElGX0NIMV9CVE1fU1RSVF9BRERfQ0hST01BKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoMF9zZXRfdmJpX2FkZHIodW5zaWduZWQgbG9uZyB0b3BfdmJpLAorCXVuc2lnbmVkIGxvbmcgYnRtX3ZiaSwgdW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpCit7CisJcmVndyh0b3BfdmJpLCBWUElGX0NIMF9UT1BfU1RSVF9BRERfVkFOQyk7CisJcmVndyhidG1fdmJpLCBWUElGX0NIMF9CVE1fU1RSVF9BRERfVkFOQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDBfc2V0X2hiaV9hZGRyKHVuc2lnbmVkIGxvbmcgdG9wX3ZiaSwKKwl1bnNpZ25lZCBsb25nIGJ0bV92YmksIHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiKQoreworCXJlZ3codG9wX3ZiaSwgVlBJRl9DSDBfVE9QX1NUUlRfQUREX0hBTkMpOworCXJlZ3coYnRtX3ZiaSwgVlBJRl9DSDBfQlRNX1NUUlRfQUREX0hBTkMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2gxX3NldF92YmlfYWRkcih1bnNpZ25lZCBsb25nIHRvcF92YmksCisJdW5zaWduZWQgbG9uZyBidG1fdmJpLCB1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYikKK3sKKwlyZWd3KHRvcF92YmksIFZQSUZfQ0gxX1RPUF9TVFJUX0FERF9WQU5DKTsKKwlyZWd3KGJ0bV92YmksIFZQSUZfQ0gxX0JUTV9TVFJUX0FERF9WQU5DKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoMV9zZXRfaGJpX2FkZHIodW5zaWduZWQgbG9uZyB0b3BfdmJpLAorCXVuc2lnbmVkIGxvbmcgYnRtX3ZiaSwgdW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpCit7CisJcmVndyh0b3BfdmJpLCBWUElGX0NIMV9UT1BfU1RSVF9BRERfSEFOQyk7CisJcmVndyhidG1fdmJpLCBWUElGX0NIMV9CVE1fU1RSVF9BRERfSEFOQyk7Cit9CisKKy8qIElubGluZSBmdW5jdGlvbiB0byBlbmFibGUgcmF3IHZiaSBpbiB0aGUgZ2l2ZW4gY2hhbm5lbCAqLworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfcmF3X2ZlYXR1cmUodTggY2hhbm5lbF9pZCwgdTggaW5kZXgpCit7CisJdTMyIGN0cmxfcmVnOworCWlmICgwID09IGNoYW5uZWxfaWQpCisJCWN0cmxfcmVnID0gVlBJRl9DSDBfQ1RSTDsKKwllbHNlCisJCWN0cmxfcmVnID0gVlBJRl9DSDFfQ1RSTDsKKworCWlmICgxID09IGluZGV4KQorCQl2cGlmX2Nscl9iaXQoY3RybF9yZWcsIFZQSUZfQ0hfVkFOQ19FTl9CSVQpOworCWVsc2UKKwkJdnBpZl9jbHJfYml0KGN0cmxfcmVnLCBWUElGX0NIX0hBTkNfRU5fQklUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9yYXdfZmVhdHVyZSh1OCBjaGFubmVsX2lkLCB1OCBpbmRleCkKK3sKKwl1MzIgY3RybF9yZWc7CisJaWYgKDAgPT0gY2hhbm5lbF9pZCkKKwkJY3RybF9yZWcgPSBWUElGX0NIMF9DVFJMOworCWVsc2UKKwkJY3RybF9yZWcgPSBWUElGX0NIMV9DVFJMOworCisJaWYgKDEgPT0gaW5kZXgpCisJCXZwaWZfc2V0X2JpdChjdHJsX3JlZywgVlBJRl9DSF9WQU5DX0VOX0JJVCk7CisJZWxzZQorCQl2cGlmX3NldF9iaXQoY3RybF9yZWcsIFZQSUZfQ0hfSEFOQ19FTl9CSVQpOworfQorCisvKiBpbmxpbmUgZnVuY3Rpb24gdG8gZW5hYmxlL2Rpc2FibGUgY2hhbm5lbDIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY2hhbm5lbDIoaW50IGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKSB7CisJCXJlZ3coKHJlZ3IoVlBJRl9DSDJfQ1RSTCkgfCAoVlBJRl9DSDJfQ0xLX0VOKSksIFZQSUZfQ0gyX0NUUkwpOworCQlyZWd3KChyZWdyKFZQSUZfQ0gyX0NUUkwpIHwgKFZQSUZfQ0gyX0VOKSksIFZQSUZfQ0gyX0NUUkwpOworCX0gZWxzZSB7CisJCXJlZ3coKHJlZ3IoVlBJRl9DSDJfQ1RSTCkgJiAoflZQSUZfQ0gyX0NMS19FTikpLCBWUElGX0NIMl9DVFJMKTsKKwkJcmVndygocmVncihWUElGX0NIMl9DVFJMKSAmICh+VlBJRl9DSDJfRU4pKSwgVlBJRl9DSDJfQ1RSTCk7CisJfQorfQorCisvKiBpbmxpbmUgZnVuY3Rpb24gdG8gZW5hYmxlL2Rpc2FibGUgY2hhbm5lbDMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY2hhbm5lbDMoaW50IGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKSB7CisJCXJlZ3coKHJlZ3IoVlBJRl9DSDNfQ1RSTCkgfCAoVlBJRl9DSDNfQ0xLX0VOKSksIFZQSUZfQ0gzX0NUUkwpOworCQlyZWd3KChyZWdyKFZQSUZfQ0gzX0NUUkwpIHwgKFZQSUZfQ0gzX0VOKSksIFZQSUZfQ0gzX0NUUkwpOworCX0gZWxzZSB7CisJCXJlZ3coKHJlZ3IoVlBJRl9DSDNfQ1RSTCkgJiAoflZQSUZfQ0gzX0NMS19FTikpLCBWUElGX0NIM19DVFJMKTsKKwkJcmVndygocmVncihWUElGX0NIM19DVFJMKSAmICh+VlBJRl9DSDNfRU4pKSwgVlBJRl9DSDNfQ1RSTCk7CisJfQorfQorCisvKiBpbmxpbmUgZnVuY3Rpb24gdG8gZW5hYmxlIGludGVycnVwdCBmb3IgY2hhbm5lbDIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFubmVsMl9pbnRyX2VuYWJsZShpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnBpZl9sb2NrLCBmbGFncyk7CisKKwlpZiAoZW5hYmxlKSB7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTikgfCAweDEwKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgMHgxMCksIFZQSUZfSU5URU5fU0VUKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gyKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDIpLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9IGVsc2UgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pICYgKH5WUElGX0lOVEVOX0ZSQU1FX0NIMikpLCBWUElGX0lOVEVOKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOX1NFVCkgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMiksCisJCQkJCQkJVlBJRl9JTlRFTl9TRVQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cGlmX2xvY2ssIGZsYWdzKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGNoYW5uZWwzICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbm5lbDNfaW50cl9lbmFibGUoaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwaWZfbG9jaywgZmxhZ3MpOworCisJaWYgKGVuYWJsZSkgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pIHwgMHgxMCksIFZQSUZfSU5URU4pOworCQlyZWd3KChyZWdyKFZQSUZfSU5URU5fU0VUKSB8IDB4MTApLCBWUElGX0lOVEVOX1NFVCk7CisKKwkJcmVndygocmVncihWUElGX0lOVEVOKSB8IFZQSUZfSU5URU5fRlJBTUVfQ0gzKSwgVlBJRl9JTlRFTik7CisJCXJlZ3coKHJlZ3IoVlBJRl9JTlRFTl9TRVQpIHwgVlBJRl9JTlRFTl9GUkFNRV9DSDMpLAorCQkJCQkJCVZQSUZfSU5URU5fU0VUKTsKKwl9IGVsc2UgeworCQlyZWd3KChyZWdyKFZQSUZfSU5URU4pICYgKH5WUElGX0lOVEVOX0ZSQU1FX0NIMykpLCBWUElGX0lOVEVOKTsKKwkJcmVndygocmVncihWUElGX0lOVEVOX1NFVCkgfCBWUElGX0lOVEVOX0ZSQU1FX0NIMyksCisJCQkJCQkJVlBJRl9JTlRFTl9TRVQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cGlmX2xvY2ssIGZsYWdzKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIGVuYWJsZSByYXcgdmJpIGRhdGEgZm9yIGNoYW5uZWwyICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbm5lbDJfcmF3X2VuYWJsZShpbnQgZW5hYmxlLCB1OCBpbmRleCkKK3sKKwl1MzIgbWFzazsKKworCWlmICgxID09IGluZGV4KQorCQltYXNrID0gVlBJRl9DSF9WQU5DX0VOX0JJVDsKKwllbHNlCisJCW1hc2sgPSBWUElGX0NIX0hBTkNfRU5fQklUOworCisJaWYgKGVuYWJsZSkKKwkJdnBpZl9zZXRfYml0KFZQSUZfQ0gyX0NUUkwsIG1hc2spOworCWVsc2UKKwkJdnBpZl9jbHJfYml0KFZQSUZfQ0gyX0NUUkwsIG1hc2spOworfQorCisvKiBpbmxpbmUgZnVuY3Rpb24gdG8gZW5hYmxlIHJhdyB2YmkgZGF0YSBmb3IgY2hhbm5lbDMqLworc3RhdGljIGlubGluZSB2b2lkIGNoYW5uZWwzX3Jhd19lbmFibGUoaW50IGVuYWJsZSwgdTggaW5kZXgpCit7CisJdTMyIG1hc2s7CisKKwlpZiAoMSA9PSBpbmRleCkKKwkJbWFzayA9IFZQSUZfQ0hfVkFOQ19FTl9CSVQ7CisJZWxzZQorCQltYXNrID0gVlBJRl9DSF9IQU5DX0VOX0JJVDsKKworCWlmIChlbmFibGUpCisJCXZwaWZfc2V0X2JpdChWUElGX0NIM19DVFJMLCBtYXNrKTsKKwllbHNlCisJCXZwaWZfY2xyX2JpdChWUElGX0NIM19DVFJMLCBtYXNrKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIHNldCBidWZmZXIgYWRkcmVzc2VzIGluIGNhc2Ugb2YgWS9DIG5vbiBtdXggbW9kZSAqLworc3RhdGljIGlubGluZSB2b2lkIGNoMl9zZXRfdmlkZW9idWZfYWRkcl95Y19ubXV4KHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfbHVtYSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCQkgdW5zaWduZWQgbG9uZyB0b3Bfc3RydF9jaHJvbWEsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9jaHJvbWEpCit7CisJcmVndyh0b3Bfc3RydF9sdW1hLCBWUElGX0NIMl9UT1BfU1RSVF9BRERfTFVNQSk7CisJcmVndyhidG1fc3RydF9sdW1hLCBWUElGX0NIMl9CVE1fU1RSVF9BRERfTFVNQSk7CisJcmVndyh0b3Bfc3RydF9jaHJvbWEsIFZQSUZfQ0gzX1RPUF9TVFJUX0FERF9DSFJPTUEpOworCXJlZ3coYnRtX3N0cnRfY2hyb21hLCBWUElGX0NIM19CVE1fU1RSVF9BRERfQ0hST01BKTsKK30KKworLyogaW5saW5lIGZ1bmN0aW9uIHRvIHNldCBidWZmZXIgYWRkcmVzc2VzIGluIFZQSUYgcmVnaXN0ZXJzIGZvciB2aWRlbyBkYXRhICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2gyX3NldF92aWRlb2J1Zl9hZGRyKHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfY2hyb21hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9jaHJvbWEpCit7CisJcmVndyh0b3Bfc3RydF9sdW1hLCBWUElGX0NIMl9UT1BfU1RSVF9BRERfTFVNQSk7CisJcmVndyhidG1fc3RydF9sdW1hLCBWUElGX0NIMl9CVE1fU1RSVF9BRERfTFVNQSk7CisJcmVndyh0b3Bfc3RydF9jaHJvbWEsIFZQSUZfQ0gyX1RPUF9TVFJUX0FERF9DSFJPTUEpOworCXJlZ3coYnRtX3N0cnRfY2hyb21hLCBWUElGX0NIMl9CVE1fU1RSVF9BRERfQ0hST01BKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoM19zZXRfdmlkZW9idWZfYWRkcih1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ0bV9zdHJ0X2x1bWEsCisJCQkJCSB1bnNpZ25lZCBsb25nIHRvcF9zdHJ0X2Nocm9tYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfY2hyb21hKQoreworCXJlZ3codG9wX3N0cnRfbHVtYSwgVlBJRl9DSDNfVE9QX1NUUlRfQUREX0xVTUEpOworCXJlZ3coYnRtX3N0cnRfbHVtYSwgVlBJRl9DSDNfQlRNX1NUUlRfQUREX0xVTUEpOworCXJlZ3codG9wX3N0cnRfY2hyb21hLCBWUElGX0NIM19UT1BfU1RSVF9BRERfQ0hST01BKTsKKwlyZWd3KGJ0bV9zdHJ0X2Nocm9tYSwgVlBJRl9DSDNfQlRNX1NUUlRfQUREX0NIUk9NQSk7Cit9CisKKy8qIGlubGluZSBmdW5jdGlvbiB0byBzZXQgYnVmZmVyIGFkZHJlc3NlcyBpbiBWUElGIHJlZ2lzdGVycyBmb3IgdmJpIGRhdGEgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDJfc2V0X3ZiaV9hZGRyKHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfY2hyb21hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9jaHJvbWEpCit7CisJcmVndyh0b3Bfc3RydF9sdW1hLCBWUElGX0NIMl9UT1BfU1RSVF9BRERfVkFOQyk7CisJcmVndyhidG1fc3RydF9sdW1hLCBWUElGX0NIMl9CVE1fU1RSVF9BRERfVkFOQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaDNfc2V0X3ZiaV9hZGRyKHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnRtX3N0cnRfbHVtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgdG9wX3N0cnRfY2hyb21hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBidG1fc3RydF9jaHJvbWEpCit7CisJcmVndyh0b3Bfc3RydF9sdW1hLCBWUElGX0NIM19UT1BfU1RSVF9BRERfVkFOQyk7CisJcmVndyhidG1fc3RydF9sdW1hLCBWUElGX0NIM19CVE1fU1RSVF9BRERfVkFOQyk7Cit9CisKKyNkZWZpbmUgVlBJRl9NQVhfTkFNRQkoMzApCisKKy8qIFRoaXMgc3RydWN0dXJlIHdpbGwgc3RvcmUgc2l6ZSBwYXJhbWV0ZXJzIGFzIHBlciB0aGUgbW9kZSBzZWxlY3RlZCBieSB1c2VyICovCitzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgeworCWNoYXIgbmFtZVtWUElGX01BWF9OQU1FXTsJLyogTmFtZSBvZiB0aGUgbW9kZSAqLworCXUxNiB3aWR0aDsJCQkvKiBJbmRpY2F0ZXMgd2lkdGggb2YgdGhlIGltYWdlICovCisJdTE2IGhlaWdodDsJCQkvKiBJbmRpY2F0ZXMgaGVpZ2h0IG9mIHRoZSBpbWFnZSAqLworCXU4IGZwczsKKwl1OCBmcm1fZm10OwkJCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgaW50ZXJsYWNlZAorCQkJCQkgKiBvciBwcm9ncmVzc2l2ZSBmb3JtYXQgKi8KKwl1OCB5Y211eF9tb2RlOwkJCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbW9kZSByZXF1aXJlcworCQkJCQkgKiBzaW5nbGUgb3IgdHdvIGNoYW5uZWxzICovCisJdTE2IGVhdjJzYXY7CQkJLyogbGVuZ3RoIG9mIHNhdiAyIGVhdiAqLworCXUxNiBzYXYyZWF2OwkJCS8qIGxlbmd0aCBvZiBzYXYgMiBlYXYgKi8KKwl1MTYgbDEsIGwzLCBsNSwgbDcsIGw5LCBsMTE7CS8qIE90aGVyIHBhcmFtZXRlciBjb25maWd1cmF0aW9ucyAqLworCXUxNiB2c2l6ZTsJCQkvKiBWZXJ0aWNhbCBzaXplIG9mIHRoZSBpbWFnZSAqLworCXU4IGNhcHR1cmVfZm9ybWF0OwkJLyogSW5kaWNhdGVzIHdoZXRoZXIgY2FwdHVyZSBmb3JtYXQKKwkJCQkJICogaXMgaW4gQlQgb3IgaW4gQ0NEL0NNT1MgKi8KKwl1OCAgdmJpX3N1cHBvcnRlZDsJCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbW9kZQorCQkJCQkgKiBzdXBwb3J0cyBjYXB0dXJpbmcgdmJpIG9yIG5vdCAqLworCXU4IGhkX3NkOworCXY0bDJfc3RkX2lkIHN0ZGlkOworfTsKKworc3RydWN0IHZwaWZfdmlkZW9fcGFyYW1zOworc3RydWN0IHZwaWZfcGFyYW1zOworc3RydWN0IHZwaWZfdmJpX3BhcmFtczsKKworaW50IHZwaWZfc2V0X3ZpZGVvX3BhcmFtcyhzdHJ1Y3QgdnBpZl9wYXJhbXMgKnZwaWZwYXJhbXMsIHU4IGNoYW5uZWxfaWQpOwordm9pZCB2cGlmX3NldF92YmlfZGlzcGxheV9wYXJhbXMoc3RydWN0IHZwaWZfdmJpX3BhcmFtcyAqdmJpcGFyYW1zLAorCQkJCQkJCXU4IGNoYW5uZWxfaWQpOworaW50IHZwaWZfY2hhbm5lbF9nZXRmaWQodTggY2hhbm5lbF9pZCk7CisKK2VudW0gZGF0YV9zaXplIHsKKwlfOEJJVFMgPSAwLAorCV8xMEJJVFMsCisJXzEyQklUUywKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgdnBpZiBwYXJhbWV0ZXJzIGZvciByYXcgdmJpIGRhdGEgKi8KK3N0cnVjdCB2cGlmX3ZiaV9wYXJhbXMgeworCV9fdTMyIGhzdGFydDA7ICAvKiBIb3Jpem9udGFsIHN0YXJ0IG9mIHJhdyB2YmkgZGF0YSBmb3IgZmlyc3QgZmllbGQgKi8KKwlfX3UzMiB2c3RhcnQwOyAgLyogVmVydGljYWwgc3RhcnQgb2YgcmF3IHZiaSBkYXRhIGZvciBmaXJzdCBmaWVsZCAqLworCV9fdTMyIGhzaXplMDsgICAvKiBIb3Jpem9udGFsIHNpemUgb2YgcmF3IHZiaSBkYXRhIGZvciBmaXJzdCBmaWVsZCAqLworCV9fdTMyIHZzaXplMDsgICAvKiBWZXJ0aWNhbCBzaXplIG9mIHJhdyB2YmkgZGF0YSBmb3IgZmlyc3QgZmllbGQgKi8KKwlfX3UzMiBoc3RhcnQxOyAgLyogSG9yaXpvbnRhbCBzdGFydCBvZiByYXcgdmJpIGRhdGEgZm9yIHNlY29uZCBmaWVsZCAqLworCV9fdTMyIHZzdGFydDE7ICAvKiBWZXJ0aWNhbCBzdGFydCBvZiByYXcgdmJpIGRhdGEgZm9yIHNlY29uZCBmaWVsZCAqLworCV9fdTMyIGhzaXplMTsgICAvKiBIb3Jpem9udGFsIHNpemUgb2YgcmF3IHZiaSBkYXRhIGZvciBzZWNvbmQgZmllbGQgKi8KKwlfX3UzMiB2c2l6ZTE7ICAgLyogVmVydGljYWwgc2l6ZSBvZiByYXcgdmJpIGRhdGEgZm9yIHNlY29uZCBmaWVsZCAqLworfTsKKworLyogc3RydWN0dXJlIGZvciB2cGlmIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCB2cGlmX3ZpZGVvX3BhcmFtcyB7CisJX191OCBzdG9yYWdlX21vZGU7CS8qIEluZGljYXRlcyBmaWVsZCBvciBmcmFtZSBtb2RlICovCisJdW5zaWduZWQgbG9uZyBocGl0Y2g7CisJdjRsMl9zdGRfaWQgc3RkaWQ7Cit9OworCitzdHJ1Y3QgdnBpZl9wYXJhbXMgeworCXN0cnVjdCB2cGlmX2ludGVyZmFjZSBpZmFjZTsKKwlzdHJ1Y3QgdnBpZl92aWRlb19wYXJhbXMgdmlkZW9fcGFyYW1zOworCXN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyBzdGRfaW5mbzsKKwl1bmlvbiBwYXJhbSB7CisJCXN0cnVjdCB2cGlmX3ZiaV9wYXJhbXMJdmJpX3BhcmFtczsKKwkJZW51bSBkYXRhX3NpemUgZGF0YV9zejsKKwl9IHBhcmFtczsKK307CisKKyNlbmRpZgkJCQkvKiBFbmQgb2YgI2lmbmRlZiBWUElGX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDdlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmMKQEAgLTAsMCArMSwyMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqIFRPRE8gOiBhZGQgc3VwcG9ydCBmb3IgVkJJICYgSEJJIGRhdGEgc2VydmljZQorICoJICBhZGQgc3RhdGljIGJ1ZmZlciBhbGxvY2F0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworI2luY2x1ZGUgInZwaWZfY2FwdHVyZS5oIgorI2luY2x1ZGUgInZwaWYuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBEYVZpbmNpIFZQSUYgQ2FwdHVyZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSB2cGlmX2VycihmbXQsIGFyZy4uLikJdjRsMl9lcnIoJnZwaWZfb2JqLnY0bDJfZGV2LCBmbXQsICMjIGFyZykKKyNkZWZpbmUgdnBpZl9kYmcobGV2ZWwsIGRlYnVnLCBmbXQsIGFyZy4uLikJXAorCQl2NGwyX2RiZyhsZXZlbCwgZGVidWcsICZ2cGlmX29iai52NGwyX2RldiwgZm10LCAjIyBhcmcpCisKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworc3RhdGljIHUzMiBjaDBfbnVtYnVmZmVycyA9IDM7CitzdGF0aWMgdTMyIGNoMV9udW1idWZmZXJzID0gMzsKK3N0YXRpYyB1MzIgY2gwX2J1ZnNpemUgPSAxOTIwICogMTA4MCAqIDI7CitzdGF0aWMgdTMyIGNoMV9idWZzaXplID0gNzIwICogNTc2ICogMjsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGNoMF9udW1idWZmZXJzLCB1aW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjaDFfbnVtYnVmZmVycywgdWludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2gwX2J1ZnNpemUsIHVpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNoMV9idWZzaXplLCB1aW50LCBTX0lSVUdPKTsKKworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIDAtMSIpOworTU9EVUxFX1BBUk1fREVTQyhjaDJfbnVtYnVmZmVycywgIkNoYW5uZWwwIGJ1ZmZlciBjb3VudCAoZGVmYXVsdDozKSIpOworTU9EVUxFX1BBUk1fREVTQyhjaDNfbnVtYnVmZmVycywgIkNoYW5uZWwxIGJ1ZmZlciBjb3VudCAoZGVmYXVsdDozKSIpOworTU9EVUxFX1BBUk1fREVTQyhjaDJfYnVmc2l6ZSwgIkNoYW5uZWwwIGJ1ZmZlciBzaXplIChkZWZhdWx0OjE5MjAgeCAxMDgwIHggMikiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gzX2J1ZnNpemUsICJDaGFubmVsMSBidWZmZXIgc2l6ZSAoZGVmYXVsdDo3MjAgeCA1NzYgeCAyKSIpOworCitzdGF0aWMgc3RydWN0IHZwaWZfY29uZmlnX3BhcmFtcyBjb25maWdfcGFyYW1zID0geworCS5taW5fbnVtYnVmZmVycyA9IDMsCisJLm51bWJ1ZmZlcnNbMF0gPSAzLAorCS5udW1idWZmZXJzWzFdID0gMywKKwkubWluX2J1ZnNpemVbMF0gPSA3MjAgKiA0ODAgKiAyLAorCS5taW5fYnVmc2l6ZVsxXSA9IDcyMCAqIDQ4MCAqIDIsCisJLmNoYW5uZWxfYnVmc2l6ZVswXSA9IDE5MjAgKiAxMDgwICogMiwKKwkuY2hhbm5lbF9idWZzaXplWzFdID0gNzIwICogNTc2ICogMiwKK307CisKKy8qIGdsb2JhbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgdnBpZl9kZXZpY2UgdnBpZl9vYmogPSB7IHtOVUxMfSB9Oworc3RhdGljIHN0cnVjdCBkZXZpY2UgKnZwaWZfZGV2OworCisvKioKKyAqIGNoX3BhcmFtczogdmlkZW8gc3RhbmRhcmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB2cGlmCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgY2hfcGFyYW1zW10gPSB7CisJeworCQkiTlRTQ19NIiwgNzIwLCA0ODAsIDMwLCAwLCAxLCAyNjgsIDE0NDAsIDEsIDIzLCAyNjMsIDI2NiwKKwkJMjg2LCA1MjUsIDUyNSwgMCwgMSwgMCwgVjRMMl9TVERfNTI1XzYwLAorCX0sCisJeworCQkiUEFMX0JER0hJSyIsIDcyMCwgNTc2LCAyNSwgMCwgMSwgMjgwLCAxNDQwLCAxLCAyMywgMzExLCAzMTMsCisJCTMzNiwgNjI0LCA2MjUsIDAsIDEsIDAsIFY0TDJfU1REXzYyNV81MCwKKwl9LAorfTsKKworLyoqCisgKiB2cGlmX3VzZXJ2aXJ0X3RvX3BoeXMgOiB0cmFuc2xhdGUgdXNlci92aXJ0dWFsIGFkZHJlc3MgdG8gcGh5IGFkZHJlc3MKKyAqIEB2aXJ0cDogdXNlci92aXJ0dWFsIGFkZHJlc3MKKyAqCisgKiBUaGlzIGlubGluZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgdXNlciBzcGFjZSB2aXJ0dWFsIGFkZHJlc3MgdG8KKyAqIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHZwaWZfdXNlcnZpcnRfdG9fcGh5cyh1MzIgdmlydHApCit7CisJdW5zaWduZWQgbG9uZyBwaHlzcCA9IDA7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCXZtYSA9IGZpbmRfdm1hKG1tLCB2aXJ0cCk7CisKKwkvKiBGb3Iga2VybmVsIGRpcmVjdC1tYXBwZWQgbWVtb3J5LCB0YWtlIHRoZSBlYXN5IHdheSAqLworCWlmICh2aXJ0cCA+PSBQQUdFX09GRlNFVCkKKwkJcGh5c3AgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKil2aXJ0cCk7CisJZWxzZSBpZiAodm1hICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fSU8pICYmICh2bWEtPnZtX3Bnb2ZmKSkKKwkJLyoqCisJCSAqIHRoaXMgd2lsbCBjYXRjaCwga2VybmVsLWFsbG9jYXRlZCwgbW1hcGVkLXRvLXVzZXJtb2RlCisJCSAqIGFkZHJlc3NlcworCQkgKi8KKwkJcGh5c3AgPSAodm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUKSArICh2aXJ0cCAtIHZtYS0+dm1fc3RhcnQpOworCWVsc2UgeworCQkvKiBvdGhlcndpc2UsIHVzZSBnZXRfdXNlcl9wYWdlcygpIGZvciBnZW5lcmFsIHVzZXJsYW5kIHBhZ2VzICovCisJCWludCByZXMsIG5yX3BhZ2VzID0gMTsKKwkJCXN0cnVjdCBwYWdlICpwYWdlczsKKworCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwkJcmVzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sCisJCQkJICAgICB2aXJ0cCwgbnJfcGFnZXMsIDEsIDAsICZwYWdlcywgTlVMTCk7CisJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwkJaWYgKHJlcyA9PSBucl9wYWdlcykKKwkJCXBoeXNwID0gX19wYShwYWdlX2FkZHJlc3MoJnBhZ2VzWzBdKSArCisJCQkJICAgICAodmlydHAgJiB+UEFHRV9NQVNLKSk7CisJCWVsc2UgeworCQkJdnBpZl9lcnIoImdldF91c2VyX3BhZ2VzIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gcGh5c3A7Cit9CisKKy8qKgorICogYnVmZmVyX3ByZXBhcmUgOiAgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGJ1ZmZlciBwcmVwYXJlCisgKiBAcSA6IGJ1ZmZlciBxdWV1ZSBwdHIKKyAqIEB2YjogcHRyIHRvIHZpZGVvIGJ1ZmZlcgorICogQGZpZWxkOiBmaWVsZCBpbmZvCisgKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGJ1ZmZlciBwcmVwYXJlIHdoZW4gdmlkZW9idWZfcWJ1ZigpCisgKiBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSBidWZmZXIgaXMgcHJlcGFyZWQgYW5kIHVzZXIgc3BhY2UgdmlydHVhbCBhZGRyZXNzCisgKiBvciB1c2VyIGFkZHJlc3MgaXMgY29udmVydGVkIGludG8gIHBoeXNpY2FsIGFkZHJlc3MKKyAqLworc3RhdGljIGludCB2cGlmX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCSAgICAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJLyogR2V0IHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgYW5kIGNoYW5uZWwgb2JqZWN0ICovCisJc3RydWN0IHZwaWZfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX2J1ZmZlcl9wcmVwYXJlXG4iKTsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJLyogSWYgYnVmZmVyIGlzIG5vdCBpbml0aWFsaXplZCwgaW5pdGlhbGl6ZSBpdCAqLworCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgeworCQl2Yi0+d2lkdGggPSBjb21tb24tPndpZHRoOworCQl2Yi0+aGVpZ2h0ID0gY29tbW9uLT5oZWlnaHQ7CisJCXZiLT5zaXplID0gdmItPndpZHRoICogdmItPmhlaWdodDsKKwkJdmItPmZpZWxkID0gZmllbGQ7CisJfQorCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCS8qKgorCSAqIGlmIHVzZXIgcG9pbnRlciBtZW1vcnkgbWVjaGFuaXNtIGlzIHVzZWQsIGdldCB0aGUgcGh5c2ljYWwKKwkgKiBhZGRyZXNzIG9mIHRoZSBidWZmZXIKKwkgKi8KKwlpZiAoVjRMMl9NRU1PUllfVVNFUlBUUiA9PSBjb21tb24tPm1lbW9yeSkgeworCQlpZiAoMCA9PSB2Yi0+YmFkZHIpIHsKKwkJCXZwaWZfZGJnKDEsIGRlYnVnLCAiYnVmZmVyIGFkZHJlc3MgaXMgMFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl9CisJCXZiLT5ib2ZmID0gdnBpZl91c2VydmlydF90b19waHlzKHZiLT5iYWRkcik7CisJCWlmICghSVNfQUxJR05FRCh2Yi0+Ym9mZiwgOCkpCisJCQlnb3RvIGV4aXQ7CisJfQorCisJYWRkciA9IHZiLT5ib2ZmOworCWlmIChxLT5zdHJlYW1pbmcpIHsKKwkJaWYgKCFJU19BTElHTkVEKChhZGRyICsgY29tbW9uLT55dG9wX29mZiksIDgpIHx8CisJCSAgICAhSVNfQUxJR05FRCgoYWRkciArIGNvbW1vbi0+eWJ0bV9vZmYpLCA4KSB8fAorCQkgICAgIUlTX0FMSUdORUQoKGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmKSwgOCkgfHwKKwkJICAgICFJU19BTElHTkVEKChhZGRyICsgY29tbW9uLT5jYnRtX29mZiksIDgpKQorCQkJZ290byBleGl0OworCX0KKwlyZXR1cm4gMDsKK2V4aXQ6CisJdnBpZl9kYmcoMSwgZGVidWcsICJidWZmZXJfcHJlcGFyZTpvZmZzZXQgaXMgbm90IGFsaWduZWQgdG8gOCBieXRlc1xuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdnBpZl9idWZmZXJfc2V0dXAgOiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgYnVmZmVyIHNldHVwLgorICogQHE6IGJ1ZmZlciBxdWV1ZSBwdHIKKyAqIEBjb3VudDogbnVtYmVyIG9mIGJ1ZmZlcnMKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBidWZmZXIKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHJlcWJ1ZigpIGlzIGNhbGxlZCB0byBhZGp1c3QKKyAqIHRoZSBidWZmZXIgY291bnQgYW5kIGJ1ZmZlciBzaXplCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9idWZmZXJfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkJICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJLyogR2V0IHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgYW5kIGNoYW5uZWwgb2JqZWN0ICovCisJc3RydWN0IHZwaWZfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCisJY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfYnVmZmVyX3NldHVwXG4iKTsKKworCS8qIElmIG1lbW9yeSB0eXBlIGlzIG5vdCBtbWFwLCByZXR1cm4gKi8KKwlpZiAoVjRMMl9NRU1PUllfTU1BUCAhPSBjb21tb24tPm1lbW9yeSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAqLworCSpzaXplID0gY29uZmlnX3BhcmFtcy5jaGFubmVsX2J1ZnNpemVbY2gtPmNoYW5uZWxfaWRdOworCisJaWYgKCpjb3VudCA8IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnMpCisJCSpjb3VudCA9IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnM7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9idWZmZXJfcXVldWUgOiBDYWxsYmFjayBmdW5jdGlvbiB0byBhZGQgYnVmZmVyIHRvIERNQSBxdWV1ZQorICogQHE6IHB0ciB0byB2aWRlb2J1Zl9xdWV1ZQorICogQHZiOiBwdHIgdG8gdmlkZW9idWZfYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCS8qIEdldCB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0IGFuZCBjaGFubmVsIG9iamVjdCAqLworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX2J1ZmZlcl9xdWV1ZVxuIik7CisKKwkvKiBhZGQgdGhlIGJ1ZmZlciB0byB0aGUgRE1BIHF1ZXVlICovCisJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmY29tbW9uLT5kbWFfcXVldWUpOworCS8qIENoYW5nZSBzdGF0ZSBvZiB0aGUgYnVmZmVyICovCisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworfQorCisvKioKKyAqIHZwaWZfYnVmZmVyX3JlbGVhc2UgOiBDYWxsYmFjayBmdW5jdGlvbiB0byBmcmVlIGJ1ZmZlcgorICogQHE6IGJ1ZmZlciBxdWV1ZSBwdHIKKyAqIEB2YjogcHRyIHRvIHZpZGVvIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIHZpZGVvYnVmIGxheWVyIHRvIGZyZWUgbWVtb3J5CisgKiBhbGxvY2F0ZWQgdG8gIHRoZSBidWZmZXJzCisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCS8qIEdldCB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0IGFuZCBjaGFubmVsIG9iamVjdCAqLworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHEsIHZiKTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSB2cGlmX2J1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSB2cGlmX2J1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSB2cGlmX2J1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSB2cGlmX2J1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljIHU4IGNoYW5uZWxfZmlyc3RfaW50W1ZQSUZfTlVNQkVSX09GX09CSkVDVFNdWzJdID0KKwl7IHsxLCAxfSB9OworCisvKioKKyAqIHZwaWZfcHJvY2Vzc19idWZmZXJfY29tcGxldGU6IHByb2Nlc3MgYSBjb21wbGV0ZWQgYnVmZmVyCisgKiBAY29tbW9uOiBwdHIgdG8gY29tbW9uIGNoYW5uZWwgb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiB0aW1lIHN0YW1wIHRoZSBidWZmZXIgYW5kIG1hcmsgaXQgYXMgRE9ORS4gSXQgYWxzbworICogd2FrZSB1cCBhbnkgcHJvY2VzcyB3YWl0aW5nIG9uIHRoZSBRVUVVRSBhbmQgc2V0IHRoZSBuZXh0IGJ1ZmZlcgorICogYXMgY3VycmVudAorICovCitzdGF0aWMgdm9pZCB2cGlmX3Byb2Nlc3NfYnVmZmVyX2NvbXBsZXRlKHN0cnVjdCBjb21tb25fb2JqICpjb21tb24pCit7CisJZG9fZ2V0dGltZW9mZGF5KCZjb21tb24tPmN1cl9mcm0tPnRzKTsKKwljb21tb24tPmN1cl9mcm0tPnN0YXRlID0gVklERU9CVUZfRE9ORTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvbW1vbi0+Y3VyX2ZybS0+ZG9uZSk7CisJLyogTWFrZSBjdXJGcm0gcG9pbnRpbmcgdG8gbmV4dEZybSAqLworCWNvbW1vbi0+Y3VyX2ZybSA9IGNvbW1vbi0+bmV4dF9mcm07Cit9CisKKy8qKgorICogdnBpZl9zY2hlZHVsZV9uZXh0X2J1ZmZlcjogc2V0IG5leHQgYnVmZmVyIGFkZHJlc3MgZm9yIGNhcHR1cmUKKyAqIEBjb21tb24gOiBwdHIgdG8gY29tbW9uIGNoYW5uZWwgb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCBuZXh0IGJ1ZmZlciBmcm9tIHRoZSBkbWEgcXVldWUgYW5kCisgKiBzZXQgdGhlIGJ1ZmZlciBhZGRyZXNzIGluIHRoZSB2cGlmIHJlZ2lzdGVyIGZvciBjYXB0dXJlLgorICogdGhlIGJ1ZmZlciBpcyBtYXJrZWQgYWN0aXZlCisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfc2NoZWR1bGVfbmV4dF9idWZmZXIoc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCisJY29tbW9uLT5uZXh0X2ZybSA9IGxpc3RfZW50cnkoY29tbW9uLT5kbWFfcXVldWUubmV4dCwKKwkJCQkgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHF1ZXVlKTsKKwkvKiBSZW1vdmUgdGhhdCBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlICovCisJbGlzdF9kZWwoJmNvbW1vbi0+bmV4dF9mcm0tPnF1ZXVlKTsKKwljb21tb24tPm5leHRfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwlpZiAoVjRMMl9NRU1PUllfVVNFUlBUUiA9PSBjb21tb24tPm1lbW9yeSkKKwkJYWRkciA9IGNvbW1vbi0+bmV4dF9mcm0tPmJvZmY7CisJZWxzZQorCQlhZGRyID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhjb21tb24tPm5leHRfZnJtKTsKKworCS8qIFNldCB0b3AgYW5kIGJvdHRvbSBmaWVsZCBhZGRyZXNzZXMgaW4gVlBJRiByZWdpc3RlcnMgKi8KKwljb21tb24tPnNldF9hZGRyKGFkZHIgKyBjb21tb24tPnl0b3Bfb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPnlidG1fb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPmNidG1fb2ZmKTsKK30KKworLyoqCisgKiB2cGlmX2NoYW5uZWxfaXNyIDogSVNSIGhhbmRsZXIgZm9yIHZwaWYgY2FwdHVyZQorICogQGlycTogaXJxIG51bWJlcgorICogQGRldl9pZDogZGV2X2lkIHB0cgorICoKKyAqIEl0IGNoYW5nZXMgc3RhdHVzIG9mIHRoZSBjYXB0dXJlZCBidWZmZXIsIHRha2VzIG5leHQgYnVmZmVyIGZyb20gdGhlIHF1ZXVlCisgKiBhbmQgc2V0cyBpdHMgYWRkcmVzcyBpbiBWUElGICByZWdpc3RlcnMKKyAqLworc3RhdGljIGlycXJldHVybl90IHZwaWZfY2hhbm5lbF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB2cGlmX2RldmljZSAqZGV2ID0gJnZwaWZfb2JqOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisJaW50IGNoYW5uZWxfaWQgPSAwOworCWludCBmaWQgPSAtMSwgaTsKKworCWNoYW5uZWxfaWQgPSAqKGludCAqKShkZXZfaWQpOworCWNoID0gZGV2LT5kZXZbY2hhbm5lbF9pZF07CisKKwlmaWVsZCA9IGNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0uZm10LmZtdC5waXguZmllbGQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9OVU1CRVJfT0ZfT0JKRUNUUzsgaSsrKSB7CisJCWNvbW1vbiA9ICZjaC0+Y29tbW9uW2ldOworCQkvKiBza2lwIElmIHN0cmVhbWluZyBpcyBub3Qgc3RhcnRlZCBpbiB0aGlzIGNoYW5uZWwgKi8KKwkJaWYgKDAgPT0gY29tbW9uLT5zdGFydGVkKQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgdGhlIGZpZWxkIGZvcm1hdCAqLworCQlpZiAoMSA9PSBjaC0+dnBpZnBhcmFtcy5zdGRfaW5mby5mcm1fZm10KSB7CisJCQkvKiBQcm9ncmVzc2l2ZSBtb2RlICovCisJCQlpZiAobGlzdF9lbXB0eSgmY29tbW9uLT5kbWFfcXVldWUpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIWNoYW5uZWxfZmlyc3RfaW50W2ldW2NoYW5uZWxfaWRdKQorCQkJCXZwaWZfcHJvY2Vzc19idWZmZXJfY29tcGxldGUoY29tbW9uKTsKKworCQkJY2hhbm5lbF9maXJzdF9pbnRbaV1bY2hhbm5lbF9pZF0gPSAwOworCisJCQl2cGlmX3NjaGVkdWxlX25leHRfYnVmZmVyKGNvbW1vbik7CisKKworCQkJY2hhbm5lbF9maXJzdF9pbnRbaV1bY2hhbm5lbF9pZF0gPSAwOworCQl9IGVsc2UgeworCQkJLyoqCisJCQkgKiBJbnRlcmxhY2VkIG1vZGUuIElmIGl0IGlzIGZpcnN0IGludGVycnVwdCwgaWdub3JlCisJCQkgKiBpdAorCQkJICovCisJCQlpZiAoY2hhbm5lbF9maXJzdF9pbnRbaV1bY2hhbm5lbF9pZF0pIHsKKwkJCQljaGFubmVsX2ZpcnN0X2ludFtpXVtjaGFubmVsX2lkXSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoMCA9PSBpKSB7CisJCQkJY2gtPmZpZWxkX2lkIF49IDE7CisJCQkJLyogR2V0IGZpZWxkIGlkIGZyb20gVlBJRiByZWdpc3RlcnMgKi8KKwkJCQlmaWQgPSB2cGlmX2NoYW5uZWxfZ2V0ZmlkKGNoLT5jaGFubmVsX2lkKTsKKwkJCQlpZiAoZmlkICE9IGNoLT5maWVsZF9pZCkgeworCQkJCQkvKioKKwkJCQkJICogSWYgZmllbGQgaWQgZG9lcyBub3QgbWF0Y2ggc3RvcmVkCisJCQkJCSAqIGZpZWxkIGlkLCBtYWtlIHRoZW0gaW4gc3luYworCQkJCQkgKi8KKwkJCQkJaWYgKDAgPT0gZmlkKQorCQkJCQkJY2gtPmZpZWxkX2lkID0gZmlkOworCQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQkJfQorCQkJfQorCQkJLyogZGV2aWNlIGZpZWxkIGlkIGFuZCBsb2NhbCBmaWVsZCBpZCBhcmUgaW4gc3luYyAqLworCQkJaWYgKDAgPT0gZmlkKSB7CisJCQkJLyogdGhpcyBpcyBldmVuIGZpZWxkICovCisJCQkJaWYgKGNvbW1vbi0+Y3VyX2ZybSA9PSBjb21tb24tPm5leHRfZnJtKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qIG1hcmsgdGhlIGN1cnJlbnQgYnVmZmVyIGFzIGRvbmUgKi8KKwkJCQl2cGlmX3Byb2Nlc3NfYnVmZmVyX2NvbXBsZXRlKGNvbW1vbik7CisJCQl9IGVsc2UgaWYgKDEgPT0gZmlkKSB7CisJCQkJLyogb2RkIGZpZWxkICovCisJCQkJaWYgKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKSB8fAorCQkJCSAgICAoY29tbW9uLT5jdXJfZnJtICE9IGNvbW1vbi0+bmV4dF9mcm0pKQorCQkJCQljb250aW51ZTsKKworCQkJCXZwaWZfc2NoZWR1bGVfbmV4dF9idWZmZXIoY29tbW9uKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogdnBpZl91cGRhdGVfc3RkX2luZm8oKSAtIHVwZGF0ZSBzdGFuZGFyZCByZWxhdGVkIGluZm8KKyAqIEBjaDogcHRyIHRvIGNoYW5uZWwgb2JqZWN0CisgKgorICogRm9yIGEgZ2l2ZW4gc3RhbmRhcmQgc2VsZWN0ZWQgYnkgYXBwbGljYXRpb24sIHVwZGF0ZSB2YWx1ZXMKKyAqIGluIHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmVzCisgKi8KK3N0YXRpYyBpbnQgdnBpZl91cGRhdGVfc3RkX2luZm8oc3RydWN0IGNoYW5uZWxfb2JqICpjaCkKK3sKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmcGFyYW1zID0gJmNoLT52cGlmcGFyYW1zOworCWNvbnN0IHN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqY29uZmlnOworCXN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqc3RkX2luZm87CisJc3RydWN0IHZpZGVvX29iaiAqdmlkX2NoID0gJmNoLT52aWRlbzsKKwlpbnQgaW5kZXg7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfdXBkYXRlX3N0ZF9pbmZvXG4iKTsKKworCXN0ZF9pbmZvID0gJnZwaWZwYXJhbXMtPnN0ZF9pbmZvOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShjaF9wYXJhbXMpOyBpbmRleCsrKSB7CisJCWNvbmZpZyA9ICZjaF9wYXJhbXNbaW5kZXhdOworCQlpZiAoY29uZmlnLT5zdGRpZCAmIHZpZF9jaC0+c3RkaWQpIHsKKwkJCW1lbWNweShzdGRfaW5mbywgY29uZmlnLCBzaXplb2YoKmNvbmZpZykpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBzdGFuZGFyZCBub3QgZm91bmQgKi8KKwlpZiAoaW5kZXggPT0gQVJSQVlfU0laRShjaF9wYXJhbXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbW1vbi0+Zm10LmZtdC5waXgud2lkdGggPSBzdGRfaW5mby0+d2lkdGg7CisJY29tbW9uLT53aWR0aCA9IHN0ZF9pbmZvLT53aWR0aDsKKwljb21tb24tPmZtdC5mbXQucGl4LmhlaWdodCA9IHN0ZF9pbmZvLT5oZWlnaHQ7CisJY29tbW9uLT5oZWlnaHQgPSBzdGRfaW5mby0+aGVpZ2h0OworCWNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lID0gc3RkX2luZm8tPndpZHRoOworCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5ocGl0Y2ggPSBzdGRfaW5mby0+d2lkdGg7CisJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLnN0b3JhZ2VfbW9kZSA9IHN0ZF9pbmZvLT5mcm1fZm10OworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfY2FsY3VsYXRlX29mZnNldHMgOiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYnVmZmVycyBvZmZzZXRzCisgKiBAY2ggOiBwdHIgdG8gY2hhbm5lbCBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYnVmZmVyIG9mZnNldHMgZm9yIFkgYW5kIEMgaW4gdGhlIHRvcCBhbmQKKyAqIGJvdHRvbSBmaWVsZAorICovCitzdGF0aWMgdm9pZCB2cGlmX2NhbGN1bGF0ZV9vZmZzZXRzKHN0cnVjdCBjaGFubmVsX29iaiAqY2gpCit7CisJdW5zaWduZWQgaW50IGhwaXRjaCwgdnBpdGNoLCBzaXplaW1hZ2U7CisJc3RydWN0IHZpZGVvX29iaiAqdmlkX2NoID0gJihjaC0+dmlkZW8pOworCXN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZnBhcmFtcyA9ICZjaC0+dnBpZnBhcmFtczsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkID0gY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZDsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9jYWxjdWxhdGVfb2Zmc2V0c1xuIik7CisKKwlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKKwkJaWYgKHZwaWZwYXJhbXMtPnN0ZF9pbmZvLmZybV9mbXQpCisJCQl2aWRfY2gtPmJ1Zl9maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJZWxzZQorCQkJdmlkX2NoLT5idWZfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJfSBlbHNlCisJCXZpZF9jaC0+YnVmX2ZpZWxkID0gY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZDsKKworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IGNvbW1vbi0+bWVtb3J5KQorCQlzaXplaW1hZ2UgPSBjb21tb24tPmZtdC5mbXQucGl4LnNpemVpbWFnZTsKKwllbHNlCisJCXNpemVpbWFnZSA9IGNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKworCWhwaXRjaCA9IGNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lOworCXZwaXRjaCA9IHNpemVpbWFnZSAvIChocGl0Y2ggKiAyKTsKKworCWlmICgoVjRMMl9GSUVMRF9OT05FID09IHZpZF9jaC0+YnVmX2ZpZWxkKSB8fAorCSAgICAoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEID09IHZpZF9jaC0+YnVmX2ZpZWxkKSkgeworCQkvKiBDYWxjdWxhdGUgb2Zmc2V0cyBmb3IgWSB0b3AsIFkgQm90dG9tLCBDIHRvcCBhbmQgQyBCb3R0b20gKi8KKwkJY29tbW9uLT55dG9wX29mZiA9IDA7CisJCWNvbW1vbi0+eWJ0bV9vZmYgPSBocGl0Y2g7CisJCWNvbW1vbi0+Y3RvcF9vZmYgPSBzaXplaW1hZ2UgLyAyOworCQljb21tb24tPmNidG1fb2ZmID0gc2l6ZWltYWdlIC8gMiArIGhwaXRjaDsKKwl9IGVsc2UgaWYgKFY0TDJfRklFTERfU0VRX1RCID09IHZpZF9jaC0+YnVmX2ZpZWxkKSB7CisJCS8qIENhbGN1bGF0ZSBvZmZzZXRzIGZvciBZIHRvcCwgWSBCb3R0b20sIEMgdG9wIGFuZCBDIEJvdHRvbSAqLworCQljb21tb24tPnl0b3Bfb2ZmID0gMDsKKwkJY29tbW9uLT55YnRtX29mZiA9IHNpemVpbWFnZSAvIDQ7CisJCWNvbW1vbi0+Y3RvcF9vZmYgPSBzaXplaW1hZ2UgLyAyOworCQljb21tb24tPmNidG1fb2ZmID0gY29tbW9uLT5jdG9wX29mZiArIHNpemVpbWFnZSAvIDQ7CisJfSBlbHNlIGlmIChWNEwyX0ZJRUxEX1NFUV9CVCA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkgeworCQkvKiBDYWxjdWxhdGUgb2Zmc2V0cyBmb3IgWSB0b3AsIFkgQm90dG9tLCBDIHRvcCBhbmQgQyBCb3R0b20gKi8KKwkJY29tbW9uLT55YnRtX29mZiA9IDA7CisJCWNvbW1vbi0+eXRvcF9vZmYgPSBzaXplaW1hZ2UgLyA0OworCQljb21tb24tPmNidG1fb2ZmID0gc2l6ZWltYWdlIC8gMjsKKwkJY29tbW9uLT5jdG9wX29mZiA9IGNvbW1vbi0+Y2J0bV9vZmYgKyBzaXplaW1hZ2UgLyA0OworCX0KKwlpZiAoKFY0TDJfRklFTERfTk9ORSA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkgfHwKKwkgICAgKFY0TDJfRklFTERfSU5URVJMQUNFRCA9PSB2aWRfY2gtPmJ1Zl9maWVsZCkpCisJCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5zdG9yYWdlX21vZGUgPSAxOworCWVsc2UKKwkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLnN0b3JhZ2VfbW9kZSA9IDA7CisKKwlpZiAoMSA9PSB2cGlmcGFyYW1zLT5zdGRfaW5mby5mcm1fZm10KQorCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuaHBpdGNoID0KKwkJICAgIGNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lOworCWVsc2UgeworCQlpZiAoKGZpZWxkID09IFY0TDJfRklFTERfQU5ZKQorCQkgICAgfHwgKGZpZWxkID09IFY0TDJfRklFTERfSU5URVJMQUNFRCkpCisJCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuaHBpdGNoID0KKwkJCSAgICBjb21tb24tPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSAqIDI7CisJCWVsc2UKKwkJCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5ocGl0Y2ggPQorCQkJICAgIGNvbW1vbi0+Zm10LmZtdC5waXguYnl0ZXNwZXJsaW5lOworCX0KKworCWNoLT52cGlmcGFyYW1zLnZpZGVvX3BhcmFtcy5zdGRpZCA9IHZwaWZwYXJhbXMtPnN0ZF9pbmZvLnN0ZGlkOworfQorCisvKioKKyAqIHZwaWZfY29uZmlnX2Zvcm1hdDogY29uZmlndXJlIGRlZmF1bHQgZnJhbWUgZm9ybWF0IGluIHRoZSBkZXZpY2UKKyAqIGNoIDogcHRyIHRvIGNoYW5uZWwgb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfY29uZmlnX2Zvcm1hdChzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoKQoreworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9jb25maWdfZm9ybWF0XG4iKTsKKworCWNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0FOWTsKKwlpZiAoY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW2NoLT5jaGFubmVsX2lkXSA9PSAwKQorCQljb21tb24tPm1lbW9yeSA9IFY0TDJfTUVNT1JZX1VTRVJQVFI7CisJZWxzZQorCQljb21tb24tPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisKKwljb21tb24tPmZtdC5mbXQucGl4LnNpemVpbWFnZQorCSAgICA9IGNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKworCWlmIChjaC0+dnBpZnBhcmFtcy5pZmFjZS5pZl90eXBlID09IFZQSUZfSUZfUkFXX0JBWUVSKQorCQljb21tb24tPmZtdC5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKKwllbHNlCisJCWNvbW1vbi0+Zm10LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVWNDIyUDsKKwljb21tb24tPmZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworfQorCisvKioKKyAqIHZwaWZfZ2V0X2RlZmF1bHRfZmllbGQoKSAtIEdldCBkZWZhdWx0IGZpZWxkIHR5cGUgYmFzZWQgb24gaW50ZXJmYWNlCisgKiBAdnBpZl9wYXJhbXMgLSBwdHIgdG8gdnBpZiBwYXJhbXMKKyAqLworc3RhdGljIGlubGluZSBlbnVtIHY0bDJfZmllbGQgdnBpZl9nZXRfZGVmYXVsdF9maWVsZCgKKwkJCQlzdHJ1Y3QgdnBpZl9pbnRlcmZhY2UgKmlmYWNlKQoreworCXJldHVybiAoaWZhY2UtPmlmX3R5cGUgPT0gVlBJRl9JRl9SQVdfQkFZRVIpID8gVjRMMl9GSUVMRF9OT05FIDoKKwkJCQkJCVY0TDJfRklFTERfSU5URVJMQUNFRDsKK30KKworLyoqCisgKiB2cGlmX2NoZWNrX2Zvcm1hdCgpICAtIGNoZWNrIGdpdmVuIHBpeGVsIGZvcm1hdCBmb3IgY29tcGF0aWJpbGl0eQorICogQGNoIC0gY2hhbm5lbCAgcHRyCisgKiBAcGl4Zm10IC0gR2l2ZW4gcGl4ZWwgZm9ybWF0CisgKiBAdXBkYXRlIC0gdXBkYXRlIHRoZSB2YWx1ZXMgYXMgcGVyIGhhcmR3YXJlIHJlcXVpcmVtZW50CisgKgorICogQ2hlY2sgdGhlIGFwcGxpY2F0aW9uIHBpeGVsIGZvcm1hdCBmb3IgU19GTVQgYW5kIHVwZGF0ZSB0aGUgaW5wdXQKKyAqIHZhbHVlcyBhcyBwZXIgaGFyZHdhcmUgbGltaXRzIGZvciBUUllfRk1ULiBUaGUgZGVmYXVsdCBwaXhlbCBhbmQKKyAqIGZpZWxkIGZvcm1hdCBpcyBzZWxlY3RlZCBiYXNlZCBvbiBpbnRlcmZhY2UgdHlwZS4KKyAqLworc3RhdGljIGludCB2cGlmX2NoZWNrX2Zvcm1hdChzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQsCisJCQkgICAgIGludCB1cGRhdGUpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICYoY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXSk7CisJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmX3BhcmFtcyA9ICZjaC0+dnBpZnBhcmFtczsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQgPSBwaXhmbXQtPmZpZWxkOworCXUzMiBzaXplaW1hZ2UsIGhwaXRjaCwgdnBpdGNoOworCWludCByZXQgPSAtRUlOVkFMOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX2NoZWNrX2Zvcm1hdFxuIik7CisJLyoqCisJICogZmlyc3QgY2hlY2sgZm9yIHRoZSBwaXhlbCBmb3JtYXQuIElmIGlmX3R5cGUgaXMgUmF3IGJheWVyLAorCSAqIG9ubHkgVjRMMl9QSVhfRk1UX1NCR0dSOCBmb3JtYXQgaXMgc3VwcG9ydGVkLiBPdGhlcndpc2Ugb25seQorCSAqIFY0TDJfUElYX0ZNVF9ZVVY0MjJQIGlzIHN1cHBvcnRlZAorCSAqLworCWlmICh2cGlmX3BhcmFtcy0+aWZhY2UuaWZfdHlwZSA9PSBWUElGX0lGX1JBV19CQVlFUikgeworCQlpZiAocGl4Zm10LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1I4KSB7CisJCQlpZiAoIXVwZGF0ZSkgeworCQkJCXZwaWZfZGJnKDIsIGRlYnVnLCAiaW52YWxpZCBwaXggZm9ybWF0XG4iKTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChwaXhmbXQtPnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQKSB7CisJCQlpZiAoIXVwZGF0ZSkgeworCQkJCXZwaWZfZGJnKDIsIGRlYnVnLCAiaW52YWxpZCBwaXhlbCBmb3JtYXRcbiIpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVWNDIyUDsKKwkJfQorCX0KKworCWlmICghKFZQSUZfVkFMSURfRklFTEQoZmllbGQpKSkgeworCQlpZiAoIXVwZGF0ZSkgeworCQkJdnBpZl9kYmcoMiwgZGVidWcsICJpbnZhbGlkIGZpZWxkIGZvcm1hdFxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJLyoqCisJCSAqIEJ5IGRlZmF1bHQgdXNlIEZJRUxEX05PTkUgZm9yIFJBVyBCYXllciBjYXB0dXJlCisJCSAqIGFuZCBGSUVMRF9JTlRFUkxBQ0VEIGZvciBvdGhlciBpbnRlcmZhY2VzCisJCSAqLworCQlmaWVsZCA9IHZwaWZfZ2V0X2RlZmF1bHRfZmllbGQoJnZwaWZfcGFyYW1zLT5pZmFjZSk7CisJfSBlbHNlIGlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkKKwkJLyogdW5zdXBwb3J0ZWQgZmllbGQuIFVzZSBkZWZhdWx0ICovCisJCWZpZWxkID0gdnBpZl9nZXRfZGVmYXVsdF9maWVsZCgmdnBpZl9wYXJhbXMtPmlmYWNlKTsKKworCS8qIHZhbGlkYXRlIHRoZSBocGl0Y2ggKi8KKwlocGl0Y2ggPSBwaXhmbXQtPmJ5dGVzcGVybGluZTsKKwlpZiAoaHBpdGNoIDwgdnBpZl9wYXJhbXMtPnN0ZF9pbmZvLndpZHRoKSB7CisJCWlmICghdXBkYXRlKSB7CisJCQl2cGlmX2RiZygyLCBkZWJ1ZywgImludmFsaWQgaHBpdGNoXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlocGl0Y2ggPSB2cGlmX3BhcmFtcy0+c3RkX2luZm8ud2lkdGg7CisJfQorCisJaWYgKFY0TDJfTUVNT1JZX1VTRVJQVFIgPT0gY29tbW9uLT5tZW1vcnkpCisJCXNpemVpbWFnZSA9IHBpeGZtdC0+c2l6ZWltYWdlOworCWVsc2UKKwkJc2l6ZWltYWdlID0gY29uZmlnX3BhcmFtcy5jaGFubmVsX2J1ZnNpemVbY2gtPmNoYW5uZWxfaWRdOworCisJdnBpdGNoID0gc2l6ZWltYWdlIC8gKGhwaXRjaCAqIDIpOworCisJLyogdmFsaWRhdGUgdGhlIHZwaXRjaCAqLworCWlmICh2cGl0Y2ggPCB2cGlmX3BhcmFtcy0+c3RkX2luZm8uaGVpZ2h0KSB7CisJCWlmICghdXBkYXRlKSB7CisJCQl2cGlmX2RiZygyLCBkZWJ1ZywgIkludmFsaWQgdnBpdGNoXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQl2cGl0Y2ggPSB2cGlmX3BhcmFtcy0+c3RkX2luZm8uaGVpZ2h0OworCX0KKworCS8qIENoZWNrIGZvciA4IGJ5dGUgYWxpZ25tZW50ICovCisJaWYgKCFBTElHTihocGl0Y2gsIDgpKSB7CisJCWlmICghdXBkYXRlKSB7CisJCQl2cGlmX2RiZygyLCBkZWJ1ZywgImludmFsaWQgcGl0Y2ggYWxpZ25tZW50XG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKiBhZGp1c3QgdG8gbmV4dCA4IGJ5dGUgYm91bmRhcnkgKi8KKwkJaHBpdGNoID0gKCgoaHBpdGNoICsgNykgLyA4KSAqIDgpOworCX0KKwkvKiBpZiB1cGRhdGUgaXMgc2V0LCBtb2RpZnkgdGhlIGJ5dGVzcGVybGluZSBhbmQgc2l6ZWltYWdlICovCisJaWYgKHVwZGF0ZSkgeworCQlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IGhwaXRjaDsKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSBocGl0Y2ggKiB2cGl0Y2ggKiAyOworCX0KKwkvKioKKwkgKiBJbWFnZSB3aWR0aCBhbmQgaGVpZ2h0IGlzIGFsd2F5cyBiYXNlZCBvbiBjdXJyZW50IHN0YW5kYXJkIHdpZHRoIGFuZAorCSAqIGhlaWdodAorCSAqLworCXBpeGZtdC0+d2lkdGggPSBjb21tb24tPmZtdC5mbXQucGl4LndpZHRoOworCXBpeGZtdC0+aGVpZ2h0ID0gY29tbW9uLT5mbXQuZm10LnBpeC5oZWlnaHQ7CisJcmV0dXJuIDA7CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBpZl9jb25maWdfYWRkcigpIC0gZnVuY3Rpb24gdG8gY29uZmlndXJlIGJ1ZmZlciBhZGRyZXNzIGluIHZwaWYKKyAqIEBjaCAtIGNoYW5uZWwgcHRyCisgKiBAbXV4bW9kZSAtIGNoYW5uZWwgbXV4IG1vZGUKKyAqLworc3RhdGljIHZvaWQgdnBpZl9jb25maWdfYWRkcihzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoLCBpbnQgbXV4bW9kZSkKK3sKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX2NvbmZpZ19hZGRyXG4iKTsKKworCWNvbW1vbiA9ICYoY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXSk7CisKKwlpZiAoVlBJRl9DSEFOTkVMMV9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkKKwkJY29tbW9uLT5zZXRfYWRkciA9IGNoMV9zZXRfdmlkZW9idWZfYWRkcjsKKwllbHNlIGlmICgyID09IG11eG1vZGUpCisJCWNvbW1vbi0+c2V0X2FkZHIgPSBjaDBfc2V0X3ZpZGVvYnVmX2FkZHJfeWNfbm11eDsKKwllbHNlCisJCWNvbW1vbi0+c2V0X2FkZHIgPSBjaDBfc2V0X3ZpZGVvYnVmX2FkZHI7Cit9CisKKy8qKgorICogdnBmZV9tbWFwIDogSXQgaXMgdXNlZCB0byBtYXAga2VybmVsIHNwYWNlIGJ1ZmZlcnMgaW50byB1c2VyIHNwYWNlcworICogQGZpbGVwOiBmaWxlIHBvaW50ZXIKKyAqIEB2bWE6IHB0ciB0byB2bV9hcmVhX3N0cnVjdAorICovCitzdGF0aWMgaW50IHZwaWZfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCS8qIEdldCB0aGUgY2hhbm5lbCBvYmplY3QgYW5kIGZpbGUgaGFuZGxlIG9iamVjdCAqLworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmKGNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0pOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX21tYXBcbiIpOworCisJcmV0dXJuIHZpZGVvYnVmX21tYXBfbWFwcGVyKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgdm1hKTsKK30KKworLyoqCisgKiB2cGlmX3BvbGw6IEl0IGlzIHVzZWQgZm9yIHNlbGVjdC9wb2xsIHN5c3RlbSBjYWxsCisgKiBAZmlsZXA6IGZpbGUgcG9pbnRlcgorICogQHdhaXQ6IHBvbGwgdGFibGUgdG8gd2FpdAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHZwaWZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaGFubmVsID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICYoY2hhbm5lbC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdKTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9wb2xsXG4iKTsKKworCWlmIChjb21tb24tPnN0YXJ0ZWQpCisJCWVyciA9IHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGVwLCAmY29tbW9uLT5idWZmZXJfcXVldWUsIHdhaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9vcGVuIDogdnBpZiBvcGVuIGhhbmRsZXIKKyAqIEBmaWxlcDogZmlsZSBwdHIKKyAqCisgKiBJdCBjcmVhdGVzIG9iamVjdCBvZiBmaWxlIGhhbmRsZSBzdHJ1Y3R1cmUgYW5kIHN0b3JlcyBpdCBpbiBwcml2YXRlX2RhdGEKKyAqIG1lbWJlciBvZiBmaWxlcG9pbnRlcgorICovCitzdGF0aWMgaW50IHZwaWZfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJc3RydWN0IHZwaWZfY2FwdHVyZV9jb25maWcgKmNvbmZpZyA9IHZwaWZfZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGVwKTsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaDsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoOworCXN0cnVjdCB2cGlmX2ZoICpmaDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9vcGVuXG4iKTsKKworCWNoID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisKKwl2aWRfY2ggPSAmY2gtPnZpZGVvOworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChOVUxMID09IGNoLT5jdXJyX3N1YmRldl9pbmZvKSB7CisJCS8qKgorCQkgKiBzZWFyY2ggdGhyb3VnaCB0aGUgc3ViIGRldmljZSB0byBzZWUgYSByZWdpc3RlcmVkCisJCSAqIHN1YiBkZXZpY2UgYW5kIG1ha2UgaXQgYXMgY3VycmVudCBzdWIgZGV2aWNlCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5zdWJkZXZfY291bnQ7IGkrKykgeworCQkJaWYgKHZwaWZfb2JqLnNkW2ldKSB7CisJCQkJLyogdGhlIHN1YiBkZXZpY2UgaXMgcmVnaXN0ZXJlZCAqLworCQkJCWNoLT5jdXJyX3N1YmRldl9pbmZvID0gJmNvbmZpZy0+c3ViZGV2X2luZm9baV07CisJCQkJLyogbWFrZSBmaXJzdCBpbnB1dCBhcyB0aGUgY3VycmVudCBpbnB1dCAqLworCQkJCXZpZF9jaC0+aW5wdXRfaWR4ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBjb25maWctPnN1YmRldl9jb3VudCkgeworCQkJdnBpZl9lcnIoIk5vIHN1YiBkZXZpY2UgcmVnaXN0ZXJlZFxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmlsZSBoYW5kbGUgb2JqZWN0ICovCisJZmggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdnBpZl9maCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXZwaWZfZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlIGhhbmRsZSBvYmplY3RcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogc3RvcmUgcG9pbnRlciB0byBmaCBpbiBwcml2YXRlX2RhdGEgbWVtYmVyIG9mIGZpbGVwICovCisJZmlsZXAtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5jaGFubmVsID0gY2g7CisJZmgtPmluaXRpYWxpemVkID0gMDsKKwkvKiBJZiBkZWNvZGVyIGlzIG5vdCBpbml0aWFsaXplZC4gaW5pdGlhbGl6ZSBpdCAqLworCWlmICghY2gtPmluaXRpYWxpemVkKSB7CisJCWZoLT5pbml0aWFsaXplZCA9IDE7CisJCWNoLT5pbml0aWFsaXplZCA9IDE7CisJCW1lbXNldCgmKGNoLT52cGlmcGFyYW1zKSwgMCwgc2l6ZW9mKHN0cnVjdCB2cGlmX3BhcmFtcykpOworCX0KKwkvKiBJbmNyZW1lbnQgY2hhbm5lbCB1c3JzIGNvdW50ZXIgKi8KKwljaC0+dXNycysrOworCS8qIFNldCBpb19hbGxvd2VkIG1lbWJlciB0byBmYWxzZSAqLworCWZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdID0gMDsKKwkvKiBJbml0aWFsaXplIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgdG8gZGVmYXVsdCBwcmlvcml0eSAqLworCWZoLT5wcmlvID0gVjRMMl9QUklPUklUWV9VTlNFVDsKKwl2NGwyX3ByaW9fb3BlbigmY2gtPnByaW8sICZmaC0+cHJpbyk7CitleGl0OgorCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZwaWZfcmVsZWFzZSA6IGZ1bmN0aW9uIHRvIGNsZWFuIHVwIGZpbGUgY2xvc2UKKyAqIEBmaWxlcDogZmlsZSBwb2ludGVyCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGJ1ZmZlciBxdWV1ZSwgZnJlZXMgdGhlIGJ1ZmZlcnMgYW5kIHRoZSB2cGZlIGZpbGUKKyAqIGhhbmRsZQorICovCitzdGF0aWMgaW50IHZwaWZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9yZWxlYXNlXG4iKTsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGlmIHRoaXMgaW5zdGFuY2UgaXMgZG9pbmcgSU8gKi8KKwlpZiAoZmgtPmlvX2FsbG93ZWRbVlBJRl9WSURFT19JTkRFWF0pIHsKKwkJLyogUmVzZXQgaW9fdXNycyBtZW1iZXIgb2YgY2hhbm5lbCBvYmplY3QgKi8KKwkJY29tbW9uLT5pb191c3JzID0gMDsKKwkJLyogRGlzYWJsZSBjaGFubmVsIGFzIHBlciBpdHMgZGV2aWNlIHR5cGUgYW5kIGNoYW5uZWwgaWQgKi8KKwkJaWYgKFZQSUZfQ0hBTk5FTDBfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHsKKwkJCWVuYWJsZV9jaGFubmVsMCgwKTsKKwkJCWNoYW5uZWwwX2ludHJfZW5hYmxlKDApOworCQl9CisJCWlmICgoVlBJRl9DSEFOTkVMMV9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgfHwKKwkJICAgICgyID09IGNvbW1vbi0+c3RhcnRlZCkpIHsKKwkJCWVuYWJsZV9jaGFubmVsMSgwKTsKKwkJCWNoYW5uZWwxX2ludHJfZW5hYmxlKDApOworCQl9CisJCWNvbW1vbi0+c3RhcnRlZCA9IDA7CisJCS8qIEZyZWUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSk7CisJCXZpZGVvYnVmX21tYXBfZnJlZSgmY29tbW9uLT5idWZmZXJfcXVldWUpOworCX0KKworCS8qIERlY3JlbWVudCBjaGFubmVsIHVzcnMgY291bnRlciAqLworCWNoLT51c3JzLS07CisKKwkvKiB1bmxvY2sgbXV0ZXggb24gY2hhbm5lbCBvYmplY3QgKi8KKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisKKwkvKiBDbG9zZSB0aGUgcHJpb3JpdHkgKi8KKwl2NGwyX3ByaW9fY2xvc2UoJmNoLT5wcmlvLCAmZmgtPnByaW8pOworCisJaWYgKGZoLT5pbml0aWFsaXplZCkKKwkJY2gtPmluaXRpYWxpemVkID0gMDsKKworCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3JlcWJ1ZnMoKSAtIHJlcXVlc3QgYnVmZmVyIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAcmVxYnVmOiByZXF1ZXN0IGJ1ZmZlciBzdHJ1Y3R1cmUgcHRyCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcWJ1ZikKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCXU4IGluZGV4ID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9yZXFidWZzXG4iKTsKKworCS8qKgorCSAqIFRoaXMgZmlsZSBoYW5kbGUgaGFzIG5vdCBpbml0aWFsaXplZCB0aGUgY2hhbm5lbCwKKwkgKiBJdCBpcyBub3QgYWxsb3dlZCB0byBkbyBzZXR0aW5ncworCSAqLworCWlmICgoVlBJRl9DSEFOTkVMMF9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkKKwkgICAgfHwgKFZQSUZfQ0hBTk5FTDFfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpKSB7CisJCWlmICghZmgtPmluaXRpYWxpemVkKSB7CisJCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkNoYW5uZWwgQnVzeVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSByZXFidWYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5kZXggPSBWUElGX1ZJREVPX0lOREVYOworCisJY29tbW9uID0gJmNoLT5jb21tb25baW5kZXhdOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmICgwICE9IGNvbW1vbi0+aW9fdXNycykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcmVxYnVmX2V4aXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB2aWRlb2J1ZiBxdWV1ZSBhcyBwZXIgdGhlIGJ1ZmZlciB0eXBlICovCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwKKwkJCQkJICAgICZ2aWRlb19xb3BzLCBOVUxMLAorCQkJCQkgICAgJmNvbW1vbi0+aXJxbG9jaywKKwkJCQkJICAgIHJlcWJ1Zi0+dHlwZSwKKwkJCQkJICAgIGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksIGZoKTsKKworCS8qIFNldCBpbyBhbGxvd2VkIG1lbWJlciBvZiBmaWxlIGhhbmRsZSB0byBUUlVFICovCisJZmgtPmlvX2FsbG93ZWRbaW5kZXhdID0gMTsKKwkvKiBJbmNyZW1lbnQgaW8gdXNycyBtZW1iZXIgb2YgY2hhbm5lbCBvYmplY3QgdG8gMSAqLworCWNvbW1vbi0+aW9fdXNycyA9IDE7CisJLyogU3RvcmUgdHlwZSBvZiBtZW1vcnkgcmVxdWVzdGVkIGluIGNoYW5uZWwgb2JqZWN0ICovCisJY29tbW9uLT5tZW1vcnkgPSByZXFidWYtPm1lbW9yeTsKKwlJTklUX0xJU1RfSEVBRCgmY29tbW9uLT5kbWFfcXVldWUpOworCisJLyogQWxsb2NhdGUgYnVmZmVycyAqLworCXJldCA9IHZpZGVvYnVmX3JlcWJ1ZnMoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCByZXFidWYpOworCityZXFidWZfZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2cGlmX3F1ZXJ5YnVmKCkgLSBxdWVyeSBidWZmZXIgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBidWY6IHY0bDIgYnVmZmVyIHN0cnVjdHVyZSBwdHIKKyAqLworc3RhdGljIGludCB2cGlmX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9xdWVyeWJ1ZlxuIik7CisKKwlpZiAoY29tbW9uLT5mbXQudHlwZSAhPSBidWYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvbW1vbi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJJbnZhbGlkIG1lbW9yeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1Zik7Cit9CisKKy8qKgorICogdnBpZl9xYnVmKCkgLSBxdWVyeSBidWZmZXIgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBidWY6IHY0bDIgYnVmZmVyIHN0cnVjdHVyZSBwdHIKKyAqLworc3RhdGljIGludCB2cGlmX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2NGwyX2J1ZmZlciB0YnVmID0gKmJ1ZjsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYxOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9xYnVmXG4iKTsKKworCWlmIChjb21tb24tPmZtdC50eXBlICE9IHRidWYudHlwZSkgeworCQl2cGlmX2VycigiaW52YWxpZCBidWZmZXIgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZmgtPmlvX2FsbG93ZWRbVlBJRl9WSURFT19JTkRFWF0pIHsKKwkJdnBpZl9lcnIoImZoIGlvIG5vdCBhbGxvd2VkIFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCWlmICghKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKSkgfHwKKwkgICAgKGNvbW1vbi0+Y3VyX2ZybSAhPSBjb21tb24tPm5leHRfZnJtKSB8fAorCSAgICAhY29tbW9uLT5zdGFydGVkIHx8CisJICAgIChjb21tb24tPnN0YXJ0ZWQgJiYgKDAgPT0gY2gtPmZpZWxkX2lkKSkpCisJCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgYnVmKTsKKworCS8qIGJ1ZmZlcnF1ZXVlIGlzIGVtcHR5IHN0b3JlIGJ1ZmZlciBhZGRyZXNzIGluIFZQSUYgcmVnaXN0ZXJzICovCisJbXV0ZXhfbG9jaygmY29tbW9uLT5idWZmZXJfcXVldWUudmJfbG9jayk7CisJYnVmMSA9IGNvbW1vbi0+YnVmZmVyX3F1ZXVlLmJ1ZnNbdGJ1Zi5pbmRleF07CisKKwlpZiAoKGJ1ZjEtPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgfHwKKwkgICAgKGJ1ZjEtPnN0YXRlID09IFZJREVPQlVGX0FDVElWRSkpIHsKKwkJdnBpZl9lcnIoImludmFsaWQgc3RhdGVcbiIpOworCQlnb3RvIHFidWZfZXhpdDsKKwl9CisKKwlzd2l0Y2ggKGJ1ZjEtPm1lbW9yeSkgeworCWNhc2UgVjRMMl9NRU1PUllfTU1BUDoKKwkJaWYgKGJ1ZjEtPmJhZGRyID09IDApCisJCQlnb3RvIHFidWZfZXhpdDsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfTUVNT1JZX1VTRVJQVFI6CisJCWlmICh0YnVmLmxlbmd0aCA8IGJ1ZjEtPmJzaXplKQorCQkJZ290byBxYnVmX2V4aXQ7CisKKwkJaWYgKChWSURFT0JVRl9ORUVEU19JTklUICE9IGJ1ZjEtPnN0YXRlKQorCQkJICAgICYmIChidWYxLT5iYWRkciAhPSB0YnVmLm0udXNlcnB0cikpCisJCQl2cGlmX2J1ZmZlcl9yZWxlYXNlKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgYnVmMSk7CisJCQlidWYxLT5iYWRkciA9IHRidWYubS51c2VycHRyOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gcWJ1Zl9leGl0OworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXQgPSB2cGlmX2J1ZmZlcl9wcmVwYXJlKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgYnVmMSwKKwkJCQkJY29tbW9uLT5idWZmZXJfcXVldWUuZmllbGQpOworCWlmIChyZXQgPCAwKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJZ290byBxYnVmX2V4aXQ7CisJfQorCisJYnVmMS0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisKKwlpZiAoVjRMMl9NRU1PUllfVVNFUlBUUiA9PSBjb21tb24tPm1lbW9yeSkKKwkJYWRkciA9IGJ1ZjEtPmJvZmY7CisJZWxzZQorCQlhZGRyID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhidWYxKTsKKworCWNvbW1vbi0+bmV4dF9mcm0gPSBidWYxOworCWNvbW1vbi0+c2V0X2FkZHIoYWRkciArIGNvbW1vbi0+eXRvcF9vZmYsCisJCQkgYWRkciArIGNvbW1vbi0+eWJ0bV9vZmYsCisJCQkgYWRkciArIGNvbW1vbi0+Y3RvcF9vZmYsCisJCQkgYWRkciArIGNvbW1vbi0+Y2J0bV9vZmYpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmJ1ZjEtPnN0cmVhbSwgJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLnN0cmVhbSk7CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZS52Yl9sb2NrKTsKKwlyZXR1cm4gMDsKKworcWJ1Zl9leGl0OgorCW11dGV4X3VubG9jaygmY29tbW9uLT5idWZmZXJfcXVldWUudmJfbG9jayk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdnBpZl9kcWJ1ZigpIC0gcXVlcnkgYnVmZmVyIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAYnVmOiB2NGwyIGJ1ZmZlciBzdHJ1Y3R1cmUgcHRyCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJ2cGlmX2RxYnVmXG4iKTsKKworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1ZiwKKwkJCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCisvKioKKyAqIHZwaWZfc3RyZWFtb24oKSAtIHN0cmVhbW9uIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAYnVmdHlwZTogdjRsMiBidWZmZXIgdHlwZQorICovCitzdGF0aWMgaW50IHZwaWZfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIGJ1ZnR5cGUpCit7CisKKwlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NvbmZpZyAqY29uZmlnID0gdnBpZl9kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCBjaGFubmVsX29iaiAqb3RoX2NoID0gdnBpZl9vYmouZGV2WyFjaC0+Y2hhbm5lbF9pZF07CisJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CisJaW50IHJldCA9IDA7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfc3RyZWFtb25cbiIpOworCisJdnBpZiA9ICZjaC0+dnBpZnBhcmFtczsKKworCWlmIChidWZ0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImJ1ZmZlciB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBmaWxlIGhhbmRsZSBpcyBub3QgYWxsb3dlZCBJTywgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImlvIG5vdCBhbGxvd2VkXG4iKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJLyogSWYgU3RyZWFtaW5nIGlzIGFscmVhZHkgc3RhcnRlZCwgcmV0dXJuIGVycm9yICovCisJaWYgKGNvbW1vbi0+c3RhcnRlZCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImNoYW5uZWwtPnN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICgoY2gtPmNoYW5uZWxfaWQgPT0gVlBJRl9DSEFOTkVMMF9WSURFTyAmJgorCSAgICBvdGhfY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS5zdGFydGVkICYmCisJICAgIHZwaWYtPnN0ZF9pbmZvLnljbXV4X21vZGUgPT0gMCkgfHwKKwkgICAoKGNoLT5jaGFubmVsX2lkID09IFZQSUZfQ0hBTk5FTDFfVklERU8pICYmCisJICAgICgyID09IG90aF9jaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdLnN0YXJ0ZWQpKSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgIm90aGVyIGNoYW5uZWwgaXMgYmVpbmcgdXNlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0ID0gdnBpZl9jaGVja19mb3JtYXQoY2gsICZjb21tb24tPmZtdC5mbXQucGl4LCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRW5hYmxlIHN0cmVhbW9uIG9uIHRoZSBzdWIgZGV2aWNlICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtjaC0+Y3Vycl9zZF9pbmRleF0sIHZpZGVvLAorCQkJCXNfc3RyZWFtLCAxKTsKKworCWlmIChyZXQgJiYgKHJldCAhPSAtRU5PSU9DVExDTUQpKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAic3RyZWFtIG9uIGZhaWxlZCBpbiBzdWJkZXZcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIENhbGwgdmlkZW9idWZfc3RyZWFtb24gdG8gc3RhcnQgc3RyZWFtaW5nIGluIHZpZGVvYnVmICovCisJcmV0ID0gdmlkZW9idWZfc3RyZWFtb24oJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKKwlpZiAocmV0KSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAidmlkZW9idWZfc3RyZWFtb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpIHsKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIHN0cmVhbW9mZl9leGl0OworCX0KKworCS8qIElmIGJ1ZmZlciBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIGVycm9yICovCisJaWYgKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImJ1ZmZlciBxdWV1ZSBpcyBlbXB0eVxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBHZXQgdGhlIG5leHQgZnJhbWUgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlICovCisJY29tbW9uLT5jdXJfZnJtID0gbGlzdF9lbnRyeShjb21tb24tPmRtYV9xdWV1ZS5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7CisJY29tbW9uLT5uZXh0X2ZybSA9IGNvbW1vbi0+Y3VyX2ZybTsKKworCS8qIFJlbW92ZSBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlICovCisJbGlzdF9kZWwoJmNvbW1vbi0+Y3VyX2ZybS0+cXVldWUpOworCS8qIE1hcmsgc3RhdGUgb2YgdGhlIGN1cnJlbnQgZnJhbWUgdG8gYWN0aXZlICovCisJY29tbW9uLT5jdXJfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkvKiBJbml0aWFsaXplIGZpZWxkX2lkIGFuZCBzdGFydGVkIG1lbWJlciAqLworCWNoLT5maWVsZF9pZCA9IDA7CisJY29tbW9uLT5zdGFydGVkID0gMTsKKworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IGNvbW1vbi0+bWVtb3J5KQorCQlhZGRyID0gY29tbW9uLT5jdXJfZnJtLT5ib2ZmOworCWVsc2UKKwkJYWRkciA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcoY29tbW9uLT5jdXJfZnJtKTsKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGZvciBZIGFuZCBDIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworCXZwaWZfY2FsY3VsYXRlX29mZnNldHMoY2gpOworCisJaWYgKCh2cGlmLT5zdGRfaW5mby5mcm1fZm10ICYmCisJICAgICgoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpICYmCisJICAgICAoY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX0FOWSkpKSB8fAorCSAgICAoIXZwaWYtPnN0ZF9pbmZvLmZybV9mbXQgJiYKKwkgICAgIChjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkID09IFY0TDJfRklFTERfTk9ORSkpKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiY29uZmxpY3QgaW4gZmllbGQgZm9ybWF0IGFuZCBzdGQgZm9ybWF0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCS8qIGNvbmZpZ3VyZSAxIG9yIDIgY2hhbm5lbCBtb2RlICovCisJcmV0ID0gY29uZmlnLT5zZXR1cF9pbnB1dF9jaGFubmVsX21vZGUodnBpZi0+c3RkX2luZm8ueWNtdXhfbW9kZSk7CisKKwlpZiAocmV0IDwgMCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImNhbid0IHNldCB2cGlmIGNoYW5uZWwgbW9kZVxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBDYWxsIHZwaWZfc2V0X3BhcmFtcyBmdW5jdGlvbiB0byBzZXQgdGhlIHBhcmFtZXRlcnMgYW5kIGFkZHJlc3NlcyAqLworCXJldCA9IHZwaWZfc2V0X3ZpZGVvX3BhcmFtcyh2cGlmLCBjaC0+Y2hhbm5lbF9pZCk7CisKKwlpZiAocmV0IDwgMCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImNhbid0IHNldCB2aWRlbyBwYXJhbXNcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJY29tbW9uLT5zdGFydGVkID0gcmV0OworCXZwaWZfY29uZmlnX2FkZHIoY2gsIHJldCk7CisKKwljb21tb24tPnNldF9hZGRyKGFkZHIgKyBjb21tb24tPnl0b3Bfb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPnlidG1fb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmLAorCQkJIGFkZHIgKyBjb21tb24tPmNidG1fb2ZmKTsKKworCS8qKgorCSAqIFNldCBpbnRlcnJ1cHQgZm9yIGJvdGggdGhlIGZpZWxkcyBpbiBWUElGIFJlZ2lzdGVyIGVuYWJsZSBjaGFubmVsIGluCisJICogVlBJRiByZWdpc3RlcgorCSAqLworCWlmICgoVlBJRl9DSEFOTkVMMF9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkpIHsKKwkJY2hhbm5lbDBfaW50cl9hc3NlcnQoKTsKKwkJY2hhbm5lbDBfaW50cl9lbmFibGUoMSk7CisJCWVuYWJsZV9jaGFubmVsMCgxKTsKKwl9CisJaWYgKChWUElGX0NIQU5ORUwxX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB8fAorCSAgICAoY29tbW9uLT5zdGFydGVkID09IDIpKSB7CisJCWNoYW5uZWwxX2ludHJfYXNzZXJ0KCk7CisJCWNoYW5uZWwxX2ludHJfZW5hYmxlKDEpOworCQllbmFibGVfY2hhbm5lbDEoMSk7CisJfQorCWNoYW5uZWxfZmlyc3RfaW50W1ZQSUZfVklERU9fSU5ERVhdW2NoLT5jaGFubmVsX2lkXSA9IDE7CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiByZXQ7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworc3RyZWFtb2ZmX2V4aXQ6CisJcmV0ID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2cGlmX3N0cmVhbW9mZigpIC0gc3RyZWFtb2ZmIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAYnVmdHlwZTogdjRsMiBidWZmZXIgdHlwZQorICovCitzdGF0aWMgaW50IHZwaWZfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSBidWZ0eXBlKQoreworCisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWludCByZXQ7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfc3RyZWFtb2ZmXG4iKTsKKworCWlmIChidWZ0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgImJ1ZmZlciB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBpbyBpcyBhbGxvd2VkIGZvciB0aGlzIGZpbGUgaGFuZGxlLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAoIWZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiaW8gbm90IGFsbG93ZWRcbiIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwkvKiBJZiBzdHJlYW1pbmcgaXMgbm90IHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmICghY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiY2hhbm5lbC0+c3RhcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBkaXNhYmxlIGNoYW5uZWwgKi8KKwlpZiAoVlBJRl9DSEFOTkVMMF9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgeworCQllbmFibGVfY2hhbm5lbDAoMCk7CisJCWNoYW5uZWwwX2ludHJfZW5hYmxlKDApOworCX0gZWxzZSB7CisJCWVuYWJsZV9jaGFubmVsMSgwKTsKKwkJY2hhbm5lbDFfaW50cl9lbmFibGUoMCk7CisJfQorCisJY29tbW9uLT5zdGFydGVkID0gMDsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodnBpZl9vYmouc2RbY2gtPmN1cnJfc2RfaW5kZXhdLCB2aWRlbywKKwkJCQlzX3N0cmVhbSwgMCk7CisKKwlpZiAocmV0ICYmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKSkKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJzdHJlYW0gb2ZmIGZhaWxlZCBpbiBzdWJkZXZcbiIpOworCisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmY29tbW9uLT5idWZmZXJfcXVldWUpOworfQorCisvKioKKyAqIHZwaWZfbWFwX3N1Yl9kZXZpY2VfdG9faW5wdXQoKSAtIE1hcHMgc3ViIGRldmljZSB0byBpbnB1dAorICogQGNoIC0gcHRyIHRvIGNoYW5uZWwKKyAqIEBjb25maWcgLSBwdHIgdG8gY2FwdHVyZSBjb25maWd1cmF0aW9uCisgKiBAaW5wdXRfaW5kZXggLSBHaXZlbiBpbnB1dCBpbmRleCBmcm9tIGFwcGxpY2F0aW9uCisgKiBAc3ViX2RldmljZV9pbmRleCAtIGluZGV4IGludG8gc2QgdGFibGUKKyAqCisgKiBsb29rdXAgdGhlIHN1YiBkZXZpY2UgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gaW5wdXQgaW5kZXguCisgKiB3ZSByZXBvcnQgYWxsIHRoZSBpbnB1dHMgdG8gYXBwbGljYXRpb24uIGlucHV0cyB0YWJsZSBhbHNvCisgKiBoYXMgc3ViIGRldmljZSBuYW1lIGZvciB0aGUgZWFjaCBpbnB1dAorICovCitzdGF0aWMgc3RydWN0IHZwaWZfc3ViZGV2X2luZm8gKnZwaWZfbWFwX3N1Yl9kZXZpY2VfdG9faW5wdXQoCisJCQkJc3RydWN0IGNoYW5uZWxfb2JqICpjaCwKKwkJCQlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NvbmZpZyAqdnBpZl9jZmcsCisJCQkJaW50IGlucHV0X2luZGV4LAorCQkJCWludCAqc3ViX2RldmljZV9pbmRleCkKK3sKKwlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NoYW5fY29uZmlnICpjaGFuX2NmZzsKKwlzdHJ1Y3QgdnBpZl9zdWJkZXZfaW5mbyAqc3ViZGV2X2luZm8gPSBOVUxMOworCWNvbnN0IGNoYXIgKnN1YmRldl9uYW1lID0gTlVMTDsKKwlpbnQgaTsKKworCXZwaWZfZGJnKDIsIGRlYnVnLCAidnBpZl9tYXBfc3ViX2RldmljZV90b19pbnB1dFxuIik7CisKKwljaGFuX2NmZyA9ICZ2cGlmX2NmZy0+Y2hhbl9jb25maWdbY2gtPmNoYW5uZWxfaWRdOworCisJLyoqCisJICogc2VhcmNoIHRocm91Z2ggdGhlIGlucHV0cyB0byBmaW5kIHRoZSBzdWIgZGV2aWNlIHN1cHBvcnRpbmcKKwkgKiB0aGUgaW5wdXQKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2hhbl9jZmctPmlucHV0X2NvdW50OyBpKyspIHsKKwkJLyogRm9yIGVhY2ggc3ViIGRldmljZSwgbG9vcCB0aHJvdWdoIGlucHV0ICovCisJCWlmIChpID09IGlucHV0X2luZGV4KSB7CisJCQlzdWJkZXZfbmFtZSA9IGNoYW5fY2ZnLT5pbnB1dHNbaV0uc3ViZGV2X25hbWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGlmIHJlYWNoZWQgbWF4aW11bS4gcmV0dXJuIG51bGwgKi8KKwlpZiAoaSA9PSBjaGFuX2NmZy0+aW5wdXRfY291bnQgfHwgKE5VTEwgPT0gc3ViZGV2X25hbWUpKQorCQlyZXR1cm4gc3ViZGV2X2luZm87CisKKwkvKiBsb29wIHRocm91Z2ggdGhlIHN1YiBkZXZpY2UgbGlzdCB0byBnZXQgdGhlIHN1YiBkZXZpY2UgaW5mbyAqLworCWZvciAoaSA9IDA7IGkgPCB2cGlmX2NmZy0+c3ViZGV2X2NvdW50OyBpKyspIHsKKwkJc3ViZGV2X2luZm8gPSAmdnBpZl9jZmctPnN1YmRldl9pbmZvW2ldOworCQlpZiAoIXN0cmNtcChzdWJkZXZfaW5mby0+bmFtZSwgc3ViZGV2X25hbWUpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gdnBpZl9jZmctPnN1YmRldl9jb3VudCkKKwkJcmV0dXJuIHN1YmRldl9pbmZvOworCisJLyogY2hlY2sgaWYgdGhlIHN1YiBkZXZpY2UgaXMgcmVnaXN0ZXJlZCAqLworCWlmIChOVUxMID09IHZwaWZfb2JqLnNkW2ldKQorCQlyZXR1cm4gTlVMTDsKKworCSpzdWJfZGV2aWNlX2luZGV4ID0gaTsKKwlyZXR1cm4gc3ViZGV2X2luZm87Cit9CisKKy8qKgorICogdnBpZl9xdWVyeXN0ZCgpIC0gcXVlcnlzdGQgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBzdGRfaWQ6IHB0ciB0byBzdGQgaWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZXRlY3Qgc3RhbmRhcmQgYXQgdGhlIHNlbGVjdGVkIGlucHV0CisgKi8KK3N0YXRpYyBpbnQgdnBpZl9xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJaW50IHJldCA9IDA7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfcXVlcnlzdGRcbiIpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIENhbGwgcXVlcnlzdGQgZnVuY3Rpb24gb2YgZGVjb2RlciBkZXZpY2UgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHZwaWZfb2JqLnNkW2NoLT5jdXJyX3NkX2luZGV4XSwgdmlkZW8sCisJCQkJcXVlcnlzdGQsIHN0ZF9pZCk7CisJaWYgKHJldCA8IDApCisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiRmFpbGVkIHRvIHNldCBzdGFuZGFyZCBmb3Igc3ViIGRldmljZXNcbiIpOworCisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBpZl9nX3N0ZCgpIC0gZ2V0IFNURCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHN0ZF9pZDogcHRyIHRvIHN0ZCBpZAorICovCitzdGF0aWMgaW50IHZwaWZfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfZ19zdGRcbiIpOworCisJKnN0ZCA9IGNoLT52aWRlby5zdGRpZDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3Nfc3RkKCkgLSBzZXQgU1REIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAc3RkX2lkOiBwdHIgdG8gc3RkIGlkCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJaW50IHJldCA9IDA7CisKKwl2cGlmX2RiZygyLCBkZWJ1ZywgInZwaWZfc19zdGRcbiIpOworCisJaWYgKGNvbW1vbi0+c3RhcnRlZCkgeworCQl2cGlmX2Vycigic3RyZWFtaW5nIGluIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoKFZQSUZfQ0hBTk5FTDBfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHx8CisJICAgIChWUElGX0NIQU5ORUwxX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSkgeworCQlpZiAoIWZoLT5pbml0aWFsaXplZCkgeworCQkJdnBpZl9kYmcoMSwgZGVidWcsICJDaGFubmVsIEJ1c3lcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCXJldCA9IHY0bDJfcHJpb19jaGVjaygmY2gtPnByaW8sICZmaC0+cHJpbyk7CisJaWYgKDAgIT0gcmV0KQorCQlyZXR1cm4gcmV0OworCisJZmgtPmluaXRpYWxpemVkID0gMTsKKworCS8qIENhbGwgZW5jb2RlciBzdWJkZXZpY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBzdGFuZGFyZCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljaC0+dmlkZW8uc3RkaWQgPSAqc3RkX2lkOworCisJLyogR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhbmRhcmQgKi8KKwlpZiAodnBpZl91cGRhdGVfc3RkX2luZm8oY2gpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCXZwaWZfZXJyKCJFcnJvciBnZXR0aW5nIHRoZSBzdGFuZGFyZCBpbmZvXG4iKTsKKwkJZ290byBzX3N0ZF9leGl0OworCX0KKworCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmb3JtYXQgaW5mb3JtYXRpb24gKi8KKwl2cGlmX2NvbmZpZ19mb3JtYXQoY2gpOworCisJLyogc2V0IHN0YW5kYXJkIGluIHRoZSBzdWIgZGV2aWNlICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtjaC0+Y3Vycl9zZF9pbmRleF0sIGNvcmUsCisJCQkJc19zdGQsICpzdGRfaWQpOworCWlmIChyZXQgPCAwKQorCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkZhaWxlZCB0byBzZXQgc3RhbmRhcmQgZm9yIHN1YiBkZXZpY2VzXG4iKTsKKworc19zdGRfZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2cGlmX2VudW1faW5wdXQoKSAtIEVOVU1JTlBVVCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGlucHV0OiBwdHIgdG8gaW5wdXQgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppbnB1dCkKK3sKKworCXN0cnVjdCB2cGlmX2NhcHR1cmVfY29uZmlnICpjb25maWcgPSB2cGlmX2Rldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NoYW5fY29uZmlnICpjaGFuX2NmZzsKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKworCWNoYW5fY2ZnID0gJmNvbmZpZy0+Y2hhbl9jb25maWdbY2gtPmNoYW5uZWxfaWRdOworCisJaWYgKGlucHV0LT5pbmRleCA+PSBjaGFuX2NmZy0+aW5wdXRfY291bnQpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJJbnZhbGlkIGlucHV0IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KGlucHV0LCAmY2hhbl9jZmctPmlucHV0c1tpbnB1dC0+aW5kZXhdLmlucHV0LAorCQlzaXplb2YoKmlucHV0KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9nX2lucHV0KCkgLSBHZXQgSU5QVVQgaGFuZGxlcgorICogQGZpbGU6IGZpbGUgcHRyCisgKiBAcHJpdjogZmlsZSBoYW5kbGUKKyAqIEBpbmRleDogcHRyIHRvIGlucHV0IGluZGV4CisgKi8KK3N0YXRpYyBpbnQgdnBpZl9nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisKKwkqaW5kZXggPSB2aWRfY2gtPmlucHV0X2lkeDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfc19pbnB1dCgpIC0gU2V0IElOUFVUIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAaW5kZXg6IGlucHV0IGluZGV4CisgKi8KK3N0YXRpYyBpbnQgdnBpZl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IHZwaWZfY2FwdHVyZV9jb25maWcgKmNvbmZpZyA9IHZwaWZfZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB2cGlmX2NhcHR1cmVfY2hhbl9jb25maWcgKmNoYW5fY2ZnOworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCXN0cnVjdCB2cGlmX3N1YmRldl9pbmZvICpzdWJkZXZfaW5mbzsKKwlpbnQgcmV0ID0gMCwgc2RfaW5kZXggPSAwOworCXUzMiBpbnB1dCA9IDAsIG91dHB1dCA9IDA7CisKKwljaGFuX2NmZyA9ICZjb25maWctPmNoYW5fY29uZmlnW2NoLT5jaGFubmVsX2lkXTsKKworCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9lcnIoIlN0cmVhbWluZyBpbiBwcm9ncmVzc1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKChWUElGX0NIQU5ORUwwX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB8fAorCSAgICAoVlBJRl9DSEFOTkVMMV9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkpIHsKKwkJaWYgKCFmaC0+aW5pdGlhbGl6ZWQpIHsKKwkJCXZwaWZfZGJnKDEsIGRlYnVnLCAiQ2hhbm5lbCBCdXN5XG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJmNoLT5wcmlvLCAmZmgtPnByaW8pOworCWlmICgwICE9IHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZoLT5pbml0aWFsaXplZCA9IDE7CisJc3ViZGV2X2luZm8gPSB2cGlmX21hcF9zdWJfZGV2aWNlX3RvX2lucHV0KGNoLCBjb25maWcsIGluZGV4LAorCQkJCQkJICAgJnNkX2luZGV4KTsKKwlpZiAoTlVMTCA9PSBzdWJkZXZfaW5mbykgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywKKwkJCSJjb3VsZG4ndCBsb29rdXAgc3ViIGRldmljZSBmb3IgdGhlIGlucHV0IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGZpcnN0IHNldHVwIGlucHV0IHBhdGggZnJvbSBzdWIgZGV2aWNlIHRvIHZwaWYgKi8KKwlpZiAoY29uZmlnLT5zZXR1cF9pbnB1dF9wYXRoKSB7CisJCXJldCA9IGNvbmZpZy0+c2V0dXBfaW5wdXRfcGF0aChjaC0+Y2hhbm5lbF9pZCwKKwkJCQkJICAgICAgIHN1YmRldl9pbmZvLT5uYW1lKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXZwaWZfZGJnKDEsIGRlYnVnLCAiY291bGRuJ3Qgc2V0dXAgaW5wdXQgcGF0aCBmb3IgdGhlIgorCQkJCSIgc3ViIGRldmljZSAlcywgZm9yIGlucHV0IGluZGV4ICVkXG4iLAorCQkJCXN1YmRldl9pbmZvLT5uYW1lLCBpbmRleCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwlpZiAoc3ViZGV2X2luZm8tPmNhbl9yb3V0ZSkgeworCQlpbnB1dCA9IHN1YmRldl9pbmZvLT5pbnB1dDsKKwkJb3V0cHV0ID0gc3ViZGV2X2luZm8tPm91dHB1dDsKKwkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2cGlmX29iai5zZFtzZF9pbmRleF0sIHZpZGVvLCBzX3JvdXRpbmcsCisJCQkJCWlucHV0LCBvdXRwdXQsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJdnBpZl9kYmcoMSwgZGVidWcsICJGYWlsZWQgdG8gc2V0IGlucHV0XG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKwl2aWRfY2gtPmlucHV0X2lkeCA9IGluZGV4OworCWNoLT5jdXJyX3N1YmRldl9pbmZvID0gc3ViZGV2X2luZm87CisJY2gtPmN1cnJfc2RfaW5kZXggPSBzZF9pbmRleDsKKwkvKiBjb3B5IGludGVyZmFjZSBwYXJhbWV0ZXJzIHRvIHZwaWYgKi8KKwljaC0+dnBpZnBhcmFtcy5pZmFjZSA9IHN1YmRldl9pbmZvLT52cGlmX2lmOworCisJLyogdXBkYXRlIHR2bm9ybXMgZnJvbSB0aGUgc3ViIGRldmljZSBpbnB1dCBpbmZvICovCisJY2gtPnZpZGVvX2Rldi0+dHZub3JtcyA9IGNoYW5fY2ZnLT5pbnB1dHNbaW5kZXhdLmlucHV0LnN0ZDsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2cGlmX2VudW1fZm10X3ZpZF9jYXAoKSAtIEVOVU1fRk1UIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAaW5kZXg6IGlucHV0IGluZGV4CisgKi8KK3N0YXRpYyBpbnQgdnBpZl9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCisJaWYgKGZtdC0+aW5kZXggIT0gMCkgeworCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkludmFsaWQgZm9ybWF0IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgZm9ybWF0ICovCisJaWYgKGNoLT52cGlmcGFyYW1zLmlmYWNlLmlmX3R5cGUgPT0gVlBJRl9JRl9SQVdfQkFZRVIpIHsKKwkJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlzdHJjcHkoZm10LT5kZXNjcmlwdGlvbiwgIlJhdyBNb2RlIC1CYXllciBQYXR0ZXJuIEdyUkJHYiIpOworCQlmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKKwl9IGVsc2UgeworCQlmbXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXN0cmNweShmbXQtPmRlc2NyaXB0aW9uLCAiWUNiQ3I0OjI6MiBZQyBQbGFuYXIiKTsKKwkJZm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3RyeV9mbXRfdmlkX2NhcCgpIC0gVFJZX0ZNVCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGZtdDogcHRyIHRvIHY0bDIgZm9ybWF0IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHZwaWZfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCA9ICZmbXQtPmZtdC5waXg7CisKKwlyZXR1cm4gdnBpZl9jaGVja19mb3JtYXQoY2gsIHBpeGZtdCwgMSk7Cit9CisKKworLyoqCisgKiB2cGlmX2dfZm10X3ZpZF9jYXAoKSAtIFNldCBJTlBVVCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGZtdDogcHRyIHRvIHY0bDIgZm9ybWF0IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHZwaWZfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwkvKiBDaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGJ1ZmZlciB0eXBlICovCisJaWYgKGNvbW1vbi0+Zm10LnR5cGUgIT0gZm10LT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkqZm10ID0gY29tbW9uLT5mbXQ7CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfc19mbXRfdmlkX2NhcCgpIC0gU2V0IEZNVCBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQGZtdDogcHRyIHRvIHY0bDIgZm9ybWF0IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHZwaWZfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10OworCWludCByZXQgPSAwOworCisJdnBpZl9kYmcoMiwgZGVidWcsICJWSURJT0NfU19GTVRcbiIpOworCisJLyogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJTdHJlYW1pbmcgaXMgc3RhcnRlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKChWUElGX0NIQU5ORUwwX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB8fAorCSAgICAoVlBJRl9DSEFOTkVMMV9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkpIHsKKwkJaWYgKCFmaC0+aW5pdGlhbGl6ZWQpIHsKKwkJCXZwaWZfZGJnKDEsIGRlYnVnLCAiQ2hhbm5lbCBCdXN5XG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJmNoLT5wcmlvLCAmZmgtPnByaW8pOworCWlmICgwICE9IHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZoLT5pbml0aWFsaXplZCA9IDE7CisKKwlwaXhmbXQgPSAmZm10LT5mbXQucGl4OworCS8qIENoZWNrIGZvciB2YWxpZCBmaWVsZCBmb3JtYXQgKi8KKwlyZXQgPSB2cGlmX2NoZWNrX2Zvcm1hdChjaCwgcGl4Zm10LCAwKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyogc3RvcmUgdGhlIGZvcm1hdCBpbiB0aGUgY2hhbm5lbCBvYmplY3QgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY29tbW9uLT5mbXQgPSAqZm10OworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfcXVlcnljYXAoKSAtIFFVRVJZQ0FQIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAY2FwOiBwdHIgdG8gdjRsMl9jYXBhYmlsaXR5IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHZwaWZfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NvbmZpZyAqY29uZmlnID0gdnBpZl9kZXYtPnBsYXRmb3JtX2RhdGE7CisKKwljYXAtPnZlcnNpb24gPSBWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAidnBpZiBjYXB0dXJlIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCAiRE02NDZ4IFBsYXRmb3JtIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgY29uZmlnLT5jYXJkX25hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwaWZfZ19wcmlvcml0eSgpIC0gZ2V0IHByaW9yaXR5IGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAcHJpbzogcHRyIHRvIHY0bDJfcHJpb3JpdHkgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgdnBpZl9nX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgZW51bSB2NGwyX3ByaW9yaXR5ICpwcmlvKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCisJKnByaW8gPSB2NGwyX3ByaW9fbWF4KCZjaC0+cHJpbyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGlmX3NfcHJpb3JpdHkoKSAtIHNldCBwcmlvcml0eSBoYW5kbGVyCisgKiBAZmlsZTogZmlsZSBwdHIKKyAqIEBwcml2OiBmaWxlIGhhbmRsZQorICogQHByaW86IHB0ciB0byB2NGwyX3ByaW9yaXR5IHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IHZwaWZfc19wcmlvcml0eShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX3ByaW9yaXR5IHApCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisKKwlyZXR1cm4gdjRsMl9wcmlvX2NoYW5nZSgmY2gtPnByaW8sICZmaC0+cHJpbywgcCk7Cit9CisKKy8qKgorICogdnBpZl9jcm9wY2FwKCkgLSBjcm9wY2FwIGhhbmRsZXIKKyAqIEBmaWxlOiBmaWxlIHB0cgorICogQHByaXY6IGZpbGUgaGFuZGxlCisgKiBAY3JvcDogcHRyIHRvIHY0bDJfY3JvcGNhcCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCB2cGlmX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gY3JvcC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcm9wLT5ib3VuZHMubGVmdCA9IDA7CisJY3JvcC0+Ym91bmRzLnRvcCA9IDA7CisJY3JvcC0+Ym91bmRzLmhlaWdodCA9IGNvbW1vbi0+aGVpZ2h0OworCWNyb3AtPmJvdW5kcy53aWR0aCA9IGNvbW1vbi0+d2lkdGg7CisJY3JvcC0+ZGVmcmVjdCA9IGNyb3AtPmJvdW5kczsKKwlyZXR1cm4gMDsKK30KKworLyogdnBpZiBjYXB0dXJlIGlvY3RsIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdnBpZl9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICAgICAgCT0gdnBpZl9xdWVyeWNhcCwKKwkudmlkaW9jX2dfcHJpb3JpdHkJCT0gdnBpZl9nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eQkJPSB2cGlmX3NfcHJpb3JpdHksCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdnBpZl9lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgCQk9IHZwaWZfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAJCT0gdnBpZl9zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCQk9IHZwaWZfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9pbnB1dAkJPSB2cGlmX2VudW1faW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQkJPSB2cGlmX3NfaW5wdXQsCisJLnZpZGlvY19nX2lucHV0CQkJPSB2cGlmX2dfaW5wdXQsCisJLnZpZGlvY19yZXFidWZzICAgICAgICAgCT0gdnBpZl9yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgICAgICAgIAk9IHZwaWZfcXVlcnlidWYsCisJLnZpZGlvY19xdWVyeXN0ZAkJPSB2cGlmX3F1ZXJ5c3RkLAorCS52aWRpb2Nfc19zdGQgICAgICAgICAgIAk9IHZwaWZfc19zdGQsCisJLnZpZGlvY19nX3N0ZAkJCT0gdnBpZl9nX3N0ZCwKKwkudmlkaW9jX3FidWYgICAgICAgICAgICAJPSB2cGlmX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgCT0gdnBpZl9kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uICAgICAgICAJPSB2cGlmX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgIAk9IHZwaWZfc3RyZWFtb2ZmLAorCS52aWRpb2NfY3JvcGNhcCAgICAgICAgIAk9IHZwaWZfY3JvcGNhcCwKK307CisKKy8qIHZwaWYgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZwaWZfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZwaWZfb3BlbiwKKwkucmVsZWFzZSA9IHZwaWZfcmVsZWFzZSwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCisJLm1tYXAgPSB2cGlmX21tYXAsCisJLnBvbGwgPSB2cGlmX3BvbGwKK307CisKKy8qIHZwaWYgdmlkZW8gdGVtcGxhdGUgKi8KK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZwaWZfdmlkZW9fdGVtcGxhdGUgPSB7CisJLm5hbWUJCT0gInZwaWYiLAorCS5mb3BzCQk9ICZ2cGlmX2ZvcHMsCisJLm1pbm9yCQk9IC0xLAorCS5pb2N0bF9vcHMJPSAmdnBpZl9pb2N0bF9vcHMsCit9OworCisvKioKKyAqIGluaXRpYWxpemVfdnBpZigpIC0gSW5pdGlhbGl6ZSB2cGlmIGRhdGEgc3RydWN0dXJlcworICoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsaXplIHRoZW0KKyAqLworc3RhdGljIGludCBpbml0aWFsaXplX3ZwaWYodm9pZCkKK3sKKwlpbnQgZXJyID0gMCwgaSwgajsKKwlpbnQgZnJlZV9jaGFubmVsX29iamVjdHNfaW5kZXg7CisKKwkvKiBEZWZhdWx0IG51bWJlciBvZiBidWZmZXJzIHNob3VsZCBiZSAzICovCisJaWYgKChjaDBfbnVtYnVmZmVycyA+IDApICYmCisJICAgIChjaDBfbnVtYnVmZmVycyA8IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnMpKQorCQljaDBfbnVtYnVmZmVycyA9IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnM7CisJaWYgKChjaDFfbnVtYnVmZmVycyA+IDApICYmCisJICAgIChjaDFfbnVtYnVmZmVycyA8IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnMpKQorCQljaDFfbnVtYnVmZmVycyA9IGNvbmZpZ19wYXJhbXMubWluX251bWJ1ZmZlcnM7CisKKwkvKiBTZXQgYnVmZmVyIHNpemUgdG8gbWluIGJ1ZmZlcnMgc2l6ZSBpZiBpdCBpcyBpbnZhbGlkICovCisJaWYgKGNoMF9idWZzaXplIDwgY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZVtWUElGX0NIQU5ORUwwX1ZJREVPXSkKKwkJY2gwX2J1ZnNpemUgPQorCQkgICAgY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZVtWUElGX0NIQU5ORUwwX1ZJREVPXTsKKwlpZiAoY2gxX2J1ZnNpemUgPCBjb25maWdfcGFyYW1zLm1pbl9idWZzaXplW1ZQSUZfQ0hBTk5FTDFfVklERU9dKQorCQljaDFfYnVmc2l6ZSA9CisJCSAgICBjb25maWdfcGFyYW1zLm1pbl9idWZzaXplW1ZQSUZfQ0hBTk5FTDFfVklERU9dOworCisJY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW1ZQSUZfQ0hBTk5FTDBfVklERU9dID0gY2gwX251bWJ1ZmZlcnM7CisJY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW1ZQSUZfQ0hBTk5FTDFfVklERU9dID0gY2gxX251bWJ1ZmZlcnM7CisJaWYgKGNoMF9udW1idWZmZXJzKSB7CisJCWNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW1ZQSUZfQ0hBTk5FTDBfVklERU9dCisJCSAgICA9IGNoMF9idWZzaXplOworCX0KKwlpZiAoY2gxX251bWJ1ZmZlcnMpIHsKKwkJY29uZmlnX3BhcmFtcy5jaGFubmVsX2J1ZnNpemVbVlBJRl9DSEFOTkVMMV9WSURFT10KKwkJICAgID0gY2gxX2J1ZnNpemU7CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBzaXggY2hhbm5lbCBvYmplY3RzICovCisJZm9yIChpID0gMDsgaSA8IFZQSUZfQ0FQVFVSRV9NQVhfREVWSUNFUzsgaSsrKSB7CisJCXZwaWZfb2JqLmRldltpXSA9CisJCSAgICBremFsbG9jKHNpemVvZigqdnBpZl9vYmouZGV2W2ldKSwgR0ZQX0tFUk5FTCk7CisJCS8qIElmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm4gZXJyb3IgKi8KKwkJaWYgKCF2cGlmX29iai5kZXZbaV0pIHsKKwkJCWZyZWVfY2hhbm5lbF9vYmplY3RzX2luZGV4ID0gaTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIHZwaWZfaW5pdF9mcmVlX2NoYW5uZWxfb2JqZWN0czsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKwordnBpZl9pbml0X2ZyZWVfY2hhbm5lbF9vYmplY3RzOgorCWZvciAoaiA9IDA7IGogPCBmcmVlX2NoYW5uZWxfb2JqZWN0c19pbmRleDsgaisrKQorCQlrZnJlZSh2cGlmX29iai5kZXZbal0pOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogdnBpZl9wcm9iZSA6IFRoaXMgZnVuY3Rpb24gcHJvYmVzIHRoZSB2cGlmIGNhcHR1cmUgZHJpdmVyCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBUaGlzIGNyZWF0ZXMgZGV2aWNlIGVudHJpZXMgYnkgcmVnaXN0ZXIgaXRzZWxmIHRvIHRoZSBWNEwyIGRyaXZlciBhbmQKKyAqIGluaXRpYWxpemVzIGZpZWxkcyBvZiBlYWNoIGNoYW5uZWwgb2JqZWN0cworICovCitzdGF0aWMgX19pbml0IGludCB2cGlmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZwaWZfc3ViZGV2X2luZm8gKnN1YmRldmRhdGE7CisJc3RydWN0IHZwaWZfY2FwdHVyZV9jb25maWcgKmNvbmZpZzsKKwlpbnQgaSwgaiwgaywgbSwgcSwgZXJyOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgc3ViZGV2X2NvdW50OworCisJdnBpZl9kZXYgPSAmcGRldi0+ZGV2OworCisJZXJyID0gaW5pdGlhbGl6ZV92cGlmKCk7CisJaWYgKGVycikgeworCQl2NGwyX2Vycih2cGlmX2Rldi0+ZHJpdmVyLCAiRXJyb3IgaW5pdGlhbGl6aW5nIHZwaWZcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWsgPSAwOworCXdoaWxlICgocmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCBrKSkpIHsKKwkJZm9yIChpID0gcmVzLT5zdGFydDsgaSA8PSByZXMtPmVuZDsgaSsrKSB7CisJCQlpZiAocmVxdWVzdF9pcnEoaSwgdnBpZl9jaGFubmVsX2lzciwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJIkRNNjQ2eF9DYXB0dXJlIiwKKwkJCQkodm9pZCAqKSgmdnBpZl9vYmouZGV2W2tdLT5jaGFubmVsX2lkKSkpIHsKKwkJCQllcnIgPSAtRUJVU1k7CisJCQkJaS0tOworCQkJCWdvdG8gdnBpZl9pbnRfZXJyOworCQkJfQorCQl9CisJCWsrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9DQVBUVVJFX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBjaGFubmVsIG9iamVjdCAqLworCQljaCA9IHZwaWZfb2JqLmRldltpXTsKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2aWRlbyBkZXZpY2UgKi8KKwkJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJCWlmIChOVUxMID09IHZmZCkgeworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworCQkJCWNoID0gdnBpZl9vYmouZGV2W2pdOworCQkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGNoLT52aWRlb19kZXYpOworCQkJfQorCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gdnBpZl9kZXZfYWxsb2NfZXJyOworCQl9CisKKwkJLyogSW5pdGlhbGl6ZSBmaWVsZCBvZiB2aWRlbyBkZXZpY2UgKi8KKwkJKnZmZCA9IHZwaWZfdmlkZW9fdGVtcGxhdGU7CisJCXZmZC0+djRsMl9kZXYgPSAmdnBpZl9vYmoudjRsMl9kZXY7CisJCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCQlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLAorCQkJICJETTY0NnhfVlBJRkNhcHR1cmVfRFJJVkVSX1YlZC4lZC4lZCIsCisJCQkgKFZQSUZfQ0FQVFVSRV9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKKwkJCSAoVlBJRl9DQVBUVVJFX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsCisJCQkgKFZQSUZfQ0FQVFVSRV9WRVJTSU9OX0NPREUpICYgMHhmZik7CisJCS8qIFNldCB2aWRlb19kZXYgdG8gdGhlIHZpZGVvIGRldmljZSAqLworCQljaC0+dmlkZW9fZGV2ID0gdmZkOworCX0KKworCWZvciAoaiA9IDA7IGogPCBWUElGX0NBUFRVUkVfTUFYX0RFVklDRVM7IGorKykgeworCQljaCA9IHZwaWZfb2JqLmRldltqXTsKKwkJY2gtPmNoYW5uZWxfaWQgPSBqOworCQljb21tb24gPSAmKGNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0pOworCQlzcGluX2xvY2tfaW5pdCgmY29tbW9uLT5pcnFsb2NrKTsKKwkJbXV0ZXhfaW5pdCgmY29tbW9uLT5sb2NrKTsKKwkJLyogSW5pdGlhbGl6ZSBwcmlvIG1lbWJlciBvZiBjaGFubmVsIG9iamVjdCAqLworCQl2NGwyX3ByaW9faW5pdCgmY2gtPnByaW8pOworCQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2gtPnZpZGVvX2RldiwKKwkJCQkJICAgIFZGTF9UWVBFX0dSQUJCRVIsIChqID8gMSA6IDApKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcHJvYmVfb3V0OworCisJCXZpZGVvX3NldF9kcnZkYXRhKGNoLT52aWRlb19kZXYsIGNoKTsKKworCX0KKworCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDEpOworCWNvbmZpZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJc3ViZGV2X2NvdW50ID0gY29uZmlnLT5zdWJkZXZfY291bnQ7CisJdnBpZl9vYmouc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYgKikgKiBzdWJkZXZfY291bnQsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHZwaWZfb2JqLnNkID09IE5VTEwpIHsKKwkJdnBpZl9lcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN1YmRldmljZSBwb2ludGVyc1xuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gcHJvYmVfb3V0OworCX0KKworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKHZwaWZfZGV2LCAmdnBpZl9vYmoudjRsMl9kZXYpOworCWlmIChlcnIpIHsKKwkJdjRsMl9lcnIodnBpZl9kZXYtPmRyaXZlciwgIkVycm9yIHJlZ2lzdGVyaW5nIHY0bDIgZGV2aWNlXG4iKTsKKwkJZ290byBwcm9iZV9zdWJkZXZfb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzdWJkZXZfY291bnQ7IGkrKykgeworCQlzdWJkZXZkYXRhID0gJmNvbmZpZy0+c3ViZGV2X2luZm9baV07CisJCXZwaWZfb2JqLnNkW2ldID0KKwkJCXY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJnZwaWZfb2JqLnY0bDJfZGV2LAorCQkJCQkJICBpMmNfYWRhcCwKKwkJCQkJCSAgc3ViZGV2ZGF0YS0+bmFtZSwKKwkJCQkJCSAgJnN1YmRldmRhdGEtPmJvYXJkX2luZm8sCisJCQkJCQkgIE5VTEwpOworCisJCWlmICghdnBpZl9vYmouc2RbaV0pIHsKKwkJCXZwaWZfZXJyKCJFcnJvciByZWdpc3RlcmluZyB2NGwyIHN1YmRldmljZVxuIik7CisJCQlnb3RvIHByb2JlX3N1YmRldl9vdXQ7CisJCX0KKwkJdjRsMl9pbmZvKCZ2cGlmX29iai52NGwyX2RldiwgInJlZ2lzdGVyZWQgc3ViIGRldmljZSAlc1xuIiwKKwkJCSAgc3ViZGV2ZGF0YS0+bmFtZSk7CisKKwkJaWYgKHZwaWZfb2JqLnNkW2ldKQorCQkJdnBpZl9vYmouc2RbaV0tPmdycF9pZCA9IDEgPDwgaTsKKwl9CisJdjRsMl9pbmZvKCZ2cGlmX29iai52NGwyX2RldiwgIkRNNjQ2eCBWUElGIENhcHR1cmUgZHJpdmVyIgorCQkgICIgaW5pdGlhbGl6ZWRcbiIpOworCisJcmV0dXJuIDA7CisKK3Byb2JlX3N1YmRldl9vdXQ6CisJLyogZnJlZSBzdWIgZGV2aWNlcyBtZW1vcnkgKi8KKwlrZnJlZSh2cGlmX29iai5zZCk7CisKKwlqID0gVlBJRl9DQVBUVVJFX01BWF9ERVZJQ0VTOworcHJvYmVfb3V0OgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwaWZfb2JqLnY0bDJfZGV2KTsKKwlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7CisJCS8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgY2hhbm5lbCBvYmplY3QgKi8KKwkJY2ggPSB2cGlmX29iai5kZXZba107CisJCS8qIFVucmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNoLT52aWRlb19kZXYpOworCX0KKwordnBpZl9kZXZfYWxsb2NfZXJyOgorCWsgPSBWUElGX0NBUFRVUkVfTUFYX0RFVklDRVMtMTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIGspOworCWkgPSByZXMtPmVuZDsKKwordnBpZl9pbnRfZXJyOgorCWZvciAocSA9IGs7IHEgPj0gMDsgcS0tKSB7CisJCWZvciAobSA9IGk7IG0gPj0gKGludClyZXMtPnN0YXJ0OyBtLS0pCisJCQlmcmVlX2lycShtLCAodm9pZCAqKSgmdnBpZl9vYmouZGV2W3FdLT5jaGFubmVsX2lkKSk7CisKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCBxLTEpOworCQlpZiAocmVzKQorCQkJaSA9IHJlcy0+ZW5kOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHZwaWZfcmVtb3ZlKCkgLSBkcml2ZXIgcmVtb3ZlIGhhbmRsZXIKKyAqIEBkZXZpY2U6IHB0ciB0byBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVGhlIHZpZG9lIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQKKyAqLworc3RhdGljIGludCB2cGlmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGk7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwaWZfb2JqLnY0bDJfZGV2KTsKKworCS8qIHVuLXJlZ2lzdGVyIGRldmljZSAqLworCWZvciAoaSA9IDA7IGkgPCBWUElGX0NBUFRVUkVfTUFYX0RFVklDRVM7IGkrKykgeworCQkvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgb2JqZWN0ICovCisJCWNoID0gdnBpZl9vYmouZGV2W2ldOworCQkvKiBVbnJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjaC0+dmlkZW9fZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBpZl9zdXNwZW5kOiB2cGlmIGRldmljZSBzdXNwZW5kCisgKgorICogVE9ETzogQWRkIHN1c3BlbmQgY29kZSBoZXJlCisgKi8KK3N0YXRpYyBpbnQKK3ZwaWZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIHZwaWZfcmVzdW1lOiB2cGlmIGRldmljZSBzdXNwZW5kCisgKgorICogVE9ETzogQWRkIHJlc3VtZSBjb2RlIGhlcmUKKyAqLworc3RhdGljIGludAordnBpZl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHZwaWZfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHZwaWZfc3VzcGVuZCwKKwkucmVzdW1lID0gdnBpZl9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cGlmX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJ2cGlmX2NhcHR1cmUiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJnZwaWZfZGV2X3BtX29wcywKKwl9LAorCS5wcm9iZSA9IHZwaWZfcHJvYmUsCisJLnJlbW92ZSA9IHZwaWZfcmVtb3ZlLAorfTsKKworLyoqCisgKiB2cGlmX2luaXQ6IGluaXRpYWxpemUgdGhlIHZwaWYgZHJpdmVyCisgKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgZGV2aWNlIGFuZCBkcml2ZXIgdG8gdGhlIGtlcm5lbCwgcmVxdWVzdHMgaXJxCisgKiBoYW5kbGVyIGFuZCBhbGxvY2F0ZXMgbWVtb3J5CisgKiBmb3IgY2hhbm5lbCBvYmplY3RzCisgKi8KK3N0YXRpYyBfX2luaXQgaW50IHZwaWZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZwaWZfZHJpdmVyKTsKK30KKworLyoqCisgKiB2cGlmX2NsZWFudXAgOiBUaGlzIGZ1bmN0aW9uIGNsZWFuIHVwIHRoZSB2cGlmIGNhcHR1cmUgcmVzb3VyY2VzCisgKgorICogVGhpcyB3aWxsIHVuLXJlZ2lzdGVycyBkZXZpY2UgYW5kIGRyaXZlciB0byB0aGUga2VybmVsLCBmcmVlcworICogcmVxdWVzdGVkIGlycSBoYW5kbGVyIGFuZCBkZS1hbGxvY2F0ZXMgbWVtb3J5IGFsbG9jYXRlZCBmb3IgY2hhbm5lbAorICogb2JqZWN0cy4KKyAqLworc3RhdGljIHZvaWQgdnBpZl9jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxX251bTsKKwlpbnQgaSA9IDA7CisKKwlwZGV2ID0gY29udGFpbmVyX29mKHZwaWZfZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXdoaWxlICgocmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCBpKSkpIHsKKwkJZm9yIChpcnFfbnVtID0gcmVzLT5zdGFydDsgaXJxX251bSA8PSByZXMtPmVuZDsgaXJxX251bSsrKQorCQkJZnJlZV9pcnEoaXJxX251bSwKKwkJCQkgKHZvaWQgKikoJnZwaWZfb2JqLmRldltpXS0+Y2hhbm5lbF9pZCkpOworCQlpKys7CisJfQorCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZwaWZfZHJpdmVyKTsKKworCWtmcmVlKHZwaWZfb2JqLnNkKTsKKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9DQVBUVVJFX01BWF9ERVZJQ0VTOyBpKyspCisJCWtmcmVlKHZwaWZfb2JqLmRldltpXSk7Cit9CisKKy8qIEZ1bmN0aW9uIGZvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgKi8KK21vZHVsZV9pbml0KHZwaWZfaW5pdCk7Cittb2R1bGVfZXhpdCh2cGlmX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTJlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgVlBJRl9DQVBUVVJFX0gKKyNkZWZpbmUgVlBJRl9DQVBUVVJFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogSGVhZGVyIGZpbGVzICovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorI2luY2x1ZGUgPG1hY2gvZG02NDZ4Lmg+CisKKyNpbmNsdWRlICJ2cGlmLmgiCisKKy8qIE1hY3JvcyAqLworI2RlZmluZSBWUElGX01BSk9SX1JFTEVBU0UJCTAKKyNkZWZpbmUgVlBJRl9NSU5PUl9SRUxFQVNFCQkwCisjZGVmaW5lIFZQSUZfQlVJTEQJCQkxCisjZGVmaW5lIFZQSUZfQ0FQVFVSRV9WRVJTSU9OX0NPREUJKChWUElGX01BSk9SX1JFTEVBU0UgPDwgMTYpIHwgXAorCShWUElGX01JTk9SX1JFTEVBU0UgPDwgOCkgfCBWUElGX0JVSUxEKQorCisjZGVmaW5lIFZQSUZfVkFMSURfRklFTEQoZmllbGQpCQkoKChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgfHwgXAorCShWNEwyX0ZJRUxEX05PTkUgPT0gZmllbGQpKSB8fCBcCisJKCgoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEID09IGZpZWxkKSB8fCBcCisJKFY0TDJfRklFTERfU0VRX1RCID09IGZpZWxkKSkgfHwgXAorCShWNEwyX0ZJRUxEX1NFUV9CVCA9PSBmaWVsZCkpKQorCisjZGVmaW5lIFZQSUZfQ0FQVFVSRV9NQVhfREVWSUNFUwkyCisjZGVmaW5lIFZQSUZfVklERU9fSU5ERVgJCTAKKyNkZWZpbmUgVlBJRl9OVU1CRVJfT0ZfT0JKRUNUUwkJMQorCisvKiBFbnVtZXJhdGVkIGRhdGEgdHlwZSB0byBnaXZlIGlkIHRvIGVhY2ggZGV2aWNlIHBlciBjaGFubmVsICovCitlbnVtIHZwaWZfY2hhbm5lbF9pZCB7CisJVlBJRl9DSEFOTkVMMF9WSURFTyA9IDAsCisJVlBJRl9DSEFOTkVMMV9WSURFTywKK307CisKK3N0cnVjdCB2aWRlb19vYmogeworCWVudW0gdjRsMl9maWVsZCBidWZfZmllbGQ7CisJLyogQ3VycmVudGx5IHNlbGVjdGVkIG9yIGRlZmF1bHQgc3RhbmRhcmQgKi8KKwl2NGwyX3N0ZF9pZCBzdGRpZDsKKwkvKiBUaGlzIGlzIHRvIHRyYWNrIHRoZSBsYXN0IGlucHV0IHRoYXQgaXMgcGFzc2VkIHRvIGFwcGxpY2F0aW9uICovCisJdTMyIGlucHV0X2lkeDsKK307CisKK3N0cnVjdCBjb21tb25fb2JqIHsKKwkvKiBQb2ludGVyIHBvaW50aW5nIHRvIGN1cnJlbnQgdjRsMl9idWZmZXIgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpjdXJfZnJtOworCS8qIFBvaW50ZXIgcG9pbnRpbmcgdG8gY3VycmVudCB2NGwyX2J1ZmZlciAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKm5leHRfZnJtOworCS8qCisJICogVGhpcyBmaWVsZCBrZWVwcyB0cmFjayBvZiB0eXBlIG9mIGJ1ZmZlciBleGNoYW5nZSBtZWNoYW5pc20KKwkgKiB1c2VyIGhhcyBzZWxlY3RlZAorCSAqLworCWVudW0gdjRsMl9tZW1vcnkgbWVtb3J5OworCS8qIFVzZWQgdG8gc3RvcmUgcGl4ZWwgZm9ybWF0ICovCisJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKKwkvKiBCdWZmZXIgcXVldWUgdXNlZCBpbiB2aWRlby1idWYgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgYnVmZmVyX3F1ZXVlOworCS8qIFF1ZXVlIG9mIGZpbGxlZCBmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9xdWV1ZTsKKwkvKiBVc2VkIGluIHZpZGVvLWJ1ZiAqLworCXNwaW5sb2NrX3QgaXJxbG9jazsKKwkvKiBsb2NrIHVzZWQgdG8gYWNjZXNzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IG11dGV4IGxvY2s7CisJLyogbnVtYmVyIG9mIHVzZXJzIHBlcmZvcm1pbmcgSU8gKi8KKwl1MzIgaW9fdXNyczsKKwkvKiBJbmRpY2F0ZXMgd2hldGhlciBzdHJlYW1pbmcgc3RhcnRlZCAqLworCXU4IHN0YXJ0ZWQ7CisJLyogRnVuY3Rpb24gcG9pbnRlciB0byBzZXQgdGhlIGFkZHJlc3NlcyAqLworCXZvaWQgKCpzZXRfYWRkcikgKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkgIHVuc2lnbmVkIGxvbmcpOworCS8qIG9mZnNldCB3aGVyZSBZIHRvcCBzdGFydHMgZnJvbSB0aGUgc3RhcnRpbmcgb2YgdGhlIGJ1ZmZlciAqLworCXUzMiB5dG9wX29mZjsKKwkvKiBvZmZzZXQgd2hlcmUgWSBib3R0b20gc3RhcnRzIGZyb20gdGhlIHN0YXJ0aW5nIG9mIHRoZSBidWZmZXIgKi8KKwl1MzIgeWJ0bV9vZmY7CisJLyogb2Zmc2V0IHdoZXJlIEMgdG9wIHN0YXJ0cyBmcm9tIHRoZSBzdGFydGluZyBvZiB0aGUgYnVmZmVyICovCisJdTMyIGN0b3Bfb2ZmOworCS8qIG9mZnNldCB3aGVyZSBDIGJvdHRvbSBzdGFydHMgZnJvbSB0aGUgc3RhcnRpbmcgb2YgdGhlIGJ1ZmZlciAqLworCXUzMiBjYnRtX29mZjsKKwkvKiBJbmRpY2F0ZXMgd2lkdGggb2YgdGhlIGltYWdlIGRhdGEgKi8KKwl1MzIgd2lkdGg7CisJLyogSW5kaWNhdGVzIGhlaWdodCBvZiB0aGUgaW1hZ2UgZGF0YSAqLworCXUzMiBoZWlnaHQ7Cit9OworCitzdHJ1Y3QgY2hhbm5lbF9vYmogeworCS8qIElkZW50aWZpZXMgdmlkZW8gZGV2aWNlIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CisJLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHN0YXRlIG9mIHRoZSBwcmlvcml0eSAqLworCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgcHJpbzsKKwkvKiBudW1iZXIgb2Ygb3BlbiBpbnN0YW5jZXMgb2YgdGhlIGNoYW5uZWwgKi8KKwlpbnQgdXNyczsKKwkvKiBJbmRpY2F0ZXMgaWQgb2YgdGhlIGZpZWxkIHdoaWNoIGlzIGJlaW5nIGRpc3BsYXllZCAqLworCXUzMiBmaWVsZF9pZDsKKwkvKiBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgZGVjb2RlciBpcyBpbml0aWFsaXplZCAqLworCXU4IGluaXRpYWxpemVkOworCS8qIElkZW50aWZpZXMgY2hhbm5lbCAqLworCWVudW0gdnBpZl9jaGFubmVsX2lkIGNoYW5uZWxfaWQ7CisJLyogaW5kZXggaW50byBzZCB0YWJsZSAqLworCWludCBjdXJyX3NkX2luZGV4OworCS8qIHB0ciB0byBjdXJyZW50IHN1YiBkZXZpY2UgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgdnBpZl9zdWJkZXZfaW5mbyAqY3Vycl9zdWJkZXZfaW5mbzsKKwkvKiB2cGlmIGNvbmZpZ3VyYXRpb24gcGFyYW1zICovCisJc3RydWN0IHZwaWZfcGFyYW1zIHZwaWZwYXJhbXM7CisJLyogY29tbW9uIG9iamVjdCBhcnJheSAqLworCXN0cnVjdCBjb21tb25fb2JqIGNvbW1vbltWUElGX05VTUJFUl9PRl9PQkpFQ1RTXTsKKwkvKiB2aWRlbyBvYmplY3QgKi8KKwlzdHJ1Y3QgdmlkZW9fb2JqIHZpZGVvOworfTsKKworLyogRmlsZSBoYW5kbGUgc3RydWN0dXJlICovCitzdHJ1Y3QgdnBpZl9maCB7CisJLyogcG9pbnRlciB0byBjaGFubmVsIG9iamVjdCBmb3Igb3BlbmVkIGRldmljZSAqLworCXN0cnVjdCBjaGFubmVsX29iaiAqY2hhbm5lbDsKKwkvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGZpbGUgaGFuZGxlIGlzIGRvaW5nIElPICovCisJdTggaW9fYWxsb3dlZFtWUElGX05VTUJFUl9PRl9PQkpFQ1RTXTsKKwkvKiBVc2VkIHRvIGtlZXAgdHJhY2sgcHJpb3JpdHkgb2YgdGhpcyBpbnN0YW5jZSAqLworCWVudW0gdjRsMl9wcmlvcml0eSBwcmlvOworCS8qIFVzZWQgdG8gaW5kaWNhdGUgY2hhbm5lbCBpcyBpbml0aWFsaXplIG9yIG5vdCAqLworCXU4IGluaXRpYWxpemVkOworfTsKKworc3RydWN0IHZwaWZfZGV2aWNlIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpkZXZbVlBJRl9DQVBUVVJFX05VTV9DSEFOTkVMU107CisJc3RydWN0IHY0bDJfc3ViZGV2ICoqc2Q7Cit9OworCitzdHJ1Y3QgdnBpZl9jb25maWdfcGFyYW1zIHsKKwl1OCBtaW5fbnVtYnVmZmVyczsKKwl1OCBudW1idWZmZXJzW1ZQSUZfQ0FQVFVSRV9OVU1fQ0hBTk5FTFNdOworCXM4IGRldmljZV90eXBlOworCXUzMiBtaW5fYnVmc2l6ZVtWUElGX0NBUFRVUkVfTlVNX0NIQU5ORUxTXTsKKwl1MzIgY2hhbm5lbF9idWZzaXplW1ZQSUZfQ0FQVFVSRV9OVU1fQ0hBTk5FTFNdOworCXU4IGRlZmF1bHRfZGV2aWNlW1ZQSUZfQ0FQVFVSRV9OVU1fQ0hBTk5FTFNdOworCXU4IG1heF9kZXZpY2VfdHlwZTsKK307CisvKiBTdHJ1Y3Qgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGxpbmUgbnVtYmVycyBmb3IgdGhlIHNsaWNlZCB2Ymkgc2VydmljZSAqLworc3RydWN0IHZwaWZfc2VydmljZV9saW5lIHsKKwl1MTYgc2VydmljZV9pZDsKKwl1MTYgc2VydmljZV9saW5lWzJdOworfTsKKyNlbmRpZgkJCQkvKiBFbmQgb2YgX19LRVJORUxfXyAqLworI2VuZGlmCQkJCS8qIFZQSUZfQ0FQVFVSRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxNWRhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuYwpAQCAtMCwwICsxLDE2NTYgQEAKKy8qCisgKiB2cGlmLWRpc3BsYXkgLSBWUElGIGRpc3BsYXkgZHJpdmVyCisgKiBEaXNwbGF5IGRyaXZlciBmb3IgVEkgRGFWaW5jaSBWUElGCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIC5hcyBpcy4gV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaW5jbHVkZSA8bWVkaWEvYWR2NzM0My5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCisjaW5jbHVkZSA8bWFjaC9kbTY0NnguaD4KKworI2luY2x1ZGUgInZwaWZfZGlzcGxheS5oIgorI2luY2x1ZGUgInZwaWYuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBEYVZpbmNpIFZQSUYgRGlzcGxheSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBETTY0NlhfVjRMMl9TVEQgKFY0TDJfU1REXzUyNV82MCB8IFY0TDJfU1REXzYyNV81MCkKKworI2RlZmluZSB2cGlmX2VycihmbXQsIGFyZy4uLikJdjRsMl9lcnIoJnZwaWZfb2JqLnY0bDJfZGV2LCBmbXQsICMjIGFyZykKKyNkZWZpbmUgdnBpZl9kYmcobGV2ZWwsIGRlYnVnLCBmbXQsIGFyZy4uLikJXAorCQl2NGwyX2RiZyhsZXZlbCwgZGVidWcsICZ2cGlmX29iai52NGwyX2RldiwgZm10LCAjIyBhcmcpCisKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworc3RhdGljIHUzMiBjaDJfbnVtYnVmZmVycyA9IDM7CitzdGF0aWMgdTMyIGNoM19udW1idWZmZXJzID0gMzsKK3N0YXRpYyB1MzIgY2gyX2J1ZnNpemUgPSAxOTIwICogMTA4MCAqIDI7CitzdGF0aWMgdTMyIGNoM19idWZzaXplID0gNzIwICogNTc2ICogMjsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGNoMl9udW1idWZmZXJzLCB1aW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjaDNfbnVtYnVmZmVycywgdWludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2gyX2J1ZnNpemUsIHVpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNoM19idWZzaXplLCB1aW50LCBTX0lSVUdPKTsKKworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIDAtMSIpOworTU9EVUxFX1BBUk1fREVTQyhjaDJfbnVtYnVmZmVycywgIkNoYW5uZWwyIGJ1ZmZlciBjb3VudCAoZGVmYXVsdDozKSIpOworTU9EVUxFX1BBUk1fREVTQyhjaDNfbnVtYnVmZmVycywgIkNoYW5uZWwzIGJ1ZmZlciBjb3VudCAoZGVmYXVsdDozKSIpOworTU9EVUxFX1BBUk1fREVTQyhjaDJfYnVmc2l6ZSwgIkNoYW5uZWwyIGJ1ZmZlciBzaXplIChkZWZhdWx0OjE5MjAgeCAxMDgwIHggMikiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2gzX2J1ZnNpemUsICJDaGFubmVsMyBidWZmZXIgc2l6ZSAoZGVmYXVsdDo3MjAgeCA1NzYgeCAyKSIpOworCitzdGF0aWMgc3RydWN0IHZwaWZfY29uZmlnX3BhcmFtcyBjb25maWdfcGFyYW1zID0geworCS5taW5fbnVtYnVmZmVycwkJPSAzLAorCS5udW1idWZmZXJzWzBdCQk9IDMsCisJLm51bWJ1ZmZlcnNbMV0JCT0gMywKKwkubWluX2J1ZnNpemVbMF0JCT0gNzIwICogNDgwICogMiwKKwkubWluX2J1ZnNpemVbMV0JCT0gNzIwICogNDgwICogMiwKKwkuY2hhbm5lbF9idWZzaXplWzBdCT0gMTkyMCAqIDEwODAgKiAyLAorCS5jaGFubmVsX2J1ZnNpemVbMV0JPSA3MjAgKiA1NzYgKiAyLAorfTsKKworc3RhdGljIHN0cnVjdCB2cGlmX2RldmljZSB2cGlmX29iaiA9IHsge05VTEx9IH07CitzdGF0aWMgc3RydWN0IGRldmljZSAqdnBpZl9kZXY7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBpZl9jaGFubmVsX2NvbmZpZ19wYXJhbXMgY2hfcGFyYW1zW10gPSB7CisJeworCQkiTlRTQyIsIDcyMCwgNDgwLCAzMCwgMCwgMSwgMjY4LCAxNDQwLCAxLCAyMywgMjYzLCAyNjYsCisJCTI4NiwgNTI1LCA1MjUsIDAsIDEsIDAsIFY0TDJfU1REXzUyNV82MCwKKwl9LAorCXsKKwkJIlBBTCIsIDcyMCwgNTc2LCAyNSwgMCwgMSwgMjgwLCAxNDQwLCAxLCAyMywgMzExLCAzMTMsCisJCTMzNiwgNjI0LCA2MjUsIDAsIDEsIDAsIFY0TDJfU1REXzYyNV81MCwKKwl9LAorfTsKKworLyoKKyAqIHZwaWZfdXNlcnZpcnRfdG9fcGh5czogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgdXNlcgorICogc3BhY2UgdmlydHVhbCBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB1MzIgdnBpZl91c2VydmlydF90b19waHlzKHUzMiB2aXJ0cCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXVuc2lnbmVkIGxvbmcgcGh5c3AgPSAwOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCisJdm1hID0gZmluZF92bWEobW0sIHZpcnRwKTsKKworCS8qIEZvciBrZXJuZWwgZGlyZWN0LW1hcHBlZCBtZW1vcnksIHRha2UgdGhlIGVhc3kgd2F5ICovCisJaWYgKHZpcnRwID49IFBBR0VfT0ZGU0VUKSB7CisJCXBoeXNwID0gdmlydF90b19waHlzKCh2b2lkICopdmlydHApOworCX0gZWxzZSBpZiAodm1hICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fSU8pICYmICh2bWEtPnZtX3Bnb2ZmKSkgeworCQkvKiB0aGlzIHdpbGwgY2F0Y2gsIGtlcm5lbC1hbGxvY2F0ZWQsIG1tYXBlZC10by11c2VybW9kZSBhZGRyICovCisJCXBoeXNwID0gKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkgKyAodmlydHAgLSB2bWEtPnZtX3N0YXJ0KTsKKwl9IGVsc2UgeworCQkvKiBvdGhlcndpc2UsIHVzZSBnZXRfdXNlcl9wYWdlcygpIGZvciBnZW5lcmFsIHVzZXJsYW5kIHBhZ2VzICovCisJCWludCByZXMsIG5yX3BhZ2VzID0gMTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2VzOworCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwkJcmVzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sCisJCQkJICAgICB2aXJ0cCwgbnJfcGFnZXMsIDEsIDAsICZwYWdlcywgTlVMTCk7CisJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwkJaWYgKHJlcyA9PSBucl9wYWdlcykgeworCQkJcGh5c3AgPSBfX3BhKHBhZ2VfYWRkcmVzcygmcGFnZXNbMF0pICsKKwkJCQkJCQkodmlydHAgJiB+UEFHRV9NQVNLKSk7CisJCX0gZWxzZSB7CisJCQl2cGlmX2VycigiZ2V0X3VzZXJfcGFnZXMgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIHBoeXNwOworfQorCisvKgorICogYnVmZmVyX3ByZXBhcmU6IFRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIHZpZGVvYnVmX3FidWYoKQorICogZnVuY3Rpb24gdGhlIGJ1ZmZlciBpcyBwcmVwYXJlZCBhbmQgdXNlciBzcGFjZSB2aXJ0dWFsIGFkZHJlc3MgaXMgY29udmVydGVkCisgKiBpbnRvIHBoeXNpY2FsIGFkZHJlc3MKKyAqLworc3RhdGljIGludCB2cGlmX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCSAgICAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJY29tbW9uID0gJmZoLT5jaGFubmVsLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gdmItPnN0YXRlKSB7CisJCXZiLT53aWR0aAk9IGNvbW1vbi0+d2lkdGg7CisJCXZiLT5oZWlnaHQJPSBjb21tb24tPmhlaWdodDsKKwkJdmItPnNpemUJPSB2Yi0+d2lkdGggKiB2Yi0+aGVpZ2h0OworCQl2Yi0+ZmllbGQJPSBmaWVsZDsKKwl9CisJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisKKwkvKiBpZiB1c2VyIHBvaW50ZXIgbWVtb3J5IG1lY2hhbmlzbSBpcyB1c2VkLCBnZXQgdGhlIHBoeXNpY2FsCisJICogYWRkcmVzcyBvZiB0aGUgYnVmZmVyICovCisJaWYgKFY0TDJfTUVNT1JZX1VTRVJQVFIgPT0gY29tbW9uLT5tZW1vcnkpIHsKKwkJaWYgKCF2Yi0+YmFkZHIpIHsKKwkJCXZwaWZfZXJyKCJidWZmZXJfYWRkcmVzcyBpcyAwXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdmItPmJvZmYgPSB2cGlmX3VzZXJ2aXJ0X3RvX3BoeXModmItPmJhZGRyKTsKKwkJaWYgKCFJU0FMSUdORUQodmItPmJvZmYpKQorCQkJZ290byBidWZfYWxpZ25fZXhpdDsKKwl9CisKKwlhZGRyID0gdmItPmJvZmY7CisJaWYgKHEtPnN0cmVhbWluZyAmJiAoVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCAhPSBxLT50eXBlKSkgeworCQlpZiAoIUlTQUxJR05FRChhZGRyICsgY29tbW9uLT55dG9wX29mZikgfHwKKwkJICAgICFJU0FMSUdORUQoYWRkciArIGNvbW1vbi0+eWJ0bV9vZmYpIHx8CisJCSAgICAhSVNBTElHTkVEKGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmKSB8fAorCQkgICAgIUlTQUxJR05FRChhZGRyICsgY29tbW9uLT5jYnRtX29mZikpCisJCQlnb3RvIGJ1Zl9hbGlnbl9leGl0OworCX0KKwlyZXR1cm4gMDsKKworYnVmX2FsaWduX2V4aXQ6CisJdnBpZl9lcnIoImJ1ZmZlciBvZmZzZXQgbm90IGFsaWduZWQgdG8gOCBieXRlc1xuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiB2cGlmX2J1ZmZlcl9zZXR1cDogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgYnVmZmVycworICovCitzdGF0aWMgaW50IHZwaWZfYnVmZmVyX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCQl1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwlpZiAoVjRMMl9NRU1PUllfTU1BUCAhPSBjb21tb24tPm1lbW9yeSkKKwkJcmV0dXJuIDA7CisKKwkqc2l6ZSA9IGNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKwlpZiAoKmNvdW50IDwgY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVycykKKwkJKmNvdW50ID0gY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVyczsKKworCXJldHVybiAwOworfQorCisvKgorICogdnBpZl9idWZmZXJfcXVldWU6IFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgYnVmZmVyIHRvIERNQSBxdWV1ZQorICovCitzdGF0aWMgdm9pZCB2cGlmX2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKworCWNvbW1vbiA9ICZmaC0+Y2hhbm5lbC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJLyogYWRkIHRoZSBidWZmZXIgdG8gdGhlIERNQSBxdWV1ZSAqLworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJmNvbW1vbi0+ZG1hX3F1ZXVlKTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Cit9CisKKy8qCisgKiB2cGlmX2J1ZmZlcl9yZWxlYXNlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSB2aWRlb2J1ZiBsYXllciB0bworICogZnJlZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZSBidWZmZXJzCisgKi8KK3N0YXRpYyB2b2lkIHZwaWZfYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbjsKKwl1bnNpZ25lZCBpbnQgYnVmX3NpemUgPSAwOworCisJY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUocSwgdmIpOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CisKKwlpZiAoVjRMMl9NRU1PUllfTU1BUCAhPSBjb21tb24tPm1lbW9yeSkKKwkJcmV0dXJuOworCisJYnVmX3NpemUgPSBjb25maWdfcGFyYW1zLmNoYW5uZWxfYnVmc2l6ZVtjaC0+Y2hhbm5lbF9pZF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cAk9IHZwaWZfYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZQk9IHZwaWZfYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZQk9IHZwaWZfYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZQk9IHZwaWZfYnVmZmVyX3JlbGVhc2UsCit9Oworc3RhdGljIHU4IGNoYW5uZWxfZmlyc3RfaW50W1ZQSUZfTlVNT0JKRUNUU11bMl0gPSB7IHsxLCAxfSB9OworCitzdGF0aWMgdm9pZCBwcm9jZXNzX3Byb2dyZXNzaXZlX21vZGUoc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCisJLyogR2V0IHRoZSBuZXh0IGJ1ZmZlciBmcm9tIGJ1ZmZlciBxdWV1ZSAqLworCWNvbW1vbi0+bmV4dF9mcm0gPSBsaXN0X2VudHJ5KGNvbW1vbi0+ZG1hX3F1ZXVlLm5leHQsCisJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgcXVldWUpOworCS8qIFJlbW92ZSB0aGF0IGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgcXVldWUgKi8KKwlsaXN0X2RlbCgmY29tbW9uLT5uZXh0X2ZybS0+cXVldWUpOworCS8qIE1hcmsgc3RhdHVzIG9mIHRoZSBidWZmZXIgYXMgYWN0aXZlICovCisJY29tbW9uLT5uZXh0X2ZybS0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisKKwkvKiBTZXQgdG9wIGFuZCBib3R0b20gZmllbGQgYWRkcnMgaW4gVlBJRiByZWdpc3RlcnMgKi8KKwlhZGRyID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhjb21tb24tPm5leHRfZnJtKTsKKwljb21tb24tPnNldF9hZGRyKGFkZHIgKyBjb21tb24tPnl0b3Bfb2ZmLAorCQkJCSBhZGRyICsgY29tbW9uLT55YnRtX29mZiwKKwkJCQkgYWRkciArIGNvbW1vbi0+Y3RvcF9vZmYsCisJCQkJIGFkZHIgKyBjb21tb24tPmNidG1fb2ZmKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19pbnRlcmxhY2VkX21vZGUoaW50IGZpZCwgc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbikKK3sKKwkvKiBkZXZpY2UgZmllbGQgaWQgYW5kIGxvY2FsIGZpZWxkIGlkIGFyZSBpbiBzeW5jICovCisJLyogSWYgdGhpcyBpcyBldmVuIGZpZWxkICovCisJaWYgKDAgPT0gZmlkKSB7CisJCWlmIChjb21tb24tPmN1cl9mcm0gPT0gY29tbW9uLT5uZXh0X2ZybSkKKwkJCXJldHVybjsKKworCQkvKiBvbmUgZnJhbWUgaXMgZGlzcGxheWVkIElmIG5leHQgZnJhbWUgaXMKKwkJICogIGF2YWlsYWJsZSwgcmVsZWFzZSBjdXJfZnJtIGFuZCBtb3ZlIG9uICovCisJCS8qIENvcHkgZnJhbWUgZGlzcGxheSB0aW1lICovCisJCWRvX2dldHRpbWVvZmRheSgmY29tbW9uLT5jdXJfZnJtLT50cyk7CisJCS8qIENoYW5nZSBzdGF0dXMgb2YgdGhlIGN1cl9mcm0gKi8KKwkJY29tbW9uLT5jdXJfZnJtLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCS8qIHVubG9jayBzZW1hcGhvcmUgb24gY3VyX2ZybSAqLworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvbW1vbi0+Y3VyX2ZybS0+ZG9uZSk7CisJCS8qIE1ha2UgY3VyX2ZybSBwb2ludGluZyB0byBuZXh0X2ZybSAqLworCQljb21tb24tPmN1cl9mcm0gPSBjb21tb24tPm5leHRfZnJtOworCisJfSBlbHNlIGlmICgxID09IGZpZCkgewkvKiBvZGQgZmllbGQgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKQorCQkgICAgfHwgKGNvbW1vbi0+Y3VyX2ZybSAhPSBjb21tb24tPm5leHRfZnJtKSkgeworCQkJcmV0dXJuOworCQl9CisJCS8qIG9uZSBmaWVsZCBpcyBkaXNwbGF5ZWQgY29uZmlndXJlIHRoZSBuZXh0CisJCSAqIGZyYW1lIGlmIGl0IGlzIGF2YWlsYWJsZSBlbHNlIGhvbGQgb24gY3VycmVudAorCQkgKiBmcmFtZSAqLworCQkvKiBHZXQgbmV4dCBmcm9tIHRoZSBidWZmZXIgcXVldWUgKi8KKwkJcHJvY2Vzc19wcm9ncmVzc2l2ZV9tb2RlKGNvbW1vbik7CisKKwl9Cit9CisKKy8qCisgKiB2cGlmX2NoYW5uZWxfaXNyOiBJdCBjaGFuZ2VzIHN0YXR1cyBvZiB0aGUgZGlzcGxheWVkIGJ1ZmZlciwgdGFrZXMgbmV4dAorICogYnVmZmVyIGZyb20gdGhlIHF1ZXVlIGFuZCBzZXRzIGl0cyBhZGRyZXNzIGluIFZQSUYgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2cGlmX2NoYW5uZWxfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdnBpZl9kZXZpY2UgKmRldiA9ICZ2cGlmX29iajsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCWludCBmaWQgPSAtMSwgaTsKKwlpbnQgY2hhbm5lbF9pZCA9IDA7CisKKwljaGFubmVsX2lkID0gKihpbnQgKikoZGV2X2lkKTsKKwljaCA9IGRldi0+ZGV2W2NoYW5uZWxfaWRdOworCWZpZWxkID0gY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS5mbXQuZm10LnBpeC5maWVsZDsKKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9OVU1PQkpFQ1RTOyBpKyspIHsKKwkJY29tbW9uID0gJmNoLT5jb21tb25baV07CisJCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkIGluIHRoaXMgY2hhbm5lbCAqLworCQlpZiAoMCA9PSBjb21tb24tPnN0YXJ0ZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoMSA9PSBjaC0+dnBpZnBhcmFtcy5zdGRfaW5mby5mcm1fZm10KSB7CisJCQlpZiAobGlzdF9lbXB0eSgmY29tbW9uLT5kbWFfcXVldWUpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBQcm9ncmVzc2l2ZSBtb2RlICovCisJCQlpZiAoIWNoYW5uZWxfZmlyc3RfaW50W2ldW2NoYW5uZWxfaWRdKSB7CisJCQkJLyogTWFyayBzdGF0dXMgb2YgdGhlIGN1cl9mcm0gdG8KKwkJCQkgKiBkb25lIGFuZCB1bmxvY2sgc2VtYXBob3JlIG9uIGl0ICovCisJCQkJZG9fZ2V0dGltZW9mZGF5KCZjb21tb24tPmN1cl9mcm0tPnRzKTsKKwkJCQljb21tb24tPmN1cl9mcm0tPnN0YXRlID0gVklERU9CVUZfRE9ORTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvbW1vbi0+Y3VyX2ZybS0+ZG9uZSk7CisJCQkJLyogTWFrZSBjdXJfZnJtIHBvaW50aW5nIHRvIG5leHRfZnJtICovCisJCQkJY29tbW9uLT5jdXJfZnJtID0gY29tbW9uLT5uZXh0X2ZybTsKKwkJCX0KKworCQkJY2hhbm5lbF9maXJzdF9pbnRbaV1bY2hhbm5lbF9pZF0gPSAwOworCQkJcHJvY2Vzc19wcm9ncmVzc2l2ZV9tb2RlKGNvbW1vbik7CisJCX0gZWxzZSB7CisJCQkvKiBJbnRlcmxhY2VkIG1vZGUgKi8KKwkJCS8qIElmIGl0IGlzIGZpcnN0IGludGVycnVwdCwgaWdub3JlIGl0ICovCisKKwkJCWlmIChjaGFubmVsX2ZpcnN0X2ludFtpXVtjaGFubmVsX2lkXSkgeworCQkJCWNoYW5uZWxfZmlyc3RfaW50W2ldW2NoYW5uZWxfaWRdID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKDAgPT0gaSkgeworCQkJCWNoLT5maWVsZF9pZCBePSAxOworCQkJCS8qIEdldCBmaWVsZCBpZCBmcm9tIFZQSUYgcmVnaXN0ZXJzICovCisJCQkJZmlkID0gdnBpZl9jaGFubmVsX2dldGZpZChjaC0+Y2hhbm5lbF9pZCArIDIpOworCQkJCS8qIElmIGZpZCBkb2VzIG5vdCBtYXRjaCB3aXRoIHN0b3JlZCBmaWVsZCBpZCAqLworCQkJCWlmIChmaWQgIT0gY2gtPmZpZWxkX2lkKSB7CisJCQkJCS8qIE1ha2UgdGhlbSBpbiBzeW5jICovCisJCQkJCWlmICgwID09IGZpZCkKKwkJCQkJCWNoLT5maWVsZF9pZCA9IGZpZDsKKworCQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQkJfQorCQkJfQorCQkJcHJvY2Vzc19pbnRlcmxhY2VkX21vZGUoZmlkLCBjb21tb24pOworCQl9CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHZwaWZfZ2V0X3N0ZF9pbmZvKHN0cnVjdCBjaGFubmVsX29iaiAqY2gpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisJc3RydWN0IHZwaWZfcGFyYW1zICp2cGlmcGFyYW1zID0gJmNoLT52cGlmcGFyYW1zOworCXN0cnVjdCB2cGlmX2NoYW5uZWxfY29uZmlnX3BhcmFtcyAqc3RkX2luZm8gPSAmdnBpZnBhcmFtcy0+c3RkX2luZm87CisJY29uc3Qgc3RydWN0IHZwaWZfY2hhbm5lbF9jb25maWdfcGFyYW1zICpjb25maWc7CisKKwlpbnQgaW5kZXg7CisKKwlzdGRfaW5mby0+c3RkaWQgPSB2aWRfY2gtPnN0ZGlkOworCWlmICghc3RkX2luZm8pCisJCXJldHVybiAtMTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUoY2hfcGFyYW1zKTsgaW5kZXgrKykgeworCQljb25maWcgPSAmY2hfcGFyYW1zW2luZGV4XTsKKwkJaWYgKGNvbmZpZy0+c3RkaWQgJiBzdGRfaW5mby0+c3RkaWQpIHsKKwkJCW1lbWNweShzdGRfaW5mbywgY29uZmlnLCBzaXplb2YoKmNvbmZpZykpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaW5kZXggPT0gQVJSQVlfU0laRShjaF9wYXJhbXMpKQorCQlyZXR1cm4gLTE7CisKKwljb21tb24tPmZtdC5mbXQucGl4LndpZHRoID0gc3RkX2luZm8tPndpZHRoOworCWNvbW1vbi0+Zm10LmZtdC5waXguaGVpZ2h0ID0gc3RkX2luZm8tPmhlaWdodDsKKwl2cGlmX2RiZygxLCBkZWJ1ZywgIlBpeGVsIGRldGFpbHM6IFdpZHRoID0gJWQsSGVpZ2h0ID0gJWRcbiIsCisJCQljb21tb24tPmZtdC5mbXQucGl4LndpZHRoLCBjb21tb24tPmZtdC5mbXQucGl4LmhlaWdodCk7CisKKwkvKiBTZXQgaGVpZ2h0IGFuZCB3aWR0aCBwYXJhbWF0ZXJlcyAqLworCWNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0uaGVpZ2h0ID0gc3RkX2luZm8tPmhlaWdodDsKKwljaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdLndpZHRoID0gc3RkX2luZm8tPndpZHRoOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGlmX2NhbGN1bGF0ZV9vZmZzZXRzOiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYnVmZmVycyBvZmZzZXQgZm9yIFkgYW5kIEMKKyAqIGluIHRoZSB0b3AgYW5kIGJvdHRvbSBmaWVsZAorICovCitzdGF0aWMgdm9pZCB2cGlmX2NhbGN1bGF0ZV9vZmZzZXRzKHN0cnVjdCBjaGFubmVsX29iaiAqY2gpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2cGlmX3BhcmFtcyAqdnBpZnBhcmFtcyA9ICZjaC0+dnBpZnBhcmFtczsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQgPSBjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisJdW5zaWduZWQgaW50IGhwaXRjaCwgdnBpdGNoLCBzaXplaW1hZ2U7CisKKwlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCkgeworCQlpZiAoY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uZnJtX2ZtdCkKKwkJCXZpZF9jaC0+YnVmX2ZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQllbHNlCisJCQl2aWRfY2gtPmJ1Zl9maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwl9IGVsc2UgeworCQl2aWRfY2gtPmJ1Zl9maWVsZCA9IGNvbW1vbi0+Zm10LmZtdC5waXguZmllbGQ7CisJfQorCisJaWYgKFY0TDJfTUVNT1JZX1VTRVJQVFIgPT0gY29tbW9uLT5tZW1vcnkpCisJCXNpemVpbWFnZSA9IGNvbW1vbi0+Zm10LmZtdC5waXguc2l6ZWltYWdlOworCWVsc2UKKwkJc2l6ZWltYWdlID0gY29uZmlnX3BhcmFtcy5jaGFubmVsX2J1ZnNpemVbY2gtPmNoYW5uZWxfaWRdOworCisJaHBpdGNoID0gY29tbW9uLT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmU7CisJdnBpdGNoID0gc2l6ZWltYWdlIC8gKGhwaXRjaCAqIDIpOworCWlmICgoVjRMMl9GSUVMRF9OT05FID09IHZpZF9jaC0+YnVmX2ZpZWxkKSB8fAorCSAgICAoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEID09IHZpZF9jaC0+YnVmX2ZpZWxkKSkgeworCQljb21tb24tPnl0b3Bfb2ZmID0gMDsKKwkJY29tbW9uLT55YnRtX29mZiA9IGhwaXRjaDsKKwkJY29tbW9uLT5jdG9wX29mZiA9IHNpemVpbWFnZSAvIDI7CisJCWNvbW1vbi0+Y2J0bV9vZmYgPSBzaXplaW1hZ2UgLyAyICsgaHBpdGNoOworCX0gZWxzZSBpZiAoVjRMMl9GSUVMRF9TRVFfVEIgPT0gdmlkX2NoLT5idWZfZmllbGQpIHsKKwkJY29tbW9uLT55dG9wX29mZiA9IDA7CisJCWNvbW1vbi0+eWJ0bV9vZmYgPSBzaXplaW1hZ2UgLyA0OworCQljb21tb24tPmN0b3Bfb2ZmID0gc2l6ZWltYWdlIC8gMjsKKwkJY29tbW9uLT5jYnRtX29mZiA9IGNvbW1vbi0+Y3RvcF9vZmYgKyBzaXplaW1hZ2UgLyA0OworCX0gZWxzZSBpZiAoVjRMMl9GSUVMRF9TRVFfQlQgPT0gdmlkX2NoLT5idWZfZmllbGQpIHsKKwkJY29tbW9uLT55YnRtX29mZiA9IDA7CisJCWNvbW1vbi0+eXRvcF9vZmYgPSBzaXplaW1hZ2UgLyA0OworCQljb21tb24tPmNidG1fb2ZmID0gc2l6ZWltYWdlIC8gMjsKKwkJY29tbW9uLT5jdG9wX29mZiA9IGNvbW1vbi0+Y2J0bV9vZmYgKyBzaXplaW1hZ2UgLyA0OworCX0KKworCWlmICgoVjRMMl9GSUVMRF9OT05FID09IHZpZF9jaC0+YnVmX2ZpZWxkKSB8fAorCSAgICAoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEID09IHZpZF9jaC0+YnVmX2ZpZWxkKSkgeworCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuc3RvcmFnZV9tb2RlID0gMTsKKwl9IGVsc2UgeworCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuc3RvcmFnZV9tb2RlID0gMDsKKwl9CisKKwlpZiAoY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uZnJtX2ZtdCA9PSAxKSB7CisJCXZwaWZwYXJhbXMtPnZpZGVvX3BhcmFtcy5ocGl0Y2ggPQorCQkgICAgY29tbW9uLT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmU7CisJfSBlbHNlIHsKKwkJaWYgKChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgfHwKKwkJCShmaWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpKQorCQkJdnBpZnBhcmFtcy0+dmlkZW9fcGFyYW1zLmhwaXRjaCA9CisJCQkgICAgY29tbW9uLT5mbXQuZm10LnBpeC5ieXRlc3BlcmxpbmUgKiAyOworCQllbHNlCisJCQl2cGlmcGFyYW1zLT52aWRlb19wYXJhbXMuaHBpdGNoID0KKwkJCSAgICBjb21tb24tPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZTsKKwl9CisKKwljaC0+dnBpZnBhcmFtcy52aWRlb19wYXJhbXMuc3RkaWQgPSBjaC0+dnBpZnBhcmFtcy5zdGRfaW5mby5zdGRpZDsKK30KKworc3RhdGljIHZvaWQgdnBpZl9jb25maWdfZm9ybWF0KHN0cnVjdCBjaGFubmVsX29iaiAqY2gpCit7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfQU5ZOworCWlmIChjb25maWdfcGFyYW1zLm51bWJ1ZmZlcnNbY2gtPmNoYW5uZWxfaWRdID09IDApCisJCWNvbW1vbi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfVVNFUlBUUjsKKwllbHNlCisJCWNvbW1vbi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKworCWNvbW1vbi0+Zm10LmZtdC5waXguc2l6ZWltYWdlID0KKwkJCWNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKwljb21tb24tPmZtdC5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVVjQyMlA7CisJY29tbW9uLT5mbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworfQorCitzdGF0aWMgaW50IHZwaWZfY2hlY2tfZm9ybWF0KHN0cnVjdCBjaGFubmVsX29iaiAqY2gsCisJCQkgICAgIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCkKK3sKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkID0gcGl4Zm10LT5maWVsZDsKKwl1MzIgc2l6ZWltYWdlLCBocGl0Y2gsIHZwaXRjaDsKKworCWlmIChwaXhmbXQtPnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQKQorCQlnb3RvIGludmFsaWRfZm10X2V4aXQ7CisKKwlpZiAoIShWUElGX1ZBTElEX0ZJRUxEKGZpZWxkKSkpCisJCWdvdG8gaW52YWxpZF9mbXRfZXhpdDsKKworCWlmIChwaXhmbXQtPmJ5dGVzcGVybGluZSA8PSAwKQorCQlnb3RvIGludmFsaWRfcGl0Y2hfZXhpdDsKKworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSID09IGNvbW1vbi0+bWVtb3J5KQorCQlzaXplaW1hZ2UgPSBwaXhmbXQtPnNpemVpbWFnZTsKKwllbHNlCisJCXNpemVpbWFnZSA9IGNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXTsKKworCWlmICh2cGlmX2dldF9zdGRfaW5mbyhjaCkpIHsKKwkJdnBpZl9lcnIoIkVycm9yIGdldHRpbmcgdGhlIHN0YW5kYXJkIGluZm9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlocGl0Y2ggPSBwaXhmbXQtPmJ5dGVzcGVybGluZTsKKwl2cGl0Y2ggPSBzaXplaW1hZ2UgLyAoaHBpdGNoICogMik7CisKKwkvKiBDaGVjayBmb3IgdmFsaWQgdmFsdWUgb2YgcGl0Y2ggKi8KKwlpZiAoKGhwaXRjaCA8IGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLndpZHRoKSB8fAorCSAgICAodnBpdGNoIDwgY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uaGVpZ2h0KSkKKwkJZ290byBpbnZhbGlkX3BpdGNoX2V4aXQ7CisKKwkvKiBDaGVjayBmb3IgOCBieXRlIGFsaWdubWVudCAqLworCWlmICghSVNBTElHTkVEKGhwaXRjaCkpIHsKKwkJdnBpZl9lcnIoImludmFsaWQgcGl0Y2ggYWxpZ25tZW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBpeGZtdC0+d2lkdGggPSBjb21tb24tPmZtdC5mbXQucGl4LndpZHRoOworCXBpeGZtdC0+aGVpZ2h0ID0gY29tbW9uLT5mbXQuZm10LnBpeC5oZWlnaHQ7CisKKwlyZXR1cm4gMDsKKworaW52YWxpZF9mbXRfZXhpdDoKKwl2cGlmX2VycigiaW52YWxpZCBmaWVsZCBmb3JtYXRcbiIpOworCXJldHVybiAtRUlOVkFMOworCitpbnZhbGlkX3BpdGNoX2V4aXQ6CisJdnBpZl9lcnIoImludmFsaWQgcGl0Y2hcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCB2cGlmX2NvbmZpZ19hZGRyKHN0cnVjdCBjaGFubmVsX29iaiAqY2gsIGludCBtdXhtb2RlKQoreworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCWlmIChWUElGX0NIQU5ORUwzX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB7CisJCWNvbW1vbi0+c2V0X2FkZHIgPSBjaDNfc2V0X3ZpZGVvYnVmX2FkZHI7CisJfSBlbHNlIHsKKwkJaWYgKDIgPT0gbXV4bW9kZSkKKwkJCWNvbW1vbi0+c2V0X2FkZHIgPSBjaDJfc2V0X3ZpZGVvYnVmX2FkZHJfeWNfbm11eDsKKwkJZWxzZQorCQkJY29tbW9uLT5zZXRfYWRkciA9IGNoMl9zZXRfdmlkZW9idWZfYWRkcjsKKwl9Cit9CisKKy8qCisgKiB2cGlmX21tYXA6IEl0IGlzIHVzZWQgdG8gbWFwIGtlcm5lbCBzcGFjZSBidWZmZXJzIGludG8gdXNlciBzcGFjZXMKKyAqLworc3RhdGljIGludCB2cGlmX21tYXAoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmZmgtPmNoYW5uZWwtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcigmY29tbW9uLT5idWZmZXJfcXVldWUsIHZtYSk7Cit9CisKKy8qCisgKiB2cGlmX3BvbGw6IEl0IGlzIHVzZWQgZm9yIHNlbGVjdC9wb2xsIHN5c3RlbSBjYWxsCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdnBpZl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlcCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwlpZiAoY29tbW9uLT5zdGFydGVkKQorCQlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZXAsICZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgd2FpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwaWZfb3BlbjogSXQgY3JlYXRlcyBvYmplY3Qgb2YgZmlsZSBoYW5kbGUgc3RydWN0dXJlIGFuZCBzdG9yZXMgaXQgaW4KKyAqIHByaXZhdGVfZGF0YSBtZW1iZXIgb2YgZmlsZXBvaW50ZXIKKyAqLworc3RhdGljIGludCB2cGlmX29wZW4oc3RydWN0IGZpbGUgKmZpbGVwKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGVwKTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gTlVMTDsKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBOVUxMOworCisJY2ggPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgKi8KKwlmaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2cGlmX2ZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZoID09IE5VTEwpIHsKKwkJdnBpZl9lcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGUgaGFuZGxlIG9iamVjdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHN0b3JlIHBvaW50ZXIgdG8gZmggaW4gcHJpdmF0ZV9kYXRhIG1lbWJlciBvZiBmaWxlcCAqLworCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+Y2hhbm5lbCA9IGNoOworCWZoLT5pbml0aWFsaXplZCA9IDA7CisJaWYgKCFjaC0+aW5pdGlhbGl6ZWQpIHsKKwkJZmgtPmluaXRpYWxpemVkID0gMTsKKwkJY2gtPmluaXRpYWxpemVkID0gMTsKKwkJbWVtc2V0KCZjaC0+dnBpZnBhcmFtcywgMCwgc2l6ZW9mKGNoLT52cGlmcGFyYW1zKSk7CisJfQorCisJLyogSW5jcmVtZW50IGNoYW5uZWwgdXNycyBjb3VudGVyICovCisJYXRvbWljX2luYygmY2gtPnVzcnMpOworCS8qIFNldCBpb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdIG1lbWJlciB0byBmYWxzZSAqLworCWZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdID0gMDsKKwkvKiBJbml0aWFsaXplIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgdG8gZGVmYXVsdCBwcmlvcml0eSAqLworCWZoLT5wcmlvID0gVjRMMl9QUklPUklUWV9VTlNFVDsKKwl2NGwyX3ByaW9fb3BlbigmY2gtPnByaW8sICZmaC0+cHJpbyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwaWZfcmVsZWFzZTogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGJ1ZmZlciBxdWV1ZSwgZnJlZXMgdGhlIGJ1ZmZlcnMgYW5kCisgKiB0aGUgdnBpZiBmaWxlIGhhbmRsZQorICovCitzdGF0aWMgaW50IHZwaWZfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGlmIHRoaXMgaW5zdGFuY2UgaXMgZG9pbmcgSU8gKi8KKwlpZiAoZmgtPmlvX2FsbG93ZWRbVlBJRl9WSURFT19JTkRFWF0pIHsKKwkJLyogUmVzZXQgaW9fdXNycyBtZW1iZXIgb2YgY2hhbm5lbCBvYmplY3QgKi8KKwkJY29tbW9uLT5pb191c3JzID0gMDsKKwkJLyogRGlzYWJsZSBjaGFubmVsICovCisJCWlmIChWUElGX0NIQU5ORUwyX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKSB7CisJCQllbmFibGVfY2hhbm5lbDIoMCk7CisJCQljaGFubmVsMl9pbnRyX2VuYWJsZSgwKTsKKwkJfQorCQlpZiAoKFZQSUZfQ0hBTk5FTDNfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHx8CisJCSAgICAoMiA9PSBjb21tb24tPnN0YXJ0ZWQpKSB7CisJCQllbmFibGVfY2hhbm5lbDMoMCk7CisJCQljaGFubmVsM19pbnRyX2VuYWJsZSgwKTsKKwkJfQorCQljb21tb24tPnN0YXJ0ZWQgPSAwOworCQkvKiBGcmVlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCisJCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmY29tbW9uLT5idWZmZXJfcXVldWUpOworCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKKwkJY29tbW9uLT5udW1idWZmZXJzID0KKwkJICAgIGNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tjaC0+Y2hhbm5lbF9pZF07CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCisJLyogRGVjcmVtZW50IGNoYW5uZWwgdXNycyBjb3VudGVyICovCisJYXRvbWljX2RlYygmY2gtPnVzcnMpOworCS8qIElmIHRoaXMgZmlsZSBoYW5kbGUgaGFzIGluaXRpYWxpemUgZW5jb2RlciBkZXZpY2UsIHJlc2V0IGl0ICovCisJaWYgKGZoLT5pbml0aWFsaXplZCkKKwkJY2gtPmluaXRpYWxpemVkID0gMDsKKworCS8qIENsb3NlIHRoZSBwcmlvcml0eSAqLworCXY0bDJfcHJpb19jbG9zZSgmY2gtPnByaW8sICZmaC0+cHJpbyk7CisJZmlsZXAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJZmgtPmluaXRpYWxpemVkID0gMDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb25zIGltcGxlbWVudGluZyBpb2N0bHMgKi8KKworc3RhdGljIGludCB2cGlmX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IHZwaWZfZGlzcGxheV9jb25maWcgKmNvbmZpZyA9IHZwaWZfZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJY2FwLT52ZXJzaW9uID0gVlBJRl9ESVNQTEFZX1ZFUlNJT05fQ09ERTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAidnBpZiBkaXNwbGF5Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCAiUGxhdGZvcm0iLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCXN0cmxjcHkoY2FwLT5jYXJkLCBjb25maWctPmNhcmRfbmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9lbnVtX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQoreworCWlmIChmbXQtPmluZGV4ICE9IDApIHsKKwkJdnBpZl9lcnIoIkludmFsaWQgZm9ybWF0IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgZm9ybWF0ICovCisJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisJc3RyY3B5KGZtdC0+ZGVzY3JpcHRpb24sICJZQ2JDcjQ6MjoyIFlDIFBsYW5hciIpOworCWZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVWNDIyUDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwaWZfZ19mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwkvKiBDaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGJ1ZmZlciB0eXBlICovCisJaWYgKGNvbW1vbi0+Zm10LnR5cGUgIT0gZm10LT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAodnBpZl9nZXRfc3RkX2luZm8oY2gpKSB7CisJCXZwaWZfZXJyKCJFcnJvciBnZXR0aW5nIHRoZSBzdGFuZGFyZCBpbmZvXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKmZtdCA9IGNvbW1vbi0+Zm10OworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX3NfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQ7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICgoVlBJRl9DSEFOTkVMMl9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkKKwkgICAgfHwgKFZQSUZfQ0hBTk5FTDNfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpKSB7CisJCWlmICghZmgtPmluaXRpYWxpemVkKSB7CisJCQl2cGlmX2RiZygxLCBkZWJ1ZywgIkNoYW5uZWwgQnVzeVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJLyogQ2hlY2sgZm9yIHRoZSBwcmlvcml0eSAqLworCQlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJmNoLT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSByZXQpCisJCQlyZXR1cm4gcmV0OworCQlmaC0+aW5pdGlhbGl6ZWQgPSAxOworCX0KKworCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJTdHJlYW1pbmcgaW4gcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXBpeGZtdCA9ICZmbXQtPmZtdC5waXg7CisJLyogQ2hlY2sgZm9yIHZhbGlkIGZpZWxkIGZvcm1hdCAqLworCXJldCA9IHZwaWZfY2hlY2tfZm9ybWF0KGNoLCBwaXhmbXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBzdG9yZSB0aGUgcGl4IGZvcm1hdCBpbiB0aGUgY2hhbm5lbCBvYmplY3QgKi8KKwljb21tb24tPmZtdC5mbXQucGl4ID0gKnBpeGZtdDsKKwkvKiBzdG9yZSB0aGUgZm9ybWF0IGluIHRoZSBjaGFubmVsIG9iamVjdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljb21tb24tPmZtdCA9ICpmbXQ7CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl90cnlfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCA9ICZmbXQtPmZtdC5waXg7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSB2cGlmX2NoZWNrX2Zvcm1hdChjaCwgcGl4Zm10KTsKKwlpZiAocmV0KSB7CisJCSpwaXhmbXQgPSBjb21tb24tPmZtdC5mbXQucGl4OworCQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+d2lkdGggKiBwaXhmbXQtPmhlaWdodCAqIDI7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGlmX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxYnVmKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCXU4IGluZGV4ID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIFRoaXMgZmlsZSBoYW5kbGUgaGFzIG5vdCBpbml0aWFsaXplZCB0aGUgY2hhbm5lbCwKKwkgICBJdCBpcyBub3QgYWxsb3dlZCB0byBkbyBzZXR0aW5ncyAqLworCWlmICgoVlBJRl9DSEFOTkVMMl9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkKKwkgICAgfHwgKFZQSUZfQ0hBTk5FTDNfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpKSB7CisJCWlmICghZmgtPmluaXRpYWxpemVkKSB7CisJCQl2cGlmX2VycigiQ2hhbm5lbCBCdXN5XG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgIT0gcmVxYnVmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZGV4ID0gVlBJRl9WSURFT19JTkRFWDsKKworCWNvbW1vbiA9ICZjaC0+Y29tbW9uW2luZGV4XTsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb21tb24tPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNvbW1vbi0+Zm10LnR5cGUgIT0gcmVxYnVmLT50eXBlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcmVxYnVmX2V4aXQ7CisJfQorCisJaWYgKDAgIT0gY29tbW9uLT5pb191c3JzKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byByZXFidWZfZXhpdDsKKwl9CisKKwlpZiAocmVxYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKSB7CisJCWlmIChjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkID09IFY0TDJfRklFTERfQU5ZKQorCQkJZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCWVsc2UKKwkJCWZpZWxkID0gY29tbW9uLT5mbXQuZm10LnBpeC5maWVsZDsKKwl9IGVsc2UgeworCQlmaWVsZCA9IFY0TDJfVkJJX0lOVEVSTEFDRUQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB2aWRlb2J1ZiBxdWV1ZSBhcyBwZXIgdGhlIGJ1ZmZlciB0eXBlICovCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwKKwkJCQkJICAgICZ2aWRlb19xb3BzLCBOVUxMLAorCQkJCQkgICAgJmNvbW1vbi0+aXJxbG9jaywKKwkJCQkJICAgIHJlcWJ1Zi0+dHlwZSwgZmllbGQsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksIGZoKTsKKworCS8qIFNldCBpbyBhbGxvd2VkIG1lbWJlciBvZiBmaWxlIGhhbmRsZSB0byBUUlVFICovCisJZmgtPmlvX2FsbG93ZWRbaW5kZXhdID0gMTsKKwkvKiBJbmNyZW1lbnQgaW8gdXNycyBtZW1iZXIgb2YgY2hhbm5lbCBvYmplY3QgdG8gMSAqLworCWNvbW1vbi0+aW9fdXNycyA9IDE7CisJLyogU3RvcmUgdHlwZSBvZiBtZW1vcnkgcmVxdWVzdGVkIGluIGNoYW5uZWwgb2JqZWN0ICovCisJY29tbW9uLT5tZW1vcnkgPSByZXFidWYtPm1lbW9yeTsKKwlJTklUX0xJU1RfSEVBRCgmY29tbW9uLT5kbWFfcXVldWUpOworCisJLyogQWxsb2NhdGUgYnVmZmVycyAqLworCXJldCA9IHZpZGVvYnVmX3JlcWJ1ZnMoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLCByZXFidWYpOworCityZXFidWZfZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGlmX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqdGJ1ZikKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisKKwlpZiAoY29tbW9uLT5mbXQudHlwZSAhPSB0YnVmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmY29tbW9uLT5idWZmZXJfcXVldWUsIHRidWYpOworfQorCitzdGF0aWMgaW50IHZwaWZfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJc3RydWN0IHY0bDJfYnVmZmVyIHRidWYgPSAqYnVmOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1ZjE7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJaWYgKGNvbW1vbi0+Zm10LnR5cGUgIT0gdGJ1Zi50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZmgtPmlvX2FsbG93ZWRbVlBJRl9WSURFT19JTkRFWF0pIHsKKwkJdnBpZl9lcnIoImZoLT5pb19hbGxvd2VkXG4iKTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCisJaWYgKCEobGlzdF9lbXB0eSgmY29tbW9uLT5kbWFfcXVldWUpKSB8fAorCSAgICAoY29tbW9uLT5jdXJfZnJtICE9IGNvbW1vbi0+bmV4dF9mcm0pIHx8CisJICAgICEoY29tbW9uLT5zdGFydGVkKSB8fAorCSAgICAoY29tbW9uLT5zdGFydGVkICYmICgwID09IGNoLT5maWVsZF9pZCkpKQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmY29tbW9uLT5idWZmZXJfcXVldWUsIGJ1Zik7CisKKwkvKiBidWZmZXJxdWV1ZSBpcyBlbXB0eSBzdG9yZSBidWZmZXIgYWRkcmVzcyBpbiBWUElGIHJlZ2lzdGVycyAqLworCW11dGV4X2xvY2soJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLnZiX2xvY2spOworCWJ1ZjEgPSBjb21tb24tPmJ1ZmZlcl9xdWV1ZS5idWZzW3RidWYuaW5kZXhdOworCWlmIChidWYxLT5tZW1vcnkgIT0gdGJ1Zi5tZW1vcnkpIHsKKwkJdnBpZl9lcnIoImludmFsaWQgYnVmZmVyIHR5cGVcbiIpOworCQlnb3RvIHFidWZfZXhpdDsKKwl9CisKKwlpZiAoKGJ1ZjEtPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgfHwKKwkgICAgKGJ1ZjEtPnN0YXRlID09IFZJREVPQlVGX0FDVElWRSkpIHsKKwkJdnBpZl9lcnIoImludmFsaWQgc3RhdGVcbiIpOworCQlnb3RvIHFidWZfZXhpdDsKKwl9CisKKwlzd2l0Y2ggKGJ1ZjEtPm1lbW9yeSkgeworCWNhc2UgVjRMMl9NRU1PUllfTU1BUDoKKwkJaWYgKGJ1ZjEtPmJhZGRyID09IDApCisJCQlnb3RvIHFidWZfZXhpdDsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfTUVNT1JZX1VTRVJQVFI6CisJCWlmICh0YnVmLmxlbmd0aCA8IGJ1ZjEtPmJzaXplKQorCQkJZ290byBxYnVmX2V4aXQ7CisKKwkJaWYgKChWSURFT0JVRl9ORUVEU19JTklUICE9IGJ1ZjEtPnN0YXRlKQorCQkJICAgICYmIChidWYxLT5iYWRkciAhPSB0YnVmLm0udXNlcnB0cikpCisJCQl2cGlmX2J1ZmZlcl9yZWxlYXNlKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgYnVmMSk7CisJCQlidWYxLT5iYWRkciA9IHRidWYubS51c2VycHRyOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gcWJ1Zl9leGl0OworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXQgPSB2cGlmX2J1ZmZlcl9wcmVwYXJlKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgYnVmMSwKKwkJCQkJY29tbW9uLT5idWZmZXJfcXVldWUuZmllbGQpOworCWlmIChyZXQgPCAwKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJZ290byBxYnVmX2V4aXQ7CisJfQorCisJYnVmMS0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJYWRkciA9IGJ1ZjEtPmJvZmY7CisJY29tbW9uLT5uZXh0X2ZybSA9IGJ1ZjE7CisJaWYgKHRidWYudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUKSB7CisJCWNvbW1vbi0+c2V0X2FkZHIoKGFkZHIgKyBjb21tb24tPnl0b3Bfb2ZmKSwKKwkJCQkgKGFkZHIgKyBjb21tb24tPnlidG1fb2ZmKSwKKwkJCQkgKGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmKSwKKwkJCQkgKGFkZHIgKyBjb21tb24tPmNidG1fb2ZmKSk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmJ1ZjEtPnN0cmVhbSwgJmNvbW1vbi0+YnVmZmVyX3F1ZXVlLnN0cmVhbSk7CisJbXV0ZXhfdW5sb2NrKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZS52Yl9sb2NrKTsKKwlyZXR1cm4gMDsKKworcWJ1Zl9leGl0OgorCW11dGV4X3VubG9jaygmY29tbW9uLT5idWZmZXJfcXVldWUudmJfbG9jayk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJaW50IHJldCA9IDA7CisKKwlpZiAoISgqc3RkX2lkICYgRE02NDZYX1Y0TDJfU1REKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29tbW9uLT5zdGFydGVkKSB7CisJCXZwaWZfZXJyKCJzdHJlYW1pbmcgaW4gcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIENhbGwgZW5jb2RlciBzdWJkZXZpY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBzdGFuZGFyZCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljaC0+dmlkZW8uc3RkaWQgPSAqc3RkX2lkOworCS8qIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YW5kYXJkICovCisJaWYgKHZwaWZfZ2V0X3N0ZF9pbmZvKGNoKSkgeworCQl2cGlmX2VycigiRXJyb3IgZ2V0dGluZyB0aGUgc3RhbmRhcmQgaW5mb1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8ud2lkdGggKgorCQljaC0+dnBpZnBhcmFtcy5zdGRfaW5mby5oZWlnaHQgKiAyKSA+CisJCWNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW2NoLT5jaGFubmVsX2lkXSkgeworCQl2cGlmX2VycigiaW52YWxpZCBzdGQgZm9yIHRoaXMgc2l6ZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gc19zdGRfZXhpdDsKKwl9CisKKwljb21tb24tPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGNvbW1vbi0+Zm10LmZtdC5waXgud2lkdGg7CisJLyogQ29uZmlndXJlIHRoZSBkZWZhdWx0IGZvcm1hdCBpbmZvcm1hdGlvbiAqLworCXZwaWZfY29uZmlnX2Zvcm1hdChjaCk7CisKKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmdnBpZl9vYmoudjRsMl9kZXYsIDEsIHZpZGVvLAorCQkJCQkJc19zdGRfb3V0cHV0LCAqc3RkX2lkKTsKKwlpZiAocmV0IDwgMCkgeworCQl2cGlmX2VycigiRmFpbGVkIHRvIHNldCBvdXRwdXQgc3RhbmRhcmRcbiIpOworCQlnb3RvIHNfc3RkX2V4aXQ7CisJfQorCisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJnZwaWZfb2JqLnY0bDJfZGV2LCAxLCBjb3JlLAorCQkJCQkJCXNfc3RkLCAqc3RkX2lkKTsKKwlpZiAocmV0IDwgMCkKKwkJdnBpZl9lcnIoIkZhaWxlZCB0byBzZXQgc3RhbmRhcmQgZm9yIHN1YiBkZXZpY2VzXG4iKTsKKworc19zdGRfZXhpdDoKKwltdXRleF91bmxvY2soJmNvbW1vbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGlmX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCisJKnN0ZCA9IGNoLT52aWRlby5zdGRpZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IHZwaWZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoID0gZmgtPmNoYW5uZWw7CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZjb21tb24tPmJ1ZmZlcl9xdWV1ZSwgcCwKKwkJCQkJKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSk7Cit9CisKK3N0YXRpYyBpbnQgdnBpZl9zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQllbnVtIHY0bDJfYnVmX3R5cGUgYnVmdHlwZSkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY29tbW9uX29iaiAqY29tbW9uID0gJmNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF07CisJc3RydWN0IGNoYW5uZWxfb2JqICpvdGhfY2ggPSB2cGlmX29iai5kZXZbIWNoLT5jaGFubmVsX2lkXTsKKwlzdHJ1Y3QgdnBpZl9wYXJhbXMgKnZwaWYgPSAmY2gtPnZwaWZwYXJhbXM7CisJc3RydWN0IHZwaWZfZGlzcGxheV9jb25maWcgKnZwaWZfY29uZmlnX2RhdGEgPQorCQkJCQl2cGlmX2Rldi0+cGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKGJ1ZnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHsKKwkJdnBpZl9lcnIoImJ1ZmZlciB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWZoLT5pb19hbGxvd2VkW1ZQSUZfVklERU9fSU5ERVhdKSB7CisJCXZwaWZfZXJyKCJmaC0+aW9fYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCS8qIElmIFN0cmVhbWluZyBpcyBhbHJlYWR5IHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9lcnIoImNoYW5uZWwtPnN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICgoY2gtPmNoYW5uZWxfaWQgPT0gVlBJRl9DSEFOTkVMMl9WSURFTworCQkmJiBvdGhfY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS5zdGFydGVkICYmCisJCWNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLnljbXV4X21vZGUgPT0gMCkKKwkJfHwgKChjaC0+Y2hhbm5lbF9pZCA9PSBWUElGX0NIQU5ORUwzX1ZJREVPKQorCQkmJiAoMiA9PSBvdGhfY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS5zdGFydGVkKSkpIHsKKwkJdnBpZl9lcnIoIm90aGVyIGNoYW5uZWwgaXMgdXNpbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldCA9IHZwaWZfY2hlY2tfZm9ybWF0KGNoLCAmY29tbW9uLT5mbXQuZm10LnBpeCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBDYWxsIHZpZGVvYnVmX3N0cmVhbW9uIHRvIHN0YXJ0IHN0cmVhbWluZyAgaW4gdmlkZW9idWYgKi8KKwlyZXQgPSB2aWRlb2J1Zl9zdHJlYW1vbigmY29tbW9uLT5idWZmZXJfcXVldWUpOworCWlmIChyZXQgPCAwKSB7CisJCXZwaWZfZXJyKCJ2aWRlb2J1Zl9zdHJlYW1vblxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIElmIGJ1ZmZlciBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIGVycm9yICovCisJaWYgKGxpc3RfZW1wdHkoJmNvbW1vbi0+ZG1hX3F1ZXVlKSkgeworCQl2cGlmX2VycigiYnVmZmVyIHF1ZXVlIGlzIGVtcHR5XG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBzdHJlYW1vbl9leGl0OworCX0KKworCS8qIEdldCB0aGUgbmV4dCBmcmFtZSBmcm9tIHRoZSBidWZmZXIgcXVldWUgKi8KKwljb21tb24tPm5leHRfZnJtID0gY29tbW9uLT5jdXJfZnJtID0KKwkJCSAgICBsaXN0X2VudHJ5KGNvbW1vbi0+ZG1hX3F1ZXVlLm5leHQsCisJCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHF1ZXVlKTsKKworCWxpc3RfZGVsKCZjb21tb24tPmN1cl9mcm0tPnF1ZXVlKTsKKwkvKiBNYXJrIHN0YXRlIG9mIHRoZSBjdXJyZW50IGZyYW1lIHRvIGFjdGl2ZSAqLworCWNvbW1vbi0+Y3VyX2ZybS0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisKKwkvKiBJbml0aWFsaXplIGZpZWxkX2lkIGFuZCBzdGFydGVkIG1lbWJlciAqLworCWNoLT5maWVsZF9pZCA9IDA7CisJY29tbW9uLT5zdGFydGVkID0gMTsKKwlpZiAoYnVmdHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgeworCQlhZGRyID0gY29tbW9uLT5jdXJfZnJtLT5ib2ZmOworCQkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBmb3IgWSBhbmQgQyBkYXRhICBpbiB0aGUgYnVmZmVyICovCisJCXZwaWZfY2FsY3VsYXRlX29mZnNldHMoY2gpOworCisJCWlmICgoY2gtPnZwaWZwYXJhbXMuc3RkX2luZm8uZnJtX2ZtdCAmJgorCQkJKChjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkICE9IFY0TDJfRklFTERfTk9ORSkKKwkJCSYmIChjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkICE9IFY0TDJfRklFTERfQU5ZKSkpCisJCQl8fCAoIWNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLmZybV9mbXQKKwkJCSYmIChjb21tb24tPmZtdC5mbXQucGl4LmZpZWxkID09IFY0TDJfRklFTERfTk9ORSkpKSB7CisJCQl2cGlmX2VycigiY29uZmxpY3QgaW4gZmllbGQgZm9ybWF0IGFuZCBzdGQgZm9ybWF0XG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHN0cmVhbW9uX2V4aXQ7CisJCX0KKworCQkvKiBjbG9jayBzZXR0aW5ncyAqLworCQlyZXQgPQorCQkgdnBpZl9jb25maWdfZGF0YS0+c2V0X2Nsb2NrKGNoLT52cGlmcGFyYW1zLnN0ZF9pbmZvLnljbXV4X21vZGUsCisJCQkJCQljaC0+dnBpZnBhcmFtcy5zdGRfaW5mby5oZF9zZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl2cGlmX2VycigiY2FuJ3Qgc2V0IGNsb2NrXG4iKTsKKwkJCWdvdG8gc3RyZWFtb25fZXhpdDsKKwkJfQorCisJCS8qIHNldCB0aGUgcGFyYW1ldGVycyBhbmQgYWRkcmVzc2VzICovCisJCXJldCA9IHZwaWZfc2V0X3ZpZGVvX3BhcmFtcyh2cGlmLCBjaC0+Y2hhbm5lbF9pZCArIDIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gc3RyZWFtb25fZXhpdDsKKworCQljb21tb24tPnN0YXJ0ZWQgPSByZXQ7CisJCXZwaWZfY29uZmlnX2FkZHIoY2gsIHJldCk7CisJCWNvbW1vbi0+c2V0X2FkZHIoKGFkZHIgKyBjb21tb24tPnl0b3Bfb2ZmKSwKKwkJCQkgKGFkZHIgKyBjb21tb24tPnlidG1fb2ZmKSwKKwkJCQkgKGFkZHIgKyBjb21tb24tPmN0b3Bfb2ZmKSwKKwkJCQkgKGFkZHIgKyBjb21tb24tPmNidG1fb2ZmKSk7CisKKwkJLyogU2V0IGludGVycnVwdCBmb3IgYm90aCB0aGUgZmllbGRzIGluIFZQSUYKKwkJICAgUmVnaXN0ZXIgZW5hYmxlIGNoYW5uZWwgaW4gVlBJRiByZWdpc3RlciAqLworCQlpZiAoVlBJRl9DSEFOTkVMMl9WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgeworCQkJY2hhbm5lbDJfaW50cl9hc3NlcnQoKTsKKwkJCWNoYW5uZWwyX2ludHJfZW5hYmxlKDEpOworCQkJZW5hYmxlX2NoYW5uZWwyKDEpOworCQl9CisKKwkJaWYgKChWUElGX0NIQU5ORUwzX1ZJREVPID09IGNoLT5jaGFubmVsX2lkKQorCQkJfHwgKGNvbW1vbi0+c3RhcnRlZCA9PSAyKSkgeworCQkJY2hhbm5lbDNfaW50cl9hc3NlcnQoKTsKKwkJCWNoYW5uZWwzX2ludHJfZW5hYmxlKDEpOworCQkJZW5hYmxlX2NoYW5uZWwzKDEpOworCQl9CisJCWNoYW5uZWxfZmlyc3RfaW50W1ZQSUZfVklERU9fSU5ERVhdW2NoLT5jaGFubmVsX2lkXSA9IDE7CisJfQorCitzdHJlYW1vbl9leGl0OgorCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwaWZfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSBidWZ0eXBlKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKworCWlmIChidWZ0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKSB7CisJCXZwaWZfZXJyKCJidWZmZXIgdHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFmaC0+aW9fYWxsb3dlZFtWUElGX1ZJREVPX0lOREVYXSkgeworCQl2cGlmX2VycigiZmgtPmlvX2FsbG93ZWRcbiIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlpZiAoIWNvbW1vbi0+c3RhcnRlZCkgeworCQl2cGlmX2VycigiY2hhbm5lbC0+c3RhcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvbW1vbi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoYnVmdHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgeworCQkvKiBkaXNhYmxlIGNoYW5uZWwgKi8KKwkJaWYgKFZQSUZfQ0hBTk5FTDJfVklERU8gPT0gY2gtPmNoYW5uZWxfaWQpIHsKKwkJCWVuYWJsZV9jaGFubmVsMigwKTsKKwkJCWNoYW5uZWwyX2ludHJfZW5hYmxlKDApOworCQl9CisJCWlmICgoVlBJRl9DSEFOTkVMM19WSURFTyA9PSBjaC0+Y2hhbm5lbF9pZCkgfHwKKwkJCQkJKDIgPT0gY29tbW9uLT5zdGFydGVkKSkgeworCQkJZW5hYmxlX2NoYW5uZWwzKDApOworCQkJY2hhbm5lbDNfaW50cl9lbmFibGUoMCk7CisJCX0KKwl9CisKKwljb21tb24tPnN0YXJ0ZWQgPSAwOworCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmNvbW1vbi0+YnVmZmVyX3F1ZXVlKTsKK30KKworc3RhdGljIGludCB2cGlmX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb24gPSAmY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXTsKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgIT0gY3JvcC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcm9wLT5ib3VuZHMubGVmdCA9IGNyb3AtPmJvdW5kcy50b3AgPSAwOworCWNyb3AtPmRlZnJlY3QubGVmdCA9IGNyb3AtPmRlZnJlY3QudG9wID0gMDsKKwljcm9wLT5kZWZyZWN0LmhlaWdodCA9IGNyb3AtPmJvdW5kcy5oZWlnaHQgPSBjb21tb24tPmhlaWdodDsKKwljcm9wLT5kZWZyZWN0LndpZHRoID0gY3JvcC0+Ym91bmRzLndpZHRoID0gY29tbW9uLT53aWR0aDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwaWZfZW51bV9vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX291dHB1dCAqb3V0cHV0KQoreworCisJc3RydWN0IHZwaWZfZGlzcGxheV9jb25maWcgKmNvbmZpZyA9IHZwaWZfZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKG91dHB1dC0+aW5kZXggPj0gY29uZmlnLT5vdXRwdXRfY291bnQpIHsKKwkJdnBpZl9kYmcoMSwgZGVidWcsICJJbnZhbGlkIG91dHB1dCBpbmRleFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN0cmNweShvdXRwdXQtPm5hbWUsIGNvbmZpZy0+b3V0cHV0W291dHB1dC0+aW5kZXhdKTsKKwlvdXRwdXQtPnR5cGUgPSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPRzsKKwlvdXRwdXQtPnN0ZCA9IERNNjQ2WF9WNEwyX1NURDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwaWZfc19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCXN0cnVjdCB2aWRlb19vYmogKnZpZF9jaCA9ICZjaC0+dmlkZW87CisJc3RydWN0IGNvbW1vbl9vYmogKmNvbW1vbiA9ICZjaC0+Y29tbW9uW1ZQSUZfVklERU9fSU5ERVhdOworCWludCByZXQgPSAwOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29tbW9uLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChjb21tb24tPnN0YXJ0ZWQpIHsKKwkJdnBpZl9lcnIoIlN0cmVhbWluZyBpbiBwcm9ncmVzc1xuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBzX291dHB1dF9leGl0OworCX0KKworCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGlmX29iai52NGwyX2RldiwgMSwgdmlkZW8sCisJCQkJCQkJc19yb3V0aW5nLCAwLCBpLCAwKTsKKworCWlmIChyZXQgPCAwKQorCQl2cGlmX2VycigiRmFpbGVkIHRvIHNldCBvdXRwdXQgc3RhbmRhcmRcbiIpOworCisJdmlkX2NoLT5vdXRwdXRfaWQgPSBpOworCitzX291dHB1dF9leGl0OgorCW11dGV4X3VubG9jaygmY29tbW9uLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwaWZfZ19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3QgdnBpZl9maCAqZmggPSBwcml2OworCXN0cnVjdCBjaGFubmVsX29iaiAqY2ggPSBmaC0+Y2hhbm5lbDsKKwlzdHJ1Y3QgdmlkZW9fb2JqICp2aWRfY2ggPSAmY2gtPnZpZGVvOworCisJKmkgPSB2aWRfY2gtPm91dHB1dF9pZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwaWZfZ19wcmlvcml0eShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX3ByaW9yaXR5ICpwKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCisJKnAgPSB2NGwyX3ByaW9fbWF4KCZjaC0+cHJpbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGlmX3NfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9wcmlvcml0eSBwKQoreworCXN0cnVjdCB2cGlmX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaCA9IGZoLT5jaGFubmVsOworCisJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmNoLT5wcmlvLCAmZmgtPnByaW8sIHApOworfQorCisvKiB2cGlmIGRpc3BsYXkgaW9jdGwgb3BlcmF0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2cGlmX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAJPSB2cGlmX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ19wcmlvcml0eQkJPSB2cGlmX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5CQk9IHZwaWZfc19wcmlvcml0eSwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9vdXQJPSB2cGlmX2VudW1fZm10X3ZpZF9vdXQsCisJLnZpZGlvY19nX2ZtdF92aWRfb3V0ICAJCT0gdnBpZl9nX2ZtdF92aWRfb3V0LAorCS52aWRpb2Nfc19mbXRfdmlkX291dCAgIAk9IHZwaWZfc19mbXRfdmlkX291dCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX291dCAJPSB2cGlmX3RyeV9mbXRfdmlkX291dCwKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAJPSB2cGlmX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgCT0gdnBpZl9xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgICAgICAgICAgICAJPSB2cGlmX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgCT0gdnBpZl9kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uICAgICAgICAJPSB2cGlmX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgIAk9IHZwaWZfc3RyZWFtb2ZmLAorCS52aWRpb2Nfc19zdGQgICAgICAgICAgIAk9IHZwaWZfc19zdGQsCisJLnZpZGlvY19nX3N0ZAkJCT0gdnBpZl9nX3N0ZCwKKwkudmlkaW9jX2VudW1fb3V0cHV0CQk9IHZwaWZfZW51bV9vdXRwdXQsCisJLnZpZGlvY19zX291dHB1dAkJPSB2cGlmX3Nfb3V0cHV0LAorCS52aWRpb2NfZ19vdXRwdXQJCT0gdnBpZl9nX291dHB1dCwKKwkudmlkaW9jX2Nyb3BjYXAgICAgICAgICAJPSB2cGlmX2Nyb3BjYXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZwaWZfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdnBpZl9vcGVuLAorCS5yZWxlYXNlCT0gdnBpZl9yZWxlYXNlLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCisJLm1tYXAJCT0gdnBpZl9tbWFwLAorCS5wb2xsCQk9IHZwaWZfcG9sbAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdnBpZl92aWRlb190ZW1wbGF0ZSA9IHsKKwkubmFtZQkJPSAidnBpZiIsCisJLmZvcHMJCT0gJnZwaWZfZm9wcywKKwkubWlub3IJCT0gLTEsCisJLmlvY3RsX29wcwk9ICZ2cGlmX2lvY3RsX29wcywKKwkudHZub3Jtcwk9IERNNjQ2WF9WNEwyX1NURCwKKwkuY3VycmVudF9ub3JtCT0gVjRMMl9TVERfNjI1XzUwLAorCit9OworCisvKkNvbmZpZ3VyZSB0aGUgY2hhbm5lbHMsIGJ1ZmZlciBzaXplaSwgcmVxdWVzdCBpcnEgKi8KK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV92cGlmKHZvaWQpCit7CisJaW50IGZyZWVfY2hhbm5lbF9vYmplY3RzX2luZGV4OworCWludCBmcmVlX2J1ZmZlcl9jaGFubmVsX2luZGV4OworCWludCBmcmVlX2J1ZmZlcl9pbmRleDsKKwlpbnQgZXJyID0gMCwgaSwgajsKKworCS8qIERlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMgc2hvdWxkIGJlIDMgKi8KKwlpZiAoKGNoMl9udW1idWZmZXJzID4gMCkgJiYKKwkgICAgKGNoMl9udW1idWZmZXJzIDwgY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVycykpCisJCWNoMl9udW1idWZmZXJzID0gY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVyczsKKwlpZiAoKGNoM19udW1idWZmZXJzID4gMCkgJiYKKwkgICAgKGNoM19udW1idWZmZXJzIDwgY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVycykpCisJCWNoM19udW1idWZmZXJzID0gY29uZmlnX3BhcmFtcy5taW5fbnVtYnVmZmVyczsKKworCS8qIFNldCBidWZmZXIgc2l6ZSB0byBtaW4gYnVmZmVycyBzaXplIGlmIGludmFsaWQgYnVmZmVyIHNpemUgaXMKKwkgKiBnaXZlbiAqLworCWlmIChjaDJfYnVmc2l6ZSA8IGNvbmZpZ19wYXJhbXMubWluX2J1ZnNpemVbVlBJRl9DSEFOTkVMMl9WSURFT10pCisJCWNoMl9idWZzaXplID0KKwkJICAgIGNvbmZpZ19wYXJhbXMubWluX2J1ZnNpemVbVlBJRl9DSEFOTkVMMl9WSURFT107CisJaWYgKGNoM19idWZzaXplIDwgY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZVtWUElGX0NIQU5ORUwzX1ZJREVPXSkKKwkJY2gzX2J1ZnNpemUgPQorCQkgICAgY29uZmlnX3BhcmFtcy5taW5fYnVmc2l6ZVtWUElGX0NIQU5ORUwzX1ZJREVPXTsKKworCWNvbmZpZ19wYXJhbXMubnVtYnVmZmVyc1tWUElGX0NIQU5ORUwyX1ZJREVPXSA9IGNoMl9udW1idWZmZXJzOworCisJaWYgKGNoMl9udW1idWZmZXJzKSB7CisJCWNvbmZpZ19wYXJhbXMuY2hhbm5lbF9idWZzaXplW1ZQSUZfQ0hBTk5FTDJfVklERU9dID0KKwkJCQkJCQljaDJfYnVmc2l6ZTsKKwl9CisJY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW1ZQSUZfQ0hBTk5FTDNfVklERU9dID0gY2gzX251bWJ1ZmZlcnM7CisKKwlpZiAoY2gzX251bWJ1ZmZlcnMpIHsKKwkJY29uZmlnX3BhcmFtcy5jaGFubmVsX2J1ZnNpemVbVlBJRl9DSEFOTkVMM19WSURFT10gPQorCQkJCQkJCWNoM19idWZzaXplOworCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc2l4IGNoYW5uZWwgb2JqZWN0cyAqLworCWZvciAoaSA9IDA7IGkgPCBWUElGX0RJU1BMQVlfTUFYX0RFVklDRVM7IGkrKykgeworCQl2cGlmX29iai5kZXZbaV0gPQorCQkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IGNoYW5uZWxfb2JqKSwgR0ZQX0tFUk5FTCk7CisJCS8qIElmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm4gZXJyb3IgKi8KKwkJaWYgKCF2cGlmX29iai5kZXZbaV0pIHsKKwkJCWZyZWVfY2hhbm5lbF9vYmplY3RzX2luZGV4ID0gaTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIHZwaWZfaW5pdF9mcmVlX2NoYW5uZWxfb2JqZWN0czsKKwkJfQorCX0KKworCWZyZWVfY2hhbm5lbF9vYmplY3RzX2luZGV4ID0gVlBJRl9ESVNQTEFZX01BWF9ERVZJQ0VTOworCWZyZWVfYnVmZmVyX2NoYW5uZWxfaW5kZXggPSBWUElGX0RJU1BMQVlfTlVNX0NIQU5ORUxTOworCWZyZWVfYnVmZmVyX2luZGV4ID0gY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW2kgLSAxXTsKKworCXJldHVybiAwOworCit2cGlmX2luaXRfZnJlZV9jaGFubmVsX29iamVjdHM6CisJZm9yIChqID0gMDsgaiA8IGZyZWVfY2hhbm5lbF9vYmplY3RzX2luZGV4OyBqKyspCisJCWtmcmVlKHZwaWZfb2JqLmRldltqXSk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIHZwaWZfcHJvYmU6IFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBkZXZpY2UgZW50cmllcyBieSByZWdpc3RlciBpdHNlbGYgdG8gdGhlCisgKiBWNEwyIGRyaXZlciBhbmQgaW5pdGlhbGl6ZXMgZmllbGRzIG9mIGVhY2ggY2hhbm5lbCBvYmplY3RzCisgKi8KK3N0YXRpYyBfX2luaXQgaW50IHZwaWZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdnBpZl9zdWJkZXZfaW5mbyAqc3ViZGV2ZGF0YTsKKwlzdHJ1Y3QgdnBpZl9kaXNwbGF5X2NvbmZpZyAqY29uZmlnOworCWludCBpLCBqID0gMCwgaywgcSwgbSwgZXJyID0gMDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXN0cnVjdCB2cGlmX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CisJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHN1YmRldl9jb3VudDsKKworCXZwaWZfZGV2ID0gJnBkZXYtPmRldjsKKworCWVyciA9IGluaXRpYWxpemVfdnBpZigpOworCisJaWYgKGVycikgeworCQl2NGwyX2Vycih2cGlmX2Rldi0+ZHJpdmVyLCAiRXJyb3IgaW5pdGlhbGl6aW5nIHZwaWZcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKHZwaWZfZGV2LCAmdnBpZl9vYmoudjRsMl9kZXYpOworCWlmIChlcnIpIHsKKwkJdjRsMl9lcnIodnBpZl9kZXYtPmRyaXZlciwgIkVycm9yIHJlZ2lzdGVyaW5nIHY0bDIgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlrID0gMDsKKwl3aGlsZSAoKHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgaykpKSB7CisJCWZvciAoaSA9IHJlcy0+c3RhcnQ7IGkgPD0gcmVzLT5lbmQ7IGkrKykgeworCQkJaWYgKHJlcXVlc3RfaXJxKGksIHZwaWZfY2hhbm5lbF9pc3IsIElSUUZfRElTQUJMRUQsCisJCQkJCSJETTY0NnhfRGlzcGxheSIsCisJCQkJKHZvaWQgKikoJnZwaWZfb2JqLmRldltrXS0+Y2hhbm5lbF9pZCkpKSB7CisJCQkJZXJyID0gLUVCVVNZOworCQkJCWdvdG8gdnBpZl9pbnRfZXJyOworCQkJfQorCQl9CisJCWsrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlBJRl9ESVNQTEFZX01BWF9ERVZJQ0VTOyBpKyspIHsKKworCQkvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgb2JqZWN0ICovCisJCWNoID0gdnBpZl9vYmouZGV2W2ldOworCisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmlkZW8gZGV2aWNlICovCisJCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCQlpZiAodmZkID09IE5VTEwpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCQljaCA9IHZwaWZfb2JqLmRldltqXTsKKwkJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjaC0+dmlkZW9fZGV2KTsKKwkJCX0KKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIHZwaWZfaW50X2VycjsKKwkJfQorCisJCS8qIEluaXRpYWxpemUgZmllbGQgb2YgdmlkZW8gZGV2aWNlICovCisJCSp2ZmQgPSB2cGlmX3ZpZGVvX3RlbXBsYXRlOworCQl2ZmQtPnY0bDJfZGV2ID0gJnZwaWZfb2JqLnY0bDJfZGV2OworCQl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwkJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwKKwkJCSAiRE02NDZ4X1ZQSUZEaXNwbGF5X0RSSVZFUl9WJWQuJWQuJWQiLAorCQkJIChWUElGX0RJU1BMQVlfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCisJCQkgKFZQSUZfRElTUExBWV9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLAorCQkJIChWUElGX0RJU1BMQVlfVkVSU0lPTl9DT0RFKSAmIDB4ZmYpOworCisJCS8qIFNldCB2aWRlb19kZXYgdG8gdGhlIHZpZGVvIGRldmljZSAqLworCQljaC0+dmlkZW9fZGV2ID0gdmZkOworCX0KKworCWZvciAoaiA9IDA7IGogPCBWUElGX0RJU1BMQVlfTUFYX0RFVklDRVM7IGorKykgeworCQljaCA9IHZwaWZfb2JqLmRldltqXTsKKwkJLyogSW5pdGlhbGl6ZSBmaWVsZCBvZiB0aGUgY2hhbm5lbCBvYmplY3RzICovCisJCWF0b21pY19zZXQoJmNoLT51c3JzLCAwKTsKKwkJZm9yIChrID0gMDsgayA8IFZQSUZfTlVNT0JKRUNUUzsgaysrKSB7CisJCQljaC0+Y29tbW9uW2tdLm51bWJ1ZmZlcnMgPSAwOworCQkJY29tbW9uID0gJmNoLT5jb21tb25ba107CisJCQljb21tb24tPmlvX3VzcnMgPSAwOworCQkJY29tbW9uLT5zdGFydGVkID0gMDsKKwkJCXNwaW5fbG9ja19pbml0KCZjb21tb24tPmlycWxvY2spOworCQkJbXV0ZXhfaW5pdCgmY29tbW9uLT5sb2NrKTsKKwkJCWNvbW1vbi0+bnVtYnVmZmVycyA9IDA7CisJCQljb21tb24tPnNldF9hZGRyID0gTlVMTDsKKwkJCWNvbW1vbi0+eXRvcF9vZmYgPSBjb21tb24tPnlidG1fb2ZmID0gMDsKKwkJCWNvbW1vbi0+Y3RvcF9vZmYgPSBjb21tb24tPmNidG1fb2ZmID0gMDsKKwkJCWNvbW1vbi0+Y3VyX2ZybSA9IGNvbW1vbi0+bmV4dF9mcm0gPSBOVUxMOworCQkJbWVtc2V0KCZjb21tb24tPmZtdCwgMCwgc2l6ZW9mKGNvbW1vbi0+Zm10KSk7CisJCQljb21tb24tPm51bWJ1ZmZlcnMgPSBjb25maWdfcGFyYW1zLm51bWJ1ZmZlcnNba107CisKKwkJfQorCQljaC0+aW5pdGlhbGl6ZWQgPSAwOworCQljaC0+Y2hhbm5lbF9pZCA9IGo7CisJCWlmIChqIDwgMikKKwkJCWNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0ubnVtYnVmZmVycyA9CisJCQkgICAgY29uZmlnX3BhcmFtcy5udW1idWZmZXJzW2NoLT5jaGFubmVsX2lkXTsKKwkJZWxzZQorCQkJY2gtPmNvbW1vbltWUElGX1ZJREVPX0lOREVYXS5udW1idWZmZXJzID0gMDsKKworCQltZW1zZXQoJmNoLT52cGlmcGFyYW1zLCAwLCBzaXplb2YoY2gtPnZwaWZwYXJhbXMpKTsKKworCQkvKiBJbml0aWFsaXplIHByaW8gbWVtYmVyIG9mIGNoYW5uZWwgb2JqZWN0ICovCisJCXY0bDJfcHJpb19pbml0KCZjaC0+cHJpbyk7CisJCWNoLT5jb21tb25bVlBJRl9WSURFT19JTkRFWF0uZm10LnR5cGUgPQorCQkJCQkJVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisKKwkJLyogcmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovCisJCXZwaWZfZGJnKDEsIGRlYnVnLCAiY2hhbm5lbD0leCxjaGFubmVsLT52aWRlb19kZXY9JXhcbiIsCisJCQkJKGludCljaCwgKGludCkmY2gtPnZpZGVvX2Rldik7CisKKwkJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGNoLT52aWRlb19kZXYsCisJCQkJCSAgVkZMX1RZUEVfR1JBQkJFUiwgKGogPyAzIDogMikpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gcHJvYmVfb3V0OworCisJCXZpZGVvX3NldF9kcnZkYXRhKGNoLT52aWRlb19kZXYsIGNoKTsKKwl9CisKKwlpMmNfYWRhcCA9IGkyY19nZXRfYWRhcHRlcigxKTsKKwljb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdWJkZXZfY291bnQgPSBjb25maWctPnN1YmRldl9jb3VudDsKKwlzdWJkZXZkYXRhID0gY29uZmlnLT5zdWJkZXZpbmZvOworCXZwaWZfb2JqLnNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2ICopICogc3ViZGV2X2NvdW50LAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAodnBpZl9vYmouc2QgPT0gTlVMTCkgeworCQl2cGlmX2VycigidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Igc3ViZGV2aWNlIHBvaW50ZXJzXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBwcm9iZV9vdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHN1YmRldl9jb3VudDsgaSsrKSB7CisJCXZwaWZfb2JqLnNkW2ldID0gdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZCgmdnBpZl9vYmoudjRsMl9kZXYsCisJCQkJCQlpMmNfYWRhcCwgc3ViZGV2ZGF0YVtpXS5uYW1lLAorCQkJCQkJJnN1YmRldmRhdGFbaV0uYm9hcmRfaW5mbywKKwkJCQkJCU5VTEwpOworCQlpZiAoIXZwaWZfb2JqLnNkW2ldKSB7CisJCQl2cGlmX2VycigiRXJyb3IgcmVnaXN0ZXJpbmcgdjRsMiBzdWJkZXZpY2VcbiIpOworCQkJZ290byBwcm9iZV9zdWJkZXZfb3V0OworCQl9CisKKwkJaWYgKHZwaWZfb2JqLnNkW2ldKQorCQkJdnBpZl9vYmouc2RbaV0tPmdycF9pZCA9IDEgPDwgaTsKKwl9CisKKwlyZXR1cm4gMDsKKworcHJvYmVfc3ViZGV2X291dDoKKwlrZnJlZSh2cGlmX29iai5zZCk7Citwcm9iZV9vdXQ6CisJZm9yIChrID0gMDsgayA8IGo7IGsrKykgeworCQljaCA9IHZwaWZfb2JqLmRldltrXTsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2gtPnZpZGVvX2Rldik7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGNoLT52aWRlb19kZXYpOworCQljaC0+dmlkZW9fZGV2ID0gTlVMTDsKKwl9Cit2cGlmX2ludF9lcnI6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdnBpZl9vYmoudjRsMl9kZXYpOworCXZwaWZfZXJyKCJWUElGIElSUSByZXF1ZXN0IGZhaWxlZFxuIik7CisJZm9yIChxID0gazsgayA+PSAwOyBrLS0pIHsKKwkJZm9yIChtID0gaTsgbSA+PSByZXMtPnN0YXJ0OyBtLS0pCisJCQlmcmVlX2lycShtLCAodm9pZCAqKSgmdnBpZl9vYmouZGV2W2tdLT5jaGFubmVsX2lkKSk7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgay0xKTsKKwkJbSA9IHJlcy0+ZW5kOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiB2cGlmX3JlbW92ZTogSXQgdW4tcmVnaXN0ZXIgY2hhbm5lbHMgZnJvbSBWNEwyIGRyaXZlcgorICovCitzdGF0aWMgaW50IHZwaWZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoOworCWludCBpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdnBpZl9vYmoudjRsMl9kZXYpOworCisJLyogdW4tcmVnaXN0ZXIgZGV2aWNlICovCisJZm9yIChpID0gMDsgaSA8IFZQSUZfRElTUExBWV9NQVhfREVWSUNFUzsgaSsrKSB7CisJCS8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgY2hhbm5lbCBvYmplY3QgKi8KKwkJY2ggPSB2cGlmX29iai5kZXZbaV07CisJCS8qIFVucmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNoLT52aWRlb19kZXYpOworCisJCWNoLT52aWRlb19kZXYgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cGlmX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkJLm5hbWUJPSAidnBpZl9kaXNwbGF5IiwKKwkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gdnBpZl9wcm9iZSwKKwkucmVtb3ZlCT0gdnBpZl9yZW1vdmUsCit9OworCitzdGF0aWMgX19pbml0IGludCB2cGlmX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2cGlmX2RyaXZlcik7Cit9CisKKy8qCisgKiB2cGlmX2NsZWFudXA6IFRoaXMgZnVuY3Rpb24gdW4tcmVnaXN0ZXJzIGRldmljZSBhbmQgZHJpdmVyIHRvIHRoZSBrZXJuZWwsCisgKiBmcmVlcyByZXF1ZXN0ZWQgaXJxIGhhbmRsZXIgYW5kIGRlLWFsbG9jYXRlcyBtZW1vcnkgYWxsb2NhdGVkIGZvciBjaGFubmVsCisgKiBvYmplY3RzLgorICovCitzdGF0aWMgdm9pZCB2cGlmX2NsZWFudXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnFfbnVtOworCWludCBpID0gMDsKKworCXBkZXYgPSBjb250YWluZXJfb2YodnBpZl9kZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisKKwl3aGlsZSAoKHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgaSkpKSB7CisJCWZvciAoaXJxX251bSA9IHJlcy0+c3RhcnQ7IGlycV9udW0gPD0gcmVzLT5lbmQ7IGlycV9udW0rKykKKwkJCWZyZWVfaXJxKGlycV9udW0sCisJCQkJICh2b2lkICopKCZ2cGlmX29iai5kZXZbaV0tPmNoYW5uZWxfaWQpKTsKKwkJaSsrOworCX0KKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cGlmX2RyaXZlcik7CisJa2ZyZWUodnBpZl9vYmouc2QpOworCWZvciAoaSA9IDA7IGkgPCBWUElGX0RJU1BMQVlfTUFYX0RFVklDRVM7IGkrKykKKwkJa2ZyZWUodnBpZl9vYmouZGV2W2ldKTsKK30KKworbW9kdWxlX2luaXQodnBpZl9pbml0KTsKK21vZHVsZV9leGl0KHZwaWZfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhN2NkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIERNNjQ2eCBkaXNwbGF5IGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIC5hcyBpcy4gV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgREFWSU5DSUhEX0RJU1BMQVlfSAorI2RlZmluZSBEQVZJTkNJSERfRElTUExBWV9ICisKKy8qIEhlYWRlciBmaWxlcyAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KKworI2luY2x1ZGUgInZwaWYuaCIKKworLyogTWFjcm9zICovCisjZGVmaW5lIFZQSUZfTUFKT1JfUkVMRUFTRQkoMCkKKyNkZWZpbmUgVlBJRl9NSU5PUl9SRUxFQVNFCSgwKQorI2RlZmluZSBWUElGX0JVSUxECQkoMSkKKworI2RlZmluZSBWUElGX0RJU1BMQVlfVkVSU0lPTl9DT0RFIFwKKwkoKFZQSUZfTUFKT1JfUkVMRUFTRSA8PCAxNikgfCAoVlBJRl9NSU5PUl9SRUxFQVNFIDw8IDgpIHwgVlBJRl9CVUlMRCkKKworI2RlZmluZSBWUElGX1ZBTElEX0ZJRUxEKGZpZWxkKSBcCisJKCgoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHx8IChWNEwyX0ZJRUxEX05PTkUgPT0gZmllbGQpKSB8fCBcCisJKCgoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEID09IGZpZWxkKSB8fCAoVjRMMl9GSUVMRF9TRVFfVEIgPT0gZmllbGQpKSB8fCBcCisJKFY0TDJfRklFTERfU0VRX0JUID09IGZpZWxkKSkpCisKKyNkZWZpbmUgVlBJRl9ESVNQTEFZX01BWF9ERVZJQ0VTCSgyKQorI2RlZmluZSBWUElGX1NMSUNFRF9CVUZfU0laRQkJKDI1NikKKyNkZWZpbmUgVlBJRl9TTElDRURfTUFYX1NFUlZJQ0VTCSgzKQorI2RlZmluZSBWUElGX1ZJREVPX0lOREVYCQkoMCkKKyNkZWZpbmUgVlBJRl9WQklfSU5ERVgJCQkoMSkKKyNkZWZpbmUgVlBJRl9IQklfSU5ERVgJCQkoMikKKworLyogU2V0dGluZyBpdCB0byAxIGFzIEhCSS9WQkkgc3VwcG9ydCB5ZXQgdG8gYmUgYWRkZWQgLCBlbHNlIDMqLworI2RlZmluZSBWUElGX05VTU9CSkVDVFMJKDEpCisKKy8qIE1hY3JvcyAqLworI2RlZmluZSBJU0FMSUdORUQoYSkgICAgKDAgPT0gKChhKSAmIDcpKQorCisvKiBlbnVtZXJhdGVkIGRhdGEgdHlwZXMgKi8KKy8qIEVudW1lcmF0ZWQgZGF0YSB0eXBlIHRvIGdpdmUgaWQgdG8gZWFjaCBkZXZpY2UgcGVyIGNoYW5uZWwgKi8KK2VudW0gdnBpZl9jaGFubmVsX2lkIHsKKwlWUElGX0NIQU5ORUwyX1ZJREVPID0gMCwJLyogQ2hhbm5lbDIgVmlkZW8gKi8KKwlWUElGX0NIQU5ORUwzX1ZJREVPLAkJLyogQ2hhbm5lbDMgVmlkZW8gKi8KK307CisKKy8qIHN0cnVjdHVyZXMgKi8KKworc3RydWN0IHZpZGVvX29iaiB7CisJZW51bSB2NGwyX2ZpZWxkIGJ1Zl9maWVsZDsKKwl1MzIgbGF0ZXN0X29ubHk7CQkvKiBpbmRpY2F0ZSB3aGV0aGVyIHRvIHJldHVybgorCQkJCQkgKiBtb3N0IHJlY2VudCBkaXNwbGF5ZWQgZnJhbWUgb25seSAqLworCXY0bDJfc3RkX2lkIHN0ZGlkOwkJLyogQ3VycmVudGx5IHNlbGVjdGVkIG9yIGRlZmF1bHQKKwkJCQkJICogc3RhbmRhcmQgKi8KKwl1MzIgb3V0cHV0X2lkOwkJCS8qIEN1cnJlbnQgb3V0cHV0IGlkICovCit9OworCitzdHJ1Y3QgdmJpX29iaiB7CisJaW50IG51bV9zZXJ2aWNlczsKKwlzdHJ1Y3QgdnBpZl92YmlfcGFyYW1zIHZiaXBhcmFtczsJLyogdnBpZiBwYXJhbWV0ZXJzIGZvciB0aGUgcmF3CisJCQkJCQkgKiB2YmkgZGF0YSAqLworfTsKKworc3RydWN0IGNvbW1vbl9vYmogeworCS8qIEJ1ZmZlciBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJdTggKmZidWZmZXJzW1ZJREVPX01BWF9GUkFNRV07CQkvKiBMaXN0IG9mIGJ1ZmZlciBwb2ludGVycyBmb3IKKwkJCQkJCSAqIHN0b3JpbmcgZnJhbWVzICovCisJdTMyIG51bWJ1ZmZlcnM7CQkJCS8qIG51bWJlciBvZiBidWZmZXJzICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqY3VyX2ZybTsJLyogUG9pbnRlciBwb2ludGluZyB0byBjdXJyZW50CisJCQkJCQkgKiB2aWRlb2J1Zl9idWZmZXIgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpuZXh0X2ZybTsJLyogUG9pbnRlciBwb2ludGluZyB0byBuZXh0CisJCQkJCQkgKiB2aWRlb2J1Zl9idWZmZXIgKi8KKwllbnVtIHY0bDJfbWVtb3J5IG1lbW9yeTsJCS8qIFRoaXMgZmllbGQga2VlcHMgdHJhY2sgb2YKKwkJCQkJCSAqIHR5cGUgb2YgYnVmZmVyIGV4Y2hhbmdlCisJCQkJCQkgKiBtZXRob2QgdXNlciBoYXMgc2VsZWN0ZWQgKi8KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwkJCS8qIFVzZWQgdG8gc3RvcmUgdGhlIGZvcm1hdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBidWZmZXJfcXVldWU7CS8qIEJ1ZmZlciBxdWV1ZSB1c2VkIGluCisJCQkJCQkgKiB2aWRlby1idWYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9xdWV1ZTsJCS8qIFF1ZXVlIG9mIGZpbGxlZCBmcmFtZXMgKi8KKwlzcGlubG9ja190IGlycWxvY2s7CQkJLyogVXNlZCBpbiB2aWRlby1idWYgKi8KKworCS8qIGNoYW5uZWwgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCXN0cnVjdCBtdXRleCBsb2NrOwkJCS8qIGxvY2sgdXNlZCB0byBhY2Nlc3MgdGhpcworCQkJCQkJICogc3RydWN0dXJlICovCisJdTMyIGlvX3VzcnM7CQkJCS8qIG51bWJlciBvZiB1c2VycyBwZXJmb3JtaW5nCisJCQkJCQkgKiBJTyAqLworCXU4IHN0YXJ0ZWQ7CQkJCS8qIEluZGljYXRlcyB3aGV0aGVyIHN0cmVhbWluZworCQkJCQkJICogc3RhcnRlZCAqLworCXUzMiB5dG9wX29mZjsJCQkJLyogb2Zmc2V0IG9mIFkgdG9wIGZyb20gdGhlCisJCQkJCQkgKiBzdGFydGluZyBvZiB0aGUgYnVmZmVyICovCisJdTMyIHlidG1fb2ZmOwkJCQkvKiBvZmZzZXQgb2YgWSBib3R0b20gZnJvbSB0aGUKKwkJCQkJCSAqIHN0YXJ0aW5nIG9mIHRoZSBidWZmZXIgKi8KKwl1MzIgY3RvcF9vZmY7CQkJCS8qIG9mZnNldCBvZiBDIHRvcCBmcm9tIHRoZQorCQkJCQkJICogc3RhcnRpbmcgb2YgdGhlIGJ1ZmZlciAqLworCXUzMiBjYnRtX29mZjsJCQkJLyogb2Zmc2V0IG9mIEMgYm90dG9tIGZyb20gdGhlCisJCQkJCQkgKiBzdGFydGluZyBvZiB0aGUgYnVmZmVyICovCisJLyogRnVuY3Rpb24gcG9pbnRlciB0byBzZXQgdGhlIGFkZHJlc3NlcyAqLworCXZvaWQgKCpzZXRfYWRkcikgKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisJdTMyIGhlaWdodDsKKwl1MzIgd2lkdGg7Cit9OworCitzdHJ1Y3QgY2hhbm5lbF9vYmogeworCS8qIFY0bDIgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldjsJLyogSWRlbnRpZmllcyB2aWRlbyBkZXZpY2UgZm9yCisJCQkJCSAqIHRoaXMgY2hhbm5lbCAqLworCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgcHJpbzsJLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHN0YXRlIG9mCisJCQkJCSAqIHRoZSBwcmlvcml0eSAqLworCWF0b21pY190IHVzcnM7CQkJLyogbnVtYmVyIG9mIG9wZW4gaW5zdGFuY2VzIG9mCisJCQkJCSAqIHRoZSBjaGFubmVsICovCisJdTMyIGZpZWxkX2lkOwkJCS8qIEluZGljYXRlcyBpZCBvZiB0aGUgZmllbGQKKwkJCQkJICogd2hpY2ggaXMgYmVpbmcgZGlzcGxheWVkICovCisJdTggaW5pdGlhbGl6ZWQ7CQkJLyogZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyCisJCQkJCSAqIGVuY29kZXIgaXMgaW5pdGlhbGl6ZWQgKi8KKworCWVudW0gdnBpZl9jaGFubmVsX2lkIGNoYW5uZWxfaWQ7LyogSWRlbnRpZmllcyBjaGFubmVsICovCisJc3RydWN0IHZwaWZfcGFyYW1zIHZwaWZwYXJhbXM7CisJc3RydWN0IGNvbW1vbl9vYmogY29tbW9uW1ZQSUZfTlVNT0JKRUNUU107CisJc3RydWN0IHZpZGVvX29iaiB2aWRlbzsKKwlzdHJ1Y3QgdmJpX29iaiB2Ymk7Cit9OworCisvKiBGaWxlIGhhbmRsZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB2cGlmX2ZoIHsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmNoYW5uZWw7CS8qIHBvaW50ZXIgdG8gY2hhbm5lbCBvYmplY3QgZm9yCisJCQkJCSAqIG9wZW5lZCBkZXZpY2UgKi8KKwl1OCBpb19hbGxvd2VkW1ZQSUZfTlVNT0JKRUNUU107CS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgZmlsZSBoYW5kbGUKKwkJCQkJICogaXMgZG9pbmcgSU8gKi8KKwllbnVtIHY0bDJfcHJpb3JpdHkgcHJpbzsJLyogVXNlZCB0byBrZWVwIHRyYWNrIHByaW9yaXR5IG9mCisJCQkJCSAqIHRoaXMgaW5zdGFuY2UgKi8KKwl1OCBpbml0aWFsaXplZDsJCQkvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGlzCisJCQkJCSAqIGZpbGUgaGFuZGxlIGhhcyBpbml0aWFsaXplZAorCQkJCQkgKiBjaGFubmVsIG9yIG5vdCAqLworfTsKKworLyogdnBpZiBkZXZpY2Ugc3RydWN0dXJlICovCitzdHJ1Y3QgdnBpZl9kZXZpY2UgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgY2hhbm5lbF9vYmogKmRldltWUElGX0RJU1BMQVlfTlVNX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKipzZDsKKworfTsKKworc3RydWN0IHZwaWZfY29uZmlnX3BhcmFtcyB7CisJdTMyIG1pbl9idWZzaXplW1ZQSUZfRElTUExBWV9OVU1fQ0hBTk5FTFNdOworCXUzMiBjaGFubmVsX2J1ZnNpemVbVlBJRl9ESVNQTEFZX05VTV9DSEFOTkVMU107CisJdTggbnVtYnVmZmVyc1tWUElGX0RJU1BMQVlfTlVNX0NIQU5ORUxTXTsKKwl1OCBtaW5fbnVtYnVmZmVyczsKK307CisKKy8qIFN0cnVjdCB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgbGluZSBudW1iZXJzIGZvciB0aGUgc2xpY2VkIHZiaSBzZXJ2aWNlICovCitzdHJ1Y3QgdnBpZl9zZXJ2aWNlX2xpbmUgeworCXUxNiBzZXJ2aWNlX2lkOworCXUxNiBzZXJ2aWNlX2xpbmVbMl07CisJdTE2IGVuY19zZXJ2aWNlX2lkOworCXU4IGJ5dGVzdG93cml0ZTsKK307CisKKyNlbmRpZgkJCQkvKiBEQVZJTkNJSERfRElTUExBWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDcwOWNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBjb21tb24gdnBzcyBkcml2ZXIgZm9yIGFsbCB2aWRlbyBkcml2ZXJzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBzcy5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlZQU1MgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworCisvKiBETTY0NHggZGVmaW5lcyAqLworI2RlZmluZSBETTY0NFhfU0JMX1BDUl9WUFNTCQkoNCkKKworLyogdnBzcyBCTCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9DQ0RDTVVYCQkweDFjCisvKiB2cHNzIENMSyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIERNMzU1X1ZQU1NDTEtfQ0xLQ1RSTAkJMHgwNAorLyogbWFza3MgYW5kIHNoaWZ0cyAqLworI2RlZmluZSBWUFNTX0hTU0lTRUxfU0hJRlQJCTQKKworLyoKKyAqIHZwc3Mgb3BlcmF0aW9ucy4gRGVwZW5kcyBvbiBwbGF0Zm9ybS4gTm90IGFsbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZQorICogb24gYWxsIHBsYXRmb3Jtcy4gVGhlIGFwaSwgZmlyc3QgY2hlY2sgaWYgYSBmdW5jdGlvIGlzIGF2YWlsYWJsZSBiZWZvcmUKKyAqIGludm9raW5nIGl0LiBJbiB0aGUgcHJvYmUsIHRoZSBmdW5jdGlvbiBwdHJzIGFyZSBpbnRpYWxpemVkIGJhc2VkIG9uCisgKiB2cHNzIG5hbWUuIHZwc3MgbmFtZSBjYW4gYmUgImRtMzU1X3Zwc3MiLCAiZG02NDR4X3Zwc3MiIGV0Yy4KKyAqLworc3RydWN0IHZwc3NfaHdfb3BzIHsKKwkvKiBlbmFibGUgY2xvY2sgKi8KKwlpbnQgKCplbmFibGVfY2xvY2spKGVudW0gdnBzc19jbG9ja19zZWwgY2xvY2tfc2VsLCBpbnQgZW4pOworCS8qIHNlbGVjdCBpbnB1dCB0byBjY2RjICovCisJdm9pZCAoKnNlbGVjdF9jY2RjX3NvdXJjZSkoZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzcmNfc2VsKTsKKwkvKiBjbGVhciB3Ymwgb3ZlcmxmbG93IGJpdCAqLworCWludCAoKmNsZWFyX3dibF9vdmVyZmxvdykoZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCk7Cit9OworCisvKiB2cHNzIGNvbmZpZ3VyYXRpb24gKi8KK3N0cnVjdCB2cHNzX29wZXJfY29uZmlnIHsKKwlfX2lvbWVtIHZvaWQgKnZwc3NfYmxfcmVnc19iYXNlOworCV9faW9tZW0gdm9pZCAqdnBzc19yZWdzX2Jhc2U7CisJc3RydWN0IHJlc291cmNlCQkqcjE7CisJcmVzb3VyY2Vfc2l6ZV90CQlsZW4xOworCXN0cnVjdCByZXNvdXJjZQkJKnIyOworCXJlc291cmNlX3NpemVfdAkJbGVuMjsKKwljaGFyIHZwc3NfbmFtZVszMl07CisJc3BpbmxvY2tfdCB2cHNzX2xvY2s7CisJc3RydWN0IHZwc3NfaHdfb3BzIGh3X29wczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdnBzc19vcGVyX2NvbmZpZyBvcGVyX2NmZzsKKworLyogcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzICovCitzdGF0aWMgaW5saW5lIHUzMiBibF9yZWdyKHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsX3JlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHZwc3NfcmVncih1MzIgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cHNzX3JlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRtMzU1X3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpCit7CisJYmxfcmVndyhzcmNfc2VsIDw8IFZQU1NfSFNTSVNFTF9TSElGVCwgRE0zNTVfVlBTU0JMX0NDRENNVVgpOworfQorCitpbnQgdnBzc19zZWxlY3RfY2NkY19zb3VyY2UoZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzcmNfc2VsKQoreworCWlmICghb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSkKKwkJcmV0dXJuIC0xOworCisJZG0zNTVfc2VsZWN0X2NjZGNfc291cmNlKHNyY19zZWwpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZSk7CisKK3N0YXRpYyBpbnQgZG02NDR4X2NsZWFyX3dibF9vdmVyZmxvdyhlbnVtIHZwc3Nfd2JsX3NlbCB3Ymxfc2VsKQoreworCXUzMiBtYXNrID0gMSwgdmFsOworCisJaWYgKHdibF9zZWwgPCBWUFNTX1BDUl9BRVdfV0JMXzAgfHwKKwkgICAgd2JsX3NlbCA+IFZQU1NfUENSX0NDRENfV0JMX08pCisJCXJldHVybiAtMTsKKworCS8qIHdyaXRpbmcgYSAwIGNsZWFyIHRoZSBvdmVyZmxvdyAqLworCW1hc2sgPSB+KG1hc2sgPDwgd2JsX3NlbCk7CisJdmFsID0gYmxfcmVncihETTY0NFhfU0JMX1BDUl9WUFNTKSAmIG1hc2s7CisJYmxfcmVndyh2YWwsIERNNjQ0WF9TQkxfUENSX1ZQU1MpOworCXJldHVybiAwOworfQorCitpbnQgdnBzc19jbGVhcl93Ymxfb3ZlcmZsb3coZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCkKK3sKKwlpZiAoIW9wZXJfY2ZnLmh3X29wcy5jbGVhcl93Ymxfb3ZlcmZsb3cpCisJCXJldHVybiAtMTsKKworCXJldHVybiBvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93KHdibF9zZWwpOworfQorRVhQT1JUX1NZTUJPTCh2cHNzX2NsZWFyX3dibF9vdmVyZmxvdyk7CisKKy8qCisgKiAgZG0zNTVfZW5hYmxlX2Nsb2NrIC0gRW5hYmxlIFZQU1MgQ2xvY2sKKyAqICBAY2xvY2tfc2VsOiBDTG9jayB0byBiZSBlbmFibGVkL2Rpc2FibGVkCisgKiAgQGVuOiBlbmFibGUvZGlzYWJsZSBmbGFnCisgKgorICogIFRoaXMgaXMgY2FsbGVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGEgdnBzcyBjbG9jaworICovCitzdGF0aWMgaW50IGRtMzU1X2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHV0ZW1wLCBtYXNrID0gMHgxLCBzaGlmdCA9IDA7CisKKwlzd2l0Y2ggKGNsb2NrX3NlbCkgeworCWNhc2UgVlBTU19WUEJFX0NMT0NLOgorCQkvKiBub3RoaW5nIHNpbmNlIGxzYiAqLworCQlicmVhazsKKwljYXNlIFZQU1NfVkVOQ19DTE9DS19TRUw6CisJCXNoaWZ0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0NGQUxEX0NMT0NLOgorCQlzaGlmdCA9IDM7CisJCWJyZWFrOworCWNhc2UgVlBTU19IM0FfQ0xPQ0s6CisJCXNoaWZ0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0lQSVBFX0NMT0NLOgorCQlzaGlmdCA9IDU7CisJCWJyZWFrOworCWNhc2UgVlBTU19DQ0RDX0NMT0NLOgorCQlzaGlmdCA9IDY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZG0zNTVfZW5hYmxlX2Nsb2NrOiIKKwkJCQkiIEludmFsaWQgc2VsZWN0b3I6ICVkXG4iLCBjbG9ja19zZWwpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wZXJfY2ZnLnZwc3NfbG9jaywgZmxhZ3MpOworCXV0ZW1wID0gdnBzc19yZWdyKERNMzU1X1ZQU1NDTEtfQ0xLQ1RSTCk7CisJaWYgKCFlbikKKwkJdXRlbXAgJj0gfihtYXNrIDw8IHNoaWZ0KTsKKwllbHNlCisJCXV0ZW1wIHw9IChtYXNrIDw8IHNoaWZ0KTsKKworCXZwc3NfcmVndyh1dGVtcCwgRE0zNTVfVlBTU0NMS19DTEtDVFJMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHZwc3NfZW5hYmxlX2Nsb2NrKGVudW0gdnBzc19jbG9ja19zZWwgY2xvY2tfc2VsLCBpbnQgZW4pCit7CisJaWYgKCFvcGVyX2NmZy5od19vcHMuZW5hYmxlX2Nsb2NrKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayhjbG9ja19zZWwsIGVuKTsKK30KK0VYUE9SVF9TWU1CT0wodnBzc19lbmFibGVfY2xvY2spOworCitzdGF0aWMgaW50IF9faW5pdCB2cHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHN0YXR1cywgZG0zNTUgPSAwOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCXN0cmNweShvcGVyX2NmZy52cHNzX25hbWUsIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKworCWlmICghc3RyY21wKG9wZXJfY2ZnLnZwc3NfbmFtZSwgImRtMzU1X3Zwc3MiKSkKKwkJZG0zNTUgPSAxOworCWVsc2UgaWYgKHN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTY0NHhfdnBzcyIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInZwc3MgZHJpdmVyIG5vdCBzdXBwb3J0ZWQgb24iCisJCQkiIHRoaXMgcGxhdGZvcm1cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZWRcbiIsIG9wZXJfY2ZnLnZwc3NfbmFtZSk7CisJb3Blcl9jZmcucjEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghb3Blcl9jZmcucjEpCisJCXJldHVybiAtRU5PRU5UOworCisJb3Blcl9jZmcubGVuMSA9IG9wZXJfY2ZnLnIxLT5lbmQgLSBvcGVyX2NmZy5yMS0+c3RhcnQgKyAxOworCisJb3Blcl9jZmcucjEgPSByZXF1ZXN0X21lbV9yZWdpb24ob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xLAorCQkJCQkgb3Blcl9jZmcucjEtPm5hbWUpOworCWlmICghb3Blcl9jZmcucjEpCisJCXJldHVybiAtRUJVU1k7CisKKwlvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSA9IGlvcmVtYXAob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xKTsKKwlpZiAoIW9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwlpZiAoZG0zNTUpIHsKKwkJb3Blcl9jZmcucjIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlpZiAoIW9wZXJfY2ZnLnIyKSB7CisJCQlzdGF0dXMgPSAtRU5PRU5UOworCQkJZ290byBmYWlsMjsKKwkJfQorCQlvcGVyX2NmZy5sZW4yID0gb3Blcl9jZmcucjItPmVuZCAtIG9wZXJfY2ZnLnIyLT5zdGFydCArIDE7CisJCW9wZXJfY2ZnLnIyID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwKKwkJCQkJCSBvcGVyX2NmZy5sZW4yLAorCQkJCQkJIG9wZXJfY2ZnLnIyLT5uYW1lKTsKKwkJaWYgKCFvcGVyX2NmZy5yMikgeworCQkJc3RhdHVzID0gLUVCVVNZOworCQkJZ290byBmYWlsMjsKKwkJfQorCisJCW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlID0gaW9yZW1hcChvcGVyX2NmZy5yMi0+c3RhcnQsCisJCQkJCQkgIG9wZXJfY2ZnLmxlbjIpOworCQlpZiAoIW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlKSB7CisJCQlzdGF0dXMgPSAtRUJVU1k7CisJCQlnb3RvIGZhaWwzOworCQl9CisJfQorCisJaWYgKGRtMzU1KSB7CisJCW9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2sgPSBkbTM1NV9lbmFibGVfY2xvY2s7CisJCW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2UgPSBkbTM1NV9zZWxlY3RfY2NkY19zb3VyY2U7CisJfSBlbHNlCisJCW9wZXJfY2ZnLmh3X29wcy5jbGVhcl93Ymxfb3ZlcmZsb3cgPSBkbTY0NHhfY2xlYXJfd2JsX292ZXJmbG93OworCisJc3Bpbl9sb2NrX2luaXQoJm9wZXJfY2ZnLnZwc3NfbG9jayk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmUgc3VjY2Vzc1xuIiwgb3Blcl9jZmcudnBzc19uYW1lKTsKKwlyZXR1cm4gMDsKKworZmFpbDM6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwgb3Blcl9jZmcubGVuMik7CitmYWlsMjoKKwlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlKTsKK2ZhaWwxOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMS0+c3RhcnQsIG9wZXJfY2ZnLmxlbjEpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgdnBzc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xKTsKKwlpZiAoIXN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTM1NV92cHNzIikpIHsKKwkJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMi0+c3RhcnQsIG9wZXJfY2ZnLmxlbjIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnBzc19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAidnBzcyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHZwc3NfcmVtb3ZlKSwKKwkucHJvYmUgPSB2cHNzX3Byb2JlLAorfTsKKworc3RhdGljIHZvaWQgdnBzc19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZwc3NfZHJpdmVyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdnBzc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdnBzc19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHZwc3NfaW5pdCk7Cittb2R1bGVfZXhpdCh2cHNzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKaW5kZXggNjUyNGI0OS4uYzdiZTBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC0zNiw2ICszNiw3IEBACiAJZGVwZW5kcyBvbiBWSURFT19FTTI4WFggJiYgRFZCX0NPUkUKIAlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDAyMyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBWSURFT0JVRl9EVkIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCIGNhcmRzIGJhc2VkIG9uIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQppbmRleCA4MTM3YThjLi5kMGYwOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIGVtMjh4eC1vYmpzICAgICA6PSBlbTI4eHgtdmlkZW8ubyBlbTI4eHgtaTJjLm8gZW0yOHh4LWNhcmRzLm8gZW0yOHh4LWNvcmUubyBcCi0JCSAgIGVtMjh4eC1pbnB1dC5vCisJCSAgIGVtMjh4eC1pbnB1dC5vIGVtMjh4eC12YmkubwogCiBlbTI4eHgtYWxzYS1vYmpzIDo9IGVtMjh4eC1hdWRpby5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggN2UzYzc4Mi4uYmRiMjQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTE3MCw2ICsxNzAsMTkgQEAKIAl7CS0xLAkJLTEsCS0xLAkJLTF9LAogfTsKIAorLyogZWIxYToyODY4IFJlZGRvIERWQi1DIFVTQiBUViBCb3gKKyAgIEdQSU80IC0gQ1UxMjE2TCBOSU0KKyAgIE90aGVyIEdQSU9zIHNlZW1zIHRvIGJlIGRvbid0IGNhcmUuICovCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIHJlZGRvX2R2Yl9jX3VzYl9ib3hbXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAkweGZlLAkweGZmLAkJMTB9LAorCXtFTTI4WFhfUjA4X0dQSU8sCTB4ZGUsCTB4ZmYsCQkxMH0sCisJe0VNMjhYWF9SMDhfR1BJTywJMHhmZSwJMHhmZiwJCTEwfSwKKwl7RU0yOFhYX1IwOF9HUElPLAkweGZmLAkweGZmLAkJMTB9LAorCXtFTTI4WFhfUjA4X0dQSU8sCTB4N2YsCTB4ZmYsCQkxMH0sCisJe0VNMjhYWF9SMDhfR1BJTywJMHg2ZiwJMHhmZiwJCTEwfSwKKwl7RU0yOFhYX1IwOF9HUElPLAkweGZmLAkweGZmLAkJMTB9LAorCXstMSwJCQktMSwJLTEsCQktMX0sCit9OwogCiAvKiBDYWxsYmFjayBmb3IgdGhlIG1vc3QgYm9hcmRzICovCiBzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGRlZmF1bHRfdHVuZXJfZ3Bpb1tdID0gewpAQCAtMTU2Niw2ICsxNTc5LDE0IEBACiAJCQkuZ3BpbyAgICAgPSBldmdhX2luZHR1YmVfYW5hbG9nLAogCQl9IH0sCiAJfSwKKwkvKiBlYjFhOjI4NjggRW1waWEgRU0yODcwICsgUGhpbGlwcyBDVTEyMTZMIE5JTSAoUGhpbGlwcyBUREExMDAyMyArCisJICAgSW5maW5lb24gVFVBNjAzNCkgKi8KKwlbRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1hdID0geworCQkubmFtZSAgICAgICAgICA9ICJSZWRkbyBEVkItQyBVU0IgVFYgQm94IiwKKwkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9BQlNFTlQsCisJCS5oYXNfZHZiICAgICAgID0gMSwKKwkJLmR2Yl9ncGlvICAgICAgPSByZWRkb19kdmJfY191c2JfYm94LAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOwogCkBAIC0xNTkzLDYgKzE2MTQsOCBAQAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1VOS05PV04gfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4ODMpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1VOS05PV04gfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4NjgpLAorCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1VOS05PV04gfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMDApLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODYxX0JPQVJEX0tXT1JMRF9QVlJUVl8zMDBVIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzAzKSwKQEAgLTE2OTYsNiArMTcxOSw3IEBACiAJezB4MTY2YTA0NDEsIEVNMjg4MF9CT0FSRF9FTVBJUkVfRFVBTF9UViwgVFVORVJfWEMyMDI4fSwKIAl7MHhjZWU0NGE5OSwgRU0yODgyX0JPQVJEX0VWR0FfSU5EVFVCRSwgVFVORVJfWEMyMDI4fSwKIAl7MHhiODg0NmIyMCwgRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk8sIFRVTkVSX1hDMjAyOH0sCisJezB4NjNmNjUzYmQsIEVNMjg3MF9CT0FSRF9SRURET19EVkJfQ19VU0JfQk9YLCBUVU5FUl9BQlNFTlR9LAogfTsKIAogLyogSTJDIGRldmljZWxpc3QgaGFzaCB0YWJsZSBmb3IgZGV2aWNlcyB3aXRoIGdlbmVyaWMgVVNCIElEcyAqLwpAQCAtMjM0OCw1NSArMjM3Miw1NSBAQAogCiAJLyogcmVxdWVzdCBzb21lIG1vZHVsZXMgKi8KIAlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkKLQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAotCQkJIm1zcDM0MDAiLCAibXNwMzQwMCIsIG1zcDM0MDBfYWRkcnMpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKKwkJCSJtc3AzNDAwIiwgIm1zcDM0MDAiLCAwLCBtc3AzNDAwX2FkZHJzKTsKIAogCWlmIChkZXYtPmJvYXJkLmRlY29kZXIgPT0gRU0yOFhYX1NBQTcxMVgpCi0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKLQkJCSJzYWE3MTE1IiwgInNhYTcxMTVfYXV0byIsIHNhYTcxMXhfYWRkcnMpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKKwkJCSJzYWE3MTE1IiwgInNhYTcxMTVfYXV0byIsIDAsIHNhYTcxMXhfYWRkcnMpOwogCiAJaWYgKGRldi0+Ym9hcmQuZGVjb2RlciA9PSBFTTI4WFhfVFZQNTE1MCkKLQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAotCQkJInR2cDUxNTAiLCAidHZwNTE1MCIsIHR2cDUxNTBfYWRkcnMpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKKwkJCSJ0dnA1MTUwIiwgInR2cDUxNTAiLCAwLCB0dnA1MTUwX2FkZHJzKTsKIAogCWlmIChkZXYtPmVtMjh4eF9zZW5zb3IgPT0gRU0yOFhYX01UOVYwMTEpIHsKIAkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAotCQkJICZkZXYtPmkyY19hZGFwLCAibXQ5djAxMSIsICJtdDl2MDExIiwgbXQ5djAxMV9hZGRycyk7CisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKKwkJCSAmZGV2LT5pMmNfYWRhcCwgIm10OXYwMTEiLCAibXQ5djAxMSIsIDAsIG10OXYwMTFfYWRkcnMpOwogCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX2NvbmZpZywgMCwgJmRldi0+c2Vuc29yX3h0YWwpOwogCX0KIAogCiAJaWYgKGRldi0+Ym9hcmQuYWRlY29kZXIgPT0gRU0yOFhYX1RWQVVESU8pCiAJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAotCQkJInR2YXVkaW8iLCAidHZhdWRpbyIsIGRldi0+Ym9hcmQudHZhdWRpb19hZGRyKTsKKwkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCBkZXYtPmJvYXJkLnR2YXVkaW9fYWRkciwgTlVMTCk7CiAKIAlpZiAoZGV2LT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkgewogCQlpbnQgaGFzX2RlbW9kID0gKGRldi0+dGRhOTg4N19jb25mICYgVERBOTg4N19QUkVTRU5UKTsKIAogCQlpZiAoZGV2LT5ib2FyZC5yYWRpby50eXBlKQogCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCi0JCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT5ib2FyZC5yYWRpb19hZGRyKTsKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPmJvYXJkLnJhZGlvX2FkZHIsIE5VTEwpOwogCiAJCWlmIChoYXNfZGVtb2QpCi0JCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT52NGwyX2RldiwKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJCQkwLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOwogCQlpZiAoZGV2LT50dW5lcl9hZGRyID09IDApIHsKIAkJCWVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlID0KIAkJCQloYXNfZGVtb2QgPyBBRERSU19UVl9XSVRIX0RFTU9EIDogQUREUlNfVFY7CiAJCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCi0JCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAorCQkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19hZGFwLCAidHVuZXIiLCAidHVuZXIiLAotCQkJCXY0bDJfaTJjX3R1bmVyX2FkZHJzKHR5cGUpKTsKKwkJCQkwLCB2NGwyX2kyY190dW5lcl9hZGRycyh0eXBlKSk7CiAKIAkJCWlmIChzZCkKIAkJCQlkZXYtPnR1bmVyX2FkZHIgPSB2NGwyX2kyY19zdWJkZXZfYWRkcihzZCk7CiAJCX0gZWxzZSB7CiAJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmZGV2LT5pMmNfYWRhcCwKLQkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPnR1bmVyX2FkZHIpOworCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+dHVuZXJfYWRkciwgTlVMTCk7CiAJCX0KIAl9CiAKQEAgLTI1NzAsNyArMjU5NCw4IEBACiAJICogRGVmYXVsdCBmb3JtYXQsIHVzZWQgZm9yIHR2cDUxNTAgb3Igc2FhNzExeCBvdXRwdXQgZm9ybWF0cwogCSAqLwogCWRldi0+dmlubW9kZSA9IDB4MTA7Ci0JZGV2LT52aW5jdGwgID0gMHgxMTsKKwlkZXYtPnZpbmN0bCAgPSBFTTI4WFhfVklOQ1RSTF9JTlRFUkxBQ0VEIHwKKwkJICAgICAgIEVNMjhYWF9WSU5DVFJMX0NDSVI2NTZfRU5BQkxFOwogCiAJLyogRG8gYm9hcmQgc3BlY2lmaWMgaW5pdCBhbmQgZWVwcm9tIHJlYWRpbmcgKi8KIAllbTI4eHhfY2FyZF9zZXR1cChkZXYpOwpAQCAtMjU4OSw2ICsyNjE0LDggQEAKIAkvKiBpbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8KIAlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLmFjdGl2ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5xdWV1ZWQpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZiaXEuYWN0aXZlKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52YmlxLnF1ZXVlZCk7CiAKIAogCWlmIChkZXYtPmJvYXJkLmhhc19tc3AzNHh4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCA5OGUxNDBiLi5hODgyNTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTU0LDYgKzU0LDEwIEBACiBtb2R1bGVfcGFyYW0oYWx0LCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhbHQsICJhbHRlcm5hdGUgc2V0dGluZyB0byB1c2UgZm9yIHZpZGVvIGVuZHBvaW50Iik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlzYWJsZV92Ymk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV92YmksIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfdmJpLCAiZGlzYWJsZSB2Ymkgc3VwcG9ydCIpOworCiAvKiBGSVhNRSAqLwogI2RlZmluZSBlbTI4eHhfaXNvY2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKIAlpZiAoY29yZV9kZWJ1ZykgXApAQCAtNjQ4LDkgKzY1MiwyNCBAQAogCXJldHVybiByYzsKIH0KIAoraW50IGVtMjh4eF92Ymlfc3VwcG9ydGVkKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwkvKiBNb2Rwcm9iZSBvcHRpb24gdG8gbWFudWFsbHkgZGlzYWJsZSAqLworCWlmIChkaXNhYmxlX3ZiaSA9PSAxKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4NjAgfHwKKwkgICAgZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODgzKQorCQlyZXR1cm4gMTsKKworCS8qIFZlcnNpb24gb2YgZW0yOHh4IHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBWQkkgKi8KKwlyZXR1cm4gMDsKK30KKwogaW50IGVtMjh4eF9zZXRfb3V0Zm10KHN0cnVjdCBlbTI4eHggKmRldikKIHsKIAlpbnQgcmV0OworCXU4IHZpbmN0cmw7CiAKIAlyZXQgPSBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBFTTI4WFhfUjI3X09VVEZNVCwKIAkJCQlkZXYtPmZvcm1hdC0+cmVnIHwgMHgyMCwgMHhmZik7CkBAIC02NjEsNyArNjgwLDE2IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMTFfVklOQ1RSTCwgZGV2LT52aW5jdGwpOworCXZpbmN0cmwgPSBkZXYtPnZpbmN0bDsKKwlpZiAoZW0yOHh4X3ZiaV9zdXBwb3J0ZWQoZGV2KSA9PSAxKSB7CisJCXZpbmN0cmwgfD0gRU0yOFhYX1ZJTkNUUkxfVkJJX1JBVzsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzRfVkJJX1NUQVJUX0gsIDB4MDApOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwOSk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM2X1ZCSV9XSURUSCwgMHhiNCk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM3X1ZCSV9IRUlHSFQsIDB4MGMpOworCX0KKworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxMV9WSU5DVFJMLCB2aW5jdHJsKTsKIH0KIAogc3RhdGljIGludCBlbTI4eHhfYWNjdW11bGF0b3Jfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgdTggeG1pbiwgdTggeG1heCwKQEAgLTczMiw3ICs3NjAsMTQgQEAKIAogCiAJZW0yOHh4X2FjY3VtdWxhdG9yX3NldChkZXYsIDEsICh3aWR0aCAtIDQpID4+IDIsIDEsIChoZWlnaHQgLSA0KSA+PiAyKTsKLQllbTI4eHhfY2FwdHVyZV9hcmVhX3NldChkZXYsIDAsIDAsIHdpZHRoID4+IDIsIGhlaWdodCA+PiAyKTsKKworCS8qIElmIHdlIGRvbid0IHNldCB0aGUgc3RhcnQgcG9zaXRpb24gdG8gNCBpbiBWQkkgbW9kZSwgd2UgZW5kIHVwCisJICAgd2l0aCBsaW5lIDIxIGJlaW5nIFlVWVYgZW5jb2RlZCBpbnN0ZWFkIG9mIGJlaW5nIGluIDgtYml0CisJICAgZ3JleXNjYWxlICovCisJaWYgKGVtMjh4eF92Ymlfc3VwcG9ydGVkKGRldikgPT0gMSkKKwkJZW0yOHh4X2NhcHR1cmVfYXJlYV9zZXQoZGV2LCAwLCA0LCB3aWR0aCA+PiAyLCBoZWlnaHQgPj4gMik7CisJZWxzZQorCQllbTI4eHhfY2FwdHVyZV9hcmVhX3NldChkZXYsIDAsIDAsIHdpZHRoID4+IDIsIGhlaWdodCA+PiAyKTsKIAogCXJldHVybiBlbTI4eHhfc2NhbGVyX3NldChkZXYsIGRldi0+aHNjYWxlLCBkZXYtPnZzY2FsZSk7CiB9CkBAIC04NDQsOCArODc5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZW0yOHh4X2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAgKmRtYV9xID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBlbTI4eHggKmRldiA9IGNvbnRhaW5lcl9vZihkbWFfcSwgc3RydWN0IGVtMjh4eCwgdmlkcSk7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gdXJiLT5jb250ZXh0OwogCWludCByYywgaTsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKQEAgLTkzMCw2ICs5NjQsNyBAQAogCQkgICAgIGludCAoKmlzb2NfY29weSkgKHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0IHVyYiAqdXJiKSkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICpkbWFfcSA9ICZkZXYtPnZpZHE7CisJc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAqdmJpX2RtYV9xID0gJmRldi0+dmJpcTsKIAlpbnQgaTsKIAlpbnQgc2Jfc2l6ZSwgcGlwZTsKIAlzdHJ1Y3QgdXJiICp1cmI7CkBAIC05NTksNyArOTk0LDggQEAKIAl9CiAKIAlkZXYtPmlzb2NfY3RsLm1heF9wa3Rfc2l6ZSA9IG1heF9wa3Rfc2l6ZTsKLQlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisJZGV2LT5pc29jX2N0bC52aWRfYnVmID0gTlVMTDsKKwlkZXYtPmlzb2NfY3RsLnZiaV9idWYgPSBOVUxMOwogCiAJc2Jfc2l6ZSA9IG1heF9wYWNrZXRzICogZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemU7CiAKQEAgLTk5NCw3ICsxMDMwLDcgQEAKIAogCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgZGV2LT51ZGV2LCBwaXBlLAogCQkJCSBkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSwgc2Jfc2l6ZSwKLQkJCQkgZW0yOHh4X2lycV9jYWxsYmFjaywgZG1hX3EsIDEpOworCQkJCSBlbTI4eHhfaXJxX2NhbGxiYWNrLCBkZXYsIDEpOwogCiAJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBtYXhfcGFja2V0czsKIAkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwpAQCAtMTAwOSw2ICsxMDQ1LDcgQEAKIAl9CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFfcS0+d3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZiaV9kbWFfcS0+d3EpOwogCiAJZW0yOHh4X2NhcHR1cmVfc3RhcnQoZGV2LCAxKTsKIApAQCAtMTA5NCw3ICsxMTMxLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZlbTI4eHhfZGV2bGlzdCwgZGV2bGlzdCkgewogCQlpZiAoaC0+dmRldi0+bWlub3IgPT0gbWlub3IpCiAJCQlkZXYgPSBoOwotCQlpZiAoaC0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJaWYgKGgtPnZiaV9kZXYgJiYgaC0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKIAkJCWRldiA9IGg7CiAJCQkqZmhfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwppbmRleCBkNjAzNTc1Li5kYjc0OTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiczVoMTQwOS5oIgogI2luY2x1ZGUgIm10MzUyLmgiCiAjaW5jbHVkZSAibXQzNTJfcHJpdi5oIiAvKiBGSVhNRSAqLworI2luY2x1ZGUgInRkYTEwMDJ4LmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBlbTI4eHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4iKTsKQEAgLTI5NSw2ICsyOTYsMTEgQEAKIAkuZGVtb2RfaW5pdCA9IG10MzUyX3RlcnJhdGVjX3hzX2luaXQsCiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTEwMDIzX2NvbmZpZyBlbTI4eHhfdGRhMTAwMjNfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwYywKKwkuaW52ZXJ0ID0gMSwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGF0dGFjaF94YzMwMjgodTggYWRkciwgc3RydWN0IGVtMjh4eCAqZGV2KQpAQCAtNTQ5LDYgKzU1NSwxOSBAQAogCQl9CiAJCWJyZWFrOwogI2VuZGlmCisJY2FzZSBFTTI4NzBfQk9BUkRfUkVERE9fRFZCX0NfVVNCX0JPWDoKKwkJLyogUGhpbGlwcyBDVTEyMTZMIE5JTSAoUGhpbGlwcyBUREExMDAyMyArIEluZmluZW9uIFRVQTYwMzQpICovCisJCWR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDIzX2F0dGFjaCwKKwkJCSZlbTI4eHhfdGRhMTAwMjNfY29uZmlnLAorCQkJJmRldi0+aTJjX2FkYXAsIDB4NDgpOworCQlpZiAoZHZiLT5mcm9udGVuZCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGR2Yi0+ZnJvbnRlbmQsCisJCQkJJmRldi0+aTJjX2FkYXAsIDB4NjAsIFRVTkVSX1BISUxJUFNfQ1UxMjE2TCkpIHsKKwkJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIgogCQkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaAppbmRleCA2YmY4NGJkLi5lZDEyZTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCkBAIC04Niw3ICs4NiwxOSBAQAogI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMjRNSFoJMHgwYgogCiAjZGVmaW5lIEVNMjhYWF9SMTBfVklOTU9ERQkweDEwCisKICNkZWZpbmUgRU0yOFhYX1IxMV9WSU5DVFJMCTB4MTEKKworLyogZW0yOHh4IFZpZGVvIElucHV0IENvbnRyb2wgUmVnaXN0ZXIgMHgxMSAqLworI2RlZmluZSBFTTI4WFhfVklOQ1RSTF9WQklfU0xJQ0VECTB4ODAKKyNkZWZpbmUgRU0yOFhYX1ZJTkNUUkxfVkJJX1JBVwkJMHg0MAorI2RlZmluZSBFTTI4WFhfVklOQ1RSTF9WT1VUX01PREVfSU4JMHgyMCAvKiBIUkVGLFZSRUYsVkFDVCBpbiBvdXRwdXQgKi8KKyNkZWZpbmUgRU0yOFhYX1ZJTkNUUkxfQ0NJUjY1Nl9FTkFCTEUJMHgxMAorI2RlZmluZSBFTTI4WFhfVklOQ1RSTF9WQklfMTZCSVRfUkFXCTB4MDggLyogb3RoZXJ3aXNlIDgtYml0IHJhdyAqLworI2RlZmluZSBFTTI4WFhfVklOQ1RSTF9GSURfT05fSFJFRgkweDA0CisjZGVmaW5lIEVNMjhYWF9WSU5DVFJMX0RVQUxfRURHRV9TVFJPQkUJMHgwMgorI2RlZmluZSBFTTI4WFhfVklOQ1RSTF9JTlRFUkxBQ0VECTB4MDEKKwogI2RlZmluZSBFTTI4WFhfUjEyX1ZJTkVOQUJMRQkweDEyCS8qICovCiAKICNkZWZpbmUgRU0yOFhYX1IxNF9HQU1NQQkweDE0CkBAIC0xMzUsNiArMTQ3LDEwIEBACiAjZGVmaW5lIEVNMjhYWF9SMzFfSFNDQUxFSElHSAkweDMxCiAjZGVmaW5lIEVNMjhYWF9SMzJfVlNDQUxFTE9XCTB4MzIKICNkZWZpbmUgRU0yOFhYX1IzM19WU0NBTEVISUdICTB4MzMKKyNkZWZpbmUgRU0yOFhYX1IzNF9WQklfU1RBUlRfSAkweDM0CisjZGVmaW5lIEVNMjhYWF9SMzVfVkJJX1NUQVJUX1YJMHgzNQorI2RlZmluZSBFTTI4WFhfUjM2X1ZCSV9XSURUSAkweDM2CisjZGVmaW5lIEVNMjhYWF9SMzdfVkJJX0hFSUdIVAkweDM3CiAKICNkZWZpbmUgRU0yOFhYX1I0MF9BQzk3TFNCCTB4NDAKICNkZWZpbmUgRU0yOFhYX1I0MV9BQzk3TVNCCTB4NDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDk0M2U1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICAgZW0yOHh4LXZiaS5jIC0gVkJJIGRyaXZlciBmb3IgZW0yOHh4CisKKyAgIENvcHlyaWdodCAoQykgMjAwOSBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGtlcm5lbGxhYnMuY29tPgorCisgICBUaGlzIHdvcmsgd2FzIHNwb25zb3JlZCBieSBFeWVNYWduZXQgTGltaXRlZC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJlbTI4eHguaCIKKworc3RhdGljIHVuc2lnbmVkIGludCB2YmlidWZzID0gNTsKK21vZHVsZV9wYXJhbSh2YmlidWZzLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2YmlidWZzLCAibnVtYmVyIG9mIHZiaSBidWZmZXJzLCByYW5nZSAyLTMyIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmJpX2RlYnVnOworbW9kdWxlX3BhcmFtKHZiaV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmJpX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFt2YmldIik7CisKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCWlmICh2YmlfZGVidWcgPj0gbGV2ZWwpIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBkZXYtPmNvcmUtPm5hbWUgLCAjIyBhcmcpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZAorZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IGVtMjh4eF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAqZmggID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCUJVRygpOworCisJLyogV2UgdXNlZCB0byB3YWl0IGZvciB0aGUgYnVmZmVyIHRvIGZpbmlzaCBoZXJlLCBidXQgdGhpcyBkaWRuJ3Qgd29yaworCSAgIGJlY2F1c2UsIGFzIHdlIHdlcmUga2VlcGluZyB0aGUgc3RhdGUgYXMgVklERU9CVUZfUVVFVUVELAorCSAgIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbCBtYXJrZWQgaXQgYXMgZmluaXNoZWQgZm9yIHVzLgorCSAgIChBbHNvLCBpdCBjb3VsZCB3ZWRnZSBmb3JldmVyIGlmIHRoZSBoYXJkd2FyZSB3YXMgbWlzY29uZmlndXJlZC4pCisKKwkgICBUaGlzIHNob3VsZCBiZSBzYWZlOyBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSwgdGhlIGJ1ZmZlciBpc24ndAorCSAgIHF1ZXVlZCBhbnltb3JlLiBJZiB3ZSBldmVyIHN0YXJ0IG1hcmtpbmcgdGhlIGJ1ZmZlcnMgYXMKKwkgICBWSURFT0JVRl9BQ1RJVkUsIGl0IHdvbid0IGJlLCB0aG91Z2guCisJKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCWlmIChkZXYtPmlzb2NfY3RsLnZiaV9idWYgPT0gYnVmKQorCQlkZXYtPmlzb2NfY3RsLnZiaV9idWYgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKworCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSgmYnVmLT52Yik7CisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBpbnQKK3ZiaV9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwkqc2l6ZSA9IDcyMCAqIDEyICogMjsKKwlpZiAoMCA9PSAqY291bnQpCisJCSpjb3VudCA9IHZiaWJ1ZnM7CisJaWYgKCpjb3VudCA8IDIpCisJCSpjb3VudCA9IDI7CisJaWYgKCpjb3VudCA+IDMyKQorCQkqY291bnQgPSAzMjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordmJpX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBlbTI4eHhfYnVmZmVyLCB2Yik7CisJaW50ICAgICAgICAgICAgICAgICAgcmMgPSAwOworCXVuc2lnbmVkIGludCBzaXplOworCisJc2l6ZSA9IDcyMCAqIDEyICogMjsKKworCWJ1Zi0+dmIuc2l6ZSA9IHNpemU7CisKKwlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICAmJiAgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYtPnZiLndpZHRoICA9IDcyMDsKKwlidWYtPnZiLmhlaWdodCA9IDEyOworCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQ7CisKKwlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CisJCXJjID0gdmlkZW9idWZfaW9sb2NrKHEsICZidWYtPnZiLCBOVUxMKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZnJlZV9idWZmZXIocSwgYnVmKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCit2YmlfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGVtMjh4eF9idWZmZXIgICAgKmJ1ZiAgICAgPSBjb250YWluZXJfb2YodmIsCisJCQkJCQkJc3RydWN0IGVtMjh4eF9idWZmZXIsCisJCQkJCQkJdmIpOworCXN0cnVjdCBlbTI4eHhfZmggICAgICAgICpmaCAgICAgID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAgICAqZGV2ICAgICA9IGZoLT5kZXY7CisJc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAgKnZiaXEgICAgPSAmZGV2LT52YmlxOworCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmdmJpcS0+YWN0aXZlKTsKK30KKworc3RhdGljIHZvaWQgdmJpX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCWZyZWVfYnVmZmVyKHEsIGJ1Zik7Cit9CisKK3N0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgZW0yOHh4X3ZiaV9xb3BzID0geworCS5idWZfc2V0dXAgICAgPSB2Ymlfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICA9IHZiaV9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgPSB2YmlfcXVldWUsCisJLmJ1Zl9yZWxlYXNlICA9IHZiaV9yZWxlYXNlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggYTZiZGJjMi4uM2ExZGZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTE2Myw3ICsxNjMsMjQgQEAKIAlidWYtPnZiLmZpZWxkX2NvdW50Kys7CiAJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKIAotCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKKwlkZXYtPmlzb2NfY3RsLnZpZF9idWYgPSBOVUxMOworCisJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2YmlfYnVmZmVyX2ZpbGxlZChzdHJ1Y3QgZW0yOHh4ICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICpkbWFfcSwKKwkJCQkgICAgIHN0cnVjdCBlbTI4eHhfYnVmZmVyICpidWYpCit7CisJLyogQWR2aWNlIHRoYXQgYnVmZmVyIHdhcyBmaWxsZWQgKi8KKwllbTI4eHhfaXNvY2RiZygiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ET05FOworCWJ1Zi0+dmIuZmllbGRfY291bnQrKzsKKwlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCisJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gTlVMTDsKIAogCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKIAl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwpAQCAtMjM5LDcgKzI1Niw4IEBACiAKIAkJaWYgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkgPiAoY2hhciAqKW91dHAgKwogCQkgICAgYnVmLT52Yi5zaXplKSB7Ci0JCQllbTI4eHhfaXNvY2RiZygiT3ZlcmZsb3cgb2YgJXppIGJ5dGVzIHBhc3QgYnVmZmVyIGVuZCAoMilcbiIsCisJCQllbTI4eHhfaXNvY2RiZygiT3ZlcmZsb3cgb2YgJXppIGJ5dGVzIHBhc3QgYnVmZmVyIGVuZCIKKwkJCQkgICAgICAgIigyKVxuIiwKIAkJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KIAkJCQkgICAgICAgKChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkpOwogCQkJbGVuY29weSA9IHJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtCkBAIC0yNTYsNiArMjc0LDYzIEBACiAJZG1hX3EtPnBvcyArPSBsZW47CiB9CiAKK3N0YXRpYyB2b2lkIGVtMjh4eF9jb3B5X3ZiaShzdHJ1Y3QgZW0yOHh4ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICAqZG1hX3EsCisJCQkgICAgICBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAqYnVmLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqcCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHAsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXZvaWQgKnN0YXJ0d3JpdGUsICpzdGFydHJlYWQ7CisJaW50ICBvZmZzZXQ7CisJaW50IGJ5dGVzcGVybGluZSA9IDcyMDsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQllbTI4eHhfaXNvY2RiZygiZGV2IGlzIG51bGxcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRtYV9xID09IE5VTEwpIHsKKwkJZW0yOHh4X2lzb2NkYmcoImRtYV9xIGlzIG51bGxcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChidWYgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmIChwID09IE5VTEwpIHsKKwkJZW0yOHh4X2lzb2NkYmcoInAgaXMgbnVsbFxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKG91dHAgPT0gTlVMTCkgeworCQllbTI4eHhfaXNvY2RiZygib3V0cCBpcyBudWxsXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkbWFfcS0+cG9zICsgbGVuID4gYnVmLT52Yi5zaXplKQorCQlsZW4gPSBidWYtPnZiLnNpemUgLSBkbWFfcS0+cG9zOworCisJaWYgKChwWzBdID09IDB4MzMgJiYgcFsxXSA9PSAweDk1KSB8fAorCSAgICAocFswXSA9PSAweDg4ICYmIHBbMV0gPT0gMHg4OCkpIHsKKwkJLyogSGVhZGVyIGZpZWxkLCBhZHZhbmNlIHBhc3QgaXQgKi8KKwkJcCArPSA0OworCX0gZWxzZSB7CisJCWxlbiArPSA0OworCX0KKworCXN0YXJ0cmVhZCA9IHA7CisKKwlzdGFydHdyaXRlID0gb3V0cCArIGRtYV9xLT5wb3M7CisJb2Zmc2V0ID0gZG1hX3EtPnBvczsKKworCS8qIE1ha2Ugc3VyZSB0aGUgYm90dG9tIGZpZWxkIHBvcHVsYXRlcyB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGZyYW1lICovCisJaWYgKGJ1Zi0+dG9wX2ZpZWxkID09IDApIHsKKwkJc3RhcnR3cml0ZSArPSBieXRlc3BlcmxpbmUgKiAweDBjOworCQlvZmZzZXQgKz0gYnl0ZXNwZXJsaW5lICogMHgwYzsKKwl9CisKKwltZW1jcHkoc3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW4pOworCWRtYV9xLT5wb3MgKz0gbGVuOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfZXJyX3N0YXR1cyhzdHJ1Y3QgZW0yOHh4ICpkZXYsCiAJCQkJICAgICBpbnQgcGFja2V0LCBpbnQgc3RhdHVzKQogewpAQCAtMzA2LDcgKzM4MSw3IEBACiAKIAlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpIHsKIAkJZW0yOHh4X2lzb2NkYmcoIk5vIGFjdGl2ZSBxdWV1ZSB0byBzZXJ2ZVxuIik7Ci0JCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKKwkJZGV2LT5pc29jX2N0bC52aWRfYnVmID0gTlVMTDsKIAkJKmJ1ZiA9IE5VTEw7CiAJCXJldHVybjsKIAl9CkBAIC0zMTgsNyArMzkzLDM0IEBACiAJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOwogCW1lbXNldChvdXRwLCAwLCAoKmJ1ZiktPnZiLnNpemUpOwogCi0JZGV2LT5pc29jX2N0bC5idWYgPSAqYnVmOworCWRldi0+aXNvY19jdGwudmlkX2J1ZiA9ICpidWY7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiB2aWRlby1idWYgZ2VuZXJpYyByb3V0aW5lIHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgVkJJIGJ1ZmZlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdmJpX2dldF9uZXh0X2J1ZihzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICpkbWFfcSwKKwkJCQkgICAgc3RydWN0IGVtMjh4eF9idWZmZXIgKipidWYpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gY29udGFpbmVyX29mKGRtYV9xLCBzdHJ1Y3QgZW0yOHh4LCB2YmlxKTsKKwljaGFyICpvdXRwOworCisJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKSB7CisJCWVtMjh4eF9pc29jZGJnKCJObyBhY3RpdmUgcXVldWUgdG8gc2VydmVcbiIpOworCQlkZXYtPmlzb2NfY3RsLnZiaV9idWYgPSBOVUxMOworCQkqYnVmID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KKwkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBlbTI4eHhfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bGwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCisJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOworCW1lbXNldChvdXRwLCAweDAwLCAoKmJ1ZiktPnZiLnNpemUpOworCisJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gKmJ1ZjsKIAogCXJldHVybjsKIH0KQEAgLTMyOSw3ICs0MzEsNyBAQAogc3RhdGljIGlubGluZSBpbnQgZW0yOHh4X2lzb2NfY29weShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICAqYnVmOwotCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICpkbWFfcSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICAqZG1hX3EgPSAmZGV2LT52aWRxOwogCXVuc2lnbmVkIGNoYXIgKm91dHAgPSBOVUxMOwogCWludCBpLCBsZW4gPSAwLCByYyA9IDE7CiAJdW5zaWduZWQgY2hhciAqcDsKQEAgLTM0Niw3ICs0NDgsNyBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JYnVmID0gZGV2LT5pc29jX2N0bC5idWY7CisJYnVmID0gZGV2LT5pc29jX2N0bC52aWRfYnVmOwogCWlmIChidWYgIT0gTlVMTCkKIAkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOwogCkBAIC00MTAsNiArNTEyLDE1MyBAQAogCXJldHVybiByYzsKIH0KIAorLyogVmVyc2lvbiBvZiBpc29jIGhhbmRsZXIgdGhhdCB0YWtlcyBpbnRvIGFjY291bnQgYSBtaXh0dXJlIG9mIHZpZGVvIGFuZAorICAgVkJJIGRhdGEgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGVtMjh4eF9pc29jX2NvcHlfdmJpKHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYsICp2YmlfYnVmOworCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICpkbWFfcSA9ICZkZXYtPnZpZHE7CisJc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSAgKnZiaV9kbWFfcSA9ICZkZXYtPnZiaXE7CisJdW5zaWduZWQgY2hhciAqb3V0cCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqdmJpb3V0cCA9IE5VTEw7CisJaW50IGksIGxlbiA9IDAsIHJjID0gMTsKKwl1bnNpZ25lZCBjaGFyICpwOworCWludCB2Ymlfc2l6ZTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWlmICgoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8IChkZXYtPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpKQorCQlyZXR1cm4gMDsKKworCWlmICh1cmItPnN0YXR1cyA8IDApIHsKKwkJcHJpbnRfZXJyX3N0YXR1cyhkZXYsIC0xLCB1cmItPnN0YXR1cyk7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJfQorCisJYnVmID0gZGV2LT5pc29jX2N0bC52aWRfYnVmOworCWlmIChidWYgIT0gTlVMTCkKKwkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOworCisJdmJpX2J1ZiA9IGRldi0+aXNvY19jdGwudmJpX2J1ZjsKKwlpZiAodmJpX2J1ZiAhPSBOVUxMKQorCQl2YmlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmdmJpX2J1Zi0+dmIpOworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpbnQgc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByaW50X2Vycl9zdGF0dXMoZGV2LCBpLCBzdGF0dXMpOworCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzICE9IC1FUFJPVE8pCisJCQkJY29udGludWU7CisJCX0KKworCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLSA0OworCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPD0gMCkgeworCQkJLyogZW0yOHh4X2lzb2NkYmcoInBhY2tldCAlZCBpcyBlbXB0eSIsaSk7IC0gc3BhbW15ICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID4KKwkJCQkJCWRldi0+bWF4X3BrdF9zaXplKSB7CisJCQllbTI4eHhfaXNvY2RiZygicGFja2V0IGJpZ2dlciB0aGFuIHBhY2tldCBzaXplIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXAgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCisJCS8qIGNhcHR1cmUgdHlwZSAwID0gdmJpIHN0YXJ0CisJCSAgIGNhcHR1cmUgdHlwZSAxID0gdmlkZW8gc3RhcnQKKwkJICAgY2FwdHVyZSB0eXBlIDIgPSB2aWRlbyBpbiBwcm9ncmVzcyAqLworCQlpZiAocFswXSA9PSAweDMzICYmIHBbMV0gPT0gMHg5NSkgeworCQkJZGV2LT5jYXB0dXJlX3R5cGUgPSAwOworCQkJZGV2LT52YmlfcmVhZCA9IDA7CisJCQllbTI4eHhfaXNvY2RiZygiVkJJIFNUQVJUIEhFQURFUiEhIVxuIik7CisJCQlkZXYtPmN1cl9maWVsZCA9IHBbMl07CisJCX0KKworCQkvKiBGSVhNRTogZ2V0IHJpZCBvZiBoYXJkLWNvZGVkIHZhbHVlICovCisJCXZiaV9zaXplID0gNzIwICogMHgwYzsKKworCQlpZiAoZGV2LT5jYXB0dXJlX3R5cGUgPT0gMCkgeworCQkJaWYgKGRldi0+dmJpX3JlYWQgPj0gdmJpX3NpemUpIHsKKwkJCQkvKiBXZSd2ZSBhbHJlYWR5IHJlYWQgYWxsIHRoZSBWQkkgZGF0YSwgc28KKwkJCQkgICB0cmVhdCB0aGUgcmVzdCBhcyB2aWRlbyAqLworCQkJCWVtMjh4eF9pc29jZGJnKCJkZXYtPnZiaV9yZWFkID4gdmJpX3NpemVcbiIpOworCQkJfSBlbHNlIGlmICgoZGV2LT52YmlfcmVhZCArIGxlbikgPCB2Ymlfc2l6ZSkgeworCQkJCS8qIFRoaXMgZW50aXJlIGZyYW1lIGlzIFZCSSBkYXRhICovCisJCQkJaWYgKGRldi0+dmJpX3JlYWQgPT0gMCAmJgorCQkJCSAgICAoIShkZXYtPmN1cl9maWVsZCAmIDEpKSkgeworCQkJCQkvKiBCcmFuZCBuZXcgZnJhbWUgKi8KKwkJCQkJaWYgKHZiaV9idWYgIT0gTlVMTCkKKwkJCQkJCXZiaV9idWZmZXJfZmlsbGVkKGRldiwKKwkJCQkJCQkJICB2YmlfZG1hX3EsCisJCQkJCQkJCSAgdmJpX2J1Zik7CisJCQkJCXZiaV9nZXRfbmV4dF9idWYodmJpX2RtYV9xLCAmdmJpX2J1Zik7CisJCQkJCWlmICh2YmlfYnVmID09IE5VTEwpCisJCQkJCQl2YmlvdXRwID0gTlVMTDsKKwkJCQkJZWxzZQorCQkJCQkJdmJpb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoCisJCQkJCQkJJnZiaV9idWYtPnZiKTsKKwkJCQl9CisKKwkJCQlpZiAoZGV2LT52YmlfcmVhZCA9PSAwKSB7CisJCQkJCXZiaV9kbWFfcS0+cG9zID0gMDsKKwkJCQkJaWYgKHZiaV9idWYgIT0gTlVMTCkgeworCQkJCQkJaWYgKGRldi0+Y3VyX2ZpZWxkICYgMSkKKwkJCQkJCQl2YmlfYnVmLT50b3BfZmllbGQgPSAwOworCQkJCQkJZWxzZQorCQkJCQkJCXZiaV9idWYtPnRvcF9maWVsZCA9IDE7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlkZXYtPnZiaV9yZWFkICs9IGxlbjsKKwkJCQllbTI4eHhfY29weV92YmkoZGV2LCB2YmlfZG1hX3EsIHZiaV9idWYsIHAsCisJCQkJCQl2YmlvdXRwLCBsZW4pOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTb21lIG9mIHRoaXMgZnJhbWUgaXMgVkJJIGRhdGEgYW5kIHNvbWUgaXMKKwkJCQkgICB2aWRlbyBkYXRhICovCisJCQkJaW50IHZiaV9kYXRhX2xlbiA9IHZiaV9zaXplIC0gZGV2LT52YmlfcmVhZDsKKwkJCQlkZXYtPnZiaV9yZWFkICs9IHZiaV9kYXRhX2xlbjsKKwkJCQllbTI4eHhfY29weV92YmkoZGV2LCB2YmlfZG1hX3EsIHZiaV9idWYsIHAsCisJCQkJCQl2YmlvdXRwLCB2YmlfZGF0YV9sZW4pOworCQkJCWRldi0+Y2FwdHVyZV90eXBlID0gMTsKKwkJCQlwICs9IHZiaV9kYXRhX2xlbjsKKwkJCQlsZW4gLT0gdmJpX2RhdGFfbGVuOworCQkJfQorCQl9CisKKwkJaWYgKGRldi0+Y2FwdHVyZV90eXBlID09IDEpIHsKKwkJCWRldi0+Y2FwdHVyZV90eXBlID0gMjsKKwkJCWVtMjh4eF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlZCwgbGVuZ3RoPSVpLCAlc1xuIiwgcFsyXSwKKwkJCQkgICAgICAgbGVuLCAocFsyXSAmIDEpID8gIm9kZCIgOiAiZXZlbiIpOworCisJCQlpZiAoZGV2LT5wcm9ncmVzc2l2ZSB8fCAhKGRldi0+Y3VyX2ZpZWxkICYgMSkpIHsKKwkJCQlpZiAoYnVmICE9IE5VTEwpCisJCQkJCWJ1ZmZlcl9maWxsZWQoZGV2LCBkbWFfcSwgYnVmKTsKKwkJCQlnZXRfbmV4dF9idWYoZG1hX3EsICZidWYpOworCQkJCWlmIChidWYgPT0gTlVMTCkKKwkJCQkJb3V0cCA9IE5VTEw7CisJCQkJZWxzZQorCQkJCQlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmYnVmLT52Yik7CisJCQl9CisJCQlpZiAoYnVmICE9IE5VTEwpIHsKKwkJCQlpZiAoZGV2LT5jdXJfZmllbGQgJiAxKQorCQkJCQlidWYtPnRvcF9maWVsZCA9IDA7CisJCQkJZWxzZQorCQkJCQlidWYtPnRvcF9maWVsZCA9IDE7CisJCQl9CisKKwkJCWRtYV9xLT5wb3MgPSAwOworCQl9CisJCWlmIChidWYgIT0gTlVMTCAmJiBkZXYtPmNhcHR1cmVfdHlwZSA9PSAyKQorCQkJZW0yOHh4X2NvcHlfdmlkZW8oZGV2LCBkbWFfcSwgYnVmLCBwLCBvdXRwLCBsZW4pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJVmlkZW9idWYgb3BlcmF0aW9ucwogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQyMSw3ICs2NzAsOCBAQAogCXN0cnVjdCBlbTI4eHggICAgICAgICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSBmOwogCi0JKnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiBkZXYtPmZvcm1hdC0+ZGVwdGggKyA3KSA+PiAzOworCSpzaXplID0gKGZoLT5kZXYtPndpZHRoICogZmgtPmRldi0+aGVpZ2h0ICogZGV2LT5mb3JtYXQtPmRlcHRoICsgNykKKwkJPj4gMzsKIAogCWlmICgwID09ICpjb3VudCkKIAkJKmNvdW50ID0gRU0yOFhYX0RFRl9CVUY7CkBAIC00NTgsOCArNzA4LDggQEAKIAkgICBWSURFT0JVRl9BQ1RJVkUsIGl0IHdvbid0IGJlLCB0aG91Z2guCiAJKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOwotCWlmIChkZXYtPmlzb2NfY3RsLmJ1ZiA9PSBidWYpCi0JCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKKwlpZiAoZGV2LT5pc29jX2N0bC52aWRfYnVmID09IGJ1ZikKKwkJZGV2LT5pc29jX2N0bC52aWRfYnVmID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7CiAKIAl2aWRlb2J1Zl92bWFsbG9jX2ZyZWUoJmJ1Zi0+dmIpOwpAQCAtNDc1LDcgKzcyNSw4IEBACiAJc3RydWN0IGVtMjh4eCAgICAgICAgKmRldiA9IGZoLT5kZXY7CiAJaW50ICAgICAgICAgICAgICAgICAgcmMgPSAwLCB1cmJfaW5pdCA9IDA7CiAKLQlidWYtPnZiLnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiBkZXYtPmZvcm1hdC0+ZGVwdGggKyA3KSA+PiAzOworCWJ1Zi0+dmIuc2l6ZSA9IChmaC0+ZGV2LT53aWR0aCAqIGZoLT5kZXYtPmhlaWdodCAqIGRldi0+Zm9ybWF0LT5kZXB0aAorCQkJKyA3KSA+PiAzOwogCiAJaWYgKDAgIT0gYnVmLT52Yi5iYWRkciAgJiYgIGJ1Zi0+dmIuYnNpemUgPCBidWYtPnZiLnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDk0LDkgKzc0NSwxNiBAQAogCQl1cmJfaW5pdCA9IDE7CiAKIAlpZiAodXJiX2luaXQpIHsKLQkJcmMgPSBlbTI4eHhfaW5pdF9pc29jKGRldiwgRU0yOFhYX05VTV9QQUNLRVRTLAotCQkJCSAgICAgIEVNMjhYWF9OVU1fQlVGUywgZGV2LT5tYXhfcGt0X3NpemUsCi0JCQkJICAgICAgZW0yOHh4X2lzb2NfY29weSk7CisJCWlmIChlbTI4eHhfdmJpX3N1cHBvcnRlZChkZXYpID09IDEpCisJCQlyYyA9IGVtMjh4eF9pbml0X2lzb2MoZGV2LCBFTTI4WFhfTlVNX1BBQ0tFVFMsCisJCQkJCSAgICAgIEVNMjhYWF9OVU1fQlVGUywKKwkJCQkJICAgICAgZGV2LT5tYXhfcGt0X3NpemUsCisJCQkJCSAgICAgIGVtMjh4eF9pc29jX2NvcHlfdmJpKTsKKwkJZWxzZQorCQkJcmMgPSBlbTI4eHhfaW5pdF9pc29jKGRldiwgRU0yOFhYX05VTV9QQUNLRVRTLAorCQkJCQkgICAgICBFTTI4WFhfTlVNX0JVRlMsCisJCQkJCSAgICAgIGRldi0+bWF4X3BrdF9zaXplLAorCQkJCQkgICAgICBlbTI4eHhfaXNvY19jb3B5KTsKIAkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gZmFpbDsKIAl9CkBAIC01NzgsMzQgKzgzNiw2MyBAQAogfQogCiAvKiBVc2FnZSBsb2NrIGNoZWNrIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCByZXNfZ2V0KHN0cnVjdCBlbTI4eHhfZmggKmZoKQotewotCXN0cnVjdCBlbTI4eHggICAgKmRldiA9IGZoLT5kZXY7Ci0JaW50CQkgcmMgICA9IDA7Ci0KLQkvKiBUaGlzIGluc3RhbmNlIGFscmVhZHkgaGFzIHN0cmVhbV9vbiAqLwotCWlmIChmaC0+c3RyZWFtX29uKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoZGV2LT5zdHJlYW1fb24pCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlkZXYtPnN0cmVhbV9vbiA9IDE7Ci0JZmgtPnN0cmVhbV9vbiAgPSAxOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCByZXNfY2hlY2soc3RydWN0IGVtMjh4eF9maCAqZmgpCi17Ci0JcmV0dXJuIGZoLT5zdHJlYW1fb247Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc19mcmVlKHN0cnVjdCBlbTI4eHhfZmggKmZoKQorc3RhdGljIGludCByZXNfZ2V0KHN0cnVjdCBlbTI4eHhfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KQogewogCXN0cnVjdCBlbTI4eHggICAgKmRldiA9IGZoLT5kZXY7CiAKLQlmaC0+c3RyZWFtX29uID0gMDsKLQlkZXYtPnN0cmVhbV9vbiA9IDA7CisJaWYgKGZoLT5yZXNvdXJjZXMgJiBiaXQpCisJCS8qIGhhdmUgaXQgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KKwkJcmV0dXJuIDE7CisKKwkvKiBpcyBpdCBmcmVlPyAqLworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKGRldi0+cmVzb3VyY2VzICYgYml0KSB7CisJCS8qIG5vLCBzb21lb25lIGVsc2UgdXNlcyBpdCAqLworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KKwlmaC0+cmVzb3VyY2VzICB8PSBiaXQ7CisJZGV2LT5yZXNvdXJjZXMgfD0gYml0OworCWVtMjh4eF92aWRlb2RiZygicmVzOiBnZXQgJWRcbiIsIGJpdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgZW0yOHh4X2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdCkKK3sKKwlyZXR1cm4gZmgtPnJlc291cmNlcyAmIGJpdDsKK30KKworc3RhdGljIGludCByZXNfbG9ja2VkKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgaW50IGJpdCkKK3sKKwlyZXR1cm4gZGV2LT5yZXNvdXJjZXMgJiBiaXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlc19mcmVlKHN0cnVjdCBlbTI4eHhfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwlzdHJ1Y3QgZW0yOHh4ICAgICpkZXYgPSBmaC0+ZGV2OworCisJQlVHX09OKChmaC0+cmVzb3VyY2VzICYgYml0cykgIT0gYml0cyk7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWZoLT5yZXNvdXJjZXMgICY9IH5iaXRzOworCWRldi0+cmVzb3VyY2VzICY9IH5iaXRzOworCWVtMjh4eF92aWRlb2RiZygicmVzOiBwdXQgJWRcbiIsIGJpdHMpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKK30KKworc3RhdGljIGludCBnZXRfcmVzc291cmNlKHN0cnVjdCBlbTI4eHhfZmggKmZoKQoreworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJcmV0dXJuIEVNMjhYWF9SRVNPVVJDRV9WSURFTzsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CisJCXJldHVybiBFTTI4WFhfUkVTT1VSQ0VfVkJJOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9CiB9CiAKIC8qCkBAIC03ODIsNyArMTA2OSw4IEBACiAJfSBlbHNlIHsKIAkJLyogd2lkdGggbXVzdCBldmVuIGJlY2F1c2Ugb2YgdGhlIFlVWVYgZm9ybWF0CiAJCSAgIGhlaWdodCBtdXN0IGJlIGV2ZW4gYmVjYXVzZSBvZiBpbnRlcmxhY2luZyAqLwotCQl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJndpZHRoLCA0OCwgbWF4dywgMSwgJmhlaWdodCwgMzIsIG1heGgsIDEsIDApOworCQl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJndpZHRoLCA0OCwgbWF4dywgMSwgJmhlaWdodCwgMzIsIG1heGgsCisJCQkJICAgICAgMSwgMCk7CiAJfQogCiAJZ2V0X3NjYWxlKGRldiwgd2lkdGgsIGhlaWdodCwgJmhzY2FsZSwgJnZzY2FsZSk7CkBAIC04NDgsMTIgKzExMzYsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZGV2LT5zdHJlYW1fb24gJiYgIWZoLT5zdHJlYW1fb24pIHsKLQkJZW0yOHh4X2VycmRldigiJXMgZGV2aWNlIGluIHVzZSBieSBhbm90aGVyIGZoXG4iLCBfX2Z1bmNfXyk7Ci0JCXJjID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlyYyA9IGVtMjh4eF9zZXRfdmlkZW9fZm9ybWF0KGRldiwgZi0+Zm10LnBpeC5waXhlbGZvcm1hdCwKIAkJCQlmLT5mbXQucGl4LndpZHRoLCBmLT5mbXQucGl4LmhlaWdodCk7CiAKQEAgLTg2Miw2ICsxMTQ0LDIxIEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IHZpZGlvY19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKm5vcm0pCit7CisJc3RydWN0IGVtMjh4eF9maCAgICpmaCAgPSBwcml2OworCXN0cnVjdCBlbTI4eHggICAgICAqZGV2ID0gZmgtPmRldjsKKwlpbnQgICAgICAgICAgICAgICAgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCSpub3JtID0gZGV2LT5ub3JtOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqbm9ybSkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgKmZoICA9IHByaXY7CkBAIC0xNDEzLDIwICsxNzEwLDI1IEBACiB7CiAJc3RydWN0IGVtMjh4eF9maCAgICAgICpmaCAgPSBwcml2OwogCXN0cnVjdCBlbTI4eHggICAgICAgICAqZGV2ID0gZmgtPmRldjsKLQlpbnQgICAgICAgICAgICAgICAgICAgcmM7CisJaW50ICAgICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKIAogCXJjID0gY2hlY2tfZGV2KGRldik7CiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCisJaWYgKHVubGlrZWx5KHR5cGUgIT0gZmgtPnR5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JcmMgPSByZXNfZ2V0KGZoKTsKKwllbTI4eHhfdmlkZW9kYmcoInZpZGlvY19zdHJlYW1vbiBmaD0lcCB0PSVkIGZoLT5yZXM9JWQgZGV2LT5yZXM9JWRcbiIsCisJCQlmaCwgdHlwZSwgZmgtPnJlc291cmNlcywgZGV2LT5yZXNvdXJjZXMpOwogCi0JaWYgKGxpa2VseShyYyA+PSAwKSkKKwlpZiAodW5saWtlbHkoIXJlc19nZXQoZmgsIGdldF9yZXNzb3VyY2UoZmgpKSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyYyA9IHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJfdmlkcSk7Ci0KLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZiaXEpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTQ0MiwxNyArMTc0NCwyMiBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAmJgorCSAgICBmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodHlwZSAhPSBmaC0+dHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWVtMjh4eF92aWRlb2RiZygidmlkaW9jX3N0cmVhbW9mZiBmaD0lcCB0PSVkIGZoLT5yZXM9JWQgZGV2LT5yZXM9JWRcbiIsCisJCQlmaCwgdHlwZSwgZmgtPnJlc291cmNlcywgZGV2LT5yZXNvdXJjZXMpOwogCi0JdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7Ci0JcmVzX2ZyZWUoZmgpOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7CisJCXJlc19mcmVlKGZoLCBFTTI4WFhfUkVTT1VSQ0VfVklERU8pOworCX0gZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQl2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92YmlxKTsKKwkJcmVzX2ZyZWUoZmgsIEVNMjhYWF9SRVNPVVJDRV9WQkkpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTQ3NCw2ICsxNzgxLDkgQEAKIAkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCisJaWYgKGRldi0+dmJpX2RldikKKwkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVkJJX0NBUFRVUkU7CisKIAlpZiAoZGV2LT5hdWRpb19tb2RlLmhhc19hdWRpbykKIAkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfQVVESU87CiAKQEAgLTE1NDEsNiArMTg1MSw0NSBAQAogCXJldHVybiAwOwogfQogCisvKiBSQVcgVkJJIGlvY3RscyAqLworCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQoreworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gNzIwOworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CisJZm9ybWF0LT5mbXQudmJpLm9mZnNldCA9IDA7CisJZm9ybWF0LT5mbXQudmJpLmZsYWdzID0gMDsKKworCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLworCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOworCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOworCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQoreworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gNzIwOworCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CisJZm9ybWF0LT5mbXQudmJpLm9mZnNldCA9IDA7CisJZm9ybWF0LT5mbXQudmJpLmZsYWdzID0gMDsKKworCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLworCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOworCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOworCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpCkBAIC0xNTUzLDcgKzE5MDIsMTAgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZpZHEsIHJiKTsKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZpZHEsIHJiKTsKKwllbHNlCisJCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmJpcSwgcmIpOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTE1NjcsNyArMTkxOSwxOCBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOworCWVsc2UgeworCQkvKiBGSVhNRTogSSdtIG5vdCBzdXJlIHlldCB3aGV0aGVyIHRoaXMgaXMgYSBidWcgaW4genZiaSBvcgorCQkgICB0aGUgdmlkZW9idWYgZnJhbWV3b3JrLCBidXQgd2UgcHJvYmFibHkgc2hvdWxkbid0IGJlCisJCSAgIHJldHVybmluZyBhIGJ1ZmZlciBsYXJnZXIgdGhhbiB0aGF0IHdoaWNoIHdhcyBhc2tlZCBmb3IuCisJCSAgIEF0IGEgbWluaW11bSwgaXQgY2F1c2VzIGEgY3Jhc2ggaW4genZiaSBzaW5jZSBpdCBkb2VzCisJCSAgIGEgbWVtY3B5IGJhc2VkIG9uIHRoZSBzb3VyY2UgYnVmZmVyIGxlbmd0aCAqLworCQlpbnQgcmVzdWx0ID0gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92YmlxLCBiKTsKKwkJYi0+bGVuZ3RoID0gMTcyODA7CisJCXJldHVybiByZXN1bHQ7CisJfQogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCkBAIC0xNTgwLDcgKzE5NDMsMTAgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmJfdmlkcSwgYik7CisJZWxzZQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZiX3ZiaXEsIGIpOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQpAQCAtMTU5Myw3ICsxOTU5LDEyIEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmlkcSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsIGZpbGUtPmZfZmxhZ3MgJgorCQkJCSAgICAgIE9fTk9OQkxPQ0spOworCWVsc2UKKwkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmJpcSwgYiwgZmlsZS0+Zl9mbGFncyAmCisJCQkJICAgICAgT19OT05CTE9DSyk7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKQEAgLTE2MDEsNyArMTk3MiwxMCBAQAogewogCXN0cnVjdCBlbTI4eHhfZmggICpmaCA9IHByaXY7CiAKLQlyZXR1cm4gdmlkZW9idWZfY2dtYnVmKCZmaC0+dmJfdmlkcSwgbWJ1ZiwgOCk7CisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX2NnbWJ1ZigmZmgtPnZiX3ZpZHEsIG1idWYsIDgpOworCWVsc2UKKwkJcmV0dXJuIHZpZGVvYnVmX2NnbWJ1ZigmZmgtPnZiX3ZiaXEsIG1idWYsIDgpOwogfQogI2VuZGlmCiAKQEAgLTE3NjYsOCArMjE0MCwxNSBAQAogCQlmaWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKIAogCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZmgtPnZiX3ZpZHEsICZlbTI4eHhfdmlkZW9fcW9wcywKLQkJCU5VTEwsICZkZXYtPnNsb2NrLCBmaC0+dHlwZSwgZmllbGQsCi0JCQlzaXplb2Yoc3RydWN0IGVtMjh4eF9idWZmZXIpLCBmaCk7CisJCQkJICAgIE5VTEwsICZkZXYtPnNsb2NrLAorCQkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIGZpZWxkLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGVtMjh4eF9idWZmZXIpLCBmaCk7CisKKwl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZoLT52Yl92YmlxLCAmZW0yOHh4X3ZiaV9xb3BzLAorCQkJCSAgICBOVUxMLCAmZGV2LT5zbG9jaywKKwkJCQkgICAgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSwKKwkJCQkgICAgVjRMMl9GSUVMRF9TRVFfVEIsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgZW0yOHh4X2J1ZmZlciksIGZoKTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIApAQCAtMTgyNCwyMCArMjIwNSwyMSBAQAogCiAJZW0yOHh4X3ZpZGVvZGJnKCJ1c2Vycz0lZFxuIiwgZGV2LT51c2Vycyk7CiAKKwlpZiAocmVzX2NoZWNrKGZoLCBFTTI4WFhfUkVTT1VSQ0VfVklERU8pKSB7CisJCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92aWRxKTsKKwkJcmVzX2ZyZWUoZmgsIEVNMjhYWF9SRVNPVVJDRV9WSURFTyk7CisJfQogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlpZiAocmVzX2NoZWNrKGZoKSkKLQkJcmVzX2ZyZWUoZmgpOworCWlmIChyZXNfY2hlY2soZmgsIEVNMjhYWF9SRVNPVVJDRV9WQkkpKSB7CisJCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92YmlxKTsKKwkJcmVzX2ZyZWUoZmgsIEVNMjhYWF9SRVNPVVJDRV9WQkkpOworCX0KIAogCWlmIChkZXYtPnVzZXJzID09IDEpIHsKLQkJdmlkZW9idWZfc3RvcCgmZmgtPnZiX3ZpZHEpOwotCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52Yl92aWRxKTsKLQogCQkvKiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgZGlzY29ubmVjdCwKIAkJICAgZnJlZSB0aGUgcmVtYWluaW5nIHJlc291cmNlcyAqLwogCQlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKIAkJCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQkJa2ZyZWUoZGV2KTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xODU4LDEwICsyMjQwLDEyIEBACiAJCQkJCSIwIChlcnJvcj0laSlcbiIsIGVyckNvZGUpOwogCQl9CiAJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7CisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmJpcSk7CiAJa2ZyZWUoZmgpOwogCWRldi0+dXNlcnMtLTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmRldi0+b3BlbiwgMSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xODg2LDE2ICsyMjcwLDIyIEBACiAJICovCiAKIAlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JCXJjID0gcmVzX2dldChmaCk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCQlpZiAodW5saWtlbHkocmMgPCAwKSkKLQkJCXJldHVybiByYzsKKwkJaWYgKHJlc19sb2NrZWQoZGV2LCBFTTI4WFhfUkVTT1VSQ0VfVklERU8pKQorCQkJcmV0dXJuIC1FQlVTWTsKIAogCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZoLT52Yl92aWRxLCBidWYsIGNvdW50LCBwb3MsIDAsCiAJCQkJCWZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKIAl9CisKKworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCWlmICghcmVzX2dldChmaCwgRU0yOFhYX1JFU09VUkNFX1ZCSSkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZiX3ZiaXEsIGJ1ZiwgY291bnQsIHBvcywgMCwKKwkJCQkJZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0xOTEzLDE3ICsyMzAzLDE3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlyYyA9IHJlc19nZXQoZmgpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCWlmICh1bmxpa2VseShyYyA8IDApKQorCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJaWYgKCFyZXNfZ2V0KGZoLCBFTTI4WFhfUkVTT1VSQ0VfVklERU8pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxwLCAmZmgtPnZiX3ZpZHEsIHdhaXQpOworCX0gZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQlpZiAoIXJlc19nZXQoZmgsIEVNMjhYWF9SRVNPVVJDRV9WQkkpKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxwLCAmZmgtPnZiX3ZiaXEsIHdhaXQpOworCX0gZWxzZSB7CiAJCXJldHVybiBQT0xMRVJSOwotCi0JaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSBmaC0+dHlwZSkKLQkJcmV0dXJuIFBPTExFUlI7Ci0KLQlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlscCwgJmZoLT52Yl92aWRxLCB3YWl0KTsKKwl9CiB9CiAKIC8qCkBAIC0xOTM5LDE0ICsyMzI5LDEwIEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlyYyA9IHJlc19nZXQoZmgpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCWlmICh1bmxpa2VseShyYyA8IDApKQotCQlyZXR1cm4gcmM7Ci0KLQlyYyA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmlkcSwgdm1hKTsKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyYyA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmlkcSwgdm1hKTsKKwllbHNlIGlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyYyA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmJpcSwgdm1hKTsKIAogCWVtMjh4eF92aWRlb2RiZygidm1hIHN0YXJ0PTB4JTA4bHgsIHNpemU9JWxkLCByZXQ9JWRcbiIsCiAJCSh1bnNpZ25lZCBsb25nKXZtYS0+dm1fc3RhcnQsCkBAIC0xOTcyLDYgKzIzNTgsOCBAQAogCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAogCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCiAJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICAgID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92YmlfY2FwICAgICAgID0gdmlkaW9jX2dfZm10X3ZiaV9jYXAsCisJLnZpZGlvY19zX2ZtdF92YmlfY2FwICAgICAgID0gdmlkaW9jX3NfZm10X3ZiaV9jYXAsCiAJLnZpZGlvY19nX2F1ZGlvICAgICAgICAgICAgID0gdmlkaW9jX2dfYXVkaW8sCiAJLnZpZGlvY19zX2F1ZGlvICAgICAgICAgICAgID0gdmlkaW9jX3NfYXVkaW8sCiAJLnZpZGlvY19jcm9wY2FwICAgICAgICAgICAgID0gdmlkaW9jX2Nyb3BjYXAsCkBAIC0xOTg0LDYgKzIzNzIsNyBAQAogCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKIAkudmlkaW9jX3FidWYgICAgICAgICAgICAgICAgPSB2aWRpb2NfcWJ1ZiwKIAkudmlkaW9jX2RxYnVmICAgICAgICAgICAgICAgPSB2aWRpb2NfZHFidWYsCisJLnZpZGlvY19nX3N0ZCAgICAgICAgICAgICAgID0gdmlkaW9jX2dfc3RkLAogCS52aWRpb2Nfc19zdGQgICAgICAgICAgICAgICA9IHZpZGlvY19zX3N0ZCwKIAkudmlkaW9jX2dfcGFybQkJICAgID0gdmlkaW9jX2dfcGFybSwKIAkudmlkaW9jX3NfcGFybQkJICAgID0gdmlkaW9jX3NfcGFybSwKQEAgLTIxMDUsMTMgKzI0OTQsMTAgQEAKIAlkZXYtPm11dGUgPSAxOwogCWRldi0+dm9sdW1lID0gMHgxZjsKIAotCS8qIGVuYWJsZSB2YmkgY2FwdHVyaW5nICovCi0KIC8qCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBFX0FVRElPU1JDLCAweGMwKTsgYXVkaW8gcmVnaXN0ZXIgKi8KIAl2YWwgPSAodTgpZW0yOHh4X3JlYWRfcmVnKGRldiwgRU0yOFhYX1IwRl9YQ0xLKTsKIAllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRl9YQ0xLLAogCQkJIChFTTI4WFhfWENMS19BVURJT19VTk1VVEUgfCB2YWwpKTsKLQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxMV9WSU5DVFJMLCAweDUxKTsKIAogCWVtMjh4eF9zZXRfb3V0Zm10KGRldik7CiAJZW0yOHh4X2NvbG9ybGV2ZWxzX3NldF9kZWZhdWx0KGRldik7CkBAIC0yMTM0LDE0ICsyNTIwLDE3IEBACiAJfQogCiAJLyogQWxsb2NhdGUgYW5kIGZpbGwgdmJpIHZpZGVvX2RldmljZSBzdHJ1Y3QgKi8KLQlkZXYtPnZiaV9kZXYgPSBlbTI4eHhfdmRldl9pbml0KGRldiwgJmVtMjh4eF92aWRlb190ZW1wbGF0ZSwgInZiaSIpOworCWlmIChlbTI4eHhfdmJpX3N1cHBvcnRlZChkZXYpID09IDEpIHsKKwkJZGV2LT52YmlfZGV2ID0gZW0yOHh4X3ZkZXZfaW5pdChkZXYsICZlbTI4eHhfdmlkZW9fdGVtcGxhdGUsCisJCQkJCQkidmJpIik7CiAKLQkvKiByZWdpc3RlciB2NGwyIHZiaSB2aWRlb19kZXZpY2UgKi8KLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2LCBWRkxfVFlQRV9WQkksCi0JCQkJCXZiaV9ucltkZXYtPmRldm5vXSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZW0yOHh4X2VycmRldigidW5hYmxlIHRvIHJlZ2lzdGVyIHZiaSBkZXZpY2VcbiIpOwotCQlyZXR1cm4gcmV0OworCQkvKiByZWdpc3RlciB2NGwyIHZiaSB2aWRlb19kZXZpY2UgKi8KKwkJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2RldiwgVkZMX1RZUEVfVkJJLAorCQkJCQkgICAgdmJpX25yW2Rldi0+ZGV2bm9dKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVtMjh4eF9lcnJkZXYoInVuYWJsZSB0byByZWdpc3RlciB2YmkgZGV2aWNlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAlpZiAoZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5yYWRpby50eXBlID09IEVNMjhYWF9SQURJTykgewpAQCAtMjE2MSw4ICsyNTUwLDEyIEBACiAJCQkgICAgZGV2LT5yYWRpb19kZXYtPm51bSk7CiAJfQogCi0JZW0yOHh4X2luZm8oIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkIGFuZCAvZGV2L3ZiaSVkXG4iLAotCQkJCWRldi0+dmRldi0+bnVtLCBkZXYtPnZiaV9kZXYtPm51bSk7CisJZW0yOHh4X2luZm8oIlY0TDIgdmlkZW8gZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkXG4iLAorCQkJCWRldi0+dmRldi0+bnVtKTsKKworCWlmIChkZXYtPnZiaV9kZXYpCisJCWVtMjh4eF9pbmZvKCJWNEwyIFZCSSBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZiaSVkXG4iLAorCQkJICAgIGRldi0+dmJpX2Rldi0+bnVtKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAppbmRleCAwZjJiYTlhLi4wYTczZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtMTA5LDYgKzEwOSw3IEBACiAjZGVmaW5lIEVNMjg4Ml9CT0FSRF9FVkdBX0lORFRVQkUJCSAgNzAKICNkZWZpbmUgRU0yODIwX0JPQVJEX1NJTFZFUkNSRVNUX1dFQkNBTSAgICAgICAgICAgNzEKICNkZWZpbmUgRU0yODYxX0JPQVJEX0dBRE1FSV9VVFYzMzBQTFVTICAgICAgICAgICA3MgorI2RlZmluZSBFTTI4NzBfQk9BUkRfUkVERE9fRFZCX0NfVVNCX0JPWCAgICAgICAgICA3MwogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CkBAIC0yMTQsNyArMjE1LDggQEAKIAlpbnQJCQkJdG1wX2J1Zl9sZW47CiAKIAkJLyogU3RvcmVzIGFscmVhZHkgcmVxdWVzdGVkIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICAJKmJ1ZjsKKwlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICAJKnZpZF9idWY7CisJc3RydWN0IGVtMjh4eF9idWZmZXIgICAgCSp2YmlfYnVmOwogCiAJCS8qIFN0b3JlcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGZpZWxkcyAqLwogCWludAkJCQluZmllbGRzOwpAQCAtNDQzLDYgKzQ0NSwxMCBAQAogI2RlZmluZSBFTTI4WFhfQVVESU8gICAweDEwCiAjZGVmaW5lIEVNMjhYWF9EVkIgICAgIDB4MjAKIAorLyogZW0yOHh4IHJlc291cmNlIHR5cGVzICh1c2VkIGZvciByZXNfZ2V0L3Jlc19sb2NrIGV0YyAqLworI2RlZmluZSBFTTI4WFhfUkVTT1VSQ0VfVklERU8gMHgwMQorI2RlZmluZSBFTTI4WFhfUkVTT1VSQ0VfVkJJICAgMHgwMgorCiBzdHJ1Y3QgZW0yOHh4X2F1ZGlvIHsKIAljaGFyIG5hbWVbNTBdOwogCWNoYXIgKnRyYW5zZmVyX2J1ZmZlcltFTTI4WFhfQVVESU9fQlVGU107CkBAIC00NjMsMTAgKzQ2OSwxMSBAQAogCiBzdHJ1Y3QgZW0yOHh4X2ZoIHsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXY7Ci0JdW5zaWduZWQgaW50ICBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLwogCWludCAgICAgICAgICAgcmFkaW87CisJdW5zaWduZWQgaW50ICByZXNvdXJjZXM7CiAKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICAgIHZiX3ZpZHE7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgICB2Yl92YmlxOwogCiAJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgICB0eXBlOwogfTsKQEAgLTQ5Myw3ICs1MDAsNiBAQAogCS8qIFZpbm1vZGUvVmluY3RsIHVzZWQgYXQgdGhlIGRyaXZlciAqLwogCWludCB2aW5tb2RlLCB2aW5jdGw7CiAKLQl1bnNpZ25lZCBpbnQgc3RyZWFtX29uOjE7CS8qIExvY2tzIHN0cmVhbXMgKi8KIAl1bnNpZ25lZCBpbnQgaGFzX2F1ZGlvX2NsYXNzOjE7CiAJdW5zaWduZWQgaW50IGhhc19hbHNhX2F1ZGlvOjE7CiAKQEAgLTU0NCw2ICs1NTAsMTIgQEAKIAllbnVtIGVtMjh4eF9kZXZfc3RhdGUgc3RhdGU7CiAJZW51bSBlbTI4eHhfaW9fbWV0aG9kIGlvOwogCisJLyogdmJpIHJlbGF0ZWQgc3RhdGUgdHJhY2tpbmcgKi8KKwlpbnQgY2FwdHVyZV90eXBlOworCWludCB2YmlfcmVhZDsKKwl1bnNpZ25lZCBjaGFyIGN1cl9maWVsZDsKKworCiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICAgcmVxdWVzdF9tb2R1bGVfd2s7CiAKIAkvKiBsb2NrcyAqLwpAQCAtNTU1LDEwICs1NjcsMTQgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2YmlfZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnJhZGlvX2RldjsKIAorCS8qIHJlc291cmNlcyBpbiB1c2UgKi8KKwl1bnNpZ25lZCBpbnQgcmVzb3VyY2VzOworCiAJdW5zaWduZWQgY2hhciBlZWRhdGFbMjU2XTsKIAogCS8qIElzb2MgY29udHJvbCBzdHJ1Y3QgKi8KIAlzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlIHZpZHE7CisJc3RydWN0IGVtMjh4eF9kbWFxdWV1ZSB2YmlxOwogCXN0cnVjdCBlbTI4eHhfdXNiX2lzb2NfY3RsIGlzb2NfY3RsOwogCXNwaW5sb2NrX3Qgc2xvY2s7CiAKQEAgLTYzOSw2ICs2NTUsNyBAQAogCiBpbnQgZW0yOHh4X2NvbG9ybGV2ZWxzX3NldF9kZWZhdWx0KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X2NhcHR1cmVfc3RhcnQoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgc3RhcnQpOworaW50IGVtMjh4eF92Ymlfc3VwcG9ydGVkKHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X3NldF9vdXRmbXQoc3RydWN0IGVtMjh4eCAqZGV2KTsKIGludCBlbTI4eHhfcmVzb2x1dGlvbl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2KTsKIGludCBlbTI4eHhfc2V0X2FsdGVybmF0ZShzdHJ1Y3QgZW0yOHh4ICpkZXYpOwpAQCAtNjg2LDYgKzcwMyw5IEBACiBpbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KTsKIGludCBlbTI4eHhfaXJfZmluaShzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogCisvKiBQcm92aWRlZCBieSBlbTI4eHgtdmJpLmMgKi8KK2V4dGVybiBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGVtMjh4eF92YmlfcW9wczsKKwogLyogcHJpbnRrIG1hY3JvcyAqLwogCiAjZGVmaW5lIGVtMjh4eF9lcnIoZm10LCBhcmcuLi4pIGRvIHtcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCmluZGV4IGQxYzFlNDUuLjc0MDkyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCkBAIC0xMzc5LDggKzEzNzksMTAgQEAKIAkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAogCQkJICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKIAkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSwKLQkJCSAgICBjYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ICoKLQkJCSAgICAxMDAwICogbXNlY3NfdG9famlmZmllcygxKSApOworCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoCisJCQkJY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqIDEwMDAKKwkJCSAgICApCisJCQkgICk7CiAJCWlmICh0aW1lb3V0IDwgMCkgewogCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCQlyZXR1cm4gdGltZW91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwppbmRleCA4ODk3MjgzLi5mZTJlNDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCkBAIC0xOSw2ICsxOSw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9LY29uZmlnIgogCiBjb25maWcgVVNCX0dTUENBX0NPTkVYCiAJdHJpc3RhdGUgIkNvbmV4YW50IENhbWVyYSBEcml2ZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQppbmRleCAwMzU2MTZiLi5iNzQyMDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKQEAgLTU4LDMgKzU4LDQgQEAKIAogb2JqLSQoQ09ORklHX1VTQl9NNTYwMikgICArPSBtNTYwMi8KIG9iai0kKENPTkZJR19VU0JfU1RWMDZYWCkgKz0gc3R2MDZ4eC8KK29iai0kKENPTkZJR19VU0JfR0w4NjApICAgKz0gZ2w4NjAvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3NzJmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK2NvbmZpZyBVU0JfR0w4NjAKKwl0cmlzdGF0ZSAiR0w4NjAgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgR0w4NjAgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfZ2w4NjAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2M5NDAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACitvYmotJChDT05GSUdfVVNCX0dMODYwKSArPSBnc3BjYV9nbDg2MC5vCisKK2dzcGNhX2dsODYwLW9ianMgOj0gZ2w4NjAubyBcCisJCSAgICBnbDg2MC1taTEzMjAubyBcCisJCSAgICBnbDg2MC1vdjI2NDAubyBcCisJCSAgICBnbDg2MC1vdjk2NTUubyBcCisJCSAgICBnbDg2MC1taTIwMjAubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkxMzIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMTMyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjYyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMTMyMC5jCkBAIC0wLDAgKzEsNTM3IEBACisvKiBAZmlsZSBnbDg2MC1taTEzMjAuYworICogQGF1dGhvciBPbGl2aWVyIExPUklOIGZyb20gbXkgbG9ncworICogQGRhdGUgMjAwOS0wOC0yNworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogU2Vuc29yIDogTUkxMzIwICovCisKKyNpbmNsdWRlICJnbDg2MC5oIgorCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfY29tbW9uW10gPSB7CisJezB4YmEwMCwgMHgwMGYwfSwgezB4YmEwMCwgMHgwMGYxfSwgezB4YmE1MSwgMHgwMDY2fSwgezB4YmEwMiwgMHgwMGYxfSwKKwl7MHhiYTA1LCAweDAwNjd9LCB7MHhiYTA1LCAweDAwZjF9LCB7MHhiYWEwLCAweDAwNjV9LCB7MHhiYTAwLCAweDAwZjF9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4YmEwMCwgMHgwMGYwfSwgezB4YmEwMiwgMHgwMGYxfSwgezB4YmFmYSwgMHgwMDI4fSwgezB4YmEwMiwgMHgwMGYxfSwKKwl7MHhiYTAwLCAweDAwZjB9LCB7MHhiYTAxLCAweDAwZjF9LCB7MHhiYWYwLCAweDAwMDZ9LCB7MHhiYTBlLCAweDAwZjF9LAorCXsweGJhNzAsIDB4MDAwNn0sIHsweGJhMGUsIDB4MDBmMX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHhiYTc0LCAweDAwMDZ9LCB7MHhiYTBlLCAweDAwZjF9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4MDA2MSwgMHgwMDAwfSwgezB4MDA2OCwgMHgwMDBkfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9pbml0X2F0X3N0YXJ0dXBbXSA9IHsKKwl7MHgwMDAwLCAweDAwMDB9LCB7MHgwMDEwLCAweDAwMTB9LAorCXszNSwgMHhmZmZmfSwKKwl7MHgwMDA4LCAweDAwYzB9LCB7MHgwMDAxLCAweDAwYzF9LCB7MHgwMDAxLCAweDAwYzJ9LCB7MHgwMDIwLCAweDAwMDZ9LAorCXsweDAwNmEsIDB4MDAwZH0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbltdID0geworCXsweDAwMTAsIDB4MDAxMH0sIHsweDAwMDMsIDB4MDBjMX0sIHsweDAwNDIsIDB4MDBjMn0sIHsweDAwNDAsIDB4MDAwMH0sCisJezB4MDA2YSwgMHgwMDA3fSwgezB4MDA2YSwgMHgwMDBkfSwgezB4MDA2MywgMHgwMDA2fSwKK307CitzdGF0aWMgc3RydWN0IHZhbGlkeCB0Ymxfc2Vuc29yX3NldHRpbmdzXzEyODBbXSA9IHsKKwl7MHhiYTAwLCAweDAwZjB9LCB7MHhiYTAwLCAweDAwZjF9LCB7MHhiYTVhLCAweDAwNjZ9LCB7MHhiYTAyLCAweDAwZjF9LAorCXsweGJhMDUsIDB4MDA2N30sIHsweGJhMDUsIDB4MDBmMX0sIHsweGJhMjAsIDB4MDA2NX0sIHsweGJhMDAsIDB4MDBmMX0sCit9Oworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3NlbnNvcl9zZXR0aW5nc184MDBbXSA9IHsKKwl7MHhiYTAwLCAweDAwZjB9LCB7MHhiYTAwLCAweDAwZjF9LCB7MHhiYTVhLCAweDAwNjZ9LCB7MHhiYTAyLCAweDAwZjF9LAorCXsweGJhMDUsIDB4MDA2N30sIHsweGJhMDUsIDB4MDBmMX0sIHsweGJhMjAsIDB4MDA2NX0sIHsweGJhMDAsIDB4MDBmMX0sCit9Oworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3NlbnNvcl9zZXR0aW5nc182NDBbXSA9IHsKKwl7MHhiYTAwLCAweDAwZjB9LCB7MHhiYTAwLCAweDAwZjF9LCB7MHhiYWEwLCAweDAwNjV9LCB7MHhiYTAwLCAweDAwZjF9LAorCXsweGJhNTEsIDB4MDA2Nn0sIHsweGJhMDIsIDB4MDBmMX0sIHsweGJhMDUsIDB4MDA2N30sIHsweGJhMDUsIDB4MDBmMX0sCisJezB4YmEyMCwgMHgwMDY1fSwgezB4YmEwMCwgMHgwMGYxfSwKK307CitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfcG9zdF91bnNldF9hbHRbXSA9IHsKKwl7MHhiYTAwLCAweDAwZjB9LCB7MHhiYTAwLCAweDAwZjF9LCB7MHhiYWEwLCAweDAwNjV9LCB7MHhiYTAwLCAweDAwZjF9LAorCXsweDAwNjEsIDB4MDAwMH0sIHsweDAwNjgsIDB4MDAwZH0sCit9OworCitzdGF0aWMgdTggKnRibF8xMjgwW10gPSB7CisJIlx4MGRceDgwXHhmMVx4MDhceDAzXHgwNFx4ZjFceDAwIiAiXHgwNFx4MDVceGYxXHgwMlx4MDVceDAwXHhmMVx4ZjEiCisJIlx4MDZceDAwXHhmMVx4MGRceDIwXHgwMVx4ZjFceDAwIiAiXHgyMVx4ODRceGYxXHgwMFx4MGRceDAwXHhmMVx4MDgiCisJIlx4ZjBceDAwXHhmMVx4MDFceDM0XHgwMFx4ZjFceDAwIiAiXHg5Ylx4NDNceGYxXHgwMFx4YTZceDA1XHhmMVx4MDAiCisJIlx4YTlceDA0XHhmMVx4MDBceGExXHgwNVx4ZjFceDAwIiAiXHhhNFx4MDRceGYxXHgwMFx4YWVceDBhXHhmMVx4MDgiCisJLAorCSJceGYwXHgwMFx4ZjFceDAyXHgzYVx4MDVceGYxXHhmMSIgIlx4M2NceDA1XHhmMVx4ZjFceDU5XHgwMVx4ZjFceDQ3IgorCSJceDVhXHgwMVx4ZjFceDg4XHg1Y1x4MGFceGYxXHgwNiIgIlx4NWRceDBlXHhmMVx4MGFceDY0XHg1ZVx4ZjFceDFjIgorCSJceGQyXHgwMFx4ZjFceGNmXHhjYlx4MDBceGYxXHgwMSIKKwksCisJIlx4ZDNceDAyXHhkNFx4MjhceGQ1XHgwMVx4ZDBceDAyIiAiXHhkMVx4MThceGQyXHhjMSIKK307CisKK3N0YXRpYyB1OCAqdGJsXzgwMFtdID0geworCSJceDBkXHg4MFx4ZjFceDA4XHgwM1x4MDNceGYxXHhjMCIgIlx4MDRceDA1XHhmMVx4MDJceDA1XHgwMFx4ZjFceGYxIgorCSJceDA2XHgwMFx4ZjFceDBkXHgyMFx4MDFceGYxXHgwMCIgIlx4MjFceDg0XHhmMVx4MDBceDBkXHgwMFx4ZjFceDA4IgorCSJceGYwXHgwMFx4ZjFceDAxXHgzNFx4MDBceGYxXHgwMCIgIlx4OWJceDQzXHhmMVx4MDBceGE2XHgwNVx4ZjFceDAwIgorCSJceGE5XHgwM1x4ZjFceGMwXHhhMVx4MDNceGYxXHgyMCIgIlx4YTRceDAyXHhmMVx4NWFceGFlXHgwYVx4ZjFceDA4IgorCSwKKwkiXHhmMFx4MDBceGYxXHgwMlx4M2FceDA1XHhmMVx4ZjEiICJceDNjXHgwNVx4ZjFceGYxXHg1OVx4MDFceGYxXHg0NyIKKwkiXHg1YVx4MDFceGYxXHg4OFx4NWNceDBhXHhmMVx4MDYiICJceDVkXHgwZVx4ZjFceDBhXHg2NFx4NWVceGYxXHgxYyIKKwkiXHhkMlx4MDBceGYxXHhjZlx4Y2JceDAwXHhmMVx4MDEiCisJLAorCSJceGQzXHgwMlx4ZDRceDE4XHhkNVx4MjFceGQwXHgwMiIgIlx4ZDFceDEwXHhkMlx4NTkiCit9OworCitzdGF0aWMgdTggKnRibF82NDBbXSA9IHsKKwkiXHgwZFx4ODBceGYxXHgwOFx4MDNceDA0XHhmMVx4MDQiICJceDA0XHgwNVx4ZjFceDAyXHgwN1x4MDFceGYxXHg3YyIKKwkiXHgwOFx4MDBceGYxXHgwZVx4MjFceDgwXHhmMVx4MDAiICJceDBkXHgwMFx4ZjFceDA4XHhmMFx4MDBceGYxXHgwMSIKKwkiXHgzNFx4MTBceGYxXHgxMFx4M2FceDQzXHhmMVx4MDAiICJceGE2XHgwNVx4ZjFceDAyXHhhOVx4MDRceGYxXHgwNCIKKwkiXHhhN1x4MDJceGYxXHg4MVx4YWFceDAxXHhmMVx4ZTIiICJceGFlXHgwY1x4ZjFceDA5IgorCSwKKwkiXHhmMFx4MDBceGYxXHgwMlx4MzlceDAzXHhmMVx4ZmMiICJceDNiXHgwNFx4ZjFceDA0XHg1N1x4MDFceGYxXHhiNiIKKwkiXHg1OFx4MDJceGYxXHgwZFx4NWNceDFmXHhmMVx4MTkiICJceDVkXHgyNFx4ZjFceDFlXHg2NFx4NWVceGYxXHgxYyIKKwkiXHhkMlx4MDBceGYxXHgwMFx4Y2JceDAwXHhmMVx4MDEiCisJLAorCSJceGQzXHgwMlx4ZDRceDEwXHhkNVx4ODFceGQwXHgwMiIgIlx4ZDFceDA4XHhkMlx4ZTEiCit9OworCitzdGF0aWMgczMyIHRibF9zYXRbXSA9IHsweDI1LCAweDFkLCAweDE1LCAweDBkLCAweDA1LCAweDRkLCAweDU1LCAweDVkLCAweDJkfTsKK3N0YXRpYyBzMzIgdGJsX2JyaWdodFtdID0gezAsIDgsIDB4MTAsIDB4MjAsIDB4MzAsIDB4NDAsIDB4NTAsIDB4NjAsIDB4NzB9Oworc3RhdGljIHMzMiB0YmxfYmFja2xpZ2h0W10gPSB7MHgwZSwgMHgwNiwgMHgwMn07CisKK3N0YXRpYyBzMzIgdGJsX2NudHIxW10gPSB7CisJMHg5MCwgMHg5OCwgMHhhMCwgMHhhOCwgMHhiMCwgMHhiOCwgMHhjMCwgMHhjOCwgMHhkMCwgMHhlMCwgMHhmMH07CitzdGF0aWMgczMyIHRibF9jbnRyMltdID0geworCTB4NzAsIDB4NjgsIDB4NjAsIDB4NTgsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MzgsIDB4MzAsIDB4MjAsIDB4MTB9OworCitzdGF0aWMgdTggZGF0X3diYWxOTFtdID0KKwkiXHhmMFx4MDBceGYxXHgwMVx4MDVceDAwXHhmMVx4MDYiICJceDNiXHgwNFx4ZjFceDJhXHg0N1x4MTBceGYxXHgxMCIKKwkiXHg5ZFx4M2NceGYxXHhhZVx4YWZceDEwXHhmMVx4MDAiICJceGYwXHgwMFx4ZjFceDAyXHgyZlx4OTFceGYxXHgyMCIKKwkiXHg5Y1x4OTFceGYxXHgyMFx4MzdceDAzXHhmMVx4MDAiICJceDlkXHhjNVx4ZjFceDBmXHhmMFx4MDBceGYxXHgwMCI7CisKK3N0YXRpYyB1OCBkYXRfd2JhbExMW10gPQorCSJceGYwXHgwMFx4ZjFceDAxXHgwNVx4MDBceGYxXHgwYyIgIlx4M2JceDA0XHhmMVx4MmFceDQ3XHg0MFx4ZjFceDQwIgorCSJceDlkXHgyMFx4ZjFceGFlXHhhZlx4MTBceGYxXHgwMCIgIlx4ZjBceDAwXHhmMVx4MDJceDJmXHhkMVx4ZjFceDAwIgorCSJceDljXHhkMVx4ZjFceDAwXHgzN1x4MDNceGYxXHgwMCIgIlx4OWRceGM1XHhmMVx4M2ZceGYwXHgwMFx4ZjFceDAwIjsKKworc3RhdGljIHU4IGRhdF93YmFsQkxbXSA9CisJIlx4ZjBceDAwXHhmMVx4MDFceDA1XHgwMFx4ZjFceDA2IiAiXHg0N1x4MTBceGYxXHgzMFx4OWRceDNjXHhmMVx4YWUiCisJIlx4YWZceDEwXHhmMVx4MDBceGYwXHgwMFx4ZjFceDAyIiAiXHgyZlx4OTFceGYxXHgyMFx4OWNceDkxXHhmMVx4MjAiCisJIlx4MzdceDAzXHhmMVx4MDBceDlkXHhjNVx4ZjFceDJmIiAiXHhmMFx4MDBceGYxXHgwMCI7CisKK3N0YXRpYyB1OCBkYXRfaHZmbGlwMVtdID0gezB4ZjAsIDB4MDAsIDB4ZjEsIDB4MDB9OworCitzdGF0aWMgdTggczAwMFtdID0KKwkiXHgwMFx4MDFceDA3XHg2YVx4MDZceDYzXHgwZFx4NmEiICJceGMwXHgwMFx4MTBceDEwXHhjMVx4MDNceGMyXHg0MiIKKwkiXHhkOFx4MDRceDU4XHgwMFx4MDRceDAyIjsKK3N0YXRpYyB1OCBzMDAxW10gPQorCSJceDBkXHgwMFx4ZjFceDBiXHgwZFx4MDBceGYxXHgwOCIgIlx4MzVceDAwXHhmMVx4MjJceDY4XHgwMFx4ZjFceDVkIgorCSJceGYwXHgwMFx4ZjFceDAxXHgwNlx4NzBceGYxXHgwZSIgIlx4ZjBceDAwXHhmMVx4MDJceGRkXHgxOFx4ZjFceGUwIjsKK3N0YXRpYyB1OCBzMDAyW10gPQorCSJceDA1XHgwMVx4ZjFceDg0XHgwNlx4MDBceGYxXHg0NCIgIlx4MDdceDAwXHhmMVx4YmVceDA4XHgwMFx4ZjFceDFlIgorCSJceDIwXHgwMVx4ZjFceDAzXHgyMVx4ODRceGYxXHgwMCIgIlx4MjJceDBkXHhmMVx4MGZceDI0XHg4MFx4ZjFceDAwIgorCSJceDM0XHgxOFx4ZjFceDJkXHgzNVx4MDBceGYxXHgyMiIgIlx4NDNceDgzXHhmMVx4ODNceDU5XHgwMFx4ZjFceGZmIjsKK3N0YXRpYyB1OCBzMDAzW10gPQorCSJceGYwXHgwMFx4ZjFceDAyXHgzOVx4MDZceGYxXHg4YyIgIlx4M2FceDA2XHhmMVx4OGNceDNiXHgwM1x4ZjFceGRhIgorCSJceDNjXHgwNVx4ZjFceDMwXHg1N1x4MDFceGYxXHgwYyIgIlx4NThceDAxXHhmMVx4NDJceDU5XHgwMVx4ZjFceDBjIgorCSJceDVhXHgwMVx4ZjFceDQyXHg1Y1x4MTNceGYxXHgwZSIgIlx4NWRceDE3XHhmMVx4MTJceDY0XHgxZVx4ZjFceDFjIjsKK3N0YXRpYyB1OCBzMDA0W10gPQorCSJceGYwXHgwMFx4ZjFceDAyXHgyNFx4NWZceGYxXHgyMCIgIlx4MjhceGVhXHhmMVx4MDJceDVmXHg0MVx4ZjFceDQzIjsKK3N0YXRpYyB1OCBzMDA1W10gPQorCSJceDAyXHgwMFx4ZjFceGVlXHgwM1x4MjlceGYxXHgxYSIgIlx4MDRceDAyXHhmMVx4YTRceDA5XHgwMFx4ZjFceDY4IgorCSJceDBhXHgwMFx4ZjFceDJhXHgwYlx4MDBceGYxXHgwNCIgIlx4MGNceDAwXHhmMVx4OTNceDBkXHgwMFx4ZjFceDgyIgorCSJceDBlXHgwMFx4ZjFceDQwXHgwZlx4MDBceGYxXHg1ZiIgIlx4MTBceDAwXHhmMVx4NGVceDExXHgwMFx4ZjFceDViIjsKK3N0YXRpYyB1OCBzMDA2W10gPQorCSJceDE1XHgwMFx4ZjFceGM5XHgxNlx4MDBceGYxXHg1ZSIgIlx4MTdceDAwXHhmMVx4OWRceDE4XHgwMFx4ZjFceDA2IgorCSJceDE5XHgwMFx4ZjFceDg5XHgxYVx4MDBceGYxXHgxMiIgIlx4MWJceDAwXHhmMVx4YTFceDFjXHgwMFx4ZjFceGU0IgorCSJceDFkXHgwMFx4ZjFceDdhXHgxZVx4MDBceGYxXHg2NCIgIlx4ZjZceDAwXHhmMVx4NWYiOworc3RhdGljIHU4IHMwMDdbXSA9CisJIlx4ZjBceDAwXHhmMVx4MDFceDUzXHgwOVx4ZjFceDAzIiAiXHg1NFx4M2RceGYxXHgxY1x4NTVceDk5XHhmMVx4NzIiCisJIlx4NTZceGMxXHhmMVx4YjFceDU3XHhkOFx4ZjFceGNlIiAiXHg1OFx4ZTBceGYxXHgwMFx4ZGNceDBhXHhmMVx4MDMiCisJIlx4ZGRceDQ1XHhmMVx4MjBceGRlXHhhZVx4ZjFceDgyIiAiXHhkZlx4ZGNceGYxXHhjOVx4ZTBceGY2XHhmMVx4ZWEiCisJIlx4ZTFceGZmXHhmMVx4MDAiOworc3RhdGljIHU4IHMwMDhbXSA9CisJIlx4ZjBceDAwXHhmMVx4MDFceDgwXHgwMFx4ZjFceDA2IiAiXHg4MVx4ZjZceGYxXHgwOFx4ODJceGZiXHhmMVx4ZjciCisJIlx4ODNceDAwXHhmMVx4ZmVceGI2XHgwN1x4ZjFceDAzIiAiXHhiN1x4MThceGYxXHgwY1x4ODRceGZiXHhmMVx4MDYiCisJIlx4ODVceGZiXHhmMVx4ZjlceDg2XHgwMFx4ZjFceGZmIiAiXHhiOFx4MDdceGYxXHgwNFx4YjlceDE2XHhmMVx4MGEiOworc3RhdGljIHU4IHMwMDlbXSA9CisJIlx4ODdceGZhXHhmMVx4MDVceDg4XHhmY1x4ZjFceGY5IiAiXHg4OVx4MDBceGYxXHhmZlx4YmFceDA2XHhmMVx4MDMiCisJIlx4YmJceDE3XHhmMVx4MDlceDhhXHhlOFx4ZjFceDE0IiAiXHg4Ylx4ZjdceGYxXHhmMFx4OGNceGZkXHhmMVx4ZmEiCisJIlx4OGRceDAwXHhmMVx4MDBceGJjXHgwNVx4ZjFceDAxIiAiXHhiZFx4MGNceGYxXHgwOFx4YmVceDAwXHhmMVx4MTQiOworc3RhdGljIHU4IHMwMTBbXSA9CisJIlx4OGVceGVhXHhmMVx4MTNceDhmXHhmN1x4ZjFceGYyIiAiXHg5MFx4ZmRceGYxXHhmYVx4OTFceDAwXHhmMVx4MDAiCisJIlx4YmZceDA1XHhmMVx4MDFceGMwXHgwYVx4ZjFceDA4IiAiXHhjMVx4MDBceGYxXHgwY1x4OTJceGVkXHhmMVx4MGYiCisJIlx4OTNceGY5XHhmMVx4ZjRceDk0XHhmZVx4ZjFceGZiIiAiXHg5NVx4MDBceGYxXHgwMFx4YzJceDA0XHhmMVx4MDEiCisJIlx4YzNceDBhXHhmMVx4MDdceGM0XHgwMFx4ZjFceDEwIjsKK3N0YXRpYyB1OCBzMDExW10gPQorCSJceGYwXHgwMFx4ZjFceDAxXHgwNVx4MDBceGYxXHgwNiIgIlx4MjVceDAwXHhmMVx4NTVceDM0XHgxMFx4ZjFceDEwIgorCSJceDM1XHhmMFx4ZjFceDEwXHgzYVx4MDJceGYxXHgwMyIgIlx4M2JceDA0XHhmMVx4MmFceDliXHg0M1x4ZjFceDAwIgorCSJceGE0XHgwM1x4ZjFceGMwXHhhN1x4MDJceGYxXHg4MSI7CisKK3N0YXRpYyBpbnQgIG1pMTMyMF9pbml0X2F0X3N0YXJ0dXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG1pMTMyMF9jb25maWd1cmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTEzMjBfaW5pdF9wcmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTEzMjBfaW5pdF9wb3N0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgbWkxMzIwX3Bvc3RfdW5zZXRfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTEzMjBfc2Vuc29yX3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBtaTEzMjBfY2FtZXJhX3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwordm9pZCBtaTEzMjBfaW5pdF9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnZjdXIuYmFja2xpZ2h0ICA9ICAwOworCXNkLT52Y3VyLmJyaWdodG5lc3MgPSAgMDsKKwlzZC0+dmN1ci5zaGFycG5lc3MgID0gIDY7CisJc2QtPnZjdXIuY29udHJhc3QgICA9IDEwOworCXNkLT52Y3VyLmdhbW1hICAgICAgPSAyMDsKKwlzZC0+dmN1ci5odWUgICAgICAgID0gIDA7CisJc2QtPnZjdXIuc2F0dXJhdGlvbiA9ICA2OworCXNkLT52Y3VyLndoaXRlYmFsICAgPSAgMDsKKwlzZC0+dmN1ci5taXJyb3IgICAgID0gMDsKKwlzZC0+dmN1ci5mbGlwICAgICAgID0gMDsKKwlzZC0+dmN1ci5BQzUwSHogICAgID0gMTsKKworCXNkLT52bWF4LmJhY2tsaWdodCAgPSAgMjsKKwlzZC0+dm1heC5icmlnaHRuZXNzID0gIDg7CisJc2QtPnZtYXguc2hhcnBuZXNzICA9ICA3OworCXNkLT52bWF4LmNvbnRyYXN0ICAgPSAgMDsgLyogMTAgYnV0IG5vdCB3b3JraW5nIHdpdGggdGlocyBkcml2ZXIgKi8KKwlzZC0+dm1heC5nYW1tYSAgICAgID0gNDA7CisJc2QtPnZtYXguaHVlICAgICAgICA9ICA1ICsgMTsKKwlzZC0+dm1heC5zYXR1cmF0aW9uID0gIDg7CisJc2QtPnZtYXgud2hpdGViYWwgICA9ICAyOworCXNkLT52bWF4Lm1pcnJvciAgICAgPSAxOworCXNkLT52bWF4LmZsaXAgICAgICAgPSAxOworCXNkLT52bWF4LkFDNTBIeiAgICAgPSAxOworCisJc2QtPmRldl9jYW1lcmFfc2V0dGluZ3MgPSBtaTEzMjBfY2FtZXJhX3NldHRpbmdzOworCXNkLT5kZXZfaW5pdF9hdF9zdGFydHVwID0gbWkxMzIwX2luaXRfYXRfc3RhcnR1cDsKKwlzZC0+ZGV2X2NvbmZpZ3VyZV9hbHQgICA9IG1pMTMyMF9jb25maWd1cmVfYWx0OworCXNkLT5kZXZfaW5pdF9wcmVfYWx0ICAgID0gbWkxMzIwX2luaXRfcHJlX2FsdDsKKwlzZC0+ZGV2X3Bvc3RfdW5zZXRfYWx0ICA9IG1pMTMyMF9wb3N0X3Vuc2V0X2FsdDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGNvbW1vbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIG47IC8qIHJlc2VydmVkIGZvciBGRVRDSCBtYWNyb3MgKi8KKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsIDIyLCBzMDAwKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MSwgMHgwMDAwLCAwLCBOVUxMKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCAzMiwgczAwMSk7CisJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9jb21tb24sIEFSUkFZX1NJWkUodGJsX2NvbW1vbikpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDQ4LCBzMDAyKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0OCwgczAwMyk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgMTYsIHMwMDQpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDQ4LCBzMDA1KTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0NCwgczAwNik7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uLAorCQkJCQlBUlJBWV9TSVpFKHRibF9jb21tb24pLCBuKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA1MiwgczAwNyk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNDgsIHMwMDgpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDQ4LCBzMDA5KTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA1NiwgczAxMCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uLAorCQkJCQlBUlJBWV9TSVpFKHRibF9jb21tb24pLCBuKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0MCwgczAxMSk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uLAorCQkJCQlBUlJBWV9TSVpFKHRibF9jb21tb24pLCBuKTsKK30KKworc3RhdGljIGludCBtaTEzMjBfaW5pdF9hdF9zdGFydHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9hdF9zdGFydHVwLAorCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfYXRfc3RhcnR1cCkpOworCisJY29tbW9uKGdzcGNhX2Rldik7CisKKy8qCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMTEsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pMTMyMF9pbml0X3ByZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5taXJyb3JNYXNrID0gMDsKKworCXNkLT52b2xkLmJhY2tsaWdodCAgPSAtMTsKKwlzZC0+dm9sZC5icmlnaHRuZXNzID0gLTE7CisJc2QtPnZvbGQuc2hhcnBuZXNzICA9IC0xOworCXNkLT52b2xkLmNvbnRyYXN0ICAgPSAtMTsKKwlzZC0+dm9sZC5zYXR1cmF0aW9uID0gLTE7CisJc2QtPnZvbGQuZ2FtbWEgICAgPSAtMTsKKwlzZC0+dm9sZC5odWUgICAgICA9IC0xOworCXNkLT52b2xkLndoaXRlYmFsID0gLTE7CisJc2QtPnZvbGQubWlycm9yICAgPSAtMTsKKwlzZC0+dm9sZC5mbGlwICAgICA9IC0xOworCXNkLT52b2xkLkFDNTBIeiAgID0gLTE7CisKKwljb21tb24oZ3NwY2FfZGV2KTsKKworCW1pMTMyMF9zZW5zb3Jfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKKworCW1pMTMyMF9pbml0X3Bvc3RfYWx0KGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaTEzMjBfaW5pdF9wb3N0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJbWkxMzIwX2NhbWVyYV9zZXR0aW5ncyhnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWkxMzIwX3NlbnNvcl9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgNSwgMHgwMDAxLCAweDAwMDAsIDAsIE5VTEwpOworCisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb24sCisJCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbikpOworCisJc3dpdGNoIChyZXNvKSB7CisJY2FzZSBJTUFHRV8xMjgwOgorCQlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0Ymxfc2Vuc29yX3NldHRpbmdzXzEyODAsCisJCQkJCUFSUkFZX1NJWkUodGJsX3NlbnNvcl9zZXR0aW5nc18xMjgwKSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDY0LCB0YmxfMTI4MFswXSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDQwLCB0YmxfMTI4MFsxXSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsIDEyLCB0YmxfMTI4MFsyXSk7CisJCWJyZWFrOworCisJY2FzZSBJTUFHRV84MDA6CisJCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfODAwLAorCQkJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfODAwKSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHhiYTAwLCAweDAyMDAsIDY0LCB0YmxfODAwWzBdKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNDAsIHRibF84MDBbMV0pOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAxMiwgdGJsXzgwMFsyXSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc182NDAsCisJCQkJCUFSUkFZX1NJWkUodGJsX3NlbnNvcl9zZXR0aW5nc182NDApKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNjAsIHRibF82NDBbMF0pOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0MCwgdGJsXzY0MFsxXSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsIDEyLCB0YmxfNjQwWzJdKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pMTMyMF9jb25maWd1cmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCisJc3dpdGNoIChyZXNvKSB7CisJY2FzZSBJTUFHRV82NDA6CisJCWdzcGNhX2Rldi0+YWx0ID0gMyArIDE7CisJCWJyZWFrOworCisJY2FzZSBJTUFHRV84MDA6CisJY2FzZSBJTUFHRV8xMjgwOgorCQlnc3BjYV9kZXYtPmFsdCA9IDEgKyAxOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBtaTEzMjBfY2FtZXJhX3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzMzIgYmFja2xpZ2h0ID0gc2QtPnZjdXIuYmFja2xpZ2h0OworCXMzMiBicmlnaHQgPSBzZC0+dmN1ci5icmlnaHRuZXNzOworCXMzMiBzaGFycCAgPSBzZC0+dmN1ci5zaGFycG5lc3M7CisJczMyIGNudHIgICA9IHNkLT52Y3VyLmNvbnRyYXN0OworCXMzMiBnYW0JICAgPSBzZC0+dmN1ci5nYW1tYTsKKwlzMzIgaHVlICAgID0gc2QtPnZjdXIuaHVlOworCXMzMiBzYXQJICAgPSBzZC0+dmN1ci5zYXR1cmF0aW9uOworCXMzMiB3YmFsICAgPSBzZC0+dmN1ci53aGl0ZWJhbDsKKwlzMzIgbWlycm9yID0gKCgoc2QtPnZjdXIubWlycm9yID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKKwlzMzIgZmxpcCAgID0gKCgoc2QtPnZjdXIuZmxpcCAgID4gMCkgXiBzZC0+bWlycm9yTWFzaykgPiAwKTsKKwlzMzIgZnJlcSAgID0gKHNkLT52Y3VyLkFDNTBIeiA+IDApOworCXMzMiBpOworCisJaWYgKGZyZXEgIT0gc2QtPnZvbGQuQUM1MEh6KSB7CisJCXNkLT52b2xkLkFDNTBIeiA9IGZyZXE7CisKKwkJZnJlcSA9IDIgKiAoZnJlcSA9PSAwKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAsIDB4MDBmMCwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAyLCAweDAwZjEsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCAgICAgICAsIDB4MDA1YiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAxICsgZnJlcSwgMHgwMGYxLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAod2JhbCAhPSBzZC0+dm9sZC53aGl0ZWJhbCkgeworCQlzZC0+dm9sZC53aGl0ZWJhbCA9IHdiYWw7CisJCWlmICh3YmFsIDwgMCB8fCB3YmFsID4gc2QtPnZtYXgud2hpdGViYWwpCisJCQl3YmFsID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAod2JhbCA9PSAwKSB7IC8qIE5vcm1hbCBsaWdodCAqLworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwKKwkJCQkJCTB4MDAxMCwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsCisJCQkJCQkweDAwMDMsIDB4MDBjMSwgMCwgTlVMTCk7CisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLAorCQkJCQkJMHgwMDQyLCAweDAwYzIsIDAsIE5VTEwpOworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywKKwkJCQkJCTB4YmEwMCwgMHgwMjAwLCA0OCwgZGF0X3diYWxOTCk7CisJCQl9CisKKwkJCWlmICh3YmFsID09IDEpIHsgLyogTG93IGxpZ2h0ICovCisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLAorCQkJCQkJMHgwMDEwLCAweDAwMTAsIDAsIE5VTEwpOworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwKKwkJCQkJCTB4MDAwNCwgMHgwMGMxLCAwLCBOVUxMKTsKKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsCisJCQkJCQkweDAwNDMsIDB4MDBjMiwgMCwgTlVMTCk7CisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLAorCQkJCQkJMHhiYTAwLCAweDAyMDAsIDQ4LCBkYXRfd2JhbExMKTsKKwkJCX0KKworCQkJaWYgKHdiYWwgPT0gMikgeyAvKiBCYWNrIGxpZ2h0ICovCisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLAorCQkJCQkJMHgwMDEwLCAweDAwMTAsIDAsIE5VTEwpOworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwKKwkJCQkJCTB4MDAwMywgMHgwMGMxLCAwLCBOVUxMKTsKKwkJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsCisJCQkJCQkweDAwNDIsIDB4MDBjMiwgMCwgTlVMTCk7CisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLAorCQkJCQkJMHhiYTAwLCAweDAyMDAsIDQ0LCBkYXRfd2JhbEJMKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChicmlnaHQgIT0gc2QtPnZvbGQuYnJpZ2h0bmVzcykgeworCQlzZC0+dm9sZC5icmlnaHRuZXNzID0gYnJpZ2h0OworCQlpZiAoYnJpZ2h0IDwgMCB8fCBicmlnaHQgPiBzZC0+dm1heC5icmlnaHRuZXNzKQorCQkJYnJpZ2h0ID0gMDsKKworCQlicmlnaHQgPSB0YmxfYnJpZ2h0W2JyaWdodF07CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgKyBicmlnaHQsIDB4MDAzNCwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICsgYnJpZ2h0LCAweDAwZjEsIDAsIE5VTEwpOworCX0KKworCWlmIChzYXQgIT0gc2QtPnZvbGQuc2F0dXJhdGlvbikgeworCQlzZC0+dm9sZC5zYXR1cmF0aW9uID0gc2F0OworCQlpZiAoc2F0IDwgMCB8fCBzYXQgPiBzZC0+dm1heC5zYXR1cmF0aW9uKQorCQkJc2F0ID0gMDsKKworCQlzYXQgPSB0Ymxfc2F0W3NhdF07CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgICAgICAsIDB4MDAyNSwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICsgc2F0LCAweDAwZjEsIDAsIE5VTEwpOworCX0KKworCWlmIChzaGFycCAhPSBzZC0+dm9sZC5zaGFycG5lc3MpIHsKKwkJc2QtPnZvbGQuc2hhcnBuZXNzID0gc2hhcnA7CisJCWlmIChzaGFycCA8IDAgfHwgc2hhcnAgPiBzZC0+dm1heC5zaGFycG5lc3MpCisJCQlzaGFycCA9IDA7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAsIDB4MDBmMCwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAxLCAweDAwZjEsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCAgICAgICAgLCAweDAwMDUsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMCArIHNoYXJwLCAweDAwZjEsIDAsIE5VTEwpOworCX0KKworCWlmIChodWUgIT0gc2QtPnZvbGQuaHVlKSB7CisJCS8qIDA9bm9ybWFsICAxPU5CICAyPSJzZXBpYSIgIDM9bmVnYXRpdmUgIDQ9b3RoZXIgIDU9b3RoZXIyICovCisJCWlmIChodWUgPCAwIHx8IGh1ZSA+IHNkLT52bWF4Lmh1ZSkKKwkJCWh1ZSA9IDA7CisJCWlmIChodWUgPT0gc2QtPnZtYXguaHVlKQorCQkJc2QtPnN3YXBSQiA9IDE7CisJCWVsc2UKKwkJCXNkLT5zd2FwUkIgPSAwOworCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhNzAsIDB4MDBlMiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwICsgaHVlICogKGh1ZSA8IDYpLCAweDAwZjEsCisJCQkJCQkJMCwgTlVMTCk7CisJfQorCisJaWYgKGJhY2tsaWdodCAhPSBzZC0+dm9sZC5iYWNrbGlnaHQpIHsKKwkJc2QtPnZvbGQuYmFja2xpZ2h0ID0gYmFja2xpZ2h0OworCQlpZiAoYmFja2xpZ2h0IDwgMCB8fCBiYWNrbGlnaHQgPiBzZC0+dm1heC5iYWNrbGlnaHQpCisJCQliYWNrbGlnaHQgPSAwOworCisJCWJhY2tsaWdodCA9IHRibF9iYWNrbGlnaHRbYmFja2xpZ2h0XTsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAsIDB4MDBmMCwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTc0LCAweDAwMDYsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhODAgKyBiYWNrbGlnaHQsIDB4MDBmMSwKKwkJCQkJCQkJMCwgTlVMTCk7CisJCX0KKwl9CisKKwlpZiAoaHVlICE9IHNkLT52b2xkLmh1ZSkgeworCQlzZC0+dm9sZC5odWUgPSBodWU7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAsIDB4MDBmMCwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAxLCAweDAwZjEsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmE3MCwgMHgwMGUyLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgKyBodWUgKiAoaHVlIDwgNiksIDB4MDBmMSwKKwkJCQkJCQkwLCBOVUxMKTsKKwl9CisKKwlpZiAobWlycm9yICE9IHNkLT52b2xkLm1pcnJvciB8fCBmbGlwICE9IHNkLT52b2xkLmZsaXApIHsKKwkJdTggZGF0X2h2ZmxpcDJbNF0gPSB7MHgyMCwgMHgwMSwgMHhmMSwgMHgwMH07CisJCXNkLT52b2xkLm1pcnJvciA9IG1pcnJvcjsKKwkJc2QtPnZvbGQuZmxpcCA9IGZsaXA7CisKKwkJZGF0X2h2ZmxpcDJbM10gPSBmbGlwICsgMiAqIG1pcnJvcjsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweGJhMDAsIDB4MDIwMCwgNCwgZGF0X2h2ZmxpcDEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4YmEwMCwgMHgwMjAwLCA0LCBkYXRfaHZmbGlwMik7CisJfQorCisJaWYgKGdhbSAhPSBzZC0+dm9sZC5nYW1tYSkgeworCQlzZC0+dm9sZC5nYW1tYSA9IGdhbTsKKwkJaWYgKGdhbSA8IDAgfHwgZ2FtID4gc2QtPnZtYXguZ2FtbWEpCisJCQlnYW0gPSAwOworCisJCWdhbSA9IDIgKiBnYW07CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDQgICAgICAsIDB4MDAzYiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAyICsgZ2FtLCAweDAwZjEsIDAsIE5VTEwpOworCX0KKworCWlmIChjbnRyICE9IHNkLT52b2xkLmNvbnRyYXN0KSB7CisJCXNkLT52b2xkLmNvbnRyYXN0ID0gY250cjsKKwkJaWYgKGNudHIgPCAwIHx8IGNudHIgPiBzZC0+dm1heC5jb250cmFzdCkKKwkJCWNudHIgPSAwOworCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHhiYTAwLCAweDAwZjAsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4YmEwMSwgMHgwMGYxLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgKyB0YmxfY250cjFbY250cl0sIDB4MDAzNSwKKwkJCQkJCQkwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweGJhMDAgKyB0YmxfY250cjJbY250cl0sIDB4MDBmMSwKKwkJCQkJCQkwLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWkxMzIwX3Bvc3RfdW5zZXRfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsKKworCWZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9wb3N0X3Vuc2V0X2FsdCwKKwkJCQlBUlJBWV9TSVpFKHRibF9wb3N0X3Vuc2V0X2FsdCkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTIwMjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkyMDIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiMDlmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkyMDIwLmMKQEAgLTAsMCArMSw5MzcgQEAKKy8qIEBmaWxlIGdsODYwLW1pMjAyMC5jCisgKiBAYXV0aG9yIE9saXZpZXIgTE9SSU4sIGZyb20gSWNlL1Nvcm8yMDA1J3MgbG9ncyhBKSwgRnJldF9zYXcvSHVsa2llJ3MKKyAqIGxvZ3MoQikgYW5kIFRyaWNpZCJzIGxvZ3MoQykuIFdpdGggdGhlIGhlbHAgb2YgS3l0cml4L0JVR2FidW5kby9CbGF6ZXJjaXN0LgorICogQGRhdGUgMjAwOS0wOC0yNworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogU2Vuc29yIDogTUkyMDIwICovCisKKyNpbmNsdWRlICJnbDg2MC5oIgorCitzdGF0aWMgdTggZGF0X2JyaWdodDFbXSA9IHsweDhjLCAweGEyLCAweDA2fTsKK3N0YXRpYyB1OCBkYXRfYnJpZ2h0M1tdID0gezB4OGMsIDB4YTEsIDB4MDJ9Oworc3RhdGljIHU4IGRhdF9icmlnaHQ0W10gPSB7MHg5MCwgMHgwMCwgMHgwZn07CitzdGF0aWMgdTggZGF0X2JyaWdodDVbXSA9IHsweDhjLCAweGExLCAweDAzfTsKK3N0YXRpYyB1OCBkYXRfYnJpZ2h0NltdID0gezB4OTAsIDB4MDAsIDB4MDV9OworCitzdGF0aWMgdTggZGF0X2R1bW15MVtdID0gezB4OTAsIDB4MDAsIDB4MDZ9OworLypzdGF0aWMgdTggZHVtbXkyW10gPSB7MHg4YywgMHhhMSwgMHgwMn07Ki8KKy8qc3RhdGljIHU4IGR1bW15M1tdID0gezB4OTAsIDB4MDAsIDB4MWZ9OyovCisKK3N0YXRpYyB1OCBkYXRfaHZmbGlwMVtdID0gezB4OGMsIDB4MjcsIDB4MTl9Oworc3RhdGljIHU4IGRhdF9odmZsaXAzW10gPSB7MHg4YywgMHgyNywgMHgzYn07CitzdGF0aWMgdTggZGF0X2h2ZmxpcDVbXSA9IHsweDhjLCAweGExLCAweDAzfTsKK3N0YXRpYyB1OCBkYXRfaHZmbGlwNltdID0gezB4OTAsIDB4MDAsIDB4MDZ9OworCitzdGF0aWMgdTggZGF0X2ZyZXExW10gPSB7IDB4OGMsIDB4YTQsIDB4MDQgfTsKKworc3RhdGljIHU4IGRhdF9tdWx0aTVbXSA9IHsgMHg4YywgMHhhMSwgMHgwMyB9Oworc3RhdGljIHU4IGRhdF9tdWx0aTZbXSA9IHsgMHg5MCwgMHgwMCwgMHgwNSB9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfY29tbW9uX2FbXSA9IHsKKwl7MHgwMDAwLCAweDAwMDB9LAorCXsxLCAweGZmZmZ9LCAvKiBtc2xlZXAoMzUpOyAqLworCXsweDAwNmEsIDB4MDAwN30sIHsweDAwNjMsIDB4MDAwNn0sIHsweDAwNmEsIDB4MDAwZH0sIHsweDAwMDAsIDB4MDBjMH0sCisJezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwMywgMHgwMGMxfSwgezB4MDA0MiwgMHgwMGMyfSwgezB4MDAwNCwgMHgwMGQ4fSwKKwl7MHgwMDAwLCAweDAwNTh9LCB7MHgwMDAyLCAweDAwMDR9LCB7MHgwMDQxLCAweDAwMDB9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX2NvbW1vbl9iW10gPSB7CisJezB4MDA2YSwgMHgwMDA3fSwKKwl7MzUsIDB4ZmZmZn0sCisJezB4MDBlZiwgMHgwMDA2fSwKKwl7MzUsIDB4ZmZmZn0sCisJezB4MDA2YSwgMHgwMDBkfSwKKwl7MzUsIDB4ZmZmZn0sCisJezB4MDAwMCwgMHgwMGMwfSwgezB4MDAxMCwgMHgwMDEwfSwgezB4MDAwMywgMHgwMGMxfSwgezB4MDA0MiwgMHgwMGMyfSwKKwl7MHgwMDA0LCAweDAwZDh9LCB7MHgwMDAwLCAweDAwNTh9LCB7MHgwMDQxLCAweDAwMDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9jb21tb25fY1tdID0geworCXsweDMyLCAiXHgwMlx4MDBceDA4In0sIHsweDMzLCAiXHhmNFx4MDNceDFkIn0sCisJezYsICJceGZmXHhmZlx4ZmYifSwgLyogMTIgKi8KKwl7MHgzNCwgIlx4MWVceDhmXHgwOSJ9LCB7MHgzNCwgIlx4MWNceDAxXHgyOCJ9LCB7MHgzNCwgIlx4MWVceDhmXHgwOSJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sIC8qIC0gKi8KKwl7MHgzNCwgIlx4MWVceDhmXHgwOSJ9LCB7MHgzMiwgIlx4MTRceDA2XHhlNiJ9LCB7MHgzMywgIlx4OGNceDIyXHgyMyJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4YTJceDBmIn0sIHsweDMzLCAiXHg5MFx4MDBceDBkIn0sCisJezB4MzMsICJceDhjXHhhMlx4MTAifSwgezB4MzMsICJceDkwXHgwMFx4MGIifSwgezB4MzMsICJceDhjXHhhMlx4MTEifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwNyJ9LCB7MHgzMywgIlx4ZjRceDAzXHgxZCJ9LCB7MHgzNSwgIlx4YTJceDAwXHhlMiJ9LAorCXsweDMzLCAiXHg4Y1x4YWJceDA1In0sIHsweDMzLCAiXHg5MFx4MDBceDAxIn0sIHsweDMyLCAiXHg2ZVx4MDBceDg2In0sCisJezB4MzIsICJceDcwXHgwZlx4YWEifSwgezB4MzIsICJceDcyXHgwZlx4ZTQifSwgezB4MzMsICJceDhjXHhhM1x4NGEifSwKKwl7MHgzMywgIlx4OTBceDAwXHg1YSJ9LCB7MHgzMywgIlx4OGNceGEzXHg0YiJ9LCB7MHgzMywgIlx4OTBceDAwXHhhNiJ9LAorCXsweDMzLCAiXHg4Y1x4YTNceDYxIn0sIHsweDMzLCAiXHg5MFx4MDBceGM4In0sIHsweDMzLCAiXHg4Y1x4YTNceDYyIn0sCisJezB4MzMsICJceDkwXHgwMFx4ZTEifSwgezB4MzQsICJceGNlXHgwMVx4YTgifSwgezB4MzQsICJceGQwXHg2Nlx4MzMifSwKKwl7MHgzNCwgIlx4ZDJceDMxXHg5YSJ9LCB7MHgzNCwgIlx4ZDRceDk0XHg2MyJ9LCB7MHgzNCwgIlx4ZDZceDRiXHgyNSJ9LAorCXsweDM0LCAiXHhkOFx4MjZceDcwIn0sIHsweDM0LCAiXHhkYVx4NzJceDRjIn0sIHsweDM0LCAiXHhkY1x4ZmZceDA0In0sCisJezB4MzQsICJceGRlXHgwMVx4NWIifSwgezB4MzQsICJceGU2XHgwMVx4MTMifSwgezB4MzQsICJceGVlXHgwYlx4ZjAifSwKKwl7MHgzNCwgIlx4ZjZceDBiXHhhNCJ9LCB7MHgzNSwgIlx4MDBceGY2XHhlNyJ9LCB7MHgzNSwgIlx4MDhceDBkXHhmZCJ9LAorCXsweDM1LCAiXHgxMFx4MjVceDYzIn0sIHsweDM1LCAiXHgxOFx4MzVceDZjIn0sIHsweDM1LCAiXHgyMFx4NDJceDdlIn0sCisJezB4MzUsICJceDI4XHgxOVx4NDQifSwgezB4MzUsICJceDMwXHgzOVx4ZDQifSwgezB4MzUsICJceDM4XHhmNVx4YTgifSwKKwl7MHgzNSwgIlx4NGNceDA3XHg5MCJ9LCB7MHgzNSwgIlx4NDRceDA3XHhiOCJ9LCB7MHgzNSwgIlx4NWNceDA2XHg4OCJ9LAorCXsweDM1LCAiXHg1NFx4MDdceGZmIn0sIHsweDM0LCAiXHhlMFx4MDFceDUyIn0sIHsweDM0LCAiXHhlOFx4MDBceGNjIn0sCisJezB4MzQsICJceGYwXHgwZFx4ODMifSwgezB4MzQsICJceGY4XHgwY1x4YjMifSwgezB4MzUsICJceDAyXHhmZVx4YmEifSwKKwl7MHgzNSwgIlx4MGFceDA0XHhlMCJ9LCB7MHgzNSwgIlx4MTJceDFjXHg2MyJ9LCB7MHgzNSwgIlx4MWFceDJiXHg1YSJ9LAorCXsweDM1LCAiXHgyMlx4MzJceDVlIn0sIHsweDM1LCAiXHgyYVx4MGRceDI4In0sIHsweDM1LCAiXHgzMlx4MmNceDAyIn0sCisJezB4MzUsICJceDNhXHhmNFx4ZmEifSwgezB4MzUsICJceDRlXHgwN1x4ZWYifSwgezB4MzUsICJceDQ2XHgwN1x4ODgifSwKKwl7MHgzNSwgIlx4NWVceDA3XHhjMSJ9LCB7MHgzNSwgIlx4NTZceDA0XHg2NCJ9LCB7MHgzNCwgIlx4ZTRceDAxXHgxNSJ9LAorCXsweDM0LCAiXHhlY1x4MDBceDgyIn0sIHsweDM0LCAiXHhmNFx4MGNceGNlIn0sIHsweDM0LCAiXHhmY1x4MGNceGJhIn0sCisJezB4MzUsICJceDA2XHgxZlx4MDIifSwgezB4MzUsICJceDBlXHgwMlx4ZTMifSwgezB4MzUsICJceDE2XHgxYVx4NTAifSwKKwl7MHgzNSwgIlx4MWVceDI0XHgzOSJ9LCB7MHgzNSwgIlx4MjZceDIzXHg0YyJ9LCB7MHgzNSwgIlx4MmVceGY5XHgxYiJ9LAorCXsweDM1LCAiXHgzNlx4MjNceDE5In0sIHsweDM1LCAiXHgzZVx4MTJceDA4In0sIHsweDM1LCAiXHg1Mlx4MDdceDIyIn0sCisJezB4MzUsICJceDRhXHgwM1x4ZDMifSwgezB4MzUsICJceDYyXHgwNlx4NTQifSwgezB4MzUsICJceDVhXHgwNFx4NWQifSwKKwl7MHgzNCwgIlx4ZTJceDAxXHgwNCJ9LCB7MHgzNCwgIlx4ZWFceDAwXHhhMCJ9LCB7MHgzNCwgIlx4ZjJceDBjXHhiYyJ9LAorCXsweDM0LCAiXHhmYVx4MGNceDViIn0sIHsweDM1LCAiXHgwNFx4MTdceGYyIn0sIHsweDM1LCAiXHgwY1x4MDJceDA4In0sCisJezB4MzUsICJceDE0XHgyOFx4NDMifSwgezB4MzUsICJceDFjXHgyOFx4NjIifSwgezB4MzUsICJceDI0XHgyYlx4NjAifSwKKwl7MHgzNSwgIlx4MmNceDA3XHgzMyJ9LCB7MHgzNSwgIlx4MzRceDFmXHhiMCJ9LCB7MHgzNSwgIlx4M2NceGVkXHhjZCJ9LAorCXsweDM1LCAiXHg1MFx4MDBceDA2In0sIHsweDM1LCAiXHg0OFx4MDdceGZmIn0sIHsweDM1LCAiXHg2MFx4MDVceDg5In0sCisJezB4MzUsICJceDU4XHgwN1x4ZmYifSwgezB4MzUsICJceDQwXHgwMFx4YTAifSwgezB4MzUsICJceDQyXHgwMFx4MDAifSwKKwl7MHgzMiwgIlx4MTBceDAxXHhmYyJ9LCB7MHgzMywgIlx4OGNceGExXHgxOCJ9LCB7MHgzMywgIlx4OTBceDAwXHgzYyJ9LAorCXsxLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDc4XHgwMFx4MDAifSwKKwl7MSwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDM1LCAiXHhiOFx4MWZceDIwIn0sIHsweDMzLCAiXHg4Y1x4YTJceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDEwIn0sCisJezB4MzMsICJceDhjXHhhMlx4MDcifSwgezB4MzMsICJceDkwXHgwMFx4MDgifSwgezB4MzMsICJceDhjXHhhMlx4NDIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwYiJ9LCB7MHgzMywgIlx4OGNceGEyXHg0YSJ9LCB7MHgzMywgIlx4OTBceDAwXHg4YyJ9LAorCXsweDM1LCAiXHhiYVx4ZmFceDA4In0sIHsweDMzLCAiXHg4Y1x4YTJceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDIyIn0sCisJezB4MzMsICJceDhjXHhhMlx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4YmIifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfY29tbW9uX2RbXSA9IHsKKwl7MHgzMywgIlx4OGNceDIyXHgyZSJ9LCB7MHgzMywgIlx4OTBceDAwXHhhMCJ9LCB7MHgzMywgIlx4OGNceGE0XHgwOCJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sIHsweDMzLCAiXHg4Y1x4YTRceDA5In0sIHsweDMzLCAiXHg5MFx4MDBceDIxIn0sCisJezB4MzMsICJceDhjXHhhNFx4MGEifSwgezB4MzMsICJceDkwXHgwMFx4MjUifSwgezB4MzMsICJceDhjXHhhNFx4MGIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgyNyJ9LCB7MHgzMywgIlx4OGNceDI0XHgxMSJ9LCB7MHgzMywgIlx4OTBceDAwXHhhMCJ9LAorCXsweDMzLCAiXHg4Y1x4MjRceDEzIn0sIHsweDMzLCAiXHg5MFx4MDBceGMwIn0sIHsweDMzLCAiXHg4Y1x4MjRceDE1In0sCisJezB4MzMsICJceDkwXHgwMFx4YTAifSwgezB4MzMsICJceDhjXHgyNFx4MTcifSwgezB4MzMsICJceDkwXHgwMFx4YzAifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfY29tbW9uX2VbXSA9IHsKKwl7MHgzMywgIlx4OGNceGE0XHgwNCJ9LCB7MHgzMywgIlx4OTBceDAwXHg4MCJ9LCB7MHgzMywgIlx4OGNceGE3XHg5ZCJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4YTdceDllIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sCisJezB4MzMsICJceDhjXHhhMlx4MGMifSwgezB4MzMsICJceDkwXHgwMFx4MTcifSwgezB4MzMsICJceDhjXHhhMlx4MTUifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwNCJ9LCB7MHgzMywgIlx4OGNceGEyXHgxNCJ9LCB7MHgzMywgIlx4OTBceDAwXHgyMCJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDE3In0sCisJLyogbXNsZWVwKDUzKTsgKi8KKwl7MHgzMywgIlx4OTBceDIxXHgxMSJ9LCB7MHgzMywgIlx4OGNceDI3XHgxYiJ9LCB7MHgzMywgIlx4OTBceDAyXHg0ZiJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDI1In0sIHsweDMzLCAiXHg5MFx4MDZceDBmIn0sIHsweDMzLCAiXHg4Y1x4MjdceDM5In0sCisJezB4MzMsICJceDkwXHgyMVx4MTEifSwgezB4MzMsICJceDhjXHgyN1x4M2QifSwgezB4MzMsICJceDkwXHgwMVx4MjAifSwKKwl7MHgzMywgIlx4OGNceDI3XHg0NyJ9LCB7MHgzMywgIlx4OTBceDA5XHg0YyJ9LCB7MHgzMywgIlx4OGNceDI3XHgwMyJ9LAorCXsweDMzLCAiXHg5MFx4MDJceDg0In0sIHsweDMzLCAiXHg4Y1x4MjdceDA1In0sIHsweDMzLCAiXHg5MFx4MDFceGUyIn0sCisJezB4MzMsICJceDhjXHgyN1x4MDcifSwgezB4MzMsICJceDkwXHgwNlx4NDAifSwgezB4MzMsICJceDhjXHgyN1x4MDkifSwKKwl7MHgzMywgIlx4OTBceDA0XHhiMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgwZCJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDBmIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDExIn0sCisJezB4MzMsICJceDkwXHgwNFx4YmQifSwgezB4MzMsICJceDhjXHgyN1x4MTMifSwgezB4MzMsICJceDkwXHgwNlx4NGQifSwKKwl7MHgzMywgIlx4OGNceDI3XHgxNSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgxNyJ9LAorCXsweDMzLCAiXHg5MFx4MjFceDExIn0sIHsweDMzLCAiXHg4Y1x4MjdceDE5In0sIHsweDMzLCAiXHg5MFx4MDRceDZjIn0sCisJezB4MzMsICJceDhjXHgyN1x4MWIifSwgezB4MzMsICJceDkwXHgwMlx4NGYifSwgezB4MzMsICJceDhjXHgyN1x4MWQifSwKKwl7MHgzMywgIlx4OTBceDAxXHgwMiJ9LCB7MHgzMywgIlx4OGNceDI3XHgxZiJ9LCB7MHgzMywgIlx4OTBceDAyXHg3OSJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDIxIn0sIHsweDMzLCAiXHg5MFx4MDFceDU1In0sIHsweDMzLCAiXHg4Y1x4MjdceDIzIn0sCisJezB4MzMsICJceDkwXHgwMlx4ODUifSwgezB4MzMsICJceDhjXHgyN1x4MjUifSwgezB4MzMsICJceDkwXHgwNlx4MGYifSwKKwl7MHgzMywgIlx4OGNceDI3XHgyNyJ9LCB7MHgzMywgIlx4OTBceDIwXHgyMCJ9LCB7MHgzMywgIlx4OGNceDI3XHgyOSJ9LAorCXsweDMzLCAiXHg5MFx4MjBceDIwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDJiIn0sIHsweDMzLCAiXHg5MFx4MTBceDIwIn0sCisJezB4MzMsICJceDhjXHgyN1x4MmQifSwgezB4MzMsICJceDkwXHgyMFx4MDcifSwgezB4MzMsICJceDhjXHgyN1x4MmYifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwNCJ9LCB7MHgzMywgIlx4OGNceDI3XHgzMSJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNCJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDMzIn0sIHsweDMzLCAiXHg5MFx4MDRceGJiIn0sIHsweDMzLCAiXHg4Y1x4MjdceDM1In0sCisJezB4MzMsICJceDkwXHgwNlx4NGIifSwgezB4MzMsICJceDhjXHgyN1x4MzcifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwKKwl7MHgzMywgIlx4OGNceDI3XHgzOSJ9LCB7MHgzMywgIlx4OTBceDIxXHgxMSJ9LCB7MHgzMywgIlx4OGNceDI3XHgzYiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDI0In0sIHsweDMzLCAiXHg4Y1x4MjdceDNkIn0sIHsweDMzLCAiXHg5MFx4MDFceDIwIn0sCisJezB4MzMsICJceDhjXHgyN1x4NDEifSwgezB4MzMsICJceDkwXHgwMVx4NjkifSwgezB4MzMsICJceDhjXHgyN1x4NDUifSwKKwl7MHgzMywgIlx4OTBceDA0XHhlZCJ9LCB7MHgzMywgIlx4OGNceDI3XHg0NyJ9LCB7MHgzMywgIlx4OTBceDA5XHg0YyJ9LAorCXsweDMzLCAiXHg4Y1x4MjdceDUxIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDUzIn0sCisJezB4MzMsICJceDkwXHgwM1x4MjAifSwgezB4MzMsICJceDhjXHgyN1x4NTUifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwKKwl7MHgzMywgIlx4OGNceDI3XHg1NyJ9LCB7MHgzMywgIlx4OTBceDAyXHg1OCJ9LCB7MHgzMywgIlx4OGNceDI3XHg1ZiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDYxIn0sIHsweDMzLCAiXHg5MFx4MDZceDQwIn0sCisJezB4MzMsICJceDhjXHgyN1x4NjMifSwgezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHgyN1x4NjUifSwKKwl7MHgzMywgIlx4OTBceDA0XHhiMCJ9LCB7MHgzMywgIlx4OGNceDIyXHgyZSJ9LCB7MHgzMywgIlx4OTBceDAwXHhhMSJ9LAorCXsweDMzLCAiXHg4Y1x4YTRceDA4In0sIHsweDMzLCAiXHg5MFx4MDBceDFmIn0sIHsweDMzLCAiXHg4Y1x4YTRceDA5In0sCisJezB4MzMsICJceDkwXHgwMFx4MjEifSwgezB4MzMsICJceDhjXHhhNFx4MGEifSwgezB4MzMsICJceDkwXHgwMFx4MjUifSwKKwl7MHgzMywgIlx4OGNceGE0XHgwYiJ9LCB7MHgzMywgIlx4OTBceDAwXHgyNyJ9LCB7MHgzMywgIlx4OGNceDI0XHgxMSJ9LAorCXsweDMzLCAiXHg5MFx4MDBceGExIn0sIHsweDMzLCAiXHg4Y1x4MjRceDEzIn0sIHsweDMzLCAiXHg5MFx4MDBceGMxIn0sCisJezB4MzMsICJceDhjXHgyNFx4MTUifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9pbml0X2F0X3N0YXJ0dXBbXSA9IHsKKwl7MHgwMDAwLCAweDAwMDB9LAorCXs1MywgMHhmZmZmfSwKKwl7MHgwMDEwLCAweDAwMTB9LAorCXs1MywgMHhmZmZmfSwKKwl7MHgwMDA4LCAweDAwYzB9LAorCXs1MywgMHhmZmZmfSwKKwl7MHgwMDAxLCAweDAwYzF9LAorCXs1MywgMHhmZmZmfSwKKwl7MHgwMDAxLCAweDAwYzJ9LAorCXs1MywgMHhmZmZmfSwKKwl7MHgwMDIwLCAweDAwMDZ9LAorCXs1MywgMHhmZmZmfSwKKwl7MHgwMDZhLCAweDAwMGR9LAorCXs1MywgMHhmZmZmfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9sb3dfYVtdID0geworCXsweDMzLCAiXHg4Y1x4MjdceDE1In0sIHsweDMzLCAiXHg5MFx4MDBceDI1In0sIHsweDMzLCAiXHg4Y1x4MjJceDJlIn0sCisJezB4MzMsICJceDkwXHgwMFx4ODEifSwgezB4MzMsICJceDhjXHhhNFx4MDgifSwgezB4MzMsICJceDkwXHgwMFx4MTcifSwKKwl7MHgzMywgIlx4OGNceGE0XHgwOSJ9LCB7MHgzMywgIlx4OTBceDAwXHgxYSJ9LCB7MHgzMywgIlx4OGNceGE0XHgwYSJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDFkIn0sIHsweDMzLCAiXHg4Y1x4YTRceDBiIn0sIHsweDMzLCAiXHg5MFx4MDBceDIwIn0sCisJezB4MzMsICJceDhjXHgyNFx4MTEifSwgezB4MzMsICJceDkwXHgwMFx4ODEifSwgezB4MzMsICJceDhjXHgyNFx4MTMifSwKKwl7MHgzMywgIlx4OTBceDAwXHg5YiJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9pbml0X3Bvc3RfYWx0X2xvd19iW10gPSB7CisJezB4MzMsICJceDhjXHgyN1x4MDMifSwgezB4MzMsICJceDkwXHgwM1x4MjQifSwgezB4MzMsICJceDhjXHgyN1x4MDUifSwKKwl7MHgzMywgIlx4OTBceDAyXHg1OCJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9pbml0X3Bvc3RfYWx0X2xvd19jW10gPSB7CisJezB4MzQsICJceDFlXHg4Zlx4MDkifSwgezB4MzQsICJceDFjXHgwMVx4MjgifSwgezB4MzQsICJceDFlXHg4Zlx4MDkifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDM0LCAiXHgxZVx4OGZceDA5In0sIHsweDMyLCAiXHgxNFx4MDZceGU2In0sIHsweDMzLCAiXHg4Y1x4YTFceDIwIn0sCisJezB4MzMsICJceDkwXHgwMFx4MDAifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDEifSwKKwl7MHgzMywgIlx4MmVceDAxXHgwMCJ9LCB7MHgzNCwgIlx4MDRceDAwXHgyYSJ9LCB7MHgzMywgIlx4OGNceGE3XHgwMiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAwIn0sIHsweDMzLCAiXHg4Y1x4MjdceDk1In0sIHsweDMzLCAiXHg5MFx4MDFceDAwIn0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgyMCJ9LCB7MHgzMywgIlx4OTBceDAwXHg3MiJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAyIn0sIHsweDMzLCAiXHg4Y1x4YTdceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDAxIn0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgyMCJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMCJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDAxIn0sIHsweDMzLCAiXHg4Y1x4YTdceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDAwIn0sCisJezIsICJceGZmXHhmZlx4ZmYifSwgLyogLSAqICovCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDUifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwKKwl7MSwgIlx4ZmZceGZmXHhmZiJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZHhkYXRhIHRibF9pbml0X3Bvc3RfYWx0X2xvd19kW10gPSB7CisJezB4MzIsICJceDEwXHgwMVx4ZjgifSwgezB4MzQsICJceGNlXHgwMVx4YTgifSwgezB4MzQsICJceGQwXHg2Nlx4MzMifSwKKwl7MHgzNCwgIlx4ZDJceDMxXHg5YSJ9LCB7MHgzNCwgIlx4ZDRceDk0XHg2MyJ9LCB7MHgzNCwgIlx4ZDZceDRiXHgyNSJ9LAorCXsweDM0LCAiXHhkOFx4MjZceDcwIn0sIHsweDM0LCAiXHhkYVx4NzJceDRjIn0sIHsweDM0LCAiXHhkY1x4ZmZceDA0In0sCisJezB4MzQsICJceGRlXHgwMVx4NWIifSwgezB4MzQsICJceGU2XHgwMVx4MTMifSwgezB4MzQsICJceGVlXHgwYlx4ZjAifSwKKwl7MHgzNCwgIlx4ZjZceDBiXHhhNCJ9LCB7MHgzNSwgIlx4MDBceGY2XHhlNyJ9LCB7MHgzNSwgIlx4MDhceDBkXHhmZCJ9LAorCXsweDM1LCAiXHgxMFx4MjVceDYzIn0sIHsweDM1LCAiXHgxOFx4MzVceDZjIn0sIHsweDM1LCAiXHgyMFx4NDJceDdlIn0sCisJezB4MzUsICJceDI4XHgxOVx4NDQifSwgezB4MzUsICJceDMwXHgzOVx4ZDQifSwgezB4MzUsICJceDM4XHhmNVx4YTgifSwKKwl7MHgzNSwgIlx4NGNceDA3XHg5MCJ9LCB7MHgzNSwgIlx4NDRceDA3XHhiOCJ9LCB7MHgzNSwgIlx4NWNceDA2XHg4OCJ9LAorCXsweDM1LCAiXHg1NFx4MDdceGZmIn0sIHsweDM0LCAiXHhlMFx4MDFceDUyIn0sIHsweDM0LCAiXHhlOFx4MDBceGNjIn0sCisJezB4MzQsICJceGYwXHgwZFx4ODMifSwgezB4MzQsICJceGY4XHgwY1x4YjMifSwgezB4MzUsICJceDAyXHhmZVx4YmEifSwKKwl7MHgzNSwgIlx4MGFceDA0XHhlMCJ9LCB7MHgzNSwgIlx4MTJceDFjXHg2MyJ9LCB7MHgzNSwgIlx4MWFceDJiXHg1YSJ9LAorCXsweDM1LCAiXHgyMlx4MzJceDVlIn0sIHsweDM1LCAiXHgyYVx4MGRceDI4In0sIHsweDM1LCAiXHgzMlx4MmNceDAyIn0sCisJezB4MzUsICJceDNhXHhmNFx4ZmEifSwgezB4MzUsICJceDRlXHgwN1x4ZWYifSwgezB4MzUsICJceDQ2XHgwN1x4ODgifSwKKwl7MHgzNSwgIlx4NWVceDA3XHhjMSJ9LCB7MHgzNSwgIlx4NTZceDA0XHg2NCJ9LCB7MHgzNCwgIlx4ZTRceDAxXHgxNSJ9LAorCXsweDM0LCAiXHhlY1x4MDBceDgyIn0sIHsweDM0LCAiXHhmNFx4MGNceGNlIn0sIHsweDM0LCAiXHhmY1x4MGNceGJhIn0sCisJezB4MzUsICJceDA2XHgxZlx4MDIifSwgezB4MzUsICJceDBlXHgwMlx4ZTMifSwgezB4MzUsICJceDE2XHgxYVx4NTAifSwKKwl7MHgzNSwgIlx4MWVceDI0XHgzOSJ9LCB7MHgzNSwgIlx4MjZceDIzXHg0YyJ9LCB7MHgzNSwgIlx4MmVceGY5XHgxYiJ9LAorCXsweDM1LCAiXHgzNlx4MjNceDE5In0sIHsweDM1LCAiXHgzZVx4MTJceDA4In0sIHsweDM1LCAiXHg1Mlx4MDdceDIyIn0sCisJezB4MzUsICJceDRhXHgwM1x4ZDMifSwgezB4MzUsICJceDYyXHgwNlx4NTQifSwgezB4MzUsICJceDVhXHgwNFx4NWQifSwKKwl7MHgzNCwgIlx4ZTJceDAxXHgwNCJ9LCB7MHgzNCwgIlx4ZWFceDAwXHhhMCJ9LCB7MHgzNCwgIlx4ZjJceDBjXHhiYyJ9LAorCXsweDM0LCAiXHhmYVx4MGNceDViIn0sIHsweDM1LCAiXHgwNFx4MTdceGYyIn0sIHsweDM1LCAiXHgwY1x4MDJceDA4In0sCisJezB4MzUsICJceDE0XHgyOFx4NDMifSwgezB4MzUsICJceDFjXHgyOFx4NjIifSwgezB4MzUsICJceDI0XHgyYlx4NjAifSwKKwl7MHgzNSwgIlx4MmNceDA3XHgzMyJ9LCB7MHgzNSwgIlx4MzRceDFmXHhiMCJ9LCB7MHgzNSwgIlx4M2NceGVkXHhjZCJ9LAorCXsweDM1LCAiXHg1MFx4MDBceDA2In0sIHsweDM1LCAiXHg0OFx4MDdceGZmIn0sIHsweDM1LCAiXHg2MFx4MDVceDg5In0sCisJezB4MzUsICJceDU4XHgwN1x4ZmYifSwgezB4MzUsICJceDQwXHgwMFx4YTAifSwgezB4MzUsICJceDQyXHgwMFx4MDAifSwKKwl7MHgzMiwgIlx4MTBceDAxXHhmYyJ9LCB7MHgzMywgIlx4OGNceGExXHgxOCJ9LAorCS8qIEZsaXAvTWlycm9yIGgvdj0xICovCisJezB4MzMsICJceDkwXHgwMFx4M2MifSwgezB4MzMsICJceDhjXHgyN1x4MTkifSwgezB4MzMsICJceDkwXHgwNFx4NmMifSwKKwl7MHgzMywgIlx4OGNceDI3XHgzYiJ9LCB7MHgzMywgIlx4OTBceDAwXHgyNCJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezEzMCwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sIHsweDMzLCAiXHg5MFx4MDBceDA2In0sCisJezB4MzMsICJceDkwXHgwMFx4MDYifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwKKwl7MTAwLCAiXHhmZlx4ZmZceGZmIn0sCisJLyogPz8gKi8KKwl7MHgzMywgIlx4OGNceGExXHgwMiJ9LCB7MHgzMywgIlx4OTBceDAwXHgxZiJ9LCB7MHgzMywgIlx4OGNceGExXHgwMiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sIHsweDMzLCAiXHg4Y1x4YTFceDAyIn0sIHsweDMzLCAiXHg5MFx4MDBceDFmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MWYifSwKKwkvKiBCcmlndGhuZXNzPTcwICovCisJezB4MzMsICJceDhjXHhhMlx4MDYifSwgezB4MzMsICJceDkwXHgwMFx4NDYifSwgezB4MzMsICJceDhjXHhhMVx4MDIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwZiJ9LCB7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAorCS8qIFNoYXJwbmVzcz0yMCAqLworCXsweDMyLCAiXHg2Y1x4MTRceDA4In0sCit9OworCitzdGF0aWMgc3RydWN0IGlkeGRhdGEgdGJsX2luaXRfcG9zdF9hbHRfYmlnX2FbXSA9IHsKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDM0LCAiXHgxZVx4OGZceDA5In0sIHsweDM0LCAiXHgxY1x4MDFceDI4In0sIHsweDM0LCAiXHgxZVx4OGZceDA5In0sCisJezB4MzQsICJceDFlXHg4Zlx4MDkifSwgezB4MzIsICJceDE0XHgwNlx4ZTYifSwgezB4MzMsICJceDhjXHhhMVx4MDMifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwNSJ9LAorCXsyLCAiXHhmZlx4ZmZceGZmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDMifSwgezB4MzMsICJceDkwXHgwMFx4MDYifSwKKwl7MiwgIlx4ZmZceGZmXHhmZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDA1In0sCisJezIsICJceGZmXHhmZlx4ZmYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMyJ9LCB7MHgzMywgIlx4OTBceDAwXHgwNiJ9LCB7MHgzMywgIlx4OGNceGExXHgyMCJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDcyIn0sIHsweDMzLCAiXHg4Y1x4YTFceDMwIn0sIHsweDMzLCAiXHg5MFx4MDBceDAzIn0sCisJezB4MzMsICJceDhjXHhhMVx4MzEifSwgezB4MzMsICJceDkwXHgwMFx4MDIifSwgezB4MzMsICJceDhjXHhhMVx4MzIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgwMyJ9LCB7MHgzMywgIlx4OGNceGExXHgzNCJ9LCB7MHgzMywgIlx4OTBceDAwXHgwMyJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAzIn0sIHsweDMzLCAiXHg5MFx4MDBceDAyIn0sIHsweDMzLCAiXHgyZVx4MDFceDAwIn0sCisJezB4MzQsICJceDA0XHgwMFx4MmEifSwgezB4MzMsICJceDhjXHhhN1x4MDIifSwgezB4MzMsICJceDkwXHgwMFx4MDEifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9iaWdfYltdID0geworCXsweDMyLCAiXHgxMFx4MDFceGY4In0sIHsweDM0LCAiXHhjZVx4MDFceGE4In0sIHsweDM0LCAiXHhkMFx4NjZceDMzIn0sCisJezB4MzQsICJceGQyXHgzMVx4OWEifSwgezB4MzQsICJceGQ0XHg5NFx4NjMifSwgezB4MzQsICJceGQ2XHg0Ylx4MjUifSwKKwl7MHgzNCwgIlx4ZDhceDI2XHg3MCJ9LCB7MHgzNCwgIlx4ZGFceDcyXHg0YyJ9LCB7MHgzNCwgIlx4ZGNceGZmXHgwNCJ9LAorCXsweDM0LCAiXHhkZVx4MDFceDViIn0sIHsweDM0LCAiXHhlNlx4MDFceDEzIn0sIHsweDM0LCAiXHhlZVx4MGJceGYwIn0sCisJezB4MzQsICJceGY2XHgwYlx4YTQifSwgezB4MzUsICJceDAwXHhmNlx4ZTcifSwgezB4MzUsICJceDA4XHgwZFx4ZmQifSwKKwl7MHgzNSwgIlx4MTBceDI1XHg2MyJ9LCB7MHgzNSwgIlx4MThceDM1XHg2YyJ9LCB7MHgzNSwgIlx4MjBceDQyXHg3ZSJ9LAorCXsweDM1LCAiXHgyOFx4MTlceDQ0In0sIHsweDM1LCAiXHgzMFx4MzlceGQ0In0sIHsweDM1LCAiXHgzOFx4ZjVceGE4In0sCisJezB4MzUsICJceDRjXHgwN1x4OTAifSwgezB4MzUsICJceDQ0XHgwN1x4YjgifSwgezB4MzUsICJceDVjXHgwNlx4ODgifSwKKwl7MHgzNSwgIlx4NTRceDA3XHhmZiJ9LCB7MHgzNCwgIlx4ZTBceDAxXHg1MiJ9LCB7MHgzNCwgIlx4ZThceDAwXHhjYyJ9LAorCXsweDM0LCAiXHhmMFx4MGRceDgzIn0sIHsweDM0LCAiXHhmOFx4MGNceGIzIn0sIHsweDM1LCAiXHgwMlx4ZmVceGJhIn0sCisJezB4MzUsICJceDBhXHgwNFx4ZTAifSwgezB4MzUsICJceDEyXHgxY1x4NjMifSwgezB4MzUsICJceDFhXHgyYlx4NWEifSwKKwl7MHgzNSwgIlx4MjJceDMyXHg1ZSJ9LCB7MHgzNSwgIlx4MmFceDBkXHgyOCJ9LCB7MHgzNSwgIlx4MzJceDJjXHgwMiJ9LAorCXsweDM1LCAiXHgzYVx4ZjRceGZhIn0sIHsweDM1LCAiXHg0ZVx4MDdceGVmIn0sIHsweDM1LCAiXHg0Nlx4MDdceDg4In0sCisJezB4MzUsICJceDVlXHgwN1x4YzEifSwgezB4MzUsICJceDU2XHgwNFx4NjQifSwgezB4MzQsICJceGU0XHgwMVx4MTUifSwKKwl7MHgzNCwgIlx4ZWNceDAwXHg4MiJ9LCB7MHgzNCwgIlx4ZjRceDBjXHhjZSJ9LCB7MHgzNCwgIlx4ZmNceDBjXHhiYSJ9LAorCXsweDM1LCAiXHgwNlx4MWZceDAyIn0sIHsweDM1LCAiXHgwZVx4MDJceGUzIn0sIHsweDM1LCAiXHgxNlx4MWFceDUwIn0sCisJezB4MzUsICJceDFlXHgyNFx4MzkifSwgezB4MzUsICJceDI2XHgyM1x4NGMifSwgezB4MzUsICJceDJlXHhmOVx4MWIifSwKKwl7MHgzNSwgIlx4MzZceDIzXHgxOSJ9LCB7MHgzNSwgIlx4M2VceDEyXHgwOCJ9LCB7MHgzNSwgIlx4NTJceDA3XHgyMiJ9LAorCXsweDM1LCAiXHg0YVx4MDNceGQzIn0sIHsweDM1LCAiXHg2Mlx4MDZceDU0In0sIHsweDM1LCAiXHg1YVx4MDRceDVkIn0sCisJezB4MzQsICJceGUyXHgwMVx4MDQifSwgezB4MzQsICJceGVhXHgwMFx4YTAifSwgezB4MzQsICJceGYyXHgwY1x4YmMifSwKKwl7MHgzNCwgIlx4ZmFceDBjXHg1YiJ9LCB7MHgzNSwgIlx4MDRceDE3XHhmMiJ9LCB7MHgzNSwgIlx4MGNceDAyXHgwOCJ9LAorCXsweDM1LCAiXHgxNFx4MjhceDQzIn0sIHsweDM1LCAiXHgxY1x4MjhceDYyIn0sIHsweDM1LCAiXHgyNFx4MmJceDYwIn0sCisJezB4MzUsICJceDJjXHgwN1x4MzMifSwgezB4MzUsICJceDM0XHgxZlx4YjAifSwgezB4MzUsICJceDNjXHhlZFx4Y2QifSwKKwl7MHgzNSwgIlx4NTBceDAwXHgwNiJ9LCB7MHgzNSwgIlx4NDhceDA3XHhmZiJ9LCB7MHgzNSwgIlx4NjBceDA1XHg4OSJ9LAorCXsweDM1LCAiXHg1OFx4MDdceGZmIn0sIHsweDM1LCAiXHg0MFx4MDBceGEwIn0sIHsweDM1LCAiXHg0Mlx4MDBceDAwIn0sCisJezB4MzIsICJceDEwXHgwMVx4ZmMifSwgezB4MzMsICJceDhjXHhhMVx4MTgifSwgezB4MzMsICJceDkwXHgwMFx4M2MifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWR4ZGF0YSB0YmxfaW5pdF9wb3N0X2FsdF9iaWdfY1tdID0geworCXsweDMzLCAiXHg4Y1x4YTFceDAyIn0sCisJezB4MzMsICJceDkwXHgwMFx4MWYifSwKKwl7MHgzMywgIlx4OGNceGExXHgwMiJ9LAorCXsweDMzLCAiXHg5MFx4MDBceDFmIn0sCisJezB4MzMsICJceDhjXHhhMVx4MDIifSwKKwl7MHgzMywgIlx4OTBceDAwXHgxZiJ9LAorCXsweDMzLCAiXHg4Y1x4YTFceDAyIn0sCisJezB4MzMsICJceDkwXHgwMFx4MWYifSwKK307CisKK3N0YXRpYyB1OCAqZGF0XzY0MCAgPSAiXHhkMFx4MDJceGQxXHgwOFx4ZDJceGUxXHhkM1x4MDJceGQ0XHgxMFx4ZDVceDgxIjsKK3N0YXRpYyB1OCAqZGF0XzgwMCAgPSAiXHhkMFx4MDJceGQxXHgxMFx4ZDJceDU3XHhkM1x4MDJceGQ0XHgxOFx4ZDVceDIxIjsKK3N0YXRpYyB1OCAqZGF0XzEyODAgPSAiXHhkMFx4MDJceGQxXHgyMFx4ZDJceDAxXHhkM1x4MDJceGQ0XHgyOFx4ZDVceDAxIjsKK3N0YXRpYyB1OCAqZGF0XzE2MDAgPSAiXHhkMFx4MDJceGQxXHgyMFx4ZDJceGFmXHhkM1x4MDJceGQ0XHgzMFx4ZDVceDQxIjsKKworc3RhdGljIGludCAgbWkyMDIwX2luaXRfYXRfc3RhcnR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgbWkyMDIwX2NvbmZpZ3VyZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG1pMjAyMF9pbml0X3ByZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG1pMjAyMF9pbml0X3Bvc3RfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBtaTIwMjBfcG9zdF91bnNldF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIG1pMjAyMF9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit2b2lkIG1pMjAyMF9pbml0X3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+dmN1ci5iYWNrbGlnaHQgID0gIDA7CisJc2QtPnZjdXIuYnJpZ2h0bmVzcyA9IDcwOworCXNkLT52Y3VyLnNoYXJwbmVzcyAgPSAyMDsKKwlzZC0+dmN1ci5jb250cmFzdCAgID0gIDA7CisJc2QtPnZjdXIuZ2FtbWEgICAgICA9ICAwOworCXNkLT52Y3VyLmh1ZSAgICAgICAgPSAgMDsKKwlzZC0+dmN1ci5zYXR1cmF0aW9uID0gNjA7CisJc2QtPnZjdXIud2hpdGViYWwgICA9IDUwOworCXNkLT52Y3VyLm1pcnJvciA9IDA7CisJc2QtPnZjdXIuZmxpcCAgID0gMDsKKwlzZC0+dmN1ci5BQzUwSHogPSAxOworCisJc2QtPnZtYXguYmFja2xpZ2h0ICA9ICA2NDsKKwlzZC0+dm1heC5icmlnaHRuZXNzID0gMTI4OworCXNkLT52bWF4LnNoYXJwbmVzcyAgPSAgNDA7CisJc2QtPnZtYXguY29udHJhc3QgICA9ICAgMzsKKwlzZC0+dm1heC5nYW1tYSAgICAgID0gICAyOworCXNkLT52bWF4Lmh1ZSAgICAgICAgPSAgIDAgKyAxOyAvKiAyMDAgKi8KKwlzZC0+dm1heC5zYXR1cmF0aW9uID0gICAwOyAgICAgLyogMTAwICovCisJc2QtPnZtYXgud2hpdGViYWwgICA9ICAgMDsgICAgIC8qIDEwMCAqLworCXNkLT52bWF4Lm1pcnJvciA9IDE7CisJc2QtPnZtYXguZmxpcCAgID0gMTsKKwlzZC0+dm1heC5BQzUwSHogPSAxOworCWlmIChfTUkyMDIwYl8pIHsKKwkJc2QtPnZtYXguY29udHJhc3QgID0gMDsKKwkJc2QtPnZtYXguZ2FtbWEgICAgID0gMDsKKwkJc2QtPnZtYXguYmFja2xpZ2h0ID0gMDsKKwl9CisKKwlzZC0+ZGV2X2NhbWVyYV9zZXR0aW5ncyA9IG1pMjAyMF9jYW1lcmFfc2V0dGluZ3M7CisJc2QtPmRldl9pbml0X2F0X3N0YXJ0dXAgPSBtaTIwMjBfaW5pdF9hdF9zdGFydHVwOworCXNkLT5kZXZfY29uZmlndXJlX2FsdCAgID0gbWkyMDIwX2NvbmZpZ3VyZV9hbHQ7CisJc2QtPmRldl9pbml0X3ByZV9hbHQgICAgPSBtaTIwMjBfaW5pdF9wcmVfYWx0OworCXNkLT5kZXZfcG9zdF91bnNldF9hbHQgID0gbWkyMDIwX3Bvc3RfdW5zZXRfYWx0OworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgY29tbW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCisJaWYgKF9NSTIwMjBiXykgeworCQlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uX2EsIEFSUkFZX1NJWkUodGJsX2NvbW1vbl9hKSk7CisJfSBlbHNlIHsKKwkJaWYgKF9NSTIwMjBfKQorCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDA4LCAweDAwMDQsICAwLCBOVUxMKTsKKwkJZWxzZQorCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDAyLCAweDAwMDQsICAwLCBOVUxMKTsKKwkJbXNsZWVwKDM1KTsKKwkJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1vbl9iLCBBUlJBWV9TSVpFKHRibF9jb21tb25fYikpOworCX0KKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAzLCAweDdhMDAsIDB4MDAzMywgIDMsICJceDg2XHgyNVx4MDEiKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAzLCAweDdhMDAsIDB4MDAzMywgIDMsICJceDg2XHgyNVx4MDAiKTsKKwltc2xlZXAoMik7IC8qIC0gKiAqLworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDMsIDB4N2EwMCwgMHgwMDMwLCAgMywgIlx4MWFceDBhXHhjYyIpOworCWlmIChyZXNvID09IElNQUdFXzE2MDApCisJCW1zbGVlcCgyKTsgLyogMTYwMCAqLworCWZldGNoX2lkeGRhdGEoZ3NwY2FfZGV2LCB0YmxfY29tbW9uX2MsIEFSUkFZX1NJWkUodGJsX2NvbW1vbl9jKSk7CisKKwlpZiAoX01JMjAyMGJfIHx8IF9NSTIwMjBfKQorCQlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2NvbW1vbl9kLAorCQkJCUFSUkFZX1NJWkUodGJsX2NvbW1vbl9kKSk7CisKKwlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2NvbW1vbl9lLCBBUlJBWV9TSVpFKHRibF9jb21tb25fZSkpOworCWlmIChfTUkyMDIwYl8gfHwgX01JMjAyMF8pIHsKKwkJLyogRGlmZmVyZW50IGZyb20gZnJldCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDc4Iik7CisJCS8qIFNhbWUgYXMgZnJldCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4MjRceDE3Iik7CisJCS8qIERpZmZlcmVudCBmcm9tIGZyZXQgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHg5MCIpOworCX0gZWxzZSB7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4NmEiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceDI0XHgxNyIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDgwIik7CisJfQorCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDA1Iik7CisJbXNsZWVwKDIpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKKwlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQorCQltc2xlZXAoMTQpOyAvKiAxNjAwICovCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwNiIpOworCW1zbGVlcCgyKTsKK30KKworc3RhdGljIGludCBtaTIwMjBfaW5pdF9hdF9zdGFydHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBjOworCisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDA0LCAxLCAmYyk7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDA0LCAxLCAmYyk7CisKKwlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9hdF9zdGFydHVwLAorCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9hdF9zdGFydHVwKSk7CisKKwljb21tb24oZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pMjAyMF9pbml0X3ByZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5taXJyb3JNYXNrID0gMDsKKworCXNkLT52b2xkLmJhY2tsaWdodCAgPSAtMTsKKwlzZC0+dm9sZC5icmlnaHRuZXNzID0gLTE7CisJc2QtPnZvbGQuc2hhcnBuZXNzICA9IC0xOworCXNkLT52b2xkLmNvbnRyYXN0ICAgPSAtMTsKKwlzZC0+dm9sZC5nYW1tYSAgPSAtMTsKKwlzZC0+dm9sZC5odWUgICAgPSAtMTsKKwlzZC0+dm9sZC5taXJyb3IgPSAtMTsKKwlzZC0+dm9sZC5mbGlwICAgPSAtMTsKKwlzZC0+dm9sZC5BQzUwSHogPSAtMTsKKworCW1pMjAyMF9pbml0X3Bvc3RfYWx0KGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaTIwMjBfaW5pdF9wb3N0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiByZXNvID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKHMzMikgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisKKwlzMzIgYmFja2xpZ2h0ID0gc2QtPnZjdXIuYmFja2xpZ2h0OworCXMzMiBtaXJyb3IgPSAoKChzZC0+dmN1ci5taXJyb3IgPiAwKSBeIHNkLT5taXJyb3JNYXNrKSA+IDApOworCXMzMiBmbGlwICAgPSAoKChzZC0+dmN1ci5mbGlwICAgPiAwKSBeIHNkLT5taXJyb3JNYXNrKSA+IDApOworCXMzMiBmcmVxICAgPSAoc2QtPnZjdXIuQUM1MEh6ICA+IDApOworCisJdTggZGF0X2ZyZXEyW10gPSB7MHg5MCwgMHgwMCwgMHg4MH07CisJdTggZGF0X211bHRpMVtdID0gezB4OGMsIDB4YTcsIDB4MDB9OworCXU4IGRhdF9tdWx0aTJbXSA9IHsweDkwLCAweDAwLCAweDAwfTsKKwl1OCBkYXRfbXVsdGkzW10gPSB7MHg4YywgMHhhNywgMHgwMH07CisJdTggZGF0X211bHRpNFtdID0gezB4OTAsIDB4MDAsIDB4MDB9OworCXU4IGRhdF9odmZsaXAyW10gPSB7MHg5MCwgMHgwNCwgMHg2Y307CisJdTggZGF0X2h2ZmxpcDRbXSA9IHsweDkwLCAweDAwLCAweDI0fTsKKwl1OCBjOworCisJc2QtPm5iSW0gPSAtMTsKKworCWRhdF9mcmVxMlsyXSA9IGZyZXEgPyAweGMwIDogMHg4MDsKKwlkYXRfbXVsdGkxWzJdID0gMHg5ZDsKKwlkYXRfbXVsdGkzWzJdID0gZGF0X211bHRpMVsyXSArIDE7CisJZGF0X211bHRpNFsyXSA9IGRhdF9tdWx0aTJbMl0gPSBiYWNrbGlnaHQ7CisJZGF0X2h2ZmxpcDJbMl0gPSAweDZjICsgMiAqICgxIC0gZmxpcCkgKyAoMSAtIG1pcnJvcik7CisJZGF0X2h2ZmxpcDRbMl0gPSAweDI0ICsgMiAqICgxIC0gZmxpcCkgKyAoMSAtIG1pcnJvcik7CisKKwltc2xlZXAoMjAwKTsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgNSwgMHgwMDAxLCAweDAwMDAsIDAsIE5VTEwpOworCW1zbGVlcCgzKTsgLyogMzUgKiAqLworCisJY29tbW9uKGdzcGNhX2Rldik7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAxLCAweDAwNDEsIDB4MDAwMCwgIDAsIE5VTEwpOworCW1zbGVlcCg3MCk7CisKKwlpZiAoX01JMjAyMGJfKQorCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAxLCAweDAwNDAsIDB4MDAwMCwgIDAsIE5VTEwpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDEwLCAweDAwMTAsICAwLCBOVUxMKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAxLCAweDAwMDMsIDB4MDBjMSwgIDAsIE5VTEwpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDEsIDB4MDA0MiwgMHgwMGMyLCAgMCwgTlVMTCk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAgMSwgMHgwMDZhLCAweDAwMGQsICAwLCBOVUxMKTsKKworCXN3aXRjaCAocmVzbykgeworCWNhc2UgSU1BR0VfNjQwOgorCWNhc2UgSU1BR0VfODAwOgorCQlpZiAocmVzbyAhPSBJTUFHRV84MDApCisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsICAzLCAweDAwMDAsIDB4MDIwMCwKKwkJCQkxMiwgZGF0XzY0MCk7CisJCWVsc2UKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgIDMsIDB4MDAwMCwgMHgwMjAwLAorCQkJCTEyLCBkYXRfODAwKTsKKworCQlpZiAoX01JMjAyMGNfKQorCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2xvd19hLAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0X2xvd19hKSk7CisKKwkJaWYgKHJlc28gPT0gSU1BR0VfODAwKQorCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2xvd19iLAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0X2xvd19iKSk7CisKKwkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2xvd19jLAorCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHRfbG93X2MpKTsKKworCQlpZiAoX01JMjAyMGJfKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAwLCAweDAwYzEsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDBjMiwgMCwgTlVMTCk7CisJCQltc2xlZXAoMTUwKTsKKwkJfSBlbHNlIGlmIChfTUkyMDIwY18pIHsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDEwLCAweDAwMTAsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwMDAsIDB4MDBjMSwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MSwgMHgwMGMyLCAwLCBOVUxMKTsKKwkJCW1zbGVlcCgxMjApOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDAsIDB4MDAwMCwgMCwgTlVMTCk7CisJCQltc2xlZXAoMzApOworCQl9IGVsc2UgaWYgKF9NSTIwMjBfKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAwLCAweDAwYzEsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDBjMiwgMCwgTlVMTCk7CisJCQltc2xlZXAoMTIwKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQwLCAweDAwMDAsIDAsIE5VTEwpOworCQkJbXNsZWVwKDMwKTsKKwkJfQorCisJCS8qIEFDIHBvd2VyIGZyZXF1ZW5jeSAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZnJlcTEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZnJlcTIpOworCQltc2xlZXAoMjApOworCQkvKiBiYWNrbGlnaHQgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNCk7CisJCS8qIGF0IGluaXQgdGltZSBidXQgbm90IGFmdGVyICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMlx4MGMiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgxNyIpOworCQkvKiBmaW5pc2ggdGhlIGJhY2tsaWdodCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk1KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNik7CisJCW1zbGVlcCg1KTsvKiAiICovCisKKwkJaWYgKF9NSTIwMjBjXykgeworCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2xvd19kLAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0X2xvd19kKSk7CisJCX0gZWxzZSB7CisJCQljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDAsIDEsICZjKTsKKwkJCW1zbGVlcCgxNCk7IC8qIDB4ZDggKi8KKworCQkJLyogZmxpcC9taXJyb3IgKi8KKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9odmZsaXAxKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9odmZsaXAyKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9odmZsaXAzKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9odmZsaXA0KTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9odmZsaXA1KTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9odmZsaXA2KTsKKwkJCW1zbGVlcCgyMSk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfZHVtbXkxKTsKKwkJCW1zbGVlcCg1KTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9kdW1teTEpOworCQkJbXNsZWVwKDUpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgZGF0X2R1bW15MSk7CisJCQltc2xlZXAoNSk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCBkYXRfZHVtbXkxKTsKKwkJCW1zbGVlcCg1KTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsCisJCQkJCTMsIGRhdF9kdW1teTEpOworCQkJbXNsZWVwKDUpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgZGF0X2R1bW15MSk7CisJCQkvKiBlbmQgb2YgZmxpcC9taXJyb3IgbWFpbiBwYXJ0ICovCisJCQltc2xlZXAoMjQ2KTsgLyogMTQ2ICovCisKKwkJCXNkLT5uYkltID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU1BR0VfMTI4MDoKKwljYXNlIElNQUdFXzE2MDA6CisJCWlmIChyZXNvID09IElNQUdFXzEyODApIHsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsCisJCQkJCTEyLCBkYXRfMTI4MCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCAiXHg4Y1x4MjdceDA3Iik7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCAiXHg5MFx4MDVceDA0Iik7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCAiXHg4Y1x4MjdceDA5Iik7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLAorCQkJCQkzLCAiXHg5MFx4MDRceDAyIik7CisJCX0gZWxzZSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLAorCQkJCQkxMiwgZGF0XzE2MDApOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OGNceDI3XHgwNyIpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OTBceDA2XHg0MCIpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OGNceDI3XHgwOSIpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywKKwkJCQkJMywgIlx4OTBceDA0XHhiMCIpOworCQl9CisKKwkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2JpZ19hLAorCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHRfYmlnX2EpKTsKKworCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQorCQkJbXNsZWVwKDEzKTsgLyogMTYwMCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4MjdceDk3Iik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMVx4MDAiKTsKKwkJbXNsZWVwKDUzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgyMCIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAwIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMSIpOworCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQorCQkJbXNsZWVwKDEzKTsgLyogMTYwMCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTdceDAyIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDAiKTsKKwkJbXNsZWVwKDUzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgyMCIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDcyIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MDMiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMiIpOworCQlpZiAocmVzbyA9PSBJTUFHRV8xNjAwKQorCQkJbXNsZWVwKDEzKTsgLyogMTYwMCAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTdceDAyIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDEiKTsKKwkJbXNsZWVwKDUzKTsKKworCQlpZiAoX01JMjAyMGJfKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCWlmIChyZXNvID09IElNQUdFXzE2MDApCisJCQkJbXNsZWVwKDUwMCk7IC8qIDE2MDAgKi8KKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAwLCAweDAwYzEsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDBjMiwgMCwgTlVMTCk7CisJCQltc2xlZXAoMTg1MCk7CisJCX0gZWxzZSBpZiAoX01JMjAyMGNfIHx8IF9NSTIwMjBfKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAwLCAweDAwYzEsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDBjMiwgMCwgTlVMTCk7CisJCQltc2xlZXAoMTg1MCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MCwgMHgwMDAwLCAwLCBOVUxMKTsKKwkJCW1zbGVlcCgzMCk7CisJCX0KKworCQkvKiBBQyBwb3dlciBmcmVxdWVuY3kgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXExKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2ZyZXEyKTsKKwkJbXNsZWVwKDIwKTsKKwkJLyogYmFja2xpZ2h0ICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkyKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMyk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTQpOworCQkvKiBhdCBpbml0IHRpbWUgYnV0IG5vdCBhZnRlciAqLworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTJceDBjIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MTciKTsKKwkJLyogZmluaXNoIHRoZSBiYWNrbGlnaHQgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTYpOworCQltc2xlZXAoNik7IC8qICIgKi8KKworCQljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDAsIDEsICZjKTsKKwkJbXNsZWVwKDE0KTsKKworCQlpZiAoX01JMjAyMGNfKQorCQkJZmV0Y2hfaWR4ZGF0YShnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0X2JpZ19iLAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0X2JpZ19iKSk7CisKKwkJLyogZmxpcC9taXJyb3IgKi8KKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwMik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXAzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDQpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwNSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXA2KTsKKwkJLyogZW5kIG9mIGZsaXAvbWlycm9yIG1haW4gcGFydCAqLworCQltc2xlZXAoMTYpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTFceDAzIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDEiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgyMCIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAwIik7CisJCWlmIChyZXNvID09IElNQUdFXzE2MDApCisJCQltc2xlZXAoMjUpOyAvKiAxNjAwICovCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhN1x4MDIiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHgwMCIpOworCQltc2xlZXAoMTAzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OGNceGExXHgwMyIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg5MFx4MDBceDAyIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDhjXHhhMVx4MjAiKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgIlx4OTBceDAwXHg3MiIpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCAiXHg4Y1x4YTdceDAyIik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsICJceDkwXHgwMFx4MDEiKTsKKwkJc2QtPm5iSW0gPSAwOworCisJCWlmIChfTUkyMDIwY18pCisJCQlmZXRjaF9pZHhkYXRhKGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHRfYmlnX2MsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHRfYmlnX2MpKTsKKwl9CisKKwlzZC0+dm9sZC5taXJyb3IgICAgPSBtaXJyb3I7CisJc2QtPnZvbGQuZmxpcCAgICAgID0gZmxpcDsKKwlzZC0+dm9sZC5BQzUwSHogICAgPSBmcmVxOworCXNkLT52b2xkLmJhY2tsaWdodCA9IGJhY2tsaWdodDsKKworCW1pMjAyMF9jYW1lcmFfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pMjAyMF9jb25maWd1cmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCisJc3dpdGNoIChyZXNvKSB7CisJY2FzZSBJTUFHRV82NDA6CisJCWdzcGNhX2Rldi0+YWx0ID0gMyArIDE7CisJCWJyZWFrOworCisJY2FzZSBJTUFHRV84MDA6CisJY2FzZSBJTUFHRV8xMjgwOgorCWNhc2UgSU1BR0VfMTYwMDoKKwkJZ3NwY2FfZGV2LT5hbHQgPSAxICsgMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgbWkyMDIwX2NhbWVyYV9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJczMyIGJhY2tsaWdodCA9IHNkLT52Y3VyLmJhY2tsaWdodDsKKwlzMzIgYnJpZ2h0ID0gIHNkLT52Y3VyLmJyaWdodG5lc3M7CisJczMyIHNoYXJwICA9ICBzZC0+dmN1ci5zaGFycG5lc3M7CisJczMyIGNudHIgICA9ICBzZC0+dmN1ci5jb250cmFzdDsKKwlzMzIgZ2FtCSAgID0gIHNkLT52Y3VyLmdhbW1hOworCXMzMiBodWUgICAgPSAoc2QtPnZjdXIuaHVlID4gMCk7CisJczMyIG1pcnJvciA9ICgoKHNkLT52Y3VyLm1pcnJvciA+IDApIF4gc2QtPm1pcnJvck1hc2spID4gMCk7CisJczMyIGZsaXAgICA9ICgoKHNkLT52Y3VyLmZsaXAgICA+IDApIF4gc2QtPm1pcnJvck1hc2spID4gMCk7CisJczMyIGZyZXEgICA9IChzZC0+dmN1ci5BQzUwSHogPiAwKTsKKworCXU4IGRhdF9zaGFycFtdID0gezB4NmMsIDB4MDAsIDB4MDh9OworCXU4IGRhdF9icmlnaHQyW10gPSB7MHg5MCwgMHgwMCwgMHgwMH07CisJdTggZGF0X2ZyZXEyW10gPSB7MHg5MCwgMHgwMCwgMHg4MH07CisJdTggZGF0X211bHRpMVtdID0gezB4OGMsIDB4YTcsIDB4MDB9OworCXU4IGRhdF9tdWx0aTJbXSA9IHsweDkwLCAweDAwLCAweDAwfTsKKwl1OCBkYXRfbXVsdGkzW10gPSB7MHg4YywgMHhhNywgMHgwMH07CisJdTggZGF0X211bHRpNFtdID0gezB4OTAsIDB4MDAsIDB4MDB9OworCXU4IGRhdF9odmZsaXAyW10gPSB7MHg5MCwgMHgwNCwgMHg2Y307CisJdTggZGF0X2h2ZmxpcDRbXSA9IHsweDkwLCAweDAwLCAweDI0fTsKKworCS8qIExlc3MgdGhhbiA0IGltYWdlcyByZWNlaXZlZCAtPiB0b28gZWFybHkgdG8gc2V0IHRoZSBzZXR0aW5ncyAqLworCWlmIChzZC0+bmJJbSA8IDQpIHsKKwkJc2QtPndhaXRTZXQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJc2QtPndhaXRTZXQgPSAwOworCisJaWYgKGZyZXEgIT0gc2QtPnZvbGQuQUM1MEh6KSB7CisJCXNkLT52b2xkLkFDNTBIeiA9IGZyZXE7CisKKwkJZGF0X2ZyZXEyWzJdID0gZnJlcSA/IDB4YzAgOiAweDgwOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZnJlcTEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfZnJlcTIpOworCQltc2xlZXAoMjApOworCX0KKworCWlmIChtaXJyb3IgIT0gc2QtPnZvbGQubWlycm9yIHx8IGZsaXAgIT0gc2QtPnZvbGQuZmxpcCkgeworCQlzZC0+dm9sZC5taXJyb3IgPSBtaXJyb3I7CisJCXNkLT52b2xkLmZsaXAgICA9IGZsaXA7CisKKwkJZGF0X2h2ZmxpcDJbMl0gPSAweDZjICsgMiAqICgxIC0gZmxpcCkgKyAoMSAtIG1pcnJvcik7CisJCWRhdF9odmZsaXA0WzJdID0gMHgyNCArIDIgKiAoMSAtIGZsaXApICsgKDEgLSBtaXJyb3IpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwMSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXAyKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfaHZmbGlwNCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9odmZsaXA1KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2h2ZmxpcDYpOworCQltc2xlZXAoMTMwKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2R1bW15MSk7CisJCW1zbGVlcCg2KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2R1bW15MSk7CisJCW1zbGVlcCg2KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2R1bW15MSk7CisJCW1zbGVlcCg2KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2R1bW15MSk7CisJCW1zbGVlcCg2KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2R1bW15MSk7CisJCW1zbGVlcCg2KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2R1bW15MSk7CisJCW1zbGVlcCg2KTsKKworCQkvKiBTb21ldGltZXMgcHJlc2VudCwgc29tZXRpbWVzIG5vdCwgdXNlZnVsPyAqLworCQkvKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTIpOworCQkgKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTMpOworCQkgKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTIpOworCQkgKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTMpOworCQkgKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTIpOworCQkgKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTMpOworCQkgKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTIpOworCQkgKiBjdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkdW1teTMpOyovCisJfQorCisJaWYgKGJhY2tsaWdodCAhPSBzZC0+dm9sZC5iYWNrbGlnaHQpIHsKKwkJc2QtPnZvbGQuYmFja2xpZ2h0ID0gYmFja2xpZ2h0OworCQlpZiAoYmFja2xpZ2h0IDwgMCB8fCBiYWNrbGlnaHQgPiBzZC0+dm1heC5iYWNrbGlnaHQpCisJCQliYWNrbGlnaHQgPSAwOworCisJCWRhdF9tdWx0aTFbMl0gPSAweDlkOworCQlkYXRfbXVsdGkzWzJdID0gZGF0X211bHRpMVsyXSArIDE7CisJCWRhdF9tdWx0aTRbMl0gPSBkYXRfbXVsdGkyWzJdID0gYmFja2xpZ2h0OworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkxKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk0KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTYpOworCX0KKworCWlmIChnYW0gIT0gc2QtPnZvbGQuZ2FtbWEpIHsKKwkJc2QtPnZvbGQuZ2FtbWEgPSBnYW07CisJCWlmIChnYW0gPCAwIHx8IGdhbSA+IHNkLT52bWF4LmdhbW1hKQorCQkJZ2FtID0gMDsKKworCQlkYXRfbXVsdGkxWzJdID0gMHg2ZDsKKwkJZGF0X211bHRpM1syXSA9IGRhdF9tdWx0aTFbMl0gKyAxOworCQlkYXRfbXVsdGk0WzJdID0gZGF0X211bHRpMlsyXSA9IDB4NDAgKyBnYW07CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkyKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMyk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTQpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk1KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNik7CisJfQorCisJaWYgKGNudHIgIT0gc2QtPnZvbGQuY29udHJhc3QpIHsKKwkJc2QtPnZvbGQuY29udHJhc3QgPSBjbnRyOworCQlpZiAoY250ciA8IDAgfHwgY250ciA+IHNkLT52bWF4LmNvbnRyYXN0KQorCQkJY250ciA9IDA7CisKKwkJZGF0X211bHRpMVsyXSA9IDB4NmQ7CisJCWRhdF9tdWx0aTNbMl0gPSBkYXRfbXVsdGkxWzJdICsgMTsKKwkJZGF0X211bHRpNFsyXSA9IGRhdF9tdWx0aTJbMl0gPSAweDEyICsgMTYgKiBjbnRyOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGkxKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpMik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfbXVsdGk0KTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X211bHRpNSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9tdWx0aTYpOworCX0KKworCWlmIChicmlnaHQgIT0gc2QtPnZvbGQuYnJpZ2h0bmVzcykgeworCQlzZC0+dm9sZC5icmlnaHRuZXNzID0gYnJpZ2h0OworCQlpZiAoYnJpZ2h0IDwgMCB8fCBicmlnaHQgPiBzZC0+dm1heC5icmlnaHRuZXNzKQorCQkJYnJpZ2h0ID0gMDsKKworCQlkYXRfYnJpZ2h0MlsyXSA9IGJyaWdodDsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDEpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0Mik7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQzKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIDB4MDAzMywgMywgZGF0X2JyaWdodDQpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMzLCAzLCBkYXRfYnJpZ2h0NSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg3YTAwLCAweDAwMzMsIDMsIGRhdF9icmlnaHQ2KTsKKwl9CisKKwlpZiAoc2hhcnAgIT0gc2QtPnZvbGQuc2hhcnBuZXNzKSB7CisJCXNkLT52b2xkLnNoYXJwbmVzcyA9IHNoYXJwOworCQlpZiAoc2hhcnAgPCAwIHx8IHNoYXJwID4gc2QtPnZtYXguc2hhcnBuZXNzKQorCQkJc2hhcnAgPSAwOworCisJCWRhdF9zaGFycFsxXSA9IHNoYXJwOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4N2EwMCwgMHgwMDMyLCAzLCBkYXRfc2hhcnApOworCX0KKworCWlmIChodWUgIT0gc2QtPnZvbGQuaHVlKSB7CisJCXNkLT5zd2FwUkIgPSBodWU7CisJCXNkLT52b2xkLmh1ZSA9IGh1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWkyMDIwX3Bvc3RfdW5zZXRfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDUsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsKKwltc2xlZXAoMjApOworCWlmIChfTUkyMDIwY18gfHwgX01JMjAyMF8pCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDAxLCAweDAwMDAsIDAsIE5VTEwpOworCWVsc2UKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNDEsIDB4MDAwMCwgMCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW92MjY0MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1vdjI2NDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGI5YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1vdjI2NDAuYwpAQCAtMCwwICsxLDUwNSBAQAorLyogQGZpbGUgZ2w4NjAtb3YyNjQwLmMKKyAqIEBhdXRob3IgT2xpdmllciBMT1JJTiwgZnJvbSBNYWxtb3N0b3NvJ3MgbG9ncworICogQGRhdGUgMjAwOS0wOC0yNworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyogU2Vuc29yIDogT1YyNjQwICovCisKKyNpbmNsdWRlICJnbDg2MC5oIgorCitzdGF0aWMgdTggZGF0X2luaXQxW10gPSAiXHgwMFx4NDFceDA3XHg2YVx4MDZceDYxXHgwZFx4NmEiICJceDEwXHgxMFx4YzFceDAxIjsKK3N0YXRpYyB1OCBkYXRfaW5pdDJbXSA9IHsweDYxfTsgLyogZXhwZWN0ZWQgKi8KK3N0YXRpYyB1OCBkYXRfaW5pdDNbXSA9IHsweDUxfTsgLyogZXhwZWN0ZWQgKi8KKworc3RhdGljIHU4IGRhdF9wb3N0W10gPQorCSJceDAwXHg0MVx4MDdceDZhXHgwNlx4ZWZceDBkXHg2YSIgIlx4MTBceDEwXHhjMVx4MDEiOworCitzdGF0aWMgdTggZGF0XzY0MFtdICA9ICJceGQwXHgwMVx4ZDFceDA4XHhkMlx4ZTBceGQzXHgwMlx4ZDRceDEwXHhkNVx4ODEiOworc3RhdGljIHU4IGRhdF84MDBbXSAgPSAiXHhkMFx4MDFceGQxXHgxMFx4ZDJceDU4XHhkM1x4MDJceGQ0XHgxOFx4ZDVceDIxIjsKK3N0YXRpYyB1OCBkYXRfMTI4MFtdID0gIlx4ZDBceDAxXHhkMVx4MThceGQyXHhjMFx4ZDNceDAyXHhkNFx4MjhceGQ1XHgwMSI7CitzdGF0aWMgdTggZGF0XzE2MDBbXSA9ICJceGQwXHgwMVx4ZDFceDIwXHhkMlx4YjBceGQzXHgwMlx4ZDRceDMwXHhkNVx4NDEiOworCitzdGF0aWMgdTggYzUwW10gPSB7MHg1MH07IC8qIGV4cGVjdGVkICovCitzdGF0aWMgdTggYzI4W10gPSB7MHgyOH07IC8qIGV4cGVjdGVkICovCitzdGF0aWMgdTggY2E4W10gPSB7MHhhOH07IC8qIGV4cGVjdGVkICovCisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9pbml0X2F0X3N0YXJ0dXBbXSA9IHsKKwl7MHgwMDAwLCAweDAwMDB9LCB7MHgwMDEwLCAweDAwMTB9LCB7MHgwMDA4LCAweDAwYzB9LCB7MHgwMDAxLCAweDAwYzF9LAorCXsweDAwMDEsIDB4MDBjMn0sIHsweDAwMjAsIDB4MDAwNn0sIHsweDAwNmEsIDB4MDAwZH0sCisJezB4MDA1MCwgMHgwMDAwfSwgezB4MDA0MSwgMHgwMDAwfSwgezB4MDA2YSwgMHgwMDA3fSwgezB4MDA2MSwgMHgwMDA2fSwKKwl7MHgwMDZhLCAweDAwMGR9LCB7MHgwMDAwLCAweDAwYzB9LCB7MHgwMDEwLCAweDAwMTB9LCB7MHgwMDAxLCAweDAwYzF9LAorCXsweDAwNDEsIDB4MDBjMn0sIHsweDAwMDQsIDB4MDBkOH0sIHsweDAwMTIsIDB4MDAwNH0sIHsweDAwMDAsIDB4MDA1OH0sCisJezB4MDA0MSwgMHgwMDAwfSwgezB4MDA2MSwgMHgwMDAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9jb21tb25bXSA9IHsKKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MGZmLCAweDAwMmN9LCB7MHg2MGRmLCAweDAwMmV9LCB7MHg2MDAxLCAweDAwZmZ9LAorCXsweDYwODAsIDB4MDAxMn0sIHsweDYwMDAsIDB4MDAwMH0sIHsweDYwMDAsIDB4MDA0NX0sIHsweDYwMDAsIDB4MDAxMH0sCisJezB4NjAzNSwgMHgwMDNjfSwgezB4NjAwMCwgMHgwMDExfSwgezB4NjAyOCwgMHgwMDA0fSwgezB4NjBlNSwgMHgwMDEzfSwKKwl7MHg2MDg4LCAweDAwMTR9LCB7MHg2MDBjLCAweDAwMmN9LCB7MHg2MDc4LCAweDAwMzN9LCB7MHg2MGY3LCAweDAwM2J9LAorCXsweDYwMDAsIDB4MDAzZX0sIHsweDYwMTEsIDB4MDA0M30sIHsweDYwMTAsIDB4MDAxNn0sIHsweDYwODIsIDB4MDAzOX0sCisJezB4NjA4OCwgMHgwMDM1fSwgezB4NjAwYSwgMHgwMDIyfSwgezB4NjA0MCwgMHgwMDM3fSwgezB4NjAwMCwgMHgwMDIzfSwKKwl7MHg2MGEwLCAweDAwMzR9LCB7MHg2MDFhLCAweDAwMzZ9LCB7MHg2MDAyLCAweDAwMDZ9LCB7MHg2MGMwLCAweDAwMDd9LAorCXsweDYwYjcsIDB4MDAwZH0sIHsweDYwMDEsIDB4MDAwZX0sIHsweDYwMDAsIDB4MDA0Y30sIHsweDYwODEsIDB4MDA0YX0sCisJezB4NjA5OSwgMHgwMDIxfSwgezB4NjAwMiwgMHgwMDA5fSwgezB4NjAzZSwgMHgwMDI0fSwgezB4NjAzNCwgMHgwMDI1fSwKKwl7MHg2MDgxLCAweDAwMjZ9LCB7MHg2MDAwLCAweDAwMDB9LCB7MHg2MDAwLCAweDAwNDV9LCB7MHg2MDAwLCAweDAwMTB9LAorCXsweDYwMDAsIDB4MDA1Y30sIHsweDYwMDAsIDB4MDA2M30sIHsweDYwMDAsIDB4MDA3Y30sIHsweDYwNzAsIDB4MDA2MX0sCisJezB4NjA4MCwgMHgwMDYyfSwgezB4NjA4MCwgMHgwMDIwfSwgezB4NjAzMCwgMHgwMDI4fSwgezB4NjAwMCwgMHgwMDZjfSwKKwl7MHg2MDAwLCAweDAwNmV9LCB7MHg2MDAyLCAweDAwNzB9LCB7MHg2MDk0LCAweDAwNzF9LCB7MHg2MGMxLCAweDAwNzN9LAorCXsweDYwMzQsIDB4MDAzZH0sIHsweDYwNTcsIDB4MDA1YX0sIHsweDYwYmIsIDB4MDA0Zn0sIHsweDYwOWMsIDB4MDA1MH0sCisJezB4NjA4MCwgMHgwMDZkfSwgezB4NjAwMiwgMHgwMDM5fSwgezB4NjAzMywgMHgwMDNhfSwgezB4NjBmMSwgMHgwMDNifSwKKwl7MHg2MDMxLCAweDAwM2N9LCB7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDE0LCAweDAwZTB9LCB7MHg2MGZmLCAweDAwNzZ9LAorCXsweDYwYTAsIDB4MDAzM30sIHsweDYwMjAsIDB4MDA0Mn0sIHsweDYwMTgsIDB4MDA0M30sIHsweDYwMDAsIDB4MDA0Y30sCisJezB4NjBkMCwgMHgwMDg3fSwgezB4NjAwZiwgMHgwMDg4fSwgezB4NjAwMywgMHgwMGQ3fSwgezB4NjAxMCwgMHgwMGQ5fSwKKwl7MHg2MDA1LCAweDAwZGF9LCB7MHg2MDgyLCAweDAwZDN9LCB7MHg2MGMwLCAweDAwZjl9LCB7MHg2MDA2LCAweDAwNDR9LAorCXsweDYwMDcsIDB4MDBkMX0sIHsweDYwMDIsIDB4MDBkMn0sIHsweDYwMDAsIDB4MDBkMn0sIHsweDYwMTEsIDB4MDBkOH0sCisJezB4NjAwOCwgMHgwMGM4fSwgezB4NjA4MCwgMHgwMGM5fSwgezB4NjAwOCwgMHgwMDdjfSwgezB4NjAyMCwgMHgwMDdkfSwKKwl7MHg2MDIwLCAweDAwN2R9LCB7MHg2MDAwLCAweDAwOTB9LCB7MHg2MDBlLCAweDAwOTF9LCB7MHg2MDFhLCAweDAwOTF9LAorCXsweDYwMzEsIDB4MDA5MX0sIHsweDYwNWEsIDB4MDA5MX0sIHsweDYwNjksIDB4MDA5MX0sIHsweDYwNzUsIDB4MDA5MX0sCisJezB4NjA3ZSwgMHgwMDkxfSwgezB4NjA4OCwgMHgwMDkxfSwgezB4NjA4ZiwgMHgwMDkxfSwgezB4NjA5NiwgMHgwMDkxfSwKKwl7MHg2MGEzLCAweDAwOTF9LCB7MHg2MGFmLCAweDAwOTF9LCB7MHg2MGM0LCAweDAwOTF9LCB7MHg2MGQ3LCAweDAwOTF9LAorCXsweDYwZTgsIDB4MDA5MX0sIHsweDYwMjAsIDB4MDA5MX0sIHsweDYwMDAsIDB4MDA5Mn0sIHsweDYwMDYsIDB4MDA5M30sCisJezB4NjBlMywgMHgwMDkzfSwgezB4NjAwNSwgMHgwMDkzfSwgezB4NjAwNSwgMHgwMDkzfSwgezB4NjAwMCwgMHgwMDkzfSwKKwl7MHg2MDA0LCAweDAwOTN9LCB7MHg2MDAwLCAweDAwOTN9LCB7MHg2MDAwLCAweDAwOTN9LCB7MHg2MDAwLCAweDAwOTN9LAorCXsweDYwMDAsIDB4MDA5M30sIHsweDYwMDAsIDB4MDA5M30sIHsweDYwMDAsIDB4MDA5M30sIHsweDYwMDAsIDB4MDA5M30sCisJezB4NjAwMCwgMHgwMDk2fSwgezB4NjAwOCwgMHgwMDk3fSwgezB4NjAxOSwgMHgwMDk3fSwgezB4NjAwMiwgMHgwMDk3fSwKKwl7MHg2MDBjLCAweDAwOTd9LCB7MHg2MDI0LCAweDAwOTd9LCB7MHg2MDMwLCAweDAwOTd9LCB7MHg2MDI4LCAweDAwOTd9LAorCXsweDYwMjYsIDB4MDA5N30sIHsweDYwMDIsIDB4MDA5N30sIHsweDYwOTgsIDB4MDA5N30sIHsweDYwODAsIDB4MDA5N30sCisJezB4NjAwMCwgMHgwMDk3fSwgezB4NjAwMCwgMHgwMDk3fSwgezB4NjBlZCwgMHgwMGMzfSwgezB4NjA5YSwgMHgwMGM0fSwKKwl7MHg2MDAwLCAweDAwYTR9LCB7MHg2MDExLCAweDAwYzV9LCB7MHg2MDUxLCAweDAwYzZ9LCB7MHg2MDEwLCAweDAwYzd9LAorCXsweDYwNjYsIDB4MDBiNn0sIHsweDYwYTUsIDB4MDBiOH0sIHsweDYwNjQsIDB4MDBiN30sIHsweDYwN2MsIDB4MDBiOX0sCisJezB4NjBhZiwgMHgwMGIzfSwgezB4NjA5NywgMHgwMGI0fSwgezB4NjBmZiwgMHgwMGI1fSwgezB4NjBjNSwgMHgwMGIwfSwKKwl7MHg2MDk0LCAweDAwYjF9LCB7MHg2MDBmLCAweDAwYjJ9LCB7MHg2MDVjLCAweDAwYzR9LCB7MHg2MDAwLCAweDAwYTh9LAorCXsweDYwYzgsIDB4MDBjMH0sIHsweDYwOTYsIDB4MDBjMX0sIHsweDYwMWQsIDB4MDA4Nn0sIHsweDYwMDAsIDB4MDA1MH0sCisJezB4NjA5MCwgMHgwMDUxfSwgezB4NjAxOCwgMHgwMDUyfSwgezB4NjAwMCwgMHgwMDUzfSwgezB4NjAwMCwgMHgwMDU0fSwKKwl7MHg2MDg4LCAweDAwNTV9LCB7MHg2MDAwLCAweDAwNTd9LCB7MHg2MDkwLCAweDAwNWF9LCB7MHg2MDE4LCAweDAwNWJ9LAorCXsweDYwMDUsIDB4MDA1Y30sIHsweDYwZWQsIDB4MDBjM30sIHsweDYwMDAsIDB4MDA3Zn0sIHsweDYwMDUsIDB4MDBkYX0sCisJezB4NjAxZiwgMHgwMGU1fSwgezB4NjA2NywgMHgwMGUxfSwgezB4NjAwMCwgMHgwMGUwfSwgezB4NjBmZiwgMHgwMGRkfSwKKwl7MHg2MDAwLCAweDAwMDV9LCB7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDAwLCAweDAwMDB9LCB7MHg2MDAwLCAweDAwNDV9LAorCXsweDYwMDAsIDB4MDAxMH0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9hW10gPSB7CisJezB4MDA0MSwgMHgwMDAwfSwgezB4MDA2YSwgMHgwMDA3fSwgezB4MDBlZiwgMHgwMDA2fSwgezB4MDA2YSwgMHgwMDBkfSwKKwl7MHgwMDAwLCAweDAwYzB9LCB7MHgwMDEwLCAweDAwMTB9LCB7MHgwMDAxLCAweDAwYzF9LCB7MHgwMDQxLCAweDAwYzJ9LAorCXsweDAwMDQsIDB4MDBkOH0sIHsweDAwMTIsIDB4MDAwNH0sIHsweDAwMDAsIDB4MDA1OH0sIHsweDAwNDEsIDB4MDAwMH0sCisJezUwLCAweGZmZmZ9LAorCXsweDAwNjEsIDB4MDAwMH0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDAwLCAweDAwN2N9LCB7MHg2MDA3LCAweDAwN2R9LAorCXszMCwgMHhmZmZmfSwKKwl7MHgwMDQwLCAweDAwMDB9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYltdID0geworCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwMzgsIDB4MDAwY30sCisJezEwLCAweGZmZmZ9LAorCXsweDYwMDAsIDB4MDAxMX0sCisJLyogYmFja2xpZ2h0PTMxLzY0ICovCisJezB4NjAwMSwgMHgwMGZmfSwgezB4NjAzZSwgMHgwMDI0fSwgezB4NjAzNCwgMHgwMDI1fSwKKwkvKiBicmlnaHQ9MC8yNTYgKi8KKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDA5LCAweDAwN2N9LCB7MHg2MDAwLCAweDAwN2R9LAorCS8qIHdiYWw9NjQvMTI4ICovCisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjAwMywgMHgwMDdjfSwgezB4NjA0MCwgMHgwMDdkfSwKKwkvKiBjbnRyPTAvMjU2ICovCisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjAwNywgMHgwMDdjfSwgezB4NjAwMCwgMHgwMDdkfSwKKwkvKiBzYXQ9MTI4LzI1NiAqLworCXsweDYwMDAsIDB4MDBmZn0sIHsweDYwMDEsIDB4MDA3Y30sIHsweDYwODAsIDB4MDA3ZH0sCisJLyogc2hhcnBuZXNzPTAvMzIgKi8KKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDAxLCAweDAwOTJ9LCB7MHg2MGMwLCAweDAwOTN9LAorCS8qIGh1ZT0wLzI1NiAqLworCXsweDYwMDAsIDB4MDBmZn0sIHsweDYwMDIsIDB4MDA3Y30sIHsweDYwMDAsIDB4MDA3ZH0sCisJLyogZ2FtPTMyLzY0ICovCisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjAwOCwgMHgwMDdjfSwgezB4NjAyMCwgMHgwMDdkfSwKKwkvKiBpbWFnZSByaWdodCB1cCAqLworCXsweGZmZmYsIDB4ZmZmZn0sCisJezE1LCAweGZmZmZ9LAorCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwMDAsIDB4ODAwNH0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MGE4LCAweDAwMDR9LAorCXsxNSwgMHhmZmZmfSwKKwl7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDAwLCAweDgwMDR9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjBmOCwgMHgwMDA0fSwKKwkvKiBpbWFnZSByaWdodCB1cCAqLworCXsweGZmZmYsIDB4ZmZmZn0sCisJLyogYmFja2xpZ2h0PTMxLzY0ICovCisJezB4NjAwMSwgMHgwMGZmfSwgezB4NjAzZSwgMHgwMDI0fSwgezB4NjAzNCwgMHgwMDI1fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF82NDBbXSA9IHsKKwl7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MGYxLCAweDAwZGR9LCB7MHg2MDA0LCAweDAwZTB9LCB7MHg2MDY3LCAweDAwZTF9LAorCXsweDYwMDQsIDB4MDBkYX0sIHsweDYwMDAsIDB4MDBmZn0sIHsweDYwZjEsIDB4MDBkZH0sIHsweDYwMDQsIDB4MDBlMH0sCisJezB4NjAwMSwgMHgwMGZmfSwgezB4NjAwMCwgMHgwMDEyfSwgezB4NjAwMCwgMHgwMDExfSwgezB4NjAxMSwgMHgwMDE3fSwKKwl7MHg2MDc1LCAweDAwMTh9LCB7MHg2MDAxLCAweDAwMTl9LCB7MHg2MDk3LCAweDAwMWF9LCB7MHg2MDM2LCAweDAwMzJ9LAorCXsweDYwYmIsIDB4MDA0Zn0sIHsweDYwNTcsIDB4MDA1YX0sIHsweDYwOWMsIDB4MDA1MH0sIHsweDYwODAsIDB4MDA2ZH0sCisJezB4NjA5MiwgMHgwMDI2fSwgezB4NjBmZiwgMHgwMDIwfSwgezB4NjAwMCwgMHgwMDI3fSwgezB4NjAwMCwgMHgwMGZmfSwKKwl7MHg2MGM4LCAweDAwYzB9LCB7MHg2MDk2LCAweDAwYzF9LCB7MHg2MDAwLCAweDAwOGN9LCB7MHg2MDNkLCAweDAwODZ9LAorCXsweDYwODksIDB4MDA1MH0sIHsweDYwOTAsIDB4MDA1MX0sIHsweDYwMmMsIDB4MDA1Mn0sIHsweDYwMDAsIDB4MDA1M30sCisJezB4NjAwMCwgMHgwMDU0fSwgezB4NjA4OCwgMHgwMDU1fSwgezB4NjAwMCwgMHgwMDU3fSwgezB4NjBhMCwgMHgwMDVhfSwKKwl7MHg2MDc4LCAweDAwNWJ9LCB7MHg2MDAwLCAweDAwNWN9LCB7MHg2MDA0LCAweDAwZDN9LCB7MHg2MDAwLCAweDAwZTB9LAorCXsweDYwZmYsIDB4MDBkZH0sIHsweDYwYTEsIDB4MDA1YX0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfODAwW10gPSB7CisJezB4NjAwMCwgMHgwMGZmfSwgezB4NjBmMSwgMHgwMGRkfSwgezB4NjAwNCwgMHgwMGUwfSwgezB4NjA2NywgMHgwMGUxfSwKKwl7MHg2MDA0LCAweDAwZGF9LCB7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MGYxLCAweDAwZGR9LCB7MHg2MDA0LCAweDAwZTB9LAorCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwNDAsIDB4MDAxMn0sIHsweDYwMDAsIDB4MDAxMX0sIHsweDYwMTEsIDB4MDAxN30sCisJezB4NjA0MywgMHgwMDE4fSwgezB4NjAwMCwgMHgwMDE5fSwgezB4NjA0YiwgMHgwMDFhfSwgezB4NjAwOSwgMHgwMDMyfSwKKwl7MHg2MGNhLCAweDAwNGZ9LCB7MHg2MGE4LCAweDAwNTB9LCB7MHg2MDAwLCAweDAwNmR9LCB7MHg2MDM4LCAweDAwM2R9LAorCXsweDYwYzgsIDB4MDAzNX0sIHsweDYwMDAsIDB4MDAyMn0sIHsweDYwOTIsIDB4MDAyNn0sIHsweDYwZmYsIDB4MDAyMH0sCisJezB4NjAwMCwgMHgwMDI3fSwgezB4NjAwMCwgMHgwMGZmfSwgezB4NjA2NCwgMHgwMGMwfSwgezB4NjA0YiwgMHgwMGMxfSwKKwl7MHg2MDAwLCAweDAwOGN9LCB7MHg2MDFkLCAweDAwODZ9LCB7MHg2MDgyLCAweDAwZDN9LCB7MHg2MDAwLCAweDAwZTB9LAorCXsweDYwZmYsIDB4MDBkZH0sIHsweDYwMjAsIDB4MDA4Y30sIHsweDYwMDEsIDB4MDBmZn0sIHsweDYwNDQsIDB4MDAxOH0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfYmlnX2FbXSA9IHsKKwl7MHgwMDAyLCAweDAwYzF9LCB7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MGYxLCAweDAwZGR9LCB7MHg2MDA0LCAweDAwZTB9LAorCXsweDYwMDEsIDB4MDBmZn0sIHsweDYwMDAsIDB4MDAxMn0sIHsweDYwMDAsIDB4MDAwMH0sIHsweDYwMDAsIDB4MDA0NX0sCisJezB4NjAwMCwgMHgwMDEwfSwgezB4NjAwMCwgMHgwMDExfSwgezB4NjAxMSwgMHgwMDE3fSwgezB4NjA3NSwgMHgwMDE4fSwKKwl7MHg2MDAxLCAweDAwMTl9LCB7MHg2MDk3LCAweDAwMWF9LCB7MHg2MDM2LCAweDAwMzJ9LCB7MHg2MGJiLCAweDAwNGZ9LAorCXsweDYwOWMsIDB4MDA1MH0sIHsweDYwNTcsIDB4MDA1YX0sIHsweDYwODAsIDB4MDA2ZH0sIHsweDYwNDMsIDB4MDAwZn0sCisJezB4NjA4ZiwgMHgwMDAzfSwgezB4NjAwNSwgMHgwMDdjfSwgezB4NjA4MSwgMHgwMDI2fSwgezB4NjAwMCwgMHgwMGZmfSwKKwl7MHg2MGM4LCAweDAwYzB9LCB7MHg2MDk2LCAweDAwYzF9LCB7MHg2MDAwLCAweDAwOGN9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX2JpZ19iW10gPSB7CisJezB4NjAzZCwgMHgwMDg2fSwgezB4NjAwMCwgMHgwMDUwfSwgezB4NjA5MCwgMHgwMDUxfSwgezB4NjAyYywgMHgwMDUyfSwKKwl7MHg2MDAwLCAweDAwNTN9LCB7MHg2MDAwLCAweDAwNTR9LCB7MHg2MDg4LCAweDAwNTV9LCB7MHg2MDAwLCAweDAwNTd9LAorCXsweDYwNDAsIDB4MDA1YX0sIHsweDYwZjAsIDB4MDA1Yn0sIHsweDYwMDEsIDB4MDA1Y30sIHsweDYwODIsIDB4MDBkM30sCisJezB4NjAwMCwgMHgwMDhlfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9iaWdfY1tdID0geworCXsweDYwMDQsIDB4MDBkYX0sIHsweDYwMDAsIDB4MDBlMH0sIHsweDYwNjcsIDB4MDBlMX0sIHsweDYwZmYsIDB4MDBkZH0sCisJezB4NjAwMSwgMHgwMGZmfSwgezB4NjAwMCwgMHgwMGZmfSwgezB4NjBmMSwgMHgwMGRkfSwgezB4NjAwNCwgMHgwMGUwfSwKKwl7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDAwLCAweDAwMTF9LCB7MHg2MDAwLCAweDAwZmZ9LCB7MHg2MDEwLCAweDAwYzd9LAorCXsweDYwMDAsIDB4MDA5Mn0sIHsweDYwMDYsIDB4MDA5M30sIHsweDYwZTMsIDB4MDA5M30sIHsweDYwMDUsIDB4MDA5M30sCisJezB4NjAwNSwgMHgwMDkzfSwgezB4NjBlZCwgMHgwMGMzfSwgezB4NjAwMCwgMHgwMGE0fSwgezB4NjBkMCwgMHgwMDg3fSwKKwl7MHg2MDAzLCAweDAwOTZ9LCB7MHg2MDBjLCAweDAwOTd9LCB7MHg2MDI0LCAweDAwOTd9LCB7MHg2MDMwLCAweDAwOTd9LAorCXsweDYwMjgsIDB4MDA5N30sIHsweDYwMjYsIDB4MDA5N30sIHsweDYwMDIsIDB4MDA5N30sIHsweDYwMDEsIDB4MDBmZn0sCisJezB4NjA0MywgMHgwMDBmfSwgezB4NjA4ZiwgMHgwMDAzfSwgezB4NjAwMCwgMHgwMDJkfSwgezB4NjAwMCwgMHgwMDJlfSwKKwl7MHg2MDBhLCAweDAwMjJ9LCB7MHg2MDAyLCAweDAwNzB9LCB7MHg2MDA4LCAweDAwMTR9LCB7MHg2MDQ4LCAweDAwMTR9LAorCXsweDYwMDAsIDB4MDBmZn0sIHsweDYwMDAsIDB4MDBlMH0sIHsweDYwZmYsIDB4MDBkZH0sCit9OworCitzdGF0aWMgc3RydWN0IHZhbGlkeCB0YmxfcG9zdF91bnNldF9hbHRbXSA9IHsKKwl7MHgwMDZhLCAweDAwMGR9LCB7MHg2MDAxLCAweDAwZmZ9LCB7MHg2MDgxLCAweDAwMjZ9LCB7MHg2MDAwLCAweDAwMDB9LAorCXsweDYwMDAsIDB4MDA0NX0sIHsweDYwMDAsIDB4MDAxMH0sIHsweDYwNjgsIDB4MDAwZH0sCisJezUwLCAweGZmZmZ9LAorCXsweDAwMjEsIDB4MDAwMH0sCit9OworCitzdGF0aWMgaW50ICBvdjI2NDBfaW5pdF9hdF9zdGFydHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBvdjI2NDBfY29uZmlndXJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3YyNjQwX2luaXRfcHJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3YyNjQwX2luaXRfcG9zdF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIG92MjY0MF9wb3N0X3Vuc2V0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3YyNjQwX2NhbWVyYV9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3ZvaWQgb3YyNjQwX2luaXRfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT52Y3VyLmJhY2tsaWdodCAgPSAgMzI7CisJc2QtPnZjdXIuYnJpZ2h0bmVzcyA9ICAgMDsKKwlzZC0+dmN1ci5zaGFycG5lc3MgID0gICA2OworCXNkLT52Y3VyLmNvbnRyYXN0ICAgPSAgIDA7CisJc2QtPnZjdXIuZ2FtbWEgICAgICA9ICAzMjsKKwlzZC0+dmN1ci5odWUgICAgICAgID0gICAwOworCXNkLT52Y3VyLnNhdHVyYXRpb24gPSAxMjg7CisJc2QtPnZjdXIud2hpdGViYWwgICA9ICA2NDsKKworCXNkLT52bWF4LmJhY2tsaWdodCAgPSAgNjQ7CisJc2QtPnZtYXguYnJpZ2h0bmVzcyA9IDI1NTsKKwlzZC0+dm1heC5zaGFycG5lc3MgID0gIDMxOworCXNkLT52bWF4LmNvbnRyYXN0ICAgPSAyNTU7CisJc2QtPnZtYXguZ2FtbWEgICAgICA9ICA2NDsKKwlzZC0+dm1heC5odWUgICAgICAgID0gMjU1ICsgMTsKKwlzZC0+dm1heC5zYXR1cmF0aW9uID0gMjU1OworCXNkLT52bWF4LndoaXRlYmFsICAgPSAxMjg7CisJc2QtPnZtYXgubWlycm9yICAgICA9IDA7CisJc2QtPnZtYXguZmxpcCAgICAgICA9IDA7CisJc2QtPnZtYXguQUM1MEh6ICAgICA9IDA7CisKKwlzZC0+ZGV2X2NhbWVyYV9zZXR0aW5ncyA9IG92MjY0MF9jYW1lcmFfc2V0dGluZ3M7CisJc2QtPmRldl9pbml0X2F0X3N0YXJ0dXAgPSBvdjI2NDBfaW5pdF9hdF9zdGFydHVwOworCXNkLT5kZXZfY29uZmlndXJlX2FsdCAgID0gb3YyNjQwX2NvbmZpZ3VyZV9hbHQ7CisJc2QtPmRldl9pbml0X3ByZV9hbHQgICAgPSBvdjI2NDBfaW5pdF9wcmVfYWx0OworCXNkLT5kZXZfcG9zdF91bnNldF9hbHQgID0gb3YyNjQwX3Bvc3RfdW5zZXRfYWx0OworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgY29tbW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfY29tbW9uLCBBUlJBWV9TSVpFKHRibF9jb21tb24pKTsKK30KKworc3RhdGljIGludCBvdjI2NDBfaW5pdF9hdF9zdGFydHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9hdF9zdGFydHVwLAorCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9hdF9zdGFydHVwKSk7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAxMiwgZGF0X2luaXQxKTsKKworCWNvbW1vbihnc3BjYV9kZXYpOworCisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDA2LCAxLCBkYXRfaW5pdDIpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwZWYsIDB4MDAwNiwgMCwgTlVMTCk7CisKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDAsIDEsIGRhdF9pbml0Myk7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA1MSwgMHgwMDAwLCAwLCBOVUxMKTsKKy8qCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMTEsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92MjY0MF9pbml0X3ByZV9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT52b2xkLmJhY2tsaWdodCAgPSAtMTsKKwlzZC0+dm9sZC5icmlnaHRuZXNzID0gLTE7CisJc2QtPnZvbGQuc2hhcnBuZXNzICA9IC0xOworCXNkLT52b2xkLmNvbnRyYXN0ICAgPSAtMTsKKwlzZC0+dm9sZC5zYXR1cmF0aW9uID0gLTE7CisJc2QtPnZvbGQuZ2FtbWEgICAgPSAtMTsKKwlzZC0+dm9sZC5odWUgICAgICA9IC0xOworCXNkLT52b2xkLndoaXRlYmFsID0gLTE7CisKKwlvdjI2NDBfaW5pdF9wb3N0X2FsdChnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX2luaXRfcG9zdF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXMzMiByZXNvID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKHMzMikgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJczMyIG47IC8qIHJlc2VydmVkIGZvciBGRVRDSCBtYWNyb3MgKi8KKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgNSwgMHgwMDAxLCAweDAwMDAsIDAsIE5VTEwpOworCisJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2EsCisJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2EpKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAxMiwgZGF0X3Bvc3QpOworCWNvbW1vbihnc3BjYV9kZXYpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYSwKKwkJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2EpLCBuKTsKKworCXN3aXRjaCAocmVzbykgeworCWNhc2UgSU1BR0VfNjQwOgorCQluID0gZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsXzY0MCwgQVJSQVlfU0laRSh0YmxfNjQwKSk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsIDEyLCBkYXRfNjQwKTsKKwkJYnJlYWs7CisKKwljYXNlIElNQUdFXzgwMDoKKwkJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF84MDAsIEFSUkFZX1NJWkUodGJsXzgwMCkpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCAxMiwgZGF0XzgwMCk7CisJCWJyZWFrOworCisJY2FzZSBJTUFHRV8xNjAwOgorCWNhc2UgSU1BR0VfMTI4MDoKKwkJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9iaWdfYSwgQVJSQVlfU0laRSh0YmxfYmlnX2EpKTsKKworCQlpZiAocmVzbyA9PSBJTUFHRV8xMjgwKSB7CisJCQluID0gZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2JpZ19iLAorCQkJCQlBUlJBWV9TSVpFKHRibF9iaWdfYikpOworCQl9IGVsc2UgeworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMWQsIDB4MDA4NiwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMSwgMHgwMGQ3LCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDgyLCAweDAwZDMsIDAsIE5VTEwpOworCQl9CisKKwkJbiA9IGZldGNoX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9iaWdfYywgQVJSQVlfU0laRSh0YmxfYmlnX2MpKTsKKworCQlpZiAocmVzbyA9PSBJTUFHRV8xMjgwKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMSwgMHgwMGZmLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsCisJCQkJCTEyLCBkYXRfMTI4MCk7CisJCX0gZWxzZSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAyMCwgMHgwMDhjLCAwLCBOVUxMKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAxLCAweDAwZmYsIDAsIE5VTEwpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwNzYsIDB4MDAxOCwgMCwgTlVMTCk7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLAorCQkJCQkxMiwgZGF0XzE2MDApOworCQl9CisJCWJyZWFrOworCX0KKworCW4gPSBmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9iLAorCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9iKSk7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDAwLCAxLCBjNTApOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYiwKKwkJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2IpLCBuKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMDQsIDEsIGMyOCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9iLAorCQkJCUFSUkFZX1NJWkUodGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYiksIG4pOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAwNCwgMSwgY2E4KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2IsCisJCQkJQVJSQVlfU0laRSh0Ymxfc2Vuc29yX3NldHRpbmdzX2NvbW1vbl9iKSwgbik7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4MDAwMCwgMHgwMDAwLCAxLCBjNTApOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3NlbnNvcl9zZXR0aW5nc19jb21tb25fYiwKKwkJCQlBUlJBWV9TSVpFKHRibF9zZW5zb3Jfc2V0dGluZ3NfY29tbW9uX2IpLCBuKTsKKworCW92MjY0MF9jYW1lcmFfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92MjY0MF9jb25maWd1cmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCisJc3dpdGNoIChyZXNvKSB7CisJY2FzZSBJTUFHRV82NDA6CisJCWdzcGNhX2Rldi0+YWx0ID0gMyArIDE7CisJCWJyZWFrOworCisJY2FzZSBJTUFHRV84MDA6CisJY2FzZSBJTUFHRV8xMjgwOgorCWNhc2UgSU1BR0VfMTYwMDoKKwkJZ3NwY2FfZGV2LT5hbHQgPSAxICsgMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92MjY0MF9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXMzMiBiYWNrbGlnaHQgPSBzZC0+dmN1ci5iYWNrbGlnaHQ7CisJczMyIGJyaWdodCA9IHNkLT52Y3VyLmJyaWdodG5lc3M7CisJczMyIHNoYXJwICA9IHNkLT52Y3VyLnNoYXJwbmVzczsKKwlzMzIgZ2FtICAgID0gc2QtPnZjdXIuZ2FtbWE7CisJczMyIGNudHIgICA9IHNkLT52Y3VyLmNvbnRyYXN0OworCXMzMiBzYXQgICAgPSBzZC0+dmN1ci5zYXR1cmF0aW9uOworCXMzMiBodWUgICAgPSBzZC0+dmN1ci5odWU7CisJczMyIHdiYWwgICA9IHNkLT52Y3VyLndoaXRlYmFsOworCisJaWYgKGJhY2tsaWdodCAhPSBzZC0+dm9sZC5iYWNrbGlnaHQpIHsKKwkJaWYgKGJhY2tsaWdodCA8IDAgfHwgYmFja2xpZ2h0ID4gc2QtPnZtYXguYmFja2xpZ2h0KQorCQkJYmFja2xpZ2h0ID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMSAgICAgICAgICAgICAgICAgLCAweDAwZmYsCisJCQkJMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDFmICsgYmFja2xpZ2h0ICAgICAsIDB4MDAyNCwKKwkJCQkwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMWYgKyBiYWNrbGlnaHQgLSAxMCwgMHgwMDI1LAorCQkJCTAsIE5VTEwpOworCQkvKiBObyBzZC0+dm9sZC5iYWNrbGlnaHQ9YmFja2xpZ2h0OyAodG8gYmUgZG9uZSBhZ2FpbiBsYXRlcikgKi8KKwl9CisKKwlpZiAoYnJpZ2h0ICE9IHNkLT52b2xkLmJyaWdodG5lc3MpIHsKKwkJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IGJyaWdodDsKKwkJaWYgKGJyaWdodCA8IDAgfHwgYnJpZ2h0ID4gc2QtPnZtYXguYnJpZ2h0bmVzcykKKwkJCWJyaWdodCA9IDA7CisKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgICAgICAgICAsIDB4MDBmZiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDA5ICAgICAgICAgLCAweDAwN2MsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCArIGJyaWdodCwgMHgwMDdkLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAod2JhbCAhPSBzZC0+dm9sZC53aGl0ZWJhbCkgeworCQlzZC0+dm9sZC53aGl0ZWJhbCA9IHdiYWw7CisJCWlmICh3YmFsIDwgMCB8fCB3YmFsID4gc2QtPnZtYXgud2hpdGViYWwpCisJCQl3YmFsID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCAgICAgICAsIDB4MDBmZiwgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAzICAgICAgICwgMHgwMDdjLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgKyB3YmFsLCAweDAwN2QsIDAsIE5VTEwpOworCX0KKworCWlmIChjbnRyICE9IHNkLT52b2xkLmNvbnRyYXN0KSB7CisJCXNkLT52b2xkLmNvbnRyYXN0ID0gY250cjsKKwkJaWYgKGNudHIgPCAwIHx8IGNudHIgPiBzZC0+dm1heC5jb250cmFzdCkKKwkJCWNudHIgPSAwOworCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAwICAgICAgICwgMHgwMGZmLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDcgICAgICAgLCAweDAwN2MsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCArIGNudHIsIDB4MDA3ZCwgMCwgTlVMTCk7CisJfQorCisJaWYgKHNhdCAhPSBzZC0+dm9sZC5zYXR1cmF0aW9uKSB7CisJCXNkLT52b2xkLnNhdHVyYXRpb24gPSBzYXQ7CisJCWlmIChzYXQgPCAwIHx8IHNhdCA+IHNkLT52bWF4LnNhdHVyYXRpb24pCisJCQlzYXQgPSAwOworCisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAwICAgICAgLCAweDAwZmYsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMSAgICAgICwgMHgwMDdjLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAgKyBzYXQsIDB4MDA3ZCwgMCwgTlVMTCk7CisJfQorCisJaWYgKHNoYXJwICE9IHNkLT52b2xkLnNoYXJwbmVzcykgeworCQlzZC0+dm9sZC5zaGFycG5lc3MgPSBzaGFycDsKKwkJaWYgKHNoYXJwIDwgMCB8fCBzaGFycCA+IHNkLT52bWF4LnNoYXJwbmVzcykKKwkJCXNoYXJwID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCAgICAgICAgLCAweDAwZmYsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMSAgICAgICAgLCAweDAwOTIsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjBjMCArIHNoYXJwLCAweDAwOTMsIDAsIE5VTEwpOworCX0KKworCWlmIChodWUgIT0gc2QtPnZvbGQuaHVlKSB7CisJCXNkLT52b2xkLmh1ZSA9IGh1ZTsKKwkJaWYgKGh1ZSA8IDAgfHwgaHVlID4gc2QtPnZtYXguaHVlKQorCQkJaHVlID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCAgICAgLCAweDAwZmYsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMiAgICAgLCAweDAwN2MsIDAsIE5VTEwpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCArIGh1ZSAqIChodWUgPCAyNTUpLCAweDAwN2QsCisJCQkJMCwgTlVMTCk7CisJCWlmIChodWUgPj0gc2QtPnZtYXguaHVlKQorCQkJc2QtPnN3YXBSQiA9IDE7CisJCWVsc2UKKwkJCXNkLT5zd2FwUkIgPSAwOworCX0KKworCWlmIChnYW0gIT0gc2QtPnZvbGQuZ2FtbWEpIHsKKwkJc2QtPnZvbGQuZ2FtbWEgPSBnYW07CisJCWlmIChnYW0gPCAwIHx8IGdhbSA+IHNkLT52bWF4LmdhbW1hKQorCQkJZ2FtID0gMDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMCAgICAgICwgMHgwMGZmLCAwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDggICAgICAsIDB4MDA3YywgMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDAwICsgZ2FtLCAweDAwN2QsIDAsIE5VTEwpOworCX0KKworCWlmIChiYWNrbGlnaHQgIT0gc2QtPnZvbGQuYmFja2xpZ2h0KSB7CisJCXNkLT52b2xkLmJhY2tsaWdodCA9IGJhY2tsaWdodDsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4NjAwMSAgICAgICAgICAgICAgICAgLCAweDAwZmYsCisJCQkJMCwgTlVMTCk7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHg2MDFmICsgYmFja2xpZ2h0ICAgICAsIDB4MDAyNCwKKwkJCQkwLCBOVUxMKTsKKwkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMWYgKyBiYWNrbGlnaHQgLSAxMCwgMHgwMDI1LAorCQkJCTAsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvdjI2NDBfcG9zdF91bnNldF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgNSwgMHgwMDAwLCAweDAwMDAsIDAsIE5VTEwpOworCW1zbGVlcCgyMCk7CisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX3Bvc3RfdW5zZXRfYWx0LAorCQkJQVJSQVlfU0laRSh0YmxfcG9zdF91bnNldF9hbHQpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtb3Y5NjU1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW92OTY1NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTMzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW92OTY1NS5jCkBAIC0wLDAgKzEsMzM3IEBACisvKiBAZmlsZSBnbDg2MC1vdjk2NTUuYworICogQGF1dGhvciBPbGl2aWVyIExPUklOLCBmcm9tIGxvZ3MgZG9uZSBieSBTaW1vbiAoU3VyMykgYW5kIEFsbWlnaHVydAorICogb24gZHNkJ3Mgd2VibG9nCisgKiBAZGF0ZSAyMDA5LTA4LTI3CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKiBTZW5zb3IgOiBPVjk2NTUgKi8KKworI2luY2x1ZGUgImdsODYwLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9pbml0X2F0X3N0YXJ0dXBbXSA9IHsKKwl7MHgwMDAwLCAweDAwMDB9LCB7MHgwMDEwLCAweDAwMTB9LCB7MHgwMDA4LCAweDAwYzB9LCB7MHgwMDAxLCAweDAwYzF9LAorCXsweDAwMDEsIDB4MDBjMn0sIHsweDAwMjAsIDB4MDAwNn0sIHsweDAwNmEsIDB4MDAwZH0sCisKKwl7MHgwMDQwLCAweDAwMDB9LAorfTsKKworc3RhdGljIHN0cnVjdCB2YWxpZHggdGJsX2NvbW1tb25bXSA9IHsKKwl7MHgwMDQxLCAweDAwMDB9LCB7MHgwMDZhLCAweDAwMDd9LCB7MHgwMDYzLCAweDAwMDZ9LCB7MHgwMDZhLCAweDAwMGR9LAorCXsweDAwMDAsIDB4MDBjMH0sIHsweDAwMTAsIDB4MDAxMH0sIHsweDAwMDEsIDB4MDBjMX0sIHsweDAwNDEsIDB4MDBjMn0sCisJezB4MDAwNCwgMHgwMGQ4fSwgezB4MDAxMiwgMHgwMDA0fSwgezB4MDAwMCwgMHgwMDU4fSwgezB4MDA0MCwgMHgwMDAwfSwKKwl7MHgwMGYzLCAweDAwMDZ9LCB7MHgwMDU4LCAweDAwMDB9LCB7MHgwMDQ4LCAweDAwMDB9LCB7MHgwMDYxLCAweDAwMDB9LAorfTsKKworc3RhdGljIHMzMiB0YmxfbGVuZ3RoW10gPSB7MTIsIDU2LCA1MiwgNTQsIDU2LCA0MiwgMzIsIDEyfTsKKworc3RhdGljIHU4ICp0YmxfNjQwW10gPSB7CisJIlx4MDBceDQwXHgwN1x4NmFceDA2XHhmM1x4MGRceDZhIiAiXHgxMFx4MTBceGMxXHgwMSIKKwksCisJIlx4MTJceDgwXHgwMFx4MDBceDAxXHg5OFx4MDJceDgwIiAiXHgwM1x4MTJceDA0XHgwM1x4MGJceDU3XHgwZVx4NjEiCisJIlx4MGZceDQyXHgxMVx4MDFceDEyXHg2MFx4MTNceDAwIiAiXHgxNFx4M2FceDE2XHgyNFx4MTdceDE0XHgxOFx4MDAiCisJIlx4MTlceDAxXHgxYVx4M2RceDFlXHgwNFx4MjRceDNjIiAiXHgyNVx4MzZceDI2XHg3Mlx4MjdceDA4XHgyOFx4MDgiCisJIlx4MjlceDE1XHgyYVx4MDBceDJiXHgwMFx4MmNceDA4IgorCSwKKwkiXHgzMlx4ZmZceDMzXHgwMFx4MzRceDNkXHgzNVx4MDAiICJceDM2XHhmYVx4MzhceDcyXHgzOVx4NTdceDNhXHgwMCIKKwkiXHgzYlx4MGNceDNkXHg5OVx4M2VceDBjXHgzZlx4YzEiICJceDQwXHhjMFx4NDFceDAwXHg0Mlx4YzBceDQzXHgwYSIKKwkiXHg0NFx4ZjBceDQ1XHg0Nlx4NDZceDYyXHg0N1x4MmEiICJceDQ4XHgzY1x4NGFceGVlXHg0Ylx4ZTdceDRjXHhlNyIKKwkiXHg0ZFx4ZTdceDRlXHhlNyIKKwksCisJIlx4NGZceDk4XHg1MFx4OThceDUxXHgwMFx4NTJceDI4IiAiXHg1M1x4NzBceDU0XHg5OFx4NThceDFhXHg1OVx4ODUiCisJIlx4NWFceGE5XHg1Ylx4NjRceDVjXHg4NFx4NWRceDUzIiAiXHg1ZVx4MGVceDVmXHhmMFx4NjBceGYwXHg2MVx4ZjAiCisJIlx4NjJceDAwXHg2M1x4MDBceDY0XHgwMlx4NjVceDIwIiAiXHg2Nlx4MDBceDY5XHgwYVx4NmJceDVhXHg2Y1x4MDQiCisJIlx4NmRceDU1XHg2ZVx4MDBceDZmXHg5ZCIKKwksCisJIlx4NzBceDE1XHg3MVx4NzhceDcyXHgwMFx4NzNceDAwIiAiXHg3NFx4M2FceDc1XHgzNVx4NzZceDAxXHg3N1x4MDIiCisJIlx4N2FceDI0XHg3Ylx4MDRceDdjXHgwN1x4N2RceDEwIiAiXHg3ZVx4MjhceDdmXHgzNlx4ODBceDQ0XHg4MVx4NTIiCisJIlx4ODJceDYwXHg4M1x4NmNceDg0XHg3OFx4ODVceDhjIiAiXHg4Nlx4OWVceDg3XHhiYlx4ODhceGQyXHg4OVx4ZTUiCisJIlx4OGFceDIzXHg4Y1x4OGRceDkwXHg3Y1x4OTFceDdiIgorCSwKKwkiXHg5ZFx4MDJceDllXHgwMlx4OWZceDc0XHhhMFx4NzMiICJceGExXHg0MFx4YTRceDUwXHhhNVx4NjhceGE2XHg3MCIKKwkiXHhhOFx4YzFceGE5XHhlZlx4YWFceDkyXHhhYlx4MDQiICJceGFjXHg4MFx4YWRceDgwXHhhZVx4ODBceGFmXHg4MCIKKwkiXHhiMlx4ZjJceGIzXHgyMFx4YjRceDIwXHhiNVx4MDAiICJceGI2XHhhZiIKKwksCisJIlx4YmJceGFlXHhiY1x4NGZceGJkXHg0ZVx4YmVceDZhIiAiXHhiZlx4NjhceGMwXHhhYVx4YzFceGMwXHhjMlx4MDEiCisJIlx4YzNceDRlXHhjNlx4ODVceGM3XHg4MVx4YzlceGUwIiAiXHhjYVx4ZThceGNiXHhmMFx4Y2NceGQ4XHhjZFx4OTMiCisJLAorCSJceGQwXHgwMVx4ZDFceDA4XHhkMlx4ZTBceGQzXHgwMSIgIlx4ZDRceDEwXHhkNVx4ODAiCit9OworCitzdGF0aWMgdTggKnRibF84MDBbXSA9IHsKKwkiXHgwMFx4NDBceDA3XHg2YVx4MDZceGYzXHgwZFx4NmEiICJceDEwXHgxMFx4YzFceDAxIgorCSwKKwkiXHgxMlx4ODBceDAwXHgwMFx4MDFceDk4XHgwMlx4ODAiICJceDAzXHgxMlx4MDRceDAxXHgwYlx4NTdceDBlXHg2MSIKKwkiXHgwZlx4NDJceDExXHgwMFx4MTJceDAwXHgxM1x4MDAiICJceDE0XHgzYVx4MTZceDI0XHgxN1x4MWJceDE4XHhiYiIKKwkiXHgxOVx4MDFceDFhXHg4MVx4MWVceDA0XHgyNFx4M2MiICJceDI1XHgzNlx4MjZceDcyXHgyN1x4MDhceDI4XHgwOCIKKwkiXHgyOVx4MTVceDJhXHgwMFx4MmJceDAwXHgyY1x4MDgiCisJLAorCSJceDMyXHhhNFx4MzNceDAwXHgzNFx4M2RceDM1XHgwMCIgIlx4MzZceGY4XHgzOFx4NzJceDM5XHg1N1x4M2FceDAwIgorCSJceDNiXHgwY1x4M2RceDk5XHgzZVx4MGNceDNmXHhjMiIgIlx4NDBceGMwXHg0MVx4MDBceDQyXHhjMFx4NDNceDBhIgorCSJceDQ0XHhmMFx4NDVceDQ2XHg0Nlx4NjJceDQ3XHgyYSIgIlx4NDhceDNjXHg0YVx4ZWNceDRiXHhlOFx4NGNceGU4IgorCSJceDRkXHhlOFx4NGVceGU4IgorCSwKKwkiXHg0Zlx4OThceDUwXHg5OFx4NTFceDAwXHg1Mlx4MjgiICJceDUzXHg3MFx4NTRceDk4XHg1OFx4MWFceDU5XHg4NSIKKwkiXHg1YVx4YTlceDViXHg2NFx4NWNceDg0XHg1ZFx4NTMiICJceDVlXHgwZVx4NWZceGYwXHg2MFx4ZjBceDYxXHhmMCIKKwkiXHg2Mlx4MDBceDYzXHgwMFx4NjRceDAyXHg2NVx4MjAiICJceDY2XHgwMFx4NjlceDAyXHg2Ylx4NWFceDZjXHgwNCIKKwkiXHg2ZFx4NTVceDZlXHgwMFx4NmZceDlkIgorCSwKKwkiXHg3MFx4MDhceDcxXHg3OFx4NzJceDAwXHg3M1x4MDEiICJceDc0XHgzYVx4NzVceDM1XHg3Nlx4MDFceDc3XHgwMiIKKwkiXHg3YVx4MjRceDdiXHgwNFx4N2NceDA3XHg3ZFx4MTAiICJceDdlXHgyOFx4N2ZceDM2XHg4MFx4NDRceDgxXHg1MiIKKwkiXHg4Mlx4NjBceDgzXHg2Y1x4ODRceDc4XHg4NVx4OGMiICJceDg2XHg5ZVx4ODdceGJiXHg4OFx4ZDJceDg5XHhlNSIKKwkiXHg4YVx4MjNceDhjXHgwZFx4OTBceDkwXHg5MVx4OTAiCisJLAorCSJceDlkXHgwMlx4OWVceDAyXHg5Zlx4OTRceGEwXHg5NCIgIlx4YTFceDAxXHhhNFx4NTBceGE1XHg2OFx4YTZceDcwIgorCSJceGE4XHhjMVx4YTlceGVmXHhhYVx4OTJceGFiXHgwNCIgIlx4YWNceDgwXHhhZFx4ODBceGFlXHg4MFx4YWZceDgwIgorCSJceGIyXHhmMlx4YjNceDIwXHhiNFx4MjBceGI1XHgwMCIgIlx4YjZceGFmIgorCSwKKwkiXHhiYlx4YWVceGJjXHgzOFx4YmRceDM5XHhiZVx4MDEiICJceGJmXHgwMVx4YzBceGUyXHhjMVx4YzBceGMyXHgwMSIKKwkiXHhjM1x4NGVceGM2XHg4NVx4YzdceDgxXHhjOVx4ZTAiICJceGNhXHhlOFx4Y2JceGYwXHhjY1x4ZDhceGNkXHg5MyIKKwksCisJIlx4ZDBceDIxXHhkMVx4MThceGQyXHhlMFx4ZDNceDAxIiAiXHhkNFx4MjhceGQ1XHgwMCIKK307CisKK3N0YXRpYyB1OCBjMDRbXSA9IHsweDA0fTsKK3N0YXRpYyB1OCBkYXRfcG9zdF8xW10gPSAiXHgwNFx4MDBceDEwXHgyMFx4YTFceDAwXHgwMFx4MDIiOworc3RhdGljIHU4IGRhdF9wb3N0XzJbXSA9ICJceDEwXHgxMFx4YzFceDAyIjsKK3N0YXRpYyB1OCBkYXRfcG9zdF8zW10gPSAiXHgwNFx4MDBceDEwXHg3Y1x4YTFceDAwXHgwMFx4MDQiOworc3RhdGljIHU4IGRhdF9wb3N0XzRbXSA9ICJceDEwXHgwMlx4YzFceDA2IjsKK3N0YXRpYyB1OCBkYXRfcG9zdF81W10gPSAiXHgwNFx4MDBceDEwXHg3Ylx4YTFceDAwXHgwMFx4MDgiOworc3RhdGljIHU4IGRhdF9wb3N0XzZbXSA9ICJceDEwXHgxMFx4YzFceDA1IjsKK3N0YXRpYyB1OCBkYXRfcG9zdF83W10gPSAiXHgwNFx4MDBceDEwXHg3Y1x4YTFceDAwXHgwMFx4MDgiOworc3RhdGljIHU4IGRhdF9wb3N0XzhbXSA9ICJceDA0XHgwMFx4MTBceDdjXHhhMVx4MDBceDAwXHgwOSI7CisKK3N0YXRpYyBzdHJ1Y3QgdmFsaWR4IHRibF9pbml0X3Bvc3RfYWx0W10gPSB7CisJezB4NjAzMiwgMHgwMGZmfSwgezB4NjAzMiwgMHgwMGZmfSwgezB4NjAzMiwgMHgwMGZmfSwgezB4NjAzYywgMHgwMGZmfSwKKwl7MHg2MDAzLCAweDAwZmZ9LCB7MHg2MDMyLCAweDAwZmZ9LCB7MHg2MDMyLCAweDAwZmZ9LCB7MHg2MDAxLCAweDAwZmZ9LAorCXsweDYwMDAsIDB4ODAxZX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDA0LCAweDAwMWV9LCB7MHg2MDAwLCAweDgwMWV9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwNCwgMHgwMDFlfSwgezB4NjAxMiwgMHgwMDAzfSwgezB4NjAwMCwgMHg4MDFlfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDQsIDB4MDAxZX0sIHsweDYwMDAsIDB4ODAxZX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDA0LCAweDAwMWV9LCB7MHg2MDEyLCAweDAwMDN9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwMCwgMHg4MDFlfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDQsIDB4MDAxZX0sIHsweDYwMDAsIDB4ODAxZX0sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDA0LCAweDAwMWV9LCB7MHg2MDEyLCAweDAwMDN9LCB7MHg2MDAwLCAweDgwMWV9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwNCwgMHgwMDFlfSwgezB4NjAwMCwgMHg4MDFlfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDQsIDB4MDAxZX0sIHsweDYwMTIsIDB4MDAwM30sCisJezB4ZmZmZiwgMHhmZmZmfSwKKwl7MHg2MDAwLCAweDgwMWV9LAorCXsweGZmZmYsIDB4ZmZmZn0sCisJezB4NjAwNCwgMHgwMDFlfSwgezB4NjAwMCwgMHg4MDFlfSwKKwl7MHhmZmZmLCAweGZmZmZ9LAorCXsweDYwMDQsIDB4MDAxZX0sIHsweDYwMTIsIDB4MDAwM30sCit9OworCitzdGF0aWMgaW50ICBvdjk2NTVfaW5pdF9hdF9zdGFydHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgaW50ICBvdjk2NTVfY29uZmlndXJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3Y5NjU1X2luaXRfcHJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3Y5NjU1X2luaXRfcG9zdF9hbHQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIG92OTY1NV9wb3N0X3Vuc2V0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgb3Y5NjU1X2NhbWVyYV9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3ZvaWQgb3Y5NjU1X2luaXRfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT52Y3VyLmJhY2tsaWdodCAgPSAgIDA7CisJc2QtPnZjdXIuYnJpZ2h0bmVzcyA9IDEyODsKKwlzZC0+dmN1ci5zaGFycG5lc3MgID0gICAwOworCXNkLT52Y3VyLmNvbnRyYXN0ICAgPSAgIDA7CisJc2QtPnZjdXIuZ2FtbWEgICAgICA9ICAgMDsKKwlzZC0+dmN1ci5odWUgICAgICAgID0gICAwOworCXNkLT52Y3VyLnNhdHVyYXRpb24gPSAgIDA7CisJc2QtPnZjdXIud2hpdGViYWwgICA9ICAgMDsKKworCXNkLT52bWF4LmJhY2tsaWdodCAgPSAgIDA7CisJc2QtPnZtYXguYnJpZ2h0bmVzcyA9IDI1NTsKKwlzZC0+dm1heC5zaGFycG5lc3MgID0gICAwOworCXNkLT52bWF4LmNvbnRyYXN0ICAgPSAgIDA7CisJc2QtPnZtYXguZ2FtbWEgICAgICA9ICAgMDsKKwlzZC0+dm1heC5odWUgICAgICAgID0gICAwICsgMTsKKwlzZC0+dm1heC5zYXR1cmF0aW9uID0gICAwOworCXNkLT52bWF4LndoaXRlYmFsICAgPSAgIDA7CisJc2QtPnZtYXgubWlycm9yICAgICA9IDA7CisJc2QtPnZtYXguZmxpcCAgICAgICA9IDA7CisJc2QtPnZtYXguQUM1MEh6ICAgICA9IDA7CisKKwlzZC0+ZGV2X2NhbWVyYV9zZXR0aW5ncyA9IG92OTY1NV9jYW1lcmFfc2V0dGluZ3M7CisJc2QtPmRldl9pbml0X2F0X3N0YXJ0dXAgPSBvdjk2NTVfaW5pdF9hdF9zdGFydHVwOworCXNkLT5kZXZfY29uZmlndXJlX2FsdCAgID0gb3Y5NjU1X2NvbmZpZ3VyZV9hbHQ7CisJc2QtPmRldl9pbml0X3ByZV9hbHQgICAgPSBvdjk2NTVfaW5pdF9wcmVfYWx0OworCXNkLT5kZXZfcG9zdF91bnNldF9hbHQgID0gb3Y5NjU1X3Bvc3RfdW5zZXRfYWx0OworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBvdjk2NTVfaW5pdF9hdF9zdGFydHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlmZXRjaF92YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9hdF9zdGFydHVwLAorCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9hdF9zdGFydHVwKSk7CisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1tb24sIEFSUkFZX1NJWkUodGJsX2NvbW1tb24pKTsKKy8qCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMTEsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y5NjU1X2luaXRfcHJlX2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnZvbGQuYnJpZ2h0bmVzcyA9IC0xOworCXNkLT52b2xkLmh1ZSA9IC0xOworCisJZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2NvbW1tb24sIEFSUkFZX1NJWkUodGJsX2NvbW1tb24pKTsKKworCW92OTY1NV9pbml0X3Bvc3RfYWx0KGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjk2NTVfaW5pdF9wb3N0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJczMyIHJlc28gPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlzMzIgbjsgLyogcmVzZXJ2ZWQgZm9yIEZFVENIIG1hY3JvcyAqLworCXMzMiBpOworCXU4ICoqdGJsOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCA1LCAweDAwMDEsIDB4MDAwMCwgMCwgTlVMTCk7CisKKwl0YmwgPSAocmVzbyA9PSBJTUFHRV82NDApID8gdGJsXzY0MCA6IHRibF84MDA7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLAorCQkJdGJsX2xlbmd0aFswXSwgdGJsWzBdKTsKKwlmb3IgKGkgPSAxOyBpIDwgNzsgaSsrKQorCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4NjAwMCwgMHgwMjAwLAorCQkJCXRibF9sZW5ndGhbaV0sIHRibFtpXSk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwKKwkJCXRibF9sZW5ndGhbN10sIHRibFs3XSk7CisKKwluID0gZmV0Y2hfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSk7CisKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMWUsIDEsIGMwNCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAxZSwgMSwgYzA0KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSwgbik7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDFlLCAxLCBjMDQpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMWUsIDEsIGMwNCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg2MDAwLCAweDAyMDAsIDgsIGRhdF9wb3N0XzEpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAxZSwgMSwgYzA0KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSwgbik7CisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDFlLCAxLCBjMDQpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMWUsIDEsIGMwNCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDYwMDAsIDB4ODAxZSwgMSwgYzA0KTsKKwlrZWVwX29uX2ZldGNoaW5nX3ZhbGlkeChnc3BjYV9kZXYsIHRibF9pbml0X3Bvc3RfYWx0LAorCQkJCQlBUlJBWV9TSVpFKHRibF9pbml0X3Bvc3RfYWx0KSwgbik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDYwMDAsIDB4MDIwMCwgOCwgZGF0X3Bvc3RfMSk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCisJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDFlLCAxLCBjMDQpOworCWtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KGdzcGNhX2RldiwgdGJsX2luaXRfcG9zdF9hbHQsCisJCQkJCUFSUkFZX1NJWkUodGJsX2luaXRfcG9zdF9hbHQpLCBuKTsKKwljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHg2MDAwLCAweDgwMWUsIDEsIGMwNCk7CisJa2VlcF9vbl9mZXRjaGluZ192YWxpZHgoZ3NwY2FfZGV2LCB0YmxfaW5pdF9wb3N0X2FsdCwKKwkJCQkJQVJSQVlfU0laRSh0YmxfaW5pdF9wb3N0X2FsdCksIG4pOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDYwMDAsIDB4MDIwMCwgOCwgZGF0X3Bvc3RfMSk7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4MDAwMCwgMHgwMjAwLCA0LCBkYXRfcG9zdF8yKTsKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4NjAwMCwgMHgwMjAwLCA4LCBkYXRfcG9zdF8zKTsKKworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHgwMDAwLCAweDAyMDAsIDQsIGRhdF9wb3N0XzQpOworCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg2MDAwLCAweDAyMDAsIDgsIGRhdF9wb3N0XzUpOworCisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDAwMDAsIDB4MDIwMCwgNCwgZGF0X3Bvc3RfNik7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDYwMDAsIDB4MDIwMCwgOCwgZGF0X3Bvc3RfNyk7CisKKwljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDMsIDB4NjAwMCwgMHgwMjAwLCA4LCBkYXRfcG9zdF84KTsKKworCW92OTY1NV9jYW1lcmFfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92OTY1NV9jb25maWd1cmVfYWx0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzMzIgcmVzbyA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhzMzIpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCisJc3dpdGNoIChyZXNvKSB7CisJY2FzZSBJTUFHRV82NDA6CisJCWdzcGNhX2Rldi0+YWx0ID0gMSArIDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ3NwY2FfZGV2LT5hbHQgPSAxICsgMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92OTY1NV9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXU4IGRhdF9icmlnaHRbXSA9ICJceDA0XHgwMFx4MTBceDdjXHhhMVx4MDBceDAwXHg3MCI7CisKKwlzMzIgYnJpZ2h0ID0gc2QtPnZjdXIuYnJpZ2h0bmVzczsKKwlzMzIgaHVlICAgID0gc2QtPnZjdXIuaHVlOworCisJaWYgKGJyaWdodCAhPSBzZC0+dm9sZC5icmlnaHRuZXNzKSB7CisJCXNkLT52b2xkLmJyaWdodG5lc3MgPSBicmlnaHQ7CisJCWlmIChicmlnaHQgPCAwIHx8IGJyaWdodCA+IHNkLT52bWF4LmJyaWdodG5lc3MpCisJCQlicmlnaHQgPSAwOworCisJCWRhdF9icmlnaHRbM10gPSBicmlnaHQ7CisJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMywgMHg2MDAwLCAweDAyMDAsIDgsIGRhdF9icmlnaHQpOworCX0KKworCWlmIChodWUgIT0gc2QtPnZvbGQuaHVlKSB7CisJCXNkLT52b2xkLmh1ZSA9IGh1ZTsKKwkJc2QtPnN3YXBSQiA9IChodWUgIT0gMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG92OTY1NV9wb3N0X3Vuc2V0X2FsdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCA1LCAweDAwMDAsIDB4MDAwMCwgMCwgTlVMTCk7CisJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDAwNjEsIDB4MDAwMCwgMCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmNTlhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYwpAQCAtMCwwICsxLDc4NSBAQAorLyogQGZpbGUgZ2w4NjAuYworICogQGRhdGUgMjAwOS0wOC0yNworICoKKyAqIEdlbmVzeXMgTG9naWMgd2ViY2FtIHdpdGggZ2w4NjAgc3ViZHJpdmVycworICoKKyAqIERyaXZlciBieSBPbGl2aWVyIExvcmluIDxvLmxvcmluQGxhcG9zdGUubmV0PgorICogR1NQQ0EgYnkgSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4KKyAqIFRoYW5rcyBCVUdhYnVuZG8gYW5kIE1hbG1vc3Rvc28gZm9yIHlvdXIgYW1hemluZyBoZWxwIQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlICJnc3BjYS5oIgorI2luY2x1ZGUgImdsODYwLmgiCisKK01PRFVMRV9BVVRIT1IoIk9saXZpZXIgTG9yaW4gPGxvcmluQGxhcG9zdGUubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9HZW5lc3lzIExvZ2ljIEdMODYwIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09IHN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgPT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCAoKmRldl9pbml0X3NldHRpbmdzKShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworCitzdGF0aWMgaW50ICBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgIHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyBpbnQgIHNkX2lzb2NfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIGludCAgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLCB1OCAqZGF0YSwgczMyIGxlbik7CitzdGF0aWMgdm9pZCBzZF9jYWxsYmFjayhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworCitzdGF0aWMgaW50IGdsODYwX2d1ZXNzX3NlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJczMyIHZlbmRvcl9pZCwgczMyIHByb2R1Y3RfaWQpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT0gZHJpdmVyIG9wdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHMzMiBBQzUwSHogPSAweGZmOworbW9kdWxlX3BhcmFtKEFDNTBIeiwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoQUM1MEh6LCAiIERvZXMgQUMgcG93ZXIgZnJlcXVlbmN5IGlzIDUwSHo/ICgwLzEpIik7CisKK3N0YXRpYyBjaGFyIHNlbnNvcls3XTsKK21vZHVsZV9wYXJhbV9zdHJpbmcoc2Vuc29yLCBzZW5zb3IsIHNpemVvZihzZW5zb3IpLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2Vuc29yLAorCQkiIERyaXZlciBzZW5zb3IgKCdNSTEzMjAnLydNSTIwMjAnLydPVjk2NTUnLydPVjI2NDAnLycnKSIpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT0gd2ViY2FtIGNvbnRyb2xzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyogRnVuY3Rpb25zIHRvIGdldCBhbmQgc2V0IGEgY29udHJvbCB2YWx1ZSAqLworI2RlZmluZSBTRF9TRVRHRVQodGhlbmFtZSkgXAorc3RhdGljIGludCBzZF9zZXRfIyN0aGVuYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgczMyIHZhbClcCit7XAorCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjtcCitcCisJc2QtPnZjdXIudGhlbmFtZSA9IHZhbDtcCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKVwKKwkJc2QtPmRldl9jYW1lcmFfc2V0dGluZ3MoZ3NwY2FfZGV2KTtcCisJcmV0dXJuIDA7XAorfSBcCitzdGF0aWMgaW50IHNkX2dldF8jI3RoZW5hbWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgKnZhbClcCit7XAorCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjtcCitcCisJKnZhbCA9IHNkLT52Y3VyLnRoZW5hbWU7XAorCXJldHVybiAwO1wKK30KKworU0RfU0VUR0VUKG1pcnJvcikKK1NEX1NFVEdFVChmbGlwKQorU0RfU0VUR0VUKEFDNTBIeikKK1NEX1NFVEdFVChiYWNrbGlnaHQpCitTRF9TRVRHRVQoYnJpZ2h0bmVzcykKK1NEX1NFVEdFVChnYW1tYSkKK1NEX1NFVEdFVChodWUpCitTRF9TRVRHRVQoc2F0dXJhdGlvbikKK1NEX1NFVEdFVChzaGFycG5lc3MpCitTRF9TRVRHRVQod2hpdGViYWwpCitTRF9TRVRHRVQoY29udHJhc3QpCisKKyNkZWZpbmUgR0w4NjBfTkNUUkxTIDExCisKKy8qIGNvbnRyb2wgdGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19taTEzMjBbR0w4NjBfTkNUUkxTXTsKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19taTIwMjBbR0w4NjBfTkNUUkxTXTsKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19taTIwMjBiW0dMODYwX05DVFJMU107CitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNfb3YyNjQwW0dMODYwX05DVFJMU107CitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNfb3Y5NjU1W0dMODYwX05DVFJMU107CisKKyNkZWZpbmUgU0VUX01ZX0NUUkwodGhlaWQsIFwKKwl0aGV0eXBlLCB0aGVsYWJlbCwgdGhlbmFtZSkgXAorCWlmIChzZC0+dm1heC50aGVuYW1lICE9IDApIHtcCisJCXNkX2N0cmxzW25DdHJsc10ucWN0cmwuaWQgICA9IHRoZWlkO1wKKwkJc2RfY3RybHNbbkN0cmxzXS5xY3RybC50eXBlID0gdGhldHlwZTtcCisJCXN0cmNweShzZF9jdHJsc1tuQ3RybHNdLnFjdHJsLm5hbWUsIHRoZWxhYmVsKTtcCisJCXNkX2N0cmxzW25DdHJsc10ucWN0cmwubWluaW11bSA9IDA7XAorCQlzZF9jdHJsc1tuQ3RybHNdLnFjdHJsLm1heGltdW0gPSBzZC0+dm1heC50aGVuYW1lO1wKKwkJc2RfY3RybHNbbkN0cmxzXS5xY3RybC5kZWZhdWx0X3ZhbHVlID0gc2QtPnZjdXIudGhlbmFtZTtcCisJCXNkX2N0cmxzW25DdHJsc10ucWN0cmwuc3RlcCA9IFwKKwkJCShzZC0+dm1heC50aGVuYW1lIDwgMTYpID8gMSA6IHNkLT52bWF4LnRoZW5hbWUvMTY7XAorCQlzZF9jdHJsc1tuQ3RybHNdLnNldCA9IHNkX3NldF8jI3RoZW5hbWU7XAorCQlzZF9jdHJsc1tuQ3RybHNdLmdldCA9IHNkX2dldF8jI3RoZW5hbWU7XAorCQluQ3RybHMrKztcCisJfQorCitzdGF0aWMgaW50IGdsODYwX2J1aWxkX2NvbnRyb2xfdGFibGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY3RybCAqc2RfY3RybHM7CisJaW50IG5DdHJscyA9IDA7CisKKwlpZiAoX01JMTMyMF8pCisJCXNkX2N0cmxzID0gc2RfY3RybHNfbWkxMzIwOworCWVsc2UgaWYgKF9NSTIwMjBfKQorCQlzZF9jdHJscyA9IHNkX2N0cmxzX21pMjAyMDsKKwllbHNlIGlmIChfTUkyMDIwYl8pCisJCXNkX2N0cmxzID0gc2RfY3RybHNfbWkyMDIwYjsKKwllbHNlIGlmIChfT1YyNjQwXykKKwkJc2RfY3RybHMgPSBzZF9jdHJsc19vdjI2NDA7CisJZWxzZSBpZiAoX09WOTY1NV8pCisJCXNkX2N0cmxzID0gc2RfY3RybHNfb3Y5NjU1OworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoc2RfY3RybHMsIDAsIEdMODYwX05DVFJMUyAqIHNpemVvZihzdHJ1Y3QgY3RybCkpOworCisJU0VUX01ZX0NUUkwoVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwgIkJyaWdodG5lc3MiLCBicmlnaHRuZXNzKQorCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwgIlNoYXJwbmVzcyIsIHNoYXJwbmVzcykKKwlTRVRfTVlfQ1RSTChWNEwyX0NJRF9DT05UUkFTVCwKKwkJVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwgIkNvbnRyYXN0IiwgY29udHJhc3QpCisJU0VUX01ZX0NUUkwoVjRMMl9DSURfR0FNTUEsCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJHYW1tYSIsIGdhbW1hKQorCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX0hVRSwKKwkJVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwgIlBhbGV0dGUiLCBodWUpCisJU0VUX01ZX0NUUkwoVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwgIlNhdHVyYXRpb24iLCBzYXR1cmF0aW9uKQorCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkUsCisJCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsICJXaGl0ZSBCYWwuIiwgd2hpdGViYWwpCisJU0VUX01ZX0NUUkwoVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiwKKwkJVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwgIkJhY2tsaWdodCIgLCBiYWNrbGlnaHQpCisKKwlTRVRfTVlfQ1RSTChWNEwyX0NJRF9IRkxJUCwKKwkJVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIk1pcnJvciIsIG1pcnJvcikKKwlTRVRfTVlfQ1RSTChWNEwyX0NJRF9WRkxJUCwKKwkJVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIkZsaXAiLCBmbGlwKQorCVNFVF9NWV9DVFJMKFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAorCQlWNEwyX0NUUkxfVFlQRV9CT09MRUFOLCAiNTBIeiIsIEFDNTBIeikKKworCXJldHVybiBuQ3RybHM7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT0gc3VkLWRyaXZlciBzdHJ1Y3R1cmUgaW5pdGlhbGlzYXRpb24gPT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTEzMjAgPSB7CisJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgICAgID0gc2RfY3RybHNfbWkxMzIwLAorCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKKwkuY29uZmlnICAgICAgPSBzZF9jb25maWcsCisJLmluaXQgICAgICAgID0gc2RfaW5pdCwKKwkuaXNvY19pbml0ICAgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ICAgICAgID0gc2Rfc3RhcnQsCisJLnN0b3AwICAgICAgID0gc2Rfc3RvcDAsCisJLnBrdF9zY2FuICAgID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTIwMjAgPSB7CisJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgICAgID0gc2RfY3RybHNfbWkyMDIwLAorCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKKwkuY29uZmlnICAgICAgPSBzZF9jb25maWcsCisJLmluaXQgICAgICAgID0gc2RfaW5pdCwKKwkuaXNvY19pbml0ICAgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ICAgICAgID0gc2Rfc3RhcnQsCisJLnN0b3AwICAgICAgID0gc2Rfc3RvcDAsCisJLnBrdF9zY2FuICAgID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTIwMjBiID0geworCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMjAyMGIsCisJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLAorCS5jb25maWcgICAgICA9IHNkX2NvbmZpZywKKwkuaW5pdCAgICAgICAgPSBzZF9pbml0LAorCS5pc29jX2luaXQgICA9IHNkX2lzb2NfaW5pdCwKKwkuc3RhcnQgICAgICAgPSBzZF9zdGFydCwKKwkuc3RvcDAgICAgICAgPSBzZF9zdG9wMCwKKwkucGt0X3NjYW4gICAgPSBzZF9wa3Rfc2NhbiwKKwkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292MjY0MCA9IHsKKwkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgICAgICAgPSBzZF9jdHJsc19vdjI2NDAsCisJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLAorCS5jb25maWcgICAgICA9IHNkX2NvbmZpZywKKwkuaW5pdCAgICAgICAgPSBzZF9pbml0LAorCS5pc29jX2luaXQgICA9IHNkX2lzb2NfaW5pdCwKKwkuc3RhcnQgICAgICAgPSBzZF9zdGFydCwKKwkuc3RvcDAgICAgICAgPSBzZF9zdG9wMCwKKwkucGt0X3NjYW4gICAgPSBzZF9wa3Rfc2NhbiwKKwkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1NSA9IHsKKwkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgICAgICAgPSBzZF9jdHJsc19vdjk2NTUsCisJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLAorCS5jb25maWcgICAgICA9IHNkX2NvbmZpZywKKwkuaW5pdCAgICAgICAgPSBzZF9pbml0LAorCS5pc29jX2luaXQgICA9IHNkX2lzb2NfaW5pdCwKKwkuc3RhcnQgICAgICAgPSBzZF9zdGFydCwKKwkuc3RvcDAgICAgICAgPSBzZF9zdG9wMCwKKwkucGt0X3NjYW4gICAgPSBzZF9wa3Rfc2NhbiwKKwkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09IHN1Yi1kcml2ZXIgaW1hZ2Ugc2l6ZXMgPT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBtaTIwMjBfbW9kZVtdID0geworCXsgNjQwLCAgNDgwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0sCisJeyA4MDAsICA2MDAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDgwMCwKKwkJLnNpemVpbWFnZSA9IDgwMCAqIDYwMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfSwKKwl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDIKKwl9LAorCXsxNjAwLCAxMjAwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAwLAorCQkuc2l6ZWltYWdlID0gMTYwMCAqIDEyMDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjI2NDBfbW9kZVtdID0geworCXsgNjQwLCAgNDgwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0sCisJeyA4MDAsICA2MDAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDgwMCwKKwkJLnNpemVpbWFnZSA9IDgwMCAqIDYwMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfSwKKwl7MTI4MCwgIDk2MCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiA5NjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMgorCX0sCisJezE2MDAsIDEyMDAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE2MDAsCisJCS5zaXplaW1hZ2UgPSAxNjAwICogMTIwMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAzCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG1pMTMyMF9tb2RlW10gPSB7CisJeyA2NDAsICA0ODAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwCisJfSwKKwl7IDgwMCwgIDYwMCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gODAwLAorCQkuc2l6ZWltYWdlID0gODAwICogNjAwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9LAorCXsxMjgwLCAgOTYwLCBWNEwyX1BJWF9GTVRfU0dCUkc4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDk2MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG92OTY1NV9tb2RlW10gPSB7CisJeyA2NDAsICA0ODAsIFY0TDJfUElYX0ZNVF9TR0JSRzgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwCisJfSwKKwl7MTI4MCwgIDk2MCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiA5NjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0sCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT0gc3VkLWRyaXZlciBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisJczMyIHZlbmRvcl9pZCwgcHJvZHVjdF9pZDsKKworCS8qIEdldCBVU0IgVmVuZG9ySUQgYW5kIFByb2R1Y3RJRCAqLworCXZlbmRvcl9pZCAgPSBsZTE2X3RvX2NwdShpZC0+aWRWZW5kb3IpOworCXByb2R1Y3RfaWQgPSBsZTE2X3RvX2NwdShpZC0+aWRQcm9kdWN0KTsKKworCXNkLT5uYlJpZ2h0VXAgPSAxOworCXNkLT5uYkltID0gLTE7CisKKwlzZC0+c2Vuc29yID0gMHhmZjsKKwlpZiAoc3RyY21wKHNlbnNvciwgIk1JMTMyMCIpID09IDApCisJCXNkLT5zZW5zb3IgPSBJRF9NSTEzMjA7CisJZWxzZSBpZiAoc3RyY21wKHNlbnNvciwgIk9WMjY0MCIpID09IDApCisJCXNkLT5zZW5zb3IgPSBJRF9PVjI2NDA7CisJZWxzZSBpZiAoc3RyY21wKHNlbnNvciwgIk9WOTY1NSIpID09IDApCisJCXNkLT5zZW5zb3IgPSBJRF9PVjk2NTU7CisJZWxzZSBpZiAoc3RyY21wKHNlbnNvciwgIk1JMjAyMCIpID09IDApCisJCXNkLT5zZW5zb3IgPSBJRF9NSTIwMjA7CisJZWxzZSBpZiAoc3RyY21wKHNlbnNvciwgIk1JMjAyMGIiKSA9PSAwKQorCQlzZC0+c2Vuc29yID0gSURfTUkyMDIwYjsKKworCS8qIEdldCBzZW5zb3IgYW5kIHNldCB0aGUgc3VpdGFibGUgaW5pdC9zdGFydC8uLi9zdG9wIGZ1bmN0aW9ucyAqLworCWlmIChnbDg2MF9ndWVzc19zZW5zb3IoZ3NwY2FfZGV2LCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQpID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJZ3NwY2FfZGV2LT5uYmFsdCA9IDQ7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIElEX01JMTMyMDoKKwkJZ3NwY2FfZGV2LT5zZF9kZXNjID0gJnNkX2Rlc2NfbWkxMzIwOworCQljYW0tPmNhbV9tb2RlID0gbWkxMzIwX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShtaTEzMjBfbW9kZSk7CisJCWRldl9pbml0X3NldHRpbmdzICAgPSBtaTEzMjBfaW5pdF9zZXR0aW5nczsKKwkJYnJlYWs7CisKKwljYXNlIElEX01JMjAyMDoKKwkJZ3NwY2FfZGV2LT5zZF9kZXNjID0gJnNkX2Rlc2NfbWkyMDIwOworCQljYW0tPmNhbV9tb2RlID0gbWkyMDIwX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShtaTIwMjBfbW9kZSk7CisJCWRldl9pbml0X3NldHRpbmdzICAgPSBtaTIwMjBfaW5pdF9zZXR0aW5nczsKKwkJYnJlYWs7CisKKwljYXNlIElEX01JMjAyMGI6CisJCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZF9kZXNjX21pMjAyMGI7CisJCWNhbS0+Y2FtX21vZGUgPSBtaTIwMjBfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG1pMjAyMF9tb2RlKTsKKwkJZGV2X2luaXRfc2V0dGluZ3MgICA9IG1pMjAyMF9pbml0X3NldHRpbmdzOworCQlicmVhazsKKworCWNhc2UgSURfT1YyNjQwOgorCQlnc3BjYV9kZXYtPnNkX2Rlc2MgPSAmc2RfZGVzY19vdjI2NDA7CisJCWNhbS0+Y2FtX21vZGUgPSBvdjI2NDBfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92MjY0MF9tb2RlKTsKKwkJZGV2X2luaXRfc2V0dGluZ3MgICA9IG92MjY0MF9pbml0X3NldHRpbmdzOworCQlicmVhazsKKworCWNhc2UgSURfT1Y5NjU1OgorCQlnc3BjYV9kZXYtPnNkX2Rlc2MgPSAmc2RfZGVzY19vdjk2NTU7CisJCWNhbS0+Y2FtX21vZGUgPSBvdjk2NTVfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1NV9tb2RlKTsKKwkJZGV2X2luaXRfc2V0dGluZ3MgICA9IG92OTY1NV9pbml0X3NldHRpbmdzOworCQlicmVhazsKKwl9CisKKwlkZXZfaW5pdF9zZXR0aW5ncyhnc3BjYV9kZXYpOworCWlmIChBQzUwSHogIT0gMHhmZikKKwkJKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+dmN1ci5BQzUwSHogPSBBQzUwSHo7CisJZ2w4NjBfYnVpbGRfY29udHJvbF90YWJsZShnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgYWZ0ZXIgc2RfY29uZmlnICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBzZC0+ZGV2X2luaXRfYXRfc3RhcnR1cChnc3BjYV9kZXYpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgdG8gY2hvb3NlIHRoZSBhbHQgc2V0dGluZyAqLworc3RhdGljIGludCBzZF9pc29jX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBzZC0+ZGV2X2NvbmZpZ3VyZV9hbHQoZ3NwY2FfZGV2KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gc3RhcnQgdGhlIHdlYmNhbSAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIHNkLT5kZXZfaW5pdF9wcmVfYWx0KGdzcGNhX2Rldik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHN0b3AgdGhlIHdlYmNhbSAqLworc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBzZC0+ZGV2X3Bvc3RfdW5zZXRfYWx0KGdzcGNhX2Rldik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gaW1hZ2UgaXMgYmVpbmcgcmVjZWl2ZWQgKi8KK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsIHU4ICpkYXRhLCBzMzIgbGVuKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdGF0aWMgczMyIG5Ta2lwcGVkOworCisJczMyIG1vZGUgPSAoczMyKSBnc3BjYV9kZXYtPmN1cnJfbW9kZTsKKwlzMzIgblRvU2tpcCA9CisJCXNkLT5zd2FwUkIgKiAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbbW9kZV0uYnl0ZXNwZXJsaW5lICsgMSk7CisKKwkvKiBUZXN0IG9ubHkgYWdhaW5zdCAwMjAyaCwgc28gZW5kaWFuZXNzIGRvZXMgbm90IG1hdHRlciAqLworCXN3aXRjaCAoKihzMTYgKikgZGF0YSkgeworCWNhc2UgMHgwMjAyOgkJLyogRW5kIG9mIGZyYW1lLCBzdGFydCBhIG5ldyBvbmUgKi8KKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOworCQluU2tpcHBlZCA9IDA7CisJCWlmIChzZC0+bmJJbSA+PSAwICYmIHNkLT5uYkltIDwgMTApCisJCQlzZC0+bmJJbSsrOworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkYXRhICs9IDI7CisJCWxlbiAgLT0gMjsKKwkJaWYgKG5Ta2lwcGVkICsgbGVuIDw9IG5Ub1NraXApCisJCQluU2tpcHBlZCArPSBsZW47CisJCWVsc2UgeworCQkJaWYgKG5Ta2lwcGVkIDwgblRvU2tpcCAmJiBuU2tpcHBlZCArIGxlbiA+IG5Ub1NraXApIHsKKwkJCQlkYXRhICs9IG5Ub1NraXAgLSBuU2tpcHBlZDsKKwkJCQlsZW4gIC09IG5Ub1NraXAgLSBuU2tpcHBlZDsKKwkJCQluU2tpcHBlZCA9IG5Ub1NraXAgKyAxOworCQkJfQorCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwKKwkJCQlJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOworCQl9CisJCWJyZWFrOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiBpbWFnZSBoYXMgYmVlbiByZWFkICovCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbW9uaXRvciB3ZWJjYW0gb3JpZW50YXRpb24gKi8KK3N0YXRpYyB2b2lkIHNkX2NhbGxiYWNrKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoIV9PVjk2NTVfKSB7CisJCXU4IHN0YXRlOworCQl1OCB1cHNpZGVEb3duOworCisJCS8qIFByb2JlIHNlbnNvciBvcmllbnRhdGlvbiAqLworCQljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDAsIDEsICh2b2lkICopJnN0YXRlKTsKKworCQkvKiBDOC80MCBtZWFucyB1cHNpZGUtZG93biAobG9va2luZyBiYWNrd2FyZHMpICovCisJCS8qIEQ4LzUwIG1lYW5zIHJpZ2h0LXVwIChsb29raW5nIG9ud2FyZHMpICovCisJCXVwc2lkZURvd24gPSAoc3RhdGUgPT0gMHhjOCB8fCBzdGF0ZSA9PSAweDQwKTsKKworCQlpZiAodXBzaWRlRG93biAmJiBzZC0+bmJSaWdodFVwID4gLTQpIHsKKwkJCWlmIChzZC0+bmJSaWdodFVwID4gMCkKKwkJCQlzZC0+bmJSaWdodFVwID0gMDsKKwkJCWlmIChzZC0+bmJSaWdodFVwID09IC0zKSB7CisJCQkJc2QtPm1pcnJvck1hc2sgPSAxOworCQkJCXNkLT53YWl0U2V0ID0gMTsKKwkJCX0KKwkJCXNkLT5uYlJpZ2h0VXAtLTsKKwkJfQorCQlpZiAoIXVwc2lkZURvd24gJiYgc2QtPm5iUmlnaHRVcCA8IDQpIHsKKwkJCWlmIChzZC0+bmJSaWdodFVwICA8IDApCisJCQkJc2QtPm5iUmlnaHRVcCA9IDA7CisJCQlpZiAoc2QtPm5iUmlnaHRVcCA9PSAzKSB7CisJCQkJc2QtPm1pcnJvck1hc2sgPSAwOworCQkJCXNkLT53YWl0U2V0ID0gMTsKKwkJCX0KKwkJCXNkLT5uYlJpZ2h0VXArKzsKKwkJfQorCX0KKworCWlmIChzZC0+d2FpdFNldCkKKwkJc2QtPmRldl9jYW1lcmFfc2V0dGluZ3MoZ3NwY2FfZGV2KTsKK30KKworLyo9PT09PT09PT09PT09PT09PT09IFVTQiBkcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpc2F0aW9uID09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDVlMywgMHgwNTAzKX0sCisJe1VTQl9ERVZJQ0UoMHgwNWUzLCAweGYxOTEpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldjsKKwlzMzIgcmV0OworCisJcmV0ID0gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLAorCQkJJnNkX2Rlc2NfbWkxMzIwLCBzaXplb2Yoc3RydWN0IHNkKSwgVEhJU19NT0RVTEUpOworCisJaWYgKHJldCA+PSAwKSB7CisJCWdzcGNhX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwkJUERFQlVHKERfUFJPQkUsCisJCQkiQ2FtZXJhIGlzIG5vdyBjb250cm9sbGluZyB2aWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIiwKKwkJCWdzcGNhX2Rldi0+dmRldi5taW5vcik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlnc3BjYV9kaXNjb25uZWN0KGludGYpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHNkX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgICAgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT0gSW5pdCBhbmQgRXhpdCBtb2R1bGUgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlQREVCVUcoRF9QUk9CRSwgImRyaXZlciBzdGFydHVwIC0gdmVyc2lvbiAlcyIsIERSSVZFUl9WRVJTSU9OKTsKKworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJkcml2ZXIgcmVnaXN0ZXJlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZHJpdmVyIGRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitpbnQgZ2w4NjBfUlR4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJdW5zaWduZWQgY2hhciBwcmVmLCB1MzIgcmVxLCB1MTYgdmFsLCB1MTYgaW5kZXgsCisJCXMzMiBsZW4sIHZvaWQgKnBkYXRhKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJczMyIHIgPSAwOworCisJaWYgKHByZWYgPT0gMHg0MCkgeyAvKiBTZW5kICovCisJCWlmIChsZW4gPiAwKSB7CisJCQltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBwZGF0YSwgbGVuKTsKKwkJCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJCQlyZXEsIHByZWYsIHZhbCwgaW5kZXgsCisJCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwKKwkJCQkJbGVuLCA0MDAgKyAyMDAgKiAobGVuID4gMSkpOworCQl9IGVsc2UgeworCQkJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJCXJlcSwgcHJlZiwgdmFsLCBpbmRleCwgTlVMTCwgbGVuLCA0MDApOworCQl9CisJfSBlbHNlIHsgLyogUmVjZWl2ZSAqLworCQlpZiAobGVuID4gMCkgeworCQkJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkJCXJlcSwgcHJlZiwgdmFsLCBpbmRleCwKKwkJCQkJZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJCQlsZW4sIDQwMCArIDIwMCAqIChsZW4gPiAxKSk7CisJCQltZW1jcHkocGRhdGEsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuKTsKKwkJfSBlbHNlIHsKKwkJCXIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJCQlyZXEsIHByZWYsIHZhbCwgaW5kZXgsIE5VTEwsIGxlbiwgNDAwKTsKKwkJfQorCX0KKworCWlmIChyIDwgMCkKKwkJUERFQlVHKERfRVJSLAorCQkJImN0cmwgdHJhbnNmZXIgZmFpbGVkICU0ZCAiCisJCQkiW3AlMDJ4IHIlZCB2JTA0eCBpJTA0eCBsZW4lZF0iLAorCQkJciwgcHJlZiwgcmVxLCB2YWwsIGluZGV4LCBsZW4pOworCWVsc2UgaWYgKGxlbiA+IDEgJiYgciA8IGxlbikKKwkJUERFQlVHKERfRVJSLCAic2hvcnQgY3RybCB0cmFuc2ZlciAlZC8lZCIsIHIsIGxlbik7CisKKwlpZiAoKF9NSTIwMjBfIHx8IF9NSTIwMjBiXyB8fCBfTUkyMDIwY18pICYmICh2YWwgfHwgaW5kZXgpKQorCQltc2xlZXAoMSk7CisJaWYgKF9PVjI2NDBfKQorCQltc2xlZXAoMSk7CisKKwlyZXR1cm4gcjsKK30KKworaW50IGZldGNoX3ZhbGlkeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHN0cnVjdCB2YWxpZHggKnRibCwgaW50IGxlbikKK3sKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBsZW47IG4rKykgeworCQlpZiAodGJsW25dLmlkeCAhPSAweGZmZmYpCisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIHRibFtuXS52YWwsCisJCQkJCXRibFtuXS5pZHgsIDAsIE5VTEwpOworCQllbHNlIGlmICh0Ymxbbl0udmFsID09IDB4ZmZmZikKKwkJCWJyZWFrOworCQllbHNlCisJCQltc2xlZXAodGJsW25dLnZhbCk7CisJfQorCXJldHVybiBuOworfQorCitpbnQga2VlcF9vbl9mZXRjaGluZ192YWxpZHgoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgdmFsaWR4ICp0YmwsCisJCQkJaW50IGxlbiwgaW50IG4pCit7CisJd2hpbGUgKCsrbiA8IGxlbikgeworCQlpZiAodGJsW25dLmlkeCAhPSAweGZmZmYpCisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIHRibFtuXS52YWwsIHRibFtuXS5pZHgsCisJCQkJCTAsIE5VTEwpOworCQllbHNlIGlmICh0Ymxbbl0udmFsID09IDB4ZmZmZikKKwkJCWJyZWFrOworCQllbHNlCisJCQltc2xlZXAodGJsW25dLnZhbCk7CisJfQorCXJldHVybiBuOworfQorCit2b2lkIGZldGNoX2lkeGRhdGEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgaWR4ZGF0YSAqdGJsLCBpbnQgbGVuKQoreworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IGxlbjsgbisrKSB7CisJCWlmIChtZW1jbXAodGJsW25dLmRhdGEsICJceGZmXHhmZlx4ZmYiLCAzKSAhPSAwKQorCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAzLCAweDdhMDAsIHRibFtuXS5pZHgsCisJCQkJCTMsIHRibFtuXS5kYXRhKTsKKwkJZWxzZQorCQkJbXNsZWVwKHRibFtuXS5pZHgpOworCX0KK30KKworc3RhdGljIGludCBnbDg2MF9ndWVzc19zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCXMzMiB2ZW5kb3JfaWQsIHMzMiBwcm9kdWN0X2lkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBwcm9iZSwgbmIyNiwgbmI5Niwgbk9WLCBudHJ5OworCisJaWYgKHByb2R1Y3RfaWQgPT0gMHhmMTkxKQorCQlzZC0+c2Vuc29yID0gSURfTUkxMzIwOworCisJaWYgKHNkLT5zZW5zb3IgPT0gMHhmZikgeworCQljdHJsX2luKGdzcGNhX2RldiwgMHhjMCwgMiwgMHgwMDAwLCAweDAwMDQsIDEsICZwcm9iZSk7CisJCWN0cmxfaW4oZ3NwY2FfZGV2LCAweGMwLCAyLCAweDAwMDAsIDB4MDAwNCwgMSwgJnByb2JlKTsKKworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMCwgMHgwMDAwLCAwLCBOVUxMKTsKKwkJbXNsZWVwKDMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAxMCwgMHgwMDEwLCAwLCBOVUxMKTsKKwkJbXNsZWVwKDMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwOCwgMHgwMGMwLCAwLCBOVUxMKTsKKwkJbXNsZWVwKDMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMGMxLCAwLCBOVUxMKTsKKwkJbXNsZWVwKDMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAwMSwgMHgwMGMyLCAwLCBOVUxMKTsKKwkJbXNsZWVwKDMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDAyMCwgMHgwMDA2LCAwLCBOVUxMKTsKKwkJbXNsZWVwKDMpOworCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA2YSwgMHgwMDBkLCAwLCBOVUxMKTsKKwkJbXNsZWVwKDU2KTsKKworCQluT1YgPSAwOworCQlmb3IgKG50cnkgPSAwOyBudHJ5IDwgNDsgbnRyeSsrKSB7CisJCQljdHJsX291dChnc3BjYV9kZXYsIDB4NDAsIDEsIDB4MDA0MCwgMHgwMDAwLCAwLCBOVUxMKTsKKwkJCW1zbGVlcCgzKTsKKwkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDYzLCAweDAwMDYsIDAsIE5VTEwpOworCQkJbXNsZWVwKDMpOworCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDdhMDAsIDB4ODAzMCwgMCwgTlVMTCk7CisJCQltc2xlZXAoMTApOworCQkJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4N2EwMCwgMHg4MDMwLCAxLCAmcHJvYmUpOworCQkJUERFQlVHKERfUFJPQkUsICIxc3QgcHJvYmU9JTAyeCIsIHByb2JlKTsKKwkJCWlmIChwcm9iZSA9PSAweGZmKQorCQkJCW5PVisrOworCQl9CisKKwkJaWYgKG5PVikgeworCQkJUERFQlVHKERfUFJPQkUsICIweGZmIC0+IHNlbnNvciBPVlhYWFgiKTsKKwkJCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3Igc2Vuc29yIE9WMjY0MCBvciBPVjk2NTUiKTsKKworCQkJbmIyNiA9IG5iOTYgPSAwOworCQkJZm9yIChudHJ5ID0gMDsgbnRyeSA8IDQ7IG50cnkrKykgeworCQkJCWN0cmxfb3V0KGdzcGNhX2RldiwgMHg0MCwgMSwgMHgwMDQwLCAweDAwMDAsCisJCQkJCQkwLCBOVUxMKTsKKwkJCQltc2xlZXAoMyk7CisJCQkJY3RybF9vdXQoZ3NwY2FfZGV2LCAweDQwLCAxLCAweDYwMDAsIDB4ODAwYSwKKwkJCQkJCTAsIE5VTEwpOworCQkJCW1zbGVlcCgxMCk7CisJCQkJLyogV2FpdCBmb3IgMjYoT1YyNjQwKSBvciA5NihPVjk2NTUpICovCisJCQkJY3RybF9pbihnc3BjYV9kZXYsIDB4YzAsIDIsIDB4NjAwMCwgMHg4MDBhLAorCQkJCQkJMSwgJnByb2JlKTsKKworCQkJCVBERUJVRyhEX1BST0JFLCAiMm5kIHByb2JlPSUwMngiLCBwcm9iZSk7CisJCQkJaWYgKHByb2JlID09IDB4MDApCisJCQkJCW5iMjYrKzsKKwkJCQlpZiAocHJvYmUgPT0gMHgyNiB8fCBwcm9iZSA9PSAweDQwKSB7CisJCQkJCXNkLT5zZW5zb3IgPSBJRF9PVjI2NDA7CisJCQkJCW5iMjYgKz0gNDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChwcm9iZSA9PSAweDk2IHx8IHByb2JlID09IDB4NTUpIHsKKwkJCQkJc2QtPnNlbnNvciA9IElEX09WOTY1NTsKKwkJCQkJbmI5NiArPSA0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHByb2JlID09IDB4ZmYpCisJCQkJCW5iOTYrKzsKKwkJCQltc2xlZXAoMyk7CisJCQl9CisJCQlpZiAobmIyNiA8IDQgJiYgbmI5NiA8IDQpIHsKKwkJCQlQREVCVUcoRF9QUk9CRSwgIk5vIHJlbGV2YW50IGFuc3dlciAiKTsKKwkJCQlQREVCVUcoRF9QUk9CRSwgIiogMS4zTXBpeGVscyAtPiB1c2UgT1Y5NjU1Iik7CisJCQkJUERFQlVHKERfUFJPQkUsICIqIDIuME1waXhlbHMgLT4gdXNlIE9WMjY0MCIpOworCQkJCVBERUJVRyhEX1BST0JFLAorCQkJCQkiVG8gZm9yY2UgYSBzZW5zb3IsIGFkZCB0aGF0IGxpbmUgdG8gIgorCQkJCQkiL2V0Yy9tb2Rwcm9iZS5kL29wdGlvbnMuY29uZjoiKTsKKwkJCQlQREVCVUcoRF9QUk9CRSwgIm9wdGlvbnMgZ3NwY2FfZ2w4NjAgIgorCQkJCQkic2Vuc29yPVwiT1YyNjQwXCIgb3IgXCJPVjk2NTVcIiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfSBlbHNlIHsgLyogcHJvYmUgPSAwICovCisJCQlQREVCVUcoRF9QUk9CRSwgIk5vIDB4ZmYgLT4gc2Vuc29yIE1JMjAyMCIpOworCQkJc2QtPnNlbnNvciA9IElEX01JMjAyMDsKKwkJfQorCX0KKworCWlmIChfTUkxMzIwXykgeworCQlQREVCVUcoRF9QUk9CRSwgIjA1ZTM6ZjE5MSBzZW5zb3IgTUkxMzIwICgxLjNNKSIpOworCX0gZWxzZSBpZiAoX01JMjAyMF8pIHsKKwkJUERFQlVHKERfUFJPQkUsICIwNWUzOjA1MDMgc2Vuc29yIE1JMjAyMCAoMi4wTSkiKTsKKwl9IGVsc2UgaWYgKF9NSTIwMjBiXykgeworCQlQREVCVUcoRF9QUk9CRSwgIjA1ZTM6MDUwMyBzZW5zb3IgTUkyMDIwIGFsdC4gZHJpdmVyICgyLjBNKSIpOworCX0gZWxzZSBpZiAoX09WOTY1NV8pIHsKKwkJUERFQlVHKERfUFJPQkUsICIwNWUzOjA1MDMgc2Vuc29yIE9WOTY1NSAoMS4zTSkiKTsKKwl9IGVsc2UgaWYgKF9PVjI2NDBfKSB7CisJCVBERUJVRyhEX1BST0JFLCAiMDVlMzowNTAzIHNlbnNvciBPVjI2NDAgKDIuME0pIik7CisJfSBlbHNlIHsKKwkJUERFQlVHKERfUFJPQkUsICIqKioqKiBVbmtub3duIHNlbnNvciAqKioqKiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmNGUyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuaApAQCAtMCwwICsxLDEwOCBAQAorLyogQGZpbGUgZ2w4NjAuaAorICogQGF1dGhvciBPbGl2aWVyIExPUklOLCB0aXLDqSBkdSBwaWxvdGUgU3ludGVrIHBhciBOaWNvbGFzIFZJVklFTgorICogQGRhdGUgMjAwOS0wOC0yNworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpZm5kZWYgR0w4NjBfREVWX0gKKyNkZWZpbmUgR0w4NjBfREVWX0gKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlICJnc3BjYS5oIgorCisjZGVmaW5lIE1PRFVMRV9OQU1FICJnc3BjYV9nbDg2MCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuOWQxMCIKKworI2RlZmluZSBjdHJsX2luICBnbDg2MF9SVHgKKyNkZWZpbmUgY3RybF9vdXQgZ2w4NjBfUlR4CisKKyNkZWZpbmUgSURfTUkxMzIwICAgMQorI2RlZmluZSBJRF9PVjI2NDAgICAyCisjZGVmaW5lIElEX09WOTY1NSAgIDQKKyNkZWZpbmUgSURfTUkyMDIwICAgOAorI2RlZmluZSBJRF9NSTIwMjBiIDE2CisKKyNkZWZpbmUgX01JMTMyMF8gICgoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5zZW5zb3IgPT0gSURfTUkxMzIwKQorI2RlZmluZSBfTUkyMDIwXyAgKCgoc3RydWN0IHNkICopIGdzcGNhX2RldiktPnNlbnNvciA9PSBJRF9NSTIwMjApCisjZGVmaW5lIF9NSTIwMjBiXyAoKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+c2Vuc29yID09IElEX01JMjAyMGIpCisjZGVmaW5lIF9NSTIwMjBjXyAwCisjZGVmaW5lIF9PVjI2NDBfICAoKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+c2Vuc29yID09IElEX09WMjY0MCkKKyNkZWZpbmUgX09WOTY1NV8gICgoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5zZW5zb3IgPT0gSURfT1Y5NjU1KQorCisjZGVmaW5lIElNQUdFXzY0MCAgIDAKKyNkZWZpbmUgSU1BR0VfODAwICAgMQorI2RlZmluZSBJTUFHRV8xMjgwICAyCisjZGVmaW5lIElNQUdFXzE2MDAgMworCitzdHJ1Y3Qgc2RfZ2w4NjAgeworCXUxNiBiYWNrbGlnaHQ7CisJdTE2IGJyaWdodG5lc3M7CisJdTE2IHNoYXJwbmVzczsKKwl1MTYgY29udHJhc3Q7CisJdTE2IGdhbW1hOworCXUxNiBodWU7CisJdTE2IHNhdHVyYXRpb247CisJdTE2IHdoaXRlYmFsOworCXU4ICBtaXJyb3I7CisJdTggIGZsaXA7CisJdTggIEFDNTBIejsKK307CisKKy8qIFNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisKKwlzdHJ1Y3Qgc2RfZ2w4NjAgdmN1cjsKKwlzdHJ1Y3Qgc2RfZ2w4NjAgdm9sZDsKKwlzdHJ1Y3Qgc2RfZ2w4NjAgdm1heDsKKworCWludCAgKCpkZXZfY29uZmlndXJlX2FsdCkgIChzdHJ1Y3QgZ3NwY2FfZGV2ICopOworCWludCAgKCpkZXZfaW5pdF9hdF9zdGFydHVwKShzdHJ1Y3QgZ3NwY2FfZGV2ICopOworCWludCAgKCpkZXZfaW5pdF9wcmVfYWx0KSAgIChzdHJ1Y3QgZ3NwY2FfZGV2ICopOworCXZvaWQgKCpkZXZfcG9zdF91bnNldF9hbHQpIChzdHJ1Y3QgZ3NwY2FfZGV2ICopOworCWludCAgKCpkZXZfY2FtZXJhX3NldHRpbmdzKShzdHJ1Y3QgZ3NwY2FfZGV2ICopOworCisJdTggICBzd2FwUkI7CisJdTggIG1pcnJvck1hc2s7CisJdTggIHNlbnNvcjsKKwlzMzIgbmJJbTsKKwlzMzIgbmJSaWdodFVwOworCXU4ICAgd2FpdFNldDsKK307CisKK3N0cnVjdCB2YWxpZHggeworCXUxNiB2YWw7CisJdTE2IGlkeDsKK307CisKK3N0cnVjdCBpZHhkYXRhIHsKKwl1OCBpZHg7CisJdTggZGF0YVszXTsKK307CisKK2ludCBmZXRjaF92YWxpZHgoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgdmFsaWR4ICp0YmwsIGludCBsZW4pOworaW50IGtlZXBfb25fZmV0Y2hpbmdfdmFsaWR4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldiwgc3RydWN0IHZhbGlkeCAqdGJsLAorCQkJCWludCBsZW4sIGludCBuKTsKK3ZvaWQgZmV0Y2hfaWR4ZGF0YShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHN0cnVjdCBpZHhkYXRhICp0YmwsIGludCBsZW4pOworCitpbnQgZ2w4NjBfUlR4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXVuc2lnbmVkIGNoYXIgcHJlZiwgdTMyIHJlcSwgdTE2IHZhbCwgdTE2IGluZGV4LAorCQkJczMyIGxlbiwgdm9pZCAqcGRhdGEpOworCit2b2lkIG1pMTMyMF9pbml0X3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKik7Cit2b2lkIG92MjY0MF9pbml0X3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKik7Cit2b2lkIG92OTY1NV9pbml0X3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKik7Cit2b2lkIG1pMjAyMF9pbml0X3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qZWlsaW5qLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2plaWxpbmouYwppbmRleCBkYmZhM2VkLi5hMTFjOTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2plaWxpbmouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2plaWxpbmouYwpAQCAtMzEyLDYgKzMxMiw4IEBACiAKIAkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCiAJZGV2LT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWlmIChkZXYtPmpwZWdfaGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCWpwZWdfZGVmaW5lKGRldi0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAogCQkJMHgyMSk7ICAgICAgICAgIC8qIEpQRUcgNDIyICovCiAJanBlZ19zZXRfcXVhbChkZXYtPmpwZWdfaGRyLCBkZXYtPnF1YWxpdHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwppbmRleCA4YTViYmExLi43ZjFlNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwpAQCAtNTYsNyArNTYsNyBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCi0vKiBXcml0ZXMgYSBieXRlIHRvIHRvIHRoZSBtNTYwMiAqLworLyogV3JpdGVzIGEgYnl0ZSB0byB0aGUgbTU2MDIgKi8KIGludCBtNTYwMl93cml0ZV9icmlkZ2Uoc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywgY29uc3QgdTggaTJjX2RhdGEpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jCmluZGV4IDdhYWZlYjcuLjJhMjhiNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYwpAQCAtMjAsNiArMjAsMTggQEAKIAogc3RhdGljIGludCBvdjc2NjBfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgb3Y3NjYwX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgb3Y3NjYwX2dldF9hdXRvX3doaXRlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCQkgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9zZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQkJIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9nZXRfYXV0b19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9zZXRfYXV0b19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgb3Y3NjYwX2dldF9hdXRvX2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9zZXRfYXV0b19leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IG92NzY2MF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiAKIGNvbnN0IHN0YXRpYyBzdHJ1Y3QgY3RybCBvdjc2NjBfY3RybHNbXSA9IHsKICNkZWZpbmUgR0FJTl9JRFggMQpAQCAtMzcsNiArNDksNzkgQEAKIAkJLnNldCA9IG92NzY2MF9zZXRfZ2FpbiwKIAkJLmdldCA9IG92NzY2MF9nZXRfZ2FpbgogCX0sCisjZGVmaW5lIEJMVUVfQkFMQU5DRV9JRFggMgorI2RlZmluZSBSRURfQkFMQU5DRV9JRFggMworI2RlZmluZSBBVVRPX1dISVRFX0JBTEFOQ0VfSURYIDQKKwl7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImF1dG8gd2hpdGUgYmFsYW5jZSIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMQorCQl9LAorCQkuc2V0ID0gb3Y3NjYwX3NldF9hdXRvX3doaXRlX2JhbGFuY2UsCisJCS5nZXQgPSBvdjc2NjBfZ2V0X2F1dG9fd2hpdGVfYmFsYW5jZQorCX0sCisjZGVmaW5lIEFVVE9fR0FJTl9DVFJMX0lEWCA1CisJeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0FVVE9HQUlOLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImF1dG8gZ2FpbiBjb250cm9sIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAxCisJCX0sCisJCS5zZXQgPSBvdjc2NjBfc2V0X2F1dG9fZ2FpbiwKKwkJLmdldCA9IG92NzY2MF9nZXRfYXV0b19nYWluCisJfSwKKyNkZWZpbmUgQVVUT19FWFBPU1VSRV9JRFggNgorCXsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImF1dG8gZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDEKKwkJfSwKKwkJLnNldCA9IG92NzY2MF9zZXRfYXV0b19leHBvc3VyZSwKKwkJLmdldCA9IG92NzY2MF9nZXRfYXV0b19leHBvc3VyZQorCX0sCisjZGVmaW5lIEhGTElQX0lEWCA3CisJeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImhvcml6b250YWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gb3Y3NjYwX3NldF9oZmxpcCwKKwkJLmdldCA9IG92NzY2MF9nZXRfaGZsaXAKKwl9LAorI2RlZmluZSBWRkxJUF9JRFggOAorCXsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwCisJCX0sCisJCS5zZXQgPSBvdjc2NjBfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gb3Y3NjYwX2dldF92ZmxpcAorCX0sCisKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG92NzY2MF9tb2Rlc1tdID0gewpAQCAtMTM3LDcgKzIyMiw3IEBACiAJCX0gZWxzZSB7CiAJCQlkYXRhWzBdID0gaW5pdF9vdjc2NjBbaV1bMl07CiAJCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsCi0JCQkJCWluaXRfb3Y3NjYwW2ldWzFdLCBkYXRhLCAxKTsKKwkJCQlpbml0X292NzY2MFtpXVsxXSwgZGF0YSwgMSk7CiAJCX0KIAl9CiAKQEAgLTE0OCw2ICsyMzMsMjggQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCWVyciA9IG92NzY2MF9zZXRfYXV0b193aGl0ZV9iYWxhbmNlKCZzZC0+Z3NwY2FfZGV2LAorCQlzZW5zb3Jfc2V0dGluZ3NbQVVUT19XSElURV9CQUxBTkNFX0lEWF0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gb3Y3NjYwX3NldF9hdXRvX2dhaW4oJnNkLT5nc3BjYV9kZXYsCisJCXNlbnNvcl9zZXR0aW5nc1tBVVRPX0dBSU5fQ1RSTF9JRFhdKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG92NzY2MF9zZXRfYXV0b19leHBvc3VyZSgmc2QtPmdzcGNhX2RldiwKKwkJc2Vuc29yX3NldHRpbmdzW0FVVE9fRVhQT1NVUkVfSURYXSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gb3Y3NjYwX3NldF9oZmxpcCgmc2QtPmdzcGNhX2RldiwKKwkJc2Vuc29yX3NldHRpbmdzW0hGTElQX0lEWF0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gb3Y3NjYwX3NldF92ZmxpcCgmc2QtPmdzcGNhX2RldiwKKwkJc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF0pOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTk0LDYgKzMwMSwxNTkgQEAKIAlyZXR1cm4gZXJyOwogfQogCisKK3N0YXRpYyBpbnQgb3Y3NjYwX2dldF9hdXRvX3doaXRlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCQkgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0FVVE9fV0hJVEVfQkFMQU5DRV9JRFhdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzY2MF9zZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQkJIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgYXV0byB3aGl0ZSBiYWxhbmNlIHRvICVkIiwgdmFsKTsKKworCXNlbnNvcl9zZXR0aW5nc1tBVVRPX1dISVRFX0JBTEFOQ0VfSURYXSA9IHZhbDsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y3NjYwX0NPTTgsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGZkKSB8ICgodmFsICYgMHgwMSkgPDwgMSkpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y3NjYwX0NPTTgsICZpMmNfZGF0YSwgMSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG92NzY2MF9nZXRfYXV0b19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0FVVE9fR0FJTl9DVFJMX0lEWF07CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byBnYWluIGNvbnRyb2wgJWQiLCAqdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc2NjBfc2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgYXV0byBnYWluIGNvbnRyb2wgdG8gJWQiLCB2YWwpOworCisJc2Vuc29yX3NldHRpbmdzW0FVVE9fR0FJTl9DVFJMX0lEWF0gPSB2YWw7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WNzY2MF9DT004LCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhmYikgfCAoKHZhbCAmIDB4MDEpIDw8IDIpKTsKKworCXJldHVybiBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WNzY2MF9DT004LCAmaTJjX2RhdGEsIDEpOworfQorCitzdGF0aWMgaW50IG92NzY2MF9nZXRfYXV0b19leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tBVVRPX0VYUE9TVVJFX0lEWF07CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byBleHBvc3VyZSBjb250cm9sICVkIiwgKnZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF9hdXRvX2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQkgICAgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJUERFQlVHKERfVjRMMiwgIlNldCBhdXRvIGV4cG9zdXJlIGNvbnRyb2wgdG8gJWQiLCB2YWwpOworCisJc2Vuc29yX3NldHRpbmdzW0FVVE9fRVhQT1NVUkVfSURYXSA9IHZhbDsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y3NjYwX0NPTTgsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGZlKSB8ICgodmFsICYgMHgwMSkgPDwgMCkpOworCisJcmV0dXJuIG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y3NjYwX0NPTTgsICZpMmNfZGF0YSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjYwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzY2MF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisKKwlzZW5zb3Jfc2V0dGluZ3NbSEZMSVBfSURYXSA9IHZhbDsKKworCWkyY19kYXRhID0gKCh2YWwgJiAweDAxKSA8PCA1KSB8CisJCShzZW5zb3Jfc2V0dGluZ3NbVkZMSVBfSURYXSA8PCA0KTsKKworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y3NjYwX01WRlAsICZpMmNfZGF0YSwgMSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG92NzY2MF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCSp2YWwgPSBzZW5zb3Jfc2V0dGluZ3NbVkZMSVBfSURYXTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc2NjBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJUERFQlVHKERfVjRMMiwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlzZW5zb3Jfc2V0dGluZ3NbVkZMSVBfSURYXSA9IHZhbDsKKworCWkyY19kYXRhID0gKCh2YWwgJiAweDAxKSA8PCA0KSB8IChzZW5zb3Jfc2V0dGluZ3NbVkZMSVBfSURYXSA8PCA1KTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WNzY2MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogV2hlbiB2ZmxpcCBpcyB0b2dnbGVkIHdlIG5lZWQgdG8gcmVhZGp1c3QgdGhlIGJyaWRnZSBoc3luYy92c3luYyAqLworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJZXJyID0gb3Y3NjYwX3N0YXJ0KHNkKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkIG92NzY2MF9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKQogewogCWludCBhZGRyZXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmgKaW5kZXggM2YyYzE2OS4uZjU1ODhlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oCkBAIC02NiwyMyArNjYsMjMgQEAKICNkZWZpbmUgT1Y3NjYwX1JCSUFTCQkweDJjCiAjZGVmaW5lIE9WNzY2MF9IUkVGCQkweDMyCiAjZGVmaW5lIE9WNzY2MF9BREMJCTB4MzcKLSNkZWZpbmUgT1Y3NjYwX09GT04gCQkweDM5Ci0jZGVmaW5lIE9WNzY2MF9UU0xCIAkJMHgzYQotI2RlZmluZSBPVjc2NjBfQ09NMTIgCQkweDNjCi0jZGVmaW5lIE9WNzY2MF9DT00xMyAJCTB4M2QKKyNkZWZpbmUgT1Y3NjYwX09GT04JCTB4MzkKKyNkZWZpbmUgT1Y3NjYwX1RTTEIJCTB4M2EKKyNkZWZpbmUgT1Y3NjYwX0NPTTEyCQkweDNjCisjZGVmaW5lIE9WNzY2MF9DT00xMwkJMHgzZAogI2RlZmluZSBPVjc2NjBfTENDMQkJMHg2MgogI2RlZmluZSBPVjc2NjBfTENDMgkJMHg2MwogI2RlZmluZSBPVjc2NjBfTENDMwkJMHg2NAogI2RlZmluZSBPVjc2NjBfTENDNAkJMHg2NQogI2RlZmluZSBPVjc2NjBfTENDNQkJMHg2NgotI2RlZmluZSBPVjc2NjBfSFYgCQkweDY5Ci0jZGVmaW5lIE9WNzY2MF9SU1ZEQTEgCQkweGExCisjZGVmaW5lIE9WNzY2MF9IVgkJMHg2OQorI2RlZmluZSBPVjc2NjBfUlNWREExCQkweGExCiAKICNkZWZpbmUgT1Y3NjYwX0RFRkFVTFRfR0FJTgkJMHgwZQotI2RlZmluZSBPVjc2NjBfREVGQVVMVF9SRURfR0FJTgkweDgwCisjZGVmaW5lIE9WNzY2MF9ERUZBVUxUX1JFRF9HQUlOCQkweDgwCiAjZGVmaW5lIE9WNzY2MF9ERUZBVUxUX0JMVUVfR0FJTiAJMHg4MAogI2RlZmluZSBPVjc2NjBfREVGQVVMVF9TQVRVUkFUSU9OCTB4MDAKLSNkZWZpbmUgT1Y3NjYwX0RFRkFVTFRfRVhQT1NVUkUJMHgyMAorI2RlZmluZSBPVjc2NjBfREVGQVVMVF9FWFBPU1VSRQkJMHgyMAogCiAvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOwpAQCAtMTQ5LDIyICsxNDksOCBAQAogCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwZH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX0NUUkwsIDB4MDB9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDAzfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwM30sCi0Je0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKLQotCXtTRU5TT1IsIE9WNzY2MF9PRk9OLCAweDBjfSwKLQl7U0VOU09SLCBPVjc2NjBfQ09NMiwgMHgxMX0sCi0Je1NFTlNPUiwgT1Y3NjYwX0NPTTcsIDB4MDV9LAotCiAJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDF9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDZ9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDB9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA4fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDAxfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCkBAIC0xNzMsMzQgKzE1OSw4IEBACiAJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9LAogCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCiAJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwfSwKLQotCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAyfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAotCi0Je1NFTlNPUiwgT1Y3NjYwX0FFQ0gsIE9WNzY2MF9ERUZBVUxUX0VYUE9TVVJFfSwKLQl7U0VOU09SLCBPVjc2NjBfQ09NMSwgMHgwMH0sCi0KLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwMX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDh9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCi0KLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGN9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDB9LAotCiAJe1NFTlNPUiwgT1Y3NjYwX0NPTTcsIDB4ODB9LAogCXtTRU5TT1IsIE9WNzY2MF9DTEtSQywgMHg4MH0sCi0Je1NFTlNPUiwgT1Y3NjYwX0JMVUVfR0FJTiwgMHg4MH0sCi0Je1NFTlNPUiwgT1Y3NjYwX1JFRF9HQUlOLCAweDgwfSwKIAl7U0VOU09SLCBPVjc2NjBfQ09NOSwgMHg0Y30sCiAJe1NFTlNPUiwgT1Y3NjYwX09GT04sIDB4NDN9LAogCXtTRU5TT1IsIE9WNzY2MF9DT00xMiwgMHgyOH0sCkBAIC0yMTIsMTcgKzE3MiwxNyBAQAogCXtTRU5TT1IsIE9WNzY2MF9QU0hGVCwgMHgwYn0sCiAJe1NFTlNPUiwgT1Y3NjYwX1ZTVEFSVCwgMHgwMX0sCiAJe1NFTlNPUiwgT1Y3NjYwX1ZTVE9QLCAweDdhfSwKLQl7U0VOU09SLCBPVjc2NjBfVlJFRiwgMHgwMH0sCisJe1NFTlNPUiwgT1Y3NjYwX1ZTVE9QLCAweDAwfSwKIAl7U0VOU09SLCBPVjc2NjBfQ09NNywgMHgwNX0sCi0Je1NFTlNPUiwgT1Y3NjYwX0NPTTYsIDB4NGJ9LAotCXtTRU5TT1IsIE9WNzY2MF9CQklBUywgMHg5OH0sCi0Je1NFTlNPUiwgT1Y3NjYwX0diQklBUywgMHg5OH0sCi0Je1NFTlNPUiwgT1Y3NjYwX1JTVkQyOSwgMHg5OH0sCi0Je1NFTlNPUiwgT1Y3NjYwX1JCSUFTLCAweDk4fSwKKwl7U0VOU09SLCBPVjc2NjBfQ09NNiwgMHg0Mn0sCisJe1NFTlNPUiwgT1Y3NjYwX0JCSUFTLCAweDk0fSwKKwl7U0VOU09SLCBPVjc2NjBfR2JCSUFTLCAweDk0fSwKKwl7U0VOU09SLCBPVjc2NjBfUlNWRDI5LCAweDk0fSwKKwl7U0VOU09SLCBPVjc2NjBfUkJJQVMsIDB4OTR9LAogCXtTRU5TT1IsIE9WNzY2MF9DT00xLCAweDAwfSwKIAl7U0VOU09SLCBPVjc2NjBfQUVDSCwgMHgwMH0sCiAJe1NFTlNPUiwgT1Y3NjYwX0FFQ0hILCAweDAwfSwKLQl7U0VOU09SLCBPVjc2NjBfQURDLCAweDA0fSwKKwl7U0VOU09SLCBPVjc2NjBfQURDLCAweDA1fSwKIAl7U0VOU09SLCBPVjc2NjBfQ09NMTMsIDB4MDB9LAogCXtTRU5TT1IsIE9WNzY2MF9SU1ZEQTEsIDB4MjN9LAogCXtTRU5TT1IsIE9WNzY2MF9UU0xCLCAweDBkfSwKQEAgLTIzMyw2ICsxOTMsNDcgQEAKIAl7U0VOU09SLCBPVjc2NjBfTENDNCwgMHg0MH0sCiAJe1NFTlNPUiwgT1Y3NjYwX0xDQzUsIDB4MDF9LAogCisJe1NFTlNPUiwgT1Y3NjYwX0FFQ0gsIDB4MjB9LAorCXtTRU5TT1IsIE9WNzY2MF9DT00xLCAweDAwfSwKKwl7U0VOU09SLCBPVjc2NjBfT0ZPTiwgMHgwY30sCisJe1NFTlNPUiwgT1Y3NjYwX0NPTTIsIDB4MTF9LAorCXtTRU5TT1IsIE9WNzY2MF9DT003LCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDh9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwfSwKKwl7U0VOU09SLCBPVjc2NjBfQUVDSCwgMHg1Zn0sCisJe1NFTlNPUiwgT1Y3NjYwX0NPTTEsIDB4MDN9LAorCXtTRU5TT1IsIE9WNzY2MF9PRk9OLCAweDBjfSwKKwl7U0VOU09SLCBPVjc2NjBfQ09NMiwgMHgxMX0sCisJe1NFTlNPUiwgT1Y3NjYwX0NPTTcsIDB4MDV9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDAxfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwOH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGN9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDB9LAorCiAJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDZ9LAogCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LApAQCAtMjQ1LDM1ICsyNDYsMTggQEAKIAl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAxfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweGUwfSwgLyogNDgwICovCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlY30sCiAJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgyN30sIC8qIDM5ICovCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhhN30sIC8qIDY3OSAqLworCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4Mjd9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4YTd9LAogCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAotCiAJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAogCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCi0KLQl7U0VOU09SLCBPVjc2NjBfQUVDSCwgMHgyMH0sCi0Je1NFTlNPUiwgT1Y3NjYwX0NPTTEsIDB4MDB9LAotCXtTRU5TT1IsIE9WNzY2MF9PRk9OLCAweDBjfSwKLQl7U0VOU09SLCBPVjc2NjBfQ09NMiwgMHgxMX0sCi0Je1NFTlNPUiwgT1Y3NjYwX0NPTTcsIDB4MDV9LAotCXtTRU5TT1IsIE9WNzY2MF9CTFVFX0dBSU4sIDB4ODB9LAotCXtTRU5TT1IsIE9WNzY2MF9SRURfR0FJTiwgMHg4MH0sCi0KLQl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwMX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAotCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDh9LAotCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0KIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKaW5kZXggMDE2MzkwMy4uNTk0MDBlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC00Nyw2ICs0NywxMiBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYaSAyNTUwIikKIAkJfQogCX0sIHsKKwkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBQYSAyNTQ4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gUGEgMjU0OCIpCisJCX0KKwl9LCB7CiAJCS5pZGVudCA9ICJNU0kgR1g3MDAiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLApAQCAtNTQsNiArNjAsMTMgQEAKIAkJCURNSV9NQVRDSChETUlfQklPU19EQVRFLCAiMDcvMjYvMjAwNyIpCiAJCX0KIAl9LCB7CisJCS5pZGVudCA9ICJNU0kgR1g3MDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJHWDcwMCIpLAorCQkJRE1JX01BVENIKERNSV9CSU9TX0RBVEUsICIwNy8xOS8yMDA3IikKKwkJfQorCX0sIHsKIAkJLmlkZW50ID0gIk1TSSBHWDcwMC9HWDcwNS9FWDcwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm8tU3RhciBJbnRlcm5hdGlvbmFsIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwppbmRleCA3YWY1MTFiLi42NTQ4OWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKQEAgLTUwLDcgKzUwLDYgQEAKIAkJCSAgICAgIDB4MDQsIDB4NDAsIGFkZHJlc3MsIDAsIGJ1ZiwgbGVuLAogCQkJICAgICAgU1RWMDZYWF9VUkJfTVNHX1RJTUVPVVQpOwogCi0KIAlQREVCVUcoRF9DT05GLCAiV3JpdHRlbiAweCV4IHRvIGFkZHJlc3MgMHgleCwgc3RhdHVzOiAlZCIsCiAJICAgICAgIGkyY19kYXRhLCBhZGRyZXNzLCBlcnIpOwogCkBAIC02OSw3ICs2OCw3IEBACiAKIAkqaTJjX2RhdGEgPSBidWZbMF07CiAKLQlQREVCVUcoRF9DT05GLCAiUmVhZCAweCV4IGZyb20gYWRkcmVzcyAweCV4LCBzdGF0dXMgJWQiLAorCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIDB4JXggZnJvbSBhZGRyZXNzIDB4JXgsIHN0YXR1cyAlZCIsCiAJICAgICAgICppMmNfZGF0YSwgYWRkcmVzcywgZXJyKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwpAQCAtMTExLDE0ICsxMTAsMTQgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OwogCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKIAotCVBERUJVRyhEX1VTQk8sICJJMkM6IENvbW1hbmQgYnVmZmVyIGNvbnRhaW5zICVkIGVudHJpZXMiLCBsZW4pOworCVBERUJVRyhEX0NPTkYsICJJMkM6IENvbW1hbmQgYnVmZmVyIGNvbnRhaW5zICVkIGVudHJpZXMiLCBsZW4pOwogCWZvciAoaSA9IDA7IGkgPCBsZW47KSB7CiAJCS8qIEJ1aWxkIHRoZSBjb21tYW5kIGJ1ZmZlciAqLwogCQltZW1zZXQoYnVmLCAwLCBJMkNfQlVGRkVSX0xFTkdUSCk7CiAJCWZvciAoaiA9IDA7IGogPCBJMkNfTUFYX0JZVEVTICYmIGkgPCBsZW47IGorKywgaSsrKSB7CiAJCQlidWZbal0gPSBkYXRhWzIqaV07CiAJCQlidWZbMHgxMCArIGpdID0gZGF0YVsyKmkrMV07Ci0JCQlQREVCVUcoRF9VU0JPLCAiSTJDOiBXcml0aW5nIDB4JTAyeCB0byByZWcgMHglMDJ4IiwKKwkJCVBERUJVRyhEX0NPTkYsICJJMkM6IFdyaXRpbmcgMHglMDJ4IHRvIHJlZyAweCUwMngiLAogCQkJZGF0YVsyKmkrMV0sIGRhdGFbMippXSk7CiAJCX0KIAkJYnVmWzB4MjBdID0gc2QtPnNlbnNvci0+aTJjX2FkZHI7CkBAIC0xMjgsOCArMTI3LDggQEAKIAkJCQkgICAgICAweDA0LCAweDQwLCAweDA0MDAsIDAsIGJ1ZiwKIAkJCQkgICAgICBJMkNfQlVGRkVSX0xFTkdUSCwKIAkJCQkgICAgICBTVFYwNlhYX1VSQl9NU0dfVElNRU9VVCk7Ci0JCQkJICAgICAgaWYgKGVyciA8IDApCi0JCQkJCXJldHVybiBlcnI7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIHN0djA2eHhfd3JpdGVfc2Vuc29yX2ZpbmlzaChzZCk7CiB9CkBAIC0xNDAsNyArMTM5LDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OwogCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKIAotCVBERUJVRyhEX1VTQk8sICJJMkM6IENvbW1hbmQgYnVmZmVyIGNvbnRhaW5zICVkIGVudHJpZXMiLCBsZW4pOworCVBERUJVRyhEX0NPTkYsICJJMkM6IENvbW1hbmQgYnVmZmVyIGNvbnRhaW5zICVkIGVudHJpZXMiLCBsZW4pOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjspIHsKIAkJLyogQnVpbGQgdGhlIGNvbW1hbmQgYnVmZmVyICovCkBAIC0xNDksNyArMTQ4LDcgQEAKIAkJCWJ1ZltqXSA9IGRhdGFbMippXTsKIAkJCWJ1ZlsweDEwICsgaiAqIDJdID0gZGF0YVsyKmkrMV07CiAJCQlidWZbMHgxMCArIGogKiAyICsgMV0gPSBkYXRhWzIqaSsxXSA+PiA4OwotCQkJUERFQlVHKERfVVNCTywgIkkyQzogV3JpdGluZyAweCUwNHggdG8gcmVnIDB4JTAyeCIsCisJCQlQREVCVUcoRF9DT05GLCAiSTJDOiBXcml0aW5nIDB4JTA0eCB0byByZWcgMHglMDJ4IiwKIAkJCQlkYXRhWzIqaSsxXSwgZGF0YVsyKmldKTsKIAkJfQogCQlidWZbMHgyMF0gPSBzZC0+c2Vuc29yLT5pMmNfYWRkcjsKQEAgLTE4OSw3ICsxODgsNyBAQAogCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxNDAwLCAwLCBidWYsIEkyQ19CVUZGRVJfTEVOR1RILAogCQkJICAgICAgU1RWMDZYWF9VUkJfTVNHX1RJTUVPVVQpOwogCWlmIChlcnIgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUiwgIkkyQyBSZWFkOiBlcnJvciB3cml0aW5nIGFkZHJlc3M6ICVkIiwgZXJyKTsKKwkJUERFQlVHKERfRVJSLCAiSTJDOiBSZWFkIGVycm9yIHdyaXRpbmcgYWRkcmVzczogJWQiLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMjAxLDcgKzIwMCw3IEBACiAJZWxzZQogCQkqdmFsdWUgPSBidWZbMF07CiAKLQlQREVCVUcoRF9VU0JPLCAiSTJDOiBSZWFkIDB4JXggZnJvbSBhZGRyZXNzIDB4JXgsIHN0YXR1czogJWQiLAorCVBERUJVRyhEX0NPTkYsICJJMkM6IFJlYWQgMHgleCBmcm9tIGFkZHJlc3MgMHgleCwgc3RhdHVzOiAlZCIsCiAJICAgICAgICp2YWx1ZSwgYWRkcmVzcywgZXJyKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCmluZGV4IGU1MDI0YzguLjcwNmUwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCQkubmFtZQkJPSAiZXhwb3N1cmUiLAogCQkJLm1pbmltdW0JPSAweDAwLAotCQkJLm1heGltdW0JPSAweGZmZmYsCisJCQkubWF4aW11bQk9IDB4ZmYsCiAJCQkuc3RlcAkJPSAweDEsCiAJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfRVhQT1NVUkUsCiAJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKQEAgLTc0LDcgKzc0LDM1IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxMDIwX2N0cmxbXSA9IHt9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxMDIwX2N0cmxbXSA9IHsKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAweDAwLAorCQkJLm1heGltdW0JPSAweGZmZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfRVhQT1NVUkUsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IGhkY3Nfc2V0X2V4cG9zdXJlLAorCQkuZ2V0ID0gaGRjc19nZXRfZXhwb3N1cmUKKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJnYWluIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHhmZiwKKwkJCS5zdGVwCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9HQUlOLAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBoZGNzX3NldF9nYWluLAorCQkuZ2V0ID0gaGRjc19nZXRfZ2FpbgorCX0KK307CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGhkY3MxMDIwX21vZGVbXSA9IHsKIAl7CkBAIC0xMjAsNiArMTQ4LDcgQEAKIAl9IGV4cDsKIAogCWludCBwc21wOworCXU4IGV4cF9jYWNoZSwgZ2Fpbl9jYWNoZTsKIH07CiAKIHN0YXRpYyBpbnQgaGRjc19yZWdfd3JpdGVfc2VxKHN0cnVjdCBzZCAqc2QsIHU4IHJlZywgdTggKnZhbHMsIHU4IGxlbikKQEAgLTIwNSwzNCArMjM0LDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGhkY3MgKmhkY3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAKLQkvKiBDb2x1bW4gdGltZSBwZXJpb2QgKi8KLQlpbnQgY3Q7Ci0JLyogQ29sdW1uIHByb2Nlc3NpbmcgcGVyaW9kICovCi0JaW50IGNwOwotCS8qIFJvdyBwcm9jZXNzaW5nIHBlcmlvZCAqLwotCWludCBycDsKLQlpbnQgY3ljbGVzOwotCWludCBlcnI7Ci0JaW50IHJvd2V4cDsKLQl1MTYgZGF0YVsyXTsKKwkqdmFsID0gaGRjcy0+ZXhwX2NhY2hlOwogCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgSERDU19ST1dFWFBMLCAmZGF0YVswXSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBIRENTX1JPV0VYUEgsICZkYXRhWzFdKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXJvd2V4cCA9IChkYXRhWzFdIDw8IDgpIHwgZGF0YVswXTsKLQotCWN0ID0gaGRjcy0+ZXhwLmN0byArIGhkY3MtPnBzbXAgKyAoSERDU19BRENfU1RBUlRfU0lHX0RVUiArIDIpOwotCWNwID0gaGRjcy0+ZXhwLmN0byArIChoZGNzLT53ICogY3QgLyAyKTsKLQlycCA9IGhkY3MtPmV4cC5ycyArIGNwOwotCi0JY3ljbGVzID0gcnAgKiByb3dleHA7Ci0JKnZhbCA9IGN5Y2xlcyAvIEhEQ1NfQ0xLX0ZSRVFfTUhaOwotCVBERUJVRyhEX1Y0TDIsICJSZWFkIGV4cG9zdXJlICVkIiwgKnZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1Miw5ICsyNTUsMTIgQEAKIAkgICB3aXRoaW4gdGhlIGNvbHVtbiBwcm9jZXNzaW5nIHBlcmlvZCAqLwogCWludCBtbmN0OwogCWludCBjeWNsZXMsIGVycjsKLQl1OCBleHBbNF07CisJdTggZXhwWzE0XTsKIAotCWN5Y2xlcyA9IHZhbCAqIEhEQ1NfQ0xLX0ZSRVFfTUhaOworCXZhbCAmPSAweGZmOworCWhkY3MtPmV4cF9jYWNoZSA9IHZhbDsKKworCWN5Y2xlcyA9IHZhbCAqIEhEQ1NfQ0xLX0ZSRVFfTUhaICogMjU3OwogCiAJY3QgPSBoZGNzLT5leHAuY3RvICsgaGRjcy0+cHNtcCArIChIRENTX0FEQ19TVEFSVF9TSUdfRFVSICsgMik7CiAJY3AgPSBoZGNzLT5leHAuY3RvICsgKGhkY3MtPncgKiBjdCAvIDIpOwpAQCAtMjg4LDczICsyOTQsNzkgQEAKIAkJc3Jvd2V4cCA9IG1heF9zcm93ZXhwOwogCiAJaWYgKElTXzEwMjAoc2QpKSB7Ci0JCWV4cFswXSA9IHJvd2V4cCAmIDB4ZmY7Ci0JCWV4cFsxXSA9IHJvd2V4cCA+PiA4OwotCQlleHBbMl0gPSAoc3Jvd2V4cCA+PiAyKSAmIDB4ZmY7Ci0JCS8qIHRoaXMgY2xlYXJzIGV4cG9zdXJlIGVycm9yIGZsYWcgKi8KLQkJZXhwWzNdID0gMHgxOwotCQllcnIgPSBoZGNzX3JlZ193cml0ZV9zZXEoc2QsIEhEQ1NfUk9XRVhQTCwgZXhwLCA0KTsKKwkJZXhwWzBdID0gSERDUzIwX0NPTlRST0w7CisJCWV4cFsxXSA9IDB4MDA7CQkvKiBTdG9wIHN0cmVhbWluZyAqLworCQlleHBbMl0gPSBIRENTX1JPV0VYUEw7CisJCWV4cFszXSA9IHJvd2V4cCAmIDB4ZmY7CisJCWV4cFs0XSA9IEhEQ1NfUk9XRVhQSDsKKwkJZXhwWzVdID0gcm93ZXhwID4+IDg7CisJCWV4cFs2XSA9IEhEQ1MyMF9TUk9XRVhQOworCQlleHBbN10gPSAoc3Jvd2V4cCA+PiAyKSAmIDB4ZmY7CisJCWV4cFs4XSA9IEhEQ1MyMF9FUlJPUjsKKwkJZXhwWzldID0gMHgxMDsJCS8qIENsZWFyIGV4cG9zdXJlIGVycm9yIGZsYWcqLworCQlleHBbMTBdID0gSERDUzIwX0NPTlRST0w7CisJCWV4cFsxMV0gPSAweDA0OwkJLyogUmVzdGFydCBzdHJlYW1pbmcgKi8KKwkJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3JfYnl0ZXMoc2QsIGV4cCwgNik7CiAJfSBlbHNlIHsKLQkJZXhwWzBdID0gcm93ZXhwICYgMHhmZjsKLQkJZXhwWzFdID0gcm93ZXhwID4+IDg7Ci0JCWV4cFsyXSA9IHNyb3dleHAgJiAweGZmOwotCQlleHBbM10gPSBzcm93ZXhwID4+IDg7Ci0JCWVyciA9IGhkY3NfcmVnX3dyaXRlX3NlcShzZCwgSERDU19ST1dFWFBMLCBleHAsIDQpOworCQlleHBbMF0gPSBIRENTMDBfQ09OVFJPTDsKKwkJZXhwWzFdID0gMHgwMDsgICAgICAgICAvKiBTdG9wIHN0cmVhbWluZyAqLworCQlleHBbMl0gPSBIRENTX1JPV0VYUEw7CisJCWV4cFszXSA9IHJvd2V4cCAmIDB4ZmY7CisJCWV4cFs0XSA9IEhEQ1NfUk9XRVhQSDsKKwkJZXhwWzVdID0gcm93ZXhwID4+IDg7CisJCWV4cFs2XSA9IEhEQ1MwMF9TUk9XRVhQTDsKKwkJZXhwWzddID0gc3Jvd2V4cCAmIDB4ZmY7CisJCWV4cFs4XSA9IEhEQ1MwMF9TUk9XRVhQSDsKKwkJZXhwWzldID0gc3Jvd2V4cCA+PiA4OworCQlleHBbMTBdID0gSERDU19TVEFUVVM7CisJCWV4cFsxMV0gPSAweDEwOyAgICAgICAgIC8qIENsZWFyIGV4cG9zdXJlIGVycm9yIGZsYWcqLworCQlleHBbMTJdID0gSERDUzAwX0NPTlRST0w7CisJCWV4cFsxM10gPSAweDA0OyAgICAgICAgIC8qIFJlc3RhcnQgc3RyZWFtaW5nICovCisJCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yX2J5dGVzKHNkLCBleHAsIDcpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0KLQkJLyogY2xlYXIgZXhwb3N1cmUgZXJyb3IgZmxhZyAqLwotCQllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwKLQkJICAgICBIRENTX1NUQVRVUywgQklUKDQpKTsKIAl9CiAJUERFQlVHKERfVjRMMiwgIldyaXRpbmcgZXhwb3N1cmUgJWQsIHJvd2V4cCAlZCwgc3Jvd2V4cCAlZCIsCiAJICAgICAgIHZhbCwgcm93ZXhwLCBzcm93ZXhwKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGhkY3Nfc2V0X2dhaW5zKHN0cnVjdCBzZCAqc2QsIHU4IHIsIHU4IGcsIHU4IGIpCitzdGF0aWMgaW50IGhkY3Nfc2V0X2dhaW5zKHN0cnVjdCBzZCAqc2QsIHU4IGcpCiB7CisJc3RydWN0IGhkY3MgKmhkY3MgPSBzZC0+c2Vuc29yX3ByaXY7CisJaW50IGVycjsKIAl1OCBnYWluc1s0XTsKIAorCWhkY3MtPmdhaW5fY2FjaGUgPSBnOworCiAJLyogdGhlIHZvbHRhZ2UgZ2FpbiBBdiA9ICgxICsgMTkgKiB2YWwgLyAxMjcpICogKDEgKyBiaXQ3KSAqLwotCWlmIChyID4gMTI3KQotCQlyID0gMHg4MCB8IChyIC8gMik7CiAJaWYgKGcgPiAxMjcpCiAJCWcgPSAweDgwIHwgKGcgLyAyKTsKLQlpZiAoYiA+IDEyNykKLQkJYiA9IDB4ODAgfCAoYiAvIDIpOwogCiAJZ2FpbnNbMF0gPSBnOwotCWdhaW5zWzFdID0gcjsKLQlnYWluc1syXSA9IGI7CisJZ2FpbnNbMV0gPSBnOworCWdhaW5zWzJdID0gZzsKIAlnYWluc1szXSA9IGc7CiAKLQlyZXR1cm4gaGRjc19yZWdfd3JpdGVfc2VxKHNkLCBIRENTX0VSRUNQR0EsIGdhaW5zLCA0KTsKKwllcnIgPSBoZGNzX3JlZ193cml0ZV9zZXEoc2QsIEhEQ1NfRVJFQ1BHQSwgZ2FpbnMsIDQpOworCQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGhkY3NfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgZXJyOwotCXUxNiBkYXRhOworCXN0cnVjdCBoZGNzICpoZGNzID0gc2QtPnNlbnNvcl9wcml2OwogCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgSERDU19FUkVDUEdBLCAmZGF0YSk7CisJKnZhbCA9IGhkY3MtPmdhaW5fY2FjaGU7CiAKLQkvKiBCaXQgNyBkb3VibGVzIHRoZSBnYWluICovCi0JaWYgKGRhdGEgJiAweDgwKQotCQkqdmFsID0gKGRhdGEgJiAweDdmKSAqIDI7Ci0JZWxzZQotCQkqdmFsID0gZGF0YTsKLQotCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGhkY3Nfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJUERFQlVHKERfVjRMMiwgIldyaXRpbmcgZ2FpbiAlZCIsIHZhbCk7CiAJcmV0dXJuIGhkY3Nfc2V0X2dhaW5zKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2LAotCQkJICAgICAgIHZhbCAmIDB4ZmYsIHZhbCAmIDB4ZmYsIHZhbCAmIDB4ZmYpOworCQkJICAgICAgIHZhbCAmIDB4ZmYpOwogfQogCiBzdGF0aWMgaW50IGhkY3Nfc2V0X3NpemUoc3RydWN0IHNkICpzZCwKQEAgLTU3MiwxNiArNTg0LDE1IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBoZGNzX3NldF9nYWlucyhzZCwgSERDU19ERUZBVUxUX0dBSU4sIEhEQ1NfREVGQVVMVF9HQUlOLAotCQkJICAgICBIRENTX0RFRkFVTFRfR0FJTik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBoZGNzX3NldF9leHBvc3VyZSgmc2QtPmdzcGNhX2RldiwgSERDU19ERUZBVUxUX0VYUE9TVVJFKTsKKwllcnIgPSBoZGNzX3NldF9nYWlucyhzZCwgSERDU19ERUZBVUxUX0dBSU4pOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gaGRjc19zZXRfc2l6ZShzZCwgaGRjcy0+YXJyYXkud2lkdGgsIGhkY3MtPmFycmF5LmhlaWdodCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBoZGNzX3NldF9leHBvc3VyZSgmc2QtPmdzcGNhX2RldiwgSERDU19ERUZBVUxUX0VYUE9TVVJFKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKaW5kZXggNDEyZjA2Yy4uMzdiMzFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAjZGVmaW5lIEhEQ1NfUlVOX0VOQUJMRQkJKDEgPDwgMikKICNkZWZpbmUgSERDU19TTEVFUF9NT0RFCQkoMSA8PCAxKQogCi0jZGVmaW5lIEhEQ1NfREVGQVVMVF9FWFBPU1VSRQk1MDAwCisjZGVmaW5lIEhEQ1NfREVGQVVMVF9FWFBPU1VSRQk0OAogI2RlZmluZSBIRENTX0RFRkFVTFRfR0FJTgkxMjgKIAogc3RhdGljIGludCBoZGNzX3Byb2JlXzF4MDAoc3RydWN0IHNkICpzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zdDY0MjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3N0NjQyMi5jCmluZGV4IDg3Y2I1YjkuLmMxMWYwNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3N0NjQyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3N0NjQyMi5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIC8qIDEwIGNvbXByZXNzZWQ/ICovCiAKIAkJeyAweDE0MzksIDB4MDAgfSwKLS8qIGFudGlmbGltbWVyPz8gIDB4YTIgZ2VyIHBlcmZla3QgYmlsZCBtb3QgbW9uaXRvciAqLworLyogYW50aS1ub2lzZT8gIDB4YTIgZ2l2ZXMgYSBwZXJmZWN0IGltYWdlICovCiAKIAkJeyAweDE0M2IsIDB4MDUgfSwKIAkJeyAweDE0M2MsIDB4MDAgfSwJLyogMHgwMC0weDAxIC0gPz8/ICovCkBAIC0xOTcsMTUgKzE5NywxNCBAQAogCQl7IDB4MTUwMCwgMHg1MCB9LAkvKiAweDAwIC0gMHhGRiAgMHg4MCA9PSBjb21wciA/ICovCiAKIAkJeyAweDE1MDEsIDB4YWYgfSwKLS8qIGhpZ2ggdmFsLT4gbGp1cyBhcmVhIGJsaXIgbW9ya2FyZS4gKi8KLS8qIGxvdyB2YWwgLT4gbGp1cyBhcmVhIGJsaXIgbGp1c2FyZS4gKi8KKy8qIGhpZ2ggdmFsLT4gbGlnaHQgYXJlYSBnZXRzIGRhcmtlciAqLworLyogbG93IHZhbCAtPiBsaWdodCBhcmVhIGdldHMgbGlnaHRlciAqLwogCQl7IDB4MTUwMiwgMHhjMiB9LAotLyogaGlnaCB2YWwtPiBsanVzIGFyZWEgYmxpciBtb3JrYXJlLiAqLwotLyogbG93IHZhbCAtPiBsanVzIGFyZWEgYmxpciBsanVzYXJlLiAqLworLyogaGlnaCB2YWwtPiBsaWdodCBhcmVhIGdldHMgZGFya2VyICovCisvKiBsb3cgdmFsIC0+IGxpZ2h0IGFyZWEgZ2V0cyBsaWdodGVyICovCiAJCXsgMHgxNTAzLCAweDQ1IH0sCi0vKiBoaWdoIHZhbC0+IGxqdXMgYXJlYSBibGlyIG1vcmthcmUuICovCi0vKiBsb3cgdmFsIC0+IGxqdXMgYXJlYSBibGlyIGxqdXNhcmUuICovCi0KKy8qIGhpZ2ggdmFsLT4gbGlnaHQgYXJlYSBnZXRzIGRhcmtlciAqLworLyogbG93IHZhbCAtPiBsaWdodCBhcmVhIGdldHMgbGlnaHRlciAqLwogCQl7IDB4MTUwNSwgMHgwMiB9LAogLyogMiAgOiAzMjR4MjQ4ICA4MDM1MiBieXRlcyAqLwogLyogNyAgOiAyNDh4MTYyICA0MDE3NiBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKaW5kZXggNjE5MjUwZS4uNTg5MDQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCkBAIC0yOTQ2LDcgKzI5NDYsOCBAQAogCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4MDU4YywgMHgwMDAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKKwkJCWlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQorCQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CiAJCQlicmVhazsKIAkJfQogCQltc2xlZXAoMTAwKTsKQEAgLTI5NjQsNyArMjk2NSw3IEBACiAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkxMzEwX1NPQykKIAkJcmVnX3coZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7Ci0JZWxzZQorCWVsc2UgaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCiAJCXJlZ193KGRldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOwogCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzAxKTsKIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDksIDB4YjAwMyk7CkBAIC0yOTgxLDcgKzI5ODIsNyBAQAogLypmaXhtZTogaXMgdGhpcyB1c2VmdWw/Ki8KIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkxMzEwX1NPQykKIAkJcmVnX3coZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7Ci0JZWxzZQorCWVsc2UgaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCiAJCXJlZ193KGRldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IDYzZWEwZmIuLjQ2M2VjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJICJcdFx0XHQtMSBpcyBhdXRvZGV0ZWN0LCAwIGlzIG9mZiwgMSBpcyBvblxuIgogCQkgIlx0XHRcdERlZmF1bHQgaXMgYXV0b2RldGVjdCIpOwogCi1NT0RVTEVfUEFSTV9ERVNDKGl2dHZfZmlyc3RfbWlub3IsICJTZXQga2VybmVsIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CitNT0RVTEVfUEFSTV9ERVNDKGl2dHZfZmlyc3RfbWlub3IsICJTZXQgZGV2aWNlIG5vZGUgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKIAogTU9EVUxFX0FVVEhPUigiS2V2aW4gVGhheWVyLCBDaHJpcyBLZW5uZWR5LCBIYW5zIFZlcmt1aWwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ1gyMzQxNS9DWDIzNDE2IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwppbmRleCA4ZjE1YTMxLi5iOWM3MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwpAQCAtMTYxLDE5ICsxNjEsMTkgQEAKIAkJcmV0dXJuIC0xOwogCWlmIChodyA9PSBJVlRWX0hXX1RVTkVSKSB7CiAJCS8qIHNwZWNpYWwgdHVuZXIgaGFuZGxpbmcgKi8KLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmaXR2LT52NGwyX2RldiwKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAogCQkJCWFkYXAsIG1vZCwgdHlwZSwKLQkJCQlpdHYtPmNhcmRfaTJjLT5yYWRpbyk7CisJCQkJMCwgaXR2LT5jYXJkX2kyYy0+cmFkaW8pOwogCQlpZiAoc2QpCiAJCQlzZC0+Z3JwX2lkID0gMSA8PCBpZHg7Ci0JCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJml0di0+djRsMl9kZXYsCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmaXR2LT52NGwyX2RldiwKIAkJCQlhZGFwLCBtb2QsIHR5cGUsCi0JCQkJaXR2LT5jYXJkX2kyYy0+ZGVtb2QpOworCQkJCTAsIGl0di0+Y2FyZF9pMmMtPmRlbW9kKTsKIAkJaWYgKHNkKQogCQkJc2QtPmdycF9pZCA9IDEgPDwgaWR4OwotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAorCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJml0di0+djRsMl9kZXYsCiAJCQkJYWRhcCwgbW9kLCB0eXBlLAotCQkJCWl0di0+Y2FyZF9pMmMtPnR2KTsKKwkJCQkwLCBpdHYtPmNhcmRfaTJjLT50dik7CiAJCWlmIChzZCkKIAkJCXNkLT5ncnBfaWQgPSAxIDw8IGlkeDsKIAkJcmV0dXJuIHNkID8gMCA6IC0xOwpAQCAtMTgxLDExICsxODEsMTEgQEAKIAlpZiAoIWh3X2FkZHJzW2lkeF0pCiAJCXJldHVybiAtMTsKIAlpZiAoaHcgPT0gSVZUVl9IV19VUEQ2NDAzMUEgfHwgaHcgPT0gSVZUVl9IV19VUEQ2NDA4WCkgewotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2X2FkZHIoJml0di0+djRsMl9kZXYsCi0JCQkJYWRhcCwgbW9kLCB0eXBlLCBod19hZGRyc1tpZHhdKTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAorCQkJCWFkYXAsIG1vZCwgdHlwZSwgMCwgSTJDX0FERFJTKGh3X2FkZHJzW2lkeF0pKTsKIAl9IGVsc2UgewogCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJml0di0+djRsMl9kZXYsCi0JCQkJYWRhcCwgbW9kLCB0eXBlLCBod19hZGRyc1tpZHhdKTsKKwkJCQlhZGFwLCBtb2QsIHR5cGUsIGh3X2FkZHJzW2lkeF0sIE5VTEwpOwogCX0KIAlpZiAoc2QpCiAJCXNkLT5ncnBfaWQgPSAxIDw8IGlkeDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCAxNWRhMDE3Li42NzY5OWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC0yNjEsOCArMjYxLDggQEAKIAl2aWRlb19zZXRfZHJ2ZGF0YShzLT52ZGV2LCBzKTsKIAogCS8qIFJlZ2lzdGVyIGRldmljZS4gRmlyc3QgdHJ5IHRoZSBkZXNpcmVkIG1pbm9yLCB0aGVuIGFueSBmcmVlIG9uZS4gKi8KLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnZkZXYsIHZmbF90eXBlLCBudW0pKSB7Ci0JCUlWVFZfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlX25vX3dhcm4ocy0+dmRldiwgdmZsX3R5cGUsIG51bSkpIHsKKwkJSVZUVl9FUlIoIkNvdWxkbid0IHJlZ2lzdGVyIHY0bDIgZGV2aWNlIGZvciAlcyAoZGV2aWNlIG5vZGUgbnVtYmVyICVkKVxuIiwKIAkJCQlzLT5uYW1lLCBudW0pOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52ZGV2KTsKIAkJcy0+dmRldiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCmluZGV4IDRkNzk0YjQuLjQ1Mzg4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCkBAIC0xMywxMyArMTMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAvKiBtdDltMDAxIGkyYyBhZGRyZXNzIDB4NWQKLSAqIFRoZSBwbGF0Zm9ybSBoYXMgdG8gZGVmaW5lIGkyY19ib2FyZF9pbmZvCi0gKiBhbmQgY2FsbCBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygpICovCisgKiBUaGUgcGxhdGZvcm0gaGFzIHRvIGRlZmluZSBjdHJ1Y3QgaTJjX2JvYXJkX2luZm8gb2JqZWN0cyBhbmQgbGluayB0byB0aGVtCisgKiBmcm9tIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKi8KIAogLyogbXQ5bTAwMSBzZWxlY3RlZCByZWdpc3RlciBhZGRyZXNzZXMgKi8KICNkZWZpbmUgTVQ5TTAwMV9DSElQX1ZFUlNJT04JCTB4MDAKQEAgLTM5LDYgKzM5LDEzIEBACiAjZGVmaW5lIE1UOU0wMDFfR0xPQkFMX0dBSU4JCTB4MzUKICNkZWZpbmUgTVQ5TTAwMV9DSElQX0VOQUJMRQkJMHhGMQogCisjZGVmaW5lIE1UOU0wMDFfTUFYX1dJRFRICQkxMjgwCisjZGVmaW5lIE1UOU0wMDFfTUFYX0hFSUdIVAkJMTAyNAorI2RlZmluZSBNVDlNMDAxX01JTl9XSURUSAkJNDgKKyNkZWZpbmUgTVQ5TTAwMV9NSU5fSEVJR0hUCQkzMgorI2RlZmluZSBNVDlNMDAxX0NPTFVNTl9TS0lQCQkyMAorI2RlZmluZSBNVDlNMDAxX1JPV19TS0lQCQkxMgorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgbXQ5bTAwMV9jb2xvdXJfZm9ybWF0c1tdID0gewogCS8qIE9yZGVyIGltcG9ydGFudDogZmlyc3QgbmF0aXZlbHkgc3VwcG9ydGVkLAogCSAqIHNlY29uZCBzdXBwb3J0ZWQgd2l0aCBhIEdQSU8gZXh0ZW5kZXIgKi8KQEAgLTY5LDEyICs3NiwyMCBAQAogfTsKIAogc3RydWN0IG10OW0wMDEgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2OworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsJLyogU2Vuc29yIHdpbmRvdyAqLworCV9fdTMyIGZvdXJjYzsKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTAwMSogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLworCXVuc2lnbmVkIGludCBnYWluOworCXVuc2lnbmVkIGludCBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXQ5bTAwMSAqdG9fbXQ5bTAwMShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBjb250YWluZXJfb2YoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIHN0cnVjdCBtdDltMDAxLCBzdWJkZXYpOworfQorCiBzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4IHJlZykKIHsKIAlzMzIgZGF0YSA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7CkBAIC0xMDksMzUgKzEyNCwyMCBAQAogCXJldHVybiByZWdfd3JpdGUoY2xpZW50LCByZWcsIHJldCAmIH5kYXRhKTsKIH0KIAotc3RhdGljIGludCBtdDltMDAxX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0wMDFfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCi0JZGV2X2RiZyhpY2QtPnZkZXYtPnBhcmVudCwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCi0JaWYgKGljbC0+cG93ZXIpIHsKLQkJcmV0ID0gaWNsLT5wb3dlcigmY2xpZW50LT5kZXYsIDEpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycihpY2QtPnZkZXYtPnBhcmVudCwKLQkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9uIHRoZSBjYW1lcmEuXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9CisJLyoKKwkgKiBXZSBkb24ndCBrbm93LCB3aGV0aGVyIHBsYXRmb3JtIHByb3ZpZGVzIHJlc2V0LCBpc3N1ZSBhIHNvZnQgcmVzZXQKKwkgKiB0b28uIFRoaXMgcmV0dXJucyBhbGwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorCSAqLworCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfUkVTRVQsIDEpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1JFU0VULCAwKTsKIAotCS8qIFRoZSBjYW1lcmEgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkgb24sIHdlIHJlc2V0IGl0IGFkZGl0aW9uYWxseSAqLwotCWlmIChpY2wtPnJlc2V0KQotCQlyZXQgPSBpY2wtPnJlc2V0KCZjbGllbnQtPmRldik7Ci0JZWxzZQotCQlyZXQgPSAtRU5PREVWOwotCi0JaWYgKHJldCA8IDApIHsKLQkJLyogRWl0aGVyIG5vIHBsYXRmb3JtIHJlc2V0LCBvciBwbGF0Zm9ybSByZXNldCBmYWlsZWQgKi8KLQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9SRVNFVCwgMSk7Ci0JCWlmICghcmV0KQotCQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9SRVNFVCwgMCk7Ci0JfQogCS8qIERpc2FibGUgY2hpcCwgc3luY2hyb25vdXMgb3B0aW9uIHVwZGF0ZSAqLwogCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX09VVFBVVF9DT05UUk9MLCAwKTsKQEAgLTE0NSwzNiArMTQ1LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMDAxX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0wMDFfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCi0JLyogRGlzYWJsZSB0aGUgY2hpcCAqLwotCXJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfT1VUUFVUX0NPTlRST0wsIDApOwotCi0JaWYgKGljbC0+cG93ZXIpCi0JCWljbC0+cG93ZXIoJmNsaWVudC0+ZGV2LCAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG10OW0wMDFfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCi0JLyogU3dpdGNoIHRvIG1hc3RlciAibm9ybWFsIiBtb2RlICovCi0JaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5bTAwMV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQotCS8qIFN0b3Agc2Vuc29yIHJlYWRvdXQgKi8KLQlpZiAocmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9PVVRQVVRfQ09OVFJPTCwgMCkgPCAwKQorCS8qIFN3aXRjaCB0byBtYXN0ZXIgIm5vcm1hbCIgbW9kZSBvciBzdG9wIHNlbnNvciByZWFkb3V0ICovCisJaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfT1VUUFVUX0NPTlRST0wsIGVuYWJsZSA/IDIgOiAwKSA8IDApCiAJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQpAQCAtMTgyLDggKzE1OCw3IEBACiBzdGF0aWMgaW50IG10OW0wMDFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJdW5zaWduZWQgbG9uZyB3aWR0aF9mbGFnID0gZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKIAogCS8qIE9ubHkgb25lIHdpZHRoIGJpdCBtYXkgYmUgc2V0ICovCkBAIC0yMDUsOCArMTgwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5bTAwMV9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCS8qIE1UOU0wMDEgaGFzIGFsbCBjYXB0dXJlX2Zvcm1hdCBwYXJhbWV0ZXJzIGZpeGVkICovCiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKQEAgLTIyMCwxMyArMTk0LDM1IEBACiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgbXQ5bTAwMV9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IGEtPmM7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQ7CiAJY29uc3QgdTE2IGhibGFuayA9IDksIHZibGFuayA9IDI1OworCXVuc2lnbmVkIGludCB0b3RhbF9oOworCisJaWYgKG10OW0wMDEtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4IHx8CisJICAgIG10OW0wMDEtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKKwkJLyoKKwkJICogQmF5ZXIgZm9ybWF0IC0gZXZlbiBudW1iZXIgb2Ygcm93cyBmb3Igc2ltcGxpY2l0eSwKKwkJICogYnV0IGxldCB0aGUgdXNlciBwbGF5IHdpdGggdGhlIHRvcCByb3cuCisJCSAqLworCQlyZWN0LmhlaWdodCA9IEFMSUdOKHJlY3QuaGVpZ2h0LCAyKTsKKworCS8qIERhdGFzaGVldCByZXF1aXJlbWVudDogc2VlIHJlZ2lzdGVyIGRlc2NyaXB0aW9uICovCisJcmVjdC53aWR0aCA9IEFMSUdOKHJlY3Qud2lkdGgsIDIpOworCXJlY3QubGVmdCA9IEFMSUdOKHJlY3QubGVmdCwgMik7CisKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QubGVmdCwgJnJlY3Qud2lkdGgsCisJCSAgICAgTVQ5TTAwMV9DT0xVTU5fU0tJUCwgTVQ5TTAwMV9NSU5fV0lEVEgsIE1UOU0wMDFfTUFYX1dJRFRIKTsKKworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC50b3AsICZyZWN0LmhlaWdodCwKKwkJICAgICBNVDlNMDAxX1JPV19TS0lQLCBNVDlNMDAxX01JTl9IRUlHSFQsIE1UOU0wMDFfTUFYX0hFSUdIVCk7CisKKwl0b3RhbF9oID0gcmVjdC5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyB2Ymxhbms7CiAKIAkvKiBCbGFua2luZyBhbmQgc3RhcnQgdmFsdWVzIC0gZGVmYXVsdC4uLiAqLwogCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfSE9SSVpPTlRBTF9CTEFOS0lORywgaGJsYW5rKTsKQEAgLTIzNiw2NiArMjMyLDEyNiBAQAogCS8qIFRoZSBjYWxsZXIgcHJvdmlkZXMgYSBzdXBwb3J0ZWQgZm9ybWF0LCBhcyB2ZXJpZmllZCBwZXIKIAkgKiBjYWxsIHRvIGljZC0+dHJ5X2ZtdCgpICovCiAJaWYgKCFyZXQpCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9DT0xVTU5fU1RBUlQsIHJlY3QubGVmdCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfUk9XX1NUQVJULCByZWN0LT50b3ApOworCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1JPV19TVEFSVCwgcmVjdC50b3ApOwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1dJTkRPV19XSURUSCwgcmVjdC0+d2lkdGggLSAxKTsKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9XSU5ET1dfV0lEVEgsIHJlY3Qud2lkdGggLSAxKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9XSU5ET1dfSEVJR0hULAotCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCAtIDEpOworCQkJCXJlY3QuaGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wIC0gMSk7CiAJaWYgKCFyZXQgJiYgbXQ5bTAwMS0+YXV0b2V4cG9zdXJlKSB7Ci0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfU0hVVFRFUl9XSURUSCwKLQkJCQlyZWN0LT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyB2YmxhbmspOworCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1NIVVRURVJfV0lEVEgsIHRvdGFsX2gpOwogCQlpZiAoIXJldCkgewogCQkJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCA9CiAJCQkJc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLAogCQkJCQkJICAgICAgVjRMMl9DSURfRVhQT1NVUkUpOwotCQkJaWNkLT5leHBvc3VyZSA9ICg1MjQgKyAocmVjdC0+aGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsKLQkJCQkJCXZibGFuayAtIDEpICoKLQkJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLworCQkJbXQ5bTAwMS0+ZXhwb3N1cmUgPSAoNTI0ICsgKHRvdGFsX2ggLSAxKSAqCisJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLwogCQkJCTEwNDggKyBxY3RybC0+bWluaW11bTsKIAkJfQogCX0KIAorCWlmICghcmV0KQorCQltdDltMDAxLT5yZWN0ID0gcmVjdDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTAwMV9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSB0b19tdDltMDAxKGNsaWVudCk7CisKKwlhLT5jCT0gbXQ5bTAwMS0+cmVjdDsKKwlhLT50eXBlCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTAwMV9jcm9wY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmEpCit7CisJYS0+Ym91bmRzLmxlZnQJCQk9IE1UOU0wMDFfQ09MVU1OX1NLSVA7CisJYS0+Ym91bmRzLnRvcAkJCT0gTVQ5TTAwMV9ST1dfU0tJUDsKKwlhLT5ib3VuZHMud2lkdGgJCQk9IE1UOU0wMDFfTUFYX1dJRFRIOworCWEtPmJvdW5kcy5oZWlnaHQJCT0gTVQ5TTAwMV9NQVhfSEVJR0hUOworCWEtPmRlZnJlY3QJCQk9IGEtPmJvdW5kczsKKwlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CisJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTAwMV9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCisJcGl4LT53aWR0aAkJPSBtdDltMDAxLT5yZWN0LndpZHRoOworCXBpeC0+aGVpZ2h0CQk9IG10OW0wMDEtPnJlY3QuaGVpZ2h0OworCXBpeC0+cGl4ZWxmb3JtYXQJPSBtdDltMDAxLT5mb3VyY2M7CisJcGl4LT5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkU7CisJcGl4LT5jb2xvcnNwYWNlCQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTAwMV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX2Nyb3AgYSA9IHsKKwkJLmMgPSB7CisJCQkubGVmdAk9IG10OW0wMDEtPnJlY3QubGVmdCwKKwkJCS50b3AJPSBtdDltMDAxLT5yZWN0LnRvcCwKKwkJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJCX0sCisJfTsKKwlpbnQgcmV0OworCisJLyogTm8gc3VwcG9ydCBmb3Igc2NhbGluZyBzbyBmYXIsIGp1c3QgY3JvcC4gVE9ETzogdXNlIHNraXBwaW5nICovCisJcmV0ID0gbXQ5bTAwMV9zX2Nyb3Aoc2QsICZhKTsKKwlpZiAoIXJldCkgeworCQlwaXgtPndpZHRoID0gbXQ5bTAwMS0+cmVjdC53aWR0aDsKKwkJcGl4LT5oZWlnaHQgPSBtdDltMDAxLT5yZWN0LmhlaWdodDsKKwkJbXQ5bTAwMS0+Zm91cmNjID0gcGl4LT5waXhlbGZvcm1hdDsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5bTAwMV90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7Ci0JCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCi0JCS50b3AJPSBpY2QtPnlfY3VycmVudCwKLQkJLndpZHRoCT0gZi0+Zm10LnBpeC53aWR0aCwKLQkJLmhlaWdodAk9IGYtPmZtdC5waXguaGVpZ2h0LAotCX07Ci0KLQkvKiBObyBzdXBwb3J0IGZvciBzY2FsaW5nIHNvIGZhciwganVzdCBjcm9wLiBUT0RPOiB1c2Ugc2tpcHBpbmcgKi8KLQlyZXR1cm4gbXQ5bTAwMV9zZXRfY3JvcChpY2QsICZyZWN0KTsKLX0KLQotc3RhdGljIGludCBtdDltMDAxX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAotCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcGl4LT53aWR0aCwgNDgsIDEyODAsIDEsCi0JCQkgICAgICAmcGl4LT5oZWlnaHQsIDMyICsgaWNkLT55X3NraXBfdG9wLAotCQkJICAgICAgMTAyNCArIGljZC0+eV9za2lwX3RvcCwgMCwgMCk7CisJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZwaXgtPndpZHRoLCBNVDlNMDAxX01JTl9XSURUSCwKKwkJTVQ5TTAwMV9NQVhfV0lEVEgsIDEsCisJCSZwaXgtPmhlaWdodCwgTVQ5TTAwMV9NSU5fSEVJR0hUICsgaWNkLT55X3NraXBfdG9wLAorCQlNVDlNMDAxX01BWF9IRUlHSFQgKyBpY2QtPnlfc2tpcF90b3AsIDAsIDApOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCB8fAorCSAgICBwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KQorCQlwaXgtPmhlaWdodCA9IEFMSUdOKHBpeC0+aGVpZ2h0IC0gMSwgMik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDltMDAxX2dldF9jaGlwX2lkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKK3N0YXRpYyBpbnQgbXQ5bTAwMV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7Ci0Jc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSB0b19tdDltMDAxKGNsaWVudCk7CiAKIAlpZiAoaWQtPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpZC0+bWF0Y2guYWRkciAhPSBtdDltMDAxLT5jbGllbnQtPmFkZHIpCisJaWYgKGlkLT5tYXRjaC5hZGRyICE9IGNsaWVudC0+YWRkcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZC0+aWRlbnQJPSBtdDltMDAxLT5tb2RlbDsKQEAgLTMwNSwxMCArMzYxLDEwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgaW50IG10OW0wMDFfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBtdDltMDAxX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCiAJaWYgKHJlZy0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyNSwxMCArMzgxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IG10OW0wMDFfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAKIAlpZiAocmVnLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzgxLDM5ICs0MzcsMTcgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IG10OW0wMDFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIHZvaWQgbXQ5bTAwMV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIGludCBtdDltMDAxX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwotc3RhdGljIGludCBtdDltMDAxX3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwotCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIG10OW0wMDFfb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQkJPSBtdDltMDAxX3ZpZGVvX3Byb2JlLAotCS5yZW1vdmUJCQk9IG10OW0wMDFfdmlkZW9fcmVtb3ZlLAotCS5pbml0CQkJPSBtdDltMDAxX2luaXQsCi0JLnJlbGVhc2UJCT0gbXQ5bTAwMV9yZWxlYXNlLAotCS5zdGFydF9jYXB0dXJlCQk9IG10OW0wMDFfc3RhcnRfY2FwdHVyZSwKLQkuc3RvcF9jYXB0dXJlCQk9IG10OW0wMDFfc3RvcF9jYXB0dXJlLAotCS5zZXRfY3JvcAkJPSBtdDltMDAxX3NldF9jcm9wLAotCS5zZXRfZm10CQk9IG10OW0wMDFfc2V0X2ZtdCwKLQkudHJ5X2ZtdAkJPSBtdDltMDAxX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5bTAwMV9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBtdDltMDAxX3F1ZXJ5X2J1c19wYXJhbSwKIAkuY29udHJvbHMJCT0gbXQ5bTAwMV9jb250cm9scywKIAkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUobXQ5bTAwMV9jb250cm9scyksCi0JLmdldF9jb250cm9sCQk9IG10OW0wMDFfZ2V0X2NvbnRyb2wsCi0JLnNldF9jb250cm9sCQk9IG10OW0wMDFfc2V0X2NvbnRyb2wsCi0JLmdldF9jaGlwX2lkCQk9IG10OW0wMDFfZ2V0X2NoaXBfaWQsCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS5nZXRfcmVnaXN0ZXIJCT0gbXQ5bTAwMV9nZXRfcmVnaXN0ZXIsCi0JLnNldF9yZWdpc3RlcgkJPSBtdDltMDAxX3NldF9yZWdpc3RlciwKLSNlbmRpZgogfTsKIAotc3RhdGljIGludCBtdDltMDAxX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBtdDltMDAxX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSB0b19tdDltMDAxKGNsaWVudCk7CiAJaW50IGRhdGE7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CkBAIC00MjYsMTQgKzQ2MCwyMSBAQAogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKIAkJY3RybC0+dmFsdWUgPSBtdDltMDAxLT5hdXRvZXhwb3N1cmU7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJY3RybC0+dmFsdWUgPSBtdDltMDAxLT5nYWluOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQljdHJsLT52YWx1ZSA9IG10OW0wMDEtPmV4cG9zdXJlOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgbXQ5bTAwMV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOwogCWludCBkYXRhOwogCkBAIC00NjAsNyArNTAxLDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgcmFuZ2UgPSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIHFjdHJsLT5taW5pbXVtOwogCQkJZGF0YSA9ICgoY3RybC0+dmFsdWUgLSBxY3RybC0+bWluaW11bSkgKiA4ICsgcmFuZ2UgLyAyKSAvIHJhbmdlOwogCi0JCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiAlZFxuIiwgZGF0YSk7CisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldHRpbmcgZ2FpbiAlZFxuIiwgZGF0YSk7CiAJCQlkYXRhID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9HTE9CQUxfR0FJTiwgZGF0YSk7CiAJCQlpZiAoZGF0YSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CkBAIC00NzgsNyArNTE5LDcgQEAKIAkJCWVsc2UKIAkJCQlkYXRhID0gKChnYWluIC0gNjQpICogNyArIDI4KSAvIDU2ICsgOTY7CiAKLQkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBnYWluIGZyb20gJWQgdG8gJWRcbiIsCisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldHRpbmcgZ2FpbiBmcm9tICVkIHRvICVkXG4iLAogCQkJCSByZWdfcmVhZChjbGllbnQsIE1UOU0wMDFfR0xPQkFMX0dBSU4pLCBkYXRhKTsKIAkJCWRhdGEgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX0dMT0JBTF9HQUlOLCBkYXRhKTsKIAkJCWlmIChkYXRhIDwgMCkKQEAgLTQ4Niw3ICs1MjcsNyBAQAogCQl9CiAKIAkJLyogU3VjY2VzcyAqLwotCQlpY2QtPmdhaW4gPSBjdHJsLT52YWx1ZTsKKwkJbXQ5bTAwMS0+Z2FpbiA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgogCQkvKiBtdDltMDAxIGhhcyBtYXhpbXVtID09IGRlZmF1bHQgKi8KQEAgLTQ5NywyMyArNTM4LDI3IEBACiAJCQl1bnNpZ25lZCBsb25nIHNodXR0ZXIgPSAoKGN0cmwtPnZhbHVlIC0gcWN0cmwtPm1pbmltdW0pICogMTA0OCArCiAJCQkJCQkgcmFuZ2UgLyAyKSAvIHJhbmdlICsgMTsKIAotCQkJZGV2X2RiZygmaWNkLT5kZXYsICJTZXR0aW5nIHNodXR0ZXIgd2lkdGggZnJvbSAlZCB0byAlbHVcbiIsCi0JCQkJIHJlZ19yZWFkKGNsaWVudCwgTVQ5TTAwMV9TSFVUVEVSX1dJRFRIKSwgc2h1dHRlcik7CisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwKKwkJCQkiU2V0dGluZyBzaHV0dGVyIHdpZHRoIGZyb20gJWQgdG8gJWx1XG4iLAorCQkJCXJlZ19yZWFkKGNsaWVudCwgTVQ5TTAwMV9TSFVUVEVSX1dJRFRIKSwKKwkJCQlzaHV0dGVyKTsKIAkJCWlmIChyZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1NIVVRURVJfV0lEVEgsIHNodXR0ZXIpIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCWljZC0+ZXhwb3N1cmUgPSBjdHJsLT52YWx1ZTsKKwkJCW10OW0wMDEtPmV4cG9zdXJlID0gY3RybC0+dmFsdWU7CiAJCQltdDltMDAxLT5hdXRvZXhwb3N1cmUgPSAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKIAkJaWYgKGN0cmwtPnZhbHVlKSB7CiAJCQljb25zdCB1MTYgdmJsYW5rID0gMjU7Ci0JCQlpZiAocmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9TSFVUVEVSX1dJRFRILCBpY2QtPmhlaWdodCArCi0JCQkJICAgICAgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rKSA8IDApCisJCQl1bnNpZ25lZCBpbnQgdG90YWxfaCA9IG10OW0wMDEtPnJlY3QuaGVpZ2h0ICsKKwkJCQlpY2QtPnlfc2tpcF90b3AgKyB2Ymxhbms7CisJCQlpZiAocmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9TSFVUVEVSX1dJRFRILAorCQkJCSAgICAgIHRvdGFsX2gpIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLCBWNEwyX0NJRF9FWFBPU1VSRSk7Ci0JCQlpY2QtPmV4cG9zdXJlID0gKDUyNCArIChpY2QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIHZibGFuayAtIDEpICoKLQkJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLworCQkJbXQ5bTAwMS0+ZXhwb3N1cmUgPSAoNTI0ICsgKHRvdGFsX2ggLSAxKSAqCisJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLwogCQkJCTEwNDggKyBxY3RybC0+bWluaW11bTsKIAkJCW10OW0wMDEtPmF1dG9leHBvc3VyZSA9IDE7CiAJCX0gZWxzZQpAQCAtNTI1LDE0ICs1NzAsMTQgQEAKIAogLyogSW50ZXJmYWNlIGFjdGl2ZSwgY2FuIHVzZSBpMmMuIElmIGl0IGZhaWxzLCBpdCBjYW4gaW5kZWVkIG1lYW4sIHRoYXQKICAqIHRoaXMgd2Fzbid0IG91ciBjYXB0dXJlIGludGVyZmFjZSwgc28sIHdlIHdhaXQgZm9yIHRoZSByaWdodCBvbmUgKi8KLXN0YXRpYyBpbnQgbXQ5bTAwMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5bTAwMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXMzMiBkYXRhOwotCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCiAJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KIAkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiAqLwpAQCAtNTQyLDcgKzU4Nyw3IEBACiAKIAkvKiBFbmFibGUgdGhlIGNoaXAgKi8KIAlkYXRhID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9DSElQX0VOQUJMRSwgMSk7Ci0JZGV2X2RiZygmaWNkLT5kZXYsICJ3cml0ZTogJWRcbiIsIGRhdGEpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAid3JpdGU6ICVkXG4iLCBkYXRhKTsKIAogCS8qIFJlYWQgb3V0IHRoZSBjaGlwIHZlcnNpb24gcmVnaXN0ZXIgKi8KIAlkYXRhID0gcmVnX3JlYWQoY2xpZW50LCBNVDlNMDAxX0NISVBfVkVSU0lPTik7CkBAIC01NTksMTAgKzYwNCw5IEBACiAJCWljZC0+Zm9ybWF0cyA9IG10OW0wMDFfbW9ub2Nocm9tZV9mb3JtYXRzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXQgPSAtRU5PREVWOwotCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkiTm8gTVQ5TTAwMSBjaGlwIGRldGVjdGVkLCByZWdpc3RlciByZWFkICV4XG4iLCBkYXRhKTsKLQkJZ290byBlaTJjOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpY2QtPm51bV9mb3JtYXRzID0gMDsKQEAgLTU4NSw0MiArNjI5LDcyIEBACiAJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCiAJCWljZC0+bnVtX2Zvcm1hdHMrKzsKIAotCWRldl9pbmZvKCZpY2QtPmRldiwgIkRldGVjdGVkIGEgTVQ5TTAwMSBjaGlwIElEICV4ICglcylcbiIsIGRhdGEsCisJbXQ5bTAwMS0+Zm91cmNjID0gaWNkLT5mb3JtYXRzLT5mb3VyY2M7CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBhIE1UOU0wMDEgY2hpcCBJRCAleCAoJXMpXG4iLCBkYXRhLAogCQkgZGF0YSA9PSAweDg0MzEgPyAiQzEyU1RNIiA6ICJDMTJTVCIpOwogCi0JLyogTm93IHRoYXQgd2Uga25vdyB0aGUgbW9kZWwsIHdlIGNhbiBzdGFydCB2aWRlbyAqLwotCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVpc2lzOworCXJldCA9IG10OW0wMDFfaW5pdChjbGllbnQpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXNlIHRoZSBjYW1lcmFcbiIpOwogCi0JcmV0dXJuIDA7CisJLyogbXQ5bTAwMV9pbml0KCkgaGFzIHJlc2V0IHRoZSBjaGlwLCByZXR1cm5pbmcgcmVnaXN0ZXJzIHRvIGRlZmF1bHRzICovCisJbXQ5bTAwMS0+Z2FpbiA9IDY0OworCW10OW0wMDEtPmV4cG9zdXJlID0gMjU1OwogCi1laXNpczoKLWVpMmM6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgbXQ5bTAwMV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyAleCByZW1vdmVkOiAlcCwgJXBcbiIsIG10OW0wMDEtPmNsaWVudC0+YWRkciwKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlZpZGVvIHJlbW92ZWQ6ICVwLCAlcFxuIiwKIAkJaWNkLT5kZXYucGFyZW50LCBpY2QtPnZkZXYpOwotCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOwogCWlmIChpY2wtPmZyZWVfYnVzKQogCQlpY2wtPmZyZWVfYnVzKGljbCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbXQ5bTAwMV9zdWJkZXZfY29yZV9vcHMgPSB7CisJLmdfY3RybAkJPSBtdDltMDAxX2dfY3RybCwKKwkuc19jdHJsCQk9IG10OW0wMDFfc19jdHJsLAorCS5nX2NoaXBfaWRlbnQJPSBtdDltMDAxX2dfY2hpcF9pZGVudCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIJPSBtdDltMDAxX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIJPSBtdDltMDAxX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG10OW0wMDFfc3ViZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JPSBtdDltMDAxX3Nfc3RyZWFtLAorCS5zX2ZtdAkJPSBtdDltMDAxX3NfZm10LAorCS5nX2ZtdAkJPSBtdDltMDAxX2dfZm10LAorCS50cnlfZm10CT0gbXQ5bTAwMV90cnlfZm10LAorCS5zX2Nyb3AJCT0gbXQ5bTAwMV9zX2Nyb3AsCisJLmdfY3JvcAkJPSBtdDltMDAxX2dfY3JvcCwKKwkuY3JvcGNhcAk9IG10OW0wMDFfY3JvcGNhcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG10OW0wMDFfc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZtdDltMDAxX3N1YmRldl9jb3JlX29wcywKKwkudmlkZW8JPSAmbXQ5bTAwMV9zdWJkZXZfdmlkZW9fb3BzLAorfTsKKwogc3RhdGljIGludCBtdDltMDAxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKIHsKIAlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbDsKIAlpbnQgcmV0OwogCisJaWYgKCFpY2QpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlNMDAxOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAlpZiAoIWljbCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOU0wMDEgZHJpdmVyIG5lZWRzIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYzNiw0MyArNzEwLDQwIEBACiAJaWYgKCFtdDltMDAxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW10OW0wMDEtPmNsaWVudCA9IGNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtdDltMDAxKTsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmbXQ5bTAwMS0+c3ViZGV2LCBjbGllbnQsICZtdDltMDAxX3N1YmRldl9vcHMpOwogCiAJLyogU2Vjb25kIHN0YWdlIHByb2JlIC0gd2hlbiBhIGNhcHR1cmUgYWRhcHRlciBpcyB0aGVyZSAqLwotCWljZCA9ICZtdDltMDAxLT5pY2Q7Ci0JaWNkLT5vcHMJPSAmbXQ5bTAwMV9vcHM7Ci0JaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OwotCWljZC0+eF9taW4JPSAyMDsKLQlpY2QtPnlfbWluCT0gMTI7Ci0JaWNkLT54X2N1cnJlbnQJPSAyMDsKLQlpY2QtPnlfY3VycmVudAk9IDEyOwotCWljZC0+d2lkdGhfbWluCT0gNDg7Ci0JaWNkLT53aWR0aF9tYXgJPSAxMjgwOwotCWljZC0+aGVpZ2h0X21pbgk9IDMyOwotCWljZC0+aGVpZ2h0X21heAk9IDEwMjQ7Ci0JaWNkLT55X3NraXBfdG9wCT0gMTsKLQlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7CisJaWNkLT5vcHMJCT0gJm10OW0wMDFfb3BzOworCWljZC0+eV9za2lwX3RvcAkJPSAwOworCisJbXQ5bTAwMS0+cmVjdC5sZWZ0CT0gTVQ5TTAwMV9DT0xVTU5fU0tJUDsKKwltdDltMDAxLT5yZWN0LnRvcAk9IE1UOU0wMDFfUk9XX1NLSVA7CisJbXQ5bTAwMS0+cmVjdC53aWR0aAk9IE1UOU0wMDFfTUFYX1dJRFRIOworCW10OW0wMDEtPnJlY3QuaGVpZ2h0CT0gTVQ5TTAwMV9NQVhfSEVJR0hUOworCiAJLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKIAkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KIAltdDltMDAxLT5hdXRvZXhwb3N1cmUgPSAxOwogCi0JcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVpc2RyOworCXJldCA9IG10OW0wMDFfdmlkZW9fcHJvYmUoaWNkLCBjbGllbnQpOworCWlmIChyZXQpIHsKKwkJaWNkLT5vcHMgPSBOVUxMOworCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwkJa2ZyZWUobXQ5bTAwMSk7CisJfQogCi0JcmV0dXJuIDA7Ci0KLWVpc2RyOgotCWtmcmVlKG10OW0wMDEpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5bTAwMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJm10OW0wMDEtPmljZCk7CisJaWNkLT5vcHMgPSBOVUxMOworCW10OW0wMDFfdmlkZW9fcmVtb3ZlKGljZCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJY2xpZW50LT5kcml2ZXIgPSBOVUxMOwogCWtmcmVlKG10OW0wMDEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jCmluZGV4IGZjNWUyZGUuLjkwZGE2OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jCkBAIC0xNDgsMTIgKzE0OCwxMiBAQAogfTsKIAogc3RydWN0IG10OW0xMTEgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2OwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMTF4KiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCiAJZW51bSBtdDltMTExX2NvbnRleHQgY29udGV4dDsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CiAJdTMyIHBpeGZtdDsKKwl1bnNpZ25lZCBpbnQgZ2FpbjsKIAl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKIAl1bnNpZ25lZCBpbnQgcG93ZXJlZDoxOwpAQCAtMTY2LDYgKzE2NiwxMSBAQAogCXVuc2lnbmVkIGludCBhdXRvd2hpdGViYWxhbmNlOjE7CiB9OwogCitzdGF0aWMgc3RydWN0IG10OW0xMTEgKnRvX210OW0xMTEoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBzdHJ1Y3QgbXQ5bTExMSwgc3ViZGV2KTsKK30KKwogc3RhdGljIGludCByZWdfcGFnZV9tYXBfc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHUxNiByZWcpCiB7CiAJaW50IHJldDsKQEAgLTE5MCw3ICsxOTUsNyBAQAogCiAJcmV0ID0gcmVnX3BhZ2VfbWFwX3NldChjbGllbnQsIHJlZyk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAocmVnICYgMHhmZikpKTsKKwkJcmV0ID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYpKTsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAicmVhZCAgcmVnLiUwM3ggLT4gJTA0eFxuIiwgcmVnLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC0yMDMsNyArMjA4LDcgQEAKIAogCXJldCA9IHJlZ19wYWdlX21hcF9zZXQoY2xpZW50LCByZWcpOwogCWlmICghcmV0KQotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgKHJlZyAmIDB4ZmYpLAorCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcmVnICYgMHhmZiwKIAkJCQkJCXN3YWIxNihkYXRhKSk7CiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICJ3cml0ZSByZWcuJTAzeCA9ICUwNHggLT4gJWRcbiIsIHJlZywgZGF0YSwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMjI5LDEwICsyMzQsOSBAQAogCXJldHVybiBtdDltMTExX3JlZ193cml0ZShjbGllbnQsIHJlZywgcmV0ICYgfmRhdGEpOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRleHQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRleHQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICAgICBlbnVtIG10OW0xMTFfY29udGV4dCBjdHh0KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CiAJaW50IHZhbEIgPSBNVDlNMTExX0NUWFRfQ1RSTF9SRVNUQVJUIHwgTVQ5TTExMV9DVFhUX0NUUkxfREVGRUNUQ09SX0IKIAkJfCBNVDlNMTExX0NUWFRfQ1RSTF9SRVNJWkVfQiB8IE1UOU0xMTFfQ1RYVF9DVFJMX0NUUkwyX0IKIAkJfCBNVDlNMTExX0NUWFRfQ1RSTF9HQU1NQV9CIHwgTVQ5TTExMV9DVFhUX0NUUkxfUkVBRF9NT0RFX0IKQEAgLTI0NiwxNyArMjUwLDE2IEBACiAJCXJldHVybiByZWdfd3JpdGUoQ09OVEVYVF9DT05UUk9MLCB2YWxBKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCitzdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcmVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHJldCwgaXNfcmF3X2Zvcm1hdDsKIAlpbnQgd2lkdGggPSByZWN0LT53aWR0aDsKIAlpbnQgaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OwogCi0JaWYgKChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKLQkgICAgfHwgKG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikpCisJaWYgKG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4IHx8CisJICAgIG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKIAkJaXNfcmF3X2Zvcm1hdCA9IDE7CiAJZWxzZQogCQlpc19yYXdfZm9ybWF0ID0gMDsKQEAgLTI5Miw5ICsyOTUsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXR1cF9waXhmbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHUxNiBvdXRmbXQpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcGl4Zm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBvdXRmbXQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVnX3dyaXRlKE9VVFBVVF9GT1JNQVRfQ1RSTDJfQSwgb3V0Zm10KTsKQEAgLTMwMywxOSArMzA1LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldGZtdF9iYXllcjgoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X2JheWVyOChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIE1UOU0xMTFfT1VURk1UX1BST0NFU1NFRF9CQVlFUik7CisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgTVQ5TTExMV9PVVRGTVRfUFJPQ0VTU0VEX0JBWUVSKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldGZtdF9iYXllcjEwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3NldGZtdF9iYXllcjEwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGljZCwgTVQ5TTExMV9PVVRGTVRfQllQQVNTX0lGUCk7CisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgTVQ5TTExMV9PVVRGTVRfQllQQVNTX0lGUCk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfcmdiNTY1KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3NldGZtdF9yZ2I1NjUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCB2YWwgPSAwOwogCiAJaWYgKG10OW0xMTEtPnN3YXBfcmdiX3JlZF9ibHVlKQpAQCAtMzI0LDEyICszMjYsMTIgQEAKIAkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfUkdCX0VWRU47CiAJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1JHQiB8IE1UOU0xMTFfT1VURk1UX1JHQjU2NTsKIAotCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIHZhbCk7CisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgdmFsKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldGZtdF9yZ2I1NTUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X3JnYjU1NShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHZhbCA9IDA7CiAKIAlpZiAobXQ5bTExMS0+c3dhcF9yZ2JfcmVkX2JsdWUpCkBAIC0zMzgsMTIgKzM0MCwxMiBAQAogCQl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTjsKIAl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfUkdCIHwgTVQ5TTExMV9PVVRGTVRfUkdCNTU1OwogCi0JcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGljZCwgdmFsKTsKKwlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoY2xpZW50LCB2YWwpOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X3l1dihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfeXV2KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgdmFsID0gMDsKIAogCWlmIChtdDltMTExLT5zd2FwX3l1dl9jYl9jcikKQEAgLTM1MSw1MiArMzUzLDIyIEBACiAJaWYgKG10OW0xMTEtPnN3YXBfeXV2X3lfY2hyb21hcykKIAkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ19ZOwogCi0JcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGljZCwgdmFsKTsKKwlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoY2xpZW50LCB2YWwpOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfZW5hYmxlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX2VuYWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCByZXQ7CiAKLQlpZiAoaWNsLT5wb3dlcikgewotCQlyZXQgPSBpY2wtPnBvd2VyKCZjbGllbnQtPmRldiwgMSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGljZC0+dmRldi0+cGFyZW50LAotCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb24gdGhlIGNhbWVyYS5cbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQogCXJldCA9IHJlZ19zZXQoUkVTRVQsIE1UOU0xMTFfUkVTRVRfQ0hJUF9FTkFCTEUpOwogCWlmICghcmV0KQogCQltdDltMTExLT5wb3dlcmVkID0gMTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfZGlzYWJsZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfY2xlYXIoUkVTRVQsIE1UOU0xMTFfUkVTRVRfQ0hJUF9FTkFCTEUpOwotCWlmICghcmV0KQotCQltdDltMTExLT5wb3dlcmVkID0gMDsKLQotCWlmIChpY2wtPnBvd2VyKQotCQlpY2wtPnBvd2VyKCZjbGllbnQtPmRldiwgMCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG10OW0xMTFfcmVzZXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQ7CiAKIAlyZXQgPSByZWdfc2V0KFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUpOwpAQCAtNDA2LDI2ICszNzgsMTIgQEAKIAkJcmV0ID0gcmVnX2NsZWFyKFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUKIAkJCQl8IE1UOU0xMTFfUkVTRVRfUkVTRVRfU09DKTsKIAotCWlmIChpY2wtPnJlc2V0KQotCQlpY2wtPnJlc2V0KCZjbGllbnQtPmRldik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtdDltMTExX3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5bTExMV9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMTExLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKIAkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX0RBVEFXSURUSF84OwpAQCAtNDM4LDYyICszOTYsMTI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBtdDltMTExX21ha2VfcmVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisKKwlpZiAobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKKwkgICAgbXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KSB7CisJCS8qIEJheWVyIGZvcm1hdCAtIGV2ZW4gc2l6ZSBsZW5ndGhzICovCisJCXJlY3QtPndpZHRoCT0gQUxJR04ocmVjdC0+d2lkdGgsIDIpOworCQlyZWN0LT5oZWlnaHQJPSBBTElHTihyZWN0LT5oZWlnaHQsIDIpOworCQkvKiBMZXQgdGhlIHVzZXIgcGxheSB3aXRoIHRoZSBzdGFydGluZyBwaXhlbCAqLworCX0KKworCS8qIEZJWE1FOiB0aGUgZGF0YXNoZWV0IGRvZXNuJ3Qgc3BlY2lmeSBtaW5pbXVtIHNpemVzICovCisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LT5sZWZ0LCAmcmVjdC0+d2lkdGgsCisJCSAgICAgTVQ5TTExMV9NSU5fREFSS19DT0xTLCAyLCBNVDlNMTExX01BWF9XSURUSCk7CisKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QtPnRvcCwgJnJlY3QtPmhlaWdodCwKKwkJICAgICBNVDlNMTExX01JTl9EQVJLX1JPV1MsIDIsIE1UOU0xMTFfTUFYX0hFSUdIVCk7CisKKwlyZXR1cm4gbXQ5bTExMV9zZXR1cF9yZWN0KGNsaWVudCwgcmVjdCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSBhLT5jOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgcmV0OwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCi0JCV9fZnVuY19fLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPndpZHRoLAotCQlyZWN0LT5oZWlnaHQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXMgbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLAorCQlfX2Z1bmNfXywgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwogCi0JcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCwgcmVjdCk7CisJcmV0ID0gbXQ5bTExMV9tYWtlX3JlY3QoY2xpZW50LCAmcmVjdCk7CiAJaWYgKCFyZXQpCi0JCW10OW0xMTEtPnJlY3QgPSAqcmVjdDsKKwkJbXQ5bTExMS0+cmVjdCA9IHJlY3Q7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9waXhmbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHUzMiBwaXhmbXQpCitzdGF0aWMgaW50IG10OW0xMTFfZ19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisKKwlhLT5jCT0gbXQ5bTExMS0+cmVjdDsKKwlhLT50eXBlCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9jcm9wY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmEpCit7CisJYS0+Ym91bmRzLmxlZnQJCQk9IE1UOU0xMTFfTUlOX0RBUktfQ09MUzsKKwlhLT5ib3VuZHMudG9wCQkJPSBNVDlNMTExX01JTl9EQVJLX1JPV1M7CisJYS0+Ym91bmRzLndpZHRoCQkJPSBNVDlNMTExX01BWF9XSURUSDsKKwlhLT5ib3VuZHMuaGVpZ2h0CQk9IE1UOU0xMTFfTUFYX0hFSUdIVDsKKwlhLT5kZWZyZWN0CQkJPSBhLT5ib3VuZHM7CisJYS0+dHlwZQkJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlhLT5waXhlbGFzcGVjdC5udW1lcmF0b3IJPSAxOworCWEtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yCT0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCXBpeC0+d2lkdGgJCT0gbXQ5bTExMS0+cmVjdC53aWR0aDsKKwlwaXgtPmhlaWdodAkJPSBtdDltMTExLT5yZWN0LmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0CT0gbXQ5bTExMS0+cGl4Zm10OworCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FOworCXBpeC0+Y29sb3JzcGFjZQkJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X3BpeGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgcGl4Zm10KQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKHBpeGZtdCkgewogCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfYmF5ZXI4KGljZCk7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X2JheWVyOChjbGllbnQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjE2OgotCQlyZXQgPSBtdDltMTExX3NldGZtdF9iYXllcjEwKGljZCk7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X2JheWVyMTAoY2xpZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgotCQlyZXQgPSBtdDltMTExX3NldGZtdF9yZ2I1NTUoaWNkKTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfcmdiNTU1KGNsaWVudCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfcmdiNTY1KGljZCk7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3JnYjU2NShjbGllbnQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgogCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAwOwogCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDA7Ci0JCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihpY2QpOworCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKIAkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMDsKIAkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAxOwotCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoaWNkKTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGNsaWVudCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CiAJCW10OW0xMTEtPnN3YXBfeXV2X3lfY2hyb21hcyA9IDE7CiAJCW10OW0xMTEtPnN3YXBfeXV2X2NiX2NyID0gMDsKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGljZCk7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihjbGllbnQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVllVOgogCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAxOwogCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDE7Ci0JCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihpY2QpOworCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2VycigmaWNkLT5kZXYsICJQaXhlbCBmb3JtYXQgbm90IGhhbmRsZWQgOiAleFxuIiwgcGl4Zm10KTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQaXhlbCBmb3JtYXQgbm90IGhhbmRsZWQgOiAleFxuIiwKKwkJCXBpeGZtdCk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCkBAIC01MDMsMTAgKzUyNSwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMTExX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CiAJCS5sZWZ0CT0gbXQ5bTExMS0+cmVjdC5sZWZ0LApAQCAtNTE2LDQwICs1MzgsNTYgQEAKIAl9OwogCWludCByZXQ7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZtdD0leCBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCi0JCV9fZnVuY19fLCBwaXgtPnBpeGVsZm9ybWF0LCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LndpZHRoLAotCQlyZWN0LmhlaWdodCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsCisJCSIlcyBmbXQ9JXggbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLCBfX2Z1bmNfXywKKwkJcGl4LT5waXhlbGZvcm1hdCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwogCi0JcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCwgJnJlY3QpOworCXJldCA9IG10OW0xMTFfbWFrZV9yZWN0KGNsaWVudCwgJnJlY3QpOwogCWlmICghcmV0KQotCQlyZXQgPSBtdDltMTExX3NldF9waXhmbXQoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRfcGl4Zm10KGNsaWVudCwgcGl4LT5waXhlbGZvcm1hdCk7CiAJaWYgKCFyZXQpCiAJCW10OW0xMTEtPnJlY3QgPSByZWN0OwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMTExX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCWJvb2wgYmF5ZXIgPSBwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKKwkJcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKKworCS8qCisJICogV2l0aCBCYXllciBmb3JtYXQgZW5mb3JjZSBldmVuIHNpZGUgbGVuZ3RocywgYnV0IGxldCB0aGUgdXNlciBwbGF5CisJICogd2l0aCB0aGUgc3RhcnRpbmcgcGl4ZWwKKwkgKi8KIAogCWlmIChwaXgtPmhlaWdodCA+IE1UOU0xMTFfTUFYX0hFSUdIVCkKIAkJcGl4LT5oZWlnaHQgPSBNVDlNMTExX01BWF9IRUlHSFQ7CisJZWxzZSBpZiAocGl4LT5oZWlnaHQgPCAyKQorCQlwaXgtPmhlaWdodCA9IDI7CisJZWxzZSBpZiAoYmF5ZXIpCisJCXBpeC0+aGVpZ2h0ID0gQUxJR04ocGl4LT5oZWlnaHQsIDIpOworCiAJaWYgKHBpeC0+d2lkdGggPiBNVDlNMTExX01BWF9XSURUSCkKIAkJcGl4LT53aWR0aCA9IE1UOU0xMTFfTUFYX1dJRFRIOworCWVsc2UgaWYgKHBpeC0+d2lkdGggPCAyKQorCQlwaXgtPndpZHRoID0gMjsKKwllbHNlIGlmIChiYXllcikKKwkJcGl4LT53aWR0aCA9IEFMSUdOKHBpeC0+d2lkdGgsIDIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCitzdGF0aWMgaW50IG10OW0xMTFfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCiAJaWYgKGlkLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoaWQtPm1hdGNoLmFkZHIgIT0gbXQ5bTExMS0+Y2xpZW50LT5hZGRyKQorCWlmIChpZC0+bWF0Y2guYWRkciAhPSBjbGllbnQtPmFkZHIpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWQtPmlkZW50CT0gbXQ5bTExMS0+bW9kZWw7CkBAIC01NTksMTEgKzU5NywxMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotc3RhdGljIGludCBtdDltMTExX2dldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3N0YXRpYyBpbnQgbXQ5bTExMV9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJaW50IHZhbDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwogCiAJaWYgKHJlZy0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweDJmZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01ODAsMTAgKzYxOCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBtdDltMTExX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCiAJaWYgKHJlZy0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweDJmZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MzUsNDUgKzY3MywyMSBAQAogCX0KIH07CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBtdDltMTExX3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IG10OW0xMTFfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosCi0JCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwogc3RhdGljIGludCBtdDltMTExX3Jlc3VtZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7Ci1zdGF0aWMgaW50IG10OW0xMTFfaW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7Ci1zdGF0aWMgaW50IG10OW0xMTFfcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CitzdGF0aWMgaW50IG10OW0xMTFfc3VzcGVuZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIAogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBtdDltMTExX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJCT0gbXQ5bTExMV92aWRlb19wcm9iZSwKLQkucmVtb3ZlCQkJPSBtdDltMTExX3ZpZGVvX3JlbW92ZSwKLQkuaW5pdAkJCT0gbXQ5bTExMV9pbml0LAorCS5zdXNwZW5kCQk9IG10OW0xMTFfc3VzcGVuZCwKIAkucmVzdW1lCQkJPSBtdDltMTExX3Jlc3VtZSwKLQkucmVsZWFzZQkJPSBtdDltMTExX3JlbGVhc2UsCi0JLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5bTExMV9zdGFydF9jYXB0dXJlLAotCS5zdG9wX2NhcHR1cmUJCT0gbXQ5bTExMV9zdG9wX2NhcHR1cmUsCi0JLnNldF9jcm9wCQk9IG10OW0xMTFfc2V0X2Nyb3AsCi0JLnNldF9mbXQJCT0gbXQ5bTExMV9zZXRfZm10LAotCS50cnlfZm10CQk9IG10OW0xMTFfdHJ5X2ZtdCwKIAkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5bTExMV9xdWVyeV9idXNfcGFyYW0sCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5bTExMV9zZXRfYnVzX3BhcmFtLAogCS5jb250cm9scwkJPSBtdDltMTExX2NvbnRyb2xzLAogCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShtdDltMTExX2NvbnRyb2xzKSwKLQkuZ2V0X2NvbnRyb2wJCT0gbXQ5bTExMV9nZXRfY29udHJvbCwKLQkuc2V0X2NvbnRyb2wJCT0gbXQ5bTExMV9zZXRfY29udHJvbCwKLQkuZ2V0X2NoaXBfaWQJCT0gbXQ5bTExMV9nZXRfY2hpcF9pZCwKLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JLmdldF9yZWdpc3RlcgkJPSBtdDltMTExX2dldF9yZWdpc3RlciwKLQkuc2V0X3JlZ2lzdGVyCQk9IG10OW0xMTFfc2V0X3JlZ2lzdGVyLAotI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2ZsaXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBmbGlwLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZmxpcCwgaW50IG1hc2spCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCByZXQ7CiAKIAlpZiAobXQ5bTExMS0+Y29udGV4dCA9PSBISUdIUE9XRVIpIHsKQEAgLTY5MSw5ICs3MDUsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKIAlpbnQgZGF0YTsKIAogCWRhdGEgPSByZWdfcmVhZChHTE9CQUxfR0FJTik7CkBAIC03MDMsMTUgKzcxNiwxNSBAQAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgZ2FpbikKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGdhaW4pCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAl1MTYgdmFsOwogCiAJaWYgKGdhaW4gPiA2MyAqIDIgKiAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWljZC0+Z2FpbiA9IGdhaW47CisJbXQ5bTExMS0+Z2FpbiA9IGdhaW47CiAJaWYgKChnYWluID49IDY0ICogMikgJiYgKGdhaW4gPCA2MyAqIDIgKiAyKSkKIAkJdmFsID0gKDEgPDwgMTApIHwgKDEgPDwgOSkgfCAoZ2FpbiAvIDQpOwogCWVsc2UgaWYgKChnYWluID49IDY0KSAmJiAoZ2FpbiA8IDY0ICogMikpCkBAIC03MjIsMTAgKzczNSw5IEBACiAJcmV0dXJuIHJlZ193cml0ZShHTE9CQUxfR0FJTiwgdmFsKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9hdXRvZXhwb3N1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBvbikKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBvbikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHJldDsKIAogCWlmIChvbikKQEAgLTczOSwxMCArNzUxLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0X2F1dG93aGl0ZWJhbGFuY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBvbikKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfYXV0b3doaXRlYmFsYW5jZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgb24pCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWludCByZXQ7CiAKIAlpZiAob24pCkBAIC03NTYsMTEgKzc2NywxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBtdDltMTExX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IGRhdGE7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CkBAIC03ODUsNyArNzk1LDcgQEAKIAkJY3RybC0+dmFsdWUgPSAhIShkYXRhICYgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0dBSU46Ci0JCWRhdGEgPSBtdDltMTExX2dldF9nbG9iYWxfZ2FpbihpY2QpOworCQlkYXRhID0gbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oY2xpZW50KTsKIAkJaWYgKGRhdGEgPCAwKQogCQkJcmV0dXJuIGRhdGE7CiAJCWN0cmwtPnZhbHVlID0gZGF0YTsKQEAgLTgwMCwzNyArODEwLDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBtdDltMTExX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CiAJaW50IHJldDsKIAogCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKCZtdDltMTExX29wcywgY3RybC0+aWQpOwotCiAJaWYgKCFxY3RybCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKIAkJbXQ5bTExMS0+dmZsaXAgPSBjdHJsLT52YWx1ZTsKLQkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChpY2QsIGN0cmwtPnZhbHVlLAorCQlyZXQgPSBtdDltMTExX3NldF9mbGlwKGNsaWVudCwgY3RybC0+dmFsdWUsCiAJCQkJCU1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9IRkxJUDoKIAkJbXQ5bTExMS0+aGZsaXAgPSBjdHJsLT52YWx1ZTsKLQkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChpY2QsIGN0cmwtPnZhbHVlLAorCQlyZXQgPSBtdDltMTExX3NldF9mbGlwKGNsaWVudCwgY3RybC0+dmFsdWUsCiAJCQkJCU1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9HQUlOOgotCQlyZXQgPSBtdDltMTExX3NldF9nbG9iYWxfZ2FpbihpY2QsIGN0cmwtPnZhbHVlKTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oY2xpZW50LCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKLQkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShpY2QsIGN0cmwtPnZhbHVlKTsKKwkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6Ci0JCXJldCA9ICBtdDltMTExX3NldF9hdXRvd2hpdGViYWxhbmNlKGljZCwgY3RybC0+dmFsdWUpOworCQlyZXQgPSAgbXQ5bTExMV9zZXRfYXV0b3doaXRlYmFsYW5jZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTgzOSw2MiArODQ4LDYyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfc3VzcGVuZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCi0JbXQ5bTExMV9zZXRfY29udGV4dChpY2QsIG10OW0xMTEtPmNvbnRleHQpOwotCW10OW0xMTFfc2V0X3BpeGZtdChpY2QsIG10OW0xMTEtPnBpeGZtdCk7Ci0JbXQ5bTExMV9zZXR1cF9yZWN0KGljZCwgJm10OW0xMTEtPnJlY3QpOwotCW10OW0xMTFfc2V0X2ZsaXAoaWNkLCBtdDltMTExLT5oZmxpcCwgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOwotCW10OW0xMTFfc2V0X2ZsaXAoaWNkLCBtdDltMTExLT52ZmxpcCwgTVQ5TTExMV9STUJfTUlSUk9SX1JPV1MpOwotCW10OW0xMTFfc2V0X2dsb2JhbF9nYWluKGljZCwgaWNkLT5nYWluKTsKLQltdDltMTExX3NldF9hdXRvZXhwb3N1cmUoaWNkLCBtdDltMTExLT5hdXRvZXhwb3N1cmUpOwotCW10OW0xMTFfc2V0X2F1dG93aGl0ZWJhbGFuY2UoaWNkLCBtdDltMTExLT5hdXRvd2hpdGViYWxhbmNlKTsKKwltdDltMTExLT5nYWluID0gbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCisJbXQ5bTExMV9zZXRfY29udGV4dChjbGllbnQsIG10OW0xMTEtPmNvbnRleHQpOworCW10OW0xMTFfc2V0X3BpeGZtdChjbGllbnQsIG10OW0xMTEtPnBpeGZtdCk7CisJbXQ5bTExMV9zZXR1cF9yZWN0KGNsaWVudCwgJm10OW0xMTEtPnJlY3QpOworCW10OW0xMTFfc2V0X2ZsaXAoY2xpZW50LCBtdDltMTExLT5oZmxpcCwgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOworCW10OW0xMTFfc2V0X2ZsaXAoY2xpZW50LCBtdDltMTExLT52ZmxpcCwgTVQ5TTExMV9STUJfTUlSUk9SX1JPV1MpOworCW10OW0xMTFfc2V0X2dsb2JhbF9nYWluKGNsaWVudCwgbXQ5bTExMS0+Z2Fpbik7CisJbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGNsaWVudCwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKKwltdDltMTExX3NldF9hdXRvd2hpdGViYWxhbmNlKGNsaWVudCwgbXQ5bTExMS0+YXV0b3doaXRlYmFsYW5jZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5bTExMV9yZXN1bWUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudCh0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKSk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobXQ5bTExMS0+cG93ZXJlZCkgewotCQlyZXQgPSBtdDltMTExX2VuYWJsZShpY2QpOworCQlyZXQgPSBtdDltMTExX2VuYWJsZShjbGllbnQpOwogCQlpZiAoIXJldCkKLQkJCXJldCA9IG10OW0xMTFfcmVzZXQoaWNkKTsKKwkJCXJldCA9IG10OW0xMTFfcmVzZXQoY2xpZW50KTsKIAkJaWYgKCFyZXQpCi0JCQlyZXQgPSBtdDltMTExX3Jlc3RvcmVfc3RhdGUoaWNkKTsKKwkJCXJldCA9IG10OW0xMTFfcmVzdG9yZV9zdGF0ZShjbGllbnQpOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfaW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKIAlpbnQgcmV0OwogCiAJbXQ5bTExMS0+Y29udGV4dCA9IEhJR0hQT1dFUjsKLQlyZXQgPSBtdDltMTExX2VuYWJsZShpY2QpOworCXJldCA9IG10OW0xMTFfZW5hYmxlKGNsaWVudCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IG10OW0xMTFfcmVzZXQoaWNkKTsKKwkJcmV0ID0gbXQ5bTExMV9yZXNldChjbGllbnQpOwogCWlmICghcmV0KQotCQlyZXQgPSBtdDltMTExX3NldF9jb250ZXh0KGljZCwgbXQ5bTExMS0+Y29udGV4dCk7CisJCXJldCA9IG10OW0xMTFfc2V0X2NvbnRleHQoY2xpZW50LCBtdDltMTExLT5jb250ZXh0KTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGljZCwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGNsaWVudCwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKIAlpZiAocmV0KQotCQlkZXZfZXJyKCZpY2QtPmRldiwgIm10OW0xMXggaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5bTExMV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBtdDltMTExX2Rpc2FibGUoaWNkKTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2VycigmaWNkLT5kZXYsICJtdDltMTF4IHJlbGVhc2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsKLQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm10OW0xMXggaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTkwMiwxMCArOTExLDEwIEBACiAgKiBJbnRlcmZhY2UgYWN0aXZlLCBjYW4gdXNlIGkyYy4gSWYgaXQgZmFpbHMsIGl0IGNhbiBpbmRlZWQgbWVhbiwgdGhhdAogICogdGhpcyB3YXNuJ3Qgb3VyIGNhcHR1cmUgaW50ZXJmYWNlLCBzbywgd2Ugd2FpdCBmb3IgdGhlIHJpZ2h0IG9uZQogICovCi1zdGF0aWMgaW50IG10OW0xMTFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKIApAQCAtOTE3LDEwICs5MjYsMTMgQEAKIAkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gbXQ5bTExMV9lbmFibGUoaWNkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVpMmM7Ci0JcmV0ID0gbXQ5bTExMV9yZXNldChpY2QpOworCW10OW0xMTEtPmF1dG9leHBvc3VyZSA9IDE7CisJbXQ5bTExMS0+YXV0b3doaXRlYmFsYW5jZSA9IDE7CisKKwltdDltMTExLT5zd2FwX3JnYl9ldmVuX29kZCA9IDE7CisJbXQ5bTExMS0+c3dhcF9yZ2JfcmVkX2JsdWUgPSAxOworCisJcmV0ID0gbXQ5bTExMV9pbml0KGNsaWVudCk7CiAJaWYgKHJldCkKIAkJZ290byBlaTJjOwogCkBAIC05MzUsNyArOTQ3LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZGV2X2VycigmaWNkLT5kZXYsCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJIk5vIE1UOU0xMXggY2hpcCBkZXRlY3RlZCwgcmVnaXN0ZXIgcmVhZCAleFxuIiwgZGF0YSk7CiAJCWdvdG8gZWkyYzsKIAl9CkBAIC05NDMsNDIgKzk1NSw1MSBAQAogCWljZC0+Zm9ybWF0cyA9IG10OW0xMTFfY29sb3VyX2Zvcm1hdHM7CiAJaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUobXQ5bTExMV9jb2xvdXJfZm9ybWF0cyk7CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJEZXRlY3RlZCBhIE1UOU0xMXggY2hpcCBJRCAleFxuIiwgZGF0YSk7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlNMTF4IGNoaXAgSUQgJXhcbiIsIGRhdGEpOwogCi0JcmV0ID0gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwotCWlmIChyZXQpCi0JCWdvdG8gZWlzaXM7Ci0KLQltdDltMTExLT5hdXRvZXhwb3N1cmUgPSAxOwotCW10OW0xMTEtPmF1dG93aGl0ZWJhbGFuY2UgPSAxOwotCi0JbXQ5bTExMS0+c3dhcF9yZ2JfZXZlbl9vZGQgPSAxOwotCW10OW0xMTEtPnN3YXBfcmdiX3JlZF9ibHVlID0gMTsKLQotCXJldHVybiAwOwotZWlzaXM6CiBlaTJjOgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG10OW0xMTFfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG10OW0xMTFfc3ViZGV2X2NvcmVfb3BzID0geworCS5nX2N0cmwJCT0gbXQ5bTExMV9nX2N0cmwsCisJLnNfY3RybAkJPSBtdDltMTExX3NfY3RybCwKKwkuZ19jaGlwX2lkZW50CT0gbXQ5bTExMV9nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyCT0gbXQ5bTExMV9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gbXQ5bTExMV9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyAleCByZW1vdmVkOiAlcCwgJXBcbiIsIG10OW0xMTEtPmNsaWVudC0+YWRkciwKLQkJbXQ5bTExMS0+aWNkLmRldi5wYXJlbnQsIG10OW0xMTEtPmljZC52ZGV2KTsKLQlzb2NfY2FtZXJhX3ZpZGVvX3N0b3AoJm10OW0xMTEtPmljZCk7Ci19CitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBtdDltMTExX3N1YmRldl92aWRlb19vcHMgPSB7CisJLnNfZm10CQk9IG10OW0xMTFfc19mbXQsCisJLmdfZm10CQk9IG10OW0xMTFfZ19mbXQsCisJLnRyeV9mbXQJPSBtdDltMTExX3RyeV9mbXQsCisJLnNfY3JvcAkJPSBtdDltMTExX3NfY3JvcCwKKwkuZ19jcm9wCQk9IG10OW0xMTFfZ19jcm9wLAorCS5jcm9wY2FwCT0gbXQ5bTExMV9jcm9wY2FwLAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5bTExMV9zdWJkZXZfb3BzID0geworCS5jb3JlCT0gJm10OW0xMTFfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZtdDltMTExX3N1YmRldl92aWRlb19vcHMsCit9OwogCiBzdGF0aWMgaW50IG10OW0xMTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQogewogCXN0cnVjdCBtdDltMTExICptdDltMTExOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsOwogCWludCByZXQ7CiAKKwlpZiAoIWljZCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOU0xMXg6IG1pc3Npbmcgc29jLWNhbWVyYSBkYXRhIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCWlmICghaWNsKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTVQ5TTExeCBkcml2ZXIgbmVlZHMgcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTk0LDM4ICsxMDE1LDM1IEBACiAJaWYgKCFtdDltMTExKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW10OW0xMTEtPmNsaWVudCA9IGNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtdDltMTExKTsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmbXQ5bTExMS0+c3ViZGV2LCBjbGllbnQsICZtdDltMTExX3N1YmRldl9vcHMpOwogCiAJLyogU2Vjb25kIHN0YWdlIHByb2JlIC0gd2hlbiBhIGNhcHR1cmUgYWRhcHRlciBpcyB0aGVyZSAqLwotCWljZCAJCT0gJm10OW0xMTEtPmljZDsKLQlpY2QtPm9wcwk9ICZtdDltMTExX29wczsKLQlpY2QtPmNvbnRyb2wJPSAmY2xpZW50LT5kZXY7Ci0JaWNkLT54X21pbgk9IE1UOU0xMTFfTUlOX0RBUktfQ09MUzsKLQlpY2QtPnlfbWluCT0gTVQ5TTExMV9NSU5fREFSS19ST1dTOwotCWljZC0+eF9jdXJyZW50CT0gaWNkLT54X21pbjsKLQlpY2QtPnlfY3VycmVudAk9IGljZC0+eV9taW47Ci0JaWNkLT53aWR0aF9taW4JPSBNVDlNMTExX01JTl9EQVJLX1JPV1M7Ci0JaWNkLT53aWR0aF9tYXgJPSBNVDlNMTExX01BWF9XSURUSDsKLQlpY2QtPmhlaWdodF9taW4JPSBNVDlNMTExX01JTl9EQVJLX0NPTFM7Ci0JaWNkLT5oZWlnaHRfbWF4CT0gTVQ5TTExMV9NQVhfSEVJR0hUOwotCWljZC0+eV9za2lwX3RvcAk9IDA7Ci0JaWNkLT5pZmFjZQk9IGljbC0+YnVzX2lkOworCWljZC0+b3BzCQk9ICZtdDltMTExX29wczsKKwlpY2QtPnlfc2tpcF90b3AJCT0gMDsKIAotCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlaXNkcjsKLQlyZXR1cm4gMDsKKwltdDltMTExLT5yZWN0LmxlZnQJPSBNVDlNMTExX01JTl9EQVJLX0NPTFM7CisJbXQ5bTExMS0+cmVjdC50b3AJPSBNVDlNMTExX01JTl9EQVJLX1JPV1M7CisJbXQ5bTExMS0+cmVjdC53aWR0aAk9IE1UOU0xMTFfTUFYX1dJRFRIOworCW10OW0xMTEtPnJlY3QuaGVpZ2h0CT0gTVQ5TTExMV9NQVhfSEVJR0hUOwogCi1laXNkcjoKLQlrZnJlZShtdDltMTExKTsKKwlyZXQgPSBtdDltMTExX3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50KTsKKwlpZiAocmV0KSB7CisJCWljZC0+b3BzID0gTlVMTDsKKwkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJCWtmcmVlKG10OW0xMTEpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5bTExMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJm10OW0xMTEtPmljZCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWNkLT5vcHMgPSBOVUxMOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWNsaWVudC0+ZHJpdmVyID0gTlVMTDsKIAlrZnJlZShtdDltMTExKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYwppbmRleCA0MjA3ZmIzNC4uNjk2NmY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMKQEAgLTEzLDEzICsxMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKIC8qIG10OXQwMzEgaTJjIGFkZHJlc3MgMHg1ZAotICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgaTJjX2JvYXJkX2luZm8KLSAqIGFuZCBjYWxsIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKCkgKi8KKyAqIFRoZSBwbGF0Zm9ybSBoYXMgdG8gZGVmaW5lIGkyY19ib2FyZF9pbmZvIGFuZCBsaW5rIHRvIGl0IGZyb20KKyAqIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKi8KIAogLyogbXQ5dDAzMSBzZWxlY3RlZCByZWdpc3RlciBhZGRyZXNzZXMgKi8KICNkZWZpbmUgTVQ5VDAzMV9DSElQX1ZFUlNJT04JCTB4MDAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNkZWZpbmUgTVQ5VDAzMV9NQVhfSEVJR0hUCQkxNTM2CiAjZGVmaW5lIE1UOVQwMzFfTUFYX1dJRFRICQkyMDQ4CiAjZGVmaW5lIE1UOVQwMzFfTUlOX0hFSUdIVAkJMgotI2RlZmluZSBNVDlUMDMxX01JTl9XSURUSAkJMgorI2RlZmluZSBNVDlUMDMxX01JTl9XSURUSAkJMTgKICNkZWZpbmUgTVQ5VDAzMV9IT1JJWk9OVEFMX0JMQU5LCTE0MgogI2RlZmluZSBNVDlUMDMxX1ZFUlRJQ0FMX0JMQU5LCQkyNQogI2RlZmluZSBNVDlUMDMxX0NPTFVNTl9TS0lQCQkzMgpAQCAtNjgsMTQgKzY4LDIxIEBACiB9OwogCiBzdHJ1Y3QgbXQ5dDAzMSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOworCXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0OwkvKiBTZW5zb3Igd2luZG93ICovCiAJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOVQwMzEqIGNvZGVzIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KLQl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIAl1MTYgeHNraXA7CiAJdTE2IHlza2lwOworCXVuc2lnbmVkIGludCBnYWluOworCXVuc2lnbmVkIGludCBleHBvc3VyZTsKKwl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXQ5dDAzMSAqdG9fbXQ5dDAzMShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBjb250YWluZXJfb2YoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIHN0cnVjdCBtdDl0MDMxLCBzdWJkZXYpOworfQorCiBzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4IHJlZykKIHsKIAlzMzIgZGF0YSA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7CkBAIC0xMzYsMjEgKzE0MywxMCBAQAogCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIAotc3RhdGljIGludCBtdDl0MDMxX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OXQwMzFfaWRsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCi0JaWYgKGljbC0+cG93ZXIpIHsKLQkJcmV0ID0gaWNsLT5wb3dlcigmY2xpZW50LT5kZXYsIDEpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycihpY2QtPnZkZXYtPnBhcmVudCwKLQkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9uIHRoZSBjYW1lcmEuXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KIAkvKiBEaXNhYmxlIGNoaXAgb3V0cHV0LCBzeW5jaHJvbm91cyBvcHRpb24gdXBkYXRlICovCiAJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9SRVNFVCwgMSk7CiAJaWYgKHJldCA+PSAwKQpAQCAtMTU4LDUwICsxNTQsMzkgQEAKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ19jbGVhcihjbGllbnQsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCi0JaWYgKHJldCA8IDAgJiYgaWNsLT5wb3dlcikKLQkJaWNsLT5wb3dlcigmY2xpZW50LT5kZXYsIDApOwotCiAJcmV0dXJuIHJldCA+PSAwID8gMCA6IC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDl0MDMxX2Rpc2FibGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KIAkvKiBEaXNhYmxlIHRoZSBjaGlwICovCiAJcmVnX2NsZWFyKGNsaWVudCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMik7CiAKLQlpZiAoaWNsLT5wb3dlcikKLQkJaWNsLT5wb3dlcigmY2xpZW50LT5kZXYsIDApOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDl0MDMxX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJaW50IHJldDsKIAotCS8qIFN3aXRjaCB0byBtYXN0ZXIgIm5vcm1hbCIgbW9kZSAqLwotCWlmIChyZWdfc2V0KGNsaWVudCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMikgPCAwKQorCWlmIChlbmFibGUpCisJCS8qIFN3aXRjaCB0byBtYXN0ZXIgIm5vcm1hbCIgbW9kZSAqLworCQlyZXQgPSByZWdfc2V0KGNsaWVudCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMik7CisJZWxzZQorCQkvKiBTdG9wIHNlbnNvciByZWFkb3V0ICovCisJCXJldCA9IHJlZ19jbGVhcihjbGllbnQsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOworCisJaWYgKHJldCA8IDApCiAJCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQogCi1zdGF0aWMgaW50IG10OXQwMzFfc3RvcF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0KLQkvKiBTdG9wIHNlbnNvciByZWFkb3V0ICovCi0JaWYgKHJlZ19jbGVhcihjbGllbnQsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOwogCiAJLyogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBxdWVyaWVkIG91ciBwYXJhbWV0ZXJzLCBjaGVjayBhbnl3YXkgKi8KIAlpZiAoZmxhZ3MgJiB+TVQ5VDAzMV9CVVNfUEFSQU0pCkBAIC0yMTcsNjggKzIwMiw3MiBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDl0MDMxX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OXQwMzEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBNVDlUMDMxX0JVU19QQVJBTSk7CiB9CiAKLS8qIFJvdW5kIHVwIG1pbmltYSBhbmQgcm91bmQgZG93biBtYXhpbWEgKi8KLXN0YXRpYyB2b2lkIHJlY2FsY3VsYXRlX2xpbWl0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICB1MTYgeHNraXAsIHUxNiB5c2tpcCkKKy8qIHRhcmdldCBtdXN0IGJlIF9ldmVuXyAqLworc3RhdGljIHUxNiBtdDl0MDMxX3NraXAoczMyICpzb3VyY2UsIHMzMiB0YXJnZXQsIHMzMiBtYXgpCiB7Ci0JaWNkLT54X21pbiA9IChNVDlUMDMxX0NPTFVNTl9TS0lQICsgeHNraXAgLSAxKSAvIHhza2lwOwotCWljZC0+eV9taW4gPSAoTVQ5VDAzMV9ST1dfU0tJUCArIHlza2lwIC0gMSkgLyB5c2tpcDsKLQlpY2QtPndpZHRoX21pbiA9IChNVDlUMDMxX01JTl9XSURUSCArIHhza2lwIC0gMSkgLyB4c2tpcDsKLQlpY2QtPmhlaWdodF9taW4gPSAoTVQ5VDAzMV9NSU5fSEVJR0hUICsgeXNraXAgLSAxKSAvIHlza2lwOwotCWljZC0+d2lkdGhfbWF4ID0gTVQ5VDAzMV9NQVhfV0lEVEggLyB4c2tpcDsKLQlpY2QtPmhlaWdodF9tYXggPSBNVDlUMDMxX01BWF9IRUlHSFQgLyB5c2tpcDsKKwl1bnNpZ25lZCBpbnQgc2tpcDsKKworCWlmICgqc291cmNlIDwgdGFyZ2V0ICsgdGFyZ2V0IC8gMikgeworCQkqc291cmNlID0gdGFyZ2V0OworCQlyZXR1cm4gMTsKKwl9CisKKwlza2lwID0gbWluKG1heCwgKnNvdXJjZSArIHRhcmdldCAvIDIpIC8gdGFyZ2V0OworCWlmIChza2lwID4gOCkKKwkJc2tpcCA9IDg7CisJKnNvdXJjZSA9IHRhcmdldCAqIHNraXA7CisKKwlyZXR1cm4gc2tpcDsKIH0KIAorLyogcmVjdCBpcyB0aGUgc2Vuc29yIHJlY3RhbmdsZSwgdGhlIGNhbGxlciBndWFyYW50ZWVzIHBhcmFtZXRlciB2YWxpZGl0eSAqLwogc3RhdGljIGludCBtdDl0MDMxX3NldF9wYXJhbXMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0LCB1MTYgeHNraXAsIHUxNiB5c2tpcCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOwogCWludCByZXQ7Ci0JdTE2IHhiaW4sIHliaW4sIHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcDsKKwl1MTYgeGJpbiwgeWJpbjsKIAljb25zdCB1MTYgaGJsYW5rID0gTVQ5VDAzMV9IT1JJWk9OVEFMX0JMQU5LLAogCQl2YmxhbmsgPSBNVDlUMDMxX1ZFUlRJQ0FMX0JMQU5LOwogCi0JLyogTWFrZSBzdXJlIHdlIGRvbid0IGV4Y2VlZCBzZW5zb3IgbGltaXRzICovCi0JaWYgKHJlY3QtPmxlZnQgKyByZWN0LT53aWR0aCA+IGljZC0+d2lkdGhfbWF4KQotCQlyZWN0LT5sZWZ0ID0gKGljZC0+d2lkdGhfbWF4IC0gcmVjdC0+d2lkdGgpIC8gMiArIGljZC0+eF9taW47Ci0KLQlpZiAocmVjdC0+dG9wICsgcmVjdC0+aGVpZ2h0ID4gaWNkLT5oZWlnaHRfbWF4KQotCQlyZWN0LT50b3AgPSAoaWNkLT5oZWlnaHRfbWF4IC0gcmVjdC0+aGVpZ2h0KSAvIDIgKyBpY2QtPnlfbWluOwotCi0Jd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwOwotCWhlaWdodCA9IHJlY3QtPmhlaWdodCAqIHlza2lwOwotCWxlZnQgPSByZWN0LT5sZWZ0ICogeHNraXA7Ci0JdG9wID0gcmVjdC0+dG9wICogeXNraXA7Ci0KIAl4YmluID0gbWluKHhza2lwLCAodTE2KTMpOwogCXliaW4gPSBtaW4oeXNraXAsICh1MTYpMyk7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgInhza2lwICV1LCB3aWR0aCAldS8ldSwgeXNraXAgJXUsIGhlaWdodCAldS8ldVxuIiwKLQkJeHNraXAsIHdpZHRoLCByZWN0LT53aWR0aCwgeXNraXAsIGhlaWdodCwgcmVjdC0+aGVpZ2h0KTsKLQotCS8qIENvdWxkIGp1c3QgZG8gcm91bmR1cChyZWN0LT5sZWZ0LCBbeHldYmluICogMik7IGJ1dCB0aGlzIGlzIGNoZWFwZXIgKi8KKwkvKgorCSAqIENvdWxkIGp1c3QgZG8gcm91bmR1cChyZWN0LT5sZWZ0LCBbeHldYmluICogMik7IGJ1dCB0aGlzIGlzIGNoZWFwZXIuCisJICogVGhlcmUgaXMgYWx3YXlzIGEgdmFsaWQgc3VpdGFibHkgYWxpZ25lZCB2YWx1ZS4gVGhlIHdvcnN0IGNhc2UgaXMKKwkgKiB4YmluID0gMywgd2lkdGggPSAyMDQ4LiBUaGVuIHdlIHdpbGwgc3RhcnQgYXQgMzYsIHRoZSBsYXN0IHJlYWQgb3V0CisJICogcGl4ZWwgd2lsbCBiZSAyMDgzLCB3aGljaCBpcyA8IDIwODUgLSBmaXJzdCBibGFjayBwaXhlbC4KKwkgKgorCSAqIE1UOVQwMzEgZGF0YXNoZWV0IGltcG9zZXMgd2luZG93IGxlZnQgYm9yZGVyIGFsaWdubWVudCwgZGVwZW5kaW5nIG9uCisJICogdGhlIHNlbGVjdGVkIHhza2lwLiBGYWlsaW5nIHRvIGNvbmZvcm0gdG8gdGhpcyByZXF1aXJlbWVudCBwcm9kdWNlcworCSAqIGRhcmsgaG9yaXpvbnRhbCBzdHJpcGVzIGluIHRoZSBpbWFnZS4gSG93ZXZlciwgZXZlbiBvYmV5aW5nIHRvIHRoaXMKKwkgKiByZXF1aXJlbWVudCBkb2Vzbid0IGVsaW1pbmF0ZSB0aGUgc3RyaXBlcyBpbiBhbGwgY29uZmlndXJhdGlvbnMuIFRoZXkKKwkgKiBhcHBlYXIgImxvY2FsbHkgcmVwcm9kdWNpYmx5LCIgYnV0IGNhbiBkaWZmZXIgYmV0d2VlbiB0ZXN0cyB1bmRlcgorCSAqIGRpZmZlcmVudCBsaWdodGluZyBjb25kaXRpb25zLgorCSAqLwogCXN3aXRjaCAoeGJpbikgeworCWNhc2UgMToKKwkJcmVjdC0+bGVmdCAmPSB+MTsKKwkJYnJlYWs7CiAJY2FzZSAyOgotCQlsZWZ0ID0gKGxlZnQgKyAzKSAmIH4zOworCQlyZWN0LT5sZWZ0ICY9IH4zOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCWxlZnQgPSByb3VuZHVwKGxlZnQsIDYpOworCQlyZWN0LT5sZWZ0ID0gcmVjdC0+bGVmdCA+IHJvdW5kdXAoTVQ5VDAzMV9DT0xVTU5fU0tJUCwgNikgPworCQkJKHJlY3QtPmxlZnQgLyA2KSAqIDYgOiByb3VuZHVwKE1UOVQwMzFfQ09MVU1OX1NLSVAsIDYpOwogCX0KIAotCXN3aXRjaCAoeWJpbikgewotCWNhc2UgMjoKLQkJdG9wID0gKHRvcCArIDMpICYgfjM7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJdG9wID0gcm91bmR1cCh0b3AsIDYpOwotCX0KKwlyZWN0LT50b3AgJj0gfjE7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgInNraXAgJXU6JXUsIHJlY3QgJXV4JXVAJXU6JXVcbiIsCisJCXhza2lwLCB5c2tpcCwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKIAogCS8qIERpc2FibGUgcmVnaXN0ZXIgdXBkYXRlLCByZWNvbmZpZ3VyZSBhdG9taWNhbGx5ICovCiAJcmV0ID0gcmVnX3NldChjbGllbnQsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDEpOwpAQCAtMjk5LDI5ICsyODgsMzAgQEAKIAkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfUk9XX0FERFJFU1NfTU9ERSwKIAkJCQkJKCh5YmluIC0gMSkgPDwgNCkgfCAoeXNraXAgLSAxKSk7CiAJfQotCWRldl9kYmcoJmljZC0+ZGV2LCAibmV3IHBoeXNpY2FsIGxlZnQgJXUsIHRvcCAldVxuIiwgbGVmdCwgdG9wKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIm5ldyBwaHlzaWNhbCBsZWZ0ICV1LCB0b3AgJXVcbiIsCisJCXJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CiAKIAkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgZ3VhcmFudGVlZCBieQogCSAqIGljZC0+dHJ5X2ZtdF9jYXAoKSwgc29jX2NhbWVyYV9zX2Nyb3AoKSBhbmQgc29jX2NhbWVyYV9jcm9wY2FwKCkgKi8KIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfQ09MVU1OX1NUQVJULCBsZWZ0KTsKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9DT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9ST1dfU1RBUlQsIHRvcCk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfUk9XX1NUQVJULCByZWN0LT50b3ApOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9XSU5ET1dfV0lEVEgsIHdpZHRoIC0gMSk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfV0lORE9XX1dJRFRILCByZWN0LT53aWR0aCAtIDEpOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9XSU5ET1dfSEVJR0hULAotCQkJCWhlaWdodCArIGljZC0+eV9za2lwX3RvcCAtIDEpOworCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCAtIDEpOwogCWlmIChyZXQgPj0gMCAmJiBtdDl0MDMxLT5hdXRvZXhwb3N1cmUpIHsKLQkJcmV0ID0gc2V0X3NodXR0ZXIoY2xpZW50LCBoZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyB2YmxhbmspOworCQl1bnNpZ25lZCBpbnQgdG90YWxfaCA9IHJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIHZibGFuazsKKwkJcmV0ID0gc2V0X3NodXR0ZXIoY2xpZW50LCB0b3RhbF9oKTsKIAkJaWYgKHJldCA+PSAwKSB7CiAJCQljb25zdCB1MzIgc2h1dHRlcl9tYXggPSBNVDlUMDMxX01BWF9IRUlHSFQgKyB2Ymxhbms7CiAJCQljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsID0KIAkJCQlzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoaWNkLT5vcHMsCiAJCQkJCQkgICAgICBWNEwyX0NJRF9FWFBPU1VSRSk7Ci0JCQlpY2QtPmV4cG9zdXJlID0gKHNodXR0ZXJfbWF4IC8gMiArIChoZWlnaHQgKwotCQkJCQkgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rIC0gMSkgKgotCQkJCQkgKHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW0pKSAvCisJCQltdDl0MDMxLT5leHBvc3VyZSA9IChzaHV0dGVyX21heCAvIDIgKyAodG90YWxfaCAtIDEpICoKKwkJCQkgKHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW0pKSAvCiAJCQkJc2h1dHRlcl9tYXggKyBxY3RybC0+bWluaW11bTsKIAkJfQogCX0KQEAgLTMzMCw1OCArMzIwLDk5IEBACiAJaWYgKHJldCA+PSAwKQogCQlyZXQgPSByZWdfY2xlYXIoY2xpZW50LCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAxKTsKIAotCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKLX0KLQotc3RhdGljIGludCBtdDl0MDMxX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCi17Ci0Jc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKLQotCS8qIENST1AgLSBubyBjaGFuZ2UgaW4gc2NhbGluZywgb3IgaW4gbGltaXRzICovCi0JcmV0dXJuIG10OXQwMzFfc2V0X3BhcmFtcyhpY2QsIHJlY3QsIG10OXQwMzEtPnhza2lwLCBtdDl0MDMxLT55c2tpcCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7Ci0JaW50IHJldDsKLQl1MTYgeHNraXAsIHlza2lwOwotCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKLQkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKLQkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAotCQkud2lkdGgJPSBmLT5mbXQucGl4LndpZHRoLAotCQkuaGVpZ2h0CT0gZi0+Zm10LnBpeC5oZWlnaHQsCi0JfTsKLQotCS8qCi0JICogdHJ5X2ZtdCBoYXMgcHV0IHJlY3RhbmdsZSB3aXRoaW4gbGltaXRzLgotCSAqIFNfRk1UIC0gdXNlIGJpbm5pbmcgYW5kIHNraXBwaW5nIGZvciBzY2FsaW5nLCByZWNhbGN1bGF0ZQotCSAqIGxpbWl0cywgdXNlZCBmb3IgY3JvcHBpbmcKLQkgKi8KLQkvKiBJcyB0aGlzIG1vcmUgb3B0aW1hbCB0aGFuIGp1c3QgYSBkaXZpc2lvbj8gKi8KLQlmb3IgKHhza2lwID0gODsgeHNraXAgPiAxOyB4c2tpcC0tKQotCQlpZiAocmVjdC53aWR0aCAqIHhza2lwIDw9IE1UOVQwMzFfTUFYX1dJRFRIKQotCQkJYnJlYWs7Ci0KLQlmb3IgKHlza2lwID0gODsgeXNraXAgPiAxOyB5c2tpcC0tKQotCQlpZiAocmVjdC5oZWlnaHQgKiB5c2tpcCA8PSBNVDlUMDMxX01BWF9IRUlHSFQpCi0JCQlicmVhazsKLQotCXJlY2FsY3VsYXRlX2xpbWl0cyhpY2QsIHhza2lwLCB5c2tpcCk7Ci0KLQlyZXQgPSBtdDl0MDMxX3NldF9wYXJhbXMoaWNkLCAmcmVjdCwgeHNraXAsIHlza2lwKTsKLQlpZiAoIXJldCkgeworCWlmIChyZXQgPj0gMCkgeworCQltdDl0MDMxLT5yZWN0ID0gKnJlY3Q7CiAJCW10OXQwMzEtPnhza2lwID0geHNraXA7CiAJCW10OXQwMzEtPnlza2lwID0geXNraXA7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDl0MDMxX3NfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQoreworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IGEtPmM7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXJlY3Qud2lkdGggPSBBTElHTihyZWN0LndpZHRoLCAyKTsKKwlyZWN0LmhlaWdodCA9IEFMSUdOKHJlY3QuaGVpZ2h0LCAyKTsKKworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC5sZWZ0LCAmcmVjdC53aWR0aCwKKwkJICAgICBNVDlUMDMxX0NPTFVNTl9TS0lQLCBNVDlUMDMxX01JTl9XSURUSCwgTVQ5VDAzMV9NQVhfV0lEVEgpOworCisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LnRvcCwgJnJlY3QuaGVpZ2h0LAorCQkgICAgIE1UOVQwMzFfUk9XX1NLSVAsIE1UOVQwMzFfTUlOX0hFSUdIVCwgTVQ5VDAzMV9NQVhfSEVJR0hUKTsKKworCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoaWNkLCAmcmVjdCwgbXQ5dDAzMS0+eHNraXAsIG10OXQwMzEtPnlza2lwKTsKK30KKworc3RhdGljIGludCBtdDl0MDMxX2dfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKKworCWEtPmMJPSBtdDl0MDMxLT5yZWN0OworCWEtPnR5cGUJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDl0MDMxX2Nyb3BjYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqYSkKK3sKKwlhLT5ib3VuZHMubGVmdAkJCT0gTVQ5VDAzMV9DT0xVTU5fU0tJUDsKKwlhLT5ib3VuZHMudG9wCQkJPSBNVDlUMDMxX1JPV19TS0lQOworCWEtPmJvdW5kcy53aWR0aAkJCT0gTVQ5VDAzMV9NQVhfV0lEVEg7CisJYS0+Ym91bmRzLmhlaWdodAkJPSBNVDlUMDMxX01BWF9IRUlHSFQ7CisJYS0+ZGVmcmVjdAkJCT0gYS0+Ym91bmRzOworCWEtPnR5cGUJCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yCT0gMTsKKwlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcgk9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDl0MDMxX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisKKwlwaXgtPndpZHRoCQk9IG10OXQwMzEtPnJlY3Qud2lkdGggLyBtdDl0MDMxLT54c2tpcDsKKwlwaXgtPmhlaWdodAkJPSBtdDl0MDMxLT5yZWN0LmhlaWdodCAvIG10OXQwMzEtPnlza2lwOworCXBpeC0+cGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMDsKKwlwaXgtPmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORTsKKwlwaXgtPmNvbG9yc3BhY2UJCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDl0MDMxX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXUxNiB4c2tpcCwgeXNraXA7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gbXQ5dDAzMS0+cmVjdDsKKworCS8qCisJICogdHJ5X2ZtdCBoYXMgcHV0IHdpZHRoIGFuZCBoZWlnaHQgd2l0aGluIGxpbWl0cy4KKwkgKiBTX0ZNVDogdXNlIGJpbm5pbmcgYW5kIHNraXBwaW5nIGZvciBzY2FsaW5nCisJICovCisJeHNraXAgPSBtdDl0MDMxX3NraXAoJnJlY3Qud2lkdGgsIHBpeC0+d2lkdGgsIE1UOVQwMzFfTUFYX1dJRFRIKTsKKwl5c2tpcCA9IG10OXQwMzFfc2tpcCgmcmVjdC5oZWlnaHQsIHBpeC0+aGVpZ2h0LCBNVDlUMDMxX01BWF9IRUlHSFQpOworCisJLyogbXQ5dDAzMV9zZXRfcGFyYW1zKCkgZG9lc24ndCBjaGFuZ2Ugd2lkdGggYW5kIGhlaWdodCAqLworCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoaWNkLCAmcmVjdCwgeHNraXAsIHlza2lwKTsKK30KKworLyoKKyAqIElmIGEgdXNlciB3aW5kb3cgbGFyZ2VyIHRoYW4gc2Vuc29yIHdpbmRvdyBpcyByZXF1ZXN0ZWQsIHdlJ2xsIGluY3JlYXNlIHRoZQorICogc2Vuc29yIHdpbmRvdy4KKyAqLworc3RhdGljIGludCBtdDl0MDMxX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCkBAIC0zOTIsMTUgKzQyMywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OXQwMzFfZ2V0X2NoaXBfaWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQorc3RhdGljIGludCBtdDl0MDMxX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKLQlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKIAogCWlmIChpZC0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGlkLT5tYXRjaC5hZGRyICE9IG10OXQwMzEtPmNsaWVudC0+YWRkcikKKwlpZiAoaWQtPm1hdGNoLmFkZHIgIT0gY2xpZW50LT5hZGRyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlkLT5pZGVudAk9IG10OXQwMzEtPm1vZGVsOwpAQCAtNDEwLDEwICs0NDIsMTAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLXN0YXRpYyBpbnQgbXQ5dDAzMV9nZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IG10OXQwMzFfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAKIAlpZiAocmVnLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDI5LDEwICs0NjEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl0MDMxX3NldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAogCWlmIChyZWctPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSIHx8IHJlZy0+cmVnID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00OTMsMzkgKzUyNSwxNyBAQAogCX0KIH07CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBtdDl0MDMxX3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IG10OXQwMzFfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7Ci1zdGF0aWMgaW50IG10OXQwMzFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7Ci0KIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgbXQ5dDAzMV9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCQk9IG10OXQwMzFfdmlkZW9fcHJvYmUsCi0JLnJlbW92ZQkJCT0gbXQ5dDAzMV92aWRlb19yZW1vdmUsCi0JLmluaXQJCQk9IG10OXQwMzFfaW5pdCwKLQkucmVsZWFzZQkJPSBtdDl0MDMxX3JlbGVhc2UsCi0JLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5dDAzMV9zdGFydF9jYXB0dXJlLAotCS5zdG9wX2NhcHR1cmUJCT0gbXQ5dDAzMV9zdG9wX2NhcHR1cmUsCi0JLnNldF9jcm9wCQk9IG10OXQwMzFfc2V0X2Nyb3AsCi0JLnNldF9mbXQJCT0gbXQ5dDAzMV9zZXRfZm10LAotCS50cnlfZm10CQk9IG10OXQwMzFfdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSBtdDl0MDMxX3NldF9idXNfcGFyYW0sCiAJLnF1ZXJ5X2J1c19wYXJhbQk9IG10OXQwMzFfcXVlcnlfYnVzX3BhcmFtLAogCS5jb250cm9scwkJPSBtdDl0MDMxX2NvbnRyb2xzLAogCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShtdDl0MDMxX2NvbnRyb2xzKSwKLQkuZ2V0X2NvbnRyb2wJCT0gbXQ5dDAzMV9nZXRfY29udHJvbCwKLQkuc2V0X2NvbnRyb2wJCT0gbXQ5dDAzMV9zZXRfY29udHJvbCwKLQkuZ2V0X2NoaXBfaWQJCT0gbXQ5dDAzMV9nZXRfY2hpcF9pZCwKLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JLmdldF9yZWdpc3RlcgkJPSBtdDl0MDMxX2dldF9yZWdpc3RlciwKLQkuc2V0X3JlZ2lzdGVyCQk9IG10OXQwMzFfc2V0X3JlZ2lzdGVyLAotI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IG10OXQwMzFfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IG10OXQwMzFfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKIAlpbnQgZGF0YTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTU0NCwxNCArNTU0LDIxIEBACiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgogCQljdHJsLT52YWx1ZSA9IG10OXQwMzEtPmF1dG9leHBvc3VyZTsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQljdHJsLT52YWx1ZSA9IG10OXQwMzEtPmdhaW47CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWN0cmwtPnZhbHVlID0gbXQ5dDAzMS0+ZXhwb3N1cmU7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl0MDMxX3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBtdDl0MDMxX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CiAJaW50IGRhdGE7CiAKQEAgLTU4Niw3ICs2MDMsNyBAQAogCQkJdW5zaWduZWQgbG9uZyByYW5nZSA9IHFjdHJsLT5kZWZhdWx0X3ZhbHVlIC0gcWN0cmwtPm1pbmltdW07CiAJCQlkYXRhID0gKChjdHJsLT52YWx1ZSAtIHFjdHJsLT5taW5pbXVtKSAqIDggKyByYW5nZSAvIDIpIC8gcmFuZ2U7CiAKLQkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBnYWluICVkXG4iLCBkYXRhKTsKKwkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0dGluZyBnYWluICVkXG4iLCBkYXRhKTsKIAkJCWRhdGEgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlUMDMxX0dMT0JBTF9HQUlOLCBkYXRhKTsKIAkJCWlmIChkYXRhIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTYwNiw3ICs2MjMsNyBAQAogCQkJCS8qIGNhbGN1bGF0ZWQgZ2FpbiA2NS4uMTAyNCAtPiAoMS4uMTIwKSA8PCA4ICsgMHg2MCAqLwogCQkJCWRhdGEgPSAoKChnYWluIC0gNjQgKyA3KSAqIDMyKSAmIDB4ZmYwMCkgfCAweDYwOwogCi0JCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiBmcm9tIDB4JXggdG8gMHgleFxuIiwKKwkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0IGdhaW4gZnJvbSAweCV4IHRvIDB4JXhcbiIsCiAJCQkJcmVnX3JlYWQoY2xpZW50LCBNVDlUMDMxX0dMT0JBTF9HQUlOKSwgZGF0YSk7CiAJCQlkYXRhID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiwgZGF0YSk7CiAJCQlpZiAoZGF0YSA8IDApCkBAIC02MTQsNyArNjMxLDcgQEAKIAkJfQogCiAJCS8qIFN1Y2Nlc3MgKi8KLQkJaWNkLT5nYWluID0gY3RybC0+dmFsdWU7CisJCW10OXQwMzEtPmdhaW4gPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKIAkJLyogbXQ5dDAzMSBoYXMgbWF4aW11bSA9PSBkZWZhdWx0ICovCkBAIC02MjcsMTEgKzY0NCwxMSBAQAogCQkJdTMyIG9sZDsKIAogCQkJZ2V0X3NodXR0ZXIoY2xpZW50LCAmb2xkKTsKLQkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBzaHV0dGVyIHdpZHRoIGZyb20gJXUgdG8gJXVcbiIsCisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldCBzaHV0dGVyIGZyb20gJXUgdG8gJXVcbiIsCiAJCQkJb2xkLCBzaHV0dGVyKTsKIAkJCWlmIChzZXRfc2h1dHRlcihjbGllbnQsIHNodXR0ZXIpIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCWljZC0+ZXhwb3N1cmUgPSBjdHJsLT52YWx1ZTsKKwkJCW10OXQwMzEtPmV4cG9zdXJlID0gY3RybC0+dmFsdWU7CiAJCQltdDl0MDMxLT5hdXRvZXhwb3N1cmUgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtNjM5LDEzICs2NTYsMTQgQEAKIAkJaWYgKGN0cmwtPnZhbHVlKSB7CiAJCQljb25zdCB1MTYgdmJsYW5rID0gTVQ5VDAzMV9WRVJUSUNBTF9CTEFOSzsKIAkJCWNvbnN0IHUzMiBzaHV0dGVyX21heCA9IE1UOVQwMzFfTUFYX0hFSUdIVCArIHZibGFuazsKLQkJCWlmIChzZXRfc2h1dHRlcihjbGllbnQsIGljZC0+aGVpZ2h0ICsKLQkJCQkJaWNkLT55X3NraXBfdG9wICsgdmJsYW5rKSA8IDApCisJCQl1bnNpZ25lZCBpbnQgdG90YWxfaCA9IG10OXQwMzEtPnJlY3QuaGVpZ2h0ICsKKwkJCQlpY2QtPnlfc2tpcF90b3AgKyB2Ymxhbms7CisKKwkJCWlmIChzZXRfc2h1dHRlcihjbGllbnQsIHRvdGFsX2gpIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLCBWNEwyX0NJRF9FWFBPU1VSRSk7Ci0JCQlpY2QtPmV4cG9zdXJlID0gKHNodXR0ZXJfbWF4IC8gMiArIChpY2QtPmhlaWdodCArCi0JCQkJCSBpY2QtPnlfc2tpcF90b3AgKyB2YmxhbmsgLSAxKSAqCi0JCQkJCSAocWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bSkpIC8KKwkJCW10OXQwMzEtPmV4cG9zdXJlID0gKHNodXR0ZXJfbWF4IC8gMiArICh0b3RhbF9oIC0gMSkgKgorCQkJCSAocWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bSkpIC8KIAkJCQlzaHV0dGVyX21heCArIHFjdHJsLT5taW5pbXVtOwogCQkJbXQ5dDAzMS0+YXV0b2V4cG9zdXJlID0gMTsKIAkJfSBlbHNlCkBAIC02NTcsMjIgKzY3NSwxNiBAQAogCiAvKiBJbnRlcmZhY2UgYWN0aXZlLCBjYW4gdXNlIGkyYy4gSWYgaXQgZmFpbHMsIGl0IGNhbiBpbmRlZWQgbWVhbiwgdGhhdAogICogdGhpcyB3YXNuJ3Qgb3VyIGNhcHR1cmUgaW50ZXJmYWNlLCBzbywgd2Ugd2FpdCBmb3IgdGhlIHJpZ2h0IG9uZSAqLwotc3RhdGljIGludCBtdDl0MDMxX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDl0MDMxX3ZpZGVvX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKIAlzMzIgZGF0YTsKIAlpbnQgcmV0OwogCi0JLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KLQkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiAqLwotCWlmICghaWNkLT5kZXYucGFyZW50IHx8Ci0JICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIEVuYWJsZSB0aGUgY2hpcCAqLwogCWRhdGEgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlUMDMxX0NISVBfRU5BQkxFLCAxKTsKLQlkZXZfZGJnKCZpY2QtPmRldiwgIndyaXRlOiAlZFxuIiwgZGF0YSk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJ3cml0ZTogJWRcbiIsIGRhdGEpOwogCiAJLyogUmVhZCBvdXQgdGhlIGNoaXAgdmVyc2lvbiByZWdpc3RlciAqLwogCWRhdGEgPSByZWdfcmVhZChjbGllbnQsIE1UOVQwMzFfQ0hJUF9WRVJTSU9OKTsKQEAgLTY4NCw0NCArNjk2LDY0IEBACiAJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OXQwMzFfY29sb3VyX2Zvcm1hdHMpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXQgPSAtRU5PREVWOwotCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkiTm8gTVQ5VDAzMSBjaGlwIGRldGVjdGVkLCByZWdpc3RlciByZWFkICV4XG4iLCBkYXRhKTsKLQkJZ290byBlaTJjOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJEZXRlY3RlZCBhIE1UOVQwMzEgY2hpcCBJRCAleFxuIiwgZGF0YSk7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlUMDMxIGNoaXAgSUQgJXhcbiIsIGRhdGEpOwogCi0JLyogTm93IHRoYXQgd2Uga25vdyB0aGUgbW9kZWwsIHdlIGNhbiBzdGFydCB2aWRlbyAqLwotCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKLQlpZiAocmV0KQotCQlnb3RvIGV2c3RhcnQ7CisJcmV0ID0gbXQ5dDAzMV9pZGxlKGNsaWVudCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpc2UgdGhlIGNhbWVyYVxuIik7CiAKLQlyZXR1cm4gMDsKKwkvKiBtdDl0MDMxX2lkbGUoKSBoYXMgcmVzZXQgdGhlIGNoaXAgdG8gZGVmYXVsdC4gKi8KKwltdDl0MDMxLT5leHBvc3VyZSA9IDI1NTsKKwltdDl0MDMxLT5nYWluID0gNjQ7CiAKLWV2c3RhcnQ6Ci1laTJjOgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG10OXQwMzFfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQotewotCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG10OXQwMzFfc3ViZGV2X2NvcmVfb3BzID0geworCS5nX2N0cmwJCT0gbXQ5dDAzMV9nX2N0cmwsCisJLnNfY3RybAkJPSBtdDl0MDMxX3NfY3RybCwKKwkuZ19jaGlwX2lkZW50CT0gbXQ5dDAzMV9nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyCT0gbXQ5dDAzMV9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gbXQ5dDAzMV9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyAleCByZW1vdmVkOiAlcCwgJXBcbiIsIG10OXQwMzEtPmNsaWVudC0+YWRkciwKLQkJaWNkLT5kZXYucGFyZW50LCBpY2QtPnZkZXYpOwotCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOwotfQorc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgbXQ5dDAzMV9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX3N0cmVhbQk9IG10OXQwMzFfc19zdHJlYW0sCisJLnNfZm10CQk9IG10OXQwMzFfc19mbXQsCisJLmdfZm10CQk9IG10OXQwMzFfZ19mbXQsCisJLnRyeV9mbXQJPSBtdDl0MDMxX3RyeV9mbXQsCisJLnNfY3JvcAkJPSBtdDl0MDMxX3NfY3JvcCwKKwkuZ19jcm9wCQk9IG10OXQwMzFfZ19jcm9wLAorCS5jcm9wY2FwCT0gbXQ5dDAzMV9jcm9wY2FwLAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5dDAzMV9zdWJkZXZfb3BzID0geworCS5jb3JlCT0gJm10OXQwMzFfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZtdDl0MDMxX3N1YmRldl92aWRlb19vcHMsCit9OwogCiBzdGF0aWMgaW50IG10OXQwMzFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQogewogCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsOwogCWludCByZXQ7CiAKKwlpZiAoIWljZCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOVQwMzE6IG1pc3Npbmcgc29jLWNhbWVyYSBkYXRhIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCWlmICghaWNsKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTVQ5VDAzMSBkcml2ZXIgbmVlZHMgcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzM3LDIzICs3NjksMTcgQEAKIAlpZiAoIW10OXQwMzEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbXQ5dDAzMS0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIG10OXQwMzEpOworCXY0bDJfaTJjX3N1YmRldl9pbml0KCZtdDl0MDMxLT5zdWJkZXYsIGNsaWVudCwgJm10OXQwMzFfc3ViZGV2X29wcyk7CiAKIAkvKiBTZWNvbmQgc3RhZ2UgcHJvYmUgLSB3aGVuIGEgY2FwdHVyZSBhZGFwdGVyIGlzIHRoZXJlICovCi0JaWNkID0gJm10OXQwMzEtPmljZDsKLQlpY2QtPm9wcwk9ICZtdDl0MDMxX29wczsKLQlpY2QtPmNvbnRyb2wJPSAmY2xpZW50LT5kZXY7Ci0JaWNkLT54X21pbgk9IE1UOVQwMzFfQ09MVU1OX1NLSVA7Ci0JaWNkLT55X21pbgk9IE1UOVQwMzFfUk9XX1NLSVA7Ci0JaWNkLT54X2N1cnJlbnQJPSBpY2QtPnhfbWluOwotCWljZC0+eV9jdXJyZW50CT0gaWNkLT55X21pbjsKLQlpY2QtPndpZHRoX21pbgk9IE1UOVQwMzFfTUlOX1dJRFRIOwotCWljZC0+d2lkdGhfbWF4CT0gTVQ5VDAzMV9NQVhfV0lEVEg7Ci0JaWNkLT5oZWlnaHRfbWluCT0gTVQ5VDAzMV9NSU5fSEVJR0hUOwotCWljZC0+aGVpZ2h0X21heAk9IE1UOVQwMzFfTUFYX0hFSUdIVDsKLQlpY2QtPnlfc2tpcF90b3AJPSAwOwotCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKKwlpY2QtPm9wcwkJPSAmbXQ5dDAzMV9vcHM7CisJaWNkLT55X3NraXBfdG9wCQk9IDA7CisKKwltdDl0MDMxLT5yZWN0LmxlZnQJPSBNVDlUMDMxX0NPTFVNTl9TS0lQOworCW10OXQwMzEtPnJlY3QudG9wCT0gTVQ5VDAzMV9ST1dfU0tJUDsKKwltdDl0MDMxLT5yZWN0LndpZHRoCT0gTVQ5VDAzMV9NQVhfV0lEVEg7CisJbXQ5dDAzMS0+cmVjdC5oZWlnaHQJPSBNVDlUMDMxX01BWF9IRUlHSFQ7CisKIAkvKiBTaW11bGF0ZWQgYXV0b2V4cG9zdXJlLiBJZiBlbmFibGVkLCB3ZSBjYWxjdWxhdGUgc2h1dHRlciB3aWR0aAogCSAqIG91cnNlbHZlcyBpbiB0aGUgZHJpdmVyIGJhc2VkIG9uIHZlcnRpY2FsIGJsYW5raW5nIGFuZCBmcmFtZSB3aWR0aCAqLwogCW10OXQwMzEtPmF1dG9leHBvc3VyZSA9IDE7CkBAIC03NjEsMjQgKzc4NywyOSBAQAogCW10OXQwMzEtPnhza2lwID0gMTsKIAltdDl0MDMxLT55c2tpcCA9IDE7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOwotCWlmIChyZXQpCi0JCWdvdG8gZWlzZHI7CisJbXQ5dDAzMV9pZGxlKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSBtdDl0MDMxX3ZpZGVvX3Byb2JlKGNsaWVudCk7CiAKLWVpc2RyOgotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwotCWtmcmVlKG10OXQwMzEpOworCW10OXQwMzFfZGlzYWJsZShjbGllbnQpOworCisJaWYgKHJldCkgeworCQlpY2QtPm9wcyA9IE5VTEw7CisJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCQlrZnJlZShtdDl0MDMxKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10OXQwMzFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZtdDl0MDMxLT5pY2QpOworCWljZC0+b3BzID0gTlVMTDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwljbGllbnQtPmRyaXZlciA9IE5VTEw7CiAJa2ZyZWUobXQ5dDAzMSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKaW5kZXggZGJkY2M4Ni4uOTk1NjA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKQEAgLTE0LDEzICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAogLyogbXQ5djAyMiBpMmMgYWRkcmVzcyAweDQ4LCAweDRjLCAweDU4LCAweDVjCi0gKiBUaGUgcGxhdGZvcm0gaGFzIHRvIGRlZmluZSBpMmNfYm9hcmRfaW5mbwotICogYW5kIGNhbGwgaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oKSAqLworICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgY3RydWN0IGkyY19ib2FyZF9pbmZvIG9iamVjdHMgYW5kIGxpbmsgdG8gdGhlbQorICogZnJvbSBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICovCiAKIHN0YXRpYyBjaGFyICpzZW5zb3JfdHlwZTsKIG1vZHVsZV9wYXJhbShzZW5zb3JfdHlwZSwgY2hhcnAsIFNfSVJVR08pOwpAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBNVDlWMDIyX1BJWEVMX09QRVJBVElPTl9NT0RFCTB4MGYKICNkZWZpbmUgTVQ5VjAyMl9MRURfT1VUX0NPTlRST0wJCTB4MWIKICNkZWZpbmUgTVQ5VjAyMl9BRENfTU9ERV9DT05UUk9MCTB4MWMKLSNkZWZpbmUgTVQ5VjAyMl9BTkFMT0dfR0FJTgkJMHgzNAorI2RlZmluZSBNVDlWMDIyX0FOQUxPR19HQUlOCQkweDM1CiAjZGVmaW5lIE1UOVYwMjJfQkxBQ0tfTEVWRUxfQ0FMSUJfQ1RSTAkweDQ3CiAjZGVmaW5lIE1UOVYwMjJfUElYQ0xLX0ZWX0xWCQkweDc0CiAjZGVmaW5lIE1UOVYwMjJfRElHSVRBTF9URVNUX1BBVFRFUk4JMHg3ZgpAQCAtNTUsNiArNTUsMTMgQEAKIC8qIFByb2dyZXNzaXZlIHNjYW4sIG1hc3RlciwgZGVmYXVsdHMgKi8KICNkZWZpbmUgTVQ5VjAyMl9DSElQX0NPTlRST0xfREVGQVVMVAkweDE4OAogCisjZGVmaW5lIE1UOVYwMjJfTUFYX1dJRFRICQk3NTIKKyNkZWZpbmUgTVQ5VjAyMl9NQVhfSEVJR0hUCQk0ODAKKyNkZWZpbmUgTVQ5VjAyMl9NSU5fV0lEVEgJCTQ4CisjZGVmaW5lIE1UOVYwMjJfTUlOX0hFSUdIVAkJMzIKKyNkZWZpbmUgTVQ5VjAyMl9DT0xVTU5fU0tJUAkJMQorI2RlZmluZSBNVDlWMDIyX1JPV19TS0lQCQk0CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBtdDl2MDIyX2NvbG91cl9mb3JtYXRzW10gPSB7CiAJLyogT3JkZXIgaW1wb3J0YW50OiBmaXJzdCBuYXRpdmVseSBzdXBwb3J0ZWQsCiAJICogc2Vjb25kIHN1cHBvcnRlZCB3aXRoIGEgR1BJTyBleHRlbmRlciAqLwpAQCAtODUsMTIgKzkyLDE4IEBACiB9OwogCiBzdHJ1Y3QgbXQ5djAyMiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOworCXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0OwkvKiBTZW5zb3Igd2luZG93ICovCisJX191MzIgZm91cmNjOwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlWMDIyKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCiAJdTE2IGNoaXBfY29udHJvbDsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXQ5djAyMiAqdG9fbXQ5djAyMihjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBjb250YWluZXJfb2YoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIHN0cnVjdCBtdDl2MDIyLCBzdWJkZXYpOworfQorCiBzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4IHJlZykKIHsKIAlzMzIgZGF0YSA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7CkBAIC0xMjUsMjkgKzEzOCwxMSBAQAogCXJldHVybiByZWdfd3JpdGUoY2xpZW50LCByZWcsIHJldCAmIH5kYXRhKTsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OXYwMjJfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7Ci0Jc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOwogCWludCByZXQ7CiAKLQlpZiAoaWNsLT5wb3dlcikgewotCQlyZXQgPSBpY2wtPnBvd2VyKCZjbGllbnQtPmRldiwgMSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGljZC0+dmRldi0+cGFyZW50LAotCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb24gdGhlIGNhbWVyYS5cbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCS8qCi0JICogVGhlIGNhbWVyYSBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBvbiwgd2UgaGFyZC1yZXNldCBpdCBhZGRpdGlvbmFsbHksCi0JICogaWYgYXZhaWxhYmxlLiBTb2Z0IHJlc2V0IGlzIGRvbmUgaW4gdmlkZW9fcHJvYmUoKS4KLQkgKi8KLQlpZiAoaWNsLT5yZXNldCkKLQkJaWNsLT5yZXNldCgmY2xpZW50LT5kZXYpOwotCiAJLyogQWxtb3N0IHRoZSBkZWZhdWx0IG1vZGU6IG1hc3RlciwgcGFyYWxsZWwsIHNpbXVsdGFuZW91cywgYW5kIGFuCiAJICogdW5kb2N1bWVudGVkIGJpdCAweDIwMCwgd2hpY2ggaXMgcHJlc2VudCBpbiB0YWJsZSA3LCBidXQgbm90IGluIDgsCiAJICogcGx1cyBzbmFwc2hvdCBtb2RlIHRvIGRpc2FibGUgc2NhbiBmb3Igbm93ICovCkBAIC0xNjEsNiArMTU2LDEwIEBACiAJCS8qIEFFQywgQUdDIG9uICovCiAJCXJldCA9IHJlZ19zZXQoY2xpZW50LCBNVDlWMDIyX0FFQ19BR0NfRU5BQkxFLCAweDMpOwogCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX0FOQUxPR19HQUlOLCAxNik7CisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfVE9UQUxfU0hVVFRFUl9XSURUSCwgNDgwKTsKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9NQVhfVE9UQUxfU0hVVFRFUl9XSURUSCwgNDgwKTsKIAlpZiAoIXJldCkKIAkJLyogZGVmYXVsdCAtIGF1dG8gKi8KQEAgLTE3MSwzNyArMTcwLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OXYwMjJfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OXYwMjItPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOwogCi0JaWYgKGljbC0+cG93ZXIpCi0JCWljbC0+cG93ZXIoJm10OXYwMjItPmNsaWVudC0+ZGV2LCAwKTsKKwlpZiAoZW5hYmxlKQorCQkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KKwkJbXQ5djAyMi0+Y2hpcF9jb250cm9sICY9IH4weDEwOworCWVsc2UKKwkJLyogU3dpdGNoIHRvIHNuYXBzaG90IG1vZGUgKi8KKwkJbXQ5djAyMi0+Y2hpcF9jb250cm9sIHw9IDB4MTA7CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtdDl2MDIyX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwotCS8qIFN3aXRjaCB0byBtYXN0ZXIgIm5vcm1hbCIgbW9kZSAqLwotCW10OXYwMjItPmNoaXBfY29udHJvbCAmPSB+MHgxMDsKLQlpZiAocmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9DSElQX0NPTlRST0wsCi0JCSAgICAgIG10OXYwMjItPmNoaXBfY29udHJvbCkgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtdDl2MDIyX3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7Ci0JLyogU3dpdGNoIHRvIHNuYXBzaG90IG1vZGUgKi8KLQltdDl2MDIyLT5jaGlwX2NvbnRyb2wgfD0gMHgxMDsKLQlpZiAocmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9DSElQX0NPTlRST0wsCi0JCSAgICAgIG10OXYwMjItPmNoaXBfY29udHJvbCkgPCAwKQorCWlmIChyZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX0NISVBfQ09OVFJPTCwgbXQ5djAyMi0+Y2hpcF9jb250cm9sKSA8IDApCiAJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQpAQCAtMjA5LDkgKzE5MCw5IEBACiBzdGF0aWMgaW50IG10OXYwMjJfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudCh0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKSk7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJdW5zaWduZWQgaW50IHdpZHRoX2ZsYWcgPSBmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOwogCWludCByZXQ7CiAJdTE2IHBpeGNsayA9IDA7CkBAIC0yNTUsNyArMjM2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiQ2FsY3VsYXRlZCBwaXhjbGsgMHgleCwgY2hpcCBjb250cm9sIDB4JXhcbiIsCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJDYWxjdWxhdGVkIHBpeGNsayAweCV4LCBjaGlwIGNvbnRyb2wgMHgleFxuIiwKIAkJcGl4Y2xrLCBtdDl2MDIyLT5jaGlwX2NvbnRyb2wpOwogCiAJcmV0dXJuIDA7CkBAIC0yNjMsOCArMjQ0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5djAyMl9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnOwogCiAJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQpAQCAtMjgwLDYwICsyNjAsMTIxIEBACiAJCXdpZHRoX2ZsYWc7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBtdDl2MDIyX3NfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IGEtPmM7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQ7CiAKKwkvKiBCYXllciBmb3JtYXQgLSBldmVuIHNpemUgbGVuZ3RocyAqLworCWlmIChtdDl2MDIyLT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCB8fAorCSAgICBtdDl2MDIyLT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpIHsKKwkJcmVjdC53aWR0aAk9IEFMSUdOKHJlY3Qud2lkdGgsIDIpOworCQlyZWN0LmhlaWdodAk9IEFMSUdOKHJlY3QuaGVpZ2h0LCAyKTsKKwkJLyogTGV0IHRoZSB1c2VyIHBsYXkgd2l0aCB0aGUgc3RhcnRpbmcgcGl4ZWwgKi8KKwl9CisKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QubGVmdCwgJnJlY3Qud2lkdGgsCisJCSAgICAgTVQ5VjAyMl9DT0xVTU5fU0tJUCwgTVQ5VjAyMl9NSU5fV0lEVEgsIE1UOVYwMjJfTUFYX1dJRFRIKTsKKworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC50b3AsICZyZWN0LmhlaWdodCwKKwkJICAgICBNVDlWMDIyX1JPV19TS0lQLCBNVDlWMDIyX01JTl9IRUlHSFQsIE1UOVYwMjJfTUFYX0hFSUdIVCk7CisKIAkvKiBMaWtlIGluIGV4YW1wbGUgYXBwLiBDb250cmFkaWN0cyB0aGUgZGF0YXNoZWV0IHRob3VnaCAqLwogCXJldCA9IHJlZ19yZWFkKGNsaWVudCwgTVQ5VjAyMl9BRUNfQUdDX0VOQUJMRSk7CiAJaWYgKHJldCA+PSAwKSB7CiAJCWlmIChyZXQgJiAxKSAvKiBBdXRvZXhwb3N1cmUgKi8KIAkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfTUFYX1RPVEFMX1NIVVRURVJfV0lEVEgsCi0JCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIDQzKTsKKwkJCQkJcmVjdC5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyA0Myk7CiAJCWVsc2UKIAkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfVE9UQUxfU0hVVFRFUl9XSURUSCwKLQkJCQkJcmVjdC0+aGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgNDMpOworCQkJCQlyZWN0LmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIDQzKTsKIAl9CiAJLyogU2V0dXAgZnJhbWUgZm9ybWF0OiBkZWZhdWx0cyBhcGFydCBmcm9tIHdpZHRoIGFuZCBoZWlnaHQgKi8KIAlpZiAoIXJldCkKLQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9DT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOworCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX0NPTFVNTl9TVEFSVCwgcmVjdC5sZWZ0KTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9ST1dfU1RBUlQsIHJlY3QtPnRvcCk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfUk9XX1NUQVJULCByZWN0LnRvcCk7CiAJaWYgKCFyZXQpCiAJCS8qIERlZmF1bHQgOTQsIFBoeXRlYyBkcml2ZXIgc2F5czoKIAkJICogIndpZHRoICsgaG9yaXpvbnRhbCBibGFuayA+PSA2NjAiICovCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfSE9SSVpPTlRBTF9CTEFOS0lORywKLQkJCQlyZWN0LT53aWR0aCA+IDY2MCAtIDQzID8gNDMgOgotCQkJCTY2MCAtIHJlY3QtPndpZHRoKTsKKwkJCQlyZWN0LndpZHRoID4gNjYwIC0gNDMgPyA0MyA6CisJCQkJNjYwIC0gcmVjdC53aWR0aCk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfVkVSVElDQUxfQkxBTktJTkcsIDQ1KTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9XSU5ET1dfV0lEVEgsIHJlY3QtPndpZHRoKTsKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9XSU5ET1dfV0lEVEgsIHJlY3Qud2lkdGgpOwogCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1dJTkRPV19IRUlHSFQsCi0JCQkJcmVjdC0+aGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wKTsKKwkJCQlyZWN0LmhlaWdodCArIGljZC0+eV9za2lwX3RvcCk7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiRnJhbWUgJXV4JXUgcGl4ZWxcbiIsIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiRnJhbWUgJXV4JXUgcGl4ZWxcbiIsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKworCW10OXYwMjItPnJlY3QgPSByZWN0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDl2MDIyX2dfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOworCisJYS0+Ywk9IG10OXYwMjItPnJlY3Q7CisJYS0+dHlwZQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXYwMjJfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCWEtPmJvdW5kcy5sZWZ0CQkJPSBNVDlWMDIyX0NPTFVNTl9TS0lQOworCWEtPmJvdW5kcy50b3AJCQk9IE1UOVYwMjJfUk9XX1NLSVA7CisJYS0+Ym91bmRzLndpZHRoCQkJPSBNVDlWMDIyX01BWF9XSURUSDsKKwlhLT5ib3VuZHMuaGVpZ2h0CQk9IE1UOVYwMjJfTUFYX0hFSUdIVDsKKwlhLT5kZWZyZWN0CQkJPSBhLT5ib3VuZHM7CisJYS0+dHlwZQkJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlhLT5waXhlbGFzcGVjdC5udW1lcmF0b3IJPSAxOworCWEtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yCT0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXYwMjJfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKLQlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7Ci0JCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCi0JCS50b3AJPSBpY2QtPnlfY3VycmVudCwKLQkJLndpZHRoCT0gcGl4LT53aWR0aCwKLQkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCisJcGl4LT53aWR0aAkJPSBtdDl2MDIyLT5yZWN0LndpZHRoOworCXBpeC0+aGVpZ2h0CQk9IG10OXYwMjItPnJlY3QuaGVpZ2h0OworCXBpeC0+cGl4ZWxmb3JtYXQJPSBtdDl2MDIyLT5mb3VyY2M7CisJcGl4LT5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkU7CisJcGl4LT5jb2xvcnNwYWNlCQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5djAyMl9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX2Nyb3AgYSA9IHsKKwkJLmMgPSB7CisJCQkubGVmdAk9IG10OXYwMjItPnJlY3QubGVmdCwKKwkJCS50b3AJPSBtdDl2MDIyLT5yZWN0LnRvcCwKKwkJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJCX0sCiAJfTsKKwlpbnQgcmV0OwogCiAJLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIHZlcmlmaWVkIHBlciBjYWxsIHRvCiAJICogaWNkLT50cnlfZm10KCksIGRhdGF3aWR0aCBpcyBmcm9tIG91ciBzdXBwb3J0ZWQgZm9ybWF0IGxpc3QgKi8KQEAgLTM1NiwzMCArMzk3LDQyIEBACiAJfQogCiAJLyogTm8gc3VwcG9ydCBmb3Igc2NhbGluZyBvbiB0aGlzIGNhbWVyYSwganVzdCBjcm9wLiAqLwotCXJldHVybiBtdDl2MDIyX3NldF9jcm9wKGljZCwgJnJlY3QpOworCXJldCA9IG10OXYwMjJfc19jcm9wKHNkLCAmYSk7CisJaWYgKCFyZXQpIHsKKwkJcGl4LT53aWR0aCA9IG10OXYwMjItPnJlY3Qud2lkdGg7CisJCXBpeC0+aGVpZ2h0ID0gbXQ5djAyMi0+cmVjdC5oZWlnaHQ7CisJCW10OXYwMjItPmZvdXJjYyA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IG10OXYwMjJfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlpbnQgYWxpZ24gPSBwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKKwkJcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKIAotCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcGl4LT53aWR0aCwgNDgsIDc1MiwgMiAvKiA/ICovLAotCQkJICAgICAgJnBpeC0+aGVpZ2h0LCAzMiArIGljZC0+eV9za2lwX3RvcCwKLQkJCSAgICAgIDQ4MCArIGljZC0+eV9za2lwX3RvcCwgMCwgMCk7CisJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZwaXgtPndpZHRoLCBNVDlWMDIyX01JTl9XSURUSCwKKwkJTVQ5VjAyMl9NQVhfV0lEVEgsIGFsaWduLAorCQkmcGl4LT5oZWlnaHQsIE1UOVYwMjJfTUlOX0hFSUdIVCArIGljZC0+eV9za2lwX3RvcCwKKwkJTVQ5VjAyMl9NQVhfSEVJR0hUICsgaWNkLT55X3NraXBfdG9wLCBhbGlnbiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX2dldF9jaGlwX2lkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKK3N0YXRpYyBpbnQgbXQ5djAyMl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7Ci0Jc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7CiAKIAlpZiAoaWQtPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpZC0+bWF0Y2guYWRkciAhPSBtdDl2MDIyLT5jbGllbnQtPmFkZHIpCisJaWYgKGlkLT5tYXRjaC5hZGRyICE9IGNsaWVudC0+YWRkcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZC0+aWRlbnQJPSBtdDl2MDIyLT5tb2RlbDsKQEAgLTM4OSwxMCArNDQyLDEwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgaW50IG10OXYwMjJfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQorc3RhdGljIGludCBtdDl2MDIyX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGljZC0+Y29udHJvbCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCiAJaWYgKHJlZy0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQwOSwxMCArNDYyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IG10OXYwMjJfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAKIAlpZiAocmVnLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDgxLDQxICs1MzQsMjIgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IG10OXYwMjJfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIHZvaWQgbXQ5djAyMl92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotc3RhdGljIGludCBtdDl2MDIyX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwotc3RhdGljIGludCBtdDl2MDIyX3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwotCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIG10OXYwMjJfb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQkJPSBtdDl2MDIyX3ZpZGVvX3Byb2JlLAotCS5yZW1vdmUJCQk9IG10OXYwMjJfdmlkZW9fcmVtb3ZlLAotCS5pbml0CQkJPSBtdDl2MDIyX2luaXQsCi0JLnJlbGVhc2UJCT0gbXQ5djAyMl9yZWxlYXNlLAotCS5zdGFydF9jYXB0dXJlCQk9IG10OXYwMjJfc3RhcnRfY2FwdHVyZSwKLQkuc3RvcF9jYXB0dXJlCQk9IG10OXYwMjJfc3RvcF9jYXB0dXJlLAotCS5zZXRfY3JvcAkJPSBtdDl2MDIyX3NldF9jcm9wLAotCS5zZXRfZm10CQk9IG10OXYwMjJfc2V0X2ZtdCwKLQkudHJ5X2ZtdAkJPSBtdDl2MDIyX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5djAyMl9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBtdDl2MDIyX3F1ZXJ5X2J1c19wYXJhbSwKIAkuY29udHJvbHMJCT0gbXQ5djAyMl9jb250cm9scywKIAkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUobXQ5djAyMl9jb250cm9scyksCi0JLmdldF9jb250cm9sCQk9IG10OXYwMjJfZ2V0X2NvbnRyb2wsCi0JLnNldF9jb250cm9sCQk9IG10OXYwMjJfc2V0X2NvbnRyb2wsCi0JLmdldF9jaGlwX2lkCQk9IG10OXYwMjJfZ2V0X2NoaXBfaWQsCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCS5nZXRfcmVnaXN0ZXIJCT0gbXQ5djAyMl9nZXRfcmVnaXN0ZXIsCi0JLnNldF9yZWdpc3RlcgkJPSBtdDl2MDIyX3NldF9yZWdpc3RlciwKLSNlbmRpZgogfTsKIAotc3RhdGljIGludCBtdDl2MDIyX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IG10OXYwMjJfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKKwl1bnNpZ25lZCBsb25nIHJhbmdlOwogCWludCBkYXRhOwogCisJcWN0cmwgPSBzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoJm10OXYwMjJfb3BzLCBjdHJsLT5pZCk7CisKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKIAkJZGF0YSA9IHJlZ19yZWFkKGNsaWVudCwgTVQ5VjAyMl9SRUFEX01PREUpOwpAQCAtNTQxLDE5ICs1NzUsMzUgQEAKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9ICEhKGRhdGEgJiAweDIpOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWRhdGEgPSByZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfQU5BTE9HX0dBSU4pOworCQlpZiAoZGF0YSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCQlyYW5nZSA9IHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW07CisJCWN0cmwtPnZhbHVlID0gKChkYXRhIC0gMTYpICogcmFuZ2UgKyAyNCkgLyA0OCArIHFjdHJsLT5taW5pbXVtOworCisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWRhdGEgPSByZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfVE9UQUxfU0hVVFRFUl9XSURUSCk7CisJCWlmIChkYXRhIDwgMCkKKwkJCXJldHVybiAtRUlPOworCisJCXJhbmdlID0gcWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bTsKKwkJY3RybC0+dmFsdWUgPSAoKGRhdGEgLSAxKSAqIHJhbmdlICsgMjM5KSAvIDQ3OSArIHFjdHJsLT5taW5pbXVtOworCisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IG10OXYwMjJfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJaW50IGRhdGE7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaWNkLT5jb250cm9sKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKIAogCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKCZtdDl2MDIyX29wcywgY3RybC0+aWQpOwotCiAJaWYgKCFxY3RybCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU4MCwxMiArNjMwLDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQllbHNlIHsKIAkJCXVuc2lnbmVkIGxvbmcgcmFuZ2UgPSBxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtOwotCQkJLyogRGF0YXNoZWV0IHNheXMgMTYgdG8gNjQuIGF1dG9nYWluIG9ubHkgd29ya3MgcHJvcGVybHkKLQkJCSAqIGFmdGVyIHNldHRpbmcgZ2FpbiB0byBtYXhpbXVtIDE0LiBMYXJnZXIgdmFsdWVzCi0JCQkgKiBwcm9kdWNlICJ3aGl0ZSBmbHkiIG5vaXNlIGVmZmVjdC4gT24gdGhlIHdob2xlLAotCQkJICogbWFudWFsbHkgc2V0dGluZyBhbmFsb2cgZ2FpbiBkb2VzIG5vIGdvb2QuICovCisJCQkvKiBWYWxpZCB2YWx1ZXMgMTYgdG8gNjQsIDMyIHRvIDY0IG11c3QgYmUgZXZlbi4gKi8KIAkJCXVuc2lnbmVkIGxvbmcgZ2FpbiA9ICgoY3RybC0+dmFsdWUgLSBxY3RybC0+bWluaW11bSkgKgotCQkJCQkgICAgICAxMCArIHJhbmdlIC8gMikgLyByYW5nZSArIDQ7CisJCQkJCSAgICAgIDQ4ICsgcmFuZ2UgLyAyKSAvIHJhbmdlICsgMTY7CiAJCQlpZiAoZ2FpbiA+PSAzMikKIAkJCQlnYWluICY9IH4xOwogCQkJLyogVGhlIHVzZXIgd2FudHMgdG8gc2V0IGdhaW4gbWFudWFsbHksIGhvcGUsIHNoZQpAQCAtNTk0LDExICs2NDEsMTAgQEAKIAkJCWlmIChyZWdfY2xlYXIoY2xpZW50LCBNVDlWMDIyX0FFQ19BR0NfRU5BQkxFLCAweDIpIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKIAotCQkJZGV2X2luZm8oJmljZC0+ZGV2LCAiU2V0dGluZyBnYWluIGZyb20gJWQgdG8gJWx1XG4iLAotCQkJCSByZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfQU5BTE9HX0dBSU4pLCBnYWluKTsKKwkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0dGluZyBnYWluIGZyb20gJWQgdG8gJWx1XG4iLAorCQkJCXJlZ19yZWFkKGNsaWVudCwgTVQ5VjAyMl9BTkFMT0dfR0FJTiksIGdhaW4pOwogCQkJaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfQU5BTE9HX0dBSU4sIGdhaW4pIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCWljZC0+Z2FpbiA9IGN0cmwtPnZhbHVlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CkBAIC02MTUsMTMgKzY2MSwxMiBAQAogCQkJaWYgKHJlZ19jbGVhcihjbGllbnQsIE1UOVYwMjJfQUVDX0FHQ19FTkFCTEUsIDB4MSkgPCAwKQogCQkJCXJldHVybiAtRUlPOwogCi0JCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNodXR0ZXIgd2lkdGggZnJvbSAlZCB0byAlbHVcbiIsCisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNodXR0ZXIgd2lkdGggZnJvbSAlZCB0byAlbHVcbiIsCiAJCQkJcmVnX3JlYWQoY2xpZW50LCBNVDlWMDIyX1RPVEFMX1NIVVRURVJfV0lEVEgpLAogCQkJCXNodXR0ZXIpOwogCQkJaWYgKHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfVE9UQUxfU0hVVFRFUl9XSURUSCwKIAkJCQkgICAgICBzaHV0dGVyKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlpY2QtPmV4cG9zdXJlID0gY3RybC0+dmFsdWU7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKQEAgLTY0NiwxMSArNjkxLDExIEBACiAKIC8qIEludGVyZmFjZSBhY3RpdmUsIGNhbiB1c2UgaTJjLiBJZiBpdCBmYWlscywgaXQgY2FuIGluZGVlZCBtZWFuLCB0aGF0CiAgKiB0aGlzIHdhc24ndCBvdXIgY2FwdHVyZSBpbnRlcmZhY2UsIHNvLCB3ZSB3YWl0IGZvciB0aGUgcmlnaHQgb25lICovCi1zdGF0aWMgaW50IG10OXYwMjJfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OXYwMjJfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpY2QtPmNvbnRyb2wpOwotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAlzMzIgZGF0YTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02NjUsNyArNzEwLDcgQEAKIAkvKiBtdXN0IGJlIDB4MTMxMSBvciAweDEzMTMgKi8KIAlpZiAoZGF0YSAhPSAweDEzMTEgJiYgZGF0YSAhPSAweDEzMTMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZGV2X2luZm8oJmljZC0+ZGV2LCAiTm8gTVQ5VjAyMiBkZXRlY3RlZCwgSUQgcmVnaXN0ZXIgMHgleFxuIiwKKwkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiTm8gTVQ5VjAyMiBmb3VuZCwgSUQgcmVnaXN0ZXIgMHgleFxuIiwKIAkJCSBkYXRhKTsKIAkJZ290byBlaTJjOwogCX0KQEAgLTY3Nyw3ICs3MjIsOSBAQAogCS8qIDE1IGNsb2NrIGN5Y2xlcyAqLwogCXVkZWxheSgyMDApOwogCWlmIChyZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfUkVTRVQpKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiUmVzZXR0aW5nIE1UOVYwMjIgZmFpbGVkIVxuIik7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUmVzZXR0aW5nIE1UOVYwMjIgZmFpbGVkIVxuIik7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0ID0gLUVJTzsKIAkJZ290byBlaTJjOwogCX0KIApAQCAtNjk0LDcgKzc0MSw3IEBACiAJfQogCiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZWlzaXM7CisJCWdvdG8gZWkyYzsKIAogCWljZC0+bnVtX2Zvcm1hdHMgPSAwOwogCkBAIC03MTYsNDIgKzc2Myw3MCBAQAogCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KQogCQlpY2QtPm51bV9mb3JtYXRzKys7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZWlzaXM7CisJbXQ5djAyMi0+Zm91cmNjID0gaWNkLT5mb3JtYXRzLT5mb3VyY2M7CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJEZXRlY3RlZCBhIE1UOVYwMjIgY2hpcCBJRCAleCwgJXMgc2Vuc29yXG4iLAorCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkRldGVjdGVkIGEgTVQ5VjAyMiBjaGlwIElEICV4LCAlcyBzZW5zb3JcbiIsCiAJCSBkYXRhLCBtdDl2MDIyLT5tb2RlbCA9PSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0gPwogCQkgIm1vbm9jaHJvbWUiIDogImNvbG91ciIpOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gbXQ5djAyMl9pbml0KGNsaWVudCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpc2UgdGhlIGNhbWVyYVxuIik7CiAKLWVpc2lzOgogZWkyYzoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBtdDl2MDIyX3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OXYwMjItPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIlZpZGVvICV4IHJlbW92ZWQ6ICVwLCAlcFxuIiwgbXQ5djAyMi0+Y2xpZW50LT5hZGRyLAorCWRldl9kYmcoJmljZC0+ZGV2LCAiVmlkZW8gcmVtb3ZlZDogJXAsICVwXG4iLAogCQlpY2QtPmRldi5wYXJlbnQsIGljZC0+dmRldik7Ci0Jc29jX2NhbWVyYV92aWRlb19zdG9wKGljZCk7CiAJaWYgKGljbC0+ZnJlZV9idXMpCiAJCWljbC0+ZnJlZV9idXMoaWNsKTsKIH0KIAorc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtdDl2MDIyX3N1YmRldl9jb3JlX29wcyA9IHsKKwkuZ19jdHJsCQk9IG10OXYwMjJfZ19jdHJsLAorCS5zX2N0cmwJCT0gbXQ5djAyMl9zX2N0cmwsCisJLmdfY2hpcF9pZGVudAk9IG10OXYwMjJfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3Rlcgk9IG10OXYwMjJfZ19yZWdpc3RlciwKKwkuc19yZWdpc3Rlcgk9IG10OXYwMjJfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgbXQ5djAyMl9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX3N0cmVhbQk9IG10OXYwMjJfc19zdHJlYW0sCisJLnNfZm10CQk9IG10OXYwMjJfc19mbXQsCisJLmdfZm10CQk9IG10OXYwMjJfZ19mbXQsCisJLnRyeV9mbXQJPSBtdDl2MDIyX3RyeV9mbXQsCisJLnNfY3JvcAkJPSBtdDl2MDIyX3NfY3JvcCwKKwkuZ19jcm9wCQk9IG10OXYwMjJfZ19jcm9wLAorCS5jcm9wY2FwCT0gbXQ5djAyMl9jcm9wY2FwLAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5djAyMl9zdWJkZXZfb3BzID0geworCS5jb3JlCT0gJm10OXYwMjJfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZtdDl2MDIyX3N1YmRldl92aWRlb19vcHMsCit9OworCiBzdGF0aWMgaW50IG10OXYwMjJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQogewogCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsOwogCWludCByZXQ7CiAKKwlpZiAoIWljZCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOVYwMjI6IG1pc3Npbmcgc29jLWNhbWVyYSBkYXRhIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCWlmICghaWNsKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTVQ5VjAyMiBkcml2ZXIgbmVlZHMgcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzY3LDQwICs4NDIsNDEgQEAKIAlpZiAoIW10OXYwMjIpCiAJCXJldHVybiAtRU5PTUVNOwogCisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJm10OXYwMjItPnN1YmRldiwgY2xpZW50LCAmbXQ5djAyMl9zdWJkZXZfb3BzKTsKKwogCW10OXYwMjItPmNoaXBfY29udHJvbCA9IE1UOVYwMjJfQ0hJUF9DT05UUk9MX0RFRkFVTFQ7Ci0JbXQ5djAyMi0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIG10OXYwMjIpOwogCi0JaWNkID0gJm10OXYwMjItPmljZDsKLQlpY2QtPm9wcwk9ICZtdDl2MDIyX29wczsKLQlpY2QtPmNvbnRyb2wJPSAmY2xpZW50LT5kZXY7Ci0JaWNkLT54X21pbgk9IDE7Ci0JaWNkLT55X21pbgk9IDQ7Ci0JaWNkLT54X2N1cnJlbnQJPSAxOwotCWljZC0+eV9jdXJyZW50CT0gNDsKLQlpY2QtPndpZHRoX21pbgk9IDQ4OwotCWljZC0+d2lkdGhfbWF4CT0gNzUyOwotCWljZC0+aGVpZ2h0X21pbgk9IDMyOwotCWljZC0+aGVpZ2h0X21heAk9IDQ4MDsKLQlpY2QtPnlfc2tpcF90b3AJPSAxOwotCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKKwlpY2QtPm9wcwkJPSAmbXQ5djAyMl9vcHM7CisJLyoKKwkgKiBNVDlWMDIyIF9yZWFsbHlfIGNvcnJ1cHRzIHRoZSBmaXJzdCByZWFkIG91dCBsaW5lLgorCSAqIFRPRE86IHZlcmlmeSBvbiBpLk1YMzEKKwkgKi8KKwlpY2QtPnlfc2tpcF90b3AJCT0gMTsKIAotCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlaXNkcjsKKwltdDl2MDIyLT5yZWN0LmxlZnQJPSBNVDlWMDIyX0NPTFVNTl9TS0lQOworCW10OXYwMjItPnJlY3QudG9wCT0gTVQ5VjAyMl9ST1dfU0tJUDsKKwltdDl2MDIyLT5yZWN0LndpZHRoCT0gTVQ5VjAyMl9NQVhfV0lEVEg7CisJbXQ5djAyMi0+cmVjdC5oZWlnaHQJPSBNVDlWMDIyX01BWF9IRUlHSFQ7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSBtdDl2MDIyX3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50KTsKKwlpZiAocmV0KSB7CisJCWljZC0+b3BzID0gTlVMTDsKKwkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJCWtmcmVlKG10OXYwMjIpOworCX0KIAotZWlzZHI6Ci0Ja2ZyZWUobXQ5djAyMik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDl2MDIyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0Jc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmbXQ5djAyMi0+aWNkKTsKKwlpY2QtPm9wcyA9IE5VTEw7CisJbXQ5djAyMl92aWRlb19yZW1vdmUoaWNkKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwljbGllbnQtPmRyaXZlciA9IE5VTEw7CiAJa2ZyZWUobXQ5djAyMik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDFfY2FtZXJhLmMKaW5kZXggNzM2YzMxZC4uNWYzNzk1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teDFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDFfY2FtZXJhLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKIAotCSpzaXplID0gaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0ICoKKwkqc2l6ZSA9IGljZC0+dXNlcl93aWR0aCAqIGljZC0+dXNlcl9oZWlnaHQgKgogCQkoKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMyk7CiAKIAlpZiAoISpjb3VudCkKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXdoaWxlICgqc2l6ZSAqICpjb3VudCA+IE1BWF9WSURFT19NRU0gKiAxMDI0ICogMTAyNCkKIAkJKCpjb3VudCktLTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiY291bnQ9JWQsIHNpemU9JWRcbiIsICpjb3VudCwgKnNpemUpOworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiY291bnQ9JWQsIHNpemU9JWRcbiIsICpjb3VudCwgKnNpemUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCS8qIFRoaXMgd2FpdHMgdW50aWwgdGhpcyBidWZmZXIgaXMgb3V0IG9mIGRhbmdlciwgaS5lLiwgdW50aWwgaXQgaXMgbm8KQEAgLTE2NSw3ICsxNjUsNyBAQAogCXN0cnVjdCBteDFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBteDFfYnVmZmVyLCB2Yik7CiAJaW50IHJldDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJLyogQWRkZWQgbGlzdCBoZWFkIGluaXRpYWxpemF0aW9uIG9uIGFsbG9jICovCkBAIC0xNzgsMTIgKzE3OCwxMiBAQAogCWJ1Zi0+aW53b3JrID0gMTsKIAogCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8Ci0JICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8Ci0JICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPndpZHRoCSE9IGljZC0+dXNlcl93aWR0aCB8fAorCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+dXNlcl9oZWlnaHQgfHwKIAkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CiAJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKLQkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKLQkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+d2lkdGgJPSBpY2QtPnVzZXJfd2lkdGg7CisJCXZiLT5oZWlnaHQJPSBpY2QtPnVzZXJfaGVpZ2h0OwogCQl2Yi0+ZmllbGQJPSBmaWVsZDsKIAkJdmItPnN0YXRlCT0gVklERU9CVUZfTkVFRFNfSU5JVDsKIAl9CkBAIC0yMTYsMTAgKzIxNiwxMSBAQAogc3RhdGljIGludCBteDFfY2FtZXJhX3NldHVwX2RtYShzdHJ1Y3QgbXgxX2NhbWVyYV9kZXYgKnBjZGV2KQogewogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZidWYgPSAmcGNkZXYtPmFjdGl2ZS0+dmI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPmljZC0+ZGV2LnBhcmVudDsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KCFwY2Rldi0+YWN0aXZlKSkgewotCQlkZXZfZXJyKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJETUEgRW5kIElSUSB3aXRoIG5vIGFjdGl2ZSBidWZmZXJcbiIpOworCQlkZXZfZXJyKGRldiwgIkRNQSBFbmQgSVJRIHdpdGggbm8gYWN0aXZlIGJ1ZmZlclxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMjI5LDcgKzIzMCw3IEBACiAJCXZidWYtPnNpemUsIHBjZGV2LT5yZXMtPnN0YXJ0ICsKIAkJQ1NJUlhSLCBETUFfTU9ERV9SRUFEKTsKIAlpZiAodW5saWtlbHkocmV0KSkKLQkJZGV2X2VycihwY2Rldi0+c29jX2hvc3QuZGV2LCAiRmFpbGVkIHRvIHNldHVwIERNQSBzZyBsaXN0XG4iKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2V0dXAgRE1BIHNnIGxpc3RcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0Myw3ICsyNDQsNyBAQAogCXN0cnVjdCBteDFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IG14MV9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14MV9idWZmZXIsIHZiKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmcGNkZXYtPmNhcHR1cmUpOwpAQCAtMjcwLDIyICsyNzEsMjMgQEAKIAlzdHJ1Y3QgbXgxX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgxX2J1ZmZlciwgdmIpOwogI2lmZGVmIERFQlVHCiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJc3dpdGNoICh2Yi0+c3RhdGUpIHsKIAljYXNlIFZJREVPQlVGX0FDVElWRToKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAoYWN0aXZlKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzIChhY3RpdmUpXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWNhc2UgVklERU9CVUZfUVVFVUVEOgotCQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIChxdWV1ZWQpXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoZGV2LCAiJXMgKHF1ZXVlZClcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJY2FzZSBWSURFT0JVRl9QUkVQQVJFRDoKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAocHJlcGFyZWQpXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoZGV2LCAiJXMgKHByZXBhcmVkKVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh1bmtub3duKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzICh1bmtub3duKVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAl9CiAjZW5kaWYKQEAgLTMyNSw2ICszMjcsNyBAQAogc3RhdGljIHZvaWQgbXgxX2NhbWVyYV9kbWFfaXJxKGludCBjaGFubmVsLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBteDFfY2FtZXJhX2RldiAqcGNkZXYgPSBkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5pY2QtPmRldi5wYXJlbnQ7CiAJc3RydWN0IG14MV9idWZmZXIgKmJ1ZjsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzM0LDE0ICszMzcsMTQgQEAKIAlpbXhfZG1hX2Rpc2FibGUoY2hhbm5lbCk7CiAKIAlpZiAodW5saWtlbHkoIXBjZGV2LT5hY3RpdmUpKSB7Ci0JCWRldl9lcnIocGNkZXYtPnNvY19ob3N0LmRldiwgIkRNQSBFbmQgSVJRIHdpdGggbm8gYWN0aXZlIGJ1ZmZlclxuIik7CisJCWRldl9lcnIoZGV2LCAiRE1BIEVuZCBJUlEgd2l0aCBubyBhY3RpdmUgYnVmZmVyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJdmIgPSAmcGNkZXYtPmFjdGl2ZS0+dmI7CiAJYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgxX2J1ZmZlciwgdmIpOwogCVdBUk5fT04oYnVmLT5pbndvcmsgfHwgbGlzdF9lbXB0eSgmdmItPnF1ZXVlKSk7Ci0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJbXgxX2NhbWVyYV93YWtldXAocGNkZXYsIHZiLCBidWYpOwpAQCAtMzYyLDcgKzM2NSw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAotCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmbXgxX3ZpZGVvYnVmX29wcywgaWNpLT5kZXYsCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsICZteDFfdmlkZW9idWZfb3BzLCBpY2QtPmRldi5wYXJlbnQsCiAJCQkJCSZwY2Rldi0+bG9jaywKIAkJCQkJVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkJCQlWNEwyX0ZJRUxEX05PTkUsCkBAIC0zODEsOCArMzg0LDkgQEAKIAkgKiB0aGV5IGdldCBhIG5pY2UgT29wcyAqLwogCWRpdiA9IChsY2RjbGsgKyAyICogbWNsayAtIDEpIC8gKDIgKiBtY2xrKSAtIDE7CiAKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJTeXN0ZW0gY2xvY2sgJWx1a0h6LCB0YXJnZXQgZnJlcSAlZGtIeiwgIgotCQkiZGl2aXNvciAlbHVcbiIsIGxjZGNsayAvIDEwMDAsIG1jbGsgLyAxMDAwLCBkaXYpOworCWRldl9kYmcocGNkZXYtPmljZC0+ZGV2LnBhcmVudCwKKwkJIlN5c3RlbSBjbG9jayAlbHVrSHosIHRhcmdldCBmcmVxICVka0h6LCBkaXZpc29yICVsdVxuIiwKKwkJbGNkY2xrIC8gMTAwMCwgbWNsayAvIDEwMDAsIGRpdik7CiAKIAlyZXR1cm4gZGl2OwogfQpAQCAtMzkxLDcgKzM5NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGNzaWNyMSA9IENTSUNSMV9FTjsKIAotCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIkFjdGl2YXRlIGRldmljZVxuIik7CisJZGV2X2RiZyhwY2Rldi0+aWNkLT5kZXYucGFyZW50LCAiQWN0aXZhdGUgZGV2aWNlXG4iKTsKIAogCWNsa19lbmFibGUocGNkZXYtPmNsayk7CiAKQEAgLTQwNyw3ICs0MTEsNyBAQAogCiBzdGF0aWMgdm9pZCBteDFfY2FtZXJhX2RlYWN0aXZhdGUoc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldikKIHsKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJEZWFjdGl2YXRlIGRldmljZVxuIik7CisJZGV2X2RiZyhwY2Rldi0+aWNkLT5kZXYucGFyZW50LCAiRGVhY3RpdmF0ZSBkZXZpY2VcbiIpOwogCiAJLyogRGlzYWJsZSBhbGwgQ1NJIGludGVyZmFjZSAqLwogCV9fcmF3X3dyaXRlbCgweDAwLCBwY2Rldi0+YmFzZSArIENTSUNSMSk7CkBAIC00MjgsMTQgKzQzMiwxMiBAQAogCQlnb3RvIGVidXN5OwogCX0KIAotCWRldl9pbmZvKCZpY2QtPmRldiwgIk1YMSBDYW1lcmEgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKKwlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJNWDEgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKIAlteDFfY2FtZXJhX2FjdGl2YXRlKHBjZGV2KTsKLQlyZXQgPSBpY2QtPm9wcy0+aW5pdChpY2QpOwogCi0JaWYgKCFyZXQpCi0JCXBjZGV2LT5pY2QgPSBpY2Q7CisJcGNkZXYtPmljZCA9IGljZDsKIAogZWJ1c3k6CiAJcmV0dXJuIHJldDsKQEAgLTQ1NiwyMCArNDU4LDIwIEBACiAJLyogU3RvcCBETUEgZW5naW5lICovCiAJaW14X2RtYV9kaXNhYmxlKHBjZGV2LT5kbWFfY2hhbik7CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJNWDEgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKKwlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJNWDEgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAotCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7Ci0KIAlteDFfY2FtZXJhX2RlYWN0aXZhdGUocGNkZXYpOwogCiAJcGNkZXYtPmljZCA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgbXgxX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorCQkJICAgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7Ci0JcmV0dXJuIGljZC0+b3BzLT5zZXRfY3JvcChpY2QsIHJlY3QpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2Nyb3AsIGEpOwogfQogCiBzdGF0aWMgaW50IG14MV9jYW1lcmFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgX191MzIgcGl4Zm10KQpAQCAtNTM5LDE4ICs1NDEsMTkgQEAKIHN0YXRpYyBpbnQgbXgxX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJaW50IHJldDsKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKIAlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4LT5waXhlbGZvcm1hdCk7CisJCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsCisJCQkgcGl4LT5waXhlbGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgZik7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKIAlpZiAoIXJldCkgewogCQlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOwogCQlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OwpAQCAtNTYyLDEwICs1NjUsMTEgQEAKIHN0YXRpYyBpbnQgbXgxX2NhbWVyYV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCS8qIFRPRE86IGxpbWl0IHRvIG14MSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8KIAogCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KLQlyZXR1cm4gaWNkLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9mbXQsIGYpOwogfQogCiBzdGF0aWMgaW50IG14MV9jYW1lcmFfcmVxYnVmcyhzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YsCkBAIC03MzcsNyArNzQxLDcgQEAKIAlwY2Rldi0+c29jX2hvc3QuZHJ2X25hbWUJPSBEUklWRVJfTkFNRTsKIAlwY2Rldi0+c29jX2hvc3Qub3BzCQk9ICZteDFfc29jX2NhbWVyYV9ob3N0X29wczsKIAlwY2Rldi0+c29jX2hvc3QucHJpdgkJPSBwY2RldjsKLQlwY2Rldi0+c29jX2hvc3QuZGV2CQk9ICZwZGV2LT5kZXY7CisJcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldgk9ICZwZGV2LT5kZXY7CiAJcGNkZXYtPnNvY19ob3N0Lm5yCQk9IHBkZXYtPmlkOwogCWVyciA9IHNvY19jYW1lcmFfaG9zdF9yZWdpc3RlcigmcGNkZXYtPnNvY19ob3N0KTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYwppbmRleCA5NzcwY2I3Li5kZmYyZTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CiAKIAkvKgpAQCAtMjIwLDcgKzIyMCw3IEBACiAJaWYgKCFteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSpzaXplID0gaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0ICogYnBwOworCSpzaXplID0gaWNkLT51c2VyX3dpZHRoICogaWNkLT51c2VyX2hlaWdodCAqIGJwcDsKIAogCWlmICghKmNvdW50KQogCQkqY291bnQgPSAzMjsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCXN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciAqYnVmID0KIAkJY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIsIHZiKTsKIAkvKiBjdXJyZW50X2ZtdCBfbXVzdF8gYWx3YXlzIGJlIHNldCAqLwotCXNpemVfdCBuZXdfc2l6ZSA9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodCAqCisJc2l6ZV90IG5ld19zaXplID0gaWNkLT51c2VyX3dpZHRoICogaWNkLT51c2VyX2hlaWdodCAqCiAJCSgoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzKTsKIAlpbnQgcmV0OwogCkBAIC0yNTEsMTIgKzI1MSwxMiBAQAogCSAqLwogCiAJaWYgKGJ1Zi0+Zm10CSE9IGljZC0+Y3VycmVudF9mbXQgfHwKLQkgICAgdmItPndpZHRoCSE9IGljZC0+d2lkdGggfHwKLQkgICAgdmItPmhlaWdodAkhPSBpY2QtPmhlaWdodCB8fAorCSAgICB2Yi0+d2lkdGgJIT0gaWNkLT51c2VyX3dpZHRoIHx8CisJICAgIHZiLT5oZWlnaHQJIT0gaWNkLT51c2VyX2hlaWdodCB8fAogCSAgICB2Yi0+ZmllbGQJIT0gZmllbGQpIHsKIAkJYnVmLT5mbXQJPSBpY2QtPmN1cnJlbnRfZm10OwotCQl2Yi0+d2lkdGgJPSBpY2QtPndpZHRoOwotCQl2Yi0+aGVpZ2h0CT0gaWNkLT5oZWlnaHQ7CisJCXZiLT53aWR0aAk9IGljZC0+dXNlcl93aWR0aDsKKwkJdmItPmhlaWdodAk9IGljZC0+dXNlcl9oZWlnaHQ7CiAJCXZiLT5maWVsZAk9IGZpZWxkOwogCQlpZiAodmItPnN0YXRlICE9IFZJREVPQlVGX05FRURTX0lOSVQpCiAJCQlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKQEAgLTM1NCw5ICszNTQsOSBAQAogCiAJLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBvZiBvbmUgc2ctZWxlbWVudCAqLwogCXZpZGVvLT5vdXRfcGl4ZWxfZm10CT0gZm91cmNjX3RvX2lwdV9waXgoZGF0YV9mbXQtPmZvdXJjYyk7Ci0JdmlkZW8tPm91dF93aWR0aAk9IGljZC0+d2lkdGg7Ci0JdmlkZW8tPm91dF9oZWlnaHQJPSBpY2QtPmhlaWdodDsKLQl2aWRlby0+b3V0X3N0cmlkZQk9IGljZC0+d2lkdGg7CisJdmlkZW8tPm91dF93aWR0aAk9IGljZC0+dXNlcl93aWR0aDsKKwl2aWRlby0+b3V0X2hlaWdodAk9IGljZC0+dXNlcl9oZWlnaHQ7CisJdmlkZW8tPm91dF9zdHJpZGUJPSBpY2QtPnVzZXJfd2lkdGg7CiAKICNpZmRlZiBERUJVRwogCS8qIGhlbHBzIHRvIHNlZSB3aGF0IERNQSBhY3R1YWxseSBoYXMgd3JpdHRlbiAqLwpAQCAtMzc1LDcgKzM3NSw4IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZteDNfY2FtLT5sb2NrKTsKIAogCWNvb2tpZSA9IHR4ZC0+dHhfc3VibWl0KHR4ZCk7Ci0JZGV2X2RiZygmaWNkLT5kZXYsICJTdWJtaXR0ZWQgY29va2llICVkIERNQSAweCUwOHhcbiIsIGNvb2tpZSwgc2dfZG1hX2FkZHJlc3MoJmJ1Zi0+c2cpKTsKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlN1Ym1pdHRlZCBjb29raWUgJWQgRE1BIDB4JTA4eFxuIiwKKwkJY29va2llLCBzZ19kbWFfYWRkcmVzcygmYnVmLT5zZykpOwogCiAJc3Bpbl9sb2NrX2lycSgmbXgzX2NhbS0+bG9jayk7CiAKQEAgLTQwMiw5ICs0MDMsMTAgQEAKIAkJY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIsIHZiKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJSZWxlYXNlJXMgRE1BIDB4JTA4eCAoc3RhdGUgJWQpLCBxdWV1ZSAlc2VtcHR5XG4iLAorCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LAorCQkiUmVsZWFzZSVzIERNQSAweCUwOHggKHN0YXRlICVkKSwgcXVldWUgJXNlbXB0eVxuIiwKIAkJbXgzX2NhbS0+YWN0aXZlID09IGJ1ZiA/ICIgYWN0aXZlIiA6ICIiLCBzZ19kbWFfYWRkcmVzcygmYnVmLT5zZyksCi0JCSB2Yi0+c3RhdGUsIGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkgPyAiIiA6ICJub3QgIik7CisJCXZiLT5zdGF0ZSwgbGlzdF9lbXB0eSgmdmItPnF1ZXVlKSA/ICIiIDogIm5vdCAiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXgzX2NhbS0+bG9jaywgZmxhZ3MpOwogCWlmICgodmItPnN0YXRlID09IFZJREVPQlVGX0FDVElWRSB8fCB2Yi0+c3RhdGUgPT0gVklERU9CVUZfUVVFVUVEKSAmJgogCSAgICAhbGlzdF9lbXB0eSgmdmItPnF1ZXVlKSkgewpAQCAtNDMxLDcgKzQzMyw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OwogCi0JdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsICZteDNfdmlkZW9idWZfb3BzLCBpY2ktPmRldiwKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQocSwgJm14M192aWRlb2J1Zl9vcHMsIGljZC0+ZGV2LnBhcmVudCwKIAkJCQkgICAgICAgJm14M19jYW0tPmxvY2ssCiAJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCQkgICAgICAgVjRMMl9GSUVMRF9OT05FLApAQCAtNDg0LDcgKzQ4Niw3IEBACiAKIAljbGtfZW5hYmxlKG14M19jYW0tPmNsayk7CiAJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKG14M19jYW0tPmNsaywgbXgzX2NhbS0+bWNsayk7Ci0JZGV2X2RiZygmaWNkLT5kZXYsICJTZXQgU0VOU19DT05GIHRvICV4LCByYXRlICVsZFxuIiwgY29uZiwgcmF0ZSk7CisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJTZXQgU0VOU19DT05GIHRvICV4LCByYXRlICVsZFxuIiwgY29uZiwgcmF0ZSk7CiAJaWYgKHJhdGUpCiAJCWNsa19zZXRfcmF0ZShteDNfY2FtLT5jbGssIHJhdGUpOwogfQpAQCAtNDk0LDI5ICs0OTYsMTggQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7Ci0JaW50IHJldDsKIAotCWlmIChteDNfY2FtLT5pY2QpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIGVidXN5OwotCX0KKwlpZiAobXgzX2NhbS0+aWNkKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJbXgzX2NhbWVyYV9hY3RpdmF0ZShteDNfY2FtLCBpY2QpOwotCXJldCA9IGljZC0+b3BzLT5pbml0KGljZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJY2xrX2Rpc2FibGUobXgzX2NhbS0+Y2xrKTsKLQkJZ290byBlaW5pdDsKLQl9CiAKIAlteDNfY2FtLT5pY2QgPSBpY2Q7CiAKLWVpbml0OgotZWJ1c3k6Ci0JaWYgKCFyZXQpCi0JCWRldl9pbmZvKCZpY2QtPmRldiwgIk1YMyBDYW1lcmEgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKLQkJCSBpY2QtPmRldm51bSk7CisJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiTVgzIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCQkgaWNkLT5kZXZudW0pOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwpAQCAtNTMzLDEzICs1MjQsMTEgQEAKIAkJKmljaGFuID0gTlVMTDsKIAl9CiAKLQlpY2QtPm9wcy0+cmVsZWFzZShpY2QpOwotCiAJY2xrX2Rpc2FibGUobXgzX2NhbS0+Y2xrKTsKIAogCW14M19jYW0tPmljZCA9IE5VTEw7CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJNWDMgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKKwlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJNWDMgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIH0KIApAQCAtNTUxLDcgKzU0MCw4IEBACiAJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKIAogCS8qIERvIGJ1ZmZlcnMgaGF2ZSB0byBiZSByZS1hbGxvY2F0ZWQgb3IgY2hhbm5lbCByZS1jb25maWd1cmVkPyAqLwotCXJldHVybiBpY2hhbiAmJiByZWN0LT53aWR0aCAqIHJlY3QtPmhlaWdodCA+IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodDsKKwlyZXR1cm4gaWNoYW4gJiYgcmVjdC0+d2lkdGggKiByZWN0LT5oZWlnaHQgPgorCQlpY2QtPnVzZXJfd2lkdGggKiBpY2QtPnVzZXJfaGVpZ2h0OwogfQogCiBzdGF0aWMgaW50IHRlc3RfcGxhdGZvcm1fcGFyYW0oc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLApAQCAtNTk5LDggKzU4OSw4IEBACiAJCSpmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2luZm8obXgzX2NhbS0+c29jX2hvc3QuZGV2LCAiVW5zdXBwb3J0ZWQgYnVzIHdpZHRoICVkXG4iLAotCQkJIGJ1c3dpZHRoKTsKKwkJZGV2X3dhcm4obXgzX2NhbS0+c29jX2hvc3QudjRsMl9kZXYuZGV2LAorCQkJICJVbnN1cHBvcnRlZCBidXMgd2lkdGggJWRcbiIsIGJ1c3dpZHRoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02MTUsNyArNjA1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzOwogCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGRlcHRoLCAmYnVzX2ZsYWdzKTsKIAotCWRldl9kYmcoaWNpLT5kZXYsICJyZXF1ZXN0ZWQgYnVzIHdpZHRoICVkIGJpdDogJWRcbiIsIGRlcHRoLCByZXQpOworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAicmVxdWVzdCBidXMgd2lkdGggJWQgYml0OiAlZFxuIiwgZGVwdGgsIHJldCk7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTYyNCw3ICs2MTQsOCBAQAogCiAJcmV0ID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CiAJaWYgKHJldCA8IDApCi0JCWRldl93YXJuKCZpY2QtPmRldiwgIkZsYWdzIGluY29tcGF0aWJsZTogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCisJCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwKKwkJCSAiRmxhZ3MgaW5jb21wYXRpYmxlOiBjYW1lcmEgJWx4LCBob3N0ICVseFxuIiwKIAkJCSBjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjM4LDcgKzYyOSw3IEBACiAJaWYgKCFycSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcGRhdGEgPSBycS0+bXgzX2NhbS0+c29jX2hvc3QuZGV2LT5wbGF0Zm9ybV9kYXRhOworCXBkYXRhID0gcnEtPm14M19jYW0tPnNvY19ob3N0LnY0bDJfZGV2LmRldi0+cGxhdGZvcm1fZGF0YTsKIAogCXJldHVybiBycS0+aWQgPT0gY2hhbi0+Y2hhbl9pZCAmJgogCQlwZGF0YS0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldjsKQEAgLTY5OCw3ICs2ODksOCBAQAogCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CiAJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKIAkJCXhsYXRlKys7Ci0JCQlkZXZfZGJnKGljaS0+ZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKKwkJCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LAorCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAogCQkJCW14M19jYW1lcmFfZm9ybWF0c1swXS5uYW1lLAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CkBAIC03MTAsNyArNzAyLDggQEAKIAkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwogCQkJeGxhdGUtPmJ1c3dpZHRoID0gYnVzd2lkdGg7CiAJCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwKKwkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKIAkJCQlteDNfY2FtZXJhX2Zvcm1hdHNbMF0ubmFtZSwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQpAQCAtNzIzLDcgKzcxNiw3IEBACiAJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKIAkJCXhsYXRlLT5idXN3aWR0aCA9IGJ1c3dpZHRoOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoaWNpLT5kZXYsCisJCQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwKIAkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyBpbiBwYXNzLXRocm91Z2ggbW9kZVxuIiwKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQpAQCAtNzMzLDEzICs3MjYsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQgY29uZmlndXJlX2dlb21ldHJ5KHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorCQkJICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKIHsKIAl1MzIgY3RybCwgd2lkdGhfZmllbGQsIGhlaWdodF9maWVsZDsKIAogCS8qIFNldHVwIGZyYW1lIHNpemUgLSB0aGlzIGNhbm5vdCBiZSBjaGFuZ2VkIG9uLXRoZS1mbHkuLi4gKi8KLQl3aWR0aF9maWVsZCA9IHJlY3QtPndpZHRoIC0gMTsKLQloZWlnaHRfZmllbGQgPSByZWN0LT5oZWlnaHQgLSAxOworCXdpZHRoX2ZpZWxkID0gd2lkdGggLSAxOworCWhlaWdodF9maWVsZCA9IGhlaWdodCAtIDE7CiAJY3NpX3JlZ193cml0ZShteDNfY2FtLCB3aWR0aF9maWVsZCB8IChoZWlnaHRfZmllbGQgPDwgMTYpLCBDU0lfU0VOU19GUk1fU0laRSk7CiAKIAljc2lfcmVnX3dyaXRlKG14M19jYW0sIHdpZHRoX2ZpZWxkIDw8IDE2LCBDU0lfRkxBU0hfU1RST0JFXzEpOwpAQCAtNzUxLDExICs3NDQsNiBAQAogCWN0cmwgPSBjc2lfcmVnX3JlYWQobXgzX2NhbSwgQ1NJX09VVF9GUk1fQ1RSTCkgJiAweGZmZmYwMDAwOwogCS8qIFNlbnNvciBkb2VzIHRoZSBjcm9wcGluZyAqLwogCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgY3RybCB8IDAgfCAoMCA8PCA4KSwgQ1NJX09VVF9GUk1fQ1RSTCk7Ci0KLQkvKgotCSAqIE5vIG5lZWQgdG8gZnJlZSByZXNvdXJjZXMgaGVyZSBpZiB3ZSBmYWlsLCB3ZSdsbCBzZWUgaWYgd2UgbmVlZCB0bwotCSAqIGRvIHRoaXMgbmV4dCB0aW1lIHdlIGFyZSBjYWxsZWQKLQkgKi8KIH0KIAogc3RhdGljIGludCBhY3F1aXJlX2RtYV9jaGFubmVsKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSkKQEAgLTc5MiwyNSArNzgwLDc0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorLyoKKyAqIEZJWE1FOiBsZWFybiB0byB1c2Ugc3RyaWRlICE9IHdpZHRoLCB0aGVuIHdlIGNhbiBrZWVwIHN0cmlkZSBwcm9wZXJseSBhbGlnbmVkCisgKiBhbmQgc3VwcG9ydCBhcmJpdHJhcnkgKGV2ZW4pIHdpZHRocy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0cmlkZV9hbGlnbihfX3MzMiAqd2lkdGgpCiB7CisJaWYgKCgoKndpZHRoICsgNykgJiAgfjcpIDwgNDA5NikKKwkJKndpZHRoID0gKCp3aWR0aCArIDcpICYgIH43OworCWVsc2UKKwkJKndpZHRoID0gKndpZHRoICYgIH43OworfQorCisvKgorICogQXMgbG9uZyBhcyB3ZSBkb24ndCBpbXBsZW1lbnQgaG9zdC1zaWRlIGNyb3BwaW5nIGFuZCBzY2FsaW5nLCB3ZSBjYW4gdXNlCisgKiBkZWZhdWx0IGdfY3JvcCBhbmQgY3JvcGNhcCBmcm9tIHNvY19jYW1lcmEuYworICovCitzdGF0aWMgaW50IG14M19jYW1lcmFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmEtPmM7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmID0gey50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFfTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4OworCWludCByZXQ7CiAKLQkvKgotCSAqIFdlIG5vdyBrbm93IHBpeGVsIGZvcm1hdHMgYW5kIGNhbiBkZWNpZGUgdXBvbiBETUEtY2hhbm5lbChzKQotCSAqIFNvIGZhciBvbmx5IGRpcmVjdCBjYW1lcmEtdG8tbWVtb3J5IGlzIHN1cHBvcnRlZAotCSAqLwotCWlmIChjaGFubmVsX2NoYW5nZV9yZXF1ZXN0ZWQoaWNkLCByZWN0KSkgewotCQlpbnQgcmV0ID0gYWNxdWlyZV9kbWFfY2hhbm5lbChteDNfY2FtKTsKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QtPmxlZnQsICZyZWN0LT53aWR0aCwgMCwgMiwgNDA5Nik7CisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LT50b3AsICZyZWN0LT5oZWlnaHQsIDAsIDIsIDQwOTYpOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfY3JvcCwgYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBUaGUgY2FwdHVyZSBkZXZpY2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0cyBvdXRwdXQgICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfZm10LCAmZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocGl4LT53aWR0aCAmIDcpIHsKKwkJLyogT3VjaCEgV2UgY2FuIG9ubHkgaGFuZGxlIDgtYnl0ZSBhbGlnbmVkIHdpZHRoLi4uICovCisJCXN0cmlkZV9hbGlnbigmcGl4LT53aWR0aCk7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgJmYpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JY29uZmlndXJlX2dlb21ldHJ5KG14M19jYW0sIHJlY3QpOworCWlmIChwaXgtPndpZHRoICE9IGljZC0+dXNlcl93aWR0aCB8fCBwaXgtPmhlaWdodCAhPSBpY2QtPnVzZXJfaGVpZ2h0KSB7CisJCS8qCisJCSAqIFdlIG5vdyBrbm93IHBpeGVsIGZvcm1hdHMgYW5kIGNhbiBkZWNpZGUgdXBvbiBETUEtY2hhbm5lbChzKQorCQkgKiBTbyBmYXIgb25seSBkaXJlY3QgY2FtZXJhLXRvLW1lbW9yeSBpcyBzdXBwb3J0ZWQKKwkJICovCisJCWlmIChjaGFubmVsX2NoYW5nZV9yZXF1ZXN0ZWQoaWNkLCByZWN0KSkgeworCQkJaW50IHJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CiAKLQlyZXR1cm4gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7CisJCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJfQorCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJTZW5zb3IgY3JvcHBlZCAlZHglZFxuIiwKKwkJcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCisJaWNkLT51c2VyX3dpZHRoID0gcGl4LT53aWR0aDsKKwlpY2QtPnVzZXJfaGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG14M19jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKQEAgLTgxOCwyMiArODU1LDIxIEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7Ci0Jc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gewotCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAotCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCi0JCS53aWR0aAk9IHBpeC0+d2lkdGgsCi0JCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKLQl9OwogCWludCByZXQ7CiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CiAJaWYgKCF4bGF0ZSkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeC0+cGl4ZWxmb3JtYXQpOworCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLAorCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlzdHJpZGVfYWxpZ24oJnBpeC0+d2lkdGgpOworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiU2V0IGZvcm1hdCAlZHglZFxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCiAJcmV0ID0gYWNxdWlyZV9kbWFfY2hhbm5lbChteDNfY2FtKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTg0NCwyMSArODgwLDIzIEBACiAJICogbXhjX3Y0bDJfc19mbXQoKQogCSAqLwogCi0JY29uZmlndXJlX2dlb21ldHJ5KG14M19jYW0sICZyZWN0KTsKKwljb25maWd1cmVfZ2VvbWV0cnkobXgzX2NhbSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCi0JcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCBmKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOwogCWlmICghcmV0KSB7CiAJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CiAJCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7CiAJfQogCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJTZW5zb3Igc2V0ICVkeCVkXG4iLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG14M19jYW1lcmFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCV9fdTMyIHBpeGZtdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CkBAIC04NjcsNyArOTA1LDcgQEAKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwogCWlmIChwaXhmbXQgJiYgIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04ODQsNyArOTIyLDcgQEAKIAkvKiBjYW1lcmEgaGFzIHRvIHNlZSBpdHMgZm9ybWF0LCBidXQgdGhlIHVzZXIgdGhlIG9yaWdpbmFsIG9uZSAqLwogCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOwogCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KLQlyZXQgPSBpY2QtPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfZm10LCBmKTsKIAlwaXgtPnBpeGVsZm9ybWF0ID0geGxhdGUtPmhvc3RfZm10LT5mb3VyY2M7CiAKIAlmaWVsZCA9IHBpeC0+ZmllbGQ7CkBAIC04OTIsNyArOTMwLDcgQEAKIAlpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpIHsKIAkJcGl4LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAl9IGVsc2UgaWYgKGZpZWxkICE9IFY0TDJfRklFTERfTk9ORSkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkZpZWxkIHR5cGUgJWQgdW5zdXBwb3J0ZWQuXG4iLCBmaWVsZCk7CisJCWRldl9lcnIoaWNkLT5kZXYucGFyZW50LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsIGZpZWxkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MzEsMTQgKzk2OSwxNSBAQAogCXUzMiBkdywgc2Vuc19jb25mOwogCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGljZC0+YnVzd2lkdGgsICZidXNfZmxhZ3MpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKCF4bGF0ZSkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCWRldl93YXJuKGRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldl9kYmcoaWNpLT5kZXYsICJyZXF1ZXN0ZWQgYnVzIHdpZHRoICVkIGJpdDogJWRcbiIsCisJZGV2X2RiZyhkZXYsICJyZXF1ZXN0ZWQgYnVzIHdpZHRoICVkIGJpdDogJWRcbiIsCiAJCWljZC0+YnVzd2lkdGgsIHJldCk7CiAKIAlpZiAocmV0IDwgMCkKQEAgLTk0Nyw5ICs5ODYsMTAgQEAKIAljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CiAKIAljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywgYnVzX2ZsYWdzKTsKKwlkZXZfZGJnKGRldiwgIkZsYWdzIGNhbTogMHglbHggaG9zdDogMHglbHggY29tbW9uOiAweCVseFxuIiwKKwkJY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MsIGNvbW1vbl9mbGFncyk7CiAJaWYgKCFjb21tb25fZmxhZ3MpIHsKLQkJZGV2X2RiZyhpY2ktPmRldiwgIm5vIGNvbW1vbiBmbGFnczogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCi0JCQljYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJCWRldl9kYmcoZGV2LCAibm8gY29tbW9uIGZsYWdzIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTAwMiw4ICsxMDQyLDExIEBACiAJCQlTT0NBTV9EQVRBV0lEVEhfNDsKIAogCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZGJnKGRldiwgImNhbWVyYSBzZXRfYnVzX3BhcmFtKCVseCkgcmV0dXJuZWQgJWRcbiIsCisJCQljb21tb25fZmxhZ3MsIHJldCk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJLyoKIAkgKiBTbyBmYXIgb25seSBnYXRlZCBjbG9jayBtb2RlIGlzIHN1cHBvcnRlZC4gQWRkIGEgbGluZQpAQCAtMTA1NSw3ICsxMDk4LDcgQEAKIAogCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgc2Vuc19jb25mIHwgZHcsIENTSV9TRU5TX0NPTkYpOwogCi0JZGV2X2RiZyhpY2ktPmRldiwgIlNldCBTRU5TX0NPTkYgdG8gJXhcbiIsIHNlbnNfY29uZiB8IGR3KTsKKwlkZXZfZGJnKGRldiwgIlNldCBTRU5TX0NPTkYgdG8gJXhcbiIsIHNlbnNfY29uZiB8IGR3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEyNyw4ICsxMTcwLDkgQEAKIAlJTklUX0xJU1RfSEVBRCgmbXgzX2NhbS0+Y2FwdHVyZSk7CiAJc3Bpbl9sb2NrX2luaXQoJm14M19jYW0tPmxvY2spOwogCi0JYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWJhc2UpIHsKKwkJcHJfZXJyKCJDb3VsZG4ndCBtYXAgJXhAJXhcbiIsIHJlc291cmNlX3NpemUocmVzKSwgcmVzLT5zdGFydCk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZWlvcmVtYXA7CiAJfQpAQCAtMTEzOSw3ICsxMTgzLDcgQEAKIAlzb2NfaG9zdC0+ZHJ2X25hbWUJPSBNWDNfQ0FNX0RSVl9OQU1FOwogCXNvY19ob3N0LT5vcHMJCT0gJm14M19zb2NfY2FtZXJhX2hvc3Rfb3BzOwogCXNvY19ob3N0LT5wcml2CQk9IG14M19jYW07Ci0Jc29jX2hvc3QtPmRldgkJPSAmcGRldi0+ZGV2OworCXNvY19ob3N0LT52NGwyX2Rldi5kZXYJPSAmcGRldi0+ZGV2OwogCXNvY19ob3N0LT5ucgkJPSBwZGV2LT5pZDsKIAogCWVyciA9IHNvY19jYW1lcmFfaG9zdF9yZWdpc3Rlcihzb2NfaG9zdCk7CkBAIC0xMjE1LDMgKzEyNTksNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YM3ggU29DIENhbWVyYSBIb3N0IGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxsZ0BkZW54LmRlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIE1YM19DQU1fRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKaW5kZXggMzU4OTBlOC4uMzQ1NDA3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCkBAIC0xODYsMTkgKzE4NiwxOSBAQAogCX0KIAogCW14Yi0+c2FhNzExMWEgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwKLQkJCSJzYWE3MTE1IiwgInNhYTcxMTEiLCBJMkNfU0FBNzExMUEpOworCQkJInNhYTcxMTUiLCAic2FhNzExMSIsIEkyQ19TQUE3MTExQSwgTlVMTCk7CiAJbXhiLT50ZWE2NDIwXzEgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwKLQkJCSJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8xKTsKKwkJCSJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8xLCBOVUxMKTsKIAlteGItPnRlYTY0MjBfMiA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZteGItPmkyY19hZGFwdGVyLAotCQkJInRlYTY0MjAiLCAidGVhNjQyMCIsIEkyQ19URUE2NDIwXzIpOworCQkJInRlYTY0MjAiLCAidGVhNjQyMCIsIEkyQ19URUE2NDIwXzIsIE5VTEwpOwogCW14Yi0+dGVhNjQxNWMgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwKLQkJCSJ0ZWE2NDE1YyIsICJ0ZWE2NDE1YyIsIEkyQ19URUE2NDE1Qyk7CisJCQkidGVhNjQxNWMiLCAidGVhNjQxNWMiLCBJMkNfVEVBNjQxNUMsIE5VTEwpOwogCW14Yi0+dGRhOTg0MCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZteGItPmkyY19hZGFwdGVyLAotCQkJInRkYTk4NDAiLCAidGRhOTg0MCIsIEkyQ19UREE5ODQwKTsKKwkJCSJ0ZGE5ODQwIiwgInRkYTk4NDAiLCBJMkNfVERBOTg0MCwgTlVMTCk7CiAJbXhiLT50dW5lciA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZteGItPmkyY19hZGFwdGVyLAotCQkJInR1bmVyIiwgInR1bmVyIiwgSTJDX1RVTkVSKTsKKwkJCSJ0dW5lciIsICJ0dW5lciIsIEkyQ19UVU5FUiwgTlVMTCk7CiAJaWYgKHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZteGItPmkyY19hZGFwdGVyLAotCQkJInNhYTUyNDZhIiwgInNhYTUyNDZhIiwgSTJDX1NBQTUyNDZBKSkgeworCQkJInNhYTUyNDZhIiwgInNhYTUyNDZhIiwgSTJDX1NBQTUyNDZBLCBOVUxMKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJteGI6IGZvdW5kIHRlbGV0ZXh0IGRlY29kZXJcbiIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKaW5kZXggMGJjZTI1NS4uZWNjYjQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL292NzcyeC5oPgogCkBAIC0zODIsMTEgKzM4MiwxMCBAQAogfTsKIAogc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgewotCWNoYXIgICAgICAgICAgICAgICAgICAgICAqbmFtZTsKLQlfX3UzMiAgICAgICAgICAgICAgICAgICAgIGZvdXJjYzsKLQl1OCAgICAgICAgICAgICAgICAgICAgICAgIGRzcDM7Ci0JdTggICAgICAgICAgICAgICAgICAgICAgICBjb20zOwotCXU4ICAgICAgICAgICAgICAgICAgICAgICAgY29tNzsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZm9ybWF0OworCXU4IGRzcDM7CisJdTggY29tMzsKKwl1OCBjb203OwogfTsKIAogc3RydWN0IG92NzcyeF93aW5fc2l6ZSB7CkBAIC0zOTgsMTQgKzM5NywxNSBAQAogfTsKIAogc3RydWN0IG92NzcyeF9wcml2IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgICAgICAgICAgICAgICAgc3ViZGV2OwogCXN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gICAgICAgICppbmZvOwotCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgICAgICAgICpjbGllbnQ7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAgICAgICAgIGljZDsKIAljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCAqZm10OwogCWNvbnN0IHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgICAgICp3aW47CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICBmbGFnX3ZmbGlwOjE7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgIGZsYWdfaGZsaXA6MTsKKwl1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgZmxhZ192ZmxpcDoxOworCXVuc2lnbmVkIHNob3J0ICAgICAgICAgICAgICAgICAgICBmbGFnX2hmbGlwOjE7CisJLyogYmFuZF9maWx0ZXIgPSBDT004WzVdID8gMjU2IC0gQkRCQVNFIDogMCAqLworCXVuc2lnbmVkIHNob3J0ICAgICAgICAgICAgICAgICAgICBiYW5kX2ZpbHRlcjsKIH07CiAKICNkZWZpbmUgRU5ETUFSS0VSIHsgMHhmZiwgMHhmZiB9CkBAIC00ODEsNDMgKzQ4MSw0MyBAQAogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgb3Y3NzJ4X2NmbXRzW10gPSB7CiAJewotCQlTRVRGT1VSQ0MoWVVZViksCisJCS5mb3JtYXQgPSAmb3Y3NzJ4X2ZtdF9saXN0c1swXSwKIAkJLmRzcDMgICA9IDB4MCwKIAkJLmNvbTMgICA9IFNXQVBfWVVWLAogCQkuY29tNyAgID0gT0ZNVF9ZVVYsCiAJfSwKIAl7Ci0JCVNFVEZPVVJDQyhZVllVKSwKKwkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzFdLAogCQkuZHNwMyAgID0gVVZfT04sCiAJCS5jb20zICAgPSBTV0FQX1lVViwKIAkJLmNvbTcgICA9IE9GTVRfWVVWLAogCX0sCiAJewotCQlTRVRGT1VSQ0MoVVlWWSksCisJCS5mb3JtYXQgPSAmb3Y3NzJ4X2ZtdF9saXN0c1syXSwKIAkJLmRzcDMgICA9IDB4MCwKIAkJLmNvbTMgICA9IDB4MCwKIAkJLmNvbTcgICA9IE9GTVRfWVVWLAogCX0sCiAJewotCQlTRVRGT1VSQ0MoUkdCNTU1KSwKKwkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzNdLAogCQkuZHNwMyAgID0gMHgwLAogCQkuY29tMyAgID0gU1dBUF9SR0IsCiAJCS5jb203ICAgPSBGTVRfUkdCNTU1IHwgT0ZNVF9SR0IsCiAJfSwKIAl7Ci0JCVNFVEZPVVJDQyhSR0I1NTVYKSwKKwkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzRdLAogCQkuZHNwMyAgID0gMHgwLAogCQkuY29tMyAgID0gMHgwLAogCQkuY29tNyAgID0gRk1UX1JHQjU1NSB8IE9GTVRfUkdCLAogCX0sCiAJewotCQlTRVRGT1VSQ0MoUkdCNTY1KSwKKwkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzVdLAogCQkuZHNwMyAgID0gMHgwLAogCQkuY29tMyAgID0gU1dBUF9SR0IsCiAJCS5jb203ICAgPSBGTVRfUkdCNTY1IHwgT0ZNVF9SR0IsCiAJfSwKIAl7Ci0JCVNFVEZPVVJDQyhSR0I1NjVYKSwKKwkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzZdLAogCQkuZHNwMyAgID0gMHgwLAogCQkuY29tMyAgID0gMHgwLAogCQkuY29tNyAgID0gRk1UX1JHQjU2NSB8IE9GTVRfUkdCLApAQCAtNTcwLDYgKzU3MCwxNSBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDAsCiAJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZQkJPSAiQmFuZC1zdG9wIGZpbHRlciIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAyNTYsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAogfTsKIAogCkBAIC01NzcsNiArNTg2LDEyIEBACiAgKiBnZW5lcmFsIGZ1bmN0aW9uCiAgKi8KIAorc3RhdGljIHN0cnVjdCBvdjc3MnhfcHJpdiAqdG9fb3Y3NzJ4KGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgc3RydWN0IG92NzcyeF9wcml2LAorCQkJICAgIHN1YmRldik7Cit9CisKIHN0YXRpYyBpbnQgb3Y3NzJ4X3dyaXRlX2FycmF5KHN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAqY2xpZW50LAogCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0ICp2YWxzKQogewpAQCAtNjE3LDU4ICs2MzIsMjkgQEAKICAqIHNvY19jYW1lcmFfb3BzIGZ1bmN0aW9uCiAgKi8KIAotc3RhdGljIGludCBvdjc3MnhfaW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwotCWludCByZXQgPSAwOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKIAotCWlmIChwcml2LT5pbmZvLT5saW5rLnBvd2VyKSB7Ci0JCXJldCA9IHByaXYtPmluZm8tPmxpbmsucG93ZXIoJnByaXYtPmNsaWVudC0+ZGV2LCAxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCWlmICghZW5hYmxlKSB7CisJCW92NzcyeF9tYXNrX3NldChjbGllbnQsIENPTTIsIFNPRlRfU0xFRVBfTU9ERSwgU09GVF9TTEVFUF9NT0RFKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHByaXYtPmluZm8tPmxpbmsucmVzZXQpCi0JCXJldCA9IHByaXYtPmluZm8tPmxpbmsucmVzZXQoJnByaXYtPmNsaWVudC0+ZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3NzJ4X3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwotCWludCByZXQgPSAwOwotCi0JaWYgKHByaXYtPmluZm8tPmxpbmsucG93ZXIpCi0JCXJldCA9IHByaXYtPmluZm8tPmxpbmsucG93ZXIoJnByaXYtPmNsaWVudC0+ZGV2LCAwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3NzJ4X3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwotCiAJaWYgKCFwcml2LT53aW4gfHwgIXByaXYtPmZtdCkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIm5vcm0gb3Igd2luIHNlbGVjdCBlcnJvclxuIik7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibm9ybSBvciB3aW4gc2VsZWN0IGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQlvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIDApOworCW92NzcyeF9tYXNrX3NldChjbGllbnQsIENPTTIsIFNPRlRfU0xFRVBfTU9ERSwgMCk7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwKLQkJICJmb3JtYXQgJXMsIHdpbiAlc1xuIiwgcHJpdi0+Zm10LT5uYW1lLCBwcml2LT53aW4tPm5hbWUpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZm9ybWF0ICVzLCB3aW4gJXNcbiIsCisJCXByaXYtPmZtdC0+Zm9ybWF0LT5uYW1lLCBwcml2LT53aW4tPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NzJ4X3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7Ci0Jb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMiwgU09GVF9TTEVFUF9NT0RFLCBTT0ZUX1NMRUVQX01PREUpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG92NzcyeF9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCXVuc2lnbmVkIGxvbmcJCSAgZmxhZ3MpCiB7CkBAIC02NzcsOCArNjYzLDkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgb3Y3NzJ4X3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gJnByaXYtPmluZm8tPmxpbms7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9NQVNURVIgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKIAkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IHByaXYtPmluZm8tPmJ1c3dpZHRoOwpAQCAtNjg2LDEwICs2NzMsMTAgQEAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NzJ4X2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKQEAgLTY5OCwxNCArNjg1LDE3IEBACiAJY2FzZSBWNEwyX0NJRF9IRkxJUDoKIAkJY3RybC0+dmFsdWUgPSBwcml2LT5mbGFnX2hmbGlwOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVI6CisJCWN0cmwtPnZhbHVlID0gcHJpdi0+YmFuZF9maWx0ZXI7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdjc3Mnhfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBvdjc3Mnhfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKIAlpbnQgcmV0ID0gMDsKIAl1OCB2YWw7CiAKQEAgLTcxNSwyNCArNzA1LDQ4IEBACiAJCXByaXYtPmZsYWdfdmZsaXAgPSBjdHJsLT52YWx1ZTsKIAkJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfVkZMSVApCiAJCQl2YWwgXj0gVkZMSVBfSU1HOwotCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LCBDT00zLCBWRkxJUF9JTUcsIHZhbCk7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsIENPTTMsIFZGTElQX0lNRywgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9IRkxJUDoKIAkJdmFsID0gY3RybC0+dmFsdWUgPyBIRkxJUF9JTUcgOiAweDAwOwogCQlwcml2LT5mbGFnX2hmbGlwID0gY3RybC0+dmFsdWU7CiAJCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX0hGTElQKQogCQkJdmFsIF49IEhGTElQX0lNRzsKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMywgSEZMSVBfSU1HLCB2YWwpOworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT00zLCBIRkxJUF9JTUcsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQkFORF9TVE9QX0ZJTFRFUjoKKwkJaWYgKCh1bnNpZ25lZCljdHJsLT52YWx1ZSA+IDI1NikKKwkJCWN0cmwtPnZhbHVlID0gMjU2OworCQlpZiAoY3RybC0+dmFsdWUgPT0gcHJpdi0+YmFuZF9maWx0ZXIpCisJCQlicmVhazsKKwkJaWYgKCFjdHJsLT52YWx1ZSkgeworCQkJLyogU3dpdGNoIHRoZSBmaWx0ZXIgb2ZmLCBpdCBpcyBvbiBub3cgKi8KKwkJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsIEJEQkFTRSwgMHhmZiwgMHhmZik7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT004LAorCQkJCQkJICAgICAgQk5ERl9PTl9PRkYsIDApOworCQl9IGVsc2UgeworCQkJLyogU3dpdGNoIHRoZSBmaWx0ZXIgb24sIHNldCBBRUMgbG93IGxpbWl0ICovCisJCQl2YWwgPSAyNTYgLSBjdHJsLT52YWx1ZTsKKwkJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsIENPTTgsCisJCQkJCSAgICAgIEJOREZfT05fT0ZGLCBCTkRGX09OX09GRik7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBCREJBU0UsCisJCQkJCQkgICAgICAweGZmLCB2YWwpOworCQl9CisJCWlmICghcmV0KQorCQkJcHJpdi0+YmFuZF9maWx0ZXIgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvdjc3MnhfZ2V0X2NoaXBfaWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAgICppZCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOwogCiAJaWQtPmlkZW50ICAgID0gcHJpdi0+bW9kZWw7CiAJaWQtPnJldmlzaW9uID0gMDsKQEAgLTc0MSwxNyArNzU1LDE3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgaW50IG92NzcyeF9nZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IG92NzcyeF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKLQlpbnQgICAgICAgICAgICAgICAgIHJldDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJaW50IHJldDsKIAogCXJlZy0+c2l6ZSA9IDE7CiAJaWYgKHJlZy0+cmVnID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCByZWctPnJlZyk7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLT5yZWcpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC03NjAsMjEgKzc3NCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NzcyeF9zZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IG92NzcyeF9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAKIAlpZiAocmVnLT5yZWcgPiAweGZmIHx8CiAJICAgIHJlZy0+dmFsID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIHJlZy0+cmVnLCByZWctPnZhbCk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWctPnJlZywgcmVnLT52YWwpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplKgotb3Y3NzJ4X3NlbGVjdF93aW4odTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQorc3RhdGljIGNvbnN0IHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgKm92NzcyeF9zZWxlY3Rfd2luKHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKIHsKIAlfX3UzMiBkaWZmOwogCWNvbnN0IHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgKndpbjsKQEAgLTc5Myw5ICs4MDYsMTAgQEAKIAlyZXR1cm4gd2luOwogfQogCi1zdGF0aWMgaW50IG92NzcyeF9zZXRfcGFyYW1zKHN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAotCQkJICAgICB1MzIgcGl4Zm10KQorc3RhdGljIGludCBvdjc3Mnhfc2V0X3BhcmFtcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICB1MzIgKndpZHRoLCB1MzIgKmhlaWdodCwgdTMyIHBpeGZtdCkKIHsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAl1OCAgdmFsOwogCWludCBpOwpAQCAtODA1LDcgKzgxOSw3IEBACiAJICovCiAJcHJpdi0+Zm10ID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjc3MnhfY2ZtdHMpOyBpKyspIHsKLQkJaWYgKHBpeGZtdCA9PSBvdjc3MnhfY2ZtdHNbaV0uZm91cmNjKSB7CisJCWlmIChwaXhmbXQgPT0gb3Y3NzJ4X2NmbXRzW2ldLmZvcm1hdC0+Zm91cmNjKSB7CiAJCQlwcml2LT5mbXQgPSBvdjc3MnhfY2ZtdHMgKyBpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgxNiwxMiArODMwLDEyIEBACiAJLyoKIAkgKiBzZWxlY3Qgd2luCiAJICovCi0JcHJpdi0+d2luID0gb3Y3NzJ4X3NlbGVjdF93aW4od2lkdGgsIGhlaWdodCk7CisJcHJpdi0+d2luID0gb3Y3NzJ4X3NlbGVjdF93aW4oKndpZHRoLCAqaGVpZ2h0KTsKIAogCS8qCiAJICogcmVzZXQgaGFyZHdhcmUKIAkgKi8KLQlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKKwlvdjc3MnhfcmVzZXQoY2xpZW50KTsKIAogCS8qCiAJICogRWRnZSBDdHJsCkBAIC04MzUsMTcgKzg0OSwxNyBAQAogCQkgKiBSZW1vdmUgaXQgd2hlbiBtYW51YWwgbW9kZS4KIAkJICovCiAKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgRFNQQVVUTywgRURHRV9BQ1RSTCwgMHgwMCk7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsIERTUEFVVE8sIEVER0VfQUNUUkwsIDB4MDApOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CiAKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwKIAkJCQkgICAgICBFREdFX1RSU0hMRCwgRURHRV9USFJFU0hPTERfTUFTSywKIAkJCQkgICAgICBwcml2LT5pbmZvLT5lZGdlY3RybC50aHJlc2hvbGQpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CiAKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwKIAkJCQkgICAgICBFREdFX1NUUk5HVCwgRURHRV9TVFJFTkdUSF9NQVNLLAogCQkJCSAgICAgIHByaXYtPmluZm8tPmVkZ2VjdHJsLnN0cmVuZ3RoKTsKIAkJaWYgKHJldCA8IDApCkBAIC04NTcsMTMgKzg3MSwxMyBAQAogCQkgKgogCQkgKiBzZXQgdXBwZXIgYW5kIGxvd2VyIGxpbWl0CiAJCSAqLwotCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LAogCQkJCSAgICAgIEVER0VfVVBQRVIsIEVER0VfVVBQRVJfTUFTSywKIAkJCQkgICAgICBwcml2LT5pbmZvLT5lZGdlY3RybC51cHBlcik7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKIAotCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LAogCQkJCSAgICAgIEVER0VfTE9XRVIsIEVER0VfTE9XRVJfTUFTSywKIAkJCQkgICAgICBwcml2LT5pbmZvLT5lZGdlY3RybC5sb3dlcik7CiAJCWlmIChyZXQgPCAwKQpAQCAtODczLDcgKzg4Nyw3IEBACiAJLyoKIAkgKiBzZXQgc2l6ZSBmb3JtYXQKIAkgKi8KLQlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCBwcml2LT53aW4tPnJlZ3MpOworCXJldCA9IG92NzcyeF93cml0ZV9hcnJheShjbGllbnQsIHByaXYtPndpbi0+cmVncyk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CiAKQEAgLTg4Miw3ICs4OTYsNyBAQAogCSAqLwogCXZhbCA9IHByaXYtPmZtdC0+ZHNwMzsKIAlpZiAodmFsKSB7Ci0JCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsCiAJCQkJICAgICAgRFNQX0NUUkwzLCBVVl9NQVNLLCB2YWwpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CkBAIC05MDEsNyArOTE1LDcgQEAKIAlpZiAocHJpdi0+ZmxhZ19oZmxpcCkKIAkJdmFsIF49IEhGTElQX0lNRzsKIAotCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwKIAkJCSAgICAgIENPTTMsIFNXQVBfTUFTSyB8IElNR19NQVNLLCB2YWwpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwpAQCAtOTEwLDQ3ICs5MjQsOTkgQEAKIAkgKiBzZXQgQ09NNwogCSAqLwogCXZhbCA9IHByaXYtPndpbi0+Y29tN19iaXQgfCBwcml2LT5mbXQtPmNvbTc7Ci0JcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LAogCQkJICAgICAgQ09NNywgKFNMQ1RfTUFTSyB8IEZNVF9NQVNLIHwgT0ZNVF9NQVNLKSwKIAkJCSAgICAgIHZhbCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CiAKKwkvKgorCSAqIHNldCBDT004CisJICovCisJaWYgKHByaXYtPmJhbmRfZmlsdGVyKSB7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChjbGllbnQsIENPTTgsIEJOREZfT05fT0ZGLCAxKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LCBCREJBU0UsCisJCQkJCSAgICAgIDB4ZmYsIDI1NiAtIHByaXYtPmJhbmRfZmlsdGVyKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOworCX0KKworCSp3aWR0aCA9IHByaXYtPndpbi0+d2lkdGg7CisJKmhlaWdodCA9IHByaXYtPndpbi0+aGVpZ2h0OworCiAJcmV0dXJuIHJldDsKIAogb3Y3NzJ4X3NldF9mbXRfZXJyb3I6CiAKLQlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKKwlvdjc3MnhfcmVzZXQoY2xpZW50KTsKIAlwcml2LT53aW4gPSBOVUxMOwogCXByaXYtPmZtdCA9IE5VTEw7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG92NzcyeF9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgaW50IG92NzcyeF9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJYS0+Yy5sZWZ0CT0gMDsKKwlhLT5jLnRvcAk9IDA7CisJYS0+Yy53aWR0aAk9IFZHQV9XSURUSDsKKwlhLT5jLmhlaWdodAk9IFZHQV9IRUlHSFQ7CisJYS0+dHlwZQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAKLQlpZiAoIXByaXYtPmZtdCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gb3Y3NzJ4X3NldF9wYXJhbXMocHJpdiwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwKLQkJCQkgcHJpdi0+Zm10LT5mb3VyY2MpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NzcyeF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IG92NzcyeF9jcm9wY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmEpCiB7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCWEtPmJvdW5kcy5sZWZ0CQkJPSAwOworCWEtPmJvdW5kcy50b3AJCQk9IDA7CisJYS0+Ym91bmRzLndpZHRoCQkJPSBWR0FfV0lEVEg7CisJYS0+Ym91bmRzLmhlaWdodAkJPSBWR0FfSEVJR0hUOworCWEtPmRlZnJlY3QJCQk9IGEtPmJvdW5kczsKKwlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CisJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKLQlyZXR1cm4gb3Y3NzJ4X3NldF9wYXJhbXMocHJpdiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQsCisJaWYgKCFwcml2LT53aW4gfHwgIXByaXYtPmZtdCkgeworCQl1MzIgd2lkdGggPSBWR0FfV0lEVEgsIGhlaWdodCA9IFZHQV9IRUlHSFQ7CisJCWludCByZXQgPSBvdjc3Mnhfc2V0X3BhcmFtcyhjbGllbnQsICZ3aWR0aCwgJmhlaWdodCwKKwkJCQkJICAgIFY0TDJfUElYX0ZNVF9ZVVlWKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWYtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXBpeC0+d2lkdGgJCT0gcHJpdi0+d2luLT53aWR0aDsKKwlwaXgtPmhlaWdodAkJPSBwcml2LT53aW4tPmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0CT0gcHJpdi0+Zm10LT5mb3JtYXQtPmZvdXJjYzsKKwlwaXgtPmNvbG9yc3BhY2UJCT0gcHJpdi0+Zm10LT5mb3JtYXQtPmNvbG9yc3BhY2U7CisJcGl4LT5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc3Mnhfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCXJldHVybiBvdjc3Mnhfc2V0X3BhcmFtcyhjbGllbnQsICZwaXgtPndpZHRoLCAmcGl4LT5oZWlnaHQsCiAJCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOwogfQogCi1zdGF0aWMgaW50IG92NzcyeF90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgICAgICAgKmYpCitzdGF0aWMgaW50IG92NzcyeF90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplICp3aW47CkBAIC05NjcsOSArMTAzMywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NzcyeF92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CiAJdTggICAgICAgICAgICAgICAgICBwaWQsIHZlcjsKIAljb25zdCBjaGFyICAgICAgICAgKmRldm5hbWU7CiAKQEAgLTk4Niw3ICsxMDUzLDcgQEAKIAkgKi8KIAlpZiAoU09DQU1fREFUQVdJRFRIXzEwICE9IHByaXYtPmluZm8tPmJ1c3dpZHRoICYmCiAJICAgIFNPQ0FNX0RBVEFXSURUSF84ICAhPSBwcml2LT5pbmZvLT5idXN3aWR0aCkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgImJ1cyB3aWR0aCBlcnJvclxuIik7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiYnVzIHdpZHRoIGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC05OTYsOCArMTA2Myw4IEBACiAJLyoKIAkgKiBjaGVjayBhbmQgc2hvdyBwcm9kdWN0IElEIGFuZCBtYW51ZmFjdHVyZXIgSUQKIAkgKi8KLQlwaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBQSUQpOwotCXZlciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIFZFUik7CisJcGlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUElEKTsKKwl2ZXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBWRVIpOwogCiAJc3dpdGNoIChWRVJTSU9OKHBpZCwgdmVyKSkgewogCWNhc2UgT1Y3NzIwOgpAQCAtMTAwOSw2OSArMTA3Niw3NyBAQAogCQlwcml2LT5tb2RlbCA9IFY0TDJfSURFTlRfT1Y3NzI1OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkiUHJvZHVjdCBJRCBlcnJvciAleDoleFxuIiwgcGlkLCB2ZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LAogCQkgIiVzIFByb2R1Y3QgSUQgJTB4OiUweCBNYW51ZmFjdHVyZXIgSUQgJXg6JXhcbiIsCiAJCSBkZXZuYW1lLAogCQkgcGlkLAogCQkgdmVyLAotCQkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgTUlESCksCi0JCSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBNSURMKSk7CisJCSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNSURIKSwKKwkJIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1JREwpKTsKIAotCXJldHVybiBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG92NzcyeF92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc29jX2NhbWVyYV92aWRlb19zdG9wKGljZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgb3Y3NzJ4X29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJCT0gb3Y3NzJ4X3ZpZGVvX3Byb2JlLAotCS5yZW1vdmUJCQk9IG92NzcyeF92aWRlb19yZW1vdmUsCi0JLmluaXQJCQk9IG92NzcyeF9pbml0LAotCS5yZWxlYXNlCQk9IG92NzcyeF9yZWxlYXNlLAotCS5zdGFydF9jYXB0dXJlCQk9IG92NzcyeF9zdGFydF9jYXB0dXJlLAotCS5zdG9wX2NhcHR1cmUJCT0gb3Y3NzJ4X3N0b3BfY2FwdHVyZSwKLQkuc2V0X2Nyb3AJCT0gb3Y3NzJ4X3NldF9jcm9wLAotCS5zZXRfZm10CQk9IG92NzcyeF9zZXRfZm10LAotCS50cnlfZm10CQk9IG92NzcyeF90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG92NzcyeF9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBvdjc3MnhfcXVlcnlfYnVzX3BhcmFtLAogCS5jb250cm9scwkJPSBvdjc3MnhfY29udHJvbHMsCiAJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG92NzcyeF9jb250cm9scyksCi0JLmdldF9jb250cm9sCQk9IG92NzcyeF9nZXRfY29udHJvbCwKLQkuc2V0X2NvbnRyb2wJCT0gb3Y3NzJ4X3NldF9jb250cm9sLAotCS5nZXRfY2hpcF9pZAkJPSBvdjc3MnhfZ2V0X2NoaXBfaWQsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG92NzcyeF9zdWJkZXZfY29yZV9vcHMgPSB7CisJLmdfY3RybAkJPSBvdjc3MnhfZ19jdHJsLAorCS5zX2N0cmwJCT0gb3Y3NzJ4X3NfY3RybCwKKwkuZ19jaGlwX2lkZW50CT0gb3Y3NzJ4X2dfY2hpcF9pZGVudCwKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JLmdldF9yZWdpc3RlcgkJPSBvdjc3MnhfZ2V0X3JlZ2lzdGVyLAotCS5zZXRfcmVnaXN0ZXIJCT0gb3Y3NzJ4X3NldF9yZWdpc3RlciwKKwkuZ19yZWdpc3Rlcgk9IG92NzcyeF9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gb3Y3NzJ4X3NfcmVnaXN0ZXIsCiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG92NzcyeF9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX3N0cmVhbQk9IG92NzcyeF9zX3N0cmVhbSwKKwkuZ19mbXQJCT0gb3Y3NzJ4X2dfZm10LAorCS5zX2ZtdAkJPSBvdjc3Mnhfc19mbXQsCisJLnRyeV9mbXQJPSBvdjc3MnhfdHJ5X2ZtdCwKKwkuY3JvcGNhcAk9IG92NzcyeF9jcm9wY2FwLAorCS5nX2Nyb3AJCT0gb3Y3NzJ4X2dfY3JvcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG92NzcyeF9zdWJkZXZfb3BzID0geworCS5jb3JlCT0gJm92NzcyeF9zdWJkZXZfY29yZV9vcHMsCisJLnZpZGVvCT0gJm92NzcyeF9zdWJkZXZfdmlkZW9fb3BzLAorfTsKKwogLyoKICAqIGkyY19kcml2ZXIgZnVuY3Rpb24KICAqLwogCiBzdGF0aWMgaW50IG92NzcyeF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQogewogCXN0cnVjdCBvdjc3MnhfcHJpdiAgICAgICAgKnByaXY7CiAJc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyAqaW5mbzsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgICppY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgICAgICAgICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICAgICppY2w7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwogCi0JaWYgKCFjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKQorCWlmICghaWNkKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiT1Y3NzJYOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwlpZiAoIWljbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbmZvID0gY29udGFpbmVyX29mKGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEsCi0JCQkgICAgc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbywgbGluayk7CisJaW5mbyA9IGNvbnRhaW5lcl9vZihpY2wsIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8sIGxpbmspOwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwKQEAgLTEwODQsMjAgKzExNTksMTUgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJpdi0+aW5mbyAgID0gaW5mbzsKLQlwcml2LT5jbGllbnQgPSBjbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcHJpdik7CisJcHJpdi0+aW5mbyA9IGluZm87CiAKLQlpY2QgICAgICAgICAgICAgPSAmcHJpdi0+aWNkOwotCWljZC0+b3BzICAgICAgICA9ICZvdjc3Mnhfb3BzOwotCWljZC0+Y29udHJvbCAgICA9ICZjbGllbnQtPmRldjsKLQlpY2QtPndpZHRoX21heCAgPSBNQVhfV0lEVEg7Ci0JaWNkLT5oZWlnaHRfbWF4ID0gTUFYX0hFSUdIVDsKLQlpY2QtPmlmYWNlICAgICAgPSBwcml2LT5pbmZvLT5saW5rLmJ1c19pZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmcHJpdi0+c3ViZGV2LCBjbGllbnQsICZvdjc3Mnhfc3ViZGV2X29wcyk7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOworCWljZC0+b3BzCQk9ICZvdjc3Mnhfb3BzOwogCisJcmV0ID0gb3Y3NzJ4X3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50KTsKIAlpZiAocmV0KSB7CisJCWljZC0+b3BzID0gTlVMTDsKIAkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJCWtmcmVlKHByaXYpOwogCX0KQEAgLTExMDcsOSArMTE3NywxMCBAQAogCiBzdGF0aWMgaW50IG92NzcyeF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZwcml2LT5pY2QpOworCWljZC0+b3BzID0gTlVMTDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZShwcml2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYwppbmRleCAzMzZhMjBlLi5lNGQ3YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCkBAIC0yOTgsNiArMjk4LDcgQEAKIAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX3RkYTE4MjcxX2R2Yl9jb25maWcgPSB7CiAJLmdhdGUgICAgPSBUREExODI3MV9HQVRFX0FOQUxPRywKKwkub3V0cHV0X29wdCA9IFREQTE4MjcxX09VVFBVVF9MVF9PRkYsCiB9OwogCiBzdGF0aWMgaW50IHB2cjJfdGRhMTAwNDhfYXR0YWNoKHN0cnVjdCBwdnIyX2R2Yl9hZGFwdGVyICphZGFwKQpAQCAtMzkzLDYgKzM5NCw3IEBACiBzdGF0aWMgc3RydWN0IHRkYTE4MjcxX2NvbmZpZyBoYXVwcGF1Z2VfdGRhMTgyNzFfY29uZmlnID0gewogCS5zdGRfbWFwID0gJmhhdXBwYXVnZV90ZGExODI3MV9zdGRfbWFwLAogCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLm91dHB1dF9vcHQgPSBUREExODI3MV9PVVRQVVRfTFRfT0ZGLAogfTsKIAogc3RhdGljIGludCBwdnIyX3M1aDE0MDlfYXR0YWNoKHN0cnVjdCBwdnIyX2R2Yl9hZGFwdGVyICphZGFwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwppbmRleCBjYmMzODg3Li4xMzYzOWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwpAQCAtMjA2Myw4ICsyMDYzLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogTm90ZSBob3cgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgZm9yIGJvdGgKLQkgKiB2NGwyX2kyY19uZXdfc3ViZGV2KCkgYW5kIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCkuICBXaHk/CisJLyogTm90ZSBob3cgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgZm9yCisJICogdjRsMl9pMmNfbmV3X3N1YmRldigpLiAgV2h5PwogCSAqIFdlbGwgdGhlIDJuZCBhcmd1bWVudCBpcyB0aGUgbW9kdWxlIG5hbWUgdG8gbG9hZCwgd2hpbGUgdGhlIDNyZAogCSAqIGFyZ3VtZW50IGlzIGRvY3VtZW50ZWQgaW4gdGhlIGZyYW1ld29yayBhcyBiZWluZyB0aGUgImNoaXBpZCIgLQogCSAqIGFuZCBldmVyeSBvdGhlciBwbGFjZSB3aGVyZSBJIGNhbiBmaW5kIGV4YW1wbGVzIG9mIHRoaXMsIHRoZQpAQCAtMjA3NywxNSArMjA3NywxNSBAQAogCQkJICAgbWlkLCBpMmNhZGRyWzBdKTsKIAkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZoZHctPnY0bDJfZGV2LCAmaGR3LT5pMmNfYWRhcCwKIAkJCQkJIGZuYW1lLCBmbmFtZSwKLQkJCQkJIGkyY2FkZHJbMF0pOworCQkJCQkgaTJjYWRkclswXSwgTlVMTCk7CiAJfSBlbHNlIHsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCiAJCQkgICAiTW9kdWxlIElEICV1OiIKIAkJCSAgICIgU2V0dGluZyB1cCB3aXRoIGFkZHJlc3MgcHJvYmUgbGlzdCIsCiAJCQkgICBtaWQpOwotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZoZHctPnY0bDJfZGV2LCAmaGR3LT5pMmNfYWRhcCwKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZoZHctPnY0bDJfZGV2LCAmaGR3LT5pMmNfYWRhcCwKIAkJCQkJCWZuYW1lLCBmbmFtZSwKLQkJCQkJCWkyY2FkZHIpOworCQkJCQkJMCwgaTJjYWRkcik7CiAJfQogCiAJaWYgKCFzZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCAwMTZiYjQ1Li42OTUyZTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMjI1LDYgKzIyNSwxMCBAQAogCXUzMgkJCXNhdmVfY2ljcls1XTsKIH07CiAKK3N0cnVjdCBweGFfY2FtIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKnB4YV9jYW1fZHJpdmVyX2Rlc2NyaXB0aW9uID0gIlBYQV9DYW1lcmEiOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHZpZF9saW1pdCA9IDE2OwkvKiBWaWRlbyBtZW1vcnkgbGltaXQsIGluIE1iICovCkBAIC0yMzcsOSArMjQxLDkgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKIAotCSpzaXplID0gcm91bmR1cChpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKgorCSpzaXplID0gcm91bmR1cChpY2QtPnVzZXJfd2lkdGggKiBpY2QtPnVzZXJfaGVpZ2h0ICoKIAkJCSgoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzKSwgOCk7CiAKIAlpZiAoMCA9PSAqY291bnQpCkBAIC0yNTksNyArMjYzLDcgQEAKIAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJJmJ1Zi0+dmIsIGJ1Zi0+dmIuYmFkZHIsIGJ1Zi0+dmIuYnNpemUpOwogCiAJLyogVGhpcyB3YWl0cyB1bnRpbCB0aGlzIGJ1ZmZlciBpcyBvdXQgb2YgZGFuZ2VyLCBpLmUuLCB1bnRpbCBpdCBpcyBubwpAQCAtMjcwLDcgKzI3NCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWYtPmRtYXMpOyBpKyspIHsKIAkJaWYgKGJ1Zi0+ZG1hc1tpXS5zZ19jcHUpCi0JCQlkbWFfZnJlZV9jb2hlcmVudChpY2ktPmRldiwgYnVmLT5kbWFzW2ldLnNnX3NpemUsCisJCQlkbWFfZnJlZV9jb2hlcmVudChpY2ktPnY0bDJfZGV2LmRldiwKKwkJCQkJICBidWYtPmRtYXNbaV0uc2dfc2l6ZSwKIAkJCQkJICBidWYtPmRtYXNbaV0uc2dfY3B1LAogCQkJCQkgIGJ1Zi0+ZG1hc1tpXS5zZ19kbWEpOwogCQlidWYtPmRtYXNbaV0uc2dfY3B1ID0gTlVMTDsKQEAgLTMyNSwxOSArMzMwLDIwIEBACiAJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICoqc2dfZmlyc3QsIGludCAqc2dfZmlyc3Rfb2ZzKQogewogCXN0cnVjdCBweGFfY2FtX2RtYSAqcHhhX2RtYSA9ICZidWYtPmRtYXNbY2hhbm5lbF07CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBpLCBvZmZzZXQsIHNnbGVuOwogCWludCBkbWFfbGVuID0gMCwgeGZlcl9sZW4gPSAwOwogCiAJaWYgKHB4YV9kbWEtPnNnX2NwdSkKLQkJZG1hX2ZyZWVfY29oZXJlbnQocGNkZXYtPnNvY19ob3N0LmRldiwgcHhhX2RtYS0+c2dfc2l6ZSwKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBweGFfZG1hLT5zZ19zaXplLAogCQkJCSAgcHhhX2RtYS0+c2dfY3B1LCBweGFfZG1hLT5zZ19kbWEpOwogCiAJc2dsZW4gPSBjYWxjdWxhdGVfZG1hX3NnbGVuKCpzZ19maXJzdCwgZG1hLT5zZ2xlbiwKIAkJCQkgICAgKnNnX2ZpcnN0X29mcywgc2l6ZSk7CiAKIAlweGFfZG1hLT5zZ19zaXplID0gKHNnbGVuICsgMSkgKiBzaXplb2Yoc3RydWN0IHB4YV9kbWFfZGVzYyk7Ci0JcHhhX2RtYS0+c2dfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHBjZGV2LT5zb2NfaG9zdC5kZXYsIHB4YV9kbWEtPnNnX3NpemUsCisJcHhhX2RtYS0+c2dfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgcHhhX2RtYS0+c2dfc2l6ZSwKIAkJCQkJICAgICAmcHhhX2RtYS0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXB4YV9kbWEtPnNnX2NwdSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNDUsNyArMzUxLDcgQEAKIAlweGFfZG1hLT5zZ2xlbiA9IHNnbGVuOwogCW9mZnNldCA9ICpzZ19maXJzdF9vZnM7CiAKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJETUE6IHNnX2ZpcnN0PSVwLCBzZ2xlbj0lZCwgb2ZzPSVkLCBkbWEuZGVzYz0leFxuIiwKKwlkZXZfZGJnKGRldiwgIkRNQTogc2dfZmlyc3Q9JXAsIHNnbGVuPSVkLCBvZnM9JWQsIGRtYS5kZXNjPSV4XG4iLAogCQkqc2dfZmlyc3QsIHNnbGVuLCAqc2dfZmlyc3Rfb2ZzLCBweGFfZG1hLT5zZ19kbWEpOwogCiAKQEAgLTM2OCw3ICszNzQsNyBAQAogCQlweGFfZG1hLT5zZ19jcHVbaV0uZGRhZHIgPQogCQkJcHhhX2RtYS0+c2dfZG1hICsgKGkgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcHhhX2RtYV9kZXNjKTsKIAotCQlkZXZfdmRiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiRE1BOiBkZXNjLiUwOHgtPkBwaHlzPTB4JTA4eCwgbGVuPSVkXG4iLAorCQlkZXZfdmRiZyhkZXYsICJETUE6IGRlc2MuJTA4eC0+QHBoeXM9MHglMDh4LCBsZW49JWRcbiIsCiAJCQkgcHhhX2RtYS0+c2dfZG1hICsgaSAqIHNpemVvZihzdHJ1Y3QgcHhhX2RtYV9kZXNjKSwKIAkJCSBzZ19kbWFfYWRkcmVzcyhzZykgKyBvZmZzZXQsIHhmZXJfbGVuKTsKIAkJb2Zmc2V0ID0gMDsKQEAgLTQxOCwxMSArNDI0LDEyIEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldjsKIAlzdHJ1Y3QgcHhhX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgcHhhX2J1ZmZlciwgdmIpOwogCWludCByZXQ7CiAJaW50IHNpemVfeSwgc2l6ZV91ID0gMCwgc2l6ZV92ID0gMDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJLyogQWRkZWQgbGlzdCBoZWFkIGluaXRpYWxpemF0aW9uIG9uIGFsbG9jICovCkBAIC00NDEsMTIgKzQ0OCwxMiBAQAogCWJ1Zi0+aW53b3JrID0gMTsKIAogCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8Ci0JICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8Ci0JICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPndpZHRoCSE9IGljZC0+dXNlcl93aWR0aCB8fAorCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+dXNlcl9oZWlnaHQgfHwKIAkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CiAJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKLQkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKLQkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+d2lkdGgJPSBpY2QtPnVzZXJfd2lkdGg7CisJCXZiLT5oZWlnaHQJPSBpY2QtPnVzZXJfaGVpZ2h0OwogCQl2Yi0+ZmllbGQJPSBmaWVsZDsKIAkJdmItPnN0YXRlCT0gVklERU9CVUZfTkVFRFNfSU5JVDsKIAl9CkBAIC00ODAsOCArNDg3LDcgQEAKIAkJcmV0ID0gcHhhX2luaXRfZG1hX2NoYW5uZWwocGNkZXYsIGJ1ZiwgZG1hLCAwLCBDSUJSMCwgc2l6ZV95LAogCQkJCQkgICAmc2csICZuZXh0X29mcyk7CiAJCWlmIChyZXQpIHsKLQkJCWRldl9lcnIocGNkZXYtPnNvY19ob3N0LmRldiwKLQkJCQkiRE1BIGluaXRpYWxpemF0aW9uIGZvciBZL1JHQiBmYWlsZWRcbiIpOworCQkJZGV2X2VycihkZXYsICJETUEgaW5pdGlhbGl6YXRpb24gZm9yIFkvUkdCIGZhaWxlZFxuIik7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIApAQCAtNDkwLDggKzQ5Niw3IEBACiAJCQlyZXQgPSBweGFfaW5pdF9kbWFfY2hhbm5lbChwY2RldiwgYnVmLCBkbWEsIDEsIENJQlIxLAogCQkJCQkJICAgc2l6ZV91LCAmc2csICZuZXh0X29mcyk7CiAJCWlmIChyZXQpIHsKLQkJCWRldl9lcnIocGNkZXYtPnNvY19ob3N0LmRldiwKLQkJCQkiRE1BIGluaXRpYWxpemF0aW9uIGZvciBVIGZhaWxlZFxuIik7CisJCQlkZXZfZXJyKGRldiwgIkRNQSBpbml0aWFsaXphdGlvbiBmb3IgVSBmYWlsZWRcbiIpOwogCQkJZ290byBmYWlsX3U7CiAJCX0KIApAQCAtNTAwLDggKzUwNSw3IEBACiAJCQlyZXQgPSBweGFfaW5pdF9kbWFfY2hhbm5lbChwY2RldiwgYnVmLCBkbWEsIDIsIENJQlIyLAogCQkJCQkJICAgc2l6ZV92LCAmc2csICZuZXh0X29mcyk7CiAJCWlmIChyZXQpIHsKLQkJCWRldl9lcnIocGNkZXYtPnNvY19ob3N0LmRldiwKLQkJCQkiRE1BIGluaXRpYWxpemF0aW9uIGZvciBWIGZhaWxlZFxuIik7CisJCQlkZXZfZXJyKGRldiwgIkRNQSBpbml0aWFsaXphdGlvbiBmb3IgViBmYWlsZWRcbiIpOwogCQkJZ290byBmYWlsX3Y7CiAJCX0KIApAQCAtNTE0LDEwICs1MTgsMTAgQEAKIAlyZXR1cm4gMDsKIAogZmFpbF92OgotCWRtYV9mcmVlX2NvaGVyZW50KHBjZGV2LT5zb2NfaG9zdC5kZXYsIGJ1Zi0+ZG1hc1sxXS5zZ19zaXplLAorCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgYnVmLT5kbWFzWzFdLnNnX3NpemUsCiAJCQkgIGJ1Zi0+ZG1hc1sxXS5zZ19jcHUsIGJ1Zi0+ZG1hc1sxXS5zZ19kbWEpOwogZmFpbF91OgotCWRtYV9mcmVlX2NvaGVyZW50KHBjZGV2LT5zb2NfaG9zdC5kZXYsIGJ1Zi0+ZG1hc1swXS5zZ19zaXplLAorCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgYnVmLT5kbWFzWzBdLnNnX3NpemUsCiAJCQkgIGJ1Zi0+ZG1hc1swXS5zZ19jcHUsIGJ1Zi0+ZG1hc1swXS5zZ19kbWEpOwogZmFpbDoKIAlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKQEAgLTU0MSw3ICs1NDUsOCBAQAogCWFjdGl2ZSA9IHBjZGV2LT5hY3RpdmU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGNkZXYtPmNoYW5uZWxzOyBpKyspIHsKLQkJZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiJXMgKGNoYW5uZWw9JWQpIGRkYWRyPSUwOHhcbiIsIF9fZnVuY19fLAorCQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXYsCisJCQkiJXMgKGNoYW5uZWw9JWQpIGRkYWRyPSUwOHhcbiIsIF9fZnVuY19fLAogCQkJaSwgYWN0aXZlLT5kbWFzW2ldLnNnX2RtYSk7CiAJCUREQURSKHBjZGV2LT5kbWFfY2hhbnNbaV0pID0gYWN0aXZlLT5kbWFzW2ldLnNnX2RtYTsKIAkJRENTUihwY2Rldi0+ZG1hX2NoYW5zW2ldKSA9IERDU1JfUlVOOwpAQCAtNTUzLDcgKzU1OCw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGNkZXYtPmNoYW5uZWxzOyBpKyspIHsKLQkJZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiJXMgKGNoYW5uZWw9JWQpXG4iLCBfX2Z1bmNfXywgaSk7CisJCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldiwKKwkJCSIlcyAoY2hhbm5lbD0lZClcbiIsIF9fZnVuY19fLCBpKTsKIAkJRENTUihwY2Rldi0+ZG1hX2NoYW5zW2ldKSA9IDA7CiAJfQogfQpAQCAtNTg5LDcgKzU5NSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBjaWNyMCwgY2lmcjsKIAotCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAkvKiBSZXNldCB0aGUgRklGT3MgKi8KIAljaWZyID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSUZSKSB8IENJRlJfUkVTRVRfRjsKIAlfX3Jhd193cml0ZWwoY2lmciwgcGNkZXYtPmJhc2UgKyBDSUZSKTsKQEAgLTYwOSw3ICs2MTUsNyBAQAogCV9fcmF3X3dyaXRlbChjaWNyMCwgcGNkZXYtPmJhc2UgKyBDSUNSMCk7CiAKIAlwY2Rldi0+YWN0aXZlID0gTlVMTDsKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIC8qIENhbGxlZCB1bmRlciBzcGlubG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgLi4uKSAqLwpAQCAtNjIxLDggKzYyNyw4IEBACiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlzdHJ1Y3QgcHhhX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgcHhhX2J1ZmZlciwgdmIpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZCBhY3RpdmU9JXBcbiIsIF9fZnVuY19fLAotCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUsIHBjZGV2LT5hY3RpdmUpOworCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWQgYWN0aXZlPSVwXG4iLAorCQlfX2Z1bmNfXywgdmIsIHZiLT5iYWRkciwgdmItPmJzaXplLCBwY2Rldi0+YWN0aXZlKTsKIAogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKIApAQCAtNjM5LDIyICs2NDUsMjMgQEAKIAlzdHJ1Y3QgcHhhX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgcHhhX2J1ZmZlciwgdmIpOwogI2lmZGVmIERFQlVHCiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJc3dpdGNoICh2Yi0+c3RhdGUpIHsKIAljYXNlIFZJREVPQlVGX0FDVElWRToKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAoYWN0aXZlKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzIChhY3RpdmUpXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWNhc2UgVklERU9CVUZfUVVFVUVEOgotCQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIChxdWV1ZWQpXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoZGV2LCAiJXMgKHF1ZXVlZClcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJY2FzZSBWSURFT0JVRl9QUkVQQVJFRDoKLQkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAocHJlcGFyZWQpXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoZGV2LCAiJXMgKHByZXBhcmVkKVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh1bmtub3duKVxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKGRldiwgIiVzICh1bmtub3duKVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAl9CiAjZW5kaWYKQEAgLTY3NCw3ICs2ODEsOCBAQAogCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKIAl2Yi0+ZmllbGRfY291bnQrKzsKIAl3YWtlX3VwKCZ2Yi0+ZG9uZSk7Ci0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiJXMgZGVxdWV1ZCBidWZmZXIgKHZiPTB4JXApXG4iLCBfX2Z1bmNfXywgdmIpOworCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldiwgIiVzIGRlcXVldWQgYnVmZmVyICh2Yj0weCVwKVxuIiwKKwkJX19mdW5jX18sIHZiKTsKIAogCWlmIChsaXN0X2VtcHR5KCZwY2Rldi0+Y2FwdHVyZSkpIHsKIAkJcHhhX2NhbWVyYV9zdG9wX2NhcHR1cmUocGNkZXYpOwpAQCAtNzEwLDcgKzcxOCw4IEBACiAJZm9yIChpID0gMDsgaSA8IHBjZGV2LT5jaGFubmVsczsgaSsrKQogCQlpZiAoRERBRFIocGNkZXYtPmRtYV9jaGFuc1tpXSkgIT0gRERBRFJfU1RPUCkKIAkJCWlzX2RtYV9zdG9wcGVkID0gMDsKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICIlcyA6IHRvcCBxdWV1ZWQgYnVmZmVyPSVwLCBkbWFfc3RvcHBlZD0lZFxuIiwKKwlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXYsCisJCSIlcyA6IHRvcCBxdWV1ZWQgYnVmZmVyPSVwLCBkbWFfc3RvcHBlZD0lZFxuIiwKIAkJX19mdW5jX18sIHBjZGV2LT5hY3RpdmUsIGlzX2RtYV9zdG9wcGVkKTsKIAlpZiAocGNkZXYtPmFjdGl2ZSAmJiBpc19kbWFfc3RvcHBlZCkKIAkJcHhhX2NhbWVyYV9zdGFydF9jYXB0dXJlKHBjZGV2KTsKQEAgLTcxOSw2ICs3MjgsNyBAQAogc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9kbWFfaXJxKGludCBjaGFubmVsLCBzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2LAogCQkJICAgICAgIGVudW0gcHhhX2NhbWVyYV9hY3RpdmVfZG1hIGFjdF9kbWEpCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldjsKIAlzdHJ1Y3QgcHhhX2J1ZmZlciAqYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHN0YXR1cywgY2FtZXJhX3N0YXR1cywgb3ZlcnJ1bjsKQEAgLTczNSwxMyArNzQ1LDEzIEBACiAJCW92ZXJydW4gfD0gQ0lTUl9JRk9fMSB8IENJU1JfSUZPXzI7CiAKIAlpZiAoc3RhdHVzICYgRENTUl9CVVNFUlIpIHsKLQkJZGV2X2VycihwY2Rldi0+c29jX2hvc3QuZGV2LCAiRE1BIEJ1cyBFcnJvciBJUlEhXG4iKTsKKwkJZGV2X2VycihkZXYsICJETUEgQnVzIEVycm9yIElSUSFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIShzdGF0dXMgJiAoRENTUl9FTkRJTlRSIHwgRENTUl9TVEFSVElOVFIpKSkgewotCQlkZXZfZXJyKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJVbmtub3duIERNQSBJUlEgc291cmNlLCAiCi0JCQkic3RhdHVzOiAweCUwOHhcbiIsIHN0YXR1cyk7CisJCWRldl9lcnIoZGV2LCAiVW5rbm93biBETUEgSVJRIHNvdXJjZSwgc3RhdHVzOiAweCUwOHhcbiIsCisJCQlzdGF0dXMpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTc2NCw3ICs3NzQsNyBAQAogCWJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHB4YV9idWZmZXIsIHZiKTsKIAlXQVJOX09OKGJ1Zi0+aW53b3JrIHx8IGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpOwogCi0JZGV2X2RiZyhwY2Rldi0+c29jX2hvc3QuZGV2LCAiJXMgY2hhbm5lbD0lZCAlcyVzKHZiPTB4JXApIGRtYS5kZXNjPSV4XG4iLAorCWRldl9kYmcoZGV2LCAiJXMgY2hhbm5lbD0lZCAlcyVzKHZiPTB4JXApIGRtYS5kZXNjPSV4XG4iLAogCQlfX2Z1bmNfXywgY2hhbm5lbCwgc3RhdHVzICYgRENTUl9TVEFSVElOVFIgPyAiU09GICIgOiAiIiwKIAkJc3RhdHVzICYgRENTUl9FTkRJTlRSID8gIkVPRiAiIDogIiIsIHZiLCBEREFEUihjaGFubmVsKSk7CiAKQEAgLTc3NSw3ICs3ODUsNyBAQAogCQkgKi8KIAkJaWYgKGNhbWVyYV9zdGF0dXMgJiBvdmVycnVuICYmCiAJCSAgICAhbGlzdF9pc19sYXN0KHBjZGV2LT5jYXB0dXJlLm5leHQsICZwY2Rldi0+Y2FwdHVyZSkpIHsKLQkJCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIkZJRk8gb3ZlcnJ1biEgQ0lTUjogJXhcbiIsCisJCQlkZXZfZGJnKGRldiwgIkZJRk8gb3ZlcnJ1biEgQ0lTUjogJXhcbiIsCiAJCQkJY2FtZXJhX3N0YXR1cyk7CiAJCQlweGFfY2FtZXJhX3N0b3BfY2FwdHVyZShwY2Rldik7CiAJCQlweGFfY2FtZXJhX3N0YXJ0X2NhcHR1cmUocGNkZXYpOwpAQCAtODMwLDkgKzg0MCwxMSBAQAogCQkJCXNpemVvZihzdHJ1Y3QgcHhhX2J1ZmZlciksIGljZCk7CiB9CiAKLXN0YXRpYyB1MzIgbWNsa19nZXRfZGl2aXNvcihzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2KQorc3RhdGljIHUzMiBtY2xrX2dldF9kaXZpc29yKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldikKIHsKIAl1bnNpZ25lZCBsb25nIG1jbGsgPSBwY2Rldi0+bWNsazsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXUzMiBkaXY7CiAJdW5zaWduZWQgbG9uZyBsY2RjbGs7CiAKQEAgLTg0Miw3ICs4NTQsNyBAQAogCS8qIG1jbGsgPD0gY2ljbGsgLyA0ICgyNy40LjIpICovCiAJaWYgKG1jbGsgPiBsY2RjbGsgLyA0KSB7CiAJCW1jbGsgPSBsY2RjbGsgLyA0OwotCQlkZXZfd2FybihwY2Rldi0+c29jX2hvc3QuZGV2LCAiTGltaXRpbmcgbWFzdGVyIGNsb2NrIHRvICVsdVxuIiwgbWNsayk7CisJCWRldl93YXJuKGRldiwgIkxpbWl0aW5nIG1hc3RlciBjbG9jayB0byAlbHVcbiIsIG1jbGspOwogCX0KIAogCS8qIFdlIHZlcmlmeSBtY2xrICE9IDAsIHNvIGlmIGFueW9uZSBicmVha3MgaXQsIGhlcmUgY29tZXMgdGhlaXIgT29wcyAqLwpAQCAtODUyLDggKzg2NCw4IEBACiAJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfTUNMS19FTikKIAkJcGNkZXYtPm1jbGsgPSBsY2RjbGsgLyAoMiAqIChkaXYgKyAxKSk7CiAKLQlkZXZfZGJnKHBjZGV2LT5zb2NfaG9zdC5kZXYsICJMQ0QgY2xvY2sgJWx1SHosIHRhcmdldCBmcmVxICVsdUh6LCAiCi0JCSJkaXZpc29yICV1XG4iLCBsY2RjbGssIG1jbGssIGRpdik7CisJZGV2X2RiZyhkZXYsICJMQ0QgY2xvY2sgJWx1SHosIHRhcmdldCBmcmVxICVsdUh6LCBkaXZpc29yICV1XG4iLAorCQlsY2RjbGssIG1jbGssIGRpdik7CiAKIAlyZXR1cm4gZGl2OwogfQpAQCAtODcwLDE0ICs4ODIsMTUgQEAKIHN0YXRpYyB2b2lkIHB4YV9jYW1lcmFfYWN0aXZhdGUoc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldikKIHsKIAlzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGNkZXYtPnBkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXY7CiAJdTMyIGNpY3I0ID0gMDsKIAotCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIlJlZ2lzdGVyZWQgcGxhdGZvcm0gZGV2aWNlIGF0ICVwIGRhdGEgJXBcbiIsCisJZGV2X2RiZyhkZXYsICJSZWdpc3RlcmVkIHBsYXRmb3JtIGRldmljZSBhdCAlcCBkYXRhICVwXG4iLAogCQlwY2RldiwgcGRhdGEpOwogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5pbml0KSB7Ci0JCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIiVzOiBJbml0IGdwaW9zXG4iLCBfX2Z1bmNfXyk7Ci0JCXBkYXRhLT5pbml0KHBjZGV2LT5zb2NfaG9zdC5kZXYpOworCQlkZXZfZGJnKGRldiwgIiVzOiBJbml0IGdwaW9zXG4iLCBfX2Z1bmNfXyk7CisJCXBkYXRhLT5pbml0KGRldik7CiAJfQogCiAJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwpAQCAtOTE5LDcgKzkzMiw4IEBACiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CiAKIAlzdGF0dXMgPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJU1IpOwotCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LmRldiwgIkNhbWVyYSBpbnRlcnJ1cHQgc3RhdHVzIDB4JWx4XG4iLCBzdGF0dXMpOworCWRldl9kYmcocGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldiwKKwkJIkNhbWVyYSBpbnRlcnJ1cHQgc3RhdHVzIDB4JWx4XG4iLCBzdGF0dXMpOwogCiAJaWYgKCFzdGF0dXMpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTk1MSwyNCArOTY1LDE4IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKLQlpbnQgcmV0OwogCi0JaWYgKHBjZGV2LT5pY2QpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIGVidXN5OwotCX0KLQotCWRldl9pbmZvKCZpY2QtPmRldiwgIlBYQSBDYW1lcmEgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKLQkJIGljZC0+ZGV2bnVtKTsKKwlpZiAocGNkZXYtPmljZCkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCXB4YV9jYW1lcmFfYWN0aXZhdGUocGNkZXYpOwotCXJldCA9IGljZC0+b3BzLT5pbml0KGljZCk7CiAKLQlpZiAoIXJldCkKLQkJcGNkZXYtPmljZCA9IGljZDsKKwlwY2Rldi0+aWNkID0gaWNkOwogCi1lYnVzeToKLQlyZXR1cm4gcmV0OworCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwgIlBYQSBDYW1lcmEgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKKwkJIGljZC0+ZGV2bnVtKTsKKworCXJldHVybiAwOwogfQogCiAvKiBDYWxsZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCkBAIC05NzksNyArOTg3LDcgQEAKIAogCUJVR19PTihpY2QgIT0gcGNkZXYtPmljZCk7CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsICJQWEEgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKKwlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJQWEEgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAogCS8qIGRpc2FibGUgY2FwdHVyZSwgZGlzYWJsZSBpbnRlcnJ1cHRzICovCkBAIC05OTAsOCArOTk4LDYgQEAKIAlEQ1NSKHBjZGV2LT5kbWFfY2hhbnNbMV0pID0gMDsKIAlEQ1NSKHBjZGV2LT5kbWFfY2hhbnNbMl0pID0gMDsKIAotCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7Ci0KIAlweGFfY2FtZXJhX2RlYWN0aXZhdGUocGNkZXYpOwogCiAJcGNkZXYtPmljZCA9IE5VTEw7CkBAIC0xMDM5LDEzICsxMDQ1LDEwMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBweGFfY2FtZXJhX3NldHVwX2NpY3Ioc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCBfX3UzMiBwaXhmbXQpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGR3LCBicHA7CisJdTMyIGNpY3IwLCBjaWNyMSwgY2ljcjIsIGNpY3IzLCBjaWNyNCA9IDA7CisKKwkvKiBEYXRhd2lkdGggaXMgbm93IGd1YXJhbnRlZWQgdG8gYmUgZXF1YWwgdG8gb25lIG9mIHRoZSB0aHJlZSB2YWx1ZXMuCisJICogV2UgZml4IGJpdC1wZXItcGl4ZWwgZXF1YWwgdG8gZGF0YS13aWR0aC4uLiAqLworCXN3aXRjaCAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSykgeworCWNhc2UgU09DQU1fREFUQVdJRFRIXzEwOgorCQlkdyA9IDQ7CisJCWJwcCA9IDB4NDA7CisJCWJyZWFrOworCWNhc2UgU09DQU1fREFUQVdJRFRIXzk6CisJCWR3ID0gMzsKKwkJYnBwID0gMHgyMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogQWN0dWFsbHkgaXQgY2FuIG9ubHkgYmUgOCBub3csCisJCSAqIGRlZmF1bHQgaXMganVzdCB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzICovCisJY2FzZSBTT0NBTV9EQVRBV0lEVEhfODoKKwkJZHcgPSAyOworCQlicHAgPSAwOworCX0KKworCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX1BDTEtfRU4pCisJCWNpY3I0IHw9IENJQ1I0X1BDTEtfRU47CisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfTUNMS19FTikKKwkJY2ljcjQgfD0gQ0lDUjRfTUNMS19FTjsKKwlpZiAoZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQorCQljaWNyNCB8PSBDSUNSNF9QQ1A7CisJaWYgKGZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykKKwkJY2ljcjQgfD0gQ0lDUjRfSFNQOworCWlmIChmbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpCisJCWNpY3I0IHw9IENJQ1I0X1ZTUDsKKworCWNpY3IwID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSUNSMCk7CisJaWYgKGNpY3IwICYgQ0lDUjBfRU5CKQorCQlfX3Jhd193cml0ZWwoY2ljcjAgJiB+Q0lDUjBfRU5CLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKKworCWNpY3IxID0gQ0lDUjFfUFBMX1ZBTChpY2QtPnVzZXJfd2lkdGggLSAxKSB8IGJwcCB8IGR3OworCisJc3dpdGNoIChwaXhmbXQpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgorCQlwY2Rldi0+Y2hhbm5lbHMgPSAzOworCQljaWNyMSB8PSBDSUNSMV9ZQ0JDUl9GOworCQkvKgorCQkgKiBOb3JtYWxseSwgcHhhIGJ1cyB3YW50cyBhcyBpbnB1dCBVWVZZIGZvcm1hdC4gV2UgYWxsb3cgYWxsCisJCSAqIHJlb3JkZXJpbmdzIG9mIHRoZSBZVVY0MjIgZm9ybWF0LCBhcyBubyBwcm9jZXNzaW5nIGlzIGRvbmUsCisJCSAqIGFuZCB0aGUgWVVWIHN0cmVhbSBpcyBqdXN0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQgYW55CisJCSAqIHRyYW5zZm9ybWF0aW9uLiBOb3RlIHRoYXQgVVlWWSBpcyB0aGUgb25seSBmb3JtYXQgdGhhdAorCQkgKiBzaG91bGQgYmUgdXNlZCBpZiBweGEgZnJhbWVidWZmZXIgT3ZlcmxheTIgaXMgdXNlZC4KKwkJICovCisJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKKwkJY2ljcjEgfD0gQ0lDUjFfQ09MT1JfU1BfVkFMKDIpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6CisJCWNpY3IxIHw9IENJQ1IxX1JHQl9CUFBfVkFMKDEpIHwgQ0lDUjFfUkdCVF9DT05WX1ZBTCgyKSB8CisJCQlDSUNSMV9UQklUIHwgQ0lDUjFfQ09MT1JfU1BfVkFMKDEpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJCWNpY3IxIHw9IENJQ1IxX0NPTE9SX1NQX1ZBTCgxKSB8IENJQ1IxX1JHQl9CUFBfVkFMKDIpOworCQlicmVhazsKKwl9CisKKwljaWNyMiA9IDA7CisJY2ljcjMgPSBDSUNSM19MUEZfVkFMKGljZC0+dXNlcl9oZWlnaHQgLSAxKSB8CisJCUNJQ1IzX0JGV19WQUwobWluKCh1bnNpZ25lZCBzaG9ydCkyNTUsIGljZC0+eV9za2lwX3RvcCkpOworCWNpY3I0IHw9IHBjZGV2LT5tY2xrX2Rpdmlzb3I7CisKKwlfX3Jhd193cml0ZWwoY2ljcjEsIHBjZGV2LT5iYXNlICsgQ0lDUjEpOworCV9fcmF3X3dyaXRlbChjaWNyMiwgcGNkZXYtPmJhc2UgKyBDSUNSMik7CisJX19yYXdfd3JpdGVsKGNpY3IzLCBwY2Rldi0+YmFzZSArIENJQ1IzKTsKKwlfX3Jhd193cml0ZWwoY2ljcjQsIHBjZGV2LT5iYXNlICsgQ0lDUjQpOworCisJLyogQ0lGIGludGVycnVwdHMgYXJlIG5vdCB1c2VkLCBvbmx5IERNQSAqLworCWNpY3IwID0gKGNpY3IwICYgQ0lDUjBfRU5CKSB8IChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX01BU1RFUiA/CisJCUNJQ1IwX1NJTV9NUCA6IChDSUNSMF9TTF9DQVBfRU4gfCBDSUNSMF9TSU1fU1ApKTsKKwljaWNyMCB8PSBDSUNSMF9ETUFFTiB8IENJQ1IwX0lSUV9NQVNLOworCV9fcmF3X3dyaXRlbChjaWNyMCwgcGNkZXYtPmJhc2UgKyBDSUNSMCk7Cit9CisKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGR3LCBicHAsIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3M7Ci0JdTMyIGNpY3IwLCBjaWNyMSwgY2ljcjIsIGNpY3IzLCBjaWNyNCA9IDA7CisJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOwogCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKHBjZGV2LCBpY2QtPmJ1c3dpZHRoLCAmYnVzX2ZsYWdzKTsKKwlzdHJ1Y3QgcHhhX2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTEwODMsODcgKzExNzYsMTMgQEAKIAkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fUENMS19TQU1QTEVfRkFMTElORzsKIAl9CiAKKwljYW0tPmZsYWdzID0gY29tbW9uX2ZsYWdzOworCiAJcmV0ID0gaWNkLT5vcHMtPnNldF9idXNfcGFyYW0oaWNkLCBjb21tb25fZmxhZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyogRGF0YXdpZHRoIGlzIG5vdyBndWFyYW50ZWVkIHRvIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgdGhyZWUgdmFsdWVzLgotCSAqIFdlIGZpeCBiaXQtcGVyLXBpeGVsIGVxdWFsIHRvIGRhdGEtd2lkdGguLi4gKi8KLQlzd2l0Y2ggKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLKSB7Ci0JY2FzZSBTT0NBTV9EQVRBV0lEVEhfMTA6Ci0JCWR3ID0gNDsKLQkJYnBwID0gMHg0MDsKLQkJYnJlYWs7Ci0JY2FzZSBTT0NBTV9EQVRBV0lEVEhfOToKLQkJZHcgPSAzOwotCQlicHAgPSAweDIwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBBY3R1YWxseSBpdCBjYW4gb25seSBiZSA4IG5vdywKLQkJICogZGVmYXVsdCBpcyBqdXN0IHRvIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgKi8KLQljYXNlIFNPQ0FNX0RBVEFXSURUSF84OgotCQlkdyA9IDI7Ci0JCWJwcCA9IDA7Ci0JfQotCi0JaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKLQkJY2ljcjQgfD0gQ0lDUjRfUENMS19FTjsKLQlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9NQ0xLX0VOKQotCQljaWNyNCB8PSBDSUNSNF9NQ0xLX0VOOwotCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQotCQljaWNyNCB8PSBDSUNSNF9QQ1A7Ci0JaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpCi0JCWNpY3I0IHw9IENJQ1I0X0hTUDsKLQlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0xPVykKLQkJY2ljcjQgfD0gQ0lDUjRfVlNQOwotCi0JY2ljcjAgPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1IwKTsKLQlpZiAoY2ljcjAgJiBDSUNSMF9FTkIpCi0JCV9fcmF3X3dyaXRlbChjaWNyMCAmIH5DSUNSMF9FTkIsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwotCi0JY2ljcjEgPSBDSUNSMV9QUExfVkFMKGljZC0+d2lkdGggLSAxKSB8IGJwcCB8IGR3OwotCi0Jc3dpdGNoIChwaXhmbXQpIHsKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgotCQlwY2Rldi0+Y2hhbm5lbHMgPSAzOwotCQljaWNyMSB8PSBDSUNSMV9ZQ0JDUl9GOwotCQkvKgotCQkgKiBOb3JtYWxseSwgcHhhIGJ1cyB3YW50cyBhcyBpbnB1dCBVWVZZIGZvcm1hdC4gV2UgYWxsb3cgYWxsCi0JCSAqIHJlb3JkZXJpbmdzIG9mIHRoZSBZVVY0MjIgZm9ybWF0LCBhcyBubyBwcm9jZXNzaW5nIGlzIGRvbmUsCi0JCSAqIGFuZCB0aGUgWVVWIHN0cmVhbSBpcyBqdXN0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQgYW55Ci0JCSAqIHRyYW5zZm9ybWF0aW9uLiBOb3RlIHRoYXQgVVlWWSBpcyB0aGUgb25seSBmb3JtYXQgdGhhdAotCQkgKiBzaG91bGQgYmUgdXNlZCBpZiBweGEgZnJhbWVidWZmZXIgT3ZlcmxheTIgaXMgdXNlZC4KLQkJICovCi0JY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKLQljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKLQkJY2ljcjEgfD0gQ0lDUjFfQ09MT1JfU1BfVkFMKDIpOwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6Ci0JCWNpY3IxIHw9IENJQ1IxX1JHQl9CUFBfVkFMKDEpIHwgQ0lDUjFfUkdCVF9DT05WX1ZBTCgyKSB8Ci0JCQlDSUNSMV9UQklUIHwgQ0lDUjFfQ09MT1JfU1BfVkFMKDEpOwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0JCWNpY3IxIHw9IENJQ1IxX0NPTE9SX1NQX1ZBTCgxKSB8IENJQ1IxX1JHQl9CUFBfVkFMKDIpOwotCQlicmVhazsKLQl9Ci0KLQljaWNyMiA9IDA7Ci0JY2ljcjMgPSBDSUNSM19MUEZfVkFMKGljZC0+aGVpZ2h0IC0gMSkgfAotCQlDSUNSM19CRldfVkFMKG1pbigodW5zaWduZWQgc2hvcnQpMjU1LCBpY2QtPnlfc2tpcF90b3ApKTsKLQljaWNyNCB8PSBwY2Rldi0+bWNsa19kaXZpc29yOwotCi0JX19yYXdfd3JpdGVsKGNpY3IxLCBwY2Rldi0+YmFzZSArIENJQ1IxKTsKLQlfX3Jhd193cml0ZWwoY2ljcjIsIHBjZGV2LT5iYXNlICsgQ0lDUjIpOwotCV9fcmF3X3dyaXRlbChjaWNyMywgcGNkZXYtPmJhc2UgKyBDSUNSMyk7Ci0JX19yYXdfd3JpdGVsKGNpY3I0LCBwY2Rldi0+YmFzZSArIENJQ1I0KTsKLQotCS8qIENJRiBpbnRlcnJ1cHRzIGFyZSBub3QgdXNlZCwgb25seSBETUEgKi8KLQljaWNyMCA9IChjaWNyMCAmIENJQ1IwX0VOQikgfCAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9NQVNURVIgPwotCQlDSUNSMF9TSU1fTVAgOiAoQ0lDUjBfU0xfQ0FQX0VOIHwgQ0lDUjBfU0lNX1NQKSk7Ci0JY2ljcjAgfD0gQ0lDUjBfRE1BRU4gfCBDSUNSMF9JUlFfTUFTSzsKLQlfX3Jhd193cml0ZWwoY2ljcjAsIHBjZGV2LT5iYXNlICsgQ0lDUjApOworCXB4YV9jYW1lcmFfc2V0dXBfY2ljcihpY2QsIGNvbW1vbl9mbGFncywgcGl4Zm10KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIyNyw4ICsxMjQ2LDkgQEAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9nZXRfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGlkeCwKIAkJCQkgIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCWludCBmb3JtYXRzID0gMCwgYnVzd2lkdGgsIHJldDsKKwlzdHJ1Y3QgcHhhX2NhbSAqY2FtOwogCiAJYnVzd2lkdGggPSByZXF1aXJlZF9idXN3aWR0aChpY2QtPmZvcm1hdHMgKyBpZHgpOwogCkBAIC0xMjM5LDYgKzEyNTksMTYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWljZC0+aG9zdF9wcml2KSB7CisJCWNhbSA9IGt6YWxsb2Moc2l6ZW9mKCpjYW0pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjYW0pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpY2QtPmhvc3RfcHJpdiA9IGNhbTsKKwl9IGVsc2UgeworCQljYW0gPSBpY2QtPmhvc3RfcHJpdjsKKwl9CisKIAlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgewogCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CiAJCWZvcm1hdHMrKzsKQEAgLTEyNDcsNyArMTI3Nyw3IEBACiAJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKIAkJCXhsYXRlLT5idXN3aWR0aCA9IGJ1c3dpZHRoOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoaWNpLT5kZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAorCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAogCQkJCXB4YV9jYW1lcmFfZm9ybWF0c1swXS5uYW1lLAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CkBAIC0xMjYyLDcgKzEyOTIsNyBAQAogCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CiAJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKIAkJCXhsYXRlKys7Ci0JCQlkZXZfZGJnKGljaS0+ZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyBwYWNrZWRcbiIsCisJCQlkZXZfZGJnKGRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgcGFja2VkXG4iLAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CiAJCWJyZWFrOwpAQCAtMTI3NCw3ICsxMzA0LDcgQEAKIAkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwogCQkJeGxhdGUtPmJ1c3dpZHRoID0gaWNkLT5mb3JtYXRzW2lkeF0uZGVwdGg7CiAJCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhpY2ktPmRldiwKKwkJCWRldl9kYmcoZGV2LAogCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CkBAIC0xMjgzLDMxICsxMzEzLDgwIEBACiAJcmV0dXJuIGZvcm1hdHM7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9wdXRfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlrZnJlZShpY2QtPmhvc3RfcHJpdik7CisJaWNkLT5ob3N0X3ByaXYgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfY2hlY2tfZnJhbWUoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4KQoreworCS8qIGxpbWl0IHRvIHB4YSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8KKwlyZXR1cm4gcGl4LT5oZWlnaHQgPCAzMiB8fCBwaXgtPmhlaWdodCA+IDIwNDggfHwgcGl4LT53aWR0aCA8IDQ4IHx8CisJCXBpeC0+d2lkdGggPiAyMDQ4IHx8IChwaXgtPndpZHRoICYgMHgwMSk7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jcm9wICphKQoreworCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmYS0+YzsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9zZW5zZSBzZW5zZSA9IHsKIAkJLm1hc3Rlcl9jbG9jayA9IHBjZGV2LT5tY2xrLAogCQkucGl4ZWxfY2xvY2tfbWF4ID0gcGNkZXYtPmNpY2xrIC8gNCwKIAl9OworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLmZtdC5waXgsIHBpeF90bXA7CisJc3RydWN0IHB4YV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OwogCWludCByZXQ7CiAKIAkvKiBJZiBQQ0xLIGlzIHVzZWQgdG8gbGF0Y2ggZGF0YSBmcm9tIHRoZSBzZW5zb3IsIGNoZWNrIHNlbnNlICovCiAJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKIAkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKIAotCXJldCA9IGljZC0+b3BzLT5zZXRfY3JvcChpY2QsIHJlY3QpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2Nyb3AsIGEpOwogCiAJaWNkLT5zZW5zZSA9IE5VTEw7CiAKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZhaWxlZCB0byBjcm9wIHRvICV1eCV1QCV1OiV1XG4iLAorCQlkZXZfd2FybihkZXYsICJGYWlsZWQgdG8gY3JvcCB0byAldXgldUAldToldVxuIiwKIAkJCSByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5sZWZ0LCByZWN0LT50b3ApOwotCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19mbXQsICZmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXBpeF90bXAgPSAqcGl4OworCWlmIChweGFfY2FtZXJhX2NoZWNrX2ZyYW1lKHBpeCkpIHsKKwkJLyoKKwkJICogQ2FtZXJhIGNyb3BwaW5nIHByb2R1Y2VkIGEgZnJhbWUgYmV5b25kIG91ciBjYXBhYmlsaXRpZXMuCisJCSAqIEZJWE1FOiBqdXN0IGV4dHJhY3QgYSBzdWJmcmFtZSwgdGhhdCB3ZSBjYW4gcHJvY2Vzcy4KKwkJICovCisJCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcGl4LT53aWR0aCwgNDgsIDIwNDgsIDEsCisJCQkmcGl4LT5oZWlnaHQsIDMyLCAyMDQ4LCAwLAorCQkJaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MjJQID8KKwkJCQk0IDogMCk7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgJmYpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHB4YV9jYW1lcmFfY2hlY2tfZnJhbWUocGl4KSkgeworCQkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LAorCQkJCSAiSW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgU19GTVQgdG8gcmVwYWlyXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKHNlbnNlLmZsYWdzICYgU09DQU1fU0VOU0VfUENMS19DSEFOR0VEKSB7CiAJCWlmIChzZW5zZS5waXhlbF9jbG9jayA+IHNlbnNlLnBpeGVsX2Nsb2NrX21heCkgewotCQkJZGV2X2VycihpY2ktPmRldiwKKwkJCWRldl9lcnIoZGV2LAogCQkJCSJwaXhlbCBjbG9jayAlbHUgc2V0IGJ5IHRoZSBjYW1lcmEgdG9vIGhpZ2ghIiwKIAkJCQlzZW5zZS5waXhlbF9jbG9jayk7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTEzMTUsNiArMTM5NCwxMSBAQAogCQlyZWNhbGN1bGF0ZV9maWZvX3RpbWVvdXQocGNkZXYsIHNlbnNlLnBpeGVsX2Nsb2NrKTsKIAl9CiAKKwlpY2QtPnVzZXJfd2lkdGggPSBwaXgtPndpZHRoOworCWljZC0+dXNlcl9oZWlnaHQgPSBwaXgtPmhlaWdodDsKKworCXB4YV9jYW1lcmFfc2V0dXBfY2ljcihpY2QsIGNhbS0+ZmxhZ3MsIGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzIzLDYgKzE0MDcsOCBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpjYW1fZm10ID0gTlVMTDsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlID0gTlVMTDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9zZW5zZSBzZW5zZSA9IHsKQEAgLTEzMzUsNyArMTQyMSw3IEBACiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CiAJaWYgKCF4bGF0ZSkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeC0+cGl4ZWxmb3JtYXQpOworCQlkZXZfd2FybihkZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMzQ2LDE2ICsxNDMyLDIxIEBACiAJCWljZC0+c2Vuc2UgPSAmc2Vuc2U7CiAKIAljYW1fZi5mbXQucGl4LnBpeGVsZm9ybWF0ID0gY2FtX2ZtdC0+Zm91cmNjOwotCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgJmNhbV9mKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOwogCiAJaWNkLT5zZW5zZSA9IE5VTEw7CiAKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgZm9yIGZvcm1hdCAleFxuIiwKKwkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBmb3IgZm9ybWF0ICV4XG4iLAogCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOworCX0gZWxzZSBpZiAocHhhX2NhbWVyYV9jaGVja19mcmFtZShwaXgpKSB7CisJCWRldl93YXJuKGRldiwKKwkJCSAiQ2FtZXJhIGRyaXZlciBwcm9kdWNlZCBhbiB1bnN1cHBvcnRlZCBmcmFtZSAlZHglZFxuIiwKKwkJCSBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJCXJldCA9IC1FSU5WQUw7CiAJfSBlbHNlIGlmIChzZW5zZS5mbGFncyAmIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCkgewogCQlpZiAoc2Vuc2UucGl4ZWxfY2xvY2sgPiBzZW5zZS5waXhlbF9jbG9ja19tYXgpIHsKLQkJCWRldl9lcnIoaWNpLT5kZXYsCisJCQlkZXZfZXJyKGRldiwKIAkJCQkicGl4ZWwgY2xvY2sgJWx1IHNldCBieSB0aGUgY2FtZXJhIHRvbyBoaWdoISIsCiAJCQkJc2Vuc2UucGl4ZWxfY2xvY2spOwogCQkJcmV0dXJuIC1FSU87CkBAIC0xMzc1LDYgKzE0NjYsNyBAQAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKQEAgLTEzODMsNyArMTQ3NSw3IEBACiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKIAlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJZGV2X3dhcm4oaWNpLT52NGwyX2Rldi5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEzOTUsNyArMTQ4Nyw3IEBACiAJICovCiAJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZwaXgtPndpZHRoLCA0OCwgMjA0OCwgMSwKIAkJCSAgICAgICZwaXgtPmhlaWdodCwgMzIsIDIwNDgsIDAsCi0JCQkgICAgICB4bGF0ZS0+aG9zdF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVVWNDIyUCA/IDQgOiAwKTsKKwkJCSAgICAgIHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVWNDIyUCA/IDQgOiAwKTsKIAogCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcGl4LT53aWR0aCAqCiAJCURJVl9ST1VORF9VUCh4bGF0ZS0+aG9zdF9mbXQtPmRlcHRoLCA4KTsKQEAgLTE0MDQsMTUgKzE0OTYsMTUgQEAKIAkvKiBjYW1lcmEgaGFzIHRvIHNlZSBpdHMgZm9ybWF0LCBidXQgdGhlIHVzZXIgdGhlIG9yaWdpbmFsIG9uZSAqLwogCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOwogCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KLQlyZXQgPSBpY2QtPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOwotCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+aG9zdF9mbXQtPmZvdXJjYzsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X2ZtdCwgZik7CisJcGl4LT5waXhlbGZvcm1hdCA9IHBpeGZtdDsKIAogCWZpZWxkID0gcGl4LT5maWVsZDsKIAogCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgewogCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwogCX0gZWxzZSBpZiAoZmllbGQgIT0gVjRMMl9GSUVMRF9OT05FKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsIGZpZWxkKTsKKwkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwgZmllbGQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1MTgsNiArMTYxMCw3IEBACiAJLnJlc3VtZQkJPSBweGFfY2FtZXJhX3Jlc3VtZSwKIAkuc2V0X2Nyb3AJPSBweGFfY2FtZXJhX3NldF9jcm9wLAogCS5nZXRfZm9ybWF0cwk9IHB4YV9jYW1lcmFfZ2V0X2Zvcm1hdHMsCisJLnB1dF9mb3JtYXRzCT0gcHhhX2NhbWVyYV9wdXRfZm9ybWF0cywKIAkuc2V0X2ZtdAk9IHB4YV9jYW1lcmFfc2V0X2ZtdCwKIAkudHJ5X2ZtdAk9IHB4YV9jYW1lcmFfdHJ5X2ZtdCwKIAkuaW5pdF92aWRlb2J1Zgk9IHB4YV9jYW1lcmFfaW5pdF92aWRlb2J1ZiwKQEAgLTE1NzUsOCArMTY2OCw3IEBACiAJCXBjZGV2LT5tY2xrID0gMjAwMDAwMDA7CiAJfQogCi0JcGNkZXYtPnNvY19ob3N0LmRldiA9ICZwZGV2LT5kZXY7Ci0JcGNkZXYtPm1jbGtfZGl2aXNvciA9IG1jbGtfZ2V0X2Rpdmlzb3IocGNkZXYpOworCXBjZGV2LT5tY2xrX2Rpdmlzb3IgPSBtY2xrX2dldF9kaXZpc29yKHBkZXYsIHBjZGV2KTsKIAogCUlOSVRfTElTVF9IRUFEKCZwY2Rldi0+Y2FwdHVyZSk7CiAJc3Bpbl9sb2NrX2luaXQoJnBjZGV2LT5sb2NrKTsKQEAgLTE2NDEsNiArMTczMyw3IEBACiAJcGNkZXYtPnNvY19ob3N0LmRydl9uYW1lCT0gUFhBX0NBTV9EUlZfTkFNRTsKIAlwY2Rldi0+c29jX2hvc3Qub3BzCQk9ICZweGFfc29jX2NhbWVyYV9ob3N0X29wczsKIAlwY2Rldi0+c29jX2hvc3QucHJpdgkJPSBwY2RldjsKKwlwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2CT0gJnBkZXYtPmRldjsKIAlwY2Rldi0+c29jX2hvc3QubnIJCT0gcGRldi0+aWQ7CiAKIAllcnIgPSBzb2NfY2FtZXJhX2hvc3RfcmVnaXN0ZXIoJnBjZGV2LT5zb2NfaG9zdCk7CkBAIC0xNzIyLDMgKzE4MTUsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQWEEyN3ggU29DIENhbWVyYSBIb3N0IGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUFhBX0NBTV9EUlZfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCAxYjI5NDg3Li43MTE0NWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTQxNjQsNyArNDE2NCw3IEBACiAJCS8qRG1pdHJ5IEJlbGltb3YgPGQuYmVsaW1vdkBnbWFpbC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA1MDUgUkRTIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC8qIEZJWE1FIHRvIE1LNSAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1LNSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC00MjI5LDcgKzQyMjksNyBAQAogCQkvKkRtaXRyeSBCZWxpbW92IDxkLmJlbGltb3ZAZ21haWwuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNTA3IFJEUyIsCiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAvKiBGSVhNRSB0byBNSzUgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNSzUsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULApAQCAtNDM4MCw3ICs0MzgwLDcgQEAKIAkJLyogQW5kcmV5IE1lbG5pa29mZiA8dGVtbm90YUBrbXYucnU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA2MDcgRk0iLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAotCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgLyogRklYTUUgdG8gTUs1ICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUs1LAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKQEAgLTQ0MDgsNyArNDQwOCw3IEBACiAJCS8qIEFuZHJleSBNZWxuaWtvZmYgPHRlbW5vdGFAa212LnJ1PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNjA5IEZNIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKLQkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC8qIEZJWE1FIHRvIE1LNSAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1LNSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC00NDk0LDcgKzQ0OTQsNyBAQAogCQkvKiBBbmRyZXkgTWVsbmlrb2ZmIDx0ZW1ub3RhQGttdi5ydT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDYwNyBSRFMiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAotCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgLyogRklYTUUgdG8gTUs1ICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUs1LAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKQEAgLTQ1MjMsNyArNDUyMyw3IEBACiAJCS8qIEFuZHJleSBNZWxuaWtvZmYgPHRlbW5vdGFAa212LnJ1PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNjA5IFJEUyIsCiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAvKiBGSVhNRSB0byBNSzUgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNSzUsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULApAQCAtNDYzMCw3ICs0NjMwLDcgQEAKIAkJLyogQWxleGV5IE9zaXBvdiA8bGlvbi1zaW1iYUBwcmlkZWxhbmRzLnJ1PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgTTYgRXh0cmEiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAotCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgLyogRklYTUUgdG8gTUs1ICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUs1LAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKQEAgLTUyNTcsNiArNTI1NywyNyBAQAogCQkJLmFtdXggPSBUViwKIAkJfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX1pPTElEX0hZQlJJRF9QQ0ldID0geworCQkubmFtZSAgICAgICAgICAgPSAiWm9saWQgSHlicmlkIFRWIFR1bmVyIFBDSSIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS50dW5lcl9jb25maWcgICA9IDAsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS50c190eXBlCT0gU0FBNzEzNF9NUEVHX1RTX1BBUkFMTEVMLAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CS8qIHVudGVzdGVkICovCisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQl9LAorCX0sCiAKIH07CiAKQEAgLTYzOTAsNiArNjQxMSwxMiBAQAogCQkuc3ViZGV2aWNlICAgID0gMHgwMTM4LCAvKiBMaWZlVmlldyBGbHlUViBQcmltZTMwIE9FTSAqLwogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9ST1ZFUk1FRElBX0xJTktfUFJPX0ZNLAogCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuc3ViZGV2aWNlICAgID0gMHgyMDA0LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9aT0xJRF9IWUJSSURfUENJLAorCX0sIHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtNzIwOCwyMiArNzIzNSwyMiBAQAogCQlpZiAoZGV2LT5yYWRpb190eXBlICE9IFVOU0VUKQogCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQlkZXYtPnJhZGlvX2FkZHIpOworCQkJCWRldi0+cmFkaW9fYWRkciwgTlVMTCk7CiAJCWlmIChoYXNfZGVtb2QpCi0JCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT52NGwyX2RldiwKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCi0JCQkJdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJCQkwLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOwogCQlpZiAoZGV2LT50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHsKIAkJCWVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlID0KIAkJCQloYXNfZGVtb2QgPyBBRERSU19UVl9XSVRIX0RFTU9EIDogQUREUlNfVFY7CiAKLQkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAorCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQl2NGwyX2kyY190dW5lcl9hZGRycyh0eXBlKSk7CisJCQkJMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnModHlwZSkpOwogCQl9IGVsc2UgewogCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKLQkJCQlkZXYtPnR1bmVyX2FkZHIpOworCQkJCWRldi0+dHVuZXJfYWRkciwgTlVMTCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCBjYjc4Yzk1Li5mODc3NTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0KIAkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAogCQkJCSJzYWE2NzUyaHMiLCAic2FhNjc1MmhzIiwKLQkJCQlzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5lbXByZXNzX2FkZHIpOworCQkJCXNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLmVtcHJlc3NfYWRkciwgTlVMTCk7CiAKIAkJaWYgKHNkKQogCQkJc2QtPmdycF9pZCA9IEdSUF9FTVBSRVNTOwpAQCAtMTAwOSw5ICsxMDA5LDkgQEAKIAlpZiAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmRzX2FkZHIpIHsKIAkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2X2FkZHIoJmRldi0+djRsMl9kZXYsCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT52NGwyX2RldiwKIAkJCQkmZGV2LT5pMmNfYWRhcCwJInNhYTY1ODgiLCAic2FhNjU4OCIsCi0JCQkJc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmRzX2FkZHIpOworCQkJCTAsIEkyQ19BRERSUyhzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yZHNfYWRkcikpOwogCQlpZiAoc2QpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBSRFMgZGVjb2RlclxuIiwgZGV2LT5uYW1lKTsKIAkJCWRldi0+aGFzX3JkcyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IGViZGUyMWQuLmEyNmU5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC0xMDA3LDEyICsxMDA3LDI5IEBACiAJLnN0ZF9tYXAgPSAmaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAsCiAJLmdhdGUgICAgPSBUREExODI3MV9HQVRFX0FOQUxPRywKIAkuY29uZmlnICA9IDMsCisJLm91dHB1dF9vcHQgPSBUREExODI3MV9PVVRQVVRfTFRfT0ZGLAogfTsKIAogc3RhdGljIHN0cnVjdCB0ZGE4Mjl4X2NvbmZpZyB0ZGE4Mjl4X25vX3Byb2JlID0gewogCS5wcm9iZV90dW5lciA9IFREQTgyOVhfRE9OVF9QUk9CRSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNDhfY29uZmlnIHpvbGlkX3RkYTEwMDQ4X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyAgICA9IDB4MTAgPj4gMSwKKwkub3V0cHV0X21vZGUgICAgICA9IFREQTEwMDQ4X1BBUkFMTEVMX09VVFBVVCwKKwkuZndidWxrd3JpdGVsZW4gICA9IFREQTEwMDQ4X0JVTEtXUklURV8yMDAsCisJLmludmVyc2lvbiAgICAgICAgPSBUREExMDA0OF9JTlZFUlNJT05fT04sCisJLmR0djZfaWZfZnJlcV9raHogPSBUREExMDA0OF9JRl8zMzAwLAorCS5kdHY3X2lmX2ZyZXFfa2h6ID0gVERBMTAwNDhfSUZfMzUwMCwKKwkuZHR2OF9pZl9mcmVxX2toeiA9IFREQTEwMDQ4X0lGXzQwMDAsCisJLmNsa19mcmVxX2toeiAgICAgPSBUREExMDA0OF9DTEtfMTYwMDAsCisJLmRpc2FibGVfZ2F0ZV9hY2Nlc3MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgem9saWRfdGRhMTgyNzFfY29uZmlnID0geworCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCit9OworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIENvcmUgY29kZQogICovCkBAIC0xNDg4LDYgKzE1MDUsMTkgQEAKIAkJCQkJX19mdW5jX18pOwogCiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9aT0xJRF9IWUJSSURfUENJOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAorCQkJCQkgICAgICAgJnpvbGlkX3RkYTEwMDQ4X2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCSAgICZkZXYtPmkyY19hZGFwLCAweDRiLAorCQkJCSAgICZ0ZGE4Mjl4X25vX3Byb2JlKTsKKwkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAweDYwLCAmZGV2LT5pMmNfYWRhcCwKKwkJCQkgICAmem9saWRfdGRhMTgyNzFfY29uZmlnKTsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwppbmRleCBlMWU4M2M3Li5hMGU4YzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKQEAgLTI1MSw2ICsyNTEsMTAgQEAKIAlpZiAoZGF0YVsxMF0gIT0gMHg2YiAmJiBkYXRhWzExXSAhPSAweDg2ICYmIGRpc2FibGVfb3RoZXJfaXIpCiAJCXJldHVybiAwOwogCisJLyogV3JvbmcgZGF0YSBkZWNvZGUgZml4ICovCisJaWYgKGRhdGFbOV0gIT0gKHVuc2lnbmVkIGNoYXIpKH5kYXRhWzhdKSkKKwkJcmV0dXJuIDA7CisKIAkqaXJfa2V5ID0gZGF0YVs5XTsKIAkqaXJfcmF3ID0gZGF0YVs5XTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggZDE4YmI5Ni4uNmVlM2U5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0yOTYsNiArMjk2LDcgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwNSAgMTcwCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEX1g3ICAgICAgICAgICAgIDE3MQogI2RlZmluZSBTQUE3MTM0X0JPQVJEX1JPVkVSTUVESUFfTElOS19QUk9fRk0gMTcyCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfWk9MSURfSFlCUklEX1BDSQkJMTczCiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgMzIKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTMyNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L0tjb25maWcKQEAgLTAsMCArMSwxOCBAQAorY29uZmlnIFZJREVPX1NBQTcxNjQKKwl0cmlzdGF0ZSAiTlhQIFNBQTcxNjQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzZWxlY3QgSTJDX0FMR09CSVQKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFZJREVPX1RVTkVSCisJc2VsZWN0IFZJREVPX1RWRUVQUk9NCisJc2VsZWN0IFZJREVPQlVGX0RWQgorCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIE5YUCBTQUE3MTY0IGJhc2VkCisJICBUViBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzE2NAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzMjlmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACitzYWE3MTY0LW9ianMJOj0gc2FhNzE2NC1jYXJkcy5vIHNhYTcxNjQtY29yZS5vIHNhYTcxNjQtaTJjLm8gc2FhNzE2NC1kdmIubyBcCisJCQlzYWE3MTY0LWZ3Lm8gc2FhNzE2NC1idXMubyBzYWE3MTY0LWNtZC5vIHNhYTcxNjQtYXBpLm8gXAorCQkJc2FhNzE2NC1idWZmZXIubworCitvYmotJChDT05GSUdfVklERU9fU0FBNzE2NCkgKz0gc2FhNzE2NC5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcworCitFWFRSQV9DRkxBR1MgKz0gJChleHRyYS1jZmxhZ3MteSkgJChleHRyYS1jZmxhZ3MtbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2ZGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCkBAIC0wLDAgKzEsNjAwIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgInNhYTcxNjQuaCIKKworaW50IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQsIHU4IG1vZGUpCit7CisJaW50IHJldDsKKworCXJldCA9IHNhYTcxNjRfY21kX3NlbmQocG9ydC0+ZGV2LCBwb3J0LT5od2NmZy51bml0aWQsIFNFVF9DVVIsCisJCVNBQV9TVEFURV9DT05UUk9MLCBzaXplb2YobW9kZSksICZtb2RlKTsKKwlpZiAocmV0ICE9IFNBQV9PSykKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBzYWE3MTY0X2FwaV9nZXRfZndfdmVyc2lvbihzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTMyICp2ZXJzaW9uKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKGRldiwgMCwgR0VUX0NVUiwKKwkJR0VUX0ZXX1ZFUlNJT05fQ09OVFJPTCwgc2l6ZW9mKHUzMiksIHZlcnNpb24pOworCWlmIChyZXQgIT0gU0FBX09LKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHNhYTcxNjRfYXBpX3JlYWRfZWVwcm9tKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCAqYnVmLCBpbnQgYnVmbGVuKQoreworCXU4IHJlZ1tdID0geyAweDBmLCAweDAwIH07CisKKwlpZiAoYnVmbGVuIDwgMTI4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEFzc3VtcHRpb246IEhhdXBwYXVnZSBlZXByb20gaXMgYXQgMHhhMCBvbiBvbiBidXMgMCAqLworCS8qIFRPRE86IFB1bGwgdGhlIGRldGFpbHMgZnJvbSB0aGUgYm9hcmRzIHN0cnVjdCAqLworCXJldHVybiBzYWE3MTY0X2FwaV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCAweGEwID4+IDEsIHNpemVvZihyZWcpLAorCQkmcmVnWzBdLCAxMjgsIGJ1Zik7Cit9CisKKworaW50IHNhYTcxNjRfYXBpX2NvbmZpZ3VyZV9wb3J0X21wZWcydHMoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsCisJc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0LAorCXRtQ29tUmVzVFNGb3JtYXREZXNjckhlYWRlcl90ICp0c2ZtdCkKK3sKKwlkcHJpbnRrKERCR0xWTF9BUEksICIgICAgYkZvcm1hdEluZGV4ID0gMHgleFxuIiwgdHNmbXQtPmJGb3JtYXRJbmRleCk7CisJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgIGJEYXRhT2Zmc2V0ICA9IDB4JXhcbiIsIHRzZm10LT5iRGF0YU9mZnNldCk7CisJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgIGJQYWNrZXRMZW5ndGg9IDB4JXhcbiIsIHRzZm10LT5iUGFja2V0TGVuZ3RoKTsKKwlkcHJpbnRrKERCR0xWTF9BUEksICIgICAgYlN0cmlkZUxlbmd0aD0gMHgleFxuIiwgdHNmbXQtPmJTdHJpZGVMZW5ndGgpOworCWRwcmludGsoREJHTFZMX0FQSSwgIiAgICBiZ3VpZCAgICAgICAgPSAoLi4uLilcbiIpOworCisJLyogQ2FjaGUgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIHBvcnQgKi8KKworCXBvcnQtPmJ1ZmNvdW50ZXIgPSBwb3J0LT5od2NmZy5CQVJMb2NhdGlvbjsKKwlwb3J0LT5waXRjaCA9IHBvcnQtPmh3Y2ZnLkJBUkxvY2F0aW9uICsgKDIgKiBzaXplb2YodTMyKSk7CisJcG9ydC0+YnVmc2l6ZSA9IHBvcnQtPmh3Y2ZnLkJBUkxvY2F0aW9uICsgKDMgKiBzaXplb2YodTMyKSk7CisJcG9ydC0+YnVmb2Zmc2V0ID0gcG9ydC0+aHdjZmcuQkFSTG9jYXRpb24gKyAoNCAqIHNpemVvZih1MzIpKTsKKwlwb3J0LT5idWZwdHIzMmwgPSBwb3J0LT5od2NmZy5CQVJMb2NhdGlvbiArCisJCSg0ICogc2l6ZW9mKHUzMikpICsKKwkJKHNpemVvZih1MzIpICogcG9ydC0+aHdjZmcuYnVmZmVyY291bnQpICsgc2l6ZW9mKHUzMik7CisJcG9ydC0+YnVmcHRyMzJoID0gcG9ydC0+aHdjZmcuQkFSTG9jYXRpb24gKworCQkoNCAqIHNpemVvZih1MzIpKSArCisJCShzaXplb2YodTMyKSAqIHBvcnQtPmh3Y2ZnLmJ1ZmZlcmNvdW50KTsKKwlwb3J0LT5idWZwdHI2NCA9IHBvcnQtPmh3Y2ZnLkJBUkxvY2F0aW9uICsKKwkJKDQgKiBzaXplb2YodTMyKSkgKworCQkoc2l6ZW9mKHUzMikgKiBwb3J0LT5od2NmZy5idWZmZXJjb3VudCk7CisJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBwb3J0LT5od2NmZy5CQVJMb2NhdGlvbiA9IDB4JXhcbiIsCisJCXBvcnQtPmh3Y2ZnLkJBUkxvY2F0aW9uKTsKKworCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gVlNfRk9STUFUX01QRUdUUyAoYmVjb21lcyBkZXYtPnRzWyVkXSlcbiIsCisJCXBvcnQtPm5yKTsKKworCXJldHVybiAwOworfQorCitpbnQgc2FhNzE2NF9hcGlfZHVtcF9zdWJkZXZzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCA9IDA7CisJdTMyIGlkeCwgbmV4dF9vZmZzZXQ7CisJaW50IGk7CisJdG1Db21SZXNEZXNjckhlYWRlcl90ICpoZHIsICp0OworCXRtQ29tUmVzRXh0RGV2RGVzY3JIZWFkZXJfdCAqZXh0aGRyOworCXRtQ29tUmVzUGF0aERlc2NySGVhZGVyX3QgKnBhdGhoZHI7CisJdG1Db21SZXNBbnRUZXJtRGVzY3JIZWFkZXJfdCAqYW50dGVybWhkcjsKKwl0bUNvbVJlc1R1bmVyRGVzY3JIZWFkZXJfdCAqdHVuZXJ1bml0aGRyOworCXRtQ29tUmVzRE1BVGVybURlc2NySGVhZGVyX3QgKnZjb3V0cHV0dGVybWhkcjsKKwl0bUNvbVJlc1RTRm9ybWF0RGVzY3JIZWFkZXJfdCAqdHNmbXQ7CisJdTMyIGN1cnJwYXRoID0gMDsKKworCWRwcmludGsoREJHTFZMX0FQSSwKKwkJIiVzKD8sPywlZCkgc2l6ZW9mKHRtQ29tUmVzRGVzY3JIZWFkZXJfdCkgPSAlZCBieXRlc1xuIiwKKwkJX19mdW5jX18sIGxlbiwgKHUzMilzaXplb2YodG1Db21SZXNEZXNjckhlYWRlcl90KSk7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IChsZW4gLSBzaXplb2YodG1Db21SZXNEZXNjckhlYWRlcl90KSk7ICkgeworCisJCWhkciA9ICh0bUNvbVJlc0Rlc2NySGVhZGVyX3QgKikoYnVmICsgaWR4KTsKKworCQlpZiAoaGRyLT50eXBlICE9IENTX0lOVEVSRkFDRSkKKwkJCXJldHVybiBTQUFfRVJSX05PVF9TVVBQT1JURUQ7CisKKwkJZHByaW50ayhEQkdMVkxfQVBJLCAiQCAweCV4ID0gXG4iLCBpZHgpOworCQlzd2l0Y2ggKGhkci0+c3VidHlwZSkgeworCQljYXNlIEdFTkVSQUxfUkVRVUVTVDoKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBHRU5FUkFMX1JFUVVFU1RcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgVkNfVFVORVJfUEFUSDoKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBWQ19UVU5FUl9QQVRIXG4iKTsKKwkJCXBhdGhoZHIgPSAodG1Db21SZXNQYXRoRGVzY3JIZWFkZXJfdCAqKShidWYgKyBpZHgpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBwYXRoaWQgPSAweCV4XG4iLAorCQkJCXBhdGhoZHItPnBhdGhpZCk7CisJCQljdXJycGF0aCA9IHBhdGhoZHItPnBhdGhpZDsKKwkJCWJyZWFrOworCQljYXNlIFZDX0lOUFVUX1RFUk1JTkFMOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIFZDX0lOUFVUX1RFUk1JTkFMXG4iKTsKKwkJCWFudHRlcm1oZHIgPQorCQkJCSh0bUNvbVJlc0FudFRlcm1EZXNjckhlYWRlcl90ICopKGJ1ZiArIGlkeCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIHRlcm1pbmFsaWQgICA9IDB4JXhcbiIsCisJCQkJYW50dGVybWhkci0+dGVybWluYWxpZCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIHRlcm1pbmFsdHlwZSA9IDB4JXhcbiIsCisJCQkJYW50dGVybWhkci0+dGVybWluYWx0eXBlKTsKKwkJCXN3aXRjaCAoYW50dGVybWhkci0+dGVybWluYWx0eXBlKSB7CisJCQljYXNlIElUVF9BTlRFTk5BOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gSVRUX0FOVEVOTkFcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBMSU5FX0NPTk5FQ1RPUjoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IExJTkVfQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1BESUZfQ09OTkVDVE9SOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gU1BESUZfQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09NUE9TSVRFX0NPTk5FQ1RPUjoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IENPTVBPU0lURV9DT05ORUNUT1JcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVklERU9fQ09OTkVDVE9SOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gU1ZJREVPX0NPTk5FQ1RPUlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTVBPTkVOVF9DT05ORUNUT1I6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLAorCQkJCQkiICAgPSBDT01QT05FTlRfQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RBTkRBUkRfRE1BOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gU1RBTkRBUkRfRE1BXG4iKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSB1bmRlZmluZWQgKDB4JXgpXG4iLAorCQkJCQlhbnR0ZXJtaGRyLT50ZXJtaW5hbHR5cGUpOworCQkJfQorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBhc3NvY3Rlcm1pbmFsPSAweCV4XG4iLAorCQkJCWFudHRlcm1oZHItPmFzc29jdGVybWluYWwpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBpdGVybWluYWwgICAgPSAweCV4XG4iLAorCQkJCWFudHRlcm1oZHItPml0ZXJtaW5hbCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGNvbnRyb2xzaXplICA9IDB4JXhcbiIsCisJCQkJYW50dGVybWhkci0+Y29udHJvbHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgVkNfT1VUUFVUX1RFUk1JTkFMOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIFZDX09VVFBVVF9URVJNSU5BTFxuIik7CisJCQl2Y291dHB1dHRlcm1oZHIgPQorCQkJCSh0bUNvbVJlc0RNQVRlcm1EZXNjckhlYWRlcl90ICopKGJ1ZiArIGlkeCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIHVuaXRpZCA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT51bml0aWQpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB0ZXJtaW5hbHR5cGUgPSAweCV4XG4iLAorCQkJCXZjb3V0cHV0dGVybWhkci0+dGVybWluYWx0eXBlKTsKKwkJCXN3aXRjaCAodmNvdXRwdXR0ZXJtaGRyLT50ZXJtaW5hbHR5cGUpIHsKKwkJCWNhc2UgSVRUX0FOVEVOTkE6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBJVFRfQU5URU5OQVxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIExJTkVfQ09OTkVDVE9SOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gTElORV9DT05ORUNUT1JcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTUERJRl9DT05ORUNUT1I6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBTUERJRl9DT05ORUNUT1JcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBDT01QT1NJVEVfQ09OTkVDVE9SOgorCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgID0gQ09NUE9TSVRFX0NPTk5FQ1RPUlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNWSURFT19DT05ORUNUT1I6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBTVklERU9fQ09OTkVDVE9SXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09NUE9ORU5UX0NPTk5FQ1RPUjoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IENPTVBPTkVOVF9DT05ORUNUT1JcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVEFOREFSRF9ETUE6CisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBTVEFOREFSRF9ETUFcbiIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IHVuZGVmaW5lZCAoMHgleClcbiIsCisJCQkJCXZjb3V0cHV0dGVybWhkci0+dGVybWluYWx0eXBlKTsKKwkJCX0KKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgYXNzb2N0ZXJtaW5hbD0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPmFzc29jdGVybWluYWwpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBzb3VyY2VpZCAgICAgPSAweCV4XG4iLAorCQkJCXZjb3V0cHV0dGVybWhkci0+c291cmNlaWQpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBpdGVybWluYWwgICAgPSAweCV4XG4iLAorCQkJCXZjb3V0cHV0dGVybWhkci0+aXRlcm1pbmFsKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgQkFSTG9jYXRpb24gID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPkJBUkxvY2F0aW9uKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgZmxhZ3MgICAgICAgID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPmZsYWdzKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgaW50ZXJydXB0aWQgID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPmludGVycnVwdGlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgYnVmZmVyY291bnQgID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPmJ1ZmZlcmNvdW50KTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgbWV0YWRhdGFzaXplID0gMHgleFxuIiwKKwkJCQl2Y291dHB1dHRlcm1oZHItPm1ldGFkYXRhc2l6ZSk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGNvbnRyb2xzaXplICA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5jb250cm9sc2l6ZSk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIG51bWZvcm1hdHMgICA9IDB4JXhcbiIsCisJCQkJdmNvdXRwdXR0ZXJtaGRyLT5udW1mb3JtYXRzKTsKKworCQkJdCA9ICh0bUNvbVJlc0Rlc2NySGVhZGVyX3QgKikKKwkJCQkoKHRtQ29tUmVzRE1BVGVybURlc2NySGVhZGVyX3QgKikoYnVmICsgaWR4KSk7CisJCQluZXh0X29mZnNldCA9IGlkeCArICh2Y291dHB1dHRlcm1oZHItPmxlbik7CisJCQlmb3IgKGkgPSAwOyBpIDwgdmNvdXRwdXR0ZXJtaGRyLT5udW1mb3JtYXRzOyBpKyspIHsKKwkJCQl0ID0gKHRtQ29tUmVzRGVzY3JIZWFkZXJfdCAqKQorCQkJCQkoYnVmICsgbmV4dF9vZmZzZXQpOworCQkJCXN3aXRjaCAodC0+c3VidHlwZSkgeworCQkJCWNhc2UgVlNfRk9STUFUX01QRUcyVFM6CisJCQkJCXRzZm10ID0KKwkJCQkJKHRtQ29tUmVzVFNGb3JtYXREZXNjckhlYWRlcl90ICopdDsKKwkJCQkJaWYgKGN1cnJwYXRoID09IDEpCisJCQkJCQlwb3J0ID0gJmRldi0+dHMxOworCQkJCQllbHNlCisJCQkJCQlwb3J0ID0gJmRldi0+dHMyOworCQkJCQltZW1jcHkoJnBvcnQtPmh3Y2ZnLCB2Y291dHB1dHRlcm1oZHIsCisJCQkJCQlzaXplb2YoKnZjb3V0cHV0dGVybWhkcikpOworCQkJCQlzYWE3MTY0X2FwaV9jb25maWd1cmVfcG9ydF9tcGVnMnRzKGRldiwKKwkJCQkJCXBvcnQsIHRzZm10KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWU19GT1JNQVRfTVBFRzJQUzoKKwkJCQkJZHByaW50ayhEQkdMVkxfQVBJLAorCQkJCQkJIiAgID0gVlNfRk9STUFUX01QRUcyUFNcbiIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZTX0ZPUk1BVF9WQkk6CisJCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJCSIgICA9IFZTX0ZPUk1BVF9WQklcbiIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZTX0ZPUk1BVF9SRFM6CisJCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJCSIgICA9IFZTX0ZPUk1BVF9SRFNcbiIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZTX0ZPUk1BVF9VTkNPTVBSRVNTRUQ6CisJCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgID0gVlNfRk9STUFUX1VOQ09NUFJFU1NFRFxuIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVlNfRk9STUFUX1RZUEU6CisJCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJCSIgICA9IFZTX0ZPUk1BVF9UWVBFXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZHByaW50ayhEQkdMVkxfQVBJLAorCQkJCQkJIiAgID0gdW5kZWZpbmVkICgweCV4KVxuIiwKKwkJCQkJCXQtPnN1YnR5cGUpOworCQkJCX0KKwkJCQluZXh0X29mZnNldCArPSB0LT5sZW47CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1VOSVQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgVFVORVJfVU5JVFxuIik7CisJCQl0dW5lcnVuaXRoZHIgPQorCQkJCSh0bUNvbVJlc1R1bmVyRGVzY3JIZWFkZXJfdCAqKShidWYgKyBpZHgpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB1bml0aWQgPSAweCV4XG4iLAorCQkJCXR1bmVydW5pdGhkci0+dW5pdGlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgc291cmNlaWQgPSAweCV4XG4iLAorCQkJCXR1bmVydW5pdGhkci0+c291cmNlaWQpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBpdW5pdCA9IDB4JXhcbiIsCisJCQkJdHVuZXJ1bml0aGRyLT5pdW5pdCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIHR1bmluZ3N0YW5kYXJkcyA9IDB4JXhcbiIsCisJCQkJdHVuZXJ1bml0aGRyLT50dW5pbmdzdGFuZGFyZHMpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBjb250cm9sc2l6ZSA9IDB4JXhcbiIsCisJCQkJdHVuZXJ1bml0aGRyLT5jb250cm9sc2l6ZSk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGNvbnRyb2xzID0gMHgleFxuIiwKKwkJCQl0dW5lcnVuaXRoZHItPmNvbnRyb2xzKTsKKwkJCWJyZWFrOworCQljYXNlIFZDX1NFTEVDVE9SX1VOSVQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgVkNfU0VMRUNUT1JfVU5JVFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBWQ19QUk9DRVNTSU5HX1VOSVQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgVkNfUFJPQ0VTU0lOR19VTklUXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEZFQVRVUkVfVU5JVDoKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBGRUFUVVJFX1VOSVRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRU5DT0RFUl9VTklUOgorCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiIEVOQ09ERVJfVU5JVFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBFWFRFTlNJT05fVU5JVDoKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBFWFRFTlNJT05fVU5JVFxuIik7CisJCQlleHRoZHIgPSAodG1Db21SZXNFeHREZXZEZXNjckhlYWRlcl90ICopKGJ1ZiArIGlkeCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIHVuaXRpZCA9IDB4JXhcbiIsCisJCQkJZXh0aGRyLT51bml0aWQpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBkZXZpY2VpZCA9IDB4JXhcbiIsCisJCQkJZXh0aGRyLT5kZXZpY2VpZCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGRldmljZXR5cGUgPSAweCV4XG4iLAorCQkJCWV4dGhkci0+ZGV2aWNldHlwZSk7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHgxKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gRGVjb2RlciBEZXZpY2VcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4MikKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IEdQSU8gU291cmNlXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDQpCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBWaWRlbyBEZWNvZGVyXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDgpCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBBdWRpbyBEZWNvZGVyXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDIwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgID0gQ3Jvc3NiYXJcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4NDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBUdW5lclxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHg4MCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IElGIFBMTFxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHgxMDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBEZW1vZHVsYXRvclxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHgyMDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBSRFMgRGVjb2RlclxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHg0MDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAgPSBFbmNvZGVyXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDgwMCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IElSIERlY29kZXJcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4MTAwMCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgICA9IEVFUFJPTVxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHgyMDAwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgID0gVkJJIERlY29kZXJcbiIpOworCQkJaWYgKGV4dGhkci0+ZGV2aWNldHlwZSAmIDB4MTAwMDApCisJCQkJZHByaW50ayhEQkdMVkxfQVBJLAorCQkJCQkiICAgPSBTdHJlYW1pbmcgRGV2aWNlXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDIwMDAwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgID0gRFJNIERldmljZVxuIik7CisJCQlpZiAoZXh0aGRyLT5kZXZpY2V0eXBlICYgMHg0MDAwMDAwMCkKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksCisJCQkJCSIgICA9IEdlbmVyaWMgRGV2aWNlXG4iKTsKKwkJCWlmIChleHRoZHItPmRldmljZXR5cGUgJiAweDgwMDAwMDAwKQorCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgID0gQ29uZmlnIFNwYWNlIERldmljZVxuIik7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIG51bWdwaW9waW5zID0gMHgleFxuIiwKKwkJCQlleHRoZHItPm51bWdwaW9waW5zKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgbnVtZ3Bpb2dyb3VwcyA9IDB4JXhcbiIsCisJCQkJZXh0aGRyLT5udW1ncGlvZ3JvdXBzKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgY29udHJvbHNpemUgPSAweCV4XG4iLAorCQkJCWV4dGhkci0+Y29udHJvbHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgUFZDX0lORlJBUkVEX1VOSVQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgUFZDX0lORlJBUkVEX1VOSVRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRFJNX1VOSVQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgRFJNX1VOSVRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICJkZWZhdWx0ICVkXG4iLCBoZHItPnN1YnR5cGUpOworCQl9CisKKwkJZHByaW50ayhEQkdMVkxfQVBJLCAiIDEuJXhcbiIsIGhkci0+bGVuKTsKKwkJZHByaW50ayhEQkdMVkxfQVBJLCAiIDIuJXhcbiIsIGhkci0+dHlwZSk7CisJCWRwcmludGsoREJHTFZMX0FQSSwgIiAzLiV4XG4iLCBoZHItPnN1YnR5cGUpOworCQlkcHJpbnRrKERCR0xWTF9BUEksICIgNC4leFxuIiwgaGRyLT51bml0aWQpOworCisJCWlkeCArPSBoZHItPmxlbjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNhYTcxNjRfYXBpX2VudW1fc3ViZGV2cyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlpbnQgcmV0OworCXUzMiBidWZsZW4gPSAwOworCXU4ICpidWY7CisKKwlkcHJpbnRrKERCR0xWTF9BUEksICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBHZXQgdGhlIHRvdGFsIGRlc2NyaXB0b3IgbGVuZ3RoICovCisJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChkZXYsIDAsIEdFVF9MRU4sCisJCUdFVF9ERVNDUklQVE9SU19DT05UUk9MLCBzaXplb2YoYnVmbGVuKSwgJmJ1Zmxlbik7CisJaWYgKHJldCAhPSBTQUFfT0spCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CisKKwlkcHJpbnRrKERCR0xWTF9BUEksICIlcygpIHRvdGFsIGRlc2NyaXB0b3Igc2l6ZSA9ICVkIGJ5dGVzLlxuIiwKKwkJX19mdW5jX18sIGJ1Zmxlbik7CisKKwkvKiBBbGxvY2F0ZSBlbm91Z2ggc3RvcmFnZSBmb3IgYWxsIG9mIHRoZSBkZXNjcyAqLworCWJ1ZiA9IGt6YWxsb2MoYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiBTQUFfRVJSX05PX1JFU09VUkNFUzsKKworCS8qIFJldHJpZXZlIHRoZW0gKi8KKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKGRldiwgMCwgR0VUX0NVUiwKKwkJR0VUX0RFU0NSSVBUT1JTX0NPTlRST0wsIGJ1ZmxlbiwgYnVmKTsKKwlpZiAocmV0ICE9IFNBQV9PSykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGVidWcgJiBEQkdMVkxfQVBJKQorCQlzYWE3MTY0X2R1bXBoZXgxNihkZXYsIGJ1ZiwgKGJ1Zmxlbi8xNikqMTYpOworCisJc2FhNzE2NF9hcGlfZHVtcF9zdWJkZXZzKGRldiwgYnVmLCBidWZsZW4pOworCitvdXQ6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2FhNzE2NF9hcGlfaTJjX3JlYWQoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIHU4IGFkZHIsIHUzMiByZWdsZW4sIHU4ICpyZWcsCisJdTMyIGRhdGFsZW4sIHU4ICpkYXRhKQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gYnVzLT5kZXY7CisJdTE2IGxlbiA9IDA7CisJaW50IHVuaXRpZDsKKwl1MzIgcmVndmFsOworCXU4IGJ1ZlsyNTZdOworCWludCByZXQ7CisKKwlkcHJpbnRrKERCR0xWTF9BUEksICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocmVnbGVuID4gNCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocmVnbGVuID09IDEpCisJCXJlZ3ZhbCA9ICoocmVnKTsKKwllbHNlCisJaWYgKHJlZ2xlbiA9PSAyKQorCQlyZWd2YWwgPSAoKCoocmVnKSA8PCA4KSB8fCAqKHJlZysxKSk7CisJZWxzZQorCWlmIChyZWdsZW4gPT0gMykKKwkJcmVndmFsID0gKCgqKHJlZykgPDwgMTYpIHwgKCoocmVnKzEpIDw8IDgpIHwgKihyZWcrMikpOworCWVsc2UKKwlpZiAocmVnbGVuID09IDQpCisJCXJlZ3ZhbCA9ICgoKihyZWcpIDw8IDI0KSB8ICgqKHJlZysxKSA8PCAxNikgfAorCQkJKCoocmVnKzIpIDw8IDgpIHwgKihyZWcrMykpOworCisJLyogUHJlcGFyZSB0aGUgc2VuZCBidWZmZXIgKi8KKwkvKiBCeXRlcyAwMC0wMyBzb3VyY2UgcmVnaXN0ZXIgbGVuZ3RoCisJICogICAgICAgMDQtMDcgc291cmNlIGJ5dGVzIHRvIHJlYWQKKwkgKiAgICAgICAwOC4uLiByZWdpc3RlciBhZGRyZXNzCisJICovCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweSgoYnVmICsgMiAqIHNpemVvZih1MzIpICsgMCksIHJlZywgcmVnbGVuKTsKKwkqKCh1MzIgKikoYnVmICsgMCAqIHNpemVvZih1MzIpKSkgPSByZWdsZW47CisJKigodTMyICopKGJ1ZiArIDEgKiBzaXplb2YodTMyKSkpID0gZGF0YWxlbjsKKworCXVuaXRpZCA9IHNhYTcxNjRfaTJjYWRkcl90b191bml0aWQoYnVzLCBhZGRyKTsKKwlpZiAodW5pdGlkIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlcygpIGVycm9yLCBjYW5ub3QgdHJhbnNsYXRlIHJlZ2FkZHIgMHgleCB0byB1bml0aWRcbiIsCisJCQlfX2Z1bmNfXywgYWRkcik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldCA9IHNhYTcxNjRfY21kX3NlbmQoYnVzLT5kZXYsIHVuaXRpZCwgR0VUX0xFTiwKKwkJRVhVX1JFR0lTVEVSX0FDQ0VTU19DT05UUk9MLCBzaXplb2YobGVuKSwgJmxlbik7CisJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQoMSkgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoKSBsZW4gPSAlZCBieXRlc1xuIiwgX19mdW5jX18sIGxlbik7CisKKwlpZiAoZGVidWcgJiBEQkdMVkxfSTJDKQorCQlzYWE3MTY0X2R1bXBoZXgxNihkZXYsIGJ1ZiwgMiAqIDE2KTsKKworCXJldCA9IHNhYTcxNjRfY21kX3NlbmQoYnVzLT5kZXYsIHVuaXRpZCwgR0VUX0NVUiwKKwkJRVhVX1JFR0lTVEVSX0FDQ0VTU19DT05UUk9MLCBsZW4sICZidWYpOworCWlmIChyZXQgIT0gU0FBX09LKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCgyKSA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOworCWVsc2UgeworCQlpZiAoZGVidWcgJiBEQkdMVkxfSTJDKQorCQkJc2FhNzE2NF9kdW1waGV4MTYoZGV2LCBidWYsIHNpemVvZihidWYpKTsKKwkJbWVtY3B5KGRhdGEsIChidWYgKyAyICogc2l6ZW9mKHUzMikgKyByZWdsZW4pLCBkYXRhbGVuKTsKKwl9CisKKwlyZXR1cm4gcmV0ID09IFNBQV9PSyA/IDAgOiAtRUlPOworfQorCisvKiBGb3IgYSBnaXZlbiA4IGJpdCBpMmMgYWRkcmVzcyBkZXZpY2UsIHdyaXRlIHRoZSBidWZmZXIgKi8KK2ludCBzYWE3MTY0X2FwaV9pMmNfd3JpdGUoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIHU4IGFkZHIsIHUzMiBkYXRhbGVuLAorCXU4ICpkYXRhKQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gYnVzLT5kZXY7CisJdTE2IGxlbiA9IDA7CisJaW50IHVuaXRpZDsKKwlpbnQgcmVnbGVuOworCXU4IGJ1ZlsyNTZdOworCWludCByZXQ7CisKKwlkcHJpbnRrKERCR0xWTF9BUEksICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoKGRhdGFsZW4gPT0gMCkgfHwgKGRhdGFsZW4gPiAyMzIpKQorCQlyZXR1cm4gLUVJTzsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKworCXVuaXRpZCA9IHNhYTcxNjRfaTJjYWRkcl90b191bml0aWQoYnVzLCBhZGRyKTsKKwlpZiAodW5pdGlkIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlcygpIGVycm9yLCBjYW5ub3QgdHJhbnNsYXRlIHJlZ2FkZHIgMHgleCB0byB1bml0aWRcbiIsCisJCQlfX2Z1bmNfXywgYWRkcik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJlZ2xlbiA9IHNhYTcxNjRfaTJjYWRkcl90b19yZWdsZW4oYnVzLCBhZGRyKTsKKwlpZiAodW5pdGlkIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlcygpIGVycm9yLCBjYW5ub3QgdHJhbnNsYXRlIHJlZ2FkZHIgdG8gcmVnbGVuXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKGJ1cy0+ZGV2LCB1bml0aWQsIEdFVF9MRU4sCisJCUVYVV9SRUdJU1RFUl9BQ0NFU1NfQ09OVFJPTCwgc2l6ZW9mKGxlbiksICZsZW4pOworCWlmIChyZXQgIT0gU0FBX09LKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0KDEpID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRwcmludGsoREJHTFZMX0FQSSwgIiVzKCkgbGVuID0gJWQgYnl0ZXNcbiIsIF9fZnVuY19fLCBsZW4pOworCisJLyogUHJlcGFyZSB0aGUgc2VuZCBidWZmZXIgKi8KKwkvKiBCeXRlcyAwMC0wMyBkZXN0IHJlZ2lzdGVyIGxlbmd0aAorCSAqICAgICAgIDA0LTA3IGRlc3QgYnl0ZXMgdG8gd3JpdGUKKwkgKiAgICAgICAwOC4uLiByZWdpc3RlciBhZGRyZXNzCisJICovCisJKigodTMyICopKGJ1ZiArIDAgKiBzaXplb2YodTMyKSkpID0gcmVnbGVuOworCSooKHUzMiAqKShidWYgKyAxICogc2l6ZW9mKHUzMikpKSA9IGRhdGFsZW4gLSByZWdsZW47CisJbWVtY3B5KChidWYgKyAyICogc2l6ZW9mKHUzMikpLCBkYXRhLCBkYXRhbGVuKTsKKworCWlmIChkZWJ1ZyAmIERCR0xWTF9JMkMpCisJCXNhYTcxNjRfZHVtcGhleDE2KGRldiwgYnVmLCBzaXplb2YoYnVmKSk7CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKGJ1cy0+ZGV2LCB1bml0aWQsIFNFVF9DVVIsCisJCUVYVV9SRUdJU1RFUl9BQ0NFU1NfQ09OVFJPTCwgbGVuLCAmYnVmKTsKKwlpZiAocmV0ICE9IFNBQV9PSykKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQoMikgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQgPT0gU0FBX09LID8gMCA6IC1FSU87Cit9CisKKworaW50IHNhYTcxNjRfYXBpX21vZGlmeV9ncGlvKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCB1bml0aWQsCisJdTggcGluLCB1OCBzdGF0ZSkKK3sKKwlpbnQgcmV0OworCXRtQ29tUmVzR1BJT190IHQ7CisKKwlkcHJpbnRrKERCR0xWTF9BUEksICIlcygweCV4LCAlZCwgJWQpXG4iLAorCQlfX2Z1bmNfXywgdW5pdGlkLCBwaW4sIHN0YXRlKTsKKworCWlmICgocGluID4gNykgfHwgKHN0YXRlID4gMikpCisJCXJldHVybiBTQUFfRVJSX0JBRF9QQVJBTUVURVI7CisKKwl0LnBpbiA9IHBpbjsKKwl0LnN0YXRlID0gc3RhdGU7CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZW5kKGRldiwgdW5pdGlkLCBTRVRfQ1VSLAorCQlFWFVfR1BJT19DT05UUk9MLCBzaXplb2YodCksICZ0KTsKKwlpZiAocmV0ICE9IFNBQV9PSykKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLAorCQkJX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2FhNzE2NF9hcGlfc2V0X2dwaW9iaXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHVuaXRpZCwKKwl1OCBwaW4pCit7CisJcmV0dXJuIHNhYTcxNjRfYXBpX21vZGlmeV9ncGlvKGRldiwgdW5pdGlkLCBwaW4sIDEpOworfQorCitpbnQgc2FhNzE2NF9hcGlfY2xlYXJfZ3Bpb2JpdChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggdW5pdGlkLAorCXU4IHBpbikKK3sKKwlyZXR1cm4gc2FhNzE2NF9hcGlfbW9kaWZ5X2dwaW8oZGV2LCB1bml0aWQsIHBpbiwgMCk7Cit9CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1idWZmZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWJ1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTVjODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1idWZmZXIuYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJzYWE3MTY0LmgiCisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBmb3IgYnVmZmVyIGhhbmRsaW5nIGxvb2tzIGxpa2UgdGhpczoKKworICstdTMyIHdpZGUtLS0tLS0tLS0tLS0tKworIHwgICAgICAgICAgICAgICAgICAgICAgKworICstdTY0IHdpZGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IEN1cnJlbnRCdWZmZXJQdHIgICAgICsgUG9pbnRlciB0byBjdXJyZW50IFBDSSBidWZmZXIgPi0rCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgVW51c2VkICAgICAgICAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgfCBQaXRjaCAgICAgICAgICAgICAgICArID0gMTg4IChieXRlcykgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8IFBDSSBidWZmZXIgc2l6ZSAgICAgICsgPSBwaXRjaCAqIG51bWJlciBvZiBsaW5lcyAoMzEyKSB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwwfCBCdWYwIFdyaXRlIE9mZnNldCAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2CisgfDF8IEJ1ZjEgV3JpdGUgT2Zmc2V0ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8MnwgQnVmMiBXcml0ZSBPZmZzZXQgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwzfCBCdWYzIFdyaXRlIE9mZnNldCAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgLi4uIE1vcmUgd3JpdGUgb2Zmc2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgIHwKKyArMHwgc2V0IG9mIHB0cnMgdG8gUENJIHBhZ2V0YWJsZXMgICAgICAgICAgICAgKyAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgfAorICsxfCBzZXQgb2YgcHRycyB0byBQQ0kgcGFnZXRhYmxlcyAgICAgICAgICAgICArIDwtLS0tLS0tLSsKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICsyfCBzZXQgb2YgcHRycyB0byBQQ0kgcGFnZXRhYmxlcyAgICAgICAgICAgICArCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyArM3wgc2V0IG9mIHB0cnMgdG8gUENJIHBhZ2V0YWJsZXMgICAgICAgICAgICAgKyA+LS0rCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgfAorIC4uLiBNb3JlIGJ1ZmZlciBwb2ludGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0tKworCQkJCQkJICAgICstPnwgcHRbMF0gVFMgZGF0YSAgfAorCQkJCQkJICAgIHwgICstLS0tLS0tLS0tLS0tLS0tKworCQkJCQkJICAgIHwKKwkJCQkJCSAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsKKwkJCQkJCSAgICArLT58IHB0WzFdIFRTIGRhdGEgIHwKKwkJCQkJCSAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsKKwkJCQkJCSAgICB8IGV0YworICovCisKKy8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBzdHJ1Y3R1cmUgYW5kIGFzc29jaWF0ZWQgUENJIHNwYWNlIGluIGJ5dGVzLgorICogbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBzaXplb2YodTY0KQorICovCitzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKnNhYTcxNjRfYnVmZmVyX2FsbG9jKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCwKKwl1MzIgbGVuKQoreworCXN0cnVjdCBzYWE3MTY0X2J1ZmZlciAqYnVmID0gMDsKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKwlpbnQgaTsKKworCWlmICgobGVuID09IDApIHx8IChsZW4gPj0gNjU1MzYpIHx8IChsZW4gJSBzaXplb2YodTY0KSkpIHsKKwkJbG9nX3dhcm4oIiVzKCkgU0FBX0VSUl9CQURfUEFSQU1FVEVSXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gcmV0OworCX0KKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTY0X2J1ZmZlciksIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlsb2dfd2FybigiJXMoKSBTQUFfRVJSX05PX1JFU09VUkNFU1xuIiwgX19mdW5jX18pOworCQlnb3RvIHJldDsKKwl9CisKKwlidWYtPnBvcnQgPSBwb3J0OworCWJ1Zi0+ZmxhZ3MgPSBTQUE3MTY0X0JVRkZFUl9GUkVFOworCS8qIFRPRE86IGFyZyBsZW4gaXMgYmVpbmcgaWdub3JlZCAqLworCWJ1Zi0+cGNpX3NpemUgPSBTQUE3MTY0X1BUX0VOVFJJRVMgKiAweDEwMDA7CisJYnVmLT5wdF9zaXplID0gKFNBQTcxNjRfUFRfRU5UUklFUyAqIHNpemVvZih1NjQpKSArIDB4MTAwMDsKKworCS8qIEFsbG9jYXRlIGNvbnRpZ3VvdXMgbWVtb3J5ICovCisJYnVmLT5jcHUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwb3J0LT5kZXYtPnBjaSwgYnVmLT5wY2lfc2l6ZSwKKwkJJmJ1Zi0+ZG1hKTsKKwlpZiAoIWJ1Zi0+Y3B1KQorCQlnb3RvIGZhaWwxOworCisJYnVmLT5wdF9jcHUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwb3J0LT5kZXYtPnBjaSwgYnVmLT5wdF9zaXplLAorCQkmYnVmLT5wdF9kbWEpOworCWlmICghYnVmLT5wdF9jcHUpCisJCWdvdG8gZmFpbDI7CisKKwkvKiBpbml0IHRoZSBidWZmZXJzIHRvIGEga25vd24gcGF0dGVybiwgZWFzaWVyIGR1cmluZyBkZWJ1Z2dpbmcgKi8KKwltZW1zZXQoYnVmLT5jcHUsIDB4ZmYsIGJ1Zi0+cGNpX3NpemUpOworCW1lbXNldChidWYtPnB0X2NwdSwgMHhmZiwgYnVmLT5wdF9zaXplKTsKKworCWRwcmludGsoREJHTFZMX0JVRiwgIiVzKCkgICBhbGxvY2F0ZWQgYnVmZmVyIEAgMHglcFxuIiwgX19mdW5jX18sIGJ1Zik7CisJZHByaW50ayhEQkdMVkxfQlVGLCAiICBwY2lfY3B1IEAgMHglcCAgICBkbWEgQCAweCUwOGx4IGxlbiA9IDB4JXhcbiIsCisJCWJ1Zi0+Y3B1LCAobG9uZylidWYtPmRtYSwgYnVmLT5wY2lfc2l6ZSk7CisJZHByaW50ayhEQkdMVkxfQlVGLCAiICAgcHRfY3B1IEAgMHglcCBwdF9kbWEgQCAweCUwOGx4IGxlbiA9IDB4JXhcbiIsCisJCWJ1Zi0+cHRfY3B1LCAobG9uZylidWYtPnB0X2RtYSwgYnVmLT5wdF9zaXplKTsKKworCS8qIEZvcm1hdCB0aGUgUGFnZSBUYWJsZSBFbnRyaWVzIHRvIHBvaW50IGludG8gdGhlIGRhdGEgYnVmZmVyICovCisJZm9yIChpID0gMCA7IGkgPCBTQUE3MTY0X1BUX0VOVFJJRVM7IGkrKykgeworCisJCSooYnVmLT5wdF9jcHUgKyBpKSA9IGJ1Zi0+ZG1hICsgKGkgKiAweDEwMDApOyAvKiBUT0RPICovCisKKwl9CisKKwlnb3RvIHJldDsKKworZmFpbDI6CisJcGNpX2ZyZWVfY29uc2lzdGVudChwb3J0LT5kZXYtPnBjaSwgYnVmLT5wY2lfc2l6ZSwgYnVmLT5jcHUsIGJ1Zi0+ZG1hKTsKK2ZhaWwxOgorCWtmcmVlKGJ1Zik7CisKKwlidWYgPSAwOworcmV0OgorCXJldHVybiBidWY7Cit9CisKK2ludCBzYWE3MTY0X2J1ZmZlcl9kZWFsbG9jKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCwKKwlzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKworCWlmICgoYnVmID09IDApIHx8IChwb3J0ID09IDApKQorCQlyZXR1cm4gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCisJZHByaW50ayhEQkdMVkxfQlVGLCAiJXMoKSBkZWFsbG9jYXRpbmcgYnVmZmVyIEAgMHglcFxuIiwgX19mdW5jX18sIGJ1Zik7CisKKwlpZiAoYnVmLT5mbGFncyAhPSBTQUE3MTY0X0JVRkZFUl9GUkVFKQorCQlsb2dfd2FybigiIGZyZWVpbmcgYSBub24tZnJlZSBidWZmZXJcbiIpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwb3J0LT5kZXYtPnBjaSwgYnVmLT5wY2lfc2l6ZSwgYnVmLT5jcHUsIGJ1Zi0+ZG1hKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBvcnQtPmRldi0+cGNpLCBidWYtPnB0X3NpemUsIGJ1Zi0+cHRfY3B1LAorCQlidWYtPnB0X2RtYSk7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIFNBQV9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1idXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2EwNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVzLmMKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgTlhQIFNBQTcxNjQgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAic2FhNzE2NC5oIgorCisvKiBUaGUgbWVzc2FnZSBidXMgdG8vZnJvbSB0aGUgZmlybXdhcmUgaXMgYSByaW5nIGJ1ZmZlciBpbiBQQ0kgYWRkcmVzcworICogc3BhY2UuIEVzdGFibGlzaCB0aGUgZGVmYXVsdHMuCisgKi8KK2ludCBzYWE3MTY0X2J1c19zZXR1cChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwl0bUNvbVJlc0J1c0luZm9fdCAqYgk9ICZkZXYtPmJ1czsKKworCW11dGV4X2luaXQoJmItPmxvY2spOworCisJYi0+VHlwZQkJCT0gVFlQRV9CVVNfUENJZTsKKwliLT5tX3dNYXhSZXFTaXplCT0gU0FBX0RFVklDRV9NQVhSRVFVRVNUU0laRTsKKworCWItPm1fcGR3U2V0UmluZwkJPSAodTggKikoZGV2LT5ibW1pbyArCisJCSgodTMyKWRldi0+YnVzZGVzYy5Db21tYW5kUmluZykpOworCisJYi0+bV9kd1NpemVTZXRSaW5nCT0gU0FBX0RFVklDRV9CVUZGRVJCTE9DS1NJWkU7CisKKwliLT5tX3Bkd0dldFJpbmcJCT0gKHU4ICopKGRldi0+Ym1taW8gKworCQkoKHUzMilkZXYtPmJ1c2Rlc2MuUmVzcG9uc2VSaW5nKSk7CisKKwliLT5tX2R3U2l6ZUdldFJpbmcJPSBTQUFfREVWSUNFX0JVRkZFUkJMT0NLU0laRTsKKworCWItPm1fcGR3U2V0V3JpdGVQb3MJPSAodTMyICopKCh1OCAqKShkZXYtPmJtbWlvICsKKwkJKCh1MzIpZGV2LT5pbnRmZGVzYy5CQVJMb2NhdGlvbikgKyAoMiAqIHNpemVvZih1NjQpKSkpOworCisJYi0+bV9wZHdTZXRSZWFkUG9zCT0gKHUzMiAqKSgodTggKiliLT5tX3Bkd1NldFdyaXRlUG9zICsKKwkJMSAqIHNpemVvZih1MzIpKTsKKworCWItPm1fcGR3R2V0V3JpdGVQb3MJPSAodTMyICopKCh1OCAqKWItPm1fcGR3U2V0V3JpdGVQb3MgKworCQkyICogc2l6ZW9mKHUzMikpOworCisJYi0+bV9wZHdHZXRSZWFkUG9zCT0gKHUzMiAqKSgodTggKiliLT5tX3Bkd1NldFdyaXRlUG9zICsKKwkJMyAqIHNpemVvZih1MzIpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHNhYTcxNjRfYnVzX2R1bXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJdG1Db21SZXNCdXNJbmZvX3QgKmIgPSAmZGV2LT5idXM7CisKKwlkcHJpbnRrKERCR0xWTF9CVVMsICJEdW1waW5nIHRoZSBidXMgc3RydWN0dXJlOlxuIik7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC50eXBlICAgICAgICAgICAgID0gJWRcbiIsIGItPlR5cGUpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAuZGV2LT5ibW1pbyAgICAgICA9IDB4JXBcbiIsIGRldi0+Ym1taW8pOworCWRwcmludGsoREJHTFZMX0JVUywgIiAubV93TWF4UmVxU2l6ZSAgICA9IDB4JXhcbiIsIGItPm1fd01heFJlcVNpemUpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAubV9wZHdTZXRSaW5nICAgICA9IDB4JXBcbiIsIGItPm1fcGR3U2V0UmluZyk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5tX2R3U2l6ZVNldFJpbmcgID0gMHgleFxuIiwgYi0+bV9kd1NpemVTZXRSaW5nKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLm1fcGR3R2V0UmluZyAgICAgPSAweCVwXG4iLCBiLT5tX3Bkd0dldFJpbmcpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAubV9kd1NpemVHZXRSaW5nICA9IDB4JXhcbiIsIGItPm1fZHdTaXplR2V0UmluZyk7CisKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLm1fcGR3U2V0V3JpdGVQb3MgPSAweCVwICgweCUwOHgpXG4iLAorCQliLT5tX3Bkd1NldFdyaXRlUG9zLCAqYi0+bV9wZHdTZXRXcml0ZVBvcyk7CisKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLm1fcGR3U2V0UmVhZFBvcyAgPSAweCVwICgweCUwOHgpXG4iLAorCQliLT5tX3Bkd1NldFJlYWRQb3MsICpiLT5tX3Bkd1NldFJlYWRQb3MpOworCisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5tX3Bkd0dldFdyaXRlUG9zID0gMHglcCAoMHglMDh4KVxuIiwKKwkJYi0+bV9wZHdHZXRXcml0ZVBvcywgKmItPm1fcGR3R2V0V3JpdGVQb3MpOworCisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5tX3Bkd0dldFJlYWRQb3MgID0gMHglcCAoMHglMDh4KVxuIiwKKwkJYi0+bV9wZHdHZXRSZWFkUG9zLCAqYi0+bV9wZHdHZXRSZWFkUG9zKTsKK30KKwordm9pZCBzYWE3MTY0X2J1c19kdW1wbXNnKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB0bUNvbVJlc0luZm9fdCogbSwgdm9pZCAqYnVmKQoreworCWRwcmludGsoREJHTFZMX0JVUywgIkR1bXBpbmcgbXNnIHN0cnVjdHVyZTpcbiIpOworCWRwcmludGsoREJHTFZMX0JVUywgIiAuaWQgICAgICAgICAgICAgICA9ICVkXG4iLCAgIG0tPmlkKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLmZsYWdzICAgICAgICAgICAgPSAweCV4XG4iLCBtLT5mbGFncyk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5zaXplICAgICAgICAgICAgID0gMHgleFxuIiwgbS0+c2l6ZSk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5jb21tYW5kICAgICAgICAgID0gMHgleFxuIiwgbS0+Y29tbWFuZCk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5jb250cm9sc2VsZWN0b3IgID0gMHgleFxuIiwgbS0+Y29udHJvbHNlbGVjdG9yKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIgLnNlcW5vICAgICAgICAgICAgPSAlZFxuIiwgICBtLT5zZXFubyk7CisJaWYgKGJ1ZikKKwkJZHByaW50ayhEQkdMVkxfQlVTLCAiIC5idWZmZXIgKGlnbm9yZWQpXG4iKTsKK30KKworLyoKKyAqIFBsYWNlcyBhIGNvbW1hbmQgb3IgYSByZXNwb25zZSBvbiB0aGUgYnVzLiBUaGUgaW1wbGVtZW50YXRpb24gZG9lcyBub3QKKyAqIGtub3cgaWYgaXQgaXMgYSBjb21tYW5kIG9yIGEgcmVzcG9uc2UgaXQganVzdCBwbGFjZXMgdGhlIGRhdGEgb24gdGhlCisgKiBidXMgZGVwZW5kaW5nIG9uIHRoZSBidXMgaW5mb3JtYXRpb24gZ2l2ZW4gaW4gdGhlIHRtQ29tUmVzQnVzSW5mb190CisgKiBzdHJ1Y3R1cmUuIElmIHRoZSBjb21tYW5kIG9yIHJlc3BvbnNlIGRvZXMgbm90IGZpdCBpbnRvIHRoZSBidXMgcmluZworICogYnVmZmVyIGl0IHdpbGwgYmUgcmVmdXNlZC4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAgU0FBX09LICAgICBUaGUgZnVuY3Rpb24gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogIDwgMCAgICAgICAgT25lIG9yIG1vcmUgbWVtYmVycyBhcmUgbm90IGluaXRpYWxpemVkLgorICovCitpbnQgc2FhNzE2NF9idXNfc2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB0bUNvbVJlc0luZm9fdCogbXNnLCB2b2lkICpidWYpCit7CisJdG1Db21SZXNCdXNJbmZvX3QgKmJ1cyA9ICZkZXYtPmJ1czsKKwl1MzIgYnl0ZXNfdG9fd3JpdGUsIHJlYWRfZGlzdGFuY2UsIHRpbWVvdXQsIGN1cnJfc3JwLCBjdXJyX3N3cDsKKwl1MzIgbmV3X3N3cCwgc3BhY2VfcmVtOworCWludCByZXQgPSBTQUFfRVJSX0JBRF9QQVJBTUVURVI7CisKKwlpZiAoIW1zZykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgIW1zZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCX0KKworCWRwcmludGsoREJHTFZMX0JVUywgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW1zZy0+c2l6ZSA9IGNwdV90b19sZTE2KG1zZy0+c2l6ZSk7CisJbXNnLT5jb21tYW5kID0gY3B1X3RvX2xlMTYobXNnLT5jb21tYW5kKTsKKwltc2ctPmNvbnRyb2xzZWxlY3RvciA9IGNwdV90b19sZTE2KG1zZy0+Y29udHJvbHNlbGVjdG9yKTsKKworCWlmIChtc2ctPnNpemUgPiBkZXYtPmJ1cy5tX3dNYXhSZXFTaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBFeGNlZWRlZCBkZXYtPmJ1cy5tX3dNYXhSZXFTaXplXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCX0KKworCWlmICgobXNnLT5zaXplID4gMCkgJiYgKGJ1ZiA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgTWlzc2luZyBtZXNzYWdlIGJ1ZmZlclxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCX0KKworCS8qIExvY2sgdGhlIGJ1cyBmcm9tIGFueSBvdGhlciBhY2Nlc3MgKi8KKwltdXRleF9sb2NrKCZidXMtPmxvY2spOworCisJYnl0ZXNfdG9fd3JpdGUgPSBzaXplb2YoKm1zZykgKyBtc2ctPnNpemU7CisJcmVhZF9kaXN0YW5jZSA9IDA7CisJdGltZW91dCA9IFNBQV9CVVNfVElNRU9VVDsKKwljdXJyX3NycCA9IGxlMzJfdG9fY3B1KCpidXMtPm1fcGR3U2V0UmVhZFBvcyk7CisJY3Vycl9zd3AgPSBsZTMyX3RvX2NwdSgqYnVzLT5tX3Bkd1NldFdyaXRlUG9zKTsKKworCS8qIERlYWwgd2l0aCByaW5nIHdyYXBwaW5nIGlzc3VlcyAqLworCWlmIChjdXJyX3NycCA+IGN1cnJfc3dwKQorCQkvKiBUaGUgcmluZyBoYXMgbm90IHdyYXBwZWQgeWV0ICovCisJCXJlYWRfZGlzdGFuY2UgPSBjdXJyX3NycCAtIGN1cnJfc3dwOworCWVsc2UKKwkJLyogRGVhbCB3aXRoIHRoZSB3cmFwcGVkIHJpbmcgKi8KKwkJcmVhZF9kaXN0YW5jZSA9IChjdXJyX3NycCArIGJ1cy0+bV9kd1NpemVTZXRSaW5nKSAtIGN1cnJfc3dwOworCisJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSBieXRlc190b193cml0ZSA9ICVkXG4iLCBfX2Z1bmNfXywKKwkJYnl0ZXNfdG9fd3JpdGUpOworCisJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSByZWFkX2Rpc3RhbmNlID0gJWRcbiIsIF9fZnVuY19fLAorCQlyZWFkX2Rpc3RhbmNlKTsKKworCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgY3Vycl9zcnAgPSAleFxuIiwgX19mdW5jX18sIGN1cnJfc3JwKTsKKwlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIGN1cnJfc3dwID0gJXhcbiIsIF9fZnVuY19fLCBjdXJyX3N3cCk7CisKKwkvKiBQcm9jZXNzIHRoZSBtc2cgYW5kIHdyaXRlIHRoZSBjb250ZW50IG9udG8gdGhlIGJ1cyAqLworCXdoaWxlIChieXRlc190b193cml0ZSA+PSByZWFkX2Rpc3RhbmNlKSB7CisKKwkJaWYgKHRpbWVvdXQtLSA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgYnVzIHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKKwkJCXJldCA9IFNBQV9FUlJfTk9fUkVTT1VSQ0VTOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBUT0RPOiBSZXZpZXcgdGhpcyBkZWxheSwgZWZmaWNpZW50PyAqLworCQkvKiBXYWl0LCBhbGxvd2luZyB0aGUgaGFyZHdhcmUgZmV0Y2ggdGltZSAqLworCQltZGVsYXkoMSk7CisKKwkJLyogQ2hlY2sgdGhlIHNwYWNlIHVzYWdlIGFnYWluICovCisJCWN1cnJfc3JwID0gbGUzMl90b19jcHUoKmJ1cy0+bV9wZHdTZXRSZWFkUG9zKTsKKworCQkvKiBEZWFsIHdpdGggcmluZyB3cmFwcGluZyBpc3N1ZXMgKi8KKwkJaWYgKGN1cnJfc3JwID4gY3Vycl9zd3ApCisJCQkvKiBSZWFkIGRpZG4ndCB3cmFwIGFyb3VuZCB0aGUgYnVmZmVyICovCisJCQlyZWFkX2Rpc3RhbmNlID0gY3Vycl9zcnAgLSBjdXJyX3N3cDsKKwkJZWxzZQorCQkJLyogRGVhbCB3aXRoIHRoZSB3cmFwcGVkIHJpbmcgKi8KKwkJCXJlYWRfZGlzdGFuY2UgPSAoY3Vycl9zcnAgKyBidXMtPm1fZHdTaXplU2V0UmluZykgLQorCQkJCWN1cnJfc3dwOworCisJfQorCisJLyogQ2FsY3VsYXRlIHRoZSBuZXcgd3JpdGUgcG9zaXRpb24gKi8KKwluZXdfc3dwID0gY3Vycl9zd3AgKyBieXRlc190b193cml0ZTsKKworCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgbmV3X3N3cCA9ICV4XG4iLCBfX2Z1bmNfXywgbmV3X3N3cCk7CisJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSBidXMtPm1fZHdTaXplU2V0UmluZyA9ICV4XG4iLCBfX2Z1bmNfXywKKwkJYnVzLT5tX2R3U2l6ZVNldFJpbmcpOworCisJLyogTWVudGFsIE5vdGU6IGxpbmUgNDYyIHRtbWhDb21SZXNCdXNQQ0llLmNwcCAqLworCisJLyogQ2hlY2sgaWYgd2UncmUgZ29pbmcgdG8gd3JhcCBhZ2FpbiAqLworCWlmIChuZXdfc3dwID4gYnVzLT5tX2R3U2l6ZVNldFJpbmcpIHsKKworCQkvKiBSaW5nIHdyYXBzICovCisJCW5ld19zd3AgLT0gYnVzLT5tX2R3U2l6ZVNldFJpbmc7CisKKwkJc3BhY2VfcmVtID0gYnVzLT5tX2R3U2l6ZVNldFJpbmcgLSBjdXJyX3N3cDsKKworCQlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIHNwYWNlX3JlbSA9ICV4XG4iLCBfX2Z1bmNfXywKKwkJCXNwYWNlX3JlbSk7CisKKwkJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSBzaXplb2YoKm1zZykgPSAlZFxuIiwgX19mdW5jX18sCisJCQkodTMyKXNpemVvZigqbXNnKSk7CisKKwkJaWYgKHNwYWNlX3JlbSA8IHNpemVvZigqbXNnKSkgeworCQkJZHByaW50ayhEQkdMVkxfQlVTLCAiJXMoKSB0cjRcbiIsIF9fZnVuY19fKTsKKworCQkJLyogU3BsaXQgdGhlIG1zZyBpbnRvIHBpZWNlcyBhcyB0aGUgcmluZyB3cmFwcyAqLworCQkJbWVtY3B5KGJ1cy0+bV9wZHdTZXRSaW5nICsgY3Vycl9zd3AsIG1zZywgc3BhY2VfcmVtKTsKKwkJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZywgKHU4ICopbXNnICsgc3BhY2VfcmVtLAorCQkJCXNpemVvZigqbXNnKSAtIHNwYWNlX3JlbSk7CisKKwkJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZyArIHNpemVvZigqbXNnKSAtIHNwYWNlX3JlbSwKKwkJCQlidWYsIG1zZy0+c2l6ZSk7CisKKwkJfSBlbHNlIGlmIChzcGFjZV9yZW0gPT0gc2l6ZW9mKCptc2cpKSB7CisJCQlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIHRyNVxuIiwgX19mdW5jX18pOworCisJCQkvKiBBZGRpdGlvbmFsIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmluZyAqLworCQkJbWVtY3B5KGJ1cy0+bV9wZHdTZXRSaW5nICsgY3Vycl9zd3AsIG1zZywgc2l6ZW9mKCptc2cpKTsKKwkJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZywgYnVmLCBtc2ctPnNpemUpOworCisJCX0gZWxzZSB7CisJCQkvKiBBZGRpdGlvbmFsIGRhdGEgd3JhcHMgYXJvdW5kIHRoZSByaW5nICovCisJCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcgKyBjdXJyX3N3cCwgbXNnLCBzaXplb2YoKm1zZykpOworCQkJaWYgKG1zZy0+c2l6ZSA+IDApIHsKKwkJCQltZW1jcHkoYnVzLT5tX3Bkd1NldFJpbmcgKyBjdXJyX3N3cCArCisJCQkJCXNpemVvZigqbXNnKSwgYnVmLCBzcGFjZV9yZW0gLQorCQkJCQlzaXplb2YoKm1zZykpOworCQkJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZywgKHU4ICopYnVmICsKKwkJCQkJc3BhY2VfcmVtIC0gc2l6ZW9mKCptc2cpLAorCQkJCQlieXRlc190b193cml0ZSAtIHNwYWNlX3JlbSk7CisJCQl9CisKKwkJfQorCisJfSAvKiAobmV3X3N3cCA+IGJ1cy0+bV9kd1NpemVTZXRSaW5nKSAqLworCWVsc2UgeworCQlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIHRyNlxuIiwgX19mdW5jX18pOworCisJCS8qIFRoZSByaW5nIGJ1ZmZlciBkb2Vzbid0IHdyYXAsIHR3byBzaW1wbGUgY29waWVzICovCisJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZyArIGN1cnJfc3dwLCBtc2csIHNpemVvZigqbXNnKSk7CisJCW1lbWNweShidXMtPm1fcGR3U2V0UmluZyArIGN1cnJfc3dwICsgc2l6ZW9mKCptc2cpLCBidWYsCisJCQltc2ctPnNpemUpOworCX0KKworCWRwcmludGsoREJHTFZMX0JVUywgIiVzKCkgbmV3X3N3cCA9ICV4XG4iLCBfX2Z1bmNfXywgbmV3X3N3cCk7CisKKwkvKiBUT0RPOiBDb252ZXJ0IGFsbCBvZiB0aGUgZGlyZWN0IFBDSSB3cml0ZXMgaW50bworCSAqIHNhYTcxNjRfd3JpdGVsL2IgY2FsbHMgZm9yIGNvbnNpc3RlbmN5LgorCSAqLworCisJLyogVXBkYXRlIHRoZSBidXMgd3JpdGUgcG9zaXRpb24gKi8KKwkqYnVzLT5tX3Bkd1NldFdyaXRlUG9zID0gY3B1X3RvX2xlMzIobmV3X3N3cCk7CisJcmV0ID0gU0FBX09LOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZidXMtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZWNlaXZlIGEgY29tbWFuZCBvciBhIHJlc3BvbnNlIGZyb20gdGhlIGJ1cy4gVGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90CisgKiBrbm93IGlmIGl0IGlzIGEgY29tbWFuZCBvciBhIHJlc3BvbnNlIGl0IHNpbXBseSBkZXF1ZXVlcyB0aGUgZGF0YSwKKyAqIGRlcGVuZGluZyBvbiB0aGUgYnVzIGluZm9ybWF0aW9uIGdpdmVuIGluIHRoZSB0bUNvbVJlc0J1c0luZm9fdCBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogIDAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqICA8IDAgICAgICAgIE9uZSBvciBtb3JlIG1lbWJlcnMgYXJlIG5vdCBpbml0aWFsaXplZC4KKyAqLworaW50IHNhYTcxNjRfYnVzX2dldChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdG1Db21SZXNJbmZvX3QqIG1zZywgdm9pZCAqYnVmLAorCWludCBwZWVrb25seSkKK3sKKwl0bUNvbVJlc0J1c0luZm9fdCAqYnVzID0gJmRldi0+YnVzOworCXUzMiBieXRlc190b19yZWFkLCB3cml0ZV9kaXN0YW5jZSwgY3Vycl9ncnAsIGN1cnJfZ3dwLAorCQluZXdfZ3JwLCBidWZfc2l6ZSwgc3BhY2VfcmVtOworCXRtQ29tUmVzSW5mb190IG1zZ190bXA7CisJaW50IHJldCA9IFNBQV9FUlJfQkFEX1BBUkFNRVRFUjsKKworCWlmIChtc2cgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtc2ctPnNpemUgPiBkZXYtPmJ1cy5tX3dNYXhSZXFTaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBFeGNlZWRlZCBkZXYtPmJ1cy5tX3dNYXhSZXFTaXplXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICgocGVla29ubHkgPT0gMCkgJiYgKG1zZy0+c2l6ZSA+IDApICYmIChidWYgPT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMoKSBNaXNzaW5nIG1zZyBidWYsIHNpemUgc2hvdWxkIGJlICVkIGJ5dGVzXG4iLAorCQkJX19mdW5jX18sIG1zZy0+c2l6ZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJbXV0ZXhfbG9jaygmYnVzLT5sb2NrKTsKKworCS8qIFBlZWsgdGhlIGJ1cyB0byBzZWUgaWYgYSBtc2cgZXhpc3RzLCBpZiBpdCdzIG5vdCB3aGF0IHdlJ3JlIGV4cGVjdGluZworCSAqIHRoZW4gcmV0dXJuIGNsZWFubHkgZWxzZSByZWFkIHRoZSBtZXNzYWdlIGZyb20gdGhlIGJ1cy4KKwkgKi8KKwljdXJyX2d3cCA9IGxlMzJfdG9fY3B1KCpidXMtPm1fcGR3R2V0V3JpdGVQb3MpOworCWN1cnJfZ3JwID0gbGUzMl90b19jcHUoKmJ1cy0+bV9wZHdHZXRSZWFkUG9zKTsKKworCWlmIChjdXJyX2d3cCA9PSBjdXJyX2dycCkgeworCQlkcHJpbnRrKERCR0xWTF9CVVMsICIlcygpIE5vIG1lc3NhZ2Ugb24gdGhlIGJ1c1xuIiwgX19mdW5jX18pOworCQlyZXQgPSBTQUFfRVJSX0VNUFRZOworCQlnb3RvIG91dDsKKwl9CisKKwlieXRlc190b19yZWFkID0gc2l6ZW9mKCptc2cpOworCisJLyogQ2FsY3VsYXRlIHdyaXRlIGRpc3RhbmNlIHRvIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiAqLworCXdyaXRlX2Rpc3RhbmNlID0gMDsKKwlpZiAoY3Vycl9nd3AgPj0gY3Vycl9ncnApCisJCS8qIFdyaXRlIGRvZXNuJ3Qgd3JhcCBhcm91bmQgdGhlIHJpbmcgKi8KKwkJd3JpdGVfZGlzdGFuY2UgPSBjdXJyX2d3cCAtIGN1cnJfZ3JwOworCWVsc2UKKwkJLyogV3JpdGUgd3JhcHMgYXJvdW5kIHRoZSByaW5nICovCisJCXdyaXRlX2Rpc3RhbmNlID0gY3Vycl9nd3AgKyBidXMtPm1fZHdTaXplR2V0UmluZyAtIGN1cnJfZ3JwOworCisJaWYgKGJ5dGVzX3RvX3JlYWQgPiB3cml0ZV9kaXN0YW5jZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgTm8gbWVzc2FnZS9yZXNwb25zZSBmb3VuZFxuIiwgX19mdW5jX18pOworCQlyZXQgPSBTQUFfRVJSX0lOVkFMSURfQ09NTUFORDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ2FsY3VsYXRlIHRoZSBuZXcgcmVhZCBwb3NpdGlvbiAqLworCW5ld19ncnAgPSBjdXJyX2dycCArIGJ5dGVzX3RvX3JlYWQ7CisJaWYgKG5ld19ncnAgPiBidXMtPm1fZHdTaXplR2V0UmluZykgeworCisJCS8qIFJpbmcgd3JhcHMgKi8KKwkJbmV3X2dycCAtPSBidXMtPm1fZHdTaXplR2V0UmluZzsKKwkJc3BhY2VfcmVtID0gYnVzLT5tX2R3U2l6ZUdldFJpbmcgLSBjdXJyX2dycDsKKworCQltZW1jcHkoJm1zZ190bXAsIGJ1cy0+bV9wZHdHZXRSaW5nICsgY3Vycl9ncnAsIHNwYWNlX3JlbSk7CisJCW1lbWNweSgodTggKikmbXNnX3RtcCArIHNwYWNlX3JlbSwgYnVzLT5tX3Bkd0dldFJpbmcsCisJCQlieXRlc190b19yZWFkIC0gc3BhY2VfcmVtKTsKKworCX0gZWxzZSB7CisJCS8qIE5vIHdyYXBwaW5nICovCisJCW1lbWNweSgmbXNnX3RtcCwgYnVzLT5tX3Bkd0dldFJpbmcgKyBjdXJyX2dycCwgYnl0ZXNfdG9fcmVhZCk7CisJfQorCisJLyogTm8gbmVlZCB0byB1cGRhdGUgdGhlIHJlYWQgcG9zaXRpb25zLCBiZWNhdXNlIHRoaXMgd2FzIGEgcGVlayAqLworCS8qIElmIHRoZSBjYWxsZXIgc3BlY2lmaWNhbGx5IHdhbnQgdG8gcGVlaywgcmV0dXJuICovCisJaWYgKHBlZWtvbmx5KSB7CisJCW1lbWNweShtc2csICZtc2dfdG1wLCBzaXplb2YoKm1zZykpOworCQlnb3RvIHBlZWtvdXQ7CisJfQorCisJLyogQ2hlY2sgaWYgdGhlIGNvbW1hbmQvcmVzcG9uc2UgbWF0Y2hlcyB3aGF0IGlzIGV4cGVjdGVkICovCisJaWYgKChtc2dfdG1wLmlkICE9IG1zZy0+aWQpIHx8IChtc2dfdG1wLmNvbW1hbmQgIT0gbXNnLT5jb21tYW5kKSB8fAorCQkobXNnX3RtcC5jb250cm9sc2VsZWN0b3IgIT0gbXNnLT5jb250cm9sc2VsZWN0b3IpIHx8CisJCShtc2dfdG1wLnNlcW5vICE9IG1zZy0+c2Vxbm8pIHx8IChtc2dfdG1wLnNpemUgIT0gbXNnLT5zaXplKSkgeworCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBVbmV4cGVjdGVkIG1zZyBtaXNzLW1hdGNoXG4iLCBfX2Z1bmNfXyk7CisJCXNhYTcxNjRfYnVzX2R1bXBtc2coZGV2LCBtc2csIGJ1Zik7CisJCXNhYTcxNjRfYnVzX2R1bXBtc2coZGV2LCAmbXNnX3RtcCwgMCk7CisJCXJldCA9IFNBQV9FUlJfSU5WQUxJRF9DT01NQU5EOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgdGhlIGFjdHVhbCBjb21tYW5kIGFuZCByZXNwb25zZSBmcm9tIHRoZSBidXMgKi8KKwlidWZfc2l6ZSA9IG1zZy0+c2l6ZTsKKworCWJ5dGVzX3RvX3JlYWQgPSBzaXplb2YoKm1zZykgKyBtc2ctPnNpemU7CisJLyogQ2FsY3VsYXRlIHdyaXRlIGRpc3RhbmNlIHRvIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiAqLworCXdyaXRlX2Rpc3RhbmNlID0gMDsKKwlpZiAoY3Vycl9nd3AgPj0gY3Vycl9ncnApCisJCS8qIFdyaXRlIGRvZXNuJ3Qgd3JhcCBhcm91bmQgdGhlIHJpbmcgKi8KKwkJd3JpdGVfZGlzdGFuY2UgPSBjdXJyX2d3cCAtIGN1cnJfZ3JwOworCWVsc2UKKwkJLyogV3JpdGUgd3JhcHMgYXJvdW5kIHRoZSByaW5nICovCisJCXdyaXRlX2Rpc3RhbmNlID0gY3Vycl9nd3AgKyBidXMtPm1fZHdTaXplR2V0UmluZyAtIGN1cnJfZ3JwOworCisJaWYgKGJ5dGVzX3RvX3JlYWQgPiB3cml0ZV9kaXN0YW5jZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgSW52YWxpZCBidXMgc3RhdGUsIG1pc3NpbmcgbXNnICIKKwkJCSJvciBtYW5nbGVkIHJpbmcsIGZhdWx0eSBIL1cgLyBiYWQgY29kZT9cbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gU0FBX0VSUl9JTlZBTElEX0NPTU1BTkQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIENhbGN1bGF0ZSB0aGUgbmV3IHJlYWQgcG9zaXRpb24gKi8KKwluZXdfZ3JwID0gY3Vycl9ncnAgKyBieXRlc190b19yZWFkOworCWlmIChuZXdfZ3JwID4gYnVzLT5tX2R3U2l6ZUdldFJpbmcpIHsKKworCQkvKiBSaW5nIHdyYXBzICovCisJCW5ld19ncnAgLT0gYnVzLT5tX2R3U2l6ZUdldFJpbmc7CisJCXNwYWNlX3JlbSA9IGJ1cy0+bV9kd1NpemVHZXRSaW5nIC0gY3Vycl9ncnA7CisKKwkJaWYgKHNwYWNlX3JlbSA8IHNpemVvZigqbXNnKSkgeworCQkJLyogbXNnIHdyYXBzIGFyb3VuZCB0aGUgcmluZyAqLworCQkJbWVtY3B5KG1zZywgYnVzLT5tX3Bkd0dldFJpbmcgKyBjdXJyX2dycCwgc3BhY2VfcmVtKTsKKwkJCW1lbWNweSgodTggKiltc2cgKyBzcGFjZV9yZW0sIGJ1cy0+bV9wZHdHZXRSaW5nLAorCQkJCXNpemVvZigqbXNnKSAtIHNwYWNlX3JlbSk7CisJCQlpZiAoYnVmKQorCQkJCW1lbWNweShidWYsIGJ1cy0+bV9wZHdHZXRSaW5nICsgc2l6ZW9mKCptc2cpIC0KKwkJCQkJc3BhY2VfcmVtLCBidWZfc2l6ZSk7CisKKwkJfSBlbHNlIGlmIChzcGFjZV9yZW0gPT0gc2l6ZW9mKCptc2cpKSB7CisJCQltZW1jcHkobXNnLCBidXMtPm1fcGR3R2V0UmluZyArIGN1cnJfZ3JwLCBzaXplb2YoKm1zZykpOworCQkJaWYgKGJ1ZikKKwkJCQltZW1jcHkoYnVmLCBidXMtPm1fcGR3R2V0UmluZywgYnVmX3NpemUpOworCQl9IGVsc2UgeworCQkJLyogQWRkaXRpb25hbCBkYXRhIHdyYXBzIGFyb3VuZCB0aGUgcmluZyAqLworCQkJbWVtY3B5KG1zZywgYnVzLT5tX3Bkd0dldFJpbmcgKyBjdXJyX2dycCwgc2l6ZW9mKCptc2cpKTsKKwkJCWlmIChidWYpIHsKKwkJCQltZW1jcHkoYnVmLCBidXMtPm1fcGR3R2V0UmluZyArIGN1cnJfZ3JwICsKKwkJCQkJc2l6ZW9mKCptc2cpLCBzcGFjZV9yZW0gLSBzaXplb2YoKm1zZykpOworCQkJCW1lbWNweShidWYgKyBzcGFjZV9yZW0gLSBzaXplb2YoKm1zZyksCisJCQkJCWJ1cy0+bV9wZHdHZXRSaW5nLCBieXRlc190b19yZWFkIC0KKwkJCQkJc3BhY2VfcmVtKTsKKwkJCX0KKworCQl9CisKKwl9IGVsc2UgeworCQkvKiBObyB3cmFwcGluZyAqLworCQltZW1jcHkobXNnLCBidXMtPm1fcGR3R2V0UmluZyArIGN1cnJfZ3JwLCBzaXplb2YoKm1zZykpOworCQlpZiAoYnVmKQorCQkJbWVtY3B5KGJ1ZiwgYnVzLT5tX3Bkd0dldFJpbmcgKyBjdXJyX2dycCArIHNpemVvZigqbXNnKSwKKwkJCQlidWZfc2l6ZSk7CisJfQorCisJLyogVXBkYXRlIHRoZSByZWFkIHBvc2l0aW9ucywgYWRqdXN0aW5nIHRoZSByaW5nICovCisJKmJ1cy0+bV9wZHdHZXRSZWFkUG9zID0gY3B1X3RvX2xlMzIobmV3X2dycCk7CisKK3BlZWtvdXQ6CisJbXNnLT5zaXplID0gbGUxNl90b19jcHUobXNnLT5zaXplKTsKKwltc2ctPmNvbW1hbmQgPSBsZTE2X3RvX2NwdShtc2ctPmNvbW1hbmQpOworCW1zZy0+Y29udHJvbHNlbGVjdG9yID0gbGUxNl90b19jcHUobXNnLT5jb250cm9sc2VsZWN0b3IpOworCXJldCA9IFNBQV9PSzsKK291dDoKKwltdXRleF91bmxvY2soJmJ1cy0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNhcmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMjk5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNhcmRzLmMKQEAgLTAsMCArMSw2MjQgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgTlhQIFNBQTcxNjQgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJzYWE3MTY0LmgiCisKKy8qIFRoZSBCcmlkZ2UgQVBJIG5lZWRzIHRvIHVuZGVyc3RhbmQgcmVnaXN0ZXIgd2lkdGhzIChpbiBieXRlcykgZm9yIHRoZQorICogYXR0YWNoZWQgSTJDIGRldmljZXMsIHNvIHdlIGNhbiBzaW1wbGlmeSB0aGUgdmlydHVhbCBpMmMgbWVjaGFuc21zCisgKiBhbmQga2VlcCB0aGUgLWkyYy5jIGltcGxlbWVudGF0aW9uIGNsZWFuLgorICovCisjZGVmaW5lIFJFR0xFTl84Yml0CTEKKyNkZWZpbmUgUkVHTEVOXzE2Yml0CTIKKworc3RydWN0IHNhYTcxNjRfYm9hcmQgc2FhNzE2NF9ib2FyZHNbXSA9IHsKKwlbU0FBNzE2NF9CT0FSRF9VTktOT1dOXSA9IHsKKwkJLyogQnJpZGdlIHdpbGwgbm90IGxvYWQgYW55IGZpcm13YXJlLCB3aXRob3V0IGtub3dpbmcKKwkJICogdGhlIHJldiB0aGlzIHdvdWxkIGJlIGZhdGFsLiAqLworCQkubmFtZQkJPSAiVW5rbm93biIsCisJfSwKKwlbU0FBNzE2NF9CT0FSRF9VTktOT1dOX1JFVjJdID0geworCQkvKiBCcmlkZ2Ugd2lsbCBsb2FkIHRoZSB2MiBmL3cgYW5kIGR1bXAgZGVzY3JpcHRvcnMgKi8KKwkJLyogUmVxdWlyZWQgZHVyaW5nIG5ldyBib2FyZCBicmluZ3VwICovCisJCS5uYW1lCQk9ICJHZW5lcmljIFJldjIiLAorCQkuY2hpcHJldgk9IFNBQTcxNjRfQ0hJUF9SRVYyLAorCX0sCisJW1NBQTcxNjRfQk9BUkRfVU5LTk9XTl9SRVYzXSA9IHsKKwkJLyogQnJpZGdlIHdpbGwgbG9hZCB0aGUgdjIgZi93IGFuZCBkdW1wIGRlc2NyaXB0b3JzICovCisJCS8qIFJlcXVpcmVkIGR1cmluZyBuZXcgYm9hcmQgYnJpbmd1cCAqLworCQkubmFtZQkJPSAiR2VuZXJpYyBSZXYzIiwKKwkJLmNoaXByZXYJPSBTQUE3MTY0X0NISVBfUkVWMywKKwl9LAorCVtTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIyMjAwIiwKKwkJLnBvcnRhCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5wb3J0YgkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkuY2hpcHJldgk9IFNBQTcxNjRfQ0hJUF9SRVYzLAorCQkudW5pdAkJPSB7eworCQkJLmlkCQk9IDB4MWQsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRUVQUk9NLAorCQkJLm5hbWUJCT0gIjRLIEVFUFJPTSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18wLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDFiLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MWUsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJUREExMDA0OC0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgxMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDFmLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiVERBMTAwNDgtMiIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MTIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9IH0sCisJfSwKKwlbU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMF8yXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIyMjAwIiwKKwkJLnBvcnRhCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5wb3J0YgkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkuY2hpcHJldgk9IFNBQTcxNjRfQ0hJUF9SRVYyLAorCQkudW5pdAkJPSB7eworCQkJLmlkCQk9IDB4MDYsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRUVQUk9NLAorCQkJLm5hbWUJCT0gIjRLIEVFUFJPTSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18wLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA1LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiVERBMTAwNDgtMSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxZSwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0yIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDFmLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiVERBMTAwNDgtMiIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MTIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9IH0sCisJfSwKKwlbU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMF8zXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIyMjAwIiwKKwkJLnBvcnRhCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5wb3J0YgkJPSBTQUE3MTY0X01QRUdfRFZCLAorCQkuY2hpcHJldgk9IFNBQTcxNjRfQ0hJUF9SRVYyLAorCQkudW5pdAkJPSB7eworCQkJLmlkCQk9IDB4MWQsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRUVQUk9NLAorCQkJLm5hbWUJCT0gIjRLIEVFUFJPTSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18wLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwNCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9UVU5FUiwKKwkJCS5uYW1lCQk9ICJUREExODI3MS0xIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhjMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA1LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0FOQUxPR19ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJUREE4MjkwLTEiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDg0ID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MWIsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfVFVORVIsCisJCQkubmFtZQkJPSAiVERBMTgyNzEtMiIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4YzAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxYywKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9BTkFMT0dfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiVERBODI5MC0yIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHg4NCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDFlLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJCQkubmFtZQkJPSAiVERBMTAwNDgtMSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MTAgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgxZiwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIlREQTEwMDQ4LTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweDEyID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSB9LAorCX0sCisJW1NBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTBdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjIyNTAiLAorCQkucG9ydGEJCT0gU0FBNzE2NF9NUEVHX0RWQiwKKwkJLnBvcnRiCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5jaGlwcmV2CT0gU0FBNzE2NF9DSElQX1JFVjMsCisJCS51bml0CQk9IHt7CisJCQkuaWQJCT0gMHgyMiwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9FRVBST00sCisJCQkubmFtZQkJPSAiNEsgRUVQUk9NIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzAsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhhMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA0LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTEiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDcsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMSAoVE9QKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwOCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIkNYMjQyMjgvUzVIMTQxMS0xIChRQU0pIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgzNCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDFlLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MjAsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMiAoVE9QKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgyMywKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIkNYMjQyMjgvUzVIMTQxMS0yIChRQU0pIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgzNCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0gfSwKKwl9LAorCVtTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzJdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjIyNTAiLAorCQkucG9ydGEJCT0gU0FBNzE2NF9NUEVHX0RWQiwKKwkJLnBvcnRiCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5jaGlwcmV2CT0gU0FBNzE2NF9DSElQX1JFVjMsCisJCS51bml0CQk9IHt7CisJCQkuaWQJCT0gMHgyOCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9FRVBST00sCisJCQkubmFtZQkJPSAiNEsgRUVQUk9NIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzAsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhhMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA0LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTEiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDcsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMSAoVE9QKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwOCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIkNYMjQyMjgvUzVIMTQxMS0xIChRQU0pIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgzNCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDI0LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MjYsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMiAoVE9QKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgyOSwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIkNYMjQyMjgvUzVIMTQxMS0yIChRQU0pIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgzNCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0gfSwKKwl9LAorCVtTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzNdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjIyNTAiLAorCQkucG9ydGEJCT0gU0FBNzE2NF9NUEVHX0RWQiwKKwkJLnBvcnRiCQk9IFNBQTcxNjRfTVBFR19EVkIsCisJCS5jaGlwcmV2CT0gU0FBNzE2NF9DSElQX1JFVjMsCisJCS51bml0CQk9IHt7CisJCQkuaWQJCT0gMHgyNiwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9FRVBST00sCisJCQkubmFtZQkJPSAiNEsgRUVQUk9NIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzAsCisJCQkuaTJjX2J1c19hZGRyCT0gMHhhMCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDA0LAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTEiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMSwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MDcsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMSAoVE9QKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18xLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgwOCwKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIkNYMjQyMjgvUzVIMTQxMS0xIChRQU0pIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzEsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgzNCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0sIHsKKwkJCS5pZAkJPSAweDIyLAorCQkJLnR5cGUJCT0gU0FBNzE2NF9VTklUX1RVTkVSLAorCQkJLm5hbWUJCT0gIlREQTE4MjcxLTIiLAorCQkJLmkyY19idXNfbnIJPSBTQUE3MTY0X0kyQ19CVVNfMiwKKwkJCS5pMmNfYnVzX2FkZHIJPSAweGMwID4+IDEsCisJCQkuaTJjX3JlZ19sZW4JPSBSRUdMRU5fOGJpdCwKKwkJfSwgeworCQkJLmlkCQk9IDB4MjQsCisJCQkudHlwZQkJPSBTQUE3MTY0X1VOSVRfRElHSVRBTF9ERU1PRFVMQVRPUiwKKwkJCS5uYW1lCQk9ICJDWDI0MjI4L1M1SDE0MTEtMiAoVE9QKSIsCisJCQkuaTJjX2J1c19ucgk9IFNBQTcxNjRfSTJDX0JVU18yLAorCQkJLmkyY19idXNfYWRkcgk9IDB4MzIgPj4gMSwKKwkJCS5pMmNfcmVnX2xlbgk9IFJFR0xFTl84Yml0LAorCQl9LCB7CisJCQkuaWQJCT0gMHgyNywKKwkJCS50eXBlCQk9IFNBQTcxNjRfVU5JVF9ESUdJVEFMX0RFTU9EVUxBVE9SLAorCQkJLm5hbWUJCT0gIkNYMjQyMjgvUzVIMTQxMS0yIChRQU0pIiwKKwkJCS5pMmNfYnVzX25yCT0gU0FBNzE2NF9JMkNfQlVTXzIsCisJCQkuaTJjX2J1c19hZGRyCT0gMHgzNCA+PiAxLAorCQkJLmkyY19yZWdfbGVuCT0gUkVHTEVOXzhiaXQsCisJCX0gfSwKKwl9LAorfTsKK2NvbnN0IHVuc2lnbmVkIGludCBzYWE3MTY0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzE2NF9ib2FyZHMpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFBDSSBzdWJzeXN0ZW0gSURzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCitzdHJ1Y3Qgc2FhNzE2NF9zdWJpZCBzYWE3MTY0X3N1Ymlkc1tdID0geworCXsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4ODg4MCwKKwkJLmNhcmQgICAgICA9IFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg4ODEwLAorCQkuY2FyZCAgICAgID0gU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDg5ODAsCisJCS5jYXJkICAgICAgPSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4ODkwMCwKKwkJLmNhcmQgICAgICA9IFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMiwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDg5MDEsCisJCS5jYXJkICAgICAgPSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzMsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg4OEExLAorCQkuY2FyZCAgICAgID0gU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8zLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4ODg5MSwKKwkJLmNhcmQgICAgICA9IFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTBfMiwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDg4NTEsCisJCS5jYXJkICAgICAgPSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzIsCisJfSwKK307Citjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzE2NF9pZGNvdW50ID0gQVJSQVlfU0laRShzYWE3MTY0X3N1Ymlkcyk7CisKK3ZvaWQgc2FhNzE2NF9jYXJkX2xpc3Qoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJaW50IGk7CisKKwlpZiAoMCA9PSBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciAmJgorCSAgICAwID09IGRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBCb2FyZCBoYXMgbm8gdmFsaWQgUENJZSBTdWJzeXN0ZW0gSUQgYW5kIGNhbid0XG4iCisJCQkiJXM6IGJlIGF1dG9kZXRlY3RlZC4gUGFzcyBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uIHRvXG4iCisJCQkiJXM6IHdvcmthcm91bmQgdGhhdC4gU2VuZCBjb21wbGFpbnRzIHRvIHRoZSB2ZW5kb3JcbiIKKwkJCSIlczogb2YgdGhlIFRWIGNhcmQuIEJlc3QgcmVnYXJkcyxcbiIKKwkJCSIlczogICAgICAgICAtLSB0dXhcbiIsCisJCQlkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXM6IFlvdXIgYm9hcmQgaXNuJ3Qga25vd24gKHlldCkgdG8gdGhlIGRyaXZlci5cbiIKKwkJCSIlczogVHJ5IHRvIHBpY2sgb25lIG9mIHRoZSBleGlzdGluZyBjYXJkIGNvbmZpZ3MgdmlhXG4iCisJCQkiJXM6IGNhcmQ9PG4+IGluc21vZCBvcHRpb24uICBVcGRhdGluZyB0byB0aGUgbGF0ZXN0XG4iCisJCQkiJXM6IHZlcnNpb24gbWlnaHQgaGVscCBhcyB3ZWxsLlxuIiwKKwkJCWRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSk7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICIlczogSGVyZSBhcmUgdmFsaWQgY2hvaWNlcyBmb3IgdGhlIGNhcmQ9PG4+IGluc21vZCAiCisJCSJvcHRpb246XG4iLCBkZXYtPm5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IHNhYTcxNjRfYmNvdW50OyBpKyspCisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICAgIGNhcmQ9JWQgLT4gJXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGksIHNhYTcxNjRfYm9hcmRzW2ldLm5hbWUpOworfQorCisvKiBUT0RPOiBjbGVhbiB0aGlzIGRlZmluZSB1cCBpbnRvIHRoZSAtY2FyZHMuYyBzdHJ1Y3RzICovCisjZGVmaW5lIFBDSUVCUklER0VfVU5JVElEIDIKKwordm9pZCBzYWE3MTY0X2dwaW9fc2V0dXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisKKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMDoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMjoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMzoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTA6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzI6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzM6CisJCS8qCisJCUdQSU8gMjogczVoMTQxMSAvIHRkYTEwMDQ4LTEgZGVtb2QgcmVzZXQKKwkJR1BJTyAzOiBzNWgxNDExIC8gdGRhMTAwNDgtMiBkZW1vZCByZXNldAorCQlHUElPIDc6IElSQmxhc3RlciBaaWxvZyByZXNldAorCQkgKi8KKworCQkvKiBSZXNldCBwYXJ0cyBieSBnb2luZyBpbiBhbmQgb3V0IG9mIHJlc2V0ICovCisJCXNhYTcxNjRfYXBpX2NsZWFyX2dwaW9iaXQoZGV2LCBQQ0lFQlJJREdFX1VOSVRJRCwgMik7CisJCXNhYTcxNjRfYXBpX2NsZWFyX2dwaW9iaXQoZGV2LCBQQ0lFQlJJREdFX1VOSVRJRCwgMyk7CisKKwkJbXNsZWVwKDEwKTsKKworCQlzYWE3MTY0X2FwaV9zZXRfZ3Bpb2JpdChkZXYsIFBDSUVCUklER0VfVU5JVElELCAyKTsKKwkJc2FhNzE2NF9hcGlfc2V0X2dwaW9iaXQoZGV2LCBQQ0lFQlJJREdFX1VOSVRJRCwgMyk7CisJCWJyZWFrOworCX0KKworfQorCitzdGF0aWMgdm9pZCBoYXVwcGF1Z2VfZWVwcm9tKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCAqZWVwcm9tX2RhdGEpCit7CisJc3RydWN0IHR2ZWVwcm9tIHR2OworCisJLyogVE9ETzogQXNzdW1wdGlvbjogZWVwcm9tIG9uIGJ1cyAwICovCisJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsICZ0diwKKwkJZWVwcm9tX2RhdGEpOworCisJLyogTWFrZSBzdXJlIHdlIHN1cHBvcnQgdGhlIGJvYXJkIG1vZGVsICovCisJc3dpdGNoICh0di5tb2RlbCkgeworCWNhc2UgODgwMDE6CisJCS8qIERldmVsb3BtZW50IGJvYXJkIC0gTGltaXQgY2lyY3VsYXRpb24gKi8KKwkJLyogV2luVFYtSFZSMjI1MCAoUENJZSwgUmV0YWlsLCBmdWxsLWhlaWdodCBicmFja2V0KQorCQkgKiBBVFNDL1FBTSAoVERBMTgyNzEvUzVIMTQxMSkgYW5kIGJhc2ljIGFuYWxvZywgbm8gSVIsIEZNICovCisJY2FzZSA4ODAyMToKKwkJLyogV2luVFYtSFZSMjI1MCAoUENJZSwgUmV0YWlsLCBmdWxsLWhlaWdodCBicmFja2V0KQorCQkgKiBBVFNDL1FBTSAoVERBMTgyNzEvUzVIMTQxMSkgYW5kIGJhc2ljIGFuYWxvZywgTUNFIENJUiwgRk0gKi8KKwkJYnJlYWs7CisJY2FzZSA4ODA0MToKKwkJLyogV2luVFYtSFZSMjI1MCAoUENJZSwgUmV0YWlsLCBmdWxsLWhlaWdodCBicmFja2V0KQorCQkgKiBBVFNDL1FBTSAoVERBMTgyNzEvUzVIMTQxMSkgYW5kIGJhc2ljIGFuYWxvZywgbm8gSVIsIEZNICovCisJCWJyZWFrOworCWNhc2UgODgwNjE6CisJCS8qIFdpblRWLUhWUjIyNTAgKFBDSWUsIFJldGFpbCwgZnVsbC1oZWlnaHQgYnJhY2tldCkKKwkJICogQVRTQy9RQU0gKFREQTE4MjcxL1M1SDE0MTEpIGFuZCBiYXNpYyBhbmFsb2csIEZNICovCisJCWJyZWFrOworCWNhc2UgODk1MTk6CisJY2FzZSA4OTYwOToKKwkJLyogV2luVFYtSFZSMjIwMCAoUENJZSwgUmV0YWlsLCBmdWxsLWhlaWdodCkKKwkJICogRFZCLVQgKFREQTE4MjcxL1REQTEwMDQ4KSBhbmQgYmFzaWMgYW5hbG9nLCBubyBJUiAqLworCQlicmVhazsKKwljYXNlIDg5NjE5OgorCQkvKiBXaW5UVi1IVlIyMjAwIChQQ0llLCBSZXRhaWwsIGhhbGYtaGVpZ2h0KQorCQkgKiBEVkItVCAoVERBMTgyNzEvVERBMTAwNDgpIGFuZCBiYXNpYyBhbmFsb2csIG5vIElSICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFdhcm5pbmc6IFVua25vd24gSGF1cHBhdWdlIG1vZGVsICMlZFxuIiwKKwkJCWRldi0+bmFtZSwgdHYubW9kZWwpOworCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogSGF1cHBhdWdlIGVlcHJvbTogbW9kZWw9JWRcbiIsIGRldi0+bmFtZSwKKwkJdHYubW9kZWwpOworfQorCit2b2lkIHNhYTcxNjRfY2FyZF9zZXR1cChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlzdGF0aWMgdTggZWVwcm9tWzI1Nl07CisKKwlpZiAoZGV2LT5pMmNfYnVzWzBdLmkyY19yYyA9PSAwKSB7CisJCWlmIChzYWE3MTY0X2FwaV9yZWFkX2VlcHJvbShkZXYsICZlZXByb21bMF0sCisJCQlzaXplb2YoZWVwcm9tKSkgPCAwKQorCQkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjIwMDoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMjoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMzoKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTA6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzI6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwXzM6CisJCWhhdXBwYXVnZV9lZXByb20oZGV2LCAmZWVwcm9tWzBdKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBXaXRoIG1vc3Qgb3RoZXIgZHJpdmVycywgdGhlIGtlcm5lbCBleHBlY3RzIHRvIGNvbW11bmljYXRlIHdpdGggc3ViZHJpdmVycworICogdGhyb3VnaCBpMmMuIFRoaXMgYnJpZGdlIGRvZXMgbm90IGFsbG93IHRoYXQsIGl0IGRvZXMgbm90IGV4cG9zZSBhbnkgZGlyZWN0CisgKiBhY2Nlc3MgdG8gSTJDLiBJbnN0ZWFkIHdlIGhhdmUgdG8gY29tbXVuaWNhdGUgdGhyb3VnaCB0aGUgZGV2aWNlIGYvdyBmb3IKKyAqIHJlZ2lzdGVyIGFjY2VzcyB0byAncHJvY2Vzc2luZyB1bml0cycuIEVhY2ggdW5pdCBoYXMgYSB1bmlxdWUKKyAqIGlkLCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgcGh5c2ljYWwgaW1wbGVtZW50YXRpb24gb2NjdXJzIGFjcm9zcworICogdGhlIHRocmVlIHBoeXNpY2FsIGkyYyBidXNzZXMuIFRoZSBiZWluZyBzYWlkIGlmIHdlIHdhbnQgbGV2ZXJnZSBvZgorICogdGhlIGV4aXN0aW5nIGtlcm5lbCBkcml2ZXJzIGZvciB0dW5lcnMgYW5kIGRlbW9kcyB3ZSBoYXZlIHRvICdzcGVhayBpMmMnLAorICogdG8gdGhpcyBicmlkZ2UgaW1wbGVtZW50cyAzIHZpcnR1YWwgaTJjIGJ1c2VzLiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uCisgKiBmb3IgdGhvc2UuCisgKgorICogRGVzY3JpcHRpb246IFRyYW5zbGF0ZSB0aGUga2VybmVscyBub3Rpb24gb2YgYW4gaTJjIGFkZHJlc3MgYW5kIGJ1cyBpbnRvCisgKiB0aGUgYXBwcm9wcmlhdGUgdW5pdGlkLgorICovCitpbnQgc2FhNzE2NF9pMmNhZGRyX3RvX3VuaXRpZChzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cywgaW50IGFkZHIpCit7CisJLyogRm9yIGEgZ2l2ZW4gYnVzIGFuZCBpMmMgZGV2aWNlIGFkZHJlc3MsIHJldHVybiB0aGUgc2FhNzE2NCB1bmlxdWUKKwkgKiB1bml0aWQuIDwgMCBvbiBlcnJvciAqLworCisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBidXMtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE2NF91bml0ICp1bml0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNBQTcxNjRfTUFYX1VOSVRTOyBpKyspIHsKKwkJdW5pdCA9ICZzYWE3MTY0X2JvYXJkc1tkZXYtPmJvYXJkXS51bml0W2ldOworCisJCWlmICh1bml0LT50eXBlID09IFNBQTcxNjRfVU5JVF9VTkRFRklORUQpCisJCQljb250aW51ZTsKKwkJaWYgKChidXMtPm5yID09IHVuaXQtPmkyY19idXNfbnIpICYmCisJCQkoYWRkciA9PSB1bml0LT5pMmNfYnVzX2FkZHIpKQorCQkJcmV0dXJuIHVuaXQtPmlkOworCX0KKworCXJldHVybiAtMTsKK30KKworLyogVGhlIDcxNjQgQVBJIG5lZWRzIHRvIGtub3cgdGhlIGkyYyByZWdpc3RlciBsZW5ndGggaW4gYWR2YW5jZS4KKyAqIHRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uIEJhc2VkIG9uIGEgc3BlY2lmaWMgY2hpcCBhZGRyIGFuZCBidXMgcmV0dXJuIHRoZQorICogcmVnIGxlbmd0aC4KKyAqLworaW50IHNhYTcxNjRfaTJjYWRkcl90b19yZWdsZW4oc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIGludCBhZGRyKQoreworCS8qIEZvciBhIGdpdmVuIGJ1cyBhbmQgaTJjIGRldmljZSBhZGRyZXNzLCByZXR1cm4gdGhlCisJICogc2FhNzE2NCByZWdpc3RyeSBhZGRyZXNzIHdpZHRoLiA8IDAgb24gZXJyb3IKKwkgKi8KKworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gYnVzLT5kZXY7CisJc3RydWN0IHNhYTcxNjRfdW5pdCAqdW5pdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTQUE3MTY0X01BWF9VTklUUzsgaSsrKSB7CisJCXVuaXQgPSAmc2FhNzE2NF9ib2FyZHNbZGV2LT5ib2FyZF0udW5pdFtpXTsKKworCQlpZiAodW5pdC0+dHlwZSA9PSBTQUE3MTY0X1VOSVRfVU5ERUZJTkVEKQorCQkJY29udGludWU7CisKKwkJaWYgKChidXMtPm5yID09IHVuaXQtPmkyY19idXNfbnIpICYmCisJCQkoYWRkciA9PSB1bml0LT5pMmNfYnVzX2FkZHIpKQorCQkJcmV0dXJuIHVuaXQtPmkyY19yZWdfbGVuOworCX0KKworCXJldHVybiAtMTsKK30KKy8qIFRPRE86IGltcGxlbWVudCBhICdmaW5kZWVwcm9tJyBmdW5jdGlvIGxpa2UgdGhlIGFib3ZlIGFuZCBmaXggYW55IG90aGVyCisgKiBlZXByb20gcmVsYXRlZCB0b2RvJ3MgaW4gLWFwaS5jLgorICovCisKKy8qIFRyYW5zbGF0ZSBhIHVuaXRpZCBpbnRvIGEgeCByZWFkYWJsZSBkZXZpY2UgbmFtZSwgZm9yIGRpc3BsYXkgcHVycG9zZXMuICAqLworY2hhciAqc2FhNzE2NF91bml0aWRfbmFtZShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggdW5pdGlkKQoreworCWNoYXIgKnVuZGVmZWQgPSAiVU5ERUZJTkVEIjsKKwljaGFyICpicmlkZ2UgPSAiQlJJREdFIjsKKwlzdHJ1Y3Qgc2FhNzE2NF91bml0ICp1bml0OworCWludCBpOworCisJaWYgKHVuaXRpZCA9PSAwKQorCQlyZXR1cm4gYnJpZGdlOworCisJZm9yIChpID0gMDsgaSA8IFNBQTcxNjRfTUFYX1VOSVRTOyBpKyspIHsKKwkJdW5pdCA9ICZzYWE3MTY0X2JvYXJkc1tkZXYtPmJvYXJkXS51bml0W2ldOworCisJCWlmICh1bml0LT50eXBlID09IFNBQTcxNjRfVU5JVF9VTkRFRklORUQpCisJCQljb250aW51ZTsKKworCQlpZiAodW5pdGlkID09IHVuaXQtPmlkKQorCQkJCXJldHVybiB1bml0LT5uYW1lOworCX0KKworCXJldHVybiB1bmRlZmVkOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTdmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwpAQCAtMCwwICsxLDU3MiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKyNpbmNsdWRlICJzYWE3MTY0LmgiCisKK2ludCBzYWE3MTY0X2NtZF9hbGxvY19zZXFubyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlpbnQgaSwgcmV0ID0gLTE7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBTQUFfQ01EX01BWF9NU0dfVU5JVFM7IGkrKykgeworCQlpZiAoZGV2LT5jbWRzW2ldLmludXNlID09IDApIHsKKwkJCWRldi0+Y21kc1tpXS5pbnVzZSA9IDE7CisJCQlkZXYtPmNtZHNbaV0uc2lnbmFsbGVkID0gMDsKKwkJCWRldi0+Y21kc1tpXS50aW1lb3V0ID0gMDsKKwkJCXJldCA9IGRldi0+Y21kc1tpXS5zZXFubzsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2FhNzE2NF9jbWRfZnJlZV9zZXFubyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggc2Vxbm8pCit7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoKGRldi0+Y21kc1tzZXFub10uaW51c2UgPT0gMSkgJiYKKwkJKGRldi0+Y21kc1tzZXFub10uc2Vxbm8gPT0gc2Vxbm8pKSB7CisJCWRldi0+Y21kc1tzZXFub10uaW51c2UgPSAwOworCQlkZXYtPmNtZHNbc2Vxbm9dLnNpZ25hbGxlZCA9IDA7CisJCWRldi0+Y21kc1tzZXFub10udGltZW91dCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKK30KKwordm9pZCBzYWE3MTY0X2NtZF90aW1lb3V0X3NlcW5vKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCBzZXFubykKK3sKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWlmICgoZGV2LT5jbWRzW3NlcW5vXS5pbnVzZSA9PSAxKSAmJgorCQkoZGV2LT5jbWRzW3NlcW5vXS5zZXFubyA9PSBzZXFubykpIHsKKwkJZGV2LT5jbWRzW3NlcW5vXS50aW1lb3V0ID0gMTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworfQorCit1MzIgc2FhNzE2NF9jbWRfdGltZW91dF9nZXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHNlcW5vKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoKGRldi0+Y21kc1tzZXFub10uaW51c2UgPT0gMSkgJiYKKwkJKGRldi0+Y21kc1tzZXFub10uc2Vxbm8gPT0gc2Vxbm8pKSB7CisJCXJldCA9IGRldi0+Y21kc1tzZXFub10udGltZW91dDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyogQ29tbWFuZHMgdG8gdGhlIGYvdyBnZXQgbWFyc2hlbGxlZCB0by9mcm9tIHRoaXMgY29kZSB0aGVuIG9udG8gdGhlIFBDSQorICogLWJ1cy9jIHJ1bm5pbmcgYnVmZmVyLiAqLworaW50IHNhYTcxNjRfaXJxX2RlcXVldWUoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJaW50IHJldCA9IFNBQV9PSzsKKwl1MzIgdGltZW91dDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqcSA9IDA7CisJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJLyogV2hpbGUgYW55IG91dHN0YW5kIG1lc3NhZ2Ugb24gdGhlIGJ1cyBleGlzdHMuLi4gKi8KKwlkbyB7CisKKwkJLyogUGVlayB0aGUgbXNnIGJ1cyAqLworCQl0bUNvbVJlc0luZm9fdCB0UnNwID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisJCXJldCA9IHNhYTcxNjRfYnVzX2dldChkZXYsICZ0UnNwLCBOVUxMLCAxKTsKKwkJaWYgKHJldCAhPSBTQUFfT0spCisJCQlicmVhazsKKworCQlxID0gJmRldi0+Y21kc1t0UnNwLnNlcW5vXS53YWl0OworCQl0aW1lb3V0ID0gc2FhNzE2NF9jbWRfdGltZW91dF9nZXQoZGV2LCB0UnNwLnNlcW5vKTsKKwkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSB0aW1lb3V0ID0gJWRcbiIsIF9fZnVuY19fLCB0aW1lb3V0KTsKKwkJaWYgKCF0aW1lb3V0KSB7CisJCQlkcHJpbnRrKERCR0xWTF9DTUQsCisJCQkJIiVzKCkgc2lnbmFsbGVkIHNlcW5vKCVkKSAoZm9yIGRlcXVldWUpXG4iLAorCQkJCV9fZnVuY19fLCB0UnNwLnNlcW5vKTsKKwkJCWRldi0+Y21kc1t0UnNwLnNlcW5vXS5zaWduYWxsZWQgPSAxOworCQkJd2FrZV91cChxKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSIlcygpIGZvdW5kIHRpbWVkIG91dCBjb21tYW5kIG9uIHRoZSBidXNcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJfQorCX0gd2hpbGUgKDApOworCisJcmV0dXJuIHJldDsKK30KKworLyogQ29tbWFuZHMgdG8gdGhlIGYvdyBnZXQgbWFyc2hlbGxlZCB0by9mcm9tIHRoaXMgY29kZSB0aGVuIG9udG8gdGhlIFBDSQorICogLWJ1cy9jIHJ1bm5pbmcgYnVmZmVyLiAqLworaW50IHNhYTcxNjRfY21kX2RlcXVldWUoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJaW50IGxvb3AgPSAxOworCWludCByZXQ7CisJdTMyIHRpbWVvdXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKnEgPSAwOworCXU4IHRtcFs1MTJdOworCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCXdoaWxlIChsb29wKSB7CisKKwkJdG1Db21SZXNJbmZvX3QgdFJzcCA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCQlyZXQgPSBzYWE3MTY0X2J1c19nZXQoZGV2LCAmdFJzcCwgTlVMTCwgMSk7CisJCWlmIChyZXQgPT0gU0FBX0VSUl9FTVBUWSkKKwkJCXJldHVybiBTQUFfT0s7CisKKwkJaWYgKHJldCAhPSBTQUFfT0spCisJCQlyZXR1cm4gcmV0OworCisJCXEgPSAmZGV2LT5jbWRzW3RSc3Auc2Vxbm9dLndhaXQ7CisJCXRpbWVvdXQgPSBzYWE3MTY0X2NtZF90aW1lb3V0X2dldChkZXYsIHRSc3Auc2Vxbm8pOworCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIHRpbWVvdXQgPSAlZFxuIiwgX19mdW5jX18sIHRpbWVvdXQpOworCQlpZiAodGltZW91dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJmb3VuZCB0aW1lZCBvdXQgY29tbWFuZCBvbiB0aGUgYnVzXG4iKTsKKworCQkJLyogQ2xlYW4gdGhlIGJ1cyAqLworCQkJcmV0ID0gc2FhNzE2NF9idXNfZ2V0KGRldiwgJnRSc3AsICZ0bXAsIDApOworCQkJcHJpbnRrKEtFUk5fRVJSICJyZXQgPSAleFxuIiwgcmV0KTsKKwkJCWlmIChyZXQgPT0gU0FBX0VSUl9FTVBUWSkKKwkJCQkvKiBTb21lb25lIGVsc2UgYWxyZWFkeSBmZXRjaGVkIHRoZSByZXNwb25zZSAqLworCQkJCXJldHVybiBTQUFfT0s7CisKKwkJCWlmIChyZXQgIT0gU0FBX09LKQorCQkJCXJldHVybiByZXQ7CisKKwkJCWlmICh0UnNwLmZsYWdzICYgUFZDX0NNREZMQUdfQ09OVElOVUUpCisJCQkJcHJpbnRrKEtFUk5fRVJSICJzcGxpdCByZXNwb25zZVxuIik7CisJCQllbHNlCisJCQkJc2FhNzE2NF9jbWRfZnJlZV9zZXFubyhkZXYsIHRSc3Auc2Vxbm8pOworCisJCQlwcmludGsoS0VSTl9FUlIgIiB0aW1lb3V0IGNvbnRpbnVlXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBzaWduYWxsZWQgc2Vxbm8oJWQpIChmb3IgZGVxdWV1ZSlcbiIsCisJCQlfX2Z1bmNfXywgdFJzcC5zZXFubyk7CisJCWRldi0+Y21kc1t0UnNwLnNlcW5vXS5zaWduYWxsZWQgPSAxOworCQl3YWtlX3VwKHEpOworCQlyZXR1cm4gU0FBX09LOworCX0KKworCXJldHVybiBTQUFfT0s7Cit9CisKK2ludCBzYWE3MTY0X2NtZF9zZXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHRtQ29tUmVzSW5mb190KiBtc2csIHZvaWQgKmJ1ZikKK3sKKwl0bUNvbVJlc0J1c0luZm9fdCAqYnVzID0gJmRldi0+YnVzOworCXU4IGNtZF9zZW50OworCXUxNiBzaXplLCBpZHg7CisJdTMyIGNtZHM7CisJdm9pZCAqdG1wOworCWludCByZXQgPSAtMTsKKworCWlmICghbXNnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSAhbXNnXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBTQUFfRVJSX0JBRF9QQVJBTUVURVI7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5jbWRzW21zZy0+aWRdLmxvY2spOworCisJc2l6ZSA9IG1zZy0+c2l6ZTsKKwlpZHggPSAwOworCWNtZHMgPSBzaXplIC8gYnVzLT5tX3dNYXhSZXFTaXplOworCWlmIChzaXplICUgYnVzLT5tX3dNYXhSZXFTaXplID09IDApCisJCWNtZHMgLT0gMTsKKworCWNtZF9zZW50ID0gMDsKKworCS8qIFNwbGl0IHRoZSByZXF1ZXN0IGludG8gc21hbGxlciBjaHVua3MgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGNtZHM7IGlkeCsrKSB7CisKKwkJbXNnLT5mbGFncyB8PSBTQUFfQ01ERkxBR19DT05USU5VRTsKKwkJbXNnLT5zaXplID0gYnVzLT5tX3dNYXhSZXFTaXplOworCQl0bXAgPSBidWYgKyBpZHggKiBidXMtPm1fd01heFJlcVNpemU7CisKKwkJcmV0ID0gc2FhNzE2NF9idXNfc2V0KGRldiwgbXNnLCB0bXApOworCQlpZiAocmV0ICE9IFNBQV9PSykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHNldCBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJCQlpZiAoY21kX3NlbnQpIHsKKwkJCQlyZXQgPSBTQUFfRVJSX0JVU1k7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlyZXQgPSBTQUFfRVJSX09WRVJGTE9XOworCQkJZ290byBvdXQ7CisJCX0KKwkJY21kX3NlbnQgPSAxOworCX0KKworCS8qIElmIG5vdCB0aGUgbGFzdCBjb21tYW5kLi4uICovCisJaWYgKGlkeCAhPSAwKQorCQltc2ctPmZsYWdzICY9IH5TQUFfQ01ERkxBR19DT05USU5VRTsKKworCW1zZy0+c2l6ZSA9IHNpemUgLSBpZHggKiBidXMtPm1fd01heFJlcVNpemU7CisKKwlyZXQgPSBzYWE3MTY0X2J1c19zZXQoZGV2LCBtc2csIGJ1ZiArIGlkeCAqIGJ1cy0+bV93TWF4UmVxU2l6ZSk7CisJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHNldCBsYXN0IGZhaWxlZCAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkJaWYgKGNtZF9zZW50KSB7CisJCQlyZXQgPSBTQUFfRVJSX0JVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXQgPSBTQUFfRVJSX09WRVJGTE9XOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gU0FBX09LOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmNtZHNbbXNnLT5pZF0ubG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyogV2FpdCBmb3IgYSBzaWduYWwgZXZlbnQsIHdpdGhvdXQgaG9sZGluZyBhIG11dGV4LiBFaXRoZXIgcmV0dXJuIFRJTUVPVVQgaWYKKyAqIHRoZSBldmVudCBuZXZlciBvY2N1cmVkLCBvciBTQUFfT0sgaWYgaXQgd2FzIHNpZ25hbGVkIGR1cmluZyB0aGUgd2FpdC4KKyAqLworaW50IHNhYTcxNjRfY21kX3dhaXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHNlcW5vKQoreworCXdhaXRfcXVldWVfaGVhZF90ICpxID0gMDsKKwlpbnQgcmV0ID0gU0FBX0JVU19USU1FT1VUOworCXVuc2lnbmVkIGxvbmcgc3RhbXA7CisJaW50IHI7CisKKwlpZiAoZGVidWcgPj0gNCkKKwkJc2FhNzE2NF9idXNfZHVtcChkZXYpOworCisJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoc2Vxbm89JWQpXG4iLCBfX2Z1bmNfXywgc2Vxbm8pOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoKGRldi0+Y21kc1tzZXFub10uaW51c2UgPT0gMSkgJiYKKwkJKGRldi0+Y21kc1tzZXFub10uc2Vxbm8gPT0gc2Vxbm8pKSB7CisJCXEgPSAmZGV2LT5jbWRzW3NlcW5vXS53YWl0OworCX0KKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlpZiAocSkgeworCQkvKiBJZiB3ZSBoYXZlbid0IGJlZW4gc2lnbmFsbGVkIHdlIG5lZWQgdG8gd2FpdCAqLworCQlpZiAoZGV2LT5jbWRzW3NlcW5vXS5zaWduYWxsZWQgPT0gMCkgeworCQkJc3RhbXAgPSBqaWZmaWVzOworCQkJZHByaW50ayhEQkdMVkxfQ01ELAorCQkJCSIlcyhzZXFubz0lZCkgV2FpdGluZyAoc2lnbmFsbGVkPSVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgc2Vxbm8sIGRldi0+Y21kc1tzZXFub10uc2lnbmFsbGVkKTsKKworCQkJLyogV2FpdCBmb3Igc2lnbmFsbGVkIHRvIGJlIGZsYWdnZWQgb3IgdGltZW91dCAqLworCQkJLyogSW4gYSBoaWdobHkgc3RyZXNzZWQgc3lzdGVtIHRoaXMgY2FuIGVhc2lseSBleHRlbmQKKwkJCSAqIGludG8gbXVsdGlwbGUgc2Vjb25kcyBiZWZvcmUgdGhlIGRlZmVycmVkIHdvcmtlcgorCQkJICogaXMgc2NoZWR1bGVkLCBhbmQgd2UncmUgd29rZW4gdXAgdmlhIHNpZ25hbC4KKwkJCSAqIFdlIHR5cGljYWxseSBhcmUgc2lnbmFsbGVkIGluIDwgNTBtcyBidXQgaXQgY2FuCisJCQkgKiB0YWtlIE1VQ0ggbG9uZ2VyLgorCQkJICovCisJCQl3YWl0X2V2ZW50X3RpbWVvdXQoKnEsIGRldi0+Y21kc1tzZXFub10uc2lnbmFsbGVkLCAoSFogKiB3YWl0c2VjcykpOworCQkJciA9IHRpbWVfYmVmb3JlKGppZmZpZXMsIHN0YW1wICsgKEhaICogd2FpdHNlY3MpKTsKKwkJCWlmIChyKQorCQkJCXJldCA9IFNBQV9PSzsKKwkJCWVsc2UKKwkJCQlzYWE3MTY0X2NtZF90aW1lb3V0X3NlcW5vKGRldiwgc2Vxbm8pOworCisJCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcyhzZXFubz0lZCkgV2FpdGluZyByZXMgPSAlZCAiCisJCQkJIihzaWduYWxsZWQ9JWQpXG4iLCBfX2Z1bmNfXywgc2Vxbm8sIHIsCisJCQkJZGV2LT5jbWRzW3NlcW5vXS5zaWduYWxsZWQpOworCQl9IGVsc2UKKwkJCXJldCA9IFNBQV9PSzsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyhzZXFubz0lZCkgc2Vxbm8gaXMgaW52YWxpZFxuIiwKKwkJCV9fZnVuY19fLCBzZXFubyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNhYTcxNjRfY21kX3NpZ25hbChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggc2Vxbm8pCit7CisJaW50IGk7CisJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgU0FBX0NNRF9NQVhfTVNHX1VOSVRTOyBpKyspIHsKKwkJaWYgKGRldi0+Y21kc1tpXS5pbnVzZSA9PSAxKSB7CisJCQlkcHJpbnRrKERCR0xWTF9DTUQsCisJCQkJInNlcW5vICVkIGludXNlLCBzaWcgPSAlZCwgdC9vdXQgPSAlZFxuIiwKKwkJCQlkZXYtPmNtZHNbaV0uc2Vxbm8sCisJCQkJZGV2LT5jbWRzW2ldLnNpZ25hbGxlZCwKKwkJCQlkZXYtPmNtZHNbaV0udGltZW91dCk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgU0FBX0NNRF9NQVhfTVNHX1VOSVRTOyBpKyspIHsKKwkJaWYgKChkZXYtPmNtZHNbaV0uaW51c2UgPT0gMSkgJiYgKChpID09IDApIHx8CisJCQkoZGV2LT5jbWRzW2ldLnNpZ25hbGxlZCkgfHwgKGRldi0+Y21kc1tpXS50aW1lb3V0KSkpIHsKKwkJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKHNlcW5vPSVkKSBjYWxsaW5nIHdha2VfdXBcbiIsCisJCQkJX19mdW5jX18sIGkpOworCQkJZGV2LT5jbWRzW2ldLnNpZ25hbGxlZCA9IDE7CisJCQl3YWtlX3VwKCZkZXYtPmNtZHNbaV0ud2FpdCk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworfQorCitpbnQgc2FhNzE2NF9jbWRfc2VuZChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggaWQsIHRtQ29tUmVzQ21kX3QgY29tbWFuZCwKKwl1MTYgY29udHJvbHNlbGVjdG9yLCB1MTYgc2l6ZSwgdm9pZCAqYnVmKQoreworCXRtQ29tUmVzSW5mb190IGNvbW1hbmRfdCwgKnBjb21tYW5kX3Q7CisJdG1Db21SZXNJbmZvX3QgcmVzcG9uc2VfdCwgKnByZXNwb25zZV90OworCXU4IGVycmRhdGFbMjU2XTsKKwl1MTYgcmVzcF9kc2l6ZTsKKwl1MTYgZGF0YV9yZWNkOworCXUzMiBsb29wOworCWludCByZXQ7CisJaW50IHNhZmV0eSA9IDA7CisKKwlkcHJpbnRrKERCR0xWTF9DTUQsICIlcyh1bml0aWQgPSAlcyAoJWQpICwgY29tbWFuZCA9IDB4JXgsICIKKwkJInNlbCA9IDB4JXgpXG4iLCBfX2Z1bmNfXywgc2FhNzE2NF91bml0aWRfbmFtZShkZXYsIGlkKSwgaWQsCisJCWNvbW1hbmQsIGNvbnRyb2xzZWxlY3Rvcik7CisKKwlpZiAoKHNpemUgPT0gMCkgfHwgKGJ1ZiA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgSW52YWxpZCBwYXJhbVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gU0FBX0VSUl9CQURfUEFSQU1FVEVSOworCX0KKworCS8qIFByZXBhcmUgc29tZSBiYXNpYyBjb21tYW5kL3Jlc3BvbnNlIHN0cnVjdHVyZXMgKi8KKwltZW1zZXQoJmNvbW1hbmRfdCwgMCwgc2l6ZW9mKGNvbW1hbmRfdCkpOworCW1lbXNldCgmcmVzcG9uc2VfdCwgMCwgc2l6ZW9mKCZyZXNwb25zZV90KSk7CisJcGNvbW1hbmRfdCA9ICZjb21tYW5kX3Q7CisJcHJlc3BvbnNlX3QgPSAmcmVzcG9uc2VfdDsKKwljb21tYW5kX3QuaWQgPSBpZDsKKwljb21tYW5kX3QuY29tbWFuZCA9IGNvbW1hbmQ7CisJY29tbWFuZF90LmNvbnRyb2xzZWxlY3RvciA9IGNvbnRyb2xzZWxlY3RvcjsKKwljb21tYW5kX3Quc2l6ZSA9IHNpemU7CisKKwkvKiBBbGxvY2F0ZSBhIHVuaXF1ZSBzZXF1ZW5jZSBudW1iZXIgKi8KKwlyZXQgPSBzYWE3MTY0X2NtZF9hbGxvY19zZXFubyhkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBObyBmcmVlIHNlcXVlbmNlc1xuIiwgX19mdW5jX18pOworCQlyZXQgPSBTQUFfRVJSX05PX1JFU09VUkNFUzsKKwkJZ290byBvdXQ7CisJfQorCisJY29tbWFuZF90LnNlcW5vID0gKHU4KXJldDsKKworCS8qIFNlbmQgQ29tbWFuZCAqLworCXJlc3BfZHNpemUgPSBzaXplOworCXBjb21tYW5kX3QtPnNpemUgPSBzaXplOworCisJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBwY29tbWFuZF90LnNlcW5vID0gJWRcbiIsCisJCV9fZnVuY19fLCBwY29tbWFuZF90LT5zZXFubyk7CisKKwlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIHBjb21tYW5kX3Quc2l6ZSA9ICVkXG4iLAorCQlfX2Z1bmNfXywgcGNvbW1hbmRfdC0+c2l6ZSk7CisKKwlyZXQgPSBzYWE3MTY0X2NtZF9zZXQoZGV2LCBwY29tbWFuZF90LCBidWYpOworCWlmIChyZXQgIT0gU0FBX09LKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBzZXQgY29tbWFuZCBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJCWlmIChyZXQgIT0gU0FBX0VSUl9CVVNZKQorCQkJc2FhNzE2NF9jbWRfZnJlZV9zZXFubyhkZXYsIHBjb21tYW5kX3QtPnNlcW5vKTsKKwkJZWxzZQorCQkJLyogRmxhZyBhIHRpbWVvdXQsIGJlY2F1c2UgYXQgbGVhc3Qgb25lCisJCQkgKiBjb21tYW5kIHdhcyBzZW50ICovCisJCQlzYWE3MTY0X2NtZF90aW1lb3V0X3NlcW5vKGRldiwgcGNvbW1hbmRfdC0+c2Vxbm8pOworCisJCWdvdG8gb3V0OworCX0KKworCS8qIFdpdGggc3BsaXQgcmVzcG9uc2VzIHdlIGhhdmUgdG8gY29sbGVjdCB0aGUgbXNncyBwaWVjZSBieSBwaWVjZSAqLworCWRhdGFfcmVjZCA9IDA7CisJbG9vcCA9IDE7CisJd2hpbGUgKGxvb3ApIHsKKwkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBsb29wXG4iLCBfX2Z1bmNfXyk7CisKKwkJcmV0ID0gc2FhNzE2NF9jbWRfd2FpdChkZXYsIHBjb21tYW5kX3QtPnNlcW5vKTsKKwkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBsb29wIHJldCA9ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCQkvKiBpZiBwb3dlciBpcyBkb3duIGFuZCB0aGlzIGlzIG5vdCBhIHBvd2VyIGNvbW1hbmQgLi4uICovCisKKwkJaWYgKHJldCA9PSBTQUFfQlVTX1RJTUVPVVQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRXZlbnQgdGltZWQgb3V0XG4iKTsKKwkJCXNhYTcxNjRfY21kX3RpbWVvdXRfc2Vxbm8oZGV2LCBwY29tbWFuZF90LT5zZXFubyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic3B1cmlvdXMgZXJyb3JcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCS8qIFBlZWsgcmVzcG9uc2UgKi8KKwkJcmV0ID0gc2FhNzE2NF9idXNfZ2V0KGRldiwgcHJlc3BvbnNlX3QsIE5VTEwsIDEpOworCQlpZiAocmV0ID09IFNBQV9FUlJfRU1QVFkpIHsKKwkJCWRwcmludGsoNCwgIiVzKCkgU0FBX0VSUl9FTVBUWVxuIiwgX19mdW5jX18pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicGVlayBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgcHJlc3BvbnNlX3QtPnNlcW5vID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgcHJlc3BvbnNlX3QtPnNlcW5vKTsKKworCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIHByZXNwb25zZV90LT5mbGFncyA9IDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgcHJlc3BvbnNlX3QtPmZsYWdzKTsKKworCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIHByZXNwb25zZV90LT5zaXplID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgcHJlc3BvbnNlX3QtPnNpemUpOworCisJCS8qIENoZWNrIGlmIHRoZSByZXNwb25zZSB3YXMgZm9yIG91ciBjb21tYW5kICovCisJCWlmIChwcmVzcG9uc2VfdC0+c2Vxbm8gIT0gcGNvbW1hbmRfdC0+c2Vxbm8pIHsKKworCQkJZHByaW50ayhEQkdMVkxfQ01ELAorCQkJCSJ3cm9uZyBldmVudDogc2Vxbm8gPSAlZCwgIgorCQkJCSJleHBlY3RlZCBzZXFubyA9ICVkLCAiCisJCQkJIndpbGwgZGVxdWV1ZSByZWdhcmRsZXNzXG4iLAorCQkJCXByZXNwb25zZV90LT5zZXFubywgcGNvbW1hbmRfdC0+c2Vxbm8pOworCisJCQlyZXQgPSBzYWE3MTY0X2NtZF9kZXF1ZXVlKGRldik7CisJCQlpZiAocmV0ICE9IFNBQV9PSykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZGVxdWV1ZSBmYWlsZWQsIHJldCA9ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCWlmIChzYWZldHkrKyA+IDE2KSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiZGVxdWV1ZSBleGNlZWRlZCwgc2FmZXR5IGV4aXRcbiIpOworCQkJCQlyZXR1cm4gU0FBX0VSUl9CVVNZOworCQkJCX0KKwkJCX0KKworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKHByZXNwb25zZV90LT5mbGFncyAmIFBWQ19SRVNQT05TRUZMQUdfRVJST1IpICE9IDApIHsKKworCQkJbWVtc2V0KCZlcnJkYXRhWzBdLCAwLCBzaXplb2YoZXJyZGF0YSkpOworCisJCQlyZXQgPSBzYWE3MTY0X2J1c19nZXQoZGV2LCBwcmVzcG9uc2VfdCwgJmVycmRhdGFbMF0sIDApOworCQkJaWYgKHJldCAhPSBTQUFfT0spIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImdldCBlcnJvcigyKVxuIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJc2FhNzE2NF9jbWRfZnJlZV9zZXFubyhkZXYsIHBjb21tYW5kX3QtPnNlcW5vKTsKKworCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBlcnJkYXRhICUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkJX19mdW5jX18sIGVycmRhdGFbMF0sIGVycmRhdGFbMV0sIGVycmRhdGFbMl0sCisJCQkJZXJyZGF0YVszXSk7CisKKwkJCS8qIE1hcCBlcnJvciBjb2RlcyAqLworCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBjbWQsIGVycm9yIGNvZGUgID0gMHgleFxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyZGF0YVswXSk7CisKKwkJCXN3aXRjaCAoZXJyZGF0YVswXSkgeworCQkJY2FzZSBQVkNfRVJST1JDT0RFX0lOVkFMSURfQ09NTUFORDoKKwkJCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIElOVkFMSURfQ09NTUFORFxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCXJldCA9IFNBQV9FUlJfSU5WQUxJRF9DT01NQU5EOworCQkJCWJyZWFrOworCQkJY2FzZSBQVkNfRVJST1JDT0RFX0lOVkFMSURfREFUQToKKwkJCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIElOVkFMSURfREFUQVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCXJldCA9IFNBQV9FUlJfQkFEX1BBUkFNRVRFUjsKKwkJCQlicmVhazsKKwkJCWNhc2UgUFZDX0VSUk9SQ09ERV9USU1FT1VUOgorCQkJCWRwcmludGsoREJHTFZMX0NNRCwgIiVzKCkgVElNRU9VVFxuIiwgX19mdW5jX18pOworCQkJCXJldCA9IFNBQV9FUlJfVElNRU9VVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUFZDX0VSUk9SQ09ERV9OQUs6CisJCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBOQUtcbiIsIF9fZnVuY19fKTsKKwkJCQlyZXQgPSBTQUFfRVJSX05VTExfUEFDS0VUOworCQkJCWJyZWFrOworCQkJY2FzZSBQVkNfRVJST1JDT0RFX1VOS05PV046CisJCQljYXNlIFBWQ19FUlJPUkNPREVfSU5WQUxJRF9DT05UUk9MOgorCQkJCWRwcmludGsoREJHTFZMX0NNRCwKKwkJCQkJIiVzKCkgVU5LTk9XTiBPUiBJTlZBTElEIENPTlRST0xcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCWRlZmF1bHQ6CisJCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBVTktOT1dOXG4iLCBfX2Z1bmNfXyk7CisJCQkJcmV0ID0gU0FBX0VSUl9OT1RfU1VQUE9SVEVEOworCQkJfQorCisJCQkvKiBTZWUgb2Ygb3RoZXIgY29tbWFuZHMgYXJlIG9uIHRoZSBidXMgKi8KKwkJCWlmIChzYWE3MTY0X2NtZF9kZXF1ZXVlKGRldikgIT0gU0FBX09LKQorCQkJCXByaW50ayhLRVJOX0VSUiAiZGVxdWV1ZSgyKSBmYWlsZWRcbiIpOworCisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJLyogSWYgcmVzcG9uc2UgaXMgaW52YWxpZCAqLworCQlpZiAoKHByZXNwb25zZV90LT5pZCAhPSBwY29tbWFuZF90LT5pZCkgfHwKKwkJCShwcmVzcG9uc2VfdC0+Y29tbWFuZCAhPSBwY29tbWFuZF90LT5jb21tYW5kKSB8fAorCQkJKHByZXNwb25zZV90LT5jb250cm9sc2VsZWN0b3IgIT0KKwkJCQlwY29tbWFuZF90LT5jb250cm9sc2VsZWN0b3IpIHx8CisJCQkoKChyZXNwX2RzaXplIC0gZGF0YV9yZWNkKSAhPSBwcmVzcG9uc2VfdC0+c2l6ZSkgJiYKKwkJCQkhKHByZXNwb25zZV90LT5mbGFncyAmIFBWQ19DTURGTEFHX0NPTlRJTlVFKSkgfHwKKwkJCSgocmVzcF9kc2l6ZSAtIGRhdGFfcmVjZCkgPCBwcmVzcG9uc2VfdC0+c2l6ZSkpIHsKKworCQkJLyogSW52YWxpZCAqLworCQkJZHByaW50ayhEQkdMVkxfQ01ELCAiJXMoKSBJbnZhbGlkXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSBzYWE3MTY0X2J1c19nZXQoZGV2LCBwcmVzcG9uc2VfdCwgMCwgMCk7CisJCQlpZiAocmV0ICE9IFNBQV9PSykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZ2V0IGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJLyogU2VlIG9mIG90aGVyIGNvbW1hbmRzIGFyZSBvbiB0aGUgYnVzICovCisJCQlpZiAoc2FhNzE2NF9jbWRfZGVxdWV1ZShkZXYpICE9IFNBQV9PSykKKwkJCQlwcmludGsoS0VSTl9FUlIgImRlcXVldWUoMykgZmFpbGVkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogT0ssIG5vdyB3ZSdyZSBhY3R1YWxseSBnZXR0aW5nIG91dCBjb3JyZWN0IHJlc3BvbnNlICovCisJCXJldCA9IHNhYTcxNjRfYnVzX2dldChkZXYsIHByZXNwb25zZV90LCBidWYgKyBkYXRhX3JlY2QsIDApOworCQlpZiAocmV0ICE9IFNBQV9PSykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnZXQgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkYXRhX3JlY2QgPSBwcmVzcG9uc2VfdC0+c2l6ZSArIGRhdGFfcmVjZDsKKwkJaWYgKHJlc3BfZHNpemUgPT0gZGF0YV9yZWNkKSB7CisJCQlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIFJlc3AgcmVjZFxuIiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTZWUgb2Ygb3RoZXIgY29tbWFuZHMgYXJlIG9uIHRoZSBidXMgKi8KKwkJaWYgKHNhYTcxNjRfY21kX2RlcXVldWUoZGV2KSAhPSBTQUFfT0spCisJCQlwcmludGsoS0VSTl9FUlIgImRlcXVldWUoMykgZmFpbGVkXG4iKTsKKworCQljb250aW51ZTsKKworCX0gLyogKGxvb3ApICovCisKKwkvKiBSZWxlYXNlIHRoZSBzZXF1ZW5jZSBudW1iZXIgYWxsb2NhdGlvbiAqLworCXNhYTcxNjRfY21kX2ZyZWVfc2Vxbm8oZGV2LCBwY29tbWFuZF90LT5zZXFubyk7CisKKwkvKiBpZiBwb3dlcmRvd24gc2lnbmFsIGFsbCBwZW5kaW5nIGNvbW1hbmRzICovCisKKwlkcHJpbnRrKERCR0xWTF9DTUQsICIlcygpIENhbGxpbmcgZGVxdWV1ZSB0aGVuIGV4aXRcbiIsIF9fZnVuY19fKTsKKworCS8qIFNlZSBvZiBvdGhlciBjb21tYW5kcyBhcmUgb24gdGhlIGJ1cyAqLworCWlmIChzYWE3MTY0X2NtZF9kZXF1ZXVlKGRldikgIT0gU0FBX09LKQorCQlwcmludGsoS0VSTl9FUlIgImRlcXVldWUoNCkgZmFpbGVkXG4iKTsKKworCXJldCA9IFNBQV9PSzsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBkYmVhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNvcmUuYwpAQCAtMCwwICsxLDc0MCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAic2FhNzE2NC5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgTlhQIFNBQTcxNjQgYmFzZWQgVFYgY2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAgMSBCYXNpYworICAyCisgIDQgaTJjCisgIDggYXBpCisgMTYgY21kCisgMzIgYnVzCisgKi8KKwordW5zaWduZWQgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworCit1bnNpZ25lZCBpbnQgd2FpdHNlY3MgPSAxMDsKK21vZHVsZV9wYXJhbSh3YWl0c2VjcywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJ0aW1lb3V0IG9uIGZpcm13YXJlIG1lc3NhZ2VzIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtdICA9IHtbMCAuLi4gKFNBQTcxNjRfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKK21vZHVsZV9wYXJhbV9hcnJheShjYXJkLCAgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2FyZCwgImNhcmQgdHlwZSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHNhYTcxNjRfZGV2Y291bnQ7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2bGlzdCk7CitMSVNUX0hFQUQoc2FhNzE2NF9kZXZsaXN0KTsKKworI2RlZmluZSBJTlRfU0laRSAxNgorCitzdGF0aWMgdm9pZCBzYWE3MTY0X3dvcmtfY21kaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBjb250YWluZXJfb2Yodywgc3RydWN0IHNhYTcxNjRfZGV2LCB3b3JrY21kKTsKKworCS8qIFdha2UgdXAgYW55IGNvbXBsZXRlIGNvbW1hbmRzICovCisJc2FhNzE2NF9pcnFfZGVxdWV1ZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBzYWE3MTY0X2J1ZmZlcl9kZWxpdmVyKHN0cnVjdCBzYWE3MTY0X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCA9IGJ1Zi0+cG9ydDsKKworCS8qIEZlZWQgdGhlIHRyYW5zcG9ydCBwYXlsb2FkIGludG8gdGhlIGtlcm5lbCBkZW11eCAqLworCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmcG9ydC0+ZHZiLmRlbXV4LCAodTggKilidWYtPmNwdSwKKwkJU0FBNzE2NF9UU19OVU1CRVJfT0ZfTElORVMpOworCit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzYWE3MTY0X2lycV90cyhzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJc3RydWN0IHNhYTcxNjRfYnVmZmVyICpidWY7CisJc3RydWN0IGxpc3RfaGVhZCAqYywgKm47CisJaW50IHdwLCBpID0gMCwgcnA7CisKKwkvKiBGaW5kIHRoZSBjdXJyZW50IHdyaXRlIHBvaW50IGZyb20gdGhlIGhhcmR3YXJlICovCisJd3AgPSBzYWE3MTY0X3JlYWRsKHBvcnQtPmJ1ZmNvdW50ZXIpOworCWlmICh3cCA+IChwb3J0LT5od2NmZy5idWZmZXJjb3VudCAtIDEpKQorCQlCVUcoKTsKKworCS8qIEZpbmQgdGhlIHByZXZpb3VzIGJ1ZmZlciB0byB0aGUgY3VycmVudCB3cml0ZSBwb2ludCAqLworCWlmICh3cCA9PSAwKQorCQlycCA9IDc7CisJZWxzZQorCQlycCA9IHdwIC0gMTsKKworCS8qIExvb2t1cCB0aGUgV1AgaW4gdGhlIGJ1ZmZlciBsaXN0ICovCisJLyogVE9ETzogdHVybiB0aGlzIGludG8gYSB3b3JrZXIgdGhyZWFkICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGMsIG4sICZwb3J0LT5kbWFxdWV1ZS5saXN0KSB7CisJCWJ1ZiA9IGxpc3RfZW50cnkoYywgc3RydWN0IHNhYTcxNjRfYnVmZmVyLCBsaXN0KTsKKwkJaWYgKGkrKyA+IHBvcnQtPmh3Y2ZnLmJ1ZmZlcmNvdW50KQorCQkJQlVHKCk7CisKKwkJaWYgKGJ1Zi0+bnIgPT0gcnApIHsKKwkJCS8qIEZvdW5kIHRoZSBidWZmZXIsIGRlYWwgd2l0aCBpdCAqLworCQkJZHByaW50ayhEQkdMVkxfSVJRLCAiJXMoKSB3cDogJWQgcHJvY2Vzc2luZzogJWRcbiIsCisJCQkJX19mdW5jX18sIHdwLCBycCk7CisJCQlzYWE3MTY0X2J1ZmZlcl9kZWxpdmVyKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCisJfQorCXJldHVybiAwOworfQorCisvKiBQcmltYXJ5IElSUSBoYW5kbGVyIGFuZCBkaXNwYXRjaCBtZWNoYW5pc20gKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzYWE3MTY0X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBkZXZfaWQ7CisJdTMyIGludGlkLCBpbnRzdGF0W0lOVF9TSVpFLzRdOworCWludCBpLCBoYW5kbGVkID0gMCwgYml0OworCisJaWYgKGRldiA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBObyBkZXZpY2Ugc3BlY2lmaWVkXG4iLCBfX2Z1bmNfXyk7CisJCWhhbmRsZWQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZSBoYXJkd2FyZSBpcyBhY2Nlc3NhYmxlLiBJZiB0aGUgc3RhdHVzIGJ5dGVzIGFyZQorCSAqIDB4RkYgdGhlbiB0aGUgZGV2aWNlIGlzIG5vdCBhY2Nlc3NhYmxlLCB0aGUgdGhlIElSUSBiZWxvbmdzCisJICogdG8gYW5vdGhlciBkcml2ZXIuCisJICogNCB4IHUzMiBpbnRlcnJ1cHQgcmVnaXN0ZXJzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBJTlRfU0laRS80OyBpKyspIHsKKworCQkvKiBUT0RPOiBDb252ZXJ0IGludG8gc2FhNzE2NF9yZWFkbCgpICovCisJCS8qIFJlYWQgdGhlIDQgaGFyZHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVycyAqLworCQlpbnRzdGF0W2ldID0gc2FhNzE2NF9yZWFkbChkZXYtPmludF9zdGF0dXMgKyAoaSAqIDQpKTsKKworCQlpZiAoaW50c3RhdFtpXSkKKwkJCWhhbmRsZWQgPSAxOworCX0KKwlpZiAoaGFuZGxlZCA9PSAwKQorCQlnb3RvIG91dDsKKworCS8qIEZvciBlYWNoIG9mIHRoZSBIVyBpbnRlcnJ1cHQgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IElOVF9TSVpFLzQ7IGkrKykgeworCisJCWlmIChpbnRzdGF0W2ldKSB7CisJCQkvKiBFYWNoIGZ1bmN0aW9uIG9mIHRoZSBib2FyZCBoYXMgaXQncyBvd24gaW50ZXJydXB0aWQuCisJCQkgKiBGaW5kIHRoZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGVuIGNhbGwKKwkJCSAqIGl0J3MgaGFuZGxlci4KKwkJCSAqLworCQkJZm9yIChiaXQgPSAwOyBiaXQgPCAzMjsgYml0KyspIHsKKworCQkJCWlmICgoKGludHN0YXRbaV0gPj4gYml0KSAmIDB4MDAwMDAwMDEpID09IDApCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogQ2FsY3VsYXRlIHRoZSBpbnRlcnJ1cHQgaWQgKDB4MDAgdG8gMHg3ZikgKi8KKworCQkJCWludGlkID0gKGkgKiAzMikgKyBiaXQ7CisJCQkJaWYgKGludGlkID09IGRldi0+aW50ZmRlc2MuYkludGVycnVwdElkKSB7CisJCQkJCS8qIEEgcmVzcG9uc2UgdG8gYW4gY21kL2FwaSBjYWxsICovCisJCQkJCXNjaGVkdWxlX3dvcmsoJmRldi0+d29ya2NtZCk7CisJCQkJfSBlbHNlIGlmIChpbnRpZCA9PQorCQkJCQlkZXYtPnRzMS5od2NmZy5pbnRlcnJ1cHRpZCkgeworCisJCQkJCS8qIFRyYW5zcG9ydCBwYXRoIDEgKi8KKwkJCQkJc2FhNzE2NF9pcnFfdHMoJmRldi0+dHMxKTsKKworCQkJCX0gZWxzZSBpZiAoaW50aWQgPT0KKwkJCQkJZGV2LT50czIuaHdjZmcuaW50ZXJydXB0aWQpIHsKKworCQkJCQkvKiBUcmFuc3BvcnQgcGF0aCAyICovCisJCQkJCXNhYTcxNjRfaXJxX3RzKCZkZXYtPnRzMik7CisKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBGaW5kIHRoZSBmdW5jdGlvbiAqLworCQkJCQlkcHJpbnRrKERCR0xWTF9JUlEsCisJCQkJCQkiJXMoKSB1bmhhbmRsZWQgaW50ZXJydXB0ICIKKwkJCQkJCSJyZWcgMHgleCBiaXQgMHgleCAiCisJCQkJCQkiaW50aWQgPSAweCV4XG4iLAorCQkJCQkJX19mdW5jX18sIGksIGJpdCwgaW50aWQpOworCQkJCX0KKwkJCX0KKworCQkJLyogQWNrIGl0ICovCisJCQlzYWE3MTY0X3dyaXRlbChkZXYtPmludF9hY2sgKyAoaSAqIDQpLCBpbnRzdGF0W2ldKTsKKworCQl9CisJfQorb3V0OgorCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCit2b2lkIHNhYTcxNjRfZ2V0ZmlybXdhcmVzdGF0dXMoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJc3RydWN0IHNhYTcxNjRfZndfc3RhdHVzICpzID0gJmRldi0+Zndfc3RhdHVzOworCisJZGV2LT5md19zdGF0dXMuc3RhdHVzID0gc2FhNzE2NF9yZWFkbChTQUFfREVWSUNFX1NZU0lOSVRfU1RBVFVTKTsKKwlkZXYtPmZ3X3N0YXR1cy5tb2RlID0gc2FhNzE2NF9yZWFkbChTQUFfREVWSUNFX1NZU0lOSVRfTU9ERSk7CisJZGV2LT5md19zdGF0dXMuc3BlYyA9IHNhYTcxNjRfcmVhZGwoU0FBX0RFVklDRV9TWVNJTklUX1NQRUMpOworCWRldi0+Zndfc3RhdHVzLmluc3QgPSBzYWE3MTY0X3JlYWRsKFNBQV9ERVZJQ0VfU1lTSU5JVF9JTlNUKTsKKwlkZXYtPmZ3X3N0YXR1cy5jcHVsb2FkID0gc2FhNzE2NF9yZWFkbChTQUFfREVWSUNFX1NZU0lOSVRfQ1BVTE9BRCk7CisJZGV2LT5md19zdGF0dXMucmVtYWluaGVhcCA9CisJCXNhYTcxNjRfcmVhZGwoU0FBX0RFVklDRV9TWVNJTklUX1JFTUFJTkhFQVApOworCisJZHByaW50aygxLCAiRmlybXdhcmUgc3RhdHVzOlxuIik7CisJZHByaW50aygxLCAiIC5zdGF0dXMgICAgID0gMHglMDh4XG4iLCBzLT5zdGF0dXMpOworCWRwcmludGsoMSwgIiAubW9kZSAgICAgICA9IDB4JTA4eFxuIiwgcy0+bW9kZSk7CisJZHByaW50aygxLCAiIC5zcGVjICAgICAgID0gMHglMDh4XG4iLCBzLT5zcGVjKTsKKwlkcHJpbnRrKDEsICIgLmluc3QgICAgICAgPSAweCUwOHhcbiIsIHMtPmluc3QpOworCWRwcmludGsoMSwgIiAuY3B1bG9hZCAgICA9IDB4JTA4eFxuIiwgcy0+Y3B1bG9hZCk7CisJZHByaW50aygxLCAiIC5yZW1haW5oZWFwID0gMHglMDh4XG4iLCBzLT5yZW1haW5oZWFwKTsKK30KKwordTMyIHNhYTcxNjRfZ2V0Y3VycmVudGZpcm13YXJldmVyc2lvbihzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwl1MzIgcmVnOworCisJcmVnID0gc2FhNzE2NF9yZWFkbChTQUFfREVWSUNFX1ZFUlNJT04pOworCWRwcmludGsoMSwgIkRldmljZSBydW5uaW5nIGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQuJWQgKDB4JXgpXG4iLAorCQkocmVnICYgMHgwMDAwZmMwMCkgPj4gMTAsCisJCShyZWcgJiAweDAwMDAwM2UwKSA+PiA1LAorCQkocmVnICYgMHgwMDAwMDAxZiksCisJCShyZWcgJiAweGZmZmYwMDAwKSA+PiAxNiwKKwkJcmVnKTsKKworCXJldHVybiByZWc7Cit9CisKKy8qIFRPRE86IERlYnVnZ2luZyBmdW5jLCByZW1vdmUgKi8KK3ZvaWQgc2FhNzE2NF9kdW1waGV4MTYoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4ICpidWYsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9JTkZPICItLS0tLS0tLS0tLS0tLS0tLS0tLT4gIgorCQkiMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMDggMDkgMGEgMGIgMGMgMGQgMGUgMGZcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAxNikKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICAgWzB4JTA4eF0gIgorCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCisJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBpLAorCQkqKGJ1ZitpKzApLCAqKGJ1ZitpKzEpLCAqKGJ1ZitpKzIpLCAqKGJ1ZitpKzMpLAorCQkqKGJ1ZitpKzQpLCAqKGJ1ZitpKzUpLCAqKGJ1ZitpKzYpLCAqKGJ1ZitpKzcpLAorCQkqKGJ1ZitpKzgpLCAqKGJ1ZitpKzkpLCAqKGJ1ZitpKzEwKSwgKihidWYraSsxMSksCisJCSooYnVmK2krMTIpLCAqKGJ1ZitpKzEzKSwgKihidWYraSsxNCksICooYnVmK2krMTUpKTsKK30KKworLyogVE9ETzogRGVidWdnaW5nIGZ1bmMsIHJlbW92ZSAqLwordm9pZCBzYWE3MTY0X2R1bXByZWdzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1MzIgYWRkcikKK3sKKwlpbnQgaTsKKworCWRwcmludGsoMSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tPiAiCisJCSIwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMHgxMDA7IGkgKz0gMTYpCisJCWRwcmludGsoMSwgInJlZ2lvbjBbMHglMDh4XSA9ICIKKwkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgaSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgMCksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDEpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyAyKSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgMyksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDQpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyA1KSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgNiksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDcpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyA4KSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgOSksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDEwKSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgMTEpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyAxMiksCisJCQkodTgpc2FhNzE2NF9yZWFkYihhZGRyICsgaSArIDEzKSwKKwkJCSh1OClzYWE3MTY0X3JlYWRiKGFkZHIgKyBpICsgMTQpLAorCQkJKHU4KXNhYTcxNjRfcmVhZGIoYWRkciArIGkgKyAxNSkKKwkJCSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxNjRfZHVtcF9od2Rlc2Moc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJZHByaW50aygxLCAiQDB4JXAgaHdkZXNjIHNpemVvZih0bUNvbVJlc0hXRGVzY3JfdCkgPSAlZCBieXRlc1xuIiwKKwkJJmRldi0+aHdkZXNjLCAodTMyKXNpemVvZih0bUNvbVJlc0hXRGVzY3JfdCkpOworCisJZHByaW50aygxLCAiIC5iTGVuZ3RoID0gMHgleFxuIiwgZGV2LT5od2Rlc2MuYkxlbmd0aCk7CisJZHByaW50aygxLCAiIC5iRGVzY3JpcHRvclR5cGUgPSAweCV4XG4iLCBkZXYtPmh3ZGVzYy5iRGVzY3JpcHRvclR5cGUpOworCWRwcmludGsoMSwgIiAuYkRlc2NyaXB0b3JTdWJ0eXBlID0gMHgleFxuIiwKKwkJZGV2LT5od2Rlc2MuYkRlc2NyaXB0b3JTdWJ0eXBlKTsKKworCWRwcmludGsoMSwgIiAuYmNkU3BlY1ZlcnNpb24gPSAweCV4XG4iLCBkZXYtPmh3ZGVzYy5iY2RTcGVjVmVyc2lvbik7CisJZHByaW50aygxLCAiIC5kd0Nsb2NrRnJlcXVlbmN5ID0gMHgleFxuIiwgZGV2LT5od2Rlc2MuZHdDbG9ja0ZyZXF1ZW5jeSk7CisJZHByaW50aygxLCAiIC5kd0Nsb2NrVXBkYXRlUmVzID0gMHgleFxuIiwgZGV2LT5od2Rlc2MuZHdDbG9ja1VwZGF0ZVJlcyk7CisJZHByaW50aygxLCAiIC5iQ2FwYWJpbGl0aWVzID0gMHgleFxuIiwgZGV2LT5od2Rlc2MuYkNhcGFiaWxpdGllcyk7CisJZHByaW50aygxLCAiIC5kd0RldmljZVJlZ2lzdGVyc0xvY2F0aW9uID0gMHgleFxuIiwKKwkJZGV2LT5od2Rlc2MuZHdEZXZpY2VSZWdpc3RlcnNMb2NhdGlvbik7CisKKwlkcHJpbnRrKDEsICIgLmR3SG9zdE1lbW9yeVJlZ2lvbiA9IDB4JXhcbiIsCisJCWRldi0+aHdkZXNjLmR3SG9zdE1lbW9yeVJlZ2lvbik7CisKKwlkcHJpbnRrKDEsICIgLmR3SG9zdE1lbW9yeVJlZ2lvblNpemUgPSAweCV4XG4iLAorCQlkZXYtPmh3ZGVzYy5kd0hvc3RNZW1vcnlSZWdpb25TaXplKTsKKworCWRwcmludGsoMSwgIiAuZHdIb3N0SGliZXJuYXRNZW1SZWdpb24gPSAweCV4XG4iLAorCQlkZXYtPmh3ZGVzYy5kd0hvc3RIaWJlcm5hdE1lbVJlZ2lvbik7CisKKwlkcHJpbnRrKDEsICIgLmR3SG9zdEhpYmVybmF0TWVtUmVnaW9uU2l6ZSA9IDB4JXhcbiIsCisJCWRldi0+aHdkZXNjLmR3SG9zdEhpYmVybmF0TWVtUmVnaW9uU2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxNjRfZHVtcF9pbnRmZGVzYyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlkcHJpbnRrKDEsICJAMHglcCBpbnRmZGVzYyAiCisJCSJzaXplb2YodG1Db21SZXNJbnRlcmZhY2VEZXNjcl90KSA9ICVkIGJ5dGVzXG4iLAorCQkmZGV2LT5pbnRmZGVzYywgKHUzMilzaXplb2YodG1Db21SZXNJbnRlcmZhY2VEZXNjcl90KSk7CisKKwlkcHJpbnRrKDEsICIgLmJMZW5ndGggPSAweCV4XG4iLCBkZXYtPmludGZkZXNjLmJMZW5ndGgpOworCWRwcmludGsoMSwgIiAuYkRlc2NyaXB0b3JUeXBlID0gMHgleFxuIiwgZGV2LT5pbnRmZGVzYy5iRGVzY3JpcHRvclR5cGUpOworCWRwcmludGsoMSwgIiAuYkRlc2NyaXB0b3JTdWJ0eXBlID0gMHgleFxuIiwKKwkJZGV2LT5pbnRmZGVzYy5iRGVzY3JpcHRvclN1YnR5cGUpOworCisJZHByaW50aygxLCAiIC5iRmxhZ3MgPSAweCV4XG4iLCBkZXYtPmludGZkZXNjLmJGbGFncyk7CisJZHByaW50aygxLCAiIC5iSW50ZXJmYWNlVHlwZSA9IDB4JXhcbiIsIGRldi0+aW50ZmRlc2MuYkludGVyZmFjZVR5cGUpOworCWRwcmludGsoMSwgIiAuYkludGVyZmFjZUlkID0gMHgleFxuIiwgZGV2LT5pbnRmZGVzYy5iSW50ZXJmYWNlSWQpOworCWRwcmludGsoMSwgIiAuYkJhc2VJbnRlcmZhY2UgPSAweCV4XG4iLCBkZXYtPmludGZkZXNjLmJCYXNlSW50ZXJmYWNlKTsKKwlkcHJpbnRrKDEsICIgLmJJbnRlcnJ1cHRJZCA9IDB4JXhcbiIsIGRldi0+aW50ZmRlc2MuYkludGVycnVwdElkKTsKKwlkcHJpbnRrKDEsICIgLmJEZWJ1Z0ludGVycnVwdElkID0gMHgleFxuIiwKKwkJZGV2LT5pbnRmZGVzYy5iRGVidWdJbnRlcnJ1cHRJZCk7CisKKwlkcHJpbnRrKDEsICIgLkJBUkxvY2F0aW9uID0gMHgleFxuIiwgZGV2LT5pbnRmZGVzYy5CQVJMb2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxNjRfZHVtcF9idXNkZXNjKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCWRwcmludGsoMSwgIkAweCVwIGJ1c2Rlc2Mgc2l6ZW9mKHRtQ29tUmVzQnVzRGVzY3JfdCkgPSAlZCBieXRlc1xuIiwKKwkJJmRldi0+YnVzZGVzYywgKHUzMilzaXplb2YodG1Db21SZXNCdXNEZXNjcl90KSk7CisKKwlkcHJpbnRrKDEsICIgLkNvbW1hbmRSaW5nICAgPSAweCUwMTZMeFxuIiwgZGV2LT5idXNkZXNjLkNvbW1hbmRSaW5nKTsKKwlkcHJpbnRrKDEsICIgLlJlc3BvbnNlUmluZyAgPSAweCUwMTZMeFxuIiwgZGV2LT5idXNkZXNjLlJlc3BvbnNlUmluZyk7CisJZHByaW50aygxLCAiIC5Db21tYW5kV3JpdGUgID0gMHgleFxuIiwgZGV2LT5idXNkZXNjLkNvbW1hbmRXcml0ZSk7CisJZHByaW50aygxLCAiIC5Db21tYW5kUmVhZCAgID0gMHgleFxuIiwgZGV2LT5idXNkZXNjLkNvbW1hbmRSZWFkKTsKKwlkcHJpbnRrKDEsICIgLlJlc3BvbnNlV3JpdGUgPSAweCV4XG4iLCBkZXYtPmJ1c2Rlc2MuUmVzcG9uc2VXcml0ZSk7CisJZHByaW50aygxLCAiIC5SZXNwb25zZVJlYWQgID0gMHgleFxuIiwgZGV2LT5idXNkZXNjLlJlc3BvbnNlUmVhZCk7Cit9CisKKy8qIE11Y2ggb2YgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gYW5kIFBDSSByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQKKyAqIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiBmaXJtd2FyZS4gV2UgaGF2ZSB0byBjYWNoZSBzb21lIGluaXRpYWwKKyAqIHN0cnVjdHVyZXMgdGhlbiB1c2UgdGhlc2UgdG8gbG9jYXRlIG90aGVyIGltcG9ydGFudCBzdHJ1Y3R1cmVzCisgKiBmcm9tIFBDSSBzcGFjZS4KKyAqLworc3RhdGljIHZvaWQgc2FhNzE2NF9nZXRfZGVzY3JpcHRvcnMoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpCit7CisJbWVtY3B5KCZkZXYtPmh3ZGVzYywgZGV2LT5ibW1pbywgc2l6ZW9mKHRtQ29tUmVzSFdEZXNjcl90KSk7CisJbWVtY3B5KCZkZXYtPmludGZkZXNjLCBkZXYtPmJtbWlvICsgc2l6ZW9mKHRtQ29tUmVzSFdEZXNjcl90KSwKKwkJc2l6ZW9mKHRtQ29tUmVzSW50ZXJmYWNlRGVzY3JfdCkpOworCW1lbWNweSgmZGV2LT5idXNkZXNjLCBkZXYtPmJtbWlvICsgZGV2LT5pbnRmZGVzYy5CQVJMb2NhdGlvbiwKKwkJc2l6ZW9mKHRtQ29tUmVzQnVzRGVzY3JfdCkpOworCisJaWYgKGRldi0+aHdkZXNjLmJMZW5ndGggIT0gc2l6ZW9mKHRtQ29tUmVzSFdEZXNjcl90KSkgeworCQlwcmludGsoS0VSTl9FUlIgIlN0cnVjdHVyZSB0bUNvbVJlc0hXRGVzY3JfdCBpcyBtYW5nbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJOZWVkICV4IGdvdCAlZFxuIiwgZGV2LT5od2Rlc2MuYkxlbmd0aCwKKwkJCSh1MzIpc2l6ZW9mKHRtQ29tUmVzSFdEZXNjcl90KSk7CisJfSBlbHNlCisJCXNhYTcxNjRfZHVtcF9od2Rlc2MoZGV2KTsKKworCWlmIChkZXYtPmludGZkZXNjLmJMZW5ndGggIT0gc2l6ZW9mKHRtQ29tUmVzSW50ZXJmYWNlRGVzY3JfdCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzdHJ1Y3QgdG1Db21SZXNJbnRlcmZhY2VEZXNjcl90IGlzIG1hbmdsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5lZWQgJXggZ290ICVkXG4iLCBkZXYtPmludGZkZXNjLmJMZW5ndGgsCisJCQkodTMyKXNpemVvZih0bUNvbVJlc0ludGVyZmFjZURlc2NyX3QpKTsKKwl9IGVsc2UKKwkJc2FhNzE2NF9kdW1wX2ludGZkZXNjKGRldik7CisKKwlzYWE3MTY0X2R1bXBfYnVzZGVzYyhkZXYpOworfQorCitzdGF0aWMgaW50IHNhYTcxNjRfcGNpX3F1aXJrcyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcmVzb3VyY2VzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KQoreworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCksIGRldi0+bmFtZSkpIHsKKworCQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMiksCisJCQlwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAyKSwgZGV2LT5uYW1lKSkKKwkJCXJldHVybiAwOworCX0KKworCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBNTUlPIG1lbW9yeSBAIDB4JWxseCBvciAweCVsbHhcbiIsCisJCWRldi0+bmFtZSwKKwkJKHU2NClwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApLAorCQkodTY0KXBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMikpOworCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCBzYWE3MTY0X2Rldl9zZXR1cChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlpbnQgaTsKKworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisJYXRvbWljX2luYygmZGV2LT5yZWZjb3VudCk7CisJZGV2LT5uciA9IHNhYTcxNjRfZGV2Y291bnQrKzsKKworCXNwcmludGYoZGV2LT5uYW1lLCAic2FhNzE2NFslZF0iLCBkZXYtPm5yKTsKKworCW11dGV4X2xvY2soJmRldmxpc3QpOworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwgJnNhYTcxNjRfZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKKworCS8qIGJvYXJkIGNvbmZpZyAqLworCWRldi0+Ym9hcmQgPSBVTlNFVDsKKwlpZiAoY2FyZFtkZXYtPm5yXSA8IHNhYTcxNjRfYmNvdW50KQorCQlkZXYtPmJvYXJkID0gY2FyZFtkZXYtPm5yXTsKKworCWZvciAoaSA9IDA7IFVOU0VUID09IGRldi0+Ym9hcmQgICYmICBpIDwgc2FhNzE2NF9pZGNvdW50OyBpKyspCisJCWlmIChkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciA9PSBzYWE3MTY0X3N1Ymlkc1tpXS5zdWJ2ZW5kb3IgJiYKKwkJCWRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlID09CisJCQkJc2FhNzE2NF9zdWJpZHNbaV0uc3ViZGV2aWNlKQorCQkJCWRldi0+Ym9hcmQgPSBzYWE3MTY0X3N1Ymlkc1tpXS5jYXJkOworCisJaWYgKFVOU0VUID09IGRldi0+Ym9hcmQpIHsKKwkJZGV2LT5ib2FyZCA9IFNBQTcxNjRfQk9BUkRfVU5LTk9XTjsKKwkJc2FhNzE2NF9jYXJkX2xpc3QoZGV2KTsKKwl9CisKKwlkZXYtPnBjaV9idXMgID0gZGV2LT5wY2ktPmJ1cy0+bnVtYmVyOworCWRldi0+cGNpX3Nsb3QgPSBQQ0lfU0xPVChkZXYtPnBjaS0+ZGV2Zm4pOworCisJLyogSTJDIERlZmF1bHRzIC8gc2V0dXAgKi8KKwlkZXYtPmkyY19idXNbMF0uZGV2ID0gZGV2OworCWRldi0+aTJjX2J1c1swXS5uciA9IDA7CisJZGV2LT5pMmNfYnVzWzFdLmRldiA9IGRldjsKKwlkZXYtPmkyY19idXNbMV0ubnIgPSAxOworCWRldi0+aTJjX2J1c1syXS5kZXYgPSBkZXY7CisJZGV2LT5pMmNfYnVzWzJdLm5yID0gMjsKKworCS8qIFRyYW5zcG9ydCBwb3J0IEEgRGVmYXVsdHMgLyBzZXR1cCAqLworCWRldi0+dHMxLmRldiA9IGRldjsKKwlkZXYtPnRzMS5uciA9IDA7CisJbXV0ZXhfaW5pdCgmZGV2LT50czEuZHZiLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnRzMS5kbWFxdWV1ZS5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT50czEuZHVtbXlfZG1hcXVldWUubGlzdCk7CisJbXV0ZXhfaW5pdCgmZGV2LT50czEuZG1hcXVldWVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGV2LT50czEuZHVtbXlfZG1hcXVldWVfbG9jayk7CisKKwkvKiBUcmFuc3BvcnQgcG9ydCBCIERlZmF1bHRzIC8gc2V0dXAgKi8KKwlkZXYtPnRzMi5kZXYgPSBkZXY7CisJZGV2LT50czIubnIgPSAxOworCW11dGV4X2luaXQoJmRldi0+dHMyLmR2Yi5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT50czIuZG1hcXVldWUubGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dHMyLmR1bW15X2RtYXF1ZXVlLmxpc3QpOworCW11dGV4X2luaXQoJmRldi0+dHMyLmRtYXF1ZXVlX2xvY2spOworCW11dGV4X2luaXQoJmRldi0+dHMyLmR1bW15X2RtYXF1ZXVlX2xvY2spOworCisJaWYgKGdldF9yZXNvdXJjZXMoZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDT1JFICVzIE5vIG1vcmUgUENJZSByZXNvdXJjZXMgZm9yICIKKwkJICAgICAgICJzdWJzeXN0ZW06ICUwNHg6JTA0eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCisJCSAgICAgICBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CisKKwkJc2FhNzE2NF9kZXZjb3VudC0tOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBQQ0kvZSBhbGxvY2F0aW9ucyAqLworCWRldi0+bG1taW8gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApKTsKKworCWRldi0+bG1taW8yID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDIpLAorCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAyKSk7CisKKwlkZXYtPmJtbWlvID0gKHU4IF9faW9tZW0gKilkZXYtPmxtbWlvOworCWRldi0+Ym1taW8yID0gKHU4IF9faW9tZW0gKilkZXYtPmxtbWlvMjsKKworCS8qIEluZXJydXB0IGFuZCBhY2sgcmVnaXN0ZXIgbG9jYXRpb25zIG9mZnNldCBvZiBibW1pbyAqLworCWRldi0+aW50X3N0YXR1cyA9IDB4MTgzMDAwICsgMHhmODA7CisJZGV2LT5pbnRfYWNrID0gMHgxODMwMDAgKyAweGY5MDsKKworCXByaW50ayhLRVJOX0lORk8KKwkJIkNPUkUgJXM6IHN1YnN5c3RlbTogJTA0eDolMDR4LCBib2FyZDogJXMgW2NhcmQ9JWQsJXNdXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAorCSAgICAgICBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSwgc2FhNzE2NF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwKKwkgICAgICAgZGV2LT5ib2FyZCwgY2FyZFtkZXYtPm5yXSA9PSBkZXYtPmJvYXJkID8KKwkgICAgICAgImluc21vZCBvcHRpb24iIDogImF1dG9kZXRlY3RlZCIpOworCisJc2FhNzE2NF9wY2lfcXVpcmtzKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2FhNzE2NF9kZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCkpOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMiksCisJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDIpKTsKKworCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5yZWZjb3VudCkpCisJCXJldHVybjsKKworCWlvdW5tYXAoZGV2LT5sbW1pbyk7CisJaW91bm1hcChkZXYtPmxtbWlvMik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNhYTcxNjRfaW5pdGRldihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXY7CisJaW50IGVyciwgaTsKKwl1MzIgdmVyc2lvbjsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcGNpIGluaXQgKi8KKwlkZXYtPnBjaSA9IHBjaV9kZXY7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9mcmVlOworCX0KKworCWlmIChzYWE3MTY0X2Rldl9zZXR1cChkZXYpIDwgMCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxfZnJlZTsKKwl9CisKKwkvKiBwcmludCBwY2kgaW5mbyAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmRldi0+cGNpX3Jldik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICAmZGV2LT5wY2lfbGF0KTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8wOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgorCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWxseFxuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSwgZGV2LT5wY2lfcmV2LCBwY2lfZGV2LT5pcnEsCisJICAgICAgIGRldi0+cGNpX2xhdCwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCkpOworCisJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7CisJLyogVE9ETyAqLworCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgMHhmZmZmZmZmZikpIHsKKwkJcHJpbnRrKCIlcy8wOiBPb3BzOiBubyAzMmJpdCBQQ0kgRE1BID8/P1xuIiwgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBmYWlsX2lycTsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycShwY2lfZGV2LT5pcnEsIHNhYTcxNjRfaXJxLAorCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJCQlwY2lfZGV2LT5pcnEpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWxfaXJxOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBkZXYpOworCisJLyogSW5pdCB0aGUgaW50ZXJuYWwgY29tbWFuZCBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IFNBQV9DTURfTUFYX01TR19VTklUUzsgaSsrKSB7CisJCWRldi0+Y21kc1tpXS5zZXFubyA9IGk7CisJCWRldi0+Y21kc1tpXS5pbnVzZSA9IDA7CisJCW11dGV4X2luaXQoJmRldi0+Y21kc1tpXS5sb2NrKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5jbWRzW2ldLndhaXQpOworCX0KKworCS8qIFdlIG5lZWQgYSBkZWZlcnJlZCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgY21kIGhhbmRsaW5nICovCisJSU5JVF9XT1JLKCZkZXYtPndvcmtjbWQsIHNhYTcxNjRfd29ya19jbWRoYW5kbGVyKTsKKworCS8qIE9ubHkgbG9hZCB0aGUgZmlybXdhcmUgaWYgd2Uga25vdyB0aGUgYm9hcmQgKi8KKwlpZiAoZGV2LT5ib2FyZCAhPSBTQUE3MTY0X0JPQVJEX1VOS05PV04pIHsKKworCQllcnIgPSBzYWE3MTY0X2Rvd25sb2FkZmlybXdhcmUoZGV2KTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJGYWlsZWQgdG8gYm9vdCBmaXJtd2FyZSwgbm8gZmVhdHVyZXMgIgorCQkJCSJyZWdpc3RlcmVkXG4iKTsKKwkJCWdvdG8gZmFpbF9mdzsKKwkJfQorCisJCXNhYTcxNjRfZ2V0X2Rlc2NyaXB0b3JzKGRldik7CisJCXNhYTcxNjRfZHVtcHJlZ3MoZGV2LCAwKTsKKwkJc2FhNzE2NF9nZXRjdXJyZW50ZmlybXdhcmV2ZXJzaW9uKGRldik7CisJCXNhYTcxNjRfZ2V0ZmlybXdhcmVzdGF0dXMoZGV2KTsKKwkJZXJyID0gc2FhNzE2NF9idXNfc2V0dXAoZGV2KTsKKwkJaWYgKGVyciA8IDApCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiRmFpbGVkIHRvIHNldHVwIHRoZSBidXMsIHdpbGwgY29udGludWVcbiIpOworCQlzYWE3MTY0X2J1c19kdW1wKGRldik7CisKKwkJLyogUGluZyB0aGUgcnVubmluZyBmaXJtd2FyZSB2aWEgdGhlIGNvbW1hbmQgYnVzIGFuZCBnZXQgdGhlCisJCSAqIGZpcm13YXJlIHZlcnNpb24sIHRoaXMgY2hlY2tzIHRoZSBidXMgaXMgcnVubmluZyBPSy4KKwkJICovCisJCXZlcnNpb24gPSAwOworCQlpZiAoc2FhNzE2NF9hcGlfZ2V0X2Z3X3ZlcnNpb24oZGV2LCAmdmVyc2lvbikgPT0gU0FBX09LKQorCQkJZHByaW50aygxLCAiQnVzIGlzIG9wZXJhdGluZyBjb3JyZWN0bHkgdXNpbmcgIgorCQkJCSJ2ZXJzaW9uICVkLiVkLiVkLiVkICgweCV4KVxuIiwKKwkJCQkodmVyc2lvbiAmIDB4MDAwMGZjMDApID4+IDEwLAorCQkJCSh2ZXJzaW9uICYgMHgwMDAwMDNlMCkgPj4gNSwKKwkJCQkodmVyc2lvbiAmIDB4MDAwMDAwMWYpLAorCQkJCSh2ZXJzaW9uICYgMHhmZmZmMDAwMCkgPj4gMTYsCisJCQkJdmVyc2lvbik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmVcbiIpOworCisJCS8qIEJyaW5nIHVwIHRoZSBJMkMgYnVzZXMgKi8KKwkJc2FhNzE2NF9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1swXSk7CisJCXNhYTcxNjRfaTJjX3JlZ2lzdGVyKCZkZXYtPmkyY19idXNbMV0pOworCQlzYWE3MTY0X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzJdKTsKKwkJc2FhNzE2NF9ncGlvX3NldHVwKGRldik7CisJCXNhYTcxNjRfY2FyZF9zZXR1cChkZXYpOworCisKKwkJLyogUGFyc2UgdGhlIGR5bmFtaWMgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGZpbmQgdmFyaW91cworCQkgKiBtZWRpYSBlbmRwb2ludHMgKE1QRUcsIFdNViwgUFMsIFRTKSBhbmQgY2FjaGUgdGhlaXIKKwkJICogY29uZmlndXJhdGlvbiBkZXRhaWxzIGludG8gdGhlIGRyaXZlciwgc28gd2UgY2FuCisJCSAqIHJlZmVyZW5jZSB0aGVtIGxhdGVyIGR1cmluZyBzaW1ldGhpbmdfcmVnaXN0ZXIoKSBmdW5jLAorCQkgKiBpbnRlcnJ1cHQgaGFuZGxlcnMsIGRlZmVycmVkIHdvcmsgaGFuZGxlcnMgZXRjLgorCQkgKi8KKwkJc2FhNzE2NF9hcGlfZW51bV9zdWJkZXZzKGRldik7CisKKwkJLyogQmVnaW4gdG8gY3JlYXRlIHRoZSB2aWRlbyBzdWItc3lzdGVtcyBhbmQgcmVnaXN0ZXIgZnVuY3MgKi8KKwkJaWYgKHNhYTcxNjRfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRhID09IFNBQTcxNjRfTVBFR19EVkIpIHsKKwkJCWlmIChzYWE3MTY0X2R2Yl9yZWdpc3RlcigmZGV2LT50czEpIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBGYWlsZWQgdG8gcmVnaXN0ZXIgIgorCQkJCQkiZHZiIGFkYXB0ZXJzIG9uIHBvcnRhXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQl9CisJCX0KKworCQlpZiAoc2FhNzE2NF9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIgPT0gU0FBNzE2NF9NUEVHX0RWQikgeworCQkJaWYgKHNhYTcxNjRfZHZiX3JlZ2lzdGVyKCZkZXYtPnRzMikgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIiVzKCkgRmFpbGVkIHRvIHJlZ2lzdGVyICIKKwkJCQkJImR2YiBhZGFwdGVycyBvbiBwb3J0YlxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJfQorCQl9CisKKwl9IC8qICE9IEJPQVJEX1VOS05PV04gKi8KKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBVbnN1cHBvcnRlZCBib2FyZCBkZXRlY3RlZCwgIgorCQkJInJlZ2lzdGVyaW5nIHdpdGhvdXQgZmlybXdhcmVcbiIsIF9fZnVuY19fKTsKKworCWRwcmludGsoMSwgIiVzKCkgcGFyYW1ldGVyIGRlYnVnID0gJWRcbiIsIF9fZnVuY19fLCBkZWJ1Zyk7CisJZHByaW50aygxLCAiJXMoKSBwYXJhbWV0ZXIgd2FpdHNlY3MgPSAlZFxuIiwgX19mdW5jX18sIHdhaXRzZWNzKTsKKworZmFpbF9mdzoKKwlyZXR1cm4gMDsKKworZmFpbF9pcnE6CisJc2FhNzE2NF9kZXZfdW5yZWdpc3RlcihkZXYpOworZmFpbF9mcmVlOgorCWtmcmVlKGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgc2FhNzE2NF9zaHV0ZG93bihzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzYWE3MTY0X2ZpbmlkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisKKwlzYWE3MTY0X3NodXRkb3duKGRldik7CisKKwlpZiAoc2FhNzE2NF9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGEgPT0gU0FBNzE2NF9NUEVHX0RWQikKKwkJc2FhNzE2NF9kdmJfdW5yZWdpc3RlcigmZGV2LT50czEpOworCisJaWYgKHNhYTcxNjRfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiID09IFNBQTcxNjRfTVBFR19EVkIpCisJCXNhYTcxNjRfZHZiX3VucmVnaXN0ZXIoJmRldi0+dHMyKTsKKworCXNhYTcxNjRfaTJjX3VucmVnaXN0ZXIoJmRldi0+aTJjX2J1c1swXSk7CisJc2FhNzE2NF9pMmNfdW5yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzFdKTsKKwlzYWE3MTY0X2kyY191bnJlZ2lzdGVyKCZkZXYtPmkyY19idXNbMl0pOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOworCisJLyogdW5yZWdpc3RlciBzdHVmZiAqLworCWZyZWVfaXJxKHBjaV9kZXYtPmlycSwgZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CisKKwltdXRleF9sb2NrKCZkZXZsaXN0KTsKKwlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKKwltdXRleF91bmxvY2soJmRldmxpc3QpOworCisJc2FhNzE2NF9kZXZfdW5yZWdpc3RlcihkZXYpOworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzYWE3MTY0X3BjaV90YmxbXSA9IHsKKwl7CisJCS8qIFNBQTcxNjQgKi8KKwkJLnZlbmRvciAgICAgICA9IDB4MTEzMSwKKwkJLmRldmljZSAgICAgICA9IDB4NzE2NCwKKwkJLnN1YnZlbmRvciAgICA9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAorCX0sIHsKKwkJLyogLS0tIGVuZCBvZiBsaXN0IC0tLSAqLworCX0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2FhNzE2NF9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNhYTcxNjRfcGNpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgPSAic2FhNzE2NCIsCisJLmlkX3RhYmxlID0gc2FhNzE2NF9wY2lfdGJsLAorCS5wcm9iZSAgICA9IHNhYTcxNjRfaW5pdGRldiwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChzYWE3MTY0X2ZpbmlkZXYpLAorCS8qIFRPRE8gKi8KKwkuc3VzcGVuZCAgPSBOVUxMLAorCS5yZXN1bWUgICA9IE5VTEwsCit9OworCitzdGF0aWMgaW50IHNhYTcxNjRfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gInNhYTcxNjQgZHJpdmVyIGxvYWRlZFxuIik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNhYTcxNjRfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxNjRfZmluaSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2FhNzE2NF9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2FhNzE2NF9pbml0KTsKK21vZHVsZV9leGl0KHNhYTcxNjRfZmluaSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZHZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyZDg0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWR2Yi5jCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgInNhYTcxNjQuaCIKKworI2luY2x1ZGUgInRkYTEwMDQ4LmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKKyNpbmNsdWRlICJzNWgxNDExLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInNhYTcxNjQiCisKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCisvKiBhZGRyIGlzIGluIHRoZSBjYXJkIHN0cnVjdCwgZ2V0IGl0IGZyb20gdGhlcmUgKi8KK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNDhfY29uZmlnIGhhdXBwYXVnZV9odnIyMjAwXzFfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzICAgID0gMHgxMCA+PiAxLAorCS5vdXRwdXRfbW9kZSAgICAgID0gVERBMTAwNDhfU0VSSUFMX09VVFBVVCwKKwkuZndidWxrd3JpdGVsZW4gICA9IFREQTEwMDQ4X0JVTEtXUklURV8yMDAsCisJLmludmVyc2lvbiAgICAgICAgPSBUREExMDA0OF9JTlZFUlNJT05fT04sCisJLmR0djZfaWZfZnJlcV9raHogPSBUREExMDA0OF9JRl8zMzAwLAorCS5kdHY3X2lmX2ZyZXFfa2h6ID0gVERBMTAwNDhfSUZfMzUwMCwKKwkuZHR2OF9pZl9mcmVxX2toeiA9IFREQTEwMDQ4X0lGXzQwMDAsCisJLmNsa19mcmVxX2toeiAgICAgPSBUREExMDA0OF9DTEtfMTYwMDAsCit9Oworc3RhdGljIHN0cnVjdCB0ZGExMDA0OF9jb25maWcgaGF1cHBhdWdlX2h2cjIyMDBfMl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgICAgPSAweDEyID4+IDEsCisJLm91dHB1dF9tb2RlICAgICAgPSBUREExMDA0OF9TRVJJQUxfT1VUUFVULAorCS5md2J1bGt3cml0ZWxlbiAgID0gVERBMTAwNDhfQlVMS1dSSVRFXzIwMCwKKwkuaW52ZXJzaW9uICAgICAgICA9IFREQTEwMDQ4X0lOVkVSU0lPTl9PTiwKKwkuZHR2Nl9pZl9mcmVxX2toeiA9IFREQTEwMDQ4X0lGXzMzMDAsCisJLmR0djdfaWZfZnJlcV9raHogPSBUREExMDA0OF9JRl8zNTAwLAorCS5kdHY4X2lmX2ZyZXFfa2h6ID0gVERBMTAwNDhfSUZfNDAwMCwKKwkuY2xrX2ZyZXFfa2h6ICAgICA9IFREQTEwMDQ4X0NMS18xNjAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcCBoYXVwcGF1Z2VfdGRhMTgyNzFfc3RkX21hcCA9IHsKKwkuYXRzY182ICAgPSB7IC5pZl9mcmVxID0gMzI1MCwgLmFnY19tb2RlID0gMywgLnN0ZCA9IDMsCisJCSAgICAgIC5pZl9sdmwgPSA2LCAucmZhZ2NfdG9wID0gMHgzNyB9LAorCS5xYW1fNiAgICA9IHsgLmlmX2ZyZXEgPSA0MDAwLCAuYWdjX21vZGUgPSAzLCAuc3RkID0gMCwKKwkJICAgICAgLmlmX2x2bCA9IDYsIC5yZmFnY190b3AgPSAweDM3IH0sCit9OworCitzdGF0aWMgc3RydWN0IHRkYTE4MjcxX2NvbmZpZyBoYXVwcGF1Z2VfaHZyMjJ4MF90dW5lcl9jb25maWcgPSB7CisJLnN0ZF9tYXAJPSAmaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAsCisJLmdhdGUJCT0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLnJvbGUJCT0gVERBMTgyNzFfTUFTVEVSLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgaGF1cHBhdWdlX2h2cjIyeDBzX3R1bmVyX2NvbmZpZyA9IHsKKwkuc3RkX21hcAk9ICZoYXVwcGF1Z2VfdGRhMTgyNzFfc3RkX21hcCwKKwkuZ2F0ZQkJPSBUREExODI3MV9HQVRFX0FOQUxPRywKKwkucm9sZQkJPSBUREExODI3MV9TTEFWRSwKKwkucmZfY2FsX29uX3N0YXJ0dXAgPSAxCit9OworCitzdGF0aWMgc3RydWN0IHM1aDE0MTFfY29uZmlnIGhhdXBwYXVnZV9zNWgxNDExX2NvbmZpZyA9IHsKKwkub3V0cHV0X21vZGUgICA9IFM1SDE0MTFfU0VSSUFMX09VVFBVVCwKKwkuZ3BpbyAgICAgICAgICA9IFM1SDE0MTFfR1BJT19PTiwKKwkucWFtX2lmICAgICAgICA9IFM1SDE0MTFfSUZfNDAwMCwKKwkudnNiX2lmICAgICAgICA9IFM1SDE0MTFfSUZfMzI1MCwKKwkuaW52ZXJzaW9uICAgICA9IFM1SDE0MTFfSU5WRVJTSU9OX09OLAorCS5zdGF0dXNfbW9kZSAgID0gUzVIMTQxMV9ERU1PRExPQ0tJTkcsCisJLm1wZWdfdGltaW5nICAgPSBTNUgxNDExX01QRUdUSU1JTkdfQ09OVElOT1VTX05PTklOVkVSVElOR19DTE9DSywKK307CisKK3N0YXRpYyBpbnQgc2FhNzE2NF9kdmJfc3RvcF90c3BvcnQoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBzYWE3MTY0X2FwaV90cmFuc2l0aW9uX3BvcnQocG9ydCwgU0FBX0RNQVNUQVRFX1NUT1ApOworCWlmICgocmV0ICE9IFNBQV9PSykgJiYgKHJldCAhPSBTQUFfRVJSX0FMUkVBRFlfU1RPUFBFRCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHN0b3AgdHJhbnNpdGlvbiBmYWlsZWQsIHJldCA9IDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UgeworCQlkcHJpbnRrKERCR0xWTF9EVkIsICIlcygpICAgIFN0b3BwZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhYTcxNjRfZHZiX2FjcXVpcmVfdHNwb3J0KHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9BQ1FVSVJFKTsKKwlpZiAoKHJldCAhPSBTQUFfT0spICYmIChyZXQgIT0gU0FBX0VSUl9BTFJFQURZX1NUT1BQRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBhY3F1aXJlIHRyYW5zaXRpb24gZmFpbGVkLCByZXQgPSAweCV4XG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldCA9IC1FSU87CisJfSBlbHNlIHsKKwkJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMoKSBBY3F1aXJlZFxuIiwgX19mdW5jX18pOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzE2NF9kdmJfcGF1c2VfdHNwb3J0KHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9QQVVTRSk7CisJaWYgKChyZXQgIT0gU0FBX09LKSAmJiAocmV0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgcGF1c2UgdHJhbnNpdGlvbiBmYWlsZWQsIHJldCA9IDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UgeworCQlkcHJpbnRrKERCR0xWTF9EVkIsICIlcygpICAgUGF1c2VkXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogRmlybXdhcmUgaXMgdmVyeSB3aW5kb3dzIGNlbnRyaWMsIG1lYW5pbmcgeW91IGhhdmUgdG8gdHJhbnNpdGlvbgorICogdGhlIHBhcnQgdGhyb3VnaCBBVlN0cmVhbSAvIEtTIFdpbmRvd3Mgc3RhZ2VzLCBmb3J3YXJkcyBvciBiYWNrd2FyZHMuCisgKiBTdGF0ZXMgYXJlOiBzdG9wcGVkLCBhY3F1aXJlZCAoaC93KSwgcGF1c2VkLCBzdGFydGVkLgorICovCitzdGF0aWMgaW50IHNhYTcxNjRfZHZiX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKwlpbnQgcmV0OworCisJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMocG9ydD0lZClcbiIsIF9fZnVuY19fLCBwb3J0LT5ucik7CisKKwlyZXQgPSBzYWE3MTY0X2R2Yl9wYXVzZV90c3BvcnQocG9ydCk7CisJcmV0ID0gc2FhNzE2NF9kdmJfYWNxdWlyZV90c3BvcnQocG9ydCk7CisJcmV0ID0gc2FhNzE2NF9kdmJfc3RvcF90c3BvcnQocG9ydCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhYTcxNjRfZHZiX2NmZ190c3BvcnQoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KQoreworCXRtSFdTdHJlYW1QYXJhbWV0ZXJzX3QgKnBhcmFtcyA9ICZwb3J0LT5od19zdHJlYW1pbmdwYXJhbXM7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJc3RydWN0IHNhYTcxNjRfYnVmZmVyICpidWY7CisJc3RydWN0IGxpc3RfaGVhZCAqYywgKm47CisJaW50IGkgPSAwOworCisJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMocG9ydD0lZClcbiIsIF9fZnVuY19fLCBwb3J0LT5ucik7CisKKwlzYWE3MTY0X3dyaXRlbChwb3J0LT5waXRjaCwgcGFyYW1zLT5waXRjaCk7CisJc2FhNzE2NF93cml0ZWwocG9ydC0+YnVmc2l6ZSwgcGFyYW1zLT5waXRjaCAqIHBhcmFtcy0+bnVtYmVyb2ZsaW5lcyk7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgY29uZmlndXJlZDpcbiIpOworCWRwcmludGsoREJHTFZMX0RWQiwgIiAgIGxtbWlvICAgICAgIDB4JXBcbiIsIGRldi0+bG1taW8pOworCWRwcmludGsoREJHTFZMX0RWQiwgIiAgIGJ1ZmNvdW50ZXIgIDB4JXggPSAweCV4XG4iLCBwb3J0LT5idWZjb3VudGVyLAorCQlzYWE3MTY0X3JlYWRsKHBvcnQtPmJ1ZmNvdW50ZXIpKTsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiAgIHBpdGNoICAgICAgIDB4JXggPSAlZFxuIiwgcG9ydC0+cGl0Y2gsCisJCXNhYTcxNjRfcmVhZGwocG9ydC0+cGl0Y2gpKTsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiAgIGJ1ZnNpemUgICAgIDB4JXggPSAlZFxuIiwgcG9ydC0+YnVmc2l6ZSwKKwkJc2FhNzE2NF9yZWFkbChwb3J0LT5idWZzaXplKSk7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgICBidWZmZXJjb3VudCA9ICVkXG4iLCBwb3J0LT5od2NmZy5idWZmZXJjb3VudCk7CisJZHByaW50ayhEQkdMVkxfRFZCLCAiICAgYnVmb2Zmc2V0ID0gMHgleFxuIiwgcG9ydC0+YnVmb2Zmc2V0KTsKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIgICBidWZwdHIzMmggPSAweCV4XG4iLCBwb3J0LT5idWZwdHIzMmgpOworCWRwcmludGsoREJHTFZMX0RWQiwgIiAgIGJ1ZnB0cjMybCA9IDB4JXhcbiIsIHBvcnQtPmJ1ZnB0cjMybCk7CisKKwkvKiBQb2tlIHRoZSBidWZmZXJzIGFuZCBvZmZzZXRzIGludG8gUENJIHNwYWNlICovCisJbXV0ZXhfbG9jaygmcG9ydC0+ZG1hcXVldWVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGMsIG4sICZwb3J0LT5kbWFxdWV1ZS5saXN0KSB7CisJCWJ1ZiA9IGxpc3RfZW50cnkoYywgc3RydWN0IHNhYTcxNjRfYnVmZmVyLCBsaXN0KTsKKworCQkvKiBUT0RPOiBSZXZpZXcgdGhpcyBpbiBsaWdodCBvZiAzMnY2NCBhc3NpZ25tZW50cyAqLworCQlzYWE3MTY0X3dyaXRlbChwb3J0LT5idWZvZmZzZXQgKyAoc2l6ZW9mKHUzMikgKiBpKSwgMCk7CisJCXNhYTcxNjRfd3JpdGVsKHBvcnQtPmJ1ZnB0cjMyaCArICgoc2l6ZW9mKHUzMikgKiAyKSAqIGkpLAorCQkJYnVmLT5wdF9kbWEpOworCQlzYWE3MTY0X3dyaXRlbChwb3J0LT5idWZwdHIzMmwgKyAoKHNpemVvZih1MzIpICogMikgKiBpKSwgMCk7CisKKwkJZHByaW50ayhEQkdMVkxfRFZCLAorCQkJIiAgIGJ1ZlslZF0gb2Zmc2V0IDB4JWxseCAoMHgleCkgIgorCQkJImJ1ZiAweCVsbHgvJWxseCAoMHgleC8leClcbiIsCisJCQlpLAorCQkJKHU2NClwb3J0LT5idWZvZmZzZXQgKyAoaSAqIHNpemVvZih1MzIpKSwKKwkJCXNhYTcxNjRfcmVhZGwocG9ydC0+YnVmb2Zmc2V0ICsgKHNpemVvZih1MzIpICogaSkpLAorCQkJKHU2NClwb3J0LT5idWZwdHIzMmggKyAoKHNpemVvZih1MzIpICogMikgKiBpKSwKKwkJCSh1NjQpcG9ydC0+YnVmcHRyMzJsICsgKChzaXplb2YodTMyKSAqIDIpICogaSksCisJCQlzYWE3MTY0X3JlYWRsKHBvcnQtPmJ1ZnB0cjMyaCArICgoc2l6ZW9mKHUzMikgKiBpKQorCQkJCSogMikpLAorCQkJc2FhNzE2NF9yZWFkbChwb3J0LT5idWZwdHIzMmwgKyAoKHNpemVvZih1MzIpICogaSkKKwkJCQkqIDIpKSk7CisKKwkJaWYgKGkrKyA+IHBvcnQtPmh3Y2ZnLmJ1ZmZlcmNvdW50KQorCQkJQlVHKCk7CisKKwl9CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5kbWFxdWV1ZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxNjRfZHZiX3N0YXJ0X3RzcG9ydChzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJaW50IHJldCA9IDAsIHJlc3VsdDsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKHBvcnQ9JWQpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnIpOworCisJc2FhNzE2NF9kdmJfY2ZnX3RzcG9ydChwb3J0KTsKKworCS8qIEFjcXVpcmUgdGhlIGhhcmR3YXJlICovCisJcmVzdWx0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9BQ1FVSVJFKTsKKwlpZiAoKHJlc3VsdCAhPSBTQUFfT0spICYmIChyZXN1bHQgIT0gU0FBX0VSUl9BTFJFQURZX1NUT1BQRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBhY3F1aXJlIHRyYW5zaXRpb24gZmFpbGVkLCByZXMgPSAweCV4XG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CisKKwkJLyogU3RvcCB0aGUgaGFyZHdhcmUsIHJlZ2FyZGxlc3MgKi8KKwkJcmVzdWx0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9TVE9QKTsKKwkJaWYgKChyZXN1bHQgIT0gU0FBX09LKSAmJiAocmVzdWx0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGFjcXVpcmUvZm9yY2VkIHN0b3AgdHJhbnNpdGlvbiAiCisJCQkJImZhaWxlZCwgcmVzID0gMHgleFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCX0KKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfSBlbHNlCisJCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKCkgICBBY3F1aXJlZFxuIiwgX19mdW5jX18pOworCisJLyogUGF1c2UgdGhlIGhhcmR3YXJlICovCisJcmVzdWx0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9QQVVTRSk7CisJaWYgKChyZXN1bHQgIT0gU0FBX09LKSAmJiAocmVzdWx0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgcGF1c2UgdHJhbnNpdGlvbiBmYWlsZWQsIHJlcyA9IDB4JXhcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CisKKwkJLyogU3RvcCB0aGUgaGFyZHdhcmUsIHJlZ2FyZGxlc3MgKi8KKwkJcmVzdWx0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9TVE9QKTsKKwkJaWYgKChyZXN1bHQgIT0gU0FBX09LKSAmJiAocmVzdWx0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHBhdXNlL2ZvcmNlZCBzdG9wIHRyYW5zaXRpb24gIgorCQkJCSJmYWlsZWQsIHJlcyA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQl9CisKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfSBlbHNlCisJCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKCkgICBQYXVzZWRcbiIsIF9fZnVuY19fKTsKKworCS8qIFN0YXJ0IHRoZSBoYXJkd2FyZSAqLworCXJlc3VsdCA9IHNhYTcxNjRfYXBpX3RyYW5zaXRpb25fcG9ydChwb3J0LCBTQUFfRE1BU1RBVEVfUlVOKTsKKwlpZiAoKHJlc3VsdCAhPSBTQUFfT0spICYmIChyZXN1bHQgIT0gU0FBX0VSUl9BTFJFQURZX1NUT1BQRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBydW4gdHJhbnNpdGlvbiBmYWlsZWQsIHJlc3VsdCA9IDB4JXhcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CisKKwkJLyogU3RvcCB0aGUgaGFyZHdhcmUsIHJlZ2FyZGxlc3MgKi8KKwkJcmVzdWx0ID0gc2FhNzE2NF9hcGlfdHJhbnNpdGlvbl9wb3J0KHBvcnQsIFNBQV9ETUFTVEFURV9TVE9QKTsKKwkJaWYgKChyZXN1bHQgIT0gU0FBX09LKSAmJiAocmVzdWx0ICE9IFNBQV9FUlJfQUxSRUFEWV9TVE9QUEVEKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHJ1bi9mb3JjZWQgc3RvcCB0cmFuc2l0aW9uICIKKwkJCQkiZmFpbGVkLCByZXMgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJfQorCisJCXJldCA9IC1FSU87CisJfSBlbHNlCisJCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKCkgICBSdW5uaW5nXG4iLCBfX2Z1bmNfXyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhYTcxNjRfZHZiX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZmVlZC0+ZGVtdXg7CisJc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0ID0gKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqKSBkZW11eC0+cHJpdjsKKwlzdHJ1Y3Qgc2FhNzE2NF9kdmIgKmR2YiA9ICZwb3J0LT5kdmI7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJaW50IHJldCA9IDA7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIlcyhwb3J0PSVkKVxuIiwgX19mdW5jX18sIHBvcnQtPm5yKTsKKworCWlmICghZGVtdXgtPmRteC5mcm9udGVuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZHZiKSB7CisJCW11dGV4X2xvY2soJmR2Yi0+bG9jayk7CisJCWlmIChkdmItPmZlZWRpbmcrKyA9PSAwKSB7CisJCQkvKiBTdGFydCB0cmFuc3BvcnQgKi8KKwkJCXJldCA9IHNhYTcxNjRfZHZiX3N0YXJ0X3RzcG9ydChwb3J0KTsKKwkJfQorCQltdXRleF91bmxvY2soJmR2Yi0+bG9jayk7CisJCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKHBvcnQ9JWQpIG5vdyBmZWVkaW5nID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgcG9ydC0+bnIsIGR2Yi0+ZmVlZGluZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYWE3MTY0X2R2Yl9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZmVlZC0+ZGVtdXg7CisJc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0ID0gKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqKSBkZW11eC0+cHJpdjsKKwlzdHJ1Y3Qgc2FhNzE2NF9kdmIgKmR2YiA9ICZwb3J0LT5kdmI7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJaW50IHJldCA9IDA7CisKKwlkcHJpbnRrKERCR0xWTF9EVkIsICIlcyhwb3J0PSVkKVxuIiwgX19mdW5jX18sIHBvcnQtPm5yKTsKKworCWlmIChkdmIpIHsKKwkJbXV0ZXhfbG9jaygmZHZiLT5sb2NrKTsKKwkJaWYgKC0tZHZiLT5mZWVkaW5nID09IDApIHsKKwkJCS8qIFN0b3AgdHJhbnNwb3J0ICovCisJCQlyZXQgPSBzYWE3MTY0X2R2Yl9zdG9wX3N0cmVhbWluZyhwb3J0KTsKKwkJfQorCQltdXRleF91bmxvY2soJmR2Yi0+bG9jayk7CisJCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKHBvcnQ9JWQpIG5vdyBmZWVkaW5nID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgcG9ydC0+bnIsIGR2Yi0+ZmVlZGluZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBzYWE3MTY0X2R2YiAqZHZiID0gJnBvcnQtPmR2YjsKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiA9IHBvcnQtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKmJ1ZjsKKwlpbnQgcmVzdWx0LCBpOworCisJZHByaW50ayhEQkdMVkxfRFZCLCAiJXMocG9ydD0lZClcbiIsIF9fZnVuY19fLCBwb3J0LT5ucik7CisKKwkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaXMgYWN0aXZlICovCisJaWYgKHBvcnQtPmh3Y2ZnLkJBUkxvY2F0aW9uID09IDApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZHZiX3JlZ2lzdGVyX2FkYXB0ZXIgZmFpbGVkICIKKwkJICAgICAgICIoZXJybm8gPSAlZCksIE5PIFBDSSBjb25maWd1cmF0aW9uXG4iLAorCQkJRFJJVkVSX05BTUUsIHJlc3VsdCk7CisJCWdvdG8gZmFpbF9hZGFwdGVyOworCX0KKworCS8qIEluaXQgYW5kIGVzdGFibGlzaCBkZWZhdWx0cyAqLworCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5iaXRzcGVyc2FtcGxlID0gODsKKwlwb3J0LT5od19zdHJlYW1pbmdwYXJhbXMuc2FtcGxlc3BlcmxpbmUgPSAxODg7CisJcG9ydC0+aHdfc3RyZWFtaW5ncGFyYW1zLm51bWJlcm9mbGluZXMgPQorCQkoU0FBNzE2NF9UU19OVU1CRVJfT0ZfTElORVMgKiAxODgpIC8gMTg4OworCisJcG9ydC0+aHdfc3RyZWFtaW5ncGFyYW1zLnBpdGNoID0gMTg4OworCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5saW5ldGhyZXNob2xkID0gMDsKKwlwb3J0LT5od19zdHJlYW1pbmdwYXJhbXMucGFnZXRhYmxlbGlzdHZpcnQgPSAwOworCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5wYWdldGFibGVsaXN0cGh5cyA9IDA7CisJcG9ydC0+aHdfc3RyZWFtaW5ncGFyYW1zLm51bXBhZ2V0YWJsZXMgPSAyICsKKwkJKChTQUE3MTY0X1RTX05VTUJFUl9PRl9MSU5FUyAqIDE4OCkgLyBQQUdFX1NJWkUpOworCisJcG9ydC0+aHdfc3RyZWFtaW5ncGFyYW1zLm51bXBhZ2V0YWJsZWVudHJpZXMgPSBwb3J0LT5od2NmZy5idWZmZXJjb3VudDsKKworCS8qIEFsbG9jYXRlIHRoZSBQQ0kgcmVzb3VyY2VzICovCisJZm9yIChpID0gMDsgaSA8IHBvcnQtPmh3Y2ZnLmJ1ZmZlcmNvdW50OyBpKyspIHsKKwkJYnVmID0gc2FhNzE2NF9idWZmZXJfYWxsb2MocG9ydCwKKwkJCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5udW1iZXJvZmxpbmVzICoKKwkJCXBvcnQtPmh3X3N0cmVhbWluZ3BhcmFtcy5waXRjaCk7CisKKwkJaWYgKCFidWYpIHsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkdmJfcmVnaXN0ZXJfYWRhcHRlciBmYWlsZWQgIgorCQkJICAgICAgICIoZXJybm8gPSAlZCksIHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXJzXG4iLAorCQkJCURSSVZFUl9OQU1FLCByZXN1bHQpOworCQkJZ290byBmYWlsX2FkYXB0ZXI7CisJCX0KKwkJYnVmLT5uciA9IGk7CisKKwkJbXV0ZXhfbG9jaygmcG9ydC0+ZG1hcXVldWVfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJnBvcnQtPmRtYXF1ZXVlLmxpc3QpOworCQltdXRleF91bmxvY2soJnBvcnQtPmRtYXF1ZXVlX2xvY2spOworCX0KKworCS8qIHJlZ2lzdGVyIGFkYXB0ZXIgKi8KKwlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyLCBEUklWRVJfTkFNRSwgVEhJU19NT0RVTEUsCisJCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9ucik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZHZiX3JlZ2lzdGVyX2FkYXB0ZXIgZmFpbGVkICIKKwkJICAgICAgICIoZXJybm8gPSAlZClcbiIsIERSSVZFUl9OQU1FLCByZXN1bHQpOworCQlnb3RvIGZhaWxfYWRhcHRlcjsKKwl9CisJZHZiLT5hZGFwdGVyLnByaXYgPSBwb3J0OworCisJLyogcmVnaXN0ZXIgZnJvbnRlbmQgKi8KKwlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmR2Yi0+YWRhcHRlciwgZHZiLT5mcm9udGVuZCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZHZiX3JlZ2lzdGVyX2Zyb250ZW5kIGZhaWxlZCAiCisJCSAgICAgICAiKGVycm5vID0gJWQpXG4iLCBEUklWRVJfTkFNRSwgcmVzdWx0KTsKKwkJZ290byBmYWlsX2Zyb250ZW5kOworCX0KKworCS8qIHJlZ2lzdGVyIGRlbXV4IHN0dWZmICovCisJZHZiLT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0KKwkJRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORyB8CisJCURNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HOworCWR2Yi0+ZGVtdXgucHJpdiAgICAgICA9IHBvcnQ7CisJZHZiLT5kZW11eC5maWx0ZXJudW0gID0gMjU2OworCWR2Yi0+ZGVtdXguZmVlZG51bSAgICA9IDI1NjsKKwlkdmItPmRlbXV4LnN0YXJ0X2ZlZWQgPSBzYWE3MTY0X2R2Yl9zdGFydF9mZWVkOworCWR2Yi0+ZGVtdXguc3RvcF9mZWVkICA9IHNhYTcxNjRfZHZiX3N0b3BfZmVlZDsKKwlyZXN1bHQgPSBkdmJfZG14X2luaXQoJmR2Yi0+ZGVtdXgpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGR2Yl9kbXhfaW5pdCBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAorCQkgICAgICAgRFJJVkVSX05BTUUsIHJlc3VsdCk7CisJCWdvdG8gZmFpbF9kbXg7CisJfQorCisJZHZiLT5kbXhkZXYuZmlsdGVybnVtICAgID0gMjU2OworCWR2Yi0+ZG14ZGV2LmRlbXV4ICAgICAgICA9ICZkdmItPmRlbXV4LmRteDsKKwlkdmItPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOworCXJlc3VsdCA9IGR2Yl9kbXhkZXZfaW5pdCgmZHZiLT5kbXhkZXYsICZkdmItPmFkYXB0ZXIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGR2Yl9kbXhkZXZfaW5pdCBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAorCQkgICAgICAgRFJJVkVSX05BTUUsIHJlc3VsdCk7CisJCWdvdG8gZmFpbF9kbXhkZXY7CisJfQorCisJZHZiLT5mZV9ody5zb3VyY2UgPSBETVhfRlJPTlRFTkRfMDsKKwlyZXN1bHQgPSBkdmItPmRlbXV4LmRteC5hZGRfZnJvbnRlbmQoJmR2Yi0+ZGVtdXguZG14LCAmZHZiLT5mZV9odyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkX2Zyb250ZW5kIGZhaWxlZCAiCisJCSAgICAgICAiKERNWF9GUk9OVEVORF8wLCBlcnJubyA9ICVkKVxuIiwgRFJJVkVSX05BTUUsIHJlc3VsdCk7CisJCWdvdG8gZmFpbF9mZV9odzsKKwl9CisKKwlkdmItPmZlX21lbS5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOworCXJlc3VsdCA9IGR2Yi0+ZGVtdXguZG14LmFkZF9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX21lbSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkX2Zyb250ZW5kIGZhaWxlZCAiCisJCSAgICAgICAiKERNWF9NRU1PUllfRkUsIGVycm5vID0gJWQpXG4iLCBEUklWRVJfTkFNRSwgcmVzdWx0KTsKKwkJZ290byBmYWlsX2ZlX21lbTsKKwl9CisKKwlyZXN1bHQgPSBkdmItPmRlbXV4LmRteC5jb25uZWN0X2Zyb250ZW5kKCZkdmItPmRlbXV4LmRteCwgJmR2Yi0+ZmVfaHcpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvbm5lY3RfZnJvbnRlbmQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKKwkJICAgICAgIERSSVZFUl9OQU1FLCByZXN1bHQpOworCQlnb3RvIGZhaWxfZmVfY29ubjsKKwl9CisKKwkvKiByZWdpc3RlciBuZXR3b3JrIGFkYXB0ZXIgKi8KKwlkdmJfbmV0X2luaXQoJmR2Yi0+YWRhcHRlciwgJmR2Yi0+bmV0LCAmZHZiLT5kZW11eC5kbXgpOworCXJldHVybiAwOworCitmYWlsX2ZlX2Nvbm46CisJZHZiLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmItPmRlbXV4LmRteCwgJmR2Yi0+ZmVfbWVtKTsKK2ZhaWxfZmVfbWVtOgorCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX2h3KTsKK2ZhaWxfZmVfaHc6CisJZHZiX2RteGRldl9yZWxlYXNlKCZkdmItPmRteGRldik7CitmYWlsX2RteGRldjoKKwlkdmJfZG14X3JlbGVhc2UoJmR2Yi0+ZGVtdXgpOworZmFpbF9kbXg6CisJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZHZiLT5mcm9udGVuZCk7CitmYWlsX2Zyb250ZW5kOgorCWR2Yl9mcm9udGVuZF9kZXRhY2goZHZiLT5mcm9udGVuZCk7CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyKTsKK2ZhaWxfYWRhcHRlcjoKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgc2FhNzE2NF9kdmJfdW5yZWdpc3RlcihzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNhYTcxNjRfZHZiICpkdmIgPSAmcG9ydC0+ZHZiOworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCXN0cnVjdCBzYWE3MTY0X2J1ZmZlciAqYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjLCAqbjsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIFJlbW92ZSBhbnkgYWxsb2NhdGVkIGJ1ZmZlcnMgKi8KKwltdXRleF9sb2NrKCZwb3J0LT5kbWFxdWV1ZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoYywgbiwgJnBvcnQtPmRtYXF1ZXVlLmxpc3QpIHsKKwkJYiA9IGxpc3RfZW50cnkoYywgc3RydWN0IHNhYTcxNjRfYnVmZmVyLCBsaXN0KTsKKwkJbGlzdF9kZWwoYyk7CisJCXNhYTcxNjRfYnVmZmVyX2RlYWxsb2MocG9ydCwgYik7CisJfQorCW11dGV4X3VubG9jaygmcG9ydC0+ZG1hcXVldWVfbG9jayk7CisKKwlpZiAoZHZiLT5mcm9udGVuZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWR2Yl9uZXRfcmVsZWFzZSgmZHZiLT5uZXQpOworCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX21lbSk7CisJZHZiLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmItPmRlbXV4LmRteCwgJmR2Yi0+ZmVfaHcpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZHZiLT5kbXhkZXYpOworCWR2Yl9kbXhfcmVsZWFzZSgmZHZiLT5kZW11eCk7CisJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZHZiLT5mcm9udGVuZCk7CisJZHZiX2Zyb250ZW5kX2RldGFjaChkdmItPmZyb250ZW5kKTsKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmFkYXB0ZXIpOworCXJldHVybiAwOworfQorCisvKiBBbGwgdGhlIERWQiBhdHRhY2ggY2FsbHMgZ28gaGVyZSwgdGhpcyBmdW5jdGlvbiBnZXQncyBtb2RpZmllZAorICogZm9yIGVhY2ggbmV3IGNhcmQuCisgKi8KK2ludCBzYWE3MTY0X2R2Yl9yZWdpc3RlcihzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisJc3RydWN0IHNhYTcxNjRfZHZiICpkdmIgPSAmcG9ydC0+ZHZiOworCXN0cnVjdCBzYWE3MTY0X2kyYyAqaTJjX2J1cyA9IE5VTEw7CisJaW50IHJldDsKKworCWRwcmludGsoREJHTFZMX0RWQiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIGluaXQgZnJvbnRlbmQgKi8KKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDA6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzI6CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwXzM6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzW3BvcnQtPm5yICsgMV07CisJCXN3aXRjaCAocG9ydC0+bnIpIHsKKwkJY2FzZSAwOgorCQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0OF9hdHRhY2gsCisJCQkJJmhhdXBwYXVnZV9odnIyMjAwXzFfY29uZmlnLAorCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisKKwkJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCS8qIFRPRE86IGFkZHIgaXMgaW4gdGhlIGNhcmQgc3RydWN0ICovCisJCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCQkJMHhjMCA+PiAxLCAmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCSZoYXVwcGF1Z2VfaHZyMjJ4MF90dW5lcl9jb25maWcpOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0OF9hdHRhY2gsCisJCQkJJmhhdXBwYXVnZV9odnIyMjAwXzJfY29uZmlnLAorCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisKKwkJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCS8qIFRPRE86IGFkZHIgaXMgaW4gdGhlIGNhcmQgc3RydWN0ICovCisJCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCQkJMHhjMCA+PiAxLCAmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCSZoYXVwcGF1Z2VfaHZyMjJ4MHNfdHVuZXJfY29uZmlnKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjUwOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8yOgorCWNhc2UgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MF8zOgorCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1twb3J0LT5uciArIDFdOworCisJCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCisJCQkmaGF1cHBhdWdlX3M1aDE0MTFfY29uZmlnLAorCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKworCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmIChwb3J0LT5uciA9PSAwKSB7CisJCQkJLyogTWFzdGVyIFREQTE4MjcxICovCisJCQkJLyogVE9ETzogYWRkciBpcyBpbiB0aGUgY2FyZCBzdHJ1Y3QgKi8KKwkJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJCQkweGMwID4+IDEsICZpMmNfYnVzLT5pMmNfYWRhcCwKKwkJCQkJJmhhdXBwYXVnZV9odnIyMngwX3R1bmVyX2NvbmZpZyk7CisJCQl9IGVsc2UgeworCQkJCS8qIFNsYXZlIFREQTE4MjcxICovCisJCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCQkJMHhjMCA+PiAxLCAmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCSZoYXVwcGF1Z2VfaHZyMjJ4MHNfdHVuZXJfY29uZmlnKTsKKwkJCX0KKwkJfQorCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRoZSBmcm9udGVuZCBpc24ndCBzdXBwb3J0ZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlicmVhazsKKwl9CisJaWYgKE5VTEwgPT0gZHZiLT5mcm9udGVuZCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgRnJvbnRlbmQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogUHV0IHRoZSBhbmFsb2cgZGVjb2RlciBpbiBzdGFuZGJ5IHRvIGtlZXAgaXQgcXVpZXQgKi8KKworCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KKwlyZXQgPSBkdmJfcmVnaXN0ZXIocG9ydCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKGR2Yi0+ZnJvbnRlbmQtPm9wcy5yZWxlYXNlKQorCQkJZHZiLT5mcm9udGVuZC0+b3BzLnJlbGVhc2UoZHZiLT5mcm9udGVuZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWZ3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMGFmMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1mdy5jCkBAIC0wLDAgKzEsNjEzIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJzYWE3MTY0LmgiCisKKyNkZWZpbmUgU0FBNzE2NF9SRVYyX0ZJUk1XQVJFCQkidjRsLXNhYTcxNjQtMS4wLjIuZnciCisjZGVmaW5lIFNBQTcxNjRfUkVWMl9GSVJNV0FSRV9TSVpFCTM5Nzg2MDgKKworI2RlZmluZSBTQUE3MTY0X1JFVjNfRklSTVdBUkUJCSJ2NGwtc2FhNzE2NC0xLjAuMy5mdyIKKyNkZWZpbmUgU0FBNzE2NF9SRVYzX0ZJUk1XQVJFX1NJWkUJMzk3ODYwOAorCitzdHJ1Y3QgZndfaGVhZGVyIHsKKwl1MzIJZmlybXdhcmVzaXplOworCXUzMglic2xzaXplOworCXUzMglyZXNlcnZlZDsKKwl1MzIJdmVyc2lvbjsKK307CisKK2ludCBzYWE3MTY0X2RsX3dhaXRfYWNrKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1MzIgcmVnKQoreworCXUzMiB0aW1lb3V0ID0gU0FBX0RFVklDRV9USU1FT1VUOworCXdoaWxlICgoc2FhNzE2NF9yZWFkbChyZWcpICYgMHgwMSkgPT0gMCkgeworCQl0aW1lb3V0IC09IDEwOworCQlpZiAodGltZW91dCA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZW91dCAobm8gZC9sIGFjaylcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQltc2xlZXAoMTAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNhYTcxNjRfZGxfd2FpdF9jbHIoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHUzMiByZWcpCit7CisJdTMyIHRpbWVvdXQgPSBTQUFfREVWSUNFX1RJTUVPVVQ7CisJd2hpbGUgKHNhYTcxNjRfcmVhZGwocmVnKSAmIDB4MDEpIHsKKwkJdGltZW91dCAtPSAxMDsKKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVvdXQgKG5vIGQvbCBjbHIpXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJbXNsZWVwKDEwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IG1vdmUgZGxmbGFncyBpbnRvIGRldi0+IGFuZCBjaGFuZ2UgdG8gd3JpdGUvcmVhZGwvYiAqLworLyogVE9ETzogRXhjZXNzaXZlIGxldmVscyBvZiBkZWJ1ZyAqLworaW50IHNhYTcxNjRfZG93bmxvYWRpbWFnZShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggKnNyYywgdTMyIHNyY3NpemUsCisJdTMyIGRsZmxhZ3MsIHU4ICpkc3QsIHUzMiBkc3RzaXplKQoreworCXUzMiByZWcsIHRpbWVvdXQsIG9mZnNldDsKKwl1OCAqc3JjYnVmID0gTlVMTDsKKwlpbnQgcmV0OworCisJdTMyIGRsZmxhZyA9IGRsZmxhZ3M7CisJdTMyIGRsZmxhZ19hY2sgPSBkbGZsYWcgKyA0OworCXUzMiBkcmZsYWcgPSBkbGZsYWdfYWNrICsgNDsKKwl1MzIgZHJmbGFnX2FjayA9IGRyZmxhZyArIDQ7CisJdTMyIGJsZWZsYWcgPSBkcmZsYWdfYWNrICsgNDsKKworCWRwcmludGsoREJHTFZMX0ZXLAorCQkiJXMoaW1hZ2U9JXAsIHNpemU9JWQsIGZsYWdzPTB4JXgsIGRzdD0lcCwgZHN0c2l6ZT0weCV4KVxuIiwKKwkJX19mdW5jX18sIHNyYywgc3Jjc2l6ZSwgZGxmbGFncywgZHN0LCBkc3RzaXplKTsKKworCWlmICgoc3JjID09IDApIHx8IChkc3QgPT0gMCkpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJc3JjYnVmID0ga3phbGxvYyg0ICogMTA0ODU3NiwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gc3JjYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzcmNzaXplID4gKDQqMTA0ODU3NikpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHNyY2J1Ziwgc3JjLCBzcmNzaXplKTsKKworCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBkbGZsYWcgPSAweCV4XG4iLCBfX2Z1bmNfXywgZGxmbGFnKTsKKwlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgZGxmbGFnX2FjayA9IDB4JXhcbiIsIF9fZnVuY19fLCBkbGZsYWdfYWNrKTsKKwlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgZHJmbGFnID0gMHgleFxuIiwgX19mdW5jX18sIGRyZmxhZyk7CisJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIGRyZmxhZ19hY2sgPSAweCV4XG4iLCBfX2Z1bmNfXywgZHJmbGFnX2Fjayk7CisJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIGJsZWZsYWcgPSAweCV4XG4iLCBfX2Z1bmNfXywgYmxlZmxhZyk7CisKKwlyZWcgPSBzYWE3MTY0X3JlYWRsKGRsZmxhZyk7CisJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIGRsZmxhZyAoMHgleCk9IDB4JXhcbiIsIF9fZnVuY19fLCBkbGZsYWcsIHJlZyk7CisJaWYgKHJlZyA9PSAxKQorCQlkcHJpbnRrKERCR0xWTF9GVywKKwkJCSIlcygpIERvd25sb2FkIGZsYWcgYWxyZWFkeSBzZXQsIHBsZWFzZSByZWJvb3RcbiIsCisJCQlfX2Z1bmNfXyk7CisKKwkvKiBJbmRpY2F0ZSBkb3dubG9hZCBzdGFydCAqLworCXNhYTcxNjRfd3JpdGVsKGRsZmxhZywgMSk7CisJcmV0ID0gc2FhNzE2NF9kbF93YWl0X2FjayhkZXYsIGRsZmxhZ19hY2spOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIEFjayBkb3dubG9hZCBzdGFydCwgdGhlbiB3YWl0IGZvciB3YWl0ICovCisJc2FhNzE2NF93cml0ZWwoZGxmbGFnLCAwKTsKKwlyZXQgPSBzYWE3MTY0X2RsX3dhaXRfY2xyKGRldiwgZGxmbGFnX2Fjayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogRGVhbCB3aXRoIHRoZSByYXcgZmlybXdhcmUsIGluIHRoZSBhcHByb3ByaWF0ZSBjaHVuayBzaXplICovCisJZm9yIChvZmZzZXQgPSAwOyBzcmNzaXplID4gZHN0c2l6ZTsKKwkJc3Jjc2l6ZSAtPSBkc3RzaXplLCBvZmZzZXQgKz0gZHN0c2l6ZSkgeworCisJCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBtZW1jcHkgJWRcbiIsIF9fZnVuY19fLCBkc3RzaXplKTsKKwkJbWVtY3B5KGRzdCwgc3JjYnVmICsgb2Zmc2V0LCBkc3RzaXplKTsKKworCQkvKiBGbGFnIHRoZSBkYXRhIGFzIHJlYWR5ICovCisJCXNhYTcxNjRfd3JpdGVsKGRyZmxhZywgMSk7CisJCXJldCA9IHNhYTcxNjRfZGxfd2FpdF9hY2soZGV2LCBkcmZsYWdfYWNrKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQkvKiBXYWl0IGZvciBpbmRpY2F0aW9uIGRhdGEgd2FzIHJlY2VpdmVkICovCisJCXNhYTcxNjRfd3JpdGVsKGRyZmxhZywgMCk7CisJCXJldCA9IHNhYTcxNjRfZGxfd2FpdF9jbHIoZGV2LCBkcmZsYWdfYWNrKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCX0KKworCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBtZW1jcHkobCkgJWRcbiIsIF9fZnVuY19fLCBkc3RzaXplKTsKKwkvKiBXcml0ZSBsYXN0IGJsb2NrIHRvIHRoZSBkZXZpY2UgKi8KKwltZW1jcHkoZHN0LCBzcmNidWYrb2Zmc2V0LCBzcmNzaXplKTsKKworCS8qIEZsYWcgdGhlIGRhdGEgYXMgcmVhZHkgKi8KKwlzYWE3MTY0X3dyaXRlbChkcmZsYWcsIDEpOworCXJldCA9IHNhYTcxNjRfZGxfd2FpdF9hY2soZGV2LCBkcmZsYWdfYWNrKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzYWE3MTY0X3dyaXRlbChkcmZsYWcsIDApOworCXRpbWVvdXQgPSAwOworCXdoaWxlIChzYWE3MTY0X3JlYWRsKGJsZWZsYWcpICE9IFNBQV9ERVZJQ0VfSU1BR0VfQk9PVElORykgeworCQlpZiAoc2FhNzE2NF9yZWFkbChibGVmbGFnKSAmIFNBQV9ERVZJQ0VfSU1BR0VfQ09SUlVQVCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGltYWdlIGNvcnJ1cHRcbiIsIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHNhYTcxNjRfcmVhZGwoYmxlZmxhZykgJiBTQUFfREVWSUNFX01FTU9SWV9DT1JSVVBUKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZGV2aWNlIG1lbW9yeSBjb3JydXB0XG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbXNsZWVwKDEwKTsKKwkJaWYgKHRpbWVvdXQrKyA+IDYwKQorCQkJYnJlYWs7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBJbWFnZSBkb3dubG9hZGVkLCBib290aW5nLi4uXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSBzYWE3MTY0X2RsX3dhaXRfY2xyKGRldiwgZHJmbGFnX2Fjayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBJbWFnZSBib290ZWQgc3VjY2Vzc2Z1bGx5LlxuIiwgX19mdW5jX18pOworCXJldCA9IDA7CisKK291dDoKKwlrZnJlZShzcmNidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFRPRE86IEV4Y2Vzc2l2ZSBkZWJ1ZyAqLworLyogTG9hZCB0aGUgZmlybXdhcmUuIE9wdGlvbmFsbHkgaXQgY2FuIGJlIGluIFJPTSBvciBuZXdlciB2ZXJzaW9ucworICogY2FuIGJlIG9uIGRpc2ssIHNhdmluZyB0aGUgZXhwZW5zZSBvZiB0aGUgUk9NIGhhcmR3YXJlLiAqLworaW50IHNhYTcxNjRfZG93bmxvYWRmaXJtd2FyZShzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldikKK3sKKwkvKiB1MzIgc2Vjb25kX3RpbWVvdXQgPSA2MCAqIFNBQV9ERVZJQ0VfVElNRU9VVDsgKi8KKwl1MzIgdG1wLCBmaWxlc2l6ZSwgdmVyc2lvbiwgZXJyX2ZsYWdzLCBmaXJzdF90aW1lb3V0LCBmd2xlbmd0aDsKKwl1MzIgc2Vjb25kX3RpbWVvdXQsIHVwZGF0ZWJvb3Rsb2FkZXIgPSAxLCBib290bG9hZGVyc2l6ZSA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJc3RydWN0IGZ3X2hlYWRlciAqaGRyLCAqYm9vdGhkciA9IE5VTEwsICpmd2hkcjsKKwl1MzIgYm9vdGxvYWRlcnZlcnNpb24gPSAwLCBmd2xvYWRlcnNpemU7CisJdTggKmJvb3Rsb2FkZXJvZmZzZXQgPSBOVUxMLCAqZndsb2FkZXJvZmZzZXQ7CisJY2hhciAqZnduYW1lOworCWludCByZXQ7CisKKwlkcHJpbnRrKERCR0xWTF9GVywgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmIChzYWE3MTY0X2JvYXJkc1tkZXYtPmJvYXJkXS5jaGlwcmV2ID09IFNBQTcxNjRfQ0hJUF9SRVYyKSB7CisJCWZ3bmFtZSA9IFNBQTcxNjRfUkVWMl9GSVJNV0FSRTsKKwkJZndsZW5ndGggPSBTQUE3MTY0X1JFVjJfRklSTVdBUkVfU0laRTsKKwl9IGVsc2UgeworCQlmd25hbWUgPSBTQUE3MTY0X1JFVjNfRklSTVdBUkU7CisJCWZ3bGVuZ3RoID0gU0FBNzE2NF9SRVYzX0ZJUk1XQVJFX1NJWkU7CisJfQorCisJdmVyc2lvbiA9IHNhYTcxNjRfZ2V0Y3VycmVudGZpcm13YXJldmVyc2lvbihkZXYpOworCisJaWYgKHZlcnNpb24gPT0gMHgwMCkgeworCisJCXNlY29uZF90aW1lb3V0ID0gMTAwOworCQlmaXJzdF90aW1lb3V0ID0gMTAwOworCQllcnJfZmxhZ3MgPSBzYWE3MTY0X3JlYWRsKFNBQV9CT09UTE9BREVSRVJST1JfRkxBR1MpOworCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgZXJyX2ZsYWdzID0gJXhcbiIsCisJCQlfX2Z1bmNfXywgZXJyX2ZsYWdzKTsKKworCQl3aGlsZSAoZXJyX2ZsYWdzICE9IFNBQV9ERVZJQ0VfSU1BR0VfQk9PVElORykgeworCQkJZHByaW50ayhEQkdMVkxfRlcsICIlcygpIGVycl9mbGFncyA9ICV4XG4iLAorCQkJCV9fZnVuY19fLCBlcnJfZmxhZ3MpOworCQkJbXNsZWVwKDEwKTsKKworCQkJaWYgKGVycl9mbGFncyAmIFNBQV9ERVZJQ0VfSU1BR0VfQ09SUlVQVCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmaXJtd2FyZSBjb3JydXB0XG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZXJyX2ZsYWdzICYgU0FBX0RFVklDRV9NRU1PUllfQ09SUlVQVCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBkZXZpY2UgbWVtb3J5IGNvcnJ1cHRcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX05PX0lNQUdFKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIG5vIGZpcnN0IGltYWdlXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX0lNQUdFX1NFQVJDSElORykgeworCQkJCWZpcnN0X3RpbWVvdXQgLT0gMTA7CisJCQkJaWYgKGZpcnN0X3RpbWVvdXQgPT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSIlcygpIG5vIGZpcnN0IGltYWdlXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGVycl9mbGFncyAmIFNBQV9ERVZJQ0VfSU1BR0VfTE9BRElORykgeworCQkJCXNlY29uZF90aW1lb3V0IC09IDEwOworCQkJCWlmIChzZWNvbmRfdGltZW91dCA9PSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiJXMoKSBGVyBsb2FkIHRpbWUgZXhjZWVkZWRcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc2Vjb25kX3RpbWVvdXQgLT0gMTA7CisJCQkJaWYgKHNlY29uZF90aW1lb3V0ID09IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSIlcygpIFVua25vd24gYm9vdGxvYWRlciBmbGFncyAweCV4XG4iLAorCQkJCQkJX19mdW5jX18sIGVycl9mbGFncyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJZXJyX2ZsYWdzID0gc2FhNzE2NF9yZWFkbChTQUFfQk9PVExPQURFUkVSUk9SX0ZMQUdTKTsKKwkJfSAvKiBXaGlsZSAhPSBCb290aW5nICovCisKKwkJaWYgKGVycl9mbGFncyA9PSBTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpIHsKKwkJCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBMb2FkZXIgMSBoYXMgbG9hZGVkLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlmaXJzdF90aW1lb3V0ID0gU0FBX0RFVklDRV9USU1FT1VUOworCQkJc2Vjb25kX3RpbWVvdXQgPSA2MCAqIFNBQV9ERVZJQ0VfVElNRU9VVDsKKwkJCXNlY29uZF90aW1lb3V0ID0gMTAwOworCisJCQllcnJfZmxhZ3MgPSBzYWE3MTY0X3JlYWRsKFNBQV9TRUNPTkRTVEFHRUVSUk9SX0ZMQUdTKTsKKwkJCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBlcnJfZmxhZ3MyID0gJXhcbiIsCisJCQkJX19mdW5jX18sIGVycl9mbGFncyk7CisJCQl3aGlsZSAoZXJyX2ZsYWdzICE9IFNBQV9ERVZJQ0VfSU1BR0VfQk9PVElORykgeworCQkJCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBlcnJfZmxhZ3MyID0gJXhcbiIsCisJCQkJCV9fZnVuY19fLCBlcnJfZmxhZ3MpOworCQkJCW1zbGVlcCgxMCk7CisKKwkJCQlpZiAoZXJyX2ZsYWdzICYgU0FBX0RFVklDRV9JTUFHRV9DT1JSVVBUKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJIiVzKCkgZmlybXdhcmUgY29ycnVwdFxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX01FTU9SWV9DT1JSVVBUKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJIiVzKCkgZGV2aWNlIG1lbW9yeSBjb3JydXB0XG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKGVycl9mbGFncyAmIFNBQV9ERVZJQ0VfTk9fSU1BR0UpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIG5vIGZpcnN0IGltYWdlXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKGVycl9mbGFncyAmIFNBQV9ERVZJQ0VfSU1BR0VfU0VBUkNISU5HKSB7CisJCQkJCWZpcnN0X3RpbWVvdXQgLT0gMTA7CisJCQkJCWlmIChmaXJzdF90aW1lb3V0ID09IDApIHsKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJIiVzKCkgbm8gc2Vjb25kIGltYWdlXG4iLAorCQkJCQkJCV9fZnVuY19fKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChlcnJfZmxhZ3MgJgorCQkJCQlTQUFfREVWSUNFX0lNQUdFX0xPQURJTkcpIHsKKwkJCQkJc2Vjb25kX3RpbWVvdXQgLT0gMTA7CisJCQkJCWlmIChzZWNvbmRfdGltZW91dCA9PSAwKSB7CisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSIlcygpIEZXIGxvYWQgdGltZSBleGNlZWRlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCXNlY29uZF90aW1lb3V0IC09IDEwOworCQkJCQlpZiAoc2Vjb25kX3RpbWVvdXQgPT0gMCkgeworCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSIlcygpIFVua25vd24gYm9vdGxvYWRlciBmbGFncyAweCV4XG4iLAorCQkJCQkJCV9fZnVuY19fLCBlcnJfZmxhZ3MpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQllcnJfZmxhZ3MgPQorCQkJCXNhYTcxNjRfcmVhZGwoU0FBX1NFQ09ORFNUQUdFRVJST1JfRkxBR1MpOworCQkJfSAvKiBlcnJfZmxhZ3MgIT0gU0FBX0RFVklDRV9JTUFHRV9CT09USU5HICovCisKKwkJCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBMb2FkZXIgZmxhZ3MgMToweCV4IDI6MHgleC5cbiIsCisJCQkJX19mdW5jX18sCisJCQkJc2FhNzE2NF9yZWFkbChTQUFfQk9PVExPQURFUkVSUk9SX0ZMQUdTKSwKKwkJCQlzYWE3MTY0X3JlYWRsKFNBQV9TRUNPTkRTVEFHRUVSUk9SX0ZMQUdTKSk7CisKKwkJfSAvKiBlcnJfZmxhZ3MgPT0gU0FBX0RFVklDRV9JTUFHRV9CT09USU5HICovCisKKwkJLyogSXQncyBwb3NzaWJsZSBmb3IgYm90aCBmaXJtd2FyZXMgdG8gaGF2ZSBib290ZWQsCisJCSAqIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGV5J3ZlIGZpbmlzaGVkIGJvb3RpbmcgeWV0LgorCQkgKi8KKwkJaWYgKChzYWE3MTY0X3JlYWRsKFNBQV9CT09UTE9BREVSRVJST1JfRkxBR1MpID09CisJCQlTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpICYmCisJCQkoc2FhNzE2NF9yZWFkbChTQUFfU0VDT05EU1RBR0VFUlJPUl9GTEFHUykgPT0KKwkJCVNBQV9ERVZJQ0VfSU1BR0VfQk9PVElORykpIHsKKworCisJCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgTG9hZGVyIDIgaGFzIGxvYWRlZC5cbiIsCisJCQkJX19mdW5jX18pOworCisJCQlmaXJzdF90aW1lb3V0ID0gU0FBX0RFVklDRV9USU1FT1VUOworCQkJd2hpbGUgKGZpcnN0X3RpbWVvdXQpIHsKKwkJCQltc2xlZXAoMTApOworCisJCQkJdmVyc2lvbiA9CisJCQkJCXNhYTcxNjRfZ2V0Y3VycmVudGZpcm13YXJldmVyc2lvbihkZXYpOworCQkJCWlmICh2ZXJzaW9uKSB7CisJCQkJCWRwcmludGsoREJHTFZMX0ZXLAorCQkJCQkiJXMoKSBBbGwgZi93IGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWZpcnN0X3RpbWVvdXQgLT0gMTA7CisJCQkJCWlmIChmaXJzdF90aW1lb3V0ID09IDApIHsKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJIiVzKCkgRlcgZGlkIG5vdCBib290XG4iLAorCQkJCQkJCV9fZnVuY19fKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXZlcnNpb24gPSBzYWE3MTY0X2dldGN1cnJlbnRmaXJtd2FyZXZlcnNpb24oZGV2KTsKKwl9IC8qIHZlcnNpb24gPT0gMCAqLworCisJLyogSGFzIHRoZSBmaXJtd2FyZSByZWFsbHkgYm9vdGVkPyAqLworCWlmICgoc2FhNzE2NF9yZWFkbChTQUFfQk9PVExPQURFUkVSUk9SX0ZMQUdTKSA9PQorCQlTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpICYmCisJCShzYWE3MTY0X3JlYWRsKFNBQV9TRUNPTkRTVEFHRUVSUk9SX0ZMQUdTKSA9PQorCQlTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpICYmICh2ZXJzaW9uID09IDApKSB7CisKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMoKSBUaGUgZmlybXdhcmUgaHVuZywgcHJvYmFibHkgYmFkIGZpcm13YXJlXG4iLAorCQkJX19mdW5jX18pOworCisJCS8qIFRlbGwgdGhlIHNlY29uZCBzdGFnZSBsb2FkZXIgd2UgaGF2ZSBhIGRlYWRsb2NrICovCisJCXNhYTcxNjRfd3JpdGVsKFNBQV9ERVZJQ0VfREVBRExPQ0tfREVURUNURURfT0ZGU0VULAorCQkJU0FBX0RFVklDRV9ERUFETE9DS19ERVRFQ1RFRCk7CisKKwkJc2FhNzE2NF9nZXRmaXJtd2FyZXN0YXR1cyhkZXYpOworCisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRwcmludGsoREJHTFZMX0ZXLCAiRGV2aWNlIGhhcyBGaXJtd2FyZSBWZXJzaW9uICVkLiVkLiVkLiVkXG4iLAorCQkodmVyc2lvbiAmIDB4MDAwMGZjMDApID4+IDEwLAorCQkodmVyc2lvbiAmIDB4MDAwMDAzZTApID4+IDUsCisJCSh2ZXJzaW9uICYgMHgwMDAwMDAxZiksCisJCSh2ZXJzaW9uICYgMHhmZmZmMDAwMCkgPj4gMTYpOworCisJLyogTG9hZCB0aGUgZmlybXd3YXJlIGZyb20gdGhlIGRpc2sgaWYgcmVxdWlyZWQgKi8KKwlpZiAodmVyc2lvbiA9PSAwKSB7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBXYWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKVxuIiwKKwkJCV9fZnVuY19fLCBmd25hbWUpOworCisJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd25hbWUsICZkZXYtPnBjaS0+ZGV2KTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIFVwbG9hZCBmYWlsZWQuICIKKwkJCQkiKGZpbGUgbm90IGZvdW5kPylcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBmaXJtd2FyZSByZWFkICVadSBieXRlcy5cbiIsCisJCQlfX2Z1bmNfXywgZnctPnNpemUpOworCisJCWlmIChmdy0+c2l6ZSAhPSBmd2xlbmd0aCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDA6IGZpcm13YXJlIGluY29ycmVjdCBzaXplXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgZmlybXdhcmUgbG9hZGVkLlxuIiwgX19mdW5jX18pOworCisJCWhkciA9IChzdHJ1Y3QgZndfaGVhZGVyICopZnctPmRhdGE7CisJCXByaW50ayhLRVJOX0lORk8gIkZpcm13YXJlIGZpbGUgaGVhZGVyIHBhcnQgMTpcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICIgLkZpcm13YXJlU2l6ZSA9IDB4JXhcbiIsIGhkci0+ZmlybXdhcmVzaXplKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIC5CU0xTaXplID0gMHgleFxuIiwgaGRyLT5ic2xzaXplKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIC5SZXNlcnZlZCA9IDB4JXhcbiIsIGhkci0+cmVzZXJ2ZWQpOworCQlwcmludGsoS0VSTl9JTkZPICIgLlZlcnNpb24gPSAweCV4XG4iLCBoZHItPnZlcnNpb24pOworCisJCS8qIFJldHJlaXZlIGJvb3Rsb2FkZXIgaWYgcmVxZCAqLworCQlpZiAoKGhkci0+ZmlybXdhcmVzaXplID09IDApICYmIChoZHItPmJzbHNpemUgPT0gMCkpCisJCQkvKiBTZWNvbmQgYm9vdGxvYWRlciBpbiB0aGUgZmlybXdhcmUgZmlsZSAqLworCQkJZmlsZXNpemUgPSBoZHItPnJlc2VydmVkICogMTY7CisJCWVsc2UKKwkJCWZpbGVzaXplID0gKGhkci0+ZmlybXdhcmVzaXplICsgaGRyLT5ic2xzaXplKSAqCisJCQkJMTYgKyBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcik7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBTZWNCb290TG9hZGVyLkZpbGVTaXplID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZmlsZXNpemUpOworCisJCS8qIEdldCBib290bG9hZGVyIChpZiByZXFkKSBhbmQgZmlybXdhcmUgaGVhZGVyICovCisJCWlmICgoaGRyLT5maXJtd2FyZXNpemUgPT0gMCkgJiYgKGhkci0+YnNsc2l6ZSA9PSAwKSkgeworCQkJLyogU2Vjb25kIGJvb3QgbG9hZGVyIGlzIHJlcXVpcmVkICovCisKKwkJCS8qIEdldCB0aGUgbG9hZGVyIGhlYWRlciAqLworCQkJYm9vdGhkciA9IChzdHJ1Y3QgZndfaGVhZGVyICopKGZ3LT5kYXRhICsKKwkJCQlzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOworCisJCQlib290bG9hZGVydmVyc2lvbiA9CisJCQkJc2FhNzE2NF9yZWFkbChTQUFfREVWSUNFXzJORF9WRVJTSU9OKTsKKwkJCWRwcmludGsoREJHTFZMX0ZXLCAiT25ib2FyZCBCb290TG9hZGVyOlxuIik7CisJCQlkcHJpbnRrKERCR0xWTF9GVywgIi0+RmxhZyAweCV4XG4iLAorCQkJCXNhYTcxNjRfcmVhZGwoU0FBX0JPT1RMT0FERVJFUlJPUl9GTEFHUykpOworCQkJZHByaW50ayhEQkdMVkxfRlcsICItPkFjayAweCV4XG4iLAorCQkJCXNhYTcxNjRfcmVhZGwoU0FBX0RBVEFSRUFEWV9GTEFHX0FDSykpOworCQkJZHByaW50ayhEQkdMVkxfRlcsICItPkZXIFZlcnNpb24gMHgleFxuIiwgdmVyc2lvbik7CisJCQlkcHJpbnRrKERCR0xWTF9GVywgIi0+TG9hZGVyIFZlcnNpb24gMHgleFxuIiwKKwkJCQlib290bG9hZGVydmVyc2lvbik7CisKKwkJCWlmICgoc2FhNzE2NF9yZWFkbChTQUFfQk9PVExPQURFUkVSUk9SX0ZMQUdTKSA9PQorCQkJCTB4MDMpICYmIChzYWE3MTY0X3JlYWRsKFNBQV9EQVRBUkVBRFlfRkxBR19BQ0spCisJCQkJPT0gMHgwMCkgJiYgKHZlcnNpb24gPT0gMHgwMCkpIHsKKworCQkJCWRwcmludGsoREJHTFZMX0ZXLCAiQm9vdExvYWRlciB2ZXJzaW9uIGluICAiCisJCQkJCSJyb20gJWQuJWQuJWQuJWRcbiIsCisJCQkJCShib290bG9hZGVydmVyc2lvbiAmIDB4MDAwMGZjMDApID4+IDEwLAorCQkJCQkoYm9vdGxvYWRlcnZlcnNpb24gJiAweDAwMDAwM2UwKSA+PiA1LAorCQkJCQkoYm9vdGxvYWRlcnZlcnNpb24gJiAweDAwMDAwMDFmKSwKKwkJCQkJKGJvb3Rsb2FkZXJ2ZXJzaW9uICYgMHhmZmZmMDAwMCkgPj4gMTYKKwkJCQkJKTsKKwkJCQlkcHJpbnRrKERCR0xWTF9GVywgIkJvb3RMb2FkZXIgdmVyc2lvbiAiCisJCQkJCSJpbiBmaWxlICVkLiVkLiVkLiVkXG4iLAorCQkJCQkoYm9vdGhkci0+dmVyc2lvbiAmIDB4MDAwMGZjMDApID4+IDEwLAorCQkJCQkoYm9vdGhkci0+dmVyc2lvbiAmIDB4MDAwMDAzZTApID4+IDUsCisJCQkJCShib290aGRyLT52ZXJzaW9uICYgMHgwMDAwMDAxZiksCisJCQkJCShib290aGRyLT52ZXJzaW9uICYgMHhmZmZmMDAwMCkgPj4gMTYKKwkJCQkJKTsKKworCQkJCWlmIChib290bG9hZGVydmVyc2lvbiA9PSBib290aGRyLT52ZXJzaW9uKQorCQkJCQl1cGRhdGVib290bG9hZGVyID0gMDsKKwkJCX0KKworCQkJLyogQ2FsY3VsYXRlIG9mZnNldCB0byBmaXJtd2FyZSBoZWFkZXIgKi8KKwkJCXRtcCA9IChib290aGRyLT5maXJtd2FyZXNpemUgKyBib290aGRyLT5ic2xzaXplKSAqIDE2ICsKKwkJCQkoc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpICsKKwkJCQlzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOworCisJCQlmd2hkciA9IChzdHJ1Y3QgZndfaGVhZGVyICopKGZ3LT5kYXRhK3RtcCk7CisJCX0gZWxzZSB7CisJCQkvKiBObyBzZWNvbmQgYm9vdCBsb2FkZXIgKi8KKwkJCWZ3aGRyID0gaGRyOworCQl9CisKKwkJZHByaW50ayhEQkdMVkxfRlcsICJGaXJtd2FyZSB2ZXJzaW9uIGluIGZpbGUgJWQuJWQuJWQuJWRcbiIsCisJCQkoZndoZHItPnZlcnNpb24gJiAweDAwMDBmYzAwKSA+PiAxMCwKKwkJCShmd2hkci0+dmVyc2lvbiAmIDB4MDAwMDAzZTApID4+IDUsCisJCQkoZndoZHItPnZlcnNpb24gJiAweDAwMDAwMDFmKSwKKwkJCShmd2hkci0+dmVyc2lvbiAmIDB4ZmZmZjAwMDApID4+IDE2CisJCQkpOworCisJCWlmICh2ZXJzaW9uID09IGZ3aGRyLT52ZXJzaW9uKSB7CisJCQkvKiBObyBkb3dubG9hZCwgZmlybXdhcmUgYWxyZWFkeSBvbiBib2FyZCAqLworCQkJcmV0ID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKChoZHItPmZpcm13YXJlc2l6ZSA9PSAwKSAmJiAoaGRyLT5ic2xzaXplID09IDApKSB7CisJCQlpZiAodXBkYXRlYm9vdGxvYWRlcikgeworCQkJCS8qIEdldCByZWFkeSB0byB1cGxvYWQgdGhlIGJvb3Rsb2FkZXIgKi8KKwkJCQlib290bG9hZGVyc2l6ZSA9IChib290aGRyLT5maXJtd2FyZXNpemUgKworCQkJCQlib290aGRyLT5ic2xzaXplKSAqIDE2ICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpOworCisJCQkJYm9vdGxvYWRlcm9mZnNldCA9ICh1OCAqKShmdy0+ZGF0YSArCisJCQkJCXNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSk7CisKKwkJCQlkcHJpbnRrKERCR0xWTF9GVywgImJvb3Rsb2FkZXIgZC9sIHN0YXJ0cy5cbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgRmlybXdhcmVTaXplID0gMHgleFxuIiwKKwkJCQkJX19mdW5jX18sIGJvb3RoZHItPmZpcm13YXJlc2l6ZSk7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBCU0xTaXplID0gMHgleFxuIiwKKwkJCQkJX19mdW5jX18sIGJvb3RoZHItPmJzbHNpemUpOworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgUmVzZXJ2ZWQgPSAweCV4XG4iLAorCQkJCQlfX2Z1bmNfXywgYm9vdGhkci0+cmVzZXJ2ZWQpOworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgVmVyc2lvbiA9IDB4JXhcbiIsCisJCQkJCV9fZnVuY19fLCBib290aGRyLT52ZXJzaW9uKTsKKwkJCQlyZXQgPSBzYWE3MTY0X2Rvd25sb2FkaW1hZ2UoCisJCQkJCWRldiwKKwkJCQkJYm9vdGxvYWRlcm9mZnNldCwKKwkJCQkJYm9vdGxvYWRlcnNpemUsCisJCQkJCVNBQV9ET1dOTE9BRF9GTEFHUywKKwkJCQkJZGV2LT5ibW1pbyArIFNBQV9ERVZJQ0VfRE9XTkxPQURfT0ZGU0VULAorCQkJCQlTQUFfREVWSUNFX0JVRkZFUkJMT0NLU0laRSk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkiYm9vdGxvYWRlciBkL2wgaGFzIGZhaWxlZFxuIik7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlkcHJpbnRrKERCR0xWTF9GVywKKwkJCQkJImJvb3Rsb2FkZXIgZG93bmxvYWQgY29tcGxldGUuXG4iKTsKKworCQkJfQorCisJCQlwcmludGsoS0VSTl9FUlIgInN0YXJ0aW5nIGZpcm13YXJlIGRvd25sb2FkKDIpXG4iKTsKKwkJCWJvb3Rsb2FkZXJzaXplID0gKGJvb3RoZHItPmZpcm13YXJlc2l6ZSArCisJCQkJYm9vdGhkci0+YnNsc2l6ZSkgKiAxNiArCisJCQkJc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpOworCisJCQlib290bG9hZGVyb2Zmc2V0ID0KKwkJCQkodTggKikoZnctPmRhdGEgKyBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOworCisJCQlmd2xvYWRlcm9mZnNldCA9IGJvb3Rsb2FkZXJvZmZzZXQgKyBib290bG9hZGVyc2l6ZTsKKworCQkJLyogVE9ETzogZml4IHRoaXMgYm91bmRzIG92ZXJydW4gaGVyZSB3aXRoIG9sZCBmL3dzICovCisJCQlmd2xvYWRlcnNpemUgPSAoZndoZHItPmZpcm13YXJlc2l6ZSArIGZ3aGRyLT5ic2xzaXplKSAqCisJCQkJMTYgKyBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcik7CisKKwkJCXJldCA9IHNhYTcxNjRfZG93bmxvYWRpbWFnZSgKKwkJCQlkZXYsCisJCQkJZndsb2FkZXJvZmZzZXQsCisJCQkJZndsb2FkZXJzaXplLAorCQkJCVNBQV9ERVZJQ0VfMk5EX0RPV05MT0FERkxBR19PRkZTRVQsCisJCQkJZGV2LT5ibW1pbyArIFNBQV9ERVZJQ0VfMk5EX0RPV05MT0FEX09GRlNFVCwKKwkJCQlTQUFfREVWSUNFXzJORF9CVUZGRVJCTE9DS1NJWkUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlwcmludGsoS0VSTl9FUlIgImZpcm13YXJlIGRvd25sb2FkIGNvbXBsZXRlLlxuIik7CisKKwkJfSBlbHNlIHsKKworCQkJLyogTm8gYm9vdGxvYWRlciB1cGRhdGUgcmVxZCwgZG93bmxvYWQgZmlybXdhcmUgb25seSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJzdGFydGluZyBmaXJtd2FyZSBkb3dubG9hZCgzKVxuIik7CisKKwkJCXJldCA9IHNhYTcxNjRfZG93bmxvYWRpbWFnZSgKKwkJCQlkZXYsCisJCQkJKHU4ICopZnctPmRhdGEsCisJCQkJZnctPnNpemUsCisJCQkJU0FBX0RPV05MT0FEX0ZMQUdTLAorCQkJCWRldi0+Ym1taW8gKyBTQUFfREVWSUNFX0RPV05MT0FEX09GRlNFVCwKKwkJCQlTQUFfREVWSUNFX0JVRkZFUkJMT0NLU0laRSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0VSUiAiZmlybXdhcmUgZG93bmxvYWQgY29tcGxldGUuXG4iKTsKKwkJfQorCX0KKworCXJldCA9IDA7CisKK291dDoKKwlpZiAoZncpCisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhZTliMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWkyYy5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJzYWE3MTY0LmgiCisKK3N0YXRpYyBpbnQgaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IHNhYTcxNjRfaTJjICpidXMgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBzYWE3MTY0X2RldiAqZGV2ID0gYnVzLT5kZXY7CisJaW50IGksIHJldHZhbCA9IDA7CisKKwlkcHJpbnRrKERCR0xWTF9JMkMsICIlcyhudW0gPSAlZClcbiIsIF9fZnVuY19fLCBudW0pOworCisJZm9yIChpID0gMCA7IGkgPCBudW07IGkrKykgeworCQlkcHJpbnRrKERCR0xWTF9JMkMsICIlcyhudW0gPSAlZCkgYWRkciA9IDB4JTAyeCAgbGVuID0gMHgleFxuIiwKKwkJCV9fZnVuY19fLCBudW0sIG1zZ3NbaV0uYWRkciwgbXNnc1tpXS5sZW4pOworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiBVbnN1cHBvcnRlZCAtIFlldCovCisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgVW5zdXBwb3J0ZWQgLSBZZXRcbiIsIF9fZnVuY19fKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGkgKyAxIDwgbnVtICYmIChtc2dzW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSAmJgorCQkJICAgbXNnc1tpXS5hZGRyID09IG1zZ3NbaSArIDFdLmFkZHIpIHsKKwkJCS8qIHdyaXRlIHRoZW4gcmVhZCBmcm9tIHNhbWUgYWRkcmVzcyAqLworCisJCQlyZXR2YWwgPSBzYWE3MTY0X2FwaV9pMmNfcmVhZChidXMsIG1zZ3NbaV0uYWRkciwKKwkJCQltc2dzW2ldLmxlbiwgbXNnc1tpXS5idWYsCisJCQkJbXNnc1tpKzFdLmxlbiwgbXNnc1tpKzFdLmJ1ZgorCQkJCSk7CisKKwkJCWkrKzsKKworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJZ290byBlcnI7CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSAqLworCQkJcmV0dmFsID0gc2FhNzE2NF9hcGlfaTJjX3dyaXRlKGJ1cywgbXNnc1tpXS5hZGRyLAorCQkJCW1zZ3NbaV0ubGVuLCBtc2dzW2ldLmJ1Zik7CisJCX0KKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisJcmV0dXJuIG51bTsKKworIGVycjoKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIHNhYTcxNjRfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cywgdW5zaWduZWQgaW50IGNtZCwKKwl2b2lkICphcmcpCit7CisJaWYgKGJ1cy0+aTJjX3JjICE9IDApCisJCXJldHVybjsKKworCWkyY19jbGllbnRzX2NvbW1hbmQoJmJ1cy0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIHUzMiBzYWE3MTY0X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzYWE3MTY0X2kyY19hbGdvX3RlbXBsYXRlID0geworCS5tYXN0ZXJfeGZlcgk9IGkyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gc2FhNzE2NF9mdW5jdGlvbmFsaXR5LAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBzYWE3MTY0X2kyY19hZGFwX3RlbXBsYXRlID0geworCS5uYW1lICAgICAgICAgICAgICA9ICJzYWE3MTY0IiwKKwkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkuYWxnbyAgICAgICAgICAgICAgPSAmc2FhNzE2NF9pMmNfYWxnb190ZW1wbGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBzYWE3MTY0X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7CisJLm5hbWUJPSAic2FhNzE2NCBpbnRlcm5hbCIsCit9OworCitpbnQgc2FhNzE2NF9pMmNfcmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfaTJjICpidXMpCit7CisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYgPSBidXMtPmRldjsKKworCWRwcmludGsoREJHTFZMX0kyQywgIiVzKGJ1cyA9ICVkKVxuIiwgX19mdW5jX18sIGJ1cy0+bnIpOworCisJbWVtY3B5KCZidXMtPmkyY19hZGFwLCAmc2FhNzE2NF9pMmNfYWRhcF90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKGJ1cy0+aTJjX2FkYXApKTsKKworCW1lbWNweSgmYnVzLT5pMmNfYWxnbywgJnNhYTcxNjRfaTJjX2FsZ29fdGVtcGxhdGUsCisJICAgICAgIHNpemVvZihidXMtPmkyY19hbGdvKSk7CisKKwltZW1jcHkoJmJ1cy0+aTJjX2NsaWVudCwgJnNhYTcxNjRfaTJjX2NsaWVudF90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKGJ1cy0+aTJjX2NsaWVudCkpOworCisJYnVzLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJmRldi0+cGNpLT5kZXY7CisKKwlzdHJsY3B5KGJ1cy0+aTJjX2FkYXAubmFtZSwgYnVzLT5kZXYtPm5hbWUsCisJCXNpemVvZihidXMtPmkyY19hZGFwLm5hbWUpKTsKKworCWJ1cy0+aTJjX2FsZ28uZGF0YSA9IGJ1czsKKwlidXMtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGJ1czsKKwlpMmNfc2V0X2FkYXBkYXRhKCZidXMtPmkyY19hZGFwLCBidXMpOworCWkyY19hZGRfYWRhcHRlcigmYnVzLT5pMmNfYWRhcCk7CisKKwlidXMtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidXMtPmkyY19hZGFwOworCisJaWYgKDAgIT0gYnVzLT5pMmNfcmMpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXIgRkFJTEVEXG4iLAorCQkJZGV2LT5uYW1lLCBidXMtPm5yKTsKKworCXJldHVybiBidXMtPmkyY19yYzsKK30KKworaW50IHNhYTcxNjRfaTJjX3VucmVnaXN0ZXIoc3RydWN0IHNhYTcxNjRfaTJjICpidXMpCit7CisJaTJjX2RlbF9hZGFwdGVyKCZidXMtPmkyY19hZGFwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiZTRjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXJlZy5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIE5YUCBTQUE3MTY0IFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGV2ZW4gVG90aCA8c3RvdGhAa2VybmVsbGFicy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogVE9ETzogUmV0ZXN0IHRoZSBkcml2ZXIgd2l0aCBlcnJvcnMgZXhwcmVzc2VkIGFzIG5lZ2F0aXZlcyAqLworCisvKiBSZXN1bHQgY29kZXMgKi8KKyNkZWZpbmUgU0FBX09LCQkJCTAKKyNkZWZpbmUgU0FBX0VSUl9CQURfUEFSQU1FVEVSCQkweDA5CisjZGVmaW5lIFNBQV9FUlJfTk9fUkVTT1VSQ0VTCQkweDBjCisjZGVmaW5lIFNBQV9FUlJfTk9UX1NVUFBPUlRFRAkJMHgxMworI2RlZmluZSBTQUFfRVJSX0JVU1kJCQkweDE1CisjZGVmaW5lIFNBQV9FUlJfUkVBRAkJCTB4MTcKKyNkZWZpbmUgU0FBX0VSUl9USU1FT1VUCQkJMHgxZgorI2RlZmluZSBTQUFfRVJSX09WRVJGTE9XCQkweDIwCisjZGVmaW5lIFNBQV9FUlJfRU1QVFkJCQkweDIyCisjZGVmaW5lIFNBQV9FUlJfTk9UX1NUQVJURUQJCTB4MjMKKyNkZWZpbmUgU0FBX0VSUl9BTFJFQURZX1NUQVJURUQJCTB4MjQKKyNkZWZpbmUgU0FBX0VSUl9OT1RfU1RPUFBFRAkJMHgyNQorI2RlZmluZSBTQUFfRVJSX0FMUkVBRFlfU1RPUFBFRAkJMHgyNgorI2RlZmluZSBTQUFfRVJSX0lOVkFMSURfQ09NTUFORAkJMHgzZQorI2RlZmluZSBTQUFfRVJSX05VTExfUEFDS0VUCQkweDU5CisKKy8qIEVycm9ycyBhbmQgZmxhZ3MgZnJvbSB0aGUgc2lsaWNvbiAqLworI2RlZmluZSBQVkNfRVJST1JDT0RFX1VOS05PV04JCTB4MDAKKyNkZWZpbmUgUFZDX0VSUk9SQ09ERV9JTlZBTElEX0NPTU1BTkQJMHgwMQorI2RlZmluZSBQVkNfRVJST1JDT0RFX0lOVkFMSURfQ09OVFJPTAkweDAyCisjZGVmaW5lIFBWQ19FUlJPUkNPREVfSU5WQUxJRF9EQVRBCTB4MDMKKyNkZWZpbmUgUFZDX0VSUk9SQ09ERV9USU1FT1VUCQkweDA0CisjZGVmaW5lIFBWQ19FUlJPUkNPREVfTkFLCQkweDA1CisjZGVmaW5lIFBWQ19SRVNQT05TRUZMQUdfRVJST1IJCTB4MDEKKyNkZWZpbmUgUFZDX1JFU1BPTlNFRkxBR19PVkVSRkxPVwkweDAyCisjZGVmaW5lIFBWQ19SRVNQT05TRUZMQUdfUkVTRVQJCTB4MDQKKyNkZWZpbmUgUFZDX1JFU1BPTlNFRkxBR19JTlRFUkZBQ0UJMHgwOAorI2RlZmluZSBQVkNfUkVTUE9OU0VGTEFHX0NPTlRJTlVFRAkweDEwCisjZGVmaW5lIFBWQ19DTURGTEFHX0lOVEVSUlVQVAkJMHgwMgorI2RlZmluZSBQVkNfQ01ERkxBR19JTlRFUkZBQ0UJCTB4MDQKKyNkZWZpbmUgUFZDX0NNREZMQUdfU0VSSUFMSVpFCQkweDA4CisjZGVmaW5lIFBWQ19DTURGTEFHX0NPTlRJTlVFCQkweDEwCisKKy8qIFNpbGljb24gQ29tbWFuZHMgKi8KKyNkZWZpbmUgR0VUX0RFU0NSSVBUT1JTX0NPTlRST0wJCTB4MDEKKyNkZWZpbmUgR0VUX1NUUklOR19DT05UUk9MCQkweDAzCisjZGVmaW5lIEdFVF9MQU5HVUFHRV9DT05UUk9MCQkweDA1CisjZGVmaW5lIFNFVF9QT1dFUl9DT05UUk9MCQkweDA3CisjZGVmaW5lIEdFVF9GV19WRVJTSU9OX0NPTlRST0wJCTB4MDkKKyNkZWZpbmUgU0VUX0RFQlVHX0xFVkVMX0NPTlRST0wJCTB4MEIKKyNkZWZpbmUgR0VUX0RFQlVHX0RBVEFfQ09OVFJPTAkJMHgwQworI2RlZmluZSBHRVRfUFJPRFVDVElPTl9JTkZPX0NPTlRST0wJMHgwRAorCisvKiBjbWQgZGVmaW5lcyAqLworI2RlZmluZSBTQUFfQ01ERkxBR19DT05USU5VRQkJMHgxMAorI2RlZmluZSBTQUFfQ01EX01BWF9NU0dfVU5JVFMJCTI1NgorCisvKiBTb21lIGRlZmluZXMgKi8KKyNkZWZpbmUgU0FBX0JVU19USU1FT1VUCQkJNTAKKyNkZWZpbmUgU0FBX0RFVklDRV9USU1FT1VUCQk1MDAwCisjZGVmaW5lIFNBQV9ERVZJQ0VfTUFYUkVRVUVTVFNJWkUJMjU2CisKKy8qIFJlZ2lzdGVyIGFkZHJlc3NlcyAqLworI2RlZmluZSBTQUFfREVWSUNFX1ZFUlNJT04JCTB4MzAKKyNkZWZpbmUgU0FBX0RPV05MT0FEX0ZMQUdTCQkweDM0CisjZGVmaW5lIFNBQV9ET1dOTE9BRF9GTEFHCQkweDM0CisjZGVmaW5lIFNBQV9ET1dOTE9BRF9GTEFHX0FDSwkJMHgzOAorI2RlZmluZSBTQUFfREFUQVJFQURZX0ZMQUcJCTB4M0MKKyNkZWZpbmUgU0FBX0RBVEFSRUFEWV9GTEFHX0FDSwkJMHg0MAorCisvKiBCb290IGxvYWRlciByZWdpc3RlciBhbmQgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFNBQV9CT09UTE9BREVSRVJST1JfRkxBR1MJMHg0NAorI2RlZmluZSBTQUFfREVWSUNFX0lNQUdFX1NFQVJDSElORwkweDAxCisjZGVmaW5lIFNBQV9ERVZJQ0VfSU1BR0VfTE9BRElORwkweDAyCisjZGVmaW5lIFNBQV9ERVZJQ0VfSU1BR0VfQk9PVElORwkweDAzCisjZGVmaW5lIFNBQV9ERVZJQ0VfSU1BR0VfQ09SUlVQVAkweDA0CisjZGVmaW5lIFNBQV9ERVZJQ0VfTUVNT1JZX0NPUlJVUFQJMHgwOAorI2RlZmluZSBTQUFfREVWSUNFX05PX0lNQUdFCQkweDEwCisKKy8qIFJlZ2lzdGVyIGFkZHJlc3NlcyAqLworI2RlZmluZSBTQUFfREVWSUNFXzJORF9WRVJTSU9OCQkJMHg1MAorI2RlZmluZSBTQUFfREVWSUNFXzJORF9ET1dOTE9BREZMQUdfT0ZGU0VUCTB4NTQKKworLyogUmVnaXN0ZXIgYWRkcmVzc2VzICovCisjZGVmaW5lIFNBQV9TRUNPTkRTVEFHRUVSUk9SX0ZMQUdTCQkweDY0CisKKy8qIEJvb3Rsb2FkZXIgcmVncyBhbmQgZmxhZ3MgKi8KKyNkZWZpbmUgU0FBX0RFVklDRV9ERUFETE9DS19ERVRFQ1RFRF9PRkZTRVQJMHg2QworI2RlZmluZSBTQUFfREVWSUNFX0RFQURMT0NLX0RFVEVDVEVECQkweERFQURERUFECisKKy8qIEJhc2ljIGZpcm13YXJlIHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0FBX0RFVklDRV9TWVNJTklUX1NUQVRVU19PRkZTRVQJMHg3MAorI2RlZmluZSBTQUFfREVWSUNFX1NZU0lOSVRfU1RBVFVTCQkweDcwCisjZGVmaW5lIFNBQV9ERVZJQ0VfU1lTSU5JVF9NT0RFCQkJMHg3NAorI2RlZmluZSBTQUFfREVWSUNFX1NZU0lOSVRfU1BFQwkJCTB4NzgKKyNkZWZpbmUgU0FBX0RFVklDRV9TWVNJTklUX0lOU1QJCQkweDdDCisjZGVmaW5lIFNBQV9ERVZJQ0VfU1lTSU5JVF9DUFVMT0FECQkweDgwCisjZGVmaW5lIFNBQV9ERVZJQ0VfU1lTSU5JVF9SRU1BSU5IRUFQCQkweDg0CisKKyNkZWZpbmUgU0FBX0RFVklDRV9ET1dOTE9BRF9PRkZTRVQJCTB4MTAwMAorI2RlZmluZSBTQUFfREVWSUNFX0JVRkZFUkJMT0NLU0laRQkJMHgxMDAwCisKKyNkZWZpbmUgU0FBX0RFVklDRV8yTkRfQlVGRkVSQkxPQ0tTSVpFCQkweDEwMDAwMAorI2RlZmluZSBTQUFfREVWSUNFXzJORF9ET1dOTE9BRF9PRkZTRVQJCTB4MjAwMDAwCisKKy8qIERlc2NyaXB0b3JzICovCisjZGVmaW5lIENTX0lOVEVSRkFDRQkweDI0CisKKy8qIERlc2NyaXB0b3Igc3VidHlwZXMgKi8KKyNkZWZpbmUgVkNfSU5QVVRfVEVSTUlOQUwJCTB4MDIKKyNkZWZpbmUgVkNfT1VUUFVUX1RFUk1JTkFMCQkweDAzCisjZGVmaW5lIFZDX1NFTEVDVE9SX1VOSVQJCTB4MDQKKyNkZWZpbmUgVkNfUFJPQ0VTU0lOR19VTklUCQkweDA1CisjZGVmaW5lIEZFQVRVUkVfVU5JVAkJCTB4MDYKKyNkZWZpbmUgVFVORVJfVU5JVAkJCTB4MDkKKyNkZWZpbmUgRU5DT0RFUl9VTklUCQkJMHgwQQorI2RlZmluZSBFWFRFTlNJT05fVU5JVAkJCTB4MEIKKyNkZWZpbmUgVkNfVFVORVJfUEFUSAkJCTB4RjAKKyNkZWZpbmUgUFZDX0hBUkRXQVJFX0RFU0NSSVBUT1IJCTB4RjEKKyNkZWZpbmUgUFZDX0lOVEVSRkFDRV9ERVNDUklQVE9SCTB4RjIKKyNkZWZpbmUgUFZDX0lORlJBUkVEX1VOSVQJCTB4RjMKKyNkZWZpbmUgRFJNX1VOSVQJCQkweEY0CisjZGVmaW5lIEdFTkVSQUxfUkVRVUVTVAkJCTB4RjUKKworLyogRm9ybWF0IFR5cGVzICovCisjZGVmaW5lIFZTX0ZPUk1BVF9UWVBFICAgICAgICAgMHgwMgorI2RlZmluZSBWU19GT1JNQVRfVFlQRV9JICAgICAgIDB4MDEKKyNkZWZpbmUgVlNfRk9STUFUX1VOQ09NUFJFU1NFRCAweDA0CisjZGVmaW5lIFZTX0ZSQU1FX1VOQ09NUFJFU1NFRCAgMHgwNQorI2RlZmluZSBWU19GT1JNQVRfTVBFRzJQUyAgICAgIDB4MDkKKyNkZWZpbmUgVlNfRk9STUFUX01QRUcyVFMgICAgICAweDBBCisjZGVmaW5lIFZTX0ZPUk1BVF9NUEVHNFNMICAgICAgMHgwQgorI2RlZmluZSBWU19GT1JNQVRfV005ICAgICAgICAgIDB4MEMKKyNkZWZpbmUgVlNfRk9STUFUX0RJVlggICAgICAgICAweDBECisjZGVmaW5lIFZTX0ZPUk1BVF9WQkkgICAgICAgICAgMHgwRQorI2RlZmluZSBWU19GT1JNQVRfUkRTICAgICAgICAgIDB4MEYKKworLyogRGV2aWNlIGV4dGVuc2lvbiBjb21tYW5kcyAqLworI2RlZmluZSBFWFVfUkVHSVNURVJfQUNDRVNTX0NPTlRST0wJMHgwMAorI2RlZmluZSBFWFVfR1BJT19DT05UUk9MCQkweDAxCisjZGVmaW5lIEVYVV9HUElPX0dST1VQX0NPTlRST0wJCTB4MDIKKyNkZWZpbmUgRVhVX0lOVEVSUlVQVF9DT05UUk9MCQkweDAzCisKKy8qIFN0YXRlIFRyYW5zaXRpb24gYW5kIGFyZ3MgKi8KKyNkZWZpbmUgU0FBX1NUQVRFX0NPTlRST0wJMHgwMworI2RlZmluZSBTQUFfRE1BU1RBVEVfU1RPUAkweDAwCisjZGVmaW5lIFNBQV9ETUFTVEFURV9BQ1FVSVJFCTB4MDEKKyNkZWZpbmUgU0FBX0RNQVNUQVRFX1BBVVNFCTB4MDIKKyNkZWZpbmUgU0FBX0RNQVNUQVRFX1JVTgkweDAzCisKKy8qIEhhcmR3YXJlIHJlZ2lzdGVycyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC10eXBlcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA5M2YyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdHlwZXMuaApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBOWFAgU0FBNzE2NCBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RldmVuIFRvdGggPHN0b3RoQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFRPRE86IENsZWFudXAgYW5kIHNob3J0ZW4gdGhlIG5hbWVzcGFjZSAqLworCisvKiBTb21lIHN0cnVjdHVlcyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvL2Zyb20gdGhlIGZpcm13YXJlIGFuZAorICogaGF2ZSBzdHJpY3QgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gVGhpcyBpcyBvbmUgb2YgdGhlbS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CWJMZW5ndGg7CisJdTgJYkRlc2NyaXB0b3JUeXBlOworCXU4CWJEZXNjcmlwdG9yU3VidHlwZTsKKwl1MTYJYmNkU3BlY1ZlcnNpb247CisJdTMyCWR3Q2xvY2tGcmVxdWVuY3k7CisJdTMyCWR3Q2xvY2tVcGRhdGVSZXM7CisJdTgJYkNhcGFiaWxpdGllczsKKwl1MzIJZHdEZXZpY2VSZWdpc3RlcnNMb2NhdGlvbjsKKwl1MzIJZHdIb3N0TWVtb3J5UmVnaW9uOworCXUzMglkd0hvc3RNZW1vcnlSZWdpb25TaXplOworCXUzMglkd0hvc3RIaWJlcm5hdE1lbVJlZ2lvbjsKKwl1MzIJZHdIb3N0SGliZXJuYXRNZW1SZWdpb25TaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0bUNvbVJlc0hXRGVzY3JfdDsKKworLyogVGhpcyBpcyBEV09SRCBhbGlnbmVkIG9uIHdpbmRvd3MgYnV0IEkgY2FuJ3QgZmluZCB0aGUgcmlnaHQKKyAqIGdjYyBzeW50YXggdG8gbWF0Y2ggdGhlIGJpbmFyeSBkYXRhIGZyb20gdGhlIGRldmljZS4KKyAqIEkndmUgbWFudWFsbHkgcGFkZGVkIHdpdGggUmVzZXJ2ZWRbM10gYnl0ZXMgdG8gbWF0Y2ggdGhlIGhhcmR3YXJlLAorICogYnV0IHRoaXMgY291bGQgYnJlYWsgaWYgR0NDIGRlY2llcyB0byBwYWNrIGluIGEgZGlmZmVyZW50IHdheS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CWJMZW5ndGg7CisJdTgJYkRlc2NyaXB0b3JUeXBlOworCXU4CWJEZXNjcmlwdG9yU3VidHlwZTsKKwl1OAliRmxhZ3M7CisJdTgJYkludGVyZmFjZVR5cGU7CisJdTgJYkludGVyZmFjZUlkOworCXU4CWJCYXNlSW50ZXJmYWNlOworCXU4CWJJbnRlcnJ1cHRJZDsKKwl1OAliRGVidWdJbnRlcnJ1cHRJZDsKKwl1OAlCQVJMb2NhdGlvbjsKKwl1OAlSZXNlcnZlZFszXTsKK30gdG1Db21SZXNJbnRlcmZhY2VEZXNjcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0CUNvbW1hbmRSaW5nOworCXU2NAlSZXNwb25zZVJpbmc7CisJdTMyCUNvbW1hbmRXcml0ZTsKKwl1MzIJQ29tbWFuZFJlYWQ7CisJdTMyCVJlc3BvbnNlV3JpdGU7CisJdTMyCVJlc3BvbnNlUmVhZDsKK30gdG1Db21SZXNCdXNEZXNjcl90OworCit0eXBlZGVmIGVudW0geworCU5PTkUJCT0gMCwKKwlUWVBFX0JVU19QQ0kJPSAxLAorCVRZUEVfQlVTX1BDSWUJPSAyLAorCVRZUEVfQlVTX1VTQgk9IDMsCisJVFlQRV9CVVNfSTJDCT0gNAorfSB0bUJ1c1R5cGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXRtQnVzVHlwZV90IFR5cGU7CisJdTE2CW1fd01heFJlcVNpemU7CisJdTgJKm1fcGR3U2V0UmluZzsKKwl1MzIJbV9kd1NpemVTZXRSaW5nOworCXU4CSptX3Bkd0dldFJpbmc7CisJdTMyCW1fZHdTaXplR2V0UmluZzsKKwl1MzIJKm1fcGR3U2V0V3JpdGVQb3M7CisJdTMyCSptX3Bkd1NldFJlYWRQb3M7CisJdTMyCSptX3Bkd0dldFdyaXRlUG9zOworCXUzMgkqbV9wZHdHZXRSZWFkUG9zOworCisJLyogQWxsIGFjY2VzcyBpcyBwcm90ZWN0ZWQgKi8KKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKworfSB0bUNvbVJlc0J1c0luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CWlkOworCXU4CWZsYWdzOworCXUxNglzaXplOworCXUzMgljb21tYW5kOworCXUxNgljb250cm9sc2VsZWN0b3I7CisJdTgJc2Vxbm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRtQ29tUmVzSW5mb190OworCit0eXBlZGVmIGVudW0geworCVNFVF9DVVIgID0gMHgwMSwKKwlHRVRfQ1VSICA9IDB4ODEsCisJR0VUX01JTiAgPSAweDgyLAorCUdFVF9NQVggID0gMHg4MywKKwlHRVRfUkVTICA9IDB4ODQsCisJR0VUX0xFTiAgPSAweDg1LAorCUdFVF9JTkZPID0gMHg4NiwKKwlHRVRfREVGICA9IDB4ODcKK30gdG1Db21SZXNDbWRfdDsKKworc3RydWN0IGNtZCB7CisJdTggc2Vxbm87CisJdTMyIGludXNlOworCXUzMiB0aW1lb3V0OworCXUzMiBzaWduYWxsZWQ7CisJc3RydWN0IG11dGV4IGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIJcGF0aGlkOworCXUzMglzaXplOworCXZvaWQJKmRlc2NyaXB0b3I7Cit9IHRtRGVzY3JpcHRvcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTgJbGVuOworCXU4CXR5cGU7CisJdTgJc3VidHlwZTsKKwl1OAl1bml0aWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRtQ29tUmVzRGVzY3JIZWFkZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CWxlbjsKKwl1OAl0eXBlOworCXU4CXN1YnR5cGU7CisJdTgJdW5pdGlkOworCXUzMglkZXZpY2V0eXBlOworCXUxNglkZXZpY2VpZDsKKwl1MzIJbnVtZ3Bpb3BpbnM7CisJdTgJbnVtZ3Bpb2dyb3VwczsKKwl1OAljb250cm9sc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNFeHREZXZEZXNjckhlYWRlcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyCXBpbjsKKwl1OAlzdGF0ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNHUElPX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAlsZW47CisJdTgJdHlwZTsKKwl1OAlzdWJ0eXBlOworCXU4CXBhdGhpZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNQYXRoRGVzY3JIZWFkZXJfdDsKKworLyogdGVybWluYWx0eXBlICovCit0eXBlZGVmIGVudW0geworCUlUVF9BTlRFTk5BICAgICAgICAgICAgICA9IDB4MDIwMywKKwlMSU5FX0NPTk5FQ1RPUiAgICAgICAgICAgPSAweDA2MDMsCisJU1BESUZfQ09OTkVDVE9SICAgICAgICAgID0gMHgwNjA1LAorCUNPTVBPU0lURV9DT05ORUNUT1IgICAgICA9IDB4MDQwMSwKKwlTVklERU9fQ09OTkVDVE9SICAgICAgICAgPSAweDA0MDIsCisJQ09NUE9ORU5UX0NPTk5FQ1RPUiAgICAgID0gMHgwNDAzLAorCVNUQU5EQVJEX0RNQSAgICAgICAgICAgICA9IDB4RjEwMQorfSB0bUNvbVJlc1Rlcm1UeXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAlsZW47CisJdTgJdHlwZTsKKwl1OAlzdWJ0eXBlOworCXU4CXRlcm1pbmFsaWQ7CisJdTE2CXRlcm1pbmFsdHlwZTsKKwl1OAlhc3NvY3Rlcm1pbmFsOworCXU4CWl0ZXJtaW5hbDsKKwl1OAljb250cm9sc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNBbnRUZXJtRGVzY3JIZWFkZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CWxlbjsKKwl1OAl0eXBlOworCXU4CXN1YnR5cGU7CisJdTgJdW5pdGlkOworCXU4CXNvdXJjZWlkOworCXU4CWl1bml0OworCXUzMgl0dW5pbmdzdGFuZGFyZHM7CisJdTgJY29udHJvbHNpemU7CisJdTMyCWNvbnRyb2xzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0bUNvbVJlc1R1bmVyRGVzY3JIZWFkZXJfdDsKKwordHlwZWRlZiBlbnVtIHsKKwkvKiB0aGUgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gYW55IHZhbGlkIGRhdGEgKi8KKwlUTV9CVUZGRVJfRkxBR19FTVBUWSwKKworCS8qIHRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGggdmFsaWQgZGF0YSAqLworCVRNX0JVRkZFUl9GTEFHX0RPTkUsCisKKwkvKiB0aGUgYnVmZmVyIGlzIHRoZSBkdW1teSBidWZmZXIgLSBUT0RPPz8/ICovCisJVE1fQlVGRkVSX0ZMQUdfRFVNTVlfQlVGRkVSCit9IHRtQnVmZmVyRmxhZ190OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0CQkqcGFnZXRhYmxldmlydDsKKwl1NjQJCXBhZ2V0YWJsZXBoeXM7CisJdTE2CQlvZmZzZXQ7CisJdTgJCSpjb250ZXh0OworCXU2NAkJdGltZXN0YW1wOworCXRtQnVmZmVyRmxhZ190CUJ1ZmZlckZsYWdfdDsKKwl1MzIJCWxvc3RidWZmZXJzOworCXUzMgkJdmFsaWRidWZmZXJzOworCXU2NAkJKmR1bW15cGFnZXZpcnQ7CisJdTY0CQlkdW1teXBhZ2VwaHlzOworCXU2NAkJKmFkZHJlc3N2aXJ0OworfSB0bUJ1ZmZlcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyCWJpdHNwZXJzYW1wbGU7CisJdTMyCXNhbXBsZXNwZXJsaW5lOworCXUzMgludW1iZXJvZmxpbmVzOworCXUzMglwaXRjaDsKKwl1MzIJbGluZXRocmVzaG9sZDsKKwl1NjQJKipwYWdldGFibGVsaXN0dmlydDsKKwl1NjQJKnBhZ2V0YWJsZWxpc3RwaHlzOworCXUzMgludW1wYWdldGFibGVzOworCXUzMgludW1wYWdldGFibGVlbnRyaWVzOworfSB0bUhXU3RyZWFtUGFyYW1ldGVyc190OworCit0eXBlZGVmIHN0cnVjdCB7CisJdG1IV1N0cmVhbVBhcmFtZXRlcnNfdAkJSFdTdHJlYW1QYXJhbWV0ZXJzX3Q7CisJdTY0CQkJCXF3RHVtbXlQYWdlVGFibGVQaHlzOworCXU2NAkJCQkqcER1bW15UGFnZVRhYmxlVmlydDsKK30gdG1TdHJlYW1QYXJhbWV0ZXJzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAlsZW47CisJdTgJdHlwZTsKKwl1OAlzdWJ0eWxlOworCXU4CXVuaXRpZDsKKwl1MTYJdGVybWluYWx0eXBlOworCXU4CWFzc29jdGVybWluYWw7CisJdTgJc291cmNlaWQ7CisJdTgJaXRlcm1pbmFsOworCXUzMglCQVJMb2NhdGlvbjsKKwl1OAlmbGFnczsKKwl1OAlpbnRlcnJ1cHRpZDsKKwl1OAlidWZmZXJjb3VudDsKKwl1OAltZXRhZGF0YXNpemU7CisJdTgJbnVtZm9ybWF0czsKKwl1OAljb250cm9sc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdG1Db21SZXNETUFUZXJtRGVzY3JIZWFkZXJfdDsKKworLyoKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGlzIHRoZSB0cmFuc3BvcnQgc3RyZWFtIGZvcm1hdCBoZWFkZXIuCisgKgorICogU2V0dGluZ3M6CisgKiAgYkxlbmd0aCAgICAgICAgICAgICAgICAgLSBUaGUgc2l6ZSBvZiB0aGlzIGRlc2NyaXB0b3IgaW4gYnl0ZXMuCisgKiAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgLSBDU19JTlRFUkZBQ0UuCisgKiAgYkRlc2NyaXB0b3JTdWJ0eXBlICAgICAgLSBWU19GT1JNQVRfTVBFRzJUUyBkZXNjcmlwdG9yIHN1YnR5cGUuCisgKiAgYkZvcm1hdEluZGV4ICAgICAgICAgICAgLSBBIG5vbi16ZXJvIGNvbnN0YW50IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC4KKyAqICBiRGF0YU9mZnNldCAgICAgICAgICAgICAtIE9mZnNldCB0byBUU1AgcGFja2V0IHdpdGhpbiBNUEVHLTIgVFMgdHJhbnNwb3J0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGUsIGluIGJ5dGVzLgorICogIGJQYWNrZXRMZW5ndGggICAgICAgICAgIC0gTGVuZ3RoIG9mIFRTUCBwYWNrZXQsIGluIGJ5dGVzICh0eXBpY2FsbHkgMTg4KS4KKyAqICBiU3RyaWRlTGVuZ3RoICAgICAgICAgICAtIExlbmd0aCBvZiBNUEVHLTIgVFMgdHJhbnNwb3J0IHN0cmlkZS4KKyAqICBndWlkU3RyaWRlRm9ybWF0ICAgICAgICAtIEEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgaW5kaWNhdGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBvZiB0aGUgc3RyaWRlIGRhdGEgKGlmIGFueSkuIFNldCB0byB6ZXJvcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlcmUgaXMgbm8gU3RyaWRlIERhdGEsIG9yIGlmIHRoZSBTdHJpZGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgaXMgdG8gYmUgaWdub3JlZCBieSB0aGUgYXBwbGljYXRpb24uCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdTgJbGVuOworCXU4CXR5cGU7CisJdTgJc3VidHlwZTsKKwl1OAliRm9ybWF0SW5kZXg7CisJdTgJYkRhdGFPZmZzZXQ7CisJdTgJYlBhY2tldExlbmd0aDsKKwl1OAliU3RyaWRlTGVuZ3RoOworCXU4CWd1aWRTdHJpZGVGb3JtYXRbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0bUNvbVJlc1RTRm9ybWF0RGVzY3JIZWFkZXJfdDsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1MzAwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LmgKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgTlhQIFNBQTcxNjQgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXZlbiBUb3RoIDxzdG90aEBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorCURyaXZlciBhcmNoaXRlY3R1cmUKKwkqKioqKioqKioqKioqKioqKioqCisKKwlzYWE3MTY0X2NvcmUuYy9idWZmZXIuYy9jYXJkcy5jL2kyYy5jL2R2Yi5jCisJCXwJOiBTdGFuZGFyZCBMaW51eCBkcml2ZXIgZnJhbWV3b3JrIGZvciBjcmVhdGluZworCQl8CTogZXhwb3NpbmcgYW5kIG1hbmFnaW5nIGludGVyZmFjZXMgdG8gdGhlIHJlc3QKKwkJfAk6IG9mIHRoZSBrZXJuZWwgb3IgdXNlcmxhbmQuIEFsc28gdXNlcyBfZncuYyB0byBsb2FkCisJCXwJOiBmaXJtd2FyZSBkaXJlY3QgaW50byB0aGUgUENJZSBidXMsIGJ5cGFzc2luZyBsYXllcnMuCisJCVYKKwlzYWE3MTY0X2FwaS4uKCkJOiBUcmFuc2xhdGUga2VybmVsIHNwZWNpZmljIGZ1bmN0aW9ucy9mZWF0dXJlcworCQl8CTogaW50byBjb21tYW5kIGJ1ZmZlcnMuCisJCVYKKwlzYWE3MTY0X2NtZC4uKCkJOiBNYW5hZ2VzIHRoZSBmbG93IG9mIGNvbW1hbmQgcGFja2V0cyBvbi9vZmYsCisJCXwJOiB0aGUgYnVzLiBEZWFsIHdpdGggYnVzIGVycm9ycywgdGltZW91dHMgZXRjLgorCQlWCisJc2FhNzE2NF9idXMuLigpIDogTWFuYWdlIGEgcmVhZC93cml0ZSBtZW1vcnkgcmluZyBidWZmZXIgaW4gdGhlCisJCXwJOiBQQ0llIEFkZHJlc3Mgc3BhY2UuCisJCXwKKwkJfAkJc2FhNzE2NF9mdy4uLigpCTogTG9hZCBhbnkgZnJpbXdhcmUKKwkJfAkJCXwJOiBkaXJlY3QgaW50byB0aGUgZGV2aWNlCisJCVYJCQlWCisJPC0gLS0tLS0tLS0tLS0tLS0tLS0gUENJZSBhZGRyZXNzIHNwYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0+CisqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZHZiLmg+CisKKyNpbmNsdWRlICJzYWE3MTY0LXJlZy5oIgorI2luY2x1ZGUgInNhYTcxNjQtdHlwZXMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjZGVmaW5lIFNBQTcxNjRfTUFYQk9BUkRTIDgKKworI2RlZmluZSBVTlNFVCAoLTFVKQorI2RlZmluZSBTQUE3MTY0X0JPQVJEX05PQVVUTwkJCVVOU0VUCisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfVU5LTk9XTgkJCTAKKyNkZWZpbmUgU0FBNzE2NF9CT0FSRF9VTktOT1dOX1JFVjIJCTEKKyNkZWZpbmUgU0FBNzE2NF9CT0FSRF9VTktOT1dOX1JFVjMJCTIKKyNkZWZpbmUgU0FBNzE2NF9CT0FSRF9IQVVQUEFVR0VfSFZSMjI1MAkJMworI2RlZmluZSBTQUE3MTY0X0JPQVJEX0hBVVBQQVVHRV9IVlIyMjAwCQk0CisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMgk1CisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyMDBfMwk2CisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTBfMgk3CisjZGVmaW5lIFNBQTcxNjRfQk9BUkRfSEFVUFBBVUdFX0hWUjIyNTBfMwk4CisKKyNkZWZpbmUgU0FBNzE2NF9NQVhfVU5JVFMJCTgKKyNkZWZpbmUgU0FBNzE2NF9UU19OVU1CRVJfT0ZfTElORVMJMzEyCisjZGVmaW5lIFNBQTcxNjRfUFRfRU5UUklFUwkJMTYgLyogKDMxMiAqIDE4OCkgLyA0MDk2ICovCisKKyNkZWZpbmUgREJHTFZMX0ZXICAgIDQKKyNkZWZpbmUgREJHTFZMX0RWQiAgIDgKKyNkZWZpbmUgREJHTFZMX0kyQyAgMTYKKyNkZWZpbmUgREJHTFZMX0FQSSAgMzIKKyNkZWZpbmUgREJHTFZMX0NNRCAgNjQKKyNkZWZpbmUgREJHTFZMX0JVUyAxMjgKKyNkZWZpbmUgREJHTFZMX0lSUSAyNTYKKyNkZWZpbmUgREJHTFZMX0JVRiA1MTIKKworZW51bSBwb3J0X3QgeworCVNBQTcxNjRfTVBFR19VTkRFRklORUQgPSAwLAorCVNBQTcxNjRfTVBFR19EVkIsCit9OworCitlbnVtIHNhYTcxNjRfaTJjX2J1c19uciB7CisJU0FBNzE2NF9JMkNfQlVTXzAgPSAwLAorCVNBQTcxNjRfSTJDX0JVU18xLAorCVNBQTcxNjRfSTJDX0JVU18yLAorfTsKKworZW51bSBzYWE3MTY0X2J1ZmZlcl9mbGFncyB7CisJU0FBNzE2NF9CVUZGRVJfVU5ERUZJTkVEID0gMCwKKwlTQUE3MTY0X0JVRkZFUl9GUkVFLAorCVNBQTcxNjRfQlVGRkVSX0JVU1ksCisJU0FBNzE2NF9CVUZGRVJfRlVMTAorfTsKKworZW51bSBzYWE3MTY0X3VuaXRfdHlwZSB7CisJU0FBNzE2NF9VTklUX1VOREVGSU5FRCA9IDAsCisJU0FBNzE2NF9VTklUX0RJR0lUQUxfREVNT0RVTEFUT1IsCisJU0FBNzE2NF9VTklUX0FOQUxPR19ERU1PRFVMQVRPUiwKKwlTQUE3MTY0X1VOSVRfVFVORVIsCisJU0FBNzE2NF9VTklUX0VFUFJPTSwKKwlTQUE3MTY0X1VOSVRfWklMT0dfSVJCTEFTVEVSLAorCVNBQTcxNjRfVU5JVF9FTkNPREVSLAorfTsKKworLyogVGhlIFBDSWUgYnJpZGdlIGRvZXNuJ3QgZ3JhbnQgZGlyZWN0IGFjY2VzcyB0byBpMmMuCisgKiBJbnN0ZWFkLCB5b3UgYWRkcmVzcyBpMmMgZGV2aWNlcyB1c2luZyBhIHVuaXFlbHkKKyAqIGFsbG9jYXRlZCAndW5pdGlkJyB2YWx1ZSB2aWEgYSBtZXNzYWdpbmcgQVBJLiBUaGlzCisgKiBpcyBhIHByb2JsZW0uIFRoZSBrZXJuZWwgYW5kIGV4aXN0aW5nIGRlbW9kL3R1bmVyCisgKiBkcml2ZXJzIGV4cGVjdCB0byB0YWxrICdpMmMnLCBzbyB3ZSBoYXZlIHRvIG1haW50YWluCisgKiBhIHRyYW5zbGF0aW9uIGxheWVyLCBhbmQgYSBzZXJpZXMgb2YgZnVuY3Rpb25zIHRvCisgKiBjb252ZXJ0IGkyYyBidXMgKyBkZXZpY2UgYWRkcmVzcyBpbnRvIGEgdW5pdCBpZC4KKyAqLworc3RydWN0IHNhYTcxNjRfdW5pdCB7CisJZW51bSBzYWE3MTY0X3VuaXRfdHlwZSB0eXBlOworCXU4CWlkOworCWNoYXIJKm5hbWU7CisJZW51bSBzYWE3MTY0X2kyY19idXNfbnIgaTJjX2J1c19ucjsKKwl1OAlpMmNfYnVzX2FkZHI7CisJdTgJaTJjX3JlZ19sZW47Cit9OworCitzdHJ1Y3Qgc2FhNzE2NF9ib2FyZCB7CisJY2hhcgkqbmFtZTsKKwllbnVtIHBvcnRfdCBwb3J0YSwgcG9ydGI7CisJZW51bSB7CisJCVNBQTcxNjRfQ0hJUF9VTkRFRklORUQgPSAwLAorCQlTQUE3MTY0X0NISVBfUkVWMiwKKwkJU0FBNzE2NF9DSElQX1JFVjMsCisJfSBjaGlwcmV2OworCXN0cnVjdAlzYWE3MTY0X3VuaXQgdW5pdFtTQUE3MTY0X01BWF9VTklUU107Cit9OworCitzdHJ1Y3Qgc2FhNzE2NF9zdWJpZCB7CisJdTE2ICAgICBzdWJ2ZW5kb3I7CisJdTE2ICAgICBzdWJkZXZpY2U7CisJdTMyICAgICBjYXJkOworfTsKKworc3RydWN0IHNhYTcxNjRfZndfc3RhdHVzIHsKKworCS8qIFJJU0MgQ29yZSBkZXRhaWxzICovCisJdTMyCXN0YXR1czsKKwl1MzIJbW9kZTsKKwl1MzIJc3BlYzsKKwl1MzIJaW5zdDsKKwl1MzIJY3B1bG9hZDsKKwl1MzIJcmVtYWluaGVhcDsKKworCS8qIEZpcm13YXJlIHZlcnNpb24gKi8KKwl1MzIJdmVyc2lvbjsKKwl1MzIJbWFqb3I7CisJdTMyCXN1YjsKKwl1MzIJcmVsOworCXUzMglidWlsZG5yOworfTsKKworc3RydWN0IHNhYTcxNjRfZHZiIHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmcm9udGVuZDsKKwlzdHJ1Y3QgZHZiX2RlbXV4IGRlbXV4OworCXN0cnVjdCBkbXhkZXYgZG14ZGV2OworCXN0cnVjdCBkbXhfZnJvbnRlbmQgZmVfaHc7CisJc3RydWN0IGRteF9mcm9udGVuZCBmZV9tZW07CisJc3RydWN0IGR2Yl9uZXQgbmV0OworCWludCBmZWVkaW5nOworfTsKKworc3RydWN0IHNhYTcxNjRfaTJjIHsKKwlzdHJ1Y3Qgc2FhNzE2NF9kZXYJCSpkZXY7CisKKwllbnVtIHNhYTcxNjRfaTJjX2J1c19ucgkJbnI7CisKKwkvKiBJMkMgSS9PICovCisJc3RydWN0IGkyY19hZGFwdGVyCQlpMmNfYWRhcDsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEJaTJjX2FsZ287CisJc3RydWN0IGkyY19jbGllbnQJCWkyY19jbGllbnQ7CisJdTMyCQkJCWkyY19yYzsKK307CisKK3N0cnVjdCBzYWE3MTY0X3RzcG9ydDsKKworc3RydWN0IHNhYTcxNjRfYnVmZmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwl1MzIgbnI7CisKKwlzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQ7CisKKwkvKiBIYXJkd2FyZSBTcGVjaWZpYyAqLworCS8qIFBDSSBNZW1vcnkgYWxsb2NhdGlvbnMgKi8KKwllbnVtIHNhYTcxNjRfYnVmZmVyX2ZsYWdzIGZsYWdzOyAvKiBGcmVlLCBCdXN5LCBGdWxsICovCisKKwkvKiBBIGJsb2NrIG9mIHBhZ2UgYWxpZ24gUENJIG1lbW9yeSAqLworCXUzMiBwY2lfc2l6ZTsJLyogUENJIGFsbG9jYXRpb24gc2l6ZSBpbiBieXRlcyAqLworCXU2NCAqY3B1OwkvKiBWaXJ0dWFsIGFkZHJlc3MgKi8KKwlkbWFfYWRkcl90IGRtYTsJLyogUGh5c2ljYWwgYWRkcmVzcyAqLworCisJLyogQSBwYWdlIHRhYmxlIHRoYXQgc3BsaXRzIHRoZSBibG9jayBpbnRvIGEgbnVtYmVyIG9mIGVudHJpZXMgKi8KKwl1MzIgcHRfc2l6ZTsJCS8qIFBDSSBhbGxvY2F0aW9uIHNpemUgaW4gYnl0ZXMgKi8KKwl1NjQgKnB0X2NwdTsJCS8qIFZpcnR1YWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QgcHRfZG1hOwkvKiBQaHlzaWNhbCBhZGRyZXNzICovCit9OworCitzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgeworCisJc3RydWN0IHNhYTcxNjRfZGV2ICpkZXY7CisJaW50IG5yOworCWVudW0gcG9ydF90IHR5cGU7CisKKwlzdHJ1Y3Qgc2FhNzE2NF9kdmIgZHZiOworCisJLyogSFcgcmVsYXRlZCBzdHJlYW0gcGFyYW1ldGVycyAqLworCXRtSFdTdHJlYW1QYXJhbWV0ZXJzX3QgaHdfc3RyZWFtaW5ncGFyYW1zOworCisJLyogRE1BIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCBpcyBzZWVkZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCisJdG1Db21SZXNETUFUZXJtRGVzY3JIZWFkZXJfdCBod2NmZzsKKworCS8qIGhhcmR3YXJlIHNwZWNpZmljIHJlZ2lzdGVycyAqLworCXUzMiBidWZjb3VudGVyOworCXUzMiBwaXRjaDsKKwl1MzIgYnVmc2l6ZTsKKwl1MzIgYnVmb2Zmc2V0OworCXUzMiBidWZwdHIzMmw7CisJdTMyIGJ1ZnB0cjMyaDsKKwl1NjQgYnVmcHRyNjQ7CisKKwl1MzIgbnVtcHRlOwkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiBhcnJheSwgb25seSB2YWxpZCBpbiBoZWFkICovCisJc3RydWN0IG11dGV4IGRtYXF1ZXVlX2xvY2s7CisJc3RydWN0IG11dGV4IGR1bW15X2RtYXF1ZXVlX2xvY2s7CisJc3RydWN0IHNhYTcxNjRfYnVmZmVyIGRtYXF1ZXVlOworCXN0cnVjdCBzYWE3MTY0X2J1ZmZlciBkdW1teV9kbWFxdWV1ZTsKKworfTsKKworc3RydWN0IHNhYTcxNjRfZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRldmxpc3Q7CisJYXRvbWljX3QJCXJlZmNvdW50OworCisJLyogcGNpIHN0dWZmICovCisJc3RydWN0IHBjaV9kZXYJKnBjaTsKKwl1bnNpZ25lZCBjaGFyCXBjaV9yZXYsIHBjaV9sYXQ7CisJaW50CQlwY2lfYnVzLCBwY2lfc2xvdDsKKwl1MzIJCV9faW9tZW0gKmxtbWlvOworCXU4CQlfX2lvbWVtICpibW1pbzsKKwl1MzIJCV9faW9tZW0gKmxtbWlvMjsKKwl1OAkJX19pb21lbSAqYm1taW8yOworCWludAkJcGNpX2lycW1hc2s7CisKKwkvKiBib2FyZCBkZXRhaWxzICovCisJaW50CW5yOworCWludAlod3JldmlzaW9uOworCXUzMglib2FyZDsKKwljaGFyCW5hbWVbMzJdOworCisJLyogZmlybXdhcmUgc3RhdHVzICovCisJc3RydWN0IHNhYTcxNjRfZndfc3RhdHVzCWZ3X3N0YXR1czsKKworCXRtQ29tUmVzSFdEZXNjcl90CQlod2Rlc2M7CisJdG1Db21SZXNJbnRlcmZhY2VEZXNjcl90CWludGZkZXNjOworCXRtQ29tUmVzQnVzRGVzY3JfdAkJYnVzZGVzYzsKKworCXRtQ29tUmVzQnVzSW5mb190CQlidXM7CisKKwkvKiBJbnRlcnJ1cHQgc3RhdHVzIGFuZCBhY2sgcmVnaXN0ZXJzICovCisJdTMyIGludF9zdGF0dXM7CisJdTMyIGludF9hY2s7CisKKwlzdHJ1Y3QgY21kCQkJY21kc1tTQUFfQ01EX01BWF9NU0dfVU5JVFNdOworCXN0cnVjdCBtdXRleAkJCWxvY2s7CisKKwkvKiBJMmMgcmVsYXRlZCAqLworCXN0cnVjdCBzYWE3MTY0X2kyYyBpMmNfYnVzWzNdOworCisJLyogVHJhbnNwb3J0IHJlbGF0ZWQgKi8KKwlzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgdHMxLCB0czI7CisKKwkvKiBEZWZlcnJlZCBjb21tYW5kL2FwaSBpbnRlcnJ1cHRzIGhhbmRsaW5nICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtjbWQ7CisKK307CisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHNhYTcxNjRfZGV2bGlzdDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgd2FpdHNlY3M7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwordm9pZCBzYWE3MTY0X2R1bXByZWdzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1MzIgYWRkcik7Cit2b2lkIHNhYTcxNjRfZHVtcGhleDE2KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCAqYnVmLCBpbnQgbGVuKTsKK3ZvaWQgc2FhNzE2NF9nZXRmaXJtd2FyZXN0YXR1cyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7Cit1MzIgc2FhNzE2NF9nZXRjdXJyZW50ZmlybXdhcmV2ZXJzaW9uKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHNhYTcxNjQtZncuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitpbnQgc2FhNzE2NF9kb3dubG9hZGZpcm13YXJlKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHNhYTcxNjQtaTJjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitleHRlcm4gaW50IHNhYTcxNjRfaTJjX3JlZ2lzdGVyKHN0cnVjdCBzYWE3MTY0X2kyYyAqYnVzKTsKK2V4dGVybiBpbnQgc2FhNzE2NF9pMmNfdW5yZWdpc3RlcihzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cyk7CitleHRlcm4gdm9pZCBzYWE3MTY0X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IHNhYTcxNjRfaTJjICpidXMsCisJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHNhYTcxNjQtYnVzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitpbnQgc2FhNzE2NF9idXNfc2V0dXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpOwordm9pZCBzYWE3MTY0X2J1c19kdW1wKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKK2ludCBzYWE3MTY0X2J1c19zZXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHRtQ29tUmVzSW5mb190KiBtc2csIHZvaWQgKmJ1Zik7CitpbnQgc2FhNzE2NF9idXNfZ2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB0bUNvbVJlc0luZm9fdCogbXNnLAorCXZvaWQgKmJ1ZiwgaW50IHBlZWtvbmx5KTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHNhYTcxNjQtY21kLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitpbnQgc2FhNzE2NF9jbWRfc2VuZChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwKKwl1OCBpZCwgdG1Db21SZXNDbWRfdCBjb21tYW5kLCB1MTYgY29udHJvbHNlbGVjdG9yLAorCXUxNiBzaXplLCB2b2lkICpidWYpOwordm9pZCBzYWE3MTY0X2NtZF9zaWduYWwoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHNlcW5vKTsKK2ludCBzYWE3MTY0X2lycV9kZXF1ZXVlKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHNhYTcxNjQtYXBpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitpbnQgc2FhNzE2NF9hcGlfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHUzMiAqdmVyc2lvbik7CitpbnQgc2FhNzE2NF9hcGlfZW51bV9zdWJkZXZzKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKK2ludCBzYWE3MTY0X2FwaV9pMmNfcmVhZChzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cywgdTggYWRkciwgdTMyIHJlZ2xlbiwgdTggKnJlZywKKwl1MzIgZGF0YWxlbiwgdTggKmRhdGEpOworaW50IHNhYTcxNjRfYXBpX2kyY193cml0ZShzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cywgdTggYWRkciwKKwl1MzIgZGF0YWxlbiwgdTggKmRhdGEpOworaW50IHNhYTcxNjRfYXBpX2RpZl93cml0ZShzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cywgdTggYWRkciwKKwl1MzIgZGF0YWxlbiwgdTggKmRhdGEpOworaW50IHNhYTcxNjRfYXBpX3JlYWRfZWVwcm9tKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCB1OCAqYnVmLCBpbnQgYnVmbGVuKTsKK2ludCBzYWE3MTY0X2FwaV9zZXRfZ3Bpb2JpdChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggdW5pdGlkLCB1OCBwaW4pOworaW50IHNhYTcxNjRfYXBpX2NsZWFyX2dwaW9iaXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHVuaXRpZCwgdTggcGluKTsKK2ludCBzYWE3MTY0X2FwaV90cmFuc2l0aW9uX3BvcnQoc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0LCB1OCBtb2RlKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHNhYTcxNjQtY2FyZHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitleHRlcm4gc3RydWN0IHNhYTcxNjRfYm9hcmQgc2FhNzE2NF9ib2FyZHNbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzE2NF9iY291bnQ7CisKK2V4dGVybiBzdHJ1Y3Qgc2FhNzE2NF9zdWJpZCBzYWE3MTY0X3N1Ymlkc1tdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTY0X2lkY291bnQ7CisKK2V4dGVybiB2b2lkIHNhYTcxNjRfY2FyZF9saXN0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIHNhYTcxNjRfZ3Bpb19zZXR1cChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7CitleHRlcm4gdm9pZCBzYWE3MTY0X2NhcmRfc2V0dXAoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpOworCitleHRlcm4gaW50IHNhYTcxNjRfaTJjYWRkcl90b19yZWdsZW4oc3RydWN0IHNhYTcxNjRfaTJjICpidXMsIGludCBhZGRyKTsKK2V4dGVybiBpbnQgc2FhNzE2NF9pMmNhZGRyX3RvX3VuaXRpZChzdHJ1Y3Qgc2FhNzE2NF9pMmMgKmJ1cywgaW50IGFkZHIpOworZXh0ZXJuIGNoYXIgKnNhYTcxNjRfdW5pdGlkX25hbWUoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHVuaXRpZCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWR2Yi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworZXh0ZXJuIGludCBzYWE3MTY0X2R2Yl9yZWdpc3RlcihzdHJ1Y3Qgc2FhNzE2NF90c3BvcnQgKnBvcnQpOworZXh0ZXJuIGludCBzYWE3MTY0X2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzYWE3MTY0LWJ1ZmZlci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworZXh0ZXJuIHN0cnVjdCBzYWE3MTY0X2J1ZmZlciAqc2FhNzE2NF9idWZmZXJfYWxsb2Moc3RydWN0IHNhYTcxNjRfdHNwb3J0ICpwb3J0LAorCXUzMiBsZW4pOworZXh0ZXJuIGludCBzYWE3MTY0X2J1ZmZlcl9kZWFsbG9jKHN0cnVjdCBzYWE3MTY0X3RzcG9ydCAqcG9ydCwKKwlzdHJ1Y3Qgc2FhNzE2NF9idWZmZXIgKmJ1Zik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZGVidWc7CisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKVwKKwlkbyB7IGlmIChkZWJ1ZyAmIGxldmVsKVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgZGV2LT5uYW1lLCAjIyBhcmcpO1wKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGxvZ193YXJuKGZtdCwgYXJnLi4uKVwKKwlkbyB7IFwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm10LCBkZXYtPm5hbWUsICMjIGFyZyk7XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbG9nX2VycihmbXQsIGFyZy4uLilcCisJZG8geyBcCisJCXByaW50ayhLRVJOX0VSUk9SICIlczogIiBmbXQsIGRldi0+bmFtZSwgIyMgYXJnKTtcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBzYWE3MTY0X3JlYWRsKHJlZykgcmVhZGwoZGV2LT5sbW1pbyArICgocmVnKSA+PiAyKSkKKyNkZWZpbmUgc2FhNzE2NF93cml0ZWwocmVnLCB2YWx1ZSkgd3JpdGVsKCh2YWx1ZSksIGRldi0+bG1taW8gKyAoKHJlZykgPj4gMikpCisKKworI2RlZmluZSBzYWE3MTY0X3JlYWRiKHJlZykgICAgICAgICAgICAgcmVhZGwoZGV2LT5ibW1pbyArIChyZWcpKQorI2RlZmluZSBzYWE3MTY0X3dyaXRlYihyZWcsIHZhbHVlKSAgICAgd3JpdGVsKCh2YWx1ZSksIGRldi0+Ym1taW8gKyAocmVnKSkKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDYxYzQ3YjguLjVhYjdjNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTc0LDYgKzc0LDEzIEBACiAjZGVmaW5lIENEQllSMiAweDk4IC8qIENhcHR1cmUgZGF0YSBib3R0b20tZmllbGQgYWRkcmVzcyBZIHJlZ2lzdGVyIDIgKi8KICNkZWZpbmUgQ0RCQ1IyIDB4OWMgLyogQ2FwdHVyZSBkYXRhIGJvdHRvbS1maWVsZCBhZGRyZXNzIEMgcmVnaXN0ZXIgMiAqLwogCisjdW5kZWYgREVCVUdfR0VPTUVUUlkKKyNpZmRlZiBERUJVR19HRU9NRVRSWQorI2RlZmluZSBkZXZfZ2VvCWRldl9pbmZvCisjZWxzZQorI2RlZmluZSBkZXZfZ2VvCWRldl9kYmcKKyNlbmRpZgorCiAvKiBwZXIgdmlkZW8gZnJhbWUgYnVmZmVyICovCiBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgewogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7IC8qIHY0bCBidWZmZXIgbXVzdCBiZSBmaXJzdCAqLwpAQCAtOTIsMTAgKzk5LDIxIEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgY2FwdHVyZTsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICphY3RpdmU7Ci0JaW50IGlzX2ludGVybGFjZWQ7CiAKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9pbmZvICpwZGF0YTsKIAorCXUzMiBjZmxjcjsKKworCXVuc2lnbmVkIGludCBpc19pbnRlcmxhY2VkOjE7CisJdW5zaWduZWQgaW50IGltYWdlX21vZGU6MTsKKwl1bnNpZ25lZCBpbnQgaXNfMTZiaXQ6MTsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSB7CisJc3RydWN0IHY0bDJfcmVjdCBjZXVfcmVjdDsKKwl1bnNpZ25lZCBpbnQgY2FtX3dpZHRoOworCXVuc2lnbmVkIGludCBjYW1faGVpZ2h0OworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpleHRyYV9mbXQ7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbWVyYV9mbXQ7CiB9OwogCkBAIC0xNDYsNyArMTY0LDggQEAKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCWludCBieXRlc19wZXJfcGl4ZWwgPSAoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzOwogCi0JKnNpemUgPSBQQUdFX0FMSUdOKGljZC0+d2lkdGggKiBpY2QtPmhlaWdodCAqIGJ5dGVzX3Blcl9waXhlbCk7CisJKnNpemUgPSBQQUdFX0FMSUdOKGljZC0+dXNlcl93aWR0aCAqIGljZC0+dXNlcl9oZWlnaHQgKgorCQkJICAgYnl0ZXNfcGVyX3BpeGVsKTsKIAogCWlmICgwID09ICpjb3VudCkKIAkJKmNvdW50ID0gMjsKQEAgLTE1Niw3ICsxNzUsNyBAQAogCQkJKCpjb3VudCktLTsKIAl9CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKKwlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY1LDggKzE4NCw5IEBACiAJCQlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlemRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJXpkXG4iLCBfX2Z1bmNfXywKIAkJJmJ1Zi0+dmIsIGJ1Zi0+dmIuYmFkZHIsIGJ1Zi0+dmIuYnNpemUpOwogCiAJaWYgKGluX2ludGVycnVwdCgpKQpAQCAtMTc0LDcgKzE5NCw3IEBACiAKIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOwogCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgJmJ1Zi0+dmIpOwotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgZnJlZWRcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgIiVzIGZyZWVkXG4iLCBfX2Z1bmNfXyk7CiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CiB9CiAKQEAgLTIwNSw3ICsyMjUsNyBAQAogCXBoeXNfYWRkcl90b3AgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHBjZGV2LT5hY3RpdmUpOwogCWNldV93cml0ZShwY2RldiwgQ0RBWVIsIHBoeXNfYWRkcl90b3ApOwogCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlZCkgewotCQlwaHlzX2FkZHJfYm90dG9tID0gcGh5c19hZGRyX3RvcCArIGljZC0+d2lkdGg7CisJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsgaWNkLT51c2VyX3dpZHRoOwogCQljZXVfd3JpdGUocGNkZXYsIENEQllSLCBwaHlzX2FkZHJfYm90dG9tKTsKIAl9CiAKQEAgLTIxNCwxMCArMjM0LDEyIEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjE2OgogCWNhc2UgVjRMMl9QSVhfRk1UX05WNjE6Ci0JCXBoeXNfYWRkcl90b3AgKz0gaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0OworCQlwaHlzX2FkZHJfdG9wICs9IGljZC0+dXNlcl93aWR0aCAqCisJCQlpY2QtPnVzZXJfaGVpZ2h0OwogCQljZXVfd3JpdGUocGNkZXYsIENEQUNSLCBwaHlzX2FkZHJfdG9wKTsKIAkJaWYgKHBjZGV2LT5pc19pbnRlcmxhY2VkKSB7Ci0JCQlwaHlzX2FkZHJfYm90dG9tID0gcGh5c19hZGRyX3RvcCArIGljZC0+d2lkdGg7CisJCQlwaHlzX2FkZHJfYm90dG9tID0gcGh5c19hZGRyX3RvcCArCisJCQkJaWNkLT51c2VyX3dpZHRoOwogCQkJY2V1X3dyaXRlKHBjZGV2LCBDREJDUiwgcGh5c19hZGRyX2JvdHRvbSk7CiAJCX0KIAl9CkBAIC0yMzYsNyArMjU4LDcgQEAKIAogCWJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyLCB2Yik7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlemRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJLyogQWRkZWQgbGlzdCBoZWFkIGluaXRpYWxpemF0aW9uIG9uIGFsbG9jICovCkBAIC0yNTEsMTIgKzI3MywxMiBAQAogCUJVR19PTihOVUxMID09IGljZC0+Y3VycmVudF9mbXQpOwogCiAJaWYgKGJ1Zi0+Zm10CSE9IGljZC0+Y3VycmVudF9mbXQgfHwKLQkgICAgdmItPndpZHRoCSE9IGljZC0+d2lkdGggfHwKLQkgICAgdmItPmhlaWdodAkhPSBpY2QtPmhlaWdodCB8fAorCSAgICB2Yi0+d2lkdGgJIT0gaWNkLT51c2VyX3dpZHRoIHx8CisJICAgIHZiLT5oZWlnaHQJIT0gaWNkLT51c2VyX2hlaWdodCB8fAogCSAgICB2Yi0+ZmllbGQJIT0gZmllbGQpIHsKIAkJYnVmLT5mbXQJPSBpY2QtPmN1cnJlbnRfZm10OwotCQl2Yi0+d2lkdGgJPSBpY2QtPndpZHRoOwotCQl2Yi0+aGVpZ2h0CT0gaWNkLT5oZWlnaHQ7CisJCXZiLT53aWR0aAk9IGljZC0+dXNlcl93aWR0aDsKKwkJdmItPmhlaWdodAk9IGljZC0+dXNlcl9oZWlnaHQ7CiAJCXZiLT5maWVsZAk9IGZpZWxkOwogCQl2Yi0+c3RhdGUJPSBWSURFT0JVRl9ORUVEU19JTklUOwogCX0KQEAgLTI4OSw3ICszMTEsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlemRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwpAQCAtMzA0LDYgKzMyNiwyNyBAQAogc3RhdGljIHZvaWQgc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCiAJCQkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogeworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwY2Rldi0+YWN0aXZlID09IHZiKSB7CisJCS8qIGRpc2FibGUgY2FwdHVyZSAocmVsZWFzZSBETUEgYnVmZmVyKSwgcmVzZXQgKi8KKwkJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMSA8PCAxNik7CisJCXBjZGV2LT5hY3RpdmUgPSBOVUxMOworCX0KKworCWlmICgodmItPnN0YXRlID09IFZJREVPQlVGX0FDVElWRSB8fCB2Yi0+c3RhdGUgPT0gVklERU9CVUZfUVVFVUVEKSAmJgorCSAgICAhbGlzdF9lbXB0eSgmdmItPnF1ZXVlKSkgeworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOworCiAJZnJlZV9idWZmZXIodnEsIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyLCB2YikpOwogfQogCkBAIC0zMjMsNiArMzY2LDEwIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CiAKIAl2YiA9IHBjZGV2LT5hY3RpdmU7CisJaWYgKCF2YikKKwkJLyogU3RhbGUgaW50ZXJydXB0IGZyb20gYSByZWxlYXNlZCBidWZmZXIgKi8KKwkJZ290byBvdXQ7CisKIAlsaXN0X2RlbF9pbml0KCZ2Yi0+cXVldWUpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZwY2Rldi0+Y2FwdHVyZSkpCkBAIC0zMzcsNiArMzg0LDggQEAKIAlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CiAJdmItPmZpZWxkX2NvdW50Kys7CiAJd2FrZV91cCgmdmItPmRvbmUpOworCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTM0NywyOCArMzk2LDIzIEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKLQlpbnQgcmV0ID0gLUVCVVNZOwogCiAJaWYgKHBjZGV2LT5pY2QpCi0JCWdvdG8gZXJyOworCQlyZXR1cm4gLUVCVVNZOwogCi0JZGV2X2luZm8oJmljZC0+ZGV2LAorCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwKIAkJICJTdXBlckggTW9iaWxlIENFVSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAogCQkgaWNkLT5kZXZudW0pOwogCi0JcmV0ID0gaWNkLT5vcHMtPmluaXQoaWNkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaWNpLT5kZXYpOworCWNsa19lbmFibGUocGNkZXYtPmNsayk7CiAKIAljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAxIDw8IDE2KTsgLyogcmVzZXQgKi8KIAl3aGlsZSAoY2V1X3JlYWQocGNkZXYsIENTVFNSKSAmIDEpCiAJCW1zbGVlcCgxKTsKIAogCXBjZGV2LT5pY2QgPSBpY2Q7Ci1lcnI6Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiAwOwogfQogCiAvKiBDYWxsZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCkBAIC0zOTQsMjUgKzQzOCwxNTEgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKIAotCXBtX3J1bnRpbWVfcHV0X3N5bmMoaWNpLT5kZXYpOworCWNsa19kaXNhYmxlKHBjZGV2LT5jbGspOwogCi0JaWNkLT5vcHMtPnJlbGVhc2UoaWNkKTsKLQotCWRldl9pbmZvKCZpY2QtPmRldiwKKwlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsCiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGRldGFjaGVkIGZyb20gY2FtZXJhICVkXG4iLAogCQkgaWNkLT5kZXZudW0pOwogCiAJcGNkZXYtPmljZCA9IE5VTEw7CiB9CiAKKy8qCisgKiBTZWUgY2hhcHRlciAyOS40LjEyICJDYXB0dXJlIEZpbHRlciBDb250cm9sIFJlZ2lzdGVyIChDRkxDUikiCisgKiBpbiBTSDc3MjIgSGFyZHdhcmUgTWFudWFsCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2l6ZV9kc3QodW5zaWduZWQgaW50IHNyYywgdW5zaWduZWQgaW50IHNjYWxlKQoreworCXVuc2lnbmVkIGludCBtYW50X3ByZSA9IHNjYWxlID4+IDEyOworCWlmICghc3JjIHx8ICFzY2FsZSkKKwkJcmV0dXJuIHNyYzsKKwlyZXR1cm4gKChtYW50X3ByZSArIDIgKiAoc3JjIC0gMSkpIC8gKDIgKiBtYW50X3ByZSkgLSAxKSAqCisJCW1hbnRfcHJlICogNDA5NiAvIHNjYWxlICsgMTsKK30KKworc3RhdGljIHUxNiBjYWxjX3NjYWxlKHVuc2lnbmVkIGludCBzcmMsIHVuc2lnbmVkIGludCAqZHN0KQoreworCXUxNiBzY2FsZTsKKworCWlmIChzcmMgPT0gKmRzdCkKKwkJcmV0dXJuIDA7CisKKwlzY2FsZSA9IChzcmMgKiA0MDk2IC8gKmRzdCkgJiB+NzsKKworCXdoaWxlIChzY2FsZSA+IDQwOTYgJiYgc2l6ZV9kc3Qoc3JjLCBzY2FsZSkgPCAqZHN0KQorCQlzY2FsZSAtPSA4OworCisJKmRzdCA9IHNpemVfZHN0KHNyYywgc2NhbGUpOworCisJcmV0dXJuIHNjYWxlOworfQorCisvKiByZWN0IGlzIGd1YXJhbnRlZWQgdG8gbm90IGV4Y2VlZCB0aGUgc2NhbGVkIGNhbWVyYSByZWN0YW5nbGUgKi8KK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9jZXVfc2V0X3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgdW5zaWduZWQgaW50IG91dF93aWR0aCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgb3V0X2hlaWdodCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OworCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmY2FtLT5jZXVfcmVjdDsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXVuc2lnbmVkIGludCBoZWlnaHQsIHdpZHRoLCBjZHdkcl93aWR0aCwgaW5fd2lkdGgsIGluX2hlaWdodDsKKwl1bnNpZ25lZCBpbnQgbGVmdF9vZmZzZXQsIHRvcF9vZmZzZXQ7CisJdTMyIGNhbW9yOworCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJDcm9wICV1eCV1QCV1OiV1XG4iLAorCQlyZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5sZWZ0LCByZWN0LT50b3ApOworCisJbGVmdF9vZmZzZXQJPSByZWN0LT5sZWZ0OworCXRvcF9vZmZzZXQJPSByZWN0LT50b3A7CisKKwlpZiAocGNkZXYtPmltYWdlX21vZGUpIHsKKwkJaW5fd2lkdGggPSByZWN0LT53aWR0aDsKKwkJaWYgKCFwY2Rldi0+aXNfMTZiaXQpIHsKKwkJCWluX3dpZHRoICo9IDI7CisJCQlsZWZ0X29mZnNldCAqPSAyOworCQl9CisJCXdpZHRoID0gY2R3ZHJfd2lkdGggPSBvdXRfd2lkdGg7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IHdfZmFjdG9yID0gKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMzsKKworCQl3aWR0aCA9IG91dF93aWR0aCAqIHdfZmFjdG9yIC8gMjsKKworCQlpZiAoIXBjZGV2LT5pc18xNmJpdCkKKwkJCXdfZmFjdG9yICo9IDI7CisKKwkJaW5fd2lkdGggPSByZWN0LT53aWR0aCAqIHdfZmFjdG9yIC8gMjsKKwkJbGVmdF9vZmZzZXQgPSBsZWZ0X29mZnNldCAqIHdfZmFjdG9yIC8gMjsKKworCQljZHdkcl93aWR0aCA9IHdpZHRoICogMjsKKwl9CisKKwloZWlnaHQgPSBvdXRfaGVpZ2h0OworCWluX2hlaWdodCA9IHJlY3QtPmhlaWdodDsKKwlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKKwkJaGVpZ2h0IC89IDI7CisJCWluX2hlaWdodCAvPSAyOworCQl0b3Bfb2Zmc2V0IC89IDI7CisJCWNkd2RyX3dpZHRoICo9IDI7CisJfQorCisJLyogU2V0IENBTU9SLCBDQVBXUiwgQ0ZTWlIsIHRha2UgY2FyZSBvZiBDRFdEUiAqLworCWNhbW9yID0gbGVmdF9vZmZzZXQgfCAodG9wX29mZnNldCA8PCAxNik7CisKKwlkZXZfZ2VvKGljZC0+ZGV2LnBhcmVudCwKKwkJIkNBTU9SIDB4JXgsIENBUFdSIDB4JXgsIENGU1pSIDB4JXgsIENEV0RSIDB4JXhcbiIsIGNhbW9yLAorCQkoaW5faGVpZ2h0IDw8IDE2KSB8IGluX3dpZHRoLCAoaGVpZ2h0IDw8IDE2KSB8IHdpZHRoLAorCQljZHdkcl93aWR0aCk7CisKKwljZXVfd3JpdGUocGNkZXYsIENBTU9SLCBjYW1vcik7CisJY2V1X3dyaXRlKHBjZGV2LCBDQVBXUiwgKGluX2hlaWdodCA8PCAxNikgfCBpbl93aWR0aCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDRlNaUiwgKGhlaWdodCA8PCAxNikgfCB3aWR0aCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDRFdEUiwgY2R3ZHJfd2lkdGgpOworfQorCitzdGF0aWMgdTMyIGNhcHR1cmVfc2F2ZV9yZXNldChzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2KQoreworCXUzMiBjYXBzciA9IGNldV9yZWFkKHBjZGV2LCBDQVBTUik7CisJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMSA8PCAxNik7IC8qIHJlc2V0LCBzdG9wIGNhcHR1cmUgKi8KKwlyZXR1cm4gY2Fwc3I7Cit9CisKK3N0YXRpYyB2b2lkIGNhcHR1cmVfcmVzdG9yZShzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2LCB1MzIgY2Fwc3IpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFo7CisKKwkvKgorCSAqIFdhaXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZS4gSXQgY2FuIHRha2UgYSBsb25nIHRpbWUsCisJICogYnV0IGlmIGl0IGhhcyBiZWVuIGFib3J0ZWQgYnkgYSBDQVBTUiByZXNldCwgaXQgc2hvdWxlIGV4aXQgc29vbmVyLgorCSAqLworCXdoaWxlICgoY2V1X3JlYWQocGNkZXYsIENTVFNSKSAmIDEpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCQltc2xlZXAoMSk7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQlkZXZfZXJyKHBjZGV2LT5pY2kudjRsMl9kZXYuZGV2LAorCQkJIlRpbWVvdXQgd2FpdGluZyBmb3IgZnJhbWUgZW5kISBJbnRlcmZhY2UgcHJvYmxlbT9cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogV2FpdCB1bnRpbCByZXNldCBjbGVhcnMsIHRoaXMgc2hhbGwgbm90IGhhbmcuLi4gKi8KKwl3aGlsZSAoY2V1X3JlYWQocGNkZXYsIENBUFNSKSAmICgxIDw8IDE2KSkKKwkJdWRlbGF5KDEwKTsKKworCS8qIEFueXRoaW5nIHRvIHJlc3RvcmU/ICovCisJaWYgKGNhcHNyICYgfigxIDw8IDE2KSkKKwkJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgY2Fwc3IpOworfQorCiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgICAgICAgX191MzIgcGl4Zm10KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JaW50IHJldCwgYnVzd2lkdGgsIHdpZHRoLCBoZWlnaHQsIGNmc3pyX3dpZHRoLCBjZHdkcl93aWR0aDsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3MsIHZhbHVlOwotCWludCB5dXZfbW9kZSwgeXV2X2xpbmVza2lwOworCWludCB5dXZfbGluZXNraXA7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfY2FtICpjYW0gPSBpY2QtPmhvc3RfcHJpdjsKKwl1MzIgY2Fwc3IgPSBjYXB0dXJlX3NhdmVfcmVzZXQocGNkZXYpOwogCiAJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOwogCWNvbW1vbl9mbGFncyA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLApAQCAtNDI2LDEwICs1OTYsMTAgQEAKIAogCXN3aXRjaCAoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0spIHsKIAljYXNlIFNPQ0FNX0RBVEFXSURUSF84OgotCQlidXN3aWR0aCA9IDg7CisJCXBjZGV2LT5pc18xNmJpdCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgU09DQU1fREFUQVdJRFRIXzE2OgotCQlidXN3aWR0aCA9IDE2OworCQlwY2Rldi0+aXNfMTZiaXQgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQzOSw3ICs2MDksNyBAQAogCWNldV93cml0ZShwY2RldiwgQ1JDTVBSLCAwKTsKIAogCXZhbHVlID0gMHgwMDAwMDAxMDsgLyogZGF0YSBmZXRjaCBieSBkZWZhdWx0ICovCi0JeXV2X21vZGUgPSB5dXZfbGluZXNraXAgPSAwOworCXl1dl9saW5lc2tpcCA9IDA7CiAKIAlzd2l0Y2ggKGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYykgewogCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6CkBAIC00NDgsOCArNjE4LDcgQEAKIAkJLyogZmFsbC10aHJvdWdoICovCiAJY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjoKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgotCQl5dXZfbW9kZSA9IDE7Ci0JCXN3aXRjaCAocGNkZXYtPmNhbWVyYV9mbXQtPmZvdXJjYykgeworCQlzd2l0Y2ggKGNhbS0+Y2FtZXJhX2ZtdC0+Zm91cmNjKSB7CiAJCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CiAJCQl2YWx1ZSA9IDB4MDAwMDAwMDA7IC8qIENiMCwgWTAsIENyMCwgWTEgKi8KIAkJCWJyZWFrOwpAQCAtNDczLDM2ICs2NDIsMTYgQEAKIAogCXZhbHVlIHw9IGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgPyAxIDw8IDEgOiAwOwogCXZhbHVlIHw9IGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgPyAxIDw8IDAgOiAwOwotCXZhbHVlIHw9IGJ1c3dpZHRoID09IDE2ID8gMSA8PCAxMiA6IDA7CisJdmFsdWUgfD0gcGNkZXYtPmlzXzE2Yml0ID8gMSA8PCAxMiA6IDA7CiAJY2V1X3dyaXRlKHBjZGV2LCBDQU1DUiwgdmFsdWUpOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBDUiwgMHgwMDMwMDAwMCk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDQUlGUiwgcGNkZXYtPmlzX2ludGVybGFjZWQgPyAweDEwMSA6IDApOwogCisJc2hfbW9iaWxlX2NldV9zZXRfcmVjdChpY2QsIGljZC0+dXNlcl93aWR0aCwgaWNkLT51c2VyX2hlaWdodCk7CiAJbWRlbGF5KDEpOwogCi0JaWYgKHl1dl9tb2RlKSB7Ci0JCXdpZHRoID0gaWNkLT53aWR0aCAqIDI7Ci0JCXdpZHRoID0gYnVzd2lkdGggPT0gMTYgPyB3aWR0aCAvIDIgOiB3aWR0aDsKLQkJY2ZzenJfd2lkdGggPSBjZHdkcl93aWR0aCA9IGljZC0+d2lkdGg7Ci0JfSBlbHNlIHsKLQkJd2lkdGggPSBpY2QtPndpZHRoICogKChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCArIDcpID4+IDMpOwotCQl3aWR0aCA9IGJ1c3dpZHRoID09IDE2ID8gd2lkdGggLyAyIDogd2lkdGg7Ci0JCWNmc3pyX3dpZHRoID0gYnVzd2lkdGggPT0gOCA/IHdpZHRoIC8gMiA6IHdpZHRoOwotCQljZHdkcl93aWR0aCA9IGJ1c3dpZHRoID09IDE2ID8gd2lkdGggKiAyIDogd2lkdGg7Ci0JfQotCi0JaGVpZ2h0ID0gaWNkLT5oZWlnaHQ7Ci0JaWYgKHBjZGV2LT5pc19pbnRlcmxhY2VkKSB7Ci0JCWhlaWdodCAvPSAyOwotCQljZHdkcl93aWR0aCAqPSAyOwotCX0KLQotCWNldV93cml0ZShwY2RldiwgQ0FNT1IsIDApOwotCWNldV93cml0ZShwY2RldiwgQ0FQV1IsIChoZWlnaHQgPDwgMTYpIHwgd2lkdGgpOwotCWNldV93cml0ZShwY2RldiwgQ0ZMQ1IsIDApOyAvKiBubyBzY2FsaW5nICovCi0JY2V1X3dyaXRlKHBjZGV2LCBDRlNaUiwgKGhlaWdodCA8PCAxNikgfCBjZnN6cl93aWR0aCk7Ci0JY2V1X3dyaXRlKHBjZGV2LCBDTEZDUiwgMCk7IC8qIG5vIGxvd3Bhc3MgZmlsdGVyICovCisJY2V1X3dyaXRlKHBjZGV2LCBDRkxDUiwgcGNkZXYtPmNmbGNyKTsKIAogCS8qIEEgZmV3IHdvcmRzIGFib3V0IGJ5dGUgb3JkZXIgKG9ic2VydmVkIGluIEJpZyBFbmRpYW4gbW9kZSkKIAkgKgpAQCAtNTIxLDEwICs2NzAsMTUgQEAKIAkJdmFsdWUgJj0gfjB4MDAwMDAwMTA7IC8qIGNvbnZlcnQgNDoyOjIgLT4gNDoyOjAgKi8KIAogCWNldV93cml0ZShwY2RldiwgQ0RPQ1IsIHZhbHVlKTsKLQotCWNldV93cml0ZShwY2RldiwgQ0RXRFIsIGNkd2RyX3dpZHRoKTsKIAljZXVfd3JpdGUocGNkZXYsIENGV0NSLCAwKTsgLyoga2VlcCAiZGF0YWZldGNoIGZpcmV3YWxsIiBkaXNhYmxlZCAqLwogCisJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJTX0ZNVCBzdWNjZXNzZnVsIGZvciAlYyVjJWMlYyAldXgldVxuIiwKKwkJcGl4Zm10ICYgMHhmZiwgKHBpeGZtdCA+PiA4KSAmIDB4ZmYsCisJCShwaXhmbXQgPj4gMTYpICYgMHhmZiwgKHBpeGZtdCA+PiAyNCkgJiAweGZmLAorCQlpY2QtPnVzZXJfd2lkdGgsIGljZC0+dXNlcl9oZWlnaHQpOworCisJY2FwdHVyZV9yZXN0b3JlKHBjZGV2LCBjYXBzcik7CisKIAkvKiBub3QgaW4gYnVuZGxlIG1vZGU6IHNraXAgQ0JEU1IsIENEQVlSMiwgQ0RBQ1IyLCBDREJZUjIsIENEQkNSMiAqLwogCXJldHVybiAwOwogfQpAQCAtNTc0LDI0ICs3MjgsMzUgQEAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9nZXRfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGlkeCwKIAkJCQkgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCWludCByZXQsIGssIG47CiAJaW50IGZvcm1hdHMgPSAwOworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtOwogCiAJcmV0ID0gc2hfbW9iaWxlX2NldV90cnlfYnVzX3BhcmFtKGljZCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwogCisJaWYgKCFpY2QtPmhvc3RfcHJpdikgeworCQljYW0gPSBremFsbG9jKHNpemVvZigqY2FtKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FtKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJaWNkLT5ob3N0X3ByaXYgPSBjYW07CisJfSBlbHNlIHsKKwkJY2FtID0gaWNkLT5ob3N0X3ByaXY7CisJfQorCiAJLyogQmVnaW5uaW5nIG9mIGEgcGFzcyAqLwogCWlmICghaWR4KQotCQlpY2QtPmhvc3RfcHJpdiA9IE5VTEw7CisJCWNhbS0+ZXh0cmFfZm10ID0gTlVMTDsKIAogCXN3aXRjaCAoaWNkLT5mb3JtYXRzW2lkeF0uZm91cmNjKSB7CiAJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKIAljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgogCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CiAJY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKLQkJaWYgKGljZC0+aG9zdF9wcml2KQorCQlpZiAoY2FtLT5leHRyYV9mbXQpCiAJCQlnb3RvIGFkZF9zaW5nbGVfZm9ybWF0OwogCiAJCS8qCkBAIC02MDMsNyArNzY4LDcgQEAKIAkJICogdGhlIGhvc3RfcHJpdiBwb2ludGVyIGFuZCBjaGVjayB3aGV0aGVyIHRoZSBmb3JtYXQgeW91J3JlCiAJCSAqIGdvaW5nIHRvIGFkZCBub3cgaXMgYWxyZWFkeSB0aGVyZS4KIAkJICovCi0JCWljZC0+aG9zdF9wcml2ID0gKHZvaWQgKilzaF9tb2JpbGVfY2V1X2Zvcm1hdHM7CisJCWNhbS0+ZXh0cmFfZm10ID0gKHZvaWQgKilzaF9tb2JpbGVfY2V1X2Zvcm1hdHM7CiAKIAkJbiA9IEFSUkFZX1NJWkUoc2hfbW9iaWxlX2NldV9mb3JtYXRzKTsKIAkJZm9ybWF0cyArPSBuOwpAQCAtNjEyLDcgKzc3Nyw3IEBACiAJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKIAkJCXhsYXRlLT5idXN3aWR0aCA9IGljZC0+Zm9ybWF0c1tpZHhdLmRlcHRoOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoaWNpLT5kZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAorCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAogCQkJCXNoX21vYmlsZV9jZXVfZm9ybWF0c1trXS5uYW1lLAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CkBAIC02MjUsNyArNzkwLDcgQEAKIAkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwogCQkJeGxhdGUtPmJ1c3dpZHRoID0gaWNkLT5mb3JtYXRzW2lkeF0uZGVwdGg7CiAJCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhpY2ktPmRldiwKKwkJCWRldl9kYmcoZGV2LAogCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CkBAIC02MzQsODIgKzc5OSw3MTQgQEAKIAlyZXR1cm4gZm9ybWF0czsKIH0KIAotc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCSAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9jZXVfcHV0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0JcmV0dXJuIGljZC0+b3BzLT5zZXRfY3JvcChpY2QsIHJlY3QpOworCWtmcmVlKGljZC0+aG9zdF9wcml2KTsKKwlpY2QtPmhvc3RfcHJpdiA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCSBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCisvKiBDaGVjayBpZiBhbnkgZGltZW5zaW9uIG9mIHIxIGlzIHNtYWxsZXIgdGhhbiByZXNwZWN0aXZlIG9uZSBvZiByMiAqLworc3RhdGljIGJvb2wgaXNfc21hbGxlcihzdHJ1Y3QgdjRsMl9yZWN0ICpyMSwgc3RydWN0IHY0bDJfcmVjdCAqcjIpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKLQlfX3UzMiBwaXhmbXQgPSBmLT5mbXQucGl4LnBpeGVsZm9ybWF0OwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7Ci0Jc3RydWN0IHY0bDJfZm9ybWF0IGNhbV9mID0gKmY7CisJcmV0dXJuIHIxLT53aWR0aCA8IHIyLT53aWR0aCB8fCByMS0+aGVpZ2h0IDwgcjItPmhlaWdodDsKK30KKworLyogQ2hlY2sgaWYgcjEgZmFpbHMgdG8gY292ZXIgcjIgKi8KK3N0YXRpYyBib29sIGlzX2luc2lkZShzdHJ1Y3QgdjRsMl9yZWN0ICpyMSwgc3RydWN0IHY0bDJfcmVjdCAqcjIpCit7CisJcmV0dXJuIHIxLT5sZWZ0ID4gcjItPmxlZnQgfHwgcjEtPnRvcCA+IHIyLT50b3AgfHwKKwkJcjEtPmxlZnQgKyByMS0+d2lkdGggPCByMi0+bGVmdCArIHIyLT53aWR0aCB8fAorCQlyMS0+dG9wICsgcjEtPmhlaWdodCA8IHIyLT50b3AgKyByMi0+aGVpZ2h0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNjYWxlX2Rvd24odW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBzY2FsZSkKK3sKKwlyZXR1cm4gKHNpemUgKiA0MDk2ICsgc2NhbGUgLyAyKSAvIHNjYWxlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNjYWxlX3VwKHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgc2NhbGUpCit7CisJcmV0dXJuIChzaXplICogc2NhbGUgKyAyMDQ4KSAvIDQwOTY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19nZW5lcmljX3NjYWxlKHVuc2lnbmVkIGludCBpbnB1dCwgdW5zaWduZWQgaW50IG91dHB1dCkKK3sKKwlyZXR1cm4gKGlucHV0ICogNDA5NiArIG91dHB1dCAvIDIpIC8gb3V0cHV0OworfQorCitzdGF0aWMgaW50IGNsaWVudF9nX3JlY3Qoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7CisJc3RydWN0IHY0bDJfY3JvcGNhcCBjYXA7CiAJaW50IHJldDsKIAotCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwotCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwljcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19jcm9wLCAmY3JvcCk7CisJaWYgKCFyZXQpIHsKKwkJKnJlY3QgPSBjcm9wLmM7CisJCXJldHVybiByZXQ7CiAJfQogCi0JY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7Ci0JcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCAmY2FtX2YpOworCS8qIENhbWVyYSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IC5nX2Nyb3AoKSwgYXNzdW1lIGRlZmF1bHQgcmVjdGFuZ2xlICovCisJY2FwLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAKLQlpZiAoIXJldCkgewotCQlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOwotCQlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OwotCQlwY2Rldi0+Y2FtZXJhX2ZtdCA9IHhsYXRlLT5jYW1fZm10OworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBjcm9wY2FwLCAmY2FwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSpyZWN0ID0gY2FwLmRlZnJlY3Q7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIGNvbW1vbiBmb3IgYm90aCBzY2FsaW5nIGFuZCBjcm9wcGluZyBpdGVyYXRpdmUgYXBwcm9hY2ggaXM6CisgKiAxLiB0cnkgaWYgdGhlIGNsaWVudCBjYW4gcHJvZHVjZSBleGFjdGx5IHdoYXQgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyCisgKiAyLiBpZiAoMSkgZmFpbGVkLCB0cnkgdG8gZG91YmxlIHRoZSBjbGllbnQgaW1hZ2UgdW50aWwgd2UgZ2V0IG9uZSBiaWcgZW5vdWdoCisgKiAzLiBpZiAoMikgZmFpbGVkLCB0cnkgdG8gcmVxdWVzdCB0aGUgbWF4aW11bSBpbWFnZQorICovCitzdGF0aWMgaW50IGNsaWVudF9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCwKKwkJCSBzdHJ1Y3QgdjRsMl9jcm9wICpjYW1fY3JvcCkKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmNyb3AtPmMsICpjYW1fcmVjdCA9ICZjYW1fY3JvcC0+YzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzZC0+djRsMl9kZXYtPmRldjsKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwIGNhcDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworCisJdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfY3JvcCwgY3JvcCk7CisJcmV0ID0gY2xpZW50X2dfcmVjdChzZCwgY2FtX3JlY3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBOb3cgY2FtX2Nyb3AgY29udGFpbnMgdGhlIGN1cnJlbnQgY2FtZXJhIGlucHV0IHJlY3RhbmdsZSwgYW5kIGl0IG11c3QKKwkgKiBiZSB3aXRoaW4gY2FtZXJhIGNyb3BjYXAgYm91bmRzCisJICovCisJaWYgKCFtZW1jbXAocmVjdCwgY2FtX3JlY3QsIHNpemVvZigqcmVjdCkpKSB7CisJCS8qIEV2ZW4gaWYgY2FtZXJhIFNfQ1JPUCBmYWlsZWQsIGJ1dCBjYW1lcmEgcmVjdGFuZ2xlIG1hdGNoZXMgKi8KKwkJZGV2X2RiZyhkZXYsICJDYW1lcmEgU19DUk9QIHN1Y2Nlc3NmdWwgZm9yICV1eCV1QCV1OiV1XG4iLAorCQkJcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVHJ5IHRvIGZpeCBjcm9wcGluZywgdGhhdCBjYW1lcmEgaGFzbid0IG1hbmFnZWQgdG8gc2V0ICovCisJZGV2X2dlbyhkZXYsICJGaXggY2FtZXJhIFNfQ1JPUCBmb3IgJXV4JXVAJXU6JXUgdG8gJXV4JXVAJXU6JXVcbiIsCisJCWNhbV9yZWN0LT53aWR0aCwgY2FtX3JlY3QtPmhlaWdodCwKKwkJY2FtX3JlY3QtPmxlZnQsIGNhbV9yZWN0LT50b3AsCisJCXJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CisKKwkvKiBXZSBuZWVkIHNlbnNvciBtYXhpbXVtIHJlY3RhbmdsZSAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBjcm9wY2FwLCAmY2FwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC0+bGVmdCwgJnJlY3QtPndpZHRoLCBjYXAuYm91bmRzLmxlZnQsIDIsCisJCQkgICAgICBjYXAuYm91bmRzLndpZHRoKTsKKwlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QtPnRvcCwgJnJlY3QtPmhlaWdodCwgY2FwLmJvdW5kcy50b3AsIDQsCisJCQkgICAgICBjYXAuYm91bmRzLmhlaWdodCk7CisKKwkvKgorCSAqIFBvcHVsYXIgc3BlY2lhbCBjYXNlIC0gc29tZSBjYW1lcmFzIGNhbiBvbmx5IGhhbmRsZSBmaXhlZCBzaXplcyBsaWtlCisJICogUVZHQSwgVkdBLC4uLiBUYWtlIGNhcmUgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KKwkgKi8KKwl3aWR0aCA9IG1heChjYW1fcmVjdC0+d2lkdGgsIDIpOworCWhlaWdodCA9IG1heChjYW1fcmVjdC0+aGVpZ2h0LCAyKTsKKworCXdoaWxlICghcmV0ICYmIChpc19zbWFsbGVyKGNhbV9yZWN0LCByZWN0KSB8fAorCQkJaXNfaW5zaWRlKGNhbV9yZWN0LCByZWN0KSkgJiYKKwkgICAgICAgKGNhcC5ib3VuZHMud2lkdGggPiB3aWR0aCB8fCBjYXAuYm91bmRzLmhlaWdodCA+IGhlaWdodCkpIHsKKworCQl3aWR0aCAqPSAyOworCQloZWlnaHQgKj0gMjsKKworCQljYW1fcmVjdC0+d2lkdGggPSB3aWR0aDsKKwkJY2FtX3JlY3QtPmhlaWdodCA9IGhlaWdodDsKKworCQkvKgorCQkgKiBXZSBkbyBub3Qga25vdyB3aGF0IGNhcGFiaWxpdGllcyB0aGUgY2FtZXJhIGhhcyB0byBzZXQgdXAKKwkJICogbGVmdCBhbmQgdG9wIGJvcmRlcnMuIFdlIGNvdWxkIHRyeSB0byBiZSBzbWFydGVyIGluIGl0ZXJhdGluZworCQkgKiB0aGVtLCBlLmcuLCBpZiBjYW1lcmEgY3VycmVudCBsZWZ0IGlzIHRvIHRoZSByaWdodCBvZiB0aGUKKwkJICogdGFyZ2V0IGxlZnQsIHNldCBpdCB0byB0aGUgbWlkZGxlIHBvaW50IGJldHdlZW4gdGhlIGN1cnJlbnQKKwkJICogbGVmdCBhbmQgbWluaW11bSBsZWZ0LiBCdXQgdGhhdCB3b3VsZCBhZGQgdG9vIG11Y2gKKwkJICogY29tcGxleGl0eTogd2Ugd291bGQgaGF2ZSB0byBpdGVyYXRlIGVhY2ggYm9yZGVyIHNlcGFyYXRlbHkuCisJCSAqLworCQlpZiAoY2FtX3JlY3QtPmxlZnQgPiByZWN0LT5sZWZ0KQorCQkJY2FtX3JlY3QtPmxlZnQgPSBjYXAuYm91bmRzLmxlZnQ7CisKKwkJaWYgKGNhbV9yZWN0LT5sZWZ0ICsgY2FtX3JlY3QtPndpZHRoIDwgcmVjdC0+bGVmdCArIHJlY3QtPndpZHRoKQorCQkJY2FtX3JlY3QtPndpZHRoID0gcmVjdC0+bGVmdCArIHJlY3QtPndpZHRoIC0KKwkJCQljYW1fcmVjdC0+bGVmdDsKKworCQlpZiAoY2FtX3JlY3QtPnRvcCA+IHJlY3QtPnRvcCkKKwkJCWNhbV9yZWN0LT50b3AgPSBjYXAuYm91bmRzLnRvcDsKKworCQlpZiAoY2FtX3JlY3QtPnRvcCArIGNhbV9yZWN0LT5oZWlnaHQgPCByZWN0LT50b3AgKyByZWN0LT5oZWlnaHQpCisJCQljYW1fcmVjdC0+aGVpZ2h0ID0gcmVjdC0+dG9wICsgcmVjdC0+aGVpZ2h0IC0KKwkJCQljYW1fcmVjdC0+dG9wOworCisJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2Nyb3AsIGNhbV9jcm9wKTsKKwkJcmV0ID0gY2xpZW50X2dfcmVjdChzZCwgY2FtX3JlY3QpOworCQlkZXZfZ2VvKGRldiwgIkNhbWVyYSBTX0NST1AgJWQgZm9yICV1eCV1QCV1OiV1XG4iLCByZXQsCisJCQljYW1fcmVjdC0+d2lkdGgsIGNhbV9yZWN0LT5oZWlnaHQsCisJCQljYW1fcmVjdC0+bGVmdCwgY2FtX3JlY3QtPnRvcCk7CisJfQorCisJLyogU19DUk9QIG11c3Qgbm90IG1vZGlmeSB0aGUgcmVjdGFuZ2xlICovCisJaWYgKGlzX3NtYWxsZXIoY2FtX3JlY3QsIHJlY3QpIHx8IGlzX2luc2lkZShjYW1fcmVjdCwgcmVjdCkpIHsKKwkJLyoKKwkJICogVGhlIGNhbWVyYSBmYWlsZWQgdG8gY29uZmlndXJlIGEgc3VpdGFibGUgY3JvcHBpbmcsCisJCSAqIHdlIGNhbm5vdCB1c2UgdGhlIGN1cnJlbnQgcmVjdGFuZ2xlLCBzZXQgdG8gbWF4CisJCSAqLworCQkqY2FtX3JlY3QgPSBjYXAuYm91bmRzOworCQl2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19jcm9wLCBjYW1fY3JvcCk7CisJCXJldCA9IGNsaWVudF9nX3JlY3Qoc2QsIGNhbV9yZWN0KTsKKwkJZGV2X2dlbyhkZXYsICJDYW1lcmEgU19DUk9QICVkIGZvciBtYXggJXV4JXVAJXU6JXVcbiIsIHJldCwKKwkJCWNhbV9yZWN0LT53aWR0aCwgY2FtX3JlY3QtPmhlaWdodCwKKwkJCWNhbV9yZWN0LT5sZWZ0LCBjYW1fcmVjdC0+dG9wKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKK3N0YXRpYyBpbnQgZ2V0X2NhbWVyYV9zY2FsZXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpzY2FsZV9oLCB1bnNpZ25lZCBpbnQgKnNjYWxlX3YpCit7CisJc3RydWN0IHY0bDJfZm9ybWF0IGY7CisJaW50IHJldDsKKworCWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgJmYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJKnNjYWxlX2ggPSBjYWxjX2dlbmVyaWNfc2NhbGUocmVjdC0+d2lkdGgsIGYuZm10LnBpeC53aWR0aCk7CisJKnNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUocmVjdC0+aGVpZ2h0LCBmLmZtdC5waXguaGVpZ2h0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9jYW1lcmFfc3Vid2luKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpjYW1fc3VicmVjdCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNhbV9oc2NhbGUsIHVuc2lnbmVkIGludCBjYW1fdnNjYWxlKQoreworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CisJc3RydWN0IHY0bDJfcmVjdCAqY2V1X3JlY3QgPSAmY2FtLT5jZXVfcmVjdDsKKworCWlmICghY2V1X3JlY3QtPndpZHRoKSB7CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmOworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4OworCQlpbnQgcmV0OworCQkvKiBGaXJzdCB0aW1lICovCisKKwkJZi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgJmYpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGV2X2dlbyhkZXYsICJjYW1lcmEgZm10ICV1eCV1XG4iLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKKwkJaWYgKHBpeC0+d2lkdGggPiAyNTYwKSB7CisJCQljZXVfcmVjdC0+d2lkdGgJID0gMjU2MDsKKwkJCWNldV9yZWN0LT5sZWZ0CSA9IChwaXgtPndpZHRoIC0gMjU2MCkgLyAyOworCQl9IGVsc2UgeworCQkJY2V1X3JlY3QtPndpZHRoCSA9IHBpeC0+d2lkdGg7CisJCQljZXVfcmVjdC0+bGVmdAkgPSAwOworCQl9CisKKwkJaWYgKHBpeC0+aGVpZ2h0ID4gMTkyMCkgeworCQkJY2V1X3JlY3QtPmhlaWdodCA9IDE5MjA7CisJCQljZXVfcmVjdC0+dG9wCSA9IChwaXgtPmhlaWdodCAtIDE5MjApIC8gMjsKKwkJfSBlbHNlIHsKKwkJCWNldV9yZWN0LT5oZWlnaHQgPSBwaXgtPmhlaWdodDsKKwkJCWNldV9yZWN0LT50b3AJID0gMDsKKwkJfQorCisJCWRldl9nZW8oZGV2LCAiaW5pdGlhbGlzZWQgQ0VVIHJlY3QgJXV4JXVAJXU6JXVcbiIsCisJCQljZXVfcmVjdC0+d2lkdGgsIGNldV9yZWN0LT5oZWlnaHQsCisJCQljZXVfcmVjdC0+bGVmdCwgY2V1X3JlY3QtPnRvcCk7CisJfQorCisJY2FtX3N1YnJlY3QtPndpZHRoCT0gc2NhbGVfdXAoY2V1X3JlY3QtPndpZHRoLCBjYW1faHNjYWxlKTsKKwljYW1fc3VicmVjdC0+bGVmdAk9IHNjYWxlX3VwKGNldV9yZWN0LT5sZWZ0LCBjYW1faHNjYWxlKTsKKwljYW1fc3VicmVjdC0+aGVpZ2h0CT0gc2NhbGVfdXAoY2V1X3JlY3QtPmhlaWdodCwgY2FtX3ZzY2FsZSk7CisJY2FtX3N1YnJlY3QtPnRvcAk9IHNjYWxlX3VwKGNldV9yZWN0LT50b3AsIGNhbV92c2NhbGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xpZW50X3NfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsCisJCQlib29sIGNldV9jYW5fc2NhbGUpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXVuc2lnbmVkIGludCB3aWR0aCA9IHBpeC0+d2lkdGgsIGhlaWdodCA9IHBpeC0+aGVpZ2h0LCB0bXBfdywgdG1wX2g7CisJdW5zaWduZWQgaW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwIGNhcDsKKwlpbnQgcmV0OworCisJY2FwLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgY3JvcGNhcCwgJmNhcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltYXhfd2lkdGggPSBtaW4oY2FwLmJvdW5kcy53aWR0aCwgMjU2MCk7CisJbWF4X2hlaWdodCA9IG1pbihjYXAuYm91bmRzLmhlaWdodCwgMTkyMCk7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2X2dlbyhkZXYsICJjYW1lcmEgc2NhbGVkIHRvICV1eCV1XG4iLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKKwlpZiAoKHdpZHRoID09IHBpeC0+d2lkdGggJiYgaGVpZ2h0ID09IHBpeC0+aGVpZ2h0KSB8fCAhY2V1X2Nhbl9zY2FsZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDYW1lcmEgc2V0IGEgZm9ybWF0LCBidXQgZ2VvbWV0cnkgaXMgbm90IHByZWNpc2UsIHRyeSB0byBpbXByb3ZlICovCisJdG1wX3cgPSBwaXgtPndpZHRoOworCXRtcF9oID0gcGl4LT5oZWlnaHQ7CisKKwkvKiB3aWR0aCA8PSBtYXhfd2lkdGggJiYgaGVpZ2h0IDw9IG1heF9oZWlnaHQgLSBndWFyYW50ZWVkIGJ5IHRyeV9mbXQgKi8KKwl3aGlsZSAoKHdpZHRoID4gdG1wX3cgfHwgaGVpZ2h0ID4gdG1wX2gpICYmCisJICAgICAgIHRtcF93IDwgbWF4X3dpZHRoICYmIHRtcF9oIDwgbWF4X2hlaWdodCkgeworCQl0bXBfdyA9IG1pbigyICogdG1wX3csIG1heF93aWR0aCk7CisJCXRtcF9oID0gbWluKDIgKiB0bXBfaCwgbWF4X2hlaWdodCk7CisJCXBpeC0+d2lkdGggPSB0bXBfdzsKKwkJcGl4LT5oZWlnaHQgPSB0bXBfaDsKKwkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKKwkJZGV2X2dlbyhkZXYsICJDYW1lcmEgc2NhbGVkIHRvICV1eCV1XG4iLAorCQkJcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQlpZiAocmV0IDwgMCkgeworCQkJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuICovCisJCQlkZXZfZXJyKGRldiwgIkNsaWVudCBmYWlsZWQgdG8gc2V0IGZvcm1hdDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQHJlY3QJLSBjYW1lcmEgY3JvcHBlZCByZWN0YW5nbGUKKyAqIEBzdWJfcmVjdAktIENFVSBjcm9wcGVkIHJlY3RhbmdsZSwgbWFwcGVkIGJhY2sgdG8gY2FtZXJhIGlucHV0IGFyZWEKKyAqIEBjZXVfcmVjdAktIG9uIG91dHB1dCBjYWxjdWxhdGVkIENFVSBjcm9wIHJlY3RhbmdsZQorICovCitzdGF0aWMgaW50IGNsaWVudF9zY2FsZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCwKKwkJCXN0cnVjdCB2NGwyX3JlY3QgKnN1Yl9yZWN0LCBzdHJ1Y3QgdjRsMl9yZWN0ICpjZXVfcmVjdCwKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwgYm9vbCBjZXVfY2FuX3NjYWxlKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmX3RtcCA9ICpmOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeF90bXAgPSAmZl90bXAuZm10LnBpeDsKKwl1bnNpZ25lZCBpbnQgc2NhbGVfaCwgc2NhbGVfdjsKKwlpbnQgcmV0OworCisJLyogNS4gQXBwbHkgaXRlcmF0aXZlIGNhbWVyYSBTX0ZNVCBmb3IgY2FtZXJhIHVzZXIgd2luZG93LiAqLworCXJldCA9IGNsaWVudF9zX2ZtdChpY2QsICZmX3RtcCwgY2V1X2Nhbl9zY2FsZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZ2VvKGRldiwgIjU6IGNhbWVyYSBzY2FsZWQgdG8gJXV4JXVcbiIsCisJCXBpeF90bXAtPndpZHRoLCBwaXhfdG1wLT5oZWlnaHQpOworCisJLyogNi4gUmV0cmlldmUgY2FtZXJhIG91dHB1dCB3aW5kb3cgKGdfZm10KSAqLworCisJLyogdW5uZWVkZWQgLSBpdCBpcyBhbHJlYWR5IGluICJmX3RtcCIgKi8KKworCS8qIDcuIENhbGN1bGF0ZSBuZXcgY2FtZXJhIHNjYWxlcy4gKi8KKwlyZXQgPSBnZXRfY2FtZXJhX3NjYWxlcyhzZCwgcmVjdCwgJnNjYWxlX2gsICZzY2FsZV92KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9nZW8oZGV2LCAiNzogY2FtZXJhIHNjYWxlcyAldToldVxuIiwgc2NhbGVfaCwgc2NhbGVfdik7CisKKwljYW0tPmNhbV93aWR0aAkJPSBwaXhfdG1wLT53aWR0aDsKKwljYW0tPmNhbV9oZWlnaHQJCT0gcGl4X3RtcC0+aGVpZ2h0OworCWYtPmZtdC5waXgud2lkdGgJPSBwaXhfdG1wLT53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodAk9IHBpeF90bXAtPmhlaWdodDsKKworCS8qCisJICogOC4gQ2FsY3VsYXRlIG5ldyBDRVUgY3JvcCAtIGFwcGx5IGNhbWVyYSBzY2FsZXMgdG8gcHJldmlvdXNseQorCSAqICAgIGNhbGN1bGF0ZWQgImVmZmVjdGl2ZSIgY3JvcC4KKwkgKi8KKwljZXVfcmVjdC0+bGVmdCA9IHNjYWxlX2Rvd24oc3ViX3JlY3QtPmxlZnQsIHNjYWxlX2gpOworCWNldV9yZWN0LT53aWR0aCA9IHNjYWxlX2Rvd24oc3ViX3JlY3QtPndpZHRoLCBzY2FsZV9oKTsKKwljZXVfcmVjdC0+dG9wID0gc2NhbGVfZG93bihzdWJfcmVjdC0+dG9wLCBzY2FsZV92KTsKKwljZXVfcmVjdC0+aGVpZ2h0ID0gc2NhbGVfZG93bihzdWJfcmVjdC0+aGVpZ2h0LCBzY2FsZV92KTsKKworCWRldl9nZW8oZGV2LCAiODogbmV3IENFVSByZWN0ICV1eCV1QCV1OiV1XG4iLAorCQljZXVfcmVjdC0+d2lkdGgsIGNldV9yZWN0LT5oZWlnaHQsCisJCWNldV9yZWN0LT5sZWZ0LCBjZXVfcmVjdC0+dG9wKTsKKworCXJldHVybiAwOworfQorCisvKiBHZXQgY29tYmluZWQgc2NhbGVzICovCitzdGF0aWMgaW50IGdldF9zY2FsZXMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCSAgICAgIHVuc2lnbmVkIGludCAqc2NhbGVfaCwgdW5zaWduZWQgaW50ICpzY2FsZV92KQoreworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJc3RydWN0IHY0bDJfY3JvcCBjYW1fY3JvcDsKKwl1bnNpZ25lZCBpbnQgd2lkdGhfaW4sIGhlaWdodF9pbjsKKwlpbnQgcmV0OworCisJY2FtX2Nyb3AudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldCA9IGNsaWVudF9nX3JlY3Qoc2QsICZjYW1fY3JvcC5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdldF9jYW1lcmFfc2NhbGVzKHNkLCAmY2FtX2Nyb3AuYywgc2NhbGVfaCwgc2NhbGVfdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl3aWR0aF9pbiA9IHNjYWxlX3VwKGNhbS0+Y2V1X3JlY3Qud2lkdGgsICpzY2FsZV9oKTsKKwloZWlnaHRfaW4gPSBzY2FsZV91cChjYW0tPmNldV9yZWN0LmhlaWdodCwgKnNjYWxlX3YpOworCisJKnNjYWxlX2ggPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtLT5jZXVfcmVjdC53aWR0aCwgaWNkLT51c2VyX3dpZHRoKTsKKwkqc2NhbGVfdiA9IGNhbGNfZ2VuZXJpY19zY2FsZShjYW0tPmNldV9yZWN0LmhlaWdodCwgaWNkLT51c2VyX2hlaWdodCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENFVSBjYW4gc2NhbGUgYW5kIGNyb3AsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHdhc3RlIGJhbmR3aWR0aCBhbmQga2lsbCB0aGUKKyAqIGZyYW1lcmF0ZSBieSBhbHdheXMgcmVxdWVzdGluZyB0aGUgbWF4aW11bSBpbWFnZSBmcm9tIHRoZSBjbGllbnQuIFNlZQorICogRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaF9tb2JpbGVfY2FtZXJhX2NldS50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YKKyAqIHNjYWxpbmcgYW5kIGNyb3BwaW5nIGFsZ29yaXRobXMgYW5kIGZvciB0aGUgbWVhbmluZyBvZiByZWZlcmVuY2VkIGhlcmUgc3RlcHMuCisgKi8KK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCA9ICZhLT5jOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJc3RydWN0IHY0bDJfY3JvcCBjYW1fY3JvcDsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OworCXN0cnVjdCB2NGwyX3JlY3QgKmNhbV9yZWN0ID0gJmNhbV9jcm9wLmMsICpjZXVfcmVjdCA9ICZjYW0tPmNldV9yZWN0OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4OworCXVuc2lnbmVkIGludCBzY2FsZV9jb21iX2gsIHNjYWxlX2NvbWJfdiwgc2NhbGVfY2V1X2gsIHNjYWxlX2NldV92LAorCQlvdXRfd2lkdGgsIG91dF9oZWlnaHQ7CisJdTMyIGNhcHNyLCBjZmxjcjsKKwlpbnQgcmV0OworCisJLyogMS4gQ2FsY3VsYXRlIGN1cnJlbnQgY29tYmluZWQgc2NhbGVzLiAqLworCXJldCA9IGdldF9zY2FsZXMoaWNkLCAmc2NhbGVfY29tYl9oLCAmc2NhbGVfY29tYl92KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9nZW8oZGV2LCAiMTogY29tYmluZWQgc2NhbGVzICV1OiV1XG4iLCBzY2FsZV9jb21iX2gsIHNjYWxlX2NvbWJfdik7CisKKwkvKiAyLiBBcHBseSBpdGVyYXRpdmUgY2FtZXJhIFNfQ1JPUCBmb3IgbmV3IGlucHV0IHdpbmRvdy4gKi8KKwlyZXQgPSBjbGllbnRfc19jcm9wKHNkLCBhLCAmY2FtX2Nyb3ApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2X2dlbyhkZXYsICIyOiBjYW1lcmEgY3JvcHBlZCB0byAldXgldUAldToldVxuIiwKKwkJY2FtX3JlY3QtPndpZHRoLCBjYW1fcmVjdC0+aGVpZ2h0LAorCQljYW1fcmVjdC0+bGVmdCwgY2FtX3JlY3QtPnRvcCk7CisKKwkvKiBPbiBzdWNjZXNzIGNhbV9jcm9wIGNvbnRhaW5zIGN1cnJlbnQgY2FtZXJhIGNyb3AgKi8KKworCS8qCisJICogMy4gSWYgb2xkIGNvbWJpbmVkIHNjYWxlcyBhcHBsaWVkIHRvIG5ldyBjcm9wIHByb2R1Y2UgYW4gaW1wb3NzaWJsZQorCSAqICAgIHVzZXIgd2luZG93LCBhZGp1c3Qgc2NhbGVzIHRvIHByb2R1Y2UgbmVhcmVzdCBwb3NzaWJsZSB3aW5kb3cuCisJICovCisJb3V0X3dpZHRoCT0gc2NhbGVfZG93bihyZWN0LT53aWR0aCwgc2NhbGVfY29tYl9oKTsKKwlvdXRfaGVpZ2h0CT0gc2NhbGVfZG93bihyZWN0LT5oZWlnaHQsIHNjYWxlX2NvbWJfdik7CisKKwlpZiAob3V0X3dpZHRoID4gMjU2MCkKKwkJb3V0X3dpZHRoID0gMjU2MDsKKwllbHNlIGlmIChvdXRfd2lkdGggPCAyKQorCQlvdXRfd2lkdGggPSAyOworCisJaWYgKG91dF9oZWlnaHQgPiAxOTIwKQorCQlvdXRfaGVpZ2h0ID0gMTkyMDsKKwllbHNlIGlmIChvdXRfaGVpZ2h0IDwgNCkKKwkJb3V0X2hlaWdodCA9IDQ7CisKKwlkZXZfZ2VvKGRldiwgIjM6IEFkanVzdGVkIG91dHB1dCAldXgldVxuIiwgb3V0X3dpZHRoLCBvdXRfaGVpZ2h0KTsKKworCS8qIDQuIFVzZSBHX0NST1AgdG8gcmV0cmlldmUgYWN0dWFsIGlucHV0IHdpbmRvdzogYWxyZWFkeSBpbiBjYW1fY3JvcCAqLworCisJLyoKKwkgKiA1LiBVc2luZyBhY3R1YWwgaW5wdXQgd2luZG93IGFuZCBjYWxjdWxhdGVkIGNvbWJpbmVkIHNjYWxlcyBjYWxjdWxhdGUKKwkgKiAgICBjYW1lcmEgdGFyZ2V0IG91dHB1dCB3aW5kb3cuCisJICovCisJcGl4LT53aWR0aAkJPSBzY2FsZV9kb3duKGNhbV9yZWN0LT53aWR0aCwgc2NhbGVfY29tYl9oKTsKKwlwaXgtPmhlaWdodAkJPSBzY2FsZV9kb3duKGNhbV9yZWN0LT5oZWlnaHQsIHNjYWxlX2NvbWJfdik7CisKKwlkZXZfZ2VvKGRldiwgIjU6IGNhbWVyYSB0YXJnZXQgJXV4JXVcbiIsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKworCS8qIDYuIC0gOS4gKi8KKwlwaXgtPnBpeGVsZm9ybWF0CT0gY2FtLT5jYW1lcmFfZm10LT5mb3VyY2M7CisJcGl4LT5jb2xvcnNwYWNlCQk9IGNhbS0+Y2FtZXJhX2ZtdC0+Y29sb3JzcGFjZTsKKworCWNhcHNyID0gY2FwdHVyZV9zYXZlX3Jlc2V0KHBjZGV2KTsKKwlkZXZfZGJnKGRldiwgIkNBUFNSIDB4JXgsIENGTENSIDB4JXhcbiIsIGNhcHNyLCBwY2Rldi0+Y2ZsY3IpOworCisJLyogTWFrZSByZWxhdGl2ZSB0byBjYW1lcmEgcmVjdGFuZ2xlICovCisJcmVjdC0+bGVmdAkJLT0gY2FtX3JlY3QtPmxlZnQ7CisJcmVjdC0+dG9wCQktPSBjYW1fcmVjdC0+dG9wOworCisJZi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0ID0gY2xpZW50X3NjYWxlKGljZCwgY2FtX3JlY3QsIHJlY3QsIGNldV9yZWN0LCAmZiwKKwkJCSAgIHBjZGV2LT5pbWFnZV9tb2RlICYmICFwY2Rldi0+aXNfaW50ZXJsYWNlZCk7CisKKwlkZXZfZ2VvKGRldiwgIjYtOTogJWRcbiIsIHJldCk7CisKKwkvKiAxMC4gVXNlIENFVSBjcm9wcGluZyB0byBjcm9wIHRvIHRoZSBuZXcgd2luZG93LiAqLworCXNoX21vYmlsZV9jZXVfc2V0X3JlY3QoaWNkLCBvdXRfd2lkdGgsIG91dF9oZWlnaHQpOworCisJZGV2X2dlbyhkZXYsICIxMDogQ0VVIGNyb3BwZWQgdG8gJXV4JXVAJXU6JXVcbiIsCisJCWNldV9yZWN0LT53aWR0aCwgY2V1X3JlY3QtPmhlaWdodCwKKwkJY2V1X3JlY3QtPmxlZnQsIGNldV9yZWN0LT50b3ApOworCisJLyoKKwkgKiAxMS4gQ2FsY3VsYXRlIENFVSBzY2FsZXMgZnJvbSBjYW1lcmEgc2NhbGVzIGZyb20gcmVzdWx0cyBvZiAoMTApIGFuZAorCSAqICAgICB1c2VyIHdpbmRvdyBmcm9tICgzKQorCSAqLworCXNjYWxlX2NldV9oID0gY2FsY19zY2FsZShjZXVfcmVjdC0+d2lkdGgsICZvdXRfd2lkdGgpOworCXNjYWxlX2NldV92ID0gY2FsY19zY2FsZShjZXVfcmVjdC0+aGVpZ2h0LCAmb3V0X2hlaWdodCk7CisKKwlkZXZfZ2VvKGRldiwgIjExOiBDRVUgc2NhbGVzICV1OiV1XG4iLCBzY2FsZV9jZXVfaCwgc2NhbGVfY2V1X3YpOworCisJLyogMTIuIEFwcGx5IENFVSBzY2FsZXMuICovCisJY2ZsY3IgPSBzY2FsZV9jZXVfaCB8IChzY2FsZV9jZXVfdiA8PCAxNik7CisJaWYgKGNmbGNyICE9IHBjZGV2LT5jZmxjcikgeworCQlwY2Rldi0+Y2ZsY3IgPSBjZmxjcjsKKwkJY2V1X3dyaXRlKHBjZGV2LCBDRkxDUiwgY2ZsY3IpOworCX0KKworCS8qIFJlc3RvcmUgY2FwdHVyZSAqLworCWlmIChwY2Rldi0+YWN0aXZlKQorCQljYXBzciB8PSAxOworCWNhcHR1cmVfcmVzdG9yZShwY2RldiwgY2Fwc3IpOworCisJaWNkLT51c2VyX3dpZHRoID0gb3V0X3dpZHRoOworCWljZC0+dXNlcl9oZWlnaHQgPSBvdXRfaGVpZ2h0OworCisJLyogRXZlbiBpZiBvbmx5IGNhbWVyYSBjcm9wcGluZyBzdWNjZWVkZWQgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKiBTaW1pbGFyIHRvIHNldF9jcm9wIG11bHRpc3RhZ2UgaXRlcmF0aXZlIGFsZ29yaXRobSAqLworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfZm9ybWF0IGNhbV9mID0gKmY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FtX3BpeCA9ICZjYW1fZi5mbXQucGl4OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7Ci0JX191MzIgcGl4Zm10ID0gZi0+Zm10LnBpeC5waXhlbGZvcm1hdDsKKwlzdHJ1Y3QgdjRsMl9jcm9wIGNhbV9jcm9wOworCXN0cnVjdCB2NGwyX3JlY3QgKmNhbV9yZWN0ID0gJmNhbV9jcm9wLmMsIGNhbV9zdWJyZWN0LCBjZXVfcmVjdDsKKwl1bnNpZ25lZCBpbnQgc2NhbGVfY2FtX2gsIHNjYWxlX2NhbV92OworCXUxNiBzY2FsZV92LCBzY2FsZV9oOworCWludCByZXQ7CisJYm9vbCBpc19pbnRlcmxhY2VkLCBpbWFnZV9tb2RlOworCisJc3dpdGNoIChwaXgtPmZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCWlzX2ludGVybGFjZWQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfQU5ZOgorCWRlZmF1bHQ6CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgVjRMMl9GSUVMRF9OT05FOgorCQlpc19pbnRlcmxhY2VkID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOworCWlmICgheGxhdGUpIHsKKwkJZGV2X3dhcm4oZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogMS4gQ2FsY3VsYXRlIGN1cnJlbnQgY2FtZXJhIHNjYWxlcy4gKi8KKwljYW1fY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0ID0gY2xpZW50X2dfcmVjdChzZCwgY2FtX3JlY3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ2V0X2NhbWVyYV9zY2FsZXMoc2QsIGNhbV9yZWN0LCAmc2NhbGVfY2FtX2gsICZzY2FsZV9jYW1fdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZ2VvKGRldiwgIjE6IGNhbWVyYSBzY2FsZXMgJXU6JXVcbiIsIHNjYWxlX2NhbV9oLCBzY2FsZV9jYW1fdik7CisKKwkvKgorCSAqIDIuIENhbGN1bGF0ZSAiZWZmZWN0aXZlIiBpbnB1dCBjcm9wIChzZW5zb3Igc3Vid2luZG93KSAtIENFVSBjcm9wCisJICogICAgc2NhbGVkIGJhY2sgYXQgY3VycmVudCBjYW1lcmEgc2NhbGVzIG9udG8gaW5wdXQgd2luZG93LgorCSAqLworCXJldCA9IGdldF9jYW1lcmFfc3Vid2luKGljZCwgJmNhbV9zdWJyZWN0LCBzY2FsZV9jYW1faCwgc2NhbGVfY2FtX3YpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2X2dlbyhkZXYsICIyOiBzdWJ3aW4gJXV4JXVAJXU6JXVcbiIsCisJCWNhbV9zdWJyZWN0LndpZHRoLCBjYW1fc3VicmVjdC5oZWlnaHQsCisJCWNhbV9zdWJyZWN0LmxlZnQsIGNhbV9zdWJyZWN0LnRvcCk7CisKKwkvKgorCSAqIDMuIENhbGN1bGF0ZSBuZXcgY29tYmluZWQgc2NhbGVzIGZyb20gImVmZmVjdGl2ZSIgaW5wdXQgd2luZG93IHRvCisJICogICAgcmVxdWVzdGVkIHVzZXIgd2luZG93LgorCSAqLworCXNjYWxlX2ggPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtX3N1YnJlY3Qud2lkdGgsIHBpeC0+d2lkdGgpOworCXNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtX3N1YnJlY3QuaGVpZ2h0LCBwaXgtPmhlaWdodCk7CisKKwlkZXZfZ2VvKGRldiwgIjM6IHNjYWxlcyAldToldVxuIiwgc2NhbGVfaCwgc2NhbGVfdik7CisKKwkvKgorCSAqIDQuIENhbGN1bGF0ZSBjYW1lcmEgb3V0cHV0IHdpbmRvdyBieSBhcHBseWluZyBjb21iaW5lZCBzY2FsZXMgdG8gcmVhbAorCSAqICAgIGlucHV0IHdpbmRvdy4KKwkgKi8KKwljYW1fcGl4LT53aWR0aCA9IHNjYWxlX2Rvd24oY2FtX3JlY3QtPndpZHRoLCBzY2FsZV9oKTsKKwljYW1fcGl4LT5oZWlnaHQgPSBzY2FsZV9kb3duKGNhbV9yZWN0LT5oZWlnaHQsIHNjYWxlX3YpOworCWNhbV9waXgtPnBpeGVsZm9ybWF0ID0geGxhdGUtPmNhbV9mbXQtPmZvdXJjYzsKKworCXN3aXRjaCAocGl4Zm10KSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfTlYxMjoKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjIxOgorCWNhc2UgVjRMMl9QSVhfRk1UX05WMTY6CisJY2FzZSBWNEwyX1BJWF9GTVRfTlY2MToKKwkJaW1hZ2VfbW9kZSA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWltYWdlX21vZGUgPSBmYWxzZTsKKwl9CisKKwlkZXZfZ2VvKGRldiwgIjQ6IGNhbWVyYSBvdXRwdXQgJXV4JXVcbiIsCisJCWNhbV9waXgtPndpZHRoLCBjYW1fcGl4LT5oZWlnaHQpOworCisJLyogNS4gLSA5LiAqLworCXJldCA9IGNsaWVudF9zY2FsZShpY2QsIGNhbV9yZWN0LCAmY2FtX3N1YnJlY3QsICZjZXVfcmVjdCwgJmNhbV9mLAorCQkJICAgaW1hZ2VfbW9kZSAmJiAhaXNfaW50ZXJsYWNlZCk7CisKKwlkZXZfZ2VvKGRldiwgIjUtOTogY2xpZW50IHNjYWxlICVkXG4iLCByZXQpOworCisJLyogRG9uZSB3aXRoIHRoZSBjYW1lcmEuIE5vdyBzZWUgaWYgd2UgY2FuIGltcHJvdmUgdGhlIHJlc3VsdCAqLworCisJZGV2X2RiZyhkZXYsICJDYW1lcmEgJWQgZm10ICV1eCV1LCByZXF1ZXN0ZWQgJXV4JXVcbiIsCisJCXJldCwgY2FtX3BpeC0+d2lkdGgsIGNhbV9waXgtPmhlaWdodCwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogMTAuIFVzZSBDRVUgc2NhbGluZyB0byBzY2FsZSB0byB0aGUgcmVxdWVzdGVkIHVzZXIgd2luZG93LiAqLworCisJLyogV2UgY2Fubm90IHNjYWxlIHVwICovCisJaWYgKHBpeC0+d2lkdGggPiBjYW1fcGl4LT53aWR0aCkKKwkJcGl4LT53aWR0aCA9IGNhbV9waXgtPndpZHRoOworCWlmIChwaXgtPndpZHRoID4gY2V1X3JlY3Qud2lkdGgpCisJCXBpeC0+d2lkdGggPSBjZXVfcmVjdC53aWR0aDsKKworCWlmIChwaXgtPmhlaWdodCA+IGNhbV9waXgtPmhlaWdodCkKKwkJcGl4LT5oZWlnaHQgPSBjYW1fcGl4LT5oZWlnaHQ7CisJaWYgKHBpeC0+aGVpZ2h0ID4gY2V1X3JlY3QuaGVpZ2h0KQorCQlwaXgtPmhlaWdodCA9IGNldV9yZWN0LmhlaWdodDsKKworCS8qIExldCdzIHJvY2s6IHNjYWxlIHBpeC0+e3dpZHRoIHggaGVpZ2h0fSBkb3duIHRvIHdpZHRoIHggaGVpZ2h0ICovCisJc2NhbGVfaCA9IGNhbGNfc2NhbGUoY2V1X3JlY3Qud2lkdGgsICZwaXgtPndpZHRoKTsKKwlzY2FsZV92ID0gY2FsY19zY2FsZShjZXVfcmVjdC5oZWlnaHQsICZwaXgtPmhlaWdodCk7CisKKwlkZXZfZ2VvKGRldiwgIjEwOiBXOiAldSA6IDB4JXggPSAldSwgSDogJXUgOiAweCV4ID0gJXVcbiIsCisJCWNldV9yZWN0LndpZHRoLCBzY2FsZV9oLCBwaXgtPndpZHRoLAorCQljZXVfcmVjdC5oZWlnaHQsIHNjYWxlX3YsIHBpeC0+aGVpZ2h0KTsKKworCXBjZGV2LT5jZmxjciA9IHNjYWxlX2ggfCAoc2NhbGVfdiA8PCAxNik7CisKKwlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOworCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7CisJY2FtLT5jYW1lcmFfZm10ID0geGxhdGUtPmNhbV9mbXQ7CisJY2FtLT5jZXVfcmVjdCA9IGNldV9yZWN0OworCisJcGNkZXYtPmlzX2ludGVybGFjZWQgPSBpc19pbnRlcmxhY2VkOworCXBjZGV2LT5pbWFnZV9tb2RlID0gaW1hZ2VfbW9kZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKKwlpbnQgd2lkdGgsIGhlaWdodDsKIAlpbnQgcmV0OwogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKCF4bGF0ZSkgewotCQlkZXZfd2FybihpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEZJWE1FOiBjYWxjdWxhdGUgdXNpbmcgZGVwdGggYW5kIGJ1cyB3aWR0aCAqLwogCi0JdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZmLT5mbXQucGl4LndpZHRoLCAyLCAyNTYwLCAxLAotCQkJICAgICAgJmYtPmZtdC5waXguaGVpZ2h0LCA0LCAxOTIwLCAyLCAwKTsKKwl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJnBpeC0+d2lkdGgsIDIsIDI1NjAsIDEsCisJCQkgICAgICAmcGl4LT5oZWlnaHQsIDQsIDE5MjAsIDIsIDApOwogCi0JZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmLT5mbXQucGl4LndpZHRoICoKKwl3aWR0aCA9IHBpeC0+d2lkdGg7CisJaGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisKKwlwaXgtPmJ5dGVzcGVybGluZSA9IHBpeC0+d2lkdGggKgogCQlESVZfUk9VTkRfVVAoeGxhdGUtPmhvc3RfZm10LT5kZXB0aCwgOCk7Ci0JZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOworCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKKworCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOwogCiAJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLwotCXJldCA9IGljZC0+b3BzLT50cnlfZm10KGljZCwgZik7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9mbXQsIGYpOworCXBpeC0+cGl4ZWxmb3JtYXQgPSBwaXhmbXQ7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlzd2l0Y2ggKGYtPmZtdC5waXguZmllbGQpIHsKLQljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKLQkJcGNkZXYtPmlzX2ludGVybGFjZWQgPSAxOwotCQlicmVhazsKLQljYXNlIFY0TDJfRklFTERfQU5ZOgotCQlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwotCQkvKiBmYWxsLXRocm91Z2ggKi8KLQljYXNlIFY0TDJfRklFTERfTk9ORToKLQkJcGNkZXYtPmlzX2ludGVybGFjZWQgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKKwlzd2l0Y2ggKHBpeGZtdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6CisJY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjE2OgorCWNhc2UgVjRMMl9QSVhfRk1UX05WNjE6CisJCS8qIEZJWE1FOiBjaGVjayBhZ2FpbnN0IHJlY3RfbWF4IGFmdGVyIGNvbnZlcnRpbmcgc29jLWNhbWVyYSAqLworCQkvKiBXZSBjYW4gc2NhbGUgcHJlY2lzZWx5LCBuZWVkIGEgYmlnZ2VyIGltYWdlIGZyb20gY2FtZXJhICovCisJCWlmIChwaXgtPndpZHRoIDwgd2lkdGggfHwgcGl4LT5oZWlnaHQgPCBoZWlnaHQpIHsKKwkJCWludCB0bXBfdyA9IHBpeC0+d2lkdGgsIHRtcF9oID0gcGl4LT5oZWlnaHQ7CisJCQlwaXgtPndpZHRoID0gMjU2MDsKKwkJCXBpeC0+aGVpZ2h0ID0gMTkyMDsKKwkJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfZm10LCBmKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJLyogU2hvdWxkbid0IGFjdHVhbGx5IGhhcHBlbi4uLiAqLworCQkJCWRldl9lcnIoaWNkLT5kZXYucGFyZW50LAorCQkJCQkiRklYTUU6IHRyeV9mbXQoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJCQlwaXgtPndpZHRoID0gdG1wX3c7CisJCQkJcGl4LT5oZWlnaHQgPSB0bXBfaDsKKwkJCX0KKwkJfQorCQlpZiAocGl4LT53aWR0aCA+IHdpZHRoKQorCQkJcGl4LT53aWR0aCA9IHdpZHRoOworCQlpZiAocGl4LT5oZWlnaHQgPiBoZWlnaHQpCisJCQlwaXgtPmhlaWdodCA9IGhlaWdodDsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzY5LDcgKzE1NjYsNyBAQAogCiAJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsCiAJCQkJICAgICAgICZzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX29wcywKLQkJCQkgICAgICAgaWNpLT5kZXYsICZwY2Rldi0+bG9jaywKKwkJCQkgICAgICAgaWNkLT5kZXYucGFyZW50LCAmcGNkZXYtPmxvY2ssCiAJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCQkgICAgICAgcGNkZXYtPmlzX2ludGVybGFjZWQgPwogCQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgOiBWNEwyX0ZJRUxEX05PTkUsCkBAIC03NzcsMjIgKzE1NzQsNzYgQEAKIAkJCQkgICAgICAgaWNkKTsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9jdHJsKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCXZhbCA9IGNldV9yZWFkKHBjZGV2LCBDTEZDUik7CisJCWN0cmwtPnZhbHVlID0gdmFsIF4gMTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfY3RybChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJc3dpdGNoIChpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpIHsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfTlYxMjoKKwkJY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToKKwkJY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjoKKwkJY2FzZSBWNEwyX1BJWF9GTVRfTlY2MToKKwkJCWNldV93cml0ZShwY2RldiwgQ0xGQ1IsICFjdHJsLT52YWx1ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBzaF9tb2JpbGVfY2V1X2NvbnRyb2xzW10gPSB7CisJeworCQkuaWQJCT0gVjRMMl9DSURfU0hBUlBORVNTLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiTG93LXBhc3MgZmlsdGVyIiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIHNoX21vYmlsZV9jZXVfaG9zdF9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5hZGQJCT0gc2hfbW9iaWxlX2NldV9hZGRfZGV2aWNlLAogCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2NldV9yZW1vdmVfZGV2aWNlLAogCS5nZXRfZm9ybWF0cwk9IHNoX21vYmlsZV9jZXVfZ2V0X2Zvcm1hdHMsCisJLnB1dF9mb3JtYXRzCT0gc2hfbW9iaWxlX2NldV9wdXRfZm9ybWF0cywKIAkuc2V0X2Nyb3AJPSBzaF9tb2JpbGVfY2V1X3NldF9jcm9wLAogCS5zZXRfZm10CT0gc2hfbW9iaWxlX2NldV9zZXRfZm10LAogCS50cnlfZm10CT0gc2hfbW9iaWxlX2NldV90cnlfZm10LAorCS5zZXRfY3RybAk9IHNoX21vYmlsZV9jZXVfc2V0X2N0cmwsCisJLmdldF9jdHJsCT0gc2hfbW9iaWxlX2NldV9nZXRfY3RybCwKIAkucmVxYnVmcwk9IHNoX21vYmlsZV9jZXVfcmVxYnVmcywKIAkucG9sbAkJPSBzaF9tb2JpbGVfY2V1X3BvbGwsCiAJLnF1ZXJ5Y2FwCT0gc2hfbW9iaWxlX2NldV9xdWVyeWNhcCwKIAkuc2V0X2J1c19wYXJhbQk9IHNoX21vYmlsZV9jZXVfc2V0X2J1c19wYXJhbSwKIAkuaW5pdF92aWRlb2J1Zgk9IHNoX21vYmlsZV9jZXVfaW5pdF92aWRlb2J1ZiwKKwkuY29udHJvbHMJPSBzaF9tb2JpbGVfY2V1X2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMJPSBBUlJBWV9TSVpFKHNoX21vYmlsZV9jZXVfY29udHJvbHMpLAogfTsKIAotc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9tb2JpbGVfY2V1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTg2NSw3ICsxNzE2LDcgQEAKIAlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKIAogCXBjZGV2LT5pY2kucHJpdiA9IHBjZGV2OwotCXBjZGV2LT5pY2kuZGV2ID0gJnBkZXYtPmRldjsKKwlwY2Rldi0+aWNpLnY0bDJfZGV2LmRldiA9ICZwZGV2LT5kZXY7CiAJcGNkZXYtPmljaS5uciA9IHBkZXYtPmlkOwogCXBjZGV2LT5pY2kuZHJ2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAlwY2Rldi0+aWNpLm9wcyA9ICZzaF9tb2JpbGVfY2V1X2hvc3Rfb3BzOwpAQCAtODg5LDcgKzE3NDAsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNoX21vYmlsZV9jZXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqc29jX2hvc3QgPSB0b19zb2NfY2FtZXJhX2hvc3QoJnBkZXYtPmRldik7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGNvbnRhaW5lcl9vZihzb2NfaG9zdCwKQEAgLTkyNyw3ICsxNzc4LDcgQEAKIAkJLnBtCT0gJnNoX21vYmlsZV9jZXVfZGV2X3BtX29wcywKIAl9LAogCS5wcm9iZQkJPSBzaF9tb2JpbGVfY2V1X3Byb2JlLAotCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2NldV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChzaF9tb2JpbGVfY2V1X3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9tb2JpbGVfY2V1X2luaXQodm9pZCkKQEAgLTk0NiwzICsxNzk3LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaF9tb2JpbGVfY2V1Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggMjNlZGZkYy4uOWQ4NGM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMTk1NCw4ICsxOTU0LDEwIEBACiAJCQkJICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8CiAJCQkJICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKIAkJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCksCi0JCQkJICAgIGNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgKgotCQkJCSAgICAxMDAwICogbXNlY3NfdG9famlmZmllcygxKSApOworCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKAorCQkJCQljYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ICogMTAwMAorCQkJCSAgICApCisJCQkJICApOwogCQkJaWYgKHRpbWVvdXQgPCAwKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCQkJcmV0dXJuIHRpbWVvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDlmNWFlODEuLjU5YWE3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0yMSwxNSArMjEsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1jb3JlLmg+CiAKIC8qIERlZmF1bHQgdG8gVkdBIHJlc29sdXRpb24gKi8KQEAgLTM4LDcgKzM4LDcgQEAKIAogc3RhdGljIExJU1RfSEVBRChob3N0cyk7CiBzdGF0aWMgTElTVF9IRUFEKGRldmljZXMpOwotc3RhdGljIERFRklORV9NVVRFWChsaXN0X2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChsaXN0X2xvY2spOwkJLyogUHJvdGVjdHMgdGhlIGxpc3Qgb2YgaG9zdHMgKi8KIAogY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKnNvY19jYW1lcmFfZm9ybWF0X2J5X2ZvdXJjYygKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdW5zaWduZWQgaW50IGZvdXJjYykKQEAgLTE1MiwxMiArMTUyLDkgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAotCWlmIChpY2QtPm9wcy0+c2V0X3N0ZCkKLQkJcmV0ID0gaWNkLT5vcHMtPnNldF9zdGQoaWNkLCBhKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfc3RkLCAqYSk7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMTcwLDggKzE2Nyw2IEBACiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXM6ICVkXG4iLCBfX2Z1bmNfXywgcC0+bWVtb3J5KTsKLQogCXJldCA9IHZpZGVvYnVmX3JlcWJ1ZnMoJmljZi0+dmJfdmlkcSwgcCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC0yMDksMTAgKzIwNCwxMSBAQAogCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmaWNmLT52Yl92aWRxLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiB9CiAKKy8qIEFsd2F5cyBlbnRlcmVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwogc3RhdGljIGludCBzb2NfY2FtZXJhX2luaXRfdXNlcl9mb3JtYXRzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwotCWludCBpLCBmbXRzID0gMDsKKwlpbnQgaSwgZm10cyA9IDAsIHJldDsKIAogCWlmICghaWNpLT5vcHMtPmdldF9mb3JtYXRzKQogCQkvKgpAQCAtMjI1LDggKzIyMSwxMiBAQAogCQkgKiBGaXJzdCBwYXNzIC0gb25seSBjb3VudCBmb3JtYXRzIHRoaXMgaG9zdC1zZW5zb3IKIAkJICogY29uZmlndXJhdGlvbiBjYW4gcHJvdmlkZQogCQkgKi8KLQkJZm9yIChpID0gMDsgaSA8IGljZC0+bnVtX2Zvcm1hdHM7IGkrKykKLQkJCWZtdHMgKz0gaWNpLT5vcHMtPmdldF9mb3JtYXRzKGljZCwgaSwgTlVMTCk7CisJCWZvciAoaSA9IDA7IGkgPCBpY2QtPm51bV9mb3JtYXRzOyBpKyspIHsKKwkJCXJldCA9IGljaS0+b3BzLT5nZXRfZm9ybWF0cyhpY2QsIGksIE5VTEwpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWZtdHMgKz0gcmV0OworCQl9CiAKIAlpZiAoIWZtdHMpCiAJCXJldHVybiAtRU5YSU87CkBAIC0yNDgsMjAgKzI0OCwzOSBAQAogCQkJaWNkLT51c2VyX2Zvcm1hdHNbaV0uY2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGk7CiAJCQlpY2QtPnVzZXJfZm9ybWF0c1tpXS5idXN3aWR0aCA9IGljZC0+Zm9ybWF0c1tpXS5kZXB0aDsKIAkJfSBlbHNlIHsKLQkJCWZtdHMgKz0gaWNpLT5vcHMtPmdldF9mb3JtYXRzKGljZCwgaSwKLQkJCQkJCSAgICAgICZpY2QtPnVzZXJfZm9ybWF0c1tmbXRzXSk7CisJCQlyZXQgPSBpY2ktPm9wcy0+Z2V0X2Zvcm1hdHMoaWNkLCBpLAorCQkJCQkJICAgICZpY2QtPnVzZXJfZm9ybWF0c1tmbXRzXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGVnZm10OworCQkJZm10cyArPSByZXQ7CiAJCX0KIAogCWljZC0+Y3VycmVudF9mbXQgPSBpY2QtPnVzZXJfZm9ybWF0c1swXS5ob3N0X2ZtdDsKIAogCXJldHVybiAwOworCitlZ2ZtdDoKKwlpY2QtPm51bV91c2VyX2Zvcm1hdHMgPSAwOworCXZmcmVlKGljZC0+dXNlcl9mb3JtYXRzKTsKKwlyZXR1cm4gcmV0OwogfQogCisvKiBBbHdheXMgZW50ZXJlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KIHN0YXRpYyB2b2lkIHNvY19jYW1lcmFfZnJlZV91c2VyX2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisKKwlpZiAoaWNpLT5vcHMtPnB1dF9mb3JtYXRzKQorCQlpY2ktPm9wcy0+cHV0X2Zvcm1hdHMoaWNkKTsKKwlpY2QtPmN1cnJlbnRfZm10ID0gTlVMTDsKKwlpY2QtPm51bV91c2VyX2Zvcm1hdHMgPSAwOwogCXZmcmVlKGljZC0+dXNlcl9mb3JtYXRzKTsKKwlpY2QtPnVzZXJfZm9ybWF0cyA9IE5VTEw7CiB9CiAKKyNkZWZpbmUgcGl4Zm10c3RyKHgpICh4KSAmIDB4ZmYsICgoeCkgPj4gOCkgJiAweGZmLCAoKHgpID4+IDE2KSAmIDB4ZmYsIFwKKwkoKHgpID4+IDI0KSAmIDB4ZmYKKwogLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLwogc3RhdGljIGludCBzb2NfY2FtZXJhX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQpAQCAtMjcxLDYgKzI5MCw5IEBACiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJaW50IHJldDsKIAorCWRldl9kYmcoJmljZC0+ZGV2LCAiU19GTVQoJWMlYyVjJWMsICV1eCV1KVxuIiwKKwkJcGl4Zm10c3RyKHBpeC0+cGl4ZWxmb3JtYXQpLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKIAkvKiBXZSBhbHdheXMgY2FsbCB0cnlfZm10KCkgYmVmb3JlIHNldF9mbXQoKSBvciBzZXRfY3JvcCgpICovCiAJcmV0ID0gaWNpLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKIAlpZiAocmV0IDwgMCkKQEAgLTI4MSwxMyArMzAzLDEzIEBACiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmICghaWNkLT5jdXJyZW50X2ZtdCB8fAogCQkgICBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MgIT0gcGl4LT5waXhlbGZvcm1hdCkgewotCQlkZXZfZXJyKGljaS0+ZGV2LAorCQlkZXZfZXJyKCZpY2QtPmRldiwKIAkJCSJIb3N0IGRyaXZlciBoYXNuJ3Qgc2V0IHVwIGN1cnJlbnQgZm9ybWF0IGNvcnJlY3RseSFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpY2QtPndpZHRoCQk9IHBpeC0+d2lkdGg7Ci0JaWNkLT5oZWlnaHQJCT0gcGl4LT5oZWlnaHQ7CisJaWNkLT51c2VyX3dpZHRoCQk9IHBpeC0+d2lkdGg7CisJaWNkLT51c2VyX2hlaWdodAk9IHBpeC0+aGVpZ2h0OwogCWljZi0+dmJfdmlkcS5maWVsZAk9CiAJCWljZC0+ZmllbGQJPSBwaXgtPmZpZWxkOwogCkBAIC0yOTYsNyArMzE4LDcgQEAKIAkJCSBmLT50eXBlKTsKIAogCWRldl9kYmcoJmljZC0+ZGV2LCAic2V0IHdpZHRoOiAlZCBoZWlnaHQ6ICVkXG4iLAotCQlpY2QtPndpZHRoLCBpY2QtPmhlaWdodCk7CisJCWljZC0+dXNlcl93aWR0aCwgaWNkLT51c2VyX2hlaWdodCk7CiAKIAkvKiBzZXQgcGh5c2ljYWwgYnVzIHBhcmFtZXRlcnMgKi8KIAlyZXR1cm4gaWNpLT5vcHMtPnNldF9idXNfcGFyYW0oaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKQEAgLTMwNCwzOCArMzI2LDM1IEBACiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjb250YWluZXJfb2YodmRldi0+cGFyZW50LAorCQkJCQkJICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UsCisJCQkJCQkgICAgIGRldik7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpOwogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZjsKIAlpbnQgcmV0OwogCisJaWYgKCFpY2QtPm9wcykKKwkJLyogTm8gZGV2aWNlIGRyaXZlciBhdHRhY2hlZCAqLworCQlyZXR1cm4gLUVOT0RFVjsKKworCWljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCiAJaWNmID0gdm1hbGxvYyhzaXplb2YoKmljZikpOwogCWlmICghaWNmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qCi0JICogSXQgaXMgc2FmZSB0byBkZXJlZmVyZW5jZSB0aGVzZSBwb2ludGVycyBub3cgYXMgbG9uZyBhcyBhIHVzZXIgaGFzCi0JICogdGhlIHZpZGVvIGRldmljZSBvcGVuIC0gd2UgYXJlIHByb3RlY3RlZCBieSB0aGUgaGVsZCBjZGV2IHJlZmVyZW5jZS4KLQkgKi8KLQotCXZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCWljZCA9IGNvbnRhaW5lcl9vZih2ZGV2LT5wYXJlbnQsIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSwgZGV2KTsKLQlpY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQotCWlmICghdHJ5X21vZHVsZV9nZXQoaWNkLT5vcHMtPm93bmVyKSkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGxvY2sgc2Vuc29yIGRyaXZlci5cbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVtZ2Q7Ci0JfQotCiAJaWYgKCF0cnlfbW9kdWxlX2dldChpY2ktPm9wcy0+b3duZXIpKSB7CiAJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ291bGRuJ3QgbG9jayBjYXB0dXJlIGJ1cyBkcml2ZXIuXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlbWdpOwogCX0KIAotCS8qIFByb3RlY3QgYWdhaW5zdCBpY2QtPnJlbW92ZSgpIHVudGlsIHdlIG1vZHVsZV9nZXQoKSBib3RoIGRyaXZlcnMuICovCisJLyoKKwkgKiBQcm90ZWN0IGFnYWluc3QgaWNkLT5vcHMtPnJlbW92ZSgpIHVudGlsIHdlIG1vZHVsZV9nZXQoKSBib3RoCisJICogZHJpdmVycy4KKwkgKi8KIAltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCiAJaWNmLT5pY2QgPSBpY2Q7CkBAIC0zNDcsMTQgKzM2NiwyNCBAQAogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsKIAkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkJLmZtdC5waXggPSB7Ci0JCQkJLndpZHRoCQk9IGljZC0+d2lkdGgsCi0JCQkJLmhlaWdodAkJPSBpY2QtPmhlaWdodCwKKwkJCQkud2lkdGgJCT0gaWNkLT51c2VyX3dpZHRoLAorCQkJCS5oZWlnaHQJCT0gaWNkLT51c2VyX2hlaWdodCwKIAkJCQkuZmllbGQJCT0gaWNkLT5maWVsZCwKIAkJCQkucGl4ZWxmb3JtYXQJPSBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MsCiAJCQkJLmNvbG9yc3BhY2UJPSBpY2QtPmN1cnJlbnRfZm10LT5jb2xvcnNwYWNlLAogCQkJfSwKIAkJfTsKIAorCQlpZiAoaWNsLT5wb3dlcikgeworCQkJcmV0ID0gaWNsLT5wb3dlcihpY2QtPnBkZXYsIDEpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcG93ZXI7CisJCX0KKworCQkvKiBUaGUgY2FtZXJhIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IG9uLCB0cnkgdG8gcmVzZXQgKi8KKwkJaWYgKGljbC0+cmVzZXQpCisJCQlpY2wtPnJlc2V0KGljZC0+cGRldik7CisKIAkJcmV0ID0gaWNpLT5vcHMtPmFkZChpY2QpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmaWNkLT5kZXYsICJDb3VsZG4ndCBhY3RpdmF0ZSB0aGUgY2FtZXJhOiAlZFxuIiwgcmV0KTsKQEAgLTM2NywyOCArMzk2LDI5IEBACiAJCQlnb3RvIGVzZm10OwogCX0KIAotCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKLQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGljZjsKIAlkZXZfZGJnKCZpY2QtPmRldiwgImNhbWVyYSBkZXZpY2Ugb3BlblxuIik7CiAKIAlpY2ktPm9wcy0+aW5pdF92aWRlb2J1ZigmaWNmLT52Yl92aWRxLCBpY2QpOwogCisJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOworCiAJcmV0dXJuIDA7CiAKIAkvKgotCSAqIEZpcnN0IHRocmVlIGVycm9ycyBhcmUgZW50ZXJlZCB3aXRoIHRoZSAudmlkZW9fbG9jayBoZWxkCisJICogRmlyc3QgZml2ZSBlcnJvcnMgYXJlIGVudGVyZWQgd2l0aCB0aGUgLnZpZGVvX2xvY2sgaGVsZAogCSAqIGFuZCB1c2VfY291bnQgPT0gMQogCSAqLwogZXNmbXQ6CiAJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwogZWljaWFkZDoKKwlpZiAoaWNsLT5wb3dlcikKKwkJaWNsLT5wb3dlcihpY2QtPnBkZXYsIDApOworZXBvd2VyOgogCWljZC0+dXNlX2NvdW50LS07CiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKIGVtZ2k6Ci0JbW9kdWxlX3B1dChpY2QtPm9wcy0+b3duZXIpOwotZW1nZDoKIAl2ZnJlZShpY2YpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zOTgsMjEgKzQyOCwyNCBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBpY2QtPnZkZXY7CiAKIAltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCWljZC0+dXNlX2NvdW50LS07Ci0JaWYgKCFpY2QtPnVzZV9jb3VudCkKKwlpZiAoIWljZC0+dXNlX2NvdW50KSB7CisJCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOworCiAJCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKKwkJaWYgKGljbC0+cG93ZXIpCisJCQlpY2wtPnBvd2VyKGljZC0+cGRldiwgMCk7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCi0JbW9kdWxlX3B1dChpY2QtPm9wcy0+b3duZXIpOwogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKIAogCXZmcmVlKGljZik7CiAKLQlkZXZfZGJnKHZkZXYtPnBhcmVudCwgImNhbWVyYSBkZXZpY2UgY2xvc2VcbiIpOworCWRldl9kYmcoJmljZC0+ZGV2LCAiY2FtZXJhIGRldmljZSBjbG9zZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyMiwxMCArNDU1LDkgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaWNkLT52ZGV2OwogCWludCBlcnIgPSAtRUlOVkFMOwogCi0JZGV2X2Vycih2ZGV2LT5wYXJlbnQsICJjYW1lcmEgZGV2aWNlIHJlYWQgbm90IGltcGxlbWVudGVkXG4iKTsKKwlkZXZfZXJyKCZpY2QtPmRldiwgImNhbWVyYSBkZXZpY2UgcmVhZCBub3QgaW1wbGVtZW50ZWRcbiIpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ4Myw4ICs1MTUsOCBAQAogCiAJbXV0ZXhfbG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOwogCi0JaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koJmljZi0+dmJfdmlkcSkpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJTX0ZNVCBkZW5pZWQ6IHF1ZXVlIGJ1c3lcbiIpOworCWlmIChpY2YtPnZiX3ZpZHEuYnVmc1swXSkgeworCQlkZXZfZXJyKCZpY2QtPmRldiwgIlNfRk1UIGRlbmllZDogcXVldWUgaW5pdGlhbGlzZWRcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTUyNSw4ICs1NTcsOCBAQAogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlwaXgtPndpZHRoCQk9IGljZC0+d2lkdGg7Ci0JcGl4LT5oZWlnaHQJCT0gaWNkLT5oZWlnaHQ7CisJcGl4LT53aWR0aAkJPSBpY2QtPnVzZXJfd2lkdGg7CisJcGl4LT5oZWlnaHQJCT0gaWNkLT51c2VyX2hlaWdodDsKIAlwaXgtPmZpZWxkCQk9IGljZi0+dmJfdmlkcS5maWVsZDsKIAlwaXgtPnBpeGVsZm9ybWF0CT0gaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjOwogCXBpeC0+Ynl0ZXNwZXJsaW5lCT0gcGl4LT53aWR0aCAqCkBAIC01NTUsMTggKzU4NywxNyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWludCByZXQ7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQogCWlmIChpICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCi0JaWNkLT5vcHMtPnN0YXJ0X2NhcHR1cmUoaWNkKTsKKwl2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19zdHJlYW0sIDEpOwogCiAJLyogVGhpcyBjYWxscyBidWZfcXVldWUgZnJvbSBob3N0IGRyaXZlcidzIHZpZGVvYnVmX3F1ZXVlX29wcyAqLwogCXJldCA9IHZpZGVvYnVmX3N0cmVhbW9uKCZpY2YtPnZiX3ZpZHEpOwpAQCAtNTgxLDExICs2MTIsMTAgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCiAJaWYgKGkgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTk1LDcgKzYyNSw3IEBACiAJICogcmVtYWluaW5nIGJ1ZmZlcnMuIFdoZW4gdGhlIGxhc3QgYnVmZmVyIGlzIGZyZWVkLCBzdG9wIGNhcHR1cmUgKi8KIAl2aWRlb2J1Zl9zdHJlYW1vZmYoJmljZi0+dmJfdmlkcSk7CiAKLQlpY2QtPm9wcy0+c3RvcF9jYXB0dXJlKGljZCk7CisJdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKIAogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIApAQCAtNjA3LDYgKzYzNyw3IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJaW50IGk7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTYxNCw2ICs2NDUsMTUgQEAKIAlpZiAoIXFjLT5pZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBGaXJzdCBjaGVjayBob3N0IGNvbnRyb2xzICovCisJZm9yIChpID0gMDsgaSA8IGljaS0+b3BzLT5udW1fY29udHJvbHM7IGkrKykKKwkJaWYgKHFjLT5pZCA9PSBpY2ktPm9wcy0+Y29udHJvbHNbaV0uaWQpIHsKKwkJCW1lbWNweShxYywgJihpY2ktPm9wcy0+Y29udHJvbHNbaV0pLAorCQkJCXNpemVvZigqcWMpKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkvKiBUaGVuIGRldmljZSBjb250cm9scyAqLwogCWZvciAoaSA9IDA7IGkgPCBpY2QtPm9wcy0+bnVtX2NvbnRyb2xzOyBpKyspCiAJCWlmIChxYy0+aWQgPT0gaWNkLT5vcHMtPmNvbnRyb2xzW2ldLmlkKSB7CiAJCQltZW1jcHkocWMsICYoaWNkLT5vcHMtPmNvbnRyb2xzW2ldKSwKQEAgLTYyOSwyNSArNjY5LDE5IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJaW50IHJldDsKIAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfR0FJTjoKLQkJaWYgKGljZC0+Z2FpbiA9PSAodW5zaWduZWQgc2hvcnQpfjApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3RybC0+dmFsdWUgPSBpY2QtPmdhaW47Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6Ci0JCWlmIChpY2QtPmV4cG9zdXJlID09ICh1bnNpZ25lZCBzaG9ydCl+MCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljdHJsLT52YWx1ZSA9IGljZC0+ZXhwb3N1cmU7Ci0JCXJldHVybiAwOworCWlmIChpY2ktPm9wcy0+Z2V0X2N0cmwpIHsKKwkJcmV0ID0gaWNpLT5vcHMtPmdldF9jdHJsKGljZCwgY3RybCk7CisJCWlmIChyZXQgIT0gLUVOT0lPQ1RMQ01EKQorCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoaWNkLT5vcHMtPmdldF9jb250cm9sKQotCQlyZXR1cm4gaWNkLT5vcHMtPmdldF9jb250cm9sKGljZCwgY3RybCk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIGdfY3RybCwgY3RybCk7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC02NTUsMTIgKzY4OSwxOSBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCWludCByZXQ7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAotCWlmIChpY2QtPm9wcy0+c2V0X2NvbnRyb2wpCi0JCXJldHVybiBpY2QtPm9wcy0+c2V0X2NvbnRyb2woaWNkLCBjdHJsKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaWNpLT5vcHMtPnNldF9jdHJsKSB7CisJCXJldCA9IGljaS0+b3BzLT5zZXRfY3RybChpY2QsIGN0cmwpOworCQlpZiAocmV0ICE9IC1FTk9JT0NUTENNRCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfY3RybCwgY3RybCk7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTY2OCwyMCArNzA5LDkgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAotCWEtPnR5cGUJCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JYS0+Ym91bmRzLmxlZnQJCQk9IGljZC0+eF9taW47Ci0JYS0+Ym91bmRzLnRvcAkJCT0gaWNkLT55X21pbjsKLQlhLT5ib3VuZHMud2lkdGgJCQk9IGljZC0+d2lkdGhfbWF4OwotCWEtPmJvdW5kcy5oZWlnaHQJCT0gaWNkLT5oZWlnaHRfbWF4OwotCWEtPmRlZnJlY3QubGVmdAkJCT0gaWNkLT54X21pbjsKLQlhLT5kZWZyZWN0LnRvcAkJCT0gaWNkLT55X21pbjsKLQlhLT5kZWZyZWN0LndpZHRoCQk9IERFRkFVTFRfV0lEVEg7Ci0JYS0+ZGVmcmVjdC5oZWlnaHQJCT0gREVGQVVMVF9IRUlHSFQ7Ci0JYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yCT0gMTsKLQlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcgk9IDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaWNpLT5vcHMtPmNyb3BjYXAoaWNkLCBhKTsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCkBAIC02ODksMzYgKzcxOSw1MyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCWludCByZXQ7CiAKLQlhLT50eXBlCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlhLT5jLmxlZnQJPSBpY2QtPnhfY3VycmVudDsKLQlhLT5jLnRvcAk9IGljZC0+eV9jdXJyZW50OwotCWEtPmMud2lkdGgJPSBpY2QtPndpZHRoOwotCWEtPmMuaGVpZ2h0CT0gaWNkLT5oZWlnaHQ7CisJbXV0ZXhfbG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOworCXJldCA9IGljaS0+b3BzLT5nZXRfY3JvcChpY2QsIGEpOworCW11dGV4X3VubG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIEFjY29yZGluZyB0byB0aGUgVjRMMiBBUEksIGRyaXZlcnMgc2hhbGwgbm90IHVwZGF0ZSB0aGUgc3RydWN0IHY0bDJfY3JvcAorICogYXJndW1lbnQgd2l0aCB0aGUgYWN0dWFsIGdlb21ldHJ5LCBpbnN0ZWFkLCB0aGUgdXNlciBzaGFsbCB1c2UgR19DUk9QIHRvCisgKiByZXRyaWV2ZSBpdC4gSG93ZXZlciwgd2UgZXhwZWN0IGNhbWVyYSBob3N0IGFuZCBjbGllbnQgZHJpdmVycyB0byB1cGRhdGUKKyAqIHRoZSBhcmd1bWVudCwgd2hpY2ggd2UgdGhlbiB1c2UgaW50ZXJuYWxseSwgYnV0IGRvIG5vdCByZXR1cm4gdG8gdGhlIHVzZXIuCisgKi8KIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9zX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmYS0+YzsKKwlzdHJ1Y3QgdjRsMl9jcm9wIGN1cnJlbnRfY3JvcDsKIAlpbnQgcmV0OwogCiAJaWYgKGEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWRldl9kYmcoJmljZC0+ZGV2LCAiU19DUk9QKCV1eCV1QCV1OiV1KVxuIiwKKwkJcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKKwogCS8qIENyb3BwaW5nIGlzIGFsbG93ZWQgZHVyaW5nIGEgcnVubmluZyBjYXB0dXJlLCBndWFyZCBjb25zaXN0ZW5jeSAqLwogCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKIAotCXJldCA9IGljaS0+b3BzLT5zZXRfY3JvcChpY2QsICZhLT5jKTsKLQlpZiAoIXJldCkgewotCQlpY2QtPndpZHRoCT0gYS0+Yy53aWR0aDsKLQkJaWNkLT5oZWlnaHQJPSBhLT5jLmhlaWdodDsKLQkJaWNkLT54X2N1cnJlbnQJPSBhLT5jLmxlZnQ7Ci0JCWljZC0+eV9jdXJyZW50CT0gYS0+Yy50b3A7CisJLyogSWYgZ2V0X2Nyb3AgZmFpbHMsIHdlJ2xsIGxldCBob3N0IGFuZCAvIG9yIGNsaWVudCBkcml2ZXJzIGRlY2lkZSAqLworCXJldCA9IGljaS0+b3BzLT5nZXRfY3JvcChpY2QsICZjdXJyZW50X2Nyb3ApOworCisJLyogUHJvaGliaXQgd2luZG93IHNpemUgY2hhbmdlIHdpdGggaW5pdGlhbGlzZWQgYnVmZmVycyAqLworCWlmIChpY2YtPnZiX3ZpZHEuYnVmc1swXSAmJiAhcmV0ICYmCisJICAgIChhLT5jLndpZHRoICE9IGN1cnJlbnRfY3JvcC5jLndpZHRoIHx8CisJICAgICBhLT5jLmhlaWdodCAhPSBjdXJyZW50X2Nyb3AuYy5oZWlnaHQpKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LAorCQkJIlNfQ1JPUCBkZW5pZWQ6IHF1ZXVlIGluaXRpYWxpc2VkIGFuZCBzaXplcyBkaWZmZXJcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJfSBlbHNlIHsKKwkJcmV0ID0gaWNpLT5vcHMtPnNldF9jcm9wKGljZCwgYSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZpY2YtPnZiX3ZpZHEudmJfbG9jayk7CkBAIC03MzEsMTEgKzc3OCw5IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAKLQlpZiAoIWljZC0+b3BzLT5nZXRfY2hpcF9pZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gaWNkLT5vcHMtPmdldF9jaGlwX2lkKGljZCwgaWQpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX2NoaXBfaWRlbnQsIGlkKTsKIH0KIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKQEAgLTc0NCwxMSArNzg5LDkgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAotCWlmICghaWNkLT5vcHMtPmdldF9yZWdpc3RlcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gaWNkLT5vcHMtPmdldF9yZWdpc3RlcihpY2QsIHJlZyk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTc1NiwzNyArNzk5LDEyIEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAKLQlpZiAoIWljZC0+b3BzLT5zZXRfcmVnaXN0ZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGljZC0+b3BzLT5zZXRfcmVnaXN0ZXIoaWNkLCByZWcpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZGV2aWNlX3JlZ2lzdGVyX2xpbmsoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0JaW50IHJldCA9IGRldl9zZXRfbmFtZSgmaWNkLT5kZXYsICIldS0ldSIsIGljZC0+aWZhY2UsIGljZC0+ZGV2bnVtKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmljZC0+ZGV2KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCS8qIFByZXZlbnQgY2FsbGluZyBkZXZpY2VfdW5yZWdpc3RlcigpICovCi0JCWljZC0+ZGV2LnBhcmVudCA9IE5VTEw7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIGRldmljZTogJWRcbiIsIHJldCk7Ci0JLyogRXZlbiBpZiBwcm9iZSgpIHdhcyB1bnN1Y2Nlc3NmdWwgZm9yIGFsbCByZWdpc3RlcmVkIGRyaXZlcnMsCi0JICogZGV2aWNlX3JlZ2lzdGVyKCkgcmV0dXJucyAwLCBhbmQgd2UgYWRkIHRoZSBsaW5rLCBqdXN0IHRvCi0JICogZG9jdW1lbnQgdGhpcyBjYW1lcmEncyBjb250cm9sIGRldmljZSAqLwotCX0gZWxzZSBpZiAoaWNkLT5jb250cm9sKQotCQkvKiBIYXZlIHRvIHN5c2ZzX3JlbW92ZV9saW5rKCkgYmVmb3JlIGRldmljZV91bnJlZ2lzdGVyKCk/ICovCi0JCWlmIChzeXNmc19jcmVhdGVfbGluaygmaWNkLT5kZXYua29iaiwgJmljZC0+Y29udHJvbC0+a29iaiwKLQkJCQkgICAgICAiY29udHJvbCIpKQotCQkJZGV2X3dhcm4oJmljZC0+ZGV2LAotCQkJCSAiRmFpbGVkIGNyZWF0aW5nIHRoZSBjb250cm9sIHN5bWxpbmtcbiIpOwotCXJldHVybiByZXQ7Ci19Ci0KIC8qIFNvIGZhciB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBmYWlsICovCiBzdGF0aWMgdm9pZCBzY2FuX2FkZF9ob3N0KHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSkKIHsKQEAgLTc5NiwxMDYgKzgxNCwxOTMgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWNkLCAmZGV2aWNlcywgbGlzdCkgewogCQlpZiAoaWNkLT5pZmFjZSA9PSBpY2ktPm5yKSB7Ci0JCQlpY2QtPmRldi5wYXJlbnQgPSBpY2ktPmRldjsKLQkJCWRldmljZV9yZWdpc3Rlcl9saW5rKGljZCk7CisJCQlpbnQgcmV0OworCQkJaWNkLT5kZXYucGFyZW50ID0gaWNpLT52NGwyX2Rldi5kZXY7CisJCQlkZXZfc2V0X25hbWUoJmljZC0+ZGV2LCAiJXUtJXUiLCBpY2QtPmlmYWNlLAorCQkJCSAgICAgaWNkLT5kZXZudW0pOworCQkJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZpY2QtPmRldik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWljZC0+ZGV2LnBhcmVudCA9IE5VTEw7CisJCQkJZGV2X2VycigmaWNkLT5kZXYsCisJCQkJCSJDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJCX0KIAkJfQogCX0KIAogCW11dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKIH0KIAotLyogcmV0dXJuOiAwIGlmIG5vIG1hdGNoIGZvdW5kIG9yIGEgbWF0Y2ggZm91bmQgYW5kCi0gKiBkZXZpY2VfcmVnaXN0ZXIoKSBzdWNjZXNzZnVsLCBlcnJvciBjb2RlIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBzY2FuX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCisjaWZkZWYgQ09ORklHX0kyQ19CT0FSRElORk8KK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9pbml0X2kyYyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpOwotCWludCByZXQgPSAwOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX2dldF9hZGFwdGVyKGljbC0+aTJjX2FkYXB0ZXJfaWQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2OworCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZsaXN0X2xvY2spOwotCi0JbGlzdF9hZGRfdGFpbCgmaWNkLT5saXN0LCAmZGV2aWNlcyk7Ci0KLQkvKiBXYXRjaCBvdXQgZm9yIGNsYXNzX2Zvcl9lYWNoX2RldmljZSAvIGNsYXNzX2ZpbmRfZGV2aWNlIEFQSSBieQotCSAqIERhdmUgWW91bmcgPGhpZGF2ZS5kYXJrc3RhckBnbWFpbC5jb20+ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpY2ksICZob3N0cywgbGlzdCkgewotCQlpZiAoaWNkLT5pZmFjZSA9PSBpY2ktPm5yKSB7Ci0JCQlyZXQgPSAxOwotCQkJaWNkLT5kZXYucGFyZW50ID0gaWNpLT5kZXY7Ci0JCQlicmVhazsKLQkJfQorCWlmICghYWRhcCkgeworCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNhbm5vdCBnZXQgSTJDIGFkYXB0ZXIgIyVkLiBObyBkcml2ZXI/XG4iLAorCQkJaWNsLT5pMmNfYWRhcHRlcl9pZCk7CisJCWdvdG8gZWkyY2dhOwogCX0KIAotCW11dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKKwlpY2wtPmJvYXJkX2luZm8tPnBsYXRmb3JtX2RhdGEgPSBpY2Q7CiAKLQlpZiAocmV0KQotCQlyZXQgPSBkZXZpY2VfcmVnaXN0ZXJfbGluayhpY2QpOworCXN1YmRldiA9IHY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJmljaS0+djRsMl9kZXYsIGFkYXAsCisJCQkJaWNsLT5tb2R1bGVfbmFtZSwgaWNsLT5ib2FyZF9pbmZvLCBOVUxMKTsKKwlpZiAoIXN1YmRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVpMmNuZDsKKwl9CiAKKwljbGllbnQgPSBzdWJkZXYtPnByaXY7CisKKwkvKiBVc2UgdG9faTJjX2NsaWVudChkZXYpIHRvIHJlY292ZXIgdGhlIGkyYyBjbGllbnQgKi8KKwlkZXZfc2V0X2RydmRhdGEoJmljZC0+ZGV2LCAmY2xpZW50LT5kZXYpOworCisJcmV0dXJuIDA7CitlaTJjbmQ6CisJaTJjX3B1dF9hZGFwdGVyKGFkYXApOworZWkyY2dhOgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHNvY19jYW1lcmFfZnJlZV9pMmMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9CisJCXRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCWRldl9zZXRfZHJ2ZGF0YSgmaWNkLT5kZXYsIE5VTEwpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwlpMmNfcHV0X2FkYXB0ZXIoY2xpZW50LT5hZGFwdGVyKTsKK30KKyNlbHNlCisjZGVmaW5lIHNvY19jYW1lcmFfaW5pdF9pMmMoaWNkLCBpY2wpCSgtRU5PREVWKQorI2RlZmluZSBzb2NfY2FtZXJhX2ZyZWVfaTJjKGljZCkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGludCBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKK3N0YXRpYyBpbnQgdmlkZW9fZGV2X2NyZWF0ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CisvKiBDYWxsZWQgZHVyaW5nIGhvc3QtZHJpdmVyIHByb2JlICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYoZGV2KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoZGV2LT5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOworCXN0cnVjdCBkZXZpY2UgKmNvbnRyb2wgPSBOVUxMOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJc3RydWN0IHY0bDJfZm9ybWF0IGYgPSB7LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkV9OwogCWludCByZXQ7CiAKLQkvKgotCSAqIFBvc3NpYmxlIHJhY2Ugc2NlbmFyaW86Ci0JICogbW9kcHJvYmUgPGNhbWVyYS1ob3N0LWRyaXZlcj4gdHJpZ2dlcnMgX19mdW5jX18KLQkgKiBhdCB0aGlzIG1vbWVudCByZXNwZWN0aXZlIDxjYW1lcmEtc2Vuc29yLWRyaXZlcj4gZ2V0cyBybW1vZCdlZAotCSAqIHRvIHByb3RlY3QgdGFrZSBtb2R1bGUgcmVmZXJlbmNlcy4KLQkgKi8KKwlkZXZfaW5mbyhkZXYsICJQcm9iaW5nICVzXG4iLCBkZXZfbmFtZShkZXYpKTsKIAotCWlmICghdHJ5X21vZHVsZV9nZXQoaWNkLT5vcHMtPm93bmVyKSkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGxvY2sgc2Vuc29yIGRyaXZlci5cbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVtZ2Q7CisJaWYgKGljbC0+cG93ZXIpIHsKKwkJcmV0ID0gaWNsLT5wb3dlcihpY2QtPnBkZXYsIDEpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIlBsYXRmb3JtIGZhaWxlZCB0byBwb3dlci1vbiB0aGUgY2FtZXJhLlxuIik7CisJCQlnb3RvIGVwb3dlcjsKKwkJfQogCX0KIAotCWlmICghdHJ5X21vZHVsZV9nZXQoaWNpLT5vcHMtPm93bmVyKSkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGxvY2sgY2FwdHVyZSBidXMgZHJpdmVyLlxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZW1naTsKLQl9CisJLyogVGhlIGNhbWVyYSBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBvbiwgdHJ5IHRvIHJlc2V0ICovCisJaWYgKGljbC0+cmVzZXQpCisJCWljbC0+cmVzZXQoaWNkLT5wZGV2KTsKIAotCW11dGV4X2xvY2soJmljZC0+dmlkZW9fbG9jayk7Ci0KLQkvKiBXZSBvbmx5IGNhbGwgLT5hZGQoKSBoZXJlIHRvIGFjdGl2YXRlIGFuZCBwcm9iZSB0aGUgY2FtZXJhLgotCSAqIFdlIHNoYWxsIC0+cmVtb3ZlKCkgYW5kIGRlYWN0aXZhdGUgaXQgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4gKi8KIAlyZXQgPSBpY2ktPm9wcy0+YWRkKGljZCk7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZWlhZGQ7CisJCWdvdG8gZWFkZDsKIAotCXJldCA9IGljZC0+b3BzLT5wcm9iZShpY2QpOwotCWlmIChyZXQgPj0gMCkgewotCQljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOworCS8qIE11c3QgaGF2ZSBpY2QtPnZkZXYgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UgKi8KKwlyZXQgPSB2aWRlb19kZXZfY3JlYXRlKGljZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXZkYzsKIAotCQlxY3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybChpY2QtPm9wcywgVjRMMl9DSURfR0FJTik7Ci0JCWljZC0+Z2FpbiA9IHFjdHJsID8gcWN0cmwtPmRlZmF1bHRfdmFsdWUgOiAodW5zaWduZWQgc2hvcnQpfjA7Ci0JCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLCBWNEwyX0NJRF9FWFBPU1VSRSk7Ci0JCWljZC0+ZXhwb3N1cmUgPSBxY3RybCA/IHFjdHJsLT5kZWZhdWx0X3ZhbHVlIDoKLQkJCSh1bnNpZ25lZCBzaG9ydCl+MDsKKwkvKiBOb24taTJjIGNhbWVyYXMsIGUuZy4sIHNvY19jYW1lcmFfcGxhdGZvcm0sIGhhdmUgbm8gYm9hcmRfaW5mbyAqLworCWlmIChpY2wtPmJvYXJkX2luZm8pIHsKKwkJcmV0ID0gc29jX2NhbWVyYV9pbml0X2kyYyhpY2QsIGljbCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlYWRkZGV2OworCX0gZWxzZSBpZiAoIWljbC0+YWRkX2RldmljZSB8fCAhaWNsLT5kZWxfZGV2aWNlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZWFkZGRldjsKKwl9IGVsc2UgeworCQlpZiAoaWNsLT5tb2R1bGVfbmFtZSkKKwkJCXJldCA9IHJlcXVlc3RfbW9kdWxlKGljbC0+bW9kdWxlX25hbWUpOwogCi0JCXJldCA9IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoaWNkKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWlmIChpY2QtPm9wcy0+cmVtb3ZlKQotCQkJCWljZC0+b3BzLT5yZW1vdmUoaWNkKTsKLQkJCWdvdG8gZWl1Zm10OworCQlyZXQgPSBpY2wtPmFkZF9kZXZpY2UoaWNsLCAmaWNkLT5kZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZWFkZGRldjsKKworCQkvKgorCQkgKiBGSVhNRTogdGhpcyBpcyByYWN5LCBoYXZlIHRvIHVzZSBkcml2ZXItYmluZGluZyBub3RpZmljYXRpb24sCisJCSAqIHdoZW4gaXQgaXMgYXZhaWxhYmxlCisJCSAqLworCQljb250cm9sID0gdG9fc29jX2NhbWVyYV9jb250cm9sKGljZCk7CisJCWlmICghY29udHJvbCB8fCAhY29udHJvbC0+ZHJpdmVyIHx8ICFkZXZfZ2V0X2RydmRhdGEoY29udHJvbCkgfHwKKwkJICAgICF0cnlfbW9kdWxlX2dldChjb250cm9sLT5kcml2ZXItPm93bmVyKSkgeworCQkJaWNsLT5kZWxfZGV2aWNlKGljbCk7CisJCQlnb3RvIGVub2RydjsKIAkJfQotCi0JCWljZC0+aGVpZ2h0CT0gREVGQVVMVF9IRUlHSFQ7Ci0JCWljZC0+d2lkdGgJPSBERUZBVUxUX1dJRFRIOwotCQlpY2QtPmZpZWxkCT0gVjRMMl9GSUVMRF9BTlk7CiAJfQogCi1laXVmbXQ6CisJLyogQXQgdGhpcyBwb2ludCBjbGllbnQgLnByb2JlKCkgc2hvdWxkIGhhdmUgcnVuIGFscmVhZHkgKi8KKwlyZXQgPSBzb2NfY2FtZXJhX2luaXRfdXNlcl9mb3JtYXRzKGljZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZWl1Zm10OworCisJaWNkLT5maWVsZCA9IFY0TDJfRklFTERfQU5ZOworCisJLyogLi4uX3ZpZGVvX3N0YXJ0KCkgd2lsbCBjcmVhdGUgYSBkZXZpY2Ugbm9kZSwgc28gd2UgaGF2ZSB0byBwcm90ZWN0ICovCisJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKKworCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBldmlkc3RhcnQ7CisKKwkvKiBUcnkgdG8gaW1wcm92ZSBvdXIgZ3Vlc3Mgb2YgYSByZWFzb25hYmxlIHdpbmRvdyBmb3JtYXQgKi8KKwlzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJaWYgKCF2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19mbXQsICZmKSkgeworCQlpY2QtPnVzZXJfd2lkdGgJCT0gZi5mbXQucGl4LndpZHRoOworCQlpY2QtPnVzZXJfaGVpZ2h0CT0gZi5mbXQucGl4LmhlaWdodDsKKwl9CisKKwkvKiBEbyB3ZSBoYXZlIHRvIHN5c2ZzX3JlbW92ZV9saW5rKCkgYmVmb3JlIGRldmljZV91bnJlZ2lzdGVyKCk/ICovCisJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZpY2QtPmRldi5rb2JqLCAmdG9fc29jX2NhbWVyYV9jb250cm9sKGljZCktPmtvYmosCisJCQkgICAgICAiY29udHJvbCIpKQorCQlkZXZfd2FybigmaWNkLT5kZXYsICJGYWlsZWQgY3JlYXRpbmcgdGhlIGNvbnRyb2wgc3ltbGlua1xuIik7CisKIAlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7Ci1laWFkZDoKKworCWlmIChpY2wtPnBvd2VyKQorCQlpY2wtPnBvd2VyKGljZC0+cGRldiwgMCk7CisKIAltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7Ci0JbW9kdWxlX3B1dChpY2ktPm9wcy0+b3duZXIpOwotZW1naToKLQltb2R1bGVfcHV0KGljZC0+b3BzLT5vd25lcik7Ci1lbWdkOgorCisJcmV0dXJuIDA7CisKK2V2aWRzdGFydDoKKwltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CisJc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOworZWl1Zm10OgorCWlmIChpY2wtPmJvYXJkX2luZm8pIHsKKwkJc29jX2NhbWVyYV9mcmVlX2kyYyhpY2QpOworCX0gZWxzZSB7CisJCWljbC0+ZGVsX2RldmljZShpY2wpOworCQltb2R1bGVfcHV0KGNvbnRyb2wtPmRyaXZlci0+b3duZXIpOworCX0KK2Vub2RydjoKK2VhZGRkZXY6CisJdmlkZW9fZGV2aWNlX3JlbGVhc2UoaWNkLT52ZGV2KTsKK2V2ZGM6CisJaWNpLT5vcHMtPnJlbW92ZShpY2QpOworZWFkZDoKKwlpZiAoaWNsLT5wb3dlcikKKwkJaWNsLT5wb3dlcihpY2QtPnBkZXYsIDApOworZXBvd2VyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTkwNCwxMiArMTAwOSwyOCBAQAogc3RhdGljIGludCBzb2NfY2FtZXJhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB0b19zb2NfY2FtZXJhX2RldihkZXYpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBpY2QtPnZkZXY7CiAKLQltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwotCWlmIChpY2QtPm9wcy0+cmVtb3ZlKQotCQlpY2QtPm9wcy0+cmVtb3ZlKGljZCk7Ci0JbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOworCUJVR19PTighZGV2LT5wYXJlbnQpOwogCisJaWYgKHZkZXYpIHsKKwkJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmRldik7CisJCWljZC0+dmRldiA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKKwl9CisKKwlpZiAoaWNsLT5ib2FyZF9pbmZvKSB7CisJCXNvY19jYW1lcmFfZnJlZV9pMmMoaWNkKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gdG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkgPworCQkJdG9fc29jX2NhbWVyYV9jb250cm9sKGljZCktPmRyaXZlciA6IE5VTEw7CisJCWlmIChkcnYpIHsKKwkJCWljbC0+ZGVsX2RldmljZShpY2wpOworCQkJbW9kdWxlX3B1dChkcnYtPm93bmVyKTsKKwkJfQorCX0KIAlzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKGljZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTk1NywxNCArMTA3OCwzMyBAQAogewogfQogCitzdGF0aWMgaW50IGRlZmF1bHRfY3JvcGNhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmEpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBjcm9wY2FwLCBhKTsKK30KKworc3RhdGljIGludCBkZWZhdWx0X2dfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfY3JvcCwgYSk7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9zX2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2Nyb3AsIGEpOworfQorCiBpbnQgc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppeDsKKwlpbnQgcmV0OwogCiAJaWYgKCFpY2kgfHwgIWljaS0+b3BzIHx8CiAJICAgICFpY2ktPm9wcy0+dHJ5X2ZtdCB8fAogCSAgICAhaWNpLT5vcHMtPnNldF9mbXQgfHwKLQkgICAgIWljaS0+b3BzLT5zZXRfY3JvcCB8fAogCSAgICAhaWNpLT5vcHMtPnNldF9idXNfcGFyYW0gfHwKIAkgICAgIWljaS0+b3BzLT5xdWVyeWNhcCB8fAogCSAgICAhaWNpLT5vcHMtPmluaXRfdmlkZW9idWYgfHwKQEAgLTk3MiwxOCArMTExMiwyNyBAQAogCSAgICAhaWNpLT5vcHMtPmFkZCB8fAogCSAgICAhaWNpLT5vcHMtPnJlbW92ZSB8fAogCSAgICAhaWNpLT5vcHMtPnBvbGwgfHwKLQkgICAgIWljaS0+ZGV2KQorCSAgICAhaWNpLT52NGwyX2Rldi5kZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFpY2ktPm9wcy0+c2V0X2Nyb3ApCisJCWljaS0+b3BzLT5zZXRfY3JvcCA9IGRlZmF1bHRfc19jcm9wOworCWlmICghaWNpLT5vcHMtPmdldF9jcm9wKQorCQlpY2ktPm9wcy0+Z2V0X2Nyb3AgPSBkZWZhdWx0X2dfY3JvcDsKKwlpZiAoIWljaS0+b3BzLT5jcm9wY2FwKQorCQlpY2ktPm9wcy0+Y3JvcGNhcCA9IGRlZmF1bHRfY3JvcGNhcDsKKwogCW11dGV4X2xvY2soJmxpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpeCwgJmhvc3RzLCBsaXN0KSB7CiAJCWlmIChpeC0+bnIgPT0gaWNpLT5ucikgewotCQkJbXV0ZXhfdW5sb2NrKCZsaXN0X2xvY2spOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZWRldnJlZzsKIAkJfQogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShpY2ktPmRldiwgaWNpKTsKKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihpY2ktPnY0bDJfZGV2LmRldiwgJmljaS0+djRsMl9kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVkZXZyZWc7CiAKIAlsaXN0X2FkZF90YWlsKCZpY2ktPmxpc3QsICZob3N0cyk7CiAJbXV0ZXhfdW5sb2NrKCZsaXN0X2xvY2spOwpAQCAtOTkxLDYgKzExNDAsMTAgQEAKIAlzY2FuX2FkZF9ob3N0KGljaSk7CiAKIAlyZXR1cm4gMDsKKworZWRldnJlZzoKKwltdXRleF91bmxvY2soJmxpc3RfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKTsKIApAQCAtMTAwNCw0MiArMTE1NywzNCBAQAogCWxpc3RfZGVsKCZpY2ktPmxpc3QpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpY2QsICZkZXZpY2VzLCBsaXN0KSB7Ci0JCWlmIChpY2QtPmRldi5wYXJlbnQgPT0gaWNpLT5kZXYpIHsKKwkJaWYgKGljZC0+aWZhY2UgPT0gaWNpLT5ucikgeworCQkJLyogVGhlIGJ1cy0+cmVtb3ZlIHdpbGwgYmUgY2FsbGVkICovCiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmaWNkLT5kZXYpOwogCQkJLyogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCiAJCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkgKi8KIAkJCWljZC0+ZGV2LnBhcmVudCA9IE5VTEw7CisKKwkJCS8qIElmIHRoZSBob3N0IG1vZHVsZSBpcyBsb2FkZWQgYWdhaW4sIGRldmljZV9yZWdpc3RlcigpCisJCQkgKiB3b3VsZCBjb21wbGFpbiAiYWxyZWFkeSBpbml0aWFsaXNlZCIgKi8KIAkJCW1lbXNldCgmaWNkLT5kZXYua29iaiwgMCwgc2l6ZW9mKGljZC0+ZGV2LmtvYmopKTsKIAkJfQogCX0KIAogCW11dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKIAotCWRldl9zZXRfZHJ2ZGF0YShpY2ktPmRldiwgTlVMTCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaWNpLT52NGwyX2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfaG9zdF91bnJlZ2lzdGVyKTsKIAogLyogSW1hZ2UgY2FwdHVyZSBkZXZpY2UgKi8KLWludCBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppeDsKIAlpbnQgbnVtID0gLTEsIGk7CiAKLQlpZiAoIWljZCB8fCAhaWNkLT5vcHMgfHwKLQkgICAgIWljZC0+b3BzLT5wcm9iZSB8fAotCSAgICAhaWNkLT5vcHMtPmluaXQgfHwKLQkgICAgIWljZC0+b3BzLT5yZWxlYXNlIHx8Ci0JICAgICFpY2QtPm9wcy0+c3RhcnRfY2FwdHVyZSB8fAotCSAgICAhaWNkLT5vcHMtPnN0b3BfY2FwdHVyZSB8fAotCSAgICAhaWNkLT5vcHMtPnNldF9jcm9wIHx8Ci0JICAgICFpY2QtPm9wcy0+c2V0X2ZtdCB8fAotCSAgICAhaWNkLT5vcHMtPnRyeV9mbXQgfHwKLQkgICAgIWljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0gfHwKLQkgICAgIWljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWZvciAoaSA9IDA7IGkgPCAyNTYgJiYgbnVtIDwgMDsgaSsrKSB7CiAJCW51bSA9IGk7CisJCS8qIENoZWNrIGlmIHRoaXMgaW5kZXggaXMgYXZhaWxhYmxlIG9uIHRoaXMgaW50ZXJmYWNlICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXgsICZkZXZpY2VzLCBsaXN0KSB7CiAJCQlpZiAoaXgtPmlmYWNlID09IGljZC0+aWZhY2UgJiYgaXgtPmRldm51bSA9PSBpKSB7CiAJCQkJbnVtID0gLTE7CkBAIC0xMDYxLDIxICsxMjA2LDE1IEBACiAJaWNkLT5ob3N0X3ByaXYJCT0gTlVMTDsKIAltdXRleF9pbml0KCZpY2QtPnZpZGVvX2xvY2spOwogCi0JcmV0dXJuIHNjYW5fYWRkX2RldmljZShpY2QpOwotfQotRVhQT1JUX1NZTUJPTChzb2NfY2FtZXJhX2RldmljZV9yZWdpc3Rlcik7CisJbGlzdF9hZGRfdGFpbCgmaWNkLT5saXN0LCAmZGV2aWNlcyk7CiAKLXZvaWQgc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQltdXRleF9sb2NrKCZsaXN0X2xvY2spOwogCWxpc3RfZGVsKCZpY2QtPmxpc3QpOwotCi0JLyogVGhlIGJ1cy0+cmVtb3ZlIHdpbGwgYmUgZXZlbnR1YWxseSBjYWxsZWQgKi8KLQlpZiAoaWNkLT5kZXYucGFyZW50KQotCQlkZXZpY2VfdW5yZWdpc3RlcigmaWNkLT5kZXYpOwotCW11dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0woc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3Rlcik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc29jX2NhbWVyYV9pb2N0bF9vcHMgPSB7CiAJLnZpZGlvY19xdWVyeWNhcAkgPSBzb2NfY2FtZXJhX3F1ZXJ5Y2FwLApAQCAtMTEwNiwyMyArMTI0NSwxMyBAQAogI2VuZGlmCiB9OwogCi0vKgotICogVXN1YWxseSBjYWxsZWQgZnJvbSB0aGUgc3RydWN0IHNvY19jYW1lcmFfb3BzIC5wcm9iZSgpIG1ldGhvZCwgaS5lLiwgZnJvbQotICogc29jX2NhbWVyYV9wcm9iZSgpIGFib3ZlIHdpdGggLnZpZGVvX2xvY2sgaGVsZAotICovCi1pbnQgc29jX2NhbWVyYV92aWRlb19zdGFydChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgdmlkZW9fZGV2X2NyZWF0ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAotCWlmICghaWNkLT5kZXYucGFyZW50KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoIXZkZXYpCi0JCWdvdG8gZXZpZGFsbG9jZDsKLQlkZXZfZGJnKGljaS0+ZGV2LCAiQWxsb2NhdGVkIHZpZGVvX2RldmljZSAlcFxuIiwgdmRldik7CisJCXJldHVybiAtRU5PTUVNOwogCiAJc3RybGNweSh2ZGV2LT5uYW1lLCBpY2ktPmRydl9uYW1lLCBzaXplb2YodmRldi0+bmFtZSkpOwogCkBAIC0xMTMyLDg3ICsxMjYxLDkzIEBACiAJdmRldi0+aW9jdGxfb3BzCQk9ICZzb2NfY2FtZXJhX2lvY3RsX29wczsKIAl2ZGV2LT5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXZkZXYtPm1pbm9yCQk9IC0xOwotCXZkZXYtPnR2bm9ybXMJCT0gVjRMMl9TVERfVU5LTk9XTiwKKwl2ZGV2LT50dm5vcm1zCQk9IFY0TDJfU1REX1VOS05PV047CiAKLQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmRldi0+bWlub3IpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRldl9lcnIodmRldi0+cGFyZW50LCAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXZpZHJlZ2Q7Ci0JfQogCWljZC0+dmRldiA9IHZkZXY7CiAKIAlyZXR1cm4gMDsKLQotZXZpZHJlZ2Q6Ci0JdmlkZW9fZGV2aWNlX3JlbGVhc2UodmRldik7Ci1ldmlkYWxsb2NkOgotCXJldHVybiBlcnI7CiB9Ci1FWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfdmlkZW9fc3RhcnQpOwogCi0vKiBDYWxsZWQgZnJvbSBjbGllbnQgLnJlbW92ZSgpIG1ldGhvZHMgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCi12b2lkIHNvY19jYW1lcmFfdmlkZW9fc3RvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKKy8qCisgKiBDYWxsZWQgZnJvbSBzb2NfY2FtZXJhX3Byb2JlKCkgYWJvdmUgKHdpdGggLnZpZGVvX2xvY2sgaGVsZD8/PykKKyAqLworc3RhdGljIGludCBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBpY2QtPnZkZXY7CisJaW50IHJldDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoIWljZC0+ZGV2LnBhcmVudCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fCAhdmRldikKLQkJcmV0dXJuOworCWlmICghaWNkLT5vcHMgfHwKKwkgICAgIWljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0gfHwKKwkgICAgIWljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkZXYpOwotCWljZC0+dmRldiA9IE5VTEw7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGljZC0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwKKwkJCQkgICAgaWNkLT52ZGV2LT5taW5vcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woc29jX2NhbWVyYV92aWRlb19zdG9wKTsKIAogc3RhdGljIGludCBfX2RldmluaXQgc29jX2NhbWVyYV9wZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJaW50IHJldDsKIAogCWlmICghaWNsKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoaWNsLT5pMmNfYWRhcHRlcl9pZCk7Ci0JaWYgKCFhZGFwKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJDYW5ub3QgZ2V0IGFkYXB0ZXIgIyVkLiBObyBkcml2ZXI/XG4iLAotCQkJIGljbC0+aTJjX2FkYXB0ZXJfaWQpOwotCQkvKiAtRU5PREVWIGFuZCAtRU5YSU8gZG8gbm90IHByb2R1Y2UgYW4gZXJyb3Igb24gcHJvYmUoKS4uLiAqLwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQlpY2wtPmJvYXJkX2luZm8tPnBsYXRmb3JtX2RhdGEgPSBpY2w7Ci0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcCwgaWNsLT5ib2FyZF9pbmZvKTsKLQlpZiAoIWNsaWVudCkgewotCQlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CisJaWNkID0ga3phbGxvYyhzaXplb2YoKmljZCksIEdGUF9LRVJORUwpOworCWlmICghaWNkKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjbGllbnQpOworCWljZC0+aWZhY2UgPSBpY2wtPmJ1c19pZDsKKwlpY2QtPnBkZXYgPSAmcGRldi0+ZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGljZCk7CisJaWNkLT5kZXYucGxhdGZvcm1fZGF0YSA9IGljbDsKKworCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXNjZGV2cmVnOworCisJaWNkLT51c2VyX3dpZHRoCQk9IERFRkFVTFRfV0lEVEg7CisJaWNkLT51c2VyX2hlaWdodAk9IERFRkFVTFRfSEVJR0hUOwogCiAJcmV0dXJuIDA7CisKK2VzY2RldnJlZzoKKwlrZnJlZShpY2QpOworCisJcmV0dXJuIHJldDsKIH0KIAorLyogT25seSBjYWxsZWQgb24gcm1tb2QgZm9yIGVhY2ggcGxhdGZvcm0gZGV2aWNlLCBzaW5jZSB0aGV5IGFyZSBub3QKKyAqIGhvdC1wbHVnZ2FibGUuIE5vdyB3ZSBrbm93LCB0aGF0IGFsbCBvdXIgdXNlcnMgLSBob3N0cyBhbmQgZGV2aWNlcyBoYXZlCisgKiBiZWVuIHVubG9hZGVkIGFscmVhZHkgKi8KIHN0YXRpYyBpbnQgX19kZXZleGl0IHNvY19jYW1lcmFfcGRydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWljZCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKLQlpMmNfcHV0X2FkYXB0ZXIoY2xpZW50LT5hZGFwdGVyKTsKKwlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKGljZCk7CisKKwlrZnJlZShpY2QpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIF9fcmVmZGF0YSBzb2NfY2FtZXJhX3BkcnYgPSB7Ci0JLnByb2JlCT0gc29jX2NhbWVyYV9wZHJ2X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChzb2NfY2FtZXJhX3BkcnZfcmVtb3ZlKSwKLQkuZHJpdmVyCT0gewotCQkubmFtZSA9ICJzb2MtY2FtZXJhLXBkcnYiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkucmVtb3ZlICA9IF9fZGV2ZXhpdF9wKHNvY19jYW1lcmFfcGRydl9yZW1vdmUpLAorCS5kcml2ZXIgID0geworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtMTIyNSw3ICsxMzYwLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVkcnZyOwogCi0JcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzb2NfY2FtZXJhX3BkcnYpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmc29jX2NhbWVyYV9wZHJ2LCBzb2NfY2FtZXJhX3BkcnZfcHJvYmUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXBkcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYwppbmRleCBjNDg2NzYzLi5iNmE1NzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYwpAQCAtMTYsNTQgKzE2LDMyIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KIAogc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbzsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOworCXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7CiAJc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgZm9ybWF0OwogfTsKIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKgotc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2ICpnZXRfcHJpdihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgKnByaXY7Ci0JcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYsIGljZCk7Ci0JcmV0dXJuIHByaXYtPmluZm87CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHN1YmRldiwgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiwgc3ViZGV2KTsKIH0KIAotc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqZ2V0X2luZm8oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKLQotCWlmIChwLT5wb3dlcikKLQkJcC0+cG93ZXIoMSk7Ci0KLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KKwkJdG9fcGxhdGZvcm1fZGV2aWNlKHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlyZXR1cm4gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiB9CiAKLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKLQotCWlmIChwLT5wb3dlcikKLQkJcC0+cG93ZXIoMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKLQlyZXR1cm4gcC0+c2V0X2NhcHR1cmUocCwgMSk7Ci19Ci0KLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKLQlyZXR1cm4gcC0+c2V0X2NhcHR1cmUocCwgMCk7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXJldHVybiBwLT5zZXRfY2FwdHVyZShwLCBlbmFibGUpOwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKQEAgLTc1LDI2ICs1MywxNCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcKIHNvY19jYW1lcmFfcGxhdGZvcm1fcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IGdldF9pbmZvKGljZCk7CiAJcmV0dXJuIHAtPmJ1c19wYXJhbTsKIH0KIAotc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCQlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAogCXBpeC0+d2lkdGggPSBwLT5mb3JtYXQud2lkdGg7CkBAIC0xMDIsODIgKzY4LDk5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyB2b2lkIHNvY19jYW1lcmFfcGxhdGZvcm1fdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJCSAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgKnByaXY7Ci0JcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqcHJpdiA9IGdldF9wcml2KHBkZXYpOworCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXByaXYtPmZvcm1hdC5uYW1lID0gcHJpdi0+aW5mby0+Zm9ybWF0X25hbWU7Ci0JcHJpdi0+Zm9ybWF0LmRlcHRoID0gcHJpdi0+aW5mby0+Zm9ybWF0X2RlcHRoOwotCXByaXYtPmZvcm1hdC5mb3VyY2MgPSBwcml2LT5pbmZvLT5mb3JtYXQucGl4ZWxmb3JtYXQ7Ci0JcHJpdi0+Zm9ybWF0LmNvbG9yc3BhY2UgPSBwcml2LT5pbmZvLT5mb3JtYXQuY29sb3JzcGFjZTsKKwlwcml2LT5mb3JtYXQubmFtZSA9IHAtPmZvcm1hdF9uYW1lOworCXByaXYtPmZvcm1hdC5kZXB0aCA9IHAtPmZvcm1hdF9kZXB0aDsKKwlwcml2LT5mb3JtYXQuZm91cmNjID0gcC0+Zm9ybWF0LnBpeGVsZm9ybWF0OworCXByaXYtPmZvcm1hdC5jb2xvcnNwYWNlID0gcC0+Zm9ybWF0LmNvbG9yc3BhY2U7CiAKIAlpY2QtPmZvcm1hdHMgPSAmcHJpdi0+Zm9ybWF0OwogCWljZC0+bnVtX2Zvcm1hdHMgPSAxOwotCi0JcmV0dXJuIHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKIH0KIAotc3RhdGljIHZvaWQgc29jX2NhbWVyYV9wbGF0Zm9ybV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc29jX2NhbWVyYV92aWRlb19zdG9wKGljZCk7Ci19CitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHBsYXRmb3JtX3N1YmRldl9jb3JlX29wczsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgcGxhdGZvcm1fc3ViZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19zdHJlYW0JPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3Nfc3RyZWFtLAorCS50cnlfZm10CT0gc29jX2NhbWVyYV9wbGF0Zm9ybV90cnlfZm10LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgcGxhdGZvcm1fc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZwbGF0Zm9ybV9zdWJkZXZfY29yZV9vcHMsCisJLnZpZGVvCT0gJnBsYXRmb3JtX3N1YmRldl92aWRlb19vcHMsCit9OwogCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIHNvY19jYW1lcmFfcGxhdGZvcm1fb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3ZpZGVvX3Byb2JlLAotCS5yZW1vdmUJCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdmlkZW9fcmVtb3ZlLAotCS5pbml0CQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2luaXQsCi0JLnJlbGVhc2UJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9yZWxlYXNlLAotCS5zdGFydF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RhcnRfY2FwdHVyZSwKLQkuc3RvcF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RvcF9jYXB0dXJlLAotCS5zZXRfY3JvcAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9jcm9wLAotCS5zZXRfZm10CQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdCwKLQkudHJ5X2ZtdAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3F1ZXJ5X2J1c19wYXJhbSwKIH07CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2ICpwcml2OwotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnA7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOwogCWludCByZXQ7CiAKLQlwID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghcC0+ZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJQbGF0Zm9ybSBoYXMgbm90IHNldCBzb2NfY2FtZXJhX2RldmljZSBwb2ludGVyIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5pbmZvID0gcDsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKwlpY2QgPSB0b19zb2NfY2FtZXJhX2RldihwLT5kZXYpOwogCi0JaWNkID0gJnByaXYtPmljZDsKLQlpY2QtPm9wcwk9ICZzb2NfY2FtZXJhX3BsYXRmb3JtX29wczsKLQlpY2QtPmNvbnRyb2wJPSAmcGRldi0+ZGV2OwotCWljZC0+d2lkdGhfbWluCT0gMDsKLQlpY2QtPndpZHRoX21heAk9IHByaXYtPmluZm8tPmZvcm1hdC53aWR0aDsKLQlpY2QtPmhlaWdodF9taW4JPSAwOwotCWljZC0+aGVpZ2h0X21heAk9IHByaXYtPmluZm8tPmZvcm1hdC5oZWlnaHQ7Ci0JaWNkLT55X3NraXBfdG9wCT0gMDsKLQlpY2QtPmlmYWNlCT0gcHJpdi0+aW5mby0+aWZhY2U7CisJLyogc29jLWNhbWVyYSBjb252ZW50aW9uOiBjb250cm9sJ3MgZHJ2ZGF0YSBwb2ludHMgdG8gdGhlIHN1YmRldiAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsICZwcml2LT5zdWJkZXYpOworCS8qIFNldCB0aGUgY29udHJvbCBkZXZpY2UgcmVmZXJlbmNlICovCisJZGV2X3NldF9kcnZkYXRhKCZpY2QtPmRldiwgJnBkZXYtPmRldik7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOworCWljZC0+eV9za2lwX3RvcAkJPSAwOworCWljZC0+b3BzCQk9ICZzb2NfY2FtZXJhX3BsYXRmb3JtX29wczsKKworCWljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCisJc29jX2NhbWVyYV9wbGF0Zm9ybV92aWRlb19wcm9iZShpY2QsIHBkZXYpOworCisJdjRsMl9zdWJkZXZfaW5pdCgmcHJpdi0+c3ViZGV2LCAmcGxhdGZvcm1fc3ViZGV2X29wcyk7CisJdjRsMl9zZXRfc3ViZGV2ZGF0YSgmcHJpdi0+c3ViZGV2LCBwKTsKKwlzdHJuY3B5KHByaXYtPnN1YmRldi5uYW1lLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgVjRMMl9TVUJERVZfTkFNRV9TSVpFKTsKKworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldigmaWNpLT52NGwyX2RldiwgJnByaXYtPnN1YmRldik7CiAJaWYgKHJldCkKLQkJa2ZyZWUocHJpdik7CisJCWdvdG8gZXZkcnM7CiAKIAlyZXR1cm4gcmV0OworCitldmRyczoKKwlpY2QtPm9wcyA9IE5VTEw7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2ICpwcml2ID0gZ2V0X3ByaXYocGRldik7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYocC0+ZGV2KTsKIAotCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJnByaXYtPmljZCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoJnByaXYtPnN1YmRldik7CisJaWNkLT5vcHMgPSBOVUxMOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKHByaXYpOwogCXJldHVybiAwOwogfQpAQCAtMTg1LDYgKzE2OCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2NfY2FtZXJhX3BsYXRmb3JtX2RyaXZlciA9IHsKIAkuZHJpdmVyIAk9IHsKIAkJLm5hbWUJPSAic29jX2NhbWVyYV9wbGF0Zm9ybSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJvYmUsCiAJLnJlbW92ZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbW92ZSwKQEAgLTIwNiwzICsxOTAsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTb0MgQ2FtZXJhIFBsYXRmb3JtIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWFnbnVzIERhbW0iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c29jX2NhbWVyYV9wbGF0Zm9ybSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCAyODE2ZjE4Li5hYmE5MmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgogI2luY2x1ZGUgInRkYTk4ODcuaCIKICNpbmNsdWRlICJ4YzUwMDAuaCIKKyNpbmNsdWRlICJ0ZGExODI3MS5oIgogCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKQEAgLTQyMCw2ICs0MjEsMTcgQEAKIAkJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgVFVORVJfTlhQX1REQTE4MjcxOgorCXsKKwkJc3RydWN0IHRkYTE4MjcxX2NvbmZpZyBjZmcgPSB7CisJCQkuY29uZmlnID0gdC0+Y29uZmlnLAorCQl9OworCisJCWlmICghZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsICZ0LT5mZSwgdC0+aTJjLT5hZGRyLAorCQkJCXQtPmkyYy0+YWRhcHRlciwgJmNmZykpCisJCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgJnQtPmZlLAogCQkJCXQtPmkyYy0+YWRhcHRlciwgdC0+aTJjLT5hZGRyLCB0LT50eXBlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKaW5kZXggMzc1MGY3Zi4uMjQ0MzcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKQEAgLTMxLDcgKzMxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWludC1kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS90dnA1MTR4Lmg+CiAKICNpbmNsdWRlICJ0dnA1MTR4X3JlZ3MuaCIKQEAgLTQ5LDE1ICs1MiwxMSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGR1bXBfcmVnKGNsaWVudCwgcmVnLCB2YWwpCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJdmFsID0gdHZwNTE0eF9yZWFkX3JlZyhjbGllbnQsIHJlZyk7CQlcCi0JCXY0bF9pbmZvKGNsaWVudCwgIlJlZygweCUuMlgpOiAweCUuMlhcbiIsIHJlZywgdmFsKTsgXAotCX0gd2hpbGUgKDApCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUVlA1MTRYIGxpbnV4IGRlY29kZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qKgotICogZW51bSB0dnA1MTR4X3N0ZCAtIGVudW0gZm9yIHN1cHBvcnRlZCBzdGFuZGFyZHMKLSAqLworLyogZW51bSB0dnA1MTR4X3N0ZCAtIGVudW0gZm9yIHN1cHBvcnRlZCBzdGFuZGFyZHMgKi8KIGVudW0gdHZwNTE0eF9zdGQgewogCVNURF9OVFNDX01KID0gMCwKIAlTVERfUEFMX0JER0hJTiwKQEAgLTY1LDE0ICs2NCw2IEBACiB9OwogCiAvKioKLSAqIGVudW0gdHZwNTE0eF9zdGF0ZSAtIGVudW0gZm9yIGRpZmZlcmVudCBkZWNvZGVyIHN0YXRlcwotICovCi1lbnVtIHR2cDUxNHhfc3RhdGUgewotCVNUQVRFX05PVF9ERVRFQ1RFRCwKLQlTVEFURV9ERVRFQ1RFRAotfTsKLQotLyoqCiAgKiBzdHJ1Y3QgdHZwNTE0eF9zdGRfaW5mbyAtIFN0cnVjdHVyZSB0byBzdG9yZSBzdGFuZGFyZCBpbmZvcm1hdGlvbnMKICAqIEB3aWR0aDogTGluZSB3aWR0aCBpbiBwaXhlbHMKICAqIEBoZWlnaHQ6TnVtYmVyIG9mIGFjdGl2ZSBsaW5lcwpAQCAtODksMzMgKzgwLDI3IEBACiBzdGF0aWMgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdFsweDQwXTsKIC8qKgogICogc3RydWN0IHR2cDUxNHhfZGVjb2RlciAtIFRWUDUxNDYvNDcgZGVjb2RlciBvYmplY3QKLSAqIEB2NGwyX2ludF9kZXZpY2U6IFNsYXZlIGhhbmRsZQotICogQHR2cDUxNHhfc2xhdmU6IFNsYXZlIHBvaW50ZXIgd2hpY2ggaXMgdXNlZCBieSBAdjRsMl9pbnRfZGV2aWNlCisgKiBAc2Q6IFN1YmRldmljZSBTbGF2ZSBoYW5kbGUKICAqIEB0dnA1MTR4X3JlZ3M6IGNvcHkgb2YgaHcncyByZWdzIHdpdGggcHJlc2V0IHZhbHVlcy4KICAqIEBwZGF0YTogQm9hcmQgc3BlY2lmaWMKLSAqIEBjbGllbnQ6IEkyQyBjbGllbnQgZGF0YQotICogQGlkOiBFbnRyeSBmcm9tIEkyQyB0YWJsZQogICogQHZlcjogQ2hpcCB2ZXJzaW9uCi0gKiBAc3RhdGU6IFRWUDUxNDYvNDcgZGVjb2RlciBzdGF0ZSAtIGRldGVjdGVkIG9yIG5vdC1kZXRlY3RlZAorICogQHN0cmVhbWluZzogVFZQNTE0Ni80NyBkZWNvZGVyIHN0cmVhbWluZyAtIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgKiBAcGl4OiBDdXJyZW50IHBpeGVsIGZvcm1hdAogICogQG51bV9mbXRzOiBOdW1iZXIgb2YgZm9ybWF0cwogICogQGZtdF9saXN0OiBGb3JtYXQgbGlzdAogICogQGN1cnJlbnRfc3RkOiBDdXJyZW50IHN0YW5kYXJkCiAgKiBAbnVtX3N0ZHM6IE51bWJlciBvZiBzdGFuZGFyZHMKICAqIEBzdGRfbGlzdDogU3RhbmRhcmRzIGxpc3QKLSAqIEByb3V0ZTogaW5wdXQgYW5kIG91dHB1dCByb3V0aW5nIGF0IGNoaXAgbGV2ZWwKKyAqIEBpbnB1dDogSW5wdXQgcm91dGluZyBhdCBjaGlwIGxldmVsCisgKiBAb3V0cHV0OiBPdXRwdXQgcm91dGluZyBhdCBjaGlwIGxldmVsCiAgKi8KIHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgewotCXN0cnVjdCB2NGwyX2ludF9kZXZpY2UgdjRsMl9pbnRfZGV2aWNlOwotCXN0cnVjdCB2NGwyX2ludF9zbGF2ZSB0dnA1MTR4X3NsYXZlOworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAlzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eF9yZWdzW0FSUkFZX1NJWkUodHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0KV07CiAJY29uc3Qgc3RydWN0IHR2cDUxNHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQotCXN0cnVjdCBpMmNfZGV2aWNlX2lkICppZDsKIAogCWludCB2ZXI7Ci0JZW51bSB0dnA1MTR4X3N0YXRlIHN0YXRlOworCWludCBzdHJlYW1pbmc7CiAKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeDsKIAlpbnQgbnVtX2ZtdHM7CkBAIC0xMjQsMTUgKzEwOSwxOCBAQAogCWVudW0gdHZwNTE0eF9zdGQgY3VycmVudF9zdGQ7CiAJaW50IG51bV9zdGRzOwogCXN0cnVjdCB0dnA1MTR4X3N0ZF9pbmZvICpzdGRfbGlzdDsKLQotCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisJLyogSW5wdXQgYW5kIE91dHB1dCBSb3V0aW5nIHBhcmFtZXRlcnMgKi8KKwl1MzIgaW5wdXQ7CisJdTMyIG91dHB1dDsKIH07CiAKIC8qIFRWUDUxNHggZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgKi8KIHN0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0W10gPSB7Ci0Je1RPS19XUklURSwgUkVHX0lOUFVUX1NFTCwgMHgwNX0sCS8qIENvbXBvc2l0ZSBzZWxlY3RlZCAqLworCS8qIENvbXBvc2l0ZSBzZWxlY3RlZCAqLworCXtUT0tfV1JJVEUsIFJFR19JTlBVVF9TRUwsIDB4MDV9LAogCXtUT0tfV1JJVEUsIFJFR19BRkVfR0FJTl9DVFJMLCAweDBGfSwKLQl7VE9LX1dSSVRFLCBSRUdfVklERU9fU1RELCAweDAwfSwJLyogQXV0byBtb2RlICovCisJLyogQXV0byBtb2RlICovCisJe1RPS19XUklURSwgUkVHX1ZJREVPX1NURCwgMHgwMH0sCiAJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAwfSwKIAl7VE9LX1NLSVAsIFJFR19BVVRPU1dJVENIX01BU0ssIDB4M0Z9LAogCXtUT0tfV1JJVEUsIFJFR19DT0xPUl9LSUxMRVIsIDB4MTB9LApAQCAtMTQ1LDUzICsxMzMsNzQgQEAKIAl7VE9LX1dSSVRFLCBSRUdfSFVFLCAweDAwfSwKIAl7VE9LX1dSSVRFLCBSRUdfQ0hST01BX0NPTlRST0wxLCAweDAwfSwKIAl7VE9LX1dSSVRFLCBSRUdfQ0hST01BX0NPTlRST0wyLCAweDBFfSwKLQl7VE9LX1NLSVAsIDB4MEYsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDBGLCAweDAwfSwKIAl7VE9LX1dSSVRFLCBSRUdfQ09NUF9QUl9TQVRVUkFUSU9OLCAweDgwfSwKIAl7VE9LX1dSSVRFLCBSRUdfQ09NUF9ZX0NPTlRSQVNULCAweDgwfSwKIAl7VE9LX1dSSVRFLCBSRUdfQ09NUF9QQl9TQVRVUkFUSU9OLCAweDgwfSwKLQl7VE9LX1NLSVAsIDB4MTMsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDEzLCAweDAwfSwKIAl7VE9LX1dSSVRFLCBSRUdfQ09NUF9ZX0JSSUdIVE5FU1MsIDB4ODB9LAotCXtUT0tfU0tJUCwgMHgxNSwgMHgwMH0sCS8qIFJlc2VydmVkICovCi0Je1RPS19TS0lQLCBSRUdfQVZJRF9TVEFSVF9QSVhFTF9MU0IsIDB4NTV9LAkvKiBOVFNDIHRpbWluZyAqLworCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDE1LCAweDAwfSwKKwkvKiBOVFNDIHRpbWluZyAqLworCXtUT0tfU0tJUCwgUkVHX0FWSURfU1RBUlRfUElYRUxfTFNCLCAweDU1fSwKIAl7VE9LX1NLSVAsIFJFR19BVklEX1NUQVJUX1BJWEVMX01TQiwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfQVZJRF9TVE9QX1BJWEVMX0xTQiwgMHgyNX0sCiAJe1RPS19TS0lQLCBSRUdfQVZJRF9TVE9QX1BJWEVMX01TQiwgMHgwM30sCi0Je1RPS19TS0lQLCBSRUdfSFNZTkNfU1RBUlRfUElYRUxfTFNCLCAweDAwfSwJLyogTlRTQyB0aW1pbmcgKi8KKwkvKiBOVFNDIHRpbWluZyAqLworCXtUT0tfU0tJUCwgUkVHX0hTWU5DX1NUQVJUX1BJWEVMX0xTQiwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfSFNZTkNfU1RBUlRfUElYRUxfTVNCLCAweDAwfSwKIAl7VE9LX1NLSVAsIFJFR19IU1lOQ19TVE9QX1BJWEVMX0xTQiwgMHg0MH0sCiAJe1RPS19TS0lQLCBSRUdfSFNZTkNfU1RPUF9QSVhFTF9NU0IsIDB4MDB9LAotCXtUT0tfU0tJUCwgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTFNCLCAweDA0fSwJLyogTlRTQyB0aW1pbmcgKi8KKwkvKiBOVFNDIHRpbWluZyAqLworCXtUT0tfU0tJUCwgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTFNCLCAweDA0fSwKIAl7VE9LX1NLSVAsIFJFR19WU1lOQ19TVEFSVF9MSU5FX01TQiwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfVlNZTkNfU1RPUF9MSU5FX0xTQiwgMHgwN30sCiAJe1RPS19TS0lQLCBSRUdfVlNZTkNfU1RPUF9MSU5FX01TQiwgMHgwMH0sCi0Je1RPS19TS0lQLCBSRUdfVkJMS19TVEFSVF9MSU5FX0xTQiwgMHgwMX0sCS8qIE5UU0MgdGltaW5nICovCisJLyogTlRTQyB0aW1pbmcgKi8KKwl7VE9LX1NLSVAsIFJFR19WQkxLX1NUQVJUX0xJTkVfTFNCLCAweDAxfSwKIAl7VE9LX1NLSVAsIFJFR19WQkxLX1NUQVJUX0xJTkVfTVNCLCAweDAwfSwKIAl7VE9LX1NLSVAsIFJFR19WQkxLX1NUT1BfTElORV9MU0IsIDB4MTV9LAogCXtUT0tfU0tJUCwgUkVHX1ZCTEtfU1RPUF9MSU5FX01TQiwgMHgwMH0sCi0Je1RPS19TS0lQLCAweDI2LCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KLQl7VE9LX1NLSVAsIDB4MjcsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDI2LCAweDAwfSwKKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgyNywgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfRkFTVF9TV1RJQ0hfQ09OVFJPTCwgMHhDQ30sCi0Je1RPS19TS0lQLCAweDI5LCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgyOSwgMHgwMH0sCiAJe1RPS19TS0lQLCBSRUdfRkFTVF9TV1RJQ0hfU0NBUlRfREVMQVksIDB4MDB9LAotCXtUT0tfU0tJUCwgMHgyQiwgMHgwMH0sCS8qIFJlc2VydmVkICovCisJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1NLSVAsIDB4MkIsIDB4MDB9LAogCXtUT0tfU0tJUCwgUkVHX1NDQVJUX0RFTEFZLCAweDAwfSwKIAl7VE9LX1NLSVAsIFJFR19DVElfREVMQVksIDB4MDB9LAogCXtUT0tfU0tJUCwgUkVHX0NUSV9DT05UUk9MLCAweDAwfSwKLQl7VE9LX1NLSVAsIDB4MkYsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLwotCXtUT0tfU0tJUCwgMHgzMCwgMHgwMH0sCS8qIFJlc2VydmVkICovCi0Je1RPS19TS0lQLCAweDMxLCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KLQl7VE9LX1dSSVRFLCBSRUdfU1lOQ19DT05UUk9MLCAweDAwfSwJLyogSFMsIFZTIGFjdGl2ZSBoaWdoICovCi0Je1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVIxLCAweDAwfSwJLyogMTAtYml0IEJULjY1NiAqLwotCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSMiwgMHgxMX0sCS8qIEVuYWJsZSBjbGsgJiBkYXRhICovCi0Je1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVIzLCAweEVFfSwJLyogRW5hYmxlIEFWSUQgJiBGTEQgKi8KLQl7VE9LX1dSSVRFLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjQsIDB4QUZ9LAkvKiBFbmFibGUgVlMgJiBIUyAqLworCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDJGLCAweDAwfSwKKwkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgzMCwgMHgwMH0sCisJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1NLSVAsIDB4MzEsIDB4MDB9LAorCS8qIEhTLCBWUyBhY3RpdmUgaGlnaCAqLworCXtUT0tfV1JJVEUsIFJFR19TWU5DX0NPTlRST0wsIDB4MDB9LAorCS8qIDEwLWJpdCBCVC42NTYgKi8KKwl7VE9LX1dSSVRFLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjEsIDB4MDB9LAorCS8qIEVuYWJsZSBjbGsgJiBkYXRhICovCisJe1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVIyLCAweDExfSwKKwkvKiBFbmFibGUgQVZJRCAmIEZMRCAqLworCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSMywgMHhFRX0sCisJLyogRW5hYmxlIFZTICYgSFMgKi8KKwl7VE9LX1dSSVRFLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjQsIDB4QUZ9LAogCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSNSwgMHhGRn0sCiAJe1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVI2LCAweEZGfSwKLQl7VE9LX1dSSVRFLCBSRUdfQ0xFQVJfTE9TVF9MT0NLLCAweDAxfSwJLyogQ2xlYXIgc3RhdHVzICovCisJLyogQ2xlYXIgc3RhdHVzICovCisJe1RPS19XUklURSwgUkVHX0NMRUFSX0xPU1RfTE9DSywgMHgwMX0sCiAJe1RPS19URVJNLCAwLCAwfSwKIH07CiAKLS8qIExpc3Qgb2YgaW1hZ2UgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgVFZQNTE0Ni80NyBkZWNvZGVyCisvKioKKyAqIExpc3Qgb2YgaW1hZ2UgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgVFZQNTE0Ni80NyBkZWNvZGVyCiAgKiBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIDggYml0IG1vZGUgb25seSwgYnV0IGNhbiBiZQogICogZXh0ZW5kZWQgdG8gMTAvMjAgYml0IG1vZGUuCiAgKi8KQEAgLTIwNSw3ICsyMTQsNyBAQAogCX0sCiB9OwogCi0vKgorLyoqCiAgKiBTdXBwb3J0ZWQgc3RhbmRhcmRzIC0KICAqCiAgKiBDdXJyZW50bHkgc3VwcG9ydHMgdHdvIHN0YW5kYXJkcyBvbmx5LCBuZWVkIHRvIGFkZCBzdXBwb3J0IGZvciByZXN0IG9mIHRoZQpAQCAtMjQwLDM1ICsyNDksMzIgQEAKIAl9LAogCS8qIFN0YW5kYXJkOiBuZWVkIHRvIGFkZCBmb3IgYWRkaXRpb25hbCBzdGFuZGFyZCAqLwogfTsKLS8qCi0gKiBDb250cm9sIHN0cnVjdHVyZSBmb3IgQXV0byBHYWluCi0gKiAgICAgVGhpcyBpcyB0ZW1wb3JhcnkgZGF0YSwgd2lsbCBnZXQgcmVwbGFjZWQgb25jZQotICogICAgIHY0bDJfY3RybF9xdWVyeV9maWxsIHN1cHBvcnRzIGl0LgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsIHR2cDUxNHhfYXV0b2dhaW5fY3RybCA9IHsKLQkuaWQgPSBWNEwyX0NJRF9BVVRPR0FJTiwKLQkubmFtZSA9ICJHYWluLCBBdXRvbWF0aWMiLAotCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkubWluaW11bSA9IDAsCi0JLm1heGltdW0gPSAxLAotCS5zdGVwID0gMSwKLQkuZGVmYXVsdF92YWx1ZSA9IDEsCi19OwogCi0vKgotICogUmVhZCBhIHZhbHVlIGZyb20gYSByZWdpc3RlciBpbiBhbiBUVlA1MTQ2LzQ3IGRlY29kZXIgZGV2aWNlLgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKnRvX2RlY29kZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyLCBzZCk7Cit9CisKKworLyoqCisgKiB0dnA1MTR4X3JlYWRfcmVnKCkgLSBSZWFkIGEgdmFsdWUgZnJvbSBhIHJlZ2lzdGVyIGluIGFuIFRWUDUxNDYvNDcuCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEByZWc6IFRWUDUxNDYvNDcgcmVnaXN0ZXIgYWRkcmVzcworICoKICAqIFJldHVybnMgdmFsdWUgcmVhZCBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyAoLTEpIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCB0dnA1MTR4X3JlYWRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbnQgdHZwNTE0eF9yZWFkX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7Ci0JaW50IGVycjsKLQlpbnQgcmV0cnkgPSAwOworCWludCBlcnIsIHJldHJ5ID0gMDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIHJlYWRfYWdhaW46CiAKIAllcnIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogCWlmIChlcnIgPT0gLTEpIHsKIAkJaWYgKHJldHJ5IDw9IEkyQ19SRVRSWV9DT1VOVCkgewotCQkJdjRsX3dhcm4oY2xpZW50LCAiUmVhZDogcmV0cnkgLi4uICVkXG4iLCByZXRyeSk7CisJCQl2NGwyX3dhcm4oc2QsICJSZWFkOiByZXRyeSAuLi4gJWRcbiIsIHJldHJ5KTsKIAkJCXJldHJ5Kys7CiAJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CiAJCQlnb3RvIHJlYWRfYWdhaW47CkBAIC0yNzgsMjAgKzI4NCwzOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qCisvKioKKyAqIGR1bXBfcmVnKCkgLSBkdW1wIHRoZSByZWdpc3RlciBjb250ZW50IG9mIFRWUDUxNDYvNDcuCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEByZWc6IFRWUDUxNDYvNDcgcmVnaXN0ZXIgYWRkcmVzcworICovCitzdGF0aWMgdm9pZCBkdW1wX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IHR2cDUxNHhfcmVhZF9yZWcoc2QsIHJlZyk7CisJdjRsMl9pbmZvKHNkLCAiUmVnKDB4JS4yWCk6IDB4JS4yWFxuIiwgcmVnLCB2YWwpOworfQorCisvKioKKyAqIHR2cDUxNHhfd3JpdGVfcmVnKCkgLSBXcml0ZSBhIHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gVFZQNTE0Ni80NworICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAcmVnOiBUVlA1MTQ2LzQ3IHJlZ2lzdGVyIGFkZHJlc3MKKyAqIEB2YWw6IHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVyCisgKgogICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIGluIGFuIFRWUDUxNDYvNDcgZGVjb2RlciBkZXZpY2UuCiAgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHR2cDUxNHhfd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIGludCB0dnA1MTR4X3dyaXRlX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbCkKIHsKLQlpbnQgZXJyOwotCWludCByZXRyeSA9IDA7CisJaW50IGVyciwgcmV0cnkgPSAwOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogd3JpdGVfYWdhaW46CiAKIAllcnIgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOwogCWlmIChlcnIpIHsKIAkJaWYgKHJldHJ5IDw9IEkyQ19SRVRSWV9DT1VOVCkgewotCQkJdjRsX3dhcm4oY2xpZW50LCAiV3JpdGU6IHJldHJ5IC4uLiAlZFxuIiwgcmV0cnkpOworCQkJdjRsMl93YXJuKHNkLCAiV3JpdGU6IHJldHJ5IC4uLiAlZFxuIiwgcmV0cnkpOwogCQkJcmV0cnkrKzsKIAkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKIAkJCWdvdG8gd3JpdGVfYWdhaW47CkBAIC0zMDEsMTcgKzMyNiwxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qCi0gKiB0dnA1MTR4X3dyaXRlX3JlZ3MgOiBJbml0aWFsaXplcyBhIGxpc3Qgb2YgVFZQNTE0Ni80NyByZWdpc3RlcnMKKy8qKgorICogdHZwNTE0eF93cml0ZV9yZWdzKCkgOiBJbml0aWFsaXplcyBhIGxpc3Qgb2YgVFZQNTE0Ni80NyByZWdpc3RlcnMKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQHJlZ2xpc3Q6IGxpc3Qgb2YgVFZQNTE0Ni80NyByZWdpc3RlcnMgYW5kIHZhbHVlcworICoKKyAqIEluaXRpYWxpemVzIGEgbGlzdCBvZiBUVlA1MTQ2LzQ3IHJlZ2lzdGVyczotCiAgKgkJaWYgdG9rZW4gaXMgVE9LX1RFUk0sIHRoZW4gZW50aXJlIHdyaXRlIG9wZXJhdGlvbiB0ZXJtaW5hdGVzCiAgKgkJaWYgdG9rZW4gaXMgVE9LX0RFTEFZLCB0aGVuIGEgZGVsYXkgb2YgJ3ZhbCcgbXNlYyBpcyBpbnRyb2R1Y2VkCiAgKgkJaWYgdG9rZW4gaXMgVE9LX1NLSVAsIHRoZW4gdGhlIHJlZ2lzdGVyIHdyaXRlIGlzIHNraXBwZWQKICAqCQlpZiB0b2tlbiBpcyBUT0tfV1JJVEUsIHRoZW4gdGhlIHJlZ2lzdGVyIHdyaXRlIGlzIHBlcmZvcm1lZAotICoKLSAqIHJlZ2xpc3QgLSBsaXN0IG9mIHJlZ2lzdGVycyB0byBiZSB3cml0dGVuCiAgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHR2cDUxNHhfd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCB0dnA1MTR4X3dyaXRlX3JlZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCB0dnA1MTR4X3JlZyByZWdsaXN0W10pCiB7CiAJaW50IGVycjsKQEAgLTMyNiwzMSArMzUzLDMzIEBACiAJCWlmIChuZXh0LT50b2tlbiA9PSBUT0tfU0tJUCkKIAkJCWNvbnRpbnVlOwogCi0JCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGNsaWVudCwgbmV4dC0+cmVnLCAodTgpIG5leHQtPnZhbCk7CisJCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKHNkLCBuZXh0LT5yZWcsICh1OCkgbmV4dC0+dmFsKTsKIAkJaWYgKGVycikgewotCQkJdjRsX2VycihjbGllbnQsICJXcml0ZSBmYWlsZWQuIEVyclslZF1cbiIsIGVycik7CisJCQl2NGwyX2VycihzZCwgIldyaXRlIGZhaWxlZC4gRXJyWyVkXVxuIiwgZXJyKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZDoKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhbmRhcmQgZGV0ZWN0ZWQgYnkgVFZQNTE0Ni80NworLyoqCisgKiB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZCgpIDogR2V0IHRoZSBjdXJyZW50IHN0YW5kYXJkIGRldGVjdGVkIGJ5IFRWUDUxNDYvNDcKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICoKKyAqIEdldCBjdXJyZW50IHN0YW5kYXJkIGRldGVjdGVkIGJ5IFRWUDUxNDYvNDcsIFNURF9JTlZBTElEIGlmIHRoZXJlIGlzIG5vCisgKiBzdGFuZGFyZCBkZXRlY3RlZC4KICAqLwotc3RhdGljIGVudW0gdHZwNTE0eF9zdGQgdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoc3RydWN0IHR2cDUxNHhfZGVjb2RlcgotCQkJCQkJKmRlY29kZXIpCitzdGF0aWMgZW51bSB0dnA1MTR4X3N0ZCB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCXU4IHN0ZCwgc3RkX3N0YXR1czsKIAotCXN0ZCA9IHR2cDUxNHhfcmVhZF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVklERU9fU1REKTsKLQlpZiAoKHN0ZCAmIFZJREVPX1NURF9NQVNLKSA9PSBWSURFT19TVERfQVVUT19TV0lUQ0hfQklUKSB7CisJc3RkID0gdHZwNTE0eF9yZWFkX3JlZyhzZCwgUkVHX1ZJREVPX1NURCk7CisJaWYgKChzdGQgJiBWSURFT19TVERfTUFTSykgPT0gVklERU9fU1REX0FVVE9fU1dJVENIX0JJVCkKIAkJLyogdXNlIHRoZSBzdGFuZGFyZCBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkJc3RkX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoZGVjb2Rlci0+Y2xpZW50LAotCQkJCVJFR19WSURFT19TVERfU1RBVFVTKTsKLQl9IGVsc2UKLQkJc3RkX3N0YXR1cyA9IHN0ZDsJLyogdXNlIHRoZSBzdGFuZGFyZCByZWdpc3RlciBpdHNlbGYgKi8KKwkJc3RkX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoc2QsIFJFR19WSURFT19TVERfU1RBVFVTKTsKKwllbHNlCisJCS8qIHVzZSB0aGUgc3RhbmRhcmQgcmVnaXN0ZXIgaXRzZWxmICovCisJCXN0ZF9zdGF0dXMgPSBzdGQ7CiAKIAlzd2l0Y2ggKHN0ZF9zdGF0dXMgJiBWSURFT19TVERfTUFTSykgewogCWNhc2UgVklERU9fU1REX05UU0NfTUpfQklUOgpAQCAtMzY2LDk0ICszOTUsOTkgQEAKIAlyZXR1cm4gU1REX0lOVkFMSUQ7CiB9CiAKLS8qCi0gKiBUVlA1MTQ2LzQ3IHJlZ2lzdGVyIGR1bXAgZnVuY3Rpb24KLSAqLwotc3RhdGljIHZvaWQgdHZwNTE0eF9yZWdfZHVtcChzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyKQorLyogVFZQNTE0Ni80NyByZWdpc3RlciBkdW1wIGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCB0dnA1MTR4X3JlZ19kdW1wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0JdTggdmFsdWU7Ci0KLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19JTlBVVF9TRUwsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19BRkVfR0FJTl9DVFJMLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVklERU9fU1RELCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1BFUkFUSU9OX01PREUsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DT0xPUl9LSUxMRVIsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19MVU1BX0NPTlRST0wxLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfTFVNQV9DT05UUk9MMiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0xVTUFfQ09OVFJPTDMsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19CUklHSFRORVNTLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ09OVFJBU1QsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19TQVRVUkFUSU9OLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfSFVFLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ0hST01BX0NPTlRST0wxLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ0hST01BX0NPTlRST0wyLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ09NUF9QUl9TQVRVUkFUSU9OLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ09NUF9ZX0NPTlRSQVNULCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ09NUF9QQl9TQVRVUkFUSU9OLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ09NUF9ZX0JSSUdIVE5FU1MsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19BVklEX1NUQVJUX1BJWEVMX0xTQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0FWSURfU1RBUlRfUElYRUxfTVNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQVZJRF9TVE9QX1BJWEVMX0xTQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0FWSURfU1RPUF9QSVhFTF9NU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19IU1lOQ19TVEFSVF9QSVhFTF9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19IU1lOQ19TVEFSVF9QSVhFTF9NU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19IU1lOQ19TVE9QX1BJWEVMX0xTQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0hTWU5DX1NUT1BfUElYRUxfTVNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVlNZTkNfU1RBUlRfTElORV9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WU1lOQ19TVEFSVF9MSU5FX01TQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZTWU5DX1NUT1BfTElORV9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WU1lOQ19TVE9QX0xJTkVfTVNCLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVkJMS19TVEFSVF9MSU5FX0xTQiwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZCTEtfU1RBUlRfTElORV9NU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WQkxLX1NUT1BfTElORV9MU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WQkxLX1NUT1BfTElORV9NU0IsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19TWU5DX0NPTlRST0wsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PVVRQVVRfRk9STUFUVEVSMSwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVIyLCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjMsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PVVRQVVRfRk9STUFUVEVSNCwgdmFsdWUpOwotCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVI1LCB2YWx1ZSk7Ci0JZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjYsIHZhbHVlKTsKLQlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DTEVBUl9MT1NUX0xPQ0ssIHZhbHVlKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0lOUFVUX1NFTCk7CisJZHVtcF9yZWcoc2QsIFJFR19BRkVfR0FJTl9DVFJMKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZJREVPX1NURCk7CisJZHVtcF9yZWcoc2QsIFJFR19PUEVSQVRJT05fTU9ERSk7CisJZHVtcF9yZWcoc2QsIFJFR19DT0xPUl9LSUxMRVIpOworCWR1bXBfcmVnKHNkLCBSRUdfTFVNQV9DT05UUk9MMSk7CisJZHVtcF9yZWcoc2QsIFJFR19MVU1BX0NPTlRST0wyKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0xVTUFfQ09OVFJPTDMpOworCWR1bXBfcmVnKHNkLCBSRUdfQlJJR0hUTkVTUyk7CisJZHVtcF9yZWcoc2QsIFJFR19DT05UUkFTVCk7CisJZHVtcF9yZWcoc2QsIFJFR19TQVRVUkFUSU9OKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0hVRSk7CisJZHVtcF9yZWcoc2QsIFJFR19DSFJPTUFfQ09OVFJPTDEpOworCWR1bXBfcmVnKHNkLCBSRUdfQ0hST01BX0NPTlRST0wyKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0NPTVBfUFJfU0FUVVJBVElPTik7CisJZHVtcF9yZWcoc2QsIFJFR19DT01QX1lfQ09OVFJBU1QpOworCWR1bXBfcmVnKHNkLCBSRUdfQ09NUF9QQl9TQVRVUkFUSU9OKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0NPTVBfWV9CUklHSFRORVNTKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0FWSURfU1RBUlRfUElYRUxfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0FWSURfU1RBUlRfUElYRUxfTVNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0FWSURfU1RPUF9QSVhFTF9MU0IpOworCWR1bXBfcmVnKHNkLCBSRUdfQVZJRF9TVE9QX1BJWEVMX01TQik7CisJZHVtcF9yZWcoc2QsIFJFR19IU1lOQ19TVEFSVF9QSVhFTF9MU0IpOworCWR1bXBfcmVnKHNkLCBSRUdfSFNZTkNfU1RBUlRfUElYRUxfTVNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0hTWU5DX1NUT1BfUElYRUxfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX0hTWU5DX1NUT1BfUElYRUxfTVNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTVNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZTWU5DX1NUT1BfTElORV9MU0IpOworCWR1bXBfcmVnKHNkLCBSRUdfVlNZTkNfU1RPUF9MSU5FX01TQik7CisJZHVtcF9yZWcoc2QsIFJFR19WQkxLX1NUQVJUX0xJTkVfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZCTEtfU1RBUlRfTElORV9NU0IpOworCWR1bXBfcmVnKHNkLCBSRUdfVkJMS19TVE9QX0xJTkVfTFNCKTsKKwlkdW1wX3JlZyhzZCwgUkVHX1ZCTEtfU1RPUF9MSU5FX01TQik7CisJZHVtcF9yZWcoc2QsIFJFR19TWU5DX0NPTlRST0wpOworCWR1bXBfcmVnKHNkLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjEpOworCWR1bXBfcmVnKHNkLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjIpOworCWR1bXBfcmVnKHNkLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjMpOworCWR1bXBfcmVnKHNkLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjQpOworCWR1bXBfcmVnKHNkLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjUpOworCWR1bXBfcmVnKHNkLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjYpOworCWR1bXBfcmVnKHNkLCBSRUdfQ0xFQVJfTE9TVF9MT0NLKTsKIH0KIAotLyoKLSAqIENvbmZpZ3VyZSB0aGUgVFZQNTE0Ni80NyB3aXRoIHRoZSBjdXJyZW50IHJlZ2lzdGVyIHNldHRpbmdzCisvKioKKyAqIHR2cDUxNHhfY29uZmlndXJlKCkgLSBDb25maWd1cmUgdGhlIFRWUDUxNDYvNDcgcmVnaXN0ZXJzCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBkZWNvZGVyOiBwdHIgdG8gdHZwNTE0eF9kZWNvZGVyIHN0cnVjdHVyZQorICoKICAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgdHZwNTE0eF9jb25maWd1cmUoc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcikKK3N0YXRpYyBpbnQgdHZwNTE0eF9jb25maWd1cmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcikKIHsKIAlpbnQgZXJyOwogCiAJLyogY29tbW9uIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCiAJZXJyID0KLQkgICAgdHZwNTE0eF93cml0ZV9yZWdzKGRlY29kZXItPmNsaWVudCwgZGVjb2Rlci0+dHZwNTE0eF9yZWdzKTsKKwkgICAgdHZwNTE0eF93cml0ZV9yZWdzKHNkLCBkZWNvZGVyLT50dnA1MTR4X3JlZ3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAlpZiAoZGVidWcpCi0JCXR2cDUxNHhfcmVnX2R1bXAoZGVjb2Rlcik7CisJCXR2cDUxNHhfcmVnX2R1bXAoc2QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBEZXRlY3QgaWYgYW4gdHZwNTE0eCBpcyBwcmVzZW50LCBhbmQgaWYgc28gd2hpY2ggcmV2aXNpb24uCisvKioKKyAqIHR2cDUxNHhfZGV0ZWN0KCkgLSBEZXRlY3QgaWYgYW4gdHZwNTE0eCBpcyBwcmVzZW50LCBhbmQgaWYgc28gd2hpY2ggcmV2aXNpb24uCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGRlY29kZXI6IHBvaW50ZXIgdG8gdHZwNTE0eF9kZWNvZGVyIHN0cnVjdHVyZQorICoKICAqIEEgZGV2aWNlIGlzIGNvbnNpZGVyZWQgdG8gYmUgZGV0ZWN0ZWQgaWYgdGhlIGNoaXAgSUQgKExTQiBhbmQgTVNCKQogICogcmVnaXN0ZXJzIG1hdGNoIHRoZSBleHBlY3RlZCB2YWx1ZXMuCiAgKiBBbnkgdmFsdWUgb2YgdGhlIHJvbSB2ZXJzaW9uIHJlZ2lzdGVyIGlzIGFjY2VwdGVkLgogICogUmV0dXJucyBFTk9ERVYgZXJyb3IgbnVtYmVyIGlmIG5vIGRldmljZSBpcyBkZXRlY3RlZCwgb3IgemVybwogICogaWYgYSBkZXZpY2UgaXMgZGV0ZWN0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgdHZwNTE0eF9kZXRlY3Qoc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcikKK3N0YXRpYyBpbnQgdHZwNTE0eF9kZXRlY3Qoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcikKIHsKIAl1OCBjaGlwX2lkX21zYiwgY2hpcF9pZF9sc2IsIHJvbV92ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JY2hpcF9pZF9tc2IgPSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NISVBfSURfTVNCKTsKLQljaGlwX2lkX2xzYiA9IHR2cDUxNHhfcmVhZF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ0hJUF9JRF9MU0IpOwotCXJvbV92ZXIgPSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1JPTV9WRVJTSU9OKTsKKwljaGlwX2lkX21zYiA9IHR2cDUxNHhfcmVhZF9yZWcoc2QsIFJFR19DSElQX0lEX01TQik7CisJY2hpcF9pZF9sc2IgPSB0dnA1MTR4X3JlYWRfcmVnKHNkLCBSRUdfQ0hJUF9JRF9MU0IpOworCXJvbV92ZXIgPSB0dnA1MTR4X3JlYWRfcmVnKHNkLCBSRUdfUk9NX1ZFUlNJT04pOwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJICJjaGlwIGlkIGRldGVjdGVkIG1zYjoweCV4IGxzYjoweCV4IHJvbSB2ZXJzaW9uOjB4JXhcbiIsCiAJCSBjaGlwX2lkX21zYiwgY2hpcF9pZF9sc2IsIHJvbV92ZXIpOwogCWlmICgoY2hpcF9pZF9tc2IgIT0gVFZQNTE0WF9DSElQX0lEX01TQikKQEAgLTQ2MiwzOCArNDk2LDMwIEBACiAJCS8qIFdlIGRpZG4ndCByZWFkIHRoZSB2YWx1ZXMgd2UgZXhwZWN0ZWQsIHNvIHRoaXMgbXVzdCBub3QgYmUKIAkJICogYW4gVFZQNTE0Ni80Ny4KIAkJICovCi0JCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAotCQkJImNoaXAgaWQgbWlzbWF0Y2ggbXNiOjB4JXggbHNiOjB4JXhcbiIsCi0JCQljaGlwX2lkX21zYiwgY2hpcF9pZF9sc2IpOworCQl2NGwyX2VycihzZCwgImNoaXAgaWQgbWlzbWF0Y2ggbXNiOjB4JXggbHNiOjB4JXhcbiIsCisJCQkJY2hpcF9pZF9tc2IsIGNoaXBfaWRfbHNiKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZGVjb2Rlci0+dmVyID0gcm9tX3ZlcjsKLQlkZWNvZGVyLT5zdGF0ZSA9IFNUQVRFX0RFVEVDVEVEOwogCi0JdjRsX2luZm8oZGVjb2Rlci0+Y2xpZW50LAotCQkJIiVzIGZvdW5kIGF0IDB4JXggKCVzKVxuIiwgZGVjb2Rlci0+Y2xpZW50LT5uYW1lLAotCQkJZGVjb2Rlci0+Y2xpZW50LT5hZGRyIDw8IDEsCi0JCQlkZWNvZGVyLT5jbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCXY0bDJfaW5mbyhzZCwgIiVzIChWZXJzaW9uIC0gMHglLjJ4KSBmb3VuZCBhdCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPm5hbWUsIGRlY29kZXItPnZlciwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCXJldHVybiAwOwogfQogCi0vKgotICogRm9sbG93aW5nIGFyZSBkZWNvZGVyIGludGVyZmFjZSBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgYnkKLSAqIFRWUDUxNDYvNDcgZGVjb2RlciBkcml2ZXIuCi0gKi8KLQogLyoqCi0gKiBpb2N0bF9xdWVyeXN0ZCAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX1FVRVJZU1REIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIHR2cDUxNHhfcXVlcnlzdGQoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgcXVlcnlzdGQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAc3RkX2lkOiBzdGFuZGFyZCBWNEwyIHN0ZF9pZCBpb2N0bCBlbnVtCiAgKgogICogUmV0dXJucyB0aGUgY3VycmVudCBzdGFuZGFyZCBkZXRlY3RlZCBieSBUVlA1MTQ2LzQ3LiBJZiBubyBhY3RpdmUgaW5wdXQgaXMKICAqIGRldGVjdGVkLCByZXR1cm5zIC1FSU5WQUwKICAqLwotc3RhdGljIGludCBpb2N0bF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCB2NGwyX3N0ZF9pZCAqc3RkX2lkKQorc3RhdGljIGludCB0dnA1MTR4X3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGRfaWQpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHRvX2RlY29kZXIoc2QpOwogCWVudW0gdHZwNTE0eF9zdGQgY3VycmVudF9zdGQ7CiAJZW51bSB0dnA1MTR4X2lucHV0IGlucHV0X3NlbDsKIAl1OCBzeW5jX2xvY2tfc3RhdHVzLCBsb2NrX21hc2s7CkBAIC01MDIsMTEgKzUyOCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGdldCB0aGUgY3VycmVudCBzdGFuZGFyZCAqLwotCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoZGVjb2Rlcik7CisJY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChzZCk7CiAJaWYgKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlucHV0X3NlbCA9IGRlY29kZXItPnJvdXRlLmlucHV0OworCWlucHV0X3NlbCA9IGRlY29kZXItPmlucHV0OwogCiAJc3dpdGNoIChpbnB1dF9zZWwpIHsKIAljYXNlIElOUFVUX0NWQlNfVkkxQToKQEAgLTU0NCw0MiArNTcwLDM5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBjaGVjayB3aGV0aGVyIHNpZ25hbCBpcyBsb2NrZWQgKi8KLQlzeW5jX2xvY2tfc3RhdHVzID0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19TVEFUVVMxKTsKKwlzeW5jX2xvY2tfc3RhdHVzID0gdHZwNTE0eF9yZWFkX3JlZyhzZCwgUkVHX1NUQVRVUzEpOwogCWlmIChsb2NrX21hc2sgIT0gKHN5bmNfbG9ja19zdGF0dXMgJiBsb2NrX21hc2spKQogCQlyZXR1cm4gLUVJTlZBTDsJLyogTm8gaW5wdXQgZGV0ZWN0ZWQgKi8KIAogCWRlY29kZXItPmN1cnJlbnRfc3RkID0gY3VycmVudF9zdGQ7CiAJKnN0ZF9pZCA9IGRlY29kZXItPnN0ZF9saXN0W2N1cnJlbnRfc3RkXS5zdGFuZGFyZC5pZDsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwgIkN1cnJlbnQgU1REOiAlcyIsCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiQ3VycmVudCBTVEQ6ICVzIiwKIAkJCWRlY29kZXItPnN0ZF9saXN0W2N1cnJlbnRfc3RkXS5zdGFuZGFyZC5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBpb2N0bF9zX3N0ZCAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX1NfU1REIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIHR2cDUxNHhfc19zdGQoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3Igc19zdGQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAc3RkX2lkOiBzdGFuZGFyZCBWNEwyIHY0bDJfc3RkX2lkIGlvY3RsIGVudW0KICAqCiAgKiBJZiBzdGRfaWQgaXMgc3VwcG9ydGVkLCBzZXRzIHRoZSByZXF1ZXN0ZWQgc3RhbmRhcmQuIE90aGVyd2lzZSwgcmV0dXJucwogICogLUVJTlZBTAogICovCi1zdGF0aWMgaW50IGlvY3RsX3Nfc3RkKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHY0bDJfc3RkX2lkICpzdGRfaWQpCitzdGF0aWMgaW50IHR2cDUxNHhfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkX2lkKQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAlpbnQgZXJyLCBpOwogCi0JaWYgKHN0ZF9pZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWZvciAoaSA9IDA7IGkgPCBkZWNvZGVyLT5udW1fc3RkczsgaSsrKQotCQlpZiAoKnN0ZF9pZCAmIGRlY29kZXItPnN0ZF9saXN0W2ldLnN0YW5kYXJkLmlkKQorCQlpZiAoc3RkX2lkICYgZGVjb2Rlci0+c3RkX2xpc3RbaV0uc3RhbmRhcmQuaWQpCiAJCQlicmVhazsKIAogCWlmICgoaSA9PSBkZWNvZGVyLT5udW1fc3RkcykgfHwgKGkgPT0gU1REX0lOVkFMSUQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZJREVPX1NURCwKKwllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgUkVHX1ZJREVPX1NURCwKIAkJCQlkZWNvZGVyLT5zdGRfbGlzdFtpXS52aWRlb19zdGQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC01ODgsMjQgKzYxMSwyNiBAQAogCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfVklERU9fU1REXS52YWwgPQogCQlkZWNvZGVyLT5zdGRfbGlzdFtpXS52aWRlb19zdGQ7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsICJTdGFuZGFyZCBzZXQgdG86ICVzIiwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTdGFuZGFyZCBzZXQgdG86ICVzIiwKIAkJCWRlY29kZXItPnN0ZF9saXN0W2ldLnN0YW5kYXJkLm5hbWUpOwogCXJldHVybiAwOwogfQogCiAvKioKLSAqIGlvY3RsX3Nfcm91dGluZyAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX1NfSU5QVVQgaW9jdGwKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQotICogQGluZGV4OiBudW1iZXIgb2YgdGhlIGlucHV0CisgKiB0dnA1MTR4X3Nfcm91dGluZygpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBzX3JvdXRpbmcKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAaW5wdXQ6IGlucHV0IHNlbGVjdG9yIGZvciByb3V0aW5nIHRoZSBzaWduYWwKKyAqIEBvdXRwdXQ6IG91dHB1dCBzZWxlY3RvciBmb3Igcm91dGluZyB0aGUgc2lnbmFsCisgKiBAY29uZmlnOiBjb25maWcgdmFsdWUuIE5vdCB1c2VkCiAgKgogICogSWYgaW5kZXggaXMgdmFsaWQsIHNlbGVjdHMgdGhlIHJlcXVlc3RlZCBpbnB1dC4gT3RoZXJ3aXNlLCByZXR1cm5zIC1FSU5WQUwgaWYKICAqIHRoZSBpbnB1dCBpcyBub3Qgc3VwcG9ydGVkIG9yIHRoZXJlIGlzIG5vIGFjdGl2ZSBzaWduYWwgcHJlc2VudCBpbiB0aGUKICAqIHNlbGVjdGVkIGlucHV0LgogICovCi1zdGF0aWMgaW50IGlvY3RsX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLAotCQkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQorc3RhdGljIGludCB0dnA1MTR4X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCXUzMiBpbnB1dCwgdTMyIG91dHB1dCwgdTMyIGNvbmZpZykKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJaW50IGVycjsKIAllbnVtIHR2cDUxNHhfaW5wdXQgaW5wdXRfc2VsOwogCWVudW0gdHZwNTE0eF9vdXRwdXQgb3V0cHV0X3NlbDsKQEAgLTYxMywyMCArNjM4LDIxIEBACiAJdTggc3luY19sb2NrX3N0YXR1cywgbG9ja19tYXNrOwogCWludCB0cnlfY291bnQgPSBMT0NLX1JFVFJZX0NPVU5UOwogCi0JaWYgKCghcm91dGUpIHx8IChyb3V0ZS0+aW5wdXQgPj0gSU5QVVRfSU5WQUxJRCkgfHwKLQkJCShyb3V0ZS0+b3V0cHV0ID49IE9VVFBVVF9JTlZBTElEKSkKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIEluZGV4IG91dCBvZiBib3VuZCAqLworCWlmICgoaW5wdXQgPj0gSU5QVVRfSU5WQUxJRCkgfHwKKwkJCShvdXRwdXQgPj0gT1VUUFVUX0lOVkFMSUQpKQorCQkvKiBJbmRleCBvdXQgb2YgYm91bmQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbnB1dF9zZWwgPSByb3V0ZS0+aW5wdXQ7Ci0Jb3V0cHV0X3NlbCA9IHJvdXRlLT5vdXRwdXQ7CisJaW5wdXRfc2VsID0gaW5wdXQ7CisJb3V0cHV0X3NlbCA9IG91dHB1dDsKIAotCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0lOUFVUX1NFTCwgaW5wdXRfc2VsKTsKKwllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgUkVHX0lOUFVUX1NFTCwgaW5wdXRfc2VsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jb3V0cHV0X3NlbCB8PSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwKKwlvdXRwdXRfc2VsIHw9IHR2cDUxNHhfcmVhZF9yZWcoc2QsCiAJCQlSRUdfT1VUUFVUX0ZPUk1BVFRFUjEpICYgMHg3OwotCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVIxLAorCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKHNkLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjEsCiAJCQlvdXRwdXRfc2VsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtNjM3LDcgKzY2Myw3IEBACiAJLyogQ2xlYXIgc3RhdHVzICovCiAJbXNsZWVwKExPQ0tfUkVUUllfREVMQVkpOwogCWVyciA9Ci0JICAgIHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NMRUFSX0xPU1RfTE9DSywgMHgwMSk7CisJICAgIHR2cDUxNHhfd3JpdGVfcmVnKHNkLCBSRUdfQ0xFQVJfTE9TVF9MT0NLLCAweDAxKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC02NzIsNyArNjk4LDcgQEAKIAkJbG9ja19tYXNrID0gU1RBVFVTX0hPUlpfU1lOQ19MT0NLX0JJVCB8CiAJCQlTVEFUVVNfVklSVF9TWU5DX0xPQ0tfQklUOwogCQlicmVhazsKLQkvKk5lZWQgdG8gYWRkIG90aGVyIGludGVyZmFjZXMqLworCS8qIE5lZWQgdG8gYWRkIG90aGVyIGludGVyZmFjZXMqLwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTY4Miw0MiArNzA4LDQxIEBACiAJCW1zbGVlcChMT0NLX1JFVFJZX0RFTEFZKTsKIAogCQkvKiBnZXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgZm9yIGZ1dHVyZSByZWZlcmVuY2UgKi8KLQkJY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChkZWNvZGVyKTsKKwkJY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChzZCk7CiAJCWlmIChjdXJyZW50X3N0ZCA9PSBTVERfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwogCi0JCXN5bmNfbG9ja19zdGF0dXMgPSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwKKwkJc3luY19sb2NrX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoc2QsCiAJCQkJUkVHX1NUQVRVUzEpOwogCQlpZiAobG9ja19tYXNrID09IChzeW5jX2xvY2tfc3RhdHVzICYgbG9ja19tYXNrKSkKLQkJCWJyZWFrOwkvKiBJbnB1dCBkZXRlY3RlZCAqLworCQkJLyogSW5wdXQgZGV0ZWN0ZWQgKi8KKwkJCWJyZWFrOwogCX0KIAogCWlmICgoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpIHx8ICh0cnlfY291bnQgPCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZWNvZGVyLT5jdXJyZW50X3N0ZCA9IGN1cnJlbnRfc3RkOwotCWRlY29kZXItPnJvdXRlLmlucHV0ID0gcm91dGUtPmlucHV0OwotCWRlY29kZXItPnJvdXRlLm91dHB1dCA9IHJvdXRlLT5vdXRwdXQ7CisJZGVjb2Rlci0+aW5wdXQgPSBpbnB1dDsKKwlkZWNvZGVyLT5vdXRwdXQgPSBvdXRwdXQ7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCi0JCQkiSW5wdXQgc2V0IHRvOiAlZCwgc3RkIDogJWQiLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIklucHV0IHNldCB0bzogJWQsIHN0ZCA6ICVkIiwKIAkJCWlucHV0X3NlbCwgY3VycmVudF9zdGQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogaW9jdGxfcXVlcnljdHJsIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfUVVFUllDVFJMIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIHR2cDUxNHhfcXVlcnljdHJsKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHF1ZXJ5Y3RybAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKICAqIEBxY3RybDogc3RhbmRhcmQgVjRMMiB2NGwyX3F1ZXJ5Y3RybCBzdHJ1Y3R1cmUKICAqCiAgKiBJZiB0aGUgcmVxdWVzdGVkIGNvbnRyb2wgaXMgc3VwcG9ydGVkLCByZXR1cm5zIHRoZSBjb250cm9sIGluZm9ybWF0aW9uLgogICogT3RoZXJ3aXNlLCByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZC4KICAqLwogc3RhdGljIGludAotaW9jdGxfcXVlcnljdHJsKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit0dnA1MTR4X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OwogCWludCBlcnIgPSAtRUlOVkFMOwogCiAJaWYgKHFjdHJsID09IE5VTEwpCkBAIC03MjUsMTMgKzc1MCwxMyBAQAogCiAJc3dpdGNoIChxY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCS8qIEJyaWdodG5lc3Mgc3VwcG9ydGVkIGlzICgwLTI1NSksCi0JCSAqLworCQkvKiBCcmlnaHRuZXNzIHN1cHBvcnRlZCBpcyAoMC0yNTUpLCAqLwogCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAxMjgpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJLyogU2F0dXJhdGlvbiBhbmQgQ29udHJhc3Qgc3VwcG9ydGVkIGlzIC0KKwkJLyoqCisJCSAqIFNhdHVyYXRpb24gYW5kIENvbnRyYXN0IHN1cHBvcnRlZCBpcyAtCiAJCSAqCUNvbnRyYXN0OiAwIC0gMjU1IChEZWZhdWx0IC0gMTI4KQogCQkgKglTYXR1cmF0aW9uOiAwIC0gMjU1IChEZWZhdWx0IC0gMTI4KQogCQkgKi8KQEAgLTc0NCwzMCArNzY5LDI3IEBACiAJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAtMTgwLCAxODAsIDE4MCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46Ci0JCS8qIEF1dG9nYWluIGlzIGVpdGhlciAwIG9yIDEqLwotCQltZW1jcHkocWN0cmwsICZ0dnA1MTR4X2F1dG9nYWluX2N0cmwsCi0JCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkpOwotCQllcnIgPSAwOworCQkvKioKKwkJICogQXV0byBHYWluIHN1cHBvcnRlZCBpcyAtCisJCSAqIAkwIC0gMSAoRGVmYXVsdCAtIDEpCisJCSAqLworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAotCQkJImludmFsaWQgY29udHJvbCBpZCAlZFxuIiwgcWN0cmwtPmlkKTsKKwkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGNvbnRyb2wgaWQgJWRcbiIsIHFjdHJsLT5pZCk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAotCQkJIlF1ZXJ5IENvbnRyb2w6ICVzIDogTWluIC0gJWQsIE1heCAtICVkLCBEZWYgLSAlZCIsCi0JCQlxY3RybC0+bmFtZSwKLQkJCXFjdHJsLT5taW5pbXVtLAotCQkJcWN0cmwtPm1heGltdW0sCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiUXVlcnkgQ29udHJvbDolczogTWluIC0gJWQsIE1heCAtICVkLCBEZWYgLSAlZCIsCisJCQlxY3RybC0+bmFtZSwgcWN0cmwtPm1pbmltdW0sIHFjdHJsLT5tYXhpbXVtLAogCQkJcWN0cmwtPmRlZmF1bHRfdmFsdWUpOwogCiAJcmV0dXJuIGVycjsKIH0KIAogLyoqCi0gKiBpb2N0bF9nX2N0cmwgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19HX0NUUkwgaW9jdGwKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogdHZwNTE0eF9nX2N0cmwoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgZ19jdHJsCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQogICogQGN0cmw6IHBvaW50ZXIgdG8gdjRsMl9jb250cm9sIHN0cnVjdHVyZQogICoKICAqIElmIHRoZSByZXF1ZXN0ZWQgY29udHJvbCBpcyBzdXBwb3J0ZWQsIHJldHVybnMgdGhlIGNvbnRyb2wncyBjdXJyZW50CkBAIC03NzUsOSArNzk3LDkgQEAKICAqIHN1cHBvcnRlZC4KICAqLwogc3RhdGljIGludAotaW9jdGxfZ19jdHJsKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit0dnA1MTR4X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAogCWlmIChjdHJsID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODExLDc0ICs4MzMsNzAgQEAKIAogCQlicmVhazsKIAlkZWZhdWx0OgotCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCSJpbnZhbGlkIGNvbnRyb2wgaWQgJWRcbiIsIGN0cmwtPmlkKTsKKwkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGNvbnRyb2wgaWQgJWRcbiIsIGN0cmwtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAotCQkJIkdldCBDb250cm9sOiBJRCAtICVkIC0gJWQiLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkdldCBDb250cm9sOiBJRCAtICVkIC0gJWQiLAogCQkJY3RybC0+aWQsIGN0cmwtPnZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBpb2N0bF9zX2N0cmwgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19TX0NUUkwgaW9jdGwKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogdHZwNTE0eF9zX2N0cmwoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3Igc19jdHJsCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQogICogQGN0cmw6IHBvaW50ZXIgdG8gdjRsMl9jb250cm9sIHN0cnVjdHVyZQogICoKICAqIElmIHRoZSByZXF1ZXN0ZWQgY29udHJvbCBpcyBzdXBwb3J0ZWQsIHNldHMgdGhlIGNvbnRyb2wncyBjdXJyZW50CiAgKiB2YWx1ZSBpbiBIVy4gT3RoZXJ3aXNlLCByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZC4KICAqLwogc3RhdGljIGludAotaW9jdGxfc19jdHJsKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit0dnA1MTR4X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAlpbnQgZXJyID0gLUVJTlZBTCwgdmFsdWU7CiAKIAlpZiAoY3RybCA9PSBOVUxMKQogCQlyZXR1cm4gZXJyOwogCi0JdmFsdWUgPSAoX19zMzIpIGN0cmwtPnZhbHVlOworCXZhbHVlID0gY3RybC0+dmFsdWU7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7Ci0JCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCQkJImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLAorCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGJyaWdodG5lc3Mgc2V0dGluZyAlZFxuIiwKIAkJCQkJY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KLQkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQlJJR0hUTkVTUywKKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoc2QsIFJFR19CUklHSFRORVNTLAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisKIAkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19CUklHSFRORVNTXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDI1NSkgewotCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCi0JCQkJCSJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsCisJCQl2NGwyX2VycihzZCwgImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwKIAkJCQkJY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KLQkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQ09OVFJBU1QsCi0JCQkJdmFsdWUpOworCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgUkVHX0NPTlRSQVNULCB2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCiAJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQ09OVFJBU1RdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKLQkJCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAotCQkJCQkiaW52YWxpZCBzYXR1cmF0aW9uIHNldHRpbmcgJWRcbiIsCisJCQl2NGwyX2VycihzZCwgImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLAogCQkJCQljdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQotCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19TQVRVUkFUSU9OLAotCQkJCXZhbHVlKTsKKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoc2QsIFJFR19TQVRVUkFUSU9OLCB2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCiAJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfU0FUVVJBVElPTl0udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSFVFOgpAQCAtODg5LDE1ICs5MDcsMTMgQEAKIAkJZWxzZSBpZiAodmFsdWUgPT0gMCkKIAkJCXZhbHVlID0gMDsKIAkJZWxzZSB7Ci0JCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCQkJImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsCi0JCQkJCWN0cmwtPnZhbHVlKTsKKwkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KLQkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfSFVFLAotCQkJCXZhbHVlKTsKKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoc2QsIFJFR19IVUUsIHZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisKIAkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19IVUVdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgpAQCAtOTA2LDQxICs5MjIsMzggQEAKIAkJZWxzZSBpZiAodmFsdWUgPT0gMCkKIAkJCXZhbHVlID0gMHgwQzsKIAkJZWxzZSB7Ci0JCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCQkJImludmFsaWQgYXV0byBnYWluIHNldHRpbmcgJWRcbiIsCisJCQl2NGwyX2VycihzZCwgImludmFsaWQgYXV0byBnYWluIHNldHRpbmcgJWRcbiIsCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9Ci0JCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0FGRV9HQUlOX0NUUkwsCi0JCQkJdmFsdWUpOworCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhzZCwgUkVHX0FGRV9HQUlOX0NUUkwsIHZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisKIAkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19BRkVfR0FJTl9DVFJMXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCi0JCQkiaW52YWxpZCBjb250cm9sIGlkICVkXG4iLCBjdHJsLT5pZCk7CisJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBjb250cm9sIGlkICVkXG4iLCBjdHJsLT5pZCk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAotCQkJIlNldCBDb250cm9sOiBJRCAtICVkIC0gJWQiLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNldCBDb250cm9sOiBJRCAtICVkIC0gJWQiLAogCQkJY3RybC0+aWQsIGN0cmwtPnZhbHVlKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIC8qKgotICogaW9jdGxfZW51bV9mbXRfY2FwIC0gSW1wbGVtZW50IHRoZSBDQVBUVVJFIGJ1ZmZlciBWSURJT0NfRU5VTV9GTVQgaW9jdGwKLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogdHZwNTE0eF9lbnVtX2ZtdF9jYXAoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgZW51bV9mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAZm10OiBzdGFuZGFyZCBWNEwyIFZJRElPQ19FTlVNX0ZNVCBpb2N0bCBzdHJ1Y3R1cmUKICAqCiAgKiBJbXBsZW1lbnQgdGhlIFZJRElPQ19FTlVNX0ZNVCBpb2N0bCB0byBlbnVtZXJhdGUgc3VwcG9ydGVkIGZvcm1hdHMKICAqLwogc3RhdGljIGludAotaW9jdGxfZW51bV9mbXRfY2FwKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3R2cDUxNHhfZW51bV9mbXRfY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJaW50IGluZGV4OwogCiAJaWYgKGZtdCA9PSBOVUxMKQpAQCAtOTQ4LDI0ICs5NjEsMjUgQEAKIAogCWluZGV4ID0gZm10LT5pbmRleDsKIAlpZiAoKGluZGV4ID49IGRlY29kZXItPm51bV9mbXRzKSB8fCAoaW5kZXggPCAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIEluZGV4IG91dCBvZiBib3VuZCAqLworCQkvKiBJbmRleCBvdXQgb2YgYm91bmQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwkJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbWNweShmbXQsICZkZWNvZGVyLT5mbXRfbGlzdFtpbmRleF0sCiAJCXNpemVvZihzdHJ1Y3QgdjRsMl9mbXRkZXNjKSk7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCi0JCQkiQ3VycmVudCBGTVQ6IGluZGV4IC0gJWQgKCVzKSIsCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiQ3VycmVudCBGTVQ6IGluZGV4IC0gJWQgKCVzKSIsCiAJCQlkZWNvZGVyLT5mbXRfbGlzdFtpbmRleF0uaW5kZXgsCiAJCQlkZWNvZGVyLT5mbXRfbGlzdFtpbmRleF0uZGVzY3JpcHRpb24pOwogCXJldHVybiAwOwogfQogCiAvKioKLSAqIGlvY3RsX3RyeV9mbXRfY2FwIC0gSW1wbGVtZW50IHRoZSBDQVBUVVJFIGJ1ZmZlciBWSURJT0NfVFJZX0ZNVCBpb2N0bAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X3RyeV9mbXRfY2FwKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHRyeV9mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19UUllfRk1UIGlvY3RsIHN0cnVjdHVyZQogICoKICAqIEltcGxlbWVudCB0aGUgVklESU9DX1RSWV9GTVQgaW9jdGwgZm9yIHRoZSBDQVBUVVJFIGJ1ZmZlciB0eXBlLiBUaGlzCkBAIC05NzMsOSArOTg3LDkgQEAKICAqIHdpdGhvdXQgYWN0dWFsbHkgbWFraW5nIGl0IHRha2UgZWZmZWN0LgogICovCiBzdGF0aWMgaW50Ci1pb2N0bF90cnlfZm10X2NhcChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit0dnA1MTR4X3RyeV9mbXRfY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJaW50IGlmbXQ7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OwogCWVudW0gdHZwNTE0eF9zdGQgY3VycmVudF9zdGQ7CkBAIC05ODQsMTIgKzk5OCwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLwogCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJcGl4ID0gJmYtPmZtdC5waXg7CiAKIAkvKiBDYWxjdWxhdGUgaGVpZ2h0IGFuZCB3aWR0aCBiYXNlZCBvbiBjdXJyZW50IHN0YW5kYXJkICovCi0JY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChkZWNvZGVyKTsKKwljdXJyZW50X3N0ZCA9IHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKHNkKTsKIAlpZiAoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMDAzLDcgKzEwMTgsOCBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChpZm10ID09IGRlY29kZXItPm51bV9mbXRzKQotCQlpZm10ID0gMDsJLyogTm9uZSBvZiB0aGUgZm9ybWF0IG1hdGNoZWQsIHNlbGVjdCBkZWZhdWx0ICovCisJCS8qIE5vbmUgb2YgdGhlIGZvcm1hdCBtYXRjaGVkLCBzZWxlY3QgZGVmYXVsdCAqLworCQlpZm10ID0gMDsKIAlwaXgtPnBpeGVsZm9ybWF0ID0gZGVjb2Rlci0+Zm10X2xpc3RbaWZtdF0ucGl4ZWxmb3JtYXQ7CiAKIAlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwpAQCAtMTAxMiw4ICsxMDI4LDcgQEAKIAlwaXgtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwogCXBpeC0+cHJpdiA9IDA7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCi0JCQkiVHJ5IEZNVDogcGl4ZWxmb3JtYXQgLSAlcywgYnl0ZXNwZXJsaW5lIC0gJWQiCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVHJ5IEZNVDogcGl4ZWxmb3JtYXQgLSAlcywgYnl0ZXNwZXJsaW5lIC0gJWQiCiAJCQkiV2lkdGggLSAlZCwgSGVpZ2h0IC0gJWQiLAogCQkJZGVjb2Rlci0+Zm10X2xpc3RbaWZtdF0uZGVzY3JpcHRpb24sIHBpeC0+Ynl0ZXNwZXJsaW5lLAogCQkJcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwpAQCAtMTAyMSw4ICsxMDM2LDggQEAKIH0KIAogLyoqCi0gKiBpb2N0bF9zX2ZtdF9jYXAgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19TX0ZNVCBpb2N0bAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X3NfZm10X2NhcCgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBzX2ZtdAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKICAqIEBmOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgVklESU9DX1NfRk1UIGlvY3RsIHN0cnVjdHVyZQogICoKICAqIElmIHRoZSByZXF1ZXN0ZWQgZm9ybWF0IGlzIHN1cHBvcnRlZCwgY29uZmlndXJlcyB0aGUgSFcgdG8gdXNlIHRoYXQKQEAgLTEwMzAsOSArMTA0NSw5IEBACiAgKiBjb3JyZWN0bHkgY29uZmlndXJlZC4KICAqLwogc3RhdGljIGludAotaW9jdGxfc19mbXRfY2FwKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3R2cDUxNHhfc19mbXRfY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OwogCWludCBydmFsOwogCkBAIC0xMDQwLDEwICsxMDU1LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQkvKiBvbmx5IGNhcHR1cmUgaXMgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOwogCiAJcGl4ID0gJmYtPmZtdC5waXg7Ci0JcnZhbCA9IGlvY3RsX3RyeV9mbXRfY2FwKHMsIGYpOworCXJ2YWwgPSB0dnA1MTR4X3RyeV9mbXRfY2FwKHNkLCBmKTsKIAlpZiAocnZhbCkKIAkJcmV0dXJuIHJ2YWw7CiAKQEAgLTEwNTMsMjggKzEwNjksMjggQEAKIH0KIAogLyoqCi0gKiBpb2N0bF9nX2ZtdF9jYXAgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIGlvY3RsX2dfZm10X2NhcAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X2dfZm10X2NhcCgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB0dnA1MTR4X2dfZm10X2NhcAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKICAqIEBmOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgdjRsMl9mb3JtYXQgc3RydWN0dXJlCiAgKgogICogUmV0dXJucyB0aGUgZGVjb2RlcidzIGN1cnJlbnQgcGl4ZWwgZm9ybWF0IGluIHRoZSB2NGwyX2Zvcm1hdAogICogcGFyYW1ldGVyLgogICovCiBzdGF0aWMgaW50Ci1pb2N0bF9nX2ZtdF9jYXAoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQordHZwNTE0eF9nX2ZtdF9jYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAogCWlmIChmID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQkvKiBvbmx5IGNhcHR1cmUgaXMgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOwogCiAJZi0+Zm10LnBpeCA9IGRlY29kZXItPnBpeDsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwKLQkJCSJDdXJyZW50IEZNVDogYnl0ZXNwZXJsaW5lIC0gJWQiCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiQ3VycmVudCBGTVQ6IGJ5dGVzcGVybGluZSAtICVkIgogCQkJIldpZHRoIC0gJWQsIEhlaWdodCAtICVkIiwKIAkJCWRlY29kZXItPnBpeC5ieXRlc3BlcmxpbmUsCiAJCQlkZWNvZGVyLT5waXgud2lkdGgsIGRlY29kZXItPnBpeC5oZWlnaHQpOwpAQCAtMTA4MiwxNiArMTA5OCwxNiBAQAogfQogCiAvKioKLSAqIGlvY3RsX2dfcGFybSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX0dfUEFSTSBpb2N0bAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiB0dnA1MTR4X2dfcGFybSgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBnX3Bhcm0KKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCiAgKiBAYTogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19HX1BBUk0gaW9jdGwgc3RydWN0dXJlCiAgKgogICogUmV0dXJucyB0aGUgZGVjb2RlcidzIHZpZGVvIENBUFRVUkUgcGFyYW1ldGVycy4KICAqLwogc3RhdGljIGludAotaW9jdGxfZ19wYXJtKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit0dnA1MTR4X2dfcGFybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3Bhcm07CiAJZW51bSB0dnA1MTR4X3N0ZCBjdXJyZW50X3N0ZDsKIApAQCAtMTA5OSwxMyArMTExNSwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwkJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKIAlhLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJLyogZ2V0IHRoZSBjdXJyZW50IHN0YW5kYXJkICovCi0JY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChkZWNvZGVyKTsKKwljdXJyZW50X3N0ZCA9IHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKHNkKTsKIAlpZiAoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTIwLDE3ICsxMTM3LDE3IEBACiB9CiAKIC8qKgotICogaW9jdGxfc19wYXJtIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfU19QQVJNIGlvY3RsCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIHR2cDUxNHhfc19wYXJtKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHNfcGFybQorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKICAqIEBhOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgVklESU9DX1NfUEFSTSBpb2N0bCBzdHJ1Y3R1cmUKICAqCiAgKiBDb25maWd1cmVzIHRoZSBkZWNvZGVyIHRvIHVzZSB0aGUgaW5wdXQgcGFyYW1ldGVycywgaWYgcG9zc2libGUuIElmCiAgKiBub3QgcG9zc2libGUsIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCiAgKi8KIHN0YXRpYyBpbnQKLWlvY3RsX3NfcGFybShzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQordHZwNTE0eF9zX3Bhcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gdG9fZGVjb2RlcihzZCk7CiAJc3RydWN0IHY0bDJfZnJhY3QgKnRpbWVwZXJmcmFtZTsKIAllbnVtIHR2cDUxNHhfc3RkIGN1cnJlbnRfc3RkOwogCkBAIC0xMTM4LDEyICsxMTU1LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCQkvKiBvbmx5IGNhcHR1cmUgaXMgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOwogCiAJdGltZXBlcmZyYW1lID0gJmEtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWU7CiAKIAkvKiBnZXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgKi8KLQljdXJyZW50X3N0ZCA9IHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKGRlY29kZXIpOworCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoc2QpOwogCWlmIChjdXJyZW50X3N0ZCA9PSBTVERfSU5WQUxJRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTExNTYsMTExICsxMTc0LDU4IEBACiB9CiAKIC8qKgotICogaW9jdGxfZ19pZnBhcm0gLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHZpZGlvY19pbnRfZ19pZnBhcm1fbnVtCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBwOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgdmlkaW9jX2ludF9nX2lmcGFybV9udW0gaW9jdGwgc3RydWN0dXJlCisgKiB0dnA1MTR4X3Nfc3RyZWFtKCkgLSBWNEwyIGRlY29kZXIgaS9mIGhhbmRsZXIgZm9yIHNfc3RyZWFtCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGVuYWJsZTogc3RyZWFtaW5nIGVuYWJsZSBvciBkaXNhYmxlCiAgKgotICogR2V0cyBzbGF2ZSBpbnRlcmZhY2UgcGFyYW1ldGVycy4KLSAqIENhbGN1bGF0ZXMgdGhlIHJlcXVpcmVkIHhjbGsgdmFsdWUgdG8gc3VwcG9ydCB0aGUgcmVxdWVzdGVkCi0gKiBjbG9jayBwYXJhbWV0ZXJzIGluIHAuIFRoaXMgdmFsdWUgaXMgcmV0dXJuZWQgaW4gdGhlIHAKLSAqIHBhcmFtZXRlci4KKyAqIFNldHMgc3RyZWFtaW5nIHRvIGVuYWJsZSBvciBkaXNhYmxlLCBpZiBwb3NzaWJsZS4KICAqLwotc3RhdGljIGludCBpb2N0bF9nX2lmcGFybShzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9pZnBhcm0gKnApCitzdGF0aWMgaW50IHR2cDUxNHhfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKLQlpbnQgcnZhbDsKLQotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKE5VTEwgPT0gZGVjb2Rlci0+cGRhdGEtPmlmcGFybSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlydmFsID0gZGVjb2Rlci0+cGRhdGEtPmlmcGFybShwKTsKLQlpZiAocnZhbCkgewotCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwgImdfaWZwYXJtLkVyclslZF1cbiIsIHJ2YWwpOwotCQlyZXR1cm4gcnZhbDsKLQl9Ci0KLQlwLT51LmJ0NjU2LmNsb2NrX2N1cnIgPSBUVlA1MTRYX1hDTEtfQlQ2NTY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpb2N0bF9nX3ByaXYgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHZpZGlvY19pbnRfZ19wcml2X251bQotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcDogdm9pZCBwb2ludGVyIHRvIGhvbGQgZGVjb2RlcidzIHByaXZhdGUgZGF0YSBhZGRyZXNzCi0gKgotICogUmV0dXJucyBkZXZpY2UncyAoZGVjb2RlcidzKSBwcml2YXRlIGRhdGEgYXJlYSBhZGRyZXNzIGluIHAgcGFyYW1ldGVyCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfZ19wcml2KHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHZvaWQgKnApCi17Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7Ci0KLQlpZiAoTlVMTCA9PSBkZWNvZGVyLT5wZGF0YS0+cHJpdl9kYXRhX3NldCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gZGVjb2Rlci0+cGRhdGEtPnByaXZfZGF0YV9zZXQocCk7Ci19Ci0KLS8qKgotICogaW9jdGxfc19wb3dlciAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdmlkaW9jX2ludF9zX3Bvd2VyX251bQotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAb246IHBvd2VyIHN0YXRlIHRvIHdoaWNoIGRldmljZSBpcyB0byBiZSBzZXQKLSAqCi0gKiBTZXRzIGRldmljZXMgcG93ZXIgc3RhdGUgdG8gcmVxdXJlc3RlZCBzdGF0ZSwgaWYgcG9zc2libGUuCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfc19wb3dlcihzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBlbnVtIHY0bDJfcG93ZXIgb24pCi17Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CiAJaW50IGVyciA9IDA7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSB0b19kZWNvZGVyKHNkKTsKIAotCXN3aXRjaCAob24pIHsKLQljYXNlIFY0TDJfUE9XRVJfT0ZGOgorCWlmIChkZWNvZGVyLT5zdHJlYW1pbmcgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZW5hYmxlKSB7CisJY2FzZSAwOgorCXsKIAkJLyogUG93ZXIgRG93biBTZXF1ZW5jZSAqLwotCQllcnIgPQotCQkgICAgdHZwNTE0eF93cml0ZV9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1BFUkFUSU9OX01PREUsCi0JCQkJCTB4MDEpOwotCQkvKiBEaXNhYmxlIG11eCBmb3IgVFZQNTE0Ni80NyBkZWNvZGVyIGRhdGEgcGF0aCAqLwotCQlpZiAoZGVjb2Rlci0+cGRhdGEtPnBvd2VyX3NldCkKLQkJCWVyciB8PSBkZWNvZGVyLT5wZGF0YS0+cG93ZXJfc2V0KG9uKTsKLQkJZGVjb2Rlci0+c3RhdGUgPSBTVEFURV9OT1RfREVURUNURUQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBWNEwyX1BPV0VSX1NUQU5EQlk6Ci0JCWlmIChkZWNvZGVyLT5wZGF0YS0+cG93ZXJfc2V0KQotCQkJZXJyID0gZGVjb2Rlci0+cGRhdGEtPnBvd2VyX3NldChvbik7Ci0JCWJyZWFrOwotCi0JY2FzZSBWNEwyX1BPV0VSX09OOgotCQkvKiBFbmFibGUgbXV4IGZvciBUVlA1MTQ2LzQ3IGRlY29kZXIgZGF0YSBwYXRoICovCi0JCWlmICgoZGVjb2Rlci0+cGRhdGEtPnBvd2VyX3NldCkgJiYKLQkJCQkoZGVjb2Rlci0+c3RhdGUgPT0gU1RBVEVfTk9UX0RFVEVDVEVEKSkgewotCQkJaW50IGk7Ci0JCQlzdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSAqaW50X3NlcSA9Ci0JCQkJKHN0cnVjdCB0dnA1MTR4X2luaXRfc2VxICopCi0JCQkJZGVjb2Rlci0+aWQtPmRyaXZlcl9kYXRhOwotCi0JCQllcnIgPSBkZWNvZGVyLT5wZGF0YS0+cG93ZXJfc2V0KG9uKTsKLQotCQkJLyogUG93ZXIgVXAgU2VxdWVuY2UgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBpbnRfc2VxLT5ub19yZWdzOyBpKyspIHsKLQkJCQllcnIgfD0gdHZwNTE0eF93cml0ZV9yZWcoZGVjb2Rlci0+Y2xpZW50LAotCQkJCQkJaW50X3NlcS0+aW5pdF9yZWdfc2VxW2ldLnJlZywKLQkJCQkJCWludF9zZXEtPmluaXRfcmVnX3NlcVtpXS52YWwpOwotCQkJfQotCQkJLyogRGV0ZWN0IHRoZSBzZW5zb3IgaXMgbm90IGFscmVhZHkgZGV0ZWN0ZWQgKi8KLQkJCWVyciB8PSB0dnA1MTR4X2RldGVjdChkZWNvZGVyKTsKLQkJCWlmIChlcnIpIHsKLQkJCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKLQkJCQkJCSJVbmFibGUgdG8gZGV0ZWN0IGRlY29kZXJcbiIpOwotCQkJCXJldHVybiBlcnI7Ci0JCQl9CisJCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKHNkLCBSRUdfT1BFUkFUSU9OX01PREUsIDB4MDEpOworCQlpZiAoZXJyKSB7CisJCQl2NGwyX2VycihzZCwgIlVuYWJsZSB0byB0dXJuIG9mZiBkZWNvZGVyXG4iKTsKKwkJCXJldHVybiBlcnI7CiAJCX0KLQkJZXJyIHw9IHR2cDUxNHhfY29uZmlndXJlKGRlY29kZXIpOworCQlkZWNvZGVyLT5zdHJlYW1pbmcgPSBlbmFibGU7CiAJCWJyZWFrOworCX0KKwljYXNlIDE6CisJeworCQlzdHJ1Y3QgdHZwNTE0eF9yZWcgKmludF9zZXEgPSAoc3RydWN0IHR2cDUxNHhfcmVnICopCisJCQkJY2xpZW50LT5kcml2ZXItPmlkX3RhYmxlLT5kcml2ZXJfZGF0YTsKIAorCQkvKiBQb3dlciBVcCBTZXF1ZW5jZSAqLworCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZ3Moc2QsIGludF9zZXEpOworCQlpZiAoZXJyKSB7CisJCQl2NGwyX2VycihzZCwgIlVuYWJsZSB0byB0dXJuIG9uIGRlY29kZXJcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQkvKiBEZXRlY3QgaWYgbm90IGFscmVhZHkgZGV0ZWN0ZWQgKi8KKwkJZXJyID0gdHZwNTE0eF9kZXRlY3Qoc2QsIGRlY29kZXIpOworCQlpZiAoZXJyKSB7CisJCQl2NGwyX2VycihzZCwgIlVuYWJsZSB0byBkZXRlY3QgZGVjb2RlclxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IHR2cDUxNHhfY29uZmlndXJlKHNkLCBkZWNvZGVyKTsKKwkJaWYgKGVycikgeworCQkJdjRsMl9lcnIoc2QsICJVbmFibGUgdG8gY29uZmlndXJlIGRlY29kZXJcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlkZWNvZGVyLT5zdHJlYW1pbmcgPSBlbmFibGU7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PREVWOwogCQlicmVhazsKQEAgLTEyNjksOTMgKzEyMzQsMzggQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKioKLSAqIGlvY3RsX2luaXQgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19JTlRfSU5JVAotICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogSW5pdGlhbGl6ZSB0aGUgZGVjb2RlciBkZXZpY2UgKGNhbGxzIHR2cDUxNHhfY29uZmlndXJlKCkpCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfaW5pdChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzKQotewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0dnA1MTR4X2NvcmVfb3BzID0geworCS5xdWVyeWN0cmwgPSB0dnA1MTR4X3F1ZXJ5Y3RybCwKKwkuZ19jdHJsID0gdHZwNTE0eF9nX2N0cmwsCisJLnNfY3RybCA9IHR2cDUxNHhfc19jdHJsLAorCS5zX3N0ZCA9IHR2cDUxNHhfc19zdGQsCit9OwogCi0JLyogU2V0IGRlZmF1bHQgc3RhbmRhcmQgdG8gYXV0byAqLwotCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfVklERU9fU1REXS52YWwgPQotCSAgICBWSURFT19TVERfQVVUT19TV0lUQ0hfQklUOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgdHZwNTE0eF92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHR2cDUxNHhfc19yb3V0aW5nLAorCS5xdWVyeXN0ZCA9IHR2cDUxNHhfcXVlcnlzdGQsCisJLmVudW1fZm10ID0gdHZwNTE0eF9lbnVtX2ZtdF9jYXAsCisJLmdfZm10ID0gdHZwNTE0eF9nX2ZtdF9jYXAsCisJLnRyeV9mbXQgPSB0dnA1MTR4X3RyeV9mbXRfY2FwLAorCS5zX2ZtdCA9IHR2cDUxNHhfc19mbXRfY2FwLAorCS5nX3Bhcm0gPSB0dnA1MTR4X2dfcGFybSwKKwkuc19wYXJtID0gdHZwNTE0eF9zX3Bhcm0sCisJLnNfc3RyZWFtID0gdHZwNTE0eF9zX3N0cmVhbSwKK307CiAKLQlyZXR1cm4gdHZwNTE0eF9jb25maWd1cmUoZGVjb2Rlcik7Ci19Ci0KLS8qKgotICogaW9jdGxfZGV2X2V4aXQgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHZpZGlvY19pbnRfZGV2X2V4aXRfbnVtCi0gKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKLSAqCi0gKiBEZWxpbml0aWFsaXNlIHRoZSBkZXYuIGF0IHNsYXZlIGRldGFjaC4gVGhlIGNvbXBsZW1lbnQgb2YgaW9jdGxfZGV2X2luaXQuCi0gKi8KLXN0YXRpYyBpbnQgaW9jdGxfZGV2X2V4aXQoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcykKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpb2N0bF9kZXZfaW5pdCAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdmlkaW9jX2ludF9kZXZfaW5pdF9udW0KLSAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQotICoKLSAqIEluaXRpYWxpc2UgdGhlIGRldmljZSB3aGVuIHNsYXZlIGF0dGFjaGVzIHRvIHRoZSBtYXN0ZXIuIFJldHVybnMgMCBpZgotICogVFZQNTE0Ni80NyBkZXZpY2UgY291bGQgYmUgZm91bmQsIG90aGVyd2lzZSByZXR1cm5zIGFwcHJvcHJpYXRlIGVycm9yLgotICovCi1zdGF0aWMgaW50IGlvY3RsX2Rldl9pbml0KHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMpCi17Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7Ci0JaW50IGVycjsKLQotCWVyciA9IHR2cDUxNHhfZGV0ZWN0KGRlY29kZXIpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAotCQkJIlVuYWJsZSB0byBkZXRlY3QgZGVjb2RlclxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JdjRsX2luZm8oZGVjb2Rlci0+Y2xpZW50LAotCQkgImNoaXAgdmVyc2lvbiAweCUuMnggZGV0ZWN0ZWRcbiIsIGRlY29kZXItPnZlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCB2NGwyX2ludF9pb2N0bF9kZXNjIHR2cDUxNHhfaW9jdGxfZGVzY1tdID0gewotCXt2aWRpb2NfaW50X2Rldl9pbml0X251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9kZXZfaW5pdH0sCi0Je3ZpZGlvY19pbnRfZGV2X2V4aXRfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyopIGlvY3RsX2Rldl9leGl0fSwKLQl7dmlkaW9jX2ludF9zX3Bvd2VyX251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9zX3Bvd2VyfSwKLQl7dmlkaW9jX2ludF9nX3ByaXZfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyopIGlvY3RsX2dfcHJpdn0sCi0Je3ZpZGlvY19pbnRfZ19pZnBhcm1fbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyopIGlvY3RsX2dfaWZwYXJtfSwKLQl7dmlkaW9jX2ludF9pbml0X251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9pbml0fSwKLQl7dmlkaW9jX2ludF9lbnVtX2ZtdF9jYXBfbnVtLAotCSAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9lbnVtX2ZtdF9jYXB9LAotCXt2aWRpb2NfaW50X3RyeV9mbXRfY2FwX251bSwKLQkgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfdHJ5X2ZtdF9jYXB9LAotCXt2aWRpb2NfaW50X2dfZm10X2NhcF9udW0sCi0JICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX2dfZm10X2NhcH0sCi0Je3ZpZGlvY19pbnRfc19mbXRfY2FwX251bSwKLQkgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfc19mbXRfY2FwfSwKLQl7dmlkaW9jX2ludF9nX3Bhcm1fbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9nX3Bhcm19LAotCXt2aWRpb2NfaW50X3NfcGFybV9udW0sICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3NfcGFybX0sCi0Je3ZpZGlvY19pbnRfcXVlcnljdHJsX251bSwKLQkgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfcXVlcnljdHJsfSwKLQl7dmlkaW9jX2ludF9nX2N0cmxfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9nX2N0cmx9LAotCXt2aWRpb2NfaW50X3NfY3RybF9udW0sICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3NfY3RybH0sCi0Je3ZpZGlvY19pbnRfcXVlcnlzdGRfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9xdWVyeXN0ZH0sCi0Je3ZpZGlvY19pbnRfc19zdGRfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9zX3N0ZH0sCi0Je3ZpZGlvY19pbnRfc192aWRlb19yb3V0aW5nX251bSwKLQkJKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfc19yb3V0aW5nfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHR2cDUxNHhfb3BzID0geworCS5jb3JlID0gJnR2cDUxNHhfY29yZV9vcHMsCisJLnZpZGVvID0gJnR2cDUxNHhfdmlkZW9fb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgdHZwNTE0eF9kZXYgPSB7Ci0JLnN0YXRlID0gU1RBVEVfTk9UX0RFVEVDVEVELAorCS5zdHJlYW1pbmcgPSAwLAogCiAJLmZtdF9saXN0ID0gdHZwNTE0eF9mbXRfbGlzdCwKIAkubnVtX2ZtdHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfZm10X2xpc3QpLAogCi0JLnBpeCA9IHsJCS8qIERlZmF1bHQgdG8gTlRTQyA4LWJpdCBZVVYgNDIyICovCisJLnBpeCA9IHsKKwkJLyogRGVmYXVsdCB0byBOVFNDIDgtYml0IFlVViA0MjIgKi8KIAkJLndpZHRoID0gTlRTQ19OVU1fQUNUSVZFX1BJWEVMUywKIAkJLmhlaWdodCA9IE5UU0NfTlVNX0FDVElWRV9MSU5FUywKIAkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlksCkBAIC0xMzY5LDIwICsxMjc5LDEzIEBACiAJLmN1cnJlbnRfc3RkID0gU1REX05UU0NfTUosCiAJLnN0ZF9saXN0ID0gdHZwNTE0eF9zdGRfbGlzdCwKIAkubnVtX3N0ZHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfc3RkX2xpc3QpLAotCS52NGwyX2ludF9kZXZpY2UgPSB7Ci0JCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkJLm5hbWUgPSBUVlA1MTRYX01PRFVMRV9OQU1FLAotCQkudHlwZSA9IHY0bDJfaW50X3R5cGVfc2xhdmUsCi0JfSwKLQkudHZwNTE0eF9zbGF2ZSA9IHsKLQkJLmlvY3RscyA9IHR2cDUxNHhfaW9jdGxfZGVzYywKLQkJLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfaW9jdGxfZGVzYyksCi0JfSwKKwogfTsKIAogLyoqCi0gKiB0dnA1MTR4X3Byb2JlIC0gZGVjb2RlciBkcml2ZXIgaTJjIHByb2JlIGhhbmRsZXIKKyAqIHR2cDUxNHhfcHJvYmUoKSAtIGRlY29kZXIgZHJpdmVyIGkyYyBwcm9iZSBoYW5kbGVyCiAgKiBAY2xpZW50OiBpMmMgZHJpdmVyIGNsaWVudCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAaWQ6IGkyYyBkcml2ZXIgaWQgdGFibGUKICAqCiAgKiBSZWdpc3RlciBkZWNvZGVyIGFzIGFuIGkyYyBjbGllbnQgZGV2aWNlIGFuZCBWNEwyCiAgKiBkZXZpY2UuCkBAIC0xMzkxLDg4ICsxMjk0LDcxIEBACiB0dnA1MTR4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyOwotCWludCBlcnI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FSU87CiAKKwlpZiAoIWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJdjRsMl9lcnIoY2xpZW50LCAiTm8gcGxhdGZvcm0gZGF0YSEhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKCpkZWNvZGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZWNvZGVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSkgewotCQl2NGxfZXJyKGNsaWVudCwgIk5vIHBsYXRmb3JtIGRhdGEhIVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCisJLyogSW5pdGlhbGl6ZSB0aGUgdHZwNTE0eF9kZWNvZGVyIHdpdGggZGVmYXVsdCBjb25maWd1cmF0aW9uICovCiAJKmRlY29kZXIgPSB0dnA1MTR4X2RldjsKLQlkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UucHJpdiA9IGRlY29kZXI7Ci0JZGVjb2Rlci0+cGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWRlY29kZXItPnY0bDJfaW50X2RldmljZS51LnNsYXZlID0gJmRlY29kZXItPnR2cDUxNHhfc2xhdmU7CisJLyogQ29weSBkZWZhdWx0IHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gKi8KIAltZW1jcHkoZGVjb2Rlci0+dHZwNTE0eF9yZWdzLCB0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHQsCiAJCQlzaXplb2YodHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0KSk7Ci0JLyoKKworCS8qIENvcHkgYm9hcmQgc3BlY2lmaWMgaW5mb3JtYXRpb24gaGVyZSAqLworCWRlY29kZXItPnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qKgogCSAqIEZldGNoIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEsIGFuZCBjb25maWd1cmUgdGhlCiAJICogdHZwNTE0eF9yZWdfbGlzdFtdIGFjY29yZGluZ2x5LiBTaW5jZSB0aGlzIGlzIG9uZQogCSAqIHRpbWUgY29uZmlndXJhdGlvbiwgbm8gbmVlZCB0byBwcmVzZXJ2ZS4KIAkgKi8KIAlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX09VVFBVVF9GT1JNQVRURVIyXS52YWwgfD0KLQkJCShkZWNvZGVyLT5wZGF0YS0+Y2xrX3BvbGFyaXR5IDw8IDEpOworCQkoZGVjb2Rlci0+cGRhdGEtPmNsa19wb2xhcml0eSA8PCAxKTsKIAlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1NZTkNfQ09OVFJPTF0udmFsIHw9Ci0JCQkoKGRlY29kZXItPnBkYXRhLT5oc19wb2xhcml0eSA8PCAyKSB8Ci0JCQkoZGVjb2Rlci0+cGRhdGEtPnZzX3BvbGFyaXR5IDw8IDMpKTsKLQkvKgotCSAqIFNhdmUgdGhlIGlkIGRhdGEsIHJlcXVpcmVkIGZvciBwb3dlciB1cCBzZXF1ZW5jZQotCSAqLwotCWRlY29kZXItPmlkID0gKHN0cnVjdCBpMmNfZGV2aWNlX2lkICopaWQ7Ci0JLyogQXR0YWNoIHRvIE1hc3RlciAqLwotCXN0cmNweShkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UudS5zbGF2ZS0+YXR0YWNoX3RvLAotCQkJZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7Ci0JZGVjb2Rlci0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOworCQkoKGRlY29kZXItPnBkYXRhLT5oc19wb2xhcml0eSA8PCAyKSB8CisJCSAoZGVjb2Rlci0+cGRhdGEtPnZzX3BvbGFyaXR5IDw8IDMpKTsKKwkvKiBTZXQgZGVmYXVsdCBzdGFuZGFyZCB0byBhdXRvICovCisJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19WSURFT19TVERdLnZhbCA9CisJCVZJREVPX1NURF9BVVRPX1NXSVRDSF9CSVQ7CiAKIAkvKiBSZWdpc3RlciB3aXRoIFY0TDIgbGF5ZXIgYXMgc2xhdmUgZGV2aWNlICovCi0JZXJyID0gdjRsMl9pbnRfZGV2aWNlX3JlZ2lzdGVyKCZkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UpOwotCWlmIChlcnIpIHsKLQkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7Ci0JCXY0bF9lcnIoY2xpZW50LAotCQkJIlVuYWJsZSB0byByZWdpc3RlciB0byB2NGwyLiBFcnJbJWRdXG4iLCBlcnIpOwotCQlnb3RvIG91dF9mcmVlOworCXNkID0gJmRlY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0dnA1MTR4X29wcyk7CiAKLQl9IGVsc2UKLQkJdjRsX2luZm8oY2xpZW50LCAiUmVnaXN0ZXJlZCB0byB2NGwyIG1hc3RlciAlcyEhXG4iLAotCQkJCWRlY29kZXItPnBkYXRhLT5tYXN0ZXIpOworCXY0bDJfaW5mbyhzZCwgIiVzIGRlY29kZXIgZHJpdmVyIHJlZ2lzdGVyZWQgISFcbiIsIHNkLT5uYW1lKTsKKwogCXJldHVybiAwOwogCi1vdXRfZnJlZToKLQlrZnJlZShkZWNvZGVyKTsKLQlyZXR1cm4gZXJyOwogfQogCiAvKioKLSAqIHR2cDUxNHhfcmVtb3ZlIC0gZGVjb2RlciBkcml2ZXIgaTJjIHJlbW92ZSBoYW5kbGVyCisgKiB0dnA1MTR4X3JlbW92ZSgpIC0gZGVjb2RlciBkcml2ZXIgaTJjIHJlbW92ZSBoYW5kbGVyCiAgKiBAY2xpZW50OiBpMmMgZHJpdmVyIGNsaWVudCBkZXZpY2Ugc3RydWN0dXJlCiAgKgogICogVW5yZWdpc3RlciBkZWNvZGVyIGFzIGFuIGkyYyBjbGllbnQgZGV2aWNlIGFuZCBWNEwyCiAgKiBkZXZpY2UuIENvbXBsZW1lbnQgb2YgdHZwNTE0eF9wcm9iZSgpLgogICovCi1zdGF0aWMgaW50IF9fZXhpdCB0dnA1MTR4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB0dnA1MTR4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHRvX2RlY29kZXIoc2QpOwogCi0JaWYgKCFjbGllbnQtPmFkYXB0ZXIpCi0JCXJldHVybiAtRU5PREVWOwkvKiBvdXIgY2xpZW50IGlzbid0IGF0dGFjaGVkICovCi0KLQl2NGwyX2ludF9kZXZpY2VfdW5yZWdpc3RlcigmZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CiAJa2ZyZWUoZGVjb2Rlcik7CiAJcmV0dXJuIDA7CiB9Ci0vKgotICogVFZQNTE0NiBJbml0L1Bvd2VyIG9uIFNlcXVlbmNlCi0gKi8KKy8qIFRWUDUxNDYgSW5pdC9Qb3dlciBvbiBTZXF1ZW5jZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTQ2X2luaXRfcmVnX3NlcVtdID0gewogCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMSwgMHgwMn0sCiAJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MyLCAweDAwfSwKQEAgLTE0ODUsMTQgKzEzNzEsMTAgQEAKIAl7VE9LX1dSSVRFLCBSRUdfVkJVU19EQVRBX0FDQ0VTU19OT19WQlVTX0FERFJfSU5DUiwgMHgwMH0sCiAJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAxfSwKIAl7VE9LX1dSSVRFLCBSRUdfT1BFUkFUSU9OX01PREUsIDB4MDB9LAorCXtUT0tfVEVSTSwgMCwgMH0sCiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA1MTR4X2luaXRfc2VxIHR2cDUxNDZfaW5pdCA9IHsKLQkubm9fcmVncyA9IEFSUkFZX1NJWkUodHZwNTE0Nl9pbml0X3JlZ19zZXEpLAotCS5pbml0X3JlZ19zZXEgPSB0dnA1MTQ2X2luaXRfcmVnX3NlcSwKLX07Ci0vKgotICogVFZQNTE0NyBJbml0L1Bvd2VyIG9uIFNlcXVlbmNlCi0gKi8KKworLyogVFZQNTE0NyBJbml0L1Bvd2VyIG9uIFNlcXVlbmNlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNDdfaW5pdF9yZWdfc2VxW10gPQl7CiAJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MxLCAweDAyfSwKIAl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzIsIDB4MDB9LApAQCAtMTUxMiw3MSArMTM5NCw1MSBAQAogCXtUT0tfV1JJVEUsIFJFR19WQlVTX0RBVEFfQUNDRVNTX05PX1ZCVVNfQUREUl9JTkNSLCAweDAwfSwKIAl7VE9LX1dSSVRFLCBSRUdfT1BFUkFUSU9OX01PREUsIDB4MDF9LAogCXtUT0tfV1JJVEUsIFJFR19PUEVSQVRJT05fTU9ERSwgMHgwMH0sCisJe1RPS19URVJNLCAwLCAwfSwKIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHR2cDUxNHhfaW5pdF9zZXEgdHZwNTE0N19pbml0ID0gewotCS5ub19yZWdzID0gQVJSQVlfU0laRSh0dnA1MTQ3X2luaXRfcmVnX3NlcSksCi0JLmluaXRfcmVnX3NlcSA9IHR2cDUxNDdfaW5pdF9yZWdfc2VxLAotfTsKLS8qCi0gKiBUVlA1MTQ2TTIvVFZQNTE0N00xIEluaXQvUG93ZXIgb24gU2VxdWVuY2UKLSAqLworCisvKiBUVlA1MTQ2TTIvVFZQNTE0N00xIEluaXQvUG93ZXIgb24gU2VxdWVuY2UgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eG1faW5pdF9yZWdfc2VxW10gPSB7CiAJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAxfSwKIAl7VE9LX1dSSVRFLCBSRUdfT1BFUkFUSU9OX01PREUsIDB4MDB9LAorCXtUT0tfVEVSTSwgMCwgMH0sCiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA1MTR4X2luaXRfc2VxIHR2cDUxNHhtX2luaXQgPSB7Ci0JLm5vX3JlZ3MgPSBBUlJBWV9TSVpFKHR2cDUxNHhtX2luaXRfcmVnX3NlcSksCi0JLmluaXRfcmVnX3NlcSA9IHR2cDUxNHhtX2luaXRfcmVnX3NlcSwKLX07Ci0vKgorCisvKioKICAqIEkyQyBEZXZpY2UgVGFibGUgLQogICoKICAqIG5hbWUgLSBOYW1lIG9mIHRoZSBhY3R1YWwgZGV2aWNlL2NoaXAuCiAgKiBkcml2ZXJfZGF0YSAtIERyaXZlciBkYXRhCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0dnA1MTR4X2lkW10gPSB7Ci0JeyJ0dnA1MTQ2IiwgKHVuc2lnbmVkIGxvbmcpJnR2cDUxNDZfaW5pdH0sCi0JeyJ0dnA1MTQ2bTIiLCAodW5zaWduZWQgbG9uZykmdHZwNTE0eG1faW5pdH0sCi0JeyJ0dnA1MTQ3IiwgKHVuc2lnbmVkIGxvbmcpJnR2cDUxNDdfaW5pdH0sCi0JeyJ0dnA1MTQ3bTEiLCAodW5zaWduZWQgbG9uZykmdHZwNTE0eG1faW5pdH0sCisJeyJ0dnA1MTQ2IiwgKHVuc2lnbmVkIGxvbmcpdHZwNTE0Nl9pbml0X3JlZ19zZXF9LAorCXsidHZwNTE0Nm0yIiwgKHVuc2lnbmVkIGxvbmcpdHZwNTE0eG1faW5pdF9yZWdfc2VxfSwKKwl7InR2cDUxNDciLCAodW5zaWduZWQgbG9uZyl0dnA1MTQ3X2luaXRfcmVnX3NlcX0sCisJeyJ0dnA1MTQ3bTEiLCAodW5zaWduZWQgbG9uZyl0dnA1MTR4bV9pbml0X3JlZ19zZXF9LAogCXt9LAogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR2cDUxNHhfaWQpOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHZwNTE0eF9pMmNfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHR2cDUxNHhfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCSAgIC5uYW1lID0gVFZQNTE0WF9NT0RVTEVfTkFNRSwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAgIH0sCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IFRWUDUxNFhfTU9EVUxFX05BTUUsCisJfSwKIAkucHJvYmUgPSB0dnA1MTR4X3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcCh0dnA1MTR4X3JlbW92ZSksCisJLnJlbW92ZSA9IHR2cDUxNHhfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHR2cDUxNHhfaWQsCiB9OwogCi0vKioKLSAqIHR2cDUxNHhfaW5pdAotICoKLSAqIE1vZHVsZSBpbml0IGZ1bmN0aW9uCi0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHR2cDUxNHhfaW5pdCh2b2lkKQogewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdHZwNTE0eF9pMmNfZHJpdmVyKTsKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnR2cDUxNHhfZHJpdmVyKTsKIH0KIAotLyoqCi0gKiB0dnA1MTR4X2NsZWFudXAKLSAqCi0gKiBNb2R1bGUgZXhpdCBmdW5jdGlvbgotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHZwNTE0eF9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdHZwNTE0eF9leGl0KHZvaWQpCiB7Ci0JaTJjX2RlbF9kcml2ZXIoJnR2cDUxNHhfaTJjX2RyaXZlcik7CisJaTJjX2RlbF9kcml2ZXIoJnR2cDUxNHhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodHZwNTE0eF9pbml0KTsKLW1vZHVsZV9leGl0KHR2cDUxNHhfY2xlYW51cCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlRWUDUxNFggbGludXggZGVjb2RlciBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9leGl0KHR2cDUxNHhfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHhfcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4X3JlZ3MuaAppbmRleCAzNTE2MjBhLi4xOGYyOWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHhfcmVncy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eF9yZWdzLmgKQEAgLTI4NCwxNCArMjg0LDQgQEAKIAl1MzIgdmFsOwogfTsKIAotLyoqCi0gKiBzdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSAtIFN0cnVjdHVyZSBmb3IgVFZQNTE0Ni80Ny80Nk0yLzQ3TTEgcG93ZXIgdXAKLSAqCQlTZXF1ZW5jZS4KLSAqIEAgbm9fcmVncyAtIE51bWJlciBvZiByZWdpc3RlcnMgdG8gd3JpdGUgZm9yIHBvd2VyIHVwIHNlcXVlbmNlLgotICogQCBpbml0X3JlZ19zZXEgLSBBcnJheSBvZiByZWdpc3RlcnMgYW5kIHJlc3BlY3RpdmUgdmFsdWUgdG8gd3JpdGUuCi0gKi8KLXN0cnVjdCB0dnA1MTR4X2luaXRfc2VxIHsKLQl1bnNpZ25lZCBpbnQgbm9fcmVnczsKLQljb25zdCBzdHJ1Y3QgdHZwNTE0eF9yZWcgKmluaXRfcmVnX3NlcTsKLX07CiAjZW5kaWYJCQkJLyogaWZuZGVmIF9UVlA1MTRYX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKaW5kZXggYWE1MDY1ZS4uMjY5YWIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL3R3OTkxMC5oPgogCkBAIC0yMjMsOSArMjIzLDggQEAKIH07CiAKIHN0cnVjdCB0dzk5MTBfcHJpdiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgICAgICAgIHN1YmRldjsKIAlzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8gICAgICAgKmluZm87Ci0Jc3RydWN0IGkyY19jbGllbnQgICAgICAgICAgICAgICpjbGllbnQ7Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAgICAgICBpY2Q7CiAJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKIH07CiAKQEAgLTM1Niw2ICszNTUsMTIgQEAKIC8qCiAgKiBnZW5lcmFsIGZ1bmN0aW9uCiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdHc5OTEwX3ByaXYgKnRvX3R3OTkxMChjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBjb250YWluZXJfb2YoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIHN0cnVjdCB0dzk5MTBfcHJpdiwKKwkJCSAgICBzdWJkZXYpOworfQorCiBzdGF0aWMgaW50IHR3OTkxMF9zZXRfc2NhbGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlKQogewpAQCAtNTA5LDQ0ICs1MTQsMjAgQEAKIC8qCiAgKiBzb2NfY2FtZXJhX29wcyBmdW5jdGlvbgogICovCi1zdGF0aWMgaW50IHR3OTkxMF9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCB0dzk5MTBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOwogCi0JaWYgKHByaXYtPmluZm8tPmxpbmsucG93ZXIpIHsKLQkJcmV0ID0gcHJpdi0+aW5mby0+bGluay5wb3dlcigmcHJpdi0+Y2xpZW50LT5kZXYsIDEpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKHByaXYtPmluZm8tPmxpbmsucmVzZXQpCi0JCXJldCA9IHByaXYtPmluZm8tPmxpbmsucmVzZXQoJnByaXYtPmNsaWVudC0+ZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdHc5OTEwX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOwotCWludCByZXQgPSAwOwotCi0JaWYgKHByaXYtPmluZm8tPmxpbmsucG93ZXIpCi0JCXJldCA9IHByaXYtPmluZm8tPmxpbmsucG93ZXIoJnByaXYtPmNsaWVudC0+ZGV2LCAwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdHc5OTEwX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOworCWlmICghZW5hYmxlKQorCQlyZXR1cm4gMDsKIAogCWlmICghcHJpdi0+c2NhbGUpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJub3JtIHNlbGVjdCBlcnJvclxuIik7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibm9ybSBzZWxlY3QgZXJyb3JcbiIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgJWR4JWRcbiIsCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlcyAlZHglZFxuIiwKIAkJIHByaXYtPnNjYWxlLT5uYW1lLAogCQkgcHJpdi0+c2NhbGUtPndpZHRoLAogCQkgcHJpdi0+c2NhbGUtPmhlaWdodCk7CkBAIC01NTQsMTEgKzUzNSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHc5OTEwX3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB0dzk5MTBfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtNTY3LDggKzU0Myw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHR3OTkxMF9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHByaXYtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9NQVNURVIgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKIAkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IHByaXYtPmluZm8tPmJ1c3dpZHRoOwpAQCAtNTc2LDIxICs1NTMsMTEgQEAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdHc5OTEwX2dldF9jaGlwX2lkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQotewotCWlkLT5pZGVudCA9IFY0TDJfSURFTlRfVFc5OTEwOwotCWlkLT5yZXZpc2lvbiA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0dzk5MTBfc2V0X3N0ZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgdjRsMl9zdGRfaWQgKmEpCitzdGF0aWMgaW50IHR3OTkxMF9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBub3JtKQogewogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKCphICYgKFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwpKQorCWlmIChub3JtICYgKFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwpKQogCQlyZXQgPSAwOwogCiAJcmV0dXJuIHJldDsKQEAgLTYwNiwxNyArNTczLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgaW50IHR3OTkxMF9nZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCitzdGF0aWMgaW50IHR3OTkxMF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOworCWlkLT5pZGVudCA9IFY0TDJfSURFTlRfVFc5OTEwOworCWlkLT5yZXZpc2lvbiA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgdHc5OTEwX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCWludCByZXQ7CiAKIAlpZiAocmVnLT5yZWcgPiAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIHJlZy0+cmVnKTsKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWctPnJlZyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTYyOCwyMyArNjA0LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHc5OTEwX3NldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3N0YXRpYyBpbnQgdHc5OTEwX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAogCWlmIChyZWctPnJlZyA+IDB4ZmYgfHwKIAkgICAgcmVnLT52YWwgPiAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgcmVnLT5yZWcsIHJlZy0+dmFsKTsKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZy0+cmVnLCByZWctPnZhbCk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCB0dzk5MTBfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCB0dzk5MTBfc19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7Ci0Jc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOworCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmYS0+YzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCAgICAgICAgICAgICAgICAgcmV0ICA9IC1FSU5WQUw7CiAJdTggICAgICAgICAgICAgICAgICB2YWw7CiAKQEAgLTY1OCw4ICs2MzYsOCBAQAogCS8qCiAJICogcmVzZXQgaGFyZHdhcmUKIAkgKi8KLQl0dzk5MTBfcmVzZXQocHJpdi0+Y2xpZW50KTsKLQlyZXQgPSB0dzk5MTBfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCB0dzk5MTBfZGVmYXVsdF9yZWdzKTsKKwl0dzk5MTBfcmVzZXQoY2xpZW50KTsKKwlyZXQgPSB0dzk5MTBfd3JpdGVfYXJyYXkoY2xpZW50LCB0dzk5MTBfZGVmYXVsdF9yZWdzKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byB0dzk5MTBfc2V0X2ZtdF9lcnJvcjsKIApAQCAtNjcwLDcgKzY0OCw3IEBACiAJaWYgKFNPQ0FNX0RBVEFXSURUSF8xNiA9PSBwcml2LT5pbmZvLT5idXN3aWR0aCkKIAkJdmFsID0gTEVOOwogCi0JcmV0ID0gdHc5OTEwX21hc2tfc2V0KHByaXYtPmNsaWVudCwgT1BGT1JNLCBMRU4sIHZhbCk7CisJcmV0ID0gdHc5OTEwX21hc2tfc2V0KGNsaWVudCwgT1BGT1JNLCBMRU4sIHZhbCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CiAKQEAgLTY5OCw1MiArNjc2LDEzOSBAQAogCQl2YWwgPSAwOwogCX0KIAotCXJldCA9IHR3OTkxMF9tYXNrX3NldChwcml2LT5jbGllbnQsIFZCSUNOVEwsIFJUU0VMX01BU0ssIHZhbCk7CisJcmV0ID0gdHc5OTEwX21hc2tfc2V0KGNsaWVudCwgVkJJQ05UTCwgUlRTRUxfTUFTSywgdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byB0dzk5MTBfc2V0X2ZtdF9lcnJvcjsKIAogCS8qCiAJICogc2V0IHNjYWxlCiAJICovCi0JcmV0ID0gdHc5OTEwX3NldF9zY2FsZShwcml2LT5jbGllbnQsIHByaXYtPnNjYWxlKTsKKwlyZXQgPSB0dzk5MTBfc2V0X3NjYWxlKGNsaWVudCwgcHJpdi0+c2NhbGUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIHR3OTkxMF9zZXRfZm10X2Vycm9yOwogCiAJLyoKIAkgKiBzZXQgY3JvcHBpbmcKIAkgKi8KLQlyZXQgPSB0dzk5MTBfc2V0X2Nyb3BwaW5nKHByaXYtPmNsaWVudCwgJnR3OTkxMF9jcm9wcGluZ19jdHJsKTsKKwlyZXQgPSB0dzk5MTBfc2V0X2Nyb3BwaW5nKGNsaWVudCwgJnR3OTkxMF9jcm9wcGluZ19jdHJsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byB0dzk5MTBfc2V0X2ZtdF9lcnJvcjsKIAogCS8qCiAJICogc2V0IGhzeW5jCiAJICovCi0JcmV0ID0gdHc5OTEwX3NldF9oc3luYyhwcml2LT5jbGllbnQsICZ0dzk5MTBfaHN5bmNfY3RybCk7CisJcmV0ID0gdHc5OTEwX3NldF9oc3luYyhjbGllbnQsICZ0dzk5MTBfaHN5bmNfY3RybCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CiAKKwlyZWN0LT53aWR0aCA9IHByaXYtPnNjYWxlLT53aWR0aDsKKwlyZWN0LT5oZWlnaHQgPSBwcml2LT5zY2FsZS0+aGVpZ2h0OworCXJlY3QtPmxlZnQgPSAwOworCXJlY3QtPnRvcCA9IDA7CisKIAlyZXR1cm4gcmV0OwogCiB0dzk5MTBfc2V0X2ZtdF9lcnJvcjoKIAotCXR3OTkxMF9yZXNldChwcml2LT5jbGllbnQpOworCXR3OTkxMF9yZXNldChjbGllbnQpOwogCXByaXYtPnNjYWxlID0gTlVMTDsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHc5OTEwX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgdHc5OTEwX2dfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSB0b190dzk5MTAoY2xpZW50KTsKKworCWlmICghcHJpdi0+c2NhbGUpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHY0bDJfY3JvcCBjcm9wID0geworCQkJLmMgPSB7CisJCQkJLmxlZnQJPSAwLAorCQkJCS50b3AJPSAwLAorCQkJCS53aWR0aAk9IDY0MCwKKwkJCQkuaGVpZ2h0CT0gNDgwLAorCQkJfSwKKwkJfTsKKwkJcmV0ID0gdHc5OTEwX3NfY3JvcChzZCwgJmNyb3ApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJYS0+Yy5sZWZ0CT0gMDsKKwlhLT5jLnRvcAk9IDA7CisJYS0+Yy53aWR0aAk9IHByaXYtPnNjYWxlLT53aWR0aDsKKwlhLT5jLmhlaWdodAk9IHByaXYtPnNjYWxlLT5oZWlnaHQ7CisJYS0+dHlwZQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzk5MTBfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCWEtPmJvdW5kcy5sZWZ0CQkJPSAwOworCWEtPmJvdW5kcy50b3AJCQk9IDA7CisJYS0+Ym91bmRzLndpZHRoCQkJPSA3Njg7CisJYS0+Ym91bmRzLmhlaWdodAkJPSA1NzY7CisJYS0+ZGVmcmVjdC5sZWZ0CQkJPSAwOworCWEtPmRlZnJlY3QudG9wCQkJPSAwOworCWEtPmRlZnJlY3Qud2lkdGgJCT0gNjQwOworCWEtPmRlZnJlY3QuaGVpZ2h0CQk9IDQ4MDsKKwlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CisJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7Ci0Jc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gewotCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAotCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCi0JCS53aWR0aAk9IHBpeC0+d2lkdGgsCi0JCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKworCWlmICghcHJpdi0+c2NhbGUpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHY0bDJfY3JvcCBjcm9wID0geworCQkJLmMgPSB7CisJCQkJLmxlZnQJPSAwLAorCQkJCS50b3AJPSAwLAorCQkJCS53aWR0aAk9IDY0MCwKKwkJCQkuaGVpZ2h0CT0gNDgwLAorCQkJfSwKKwkJfTsKKwkJcmV0ID0gdHc5OTEwX3NfY3JvcChzZCwgJmNyb3ApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZi0+dHlwZQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcGl4LT53aWR0aAkJPSBwcml2LT5zY2FsZS0+d2lkdGg7CisJcGl4LT5oZWlnaHQJCT0gcHJpdi0+c2NhbGUtPmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1ZZVVk7CisJcGl4LT5jb2xvcnNwYWNlCQk9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJcGl4LT5maWVsZAkJPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzk5MTBfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSB0b190dzk5MTAoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwkvKiBTZWUgdHc5OTEwX3NfY3JvcCgpIC0gbm8gcHJvcGVyIGNyb3BwaW5nIHN1cHBvcnQgKi8KKwlzdHJ1Y3QgdjRsMl9jcm9wIGEgPSB7CisJCS5jID0geworCQkJLmxlZnQJPSAwLAorCQkJLnRvcAk9IDAsCisJCQkud2lkdGgJPSBwaXgtPndpZHRoLAorCQkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCQl9LAogCX07Ci0JaW50IGk7CisJaW50IGksIHJldDsKIAogCS8qCiAJICogY2hlY2sgY29sb3IgZm9ybWF0CkBAIC03NTUsMTkgKzgyMCwyNSBAQAogCWlmIChpID09IEFSUkFZX1NJWkUodHc5OTEwX2NvbG9yX2ZtdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHR3OTkxMF9zZXRfY3JvcChpY2QsICZyZWN0KTsKKwlyZXQgPSB0dzk5MTBfc19jcm9wKHNkLCAmYSk7CisJaWYgKCFyZXQpIHsKKwkJcGl4LT53aWR0aCA9IHByaXYtPnNjYWxlLT53aWR0aDsKKwkJcGl4LT5oZWlnaHQgPSBwcml2LT5zY2FsZS0+aGVpZ2h0OworCX0KKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IHR3OTkxMF90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCWNvbnN0IHN0cnVjdCB0dzk5MTBfc2NhbGVfY3RybCAqc2NhbGU7CiAKIAlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gcGl4LT5maWVsZCkgewogCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwogCX0gZWxzZSBpZiAoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEICE9IHBpeC0+ZmllbGQpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJGaWVsZCB0eXBlIGludmFsaWQuXG4iKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGaWVsZCB0eXBlIGludmFsaWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03ODQsMTEgKzg1NSwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3N0YXRpYyBpbnQgdHc5OTEwX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CiAJczMyIHZhbDsKLQlpbnQgcmV0OwogCiAJLyoKIAkgKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLgpAQCAtODAzLDcgKzg3NCw3IEBACiAJICovCiAJaWYgKFNPQ0FNX0RBVEFXSURUSF8xNiAhPSBwcml2LT5pbmZvLT5idXN3aWR0aCAmJgogCSAgICBTT0NBTV9EQVRBV0lEVEhfOCAgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGgpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJidXMgd2lkdGggZXJyb3JcbiIpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1cyB3aWR0aCBlcnJvclxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODEzLDU0ICs4ODQsNTQgQEAKIAkvKgogCSAqIGNoZWNrIGFuZCBzaG93IFByb2R1Y3QgSUQKIAkgKi8KLQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBJRCk7CisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSUQpOworCiAJaWYgKDB4MEIgIT0gR0VUX0lEKHZhbCkgfHwKIAkgICAgMHgwMCAhPSBHRVRfUmVWKHZhbCkpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJIlByb2R1Y3QgSUQgZXJyb3IgJXg6JXhcbiIsIEdFVF9JRCh2YWwpLCBHRVRfUmVWKHZhbCkpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkZXZfaW5mbygmaWNkLT5kZXYsCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LAogCQkgInR3OTkxMCBQcm9kdWN0IElEICUweDolMHhcbiIsIEdFVF9JRCh2YWwpLCBHRVRfUmVWKHZhbCkpOwogCi0JcmV0ID0gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJaWNkLT52ZGV2LT50dm5vcm1zICAgICAgPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMOwogCWljZC0+dmRldi0+Y3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQzsKIAotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHR3OTkxMF92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCi17Ci0Jc29jX2NhbWVyYV92aWRlb19zdG9wKGljZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgdHc5OTEwX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJCT0gdHc5OTEwX3ZpZGVvX3Byb2JlLAotCS5yZW1vdmUJCQk9IHR3OTkxMF92aWRlb19yZW1vdmUsCi0JLmluaXQJCQk9IHR3OTkxMF9pbml0LAotCS5yZWxlYXNlCQk9IHR3OTkxMF9yZWxlYXNlLAotCS5zdGFydF9jYXB0dXJlCQk9IHR3OTkxMF9zdGFydF9jYXB0dXJlLAotCS5zdG9wX2NhcHR1cmUJCT0gdHc5OTEwX3N0b3BfY2FwdHVyZSwKLQkuc2V0X2Nyb3AJCT0gdHc5OTEwX3NldF9jcm9wLAotCS5zZXRfZm10CQk9IHR3OTkxMF9zZXRfZm10LAotCS50cnlfZm10CQk9IHR3OTkxMF90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IHR3OTkxMF9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSB0dzk5MTBfcXVlcnlfYnVzX3BhcmFtLAotCS5nZXRfY2hpcF9pZAkJPSB0dzk5MTBfZ2V0X2NoaXBfaWQsCi0JLnNldF9zdGQJCT0gdHc5OTEwX3NldF9zdGQsCiAJLmVudW1faW5wdXQJCT0gdHc5OTEwX2VudW1faW5wdXQsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHR3OTkxMF9zdWJkZXZfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudAk9IHR3OTkxMF9nX2NoaXBfaWRlbnQsCisJLnNfc3RkCQk9IHR3OTkxMF9zX3N0ZCwKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JLmdldF9yZWdpc3RlcgkJPSB0dzk5MTBfZ2V0X3JlZ2lzdGVyLAotCS5zZXRfcmVnaXN0ZXIJCT0gdHc5OTEwX3NldF9yZWdpc3RlciwKKwkuZ19yZWdpc3Rlcgk9IHR3OTkxMF9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gdHc5OTEwX3NfcmVnaXN0ZXIsCiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHR3OTkxMF9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX3N0cmVhbQk9IHR3OTkxMF9zX3N0cmVhbSwKKwkuZ19mbXQJCT0gdHc5OTEwX2dfZm10LAorCS5zX2ZtdAkJPSB0dzk5MTBfc19mbXQsCisJLnRyeV9mbXQJPSB0dzk5MTBfdHJ5X2ZtdCwKKwkuY3JvcGNhcAk9IHR3OTkxMF9jcm9wY2FwLAorCS5nX2Nyb3AJCT0gdHc5OTEwX2dfY3JvcCwKKwkuc19jcm9wCQk9IHR3OTkxMF9zX2Nyb3AsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0dzk5MTBfc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZ0dzk5MTBfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZ0dzk5MTBfc3ViZGV2X3ZpZGVvX29wcywKK307CisKIC8qCiAgKiBpMmNfZHJpdmVyIGZ1bmN0aW9uCiAgKi8KQEAgLTg3MSwxOCArOTQyLDI0IEBACiB7CiAJc3RydWN0IHR3OTkxMF9wcml2ICAgICAgICAgICAgICpwcml2OwogCXN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbyAgICAgICAqaW5mbzsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgICAgICAgKmljZDsKLQljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlOwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgcmV0OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAgICAgICAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgICAgICAgICAgICAgKmFkYXB0ZXIgPQorCQl0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgICAgICAgICAqaWNsOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwogCi0JaWYgKCFjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKQorCWlmICghaWNkKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiVFc5OTEwOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwlpZiAoIWljbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbmZvID0gY29udGFpbmVyX29mKGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEsCi0JCQkgICAgc3RydWN0IHR3OTkxMF92aWRlb19pbmZvLCBsaW5rKTsKKwlpbmZvID0gY29udGFpbmVyX29mKGljbCwgc3RydWN0IHR3OTkxMF92aWRlb19pbmZvLCBsaW5rKTsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkodG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KSwKLQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkiSTJDLUFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0ICIKIAkJCSJJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEFcbiIpOwpAQCAtODk0LDQwICs5NzEsMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2LT5pbmZvICAgPSBpbmZvOwotCXByaXYtPmNsaWVudCA9IGNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwcml2KTsKIAotCWljZCAgICAgICAgICA9ICZwcml2LT5pY2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgY2xpZW50LCAmdHc5OTEwX3N1YmRldl9vcHMpOworCiAJaWNkLT5vcHMgICAgID0gJnR3OTkxMF9vcHM7Ci0JaWNkLT5jb250cm9sID0gJmNsaWVudC0+ZGV2OwogCWljZC0+aWZhY2UgICA9IGluZm8tPmxpbmsuYnVzX2lkOwogCi0JLyoKLQkgKiBzZXQgd2lkdGggYW5kIGhlaWdodAotCSAqLwotCWljZC0+d2lkdGhfbWF4ICA9IHR3OTkxMF9udHNjX3NjYWxlc1swXS53aWR0aDsgLyogc2V0IGRlZmF1bHQgKi8KLQlpY2QtPndpZHRoX21pbiAgPSB0dzk5MTBfbnRzY19zY2FsZXNbMF0ud2lkdGg7Ci0JaWNkLT5oZWlnaHRfbWF4ID0gdHc5OTEwX250c2Nfc2NhbGVzWzBdLmhlaWdodDsKLQlpY2QtPmhlaWdodF9taW4gPSB0dzk5MTBfbnRzY19zY2FsZXNbMF0uaGVpZ2h0OwotCi0Jc2NhbGUgPSB0dzk5MTBfbnRzY19zY2FsZXM7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHc5OTEwX250c2Nfc2NhbGVzKTsgaSsrKSB7Ci0JCWljZC0+d2lkdGhfbWF4ICA9IG1heChzY2FsZVtpXS53aWR0aCwgIGljZC0+d2lkdGhfbWF4KTsKLQkJaWNkLT53aWR0aF9taW4gID0gbWluKHNjYWxlW2ldLndpZHRoLCAgaWNkLT53aWR0aF9taW4pOwotCQlpY2QtPmhlaWdodF9tYXggPSBtYXgoc2NhbGVbaV0uaGVpZ2h0LCBpY2QtPmhlaWdodF9tYXgpOwotCQlpY2QtPmhlaWdodF9taW4gPSBtaW4oc2NhbGVbaV0uaGVpZ2h0LCBpY2QtPmhlaWdodF9taW4pOwotCX0KLQlzY2FsZSA9IHR3OTkxMF9wYWxfc2NhbGVzOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR3OTkxMF9wYWxfc2NhbGVzKTsgaSsrKSB7Ci0JCWljZC0+d2lkdGhfbWF4ICA9IG1heChzY2FsZVtpXS53aWR0aCwgIGljZC0+d2lkdGhfbWF4KTsKLQkJaWNkLT53aWR0aF9taW4gID0gbWluKHNjYWxlW2ldLndpZHRoLCAgaWNkLT53aWR0aF9taW4pOwotCQlpY2QtPmhlaWdodF9tYXggPSBtYXgoc2NhbGVbaV0uaGVpZ2h0LCBpY2QtPmhlaWdodF9tYXgpOwotCQlpY2QtPmhlaWdodF9taW4gPSBtaW4oc2NhbGVbaV0uaGVpZ2h0LCBpY2QtPmhlaWdodF9taW4pOwotCX0KLQotCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7Ci0KKwlyZXQgPSB0dzk5MTBfdmlkZW9fcHJvYmUoaWNkLCBjbGllbnQpOwogCWlmIChyZXQpIHsKKwkJaWNkLT5vcHMgPSBOVUxMOwogCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAkJa2ZyZWUocHJpdik7CiAJfQpAQCAtOTM3LDkgKzk4OSwxMCBAQAogCiBzdGF0aWMgaW50IHR3OTkxMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSB0b190dzk5MTAoY2xpZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZwcml2LT5pY2QpOworCWljZC0+b3BzID0gTlVMTDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZShwcml2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwppbmRleCAxZmU1YmVmLi5mOTdmZDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCkBAIC0yNDYsOSArMjQ2LDkgQEAKIAlzd2l0Y2ggKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5Db2RlYykgewogCWNhc2UgQ09ERUNfU0FBNzExMzoKIAljYXNlIENPREVDX1NBQTcxMTE6Ci0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ1c2J2aXNpb24tPnY0bDJfZGV2LAorCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZ1c2J2aXNpb24tPnY0bDJfZGV2LAogCQkJCSZ1c2J2aXNpb24tPmkyY19hZGFwLCAic2FhNzExNSIsCi0JCQkJInNhYTcxMTVfYXV0byIsIHNhYTcxMXhfYWRkcnMpOworCQkJCSJzYWE3MTE1X2F1dG8iLCAwLCBzYWE3MTF4X2FkZHJzKTsKIAkJYnJlYWs7CiAJfQogCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVHVuZXIgPT0gMSkgewpAQCAtMjU2LDE2ICsyNTYsMTYgQEAKIAkJZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHR5cGU7CiAJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAKLQkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmdXNidmlzaW9uLT52NGwyX2RldiwKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZ1c2J2aXNpb24tPnY0bDJfZGV2LAogCQkJCSZ1c2J2aXNpb24tPmkyY19hZGFwLCAidHVuZXIiLAotCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCQkJInR1bmVyIiwgMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKIAkJLyogZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgZm91bmQgYSBkZW1vZCBvciBub3QsIHNlbGVjdAogCQkgICB0aGUgdHVuZXIgdHlwZS4gKi8KIAkJdHlwZSA9IHNkID8gQUREUlNfVFZfV0lUSF9ERU1PRCA6IEFERFJTX1RWOwogCi0JCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+djRsMl9kZXYsCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmdXNidmlzaW9uLT52NGwyX2RldiwKIAkJCQkmdXNidmlzaW9uLT5pMmNfYWRhcCwgInR1bmVyIiwKLQkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyh0eXBlKSk7CisJCQkJInR1bmVyIiwgMCwgdjRsMl9pMmNfdHVuZXJfYWRkcnModHlwZSkpOwogCiAJCWlmICh1c2J2aXNpb24tPnR1bmVyX3R5cGUgIT0gLTEpIHsKIAkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfUkFESU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IDViNzU3ZjMuLmY5NjBlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC0xMjQsMTMgKzEyNCwxNCBAQAogCWludCByZXQ7CiAKIAlzaXplID0gc3RyZWFtLT5kZXYtPnV2Y192ZXJzaW9uID49IDB4MDExMCA/IDM0IDogMjY7CisJaWYgKChzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1BST0JFX0RFRikgJiYKKwkJCXF1ZXJ5ID09IFVWQ19HRVRfREVGKQorCQlyZXR1cm4gLUVJTzsKKwogCWRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKChzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1BST0JFX0RFRikgJiYgcXVlcnkgPT0gVVZDX0dFVF9ERUYpCi0JCXJldHVybiAtRUlPOwotCiAJcmV0ID0gX191dmNfcXVlcnlfY3RybChzdHJlYW0tPmRldiwgcXVlcnksIDAsIHN0cmVhbS0+aW50Zm51bSwKIAkJcHJvYmUgPyBVVkNfVlNfUFJPQkVfQ09OVFJPTCA6IFVWQ19WU19DT01NSVRfQ09OVFJPTCwgZGF0YSwKIAkJc2l6ZSwgVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmluZGV4IDc2MWZiZDYuLjBjMjEwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKQEAgLTU2NCwxMCArNTY0LDkgQEAKIAkJYnJlYWs7CiAJfQogCWNoYW4tPm5vcm0gPSAwOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19TVEQsICZzaWQpOwotCWlmIChlcnIgPCAwKQotCQlkcHJpbnRrKCJWSURJT0NHQ0hBTiAvIFZJRElPQ19HX1NURDogJWxkXG4iLCBlcnIpOwotCWlmIChlcnIgPT0gMCkgeworCS8qIE5vdGU6IEdfU1REIG1pZ2h0IG5vdCBiZSBwcmVzZW50IGZvciByYWRpbyByZWNlaXZlcnMsCisJICogc28gd2Ugc2hvdWxkIGlnbm9yZSBhbnkgZXJyb3JzLiAqLworCWlmIChkcnYoZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKSA9PSAwKSB7CiAJCWlmIChzaWQgJiBWNEwyX1NURF9QQUwpCiAJCQljaGFuLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAJCWlmIChzaWQgJiBWNEwyX1NURF9OVFNDKQpAQCAtNzc2LDEwICs3NzUsOSBAQAogCQkJdHVuLT5mbGFncyB8PSBWSURFT19UVU5FUl9TRUNBTTsKIAl9CiAKLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKTsKLQlpZiAoZXJyIDwgMCkKLQkJZHByaW50aygiVklESU9DR1RVTkVSIC8gVklESU9DX0dfU1REOiAlbGRcbiIsIGVycik7Ci0JaWYgKGVyciA9PSAwKSB7CisJLyogTm90ZTogR19TVEQgbWlnaHQgbm90IGJlIHByZXNlbnQgZm9yIHJhZGlvIHJlY2VpdmVycywKKwkgKiBzbyB3ZSBzaG91bGQgaWdub3JlIGFueSBlcnJvcnMuICovCisJaWYgKGRydihmaWxlLCBWSURJT0NfR19TVEQsICZzaWQpID09IDApIHsKIAkJaWYgKHNpZCAmIFY0TDJfU1REX1BBTCkKIAkJCXR1bi0+bW9kZSA9IFZJREVPX01PREVfUEFMOwogCQlpZiAoc2lkICYgVjRMMl9TVERfTlRTQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCAzYTBjNjQ5Li5mNWE5M2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC04MTQsMTM5ICs4MTQsNiBAQAogCiAKIC8qIExvYWQgYW4gaTJjIHN1Yi1kZXZpY2UuICovCi1zdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKLQkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsIHU4IGFkZHIpCi17Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IE5VTEw7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQotCUJVR19PTighdjRsMl9kZXYpOwotCi0JaWYgKG1vZHVsZV9uYW1lKQotCQlyZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZSk7Ci0KLQkvKiBTZXR1cCB0aGUgaTJjIGJvYXJkIGluZm8gd2l0aCB0aGUgZGV2aWNlIHR5cGUgYW5kCi0JICAgdGhlIGRldmljZSBhZGRyZXNzLiAqLwotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKLQlzdHJsY3B5KGluZm8udHlwZSwgY2xpZW50X3R5cGUsIHNpemVvZihpbmZvLnR5cGUpKTsKLQlpbmZvLmFkZHIgPSBhZGRyOwotCi0JLyogQ3JlYXRlIHRoZSBpMmMgY2xpZW50ICovCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCS8qIE5vdGU6IGl0IGlzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmUgdGhhdAotCSAgIGMtPmRyaXZlciBpcyBOVUxMIGlmIHRoZSBkcml2ZXIgaXMgc3RpbGwgYmVpbmcgbG9hZGVkLgotCSAgIFdlIG5lZWQgYmV0dGVyIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNvIHRoYXQgd2UKLQkgICBjYW4gZWFzaWx5IHdhaXQgZm9yIHRoZSBsb2FkIHRvIGZpbmlzaC4gKi8KLQlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKLQkJZ290byBlcnJvcjsKLQotCS8qIExvY2sgdGhlIG1vZHVsZSBzbyB3ZSBjYW4gc2FmZWx5IGdldCB0aGUgdjRsMl9zdWJkZXYgcG9pbnRlciAqLwotCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcikpCi0JCWdvdG8gZXJyb3I7Ci0Jc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHY0bDJfZGV2aWNlIHdoaWNoIGluY3JlYXNlcyB0aGUgbW9kdWxlJ3MKLQkgICB1c2UgY291bnQgYXMgd2VsbC4gKi8KLQlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHY0bDJfZGV2LCBzZCkpCi0JCXNkID0gTlVMTDsKLQkvKiBEZWNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCB0byBtYXRjaCB0aGUgZmlyc3QgdHJ5X21vZHVsZV9nZXQuICovCi0JbW9kdWxlX3B1dChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQotCWlmIChzZCkgewotCQkvKiBXZSByZXR1cm4gZXJyb3JzIGZyb20gdjRsMl9zdWJkZXZfY2FsbCBvbmx5IGlmIHdlIGhhdmUgdGhlCi0JCSAgIGNhbGxiYWNrIGFzIHRoZSAuc19jb25maWcgaXMgbm90IG1hbmRhdG9yeSAqLwotCQlpbnQgZXJyID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19jb25maWcsIDAsIE5VTEwpOwotCi0JCWlmIChlcnIgJiYgZXJyICE9IC1FTk9JT0NUTENNRCkgewotCQkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCQkJc2QgPSBOVUxMOwotCQl9Ci0JfQotCi1lcnJvcjoKLQkvKiBJZiB3ZSBoYXZlIGEgY2xpZW50IGJ1dCBubyBzdWJkZXYsIHRoZW4gc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kCi0JICAgd2UgbXVzdCB1bnJlZ2lzdGVyIHRoZSBjbGllbnQuICovCi0JaWYgKGNsaWVudCAmJiBzZCA9PSBOVUxMKQotCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKLQlyZXR1cm4gc2Q7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfc3ViZGV2KTsKLQotLyogUHJvYmUgYW5kIGxvYWQgYW4gaTJjIHN1Yi1kZXZpY2UuICovCi1zdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCi0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCBjaGFyICpjbGllbnRfdHlwZSwKLQljb25zdCB1bnNpZ25lZCBzaG9ydCAqYWRkcnMpCi17Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IE5VTEw7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IE5VTEw7Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0KLQlCVUdfT04oIXY0bDJfZGV2KTsKLQotCWlmIChtb2R1bGVfbmFtZSkKLQkJcmVxdWVzdF9tb2R1bGUobW9kdWxlX25hbWUpOwotCi0JLyogU2V0dXAgdGhlIGkyYyBib2FyZCBpbmZvIHdpdGggdGhlIGRldmljZSB0eXBlIGFuZAotCSAgIHRoZSBkZXZpY2UgYWRkcmVzcy4gKi8KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0Jc3RybGNweShpbmZvLnR5cGUsIGNsaWVudF90eXBlLCBzaXplb2YoaW5mby50eXBlKSk7Ci0KLQkvKiBQcm9iZSBhbmQgY3JlYXRlIHRoZSBpMmMgY2xpZW50ICovCi0JY2xpZW50ID0gaTJjX25ld19wcm9iZWRfZGV2aWNlKGFkYXB0ZXIsICZpbmZvLCBhZGRycyk7Ci0JLyogTm90ZTogaXQgaXMgcG9zc2libGUgaW4gdGhlIGZ1dHVyZSB0aGF0Ci0JICAgYy0+ZHJpdmVyIGlzIE5VTEwgaWYgdGhlIGRyaXZlciBpcyBzdGlsbCBiZWluZyBsb2FkZWQuCi0JICAgV2UgbmVlZCBiZXR0ZXIgc3VwcG9ydCBmcm9tIHRoZSBrZXJuZWwgc28gdGhhdCB3ZQotCSAgIGNhbiBlYXNpbHkgd2FpdCBmb3IgdGhlIGxvYWQgdG8gZmluaXNoLiAqLwotCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMKQotCQlnb3RvIGVycm9yOwotCi0JLyogTG9jayB0aGUgbW9kdWxlIHNvIHdlIGNhbiBzYWZlbHkgZ2V0IHRoZSB2NGwyX3N1YmRldiBwb2ludGVyICovCi0JaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkKLQkJZ290byBlcnJvcjsKLQlzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JLyogUmVnaXN0ZXIgd2l0aCB0aGUgdjRsMl9kZXZpY2Ugd2hpY2ggaW5jcmVhc2VzIHRoZSBtb2R1bGUncwotCSAgIHVzZSBjb3VudCBhcyB3ZWxsLiAqLwotCWlmICh2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYodjRsMl9kZXYsIHNkKSkKLQkJc2QgPSBOVUxMOwotCS8qIERlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50IHRvIG1hdGNoIHRoZSBmaXJzdCB0cnlfbW9kdWxlX2dldC4gKi8KLQltb2R1bGVfcHV0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCi0JaWYgKHNkKSB7Ci0JCS8qIFdlIHJldHVybiBlcnJvcnMgZnJvbSB2NGwyX3N1YmRldl9jYWxsIG9ubHkgaWYgd2UgaGF2ZSB0aGUKLQkJICAgY2FsbGJhY2sgYXMgdGhlIC5zX2NvbmZpZyBpcyBub3QgbWFuZGF0b3J5ICovCi0JCWludCBlcnIgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX2NvbmZpZywgMCwgTlVMTCk7Ci0KLQkJaWYgKGVyciAmJiBlcnIgIT0gLUVOT0lPQ1RMQ01EKSB7Ci0JCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7Ci0JCQlzZCA9IE5VTEw7Ci0JCX0KLQl9Ci0KLWVycm9yOgotCS8qIElmIHdlIGhhdmUgYSBjbGllbnQgYnV0IG5vIHN1YmRldiwgdGhlbiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQKLQkgICB3ZSBtdXN0IHVucmVnaXN0ZXIgdGhlIGNsaWVudC4gKi8KLQlpZiAoY2xpZW50ICYmIHNkID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOwotCXJldHVybiBzZDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KTsKLQotc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCi0JCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IGNoYXIgKmNsaWVudF90eXBlLCB1OCBhZGRyKQotewotCXVuc2lnbmVkIHNob3J0IGFkZHJzWzJdID0geyBhZGRyLCBJMkNfQ0xJRU5UX0VORCB9OwotCi0JcmV0dXJuIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KHY0bDJfZGV2LCBhZGFwdGVyLAotCQkJbW9kdWxlX25hbWUsIGNsaWVudF90eXBlLCBhZGRycyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKTsKLQotLyogTG9hZCBhbiBpMmMgc3ViLWRldmljZS4gKi8KIHN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAogCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLAogCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8sIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwcm9iZV9hZGRycykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwppbmRleCBhN2YxYjY5Li41MDBjYmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCkBAIC02Niw3ICs2Niw0OSBAQAogICovCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlW1ZJREVPX05VTV9ERVZJQ0VTXTsKIHN0YXRpYyBERUZJTkVfTVVURVgodmlkZW9kZXZfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9CSVRNQVAodmlkZW9fbnVtc1tWRkxfVFlQRV9NQVhdLCBWSURFT19OVU1fREVWSUNFUyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZGV2bm9kZV9udW1zW1ZGTF9UWVBFX01BWF0sIFZJREVPX05VTV9ERVZJQ0VTKTsKKworLyogRGV2aWNlIG5vZGUgdXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyogTm90ZTogdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgYWxsIGFzc3VtZSB0aGF0IHZmbF90eXBlIGlzIGluIHRoZSByYW5nZQorICAgWzAsIFZGTF9UWVBFX01BWC0xXS4gKi8KKworI2lmZGVmIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMKKy8qIFJldHVybiB0aGUgYml0bWFwIGNvcnJlc3BvbmRpbmcgdG8gdmZsX3R5cGUuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmRldm5vZGVfYml0cyhpbnQgdmZsX3R5cGUpCit7CisJLyogQW55IHR5cGVzIG5vdCBhc3NpZ25lZCB0byBmaXhlZCBtaW5vciByYW5nZXMgbXVzdCBiZSBtYXBwZWQgdG8KKwkgICBvbmUgc2luZ2xlIGJpdG1hcCBmb3IgdGhlIHB1cnBvc2VzIG9mIGZpbmRpbmcgYSBmcmVlIG5vZGUgbnVtYmVyCisJICAgc2luY2UgYWxsIHRob3NlIHVuYXNzaWduZWQgdHlwZXMgdXNlIHRoZSBzYW1lIG1pbm9yIHJhbmdlLiAqLworCWludCBpZHggPSAodmZsX3R5cGUgPiBWRkxfVFlQRV9WVFgpID8gVkZMX1RZUEVfTUFYIC0gMSA6IHZmbF90eXBlOworCisJcmV0dXJuIGRldm5vZGVfbnVtc1tpZHhdOworfQorI2Vsc2UKKy8qIFJldHVybiB0aGUgYml0bWFwIGNvcnJlc3BvbmRpbmcgdG8gdmZsX3R5cGUuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmRldm5vZGVfYml0cyhpbnQgdmZsX3R5cGUpCit7CisJcmV0dXJuIGRldm5vZGVfbnVtc1t2ZmxfdHlwZV07Cit9CisjZW5kaWYKKworLyogTWFyayBkZXZpY2Ugbm9kZSBudW1iZXIgdmRldi0+bnVtIGFzIHVzZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZub2RlX3NldChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQoreworCXNldF9iaXQodmRldi0+bnVtLCBkZXZub2RlX2JpdHModmRldi0+dmZsX3R5cGUpKTsKK30KKworLyogTWFyayBkZXZpY2Ugbm9kZSBudW1iZXIgdmRldi0+bnVtIGFzIHVudXNlZCAqLworc3RhdGljIGlubGluZSB2b2lkIGRldm5vZGVfY2xlYXIoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwljbGVhcl9iaXQodmRldi0+bnVtLCBkZXZub2RlX2JpdHModmRldi0+dmZsX3R5cGUpKTsKK30KKworLyogVHJ5IHRvIGZpbmQgYSBmcmVlIGRldmljZSBub2RlIG51bWJlciBpbiB0aGUgcmFuZ2UgW2Zyb20sIHRvPiAqLworc3RhdGljIGlubGluZSBpbnQgZGV2bm9kZV9maW5kKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCBmcm9tLCBpbnQgdG8pCit7CisJcmV0dXJuIGZpbmRfbmV4dF96ZXJvX2JpdChkZXZub2RlX2JpdHModmRldi0+dmZsX3R5cGUpLCB0bywgZnJvbSk7Cit9CiAKIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmljZV9hbGxvYyh2b2lkKQogewpAQCAtMTE5LDggKzE2MSw4IEBACiAJICAgdGhlIHJlbGVhc2UoKSBjYWxsYmFjay4gKi8KIAl2ZGV2LT5jZGV2ID0gTlVMTDsKIAotCS8qIE1hcmsgbWlub3IgYXMgZnJlZSAqLwotCWNsZWFyX2JpdCh2ZGV2LT5udW0sIHZpZGVvX251bXNbdmRldi0+dmZsX3R5cGVdKTsKKwkvKiBNYXJrIGRldmljZSBub2RlIG51bWJlciBhcyBmcmVlICovCisJZGV2bm9kZV9jbGVhcih2ZGV2KTsKIAogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAKQEAgLTI5OSwzMiArMzQxLDI4IEBACiB9OwogCiAvKioKLSAqIGdldF9pbmRleCAtIGFzc2lnbiBzdHJlYW0gbnVtYmVyIGJhc2VkIG9uIHBhcmVudCBkZXZpY2UKKyAqIGdldF9pbmRleCAtIGFzc2lnbiBzdHJlYW0gaW5kZXggbnVtYmVyIGJhc2VkIG9uIHBhcmVudCBkZXZpY2UKICAqIEB2ZGV2OiB2aWRlb19kZXZpY2UgdG8gYXNzaWduIGluZGV4IG51bWJlciB0bywgdmRldi0+cGFyZW50IHNob3VsZCBiZSBhc3NpZ25lZAotICogQG51bTogIC0xIGlmIGF1dG8gYXNzaWduLCByZXF1ZXN0ZWQgbnVtYmVyIG90aGVyd2lzZQogICoKICAqIE5vdGUgdGhhdCB3aGVuIHRoaXMgaXMgY2FsbGVkIHRoZSBuZXcgZGV2aWNlIGhhcyBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZAotICogaW4gdGhlIHZpZGVvX2RldmljZSBhcnJheS4KKyAqIGluIHRoZSB2aWRlb19kZXZpY2UgYXJyYXksIGJ1dCBpdCB3YXMgYWJsZSB0byBvYnRhaW4gYSBtaW5vciBudW1iZXIuCiAgKgotICogUmV0dXJucyAtRU5GSUxFIGlmIG51bSBpcyBhbHJlYWR5IGluIHVzZSwgYSBmcmVlIGluZGV4IG51bWJlciBpZgotICogc3VjY2Vzc2Z1bC4KKyAqIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gYWx3YXlzIG9idGFpbiBhIGZyZWUgc3RyZWFtIGluZGV4IG51bWJlciBzaW5jZQorICogdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaXMgdGhhdCB0aGVyZSBhcmUgVklERU9fTlVNX0RFVklDRVMgLSAxIHNsb3RzIGluCisgKiB1c2Ugb2YgdGhlIHZpZGVvX2RldmljZSBhcnJheS4KKyAqCisgKiBSZXR1cm5zIGEgZnJlZSBpbmRleCBudW1iZXIuCiAgKi8KLXN0YXRpYyBpbnQgZ2V0X2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCBudW0pCitzdGF0aWMgaW50IGdldF9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQogewogCS8qIFRoaXMgY2FuIGJlIHN0YXRpYyBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBnbG9iYWwKIAkgICB2aWRlb2Rldl9sb2NrIGhlbGQuICovCiAJc3RhdGljIERFQ0xBUkVfQklUTUFQKHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKIAlpbnQgaTsKIAotCWlmIChudW0gPj0gVklERU9fTlVNX0RFVklDRVMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2aWRlb2RldjogJXMgbnVtIGlzIHRvbyBsYXJnZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBTb21lIGRyaXZlcnMgZG8gbm90IHNldCB0aGUgcGFyZW50LiBJbiB0aGF0IGNhc2UgYWx3YXlzIHJldHVybgotCSAgIG51bSBvciAwLiAqLworCS8qIFNvbWUgZHJpdmVycyBkbyBub3Qgc2V0IHRoZSBwYXJlbnQuIEluIHRoYXQgY2FzZSBhbHdheXMgcmV0dXJuIDAuICovCiAJaWYgKHZkZXYtPnBhcmVudCA9PSBOVUxMKQotCQlyZXR1cm4gbnVtID49IDAgPyBudW0gOiAwOworCQlyZXR1cm4gMDsKIAogCWJpdG1hcF96ZXJvKHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKIApAQCAtMzM1LDM1ICszNzMsMjMgQEAKIAkJfQogCX0KIAotCWlmIChudW0gPj0gMCkgewotCQlpZiAodGVzdF9iaXQobnVtLCB1c2VkKSkKLQkJCXJldHVybiAtRU5GSUxFOwotCQlyZXR1cm4gbnVtOwotCX0KLQotCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKLQlyZXR1cm4gaSA9PSBWSURFT19OVU1fREVWSUNFUyA/IC1FTkZJTEUgOiBpOworCXJldHVybiBmaW5kX2ZpcnN0X3plcm9fYml0KHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKIH0KIAotaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yKQotewotCXJldHVybiB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgodmRldiwgdHlwZSwgbnIsIC0xKTsKLX0KLUVYUE9SVF9TWU1CT0wodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKTsKLQogLyoqCi0gKgl2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXggLSByZWdpc3RlciB2aWRlbzRsaW51eCBkZXZpY2VzCisgKgl2aWRlb19yZWdpc3Rlcl9kZXZpY2UgLSByZWdpc3RlciB2aWRlbzRsaW51eCBkZXZpY2VzCiAgKglAdmRldjogdmlkZW8gZGV2aWNlIHN0cnVjdHVyZSB3ZSB3YW50IHRvIHJlZ2lzdGVyCiAgKglAdHlwZTogdHlwZSBvZiBkZXZpY2UgdG8gcmVnaXN0ZXIKLSAqCUBucjogICB3aGljaCBkZXZpY2UgbnVtYmVyICgwID09IC9kZXYvdmlkZW8wLCAxID09IC9kZXYvdmlkZW8xLCAuLi4KKyAqCUBucjogICB3aGljaCBkZXZpY2Ugbm9kZSBudW1iZXIgKDAgPT0gL2Rldi92aWRlbzAsIDEgPT0gL2Rldi92aWRlbzEsIC4uLgogICogICAgICAgICAgICAgLTEgPT0gZmlyc3QgZnJlZSkKLSAqCUBpbmRleDogc3RyZWFtIG51bWJlciBiYXNlZCBvbiBwYXJlbnQgZGV2aWNlOwotICoJCS0xIGlmIGF1dG8gYXNzaWduLCByZXF1ZXN0ZWQgbnVtYmVyIG90aGVyd2lzZQorICoJQHdhcm5faWZfbnJfaW5fdXNlOiB3YXJuIGlmIHRoZSBkZXNpcmVkIGRldmljZSBub2RlIG51bWJlcgorICoJICAgICAgIHdhcyBhbHJlYWR5IGluIHVzZSBhbmQgYW5vdGhlciBudW1iZXIgd2FzIGNob3NlbiBpbnN0ZWFkLgogICoKLSAqCVRoZSByZWdpc3RyYXRpb24gY29kZSBhc3NpZ25zIG1pbm9yIG51bWJlcnMgYmFzZWQgb24gdGhlIHR5cGUKLSAqCXJlcXVlc3RlZC4gLUVORklMRSBpcyByZXR1cm5lZCBpbiBhbGwgdGhlIGRldmljZSBzbG90cyBmb3IgdGhpcwotICoJY2F0ZWdvcnkgYXJlIGZ1bGwuIElmIG5vdCB0aGVuIHRoZSBtaW5vciBmaWVsZCBpcyBzZXQgYW5kIHRoZQotICoJZHJpdmVyIGluaXRpYWxpemUgZnVuY3Rpb24gaXMgY2FsbGVkIChpZiBub24gJU5VTEwpLgorICoJVGhlIHJlZ2lzdHJhdGlvbiBjb2RlIGFzc2lnbnMgbWlub3IgbnVtYmVycyBhbmQgZGV2aWNlIG5vZGUgbnVtYmVycworICoJYmFzZWQgb24gdGhlIHJlcXVlc3RlZCB0eXBlIGFuZCByZWdpc3RlcnMgdGhlIG5ldyBkZXZpY2Ugbm9kZSB3aXRoCisgKgl0aGUga2VybmVsLgorICoJQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgbm8gZnJlZSBtaW5vciBvciBkZXZpY2Ugbm9kZSBudW1iZXIgY291bGQgYmUKKyAqCWZvdW5kLCBvciBpZiB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBkZXZpY2Ugbm9kZSBmYWlsZWQuCiAgKgogICoJWmVybyBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLgogICoKQEAgLTM3Nyw4ICs0MDMsOCBAQAogICoKICAqCSVWRkxfVFlQRV9SQURJTyAtIEEgcmFkaW8gY2FyZAogICovCi1pbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIsCi0JCQkJCWludCBpbmRleCkKK3N0YXRpYyBpbnQgX192aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IHR5cGUsIGludCBuciwKKwkJaW50IHdhcm5faWZfbnJfaW5fdXNlKQogewogCWludCBpID0gMDsKIAlpbnQgcmV0OwpAQCAtNDIxLDcgKzQ0Nyw3IEBACiAJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5kZXYpCiAJCXZkZXYtPnBhcmVudCA9IHZkZXYtPnY0bDJfZGV2LT5kZXY7CiAKLQkvKiBQYXJ0IDI6IGZpbmQgYSBmcmVlIG1pbm9yLCBrZXJuZWwgbnVtYmVyIGFuZCBkZXZpY2UgaW5kZXguICovCisJLyogUGFydCAyOiBmaW5kIGEgZnJlZSBtaW5vciwgZGV2aWNlIG5vZGUgbnVtYmVyIGFuZCBkZXZpY2UgaW5kZXguICovCiAjaWZkZWYgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUwogCS8qIEtlZXAgdGhlIHJhbmdlcyBmb3IgdGhlIGZpcnN0IGZvdXIgdHlwZXMgZm9yIGhpc3RvcmljYWwKIAkgKiByZWFzb25zLgpAQCAtNDUyLDIxICs0NzgsMjIgQEAKIAl9CiAjZW5kaWYKIAotCS8qIFBpY2sgYSBtaW5vciBudW1iZXIgKi8KKwkvKiBQaWNrIGEgZGV2aWNlIG5vZGUgbnVtYmVyICovCiAJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JbnIgPSBmaW5kX25leHRfemVyb19iaXQodmlkZW9fbnVtc1t0eXBlXSwgbWlub3JfY250LCBuciA9PSAtMSA/IDAgOiBucik7CisJbnIgPSBkZXZub2RlX2ZpbmQodmRldiwgbnIgPT0gLTEgPyAwIDogbnIsIG1pbm9yX2NudCk7CiAJaWYgKG5yID09IG1pbm9yX2NudCkKLQkJbnIgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHZpZGVvX251bXNbdHlwZV0sIG1pbm9yX2NudCk7CisJCW5yID0gZGV2bm9kZV9maW5kKHZkZXYsIDAsIG1pbm9yX2NudCk7CiAJaWYgKG5yID09IG1pbm9yX2NudCkgewotCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBnZXQgYSBmcmVlIGtlcm5lbCBudW1iZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBnZXQgYSBmcmVlIGRldmljZSBub2RlIG51bWJlclxuIik7CiAJCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAJCXJldHVybiAtRU5GSUxFOwogCX0KICNpZmRlZiBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTCi0JLyogMS1vbi0xIG1hcHBpbmcgb2Yga2VybmVsIG51bWJlciB0byBtaW5vciBudW1iZXIgKi8KKwkvKiAxLW9uLTEgbWFwcGluZyBvZiBkZXZpY2Ugbm9kZSBudW1iZXIgdG8gbWlub3IgbnVtYmVyICovCiAJaSA9IG5yOwogI2Vsc2UKLQkvKiBUaGUga2VybmVsIG51bWJlciBhbmQgbWlub3IgbnVtYmVycyBhcmUgaW5kZXBlbmRlbnQgKi8KKwkvKiBUaGUgZGV2aWNlIG5vZGUgbnVtYmVyIGFuZCBtaW5vciBudW1iZXJzIGFyZSBpbmRlcGVuZGVudCwgc28KKwkgICB3ZSBqdXN0IGZpbmQgdGhlIGZpcnN0IGZyZWUgbWlub3IgbnVtYmVyLiAqLwogCWZvciAoaSA9IDA7IGkgPCBWSURFT19OVU1fREVWSUNFUzsgaSsrKQogCQlpZiAodmlkZW9fZGV2aWNlW2ldID09IE5VTEwpCiAJCQlicmVhazsKQEAgLTQ3OCwxNyArNTA1LDEzIEBACiAjZW5kaWYKIAl2ZGV2LT5taW5vciA9IGkgKyBtaW5vcl9vZmZzZXQ7CiAJdmRldi0+bnVtID0gbnI7Ci0Jc2V0X2JpdChuciwgdmlkZW9fbnVtc1t0eXBlXSk7CisJZGV2bm9kZV9zZXQodmRldik7CisKIAkvKiBTaG91bGQgbm90IGhhcHBlbiBzaW5jZSB3ZSB0aG91Z2h0IHRoaXMgbWlub3Igd2FzIGZyZWUgKi8KIAlXQVJOX09OKHZpZGVvX2RldmljZVt2ZGV2LT5taW5vcl0gIT0gTlVMTCk7Ci0JcmV0ID0gdmRldi0+aW5kZXggPSBnZXRfaW5kZXgodmRldiwgaW5kZXgpOworCXZkZXYtPmluZGV4ID0gZ2V0X2luZGV4KHZkZXYpOwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBnZXRfaW5kZXggZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KIAkvKiBQYXJ0IDM6IEluaXRpYWxpemUgdGhlIGNoYXJhY3RlciBkZXZpY2UgKi8KIAl2ZGV2LT5jZGV2ID0gY2Rldl9hbGxvYygpOwogCWlmICh2ZGV2LT5jZGV2ID09IE5VTEwpIHsKQEAgLTUxNyw3ICs1NDAsNyBAQAogCXZkZXYtPmRldi5kZXZ0ID0gTUtERVYoVklERU9fTUFKT1IsIHZkZXYtPm1pbm9yKTsKIAlpZiAodmRldi0+cGFyZW50KQogCQl2ZGV2LT5kZXYucGFyZW50ID0gdmRldi0+cGFyZW50OwotCWRldl9zZXRfbmFtZSgmdmRldi0+ZGV2LCAiJXMlZCIsIG5hbWVfYmFzZSwgbnIpOworCWRldl9zZXRfbmFtZSgmdmRldi0+ZGV2LCAiJXMlZCIsIG5hbWVfYmFzZSwgdmRldi0+bnVtKTsKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnZkZXYtPmRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtNTI3LDYgKzU1MCwxMCBAQAogCSAgIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGdvZXMgYXdheS4gKi8KIAl2ZGV2LT5kZXYucmVsZWFzZSA9IHY0bDJfZGV2aWNlX3JlbGVhc2U7CiAKKwlpZiAobnIgIT0gLTEgJiYgbnIgIT0gdmRldi0+bnVtICYmIHdhcm5faWZfbnJfaW5fdXNlKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVxdWVzdGVkICVzJWQsIGdvdCAlcyVkXG4iLAorCQkJCV9fZnVuY19fLCBuYW1lX2Jhc2UsIG5yLCBuYW1lX2Jhc2UsIHZkZXYtPm51bSk7CisKIAkvKiBQYXJ0IDU6IEFjdGl2YXRlIHRoaXMgbWlub3IuIFRoZSBjaGFyIGRldmljZSBjYW4gbm93IGJlIHVzZWQuICovCiAJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7CiAJdmlkZW9fZGV2aWNlW3ZkZXYtPm1pbm9yXSA9IHZkZXY7CkBAIC01MzcsMTMgKzU2NCwyNCBAQAogCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwogCWlmICh2ZGV2LT5jZGV2KQogCQljZGV2X2RlbCh2ZGV2LT5jZGV2KTsKLQljbGVhcl9iaXQodmRldi0+bnVtLCB2aWRlb19udW1zW3R5cGVdKTsKKwlkZXZub2RlX2NsZWFyKHZkZXYpOwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAJLyogTWFyayB0aGlzIHZpZGVvIGRldmljZSBhcyBuZXZlciBoYXZpbmcgYmVlbiByZWdpc3RlcmVkLiAqLwogCXZkZXYtPm1pbm9yID0gLTE7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wodmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KTsKKworaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yKQoreworCXJldHVybiBfX3ZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCB0eXBlLCBuciwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvX3JlZ2lzdGVyX2RldmljZSk7CisKK2ludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2Vfbm9fd2FybihzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yKQoreworCXJldHVybiBfX3ZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCB0eXBlLCBuciwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvX3JlZ2lzdGVyX2RldmljZV9ub193YXJuKTsKIAogLyoqCiAgKgl2aWRlb191bnJlZ2lzdGVyX2RldmljZSAtIHVucmVnaXN0ZXIgYSB2aWRlbzRsaW51eCBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggZjNiNmUxNS4uY2Q2YTM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTQzMzMsMTEgKzQzMzMsMTEgQEAKIAl2aW5vX2luaXRfc3RhZ2UrKzsKIAogCXZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciA9Ci0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2X2FkZHIoJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYsCi0JCQkmdmlub19pMmNfYWRhcHRlciwgInNhYTcxOTEiLCAic2FhNzE5MSIsIDB4NDUpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2LCAmdmlub19pMmNfYWRhcHRlciwKKwkJCSAgICAgICAic2FhNzE5MSIsICJzYWE3MTkxIiwgMCwgSTJDX0FERFJTKDB4NDUpKTsKIAl2aW5vX2RydmRhdGEtPmNhbWVyYSA9Ci0JCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2X2FkZHIoJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYsCi0JCQkmdmlub19pMmNfYWRhcHRlciwgImluZHljYW0iLCAiaW5keWNhbSIsIDB4MmIpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2LCAmdmlub19pMmNfYWRhcHRlciwKKwkJCSAgICAgICAiaW5keWNhbSIsICJpbmR5Y2FtIiwgMCwgSTJDX0FERFJTKDB4MmIpKTsKIAogCWRwcmludGsoImluaXQgY29tcGxldGUhXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCA2MDI0ODRkLi4zN2ZjZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtMzUxNSw5ICszNTE1LDkgQEAKIAl3OTk2OGNmX3R1cm5fb25fbGVkKGNhbSk7CiAKIAl3OTk2OGNmX2kyY19pbml0KGNhbSk7Ci0JY2FtLT5zZW5zb3Jfc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY2FtLT52NGwyX2RldiwKKwljYW0tPnNlbnNvcl9zZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmNhbS0+djRsMl9kZXYsCiAJCQkmY2FtLT5pMmNfYWRhcHRlciwKLQkJCSJvdmNhbWNoaXAiLCAib3ZjYW1jaGlwIiwgYWRkcnMpOworCQkJIm92Y2FtY2hpcCIsICJvdmNhbWNoaXAiLCAwLCBhZGRycyk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwppbmRleCA5Njk3MTA0Li5iM2M2NDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKQEAgLTgxOSw4ICs4MTksMTAgQEAKIAkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAogCQkJICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKIAkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSwKLQkJCSAgICBjYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ICoKLQkJCSAgICAxMDAwICogbXNlY3NfdG9famlmZmllcygxKSApOworCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoCisJCQkJY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqIDEwMDAKKwkJCSAgICApCisJCQkgICk7CiAJCWlmICh0aW1lb3V0IDwgMCkgewogCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCQlyZXR1cm4gdGltZW91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKaW5kZXggMGM0ZDliMS4uYmU3MDU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKQEAgLTEzNTcsMTUgKzEzNTcsMTUgQEAKIAkJZ290byB6cl9mcmVlX2lycTsKIAl9CiAKLQl6ci0+ZGVjb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ6ci0+djRsMl9kZXYsCisJenItPmRlY29kZXIgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZ6ci0+djRsMl9kZXYsCiAJCSZ6ci0+aTJjX2FkYXB0ZXIsIHpyLT5jYXJkLm1vZF9kZWNvZGVyLCB6ci0+Y2FyZC5pMmNfZGVjb2RlciwKLQkJenItPmNhcmQuYWRkcnNfZGVjb2Rlcik7CisJCTAsIHpyLT5jYXJkLmFkZHJzX2RlY29kZXIpOwogCiAJaWYgKHpyLT5jYXJkLm1vZF9lbmNvZGVyKQotCQl6ci0+ZW5jb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ6ci0+djRsMl9kZXYsCisJCXpyLT5lbmNvZGVyID0gdjRsMl9pMmNfbmV3X3N1YmRldigmenItPnY0bDJfZGV2LAogCQkJJnpyLT5pMmNfYWRhcHRlciwKIAkJCXpyLT5jYXJkLm1vZF9lbmNvZGVyLCB6ci0+Y2FyZC5pMmNfZW5jb2RlciwKLQkJCXpyLT5jYXJkLmFkZHJzX2VuY29kZXIpOworCQkJMCwgenItPmNhcmQuYWRkcnNfZW5jb2Rlcik7CiAKIAlkcHJpbnRrKDIsCiAJCUtFUk5fSU5GTyAiJXM6IEluaXRpYWxpemluZyB2aWRlb2NvZGVjIGJ1cy4uLlxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKaW5kZXggNzg0N2JiYy4uYmQ4M2ZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1zX2Jsb2NrX2Jkb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtc19ibG9ja19iZG9wcyA9IHsKIAkub3BlbiAgICA9IG1zcHJvX2Jsb2NrX2JkX29wZW4sCiAJLnJlbGVhc2UgPSBtc3Byb19ibG9ja19iZF9yZWxlYXNlLAogCS5nZXRnZW8gID0gbXNwcm9fYmxvY2tfYmRfZ2V0Z2VvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCA3NmZhMmVlLi42MTBlOTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtNjgyMSw3ICs2ODIxLDcgQEAKIAkqc2l6ZSA9IHk7CiB9CiAvKioKLSAqCW1wdF9zZXRfdGFza21nbXRfaW5fcHJvZ3Jlc3NfZmxhZyAtIHNldCBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGFzayBtYW5hZ21lbnQKKyAqCW1wdF9zZXRfdGFza21nbXRfaW5fcHJvZ3Jlc3NfZmxhZyAtIHNldCBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGFzayBtYW5hZ2VtZW50CiAgKglAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQogICoKICAqCVJldHVybnMgMCBmb3IgU1VDQ0VTUyBvciAtMSBpZiBGQUlMRUQuCkBAIC02ODU0LDcgKzY4NTQsNyBAQAogRVhQT1JUX1NZTUJPTChtcHRfc2V0X3Rhc2ttZ210X2luX3Byb2dyZXNzX2ZsYWcpOwogCiAvKioKLSAqCW1wdF9jbGVhcl90YXNrbWdtdF9pbl9wcm9ncmVzc19mbGFnIC0gY2xlYXIgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRhc2sgbWFuYWdtZW50CisgKgltcHRfY2xlYXJfdGFza21nbXRfaW5fcHJvZ3Jlc3NfZmxhZyAtIGNsZWFyIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCB0YXNrIG1hbmFnZW1lbnQKICAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCiAgKgogICoqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggMzM1ZDRjNy4uZDUwNWI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC05MjUsNyArOTI1LDcgQEAKIH07CiAKIC8qIEkyTyBCbG9jayBkZXZpY2Ugb3BlcmF0aW9ucyBkZWZpbml0aW9uICovCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGkyb19ibG9ja19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpMm9fYmxvY2tfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGkyb19ibG9ja19vcGVuLAogCS5yZWxlYXNlID0gaTJvX2Jsb2NrX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jIGIvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYwppbmRleCBjNTMzZjg2Li41NDQ3ZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCXU4IHNldHRpbmc7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFiMzEwMF9pbml0X3NldHRpbmcgX19pbml0ZGF0YQorc3RhdGljIGNvbnN0IHN0cnVjdCBhYjMxMDBfaW5pdF9zZXR0aW5nIF9faW5pdGNvbnN0CiBhYjMxMDBfaW5pdF9zZXR0aW5nc1tdID0gewogCXsKIAkJLmFicmVnID0gQUIzMTAwX01DQSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2V6eC1wY2FwLmMgYi9kcml2ZXJzL21mZC9lengtcGNhcC5jCmluZGV4IDAxNmJlNDkuLjg3NjI4ODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9lengtcGNhcC5jCisrKyBiL2RyaXZlcnMvbWZkL2V6eC1wY2FwLmMKQEAgLTU0OCwzICs1NDgsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGFuaWVsIFJpYmVpcm8gLyBIYXJhbGQgV2VsdGUiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTW90b3JvbGEgUENBUDIgQVNJQyBEcml2ZXIiKTsKK01PRFVMRV9BTElBUygic3BpOmV6eC1wY2FwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCmluZGV4IDc4YzIxMzUuLjJhZmMwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jCkBAIC00OCw5ICs0OCwxMSBAQAogCWludCBlcnI7CiAJc3RydWN0IHVjYjE0MDAgKnVjYjsKIAlzdHJ1Y3QgdWNiMTQwMF90cyB1Y2JfdHM7CisJc3RydWN0IHVjYjE0MDBfZ3BpbyB1Y2JfZ3BpbzsKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CiAKIAltZW1zZXQoJnVjYl90cywgMCwgc2l6ZW9mKHVjYl90cykpOworCW1lbXNldCgmdWNiX2dwaW8sIDAsIHNpemVvZih1Y2JfZ3BpbykpOwogCiAJdWNiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVjYjE0MDApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVjYikgewpAQCAtNjgsMjUgKzcwLDQ0IEBACiAJCWdvdG8gZXJyMDsKIAl9CiAKKwkvKiBHUElPICovCisJdWNiX2dwaW8uYWM5NyA9IGFjOTc7CisJdWNiLT51Y2IxNDAwX2dwaW8gPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInVjYjE0MDBfZ3BpbyIsIC0xKTsKKwlpZiAoIXVjYi0+dWNiMTQwMF9ncGlvKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyMDsKKwl9CisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHVjYi0+dWNiMTQwMF9ncGlvLCAmdWNiX2dwaW8sCisJCQkJCXNpemVvZih1Y2JfZ3BpbykpOworCWlmIChlcnIpCisJCWdvdG8gZXJyMTsKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHVjYi0+dWNiMTQwMF9ncGlvKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjE7CisKIAkvKiBUT1VDSFNDUkVFTiAqLwogCXVjYl90cy5hYzk3ID0gYWM5NzsKIAl1Y2ItPnVjYjE0MDBfdHMgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInVjYjE0MDBfdHMiLCAtMSk7CiAJaWYgKCF1Y2ItPnVjYjE0MDBfdHMpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnIwOworCQlnb3RvIGVycjI7CiAJfQogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSh1Y2ItPnVjYjE0MDBfdHMsICZ1Y2JfdHMsCiAJCQkJCXNpemVvZih1Y2JfdHMpKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyMzsKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHVjYi0+dWNiMTQwMF90cyk7CiAJaWYgKGVycikKLQkJZ290byBlcnIxOworCQlnb3RvIGVycjM7CiAKIAlyZXR1cm4gMDsKIAotZXJyMToKK2VycjM6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dCh1Y2ItPnVjYjE0MDBfdHMpOworZXJyMjoKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih1Y2ItPnVjYjE0MDBfZ3Bpbyk7CitlcnIxOgorCXBsYXRmb3JtX2RldmljZV9wdXQodWNiLT51Y2IxNDAwX2dwaW8pOwogZXJyMDoKIAlrZnJlZSh1Y2IpOwogZXJyOgpAQCAtOTgsNiArMTE5LDggQEAKIAlzdHJ1Y3QgdWNiMTQwMCAqdWNiID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih1Y2ItPnVjYjE0MDBfdHMpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHVjYi0+dWNiMTQwMF9ncGlvKTsKKwogCWtmcmVlKHVjYik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZWVwcm9tL2F0MjUuYyBiL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNS5jCmluZGV4IDJlNTM1YTAuLmQ5MDJkODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNS5jCisrKyBiL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNS5jCkBAIC00MTcsNCArNDE3LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBtb3N0IFNQSSBFRVBST01zIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBCcm93bmVsbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCitNT0RVTEVfQUxJQVMoInNwaTphdDI1Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbWZzLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbWZzLmMKaW5kZXggZGU5NjZhNi4uYWVjZjQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYwpAQCAtOTcsNyArOTcsNyBAQAogCXJldHVybiBnZXRfc2Jfc2luZ2xlKGZzdCwgZmxhZ3MsIGRhdGEsIGlibWFzbWZzX2ZpbGxfc3VwZXIsIG1udCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBpYm1hc21mc19zX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBpYm1hc21mc19zX29wcyA9IHsKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbGtkdG0uYyBiL2RyaXZlcnMvbWlzYy9sa2R0bS5jCmluZGV4IDFiZmU1ZDEuLjM2NDhiMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9sa2R0bS5jCisrKyBiL2RyaXZlcnMvbWlzYy9sa2R0bS5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAogCXN3aXRjaCAoY3BvaW50KSB7CiAJY2FzZSBJTlRfSEFSRFdBUkVfRU5UUlk6Ci0JCWxrZHRtLmtwLnN5bWJvbF9uYW1lID0gIl9fZG9fSVJRIjsKKwkJbGtkdG0ua3Auc3ltYm9sX25hbWUgPSAiZG9fSVJRIjsKIAkJbGtkdG0uZW50cnkgPSAoa3Byb2JlX29wY29kZV90KikganBfZG9faXJxOwogCQlicmVhazsKIAljYXNlIElOVF9IV19JUlFfRU46CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKaW5kZXggYWRjMjA1Yy4uODVmMGU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbW1jX2Jkb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtbWNfYmRvcHMgPSB7CiAJLm9wZW4JCQk9IG1tY19ibGtfb3BlbiwKIAkucmVsZWFzZQkJPSBtbWNfYmxrX3JlbGVhc2UsCiAJLmdldGdlbwkJCT0gbW1jX2Jsa19nZXRnZW8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCmluZGV4IGQ4NGM4ODAuLjdkYWIyZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCkBAIC0zNDQsNiArMzQ0LDEwMSBAQAogRVhQT1JUX1NZTUJPTChtbWNfYWxpZ25fZGF0YV9zaXplKTsKIAogLyoqCisgKgltbWNfaG9zdF9lbmFibGUgLSBlbmFibGUgYSBob3N0LgorICoJQGhvc3Q6IG1tYyBob3N0IHRvIGVuYWJsZQorICoKKyAqCUhvc3RzIHRoYXQgc3VwcG9ydCBwb3dlciBzYXZpbmcgY2FuIHVzZSB0aGUgJ2VuYWJsZScgYW5kICdkaXNhYmxlJworICoJbWV0aG9kcyB0byBleGl0IGFuZCBlbnRlciBwb3dlciBzYXZpbmcgc3RhdGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICoJc2VlIGNvbW1lbnRzIGZvciBzdHJ1Y3QgbW1jX2hvc3Rfb3BzLgorICovCitpbnQgbW1jX2hvc3RfZW5hYmxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpZiAoIShob3N0LT5jYXBzICYgTU1DX0NBUF9ESVNBQkxFKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaG9zdC0+ZW5fZGlzX3JlY3VycykKKwkJcmV0dXJuIDA7CisKKwlpZiAoaG9zdC0+bmVzdGluZ19jbnQrKykKKwkJcmV0dXJuIDA7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmhvc3QtPmRpc2FibGUpOworCisJaWYgKGhvc3QtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGhvc3QtPm9wcy0+ZW5hYmxlKSB7CisJCWludCBlcnI7CisKKwkJaG9zdC0+ZW5fZGlzX3JlY3VycyA9IDE7CisJCWVyciA9IGhvc3QtPm9wcy0+ZW5hYmxlKGhvc3QpOworCQlob3N0LT5lbl9kaXNfcmVjdXJzID0gMDsKKworCQlpZiAoZXJyKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGVuYWJsZSBlcnJvciAlZFxuIiwKKwkJCQkgbW1jX2hvc3RuYW1lKGhvc3QpLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlob3N0LT5lbmFibGVkID0gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobW1jX2hvc3RfZW5hYmxlKTsKKworc3RhdGljIGludCBtbWNfaG9zdF9kb19kaXNhYmxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IGxhenkpCit7CisJaWYgKGhvc3QtPm9wcy0+ZGlzYWJsZSkgeworCQlpbnQgZXJyOworCisJCWhvc3QtPmVuX2Rpc19yZWN1cnMgPSAxOworCQllcnIgPSBob3N0LT5vcHMtPmRpc2FibGUoaG9zdCwgbGF6eSk7CisJCWhvc3QtPmVuX2Rpc19yZWN1cnMgPSAwOworCisJCWlmIChlcnIgPCAwKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGRpc2FibGUgZXJyb3IgJWRcbiIsCisJCQkJIG1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKGVyciA+IDApIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKGVycik7CisKKwkJCW1tY19zY2hlZHVsZV9kZWxheWVkX3dvcmsoJmhvc3QtPmRpc2FibGUsIGRlbGF5KTsKKwkJfQorCX0KKwlob3N0LT5lbmFibGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKgltbWNfaG9zdF9kaXNhYmxlIC0gZGlzYWJsZSBhIGhvc3QuCisgKglAaG9zdDogbW1jIGhvc3QgdG8gZGlzYWJsZQorICoKKyAqCUhvc3RzIHRoYXQgc3VwcG9ydCBwb3dlciBzYXZpbmcgY2FuIHVzZSB0aGUgJ2VuYWJsZScgYW5kICdkaXNhYmxlJworICoJbWV0aG9kcyB0byBleGl0IGFuZCBlbnRlciBwb3dlciBzYXZpbmcgc3RhdGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICoJc2VlIGNvbW1lbnRzIGZvciBzdHJ1Y3QgbW1jX2hvc3Rfb3BzLgorICovCitpbnQgbW1jX2hvc3RfZGlzYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaW50IGVycjsKKworCWlmICghKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX0RJU0FCTEUpKQorCQlyZXR1cm4gMDsKKworCWlmIChob3N0LT5lbl9kaXNfcmVjdXJzKQorCQlyZXR1cm4gMDsKKworCWlmICgtLWhvc3QtPm5lc3RpbmdfY250KQorCQlyZXR1cm4gMDsKKworCWlmICghaG9zdC0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBtbWNfaG9zdF9kb19kaXNhYmxlKGhvc3QsIDApOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19ob3N0X2Rpc2FibGUpOworCisvKioKICAqCV9fbW1jX2NsYWltX2hvc3QgLSBleGNsdXNpdmVseSBjbGFpbSBhIGhvc3QKICAqCUBob3N0OiBtbWMgaG9zdCB0byBjbGFpbQogICoJQGFib3J0OiB3aGV0aGVyIG9yIG5vdCB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBhYm9ydGVkCkBAIC0zNjYsMjUgKzQ2MSwxMTEgQEAKIAl3aGlsZSAoMSkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCXN0b3AgPSBhYm9ydCA/IGF0b21pY19yZWFkKGFib3J0KSA6IDA7Ci0JCWlmIChzdG9wIHx8ICFob3N0LT5jbGFpbWVkKQorCQlpZiAoc3RvcCB8fCAhaG9zdC0+Y2xhaW1lZCB8fCBob3N0LT5jbGFpbWVyID09IGN1cnJlbnQpCiAJCQlicmVhazsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCQlzY2hlZHVsZSgpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCWlmICghc3RvcCkKKwlpZiAoIXN0b3ApIHsKIAkJaG9zdC0+Y2xhaW1lZCA9IDE7Ci0JZWxzZQorCQlob3N0LT5jbGFpbWVyID0gY3VycmVudDsKKwkJaG9zdC0+Y2xhaW1fY250ICs9IDE7CisJfSBlbHNlCiAJCXdha2VfdXAoJmhvc3QtPndxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmhvc3QtPndxLCAmd2FpdCk7CisJaWYgKCFzdG9wKQorCQltbWNfaG9zdF9lbmFibGUoaG9zdCk7CiAJcmV0dXJuIHN0b3A7CiB9CiAKIEVYUE9SVF9TWU1CT0woX19tbWNfY2xhaW1faG9zdCk7CiAKIC8qKgorICoJbW1jX3RyeV9jbGFpbV9ob3N0IC0gdHJ5IGV4Y2x1c2l2ZWx5IHRvIGNsYWltIGEgaG9zdAorICoJQGhvc3Q6IG1tYyBob3N0IHRvIGNsYWltCisgKgorICoJUmV0dXJucyAlMSBpZiB0aGUgaG9zdCBpcyBjbGFpbWVkLCAlMCBvdGhlcndpc2UuCisgKi8KK2ludCBtbWNfdHJ5X2NsYWltX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWludCBjbGFpbWVkX2hvc3QgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWlmICghaG9zdC0+Y2xhaW1lZCB8fCBob3N0LT5jbGFpbWVyID09IGN1cnJlbnQpIHsKKwkJaG9zdC0+Y2xhaW1lZCA9IDE7CisJCWhvc3QtPmNsYWltZXIgPSBjdXJyZW50OworCQlob3N0LT5jbGFpbV9jbnQgKz0gMTsKKwkJY2xhaW1lZF9ob3N0ID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBjbGFpbWVkX2hvc3Q7Cit9CitFWFBPUlRfU1lNQk9MKG1tY190cnlfY2xhaW1faG9zdCk7CisKK3N0YXRpYyB2b2lkIG1tY19kb19yZWxlYXNlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWlmICgtLWhvc3QtPmNsYWltX2NudCkgeworCQkvKiBSZWxlYXNlIGZvciBuZXN0ZWQgY2xhaW0gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCWhvc3QtPmNsYWltZWQgPSAwOworCQlob3N0LT5jbGFpbWVyID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwKCZob3N0LT53cSk7CisJfQorfQorCit2b2lkIG1tY19ob3N0X2RlZXBlcl9kaXNhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1tY19ob3N0LCBkaXNhYmxlLndvcmspOworCisJLyogSWYgdGhlIGhvc3QgaXMgY2xhaW1lZCB0aGVuIHdlIGRvIG5vdCB3YW50IHRvIGRpc2FibGUgaXQgYW55bW9yZSAqLworCWlmICghbW1jX3RyeV9jbGFpbV9ob3N0KGhvc3QpKQorCQlyZXR1cm47CisJbW1jX2hvc3RfZG9fZGlzYWJsZShob3N0LCAxKTsKKwltbWNfZG9fcmVsZWFzZV9ob3N0KGhvc3QpOworfQorCisvKioKKyAqCW1tY19ob3N0X2xhenlfZGlzYWJsZSAtIGxhemlseSBkaXNhYmxlIGEgaG9zdC4KKyAqCUBob3N0OiBtbWMgaG9zdCB0byBkaXNhYmxlCisgKgorICoJSG9zdHMgdGhhdCBzdXBwb3J0IHBvd2VyIHNhdmluZyBjYW4gdXNlIHRoZSAnZW5hYmxlJyBhbmQgJ2Rpc2FibGUnCisgKgltZXRob2RzIHRvIGV4aXQgYW5kIGVudGVyIHBvd2VyIHNhdmluZyBzdGF0ZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uCisgKglzZWUgY29tbWVudHMgZm9yIHN0cnVjdCBtbWNfaG9zdF9vcHMuCisgKi8KK2ludCBtbWNfaG9zdF9sYXp5X2Rpc2FibGUoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWlmICghKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX0RJU0FCTEUpKQorCQlyZXR1cm4gMDsKKworCWlmIChob3N0LT5lbl9kaXNfcmVjdXJzKQorCQlyZXR1cm4gMDsKKworCWlmICgtLWhvc3QtPm5lc3RpbmdfY250KQorCQlyZXR1cm4gMDsKKworCWlmICghaG9zdC0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaG9zdC0+ZGlzYWJsZV9kZWxheSkgeworCQltbWNfc2NoZWR1bGVfZGVsYXllZF93b3JrKCZob3N0LT5kaXNhYmxlLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoaG9zdC0+ZGlzYWJsZV9kZWxheSkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIG1tY19ob3N0X2RvX2Rpc2FibGUoaG9zdCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19ob3N0X2xhenlfZGlzYWJsZSk7CisKKy8qKgogICoJbW1jX3JlbGVhc2VfaG9zdCAtIHJlbGVhc2UgYSBob3N0CiAgKglAaG9zdDogbW1jIGhvc3QgdG8gcmVsZWFzZQogICoKQEAgLTM5MywxNSArNTc0LDExIEBACiAgKi8KIHZvaWQgbW1jX3JlbGVhc2VfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCVdBUk5fT04oIWhvc3QtPmNsYWltZWQpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQlob3N0LT5jbGFpbWVkID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbW1jX2hvc3RfbGF6eV9kaXNhYmxlKGhvc3QpOwogCi0Jd2FrZV91cCgmaG9zdC0+d3EpOworCW1tY19kb19yZWxlYXNlX2hvc3QoaG9zdCk7CiB9CiAKIEVYUE9SVF9TWU1CT0wobW1jX3JlbGVhc2VfaG9zdCk7CkBAIC02ODcsNyArODY0LDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIG1tY19wb3dlcl91cChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7Ci0JaW50IGJpdCA9IGZscyhob3N0LT5vY3JfYXZhaWwpIC0gMTsKKwlpbnQgYml0OworCisJLyogSWYgb2NyIGlzIHNldCwgd2UgdXNlIGl0ICovCisJaWYgKGhvc3QtPm9jcikKKwkJYml0ID0gZmZzKGhvc3QtPm9jcikgLSAxOworCWVsc2UKKwkJYml0ID0gZmxzKGhvc3QtPm9jcl9hdmFpbCkgLSAxOwogCiAJaG9zdC0+aW9zLnZkZCA9IGJpdDsKIAlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CkBAIC05NDcsNiArMTEzMCw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogI2VuZGlmCiAKKwlpZiAoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfRElTQUJMRSkKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGlzYWJsZSk7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGV0ZWN0KTsKIAltbWNfZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIApAQCAtOTU4LDYgKzExNDMsOCBAQAogCQltbWNfY2xhaW1faG9zdChob3N0KTsKIAkJbW1jX2RldGFjaF9idXMoaG9zdCk7CiAJCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisJCW1tY19idXNfcHV0KGhvc3QpOworCQlyZXR1cm47CiAJfQogCW1tY19idXNfcHV0KGhvc3QpOwogCkBAIC05NjYsNiArMTE1Myw4MCBAQAogCW1tY19wb3dlcl9vZmYoaG9zdCk7CiB9CiAKK3ZvaWQgbW1jX3Bvd2VyX3NhdmVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJbW1jX2J1c19nZXQoaG9zdCk7CisKKwlpZiAoIWhvc3QtPmJ1c19vcHMgfHwgaG9zdC0+YnVzX2RlYWQgfHwgIWhvc3QtPmJ1c19vcHMtPnBvd2VyX3Jlc3RvcmUpIHsKKwkJbW1jX2J1c19wdXQoaG9zdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaG9zdC0+YnVzX29wcy0+cG93ZXJfc2F2ZSkKKwkJaG9zdC0+YnVzX29wcy0+cG93ZXJfc2F2ZShob3N0KTsKKworCW1tY19idXNfcHV0KGhvc3QpOworCisJbW1jX3Bvd2VyX29mZihob3N0KTsKK30KK0VYUE9SVF9TWU1CT0wobW1jX3Bvd2VyX3NhdmVfaG9zdCk7CisKK3ZvaWQgbW1jX3Bvd2VyX3Jlc3RvcmVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJbW1jX2J1c19nZXQoaG9zdCk7CisKKwlpZiAoIWhvc3QtPmJ1c19vcHMgfHwgaG9zdC0+YnVzX2RlYWQgfHwgIWhvc3QtPmJ1c19vcHMtPnBvd2VyX3Jlc3RvcmUpIHsKKwkJbW1jX2J1c19wdXQoaG9zdCk7CisJCXJldHVybjsKKwl9CisKKwltbWNfcG93ZXJfdXAoaG9zdCk7CisJaG9zdC0+YnVzX29wcy0+cG93ZXJfcmVzdG9yZShob3N0KTsKKworCW1tY19idXNfcHV0KGhvc3QpOworfQorRVhQT1JUX1NZTUJPTChtbWNfcG93ZXJfcmVzdG9yZV9ob3N0KTsKKworaW50IG1tY19jYXJkX2F3YWtlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpbnQgZXJyID0gLUVOT1NZUzsKKworCW1tY19idXNfZ2V0KGhvc3QpOworCisJaWYgKGhvc3QtPmJ1c19vcHMgJiYgIWhvc3QtPmJ1c19kZWFkICYmIGhvc3QtPmJ1c19vcHMtPmF3YWtlKQorCQllcnIgPSBob3N0LT5idXNfb3BzLT5hd2FrZShob3N0KTsKKworCW1tY19idXNfcHV0KGhvc3QpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wobW1jX2NhcmRfYXdha2UpOworCitpbnQgbW1jX2NhcmRfc2xlZXAoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWludCBlcnIgPSAtRU5PU1lTOworCisJbW1jX2J1c19nZXQoaG9zdCk7CisKKwlpZiAoaG9zdC0+YnVzX29wcyAmJiAhaG9zdC0+YnVzX2RlYWQgJiYgaG9zdC0+YnVzX29wcy0+YXdha2UpCisJCWVyciA9IGhvc3QtPmJ1c19vcHMtPnNsZWVwKGhvc3QpOworCisJbW1jX2J1c19wdXQoaG9zdCk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChtbWNfY2FyZF9zbGVlcCk7CisKK2ludCBtbWNfY2FyZF9jYW5fc2xlZXAoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IGhvc3QtPmNhcmQ7CisKKwlpZiAoY2FyZCAmJiBtbWNfY2FyZF9tbWMoY2FyZCkgJiYgY2FyZC0+ZXh0X2NzZC5yZXYgPj0gMykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19jYXJkX2Nhbl9zbGVlcCk7CisKICNpZmRlZiBDT05GSUdfUE0KIAogLyoqCkBAIC05NzUsMjcgKzEyMzYsMzYgQEAKICAqLwogaW50IG1tY19zdXNwZW5kX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJaW50IGVyciA9IDA7CisKKwlpZiAoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfRElTQUJMRSkKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGlzYWJsZSk7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGV0ZWN0KTsKIAltbWNfZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCW1tY19idXNfZ2V0KGhvc3QpOwogCWlmIChob3N0LT5idXNfb3BzICYmICFob3N0LT5idXNfZGVhZCkgewogCQlpZiAoaG9zdC0+YnVzX29wcy0+c3VzcGVuZCkKLQkJCWhvc3QtPmJ1c19vcHMtPnN1c3BlbmQoaG9zdCk7Ci0JCWlmICghaG9zdC0+YnVzX29wcy0+cmVzdW1lKSB7CisJCQllcnIgPSBob3N0LT5idXNfb3BzLT5zdXNwZW5kKGhvc3QpOworCQlpZiAoZXJyID09IC1FTk9TWVMgfHwgIWhvc3QtPmJ1c19vcHMtPnJlc3VtZSkgeworCQkJLyoKKwkJCSAqIFdlIHNpbXBseSAicmVtb3ZlIiB0aGUgY2FyZCBpbiB0aGlzIGNhc2UuCisJCQkgKiBJdCB3aWxsIGJlIHJlZGV0ZWN0ZWQgb24gcmVzdW1lLgorCQkJICovCiAJCQlpZiAoaG9zdC0+YnVzX29wcy0+cmVtb3ZlKQogCQkJCWhvc3QtPmJ1c19vcHMtPnJlbW92ZShob3N0KTsKLQogCQkJbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJCQltbWNfZGV0YWNoX2J1cyhob3N0KTsKIAkJCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisJCQllcnIgPSAwOwogCQl9CiAJfQogCW1tY19idXNfcHV0KGhvc3QpOwogCi0JbW1jX3Bvd2VyX29mZihob3N0KTsKKwlpZiAoIWVycikKKwkJbW1jX3Bvd2VyX29mZihob3N0KTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIEVYUE9SVF9TWU1CT0wobW1jX3N1c3BlbmRfaG9zdCk7CkBAIC0xMDA2LDEyICsxMjc2LDI2IEBACiAgKi8KIGludCBtbWNfcmVzdW1lX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQogeworCWludCBlcnIgPSAwOworCiAJbW1jX2J1c19nZXQoaG9zdCk7CiAJaWYgKGhvc3QtPmJ1c19vcHMgJiYgIWhvc3QtPmJ1c19kZWFkKSB7CiAJCW1tY19wb3dlcl91cChob3N0KTsKIAkJbW1jX3NlbGVjdF92b2x0YWdlKGhvc3QsIGhvc3QtPm9jcik7CiAJCUJVR19PTighaG9zdC0+YnVzX29wcy0+cmVzdW1lKTsKLQkJaG9zdC0+YnVzX29wcy0+cmVzdW1lKGhvc3QpOworCQllcnIgPSBob3N0LT5idXNfb3BzLT5yZXN1bWUoaG9zdCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBlcnJvciAlZCBkdXJpbmcgcmVzdW1lICIKKwkJCQkJICAgICIoY2FyZCB3YXMgcmVtb3ZlZD8pXG4iLAorCQkJCQkgICAgbW1jX2hvc3RuYW1lKGhvc3QpLCBlcnIpOworCQkJaWYgKGhvc3QtPmJ1c19vcHMtPnJlbW92ZSkKKwkJCQlob3N0LT5idXNfb3BzLT5yZW1vdmUoaG9zdCk7CisJCQltbWNfY2xhaW1faG9zdChob3N0KTsKKwkJCW1tY19kZXRhY2hfYnVzKGhvc3QpOworCQkJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKKwkJCS8qIG5vIG5lZWQgdG8gYm90aGVyIHVwcGVyIGxheWVycyAqLworCQkJZXJyID0gMDsKKwkJfQogCX0KIAltbWNfYnVzX3B1dChob3N0KTsKIApAQCAtMTAyMSw3ICsxMzA1LDcgQEAKIAkgKi8KIAltbWNfZGV0ZWN0X2NoYW5nZShob3N0LCAxKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIEVYUE9SVF9TWU1CT0wobW1jX3Jlc3VtZV9ob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmgKaW5kZXggYzgxOWVmZi4uNjdhZTZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmgKQEAgLTE2LDEwICsxNiwxNCBAQAogI2RlZmluZSBNTUNfQ01EX1JFVFJJRVMgICAgICAgIDMKIAogc3RydWN0IG1tY19idXNfb3BzIHsKKwlpbnQgKCphd2FrZSkoc3RydWN0IG1tY19ob3N0ICopOworCWludCAoKnNsZWVwKShzdHJ1Y3QgbW1jX2hvc3QgKik7CiAJdm9pZCAoKnJlbW92ZSkoc3RydWN0IG1tY19ob3N0ICopOwogCXZvaWQgKCpkZXRlY3QpKHN0cnVjdCBtbWNfaG9zdCAqKTsKLQl2b2lkICgqc3VzcGVuZCkoc3RydWN0IG1tY19ob3N0ICopOwotCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBtbWNfaG9zdCAqKTsKKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgbW1jX2hvc3QgKik7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3QgbW1jX2hvc3QgKik7CisJdm9pZCAoKnBvd2VyX3NhdmUpKHN0cnVjdCBtbWNfaG9zdCAqKTsKKwl2b2lkICgqcG93ZXJfcmVzdG9yZSkoc3RydWN0IG1tY19ob3N0ICopOwogfTsKIAogdm9pZCBtbWNfYXR0YWNoX2J1cyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyAqb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKaW5kZXggNWU5NDVlNi4uYTI2OGQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKQEAgLTgzLDYgKzgzLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+d3EpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZob3N0LT5kZXRlY3QsIG1tY19yZXNjYW4pOworCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJmhvc3QtPmRpc2FibGUsIG1tY19ob3N0X2RlZXBlcl9kaXNhYmxlKTsKIAogCS8qCiAJICogQnkgZGVmYXVsdCwgaG9zdHMgZG8gbm90IHN1cHBvcnQgU0dJTyBvciBsYXJnZSByZXF1ZXN0cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5oIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKaW5kZXggYzJkYzNkMi4uOGM4N2UxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKQEAgLTE0LDUgKzE0LDcgQEAKIGludCBtbWNfcmVnaXN0ZXJfaG9zdF9jbGFzcyh2b2lkKTsKIHZvaWQgbW1jX3VucmVnaXN0ZXJfaG9zdF9jbGFzcyh2b2lkKTsKIAordm9pZCBtbWNfaG9zdF9kZWVwZXJfZGlzYWJsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKaW5kZXggMmZiOWQ1Zi4uYmZlZmNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCkBAIC0xNjAsNyArMTYwLDYgQEAKIHsKIAlpbnQgZXJyOwogCXU4ICpleHRfY3NkOwotCXVuc2lnbmVkIGludCBleHRfY3NkX3N0cnVjdDsKIAogCUJVR19PTighY2FyZCk7CiAKQEAgLTE4MCwxMSArMTc5LDExIEBACiAKIAllcnIgPSBtbWNfc2VuZF9leHRfY3NkKGNhcmQsIGV4dF9jc2QpOwogCWlmIChlcnIpIHsKLQkJLyoKLQkJICogV2UgYWxsIGhvc3RzIHRoYXQgY2Fubm90IHBlcmZvcm0gdGhlIGNvbW1hbmQKLQkJICogdG8gZmFpbCBtb3JlIGdyYWNlZnVsbHkKLQkJICovCi0JCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJLyogSWYgdGhlIGhvc3Qgb3IgdGhlIGNhcmQgY2FuJ3QgZG8gdGhlIHN3aXRjaCwKKwkJICogZmFpbCBtb3JlIGdyYWNlZnVsbHkuICovCisJCWlmICgoZXJyICE9IC1FSU5WQUwpCisJCSAmJiAoZXJyICE9IC1FTk9TWVMpCisJCSAmJiAoZXJyICE9IC1FRkFVTFQpKQogCQkJZ290byBvdXQ7CiAKIAkJLyoKQEAgLTIwNywxNiArMjA2LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWV4dF9jc2Rfc3RydWN0ID0gZXh0X2NzZFtFWFRfQ1NEX1JFVl07Ci0JaWYgKGV4dF9jc2Rfc3RydWN0ID4gMykgeworCWNhcmQtPmV4dF9jc2QucmV2ID0gZXh0X2NzZFtFWFRfQ1NEX1JFVl07CisJaWYgKGNhcmQtPmV4dF9jc2QucmV2ID4gMykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbmlzZWQgRVhUX0NTRCBzdHJ1Y3R1cmUgIgogCQkJInZlcnNpb24gJWRcbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwKLQkJCWV4dF9jc2Rfc3RydWN0KTsKKwkJCWNhcmQtPmV4dF9jc2QucmV2KTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGV4dF9jc2Rfc3RydWN0ID49IDIpIHsKKwlpZiAoY2FyZC0+ZXh0X2NzZC5yZXYgPj0gMikgewogCQljYXJkLT5leHRfY3NkLnNlY3RvcnMgPQogCQkJZXh0X2NzZFtFWFRfQ1NEX1NFQ19DTlQgKyAwXSA8PCAwIHwKIAkJCWV4dF9jc2RbRVhUX0NTRF9TRUNfQ05UICsgMV0gPDwgOCB8CkBAIC0yNDEsNiArMjQwLDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChjYXJkLT5leHRfY3NkLnJldiA+PSAzKSB7CisJCXU4IHNhX3NoaWZ0ID0gZXh0X2NzZFtFWFRfQ1NEX1NfQV9USU1FT1VUXTsKKworCQkvKiBTbGVlcCAvIGF3YWtlIHRpbWVvdXQgaW4gMTAwbnMgdW5pdHMgKi8KKwkJaWYgKHNhX3NoaWZ0ID4gMCAmJiBzYV9zaGlmdCA8PSAweDE3KQorCQkJY2FyZC0+ZXh0X2NzZC5zYV90aW1lb3V0ID0KKwkJCQkJMSA8PCBleHRfY3NkW0VYVF9DU0RfU19BX1RJTUVPVVRdOworCX0KKwogb3V0OgogCWtmcmVlKGV4dF9jc2QpOwogCkBAIC00MDgsMTIgKzQxNiwxNyBAQAogCQkoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfTU1DX0hJR0hTUEVFRCkpIHsKIAkJZXJyID0gbW1jX3N3aXRjaChjYXJkLCBFWFRfQ1NEX0NNRF9TRVRfTk9STUFMLAogCQkJRVhUX0NTRF9IU19USU1JTkcsIDEpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyICYmIGVyciAhPSAtRUJBRE1TRykKIAkJCWdvdG8gZnJlZV9jYXJkOwogCi0JCW1tY19jYXJkX3NldF9oaWdoc3BlZWQoY2FyZCk7Ci0KLQkJbW1jX3NldF90aW1pbmcoY2FyZC0+aG9zdCwgTU1DX1RJTUlOR19NTUNfSFMpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc3dpdGNoIHRvIGhpZ2hzcGVlZCBmYWlsZWRcbiIsCisJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKKwkJCWVyciA9IDA7CisJCX0gZWxzZSB7CisJCQltbWNfY2FyZF9zZXRfaGlnaHNwZWVkKGNhcmQpOworCQkJbW1jX3NldF90aW1pbmcoY2FyZC0+aG9zdCwgTU1DX1RJTUlOR19NTUNfSFMpOworCQl9CiAJfQogCiAJLyoKQEAgLTQ0OCwxMCArNDYxLDE3IEBACiAJCWVyciA9IG1tY19zd2l0Y2goY2FyZCwgRVhUX0NTRF9DTURfU0VUX05PUk1BTCwKIAkJCQkgRVhUX0NTRF9CVVNfV0lEVEgsIGV4dF9jc2RfYml0KTsKIAotCQlpZiAoZXJyKQorCQlpZiAoZXJyICYmIGVyciAhPSAtRUJBRE1TRykKIAkJCWdvdG8gZnJlZV9jYXJkOwogCi0JCW1tY19zZXRfYnVzX3dpZHRoKGNhcmQtPmhvc3QsIGJ1c193aWR0aCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoICVkICIKKwkJCSAgICAgICAiZmFpbGVkXG4iLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCisJCQkgICAgICAgMSA8PCBidXNfd2lkdGgpOworCQkJZXJyID0gMDsKKwkJfSBlbHNlIHsKKwkJCW1tY19zZXRfYnVzX3dpZHRoKGNhcmQtPmhvc3QsIGJ1c193aWR0aCk7CisJCX0KIAl9CiAKIAlpZiAoIW9sZGNhcmQpCkBAIC01MDcsMTIgKzUyNywxMCBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRQotCiAvKgogICogU3VzcGVuZCBjYWxsYmFjayBmcm9tIGhvc3QuCiAgKi8KLXN0YXRpYyB2b2lkIG1tY19zdXNwZW5kKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyBpbnQgbW1jX3N1c3BlbmQoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewogCUJVR19PTighaG9zdCk7CiAJQlVHX09OKCFob3N0LT5jYXJkKTsKQEAgLTUyMiw2ICs1NDAsOCBAQAogCQltbWNfZGVzZWxlY3RfY2FyZHMoaG9zdCk7CiAJaG9zdC0+Y2FyZC0+c3RhdGUgJj0gfk1NQ19TVEFURV9ISUdIU1BFRUQ7CiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTMwLDcgKzU1MCw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGRldGVybWluZSBpZiB0aGUgc2FtZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQKICAqIGFuZCwgaWYgc28sIHJlc3RvcmUgYWxsIHN0YXRlIHRvIGl0LgogICovCi1zdGF0aWMgdm9pZCBtbWNfcmVzdW1lKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyBpbnQgbW1jX3Jlc3VtZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CiAJaW50IGVycjsKIApAQCAtNTQxLDMwICs1NjEsOTkgQEAKIAllcnIgPSBtbWNfaW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCk7CiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAotCWlmIChlcnIpIHsKLQkJbW1jX3JlbW92ZShob3N0KTsKLQotCQltbWNfY2xhaW1faG9zdChob3N0KTsKLQkJbW1jX2RldGFjaF9idXMoaG9zdCk7Ci0JCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7Ci0JfQotCisJcmV0dXJuIGVycjsKIH0KIAotI2Vsc2UKK3N0YXRpYyB2b2lkIG1tY19wb3dlcl9yZXN0b3JlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlob3N0LT5jYXJkLT5zdGF0ZSAmPSB+TU1DX1NUQVRFX0hJR0hTUEVFRDsKKwltbWNfY2xhaW1faG9zdChob3N0KTsKKwltbWNfaW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCk7CisJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKK30KIAotI2RlZmluZSBtbWNfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIG1tY19yZXN1bWUgTlVMTAorc3RhdGljIGludCBtbWNfc2xlZXAoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IGhvc3QtPmNhcmQ7CisJaW50IGVyciA9IC1FTk9TWVM7CiAKLSNlbmRpZgorCWlmIChjYXJkICYmIGNhcmQtPmV4dF9jc2QucmV2ID49IDMpIHsKKwkJZXJyID0gbW1jX2NhcmRfc2xlZXBhd2FrZShob3N0LCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQlwcl9kZWJ1ZygiJXM6IEVycm9yICVkIHdoaWxlIHB1dHRpbmcgY2FyZCBpbnRvIHNsZWVwIiwKKwkJCQkgbW1jX2hvc3RuYW1lKGhvc3QpLCBlcnIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbW1jX2F3YWtlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBob3N0LT5jYXJkOworCWludCBlcnIgPSAtRU5PU1lTOworCisJaWYgKGNhcmQgJiYgY2FyZC0+ZXh0X2NzZC5yZXYgPj0gMykgeworCQllcnIgPSBtbWNfY2FyZF9zbGVlcGF3YWtlKGhvc3QsIDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXByX2RlYnVnKCIlczogRXJyb3IgJWQgd2hpbGUgYXdha2luZyBzbGVlcGluZyBjYXJkIiwKKwkJCQkgbW1jX2hvc3RuYW1lKGhvc3QpLCBlcnIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfb3BzID0geworCS5hd2FrZSA9IG1tY19hd2FrZSwKKwkuc2xlZXAgPSBtbWNfc2xlZXAsCiAJLnJlbW92ZSA9IG1tY19yZW1vdmUsCiAJLmRldGVjdCA9IG1tY19kZXRlY3QsCiAJLnN1c3BlbmQgPSBtbWNfc3VzcGVuZCwKIAkucmVzdW1lID0gbW1jX3Jlc3VtZSwKKwkucG93ZXJfcmVzdG9yZSA9IG1tY19wb3dlcl9yZXN0b3JlLAogfTsKIAorc3RhdGljIHZvaWQgbW1jX2F0dGFjaF9idXNfb3BzKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwltbWNfYXR0YWNoX2J1cyhob3N0LCAmbW1jX29wcyk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgbW1jX29wcyA9IHsKKwkuYXdha2UgPSBtbWNfYXdha2UsCisJLnNsZWVwID0gbW1jX3NsZWVwLAorCS5yZW1vdmUgPSBtbWNfcmVtb3ZlLAorCS5kZXRlY3QgPSBtbWNfZGV0ZWN0LAorCS5zdXNwZW5kID0gTlVMTCwKKwkucmVzdW1lID0gTlVMTCwKKwkucG93ZXJfcmVzdG9yZSA9IG1tY19wb3dlcl9yZXN0b3JlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfb3BzX3Vuc2FmZSA9IHsKKwkuYXdha2UgPSBtbWNfYXdha2UsCisJLnNsZWVwID0gbW1jX3NsZWVwLAorCS5yZW1vdmUgPSBtbWNfcmVtb3ZlLAorCS5kZXRlY3QgPSBtbWNfZGV0ZWN0LAorCS5zdXNwZW5kID0gbW1jX3N1c3BlbmQsCisJLnJlc3VtZSA9IG1tY19yZXN1bWUsCisJLnBvd2VyX3Jlc3RvcmUgPSBtbWNfcG93ZXJfcmVzdG9yZSwKK307CisKK3N0YXRpYyB2b2lkIG1tY19hdHRhY2hfYnVzX29wcyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJY29uc3Qgc3RydWN0IG1tY19idXNfb3BzICpidXNfb3BzOworCisJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX05PTlJFTU9WQUJMRSkKKwkJYnVzX29wcyA9ICZtbWNfb3BzX3Vuc2FmZTsKKwllbHNlCisJCWJ1c19vcHMgPSAmbW1jX29wczsKKwltbWNfYXR0YWNoX2J1cyhob3N0LCBidXNfb3BzKTsKK30KKworI2VuZGlmCisKIC8qCiAgKiBTdGFydGluZyBwb2ludCBmb3IgTU1DIGNhcmQgaW5pdC4KICAqLwpAQCAtNTc1LDcgKzY2NCw3IEBACiAJQlVHX09OKCFob3N0KTsKIAlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKIAotCW1tY19hdHRhY2hfYnVzKGhvc3QsICZtbWNfb3BzKTsKKwltbWNfYXR0YWNoX2J1c19vcHMoaG9zdCk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gZ2V0IE9DUiBhIGRpZmZlcmVudCB3YXkgZm9yIFNQSS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKaW5kZXggMzRjZTI3MC4uZDJjYjVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKQEAgLTU3LDYgKzU3LDQyIEBACiAJcmV0dXJuIF9tbWNfc2VsZWN0X2NhcmQoaG9zdCwgTlVMTCk7CiB9CiAKK2ludCBtbWNfY2FyZF9zbGVlcGF3YWtlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IHNsZWVwKQoreworCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQ7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gaG9zdC0+Y2FyZDsKKwlpbnQgZXJyOworCisJaWYgKHNsZWVwKQorCQltbWNfZGVzZWxlY3RfY2FyZHMoaG9zdCk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBtbWNfY29tbWFuZCkpOworCisJY21kLm9wY29kZSA9IE1NQ19TTEVFUF9BV0FLRTsKKwljbWQuYXJnID0gY2FyZC0+cmNhIDw8IDE2OworCWlmIChzbGVlcCkKKwkJY21kLmFyZyB8PSAxIDw8IDE1OworCisJY21kLmZsYWdzID0gTU1DX1JTUF9SMUIgfCBNTUNfQ01EX0FDOworCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoaG9zdCwgJmNtZCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogSWYgdGhlIGhvc3QgZG9lcyBub3Qgd2FpdCB3aGlsZSB0aGUgY2FyZCBzaWduYWxzIGJ1c3ksIHRoZW4gd2Ugd2lsbAorCSAqIHdpbGwgaGF2ZSB0byB3YWl0IHRoZSBzbGVlcC9hd2FrZSB0aW1lb3V0LiAgTm90ZSwgd2UgY2Fubm90IHVzZSB0aGUKKwkgKiBTRU5EX1NUQVRVUyBjb21tYW5kIHRvIHBvbGwgdGhlIHN0YXR1cyBiZWNhdXNlIHRoYXQgY29tbWFuZCAoYW5kIG1vc3QKKwkgKiBvdGhlcnMpIGlzIGludmFsaWQgd2hpbGUgdGhlIGNhcmQgc2xlZXBzLgorCSAqLworCWlmICghKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWSkpCisJCW1tY19kZWxheShESVZfUk9VTkRfVVAoY2FyZC0+ZXh0X2NzZC5zYV90aW1lb3V0LCAxMDAwMCkpOworCisJaWYgKCFzbGVlcCkKKwkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGNhcmQpOworCisJcmV0dXJuIGVycjsKK30KKwogaW50IG1tY19nb19pZGxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKIAlpbnQgZXJyOwpAQCAtMzU0LDYgKzM5MCw3IEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOworCXUzMiBzdGF0dXM7CiAKIAlCVUdfT04oIWNhcmQpOwogCUJVR19PTighY2FyZC0+aG9zdCk7CkBAIC0zNzEsNiArNDA4LDI4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCS8qIE11c3QgY2hlY2sgc3RhdHVzIHRvIGJlIHN1cmUgb2Ygbm8gZXJyb3JzICovCisJZG8geworCQllcnIgPSBtbWNfc2VuZF9zdGF0dXMoY2FyZCwgJnN0YXR1cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoY2FyZC0+aG9zdC0+Y2FwcyAmIE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZKQorCQkJYnJlYWs7CisJCWlmIChtbWNfaG9zdF9pc19zcGkoY2FyZC0+aG9zdCkpCisJCQlicmVhazsKKwl9IHdoaWxlIChSMV9DVVJSRU5UX1NUQVRFKHN0YXR1cykgPT0gNyk7CisKKwlpZiAobW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpKSB7CisJCWlmIChzdGF0dXMgJiBSMV9TUElfSUxMRUdBTF9DT01NQU5EKQorCQkJcmV0dXJuIC1FQkFETVNHOworCX0gZWxzZSB7CisJCWlmIChzdGF0dXMgJiAweEZERkZBMDAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVuZXhwZWN0ZWQgc3RhdHVzICUjeCBhZnRlciAiCisJCQkgICAgICAgInN3aXRjaCIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAmIFIxX1NXSVRDSF9FUlJPUikKKwkJCXJldHVybiAtRUJBRE1TRzsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmggYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuaAppbmRleCAxNzg1NGJmLi42NTNlYjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuaApAQCAtMjUsNiArMjUsNyBAQAogaW50IG1tY19zZW5kX2NpZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiAqY2lkKTsKIGludCBtbWNfc3BpX3JlYWRfb2NyKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IGhpZ2hjYXAsIHUzMiAqb2NycCk7CiBpbnQgbW1jX3NwaV9zZXRfY3JjKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IHVzZV9jcmMpOworaW50IG1tY19jYXJkX3NsZWVwYXdha2Uoc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgc2xlZXApOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZC5jIGIvZHJpdmVycy9tbWMvY29yZS9zZC5jCmluZGV4IDdhZDY0NmYuLjEwYjJhNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2QuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkLmMKQEAgLTIxMCwxMSArMjEwLDExIEBACiAKIAllcnIgPSBtbWNfc2Rfc3dpdGNoKGNhcmQsIDAsIDAsIDEsIHN0YXR1cyk7CiAJaWYgKGVycikgewotCQkvKgotCQkgKiBXZSBhbGwgaG9zdHMgdGhhdCBjYW5ub3QgcGVyZm9ybSB0aGUgY29tbWFuZAotCQkgKiB0byBmYWlsIG1vcmUgZ3JhY2VmdWxseQotCQkgKi8KLQkJaWYgKGVyciAhPSAtRUlOVkFMKQorCQkvKiBJZiB0aGUgaG9zdCBvciB0aGUgY2FyZCBjYW4ndCBkbyB0aGUgc3dpdGNoLAorCQkgKiBmYWlsIG1vcmUgZ3JhY2VmdWxseS4gKi8KKwkJaWYgKChlcnIgIT0gLUVJTlZBTCkKKwkJICYmIChlcnIgIT0gLUVOT1NZUykKKwkJICYmIChlcnIgIT0gLUVGQVVMVCkpCiAJCQlnb3RvIG91dDsKIAogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcHJvYmxlbSByZWFkaW5nIHN3aXRjaCAiCkBAIC01NjEsMTIgKzU2MSwxMCBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRQotCiAvKgogICogU3VzcGVuZCBjYWxsYmFjayBmcm9tIGhvc3QuCiAgKi8KLXN0YXRpYyB2b2lkIG1tY19zZF9zdXNwZW5kKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyBpbnQgbW1jX3NkX3N1c3BlbmQoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewogCUJVR19PTighaG9zdCk7CiAJQlVHX09OKCFob3N0LT5jYXJkKTsKQEAgLTU3Niw2ICs1NzQsOCBAQAogCQltbWNfZGVzZWxlY3RfY2FyZHMoaG9zdCk7CiAJaG9zdC0+Y2FyZC0+c3RhdGUgJj0gfk1NQ19TVEFURV9ISUdIU1BFRUQ7CiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTg0LDcgKzU4NCw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGRldGVybWluZSBpZiB0aGUgc2FtZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQKICAqIGFuZCwgaWYgc28sIHJlc3RvcmUgYWxsIHN0YXRlIHRvIGl0LgogICovCi1zdGF0aWMgdm9pZCBtbWNfc2RfcmVzdW1lKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyBpbnQgbW1jX3NkX3Jlc3VtZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CiAJaW50IGVycjsKIApAQCAtNTk1LDMwICs1OTUsNjMgQEAKIAllcnIgPSBtbWNfc2RfaW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCk7CiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAotCWlmIChlcnIpIHsKLQkJbW1jX3NkX3JlbW92ZShob3N0KTsKLQotCQltbWNfY2xhaW1faG9zdChob3N0KTsKLQkJbW1jX2RldGFjaF9idXMoaG9zdCk7Ci0JCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7Ci0JfQotCisJcmV0dXJuIGVycjsKIH0KIAotI2Vsc2UKK3N0YXRpYyB2b2lkIG1tY19zZF9wb3dlcl9yZXN0b3JlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlob3N0LT5jYXJkLT5zdGF0ZSAmPSB+TU1DX1NUQVRFX0hJR0hTUEVFRDsKKwltbWNfY2xhaW1faG9zdChob3N0KTsKKwltbWNfc2RfaW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCk7CisJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKK30KIAotI2RlZmluZSBtbWNfc2Rfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIG1tY19zZF9yZXN1bWUgTlVMTAotCi0jZW5kaWYKKyNpZmRlZiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfc2Rfb3BzID0gewogCS5yZW1vdmUgPSBtbWNfc2RfcmVtb3ZlLAogCS5kZXRlY3QgPSBtbWNfc2RfZGV0ZWN0LAogCS5zdXNwZW5kID0gbW1jX3NkX3N1c3BlbmQsCiAJLnJlc3VtZSA9IG1tY19zZF9yZXN1bWUsCisJLnBvd2VyX3Jlc3RvcmUgPSBtbWNfc2RfcG93ZXJfcmVzdG9yZSwKIH07CiAKK3N0YXRpYyB2b2lkIG1tY19zZF9hdHRhY2hfYnVzX29wcyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJbW1jX2F0dGFjaF9idXMoaG9zdCwgJm1tY19zZF9vcHMpOworfQorCisjZWxzZQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19zZF9vcHMgPSB7CisJLnJlbW92ZSA9IG1tY19zZF9yZW1vdmUsCisJLmRldGVjdCA9IG1tY19zZF9kZXRlY3QsCisJLnN1c3BlbmQgPSBOVUxMLAorCS5yZXN1bWUgPSBOVUxMLAorCS5wb3dlcl9yZXN0b3JlID0gbW1jX3NkX3Bvd2VyX3Jlc3RvcmUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19zZF9vcHNfdW5zYWZlID0geworCS5yZW1vdmUgPSBtbWNfc2RfcmVtb3ZlLAorCS5kZXRlY3QgPSBtbWNfc2RfZGV0ZWN0LAorCS5zdXNwZW5kID0gbW1jX3NkX3N1c3BlbmQsCisJLnJlc3VtZSA9IG1tY19zZF9yZXN1bWUsCisJLnBvd2VyX3Jlc3RvcmUgPSBtbWNfc2RfcG93ZXJfcmVzdG9yZSwKK307CisKK3N0YXRpYyB2b2lkIG1tY19zZF9hdHRhY2hfYnVzX29wcyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJY29uc3Qgc3RydWN0IG1tY19idXNfb3BzICpidXNfb3BzOworCisJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX05PTlJFTU9WQUJMRSkKKwkJYnVzX29wcyA9ICZtbWNfc2Rfb3BzX3Vuc2FmZTsKKwllbHNlCisJCWJ1c19vcHMgPSAmbW1jX3NkX29wczsKKwltbWNfYXR0YWNoX2J1cyhob3N0LCBidXNfb3BzKTsKK30KKworI2VuZGlmCisKIC8qCiAgKiBTdGFydGluZyBwb2ludCBmb3IgU0QgY2FyZCBpbml0LgogICovCkBAIC02MjksNyArNjYyLDcgQEAKIAlCVUdfT04oIWhvc3QpOwogCVdBUk5fT04oIWhvc3QtPmNsYWltZWQpOwogCi0JbW1jX2F0dGFjaF9idXMoaG9zdCwgJm1tY19zZF9vcHMpOworCW1tY19zZF9hdHRhY2hfYnVzX29wcyhob3N0KTsKIAogCS8qCiAJICogV2UgbmVlZCB0byBnZXQgT0NSIGEgZGlmZmVyZW50IHdheSBmb3IgU1BJLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCBmYjk5Y2NmLi5jZGI4NDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtMTY1LDYgKzE2NSwyOSBAQAogfQogCiAvKgorICogSWYgZGVzaXJlZCwgZGlzY29ubmVjdCB0aGUgcHVsbC11cCByZXNpc3RvciBvbiBDRC9EQVRbM10gKHBpbiAxKQorICogb2YgdGhlIGNhcmQuIFRoaXMgbWF5IGJlIHJlcXVpcmVkIG9uIGNlcnRhaW4gc2V0dXBzIG9mIGJvYXJkcywKKyAqIGNvbnRyb2xsZXJzIGFuZCBlbWJlZGRlZCBzZGlvIGRldmljZSB3aGljaCBkbyBub3QgbmVlZCB0aGUgY2FyZCdzCisgKiBwdWxsLXVwLiBBcyBhIHJlc3VsdCwgY2FyZCBkZXRlY3Rpb24gaXMgZGlzYWJsZWQgYW5kIHBvd2VyIGlzIHNhdmVkLgorICovCitzdGF0aWMgaW50IHNkaW9fZGlzYWJsZV9jZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJaW50IHJldDsKKwl1OCBjdHJsOworCisJaWYgKCFjYXJkLT5jY2NyLmRpc2FibGVfY2QpCisJCXJldHVybiAwOworCisJcmV0ID0gbW1jX2lvX3J3X2RpcmVjdChjYXJkLCAwLCAwLCBTRElPX0NDQ1JfSUYsIDAsICZjdHJsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJY3RybCB8PSBTRElPX0JVU19DRF9ESVNBQkxFOworCisJcmV0dXJuIG1tY19pb19yd19kaXJlY3QoY2FyZCwgMSwgMCwgU0RJT19DQ0NSX0lGLCBjdHJsLCBOVUxMKTsKK30KKworLyoKICAqIFRlc3QgaWYgdGhlIGNhcmQgc3VwcG9ydHMgaGlnaC1zcGVlZCBtb2RlIGFuZCwgaWYgc28sIHN3aXRjaCB0byBpdC4KICAqLwogc3RhdGljIGludCBzZGlvX2VuYWJsZV9ocyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCkBAIC0xOTUsNiArMjE4LDEzNSBAQAogfQogCiAvKgorICogSGFuZGxlIHRoZSBkZXRlY3Rpb24gYW5kIGluaXRpYWxpc2F0aW9uIG9mIGEgY2FyZC4KKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBhIHJlc3VtZSwgIm9sZGNhcmQiIHdpbGwgY29udGFpbiB0aGUgY2FyZAorICogd2UncmUgdHJ5aW5nIHRvIHJlaW5pdGlhbGlzZS4KKyAqLworc3RhdGljIGludCBtbWNfc2Rpb19pbml0X2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyLAorCQkJICAgICAgc3RydWN0IG1tY19jYXJkICpvbGRjYXJkKQoreworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCisJQlVHX09OKCFob3N0KTsKKwlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKKworCS8qCisJICogSW5mb3JtIHRoZSBjYXJkIG9mIHRoZSB2b2x0YWdlCisJICovCisJZXJyID0gbW1jX3NlbmRfaW9fb3BfY29uZChob3N0LCBob3N0LT5vY3IsICZvY3IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCisJLyoKKwkgKiBGb3IgU1BJLCBlbmFibGUgQ1JDIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCWlmIChtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKKwkJZXJyID0gbW1jX3NwaV9zZXRfY3JjKGhvc3QsIHVzZV9zcGlfY3JjKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0KKworCS8qCisJICogQWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUuCisJICovCisJY2FyZCA9IG1tY19hbGxvY19jYXJkKGhvc3QsIE5VTEwpOworCWlmIChJU19FUlIoY2FyZCkpIHsKKwkJZXJyID0gUFRSX0VSUihjYXJkKTsKKwkJZ290byBlcnI7CisJfQorCisJY2FyZC0+dHlwZSA9IE1NQ19UWVBFX1NESU87CisKKwkvKgorCSAqIEZvciBuYXRpdmUgYnVzc2VzOiAgc2V0IGNhcmQgUkNBIGFuZCBxdWl0IG9wZW4gZHJhaW4gbW9kZS4KKwkgKi8KKwlpZiAoIW1tY19ob3N0X2lzX3NwaShob3N0KSkgeworCQllcnIgPSBtbWNfc2VuZF9yZWxhdGl2ZV9hZGRyKGhvc3QsICZjYXJkLT5yY2EpOworCQlpZiAoZXJyKQorCQkJZ290byByZW1vdmU7CisKKwkJbW1jX3NldF9idXNfbW9kZShob3N0LCBNTUNfQlVTTU9ERV9QVVNIUFVMTCk7CisJfQorCisJLyoKKwkgKiBTZWxlY3QgY2FyZCwgYXMgYWxsIGZvbGxvd2luZyBjb21tYW5kcyByZWx5IG9uIHRoYXQuCisJICovCisJaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKKwkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGNhcmQpOworCQlpZiAoZXJyKQorCQkJZ290byByZW1vdmU7CisJfQorCisJLyoKKwkgKiBSZWFkIHRoZSBjb21tb24gcmVnaXN0ZXJzLgorCSAqLworCWVyciA9IHNkaW9fcmVhZF9jY2NyKGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gcmVtb3ZlOworCisJLyoKKwkgKiBSZWFkIHRoZSBjb21tb24gQ0lTIHR1cGxlcy4KKwkgKi8KKwllcnIgPSBzZGlvX3JlYWRfY29tbW9uX2NpcyhjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlbW92ZTsKKworCWlmIChvbGRjYXJkKSB7CisJCWludCBzYW1lID0gKGNhcmQtPmNpcy52ZW5kb3IgPT0gb2xkY2FyZC0+Y2lzLnZlbmRvciAmJgorCQkJICAgIGNhcmQtPmNpcy5kZXZpY2UgPT0gb2xkY2FyZC0+Y2lzLmRldmljZSk7CisJCW1tY19yZW1vdmVfY2FyZChjYXJkKTsKKwkJaWYgKCFzYW1lKSB7CisJCQllcnIgPSAtRU5PRU5UOworCQkJZ290byBlcnI7CisJCX0KKwkJY2FyZCA9IG9sZGNhcmQ7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogU3dpdGNoIHRvIGhpZ2gtc3BlZWQgKGlmIHN1cHBvcnRlZCkuCisJICovCisJZXJyID0gc2Rpb19lbmFibGVfaHMoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byByZW1vdmU7CisKKwkvKgorCSAqIENoYW5nZSB0byB0aGUgY2FyZCdzIG1heGltdW0gc3BlZWQuCisJICovCisJaWYgKG1tY19jYXJkX2hpZ2hzcGVlZChjYXJkKSkgeworCQkvKgorCQkgKiBUaGUgU0RJTyBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgbWVudGlvbiBob3cKKwkJICogdGhlIENJUyB0cmFuc2ZlciBzcGVlZCByZWdpc3RlciByZWxhdGVzIHRvCisJCSAqIGhpZ2gtc3BlZWQsIGJ1dCBpdCBzZWVtcyB0aGF0IDUwIE1IeiBpcworCQkgKiBtYW5kYXRvcnkuCisJCSAqLworCQltbWNfc2V0X2Nsb2NrKGhvc3QsIDUwMDAwMDAwKTsKKwl9IGVsc2UgeworCQltbWNfc2V0X2Nsb2NrKGhvc3QsIGNhcmQtPmNpcy5tYXhfZHRyKTsKKwl9CisKKwkvKgorCSAqIFN3aXRjaCB0byB3aWRlciBidXMgKGlmIHN1cHBvcnRlZCkuCisJICovCisJZXJyID0gc2Rpb19lbmFibGVfd2lkZShjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlbW92ZTsKKworCWlmICghb2xkY2FyZCkKKwkJaG9zdC0+Y2FyZCA9IGNhcmQ7CisJcmV0dXJuIDA7CisKK3JlbW92ZToKKwlpZiAoIW9sZGNhcmQpCisJCW1tY19yZW1vdmVfY2FyZChjYXJkKTsKKworZXJyOgorCXJldHVybiBlcnI7Cit9CisKKy8qCiAgKiBIb3N0IGlzIGJlaW5nIHJlbW92ZWQuIEZyZWUgdXAgdGhlIGN1cnJlbnQgY2FyZC4KICAqLwogc3RhdGljIHZvaWQgbW1jX3NkaW9fcmVtb3ZlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKQEAgLTI0MywxMCArMzk1LDc3IEBACiAJfQogfQogCisvKgorICogU0RJTyBzdXNwZW5kLiAgV2UgbmVlZCB0byBzdXNwZW5kIGFsbCBmdW5jdGlvbnMgc2VwYXJhdGVseS4KKyAqIFRoZXJlZm9yZSBhbGwgcmVnaXN0ZXJlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIGRyaXZlcnMgd2l0aCBzdXNwZW5kCisgKiBhbmQgcmVzdW1lIG1ldGhvZHMuICBGYWlsaW5nIHRoYXQgd2Ugc2ltcGx5IHJlbW92ZSB0aGUgd2hvbGUgY2FyZC4KKyAqLworc3RhdGljIGludCBtbWNfc2Rpb19zdXNwZW5kKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBob3N0LT5jYXJkLT5zZGlvX2Z1bmNzOyBpKyspIHsKKwkJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGhvc3QtPmNhcmQtPnNkaW9fZnVuY1tpXTsKKwkJaWYgKGZ1bmMgJiYgc2Rpb19mdW5jX3ByZXNlbnQoZnVuYykgJiYgZnVuYy0+ZGV2LmRyaXZlcikgeworCQkJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtb3BzID0gZnVuYy0+ZGV2LmRyaXZlci0+cG07CisJCQlpZiAoIXBtb3BzIHx8ICFwbW9wcy0+c3VzcGVuZCB8fCAhcG1vcHMtPnJlc3VtZSkgeworCQkJCS8qIGZvcmNlIHJlbW92YWwgb2YgZW50aXJlIGNhcmQgaW4gdGhhdCBjYXNlICovCisJCQkJZXJyID0gLUVOT1NZUzsKKwkJCX0gZWxzZQorCQkJCWVyciA9IHBtb3BzLT5zdXNwZW5kKCZmdW5jLT5kZXYpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwkJfQorCX0KKwl3aGlsZSAoZXJyICYmIC0taSA+PSAwKSB7CisJCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBob3N0LT5jYXJkLT5zZGlvX2Z1bmNbaV07CisJCWlmIChmdW5jICYmIHNkaW9fZnVuY19wcmVzZW50KGZ1bmMpICYmIGZ1bmMtPmRldi5kcml2ZXIpIHsKKwkJCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbW9wcyA9IGZ1bmMtPmRldi5kcml2ZXItPnBtOworCQkJcG1vcHMtPnJlc3VtZSgmZnVuYy0+ZGV2KTsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbW1jX3NkaW9fcmVzdW1lKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpbnQgaSwgZXJyOworCisJQlVHX09OKCFob3N0KTsKKwlCVUdfT04oIWhvc3QtPmNhcmQpOworCisJLyogQmFzaWMgY2FyZCByZWluaXRpYWxpemF0aW9uLiAqLworCW1tY19jbGFpbV9ob3N0KGhvc3QpOworCWVyciA9IG1tY19zZGlvX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIGhvc3QtPmNhcmQpOworCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisKKwkvKgorCSAqIElmIHRoZSBjYXJkIGxvb2tlZCB0byBiZSB0aGUgc2FtZSBhcyBiZWZvcmUgc3VzcGVuZGluZywgdGhlbgorCSAqIHdlIHByb2NlZWQgdG8gcmVzdW1lIGFsbCBjYXJkIGZ1bmN0aW9ucy4gIElmIG9uZSBvZiB0aGVtIHJldHVybnMKKwkgKiBhbiBlcnJvciB0aGVuIHdlIHNpbXBseSByZXR1cm4gdGhhdCBlcnJvciB0byB0aGUgY29yZSBhbmQgdGhlCisJICogY2FyZCB3aWxsIGJlIHJlZGV0ZWN0ZWQgYXMgbmV3LiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mCisJICogdGhlIGZ1bmN0aW9uIGRyaXZlciB0byBwZXJmb3JtIGZ1cnRoZXIgdGVzdHMgd2l0aCB0aGUgZXh0cmEKKwkgKiBrbm93bGVkZ2UgaXQgaGFzIG9mIHRoZSBjYXJkIHRvIGNvbmZpcm0gdGhlIGNhcmQgaXMgaW5kZWVkIHRoZQorCSAqIHNhbWUgYXMgYmVmb3JlIHN1c3BlbmRpbmcgKHNhbWUgTUFDIGFkZHJlc3MgZm9yIG5ldHdvcmsgY2FyZHMsCisJICogZXRjLikgYW5kIHJldHVybiBhbiBlcnJvciBvdGhlcndpc2UuCisJICovCisJZm9yIChpID0gMDsgIWVyciAmJiBpIDwgaG9zdC0+Y2FyZC0+c2Rpb19mdW5jczsgaSsrKSB7CisJCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBob3N0LT5jYXJkLT5zZGlvX2Z1bmNbaV07CisJCWlmIChmdW5jICYmIHNkaW9fZnVuY19wcmVzZW50KGZ1bmMpICYmIGZ1bmMtPmRldi5kcml2ZXIpIHsKKwkJCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbW9wcyA9IGZ1bmMtPmRldi5kcml2ZXItPnBtOworCQkJZXJyID0gcG1vcHMtPnJlc3VtZSgmZnVuYy0+ZGV2KTsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgbW1jX3NkaW9fb3BzID0gewogCS5yZW1vdmUgPSBtbWNfc2Rpb19yZW1vdmUsCiAJLmRldGVjdCA9IG1tY19zZGlvX2RldGVjdCwKKwkuc3VzcGVuZCA9IG1tY19zZGlvX3N1c3BlbmQsCisJLnJlc3VtZSA9IG1tY19zZGlvX3Jlc3VtZSwKIH07CiAKIApAQCAtMjc1LDEzICs0OTQsNiBAQAogCQlvY3IgJj0gfjB4N0Y7CiAJfQogCi0JaWYgKG9jciAmIE1NQ19WRERfMTY1XzE5NSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU0RJTyBjYXJkIGNsYWltcyB0byBzdXBwb3J0IHRoZSAiCi0JCSAgICAgICAiaW5jb21wbGV0ZWx5IGRlZmluZWQgJ2xvdyB2b2x0YWdlIHJhbmdlJy4gVGhpcyAiCi0JCSAgICAgICAid2lsbCBiZSBpZ25vcmVkLlxuIiwgbW1jX2hvc3RuYW1lKGhvc3QpKTsKLQkJb2NyICY9IH5NTUNfVkREXzE2NV8xOTU7Ci0JfQotCiAJaG9zdC0+b2NyID0gbW1jX3NlbGVjdF92b2x0YWdlKGhvc3QsIG9jcik7CiAKIAkvKgpAQCAtMjkzLDEwMSArNTA1LDIzIEBACiAJfQogCiAJLyoKLQkgKiBJbmZvcm0gdGhlIGNhcmQgb2YgdGhlIHZvbHRhZ2UKKwkgKiBEZXRlY3QgYW5kIGluaXQgdGhlIGNhcmQuCiAJICovCi0JZXJyID0gbW1jX3NlbmRfaW9fb3BfY29uZChob3N0LCBob3N0LT5vY3IsICZvY3IpOworCWVyciA9IG1tY19zZGlvX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyOwotCi0JLyoKLQkgKiBGb3IgU1BJLCBlbmFibGUgQ1JDIGFzIGFwcHJvcHJpYXRlLgotCSAqLwotCWlmIChtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKLQkJZXJyID0gbW1jX3NwaV9zZXRfY3JjKGhvc3QsIHVzZV9zcGlfY3JjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyOwotCX0KKwljYXJkID0gaG9zdC0+Y2FyZDsKIAogCS8qCiAJICogVGhlIG51bWJlciBvZiBmdW5jdGlvbnMgb24gdGhlIGNhcmQgaXMgZW5jb2RlZCBpbnNpZGUKIAkgKiB0aGUgb2NyLgogCSAqLwotCWZ1bmNzID0gKG9jciAmIDB4NzAwMDAwMDApID4+IDI4OworCWNhcmQtPnNkaW9fZnVuY3MgPSBmdW5jcyA9IChvY3IgJiAweDcwMDAwMDAwKSA+PiAyODsKIAogCS8qCi0JICogQWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUuCisJICogSWYgbmVlZGVkLCBkaXNjb25uZWN0IGNhcmQgZGV0ZWN0aW9uIHB1bGwtdXAgcmVzaXN0b3IuCiAJICovCi0JY2FyZCA9IG1tY19hbGxvY19jYXJkKGhvc3QsIE5VTEwpOwotCWlmIChJU19FUlIoY2FyZCkpIHsKLQkJZXJyID0gUFRSX0VSUihjYXJkKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JY2FyZC0+dHlwZSA9IE1NQ19UWVBFX1NESU87Ci0JY2FyZC0+c2Rpb19mdW5jcyA9IGZ1bmNzOwotCi0JaG9zdC0+Y2FyZCA9IGNhcmQ7Ci0KLQkvKgotCSAqIEZvciBuYXRpdmUgYnVzc2VzOiAgc2V0IGNhcmQgUkNBIGFuZCBxdWl0IG9wZW4gZHJhaW4gbW9kZS4KLQkgKi8KLQlpZiAoIW1tY19ob3N0X2lzX3NwaShob3N0KSkgewotCQllcnIgPSBtbWNfc2VuZF9yZWxhdGl2ZV9hZGRyKGhvc3QsICZjYXJkLT5yY2EpOwotCQlpZiAoZXJyKQotCQkJZ290byByZW1vdmU7Ci0KLQkJbW1jX3NldF9idXNfbW9kZShob3N0LCBNTUNfQlVTTU9ERV9QVVNIUFVMTCk7Ci0JfQotCi0JLyoKLQkgKiBTZWxlY3QgY2FyZCwgYXMgYWxsIGZvbGxvd2luZyBjb21tYW5kcyByZWx5IG9uIHRoYXQuCi0JICovCi0JaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKLQkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGNhcmQpOwotCQlpZiAoZXJyKQotCQkJZ290byByZW1vdmU7Ci0JfQotCi0JLyoKLQkgKiBSZWFkIHRoZSBjb21tb24gcmVnaXN0ZXJzLgotCSAqLwotCWVyciA9IHNkaW9fcmVhZF9jY2NyKGNhcmQpOwotCWlmIChlcnIpCi0JCWdvdG8gcmVtb3ZlOwotCi0JLyoKLQkgKiBSZWFkIHRoZSBjb21tb24gQ0lTIHR1cGxlcy4KLQkgKi8KLQllcnIgPSBzZGlvX3JlYWRfY29tbW9uX2NpcyhjYXJkKTsKLQlpZiAoZXJyKQotCQlnb3RvIHJlbW92ZTsKLQotCS8qCi0JICogU3dpdGNoIHRvIGhpZ2gtc3BlZWQgKGlmIHN1cHBvcnRlZCkuCi0JICovCi0JZXJyID0gc2Rpb19lbmFibGVfaHMoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byByZW1vdmU7Ci0KLQkvKgotCSAqIENoYW5nZSB0byB0aGUgY2FyZCdzIG1heGltdW0gc3BlZWQuCi0JICovCi0JaWYgKG1tY19jYXJkX2hpZ2hzcGVlZChjYXJkKSkgewotCQkvKgotCQkgKiBUaGUgU0RJTyBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgbWVudGlvbiBob3cKLQkJICogdGhlIENJUyB0cmFuc2ZlciBzcGVlZCByZWdpc3RlciByZWxhdGVzIHRvCi0JCSAqIGhpZ2gtc3BlZWQsIGJ1dCBpdCBzZWVtcyB0aGF0IDUwIE1IeiBpcwotCQkgKiBtYW5kYXRvcnkuCi0JCSAqLwotCQltbWNfc2V0X2Nsb2NrKGhvc3QsIDUwMDAwMDAwKTsKLQl9IGVsc2UgewotCQltbWNfc2V0X2Nsb2NrKGhvc3QsIGNhcmQtPmNpcy5tYXhfZHRyKTsKLQl9Ci0KLQkvKgotCSAqIFN3aXRjaCB0byB3aWRlciBidXMgKGlmIHN1cHBvcnRlZCkuCi0JICovCi0JZXJyID0gc2Rpb19lbmFibGVfd2lkZShjYXJkKTsKKwllcnIgPSBzZGlvX2Rpc2FibGVfY2QoY2FyZCk7CiAJaWYgKGVycikKIAkJZ290byByZW1vdmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYwppbmRleCA0NjI4NGI1Li5kMzc0NjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCkBAIC0yMCw5ICsyMCw2IEBACiAjaW5jbHVkZSAic2Rpb19jaXMuaCIKICNpbmNsdWRlICJzZGlvX2J1cy5oIgogCi0jZGVmaW5lIGRldl90b19zZGlvX2Z1bmMoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBzZGlvX2Z1bmMsIGRldikKLSNkZWZpbmUgdG9fc2Rpb19kcml2ZXIoZCkgICAgICBjb250YWluZXJfb2YoZCwgc3RydWN0IHNkaW9fZHJpdmVyLCBkcnYpCi0KIC8qIHNob3cgY29uZmlndXJhdGlvbiBmaWVsZHMgKi8KICNkZWZpbmUgc2Rpb19jb25maWdfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwppbmRleCA5NjNmMjkzLi42NjM2MzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCkBAIC00MCw3ICs0MCw3IEBACiAJCQlucl9zdHJpbmdzKys7CiAJfQogCi0JaWYgKGJ1ZltpLTFdICE9ICdcMCcpIHsKKwlpZiAobnJfc3RyaW5ncyA8IDQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0RJTzogaWdub3JpbmcgYnJva2VuIENJU1RQTF9WRVJTXzFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9faW8uYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pby5jCmluZGV4IGY2MWZjMmQuLmY5YWE4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pby5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pby5jCkBAIC02MjQsNyArNjI0LDcgQEAKIAogCUJVR19PTighZnVuYyk7CiAKLQlpZiAoYWRkciA8IDB4RjAgfHwgYWRkciA+IDB4RkYpIHsKKwlpZiAoKGFkZHIgPCAweEYwIHx8IGFkZHIgPiAweEZGKSAmJiAoIW1tY19jYXJkX2xlbmllbnRfZm4wKGZ1bmMtPmNhcmQpKSkgewogCQlpZiAoZXJyX3JldCkKIAkJCSplcnJfcmV0ID0gLUVJTlZBTDsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCmluZGV4IDg5MWVmMTguLjdjYjA1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKQEAgLTEzMiwxMSArMTMyLDExIEBACiAKIGNvbmZpZyBNTUNfT01BUF9IUwogCXRyaXN0YXRlICJUSSBPTUFQIEhpZ2ggU3BlZWQgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMjQzMCB8fCBBUkNIX09NQVAzCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDMwIHx8IEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNAogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgVEkgT01BUCBIaWdoIFNwZWVkIE11bHRpbWVkaWEgY2FyZCBJbnRlcmZhY2UuCi0JICBJZiB5b3UgaGF2ZSBhbiBPTUFQMjQzMCBvciBPTUFQMyBib2FyZCB3aXRoIGEgTXVsdGltZWRpYSBDYXJkIHNsb3QsCi0JICBzYXkgWSBvciBNIGhlcmUuCisJICBJZiB5b3UgaGF2ZSBhbiBPTUFQMjQzMCBvciBPTUFQMyBib2FyZCBvciBPTUFQNCBib2FyZCB3aXRoIGEKKwkgIE11bHRpbWVkaWEgQ2FyZCBzbG90LCBzYXkgWSBvciBNIGhlcmUuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTE2MCw2ICsxNjAsMTIgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY2hvaWNlCisJcHJvbXB0ICJBdG1lbCBTRC9NTUMgRHJpdmVyIgorCWRlZmF1bHQgTU1DX0FUTUVMTUNJIGlmIEFWUjMyCisJaGVscAorCSAgQ2hvb3NlIHdoaWNoIGRyaXZlciB0byB1c2UgZm9yIHRoZSBBdG1lbCBNQ0kgU2lsaWNvbgorCiBjb25maWcgTU1DX0FUOTEKIAl0cmlzdGF0ZSAiQVQ5MSBTRC9NTUMgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MQpAQCAtMTcwLDE3ICsxNzYsMTkgQEAKIAogY29uZmlnIE1NQ19BVE1FTE1DSQogCXRyaXN0YXRlICJBdG1lbCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVlIzMgorCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBBdG1lbCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIGRyaXZlci4gSWYKLQkgIHlvdSBoYXZlIGFuIEFUMzIgKEFWUjMyKSBwbGF0Zm9ybSB3aXRoIGEgTXVsdGltZWRpYSBDYXJkCi0JICBzbG90LCBzYXkgWSBvciBNIGhlcmUuCisJICB5b3UgaGF2ZSBhbiBBVDMyIChBVlIzMikgb3IgQVQ5MSBwbGF0Zm9ybSB3aXRoIGEgTXVsdGltZWRpYQorCSAgQ2FyZCBzbG90LCBzYXkgWSBvciBNIGhlcmUuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2VuZGNob2ljZQorCiBjb25maWcgTU1DX0FUTUVMTUNJX0RNQQogCWJvb2wgIkF0bWVsIE1DSSBETUEgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE1NQ19BVE1FTE1DSSAmJiBETUFfRU5HSU5FICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTU1DX0FUTUVMTUNJICYmIEFWUjMyICYmIERNQV9FTkdJTkUgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBoYXZlIHRoZSBBdG1lbCBNQ0kgZHJpdmVyIHVzZSBhIERNQSBlbmdpbmUgdG8KIAkgIGRvIGRhdGEgdHJhbnNmZXJzIGFuZCB0aHVzIGluY3JlYXNlIHRoZSB0aHJvdWdocHV0IGFuZApAQCAtMTk5LDYgKzIwNywxMyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX01TTTdYMDBBCisJdHJpc3RhdGUgIlF1YWxjb21tIE1TTSA3WDAwQSBTRENDIENvbnRyb2xsZXIgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1NQyAmJiBBUkNIX01TTQorCWhlbHAKKwkgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIFNEL01NQyBjZWxsIGZvdW5kIGluIHRoZQorICAgICAgICAgIE1TTSA3WDAwQSBjb250cm9sbGVycyBmcm9tIFF1YWxjb21tLgorCiBjb25maWcgTU1DX01YQwogCXRyaXN0YXRlICJGcmVlc2NhbGUgaS5NWDIvMyBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX01YQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKaW5kZXggY2YxNTNmNi4uYWJjYjA0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCkBAIC0yMyw2ICsyMyw3IEBACiBvYmotJChDT05GSUdfTU1DX0FUOTEpCQkrPSBhdDkxX21jaS5vCiBvYmotJChDT05GSUdfTU1DX0FUTUVMTUNJKQkrPSBhdG1lbC1tY2kubwogb2JqLSQoQ09ORklHX01NQ19USUZNX1NEKQkrPSB0aWZtX3NkLm8KK29iai0kKENPTkZJR19NTUNfTVNNN1gwMEEpCSs9IG1zbV9zZGNjLm8KIG9iai0kKENPTkZJR19NTUNfTVZTRElPKQkrPSBtdnNkaW8ubwogb2JqLSQoQ09ORklHX01NQ19TUEkpCQkrPSBtbWNfc3BpLm8KIGlmZXEgKCQoQ09ORklHX09GKSx5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKaW5kZXggN2I2MDNlNC4uMDY1ZmE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCisjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKICNpbmNsdWRlICJhdG1lbC1tY2ktcmVncy5oIgpAQCAtMjEwLDYgKzIxMSwxOCBAQAogCXNldF9iaXQoZXZlbnQsICZob3N0LT5wZW5kaW5nX2V2ZW50cykKIAogLyoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIGZlYXR1cmVzL3JlZ2lzdGVycyBiYXNlZCBvbgorICogd2hldGhlciB0aGUgcHJvY2Vzc29yIHN1cHBvcnRzIHRoZW0KKyAqLworc3RhdGljIGJvb2wgbWNpX2hhc19yd3Byb29mKHZvaWQpCit7CisJaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8IGNwdV9pc19hdDkxcm05MjAwKCkpCisJCXJldHVybiBmYWxzZTsKKwllbHNlCisJCXJldHVybiB0cnVlOworfQorCisvKgogICogVGhlIGRlYnVnZnMgc3R1ZmYgYmVsb3cgaXMgbW9zdGx5IG9wdGltaXplZCBhd2F5IHdoZW4KICAqIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0LgogICovCkBAIC0yNzYsOCArMjg5LDEzIEBACiAJCVszXQk9ICJCTEtFIiwKIAkJWzRdCT0gIkRUSVAiLAogCQlbNV0JPSAiTk9UQlVTWSIsCisJCVs2XQk9ICJFTkRSWCIsCisJCVs3XQk9ICJFTkRUWCIsCiAJCVs4XQk9ICJTRElPSVJRQSIsCiAJCVs5XQk9ICJTRElPSVJRQiIsCisJCVsxMl0JPSAiU0RJT1dBSVQiLAorCQlbMTRdCT0gIlJYQlVGRiIsCisJCVsxNV0JPSAiVFhCVUZFIiwKIAkJWzE2XQk9ICJSSU5ERSIsCiAJCVsxN10JPSAiUkRJUkUiLAogCQlbMThdCT0gIlJDUkNFIiwKQEAgLTI4NSw2ICszMDMsMTEgQEAKIAkJWzIwXQk9ICJSVE9FIiwKIAkJWzIxXQk9ICJEQ1JDRSIsCiAJCVsyMl0JPSAiRFRPRSIsCisJCVsyM10JPSAiQ1NUT0UiLAorCQlbMjRdCT0gIkJMS09WUkUiLAorCQlbMjVdCT0gIkRNQURPTkUiLAorCQlbMjZdCT0gIkZJRk9FTVBUWSIsCisJCVsyN10JPSAiWEZSRE9ORSIsCiAJCVszMF0JPSAiT1ZSRSIsCiAJCVszMV0JPSAiVU5SRSIsCiAJfTsKQEAgLTg0OSwxMyArODcyLDE1IEBACiAJCQljbGtkaXYgPSAyNTU7CiAJCX0KIAorCQlob3N0LT5tb2RlX3JlZyA9IE1DSV9NUl9DTEtESVYoY2xrZGl2KTsKKwogCQkvKgogCQkgKiBXUlBST09GIGFuZCBSRFBST09GIHByZXZlbnQgb3ZlcnJ1bnMvdW5kZXJydW5zIGJ5CiAJCSAqIHN0b3BwaW5nIHRoZSBjbG9jayB3aGVuIHRoZSBGSUZPIGlzIGZ1bGwvZW1wdHkuCiAJCSAqIFRoaXMgc3RhdGUgaXMgbm90IGV4cGVjdGVkIHRvIGxhc3QgZm9yIGxvbmcuCiAJCSAqLwotCQlob3N0LT5tb2RlX3JlZyA9IE1DSV9NUl9DTEtESVYoY2xrZGl2KSB8IE1DSV9NUl9XUlBST09GCi0JCQkJCXwgTUNJX01SX1JEUFJPT0Y7CisJCWlmIChtY2lfaGFzX3J3cHJvb2YoKSkKKwkJCWhvc3QtPm1vZGVfcmVnIHw9IChNQ0lfTVJfV1JQUk9PRiB8IE1DSV9NUl9SRFBST09GKTsKIAogCQlpZiAobGlzdF9lbXB0eSgmaG9zdC0+cXVldWUpKQogCQkJbWNpX3dyaXRlbChob3N0LCBNUiwgaG9zdC0+bW9kZV9yZWcpOwpAQCAtMTY0OCw4ICsxNjczLDEwIEBACiAJCQlucl9zbG90cysrOwogCX0KIAotCWlmICghbnJfc2xvdHMpCisJaWYgKCFucl9zbG90cykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0IGZhaWxlZDogbm8gc2xvdCBkZWZpbmVkXG4iKTsKIAkJZ290byBlcnJfaW5pdF9zbG90OworCX0KIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsCiAJCQkiQXRtZWwgTUNJIGNvbnRyb2xsZXIgYXQgMHglMDhseCBpcnEgJWQsICV1IHNsb3RzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwppbmRleCBhNDYxMDE3Li5kNTVmZTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwpAQCAtMTU2MiwzICsxNTYyLDQgQEAKIAkJIkhhbnMtUGV0ZXIgTmlsc3NvbiwgSmFuIE5pa2l0ZW5rbyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEkgU0QvTU1DIGhvc3QgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTptbWNfc3BpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNDYwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwpAQCAtMCwwICsxLDEyODcgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jIC0gUXVhbGNvbW0gTVNNIDdYMDBBIFNEQ0MgRHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jLAorICogIENvcHlyaWdodCAoQykgMjAwMyBEZWVwIEJsdWUgU29sdXRpb25zLCBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBCYXNlZCBvbiBtbWNpLmMKKyAqCisgKiBBdXRob3I6IFNhbiBNZWhhdCAoc2FuQGFuZHJvaWQuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvaHRjX3B3cnNpbmsuaD4KKworI2luY2x1ZGUgIm1zbV9zZGNjLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm1zbS1zZGNjIgorCitzdGF0aWMgdW5zaWduZWQgaW50IG1zbXNkY2NfZm1pbiA9IDE0NDAwMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXNtc2RjY19mbWF4ID0gNTAwMDAwMDA7CitzdGF0aWMgdW5zaWduZWQgaW50IG1zbXNkY2NfNGJpdCA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IG1zbXNkY2NfcHdyc2F2ZSA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IG1zbXNkY2NfcGlvcG9sbCA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IG1zbXNkY2Nfc2Rpb2lycTsKKworI2RlZmluZSBQSU9fU1BJTk1BWCAzMAorI2RlZmluZSBDTURfU1BJTk1BWCAyMAorCitzdGF0aWMgdm9pZAorbXNtc2RjY19zdGFydF9jb21tYW5kKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLAorCQkgICAgICB1MzIgYyk7CisKK3N0YXRpYyB2b2lkCittc21zZGNjX3JlcXVlc3RfZW5kKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSUNPTU1BTkQpOworCisJQlVHX09OKGhvc3QtPmN1cnIuZGF0YSk7CisKKwlob3N0LT5jdXJyLm1ycSA9IE5VTEw7CisJaG9zdC0+Y3Vyci5jbWQgPSBOVUxMOworCisJaWYgKG1ycS0+ZGF0YSkKKwkJbXJxLT5kYXRhLT5ieXRlc194ZmVyZWQgPSBob3N0LT5jdXJyLmRhdGFfeGZlcmVkOworCWlmIChtcnEtPmNtZC0+ZXJyb3IgPT0gLUVUSU1FRE9VVCkKKwkJbWRlbGF5KDUpOworCisJLyoKKwkgKiBOZWVkIHRvIGRyb3AgdGhlIGhvc3QgbG9jayBoZXJlOyBtbWNfcmVxdWVzdF9kb25lIG1heSBjYWxsCisJICogYmFjayBpbnRvIHRoZSBkcml2ZXIuLi4KKwkgKi8KKwlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CisJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7CisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQKK21zbXNkY2Nfc3RvcF9kYXRhKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QpCit7CisJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJREFUQUNUUkwpOworCWhvc3QtPmN1cnIuZGF0YSA9IE5VTEw7CisJaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCA9IGhvc3QtPmN1cnIuZ290X2RhdGFibGtlbmQgPSAwOworfQorCit1aW50MzJfdCBtc21zZGNjX2ZpZm9fYWRkcihzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0KQoreworCXN3aXRjaCAoaG9zdC0+cGRldl9pZCkgeworCWNhc2UgMToKKwkJcmV0dXJuIE1TTV9TREMxX1BIWVMgKyBNTUNJRklGTzsKKwljYXNlIDI6CisJCXJldHVybiBNU01fU0RDMl9QSFlTICsgTU1DSUZJRk87CisJY2FzZSAzOgorCQlyZXR1cm4gTVNNX1NEQzNfUEhZUyArIE1NQ0lGSUZPOworCWNhc2UgNDoKKwkJcmV0dXJuIE1TTV9TREM0X1BIWVMgKyBNTUNJRklGTzsKKwl9CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCittc21zZGNjX2RtYV9jb21wbGV0ZV9mdW5jKHN0cnVjdCBtc21fZG1vdl9jbWQgKmNtZCwKKwkJCSAgdW5zaWduZWQgaW50IHJlc3VsdCwKKwkJCSAgc3RydWN0IG1zbV9kbW92X2VycmRhdGEgKmVycikKK3sKKwlzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YQkqZG1hX2RhdGEgPQorCQljb250YWluZXJfb2YoY21kLCBzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YSwgaGRyKTsKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0CSpob3N0ID0gZG1hX2RhdGEtPmhvc3Q7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IG1tY19yZXF1ZXN0CSptcnE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCW1ycSA9IGhvc3QtPmN1cnIubXJxOworCUJVR19PTighbXJxKTsKKworCWlmICghKHJlc3VsdCAmIERNT1ZfUlNMVF9WQUxJRCkpIHsKKwkJcHJfZXJyKCJtc21zZGNjOiBJbnZhbGlkIERhdGFNb3ZlciByZXN1bHRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmVzdWx0ICYgRE1PVl9SU0xUX0RPTkUpIHsKKwkJaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZCA9IGhvc3QtPmN1cnIueGZlcl9zaXplOworCX0gZWxzZSB7CisJCS8qIEVycm9yIG9yIGZsdXNoICAqLworCQlpZiAocmVzdWx0ICYgRE1PVl9SU0xUX0VSUk9SKQorCQkJcHJfZXJyKCIlczogRE1BIGVycm9yICgweCUuOHgpXG4iLAorCQkJICAgICAgIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLCByZXN1bHQpOworCQlpZiAocmVzdWx0ICYgRE1PVl9SU0xUX0ZMVVNIKQorCQkJcHJfZXJyKCIlczogRE1BIGNoYW5uZWwgZmx1c2hlZCAoMHglLjh4KVxuIiwKKwkJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgcmVzdWx0KTsKKwkJaWYgKGVycikKKwkJCXByX2VycigiRmx1c2ggZGF0YTogJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHhcbiIsCisJCQkgICAgICAgZXJyLT5mbHVzaFswXSwgZXJyLT5mbHVzaFsxXSwgZXJyLT5mbHVzaFsyXSwKKwkJCSAgICAgICBlcnItPmZsdXNoWzNdLCBlcnItPmZsdXNoWzRdLCBlcnItPmZsdXNoWzVdKTsKKwkJaWYgKCFtcnEtPmRhdGEtPmVycm9yKQorCQkJbXJxLT5kYXRhLT5lcnJvciA9IC1FSU87CisJfQorCWhvc3QtPmRtYS5idXN5ID0gMDsKKwlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5kbWEuc2csIGhvc3QtPmRtYS5udW1fZW50cywKKwkJICAgICBob3N0LT5kbWEuZGlyKTsKKworCWlmIChob3N0LT5jdXJyLnVzZXJfcGFnZXMpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGhvc3QtPmRtYS5zZzsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGhvc3QtPmRtYS5udW1fZW50czsgaSsrKQorCQkJZmx1c2hfZGNhY2hlX3BhZ2Uoc2dfcGFnZShzZysrKSk7CisJfQorCisJaG9zdC0+ZG1hLnNnID0gTlVMTDsKKworCWlmICgoaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCAmJiBob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kKQorCSAgICAgfHwgbXJxLT5kYXRhLT5lcnJvcikgeworCisJCS8qCisJCSAqIElmIHdlJ3ZlIGFscmVhZHkgZ290dGVuIG91ciBEQVRBRU5EIC8gREFUQUJMS0VORAorCQkgKiBmb3IgdGhpcyByZXF1ZXN0LCB0aGVuIGNvbXBsZXRlIGl0IHRocm91Z2ggaGVyZS4KKwkJICovCisJCW1zbXNkY2Nfc3RvcF9kYXRhKGhvc3QpOworCisJCWlmICghbXJxLT5kYXRhLT5lcnJvcikKKwkJCWhvc3QtPmN1cnIuZGF0YV94ZmVyZWQgPSBob3N0LT5jdXJyLnhmZXJfc2l6ZTsKKwkJaWYgKCFtcnEtPmRhdGEtPnN0b3AgfHwgbXJxLT5jbWQtPmVycm9yKSB7CisJCQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lDT01NQU5EKTsKKwkJCWhvc3QtPmN1cnIubXJxID0gTlVMTDsKKwkJCWhvc3QtPmN1cnIuY21kID0gTlVMTDsKKwkJCW1ycS0+ZGF0YS0+Ynl0ZXNfeGZlcmVkID0gaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZDsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCQkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJbXNtc2RjY19zdGFydF9jb21tYW5kKGhvc3QsIG1ycS0+ZGF0YS0+c3RvcCwgMCk7CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCXJldHVybjsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9kbWEoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWlmIChob3N0LT5kbWEuY2hhbm5lbCA9PSAtMSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoKGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzKSA8IE1DSV9GSUZPU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrcykgJSBNQ0lfRklGT1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zbXNkY2NfY29uZmlnX2RtYShzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG1zbXNkY2NfbmNfZG1hZGF0YSAqbmM7CisJZG1vdl9ib3ggKmJveDsKKwl1aW50MzJfdCByb3dzOworCXVpbnQzMl90IGNyY2k7CisJdW5zaWduZWQgaW50IG47CisJaW50IGksIHJjOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBkYXRhLT5zZzsKKworCXJjID0gdmFsaWRhdGVfZG1hKGhvc3QsIGRhdGEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaG9zdC0+ZG1hLnNnID0gZGF0YS0+c2c7CisJaG9zdC0+ZG1hLm51bV9lbnRzID0gZGF0YS0+c2dfbGVuOworCisJbmMgPSBob3N0LT5kbWEubmM7CisKKwlzd2l0Y2ggKGhvc3QtPnBkZXZfaWQpIHsKKwljYXNlIDE6CisJCWNyY2kgPSBNU01TRENDX0NSQ0lfU0RDMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljcmNpID0gTVNNU0RDQ19DUkNJX1NEQzI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJY3JjaSA9IE1TTVNEQ0NfQ1JDSV9TREMzOworCQlicmVhazsKKwljYXNlIDQ6CisJCWNyY2kgPSBNU01TRENDX0NSQ0lfU0RDNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaG9zdC0+ZG1hLnNnID0gTlVMTDsKKwkJaG9zdC0+ZG1hLm51bV9lbnRzID0gMDsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJaG9zdC0+ZG1hLmRpciA9IERNQV9GUk9NX0RFVklDRTsKKwllbHNlCisJCWhvc3QtPmRtYS5kaXIgPSBETUFfVE9fREVWSUNFOworCisJaG9zdC0+Y3Vyci51c2VyX3BhZ2VzID0gMDsKKworCW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnNnLAorCQkgICAgICAgaG9zdC0+ZG1hLm51bV9lbnRzLCBob3N0LT5kbWEuZGlyKTsKKworCWlmIChuICE9IGhvc3QtPmRtYS5udW1fZW50cykgeworCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gbWFwIGluIGFsbCBzZyBlbGVtZW50c1xuIiwKKwkJICAgICAgIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJaG9zdC0+ZG1hLnNnID0gTlVMTDsKKwkJaG9zdC0+ZG1hLm51bV9lbnRzID0gMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYm94ID0gJm5jLT5jbWRbMF07CisJZm9yIChpID0gMDsgaSA8IGhvc3QtPmRtYS5udW1fZW50czsgaSsrKSB7CisJCWJveC0+Y21kID0gQ01EX01PREVfQk9YOworCisJCWlmIChpID09IChob3N0LT5kbWEubnVtX2VudHMgLSAxKSkKKwkJCWJveC0+Y21kIHw9IENNRF9MQzsKKwkJcm93cyA9IChzZ19kbWFfbGVuKHNnKSAlIE1DSV9GSUZPU0laRSkgPworCQkJKHNnX2RtYV9sZW4oc2cpIC8gTUNJX0ZJRk9TSVpFKSArIDEgOgorCQkJKHNnX2RtYV9sZW4oc2cpIC8gTUNJX0ZJRk9TSVpFKSA7CisKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgeworCQkJYm94LT5zcmNfcm93X2FkZHIgPSBtc21zZGNjX2ZpZm9fYWRkcihob3N0KTsKKwkJCWJveC0+ZHN0X3Jvd19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCisJCQlib3gtPnNyY19kc3RfbGVuID0gKE1DSV9GSUZPU0laRSA8PCAxNikgfAorCQkJCQkgICAoTUNJX0ZJRk9TSVpFKTsKKwkJCWJveC0+cm93X29mZnNldCA9IE1DSV9GSUZPU0laRTsKKworCQkJYm94LT5udW1fcm93cyA9IHJvd3MgKiAoKDEgPDwgMTYpICsgMSk7CisJCQlib3gtPmNtZCB8PSBDTURfU1JDX0NSQ0koY3JjaSk7CisJCX0gZWxzZSB7CisJCQlib3gtPnNyY19yb3dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCWJveC0+ZHN0X3Jvd19hZGRyID0gbXNtc2RjY19maWZvX2FkZHIoaG9zdCk7CisKKwkJCWJveC0+c3JjX2RzdF9sZW4gPSAoTUNJX0ZJRk9TSVpFIDw8IDE2KSB8CisJCQkJCSAgIChNQ0lfRklGT1NJWkUpOworCQkJYm94LT5yb3dfb2Zmc2V0ID0gKE1DSV9GSUZPU0laRSA8PCAxNik7CisKKwkJCWJveC0+bnVtX3Jvd3MgPSByb3dzICogKCgxIDw8IDE2KSArIDEpOworCQkJYm94LT5jbWQgfD0gQ01EX0RTVF9DUkNJKGNyY2kpOworCQl9CisJCWJveCsrOworCQlzZysrOworCX0KKworCS8qIGxvY2F0aW9uIG9mIGNvbW1hbmQgYmxvY2sgbXVzdCBiZSA2NCBiaXQgYWxpZ25lZCAqLworCUJVR19PTihob3N0LT5kbWEuY21kX2J1c2FkZHIgJiAweDA3KTsKKworCW5jLT5jbWRwdHIgPSAoaG9zdC0+ZG1hLmNtZF9idXNhZGRyID4+IDMpIHwgQ01EX1BUUl9MUDsKKwlob3N0LT5kbWEuaGRyLmNtZHB0ciA9IERNT1ZfQ01EX1BUUl9MSVNUIHwKKwkJCSAgICAgICBETU9WX0NNRF9BRERSKGhvc3QtPmRtYS5jbWRwdHJfYnVzYWRkcik7CisJaG9zdC0+ZG1hLmhkci5jb21wbGV0ZV9mdW5jID0gbXNtc2RjY19kbWFfY29tcGxldGVfZnVuYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXNtc2RjY19zdGFydF9kYXRhKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YWN0cmwsIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGNsa3M7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaG9zdC0+YmFzZTsKKwl1bnNpZ25lZCBpbnQgcGlvX2lycW1hc2sgPSAwOworCisJaG9zdC0+Y3Vyci5kYXRhID0gZGF0YTsKKwlob3N0LT5jdXJyLnhmZXJfc2l6ZSA9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzOworCWhvc3QtPmN1cnIueGZlcl9yZW1haW4gPSBob3N0LT5jdXJyLnhmZXJfc2l6ZTsKKwlob3N0LT5jdXJyLmRhdGFfeGZlcmVkID0gMDsKKwlob3N0LT5jdXJyLmdvdF9kYXRhZW5kID0gMDsKKwlob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kID0gMDsKKworCW1lbXNldCgmaG9zdC0+cGlvLCAwLCBzaXplb2YoaG9zdC0+cGlvKSk7CisKKwljbGtzID0gKHVuc2lnbmVkIGxvbmcgbG9uZylkYXRhLT50aW1lb3V0X25zICogaG9zdC0+Y2xrX3JhdGU7CisJZG9fZGl2KGNsa3MsIE5TRUNfUEVSX1NFQyk7CisJdGltZW91dCA9IGRhdGEtPnRpbWVvdXRfY2xrcyArICh1bnNpZ25lZCBpbnQpY2xrczsKKwl3cml0ZWwodGltZW91dCwgYmFzZSArIE1NQ0lEQVRBVElNRVIpOworCisJd3JpdGVsKGhvc3QtPmN1cnIueGZlcl9zaXplLCBiYXNlICsgTU1DSURBVEFMRU5HVEgpOworCisJZGF0YWN0cmwgPSBNQ0lfRFBTTV9FTkFCTEUgfCAoZGF0YS0+Ymxrc3ogPDwgNCk7CisKKwlpZiAoIW1zbXNkY2NfY29uZmlnX2RtYShob3N0LCBkYXRhKSkKKwkJZGF0YWN0cmwgfD0gTUNJX0RQU01fRE1BRU5BQkxFOworCWVsc2UgeworCQlob3N0LT5waW8uc2cgPSBkYXRhLT5zZzsKKwkJaG9zdC0+cGlvLnNnX2xlbiA9IGRhdGEtPnNnX2xlbjsKKwkJaG9zdC0+cGlvLnNnX29mZiA9IDA7CisKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgeworCQkJcGlvX2lycW1hc2sgPSBNQ0lfUlhGSUZPSEFMRkZVTExNQVNLOworCQkJaWYgKGhvc3QtPmN1cnIueGZlcl9yZW1haW4gPCBNQ0lfRklGT1NJWkUpCisJCQkJcGlvX2lycW1hc2sgfD0gTUNJX1JYREFUQUFWTEJMTUFTSzsKKwkJfSBlbHNlCisJCQlwaW9faXJxbWFzayA9IE1DSV9UWEZJRk9IQUxGRU1QVFlNQVNLOworCX0KKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCWRhdGFjdHJsIHw9IE1DSV9EUFNNX0RJUkVDVElPTjsKKworCXdyaXRlbChwaW9faXJxbWFzaywgYmFzZSArIE1NQ0lNQVNLMSk7CisJd3JpdGVsKGRhdGFjdHJsLCBiYXNlICsgTU1DSURBVEFDVFJMKTsKKworCWlmIChkYXRhY3RybCAmIE1DSV9EUFNNX0RNQUVOQUJMRSkgeworCQlob3N0LT5kbWEuYnVzeSA9IDE7CisJCW1zbV9kbW92X2VucXVldWVfY21kKGhvc3QtPmRtYS5jaGFubmVsLCAmaG9zdC0+ZG1hLmhkcik7CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNtc2RjY19zdGFydF9jb21tYW5kKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1MzIgYykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBob3N0LT5iYXNlOworCisJaWYgKHJlYWRsKGJhc2UgKyBNTUNJQ09NTUFORCkgJiBNQ0lfQ1BTTV9FTkFCTEUpIHsKKwkJd3JpdGVsKDAsIGJhc2UgKyBNTUNJQ09NTUFORCk7CisJCXVkZWxheSgyICsgKCg1ICogMTAwMDAwMCkgLyBob3N0LT5jbGtfcmF0ZSkpOworCX0KKworCWMgfD0gY21kLT5vcGNvZGUgfCBNQ0lfQ1BTTV9FTkFCTEU7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgeworCQlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KQorCQkJYyB8PSBNQ0lfQ1BTTV9MT05HUlNQOworCQljIHw9IE1DSV9DUFNNX1JFU1BPTlNFOworCX0KKworCWlmIChjbWQtPm9wY29kZSA9PSAxNyB8fCBjbWQtPm9wY29kZSA9PSAxOCB8fAorCSAgICBjbWQtPm9wY29kZSA9PSAyNCB8fCBjbWQtPm9wY29kZSA9PSAyNSB8fAorCSAgICBjbWQtPm9wY29kZSA9PSA1MykKKwkJYyB8PSBNQ0lfQ1NQTV9EQVRDTUQ7CisKKwlpZiAoY21kID09IGNtZC0+bXJxLT5zdG9wKQorCQljIHw9IE1DSV9DU1BNX01DSUFCT1JUOworCisJaG9zdC0+Y3Vyci5jbWQgPSBjbWQ7CisKKwlob3N0LT5zdGF0cy5jbWRzKys7CisKKwl3cml0ZWwoY21kLT5hcmcsIGJhc2UgKyBNTUNJQVJHVU1FTlQpOworCXdyaXRlbChjLCBiYXNlICsgTU1DSUNPTU1BTkQpOworfQorCitzdGF0aWMgdm9pZAorbXNtc2RjY19kYXRhX2VycihzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEsCisJCSB1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCWlmIChzdGF0dXMgJiBNQ0lfREFUQUNSQ0ZBSUwpIHsKKwkJcHJfZXJyKCIlczogRGF0YSBDUkMgZXJyb3JcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJcHJfZXJyKCIlczogb3Bjb2RlIDB4JS44eFxuIiwgX19mdW5jX18sCisJCSAgICAgICBkYXRhLT5tcnEtPmNtZC0+b3Bjb2RlKTsKKwkJcHJfZXJyKCIlczogYmxrc3ogJWQsIGJsb2NrcyAlZFxuIiwgX19mdW5jX18sCisJCSAgICAgICBkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzKTsKKwkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROworCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNJX0RBVEFUSU1FT1VUKSB7CisJCXByX2VycigiJXM6IERhdGEgdGltZW91dFxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJfSBlbHNlIGlmIChzdGF0dXMgJiBNQ0lfUlhPVkVSUlVOKSB7CisJCXByX2VycigiJXM6IFJYIG92ZXJydW5cbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJZGF0YS0+ZXJyb3IgPSAtRUlPOworCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNJX1RYVU5ERVJSVU4pIHsKKwkJcHJfZXJyKCIlczogVFggdW5kZXJydW5cbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJZGF0YS0+ZXJyb3IgPSAtRUlPOworCX0gZWxzZSB7CisJCXByX2VycigiJXM6IFVua25vd24gZXJyb3IgKDB4JS44eClcbiIsCisJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgc3RhdHVzKTsKKwkJZGF0YS0+ZXJyb3IgPSAtRUlPOworCX0KK30KKworCitzdGF0aWMgaW50Cittc21zZGNjX3Bpb19yZWFkKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHJlbWFpbikKK3sKKwl2b2lkIF9faW9tZW0JKmJhc2UgPSBob3N0LT5iYXNlOworCXVpbnQzMl90CSpwdHIgPSAodWludDMyX3QgKikgYnVmZmVyOworCWludAkJY291bnQgPSAwOworCisJd2hpbGUgKHJlYWRsKGJhc2UgKyBNTUNJU1RBVFVTKSAmIE1DSV9SWERBVEFBVkxCTCkgeworCisJCSpwdHIgPSByZWFkbChiYXNlICsgTU1DSUZJRk8gKyAoY291bnQgJSBNQ0lfRklGT1NJWkUpKTsKKwkJcHRyKys7CisJCWNvdW50ICs9IHNpemVvZih1aW50MzJfdCk7CisKKwkJcmVtYWluIC09ICBzaXplb2YodWludDMyX3QpOworCQlpZiAocmVtYWluID09IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50Cittc21zZGNjX3Bpb193cml0ZShzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCBjaGFyICpidWZmZXIsCisJCSAgdW5zaWduZWQgaW50IHJlbWFpbiwgdTMyIHN0YXR1cykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBob3N0LT5iYXNlOworCWNoYXIgKnB0ciA9IGJ1ZmZlcjsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50IGNvdW50LCBtYXhjbnQ7CisKKwkJbWF4Y250ID0gc3RhdHVzICYgTUNJX1RYRklGT0VNUFRZID8gTUNJX0ZJRk9TSVpFIDoKKwkJCQkJCSAgICBNQ0lfRklGT0hBTEZTSVpFOworCQljb3VudCA9IG1pbihyZW1haW4sIG1heGNudCk7CisKKwkJd3JpdGVzbChiYXNlICsgTU1DSUZJRk8sIHB0ciwgY291bnQgPj4gMik7CisJCXB0ciArPSBjb3VudDsKKwkJcmVtYWluIC09IGNvdW50OworCisJCWlmIChyZW1haW4gPT0gMCkKKwkJCWJyZWFrOworCisJCXN0YXR1cyA9IHJlYWRsKGJhc2UgKyBNTUNJU1RBVFVTKTsKKwl9IHdoaWxlIChzdGF0dXMgJiBNQ0lfVFhGSUZPSEFMRkVNUFRZKTsKKworCXJldHVybiBwdHIgLSBidWZmZXI7Cit9CisKK3N0YXRpYyBpbnQKK21zbXNkY2Nfc3Bpbl9vbl9zdGF0dXMoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgdWludDMyX3QgbWFzaywgaW50IG1heHNwaW4pCit7CisJd2hpbGUgKG1heHNwaW4pIHsKKwkJaWYgKChyZWFkbChob3N0LT5iYXNlICsgTU1DSVNUQVRVUykgJiBtYXNrKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMSk7CisJCS0tbWF4c3BpbjsKKwl9CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQKK21zbXNkY2NfcGlvX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG1zbXNkY2NfaG9zdAkqaG9zdCA9IGRldl9pZDsKKwl2b2lkIF9faW9tZW0JCSpiYXNlID0gaG9zdC0+YmFzZTsKKwl1aW50MzJfdAkJc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoYmFzZSArIE1NQ0lTVEFUVVMpOworCisJZG8geworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQl1bnNpZ25lZCBpbnQgcmVtYWluLCBsZW47CisJCWNoYXIgKmJ1ZmZlcjsKKworCQlpZiAoIShzdGF0dXMgJiAoTUNJX1RYRklGT0hBTEZFTVBUWSB8IE1DSV9SWERBVEFBVkxCTCkpKSB7CisJCQlpZiAoaG9zdC0+Y3Vyci54ZmVyX3JlbWFpbiA9PSAwIHx8ICFtc21zZGNjX3Bpb3BvbGwpCisJCQkJYnJlYWs7CisKKwkJCWlmIChtc21zZGNjX3NwaW5fb25fc3RhdHVzKGhvc3QsCisJCQkJCQkgICAoTUNJX1RYRklGT0hBTEZFTVBUWSB8CisJCQkJCQkgICBNQ0lfUlhEQVRBQVZMQkwpLAorCQkJCQkJICAgUElPX1NQSU5NQVgpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBNYXAgdGhlIGN1cnJlbnQgc2NhdHRlciBidWZmZXIgKi8KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlidWZmZXIgPSBrbWFwX2F0b21pYyhzZ19wYWdlKGhvc3QtPnBpby5zZyksCisJCQkJICAgICBLTV9CSU9fU1JDX0lSUSkgKyBob3N0LT5waW8uc2ctPm9mZnNldDsKKwkJYnVmZmVyICs9IGhvc3QtPnBpby5zZ19vZmY7CisJCXJlbWFpbiA9IGhvc3QtPnBpby5zZy0+bGVuZ3RoIC0gaG9zdC0+cGlvLnNnX29mZjsKKwkJbGVuID0gMDsKKwkJaWYgKHN0YXR1cyAmIE1DSV9SWEFDVElWRSkKKwkJCWxlbiA9IG1zbXNkY2NfcGlvX3JlYWQoaG9zdCwgYnVmZmVyLCByZW1haW4pOworCQlpZiAoc3RhdHVzICYgTUNJX1RYQUNUSVZFKQorCQkJbGVuID0gbXNtc2RjY19waW9fd3JpdGUoaG9zdCwgYnVmZmVyLCByZW1haW4sIHN0YXR1cyk7CisKKwkJLyogVW5tYXAgdGhlIGJ1ZmZlciAqLworCQlrdW5tYXBfYXRvbWljKGJ1ZmZlciwgS01fQklPX1NSQ19JUlEpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkJaG9zdC0+cGlvLnNnX29mZiArPSBsZW47CisJCWhvc3QtPmN1cnIueGZlcl9yZW1haW4gLT0gbGVuOworCQlob3N0LT5jdXJyLmRhdGFfeGZlcmVkICs9IGxlbjsKKwkJcmVtYWluIC09IGxlbjsKKworCQlpZiAocmVtYWluID09IDApIHsKKwkJCS8qIFRoaXMgc2cgcGFnZSBpcyBmdWxsIC0gZG8gc29tZSBob3VzZWtlZXBpbmcgKi8KKwkJCWlmIChzdGF0dXMgJiBNQ0lfUlhBQ1RJVkUgJiYgaG9zdC0+Y3Vyci51c2VyX3BhZ2VzKQorCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHNnX3BhZ2UoaG9zdC0+cGlvLnNnKSk7CisKKwkJCWlmICghLS1ob3N0LT5waW8uc2dfbGVuKSB7CisJCQkJbWVtc2V0KCZob3N0LT5waW8sIDAsIHNpemVvZihob3N0LT5waW8pKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogQWR2YW5jZSB0byBuZXh0IHNnICovCisJCQlob3N0LT5waW8uc2crKzsKKwkJCWhvc3QtPnBpby5zZ19vZmYgPSAwOworCQl9CisKKwkJc3RhdHVzID0gcmVhZGwoYmFzZSArIE1NQ0lTVEFUVVMpOworCX0gd2hpbGUgKDEpOworCisJaWYgKHN0YXR1cyAmIE1DSV9SWEFDVElWRSAmJiBob3N0LT5jdXJyLnhmZXJfcmVtYWluIDwgTUNJX0ZJRk9TSVpFKQorCQl3cml0ZWwoTUNJX1JYREFUQUFWTEJMTUFTSywgYmFzZSArIE1NQ0lNQVNLMSk7CisKKwlpZiAoIWhvc3QtPmN1cnIueGZlcl9yZW1haW4pCisJCXdyaXRlbCgwLCBiYXNlICsgTU1DSU1BU0sxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbXNtc2RjY19kb19jbWRpcnEoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgdWludDMyX3Qgc3RhdHVzKQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y3Vyci5jbWQ7CisJdm9pZCBfX2lvbWVtCSAgICpiYXNlID0gaG9zdC0+YmFzZTsKKworCWhvc3QtPmN1cnIuY21kID0gTlVMTDsKKwljbWQtPnJlc3BbMF0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMCk7CisJY21kLT5yZXNwWzFdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTEpOworCWNtZC0+cmVzcFsyXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UyKTsKKwljbWQtPnJlc3BbM10gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMyk7CisKKwlkZWxfdGltZXIoJmhvc3QtPmNvbW1hbmRfdGltZXIpOworCWlmIChzdGF0dXMgJiBNQ0lfQ01EVElNRU9VVCkgeworCQljbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9DTURDUkNGQUlMICYmCisJCSAgIGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykgeworCQlwcl9lcnIoIiVzOiBDb21tYW5kIENSQyBlcnJvclxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQljbWQtPmVycm9yID0gLUVJTFNFUTsKKwl9CisKKwlpZiAoIWNtZC0+ZGF0YSB8fCBjbWQtPmVycm9yKSB7CisJCWlmIChob3N0LT5jdXJyLmRhdGEgJiYgaG9zdC0+ZG1hLnNnKQorCQkJbXNtX2Rtb3Zfc3RvcF9jbWQoaG9zdC0+ZG1hLmNoYW5uZWwsCisJCQkJCSAgJmhvc3QtPmRtYS5oZHIsIDApOworCQllbHNlIGlmIChob3N0LT5jdXJyLmRhdGEpIHsgLyogTm9uIERNQSAqLworCQkJbXNtc2RjY19zdG9wX2RhdGEoaG9zdCk7CisJCQltc21zZGNjX3JlcXVlc3RfZW5kKGhvc3QsIGNtZC0+bXJxKTsKKwkJfSBlbHNlIC8qIGhvc3QtPmRhdGEgPT0gTlVMTCAqLworCQkJbXNtc2RjY19yZXF1ZXN0X2VuZChob3N0LCBjbWQtPm1ycSk7CisJfSBlbHNlIGlmICghKGNtZC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSkKKwkJbXNtc2RjY19zdGFydF9kYXRhKGhvc3QsIGNtZC0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCittc21zZGNjX2hhbmRsZV9pcnFfZGF0YShzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0LCB1MzIgc3RhdHVzLAorCQkJdm9pZCBfX2lvbWVtICpiYXNlKQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmN1cnIuZGF0YTsKKworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgZm9yIGRhdGEgZXJyb3JzICovCisJaWYgKHN0YXR1cyAmIChNQ0lfREFUQUNSQ0ZBSUwgfCBNQ0lfREFUQVRJTUVPVVQgfAorCQkgICAgICBNQ0lfVFhVTkRFUlJVTiB8IE1DSV9SWE9WRVJSVU4pKSB7CisJCW1zbXNkY2NfZGF0YV9lcnIoaG9zdCwgZGF0YSwgc3RhdHVzKTsKKwkJaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZCA9IDA7CisJCWlmIChob3N0LT5kbWEuc2cpCisJCQltc21fZG1vdl9zdG9wX2NtZChob3N0LT5kbWEuY2hhbm5lbCwKKwkJCQkJICAmaG9zdC0+ZG1hLmhkciwgMCk7CisJCWVsc2UgeworCQkJbXNtc2RjY19zdG9wX2RhdGEoaG9zdCk7CisJCQlpZiAoIWRhdGEtPnN0b3ApCisJCQkJbXNtc2RjY19yZXF1ZXN0X2VuZChob3N0LCBkYXRhLT5tcnEpOworCQkJZWxzZQorCQkJCW1zbXNkY2Nfc3RhcnRfY29tbWFuZChob3N0LCBkYXRhLT5zdG9wLCAwKTsKKwkJfQorCX0KKworCS8qIENoZWNrIGZvciBkYXRhIGRvbmUgKi8KKwlpZiAoIWhvc3QtPmN1cnIuZ290X2RhdGFlbmQgJiYgKHN0YXR1cyAmIE1DSV9EQVRBRU5EKSkKKwkJaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCA9IDE7CisKKwlpZiAoIWhvc3QtPmN1cnIuZ290X2RhdGFibGtlbmQgJiYgKHN0YXR1cyAmIE1DSV9EQVRBQkxPQ0tFTkQpKQorCQlob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kID0gMTsKKworCS8qCisJICogSWYgRE1BIGlzIHN0aWxsIGluIHByb2dyZXNzLCB3ZSBjb21wbGV0ZSB2aWEgdGhlIGNvbXBsZXRpb24gaGFuZGxlcgorCSAqLworCWlmIChob3N0LT5jdXJyLmdvdF9kYXRhZW5kICYmIGhvc3QtPmN1cnIuZ290X2RhdGFibGtlbmQgJiYKKwkgICAgIWhvc3QtPmRtYS5idXN5KSB7CisJCS8qCisJCSAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgYW4gaXNzdWUgaW4gdGhlIGNvbnRyb2xsZXIgd2hlcmUKKwkJICogaWYgeW91IHJlcXVlc3QgYSBzbWFsbCBibG9jayB0cmFuc2ZlciAoPCBmaWZvIHNpemUpLAorCQkgKiB5b3UgbWF5IGdldCB5b3VyIERBVEFFTkQvREFUQUJMS0VORCBpcnEgd2l0aG91dCB0aGUKKwkJICogUElPIGRhdGEgaXJxLgorCQkgKgorCQkgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgc3RpbGwgZGF0YSB0byBiZSByZWFkLAorCQkgKiBhbmQgc2ltdWxhdGUgYSBQSU8gaXJxLgorCQkgKi8KKwkJaWYgKHJlYWRsKGJhc2UgKyBNTUNJU1RBVFVTKSAmIE1DSV9SWERBVEFBVkxCTCkKKwkJCW1zbXNkY2NfcGlvX2lycSgxLCBob3N0KTsKKworCQltc21zZGNjX3N0b3BfZGF0YShob3N0KTsKKwkJaWYgKCFkYXRhLT5lcnJvcikKKwkJCWhvc3QtPmN1cnIuZGF0YV94ZmVyZWQgPSBob3N0LT5jdXJyLnhmZXJfc2l6ZTsKKworCQlpZiAoIWRhdGEtPnN0b3ApCisJCQltc21zZGNjX3JlcXVlc3RfZW5kKGhvc3QsIGRhdGEtPm1ycSk7CisJCWVsc2UKKwkJCW1zbXNkY2Nfc3RhcnRfY29tbWFuZChob3N0LCBkYXRhLT5zdG9wLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbXNtc2RjY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtc21zZGNjX2hvc3QJKmhvc3QgPSBkZXZfaWQ7CisJdm9pZCBfX2lvbWVtCQkqYmFzZSA9IGhvc3QtPmJhc2U7CisJdTMyCQkJc3RhdHVzOworCWludAkJCXJldCA9IDA7CisJaW50CQkJY2FyZGludCA9IDA7CisKKwlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCisJZG8geworCQlzdGF0dXMgPSByZWFkbChiYXNlICsgTU1DSVNUQVRVUyk7CisKKwkJc3RhdHVzICY9IChyZWFkbChiYXNlICsgTU1DSU1BU0swKSB8IE1DSV9EQVRBQkxPQ0tFTkRNQVNLKTsKKwkJd3JpdGVsKHN0YXR1cywgYmFzZSArIE1NQ0lDTEVBUik7CisKKwkJbXNtc2RjY19oYW5kbGVfaXJxX2RhdGEoaG9zdCwgc3RhdHVzLCBiYXNlKTsKKworCQlpZiAoc3RhdHVzICYgKE1DSV9DTURTRU5UIHwgTUNJX0NNRFJFU1BFTkQgfCBNQ0lfQ01EQ1JDRkFJTCB8CisJCQkgICAgICBNQ0lfQ01EVElNRU9VVCkgJiYgaG9zdC0+Y3Vyci5jbWQpIHsKKwkJCW1zbXNkY2NfZG9fY21kaXJxKGhvc3QsIHN0YXR1cyk7CisJCX0KKworCQlpZiAoc3RhdHVzICYgTUNJX1NESU9JTlRPUEVSKSB7CisJCQljYXJkaW50ID0gMTsKKwkJCXN0YXR1cyAmPSB+TUNJX1NESU9JTlRPUEVSOworCQl9CisJCXJldCA9IDE7CisJfSB3aGlsZSAoc3RhdHVzKTsKKworCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKworCS8qCisJICogV2UgaGF2ZSB0byBkZWxheSBoYW5kbGluZyB0aGUgY2FyZCBpbnRlcnJ1cHQgYXMgaXQgY2FsbHMKKwkgKiBiYWNrIGludG8gdGhlIGRyaXZlci4KKwkgKi8KKwlpZiAoY2FyZGludCkKKwkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIHZvaWQKK21zbXNkY2NfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk5fT04oaG9zdC0+Y3Vyci5tcnEgIT0gTlVMTCk7CisJV0FSTl9PTihob3N0LT5wd3IgPT0gMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaG9zdC0+c3RhdHMucmVxcysrOworCisJaWYgKGhvc3QtPmVqZWN0KSB7CisJCWlmIChtcnEtPmRhdGEgJiYgIShtcnEtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkpIHsKKwkJCW1ycS0+Y21kLT5lcnJvciA9IDA7CisJCQltcnEtPmRhdGEtPmJ5dGVzX3hmZXJlZCA9IG1ycS0+ZGF0YS0+Ymxrc3ogKgorCQkJCQkJICBtcnEtPmRhdGEtPmJsb2NrczsKKwkJfSBlbHNlCisJCQltcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVNOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJbW1jX3JlcXVlc3RfZG9uZShtbWMsIG1ycSk7CisJCXJldHVybjsKKwl9CisKKwlob3N0LT5jdXJyLm1ycSA9IG1ycTsKKworCWlmIChtcnEtPmRhdGEgJiYgbXJxLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCW1zbXNkY2Nfc3RhcnRfZGF0YShob3N0LCBtcnEtPmRhdGEpOworCisJbXNtc2RjY19zdGFydF9jb21tYW5kKGhvc3QsIG1ycS0+Y21kLCAwKTsKKworCWlmIChob3N0LT5jbWRwb2xsICYmICFtc21zZGNjX3NwaW5fb25fc3RhdHVzKGhvc3QsCisJCQkJTUNJX0NNRFJFU1BFTkR8TUNJX0NNRENSQ0ZBSUx8TUNJX0NNRFRJTUVPVVQsCisJCQkJQ01EX1NQSU5NQVgpKSB7CisJCXVpbnQzMl90IHN0YXR1cyA9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJU1RBVFVTKTsKKwkJbXNtc2RjY19kb19jbWRpcnEoaG9zdCwgc3RhdHVzKTsKKwkJd3JpdGVsKE1DSV9DTURSRVNQRU5EIHwgTUNJX0NNRENSQ0ZBSUwgfCBNQ0lfQ01EVElNRU9VVCwKKwkJICAgICAgIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOworCQlob3N0LT5zdGF0cy5jbWRwb2xsX2hpdHMrKzsKKwl9IGVsc2UgeworCQlob3N0LT5zdGF0cy5jbWRwb2xsX21pc3NlcysrOworCQltb2RfdGltZXIoJmhvc3QtPmNvbW1hbmRfdGltZXIsIGppZmZpZXMgKyBIWik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK21zbXNkY2Nfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1MzIgY2xrID0gMCwgcHdyID0gMDsKKwlpbnQgcmM7CisKKwlpZiAoaW9zLT5jbG9jaykgeworCisJCWlmICghaG9zdC0+Y2xrc19vbikgeworCQkJY2xrX2VuYWJsZShob3N0LT5wY2xrKTsKKwkJCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwkJCWhvc3QtPmNsa3Nfb24gPSAxOworCQl9CisJCWlmIChpb3MtPmNsb2NrICE9IGhvc3QtPmNsa19yYXRlKSB7CisJCQlyYyA9IGNsa19zZXRfcmF0ZShob3N0LT5jbGssIGlvcy0+Y2xvY2spOworCQkJaWYgKHJjIDwgMCkKKwkJCQlwcl9lcnIoIiVzOiBFcnJvciBzZXR0aW5nIGNsb2NrIHJhdGUgKCVkKVxuIiwKKwkJCQkgICAgICAgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIHJjKTsKKwkJCWVsc2UKKwkJCQlob3N0LT5jbGtfcmF0ZSA9IGlvcy0+Y2xvY2s7CisJCX0KKwkJY2xrIHw9IE1DSV9DTEtfRU5BQkxFOworCX0KKworCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCWNsayB8PSAoMiA8PCAxMCk7IC8qIFNldCBXSURFQlVTICovCisKKwlpZiAoaW9zLT5jbG9jayA+IDQwMDAwMCAmJiBtc21zZGNjX3B3cnNhdmUpCisJCWNsayB8PSAoMSA8PCA5KTsgLyogUFdSU0FWRSAqLworCisJY2xrIHw9ICgxIDw8IDEyKTsgLyogRkxPV19FTkEgKi8KKwljbGsgfD0gKDEgPDwgMTUpOyAvKiBmZWVkYmFjayBjbG9jayAqLworCisJaWYgKGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQpCisJCXB3ciB8PSBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOworCisJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKKwljYXNlIE1NQ19QT1dFUl9PRkY6CisJCWh0Y19wd3JzaW5rX3NldChQV1JTSU5LX1NEQ0FSRCwgMCk7CisJCWJyZWFrOworCWNhc2UgTU1DX1BPV0VSX1VQOgorCQlwd3IgfD0gTUNJX1BXUl9VUDsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUE9XRVJfT046CisJCWh0Y19wd3JzaW5rX3NldChQV1JTSU5LX1NEQ0FSRCwgMTAwKTsKKwkJcHdyIHw9IE1DSV9QV1JfT047CisJCWJyZWFrOworCX0KKworCWlmIChpb3MtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTikKKwkJcHdyIHw9IE1DSV9PRDsKKworCXdyaXRlbChjbGssIGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spOworCisJaWYgKGhvc3QtPnB3ciAhPSBwd3IpIHsKKwkJaG9zdC0+cHdyID0gcHdyOworCQl3cml0ZWwocHdyLCBob3N0LT5iYXNlICsgTU1DSVBPV0VSKTsKKwl9CisKKwlpZiAoIShjbGsgJiBNQ0lfQ0xLX0VOQUJMRSkgJiYgaG9zdC0+Y2xrc19vbikgeworCQljbGtfZGlzYWJsZShob3N0LT5jbGspOworCQljbGtfZGlzYWJsZShob3N0LT5wY2xrKTsKKwkJaG9zdC0+Y2xrc19vbiA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBtc21zZGNjX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdGF0dXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWlmIChtc21zZGNjX3NkaW9pcnEgPT0gMSkgeworCQlzdGF0dXMgPSByZWFkbChob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKwkJaWYgKGVuYWJsZSkKKwkJCXN0YXR1cyB8PSBNQ0lfU0RJT0lOVE9QRVJNQVNLOworCQllbHNlCisJCQlzdGF0dXMgJj0gfk1DSV9TRElPSU5UT1BFUk1BU0s7CisJCWhvc3QtPnNhdmVkX2lycTBtYXNrID0gc3RhdHVzOworCQl3cml0ZWwoc3RhdHVzLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtc21zZGNjX29wcyA9IHsKKwkucmVxdWVzdAk9IG1zbXNkY2NfcmVxdWVzdCwKKwkuc2V0X2lvcwk9IG1zbXNkY2Nfc2V0X2lvcywKKwkuZW5hYmxlX3NkaW9faXJxID0gbXNtc2RjY19lbmFibGVfc2Rpb19pcnEsCit9OworCitzdGF0aWMgdm9pZAorbXNtc2RjY19jaGVja19zdGF0dXModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1zbXNkY2NfaG9zdCAqKWRhdGE7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCWlmICghaG9zdC0+cGxhdC0+c3RhdHVzKSB7CisJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7CisJCWdvdG8gb3V0OworCX0KKworCXN0YXR1cyA9IGhvc3QtPnBsYXQtPnN0YXR1cyhtbWNfZGV2KGhvc3QtPm1tYykpOworCWhvc3QtPmVqZWN0ID0gIXN0YXR1czsKKwlpZiAoc3RhdHVzIF4gaG9zdC0+b2xkc3RhdCkgeworCQlwcl9pbmZvKCIlczogU2xvdCBzdGF0dXMgY2hhbmdlIGRldGVjdGVkICglZCAtPiAlZClcbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgaG9zdC0+b2xkc3RhdCwgc3RhdHVzKTsKKwkJaWYgKHN0YXR1cykKKwkJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgKDUgKiBIWikgLyAyKTsKKwkJZWxzZQorCQkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCAwKTsKKwl9CisKKwlob3N0LT5vbGRzdGF0ID0gc3RhdHVzOworCitvdXQ6CisJaWYgKGhvc3QtPnRpbWVyLmZ1bmN0aW9uKQorCQltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgSFopOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK21zbXNkY2NfcGxhdGZvcm1fc3RhdHVzX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IGRldl9pZDsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogJWRcbiIsIF9fZnVuY19fLCBpcnEpOworCW1zbXNkY2NfY2hlY2tfc3RhdHVzKCh1bnNpZ25lZCBsb25nKSBob3N0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkCittc21zZGNjX3N0YXR1c19ub3RpZnlfY2IoaW50IGNhcmRfcHJlc2VudCwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNhcmRfcHJlc2VudCAlZFxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksCisJICAgICAgIGNhcmRfcHJlc2VudCk7CisJbXNtc2RjY19jaGVja19zdGF0dXMoKHVuc2lnbmVkIGxvbmcpIGhvc3QpOworfQorCisvKgorICogY2FsbGVkIHdoZW4gYSBjb21tYW5kIGV4cGlyZXMuCisgKiBEdW1wIHNvbWUgZGVidWdnaW5nLCBhbmQgdGhlbiBlcnJvcgorICogb3V0IHRoZSB0cmFuc2FjdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK21zbXNkY2NfY29tbWFuZF9leHBpcmVkKHVuc2lnbmVkIGxvbmcgX2RhdGEpCit7CisJc3RydWN0IG1zbXNkY2NfaG9zdAkqaG9zdCA9IChzdHJ1Y3QgbXNtc2RjY19ob3N0ICopIF9kYXRhOworCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwltcnEgPSBob3N0LT5jdXJyLm1ycTsKKworCWlmICghbXJxKSB7CisJCXByX2luZm8oIiVzOiBDb21tYW5kIGV4cGlyeSBtaXNmaXJlXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlwcl9lcnIoIiVzOiBDb21tYW5kIHRpbWVvdXQgKCVwICVwICVwICVwKVxuIiwKKwkgICAgICAgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIG1ycSwgbXJxLT5jbWQsCisJICAgICAgIG1ycS0+ZGF0YSwgaG9zdC0+ZG1hLnNnKTsKKworCW1ycS0+Y21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisJbXNtc2RjY19zdG9wX2RhdGEoaG9zdCk7CisKKwl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lDT01NQU5EKTsKKworCWhvc3QtPmN1cnIubXJxID0gTlVMTDsKKwlob3N0LT5jdXJyLmNtZCA9IE5VTEw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7Cit9CisKK3N0YXRpYyBpbnQKK21zbXNkY2NfaW5pdF9kbWEoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCkKK3sKKwltZW1zZXQoJmhvc3QtPmRtYSwgMCwgc2l6ZW9mKHN0cnVjdCBtc21zZGNjX2RtYV9kYXRhKSk7CisJaG9zdC0+ZG1hLmhvc3QgPSBob3N0OworCWhvc3QtPmRtYS5jaGFubmVsID0gLTE7CisKKwlpZiAoIWhvc3QtPmRtYXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlob3N0LT5kbWEubmMgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwKKwkJCQkJICBzaXplb2Yoc3RydWN0IG1zbXNkY2NfbmNfZG1hZGF0YSksCisJCQkJCSAgJmhvc3QtPmRtYS5uY19idXNhZGRyLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmIChob3N0LT5kbWEubmMgPT0gTlVMTCkgeworCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChob3N0LT5kbWEubmMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgbXNtc2RjY19uY19kbWFkYXRhKSk7CisJaG9zdC0+ZG1hLmNtZF9idXNhZGRyID0gaG9zdC0+ZG1hLm5jX2J1c2FkZHI7CisJaG9zdC0+ZG1hLmNtZHB0cl9idXNhZGRyID0gaG9zdC0+ZG1hLm5jX2J1c2FkZHIgKworCQkJCW9mZnNldG9mKHN0cnVjdCBtc21zZGNjX25jX2RtYWRhdGEsIGNtZHB0cik7CisJaG9zdC0+ZG1hLmNoYW5uZWwgPSBob3N0LT5kbWFyZXMtPnN0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfTU1DX01TTTdYMDBBX1JFU1VNRV9JTl9XUQorc3RhdGljIHZvaWQKK2RvX3Jlc3VtZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtc21zZGNjX2hvc3QsIHJlc3VtZV90YXNrKTsKKwlzdHJ1Y3QgbW1jX2hvc3QJKm1tYyA9IGhvc3QtPm1tYzsKKworCWlmIChtbWMpIHsKKwkJbW1jX3Jlc3VtZV9ob3N0KG1tYyk7CisJCWlmIChob3N0LT5zdGF0X2lycSkKKwkJCWVuYWJsZV9pcnEoaG9zdC0+c3RhdF9pcnEpOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50Cittc21zZGNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhICpwbGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmNtZF9pcnFyZXMgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqcGlvX2lycXJlcyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpzdGF0X2lycXJlcyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICptZW1yZXMgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqZG1hcmVzID0gTlVMTDsKKwlpbnQgcmV0OworCisJLyogbXVzdCBoYXZlIHBsYXRmb3JtIGRhdGEgKi8KKwlpZiAoIXBsYXQpIHsKKwkJcHJfZXJyKCIlczogUGxhdGZvcm0gZGF0YSBub3QgYXZhaWxhYmxlXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGV2LT5pZCA8IDEgfHwgcGRldi0+aWQgPiA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwZGV2LT5yZXNvdXJjZSA9PSBOVUxMIHx8IHBkZXYtPm51bV9yZXNvdXJjZXMgPCAyKSB7CisJCXByX2VycigiJXM6IEludmFsaWQgcmVzb3VyY2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwltZW1yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRtYXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CisJY21kX2lycXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsCisJCQkJCQkgICJjbWRfaXJxIik7CisJcGlvX2lycXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsCisJCQkJCQkgICJwaW9faXJxIik7CisJc3RhdF9pcnFyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLAorCQkJCQkJICAgInN0YXR1c19pcnEiKTsKKworCWlmICghY21kX2lycXJlcyB8fCAhcGlvX2lycXJlcyB8fCAhbWVtcmVzKSB7CisJCXByX2VycigiJXM6IEludmFsaWQgcmVzb3VyY2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKgorCSAqIFNldHVwIG91ciBob3N0IHN0cnVjdHVyZQorCSAqLworCisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtc21zZGNjX2hvc3QpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1tYykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlob3N0LT5wZGV2X2lkID0gcGRldi0+aWQ7CisJaG9zdC0+cGxhdCA9IHBsYXQ7CisJaG9zdC0+bW1jID0gbW1jOworCisJaG9zdC0+Y21kcG9sbCA9IDE7CisKKwlob3N0LT5iYXNlID0gaW9yZW1hcChtZW1yZXMtPnN0YXJ0LCBQQUdFX1NJWkUpOworCWlmICghaG9zdC0+YmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlob3N0LT5jbWRfaXJxcmVzID0gY21kX2lycXJlczsKKwlob3N0LT5waW9faXJxcmVzID0gcGlvX2lycXJlczsKKwlob3N0LT5tZW1yZXMgPSBtZW1yZXM7CisJaG9zdC0+ZG1hcmVzID0gZG1hcmVzOworCXNwaW5fbG9ja19pbml0KCZob3N0LT5sb2NrKTsKKworCS8qCisJICogU2V0dXAgRE1BCisJICovCisJbXNtc2RjY19pbml0X2RtYShob3N0KTsKKworCS8qCisJICogU2V0dXAgbWFpbiBwZXJpcGhlcmFsIGJ1cyBjbG9jaworCSAqLworCWhvc3QtPnBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzZGNfcGNsayIpOworCWlmIChJU19FUlIoaG9zdC0+cGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5wY2xrKTsKKwkJZ290byBob3N0X2ZyZWU7CisJfQorCisJcmV0ID0gY2xrX2VuYWJsZShob3N0LT5wY2xrKTsKKwlpZiAocmV0KQorCQlnb3RvIHBjbGtfcHV0OworCisJaG9zdC0+cGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGhvc3QtPnBjbGspOworCisJLyoKKwkgKiBTZXR1cCBTREMgTU1DIGNsb2NrCisJICovCisJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2RjX2NsayIpOworCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmNsayk7CisJCWdvdG8gcGNsa19kaXNhYmxlOworCX0KKworCXJldCA9IGNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsa19wdXQ7CisKKwlyZXQgPSBjbGtfc2V0X3JhdGUoaG9zdC0+Y2xrLCBtc21zZGNjX2ZtaW4pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogQ2xvY2sgcmF0ZSBzZXQgZmFpbGVkICglZClcbiIsIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGNsa19kaXNhYmxlOworCX0KKworCWhvc3QtPmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGhvc3QtPmNsayk7CisKKwlob3N0LT5jbGtzX29uID0gMTsKKworCS8qCisJICogU2V0dXAgTU1DIGhvc3Qgc3RydWN0dXJlCisJICovCisJbW1jLT5vcHMgPSAmbXNtc2RjY19vcHM7CisJbW1jLT5mX21pbiA9IG1zbXNkY2NfZm1pbjsKKwltbWMtPmZfbWF4ID0gbXNtc2RjY19mbWF4OworCW1tYy0+b2NyX2F2YWlsID0gcGxhdC0+b2NyX21hc2s7CisKKwlpZiAobXNtc2RjY180Yml0KQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOworCWlmIChtc21zZGNjX3NkaW9pcnEpCisJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1NESU9fSVJROworCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRDsKKworCW1tYy0+bWF4X3BoeXNfc2VncyA9IE5SX1NHOworCW1tYy0+bWF4X2h3X3NlZ3MgPSBOUl9TRzsKKwltbWMtPm1heF9ibGtfc2l6ZSA9IDQwOTY7CS8qIE1DSV9EQVRBX0NUTCBCTE9DS1NJWkUgdXAgdG8gNDA5NiAqLworCW1tYy0+bWF4X2Jsa19jb3VudCA9IDY1NTM2OworCisJbW1jLT5tYXhfcmVxX3NpemUgPSAzMzU1NDQzMjsJLyogTUNJX0RBVEFfTEVOR1RIIGlzIDI1IGJpdHMgKi8KKwltbWMtPm1heF9zZWdfc2l6ZSA9IG1tYy0+bWF4X3JlcV9zaXplOworCisJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOworCXdyaXRlbCgweDVlMDA3ZmYsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOyAvKiBBZGQ6IDEgPDwgMjUgKi8KKworCXdyaXRlbChNQ0lfSVJRRU5BQkxFLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKwlob3N0LT5zYXZlZF9pcnEwbWFzayA9IE1DSV9JUlFFTkFCTEU7CisKKwkvKgorCSAqIFNldHVwIGNhcmQgZGV0ZWN0IGNoYW5nZQorCSAqLworCisJbWVtc2V0KCZob3N0LT50aW1lciwgMCwgc2l6ZW9mKGhvc3QtPnRpbWVyKSk7CisKKwlpZiAoc3RhdF9pcnFyZXMgJiYgIShzdGF0X2lycXJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0RJU0FCTEVEKSkgeworCQl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gSVJRRl9TSEFSRUQgfAorCQkJKHN0YXRfaXJxcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKTsKKworCQlob3N0LT5zdGF0X2lycSA9IHN0YXRfaXJxcmVzLT5zdGFydDsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+c3RhdF9pcnEsCisJCQkJICBtc21zZGNjX3BsYXRmb3JtX3N0YXR1c19pcnEsCisJCQkJICBpcnFmbGFncywKKwkJCQkgIERSSVZFUl9OQU1FICIgKHNsb3QpIiwKKwkJCQkgIGhvc3QpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gZ2V0IHNsb3QgSVJRICVkICglZClcbiIsCisJCQkgICAgICAgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QtPnN0YXRfaXJxLCByZXQpOworCQkJZ290byBjbGtfZGlzYWJsZTsKKwkJfQorCX0gZWxzZSBpZiAocGxhdC0+cmVnaXN0ZXJfc3RhdHVzX25vdGlmeSkgeworCQlwbGF0LT5yZWdpc3Rlcl9zdGF0dXNfbm90aWZ5KG1zbXNkY2Nfc3RhdHVzX25vdGlmeV9jYiwgaG9zdCk7CisJfSBlbHNlIGlmICghcGxhdC0+c3RhdHVzKQorCQlwcl9lcnIoIiVzOiBObyBjYXJkIGRldGVjdCBmYWNpbGl0aWVzIGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIG1tY19ob3N0bmFtZShtbWMpKTsKKwllbHNlIHsKKwkJaW5pdF90aW1lcigmaG9zdC0+dGltZXIpOworCQlob3N0LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zdDsKKwkJaG9zdC0+dGltZXIuZnVuY3Rpb24gPSBtc21zZGNjX2NoZWNrX3N0YXR1czsKKwkJaG9zdC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwkJYWRkX3RpbWVyKCZob3N0LT50aW1lcik7CisJfQorCisJaWYgKHBsYXQtPnN0YXR1cykgeworCQlob3N0LT5vbGRzdGF0ID0gaG9zdC0+cGxhdC0+c3RhdHVzKG1tY19kZXYoaG9zdC0+bW1jKSk7CisJCWhvc3QtPmVqZWN0ID0gIWhvc3QtPm9sZHN0YXQ7CisJfQorCisJLyoKKwkgKiBTZXR1cCBhIGNvbW1hbmQgdGltZXIuIFdlIGN1cnJlbnRseSBuZWVkIHRoaXMgZHVlIHRvCisJICogc29tZSAnc3RyYW5nZScgdGltZW91dCAvIGVycm9yIGhhbmRsaW5nIHNpdHVhdGlvbnMuCisJICovCisJaW5pdF90aW1lcigmaG9zdC0+Y29tbWFuZF90aW1lcik7CisJaG9zdC0+Y29tbWFuZF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhvc3Q7CisJaG9zdC0+Y29tbWFuZF90aW1lci5mdW5jdGlvbiA9IG1zbXNkY2NfY29tbWFuZF9leHBpcmVkOworCisJcmV0ID0gcmVxdWVzdF9pcnEoY21kX2lycXJlcy0+c3RhcnQsIG1zbXNkY2NfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJJVkVSX05BTUUgIiAoY21kKSIsIGhvc3QpOworCWlmIChyZXQpCisJCWdvdG8gc3RhdF9pcnFfZnJlZTsKKworCXJldCA9IHJlcXVlc3RfaXJxKHBpb19pcnFyZXMtPnN0YXJ0LCBtc21zZGNjX3Bpb19pcnEsIElSUUZfU0hBUkVELAorCQkJICBEUklWRVJfTkFNRSAiIChwaW8pIiwgaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBjbWRfaXJxX2ZyZWU7CisKKwltbWNfc2V0X2RydmRhdGEocGRldiwgbW1jKTsKKwltbWNfYWRkX2hvc3QobW1jKTsKKworCXByX2luZm8oIiVzOiBRdWFsY29tbSBNU00gU0RDQyBhdCAweCUwMTZsbHggaXJxICVkLCVkIGRtYSAlZFxuIiwKKwkJbW1jX2hvc3RuYW1lKG1tYyksICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtcmVzLT5zdGFydCwKKwkJKHVuc2lnbmVkIGludCkgY21kX2lycXJlcy0+c3RhcnQsCisJCSh1bnNpZ25lZCBpbnQpIGhvc3QtPnN0YXRfaXJxLCBob3N0LT5kbWEuY2hhbm5lbCk7CisJcHJfaW5mbygiJXM6IDQgYml0IGRhdGEgbW9kZSAlc1xuIiwgbW1jX2hvc3RuYW1lKG1tYyksCisJCShtbWMtPmNhcHMgJiBNTUNfQ0FQXzRfQklUX0RBVEEgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CisJcHJfaW5mbygiJXM6IE1NQyBjbG9jayAldSAtPiAldSBIeiwgUENMSyAldSBIelxuIiwKKwkJbW1jX2hvc3RuYW1lKG1tYyksIG1zbXNkY2NfZm1pbiwgbXNtc2RjY19mbWF4LCBob3N0LT5wY2xrX3JhdGUpOworCXByX2luZm8oIiVzOiBTbG90IGVqZWN0IHN0YXR1cyA9ICVkXG4iLCBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdC0+ZWplY3QpOworCXByX2luZm8oIiVzOiBQb3dlciBzYXZlIGZlYXR1cmUgZW5hYmxlID0gJWRcbiIsCisJCW1tY19ob3N0bmFtZShtbWMpLCBtc21zZGNjX3B3cnNhdmUpOworCisJaWYgKGhvc3QtPmRtYS5jaGFubmVsICE9IC0xKSB7CisJCXByX2luZm8oIiVzOiBETSBub24tY2FjaGVkIGJ1ZmZlciBhdCAlcCwgZG1hX2FkZHIgMHglLjh4XG4iLAorCQkJbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QtPmRtYS5uYywgaG9zdC0+ZG1hLm5jX2J1c2FkZHIpOworCQlwcl9pbmZvKCIlczogRE0gY21kIGJ1c2FkZHIgMHglLjh4LCBjbWRwdHIgYnVzYWRkciAweCUuOHhcbiIsCisJCQltbWNfaG9zdG5hbWUobW1jKSwgaG9zdC0+ZG1hLmNtZF9idXNhZGRyLAorCQkJaG9zdC0+ZG1hLmNtZHB0cl9idXNhZGRyKTsKKwl9IGVsc2UKKwkJcHJfaW5mbygiJXM6IFBJTyB0cmFuc2ZlciBlbmFibGVkXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CisJaWYgKGhvc3QtPnRpbWVyLmZ1bmN0aW9uKQorCQlwcl9pbmZvKCIlczogUG9sbGluZyBzdGF0dXMgbW9kZSBlbmFibGVkXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CisKKwlyZXR1cm4gMDsKKyBjbWRfaXJxX2ZyZWU6CisJZnJlZV9pcnEoY21kX2lycXJlcy0+c3RhcnQsIGhvc3QpOworIHN0YXRfaXJxX2ZyZWU6CisJaWYgKGhvc3QtPnN0YXRfaXJxKQorCQlmcmVlX2lycShob3N0LT5zdGF0X2lycSwgaG9zdCk7CisgY2xrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKKyBjbGtfcHV0OgorCWNsa19wdXQoaG9zdC0+Y2xrKTsKKyBwY2xrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGUoaG9zdC0+cGNsayk7CisgcGNsa19wdXQ6CisJY2xrX3B1dChob3N0LT5wY2xrKTsKKyBob3N0X2ZyZWU6CisJbW1jX2ZyZWVfaG9zdChtbWMpOworIG91dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cittc21zZGNjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBtbWNfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmMgPSAwOworCisJaWYgKG1tYykgeworCQlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCQlpZiAoaG9zdC0+c3RhdF9pcnEpCisJCQlkaXNhYmxlX2lycShob3N0LT5zdGF0X2lycSk7CisKKwkJaWYgKG1tYy0+Y2FyZCAmJiBtbWMtPmNhcmQtPnR5cGUgIT0gTU1DX1RZUEVfU0RJTykKKwkJCXJjID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKwkJaWYgKCFyYykgeworCQkJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOworCisJCQlpZiAoaG9zdC0+Y2xrc19vbikgeworCQkJCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CisJCQkJY2xrX2Rpc2FibGUoaG9zdC0+cGNsayk7CisJCQkJaG9zdC0+Y2xrc19vbiA9IDA7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50Cittc21zZGNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBtbWNfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG1tYykgeworCQlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJCWlmICghaG9zdC0+Y2xrc19vbikgeworCQkJY2xrX2VuYWJsZShob3N0LT5wY2xrKTsKKwkJCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwkJCWhvc3QtPmNsa3Nfb24gPSAxOworCQl9CisKKwkJd3JpdGVsKGhvc3QtPnNhdmVkX2lycTBtYXNrLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKG1tYy0+Y2FyZCAmJiBtbWMtPmNhcmQtPnR5cGUgIT0gTU1DX1RZUEVfU0RJTykKKwkJCW1tY19yZXN1bWVfaG9zdChtbWMpOworCQkJaWYgKGhvc3QtPnN0YXRfaXJxKQorCQkJCWVuYWJsZV9pcnEoaG9zdC0+c3RhdF9pcnEpOworCQllbHNlIGlmIChob3N0LT5zdGF0X2lycSkKKwkJCWVuYWJsZV9pcnEoaG9zdC0+c3RhdF9pcnEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXNtc2RjY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1zbXNkY2NfcHJvYmUsCisJLnN1c3BlbmQJPSBtc21zZGNjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtc21zZGNjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXNtX3NkY2MiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtc21zZGNjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtc21zZGNjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtc21zZGNjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtc2RjY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtc21zZGNjX2luaXQpOworbW9kdWxlX2V4aXQobXNtc2RjY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJRdWFsY29tbSBNU00gN1gwMEEgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuaCBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzg0NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbW1jL2hvc3QvbXNtc2RjYy5oIC0gUUNUIE1TTTdLIFNEQyBDb250cm9sbGVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAtIEJhc2VkIG9uIG1tY2kuaAorICovCisKKyNpZm5kZWYgX01TTV9TRENDX0gKKyNkZWZpbmUgX01TTV9TRENDX0gKKworI2RlZmluZSBNU01TRENDX0NSQ0lfU0RDMQk2CisjZGVmaW5lIE1TTVNEQ0NfQ1JDSV9TREMyCTcKKyNkZWZpbmUgTVNNU0RDQ19DUkNJX1NEQzMJMTIKKyNkZWZpbmUgTVNNU0RDQ19DUkNJX1NEQzQJMTMKKworI2RlZmluZSBNTUNJUE9XRVIJCTB4MDAwCisjZGVmaW5lIE1DSV9QV1JfT0ZGCQkweDAwCisjZGVmaW5lIE1DSV9QV1JfVVAJCTB4MDIKKyNkZWZpbmUgTUNJX1BXUl9PTgkJMHgwMworI2RlZmluZSBNQ0lfT0QJCQkoMSA8PCA2KQorCisjZGVmaW5lIE1NQ0lDTE9DSwkJMHgwMDQKKyNkZWZpbmUgTUNJX0NMS19FTkFCTEUJCSgxIDw8IDgpCisjZGVmaW5lIE1DSV9DTEtfUFdSU0FWRQkJKDEgPDwgOSkKKyNkZWZpbmUgTUNJX0NMS19XSURFQlVTCQkoMSA8PCAxMCkKKyNkZWZpbmUgTUNJX0NMS19GTE9XRU5BCQkoMSA8PCAxMikKKyNkZWZpbmUgTUNJX0NMS19JTlZFUlRPVVQJKDEgPDwgMTMpCisjZGVmaW5lIE1DSV9DTEtfU0VMRUNUSU4JKDEgPDwgMTQpCisKKyNkZWZpbmUgTU1DSUFSR1VNRU5UCQkweDAwOAorI2RlZmluZSBNTUNJQ09NTUFORAkJMHgwMGMKKyNkZWZpbmUgTUNJX0NQU01fUkVTUE9OU0UJKDEgPDwgNikKKyNkZWZpbmUgTUNJX0NQU01fTE9OR1JTUAkoMSA8PCA3KQorI2RlZmluZSBNQ0lfQ1BTTV9JTlRFUlJVUFQJKDEgPDwgOCkKKyNkZWZpbmUgTUNJX0NQU01fUEVORElORwkoMSA8PCA5KQorI2RlZmluZSBNQ0lfQ1BTTV9FTkFCTEUJCSgxIDw8IDEwKQorI2RlZmluZSBNQ0lfQ1BTTV9QUk9HRU5BCSgxIDw8IDExKQorI2RlZmluZSBNQ0lfQ1NQTV9EQVRDTUQJCSgxIDw8IDEyKQorI2RlZmluZSBNQ0lfQ1NQTV9NQ0lBQk9SVAkoMSA8PCAxMykKKyNkZWZpbmUgTUNJX0NTUE1fQ0NTRU5BQkxFCSgxIDw8IDE0KQorI2RlZmluZSBNQ0lfQ1NQTV9DQ1NESVNBQkxFCSgxIDw8IDE1KQorCisKKyNkZWZpbmUgTU1DSVJFU1BDTUQJCTB4MDEwCisjZGVmaW5lIE1NQ0lSRVNQT05TRTAJCTB4MDE0CisjZGVmaW5lIE1NQ0lSRVNQT05TRTEJCTB4MDE4CisjZGVmaW5lIE1NQ0lSRVNQT05TRTIJCTB4MDFjCisjZGVmaW5lIE1NQ0lSRVNQT05TRTMJCTB4MDIwCisjZGVmaW5lIE1NQ0lEQVRBVElNRVIJCTB4MDI0CisjZGVmaW5lIE1NQ0lEQVRBTEVOR1RICQkweDAyOAorCisjZGVmaW5lIE1NQ0lEQVRBQ1RSTAkJMHgwMmMKKyNkZWZpbmUgTUNJX0RQU01fRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBNQ0lfRFBTTV9ESVJFQ1RJT04JKDEgPDwgMSkKKyNkZWZpbmUgTUNJX0RQU01fTU9ERQkJKDEgPDwgMikKKyNkZWZpbmUgTUNJX0RQU01fRE1BRU5BQkxFCSgxIDw8IDMpCisKKyNkZWZpbmUgTU1DSURBVEFDTlQJCTB4MDMwCisjZGVmaW5lIE1NQ0lTVEFUVVMJCTB4MDM0CisjZGVmaW5lIE1DSV9DTURDUkNGQUlMCQkoMSA8PCAwKQorI2RlZmluZSBNQ0lfREFUQUNSQ0ZBSUwJCSgxIDw8IDEpCisjZGVmaW5lIE1DSV9DTURUSU1FT1VUCQkoMSA8PCAyKQorI2RlZmluZSBNQ0lfREFUQVRJTUVPVVQJCSgxIDw8IDMpCisjZGVmaW5lIE1DSV9UWFVOREVSUlVOCQkoMSA8PCA0KQorI2RlZmluZSBNQ0lfUlhPVkVSUlVOCQkoMSA8PCA1KQorI2RlZmluZSBNQ0lfQ01EUkVTUEVORAkJKDEgPDwgNikKKyNkZWZpbmUgTUNJX0NNRFNFTlQJCSgxIDw8IDcpCisjZGVmaW5lIE1DSV9EQVRBRU5ECQkoMSA8PCA4KQorI2RlZmluZSBNQ0lfREFUQUJMT0NLRU5ECSgxIDw8IDEwKQorI2RlZmluZSBNQ0lfQ01EQUNUSVZFCQkoMSA8PCAxMSkKKyNkZWZpbmUgTUNJX1RYQUNUSVZFCQkoMSA8PCAxMikKKyNkZWZpbmUgTUNJX1JYQUNUSVZFCQkoMSA8PCAxMykKKyNkZWZpbmUgTUNJX1RYRklGT0hBTEZFTVBUWQkoMSA8PCAxNCkKKyNkZWZpbmUgTUNJX1JYRklGT0hBTEZGVUxMCSgxIDw8IDE1KQorI2RlZmluZSBNQ0lfVFhGSUZPRlVMTAkJKDEgPDwgMTYpCisjZGVmaW5lIE1DSV9SWEZJRk9GVUxMCQkoMSA8PCAxNykKKyNkZWZpbmUgTUNJX1RYRklGT0VNUFRZCQkoMSA8PCAxOCkKKyNkZWZpbmUgTUNJX1JYRklGT0VNUFRZCQkoMSA8PCAxOSkKKyNkZWZpbmUgTUNJX1RYREFUQUFWTEJMCQkoMSA8PCAyMCkKKyNkZWZpbmUgTUNJX1JYREFUQUFWTEJMCQkoMSA8PCAyMSkKKyNkZWZpbmUgTUNJX1NESU9JTlRSCQkoMSA8PCAyMikKKyNkZWZpbmUgTUNJX1BST0dET05FCQkoMSA8PCAyMykKKyNkZWZpbmUgTUNJX0FUQUNNRENPTVBMCQkoMSA8PCAyNCkKKyNkZWZpbmUgTUNJX1NESU9JTlRPUEVSCQkoMSA8PCAyNSkKKyNkZWZpbmUgTUNJX0NDU1RJTUVPVVQJCSgxIDw8IDI2KQorCisjZGVmaW5lIE1NQ0lDTEVBUgkJMHgwMzgKKyNkZWZpbmUgTUNJX0NNRENSQ0ZBSUxDTFIJKDEgPDwgMCkKKyNkZWZpbmUgTUNJX0RBVEFDUkNGQUlMQ0xSCSgxIDw8IDEpCisjZGVmaW5lIE1DSV9DTURUSU1FT1VUQ0xSCSgxIDw8IDIpCisjZGVmaW5lIE1DSV9EQVRBVElNRU9VVENMUgkoMSA8PCAzKQorI2RlZmluZSBNQ0lfVFhVTkRFUlJVTkNMUgkoMSA8PCA0KQorI2RlZmluZSBNQ0lfUlhPVkVSUlVOQ0xSCSgxIDw8IDUpCisjZGVmaW5lIE1DSV9DTURSRVNQRU5EQ0xSCSgxIDw8IDYpCisjZGVmaW5lIE1DSV9DTURTRU5UQ0xSCQkoMSA8PCA3KQorI2RlZmluZSBNQ0lfREFUQUVORENMUgkJKDEgPDwgOCkKKyNkZWZpbmUgTUNJX0RBVEFCTE9DS0VORENMUgkoMSA8PCAxMCkKKworI2RlZmluZSBNTUNJTUFTSzAJCTB4MDNjCisjZGVmaW5lIE1DSV9DTURDUkNGQUlMTUFTSwkoMSA8PCAwKQorI2RlZmluZSBNQ0lfREFUQUNSQ0ZBSUxNQVNLCSgxIDw8IDEpCisjZGVmaW5lIE1DSV9DTURUSU1FT1VUTUFTSwkoMSA8PCAyKQorI2RlZmluZSBNQ0lfREFUQVRJTUVPVVRNQVNLCSgxIDw8IDMpCisjZGVmaW5lIE1DSV9UWFVOREVSUlVOTUFTSwkoMSA8PCA0KQorI2RlZmluZSBNQ0lfUlhPVkVSUlVOTUFTSwkoMSA8PCA1KQorI2RlZmluZSBNQ0lfQ01EUkVTUEVORE1BU0sJKDEgPDwgNikKKyNkZWZpbmUgTUNJX0NNRFNFTlRNQVNLCQkoMSA8PCA3KQorI2RlZmluZSBNQ0lfREFUQUVORE1BU0sJCSgxIDw8IDgpCisjZGVmaW5lIE1DSV9EQVRBQkxPQ0tFTkRNQVNLCSgxIDw8IDEwKQorI2RlZmluZSBNQ0lfQ01EQUNUSVZFTUFTSwkoMSA8PCAxMSkKKyNkZWZpbmUgTUNJX1RYQUNUSVZFTUFTSwkoMSA8PCAxMikKKyNkZWZpbmUgTUNJX1JYQUNUSVZFTUFTSwkoMSA8PCAxMykKKyNkZWZpbmUgTUNJX1RYRklGT0hBTEZFTVBUWU1BU0sJKDEgPDwgMTQpCisjZGVmaW5lIE1DSV9SWEZJRk9IQUxGRlVMTE1BU0sJKDEgPDwgMTUpCisjZGVmaW5lIE1DSV9UWEZJRk9GVUxMTUFTSwkoMSA8PCAxNikKKyNkZWZpbmUgTUNJX1JYRklGT0ZVTExNQVNLCSgxIDw8IDE3KQorI2RlZmluZSBNQ0lfVFhGSUZPRU1QVFlNQVNLCSgxIDw8IDE4KQorI2RlZmluZSBNQ0lfUlhGSUZPRU1QVFlNQVNLCSgxIDw8IDE5KQorI2RlZmluZSBNQ0lfVFhEQVRBQVZMQkxNQVNLCSgxIDw8IDIwKQorI2RlZmluZSBNQ0lfUlhEQVRBQVZMQkxNQVNLCSgxIDw8IDIxKQorI2RlZmluZSBNQ0lfU0RJT0lOVE1BU0sJCSgxIDw8IDIyKQorI2RlZmluZSBNQ0lfUFJPR0RPTkVNQVNLCSgxIDw8IDIzKQorI2RlZmluZSBNQ0lfQVRBQ01EQ09NUExNQVNLCSgxIDw8IDI0KQorI2RlZmluZSBNQ0lfU0RJT0lOVE9QRVJNQVNLCSgxIDw8IDI1KQorI2RlZmluZSBNQ0lfQ0NTVElNRU9VVE1BU0sJKDEgPDwgMjYpCisKKyNkZWZpbmUgTU1DSU1BU0sxCQkweDA0MAorI2RlZmluZSBNTUNJRklGT0NOVAkJMHgwNDQKKyNkZWZpbmUgTUNJQ0NTVElNRVIJCTB4MDU4CisKKyNkZWZpbmUgTU1DSUZJRk8JCTB4MDgwIC8qIHRvIDB4MGJjICovCisKKyNkZWZpbmUgTUNJX0lSUUVOQUJMRQlcCisJKE1DSV9DTURDUkNGQUlMTUFTS3xNQ0lfREFUQUNSQ0ZBSUxNQVNLfE1DSV9DTURUSU1FT1VUTUFTS3wJXAorCU1DSV9EQVRBVElNRU9VVE1BU0t8TUNJX1RYVU5ERVJSVU5NQVNLfE1DSV9SWE9WRVJSVU5NQVNLfAlcCisJTUNJX0NNRFJFU1BFTkRNQVNLfE1DSV9DTURTRU5UTUFTS3xNQ0lfREFUQUVORE1BU0spCisKKy8qCisgKiBUaGUgc2l6ZSBvZiB0aGUgRklGTyBpbiBieXRlcy4KKyAqLworI2RlZmluZSBNQ0lfRklGT1NJWkUJKDE2KjQpCisKKyNkZWZpbmUgTUNJX0ZJRk9IQUxGU0laRSAoTUNJX0ZJRk9TSVpFIC8gMikKKworI2RlZmluZSBOUl9TRwkJMzIKKworc3RydWN0IGNsazsKKworc3RydWN0IG1zbXNkY2NfbmNfZG1hZGF0YSB7CisJZG1vdl9ib3gJY21kW05SX1NHXTsKKwl1aW50MzJfdAljbWRwdHI7Cit9OworCitzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YSB7CisJc3RydWN0IG1zbXNkY2NfbmNfZG1hZGF0YQkqbmM7CisJZG1hX2FkZHJfdAkJCW5jX2J1c2FkZHI7CisJZG1hX2FkZHJfdAkJCWNtZF9idXNhZGRyOworCWRtYV9hZGRyX3QJCQljbWRwdHJfYnVzYWRkcjsKKworCXN0cnVjdCBtc21fZG1vdl9jbWQJCWhkcjsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbgkJZGlyOworCisJc3RydWN0IHNjYXR0ZXJsaXN0CQkqc2c7CisJaW50CQkJCW51bV9lbnRzOworCisJaW50CQkJCWNoYW5uZWw7CisJc3RydWN0IG1zbXNkY2NfaG9zdAkJKmhvc3Q7CisJaW50CQkJCWJ1c3k7IC8qIFNldCBpZiBETSBpcyBidXN5ICovCit9OworCitzdHJ1Y3QgbXNtc2RjY19waW9fZGF0YSB7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKKwl1bnNpZ25lZCBpbnQJCXNnX2xlbjsKKwl1bnNpZ25lZCBpbnQJCXNnX29mZjsKK307CisKK3N0cnVjdCBtc21zZGNjX2N1cnJfcmVxIHsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QJKm1ycTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQJKmNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEJCSpkYXRhOworCXVuc2lnbmVkIGludAkJeGZlcl9zaXplOwkvKiBUb3RhbCBkYXRhIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQJCXhmZXJfcmVtYWluOwkvKiBCeXRlcyByZW1haW5pbmcgdG8gc2VuZCAqLworCXVuc2lnbmVkIGludAkJZGF0YV94ZmVyZWQ7CS8qIEJ5dGVzIGFja2VkIGJ5IEJMS0VORCBpcnEgKi8KKwlpbnQJCQlnb3RfZGF0YWVuZDsKKwlpbnQJCQlnb3RfZGF0YWJsa2VuZDsKKwlpbnQJCQl1c2VyX3BhZ2VzOworfTsKKworc3RydWN0IG1zbXNkY2Nfc3RhdHMgeworCXVuc2lnbmVkIGludCByZXFzOworCXVuc2lnbmVkIGludCBjbWRzOworCXVuc2lnbmVkIGludCBjbWRwb2xsX2hpdHM7CisJdW5zaWduZWQgaW50IGNtZHBvbGxfbWlzc2VzOworfTsKKworc3RydWN0IG1zbXNkY2NfaG9zdCB7CisJc3RydWN0IHJlc291cmNlCQkqY21kX2lycXJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpwaW9faXJxcmVzOworCXN0cnVjdCByZXNvdXJjZQkJKm1lbXJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpkbWFyZXM7CisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwlpbnQJCQlwZGV2X2lkOworCXVuc2lnbmVkIGludAkJc3RhdF9pcnE7CisKKwlzdHJ1Y3QgbXNtc2RjY19jdXJyX3JlcQljdXJyOworCisJc3RydWN0IG1tY19ob3N0CQkqbW1jOworCXN0cnVjdCBjbGsJCSpjbGs7CQkvKiBtYWluIE1NQyBidXMgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrCQkqcGNsazsJCS8qIFNEQ0MgcGVyaXBoZXJhbCBidXMgY2xvY2sgKi8KKwl1bnNpZ25lZCBpbnQJCWNsa3Nfb247CS8qIHNldCBpZiBjbG9ja3MgYXJlIGVuYWJsZWQgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAljb21tYW5kX3RpbWVyOworCisJdW5zaWduZWQgaW50CQllamVjdDsJCS8qIGVqZWN0IHN0YXRlICovCisKKwlzcGlubG9ja190CQlsb2NrOworCisJdW5zaWduZWQgaW50CQljbGtfcmF0ZTsJLyogQ3VycmVudCBjbG9jayByYXRlICovCisJdW5zaWduZWQgaW50CQlwY2xrX3JhdGU7CisKKwl1MzIJCQlwd3I7CisJdTMyCQkJc2F2ZWRfaXJxMG1hc2s7CS8qIE1NQ0lNQVNLMCByZWcgdmFsdWUgKi8KKwlzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwl1bnNpZ25lZCBpbnQJCW9sZHN0YXQ7CisKKwlzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YQlkbWE7CisJc3RydWN0IG1zbXNkY2NfcGlvX2RhdGEJcGlvOworCWludAkJCWNtZHBvbGw7CisJc3RydWN0IG1zbXNkY2Nfc3RhdHMJc3RhdHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCmluZGV4IGJjMTRiYjEuLjg4NjcxNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJfQogCiAJLyogRm9yIHRoZSBETUEgY2FzZSB0aGUgRE1BIGVuZ2luZSBoYW5kbGVzIHRoZSBkYXRhIHRyYW5zZmVyCi0JICogYXV0b21hdGljYWxseS4gRm9yIG5vbiBETUEgd2UgaGF2ZSB0byB0byBpdCBvdXJzZWx2ZXMuCisJICogYXV0b21hdGljYWxseS4gRm9yIG5vbiBETUEgd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMuCiAJICogRG9uJ3QgZG8gaXQgaW4gaW50ZXJydXB0IGNvbnRleHQgdGhvdWdoLgogCSAqLwogCWlmICghbXhjbWNpX3VzZV9kbWEoaG9zdCkgJiYgaG9zdC0+ZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggMWNmOWNmYi4uNDQ4N2NjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTE3LDYgKzE3LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC0yNSw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgpAQCAtMzUsNiArMzgsNyBAQAogCiAvKiBPTUFQIEhTTU1DIEhvc3QgQ29udHJvbGxlciBSZWdpc3RlcnMgKi8KICNkZWZpbmUgT01BUF9IU01NQ19TWVNDT05GSUcJMHgwMDEwCisjZGVmaW5lIE9NQVBfSFNNTUNfU1lTU1RBVFVTCTB4MDAxNAogI2RlZmluZSBPTUFQX0hTTU1DX0NPTgkJMHgwMDJDCiAjZGVmaW5lIE9NQVBfSFNNTUNfQkxLCQkweDAxMDQKICNkZWZpbmUgT01BUF9IU01NQ19BUkcJCTB4MDEwOApAQCAtNzAsNiArNzQsOCBAQAogI2RlZmluZSBEVE9fTUFTSwkJMHgwMDBGMDAwMAogI2RlZmluZSBEVE9fU0hJRlQJCTE2CiAjZGVmaW5lIElOVF9FTl9NQVNLCQkweDMwN0YwMDMzCisjZGVmaW5lIEJXUl9FTkFCTEUJCSgxIDw8IDQpCisjZGVmaW5lIEJSUl9FTkFCTEUJCSgxIDw8IDUpCiAjZGVmaW5lIElOSVRfU1RSRUFNCQkoMSA8PCAxKQogI2RlZmluZSBEUF9TRUxFQ1QJCSgxIDw8IDIxKQogI2RlZmluZSBERElSCQkJKDEgPDwgNCkKQEAgLTkyLDYgKzk4LDggQEAKICNkZWZpbmUgRFVBTF9WT0xUX09DUl9CSVQJNwogI2RlZmluZSBTUkMJCQkoMSA8PCAyNSkKICNkZWZpbmUgU1JECQkJKDEgPDwgMjYpCisjZGVmaW5lIFNPRlRSRVNFVAkJKDEgPDwgMSkKKyNkZWZpbmUgUkVTRVRET05FCQkoMSA8PCAwKQogCiAvKgogICogRklYTUU6IE1vc3QgbGlrZWx5IGFsbCB0aGUgZGF0YSB1c2luZyB0aGVzZSBfREVWSUQgZGVmaW5lcyBzaG91bGQgY29tZQpAQCAtMTAxLDExICsxMDksMTggQEAKICNkZWZpbmUgT01BUF9NTUMxX0RFVklECQkwCiAjZGVmaW5lIE9NQVBfTU1DMl9ERVZJRAkJMQogI2RlZmluZSBPTUFQX01NQzNfREVWSUQJCTIKKyNkZWZpbmUgT01BUF9NTUM0X0RFVklECQkzCisjZGVmaW5lIE9NQVBfTU1DNV9ERVZJRAkJNAogCiAjZGVmaW5lIE1NQ19USU1FT1VUX01TCQkyMAogI2RlZmluZSBPTUFQX01NQ19NQVNURVJfQ0xPQ0sJOTYwMDAwMDAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJtbWNpLW9tYXAtaHMiCiAKKy8qIFRpbWVvdXRzIGZvciBlbnRlcmluZyBwb3dlciBzYXZpbmcgc3RhdGVzIG9uIGluYWN0aXZpdHksIG1zZWMgKi8KKyNkZWZpbmUgT01BUF9NTUNfRElTQUJMRURfVElNRU9VVAkxMDAKKyNkZWZpbmUgT01BUF9NTUNfU0xFRVBfVElNRU9VVAkJMTAwMAorI2RlZmluZSBPTUFQX01NQ19PRkZfVElNRU9VVAkJODAwMAorCiAvKgogICogT25lIGNvbnRyb2xsZXIgY2FuIGhhdmUgbXVsdGlwbGUgc2xvdHMsIGxpa2Ugb24gc29tZSBvbWFwIGJvYXJkcyB1c2luZwogICogb21hcC5jIGNvbnRyb2xsZXIgZHJpdmVyLiBMdWNraWx5IHRoaXMgaXMgbm90IGN1cnJlbnRseSBkb25lIG9uIGFueSBrbm93bgpAQCAtMTIyLDcgKzEzNyw3IEBACiAjZGVmaW5lIE9NQVBfSFNNTUNfV1JJVEUoYmFzZSwgcmVnLCB2YWwpIFwKIAlfX3Jhd193cml0ZWwoKHZhbCksIChiYXNlKSArIE9NQVBfSFNNTUNfIyNyZWcpCiAKLXN0cnVjdCBtbWNfb21hcF9ob3N0IHsKK3N0cnVjdCBvbWFwX2hzbW1jX2hvc3QgewogCXN0cnVjdAlkZXZpY2UJCSpkZXY7CiAJc3RydWN0CW1tY19ob3N0CSptbWM7CiAJc3RydWN0CW1tY19yZXF1ZXN0CSptcnE7CkBAIC0xMzUsMjcgKzE1MCwzNSBAQAogCXN0cnVjdAl3b3JrX3N0cnVjdAltbWNfY2FyZGRldGVjdF93b3JrOwogCXZvaWQJX19pb21lbQkJKmJhc2U7CiAJcmVzb3VyY2Vfc2l6ZV90CQltYXBiYXNlOworCXNwaW5sb2NrX3QJCWlycV9sb2NrOyAvKiBQcmV2ZW50IHJhY2VzIHdpdGggaXJxIGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAl1bnNpZ25lZCBpbnQJCWlkOwogCXVuc2lnbmVkIGludAkJZG1hX2xlbjsKIAl1bnNpZ25lZCBpbnQJCWRtYV9zZ19pZHg7CiAJdW5zaWduZWQgY2hhcgkJYnVzX21vZGU7CisJdW5zaWduZWQgY2hhcgkJcG93ZXJfbW9kZTsKIAl1MzIJCQkqYnVmZmVyOwogCXUzMgkJCWJ5dGVzbGVmdDsKIAlpbnQJCQlzdXNwZW5kZWQ7CiAJaW50CQkJaXJxOwotCWludAkJCWNhcmRkZXRlY3Q7CiAJaW50CQkJdXNlX2RtYSwgZG1hX2NoOwogCWludAkJCWRtYV9saW5lX3R4LCBkbWFfbGluZV9yeDsKIAlpbnQJCQlzbG90X2lkOwotCWludAkJCWRiY2xrX2VuYWJsZWQ7CisJaW50CQkJZ290X2RiY2xrOwogCWludAkJCXJlc3BvbnNlX2J1c3k7CisJaW50CQkJY29udGV4dF9sb3NzOworCWludAkJCWRwbV9zdGF0ZTsKKwlpbnQJCQl2ZGQ7CisJaW50CQkJcHJvdGVjdF9jYXJkOworCWludAkJCXJlcXNfYmxvY2tlZDsKKwogCXN0cnVjdAlvbWFwX21tY19wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKIH07CiAKIC8qCiAgKiBTdG9wIGNsb2NrIHRvIHRoZSBjYXJkCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXBfbW1jX3N0b3BfY2xvY2soc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3N0b3BfY2xvY2soc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKIHsKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NUTCwKIAkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgJiB+Q0VOKTsKQEAgLTE2MywxNSArMTg2LDE3OCBAQAogCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1NQyBDbG9jayBpcyBub3Qgc3RvcGVkXG4iKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorCisvKgorICogUmVzdG9yZSB0aGUgTU1DIGhvc3QgY29udGV4dCwgaWYgaXQgd2FzIGxvc3QgYXMgcmVzdWx0IG9mIGEKKyAqIHBvd2VyIHN0YXRlIGNoYW5nZS4KKyAqLworc3RhdGljIGludCBvbWFwX2hzbW1jX2NvbnRleHRfcmVzdG9yZShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfaW9zICppb3MgPSAmaG9zdC0+bW1jLT5pb3M7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gaG9zdC0+cGRhdGE7CisJaW50IGNvbnRleHRfbG9zcyA9IDA7CisJdTMyIGhjdGwsIGNhcGEsIGNvbjsKKwl1MTYgZHNvciA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJaWYgKHBkYXRhLT5nZXRfY29udGV4dF9sb3NzX2NvdW50KSB7CisJCWNvbnRleHRfbG9zcyA9IHBkYXRhLT5nZXRfY29udGV4dF9sb3NzX2NvdW50KGhvc3QtPmRldik7CisJCWlmIChjb250ZXh0X2xvc3MgPCAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJjb250ZXh0IHdhcyAlc2xvc3RcbiIsCisJCWNvbnRleHRfbG9zcyA9PSBob3N0LT5jb250ZXh0X2xvc3MgPyAibm90ICIgOiAiIik7CisJaWYgKGhvc3QtPmNvbnRleHRfbG9zcyA9PSBjb250ZXh0X2xvc3MpCisJCXJldHVybiAxOworCisJLyogV2FpdCBmb3IgaGFyZHdhcmUgcmVzZXQgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTU1DX1RJTUVPVVRfTVMpOworCXdoaWxlICgoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU1NUQVRVUykgJiBSRVNFVERPTkUpICE9IFJFU0VURE9ORQorCQkmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJOworCisJLyogRG8gc29mdHdhcmUgcmVzZXQgKi8KKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NPTkZJRywgU09GVFJFU0VUKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTU1DX1RJTUVPVVRfTVMpOworCXdoaWxlICgoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU1NUQVRVUykgJiBSRVNFVERPTkUpICE9IFJFU0VURE9ORQorCQkmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJOworCisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDT05GSUcsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ09ORklHKSB8IEFVVE9JRExFKTsKKworCWlmIChob3N0LT5pZCA9PSBPTUFQX01NQzFfREVWSUQpIHsKKwkJaWYgKGhvc3QtPnBvd2VyX21vZGUgIT0gTU1DX1BPV0VSX09GRiAmJgorCQkgICAgKDEgPDwgaW9zLT52ZGQpIDw9IE1NQ19WRERfMjNfMjQpCisJCQloY3RsID0gU0RWUzE4OworCQllbHNlCisJCQloY3RsID0gU0RWUzMwOworCQljYXBhID0gVlMzMCB8IFZTMTg7CisJfSBlbHNlIHsKKwkJaGN0bCA9IFNEVlMxODsKKwkJY2FwYSA9IFZTMTg7CisJfQorCisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpIHwgaGN0bCk7CisKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENBUEEsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ0FQQSkgfCBjYXBhKTsKKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKKwkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSB8IFNEQlApOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1NQ19USU1FT1VUX01TKTsKKwl3aGlsZSAoKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIFNEQlApICE9IFNEQlAKKwkJJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCTsKKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgU1RBVF9DTEVBUik7CisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJU0UsIElOVF9FTl9NQVNLKTsKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLCBJTlRfRU5fTUFTSyk7CisKKwkvKiBEbyBub3QgaW5pdGlhbGl6ZSBjYXJkLXNwZWNpZmljIHRoaW5ncyBpZiB0aGUgcG93ZXIgaXMgb2ZmICovCisJaWYgKGhvc3QtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikKKwkJZ290byBvdXQ7CisKKwljb24gPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKTsKKwlzd2l0Y2ggKGlvcy0+YnVzX3dpZHRoKSB7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzg6CisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gfCBEVzgpOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfNDoKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGNvbiAmIH5EVzgpOworCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgfCBGT1VSX0JJVCk7CisJCWJyZWFrOworCWNhc2UgTU1DX0JVU19XSURUSF8xOgorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uICYgfkRXOCk7CisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKKwkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIH5GT1VSX0JJVCk7CisJCWJyZWFrOworCX0KKworCWlmIChpb3MtPmNsb2NrKSB7CisJCWRzb3IgPSBPTUFQX01NQ19NQVNURVJfQ0xPQ0sgLyBpb3MtPmNsb2NrOworCQlpZiAoZHNvciA8IDEpCisJCQlkc29yID0gMTsKKworCQlpZiAoT01BUF9NTUNfTUFTVEVSX0NMT0NLIC8gZHNvciA+IGlvcy0+Y2xvY2spCisJCQlkc29yKys7CisKKwkJaWYgKGRzb3IgPiAyNTApCisJCQlkc29yID0gMjUwOworCX0KKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ1RMLAorCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ1RMKSAmIH5DRU4pOworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ1RMLCAoZHNvciA8PCA2KSB8IChEVE8gPDwgMTYpKTsKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNZU0NUTCwKKwkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgfCBJQ0UpOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1NQ19USU1FT1VUX01TKTsKKwl3aGlsZSAoKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpICYgSUNTKSAhPSBJQ1MKKwkJJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCTsKKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ1RMLAorCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ1RMKSB8IENFTik7CisKKwljb24gPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKTsKKwlpZiAoaW9zLT5idXNfbW9kZSA9PSBNTUNfQlVTTU9ERV9PUEVORFJBSU4pCisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gfCBPRCk7CisJZWxzZQorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uICYgfk9EKTsKK291dDoKKwlob3N0LT5jb250ZXh0X2xvc3MgPSBjb250ZXh0X2xvc3M7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImNvbnRleHQgaXMgcmVzdG9yZWRcbiIpOworCXJldHVybiAwOworfQorCisvKgorICogU2F2ZSB0aGUgTU1DIGhvc3QgY29udGV4dCAoc3RvcmUgdGhlIG51bWJlciBvZiBwb3dlciBzdGF0ZSBjaGFuZ2VzIHNvIGZhcikuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfY29udGV4dF9zYXZlKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gaG9zdC0+cGRhdGE7CisJaW50IGNvbnRleHRfbG9zczsKKworCWlmIChwZGF0YS0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCkgeworCQljb250ZXh0X2xvc3MgPSBwZGF0YS0+Z2V0X2NvbnRleHRfbG9zc19jb3VudChob3N0LT5kZXYpOworCQlpZiAoY29udGV4dF9sb3NzIDwgMCkKKwkJCXJldHVybjsKKwkJaG9zdC0+Y29udGV4dF9sb3NzID0gY29udGV4dF9sb3NzOworCX0KK30KKworI2Vsc2UKKworc3RhdGljIGludCBvbWFwX2hzbW1jX2NvbnRleHRfcmVzdG9yZShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2NvbnRleHRfc2F2ZShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworfQorCisjZW5kaWYKKwogLyoKICAqIFNlbmQgaW5pdCBzdHJlYW0gc2VxdWVuY2UgdG8gY2FyZAogICogYmVmb3JlIHNlbmRpbmcgSURMRSBjb21tYW5kCiAgKi8KLXN0YXRpYyB2b2lkIHNlbmRfaW5pdF9zdHJlYW0oc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCBzZW5kX2luaXRfc3RyZWFtKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7CiAJaW50IHJlZyA9IDA7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCisJaWYgKGhvc3QtPnByb3RlY3RfY2FyZCkKKwkJcmV0dXJuOworCiAJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwKIAkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTikgfCBJTklUX1NUUkVBTSk7CkBAIC0xODMsNTEgKzM2OSw1MyBAQAogCiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sCiAJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDT04pICYgfklOSVRfU1RSRUFNKTsKKworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgU1RBVF9DTEVBUik7CisJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNUQVQpOworCiAJZW5hYmxlX2lycShob3N0LT5pcnEpOwogfQogCiBzdGF0aWMgaW5saW5lCi1pbnQgbW1jX29tYXBfY292ZXJfaXNfY2xvc2VkKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQoraW50IG9tYXBfaHNtbWNfY292ZXJfaXNfY2xvc2VkKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7CiAJaW50IHIgPSAxOwogCi0JaWYgKGhvc3QtPnBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS5nZXRfY292ZXJfc3RhdGUpCi0JCXIgPSBob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0uZ2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldiwKLQkJCWhvc3QtPnNsb3RfaWQpOworCWlmIChtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUpCisJCXIgPSBtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKTsKIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHNzaXplX3QKLW1tY19vbWFwX3Nob3dfY292ZXJfc3dpdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitvbWFwX2hzbW1jX3Nob3dfY292ZXJfc3dpdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbW1jX2hvc3QsIGNsYXNzX2Rldik7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1tY19vbWFwX2NvdmVyX2lzX2Nsb3NlZChob3N0KSA/ICJjbG9zZWQiIDoKLQkJICAgICAgICJvcGVuIik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCisJCQlvbWFwX2hzbW1jX2NvdmVyX2lzX2Nsb3NlZChob3N0KSA/ICJjbG9zZWQiIDogIm9wZW4iKTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGNvdmVyX3N3aXRjaCwgU19JUlVHTywgbW1jX29tYXBfc2hvd19jb3Zlcl9zd2l0Y2gsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNvdmVyX3N3aXRjaCwgU19JUlVHTywgb21hcF9oc21tY19zaG93X2NvdmVyX3N3aXRjaCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1tbWNfb21hcF9zaG93X3Nsb3RfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorb21hcF9oc21tY19zaG93X3Nsb3RfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1tY19ob3N0LCBjbGFzc19kZXYpOwotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLQlzdHJ1Y3Qgb21hcF9tbWNfc2xvdF9kYXRhIHNsb3QgPSBob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF07CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc2xvdC5uYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbW1jX3Nsb3QoaG9zdCkubmFtZSk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzbG90X25hbWUsIFNfSVJVR08sIG1tY19vbWFwX3Nob3dfc2xvdF9uYW1lLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzbG90X25hbWUsIFNfSVJVR08sIG9tYXBfaHNtbWNfc2hvd19zbG90X25hbWUsIE5VTEwpOwogCiAvKgogICogQ29uZmlndXJlIHRoZSByZXNwb25zZSB0eXBlIGFuZCBzZW5kIHRoZSBjbWQuCiAgKi8KIHN0YXRpYyB2b2lkCi1tbWNfb21hcF9zdGFydF9jb21tYW5kKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwKK29tYXBfaHNtbWNfc3RhcnRfY29tbWFuZChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJaW50IGNtZHJlZyA9IDAsIHJlc3B0eXBlID0gMCwgY21kdHlwZSA9IDA7CkBAIC0yNDEsNyArNDI5LDEyIEBACiAJICovCiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTVEFULCBTVEFUX0NMRUFSKTsKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElTRSwgSU5UX0VOX01BU0spOwotCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIElOVF9FTl9NQVNLKTsKKworCWlmIChob3N0LT51c2VfZG1hKQorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLAorCQkJCSBJTlRfRU5fTUFTSyAmIH4oQlJSX0VOQUJMRSB8IEJXUl9FTkFCTEUpKTsKKwllbHNlCisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIElOVF9FTl9NQVNLKTsKIAogCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAwOwogCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CkBAIC0yNzUsMTIgKzQ2OCwyMCBAQAogCWlmIChob3N0LT51c2VfZG1hKQogCQljbWRyZWcgfD0gRE1BX0VOOwogCisJLyoKKwkgKiBJbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAoaS5lLiBTVE9QIGNvbW1hbmQpLCB0aGUgc3BpbmxvY2sgaXMgdW5sb2NrZWQKKwkgKiBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIG90aGVyd2lzZSAoaS5lLiBmb3IgYSBuZXcgcmVxdWVzdCkgaXQgaXMKKwkgKiB1bmxvY2tlZCBoZXJlLgorCSAqLworCWlmICghaW5faW50ZXJydXB0KCkpCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmlycV9sb2NrLCBob3N0LT5mbGFncyk7CisKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEFSRywgY21kLT5hcmcpOwogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ01ELCBjbWRyZWcpOwogfQogCiBzdGF0aWMgaW50Ci1tbWNfb21hcF9nZXRfZG1hX2RpcihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQorb21hcF9oc21tY19nZXRfZG1hX2RpcihzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCiAJCXJldHVybiBETUFfVE9fREVWSUNFOwpAQCAtMjkyLDExICs0OTMsMTggQEAKICAqIE5vdGlmeSB0aGUgdHJhbnNmZXIgY29tcGxldGUgdG8gTU1DIGNvcmUKICAqLwogc3RhdGljIHZvaWQKLW1tY19vbWFwX3hmZXJfZG9uZShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQorb21hcF9oc21tY194ZmVyX2RvbmUoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWlmICghZGF0YSkgewogCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSA9IGhvc3QtPm1ycTsKIAorCQkvKiBUQyBiZWZvcmUgQ0MgZnJvbSBDTUQ2IC0gZG9uJ3Qga25vdyB3aHksIGJ1dCBpdCBoYXBwZW5zICovCisJCWlmIChob3N0LT5jbWQgJiYgaG9zdC0+Y21kLT5vcGNvZGUgPT0gNiAmJgorCQkgICAgaG9zdC0+cmVzcG9uc2VfYnVzeSkgeworCQkJaG9zdC0+cmVzcG9uc2VfYnVzeSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwogCQlob3N0LT5tcnEgPSBOVUxMOwogCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKIAkJcmV0dXJuOwpAQCAtMzA2LDcgKzUxNCw3IEBACiAKIAlpZiAoaG9zdC0+dXNlX2RtYSAmJiBob3N0LT5kbWFfY2ggIT0gLTEpCiAJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLCBob3N0LT5kbWFfbGVuLAotCQkJbW1jX29tYXBfZ2V0X2RtYV9kaXIoaG9zdCwgZGF0YSkpOworCQkJb21hcF9oc21tY19nZXRfZG1hX2Rpcihob3N0LCBkYXRhKSk7CiAKIAlpZiAoIWRhdGEtPmVycm9yKQogCQlkYXRhLT5ieXRlc194ZmVyZWQgKz0gZGF0YS0+YmxvY2tzICogKGRhdGEtPmJsa3N6KTsKQEAgLTMxOCwxNCArNTI2LDE0IEBACiAJCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBkYXRhLT5tcnEpOwogCQlyZXR1cm47CiAJfQotCW1tY19vbWFwX3N0YXJ0X2NvbW1hbmQoaG9zdCwgZGF0YS0+c3RvcCwgTlVMTCk7CisJb21hcF9oc21tY19zdGFydF9jb21tYW5kKGhvc3QsIGRhdGEtPnN0b3AsIE5VTEwpOwogfQogCiAvKgogICogTm90aWZ5IHRoZSBjb3JlIGFib3V0IGNvbW1hbmQgY29tcGxldGlvbgogICovCiBzdGF0aWMgdm9pZAotbW1jX29tYXBfY21kX2RvbmUoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQorb21hcF9oc21tY19jbWRfZG9uZShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKIHsKIAlob3N0LT5jbWQgPSBOVUxMOwogCkBAIC0zNTAsMTMgKzU1OCwxMyBAQAogLyoKICAqIERNQSBjbGVhbiB1cCBmb3IgY29tbWFuZCBlcnJvcnMKICAqLwotc3RhdGljIHZvaWQgbW1jX2RtYV9jbGVhbnVwKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBpbnQgZXJybm8pCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2RtYV9jbGVhbnVwKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsIGludCBlcnJubykKIHsKIAlob3N0LT5kYXRhLT5lcnJvciA9IGVycm5vOwogCiAJaWYgKGhvc3QtPnVzZV9kbWEgJiYgaG9zdC0+ZG1hX2NoICE9IC0xKSB7CiAJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmRhdGEtPnNnLCBob3N0LT5kbWFfbGVuLAotCQkJbW1jX29tYXBfZ2V0X2RtYV9kaXIoaG9zdCwgaG9zdC0+ZGF0YSkpOworCQkJb21hcF9oc21tY19nZXRfZG1hX2Rpcihob3N0LCBob3N0LT5kYXRhKSk7CiAJCW9tYXBfZnJlZV9kbWEoaG9zdC0+ZG1hX2NoKTsKIAkJaG9zdC0+ZG1hX2NoID0gLTE7CiAJCXVwKCZob3N0LT5zZW0pOwpAQCAtMzY4LDEwICs1NzYsMTAgQEAKICAqIFJlYWRhYmxlIGVycm9yIG91dHB1dAogICovCiAjaWZkZWYgQ09ORklHX01NQ19ERUJVRwotc3RhdGljIHZvaWQgbW1jX29tYXBfcmVwb3J0X2lycShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgdTMyIHN0YXR1cykKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfcmVwb3J0X2lycShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LCB1MzIgc3RhdHVzKQogewogCS8qIC0tLSBtZWFucyByZXNlcnZlZCBiaXQgd2l0aG91dCBkZWZpbml0aW9uIGF0IGRvY3VtZW50YXRpb24gKi8KLQlzdGF0aWMgY29uc3QgY2hhciAqbW1jX29tYXBfc3RhdHVzX2JpdHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqb21hcF9oc21tY19zdGF0dXNfYml0c1tdID0gewogCQkiQ0MiLCAiVEMiLCAiQkdFIiwgIi0tLSIsICJCV1IiLCAiQlJSIiwgIi0tLSIsICItLS0iLCAiQ0lSUSIsCiAJCSJPQkkiLCAiLS0tIiwgIi0tLSIsICItLS0iLCAiLS0tIiwgIi0tLSIsICJFUlJJIiwgIkNUTyIsICJDQ1JDIiwKIAkJIkNFQiIsICJDSUUiLCAiRFRPIiwgIkRDUkMiLCAiREVCIiwgIi0tLSIsICJBQ0UiLCAiLS0tIiwKQEAgLTM4NCw5ICs1OTIsOSBAQAogCWxlbiA9IHNwcmludGYoYnVmLCAiTU1DIElSUSAweCV4IDoiLCBzdGF0dXMpOwogCWJ1ZiArPSBsZW47CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtbWNfb21hcF9zdGF0dXNfYml0cyk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbWFwX2hzbW1jX3N0YXR1c19iaXRzKTsgaSsrKQogCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKLQkJCWxlbiA9IHNwcmludGYoYnVmLCAiICVzIiwgbW1jX29tYXBfc3RhdHVzX2JpdHNbaV0pOworCQkJbGVuID0gc3ByaW50ZihidWYsICIgJXMiLCBvbWFwX2hzbW1jX3N0YXR1c19iaXRzW2ldKTsKIAkJCWJ1ZiArPSBsZW47CiAJCX0KIApAQCAtNDAxLDggKzYwOSw4IEBACiAgKiAgU1JDIG9yIFNSRCBiaXQgb2YgU1lTQ1RMIHJlZ2lzdGVyCiAgKiBDYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQKICAqLwotc3RhdGljIGlubGluZSB2b2lkIG1tY19vbWFwX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAotCQl1bnNpZ25lZCBsb25nIGJpdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hzbW1jX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGJpdCkKIHsKIAl1bnNpZ25lZCBsb25nIGkgPSAwOwogCXVuc2lnbmVkIGxvbmcgbGltaXQgPSAobG9vcHNfcGVyX2ppZmZ5ICoKQEAgLTQyNCwxNyArNjMyLDIwIEBACiAvKgogICogTU1DIGNvbnRyb2xsZXIgSVJRIGhhbmRsZXIKICAqLwotc3RhdGljIGlycXJldHVybl90IG1tY19vbWFwX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9oc21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gZGV2X2lkOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CiAJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCWludCBlbmRfY21kID0gMCwgZW5kX3RyYW5zID0gMCwgc3RhdHVzOwogCisJc3Bpbl9sb2NrKCZob3N0LT5pcnFfbG9jayk7CisKIAlpZiAoaG9zdC0+bXJxID09IE5VTEwpIHsKIAkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTVEFULAogCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNUQVQpKTsKIAkJLyogRmx1c2ggcG9zdGVkIHdyaXRlICovCiAJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTVEFUKTsKKwkJc3Bpbl91bmxvY2soJmhvc3QtPmlycV9sb2NrKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIApAQCAtNDQ0LDEzICs2NTUsMTQgQEAKIAogCWlmIChzdGF0dXMgJiBFUlIpIHsKICNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCi0JCW1tY19vbWFwX3JlcG9ydF9pcnEoaG9zdCwgc3RhdHVzKTsKKwkJb21hcF9oc21tY19yZXBvcnRfaXJxKGhvc3QsIHN0YXR1cyk7CiAjZW5kaWYKIAkJaWYgKChzdGF0dXMgJiBDTURfVElNRU9VVCkgfHwKIAkJCShzdGF0dXMgJiBDTURfQ1JDKSkgewogCQkJaWYgKGhvc3QtPmNtZCkgewogCQkJCWlmIChzdGF0dXMgJiBDTURfVElNRU9VVCkgewotCQkJCQltbWNfb21hcF9yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LCBTUkMpOworCQkJCQlvbWFwX2hzbW1jX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsCisJCQkJCQkJCQlTUkMpOwogCQkJCQlob3N0LT5jbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKIAkJCQl9IGVsc2UgewogCQkJCQlob3N0LT5jbWQtPmVycm9yID0gLUVJTFNFUTsKQEAgLTQ1OSw5ICs2NzEsMTAgQEAKIAkJCX0KIAkJCWlmIChob3N0LT5kYXRhIHx8IGhvc3QtPnJlc3BvbnNlX2J1c3kpIHsKIAkJCQlpZiAoaG9zdC0+ZGF0YSkKLQkJCQkJbW1jX2RtYV9jbGVhbnVwKGhvc3QsIC1FVElNRURPVVQpOworCQkJCQlvbWFwX2hzbW1jX2RtYV9jbGVhbnVwKGhvc3QsCisJCQkJCQkJCS1FVElNRURPVVQpOwogCQkJCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAwOwotCQkJCW1tY19vbWFwX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CisJCQkJb21hcF9oc21tY19yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LCBTUkQpOwogCQkJfQogCQl9CiAJCWlmICgoc3RhdHVzICYgREFUQV9USU1FT1VUKSB8fApAQCAtNDcxLDExICs2ODQsMTEgQEAKIAkJCQkJCS1FVElNRURPVVQgOiAtRUlMU0VROwogCiAJCQkJaWYgKGhvc3QtPmRhdGEpCi0JCQkJCW1tY19kbWFfY2xlYW51cChob3N0LCBlcnIpOworCQkJCQlvbWFwX2hzbW1jX2RtYV9jbGVhbnVwKGhvc3QsIGVycik7CiAJCQkJZWxzZQogCQkJCQlob3N0LT5tcnEtPmNtZC0+ZXJyb3IgPSBlcnI7CiAJCQkJaG9zdC0+cmVzcG9uc2VfYnVzeSA9IDA7Ci0JCQkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKKwkJCQlvbWFwX2hzbW1jX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CiAJCQkJZW5kX3RyYW5zID0gMTsKIAkJCX0KIAkJfQpAQCAtNDk0LDE0ICs3MDcsMTYgQEAKIAlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1RBVCk7CiAKIAlpZiAoZW5kX2NtZCB8fCAoKHN0YXR1cyAmIENDKSAmJiBob3N0LT5jbWQpKQotCQltbWNfb21hcF9jbWRfZG9uZShob3N0LCBob3N0LT5jbWQpOwotCWlmIChlbmRfdHJhbnMgfHwgKHN0YXR1cyAmIFRDKSkKLQkJbW1jX29tYXBfeGZlcl9kb25lKGhvc3QsIGRhdGEpOworCQlvbWFwX2hzbW1jX2NtZF9kb25lKGhvc3QsIGhvc3QtPmNtZCk7CisJaWYgKChlbmRfdHJhbnMgfHwgKHN0YXR1cyAmIFRDKSkgJiYgaG9zdC0+bXJxKQorCQlvbWFwX2hzbW1jX3hmZXJfZG9uZShob3N0LCBkYXRhKTsKKworCXNwaW5fdW5sb2NrKCZob3N0LT5pcnFfbG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zZF9idXNfcG93ZXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCBzZXRfc2RfYnVzX3Bvd2VyKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCkBAIC01MjEsNyArNzM2LDcgQEAKICAqIFRoZSBNTUMyIHRyYW5zY2VpdmVyIGNvbnRyb2xzIGFyZSB1c2VkIGluc3RlYWQgb2YgREFUNC4uREFUNy4KICAqIFNvbWUgY2hpcHMsIGxpa2UgZU1NQyBvbmVzLCB1c2UgaW50ZXJuYWwgdHJhbnNjZWl2ZXJzLgogICovCi1zdGF0aWMgaW50IG9tYXBfbW1jX3N3aXRjaF9vcGNvbmQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIGludCB2ZGQpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfc3dpdGNoX29wY29uZChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LCBpbnQgdmRkKQogewogCXUzMiByZWdfdmFsID0gMDsKIAlpbnQgcmV0OwpAQCAtNTI5LDIyICs3NDQsMjQgQEAKIAkvKiBEaXNhYmxlIHRoZSBjbG9ja3MgKi8KIAljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKIAljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKLQljbGtfZGlzYWJsZShob3N0LT5kYmNsayk7CisJaWYgKGhvc3QtPmdvdF9kYmNsaykKKwkJY2xrX2Rpc2FibGUoaG9zdC0+ZGJjbGspOwogCiAJLyogVHVybiB0aGUgcG93ZXIgb2ZmICovCiAJcmV0ID0gbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMCwgMCk7Ci0JaWYgKHJldCAhPSAwKQotCQlnb3RvIGVycjsKIAogCS8qIFR1cm4gdGhlIHBvd2VyIE9OIHdpdGggZ2l2ZW4gVkREIDEuOCBvciAzLjB2ICovCi0JcmV0ID0gbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMSwgdmRkKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMSwKKwkJCQkJICAgICAgIHZkZCk7CisJY2xrX2VuYWJsZShob3N0LT5pY2xrKTsKKwljbGtfZW5hYmxlKGhvc3QtPmZjbGspOworCWlmIChob3N0LT5nb3RfZGJjbGspCisJCWNsa19lbmFibGUoaG9zdC0+ZGJjbGspOworCiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGVycjsKIAotCWNsa19lbmFibGUoaG9zdC0+ZmNsayk7Ci0JY2xrX2VuYWJsZShob3N0LT5pY2xrKTsKLQljbGtfZW5hYmxlKGhvc3QtPmRiY2xrKTsKLQogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKIAkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgU0RWU0NMUik7CiAJcmVnX3ZhbCA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKTsKQEAgLTU1Miw3ICs3NjksNyBAQAogCS8qCiAJICogSWYgYSBNTUMgZHVhbCB2b2x0YWdlIGNhcmQgaXMgZGV0ZWN0ZWQsIHRoZSBzZXRfaW9zIGZuIGNhbGxzCiAJICogdGhpcyBmbiB3aXRoIFZERCBiaXQgc2V0IGZvciAxLjhWLiBVcG9uIGNhcmQgcmVtb3ZhbCBmcm9tIHRoZQotCSAqIHNsb3QsIG9tYXBfbW1jX3NldF9pb3Mgc2V0cyB0aGUgVkREIGJhY2sgdG8gM1Ygb24gTU1DX1BPV0VSX09GRi4KKwkgKiBzbG90LCBvbWFwX2hzbW1jX3NldF9pb3Mgc2V0cyB0aGUgVkREIGJhY2sgdG8gM1Ygb24gTU1DX1BPV0VSX09GRi4KIAkgKgogCSAqIENvcGUgd2l0aCBhIGJpdCBvZiBzbG9wIGluIHRoZSByYW5nZSAuLi4gcGVyIGRhdGEgc2hlZXRzOgogCSAqICAtICIxLjhWIiBmb3IgdmRkc19tbWMxL3ZkZHNfbW1jMWEgY2FuIGJlIHVwIHRvIDIuNDVWIG1heCwKQEAgLTU3OCwyNSArNzk1LDU5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogUHJvdGVjdCB0aGUgY2FyZCB3aGlsZSB0aGUgY292ZXIgaXMgb3BlbiAqLworc3RhdGljIHZvaWQgb21hcF9oc21tY19wcm90ZWN0X2NhcmQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlpZiAoIW1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZSkKKwkJcmV0dXJuOworCisJaG9zdC0+cmVxc19ibG9ja2VkID0gMDsKKwlpZiAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCkpIHsKKwkJaWYgKGhvc3QtPnByb3RlY3RfY2FyZCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvdmVyIGlzIGNsb3NlZCwgIgorCQkJCQkgImNhcmQgaXMgbm93IGFjY2Vzc2libGVcbiIsCisJCQkJCSBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCQlob3N0LT5wcm90ZWN0X2NhcmQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFob3N0LT5wcm90ZWN0X2NhcmQpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb3ZlciBpcyBvcGVuLCAiCisJCQkJCSAiY2FyZCBpcyBub3cgaW5hY2Nlc3NpYmxlXG4iLAorCQkJCQkgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQkJaG9zdC0+cHJvdGVjdF9jYXJkID0gMTsKKwkJfQorCX0KK30KKwogLyoKICAqIFdvcmsgSXRlbSB0byBub3RpZnkgdGhlIGNvcmUgYWJvdXQgY2FyZCBpbnNlcnRpb24vcmVtb3ZhbAogICovCi1zdGF0aWMgdm9pZCBtbWNfb21hcF9kZXRlY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgb21hcF9oc21tY19kZXRlY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbWNfb21hcF9ob3N0LAotCQkJCQkJbW1jX2NhcmRkZXRlY3Rfd29yayk7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb21hcF9oc21tY19ob3N0LCBtbWNfY2FyZGRldGVjdF93b3JrKTsKIAlzdHJ1Y3Qgb21hcF9tbWNfc2xvdF9kYXRhICpzbG90ID0gJm1tY19zbG90KGhvc3QpOworCWludCBjYXJkZGV0ZWN0OwogCi0JaWYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KQotCQlob3N0LT5jYXJkZGV0ZWN0ID0gc2xvdC0+Y2FyZF9kZXRlY3Qoc2xvdC0+Y2FyZF9kZXRlY3RfaXJxKTsKLQllbHNlCi0JCWhvc3QtPmNhcmRkZXRlY3QgPSAtRU5PU1lTOworCWlmIChob3N0LT5zdXNwZW5kZWQpCisJCXJldHVybjsKIAogCXN5c2ZzX25vdGlmeSgmaG9zdC0+bW1jLT5jbGFzc19kZXYua29iaiwgTlVMTCwgImNvdmVyX3N3aXRjaCIpOwotCWlmIChob3N0LT5jYXJkZGV0ZWN0KSB7CisKKwlpZiAoc2xvdC0+Y2FyZF9kZXRlY3QpCisJCWNhcmRkZXRlY3QgPSBzbG90LT5jYXJkX2RldGVjdChzbG90LT5jYXJkX2RldGVjdF9pcnEpOworCWVsc2UgeworCQlvbWFwX2hzbW1jX3Byb3RlY3RfY2FyZChob3N0KTsKKwkJY2FyZGRldGVjdCA9IC1FTk9TWVM7CisJfQorCisJaWYgKGNhcmRkZXRlY3QpIHsKIAkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCAoSFogKiAyMDApIC8gMTAwMCk7CiAJfSBlbHNlIHsKLQkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKKwkJbW1jX2hvc3RfZW5hYmxlKGhvc3QtPm1tYyk7CisJCW9tYXBfaHNtbWNfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKKwkJbW1jX2hvc3RfbGF6eV9kaXNhYmxlKGhvc3QtPm1tYyk7CisKIAkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCAoSFogKiA1MCkgLyAxMDAwKTsKIAl9CiB9CkBAIC02MDQsMTYgKzg1NSwxOCBAQAogLyoKICAqIElTUiBmb3IgaGFuZGxpbmcgY2FyZCBpbnNlcnRpb24gYW5kIHJlbW92YWwKICAqLwotc3RhdGljIGlycXJldHVybl90IG9tYXBfbW1jX2NkX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IG9tYXBfaHNtbWNfY2RfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1tY19vbWFwX2hvc3QgKilkZXZfaWQ7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICopZGV2X2lkOwogCisJaWYgKGhvc3QtPnN1c3BlbmRlZCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwogCXNjaGVkdWxlX3dvcmsoJmhvc3QtPm1tY19jYXJkZGV0ZWN0X3dvcmspOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IG1tY19vbWFwX2dldF9kbWFfc3luY19kZXYoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X2RtYV9zeW5jX2RldihzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAogCQkJCSAgICAgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWludCBzeW5jX2RldjsKQEAgLTYyNSw3ICs4NzgsNyBAQAogCXJldHVybiBzeW5jX2RldjsKIH0KIAotc3RhdGljIHZvaWQgbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbXMoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2NvbmZpZ19kbWFfcGFyYW1zKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsCiAJCQkJICAgICAgIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwKIAkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wpCiB7CkBAIC02MzksNyArODkyLDcgQEAKIAkJCXNnX2RtYV9hZGRyZXNzKHNnbCksIDAsIDApOwogCX0gZWxzZSB7CiAJCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkJCShob3N0LT5tYXBiYXNlICsgT01BUF9IU01NQ19EQVRBKSwgMCwgMCk7CisJCQkoaG9zdC0+bWFwYmFzZSArIE9NQVBfSFNNTUNfREFUQSksIDAsIDApOwogCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZG1hX2NoLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCXNnX2RtYV9hZGRyZXNzKHNnbCksIDAsIDApOwogCX0KQEAgLTY0OSw3ICs5MDIsNyBAQAogCiAJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhkbWFfY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCiAJCQlibGtzeiAvIDQsIG5ibGssIE9NQVBfRE1BX1NZTkNfRlJBTUUsCi0JCQltbWNfb21hcF9nZXRfZG1hX3N5bmNfZGV2KGhvc3QsIGRhdGEpLAorCQkJb21hcF9oc21tY19nZXRfZG1hX3N5bmNfZGV2KGhvc3QsIGRhdGEpLAogCQkJIShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSk7CiAKIAlvbWFwX3N0YXJ0X2RtYShkbWFfY2gpOwpAQCAtNjU4LDkgKzkxMSw5IEBACiAvKgogICogRE1BIGNhbGwgYmFjayBmdW5jdGlvbgogICovCi1zdGF0aWMgdm9pZCBtbWNfb21hcF9kbWFfY2IoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZG1hX2NiKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkYXRhOwogCiAJaWYgKGNoX3N0YXR1cyAmIE9NQVAyX0RNQV9NSVNBTElHTkVEX0VSUl9JUlEpCiAJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTUlTQUxJR05FRF9BRFJTX0VSUlxuIik7CkBAIC02NzEsNyArOTI0LDcgQEAKIAlob3N0LT5kbWFfc2dfaWR4Kys7CiAJaWYgKGhvc3QtPmRtYV9zZ19pZHggPCBob3N0LT5kbWFfbGVuKSB7CiAJCS8qIEZpcmUgdXAgdGhlIG5leHQgdHJhbnNmZXIuICovCi0JCW1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW1zKGhvc3QsIGhvc3QtPmRhdGEsCisJCW9tYXBfaHNtbWNfY29uZmlnX2RtYV9wYXJhbXMoaG9zdCwgaG9zdC0+ZGF0YSwKIAkJCQkJICAgaG9zdC0+ZGF0YS0+c2cgKyBob3N0LT5kbWFfc2dfaWR4KTsKIAkJcmV0dXJuOwogCX0KQEAgLTY4OCwxNCArOTQxLDE0IEBACiAvKgogICogUm91dGluZSB0byBjb25maWd1cmUgYW5kIHN0YXJ0IERNQSBmb3IgdGhlIE1NQyBjYXJkCiAgKi8KLXN0YXRpYyBpbnQKLW1tY19vbWFwX3N0YXJ0X2RtYV90cmFuc2ZlcihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfc3RhcnRfZG1hX3RyYW5zZmVyKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsCisJCQkJCXN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQogewogCWludCBkbWFfY2ggPSAwLCByZXQgPSAwLCBlcnIgPSAxLCBpOwogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IHJlcS0+ZGF0YTsKIAogCS8qIFNhbml0eSBjaGVjazogYWxsIHRoZSBTRyBlbnRyaWVzIG11c3QgYmUgYWxpZ25lZCBieSBibG9jayBzaXplLiAqLwotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5kbWFfbGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+c2dfbGVuOyBpKyspIHsKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7CiAKIAkJc2dsID0gZGF0YS0+c2cgKyBpOwpAQCAtNzI2LDggKzk3OSw4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldCA9IG9tYXBfcmVxdWVzdF9kbWEobW1jX29tYXBfZ2V0X2RtYV9zeW5jX2Rldihob3N0LCBkYXRhKSwgIk1NQy9TRCIsCi0JCQkgICAgICAgbW1jX29tYXBfZG1hX2NiLGhvc3QsICZkbWFfY2gpOworCXJldCA9IG9tYXBfcmVxdWVzdF9kbWEob21hcF9oc21tY19nZXRfZG1hX3N5bmNfZGV2KGhvc3QsIGRhdGEpLAorCQkJICAgICAgICJNTUMvU0QiLCBvbWFwX2hzbW1jX2RtYV9jYiwgaG9zdCwgJmRtYV9jaCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAogCQkJIiVzOiBvbWFwX3JlcXVlc3RfZG1hKCkgZmFpbGVkIHdpdGggJWRcbiIsCkBAIC03MzYsMTcgKzk4OSwxOCBAQAogCX0KIAogCWhvc3QtPmRtYV9sZW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCi0JCQlkYXRhLT5zZ19sZW4sIG1tY19vbWFwX2dldF9kbWFfZGlyKGhvc3QsIGRhdGEpKTsKKwkJCWRhdGEtPnNnX2xlbiwgb21hcF9oc21tY19nZXRfZG1hX2Rpcihob3N0LCBkYXRhKSk7CiAJaG9zdC0+ZG1hX2NoID0gZG1hX2NoOwogCWhvc3QtPmRtYV9zZ19pZHggPSAwOwogCi0JbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbXMoaG9zdCwgZGF0YSwgZGF0YS0+c2cpOworCW9tYXBfaHNtbWNfY29uZmlnX2RtYV9wYXJhbXMoaG9zdCwgZGF0YSwgZGF0YS0+c2cpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kYXRhX3RpbWVvdXQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsCi0JCQkgICAgIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgc2V0X2RhdGFfdGltZW91dChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAorCQkJICAgICB1bnNpZ25lZCBpbnQgdGltZW91dF9ucywKKwkJCSAgICAgdW5zaWduZWQgaW50IHRpbWVvdXRfY2xrcykKIHsKIAl1bnNpZ25lZCBpbnQgdGltZW91dCwgY3ljbGVfbnM7CiAJdWludDMyX3QgcmVnLCBjbGtkLCBkdG8gPSAwOwpAQCAtNzU3LDggKzEwMTEsOCBAQAogCQljbGtkID0gMTsKIAogCWN5Y2xlX25zID0gMTAwMDAwMDAwMCAvIChjbGtfZ2V0X3JhdGUoaG9zdC0+ZmNsaykgLyBjbGtkKTsKLQl0aW1lb3V0ID0gcmVxLT5kYXRhLT50aW1lb3V0X25zIC8gY3ljbGVfbnM7Ci0JdGltZW91dCArPSByZXEtPmRhdGEtPnRpbWVvdXRfY2xrczsKKwl0aW1lb3V0ID0gdGltZW91dF9ucyAvIGN5Y2xlX25zOworCXRpbWVvdXQgKz0gdGltZW91dF9jbGtzOwogCWlmICh0aW1lb3V0KSB7CiAJCXdoaWxlICgodGltZW91dCAmIDB4ODAwMDAwMDApID09IDApIHsKIAkJCWR0byArPSAxOwpAQCAtNzg1LDIyICsxMDM5LDI4IEBACiAgKiBDb25maWd1cmUgYmxvY2sgbGVuZ3RoIGZvciBNTUMvU0QgY2FyZHMgYW5kIGluaXRpYXRlIHRoZSB0cmFuc2Zlci4KICAqLwogc3RhdGljIGludAotbW1jX29tYXBfcHJlcGFyZV9kYXRhKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKK29tYXBfaHNtbWNfcHJlcGFyZV9kYXRhKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQogewogCWludCByZXQ7CiAJaG9zdC0+ZGF0YSA9IHJlcS0+ZGF0YTsKIAogCWlmIChyZXEtPmRhdGEgPT0gTlVMTCkgewogCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEJMSywgMCk7CisJCS8qCisJCSAqIFNldCBhbiBhcmJpdHJhcnkgMTAwbXMgZGF0YSB0aW1lb3V0IGZvciBjb21tYW5kcyB3aXRoCisJCSAqIGJ1c3kgc2lnbmFsLgorCQkgKi8KKwkJaWYgKHJlcS0+Y21kLT5mbGFncyAmIE1NQ19SU1BfQlVTWSkKKwkJCXNldF9kYXRhX3RpbWVvdXQoaG9zdCwgMTAwMDAwMDAwVSwgMCk7CiAJCXJldHVybiAwOwogCX0KIAogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQkxLLCAocmVxLT5kYXRhLT5ibGtzeikKIAkJCQkJfCAocmVxLT5kYXRhLT5ibG9ja3MgPDwgMTYpKTsKLQlzZXRfZGF0YV90aW1lb3V0KGhvc3QsIHJlcSk7CisJc2V0X2RhdGFfdGltZW91dChob3N0LCByZXEtPmRhdGEtPnRpbWVvdXRfbnMsIHJlcS0+ZGF0YS0+dGltZW91dF9jbGtzKTsKIAogCWlmIChob3N0LT51c2VfZG1hKSB7Ci0JCXJldCA9IG1tY19vbWFwX3N0YXJ0X2RtYV90cmFuc2Zlcihob3N0LCByZXEpOworCQlyZXQgPSBvbWFwX2hzbW1jX3N0YXJ0X2RtYV90cmFuc2Zlcihob3N0LCByZXEpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTU1DIHN0YXJ0IGRtYSBmYWlsdXJlXG4iKTsKIAkJCXJldHVybiByZXQ7CkBAIC04MTIsMzUgKzEwNzIsOTIgQEAKIC8qCiAgKiBSZXF1ZXN0IGZ1bmN0aW9uLiBmb3IgcmVhZC93cml0ZSBvcGVyYXRpb24KICAqLwotc3RhdGljIHZvaWQgb21hcF9tbWNfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlpbnQgZXJyOwogCisJLyoKKwkgKiBQcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyIGJlY2F1c2Ugb2YgdW5leHBlY3RlZAorCSAqIGludGVycnVwdHMsIGJ1dCBub3QgaWYgd2UgYXJlIGFscmVhZHkgaW4gaW50ZXJydXB0IGNvbnRleHQgaS5lLgorCSAqIHJldHJpZXMuCisJICovCisJaWYgKCFpbl9pbnRlcnJ1cHQoKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+aXJxX2xvY2ssIGhvc3QtPmZsYWdzKTsKKwkJLyoKKwkJICogUHJvdGVjdCB0aGUgY2FyZCBmcm9tIEkvTyBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5CisJCSAqIGl0IGNhbiBiZSByZW1vdmVkLgorCQkgKi8KKwkJaWYgKGhvc3QtPnByb3RlY3RfY2FyZCkgeworCQkJaWYgKGhvc3QtPnJlcXNfYmxvY2tlZCA8IDMpIHsKKwkJCQkvKgorCQkJCSAqIEVuc3VyZSB0aGUgY29udHJvbGxlciBpcyBsZWZ0IGluIGEgY29uc2lzdGVudAorCQkJCSAqIHN0YXRlIGJ5IHJlc2V0dGluZyB0aGUgY29tbWFuZCBhbmQgZGF0YSBzdGF0ZQorCQkJCSAqIG1hY2hpbmVzLgorCQkJCSAqLworCQkJCW9tYXBfaHNtbWNfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKKwkJCQlvbWFwX2hzbW1jX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSQyk7CisJCQkJaG9zdC0+cmVxc19ibG9ja2VkICs9IDE7CisJCQl9CisJCQlyZXEtPmNtZC0+ZXJyb3IgPSAtRUJBREY7CisJCQlpZiAocmVxLT5kYXRhKQorCQkJCXJlcS0+ZGF0YS0+ZXJyb3IgPSAtRUJBREY7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5pcnFfbG9jaywgaG9zdC0+ZmxhZ3MpOworCQkJbW1jX3JlcXVlc3RfZG9uZShtbWMsIHJlcSk7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAoaG9zdC0+cmVxc19ibG9ja2VkKQorCQkJaG9zdC0+cmVxc19ibG9ja2VkID0gMDsKKwl9CiAJV0FSTl9PTihob3N0LT5tcnEgIT0gTlVMTCk7CiAJaG9zdC0+bXJxID0gcmVxOwotCW1tY19vbWFwX3ByZXBhcmVfZGF0YShob3N0LCByZXEpOwotCW1tY19vbWFwX3N0YXJ0X2NvbW1hbmQoaG9zdCwgcmVxLT5jbWQsIHJlcS0+ZGF0YSk7CisJZXJyID0gb21hcF9oc21tY19wcmVwYXJlX2RhdGEoaG9zdCwgcmVxKTsKKwlpZiAoZXJyKSB7CisJCXJlcS0+Y21kLT5lcnJvciA9IGVycjsKKwkJaWYgKHJlcS0+ZGF0YSkKKwkJCXJlcS0+ZGF0YS0+ZXJyb3IgPSBlcnI7CisJCWhvc3QtPm1ycSA9IE5VTEw7CisJCWlmICghaW5faW50ZXJydXB0KCkpCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5pcnFfbG9jaywgaG9zdC0+ZmxhZ3MpOworCQltbWNfcmVxdWVzdF9kb25lKG1tYywgcmVxKTsKKwkJcmV0dXJuOworCX0KKworCW9tYXBfaHNtbWNfc3RhcnRfY29tbWFuZChob3N0LCByZXEtPmNtZCwgcmVxLT5kYXRhKTsKIH0KIAotCiAvKiBSb3V0aW5lIHRvIGNvbmZpZ3VyZSBjbG9jayB2YWx1ZXMuIEV4cG9zZWQgQVBJIHRvIGNvcmUgKi8KLXN0YXRpYyB2b2lkIG9tYXBfbW1jX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXUxNiBkc29yID0gMDsKIAl1bnNpZ25lZCBsb25nIHJlZ3ZhbDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTMyIGNvbjsKKwlpbnQgZG9fc2VuZF9pbml0X3N0cmVhbSA9IDA7CiAKLQlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewotCWNhc2UgTU1DX1BPV0VSX09GRjoKLQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMCwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1BPV0VSX1VQOgotCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAxLCBpb3MtPnZkZCk7Ci0JCWJyZWFrOworCW1tY19ob3N0X2VuYWJsZShob3N0LT5tbWMpOworCisJaWYgKGlvcy0+cG93ZXJfbW9kZSAhPSBob3N0LT5wb3dlcl9tb2RlKSB7CisJCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CisJCWNhc2UgTU1DX1BPV0VSX09GRjoKKwkJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsCisJCQkJCQkgMCwgMCk7CisJCQlob3N0LT52ZGQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1BPV0VSX1VQOgorCQkJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwKKwkJCQkJCSAxLCBpb3MtPnZkZCk7CisJCQlob3N0LT52ZGQgPSBpb3MtPnZkZDsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19QT1dFUl9PTjoKKwkJCWRvX3NlbmRfaW5pdF9zdHJlYW0gPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaG9zdC0+cG93ZXJfbW9kZSA9IGlvcy0+cG93ZXJfbW9kZTsKIAl9CiAKKwkvKiBGSVhNRTogc2V0IHJlZ2lzdGVycyBiYXNlZCBvbmx5IG9uIGNoYW5nZXMgdG8gaW9zICovCisKIAljb24gPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKTsKIAlzd2l0Y2ggKG1tYy0+aW9zLmJ1c193aWR0aCkgewogCWNhc2UgTU1DX0JVU19XSURUSF84OgpAQCAtODcwLDggKzExODcsOCBAQAogCQkJCSAqIE1NQ19QT1dFUl9VUCB1cG9uIHJlY2FsY3VsYXRpbmcgdGhlIHZvbHRhZ2UuCiAJCQkJICogdmRkIDEuOHYuCiAJCQkJICovCi0JCQkJaWYgKG9tYXBfbW1jX3N3aXRjaF9vcGNvbmQoaG9zdCwgaW9zLT52ZGQpICE9IDApCi0JCQkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAorCQkJaWYgKG9tYXBfaHNtbWNfc3dpdGNoX29wY29uZChob3N0LCBpb3MtPnZkZCkgIT0gMCkKKwkJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKIAkJCQkJCSJTd2l0Y2ggb3BlcmF0aW9uIGZhaWxlZFxuIik7CiAJCX0KIAl9CkBAIC04ODcsNyArMTIwNCw3IEBACiAJCWlmIChkc29yID4gMjUwKQogCQkJZHNvciA9IDI1MDsKIAl9Ci0Jb21hcF9tbWNfc3RvcF9jbG9jayhob3N0KTsKKwlvbWFwX2hzbW1jX3N0b3BfY2xvY2soaG9zdCk7CiAJcmVndmFsID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCk7CiAJcmVndmFsID0gcmVndmFsICYgfihDTEtEX01BU0spOwogCXJlZ3ZhbCA9IHJlZ3ZhbCB8IChkc29yIDw8IDYpIHwgKERUTyA8PCAxNik7CkBAIC04OTcsNDIgKzEyMTQsNDcgQEAKIAogCS8qIFdhaXQgdGlsbCB0aGUgSUNTIGJpdCBpcyBzZXQgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTU1DX1RJTUVPVVRfTVMpOwotCXdoaWxlICgoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgJiBJQ1MpICE9IDB4MgorCXdoaWxlICgoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgJiBJQ1MpICE9IElDUwogCQkmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKIAkJbXNsZWVwKDEpOwogCiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDVEwsCiAJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDVEwpIHwgQ0VOKTsKIAotCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09OKQorCWlmIChkb19zZW5kX2luaXRfc3RyZWFtKQogCQlzZW5kX2luaXRfc3RyZWFtKGhvc3QpOwogCisJY29uID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7CiAJaWYgKGlvcy0+YnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOKQotCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwKLQkJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKSB8IE9EKTsKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGNvbiB8IE9EKTsKKwllbHNlCisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gJiB+T0QpOworCisJaWYgKGhvc3QtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikKKwkJbW1jX2hvc3RfZGlzYWJsZShob3N0LT5tbWMpOworCWVsc2UKKwkJbW1jX2hvc3RfbGF6eV9kaXNhYmxlKGhvc3QtPm1tYyk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfY2Qoc3RydWN0IG1tY19ob3N0ICptbWMpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JaWYgKCFwZGF0YS0+c2xvdHNbMF0uY2FyZF9kZXRlY3QpCisJaWYgKCFtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCkKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JcmV0dXJuIHBkYXRhLT5zbG90c1swXS5jYXJkX2RldGVjdChwZGF0YS0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxKTsKKwlyZXR1cm4gbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxKTsKIH0KIAogc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKIHsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gaG9zdC0+cGRhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKLQlpZiAoIXBkYXRhLT5zbG90c1swXS5nZXRfcm8pCisJaWYgKCFtbWNfc2xvdChob3N0KS5nZXRfcm8pCiAJCXJldHVybiAtRU5PU1lTOwotCXJldHVybiBwZGF0YS0+c2xvdHNbMF0uZ2V0X3JvKGhvc3QtPmRldiwgMCk7CisJcmV0dXJuIG1tY19zbG90KGhvc3QpLmdldF9ybyhob3N0LT5kZXYsIDApOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2luaXQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2NvbmZfYnVzX3Bvd2VyKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7CiAJdTMyIGhjdGwsIGNhcGEsIHZhbHVlOwogCkBAIC05NTksMTkgKzEyODEsMzQwIEBACiAJc2V0X3NkX2J1c19wb3dlcihob3N0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbW1jX29tYXBfb3BzID0gewotCS5yZXF1ZXN0ID0gb21hcF9tbWNfcmVxdWVzdCwKLQkuc2V0X2lvcyA9IG9tYXBfbW1jX3NldF9pb3MsCisvKgorICogRHluYW1pYyBwb3dlciBzYXZpbmcgaGFuZGxpbmcsIEZTTToKKyAqICAgRU5BQkxFRCAtPiBESVNBQkxFRCAtPiBDQVJEU0xFRVAgLyBSRUdTTEVFUCAtPiBPRkYKKyAqICAgICBeX19fX19fX19fX198ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHxfX19fX19fX19fX19fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19fX198CisgKgorICogRU5BQkxFRDogICBtbWMgaG9zdCBpcyBmdWxseSBmdW5jdGlvbmFsCisgKiBESVNBQkxFRDogIGZjbGsgaXMgb2ZmCisgKiBDQVJEU0xFRVA6IGZjbGsgaXMgb2ZmLCBjYXJkIGlzIGFzbGVlcCwgdm9sdGFnZSByZWd1bGF0b3IgaXMgYXNsZWVwCisgKiBSRUdTTEVFUDogIGZjbGsgaXMgb2ZmLCB2b2x0YWdlIHJlZ3VsYXRvciBpcyBhc2xlZXAKKyAqIE9GRjogICAgICAgZmNsayBpcyBvZmYsIHZvbHRhZ2UgcmVndWxhdG9yIGlzIG9mZgorICoKKyAqIFRyYW5zaXRpb24gaGFuZGxlcnMgcmV0dXJuIHRoZSB0aW1lb3V0IGZvciB0aGUgbmV4dCBzdGF0ZSB0cmFuc2l0aW9uCisgKiBvciBuZWdhdGl2ZSBlcnJvci4KKyAqLworCitlbnVtIHtFTkFCTEVEID0gMCwgRElTQUJMRUQsIENBUkRTTEVFUCwgUkVHU0xFRVAsIE9GRn07CisKKy8qIEhhbmRsZXIgZm9yIFtFTkFCTEVEIC0+IERJU0FCTEVEXSB0cmFuc2l0aW9uICovCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZW5hYmxlZF90b19kaXNhYmxlZChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCW9tYXBfaHNtbWNfY29udGV4dF9zYXZlKGhvc3QpOworCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCWhvc3QtPmRwbV9zdGF0ZSA9IERJU0FCTEVEOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJFTkFCTEVEIC0+IERJU0FCTEVEXG4iKTsKKworCWlmIChob3N0LT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCisJCXJldHVybiAwOworCisJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoT01BUF9NTUNfU0xFRVBfVElNRU9VVCk7Cit9CisKKy8qIEhhbmRsZXIgZm9yIFtESVNBQkxFRCAtPiBSRUdTTEVFUCAvIENBUkRTTEVFUF0gdHJhbnNpdGlvbiAqLworc3RhdGljIGludCBvbWFwX2hzbW1jX2Rpc2FibGVkX3RvX3NsZWVwKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJaW50IGVyciwgbmV3X3N0YXRlOworCisJaWYgKCFtbWNfdHJ5X2NsYWltX2hvc3QoaG9zdC0+bW1jKSkKKwkJcmV0dXJuIDA7CisKKwljbGtfZW5hYmxlKGhvc3QtPmZjbGspOworCW9tYXBfaHNtbWNfY29udGV4dF9yZXN0b3JlKGhvc3QpOworCWlmIChtbWNfY2FyZF9jYW5fc2xlZXAoaG9zdC0+bW1jKSkgeworCQllcnIgPSBtbWNfY2FyZF9zbGVlcChob3N0LT5tbWMpOworCQlpZiAoZXJyIDwgMCkgeworCQkJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CisJCQltbWNfcmVsZWFzZV9ob3N0KGhvc3QtPm1tYyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCW5ld19zdGF0ZSA9IENBUkRTTEVFUDsKKwl9IGVsc2UgeworCQluZXdfc3RhdGUgPSBSRUdTTEVFUDsKKwl9CisJaWYgKG1tY19zbG90KGhvc3QpLnNldF9zbGVlcCkKKwkJbW1jX3Nsb3QoaG9zdCkuc2V0X3NsZWVwKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMSwgMCwKKwkJCQkJIG5ld19zdGF0ZSA9PSBDQVJEU0xFRVApOworCS8qIEZJWE1FOiB0dXJuIG9mZiBidXMgcG93ZXIgYW5kIHBlcmhhcHMgaW50ZXJydXB0cyB0b28gKi8KKwljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKKwlob3N0LT5kcG1fc3RhdGUgPSBuZXdfc3RhdGU7CisKKwltbWNfcmVsZWFzZV9ob3N0KGhvc3QtPm1tYyk7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkRJU0FCTEVEIC0+ICVzXG4iLAorCQlob3N0LT5kcG1fc3RhdGUgPT0gQ0FSRFNMRUVQID8gIkNBUkRTTEVFUCIgOiAiUkVHU0xFRVAiKTsKKworCWlmICgoaG9zdC0+bW1jLT5jYXBzICYgTU1DX0NBUF9OT05SRU1PVkFCTEUpIHx8CisJICAgIG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0IHx8CisJICAgIChtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUgJiYKKwkgICAgIG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpKSkKKwkJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoT01BUF9NTUNfT0ZGX1RJTUVPVVQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEhhbmRsZXIgZm9yIFtSRUdTTEVFUCAvIENBUkRTTEVFUCAtPiBPRkZdIHRyYW5zaXRpb24gKi8KK3N0YXRpYyBpbnQgb21hcF9oc21tY19zbGVlcF90b19vZmYoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlpZiAoIW1tY190cnlfY2xhaW1faG9zdChob3N0LT5tbWMpKQorCQlyZXR1cm4gMDsKKworCWlmICghKChob3N0LT5tbWMtPmNhcHMgJiBNTUNfQ0FQX05PTlJFTU9WQUJMRSkgfHwKKwkgICAgICBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCB8fAorCSAgICAgIChtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUgJiYKKwkgICAgICAgbW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCkpKSkgeworCQltbWNfcmVsZWFzZV9ob3N0KGhvc3QtPm1tYyk7CisJCXJldHVybiAwOworCX0KKworCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsIDApOworCWhvc3QtPnZkZCA9IDA7CisJaG9zdC0+cG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9PRkY7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzIC0+IE9GRlxuIiwKKwkJaG9zdC0+ZHBtX3N0YXRlID09IENBUkRTTEVFUCA/ICJDQVJEU0xFRVAiIDogIlJFR1NMRUVQIik7CisKKwlob3N0LT5kcG1fc3RhdGUgPSBPRkY7CisKKwltbWNfcmVsZWFzZV9ob3N0KGhvc3QtPm1tYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogSGFuZGxlciBmb3IgW0RJU0FCTEVEIC0+IEVOQUJMRURdIHRyYW5zaXRpb24gKi8KK3N0YXRpYyBpbnQgb21hcF9oc21tY19kaXNhYmxlZF90b19lbmFibGVkKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJaW50IGVycjsKKworCWVyciA9IGNsa19lbmFibGUoaG9zdC0+ZmNsayk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlvbWFwX2hzbW1jX2NvbnRleHRfcmVzdG9yZShob3N0KTsKKwlob3N0LT5kcG1fc3RhdGUgPSBFTkFCTEVEOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJESVNBQkxFRCAtPiBFTkFCTEVEXG4iKTsKKworCXJldHVybiAwOworfQorCisvKiBIYW5kbGVyIGZvciBbU0xFRVAgLT4gRU5BQkxFRF0gdHJhbnNpdGlvbiAqLworc3RhdGljIGludCBvbWFwX2hzbW1jX3NsZWVwX3RvX2VuYWJsZWQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlpZiAoIW1tY190cnlfY2xhaW1faG9zdChob3N0LT5tbWMpKQorCQlyZXR1cm4gMDsKKworCWNsa19lbmFibGUoaG9zdC0+ZmNsayk7CisJb21hcF9oc21tY19jb250ZXh0X3Jlc3RvcmUoaG9zdCk7CisJaWYgKG1tY19zbG90KGhvc3QpLnNldF9zbGVlcCkKKwkJbW1jX3Nsb3QoaG9zdCkuc2V0X3NsZWVwKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMCwKKwkJCSBob3N0LT52ZGQsIGhvc3QtPmRwbV9zdGF0ZSA9PSBDQVJEU0xFRVApOworCWlmIChtbWNfY2FyZF9jYW5fc2xlZXAoaG9zdC0+bW1jKSkKKwkJbW1jX2NhcmRfYXdha2UoaG9zdC0+bW1jKTsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiJXMgLT4gRU5BQkxFRFxuIiwKKwkJaG9zdC0+ZHBtX3N0YXRlID09IENBUkRTTEVFUCA/ICJDQVJEU0xFRVAiIDogIlJFR1NMRUVQIik7CisKKwlob3N0LT5kcG1fc3RhdGUgPSBFTkFCTEVEOworCisJbW1jX3JlbGVhc2VfaG9zdChob3N0LT5tbWMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEhhbmRsZXIgZm9yIFtPRkYgLT4gRU5BQkxFRF0gdHJhbnNpdGlvbiAqLworc3RhdGljIGludCBvbWFwX2hzbW1jX29mZl90b19lbmFibGVkKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKKworCW9tYXBfaHNtbWNfY29udGV4dF9yZXN0b3JlKGhvc3QpOworCW9tYXBfaHNtbWNfY29uZl9idXNfcG93ZXIoaG9zdCk7CisJbW1jX3Bvd2VyX3Jlc3RvcmVfaG9zdChob3N0LT5tbWMpOworCisJaG9zdC0+ZHBtX3N0YXRlID0gRU5BQkxFRDsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiT0ZGIC0+IEVOQUJMRURcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBCcmluZyBNTUMgaG9zdCB0byBFTkFCTEVEIGZyb20gYW55IG90aGVyIFBNIHN0YXRlLgorICovCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZW5hYmxlKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJc3dpdGNoIChob3N0LT5kcG1fc3RhdGUpIHsKKwljYXNlIERJU0FCTEVEOgorCQlyZXR1cm4gb21hcF9oc21tY19kaXNhYmxlZF90b19lbmFibGVkKGhvc3QpOworCWNhc2UgQ0FSRFNMRUVQOgorCWNhc2UgUkVHU0xFRVA6CisJCXJldHVybiBvbWFwX2hzbW1jX3NsZWVwX3RvX2VuYWJsZWQoaG9zdCk7CisJY2FzZSBPRkY6CisJCXJldHVybiBvbWFwX2hzbW1jX29mZl90b19lbmFibGVkKGhvc3QpOworCWRlZmF1bHQ6CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiVU5LTk9XTiBzdGF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIEJyaW5nIE1NQyBob3N0IGluIFBNIHN0YXRlIChvbmUgbGV2ZWwgZGVlcGVyKS4KKyAqLworc3RhdGljIGludCBvbWFwX2hzbW1jX2Rpc2FibGUoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBsYXp5KQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJc3dpdGNoIChob3N0LT5kcG1fc3RhdGUpIHsKKwljYXNlIEVOQUJMRUQ6IHsKKwkJaW50IGRlbGF5OworCisJCWRlbGF5ID0gb21hcF9oc21tY19lbmFibGVkX3RvX2Rpc2FibGVkKGhvc3QpOworCQlpZiAobGF6eSB8fCBkZWxheSA8IDApCisJCQlyZXR1cm4gZGVsYXk7CisJCXJldHVybiAwOworCX0KKwljYXNlIERJU0FCTEVEOgorCQlyZXR1cm4gb21hcF9oc21tY19kaXNhYmxlZF90b19zbGVlcChob3N0KTsKKwljYXNlIENBUkRTTEVFUDoKKwljYXNlIFJFR1NMRUVQOgorCQlyZXR1cm4gb21hcF9oc21tY19zbGVlcF90b19vZmYoaG9zdCk7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJVTktOT1dOIHN0YXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZW5hYmxlX2ZjbGsoc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaW50IGVycjsKKworCWVyciA9IGNsa19lbmFibGUoaG9zdC0+ZmNsayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIm1tY19mY2xrOiBlbmFibGVkXG4iKTsKKwlvbWFwX2hzbW1jX2NvbnRleHRfcmVzdG9yZShob3N0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX2hzbW1jX2Rpc2FibGVfZmNsayhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGxhenkpCit7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlvbWFwX2hzbW1jX2NvbnRleHRfc2F2ZShob3N0KTsKKwljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIm1tY19mY2xrOiBkaXNhYmxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG9tYXBfaHNtbWNfb3BzID0geworCS5lbmFibGUgPSBvbWFwX2hzbW1jX2VuYWJsZV9mY2xrLAorCS5kaXNhYmxlID0gb21hcF9oc21tY19kaXNhYmxlX2ZjbGssCisJLnJlcXVlc3QgPSBvbWFwX2hzbW1jX3JlcXVlc3QsCisJLnNldF9pb3MgPSBvbWFwX2hzbW1jX3NldF9pb3MsCiAJLmdldF9jZCA9IG9tYXBfaHNtbWNfZ2V0X2NkLAogCS5nZXRfcm8gPSBvbWFwX2hzbW1jX2dldF9ybywKIAkvKiBOWUVUIC0tIGVuYWJsZV9zZGlvX2lycSAqLwogfTsKIAotc3RhdGljIGludCBfX2luaXQgb21hcF9tbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG9tYXBfaHNtbWNfcHNfb3BzID0geworCS5lbmFibGUgPSBvbWFwX2hzbW1jX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG9tYXBfaHNtbWNfZGlzYWJsZSwKKwkucmVxdWVzdCA9IG9tYXBfaHNtbWNfcmVxdWVzdCwKKwkuc2V0X2lvcyA9IG9tYXBfaHNtbWNfc2V0X2lvcywKKwkuZ2V0X2NkID0gb21hcF9oc21tY19nZXRfY2QsCisJLmdldF9ybyA9IG9tYXBfaHNtbWNfZ2V0X3JvLAorCS8qIE5ZRVQgLS0gZW5hYmxlX3NkaW9faXJxICovCit9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19yZWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlpbnQgY29udGV4dF9sb3NzID0gMDsKKworCWlmIChob3N0LT5wZGF0YS0+Z2V0X2NvbnRleHRfbG9zc19jb3VudCkKKwkJY29udGV4dF9sb3NzID0gaG9zdC0+cGRhdGEtPmdldF9jb250ZXh0X2xvc3NfY291bnQoaG9zdC0+ZGV2KTsKKworCXNlcV9wcmludGYocywgIm1tYyVkOlxuIgorCQkJIiBlbmFibGVkOlx0JWRcbiIKKwkJCSIgZHBtX3N0YXRlOlx0JWRcbiIKKwkJCSIgbmVzdGluZ19jbnQ6XHQlZFxuIgorCQkJIiBjdHhfbG9zczpcdCVkOiVkXG4iCisJCQkiXG5yZWdzOlxuIiwKKwkJCW1tYy0+aW5kZXgsIG1tYy0+ZW5hYmxlZCA/IDEgOiAwLAorCQkJaG9zdC0+ZHBtX3N0YXRlLCBtbWMtPm5lc3RpbmdfY250LAorCQkJaG9zdC0+Y29udGV4dF9sb3NzLCBjb250ZXh0X2xvc3MpOworCisJaWYgKGhvc3QtPnN1c3BlbmRlZCB8fCBob3N0LT5kcG1fc3RhdGUgPT0gT0ZGKSB7CisJCXNlcV9wcmludGYocywgImhvc3Qgc3VzcGVuZGVkLCBjYW4ndCByZWFkIHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChjbGtfZW5hYmxlKGhvc3QtPmZjbGspICE9IDApIHsKKwkJc2VxX3ByaW50ZihzLCAiY2FuJ3QgcmVhZCB0aGUgcmVnc1xuIik7CisJCXJldHVybiAwOworCX0KKworCXNlcV9wcmludGYocywgIlNZU0NPTkZJRzpcdDB4JTA4eFxuIiwKKwkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDT05GSUcpKTsKKwlzZXFfcHJpbnRmKHMsICJDT046XHRcdDB4JTA4eFxuIiwKKwkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDT04pKTsKKwlzZXFfcHJpbnRmKHMsICJIQ1RMOlx0XHQweCUwOHhcbiIsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkpOworCXNlcV9wcmludGYocywgIlNZU0NUTDpcdFx0MHglMDh4XG4iLAorCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkpOworCXNlcV9wcmludGYocywgIklFOlx0XHQweCUwOHhcbiIsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSUUpKTsKKwlzZXFfcHJpbnRmKHMsICJJU0U6XHRcdDB4JTA4eFxuIiwKKwkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBJU0UpKTsKKwlzZXFfcHJpbnRmKHMsICJDQVBBOlx0XHQweCUwOHhcbiIsCisJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ0FQQSkpOworCisJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX2hzbW1jX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgb21hcF9oc21tY19yZWdzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtbWNfcmVnc19mb3BzID0geworCS5vcGVuICAgICAgICAgICA9IG9tYXBfaHNtbWNfcmVnc19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSAgICAgICAgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZGVidWdmcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlpZiAobW1jLT5kZWJ1Z2ZzX3Jvb3QpCisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ3MiLCBTX0lSVVNSLCBtbWMtPmRlYnVnZnNfcm9vdCwKKwkJCW1tYywgJm1tY19yZWdzX2ZvcHMpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2RlYnVnZnMoc3RydWN0IG1tY19ob3N0ICptbWMpCit7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBOVUxMOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQgPSAwLCBpcnE7CiAKQEAgLTk5NSw3ICsxNjM4LDcgQEAKIAlpZiAocmVzID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKLQltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IG1tY19vbWFwX2hvc3QpLCAmcGRldi0+ZGV2KTsKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwpAQCAtMTAxMywxNSArMTY1NiwyMSBAQAogCWhvc3QtPnNsb3RfaWQJPSAwOwogCWhvc3QtPm1hcGJhc2UJPSByZXMtPnN0YXJ0OwogCWhvc3QtPmJhc2UJPSBpb3JlbWFwKGhvc3QtPm1hcGJhc2UsIFNaXzRLKTsKKwlob3N0LT5wb3dlcl9tb2RlID0gLTE7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKLQlJTklUX1dPUksoJmhvc3QtPm1tY19jYXJkZGV0ZWN0X3dvcmssIG1tY19vbWFwX2RldGVjdCk7CisJSU5JVF9XT1JLKCZob3N0LT5tbWNfY2FyZGRldGVjdF93b3JrLCBvbWFwX2hzbW1jX2RldGVjdCk7CiAKLQltbWMtPm9wcwk9ICZtbWNfb21hcF9vcHM7CisJaWYgKG1tY19zbG90KGhvc3QpLnBvd2VyX3NhdmluZykKKwkJbW1jLT5vcHMJPSAmb21hcF9oc21tY19wc19vcHM7CisJZWxzZQorCQltbWMtPm9wcwk9ICZvbWFwX2hzbW1jX29wczsKKwogCW1tYy0+Zl9taW4JPSA0MDAwMDA7CiAJbW1jLT5mX21heAk9IDUyMDAwMDAwOwogCiAJc2VtYV9pbml0KCZob3N0LT5zZW0sIDEpOworCXNwaW5fbG9ja19pbml0KCZob3N0LT5pcnFfbG9jayk7CiAKIAlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7CiAJaWYgKElTX0VSUihob3N0LT5pY2xrKSkgewpAQCAtMTAzNywzMSArMTY4Niw0MiBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JaWYgKGNsa19lbmFibGUoaG9zdC0+ZmNsaykgIT0gMCkgeworCW9tYXBfaHNtbWNfY29udGV4dF9zYXZlKGhvc3QpOworCisJbW1jLT5jYXBzIHw9IE1NQ19DQVBfRElTQUJMRTsKKwltbWNfc2V0X2Rpc2FibGVfZGVsYXkobW1jLCBPTUFQX01NQ19ESVNBQkxFRF9USU1FT1VUKTsKKwkvKiB3ZSBzdGFydCBvZmYgaW4gRElTQUJMRUQgc3RhdGUgKi8KKwlob3N0LT5kcG1fc3RhdGUgPSBESVNBQkxFRDsKKworCWlmIChtbWNfaG9zdF9lbmFibGUoaG9zdC0+bW1jKSAhPSAwKSB7CiAJCWNsa19wdXQoaG9zdC0+aWNsayk7CiAJCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAJCWdvdG8gZXJyMTsKIAl9CiAKIAlpZiAoY2xrX2VuYWJsZShob3N0LT5pY2xrKSAhPSAwKSB7Ci0JCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCQltbWNfaG9zdF9kaXNhYmxlKGhvc3QtPm1tYyk7CiAJCWNsa19wdXQoaG9zdC0+aWNsayk7CiAJCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlob3N0LT5kYmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY2hzZGJfZmNrIik7Ci0JLyoKLQkgKiBNTUMgY2FuIHN0aWxsIHdvcmsgd2l0aG91dCBkZWJvdW5jZSBjbG9jay4KLQkgKi8KLQlpZiAoSVNfRVJSKGhvc3QtPmRiY2xrKSkKLQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiRmFpbGVkIHRvIGdldCBkZWJvdW5jZSBjbG9ja1xuIik7Ci0JZWxzZQotCQlpZiAoY2xrX2VuYWJsZShob3N0LT5kYmNsaykgIT0gMCkKLQkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRW5hYmxpbmcgZGVib3VuY2UiCi0JCQkJCQkJIiBjbGsgZmFpbGVkXG4iKTsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJaG9zdC0+ZGJjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNoc2RiX2ZjayIpOworCQkvKgorCQkgKiBNTUMgY2FuIHN0aWxsIHdvcmsgd2l0aG91dCBkZWJvdW5jZSBjbG9jay4KKwkJICovCisJCWlmIChJU19FUlIoaG9zdC0+ZGJjbGspKQorCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLAorCQkJCSJGYWlsZWQgdG8gZ2V0IGRlYm91bmNlIGNsb2NrXG4iKTsKIAkJZWxzZQotCQkJaG9zdC0+ZGJjbGtfZW5hYmxlZCA9IDE7CisJCQlob3N0LT5nb3RfZGJjbGsgPSAxOworCisJCWlmIChob3N0LT5nb3RfZGJjbGspCisJCQlpZiAoY2xrX2VuYWJsZShob3N0LT5kYmNsaykgIT0gMCkKKwkJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkVuYWJsaW5nIGRlYm91bmNlIgorCQkJCQkJCSIgY2xrIGZhaWxlZFxuIik7CisJfQogCiAJLyogU2luY2Ugd2UgZG8gb25seSBTRyBlbXVsYXRpb24sIHdlIGNhbiBoYXZlIGFzIG1hbnkgc2VncwogCSAqIGFzIHdlIHdhbnQuICovCkBAIC0xMDczLDE0ICsxNzMzLDE4IEBACiAJbW1jLT5tYXhfcmVxX3NpemUgPSBtbWMtPm1heF9ibGtfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKIAltbWMtPm1heF9zZWdfc2l6ZSA9IG1tYy0+bWF4X3JlcV9zaXplOwogCi0JbW1jLT5jYXBzIHw9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEOworCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8CisJCSAgICAgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1k7CiAKLQlpZiAocGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLndpcmVzID49IDgpCisJaWYgKG1tY19zbG90KGhvc3QpLndpcmVzID49IDgpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzhfQklUX0RBVEE7Ci0JZWxzZSBpZiAocGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLndpcmVzID49IDQpCisJZWxzZSBpZiAobW1jX3Nsb3QoaG9zdCkud2lyZXMgPj0gNCkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIAotCW9tYXBfaHNtbWNfaW5pdChob3N0KTsKKwlpZiAobW1jX3Nsb3QoaG9zdCkubm9ucmVtb3ZhYmxlKQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9OT05SRU1PVkFCTEU7CisKKwlvbWFwX2hzbW1jX2NvbmZfYnVzX3Bvd2VyKGhvc3QpOwogCiAJLyogU2VsZWN0IERNQSBsaW5lcyAqLwogCXN3aXRjaCAoaG9zdC0+aWQpIHsKQEAgLTEwOTYsMTMgKzE3NjAsMjEgQEAKIAkJaG9zdC0+ZG1hX2xpbmVfdHggPSBPTUFQMzRYWF9ETUFfTU1DM19UWDsKIAkJaG9zdC0+ZG1hX2xpbmVfcnggPSBPTUFQMzRYWF9ETUFfTU1DM19SWDsKIAkJYnJlYWs7CisJY2FzZSBPTUFQX01NQzRfREVWSUQ6CisJCWhvc3QtPmRtYV9saW5lX3R4ID0gT01BUDQ0WFhfRE1BX01NQzRfVFg7CisJCWhvc3QtPmRtYV9saW5lX3J4ID0gT01BUDQ0WFhfRE1BX01NQzRfUlg7CisJCWJyZWFrOworCWNhc2UgT01BUF9NTUM1X0RFVklEOgorCQlob3N0LT5kbWFfbGluZV90eCA9IE9NQVA0NFhYX0RNQV9NTUM1X1RYOworCQlob3N0LT5kbWFfbGluZV9yeCA9IE9NQVA0NFhYX0RNQV9NTUM1X1JYOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkludmFsaWQgTU1DIGlkXG4iKTsKIAkJZ290byBlcnJfaXJxOwogCX0KIAogCS8qIFJlcXVlc3QgSVJRIGZvciBNTUMgb3BlcmF0aW9ucyAqLwotCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgbW1jX29tYXBfaXJxLCBJUlFGX0RJU0FCTEVELAorCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgb21hcF9oc21tY19pcnEsIElSUUZfRElTQUJMRUQsCiAJCQltbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7CiAJaWYgKHJldCkgewogCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVuYWJsZSB0byBncmFiIEhTTU1DIElSUVxuIik7CkBAIC0xMTEyLDcgKzE3ODQsOCBAQAogCS8qIGluaXRpYWxpemUgcG93ZXIgc3VwcGxpZXMsIGdwaW9zLCBldGMgKi8KIAlpZiAocGRhdGEtPmluaXQgIT0gTlVMTCkgewogCQlpZiAocGRhdGEtPmluaXQoJnBkZXYtPmRldikgIT0gMCkgewotCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJsYXRlIGluaXQgZXJyb3JcbiIpOworCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkJIlVuYWJsZSB0byBjb25maWd1cmUgTU1DIElSUXNcbiIpOwogCQkJZ290byBlcnJfaXJxX2NkX2luaXQ7CiAJCX0KIAl9CkBAIC0xMTIxLDcgKzE3OTQsNyBAQAogCS8qIFJlcXVlc3QgSVJRIGZvciBjYXJkIGRldGVjdCAqLwogCWlmICgobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxKSkgewogCQlyZXQgPSByZXF1ZXN0X2lycShtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEsCi0JCQkJICBvbWFwX21tY19jZF9oYW5kbGVyLAorCQkJCSAgb21hcF9oc21tY19jZF9oYW5kbGVyLAogCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HCiAJCQkJCSAgfCBJUlFGX0RJU0FCTEVELAogCQkJCSAgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpOwpAQCAtMTEzNSwyMSArMTgwOCwyNiBAQAogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSVNFLCBJTlRfRU5fTUFTSyk7CiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJRSwgSU5UX0VOX01BU0spOwogCisJbW1jX2hvc3RfbGF6eV9kaXNhYmxlKGhvc3QtPm1tYyk7CisKKwlvbWFwX2hzbW1jX3Byb3RlY3RfY2FyZChob3N0KTsKKwogCW1tY19hZGRfaG9zdChtbWMpOwogCi0JaWYgKGhvc3QtPnBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS5uYW1lICE9IE5VTEwpIHsKKwlpZiAobW1jX3Nsb3QoaG9zdCkubmFtZSAhPSBOVUxMKSB7CiAJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbW1jLT5jbGFzc19kZXYsICZkZXZfYXR0cl9zbG90X25hbWUpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX3Nsb3RfbmFtZTsKIAl9Ci0JaWYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSAmJgotCSAgICBob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0uZ2V0X2NvdmVyX3N0YXRlKSB7CisJaWYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSAmJiBtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUpIHsKIAkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZtbWMtPmNsYXNzX2RldiwKIAkJCQkJJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnJfY292ZXJfc3dpdGNoOwogCX0KIAorCW9tYXBfaHNtbWNfZGVidWdmcyhtbWMpOworCiAJcmV0dXJuIDA7CiAKIGVycl9jb3Zlcl9zd2l0Y2g6CkBAIC0xMTYxLDExICsxODM5LDExIEBACiBlcnJfaXJxX2NkX2luaXQ6CiAJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIGVycl9pcnE6Ci0JY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CisJbW1jX2hvc3RfZGlzYWJsZShob3N0LT5tbWMpOwogCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwogCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAJY2xrX3B1dChob3N0LT5pY2xrKTsKLQlpZiAoaG9zdC0+ZGJjbGtfZW5hYmxlZCkgeworCWlmIChob3N0LT5nb3RfZGJjbGspIHsKIAkJY2xrX2Rpc2FibGUoaG9zdC0+ZGJjbGspOwogCQljbGtfcHV0KGhvc3QtPmRiY2xrKTsKIAl9CkBAIC0xMTgwLDEyICsxODU4LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvbWFwX21tY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgb21hcF9oc21tY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWlmIChob3N0KSB7CisJCW1tY19ob3N0X2VuYWJsZShob3N0LT5tbWMpOwogCQltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKIAkJaWYgKGhvc3QtPnBkYXRhLT5jbGVhbnVwKQogCQkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CkBAIC0xMTk0LDExICsxODczLDExIEBACiAJCQlmcmVlX2lycShtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEsIGhvc3QpOwogCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCQltbWNfaG9zdF9kaXNhYmxlKGhvc3QtPm1tYyk7CiAJCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwogCQljbGtfcHV0KGhvc3QtPmZjbGspOwogCQljbGtfcHV0KGhvc3QtPmljbGspOwotCQlpZiAoaG9zdC0+ZGJjbGtfZW5hYmxlZCkgeworCQlpZiAoaG9zdC0+Z290X2RiY2xrKSB7CiAJCQljbGtfZGlzYWJsZShob3N0LT5kYmNsayk7CiAJCQljbGtfcHV0KGhvc3QtPmRiY2xrKTsKIAkJfQpAQCAtMTIxNiwzNiArMTg5NSw1MSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG9tYXBfbW1jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBvbWFwX2hzbW1jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKGhvc3QgJiYgaG9zdC0+c3VzcGVuZGVkKQogCQlyZXR1cm4gMDsKIAogCWlmIChob3N0KSB7CisJCWhvc3QtPnN1c3BlbmRlZCA9IDE7CisJCWlmIChob3N0LT5wZGF0YS0+c3VzcGVuZCkgeworCQkJcmV0ID0gaG9zdC0+cGRhdGEtPnN1c3BlbmQoJnBkZXYtPmRldiwKKwkJCQkJCQlob3N0LT5zbG90X2lkKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkJIlVuYWJsZSB0byBoYW5kbGUgTU1DIGJvYXJkIgorCQkJCQkiIGxldmVsIHN1c3BlbmRcbiIpOworCQkJCWhvc3QtPnN1c3BlbmRlZCA9IDA7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCQljYW5jZWxfd29ya19zeW5jKCZob3N0LT5tbWNfY2FyZGRldGVjdF93b3JrKTsKKwkJbW1jX2hvc3RfZW5hYmxlKGhvc3QtPm1tYyk7CiAJCXJldCA9IG1tY19zdXNwZW5kX2hvc3QoaG9zdC0+bW1jLCBzdGF0ZSk7CiAJCWlmIChyZXQgPT0gMCkgewotCQkJaG9zdC0+c3VzcGVuZGVkID0gMTsKLQogCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJU0UsIDApOwogCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJRSwgMCk7CiAKLQkJCWlmIChob3N0LT5wZGF0YS0+c3VzcGVuZCkgewotCQkJCXJldCA9IGhvc3QtPnBkYXRhLT5zdXNwZW5kKCZwZGV2LT5kZXYsCi0JCQkJCQkJCWhvc3QtPnNsb3RfaWQpOwotCQkJCWlmIChyZXQpCi0JCQkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAotCQkJCQkJIlVuYWJsZSB0byBoYW5kbGUgTU1DIGJvYXJkIgotCQkJCQkJIiBsZXZlbCBzdXNwZW5kXG4iKTsKLQkJCX0KIAogCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAotCQkJCQkgT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgflNEQlApOwotCQkJY2xrX2Rpc2FibGUoaG9zdC0+ZmNsayk7CisJCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgflNEQlApOworCQkJbW1jX2hvc3RfZGlzYWJsZShob3N0LT5tbWMpOwogCQkJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7Ci0JCQljbGtfZGlzYWJsZShob3N0LT5kYmNsayk7CisJCQlpZiAoaG9zdC0+Z290X2RiY2xrKQorCQkJCWNsa19kaXNhYmxlKGhvc3QtPmRiY2xrKTsKKwkJfSBlbHNlIHsKKwkJCWhvc3QtPnN1c3BlbmRlZCA9IDA7CisJCQlpZiAoaG9zdC0+cGRhdGEtPnJlc3VtZSkgeworCQkJCXJldCA9IGhvc3QtPnBkYXRhLT5yZXN1bWUoJnBkZXYtPmRldiwKKwkJCQkJCQkgIGhvc3QtPnNsb3RfaWQpOworCQkJCWlmIChyZXQpCisJCQkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAorCQkJCQkJIlVubWFzayBpbnRlcnJ1cHQgZmFpbGVkXG4iKTsKKwkJCX0KKwkJCW1tY19ob3N0X2Rpc2FibGUoaG9zdC0+bW1jKTsKIAkJfQogCiAJfQpAQCAtMTI1MywzMiArMTk0NywyOCBAQAogfQogCiAvKiBSb3V0aW5lIHRvIHJlc3VtZSB0aGUgTU1DIGRldmljZSAqLwotc3RhdGljIGludCBvbWFwX21tY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgb21hcF9oc21tY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChob3N0ICYmICFob3N0LT5zdXNwZW5kZWQpCiAJCXJldHVybiAwOwogCiAJaWYgKGhvc3QpIHsKLQotCQlyZXQgPSBjbGtfZW5hYmxlKGhvc3QtPmZjbGspOworCQlyZXQgPSBjbGtfZW5hYmxlKGhvc3QtPmljbGspOwogCQlpZiAocmV0KQogCQkJZ290byBjbGtfZW5fZXJyOwogCi0JCXJldCA9IGNsa19lbmFibGUoaG9zdC0+aWNsayk7Ci0JCWlmIChyZXQpIHsKLQkJCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOwotCQkJY2xrX3B1dChob3N0LT5mY2xrKTsKKwkJaWYgKG1tY19ob3N0X2VuYWJsZShob3N0LT5tbWMpICE9IDApIHsKKwkJCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwogCQkJZ290byBjbGtfZW5fZXJyOwogCQl9CiAKLQkJaWYgKGNsa19lbmFibGUoaG9zdC0+ZGJjbGspICE9IDApCi0JCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJCQkJIkVuYWJsaW5nIGRlYm91bmNlIGNsayBmYWlsZWRcbiIpOworCQlpZiAoaG9zdC0+Z290X2RiY2xrKQorCQkJY2xrX2VuYWJsZShob3N0LT5kYmNsayk7CiAKLQkJb21hcF9oc21tY19pbml0KGhvc3QpOworCQlvbWFwX2hzbW1jX2NvbmZfYnVzX3Bvd2VyKGhvc3QpOwogCiAJCWlmIChob3N0LT5wZGF0YS0+cmVzdW1lKSB7CiAJCQlyZXQgPSBob3N0LT5wZGF0YS0+cmVzdW1lKCZwZGV2LT5kZXYsIGhvc3QtPnNsb3RfaWQpOwpAQCAtMTI4NywxMCArMTk3NywxNCBAQAogCQkJCQkiVW5tYXNrIGludGVycnVwdCBmYWlsZWRcbiIpOwogCQl9CiAKKwkJb21hcF9oc21tY19wcm90ZWN0X2NhcmQoaG9zdCk7CisKIAkJLyogTm90aWZ5IHRoZSBjb3JlIHRvIHJlc3VtZSB0aGUgaG9zdCAqLwogCQlyZXQgPSBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKIAkJaWYgKHJldCA9PSAwKQogCQkJaG9zdC0+c3VzcGVuZGVkID0gMDsKKworCQltbWNfaG9zdF9sYXp5X2Rpc2FibGUoaG9zdC0+bW1jKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTMwMiwzNSArMTk5NiwzNCBAQAogfQogCiAjZWxzZQotI2RlZmluZSBvbWFwX21tY19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgb21hcF9tbWNfcmVzdW1lCQlOVUxMCisjZGVmaW5lIG9tYXBfaHNtbWNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIG9tYXBfaHNtbWNfcmVzdW1lCQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9tbWNfZHJpdmVyID0gewotCS5wcm9iZQkJPSBvbWFwX21tY19wcm9iZSwKLQkucmVtb3ZlCQk9IG9tYXBfbW1jX3JlbW92ZSwKLQkuc3VzcGVuZAk9IG9tYXBfbW1jX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBvbWFwX21tY19yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2hzbW1jX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IG9tYXBfaHNtbWNfcmVtb3ZlLAorCS5zdXNwZW5kCT0gb21hcF9oc21tY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gb21hcF9oc21tY19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lID0gRFJJVkVSX05BTUUsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX21tY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX2luaXQodm9pZCkKIHsKIAkvKiBSZWdpc3RlciB0aGUgTU1DIGRyaXZlciAqLwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfbW1jX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9oc21tY19kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgb21hcF9tbWNfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG9tYXBfaHNtbWNfY2xlYW51cCh2b2lkKQogewogCS8qIFVucmVnaXN0ZXIgTU1DIGRyaXZlciAqLwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwX21tY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwX2hzbW1jX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0KG9tYXBfbW1jX2luaXQpOwotbW9kdWxlX2V4aXQob21hcF9tbWNfY2xlYW51cCk7Cittb2R1bGVfaW5pdChvbWFwX2hzbW1jX2luaXQpOworbW9kdWxlX2V4aXQob21hcF9oc21tY19jbGVhbnVwKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIEhpZ2ggU3BlZWQgTXVsdGltZWRpYSBDYXJkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jCmluZGV4IDFlOGFhNTkwLi4wMWFiOTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlICJzZGhjaS5oIgogCiBzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSB7CkBAIC00OCw2ICs0OSw4IEBACiAjZGVmaW5lIEVTREhDX0NMT0NLX0hDS0VOCTB4MDAwMDAwMDIKICNkZWZpbmUgRVNESENfQ0xPQ0tfSVBHRU4JMHgwMDAwMDAwMQogCisjZGVmaW5lIEVTREhDX0hPU1RfQ09OVFJPTF9SRVMJMHgwNQorCiBzdGF0aWMgdTMyIGVzZGhjX3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQogewogCXJldHVybiBpbl9iZTMyKGhvc3QtPmlvYWRkciArIHJlZyk7CkBAIC0xMDksMTMgKzExMiwxNyBAQAogCWludCBiYXNlID0gcmVnICYgfjB4MzsKIAlpbnQgc2hpZnQgPSAocmVnICYgMHgzKSAqIDg7CiAKKwkvKiBQcmV2ZW50IFNESENJIGNvcmUgZnJvbSB3cml0aW5nIHJlc2VydmVkIGJpdHMgKGUuZy4gSElTUEQpLiAqLworCWlmIChyZWcgPT0gU0RIQ0lfSE9TVF9DT05UUk9MKQorCQl2YWwgJj0gfkVTREhDX0hPU1RfQ09OVFJPTF9SRVM7CisKIAljbHJzZXRiaXRzX2JlMzIoaG9zdC0+aW9hZGRyICsgYmFzZSAsIDB4ZmYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGVzZGhjX3NldF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGNsb2NrKQogewotCWludCBkaXY7CiAJaW50IHByZV9kaXYgPSAyOworCWludCBkaXYgPSAxOwogCiAJY2xyYml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX1NZU1RFTV9DT05UUk9MLCBFU0RIQ19DTE9DS19JUEdFTiB8CiAJCSAgRVNESENfQ0xPQ0tfSENLRU4gfCBFU0RIQ19DTE9DS19QRVJFTiB8IEVTREhDX0NMT0NLX01BU0spOwpAQCAtMTIzLDE5ICsxMzAsMTcgQEAKIAlpZiAoY2xvY2sgPT0gMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoaG9zdC0+bWF4X2NsayAvIDE2ID4gY2xvY2spIHsKLQkJZm9yICg7IHByZV9kaXYgPCAyNTY7IHByZV9kaXYgKj0gMikgewotCQkJaWYgKGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IDwgY2xvY2sgKiAxNikKLQkJCQlicmVhazsKLQkJfQotCX0KKwl3aGlsZSAoaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyAxNiA+IGNsb2NrICYmIHByZV9kaXYgPCAyNTYpCisJCXByZV9kaXYgKj0gMjsKIAotCWZvciAoZGl2ID0gMTsgZGl2IDw9IDE2OyBkaXYrKykgewotCQlpZiAoaG9zdC0+bWF4X2NsayAvIChkaXYgKiBwcmVfZGl2KSA8PSBjbG9jaykKLQkJCWJyZWFrOwotCX0KKwl3aGlsZSAoaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyBkaXYgPiBjbG9jayAmJiBkaXYgPCAxNikKKwkJZGl2Kys7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImRlc2lyZWQgU0QgY2xvY2s6ICVkLCBhY3R1YWw6ICVkXG4iLAorCQljbG9jaywgaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyBkaXYpOwogCiAJcHJlX2RpdiA+Pj0gMTsKKwlkaXYtLTsKIAogCXNldGJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19TWVNURU1fQ09OVFJPTCwgRVNESENfQ0xPQ0tfSVBHRU4gfAogCQkgIEVTREhDX0NMT0NLX0hDS0VOIHwgRVNESENfQ0xPQ0tfUEVSRU4gfApAQCAtMTY1LDE5ICsxNzAsMTIgQEAKIAlyZXR1cm4gb2ZfaG9zdC0+Y2xvY2sgLyAyNTYgLyAxNjsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19nZXRfdGltZW91dF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7Ci0KLQlyZXR1cm4gb2ZfaG9zdC0+Y2xvY2sgLyAxMDAwOwotfQotCiBzdGF0aWMgc3RydWN0IHNkaGNpX29mX2RhdGEgc2RoY2lfZXNkaGMgPSB7CiAJLnF1aXJrcyA9IFNESENJX1FVSVJLX0ZPUkNFX0JMS19TWl8yMDQ4IHwKIAkJICBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04gfAotCQkgIFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1QgfAogCQkgIFNESENJX1FVSVJLX05PX0JVU1lfSVJRIHwKIAkJICBTREhDSV9RVUlSS19OT05TVEFOREFSRF9DTE9DSyB8CisJCSAgU0RIQ0lfUVVJUktfREFUQV9USU1FT1VUX1VTRVNfU0RDTEsgfAogCQkgIFNESENJX1FVSVJLX1BJT19ORUVEU19ERUxBWSB8CiAJCSAgU0RIQ0lfUVVJUktfUkVTVE9SRV9JUlFTX0FGVEVSX1JFU0VUIHwKIAkJICBTREhDSV9RVUlSS19OT19DQVJEX05PX1JFU0VULApAQCAtMTkyLDcgKzE5MCw2IEBACiAJCS5lbmFibGVfZG1hID0gZXNkaGNfZW5hYmxlX2RtYSwKIAkJLmdldF9tYXhfY2xvY2sgPSBlc2RoY19nZXRfbWF4X2Nsb2NrLAogCQkuZ2V0X21pbl9jbG9jayA9IGVzZGhjX2dldF9taW5fY2xvY2ssCi0JCS5nZXRfdGltZW91dF9jbG9jayA9IGVzZGhjX2dldF90aW1lb3V0X2Nsb2NrLAogCX0sCiB9OwogCkBAIC0yMTksNiArMjE2LDE1IEBACiAKICNlbmRpZgogCitzdGF0aWMgYm9vbCBfX2RldmluaXQgc2RoY2lfb2Zfd3BfaW52ZXJ0ZWQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic2RoY2ksd3AtaW52ZXJ0ZWQiLCBOVUxMKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBPbGQgZGV2aWNlIHRyZWVzIGRvbid0IGhhdmUgdGhlIHdwLWludmVydGVkIHByb3BlcnR5LiAqLworCXJldHVybiBtYWNoaW5lX2lzKG1wYzgzN3hfcmRiKSB8fCBtYWNoaW5lX2lzKG1wYzgzN3hfbWRzKTsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgc2RoY2lfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCiAJCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewpAQCAtMjYxLDYgKzI2Nyw5IEBACiAJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgInNkaGNpLDEtYml0LW9ubHkiLCBOVUxMKSkKIAkJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0ZPUkNFXzFfQklUX0RBVEE7CiAKKwlpZiAoc2RoY2lfb2Zfd3BfaW52ZXJ0ZWQobnApKQorCQlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfSU5WRVJURURfV1JJVEVfUFJPVEVDVDsKKwogCWNsayA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZzaXplKTsKIAlpZiAoY2xrICYmIHNpemUgPT0gc2l6ZW9mKCpjbGspICYmICpjbGspCiAJCW9mX2hvc3QtPmNsb2NrID0gKmNsazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IDJmMTVjYzEuLmUwMzU2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtODMsNyArODMsOCBAQAogCWlmIChjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfSUJNKQogCQljaGlwLT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfQ0xPQ0tfQkVGT1JFX1JFU0VUOwogCi0JaWYgKGNoaXAtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9TQU1TVU5HKQorCWlmIChjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0FNU1VORyB8fAorCSAgICBjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU09OWSkKIAkJY2hpcC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX05PX0NBUkRfTk9fUkVTRVQ7CiAKIAlyZXR1cm4gMDsKQEAgLTM5NSw3ICszOTYsNyBAQAogCiAJaWYgKCgocGRldi0+Y2xhc3MgJiAweEZGRkYwMCkgPT0gKFBDSV9DTEFTU19TWVNURU1fU0RIQ0kgPDwgOCkpICYmCiAJCSgocGRldi0+Y2xhc3MgJiAweDAwMDBGRikgIT0gUENJX1NESENJX0lGRE1BKSAmJgotCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKSkgeworCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfU0RNQSkpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIldpbGwgdXNlIERNQSBtb2RlIGV2ZW4gdGhvdWdoIEhXICIKIAkJCSJkb2Vzbid0IGZ1bGx5IGNsYWltIHRvIHN1cHBvcnQgaXQuXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggZmM5NmY4Yy4uYzI3OWZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtNTkxLDYgKzU5MSw5IEBACiAJdGFyZ2V0X3RpbWVvdXQgPSBkYXRhLT50aW1lb3V0X25zIC8gMTAwMCArCiAJCWRhdGEtPnRpbWVvdXRfY2xrcyAvIGhvc3QtPmNsb2NrOwogCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0RBVEFfVElNRU9VVF9VU0VTX1NEQ0xLKQorCQlob3N0LT50aW1lb3V0X2NsayA9IGhvc3QtPmNsb2NrIC8gMTAwMDsKKwogCS8qCiAJICogRmlndXJlIG91dCBuZWVkZWQgY3ljbGVzLgogCSAqIFdlIGRvIHRoaXMgaW4gc3RlcHMgaW4gb3JkZXIgdG8gZml0IGluc2lkZSBhIDMyIGJpdCBpbnQuCkBAIC02NTIsNyArNjU1LDcgQEAKIAljb3VudCA9IHNkaGNpX2NhbGNfdGltZW91dChob3N0LCBkYXRhKTsKIAlzZGhjaV93cml0ZWIoaG9zdCwgY291bnQsIFNESENJX1RJTUVPVVRfQ09OVFJPTCk7CiAKLQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKQorCWlmIChob3N0LT5mbGFncyAmIChTREhDSV9VU0VfU0RNQSB8IFNESENJX1VTRV9BRE1BKSkKIAkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfUkVRX1VTRV9ETUE7CiAKIAkvKgpAQCAtOTkxLDggKzk5NCw4IEBACiAJY2xrIHw9IFNESENJX0NMT0NLX0lOVF9FTjsKIAlzZGhjaV93cml0ZXcoaG9zdCwgY2xrLCBTREhDSV9DTE9DS19DT05UUk9MKTsKIAotCS8qIFdhaXQgbWF4IDEwIG1zICovCi0JdGltZW91dCA9IDEwOworCS8qIFdhaXQgbWF4IDIwIG1zICovCisJdGltZW91dCA9IDIwOwogCXdoaWxlICghKChjbGsgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9DTE9DS19DT05UUk9MKSkKIAkJJiBTREhDSV9DTE9DS19JTlRfU1RBQkxFKSkgewogCQlpZiAodGltZW91dCA9PSAwKSB7CkBAIC0xNTk3LDcgKzE2MDAsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKSB7CisJaWYgKGhvc3QtPmZsYWdzICYgKFNESENJX1VTRV9TRE1BIHwgU0RIQ0lfVVNFX0FETUEpKSB7CiAJCWlmIChob3N0LT5vcHMtPmVuYWJsZV9kbWEpCiAJCQlob3N0LT5vcHMtPmVuYWJsZV9kbWEoaG9zdCk7CiAJfQpAQCAtMTY3OCwyMyArMTY4MSwyMCBAQAogCWNhcHMgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9DQVBBQklMSVRJRVMpOwogCiAJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0ZPUkNFX0RNQSkKLQkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfVVNFX0RNQTsKLQllbHNlIGlmICghKGNhcHMgJiBTREhDSV9DQU5fRE9fRE1BKSkKLQkJREJHKCJDb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBETUEgY2FwYWJpbGl0eVxuIik7CisJCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9TRE1BOworCWVsc2UgaWYgKCEoY2FwcyAmIFNESENJX0NBTl9ET19TRE1BKSkKKwkJREJHKCJDb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBTRE1BIGNhcGFiaWxpdHlcbiIpOwogCWVsc2UKLQkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfVVNFX0RNQTsKKwkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfVVNFX1NETUE7CiAKIAlpZiAoKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0JST0tFTl9ETUEpICYmCi0JCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpKSB7CisJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9TRE1BKSkgewogCQlEQkcoIkRpc2FibGluZyBETUEgYXMgaXQgaXMgbWFya2VkIGJyb2tlblxuIik7Ci0JCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfRE1BOworCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX1NETUE7CiAJfQogCi0JaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkgewotCQlpZiAoKGhvc3QtPnZlcnNpb24gPj0gU0RIQ0lfU1BFQ18yMDApICYmCi0JCQkJKGNhcHMgJiBTREhDSV9DQU5fRE9fQURNQTIpKQotCQkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfVVNFX0FETUE7Ci0JfQorCWlmICgoaG9zdC0+dmVyc2lvbiA+PSBTREhDSV9TUEVDXzIwMCkgJiYgKGNhcHMgJiBTREhDSV9DQU5fRE9fQURNQTIpKQorCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfQURNQTsKIAogCWlmICgoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQlJPS0VOX0FETUEpICYmCiAJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKSkgewpAQCAtMTcwMiwxMyArMTcwMiwxNCBAQAogCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX0FETUE7CiAJfQogCi0JaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkgeworCWlmIChob3N0LT5mbGFncyAmIChTREhDSV9VU0VfU0RNQSB8IFNESENJX1VTRV9BRE1BKSkgewogCQlpZiAoaG9zdC0+b3BzLT5lbmFibGVfZG1hKSB7CiAJCQlpZiAoaG9zdC0+b3BzLT5lbmFibGVfZG1hKGhvc3QpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHN1aXRhYmxlIERNQSAiCiAJCQkJCSJhdmFpbGFibGUuIEZhbGxpbmcgYmFjayB0byBQSU8uXG4iLAogCQkJCQltbWNfaG9zdG5hbWUobW1jKSk7Ci0JCQkJaG9zdC0+ZmxhZ3MgJj0gfihTREhDSV9VU0VfRE1BIHwgU0RIQ0lfVVNFX0FETUEpOworCQkJCWhvc3QtPmZsYWdzICY9CisJCQkJCX4oU0RIQ0lfVVNFX1NETUEgfCBTREhDSV9VU0VfQURNQSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNzM2LDcgKzE3MzcsNyBAQAogCSAqIG1hc2ssIGJ1dCBQSU8gZG9lcyBub3QgbmVlZCB0aGUgaHcgc2hpbSBzbyB3ZSBzZXQgYSBuZXcKIAkgKiBtYXNrIGhlcmUgaW4gdGhhdCBjYXNlLgogCSAqLwotCWlmICghKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkpIHsKKwlpZiAoIShob3N0LT5mbGFncyAmIChTREhDSV9VU0VfU0RNQSB8IFNESENJX1VTRV9BRE1BKSkpIHsKIAkJaG9zdC0+ZG1hX21hc2sgPSBETUFfQklUX01BU0soNjQpOwogCQltbWNfZGV2KGhvc3QtPm1tYyktPmRtYV9tYXNrID0gJmhvc3QtPmRtYV9tYXNrOwogCX0KQEAgLTE3NTcsMTMgKzE3NTgsMTUgQEAKIAlob3N0LT50aW1lb3V0X2NsayA9CiAJCShjYXBzICYgU0RIQ0lfVElNRU9VVF9DTEtfTUFTSykgPj4gU0RIQ0lfVElNRU9VVF9DTEtfU0hJRlQ7CiAJaWYgKGhvc3QtPnRpbWVvdXRfY2xrID09IDApIHsKLQkJaWYgKCFob3N0LT5vcHMtPmdldF90aW1lb3V0X2Nsb2NrKSB7CisJCWlmIChob3N0LT5vcHMtPmdldF90aW1lb3V0X2Nsb2NrKSB7CisJCQlob3N0LT50aW1lb3V0X2NsayA9IGhvc3QtPm9wcy0+Z2V0X3RpbWVvdXRfY2xvY2soaG9zdCk7CisJCX0gZWxzZSBpZiAoIShob3N0LT5xdWlya3MgJgorCQkJCVNESENJX1FVSVJLX0RBVEFfVElNRU9VVF9VU0VTX1NEQ0xLKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIiVzOiBIYXJkd2FyZSBkb2Vzbid0IHNwZWNpZnkgdGltZW91dCBjbG9jayAiCiAJCQkgICAgICAgImZyZXF1ZW5jeS5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWhvc3QtPnRpbWVvdXRfY2xrID0gaG9zdC0+b3BzLT5nZXRfdGltZW91dF9jbG9jayhob3N0KTsKIAl9CiAJaWYgKGNhcHMgJiBTREhDSV9USU1FT1VUX0NMS19VTklUKQogCQlob3N0LT50aW1lb3V0X2NsayAqPSAxMDAwOwpAQCAtMTc3Miw3ICsxNzc1LDggQEAKIAkgKiBTZXQgaG9zdCBwYXJhbWV0ZXJzLgogCSAqLwogCW1tYy0+b3BzID0gJnNkaGNpX29wczsKLQlpZiAoaG9zdC0+b3BzLT5nZXRfbWluX2Nsb2NrKQorCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19OT05TVEFOREFSRF9DTE9DSyAmJgorCQkJaG9zdC0+b3BzLT5zZXRfY2xvY2sgJiYgaG9zdC0+b3BzLT5nZXRfbWluX2Nsb2NrKQogCQltbWMtPmZfbWluID0gaG9zdC0+b3BzLT5nZXRfbWluX2Nsb2NrKGhvc3QpOwogCWVsc2UKIAkJbW1jLT5mX21pbiA9IGhvc3QtPm1heF9jbGsgLyAyNTY7CkBAIC0xODEwLDcgKzE4MTQsNyBAQAogCSAqLwogCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKQogCQltbWMtPm1heF9od19zZWdzID0gMTI4OwotCWVsc2UgaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkKKwllbHNlIGlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9TRE1BKQogCQltbWMtPm1heF9od19zZWdzID0gMTsKIAllbHNlIC8qIFBJTyAqLwogCQltbWMtPm1heF9od19zZWdzID0gMTI4OwpAQCAtMTg5MywxMCArMTg5NywxMCBAQAogCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogU0RIQ0kgY29udHJvbGxlciBvbiAlcyBbJXNdIHVzaW5nICVzJXNcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNESENJIGNvbnRyb2xsZXIgb24gJXMgWyVzXSB1c2luZyAlc1xuIiwKIAkJbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QtPmh3X25hbWUsIGRldl9uYW1lKG1tY19kZXYobW1jKSksCi0JCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKT8iQSI6IiIsCi0JCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpPyJETUEiOiJQSU8iKTsKKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpID8gIkFETUEiIDoKKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX1NETUEpID8gIkRNQSIgOiAiUElPIik7CiAKIAlzZGhjaV9lbmFibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCBjNzdlOWZmLi5jZTVmMWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC0xNDMsNyArMTQzLDcgQEAKICNkZWZpbmUgIFNESENJX0NBTl9ET19BRE1BMgkweDAwMDgwMDAwCiAjZGVmaW5lICBTREhDSV9DQU5fRE9fQURNQTEJMHgwMDEwMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOX0RPX0hJU1BECTB4MDAyMDAwMDAKLSNkZWZpbmUgIFNESENJX0NBTl9ET19ETUEJMHgwMDQwMDAwMAorI2RlZmluZSAgU0RIQ0lfQ0FOX0RPX1NETUEJMHgwMDQwMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8zMzAJMHgwMTAwMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8zMDAJMHgwMjAwMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8xODAJMHgwNDAwMDAwMApAQCAtMjMyLDYgKzIzMiw4IEBACiAjZGVmaW5lIFNESENJX1FVSVJLX0ZPUkNFXzFfQklUX0RBVEEJCQkoMTw8MjIpCiAvKiBDb250cm9sbGVyIG5lZWRzIDEwbXMgZGVsYXkgYmV0d2VlbiBhcHBseWluZyBwb3dlciBhbmQgY2xvY2sgKi8KICNkZWZpbmUgU0RIQ0lfUVVJUktfREVMQVlfQUZURVJfUE9XRVIJCQkoMTw8MjMpCisvKiBDb250cm9sbGVyIHVzZXMgU0RDTEsgaW5zdGVhZCBvZiBUTUNMSyBmb3IgZGF0YSB0aW1lb3V0cyAqLworI2RlZmluZSBTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSwkJKDE8PDI0KQogCiAJaW50CQkJaXJxOwkJLyogRGV2aWNlIElSUSAqLwogCXZvaWQgX19pb21lbSAqCQlpb2FkZHI7CQkvKiBNYXBwZWQgYWRkcmVzcyAqLwpAQCAtMjUwLDcgKzI1Miw3IEBACiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIE11dGV4ICovCiAKIAlpbnQJCQlmbGFnczsJCS8qIEhvc3QgYXR0cmlidXRlcyAqLwotI2RlZmluZSBTREhDSV9VU0VfRE1BCQkoMTw8MCkJCS8qIEhvc3QgaXMgRE1BIGNhcGFibGUgKi8KKyNkZWZpbmUgU0RIQ0lfVVNFX1NETUEJCSgxPDwwKQkJLyogSG9zdCBpcyBTRE1BIGNhcGFibGUgKi8KICNkZWZpbmUgU0RIQ0lfVVNFX0FETUEJCSgxPDwxKQkJLyogSG9zdCBpcyBBRE1BIGNhcGFibGUgKi8KICNkZWZpbmUgU0RIQ0lfUkVRX1VTRV9ETUEJKDE8PDIpCQkvKiBVc2UgRE1BIGZvciB0aGlzIHJlcS4gKi8KICNkZWZpbmUgU0RIQ0lfREVWSUNFX0RFQUQJKDE8PDMpCQkvKiBEZXZpY2UgdW5yZXNwb25zaXZlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCAwMDM1NTg2Li4zNzljMzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTkwOSwxMyArOTA5LDEzIEBACiB9OwogCiAKLXN0YXRpYyBpbnQgbTI1cDgwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG0yNXA4MF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJm0yNXA4MF9kcml2ZXIpOwogfQogCiAKLXN0YXRpYyB2b2lkIG0yNXA4MF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbTI1cDgwX2V4aXQodm9pZCkKIHsKIAlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJm0yNXA4MF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwppbmRleCA3MGE3MzY5Li45M2UzNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwpAQCAtOTY2LDMgKzk2Niw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJBbmRyZXcgVmljdG9yLCBEYXZpZCBCcm93bmVsbCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgRGF0YUZsYXNoIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJzcGk6bXRkX2RhdGFmbGFzaCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jCmluZGV4IDIzOTUwMGIuLjNhYTA1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBpbml0X3NscmFtKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3NscmFtKHZvaWQpCiB7CiAJY2hhciAqZGV2bmFtZTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2Z0bC5jIGIvZHJpdmVycy9tdGQvZnRsLmMKaW5kZXggYTc5MGMwNi4uZTU2ZDZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZnRsLmMKKysrIGIvZHJpdmVycy9tdGQvZnRsLmMKQEAgLTEwOTksNyArMTA5OSw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGludCBpbml0X2Z0bCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5pdF9mdGwodm9pZCkKIHsKIAlyZXR1cm4gcmVnaXN0ZXJfbXRkX2Jsa3RyYW5zKCZmdGxfdHIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwppbmRleCBkNGZiOWEzLi4xYmRmMGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaW5mby0+bWFwLmJhbmt3aWR0aCA9IDE7CiAKIAkvKgotIAkgKiBtYXBfcHJpdl8yIGlzIHVzZWQgdG8gc3RvcmUgYSBwdHIgdG8gdG8gdGhlIGJhbmtfc2V0dXAgcm91dGluZQorIAkgKiBtYXBfcHJpdl8yIGlzIHVzZWQgdG8gc3RvcmUgYSBwdHIgdG8gdGhlIGJhbmtfc2V0dXAgcm91dGluZQogIAkgKi8KIAlpbmZvLT5tYXAubWFwX3ByaXZfMiA9ICh1bnNpZ25lZCBsb25nKSBpeHBfZGF0YS0+YmFua19zZXR1cDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKaW5kZXggN2JhYmE0MC4uMGFjYmY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYworKysgYi9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbXRkX2Jsa3RyYW5zX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbXRkX2Jsa3RyYW5zX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gYmxrdHJhbnNfb3BlbiwKIAkucmVsZWFzZQk9IGJsa3RyYW5zX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9jYWZlX25hbmQuYwppbmRleCBhNzBmNDBlLi5jODI4ZDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9uYW5kLmMKQEAgLTkwMywxMiArOTAzLDEyIEBACiAJLnJlc3VtZSA9IGNhZmVfbmFuZF9yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IGNhZmVfbmFuZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjYWZlX25hbmRfaW5pdCh2b2lkKQogewogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjYWZlX25hbmRfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGNhZmVfbmFuZF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FmZV9uYW5kX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfbmFuZF9wY2lfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYwppbmRleCAxMDA4MWU2Li44MjZjYWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NteDI3MF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotc3RhdGljIGludCBjbXgyNzBfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY214MjcwX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZTsKQEAgLTI2MSw3ICsyNjEsNyBAQAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgY214MjcwX2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbXgyNzBfY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwogCW5hbmRfcmVsZWFzZShjbXgyNzBfbmFuZF9tdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmMgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwppbmRleCA1NGIwMTg2Li40ODc2OTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvZGVidWcuYworKysgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwpAQCAtMTk2LDQgKzE5NiwzNiBAQAogCXByaW50ayhLRVJOX0RFQlVHICJcdDFzdCAxNiBjaGFyYWN0ZXJzIG9mIG5hbWU6ICVzXG4iLCBubSk7CiB9CiAKKy8qKgorICogdWJpX2RiZ19kdW1wX2ZsYXNoIC0gZHVtcCBhIHJlZ2lvbiBvZiBmbGFzaC4KKyAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAcG51bTogdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgbnVtYmVyIHRvIGR1bXAKKyAqIEBvZmZzZXQ6IHRoZSBzdGFydGluZyBvZmZzZXQgd2l0aGluIHRoZSBwaHlzaWNhbCBlcmFzZWJsb2NrIHRvIGR1bXAKKyAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiB0byBkdW1wCisgKi8KK3ZvaWQgdWJpX2RiZ19kdW1wX2ZsYXNoKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQoreworCWludCBlcnI7CisJc2l6ZV90IHJlYWQ7CisJdm9pZCAqYnVmOworCWxvZmZfdCBhZGRyID0gKGxvZmZfdClwbnVtICogdWJpLT5wZWJfc2l6ZSArIG9mZnNldDsKKworCWJ1ZiA9IHZtYWxsb2MobGVuKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCWVyciA9IHViaS0+bXRkLT5yZWFkKHViaS0+bXRkLCBhZGRyLCBsZW4sICZyZWFkLCBidWYpOworCWlmIChlcnIgJiYgZXJyICE9IC1FVUNMRUFOKSB7CisJCXViaV9lcnIoImVycm9yICVkIHdoaWxlIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBQRUIgJWQ6JWQsICIKKwkJCSJyZWFkICV6ZCBieXRlcyIsIGVyciwgbGVuLCBwbnVtLCBvZmZzZXQsIHJlYWQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkYmdfbXNnKCJkdW1waW5nICVkIGJ5dGVzIG9mIGRhdGEgZnJvbSBQRUIgJWQsIG9mZnNldCAlZCIsCisJCWxlbiwgcG51bSwgb2Zmc2V0KTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAzMiwgMSwgYnVmLCBsZW4sIDEpOworb3V0OgorCXZmcmVlKGJ1Zik7CisJcmV0dXJuOworfQorCiAjZW5kaWYgLyogQ09ORklHX01URF9VQklfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9kZWJ1Zy5oIGIvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmgKaW5kZXggYTRkYTdhMC4uZjMwYmNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmgKKysrIGIvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmgKQEAgLTU1LDYgKzU1LDcgQEAKIHZvaWQgdWJpX2RiZ19kdW1wX3N2KGNvbnN0IHN0cnVjdCB1Ymlfc2Nhbl92b2x1bWUgKnN2KTsKIHZvaWQgdWJpX2RiZ19kdW1wX3NlYihjb25zdCBzdHJ1Y3QgdWJpX3NjYW5fbGViICpzZWIsIGludCB0eXBlKTsKIHZvaWQgdWJpX2RiZ19kdW1wX21rdm9sX3JlcShjb25zdCBzdHJ1Y3QgdWJpX21rdm9sX3JlcSAqcmVxKTsKK3ZvaWQgdWJpX2RiZ19kdW1wX2ZsYXNoKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKIAogI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX01TRwogLyogR2VuZXJhbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KQEAgLTE2Nyw2ICsxNjgsNyBAQAogI2RlZmluZSB1YmlfZGJnX2R1bXBfc3Yoc3YpICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIHViaV9kYmdfZHVtcF9zZWIoc2ViLCB0eXBlKSAgICAgICh7fSkKICNkZWZpbmUgdWJpX2RiZ19kdW1wX21rdm9sX3JlcShyZXEpICAgICAgKHt9KQorI2RlZmluZSB1YmlfZGJnX2R1bXBfZmxhc2godWJpLCBwbnVtLCBvZmZzZXQsIGxlbikgKHt9KQogCiAjZGVmaW5lIFVCSV9JT19ERUJVRyAgICAgICAgICAgICAgIDAKICNkZWZpbmUgREJHX0RJU0FCTEVfQkdUICAgICAgICAgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2ViYS5jIGIvZHJpdmVycy9tdGQvdWJpL2ViYS5jCmluZGV4IGU0ZDllZjAuLjlmODdjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9lYmEuYworKysgYi9kcml2ZXJzL210ZC91YmkvZWJhLmMKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAJfQogCiAJLyoKLQkgKiBOb3cgd2UgaGF2ZSBnb3QgdG8gY2FsY3VsYXRlIGhvdyBtdWNoIGRhdGEgd2UgaGF2ZSB0byB0byBjb3B5LiBJbgorCSAqIE5vdyB3ZSBoYXZlIGdvdCB0byBjYWxjdWxhdGUgaG93IG11Y2ggZGF0YSB3ZSBoYXZlIHRvIGNvcHkuIEluCiAJICogY2FzZSBvZiBhIHN0YXRpYyB2b2x1bWUgaXQgaXMgZmFpcmx5IGVhc3kgLSB0aGUgVklEIGhlYWRlciBjb250YWlucwogCSAqIHRoZSBkYXRhIHNpemUuIEluIGNhc2Ugb2YgYSBkeW5hbWljIHZvbHVtZSBpdCBpcyBtb3JlIGRpZmZpY3VsdCAtIHdlCiAJICogaGF2ZSB0byByZWFkIHRoZSBjb250ZW50cywgY3V0IDB4RkYgYnl0ZXMgZnJvbSB0aGUgZW5kIGFuZCBjb3B5IG9ubHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9pby5jIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKaW5kZXggNGNiNjk5Mi4uOGFhNTFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2lvLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKQEAgLTI2OSw2ICsyNjksNyBAQAogCQl1YmlfZXJyKCJlcnJvciAlZCB3aGlsZSB3cml0aW5nICVkIGJ5dGVzIHRvIFBFQiAlZDolZCwgd3JpdHRlbiAiCiAJCQkiJXpkIGJ5dGVzIiwgZXJyLCBsZW4sIHBudW0sIG9mZnNldCwgd3JpdHRlbik7CiAJCXViaV9kYmdfZHVtcF9zdGFjaygpOworCQl1YmlfZGJnX2R1bXBfZmxhc2godWJpLCBwbnVtLCBvZmZzZXQsIGxlbik7CiAJfSBlbHNlCiAJCXViaV9hc3NlcnQod3JpdHRlbiA9PSBsZW4pOwogCkBAIC00NzUsMzAgKzQ3Niw0NiBAQAogICovCiBzdGF0aWMgaW50IG5vcl9lcmFzZV9wcmVwYXJlKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtKQogewotCWludCBlcnI7CisJaW50IGVyciwgZXJyMTsKIAlzaXplX3Qgd3JpdHRlbjsKIAlsb2ZmX3QgYWRkcjsKIAl1aW50MzJfdCBkYXRhID0gMDsKKwlzdHJ1Y3QgdWJpX3ZpZF9oZHIgdmlkX2hkcjsKIAotCWFkZHIgPSAobG9mZl90KXBudW0gKiB1YmktPnBlYl9zaXplOworCWFkZHIgPSAobG9mZl90KXBudW0gKiB1YmktPnBlYl9zaXplICsgdWJpLT52aWRfaGRyX2Fsb2Zmc2V0OwogCWVyciA9IHViaS0+bXRkLT53cml0ZSh1YmktPm10ZCwgYWRkciwgNCwgJndyaXR0ZW4sICh2b2lkICopJmRhdGEpOwotCWlmIChlcnIpIHsKLQkJdWJpX2VycigiZXJyb3IgJWQgd2hpbGUgd3JpdGluZyA0IGJ5dGVzIHRvIFBFQiAlZDolZCwgd3JpdHRlbiAiCi0JCQkiJXpkIGJ5dGVzIiwgZXJyLCBwbnVtLCAwLCB3cml0dGVuKTsKLQkJdWJpX2RiZ19kdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBlcnI7CisJaWYgKCFlcnIpIHsKKwkJYWRkciAtPSB1YmktPnZpZF9oZHJfYWxvZmZzZXQ7CisJCWVyciA9IHViaS0+bXRkLT53cml0ZSh1YmktPm10ZCwgYWRkciwgNCwgJndyaXR0ZW4sCisJCQkJICAgICAgKHZvaWQgKikmZGF0YSk7CisJCWlmICghZXJyKQorCQkJcmV0dXJuIDA7CiAJfQogCi0JYWRkciArPSB1YmktPnZpZF9oZHJfYWxvZmZzZXQ7Ci0JZXJyID0gdWJpLT5tdGQtPndyaXRlKHViaS0+bXRkLCBhZGRyLCA0LCAmd3JpdHRlbiwgKHZvaWQgKikmZGF0YSk7Ci0JaWYgKGVycikgewotCQl1YmlfZXJyKCJlcnJvciAlZCB3aGlsZSB3cml0aW5nIDQgYnl0ZXMgdG8gUEVCICVkOiVkLCB3cml0dGVuICIKLQkJCSIlemQgYnl0ZXMiLCBlcnIsIHBudW0sIHViaS0+dmlkX2hkcl9hbG9mZnNldCwgd3JpdHRlbik7Ci0JCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gZXJyOwotCX0KKwkvKgorCSAqIFdlIGZhaWxlZCB0byB3cml0ZSB0byB0aGUgbWVkaWEuIFRoaXMgd2FzIG9ic2VydmVkIHdpdGggU3BhbnNpb24KKwkgKiBTMjlHTDUxMk4gTk9SIGZsYXNoLiBNb3N0IHByb2JhYmx5IHRoZSBlcmFzZWJsb2NrIGVyYXN1cmUgd2FzCisJICogaW50ZXJydXB0ZWQgYXQgYSB2ZXJ5IGluYXBwcm9wcmlhdGUgbW9tZW50LCBzbyBpdCBiZWNhbWUgdW53cml0YWJsZS4KKwkgKiBJbiB0aGlzIGNhc2Ugd2UgcHJvYmFibHkgYW55d2F5IGhhdmUgZ2FyYmFnZSBpbiB0aGlzIFBFQi4KKwkgKi8KKwllcnIxID0gdWJpX2lvX3JlYWRfdmlkX2hkcih1YmksIHBudW0sICZ2aWRfaGRyLCAwKTsKKwlpZiAoZXJyMSA9PSBVQklfSU9fQkFEX1ZJRF9IRFIpCisJCS8qCisJCSAqIFRoZSBWSUQgaGVhZGVyIGlzIGNvcnJ1cHRlZCwgc28gd2UgY2FuIHNhZmVseSBlcmFzZSB0aGlzCisJCSAqIFBFQiBhbmQgbm90IGFmcmFpZCB0aGF0IGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHZhbGlkIFBFQiBpbgorCQkgKiBjYXNlIG9mIGFuIHVuY2xlYW4gcmVib290LgorCQkgKi8KKwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMDsKKwkvKgorCSAqIFRoZSBQRUIgY29udGFpbnMgYSB2YWxpZCBWSUQgaGVhZGVyLCBidXQgd2UgY2Fubm90IGludmFsaWRhdGUgaXQuCisJICogU3VwcG9zZWRseSB0aGUgZmxhc2ggbWVkaWEgb3IgdGhlIGRyaXZlciBpcyBzY3Jld2VkIHVwLCBzbyByZXR1cm4gYW4KKwkgKiBlcnJvci4KKwkgKi8KKwl1YmlfZXJyKCJjYW5ub3QgaW52YWxpZGF0ZSBQRUIgJWQsIHdyaXRlIHJldHVybmVkICVkIHJlYWQgcmV0dXJuZWQgJWQiLAorCQlwbnVtLCBlcnIsIGVycjEpOworCXViaV9kYmdfZHVtcF9mbGFzaCh1YmksIHBudW0sIDAsIHViaS0+cGViX3NpemUpOworCXJldHVybiAtRUlPOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IGI4NDc3NDUuLmU3MTYxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtNzUsOSArNzUsMTAgQEAKIAkJZGJnX2JsZCgiYWRkIHRvIGZyZWU6IFBFQiAlZCwgRUMgJWQiLCBwbnVtLCBlYyk7CiAJZWxzZSBpZiAobGlzdCA9PSAmc2ktPmVyYXNlKQogCQlkYmdfYmxkKCJhZGQgdG8gZXJhc2U6IFBFQiAlZCwgRUMgJWQiLCBwbnVtLCBlYyk7Ci0JZWxzZSBpZiAobGlzdCA9PSAmc2ktPmNvcnIpCisJZWxzZSBpZiAobGlzdCA9PSAmc2ktPmNvcnIpIHsKIAkJZGJnX2JsZCgiYWRkIHRvIGNvcnJ1cHRlZDogUEVCICVkLCBFQyAlZCIsIHBudW0sIGVjKTsKLQllbHNlIGlmIChsaXN0ID09ICZzaS0+YWxpZW4pCisJCXNpLT5jb3JyX2NvdW50ICs9IDE7CisJfSBlbHNlIGlmIChsaXN0ID09ICZzaS0+YWxpZW4pCiAJCWRiZ19ibGQoImFkZCB0byBhbGllbjogUEVCICVkLCBFQyAlZCIsIHBudW0sIGVjKTsKIAllbHNlCiAJCUJVRygpOwpAQCAtODY0LDcgKzg2NSw5IEBACiAJCX0KIAl9CiAKLQkvKiBCb3RoIFVCSSBoZWFkZXJzIHNlZW0gdG8gYmUgZmluZSAqLworCWlmIChlY19jb3JyKQorCQl1Ymlfd2FybigidmFsaWQgVklEIGhlYWRlciBidXQgY29ycnVwdGVkIEVDIGhlYWRlciBhdCBQRUIgJWQiLAorCQkJIHBudW0pOwogCWVyciA9IHViaV9zY2FuX2FkZF91c2VkKHViaSwgc2ksIHBudW0sIGVjLCB2aWRoLCBiaXRmbGlwcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTkzNiw2ICs5MzksMTkgQEAKIAkJdWJpX21zZygiZW1wdHkgTVREIGRldmljZSBkZXRlY3RlZCIpOwogCiAJLyoKKwkgKiBGZXcgY29ycnVwdGVkIFBFQnMgYXJlIG5vdCBhIHByb2JsZW0gYW5kIG1heSBiZSBqdXN0IGEgcmVzdWx0IG9mCisJICogdW5jbGVhbiByZWJvb3RzLiBIb3dldmVyLCBtYW55IG9mIHRoZW0gbWF5IGluZGljYXRlIHNvbWUgcHJvYmxlbXMKKwkgKiB3aXRoIHRoZSBmbGFzaCBIVyBvciBkcml2ZXIuIFByaW50IGEgd2FybmluZyBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKHNpLT5jb3JyX2NvdW50ID49IDggfHwgc2ktPmNvcnJfY291bnQgPj0gdWJpLT5wZWJfY291bnQgLyA0KSB7CisJCXViaV93YXJuKCIlZCBQRUJzIGFyZSBjb3JydXB0ZWQiLCBzaS0+Y29ycl9jb3VudCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvcnJ1cHRlZCBQRUJzIGFyZToiKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZWIsICZzaS0+Y29yciwgdS5saXN0KQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICVkIiwgc2ViLT5wbnVtKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwl9CisKKwkvKgogCSAqIEluIGNhc2Ugb2YgdW5rbm93biBlcmFzZSBjb3VudGVyIHdlIHVzZSB0aGUgbWVhbiBlcmFzZSBjb3VudGVyCiAJICogdmFsdWUuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAppbmRleCAxMDE3Y2YxLi5iYWIzMTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKQEAgLTEwMiw2ICsxMDIsNyBAQAogICogQG1lYW5fZWM6IG1lYW4gZXJhc2UgY291bnRlciB2YWx1ZQogICogQGVjX3N1bTogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAZWNfY291bnQ6IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYworICogQGNvcnJfY291bnQ6IGNvdW50IG9mIGNvcnJ1cHRlZCBQRUJzCiAgKiBAaW1hZ2Vfc2VxX3NldDogaW5kaWNhdGVzIEB1YmktPmltYWdlX3NlcSBpcyBrbm93bgogICoKICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlc3VsdCBvZiBzY2FubmluZyBhbmQgbWF5IGJlIHVzZWQgYnkgb3RoZXIKQEAgLTEyNSw2ICsxMjYsNyBAQAogCWludCBtZWFuX2VjOwogCXVpbnQ2NF90IGVjX3N1bTsKIAlpbnQgZWNfY291bnQ7CisJaW50IGNvcnJfY291bnQ7CiAJaW50IGltYWdlX3NlcV9zZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvdWJpLmggYi9kcml2ZXJzL210ZC91YmkvdWJpLmgKaW5kZXggNmE1ZmU5Ni4uMWFmMDgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3ViaS5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS91YmkuaApAQCAtNTcwLDcgKzU3MCw3IEBACiAKIC8qCiAgKiB1YmlfcmJfZm9yX2VhY2hfZW50cnkgLSB3YWxrIGFuIFJCLXRyZWUuCi0gKiBAcmI6IGEgcG9pbnRlciB0byB0eXBlICdzdHJ1Y3QgcmJfbm9kZScgdG8gdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyCisgKiBAcmI6IGEgcG9pbnRlciB0byB0eXBlICdzdHJ1Y3QgcmJfbm9kZScgdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyCiAgKiBAcG9zOiBhIHBvaW50ZXIgdG8gUkItdHJlZSBlbnRyeSB0eXBlIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlcgogICogQHJvb3Q6IFJCLXRyZWUncyByb290CiAgKiBAbWVtYmVyOiB0aGUgbmFtZSBvZiB0aGUgJ3N0cnVjdCByYl9ub2RlJyB3aXRoaW4gdGhlIFJCLXRyZWUgZW50cnkKQEAgLTU3OSw3ICs1NzksOCBAQAogCWZvciAocmIgPSByYl9maXJzdChyb290KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkgICAgIHBvcyA9IChyYiA/IGNvbnRhaW5lcl9vZihyYiwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpIDogTlVMTCk7ICAgICBcCiAJICAgICByYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICAgcmIgPSByYl9uZXh0KHJiKSwgcG9zID0gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisJICAgICByYiA9IHJiX25leHQocmIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgcG9zID0gKHJiID8gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKnBvcyksIG1lbWJlcikgOiBOVUxMKSkKIAogLyoqCiAgKiB1YmlfemFsbG9jX3ZpZF9oZHIgLSBhbGxvY2F0ZSBhIHZvbHVtZSBpZGVudGlmaWVyIGhlYWRlciBvYmplY3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCmluZGV4IDY0NmRmYzUuLjhlYTljNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCkBAIC0xMjMsNyArMTIzLDYgQEAKIAlCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIHNrYiwgInJ4Iik7CiAKIAlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKLTsKIAluZXRpZl9yeChza2IpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwppbmRleCAwODNlMjEwLi42NmJjYmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKQEAgLTE0OSw3ICsxNDksNiBAQAogCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKIAogCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwotOwogCW5ldGlmX3J4KHNrYik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKaW5kZXggMDY5NWJlMS4uYWE3NmNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKQEAgLTMxMjIsNyArMzEyMiw3IEBACiAgICBUaGUgZmllbGRzIGFyZTpbNDowXSAtIHRhaWwgcG9pbnRlcjsgWzEwOjVdIC0gTGluayBMaXN0IHNpemU7IDE1OjExXSAtCiAgICBoZWFkZXIgcG9pbnRlci4gKi8KICNkZWZpbmUgVENNX1JFR19YWF9UQUJMRQkJCQkJIDB4NTAyNDAKLS8qIFtSVyA0XSBMb2FkIHZhbHVlIGZvciBmb3IgY2ZjIGFjIGNyZWRpdCBjbnQuICovCisvKiBbUlcgNF0gTG9hZCB2YWx1ZSBmb3IgY2ZjIGFjIGNyZWRpdCBjbnQuICovCiAjZGVmaW5lIFRNX1JFR19DRkNfQUNfQ1JEQ05UX1ZBTAkJCQkgMHgxNjQyMDgKIC8qIFtSVyA0XSBMb2FkIHZhbHVlIGZvciBjZmMgY2xkIGNyZWRpdCBjbnQuICovCiAjZGVmaW5lIFRNX1JFR19DRkNfQ0xEX0NSRENOVF9WQUwJCQkJIDB4MTY0MjEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggY2VhNWNmZS4uYzNmYTMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMTk4Nyw3ICsxOTg3LDcgQEAKIAkJCS8vIGZpbmQgbmV3IGFnZ3JlZ2F0b3IgZm9yIHRoZSByZWxhdGVkIHBvcnQocykKIAkJCW5ld19hZ2dyZWdhdG9yID0gX19nZXRfZmlyc3RfYWdnKHBvcnQpOwogCQkJZm9yICg7IG5ld19hZ2dyZWdhdG9yOyBuZXdfYWdncmVnYXRvciA9IF9fZ2V0X25leHRfYWdnKG5ld19hZ2dyZWdhdG9yKSkgewotCQkJCS8vIGlmIHRoZSBuZXcgYWdncmVnYXRvciBpcyBlbXB0eSwgb3IgaXQgY29ubmVjdGVkIHRvIHRvIG91ciBwb3J0IG9ubHkKKwkJCQkvLyBpZiB0aGUgbmV3IGFnZ3JlZ2F0b3IgaXMgZW1wdHksIG9yIGl0IGlzIGNvbm5lY3RlZCB0byBvdXIgcG9ydCBvbmx5CiAJCQkJaWYgKCFuZXdfYWdncmVnYXRvci0+bGFnX3BvcnRzIHx8ICgobmV3X2FnZ3JlZ2F0b3ItPmxhZ19wb3J0cyA9PSBwb3J0KSAmJiAhbmV3X2FnZ3JlZ2F0b3ItPmxhZ19wb3J0cy0+bmV4dF9wb3J0X2luX2FnZ3JlZ2F0b3IpKSB7CiAJCQkJCWJyZWFrOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IGNkYTZiMzkuLjQ1YWMyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwpAQCAtMzAzNSw3ICszMDM1LDcgQEAKICAgICAgICAgICAgICAgICAvKiBJZiBUQkkgY29tcGF0aWJpbGl0eSBpcyB3YXMgcHJldmlvdXNseSBvZmYsIHR1cm4gaXQgb24uIEZvcgogICAgICAgICAgICAgICAgICAqIGNvbXBhdGliaWxpdHkgd2l0aCBhIFRCSSBsaW5rIHBhcnRuZXIsIHdlIHdpbGwgc3RvcmUgYmFkCiAgICAgICAgICAgICAgICAgICogcGFja2V0cy4gU29tZSBmcmFtZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIGJ5dGUgb24gdGhlIGVuZCBhbmQKLSAgICAgICAgICAgICAgICAgKiB3aWxsIGxvb2sgbGlrZSBDUkMgZXJyb3JzIHRvIHRvIHRoZSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgKiB3aWxsIGxvb2sgbGlrZSBDUkMgZXJyb3JzIHRvIHRoZSBoYXJkd2FyZS4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAoIWh3LT50YmlfY29tcGF0aWJpbGl0eV9vbikgewogICAgICAgICAgICAgICAgICAgICBody0+dGJpX2NvbXBhdGliaWxpdHlfb24gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCmluZGV4IDM3NDc0NTdmNS4uYmM3YzViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYwpAQCAtNzUxLDcgKzc1MSw3IEBACiAKIAltdXRleF9sb2NrKCZlaGVhX2J1c21hcF9tdXRleCk7CiAJZWhlYV9tcl9sZW4gPSAwOwotCXJldCA9IHdhbGtfbWVtb3J5X3Jlc291cmNlKDAsIDFVTEwgPDwgTUFYX1BIWVNNRU1fQklUUywgTlVMTCwKKwlyZXQgPSB3YWxrX3N5c3RlbV9yYW1fcmFuZ2UoMCwgMVVMTCA8PCBNQVhfUEhZU01FTV9CSVRTLCBOVUxMLAogCQkJCSAgIGVoZWFfY3JlYXRlX2J1c21hcF9jYWxsYmFjayk7CiAJbXV0ZXhfdW5sb2NrKCZlaGVhX2J1c21hcF9tdXRleCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCmluZGV4IDExN2ZjNmMuLjY2ODEzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKKysrIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwpAQCAtMTY2NiwzICsxNjY2LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZGVidWcubXNnX2VuYWJsZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyB2ZXJib3NpdHkgbGV2ZWwgKDA9bm9uZSwgLi4uLCBmZmZmPWFsbCkiKTsKK01PRFVMRV9BTElBUygic3BpOiIgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCAyMjM0MTE4Li42YzE0NGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJcnh0aW1lICA9IGdldF9pY3R0X3ZhbHVlKHByaXYtPnJ4aWMpOwogCXJ4Y291bnQgPSBnZXRfaWNmdF92YWx1ZShwcml2LT5yeGljKTsKIAl0eHRpbWUgID0gZ2V0X2ljdHRfdmFsdWUocHJpdi0+dHhpYyk7Ci0JdHhjb3VudCA9IGdldF9pY2Z0X3ZhbHVlKHByaXYtPnR4aWMpOzsKKwl0eGNvdW50ID0gZ2V0X2ljZnRfdmFsdWUocHJpdi0+dHhpYyk7CiAJY3ZhbHMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gZ2Zhcl90aWNrczJ1c2Vjcyhwcml2LCByeHRpbWUpOwogCWN2YWxzLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IHJ4Y291bnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwppbmRleCAxZDdkN2ZlLi44OWM4MmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCkBAIC0yNTU2LDEzICsyNTU2LDEzIEBACiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJtZGlvLWRldmljZSIsICZkZXYtPm1kaW9fcGgsIDApKQogCQlkZXYtPm1kaW9fcGggPSAwOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAiem1paS1kZXZpY2UiLCAmZGV2LT56bWlpX3BoLCAwKSkKLQkJZGV2LT56bWlpX3BoID0gMDs7CisJCWRldi0+em1paV9waCA9IDA7CiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJ6bWlpLWNoYW5uZWwiLCAmZGV2LT56bWlpX3BvcnQsIDApKQotCQlkZXYtPnptaWlfcG9ydCA9IDB4ZmZmZmZmZmY7OworCQlkZXYtPnptaWlfcG9ydCA9IDB4ZmZmZmZmZmY7CiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJyZ21paS1kZXZpY2UiLCAmZGV2LT5yZ21paV9waCwgMCkpCi0JCWRldi0+cmdtaWlfcGggPSAwOzsKKwkJZGV2LT5yZ21paV9waCA9IDA7CiAJaWYgKGVtYWNfcmVhZF91aW50X3Byb3AobnAsICJyZ21paS1jaGFubmVsIiwgJmRldi0+cmdtaWlfcG9ydCwgMCkpCi0JCWRldi0+cmdtaWlfcG9ydCA9IDB4ZmZmZmZmZmY7OworCQlkZXYtPnJnbWlpX3BvcnQgPSAweGZmZmZmZmZmOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAiZmlmby1lbnRyeS1zaXplIiwgJmRldi0+Zmlmb19lbnRyeV9zaXplLCAwKSkKIAkJZGV2LT5maWZvX2VudHJ5X3NpemUgPSAxNjsKIAlpZiAoZW1hY19yZWFkX3VpbnRfcHJvcChucCwgIm1hbC1idXJzdC1zaXplIiwgJmRldi0+bWFsX2J1cnN0X3NpemUsIDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBkMjYzOWM0Li41ZDZjMTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMzk2Niw3ICszOTY2LDcgQEAKIAkvKiBWRnMgYXJlIGxpbWl0ZWQgdG8gdXNpbmcgdGhlIE1UQSBoYXNoIHRhYmxlIGZvciB0aGVpciBtdWx0aWNhc3QKIAkgKiBhZGRyZXNzZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQl2Zl9kYXRhLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07OworCQl2Zl9kYXRhLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07CiAKIAkvKiBGbHVzaCBhbmQgcmVzZXQgdGhlIG10YSB3aXRoIHRoZSBuZXcgdmFsdWVzICovCiAJaWdiX3NldF9yeF9tb2RlKGFkYXB0ZXItPm5ldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTEuYyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCmluZGV4IDU0N2FjN2MuLjIzNzgzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCkBAIC0xMzIxLDMgKzEzMjEsNCBAQAogCiBtb2R1bGVfcGFyYW1fbmFtZWQobWVzc2FnZSwgbXNnX2VuYWJsZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWVzc2FnZSwgIk1lc3NhZ2UgdmVyYm9zaXR5IGxldmVsICgwPW5vbmUsIDMxPWFsbCkiKTsKK01PRFVMRV9BTElBUygic3BpOmtzODg1MSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCmluZGV4IGRhOGQwYTAuLmYyYTE5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKQEAgLTg2NSw3ICs4NjUsNyBAQAogCWRjcnMgPSBkY3JfcmVzb3VyY2Vfc3RhcnQobnAsIDApOwogCWlmIChkY3JzID09IDApIHsKIAkJZGV2X2Vycigmb3AtPmRldiwgImNvdWxkIG5vdCBnZXQgRE1BIHJlZ2lzdGVyIGFkZHJlc3NcbiIpOwotCQlnb3RvIG5vZGV2OzsKKwkJZ290byBub2RldjsKIAl9CiAJbHAtPnNkbWFfZGNycyA9IGRjcl9tYXAobnAsIGRjcnMsIGRjcl9yZXNvdXJjZV9sZW4obnAsIDApKTsKIAlkZXZfZGJnKCZvcC0+ZGV2LCAiRENSIGJhc2U6ICV4XG4iLCBkY3JzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCBmYjY1YjQyLi4xZDBkNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAlzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCWludCBlcnIgPSAtRU5YSU8sIGk7CiAKLQkvKiBFbmFibGUgbWFuYWdtZW50IHBvcnQgKi8KKwkvKiBFbmFibGUgbWFuYWdlbWVudCBwb3J0ICovCiAJbWFjYl93cml0ZWwoYnAsIE5DUiwgTUFDQl9CSVQoTVBFKSk7CiAKIAlicC0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTIuYyBiL2RyaXZlcnMvbmV0L25pNTIuYwppbmRleCBiZDBhYzY5Li5hYWQzYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1Mi5jCkBAIC02MTUsMTAgKzYxNSwxMCBAQAogCS8qIGFkZHJfbGVuIHwhc3JjX2luc2VydCB8cHJlLWxlbiB8bG9vcGJhY2sgKi8KIAl3cml0ZWIoMHgyZSwgJmNmZ19jbWQtPmFkcl9sZW4pOwogCXdyaXRlYigweDAwLCAmY2ZnX2NtZC0+cHJpb3JpdHkpOwotCXdyaXRlYigweDYwLCAmY2ZnX2NtZC0+aWZzKTs7CisJd3JpdGViKDB4NjAsICZjZmdfY21kLT5pZnMpOwogCXdyaXRlYigweDAwLCAmY2ZnX2NtZC0+dGltZV9sb3cpOwogCXdyaXRlYigweGYyLCAmY2ZnX2NtZC0+dGltZV9oaWdoKTsKLQl3cml0ZWIoMHgwMCwgJmNmZ19jbWQtPnByb21pc2MpOzsKKwl3cml0ZWIoMHgwMCwgJmNmZ19jbWQtPnByb21pc2MpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCWludCBsZW4gPSAoKGNoYXIgX19pb21lbSAqKXAtPmlzY3AgLSAoY2hhciBfX2lvbWVtICopcHRyIC0gOCkgLyA2OwogCQlpZiAobnVtX2FkZHJzID4gbGVuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuYyBiL2RyaXZlcnMvbmV0L25pdS5jCmluZGV4IDc2Y2MyNjEuLmY5MzY0ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC01NjE1LDcgKzU2MTUsNyBAQAogCS8qIFRoZSBYTUFDX01JTiByZWdpc3RlciBvbmx5IGFjY2VwdHMgdmFsdWVzIGZvciBUWCBtaW4gd2hpY2gKIAkgKiBoYXZlIHRoZSBsb3cgMyBiaXRzIGNsZWFyZWQuCiAJICovCi0JQlVJTERfQlVHX09OKG1pbiAmIDB4Nyk7CisJQlVHX09OKG1pbiAmIDB4Nyk7CiAKIAlpZiAobnAtPmZsYWdzICYgTklVX0ZMQUdTX1hNQUMpCiAJCW5pdV9pbml0X3R4X3htYWMobnAsIG1pbiwgbWF4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDIyMDUyOTIuLjc3ODNjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtMjYzMCw3ICsyNjMwLDcgQEAKIAkgICAgRkxBR1NfTEk7CQkvKiBMb2FkIGlycSBkZWxheSB2YWx1ZXMgKi8KIAlpZiAocnhfcmluZy0+bGJxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTEw7CS8qIExvYWQgbGJxIHZhbHVlcyAqLwotCQl0bXAgPSAodTY0KXJ4X3JpbmctPmxicV9iYXNlX2RtYTs7CisJCXRtcCA9ICh1NjQpcnhfcmluZy0+bGJxX2Jhc2VfZG1hOwogCQliYXNlX2luZGlyZWN0X3B0ciA9IChfX2xlNjQgKikgcnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3Q7CiAJCXBhZ2VfZW50cmllcyA9IDA7CiAJCWRvIHsKQEAgLTI2NTQsNyArMjY1NCw3IEBACiAJfQogCWlmIChyeF9yaW5nLT5zYnFfbGVuKSB7CiAJCWNxaWNiLT5mbGFncyB8PSBGTEFHU19MUzsJLyogTG9hZCBzYnEgdmFsdWVzICovCi0JCXRtcCA9ICh1NjQpcnhfcmluZy0+c2JxX2Jhc2VfZG1hOzsKKwkJdG1wID0gKHU2NClyeF9yaW5nLT5zYnFfYmFzZV9kbWE7CiAJCWJhc2VfaW5kaXJlY3RfcHRyID0gKF9fbGU2NCAqKSByeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdDsKIAkJcGFnZV9lbnRyaWVzID0gMDsKIAkJZG8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcmlvbmV0LmMgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwppbmRleCBiYzk4ZTdmLi5lZGU5MzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yaW9uZXQuYworKysgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwpAQCAtNzIsNyArNzIsNyBAQAogc3RhdGljIGludCByaW9uZXRfY2FwYWJsZSA9IDE7CiAKIC8qCi0gKiBUaGlzIGlzIGEgZmFzdCBsb29rdXAgdGFibGUgZm9yIGZvciB0cmFuc2xhdGluZyBUWAorICogVGhpcyBpcyBhIGZhc3QgbG9va3VwIHRhYmxlIGZvciB0cmFuc2xhdGluZyBUWAogICogRXRoZXJuZXQgcGFja2V0cyBpbnRvIGEgZGVzdGluYXRpb24gUklPIGRldmljZS4gSXQKICAqIGNvdWxkIGJlIG1hZGUgaW50byBhIGhhc2ggdGFibGUgdG8gc2F2ZSBtZW1vcnkgZGVwZW5kaW5nCiAgKiBvbiBzeXN0ZW0gdHJhZGUtb2Zmcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCmluZGV4IGYxZGYyZWMuLmU2YjMzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwpAQCAtOTYwLDcgKzk2MCw3IEBACiAJCQkvKlBDODhiKi8KIAkJCWlmICghcGh5LT5jZl9qb2luKSB7CiAJCQkJcGh5LT5jZl9qb2luID0gVFJVRSA7Ci0JCQkJcXVldWVfZXZlbnQoc21jLEVWRU5UX0NGTSxDRl9KT0lOK25wKSA7IDsKKwkJCQlxdWV1ZV9ldmVudChzbWMsRVZFTlRfQ0ZNLENGX0pPSU4rbnApIDsKIAkJCX0KIAkJCWlmIChjbWQgPT0gUENfSk9JTikKIAkJCQlHT19TVEFURShQQzhfQUNUSVZFKSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3BtZi5jIGIvZHJpdmVycy9uZXQvc2tmcC9wbWYuYwppbmRleCA3OWU2NjVlLi5hMzIwZmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3BtZi5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvcG1mLmMKQEAgLTgwNyw5ICs4MDcsOSBAQAogCQkJCW1pYl9wLT5mZGRpUE9SVExlckZsYWcgOwogCQkJc3AtPnA0MDUwX3BhZCA9IDAgOwogCQkJc3AtPnA0MDUwX2N1dG9mZiA9Ci0JCQkJbWliX3AtPmZkZGlQT1JUTGVyX0N1dG9mZiA7IDsKKwkJCQltaWJfcC0+ZmRkaVBPUlRMZXJfQ3V0b2ZmIDsKIAkJCXNwLT5wNDA1MF9hbGFybSA9Ci0JCQkJbWliX3AtPmZkZGlQT1JUTGVyX0FsYXJtIDsgOworCQkJCW1pYl9wLT5mZGRpUE9SVExlcl9BbGFybSA7CiAJCQlzcC0+cDQwNTBfZXN0aW1hdGUgPQogCQkJCW1pYl9wLT5mZGRpUE9SVExlcl9Fc3RpbWF0ZSA7CiAJCQlzcC0+cDQwNTBfcmVqZWN0X2N0ID0KQEAgLTgyOSw3ICs4MjksNyBAQAogCQkJc3AtPnA0MDUxX3BvcnR0eXBlID0KIAkJCQltaWJfcC0+ZmRkaVBPUlRNeV9UeXBlIDsKIAkJCXNwLT5wNDA1MV9jb25uZWN0c3RhdGUgPQotCQkJCW1pYl9wLT5mZGRpUE9SVENvbm5lY3RTdGF0ZSA7IDsKKwkJCQltaWJfcC0+ZmRkaVBPUlRDb25uZWN0U3RhdGUgOwogCQkJc3AtPnA0MDUxX3BjX25laWdoYm9yID0KIAkJCQltaWJfcC0+ZmRkaVBPUlROZWlnaGJvclR5cGUgOwogCQkJc3AtPnA0MDUxX3BjX3dpdGhob2xkID0KQEAgLTg1Myw3ICs4NTMsNyBAQAogCQkJc3RydWN0IHNtdF9wXzQwNTMJKnNwIDsKIAkJCXNwID0gKHN0cnVjdCBzbXRfcF80MDUzICopIHRvIDsKIAkJCXNwLT5wNDA1M19tdWx0aXBsZSA9Ci0JCQkJbWliX3AtPmZkZGlQT1JUTXVsdGlwbGVfUCA7IDsKKwkJCQltaWJfcC0+ZmRkaVBPUlRNdWx0aXBsZV9QIDsKIAkJCXNwLT5wNDA1M19hdmFpbGFibGVwYXRocyA9CiAJCQkJbWliX3AtPmZkZGlQT1JUQXZhaWxhYmxlUGF0aHMgOwogCQkJc3AtPnA0MDUzX2N1cnJlbnRwYXRoID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCA2MmU4NTJlLi41NWJhZDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlpZiAoc2tnZS0+d29sICYgV0FLRV9NQUdJQykKIAkJY3RybCB8PSBXT0xfQ1RMX0VOQV9QTUVfT05fTUFHSUNfUEtUfFdPTF9DVExfRU5BX01BR0lDX1BLVF9VTklUOwogCWVsc2UKLQkJY3RybCB8PSBXT0xfQ1RMX0RJU19QTUVfT05fTUFHSUNfUEtUfFdPTF9DVExfRElTX01BR0lDX1BLVF9VTklUOzsKKwkJY3RybCB8PSBXT0xfQ1RMX0RJU19QTUVfT05fTUFHSUNfUEtUfFdPTF9DVExfRElTX01BR0lDX1BLVF9VTklUOwogCiAJY3RybCB8PSBXT0xfQ1RMX0RJU19QTUVfT05fUEFUVEVSTnxXT0xfQ1RMX0RJU19QQVRURVJOX1VOSVQ7CiAJc2tnZV93cml0ZTE2KGh3LCBXT0xfUkVHUyhwb3J0LCBXT0xfQ1RSTF9TVEFUKSwgY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggNGJiNTJlOS4uMTUxNDBmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtNzY1LDcgKzc2NSw3IEBACiAJaWYgKHNreTItPndvbCAmIFdBS0VfTUFHSUMpCiAJCWN0cmwgfD0gV09MX0NUTF9FTkFfUE1FX09OX01BR0lDX1BLVHxXT0xfQ1RMX0VOQV9NQUdJQ19QS1RfVU5JVDsKIAllbHNlCi0JCWN0cmwgfD0gV09MX0NUTF9ESVNfUE1FX09OX01BR0lDX1BLVHxXT0xfQ1RMX0RJU19NQUdJQ19QS1RfVU5JVDs7CisJCWN0cmwgfD0gV09MX0NUTF9ESVNfUE1FX09OX01BR0lDX1BLVHxXT0xfQ1RMX0RJU19NQUdJQ19QS1RfVU5JVDsKIAogCWN0cmwgfD0gV09MX0NUTF9ESVNfUE1FX09OX1BBVFRFUk58V09MX0NUTF9ESVNfUEFUVEVSTl9VTklUOwogCXNreTJfd3JpdGUxNihodywgV09MX1JFR1MocG9ydCwgV09MX0NUUkxfU1RBVCksIGN0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC5jCmluZGV4IDI2ZjZlZTkuLmUxN2M1MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuYworKysgYi9kcml2ZXJzL25ldC9zbGlwLmMKQEAgLTYxNiw2ICs2MTYsMTQgQEAKIAlzbF9mcmVlX2J1ZnMoc2wpOwogfQogCisvKiBIb29rIHRoZSBkZXN0cnVjdG9yIHNvIHdlIGNhbiBmcmVlIHNsaXAgZGV2aWNlcyBhdCB0aGUgcmlnaHQgcG9pbnQgaW4gdGltZSAqLworc3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaSA9IGRldi0+YmFzZV9hZGRyOworCWZyZWVfbmV0ZGV2KGRldik7CisJc2xpcF9kZXZzW2ldID0gTlVMTDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbF9uZXRkZXZfb3BzID0gewogCS5uZG9faW5pdAkJPSBzbF9pbml0LAogCS5uZG9fdW5pbml0CSAgCT0gc2xfdW5pbml0LApAQCAtNjM0LDcgKzY0Miw3IEBACiBzdGF0aWMgdm9pZCBzbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+bmV0ZGV2X29wcwkJPSAmc2xfbmV0ZGV2X29wczsKLQlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CisJZGV2LT5kZXN0cnVjdG9yCQk9IHNsX2ZyZWVfbmV0ZGV2OwogCiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwogCWRldi0+YWRkcl9sZW4JCT0gMDsKQEAgLTcxMiw4ICs3MjAsNiBAQAogc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyhkZXZfdCBsaW5lKQogewogCWludCBpOwotCWludCBzZWwgPSAtMTsKLQlpbnQgc2NvcmUgPSAtMTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7CiAKQEAgLTcyNCw1NSArNzMwLDcgQEAKIAkJZGV2ID0gc2xpcF9kZXZzW2ldOwogCQlpZiAoZGV2ID09IE5VTEwpCiAJCQlicmVhazsKLQotCQlzbCA9IG5ldGRldl9wcml2KGRldik7Ci0JCWlmIChzbC0+bGVhc2VkKSB7Ci0JCQlpZiAoc2wtPmxpbmUgIT0gbGluZSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChzbC0+dHR5KQotCQkJCXJldHVybiBOVUxMOwotCi0JCQkvKiBDbGVhciBFU0NBUEUgJiBFUlJPUiBmbGFncyAqLwotCQkJc2wtPmZsYWdzICY9ICgxIDw8IFNMRl9JTlVTRSk7Ci0JCQlyZXR1cm4gc2w7Ci0JCX0KLQotCQlpZiAoc2wtPnR0eSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjdXJyZW50LT5waWQgPT0gc2wtPnBpZCkgewotCQkJaWYgKHNsLT5saW5lID09IGxpbmUgJiYgc2NvcmUgPCAzKSB7Ci0JCQkJc2VsID0gaTsKLQkJCQlzY29yZSA9IDM7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoc2NvcmUgPCAyKSB7Ci0JCQkJc2VsID0gaTsKLQkJCQlzY29yZSA9IDI7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc2wtPmxpbmUgPT0gbGluZSAmJiBzY29yZSA8IDEpIHsKLQkJCXNlbCA9IGk7Ci0JCQlzY29yZSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc2NvcmUgPCAwKSB7Ci0JCQlzZWwgPSBpOwotCQkJc2NvcmUgPSAwOwotCQl9CiAJfQotCi0JaWYgKHNlbCA+PSAwKSB7Ci0JCWkgPSBzZWw7Ci0JCWRldiA9IHNsaXBfZGV2c1tpXTsKLQkJaWYgKHNjb3JlID4gMSkgewotCQkJc2wgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJc2wtPmZsYWdzICY9ICgxIDw8IFNMRl9JTlVTRSk7Ci0JCQlyZXR1cm4gc2w7Ci0JCX0KLQl9Ci0KIAkvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi8KIAlpZiAoaSA+PSBzbGlwX21heGRldikKIAkJcmV0dXJuIE5VTEw7CkBAIC05MDksMzAgKzg2NywxMyBAQAogfQogCiAvKgotCi0gIEZJWE1FOiAxLDIgYXJlIGZpeGVkIDMgd2FzIG5ldmVyIHRydWUgYW55d2F5LgotCi0gICBMZXQgbWUgdG8gYmxhbWUgYSBiaXQuCi0gICAxLiBUVFkgbW9kdWxlIGNhbGxzIHRoaXMgZnVuc3Rpb24gb24gc29mdCBpbnRlcnJ1cHQuCi0gICAyLiBUVFkgbW9kdWxlIGNhbGxzIHRoaXMgZnVuY3Rpb24gV0lUSCBNQVNLRUQgSU5URVJSVVBUUyEKLSAgIDMuIFRUWSBtb2R1bGUgZG9lcyBub3Qgbm90aWZ5IHVzIGFib3V0IGxpbmUgZGlzY2lwbGluZQotICAgICAgc2h1dGRvd24sCi0KLSAgIFNlZW1zLCBub3cgaXQgaXMgY2xlYW4uIFRoZSBzb2x1dGlvbiBpcyB0byBjb25zaWRlciBuZXRkZXZpY2UgYW5kCi0gICBsaW5lIGRpc2NpcGxpbmUgc2lkZXMgYXMgdHdvIGluZGVwZW5kZW50IHRocmVhZHMuCi0KLSAgIEJ5LXByb2R1Y3QgKG5vdCBkZXNpcmVkKTogc2w/IGRvZXMgbm90IGZlZWwgaGFuZ3VwcyBhbmQgcmVtYWlucyBvcGVuLgotICAgSXQgaXMgc3VwcG9zZWQsIHRoYXQgdXNlciBsZXZlbCBwcm9ncmFtIChkaXAsIGRpYWxkLCBzbGF0dGFjaC4uLikKLSAgIHdpbGwgY2F0Y2ggU0lHSFVQIGFuZCBtYWtlIHRoZSByZXN0IG9mIHdvcmsuCi0KLSAgIEkgc2VlIG5vIHdheSB0byBtYWtlIG1vcmUgd2l0aCBjdXJyZW50IHR0eSBjb2RlLiAtLUFOSwotICovCi0KLS8qCiAgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLgogICogVGhpcyBtZWFucyBmbHVzaGluZyBvdXQgYW55IHBlbmRpbmcgcXVldWVzLCBhbmQgdGhlbiByZXR1cm5pbmcuIFRoaXMKICAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy4KKyAqCisgKiBXZSBhbHNvIHVzZSB0aGlzIG1ldGhvZCBmbyBhIGhhbmd1cCBldmVudAogICovCisKIHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc2xpcCAqc2wgPSB0dHktPmRpc2NfZGF0YTsKQEAgLTk1MSwxMCArODkyLDE2IEBACiAJZGVsX3RpbWVyX3N5bmMoJnNsLT5rZWVwYWxpdmVfdGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZzbC0+b3V0ZmlsbF90aW1lcik7CiAjZW5kaWYKLQotCS8qIENvdW50IHJlZmVyZW5jZXMgZnJvbSBUVFkgbW9kdWxlICovCisJLyogRmx1c2ggbmV0d29yayBzaWRlICovCisJdW5yZWdpc3Rlcl9uZXRkZXYoc2wtPmRldik7CisJLyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqLwogfQogCitzdGF0aWMgaW50IHNsaXBfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc2xpcF9jbG9zZSh0dHkpOworCXJldHVybiAwOworfQogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKgkJCVNUQU5EQVJEIFNMSVAgRU5DQVBTVUxBVElPTgkJICAJICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTMxMSw2ICsxMjU4LDcgQEAKIAkubmFtZSAJCT0gInNsaXAiLAogCS5vcGVuIAkJPSBzbGlwX29wZW4sCiAJLmNsb3NlCSAJPSBzbGlwX2Nsb3NlLAorCS5oYW5ndXAJIAk9IHNsaXBfaGFuZ3VwLAogCS5pb2N0bAkJPSBzbGlwX2lvY3RsLAogCS5yZWNlaXZlX2J1Zgk9IHNsaXBfcmVjZWl2ZV9idWYsCiAJLndyaXRlX3dha2V1cAk9IHNsaXBfd3JpdGVfd2FrZXVwLApAQCAtMTM4NCw2ICsxMzMyLDggQEAKIAkJfQogCX0gd2hpbGUgKGJ1c3kgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwogCisJLyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kCisJICAgcGhhc2UgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBzbGlwX21heGRldjsgaSsrKSB7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggM2Y1ZDI4OC4uZDNlZTE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTEzNzAsNyArMTM3MCw3IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdHVuX21pc2NkZXYgPSB7CiAJLm1pbm9yID0gVFVOX01JTk9SLAogCS5uYW1lID0gInR1biIsCi0JLmRldm5vZGUgPSAibmV0L3R1biIsCisJLm5vZGVuYW1lID0gIm5ldC90dW4iLAogCS5mb3BzID0gJnR1bl9mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMKaW5kZXggNDVjZWJmYi4uMjMzMDA2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jCkBAIC0zMDAsMjAgKzMwMCwyMyBAQAogCQkJCQlyZXR1cm4gMDsKIAkJCX0KIAotCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYjItPmRhdGEKLQkJCQkJKyBsZW4gLSBFVEhfRkNTX0xFTik7Ci0JCQlza2JfdHJpbShza2IyLCBsZW4gLSBFVEhfRkNTX0xFTik7Ci0KIAkJCS8qCiAJCQkgKiBUaGUgYm1DUkMgaGVscHMgdG8gZGVub3RlIHdoZW4gdGhlIENSQyBmaWVsZCBpbgogCQkJICogdGhlIEV0aGVybmV0IGZyYW1lIGNvbnRhaW5zIGEgY2FsY3VsYXRlZCBDUkM6CiAJCQkgKglibUNSQyA9IDEJOiBDUkMgaXMgY2FsY3VsYXRlZAogCQkJICoJYm1DUkMgPSAwCTogQ1JDID0gMHhERUFEQkVFRgogCQkJICovCi0JCQlpZiAoaGVhZGVyICYgQklUKDE0KSkKLQkJCQljcmMyID0gfmNyYzMyX2xlKH4wLCBza2IyLT5kYXRhLCBza2IyLT5sZW4pOwotCQkJZWxzZQorCQkJaWYgKGhlYWRlciAmIEJJVCgxNCkpIHsKKwkJCQljcmMgPSBnZXRfdW5hbGlnbmVkX2xlMzIoc2tiMi0+ZGF0YQorCQkJCQkJKyBsZW4gLSBFVEhfRkNTX0xFTik7CisJCQkJY3JjMiA9IH5jcmMzMl9sZSh+MCwgc2tiMi0+ZGF0YSwgc2tiMi0+bGVuCisJCQkJCQktIEVUSF9GQ1NfTEVOKTsKKwkJCX0gZWxzZSB7CisJCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9iZTMyKHNrYjItPmRhdGEKKwkJCQkJCSsgbGVuIC0gRVRIX0ZDU19MRU4pOwogCQkJCWNyYzIgPSAweGRlYWRiZWVmOworCQkJfQorCQkJc2tiX3RyaW0oc2tiMiwgbGVuIC0gRVRIX0ZDU19MRU4pOwogCiAJCQlpZiAoaXNfbGFzdCkKIAkJCQlyZXR1cm4gY3JjID09IGNyYzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggMzIyNjZmYi4uNWM0OThkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgpAQCAtMzIwLDcgKzMyMSw3IEBACiAJCXNrYl9xdWV1ZV9oZWFkKCZ2aS0+cmVjdiwgc2tiKTsKIAogCQllcnIgPSB2aS0+cnZxLT52cV9vcHMtPmFkZF9idWYodmktPnJ2cSwgc2csIDAsIG51bSwgc2tiKTsKLQkJaWYgKGVycikgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc2tiX3VubGluayhza2IsICZ2aS0+cmVjdik7CiAJCQl0cmltX3BhZ2VzKHZpLCBza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0zNzMsNyArMzc0LDcgQEAKIAkJc2tiX3F1ZXVlX2hlYWQoJnZpLT5yZWN2LCBza2IpOwogCiAJCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCBzZywgMCwgMSwgc2tiKTsKLQkJaWYgKGVycikgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc2tiX3VubGluayhza2IsICZ2aS0+cmVjdik7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwpAQCAtNTI3LDcgKzUyOCw3IEBACiAJbnVtID0gc2tiX3RvX3NndmVjKHNrYiwgc2crMSwgMCwgc2tiLT5sZW4pICsgMTsKIAogCWVyciA9IHZpLT5zdnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+c3ZxLCBzZywgbnVtLCAwLCBza2IpOwotCWlmICghZXJyICYmICF2aS0+ZnJlZV9pbl90YXNrbGV0KQorCWlmIChlcnIgPj0gMCAmJiAhdmktPmZyZWVfaW5fdGFza2xldCkKIAkJbW9kX3RpbWVyKCZ2aS0+eG1pdF9mcmVlX3RpbWVyLCBqaWZmaWVzICsgKEhaLzEwKSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNTM4LDcgKzUzOSw3IEBACiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSAodm9pZCAqKWRhdGE7CiAKIAluZXRpZl90eF9sb2NrX2JoKHZpLT5kZXYpOwotCWlmICh2aS0+bGFzdF94bWl0X3NrYiAmJiB4bWl0X3NrYih2aSwgdmktPmxhc3RfeG1pdF9za2IpID09IDApIHsKKwlpZiAodmktPmxhc3RfeG1pdF9za2IgJiYgeG1pdF9za2IodmksIHZpLT5sYXN0X3htaXRfc2tiKSA+PSAwKSB7CiAJCXZpLT5zdnEtPnZxX29wcy0+a2ljayh2aS0+c3ZxKTsKIAkJdmktPmxhc3RfeG1pdF9za2IgPSBOVUxMOwogCX0KQEAgLTU1Nyw3ICs1NTgsNyBAQAogCiAJLyogSWYgd2UgaGFzIGEgYnVmZmVyIGxlZnQgb3ZlciBmcm9tIGxhc3QgdGltZSwgc2VuZCBpdCBub3cuICovCiAJaWYgKHVubGlrZWx5KHZpLT5sYXN0X3htaXRfc2tiKSAmJgotCSAgICB4bWl0X3NrYih2aSwgdmktPmxhc3RfeG1pdF9za2IpICE9IDApCisJICAgIHhtaXRfc2tiKHZpLCB2aS0+bGFzdF94bWl0X3NrYikgPCAwKQogCQlnb3RvIHN0b3BfcXVldWU7CiAKIAl2aS0+bGFzdF94bWl0X3NrYiA9IE5VTEw7CkBAIC01NjUsNyArNTY2LDcgQEAKIAkvKiBQdXQgbmV3IG9uZSBpbiBzZW5kIHF1ZXVlIGFuZCBkbyB0cmFuc21pdCAqLwogCWlmIChsaWtlbHkoc2tiKSkgewogCQlfX3NrYl9xdWV1ZV9oZWFkKCZ2aS0+c2VuZCwgc2tiKTsKLQkJaWYgKHhtaXRfc2tiKHZpLCBza2IpICE9IDApIHsKKwkJaWYgKHhtaXRfc2tiKHZpLCBza2IpIDwgMCkgewogCQkJdmktPmxhc3RfeG1pdF9za2IgPSBza2I7CiAJCQlza2IgPSBOVUxMOwogCQkJZ290byBzdG9wX3F1ZXVlOwpAQCAtNjY4LDcgKzY2OSw3IEBACiAJCXNnX3NldF9idWYoJnNnW2kgKyAxXSwgc2dfdmlydChzKSwgcy0+bGVuZ3RoKTsKIAlzZ19zZXRfYnVmKCZzZ1tvdXQgKyBpbiAtIDFdLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CiAKLQlCVUdfT04odmktPmN2cS0+dnFfb3BzLT5hZGRfYnVmKHZpLT5jdnEsIHNnLCBvdXQsIGluLCB2aSkpOworCUJVR19PTih2aS0+Y3ZxLT52cV9vcHMtPmFkZF9idWYodmktPmN2cSwgc2csIG91dCwgaW4sIHZpKSA8IDApOwogCiAJdmktPmN2cS0+dnFfb3BzLT5raWNrKHZpLT5jdnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKaW5kZXggNjI3NzlhNS4uM2U5NGYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaApAQCAtMTU0MSw3ICsxNTQxLDcgQEAKIAlyeGRfaW5mby0+bDRfY2tzdW1fdmFsaWQgPQogCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fQ09SUkVDVF9HRVQocnhkcC0+Y29udHJvbF8wKTsKIAlyeGRfaW5mby0+bDRfY2tzdW0gPQotCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7OworCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CiAJcnhkX2luZm8tPmZyYW1lID0KIAkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0VUSEVSX0VOQ0FQX0dFVChyeGRwLT5jb250cm9sXzApOwogCXJ4ZF9pbmZvLT5wcm90byA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwppbmRleCBiMzc4MDM3Li4wNjhkN2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKQEAgLTIzNTAsNyArMjM1MCw3IEBACiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CiAJLyogMCAtIFR4LCAxIC0gUnggICovCiAJaW50IHRpbV9tc2l4X2lkWzRdOwotCWludCBhbGFybV9tc2l4X2lkID0gMCwgbXNpeF9pbnRyX3ZlY3QgPSAwOzsKKwlpbnQgYWxhcm1fbXNpeF9pZCA9IDAsIG1zaXhfaW50cl92ZWN0ID0gMDsKIAl2ZGV2LT5pbnRyX2NudCA9IDA7CiAKIAkvKiBhbGxvY2F0ZSBtc2l4IHZlY3RvcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaAppbmRleCBkZWJhZDA3Li5jNjNlYTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCkBAIC05ODIsNyArOTgyLDcgQEAKICNkZWZpbmUgQVI1S181NDE0X0NCQ0ZHX0JVRl9ESVMJMHgxMAkvKiBEaXNhYmxlIGJ1ZmZlciAqLwogCiAvKgotICogUENJLUUgUG93ZXIgbWFuYWdtZW50IGNvbmZpZ3VyYXRpb24KKyAqIFBDSS1FIFBvd2VyIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbgogICogYW5kIHN0YXR1cyByZWdpc3RlciBbNTQyNCtdCiAgKi8KICNkZWZpbmUJQVI1S19QQ0lFX1BNX0NUTAkJMHg0MDY4CQkJLyogUmVnaXN0ZXIgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggYTNiMzZiMy4uY2NlMTg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC0zMzMwLDcgKzMzMzAsNyBAQAogCXByaXYtPndzdGF0cy5xdWFsLnVwZGF0ZWQgJj0gfklXX1FVQUxfUVVBTF9JTlZBTElEOwogfQogCi0vKiBkZWFscyB3aXRoIGluY29taW5nIG1hbmFnbWVudCBmcmFtZXMuICovCisvKiBkZWFscyB3aXRoIGluY29taW5nIG1hbmFnZW1lbnQgZnJhbWVzLiAqLwogc3RhdGljIHZvaWQgYXRtZWxfbWFuYWdlbWVudF9mcmFtZShzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLAogCQkJCSAgIHUxNiBmcmFtZV9sZW4sIHU4IHJzc2kpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCmluZGV4IDQ0NmUzMjcuLmNiOGJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0xMjIyLDMgKzEyMjIsNCBAQAogTU9EVUxFX0FVVEhPUigiQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+LCAiCiAJICAgICAgIkNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpsaWJlcnRhc19zcGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwppbmRleCAwNTQ1OGQ5Li5hZmQyNmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC03MzEsMyArNzMxLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPiIpOworTU9EVUxFX0FMSUFTKCJzcGk6Y3gzMTEweCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX21haW4uYwppbmRleCA1ODA5ZWY1Li4xMTAzMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX21haW4uYwpAQCAtMTQyNiwzICsxNDI2LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiVEkgd2wxMjUxIFdpcmVsZXMgTEFOIERyaXZlciBDb3JlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BTElBUygic3BpOndsMTJ4eCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IDVlMTEwYTIuLjRlNzlhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCXJldHVybiByOwogfQogCi0vKiBNQUMgYWRkcmVzczogaWYgY3VzdG9tIG1hYyBhZGRyZXNzZXMgYXJlIHRvIHRvIGJlIHVzZWQgQ1JfTUFDX0FERFJfUDEgYW5kCisvKiBNQUMgYWRkcmVzczogaWYgY3VzdG9tIG1hYyBhZGRyZXNzZXMgYXJlIHRvIGJlIHVzZWQgQ1JfTUFDX0FERFJfUDEgYW5kCiAgKiAgICAgICAgICAgICAgQ1JfTUFDX0FERFJfUDIgbXVzdCBiZSBvdmVyd3JpdHRlbgogICovCiBpbnQgemRfd3JpdGVfbWFjX2FkZHIoc3RydWN0IHpkX2NoaXAgKmNoaXAsIGNvbnN0IHU4ICptYWNfYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYmFzZS5jIGIvZHJpdmVycy9vZi9iYXNlLmMKaW5kZXggNjlmODVjMC4uZGRmMjI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9iYXNlLmMKKysrIGIvZHJpdmVycy9vZi9iYXNlLmMKQEAgLTQ0Nyw3ICs0NDcsNiBAQAogc3RhdGljIHN0cnVjdCBvZl9tb2RhbGlhc190YWJsZSBvZl9tb2RhbGlhc190YWJsZVtdID0gewogCXsgImZzbCxtY3UtbXBjODM0OWVtaXR4IiwgIm1jdS1tcGM4MzQ5ZW1pdHgiIH0sCiAJeyAibW1jLXNwaS1zbG90IiwgIm1tY19zcGkiIH0sCi0JeyAic3RtLG0yNXA0MCIsICJtMjVwODAiIH0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVmcy5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKaW5kZXggYjdlNGNlZS4uMjc2NmE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZWZzLmMKQEAgLTM1LDcgKzM1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlIAk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCmluZGV4IGE0NWIwYzAuLmE2YjRhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAKIAkqKiBIb3QtUGx1Zy9SZW1vdmFsIG9mIFBDSSBjYXJkcy4gKGFrYSBQQ0kgT0xBUkQpLgogCSovCiAKLQlpb3ZhX3NwYWNlX3NpemUgPSAodTMyKSAobnVtX3BoeXNwYWdlcyAvIGNvdW50X3BhcmlzY19kcml2ZXIoJmNjaW9fZHJpdmVyKSk7CisJaW92YV9zcGFjZV9zaXplID0gKHUzMikgKHRvdGFscmFtX3BhZ2VzIC8gY291bnRfcGFyaXNjX2RyaXZlcigmY2Npb19kcml2ZXIpKTsKIAogCS8qIGxpbWl0IElPVkEgc3BhY2Ugc2l6ZSB0byAxTUItMUdCICovCiAKQEAgLTEzMDUsNyArMTMwNSw3IEBACiAKIAlEQkdfSU5JVCgiJXMoKSBocGEgMHglcCBtZW0gJWx1TUIgSU9WICVkTUIgKCVkIGJpdHMpXG4iLAogCQkJX19mdW5jX18sIGlvYy0+aW9jX3JlZ3MsCi0JCQkodW5zaWduZWQgbG9uZykgbnVtX3BoeXNwYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSwKKwkJCSh1bnNpZ25lZCBsb25nKSB0b3RhbHJhbV9wYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSwKIAkJCWlvdmFfc3BhY2Vfc2l6ZT4+MjAsCiAJCQlpb3Zfb3JkZXIgKyBQQUdFX1NISUZUKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwppbmRleCAxMjNkOGZlLi41N2E2ZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwpAQCAtMTM5MCw3ICsxMzkwLDcgQEAKIAkqKiBmb3IgRE1BIGhpbnRzIC0gZXJnbyBvbmx5IDMwIGJpdHMgbWF4LgogCSovCiAKLQlpb3ZhX3NwYWNlX3NpemUgPSAodTMyKSAobnVtX3BoeXNwYWdlcy9nbG9iYWxfaW9jX2NudCk7CisJaW92YV9zcGFjZV9zaXplID0gKHUzMikgKHRvdGFscmFtX3BhZ2VzL2dsb2JhbF9pb2NfY250KTsKIAogCS8qIGxpbWl0IElPVkEgc3BhY2Ugc2l6ZSB0byAxTUItMUdCICovCiAJaWYgKGlvdmFfc3BhY2Vfc2l6ZSA8ICgxIDw8ICgyMCAtIFBBR0VfU0hJRlQpKSkgewpAQCAtMTQxNSw3ICsxNDE1LDcgQEAKIAlEQkdfSU5JVCgiJXMoKSBocGEgMHglbHggbWVtICVsZE1CIElPViAlZE1CICglZCBiaXRzKVxuIiwKIAkJCV9fZnVuY19fLAogCQkJaW9jLT5pb2NfaHBhLAotCQkJKHVuc2lnbmVkIGxvbmcpIG51bV9waHlzcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCksCisJCQkodW5zaWduZWQgbG9uZykgdG90YWxyYW1fcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCksCiAJCQlpb3ZhX3NwYWNlX3NpemU+PjIwLAogCQkJaW92X29yZGVyICsgUEFHRV9TSElGVCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2RtYXIuYyBiL2RyaXZlcnMvcGNpL2RtYXIuYwppbmRleCBhYjk5NzgzLi4xNGJiYWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9kbWFyLmMKKysrIGIvZHJpdmVycy9wY2kvZG1hci5jCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAotI3VuZGVmIFBSRUZJWAotI2RlZmluZSBQUkVGSVggIkRNQVI6IgorI2RlZmluZSBQUkVGSVggIkRNQVI6ICIKIAogLyogTm8gbG9ja3MgYXJlIG5lZWRlZCBhcyBETUEgcmVtYXBwaW5nIGhhcmR3YXJlIHVuaXQKICAqIGxpc3QgaXMgY29uc3RydWN0ZWQgYXQgYm9vdCB0aW1lIGFuZCBob3RwbHVnIG9mCkBAIC01NzcsOSArNTc3LDYgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIk5vIEFUU1IgZm91bmRcbiIpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCXBhcnNlX2lvYXBpY3NfdW5kZXJfaXIoKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC02MzksMjAgKzYzNiwzMSBAQAogCWlvbW11LT5jYXAgPSBkbWFyX3JlYWRxKGlvbW11LT5yZWcgKyBETUFSX0NBUF9SRUcpOwogCWlvbW11LT5lY2FwID0gZG1hcl9yZWFkcShpb21tdS0+cmVnICsgRE1BUl9FQ0FQX1JFRyk7CiAKKwlpZiAoaW9tbXUtPmNhcCA9PSAodWludDY0X3QpLTEgJiYgaW9tbXUtPmVjYXAgPT0gKHVpbnQ2NF90KS0xKSB7CisJCS8qIFByb21vdGUgYW4gYXR0aXR1ZGUgb2YgdmlvbGVuY2UgdG8gYSBCSU9TIGVuZ2luZWVyIHRvZGF5ICovCisJCVdBUk4oMSwgIllvdXIgQklPUyBpcyBicm9rZW47IERNQVIgcmVwb3J0ZWQgYXQgYWRkcmVzcyAlbGx4IHJldHVybnMgYWxsIG9uZXMhXG4iCisJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJICAgICBkcmhkLT5yZWdfYmFzZV9hZGRyLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisKICNpZmRlZiBDT05GSUdfRE1BUgogCWFnYXcgPSBpb21tdV9jYWxjdWxhdGVfYWdhdyhpb21tdSk7CiAJaWYgKGFnYXcgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIkNhbm5vdCBnZXQgYSB2YWxpZCBhZ2F3IGZvciBpb21tdSAoc2VxX2lkID0gJWQpXG4iLAogCQkgICAgICAgaW9tbXUtPnNlcV9pZCk7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyX3VubWFwOwogCX0KIAltc2FnYXcgPSBpb21tdV9jYWxjdWxhdGVfbWF4X3NhZ2F3KGlvbW11KTsKIAlpZiAobXNhZ2F3IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJDYW5ub3QgZ2V0IGEgdmFsaWQgbWF4IGFnYXcgZm9yIGlvbW11IChzZXFfaWQgPSAlZClcbiIsCiAJCQlpb21tdS0+c2VxX2lkKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBlcnJfdW5tYXA7CiAJfQogI2VuZGlmCiAJaW9tbXUtPmFnYXcgPSBhZ2F3OwpAQCAtNjcyLDcgKzY4MCw3IEBACiAJfQogCiAJdmVyID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfVkVSX1JFRyk7Ci0JcHJfZGVidWcoIklPTU1VICVsbHg6IHZlciAlZDolZCBjYXAgJWxseCBlY2FwICVsbHhcbiIsCisJcHJfaW5mbygiSU9NTVUgJWxseDogdmVyICVkOiVkIGNhcCAlbGx4IGVjYXAgJWxseFxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylkcmhkLT5yZWdfYmFzZV9hZGRyLAogCQlETUFSX1ZFUl9NQUpPUih2ZXIpLCBETUFSX1ZFUl9NSU5PUih2ZXIpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWlvbW11LT5jYXAsCkBAIC02ODIsNyArNjkwLDEwIEBACiAKIAlkcmhkLT5pb21tdSA9IGlvbW11OwogCXJldHVybiAwOwotZXJyb3I6CisKKyBlcnJfdW5tYXA6CisJaW91bm1hcChpb21tdS0+cmVnKTsKKyBlcnJvcjoKIAlrZnJlZShpb21tdSk7CiAJcmV0dXJuIC0xOwogfQpAQCAtMTIxOSw3ICsxMjMwLDcgQEAKIAkJCQlzb3VyY2VfaWQsIGd1ZXN0X2FkZHIpOwogCiAJCWZhdWx0X2luZGV4Kys7Ci0JCWlmIChmYXVsdF9pbmRleCA+IGNhcF9udW1fZmF1bHRfcmVncyhpb21tdS0+Y2FwKSkKKwkJaWYgKGZhdWx0X2luZGV4ID49IGNhcF9udW1fZmF1bHRfcmVncyhpb21tdS0+Y2FwKSkKIAkJCWZhdWx0X2luZGV4ID0gMDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKIAl9CkBAIC0xMzEyLDMgKzEzMjMsMTMgQEAKIAogCXJldHVybiAwOwogfQorCisvKgorICogQ2hlY2sgaW50ZXJydXB0IHJlbWFwcGluZyBzdXBwb3J0IGluIERNQVIgdGFibGUgZGVzY3JpcHRpb24uCisgKi8KK2ludCBkbWFyX2lyX3N1cHBvcnQodm9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOworCWRtYXIgPSAoc3RydWN0IGFjcGlfdGFibGVfZG1hciAqKWRtYXJfdGJsOworCXJldHVybiBkbWFyLT5mbGFncyAmIDB4MTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYwppbmRleCA1YmVmYTdlLi5hOWQ5MjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCkBAIC0zOTgsMjMgKzM5OCwyMSBAQAogCWFjcGlfaGFuZGxlICpwaGFuZGxlID0gKGFjcGlfaGFuZGxlICopY29udGV4dDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7IAogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBpbmZvX2J1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm9fYnVmZmVyKTsKKwlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZXJyKCIlczogIEZhaWxlZCB0byBnZXQgZGV2aWNlIGluZm9ybWF0aW9uIHN0YXR1cz0weCV4XG4iLAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWluZm8gPSBpbmZvX2J1ZmZlci5wb2ludGVyOwotCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSkgLSAxXSA9ICdcMCc7CisJaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZC5sZW5ndGgpIC0gMV0gPSAnXDAnOwogCiAJaWYgKGluZm8tPmN1cnJlbnRfc3RhdHVzICYmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgotCQkJKCFzdHJjbXAoaW5mby0+aGFyZHdhcmVfaWQudmFsdWUsIElCTV9IQVJEV0FSRV9JRDEpIHx8Ci0JCQkgIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwgSUJNX0hBUkRXQVJFX0lEMikpKSB7CisJCQkoIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsIElCTV9IQVJEV0FSRV9JRDEpIHx8CisJCQkgIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsIElCTV9IQVJEV0FSRV9JRDIpKSkgewogCQlkYmcoImZvdW5kIGhhcmR3YXJlOiAlcywgaGFuZGxlOiAlcFxuIiwKLQkJCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlLCBoYW5kbGUpOworCQkJaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nLCBoYW5kbGUpOwogCQkqcGhhbmRsZSA9IGhhbmRsZTsKIAkJLyogcmV0dXJuaW5nIG5vbi16ZXJvIGNhdXNlcyB0aGUgc2VhcmNoIHRvIHN0b3AKIAkJICogYW5kIHJldHVybnMgdGhpcyB2YWx1ZSB0byB0aGUgY2FsbGVyIG9mIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggNTYyMjIxZS4uODU1ZGQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSAicGNpLmgiCkBAIC01Niw4ICs1NywxNCBAQAogCiAjZGVmaW5lIE1BWF9BR0FXX1dJRFRIIDY0CiAKLSNkZWZpbmUgRE9NQUlOX01BWF9BRERSKGdhdykgKCgoKHU2NCkxKSA8PCBnYXcpIC0gMSkKLSNkZWZpbmUgRE9NQUlOX01BWF9QRk4oZ2F3KSAgKCgoKHU2NCkxKSA8PCAoZ2F3LVZURF9QQUdFX1NISUZUKSkgLSAxKQorI2RlZmluZSBfX0RPTUFJTl9NQVhfUEZOKGdhdykgICgoKCh1aW50NjRfdCkxKSA8PCAoZ2F3LVZURF9QQUdFX1NISUZUKSkgLSAxKQorI2RlZmluZSBfX0RPTUFJTl9NQVhfQUREUihnYXcpICgoKCh1aW50NjRfdCkxKSA8PCBnYXcpIC0gMSkKKworLyogV2UgbGltaXQgRE9NQUlOX01BWF9QRk4gdG8gZml0IGluIGFuIHVuc2lnbmVkIGxvbmcsIGFuZCBET01BSU5fTUFYX0FERFIKKyAgIHRvIG1hdGNoLiBUaGF0IHdheSwgd2UgY2FuIHVzZSAndW5zaWduZWQgbG9uZycgZm9yIFBGTnMgd2l0aCBpbXB1bml0eS4gKi8KKyNkZWZpbmUgRE9NQUlOX01BWF9QRk4oZ2F3KQkoKHVuc2lnbmVkIGxvbmcpIG1pbl90KHVpbnQ2NF90LCBcCisJCQkJX19ET01BSU5fTUFYX1BGTihnYXcpLCAodW5zaWduZWQgbG9uZyktMSkpCisjZGVmaW5lIERPTUFJTl9NQVhfQUREUihnYXcpCSgoKHVpbnQ2NF90KV9fRE9NQUlOX01BWF9QRk4oZ2F3KSkgPDwgVlREX1BBR0VfU0hJRlQpCiAKICNkZWZpbmUgSU9WQV9QRk4oYWRkcikJCSgoYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgRE1BXzMyQklUX1BGTgkJSU9WQV9QRk4oRE1BX0JJVF9NQVNLKDMyKSkKQEAgLTI1Miw3ICsyNTksOCBAQAogICogCTIuIEl0IG1hcHMgdG8gZWFjaCBpb21tdSBpZiBzdWNjZXNzZnVsLgogICoJMy4gRWFjaCBpb21tdSBtYXBwcyB0byB0aGlzIGRvbWFpbiBpZiBzdWNjZXNzZnVsLgogICovCi1zdHJ1Y3QgZG1hcl9kb21haW4gKnNpX2RvbWFpbjsKK3N0YXRpYyBzdHJ1Y3QgZG1hcl9kb21haW4gKnNpX2RvbWFpbjsKK3N0YXRpYyBpbnQgaHdfcGFzc190aHJvdWdoID0gMTsKIAogLyogZGV2aWNlcyB1bmRlciB0aGUgc2FtZSBwMnAgYnJpZGdlIGFyZSBvd25lZCBpbiBvbmUgZG9tYWluICovCiAjZGVmaW5lIERPTUFJTl9GTEFHX1AyUF9NVUxUSVBMRV9ERVZJQ0VTICgxIDw8IDApCkBAIC03MjgsNyArNzM2LDcgQEAKIAkJCQlyZXR1cm4gTlVMTDsKIAogCQkJZG9tYWluX2ZsdXNoX2NhY2hlKGRvbWFpbiwgdG1wX3BhZ2UsIFZURF9QQUdFX1NJWkUpOwotCQkJcHRldmFsID0gKHZpcnRfdG9fZG1hX3Bmbih0bXBfcGFnZSkgPDwgVlREX1BBR0VfU0hJRlQpIHwgRE1BX1BURV9SRUFEIHwgRE1BX1BURV9XUklURTsKKwkJCXB0ZXZhbCA9ICgodWludDY0X3QpdmlydF90b19kbWFfcGZuKHRtcF9wYWdlKSA8PCBWVERfUEFHRV9TSElGVCkgfCBETUFfUFRFX1JFQUQgfCBETUFfUFRFX1dSSVRFOwogCQkJaWYgKGNtcHhjaGc2NCgmcHRlLT52YWwsIDBVTEwsIHB0ZXZhbCkpIHsKIAkJCQkvKiBTb21lb25lIGVsc2Ugc2V0IGl0IHdoaWxlIHdlIHdlcmUgdGhpbmtpbmc7IHVzZSB0aGVpcnMuICovCiAJCQkJZnJlZV9wZ3RhYmxlX3BhZ2UodG1wX3BhZ2UpOwpAQCAtNzc4LDkgKzc4NiwxMCBAQAogCiAJQlVHX09OKGFkZHJfd2lkdGggPCBCSVRTX1BFUl9MT05HICYmIHN0YXJ0X3BmbiA+PiBhZGRyX3dpZHRoKTsKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgbGFzdF9wZm4gPj4gYWRkcl93aWR0aCk7CisJQlVHX09OKHN0YXJ0X3BmbiA+IGxhc3RfcGZuKTsKIAogCS8qIHdlIGRvbid0IG5lZWQgbG9jayBoZXJlOyBub2JvZHkgZWxzZSB0b3VjaGVzIHRoZSBpb3ZhIHJhbmdlICovCi0Jd2hpbGUgKHN0YXJ0X3BmbiA8PSBsYXN0X3BmbikgeworCWRvIHsKIAkJZmlyc3RfcHRlID0gcHRlID0gZG1hX3Bmbl9sZXZlbF9wdGUoZG9tYWluLCBzdGFydF9wZm4sIDEpOwogCQlpZiAoIXB0ZSkgewogCQkJc3RhcnRfcGZuID0gYWxpZ25fdG9fbGV2ZWwoc3RhcnRfcGZuICsgMSwgMik7CkBAIC03OTQsNyArODAzLDggQEAKIAogCQlkb21haW5fZmx1c2hfY2FjaGUoZG9tYWluLCBmaXJzdF9wdGUsCiAJCQkJICAgKHZvaWQgKilwdGUgLSAodm9pZCAqKWZpcnN0X3B0ZSk7Ci0JfQorCisJfSB3aGlsZSAoc3RhcnRfcGZuICYmIHN0YXJ0X3BmbiA8PSBsYXN0X3Bmbik7CiB9CiAKIC8qIGZyZWUgcGFnZSB0YWJsZSBwYWdlcy4gbGFzdCBsZXZlbCBwdGUgc2hvdWxkIGFscmVhZHkgYmUgY2xlYXJlZCAqLwpAQCAtODEwLDYgKzgyMCw3IEBACiAKIAlCVUdfT04oYWRkcl93aWR0aCA8IEJJVFNfUEVSX0xPTkcgJiYgc3RhcnRfcGZuID4+IGFkZHJfd2lkdGgpOwogCUJVR19PTihhZGRyX3dpZHRoIDwgQklUU19QRVJfTE9ORyAmJiBsYXN0X3BmbiA+PiBhZGRyX3dpZHRoKTsKKwlCVUdfT04oc3RhcnRfcGZuID4gbGFzdF9wZm4pOwogCiAJLyogV2UgZG9uJ3QgbmVlZCBsb2NrIGhlcmU7IG5vYm9keSBlbHNlIHRvdWNoZXMgdGhlIGlvdmEgcmFuZ2UgKi8KIAlsZXZlbCA9IDI7CkBAIC04MjAsNyArODMxLDcgQEAKIAkJaWYgKHRtcCArIGxldmVsX3NpemUobGV2ZWwpIC0gMSA+IGxhc3RfcGZuKQogCQkJcmV0dXJuOwogCi0JCXdoaWxlICh0bXAgKyBsZXZlbF9zaXplKGxldmVsKSAtIDEgPD0gbGFzdF9wZm4pIHsKKwkJZG8gewogCQkJZmlyc3RfcHRlID0gcHRlID0gZG1hX3Bmbl9sZXZlbF9wdGUoZG9tYWluLCB0bXAsIGxldmVsKTsKIAkJCWlmICghcHRlKSB7CiAJCQkJdG1wID0gYWxpZ25fdG9fbGV2ZWwodG1wICsgMSwgbGV2ZWwgKyAxKTsKQEAgLTgzOSw3ICs4NTAsNyBAQAogCQkJZG9tYWluX2ZsdXNoX2NhY2hlKGRvbWFpbiwgZmlyc3RfcHRlLAogCQkJCQkgICAodm9pZCAqKXB0ZSAtICh2b2lkICopZmlyc3RfcHRlKTsKIAkJCQotCQl9CisJCX0gd2hpbGUgKHRtcCAmJiB0bXAgKyBsZXZlbF9zaXplKGxldmVsKSAtIDEgPD0gbGFzdF9wZm4pOwogCQlsZXZlbCsrOwogCX0KIAkvKiBmcmVlIHBnZCAqLwpAQCAtMTE1OCw2ICsxMTY5LDggQEAKIAlwcl9kZWJ1ZygiTnVtYmVyIG9mIERvbWFpbnMgc3VwcG9ydGQgPCVsZD5cbiIsIG5kb21haW5zKTsKIAlubG9uZ3MgPSBCSVRTX1RPX0xPTkdTKG5kb21haW5zKTsKIAorCXNwaW5fbG9ja19pbml0KCZpb21tdS0+bG9jayk7CisKIAkvKiBUQkQ6IHRoZXJlIG1pZ2h0IGJlIDY0SyBkb21haW5zLAogCSAqIGNvbnNpZGVyIG90aGVyIGFsbG9jYXRpb24gZm9yIGZ1dHVyZSBjaGlwCiAJICovCkBAIC0xMTcwLDEyICsxMTgzLDkgQEAKIAkJCUdGUF9LRVJORUwpOwogCWlmICghaW9tbXUtPmRvbWFpbnMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBbGxvY2F0aW5nIGRvbWFpbiBhcnJheSBmYWlsZWRcbiIpOwotCQlrZnJlZShpb21tdS0+ZG9tYWluX2lkcyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZpb21tdS0+bG9jayk7Ci0KIAkvKgogCSAqIGlmIENhY2hpbmcgbW9kZSBpcyBzZXQsIHRoZW4gaW52YWxpZCB0cmFuc2xhdGlvbnMgYXJlIHRhZ2dlZAogCSAqIHdpdGggZG9tYWluaWQgMC4gSGVuY2Ugd2UgbmVlZCB0byBwcmUtYWxsb2NhdGUgaXQuCkBAIC0xMTk1LDIyICsxMjA1LDI0IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWkgPSBmaW5kX2ZpcnN0X2JpdChpb21tdS0+ZG9tYWluX2lkcywgY2FwX25kb21zKGlvbW11LT5jYXApKTsKLQlmb3IgKDsgaSA8IGNhcF9uZG9tcyhpb21tdS0+Y2FwKTsgKSB7Ci0JCWRvbWFpbiA9IGlvbW11LT5kb21haW5zW2ldOwotCQljbGVhcl9iaXQoaSwgaW9tbXUtPmRvbWFpbl9pZHMpOworCWlmICgoaW9tbXUtPmRvbWFpbnMpICYmIChpb21tdS0+ZG9tYWluX2lkcykpIHsKKwkJaSA9IGZpbmRfZmlyc3RfYml0KGlvbW11LT5kb21haW5faWRzLCBjYXBfbmRvbXMoaW9tbXUtPmNhcCkpOworCQlmb3IgKDsgaSA8IGNhcF9uZG9tcyhpb21tdS0+Y2FwKTsgKSB7CisJCQlkb21haW4gPSBpb21tdS0+ZG9tYWluc1tpXTsKKwkJCWNsZWFyX2JpdChpLCBpb21tdS0+ZG9tYWluX2lkcyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOwotCQlpZiAoLS1kb21haW4tPmlvbW11X2NvdW50ID09IDApIHsKLQkJCWlmIChkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKQotCQkJCXZtX2RvbWFpbl9leGl0KGRvbWFpbik7Ci0JCQllbHNlCi0JCQkJZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmlvbW11X2xvY2ssIGZsYWdzKTsKKwkJCWlmICgtLWRvbWFpbi0+aW9tbXVfY291bnQgPT0gMCkgeworCQkJCWlmIChkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKQorCQkJCQl2bV9kb21haW5fZXhpdChkb21haW4pOworCQkJCWVsc2UKKwkJCQkJZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOworCisJCQlpID0gZmluZF9uZXh0X2JpdChpb21tdS0+ZG9tYWluX2lkcywKKwkJCQljYXBfbmRvbXMoaW9tbXUtPmNhcCksIGkrMSk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5pb21tdV9sb2NrLCBmbGFncyk7Ci0KLQkJaSA9IGZpbmRfbmV4dF9iaXQoaW9tbXUtPmRvbWFpbl9pZHMsCi0JCQljYXBfbmRvbXMoaW9tbXUtPmNhcCksIGkrMSk7CiAJfQogCiAJaWYgKGlvbW11LT5nY21kICYgRE1BX0dDTURfVEUpCkBAIC0xMzEwLDcgKzEzMjIsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlvdmFfZG9tYWluIHJlc2VydmVkX2lvdmFfbGlzdDsKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmVzZXJ2ZWRfYWxsb2Nfa2V5Owogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByZXNlcnZlZF9yYnRyZWVfa2V5OwogCiBzdGF0aWMgdm9pZCBkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKHZvaWQpCkBAIC0xMzIxLDggKzEzMzIsNiBAQAogCiAJaW5pdF9pb3ZhX2RvbWFpbigmcmVzZXJ2ZWRfaW92YV9saXN0LCBETUFfMzJCSVRfUEZOKTsKIAotCWxvY2tkZXBfc2V0X2NsYXNzKCZyZXNlcnZlZF9pb3ZhX2xpc3QuaW92YV9hbGxvY19sb2NrLAotCQkmcmVzZXJ2ZWRfYWxsb2Nfa2V5KTsKIAlsb2NrZGVwX3NldF9jbGFzcygmcmVzZXJ2ZWRfaW92YV9saXN0LmlvdmFfcmJ0cmVlX2xvY2ssCiAJCSZyZXNlcnZlZF9yYnRyZWVfa2V5KTsKIApAQCAtMTk1OSwxNCArMTk2OCwzNSBAQAogCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluOwogCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJJT01NVTogU2V0dGluZyBpZGVudGl0eSBtYXAgZm9yIGRldmljZSAlcyBbMHglTHggLSAweCVMeF1cbiIsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpLCBzdGFydCwgZW5kKTsKLQogCWRvbWFpbiA9IGdldF9kb21haW5fZm9yX2RldihwZGV2LCBERUZBVUxUX0RPTUFJTl9BRERSRVNTX1dJRFRIKTsKIAlpZiAoIWRvbWFpbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBGb3IgX2hhcmR3YXJlXyBwYXNzdGhyb3VnaCwgZG9uJ3QgYm90aGVyLiBCdXQgZm9yIHNvZnR3YXJlCisJICAgcGFzc3Rocm91Z2gsIHdlIGRvIGl0IGFueXdheSAtLSBpdCBtYXkgaW5kaWNhdGUgYSBtZW1vcnkKKwkgICByYW5nZSB3aGljaCBpcyByZXNlcnZlZCBpbiBFODIwLCBzbyB3aGljaCBkaWRuJ3QgZ2V0IHNldAorCSAgIHVwIHRvIHN0YXJ0IHdpdGggaW4gc2lfZG9tYWluICovCisJaWYgKGRvbWFpbiA9PSBzaV9kb21haW4gJiYgaHdfcGFzc190aHJvdWdoKSB7CisJCXByaW50aygiSWdub3JpbmcgaWRlbnRpdHkgbWFwIGZvciBIVyBwYXNzdGhyb3VnaCBkZXZpY2UgJXMgWzB4JUx4IC0gMHglTHhdXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldiksIHN0YXJ0LCBlbmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJJT01NVTogU2V0dGluZyBpZGVudGl0eSBtYXAgZm9yIGRldmljZSAlcyBbMHglTHggLSAweCVMeF1cbiIsCisJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBzdGFydCwgZW5kKTsKKwkKKwlpZiAoZW5kID4+IGFnYXdfdG9fd2lkdGgoZG9tYWluLT5hZ2F3KSkgeworCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBSTVJSIGV4Y2VlZHMgcGVybWl0dGVkIGFkZHJlc3Mgd2lkdGggKCVkIGJpdHMpXG4iCisJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJICAgICBhZ2F3X3RvX3dpZHRoKGRvbWFpbi0+YWdhdyksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVSU0lPTiksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCiAJcmV0ID0gaW9tbXVfZG9tYWluX2lkZW50aXR5X21hcChkb21haW4sIHN0YXJ0LCBlbmQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CkBAIC0yMDE3LDIzICsyMDQ3LDYgQEAKIH0KICNlbmRpZiAvKiAhQ09ORklHX0RNQVJfRkxQWV9XQSAqLwogCi0vKiBJbml0aWFsaXplIGVhY2ggY29udGV4dCBlbnRyeSBhcyBwYXNzIHRocm91Z2guKi8KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfY29udGV4dF9wYXNzX3Rocm91Z2godm9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7Ci0Jc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47Ci0JaW50IHJldDsKLQotCWZvcl9lYWNoX3BjaV9kZXYocGRldikgewotCQlkb21haW4gPSBnZXRfZG9tYWluX2Zvcl9kZXYocGRldiwgREVGQVVMVF9ET01BSU5fQUREUkVTU19XSURUSCk7Ci0JCXJldCA9IGRvbWFpbl9jb250ZXh0X21hcHBpbmcoZG9tYWluLCBwZGV2LAotCQkJCQkgICAgIENPTlRFWFRfVFRfUEFTU19USFJPVUdIKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1kX2RvbWFpbl9pbml0KHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCBpbnQgZ3Vlc3Rfd2lkdGgpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzaV9kb21haW5fd29ya19mbih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKQEAgLTIwNDgsNyArMjA2MSw3IEBACiAKIH0KIAotc3RhdGljIGludCBzaV9kb21haW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2lfZG9tYWluX2luaXQoaW50IGh3KQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwpAQCAtMjA3NSw2ICsyMDg4LDkgQEAKIAogCXNpX2RvbWFpbi0+ZmxhZ3MgPSBET01BSU5fRkxBR19TVEFUSUNfSURFTlRJVFk7CiAKKwlpZiAoaHcpCisJCXJldHVybiAwOworCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCXdvcmtfd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQsIHNpX2RvbWFpbl93b3JrX2ZuLCAmcmV0KTsKIAkJaWYgKHJldCkKQEAgLTIxMDEsMTUgKzIxMTcsMjMgQEAKIH0KIAogc3RhdGljIGludCBkb21haW5fYWRkX2Rldl9pbmZvKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLAotCQkJCSAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCisJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgaW50IHRyYW5zbGF0aW9uKQogewogCXN0cnVjdCBkZXZpY2VfZG9tYWluX2luZm8gKmluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCiAJaW5mbyA9IGFsbG9jX2RldmluZm9fbWVtKCk7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXJldCA9IGRvbWFpbl9jb250ZXh0X21hcHBpbmcoZG9tYWluLCBwZGV2LCB0cmFuc2xhdGlvbik7CisJaWYgKHJldCkgeworCQlmcmVlX2RldmluZm9fbWVtKGluZm8pOworCQlyZXR1cm4gcmV0OworCX0KKwogCWluZm8tPnNlZ21lbnQgPSBwY2lfZG9tYWluX25yKHBkZXYtPmJ1cyk7CiAJaW5mby0+YnVzID0gcGRldi0+YnVzLT5udW1iZXI7CiAJaW5mby0+ZGV2Zm4gPSBwZGV2LT5kZXZmbjsKQEAgLTIxNjYsMjcgKzIxOTAsMjUgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpb21tdV9wcmVwYXJlX3N0YXRpY19pZGVudGl0eV9tYXBwaW5nKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpb21tdV9wcmVwYXJlX3N0YXRpY19pZGVudGl0eV9tYXBwaW5nKGludCBodykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAJaW50IHJldDsKIAotCXJldCA9IHNpX2RvbWFpbl9pbml0KCk7CisJcmV0ID0gc2lfZG9tYWluX2luaXQoaHcpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CiAJCWlmIChpb21tdV9zaG91bGRfaWRlbnRpdHlfbWFwKHBkZXYsIDEpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJJT01NVTogaWRlbnRpdHkgbWFwcGluZyBmb3IgZGV2aWNlICVzXG4iLAotCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIklPTU1VOiAlcyBpZGVudGl0eSBtYXBwaW5nIGZvciBkZXZpY2UgJXNcbiIsCisJCQkgICAgICAgaHcgPyAiaGFyZHdhcmUiIDogInNvZnR3YXJlIiwgcGNpX25hbWUocGRldikpOwogCi0JCQlyZXQgPSBkb21haW5fY29udGV4dF9tYXBwaW5nKHNpX2RvbWFpbiwgcGRldiwKKwkJCXJldCA9IGRvbWFpbl9hZGRfZGV2X2luZm8oc2lfZG9tYWluLCBwZGV2LAorCQkJCQkJICAgICBodyA/IENPTlRFWFRfVFRfUEFTU19USFJPVUdIIDoKIAkJCQkJCSAgICAgQ09OVEVYVF9UVF9NVUxUSV9MRVZFTCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7Ci0JCQlyZXQgPSBkb21haW5fYWRkX2Rldl9pbmZvKHNpX2RvbWFpbiwgcGRldik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTIyMDAsMTQgKzIyMjIsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJaW50IGksIHJldDsKLQlpbnQgcGFzc190aHJvdWdoID0gMTsKLQotCS8qCi0JICogSW4gY2FzZSBwYXNzIHRocm91Z2ggY2FuIG5vdCBiZSBlbmFibGVkLCBpb21tdSB0cmllcyB0byB1c2UgaWRlbnRpdHkKLQkgKiBtYXBwaW5nLgotCSAqLwotCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAxOwogCiAJLyoKIAkgKiBmb3IgZWFjaCBkcmhkCkBAIC0yMjM1LDcgKzIyNDksNiBAQAogCWRlZmVycmVkX2ZsdXNoID0ga3phbGxvYyhnX251bV9vZl9pb21tdXMgKgogCQlzaXplb2Yoc3RydWN0IGRlZmVycmVkX2ZsdXNoX3RhYmxlcyksIEdGUF9LRVJORUwpOwogCWlmICghZGVmZXJyZWRfZmx1c2gpIHsKLQkJa2ZyZWUoZ19pb21tdXMpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTIyNjIsMTQgKzIyNzUsOCBAQAogCQkJZ290byBlcnJvcjsKIAkJfQogCQlpZiAoIWVjYXBfcGFzc190aHJvdWdoKGlvbW11LT5lY2FwKSkKLQkJCXBhc3NfdGhyb3VnaCA9IDA7CisJCQlod19wYXNzX3Rocm91Z2ggPSAwOwogCX0KLQlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQotCQlpZiAoIXBhc3NfdGhyb3VnaCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJQYXNzIFRocm91Z2ggaXMgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS5cbiIpOwotCQkJaW9tbXVfcGFzc190aHJvdWdoID0gMDsKLQkJfQogCiAJLyoKIAkgKiBTdGFydCBmcm9tIHRoZSBzYW5lIGlvbW11IGhhcmR3YXJlIHN0YXRlLgpAQCAtMjMyNCw2MyArMjMzMSw1NiBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBJZiBwYXNzIHRocm91Z2ggaXMgc2V0IGFuZCBlbmFibGVkLCBjb250ZXh0IGVudHJpZXMgb2YgYWxsIHBjaQotCSAqIGRldmljZXMgYXJlIGludGlhbGl6ZWQgYnkgcGFzcyB0aHJvdWdoIHRyYW5zbGF0aW9uIHR5cGUuCi0JICovCi0JaWYgKGlvbW11X3Bhc3NfdGhyb3VnaCkgewotCQlyZXQgPSBpbml0X2NvbnRleHRfcGFzc190aHJvdWdoKCk7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IFBhc3MgdGhyb3VnaCBpbml0IGZhaWxlZC5cbiIpOwotCQkJaW9tbXVfcGFzc190aHJvdWdoID0gMDsKLQkJfQotCX0KLQorCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAxOworI2lmZGVmIENPTkZJR19ETUFSX0JST0tFTl9HRlhfV0EKKwllbHNlCisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAyOworI2VuZGlmCiAJLyoKIAkgKiBJZiBwYXNzIHRocm91Z2ggaXMgbm90IHNldCBvciBub3QgZW5hYmxlZCwgc2V0dXAgY29udGV4dCBlbnRyaWVzIGZvcgogCSAqIGlkZW50aXR5IG1hcHBpbmdzIGZvciBybXJyLCBnZngsIGFuZCBpc2EgYW5kIG1heSBmYWxsIGJhY2sgdG8gc3RhdGljCiAJICogaWRlbnRpdHkgbWFwcGluZyBpZiBpb21tdV9pZGVudGl0eV9tYXBwaW5nIGlzIHNldC4KIAkgKi8KLQlpZiAoIWlvbW11X3Bhc3NfdGhyb3VnaCkgewotI2lmZGVmIENPTkZJR19ETUFSX0JST0tFTl9HRlhfV0EKLQkJaWYgKCFpb21tdV9pZGVudGl0eV9tYXBwaW5nKQotCQkJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyA9IDI7Ci0jZW5kaWYKLQkJaWYgKGlvbW11X2lkZW50aXR5X21hcHBpbmcpCi0JCQlpb21tdV9wcmVwYXJlX3N0YXRpY19pZGVudGl0eV9tYXBwaW5nKCk7Ci0JCS8qCi0JCSAqIEZvciBlYWNoIHJtcnIKLQkJICogICBmb3IgZWFjaCBkZXYgYXR0YWNoZWQgdG8gcm1ycgotCQkgKiAgIGRvCi0JCSAqICAgICBsb2NhdGUgZHJoZCBmb3IgZGV2LCBhbGxvYyBkb21haW4gZm9yIGRldgotCQkgKiAgICAgYWxsb2NhdGUgZnJlZSBkb21haW4KLQkJICogICAgIGFsbG9jYXRlIHBhZ2UgdGFibGUgZW50cmllcyBmb3Igcm1ycgotCQkgKiAgICAgaWYgY29udGV4dCBub3QgYWxsb2NhdGVkIGZvciBidXMKLQkJICogICAgICAgICAgIGFsbG9jYXRlIGFuZCBpbml0IGNvbnRleHQKLQkJICogICAgICAgICAgIHNldCBwcmVzZW50IGluIHJvb3QgdGFibGUgZm9yIHRoaXMgYnVzCi0JCSAqICAgICBpbml0IGNvbnRleHQgd2l0aCBkb21haW4sIHRyYW5zbGF0aW9uIGV0YwotCQkgKiAgICBlbmRmb3IKLQkJICogZW5kZm9yCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICJJT01NVTogU2V0dGluZyBSTVJSOlxuIik7Ci0JCWZvcl9lYWNoX3JtcnJfdW5pdHMocm1ycikgewotCQkJZm9yIChpID0gMDsgaSA8IHJtcnItPmRldmljZXNfY250OyBpKyspIHsKLQkJCQlwZGV2ID0gcm1yci0+ZGV2aWNlc1tpXTsKLQkJCQkvKgotCQkJCSAqIHNvbWUgQklPUyBsaXN0cyBub24tZXhpc3QgZGV2aWNlcyBpbiBETUFSCi0JCQkJICogdGFibGUuCi0JCQkJICovCi0JCQkJaWYgKCFwZGV2KQotCQkJCQljb250aW51ZTsKLQkJCQlyZXQgPSBpb21tdV9wcmVwYXJlX3JtcnJfZGV2KHJtcnIsIHBkZXYpOwotCQkJCWlmIChyZXQpCi0JCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAiSU9NTVU6IG1hcHBpbmcgcmVzZXJ2ZWQgcmVnaW9uIGZhaWxlZFxuIik7Ci0JCQl9CisJaWYgKGlvbW11X2lkZW50aXR5X21hcHBpbmcpIHsKKwkJcmV0ID0gaW9tbXVfcHJlcGFyZV9zdGF0aWNfaWRlbnRpdHlfbWFwcGluZyhod19wYXNzX3Rocm91Z2gpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9DUklUICJGYWlsZWQgdG8gc2V0dXAgSU9NTVUgcGFzcy10aHJvdWdoXG4iKTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KLQotCQlpb21tdV9wcmVwYXJlX2lzYSgpOwogCX0KKwkvKgorCSAqIEZvciBlYWNoIHJtcnIKKwkgKiAgIGZvciBlYWNoIGRldiBhdHRhY2hlZCB0byBybXJyCisJICogICBkbworCSAqICAgICBsb2NhdGUgZHJoZCBmb3IgZGV2LCBhbGxvYyBkb21haW4gZm9yIGRldgorCSAqICAgICBhbGxvY2F0ZSBmcmVlIGRvbWFpbgorCSAqICAgICBhbGxvY2F0ZSBwYWdlIHRhYmxlIGVudHJpZXMgZm9yIHJtcnIKKwkgKiAgICAgaWYgY29udGV4dCBub3QgYWxsb2NhdGVkIGZvciBidXMKKwkgKiAgICAgICAgICAgYWxsb2NhdGUgYW5kIGluaXQgY29udGV4dAorCSAqICAgICAgICAgICBzZXQgcHJlc2VudCBpbiByb290IHRhYmxlIGZvciB0aGlzIGJ1cworCSAqICAgICBpbml0IGNvbnRleHQgd2l0aCBkb21haW4sIHRyYW5zbGF0aW9uIGV0YworCSAqICAgIGVuZGZvcgorCSAqIGVuZGZvcgorCSAqLworCXByaW50ayhLRVJOX0lORk8gIklPTU1VOiBTZXR0aW5nIFJNUlI6XG4iKTsKKwlmb3JfZWFjaF9ybXJyX3VuaXRzKHJtcnIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJtcnItPmRldmljZXNfY250OyBpKyspIHsKKwkJCXBkZXYgPSBybXJyLT5kZXZpY2VzW2ldOworCQkJLyoKKwkJCSAqIHNvbWUgQklPUyBsaXN0cyBub24tZXhpc3QgZGV2aWNlcyBpbiBETUFSCisJCQkgKiB0YWJsZS4KKwkJCSAqLworCQkJaWYgKCFwZGV2KQorCQkJCWNvbnRpbnVlOworCQkJcmV0ID0gaW9tbXVfcHJlcGFyZV9ybXJyX2RldihybXJyLCBwZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJJT01NVTogbWFwcGluZyByZXNlcnZlZCByZWdpb24gZmFpbGVkXG4iKTsKKwkJfQorCX0KKworCWlvbW11X3ByZXBhcmVfaXNhKCk7CiAKIAkvKgogCSAqIGZvciBlYWNoIGRyaGQKQEAgLTI0MDQsMTEgKzI0MDQsMTIgQEAKIAogCQlpb21tdS0+Zmx1c2guZmx1c2hfY29udGV4dChpb21tdSwgMCwgMCwgMCwgRE1BX0NDTURfR0xPQkFMX0lOVkwpOwogCQlpb21tdS0+Zmx1c2guZmx1c2hfaW90bGIoaW9tbXUsIDAsIDAsIDAsIERNQV9UTEJfR0xPQkFMX0ZMVVNIKTsKLQkJaW9tbXVfZGlzYWJsZV9wcm90ZWN0X21lbV9yZWdpb25zKGlvbW11KTsKIAogCQlyZXQgPSBpb21tdV9lbmFibGVfdHJhbnNsYXRpb24oaW9tbXUpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcjsKKworCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoaW9tbXUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjQ1NSw4ICsyNDU2LDcgQEAKIAlyZXR1cm4gaW92YTsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWFyX2RvbWFpbiAqCi1nZXRfdmFsaWRfZG9tYWluX2Zvcl9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgc3RydWN0IGRtYXJfZG9tYWluICpfX2dldF92YWxpZF9kb21haW5fZm9yX2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbjsKIAlpbnQgcmV0OwpAQCAtMjQ4NCw2ICsyNDg0LDE4IEBACiAJcmV0dXJuIGRvbWFpbjsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hcl9kb21haW4gKmdldF92YWxpZF9kb21haW5fZm9yX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZG9tYWluX2luZm8gKmluZm87CisKKwkvKiBObyBsb2NrIGhlcmUsIGFzc3VtZXMgbm8gZG9tYWluIGV4aXQgaW4gbm9ybWFsIGNhc2UgKi8KKwlpbmZvID0gZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXU7CisJaWYgKGxpa2VseShpbmZvKSkKKwkJcmV0dXJuIGluZm8tPmRvbWFpbjsKKworCXJldHVybiBfX2dldF92YWxpZF9kb21haW5fZm9yX2RldihkZXYpOworfQorCiBzdGF0aWMgaW50IGlvbW11X2R1bW15KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXJldHVybiBwZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXUgPT0gRFVNTVlfREVWSUNFX0RPTUFJTl9JTkZPOwpAQCAtMjUyNiwxMCArMjUzOCwxMCBAQAogCQkgKi8KIAkJaWYgKGlvbW11X3Nob3VsZF9pZGVudGl0eV9tYXAocGRldiwgMCkpIHsKIAkJCWludCByZXQ7Ci0JCQlyZXQgPSBkb21haW5fYWRkX2Rldl9pbmZvKHNpX2RvbWFpbiwgcGRldik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiAwOwotCQkJcmV0ID0gZG9tYWluX2NvbnRleHRfbWFwcGluZyhzaV9kb21haW4sIHBkZXYsIENPTlRFWFRfVFRfTVVMVElfTEVWRUwpOworCQkJcmV0ID0gZG9tYWluX2FkZF9kZXZfaW5mbyhzaV9kb21haW4sIHBkZXYsCisJCQkJCQkgIGh3X3Bhc3NfdGhyb3VnaCA/CisJCQkJCQkgIENPTlRFWFRfVFRfUEFTU19USFJPVUdIIDoKKwkJCQkJCSAgQ09OVEVYVF9UVF9NVUxUSV9MRVZFTCk7CiAJCQlpZiAoIXJldCkgewogCQkJCXByaW50ayhLRVJOX0lORk8gIjY0Yml0ICVzIHVzZXMgaWRlbnRpdHkgbWFwcGluZ1xuIiwKIAkJCQkgICAgICAgcGNpX25hbWUocGRldikpOwpAQCAtMjYzOCwxMCArMjY1MCw5IEBACiAJCQl1bnNpZ25lZCBsb25nIG1hc2s7CiAJCQlzdHJ1Y3QgaW92YSAqaW92YSA9IGRlZmVycmVkX2ZsdXNoW2ldLmlvdmFbal07CiAKLQkJCW1hc2sgPSAoaW92YS0+cGZuX2hpIC0gaW92YS0+cGZuX2xvICsgMSkgPDwgUEFHRV9TSElGVDsKLQkJCW1hc2sgPSBpbG9nMihtYXNrID4+IFZURF9QQUdFX1NISUZUKTsKKwkJCW1hc2sgPSBpbG9nMihtbV90b19kbWFfcGZuKGlvdmEtPnBmbl9oaSAtIGlvdmEtPnBmbl9sbyArIDEpKTsKIAkJCWlvbW11X2ZsdXNoX2Rldl9pb3RsYihkZWZlcnJlZF9mbHVzaFtpXS5kb21haW5bal0sCi0JCQkJCWlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZULCBtYXNrKTsKKwkJCQkJKHVpbnQ2NF90KWlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZULCBtYXNrKTsKIAkJCV9fZnJlZV9pb3ZhKCZkZWZlcnJlZF9mbHVzaFtpXS5kb21haW5bal0tPmlvdmFkLCBpb3ZhKTsKIAkJfQogCQlkZWZlcnJlZF9mbHVzaFtpXS5uZXh0ID0gMDsKQEAgLTI3MzQsMTIgKzI3NDUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwgc2l6ZV90IHNpemUsCi0JCQkgICAgICAgaW50IGRpcikKLXsKLQlpbnRlbF91bm1hcF9wYWdlKGRldiwgZGV2X2FkZHIsIHNpemUsIGRpciwgTlVMTCk7Ci19Ci0KIHN0YXRpYyB2b2lkICppbnRlbF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCiAJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKIHsKQEAgLTI3NzIsNyArMjc3Nyw3IEBACiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAKLQlpbnRlbF91bm1hcF9zaW5nbGUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwlpbnRlbF91bm1hcF9wYWdlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCwgTlVMTCk7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgb3JkZXIpOwogfQogCkBAIC0yODA4LDExICsyODEzLDE4IEBACiAJLyogZnJlZSBwYWdlIHRhYmxlcyAqLwogCWRtYV9wdGVfZnJlZV9wYWdldGFibGUoZG9tYWluLCBzdGFydF9wZm4sIGxhc3RfcGZuKTsKIAotCWlvbW11X2ZsdXNoX2lvdGxiX3BzaShpb21tdSwgZG9tYWluLT5pZCwgc3RhcnRfcGZuLAotCQkJICAgICAgKGxhc3RfcGZuIC0gc3RhcnRfcGZuICsgMSkpOwotCi0JLyogZnJlZSBpb3ZhICovCi0JX19mcmVlX2lvdmEoJmRvbWFpbi0+aW92YWQsIGlvdmEpOworCWlmIChpbnRlbF9pb21tdV9zdHJpY3QpIHsKKwkJaW9tbXVfZmx1c2hfaW90bGJfcHNpKGlvbW11LCBkb21haW4tPmlkLCBzdGFydF9wZm4sCisJCQkJICAgICAgbGFzdF9wZm4gLSBzdGFydF9wZm4gKyAxKTsKKwkJLyogZnJlZSBpb3ZhICovCisJCV9fZnJlZV9pb3ZhKCZkb21haW4tPmlvdmFkLCBpb3ZhKTsKKwl9IGVsc2UgeworCQlhZGRfdW5tYXAoZG9tYWluLCBpb3ZhKTsKKwkJLyoKKwkJICogcXVldWUgdXAgdGhlIHJlbGVhc2Ugb2YgdGhlIHVubWFwIHRvIHNhdmUgdGhlIDEvNnRoIG9mIHRoZQorCQkgKiBjcHUgdXNlZCB1cCBieSB0aGUgaW90bGIgZmx1c2ggb3BlcmF0aW9uLi4uCisJCSAqLworCX0KIH0KIAogc3RhdGljIGludCBpbnRlbF9ub250cmFuc2xhdGVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmhkZGV2LApAQCAtMzA1Niw4ICszMDY4LDggQEAKIAkJCQkJICAgRE1BX0NDTURfR0xPQkFMX0lOVkwpOwogCQlpb21tdS0+Zmx1c2guZmx1c2hfaW90bGIoaW9tbXUsIDAsIDAsIDAsCiAJCQkJCSBETUFfVExCX0dMT0JBTF9GTFVTSCk7Ci0JCWlvbW11X2Rpc2FibGVfcHJvdGVjdF9tZW1fcmVnaW9ucyhpb21tdSk7CiAJCWlvbW11X2VuYWJsZV90cmFuc2xhdGlvbihpb21tdSk7CisJCWlvbW11X2Rpc2FibGVfcHJvdGVjdF9tZW1fcmVnaW9ucyhpb21tdSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMjA1LDcgKzMyMTcsNyBAQAogCSAqIENoZWNrIHRoZSBuZWVkIGZvciBETUEtcmVtYXBwaW5nIGluaXRpYWxpemF0aW9uIG5vdy4KIAkgKiBBYm92ZSBpbml0aWFsaXphdGlvbiB3aWxsIGFsc28gYmUgdXNlZCBieSBJbnRlcnJ1cHQtcmVtYXBwaW5nLgogCSAqLwotCWlmIChub19pb21tdSB8fCAoc3dpb3RsYiAmJiAhaW9tbXVfcGFzc190aHJvdWdoKSB8fCBkbWFyX2Rpc2FibGVkKQorCWlmIChub19pb21tdSB8fCBzd2lvdGxiIHx8IGRtYXJfZGlzYWJsZWQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaW9tbXVfaW5pdF9tZW1wb29sKCk7CkBAIC0zMjI3LDE0ICszMjM5LDcgQEAKIAogCWluaXRfdGltZXIoJnVubWFwX3RpbWVyKTsKIAlmb3JjZV9pb21tdSA9IDE7Ci0KLQlpZiAoIWlvbW11X3Bhc3NfdGhyb3VnaCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTXVsdGktbGV2ZWwgcGFnZS10YWJsZSB0cmFuc2xhdGlvbiBmb3IgRE1BUi5cbiIpOwotCQlkbWFfb3BzID0gJmludGVsX2RtYV9vcHM7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJETUFSOiBQYXNzIHRocm91Z2ggdHJhbnNsYXRpb24gZm9yIERNQVIuXG4iKTsKKwlkbWFfb3BzID0gJmludGVsX2RtYV9vcHM7CiAKIAlpbml0X2lvbW11X3N5c2ZzKCk7CiAKQEAgLTM1MTcsNyArMzUyMiw2IEBACiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlpbnQgYWRkcl93aWR0aDsKIAl1NjQgZW5kOwotCWludCByZXQ7CiAKIAkvKiBub3JtYWxseSBwZGV2IGlzIG5vdCBtYXBwZWQgKi8KIAlpZiAodW5saWtlbHkoZG9tYWluX2NvbnRleHRfbWFwcGVkKHBkZXYpKSkgewpAQCAtMzU0OSwxMiArMzU1Myw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldCA9IGRvbWFpbl9hZGRfZGV2X2luZm8oZG1hcl9kb21haW4sIHBkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBkb21haW5fY29udGV4dF9tYXBwaW5nKGRtYXJfZG9tYWluLCBwZGV2LCBDT05URVhUX1RUX01VTFRJX0xFVkVMKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBkb21haW5fYWRkX2Rldl9pbmZvKGRtYXJfZG9tYWluLCBwZGV2LCBDT05URVhUX1RUX01VTFRJX0xFVkVMKTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfaW9tbXVfZGV0YWNoX2RldmljZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA0NDgwMzY0Li4wZWQ3OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTYwMyw2ICs2MDMsOSBAQAogCWlmIChkaXNhYmxlX2ludHJlbWFwKQogCQlyZXR1cm4gMDsKIAorCWlmICghZG1hcl9pcl9zdXBwb3J0KCkpCisJCXJldHVybiAwOworCiAJZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKIAkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGRyaGQtPmlvbW11OwogCkBAIC02MTgsNiArNjIxLDExIEBACiAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOwogCWludCBzZXR1cCA9IDA7CiAKKwlpZiAocGFyc2VfaW9hcGljc191bmRlcl9pcigpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm90IGVuYWJsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7CiAJCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBkcmhkLT5pb21tdTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92YS5jIGIvZHJpdmVycy9wY2kvaW92YS5jCmluZGV4IDQ2ZGQ0NDAuLjc5MTQ5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdmEuYworKysgYi9kcml2ZXJzL3BjaS9pb3ZhLmMKQEAgLTIyLDcgKzIyLDYgQEAKIHZvaWQKIGluaXRfaW92YV9kb21haW4oc3RydWN0IGlvdmFfZG9tYWluICppb3ZhZCwgdW5zaWduZWQgbG9uZyBwZm5fMzJiaXQpCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpb3ZhZC0+aW92YV9yYnRyZWVfbG9jayk7CiAJaW92YWQtPnJicm9vdCA9IFJCX1JPT1Q7CiAJaW92YWQtPmNhY2hlZDMyX25vZGUgPSBOVUxMOwpAQCAtMjA1LDcgKzIwNCw2IEBACiAJdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4sCiAJYm9vbCBzaXplX2FsaWduZWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaW92YSAqbmV3X2lvdmE7CiAJaW50IHJldDsKIApAQCAtMjE5LDExICsyMTcsOSBAQAogCWlmIChzaXplX2FsaWduZWQpCiAJCXNpemUgPSBfX3JvdW5kdXBfcG93X29mX3R3byhzaXplKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb3ZhZC0+aW92YV9hbGxvY19sb2NrLCBmbGFncyk7CiAJcmV0ID0gX19hbGxvY19hbmRfaW5zZXJ0X2lvdmFfcmFuZ2UoaW92YWQsIHNpemUsIGxpbWl0X3BmbiwKIAkJCW5ld19pb3ZhLCBzaXplX2FsaWduZWQpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW92YWQtPmlvdmFfYWxsb2NfbG9jaywgZmxhZ3MpOwogCWlmIChyZXQpIHsKIAkJZnJlZV9pb3ZhX21lbShuZXdfaW92YSk7CiAJCXJldHVybiBOVUxMOwpAQCAtMzgxLDggKzM3Nyw3IEBACiAJc3RydWN0IGlvdmEgKmlvdmE7CiAJdW5zaWduZWQgaW50IG92ZXJsYXAgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJmlvdmFkLT5pb3ZhX3JidHJlZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW92YWQtPmlvdmFfcmJ0cmVlX2xvY2ssIGZsYWdzKTsKIAlmb3IgKG5vZGUgPSByYl9maXJzdCgmaW92YWQtPnJicm9vdCk7IG5vZGU7IG5vZGUgPSByYl9uZXh0KG5vZGUpKSB7CiAJCWlmIChfX2lzX3JhbmdlX292ZXJsYXAobm9kZSwgcGZuX2xvLCBwZm5faGkpKSB7CiAJCQlpb3ZhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpb3ZhLCBub2RlKTsKQEAgLTQwMiw4ICszOTcsNyBAQAogCWlvdmEgPSBfX2luc2VydF9uZXdfcmFuZ2UoaW92YWQsIHBmbl9sbywgcGZuX2hpKTsKIGZpbmlzaDoKIAotCXNwaW5fdW5sb2NrKCZpb3ZhZC0+aW92YV9yYnRyZWVfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW92YWQtPmlvdmFfYWxsb2NfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvdmFkLT5pb3ZhX3JidHJlZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGlvdmE7CiB9CiAKQEAgLTQyMCw4ICs0MTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnJvbS0+aW92YV9hbGxvY19sb2NrLCBmbGFncyk7Ci0Jc3Bpbl9sb2NrKCZmcm9tLT5pb3ZhX3JidHJlZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJvbS0+aW92YV9yYnRyZWVfbG9jaywgZmxhZ3MpOwogCWZvciAobm9kZSA9IHJiX2ZpcnN0KCZmcm9tLT5yYnJvb3QpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkgewogCQlzdHJ1Y3QgaW92YSAqaW92YSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaW92YSwgbm9kZSk7CiAJCXN0cnVjdCBpb3ZhICpuZXdfaW92YTsKQEAgLTQzMCw2ICs0MjMsNSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJSZXNlcnZlIGlvdmEgcmFuZ2UgJWx4QCVseCBmYWlsZWRcbiIsCiAJCQkJaW92YS0+cGZuX2xvLCBpb3ZhLT5wZm5fbG8pOwogCX0KLQlzcGluX3VubG9jaygmZnJvbS0+aW92YV9yYnRyZWVfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbS0+aW92YV9hbGxvY19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbS0+aW92YV9yYnRyZWVfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCA3YjQyNGUwLi4zMmM0NDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCkBAIC0xMDUsMzcgKzEwNiw0MCBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3BjY2FyZCA9IE5VTEw7CiAKLXN0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2soc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgdm9pZCAqZCkKK3N0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2soc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgdm9pZCAqX20pCiB7Ci0JY2hhciAqKnAgPSBkOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IF9tOwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IGNvbnRhaW5lcl9vZihkcml2ZXIsCiAJCQkJCQkgICBzdHJ1Y3QgcGNtY2lhX2RyaXZlciwgZHJ2KTsKIAotCSpwICs9IHNwcmludGYoKnAsICIlLTI0LjI0cyAxICVkXG4iLCBwX2Rydi0+ZHJ2Lm5hbWUsCisJc2VxX3ByaW50ZihtLCAiJS0yNC4yNHMgMSAlZFxuIiwgcF9kcnYtPmRydi5uYW1lLAogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJCSAgICAgIChwX2Rydi0+b3duZXIpID8gbW9kdWxlX3JlZmNvdW50KHBfZHJ2LT5vd25lcikgOiAxCiAjZWxzZQogCQkgICAgICAxCiAjZW5kaWYKIAkpOwotCWQgPSAodm9pZCAqKSBwOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnMoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywKLQkJCSAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcGNjYXJkX2RyaXZlcnNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyICpwID0gYnVmOwotCWludCByYzsKLQotCXJjID0gYnVzX2Zvcl9lYWNoX2RydigmcGNtY2lhX2J1c190eXBlLCBOVUxMLAotCQkJICAgICAgKHZvaWQgKikgJnAsIHByb2NfcmVhZF9kcml2ZXJzX2NhbGxiYWNrKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlyZXR1cm4gKHAgLSBidWYpOworCXJldHVybiBidXNfZm9yX2VhY2hfZHJ2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsCisJCQkJbSwgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2spOwogfQorCitzdGF0aWMgaW50IHBjY2FyZF9kcml2ZXJzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcGNjYXJkX2RyaXZlcnNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGNjYXJkX2RyaXZlcnNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwY2NhcmRfZHJpdmVyc19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYKIAogCkBAIC0xMDExLDcgKzEwMTUsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcHJvY19wY2NhcmQgPSBwcm9jX21rZGlyKCJidXMvcGNjYXJkIiwgTlVMTCk7CiAJaWYgKHByb2NfcGNjYXJkKQotCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJkcml2ZXJzIiwwLHByb2NfcGNjYXJkLHByb2NfcmVhZF9kcml2ZXJzLE5VTEwpOworCQlwcm9jX2NyZWF0ZSgiZHJpdmVycyIsIDAsIHByb2NfcGNjYXJkLCAmcGNjYXJkX2RyaXZlcnNfcHJvY19mb3BzKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfam9ybmFkYTcyMC5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2pvcm5hZGE3MjAuYwppbmRleCA1N2NhMDg1Li43ZWVkYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfam9ybmFkYTcyMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9qb3JuYWRhNzIwLmMKQEAgLTE2LDg5ICsxNiwxMDMgQEAKIAogI2luY2x1ZGUgInNhMTExMV9nZW5lcmljLmgiCiAKLSNkZWZpbmUgU09DS0VUMF9QT1dFUiAgIEdQSU9fR1BJTzAKLSNkZWZpbmUgU09DS0VUMF8zViAgICAgIEdQSU9fR1BJTzIKLSNkZWZpbmUgU09DS0VUMV9QT1dFUiAgIChHUElPX0dQSU8xIHwgR1BJT19HUElPMykKLSN3YXJuaW5nICoqKiBEb2VzIFNPQ0tFVDFfM1YgYWN0dWFsbHkgZG8gYW55dGhpbmc/CisvKiBEb2VzIFNPQ0tFVDFfM1YgYWN0dWFsbHkgZG8gYW55dGhpbmc/ICovCisjZGVmaW5lIFNPQ0tFVDBfUE9XRVIJR1BJT19HUElPMAorI2RlZmluZSBTT0NLRVQwXzNWCUdQSU9fR1BJTzIKKyNkZWZpbmUgU09DS0VUMV9QT1dFUgkoR1BJT19HUElPMSB8IEdQSU9fR1BJTzMpCiAjZGVmaW5lIFNPQ0tFVDFfM1YJR1BJT19HUElPMwogCiBzdGF0aWMgaW50IGpvcm5hZGE3MjBfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0gIC8qCi0gICAqIFdoYXQgaXMgYWxsIHRoaXMgY3JhcCBmb3I/Ci0gICAqLwotICBHUkVSIHw9IDB4MDAwMDAwMDI7Ci0gIC8qIFNldCBHUElPX0E8MzoxPiB0byBiZSBvdXRwdXRzIGZvciBQQ01DSUEvQ0YgcG93ZXIgY29udHJvbGxlcjogKi8KLSAgc2ExMTExX3NldF9pb19kaXIoU0ExMTExX0RFVihza3QtPmRldiksIEdQSU9fQTB8R1BJT19BMXxHUElPX0EyfEdQSU9fQTMsIDAsIDApOwotICBzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBHUElPX0EwfEdQSU9fQTF8R1BJT19BMnxHUElPX0EzLCAwKTsKLSAgc2ExMTExX3NldF9zbGVlcF9pbyhTQTExMTFfREVWKHNrdC0+ZGV2KSwgR1BJT19BMHxHUElPX0ExfEdQSU9fQTJ8R1BJT19BMywgMCk7CisJdW5zaWduZWQgaW50IHBpbiA9IEdQSU9fQTAgfCBHUElPX0ExIHwgR1BJT19BMiB8IEdQSU9fQTM7CiAKLSAgcmV0dXJuIHNhMTExMV9wY21jaWFfaHdfaW5pdChza3QpOworCS8qCisJKiBXaGF0IGlzIGFsbCB0aGlzIGNyYXAgZm9yPworCSovCisJR1JFUiB8PSAweDAwMDAwMDAyOworCS8qIFNldCBHUElPX0E8MzoxPiB0byBiZSBvdXRwdXRzIGZvciBQQ01DSUEvQ0YgcG93ZXIgY29udHJvbGxlcjogKi8KKwlzYTExMTFfc2V0X2lvX2RpcihTQTExMTFfREVWKHNrdC0+ZGV2KSwgcGluLCAwLCAwKTsKKwlzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwaW4sIDApOworCXNhMTExMV9zZXRfc2xlZXBfaW8oU0ExMTExX0RFVihza3QtPmRldiksIHBpbiwgMCk7CisKKwlyZXR1cm4gc2ExMTExX3BjbWNpYV9od19pbml0KHNrdCk7CiB9CiAKIHN0YXRpYyBpbnQKIGpvcm5hZGE3MjBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsIGNvbnN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKIHsKLSAgdW5zaWduZWQgaW50IHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0OwotICBpbnQgcmV0OworCXVuc2lnbmVkIGludCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldDsKKwlpbnQgcmV0OwogCi1wcmludGsoIiVzKCk6IGNvbmZpZyBzb2NrZXQgJWQgdmNjICVkIHZwcCAlZFxuIiwgX19mdW5jX18sCi0Jc2t0LT5uciwgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogY29uZmlnIHNvY2tldCAlZCB2Y2MgJWQgdnBwICVkXG4iLCBfX2Z1bmNfXywKKwkJc2t0LT5uciwgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCk7CiAKLSAgc3dpdGNoIChza3QtPm5yKSB7Ci0gIGNhc2UgMDoKLSAgICBwYV9kd3JfbWFzayA9IFNPQ0tFVDBfUE9XRVIgfCBTT0NLRVQwXzNWOworCXN3aXRjaCAoc2t0LT5ucikgeworCWNhc2UgMDoKKwkJcGFfZHdyX21hc2sgPSBTT0NLRVQwX1BPV0VSIHwgU09DS0VUMF8zVjsKIAotICAgIHN3aXRjaCAoc3RhdGUtPlZjYykgewotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSAwOglwYV9kd3Jfc2V0ID0gMDsJCQkJCWJyZWFrOwotICAgIGNhc2UgMzM6CXBhX2R3cl9zZXQgPSBTT0NLRVQwX1BPV0VSIHwgU09DS0VUMF8zVjsJYnJlYWs7Ci0gICAgY2FzZSA1MDoJcGFfZHdyX3NldCA9IFNPQ0tFVDBfUE9XRVI7CQkJYnJlYWs7Ci0gICAgfQotICAgIGJyZWFrOworCQlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSAgMDoKKwkJCXBhX2R3cl9zZXQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMzM6CisJCQlwYV9kd3Jfc2V0ID0gU09DS0VUMF9QT1dFUiB8IFNPQ0tFVDBfM1Y7CisJCQlicmVhazsKKwkJY2FzZSA1MDoKKwkJCXBhX2R3cl9zZXQgPSBTT0NLRVQwX1BPV0VSOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAKLSAgY2FzZSAxOgotICAgIHBhX2R3cl9tYXNrID0gU09DS0VUMV9QT1dFUjsKKwljYXNlIDE6CisJCXBhX2R3cl9tYXNrID0gU09DS0VUMV9QT1dFUjsKIAotICAgIHN3aXRjaCAoc3RhdGUtPlZjYykgewotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSAwOglwYV9kd3Jfc2V0ID0gMDsJCQkJCWJyZWFrOwotICAgIGNhc2UgMzM6CXBhX2R3cl9zZXQgPSBTT0NLRVQxX1BPV0VSOwkJCWJyZWFrOwotICAgIGNhc2UgNTA6CXBhX2R3cl9zZXQgPSBTT0NLRVQxX1BPV0VSOwkJCWJyZWFrOwotICAgIH0KLSAgICBicmVhazsKKwkJc3dpdGNoIChzdGF0ZS0+VmNjKSB7CisJCWRlZmF1bHQ6CisJCWNhc2UgMDoKKwkJCXBhX2R3cl9zZXQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMzM6CisJCQlwYV9kd3Jfc2V0ID0gU09DS0VUMV9QT1dFUjsKKwkJCWJyZWFrOworCQljYXNlIDUwOgorCQkJcGFfZHdyX3NldCA9IFNPQ0tFVDFfUE9XRVI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAotICBkZWZhdWx0OgotICAgIHJldHVybiAtMTsKLSAgfQorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CiAKLSAgaWYgKHN0YXRlLT5WcHAgIT0gc3RhdGUtPlZjYyAmJiBzdGF0ZS0+VnBwICE9IDApIHsKLSAgICBwcmludGsoS0VSTl9FUlIgIiVzKCk6IHNsb3QgY2Fubm90IHN1cHBvcnQgVlBQICV1XG4iLAotCSAgIF9fZnVuY19fLCBzdGF0ZS0+VnBwKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KKwlpZiAoc3RhdGUtPlZwcCAhPSBzdGF0ZS0+VmNjICYmIHN0YXRlLT5WcHAgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IHNsb3QgY2Fubm90IHN1cHBvcnQgVlBQICV1XG4iLAorCQkJX19mdW5jX18sIHN0YXRlLT5WcHApOworCQlyZXR1cm4gLUVQRVJNOworCX0KIAotICByZXQgPSBzYTExMTFfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc2t0LCBzdGF0ZSk7Ci0gIGlmIChyZXQgPT0gMCkgewotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcmV0ID0gc2ExMTExX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHNrdCwgc3RhdGUpOworCWlmIChyZXQgPT0gMCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotICAgIHNhMTExMV9zZXRfaW8oU0ExMTExX0RFVihza3QtPmRldiksIHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0KTsKLSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0gIH0KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CiAKLSAgcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgam9ybmFkYTcyMF9wY21jaWFfb3BzID0gewotICAub3duZXIJCT0gVEhJU19NT0RVTEUsCi0gIC5od19pbml0CQk9IGpvcm5hZGE3MjBfcGNtY2lhX2h3X2luaXQsCi0gIC5od19zaHV0ZG93bgkJPSBzYTExMTFfcGNtY2lhX2h3X3NodXRkb3duLAotICAuc29ja2V0X3N0YXRlCQk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N0YXRlLAotICAuY29uZmlndXJlX3NvY2tldAk9IGpvcm5hZGE3MjBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuaHdfaW5pdAkJPSBqb3JuYWRhNzIwX3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93bgkJPSBzYTExMTFfcGNtY2lhX2h3X3NodXRkb3duLAorCS5zb2NrZXRfc3RhdGUJCT0gc2ExMTExX3BjbWNpYV9zb2NrZXRfc3RhdGUsCisJLmNvbmZpZ3VyZV9zb2NrZXQJPSBqb3JuYWRhNzIwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAogCi0gIC5zb2NrZXRfaW5pdAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9pbml0LAotICAuc29ja2V0X3N1c3BlbmQJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAorCS5zb2NrZXRfaW5pdAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogfTsKIAogaW50IF9fZGV2aW5pdCBwY21jaWFfam9ybmFkYTcyMF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggNzM3ZmU1ZC4uYjQ1OWU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogLyoKICAqIENsb3NlIGl0IGRvd24gLSByZWxlYXNlIG91ciByZXNvdXJjZXMgYW5kIGdvIGhvbWUuLgogICovCi1zdGF0aWMgdm9pZCB5ZW50YV9jbG9zZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHllbnRhX2Nsb3NlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHllbnRhX3NvY2tldCAqc29jayA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCA3N2M2MDk3Li41NWNhMzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTk5LDYgKzk5LDcgQEAKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIElOUFVUCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTIHx8IExFRFNfQ0xBU1M9bgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGxhcHRvcHMgYnVpbHQgYnkgRnVqaXRzdToKIApAQCAtMzk2LDYgKzM5NywxNSBAQAogCSAgTk9URTogVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIHNvb24sCiAJICB1c2UgYXN1cy1sYXB0b3AgaW5zdGVhZC4KIAorY29uZmlnIFRPUFNUQVJfTEFQVE9QCisJdHJpc3RhdGUgIlRvcHN0YXIgTGFwdG9wIEV4dHJhcyIKKwlkZXBlbmRzIG9uIEFDUEkKKwlkZXBlbmRzIG9uIElOUFVUCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBob3RrZXlzIGZvdW5kIG9uIFRvcHN0YXIgbGFwdG9wcy4KKworCSAgSWYgeW91IGhhdmUgYSBUb3BzdGFyIGxhcHRvcCwgc2F5IFkgb3IgTSBoZXJlLgorCiBjb25maWcgQUNQSV9UT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIEV4dHJhcyIKIAlkZXBlbmRzIG9uIEFDUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKaW5kZXggNjQxYjhiZi4uZDFjMTYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKQEAgLTE5LDQgKzE5LDUgQEAKIG9iai0kKENPTkZJR19JTlRFTF9NRU5MT1cpCSs9IGludGVsX21lbmxvdy5vCiBvYmotJChDT05GSUdfQUNQSV9XTUkpCQkrPSB3bWkubwogb2JqLSQoQ09ORklHX0FDUElfQVNVUykJCSs9IGFzdXNfYWNwaS5vCitvYmotJChDT05GSUdfVE9QU1RBUl9MQVBUT1ApCSs9IHRvcHN0YXItbGFwdG9wLm8KIG9iai0kKENPTkZJR19BQ1BJX1RPU0hJQkEpCSs9IHRvc2hpYmFfYWNwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKaW5kZXggYmRmZWUxNy4uMGE4ZjczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwpAQCAtNTIsNyArNTIsNyBAQAogICovCiAjdW5kZWYgU1RBUlRfSU5fS0VSTkVMX01PREUKIAotI2RlZmluZSBEUlZfVkVSICIwLjUuMTMiCisjZGVmaW5lIERSVl9WRVIgIjAuNS4xNyIKIAogLyoKICAqIEFjY29yZGluZyB0byB0aGUgQXRvbSBOMjcwIGRhdGFzaGVldCwKQEAgLTkwLDYgKzkwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFuc3RhdGUgPSBBQ0VSSERGX0ZBTl9BVVRPOwogc3RhdGljIGNoYXIgZm9yY2VfYmlvc1sxNl07CitzdGF0aWMgY2hhciBmb3JjZV9wcm9kdWN0WzE2XTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHJldl9pbnRlcnZhbDsKIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aHpfZGV2Owogc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNsX2RldjsKQEAgLTEwNywzNCArMTA4LDYyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJFbmFibGUgdmVyYm9zZSBkbWVzZyBvdXRwdXQiKTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcoZm9yY2VfYmlvcywgZm9yY2VfYmlvcywgMTYsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9iaW9zLCAiRm9yY2UgQklPUyB2ZXJzaW9uIGFuZCBvbWl0IEJJT1MgY2hlY2siKTsKK21vZHVsZV9wYXJhbV9zdHJpbmcoZm9yY2VfcHJvZHVjdCwgZm9yY2VfcHJvZHVjdCwgMTYsIDApOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9wcm9kdWN0LCAiRm9yY2UgQklPUyBwcm9kdWN0IGFuZCBvbWl0IEJJT1MgY2hlY2siKTsKKworLyoKKyAqIGNtZF9vZmY6IHRvIHN3aXRjaCB0aGUgZmFuIGNvbXBsZXRlbHkgb2ZmIC8gdG8gY2hlY2sgaWYgdGhlIGZhbiBpcyBvZmYKKyAqCWNtZF9hdXRvOiB0byBzZXQgdGhlIEJJT1MgaW4gY29udHJvbCBvZiB0aGUgZmFuLiBUaGUgQklPUyByZWd1bGF0ZXMgdGhlbgorICoJCXRoZSBmYW4gc3BlZWQgZGVwZW5kaW5nIG9uIHRoZSB0ZW1wZXJhdHVyZQorICovCitzdHJ1Y3QgZmFuY21kIHsKKwl1OCBjbWRfb2ZmOworCXU4IGNtZF9hdXRvOworfTsKIAogLyogQklPUyBzZXR0aW5ncyAqLwogc3RydWN0IGJpb3Nfc2V0dGluZ3NfdCB7CiAJY29uc3QgY2hhciAqdmVuZG9yOworCWNvbnN0IGNoYXIgKnByb2R1Y3Q7CiAJY29uc3QgY2hhciAqdmVyc2lvbjsKIAl1bnNpZ25lZCBjaGFyIGZhbnJlZzsKIAl1bnNpZ25lZCBjaGFyIHRlbXByZWc7Ci0JdW5zaWduZWQgY2hhciBmYW5jbWRbMl07IC8qIGZhbiBvZmYgYW5kIGF1dG8gY29tbWFuZHMgKi8KKwlzdHJ1Y3QgZmFuY21kIGNtZDsKIH07CiAKIC8qIFJlZ2lzdGVyIGFkZHJlc3NlcyBhbmQgdmFsdWVzIGZvciBkaWZmZXJlbnQgQklPUyB2ZXJzaW9ucyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBiaW9zX3NldHRpbmdzX3QgYmlvc190YmxbXSA9IHsKLQl7IkFjZXIiLCAidjAuMzEwOSIsIDB4NTUsIDB4NTgsIHsweDFmLCAweDAwfSB9LAotCXsiQWNlciIsICJ2MC4zMTE0IiwgMHg1NSwgMHg1OCwgezB4MWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAidjAuMzMwNCIsIDB4NTUsIDB4NTgsIHsweGFmLCAweDAwfSB9LAotCXsiQWNlciIsICJ2MC4zMzA1IiwgMHg1NSwgMHg1OCwgezB4YWYsIDB4MDB9IH0sCi0JeyJBY2VyIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKLQl7IkFjZXIiLCAidjAuMzMwOSIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDAwfSB9LAotCXsiQWNlciIsICJ2MC4zMzEwIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCi0JeyJHYXRld2F5IiwgInYwLjMxMDMiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKLQl7IlBhY2thcmQgQmVsbCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCi0JeyIiLCAiIiwgMCwgMCwgezAsIDB9IH0KKwkvKiBBT0ExMTAgKi8KKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMDkiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwkvKiBBT0ExNTAgKi8KKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwkvKiBzcGVjaWFsIEJJT1MgLyBvdGhlciAqLworCXsiR2F0ZXdheSIsICJBT0ExMTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDAwfSB9LAorCXsiR2F0ZXdheSIsICJBT0ExNTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPQTE1MCIsICJ2MC4zMTA0IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiQU9BMTEwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJBT0ExNTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDAwfSB9LAorCS8qIHBld3Bldy10ZXJtaW5hdG9yICovCisJeyIiLCAiIiwgIiIsIDAsIDAsIHswLCAwfSB9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJpb3Nfc2V0dGluZ3NfdCAqYmlvc19jZmcgX19yZWFkX21vc3RseTsKIAotCiBzdGF0aWMgaW50IGFjZXJoZGZfZ2V0X3RlbXAoaW50ICp0ZW1wKQogewogCXU4IHJlYWRfdGVtcDsKQEAgLTE1MCwxMyArMTc5LDE0IEBACiBzdGF0aWMgaW50IGFjZXJoZGZfZ2V0X2ZhbnN0YXRlKGludCAqc3RhdGUpCiB7CiAJdTggZmFuOwotCWJvb2wgdG1wOwogCiAJaWYgKGVjX3JlYWQoYmlvc19jZmctPmZhbnJlZywgJmZhbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdG1wID0gKGZhbiA9PSBiaW9zX2NmZy0+ZmFuY21kW0FDRVJIREZfRkFOX09GRl0pOwotCSpzdGF0ZSA9IHRtcCA/IEFDRVJIREZfRkFOX09GRiA6IEFDRVJIREZfRkFOX0FVVE87CisJaWYgKGZhbiAhPSBiaW9zX2NmZy0+Y21kLmNtZF9vZmYpCisJCSpzdGF0ZSA9IEFDRVJIREZfRkFOX0FVVE87CisJZWxzZQorCQkqc3RhdGUgPSBBQ0VSSERGX0ZBTl9PRkY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NSw3ICsyMDUsOCBAQAogCQlzdGF0ZSA9IEFDRVJIREZfRkFOX0FVVE87CiAJfQogCi0JY21kID0gYmlvc19jZmctPmZhbmNtZFtzdGF0ZV07CisJY21kID0gKHN0YXRlID09IEFDRVJIREZfRkFOX09GRikgPyBiaW9zX2NmZy0+Y21kLmNtZF9vZmYKKwkJCQkJIDogYmlvc19jZmctPmNtZC5jbWRfYXV0bzsKIAlmYW5zdGF0ZSA9IHN0YXRlOwogCiAJZWNfd3JpdGUoYmlvc19jZmctPmZhbnJlZywgY21kKTsKQEAgLTQwOCw3ICs0MzksNyBAQAogfTsKIAogLyogc3VzcGVuZCAvIHJlc3VtZSBmdW5jdGlvbmFsaXR5ICovCi1zdGF0aWMgaW50IGFjZXJoZGZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYWNlcmhkZl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAoa2VybmVsbW9kZSkKIAkJYWNlcmhkZl9jaGFuZ2VfZmFuc3RhdGUoQUNFUkhERl9GQU5fQVVUTyk7CkBAIC00MTksMTQgKzQ1MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWNlcmhkZl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQotewotCWlmICh2ZXJib3NlKQotCQlwcl9ub3RpY2UoInJlc3VtaW5nXG4iKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhY2VyaGRmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTQzNywxNSArNDYwLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWNlcmhkZl9kcnYgPSB7CitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWNlcmhkZl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBhY2VyaGRmX3N1c3BlbmQsCisJLmZyZWV6ZSAgPSBhY2VyaGRmX3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhY2VyaGRmX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhY2VyaGRmIiwKKwkJLm5hbWUgID0gImFjZXJoZGYiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtICAgID0gJmFjZXJoZGZfcG1fb3BzLAogCX0sCiAJLnByb2JlID0gYWNlcmhkZl9wcm9iZSwKIAkucmVtb3ZlID0gYWNlcmhkZl9yZW1vdmUsCi0JLnN1c3BlbmQgPSBhY2VyaGRmX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGFjZXJoZGZfcmVzdW1lLAogfTsKIAogCkBAIC00NTQsMzIgKzQ4MSw0MCBAQAogewogCWNoYXIgY29uc3QgKnZlbmRvciwgKnZlcnNpb24sICpwcm9kdWN0OwogCWludCBpOworCXVuc2lnbmVkIGxvbmcgcHJvZF9sZW4gPSAwOwogCiAJLyogZ2V0IEJJT1MgZGF0YSAqLwogCXZlbmRvciAgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9TWVNfVkVORE9SKTsKIAl2ZXJzaW9uID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKTsKIAlwcm9kdWN0ID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKTsKIAorCiAJcHJfaW5mbygiQWNlciBBc3BpcmUgT25lIEZhbiBkcml2ZXIsIHYuJXNcbiIsIERSVl9WRVIpOwogCi0JaWYgKCFmb3JjZV9iaW9zWzBdKSB7Ci0JCWlmIChzdHJuY21wKHByb2R1Y3QsICJBTyIsIDIpKSB7Ci0JCQlwcl9lcnIoIm5vIEFzcGlyZSBPbmUgaGFyZHdhcmUgZm91bmRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQlwcl9pbmZvKCJmb3JjaW5nIEJJT1MgdmVyc2lvbjogJXNcbiIsIHZlcnNpb24pOworCWlmIChmb3JjZV9iaW9zWzBdKSB7CiAJCXZlcnNpb24gPSBmb3JjZV9iaW9zOworCQlwcl9pbmZvKCJmb3JjaW5nIEJJT1MgdmVyc2lvbjogJXNcbiIsIHZlcnNpb24pOwogCQlrZXJuZWxtb2RlID0gMDsKIAl9CiAKKwlpZiAoZm9yY2VfcHJvZHVjdFswXSkgeworCQlwcm9kdWN0ID0gZm9yY2VfcHJvZHVjdDsKKwkJcHJfaW5mbygiZm9yY2luZyBCSU9TIHByb2R1Y3Q6ICVzXG4iLCBwcm9kdWN0KTsKKwkJa2VybmVsbW9kZSA9IDA7CisJfQorCisJcHJvZF9sZW4gPSBzdHJsZW4ocHJvZHVjdCk7CisKIAlpZiAodmVyYm9zZSkKIAkJcHJfaW5mbygiQklPUyBpbmZvOiAlcyAlcywgcHJvZHVjdDogJXNcbiIsCiAJCQl2ZW5kb3IsIHZlcnNpb24sIHByb2R1Y3QpOwogCiAJLyogc2VhcmNoIEJJT1MgdmVyc2lvbiBhbmQgdmVuZG9yIGluIEJJT1Mgc2V0dGluZ3MgdGFibGUgKi8KIAlmb3IgKGkgPSAwOyBiaW9zX3RibFtpXS52ZXJzaW9uWzBdOyBpKyspIHsKLQkJaWYgKCFzdHJjbXAoYmlvc190YmxbaV0udmVuZG9yLCB2ZW5kb3IpICYmCisJCWlmIChzdHJsZW4oYmlvc190YmxbaV0ucHJvZHVjdCkgPj0gcHJvZF9sZW4gJiYKKwkJICAgICFzdHJuY21wKGJpb3NfdGJsW2ldLnByb2R1Y3QsIHByb2R1Y3QsCisJCQkgICBzdHJsZW4oYmlvc190YmxbaV0ucHJvZHVjdCkpICYmCisJCSAgICAhc3RyY21wKGJpb3NfdGJsW2ldLnZlbmRvciwgdmVuZG9yKSAmJgogCQkgICAgIXN0cmNtcChiaW9zX3RibFtpXS52ZXJzaW9uLCB2ZXJzaW9uKSkgewogCQkJYmlvc19jZmcgPSAmYmlvc190YmxbaV07CiAJCQlicmVhazsKQEAgLTQ4Nyw4ICs1MjIsOCBAQAogCX0KIAogCWlmICghYmlvc19jZmcpIHsKLQkJcHJfZXJyKCJ1bmtub3duICh1bnN1cHBvcnRlZCkgQklPUyB2ZXJzaW9uICVzLyVzLCAiCi0JCQkicGxlYXNlIHJlcG9ydCwgYWJvcnRpbmchXG4iLCB2ZW5kb3IsIHZlcnNpb24pOworCQlwcl9lcnIoInVua25vd24gKHVuc3VwcG9ydGVkKSBCSU9TIHZlcnNpb24gJXMvJXMvJXMsICIKKwkJCSJwbGVhc2UgcmVwb3J0LCBhYm9ydGluZyFcbiIsIHZlbmRvciwgcHJvZHVjdCwgdmVyc2lvbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTA5LDcgKzU0NCw3IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFjZXJoZGZfZHJ2KTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFjZXJoZGZfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01MjUsNyArNTYwLDcgQEAKIAkJcmV0dXJuOwogCiAJcGxhdGZvcm1fZGV2aWNlX2RlbChhY2VyaGRmX2Rldik7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFjZXJoZGZfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWNlcmhkZl9kcml2ZXIpOwogfQogCiBzdGF0aWMgaW50IGFjZXJoZGZfcmVnaXN0ZXJfdGhlcm1hbCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggZGI2NTdiYi4uYjM5ZDJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC03NywxNSArNzcsMTYgQEAKICAqIEZsYWdzIGZvciBob3RrIHN0YXR1cwogICogV0xfT04gYW5kIEJUX09OIGFyZSBhbHNvIHVzZWQgZm9yIHdpcmVsZXNzX3N0YXR1cygpCiAgKi8KLSNkZWZpbmUgV0xfT04gICAgICAgMHgwMQkvL2ludGVybmFsIFdpZmkKLSNkZWZpbmUgQlRfT04gICAgICAgMHgwMgkvL2ludGVybmFsIEJsdWV0b290aAotI2RlZmluZSBNTEVEX09OICAgICAweDA0CS8vbWFpbCBMRUQKLSNkZWZpbmUgVExFRF9PTiAgICAgMHgwOAkvL3RvdWNocGFkIExFRAotI2RlZmluZSBSTEVEX09OICAgICAweDEwCS8vUmVjb3JkIExFRAotI2RlZmluZSBQTEVEX09OICAgICAweDIwCS8vUGhvbmUgTEVECi0jZGVmaW5lIEdMRURfT04gICAgIDB4NDAJLy9HYW1pbmcgTEVECi0jZGVmaW5lIExDRF9PTiAgICAgIDB4ODAJLy9MQ0QgYmFja2xpZ2h0Ci0jZGVmaW5lIEdQU19PTiAgICAgIDB4MTAwCS8vR1BTCisjZGVmaW5lIFdMX09OICAgICAgIDB4MDEJLyogaW50ZXJuYWwgV2lmaSAqLworI2RlZmluZSBCVF9PTiAgICAgICAweDAyCS8qIGludGVybmFsIEJsdWV0b290aCAqLworI2RlZmluZSBNTEVEX09OICAgICAweDA0CS8qIG1haWwgTEVEICovCisjZGVmaW5lIFRMRURfT04gICAgIDB4MDgJLyogdG91Y2hwYWQgTEVEICovCisjZGVmaW5lIFJMRURfT04gICAgIDB4MTAJLyogUmVjb3JkIExFRCAqLworI2RlZmluZSBQTEVEX09OICAgICAweDIwCS8qIFBob25lIExFRCAqLworI2RlZmluZSBHTEVEX09OICAgICAweDQwCS8qIEdhbWluZyBMRUQgKi8KKyNkZWZpbmUgTENEX09OICAgICAgMHg4MAkvKiBMQ0QgYmFja2xpZ2h0ICovCisjZGVmaW5lIEdQU19PTiAgICAgIDB4MTAwCS8qIEdQUyAqLworI2RlZmluZSBLRVlfT04gICAgICAweDIwMAkvKiBLZXlib2FyZCBiYWNrbGlnaHQgKi8KIAogI2RlZmluZSBBU1VTX0xPRyAgICBBU1VTX0hPVEtfRklMRSAiOiAiCiAjZGVmaW5lIEFTVVNfRVJSICAgIEtFUk5fRVJSICAgIEFTVVNfTE9HCkBAIC05OCw3ICs5OSw4IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oQVNVU19IT1RLX05BTUUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vKiBXQVBGIGRlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBGbitGeCB3bGFuIGtleQorLyoKKyAqIFdBUEYgZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIEZuK0Z4IHdsYW4ga2V5CiAgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIHZhbHVlcyBpcyB5ZXQgdG8gYmUgZm91bmQsIGJ1dAogICogbW9zdCBvZiB0aGUgdGltZToKICAqIDB4MCB3aWxsIGRvIG5vdGhpbmcKQEAgLTEyNSw3ICsxMjcsOCBAQAogLyogTEVERCAqLwogQVNVU19IQU5ETEUobGVkZF9zZXQsIEFTVVNfSE9US19QUkVGSVggIlNMQ00iKTsKIAotLyogQmx1ZXRvb3RoIGFuZCBXTEFOCisvKgorICogQmx1ZXRvb3RoIGFuZCBXTEFOCiAgKiBXTEVEIGFuZCBCTEVEIGFyZSBub3QgaGFuZGxlZCBsaWtlIG90aGVyIFhMRUQsIGJlY2F1c2UgaW4gc29tZSBkc2R0CiAgKiB0aGV5IGFsc28gY29udHJvbCB0aGUgV0xBTi9CbHVldG9vdGggZGV2aWNlLgogICovCkBAIC0xNDksMjIgKzE1MiwzMiBAQAogCiAvKiBEaXNwbGF5ICovCiBBU1VTX0hBTkRMRShkaXNwbGF5X3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU0RTUCIpOwotQVNVU19IQU5ETEUoZGlzcGxheV9nZXQsICJcXF9TQi5QQ0kwLlAwUDEuVkdBLkdFVEQiLAkvKiAgQTZCLCBBNksgQTZSIEE3RCBGM0pNIEw0UiBNNlIgQTNHCi0JCQkJCQkJICAgTTZBIE02ViBWWC0xIFY2SiBWNlYgVzNaICovCi0JICAgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAkvKiBBM0UgQTRLLCBBNEQgQTRMIEE2SiBBN0ogQThKIFo3MVYgTTlWCi0JCQkJCSAgIFM1QSBNNUEgejMzQSBXMUpjIFcyViBHMSAqLwotCSAgICAiXFxfU0IuUENJMC5QMFAzLlZHQS5HRVREIiwJLyogQTZWIEE2USAqLwotCSAgICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwJLyogQTZULCBBNk0gKi8KLQkgICAgIlxcX1NCLlBDSTAuUENJMS5WR0FDLk5NQVAiLAkvKiBMM0MgKi8KLQkgICAgIlxcX1NCLlBDSTAuVkdBLkdFVEQiLAkvKiBaOTZGICovCi0JICAgICJcXEFDVEQiLAkJLyogQTJEICovCi0JICAgICJcXEFEVkciLAkJLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KLQkgICAgIlxcRE5YVCIsCQkvKiBQMzAgKi8KLQkgICAgIlxcSU5GQiIsCQkvKiBBMkggRDEgTDJEIEwzRCBMM0ggTDJFIEw1RCBMNUMgTTFBIE0yRSBMNEwgVzNWICovCi0JICAgICJcXFNTVEUiKTsJCS8qIEEzRiBBNkYgQTNOIEEzTCBNNk4gVzNOIFc2QSAqLworQVNVU19IQU5ETEUoZGlzcGxheV9nZXQsCisJICAgIC8qIEE2QiwgQTZLIEE2UiBBN0QgRjNKTSBMNFIgTTZSIEEzRyBNNkEgTTZWIFZYLTEgVjZKIFY2ViBXM1ogKi8KKwkgICAgIlxcX1NCLlBDSTAuUDBQMS5WR0EuR0VURCIsCisJICAgIC8qIEEzRSBBNEssIEE0RCBBNEwgQTZKIEE3SiBBOEogWjcxViBNOVYgUzVBIE01QSB6MzNBIFcxSmMgVzJWIEcxICovCisJICAgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAorCSAgICAvKiBBNlYgQTZRICovCisJICAgICJcXF9TQi5QQ0kwLlAwUDMuVkdBLkdFVEQiLAorCSAgICAvKiBBNlQsIEE2TSAqLworCSAgICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwKKwkgICAgLyogTDNDICovCisJICAgICJcXF9TQi5QQ0kwLlBDSTEuVkdBQy5OTUFQIiwKKwkgICAgLyogWjk2RiAqLworCSAgICAiXFxfU0IuUENJMC5WR0EuR0VURCIsCisJICAgIC8qIEEyRCAqLworCSAgICAiXFxBQ1REIiwKKwkgICAgLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KKwkgICAgIlxcQURWRyIsCisJICAgIC8qIFAzMCAqLworCSAgICAiXFxETlhUIiwKKwkgICAgLyogQTJIIEQxIEwyRCBMM0QgTDNIIEwyRSBMNUQgTDVDIE0xQSBNMkUgTDRMIFczViAqLworCSAgICAiXFxJTkZCIiwKKwkgICAgLyogQTNGIEE2RiBBM04gQTNMIE02TiBXM04gVzZBICovCisJICAgICJcXFNTVEUiKTsKIAotQVNVU19IQU5ETEUobHNfc3dpdGNoLCBBU1VTX0hPVEtfUFJFRklYICJBTFNDIik7CS8qIFo3MUEgWjcxViAqLwotQVNVU19IQU5ETEUobHNfbGV2ZWwsIEFTVVNfSE9US19QUkVGSVggIkFMU0wiKTsJLyogWjcxQSBaNzFWICovCitBU1VTX0hBTkRMRShsc19zd2l0Y2gsIEFTVVNfSE9US19QUkVGSVggIkFMU0MiKTsgLyogWjcxQSBaNzFWICovCitBU1VTX0hBTkRMRShsc19sZXZlbCwgQVNVU19IT1RLX1BSRUZJWCAiQUxTTCIpOwkgLyogWjcxQSBaNzFWICovCiAKIC8qIEdQUyAqLwogLyogUjJIIHVzZSBkaWZmZXJlbnQgaGFuZGxlIGZvciBHUFMgb24vb2ZmICovCkBAIC0xNzIsMTkgKzE4NSwyMyBAQAogQVNVU19IQU5ETEUoZ3BzX29mZiwgQVNVU19IT1RLX1BSRUZJWCAiU0RPRiIpOwkvKiBSMkggKi8KIEFTVVNfSEFORExFKGdwc19zdGF0dXMsIEFTVVNfSE9US19QUkVGSVggIkdQU1QiKTsKIAorLyogS2V5Ym9hcmQgbGlnaHQgKi8KK0FTVVNfSEFORExFKGtsZWRfc2V0LCBBU1VTX0hPVEtfUFJFRklYICJTTEtCIik7CitBU1VTX0hBTkRMRShrbGVkX2dldCwgQVNVU19IT1RLX1BSRUZJWCAiR0xLQiIpOworCiAvKgogICogVGhpcyBpcyB0aGUgbWFpbiBzdHJ1Y3R1cmUsIHdlIGNhbiB1c2UgaXQgdG8gc3RvcmUgYW55dGhpbmcgaW50ZXJlc3RpbmcKICAqIGFib3V0IHRoZSBob3RrIGRldmljZQogICovCiBzdHJ1Y3QgYXN1c19ob3RrIHsKLQljaGFyICpuYW1lOwkJLy9sYXB0b3AgbmFtZQotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwkvL3RoZSBkZXZpY2Ugd2UgYXJlIGluCi0JYWNwaV9oYW5kbGUgaGFuZGxlOwkvL3RoZSBoYW5kbGUgb2YgdGhlIGhvdGsgZGV2aWNlCi0JY2hhciBzdGF0dXM7CQkvL3N0YXR1cyBvZiB0aGUgaG90aywgZm9yIExFRHMsIC4uLgotCXUzMiBsZWRkX3N0YXR1czsJLy9zdGF0dXMgb2YgdGhlIExFRCBkaXNwbGF5Ci0JdTggbGlnaHRfbGV2ZWw7CQkvL2xpZ2h0IHNlbnNvciBsZXZlbAotCXU4IGxpZ2h0X3N3aXRjaDsJLy9saWdodCBzZW5zb3Igc3dpdGNoIHZhbHVlCi0JdTE2IGV2ZW50X2NvdW50WzEyOF07CS8vY291bnQgZm9yIGVhY2ggZXZlbnQgVE9ETyBtYWtlIHRoaXMgYmV0dGVyCisJY2hhciAqbmFtZTsJCS8qIGxhcHRvcCBuYW1lICovCisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CS8qIHRoZSBkZXZpY2Ugd2UgYXJlIGluICovCisJYWNwaV9oYW5kbGUgaGFuZGxlOwkvKiB0aGUgaGFuZGxlIG9mIHRoZSBob3RrIGRldmljZSAqLworCWNoYXIgc3RhdHVzOwkJLyogc3RhdHVzIG9mIHRoZSBob3RrLCBmb3IgTEVEcywgLi4uICovCisJdTMyIGxlZGRfc3RhdHVzOwkvKiBzdGF0dXMgb2YgdGhlIExFRCBkaXNwbGF5ICovCisJdTggbGlnaHRfbGV2ZWw7CQkvKiBsaWdodCBzZW5zb3IgbGV2ZWwgKi8KKwl1OCBsaWdodF9zd2l0Y2g7CS8qIGxpZ2h0IHNlbnNvciBzd2l0Y2ggdmFsdWUgKi8KKwl1MTYgZXZlbnRfY291bnRbMTI4XTsJLyogY291bnQgZm9yIGVhY2ggZXZlbnQgVE9ETyBtYWtlIHRoaXMgYmV0dGVyICovCiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CiAJdTE2ICprZXljb2RlX21hcDsKIH07CkBAIC0yMzcsMjggKzI1NCwzNSBAQAogCS51cGRhdGVfc3RhdHVzID0gdXBkYXRlX2JsX3N0YXR1cywKIH07CiAKLS8qIFRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSB1cGRhdGUgdGhlIExFRCdzLCBhbmQgYXJlIGNhbGxlZCBmcm9tIGEKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgdXBkYXRlIHRoZSBMRUQncywgYW5kIGFyZSBjYWxsZWQgZnJvbSBhCiAgKiB3b3JrcXVldWUuIEJ5IGRvaW5nIHRoaXMgYXMgc2VwYXJhdGUgd29yayByYXRoZXIgdGhhbiB3aGVuIHRoZSBMRUQKICAqIHN1YnN5c3RlbSBhc2tzLCB3ZSBhdm9pZCBtZXNzaW5nIHdpdGggdGhlIEFzdXMgQUNQSSBzdHVmZiBkdXJpbmcgYQotICogcG90ZW50aWFsbHkgYmFkIHRpbWUsIHN1Y2ggYXMgYSB0aW1lciBpbnRlcnJ1cHQuICovCisgKiBwb3RlbnRpYWxseSBiYWQgdGltZSwgc3VjaCBhcyBhIHRpbWVyIGludGVycnVwdC4KKyAqLwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRfd29ya3F1ZXVlOwogCi0jZGVmaW5lIEFTVVNfTEVEKG9iamVjdCwgbGVkbmFtZSkJCQkJCVwKKyNkZWZpbmUgQVNVU19MRUQob2JqZWN0LCBsZWRuYW1lLCBtYXgpCQkJCQlcCiAJc3RhdGljIHZvaWQgb2JqZWN0IyNfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwJXAogCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSk7CVwKKwlzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBvYmplY3QjI19sZWRfZ2V0KAkJCVwKKwkJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwkJCQlcCiAJc3RhdGljIHZvaWQgb2JqZWN0IyNfbGVkX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpOwlcCiAJc3RhdGljIGludCBvYmplY3QjI19sZWRfd2s7CQkJCQlcCiAJc3RhdGljIERFQ0xBUkVfV09SSyhvYmplY3QjI19sZWRfd29yaywgb2JqZWN0IyNfbGVkX3VwZGF0ZSk7CVwKIAlzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBvYmplY3QjI19sZWQgPSB7CQkJXAogCQkubmFtZSAgICAgICAgICAgPSAiYXN1czo6IiBsZWRuYW1lLAkJCVwKIAkJLmJyaWdodG5lc3Nfc2V0ID0gb2JqZWN0IyNfbGVkX3NldCwJCQlcCisJCS5icmlnaHRuZXNzX2dldCA9IG9iamVjdCMjX2xlZF9nZXQsCQkJXAorCQkubWF4X2JyaWdodG5lc3MgPSBtYXgJCQkJCVwKIAl9CiAKLUFTVVNfTEVEKG1sZWQsICJtYWlsIik7Ci1BU1VTX0xFRCh0bGVkLCAidG91Y2hwYWQiKTsKLUFTVVNfTEVEKHJsZWQsICJyZWNvcmQiKTsKLUFTVVNfTEVEKHBsZWQsICJwaG9uZSIpOwotQVNVU19MRUQoZ2xlZCwgImdhbWluZyIpOworQVNVU19MRUQobWxlZCwgIm1haWwiLCAxKTsKK0FTVVNfTEVEKHRsZWQsICJ0b3VjaHBhZCIsIDEpOworQVNVU19MRUQocmxlZCwgInJlY29yZCIsIDEpOworQVNVU19MRUQocGxlZCwgInBob25lIiwgMSk7CitBU1VTX0xFRChnbGVkLCAiZ2FtaW5nIiwgMSk7CitBU1VTX0xFRChrbGVkLCAia2JkX2JhY2tsaWdodCIsIDMpOwogCiBzdHJ1Y3Qga2V5X2VudHJ5IHsKIAljaGFyIHR5cGU7CkBAIC0yNzgsMTYgKzMwMiwyMyBAQAogCXtLRV9LRVksIDB4NDEsIEtFWV9ORVhUU09OR30sCiAJe0tFX0tFWSwgMHg0MywgS0VZX1NUT1BDRH0sCiAJe0tFX0tFWSwgMHg0NSwgS0VZX1BMQVlQQVVTRX0sCisJe0tFX0tFWSwgMHg0YywgS0VZX01FRElBfSwKIAl7S0VfS0VZLCAweDUwLCBLRVlfRU1BSUx9LAogCXtLRV9LRVksIDB4NTEsIEtFWV9XV1d9LAorCXtLRV9LRVksIDB4NTUsIEtFWV9DQUxDfSwKIAl7S0VfS0VZLCAweDVDLCBLRVlfU0NSRUVOTE9DS30sICAvKiBTY3JlZW5sb2NrICovCiAJe0tFX0tFWSwgMHg1RCwgS0VZX1dMQU59LAorCXtLRV9LRVksIDB4NUUsIEtFWV9XTEFOfSwKKwl7S0VfS0VZLCAweDVGLCBLRVlfV0xBTn0sCisJe0tFX0tFWSwgMHg2MCwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCiAJe0tFX0tFWSwgMHg2MSwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCiAJe0tFX0tFWSwgMHg2QiwgQlROX1RPVUNIfSwgLyogTG9jayBNb3VzZSAqLwogCXtLRV9LRVksIDB4ODIsIEtFWV9DQU1FUkF9LAogCXtLRV9LRVksIDB4OEEsIEtFWV9QUk9HMX0sCiAJe0tFX0tFWSwgMHg5NSwgS0VZX01FRElBfSwKIAl7S0VfS0VZLCAweDk5LCBLRVlfUEhPTkV9LAorCXtLRV9LRVksIDB4YzQsIEtFWV9LQkRJTExVTVVQfSwKKwl7S0VfS0VZLCAweGM1LCBLRVlfS0JESUxMVU1ET1dOfSwKIAl7S0VfRU5ELCAwfSwKIH07CiAKQEAgLTMwMSw4ICszMzIsOCBAQAogc3RhdGljIGludCB3cml0ZV9hY3BpX2ludChhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgaW50IHZhbCwKIAkJCSAgc3RydWN0IGFjcGlfYnVmZmVyICpvdXRwdXQpCiB7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwkvL2xpc3Qgb2YgaW5wdXQgcGFyYW1ldGVycyAoYW4gaW50IGhlcmUpCi0JdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOwkvL3RoZSBvbmx5IHBhcmFtIHdlIHVzZQorCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsJLyogbGlzdCBvZiBpbnB1dCBwYXJhbWV0ZXJzIChhbiBpbnQpICovCisJdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOwkvKiB0aGUgb25seSBwYXJhbSB3ZSB1c2UgKi8KIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlpZiAoIWhhbmRsZSkKQEAgLTM5OSw2ICs0MzAsMTEgQEAKIAl7CQkJCQkJCQlcCiAJCWludCB2YWx1ZSA9IG9iamVjdCMjX2xlZF93azsJCQkJXAogCQl3cml0ZV9zdGF0dXMob2JqZWN0IyNfc2V0X2hhbmRsZSwgdmFsdWUsIChtYXNrKSk7CVwKKwl9CQkJCQkJCQlcCisJc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mgb2JqZWN0IyNfbGVkX2dldCgJCQlcCisJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQkJCQlcCisJewkJCQkJCQkJXAorCQlyZXR1cm4gbGVkX2NkZXYtPmJyaWdodG5lc3M7CQkJCVwKIAl9CiAKIEFTVVNfTEVEX0hBTkRMRVIobWxlZCwgTUxFRF9PTik7CkBAIC00MDcsNiArNDQzLDYwIEBACiBBU1VTX0xFRF9IQU5ETEVSKHRsZWQsIFRMRURfT04pOwogQVNVU19MRURfSEFORExFUihnbGVkLCBHTEVEX09OKTsKIAorLyoKKyAqIEtleWJvYXJkIGJhY2tsaWdodAorICovCitzdGF0aWMgaW50IGdldF9rbGVkX2x2bCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBrYmx2OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CisJYWNwaV9zdGF0dXMgcnY7CisKKwlwYXJhbXMuY291bnQgPSAxOworCXBhcmFtcy5wb2ludGVyID0gJmluX29iajsKKwlpbl9vYmoudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX29iai5pbnRlZ2VyLnZhbHVlID0gMjsKKworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGtsZWRfZ2V0X2hhbmRsZSwgTlVMTCwgJnBhcmFtcywgJmtibHYpOworCWlmIChBQ1BJX0ZBSUxVUkUocnYpKSB7CisJCXByX3dhcm5pbmcoIkVycm9yIHJlYWRpbmcga2xlZCBsZXZlbFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4ga2JsdjsKK30KKworc3RhdGljIGludCBzZXRfa2xlZF9sdmwoaW50IGtibHYpCit7CisJaWYgKGtibHYgPiAwKQorCQlrYmx2ID0gKDEgPDwgNykgfCAoa2JsdiAmIDB4N0YpOworCWVsc2UKKwkJa2JsdiA9IDA7CisKKwlpZiAod3JpdGVfYWNwaV9pbnQoa2xlZF9zZXRfaGFuZGxlLCBOVUxMLCBrYmx2LCBOVUxMKSkgeworCQlwcl93YXJuaW5nKCJLZXlib2FyZCBMRUQgZGlzcGxheSB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGtsZWRfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCWtsZWRfbGVkX3drID0gdmFsdWU7CisJcXVldWVfd29yayhsZWRfd29ya3F1ZXVlLCAma2xlZF9sZWRfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGtsZWRfbGVkX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCit7CisJc2V0X2tsZWRfbHZsKGtsZWRfbGVkX3drKTsKK30KKworc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mga2xlZF9sZWRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCXJldHVybiBnZXRfa2xlZF9sdmwoKTsKK30KKwogc3RhdGljIGludCBnZXRfbGNkX3N0YXRlKHZvaWQpCiB7CiAJcmV0dXJuIHJlYWRfc3RhdHVzKExDRF9PTik7CkBAIC00OTgsNyArNTg4LDcgQEAKIHsKIAlpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKLQljaGFyIGJ1ZlsxNl07CQkvL2Vub3VnaCBmb3IgYWxsIGluZm8KKwljaGFyIGJ1ZlsxNl07CQkvKiBlbm91Z2ggZm9yIGFsbCBpbmZvICovCiAJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKIAogCS8qCkBAIC01MTYsNyArNjA2LDE3IEBACiAJICovCiAJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaG90ay0+aGFuZGxlLCAiU0ZVTiIsIE5VTEwsICZ0ZW1wKTsKIAlpZiAoIUFDUElfRkFJTFVSRShydikpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTRlVOIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTRlVOIHZhbHVlICAgICAgICAgOiAlI3hcbiIsCisJCQkgICAgICAgKHVpbnQpIHRlbXApOworCS8qCisJICogVGhlIEhXUlMgbWV0aG9kIHJldHVybiBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGhhcmR3YXJlLgorCSAqIDB4ODAgYml0IGlzIGZvciBXTEFOLCAweDEwMCBmb3IgQmx1ZXRvb3RoLgorCSAqIFRoZSBzaWduaWZpY2FuY2Ugb2Ygb3RoZXJzIGlzIHlldCB0byBiZSBmb3VuZC4KKwkgKiBJZiB3ZSBkb24ndCBmaW5kIHRoZSBtZXRob2QsIHdlIGFzc3VtZSB0aGUgZGV2aWNlIGFyZSBwcmVzZW50LgorCSAqLworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhvdGstPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmdGVtcCk7CisJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiSFJXUyB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKIAkvKgogCSAqIEFub3RoZXIgdmFsdWUgZm9yIHVzZXJzcGFjZTogdGhlIEFTWU0gbWV0aG9kIHJldHVybnMgMHgwMiBmb3IKQEAgLTUyNyw3ICs2MjcsNyBAQAogCSAqLwogCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhvdGstPmhhbmRsZSwgIkFTWU0iLCBOVUxMLCAmdGVtcCk7CiAJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogMHglMDR4XG4iLAorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKIAlpZiAoYXN1c19pbmZvKSB7CiAJCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+bGVuZ3RoKTsKQEAgLTY0OCw4ICs3NDgsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSAwOwogCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CiAKLQkvKiBJbiBtb3N0IG9mIHRoZSBjYXNlLCB3ZSBrbm93IGhvdyB0byBzZXQgdGhlIGRpc3BsYXksIGJ1dCBzb21ldGltZQotCSAgIHdlIGNhbid0IHJlYWQgaXQgKi8KKwkvKgorCSAqIEluIG1vc3Qgb2YgdGhlIGNhc2UsIHdlIGtub3cgaG93IHRvIHNldCB0aGUgZGlzcGxheSwgYnV0IHNvbWV0aW1lCisJICogd2UgY2FuJ3QgcmVhZCBpdAorCSAqLwogCWlmIChkaXNwbGF5X2dldF9oYW5kbGUpIHsKIAkJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGlzcGxheV9nZXRfaGFuZGxlLCBOVUxMLAogCQkJCQkgICBOVUxMLCAmdmFsdWUpOwpAQCAtMTAzNyw2ICsxMTM5LDkgQEAKIAogCUFTVVNfSEFORExFX0lOSVQobGVkZF9zZXQpOwogCisJQVNVU19IQU5ETEVfSU5JVChrbGVkX3NldCk7CisJQVNVU19IQU5ETEVfSU5JVChrbGVkX2dldCk7CisKIAkvKgogCSAqIFRoZSBIV1JTIG1ldGhvZCByZXR1cm4gaW5mb3JtYXRpb25zIGFib3V0IHRoZSBoYXJkd2FyZS4KIAkgKiAweDgwIGJpdCBpcyBmb3IgV0xBTiwgMHgxMDAgZm9yIEJsdWV0b290aC4KQEAgLTEwNjMsOCArMTE2OCwxMCBAQAogCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9zZXQpOwogCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9nZXQpOwogCi0JLyogVGhlcmUgaXMgYSBsb3Qgb2YgbW9kZWxzIHdpdGggIkFMU0wiLCBidXQgYSBmZXcgZ2V0Ci0JICAgYSByZWFsIGxpZ2h0IHNlbnMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgaXQuICovCisJLyoKKwkgKiBUaGVyZSBpcyBhIGxvdCBvZiBtb2RlbHMgd2l0aCAiQUxTTCIsIGJ1dCBhIGZldyBnZXQKKwkgKiBhIHJlYWwgbGlnaHQgc2Vucywgc28gd2UgbmVlZCB0byBjaGVjayBpdC4KKwkgKi8KIAlpZiAoIUFTVVNfSEFORExFX0lOSVQobHNfc3dpdGNoKSkKIAkJQVNVU19IQU5ETEVfSU5JVChsc19sZXZlbCk7CiAKQEAgLTExNjgsNiArMTI3NSwxMCBAQAogCS8qIExDRCBCYWNrbGlnaHQgaXMgb24gYnkgZGVmYXVsdCAqLwogCXdyaXRlX3N0YXR1cyhOVUxMLCAxLCBMQ0RfT04pOwogCisJLyogS2V5Ym9hcmQgQmFja2xpZ2h0IGlzIG9uIGJ5IGRlZmF1bHQgKi8KKwlpZiAoa2xlZF9zZXRfaGFuZGxlKQorCQlzZXRfa2xlZF9sdmwoMSk7CisKIAkvKiBMRUQgZGlzcGxheSBpcyBvZmYgYnkgZGVmYXVsdCAqLwogCWhvdGstPmxlZGRfc3RhdHVzID0gMHhGRkY7CiAKQEAgLTEyMjIsNiArMTMzMyw3IEBACiAJQVNVU19MRURfVU5SRUdJU1RFUihwbGVkKTsKIAlBU1VTX0xFRF9VTlJFR0lTVEVSKHJsZWQpOwogCUFTVVNfTEVEX1VOUkVHSVNURVIoZ2xlZCk7CisJQVNVU19MRURfVU5SRUdJU1RFUihrbGVkKTsKIH0KIAogc3RhdGljIHZvaWQgYXN1c19pbnB1dF9leGl0KHZvaWQpCkBAIC0xMzAxLDEzICsxNDEzLDIwIEBACiAJaWYgKHJ2KQogCQlnb3RvIG91dDQ7CiAKLQlsZWRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxlZF93b3JrcXVldWUiKTsKLQlpZiAoIWxlZF93b3JrcXVldWUpCisJaWYgKGtsZWRfc2V0X2hhbmRsZSAmJiBrbGVkX2dldF9oYW5kbGUpCisJCXJ2ID0gQVNVU19MRURfUkVHSVNURVIoa2xlZCwgZGV2KTsKKwlpZiAocnYpCiAJCWdvdG8gb3V0NTsKIAorCWxlZF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibGVkX3dvcmtxdWV1ZSIpOworCWlmICghbGVkX3dvcmtxdWV1ZSkKKwkJZ290byBvdXQ2OworCiAJcmV0dXJuIDA7Ci1vdXQ1Ogorb3V0NjoKIAlydiA9IC1FTk9NRU07CisJQVNVU19MRURfVU5SRUdJU1RFUihrbGVkKTsKK291dDU6CiAJQVNVU19MRURfVU5SRUdJU1RFUihnbGVkKTsKIG91dDQ6CiAJQVNVU19MRURfVU5SRUdJU1RFUihwbGVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKaW5kZXggMjIyZmZiODkuLmRhM2MwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC0xNDIsMTggKzE0MiwyOCBAQAogCXN0cnVjdCByZmtpbGwgKndsYW5fcmZraWxsOwogCXN0cnVjdCByZmtpbGwgKmJsdWV0b290aF9yZmtpbGw7CiAJc3RydWN0IHJma2lsbCAqd3dhbjNnX3Jma2lsbDsKKwlzdHJ1Y3QgcmZraWxsICp3aW1heF9yZmtpbGw7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwotCXN0cnVjdCB3b3JrX3N0cnVjdCBob3RwbHVnX3dvcms7CisJc3RydWN0IG11dGV4IGhvdHBsdWdfbG9jazsKIH07CiAKIC8qIFRoZSBhY3R1YWwgZGV2aWNlIHRoZSBkcml2ZXIgYmluZHMgdG8gKi8KIHN0YXRpYyBzdHJ1Y3QgZWVlcGNfaG90ayAqZWhvdGs7CiAKIC8qIFBsYXRmb3JtIGRldmljZS9kcml2ZXIgKi8KK3N0YXRpYyBpbnQgZWVlcGNfaG90a190aGF3KHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZWVlcGNfcG1fb3BzID0geworCS50aGF3ID0gZWVlcGNfaG90a190aGF3LAorCS5yZXN0b3JlID0gZWVlcGNfaG90a19yZXN0b3JlLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGxhdGZvcm1fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gRUVFUENfSE9US19GSUxFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJmVlZXBjX3BtX29wcywKIAl9CiB9OwogCkBAIC0xOTIsNyArMjAyLDYgQEAKICAqLwogc3RhdGljIGludCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7Ci1zdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyB2b2lkIGVlZXBjX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGVlZXBjX2RldmljZV9pZHNbXSA9IHsKQEAgLTIwOSw3ICsyMTgsNiBAQAogCS5vcHMgPSB7CiAJCS5hZGQgPSBlZWVwY19ob3RrX2FkZCwKIAkJLnJlbW92ZSA9IGVlZXBjX2hvdGtfcmVtb3ZlLAotCQkucmVzdW1lID0gZWVlcGNfaG90a19yZXN1bWUsCiAJCS5ub3RpZnkgPSBlZWVwY19ob3RrX25vdGlmeSwKIAl9LAogfTsKQEAgLTU3OSw3ICs1ODcsNiBAQAogCiBzdGF0aWMgaW50IGVlZXBjX2hvdGtfY2hlY2sodm9pZCkKIHsKLQljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlpbnQgcmVzdWx0OwogCkBAIC02MDQsMzEgKzYxMSw2IEBACiAJCQlwcl9pbmZvKCJHZXQgY29udHJvbCBtZXRob2RzIHN1cHBvcnRlZDogMHgleFxuIiwKIAkJCQllaG90ay0+Y21fc3VwcG9ydGVkKTsKIAkJfQotCQllaG90ay0+aW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQkJaWYgKCFlaG90ay0+aW5wdXRkZXYpIHsKLQkJCXByX2luZm8oIlVuYWJsZSB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2VcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZWhvdGstPmlucHV0ZGV2LT5uYW1lID0gIkFzdXMgRWVlUEMgZXh0cmEgYnV0dG9ucyI7Ci0JCWVob3RrLT5pbnB1dGRldi0+cGh5cyA9IEVFRVBDX0hPVEtfRklMRSAiL2lucHV0MCI7Ci0JCWVob3RrLT5pbnB1dGRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCQllaG90ay0+aW5wdXRkZXYtPmdldGtleWNvZGUgPSBlZWVwY19nZXRrZXljb2RlOwotCQllaG90ay0+aW5wdXRkZXYtPnNldGtleWNvZGUgPSBlZWVwY19zZXRrZXljb2RlOwotCi0JCWZvciAoa2V5ID0gZWVlcGNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgewotCQkJc3dpdGNoIChrZXktPnR5cGUpIHsKLQkJCWNhc2UgS0VfS0VZOgotCQkJCXNldF9iaXQoRVZfS0VZLCBlaG90ay0+aW5wdXRkZXYtPmV2Yml0KTsKLQkJCQlzZXRfYml0KGtleS0+a2V5Y29kZSwgZWhvdGstPmlucHV0ZGV2LT5rZXliaXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJlc3VsdCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShlaG90ay0+aW5wdXRkZXYpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlwcl9pbmZvKCJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKLQkJCWlucHV0X2ZyZWVfZGV2aWNlKGVob3RrLT5pbnB1dGRldik7Ci0JCQlyZXR1cm4gMDsKLQkJfQogCX0gZWxzZSB7CiAJCXByX2VycigiSG90a2V5IGRldmljZSBub3QgcHJlc2VudCwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY2MSw0MCArNjQzLDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGVlZXBjX2hvdHBsdWdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfaG90cGx1Zyh2b2lkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IHBjaV9idXMgKmJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKLQlib29sIGJsb2NrZWQ7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlib29sIGJsb2NrZWQgPSBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKCk7CiAKLQlpZiAoIWJ1cykgewotCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBQQ0kgYnVzIDE/XG4iKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoZWhvdGstPndsYW5fcmZraWxsKQorCQlyZmtpbGxfc2V0X3N3X3N0YXRlKGVob3RrLT53bGFuX3Jma2lsbCwgYmxvY2tlZCk7CiAKLQlibG9ja2VkID0gZWVlcGNfd2xhbl9yZmtpbGxfYmxvY2tlZCgpOwotCWlmICghYmxvY2tlZCkgewotCQlkZXYgPSBwY2lfZ2V0X3Nsb3QoYnVzLCAwKTsKLQkJaWYgKGRldikgewotCQkJLyogRGV2aWNlIGFscmVhZHkgcHJlc2VudCAqLwotCQkJcGNpX2Rldl9wdXQoZGV2KTsKLQkJCXJldHVybjsKKwltdXRleF9sb2NrKCZlaG90ay0+aG90cGx1Z19sb2NrKTsKKworCWlmIChlaG90ay0+aG90cGx1Z19zbG90KSB7CisJCWJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKKwkJaWYgKCFidXMpIHsKKwkJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBmaW5kIFBDSSBidXMgMT9cbiIpOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCAwKTsKLQkJaWYgKGRldikgewotCQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7Ci0JCQlpZiAocGNpX2J1c19hZGRfZGV2aWNlKGRldikpCi0JCQkJcHJfZXJyKCJVbmFibGUgdG8gaG90cGx1ZyB3aWZpXG4iKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWRldiA9IHBjaV9nZXRfc2xvdChidXMsIDApOwotCQlpZiAoZGV2KSB7Ci0JCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoZGV2KTsKLQkJCXBjaV9kZXZfcHV0KGRldik7CisKKwkJaWYgKCFibG9ja2VkKSB7CisJCQlkZXYgPSBwY2lfZ2V0X3Nsb3QoYnVzLCAwKTsKKwkJCWlmIChkZXYpIHsKKwkJCQkvKiBEZXZpY2UgYWxyZWFkeSBwcmVzZW50ICovCisJCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCQlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgMCk7CisJCQlpZiAoZGV2KSB7CisJCQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CisJCQkJaWYgKHBjaV9idXNfYWRkX2RldmljZShkZXYpKQorCQkJCQlwcl9lcnIoIlVuYWJsZSB0byBob3RwbHVnIHdpZmlcbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2ID0gcGNpX2dldF9zbG90KGJ1cywgMCk7CisJCQlpZiAoZGV2KSB7CisJCQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7CisJCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCX0KIAkJfQogCX0KIAotCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPndsYW5fcmZraWxsLCBibG9ja2VkKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZlaG90ay0+aG90cGx1Z19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKQEAgLTcwMiw3ICs2OTIsNyBAQAogCWlmIChldmVudCAhPSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0spCiAJCXJldHVybjsKIAotCXNjaGVkdWxlX3dvcmsoJmVob3RrLT5ob3RwbHVnX3dvcmspOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGVlZXBjX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCkBAIC04MzksNjYgKzgyOSwzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCi17Ci0JaW50IHJlc3VsdDsKLQotCWlmICghZGV2aWNlKQotCQkgcmV0dXJuIC1FSU5WQUw7Ci0JcHJfbm90aWNlKEVFRVBDX0hPVEtfTkFNRSAiXG4iKTsKLQllaG90ayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZWVwY19ob3RrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlaG90aykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZWhvdGstPmluaXRfZmxhZyA9IERJU0FCTEVfQVNMX1dMQU4gfCBESVNBQkxFX0FTTF9ESVNQTEFZU1dJVENIOwotCWVob3RrLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKLQlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBFRUVQQ19IT1RLX0RFVklDRV9OQU1FKTsKLQlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgRUVFUENfSE9US19DTEFTUyk7Ci0JZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVob3RrOwotCWVob3RrLT5kZXZpY2UgPSBkZXZpY2U7Ci0JcmVzdWx0ID0gZWVlcGNfaG90a19jaGVjaygpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZWhvdGtfZmFpbDsKLQotCXJldHVybiAwOwotCi0gZWhvdGtfZmFpbDoKLQlrZnJlZShlaG90ayk7Ci0JZWhvdGsgPSBOVUxMOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBlZWVwY19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCi17Ci0JaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJIHJldHVybiAtRUlOVkFMOwotCi0Ja2ZyZWUoZWhvdGspOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBlZWVwY19ob3RrX3RoYXcoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCWlmIChlaG90ay0+d2xhbl9yZmtpbGwpIHsKIAkJYm9vbCB3bGFuOwogCi0JCS8qIFdvcmthcm91bmQgLSBpdCBzZWVtcyB0aGF0IF9QVFMgZGlzYWJsZXMgdGhlIHdpcmVsZXNzCi0JCSAgIHdpdGhvdXQgbm90aWZpY2F0aW9uIG9yIGNoYW5naW5nIHRoZSB2YWx1ZSByZWFkIGJ5IFdMQU4uCi0JCSAgIE5vcm1hbGx5IHRoaXMgaXMgZmluZSBiZWNhdXNlIHRoZSBjb3JyZWN0IHZhbHVlIGlzIHJlc3RvcmVkCi0JCSAgIGZyb20gdGhlIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9uIHJlc3VtZSwgYnV0IHdlIG5lZWQgdG8gZG8KLQkJICAgaXQgb3Vyc2VsZiBpZiBjYXNlIHN1c3BlbmQgaXMgYWJvcnRlZCwgb3Igd2UgbG9zZSB3aXJlbGVzcy4KKwkJLyoKKwkJICogV29yayBhcm91bmQgYmlvcyBidWcgLSBhY3BpIF9QVFMgdHVybnMgb2ZmIHRoZSB3aXJlbGVzcyBsZWQKKwkJICogZHVyaW5nIHN1c3BlbmQuICBOb3JtYWxseSBpdCByZXN0b3JlcyBpdCBvbiByZXN1bWUsIGJ1dAorCQkgKiB3ZSBzaG91bGQga2ljayBpdCBvdXJzZWx2ZXMgaW4gY2FzZSBoaWJlcm5hdGlvbiBpcyBhYm9ydGVkLgogCQkgKi8KIAkJd2xhbiA9IGdldF9hY3BpKENNX0FTTF9XTEFOKTsKIAkJc2V0X2FjcGkoQ01fQVNMX1dMQU4sIHdsYW4pOwotCi0JCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPndsYW5fcmZraWxsLCB3bGFuICE9IDEpOwotCi0JCXNjaGVkdWxlX3dvcmsoJmVob3RrLT5ob3RwbHVnX3dvcmspOwogCX0KIAorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJLyogUmVmcmVzaCBib3RoIHdsYW4gcmZraWxsIHN0YXRlIGFuZCBwY2kgaG90cGx1ZyAqLworCWlmIChlaG90ay0+d2xhbl9yZmtpbGwpCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7CisKIAlpZiAoZWhvdGstPmJsdWV0b290aF9yZmtpbGwpCiAJCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPmJsdWV0b290aF9yZmtpbGwsCiAJCQkJICAgIGdldF9hY3BpKENNX0FTTF9CTFVFVE9PVEgpICE9IDEpOworCWlmIChlaG90ay0+d3dhbjNnX3Jma2lsbCkKKwkJcmZraWxsX3NldF9zd19zdGF0ZShlaG90ay0+d3dhbjNnX3Jma2lsbCwKKwkJCQkgICAgZ2V0X2FjcGkoQ01fQVNMXzNHKSAhPSAxKTsKKwlpZiAoZWhvdGstPndpbWF4X3Jma2lsbCkKKwkJcmZraWxsX3NldF9zd19zdGF0ZShlaG90ay0+d2ltYXhfcmZraWxsLAorCQkJCSAgICBnZXRfYWNwaShDTV9BU0xfV0lNQVgpICE9IDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDE5LDE2ICs5ODEsMzcgQEAKIAogc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2V4aXQodm9pZCkKIHsKKwllZWVwY191bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA1Iik7CiAJZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNiIpOwogCWVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCJcXF9TQi5QQ0kwLlAwUDciKTsKLQlpZiAoZWhvdGstPndsYW5fcmZraWxsKQorCWlmIChlaG90ay0+d2xhbl9yZmtpbGwpIHsKIAkJcmZraWxsX3VucmVnaXN0ZXIoZWhvdGstPndsYW5fcmZraWxsKTsKLQlpZiAoZWhvdGstPmJsdWV0b290aF9yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT5ibHVldG9vdGhfcmZraWxsKTsKLQlpZiAoZWhvdGstPnd3YW4zZ19yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT53d2FuM2dfcmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3koZWhvdGstPndsYW5fcmZraWxsKTsKKwkJZWhvdGstPndsYW5fcmZraWxsID0gTlVMTDsKKwl9CisJLyoKKwkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbCBzdGF0ZSB3YXMgY2hhbmdlZCBhZnRlcgorCSAqIGVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCkKKwkgKi8KKwllZWVwY19yZmtpbGxfaG90cGx1ZygpOwogCWlmIChlaG90ay0+aG90cGx1Z19zbG90KQogCQlwY2lfaHBfZGVyZWdpc3RlcihlaG90ay0+aG90cGx1Z19zbG90KTsKKworCWlmIChlaG90ay0+Ymx1ZXRvb3RoX3Jma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3RlcihlaG90ay0+Ymx1ZXRvb3RoX3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGVob3RrLT5ibHVldG9vdGhfcmZraWxsKTsKKwkJZWhvdGstPmJsdWV0b290aF9yZmtpbGwgPSBOVUxMOworCX0KKwlpZiAoZWhvdGstPnd3YW4zZ19yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIoZWhvdGstPnd3YW4zZ19yZmtpbGwpOworCQlyZmtpbGxfZGVzdHJveShlaG90ay0+d3dhbjNnX3Jma2lsbCk7CisJCWVob3RrLT53d2FuM2dfcmZraWxsID0gTlVMTDsKKwl9CisJaWYgKGVob3RrLT53aW1heF9yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIoZWhvdGstPndpbWF4X3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGVob3RrLT53aW1heF9yZmtpbGwpOworCQllaG90ay0+d2ltYXhfcmZraWxsID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGVlZXBjX2lucHV0X2V4aXQodm9pZCkKQEAgLTEwNTAsMTkgKzEwMzMsNiBAQAogCWVlZXBjX2h3bW9uX2RldmljZSA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBlZWVwY19sYXB0b3BfZXhpdCh2b2lkKQotewotCWVlZXBjX2JhY2tsaWdodF9leGl0KCk7Ci0JZWVlcGNfcmZraWxsX2V4aXQoKTsKLQllZWVwY19pbnB1dF9leGl0KCk7Ci0JZWVlcGNfaHdtb25fZXhpdCgpOwotCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwbGF0Zm9ybV9kZXZpY2UtPmRldi5rb2JqLAotCQkJICAgJnBsYXRmb3JtX2F0dHJpYnV0ZV9ncm91cCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdGZvcm1fZHJpdmVyKTsKLX0KLQogc3RhdGljIGludCBlZWVwY19uZXdfcmZraWxsKHN0cnVjdCByZmtpbGwgKipyZmtpbGwsCiAJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgIGVudW0gcmZraWxsX3R5cGUgdHlwZSwgaW50IGNtKQpAQCAtMTA5NCwxMCArMTA2NCw3IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlJTklUX1dPUksoJmVob3RrLT5ob3RwbHVnX3dvcmssIGVlZXBjX2hvdHBsdWdfd29yayk7Ci0KLQllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNiIpOwotCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA3Iik7CisJbXV0ZXhfaW5pdCgmZWhvdGstPmhvdHBsdWdfbG9jayk7CiAKIAlyZXN1bHQgPSBlZWVwY19uZXdfcmZraWxsKCZlaG90ay0+d2xhbl9yZmtpbGwsCiAJCQkJICAiZWVlcGMtd2xhbiIsIGRldiwKQEAgLTExMjAsNiArMTA4NywxMyBAQAogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCiAJCWdvdG8gZXhpdDsKIAorCXJlc3VsdCA9IGVlZXBjX25ld19yZmtpbGwoJmVob3RrLT53aW1heF9yZmtpbGwsCisJCQkJICAiZWVlcGMtd2ltYXgiLCBkZXYsCisJCQkJICBSRktJTExfVFlQRV9XSU1BWCwgQ01fQVNMX1dJTUFYKTsKKworCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCisJCWdvdG8gZXhpdDsKKwogCXJlc3VsdCA9IGVlZXBjX3NldHVwX3BjaV9ob3RwbHVnKCk7CiAJLyoKIAkgKiBJZiB3ZSBnZXQgLUVCVVNZIHRoZW4gc29tZXRoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhlIFBDSSBob3RwbHVnIC0KQEAgLTExMjgsNiArMTEwMiwxNSBAQAogCWlmIChyZXN1bHQgPT0gLUVCVVNZKQogCQlyZXN1bHQgPSAwOwogCisJZWVlcGNfcmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCJcXF9TQi5QQ0kwLlAwUDUiKTsKKwllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNiIpOworCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA3Iik7CisJLyoKKwkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbCBzdGF0ZSB3YXMgY2hhbmdlZCBkdXJpbmcKKwkgKiBzZXR1cC4KKwkgKi8KKwllZWVwY19yZmtpbGxfaG90cGx1ZygpOworCiBleGl0OgogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCiAJCWVlZXBjX3Jma2lsbF9leGl0KCk7CkBAIC0xMTcyLDIxICsxMTU1LDYxIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZWVlcGNfbGFwdG9wX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgZWVlcGNfaW5wdXRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWludCByZXN1bHQ7CisKKwllaG90ay0+aW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWVob3RrLT5pbnB1dGRldikgeworCQlwcl9pbmZvKCJVbmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWVob3RrLT5pbnB1dGRldi0+bmFtZSA9ICJBc3VzIEVlZVBDIGV4dHJhIGJ1dHRvbnMiOworCWVob3RrLT5pbnB1dGRldi0+ZGV2LnBhcmVudCA9IGRldjsKKwllaG90ay0+aW5wdXRkZXYtPnBoeXMgPSBFRUVQQ19IT1RLX0ZJTEUgIi9pbnB1dDAiOworCWVob3RrLT5pbnB1dGRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWVob3RrLT5pbnB1dGRldi0+Z2V0a2V5Y29kZSA9IGVlZXBjX2dldGtleWNvZGU7CisJZWhvdGstPmlucHV0ZGV2LT5zZXRrZXljb2RlID0gZWVlcGNfc2V0a2V5Y29kZTsKKworCWZvciAoa2V5ID0gZWVlcGNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgeworCQlzd2l0Y2ggKGtleS0+dHlwZSkgeworCQljYXNlIEtFX0tFWToKKwkJCXNldF9iaXQoRVZfS0VZLCBlaG90ay0+aW5wdXRkZXYtPmV2Yml0KTsKKwkJCXNldF9iaXQoa2V5LT5rZXljb2RlLCBlaG90ay0+aW5wdXRkZXYtPmtleWJpdCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXN1bHQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZWhvdGstPmlucHV0ZGV2KTsKKwlpZiAocmVzdWx0KSB7CisJCXByX2luZm8oIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlpbnB1dF9mcmVlX2RldmljZShlaG90ay0+aW5wdXRkZXYpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJlc3VsdDsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmVlZXBjX2hvdGtfZHJpdmVyKTsKLQlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKLQlpZiAoIWVob3RrKSB7Ci0JCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHJfbm90aWNlKEVFRVBDX0hPVEtfTkFNRSAiXG4iKTsKKwllaG90ayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZWVwY19ob3RrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlaG90aykKKwkJcmV0dXJuIC1FTk9NRU07CisJZWhvdGstPmluaXRfZmxhZyA9IERJU0FCTEVfQVNMX1dMQU4gfCBESVNBQkxFX0FTTF9ESVNQTEFZU1dJVENIOworCWVob3RrLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBFRUVQQ19IT1RLX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgRUVFUENfSE9US19DTEFTUyk7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVob3RrOworCWVob3RrLT5kZXZpY2UgPSBkZXZpY2U7CiAKKwlyZXN1bHQgPSBlZWVwY19ob3RrX2NoZWNrKCk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX3BsYXRmb3JtX2RyaXZlcjsKIAllZWVwY19lbmFibGVfY2FtZXJhKCk7CiAKIAkvKiBSZWdpc3RlciBwbGF0Zm9ybSBzdHVmZiAqLwpAQCAtMTIxNiw2ICsxMjM5LDEwIEBACiAJCXByX2luZm8oIkJhY2tsaWdodCBjb250cm9sbGVkIGJ5IEFDUEkgdmlkZW8gIgogCQkJImRyaXZlclxuIik7CiAKKwlyZXN1bHQgPSBlZWVwY19pbnB1dF9pbml0KGRldik7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX2lucHV0OworCiAJcmVzdWx0ID0gZWVlcGNfaHdtb25faW5pdChkZXYpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZmFpbF9od21vbjsKQEAgLTEyMjUsOSArMTI1MiwxMiBAQAogCQlnb3RvIGZhaWxfcmZraWxsOwogCiAJcmV0dXJuIDA7CisKIGZhaWxfcmZraWxsOgogCWVlZXBjX2h3bW9uX2V4aXQoKTsKIGZhaWxfaHdtb246CisJZWVlcGNfaW5wdXRfZXhpdCgpOworZmFpbF9pbnB1dDoKIAllZWVwY19iYWNrbGlnaHRfZXhpdCgpOwogZmFpbF9iYWNrbGlnaHQ6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwbGF0Zm9ybV9kZXZpY2UtPmRldi5rb2JqLApAQCAtMTIzOSw5ICsxMjY5LDQ5IEBACiBmYWlsX3BsYXRmb3JtX2RldmljZTE6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CiBmYWlsX3BsYXRmb3JtX2RyaXZlcjoKLQllZWVwY19pbnB1dF9leGl0KCk7CisJa2ZyZWUoZWhvdGspOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludCBlZWVwY19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCit7CisJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZWVwY19iYWNrbGlnaHRfZXhpdCgpOworCWVlZXBjX3Jma2lsbF9leGl0KCk7CisJZWVlcGNfaW5wdXRfZXhpdCgpOworCWVlZXBjX2h3bW9uX2V4aXQoKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBsYXRmb3JtX2RldmljZS0+ZGV2LmtvYmosCisJCQkgICAmcGxhdGZvcm1fYXR0cmlidXRlX2dyb3VwKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwbGF0Zm9ybV9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworCisJa2ZyZWUoZWhvdGspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlZWVwY19sYXB0b3BfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJaWYgKCFlaG90aykgeworCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmZWVlcGNfaG90a19kcml2ZXIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlZWVwY19sYXB0b3BfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlZWVwY19ob3RrX2RyaXZlcik7Cit9CisKIG1vZHVsZV9pbml0KGVlZXBjX2xhcHRvcF9pbml0KTsKIG1vZHVsZV9leGl0KGVlZXBjX2xhcHRvcF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IDIxOGI5YTEuLmYzNWFlZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtNjYsMTEgKzY2LDExIEBACiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19vdXRwdXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1MpIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1NfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNlbmRpZgogCi0jZGVmaW5lIEZVSklUU1VfRFJJVkVSX1ZFUlNJT04gIjAuNS4wIgorI2RlZmluZSBGVUpJVFNVX0RSSVZFUl9WRVJTSU9OICIwLjYuMCIKIAogI2RlZmluZSBGVUpJVFNVX0xDRF9OX0xFVkVMUyA4CiAKQEAgLTk2LDcgKzk2LDcgQEAKIC8qIEZVTkMgaW50ZXJmYWNlIC0gcmVzcG9uc2VzICovCiAjZGVmaW5lIFVOU1VQUE9SVEVEX0NNRCAweDgwMDAwMDAwCiAKLSNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1MpIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1NfTU9EVUxFKQogLyogRlVOQyBpbnRlcmZhY2UgLSBMRUQgY29udHJvbCAqLwogI2RlZmluZSBGVU5DX0xFRF9PRkYJMHgxCiAjZGVmaW5lIEZVTkNfTEVEX09OCTB4MzAwMDEKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX2Z1aml0c3VfaG90a2V5X25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KTsKIAotI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTU19NT0RVTEUpCiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBsb2dvbGFtcF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2Rldik7CiBzdGF0aWMgdm9pZCBsb2dvbGFtcF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJcmV0dXJuIG91dF9vYmouaW50ZWdlci52YWx1ZTsKIH0KIAotI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTU19NT0RVTEUpCiAvKiBMRUQgY2xhc3MgY2FsbGJhY2tzICovCiAKIHN0YXRpYyB2b2lkIGxvZ29sYW1wX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LApAQCAtMzI0LDkgKzMyNCw2IEBACiAJaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+PSBmdWppdHN1LT5tYXhfYnJpZ2h0bmVzcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWZ1aml0c3UpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGZ1aml0c3UtPmFjcGlfaGFuZGxlLCAiU0JMTCIsICZoYW5kbGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX0VSUk9SLCAiU0JMTCBub3QgcHJlc2VudFxuIik7CkBAIC0zNTUsOSArMzUyLDYgQEAKIAlpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IGZ1aml0c3UtPm1heF9icmlnaHRuZXNzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghZnVqaXRzdSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZnVqaXRzdS0+YWNwaV9oYW5kbGUsICJTQkwyIiwgJmhhbmRsZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfRVJST1IsICJTQkwyIG5vdCBwcmVzZW50XG4iKTsKQEAgLTY5NywxMCArNjkxLDEwIEBACiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3Bvd2VyKGZ1aml0c3UtPmFjcGlfaGFuZGxlLCAmc3RhdGUpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHBvd2VyIHN0YXRlXG4iKTsKLQkJZ290byBlbmQ7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfaW5wdXRfZGV2OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlcyBbJXNdICglcylcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiQUNQSTogJXMgWyVzXSAoJXMpXG4iLAogCSAgICAgICBhY3BpX2RldmljZV9uYW1lKGRldmljZSksIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLAogCSAgICAgICAhZGV2aWNlLT5wb3dlci5zdGF0ZSA/ICJvbiIgOiAib2ZmIik7CiAKQEAgLTcyOCwyNSArNzIyLDIyIEBACiAKIAlyZXR1cm4gcmVzdWx0OwogCi1lbmQ6CitlcnJfdW5yZWdpc3Rlcl9pbnB1dF9kZXY6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogZXJyX2ZyZWVfaW5wdXRfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIGVycl9zdG9wOgotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX2Z1aml0c3VfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgZnVqaXRzdV90ICpmdWppdHN1ID0gTlVMTDsKKwlzdHJ1Y3QgZnVqaXRzdV90ICpmdWppdHN1ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdS0+aW5wdXQ7CiAKLQlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAKLQlmdWppdHN1ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCi0JaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwogCiAJZnVqaXRzdS0+YWNwaV9oYW5kbGUgPSBOVUxMOwogCkBAIC04NzEsMTAgKzg2MiwxMCBAQAogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9wb3dlcihmdWppdHN1X2hvdGtleS0+YWNwaV9oYW5kbGUsICZzdGF0ZSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgcG93ZXIgc3RhdGVcbiIpOwotCQlnb3RvIGVuZDsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9pbnB1dF9kZXY7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKCVzKVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiAlcyBbJXNdICglcylcbiIsCiAJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSksCiAJICAgICAgICFkZXZpY2UtPnBvd2VyLnN0YXRlID8gIm9uIiA6ICJvZmYiKTsKIApAQCAtOTExLDcgKzkwMiw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiZnVqaXRzdS1sYXB0b3A6IEJUTkk6IFsweCV4XVxuIiwKIAkJY2FsbF9mZXh0X2Z1bmMoRlVOQ19CVVRUT05TLCAweDAsIDB4MCwgMHgwKSk7CiAKLQkjaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTX01PRFVMRSkKIAlpZiAoY2FsbF9mZXh0X2Z1bmMoRlVOQ19MRURTLCAweDAsIDB4MCwgMHgwKSAmIExPR09MQU1QX1BPV0VST04pIHsKIAkJcmVzdWx0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZmdWppdHN1LT5wZl9kZXZpY2UtPmRldiwKIAkJCQkJCSZsb2dvbGFtcF9sZWQpOwpAQCAtOTM0LDMzICs5MjUsNDEgQEAKIAkJCSJMRUQgaGFuZGxlciBmb3Iga2V5Ym9hcmQgbGFtcHMsIGVycm9yICVpXG4iLCByZXN1bHQpOwogCQl9CiAJfQotCSNlbmRpZgorI2VuZGlmCiAKIAlyZXR1cm4gcmVzdWx0OwogCi1lbmQ6CitlcnJfdW5yZWdpc3Rlcl9pbnB1dF9kZXY6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogZXJyX2ZyZWVfaW5wdXRfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIGVycl9mcmVlX2ZpZm86CiAJa2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CiBlcnJfc3RvcDoKLQogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9mdWppdHN1X2hvdGtleV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewotCXN0cnVjdCBmdWppdHN1X2hvdGtleV90ICpmdWppdHN1X2hvdGtleSA9IE5VTEw7CisJc3RydWN0IGZ1aml0c3VfaG90a2V5X3QgKmZ1aml0c3VfaG90a2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdV9ob3RrZXktPmlucHV0OwogCi0JaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisjaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKwlpZiAoZnVqaXRzdV9ob3RrZXktPmxvZ29sYW1wX3JlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOwogCi0JZnVqaXRzdV9ob3RrZXkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJaWYgKGZ1aml0c3VfaG90a2V5LT5rYmxhbXBzX3JlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZrYmxhbXBzX2xlZCk7CisjZW5kaWYKIAotCWZ1aml0c3VfaG90a2V5LT5hY3BpX2hhbmRsZSA9IE5VTEw7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwogCiAJa2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CiAKKwlmdWppdHN1X2hvdGtleS0+YWNwaV9oYW5kbGUgPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMzAsOCArMTEyOSwxMSBAQAogCQlmdWppdHN1LT5ibF9kZXZpY2UgPQogCQkJYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiZnVqaXRzdS1sYXB0b3AiLCBOVUxMLCBOVUxMLAogCQkJCQkJICAmZnVqaXRzdWJsX29wcyk7Ci0JCWlmIChJU19FUlIoZnVqaXRzdS0+YmxfZGV2aWNlKSkKLQkJCXJldHVybiBQVFJfRVJSKGZ1aml0c3UtPmJsX2RldmljZSk7CisJCWlmIChJU19FUlIoZnVqaXRzdS0+YmxfZGV2aWNlKSkgeworCQkJcmV0ID0gUFRSX0VSUihmdWppdHN1LT5ibF9kZXZpY2UpOworCQkJZnVqaXRzdS0+YmxfZGV2aWNlID0gTlVMTDsKKwkJCWdvdG8gZmFpbF9zeXNmc19ncm91cDsKKwkJfQogCQltYXhfYnJpZ2h0bmVzcyA9IGZ1aml0c3UtPm1heF9icmlnaHRuZXNzOwogCQlmdWppdHN1LT5ibF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gbWF4X2JyaWdodG5lc3MgLSAxOwogCQlmdWppdHN1LT5ibF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSBmdWppdHN1LT5icmlnaHRuZXNzX2xldmVsOwpAQCAtMTE3MSwzMiArMTE3MywyMiBAQAogCXJldHVybiAwOwogCiBmYWlsX2hvdGtleTE6Ci0KIAlrZnJlZShmdWppdHN1X2hvdGtleSk7Ci0KIGZhaWxfaG90a2V5OgotCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZ1aml0c3VwZl9kcml2ZXIpOwotCiBmYWlsX2JhY2tsaWdodDoKLQogCWlmIChmdWppdHN1LT5ibF9kZXZpY2UpCiAJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihmdWppdHN1LT5ibF9kZXZpY2UpOwotCitmYWlsX3N5c2ZzX2dyb3VwOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmZnVqaXRzdS0+cGZfZGV2aWNlLT5kZXYua29iaiwKKwkJCSAgICZmdWppdHN1cGZfYXR0cmlidXRlX2dyb3VwKTsKIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjoKLQogCXBsYXRmb3JtX2RldmljZV9kZWwoZnVqaXRzdS0+cGZfZGV2aWNlKTsKLQogZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOgotCiAJcGxhdGZvcm1fZGV2aWNlX3B1dChmdWppdHN1LT5wZl9kZXZpY2UpOwotCiBmYWlsX3BsYXRmb3JtX2RyaXZlcjoKLQogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Z1aml0c3VfZHJpdmVyKTsKLQogZmFpbF9hY3BpOgotCiAJa2ZyZWUoZnVqaXRzdSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTIwNCwyOSArMTE5NiwyNCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZnVqaXRzdV9jbGVhbnVwKHZvaWQpCiB7Ci0JI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCi0JaWYgKGZ1aml0c3VfaG90a2V5LT5sb2dvbGFtcF9yZWdpc3RlcmVkICE9IDApCi0JCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Z1aml0c3VfaG90a2V5X2RyaXZlcik7CiAKLQlpZiAoZnVqaXRzdV9ob3RrZXktPmtibGFtcHNfcmVnaXN0ZXJlZCAhPSAwKQotCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3Rlcigma2JsYW1wc19sZWQpOwotCSNlbmRpZgorCWtmcmVlKGZ1aml0c3VfaG90a2V5KTsKKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmdWppdHN1cGZfZHJpdmVyKTsKKworCWlmIChmdWppdHN1LT5ibF9kZXZpY2UpCisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihmdWppdHN1LT5ibF9kZXZpY2UpOwogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZmdWppdHN1LT5wZl9kZXZpY2UtPmRldi5rb2JqLAogCQkJICAgJmZ1aml0c3VwZl9hdHRyaWJ1dGVfZ3JvdXApOworCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnVqaXRzdS0+cGZfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZnVqaXRzdXBmX2RyaXZlcik7Ci0JaWYgKGZ1aml0c3UtPmJsX2RldmljZSkKLQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGZ1aml0c3UtPmJsX2RldmljZSk7CiAKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9mdWppdHN1X2RyaXZlcik7CiAKIAlrZnJlZShmdWppdHN1KTsKIAotCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Z1aml0c3VfaG90a2V5X2RyaXZlcik7Ci0KLQlrZnJlZShmdWppdHN1X2hvdGtleSk7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJmdWppdHN1LWxhcHRvcDogZHJpdmVyIHVubG9hZGVkLlxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggYWYwNGY1Yi4uYzI4NDIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKQEAgLTUwNyw3ICs1MDcsNyBAQAogCX0KIAlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkgewogCQlyZmtpbGxfdW5yZWdpc3RlcihibHVldG9vdGhfcmZraWxsKTsKLQkJcmZraWxsX2Rlc3Ryb3kod2lmaV9yZmtpbGwpOworCQlyZmtpbGxfZGVzdHJveShibHVldG9vdGhfcmZraWxsKTsKIAl9CiAJaWYgKHd3YW5fcmZraWxsKSB7CiAJCXJma2lsbF91bnJlZ2lzdGVyKHd3YW5fcmZraWxsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IGRhZmFhNGEuLmY5ZjY4ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtOTc2LDE1ICs5NzYsMTIgQEAKIAkJCQkgICAgICB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKQogewogCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwogCi0JaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpKSkgewotCQlpbmZvID0gYnVmZmVyLnBvaW50ZXI7Ci0KKwlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9QRlggIm1ldGhvZDogbmFtZTogJTQuNHMsIGFyZ3MgJVhcbiIsCiAJCQkoY2hhciAqKSZpbmZvLT5uYW1lLCBpbmZvLT5wYXJhbV9jb3VudCk7CiAKLQkJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCQlrZnJlZShpbmZvKTsKIAl9CiAKIAlyZXR1cm4gQUVfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZTg1NjAwOC4uZjc4ZDI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMTI3OCw2ICsxMjc4LDcgQEAKIAl0cF9yZmsgPSB0cGFjcGlfcmZraWxsX3N3aXRjaGVzW2lkXTsKIAlpZiAodHBfcmZrKSB7CiAJCXJma2lsbF91bnJlZ2lzdGVyKHRwX3Jmay0+cmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3kodHBfcmZrLT5yZmtpbGwpOwogCQl0cGFjcGlfcmZraWxsX3N3aXRjaGVzW2lkXSA9IE5VTEw7CiAJCWtmcmVlKHRwX3Jmayk7CiAJfQpAQCAtMTYwMSw2ICsxNjAyLDE5NiBAQAogI2VuZGlmCiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaXJtd2FyZSBEYXRhCisgKi8KKworLyoKKyAqIFRhYmxlIG9mIHJlY29tbWVuZGVkIG1pbmltdW0gQklPUyB2ZXJzaW9ucworICoKKyAqIFJlYXNvbnMgZm9yIGxpc3Rpbmc6CisgKiAgICAxLiBTdGFibGUgQklPUywgbGlzdGVkIGJlY2F1c2UgdGhlIHVua25vd24gYW1tb3VudCBvZgorICogICAgICAgYnVncyBhbmQgYmFkIEFDUEkgYmVoYXZpb3VyIG9uIG9sZGVyIHZlcnNpb25zCisgKgorICogICAgMi4gQklPUyBvciBFQyBmdyB3aXRoIGtub3duIGJ1Z3MgdGhhdCB0cmlnZ2VyIG9uIExpbnV4CisgKgorICogICAgMy4gQklPUyB3aXRoIGtub3duIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBpbiBvbGRlciB2ZXJzaW9ucworICoKKyAqICBXZSByZWNvbW1lbmQgdGhlIGxhdGVzdCBCSU9TIGFuZCBFQyB2ZXJzaW9uLgorICogIFdlIG9ubHkgc3VwcG9ydCB0aGUgbGF0ZXN0IEJJT1MgYW5kIEVDIGZ3IHZlcnNpb24gYXMgYSBydWxlLgorICoKKyAqICBTb3VyY2VzOiBJQk0gVGhpbmtQYWQgUHVibGljIFdlYiBEb2N1bWVudHMgKHVwZGF0ZSBjaGFuZ2Vsb2dzKSwKKyAqICBJbmZvcm1hdGlvbiBmcm9tIHVzZXJzIGluIFRoaW5rV2lraQorICoKKyAqICBXQVJOSU5HOiB3ZSB1c2UgdGhpcyB0YWJsZSBhbHNvIHRvIGRldGVjdCB0aGF0IHRoZSBtYWNoaW5lIGlzCisgKiAgYSBUaGlua1BhZCBpbiBzb21lIGNhc2VzLCBzbyBkb24ndCByZW1vdmUgZW50cmllcyBsaWdodGx5LgorICovCisKKyNkZWZpbmUgVFBWX1EoX192LCBfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikJCVwKKwl7IC52ZW5kb3IJPSAoX192KSwJCQlcCisJICAuYmlvcwkJPSBUUElEKF9faWQxLCBfX2lkMiksCQlcCisJICAuZWMJCT0gVFBBQ1BJX01BVENIX0FOWSwJCVwKKwkgIC5xdWlya3MJPSBUUEFDUElfTUFUQ0hfQU5ZIDw8IDE2CVwKKwkJCSAgfCAoX19idjEpIDw8IDggfCAoX19idjIpIH0KKworI2RlZmluZSBUUFZfUV9YKF9fdiwgX19iaWQxLCBfX2JpZDIsIF9fYnYxLCBfX2J2MiwJXAorCQlfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKQkJXAorCXsgLnZlbmRvcgk9IChfX3YpLAkJCVwKKwkgIC5iaW9zCQk9IFRQSUQoX19iaWQxLCBfX2JpZDIpLAkJXAorCSAgLmVjCQk9IFRQSUQoX19laWQxLCBfX2VpZDIpLAkJXAorCSAgLnF1aXJrcwk9IChfX2V2MSkgPDwgMjQgfCAoX19ldjIpIDw8IDE2IFwKKwkJCSAgfCAoX19idjEpIDw8IDggfCAoX19idjIpIH0KKworI2RlZmluZSBUUFZfUUkwKF9faWQxLCBfX2lkMiwgX19idjEsIF9fYnYyKSBcCisJVFBWX1EoUENJX1ZFTkRPUl9JRF9JQk0sIF9faWQxLCBfX2lkMiwgX19idjEsIF9fYnYyKQorCisjZGVmaW5lIFRQVl9RSTEoX19pZDEsIF9faWQyLCBfX2J2MSwgX19idjIsIF9fZXYxLCBfX2V2MikgXAorCVRQVl9RX1goUENJX1ZFTkRPUl9JRF9JQk0sIF9faWQxLCBfX2lkMiwgCVwKKwkJX19idjEsIF9fYnYyLCBfX2lkMSwgX19pZDIsIF9fZXYxLCBfX2V2MikKKworI2RlZmluZSBUUFZfUUkyKF9fYmlkMSwgX19iaWQyLCBfX2J2MSwgX19idjIsCQlcCisJCV9fZWlkMSwgX19laWQyLCBfX2V2MSwgX19ldjIpIAkJXAorCVRQVl9RX1goUENJX1ZFTkRPUl9JRF9JQk0sIF9fYmlkMSwgX19iaWQyLCAJXAorCQlfX2J2MSwgX19idjIsIF9fZWlkMSwgX19laWQyLCBfX2V2MSwgX19ldjIpCisKKyNkZWZpbmUgVFBWX1FMMChfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikgXAorCVRQVl9RKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikKKworI2RlZmluZSBUUFZfUUwxKF9faWQxLCBfX2lkMiwgX19idjEsIF9fYnYyLCBfX2V2MSwgX19ldjIpIFwKKwlUUFZfUV9YKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2lkMSwgX19pZDIsIAlcCisJCV9fYnYxLCBfX2J2MiwgX19pZDEsIF9faWQyLCBfX2V2MSwgX19ldjIpCisKKyNkZWZpbmUgVFBWX1FMMihfX2JpZDEsIF9fYmlkMiwgX19idjEsIF9fYnYyLAkJXAorCQlfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKSAJCVwKKwlUUFZfUV9YKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2JpZDEsIF9fYmlkMiwgCVwKKwkJX19idjEsIF9fYnYyLCBfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwYWNwaV9xdWlyayB0cGFjcGlfYmlvc192ZXJzaW9uX3F0YWJsZVtdIF9faW5pdGNvbnN0ID0geworCS8qICBOdW1lcmljIG1vZGVscyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAgICAgIEZXIE1PREVMICAgQklPUyBWRVJTCSAgICAgICovCisJVFBWX1FJMCgnSScsICdNJywgICc2JywgJzUnKSwJCSAvKiA1NzAgKi8KKwlUUFZfUUkwKCdJJywgJ1UnLCAgJzInLCAnNicpLAkJIC8qIDU3MEUgKi8KKwlUUFZfUUkwKCdJJywgJ0InLCAgJzUnLCAnNCcpLAkJIC8qIDYwMCAqLworCVRQVl9RSTAoJ0knLCAnSCcsICAnNCcsICc3JyksCQkgLyogNjAwRSAqLworCVRQVl9RSTAoJ0knLCAnTicsICAnMycsICc2JyksCQkgLyogNjAwRSAqLworCVRQVl9RSTAoJ0knLCAnVCcsICAnNScsICc1JyksCQkgLyogNjAwWCAqLworCVRQVl9RSTAoJ0knLCAnRCcsICAnNCcsICc4JyksCQkgLyogNzcwLCA3NzBFLCA3NzBFRCAqLworCVRQVl9RSTAoJ0knLCAnSScsICAnNCcsICcyJyksCQkgLyogNzcwWCAqLworCVRQVl9RSTAoJ0knLCAnTycsICAnMicsICczJyksCQkgLyogNzcwWiAqLworCisJLyogQS1zZXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgICAgRlcgTU9ERUwgICBCSU9TIFZFUlMgIEVDIFZFUlMgKi8KKwlUUFZfUUkwKCdJJywgJ1cnLCAgJzUnLCAnOScpLAkJIC8qIEEyMG0gKi8KKwlUUFZfUUkwKCdJJywgJ1YnLCAgJzYnLCAnOScpLAkJIC8qIEEyMHAgKi8KKwlUUFZfUUkwKCcxJywgJzAnLCAgJzInLCAnNicpLAkJIC8qIEEyMWUsIEEyMmUgKi8KKwlUUFZfUUkwKCdLJywgJ1UnLCAgJzMnLCAnNicpLAkJIC8qIEEyMWUgKi8KKwlUUFZfUUkwKCdLJywgJ1gnLCAgJzMnLCAnNicpLAkJIC8qIEEyMW0sIEEyMm0gKi8KKwlUUFZfUUkwKCdLJywgJ1knLCAgJzMnLCAnOCcpLAkJIC8qIEEyMXAsIEEyMnAgKi8KKwlUUFZfUUkwKCcxJywgJ0InLCAgJzEnLCAnNycpLAkJIC8qIEEyMmUgKi8KKwlUUFZfUUkwKCcxJywgJzMnLCAgJzInLCAnMCcpLAkJIC8qIEEyMm0gKi8KKwlUUFZfUUkwKCcxJywgJ0UnLCAgJzcnLCAnMycpLAkJIC8qIEEzMC9wICgwKSAqLworCVRQVl9RSTEoJzEnLCAnRycsICAnNCcsICcxJywgICcxJywgJzcnKSwgLyogQTMxL3AgKDApICovCisJVFBWX1FJMSgnMScsICdOJywgICcxJywgJzYnLCAgJzAnLCAnNycpLCAvKiBBMzEvcCAoMCkgKi8KKworCS8qIEctc2VyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAgICAgIEZXIE1PREVMICAgQklPUyBWRVJTCSAgICAgICovCisJVFBWX1FJMCgnMScsICdUJywgICdBJywgJzYnKSwJCSAvKiBHNDAgKi8KKwlUUFZfUUkwKCcxJywgJ1gnLCAgJzUnLCAnNycpLAkJIC8qIEc0MSAqLworCisJLyogUi1zZXJpZXMsIFQtc2VyaWVzIC0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgICAgRlcgTU9ERUwgICBCSU9TIFZFUlMgIEVDIFZFUlMgKi8KKwlUUFZfUUkwKCcxJywgJ0MnLCAgJ0YnLCAnMCcpLAkJIC8qIFIzMCAqLworCVRQVl9RSTAoJzEnLCAnRicsICAnRicsICcxJyksCQkgLyogUjMxICovCisJVFBWX1FJMCgnMScsICdNJywgICc5JywgJzcnKSwJCSAvKiBSMzIgKi8KKwlUUFZfUUkwKCcxJywgJ08nLCAgJzYnLCAnMScpLAkJIC8qIFI0MCAqLworCVRQVl9RSTAoJzEnLCAnUCcsICAnNicsICc1JyksCQkgLyogUjQwICovCisJVFBWX1FJMCgnMScsICdTJywgICc3JywgJzAnKSwJCSAvKiBSNDBlICovCisJVFBWX1FJMSgnMScsICdSJywgICdEJywgJ1InLCAgJzcnLCAnMScpLCAvKiBSNTAvcCwgUjUxLAorCQkJCQkJICAgIFQ0MC9wLCBUNDEvcCwgVDQyL3AgKDEpICovCisJVFBWX1FJMSgnMScsICdWJywgICc3JywgJzEnLCAgJzInLCAnOCcpLCAvKiBSNTBlLCBSNTEgKDEpICovCisJVFBWX1FJMSgnNycsICc4JywgICc3JywgJzEnLCAgJzAnLCAnNicpLCAvKiBSNTFlICgxKSAqLworCVRQVl9RSTEoJzcnLCAnNicsICAnNicsICc5JywgICcxJywgJzYnKSwgLyogUjUyICgxKSAqLworCVRQVl9RSTEoJzcnLCAnMCcsICAnNicsICc5JywgICcyJywgJzgnKSwgLyogUjUyLCBUNDMgKDEpICovCisKKwlUUFZfUUkwKCdJJywgJ1knLCAgJzYnLCAnMScpLAkJIC8qIFQyMCAqLworCVRQVl9RSTAoJ0snLCAnWicsICAnMycsICc0JyksCQkgLyogVDIxICovCisJVFBWX1FJMCgnMScsICc2JywgICczJywgJzInKSwJCSAvKiBUMjIgKi8KKwlUUFZfUUkxKCcxJywgJ0EnLCAgJzYnLCAnNCcsICAnMicsICczJyksIC8qIFQyMyAoMCkgKi8KKwlUUFZfUUkxKCcxJywgJ0knLCAgJzcnLCAnMScsICAnMicsICcwJyksIC8qIFQzMCAoMCkgKi8KKwlUUFZfUUkxKCcxJywgJ1knLCAgJzYnLCAnNScsICAnMicsICc5JyksIC8qIFQ0My9wICgxKSAqLworCisJVFBWX1FMMSgnNycsICc5JywgICdFJywgJzMnLCAgJzUnLCAnMCcpLCAvKiBUNjAvcCAqLworCVRQVl9RTDEoJzcnLCAnQycsICAnRCcsICcyJywgICcyJywgJzInKSwgLyogUjYwLCBSNjBpICovCisJVFBWX1FMMCgnNycsICdFJywgICdEJywgJzAnKSwJCSAvKiBSNjBlLCBSNjBpICovCisKKwkvKiAgICAgIEJJT1MgRlcgICAgQklPUyBWRVJTICBFQyBGVyAgICAgRUMgVkVSUyAqLworCVRQVl9RSTIoJzEnLCAnVycsICAnOScsICcwJywgICcxJywgJ1YnLCAnMicsICc4JyksIC8qIFI1MGUgKDEpICovCisJVFBWX1FMMignNycsICdJJywgICczJywgJzQnLCAgJzcnLCAnOScsICc1JywgJzAnKSwgLyogVDYwL3Agd2lkZSAqLworCisJLyogWC1zZXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgICAgRlcgTU9ERUwgICBCSU9TIFZFUlMgIEVDIFZFUlMgKi8KKwlUUFZfUUkwKCdJJywgJ1onLCAgJzknLCAnRCcpLAkJIC8qIFgyMCwgWDIxICovCisJVFBWX1FJMCgnMScsICdEJywgICc3JywgJzAnKSwJCSAvKiBYMjIsIFgyMywgWDI0ICovCisJVFBWX1FJMSgnMScsICdLJywgICc0JywgJzgnLCAgJzEnLCAnOCcpLCAvKiBYMzAgKDApICovCisJVFBWX1FJMSgnMScsICdRJywgICc5JywgJzcnLCAgJzInLCAnMycpLCAvKiBYMzEsIFgzMiAoMCkgKi8KKwlUUFZfUUkxKCcxJywgJ1UnLCAgJ0QnLCAnMycsICAnQicsICcyJyksIC8qIFg0MCAoMCkgKi8KKwlUUFZfUUkxKCc3JywgJzQnLCAgJzYnLCAnNCcsICAnMicsICc3JyksIC8qIFg0MSAoMCkgKi8KKwlUUFZfUUkxKCc3JywgJzUnLCAgJzYnLCAnMCcsICAnMicsICcwJyksIC8qIFg0MXQgKDApICovCisKKwlUUFZfUUwwKCc3JywgJ0InLCAgJ0QnLCAnNycpLAkJIC8qIFg2MC9zICovCisJVFBWX1FMMCgnNycsICdKJywgICczJywgJzAnKSwJCSAvKiBYNjB0ICovCisKKwkvKiAoMCkgLSBvbGRlciB2ZXJzaW9ucyBsYWNrIERNSSBFQyBmdyBzdHJpbmcgYW5kIGZ1bmN0aW9uYWxpdHkgKi8KKwkvKiAoMSkgLSBvbGRlciB2ZXJzaW9ucyBrbm93biB0byBsYWNrIGZ1bmN0aW9uYWxpdHkgKi8KK307CisKKyN1bmRlZiBUUFZfUUwxCisjdW5kZWYgVFBWX1FMMAorI3VuZGVmIFRQVl9RSTIKKyN1bmRlZiBUUFZfUUkxCisjdW5kZWYgVFBWX1FJMAorI3VuZGVmIFRQVl9RX1gKKyN1bmRlZiBUUFZfUQorCitzdGF0aWMgdm9pZCBfX2luaXQgdHBhY3BpX2NoZWNrX291dGRhdGVkX2Z3KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmd3ZlcnM7CisJdTE2IGVjX3ZlcnNpb24sIGJpb3NfdmVyc2lvbjsKKworCWZ3dmVycyA9IHRwYWNwaV9jaGVja19xdWlya3ModHBhY3BpX2Jpb3NfdmVyc2lvbl9xdGFibGUsCisJCQkJQVJSQVlfU0laRSh0cGFjcGlfYmlvc192ZXJzaW9uX3F0YWJsZSkpOworCisJaWYgKCFmd3ZlcnMpCisJCXJldHVybjsKKworCWJpb3NfdmVyc2lvbiA9IGZ3dmVycyAmIDB4ZmZmZlU7CisJZWNfdmVyc2lvbiA9IChmd3ZlcnMgPj4gMTYpICYgMHhmZmZmVTsKKworCS8qIG5vdGUgdGhhdCB1bmtub3duIHZlcnNpb25zIGFyZSBzZXQgdG8gMHgwMDAwIGFuZCB3ZSB1c2UgdGhhdCAqLworCWlmICgoYmlvc192ZXJzaW9uID4gdGhpbmtwYWRfaWQuYmlvc19yZWxlYXNlKSB8fAorCSAgICAoZWNfdmVyc2lvbiA+IHRoaW5rcGFkX2lkLmVjX3JlbGVhc2UgJiYKKwkJCQllY192ZXJzaW9uICE9IFRQQUNQSV9NQVRDSF9BTlkpKSB7CisJCS8qCisJCSAqIFRoZSBjaGFuZ2Vsb2dzIHdvdWxkIGxldCB1cyB0cmFjayBkb3duIHRoZSBleGFjdAorCQkgKiByZWFzb24sIGJ1dCBpdCBpcyBqdXN0IHRvbyBtdWNoIG9mIGEgcGFpbiB0byB0cmFjaworCQkgKiBpdC4gIFdlIG9ubHkgbGlzdCBCSU9TZXMgdGhhdCBhcmUgZWl0aGVyIHJlYWxseQorCQkgKiBicm9rZW4sIG9yIHJlYWxseSBzdGFibGUgdG8gYmVnaW4gd2l0aCwgc28gaXQgaXMKKwkJICogYmVzdCBpZiB0aGUgdXNlciB1cGdyYWRlcyB0aGUgZmlybXdhcmUgYW55d2F5LgorCQkgKi8KKwkJcHJpbnRrKFRQQUNQSV9XQVJOCisJCQkiV0FSTklORzogT3V0ZGF0ZWQgVGhpbmtQYWQgQklPUy9FQyBmaXJtd2FyZVxuIik7CisJCXByaW50ayhUUEFDUElfV0FSTgorCQkJIldBUk5JTkc6IFRoaXMgZmlybXdhcmUgbWF5IGJlIG1pc3NpbmcgY3JpdGljYWwgYnVnICIKKwkJCSJmaXhlcyBhbmQvb3IgaW1wb3J0YW50IGZlYXR1cmVzXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIF9faW5pdCB0cGFjcGlfaXNfZndfa25vd24odm9pZCkKK3sKKwlyZXR1cm4gdHBhY3BpX2NoZWNrX3F1aXJrcyh0cGFjcGlfYmlvc192ZXJzaW9uX3F0YWJsZSwKKwkJCUFSUkFZX1NJWkUodHBhY3BpX2Jpb3NfdmVyc2lvbl9xdGFibGUpKSAhPSAwOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNjM0LDYgKzE4MjUsNyBAQAogCQkJKHRoaW5rcGFkX2lkLm51bW1vZGVsX3N0cikgPwogCQkJCXRoaW5rcGFkX2lkLm51bW1vZGVsX3N0ciA6ICJ1bmtub3duIik7CiAKKwl0cGFjcGlfY2hlY2tfb3V0ZGF0ZWRfZncoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTczMSwxNiArMTkyMyw0MiBAQAogICAgICAgIHU4IHZvbHVtZV9sZXZlbDsKIH07CiAKKy8qIGt0aHJlYWQgZm9yIHRoZSBob3RrZXkgcG9sbGVyICovCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICp0cGFjcGlfaG90a2V5X3Rhc2s7Ci1zdGF0aWMgdTMyIGhvdGtleV9zb3VyY2VfbWFzazsJCS8qIGJpdCBtYXNrIDA9QUNQSSwxPU5WUkFNICovCi1zdGF0aWMgaW50IGhvdGtleV9wb2xsX2ZyZXEgPSAxMDsJLyogSHogKi8KKworLyogQWNxdWlyZWQgd2hpbGUgdGhlIHBvbGxlciBrdGhyZWFkIGlzIHJ1bm5pbmcsIHVzZSB0byBzeW5jIHN0YXJ0L3N0b3AgKi8KIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggaG90a2V5X3RocmVhZF9tdXRleDsKKworLyoKKyAqIEFjcXVpcmUgbXV0ZXggdG8gd3JpdGUgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzLgorICogSW5jcmVtZW50IGhvdGtleV9jb25maWdfY2hhbmdlIHdoZW4gY2hhbmdpbmcgdGhlbS4KKyAqCisgKiBTZWUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVC9IT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorICovCiBzdGF0aWMgc3RydWN0IG11dGV4IGhvdGtleV90aHJlYWRfZGF0YV9tdXRleDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG90a2V5X2NvbmZpZ19jaGFuZ2U7CiAKKy8qCisgKiBob3RrZXkgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzCisgKgorICogTXVzdCBiZSBhdG9taWMgb3IgcmVhZGVycyB3aWxsIGFsc28gbmVlZCB0byBhY3F1aXJlIG11dGV4CisgKi8KK3N0YXRpYyB1MzIgaG90a2V5X3NvdXJjZV9tYXNrOwkJLyogYml0IG1hc2sgMD1BQ1BJLDE9TlZSQU0gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaG90a2V5X3BvbGxfZnJlcSA9IDEwOyAvKiBIeiAqLworCisjZGVmaW5lIEhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQgXAorCWRvIHsgXAorCQltdXRleF9sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOyBcCisJCWhvdGtleV9jb25maWdfY2hhbmdlKys7IFwKKwl9IHdoaWxlICgwKTsKKyNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQgXAorCW11dGV4X3VubG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKKwogI2Vsc2UgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KIAogI2RlZmluZSBob3RrZXlfc291cmNlX21hc2sgMFUKKyNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAorI2RlZmluZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAogCiAjZW5kaWYgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KIApAQCAtMTc2NSwxOSArMTk4Myw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX3NldCAqaG90a2V5X2Rldl9hdHRyaWJ1dGVzOwogCi0jaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLSNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVCBcCi0JZG8geyBcCi0JCW11dGV4X2xvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7IFwKLQkJaG90a2V5X2NvbmZpZ19jaGFuZ2UrKzsgXAotCX0gd2hpbGUgKDApOwotI2RlZmluZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORCBcCi0JbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwotI2Vsc2UKLSNkZWZpbmUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAotI2RlZmluZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAotI2VuZGlmIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCi0KIC8qIEhLRVkuTUhLRygpIHJldHVybiBiaXRzICovCiAjZGVmaW5lIFRQX0hPVEtFWV9UQUJMRVRfTUFTSyAoMSA8PCAzKQogCkBAIC0xODIyLDcgKzIwMjcsOSBAQAogCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZtLCAiREhLTiIsICJkIikpCiAJCQlyZXR1cm4gLUVJTzsKIAl9CisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAogCWhvdGtleV9tYXNrID0gbSB8IChob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfbWFzayk7CisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKIAogCXJldHVybiAwOwogfQpAQCAtMjA3NSw2ICsyMjgyLDcgQEAKIAl1bnNpZ25lZCBpbnQgc2ksIHNvOwogCXVuc2lnbmVkIGxvbmcgdDsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2RldGVjdG9yLCBtdXN0X3Jlc2V0OworCXVuc2lnbmVkIGludCBwb2xsX2ZyZXE7CiAKIAltdXRleF9sb2NrKCZob3RrZXlfdGhyZWFkX211dGV4KTsKIApAQCAtMjA5MSwxMiArMjI5OSwxNyBAQAogCW11dGV4X2xvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7CiAJY2hhbmdlX2RldGVjdG9yID0gaG90a2V5X2NvbmZpZ19jaGFuZ2U7CiAJbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCXBvbGxfZnJlcSA9IGhvdGtleV9wb2xsX2ZyZXE7CiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwogCWhvdGtleV9yZWFkX252cmFtKCZzW3NvXSwgbWFzayk7CiAKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiBob3RrZXlfcG9sbF9mcmVxKSB7Ci0JCWlmICh0ID09IDApCi0JCQl0ID0gMTAwMC9ob3RrZXlfcG9sbF9mcmVxOworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWlmICh0ID09IDApIHsKKwkJCWlmIChsaWtlbHkocG9sbF9mcmVxKSkKKwkJCQl0ID0gMTAwMC9wb2xsX2ZyZXE7CisJCQllbHNlCisJCQkJdCA9IDEwMDsJLyogc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLworCQl9CiAJCXQgPSBtc2xlZXBfaW50ZXJydXB0aWJsZSh0KTsKIAkJaWYgKHVubGlrZWx5KGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpCiAJCQlicmVhazsKQEAgLTIxMTIsNiArMjMyNSw3IEBACiAJCQljaGFuZ2VfZGV0ZWN0b3IgPSBob3RrZXlfY29uZmlnX2NoYW5nZTsKIAkJfQogCQltYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJCXBvbGxfZnJlcSA9IGhvdGtleV9wb2xsX2ZyZXE7CiAJCW11dGV4X3VubG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKIAogCQlpZiAobGlrZWx5KG1hc2spKSB7CkBAIC0yMTMxLDYgKzIzNDUsNyBAQAogCXJldHVybiAwOwogfQogCisvKiBjYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQgKi8KIHN0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3N0b3Bfc3luYyh2b2lkKQogewogCWlmICh0cGFjcGlfaG90a2V5X3Rhc2spIHsKQEAgLTIxNDcsMTAgKzIzNjIsMTEgQEAKIH0KIAogLyogY2FsbCB3aXRoIGhvdGtleV9tdXRleCBoZWxkICovCi1zdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cChpbnQgbWF5X3dhcm4pCitzdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cChib29sIG1heV93YXJuKQogewotCWlmICgoaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2spICE9IDAgJiYKLQkgICAgaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKKwl1MzIgaG90a2V5c190b19wb2xsID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisKKwlpZiAoaG90a2V5c190b19wb2xsICE9IDAgJiYgaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKIAkgICAgKHRwYWNwaV9pbnB1dGRldi0+dXNlcnMgPiAwIHx8IGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpKSB7CiAJCWlmICghdHBhY3BpX2hvdGtleV90YXNrKSB7CiAJCQl0cGFjcGlfaG90a2V5X3Rhc2sgPSBrdGhyZWFkX3J1bihob3RrZXlfa3RocmVhZCwKQEAgLTIxNjQsMjYgKzIzODAsMzcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWhvdGtleV9wb2xsX3N0b3Bfc3luYygpOwotCQlpZiAobWF5X3dhcm4gJiYKLQkJICAgIGhvdGtleV9zb3VyY2VfbWFzayAhPSAwICYmIGhvdGtleV9wb2xsX2ZyZXEgPT0gMCkgeworCQlpZiAobWF5X3dhcm4gJiYgaG90a2V5c190b19wb2xsICE9IDAgJiYKKwkJICAgIGhvdGtleV9wb2xsX2ZyZXEgPT0gMCkgewogCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKIAkJCQkiaG90IGtleXMgMHglMDh4IHJlcXVpcmUgcG9sbGluZywgIgogCQkJCSJ3aGljaCBpcyBjdXJyZW50bHkgZGlzYWJsZWRcbiIsCi0JCQkJaG90a2V5X3NvdXJjZV9tYXNrKTsKKwkJCQlob3RrZXlzX3RvX3BvbGwpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGludCBtYXlfd2FybikKK3N0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwX3NhZmUoYm9vbCBtYXlfd2FybikKIHsKIAltdXRleF9sb2NrKCZob3RrZXlfbXV0ZXgpOwogCWhvdGtleV9wb2xsX3NldHVwKG1heV93YXJuKTsKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiB9CiAKKy8qIGNhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZCAqLworc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0X2ZyZXEodW5zaWduZWQgaW50IGZyZXEpCit7CisJaWYgKCFmcmVxKQorCQlob3RrZXlfcG9sbF9zdG9wX3N5bmMoKTsKKworCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKKwlob3RrZXlfcG9sbF9mcmVxID0gZnJlcTsKKwlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorfQorCiAjZWxzZSAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTCAqLwogCi1zdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGludCBfX3VudXNlZCkKK3N0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwX3NhZmUoYm9vbCBfX3VudXNlZCkKIHsKIH0KIApAQCAtMjIwMSw3ICsyNDI4LDcgQEAKIAljYXNlIFRQQUNQSV9MSUZFX0VYSVRJTkc6CiAJCXJldHVybiAtRUJVU1k7CiAJY2FzZSBUUEFDUElfTElGRV9SVU5OSU5HOgotCQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKDApOworCQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGZhbHNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjE0LDcgKzI0NDEsNyBAQAogewogCS8qIGRpc2FibGUgaG90a2V5IHBvbGxpbmcgd2hlbiBwb3NzaWJsZSAqLwogCWlmICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcpCi0JCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoMCk7CisJCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoZmFsc2UpOwogfQogCiAvKiBzeXNmcyBob3RrZXkgZW5hYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIyODgsNyArMjUxNSw3IEBACiAJcmVzID0gaG90a2V5X21hc2tfc2V0KHQpOwogCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLQlob3RrZXlfcG9sbF9zZXR1cCgxKTsKKwlob3RrZXlfcG9sbF9zZXR1cCh0cnVlKTsKICNlbmRpZgogCiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwpAQCAtMjMxOCw2ICsyNTQ1LDggQEAKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogeworCXByaW50a19kZXByZWNhdGVkX2F0dHJpYnV0ZSgiaG90a2V5X2Jpb3NfbWFzayIsCisJCQkiVGhpcyBhdHRyaWJ1dGUgaXMgdXNlbGVzcy4iKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwOHhcbiIsIGhvdGtleV9vcmlnX21hc2spOwogfQogCkBAIC0yMzc3LDcgKzI2MDYsOCBAQAogCWhvdGtleV9zb3VyY2VfbWFzayA9IHQ7CiAJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKIAotCWhvdGtleV9wb2xsX3NldHVwKDEpOworCWhvdGtleV9wb2xsX3NldHVwKHRydWUpOworCWhvdGtleV9tYXNrX3NldChob3RrZXlfbWFzayk7CiAKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiAKQEAgLTI0MTAsOSArMjY0MCw5IEBACiAJaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlob3RrZXlfcG9sbF9mcmVxID0gdDsKKwlob3RrZXlfcG9sbF9zZXRfZnJlcSh0KTsKKwlob3RrZXlfcG9sbF9zZXR1cCh0cnVlKTsKIAotCWhvdGtleV9wb2xsX3NldHVwKDEpOwogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAogCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiaG90a2V5X3BvbGxfZnJlcSIsICJzZXQgdG8gJWx1XG4iLCB0KTsKQEAgLTI2MDMsNyArMjgzMyw5IEBACiBzdGF0aWMgdm9pZCBob3RrZXlfZXhpdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCisJbXV0ZXhfbG9jaygmaG90a2V5X211dGV4KTsKIAlob3RrZXlfcG9sbF9zdG9wX3N5bmMoKTsKKwltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiAjZW5kaWYKIAogCWlmIChob3RrZXlfZGV2X2F0dHJpYnV0ZXMpCkBAIC0yNjIzLDYgKzI4NTUsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBob3RrZXlfdW5tYXAoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQoreworCWlmIChob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdICE9IEtFWV9SRVNFUlZFRCkgeworCQljbGVhcl9iaXQoaG90a2V5X2tleWNvZGVfbWFwW3NjYW5jb2RlXSwKKwkJCSAgdHBhY3BpX2lucHV0ZGV2LT5rZXliaXQpOworCQlob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdID0gS0VZX1JFU0VSVkVEOworCX0KK30KKwogc3RhdGljIGludCBfX2luaXQgaG90a2V5X2luaXQoc3RydWN0IGlibV9pbml0X3N0cnVjdCAqaWlibSkKIHsKIAkvKiBSZXF1aXJlbWVudHMgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0IGtleW1hcHM6CkBAIC0yNzAxLDExICsyOTQyLDExIEBACiAJCUtFWV9VTktOT1dOLAkvKiAweDBEOiBGTitJTlNFUlQgKi8KIAkJS0VZX1VOS05PV04sCS8qIDB4MEU6IEZOK0RFTEVURSAqLwogCi0JCS8qIFRoZXNlIGVpdGhlciBoYXZlIHRvIGdvIHRocm91Z2ggQUNQSSB2aWRlbywgb3IKLQkJICogYWN0IGxpa2UgaW4gdGhlIElCTSBUaGlua1BhZHMsIHNvIGRvbid0IGV2ZXIKLQkJICogZW5hYmxlIHRoZW0gYnkgZGVmYXVsdCAqLwotCQlLRVlfUkVTRVJWRUQsCS8qIDB4MEY6IEZOK0hPTUUgKGJyaWdodG5lc3MgdXApICovCi0JCUtFWV9SRVNFUlZFRCwJLyogMHgxMDogRk4rRU5EIChicmlnaHRuZXNzIGRvd24pICovCisJCS8qIFRoZXNlIHNob3VsZCBiZSBlbmFibGVkIC0tb25seS0tIHdoZW4gQUNQSSB2aWRlbworCQkgKiBpcyBkaXNhYmxlZCAoaS5lLiBpbiAidmVuZG9yIiBtb2RlKSwgYW5kIGFyZSBoYW5kbGVkCisJCSAqIGluIGEgc3BlY2lhbCB3YXkgYnkgdGhlIGluaXQgY29kZSAqLworCQlLRVlfQlJJR0hUTkVTU1VQLAkvKiAweDBGOiBGTitIT01FIChicmlnaHRuZXNzIHVwKSAqLworCQlLRVlfQlJJR0hUTkVTU0RPV04sCS8qIDB4MTA6IEZOK0VORCAoYnJpZ2h0bmVzcyBkb3duKSAqLwogCiAJCUtFWV9SRVNFUlZFRCwJLyogMHgxMTogRk4rUEdVUCAodGhpbmtsaWdodCB0b2dnbGUpICovCiAKQEAgLTI4MzEsMTkgKzMwNzIsNiBAQAogCQkJZ290byBlcnJfZXhpdDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKLQkJCQkJJiB+aG90a2V5X2FsbF9tYXNrOwotCX0gZWxzZSB7Ci0JCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSzsKLQl9Ci0KLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCi0JCSAgICAiaG90a2V5IHNvdXJjZSBtYXNrIDB4JTA4eCwgcG9sbGluZyBmcmVxICVkXG4iLAotCQkgICAgaG90a2V5X3NvdXJjZV9tYXNrLCBob3RrZXlfcG9sbF9mcmVxKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUdGQUNJTElUSUVTCiAJaWYgKGRiZ193bHN3ZW11bCkgewogCQl0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdyA9IDE7CkBAIC0yOTQ0LDE3ICszMTcyLDMxIEBACiAJCSAgICAgICAiRGlzYWJsaW5nIHRoaW5rcGFkLWFjcGkgYnJpZ2h0bmVzcyBldmVudHMgIgogCQkgICAgICAgImJ5IGRlZmF1bHQuLi5cbiIpOwogCi0JCS8qIFRoZSBob3RrZXlfcmVzZXJ2ZWRfbWFzayBjaGFuZ2UgYmVsb3cgaXMgbm90Ci0JCSAqIG5lY2Vzc2FyeSB3aGlsZSB0aGUga2V5cyBhcmUgYXQgS0VZX1JFU0VSVkVEIGluIHRoZQotCQkgKiBkZWZhdWx0IG1hcCwgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnksIGxlYXZlIGl0Ci0JCSAqIGhlcmUgYXMgYSBtYXJrZXIgb2Ygd2hhdCB3ZSBoYXZlIHRvIGRvLCBlc3BlY2lhbGx5Ci0JCSAqIHdoZW4gd2UgZmluYWxseSBiZWNvbWUgYWJsZSB0byBzZXQgdGhpcyBhdCBydW50aW1lCi0JCSAqIG9uIHJlc3BvbnNlIHRvIFgub3JnIHJlcXVlc3RzICovCisJCS8qIERpc2FibGUgYnJpZ2h0bmVzcyB1cC9kb3duIG9uIExlbm92byB0aGlua3BhZHMgd2hlbgorCQkgKiBBQ1BJIGlzIGhhbmRsaW5nIHRoZW0sIG90aGVyd2lzZSBpdCBpcyBwbGFpbiBpbXBvc3NpYmxlCisJCSAqIGZvciB1c2Vyc3BhY2UgdG8gZG8gc29tZXRoaW5nIGV2ZW4gcmVtb3RlbHkgc2FuZSAqLwogCQlob3RrZXlfcmVzZXJ2ZWRfbWFzayB8PQogCQkJKDEgPDwgVFBfQUNQSV9IT1RLRVlTQ0FOX0ZOSE9NRSkKIAkJCXwgKDEgPDwgVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORU5EKTsKKwkJaG90a2V5X3VubWFwKFRQX0FDUElfSE9US0VZU0NBTl9GTkhPTUUpOworCQlob3RrZXlfdW5tYXAoVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORU5EKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAorCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgeworCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKKwkJCQkJJiB+aG90a2V5X2FsbF9tYXNrCisJCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOworCX0gZWxzZSB7CisJCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSworCQkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKKwl9CisKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSAgICAiaG90a2V5IHNvdXJjZSBtYXNrIDB4JTA4eCwgcG9sbGluZyBmcmVxICV1XG4iLAorCQkgICAgaG90a2V5X3NvdXJjZV9tYXNrLCBob3RrZXlfcG9sbF9mcmVxKTsKKyNlbmRpZgorCiAJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkiZW5hYmxpbmcgZmlybXdhcmUgSEtFWSBldmVudCBpbnRlcmZhY2UuLi5cbiIpOwogCXJlcyA9IGhvdGtleV9zdGF0dXNfc2V0KHRydWUpOwpAQCAtMjk3OCw3ICszMjIwLDcgQEAKIAl0cGFjcGlfaW5wdXRkZXYtPm9wZW4gPSAmaG90a2V5X2lucHV0ZGV2X29wZW47CiAJdHBhY3BpX2lucHV0ZGV2LT5jbG9zZSA9ICZob3RrZXlfaW5wdXRkZXZfY2xvc2U7CiAKLQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKDEpOworCWhvdGtleV9wb2xsX3NldHVwX3NhZmUodHJ1ZSk7CiAJdHBhY3BpX3NlbmRfcmFkaW9zd191cGRhdGUoKTsKIAl0cGFjcGlfaW5wdXRfc2VuZF90YWJsZXRzdygpOwogCkBAIC0zMjY2LDcgKzM1MDgsNyBAQAogCWhvdGtleV90YWJsZXRfbW9kZV9ub3RpZnlfY2hhbmdlKCk7CiAJaG90a2V5X3dha2V1cF9yZWFzb25fbm90aWZ5X2NoYW5nZSgpOwogCWhvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlX25vdGlmeV9jaGFuZ2UoKTsKLQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKDApOworCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoZmFsc2UpOwogfQogCiAvKiBwcm9jZnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMzMzgsNyArMzU4MCw4IEBACiAJCQlob3RrZXlfZW5hYmxlZGlzYWJsZV93YXJuKDApOwogCQkJcmVzID0gLUVQRVJNOwogCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJyZXNldCIpID09IDApIHsKLQkJCW1hc2sgPSBob3RrZXlfb3JpZ19tYXNrOworCQkJbWFzayA9IChob3RrZXlfYWxsX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spCisJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7CiAJCX0gZWxzZSBpZiAoc3NjYW5mKGNtZCwgIjB4JXgiLCAmbWFzaykgPT0gMSkgewogCQkJLyogbWFzayBzZXQgKi8KIAkJfSBlbHNlIGlmIChzc2NhbmYoY21kLCAiJXgiLCAmbWFzaykgPT0gMSkgewpAQCAtNTY1NSwxNiArNTg5OCwxNiBAQAogCS8qIE1vZGVscyB3aXRoIEFUSSBHUFVzIGtub3duIHRvIHJlcXVpcmUgRUNOVlJBTSBtb2RlICovCiAJVFBBQ1BJX1FfSUJNKCcxJywgJ1knLCBUUEFDUElfQlJHSFRfUV9FQyksCS8qIFQ0My9wIEFUSSAqLwogCi0JLyogTW9kZWxzIHdpdGggQVRJIEdQVXMgKHdhaXRpbmcgY29uZmlybWF0aW9uKSAqLwotCVRQQUNQSV9RX0lCTSgnMScsICdSJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKKwkvKiBNb2RlbHMgd2l0aCBBVEkgR1BVcyB0aGF0IGNhbiB1c2UgRUNOVlJBTSAqLworCVRQQUNQSV9RX0lCTSgnMScsICdSJywgVFBBQ1BJX0JSR0hUX1FfRUMpLAogCVRQQUNQSV9RX0lCTSgnMScsICdRJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKIAlUUEFDUElfUV9JQk0oJzcnLCAnNicsIFRQQUNQSV9CUkdIVF9RX0FTS3xUUEFDUElfQlJHSFRfUV9FQyksCiAJVFBBQ1BJX1FfSUJNKCc3JywgJzgnLCBUUEFDUElfQlJHSFRfUV9BU0t8VFBBQ1BJX0JSR0hUX1FfRUMpLAogCi0JLyogTW9kZWxzIHdpdGggSW50ZWwgRXh0cmVtZSBHcmFwaGljcyAyICh3YWl0aW5nIGNvbmZpcm1hdGlvbikgKi8KKwkvKiBNb2RlbHMgd2l0aCBJbnRlbCBFeHRyZW1lIEdyYXBoaWNzIDIgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnVScsIFRQQUNQSV9CUkdIVF9RX05PRUMpLAogCVRQQUNQSV9RX0lCTSgnMScsICdWJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAogCVRQQUNQSV9RX0lCTSgnMScsICdXJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAotCVRQQUNQSV9RX0lCTSgnMScsICdVJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAogCiAJLyogTW9kZWxzIHdpdGggSW50ZWwgR01BOTAwICovCiAJVFBBQ1BJX1FfSUJNKCc3JywgJzAnLCBUUEFDUElfQlJHSFRfUV9OT0VDKSwJLyogVDQzLCBSNTIgKi8KQEAgLTc1MjQsOSArNzc2NywxMSBAQAogCiAJLyoKIAkgKiBOb24tYW5jaWVudCBtb2RlbHMgaGF2ZSBiZXR0ZXIgRE1JIHRhZ2dpbmcsIGJ1dCB2ZXJ5IG9sZCBtb2RlbHMKLQkgKiBkb24ndC4KKwkgKiBkb24ndC4gIHRwYWNwaV9pc19md19rbm93bigpIGlzIGEgY2hlYXQgdG8gaGVscCBpbiB0aGF0IGNhc2UuCiAJICovCi0JaXNfdGhpbmtwYWQgPSAodGhpbmtwYWRfaWQubW9kZWxfc3RyICE9IE5VTEwpOworCWlzX3RoaW5rcGFkID0gKHRoaW5rcGFkX2lkLm1vZGVsX3N0ciAhPSBOVUxMKSB8fAorCQkgICAgICAodGhpbmtwYWRfaWQuZWNfbW9kZWwgIT0gMCkgfHwKKwkJICAgICAgdHBhY3BpX2lzX2Z3X2tub3duKCk7CiAKIAkvKiBlYyBpcyByZXF1aXJlZCBiZWNhdXNlIG1hbnkgb3RoZXIgaGFuZGxlcyBhcmUgcmVsYXRpdmUgdG8gaXQgKi8KIAlUUEFDUElfQUNQSUhBTkRMRV9JTklUKGVjKTsKQEAgLTc1MzcsMTMgKzc3ODIsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKgotCSAqIFJpc2tzIGEgcmVncmVzc2lvbiBvbiB2ZXJ5IG9sZCBtYWNoaW5lcywgYnV0IHJlZHVjZXMgcG90ZW50aWFsCi0JICogZmFsc2UgcG9zaXRpdmVzIGEgZGFtbiBncmVhdCBkZWFsCi0JICovCi0JaWYgKCFpc190aGlua3BhZCkKLQkJaXNfdGhpbmtwYWQgPSAodGhpbmtwYWRfaWQudmVuZG9yID09IFBDSV9WRU5ET1JfSURfSUJNKTsKLQogCWlmICghaXNfdGhpbmtwYWQgJiYgIWZvcmNlX2xvYWQpCiAJCXJldHVybiAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3BzdGFyLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9wc3Rhci1sYXB0b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmYzZDRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9wc3Rhci1sYXB0b3AuYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIEFDUEkgZHJpdmVyIGZvciBUb3BzdGFyIG5vdGVib29rcyAoaG90a2V5cyBzdXBwb3J0IG9ubHkpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CisgKgorICogSW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgZXhpc3RpbmcgeDg2IHBsYXRmb3JtIGRyaXZlcnMsIGluIHNwZWNpYWwKKyAqIGFzdXMvZWVwYy9mdWppdHN1LWxhcHRvcCwgdGhhbmtzIHRvIHRoZWlyIGF1dGhvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworI2RlZmluZSBBQ1BJX1RPUFNUQVJfQ0xBU1MgInRvcHN0YXIiCisKK3N0cnVjdCB0b3BzdGFyX2hrZXkgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworfTsKKworc3RydWN0IHRwc19rZXlfZW50cnkgeworCXU4IGNvZGU7CisJdTE2IGtleWNvZGU7Cit9OworCitzdGF0aWMgc3RydWN0IHRwc19rZXlfZW50cnkgdG9wc3Rhcl9rZXltYXBbXSA9IHsKKwl7IDB4ODAsIEtFWV9CUklHSFRORVNTVVAgfSwKKwl7IDB4ODEsIEtFWV9CUklHSFRORVNTRE9XTiB9LAorCXsgMHg4MywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDg0LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHg4NSwgS0VZX01VVEUgfSwKKwl7IDB4ODYsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKKwl7IDB4ODcsIEtFWV9GMTMgfSwgLyogdG91Y2hwYWQgZW5hYmxlL2Rpc2FibGUga2V5ICovCisJeyAweDg4LCBLRVlfV0xBTiB9LAorCXsgMHg4YSwgS0VZX1dXVyB9LAorCXsgMHg4YiwgS0VZX01BSUwgfSwKKwl7IDB4OGMsIEtFWV9NRURJQSB9LAorCXsgMHg5NiwgS0VZX0YxNCB9LCAvKiBHIGtleT8gKi8KKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqdHBzX2dldF9rZXlfYnlfc2NhbmNvZGUoaW50IGNvZGUpCit7CisJc3RydWN0IHRwc19rZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gdG9wc3Rhcl9rZXltYXA7IGtleS0+Y29kZTsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+Y29kZSkKKwkJCXJldHVybiBrZXk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCB0cHNfa2V5X2VudHJ5ICp0cHNfZ2V0X2tleV9ieV9rZXljb2RlKGludCBjb2RlKQoreworCXN0cnVjdCB0cHNfa2V5X2VudHJ5ICprZXk7CisKKwlmb3IgKGtleSA9IHRvcHN0YXJfa2V5bWFwOyBrZXktPmNvZGU7IGtleSsrKQorCQlpZiAoY29kZSA9PSBrZXktPmtleWNvZGUpCisJCQlyZXR1cm4ga2V5OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfdG9wc3Rhcl9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5OworCXN0YXRpYyBib29sIGR1cF9ldm50WzJdOworCWJvb2wgKmR1cDsKKwlzdHJ1Y3QgdG9wc3Rhcl9oa2V5ICpoa2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCisJLyogMHg4MyBhbmQgMHg4NCBrZXkgZXZlbnRzIGNvbWVzIGR1cGxpY2F0ZWQuLi4gKi8KKwlpZiAoZXZlbnQgPT0gMHg4MyB8fCBldmVudCA9PSAweDg0KSB7CisJCWR1cCA9ICZkdXBfZXZudFtldmVudCAtIDB4ODNdOworCQlpZiAoKmR1cCkgeworCQkJKmR1cCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisJCSpkdXAgPSB0cnVlOworCX0KKworCS8qCisJICogJ0cga2V5JyBnZW5lcmF0ZSB0d28gZXZlbnQgY29kZXMsIGNvbnZlcnQgdG8gb25seQorCSAqIG9uZSBldmVudC9rZXkgY29kZSBmb3Igbm93ICgzRyBzd2l0Y2g/KQorCSAqLworCWlmIChldmVudCA9PSAweDk3KQorCQlldmVudCA9IDB4OTY7CisKKwlrZXkgPSB0cHNfZ2V0X2tleV9ieV9zY2FuY29kZShldmVudCk7CisJaWYgKGtleSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGhrZXktPmlucHV0ZGV2LCBrZXktPmtleWNvZGUsIDEpOworCQlpbnB1dF9zeW5jKGhrZXktPmlucHV0ZGV2KTsKKwkJaW5wdXRfcmVwb3J0X2tleShoa2V5LT5pbnB1dGRldiwga2V5LT5rZXljb2RlLCAwKTsKKwkJaW5wdXRfc3luYyhoa2V5LT5pbnB1dGRldik7CisJCXJldHVybjsKKwl9CisKKwkvKiBLbm93biBub24gaG90a2V5IGV2ZW50cyBkb24ndCBoYW5kbGVkIG9yIHRoYXQgd2UgZG9uJ3QgY2FyZSB5ZXQgKi8KKwlpZiAoZXZlbnQgPT0gMHg4ZSB8fCBldmVudCA9PSAweDhmIHx8IGV2ZW50ID09IDB4OTApCisJCXJldHVybjsKKworCXByX2luZm8oInVua25vd24gZXZlbnQgPSAweCUwMnhcbiIsIGV2ZW50KTsKK30KKworc3RhdGljIGludCBhY3BpX3RvcHN0YXJfZm5jeF9zd2l0Y2goc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGJvb2wgc3RhdGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0IGZuY3hfcGFyYW1zWzFdID0geworCQl7IC50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVIgfQorCX07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgZm5jeF9hcmdfbGlzdCA9IHsgMSwgJmZuY3hfcGFyYW1zWzBdIH07CisKKwlmbmN4X3BhcmFtc1swXS5pbnRlZ2VyLnZhbHVlID0gc3RhdGUgPyAweDg2IDogMHg4NzsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIkZOQ1giLCAmZm5jeF9hcmdfbGlzdCwgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHN3aXRjaCBGTkNYIG5vdGlmaWNhdGlvbnNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b3BzdGFyX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5ID0gdHBzX2dldF9rZXlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOworCisJaWYgKCFrZXkpCisJCXJldHVybiAtRUlOVkFMOworCisJKmtleWNvZGUgPSBrZXktPmtleWNvZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9wc3Rhcl9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5OworCWludCBvbGRfa2V5Y29kZTsKKworCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXkgPSB0cHNfZ2V0X2tleV9ieV9zY2FuY29kZShzY2FuY29kZSk7CisKKwlpZiAoIWtleSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvbGRfa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKKwlrZXktPmtleWNvZGUgPSBrZXljb2RlOworCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCWlmICghdHBzX2dldF9rZXlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCisJCWNsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfdG9wc3Rhcl9pbml0X2hrZXkoc3RydWN0IHRvcHN0YXJfaGtleSAqaGtleSkKK3sKKwlzdHJ1Y3QgdHBzX2tleV9lbnRyeSAqa2V5OworCisJaGtleS0+aW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWhrZXktPmlucHV0ZGV2KSB7CisJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwloa2V5LT5pbnB1dGRldi0+bmFtZSA9ICJUb3BzdGFyIExhcHRvcCBleHRyYSBidXR0b25zIjsKKwloa2V5LT5pbnB1dGRldi0+cGh5cyA9ICJ0b3BzdGFyL2lucHV0MCI7CisJaGtleS0+aW5wdXRkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwloa2V5LT5pbnB1dGRldi0+Z2V0a2V5Y29kZSA9IHRvcHN0YXJfZ2V0a2V5Y29kZTsKKwloa2V5LT5pbnB1dGRldi0+c2V0a2V5Y29kZSA9IHRvcHN0YXJfc2V0a2V5Y29kZTsKKwlmb3IgKGtleSA9IHRvcHN0YXJfa2V5bWFwOyBrZXktPmNvZGU7IGtleSsrKSB7CisJCXNldF9iaXQoRVZfS0VZLCBoa2V5LT5pbnB1dGRldi0+ZXZiaXQpOworCQlzZXRfYml0KGtleS0+a2V5Y29kZSwgaGtleS0+aW5wdXRkZXYtPmtleWJpdCk7CisJfQorCWlmIChpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaGtleS0+aW5wdXRkZXYpKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGhrZXktPmlucHV0ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV90b3BzdGFyX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdG9wc3Rhcl9oa2V5ICp0cHNfaGtleTsKKworCXRwc19oa2V5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRvcHN0YXJfaGtleSksIEdGUF9LRVJORUwpOworCWlmICghdHBzX2hrZXkpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgIlRvcHN0YXIgVFBTQUNQSSIpOworCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1RPUFNUQVJfQ0xBU1MpOworCisJaWYgKGFjcGlfdG9wc3Rhcl9mbmN4X3N3aXRjaChkZXZpY2UsIHRydWUpKQorCQlnb3RvIGFkZF9lcnI7CisKKwlpZiAoYWNwaV90b3BzdGFyX2luaXRfaGtleSh0cHNfaGtleSkpCisJCWdvdG8gYWRkX2VycjsKKworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSB0cHNfaGtleTsKKwlyZXR1cm4gMDsKKworYWRkX2VycjoKKwlrZnJlZSh0cHNfaGtleSk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV90b3BzdGFyX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCit7CisJc3RydWN0IHRvcHN0YXJfaGtleSAqdHBzX2hrZXkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisKKwlhY3BpX3RvcHN0YXJfZm5jeF9zd2l0Y2goZGV2aWNlLCBmYWxzZSk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh0cHNfaGtleS0+aW5wdXRkZXYpOworCWtmcmVlKHRwc19oa2V5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHRvcHN0YXJfZGV2aWNlX2lkc1tdID0geworCXsgIlRQU0FDUEkwMSIsIDAgfSwKKwl7ICIiLCAwIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCB0b3BzdGFyX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfdG9wc3Rhcl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiVG9wc3RhciBsYXB0b3AgQUNQSSBkcml2ZXIiLAorCS5jbGFzcyA9IEFDUElfVE9QU1RBUl9DTEFTUywKKwkuaWRzID0gdG9wc3Rhcl9kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBhY3BpX3RvcHN0YXJfYWRkLAorCQkucmVtb3ZlID0gYWNwaV90b3BzdGFyX3JlbW92ZSwKKwkJLm5vdGlmeSA9IGFjcGlfdG9wc3Rhcl9ub3RpZnksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvcHN0YXJfbGFwdG9wX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3RvcHN0YXJfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gIlRvcHN0YXIgTGFwdG9wIEFDUEkgZXh0cmFzIGRyaXZlciBsb2FkZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3BzdGFyX2xhcHRvcF9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfdG9wc3Rhcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3BzdGFyX2xhcHRvcF9pbml0KTsKK21vZHVsZV9leGl0KHRvcHN0YXJfbGFwdG9wX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRvcHN0YXIgTGFwdG9wIEFDUEkgRXh0cmFzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwppbmRleCBmMjE1YTU5Li4xNzdmOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwpAQCAtNDIsNyArNDIsNiBAQAogCiAjZGVmaW5lIEFDUElfV01JX0NMQVNTICJ3bWkiCiAKLSN1bmRlZiBQUkVGSVgKICNkZWZpbmUgUFJFRklYICJBQ1BJOiBXTUk6ICIKIAogc3RhdGljIERFRklORV9NVVRFWCh3bWlfZGF0YV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2RyaXZlci5jIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKaW5kZXggNTI3ZWU3Ni4uY2QxMWIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKQEAgLTEzNSw2ICsxMzUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcG5wX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBucF9kZXYgKnBucF9kZXYgPSB0b19wbnBfZGV2KGRldik7CisJc3RydWN0IHBucF9kcml2ZXIgKmRydiA9IHBucF9kZXYtPmRyaXZlcjsKKworCWlmIChkcnYgJiYgZHJ2LT5zaHV0ZG93bikKKwkJZHJ2LT5zaHV0ZG93bihwbnBfZGV2KTsKK30KKwogc3RhdGljIGludCBwbnBfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKIAlzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldiA9IHRvX3BucF9kZXYoZGV2KTsKQEAgLTIwMyw2ICsyMTIsNyBAQAogCS5tYXRjaCAgID0gcG5wX2J1c19tYXRjaCwKIAkucHJvYmUgICA9IHBucF9kZXZpY2VfcHJvYmUsCiAJLnJlbW92ZSAgPSBwbnBfZGV2aWNlX3JlbW92ZSwKKwkuc2h1dGRvd24gPSBwbnBfZGV2aWNlX3NodXRkb3duLAogCS5zdXNwZW5kID0gcG5wX2J1c19zdXNwZW5kLAogCS5yZXN1bWUgID0gcG5wX2J1c19yZXN1bWUsCiAJLmRldl9hdHRycyA9IHBucF9pbnRlcmZhY2VfYXR0cnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IDk0OTY0OTRmLi5jMDdmZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwpAQCAtMTk0LDEzICsxOTQsMTMgQEAKIAkJcG5wYWNwaV9wYXJzZV9yZXNvdXJjZV9vcHRpb25fZGF0YShkZXYpOwogCiAJaWYgKGRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OworCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspIHsKLQkJCWlmICghaXNwbnBpZGFjcGkoY2lkX2xpc3QtPmlkW2ldLnZhbHVlKSkKKwkJCWlmICghaXNwbnBpZGFjcGkoY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpKQogCQkJCWNvbnRpbnVlOwotCQkJcG5wX2FkZF9pZChkZXYsIGNpZF9saXN0LT5pZFtpXS52YWx1ZSk7CisJCQlwbnBfYWRkX2lkKGRldiwgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCAyZGM0MmJiLi5iY2JiMTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTEsNiArMSw1IEBACiBtZW51Y29uZmlnIFJFR1VMQVRPUgogCWJvb2wgIlZvbHRhZ2UgYW5kIEN1cnJlbnQgUmVndWxhdG9yIFN1cHBvcnQiCi0JZGVmYXVsdCBuCiAJaGVscAogCSAgR2VuZXJpYyBWb2x0YWdlIGFuZCBDdXJyZW50IFJlZ3VsYXRvciBzdXBwb3J0LgogCkBAIC0zMCw3ICsyOSw2IEBACiAKIGNvbmZpZyBSRUdVTEFUT1JfRklYRURfVk9MVEFHRQogCXRyaXN0YXRlICJGaXhlZCB2b2x0YWdlIHJlZ3VsYXRvciBzdXBwb3J0IgotCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGZpeGVkIHZvbHRhZ2UgcmVndWxhdG9ycywKIAkgIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aGljaCB1c2UgYSBjb21iaW5hdGlvbiBvZiBzb2Z0d2FyZQpAQCAtMzgsNyArMzYsNiBAQAogCiBjb25maWcgUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIKIAl0cmlzdGF0ZSAiVmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydCIKLQlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIHZpcnR1YWwgY29uc3VtZXIgZm9yIHRoZSB2b2x0YWdlIGFuZAogICAgICAgICAgIGN1cnJlbnQgcmVndWxhdG9yIEFQSSB3aGljaCBwcm92aWRlcyBzeXNmcyBjb250cm9scyBmb3IKQEAgLTQ5LDE3ICs0NiwxNSBAQAogCiBjb25maWcgUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUgogCXRyaXN0YXRlICJVc2Vyc3BhY2UgcmVndWxhdG9yIGNvbnN1bWVyIHN1cHBvcnQiCi0JZGVmYXVsdCBuCiAJaGVscAogCSAgVGhlcmUgYXJlIHNvbWUgY2xhc3NlcyBvZiBkZXZpY2VzIHRoYXQgYXJlIGNvbnRyb2xsZWQgZW50aXJlbHkKLQkgIGZyb20gdXNlciBzcGFjZS4gVXNlcnNhcGNlIGNvbnN1bWVyIGRyaXZlciBwcm92aWRlcyBhYmlsaXR5IHRvCisJICBmcm9tIHVzZXIgc3BhY2UuIFVzZXJzcGFjZSBjb25zdW1lciBkcml2ZXIgcHJvdmlkZXMgYWJpbGl0eSB0bwogCSAgY29udHJvbCBwb3dlciBzdXBwbGllcyBmb3Igc3VjaCBkZXZpY2VzLgogCiAgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgbm8uCiAKIGNvbmZpZyBSRUdVTEFUT1JfQlEyNDAyMgogCXRyaXN0YXRlICJUSSBicTI0MDIyIER1YWwgSW5wdXQgMS1DZWxsIExpLUlvbiBDaGFyZ2VyIElDIgotCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGNvbnRyb2xzIGEgVEkgYnEyNDAyMiBDaGFyZ2VyIGF0dGFjaGVkIHZpYQogCSAgR1BJT3MuIFRoZSBwcm92aWRlZCBjdXJyZW50IHJlZ3VsYXRvciBjYW4gZW5hYmxlL2Rpc2FibGUKQEAgLTY5LDcgKzY0LDYgQEAKIGNvbmZpZyBSRUdVTEFUT1JfTUFYMTU4NgogCXRyaXN0YXRlICJNYXhpbSAxNTg2LzE1ODcgdm9sdGFnZSByZWd1bGF0b3IiCiAJZGVwZW5kcyBvbiBJMkMKLQlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGRyaXZlciBjb250cm9scyBhIE1heGltIDE1ODYgb3IgMTU4NyB2b2x0YWdlIG91dHB1dAogCSAgcmVndWxhdG9yIHZpYSBJMkMgYnVzLiBUaGUgcHJvdmlkZWQgcmVndWxhdG9yIGlzIHN1aXRhYmxlCkBAIC0xNDcsNSArMTQxLDIxIEBACiAJIEFCMzEwMCBhbmFsb2cgYmFzZWJhbmQgZGVhbGluZyB3aXRoIHBvd2VyIHJlZ3VsYXRvcnMKIAkgZm9yIHRoZSBzeXN0ZW0uCiAKK2NvbmZpZyBSRUdVTEFUT1JfVFBTNjUwMjMKKwl0cmlzdGF0ZSAiVEkgVFBTNjUwMjMgUG93ZXIgcmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFRQUzY1MDIzIHZvbHRhZ2UgcmVndWxhdG9yIGNoaXBzLiBUUFM2NTAyMyBwcm92aWRlcworCSAgdGhyZWUgc3RlcC1kb3duIGNvbnZlcnRlcnMgYW5kIHR3byBnZW5lcmFsLXB1cnBvc2UgTERPIHZvbHRhZ2UgcmVndWxhdG9ycy4KKwkgIEl0IHN1cHBvcnRzIFRJJ3Mgc29mdHdhcmUgYmFzZWQgQ2xhc3MtMiBTbWFydFJlZmxleCBpbXBsZW1lbnRhdGlvbi4KKworY29uZmlnIFJFR1VMQVRPUl9UUFM2NTA3WAorCXRyaXN0YXRlICJUSSBUUFM2NTA3WCBQb3dlciByZWd1bGF0b3JzIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgVFBTNjUwN1ggdm9sdGFnZSByZWd1bGF0b3IgY2hpcHMuIFRQUzY1MDdYIHByb3ZpZGVzCisJICB0aHJlZSBzdGVwLWRvd24gY29udmVydGVycyBhbmQgdHdvIGdlbmVyYWwtcHVycG9zZSBMRE8gdm9sdGFnZSByZWd1bGF0b3JzLgorCSAgSXQgc3VwcG9ydHMgVEkncyBzb2Z0d2FyZSBiYXNlZCBDbGFzcy0yIFNtYXJ0UmVmbGV4IGltcGxlbWVudGF0aW9uLgorCiBlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IDc2OGIzMzEuLjQyNTdhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC0yMyw0ICsyMyw3IEBACiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01DMTM3ODMpICs9IG1jMTM3ODMubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9BQjMxMDApICs9IGFiMzEwMC5vCiAKK29iai0kKENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMpICs9IHRwczY1MDIzLXJlZ3VsYXRvci5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYKSArPSB0cHM2NTA3eC1yZWd1bGF0b3IubworCiBjY2ZsYWdzLSQoQ09ORklHX1JFR1VMQVRPUl9ERUJVRykgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IDkxYmE5YmYuLjc0NGVhMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTM3LDcgKzM3LDcgQEAKICAqLwogc3RydWN0IHJlZ3VsYXRvcl9tYXAgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJY29uc3QgY2hhciAqZGV2X25hbWU7ICAgLyogVGhlIGRldl9uYW1lKCkgZm9yIHRoZSBjb25zdW1lciAqLwogCWNvbnN0IGNoYXIgKnN1cHBseTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogfTsKQEAgLTIzMiw3ICsyMzIsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJY29uc3QgY2hhciAqbmFtZTsKIAotCWlmIChyZGV2LT5jb25zdHJhaW50cy0+bmFtZSkKKwlpZiAocmRldi0+Y29uc3RyYWludHMgJiYgcmRldi0+Y29uc3RyYWludHMtPm5hbWUpCiAJCW5hbWUgPSByZGV2LT5jb25zdHJhaW50cy0+bmFtZTsKIAllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQogCQluYW1lID0gcmRldi0+ZGVzYy0+bmFtZTsKQEAgLTI4MCw4ICsyODAsMTMgQEAKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCByZXQ7CiAKLQlyZXR1cm4gcmVndWxhdG9yX3ByaW50X3N0YXRlKGJ1ZiwgX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJkZXYpKTsKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CisJcmV0ID0gcmVndWxhdG9yX3ByaW50X3N0YXRlKGJ1ZiwgX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJkZXYpKTsKKwltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIDA0NDQsIHJlZ3VsYXRvcl9zdGF0ZV9zaG93LCBOVUxMKTsKIApAQCAtODU3LDIzICs4NjIsMzkgQEAKICAqIHNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5OiBCaW5kIGEgcmVndWxhdG9yIHRvIGEgc3ltYm9saWMgc3VwcGx5CiAgKiBAcmRldjogICAgICAgICByZWd1bGF0b3Igc291cmNlCiAgKiBAY29uc3VtZXJfZGV2OiBkZXZpY2UgdGhlIHN1cHBseSBhcHBsaWVzIHRvCisgKiBAY29uc3VtZXJfZGV2X25hbWU6IGRldl9uYW1lKCkgc3RyaW5nIGZvciBkZXZpY2Ugc3VwcGx5IGFwcGxpZXMgdG8KICAqIEBzdXBwbHk6ICAgICAgIHN5bWJvbGljIG5hbWUgZm9yIHN1cHBseQogICoKICAqIEFsbG93cyBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBjb2RlIHRvIG1hcCBwaHlzaWNhbCByZWd1bGF0b3IKICAqIHNvdXJjZXMgdG8gc3ltYm9saWMgbmFtZXMgZm9yIHN1cHBsaWVzIGZvciB1c2UgYnkgZGV2aWNlcy4gIERldmljZXMKICAqIHNob3VsZCB1c2UgdGhlc2Ugc3ltYm9saWMgbmFtZXMgdG8gcmVxdWVzdCByZWd1bGF0b3JzLCBhdm9pZGluZyB0aGUKICAqIG5lZWQgdG8gcHJvdmlkZSBib2FyZC1zcGVjaWZpYyByZWd1bGF0b3IgbmFtZXMgYXMgcGxhdGZvcm0gZGF0YS4KKyAqCisgKiBPbmx5IG9uZSBvZiBjb25zdW1lcl9kZXYgYW5kIGNvbnN1bWVyX2Rldl9uYW1lIG1heSBiZSBzcGVjaWZpZWQuCiAgKi8KIHN0YXRpYyBpbnQgc2V0X2NvbnN1bWVyX2RldmljZV9zdXBwbHkoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0Jc3RydWN0IGRldmljZSAqY29uc3VtZXJfZGV2LCBjb25zdCBjaGFyICpzdXBwbHkpCisJc3RydWN0IGRldmljZSAqY29uc3VtZXJfZGV2LCBjb25zdCBjaGFyICpjb25zdW1lcl9kZXZfbmFtZSwKKwljb25zdCBjaGFyICpzdXBwbHkpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9tYXAgKm5vZGU7CisJaW50IGhhc19kZXY7CisKKwlpZiAoY29uc3VtZXJfZGV2ICYmIGNvbnN1bWVyX2Rldl9uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY29uc3VtZXJfZGV2X25hbWUgJiYgY29uc3VtZXJfZGV2KQorCQljb25zdW1lcl9kZXZfbmFtZSA9IGRldl9uYW1lKGNvbnN1bWVyX2Rldik7CiAKIAlpZiAoc3VwcGx5ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGNvbnN1bWVyX2Rldl9uYW1lICE9IE5VTEwpCisJCWhhc19kZXYgPSAxOworCWVsc2UKKwkJaGFzX2RldiA9IDA7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZyZWd1bGF0b3JfbWFwX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGNvbnN1bWVyX2RldiAhPSBub2RlLT5kZXYpCisJCWlmIChjb25zdW1lcl9kZXZfbmFtZSAhPSBub2RlLT5kZXZfbmFtZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc3RyY21wKG5vZGUtPnN1cHBseSwgc3VwcGx5KSAhPSAwKQogCQkJY29udGludWU7CkBAIC04ODYsMzAgKzkwNyw0NSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCW5vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX21hcCksIEdGUF9LRVJORUwpOworCW5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX21hcCksIEdGUF9LRVJORUwpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJbm9kZS0+cmVndWxhdG9yID0gcmRldjsKLQlub2RlLT5kZXYgPSBjb25zdW1lcl9kZXY7CiAJbm9kZS0+c3VwcGx5ID0gc3VwcGx5OwogCisJaWYgKGhhc19kZXYpIHsKKwkJbm9kZS0+ZGV2X25hbWUgPSBrc3RyZHVwKGNvbnN1bWVyX2Rldl9uYW1lLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5vZGUtPmRldl9uYW1lID09IE5VTEwpIHsKKwkJCWtmcmVlKG5vZGUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKIAlsaXN0X2FkZCgmbm9kZS0+bGlzdCwgJnJlZ3VsYXRvcl9tYXBfbGlzdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHVuc2V0X2NvbnN1bWVyX2RldmljZV9zdXBwbHkoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0Jc3RydWN0IGRldmljZSAqY29uc3VtZXJfZGV2KQorCWNvbnN0IGNoYXIgKmNvbnN1bWVyX2Rldl9uYW1lLCBzdHJ1Y3QgZGV2aWNlICpjb25zdW1lcl9kZXYpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9tYXAgKm5vZGUsICpuOwogCisJaWYgKGNvbnN1bWVyX2RldiAmJiAhY29uc3VtZXJfZGV2X25hbWUpCisJCWNvbnN1bWVyX2Rldl9uYW1lID0gZGV2X25hbWUoY29uc3VtZXJfZGV2KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmcmVndWxhdG9yX21hcF9saXN0LCBsaXN0KSB7Ci0JCWlmIChyZGV2ID09IG5vZGUtPnJlZ3VsYXRvciAmJgotCQkJY29uc3VtZXJfZGV2ID09IG5vZGUtPmRldikgewotCQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOwotCQkJa2ZyZWUobm9kZSk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJaWYgKHJkZXYgIT0gbm9kZS0+cmVndWxhdG9yKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbnN1bWVyX2Rldl9uYW1lICYmIG5vZGUtPmRldl9uYW1lICYmCisJCSAgICBzdHJjbXAoY29uc3VtZXJfZGV2X25hbWUsIG5vZGUtPmRldl9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKKwkJa2ZyZWUobm9kZS0+ZGV2X25hbWUpOworCQlrZnJlZShub2RlKTsKKwkJcmV0dXJuOwogCX0KIH0KIApAQCAtOTIwLDYgKzk1Niw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG4sICZyZWd1bGF0b3JfbWFwX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHJkZXYgPT0gbm9kZS0+cmVndWxhdG9yKSB7CiAJCQlsaXN0X2RlbCgmbm9kZS0+bGlzdCk7CisJCQlrZnJlZShub2RlLT5kZXZfbmFtZSk7CiAJCQlrZnJlZShub2RlKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTAwMSw2ICsxMDM4LDc3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qIEludGVybmFsIHJlZ3VsYXRvciByZXF1ZXN0IGZ1bmN0aW9uICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqX3JlZ3VsYXRvcl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCwKKwkJCQkJaW50IGV4Y2x1c2l2ZSkKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwlzdHJ1Y3QgcmVndWxhdG9yX21hcCAqbWFwOworCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciA9IEVSUl9QVFIoLUVOT0RFVik7CisJY29uc3QgY2hhciAqZGV2bmFtZSA9IE5VTEw7CisJaW50IHJldDsKKworCWlmIChpZCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yOiBnZXQoKSB3aXRoIG5vIGlkZW50aWZpZXJcbiIpOworCQlyZXR1cm4gcmVndWxhdG9yOworCX0KKworCWlmIChkZXYpCisJCWRldm5hbWUgPSBkZXZfbmFtZShkZXYpOworCisJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXAsICZyZWd1bGF0b3JfbWFwX2xpc3QsIGxpc3QpIHsKKwkJLyogSWYgdGhlIG1hcHBpbmcgaGFzIGEgZGV2aWNlIHNldCB1cCBpdCBtdXN0IG1hdGNoICovCisJCWlmIChtYXAtPmRldl9uYW1lICYmCisJCSAgICAoIWRldm5hbWUgfHwgc3RyY21wKG1hcC0+ZGV2X25hbWUsIGRldm5hbWUpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJjbXAobWFwLT5zdXBwbHksIGlkKSA9PSAwKSB7CisJCQlyZGV2ID0gbWFwLT5yZWd1bGF0b3I7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCXJldHVybiByZWd1bGF0b3I7CisKK2ZvdW5kOgorCWlmIChyZGV2LT5leGNsdXNpdmUpIHsKKwkJcmVndWxhdG9yID0gRVJSX1BUUigtRVBFUk0pOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZXhjbHVzaXZlICYmIHJkZXYtPm9wZW5fY291bnQpIHsKKwkJcmVndWxhdG9yID0gRVJSX1BUUigtRUJVU1kpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJkZXYtPm93bmVyKSkKKwkJZ290byBvdXQ7CisKKwlyZWd1bGF0b3IgPSBjcmVhdGVfcmVndWxhdG9yKHJkZXYsIGRldiwgaWQpOworCWlmIChyZWd1bGF0b3IgPT0gTlVMTCkgeworCQlyZWd1bGF0b3IgPSBFUlJfUFRSKC1FTk9NRU0pOworCQltb2R1bGVfcHV0KHJkZXYtPm93bmVyKTsKKwl9CisKKwlyZGV2LT5vcGVuX2NvdW50Kys7CisJaWYgKGV4Y2x1c2l2ZSkgeworCQlyZGV2LT5leGNsdXNpdmUgPSAxOworCisJCXJldCA9IF9yZWd1bGF0b3JfaXNfZW5hYmxlZChyZGV2KTsKKwkJaWYgKHJldCA+IDApCisJCQlyZGV2LT51c2VfY291bnQgPSAxOworCQllbHNlCisJCQlyZGV2LT51c2VfY291bnQgPSAwOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCisJcmV0dXJuIHJlZ3VsYXRvcjsKK30KKwogLyoqCiAgKiByZWd1bGF0b3JfZ2V0IC0gbG9va3VwIGFuZCBvYnRhaW4gYSByZWZlcmVuY2UgdG8gYSByZWd1bGF0b3IuCiAgKiBAZGV2OiBkZXZpY2UgZm9yIHJlZ3VsYXRvciAiY29uc3VtZXIiCkBAIC0xMDE2LDQ0ICsxMTI0LDM4IEBACiAgKi8KIHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlzdHJ1Y3QgcmVndWxhdG9yX21hcCAqbWFwOwotCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciA9IEVSUl9QVFIoLUVOT0RFVik7Ci0KLQlpZiAoaWQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInJlZ3VsYXRvcjogZ2V0KCkgd2l0aCBubyBpZGVudGlmaWVyXG4iKTsKLQkJcmV0dXJuIHJlZ3VsYXRvcjsKLQl9Ci0KLQltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnJlZ3VsYXRvcl9tYXBfbGlzdCwgbGlzdCkgewotCQlpZiAoZGV2ID09IG1hcC0+ZGV2ICYmCi0JCSAgICBzdHJjbXAobWFwLT5zdXBwbHksIGlkKSA9PSAwKSB7Ci0JCQlyZGV2ID0gbWFwLT5yZWd1bGF0b3I7Ci0JCQlnb3RvIGZvdW5kOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZWd1bGF0b3I7Ci0KLWZvdW5kOgotCWlmICghdHJ5X21vZHVsZV9nZXQocmRldi0+b3duZXIpKQotCQlnb3RvIG91dDsKLQotCXJlZ3VsYXRvciA9IGNyZWF0ZV9yZWd1bGF0b3IocmRldiwgZGV2LCBpZCk7Ci0JaWYgKHJlZ3VsYXRvciA9PSBOVUxMKSB7Ci0JCXJlZ3VsYXRvciA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCW1vZHVsZV9wdXQocmRldi0+b3duZXIpOwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZWd1bGF0b3I7CisJcmV0dXJuIF9yZWd1bGF0b3JfZ2V0KGRldiwgaWQsIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2dldCk7CiAKIC8qKgorICogcmVndWxhdG9yX2dldF9leGNsdXNpdmUgLSBvYnRhaW4gZXhjbHVzaXZlIGFjY2VzcyB0byBhIHJlZ3VsYXRvci4KKyAqIEBkZXY6IGRldmljZSBmb3IgcmVndWxhdG9yICJjb25zdW1lciIKKyAqIEBpZDogU3VwcGx5IG5hbWUgb3IgcmVndWxhdG9yIElELgorICoKKyAqIFJldHVybnMgYSBzdHJ1Y3QgcmVndWxhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ3VsYXRvciBwcm9kdWNlciwKKyAqIG9yIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgT3RoZXIgY29uc3VtZXJzIHdpbGwgYmUKKyAqIHVuYWJsZSB0byBvYnRhaW4gdGhpcyByZWZlcmVuY2UgaXMgaGVsZCBhbmQgdGhlIHVzZSBjb3VudCBmb3IgdGhlCisgKiByZWd1bGF0b3Igd2lsbCBiZSBpbml0aWFsaXNlZCB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQorICogcmVndWxhdG9yLgorICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBjb25zdW1lcnMgd2hpY2ggY2Fubm90IHRvbGVyYXRlIHNoYXJlZAorICogdXNlIG9mIHRoZSByZWd1bGF0b3Igc3VjaCBhcyB0aG9zZSB3aGljaCBuZWVkIHRvIGZvcmNlIHRoZQorICogcmVndWxhdG9yIG9mZiBmb3IgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIGhhcmR3YXJlIHRoZXkgYXJlCisgKiBjb250cm9sbGluZy4KKyAqCisgKiBVc2Ugb2Ygc3VwcGx5IG5hbWVzIGNvbmZpZ3VyZWQgdmlhIHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseSgpIGlzCisgKiBzdHJvbmdseSBlbmNvdXJhZ2VkLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3VwcGx5IG5hbWUgdXNlZAorICogc2hvdWxkIG1hdGNoIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSBzdXBwbHkgYW5kL29yIHRoZSByZWxldmFudAorICogZGV2aWNlIHBpbnMgaW4gdGhlIGRhdGFzaGVldC4KKyAqLworc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yX2dldF9leGNsdXNpdmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4gX3JlZ3VsYXRvcl9nZXQoZGV2LCBpZCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZ2V0X2V4Y2x1c2l2ZSk7CisKKy8qKgogICogcmVndWxhdG9yX3B1dCAtICJmcmVlIiB0aGUgcmVndWxhdG9yIHNvdXJjZQogICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQogICoKQEAgLTEwODEsMjEgKzExODMsMjkgQEAKIAlsaXN0X2RlbCgmcmVndWxhdG9yLT5saXN0KTsKIAlrZnJlZShyZWd1bGF0b3IpOwogCisJcmRldi0+b3Blbl9jb3VudC0tOworCXJkZXYtPmV4Y2x1c2l2ZSA9IDA7CisKIAltb2R1bGVfcHV0KHJkZXYtPm93bmVyKTsKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9wdXQpOwogCitzdGF0aWMgaW50IF9yZWd1bGF0b3JfY2FuX2NoYW5nZV9zdGF0dXMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKKwkJcmV0dXJuIDA7CisKKwlpZiAocmRldi0+Y29uc3RyYWludHMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIC8qIGxvY2tzIGhlbGQgYnkgcmVndWxhdG9yX2VuYWJsZSgpICovCiBzdGF0aWMgaW50IF9yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCWludCByZXQgPSAtRUlOVkFMOwotCi0JaWYgKCFyZGV2LT5jb25zdHJhaW50cykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBoYXMgbm8gY29uc3RyYWludHNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWludCByZXQ7CiAKIAkvKiBkbyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgc3VwcGx5IHJlZ3VsYXRvciBmaXJzdCAqLwogCWlmIChyZGV2LT5zdXBwbHkpIHsKQEAgLTExMDgsMjQgKzEyMTgsMzUgQEAKIAl9CiAKIAkvKiBjaGVjayB2b2x0YWdlIGFuZCByZXF1ZXN0ZWQgbG9hZCBiZWZvcmUgZW5hYmxpbmcgKi8KLQlpZiAocmRldi0+ZGVzYy0+b3BzLT5lbmFibGUpIHsKKwlpZiAocmRldi0+Y29uc3RyYWludHMgJiYKKwkgICAgKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayAmIFJFR1VMQVRPUl9DSEFOR0VfRFJNUykpCisJCWRybXNfdUFfdXBkYXRlKHJkZXYpOwogCi0JCWlmIChyZGV2LT5jb25zdHJhaW50cyAmJgotCQkJKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayAmCi0JCQlSRUdVTEFUT1JfQ0hBTkdFX0RSTVMpKQotCQkJZHJtc191QV91cGRhdGUocmRldik7CisJaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAwKSB7CisJCS8qIFRoZSByZWd1bGF0b3IgbWF5IG9uIGlmIGl0J3Mgbm90IHN3aXRjaGFibGUgb3IgbGVmdCBvbiAqLworCQlyZXQgPSBfcmVndWxhdG9yX2lzX2VuYWJsZWQocmRldik7CisJCWlmIChyZXQgPT0gLUVJTlZBTCB8fCByZXQgPT0gMCkgeworCQkJaWYgKCFfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpKQorCQkJCXJldHVybiAtRVBFUk07CiAKLQkJcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5lbmFibGUocmRldik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZW5hYmxlICVzOiAlZFxuIiwKKwkJCWlmIChyZGV2LT5kZXNjLT5vcHMtPmVuYWJsZSkgeworCQkJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+ZW5hYmxlKHJkZXYpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlyZXR1cm4gcmV0OworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpc19lbmFibGVkKCkgZmFpbGVkIGZvciAlczogJWRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIHJkZXYtPmRlc2MtPm5hbWUsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCXJkZXYtPnVzZV9jb3VudCsrOwotCQlyZXR1cm4gcmV0OworCQkvKiBGYWxsdGhyb3VnaCBvbiBwb3NpdGl2ZSByZXR1cm4gdmFsdWVzIC0gYWxyZWFkeSBlbmFibGVkICovCiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZGV2LT51c2VfY291bnQrKzsKKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTExNjUsNyArMTI4Niw4IEBACiAJaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAxICYmICFyZGV2LT5jb25zdHJhaW50cy0+YWx3YXlzX29uKSB7CiAKIAkJLyogd2UgYXJlIGxhc3QgdXNlciAqLwotCQlpZiAocmRldi0+ZGVzYy0+b3BzLT5kaXNhYmxlKSB7CisJCWlmIChfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpICYmCisJCSAgICByZGV2LT5kZXNjLT5vcHMtPmRpc2FibGUpIHsKIAkJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+ZGlzYWJsZShyZGV2KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGRpc2FibGUgJXNcbiIsCkBAIC0xMjY1LDIwICsxMzg3LDExIEBACiAKIHN0YXRpYyBpbnQgX3JlZ3VsYXRvcl9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7Ci0KIAkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAoIXJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKCFyZGV2LT5kZXNjLT5vcHMtPmlzX2VuYWJsZWQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5pc19lbmFibGVkKHJkZXYpOwotb3V0OgotCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZChyZGV2KTsKIH0KIAogLyoqCkBAIC0xMjk1LDcgKzE0MDgsMTMgQEAKICAqLwogaW50IHJlZ3VsYXRvcl9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcikKIHsKLQlyZXR1cm4gX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJlZ3VsYXRvci0+cmRldik7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnJlZ3VsYXRvci0+cmRldi0+bXV0ZXgpOworCXJldCA9IF9yZWd1bGF0b3JfaXNfZW5hYmxlZChyZWd1bGF0b3ItPnJkZXYpOworCW11dGV4X3VubG9jaygmcmVndWxhdG9yLT5yZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2lzX2VuYWJsZWQpOwogCkBAIC0xMzUwLDYgKzE0NjksMzUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UpOwogCiAvKioKKyAqIHJlZ3VsYXRvcl9pc19zdXBwb3J0ZWRfdm9sdGFnZSAtIGNoZWNrIGlmIGEgdm9sdGFnZSByYW5nZSBjYW4gYmUgc3VwcG9ydGVkCisgKgorICogQHJlZ3VsYXRvcjogUmVndWxhdG9yIHRvIGNoZWNrLgorICogQG1pbl91VjogTWluaW11bSByZXF1aXJlZCB2b2x0YWdlIGluIHVWLgorICogQG1heF91VjogTWF4aW11bSByZXF1aXJlZCB2b2x0YWdlIGluIHVWLgorICoKKyAqIFJldHVybnMgYSBib29sZWFuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IHJlZ3VsYXRvcl9pc19zdXBwb3J0ZWRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpbnQgaSwgdm9sdGFnZXMsIHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhyZWd1bGF0b3IpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXZvbHRhZ2VzID0gcmV0OworCisJZm9yIChpID0gMDsgaSA8IHZvbHRhZ2VzOyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZShyZWd1bGF0b3IsIGkpOworCisJCWlmIChyZXQgPj0gbWluX3VWICYmIHJldCA8PSBtYXhfdVYpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UgLSBzZXQgcmVndWxhdG9yIG91dHB1dCB2b2x0YWdlCiAgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCiAgKiBAbWluX3VWOiBNaW5pbXVtIHJlcXVpcmVkIHZvbHRhZ2UgaW4gdVYKQEAgLTIwOTEsMTEgKzIyMzksMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaW5pdF9kYXRhLT5udW1fY29uc3VtZXJfc3VwcGxpZXM7IGkrKykgewogCQlyZXQgPSBzZXRfY29uc3VtZXJfZGV2aWNlX3N1cHBseShyZGV2LAogCQkJaW5pdF9kYXRhLT5jb25zdW1lcl9zdXBwbGllc1tpXS5kZXYsCisJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldl9uYW1lLAogCQkJaW5pdF9kYXRhLT5jb25zdW1lcl9zdXBwbGllc1tpXS5zdXBwbHkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQogCQkJCXVuc2V0X2NvbnN1bWVyX2RldmljZV9zdXBwbHkocmRldiwKLQkJCQkJaW5pdF9kYXRhLT5jb25zdW1lcl9zdXBwbGllc1tpXS5kZXYpOworCQkJCSAgICBpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldl9uYW1lLAorCQkJCSAgICBpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldik7CiAJCQlnb3RvIHNjcnViOwogCQl9CiAJfQpAQCAtMjEzMCw2ICsyMjgwLDcgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCVdBUk5fT04ocmRldi0+b3Blbl9jb3VudCk7CiAJdW5zZXRfcmVndWxhdG9yX3N1cHBsaWVzKHJkZXYpOwogCWxpc3RfZGVsKCZyZGV2LT5saXN0KTsKIAlpZiAocmRldi0+c3VwcGx5KQpAQCAtMjI3NywxNCArMjQyOCwxNCBAQAogCQlvcHMgPSByZGV2LT5kZXNjLT5vcHM7CiAJCWMgPSByZGV2LT5jb25zdHJhaW50czsKIAotCQlpZiAoYy0+bmFtZSkKKwkJaWYgKGMgJiYgYy0+bmFtZSkKIAkJCW5hbWUgPSBjLT5uYW1lOwogCQllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQogCQkJbmFtZSA9IHJkZXYtPmRlc2MtPm5hbWU7CiAJCWVsc2UKIAkJCW5hbWUgPSAicmVndWxhdG9yIjsKIAotCQlpZiAoIW9wcy0+ZGlzYWJsZSB8fCBjLT5hbHdheXNfb24pCisJCWlmICghb3BzLT5kaXNhYmxlIHx8IChjICYmIGMtPmFsd2F5c19vbikpCiAJCQljb250aW51ZTsKIAogCQltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCmluZGV4IGI4Yjg5ZWYuLmFhMjI0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCkBAIC02NCw2ICs2NCwxNCBAQAogI2RlZmluZSBEQTkwMzRfTURUVjIJCSgweDMzKQogI2RlZmluZSBEQTkwMzRfTVZSQwkJKDB4MzQpCiAKKy8qIERBOTAzNSBSZWdpc3RlcnMuIERBOTAzNCBSZWdpc3RlcnMgYXJlIGNvbXB0YWJpbGUgdG8gREE5MDM1LiAqLworI2RlZmluZSBEQTkwMzVfT1ZFUjMJCSgweDEyKQorI2RlZmluZSBEQTkwMzVfVkNDMgkJKDB4MWYpCisjZGVmaW5lIERBOTAzNV8zRFRWMQkJKDB4MmMpCisjZGVmaW5lIERBOTAzNV8zRFRWMgkJKDB4MmQpCisjZGVmaW5lIERBOTAzNV8zVlJDCQkoMHgyZSkKKyNkZWZpbmUgREE5MDM1X0FVVE9TS0lQCQkoMHgyZikKKwogc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAKQEAgLTc5LDYgKzg3LDEwIEBACiAJaW50CWVuYWJsZV9iaXQ7CiB9OwogCitzdGF0aWMgaW50IGRhOTAzNF9sZG8xMl9kYXRhW10gPSB7IDE3MDAsIDE3NTAsIDE4MDAsIDE4NTAsIDE5MDAsIDE5NTAsCisJCQkJICAgMjAwMCwgMjA1MCwgMjcwMCwgMjc1MCwgMjgwMCwgMjg1MCwKKwkJCQkgICAyOTAwLCAyOTUwLCAzMDAwLCAzMDUwIH07CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdG9fZGE5MDN4X2RldihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlyZXR1cm4gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQtPnBhcmVudDsKQEAgLTE2Miw2ICsxNzQsMTcgQEAKIAlyZXR1cm4gISEocmVnX3ZhbCAmICgxIDw8IGluZm8tPmVuYWJsZV9iaXQpKTsKIH0KIAorc3RhdGljIGludCBkYTkwM3hfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAqIHNlbGVjdG9yOworCWlmIChyZXQgPiBpbmZvLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiByZXQ7Cit9CisKIC8qIERBOTAzMCBzcGVjaWZpYyBvcGVyYXRpb25zICovCiBzdGF0aWMgaW50IGRhOTAzMF9zZXRfbGRvMV8xNV92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCSAgICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQpAQCAtMjc4LDcgKzMwMSw3IEBACiAJfQogCiAJdmFsID0gKG1pbl91ViAtIGluZm8tPm1pbl91ViArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7Ci0JdmFsID0gKHZhbCA+IDcgfHwgdmFsIDwgMjApID8gOCA6IHZhbCAtIDEyOworCXZhbCA9ICh2YWwgPj0gMjApID8gdmFsIC0gMTIgOiAoKHZhbCA+IDcpID8gOCA6IHZhbCk7CiAJdmFsIDw8PSBpbmZvLT52b2xfc2hpZnQ7CiAJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKIApAQCAtMzA1LDkgKzMyOCwxOCBAQAogCXJldHVybiBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWICogdmFsOwogfQogCitzdGF0aWMgaW50IGRhOTAzNF9saXN0X2xkbzEyX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlpZiAoc2VsZWN0b3IgPiBBUlJBWV9TSVpFKGRhOTAzNF9sZG8xMl9kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRhOTAzNF9sZG8xMl9kYXRhW3NlbGVjdG9yXSAqIDEwMDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBkYTkwM3hfcmVndWxhdG9yX2xkb19vcHMgPSB7CiAJLnNldF92b2x0YWdlCT0gZGE5MDN4X3NldF9sZG9fdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwM3hfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzeF9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTMxNyw2ICszNDksNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzMF9yZWd1bGF0b3JfbGRvMTRfb3BzID0gewogCS5zZXRfdm9sdGFnZQk9IGRhOTAzMF9zZXRfbGRvMTRfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwMzBfZ2V0X2xkbzE0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzeF9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTMyNiw2ICszNTksNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzMF9yZWd1bGF0b3JfbGRvMV8xNV9vcHMgPSB7CiAJLnNldF92b2x0YWdlCT0gZGE5MDMwX3NldF9sZG8xXzE1X3ZvbHRhZ2UsCiAJLmdldF92b2x0YWdlCT0gZGE5MDN4X2dldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UJPSBkYTkwM3hfbGlzdF92b2x0YWdlLAogCS5lbmFibGUJCT0gZGE5MDN4X2VuYWJsZSwKIAkuZGlzYWJsZQk9IGRhOTAzeF9kaXNhYmxlLAogCS5pc19lbmFibGVkCT0gZGE5MDN4X2lzX2VuYWJsZWQsCkBAIC0zMzQsNiArMzY4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBkYTkwMzRfcmVndWxhdG9yX2R2Y19vcHMgPSB7CiAJLnNldF92b2x0YWdlCT0gZGE5MDM0X3NldF9kdmNfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwM3hfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzeF9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTM0Myw2ICszNzgsNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzID0gewogCS5zZXRfdm9sdGFnZQk9IGRhOTAzNF9zZXRfbGRvMTJfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UJPSBkYTkwMzRfZ2V0X2xkbzEyX3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IGRhOTAzNF9saXN0X2xkbzEyX3ZvbHRhZ2UsCiAJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAogCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKQEAgLTM1NSw2ICszOTEsNyBAQAogCQkub3BzCT0gJmRhOTAzeF9yZWd1bGF0b3JfbGRvX29wcywJCQlcCiAJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKIAkJLmlkCT0gX3BtaWMjI19JRF9MRE8jI19pZCwJCQkJXAorCQkubl92b2x0YWdlcyA9IChzdGVwKSA/ICgobWF4IC0gbWluKSAvIHN0ZXAgKyAxKSA6IDEsCVwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCQkJCQlcCiAJfSwJCQkJCQkJCVwKIAkubWluX3VWCQk9IChtaW4pICogMTAwMCwJCQkJCVwKQEAgLTM2NywyNCArNDA0LDI1IEBACiAJLmVuYWJsZV9iaXQJPSAoZWJpdCksCQkJCQlcCiB9CiAKLSNkZWZpbmUgREE5MDM0X0RWQyhfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgZXJlZywgZWJpdCkgXAorI2RlZmluZSBEQTkwM3hfRFZDKF9wbWljLCBfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgZXJlZywgZWJpdCkgXAogewkJCQkJCQkJCVwKIAkuZGVzYwk9IHsJCQkJCQkJXAogCQkubmFtZQk9ICNfaWQsCQkJCQkJXAogCQkub3BzCT0gJmRhOTAzNF9yZWd1bGF0b3JfZHZjX29wcywJCQlcCiAJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKLQkJLmlkCT0gREE5MDM0X0lEXyMjX2lkLAkJCQlcCisJCS5pZAk9IF9wbWljIyNfSURfIyNfaWQsCQkJCVwKKwkJLm5fdm9sdGFnZXMgPSAoc3RlcCkgPyAoKG1heCAtIG1pbikgLyBzdGVwICsgMSkgOiAxLAlcCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAkJCQkJXAogCX0sCQkJCQkJCQlcCiAJLm1pbl91VgkJPSAobWluKSAqIDEwMDAsCQkJCQlcCiAJLm1heF91VgkJPSAobWF4KSAqIDEwMDAsCQkJCQlcCiAJLnN0ZXBfdVYJPSAoc3RlcCkgKiAxMDAwLAkJCQlcCi0JLnZvbF9yZWcJPSBEQTkwMzRfIyN2cmVnLAkJCQlcCisJLnZvbF9yZWcJPSBfcG1pYyMjXyMjdnJlZywJCQkJXAogCS52b2xfc2hpZnQJPSAoMCksCQkJCQkJXAogCS52b2xfbmJpdHMJPSAobmJpdHMpLAkJCQkJXAotCS51cGRhdGVfcmVnCT0gREE5MDM0XyMjdXJlZywJCQkJXAorCS51cGRhdGVfcmVnCT0gX3BtaWMjI18jI3VyZWcsCQkJCVwKIAkudXBkYXRlX2JpdAk9ICh1Yml0KSwJCQkJCVwKLQkuZW5hYmxlX3JlZwk9IERBOTAzNF8jI2VyZWcsCQkJCVwKKwkuZW5hYmxlX3JlZwk9IF9wbWljIyNfIyNlcmVnLAkJCQlcCiAJLmVuYWJsZV9iaXQJPSAoZWJpdCksCQkJCQlcCiB9CiAKQEAgLTM5NCw4ICs0MzIsMjIgQEAKICNkZWZpbmUgREE5MDMwX0xETyhfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBzaGlmdCwgbmJpdHMsIGVyZWcsIGViaXQpCVwKIAlEQTkwM3hfTERPKERBOTAzMCwgX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgc2hpZnQsIG5iaXRzLCBlcmVnLCBlYml0KQogCisjZGVmaW5lIERBOTAzMF9EVkMoX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgbmJpdHMsIHVyZWcsIHViaXQsIGVyZWcsIGViaXQpIFwKKwlEQTkwM3hfRFZDKERBOTAzMCwgX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgbmJpdHMsIHVyZWcsIHViaXQsIFwKKwkJICAgZXJlZywgZWJpdCkKKworI2RlZmluZSBEQTkwMzRfRFZDKF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIG5iaXRzLCB1cmVnLCB1Yml0LCBlcmVnLCBlYml0KSBcCisJREE5MDN4X0RWQyhEQTkwMzQsIF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIG5iaXRzLCB1cmVnLCB1Yml0LCBcCisJCSAgIGVyZWcsIGViaXQpCisKKyNkZWZpbmUgREE5MDM1X0RWQyhfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgZXJlZywgZWJpdCkgXAorCURBOTAzeF9EVkMoREE5MDM1LCBfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBuYml0cywgdXJlZywgdWJpdCwgXAorCQkgICBlcmVnLCBlYml0KQorCiBzdGF0aWMgc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyBkYTkwM3hfcmVndWxhdG9yX2luZm9bXSA9IHsKIAkvKiBEQTkwMzAgKi8KKwlEQTkwMzBfRFZDKEJVQ0syLCA4NTAsIDE2MjUsIDI1LCBCVUNLMkRWTTEsIDUsIEJVQ0syRFZNMSwgNywgUkNUTDExLCAwKSwKKwogCURBOTAzMF9MRE8oIDEsIDEyMDAsIDMyMDAsIDEwMCwgICAgTERPMSwgMCwgNSwgUkNUTDEyLCAxKSwKIAlEQTkwMzBfTERPKCAyLCAxODAwLCAzMjAwLCAxMDAsICAgTERPMjMsIDAsIDQsIFJDVEwxMiwgMiksCiAJREE5MDMwX0xETyggMywgMTgwMCwgMzIwMCwgMTAwLCAgIExETzIzLCA0LCA0LCBSQ1RMMTIsIDMpLApAQCAtNDE3LDkgKzQ2OSw5IEBACiAJREE5MDMwX0xETygxMywgMjEwMCwgMjEwMCwgMCwgSU5WQUwsIDAsIDAsIFJDVEwxMSwgMyksIC8qIGZpeGVkIEAyLjFWICovCiAKIAkvKiBEQTkwMzQgKi8KLQlEQTkwMzRfRFZDKEJVQ0sxLCA3MjUsIDE1MDAsIDI1LCBBRFRWMSwgNSwgVkNDMSwgMCwgT1ZFUjEsIDApLAotCURBOTAzNF9EVkMoQlVDSzIsIDcyNSwgMTUwMCwgMjUsIENEVFYxLCA1LCBWQ0MxLCAyLCBPVkVSMSwgMSksCi0JREE5MDM0X0RWQyhMRE8yLCAgNzI1LCAxNTAwLCAyNSwgU0RUVjEsIDUsIFZDQzEsIDQsIE9WRVIxLCAyKSwKKwlEQTkwMzRfRFZDKEJVQ0sxLCA3MjUsIDE1MDAsIDI1LCBBRFRWMiwgNSwgVkNDMSwgMCwgT1ZFUjEsIDApLAorCURBOTAzNF9EVkMoQlVDSzIsIDcyNSwgMTUwMCwgMjUsIENEVFYyLCA1LCBWQ0MxLCAyLCBPVkVSMSwgMSksCisJREE5MDM0X0RWQyhMRE8yLCAgNzI1LCAxNTAwLCAyNSwgU0RUVjIsIDUsIFZDQzEsIDQsIE9WRVIxLCAyKSwKIAlEQTkwMzRfRFZDKExETzEsIDE3MDAsIDIwNzUsIDI1LCBNRFRWMSwgNCwgVkNDMSwgNiwgT1ZFUjMsIDQpLAogCiAJREE5MDM0X0xETyggMywgMTgwMCwgMzMwMCwgMTAwLCAgTERPNjQzLCAwLCA0LCBPVkVSMywgNSksCkBAIC00MzUsNiArNDg3LDkgQEAKIAlEQTkwMzRfTERPKDE0LCAxODAwLCAzMzAwLCAxMDAsIExETzE1MTQsIDAsIDQsIE9WRVIzLCAwKSwKIAlEQTkwMzRfTERPKDE1LCAxODAwLCAzMzAwLCAxMDAsIExETzE1MTQsIDQsIDQsIE9WRVIzLCAxKSwKIAlEQTkwMzRfTERPKDUsIDMxMDAsIDMxMDAsIDAsIElOVkFMLCAwLCAwLCBPVkVSMywgNyksIC8qIGZpeGVkIEAzLjFWICovCisKKwkvKiBEQTkwMzUgKi8KKwlEQTkwMzVfRFZDKEJVQ0szLCAxODAwLCAyMjAwLCAxMDAsIDNEVFYxLCAzLCBWQ0MyLCAwLCBPVkVSMywgMyksCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmZpbmRfcmVndWxhdG9yX2luZm8oaW50IGlkKQpAQCAtNDYyLDggKzUxNywxMCBAQAogCX0KIAogCS8qIFdvcmthcm91bmQgZm9yIHRoZSB3ZWlyZCBMRE8xMiB2b2x0YWdlIHNldHRpbmcgKi8KLQlpZiAocmktPmRlc2MuaWQgPT0gREE5MDM0X0lEX0xETzEyKQorCWlmIChyaS0+ZGVzYy5pZCA9PSBEQTkwMzRfSURfTERPMTIpIHsKIAkJcmktPmRlc2Mub3BzID0gJmRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzOworCQlyaS0+ZGVzYy5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShkYTkwMzRfbGRvMTJfZGF0YSk7CisJfQogCiAJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xNCkKIAkJcmktPmRlc2Mub3BzID0gJmRhOTAzMF9yZWd1bGF0b3JfbGRvMTRfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKaW5kZXggY2RjNjc0Zi4uZjhiMjk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCkBAIC01LDYgKzUsOSBAQAogICoKICAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiAgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBSb2dlciBRdWFkcm9zIDxleHQtcm9nZXIucXVhZHJvc0Bub2tpYS5jb20+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQpAQCAtMjAsMjAgKzIzLDQ1IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldjsKIAlpbnQgbWljcm92b2x0czsKKwlpbnQgZ3BpbzsKKwl1bnNpZ25lZCBlbmFibGVfaGlnaDoxOworCXVuc2lnbmVkIGlzX2VuYWJsZWQ6MTsKIH07CiAKIHN0YXRpYyBpbnQgZml4ZWRfdm9sdGFnZV9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCiB7Ci0JcmV0dXJuIDE7CisJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBkYXRhLT5pc19lbmFibGVkOwogfQogCiBzdGF0aWMgaW50IGZpeGVkX3ZvbHRhZ2VfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCiB7CisJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmdwaW8pKSB7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRhdGEtPmdwaW8sIGRhdGEtPmVuYWJsZV9oaWdoKTsKKwkJZGF0YS0+aXNfZW5hYmxlZCA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZml4ZWRfdm9sdGFnZV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmdwaW8pKSB7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRhdGEtPmdwaW8sICFkYXRhLT5lbmFibGVfaGlnaCk7CisJCWRhdGEtPmlzX2VuYWJsZWQgPSAwOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC01OCw2ICs4Niw3IEBACiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZml4ZWRfdm9sdGFnZV9vcHMgPSB7CiAJLmlzX2VuYWJsZWQgPSBmaXhlZF92b2x0YWdlX2lzX2VuYWJsZWQsCiAJLmVuYWJsZSA9IGZpeGVkX3ZvbHRhZ2VfZW5hYmxlLAorCS5kaXNhYmxlID0gZml4ZWRfdm9sdGFnZV9kaXNhYmxlLAogCS5nZXRfdm9sdGFnZSA9IGZpeGVkX3ZvbHRhZ2VfZ2V0X3ZvbHRhZ2UsCiAJLmxpc3Rfdm9sdGFnZSA9IGZpeGVkX3ZvbHRhZ2VfbGlzdF92b2x0YWdlLAogfTsKQEAgLTcwLDEyICs5OSwxNCBAQAogCiAJZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZHJ2ZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2UgZGF0YVxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KIAogCWRydmRhdGEtPmRlc2MubmFtZSA9IGtzdHJkdXAoY29uZmlnLT5zdXBwbHlfbmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRydmRhdGEtPmRlc2MubmFtZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBzdXBwbHkgbmFtZVxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KQEAgLTg1LDEyICsxMTYsNjIgQEAKIAlkcnZkYXRhLT5kZXNjLm5fdm9sdGFnZXMgPSAxOwogCiAJZHJ2ZGF0YS0+bWljcm92b2x0cyA9IGNvbmZpZy0+bWljcm92b2x0czsKKwlkcnZkYXRhLT5ncGlvID0gY29uZmlnLT5ncGlvOworCisJaWYgKGdwaW9faXNfdmFsaWQoY29uZmlnLT5ncGlvKSkgeworCQlkcnZkYXRhLT5lbmFibGVfaGlnaCA9IGNvbmZpZy0+ZW5hYmxlX2hpZ2g7CisKKwkJLyogRklYTUU6IFJlbW92ZSBiZWxvdyBwcmludCB3YXJuaW5nCisJCSAqCisJCSAqIGNvbmZpZy0+Z3BpbyBtdXN0IGJlIHNldCB0byAtRUlOVkFMIGJ5IHBsYXRmb3JtIGNvZGUgaWYKKwkJICogR1BJTyBjb250cm9sIGlzIG5vdCByZXF1aXJlZC4gSG93ZXZlciwgZWFybHkgYWRvcHRlcnMKKwkJICogbm90IHJlcXVpcmluZyBHUElPIGNvbnRyb2wgbWF5IGZvcmdldCB0byBpbml0aWFsaXplCisJCSAqIGNvbmZpZy0+Z3BpbyB0byAtRUlOVkFMLiBUaGlzIHdpbGwgY2F1c2UgR1BJTyAwIHRvIGJlIHVzZWQKKwkJICogZm9yIEdQSU8gY29udHJvbC4KKwkJICoKKwkJICogVGhpcyB3YXJuaW5nIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB1c2VycworCQkgKiBmb3IgdGhpcyBkcml2ZXIuCisJCSAqLworCQlpZiAoIWNvbmZpZy0+Z3BpbykKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJInVzaW5nIEdQSU8gMCBmb3IgcmVndWxhdG9yIGVuYWJsZSBjb250cm9sXG4iKTsKKworCQlyZXQgPSBncGlvX3JlcXVlc3QoY29uZmlnLT5ncGlvLCBjb25maWctPnN1cHBseV9uYW1lKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJICAgIkNvdWxkIG5vdCBvYnRhaW4gcmVndWxhdG9yIGVuYWJsZSBHUElPICVkOiAlZFxuIiwKKwkJCQkJCQljb25maWctPmdwaW8sIHJldCk7CisJCQlnb3RvIGVycl9uYW1lOworCQl9CisKKwkJLyogc2V0IG91dHB1dCBkaXJlY3Rpb24gd2l0aG91dCBjaGFuZ2luZyBzdGF0ZQorCQkgKiB0byBwcmV2ZW50IGdsaXRjaAorCQkgKi8KKwkJZHJ2ZGF0YS0+aXNfZW5hYmxlZCA9IGNvbmZpZy0+ZW5hYmxlZF9hdF9ib290OworCQlyZXQgPSBkcnZkYXRhLT5pc19lbmFibGVkID8KKwkJCQljb25maWctPmVuYWJsZV9oaWdoIDogIWNvbmZpZy0+ZW5hYmxlX2hpZ2g7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGNvbmZpZy0+Z3BpbywgcmV0KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJICAgIkNvdWxkIG5vdCBjb25maWd1cmUgcmVndWxhdG9yIGVuYWJsZSBHUElPICVkIGRpcmVjdGlvbjogJWRcbiIsCisJCQkJCQkJY29uZmlnLT5ncGlvLCByZXQpOworCQkJZ290byBlcnJfZ3BpbzsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogUmVndWxhdG9yIHdpdGhvdXQgR1BJTyBjb250cm9sIGlzIGNvbnNpZGVyZWQKKwkJICogYWx3YXlzIGVuYWJsZWQKKwkJICovCisJCWRydmRhdGEtPmlzX2VuYWJsZWQgPSAxOworCX0KIAogCWRydmRhdGEtPmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmZHJ2ZGF0YS0+ZGVzYywgJnBkZXYtPmRldiwKIAkJCQkJICBjb25maWctPmluaXRfZGF0YSwgZHJ2ZGF0YSk7CiAJaWYgKElTX0VSUihkcnZkYXRhLT5kZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoZHJ2ZGF0YS0+ZGV2KTsKLQkJZ290byBlcnJfbmFtZTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dwaW87CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2ZGF0YSk7CkBAIC0xMDAsNiArMTgxLDkgQEAKIAogCXJldHVybiAwOwogCitlcnJfZ3BpbzoKKwlpZiAoZ3Bpb19pc192YWxpZChjb25maWctPmdwaW8pKQorCQlncGlvX2ZyZWUoY29uZmlnLT5ncGlvKTsKIGVycl9uYW1lOgogCWtmcmVlKGRydmRhdGEtPmRlc2MubmFtZSk7CiBlcnI6CkBAIC0xMTUsNiArMTk5LDkgQEAKIAlrZnJlZShkcnZkYXRhLT5kZXNjLm5hbWUpOwogCWtmcmVlKGRydmRhdGEpOwogCisJaWYgKGdwaW9faXNfdmFsaWQoZHJ2ZGF0YS0+Z3BpbykpCisJCWdwaW9fZnJlZShkcnZkYXRhLT5ncGlvKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCmluZGV4IGE2MTAxOGEuLjc4MDNhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbHAzOTcxX21vZHVsZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IC1FTk9ERVY7CisJaW50IHJldDsKIAogCXJldCA9IGkyY19hZGRfZHJpdmVyKCZscDM5NzFfaTJjX2RyaXZlcik7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwppbmRleCA4ZTE0OTAwLi4wODAzZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwpAQCAtMjQsMTEgKzI0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbWZkL3BjZjUwNjMzL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvcGNmNTA2MzMvcG1pYy5oPgogCi0jZGVmaW5lIFBDRjUwNjMzX1JFR1VMQVRPUihfbmFtZSwgX2lkKSAJCVwKKyNkZWZpbmUgUENGNTA2MzNfUkVHVUxBVE9SKF9uYW1lLCBfaWQsIF9uKSAJCVwKIAl7CQkJCQlcCiAJCS5uYW1lID0gX25hbWUsIAkJCVwKIAkJLmlkID0gX2lkLAkJCVwKIAkJLm9wcyA9ICZwY2Y1MDYzM19yZWd1bGF0b3Jfb3BzLAlcCisJCS5uX3ZvbHRhZ2VzID0gX24sIFwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwgCVwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsIAkJXAogCX0KQEAgLTE0OSwzMyArMTUwLDIwIEBACiAJcmV0dXJuIHBjZjUwNjMzX3JlZ193cml0ZShwY2YsIHJlZ25yLCB2b2x0X2JpdHMpOwogfQogCi1zdGF0aWMgaW50IHBjZjUwNjMzX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgcGNmNTA2MzNfcmVndWxhdG9yX3ZvbHRhZ2VfdmFsdWUoZW51bSBwY2Y1MDYzM19yZWd1bGF0b3JfaWQgaWQsCisJCQkJCQl1OCBiaXRzKQogewotCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOwotCWludCByZWd1bGF0b3JfaWQsIG1pbGxpdm9sdHMsIHZvbHRfYml0czsKLQl1OCByZWducjsKKwlpbnQgbWlsbGl2b2x0czsKIAotCXBjZiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7OwotCi0JcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7Ci0JaWYgKHJlZ3VsYXRvcl9pZCA+PSBQQ0Y1MDYzM19OVU1fUkVHVUxBVE9SUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWduciA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9yZWdpc3RlcnNbcmVndWxhdG9yX2lkXTsKLQotCXZvbHRfYml0cyA9IHBjZjUwNjMzX3JlZ19yZWFkKHBjZiwgcmVnbnIpOwotCWlmICh2b2x0X2JpdHMgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlzd2l0Y2ggKHJlZ3VsYXRvcl9pZCkgeworCXN3aXRjaCAoaWQpIHsKIAljYXNlIFBDRjUwNjMzX1JFR1VMQVRPUl9BVVRPOgotCQltaWxsaXZvbHRzID0gYXV0b192b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBhdXRvX3ZvbHRhZ2VfdmFsdWUoYml0cyk7CiAJCWJyZWFrOwogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04xOgotCQltaWxsaXZvbHRzID0gZG93bl92b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBkb3duX3ZvbHRhZ2VfdmFsdWUoYml0cyk7CiAJCWJyZWFrOwogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04yOgotCQltaWxsaXZvbHRzID0gZG93bl92b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBkb3duX3ZvbHRhZ2VfdmFsdWUoYml0cyk7CiAJCWJyZWFrOwogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0xETzE6CiAJY2FzZSBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMjoKQEAgLTE4NCw3ICsxNzIsNyBAQAogCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0xETzU6CiAJY2FzZSBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNjoKIAljYXNlIFBDRjUwNjMzX1JFR1VMQVRPUl9IQ0xETzoKLQkJbWlsbGl2b2x0cyA9IGxkb192b2x0YWdlX3ZhbHVlKHZvbHRfYml0cyk7CisJCW1pbGxpdm9sdHMgPSBsZG9fdm9sdGFnZV92YWx1ZShiaXRzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTMsNiArMTgxLDQ5IEBACiAJcmV0dXJuIG1pbGxpdm9sdHMgKiAxMDAwOwogfQogCitzdGF0aWMgaW50IHBjZjUwNjMzX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgcGNmNTA2MzMgKnBjZjsKKwlpbnQgcmVndWxhdG9yX2lkOworCXU4IHZvbHRfYml0cywgcmVnbnI7CisKKwlwY2YgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7CisJaWYgKHJlZ3VsYXRvcl9pZCA+PSBQQ0Y1MDYzM19OVU1fUkVHVUxBVE9SUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWduciA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9yZWdpc3RlcnNbcmVndWxhdG9yX2lkXTsKKworCXZvbHRfYml0cyA9IHBjZjUwNjMzX3JlZ19yZWFkKHBjZiwgcmVnbnIpOworCisJcmV0dXJuIHBjZjUwNjMzX3JlZ3VsYXRvcl92b2x0YWdlX3ZhbHVlKHJlZ3VsYXRvcl9pZCwgdm9sdF9iaXRzKTsKK30KKworc3RhdGljIGludCBwY2Y1MDYzM19yZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOworCWludCByZWd1bGF0b3JfaWQ7CisKKwlwY2YgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmVndWxhdG9yX2lkID0gcmRldl9nZXRfaWQocmRldik7CisKKwlzd2l0Y2ggKHJlZ3VsYXRvcl9pZCkgeworCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0FVVE86CisJCWluZGV4ICs9IDB4MmY7CisJCWJyZWFrOworCWNhc2UgUENGNTA2MzNfUkVHVUxBVE9SX0hDTERPOgorCQlpbmRleCArPSAweDAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcGNmNTA2MzNfcmVndWxhdG9yX3ZvbHRhZ2VfdmFsdWUocmVndWxhdG9yX2lkLCBpbmRleCk7Cit9CisKIHN0YXRpYyBpbnQgcGNmNTA2MzNfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcGNmNTA2MzMgKnBjZiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CkBAIC0yNDYsNiArMjc3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBwY2Y1MDYzM19yZWd1bGF0b3Jfb3BzID0gewogCS5zZXRfdm9sdGFnZSA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UgPSBwY2Y1MDYzM19yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZSA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZSA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9lbmFibGUsCiAJLmRpc2FibGUgPSBwY2Y1MDYzM19yZWd1bGF0b3JfZGlzYWJsZSwKIAkuaXNfZW5hYmxlZCA9IHBjZjUwNjMzX3JlZ3VsYXRvcl9pc19lbmFibGVkLApAQCAtMjUzLDI3ICsyODUsMjcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9BVVRPXSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigiYXV0byIsIFBDRjUwNjMzX1JFR1VMQVRPUl9BVVRPKSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJhdXRvIiwgUENGNTA2MzNfUkVHVUxBVE9SX0FVVE8sIDgwKSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX0RPV04xXSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigiZG93bjEiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfRE9XTjEpLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImRvd24xIiwgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04xLCA5NSksCiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9ET1dOMl0gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImRvd24yIiwgUENGNTA2MzNfUkVHVUxBVE9SX0RPV04yKSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJkb3duMiIsIFBDRjUwNjMzX1JFR1VMQVRPUl9ET1dOMiwgOTUpLAogCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMV0gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzEiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMSksCisJCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvMSIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE8xLCAyNyksCiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE8yXSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvMiIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE8yKSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG8yIiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzIsIDI3KSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX0xETzNdID0KLQkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG8zIiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzMpLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzMiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMywgMjcpLAogCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNF0gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzQiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNCksCisJCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvNCIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE80LCAyNyksCiAJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE81XSA9Ci0JCVBDRjUwNjMzX1JFR1VMQVRPUigibGRvNSIsIFBDRjUwNjMzX1JFR1VMQVRPUl9MRE81KSwKKwkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG81IiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzUsIDI3KSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX0xETzZdID0KLQkJUENGNTA2MzNfUkVHVUxBVE9SKCJsZG82IiwgUENGNTA2MzNfUkVHVUxBVE9SX0xETzYpLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoImxkbzYiLCBQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNiwgMjcpLAogCVtQQ0Y1MDYzM19SRUdVTEFUT1JfSENMRE9dID0KLQkJUENGNTA2MzNfUkVHVUxBVE9SKCJoY2xkbyIsIFBDRjUwNjMzX1JFR1VMQVRPUl9IQ0xETyksCisJCVBDRjUwNjMzX1JFR1VMQVRPUigiaGNsZG8iLCBQQ0Y1MDYzM19SRUdVTEFUT1JfSENMRE8sIDI2KSwKIAlbUENGNTA2MzNfUkVHVUxBVE9SX01FTUxET10gPQotCQlQQ0Y1MDYzM19SRUdVTEFUT1IoIm1lbWxkbyIsIFBDRjUwNjMzX1JFR1VMQVRPUl9NRU1MRE8pLAorCQlQQ0Y1MDYzM19SRUdVTEFUT1IoIm1lbWxkbyIsIFBDRjUwNjMzX1JFR1VMQVRPUl9NRU1MRE8sIDApLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGNmNTA2MzNfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTAyMy1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZmRhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTAyMy1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIHRwczY1MDIzLXJlZ3VsYXRvci5jCisgKgorICogU3VwcG9ydHMgVFBTNjUwMjMgUmVndWxhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnQgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkga2luZCwKKyAqIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZQlUUFM2NTAyM19SRUdfVkVSU0lPTgkJMAorI2RlZmluZQlUUFM2NTAyM19SRUdfUEdPT0RaCQkxCisjZGVmaW5lCVRQUzY1MDIzX1JFR19NQVNLCQkyCisjZGVmaW5lCVRQUzY1MDIzX1JFR19SRUdfQ1RSTAkJMworI2RlZmluZQlUUFM2NTAyM19SRUdfQ09OX0NUUkwJCTQKKyNkZWZpbmUJVFBTNjUwMjNfUkVHX0NPTl9DVFJMMgkJNQorI2RlZmluZQlUUFM2NTAyM19SRUdfREVGX0NPUkUJCTYKKyNkZWZpbmUJVFBTNjUwMjNfUkVHX0RFRlNMRVcJCTcKKyNkZWZpbmUJVFBTNjUwMjNfUkVHX0xET19DVFJMCQk4CisKKy8qIFBHT09EWiBiaXRmaWVsZHMgKi8KKyNkZWZpbmUJVFBTNjUwMjNfUEdPT0RaX1BXUkZBSUxaCUJJVCg3KQorI2RlZmluZQlUUFM2NTAyM19QR09PRFpfTE9XQkFUVFoJQklUKDYpCisjZGVmaW5lCVRQUzY1MDIzX1BHT09EWl9WRENEQzEJCUJJVCg1KQorI2RlZmluZQlUUFM2NTAyM19QR09PRFpfVkRDREMyCQlCSVQoNCkKKyNkZWZpbmUJVFBTNjUwMjNfUEdPT0RaX1ZEQ0RDMwkJQklUKDMpCisjZGVmaW5lCVRQUzY1MDIzX1BHT09EWl9MRE8yCQlCSVQoMikKKyNkZWZpbmUJVFBTNjUwMjNfUEdPT0RaX0xETzEJCUJJVCgxKQorCisvKiBNQVNLIGJpdGZpZWxkcyAqLworI2RlZmluZQlUUFM2NTAyM19NQVNLX1BXUkZBSUxaCQlCSVQoNykKKyNkZWZpbmUJVFBTNjUwMjNfTUFTS19MT1dCQVRUWgkJQklUKDYpCisjZGVmaW5lCVRQUzY1MDIzX01BU0tfVkRDREMxCQlCSVQoNSkKKyNkZWZpbmUJVFBTNjUwMjNfTUFTS19WRENEQzIJCUJJVCg0KQorI2RlZmluZQlUUFM2NTAyM19NQVNLX1ZEQ0RDMwkJQklUKDMpCisjZGVmaW5lCVRQUzY1MDIzX01BU0tfTERPMgkJQklUKDIpCisjZGVmaW5lCVRQUzY1MDIzX01BU0tfTERPMQkJQklUKDEpCisKKy8qIFJFR19DVFJMIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTAyM19SRUdfQ1RSTF9WRENEQzFfRU4JQklUKDUpCisjZGVmaW5lIFRQUzY1MDIzX1JFR19DVFJMX1ZEQ0RDMl9FTglCSVQoNCkKKyNkZWZpbmUgVFBTNjUwMjNfUkVHX0NUUkxfVkRDREMzX0VOCUJJVCgzKQorI2RlZmluZSBUUFM2NTAyM19SRUdfQ1RSTF9MRE8yX0VOCUJJVCgyKQorI2RlZmluZSBUUFM2NTAyM19SRUdfQ1RSTF9MRE8xX0VOCUJJVCgxKQorCisvKiBMRE9fQ1RSTCBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTERPX0NUUkxfTERPeF9TSElGVChsZG9faWQpCSgobGRvX2lkKSo0KQorI2RlZmluZSBUUFM2NTAyM19MRE9fQ1RSTF9MRE94X01BU0sobGRvX2lkKQkoMHhGMCA+PiAoKGxkb19pZCkqNCkpCisKKy8qIE51bWJlciBvZiBzdGVwLWRvd24gY29udmVydGVycyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTlVNX0RDREMJCTMKKy8qIE51bWJlciBvZiBMRE8gdm9sdGFnZSByZWd1bGF0b3JzICBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTlVNX0xETwkJMgorLyogTnVtYmVyIG9mIHRvdGFsIHJlZ3VsYXRvcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRQUzY1MDIzX05VTV9SRUdVTEFUT1IJKFRQUzY1MDIzX05VTV9EQ0RDICsgVFBTNjUwMjNfTlVNX0xETykKKworLyogRENEQ3MgKi8KKyNkZWZpbmUgVFBTNjUwMjNfRENEQ18xCQkJMAorI2RlZmluZSBUUFM2NTAyM19EQ0RDXzIJCQkxCisjZGVmaW5lIFRQUzY1MDIzX0RDRENfMwkJCTIKKy8qIExET3MgKi8KKyNkZWZpbmUgVFBTNjUwMjNfTERPXzEJCQkzCisjZGVmaW5lIFRQUzY1MDIzX0xET18yCQkJNAorCisjZGVmaW5lIFRQUzY1MDIzX01BWF9SRUdfSUQJCVRQUzY1MDIzX0xET18yCisKKy8qIFN1cHBvcnRlZCB2b2x0YWdlIHZhbHVlcyBmb3IgcmVndWxhdG9ycyAqLworc3RhdGljIGNvbnN0IHUxNiBWRENEQzFfVlNFTF90YWJsZVtdID0geworCTgwMCwgODI1LCA4NTAsIDg3NSwKKwk5MDAsIDkyNSwgOTUwLCA5NzUsCisJMTAwMCwgMTAyNSwgMTA1MCwgMTA3NSwKKwkxMTAwLCAxMTI1LCAxMTUwLCAxMTc1LAorCTEyMDAsIDEyMjUsIDEyNTAsIDEyNzUsCisJMTMwMCwgMTMyNSwgMTM1MCwgMTM3NSwKKwkxNDAwLCAxNDI1LCAxNDUwLCAxNDc1LAorCTE1MDAsIDE1MjUsIDE1NTAsIDE2MDAsCit9OworCitzdGF0aWMgY29uc3QgdTE2IExETzFfVlNFTF90YWJsZVtdID0geworCTEwMDAsIDExMDAsIDEzMDAsIDE4MDAsCisJMjIwMCwgMjYwMCwgMjgwMCwgMzE1MCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgTERPMl9WU0VMX3RhYmxlW10gPSB7CisJMTA1MCwgMTIwMCwgMTMwMCwgMTgwMCwKKwkyNTAwLCAyODAwLCAzMDAwLCAzMzAwLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBudW1fdm9sdGFnZXNbXSA9IHtBUlJBWV9TSVpFKFZEQ0RDMV9WU0VMX3RhYmxlKSwKKwkJCQkwLCAwLCBBUlJBWV9TSVpFKExETzFfVlNFTF90YWJsZSksCisJCQkJQVJSQVlfU0laRShMRE8yX1ZTRUxfdGFibGUpfTsKKworLyogUmVndWxhdG9yIHNwZWNpZmljIGRldGFpbHMgKi8KK3N0cnVjdCB0cHNfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBtaW5fdVY7CisJdW5zaWduZWQgbWF4X3VWOworCWJvb2wgZml4ZWQ7CisJdTggdGFibGVfbGVuOworCWNvbnN0IHUxNiAqdGFibGU7Cit9OworCisvKiBQTUlDIGRldGFpbHMgKi8KK3N0cnVjdCB0cHNfcG1pYyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2NbVFBTNjUwMjNfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldltUUFM2NTAyM19OVU1fUkVHVUxBVE9SXTsKKwljb25zdCBzdHJ1Y3QgdHBzX2luZm8gKmluZm9bVFBTNjUwMjNfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IG11dGV4IGlvX2xvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIGludCB0cHNfNjUwMjNfcmVhZChzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnKQoreworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRwc182NTAyM193cml0ZShzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnLCB1OCB2YWwpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCB0cHNfNjUwMjNfc2V0X2JpdHMoc3RydWN0IHRwc19wbWljICp0cHMsIHU4IHJlZywgdTggbWFzaykKK3sKKwlpbnQgZXJyLCBkYXRhOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVhZCh0cHMsIHJlZyk7CisJaWYgKGRhdGEgPCAwKSB7CisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJSZWFkIGZyb20gcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCQllcnIgPSBkYXRhOworCQlnb3RvIG91dDsKKwl9CisKKwlkYXRhIHw9IG1hc2s7CisJZXJyID0gdHBzXzY1MDIzX3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiV3JpdGUgZm9yIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRwc182NTAyM19jbGVhcl9iaXRzKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcsIHU4IG1hc2spCit7CisJaW50IGVyciwgZGF0YTsKKworCW11dGV4X2xvY2soJnRwcy0+aW9fbG9jayk7CisKKwlkYXRhID0gdHBzXzY1MDIzX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkgeworCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKwkJZXJyID0gZGF0YTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSAmPSB+bWFzazsKKworCWVyciA9IHRwc182NTAyM193cml0ZSh0cHMsIHJlZywgZGF0YSk7CisJaWYgKGVycikKKwkJZGV2X2VycigmdHBzLT5jbGllbnQtPmRldiwgIldyaXRlIGZvciByZWcgMHgleCBmYWlsZWRcbiIsIHJlZyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnRwcy0+aW9fbG9jayk7CisJcmV0dXJuIGVycjsKKworfQorCitzdGF0aWMgaW50IHRwc182NTAyM19yZWdfcmVhZChzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnKQoreworCWludCBkYXRhOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVhZCh0cHMsIHJlZyk7CisJaWYgKGRhdGEgPCAwKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGludCB0cHNfNjUwMjNfcmVnX3dyaXRlKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWVyciA9IHRwc182NTAyM193cml0ZSh0cHMsIHJlZywgdmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2VycigmdHBzLT5jbGllbnQtPmRldiwgIldyaXRlIGZvciByZWcgMHgleCBmYWlsZWRcbiIsIHJlZyk7CisKKwltdXRleF91bmxvY2soJnRwcy0+aW9fbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19kY2RjX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisJdTggc2hpZnQ7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDIzX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwMjNfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwMjNfTlVNX1JFR1VMQVRPUiAtIGRjZGM7CisJZGF0YSA9IHRwc182NTAyM19yZWdfcmVhZCh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCk7CisKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCWVsc2UKKwkJcmV0dXJuIChkYXRhICYgMTw8c2hpZnQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfbGRvX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChsZG8gPCBUUFM2NTAyM19MRE9fMSB8fCBsZG8gPiBUUFM2NTAyM19MRE9fMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IChsZG8gPT0gVFBTNjUwMjNfTERPXzEgPyAxIDogMik7CisJZGF0YSA9IHRwc182NTAyM19yZWdfcmVhZCh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCk7CisKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCWVsc2UKKwkJcmV0dXJuIChkYXRhICYgMTw8c2hpZnQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfZGNkY19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisJdTggc2hpZnQ7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDIzX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwMjNfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwMjNfTlVNX1JFR1VMQVRPUiAtIGRjZGM7CisJcmV0dXJuIHRwc182NTAyM19zZXRfYml0cyh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfZGNkY19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGRjZGMgPCBUUFM2NTAyM19EQ0RDXzEgfHwgZGNkYyA+IFRQUzY1MDIzX0RDRENfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDIzX05VTV9SRUdVTEFUT1IgLSBkY2RjOworCXJldHVybiB0cHNfNjUwMjNfY2xlYXJfYml0cyh0cHMsIFRQUzY1MDIzX1JFR19SRUdfQ1RSTCwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gKGxkbyA9PSBUUFM2NTAyM19MRE9fMSA/IDEgOiAyKTsKKwlyZXR1cm4gdHBzXzY1MDIzX3NldF9iaXRzKHRwcywgVFBTNjUwMjNfUkVHX1JFR19DVFJMLCAxIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19sZG9fZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gKGxkbyA9PSBUUFM2NTAyM19MRE9fMSA/IDEgOiAyKTsKKwlyZXR1cm4gdHBzXzY1MDIzX2NsZWFyX2JpdHModHBzLCBUUFM2NTAyM19SRUdfUkVHX0NUUkwsIDEgPDwgc2hpZnQpOworfQorCitzdGF0aWMgaW50IHRwczY1MDIzX2RjZGNfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDIzX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwMjNfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkY2RjID09IFRQUzY1MDIzX0RDRENfMSkgeworCQlkYXRhID0gdHBzXzY1MDIzX3JlZ19yZWFkKHRwcywgVFBTNjUwMjNfUkVHX0RFRl9DT1JFKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIGRhdGE7CisJCWRhdGEgJj0gKHRwcy0+aW5mb1tkY2RjXS0+dGFibGVfbGVuIC0gMSk7CisJCXJldHVybiB0cHMtPmluZm9bZGNkY10tPnRhYmxlW2RhdGFdICogMTAwMDsKKwl9IGVsc2UKKwkJcmV0dXJuIHRwcy0+aW5mb1tkY2RjXS0+bWluX3VWOworfQorCitzdGF0aWMgaW50IHRwczY1MDIzX2RjZGNfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkY2RjID0gcmRldl9nZXRfaWQoZGV2KTsKKwlpbnQgdnNlbDsKKworCWlmIChkY2RjICE9IFRQUzY1MDIzX0RDRENfMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWluX3VWIDwgdHBzLT5pbmZvW2RjZGNdLT5taW5fdVYKKwkJCXx8IG1pbl91ViA+IHRwcy0+aW5mb1tkY2RjXS0+bWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobWF4X3VWIDwgdHBzLT5pbmZvW2RjZGNdLT5taW5fdVYKKwkJCXx8IG1heF91ViA+IHRwcy0+aW5mb1tkY2RjXS0+bWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAodnNlbCA9IDA7IHZzZWwgPCB0cHMtPmluZm9bZGNkY10tPnRhYmxlX2xlbjsgdnNlbCsrKSB7CisJCWludCBtViA9IHRwcy0+aW5mb1tkY2RjXS0+dGFibGVbdnNlbF07CisJCWludCB1ViA9IG1WICogMTAwMDsKKworCQkvKiBCcmVhayBhdCB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KKwkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpCisJCQlicmVhazsKKwl9CisKKwkvKiB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgaW4gY2FzZSB3ZSBmb3VuZCBhIG1hdGNoICovCisJaWYgKHZzZWwgPT0gdHBzLT5pbmZvW2RjZGNdLT50YWJsZV9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UKKwkJcmV0dXJuIHRwc182NTAyM19yZWdfd3JpdGUodHBzLCBUUFM2NTAyM19SRUdfREVGX0NPUkUsIHZzZWwpOworfQorCitzdGF0aWMgaW50IHRwczY1MDIzX2xkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVnX3JlYWQodHBzLCBUUFM2NTAyM19SRUdfTERPX0NUUkwpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhID4+PSAoVFBTNjUwMjNfTERPX0NUUkxfTERPeF9TSElGVChsZG8gLSBUUFM2NTAyM19MRE9fMSkpOworCWRhdGEgJj0gKHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW4gLSAxKTsKKwlyZXR1cm4gdHBzLT5pbmZvW2xkb10tPnRhYmxlW2RhdGFdICogMTAwMDsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQlpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCB2c2VsLCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtaW5fdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1pbl91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1heF91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW47IHZzZWwrKykgeworCQlpbnQgbVYgPSB0cHMtPmluZm9bbGRvXS0+dGFibGVbdnNlbF07CisJCWludCB1ViA9IG1WICogMTAwMDsKKworCQkvKiBCcmVhayBhdCB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KKwkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpCisJCQlicmVhazsKKwl9CisKKwlpZiAodnNlbCA9PSB0cHMtPmluZm9bbGRvXS0+dGFibGVfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEgPSB0cHNfNjUwMjNfcmVnX3JlYWQodHBzLCBUUFM2NTAyM19SRUdfTERPX0NUUkwpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IFRQUzY1MDIzX0xET19DVFJMX0xET3hfTUFTSyhsZG8gLSBUUFM2NTAyM19MRE9fMSk7CisJZGF0YSB8PSAodnNlbCA8PCAoVFBTNjUwMjNfTERPX0NUUkxfTERPeF9TSElGVChsZG8gLSBUUFM2NTAyM19MRE9fMSkpKTsKKwlyZXR1cm4gdHBzXzY1MDIzX3JlZ193cml0ZSh0cHMsIFRQUzY1MDIzX1JFR19MRE9fQ1RSTCwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMjNfZGNkY19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGRjZGMgPCBUUFM2NTAyM19EQ0RDXzEgfHwgZGNkYyA+IFRQUzY1MDIzX0RDRENfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGNkYyA9PSBUUFM2NTAyM19EQ0RDXzEpIHsKKwkJaWYgKHNlbGVjdG9yID49IHRwcy0+aW5mb1tkY2RjXS0+dGFibGVfbGVuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UKKwkJCXJldHVybiB0cHMtPmluZm9bZGNkY10tPnRhYmxlW3NlbGVjdG9yXSAqIDEwMDA7CisJfSBlbHNlCisJCXJldHVybiB0cHMtPmluZm9bZGNkY10tPm1pbl91VjsKK30KKworc3RhdGljIGludCB0cHM2NTAyM19sZG9fbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJCXVuc2lnbmVkIHNlbGVjdG9yKQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGxkbyA8IFRQUzY1MDIzX0xET18xIHx8IGxkbyA+IFRQUzY1MDIzX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzZWxlY3RvciA+PSB0cHMtPmluZm9bbGRvXS0+dGFibGVfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlCisJCXJldHVybiB0cHMtPmluZm9bbGRvXS0+dGFibGVbc2VsZWN0b3JdICogMTAwMDsKK30KKworLyogT3BlcmF0aW9ucyBwZXJtaXR0ZWQgb24gVkRDREN4ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHBzNjUwMjNfZGNkY19vcHMgPSB7CisJLmlzX2VuYWJsZWQgPSB0cHM2NTAyM19kY2RjX2lzX2VuYWJsZWQsCisJLmVuYWJsZSA9IHRwczY1MDIzX2RjZGNfZW5hYmxlLAorCS5kaXNhYmxlID0gdHBzNjUwMjNfZGNkY19kaXNhYmxlLAorCS5nZXRfdm9sdGFnZSA9IHRwczY1MDIzX2RjZGNfZ2V0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gdHBzNjUwMjNfZGNkY19zZXRfdm9sdGFnZSwKKwkubGlzdF92b2x0YWdlID0gdHBzNjUwMjNfZGNkY19saXN0X3ZvbHRhZ2UsCit9OworCisvKiBPcGVyYXRpb25zIHBlcm1pdHRlZCBvbiBMRE94ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHBzNjUwMjNfbGRvX29wcyA9IHsKKwkuaXNfZW5hYmxlZCA9IHRwczY1MDIzX2xkb19pc19lbmFibGVkLAorCS5lbmFibGUgPSB0cHM2NTAyM19sZG9fZW5hYmxlLAorCS5kaXNhYmxlID0gdHBzNjUwMjNfbGRvX2Rpc2FibGUsCisJLmdldF92b2x0YWdlID0gdHBzNjUwMjNfbGRvX2dldF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IHRwczY1MDIzX2xkb19zZXRfdm9sdGFnZSwKKwkubGlzdF92b2x0YWdlID0gdHBzNjUwMjNfbGRvX2xpc3Rfdm9sdGFnZSwKK307CisKK3N0YXRpYworaW50IHRwc182NTAyM19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RhdGljIGludCBkZXNjX2lkOworCWNvbnN0IHN0cnVjdCB0cHNfaW5mbyAqaW5mbyA9ICh2b2lkICopaWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJc3RydWN0IHRwc19wbWljICp0cHM7CisJaW50IGk7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKioKKwkgKiBpbml0X2RhdGEgcG9pbnRzIHRvIGFycmF5IG9mIHJlZ3VsYXRvcl9pbml0IHN0cnVjdHVyZXMKKwkgKiBjb21pbmcgZnJvbSB0aGUgYm9hcmQtZXZtIGZpbGUuCisJICovCisJaW5pdF9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghaW5pdF9kYXRhKQorCQlyZXR1cm4gLUVJTzsKKworCXRwcyA9IGt6YWxsb2Moc2l6ZW9mKCp0cHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZ0cHMtPmlvX2xvY2spOworCisJLyogY29tbW9uIGZvciBhbGwgcmVndWxhdG9ycyAqLworCXRwcy0+Y2xpZW50ID0gY2xpZW50OworCisJZm9yIChpID0gMDsgaSA8IFRQUzY1MDIzX05VTV9SRUdVTEFUT1I7IGkrKywgaW5mbysrLCBpbml0X2RhdGErKykgeworCQkvKiBTdG9yZSByZWd1bGF0b3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwkJdHBzLT5pbmZvW2ldID0gaW5mbzsKKworCQl0cHMtPmRlc2NbaV0ubmFtZSA9IGluZm8tPm5hbWU7CisJCXRwcy0+ZGVzY1tpXS5pZCA9IGRlc2NfaWQrKzsKKwkJdHBzLT5kZXNjW2ldLm5fdm9sdGFnZXMgPSBudW1fdm9sdGFnZXNbaV07CisJCXRwcy0+ZGVzY1tpXS5vcHMgPSAoaSA+IFRQUzY1MDIzX0RDRENfMyA/CisJCQkJCSZ0cHM2NTAyM19sZG9fb3BzIDogJnRwczY1MDIzX2RjZGNfb3BzKTsKKwkJdHBzLT5kZXNjW2ldLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwkJdHBzLT5kZXNjW2ldLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkJLyogUmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgKi8KKwkJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmdHBzLT5kZXNjW2ldLCAmY2xpZW50LT5kZXYsCisJCQkJCQkJCWluaXRfZGF0YSwgdHBzKTsKKwkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQkJaWQtPm5hbWUpOworCisJCQkvKiBVbnJlZ2lzdGVyICovCisJCQl3aGlsZSAoaSkKKwkJCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbLS1pXSk7CisKKwkJCXRwcy0+Y2xpZW50ID0gTlVMTDsKKworCQkJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCQkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJCQlrZnJlZSh0cHMpOworCQkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJCX0KKworCQkvKiBTYXZlIHJlZ3VsYXRvciBmb3IgY2xlYW51cCAqLworCQl0cHMtPnJkZXZbaV0gPSByZGV2OworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHRwcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0cHNfNjUwMjNfcmVtb3ZlIC0gVFBTNjUwMjMgZHJpdmVyIGkyYyByZW1vdmUgaGFuZGxlcgorICogQGNsaWVudDogaTJjIGRyaXZlciBjbGllbnQgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFVucmVnaXN0ZXIgVFBTIGRyaXZlciBhcyBhbiBpMmMgY2xpZW50IGRldmljZSBkcml2ZXIKKyAqLworc3RhdGljIGludCBfX2RldmV4aXQgdHBzXzY1MDIzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFBTNjUwMjNfTlVNX1JFR1VMQVRPUjsgaSsrKQorCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbaV0pOworCisJdHBzLT5jbGllbnQgPSBOVUxMOworCisJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKHRwcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cHNfaW5mbyB0cHM2NTAyM19yZWdzW10gPSB7CisJeworCQkubmFtZSA9ICJWRENEQzEiLAorCQkubWluX3VWID0gIDgwMDAwMCwKKwkJLm1heF91ViA9IDE2MDAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKFZEQ0RDMV9WU0VMX3RhYmxlKSwKKwkJLnRhYmxlID0gVkRDREMxX1ZTRUxfdGFibGUsCisJfSwKKwl7CisJCS5uYW1lID0gIlZEQ0RDMiIsCisJCS5taW5fdVYgPSAgMzMwMDAwMCwKKwkJLm1heF91ViA9IDMzMDAwMDAsCisJCS5maXhlZCA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIlZEQ0RDMyIsCisJCS5taW5fdVYgPSAgMTgwMDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS5maXhlZCA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzEiLAorCQkubWluX3VWID0gMTAwMDAwMCwKKwkJLm1heF91ViA9IDMxNTAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKExETzFfVlNFTF90YWJsZSksCisJCS50YWJsZSA9IExETzFfVlNFTF90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJCS5taW5fdVYgPSAxMDUwMDAwLAorCQkubWF4X3VWID0gMzMwMDAwMCwKKwkJLnRhYmxlX2xlbiA9IEFSUkFZX1NJWkUoTERPMl9WU0VMX3RhYmxlKSwKKwkJLnRhYmxlID0gTERPMl9WU0VMX3RhYmxlLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHBzXzY1MDIzX2lkW10gPSB7CisJey5uYW1lID0gInRwczY1MDIzIiwKKwkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgdHBzNjUwMjNfcmVncyx9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0cHNfNjUwMjNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBzXzY1MDIzX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBzNjUwMjMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHRwc182NTAyM19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodHBzXzY1MDIzX3JlbW92ZSksCisJLmlkX3RhYmxlID0gdHBzXzY1MDIzX2lkLAorfTsKKworLyoqCisgKiB0cHNfNjUwMjNfaW5pdAorICoKKyAqIE1vZHVsZSBpbml0IGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRwc182NTAyM19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0cHNfNjUwMjNfaTJjX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHBzXzY1MDIzX2luaXQpOworCisvKioKKyAqIHRwc182NTAyM19jbGVhbnVwCisgKgorICogTW9kdWxlIGV4aXQgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHRwc182NTAyM19jbGVhbnVwKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnRwc182NTAyM19pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRwc182NTAyM19jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFBTNjUwMjMgdm9sdGFnZSByZWd1bGF0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA3eC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTZkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA3eC1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDcxNCBAQAorLyoKKyAqIHRwczY1MDd4LXJlZ3VsYXRvci5jCisgKgorICogUmVndWxhdG9yIGRyaXZlciBmb3IgVFBTNjUwNzMgUE1JQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50IEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55IGtpbmQsCisgKiB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJVFBTNjUwN1hfUkVHX1BQQVRIMQkJCQkwWDAxCisjZGVmaW5lCVRQUzY1MDdYX1JFR19JTlQJCQkJMFgwMgorI2RlZmluZQlUUFM2NTA3WF9SRUdfQ0hHQ09ORklHMAkJCQkwWDAzCisjZGVmaW5lCVRQUzY1MDdYX1JFR19DSEdDT05GSUcxCQkJCTBYMDQKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0NIR0NPTkZJRzIJCQkJMFgwNQorI2RlZmluZQlUUFM2NTA3WF9SRUdfQ0hHQ09ORklHMwkJCQkwWDA2CisjZGVmaW5lCVRQUzY1MDdYX1JFR19SRUdfQURDT05GSUcJCQkwWDA3CisjZGVmaW5lCVRQUzY1MDdYX1JFR19UU0NNT0RFCQkJCTBYMDgKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0FEUkVTVUxUXzEJCQkJMFgwOQorI2RlZmluZQlUUFM2NTA3WF9SRUdfQURSRVNVTFRfMgkJCQkwWDBBCisjZGVmaW5lCVRQUzY1MDdYX1JFR19QR09PRAkJCQkwWDBCCisjZGVmaW5lCVRQUzY1MDdYX1JFR19QR09PRE1BU0sJCQkJMFgwQworI2RlZmluZQlUUFM2NTA3WF9SRUdfQ09OX0NUUkwxCQkJCTBYMEQKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0NPTl9DVFJMMgkJCQkwWDBFCisjZGVmaW5lCVRQUzY1MDdYX1JFR19DT05fQ1RSTDMJCQkJMFgwRgorI2RlZmluZQlUUFM2NTA3WF9SRUdfREVGRENEQzEJCQkJMFgxMAorI2RlZmluZQlUUFM2NTA3WF9SRUdfREVGRENEQzJfTE9XCQkJMFgxMQorI2RlZmluZQlUUFM2NTA3WF9SRUdfREVGRENEQzJfSElHSAkJCTBYMTIKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0RFRkRDREMzX0xPVwkJCTBYMTMKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0RFRkRDREMzX0hJR0gJCQkwWDE0CisjZGVmaW5lCVRQUzY1MDdYX1JFR19ERUZTTEVXCQkJCTBYMTUKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX0xET19DVFJMMQkJCQkwWDE2CisjZGVmaW5lCVRQUzY1MDdYX1JFR19ERUZMRE8yCQkJCTBYMTcKKyNkZWZpbmUJVFBTNjUwN1hfUkVHX1dMRURfQ1RSTDEJCQkJMFgxOAorI2RlZmluZQlUUFM2NTA3WF9SRUdfV0xFRF9DVFJMMgkJCQkwWDE5CisKKy8qIENPTl9DVFJMMSBiaXRmaWVsZHMgKi8KKyNkZWZpbmUJVFBTNjUwN1hfQ09OX0NUUkwxX0RDREMxX0VOQUJMRQkJQklUKDQpCisjZGVmaW5lCVRQUzY1MDdYX0NPTl9DVFJMMV9EQ0RDMl9FTkFCTEUJCUJJVCgzKQorI2RlZmluZQlUUFM2NTA3WF9DT05fQ1RSTDFfRENEQzNfRU5BQkxFCQlCSVQoMikKKyNkZWZpbmUJVFBTNjUwN1hfQ09OX0NUUkwxX0xETzFfRU5BQkxFCQlCSVQoMSkKKyNkZWZpbmUJVFBTNjUwN1hfQ09OX0NUUkwxX0xETzJfRU5BQkxFCQlCSVQoMCkKKworLyogREVGRENEQzEgYml0ZmllbGRzICovCisjZGVmaW5lIFRQUzY1MDdYX0RFRkRDREMxX0RDREMxX0VYVF9BREpfRU4JQklUKDcpCisjZGVmaW5lIFRQUzY1MDdYX0RFRkRDREMxX0RDREMxX01BU0sJCTBYM0YKKworLyogREVGRENEQzJfTE9XIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9ERUZEQ0RDMl9MT1dfRENEQzJfTUFTSwkwWDNGCisKKy8qIERFRkRDREMyX0hJR0ggYml0ZmllbGRzICovCisjZGVmaW5lIFRQUzY1MDdYX0RFRkRDREMyX0hJR0hfRENEQzJfTUFTSwkwWDNGCisKKy8qIERFRkRDREMzX0xPVyBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgVFBTNjUwN1hfREVGRENEQzNfTE9XX0RDREMzX01BU0sJMFgzRgorCisvKiBERUZEQ0RDM19ISUdIIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9ERUZEQ0RDM19ISUdIX0RDREMzX01BU0sJMFgzRgorCisvKiBUUFM2NTA3WF9SRUdfTERPX0NUUkwxIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9SRUdfTERPX0NUUkwxX0xETzFfTUFTSwkwWDBGCisKKy8qIFRQUzY1MDdYX1JFR19ERUZMRE8yIGJpdGZpZWxkcyAqLworI2RlZmluZSBUUFM2NTA3WF9SRUdfREVGTERPMl9MRE8yX01BU0sJCTBYM0YKKworLyogVkRDREMgTUFTSyAqLworI2RlZmluZSBUUFM2NTA3WF9ERUZEQ0RDWF9EQ0RDX01BU0sJCTBYM0YKKworLyogRENEQydzICovCisjZGVmaW5lIFRQUzY1MDdYX0RDRENfMQkJCQkwCisjZGVmaW5lIFRQUzY1MDdYX0RDRENfMgkJCQkxCisjZGVmaW5lIFRQUzY1MDdYX0RDRENfMwkJCQkyCisvKiBMRE9zICovCisjZGVmaW5lIFRQUzY1MDdYX0xET18xCQkJCTMKKyNkZWZpbmUgVFBTNjUwN1hfTERPXzIJCQkJNAorCisjZGVmaW5lIFRQUzY1MDdYX01BWF9SRUdfSUQJCQlUUFM2NTA3WF9MRE9fMgorCisvKiBOdW1iZXIgb2Ygc3RlcC1kb3duIGNvbnZlcnRlcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRQUzY1MDdYX05VTV9EQ0RDCQkJMworLyogTnVtYmVyIG9mIExETyB2b2x0YWdlIHJlZ3VsYXRvcnMgIGF2YWlsYWJsZSAqLworI2RlZmluZSBUUFM2NTA3WF9OVU1fTERPCQkJMgorLyogTnVtYmVyIG9mIHRvdGFsIHJlZ3VsYXRvcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRQUzY1MDdYX05VTV9SRUdVTEFUT1IJCShUUFM2NTA3WF9OVU1fRENEQyArIFRQUzY1MDdYX05VTV9MRE8pCisKKy8qIFN1cHBvcnRlZCB2b2x0YWdlIHZhbHVlcyBmb3IgcmVndWxhdG9ycyAoaW4gbWlsbGlWb2x0cykgKi8KK3N0YXRpYyBjb25zdCB1MTYgVkRDREN4X1ZTRUxfdGFibGVbXSA9IHsKKwk3MjUsIDc1MCwgNzc1LCA4MDAsCisJODI1LCA4NTAsIDg3NSwgOTAwLAorCTkyNSwgOTUwLCA5NzUsIDEwMDAsCisJMTAyNSwgMTA1MCwgMTA3NSwgMTEwMCwKKwkxMTI1LCAxMTUwLCAxMTc1LCAxMjAwLAorCTEyMjUsIDEyNTAsIDEyNzUsIDEzMDAsCisJMTMyNSwgMTM1MCwgMTM3NSwgMTQwMCwKKwkxNDI1LCAxNDUwLCAxNDc1LCAxNTAwLAorCTE1NTAsIDE2MDAsIDE2NTAsIDE3MDAsCisJMTc1MCwgMTgwMCwgMTg1MCwgMTkwMCwKKwkxOTUwLCAyMDAwLCAyMDUwLCAyMTAwLAorCTIxNTAsIDIyMDAsIDIyNTAsIDIzMDAsCisJMjM1MCwgMjQwMCwgMjQ1MCwgMjUwMCwKKwkyNTUwLCAyNjAwLCAyNjUwLCAyNzAwLAorCTI3NTAsIDI4MDAsIDI4NTAsIDI5MDAsCisJMzAwMCwgMzEwMCwgMzIwMCwgMzMwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgTERPMV9WU0VMX3RhYmxlW10gPSB7CisJMTAwMCwgMTEwMCwgMTIwMCwgMTI1MCwKKwkxMzAwLCAxMzUwLCAxNDAwLCAxNTAwLAorCTE2MDAsIDE4MDAsIDI1MDAsIDI3NTAsCisJMjgwMCwgMzAwMCwgMzEwMCwgMzMwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgTERPMl9WU0VMX3RhYmxlW10gPSB7CisJNzI1LCA3NTAsIDc3NSwgODAwLAorCTgyNSwgODUwLCA4NzUsIDkwMCwKKwk5MjUsIDk1MCwgOTc1LCAxMDAwLAorCTEwMjUsIDEwNTAsIDEwNzUsIDExMDAsCisJMTEyNSwgMTE1MCwgMTE3NSwgMTIwMCwKKwkxMjI1LCAxMjUwLCAxMjc1LCAxMzAwLAorCTEzMjUsIDEzNTAsIDEzNzUsIDE0MDAsCisJMTQyNSwgMTQ1MCwgMTQ3NSwgMTUwMCwKKwkxNTUwLCAxNjAwLCAxNjUwLCAxNzAwLAorCTE3NTAsIDE4MDAsIDE4NTAsIDE5MDAsCisJMTk1MCwgMjAwMCwgMjA1MCwgMjEwMCwKKwkyMTUwLCAyMjAwLCAyMjUwLCAyMzAwLAorCTIzNTAsIDI0MDAsIDI0NTAsIDI1MDAsCisJMjU1MCwgMjYwMCwgMjY1MCwgMjcwMCwKKwkyNzUwLCAyODAwLCAyODUwLCAyOTAwLAorCTMwMDAsIDMxMDAsIDMyMDAsIDMzMDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG51bV92b2x0YWdlc1tdID0ge0FSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkJCUFSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkJCUFSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkJCUFSUkFZX1NJWkUoTERPMV9WU0VMX3RhYmxlKSwKKwkJCQlBUlJBWV9TSVpFKExETzJfVlNFTF90YWJsZSl9OworCitzdHJ1Y3QgdHBzX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbWluX3VWOworCXVuc2lnbmVkIG1heF91VjsKKwl1OCB0YWJsZV9sZW47CisJY29uc3QgdTE2ICp0YWJsZTsKK307CisKK3N0cnVjdCB0cHNfcG1pYyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2NbVFBTNjUwN1hfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldltUUFM2NTA3WF9OVU1fUkVHVUxBVE9SXTsKKwljb25zdCBzdHJ1Y3QgdHBzX2luZm8gKmluZm9bVFBTNjUwN1hfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IG11dGV4IGlvX2xvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIGludCB0cHNfNjUwN3hfcmVhZChzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnKQoreworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRwc182NTA3eF93cml0ZShzdHJ1Y3QgdHBzX3BtaWMgKnRwcywgdTggcmVnLCB1OCB2YWwpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEodHBzLT5jbGllbnQsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCB0cHNfNjUwN3hfc2V0X2JpdHMoc3RydWN0IHRwc19wbWljICp0cHMsIHU4IHJlZywgdTggbWFzaykKK3sKKwlpbnQgZXJyLCBkYXRhOworCisJbXV0ZXhfbG9jaygmdHBzLT5pb19sb2NrKTsKKworCWRhdGEgPSB0cHNfNjUwN3hfcmVhZCh0cHMsIHJlZyk7CisJaWYgKGRhdGEgPCAwKSB7CisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJSZWFkIGZyb20gcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCQllcnIgPSBkYXRhOworCQlnb3RvIG91dDsKKwl9CisKKwlkYXRhIHw9IG1hc2s7CisJZXJyID0gdHBzXzY1MDd4X3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiV3JpdGUgZm9yIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRwc182NTA3eF9jbGVhcl9iaXRzKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcsIHU4IG1hc2spCit7CisJaW50IGVyciwgZGF0YTsKKworCW11dGV4X2xvY2soJnRwcy0+aW9fbG9jayk7CisKKwlkYXRhID0gdHBzXzY1MDd4X3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkgeworCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKwkJZXJyID0gZGF0YTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSAmPSB+bWFzazsKKwllcnIgPSB0cHNfNjUwN3hfd3JpdGUodHBzLCByZWcsIGRhdGEpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJXcml0ZSBmb3IgcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0cHMtPmlvX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdHBzXzY1MDd4X3JlZ19yZWFkKHN0cnVjdCB0cHNfcG1pYyAqdHBzLCB1OCByZWcpCit7CisJaW50IGRhdGE7CisKKwltdXRleF9sb2NrKCZ0cHMtPmlvX2xvY2spOworCisJZGF0YSA9IHRwc182NTA3eF9yZWFkKHRwcywgcmVnKTsKKwlpZiAoZGF0YSA8IDApCisJCWRldl9lcnIoJnRwcy0+Y2xpZW50LT5kZXYsICJSZWFkIGZyb20gcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCisJbXV0ZXhfdW5sb2NrKCZ0cHMtPmlvX2xvY2spOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IHRwc182NTA3eF9yZWdfd3JpdGUoc3RydWN0IHRwc19wbWljICp0cHMsIHU4IHJlZywgdTggdmFsKQoreworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ0cHMtPmlvX2xvY2spOworCisJZXJyID0gdHBzXzY1MDd4X3dyaXRlKHRwcywgcmVnLCB2YWwpOworCWlmIChlcnIgPCAwKQorCQlkZXZfZXJyKCZ0cHMtPmNsaWVudC0+ZGV2LCAiV3JpdGUgZm9yIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworCW11dGV4X3VubG9jaygmdHBzLT5pb19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRwczY1MDd4X2RjZGNfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCBkY2RjID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChkY2RjIDwgVFBTNjUwN1hfRENEQ18xIHx8IGRjZGMgPiBUUFM2NTA3WF9EQ0RDXzMpCisJCXJldHVybiAtRUlOVkFMOworCisJc2hpZnQgPSBUUFM2NTA3WF9NQVhfUkVHX0lEIC0gZGNkYzsKKwlkYXRhID0gdHBzXzY1MDd4X3JlZ19yZWFkKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSk7CisKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCWVsc2UKKwkJcmV0dXJuIChkYXRhICYgMTw8c2hpZnQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChsZG8gPCBUUFM2NTA3WF9MRE9fMSB8fCBsZG8gPiBUUFM2NTA3WF9MRE9fMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDdYX01BWF9SRUdfSUQgLSBsZG87CisJZGF0YSA9IHRwc182NTA3eF9yZWdfcmVhZCh0cHMsIFRQUzY1MDdYX1JFR19DT05fQ1RSTDEpOworCisJaWYgKGRhdGEgPCAwKQorCQlyZXR1cm4gZGF0YTsKKwllbHNlCisJCXJldHVybiAoZGF0YSAmIDE8PHNoaWZ0KSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IHRwczY1MDd4X2RjZGNfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGRjZGMgPCBUUFM2NTA3WF9EQ0RDXzEgfHwgZGNkYyA+IFRQUzY1MDdYX0RDRENfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDdYX01BWF9SRUdfSUQgLSBkY2RjOworCXJldHVybiB0cHNfNjUwN3hfc2V0X2JpdHModHBzLCBUUFM2NTA3WF9SRUdfQ09OX0NUUkwxLCAxIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIGludCB0cHM2NTA3eF9kY2RjX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisJdTggc2hpZnQ7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDdYX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwN1hfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwN1hfTUFYX1JFR19JRCAtIGRjZGM7CisJcmV0dXJuIHRwc182NTA3eF9jbGVhcl9iaXRzKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChkZXYpOworCXU4IHNoaWZ0OworCisJaWYgKGxkbyA8IFRQUzY1MDdYX0xET18xIHx8IGxkbyA+IFRQUzY1MDdYX0xET18yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gVFBTNjUwN1hfTUFYX1JFR19JRCAtIGxkbzsKKwlyZXR1cm4gdHBzXzY1MDd4X3NldF9iaXRzKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCBzaGlmdDsKKworCWlmIChsZG8gPCBUUFM2NTA3WF9MRE9fMSB8fCBsZG8gPiBUUFM2NTA3WF9MRE9fMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IFRQUzY1MDdYX01BWF9SRUdfSUQgLSBsZG87CisJcmV0dXJuIHRwc182NTA3eF9jbGVhcl9iaXRzKHRwcywgVFBTNjUwN1hfUkVHX0NPTl9DVFJMMSwgMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfZGNkY19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkYXRhLCBkY2RjID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCByZWc7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFRQUzY1MDdYX0RDRENfMToKKwkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMxOworCQlicmVhazsKKwljYXNlIFRQUzY1MDdYX0RDRENfMjoKKwkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMyX0xPVzsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTA3WF9EQ0RDXzM6CisJCXJlZyA9IFRQUzY1MDdYX1JFR19ERUZEQ0RDM19MT1c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhdGEgPSB0cHNfNjUwN3hfcmVnX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IFRQUzY1MDdYX0RFRkRDRENYX0RDRENfTUFTSzsKKwlyZXR1cm4gdHBzLT5pbmZvW2RjZGNdLT50YWJsZVtkYXRhXSAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfZGNkY19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAorCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRhdGEsIHZzZWwsIGRjZGMgPSByZGV2X2dldF9pZChkZXYpOworCXU4IHJlZzsKKworCXN3aXRjaCAoZGNkYykgeworCWNhc2UgVFBTNjUwN1hfRENEQ18xOgorCQlyZWcgPSBUUFM2NTA3WF9SRUdfREVGRENEQzE7CisJCWJyZWFrOworCWNhc2UgVFBTNjUwN1hfRENEQ18yOgorCQlyZWcgPSBUUFM2NTA3WF9SRUdfREVGRENEQzJfTE9XOworCQlicmVhazsKKwljYXNlIFRQUzY1MDdYX0RDRENfMzoKKwkJcmVnID0gVFBTNjUwN1hfUkVHX0RFRkRDREMzX0xPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG1pbl91ViA8IHRwcy0+aW5mb1tkY2RjXS0+bWluX3VWCisJCXx8IG1pbl91ViA+IHRwcy0+aW5mb1tkY2RjXS0+bWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobWF4X3VWIDwgdHBzLT5pbmZvW2RjZGNdLT5taW5fdVYKKwkJfHwgbWF4X3VWID4gdHBzLT5pbmZvW2RjZGNdLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IHRwcy0+aW5mb1tkY2RjXS0+dGFibGVfbGVuOyB2c2VsKyspIHsKKwkJaW50IG1WID0gdHBzLT5pbmZvW2RjZGNdLT50YWJsZVt2c2VsXTsKKwkJaW50IHVWID0gbVYgKiAxMDAwOworCisJCS8qIEJyZWFrIGF0IHRoZSBmaXJzdCBpbi1yYW5nZSB2YWx1ZSAqLworCQlpZiAobWluX3VWIDw9IHVWICYmIHVWIDw9IG1heF91VikKKwkJCWJyZWFrOworCX0KKworCS8qIHdyaXRlIHRvIHRoZSByZWdpc3RlciBpbiBjYXNlIHdlIGZvdW5kIGEgbWF0Y2ggKi8KKwlpZiAodnNlbCA9PSB0cHMtPmluZm9bZGNkY10tPnRhYmxlX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhID0gdHBzXzY1MDd4X3JlZ19yZWFkKHRwcywgcmVnKTsKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCisJZGF0YSAmPSB+VFBTNjUwN1hfREVGRENEQ1hfRENEQ19NQVNLOworCWRhdGEgfD0gdnNlbDsKKworCXJldHVybiB0cHNfNjUwN3hfcmVnX3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKK30KKworc3RhdGljIGludCB0cHM2NTA3eF9sZG9fZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCByZWcsIG1hc2s7CisKKwlpZiAobGRvIDwgVFBTNjUwN1hfTERPXzEgfHwgbGRvID4gVFBTNjUwN1hfTERPXzIpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgeworCQlyZWcgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDEgOiBUUFM2NTA3WF9SRUdfREVGTERPMik7CisJCW1hc2sgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDFfTERPMV9NQVNLIDoKKwkJCQlUUFM2NTA3WF9SRUdfREVGTERPMl9MRE8yX01BU0spOworCX0KKworCWRhdGEgPSB0cHNfNjUwN3hfcmVnX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IG1hc2s7CisJcmV0dXJuIHRwcy0+aW5mb1tsZG9dLT50YWJsZVtkYXRhXSAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwN3hfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGF0YSwgdnNlbCwgbGRvID0gcmRldl9nZXRfaWQoZGV2KTsKKwl1OCByZWcsIG1hc2s7CisKKwlpZiAobGRvIDwgVFBTNjUwN1hfTERPXzEgfHwgbGRvID4gVFBTNjUwN1hfTERPXzIpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgeworCQlyZWcgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDEgOiBUUFM2NTA3WF9SRUdfREVGTERPMik7CisJCW1hc2sgPSAobGRvID09IFRQUzY1MDdYX0xET18xID8KKwkJCVRQUzY1MDdYX1JFR19MRE9fQ1RSTDFfTERPMV9NQVNLIDoKKwkJCQlUUFM2NTA3WF9SRUdfREVGTERPMl9MRE8yX01BU0spOworCX0KKworCWlmIChtaW5fdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1pbl91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfdVYgPCB0cHMtPmluZm9bbGRvXS0+bWluX3VWIHx8IG1heF91ViA+IHRwcy0+aW5mb1tsZG9dLT5tYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW47IHZzZWwrKykgeworCQlpbnQgbVYgPSB0cHMtPmluZm9bbGRvXS0+dGFibGVbdnNlbF07CisJCWludCB1ViA9IG1WICogMTAwMDsKKworCQkvKiBCcmVhayBhdCB0aGUgZmlyc3QgaW4tcmFuZ2UgdmFsdWUgKi8KKwkJaWYgKG1pbl91ViA8PSB1ViAmJiB1ViA8PSBtYXhfdVYpCisJCQlicmVhazsKKwl9CisKKwlpZiAodnNlbCA9PSB0cHMtPmluZm9bbGRvXS0+dGFibGVfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEgPSB0cHNfNjUwN3hfcmVnX3JlYWQodHBzLCByZWcpOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisKKwlkYXRhICY9IH5tYXNrOworCWRhdGEgfD0gdnNlbDsKKworCXJldHVybiB0cHNfNjUwN3hfcmVnX3dyaXRlKHRwcywgcmVnLCBkYXRhKTsKK30KKworc3RhdGljIGludCB0cHM2NTA3eF9kY2RjX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAorCQkJCQl1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwlpZiAoZGNkYyA8IFRQUzY1MDdYX0RDRENfMSB8fCBkY2RjID4gVFBTNjUwN1hfRENEQ18zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzZWxlY3RvciA+PSB0cHMtPmluZm9bZGNkY10tPnRhYmxlX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZQorCQlyZXR1cm4gdHBzLT5pbmZvW2RjZGNdLT50YWJsZVtzZWxlY3Rvcl0gKiAxMDAwOworfQorCitzdGF0aWMgaW50IHRwczY1MDd4X2xkb19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGxkbyA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwlpZiAobGRvIDwgVFBTNjUwN1hfTERPXzEgfHwgbGRvID4gVFBTNjUwN1hfTERPXzIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNlbGVjdG9yID49IHRwcy0+aW5mb1tsZG9dLT50YWJsZV9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UKKwkJcmV0dXJuIHRwcy0+aW5mb1tsZG9dLT50YWJsZVtzZWxlY3Rvcl0gKiAxMDAwOworfQorCisvKiBPcGVyYXRpb25zIHBlcm1pdHRlZCBvbiBWRENEQ3ggKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTA3eF9kY2RjX29wcyA9IHsKKwkuaXNfZW5hYmxlZCA9IHRwczY1MDd4X2RjZGNfaXNfZW5hYmxlZCwKKwkuZW5hYmxlID0gdHBzNjUwN3hfZGNkY19lbmFibGUsCisJLmRpc2FibGUgPSB0cHM2NTA3eF9kY2RjX2Rpc2FibGUsCisJLmdldF92b2x0YWdlID0gdHBzNjUwN3hfZGNkY19nZXRfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9kY2RjX3NldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9kY2RjX2xpc3Rfdm9sdGFnZSwKK307CisKKy8qIE9wZXJhdGlvbnMgcGVybWl0dGVkIG9uIExET3ggKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTA3eF9sZG9fb3BzID0geworCS5pc19lbmFibGVkID0gdHBzNjUwN3hfbGRvX2lzX2VuYWJsZWQsCisJLmVuYWJsZSA9IHRwczY1MDd4X2xkb19lbmFibGUsCisJLmRpc2FibGUgPSB0cHM2NTA3eF9sZG9fZGlzYWJsZSwKKwkuZ2V0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9sZG9fZ2V0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gdHBzNjUwN3hfbGRvX3NldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9sZG9fbGlzdF92b2x0YWdlLAorfTsKKworc3RhdGljCitpbnQgdHBzXzY1MDd4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdGF0aWMgaW50IGRlc2NfaWQ7CisJY29uc3Qgc3RydWN0IHRwc19pbmZvICppbmZvID0gKHZvaWQgKilpZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwlzdHJ1Y3QgdHBzX3BtaWMgKnRwczsKKwlpbnQgaTsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRUlPOworCisJLyoqCisJICogaW5pdF9kYXRhIHBvaW50cyB0byBhcnJheSBvZiByZWd1bGF0b3JfaW5pdCBzdHJ1Y3R1cmVzCisJICogY29taW5nIGZyb20gdGhlIGJvYXJkLWV2bSBmaWxlLgorCSAqLworCWluaXRfZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIWluaXRfZGF0YSkKKwkJcmV0dXJuIC1FSU87CisKKwl0cHMgPSBremFsbG9jKHNpemVvZigqdHBzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cHMpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmdHBzLT5pb19sb2NrKTsKKworCS8qIGNvbW1vbiBmb3IgYWxsIHJlZ3VsYXRvcnMgKi8KKwl0cHMtPmNsaWVudCA9IGNsaWVudDsKKworCWZvciAoaSA9IDA7IGkgPCBUUFM2NTA3WF9OVU1fUkVHVUxBVE9SOyBpKyssIGluZm8rKywgaW5pdF9kYXRhKyspIHsKKwkJLyogUmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgKi8KKwkJdHBzLT5pbmZvW2ldID0gaW5mbzsKKwkJdHBzLT5kZXNjW2ldLm5hbWUgPSBpbmZvLT5uYW1lOworCQl0cHMtPmRlc2NbaV0uaWQgPSBkZXNjX2lkKys7CisJCXRwcy0+ZGVzY1tpXS5uX3ZvbHRhZ2VzID0gbnVtX3ZvbHRhZ2VzW2ldOworCQl0cHMtPmRlc2NbaV0ub3BzID0gKGkgPiBUUFM2NTA3WF9EQ0RDXzMgPworCQkJCSZ0cHM2NTA3eF9sZG9fb3BzIDogJnRwczY1MDd4X2RjZGNfb3BzKTsKKwkJdHBzLT5kZXNjW2ldLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwkJdHBzLT5kZXNjW2ldLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmdHBzLT5kZXNjW2ldLAorCQkJCQkmY2xpZW50LT5kZXYsIGluaXRfZGF0YSwgdHBzKTsKKwkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQkJaWQtPm5hbWUpOworCisJCQkvKiBVbnJlZ2lzdGVyICovCisJCQl3aGlsZSAoaSkKKwkJCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbLS1pXSk7CisKKwkJCXRwcy0+Y2xpZW50ID0gTlVMTDsKKworCQkJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCQkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisKKwkJCWtmcmVlKHRwcyk7CisJCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJfQorCisJCS8qIFNhdmUgcmVndWxhdG9yIGZvciBjbGVhbnVwICovCisJCXRwcy0+cmRldltpXSA9IHJkZXY7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHBzKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHRwc182NTA3eF9yZW1vdmUgLSBUUFM2NTA3eCBkcml2ZXIgaTJjIHJlbW92ZSBoYW5kbGVyCisgKiBAY2xpZW50OiBpMmMgZHJpdmVyIGNsaWVudCBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVW5yZWdpc3RlciBUUFMgZHJpdmVyIGFzIGFuIGkyYyBjbGllbnQgZGV2aWNlIGRyaXZlcgorICovCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0cHNfNjUwN3hfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHRwc19wbWljICp0cHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBUUFM2NTA3WF9OVU1fUkVHVUxBVE9SOyBpKyspCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHRwcy0+cmRldltpXSk7CisKKwl0cHMtPmNsaWVudCA9IE5VTEw7CisKKwkvKiBjbGVhciB0aGUgY2xpZW50IGRhdGEgaW4gaTJjICovCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUodHBzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwc19pbmZvIHRwczY1MDd4X3JlZ3NbXSA9IHsKKwl7CisJCS5uYW1lID0gIlZEQ0RDMSIsCisJCS5taW5fdVYgPSA3MjUwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudGFibGVfbGVuID0gQVJSQVlfU0laRShWRENEQ3hfVlNFTF90YWJsZSksCisJCS50YWJsZSA9IFZEQ0RDeF9WU0VMX3RhYmxlLAorCX0sCisJeworCQkubmFtZSA9ICJWRENEQzIiLAorCQkubWluX3VWID0gNzI1MDAwLAorCQkubWF4X3VWID0gMzMwMDAwMCwKKwkJLnRhYmxlX2xlbiA9IEFSUkFZX1NJWkUoVkRDREN4X1ZTRUxfdGFibGUpLAorCQkudGFibGUgPSBWRENEQ3hfVlNFTF90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiVkRDREMzIiwKKwkJLm1pbl91ViA9IDcyNTAwMCwKKwkJLm1heF91ViA9IDMzMDAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKFZEQ0RDeF9WU0VMX3RhYmxlKSwKKwkJLnRhYmxlID0gVkRDREN4X1ZTRUxfdGFibGUsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzEiLAorCQkubWluX3VWID0gMTAwMDAwMCwKKwkJLm1heF91ViA9IDMzMDAwMDAsCisJCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKExETzFfVlNFTF90YWJsZSksCisJCS50YWJsZSA9IExETzFfVlNFTF90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJCS5taW5fdVYgPSA3MjUwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudGFibGVfbGVuID0gQVJSQVlfU0laRShMRE8yX1ZTRUxfdGFibGUpLAorCQkudGFibGUgPSBMRE8yX1ZTRUxfdGFibGUsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0cHNfNjUwN3hfaWRbXSA9IHsKKwl7Lm5hbWUgPSAidHBzNjUwN3giLAorCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB0cHM2NTA3eF9yZWdzLH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0cHNfNjUwN3hfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBzXzY1MDd4X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBzNjUwN3giLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHRwc182NTA3eF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodHBzXzY1MDd4X3JlbW92ZSksCisJLmlkX3RhYmxlID0gdHBzXzY1MDd4X2lkLAorfTsKKworLyoqCisgKiB0cHNfNjUwN3hfaW5pdAorICoKKyAqIE1vZHVsZSBpbml0IGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRwc182NTA3eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0cHNfNjUwN3hfaTJjX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHBzXzY1MDd4X2luaXQpOworCisvKioKKyAqIHRwc182NTA3eF9jbGVhbnVwCisgKgorICogTW9kdWxlIGV4aXQgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHRwc182NTA3eF9jbGVhbnVwKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnRwc182NTA3eF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRwc182NTA3eF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFBTNjUwN3ggdm9sdGFnZSByZWd1bGF0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci91c2Vyc3BhY2UtY29uc3VtZXIuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jCmluZGV4IDA2ZDJmYTkuLjQ0OTE3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3VzZXJzcGFjZS1jb25zdW1lci5jCkBAIC05MywxNiArOTMsMjEgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCByZWdfc2hvd19uYW1lLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGF0ZSwgMDY0NCwgcmVnX3Nob3dfc3RhdGUsIHJlZ19zZXRfc3RhdGUpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfbmFtZSwKLQkmZGV2X2F0dHJfc3RhdGUsCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJJmRldl9hdHRyX3N0YXRlLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGF0dHJfZ3JvdXAgPSB7CisJLmF0dHJzCT0gYXR0cmlidXRlcywKIH07CiAKIHN0YXRpYyBpbnQgcmVndWxhdG9yX3VzZXJzcGFjZV9jb25zdW1lcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZWd1bGF0b3JfdXNlcnNwYWNlX2NvbnN1bWVyX2RhdGEgKnBkYXRhOwogCXN0cnVjdCB1c2Vyc3BhY2VfY29uc3VtZXJfZGF0YSAqZHJ2ZGF0YTsKLQlpbnQgcmV0LCBpOworCWludCByZXQ7CiAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcGRhdGEpCkBAIC0xMjUsMzEgKzEzMCwyOSBAQAogCQlnb3RvIGVycl9hbGxvY19zdXBwbGllczsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdHRyaWJ1dGVzKTsgaSsrKSB7Ci0JCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCBhdHRyaWJ1dGVzW2ldKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJZ290byBlcnJfY3JlYXRlX2F0dHJzOwotCX0KKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmYXR0cl9ncm91cCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycl9jcmVhdGVfYXR0cnM7CiAKLQlpZiAocGRhdGEtPmluaXRfb24pCisJaWYgKHBkYXRhLT5pbml0X29uKSB7CiAJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShkcnZkYXRhLT5udW1fc3VwcGxpZXMsCiAJCQkJCSAgICBkcnZkYXRhLT5zdXBwbGllcyk7Ci0KLQlkcnZkYXRhLT5lbmFibGVkID0gcGRhdGEtPmluaXRfb247Ci0KLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgaW5pdGlhbCBzdGF0ZTogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX2NyZWF0ZV9hdHRyczsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gc2V0IGluaXRpYWwgc3RhdGU6ICVkXG4iLCByZXQpOworCQkJZ290byBlcnJfZW5hYmxlOworCQl9CiAJfQogCisJZHJ2ZGF0YS0+ZW5hYmxlZCA9IHBkYXRhLT5pbml0X29uOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydmRhdGEpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9jcmVhdGVfYXR0cnM6Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXR0cmlidXRlcyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsIGF0dHJpYnV0ZXNbaV0pOworZXJyX2VuYWJsZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmYXR0cl9ncm91cCk7CiAKK2Vycl9jcmVhdGVfYXR0cnM6CiAJcmVndWxhdG9yX2J1bGtfZnJlZShkcnZkYXRhLT5udW1fc3VwcGxpZXMsIGRydmRhdGEtPnN1cHBsaWVzKTsKIAogZXJyX2FsbG9jX3N1cHBsaWVzOgpAQCAtMTYwLDEwICsxNjMsOCBAQAogc3RhdGljIGludCByZWd1bGF0b3JfdXNlcnNwYWNlX2NvbnN1bWVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1c2Vyc3BhY2VfY29uc3VtZXJfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXR0cmlidXRlcyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsIGF0dHJpYnV0ZXNbaV0pOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZhdHRyX2dyb3VwKTsKIAogCWlmIChkYXRhLT5lbmFibGVkKQogCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKGRhdGEtPm51bV9zdXBwbGllcywgZGF0YS0+c3VwcGxpZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jCmluZGV4IGU3ZGI1NjYuLmFkZGMwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMKQEAgLTI3LDcxICsyNyw4MSBAQAogCXVuc2lnbmVkIGludCBtb2RlOwogfTsKIAotc3RhdGljIHZvaWQgdXBkYXRlX3ZvbHRhZ2VfY29uc3RyYWludHMoc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YSAqZGF0YSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV92b2x0YWdlX2NvbnN0cmFpbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YSAqZGF0YSkKIHsKIAlpbnQgcmV0OwogCiAJaWYgKGRhdGEtPm1pbl91ViAmJiBkYXRhLT5tYXhfdVYKIAkgICAgJiYgZGF0YS0+bWluX3VWIDw9IGRhdGEtPm1heF91VikgeworCQlkZXZfZGJnKGRldiwgIlJlcXVlc3RpbmcgJWQtJWR1VlxuIiwKKwkJCWRhdGEtPm1pbl91ViwgZGF0YS0+bWF4X3VWKTsKIAkJcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGRhdGEtPnJlZ3VsYXRvciwKLQkJCQkJICAgIGRhdGEtPm1pbl91ViwgZGF0YS0+bWF4X3VWKTsKKwkJCQkJZGF0YS0+bWluX3VWLCBkYXRhLT5tYXhfdVYpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yX3NldF92b2x0YWdlKCkgZmFpbGVkOiAlZFxuIiwKLQkJCSAgICAgICByZXQpOworCQkJZGV2X2VycihkZXYsCisJCQkJInJlZ3VsYXRvcl9zZXRfdm9sdGFnZSgpIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAlpZiAoZGF0YS0+bWluX3VWICYmIGRhdGEtPm1heF91ViAmJiAhZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+cmVndWxhdG9yKTsKIAkJaWYgKHJldCA9PSAwKQogCQkJZGF0YS0+ZW5hYmxlZCA9IDE7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yX2VuYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9lbmFibGUoKSBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CiAJfQogCiAJaWYgKCEoZGF0YS0+bWluX3VWICYmIGRhdGEtPm1heF91VikgJiYgZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkRpc2FibGluZyByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShkYXRhLT5yZWd1bGF0b3IpOwogCQlpZiAocmV0ID09IDApCiAJCQlkYXRhLT5lbmFibGVkID0gMDsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSICJyZWd1bGF0b3JfZGlzYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9kaXNhYmxlKCkgZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX2N1cnJlbnRfbGltaXRfY29uc3RyYWludHMoc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YQotCQkJCQkJKmRhdGEpCitzdGF0aWMgdm9pZCB1cGRhdGVfY3VycmVudF9saW1pdF9jb25zdHJhaW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHZpcnR1YWxfY29uc3VtZXJfZGF0YSAqZGF0YSkKIHsKIAlpbnQgcmV0OwogCiAJaWYgKGRhdGEtPm1heF91QQogCSAgICAmJiBkYXRhLT5taW5fdUEgPD0gZGF0YS0+bWF4X3VBKSB7CisJCWRldl9kYmcoZGV2LCAiUmVxdWVzdGluZyAlZC0lZHVBXG4iLAorCQkJZGF0YS0+bWluX3VBLCBkYXRhLT5tYXhfdUEpOwogCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2N1cnJlbnRfbGltaXQoZGF0YS0+cmVndWxhdG9yLAogCQkJCQlkYXRhLT5taW5fdUEsIGRhdGEtPm1heF91QSk7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJcHJfZXJyKCJyZWd1bGF0b3Jfc2V0X2N1cnJlbnRfbGltaXQoKSBmYWlsZWQ6ICVkXG4iLAotCQkJICAgICAgIHJldCk7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkicmVndWxhdG9yX3NldF9jdXJyZW50X2xpbWl0KCkgZmFpbGVkOiAlZFxuIiwKKwkJCQlyZXQpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJaWYgKGRhdGEtPm1heF91QSAmJiAhZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+cmVndWxhdG9yKTsKIAkJaWYgKHJldCA9PSAwKQogCQkJZGF0YS0+ZW5hYmxlZCA9IDE7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yX2VuYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9lbmFibGUoKSBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CiAJfQogCiAJaWYgKCEoZGF0YS0+bWluX3VBICYmIGRhdGEtPm1heF91QSkgJiYgZGF0YS0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgIkRpc2FibGluZyByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShkYXRhLT5yZWd1bGF0b3IpOwogCQlpZiAocmV0ID09IDApCiAJCQlkYXRhLT5lbmFibGVkID0gMDsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSICJyZWd1bGF0b3JfZGlzYWJsZSgpIGZhaWxlZDogJWRcbiIsCisJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9kaXNhYmxlKCkgZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwogCX0KIH0KQEAgLTExNSw3ICsxMjUsNyBAQAogCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCiAJZGF0YS0+bWluX3VWID0gdmFsOwotCXVwZGF0ZV92b2x0YWdlX2NvbnN0cmFpbnRzKGRhdGEpOworCXVwZGF0ZV92b2x0YWdlX2NvbnN0cmFpbnRzKGRldiwgZGF0YSk7CiAKIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCkBAIC0xNDEsNyArMTUxLDcgQEAKIAltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAogCWRhdGEtPm1heF91ViA9IHZhbDsKLQl1cGRhdGVfdm9sdGFnZV9jb25zdHJhaW50cyhkYXRhKTsKKwl1cGRhdGVfdm9sdGFnZV9jb25zdHJhaW50cyhkZXYsIGRhdGEpOwogCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIApAQCAtMTY3LDcgKzE3Nyw3IEBACiAJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAKIAlkYXRhLT5taW5fdUEgPSB2YWw7Ci0JdXBkYXRlX2N1cnJlbnRfbGltaXRfY29uc3RyYWludHMoZGF0YSk7CisJdXBkYXRlX2N1cnJlbnRfbGltaXRfY29uc3RyYWludHMoZGV2LCBkYXRhKTsKIAogCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAKQEAgLTE5Myw3ICsyMDMsNyBAQAogCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCiAJZGF0YS0+bWF4X3VBID0gdmFsOwotCXVwZGF0ZV9jdXJyZW50X2xpbWl0X2NvbnN0cmFpbnRzKGRhdGEpOworCXVwZGF0ZV9jdXJyZW50X2xpbWl0X2NvbnN0cmFpbnRzKGRldiwgZGF0YSk7CiAKIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCkBAIC0yNzYsOCArMjg2LDcgQEAKIAogCWRydmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlydHVhbF9jb25zdW1lcl9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRydmRhdGEgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbXV0ZXhfaW5pdCgmZHJ2ZGF0YS0+bG9jayk7CkBAIC0yODUsMTMgKzI5NCwxOCBAQAogCWRydmRhdGEtPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgcmVnX2lkKTsKIAlpZiAoSVNfRVJSKGRydmRhdGEtPnJlZ3VsYXRvcikpIHsKIAkJcmV0ID0gUFRSX0VSUihkcnZkYXRhLT5yZWd1bGF0b3IpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gb2J0YWluIHN1cHBseSAnJXMnOiAlZFxuIiwKKwkJCXJlZ19pZCwgcmV0KTsKIAkJZ290byBlcnI7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXR0cmlidXRlcyk7IGkrKykgewogCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgYXR0cmlidXRlc1tpXSk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCWdvdG8gZXJyOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgYXR0ciAlZDogJWRcbiIsCisJCQkJaSwgcmV0KTsKKwkJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKKwkJfQogCX0KIAogCWRydmRhdGEtPm1vZGUgPSByZWd1bGF0b3JfZ2V0X21vZGUoZHJ2ZGF0YS0+cmVndWxhdG9yKTsKQEAgLTMwMCw2ICszMTQsOCBAQAogCiAJcmV0dXJuIDA7CiAKK2Vycl9yZWd1bGF0b3I6CisJcmVndWxhdG9yX3B1dChkcnZkYXRhLT5yZWd1bGF0b3IpOwogZXJyOgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJpYnV0ZXMpOyBpKyspCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCBhdHRyaWJ1dGVzW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwppbmRleCAxN2EwMGIwLi43NjhiZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCkBAIC0xNDE5LDYgKzE0MTksOCBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJldDsKKwlpZiAocmVnIDwgMCB8fCByZWcgPj0gTlVNX1dNODM1MF9SRUdVTEFUT1JTKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh3bTgzNTAtPnBtaWMucGRldltyZWddKQogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggNzM3NzFiMC4uM2MyMGRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0zNzgsNiArMzc4LDE1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczMyMzQuCiAKK2NvbmZpZyBSVENfRFJWX1BDRjIxMjMKKwl0cmlzdGF0ZSAiTlhQIFBDRjIxMjMiCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBOWFAgUENGMjEyMworCSAgUlRDIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjIxMjMuCisKIGVuZGlmICMgU1BJX01BU1RFUgogCiBjb21tZW50ICJQbGF0Zm9ybSBSVEMgZHJpdmVycyIKQEAgLTUwMCw2ICs1MDksMTcgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBpZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgInJ0Yy1tNDh0NTkiLgogCitjb25maWcgUlRDX01YQworCXRyaXN0YXRlICJGcmVlc2NhbGUgTVhDIFJlYWwgVGltZSBDbG9jayIKKwlkZXBlbmRzIG9uIEFSQ0hfTVhDCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MKKwloZWxwCisJICAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVhDCisJICAgUlRDIG1vZHVsZS4KKworCSAgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBpZiBzbywgdGhlIG1vZHVsZQorCSAgIHdpbGwgYmUgY2FsbGVkICJydGMtbXhjIi4KKwogY29uZmlnIFJUQ19EUlZfQlE0ODAyCiAJdHJpc3RhdGUgIlRJIEJRNDgwMiIKIAloZWxwCkBAIC03NzgsNCArNzk4LDMzIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1wczMuCiAKK2NvbmZpZyBSVENfRFJWX0NPSDkwMTMzMQorCXRyaXN0YXRlICJTVC1Fcmljc3NvbiBDT0ggOTAxIDMzMSBSVEMiCisJZGVwZW5kcyBvbiBBUkNIX1UzMDAKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgYWNjZXNzIHRvIFNULUVyaWNzc29uCisJICBDT0ggOTAxIDMzMSBSVEMgY2xvY2sgZm91bmQgaW4gc29tZSBTVC1Fcmljc3NvbiBNb2JpbGUKKwkgIFBsYXRmb3Jtcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCAicnRjLWNvaDkwMTMzMSIuCisKKworY29uZmlnIFJUQ19EUlZfU1RNUAorCXRyaXN0YXRlICJGcmVlc2NhbGUgU1RNUDN4eHggUlRDIgorCWRlcGVuZHMgb24gQVJDSF9TVE1QM1hYWAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZSBvbmJvYXJkCisJICBTVE1QM3h4eCBSVEMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXN0bXAzeHh4LgorCitjb25maWcgUlRDX0RSVl9QQ0FQCisJdHJpc3RhdGUgIlBDQVAgUlRDIgorCWRlcGVuZHMgb24gRVpYX1BDQVAKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIFJUQyBmb3VuZCBvbgorCSAgdGhlIFBDQVAyIEFTSUMgdXNlZCBvbiBzb21lIE1vdG9yb2xhIHBob25lcy4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggNWUxNTJmZi4uYWEzZmJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDkgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQkrPSBydGMtYXQ5MXNhbTkubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQVUxWFhYKQkrPSBydGMtYXUxeHh4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0JGSU4pCSs9IHJ0Yy1iZmluLm8KK29iai0kKENPTkZJR19SVENfRFJWX0JRNDgwMikJKz0gcnRjLWJxNDgwMi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9DTU9TKQkrPSBydGMtY21vcy5vCitvYmotJChDT05GSUdfUlRDX0RSVl9DT0g5MDEzMzEpCSs9IHJ0Yy1jb2g5MDEzMzEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRE0zNTVFVk0pCSs9IHJ0Yy1kbTM1NWV2bS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzEyMTYpCSs9IHJ0Yy1kczEyMTYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMjg2KQkrPSBydGMtZHMxMjg2Lm8KQEAgLTQwLDI0ICs0MiwyNiBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfRUZJKQkrPSBydGMtZWZpLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0VQOTNYWCkJKz0gcnRjLWVwOTN4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9GTTMxMzApCSs9IHJ0Yy1mbTMxMzAubworb2JqLSQoQ09ORklHX1JUQ19EUlZfR0VORVJJQykJKz0gcnRjLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfSVNMMTIwOCkJKz0gcnRjLWlzbDEyMDgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQxVDgwKQkrPSBydGMtbTQxdDgwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX000MVQ5NCkJKz0gcnRjLW00MXQ5NC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUMzUpCSs9IHJ0Yy1tNDh0MzUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDU5KQkrPSBydGMtbTQ4dDU5Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000OFQ4NikJKz0gcnRjLW00OHQ4Ni5vCi1vYmotJChDT05GSUdfUlRDX0RSVl9CUTQ4MDIpCSs9IHJ0Yy1icTQ4MDIubwotb2JqLSQoQ09ORklHX1JUQ19EUlZfU1VONFYpCSs9IHJ0Yy1zdW40di5vCi1vYmotJChDT05GSUdfUlRDX0RSVl9TVEFSRklSRSkJKz0gcnRjLXN0YXJmaXJlLm8KK29iai0kKENPTkZJR19SVENfTVhDKQkJKz0gcnRjLW14Yy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NQVg2OTAwKQkrPSBydGMtbWF4NjkwMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NQVg2OTAyKQkrPSBydGMtbWF4NjkwMi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NVikJKz0gcnRjLW12Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX09NQVApCSs9IHJ0Yy1vbWFwLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BDQVApCSs9IHJ0Yy1wY2FwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjg1NjMpCSs9IHJ0Yy1wY2Y4NTYzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjg1ODMpCSs9IHJ0Yy1wY2Y4NTgzLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BDRjIxMjMpCSs9IHJ0Yy1wY2YyMTIzLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BDRjUwNjMzKQkrPSBydGMtcGNmNTA2MzMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzApCSs9IHJ0Yy1wbDAzMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMSkJKz0gcnRjLXBsMDMxLm8KLW9iai0kKENPTkZJR19SVENfRFJWX0dFTkVSSUMpCSs9IHJ0Yy1nZW5lcmljLm8KK29iai0kKENPTkZJR19SVENfRFJWX1BTMykJKz0gcnRjLXBzMy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QWEEpCSs9IHJ0Yy1weGEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUjk3MDEpCSs9IHJ0Yy1yOTcwMS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9SUzVDMzEzKQkrPSBydGMtcnM1YzMxMy5vCkBAIC02OSw3ICs3MywxMCBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfUzNDKQkrPSBydGMtczNjLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1NBMTEwMCkJKz0gcnRjLXNhMTEwMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9TSCkJKz0gcnRjLXNoLm8KK29iai0kKENPTkZJR19SVENfRFJWX1NUQVJGSVJFKQkrPSBydGMtc3RhcmZpcmUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfU1RLMTdUQTgpCSs9IHJ0Yy1zdGsxN3RhOC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9TVE1QKQkrPSBydGMtc3RtcDN4eHgubworb2JqLSQoQ09ORklHX1JUQ19EUlZfU1VONFYpCSs9IHJ0Yy1zdW40di5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9URVNUKQkrPSBydGMtdGVzdC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9UV0w0MDMwKQkrPSBydGMtdHdsNDAzMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9UWDQ5MzkpCSs9IHJ0Yy10eDQ5MzkubwpAQCAtNzgsNSArODUsMyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfV004MzFYKQkrPSBydGMtd204MzF4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1dNODM1MCkJKz0gcnRjLXdtODM1MC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9YMTIwNSkJKz0gcnRjLXgxMjA1Lm8KLW9iai0kKENPTkZJR19SVENfRFJWX1BDRjUwNjMzKQkrPSBydGMtcGNmNTA2MzMubwotb2JqLSQoQ09ORklHX1JUQ19EUlZfUFMzKQkrPSBydGMtcHMzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IGI1YmY5MzcuLmJjOGJiY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJCQkJCUFUOTFfUlRDX0NBTEVWKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKEFUOTFfSURfU1lTLCBhdDkxX3J0Y19pbnRlcnJ1cHQsCi0JCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAorCQkJCUlSUUZfU0hBUkVELAogCQkJCSJhdDkxX3J0YyIsIHBkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdDkxX3J0YzogSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwKQEAgLTM0MCw3ICszNDAsNyBAQAogCiBzdGF0aWMgdTMyIGF0OTFfcnRjX2ltcjsKIAotc3RhdGljIGludCBhdDkxX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJLyogdGhpcyBJUlEgaXMgc2hhcmVkIHdpdGggREJHVSBhbmQgb3RoZXIgaGFyZHdhcmUgd2hpY2ggaXNuJ3QKIAkgKiBuZWNlc3NhcmlseSBkb2luZyBQTSBsaWtlIHdlIGFyZS4uLgpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJYXQ5MV9ydGNfaW1yID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JUQ19JTVIpCiAJCQkmIChBVDkxX1JUQ19BTEFSTXxBVDkxX1JUQ19TRUNFVik7CiAJaWYgKGF0OTFfcnRjX2ltcikgewotCQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQkJZW5hYmxlX2lycV93YWtlKEFUOTFfSURfU1lTKTsKIAkJZWxzZQogCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBhdDkxX3J0Y19pbXIpOwpAQCAtMzU2LDI4ICszNTYsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdDkxX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAoYXQ5MV9ydGNfaW1yKSB7Ci0JCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCQlkaXNhYmxlX2lycV93YWtlKEFUOTFfSURfU1lTKTsKIAkJZWxzZQogCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBhdDkxX3J0Y19pbXIpOwogCX0KIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGF0OTFfcnRjX3BtID0geworCS5zdXNwZW5kID0JYXQ5MV9ydGNfc3VzcGVuZCwKKwkucmVzdW1lID0JYXQ5MV9ydGNfcmVzdW1lLAorfTsKKworI2RlZmluZSBhdDkxX3J0Y19wbV9wdHIJJmF0OTFfcnRjX3BtCisKICNlbHNlCi0jZGVmaW5lIGF0OTFfcnRjX3N1c3BlbmQgTlVMTAotI2RlZmluZSBhdDkxX3J0Y19yZXN1bWUgIE5VTEwKKyNkZWZpbmUgYXQ5MV9ydGNfcG1fcHRyCU5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxX3J0Y19kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcChhdDkxX3J0Y19yZW1vdmUpLAotCS5zdXNwZW5kCT0gYXQ5MV9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGF0OTFfcnRjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiYXQ5MV9ydGMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gYXQ5MV9ydGNfcG1fcHRyLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jIGIvZHJpdmVycy9ydGMvcnRjLWJmaW4uYwppbmRleCBhMTE4ZWIwLi5iMTE0ODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKQEAgLTM4Myw3ICszODMsNyBAQAogCX0KIAogCS8qIEdyYWIgdGhlIElSUSBhbmQgaW5pdCB0aGUgaGFyZHdhcmUgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfUlRDLCBiZmluX3J0Y19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBwZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9SVEMsIGJmaW5fcnRjX2ludGVycnVwdCwgMCwgcGRldi0+bmFtZSwgZGV2KTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBlcnJfcmVnOwogCS8qIHNvbWV0aW1lcyB0aGUgYm9vdGxvYWRlciB0b3VjaGVkIHRoaW5ncywgYnV0IHRoZSB3cml0ZSBjb21wbGV0ZSB3YXMgbm90CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlMWZhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFJlYWwgVGltZSBDbG9jayBpbnRlcmZhY2UgZm9yIFNULUVyaWNzc29uIEFCIENPSCA5MDEgMzMxIFJUQy4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEJhc2VkIG9uIHJ0Yy1wbDAzMS5jIGJ5IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyoKKyAqIFJlZ2lzdGVycyBpbiB0aGUgQ09IIDkwMSAzMzEKKyAqLworLyogQWxhcm0gdmFsdWUgMzJiaXQgKFIvVykgKi8KKyNkZWZpbmUgQ09IOTAxMzMxX0FMQVJNCQkweDAwVQorLyogVXNlZCB0byBzZXQgY3VycmVudCB0aW1lIDMyYml0IChSL1cpICovCisjZGVmaW5lIENPSDkwMTMzMV9TRVRfVElNRQkweDA0VQorLyogSW5kaWNhdGlvbiBpZiBjdXJyZW50IHRpbWUgaXMgdmFsaWQgMzJiaXQgKFIvLSkgKi8KKyNkZWZpbmUgQ09IOTAxMzMxX1ZBTElECQkweDA4VQorLyogUmVhZCB0aGUgY3VycmVudCB0aW1lIDMyYml0IChSLy0pICovCisjZGVmaW5lIENPSDkwMTMzMV9DVVJfVElNRQkweDBjVQorLyogRXZlbnQgcmVnaXN0ZXIgZm9yIHRoZSAiYWxhcm0iIGludGVycnVwdCAqLworI2RlZmluZSBDT0g5MDEzMzFfSVJRX0VWRU5UCTB4MTBVCisvKiBNYXNrIHJlZ2lzdGVyIGZvciB0aGUgImFsYXJtIiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ09IOTAxMzMxX0lSUV9NQVNLCTB4MTRVCisvKiBGb3JjZSByZWdpc3RlciBmb3IgdGhlICJhbGFybSIgaW50ZXJydXB0ICovCisjZGVmaW5lIENPSDkwMTMzMV9JUlFfRk9SQ0UJMHgxOFUKKworLyoKKyAqIFJlZmVyZW5jZSB0byBSVEMgYmxvY2sgY2xvY2sKKyAqIE5vdGljZSB0aGF0IHRoZSBmcmVxdWVudCBjbGtfZW5hYmxlKCkvY2xrX2Rpc2FibGUoKSBvbiB0aGlzCisgKiBjbG9jayBpcyBtYWlubHkgdG8gYmUgYWJsZSB0byB0dXJuIG9uL29mZiBvdGhlciBjbG9ja3MgaW4gdGhlCisgKiBoaWVyYXJjaHkgYXMgbmVlZGVkLCB0aGUgUlRDIGNsb2NrIGlzIGFsd2F5cyBvbiBhbnl3YXkuCisgKi8KK3N0cnVjdCBjb2g5MDEzMzFfcG9ydCB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdTMyIHBoeWJhc2U7CisJdTMyIHBoeXNpemU7CisJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZTsKKwlpbnQgaXJxOworI2lmZGVmIENPTkZJR19QTQorCXUzMiBpcnFtYXNrc3RvcmU7CisjZW5kaWYKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjb2g5MDEzMzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvaDkwMTMzMV9wb3J0ICpydGFwID0gZGF0YTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwkvKiBBY2sgSVJRICovCisJd3JpdGVsKDEsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9FVkVOVCk7CisJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKwkvKiBTZXQgYWxhcm0gZmxhZyAqLworCXJ0Y191cGRhdGVfaXJxKHJ0YXAtPnJ0YywgMSwgUlRDX0FGKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBjb2g5MDEzMzFfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwkvKiBDaGVjayBpZiB0aGUgdGltZSBpcyB2YWxpZCAqLworCWlmIChyZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9WQUxJRCkpIHsKKwkJcnRjX3RpbWVfdG9fdG0ocmVhZGwocnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfQ1VSX1RJTUUpLCB0bSk7CisJCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisJCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworCX0KKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGNvaDkwMTMzMV9zZXRfbW1zcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgc2VjcykKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwl3cml0ZWwoc2VjcywgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfU0VUX1RJTUUpOworCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2g5MDEzMzFfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwlydGNfdGltZV90b190bShyZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9BTEFSTSksICZhbGFybS0+dGltZSk7CisJYWxhcm0tPnBlbmRpbmcgPSByZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfRVZFTlQpICYgMVU7CisJYWxhcm0tPmVuYWJsZWQgPSByZWFkbChydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSykgJiAxVTsKKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29oOTAxMzMxX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHRpbWU7CisKKwlydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZ0aW1lKTsKKwljbGtfZW5hYmxlKHJ0YXAtPmNsayk7CisJd3JpdGVsKHRpbWUsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0FMQVJNKTsKKwl3cml0ZWwoYWxhcm0tPmVuYWJsZWQsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29oOTAxMzMxX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwlpZiAoZW5hYmxlZCkKKwkJd3JpdGVsKDEsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwllbHNlCisJCXdyaXRlbCgwLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CisJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGNvaDkwMTMzMV9vcHMgPSB7CisJLnJlYWRfdGltZSA9IGNvaDkwMTMzMV9yZWFkX3RpbWUsCisJLnNldF9tbXNzID0gY29oOTAxMzMxX3NldF9tbXNzLAorCS5yZWFkX2FsYXJtID0gY29oOTAxMzMxX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybSA9IGNvaDkwMTMzMV9zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBjb2g5MDEzMzFfYWxhcm1faXJxX2VuYWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19leGl0IGNvaDkwMTMzMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlpZiAocnRhcCkgeworCQlmcmVlX2lycShydGFwLT5pcnEsIHJ0YXApOworCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRhcC0+cnRjKTsKKwkJY2xrX3B1dChydGFwLT5jbGspOworCQlpb3VubWFwKHJ0YXAtPnZpcnRiYXNlKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJ0YXAtPnBoeWJhc2UsIHJ0YXAtPnBoeXNpemUpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJa2ZyZWUocnRhcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgY29oOTAxMzMxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlydGFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvaDkwMTMzMV9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFydGFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBvdXRfbm9fcmVzb3VyY2U7CisJfQorCXJ0YXAtPnBoeWJhc2UgPSByZXMtPnN0YXJ0OworCXJ0YXAtPnBoeXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHJ0YXAtPnBoeWJhc2UsIHJ0YXAtPnBoeXNpemUsCisJCQkgICAgICAgInJ0Yy1jb2g5MDEzMzEiKSA9PSBOVUxMKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfbm9fbWVtcmVnaW9uOworCX0KKworCXJ0YXAtPnZpcnRiYXNlID0gaW9yZW1hcChydGFwLT5waHliYXNlLCBydGFwLT5waHlzaXplKTsKKwlpZiAoIXJ0YXAtPnZpcnRiYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX3JlbWFwOworCX0KKworCXJ0YXAtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJlcXVlc3RfaXJxKHJ0YXAtPmlycSwgY29oOTAxMzMxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKKwkJCSJSVEMgQ09IIDkwMSAzMzEgQWxhcm0iLCBydGFwKSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9ub19pcnE7CisJfQorCisJcnRhcC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJ0YXAtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGFwLT5jbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGNsb2NrXG4iKTsKKwkJZ290byBvdXRfbm9fY2xrOworCX0KKworCS8qIFdlIGVuYWJsZS9kaXNhYmxlIHRoZSBjbG9jayBvbmx5IHRvIGFzc3VyZSBpdCB3b3JrcyAqLworCXJldCA9IGNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBlbmFibGUgY2xvY2tcbiIpOworCQlnb3RvIG91dF9ub19jbGtfZW5hYmxlOworCX0KKwljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcnRhcC0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiY29oOTAxMzMxIiwgJnBkZXYtPmRldiwgJmNvaDkwMTMzMV9vcHMsCisJCQkJCSBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGFwLT5ydGMpKSB7CisJCXJldCA9IFBUUl9FUlIocnRhcC0+cnRjKTsKKwkJZ290byBvdXRfbm9fcnRjOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0YXApOworCisJcmV0dXJuIDA7CisKKyBvdXRfbm9fcnRjOgorIG91dF9ub19jbGtfZW5hYmxlOgorCWNsa19wdXQocnRhcC0+Y2xrKTsKKyBvdXRfbm9fY2xrOgorCWZyZWVfaXJxKHJ0YXAtPmlycSwgcnRhcCk7Cisgb3V0X25vX2lycToKKwlpb3VubWFwKHJ0YXAtPnZpcnRiYXNlKTsKKyBvdXRfbm9fcmVtYXA6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cisgb3V0X25vX21lbXJlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24ocnRhcC0+cGh5YmFzZSwgU1pfNEspOworIG91dF9ub19yZXNvdXJjZToKKwlrZnJlZShydGFwKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGNvaDkwMTMzMV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzMxX3BvcnQgKnJ0YXAgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwkvKgorCSAqIElmIHRoaXMgUlRDIGFsYXJtIHdpbGwgYmUgdXNlZCBmb3Igd2FraW5nIHRoZSBzeXN0ZW0gdXAsCisJICogZG9uJ3QgZGlzYWJsZSBpdCBvZiBjb3Vyc2UuIEVsc2Ugd2UganVzdCBkaXNhYmxlIHRoZSBhbGFybQorCSAqIGFuZCBhd2FpdCBzdXNwZW5zaW9uLgorCSAqLworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgeworCQllbmFibGVfaXJxX3dha2UocnRhcC0+aXJxKTsKKwl9IGVsc2UgeworCQljbGtfZW5hYmxlKHJ0YXAtPmNsayk7CisJCXJ0YXAtPmlycW1hc2tzdG9yZSA9IHJlYWRsKHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwkJd3JpdGVsKDAsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKKwkJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29oOTAxMzMxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjb2g5MDEzMzFfcG9ydCAqcnRhcCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShydGFwLT5pcnEpOworCWVsc2UKKwkJY2xrX2VuYWJsZShydGFwLT5jbGspOworCQl3cml0ZWwocnRhcC0+aXJxbWFza3N0b3JlLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CisJCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBjb2g5MDEzMzFfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGNvaDkwMTMzMV9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNvaDkwMTMzMV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjb2g5MDEzMzFfcG9ydCAqcnRhcCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKKwl3cml0ZWwoMCwgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfSVJRX01BU0spOworCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvaDkwMTMzMV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnRjLWNvaDkwMTMzMSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZXhpdF9wKGNvaDkwMTMzMV9yZW1vdmUpLAorCS5zdXNwZW5kID0gY29oOTAxMzMxX3N1c3BlbmQsCisJLnJlc3VtZSA9IGNvaDkwMTMzMV9yZXN1bWUsCisJLnNodXRkb3duID0gY29oOTAxMzMxX3NodXRkb3duLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY29oOTAxMzMxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjb2g5MDEzMzFfZHJpdmVyLCBjb2g5MDEzMzFfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY29oOTAxMzMxX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29oOTAxMzMxX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNvaDkwMTMzMV9pbml0KTsKK21vZHVsZV9leGl0KGNvaDkwMTMzMV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1QtRXJpY3Nzb24gQUIgQ09IIDkwMSAzMzEgUlRDIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCmluZGV4IDhmNDEwZTUuLjI3MzZiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKQEAgLTg0MSwzICs4NDEsNCBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBkcml2ZXIgZm9yIERTMTMwNSBhbmQgRFMxMzA2IGNoaXBzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpydGMtZHMxMzA1Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKaW5kZXggNDdhOTNjMC4uZWI5OWVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwpAQCAtODk2LDggKzg5Niw3IEBACiAJcmV0dXJuIDA7CiAKIGV4aXRfaXJxOgotCWlmIChkczEzMDctPnJ0YykKLQkJcnRjX2RldmljZV91bnJlZ2lzdGVyKGRzMTMwNy0+cnRjKTsKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZHMxMzA3LT5ydGMpOwogZXhpdF9mcmVlOgogCWtmcmVlKGRzMTMwNyk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzOTAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzOTAuYwppbmRleCBlMDFiOTU1Li5jZGI3MDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzkwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM5MC5jCkBAIC0xODksMyArMTg5LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGFsbGFzL01heGltIERTMTM5MC85My85NCBTUEkgUlRDIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWFyayBKYWNrc29uIDxtcGZqQG1pbWMuY28udWs+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpydGMtZHMxMzkwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMKaW5kZXggYzUxNTg5ZS4uYTc3NGNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzQuYwpAQCAtMTg4LDMgKzE4OCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRTMzIzNCBTUEkgUlRDIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGVubmlzIEFiZXJpbGxhIDxkZW56enpob21lQHlhaG9vLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOmRzMzIzNCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCmluZGV4IDU1MTMzMmUuLjlkYTAyZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKQEAgLTEyOCwxMiArMTI4LDE2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAocmVzID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsX2ZyZWU7CisJfQogCiAJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7Ci0JaWYgKHJlcyA9PSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOworCWlmIChyZXMgPT0gTlVMTCkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9mcmVlOworCX0KIAogCWVwOTN4eF9ydGMtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZXA5M3h4X3J0Yy0+bW1pb19iYXNlID09IE5VTEwpIHsKQEAgLTE2OSw2ICsxNzMsOCBAQAogCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiAJfQogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbF9mcmVlOgorCWtmcmVlKGVwOTN4eF9ydGMpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYwppbmRleCBjM2ExOGM1Li5jOGM5N2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCkBAIC0xNzEsMyArMTcxLDQgQEAKIE1PRFVMRV9BVVRIT1IoIktpbSBCLiBIZWlubyA8S2ltLkhlaW5vQGJsdWVnaWdhLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTVCBNNDFUOTQgU1BJIFJUQyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6cnRjLW00MXQ5NCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKaW5kZXggMzZhOGVhOS4uNjU3NDAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCkBAIC0xNzUsMyArMTc1LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTiAoIm1heDY5MDIgc3BpIFJUQyBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IgKCJSYXBoYWVsIEFzc2VuYXQiKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpydGMtbWF4NjkwMiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jIGIvZHJpdmVycy9ydGMvcnRjLW14Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZDUwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBSVENfSU5QVVRfQ0xLXzMyNzY4SFoJKDB4MDAgPDwgNSkKKyNkZWZpbmUgUlRDX0lOUFVUX0NMS18zMjAwMEhaCSgweDAxIDw8IDUpCisjZGVmaW5lIFJUQ19JTlBVVF9DTEtfMzg0MDBIWgkoMHgwMiA8PCA1KQorCisjZGVmaW5lIFJUQ19TV19CSVQgICAgICAoMSA8PCAwKQorI2RlZmluZSBSVENfQUxNX0JJVCAgICAgKDEgPDwgMikKKyNkZWZpbmUgUlRDXzFIWl9CSVQgICAgICgxIDw8IDQpCisjZGVmaW5lIFJUQ18ySFpfQklUICAgICAoMSA8PCA3KQorI2RlZmluZSBSVENfU0FNMF9CSVQgICAgKDEgPDwgOCkKKyNkZWZpbmUgUlRDX1NBTTFfQklUICAgICgxIDw8IDkpCisjZGVmaW5lIFJUQ19TQU0yX0JJVCAgICAoMSA8PCAxMCkKKyNkZWZpbmUgUlRDX1NBTTNfQklUICAgICgxIDw8IDExKQorI2RlZmluZSBSVENfU0FNNF9CSVQgICAgKDEgPDwgMTIpCisjZGVmaW5lIFJUQ19TQU01X0JJVCAgICAoMSA8PCAxMykKKyNkZWZpbmUgUlRDX1NBTTZfQklUICAgICgxIDw8IDE0KQorI2RlZmluZSBSVENfU0FNN19CSVQgICAgKDEgPDwgMTUpCisjZGVmaW5lIFBJVF9BTExfT04gICAgICAoUlRDXzJIWl9CSVQgfCBSVENfU0FNMF9CSVQgfCBSVENfU0FNMV9CSVQgfCBcCisJCQkgUlRDX1NBTTJfQklUIHwgUlRDX1NBTTNfQklUIHwgUlRDX1NBTTRfQklUIHwgXAorCQkJIFJUQ19TQU01X0JJVCB8IFJUQ19TQU02X0JJVCB8IFJUQ19TQU03X0JJVCkKKworI2RlZmluZSBSVENfRU5BQkxFX0JJVCAgKDEgPDwgNykKKworI2RlZmluZSBNQVhfUElFX05VTSAgICAgOQorI2RlZmluZSBNQVhfUElFX0ZSRVEgICAgNTEyCitzdGF0aWMgY29uc3QgdTMyIFBJRV9CSVRfREVGW01BWF9QSUVfTlVNXVsyXSA9IHsKKwl7IDIsCQlSVENfMkhaX0JJVCB9LAorCXsgNCwJCVJUQ19TQU0wX0JJVCB9LAorCXsgOCwJCVJUQ19TQU0xX0JJVCB9LAorCXsgMTYsCQlSVENfU0FNMl9CSVQgfSwKKwl7IDMyLAkJUlRDX1NBTTNfQklUIH0sCisJeyA2NCwJCVJUQ19TQU00X0JJVCB9LAorCXsgMTI4LAkJUlRDX1NBTTVfQklUIH0sCisJeyAyNTYsCQlSVENfU0FNNl9CSVQgfSwKKwl7IE1BWF9QSUVfRlJFUSwJUlRDX1NBTTdfQklUIH0sCit9OworCisvKiBUaG9zZSBhcmUgdGhlIGJpdHMgZnJvbSBhIGNsYXNzaWMgUlRDIHdlIHdhbnQgdG8gbWltaWMgKi8KKyNkZWZpbmUgUlRDX0lSUUYJMHg4MAkvKiBhbnkgb2YgdGhlIGZvbGxvd2luZyAzIGlzIGFjdGl2ZSAqLworI2RlZmluZSBSVENfUEYJCTB4NDAJLyogUGVyaW9kaWMgaW50ZXJydXB0ICovCisjZGVmaW5lIFJUQ19BRgkJMHgyMAkvKiBBbGFybSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUlRDX1VGCQkweDEwCS8qIFVwZGF0ZSBpbnRlcnJ1cHQgZm9yIDFIeiBSVEMgKi8KKworI2RlZmluZSBNWENfUlRDX1RJTUUJMAorI2RlZmluZSBNWENfUlRDX0FMQVJNCTEKKworI2RlZmluZSBSVENfSE9VUk1JTgkweDAwCS8qICAzMmJpdCBydGMgaG91ci9taW4gY291bnRlciByZWcgKi8KKyNkZWZpbmUgUlRDX1NFQ09ORAkweDA0CS8qICAzMmJpdCBydGMgc2Vjb25kcyBjb3VudGVyIHJlZyAqLworI2RlZmluZSBSVENfQUxSTV9ITQkweDA4CS8qICAzMmJpdCBydGMgYWxhcm0gaG91ci9taW4gcmVnICovCisjZGVmaW5lIFJUQ19BTFJNX1NFQwkweDBDCS8qICAzMmJpdCBydGMgYWxhcm0gc2Vjb25kcyByZWcgKi8KKyNkZWZpbmUgUlRDX1JUQ0NUTAkweDEwCS8qICAzMmJpdCBydGMgY29udHJvbCByZWcgKi8KKyNkZWZpbmUgUlRDX1JUQ0lTUgkweDE0CS8qICAzMmJpdCBydGMgaW50ZXJydXB0IHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgUlRDX1JUQ0lFTlIJMHgxOAkvKiAgMzJiaXQgcnRjIGludGVycnVwdCBlbmFibGUgcmVnICovCisjZGVmaW5lIFJUQ19TVFBXQ0gJMHgxQwkvKiAgMzJiaXQgcnRjIHN0b3B3YXRjaCBtaW4gcmVnICovCisjZGVmaW5lIFJUQ19EQVlSCTB4MjAJLyogIDMyYml0IHJ0YyBkYXlzIGNvdW50ZXIgcmVnICovCisjZGVmaW5lIFJUQ19EQVlBTEFSTQkweDI0CS8qICAzMmJpdCBydGMgZGF5IGFsYXJtIHJlZyAqLworI2RlZmluZSBSVENfVEVTVDEJMHgyOAkvKiAgMzJiaXQgcnRjIHRlc3QgcmVnIDEgKi8KKyNkZWZpbmUgUlRDX1RFU1QyCTB4MkMJLyogIDMyYml0IHJ0YyB0ZXN0IHJlZyAyICovCisjZGVmaW5lIFJUQ19URVNUMwkweDMwCS8qICAzMmJpdCBydGMgdGVzdCByZWcgMyAqLworCitzdHJ1Y3QgcnRjX3BsYXRfZGF0YSB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBpbnQgaXJxZW47CisJaW50IGFscm1fc2VjOworCWludCBhbHJtX21pbjsKKwlpbnQgYWxybV9ob3VyOworCWludCBhbHJtX21kYXk7CisJc3RydWN0IHRpbWVzcGVjIG14Y19ydGNfZGVsdGE7CisJc3RydWN0IHJ0Y190aW1lIGdfcnRjX2FsYXJtOworfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBvYnRhaW4gdGhlIFJUQyB0aW1lIG9yIHRoZSBhbGFybSB2YWx1ZSBpbgorICogc2Vjb25kLgorICovCitzdGF0aWMgdTMyIGdldF9hbGFybV9vcl90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHRpbWVfYWxhcm0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKwl1MzIgZGF5ID0gMCwgaHIgPSAwLCBtaW4gPSAwLCBzZWMgPSAwLCBocl9taW4gPSAwOworCisJc3dpdGNoICh0aW1lX2FsYXJtKSB7CisJY2FzZSBNWENfUlRDX1RJTUU6CisJCWRheSA9IHJlYWR3KGlvYWRkciArIFJUQ19EQVlSKTsKKwkJaHJfbWluID0gcmVhZHcoaW9hZGRyICsgUlRDX0hPVVJNSU4pOworCQlzZWMgPSByZWFkdyhpb2FkZHIgKyBSVENfU0VDT05EKTsKKwkJYnJlYWs7CisJY2FzZSBNWENfUlRDX0FMQVJNOgorCQlkYXkgPSByZWFkdyhpb2FkZHIgKyBSVENfREFZQUxBUk0pOworCQlocl9taW4gPSByZWFkdyhpb2FkZHIgKyBSVENfQUxSTV9ITSkgJiAweGZmZmY7CisJCXNlYyA9IHJlYWR3KGlvYWRkciArIFJUQ19BTFJNX1NFQyk7CisJCWJyZWFrOworCX0KKworCWhyID0gaHJfbWluID4+IDg7CisJbWluID0gaHJfbWluICYgMHhmZjsKKworCXJldHVybiAoKChkYXkgKiAyNCArIGhyKSAqIDYwKSArIG1pbikgKiA2MCArIHNlYzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUlRDIGFsYXJtIHZhbHVlIG9yIHRoZSB0aW1lIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBzZXRfYWxhcm1fb3JfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCB0aW1lX2FsYXJtLCB1MzIgdGltZSkKK3sKKwl1MzIgZGF5LCBociwgbWluLCBzZWMsIHRlbXA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKworCWRheSA9IHRpbWUgLyA4NjQwMDsKKwl0aW1lIC09IGRheSAqIDg2NDAwOworCisJLyogdGltZSBpcyB3aXRoaW4gYSBkYXkgbm93ICovCisJaHIgPSB0aW1lIC8gMzYwMDsKKwl0aW1lIC09IGhyICogMzYwMDsKKworCS8qIHRpbWUgaXMgd2l0aGluIGFuIGhvdXIgbm93ICovCisJbWluID0gdGltZSAvIDYwOworCXNlYyA9IHRpbWUgLSBtaW4gKiA2MDsKKworCXRlbXAgPSAoaHIgPDwgOCkgKyBtaW47CisKKwlzd2l0Y2ggKHRpbWVfYWxhcm0pIHsKKwljYXNlIE1YQ19SVENfVElNRToKKwkJd3JpdGV3KGRheSwgaW9hZGRyICsgUlRDX0RBWVIpOworCQl3cml0ZXcoc2VjLCBpb2FkZHIgKyBSVENfU0VDT05EKTsKKwkJd3JpdGV3KHRlbXAsIGlvYWRkciArIFJUQ19IT1VSTUlOKTsKKwkJYnJlYWs7CisJY2FzZSBNWENfUlRDX0FMQVJNOgorCQl3cml0ZXcoZGF5LCBpb2FkZHIgKyBSVENfREFZQUxBUk0pOworCQl3cml0ZXcoc2VjLCBpb2FkZHIgKyBSVENfQUxSTV9TRUMpOworCQl3cml0ZXcodGVtcCwgaW9hZGRyICsgUlRDX0FMUk1fSE0pOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIFJUQyBhbGFybSByZWdpc3RlcnMgYW5kIHRoZW4gY2xlYXJzIGFsbCB0aGUKKyAqIGludGVycnVwdCBzdGF0dXMgYml0cy4KKyAqLworc3RhdGljIGludCBydGNfdXBkYXRlX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICphbHJtKQoreworCXN0cnVjdCBydGNfdGltZSBhbGFybV90bSwgbm93X3RtOworCXVuc2lnbmVkIGxvbmcgbm93LCB0aW1lOworCWludCByZXQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKworCW5vdyA9IGdldF9hbGFybV9vcl90aW1lKGRldiwgTVhDX1JUQ19USU1FKTsKKwlydGNfdGltZV90b190bShub3csICZub3dfdG0pOworCWFsYXJtX3RtLnRtX3llYXIgPSBub3dfdG0udG1feWVhcjsKKwlhbGFybV90bS50bV9tb24gPSBub3dfdG0udG1fbW9uOworCWFsYXJtX3RtLnRtX21kYXkgPSBub3dfdG0udG1fbWRheTsKKwlhbGFybV90bS50bV9ob3VyID0gYWxybS0+dG1faG91cjsKKwlhbGFybV90bS50bV9taW4gPSBhbHJtLT50bV9taW47CisJYWxhcm1fdG0udG1fc2VjID0gYWxybS0+dG1fc2VjOworCXJ0Y190bV90b190aW1lKCZub3dfdG0sICZub3cpOworCXJ0Y190bV90b190aW1lKCZhbGFybV90bSwgJnRpbWUpOworCisJaWYgKHRpbWUgPCBub3cpIHsKKwkJdGltZSArPSA2MCAqIDYwICogMjQ7CisJCXJ0Y190aW1lX3RvX3RtKHRpbWUsICZhbGFybV90bSk7CisJfQorCisJcmV0ID0gcnRjX3RtX3RvX3RpbWUoJmFsYXJtX3RtLCAmdGltZSk7CisKKwkvKiBjbGVhciBhbGwgdGhlIGludGVycnVwdCBzdGF0dXMgYml0cyAqLworCXdyaXRldyhyZWFkdyhpb2FkZHIgKyBSVENfUlRDSVNSKSwgaW9hZGRyICsgUlRDX1JUQ0lTUik7CisJc2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX0FMQVJNLCB0aW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFJUQyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLiAqLworc3RhdGljIGlycXJldHVybl90IG14Y19ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2X2lkOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKwl1MzIgc3RhdHVzOworCXUzMiBldmVudHMgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXN0YXR1cyA9IHJlYWR3KGlvYWRkciArIFJUQ19SVENJU1IpICYgcmVhZHcoaW9hZGRyICsgUlRDX1JUQ0lFTlIpOworCS8qIGNsZWFyIGludGVycnVwdCBzb3VyY2VzICovCisJd3JpdGV3KHN0YXR1cywgaW9hZGRyICsgUlRDX1JUQ0lTUik7CisKKwkvKiBjbGVhciBhbGFybSBpbnRlcnJ1cHQgaWYgaXQgaGFzIG9jY3VycmVkICovCisJaWYgKHN0YXR1cyAmIFJUQ19BTE1fQklUKQorCQlzdGF0dXMgJj0gflJUQ19BTE1fQklUOworCisJLyogdXBkYXRlIGlycSBkYXRhICYgY291bnRlciAqLworCWlmIChzdGF0dXMgJiBSVENfQUxNX0JJVCkKKwkJZXZlbnRzIHw9IChSVENfQUYgfCBSVENfSVJRRik7CisKKwlpZiAoc3RhdHVzICYgUlRDXzFIWl9CSVQpCisJCWV2ZW50cyB8PSAoUlRDX1VGIHwgUlRDX0lSUUYpOworCisJaWYgKHN0YXR1cyAmIFBJVF9BTExfT04pCisJCWV2ZW50cyB8PSAoUlRDX1BGIHwgUlRDX0lSUUYpOworCisJaWYgKChzdGF0dXMgJiBSVENfQUxNX0JJVCkgJiYgcnRjX3ZhbGlkX3RtKCZwZGF0YS0+Z19ydGNfYWxhcm0pKQorCQlydGNfdXBkYXRlX2FsYXJtKCZwZGV2LT5kZXYsICZwZGF0YS0+Z19ydGNfYWxhcm0pOworCisJcnRjX3VwZGF0ZV9pcnEocGRhdGEtPnJ0YywgMSwgZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIENsZWFyIGFsbCBpbnRlcnJ1cHRzIGFuZCByZWxlYXNlIHRoZSBJUlEKKyAqLworc3RhdGljIHZvaWQgbXhjX3J0Y19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCisJLyogRGlzYWJsZSBhbGwgcnRjIGludGVycnVwdHMgKi8KKwl3cml0ZXcoMCwgaW9hZGRyICsgUlRDX1JUQ0lFTlIpOworCisJLyogQ2xlYXIgYWxsIGludGVycnVwdCBzdGF0dXMgKi8KKwl3cml0ZXcoMHhmZmZmZmZmZiwgaW9hZGRyICsgUlRDX1JUQ0lTUik7CisKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXhjX3J0Y19pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGJpdCwKKwkJCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyOworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJcmVnID0gcmVhZHcoaW9hZGRyICsgUlRDX1JUQ0lFTlIpOworCisJaWYgKGVuYWJsZWQpCisJCXJlZyB8PSBiaXQ7CisJZWxzZQorCQlyZWcgJj0gfmJpdDsKKworCXdyaXRldyhyZWcsIGlvYWRkciArIFJUQ19SVENJRU5SKTsKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKK30KKworc3RhdGljIGludCBteGNfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlteGNfcnRjX2lycV9lbmFibGUoZGV2LCBSVENfQUxNX0JJVCwgZW5hYmxlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhjX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCW14Y19ydGNfaXJxX2VuYWJsZShkZXYsIFJUQ18xSFpfQklULCBlbmFibGVkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGN1cnJlbnQgUlRDIHRpbWUgaW50byB0bSBpbiBHcmVnb3JpYW4gZGF0ZS4KKyAqLworc3RhdGljIGludCBteGNfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdTMyIHZhbDsKKworCS8qIEF2b2lkIHJvbGwtb3ZlciBmcm9tIHJlYWRpbmcgdGhlIGRpZmZlcmVudCByZWdpc3RlcnMgKi8KKwlkbyB7CisJCXZhbCA9IGdldF9hbGFybV9vcl90aW1lKGRldiwgTVhDX1JUQ19USU1FKTsKKwl9IHdoaWxlICh2YWwgIT0gZ2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX1RJTUUpKTsKKworCXJ0Y190aW1lX3RvX3RtKHZhbCwgdG0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGludGVybmFsIFJUQyB0aW1lIGJhc2VkIG9uIHRtIGluIEdyZWdvcmlhbiBkYXRlLgorICovCitzdGF0aWMgaW50IG14Y19ydGNfc2V0X21tc3Moc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHRpbWUpCit7CisJLyogQXZvaWQgcm9sbC1vdmVyIGZyb20gcmVhZGluZyB0aGUgZGlmZmVyZW50IHJlZ2lzdGVycyAqLworCWRvIHsKKwkJc2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX1RJTUUsIHRpbWUpOworCX0gd2hpbGUgKHRpbWUgIT0gZ2V0X2FsYXJtX29yX3RpbWUoZGV2LCBNWENfUlRDX1RJTUUpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgY3VycmVudCBhbGFybSB2YWx1ZSBpbnRvIHRoZSBwYXNzZWQgaW4gJ2Fscm0nCisgKiBhcmd1bWVudC4gSXQgdXBkYXRlcyB0aGUgYWxybSdzIHBlbmRpbmcgZmllbGQgdmFsdWUgYmFzZWQgb24gdGhlIHdoZXRoZXIKKyAqIGFuIGFsYXJtIGludGVycnVwdCBvY2N1cnMgb3Igbm90LgorICovCitzdGF0aWMgaW50IG14Y19ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CisKKwlydGNfdGltZV90b190bShnZXRfYWxhcm1fb3JfdGltZShkZXYsIE1YQ19SVENfQUxBUk0pLCAmYWxybS0+dGltZSk7CisJYWxybS0+cGVuZGluZyA9ICgocmVhZHcoaW9hZGRyICsgUlRDX1JUQ0lTUikgJiBSVENfQUxNX0JJVCkpID8gMSA6IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUlRDIGFsYXJtIGJhc2VkIG9uIHBhc3NlZCBpbiBhbHJtLgorICovCitzdGF0aWMgaW50IG14Y19ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlpZiAocnRjX3ZhbGlkX3RtKCZhbHJtLT50aW1lKSkgeworCQlpZiAoYWxybS0+dGltZS50bV9zZWMgPiA1OSB8fAorCQkgICAgYWxybS0+dGltZS50bV9ob3VyID4gMjMgfHwKKwkJICAgIGFscm0tPnRpbWUudG1fbWluID4gNTkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSBydGNfdXBkYXRlX2FsYXJtKGRldiwgJmFscm0tPnRpbWUpOworCX0gZWxzZSB7CisJCXJldCA9IHJ0Y192YWxpZF90bSgmYWxybS0+dGltZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHJ0Y191cGRhdGVfYWxhcm0oZGV2LCAmYWxybS0+dGltZSk7CisJfQorCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1lbWNweSgmcGRhdGEtPmdfcnRjX2FsYXJtLCAmYWxybS0+dGltZSwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOworCW14Y19ydGNfaXJxX2VuYWJsZShkZXYsIFJUQ19BTE1fQklULCBhbHJtLT5lbmFibGVkKTsKKworCXJldHVybiAwOworfQorCisvKiBSVEMgbGF5ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBteGNfcnRjX29wcyA9IHsKKwkucmVsZWFzZQkJPSBteGNfcnRjX3JlbGVhc2UsCisJLnJlYWRfdGltZQkJPSBteGNfcnRjX3JlYWRfdGltZSwKKwkuc2V0X21tc3MJCT0gbXhjX3J0Y19zZXRfbW1zcywKKwkucmVhZF9hbGFybQkJPSBteGNfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQkJPSBteGNfcnRjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZQk9IG14Y19ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUJPSBteGNfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhjX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IE5VTEw7CisJdTMyIHJlZzsKKwlpbnQgcmV0LCByYXRlOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcGRhdGEtPmlvYWRkciA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImNraWwiKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJY2xrX3B1dChjbGspOworCisJaWYgKHJhdGUgPT0gMzI3NjgpCisJCXJlZyA9IFJUQ19JTlBVVF9DTEtfMzI3NjhIWjsKKwllbHNlIGlmIChyYXRlID09IDMyMDAwKQorCQlyZWcgPSBSVENfSU5QVVRfQ0xLXzMyMDAwSFo7CisJZWxzZSBpZiAocmF0ZSA9PSAzODQwMCkKKwkJcmVnID0gUlRDX0lOUFVUX0NMS18zODQwMEhaOworCWVsc2UgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJydGMgY2xvY2sgaXMgbm90IHZhbGlkICglbHUpXG4iLAorCQkJY2xrX2dldF9yYXRlKGNsaykpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXRfZnJlZV9wZGF0YTsKKwl9CisKKwlyZWcgfD0gUlRDX0VOQUJMRV9CSVQ7CisJd3JpdGV3KHJlZywgKHBkYXRhLT5pb2FkZHIgKyBSVENfUlRDQ1RMKSk7CisJaWYgKCgocmVhZHcocGRhdGEtPmlvYWRkciArIFJUQ19SVENDVEwpKSAmIFJUQ19FTkFCTEVfQklUKSA9PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImhhcmR3YXJlIG1vZHVsZSBjYW4ndCBiZSBlbmFibGVkIVxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdF9mcmVlX3BkYXRhOworCX0KKworCXBkYXRhLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJydGMiKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgY2xvY2shXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+Y2xrKTsKKwkJZ290byBleGl0X2ZyZWVfcGRhdGE7CisJfQorCisJY2xrX2VuYWJsZShwZGF0YS0+Y2xrKTsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgJnBkZXYtPmRldiwgJm14Y19ydGNfb3BzLAorCQkJCSAgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7CisJCWdvdG8gZXhpdF9wdXRfY2xrOworCX0KKworCXBkYXRhLT5ydGMgPSBydGM7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOworCisJLyogQ29uZmlndXJlIGFuZCBlbmFibGUgdGhlIFJUQyAqLworCXBkYXRhLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJaWYgKHBkYXRhLT5pcnEgPj0gMCAmJgorCSAgICByZXF1ZXN0X2lycShwZGF0YS0+aXJxLCBteGNfcnRjX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQlwZGV2LT5uYW1lLCBwZGV2KSA8IDApIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImludGVycnVwdCBub3QgYXZhaWxhYmxlLlxuIik7CisJCXBkYXRhLT5pcnEgPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9wdXRfY2xrOgorCWNsa19wdXQocGRhdGEtPmNsayk7CisKK2V4aXRfZnJlZV9wZGF0YToKKwlrZnJlZShwZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBteGNfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOworCisJaWYgKHBkYXRhLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEocGRhdGEtPmlycSwgcGRldik7CisKKwljbGtfZGlzYWJsZShwZGF0YS0+Y2xrKTsKKwljbGtfcHV0KHBkYXRhLT5jbGspOworCWtmcmVlKHBkYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZQk9ICJteGNfcnRjIiwKKwkJICAgLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG14Y19ydGNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y19ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm14Y19ydGNfZHJpdmVyLCBteGNfcnRjX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14Y19ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteGNfcnRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG14Y19ydGNfaW5pdCk7Cittb2R1bGVfZXhpdChteGNfcnRjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSVEMgZHJpdmVyIGZvciBGcmVlc2NhbGUgTVhDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCmluZGV4IGJkMWNlOGUuLjA1ODdkNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtNDMwLDcgKzQzMCw3IEBACiAKIHN0YXRpYyBpbnQgX19leGl0IG9tYXBfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTs7CisJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNhcC5jIGIvZHJpdmVycy9ydGMvcnRjLXBjYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTljMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjYXAuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqICBwY2FwIHJ0YyBjb2RlIGZvciBNb3Rvcm9sYSBFWlggcGhvbmVzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBndWltaW5nIHpodW8gPGdtemh1b0BnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBSaWJlaXJvIDxkcnd5cm1AZ21haWwuY29tPgorICoKKyAqICBCYXNlZCBvbiBNb3Rvcm9sYSdzIHJ0Yy5jIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IE1vdG9yb2xhCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZXp4LXBjYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworc3RydWN0IHBjYXBfcnRjIHsKKwlzdHJ1Y3QgcGNhcF9jaGlwICpwY2FwOworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNhcF9ydGNfaXJxKGludCBpcnEsIHZvaWQgKl9wY2FwX3J0YykKK3sKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gX3BjYXBfcnRjOworCXVuc2lnbmVkIGxvbmcgcnRjX2V2ZW50czsKKworCWlmIChpcnEgPT0gcGNhcF90b19pcnEocGNhcF9ydGMtPnBjYXAsIFBDQVBfSVJRXzFIWikpCisJCXJ0Y19ldmVudHMgPSBSVENfSVJRRiB8IFJUQ19VRjsKKwllbHNlIGlmIChpcnEgPT0gcGNhcF90b19pcnEocGNhcF9ydGMtPnBjYXAsIFBDQVBfSVJRX1RPREEpKQorCQlydGNfZXZlbnRzID0gUlRDX0lSUUYgfCBSVENfQUY7CisJZWxzZQorCQlydGNfZXZlbnRzID0gMDsKKworCXJ0Y191cGRhdGVfaXJxKHBjYXBfcnRjLT5ydGMsIDEsIHJ0Y19ldmVudHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBwY2FwX3J0YyAqcGNhcF9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcnRjX3RpbWUgKnRtID0gJmFscm0tPnRpbWU7CisJdW5zaWduZWQgbG9uZyBzZWNzOworCXUzMiB0b2Q7CS8qIHRpbWUgb2YgZGF5LCBzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0ICovCisJdTMyIGRheXM7CS8qIGRheXMgc2luY2UgMS8xLzE5NzAgKi8KKworCWV6eF9wY2FwX3JlYWQocGNhcF9ydGMtPnBjYXAsIFBDQVBfUkVHX1JUQ19UT0RBLCAmdG9kKTsKKwlzZWNzID0gdG9kICYgUENBUF9SVENfVE9EX01BU0s7CisKKwllenhfcGNhcF9yZWFkKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfREFZQSwgJmRheXMpOworCXNlY3MgKz0gKGRheXMgJiBQQ0FQX1JUQ19EQVlfTUFTSykgKiBTRUNfUEVSX0RBWTsKKworCXJ0Y190aW1lX3RvX3RtKHNlY3MsIHRtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjYXBfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJ0Y190aW1lICp0bSA9ICZhbHJtLT50aW1lOworCXVuc2lnbmVkIGxvbmcgc2VjczsKKwl1MzIgdG9kLCBkYXlzOworCisJcnRjX3RtX3RvX3RpbWUodG0sICZzZWNzKTsKKworCXRvZCA9IHNlY3MgJSBTRUNfUEVSX0RBWTsKKwllenhfcGNhcF93cml0ZShwY2FwX3J0Yy0+cGNhcCwgUENBUF9SRUdfUlRDX1RPREEsIHRvZCk7CisKKwlkYXlzID0gc2VjcyAvIFNFQ19QRVJfREFZOworCWV6eF9wY2FwX3dyaXRlKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfREFZQSwgZGF5cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgbG9uZyBzZWNzOworCXUzMiB0b2QsIGRheXM7CisKKwllenhfcGNhcF9yZWFkKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfVE9ELCAmdG9kKTsKKwlzZWNzID0gdG9kICYgUENBUF9SVENfVE9EX01BU0s7CisKKwllenhfcGNhcF9yZWFkKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfREFZLCAmZGF5cyk7CisJc2VjcyArPSAoZGF5cyAmIFBDQVBfUlRDX0RBWV9NQVNLKSAqIFNFQ19QRVJfREFZOworCisJcnRjX3RpbWVfdG9fdG0oc2VjcywgdG0pOworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgcGNhcF9ydGNfc2V0X21tc3Moc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHNlY3MpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBwY2FwX3J0YyAqcGNhcF9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1MzIgdG9kLCBkYXlzOworCisJdG9kID0gc2VjcyAlIFNFQ19QRVJfREFZOworCWV6eF9wY2FwX3dyaXRlKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX1JFR19SVENfVE9ELCB0b2QpOworCisJZGF5cyA9IHNlY3MgLyBTRUNfUEVSX0RBWTsKKwllenhfcGNhcF93cml0ZShwY2FwX3J0Yy0+cGNhcCwgUENBUF9SRUdfUlRDX0RBWSwgZGF5cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y19pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBpcnEsIHVuc2lnbmVkIGludCBlbikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHBjYXBfcnRjICpwY2FwX3J0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGVuKQorCQllbmFibGVfaXJxKHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBwaXJxKSk7CisJZWxzZQorCQlkaXNhYmxlX2lycShwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgcGlycSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNhcF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbikKK3sKKwlyZXR1cm4gcGNhcF9ydGNfaXJxX2VuYWJsZShkZXYsIFBDQVBfSVJRX1RPREEsIGVuKTsKK30KKworc3RhdGljIGludCBwY2FwX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbikKK3sKKwlyZXR1cm4gcGNhcF9ydGNfaXJxX2VuYWJsZShkZXYsIFBDQVBfSVJRXzFIWiwgZW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGNhcF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBwY2FwX3J0Y19yZWFkX3RpbWUsCisJLnJlYWRfYWxhcm0gPSBwY2FwX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBwY2FwX3J0Y19zZXRfYWxhcm0sCisJLnNldF9tbXNzID0gcGNhcF9ydGNfc2V0X21tc3MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBwY2FwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAorCS51cGRhdGVfaXJxX2VuYWJsZSA9IHBjYXBfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcGNhcF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjOworCWludCB0aW1lcl9pcnEsIGFsYXJtX2lycTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXBjYXBfcnRjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjYXBfcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2FwX3J0YykKKwkJcmV0dXJuIGVycjsKKworCXBjYXBfcnRjLT5wY2FwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCisJcGNhcF9ydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBjYXAiLCAmcGRldi0+ZGV2LAorCQkJCSAgJnBjYXBfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocGNhcF9ydGMtPnJ0YykpIHsKKwkJZXJyID0gUFRSX0VSUihwY2FwX3J0Yy0+cnRjKTsKKwkJZ290byBmYWlsX3J0YzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwY2FwX3J0Yyk7CisKKwl0aW1lcl9pcnEgPSBwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgUENBUF9JUlFfMUhaKTsKKwlhbGFybV9pcnEgPSBwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgUENBUF9JUlFfVE9EQSk7CisKKwllcnIgPSByZXF1ZXN0X2lycSh0aW1lcl9pcnEsIHBjYXBfcnRjX2lycSwgMCwgIlJUQyBUaW1lciIsIHBjYXBfcnRjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfdGltZXI7CisKKwllcnIgPSByZXF1ZXN0X2lycShhbGFybV9pcnEsIHBjYXBfcnRjX2lycSwgMCwgIlJUQyBBbGFybSIsIHBjYXBfcnRjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfYWxhcm07CisKKwlyZXR1cm4gMDsKK2ZhaWxfYWxhcm06CisJZnJlZV9pcnEodGltZXJfaXJxLCBwY2FwX3J0Yyk7CitmYWlsX3RpbWVyOgorCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwY2FwX3J0Yy0+cnRjKTsKK2ZhaWxfcnRjOgorCWtmcmVlKHBjYXBfcnRjKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwY2FwX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGNhcF9ydGMgKnBjYXBfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlmcmVlX2lycShwY2FwX3RvX2lycShwY2FwX3J0Yy0+cGNhcCwgUENBUF9JUlFfMUhaKSwgcGNhcF9ydGMpOworCWZyZWVfaXJxKHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV9UT0RBKSwgcGNhcF9ydGMpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwY2FwX3J0Yy0+cnRjKTsKKwlrZnJlZShwY2FwX3J0Yyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNhcF9ydGNfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2RldmV4aXRfcChwY2FwX3J0Y19yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lICA9ICJwY2FwLXJ0YyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBydGNfcGNhcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmcGNhcF9ydGNfZHJpdmVyLCBwY2FwX3J0Y19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBydGNfcGNhcF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjYXBfcnRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJ0Y19wY2FwX2luaXQpOworbW9kdWxlX2V4aXQocnRjX3BjYXBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTW90b3JvbGEgcGNhcCBydGMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJndWltaW5nIHpodW8gPGdtemh1b0BnbWFpbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmMjEyMy5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjIxMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzVkZjlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjIxMjMuYwpAQCAtMCwwICsxLDM2NCBAQAorLyoKKyAqIEFuIFNQSSBkcml2ZXIgZm9yIHRoZSBQaGlsaXBzIFBDRjIxMjMgUlRDCisgKiBDb3B5cmlnaHQgMjAwOSBDeWJlciBTd2l0Y2hpbmcsIEluYy4KKyAqCisgKiBBdXRob3I6IENocmlzIFZlcmdlcyA8Y2hyaXN2QGN5YmVyc3dpdGNoaW5nLmNvbT4KKyAqIE1haW50YWluZXJzOiBodHRwOi8vd3d3LmN5YmVyc3dpdGNoaW5nLmNvbQorICoKKyAqIGJhc2VkIG9uIHRoZSBSUzVDMzQ4IGRyaXZlciBpbiB0aGlzIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIFRoYW5rcyB0byBDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpcGVsbEBmc2ZlLm9yZz4gZm9yCisgKiB0aGUgc3lzZnMgY29udHJpYnV0aW9ucyB0byB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIENTIGlzIGFjdGl2ZSBoaWdoLCBzbyBwbGF0Zm9ybSBkYXRhCisgKiBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZToKKyAqCisgKiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7CisgKiAJLi4uCisgKiAJeworICogCQkubW9kYWxpYXMJCT0gInJ0Yy1wY2YyMTIzIiwKKyAqIAkJLmNoaXBfc2VsZWN0CQk9IDEsCisgKiAJCS5jb250cm9sbGVyX2RhdGEJPSAodm9pZCAqKUFUOTFfUElOX1BBMTAsCisgKgkJLm1heF9zcGVlZF9oegkJPSAxMDAwICogMTAwMCwKKyAqCQkubW9kZQkJCT0gU1BJX0NTX0hJR0gsCisgKgkJLmJ1c19udW0JCT0gMCwKKyAqCX0sCisgKgkuLi4KKyAqfTsKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjYiCisKKyNkZWZpbmUgUENGMjEyM19SRUdfQ1RSTDEJKDB4MDApCS8qIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBQQ0YyMTIzX1JFR19DVFJMMgkoMHgwMSkJLyogQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFBDRjIxMjNfUkVHX1NDCQkoMHgwMikJLyogZGF0ZXRpbWUgKi8KKyNkZWZpbmUgUENGMjEyM19SRUdfTU4JCSgweDAzKQorI2RlZmluZSBQQ0YyMTIzX1JFR19IUgkJKDB4MDQpCisjZGVmaW5lIFBDRjIxMjNfUkVHX0RNCQkoMHgwNSkKKyNkZWZpbmUgUENGMjEyM19SRUdfRFcJCSgweDA2KQorI2RlZmluZSBQQ0YyMTIzX1JFR19NTwkJKDB4MDcpCisjZGVmaW5lIFBDRjIxMjNfUkVHX1lSCQkoMHgwOCkKKworI2RlZmluZSBQQ0YyMTIzX1NVQkFERFIJCSgxIDw8IDQpCisjZGVmaW5lIFBDRjIxMjNfV1JJVEUJCSgoMCA8PCA3KSB8IFBDRjIxMjNfU1VCQUREUikKKyNkZWZpbmUgUENGMjEyM19SRUFECQkoKDEgPDwgNykgfCBQQ0YyMTIzX1NVQkFERFIpCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwY2YyMTIzX2RyaXZlcjsKKworc3RydWN0IHBjZjIxMjNfc3lzZnNfcmVnIHsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOworCWNoYXIgbmFtZVsyXTsKK307CisKK3N0cnVjdCBwY2YyMTIzX3BsYXRfZGF0YSB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgcGNmMjEyM19zeXNmc19yZWcgcmVnc1sxNl07Cit9OworCisvKgorICogQ2F1c2VzIGEgMzAgbmFub3NlY29uZCBkZWxheSB0byBlbnN1cmUgdGhhdCB0aGUgUENGMjEyMyBjaGlwIHNlbGVjdAorICogaXMgcmVsZWFzZWQgcHJvcGVybHkgYWZ0ZXIgYW4gU1BJIHdyaXRlLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAqIGNhbGxlZCBhZnRlciBFVkVSWSByZWFkL3dyaXRlIGNhbGwgb3ZlciBTUEkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2YyMTIzX2RlbGF5X3RyZWModm9pZCkKK3sKKwluZGVsYXkoMzApOworfQorCitzdGF0aWMgc3NpemVfdCBwY2YyMTIzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGNmMjEyM19zeXNmc19yZWcgKnI7CisJdTggdHhidWZbMV0sIHJ4YnVmWzFdOworCXVuc2lnbmVkIGxvbmcgcmVnOworCWludCByZXQ7CisKKwlyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwY2YyMTIzX3N5c2ZzX3JlZywgYXR0cik7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoci0+bmFtZSwgMTYsICZyZWcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR4YnVmWzBdID0gUENGMjEyM19SRUFEIHwgcmVnOworCXJldCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCB0eGJ1ZiwgMSwgcnhidWYsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwlwY2YyMTIzX2RlbGF5X3RyZWMoKTsKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIweCV4XG4iLCByeGJ1ZlswXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBjZjIxMjNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCBwY2YyMTIzX3N5c2ZzX3JlZyAqcjsKKwl1OCB0eGJ1ZlsyXTsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWludCByZXQ7CisKKwlyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwY2YyMTIzX3N5c2ZzX3JlZywgYXR0cik7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoci0+bmFtZSwgMTYsICZyZWcpCisJCXx8IHN0cmljdF9zdHJ0b3VsKGJ1ZmZlciwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR4YnVmWzBdID0gUENGMjEyM19XUklURSB8IHJlZzsKKwl0eGJ1ZlsxXSA9IHZhbDsKKwlyZXQgPSBzcGlfd3JpdGUoc3BpLCB0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlPOworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBwY2YyMTIzX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJdTggdHhidWZbMV0sIHJ4YnVmWzddOworCWludCByZXQ7CisKKwl0eGJ1ZlswXSA9IFBDRjIxMjNfUkVBRCB8IFBDRjIxMjNfUkVHX1NDOworCXJldCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCB0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSwKKwkJCXJ4YnVmLCBzaXplb2YocnhidWYpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlwY2YyMTIzX2RlbGF5X3RyZWMoKTsKKworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJ4YnVmWzBdICYgMHg3Rik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocnhidWZbMV0gJiAweDdGKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocnhidWZbMl0gJiAweDNGKTsgLyogcnRjIGhyIDAtMjMgKi8KKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocnhidWZbM10gJiAweDNGKTsKKwl0bS0+dG1fd2RheSA9IHJ4YnVmWzRdICYgMHgwNzsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyeGJ1Zls1XSAmIDB4MUYpIC0gMTsgLyogcnRjIG1uIDEtMTIgKi8KKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocnhidWZbNl0pOworCWlmICh0bS0+dG1feWVhciA8IDcwKQorCQl0bS0+dG1feWVhciArPSAxMDA7CS8qIGFzc3VtZSB3ZSBhcmUgaW4gMTk3MC4uLjIwNjkgKi8KKworCWRldl9kYmcoZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCisJCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAorCQkJX19mdW5jX18sCisJCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKKwkJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOworCisJLyogdGhlIGNsb2NrIGNhbiBnaXZlIG91dCBpbnZhbGlkIGRhdGV0aW1lLCBidXQgd2UgY2Fubm90IHJldHVybgorCSAqIC1FSU5WQUwgb3RoZXJ3aXNlIGh3Y2xvY2sgd2lsbCByZWZ1c2UgdG8gc2V0IHRoZSB0aW1lIG9uIGJvb3R1cC4KKwkgKi8KKwlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApCisJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjZjIxMjNfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXU4IHR4YnVmWzhdOworCWludCByZXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgorCQkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKKwkJCV9fZnVuY19fLAorCQkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCisJCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKKworCS8qIFN0b3AgdGhlIGNvdW50ZXIgZmlyc3QgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfV1JJVEUgfCBQQ0YyMTIzX1JFR19DVFJMMTsKKwl0eGJ1ZlsxXSA9IDB4MjA7CisJcmV0ID0gc3BpX3dyaXRlKHNwaSwgdHhidWYsIDIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJLyogU2V0IHRoZSBuZXcgdGltZSAqLworCXR4YnVmWzBdID0gUENGMjEyM19XUklURSB8IFBDRjIxMjNfUkVHX1NDOworCXR4YnVmWzFdID0gYmluMmJjZCh0bS0+dG1fc2VjICYgMHg3Rik7CisJdHhidWZbMl0gPSBiaW4yYmNkKHRtLT50bV9taW4gJiAweDdGKTsKKwl0eGJ1ZlszXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIgJiAweDNGKTsKKwl0eGJ1Zls0XSA9IGJpbjJiY2QodG0tPnRtX21kYXkgJiAweDNGKTsKKwl0eGJ1Zls1XSA9IHRtLT50bV93ZGF5ICYgMHgwNzsKKwl0eGJ1Zls2XSA9IGJpbjJiY2QoKHRtLT50bV9tb24gKyAxKSAmIDB4MUYpOyAvKiBydGMgbW4gMS0xMiAqLworCXR4YnVmWzddID0gYmluMmJjZCh0bS0+dG1feWVhciA8IDEwMCA/IHRtLT50bV95ZWFyIDogdG0tPnRtX3llYXIgLSAxMDApOworCisJcmV0ID0gc3BpX3dyaXRlKHNwaSwgdHhidWYsIHNpemVvZih0eGJ1ZikpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJLyogU3RhcnQgdGhlIGNvdW50ZXIgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfV1JJVEUgfCBQQ0YyMTIzX1JFR19DVFJMMTsKKwl0eGJ1ZlsxXSA9IDB4MDA7CisJcmV0ID0gc3BpX3dyaXRlKHNwaSwgdHhidWYsIDIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwY2YyMTIzX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZQk9IHBjZjIxMjNfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBwY2YyMTIzX3J0Y19zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBjZjIxMjNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCBwY2YyMTIzX3BsYXRfZGF0YSAqcGRhdGE7CisJdTggdHhidWZbMl0sIHJ4YnVmWzJdOworCWludCByZXQsIGk7CisKKwlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2YyMTIzX3BsYXRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCXNwaS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKworCS8qIFNlbmQgYSBzb2Z0d2FyZSByZXNldCBjb21tYW5kICovCisJdHhidWZbMF0gPSBQQ0YyMTIzX1dSSVRFIHwgUENGMjEyM19SRUdfQ1RSTDE7CisJdHhidWZbMV0gPSAweDU4OworCWRldl9kYmcoJnNwaS0+ZGV2LCAicmVzZXR0aW5nIFJUQyAoMHglMDJYIDB4JTAyWClcbiIsCisJCQl0eGJ1ZlswXSwgdHhidWZbMV0pOworCXJldCA9IHNwaV93cml0ZShzcGksIHR4YnVmLCAyICogc2l6ZW9mKHU4KSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8ga2ZyZWVfZXhpdDsKKwlwY2YyMTIzX2RlbGF5X3RyZWMoKTsKKworCS8qIFN0b3AgdGhlIGNvdW50ZXIgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfV1JJVEUgfCBQQ0YyMTIzX1JFR19DVFJMMTsKKwl0eGJ1ZlsxXSA9IDB4MjA7CisJZGV2X2RiZygmc3BpLT5kZXYsICJzdG9wcGluZyBSVEMgKDB4JTAyWCAweCUwMlgpXG4iLAorCQkJdHhidWZbMF0sIHR4YnVmWzFdKTsKKwlyZXQgPSBzcGlfd3JpdGUoc3BpLCB0eGJ1ZiwgMiAqIHNpemVvZih1OCkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGtmcmVlX2V4aXQ7CisJcGNmMjEyM19kZWxheV90cmVjKCk7CisKKwkvKiBTZWUgaWYgdGhlIGNvdW50ZXIgd2FzIGFjdHVhbGx5IHN0b3BwZWQgKi8KKwl0eGJ1ZlswXSA9IFBDRjIxMjNfUkVBRCB8IFBDRjIxMjNfUkVHX0NUUkwxOworCWRldl9kYmcoJnNwaS0+ZGV2LCAiY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9mIFJUQyAoMHglMDJYKVxuIiwKKwkJCXR4YnVmWzBdKTsKKwlyZXQgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgdHhidWYsIDEgKiBzaXplb2YodTgpLAorCQkJCQlyeGJ1ZiwgMiAqIHNpemVvZih1OCkpOworCWRldl9kYmcoJnNwaS0+ZGV2LCAicmVjZWl2ZWQgZGF0YSBmcm9tIFJUQyAoMHglMDJYIDB4JTAyWClcbiIsCisJCQlyeGJ1ZlswXSwgcnhidWZbMV0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGtmcmVlX2V4aXQ7CisJcGNmMjEyM19kZWxheV90cmVjKCk7CisKKwlpZiAoIShyeGJ1ZlswXSAmIDB4MjApKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiY2hpcCBub3QgZm91bmRcbiIpOworCQlnb3RvIGtmcmVlX2V4aXQ7CisJfQorCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiY2hpcCBmb3VuZCwgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJzcGljbGsgJXUgS0h6LlxuIiwKKwkJCShzcGktPm1heF9zcGVlZF9oeiArIDUwMCkgLyAxMDAwKTsKKworCS8qIFN0YXJ0IHRoZSBjb3VudGVyICovCisJdHhidWZbMF0gPSBQQ0YyMTIzX1dSSVRFIHwgUENGMjEyM19SRUdfQ1RSTDE7CisJdHhidWZbMV0gPSAweDAwOworCXJldCA9IHNwaV93cml0ZShzcGksIHR4YnVmLCBzaXplb2YodHhidWYpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBrZnJlZV9leGl0OworCXBjZjIxMjNfZGVsYXlfdHJlYygpOworCisJLyogRmluYWxpemUgdGhlIGluaXRpYWxpemF0aW9uICovCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwY2YyMTIzX2RyaXZlci5kcml2ZXIubmFtZSwgJnNwaS0+ZGV2LAorCQkJJnBjZjIxMjNfcnRjX29wcywgVEhJU19NT0RVTEUpOworCisJaWYgKElTX0VSUihydGMpKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyLlxuIik7CisJCXJldCA9IFBUUl9FUlIocnRjKTsKKwkJZ290byBrZnJlZV9leGl0OworCX0KKworCXBkYXRhLT5ydGMgPSBydGM7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlzcHJpbnRmKHBkYXRhLT5yZWdzW2ldLm5hbWUsICIlMXgiLCBpKTsKKwkJcGRhdGEtPnJlZ3NbaV0uYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUjsKKwkJcGRhdGEtPnJlZ3NbaV0uYXR0ci5hdHRyLm5hbWUgPSBwZGF0YS0+cmVnc1tpXS5uYW1lOworCQlwZGF0YS0+cmVnc1tpXS5hdHRyLnNob3cgPSBwY2YyMTIzX3Nob3c7CisJCXBkYXRhLT5yZWdzW2ldLmF0dHIuc3RvcmUgPSBwY2YyMTIzX3N0b3JlOworCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNwaS0+ZGV2LCAmcGRhdGEtPnJlZ3NbaV0uYXR0cik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBzeXNmcyAlc1xuIiwKKwkJCQlwZGF0YS0+cmVnc1tpXS5uYW1lKTsKKwkJCWdvdG8gc3lzZnNfZXhpdDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitzeXNmc19leGl0OgorCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJnBkYXRhLT5yZWdzW2ldLmF0dHIpOworCitrZnJlZV9leGl0OgorCWtmcmVlKHBkYXRhKTsKKwlzcGktPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBjZjIxMjNfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHBjZjIxMjNfcGxhdF9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IGk7CisKKwlpZiAocGRhdGEpIHsKKwkJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBkYXRhLT5ydGM7CisKKwkJaWYgKHJ0YykKKwkJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWlmIChwZGF0YS0+cmVnc1tpXS5uYW1lWzBdKQorCQkJCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsCisJCQkJCQkgICAmcGRhdGEtPnJlZ3NbaV0uYXR0cik7CisJCWtmcmVlKHBkYXRhKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHBjZjIxMjNfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCQkubmFtZQk9ICJydGMtcGNmMjEyMyIsCisJCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gcGNmMjEyM19wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocGNmMjEyM19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGNmMjEyM19pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnBjZjIxMjNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBjZjIxMjNfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNmMjEyM19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJDaHJpcyBWZXJnZXMgPGNocmlzdkBjeWJlcnN3aXRjaGluZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5YUCBQQ0YyMTIzIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKworbW9kdWxlX2luaXQocGNmMjEyM19pbml0KTsKK21vZHVsZV9leGl0KHBjZjIxMjNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yOTcwMS5jCmluZGV4IDQyMDI4ZjIuLjliZWJhNDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYwpAQCAtMTc0LDMgKzE3NCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oInI5NzAxIHNwaSBSVEMgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSA8ZGFtbUBvcGVuc291cmNlLnNlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6cnRjLXI5NzAxIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYwppbmRleCBkZDFlMmJjLi4yMDk5MDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKQEAgLTI1MSwzICsyNTEsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWNvaCBSUzVDMzQ4IFJUQyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygic3BpOnJ0Yy1yczVjMzQ4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc3RtcDN4eHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1zdG1wM3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Y2UxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtc3RtcDN4eHguYwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIEZyZWVzY2FsZSBTVE1QMzdYWC9TVE1QMzc4WCBSZWFsIFRpbWUgQ2xvY2sgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFNpZ21hdGVsLCBJbmMuCisgKiBQZXRlciBIYXJ0bGV5LCA8cGV0ZXIuaGFydGxleUBzaWdtYXRlbC5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisKKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bWFjaC9zdG1wM3h4eC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ydGMuaD4KKworc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhIHsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXVuc2lnbmVkIGlycV9jb3VudDsKKwl2b2lkIF9faW9tZW0gKmlvOworCWludCBpcnFfYWxhcm0sIGlycV8xbXNlYzsKK307CisKK3N0YXRpYyB2b2lkIHN0bXAzeHh4X3dhaXRfdGltZShzdHJ1Y3Qgc3RtcDN4eHhfcnRjX2RhdGEgKnJ0Y19kYXRhKQoreworCS8qCisJICogVGhlIGRhdGFzaGVldCBkb2Vzbid0IHNheSB3aGljaCB3YXkgcm91bmQgdGhlCisJICogTkVXX1JFR1MvU1RBTEVfUkVHUyBiaXRmaWVsZHMgZ28uIEluIGZhY3QgaXQncyAweDE9UDAsCisJICogMHgyPVAxLCAuLiwgMHgyMD1QNSwgMHg0MD1BTEFSTSwgMHg4MD1TRUNPTkRTCisJICovCisJd2hpbGUgKF9fcmF3X3JlYWRsKHJ0Y19kYXRhLT5pbyArIEhXX1JUQ19TVEFUKSAmCisJCQlCRigweDgwLCBSVENfU1RBVF9TVEFMRV9SRUdTKSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKKy8qIFRpbWUgcmVhZC93cml0ZSAqLworc3RhdGljIGludCBzdG1wM3h4eF9ydGNfZ2V0dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqcnRjX3RtKQoreworCXN0cnVjdCBzdG1wM3h4eF9ydGNfZGF0YSAqcnRjX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXN0bXAzeHh4X3dhaXRfdGltZShydGNfZGF0YSk7CisJcnRjX3RpbWVfdG9fdG0oX19yYXdfcmVhZGwocnRjX2RhdGEtPmlvICsgSFdfUlRDX1NFQ09ORFMpLCBydGNfdG0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bXAzeHh4X3J0Y19zZXRfbW1zcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgdCkKK3sKKwlzdHJ1Y3Qgc3RtcDN4eHhfcnRjX2RhdGEgKnJ0Y19kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlfX3Jhd193cml0ZWwodCwgcnRjX2RhdGEtPmlvICsgSFdfUlRDX1NFQ09ORFMpOworCXN0bXAzeHh4X3dhaXRfdGltZShydGNfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGludGVycnVwdChzKSBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtcDN4eHhfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXZfaWQpOworCXUzMiBzdGF0dXM7CisJdTMyIGV2ZW50cyA9IDA7CisKKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChydGNfZGF0YS0+aW8gKyBIV19SVENfQ1RSTCkgJgorCQkJKEJNX1JUQ19DVFJMX0FMQVJNX0lSUSB8IEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRKTsKKworCWlmIChzdGF0dXMgJiBCTV9SVENfQ1RSTF9BTEFSTV9JUlEpIHsKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX0FMQVJNX0lSUSwKKwkJCQlydGNfZGF0YS0+aW8gKyBIV19SVENfQ1RSTCk7CisJCWV2ZW50cyB8PSBSVENfQUYgfCBSVENfSVJRRjsKKwl9CisKKwlpZiAoc3RhdHVzICYgQk1fUlRDX0NUUkxfT05FTVNFQ19JUlEpIHsKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRLAorCQkJCXJ0Y19kYXRhLT5pbyArIEhXX1JUQ19DVFJMKTsKKwkJaWYgKCsrcnRjX2RhdGEtPmlycV9jb3VudCAlIDEwMDAgPT0gMCkgeworCQkJZXZlbnRzIHw9IFJUQ19VRiB8IFJUQ19JUlFGOworCQkJcnRjX2RhdGEtPmlycV9jb3VudCA9IDA7CisJCX0KKwl9CisKKwlpZiAoZXZlbnRzKQorCQlydGNfdXBkYXRlX2lycShydGNfZGF0YS0+cnRjLCAxLCBldmVudHMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHN0bXAzeHh4X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3Qgc3RtcDN4eHhfcnRjX2RhdGEgKnJ0Y19kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdm9pZCBfX2lvbWVtICpwID0gcnRjX2RhdGEtPmlvICsgSFdfUlRDX1BFUlNJU1RFTlQwLAorCQkgICAgICpjdGwgPSBydGNfZGF0YS0+aW8gKyBIV19SVENfQ1RSTDsKKworCWlmIChlbmFibGVkKSB7CisJCXN0bXAzeHh4X3NldGwoQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX0VOIHwKKwkJCSAgICAgIEJNX1JUQ19QRVJTSVNURU5UMF9BTEFSTV9XQUtFX0VOLCBwKTsKKwkJc3RtcDN4eHhfc2V0bChCTV9SVENfQ1RSTF9BTEFSTV9JUlFfRU4sIGN0bCk7CisJfSBlbHNlIHsKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19QRVJTSVNURU5UMF9BTEFSTV9FTiB8CisJCQkgICAgICBCTV9SVENfUEVSU0lTVEVOVDBfQUxBUk1fV0FLRV9FTiwgcCk7CisJCXN0bXAzeHh4X2NsZWFybChCTV9SVENfQ1RSTF9BTEFSTV9JUlFfRU4sIGN0bCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bXAzeHh4X3VwZGF0ZV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGVuYWJsZWQpCisJCXN0bXAzeHh4X3NldGwoQk1fUlRDX0NUUkxfT05FTVNFQ19JUlFfRU4sCisJCQkJcnRjX2RhdGEtPmlvICsgSFdfUlRDX0NUUkwpOworCWVsc2UKKwkJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRX0VOLAorCQkJCXJ0Y19kYXRhLT5pbyArIEhXX1JUQ19DVFJMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG1wM3h4eF9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbG0pCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcnRjX3RpbWVfdG9fdG0oX19yYXdfcmVhZGwocnRjX2RhdGEtPmlvICsgSFdfUlRDX0FMQVJNKSwgJmFsbS0+dGltZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbG0pCit7CisJdW5zaWduZWQgbG9uZyB0OworCXN0cnVjdCBzdG1wM3h4eF9ydGNfZGF0YSAqcnRjX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJ0Y190bV90b190aW1lKCZhbG0tPnRpbWUsICZ0KTsKKwlfX3Jhd193cml0ZWwodCwgcnRjX2RhdGEtPmlvICsgSFdfUlRDX0FMQVJNKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHN0bXAzeHh4X3J0Y19vcHMgPSB7CisJLmFsYXJtX2lycV9lbmFibGUgPQorCQkJICBzdG1wM3h4eF9hbGFybV9pcnFfZW5hYmxlLAorCS51cGRhdGVfaXJxX2VuYWJsZSA9CisJCQkgIHN0bXAzeHh4X3VwZGF0ZV9pcnFfZW5hYmxlLAorCS5yZWFkX3RpbWUJPSBzdG1wM3h4eF9ydGNfZ2V0dGltZSwKKwkuc2V0X21tc3MJPSBzdG1wM3h4eF9ydGNfc2V0X21tc3MsCisJLnJlYWRfYWxhcm0JPSBzdG1wM3h4eF9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gc3RtcDN4eHhfcnRjX3NldF9hbGFybSwKK307CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzdG1wM3h4eF9ydGNfZGF0YSAqcnRjX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICghcnRjX2RhdGEpCisJCXJldHVybiAwOworCisJc3RtcDN4eHhfY2xlYXJsKEJNX1JUQ19DVFJMX09ORU1TRUNfSVJRX0VOIHwgQk1fUlRDX0NUUkxfQUxBUk1fSVJRX0VOLAorCQkJcnRjX2RhdGEtPmlvICsgSFdfUlRDX0NUUkwpOworCWZyZWVfaXJxKHJ0Y19kYXRhLT5pcnFfYWxhcm0sICZwZGV2LT5kZXYpOworCWZyZWVfaXJxKHJ0Y19kYXRhLT5pcnFfMW1zZWMsICZwZGV2LT5kZXYpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGNfZGF0YS0+cnRjKTsKKwlpb3VubWFwKHJ0Y19kYXRhLT5pbyk7CisJa2ZyZWUocnRjX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGVycjsKKworCXJ0Y19kYXRhID0ga3phbGxvYyhzaXplb2YgKnJ0Y19kYXRhLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0Y19kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlc291cmNlXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJ0Y19kYXRhLT5pbyA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCWlmICghcnRjX2RhdGEtPmlvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlydGNfZGF0YS0+aXJxX2FsYXJtID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlydGNfZGF0YS0+aXJxXzFtc2VjID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKworCWlmICghKF9fcmF3X3JlYWRsKEhXX1JUQ19TVEFUICsgcnRjX2RhdGEtPmlvKSAmCisJCQlCTV9SVENfU1RBVF9SVENfUFJFU0VOVCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gZGV2aWNlIG9uYm9hcmRcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dF9yZW1hcDsKKwl9CisKKwlzdG1wM3h4eF9yZXNldF9ibG9jayhydGNfZGF0YS0+aW8sIHRydWUpOworCXN0bXAzeHh4X2NsZWFybChCTV9SVENfUEVSU0lTVEVOVDBfQUxBUk1fRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0VfRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0UsCisJCQlydGNfZGF0YS0+aW8gKyBIV19SVENfUEVSU0lTVEVOVDApOworCXJ0Y19kYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCisJCQkJJnN0bXAzeHh4X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0Y19kYXRhLT5ydGMpKSB7CisJCWVyciA9IFBUUl9FUlIocnRjX2RhdGEtPnJ0Yyk7CisJCWdvdG8gb3V0X3JlbWFwOworCX0KKworCXJ0Y19kYXRhLT5pcnFfY291bnQgPSAwOworCWVyciA9IHJlcXVlc3RfaXJxKHJ0Y19kYXRhLT5pcnFfYWxhcm0sIHN0bXAzeHh4X3J0Y19pbnRlcnJ1cHQsCisJCQlJUlFGX0RJU0FCTEVELCAiUlRDIGFsYXJtIiwgJnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY2xhaW0gSVJRJWRcbiIsCisJCQlydGNfZGF0YS0+aXJxX2FsYXJtKTsKKwkJZ290byBvdXRfaXJxX2FsYXJtOworCX0KKwllcnIgPSByZXF1ZXN0X2lycShydGNfZGF0YS0+aXJxXzFtc2VjLCBzdG1wM3h4eF9ydGNfaW50ZXJydXB0LAorCQkJSVJRRl9ESVNBQkxFRCwgIlJUQyB0aWNrIiwgJnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY2xhaW0gSVJRJWRcbiIsCisJCQlydGNfZGF0YS0+aXJxXzFtc2VjKTsKKwkJZ290byBvdXRfaXJxMTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGNfZGF0YSk7CisKKwlyZXR1cm4gMDsKKworb3V0X2lycTE6CisJZnJlZV9pcnEocnRjX2RhdGEtPmlycV9hbGFybSwgJnBkZXYtPmRldik7CitvdXRfaXJxX2FsYXJtOgorCXN0bXAzeHh4X2NsZWFybChCTV9SVENfQ1RSTF9PTkVNU0VDX0lSUV9FTiB8IEJNX1JUQ19DVFJMX0FMQVJNX0lSUV9FTiwKKwkJCXJ0Y19kYXRhLT5pbyArIEhXX1JUQ19DVFJMKTsKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjX2RhdGEtPnJ0Yyk7CitvdXRfcmVtYXA6CisJaW91bm1hcChydGNfZGF0YS0+aW8pOworb3V0X2ZyZWU6CisJa2ZyZWUocnRjX2RhdGEpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcDN4eHhfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bXAzeHh4X3J0Y19kYXRhICpydGNfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlzdG1wM3h4eF9yZXNldF9ibG9jayhydGNfZGF0YS0+aW8sIHRydWUpOworCXN0bXAzeHh4X2NsZWFybChCTV9SVENfUEVSU0lTVEVOVDBfQUxBUk1fRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0VfRU4gfAorCQkJQk1fUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0UsCisJCQlydGNfZGF0YS0+aW8gKyBIV19SVENfUEVSU0lTVEVOVDApOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgc3RtcDN4eHhfcnRjX3N1c3BlbmQJTlVMTAorI2RlZmluZSBzdG1wM3h4eF9ydGNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdG1wM3h4eF9ydGNkcnYgPSB7CisJLnByb2JlCQk9IHN0bXAzeHh4X3J0Y19wcm9iZSwKKwkucmVtb3ZlCQk9IHN0bXAzeHh4X3J0Y19yZW1vdmUsCisJLnN1c3BlbmQJPSBzdG1wM3h4eF9ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHN0bXAzeHh4X3J0Y19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInN0bXAzeHh4LXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzdG1wM3h4eF9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN0bXAzeHh4X3J0Y2Rydik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdG1wM3h4eF9ydGNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzdG1wM3h4eF9ydGNkcnYpOworfQorCittb2R1bGVfaW5pdChzdG1wM3h4eF9ydGNfaW5pdCk7Cittb2R1bGVfZXhpdChzdG1wM3h4eF9ydGNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU1RNUDN4eHggUlRDIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiZG1pdHJ5IHBlcnZ1c2hpbiA8ZHBlcnZ1c2hpbkBlbWJlZGRlZGFsbGV5LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKaW5kZXggMjUzMWNlNC4uN2RkMjNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKQEAgLTEwMiw2ICsxMDIsMTkgQEAKIAlyZXR1cm4gbjsKIH0KIAorc3RhdGljIHNzaXplX3QKK3J0Y19zeXNmc19zaG93X2hjdG9zeXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworI2lmZGVmIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UKKwlpZiAoc3RyY21wKGRldl9uYW1lKCZ0b19ydGNfZGV2aWNlKGRldiktPmRldiksCisJCSAgIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpID09IDApCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOworCWVsc2UKKyNlbmRpZgorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKK30KKwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHJ0Y19hdHRyc1tdID0gewogCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBydGNfc3lzZnNfc2hvd19uYW1lLCBOVUxMKSwKIAlfX0FUVFIoZGF0ZSwgU19JUlVHTywgcnRjX3N5c2ZzX3Nob3dfZGF0ZSwgTlVMTCksCkBAIC0xMDksNiArMTIyLDcgQEAKIAlfX0FUVFIoc2luY2VfZXBvY2gsIFNfSVJVR08sIHJ0Y19zeXNmc19zaG93X3NpbmNlX2Vwb2NoLCBOVUxMKSwKIAlfX0FUVFIobWF4X3VzZXJfZnJlcSwgU19JUlVHTyB8IFNfSVdVU1IsIHJ0Y19zeXNmc19zaG93X21heF91c2VyX2ZyZXEsCiAJCQlydGNfc3lzZnNfc2V0X21heF91c2VyX2ZyZXEpLAorCV9fQVRUUihoY3Rvc3lzLCBTX0lSVUdPLCBydGNfc3lzZnNfc2hvd19oY3Rvc3lzLCBOVUxMKSwKIAl7IH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCBlMTA5ZGE0Li5kYWQwNDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTIxNDYsNyArMjE0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucworY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zCiBkYXNkX2RldmljZV9vcGVyYXRpb25zID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBkYXNkX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYTFjZTU3My4uYWIzNTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtNzA2LDcgKzcwNiw3IEBACiAJICAgICAgIHNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKIAlFQkNBU0ModWlkLT5zZXJpYWwsIHNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKIAl1aWQtPnNzaWQgPSBwcml2YXRlLT5nbmVxLT5zdWJzeXN0ZW1JRDsKLQl1aWQtPnJlYWxfdW5pdF9hZGRyID0gcHJpdmF0ZS0+bmVkLT51bml0X2FkZHI7OworCXVpZC0+cmVhbF91bml0X2FkZHIgPSBwcml2YXRlLT5uZWQtPnVuaXRfYWRkcjsKIAlpZiAocHJpdmF0ZS0+c25lcSkgewogCQl1aWQtPnR5cGUgPSBwcml2YXRlLT5zbmVxLT5zdWFfZmxhZ3M7CiAJCWlmICh1aWQtPnR5cGUgPT0gVUFfQkFTRV9QQVZfQUxJQVMpCkBAIC05MzUsNiArOTM1LDcgQEAKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CisJbWVtc2V0KCZwcml2YXRlLT5mZWF0dXJlcywgMCwgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMpKTsKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEgLyogUFNGICovCSsgMSAvKiBSU1NEICovLAogCQkJCSAgIChzaXplb2Yoc3RydWN0IGRhc2RfcHNmX3Byc3NkX2RhdGEpICsKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMpKSwKQEAgLTk4Miw3ICs5ODMsOSBAQAogCQlmZWF0dXJlcyA9IChzdHJ1Y3QgZGFzZF9yc3NkX2ZlYXR1cmVzICopIChwcnNzZHAgKyAxKTsKIAkJbWVtY3B5KCZwcml2YXRlLT5mZWF0dXJlcywgZmVhdHVyZXMsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGRhc2RfcnNzZF9mZWF0dXJlcykpOwotCX0KKwl9IGVsc2UKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiUmVhZGluZyBkZXZpY2UgZmVhdHVyZSBjb2RlcyIKKwkJCSAiIGZhaWxlZCB3aXRoIHJjPSVkXG4iLCByYyk7CiAJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgY3FyLT5tZW1kZXYpOwogCXJldHVybiByYzsKIH0KQEAgLTExNDQsOSArMTE0Nyw3IEBACiAJfQogCiAJLyogUmVhZCBGZWF0dXJlIENvZGVzICovCi0JcmMgPSBkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwotCWlmIChyYykKLQkJZ290byBvdXRfZXJyMzsKKwlkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCBEQVNEX0VDS0RfTUFHSUMsCkBAIC0zMjQxLDkgKzMyNDIsNyBAQAogCX0KIAogCS8qIFJlYWQgRmVhdHVyZSBDb2RlcyAqLwotCXJjID0gZGFzZF9lY2tkX3JlYWRfZmVhdHVyZXMoZGV2aWNlKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2VycjsKKwlkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCiAJbWVtc2V0KCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgc2l6ZW9mKHByaXZhdGUtPnJkY19kYXRhKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IDVlNDdhMWUuLjhhZmQ5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC01NDAsNyArNTQwLDcgQEAKIGV4dGVybiBkZWJ1Z19pbmZvX3QgKmRhc2RfZGVidWdfYXJlYTsKIGV4dGVybiBzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCBkYXNkX2dsb2JhbF9wcm9maWxlOwogZXh0ZXJuIHVuc2lnbmVkIGludCBkYXNkX3Byb2ZpbGVfbGV2ZWw7Ci1leHRlcm4gc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRhc2RfZGV2aWNlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRhc2RfZGV2aWNlX29wZXJhdGlvbnM7CiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFzZF9wYWdlX2NhY2hlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYwppbmRleCBkMzQ2MTc2Li5mNzZmNGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyBjaGFyIGRjc3NibGtfc2VnbWVudHNbRENTU0JMS19QQVJNX0xFTl0gPSAiXDAiOwogCiBzdGF0aWMgaW50IGRjc3NibGtfbWFqb3I7Ci1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRjc3NibGtfZGV2b3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkY3NzYmxrX2Rldm9wcyA9IHsKIAkub3duZXIgICAJPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICAJPSBkY3NzYmxrX29wZW4sCiAJLnJlbGVhc2UgCT0gZGNzc2Jsa19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwppbmRleCBlZTYwNGU5Li4xMTZkMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeHByYW1fZGV2b3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeHByYW1fZGV2b3BzID0KIHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkuZ2V0Z2VvCT0geHByYW1fZ2V0Z2VvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDRjYjllNzAuLjY0ZjU3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTUwLDcgKzUwLDcgQEAKIHN0YXRpYyBpbnQgdGFwZWJsb2NrX21lZGl1bV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICopOwogc3RhdGljIGludCB0YXBlYmxvY2tfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICopOwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHRhcGVibG9ja19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB0YXBlYmxvY2tfZm9wcyA9IHsKIAkub3duZXIJCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkgPSB0YXBlYmxvY2tfb3BlbiwKIAkucmVsZWFzZQkgPSB0YXBlYmxvY2tfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDM5M2M3M2MuLjkxYzI1NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMzEsOCArMzEsNyBAQAogI2luY2x1ZGUgImNocC5oIgogCiBpbnQgY3NzX2luaXRfZG9uZSA9IDA7Ci1zdGF0aWMgaW50IG5lZWRfcmVwcm9iZSA9IDA7Ci1zdGF0aWMgaW50IG1heF9zc2lkID0gMDsKK2ludCBtYXhfc3NpZDsKIAogc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjaGFubmVsX3N1YnN5c3RlbXNbX19NQVhfQ1NTSUQgKyAxXTsKIApAQCAtMzE1LDEyICszMTQsMTggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAKLQlzY2ggPSBjc3NfYWxsb2Nfc3ViY2hhbm5lbChzY2hpZCk7Ci0JaWYgKElTX0VSUihzY2gpKQotCQlyZXR1cm4gUFRSX0VSUihzY2gpOworCWlmIChjaW9faXNfY29uc29sZShzY2hpZCkpCisJCXNjaCA9IGNpb19nZXRfY29uc29sZV9zdWJjaGFubmVsKCk7CisJZWxzZSB7CisJCXNjaCA9IGNzc19hbGxvY19zdWJjaGFubmVsKHNjaGlkKTsKKwkJaWYgKElTX0VSUihzY2gpKQorCQkJcmV0dXJuIFBUUl9FUlIoc2NoKTsKKwl9CiAJcmV0ID0gY3NzX3JlZ2lzdGVyX3N1YmNoYW5uZWwoc2NoKTsKLQlpZiAocmV0KQotCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7CisJaWYgKHJldCkgeworCQlpZiAoIWNpb19pc19jb25zb2xlKHNjaGlkKSkKKwkJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDA5LDEwICs0MTQsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBpZHNldCAqc2xvd19zdWJjaGFubmVsX3NldDsKIHN0YXRpYyBzcGlubG9ja190IHNsb3dfc3ViY2hhbm5lbF9sb2NrOworc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IGNzc19ldmFsX3dxOworc3RhdGljIGF0b21pY190IGNzc19ldmFsX3NjaGVkdWxlZDsKIAogc3RhdGljIGludCBfX2luaXQgc2xvd19zdWJjaGFubmVsX2luaXQodm9pZCkKIHsKIAlzcGluX2xvY2tfaW5pdCgmc2xvd19zdWJjaGFubmVsX2xvY2spOworCWF0b21pY19zZXQoJmNzc19ldmFsX3NjaGVkdWxlZCwgMCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY3NzX2V2YWxfd3EpOwogCXNsb3dfc3ViY2hhbm5lbF9zZXQgPSBpZHNldF9zY2hfbmV3KCk7CiAJaWYgKCFzbG93X3N1YmNoYW5uZWxfc2V0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgImNvdWxkIG5vdCBhbGxvY2F0ZSBzbG93IHN1YmNoYW5uZWwgc2V0XG4iKTsKQEAgLTQ2OCw5ICs0NzcsMTcgQEAKIAogc3RhdGljIHZvaWQgY3NzX3Nsb3dfcGF0aF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlDSU9fVFJBQ0VfRVZFTlQoNCwgInNsb3dwYXRoIik7CiAJZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoc2xvd19ldmFsX2tub3duX2ZuLCBzbG93X2V2YWxfdW5rbm93bl9mbiwKIAkJCQkgICBOVUxMKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoaWRzZXRfaXNfZW1wdHkoc2xvd19zdWJjaGFubmVsX3NldCkpIHsKKwkJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAwKTsKKwkJd2FrZV91cCgmY3NzX2V2YWxfd3EpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgREVDTEFSRV9XT1JLKHNsb3dfcGF0aF93b3JrLCBjc3Nfc2xvd19wYXRoX2Z1bmMpOwpAQCAtNDgyLDYgKzQ5OSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIAlpZHNldF9zY2hfYWRkKHNsb3dfc3ViY2hhbm5lbF9zZXQsIHNjaGlkKTsKKwlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwogCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiB9CkBAIC00OTIsODAgKzUxMCw1MyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfZmlsbChzbG93X3N1YmNoYW5uZWxfc2V0KTsKKwlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwogCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgX191bnNldF9yZWdpc3RlcmVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaWRzZXQgKnNldCA9IGRhdGE7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoZGV2KTsKKworCWlkc2V0X3NjaF9kZWwoc2V0LCBzY2gtPnNjaGlkKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjc3Nfc2NoZWR1bGVfZXZhbF9hbGxfdW5yZWcodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZHNldCAqdW5yZWdfc2V0OworCisJLyogRmluZCB1bnJlZ2lzdGVyZWQgc3ViY2hhbm5lbHMuICovCisJdW5yZWdfc2V0ID0gaWRzZXRfc2NoX25ldygpOworCWlmICghdW5yZWdfc2V0KSB7CisJCS8qIEZhbGxiYWNrLiAqLworCQljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKKwkJcmV0dXJuOworCX0KKwlpZHNldF9maWxsKHVucmVnX3NldCk7CisJYnVzX2Zvcl9lYWNoX2RldigmY3NzX2J1c190eXBlLCBOVUxMLCB1bnJlZ19zZXQsIF9fdW5zZXRfcmVnaXN0ZXJlZCk7CisJLyogQXBwbHkgdG8gc2xvd19zdWJjaGFubmVsX3NldC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZHNldF9hZGRfc2V0KHNsb3dfc3ViY2hhbm5lbF9zZXQsIHVucmVnX3NldCk7CisJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAxKTsKKwlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNsb3dfcGF0aF93b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlkc2V0X2ZyZWUodW5yZWdfc2V0KTsKK30KKwogdm9pZCBjc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKHZvaWQpCiB7CiAJZmx1c2hfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7CiB9CiAKLS8qIFJlcHJvYmUgc3ViY2hhbm5lbCBpZiB1bnJlZ2lzdGVyZWQuICovCi1zdGF0aWMgaW50IHJlcHJvYmVfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmV0OwotCi0JQ0lPX01TR19FVkVOVCg2LCAiY2lvOiByZXByb2JlIDAuJXguJTA0eFxuIiwKLQkJICAgICAgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vKTsKLQlpZiAobmVlZF9yZXByb2JlKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJldCA9IGNzc19wcm9iZV9kZXZpY2Uoc2NoaWQpOwotCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAwOgotCQlicmVhazsKLQljYXNlIC1FTlhJTzoKLQljYXNlIC1FTk9NRU06Ci0JY2FzZSAtRUlPOgotCQkvKiBUaGVzZSBzaG91bGQgYWJvcnQgbG9vcGluZyAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAwOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcHJvYmVfYWZ0ZXJfaWRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKLXsKLQkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KLQl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKLQkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7Ci0JaWYgKG5lZWRfcmVwcm9iZSkKLQkJY3NzX3NjaGVkdWxlX3JlcHJvYmUoKTsKLX0KLQotc3RhdGljIERFQ0xBUkVfV09SSyhyZXByb2JlX2lkbGVfd29yaywgcmVwcm9iZV9hZnRlcl9pZGxlKTsKLQotLyogV29yayBmdW5jdGlvbiB1c2VkIHRvIHJlcHJvYmUgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KLXN0YXRpYyB2b2lkIHJlcHJvYmVfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQotewotCWludCByZXQ7Ci0KLQlDSU9fTVNHX0VWRU5UKDQsICJyZXByb2JlIHN0YXJ0XG4iKTsKLQotCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLwotCWlmIChhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSAhPSAwKSB7Ci0JCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmcmVwcm9iZV9pZGxlX3dvcmspOwotCQlyZXR1cm47Ci0JfQotCW5lZWRfcmVwcm9iZSA9IDA7Ci0JcmV0ID0gZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoTlVMTCwgcmVwcm9iZV9zdWJjaGFubmVsLCBOVUxMKTsKLQotCUNJT19NU0dfRVZFTlQoNCwgInJlcHJvYmUgZG9uZSAocmM9JWQsIG5lZWRfcmVwcm9iZT0lZClcbiIsIHJldCwKLQkJICAgICAgbmVlZF9yZXByb2JlKTsKLX0KLQotc3RhdGljIERFQ0xBUkVfV09SSyhjc3NfcmVwcm9iZV93b3JrLCByZXByb2JlX2FsbCk7Ci0KIC8qIFNjaGVkdWxlIHJlcHJvYmluZyBvZiBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogdm9pZCBjc3Nfc2NoZWR1bGVfcmVwcm9iZSh2b2lkKQogewotCW5lZWRfcmVwcm9iZSA9IDE7Ci0JcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjc3NfcmVwcm9iZV93b3JrKTsKKwljc3Nfc2NoZWR1bGVfZXZhbF9hbGxfdW5yZWcoKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoY3NzX3NjaGVkdWxlX3JlcHJvYmUpOwogCiAvKgpAQCAtNjAxLDQ5ICs1OTIsNiBAQAogCWNzc19ldmFsdWF0ZV9zdWJjaGFubmVsKG1jaGtfc2NoaWQsIDApOwogfQogCi1zdGF0aWMgaW50IF9faW5pdAotX19pbml0X2NoYW5uZWxfc3Vic3lzdGVtKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0JaW50IHJldDsKLQotCWlmIChjaW9faXNfY29uc29sZShzY2hpZCkpCi0JCXNjaCA9IGNpb19nZXRfY29uc29sZV9zdWJjaGFubmVsKCk7Ci0JZWxzZSB7Ci0JCXNjaCA9IGNzc19hbGxvY19zdWJjaGFubmVsKHNjaGlkKTsKLQkJaWYgKElTX0VSUihzY2gpKQotCQkJcmV0ID0gUFRSX0VSUihzY2gpOwotCQllbHNlCi0JCQlyZXQgPSAwOwotCQlzd2l0Y2ggKHJldCkgewotCQljYXNlIDA6Ci0JCQlicmVhazsKLQkJY2FzZSAtRU5PTUVNOgotCQkJcGFuaWMoIk91dCBvZiBtZW1vcnkgaW4gaW5pdF9jaGFubmVsX3N1YnN5c3RlbVxuIik7Ci0JCS8qIC1FTlhJTzogbm8gbW9yZSBzdWJjaGFubmVscy4gKi8KLQkJY2FzZSAtRU5YSU86Ci0JCQlyZXR1cm4gcmV0OwotCQkvKiAtRUlPOiB0aGlzIHN1YmNoYW5uZWwgc2V0IG5vdCBzdXBwb3J0ZWQuICovCi0JCWNhc2UgLUVJTzoKLQkJCXJldHVybiByZXQ7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQkvKgotCSAqIFdlIHJlZ2lzdGVyIEFMTCB2YWxpZCBzdWJjaGFubmVscyBpbiBpb2luZm8sIGV2ZW4gdGhvc2UKLQkgKiB0aGF0IGhhdmUgYmVlbiBwcmVzZW50IGJlZm9yZSBpbml0X2NoYW5uZWxfc3Vic3lzdGVtLgotCSAqIFRoZXNlIHN1YmNoYW5uZWxzIGNhbid0IGhhdmUgYmVlbiByZWdpc3RlcmVkIHlldCAoa21hbGxvYwotCSAqIG5vdCB3b3JraW5nKSBzbyB3ZSBkbyBpdCBub3cuIFRoaXMgaXMgdHJ1ZSBlLmcuIGZvciB0aGUKLQkgKiBjb25zb2xlIHN1YmNoYW5uZWwuCi0JICovCi0JaWYgKGNzc19yZWdpc3Rlcl9zdWJjaGFubmVsKHNjaCkpIHsKLQkJaWYgKCFjaW9faXNfY29uc29sZShzY2hpZCkpCi0JCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQKIGNzc19nZW5lcmF0ZV9wZ2lkKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzLCB1MzIgdG9kX2hpZ2gpCiB7CkBAIC04NTQsMTkgKzgwMiwzMCBAQAogICogVGhlIHN0cnVjdCBzdWJjaGFubmVsJ3MgYXJlIGNyZWF0ZWQgZHVyaW5nIHByb2JpbmcgKGV4Y2VwdCBmb3IgdGhlCiAgKiBzdGF0aWMgY29uc29sZSBzdWJjaGFubmVsKS4KICAqLwotc3RhdGljIGludCBfX2luaXQKLWluaXRfY2hhbm5lbF9zdWJzeXN0ZW0gKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjc3NfYnVzX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0LCBpOwogCiAJcmV0ID0gY2hzY19kZXRlcm1pbmVfY3NzX2NoYXJhY3RlcmlzdGljcygpOwogCWlmIChyZXQgPT0gLUVOT01FTSkKLQkJZ290byBvdXQ7IC8qIE5vIG5lZWQgdG8gY29udGludWUuICovCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gY2hzY19hbGxvY19zZWlfYXJlYSgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJLyogVHJ5IHRvIGVuYWJsZSBNU1MuICovCisJcmV0ID0gY2hzY19lbmFibGVfZmFjaWxpdHkoQ0hTQ19TREFfT0NfTVNTKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDogLyogU3VjY2Vzcy4gKi8KKwkJbWF4X3NzaWQgPSBfX01BWF9TU0lEOworCQlicmVhazsKKwljYXNlIC1FTk9NRU06CisJCWdvdG8gb3V0OworCWRlZmF1bHQ6CisJCW1heF9zc2lkID0gMDsKKwl9CisKIAlyZXQgPSBzbG93X3N1YmNoYW5uZWxfaW5pdCgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtODc4LDE3ICs4MzcsNiBAQAogCWlmICgocmV0ID0gYnVzX3JlZ2lzdGVyKCZjc3NfYnVzX3R5cGUpKSkKIAkJZ290byBvdXQ7CiAKLQkvKiBUcnkgdG8gZW5hYmxlIE1TUy4gKi8KLQlyZXQgPSBjaHNjX2VuYWJsZV9mYWNpbGl0eShDSFNDX1NEQV9PQ19NU1MpOwotCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAwOiAvKiBTdWNjZXNzLiAqLwotCQltYXhfc3NpZCA9IF9fTUFYX1NTSUQ7Ci0JCWJyZWFrOwotCWNhc2UgLUVOT01FTToKLQkJZ290byBvdXRfYnVzOwotCWRlZmF1bHQ6Ci0JCW1heF9zc2lkID0gMDsKLQl9CiAJLyogU2V0dXAgY3NzIHN0cnVjdHVyZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDw9IF9fTUFYX0NTU0lEOyBpKyspIHsKIAkJc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3M7CkBAIC05MzQsNyArODgyLDYgQEAKIAkvKiBFbmFibGUgZGVmYXVsdCBpc2MgZm9yIEkvTyBzdWJjaGFubmVscy4gKi8KIAlpc2NfcmVnaXN0ZXIoSU9fU0NIX0lTQyk7CiAKLQlmb3JfZWFjaF9zdWJjaGFubmVsKF9faW5pdF9jaGFubmVsX3N1YnN5c3RlbSwgTlVMTCk7CiAJcmV0dXJuIDA7CiBvdXRfZmlsZToKIAlpZiAoY3NzX2Noc2NfY2hhcmFjdGVyaXN0aWNzLnNlY20pCkBAIC05NTUsMTcgKzkwMiw3NiBAQAogCQkJCQkgICAmZGV2X2F0dHJfY21fZW5hYmxlKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJmNzcy0+ZGV2aWNlKTsKIAl9Ci1vdXRfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZjc3NfYnVzX3R5cGUpOwogb3V0OgogCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWNoc2NfZnJlZV9zZWlfYXJlYSgpOwotCWtmcmVlKHNsb3dfc3ViY2hhbm5lbF9zZXQpOworCWlkc2V0X2ZyZWUoc2xvd19zdWJjaGFubmVsX3NldCk7CiAJcHJfYWxlcnQoIlRoZSBDU1MgZGV2aWNlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAiCiAJCSAiZXJybm89JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGNzc19idXNfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8PSBfX01BWF9DU1NJRDsgaSsrKSB7CisJCWNzcyA9IGNoYW5uZWxfc3Vic3lzdGVtc1tpXTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldik7CisJCWNzcy0+cHNldWRvX3N1YmNoYW5uZWwgPSBOVUxMOworCQlpZiAoY3NzX2Noc2NfY2hhcmFjdGVyaXN0aWNzLnNlY20pCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNzcy0+ZGV2aWNlLCAmZGV2X2F0dHJfY21fZW5hYmxlKTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmNzcy0+ZGV2aWNlKTsKKwl9CisJYnVzX3VucmVnaXN0ZXIoJmNzc19idXNfdHlwZSk7CisJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUyk7CisJY2hzY19mcmVlX3NlaV9hcmVhKCk7CisJaWRzZXRfZnJlZShzbG93X3N1YmNoYW5uZWxfc2V0KTsKKwlpc2NfdW5yZWdpc3RlcihJT19TQ0hfSVNDKTsKK30KKworc3RhdGljIGludCBfX2luaXQgY2hhbm5lbF9zdWJzeXN0ZW1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjc3NfYnVzX2luaXQoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaW9fc3ViY2hhbm5lbF9pbml0KCk7CisJaWYgKHJldCkKKwkJY3NzX2J1c19jbGVhbnVwKCk7CisKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKGNoYW5uZWxfc3Vic3lzdGVtX2luaXQpOworCitzdGF0aWMgaW50IGNzc19zZXR0bGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBjc3NfZHJpdmVyICpjc3NkcnYgPSB0b19jc3Nkcml2ZXIoZHJ2KTsKKworCWlmIChjc3NkcnYtPnNldHRsZSkKKwkJY3NzZHJ2LT5zZXR0bGUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhaXQgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBkZXZpY2VzIHRvIGZpbmlzaCwgdG8gbWFrZSBzdXJlIHdlIGFyZQorICogZG9uZSB3aXRoIG91ciBzZXR1cCBpZiB0aGUgc2VhcmNoIGZvciB0aGUgcm9vdCBkZXZpY2Ugc3RhcnRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBjaGFubmVsX3N1YnN5c3RlbV9pbml0X3N5bmModm9pZCkKK3sKKwkvKiBTdGFydCBpbml0aWFsIHN1YmNoYW5uZWwgZXZhbHVhdGlvbi4gKi8KKwljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKKwkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCisJd2FpdF9ldmVudChjc3NfZXZhbF93cSwgYXRvbWljX3JlYWQoJmNzc19ldmFsX3NjaGVkdWxlZCkgPT0gMCk7CisJLyogV2FpdCBmb3IgdGhlIHN1YmNoYW5uZWwgdHlwZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0byBmaW5pc2ggKi8KKwlyZXR1cm4gYnVzX2Zvcl9lYWNoX2RydigmY3NzX2J1c190eXBlLCBOVUxMLCBOVUxMLCBjc3Nfc2V0dGxlKTsKK30KK3N1YnN5c19pbml0Y2FsbF9zeW5jKGNoYW5uZWxfc3Vic3lzdGVtX2luaXRfc3luYyk7CisKIGludCBzY2hfaXNfcHNldWRvX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKQogewogCXJldHVybiBzY2ggPT0gdG9fY3NzKHNjaC0+ZGV2LnBhcmVudCktPnBzZXVkb19zdWJjaGFubmVsOwpAQCAtMTEzNSw3ICsxMTQxLDUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNzc19kcml2ZXJfdW5yZWdpc3Rlcik7CiAKLXN1YnN5c19pbml0Y2FsbChpbml0X2NoYW5uZWxfc3Vic3lzdGVtKTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogRVhQT1JUX1NZTUJPTChjc3NfYnVzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaCBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKaW5kZXggOTc2M2VlZS4uNjhkNmIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCkBAIC03NSw2ICs3NSw3IEBACiAgKiBAZnJlZXplOiBjYWxsYmFjayBmb3IgZnJlZXppbmcgZHVyaW5nIGhpYmVybmF0aW9uIHNuYXBzaG90dGluZwogICogQHRoYXc6IHVuZG8gd29yayBkb25lIGluIEBmcmVlemUKICAqIEByZXN0b3JlOiBjYWxsYmFjayBmb3IgcmVzdG9yaW5nIGFmdGVyIGhpYmVybmF0aW9uCisgKiBAc2V0dGxlOiB3YWl0IGZvciBhc3luY2hyb25vdXMgd29yayB0byBmaW5pc2gKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZXZpY2UgZHJpdmVyCiAgKi8KIHN0cnVjdCBjc3NfZHJpdmVyIHsKQEAgLTkyLDYgKzkzLDcgQEAKIAlpbnQgKCpmcmVlemUpKHN0cnVjdCBzdWJjaGFubmVsICopOwogCWludCAoKnRoYXcpIChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIAlpbnQgKCpyZXN0b3JlKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKKwl2b2lkICgqc2V0dGxlKSh2b2lkKTsKIAljb25zdCBjaGFyICpuYW1lOwogfTsKIApAQCAtMTA5LDYgKzExMSw3IEBACiBleHRlcm4gaW50IGNzc19wcm9iZV9kZXZpY2Uoc3RydWN0IHN1YmNoYW5uZWxfaWQpOwogZXh0ZXJuIHN0cnVjdCBzdWJjaGFubmVsICpnZXRfc3ViY2hhbm5lbF9ieV9zY2hpZChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCk7CiBleHRlcm4gaW50IGNzc19pbml0X2RvbmU7CitleHRlcm4gaW50IG1heF9zc2lkOwogaW50IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKGludCAoKmZuX2tub3duKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqLCB2b2lkICopLAogCQkJICAgICAgIGludCAoKmZuX3Vua25vd24pKHN0cnVjdCBzdWJjaGFubmVsX2lkLAogCQkJICAgICAgIHZvaWQgKiksIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggNjUyN2YzZi4uZjc4MGJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xMzEsNiArMTMxLDEwIEBACiBzdGF0aWMgaW50IGlvX3N1YmNoYW5uZWxfc2NoX2V2ZW50KHN0cnVjdCBzdWJjaGFubmVsICosIGludCk7CiBzdGF0aWMgaW50IGlvX3N1YmNoYW5uZWxfY2hwX2V2ZW50KHN0cnVjdCBzdWJjaGFubmVsICosIHN0cnVjdCBjaHBfbGluayAqLAogCQkJCSAgIGludCk7CitzdGF0aWMgdm9pZCByZWNvdmVyeV9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV93b3JrOword2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOworYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwogCiBzdGF0aWMgc3RydWN0IGNzc19kZXZpY2VfaWQgaW9fc3ViY2hhbm5lbF9pZHNbXSA9IHsKIAl7IC5tYXRjaF9mbGFncyA9IDB4MSwgLnR5cGUgPSBTVUJDSEFOTkVMX1RZUEVfSU8sIH0sCkBAIC0xNTEsNiArMTU1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlvX3N1YmNoYW5uZWxfc2V0dGxlKHZvaWQpCit7CisJd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCisJCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOworCWZsdXNoX3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOworfQorCiBzdGF0aWMgc3RydWN0IGNzc19kcml2ZXIgaW9fc3ViY2hhbm5lbF9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnN1YmNoYW5uZWxfdHlwZSA9IGlvX3N1YmNoYW5uZWxfaWRzLApAQCAtMTYyLDE2ICsxNzMsMTAgQEAKIAkucmVtb3ZlID0gaW9fc3ViY2hhbm5lbF9yZW1vdmUsCiAJLnNodXRkb3duID0gaW9fc3ViY2hhbm5lbF9zaHV0ZG93biwKIAkucHJlcGFyZSA9IGlvX3N1YmNoYW5uZWxfcHJlcGFyZSwKKwkuc2V0dGxlID0gaW9fc3ViY2hhbm5lbF9zZXR0bGUsCiB9OwogCi1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV93b3JrOwotd2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOwotYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwotCi1zdGF0aWMgdm9pZCByZWNvdmVyeV9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1pbml0X2Njd19idXNfdHlwZSAodm9pZCkKK2ludCBfX2luaXQgaW9fc3ViY2hhbm5lbF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtMTgxLDEwICsxODYsMTAgQEAKIAogCWNjd19kZXZpY2Vfd29yayA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjaW8iKTsKIAlpZiAoIWNjd19kZXZpY2Vfd29yaykKLQkJcmV0dXJuIC1FTk9NRU07IC8qIEZJWE1FOiBiZXR0ZXIgZXJybm8gPyAqLworCQlyZXR1cm4gLUVOT01FTTsKIAlzbG93X3BhdGhfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3Nsb3djcnciKTsKIAlpZiAoIXNsb3dfcGF0aF93cSkgewotCQlyZXQgPSAtRU5PTUVNOyAvKiBGSVhNRTogYmV0dGVyIGVycm5vID8gKi8KKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfZXJyOwogCX0KIAlpZiAoKHJldCA9IGJ1c19yZWdpc3RlciAoJmNjd19idXNfdHlwZSkpKQpAQCAtMTk0LDkgKzE5OSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZXJyOwogCi0Jd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCi0JCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOwotCWZsdXNoX3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOwogCXJldHVybiAwOwogb3V0X2VycjoKIAlpZiAoY2N3X2RldmljZV93b3JrKQpAQCAtMjA2LDE2ICsyMDgsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdAotY2xlYW51cF9jY3dfYnVzX3R5cGUgKHZvaWQpCi17Ci0JY3NzX2RyaXZlcl91bnJlZ2lzdGVyKCZpb19zdWJjaGFubmVsX2RyaXZlcik7Ci0JYnVzX3VucmVnaXN0ZXIoJmNjd19idXNfdHlwZSk7Ci0JZGVzdHJveV93b3JrcXVldWUoY2N3X2RldmljZV93b3JrKTsKLX0KLQotc3Vic3lzX2luaXRjYWxsKGluaXRfY2N3X2J1c190eXBlKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfY2N3X2J1c190eXBlKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiBkZXZpY2UgaGFuZGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IGUzOTc1MTAuLmVkMzlhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtNzQsNiArNzQsNyBAQAogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjY3dfZGV2aWNlX3dvcms7CiBleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOwogZXh0ZXJuIGF0b21pY190IGNjd19kZXZpY2VfaW5pdF9jb3VudDsKK2ludCBfX2luaXQgaW9fc3ViY2hhbm5lbF9pbml0KHZvaWQpOwogCiB2b2lkIGlvX3N1YmNoYW5uZWxfcmVjb2dfZG9uZShzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CiB2b2lkIGlvX3N1YmNoYW5uZWxfaW5pdF9jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmMKaW5kZXggY2Y4ZjI0YS4uNGQxMDk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9pZHNldC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuYwpAQCAtNzgsNyArNzgsNyBAQAogCiBzdHJ1Y3QgaWRzZXQgKmlkc2V0X3NjaF9uZXcodm9pZCkKIHsKLQlyZXR1cm4gaWRzZXRfbmV3KF9fTUFYX1NTSUQgKyAxLCBfX01BWF9TVUJDSEFOTkVMICsgMSk7CisJcmV0dXJuIGlkc2V0X25ldyhtYXhfc3NpZCArIDEsIF9fTUFYX1NVQkNIQU5ORUwgKyAxKTsKIH0KIAogdm9pZCBpZHNldF9zY2hfYWRkKHN0cnVjdCBpZHNldCAqc2V0LCBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCkKQEAgLTExMCwzICsxMTAsMjMgQEAKIAl9CiAJcmV0dXJuIHJjOwogfQorCitpbnQgaWRzZXRfaXNfZW1wdHkoc3RydWN0IGlkc2V0ICpzZXQpCit7CisJaW50IGJpdG51bTsKKworCWJpdG51bSA9IGZpbmRfZmlyc3RfYml0KHNldC0+Yml0bWFwLCBzZXQtPm51bV9zc2lkICogc2V0LT5udW1faWQpOworCWlmIChiaXRudW0gPj0gc2V0LT5udW1fc3NpZCAqIHNldC0+bnVtX2lkKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpZHNldF9hZGRfc2V0KHN0cnVjdCBpZHNldCAqdG8sIHN0cnVjdCBpZHNldCAqZnJvbSkKK3sKKwl1bnNpZ25lZCBsb25nIGksIGxlbjsKKworCWxlbiA9IG1pbihfX0JJVE9QU19XT1JEUyh0by0+bnVtX3NzaWQgKiB0by0+bnVtX2lkKSwKKwkJICBfX0JJVE9QU19XT1JEUyhmcm9tLT5udW1fc3NpZCAqIGZyb20tPm51bV9pZCkpOworCWZvciAoaSA9IDA7IGkgPCBsZW4gOyBpKyspCisJCXRvLT5iaXRtYXBbaV0gfD0gZnJvbS0+Yml0bWFwW2ldOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9pZHNldC5oIGIvZHJpdmVycy9zMzkwL2Npby9pZHNldC5oCmluZGV4IDUyODA2NWMuLjc1NDNkYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmgKQEAgLTIxLDUgKzIxLDcgQEAKIHZvaWQgaWRzZXRfc2NoX2RlbChzdHJ1Y3QgaWRzZXQgKnNldCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgaWQpOwogaW50IGlkc2V0X3NjaF9jb250YWlucyhzdHJ1Y3QgaWRzZXQgKnNldCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgaWQpOwogaW50IGlkc2V0X3NjaF9nZXRfZmlyc3Qoc3RydWN0IGlkc2V0ICpzZXQsIHN0cnVjdCBzdWJjaGFubmVsX2lkICppZCk7CitpbnQgaWRzZXRfaXNfZW1wdHkoc3RydWN0IGlkc2V0ICpzZXQpOwordm9pZCBpZHNldF9hZGRfc2V0KHN0cnVjdCBpZHNldCAqdG8sIHN0cnVjdCBpZHNldCAqZnJvbSk7CiAKICNlbmRpZiAvKiBTMzkwX0lEU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDlhZWY0MDIuLjRiZTZlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJaWYgKCghcS0+aXNfaW5wdXRfcSAmJgogCSAgICAocS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMCkpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLm91dGJvdW5kX3RhcmdldF9mdWxsKTsKLQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIk9VVEZVTEwgRlRDOiUzZCIsCisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJPVVRGVUxMIEZUQzolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQxOCw3ICs0MTgsNyBAQAogewogCWludCBuZXc7CiAKLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gcHJpbTogJTNkIiwgY291bnQpOworCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJpbiBwcmltOiAlMDJ4IiwgY291bnQpOwogCiAJLyogZm9yIFFFQlNNIHRoZSBBQ0sgd2FzIGFscmVhZHkgc2V0IGJ5IEVRQlMgKi8KIAlpZiAoaXNfcWVic20ocSkpIHsKQEAgLTQ1NSw2ICs0NTUsOCBAQAogCWNvdW50LS07CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuOworCS8qIG5lZWQgdG8gY2hhbmdlIEFMTCBidWZmZXJzIHRvIGdldCBtb3JlIGludGVycnVwdHMgKi8KKwlzZXRfYnVmX3N0YXRlcyhxLCBxLT5maXJzdF90b19jaGVjaywgU0xTQl9QX0lOUFVUX05PVF9JTklULCBjb3VudCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCkBAIC01NDUsNyArNTQ3LDcgQEAKIAkgKiBoYXMgKHByb2JhYmx5KSBub3QgbW92ZWQgKHNlZSBxZGlvX2luYm91bmRfcHJvY2Vzc2luZykuCiAJICovCiAJaWYgKGdldF91c2VjcygpID4gcS0+dS5pbi50aW1lc3RhbXAgKyBRRElPX0lOUFVUX1RIUkVTSE9MRCkgewotCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gZG9uZTolM2QiLAorCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gZG9uZTolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCkBAIC01NjUsMTEgKzU2NywxMCBAQAogCiAJaWYgKHEtPmlzX2lucHV0X3EpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcik7Ci0JCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOwotCX0gZWxzZSB7Ci0JCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IG5yOiUxZCIsIHEtPm5yKTsKLQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKLQl9CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolMDJ4IGM6JTAyeCIsIHN0YXJ0LCBjb3VudCk7CisJfSBlbHNlCisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IHM6JTAyeCBjOiUwMngiLAorCQkJICAgICAgc3RhcnQsIGNvdW50KTsKIAogCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKIAkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwpAQCAtNjMzLDcgKzYzNCw3IEBACiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgU0xTQl9QX09VVFBVVF9FTVBUWToKIAkJLyogdGhlIGFkYXB0ZXIgZ290IGl0ICovCi0JCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJvdXQgZW1wdHk6JTFkICUzZCIsIHEtPm5yLCBjb3VudCk7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJvdXQgZW1wdHk6JTFkICUwMngiLCBxLT5uciwgY291bnQpOwogCiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwpAQCAtMTQ4MSwxMCArMTQ4Miw5IEBACiAJZ2V0X2J1Zl9zdGF0ZShxLCBwcmV2X2J1ZihidWZuciksICZzdGF0ZSwgMCk7CiAJaWYgKHN0YXRlICE9IFNMU0JfQ1VfT1VUUFVUX1BSSU1FRCkKIAkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKLQllbHNlIHsKLQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImZhc3QtcmVxIik7CisJZWxzZQogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZmFzdF9yZXF1ZXVlKTsKLQl9CisKIG91dDoKIAl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAlyZXR1cm4gcmM7CkBAIC0xNTEwLDEyICsxNTEwLDggQEAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGNhbGxmbGFncyAmIFFESU9fRkxBR19TWU5DX0lOUFVUKQotCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBpcnFfcHRyLCAiZG9RRElPIGlucHV0Iik7Ci0JZWxzZQotCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBpcnFfcHRyLCAiZG9RRElPIG91dHB1dCIpOwotCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGlycV9wdHIsICJxOiUxZCBmbGFnOiU0eCIsIHFfbnIsIGNhbGxmbGFncyk7Ci0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgaXJxX3B0ciwgImJ1ZjolMmQgY250OiUzZCIsIGJ1Zm5yLCBjb3VudCk7CisJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgaXJxX3B0ciwKKwkJICAgICAgImRvJTAyeCBiOiUwMnggYzolMDJ4IiwgY2FsbGZsYWdzLCBidWZuciwgY291bnQpOwogCiAJaWYgKGlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX0FDVElWRSkKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCmluZGV4IDA5MGIzMmEuLjEyOTQ4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpAQCAtNjAsNiArNjAsNyBAQAogc3RhdGljIHZvaWQgYXBfaW50ZXJydXB0X2hhbmRsZXIodm9pZCAqdW51c2VkMSwgdm9pZCAqdW51c2VkMik7CiBzdGF0aWMgdm9pZCBhcF9yZXNldChzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOwogc3RhdGljIHZvaWQgYXBfY29uZmlnX3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpOworc3RhdGljIGludCBhcF9zZWxlY3RfZG9tYWluKHZvaWQpOwogCiAvKgogICogTW9kdWxlIGRlc2NyaXB0aW9uLgpAQCAtMTA5LDYgKzExMCwxMCBAQAogCiAvKiBTdXNwZW5kIGZsYWcgKi8KIHN0YXRpYyBpbnQgYXBfc3VzcGVuZF9mbGFnOworLyogRmxhZyB0byBjaGVjayBpZiBkb21haW4gd2FzIHNldCB0aHJvdWdoIG1vZHVsZSBwYXJhbWV0ZXIgZG9tYWluPS4gVGhpcyBpcworICogaW1wb3J0YW50IHdoZW4gc3Vwc2VuZCBhbmQgcmVzdW1lIGlzIGRvbmUgaW4gYSB6L1ZNIGVudmlyb25tZW50IHdoZXJlIHRoZQorICogZG9tYWluIG1pZ2h0IGNoYW5nZS4gKi8KK3N0YXRpYyBpbnQgdXNlcl9zZXRfZG9tYWluID0gMDsKIHN0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgYXBfYnVzX3R5cGU7CiAKIC8qKgpAQCAtNjQzLDYgKzY0OCw3IEBACiAJCQlkZXN0cm95X3dvcmtxdWV1ZShhcF93b3JrX3F1ZXVlKTsKIAkJCWFwX3dvcmtfcXVldWUgPSBOVUxMOwogCQl9CisKIAkJdGFza2xldF9kaXNhYmxlKCZhcF90YXNrbGV0KTsKIAl9CiAJLyogUG9sbCBvbiB0aGUgZGV2aWNlIHVudGlsIGFsbCByZXF1ZXN0cyBhcmUgZmluaXNoZWQuICovCkBAIC02NTMsNyArNjU5LDEwIEBACiAJCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOwogCX0gd2hpbGUgKChmbGFncyAmIDEpIHx8IChmbGFncyAmIDIpKTsKIAotCWFwX2RldmljZV9yZW1vdmUoZGV2KTsKKwlzcGluX2xvY2tfYmgoJmFwX2Rldi0+bG9jayk7CisJYXBfZGV2LT51bnJlZ2lzdGVyZWQgPSAxOworCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2NiwxMSArNjc1LDEwIEBACiAJCWFwX3N1c3BlbmRfZmxhZyA9IDA7CiAJCWlmICghYXBfaW50ZXJydXB0c19hdmFpbGFibGUoKSkKIAkJCWFwX2ludGVycnVwdF9pbmRpY2F0b3IgPSBOVUxMOwotCQlhcF9kZXZpY2VfcHJvYmUoZGV2KTsKLQkJYXBfcmVzZXQoYXBfZGV2KTsKLQkJc2V0dXBfdGltZXIoJmFwX2Rldi0+dGltZW91dCwgYXBfcmVxdWVzdF90aW1lb3V0LAotCQkJICAgICh1bnNpZ25lZCBsb25nKSBhcF9kZXYpOwotCQlhcF9zY2FuX2J1cyhOVUxMKTsKKwkJaWYgKCF1c2VyX3NldF9kb21haW4pIHsKKwkJCWFwX2RvbWFpbl9pbmRleCA9IC0xOworCQkJYXBfc2VsZWN0X2RvbWFpbigpOworCQl9CiAJCWluaXRfdGltZXIoJmFwX2NvbmZpZ190aW1lcik7CiAJCWFwX2NvbmZpZ190aW1lci5mdW5jdGlvbiA9IGFwX2NvbmZpZ190aW1lb3V0OwogCQlhcF9jb25maWdfdGltZXIuZGF0YSA9IDA7CkBAIC02ODYsMTIgKzY5NCwxNCBAQAogCQkJdGFza2xldF9zY2hlZHVsZSgmYXBfdGFza2xldCk7CiAJCWlmIChhcF90aHJlYWRfZmxhZykKIAkJCXJjID0gYXBfcG9sbF90aHJlYWRfc3RhcnQoKTsKLQl9IGVsc2UgewotCQlhcF9kZXZpY2VfcHJvYmUoZGV2KTsKLQkJYXBfcmVzZXQoYXBfZGV2KTsKLQkJc2V0dXBfdGltZXIoJmFwX2Rldi0+dGltZW91dCwgYXBfcmVxdWVzdF90aW1lb3V0LAotCQkJICAgICh1bnNpZ25lZCBsb25nKSBhcF9kZXYpOwogCX0KKwlpZiAoQVBfUUlEX1FVRVVFKGFwX2Rldi0+cWlkKSAhPSBhcF9kb21haW5faW5kZXgpIHsKKwkJc3Bpbl9sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworCQlhcF9kZXYtPnFpZCA9IEFQX01LUUlEKEFQX1FJRF9ERVZJQ0UoYXBfZGV2LT5xaWQpLAorCQkJCSAgICAgICBhcF9kb21haW5faW5kZXgpOworCQlzcGluX3VubG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKKwl9CisJcXVldWVfd29yayhhcF93b3JrX3F1ZXVlLCAmYXBfY29uZmlnX3dvcmspOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTA3OSw2ICsxMDg5LDggQEAKIAkJCXNwaW5fbG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKIAkJCWlmIChyYyB8fCBhcF9kZXYtPnVucmVnaXN0ZXJlZCkgewogCQkJCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworCQkJCWlmIChhcF9kZXYtPnVucmVnaXN0ZXJlZCkKKwkJCQkJaS0tOwogCQkJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJCQkJcHV0X2RldmljZShkZXYpOwogCQkJCWNvbnRpbnVlOwpAQCAtMTU4Niw2ICsxNTk4LDEyIEBACiAJCQkgICBhcF9kb21haW5faW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJLyogSW4gcmVzdW1lIGNhbGxiYWNrIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgdXNlciBoYWQgc2V0IHRoZSBkb21haW4uCisJICogSWYgc28sIHdlIGNhbiBub3QganVzdCByZXNldCBpdC4KKwkgKi8KKwlpZiAoYXBfZG9tYWluX2luZGV4ID49IDApCisJCXVzZXJfc2V0X2RvbWFpbiA9IDE7CisKIAlpZiAoYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpICE9IDApIHsKIAkJcHJfd2FybmluZygiVGhlIGhhcmR3YXJlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0ICIKIAkJCSAgICJBUCBpbnN0cnVjdGlvbnNcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCBhNGIyYzU3Li5jODRlYWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMjExMyw3ICsyMTEzLDcgQEAKIAlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAKICAgICAgICAgaWYgKGNvdW50ID49IElGTkFNU0laKQotICAgICAgICAgICAgICAgIGNvdW50ID0gSUZOQU1TSVogLSAxOzsKKyAgICAgICAgICAgICAgICBjb3VudCA9IElGTkFNU0laIC0gMTsKIAogCWZvciAoaSA9IDAsIHAgPSBidWY7IGkgPCBjb3VudCAmJiAqcDsgaSsrLCBwKyspIHsKIAkJaWYgKCpwID09ICdcbicgfHwgKnAgPT0gJyAnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCAzZmY3MjZhLi4wZTFhMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJaWYgKHVubGlrZWx5KChzdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkgfHwKIAkJICAgICAhKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSkpIHsKIAkJemZjcF9zY3NpX2NvbW1hbmRfZmFpbChzY3BudCwgRElEX0VSUk9SKTsKLQkJcmV0dXJuIDA7OworCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXQgPSB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2sodW5pdCwgc2NwbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jCmluZGV4IDZkNDY1MTYuLjg2OWEzMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UganNmX2RldiA9IHsgSlNGX01JTk9SLCAianNmbGFzaCIsICZqc2ZfZm9wcyB9OwogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGpzZmRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMganNmZF9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwppbmRleCBlNmYyYmI3Li44ZGZiNTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwpAQCAtNTIyMyw3ICs1MjIzLDcgQEAKIAogCS8qCiAJICogU2V0dXAgdGhlIGFsbG93ZWQgU0NTSSBTZXF1ZW5jZXMgYmFzZWQgb24gb3BlcmF0aW9uYWwgbW9kZS4KLQkgKiBJZiB3ZSBhcmUgYSB0YXJnZXQsIHdlJ2xsIGVuYWxiZSBzZWxlY3QgaW4gb3BlcmF0aW9ucyBvbmNlCisJICogSWYgd2UgYXJlIGEgdGFyZ2V0LCB3ZSdsbCBlbmFibGUgc2VsZWN0IGluIG9wZXJhdGlvbnMgb25jZQogCSAqIHdlJ3ZlIGhhZCBhIGx1biBlbmFibGVkLgogCSAqLwogCXNjc2lzZXFfdGVtcGxhdGUgPSBFTlNFTE98RU5BVVRPQVROT3xFTkFVVE9BVE5QOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCmluZGV4IDkwNmNlZjUuLjQxZTFiMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKQEAgLTEzNDAsNyArMTM0MCw3IEBACiAJcmVzcF9oZHItPm9wY29kZSA9IGxvZ2luLT5vcF9jb2RlOwogCXJlc3BfaGRyLT5mbGFncyA9IGxvZ2luLT5yZXNwb25zZV9mbGFnczsKIAlyZXNwX2hkci0+bWF4X3ZlcnNpb24gPSBsb2dpbi0+dmVyc2lvbl9tYXg7Ci0JcmVzcF9oZHItPmFjdGl2ZV92ZXJzaW9uID0gbG9naW4tPnZlcnNpb25fYWN0aXZlOzsKKwlyZXNwX2hkci0+YWN0aXZlX3ZlcnNpb24gPSBsb2dpbi0+dmVyc2lvbl9hY3RpdmU7CiAJcmVzcF9oZHItPmhsZW5ndGggPSAwOwogCiAJaHRvbjI0KHJlc3BfaGRyLT5kbGVuZ3RoLCBsb2dpbi0+ZGF0YV9sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCmluZGV4IDYyYTRjMjAuLjExYWU1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCmluZGV4IDk5Mjg3MDQuLmQ5YjBlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vdmlvLmg+Ci0jaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCmluZGV4IDlkZjdlZDMuLjlhMWJkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAJCXZwb3J0LT5jdF9mbGFncyAmPSB+RkNfQ1RfUkZGX0lEOwogCQlDdFJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwID0KIAkJICAgIGJlMTZfdG9fY3B1KFNMSV9DVE5TX1JGRl9JRCk7Ci0JCUN0UmVxLT51bi5yZmYuUG9ydElkID0gY3B1X3RvX2JlMzIodnBvcnQtPmZjX215RElEKTs7CisJCUN0UmVxLT51bi5yZmYuUG9ydElkID0gY3B1X3RvX2JlMzIodnBvcnQtPmZjX215RElEKTsKIAkJQ3RSZXEtPnVuLnJmZi5mYml0cyA9IEZDNF9GRUFUVVJFX0lOSVQ7CiAJCUN0UmVxLT51bi5yZmYudHlwZV9jb2RlID0gRkNfRkNQX0RBVEE7CiAJCWNtcGwgPSBscGZjX2NtcGxfY3RfY21kX3JmZl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCA3ZGMzZDE4Li5hMzlhZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC03MTgsNyArNzE4LDcgQEAKICAqIG1lZ2FzYXNfYnVpbGRfbGRpbyAtCVByZXBhcmVzIElPcyB0byBsb2dpY2FsIGRldmljZXMKICAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQogICogQHNjcDoJCVNDU0kgY29tbWFuZAotICogQGNtZDoJCUNvbW1hbmQgdG8gdG8gYmUgcHJlcGFyZWQKKyAqIEBjbWQ6CQlDb21tYW5kIHRvIGJlIHByZXBhcmVkCiAgKgogICogRnJhbWVzIChhbmQgYWNjb21wYW55aW5nIFNHTHMpIGZvciByZWd1bGFyIFNDU0kgSU9zIHVzZSB0aGlzIGZ1bmN0aW9uLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCmluZGV4IDQwZTNjYWYuLjgzYzhiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCkBAIC0xNDIyLDcgKzE0MjIsNyBAQAogLyoqCiAgKiBxbGE0eHh4X2RlbF9mcm9tX2FjdGl2ZV9hcnJheSAtIHJldHVybnMgYW4gYWN0aXZlIHNyYgogICogQGhhOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCi0gKiBAaW5kZXg6IGluZGV4IGludG8gdG8gdGhlIGFjdGl2ZV9hcnJheQorICogQGluZGV4OiBpbmRleCBpbnRvIHRoZSBhY3RpdmVfYXJyYXkKICAqCiAgKiBUaGlzIHJvdXRpbmUgcmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgc3JiIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgKICAqKi8KQEAgLTE1MDAsNyArMTUwMCw3IEBACiAKIC8qKgogICogcWxhNHh4eF9laF93YWl0X2Zvcl9jb21tYW5kcyAtIHdhaXQgZm9yIGFjdGl2ZSBjbWRzIHRvIGZpbmlzaC4KLSAqIEBoYTogcG9pbnRlciB0byB0byBIQkEKKyAqIEBoYTogcG9pbnRlciB0byBIQkEKICAqIEB0OiB0YXJnZXQgaWQKICAqIEBsOiBsdW4gaWQKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IGE4OWM0MjEuLjhkZDk2ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC05NTYsNyArOTU2LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHNkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHNkX2ZvcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gc2Rfb3BlbiwKIAkucmVsZWFzZQkJPSBzZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA0OTY4YzRjLi44NDhiNTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMjIzMyw3ICsyMjMzLDcgQEAKIAkub3BlbiA9IHNnX3Byb2Nfb3Blbl9kZXYsCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07Ci1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBkZXZfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IGRldl9zZXFfbmV4dCwKIAkuc3RvcCAgPSBkZXZfc2VxX3N0b3AsCkBAIC0yMjQ2LDcgKzIyNDYsNyBAQAogCS5vcGVuID0gc2dfcHJvY19vcGVuX2RldnN0cnMsCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07Ci1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldnN0cnNfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGV2c3Ryc19zZXFfb3BzID0gewogCS5zdGFydCA9IGRldl9zZXFfc3RhcnQsCiAJLm5leHQgID0gZGV2X3NlcV9uZXh0LAogCS5zdG9wICA9IGRldl9zZXFfc3RvcCwKQEAgLTIyNTksNyArMjI1OSw3IEBACiAJLm9wZW4gPSBzZ19wcm9jX29wZW5fZGVidWcsCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07Ci1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRlYnVnX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRlYnVnX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gZGV2X3NlcV9zdGFydCwKIAkubmV4dCAgPSBkZXZfc2VxX25leHQsCiAJLnN0b3AgID0gZGV2X3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCBjY2UwZmU0Li5lYjYxZjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNTI1LDcgKzUyNSw3IEBACiAJcmV0dXJuIGNkcm9tX21lZGlhX2NoYW5nZWQoJmNkLT5jZGkpOwogfQogCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHNyX2Jkb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgc3JfYmRvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBzcl9ibG9ja19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggY2I2ZDg1ZC4uMWUzZDE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2VyaWFsMjEyODVfcnhfY2hhcnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIHJ4cywgbWF4X2NvdW50ID0gMjU2OwogCiAJc3RhdHVzID0gKkNTUl9VQVJURkxHOwpAQCAtMTI0LDcgKzEyNCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2VyaWFsMjEyODVfdHhfY2hhcnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCWludCBjb3VudCA9IDI1NjsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKQEAgLTIzNSw4ICsyMzUsOCBAQAogCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsgCiAJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CiAKLQlpZiAocG9ydC0+aW5mbyAmJiBwb3J0LT5pbmZvLT5wb3J0LnR0eSkgewotCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJaWYgKHBvcnQtPnN0YXRlICYmIHBvcnQtPnN0YXRlLT5wb3J0LnR0eSkgeworCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCQl1bnNpZ25lZCBpbnQgYiA9IHBvcnQtPnVhcnRjbGsgLyAoMTYgKiBxdW90KTsKIAkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiLCBiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggZmI4NjdhOS4uMjIwOTYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTM4Miw3ICsxMzgyLDcgQEAKIHN0YXRpYyB2b2lkCiByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIHVuc2lnbmVkIGludCAqc3RhdHVzKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGNoYXIgY2gsIGxzciA9ICpzdGF0dXM7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKIAljaGFyIGZsYWc7CkBAIC0xNDU3LDcgKzE0NTcsNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAodXAtPnBvcnQueF9jaGFyKSB7CkBAIC0xNTAwLDcgKzE1MDAsNyBAQAogCXN0YXR1cyB8PSB1cC0+bXNyX3NhdmVkX2ZsYWdzOwogCXVwLT5tc3Jfc2F2ZWRfZmxhZ3MgPSAwOwogCWlmIChzdGF0dXMgJiBVQVJUX01TUl9BTllfREVMVEEgJiYgdXAtPmllciAmIFVBUlRfSUVSX01TSSAmJgotCSAgICB1cC0+cG9ydC5pbmZvICE9IE5VTEwpIHsKKwkgICAgdXAtPnBvcnQuc3RhdGUgIT0gTlVMTCkgewogCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfVEVSSSkKIAkJCXVwLT5wb3J0Lmljb3VudC5ybmcrKzsKIAkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0REU1IpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQAogCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENUUykKIAkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVwLT5wb3J0LCBzdGF0dXMgJiBVQVJUX01TUl9DVFMpOwogCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnVwLT5saXN0KTsKIAkJaS0+aGVhZCA9ICZ1cC0+bGlzdDsKIAkJc3Bpbl91bmxvY2tfaXJxKCZpLT5sb2NrKTsKLQorCQlpcnFfZmxhZ3MgfD0gdXAtPnBvcnQuaXJxZmxhZ3M7CiAJCXJldCA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSwgc2VyaWFsODI1MF9pbnRlcnJ1cHQsCiAJCQkJICBpcnFfZmxhZ3MsICJzZXJpYWwiLCBpKTsKIAkJaWYgKHJldCA8IDApCkBAIC0xNzY0LDcgKzE3NjQsNyBAQAogCXVwLT5sc3Jfc2F2ZWRfZmxhZ3MgfD0gbHNyICYgTFNSX1NBVkVfRkxBR1M7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCWlmICgoaWlyICYgVUFSVF9JSVJfTk9fSU5UKSAmJiAodXAtPmllciAmIFVBUlRfSUVSX1RIUkkpICYmCi0JICAgICghdWFydF9jaXJjX2VtcHR5KCZ1cC0+cG9ydC5pbmZvLT54bWl0KSB8fCB1cC0+cG9ydC54X2NoYXIpICYmCisJICAgICghdWFydF9jaXJjX2VtcHR5KCZ1cC0+cG9ydC5zdGF0ZS0+eG1pdCkgfHwgdXAtPnBvcnQueF9jaGFyKSAmJgogCSAgICAobHNyICYgVUFSVF9MU1JfVEhSRSkpIHsKIAkJaWlyICY9IH4oVUFSVF9JSVJfSUQgfCBVQVJUX0lJUl9OT19JTlQpOwogCQlpaXIgfD0gVUFSVF9JSVJfVEhSSTsKQEAgLTIwMjYsNyArMjAyNiw3IEBACiAJCSAqIGFsbG93IHJlZ2lzdGVyIGNoYW5nZXMgdG8gYmVjb21lIHZpc2libGUuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwotCQlpZiAodXAtPnBvcnQuZmxhZ3MgJiBVUEZfU0hBUkVfSVJRKQorCQlpZiAodXAtPnBvcnQuaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkKIAkJCWRpc2FibGVfaXJxX25vc3luYyh1cC0+cG9ydC5pcnEpOwogCiAJCXdhaXRfZm9yX3htaXRyKHVwLCBVQVJUX0xTUl9USFJFKTsKQEAgLTIwMzksNyArMjAzOSw3IEBACiAJCWlpciA9IHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpOwogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgMCk7CiAKLQkJaWYgKHVwLT5wb3J0LmZsYWdzICYgVVBGX1NIQVJFX0lSUSkKKwkJaWYgKHVwLT5wb3J0LmlycWZsYWdzICYgSVJRRl9TSEFSRUQpCiAJCQllbmFibGVfaXJxKHVwLT5wb3J0LmlycSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIApAQCAtMjI3Miw3ICsyMjcyLDkgQEAKIAkvKgogCSAqIEFzayB0aGUgY29yZSB0byBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgZm9yIHVzLgogCSAqLwotCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAxNiAvIDB4ZmZmZiwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAxNik7CiAJcXVvdCA9IHNlcmlhbDgyNTBfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CiAKIAkvKgpAQCAtMjY3MSw2ICsyNjczLDcgQEAKIAkgICAgIGkrKywgdXArKykgewogCQl1cC0+cG9ydC5pb2Jhc2UgICA9IG9sZF9zZXJpYWxfcG9ydFtpXS5wb3J0OwogCQl1cC0+cG9ydC5pcnEgICAgICA9IGlycV9jYW5vbmljYWxpemUob2xkX3NlcmlhbF9wb3J0W2ldLmlycSk7CisJCXVwLT5wb3J0LmlycWZsYWdzID0gb2xkX3NlcmlhbF9wb3J0W2ldLmlycWZsYWdzOwogCQl1cC0+cG9ydC51YXJ0Y2xrICA9IG9sZF9zZXJpYWxfcG9ydFtpXS5iYXVkX2Jhc2UgKiAxNjsKIAkJdXAtPnBvcnQuZmxhZ3MgICAgPSBvbGRfc2VyaWFsX3BvcnRbaV0uZmxhZ3M7CiAJCXVwLT5wb3J0Lmh1YjYgICAgID0gb2xkX3NlcmlhbF9wb3J0W2ldLmh1YjY7CkBAIC0yNjc5LDcgKzI2ODIsNyBAQAogCQl1cC0+cG9ydC5yZWdzaGlmdCA9IG9sZF9zZXJpYWxfcG9ydFtpXS5pb21lbV9yZWdfc2hpZnQ7CiAJCXNldF9pb19mcm9tX3VwaW8oJnVwLT5wb3J0KTsKIAkJaWYgKHNoYXJlX2lycXMpCi0JCQl1cC0+cG9ydC5mbGFncyB8PSBVUEZfU0hBUkVfSVJROworCQkJdXAtPnBvcnQuaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJfQogfQogCkBAIC0yODY5LDYgKzI4NzIsNyBAQAogCXAtPmlvYmFzZSAgICAgICA9IHBvcnQtPmlvYmFzZTsKIAlwLT5tZW1iYXNlICAgICAgPSBwb3J0LT5tZW1iYXNlOwogCXAtPmlycSAgICAgICAgICA9IHBvcnQtPmlycTsKKwlwLT5pcnFmbGFncyAgICAgPSBwb3J0LT5pcnFmbGFnczsKIAlwLT51YXJ0Y2xrICAgICAgPSBwb3J0LT51YXJ0Y2xrOwogCXAtPmZpZm9zaXplICAgICA9IHBvcnQtPmZpZm9zaXplOwogCXAtPnJlZ3NoaWZ0ICAgICA9IHBvcnQtPnJlZ3NoaWZ0OwpAQCAtMjk0Miw2ICsyOTQ2LDcgQEAKIAkJcG9ydC5pb2Jhc2UJCT0gcC0+aW9iYXNlOwogCQlwb3J0Lm1lbWJhc2UJCT0gcC0+bWVtYmFzZTsKIAkJcG9ydC5pcnEJCT0gcC0+aXJxOworCQlwb3J0LmlycWZsYWdzCQk9IHAtPmlycWZsYWdzOwogCQlwb3J0LnVhcnRjbGsJCT0gcC0+dWFydGNsazsKIAkJcG9ydC5yZWdzaGlmdAkJPSBwLT5yZWdzaGlmdDsKIAkJcG9ydC5pb3R5cGUJCT0gcC0+aW90eXBlOwpAQCAtMjk1NCw3ICsyOTU5LDcgQEAKIAkJcG9ydC5zZXJpYWxfb3V0CQk9IHAtPnNlcmlhbF9vdXQ7CiAJCXBvcnQuZGV2CQk9ICZkZXYtPmRldjsKIAkJaWYgKHNoYXJlX2lycXMpCi0JCQlwb3J0LmZsYWdzIHw9IFVQRl9TSEFSRV9JUlE7CisJCQlwb3J0LmlycWZsYWdzIHw9IElSUUZfU0hBUkVEOwogCQlyZXQgPSBzZXJpYWw4MjUwX3JlZ2lzdGVyX3BvcnQoJnBvcnQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgcG9ydCBhdCBpbmRleCAlZCAiCkBAIC0zMDk2LDYgKzMxMDEsNyBAQAogCQl1YXJ0LT5wb3J0LmlvYmFzZSAgICAgICA9IHBvcnQtPmlvYmFzZTsKIAkJdWFydC0+cG9ydC5tZW1iYXNlICAgICAgPSBwb3J0LT5tZW1iYXNlOwogCQl1YXJ0LT5wb3J0LmlycSAgICAgICAgICA9IHBvcnQtPmlycTsKKwkJdWFydC0+cG9ydC5pcnFmbGFncyAgICAgPSBwb3J0LT5pcnFmbGFnczsKIAkJdWFydC0+cG9ydC51YXJ0Y2xrICAgICAgPSBwb3J0LT51YXJ0Y2xrOwogCQl1YXJ0LT5wb3J0LmZpZm9zaXplICAgICA9IHBvcnQtPmZpZm9zaXplOwogCQl1YXJ0LT5wb3J0LnJlZ3NoaWZ0ICAgICA9IHBvcnQtPnJlZ3NoaWZ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5oIGIvZHJpdmVycy9zZXJpYWwvODI1MC5oCmluZGV4IDUyMDI2MDMuLjZlMTllYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuaAorKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGlvX3R5cGU7CiAJdW5zaWduZWQgY2hhciAqaW9tZW1fYmFzZTsKIAl1bnNpZ25lZCBzaG9ydCBpb21lbV9yZWdfc2hpZnQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKaW5kZXggNThhNDg3OS4uNDI5YThhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAKIHN0YXRpYyB2b2lkIHBsMDEwX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIHJzciwgbWF4X2NvdW50ID0gMjU2OwogCiAJc3RhdHVzID0gcmVhZGIodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBzdGF0aWMgdm9pZCBwbDAxMF90eF9jaGFycyhzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAodWFwLT5wb3J0LnhfY2hhcikgewpAQCAtMjI1LDcgKzIyNSw3IEBACiAJaWYgKGRlbHRhICYgVUFSVDAxeF9GUl9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVhcC0+cG9ydCwgc3RhdHVzICYgVUFSVDAxeF9GUl9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1YXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWFwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHBsMDEwX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKaW5kZXggNzJiYTBjNi4uZWY3YWRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyB2b2lkIHBsMDExX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZsYWcsIG1heF9jb3VudCA9IDI1NjsKIAogCXN0YXR1cyA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9GUik7CkBAIC0xNzUsNyArMTc1LDcgQEAKIAogc3RhdGljIHZvaWQgcGwwMTFfdHhfY2hhcnMoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaW50IGNvdW50OwogCiAJaWYgKHVhcC0+cG9ydC54X2NoYXIpIHsKQEAgLTIyNiw3ICsyMjYsNyBAQAogCWlmIChkZWx0YSAmIFVBUlQwMXhfRlJfQ1RTKQogCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKCZ1YXAtPnBvcnQsIHN0YXR1cyAmIFVBUlQwMXhfRlJfQ1RTKTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWFwLT5wb3J0LmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVhcC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBwbDAxMV9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwppbmRleCA2MDdkNDNhLi4zNTUxYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGF0bWVsX3R4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJaWYgKHBvcnQtPnhfY2hhciAmJiBVQVJUX0dFVF9DU1IocG9ydCkgJiBBVE1FTF9VU19UWFJEWSkgewogCQlVQVJUX1BVVF9DSEFSKHBvcnQsIHBvcnQtPnhfY2hhcik7CkBAIC01NjAsNyArNTYwLDcgQEAKIHN0YXRpYyB2b2lkIGF0bWVsX3R4X2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSB0b19hdG1lbF91YXJ0X3BvcnQocG9ydCk7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCXN0cnVjdCBhdG1lbF9kbWFfYnVmZmVyICpwZGMgPSAmYXRtZWxfcG9ydC0+cGRjX3R4OwogCWludCBjb3VudDsKIApAQCAtNjYzLDE0ICs2NjMsMTQgQEAKIAkgKiB1YXJ0X3N0YXJ0KCksIHdoaWNoIHRha2VzIHRoZSBsb2NrLgogCSAqLwogCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKLQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5pbmZvLT5wb3J0LnR0eSk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+c3RhdGUtPnBvcnQudHR5KTsKIAlzcGluX2xvY2soJnBvcnQtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBhdG1lbF9yeF9mcm9tX2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSB0b19hdG1lbF91YXJ0X3BvcnQocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJc3RydWN0IGF0bWVsX2RtYV9idWZmZXIgKnBkYzsKIAlpbnQgcnhfaWR4ID0gYXRtZWxfcG9ydC0+cGRjX3J4X2lkeDsKIAl1bnNpZ25lZCBpbnQgaGVhZDsKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQlpZiAoc3RhdHVzX2NoYW5nZSAmIEFUTUVMX1VTX0NUUykKIAkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwgIShzdGF0dXMgJiBBVE1FTF9VU19DVFMpKTsKIAotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkJYXRtZWxfcG9ydC0+aXJxX3N0YXR1c19wcmV2ID0gc3RhdHVzOwogCX0KQEAgLTc5NSw3ICs3OTUsNyBAQAogc3RhdGljIGludCBhdG1lbF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IHRvX2F0bWVsX3VhcnRfcG9ydChwb3J0KTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAlpbnQgcmV0dmFsOwogCiAJLyoKQEAgLTg1NCw3ICs4NTQsNyBAQAogCX0KIAlpZiAoYXRtZWxfdXNlX2RtYV90eChwb3J0KSkgewogCQlzdHJ1Y3QgYXRtZWxfZG1hX2J1ZmZlciAqcGRjID0gJmF0bWVsX3BvcnQtPnBkY190eDsKLQkJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCQlwZGMtPmJ1ZiA9IHhtaXQtPmJ1ZjsKIAkJcGRjLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHBvcnQtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCmluZGV4IGI0YTc2NTAuLjUwYWJiN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwpAQCAtNDIsNiArNDIsMTAgQEAKICMgdW5kZWYgQ09ORklHX0VBUkxZX1BSSU5USwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFCisjIHVuZGVmIENPTkZJR19FQVJMWV9QUklOVEsKKyNlbmRpZgorCiAvKiBVQVJUIG5hbWUgYW5kIGRldmljZSBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBCRklOX1NFUklBTF9OQU1FCSJ0dHlCRiIKICNkZWZpbmUgQkZJTl9TRVJJQUxfTUFKT1IJMjA0CkBAIC0xNDAsNyArMTQ0LDcgQEAKIHsKIAlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKXBvcnQ7CiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0LT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcnQtPnBvcnQuc3RhdGUtPnhtaXQ7CiAjZW5kaWYKIAogCXdoaWxlICghKFVBUlRfR0VUX0xTUih1YXJ0KSAmIFRFTVQpKQpAQCAtMTY3LDcgKzE3MSw3IEBACiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICopcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdWFydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdWFydC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMKIAlpZiAodWFydC0+c2N0cyAmJiAhKGJmaW5fc2VyaWFsX2dldF9tY3RybCgmdWFydC0+cG9ydCkgJiBUSU9DTV9DVFMpKSB7CkBAIC0yMzksMTAgKzI0MywxMCBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQlpZiAoIXVhcnQtPnBvcnQuaW5mbyB8fCAhdWFydC0+cG9ydC5pbmZvLT5wb3J0LnR0eSkKKwlpZiAoIXVhcnQtPnBvcnQuc3RhdGUgfHwgIXVhcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5KQogCQlyZXR1cm47CiAjZW5kaWYKLQl0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnBvcnQudHR5OworCXR0eSA9IHVhcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJaWYgKEFOT01BTFlfMDUwMDAzNjMpIHsKIAkJLyogVGhlIEJGNTMzIChhbmQgQkY1NjEpIGZhbWlseSBvZiBwcm9jZXNzb3JzIGhhdmUgYSBuaWNlIGFub21hbHkKQEAgLTMyNyw3ICszMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF90eF9jaGFycyhzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0LT5wb3J0LnN0YXRlLT54bWl0OwogCiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQoJnVhcnQtPnBvcnQpKSB7CiAjaWZkZWYgQ09ORklHX0JGNTR4CkBAIC0zOTQsNyArMzk4LDcgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BCiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9kbWFfdHhfY2hhcnMoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVhcnQtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFydC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAogCXVhcnQtPnR4X2RvbmUgPSAwOwogCkBAIC00MzIsNyArNDM2LDcgQEAKIAogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfZG1hX3J4X2NoYXJzKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAlpbnQgaSwgZmxnLCBzdGF0dXM7CiAKIAlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7CkBAIC01MjUsNyArNTI5LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBiZmluX3NlcmlhbF9kbWFfdHhfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IGRldl9pZDsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0LT5wb3J0LnN0YXRlLT54bWl0OwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0hBUkRfQ1RTUlRTCiAJaWYgKHVhcnQtPnNjdHMgJiYgIShiZmluX3NlcmlhbF9nZXRfbWN0cmwoJnVhcnQtPnBvcnQpJlRJT0NNX0NUUykpIHsKQEAgLTk2MSwxMCArOTY1LDEwIEBACiAJaW50IGxpbmUgPSBwb3J0LT5saW5lOwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAotCWlmIChsaW5lID49IHBvcnQtPmluZm8tPnBvcnQudHR5LT5kcml2ZXItPm51bSkKKwlpZiAobGluZSA+PSBwb3J0LT5zdGF0ZS0+cG9ydC50dHktPmRyaXZlci0+bnVtKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKHBvcnQtPmluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2xpbmUpIHsKKwlzd2l0Y2ggKHBvcnQtPnN0YXRlLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19saW5lKSB7CiAJY2FzZSBOX0lSREE6CiAJCXZhbCA9IFVBUlRfR0VUX0dDVEwoJmJmaW5fc2VyaWFsX3BvcnRzW2xpbmVdKTsKIAkJdmFsIHw9IChJUkVOIHwgUlBPTEMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwppbmRleCBjMTA4YjFhLi4wODhiYjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3BvcnRfdWFydF9yeF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gZGV2X2lkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBjaDsKIAogCWRvIHsKQEAgLTIwNSw3ICsyMDUsNyBAQAogc3RhdGljIGlycXJldHVybl90IHNwb3J0X3VhcnRfZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHN0YXQgPSBTUE9SVF9HRVRfU1RBVCh1cCk7CiAKIAkvKiBPdmVyZmxvdyBpbiBSWCBGSUZPICovCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogc3RhdGljIHZvaWQgc3BvcnRfdWFydF90eF9jaGFycyhzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlpZiAoU1BPUlRfR0VUX1NUQVQodXApICYgVFhGKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jIGIvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYwppbmRleCA4MGU3NjQyLi5iNmFjZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKQEAgLTkzLDcgKzkzLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjbHBzNzExeHVhcnRfaW50X3J4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAKIAlzdGF0dXMgPSBjbHBzX3JlYWRsKFNZU0ZMRyhwb3J0KSk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjbHBzNzExeHVhcnRfaW50X3R4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggZjhkZjA2OC4uOGQzNDliMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgY2g7CiAJdTggKmNwOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7CiAJY2JkX3QgX19pb21lbSAqYmRwOwogCXUxNiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9kei5jIGIvZHJpdmVycy9zZXJpYWwvZHouYwppbmRleCA2MDQyYjg3Li41NzQyMWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9kei5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2R6LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXdoaWxlICgoc3RhdHVzID0gZHpfaW4oZHBvcnQsIERaX1JCVUYpKSAmIERaX0RWQUwpIHsKIAkJZHBvcnQgPSAmbXV4LT5kcG9ydFtMSU5FKHN0YXR1cyldOwogCQl1cG9ydCA9ICZkcG9ydC0+cG9ydDsKLQkJdHR5ID0gdXBvcnQtPmluZm8tPnBvcnQudHR5OwkvKiBwb2ludCB0byB0aGUgcHJvcGVyIGRldiAqLworCQl0dHkgPSB1cG9ydC0+c3RhdGUtPnBvcnQudHR5OwkvKiBwb2ludCB0byB0aGUgcHJvcGVyIGRldiAqLwogCiAJCWNoID0gVUNIQVIoc3RhdHVzKTsJCS8qIGdyYWIgdGhlIGNoYXIgKi8KIAkJZmxhZyA9IFRUWV9OT1JNQUw7CkBAIC0yNDksNyArMjQ5LDcgQEAKIAl9CiAJZm9yIChpID0gMDsgaSA8IERaX05CX1BPUlQ7IGkrKykKIAkJaWYgKGxpbmVzX3J4W2ldKQotCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gobXV4LT5kcG9ydFtpXS5wb3J0LmluZm8tPnBvcnQudHR5KTsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKG11eC0+ZHBvcnRbaV0ucG9ydC5zdGF0ZS0+cG9ydC50dHkpOwogfQogCiAvKgpAQCAtMjY4LDcgKzI2OCw3IEBACiAKIAlzdGF0dXMgPSBkel9pbihkcG9ydCwgRFpfQ1NSKTsKIAlkcG9ydCA9ICZtdXgtPmRwb3J0W0xJTkUoc3RhdHVzKV07Ci0JeG1pdCA9ICZkcG9ydC0+cG9ydC5pbmZvLT54bWl0OworCXhtaXQgPSAmZHBvcnQtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlpZiAoZHBvcnQtPnBvcnQueF9jaGFyKSB7CQkvKiBYT04vWE9GRiBjaGFycyAqLwogCQlkel9vdXQoZHBvcnQsIERaX1REUiwgZHBvcnQtPnBvcnQueF9jaGFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2ljb20uYyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwppbmRleCBjZDFiNmE0Li4yZDdmZWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaWNvbS5jCkBAIC02MTcsNyArNjE3LDcgQEAKIAkgKiBkaXNhYmxlIGJyZWFrIGNvbmRpdGlvbgogCSAqLwogCWNtZFJlZyA9IHJlYWRiKCZpY29tX3BvcnQtPmRyYW0tPkNtZFJlZyk7Ci0JaWYgKChjbWRSZWcgfCBDTURfU05EX0JSRUFLKSA9PSBDTURfU05EX0JSRUFLKSB7CisJaWYgKGNtZFJlZyAmIENNRF9TTkRfQlJFQUspIHsKIAkJd3JpdGViKGNtZFJlZyAmIH5DTURfU05EX0JSRUFLLCAmaWNvbV9wb3J0LT5kcmFtLT5DbWRSZWcpOwogCX0KIH0KQEAgLTYyNyw3ICs2MjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZGF0YV9jb3VudDsKIAl1bnNpZ25lZCBjaGFyIGNtZFJlZzsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlpbnQgdGVtcF90YWlsID0gcG9ydC0+aW5mby0+eG1pdC50YWlsOworCWludCB0ZW1wX3RhaWwgPSBwb3J0LT5zdGF0ZS0+eG1pdC50YWlsOwogCiAJdHJhY2UoSUNPTV9QT1JULCAiV1JJVEUiLCAwKTsKIApAQCAtNjM4LDExICs2MzgsMTEgQEAKIAl9CiAKIAlkYXRhX2NvdW50ID0gMDsKLQl3aGlsZSAoKHBvcnQtPmluZm8tPnhtaXQuaGVhZCAhPSB0ZW1wX3RhaWwpICYmCisJd2hpbGUgKChwb3J0LT5zdGF0ZS0+eG1pdC5oZWFkICE9IHRlbXBfdGFpbCkgJiYKIAkgICAgICAgKGRhdGFfY291bnQgPD0gWE1JVF9CVUZGX1NaKSkgewogCiAJCUlDT01fUE9SVC0+eG1pdF9idWZbZGF0YV9jb3VudCsrXSA9Ci0JCSAgICBwb3J0LT5pbmZvLT54bWl0LmJ1Zlt0ZW1wX3RhaWxdOworCQkgICAgcG9ydC0+c3RhdGUtPnhtaXQuYnVmW3RlbXBfdGFpbF07CiAKIAkJdGVtcF90YWlsKys7CiAJCXRlbXBfdGFpbCAmPSAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKQEAgLTY5NCw4ICs2OTQsOCBAQAogCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmaWNvbV9wb3J0LT51YXJ0X3BvcnQsCiAJCQkJCSAgICAgICBkZWx0YV9zdGF0dXMgJiBJQ09NX0NUUyk7CiAKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpY29tX3BvcnQtPnVhcnRfcG9ydC5pbmZvLT4KLQkJCQkgICAgICBkZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaWNvbV9wb3J0LT51YXJ0X3BvcnQuc3RhdGUtPgorCQkJCSAgICAgIHBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCQlvbGRfc3RhdHVzID0gc3RhdHVzOwogCX0KIAlzcGluX3VubG9jaygmaWNvbV9wb3J0LT51YXJ0X3BvcnQubG9jayk7CkBAIC03MTgsMTAgKzcxOCwxMCBAQAogCQlpY29tX3BvcnQtPnVhcnRfcG9ydC5pY291bnQudHggKz0gY291bnQ7CiAKIAkJZm9yIChpPTA7IGk8Y291bnQgJiYKLQkJCSF1YXJ0X2NpcmNfZW1wdHkoJmljb21fcG9ydC0+dWFydF9wb3J0LmluZm8tPnhtaXQpOyBpKyspIHsKKwkJCSF1YXJ0X2NpcmNfZW1wdHkoJmljb21fcG9ydC0+dWFydF9wb3J0LnN0YXRlLT54bWl0KTsgaSsrKSB7CiAKLQkJCWljb21fcG9ydC0+dWFydF9wb3J0LmluZm8tPnhtaXQudGFpbCsrOwotCQkJaWNvbV9wb3J0LT51YXJ0X3BvcnQuaW5mby0+eG1pdC50YWlsICY9CisJCQlpY29tX3BvcnQtPnVhcnRfcG9ydC5zdGF0ZS0+eG1pdC50YWlsKys7CisJCQlpY29tX3BvcnQtPnVhcnRfcG9ydC5zdGF0ZS0+eG1pdC50YWlsICY9CiAJCQkJKFVBUlRfWE1JVF9TSVpFIC0gMSk7CiAJCX0KIApAQCAtNzM1LDcgKzczNSw3IEBACiBzdGF0aWMgdm9pZCByZWN2X2ludGVycnVwdCh1MTYgcG9ydF9pbnRfcmVnLCBzdHJ1Y3QgaWNvbV9wb3J0ICppY29tX3BvcnQpCiB7CiAJc2hvcnQgaW50IGNvdW50LCByY3ZfYnVmZjsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaWNvbV9wb3J0LT51YXJ0X3BvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGljb21fcG9ydC0+dWFydF9wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBzaG9ydCBpbnQgc3RhdHVzOwogCXN0cnVjdCB1YXJ0X2ljb3VudCAqaWNvdW50OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCA3NDg1YWZkLi4xODEzMGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJaWYgKGNoYW5nZWQgJiBUSU9DTV9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCBzdGF0dXMgJiBUSU9DTV9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIC8qCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gKHN0cnVjdCBpbXhfcG9ydCAqKWRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChzcG9ydC0+cG9ydC5pbmZvKSB7CisJaWYgKHNwb3J0LT5wb3J0LnN0YXRlKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJCWlteF9tY3RybF9jaGVjayhzcG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTMyMyw3ICszMjMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW14X3RyYW5zbWl0X2J1ZmZlcihzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAogCXdoaWxlICghKHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVVFMpICYgVVRTX1RYRlVMTCkpIHsKIAkJLyogc2VuZCB4bWl0LT5idWZbeG1pdC0+dGFpbF0KQEAgLTM4OCw3ICszODgsNyBAQAogCiAJd3JpdGVsKFVTUjFfUlRTRCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpOwogCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCAhIXZhbCk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3R4aW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzcG9ydC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNwb3J0LT5wb3J0LmxvY2ssZmxhZ3MpOwpAQCAtNDI3LDcgKzQyNyw3IEBACiB7CiAJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9pZDsKIAl1bnNpZ25lZCBpbnQgcngsZmxnLGlnbm9yZWQgPSAwOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzcG9ydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRlbXA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3BvcnQtPnBvcnQubG9jayxmbGFncyk7CkBAIC05MDAsMTEgKzkwMCwxMSBAQAogCXJhdGlvbmFsX2Jlc3RfYXBwcm94aW1hdGlvbigxNiAqIGRpdiAqIGJhdWQsIHNwb3J0LT5wb3J0LnVhcnRjbGssCiAJCTEgPDwgMTYsIDEgPDwgMTYsICZudW0sICZkZW5vbSk7CiAKLQlpZiAocG9ydC0+aW5mbyAmJiBwb3J0LT5pbmZvLT5wb3J0LnR0eSkgeworCWlmIChwb3J0LT5zdGF0ZSAmJiBwb3J0LT5zdGF0ZS0+cG9ydC50dHkpIHsKIAkJdGRpdjY0ID0gc3BvcnQtPnBvcnQudWFydGNsazsKIAkJdGRpdjY0ICo9IG51bTsKIAkJZG9fZGl2KHRkaXY2NCwgZGVub20gKiAxNiAqIGRpdik7Ci0JCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHNwb3J0LT5wb3J0LmluZm8tPnBvcnQudHR5LAorCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC50dHksCiAJCQkJKHNwZWVkX3QpdGRpdjY0LCAoc3BlZWRfdCl0ZGl2NjQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKaW5kZXggYWUzNjk5ZC4uZDg5ODNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCkBAIC04OTcsMjUgKzg5NywyNSBAQAogCWNoYXIgKnN0YXJ0OwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGlvYzNfcG9ydCAqcG9ydCA9IGdldF9pb2MzX3BvcnQodGhlX3BvcnQpOwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCF0aGVfcG9ydCkKIAkJcmV0dXJuOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCi0JaW5mbyA9IHRoZV9wb3J0LT5pbmZvOwotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOworCXR0eSA9IHN0YXRlLT5wb3J0LnR0eTsKIAotCWlmICh1YXJ0X2NpcmNfZW1wdHkoJmluZm8tPnhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZCh0aGVfcG9ydCkpIHsKKwlpZiAodWFydF9jaXJjX2VtcHR5KCZzdGF0ZS0+eG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHRoZV9wb3J0KSkgewogCQkvKiBOb3RoaW5nIHRvIGRvIG9yIGh3IHN0b3BwZWQgKi8KIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX0FMTF9PVVRQVVQsIDApOwogCQlyZXR1cm47CiAJfQogCi0JaGVhZCA9IGluZm8tPnhtaXQuaGVhZDsKLQl0YWlsID0gaW5mby0+eG1pdC50YWlsOwotCXN0YXJ0ID0gKGNoYXIgKikmaW5mby0+eG1pdC5idWZbdGFpbF07CisJaGVhZCA9IHN0YXRlLT54bWl0LmhlYWQ7CisJdGFpbCA9IHN0YXRlLT54bWl0LnRhaWw7CisJc3RhcnQgPSAoY2hhciAqKSZzdGF0ZS0+eG1pdC5idWZbdGFpbF07CiAKIAkvKiB3cml0ZSBvdXQgYWxsIHRoZSBkYXRhIG9yIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwogCXhtaXRfY291bnQgPSAoaGVhZCA8IHRhaWwpID8gKFVBUlRfWE1JVF9TSVpFIC0gdGFpbCkgOiAoaGVhZCAtIHRhaWwpOwpAQCAtOTI4LDE0ICs5MjgsMTQgQEAKIAkJCS8qIGFkdmFuY2UgdGhlIHBvaW50ZXJzICovCiAJCQl0YWlsICs9IHJlc3VsdDsKIAkJCXRhaWwgJj0gVUFSVF9YTUlUX1NJWkUgLSAxOwotCQkJaW5mby0+eG1pdC50YWlsID0gdGFpbDsKLQkJCXN0YXJ0ID0gKGNoYXIgKikmaW5mby0+eG1pdC5idWZbdGFpbF07CisJCQlzdGF0ZS0+eG1pdC50YWlsID0gdGFpbDsKKwkJCXN0YXJ0ID0gKGNoYXIgKikmc3RhdGUtPnhtaXQuYnVmW3RhaWxdOwogCQl9CiAJfQotCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmaW5mby0+eG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKCZzdGF0ZS0+eG1pdCkgPCBXQUtFVVBfQ0hBUlMpCiAJCXVhcnRfd3JpdGVfd2FrZXVwKHRoZV9wb3J0KTsKIAotCWlmICh1YXJ0X2NpcmNfZW1wdHkoJmluZm8tPnhtaXQpKSB7CisJaWYgKHVhcnRfY2lyY19lbXB0eSgmc3RhdGUtPnhtaXQpKSB7CiAJCXNldF9ub3RpZmljYXRpb24ocG9ydCwgTl9PVVRQVVRfTE9XQVQsIDApOwogCX0gZWxzZSB7CiAJCXNldF9ub3RpZmljYXRpb24ocG9ydCwgTl9PVVRQVVRfTE9XQVQsIDEpOwpAQCAtOTU2LDcgKzk1Niw3IEBACiAJdW5zaWduZWQgaW50IGNmbGFnOwogCWludCBiYXVkOwogCWludCBuZXdfcGFyaXR5ID0gMCwgbmV3X3Bhcml0eV9lbmFibGUgPSAwLCBuZXdfc3RvcCA9IDAsIG5ld19kYXRhID0gODsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOwogCiAJY2ZsYWcgPSBuZXdfdGVybWlvcy0+Y19jZmxhZzsKIApAQCAtOTk3LDE0ICs5OTcsMTQgQEAKIAogCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgPSBOX0FMTF9JTlBVVDsKIAotCWluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJc3RhdGUtPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQorCWlmIChJX0lHTlBBUihzdGF0ZS0+cG9ydC50dHkpKQogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH4oTl9QQVJJVFlfRVJST1IKIAkJCQkJCSAgfCBOX0ZSQU1JTkdfRVJST1IpOwotCWlmIChJX0lHTkJSSyhpbmZvLT5wb3J0LnR0eSkpIHsKKwlpZiAoSV9JR05CUksoc3RhdGUtPnBvcnQudHR5KSkgewogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX0JSRUFLOwotCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQorCQlpZiAoSV9JR05QQVIoc3RhdGUtPnBvcnQudHR5KSkKIAkJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fT1ZFUlJVTl9FUlJPUjsKIAl9CiAJaWYgKCEoY2ZsYWcgJiBDUkVBRCkpIHsKQEAgLTEyODYsOCArMTI4Niw4IEBACiAJCQkJCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlCiAJCQkJCQkJKHBvcnQtPmlwX3BvcnQsIDApOwogCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlCi0JCQkJCQkgICAgKCZ0aGVfcG9ydC0+aW5mby0+Ci0JCQkJCQkgICAgIGRlbHRhX21zcl93YWl0KTsKKwkJCQkJCSAgICAoJnRoZV9wb3J0LT5zdGF0ZS0+CisJCQkJCQkgICAgIHBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCQkJCQl9CiAKIAkJCQkJLyogSWYgd2UgaGFkIGFueSBkYXRhIHRvIHJldHVybiwgd2UKQEAgLTEzOTIsMjEgKzEzOTIsMjEgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGNoYXIgY2hbTUFYX0NIQVJTXTsKIAlpbnQgcmVhZF9jb3VudCA9IDAsIHJlYWRfcm9vbSwgZmxpcCA9IDA7Ci0Jc3RydWN0IHVhcnRfaW5mbyAqaW5mbyA9IHRoZV9wb3J0LT5pbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHRoZV9wb3J0LT5zdGF0ZTsKIAlzdHJ1Y3QgaW9jM19wb3J0ICpwb3J0ID0gZ2V0X2lvYzNfcG9ydCh0aGVfcG9ydCk7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAKIAkvKiBNYWtlIHN1cmUgYWxsIHRoZSBwb2ludGVycyBhcmUgImdvb2QiIG9uZXMgKi8KLQlpZiAoIWluZm8pCisJaWYgKCFzdGF0ZSkKIAkJcmV0dXJuIDA7Ci0JaWYgKCFpbmZvLT5wb3J0LnR0eSkKKwlpZiAoIXN0YXRlLT5wb3J0LnR0eSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIShwb3J0LT5pcF9mbGFncyAmIElOUFVUX0VOQUJMRSkpCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9wb3J0LT5sb2NrLCBwZmxhZ3MpOwotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXR0eSA9IHN0YXRlLT5wb3J0LnR0eTsKIAogCXJlYWRfY291bnQgPSBkb19yZWFkKHRoZV9wb3J0LCBjaCwgTUFYX0NIQVJTKTsKIAlpZiAocmVhZF9jb3VudCA+IDApIHsKQEAgLTE0OTEsNyArMTQ5MSw3IEBACiAJCQkJdWFydF9oYW5kbGVfZGNkX2NoYW5nZSh0aGVfcG9ydCwKIAkJCQkJCXNoYWRvdyAmIFNIQURPV19EQ0QpOwogCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZQotCQkJCSAgICAoJnRoZV9wb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJICAgICgmdGhlX3BvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJCX0gZWxzZSBpZiAoKHBvcnQtPmlwX25vdGlmeSAmIE5fRERDRCkKIAkJCQkgICAmJiAhKHNoYWRvdyAmIFNIQURPV19EQ0QpKSB7CiAJCQkJLyogRmxhZyBkZWx0YSBEQ0Qvbm8gRENEICovCkBAIC0xNTExLDcgKzE1MTEsNyBAQAogCQkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UodGhlX3BvcnQsIHNoYWRvdwogCQkJCQkJJiBTSEFET1dfQ1RTKTsKIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUKLQkJCQkgICAgKCZ0aGVfcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCSAgICAoJnRoZV9wb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAJCQl9CiAJCX0KIApAQCAtMTcyMSwxNCArMTcyMSwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgcG9ydF9mbGFnczsKIAlzdHJ1Y3QgaW9jM19wb3J0ICpwb3J0OwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJcG9ydCA9IGdldF9pb2MzX3BvcnQodGhlX3BvcnQpOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCi0JaW5mbyA9IHRoZV9wb3J0LT5pbmZvOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9wb3J0LT5sb2NrLCBwb3J0X2ZsYWdzKTsKIAlzZXRfbm90aWZpY2F0aW9uKHBvcnQsIE5fQUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCmluZGV4IGU1YzU4ZmUuLjJlMDJjMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwpAQCAtMTYyNywyNSArMTYyNywyNSBAQAogCWNoYXIgKnN0YXJ0OwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGlvYzRfcG9ydCAqcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCF0aGVfcG9ydCkKIAkJcmV0dXJuOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCi0JaW5mbyA9IHRoZV9wb3J0LT5pbmZvOwotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOworCXR0eSA9IHN0YXRlLT5wb3J0LnR0eTsKIAotCWlmICh1YXJ0X2NpcmNfZW1wdHkoJmluZm8tPnhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZCh0aGVfcG9ydCkpIHsKKwlpZiAodWFydF9jaXJjX2VtcHR5KCZzdGF0ZS0+eG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHRoZV9wb3J0KSkgewogCQkvKiBOb3RoaW5nIHRvIGRvIG9yIGh3IHN0b3BwZWQgKi8KIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX0FMTF9PVVRQVVQsIDApOwogCQlyZXR1cm47CiAJfQogCi0JaGVhZCA9IGluZm8tPnhtaXQuaGVhZDsKLQl0YWlsID0gaW5mby0+eG1pdC50YWlsOwotCXN0YXJ0ID0gKGNoYXIgKikmaW5mby0+eG1pdC5idWZbdGFpbF07CisJaGVhZCA9IHN0YXRlLT54bWl0LmhlYWQ7CisJdGFpbCA9IHN0YXRlLT54bWl0LnRhaWw7CisJc3RhcnQgPSAoY2hhciAqKSZzdGF0ZS0+eG1pdC5idWZbdGFpbF07CiAKIAkvKiB3cml0ZSBvdXQgYWxsIHRoZSBkYXRhIG9yIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwogCXhtaXRfY291bnQgPSAoaGVhZCA8IHRhaWwpID8gKFVBUlRfWE1JVF9TSVpFIC0gdGFpbCkgOiAoaGVhZCAtIHRhaWwpOwpAQCAtMTY1OCwxNCArMTY1OCwxNCBAQAogCQkJLyogYWR2YW5jZSB0aGUgcG9pbnRlcnMgKi8KIAkJCXRhaWwgKz0gcmVzdWx0OwogCQkJdGFpbCAmPSBVQVJUX1hNSVRfU0laRSAtIDE7Ci0JCQlpbmZvLT54bWl0LnRhaWwgPSB0YWlsOwotCQkJc3RhcnQgPSAoY2hhciAqKSZpbmZvLT54bWl0LmJ1Zlt0YWlsXTsKKwkJCXN0YXRlLT54bWl0LnRhaWwgPSB0YWlsOworCQkJc3RhcnQgPSAoY2hhciAqKSZzdGF0ZS0+eG1pdC5idWZbdGFpbF07CiAJCX0KIAl9Ci0JaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKCZpbmZvLT54bWl0KSA8IFdBS0VVUF9DSEFSUykKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoJnN0YXRlLT54bWl0KSA8IFdBS0VVUF9DSEFSUykKIAkJdWFydF93cml0ZV93YWtldXAodGhlX3BvcnQpOwogCi0JaWYgKHVhcnRfY2lyY19lbXB0eSgmaW5mby0+eG1pdCkpIHsKKwlpZiAodWFydF9jaXJjX2VtcHR5KCZzdGF0ZS0+eG1pdCkpIHsKIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX09VVFBVVF9MT1dBVCwgMCk7CiAJfSBlbHNlIHsKIAkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX09VVFBVVF9MT1dBVCwgMSk7CkBAIC0xNjg2LDcgKzE2ODYsNyBAQAogCWludCBiYXVkLCBiaXRzOwogCXVuc2lnbmVkIGNmbGFnOwogCWludCBuZXdfcGFyaXR5ID0gMCwgbmV3X3Bhcml0eV9lbmFibGUgPSAwLCBuZXdfc3RvcCA9IDAsIG5ld19kYXRhID0gODsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOwogCiAJY2ZsYWcgPSBuZXdfdGVybWlvcy0+Y19jZmxhZzsKIApAQCAtMTczOCwxNCArMTczOCwxNCBAQAogCiAJdGhlX3BvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IE5fQUxMX0lOUFVUOwogCi0JaW5mby0+cG9ydC50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlzdGF0ZS0+cG9ydC50dHktPmxvd19sYXRlbmN5ID0gMTsKIAotCWlmIChJX0lHTlBBUihpbmZvLT5wb3J0LnR0eSkpCisJaWYgKElfSUdOUEFSKHN0YXRlLT5wb3J0LnR0eSkpCiAJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfihOX1BBUklUWV9FUlJPUgogCQkJCQkJfCBOX0ZSQU1JTkdfRVJST1IpOwotCWlmIChJX0lHTkJSSyhpbmZvLT5wb3J0LnR0eSkpIHsKKwlpZiAoSV9JR05CUksoc3RhdGUtPnBvcnQudHR5KSkgewogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX0JSRUFLOwotCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKQorCQlpZiAoSV9JR05QQVIoc3RhdGUtPnBvcnQudHR5KSkKIAkJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fT1ZFUlJVTl9FUlJPUjsKIAl9CiAJaWYgKCEoY2ZsYWcgJiBDUkVBRCkpIHsKQEAgLTE3ODQsNyArMTc4NCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBpYzRfc3RhcnR1cF9sb2NhbChzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCkKIHsKIAlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0OwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwogCiAJaWYgKCF0aGVfcG9ydCkKIAkJcmV0dXJuIC0xOwpAQCAtMTc5Myw3ICsxNzkzLDcgQEAKIAlpZiAoIXBvcnQpCiAJCXJldHVybiAtMTsKIAotCWluZm8gPSB0aGVfcG9ydC0+aW5mbzsKKwlzdGF0ZSA9IHRoZV9wb3J0LT5zdGF0ZTsKIAogCWxvY2FsX29wZW4ocG9ydCk7CiAKQEAgLTE4MDEsNyArMTgwMSw3IEBACiAJaW9jNF9zZXRfcHJvdG8ocG9ydCwgdGhlX3BvcnQtPm1hcGJhc2UpOwogCiAJLyogc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQgKi8KLQlpb2M0X2NoYW5nZV9zcGVlZCh0aGVfcG9ydCwgaW5mby0+cG9ydC50dHktPnRlcm1pb3MsCisJaW9jNF9jaGFuZ2Vfc3BlZWQodGhlX3BvcnQsIHN0YXRlLT5wb3J0LnR0eS0+dGVybWlvcywKIAkJCSAgKHN0cnVjdCBrdGVybWlvcyAqKTApOwogCiAJcmV0dXJuIDA7CkBAIC0xODgyLDcgKzE4ODIsNyBAQAogCQkJCXRoZV9wb3J0ID0gcG9ydC0+aXBfcG9ydDsKIAkJCQl0aGVfcG9ydC0+aWNvdW50LmRjZCA9IDE7CiAJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlCi0JCQkJCSAgICAoJnRoZV9wb3J0LT4gaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCQkgICAgKCZ0aGVfcG9ydC0+c3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCQkJfSBlbHNlIGlmICgocG9ydC0+aXBfbm90aWZ5ICYgTl9ERENEKQogCQkJCQkmJiAhKHNoYWRvdyAmIElPQzRfU0hBRE9XX0RDRCkpIHsKIAkJCQkvKiBGbGFnIGRlbHRhIERDRC9ubyBEQ0QgKi8KQEAgLTE5MDQsNyArMTkwNCw3IEBACiAJCQkJdGhlX3BvcnQtPmljb3VudC5jdHMgPQogCQkJCQkoc2hhZG93ICYgSU9DNF9TSEFET1dfQ1RTKSA/IDEgOiAwOwogCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZQotCQkJCQkoJnRoZV9wb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJCSgmdGhlX3BvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJCX0KIAkJfQogCkBAIC0yMjM2LDggKzIyMzYsOCBAQAogCQkJCQkJICAgJiYgcG9ydC0+aXBfcG9ydCkgewogCQkJCQkJdGhlX3BvcnQtPmljb3VudC5kY2QgPSAwOwogCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlCi0JCQkJCQkgICAgKCZ0aGVfcG9ydC0+aW5mby0+Ci0JCQkJCQkJZGVsdGFfbXNyX3dhaXQpOworCQkJCQkJICAgICgmdGhlX3BvcnQtPnN0YXRlLT4KKwkJCQkJCQlwb3J0LmRlbHRhX21zcl93YWl0KTsKIAkJCQkJfQogCiAJCQkJCS8qIElmIHdlIGhhZCBhbnkgZGF0YSB0byByZXR1cm4sIHdlCkBAIC0yMzQxLDE3ICsyMzQxLDE3IEBACiAJdW5zaWduZWQgY2hhciBjaFtJT0M0X01BWF9DSEFSU107CiAJaW50IHJlYWRfY291bnQsIHJlcXVlc3RfY291bnQgPSBJT0M0X01BWF9DSEFSUzsKIAlzdHJ1Y3QgdWFydF9pY291bnQgKmljb3VudDsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdGhlX3BvcnQtPnN0YXRlOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCiAJLyogTWFrZSBzdXJlIGFsbCB0aGUgcG9pbnRlcnMgYXJlICJnb29kIiBvbmVzICovCi0JaWYgKCFpbmZvKQorCWlmICghc3RhdGUpCiAJCXJldHVybjsKLQlpZiAoIWluZm8tPnBvcnQudHR5KQorCWlmICghc3RhdGUtPnBvcnQudHR5KQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX3BvcnQtPmxvY2ssIHBmbGFncyk7Ci0JdHR5ID0gaW5mby0+cG9ydC50dHk7CisJdHR5ID0gc3RhdGUtPnBvcnQudHR5OwogCiAJcmVxdWVzdF9jb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgSU9DNF9NQVhfQ0hBUlMpOwogCkBAIC0yNDMwLDE5ICsyNDMwLDE5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0X2ZsYWdzOwogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IHVhcnRfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGU7CiAKIAlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CiAJaWYgKCFwb3J0KQogCQlyZXR1cm47CiAKLQlpbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RhdGUgPSB0aGVfcG9ydC0+c3RhdGU7CiAJcG9ydC0+aXBfcG9ydCA9IE5VTEw7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAotCWlmIChpbmZvLT5wb3J0LnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCWlmIChzdGF0ZS0+cG9ydC50dHkpCisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmc3RhdGUtPnBvcnQudHR5LT5mbGFncyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX3BvcnQtPmxvY2ssIHBvcnRfZmxhZ3MpOwogCXNldF9ub3RpZmljYXRpb24ocG9ydCwgTl9BTEwsIDApOwpAQCAtMjUzOCw3ICsyNTM4LDcgQEAKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7CiAJc3RydWN0IGlvYzRfY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHBvcnRfZmxhZ3M7CiAKIAlpZiAoIXRoZV9wb3J0KQpAQCAtMjU0Niw3ICsyNTQ2LDcgQEAKIAlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMSk7CiAJaWYgKCFwb3J0KQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpbmZvID0gdGhlX3BvcnQtPmluZm87CisJc3RhdGUgPSB0aGVfcG9ydC0+c3RhdGU7CiAKIAljb250cm9sID0gcG9ydC0+aXBfY29udHJvbDsKIAlpZiAoIWNvbnRyb2wpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKaW5kZXggMGQ5YWNiZC4uZWJmZjRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKQEAgLTI1Niw5ICsyNTYsOSBAQAogCXVuc2lnbmVkIGludCByMTsKIAogCXR0eSA9IE5VTEw7Ci0JaWYgKHVwLT5wb3J0LmluZm8gIT0gTlVMTCAmJgotCSAgICB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eSAhPSBOVUxMKQotCQl0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlpZiAodXAtPnBvcnQuc3RhdGUgIT0gTlVMTCAmJgorCSAgICB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHkgIT0gTlVMTCkKKwkJdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJZm9yICg7OykgewogCQljaCA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdXAtPnBvcnQsCiAJCQkJCSAgICAgICAoc3RhdHVzICYgQ1RTKSk7CiAKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCX0KIAogCXVwLT5wcmV2X3N0YXR1cyA9IHN0YXR1czsKQEAgLTQwNCw5ICs0MDQsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVwLT5wb3J0LmluZm8gPT0gTlVMTCkKKwlpZiAodXAtPnBvcnQuc3RhdGUgPT0gTlVMTCkKIAkJZ290byBhY2tfdHhfaW50OwotCXhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwl4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCiAJCWdvdG8gYWNrX3R4X2ludDsKIAlpZiAodWFydF90eF9zdG9wcGVkKCZ1cC0+cG9ydCkpCkBAIC02MDcsNyArNjA3LDcgQEAKIAkJcG9ydC0+aWNvdW50LnR4Kys7CiAJCXBvcnQtPnhfY2hhciA9IDA7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCQl3cml0ZWIoeG1pdC0+YnVmW3htaXQtPnRhaWxdLCAmY2hhbm5lbC0+ZGF0YSk7CiAJCVpTREVMQVkoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCmluZGV4IDlkYWRhYTExLi5iNGIxMjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKQEAgLTk4OSw3ICs5ODksNyBAQAogCQkJeyAgICAgNTAsIEI1MCAgICAgfSwKIAkJfTsKIAotCQljZmxhZyA9IENfQkFVRChjaC0+dWFydF9wb3J0LmluZm8tPnBvcnQudHR5KTsKKwkJY2ZsYWcgPSBDX0JBVUQoY2gtPnVhcnRfcG9ydC5zdGF0ZS0+cG9ydC50dHkpOwogCQliYXVkID0gOTYwMDsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmF1ZF9yYXRlcyk7IGkrKykgewogCQkJaWYgKGJhdWRfcmF0ZXNbaV0uY2ZsYWcgPT0gY2ZsYWcpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCmluZGV4IDAwZjQ1NzcuLjc0MzljMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGxvY2tfZmxhZ3MpOwotCXRlcm1pb3MgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eS0+dGVybWlvczsKKwl0ZXJtaW9zID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT50ZXJtaW9zOwogCWlmIChjaCA9PSB0ZXJtaW9zLT5jX2NjW1ZTVEFSVF0pCiAJCWNoYW5uZWwtPmNoX2JkLT5iZF9vcHMtPnNlbmRfc3RhcnRfY2hhcmFjdGVyKGNoYW5uZWwpOwogCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAljaGFubmVsLT5jaF9jYWNoZWRfbHNyID0gMDsKIAljaGFubmVsLT5jaF9zdG9wc19zZW50ID0gMDsKIAotCXRlcm1pb3MgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eS0+dGVybWlvczsKKwl0ZXJtaW9zID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT50ZXJtaW9zOwogCWNoYW5uZWwtPmNoX2NfY2ZsYWcJPSB0ZXJtaW9zLT5jX2NmbGFnOwogCWNoYW5uZWwtPmNoX2NfaWZsYWcJPSB0ZXJtaW9zLT5jX2lmbGFnOwogCWNoYW5uZWwtPmNoX2Nfb2ZsYWcJPSB0ZXJtaW9zLT5jX29mbGFnOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJanNtX3ByaW50ayhDTE9TRSwgSU5GTywgJmNoYW5uZWwtPmNoX2JkLT5wY2lfZGV2LCAic3RhcnRcbiIpOwogCiAJYmQgPSBjaGFubmVsLT5jaF9iZDsKLQl0cyA9IHBvcnQtPmluZm8tPnBvcnQudHR5LT50ZXJtaW9zOworCXRzID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT50ZXJtaW9zOwogCiAJY2hhbm5lbC0+Y2hfZmxhZ3MgJj0gfihDSF9TVE9QSSk7CiAKQEAgLTUzMCw3ICs1MzAsNyBAQAogCWlmICghY2gpCiAJCXJldHVybjsKIAotCXRwID0gY2gtPnVhcnRfcG9ydC5pbmZvLT5wb3J0LnR0eTsKKwl0cCA9IGNoLT51YXJ0X3BvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJYmQgPSBjaC0+Y2hfYmQ7CiAJaWYoIWJkKQpAQCAtODQ5LDcgKzg0OSw3IEBACiAJdTE2IHRhaWw7CiAJdTE2IHRtYXNrOwogCXUzMiByZW1haW47Ci0JaW50IHRlbXBfdGFpbCA9IHBvcnQtPmluZm8tPnhtaXQudGFpbDsKKwlpbnQgdGVtcF90YWlsID0gcG9ydC0+c3RhdGUtPnhtaXQudGFpbDsKIAlzdHJ1Y3QganNtX2NoYW5uZWwgKmNoYW5uZWwgPSAoc3RydWN0IGpzbV9jaGFubmVsICopcG9ydDsKIAogCXRtYXNrID0gV1FVRVVFTUFTSzsKQEAgLTg2NSwxMCArODY1LDEwIEBACiAJZGF0YV9jb3VudCA9IDA7CiAJaWYgKGJ1ZmNvdW50ID49IHJlbWFpbikgewogCQlidWZjb3VudCAtPSByZW1haW47Ci0JCXdoaWxlICgocG9ydC0+aW5mby0+eG1pdC5oZWFkICE9IHRlbXBfdGFpbCkgJiYKKwkJd2hpbGUgKChwb3J0LT5zdGF0ZS0+eG1pdC5oZWFkICE9IHRlbXBfdGFpbCkgJiYKIAkJKGRhdGFfY291bnQgPCByZW1haW4pKSB7CiAJCQljaGFubmVsLT5jaF93cXVldWVbaGVhZCsrXSA9Ci0JCQlwb3J0LT5pbmZvLT54bWl0LmJ1Zlt0ZW1wX3RhaWxdOworCQkJcG9ydC0+c3RhdGUtPnhtaXQuYnVmW3RlbXBfdGFpbF07CiAKIAkJCXRlbXBfdGFpbCsrOwogCQkJdGVtcF90YWlsICY9IChVQVJUX1hNSVRfU0laRSAtIDEpOwpAQCAtODgwLDEwICs4ODAsMTAgQEAKIAlkYXRhX2NvdW50MSA9IDA7CiAJaWYgKGJ1ZmNvdW50ID4gMCkgewogCQlyZW1haW4gPSBidWZjb3VudDsKLQkJd2hpbGUgKChwb3J0LT5pbmZvLT54bWl0LmhlYWQgIT0gdGVtcF90YWlsKSAmJgorCQl3aGlsZSAoKHBvcnQtPnN0YXRlLT54bWl0LmhlYWQgIT0gdGVtcF90YWlsKSAmJgogCQkJKGRhdGFfY291bnQxIDwgcmVtYWluKSkgewogCQkJY2hhbm5lbC0+Y2hfd3F1ZXVlW2hlYWQrK10gPQotCQkJCXBvcnQtPmluZm8tPnhtaXQuYnVmW3RlbXBfdGFpbF07CisJCQkJcG9ydC0+c3RhdGUtPnhtaXQuYnVmW3RlbXBfdGFpbF07CiAKIAkJCXRlbXBfdGFpbCsrOwogCQkJdGVtcF90YWlsICY9IChVQVJUX1hNSVRfU0laRSAtIDEpOwpAQCAtODkyLDcgKzg5Miw3IEBACiAJCX0KIAl9CiAKLQlwb3J0LT5pbmZvLT54bWl0LnRhaWwgPSB0ZW1wX3RhaWw7CisJcG9ydC0+c3RhdGUtPnhtaXQudGFpbCA9IHRlbXBfdGFpbDsKIAogCWRhdGFfY291bnQgKz0gZGF0YV9jb3VudDE7CiAJaWYgKGRhdGFfY291bnQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCmluZGV4IDYxMWM5N2EuLmJlYTVjMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwpAQCAtMjg2LDcgKzI4Niw3IEBACiB7CiAjaWZkZWYgQ09ORklHX1NFUklBTF9NMzJSX1BMRFNJTwogCXN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqKXBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCiAJaWYgKCEodXAtPmllciAmIFVBUlRfSUVSX1RIUkkpKSB7CiAJCXVwLT5pZXIgfD0gVUFSVF9JRVJfVEhSSTsKQEAgLTMyNSw3ICszMjUsNyBAQAogCiBzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCwgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaDsKIAl1bnNpZ25lZCBjaGFyIGZsYWc7CiAJaW50IG1heF9jb3VudCA9IDI1NjsKQEAgLTM5OCw3ICszOTgsNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXApCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWludCBjb3VudDsKIAogCWlmICh1cC0+cG9ydC54X2NoYXIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21heDMxMDAuYyBiL2RyaXZlcnMvc2VyaWFsL21heDMxMDAuYwppbmRleCA5ZmQzM2U1Li4zYzMwYzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tYXgzMTAwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbWF4MzEwMC5jCkBAIC0xODQsNyArMTg0LDcgQEAKIHsKIAlzdHJ1Y3QgbWF4MzEwMF9wb3J0ICpzID0gKHN0cnVjdCBtYXgzMTAwX3BvcnQgKilkYXRhOwogCi0JaWYgKHMtPnBvcnQuaW5mbykgeworCWlmIChzLT5wb3J0LnN0YXRlKSB7CiAJCW1heDMxMDBfZG93b3JrKHMpOwogCQltb2RfdGltZXIoJnMtPnRpbWVyLCBqaWZmaWVzICsgcy0+cG9sbF90aW1lKTsKIAl9CkBAIC0yNjEsNyArMjYxLDcgQEAKIAlpbnQgcnhjaGFyczsKIAl1MTYgdHgsIHJ4OwogCWludCBjb25mLCBjY29uZiwgcnRzLCBjcnRzOwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnMtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlkZXZfZGJnKCZzLT5zcGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTMwNyw4ICszMDcsOCBAQAogCQkJfQogCQl9CiAKLQkJaWYgKHJ4Y2hhcnMgPiAxNiAmJiBzLT5wb3J0LmluZm8tPnBvcnQudHR5ICE9IE5VTEwpIHsKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHMtPnBvcnQuaW5mby0+cG9ydC50dHkpOworCQlpZiAocnhjaGFycyA+IDE2ICYmIHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5ICE9IE5VTEwpIHsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5KTsKIAkJCXJ4Y2hhcnMgPSAwOwogCQl9CiAJCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKQEAgLTMyMCw4ICszMjAsOCBAQAogCQkgICghdWFydF9jaXJjX2VtcHR5KHhtaXQpICYmCiAJCSAgICF1YXJ0X3R4X3N0b3BwZWQoJnMtPnBvcnQpKSkpOwogCi0JaWYgKHJ4Y2hhcnMgPiAwICYmIHMtPnBvcnQuaW5mby0+cG9ydC50dHkgIT0gTlVMTCkKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocy0+cG9ydC5pbmZvLT5wb3J0LnR0eSk7CisJaWYgKHJ4Y2hhcnMgPiAwICYmIHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5ICE9IE5VTEwpCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG1heDMxMDBfaXJxKGludCBpcnFubywgdm9pZCAqZGV2X2lkKQpAQCAtNDI5LDcgKzQyOSw3IEBACiAJaW50IGJhdWQgPSAwOwogCXVuc2lnbmVkIGNmbGFnOwogCXUzMiBwYXJhbV9uZXcsIHBhcmFtX21hc2ssIHBhcml0eSA9IDA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHMtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCiAJZGV2X2RiZygmcy0+c3BpLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCWlmICghdHR5KQpAQCAtNTI5LDcgKzUyOSw3IEBACiAJCQlNQVgzMTAwX1NUQVRVU19PRTsKIAogCS8qIHdlIGFyZSBzZW5kaW5nIGNoYXIgZnJvbSBhIHdvcmtxdWV1ZSBzbyBlbmFibGUgKi8KLQlzLT5wb3J0LmluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJcy0+cG9ydC5zdGF0ZS0+cG9ydC50dHktPmxvd19sYXRlbmN5ID0gMTsKIAogCWlmIChzLT5wb2xsX3RpbWUgPiAwKQogCQlkZWxfdGltZXJfc3luYygmcy0+dGltZXIpOwpAQCAtOTI1LDMgKzkyNSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDMxMDAgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpcGVsbEBldm9sd2FyZS5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTptYXgzMTAwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tY2YuYyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCmluZGV4IDBlZWZiMDcuLmI0NDM4MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJdWFydF9pbnNlcnRfY2hhcihwb3J0LCBzdGF0dXMsIE1DRlVBUlRfVVNSX1JYT1ZFUlJVTiwgY2gsIGZsYWcpOwogCX0KIAotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPmluZm8tPnBvcnQudHR5KTsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5zdGF0ZS0+cG9ydC50dHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzMSw3ICszMzEsNyBAQAogc3RhdGljIHZvaWQgbWNmX3R4X2NoYXJzKHN0cnVjdCBtY2ZfdWFydCAqcHApCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcC0+cG9ydDsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CiAJCS8qIFNlbmQgc3BlY2lhbCBjaGFyIC0gcHJvYmFibHkgZmxvdyBjb250cm9sICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IGFiYmQxNDYuLmQ3YmNkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03NDUsNyArNzQ1LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBtcGM1Mnh4X3VhcnRfaW50X3J4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaCwgZmxhZzsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAKQEAgLTgxMiw3ICs4MTIsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIG1wYzUyeHhfdWFydF9pbnRfdHhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAkvKiBQcm9jZXNzIG91dCBvZiBiYW5kIGNoYXJzICovCiAJaWYgKHBvcnQtPnhfY2hhcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCmluZGV4IDYxZDNhZGUuLmI1NDk2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKQEAgLTkzNiw3ICs5MzYsNyBAQAogc3RhdGljIGludCBtcHNjX3J4X2ludHIoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkKIHsKIAlzdHJ1Y3QgbXBzY19yeF9kZXNjICpyeHJlOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwaS0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcGktPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXUzMgljbWRzdGF0LCBieXRlc19pbiwgaTsKIAlpbnQJcmMgPSAwOwogCXU4CSpicDsKQEAgLTExMDksNyArMTEwOSw3IEBACiAKIHN0YXRpYyB2b2lkIG1wc2NfY29weV90eF9kYXRhKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBpLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBpLT5wb3J0LnN0YXRlLT54bWl0OwogCXU4ICpicDsKIAl1MzIgaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5jCmluZGV4IGY3YzI0YmEuLmIwNWM1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAogc3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IHNyOwogCiAJLyoKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiBzdGF0aWMgdm9pZCBoYW5kbGVfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAJc3RydWN0IG1zbV9wb3J0ICptc21fcG9ydCA9IFVBUlRfVE9fTVNNKHBvcnQpOwogCWludCBzZW50X3R4OwogCkBAIC0xNjksNyArMTY5LDcgQEAKIHsKIAltc21fd3JpdGUocG9ydCwgVUFSVF9DUl9DTURfUkVTRVRfQ1RTLCBVQVJUX0NSKTsKIAlwb3J0LT5pY291bnQuY3RzKys7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtc21faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL211eC5jIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKaW5kZXggOTUzYTVmZi4uNzU3MWFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXV4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKQEAgLTE5OSw3ICsxOTksNyBAQAogc3RhdGljIHZvaWQgbXV4X3dyaXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IGNvdW50OwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCWlmKHBvcnQtPnhfY2hhcikgewogCQlVQVJUX1BVVF9DSEFSKHBvcnQsIHBvcnQtPnhfY2hhcik7CkBAIC0yNDMsNyArMjQzLDcgQEAKIHN0YXRpYyB2b2lkIG11eF9yZWFkKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IGRhdGE7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJX191MzIgc3RhcnRfY291bnQgPSBwb3J0LT5pY291bnQucng7CiAKIAl3aGlsZSgxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYwppbmRleCAzZTVkZGE4Li43NzM1YzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL25ldHgtc2VyaWFsLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0eF90cmFuc21pdF9idWZmZXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CiAJCXdyaXRlbChwb3J0LT54X2NoYXIsIHBvcnQtPm1lbWJhc2UgKyBVQVJUX0RSKTsKQEAgLTE4NSw3ICsxODUsNyBAQAogCiBzdGF0aWMgdm9pZCBuZXR4X3R4aW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQocG9ydCkpIHsKIAkJbmV0eF9zdG9wX3R4KHBvcnQpOwpAQCAtMjAxLDcgKzIwMSw3IEBACiBzdGF0aWMgdm9pZCBuZXR4X3J4aW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJdW5zaWduZWQgY2hhciByeCwgZmxnLCBzdGF0dXM7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAKIAl3aGlsZSAoIShyZWFkbChwb3J0LT5tZW1iYXNlICsgVUFSVF9GUikgJiBGUl9SWEZFKSkgewogCQlyeCA9IHJlYWRsKHBvcnQtPm1lbWJhc2UgKyBVQVJUX0RSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL253cHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKaW5kZXggOWUxNTBiMS4uZTFhYjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbndwc2VyaWFsLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogc3RhdGljIGlycXJldHVybl90IG53cHNlcmlhbF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBud3BzZXJpYWxfcG9ydCAqdXAgPSBkZXZfaWQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJaXJxcmV0dXJuX3QgcmV0OwogCXVuc2lnbmVkIGludCBpaXI7CiAJdW5zaWduZWQgY2hhciBjaDsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCXN0cnVjdCBud3BzZXJpYWxfcG9ydCAqdXA7CiAJc3RydWN0IGNpcmNfYnVmICp4bWl0OwogCXVwID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBud3BzZXJpYWxfcG9ydCwgcG9ydCk7Ci0JeG1pdCAgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwl4bWl0ICA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKIAkJbndwc2VyaWFsX3B1dGNoYXIodXAsIHVwLT5wb3J0LnhfY2hhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKaW5kZXggOWMxMjQzZi4uMDcwMGNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwpAQCAtMjQyLDEyICsyNDIsMTIgQEAKIAl9CiAKIAkvKiBTYW5pdHkgY2hlY2ssIG1ha2Ugc3VyZSB0aGUgb2xkIGJ1ZyBpcyBubyBsb25nZXIgaGFwcGVuaW5nICovCi0JaWYgKHVhcC0+cG9ydC5pbmZvID09IE5VTEwgfHwgdWFwLT5wb3J0LmluZm8tPnBvcnQudHR5ID09IE5VTEwpIHsKKwlpZiAodWFwLT5wb3J0LnN0YXRlID09IE5VTEwgfHwgdWFwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eSA9PSBOVUxMKSB7CiAJCVdBUk5fT04oMSk7CiAJCSh2b2lkKXJlYWRfenNkYXRhKHVhcCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQl0dHkgPSB1YXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJdHR5ID0gdWFwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAogCXdoaWxlICgxKSB7CiAJCWVycm9yID0gMDsKQEAgLTM2OSw3ICszNjksNyBAQAogCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdWFwLT5wb3J0LAogCQkJCQkgICAgICAgIShzdGF0dXMgJiBDVFMpKTsKIAotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVhcC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWFwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgQlJLX0FCUlQpCkBAIC00MjAsOSArNDIwLDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1YXAtPnBvcnQuaW5mbyA9PSBOVUxMKQorCWlmICh1YXAtPnBvcnQuc3RhdGUgPT0gTlVMTCkKIAkJZ290byBhY2tfdHhfaW50OwotCXhtaXQgPSAmdWFwLT5wb3J0LmluZm8tPnhtaXQ7CisJeG1pdCA9ICZ1YXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkgewogCQl1YXJ0X3dyaXRlX3dha2V1cCgmdWFwLT5wb3J0KTsKIAkJZ290byBhY2tfdHhfaW50OwpAQCAtNjU1LDcgKzY1NSw3IEBACiAJCXBvcnQtPmljb3VudC50eCsrOwogCQlwb3J0LT54X2NoYXIgPSAwOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAkJd3JpdGVfenNkYXRhKHVhcCwgeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKIAkJenNzeW5jKHVhcCk7CkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogCXN0YXRlID0gcG16X3VhcnRfcmVnLnN0YXRlICsgdWFwLT5wb3J0LmxpbmU7CiAKIAltdXRleF9sb2NrKCZwbXpfaXJxX211dGV4KTsKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnN0YXRlLT5wb3J0Lm11dGV4KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1YXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCkBAIC0xNjc2LDcgKzE2NzYsNyBAQAogCS8qIFNodXQgdGhlIGNoaXAgZG93biAqLwogCXBtel9zZXRfc2NjX3Bvd2VyKHVhcCwgMCk7CiAKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+cG9ydC5tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZwbXpfaXJxX211dGV4KTsKIAogCXBtel9kZWJ1Zygic3VzcGVuZCwgc3dpdGNoaW5nIGNvbXBsZXRlXG4iKTsKQEAgLTE3MDUsNyArMTcwNSw3IEBACiAJc3RhdGUgPSBwbXpfdWFydF9yZWcuc3RhdGUgKyB1YXAtPnBvcnQubGluZTsKIAogCW11dGV4X2xvY2soJnBtel9pcnFfbXV0ZXgpOwotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPnBvcnQubXV0ZXgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVhcC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJaWYgKCFaU19JU19PUEVOKHVhcCkgJiYgIVpTX0lTX0NPTlModWFwKSkgewpAQCAtMTczNyw3ICsxNzM3LDcgQEAKIAl9CiAKICBiYWlsOgotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5wb3J0Lm11dGV4KTsKIAltdXRleF91bmxvY2soJnBtel9pcnFfbXV0ZXgpOwogCiAJLyogUmlnaHQgbm93LCB3ZSBkZWFsIHdpdGggZGVsYXkgYnkgYmxvY2tpbmcgaGVyZSwgSSdsbCBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG54OHh4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYwppbmRleCAxYmI4ZjFiLi4wYWE3NWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9wbng4eHh4X3VhcnQuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJaWYgKGNoYW5nZWQgJiBUSU9DTV9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCBzdGF0dXMgJiBUSU9DTV9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIC8qCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlzdHJ1Y3QgcG54OHh4eF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3QgcG54OHh4eF9wb3J0ICopZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHNwb3J0LT5wb3J0LmluZm8pIHsKKwlpZiAoc3BvcnQtPnBvcnQuc3RhdGUpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKIAkJcG54OHh4eF9tY3RybF9jaGVjayhzcG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTE4MSw3ICsxODEsNyBAQAogCiBzdGF0aWMgdm9pZCBwbng4eHh4X3J4X2NoYXJzKHN0cnVjdCBwbng4eHh4X3BvcnQgKnNwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzcG9ydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAKIAlzdGF0dXMgPSBGSUZPX1RPX1NNKHNlcmlhbF9pbihzcG9ydCwgUE5YOFhYWF9GSUZPKSkgfApAQCAtMjQzLDcgKzI0Myw3IEBACiAKIHN0YXRpYyB2b2lkIHBueDh4eHhfdHhfY2hhcnMoc3RydWN0IHBueDh4eHhfcG9ydCAqc3BvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LnN0YXRlLT54bWl0OwogCiAJaWYgKHNwb3J0LT5wb3J0LnhfY2hhcikgewogCQlzZXJpYWxfb3V0KHNwb3J0LCBQTlg4WFhYX0ZJRk8sIHNwb3J0LT5wb3J0LnhfY2hhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IGE0OGE4YTEuLjY0NDNiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC05Niw3ICs5Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICp1cCwgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IGNoLCBmbGFnOwogCWludCBtYXhfY291bnQgPSAyNTY7CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9weGFfcG9ydCAqdXApCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWludCBjb3VudDsKIAogCWlmICh1cC0+cG9ydC54X2NoYXIpIHsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ1RTKQogCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKCZ1cC0+cG9ydCwgc3RhdHVzICYgVUFSVF9NU1JfQ1RTKTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCA5NDUzMGYwLi43ZjVlMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJaWYgKGNoYW5nZWQgJiBUSU9DTV9DVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCBzdGF0dXMgJiBUSU9DTV9DVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiB9CiAKIC8qCkBAIC0xMjksNyArMTI5LDcgQEAKIAlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gKHN0cnVjdCBzYTExMDBfcG9ydCAqKWRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChzcG9ydC0+cG9ydC5pbmZvKSB7CisJaWYgKHNwb3J0LT5wb3J0LnN0YXRlKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJCXNhMTEwMF9tY3RybF9jaGVjayhzcG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTE4OSw3ICsxODksNyBAQAogc3RhdGljIHZvaWQKIHNhMTEwMF9yeF9jaGFycyhzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzcG9ydC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAKIAlzdGF0dXMgPSBVVFNSMV9UT19TTShVQVJUX0dFVF9VVFNSMShzcG9ydCkpIHwKQEAgLTIzOSw3ICsyMzksNyBAQAogCiBzdGF0aWMgdm9pZCBzYTExMDBfdHhfY2hhcnMoc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmc3BvcnQtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmc3BvcnQtPnBvcnQuc3RhdGUtPnhtaXQ7CiAKIAlpZiAoc3BvcnQtPnBvcnQueF9jaGFyKSB7CiAJCVVBUlRfUFVUX0NIQVIoc3BvcnQsIHNwb3J0LT5wb3J0LnhfY2hhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKaW5kZXggYzg4NTFhMC4uMTUyM2U4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiB7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0ID0gZGV2X2lkOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmb3VycG9ydC0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBpbnQgdWZjb24sIGNoLCBmbGFnLCB1ZnN0YXQsIHVlcnN0YXQ7CiAJaW50IG1heF9jb3VudCA9IDY0OwogCkBAIC0yODEsNyArMjgxLDcgQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQgPSBpZDsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJm91cnBvcnQtPnBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCWludCBjb3VudCA9IDI1NjsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKQEAgLTk5MiwxMCArOTkyLDEwIEBACiAJCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvczsKIAkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAotCQlpZiAodXBvcnQtPmluZm8gPT0gTlVMTCkKKwkJaWYgKHVwb3J0LT5zdGF0ZSA9PSBOVUxMKQogCQkJZ290byBleGl0OwogCi0JCXR0eSA9IHVwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwkJdHR5ID0gdXBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAogCQlpZiAodHR5ID09IE5VTEwpCiAJCQlnb3RvIGV4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYjEyNTAtZHVhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCmluZGV4IDMxOWU4YjguLmEyZjJiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCkBAIC0zODQsMTMgKzM4NCwxMyBAQAogCQl1YXJ0X2luc2VydF9jaGFyKHVwb3J0LCBzdGF0dXMsIE1fRFVBUlRfT1ZSVU5fRVJSLCBjaCwgZmxhZyk7CiAJfQogCi0JdHR5X2ZsaXBfYnVmZmVyX3B1c2godXBvcnQtPmluZm8tPnBvcnQudHR5KTsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh1cG9ydC0+c3RhdGUtPnBvcnQudHR5KTsKIH0KIAogc3RhdGljIHZvaWQgc2JkX3RyYW5zbWl0X2NoYXJzKHN0cnVjdCBzYmRfcG9ydCAqc3BvcnQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSAmc3BvcnQtPnBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnNwb3J0LT5wb3J0LnN0YXRlLT54bWl0OwogCXVuc2lnbmVkIGludCBtYXNrOwogCWludCBzdG9wX3R4OwogCkBAIC00NDAsNyArNDQwLDcgQEAKIAogCWlmIChkZWx0YSAmICgoTV9EVUFSVF9JTl9QSU4yX1ZBTCB8IE1fRFVBUlRfSU5fUElOMF9WQUwpIDw8CiAJCSAgICAgU19EVUFSVF9JTl9QSU5fQ0hORykpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXBvcnQtPmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cG9ydC0+c3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2JkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYzI2eHguYyBiL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCmluZGV4IGUwYmUxMWMuLjc1MDM4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCkBAIC0xNDAsOCArMTQwLDggQEAKIAljaGFyIGZsYWc7CiAJdTggc3RhdHVzOwogCi0JaWYgKHBvcnQtPmluZm8gIT0gTlVMTCkJCS8qIFVub3BlbmVkIHNlcmlhbCBjb25zb2xlICovCi0JCXR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCWlmIChwb3J0LT5zdGF0ZSAhPSBOVUxMKQkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KKwkJdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCiAJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CiAJCXN0YXR1cyA9IFJFQURfU0NfUE9SVChwb3J0LCBTUik7CkBAIC0xOTAsMTAgKzE5MCwxMCBAQAogewogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdDsKIAotCWlmICghcG9ydC0+aW5mbykKKwlpZiAoIXBvcnQtPnN0YXRlKQogCQlyZXR1cm47CiAKLQl4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZChwb3J0KSkgewogCQlzYzI2eHhfZGlzYWJsZV9pcnEocG9ydCwgSU1SX1RYUkRZKTsKIAkJcmV0dXJuOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAvKiBwb3J0LT5sb2NrIGhlbGQgYnkgY2FsbGVyLiAgKi8KIHN0YXRpYyB2b2lkIHNjMjZ4eF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAogCXdoaWxlICghdWFydF9jaXJjX2VtcHR5KHhtaXQpKSB7CiAJCWlmICghKFJFQURfU0NfUE9SVChwb3J0LCBTUikgJiBTUl9UWFJEWSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IGIwYmIyOWQuLjI1MTRkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4gLyogZm9yIHNlcmlhbF9zdGF0ZSBhbmQgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCAqLworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCkBAIC01Miw4ICs1Miw2IEBACiAKICNkZWZpbmUgSElHSF9CSVRTX09GRlNFVAkoKHNpemVvZihsb25nKS1zaXplb2YoaW50KSkqOCkKIAotI2RlZmluZSB1YXJ0X3VzZXJzKHN0YXRlKQkoKHN0YXRlKS0+Y291bnQgKyAoc3RhdGUpLT5pbmZvLnBvcnQuYmxvY2tlZF9vcGVuKQotCiAjaWZkZWYgQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEUKICNkZWZpbmUgdWFydF9jb25zb2xlKHBvcnQpCSgocG9ydCktPmNvbnMgJiYgKHBvcnQpLT5jb25zLT5pbmRleCA9PSAocG9ydCktPmxpbmUpCiAjZWxzZQpAQCAtNzEsMTkgKzY5LDE5IEBACiAgKi8KIHZvaWQgdWFydF93cml0ZV93YWtldXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gcG9ydC0+aW5mbzsKKwlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBwb3J0LT5zdGF0ZTsKIAkvKgogCSAqIFRoaXMgbWVhbnMgeW91IGNhbGxlZCB0aGlzIGZ1bmN0aW9uIF9hZnRlcl8gdGhlIHBvcnQgd2FzCiAJICogY2xvc2VkLiAgTm8gY29va2llIGZvciB5b3UuCiAJICovCi0JQlVHX09OKCFpbmZvKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50bGV0KTsKKwlCVUdfT04oIXN0YXRlKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZzdGF0ZS0+dGxldCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVhcnRfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtOTQsOSArOTIsOSBAQAogc3RhdGljIHZvaWQgX191YXJ0X3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAKLQlpZiAoIXVhcnRfY2lyY19lbXB0eSgmc3RhdGUtPmluZm8ueG1pdCkgJiYgc3RhdGUtPmluZm8ueG1pdC5idWYgJiYKKwlpZiAoIXVhcnRfY2lyY19lbXB0eSgmc3RhdGUtPnhtaXQpICYmIHN0YXRlLT54bWl0LmJ1ZiAmJgogCSAgICAhdHR5LT5zdG9wcGVkICYmICF0dHktPmh3X3N0b3BwZWQpCiAJCXBvcnQtPm9wcy0+c3RhcnRfdHgocG9ydCk7CiB9CkBAIC0xMDQsNyArMTAyLDcgQEAKIHN0YXRpYyB2b2lkIHVhcnRfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTExNSw3ICsxMTMsNyBAQAogc3RhdGljIHZvaWQgdWFydF90YXNrbGV0X2FjdGlvbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCB1YXJ0X3N0YXRlICopZGF0YTsKLQl0dHlfd2FrZXVwKHN0YXRlLT5pbmZvLnBvcnQudHR5KTsKKwl0dHlfd2FrZXVwKHN0YXRlLT5wb3J0LnR0eSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMTQxLDEyICsxMzksMTIgQEAKICAqLwogc3RhdGljIGludCB1YXJ0X3N0YXJ0dXAoc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCBpbnQgaW5pdF9odykKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWlmIChpbmZvLT5mbGFncyAmIFVJRl9JTklUSUFMSVpFRCkKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMTU0LDI2ICsxNTIsMjYgQEAKIAkgKiBvbmNlIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IG9wZW5lZCB0aGUgcG9ydC4gIEFsc28gc2V0CiAJICogdXAgdGhlIHR0eS0+YWx0X3NwZWVkIGtsdWRnZQogCSAqLwotCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnBvcnQtPnR0eS0+ZmxhZ3MpOwogCi0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQorCWlmICh1cG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04pCiAJCXJldHVybiAwOwogCiAJLyoKIAkgKiBJbml0aWFsaXNlIGFuZCBhbGxvY2F0ZSB0aGUgdHJhbnNtaXQgYW5kIHRlbXBvcmFyeQogCSAqIGJ1ZmZlci4KIAkgKi8KLQlpZiAoIWluZm8tPnhtaXQuYnVmKSB7CisJaWYgKCFzdGF0ZS0+eG1pdC5idWYpIHsKIAkJLyogVGhpcyBpcyBwcm90ZWN0ZWQgYnkgdGhlIHBlciBwb3J0IG11dGV4ICovCiAJCXBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICghcGFnZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCWluZm8tPnhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTsKLQkJdWFydF9jaXJjX2NsZWFyKCZpbmZvLT54bWl0KTsKKwkJc3RhdGUtPnhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTsKKwkJdWFydF9jaXJjX2NsZWFyKCZzdGF0ZS0+eG1pdCk7CiAJfQogCi0JcmV0dmFsID0gcG9ydC0+b3BzLT5zdGFydHVwKHBvcnQpOworCXJldHZhbCA9IHVwb3J0LT5vcHMtPnN0YXJ0dXAodXBvcnQpOwogCWlmIChyZXR2YWwgPT0gMCkgewogCQlpZiAoaW5pdF9odykgewogCQkJLyoKQEAgLTE4NSwyMCArMTgzLDIwIEBACiAJCQkgKiBTZXR1cCB0aGUgUlRTIGFuZCBEVFIgc2lnbmFscyBvbmNlIHRoZQogCQkJICogcG9ydCBpcyBvcGVuIGFuZCByZWFkeSB0byByZXNwb25kLgogCQkJICovCi0JCQlpZiAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKLQkJCQl1YXJ0X3NldF9tY3RybChwb3J0LCBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOworCQkJaWYgKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQorCQkJCXVhcnRfc2V0X21jdHJsKHVwb3J0LCBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOwogCQl9CiAKLQkJaWYgKGluZm8tPmZsYWdzICYgVUlGX0NUU19GTE9XKSB7Ci0JCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJCWlmICghKHBvcnQtPm9wcy0+Z2V0X21jdHJsKHBvcnQpICYgVElPQ01fQ1RTKSkKLQkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7Ci0JCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgeworCQkJc3Bpbl9sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCQkJaWYgKCEodXBvcnQtPm9wcy0+Z2V0X21jdHJsKHVwb3J0KSAmIFRJT0NNX0NUUykpCisJCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdXBvcnQtPmxvY2spOwogCQl9CiAKLQkJaW5mby0+ZmxhZ3MgfD0gVUlGX0lOSVRJQUxJWkVEOworCQlzZXRfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPmZsYWdzKTsKIAotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnBvcnQtPnR0eS0+ZmxhZ3MpOwogCX0KIAogCWlmIChyZXR2YWwgJiYgY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTIxNCw5ICsyMTIsOSBAQAogICovCiBzdGF0aWMgdm9pZCB1YXJ0X3NodXRkb3duKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwogCiAJLyoKIAkgKiBTZXQgdGhlIFRUWSBJTyBlcnJvciBtYXJrZXIKQEAgLTIyNCwxNCArMjIyLDEyIEBACiAJaWYgKHR0eSkKIAkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAotCWlmIChpbmZvLT5mbGFncyAmIFVJRl9JTklUSUFMSVpFRCkgewotCQlpbmZvLT5mbGFncyAmPSB+VUlGX0lOSVRJQUxJWkVEOwotCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5mbGFncykpIHsKIAkJLyoKIAkJICogVHVybiBvZmYgRFRSIGFuZCBSVFMgZWFybHkuCiAJCSAqLwogCQlpZiAoIXR0eSB8fCAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQotCQkJdWFydF9jbGVhcl9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworCQkJdWFydF9jbGVhcl9tY3RybCh1cG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAogCQkvKgogCQkgKiBjbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3M6IHdlIG1heSBmcmVlCkBAIC0yNDAsMzAgKzIzNiwzMCBAQAogCQkgKiBhbnkgb3V0c3RhbmRpbmcgZmlsZSBkZXNjcmlwdG9ycyBzaG91bGQgYmUgcG9pbnRpbmcgYXQKIAkJICogaHVuZ191cF90dHlfZm9wcyBub3cuCiAJCSAqLwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkJLyoKIAkJICogRnJlZSB0aGUgSVJRIGFuZCBkaXNhYmxlIHRoZSBwb3J0LgogCQkgKi8KLQkJcG9ydC0+b3BzLT5zaHV0ZG93bihwb3J0KTsKKwkJdXBvcnQtPm9wcy0+c2h1dGRvd24odXBvcnQpOwogCiAJCS8qCiAJCSAqIEVuc3VyZSB0aGF0IHRoZSBJUlEgaGFuZGxlciBpc24ndCBydW5uaW5nIG9uIGFub3RoZXIgQ1BVLgogCQkgKi8KLQkJc3luY2hyb25pemVfaXJxKHBvcnQtPmlycSk7CisJCXN5bmNocm9uaXplX2lycSh1cG9ydC0+aXJxKTsKIAl9CiAKIAkvKgogCSAqIGtpbGwgb2ZmIG91ciB0YXNrbGV0CiAJICovCi0JdGFza2xldF9raWxsKCZpbmZvLT50bGV0KTsKKwl0YXNrbGV0X2tpbGwoJnN0YXRlLT50bGV0KTsKIAogCS8qCiAJICogRnJlZSB0aGUgdHJhbnNtaXQgYnVmZmVyIHBhZ2UuCiAJICovCi0JaWYgKGluZm8tPnhtaXQuYnVmKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylpbmZvLT54bWl0LmJ1Zik7Ci0JCWluZm8tPnhtaXQuYnVmID0gTlVMTDsKKwlpZiAoc3RhdGUtPnhtaXQuYnVmKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzdGF0ZS0+eG1pdC5idWYpOworCQlzdGF0ZS0+eG1pdC5idWYgPSBOVUxMOwogCX0KIH0KIApAQCAtNDMwLDE1ICs0MjYsMTYgQEAKIHN0YXRpYyB2b2lkCiB1YXJ0X2NoYW5nZV9zcGVlZChzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHN0YXRlLT5pbmZvLnBvcnQudHR5OwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIG5vIHR0eSwgdGVybWlvcywgb3IgdGhlIHBvcnQgZG9lcyBub3QgZXhpc3QsCiAJICogdGhlbiB3ZSBjYW4ndCBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoaXMgcG9ydC4KIAkgKi8KLQlpZiAoIXR0eSB8fCAhdHR5LT50ZXJtaW9zIHx8IHBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQorCWlmICghdHR5IHx8ICF0dHktPnRlcm1pb3MgfHwgdXBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQogCQlyZXR1cm47CiAKIAl0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOwpAQCAtNDQ3LDE2ICs0NDQsMTYgQEAKIAkgKiBTZXQgZmxhZ3MgYmFzZWQgb24gdGVybWlvcyBjZmxhZwogCSAqLwogCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykKLQkJc3RhdGUtPmluZm8uZmxhZ3MgfD0gVUlGX0NUU19GTE9XOworCQlzZXRfYml0KEFTWU5DQl9DVFNfRkxPVywgJnBvcnQtPmZsYWdzKTsKIAllbHNlCi0JCXN0YXRlLT5pbmZvLmZsYWdzICY9IH5VSUZfQ1RTX0ZMT1c7CisJCWNsZWFyX2JpdChBU1lOQ0JfQ1RTX0ZMT1csICZwb3J0LT5mbGFncyk7CiAKIAlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKLQkJc3RhdGUtPmluZm8uZmxhZ3MgJj0gflVJRl9DSEVDS19DRDsKKwkJY2xlYXJfYml0KEFTWU5DQl9DSEVDS19DRCwgJnBvcnQtPmZsYWdzKTsKIAllbHNlCi0JCXN0YXRlLT5pbmZvLmZsYWdzIHw9IFVJRl9DSEVDS19DRDsKKwkJc2V0X2JpdChBU1lOQ0JfQ0hFQ0tfQ0QsICZwb3J0LT5mbGFncyk7CiAKLQlwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHBvcnQsIHRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKKwl1cG9ydC0+b3BzLT5zZXRfdGVybWlvcyh1cG9ydCwgdGVybWlvcywgb2xkX3Rlcm1pb3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtNDgyLDcgKzQ3OSw3IEBACiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotCXJldHVybiBfX3VhcnRfcHV0X2NoYXIoc3RhdGUtPnBvcnQsICZzdGF0ZS0+aW5mby54bWl0LCBjaCk7CisJcmV0dXJuIF9fdWFydF9wdXRfY2hhcihzdGF0ZS0+dWFydF9wb3J0LCAmc3RhdGUtPnhtaXQsIGNoKTsKIH0KIAogc3RhdGljIHZvaWQgdWFydF9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNTA4LDggKzUwNSw4IEBACiAJCXJldHVybiAtRUwzSExUOwogCX0KIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKLQljaXJjID0gJnN0YXRlLT5pbmZvLnhtaXQ7CisJcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CisJY2lyYyA9ICZzdGF0ZS0+eG1pdDsKIAogCWlmICghY2lyYy0+YnVmKQogCQlyZXR1cm4gMDsKQEAgLTUzOSw5ICs1MzYsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+cG9ydC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IHVhcnRfY2lyY19jaGFyc19mcmVlKCZzdGF0ZS0+aW5mby54bWl0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+cG9ydC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gdWFydF9jaXJjX2NoYXJzX2ZyZWUoJnN0YXRlLT54bWl0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTUxLDkgKzU0OCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gdWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoJnN0YXRlLT5pbmZvLnhtaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT51YXJ0X3BvcnQtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSB1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmc3RhdGUtPnhtaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT51YXJ0X3BvcnQtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NzIsMTEgKzU2OSwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JcG9ydCA9IHN0YXRlLT5wb3J0OworCXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXByX2RlYnVnKCJ1YXJ0X2ZsdXNoX2J1ZmZlciglZCkgY2FsbGVkXG4iLCB0dHktPmluZGV4KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JdWFydF9jaXJjX2NsZWFyKCZzdGF0ZS0+aW5mby54bWl0KTsKKwl1YXJ0X2NpcmNfY2xlYXIoJnN0YXRlLT54bWl0KTsKIAlpZiAocG9ydC0+b3BzLT5mbHVzaF9idWZmZXIpCiAJCXBvcnQtPm9wcy0+Zmx1c2hfYnVmZmVyKHBvcnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTU5MCw3ICs1ODcsNyBAQAogc3RhdGljIHZvaWQgdWFydF9zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwb3J0LT5vcHMtPnNlbmRfeGNoYXIpCkBAIC02MTMsMTMgKzYxMCwxMyBAQAogCQl1YXJ0X3NlbmRfeGNoYXIodHR5LCBTVE9QX0NIQVIodHR5KSk7CiAKIAlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykKLQkJdWFydF9jbGVhcl9tY3RybChzdGF0ZS0+cG9ydCwgVElPQ01fUlRTKTsKKwkJdWFydF9jbGVhcl9tY3RybChzdGF0ZS0+dWFydF9wb3J0LCBUSU9DTV9SVFMpOwogfQogCiBzdGF0aWMgdm9pZCB1YXJ0X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAogCWlmIChJX0lYT0ZGKHR0eSkpIHsKIAkJaWYgKHBvcnQtPnhfY2hhcikKQEAgLTYzNSwzNSArNjMyLDM2IEBACiBzdGF0aWMgaW50IHVhcnRfZ2V0X2luZm8oc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLAogCQkJIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CiAKIAltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwogCiAJLyogRW5zdXJlIHRoZSBzdGF0ZSB3ZSBjb3B5IGlzIGNvbnNpc3RlbnQgYW5kIG5vIGhhcmR3YXJlIGNoYW5nZXMKIAkgICBvY2N1ciBhcyB3ZSBnbyAqLwotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCi0JdG1wLnR5cGUJICAgID0gcG9ydC0+dHlwZTsKLQl0bXAubGluZQkgICAgPSBwb3J0LT5saW5lOwotCXRtcC5wb3J0CSAgICA9IHBvcnQtPmlvYmFzZTsKKwl0bXAudHlwZQkgICAgPSB1cG9ydC0+dHlwZTsKKwl0bXAubGluZQkgICAgPSB1cG9ydC0+bGluZTsKKwl0bXAucG9ydAkgICAgPSB1cG9ydC0+aW9iYXNlOwogCWlmIChISUdIX0JJVFNfT0ZGU0VUKQotCQl0bXAucG9ydF9oaWdoID0gKGxvbmcpIHBvcnQtPmlvYmFzZSA+PiBISUdIX0JJVFNfT0ZGU0VUOwotCXRtcC5pcnEJCSAgICA9IHBvcnQtPmlycTsKLQl0bXAuZmxhZ3MJICAgID0gcG9ydC0+ZmxhZ3M7Ci0JdG1wLnhtaXRfZmlmb19zaXplICA9IHBvcnQtPmZpZm9zaXplOwotCXRtcC5iYXVkX2Jhc2UJICAgID0gcG9ydC0+dWFydGNsayAvIDE2OwotCXRtcC5jbG9zZV9kZWxheQkgICAgPSBzdGF0ZS0+Y2xvc2VfZGVsYXkgLyAxMDsKLQl0bXAuY2xvc2luZ193YWl0ICAgID0gc3RhdGUtPmNsb3Npbmdfd2FpdCA9PSBVU0ZfQ0xPU0lOR19XQUlUX05PTkUgPworCQl0bXAucG9ydF9oaWdoID0gKGxvbmcpIHVwb3J0LT5pb2Jhc2UgPj4gSElHSF9CSVRTX09GRlNFVDsKKwl0bXAuaXJxCQkgICAgPSB1cG9ydC0+aXJxOworCXRtcC5mbGFncwkgICAgPSB1cG9ydC0+ZmxhZ3M7CisJdG1wLnhtaXRfZmlmb19zaXplICA9IHVwb3J0LT5maWZvc2l6ZTsKKwl0bXAuYmF1ZF9iYXNlCSAgICA9IHVwb3J0LT51YXJ0Y2xrIC8gMTY7CisJdG1wLmNsb3NlX2RlbGF5CSAgICA9IHBvcnQtPmNsb3NlX2RlbGF5IC8gMTA7CisJdG1wLmNsb3Npbmdfd2FpdCAgICA9IHBvcnQtPmNsb3Npbmdfd2FpdCA9PSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSA/CiAJCQkJQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUgOgotCQkJCXN0YXRlLT5jbG9zaW5nX3dhaXQgLyAxMDsKLQl0bXAuY3VzdG9tX2Rpdmlzb3IgID0gcG9ydC0+Y3VzdG9tX2Rpdmlzb3I7Ci0JdG1wLmh1YjYJICAgID0gcG9ydC0+aHViNjsKLQl0bXAuaW9fdHlwZSAgICAgICAgID0gcG9ydC0+aW90eXBlOwotCXRtcC5pb21lbV9yZWdfc2hpZnQgPSBwb3J0LT5yZWdzaGlmdDsKLQl0bXAuaW9tZW1fYmFzZSAgICAgID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylwb3J0LT5tYXBiYXNlOworCQkJCXBvcnQtPmNsb3Npbmdfd2FpdCAvIDEwOworCXRtcC5jdXN0b21fZGl2aXNvciAgPSB1cG9ydC0+Y3VzdG9tX2Rpdmlzb3I7CisJdG1wLmh1YjYJICAgID0gdXBvcnQtPmh1YjY7CisJdG1wLmlvX3R5cGUgICAgICAgICA9IHVwb3J0LT5pb3R5cGU7CisJdG1wLmlvbWVtX3JlZ19zaGlmdCA9IHVwb3J0LT5yZWdzaGlmdDsKKwl0bXAuaW9tZW1fYmFzZSAgICAgID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyl1cG9ydC0+bWFwYmFzZTsKIAotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAogCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNjc0LDcgKzY3Miw4IEBACiAJCQkgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpuZXdpbmZvKQogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBuZXdfcG9ydDsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2lycSwgY2hhbmdlX3BvcnQsIGNsb3Npbmdfd2FpdDsKIAl1bnNpZ25lZCBpbnQgb2xkX2N1c3RvbV9kaXZpc29yLCBjbG9zZV9kZWxheTsKQEAgLTY5MSw1OCArNjkwLDU4IEBACiAJbmV3X3NlcmlhbC5pcnEgPSBpcnFfY2Fub25pY2FsaXplKG5ld19zZXJpYWwuaXJxKTsKIAljbG9zZV9kZWxheSA9IG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgKiAxMDsKIAljbG9zaW5nX3dhaXQgPSBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdCA9PSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSA/Ci0JCQlVU0ZfQ0xPU0lOR19XQUlUX05PTkUgOiBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdCAqIDEwOworCQkJQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUgOiBuZXdfc2VyaWFsLmNsb3Npbmdfd2FpdCAqIDEwOwogCiAJLyoKLQkgKiBUaGlzIHNlbWFwaG9yZSBwcm90ZWN0cyBzdGF0ZS0+Y291bnQuICBJdCBpcyBhbHNvCisJICogVGhpcyBzZW1hcGhvcmUgcHJvdGVjdHMgcG9ydC0+Y291bnQuICBJdCBpcyBhbHNvCiAJICogdmVyeSB1c2VmdWwgdG8gcHJldmVudCBvcGVucy4gIEFsc28sIHRha2UgdGhlCiAJICogcG9ydCBjb25maWd1cmF0aW9uIHNlbWFwaG9yZSB0byBtYWtlIHN1cmUgdGhhdCBhCiAJICogbW9kdWxlIGluc2VydGlvbi9yZW1vdmFsIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nCiAJICogdW5kZXIgdXMuCiAJICovCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CiAKLQljaGFuZ2VfaXJxICA9ICEocG9ydC0+ZmxhZ3MgJiBVUEZfRklYRURfUE9SVCkKLQkJJiYgbmV3X3NlcmlhbC5pcnEgIT0gcG9ydC0+aXJxOworCWNoYW5nZV9pcnEgID0gISh1cG9ydC0+ZmxhZ3MgJiBVUEZfRklYRURfUE9SVCkKKwkJJiYgbmV3X3NlcmlhbC5pcnEgIT0gdXBvcnQtPmlycTsKIAogCS8qCiAJICogU2luY2UgY2hhbmdpbmcgdGhlICd0eXBlJyBvZiB0aGUgcG9ydCBjaGFuZ2VzIGl0cyByZXNvdXJjZQogCSAqIGFsbG9jYXRpb25zLCB3ZSBzaG91bGQgdHJlYXQgdHlwZSBjaGFuZ2VzIHRoZSBzYW1lIGFzCiAJICogSU8gcG9ydCBjaGFuZ2VzLgogCSAqLwotCWNoYW5nZV9wb3J0ID0gIShwb3J0LT5mbGFncyAmIFVQRl9GSVhFRF9QT1JUKQotCQkmJiAobmV3X3BvcnQgIT0gcG9ydC0+aW9iYXNlIHx8Ci0JCSAgICAodW5zaWduZWQgbG9uZyluZXdfc2VyaWFsLmlvbWVtX2Jhc2UgIT0gcG9ydC0+bWFwYmFzZSB8fAotCQkgICAgbmV3X3NlcmlhbC5odWI2ICE9IHBvcnQtPmh1YjYgfHwKLQkJICAgIG5ld19zZXJpYWwuaW9fdHlwZSAhPSBwb3J0LT5pb3R5cGUgfHwKLQkJICAgIG5ld19zZXJpYWwuaW9tZW1fcmVnX3NoaWZ0ICE9IHBvcnQtPnJlZ3NoaWZ0IHx8Ci0JCSAgICBuZXdfc2VyaWFsLnR5cGUgIT0gcG9ydC0+dHlwZSk7CisJY2hhbmdlX3BvcnQgPSAhKHVwb3J0LT5mbGFncyAmIFVQRl9GSVhFRF9QT1JUKQorCQkmJiAobmV3X3BvcnQgIT0gdXBvcnQtPmlvYmFzZSB8fAorCQkgICAgKHVuc2lnbmVkIGxvbmcpbmV3X3NlcmlhbC5pb21lbV9iYXNlICE9IHVwb3J0LT5tYXBiYXNlIHx8CisJCSAgICBuZXdfc2VyaWFsLmh1YjYgIT0gdXBvcnQtPmh1YjYgfHwKKwkJICAgIG5ld19zZXJpYWwuaW9fdHlwZSAhPSB1cG9ydC0+aW90eXBlIHx8CisJCSAgICBuZXdfc2VyaWFsLmlvbWVtX3JlZ19zaGlmdCAhPSB1cG9ydC0+cmVnc2hpZnQgfHwKKwkJICAgIG5ld19zZXJpYWwudHlwZSAhPSB1cG9ydC0+dHlwZSk7CiAKLQlvbGRfZmxhZ3MgPSBwb3J0LT5mbGFnczsKKwlvbGRfZmxhZ3MgPSB1cG9ydC0+ZmxhZ3M7CiAJbmV3X2ZsYWdzID0gbmV3X3NlcmlhbC5mbGFnczsKLQlvbGRfY3VzdG9tX2Rpdmlzb3IgPSBwb3J0LT5jdXN0b21fZGl2aXNvcjsKKwlvbGRfY3VzdG9tX2Rpdmlzb3IgPSB1cG9ydC0+Y3VzdG9tX2Rpdmlzb3I7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJcmV0dmFsID0gLUVQRVJNOwogCQlpZiAoY2hhbmdlX2lycSB8fCBjaGFuZ2VfcG9ydCB8fAotCQkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlICE9IHBvcnQtPnVhcnRjbGsgLyAxNikgfHwKLQkJICAgIChjbG9zZV9kZWxheSAhPSBzdGF0ZS0+Y2xvc2VfZGVsYXkpIHx8Ci0JCSAgICAoY2xvc2luZ193YWl0ICE9IHN0YXRlLT5jbG9zaW5nX3dhaXQpIHx8CisJCSAgICAobmV3X3NlcmlhbC5iYXVkX2Jhc2UgIT0gdXBvcnQtPnVhcnRjbGsgLyAxNikgfHwKKwkJICAgIChjbG9zZV9kZWxheSAhPSBwb3J0LT5jbG9zZV9kZWxheSkgfHwKKwkJICAgIChjbG9zaW5nX3dhaXQgIT0gcG9ydC0+Y2xvc2luZ193YWl0KSB8fAogCQkgICAgKG5ld19zZXJpYWwueG1pdF9maWZvX3NpemUgJiYKLQkJICAgICBuZXdfc2VyaWFsLnhtaXRfZmlmb19zaXplICE9IHBvcnQtPmZpZm9zaXplKSB8fAorCQkgICAgIG5ld19zZXJpYWwueG1pdF9maWZvX3NpemUgIT0gdXBvcnQtPmZpZm9zaXplKSB8fAogCQkgICAgKCgobmV3X2ZsYWdzIF4gb2xkX2ZsYWdzKSAmIH5VUEZfVVNSX01BU0spICE9IDApKQogCQkJZ290byBleGl0OwotCQlwb3J0LT5mbGFncyA9ICgocG9ydC0+ZmxhZ3MgJiB+VVBGX1VTUl9NQVNLKSB8CisJCXVwb3J0LT5mbGFncyA9ICgodXBvcnQtPmZsYWdzICYgflVQRl9VU1JfTUFTSykgfAogCQkJICAgICAgIChuZXdfZmxhZ3MgJiBVUEZfVVNSX01BU0spKTsKLQkJcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOworCQl1cG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOwogCQlnb3RvIGNoZWNrX2FuZF9leGl0OwogCX0KIAogCS8qCiAJICogQXNrIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIHRvIHZlcmlmeSB0aGUgc2V0dGluZ3MuCiAJICovCi0JaWYgKHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQpCi0JCXJldHZhbCA9IHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQocG9ydCwgJm5ld19zZXJpYWwpOworCWlmICh1cG9ydC0+b3BzLT52ZXJpZnlfcG9ydCkKKwkJcmV0dmFsID0gdXBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQodXBvcnQsICZuZXdfc2VyaWFsKTsKIAogCWlmICgobmV3X3NlcmlhbC5pcnEgPj0gbnJfaXJxcykgfHwgKG5ld19zZXJpYWwuaXJxIDwgMCkgfHwKIAkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlIDwgOTYwMCkpCkBAIC03NTcsNyArNzU2LDcgQEAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIHRoZSBzb2xlIHVzZXIgb2YgdGhpcyBwb3J0LgogCQkgKi8KLQkJaWYgKHVhcnRfdXNlcnMoc3RhdGUpID4gMSkKKwkJaWYgKHR0eV9wb3J0X3VzZXJzKHBvcnQpID4gMSkKIAkJCWdvdG8gZXhpdDsKIAogCQkvKgpAQCAtNzcxLDMxICs3NzAsMzEgQEAKIAkJdW5zaWduZWQgbG9uZyBvbGRfaW9iYXNlLCBvbGRfbWFwYmFzZTsKIAkJdW5zaWduZWQgaW50IG9sZF90eXBlLCBvbGRfaW90eXBlLCBvbGRfaHViNiwgb2xkX3NoaWZ0OwogCi0JCW9sZF9pb2Jhc2UgPSBwb3J0LT5pb2Jhc2U7Ci0JCW9sZF9tYXBiYXNlID0gcG9ydC0+bWFwYmFzZTsKLQkJb2xkX3R5cGUgPSBwb3J0LT50eXBlOwotCQlvbGRfaHViNiA9IHBvcnQtPmh1YjY7Ci0JCW9sZF9pb3R5cGUgPSBwb3J0LT5pb3R5cGU7Ci0JCW9sZF9zaGlmdCA9IHBvcnQtPnJlZ3NoaWZ0OworCQlvbGRfaW9iYXNlID0gdXBvcnQtPmlvYmFzZTsKKwkJb2xkX21hcGJhc2UgPSB1cG9ydC0+bWFwYmFzZTsKKwkJb2xkX3R5cGUgPSB1cG9ydC0+dHlwZTsKKwkJb2xkX2h1YjYgPSB1cG9ydC0+aHViNjsKKwkJb2xkX2lvdHlwZSA9IHVwb3J0LT5pb3R5cGU7CisJCW9sZF9zaGlmdCA9IHVwb3J0LT5yZWdzaGlmdDsKIAogCQkvKgogCQkgKiBGcmVlIGFuZCByZWxlYXNlIG9sZCByZWdpb25zCiAJCSAqLwogCQlpZiAob2xkX3R5cGUgIT0gUE9SVF9VTktOT1dOKQotCQkJcG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQocG9ydCk7CisJCQl1cG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQodXBvcnQpOwogCi0JCXBvcnQtPmlvYmFzZSA9IG5ld19wb3J0OwotCQlwb3J0LT50eXBlID0gbmV3X3NlcmlhbC50eXBlOwotCQlwb3J0LT5odWI2ID0gbmV3X3NlcmlhbC5odWI2OwotCQlwb3J0LT5pb3R5cGUgPSBuZXdfc2VyaWFsLmlvX3R5cGU7Ci0JCXBvcnQtPnJlZ3NoaWZ0ID0gbmV3X3NlcmlhbC5pb21lbV9yZWdfc2hpZnQ7Ci0JCXBvcnQtPm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZyluZXdfc2VyaWFsLmlvbWVtX2Jhc2U7CisJCXVwb3J0LT5pb2Jhc2UgPSBuZXdfcG9ydDsKKwkJdXBvcnQtPnR5cGUgPSBuZXdfc2VyaWFsLnR5cGU7CisJCXVwb3J0LT5odWI2ID0gbmV3X3NlcmlhbC5odWI2OworCQl1cG9ydC0+aW90eXBlID0gbmV3X3NlcmlhbC5pb190eXBlOworCQl1cG9ydC0+cmVnc2hpZnQgPSBuZXdfc2VyaWFsLmlvbWVtX3JlZ19zaGlmdDsKKwkJdXBvcnQtPm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZyluZXdfc2VyaWFsLmlvbWVtX2Jhc2U7CiAKIAkJLyoKIAkJICogQ2xhaW0gYW5kIG1hcCB0aGUgbmV3IHJlZ2lvbnMKIAkJICovCi0JCWlmIChwb3J0LT50eXBlICE9IFBPUlRfVU5LTk9XTikgewotCQkJcmV0dmFsID0gcG9ydC0+b3BzLT5yZXF1ZXN0X3BvcnQocG9ydCk7CisJCWlmICh1cG9ydC0+dHlwZSAhPSBQT1JUX1VOS05PV04pIHsKKwkJCXJldHZhbCA9IHVwb3J0LT5vcHMtPnJlcXVlc3RfcG9ydCh1cG9ydCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBBbHdheXMgc3VjY2VzcyAtIEplYW4gSUkgKi8KIAkJCXJldHZhbCA9IDA7CkBAIC04MDYsMTkgKzgwNSwxOSBAQAogCQkgKiBuZXcgcG9ydCwgdHJ5IHRvIHJlc3RvcmUgdGhlIG9sZCBzZXR0aW5ncy4KIAkJICovCiAJCWlmIChyZXR2YWwgJiYgb2xkX3R5cGUgIT0gUE9SVF9VTktOT1dOKSB7Ci0JCQlwb3J0LT5pb2Jhc2UgPSBvbGRfaW9iYXNlOwotCQkJcG9ydC0+dHlwZSA9IG9sZF90eXBlOwotCQkJcG9ydC0+aHViNiA9IG9sZF9odWI2OwotCQkJcG9ydC0+aW90eXBlID0gb2xkX2lvdHlwZTsKLQkJCXBvcnQtPnJlZ3NoaWZ0ID0gb2xkX3NoaWZ0OwotCQkJcG9ydC0+bWFwYmFzZSA9IG9sZF9tYXBiYXNlOwotCQkJcmV0dmFsID0gcG9ydC0+b3BzLT5yZXF1ZXN0X3BvcnQocG9ydCk7CisJCQl1cG9ydC0+aW9iYXNlID0gb2xkX2lvYmFzZTsKKwkJCXVwb3J0LT50eXBlID0gb2xkX3R5cGU7CisJCQl1cG9ydC0+aHViNiA9IG9sZF9odWI2OworCQkJdXBvcnQtPmlvdHlwZSA9IG9sZF9pb3R5cGU7CisJCQl1cG9ydC0+cmVnc2hpZnQgPSBvbGRfc2hpZnQ7CisJCQl1cG9ydC0+bWFwYmFzZSA9IG9sZF9tYXBiYXNlOworCQkJcmV0dmFsID0gdXBvcnQtPm9wcy0+cmVxdWVzdF9wb3J0KHVwb3J0KTsKIAkJCS8qCiAJCQkgKiBJZiB3ZSBmYWlsZWQgdG8gcmVzdG9yZSB0aGUgb2xkIHNldHRpbmdzLAogCQkJICogd2UgZmFpbCBsaWtlIHRoaXMuCiAJCQkgKi8KIAkJCWlmIChyZXR2YWwpCi0JCQkJcG9ydC0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKKwkJCQl1cG9ydC0+dHlwZSA9IFBPUlRfVU5LTk9XTjsKIAogCQkJLyoKIAkJCSAqIFdlIGZhaWxlZCBhbnl3YXkuCkBAIC04MzAsNDUgKzgyOSw0NSBAQAogCX0KIAogCWlmIChjaGFuZ2VfaXJxKQotCQlwb3J0LT5pcnEgICAgICA9IG5ld19zZXJpYWwuaXJxOwotCWlmICghKHBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1BPUlQpKQotCQlwb3J0LT51YXJ0Y2xrICA9IG5ld19zZXJpYWwuYmF1ZF9iYXNlICogMTY7Ci0JcG9ydC0+ZmxhZ3MgICAgICAgICAgICA9IChwb3J0LT5mbGFncyAmIH5VUEZfQ0hBTkdFX01BU0spIHwKKwkJdXBvcnQtPmlycSAgICAgID0gbmV3X3NlcmlhbC5pcnE7CisJaWYgKCEodXBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1BPUlQpKQorCQl1cG9ydC0+dWFydGNsayAgPSBuZXdfc2VyaWFsLmJhdWRfYmFzZSAqIDE2OworCXVwb3J0LT5mbGFncyAgICAgICAgICAgID0gKHVwb3J0LT5mbGFncyAmIH5VUEZfQ0hBTkdFX01BU0spIHwKIAkJCQkgKG5ld19mbGFncyAmIFVQRl9DSEFOR0VfTUFTSyk7Ci0JcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgICA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7Ci0Jc3RhdGUtPmNsb3NlX2RlbGF5ICAgICA9IGNsb3NlX2RlbGF5OwotCXN0YXRlLT5jbG9zaW5nX3dhaXQgICAgPSBjbG9zaW5nX3dhaXQ7CisJdXBvcnQtPmN1c3RvbV9kaXZpc29yICAgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOworCXBvcnQtPmNsb3NlX2RlbGF5ICAgICA9IGNsb3NlX2RlbGF5OworCXBvcnQtPmNsb3Npbmdfd2FpdCAgICA9IGNsb3Npbmdfd2FpdDsKIAlpZiAobmV3X3NlcmlhbC54bWl0X2ZpZm9fc2l6ZSkKLQkJcG9ydC0+Zmlmb3NpemUgPSBuZXdfc2VyaWFsLnhtaXRfZmlmb19zaXplOwotCWlmIChzdGF0ZS0+aW5mby5wb3J0LnR0eSkKLQkJc3RhdGUtPmluZm8ucG9ydC50dHktPmxvd19sYXRlbmN5ID0KLQkJCShwb3J0LT5mbGFncyAmIFVQRl9MT1dfTEFURU5DWSkgPyAxIDogMDsKKwkJdXBvcnQtPmZpZm9zaXplID0gbmV3X3NlcmlhbC54bWl0X2ZpZm9fc2l6ZTsKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0KKwkJCSh1cG9ydC0+ZmxhZ3MgJiBVUEZfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAKICBjaGVja19hbmRfZXhpdDoKIAlyZXR2YWwgPSAwOwotCWlmIChwb3J0LT50eXBlID09IFBPUlRfVU5LTk9XTikKKwlpZiAodXBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKQogCQlnb3RvIGV4aXQ7Ci0JaWYgKHN0YXRlLT5pbmZvLmZsYWdzICYgVUlGX0lOSVRJQUxJWkVEKSB7Ci0JCWlmICgoKG9sZF9mbGFncyBeIHBvcnQtPmZsYWdzKSAmIFVQRl9TUERfTUFTSykgfHwKLQkJICAgIG9sZF9jdXN0b21fZGl2aXNvciAhPSBwb3J0LT5jdXN0b21fZGl2aXNvcikgeworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCWlmICgoKG9sZF9mbGFncyBeIHVwb3J0LT5mbGFncykgJiBVUEZfU1BEX01BU0spIHx8CisJCSAgICBvbGRfY3VzdG9tX2Rpdmlzb3IgIT0gdXBvcnQtPmN1c3RvbV9kaXZpc29yKSB7CiAJCQkvKgogCQkJICogSWYgdGhleSdyZSBzZXR0aW5nIHVwIGEgY3VzdG9tIGRpdmlzb3Igb3Igc3BlZWQsCiAJCQkgKiBpbnN0ZWFkIG9mIGNsZWFyaW5nIGl0LCB0aGVuIGJpdGNoIGFib3V0IGl0LiBObwogCQkJICogbmVlZCB0byByYXRlLWxpbWl0OyBpdCdzIENBUF9TWVNfQURNSU4gb25seS4KIAkJCSAqLwotCQkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX1NQRF9NQVNLKSB7CisJCQlpZiAodXBvcnQtPmZsYWdzICYgVVBGX1NQRF9NQVNLKSB7CiAJCQkJY2hhciBidWZbNjRdOwogCQkJCXByaW50ayhLRVJOX05PVElDRQogCQkJCSAgICAgICAiJXMgc2V0cyBjdXN0b20gc3BlZWQgb24gJXMuIFRoaXMgIgogCQkJCSAgICAgICAiaXMgZGVwcmVjYXRlZC5cbiIsIGN1cnJlbnQtPmNvbW0sCi0JCQkJICAgICAgIHR0eV9uYW1lKHN0YXRlLT5pbmZvLnBvcnQudHR5LCBidWYpKTsKKwkJCQkgICAgICAgdHR5X25hbWUocG9ydC0+dHR5LCBidWYpKTsKIAkJCX0KIAkJCXVhcnRfY2hhbmdlX3NwZWVkKHN0YXRlLCBOVUxMKTsKIAkJfQogCX0gZWxzZQogCQlyZXR2YWwgPSB1YXJ0X3N0YXJ0dXAoc3RhdGUsIDEpOwogIGV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTg4MCwxMCArODc5LDExIEBACiBzdGF0aWMgaW50IHVhcnRfZ2V0X2xzcl9pbmZvKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwKIAkJCSAgICAgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJdW5zaWduZWQgaW50IHJlc3VsdDsKIAotCXJlc3VsdCA9IHBvcnQtPm9wcy0+dHhfZW1wdHkocG9ydCk7CisJcmVzdWx0ID0gdXBvcnQtPm9wcy0+dHhfZW1wdHkodXBvcnQpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBhYm91dCB0byBsb2FkIHNvbWV0aGluZyBpbnRvIHRoZSB0cmFuc21pdApAQCAtODkxLDkgKzg5MSw5IEBACiAJICogYXZvaWQgYSByYWNlIGNvbmRpdGlvbiAoZGVwZW5kaW5nIG9uIHdoZW4gdGhlIHRyYW5zbWl0CiAJICogaW50ZXJydXB0IGhhcHBlbnMpLgogCSAqLwotCWlmIChwb3J0LT54X2NoYXIgfHwKLQkgICAgKCh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmc3RhdGUtPmluZm8ueG1pdCkgPiAwKSAmJgotCSAgICAgIXN0YXRlLT5pbmZvLnBvcnQudHR5LT5zdG9wcGVkICYmICFzdGF0ZS0+aW5mby5wb3J0LnR0eS0+aHdfc3RvcHBlZCkpCisJaWYgKHVwb3J0LT54X2NoYXIgfHwKKwkgICAgKCh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmc3RhdGUtPnhtaXQpID4gMCkgJiYKKwkgICAgICFwb3J0LT50dHktPnN0b3BwZWQgJiYgIXBvcnQtPnR0eS0+aHdfc3RvcHBlZCkpCiAJCXJlc3VsdCAmPSB+VElPQ1NFUl9URU1UOwogCiAJcmV0dXJuIHB1dF91c2VyKHJlc3VsdCwgdmFsdWUpOwpAQCAtOTAyLDE5ICs5MDIsMjAgQEAKIHN0YXRpYyBpbnQgdWFydF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCWludCByZXN1bHQgPSAtRUlPOwogCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CiAJaWYgKCghZmlsZSB8fCAhdHR5X2h1bmdfdXBfcChmaWxlKSkgJiYKIAkgICAgISh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKLQkJcmVzdWx0ID0gcG9ydC0+bWN0cmw7CisJCXJlc3VsdCA9IHVwb3J0LT5tY3RybDsKIAotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJcmVzdWx0IHw9IHBvcnQtPm9wcy0+Z2V0X21jdHJsKHBvcnQpOwotCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCXJlc3VsdCB8PSB1cG9ydC0+b3BzLT5nZXRfbWN0cmwodXBvcnQpOworCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkyNCwzNiArOTI1LDM5IEBACiAJICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJaW50IHJldCA9IC1FSU87CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAlpZiAoKCFmaWxlIHx8ICF0dHlfaHVuZ191cF9wKGZpbGUpKSAmJgogCSAgICAhKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgewotCQl1YXJ0X3VwZGF0ZV9tY3RybChwb3J0LCBzZXQsIGNsZWFyKTsKKwkJdWFydF91cGRhdGVfbWN0cmwodXBvcnQsIHNldCwgY2xlYXIpOwogCQlyZXQgPSAwOwogCX0KLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB1YXJ0X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCi0JaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQotCQlwb3J0LT5vcHMtPmJyZWFrX2N0bChwb3J0LCBicmVha19zdGF0ZSk7CisJaWYgKHVwb3J0LT50eXBlICE9IFBPUlRfVU5LTk9XTikKKwkJdXBvcnQtPm9wcy0+YnJlYWtfY3RsKHVwb3J0LCBicmVha19zdGF0ZSk7CiAKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9kb19hdXRvY29uZmlnKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlpbnQgZmxhZ3MsIHJldDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTk2NCwzMyArOTY4LDMzIEBACiAJICogY2hhbmdpbmcsIGFuZCBoZW5jZSBhbnkgZXh0cmEgb3BlbnMgb2YgdGhlIHBvcnQgd2hpbGUKIAkgKiB3ZSdyZSBhdXRvLWNvbmZpZ3VyaW5nLgogCSAqLwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnN0YXRlLT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJcmV0ID0gLUVCVVNZOwotCWlmICh1YXJ0X3VzZXJzKHN0YXRlKSA9PSAxKSB7CisJaWYgKHR0eV9wb3J0X3VzZXJzKHBvcnQpID09IDEpIHsKIAkJdWFydF9zaHV0ZG93bihzdGF0ZSk7CiAKIAkJLyoKIAkJICogSWYgd2UgYWxyZWFkeSBoYXZlIGEgcG9ydCB0eXBlIGNvbmZpZ3VyZWQsCiAJCSAqIHdlIG11c3QgcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgogCQkgKi8KLQkJaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOKQotCQkJcG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQocG9ydCk7CisJCWlmICh1cG9ydC0+dHlwZSAhPSBQT1JUX1VOS05PV04pCisJCQl1cG9ydC0+b3BzLT5yZWxlYXNlX3BvcnQodXBvcnQpOwogCiAJCWZsYWdzID0gVUFSVF9DT05GSUdfVFlQRTsKLQkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0FVVE9fSVJRKQorCQlpZiAodXBvcnQtPmZsYWdzICYgVVBGX0FVVE9fSVJRKQogCQkJZmxhZ3MgfD0gVUFSVF9DT05GSUdfSVJROwogCiAJCS8qCiAJCSAqIFRoaXMgd2lsbCBjbGFpbSB0aGUgcG9ydHMgcmVzb3VyY2VzIGlmCiAJCSAqIGEgcG9ydCBpcyBmb3VuZC4KIAkJICovCi0JCXBvcnQtPm9wcy0+Y29uZmlnX3BvcnQocG9ydCwgZmxhZ3MpOworCQl1cG9ydC0+b3BzLT5jb25maWdfcG9ydCh1cG9ydCwgZmxhZ3MpOwogCiAJCXJldCA9IHVhcnRfc3RhcnR1cChzdGF0ZSwgMSk7CiAJfQotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05OTksMTEgKzEwMDMsMTUgQEAKICAqIC0gbWFzayBwYXNzZWQgaW4gYXJnIGZvciBsaW5lcyBvZiBpbnRlcmVzdAogICogICAodXNlIHwnZWQgVElPQ01fUk5HL0RTUi9DRC9DVFMgZm9yIG1hc2tpbmcpCiAgKiBDYWxsZXIgc2hvdWxkIHVzZSBUSU9DR0lDT1VOVCB0byBzZWUgd2hpY2ggb25lIGl0IHdhcworICoKKyAqIEZJWE1FOiBUaGlzIHdhbnRzIGV4dHJhY3RpbmcgaW50byBhIGNvbW1vbiBhbGwgZHJpdmVyIGltcGxlbWVudGF0aW9uCisgKiBvZiBUSU9DTVdBSVQgdXNpbmcgdHR5X3BvcnQuCiAgKi8KIHN0YXRpYyBpbnQKIHVhcnRfd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzdHJ1Y3QgdWFydF9pY291bnQgY3ByZXYsIGNub3c7CiAJaW50IHJldDsKQEAgLTEwMTEsMjAgKzEwMTksMjAgQEAKIAkvKgogCSAqIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5CiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JbWVtY3B5KCZjcHJldiwgJnBvcnQtPmljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpOworCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwltZW1jcHkoJmNwcmV2LCAmdXBvcnQtPmljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpOwogCiAJLyoKIAkgKiBGb3JjZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cyBvbgogCSAqLwotCXBvcnQtPm9wcy0+ZW5hYmxlX21zKHBvcnQpOwotCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJdXBvcnQtPm9wcy0+ZW5hYmxlX21zKHVwb3J0KTsKKwlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAotCWFkZF93YWl0X3F1ZXVlKCZzdGF0ZS0+aW5mby5kZWx0YV9tc3Jfd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5kZWx0YV9tc3Jfd2FpdCwgJndhaXQpOwogCWZvciAoOzspIHsKLQkJc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JCW1lbWNweSgmY25vdywgJnBvcnQtPmljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpOwotCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCW1lbWNweSgmY25vdywgJnVwb3J0LT5pY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIApAQCAtMTA0OCw3ICsxMDU2LDcgQEAKIAl9CiAKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc3RhdGUtPmluZm8uZGVsdGFfbXNyX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+ZGVsdGFfbXNyX3dhaXQsICZ3YWl0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDY0LDExICsxMDcyLDExIEBACiB7CiAJc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3QgaWNvdW50OwogCXN0cnVjdCB1YXJ0X2ljb3VudCBjbm93OwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAKLQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQltZW1jcHkoJmNub3csICZwb3J0LT5pY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTsKLQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwltZW1jcHkoJmNub3csICZ1cG9ydC0+aWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CiAKIAlpY291bnQuY3RzICAgICAgICAgPSBjbm93LmN0czsKIAlpY291bnQuZHNyICAgICAgICAgPSBjbm93LmRzcjsKQEAgLTEwOTMsNiArMTEwMSw3IEBACiAJICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAJdm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IHJldCA9IC1FTk9JT0NUTENNRDsKIApAQCAtMTE0Myw3ICsxMTUyLDcgQEAKIAlpZiAocmV0ICE9IC1FTk9JT0NUTENNRCkKIAkJZ290byBvdXQ7CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7CiAJCXJldCA9IC1FSU87CkBAIC0xMTYwLDE0ICsxMTY5LDE0IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDogewotCQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7Ci0JCWlmIChwb3J0LT5vcHMtPmlvY3RsKQotCQkJcmV0ID0gcG9ydC0+b3BzLT5pb2N0bChwb3J0LCBjbWQsIGFyZyk7CisJCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKwkJaWYgKHVwb3J0LT5vcHMtPmlvY3RsKQorCQkJcmV0ID0gdXBvcnQtPm9wcy0+aW9jdGwodXBvcnQsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJfQogCX0KIG91dF91cDoKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNzUsMTAgKzExODQsMTAgQEAKIHN0YXRpYyB2b2lkIHVhcnRfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCi0JaWYgKHBvcnQtPm9wcy0+c2V0X2xkaXNjKQotCQlwb3J0LT5vcHMtPnNldF9sZGlzYyhwb3J0KTsKKwlpZiAodXBvcnQtPm9wcy0+c2V0X2xkaXNjKQorCQl1cG9ydC0+b3BzLT5zZXRfbGRpc2ModXBvcnQpOwogfQogCiBzdGF0aWMgdm9pZCB1YXJ0X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC0xMjA3LDcgKzEyMTYsNyBAQAogCiAJLyogSGFuZGxlIHRyYW5zaXRpb24gdG8gQjAgc3RhdHVzICovCiAJaWYgKChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSAmJiAhKGNmbGFnICYgQ0JBVUQpKQotCQl1YXJ0X2NsZWFyX21jdHJsKHN0YXRlLT5wb3J0LCBUSU9DTV9SVFMgfCBUSU9DTV9EVFIpOworCQl1YXJ0X2NsZWFyX21jdHJsKHN0YXRlLT51YXJ0X3BvcnQsIFRJT0NNX1JUUyB8IFRJT0NNX0RUUik7CiAKIAkvKiBIYW5kbGUgdHJhbnNpdGlvbiBhd2F5IGZyb20gQjAgc3RhdHVzICovCiAJaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgJiYgKGNmbGFnICYgQ0JBVUQpKSB7CkBAIC0xMjE1LDI1ICsxMjI0LDI1IEBACiAJCWlmICghKGNmbGFnICYgQ1JUU0NUUykgfHwKIAkJICAgICF0ZXN0X2JpdChUVFlfVEhST1RUTEVELCAmdHR5LT5mbGFncykpCiAJCQltYXNrIHw9IFRJT0NNX1JUUzsKLQkJdWFydF9zZXRfbWN0cmwoc3RhdGUtPnBvcnQsIG1hc2spOworCQl1YXJ0X3NldF9tY3RybChzdGF0ZS0+dWFydF9wb3J0LCBtYXNrKTsKIAl9CiAKIAkvKiBIYW5kbGUgdHVybmluZyBvZmYgQ1JUU0NUUyAqLwogCWlmICgob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSAmJiAhKGNmbGFnICYgQ1JUU0NUUykpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CiAJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCV9fdWFydF9zdGFydCh0dHkpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+cG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CiAJfQogCiAJLyogSGFuZGxlIHR1cm5pbmcgb24gQ1JUU0NUUyAqLwogCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYgKGNmbGFnICYgQ1JUU0NUUykpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7Ci0JCWlmICghKHN0YXRlLT5wb3J0LT5vcHMtPmdldF9tY3RybChzdGF0ZS0+cG9ydCkgJiBUSU9DTV9DVFMpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CisJCWlmICghKHN0YXRlLT51YXJ0X3BvcnQtPm9wcy0+Z2V0X21jdHJsKHN0YXRlLT51YXJ0X3BvcnQpICYgVElPQ01fQ1RTKSkgewogCQkJdHR5LT5od19zdG9wcGVkID0gMTsKLQkJCXN0YXRlLT5wb3J0LT5vcHMtPnN0b3BfdHgoc3RhdGUtPnBvcnQpOworCQkJc3RhdGUtPnVhcnRfcG9ydC0+b3BzLT5zdG9wX3R4KHN0YXRlLT51YXJ0X3BvcnQpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT51YXJ0X3BvcnQtPmxvY2ssIGZsYWdzKTsKIAl9CiAjaWYgMAogCS8qCkBAIC0xMjQ0LDcgKzEyNTMsNyBAQAogCSAqLwogCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAmJgogCSAgICAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3RhdGUtPnVhcnRfcG9ydC5vcGVuX3dhaXQpOwogI2VuZGlmCiB9CiAKQEAgLTEyNTYsNDAgKzEyNjUsMzkgQEAKIHN0YXRpYyB2b2lkIHVhcnRfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydDsKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQotCQlyZXR1cm47CisJdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OworCXBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAKLQlwb3J0ID0gc3RhdGUtPnBvcnQ7CisJcHJfZGVidWcoInVhcnRfY2xvc2UoJWQpIGNhbGxlZFxuIiwgdXBvcnQtPmxpbmUpOwogCi0JcHJfZGVidWcoInVhcnRfY2xvc2UoJWQpIGNhbGxlZFxuIiwgcG9ydC0+bGluZSk7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKHN0YXRlLT5jb3VudCAhPSAxKSkgeworCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAocG9ydC0+Y291bnQgIT0gMSkpIHsKIAkJLyoKIAkJICogVWgsIG9oLiAgdHR5LT5jb3VudCBpcyAxLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0dHkKLQkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBzdGF0ZS0+Y291bnQgc2hvdWxkIGFsd2F5cworCQkgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIHBvcnQtPmNvdW50IHNob3VsZCBhbHdheXMKIAkJICogYmUgb25lIGluIHRoZXNlIGNvbmRpdGlvbnMuICBJZiBpdCdzIGdyZWF0ZXIgdGhhbgogCQkgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2JsZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKIAkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCiAJCSAqLwogCQlwcmludGsoS0VSTl9FUlIgInVhcnRfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgdHR5LT5jb3VudCBpcyAxLCAiCi0JCSAgICAgICAic3RhdGUtPmNvdW50IGlzICVkXG4iLCBzdGF0ZS0+Y291bnQpOwotCQlzdGF0ZS0+Y291bnQgPSAxOworCQkgICAgICAgInBvcnQtPmNvdW50IGlzICVkXG4iLCBwb3J0LT5jb3VudCk7CisJCXBvcnQtPmNvdW50ID0gMTsKIAl9Ci0JaWYgKC0tc3RhdGUtPmNvdW50IDwgMCkgeworCWlmICgtLXBvcnQtPmNvdW50IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInVhcnRfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudCBmb3IgJXM6ICVkXG4iLAotCQkgICAgICAgdHR5LT5uYW1lLCBzdGF0ZS0+Y291bnQpOwotCQlzdGF0ZS0+Y291bnQgPSAwOworCQkgICAgICAgdHR5LT5uYW1lLCBwb3J0LT5jb3VudCk7CisJCXBvcnQtPmNvdW50ID0gMDsKIAl9Ci0JaWYgKHN0YXRlLT5jb3VudCkKKwlpZiAocG9ydC0+Y291bnQpCiAJCWdvdG8gZG9uZTsKIAogCS8qCkBAIC0xMjk5LDI0ICsxMzA3LDI0IEBACiAJICovCiAJdHR5LT5jbG9zaW5nID0gMTsKIAotCWlmIChzdGF0ZS0+Y2xvc2luZ193YWl0ICE9IFVTRl9DTE9TSU5HX1dBSVRfTk9ORSkKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIG1zZWNzX3RvX2ppZmZpZXMoc3RhdGUtPmNsb3Npbmdfd2FpdCkpOworCWlmIChwb3J0LT5jbG9zaW5nX3dhaXQgIT0gQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUpCisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBtc2Vjc190b19qaWZmaWVzKHBvcnQtPmNsb3Npbmdfd2FpdCkpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50LCB3ZSBzdG9wIGFjY2VwdGluZyBpbnB1dC4gIFRvIGRvIHRoaXMsIHdlCiAJICogZGlzYWJsZSB0aGUgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHRzLgogCSAqLwotCWlmIChzdGF0ZS0+aW5mby5mbGFncyAmIFVJRl9JTklUSUFMSVpFRCkgeworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JCXBvcnQtPm9wcy0+c3RvcF9yeChwb3J0KTsKKwkJdXBvcnQtPm9wcy0+c3RvcF9yeCh1cG9ydCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKIAkJICogaGFzIGNvbXBsZXRlbHkgZHJhaW5lZDsgdGhpcyBpcyBlc3BlY2lhbGx5CiAJCSAqIGltcG9ydGFudCBpZiB0aGVyZSBpcyBhIHRyYW5zbWl0IEZJRk8hCiAJCSAqLwotCQl1YXJ0X3dhaXRfdW50aWxfc2VudCh0dHksIHBvcnQtPnRpbWVvdXQpOworCQl1YXJ0X3dhaXRfdW50aWxfc2VudCh0dHksIHVwb3J0LT50aW1lb3V0KTsKIAl9CiAKIAl1YXJ0X3NodXRkb3duKHN0YXRlKTsKQEAgLTEzMjUsMjkgKzEzMzMsMjkgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0Jc3RhdGUtPmluZm8ucG9ydC50dHkgPSBOVUxMOworCXR0eV9wb3J0X3R0eV9zZXQocG9ydCwgTlVMTCk7CiAKLQlpZiAoc3RhdGUtPmluZm8ucG9ydC5ibG9ja2VkX29wZW4pIHsKLQkJaWYgKHN0YXRlLT5jbG9zZV9kZWxheSkKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHN0YXRlLT5jbG9zZV9kZWxheSk7Ci0JfSBlbHNlIGlmICghdWFydF9jb25zb2xlKHBvcnQpKSB7CisJaWYgKHBvcnQtPmJsb2NrZWRfb3BlbikgeworCQlpZiAocG9ydC0+Y2xvc2VfZGVsYXkpCisJCQltc2xlZXBfaW50ZXJydXB0aWJsZShwb3J0LT5jbG9zZV9kZWxheSk7CisJfSBlbHNlIGlmICghdWFydF9jb25zb2xlKHVwb3J0KSkgewogCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMyk7CiAJfQogCiAJLyoKIAkgKiBXYWtlIHVwIGFueW9uZSB0cnlpbmcgdG8gb3BlbiB0aGlzIHBvcnQuCiAJICovCi0Jc3RhdGUtPmluZm8uZmxhZ3MgJj0gflVJRl9OT1JNQUxfQUNUSVZFOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3RhdGUtPmluZm8ucG9ydC5vcGVuX3dhaXQpOworCWNsZWFyX2JpdChBU1lOQ0JfTk9STUFMX0FDVElWRSwgJnBvcnQtPmZsYWdzKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CiAKLSBkb25lOgotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVhcnRfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXVuc2lnbmVkIGxvbmcgY2hhcl90aW1lLCBleHBpcmU7CiAKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04gfHwgcG9ydC0+Zmlmb3NpemUgPT0gMCkKQEAgLTE0MTIsMjIgKzE0MjAsMjIgQEAKIHN0YXRpYyB2b2lkIHVhcnRfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKLQlwcl9kZWJ1ZygidWFydF9oYW5ndXAoJWQpXG4iLCBzdGF0ZS0+cG9ydC0+bGluZSk7CisJcHJfZGVidWcoInVhcnRfaGFuZ3VwKCVkKVxuIiwgc3RhdGUtPnVhcnRfcG9ydC0+bGluZSk7CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWlmIChpbmZvLT5mbGFncyAmIFVJRl9OT1JNQUxfQUNUSVZFKSB7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX05PUk1BTF9BQ1RJVkUpIHsKIAkJdWFydF9mbHVzaF9idWZmZXIodHR5KTsKIAkJdWFydF9zaHV0ZG93bihzdGF0ZSk7Ci0JCXN0YXRlLT5jb3VudCA9IDA7Ci0JCWluZm8tPmZsYWdzICY9IH5VSUZfTk9STUFMX0FDVElWRTsKLQkJaW5mby0+cG9ydC50dHkgPSBOVUxMOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnBvcnQub3Blbl93YWl0KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXBvcnQtPmNvdW50ID0gMDsKKwkJY2xlYXJfYml0KEFTWU5DQl9OT1JNQUxfQUNUSVZFLCAmcG9ydC0+ZmxhZ3MpOworCQl0dHlfcG9ydF90dHlfc2V0KHBvcnQsIE5VTEwpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOwogCX0KLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiB9CiAKIC8qCkBAIC0xNDM4LDggKzE0NDYsOCBAQAogICovCiBzdGF0aWMgdm9pZCB1YXJ0X3VwZGF0ZV90ZXJtaW9zKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3RhdGUtPmluZm8ucG9ydC50dHk7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+cG9ydC50dHk7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAKIAlpZiAodWFydF9jb25zb2xlKHBvcnQpICYmIHBvcnQtPmNvbnMtPmNmbGFnKSB7CiAJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IHBvcnQtPmNvbnMtPmNmbGFnOwpAQCAtMTQ3MywyNyArMTQ4MSwyNyBAQAogdWFydF9ibG9ja190aWxfcmVhZHkoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gJnN0YXRlLT5pbmZvOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXVuc2lnbmVkIGludCBtY3RybDsKIAotCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuKys7Ci0Jc3RhdGUtPmNvdW50LS07CisJcG9ydC0+YmxvY2tlZF9vcGVuKys7CisJcG9ydC0+Y291bnQtLTsKIAotCWFkZF93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKIAl3aGlsZSAoMSkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCS8qCiAJCSAqIElmIHdlIGhhdmUgYmVlbiBodW5nIHVwLCB0ZWxsIHVzZXJzcGFjZS9yZXN0YXJ0IG9wZW4uCiAJCSAqLwotCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBpbmZvLT5wb3J0LnR0eSA9PSBOVUxMKQorCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCBwb3J0LT50dHkgPT0gTlVMTCkKIAkJCWJyZWFrOwogCiAJCS8qCiAJCSAqIElmIHRoZSBwb3J0IGhhcyBiZWVuIGNsb3NlZCwgdGVsbCB1c2Vyc3BhY2UvcmVzdGFydCBvcGVuLgogCQkgKi8KLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBVSUZfSU5JVElBTElaRUQpKQorCQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC0xNTA2LDggKzE1MTQsOCBAQAogCQkgKiBoYXZlIHNldCBUVFlfSU9fRVJST1IgZm9yIGEgbm9uLWV4aXN0YW50IHBvcnQuCiAJCSAqLwogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAotCQkgICAgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSB8fAotCQkgICAgKGluZm8tPnBvcnQudHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpKQorCQkgICAgKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgfHwKKwkJICAgIChwb3J0LT50dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTUxNSwzNyArMTUyMywzNyBAQAogCQkgKiBub3Qgc2V0IFJUUyBoZXJlIC0gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgY2F0Y2gKIAkJICogdGhlIGRhdGEgZnJvbSB0aGUgbW9kZW0uCiAJCSAqLwotCQlpZiAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKLQkJCXVhcnRfc2V0X21jdHJsKHBvcnQsIFRJT0NNX0RUUik7CisJCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJCXVhcnRfc2V0X21jdHJsKHVwb3J0LCBUSU9DTV9EVFIpOwogCiAJCS8qCiAJCSAqIGFuZCB3YWl0IGZvciB0aGUgY2FycmllciB0byBpbmRpY2F0ZSB0aGF0IHRoZQogCQkgKiBtb2RlbSBpcyByZWFkeSBmb3IgdXMuCiAJCSAqLwotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJcG9ydC0+b3BzLT5lbmFibGVfbXMocG9ydCk7Ci0JCW1jdHJsID0gcG9ydC0+b3BzLT5nZXRfbWN0cmwocG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwkJdXBvcnQtPm9wcy0+ZW5hYmxlX21zKHVwb3J0KTsKKwkJbWN0cmwgPSB1cG9ydC0+b3BzLT5nZXRfbWN0cmwodXBvcnQpOworCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAkJaWYgKG1jdHJsICYgVElPQ01fQ0FSKQogCQkJYnJlYWs7CiAKLQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT5vcGVuX3dhaXQsICZ3YWl0KTsKIAotCXN0YXRlLT5jb3VudCsrOwotCWluZm8tPnBvcnQuYmxvY2tlZF9vcGVuLS07CisJcG9ydC0+Y291bnQrKzsKKwlwb3J0LT5ibG9ja2VkX29wZW4tLTsKIAogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmICghaW5mby0+cG9ydC50dHkgfHwgdHR5X2h1bmdfdXBfcChmaWxwKSkKKwlpZiAoIXBvcnQtPnR0eSB8fCB0dHlfaHVuZ191cF9wKGZpbHApKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldHVybiAwOwpAQCAtMTU1NCwyNCArMTU2MiwyNiBAQAogc3RhdGljIHN0cnVjdCB1YXJ0X3N0YXRlICp1YXJ0X2dldChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgaW50IGxpbmUpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0ID0gMDsKIAogCXN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc3RhdGUtPm11dGV4KSkgeworCXBvcnQgPSAmc3RhdGUtPnBvcnQ7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKSB7CiAJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBlcnI7CiAJfQogCi0Jc3RhdGUtPmNvdW50Kys7Ci0JaWYgKCFzdGF0ZS0+cG9ydCB8fCBzdGF0ZS0+cG9ydC0+ZmxhZ3MgJiBVUEZfREVBRCkgeworCXBvcnQtPmNvdW50Kys7CisJaWYgKCFzdGF0ZS0+dWFydF9wb3J0IHx8IHN0YXRlLT51YXJ0X3BvcnQtPmZsYWdzICYgVVBGX0RFQUQpIHsKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl91bmxvY2s7CiAJfQogCXJldHVybiBzdGF0ZTsKIAogIGVycl91bmxvY2s6Ci0Jc3RhdGUtPmNvdW50LS07Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCXBvcnQtPmNvdW50LS07CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAgZXJyOgogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CkBAIC0xNTkwLDYgKzE2MDAsNyBAQAogewogCXN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2ID0gKHN0cnVjdCB1YXJ0X2RyaXZlciAqKXR0eS0+ZHJpdmVyLT5kcml2ZXJfc3RhdGU7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0dmFsLCBsaW5lID0gdHR5LT5pbmRleDsKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKQEAgLTE2MDYsMTYgKzE2MTcsMTggQEAKIAogCS8qCiAJICogV2UgdGFrZSB0aGUgc2VtYXBob3JlIGluc2lkZSB1YXJ0X2dldCB0byBndWFyYW50ZWUgdGhhdCB3ZSB3b24ndAotCSAqIGJlIHJlLWVudGVyZWQgd2hpbGUgYWxsb2NhdGluZyB0aGUgaW5mbyBzdHJ1Y3R1cmUsIG9yIHdoaWxlIHdlCisJICogYmUgcmUtZW50ZXJlZCB3aGlsZSBhbGxvY2F0aW5nIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUsIG9yIHdoaWxlIHdlCiAJICogcmVxdWVzdCBhbnkgSVJRcyB0aGF0IHRoZSBkcml2ZXIgbWF5IG5lZWQuICBUaGlzIGFsc28gaGFzIHRoZSBuaWNlCiAJICogc2lkZS1lZmZlY3QgdGhhdCBpdCBkZWxheXMgdGhlIGFjdGlvbiBvZiB1YXJ0X2hhbmd1cCwgc28gd2UgY2FuCi0JICogZ3VhcmFudGVlIHRoYXQgaW5mby0+cG9ydC50dHkgd2lsbCBhbHdheXMgY29udGFpbiBzb21ldGhpbmcgcmVhc29uYWJsZS4KKwkgKiBndWFyYW50ZWUgdGhhdCBzdGF0ZS0+cG9ydC50dHkgd2lsbCBhbHdheXMgY29udGFpbiBzb21ldGhpbmcKKwkgKiByZWFzb25hYmxlLgogCSAqLwogCXN0YXRlID0gdWFydF9nZXQoZHJ2LCBsaW5lKTsKIAlpZiAoSVNfRVJSKHN0YXRlKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHN0YXRlKTsKIAkJZ290byBmYWlsOwogCX0KKwlwb3J0ID0gJnN0YXRlLT5wb3J0OwogCiAJLyoKIAkgKiBPbmNlIHdlIHNldCB0dHktPmRyaXZlcl9kYXRhIGhlcmUsIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQKQEAgLTE2MjMsMjUgKzE2MzYsMjUgQEAKIAkgKiBBbnkgZmFpbHVyZXMgZnJvbSBoZXJlIG9ud2FyZHMgc2hvdWxkIG5vdCB0b3VjaCB0aGUgY291bnQuCiAJICovCiAJdHR5LT5kcml2ZXJfZGF0YSA9IHN0YXRlOwotCXN0YXRlLT5wb3J0LT5pbmZvID0gJnN0YXRlLT5pbmZvOwotCXR0eS0+bG93X2xhdGVuY3kgPSAoc3RhdGUtPnBvcnQtPmZsYWdzICYgVVBGX0xPV19MQVRFTkNZKSA/IDEgOiAwOworCXN0YXRlLT51YXJ0X3BvcnQtPnN0YXRlID0gc3RhdGU7CisJdHR5LT5sb3dfbGF0ZW5jeSA9IChzdGF0ZS0+dWFydF9wb3J0LT5mbGFncyAmIFVQRl9MT1dfTEFURU5DWSkgPyAxIDogMDsKIAl0dHktPmFsdF9zcGVlZCA9IDA7Ci0Jc3RhdGUtPmluZm8ucG9ydC50dHkgPSB0dHk7CisJdHR5X3BvcnRfdHR5X3NldChwb3J0LCB0dHkpOwogCiAJLyoKIAkgKiBJZiB0aGUgcG9ydCBpcyBpbiB0aGUgbWlkZGxlIG9mIGNsb3NpbmcsIGJhaWwgb3V0IG5vdy4KIAkgKi8KIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgewogCQlyZXR2YWwgPSAtRUFHQUlOOwotCQlzdGF0ZS0+Y291bnQtLTsKLQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCQlwb3J0LT5jb3VudC0tOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAkJZ290byBmYWlsOwogCX0KIAogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBkZXZpY2UgaXMgaW4gRDAgc3RhdGUuCiAJICovCi0JaWYgKHN0YXRlLT5jb3VudCA9PSAxKQorCWlmIChwb3J0LT5jb3VudCA9PSAxKQogCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMCk7CiAKIAkvKgpAQCAtMTY1NCwxOCArMTY2NywxOCBAQAogCSAqLwogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dmFsID0gdWFydF9ibG9ja190aWxfcmVhZHkoZmlscCwgc3RhdGUpOwotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgZmlyc3Qgb3BlbiB0byBzdWNjZWVkLCBhZGp1c3QgdGhpbmdzIHRvIHN1aXQuCiAJICovCi0JaWYgKHJldHZhbCA9PSAwICYmICEoc3RhdGUtPmluZm8uZmxhZ3MgJiBVSUZfTk9STUFMX0FDVElWRSkpIHsKLQkJc3RhdGUtPmluZm8uZmxhZ3MgfD0gVUlGX05PUk1BTF9BQ1RJVkU7CisJaWYgKHJldHZhbCA9PSAwICYmICEocG9ydC0+ZmxhZ3MgJiBBU1lOQ19OT1JNQUxfQUNUSVZFKSkgeworCQlzZXRfYml0KEFTWU5DQl9OT1JNQUxfQUNUSVZFLCAmcG9ydC0+ZmxhZ3MpOwogCiAJCXVhcnRfdXBkYXRlX3Rlcm1pb3Moc3RhdGUpOwogCX0KIAotIGZhaWw6CitmYWlsOgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE2ODcsNTcgKzE3MDAsNTggQEAKIHN0YXRpYyB2b2lkIHVhcnRfbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIGludCBpKQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IGRydi0+c3RhdGUgKyBpOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlpbnQgcG1fc3RhdGU7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAljaGFyIHN0YXRfYnVmWzMyXTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCBtbWlvOwogCi0JaWYgKCFwb3J0KQorCWlmICghdXBvcnQpCiAJCXJldHVybjsKIAotCW1taW8gPSBwb3J0LT5pb3R5cGUgPj0gVVBJT19NRU07CisJbW1pbyA9IHVwb3J0LT5pb3R5cGUgPj0gVVBJT19NRU07CiAJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgJXMlMDhsbFggaXJxOiVkIiwKLQkJCXBvcnQtPmxpbmUsIHVhcnRfdHlwZShwb3J0KSwKKwkJCXVwb3J0LT5saW5lLCB1YXJ0X3R5cGUodXBvcnQpLAogCQkJbW1pbyA/ICJtbWlvOjB4IiA6ICJwb3J0OiIsCi0JCQltbWlvID8gKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0LT5tYXBiYXNlCi0JCQkgICAgIDogKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+aW9iYXNlLAotCQkJcG9ydC0+aXJxKTsKKwkJCW1taW8gPyAodW5zaWduZWQgbG9uZyBsb25nKXVwb3J0LT5tYXBiYXNlCisJCQkgICAgIDogKHVuc2lnbmVkIGxvbmcgbG9uZyl1cG9ydC0+aW9iYXNlLAorCQkJdXBvcnQtPmlycSk7CiAKLQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04pIHsKKwlpZiAodXBvcnQtPnR5cGUgPT0gUE9SVF9VTktOT1dOKSB7CiAJCXNlcV9wdXRjKG0sICdcbicpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCQlwbV9zdGF0ZSA9IHN0YXRlLT5wbV9zdGF0ZTsKIAkJaWYgKHBtX3N0YXRlKQogCQkJdWFydF9jaGFuZ2VfcG0oc3RhdGUsIDApOwotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJc3RhdHVzID0gcG9ydC0+b3BzLT5nZXRfbWN0cmwocG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwkJc3RhdHVzID0gdXBvcnQtPm9wcy0+Z2V0X21jdHJsKHVwb3J0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CiAJCWlmIChwbV9zdGF0ZSkKIAkJCXVhcnRfY2hhbmdlX3BtKHN0YXRlLCBwbV9zdGF0ZSk7Ci0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAKIAkJc2VxX3ByaW50ZihtLCAiIHR4OiVkIHJ4OiVkIiwKLQkJCQlwb3J0LT5pY291bnQudHgsIHBvcnQtPmljb3VudC5yeCk7Ci0JCWlmIChwb3J0LT5pY291bnQuZnJhbWUpCisJCQkJdXBvcnQtPmljb3VudC50eCwgdXBvcnQtPmljb3VudC5yeCk7CisJCWlmICh1cG9ydC0+aWNvdW50LmZyYW1lKQogCQkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwKLQkJCQlwb3J0LT5pY291bnQuZnJhbWUpOwotCQlpZiAocG9ydC0+aWNvdW50LnBhcml0eSkKKwkJCQl1cG9ydC0+aWNvdW50LmZyYW1lKTsKKwkJaWYgKHVwb3J0LT5pY291bnQucGFyaXR5KQogCQkJc2VxX3ByaW50ZihtLCAiIHBlOiVkIiwKLQkJCQlwb3J0LT5pY291bnQucGFyaXR5KTsKLQkJaWYgKHBvcnQtPmljb3VudC5icmspCisJCQkJdXBvcnQtPmljb3VudC5wYXJpdHkpOworCQlpZiAodXBvcnQtPmljb3VudC5icmspCiAJCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwKLQkJCQlwb3J0LT5pY291bnQuYnJrKTsKLQkJaWYgKHBvcnQtPmljb3VudC5vdmVycnVuKQorCQkJCXVwb3J0LT5pY291bnQuYnJrKTsKKwkJaWYgKHVwb3J0LT5pY291bnQub3ZlcnJ1bikKIAkJCXNlcV9wcmludGYobSwgIiBvZTolZCIsCi0JCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4pOworCQkJCXVwb3J0LT5pY291bnQub3ZlcnJ1bik7CiAKICNkZWZpbmUgSU5GT0JJVChiaXQsIHN0cikgXAotCWlmIChwb3J0LT5tY3RybCAmIChiaXQpKSBcCisJaWYgKHVwb3J0LT5tY3RybCAmIChiaXQpKSBcCiAJCXN0cm5jYXQoc3RhdF9idWYsIChzdHIpLCBzaXplb2Yoc3RhdF9idWYpIC0gXAogCQkJc3RybGVuKHN0YXRfYnVmKSAtIDIpCiAjZGVmaW5lIFNUQVRCSVQoYml0LCBzdHIpIFwKQEAgLTE5NTgsNyArMTk3Miw3IEBACiAKIHN0YXRpYyB2b2lkIHVhcnRfY2hhbmdlX3BtKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgaW50IHBtX3N0YXRlKQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAogCWlmIChzdGF0ZS0+cG1fc3RhdGUgIT0gcG1fc3RhdGUpIHsKIAkJaWYgKHBvcnQtPm9wcy0+cG0pCkBAIC0xOTgyLDEzMiArMTk5NiwxMzggQEAKIAlyZXR1cm4gZGV2LT5kZXZ0ID09IGRldnQ7IC8qIEFjdHVhbGx5LCBvbmx5IG9uZSB0dHkgcGVyIHBvcnQgKi8KIH0KIAotaW50IHVhcnRfc3VzcGVuZF9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoraW50IHVhcnRfc3VzcGVuZF9wb3J0KHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgcG9ydC0+bGluZTsKKwlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgdXBvcnQtPmxpbmU7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXN0cnVjdCBkZXZpY2UgKnR0eV9kZXY7Ci0Jc3RydWN0IHVhcnRfbWF0Y2ggbWF0Y2ggPSB7cG9ydCwgZHJ2fTsKKwlzdHJ1Y3QgdWFydF9tYXRjaCBtYXRjaCA9IHt1cG9ydCwgZHJ2fTsKIAotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCi0JaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCAmJiB1YXJ0X2NvbnNvbGUocG9ydCkpIHsKKwlpZiAoIWNvbnNvbGVfc3VzcGVuZF9lbmFibGVkICYmIHVhcnRfY29uc29sZSh1cG9ydCkpIHsKIAkJLyogd2UncmUgZ29pbmcgdG8gYXZvaWQgc3VzcGVuZGluZyBzZXJpYWwgY29uc29sZSAqLwotCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQocG9ydC0+ZGV2LCAmbWF0Y2gsIHNlcmlhbF9tYXRjaF9wb3J0KTsKKwl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQodXBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKHR0eV9kZXYpKSB7Ci0JCWVuYWJsZV9pcnFfd2FrZShwb3J0LT5pcnEpOworCQllbmFibGVfaXJxX3dha2UodXBvcnQtPmlycSk7CiAJCXB1dF9kZXZpY2UodHR5X2Rldik7Ci0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJCXJldHVybiAwOwogCX0KLQlwb3J0LT5zdXNwZW5kZWQgPSAxOworCXVwb3J0LT5zdXNwZW5kZWQgPSAxOwogCi0JaWYgKHN0YXRlLT5pbmZvLmZsYWdzICYgVUlGX0lOSVRJQUxJWkVEKSB7Ci0JCWNvbnN0IHN0cnVjdCB1YXJ0X29wcyAqb3BzID0gcG9ydC0+b3BzOworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCWNvbnN0IHN0cnVjdCB1YXJ0X29wcyAqb3BzID0gdXBvcnQtPm9wczsKIAkJaW50IHRyaWVzOwogCi0JCXN0YXRlLT5pbmZvLmZsYWdzID0gKHN0YXRlLT5pbmZvLmZsYWdzICYgflVJRl9JTklUSUFMSVpFRCkKLQkJCQkgICAgIHwgVUlGX1NVU1BFTkRFRDsKKwkJc2V0X2JpdChBU1lOQ0JfU1VTUEVOREVELCAmcG9ydC0+ZmxhZ3MpOworCQljbGVhcl9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+ZmxhZ3MpOwogCi0JCXNwaW5fbG9ja19pcnEoJnBvcnQtPmxvY2spOwotCQlvcHMtPnN0b3BfdHgocG9ydCk7Ci0JCW9wcy0+c2V0X21jdHJsKHBvcnQsIDApOwotCQlvcHMtPnN0b3BfcngocG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKKwkJb3BzLT5zdG9wX3R4KHVwb3J0KTsKKwkJb3BzLT5zZXRfbWN0cmwodXBvcnQsIDApOworCQlvcHMtPnN0b3BfcngodXBvcnQpOworCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAogCQkvKgogCQkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXR0ZXIgdG8gZW1wdHkuCiAJCSAqLwotCQlmb3IgKHRyaWVzID0gMzsgIW9wcy0+dHhfZW1wdHkocG9ydCkgJiYgdHJpZXM7IHRyaWVzLS0pCisJCWZvciAodHJpZXMgPSAzOyAhb3BzLT50eF9lbXB0eSh1cG9ydCkgJiYgdHJpZXM7IHRyaWVzLS0pCiAJCQltc2xlZXAoMTApOwogCQlpZiAoIXRyaWVzKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlcyVzJXMlZDogVW5hYmxlIHRvIGRyYWluICIKIAkJCQkJInRyYW5zbWl0dGVyXG4iLAotCQkJICAgICAgIHBvcnQtPmRldiA/IGRldl9uYW1lKHBvcnQtPmRldikgOiAiIiwKLQkJCSAgICAgICBwb3J0LT5kZXYgPyAiOiAiIDogIiIsCisJCQkgICAgICAgdXBvcnQtPmRldiA/IGRldl9uYW1lKHVwb3J0LT5kZXYpIDogIiIsCisJCQkgICAgICAgdXBvcnQtPmRldiA/ICI6ICIgOiAiIiwKIAkJCSAgICAgICBkcnYtPmRldl9uYW1lLAotCQkJICAgICAgIGRydi0+dHR5X2RyaXZlci0+bmFtZV9iYXNlICsgcG9ydC0+bGluZSk7CisJCQkgICAgICAgZHJ2LT50dHlfZHJpdmVyLT5uYW1lX2Jhc2UgKyB1cG9ydC0+bGluZSk7CiAKLQkJb3BzLT5zaHV0ZG93bihwb3J0KTsKKwkJb3BzLT5zaHV0ZG93bih1cG9ydCk7CiAJfQogCiAJLyoKIAkgKiBEaXNhYmxlIHRoZSBjb25zb2xlIGRldmljZSBiZWZvcmUgc3VzcGVuZGluZy4KIAkgKi8KLQlpZiAodWFydF9jb25zb2xlKHBvcnQpKQotCQljb25zb2xlX3N0b3AocG9ydC0+Y29ucyk7CisJaWYgKHVhcnRfY29uc29sZSh1cG9ydCkpCisJCWNvbnNvbGVfc3RvcCh1cG9ydC0+Y29ucyk7CiAKIAl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMyk7CiAKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVhcnRfcmVzdW1lX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitpbnQgdWFydF9yZXN1bWVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIHBvcnQtPmxpbmU7CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIHVwb3J0LT5saW5lOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OwotCXN0cnVjdCB1YXJ0X21hdGNoIG1hdGNoID0ge3BvcnQsIGRydn07CisJc3RydWN0IHVhcnRfbWF0Y2ggbWF0Y2ggPSB7dXBvcnQsIGRydn07CisJc3RydWN0IGt0ZXJtaW9zIHRlcm1pb3M7CiAKLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAotCWlmICghY29uc29sZV9zdXNwZW5kX2VuYWJsZWQgJiYgdWFydF9jb25zb2xlKHBvcnQpKSB7CisJaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCAmJiB1YXJ0X2NvbnNvbGUodXBvcnQpKSB7CiAJCS8qIG5vIG5lZWQgdG8gcmVzdW1lIHNlcmlhbCBjb25zb2xlLCBpdCB3YXNuJ3Qgc3VzcGVuZGVkICovCi0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JdHR5X2RldiA9IGRldmljZV9maW5kX2NoaWxkKHBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7Ci0JaWYgKCFwb3J0LT5zdXNwZW5kZWQgJiYgZGV2aWNlX21heV93YWtldXAodHR5X2RldikpIHsKLQkJZGlzYWJsZV9pcnFfd2FrZShwb3J0LT5pcnEpOwotCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQlwb3J0LT5zdXNwZW5kZWQgPSAwOwotCi0JLyoKLQkgKiBSZS1lbmFibGUgdGhlIGNvbnNvbGUgZGV2aWNlIGFmdGVyIHN1c3BlbmRpbmcuCi0JICovCi0JaWYgKHVhcnRfY29uc29sZShwb3J0KSkgewotCQlzdHJ1Y3Qga3Rlcm1pb3MgdGVybWlvczsKLQogCQkvKgogCQkgKiBGaXJzdCB0cnkgdG8gdXNlIHRoZSBjb25zb2xlIGNmbGFnIHNldHRpbmcuCiAJCSAqLwogCQltZW1zZXQoJnRlcm1pb3MsIDAsIHNpemVvZihzdHJ1Y3Qga3Rlcm1pb3MpKTsKLQkJdGVybWlvcy5jX2NmbGFnID0gcG9ydC0+Y29ucy0+Y2ZsYWc7Ci0KKwkJdGVybWlvcy5jX2NmbGFnID0gdXBvcnQtPmNvbnMtPmNmbGFnOwogCQkvKgogCQkgKiBJZiB0aGF0J3MgdW5zZXQsIHVzZSB0aGUgdHR5IHRlcm1pb3Mgc2V0dGluZy4KIAkJICovCi0JCWlmIChzdGF0ZS0+aW5mby5wb3J0LnR0eSAmJiB0ZXJtaW9zLmNfY2ZsYWcgPT0gMCkKLQkJCXRlcm1pb3MgPSAqc3RhdGUtPmluZm8ucG9ydC50dHktPnRlcm1pb3M7Ci0KLQkJdWFydF9jaGFuZ2VfcG0oc3RhdGUsIDApOwotCQlwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHBvcnQsICZ0ZXJtaW9zLCBOVUxMKTsKLQkJY29uc29sZV9zdGFydChwb3J0LT5jb25zKTsKKwkJaWYgKHRlcm1pb3MuY19jZmxhZyA9PSAwKQorCQkJdGVybWlvcyA9ICpzdGF0ZS0+cG9ydC50dHktPnRlcm1pb3M7CisJCWVsc2UgeworCQkJdGVybWlvcy5jX2lzcGVlZCA9IHRlcm1pb3MuY19vc3BlZWQgPQorCQkJCXR0eV90ZXJtaW9zX2lucHV0X2JhdWRfcmF0ZSgmdGVybWlvcyk7CisJCQl0ZXJtaW9zLmNfaXNwZWVkID0gdGVybWlvcy5jX29zcGVlZCA9CisJCQkJdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKCZ0ZXJtaW9zKTsKKwkJfQorCQl1cG9ydC0+b3BzLT5zZXRfdGVybWlvcyh1cG9ydCwgJnRlcm1pb3MsIE5VTEwpOworCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHN0YXRlLT5pbmZvLmZsYWdzICYgVUlGX1NVU1BFTkRFRCkgewotCQljb25zdCBzdHJ1Y3QgdWFydF9vcHMgKm9wcyA9IHBvcnQtPm9wczsKKwl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQodXBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7CisJaWYgKCF1cG9ydC0+c3VzcGVuZGVkICYmIGRldmljZV9tYXlfd2FrZXVwKHR0eV9kZXYpKSB7CisJCWRpc2FibGVfaXJxX3dha2UodXBvcnQtPmlycSk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisJdXBvcnQtPnN1c3BlbmRlZCA9IDA7CisKKwkvKgorCSAqIFJlLWVuYWJsZSB0aGUgY29uc29sZSBkZXZpY2UgYWZ0ZXIgc3VzcGVuZGluZy4KKwkgKi8KKwlpZiAodWFydF9jb25zb2xlKHVwb3J0KSkgeworCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMCk7CisJCXVwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHVwb3J0LCAmdGVybWlvcywgTlVMTCk7CisJCWNvbnNvbGVfc3RhcnQodXBvcnQtPmNvbnMpOworCX0KKworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX1NVU1BFTkRFRCkgeworCQljb25zdCBzdHJ1Y3QgdWFydF9vcHMgKm9wcyA9IHVwb3J0LT5vcHM7CiAJCWludCByZXQ7CiAKIAkJdWFydF9jaGFuZ2VfcG0oc3RhdGUsIDApOwotCQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQkJb3BzLT5zZXRfbWN0cmwocG9ydCwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JCXJldCA9IG9wcy0+c3RhcnR1cChwb3J0KTsKKwkJc3Bpbl9sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCQlvcHMtPnNldF9tY3RybCh1cG9ydCwgMCk7CisJCXNwaW5fdW5sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCQlyZXQgPSBvcHMtPnN0YXJ0dXAodXBvcnQpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCXVhcnRfY2hhbmdlX3NwZWVkKHN0YXRlLCBOVUxMKTsKLQkJCXNwaW5fbG9ja19pcnEoJnBvcnQtPmxvY2spOwotCQkJb3BzLT5zZXRfbWN0cmwocG9ydCwgcG9ydC0+bWN0cmwpOwotCQkJb3BzLT5zdGFydF90eChwb3J0KTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7Ci0JCQlzdGF0ZS0+aW5mby5mbGFncyB8PSBVSUZfSU5JVElBTElaRUQ7CisJCQlzcGluX2xvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCQlvcHMtPnNldF9tY3RybCh1cG9ydCwgdXBvcnQtPm1jdHJsKTsKKwkJCW9wcy0+c3RhcnRfdHgodXBvcnQpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CisJCQlzZXRfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPmZsYWdzKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBGYWlsZWQgdG8gcmVzdW1lIC0gbWF5YmUgaGFyZHdhcmUgd2VudCBhd2F5PwpAQCAtMjExNywxMCArMjEzNywxMCBAQAogCQkJdWFydF9zaHV0ZG93bihzdGF0ZSk7CiAJCX0KIAotCQlzdGF0ZS0+aW5mby5mbGFncyAmPSB+VUlGX1NVU1BFTkRFRDsKKwkJY2xlYXJfYml0KEFTWU5DQl9TVVNQRU5ERUQsICZwb3J0LT5mbGFncyk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjMyLDEwICsyMjUyLDEwIEBACiAJaW50IHBhcml0eSA9ICduJzsKIAlpbnQgZmxvdyA9ICduJzsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCWlmICghc3RhdGUgfHwgIXN0YXRlLT51YXJ0X3BvcnQpCiAJCXJldHVybiAtMTsKIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlpZiAoIShwb3J0LT5vcHMtPnBvbGxfZ2V0X2NoYXIgJiYgcG9ydC0+b3BzLT5wb2xsX3B1dF9jaGFyKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0yMjUzLDEwICsyMjczLDEwIEBACiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCWlmICghc3RhdGUgfHwgIXN0YXRlLT51YXJ0X3BvcnQpCiAJCXJldHVybiAtMTsKIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlyZXR1cm4gcG9ydC0+b3BzLT5wb2xsX2dldF9jaGFyKHBvcnQpOwogfQogCkBAIC0yMjY2LDEwICsyMjg2LDEwIEBACiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAotCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCWlmICghc3RhdGUgfHwgIXN0YXRlLT51YXJ0X3BvcnQpCiAJCXJldHVybjsKIAotCXBvcnQgPSBzdGF0ZS0+cG9ydDsKKwlwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlwb3J0LT5vcHMtPnBvbGxfcHV0X2NoYXIocG9ydCwgY2gpOwogfQogI2VuZGlmCkBAIC0yMzYwLDE0ICsyMzgwLDEyIEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IGRydi0+bnI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBkcnYtPnN0YXRlICsgaTsKKwkJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCi0JCXN0YXRlLT5jbG9zZV9kZWxheSAgICAgPSA1MDA7CS8qIC41IHNlY29uZHMgKi8KLQkJc3RhdGUtPmNsb3Npbmdfd2FpdCAgICA9IDMwMDAwOwkvKiAzMCBzZWNvbmRzICovCi0JCW11dGV4X2luaXQoJnN0YXRlLT5tdXRleCk7Ci0KLQkJdHR5X3BvcnRfaW5pdCgmc3RhdGUtPmluZm8ucG9ydCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0YXRlLT5pbmZvLmRlbHRhX21zcl93YWl0KTsKLQkJdGFza2xldF9pbml0KCZzdGF0ZS0+aW5mby50bGV0LCB1YXJ0X3Rhc2tsZXRfYWN0aW9uLAorCQl0dHlfcG9ydF9pbml0KHBvcnQpOworCQlwb3J0LT5jbG9zZV9kZWxheSAgICAgPSA1MDA7CS8qIC41IHNlY29uZHMgKi8KKwkJcG9ydC0+Y2xvc2luZ193YWl0ICAgID0gMzAwMDA7CS8qIDMwIHNlY29uZHMgKi8KKwkJdGFza2xldF9pbml0KCZzdGF0ZS0+dGxldCwgdWFydF90YXNrbGV0X2FjdGlvbiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpc3RhdGUpOwogCX0KIApAQCAtMjQxNSw2MiArMjQzMyw2NCBAQAogICoJbGV2ZWwgdWFydCBkcml2ZXJzIHRvIGV4cGFuZCB1YXJ0X3BvcnQsIHJhdGhlciB0aGFuIGhhdmluZyB5ZXQKICAqCW1vcmUgbGV2ZWxzIG9mIHN0cnVjdHVyZXMuCiAgKi8KLWludCB1YXJ0X2FkZF9vbmVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK2ludCB1YXJ0X2FkZF9vbmVfcG9ydChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OwogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAotCWlmIChwb3J0LT5saW5lID49IGRydi0+bnIpCisJaWYgKHVwb3J0LT5saW5lID49IGRydi0+bnIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RhdGUgPSBkcnYtPnN0YXRlICsgcG9ydC0+bGluZTsKKwlzdGF0ZSA9IGRydi0+c3RhdGUgKyB1cG9ydC0+bGluZTsKKwlwb3J0ID0gJnN0YXRlLT5wb3J0OwogCiAJbXV0ZXhfbG9jaygmcG9ydF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQlpZiAoc3RhdGUtPnBvcnQpIHsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CisJaWYgKHN0YXRlLT51YXJ0X3BvcnQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3RhdGUtPnBvcnQgPSBwb3J0OworCXN0YXRlLT51YXJ0X3BvcnQgPSB1cG9ydDsKIAlzdGF0ZS0+cG1fc3RhdGUgPSAtMTsKIAotCXBvcnQtPmNvbnMgPSBkcnYtPmNvbnM7Ci0JcG9ydC0+aW5mbyA9ICZzdGF0ZS0+aW5mbzsKKwl1cG9ydC0+Y29ucyA9IGRydi0+Y29uczsKKwl1cG9ydC0+c3RhdGUgPSBzdGF0ZTsKIAogCS8qCiAJICogSWYgdGhpcyBwb3J0IGlzIGEgY29uc29sZSwgdGhlbiB0aGUgc3BpbmxvY2sgaXMgYWxyZWFkeQogCSAqIGluaXRpYWxpc2VkLgogCSAqLwotCWlmICghKHVhcnRfY29uc29sZShwb3J0KSAmJiAocG9ydC0+Y29ucy0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkpKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKLQkJbG9ja2RlcF9zZXRfY2xhc3MoJnBvcnQtPmxvY2ssICZwb3J0X2xvY2tfa2V5KTsKKwlpZiAoISh1YXJ0X2NvbnNvbGUodXBvcnQpICYmICh1cG9ydC0+Y29ucy0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkpKSB7CisJCXNwaW5fbG9ja19pbml0KCZ1cG9ydC0+bG9jayk7CisJCWxvY2tkZXBfc2V0X2NsYXNzKCZ1cG9ydC0+bG9jaywgJnBvcnRfbG9ja19rZXkpOwogCX0KIAotCXVhcnRfY29uZmlndXJlX3BvcnQoZHJ2LCBzdGF0ZSwgcG9ydCk7CisJdWFydF9jb25maWd1cmVfcG9ydChkcnYsIHN0YXRlLCB1cG9ydCk7CiAKIAkvKgogCSAqIFJlZ2lzdGVyIHRoZSBwb3J0IHdoZXRoZXIgaXQncyBkZXRlY3RlZCBvciBub3QuICBUaGlzIGFsbG93cwogCSAqIHNldHNlcmlhbCB0byBiZSB1c2VkIHRvIGFsdGVyIHRoaXMgcG9ydHMgcGFyYW1ldGVycy4KIAkgKi8KLQl0dHlfZGV2ID0gdHR5X3JlZ2lzdGVyX2RldmljZShkcnYtPnR0eV9kcml2ZXIsIHBvcnQtPmxpbmUsIHBvcnQtPmRldik7CisJdHR5X2RldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UoZHJ2LT50dHlfZHJpdmVyLCB1cG9ydC0+bGluZSwgdXBvcnQtPmRldik7CiAJaWYgKGxpa2VseSghSVNfRVJSKHR0eV9kZXYpKSkgewogCQlkZXZpY2VfaW5pdF93YWtldXAodHR5X2RldiwgMSk7CiAJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSh0dHlfZGV2LCAwKTsKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgcmVnaXN0ZXIgdHR5IGRldmljZSBvbiBsaW5lICVkXG4iLAotCQkgICAgICAgcG9ydC0+bGluZSk7CisJCSAgICAgICB1cG9ydC0+bGluZSk7CiAKIAkvKgogCSAqIEVuc3VyZSBVUEZfREVBRCBpcyBub3Qgc2V0LgogCSAqLwotCXBvcnQtPmZsYWdzICY9IH5VUEZfREVBRDsKKwl1cG9ydC0+ZmxhZ3MgJj0gflVQRl9ERUFEOwogCiAgb3V0OgotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAltdXRleF91bmxvY2soJnBvcnRfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTI0ODUsMTYgKzI1MDUsMTYgQEAKICAqCWNvcmUgZHJpdmVyLiAgTm8gZnVydGhlciBjYWxscyB3aWxsIGJlIG1hZGUgdG8gdGhlIGxvdy1sZXZlbCBjb2RlCiAgKglmb3IgdGhpcyBwb3J0LgogICovCi1pbnQgdWFydF9yZW1vdmVfb25lX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitpbnQgdWFydF9yZW1vdmVfb25lX3BvcnQoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0KQogewotCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IGRydi0+c3RhdGUgKyBwb3J0LT5saW5lOwotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIHVwb3J0LT5saW5lOworCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAKLQlpZiAoc3RhdGUtPnBvcnQgIT0gcG9ydCkKKwlpZiAoc3RhdGUtPnVhcnRfcG9ydCAhPSB1cG9ydCkKIAkJcHJpbnRrKEtFUk5fQUxFUlQgIlJlbW92aW5nIHdyb25nIHBvcnQ6ICVwICE9ICVwXG4iLAotCQkJc3RhdGUtPnBvcnQsIHBvcnQpOworCQkJc3RhdGUtPnVhcnRfcG9ydCwgdXBvcnQpOwogCiAJbXV0ZXhfbG9jaygmcG9ydF9tdXRleCk7CiAKQEAgLTI1MDIsMzcgKzI1MjIsMzUgQEAKIAkgKiBNYXJrIHRoZSBwb3J0ICJkZWFkIiAtIHRoaXMgcHJldmVudHMgYW55IG9wZW5zIGZyb20KIAkgKiBzdWNjZWVkaW5nIHdoaWxlIHdlIHNodXQgZG93biB0aGUgcG9ydC4KIAkgKi8KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCXBvcnQtPmZsYWdzIHw9IFVQRl9ERUFEOwotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CisJdXBvcnQtPmZsYWdzIHw9IFVQRl9ERUFEOworCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCiAJLyoKIAkgKiBSZW1vdmUgdGhlIGRldmljZXMgZnJvbSB0aGUgdHR5IGxheWVyCiAJICovCi0JdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGRydi0+dHR5X2RyaXZlciwgcG9ydC0+bGluZSk7CisJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGRydi0+dHR5X2RyaXZlciwgdXBvcnQtPmxpbmUpOwogCi0JaW5mbyA9ICZzdGF0ZS0+aW5mbzsKLQlpZiAoaW5mbyAmJiBpbmZvLT5wb3J0LnR0eSkKLQkJdHR5X3ZoYW5ndXAoaW5mby0+cG9ydC50dHkpOworCWlmIChwb3J0LT50dHkpCisJCXR0eV92aGFuZ3VwKHBvcnQtPnR0eSk7CiAKIAkvKgogCSAqIEZyZWUgdGhlIHBvcnQgSU8gYW5kIG1lbW9yeSByZXNvdXJjZXMsIGlmIGFueS4KIAkgKi8KLQlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX1VOS05PV04pCi0JCXBvcnQtPm9wcy0+cmVsZWFzZV9wb3J0KHBvcnQpOworCWlmICh1cG9ydC0+dHlwZSAhPSBQT1JUX1VOS05PV04pCisJCXVwb3J0LT5vcHMtPnJlbGVhc2VfcG9ydCh1cG9ydCk7CiAKIAkvKgogCSAqIEluZGljYXRlIHRoYXQgdGhlcmUgaXNuJ3QgYSBwb3J0IGhlcmUgYW55bW9yZS4KIAkgKi8KLQlwb3J0LT50eXBlID0gUE9SVF9VTktOT1dOOworCXVwb3J0LT50eXBlID0gUE9SVF9VTktOT1dOOwogCiAJLyoKIAkgKiBLaWxsIHRoZSB0YXNrbGV0LCBhbmQgZnJlZSByZXNvdXJjZXMuCiAJICovCi0JaWYgKGluZm8pCi0JCXRhc2tsZXRfa2lsbCgmaW5mby0+dGxldCk7CisJdGFza2xldF9raWxsKCZzdGF0ZS0+dGxldCk7CiAKLQlzdGF0ZS0+cG9ydCA9IE5VTEw7CisJc3RhdGUtPnVhcnRfcG9ydCA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZwb3J0X211dGV4KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCBlZDQ2NDhiLi5hM2JiNDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtODg0LDYgKzg4NCw3IEBACiAJUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDE5MiwgMHhhNTU1LCAiU1dfNTU1X1NFUi5jaXMiKSwgIC8qIFNpZXJyYSBBaXJjYXJkIDU1NSBDRE1BIDF4cnR0IE1vZGVtIC0tIHByZSB1cGRhdGUgKi8KIAlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHgwMTNmLCAweGE1NTUsICJTV181NTVfU0VSLmNpcyIpLCAgLyogU2llcnJhIEFpcmNhcmQgNTU1IENETUEgMXhydHQgTW9kZW0gLS0gcG9zdCB1cGRhdGUgKi8KIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIk11bHRpVGVjaCIsICJQQ01DSUEgNTZLIERhdGFGYXgiLCAweDg0MjA0N2VlLCAweGMyZWZjZjAzLCAiY2lzL01UNTYzNFpMWC5jaXMiKSwKKwlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIkFEVkFOVEVDSCIsICJDT01wYWQtMzIvODVCLTIiLCAweDk2OTEzYTg1LCAweDI3YWI1NDM3LCAiQ09NcGFkMi5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIkFEVkFOVEVDSCIsICJDT01wYWQtMzIvODVCLTQiLCAweDk2OTEzYTg1LCAweGNlYzhmMTAyLCAiQ09NcGFkNC5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIzKCJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1IiwgIjEuMCIsIDB4OTY5MTNhODUsIDB4OGZiZTkyYWUsIDB4MDg3N2I2MjcsICJDT01wYWQyLmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQyKCJSUy1DT00gMlAiLCAweGFkMjBiMTU2LCAiY2lzL1JTLUNPTS0yUC5jaXMiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYwppbmRleCA1MmRiNWNjLi4yZTcxYmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2tzODY5NS5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBrczg2OTV1YXJ0X3J4X2NoYXJzKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBsc3IsIGZsZywgbWF4X2NvdW50ID0gMjU2OwogCiAJc3RhdHVzID0gVUFSVF9HRVRfTFNSKHBvcnQpOwkJLyogY2xlYXJzIHBlbmRpbmcgTFNSIGludGVycnVwdHMgKi8KQEAgLTIxMCw3ICsyMTAsNyBAQAogc3RhdGljIGlycXJldHVybl90IGtzODY5NXVhcnRfdHhfY2hhcnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCXVuc2lnbmVkIGludCBjb3VudDsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKQEAgLTI2Niw3ICsyNjYsNyBAQAogCWlmIChzdGF0dXMgJiBVUk1TX1VSVEVSSSkKIAkJcG9ydC0+aWNvdW50LnJuZysrOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwppbmRleCBhN2JmMDI0Li5lYTc0NDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiBzdGF0aWMgdm9pZCBsaDdhNDB4dWFydF9yeF9jaGFycyAoc3RydWN0IHVhcnRfcG9ydCogcG9ydCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCogdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QqIHR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAlpbnQgY2JSeE1heCA9IDI1NjsJLyogKEdyb3NzKSBsaW1pdCBvbiByZWNlaXZlICovCiAJdW5zaWduZWQgaW50IGRhdGE7CS8qIFJlY2VpdmVkIGRhdGEgYW5kIHN0YXR1cyAqLwogCXVuc2lnbmVkIGludCBmbGFnOwpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyB2b2lkIGxoN2E0MHh1YXJ0X3R4X2NoYXJzIChzdHJ1Y3QgdWFydF9wb3J0KiBwb3J0KQogewotCXN0cnVjdCBjaXJjX2J1ZiogeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiogeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAlpbnQgY2JUeE1heCA9IHBvcnQtPmZpZm9zaXplOwogCiAJaWYgKHBvcnQtPnhfY2hhcikgewpAQCAtMjQxLDcgKzI0MSw3IEBACiAJaWYgKGRlbHRhICYgQ1RTKQogCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlIChwb3J0LCBzdGF0dXMgJiBDVFMpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnBvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGxoN2E0MHh1YXJ0X2ludCAoaW50IGlycSwgdm9pZCogZGV2X2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKaW5kZXggNTRkZDE2ZC4uMGY3Y2Y0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwLCB1bnNpZ25lZCBpbnQgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAl1bnNpZ25lZCBjaGFyIGNoOwogCXVuc2lnbmVkIGludCBkaXNyID0gKnN0YXR1czsKIAlpbnQgbWF4X2NvdW50ID0gMjU2OwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwKQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAodXAtPnBvcnQueF9jaGFyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDMyZGMyZmMuLjg1MTE5ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAogc3RhdGljIHZvaWQgc2NpX3RyYW5zbWl0X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCXVuc2lnbmVkIGludCBzdG9wcGVkID0gdWFydF90eF9zdG9wcGVkKHBvcnQpOwogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIAl1bnNpZ25lZCBzaG9ydCBjdHJsOwpAQCAtNDI2LDcgKzQyNiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2NpX3JlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qgc2NpX3BvcnQgKnNjaV9wb3J0ID0gdG9fc2NpX3BvcnQocG9ydCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJaW50IGksIGNvdW50LCBjb3BpZWQgPSAwOwogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIAl1bnNpZ25lZCBjaGFyIGZsYWc7CkBAIC01NDYsNyArNTQ2LDcgQEAKIHsKIAlpbnQgY29waWVkID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCiAJaWYgKHN0YXR1cyAmIFNDeFNSX09SRVIocG9ydCkpIHsKIAkJLyogb3ZlcnJ1biBlcnJvciAqLwpAQCAtNjAwLDcgKzYwMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9oYW5kbGVfZmlmb19vdmVycnVuKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJaW50IGNvcGllZCA9IDA7CiAKIAlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX1NDSUYpCkBAIC02MjMsNyArNjIzLDcgQEAKIHsKIAlpbnQgY29waWVkID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOwogCiAJaWYgKHVhcnRfaGFuZGxlX2JyZWFrKHBvcnQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IGQ1Mjc2YzAuLjk3OTRlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTQ2OSw5ICs0NjksOSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHBvcnQtPnNjX3BvcnQuaW5mbykgeworCWlmIChwb3J0LT5zY19wb3J0LnN0YXRlKSB7CiAJCS8qIFRoZSBzZXJpYWxfY29yZSBzdHVmZnMgYXJlIGluaXRpbGl6ZWQsIHVzZSB0aGVtICovCi0JCXR0eSA9IHBvcnQtPnNjX3BvcnQuaW5mby0+cG9ydC50dHk7CisJCXR0eSA9IHBvcnQtPnNjX3BvcnQuc3RhdGUtPnBvcnQudHR5OwogCX0KIAllbHNlIHsKIAkJLyogTm90IHJlZ2lzdGVyZWQgeWV0IC0gY2FuJ3QgcGFzcyB0byB0dHkgbGF5ZXIuICAqLwpAQCAtNTUwLDkgKzU1MCw5IEBACiAKIAlCVUdfT04oIXBvcnQtPnNjX2lzX2FzeW5jaCk7CiAKLQlpZiAocG9ydC0+c2NfcG9ydC5pbmZvKSB7CisJaWYgKHBvcnQtPnNjX3BvcnQuc3RhdGUpIHsKIAkJLyogV2UncmUgaW5pdGlsaXplZCwgdXNpbmcgc2VyaWFsIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgKi8KLQkJeG1pdCA9ICZwb3J0LT5zY19wb3J0LmluZm8tPnhtaXQ7CisJCXhtaXQgPSAmcG9ydC0+c2NfcG9ydC5zdGF0ZS0+eG1pdDsKIAl9IGVsc2UgewogCQkvKiBQcm9iYWJseSBzbl9zYWxfc3dpdGNoX3RvX2FzeW5jaCBoYXMgYmVlbiBydW4gYnV0IHNlcmlhbCBjb3JlIGlzbid0CiAJCSAqIGluaXRpbGl6ZWQgeWV0LiAgSnVzdCByZXR1cm4uICBXcml0ZXMgYXJlIGdvaW5nIHRocm91Z2gKQEAgLTkyNyw3ICs5MjcsNyBAQAogCS8qIFdlIGNhbid0IGxvb2sgYXQgdGhlIHhtaXQgYnVmZmVyIGlmIHdlJ3JlIG5vdCByZWdpc3RlcmVkIHdpdGggc2VyaWFsIGNvcmUKIAkgKiAgeWV0LiAgU28gb25seSBkbyB0aGUgZmFuY3kgcmVjb3ZlcnkgYWZ0ZXIgcmVnaXN0ZXJpbmcKIAkgKi8KLQlpZiAoIXBvcnQtPnNjX3BvcnQuaW5mbykgeworCWlmICghcG9ydC0+c2NfcG9ydC5zdGF0ZSkgewogCQkvKiBOb3QgeWV0IHJlZ2lzdGVyZWQgd2l0aCBzZXJpYWwgY29yZSAtIHNpbXBsZSBjYXNlICovCiAJCXB1dHNfcmF3X2ZpeGVkKHBvcnQtPnNjX29wcy0+c2FsX3B1dHNfcmF3LCBzLCBjb3VudCk7CiAJCXJldHVybjsKQEAgLTkzNiw4ICs5MzYsOCBAQAogCS8qIHNvbWVib2R5IHJlYWxseSB3YW50cyB0aGlzIG91dHB1dCwgbWlnaHQgYmUgYW4KIAkgKiBvb3BzLCBrZGIsIHBhbmljLCBldGMuICBtYWtlIHN1cmUgdGhleSBnZXQgaXQuICovCiAJaWYgKHNwaW5faXNfbG9ja2VkKCZwb3J0LT5zY19wb3J0LmxvY2spKSB7Ci0JCWludCBsaGVhZCA9IHBvcnQtPnNjX3BvcnQuaW5mby0+eG1pdC5oZWFkOwotCQlpbnQgbHRhaWwgPSBwb3J0LT5zY19wb3J0LmluZm8tPnhtaXQudGFpbDsKKwkJaW50IGxoZWFkID0gcG9ydC0+c2NfcG9ydC5zdGF0ZS0+eG1pdC5oZWFkOworCQlpbnQgbHRhaWwgPSBwb3J0LT5zY19wb3J0LnN0YXRlLT54bWl0LnRhaWw7CiAJCWludCBjb3VudGVyLCBnb3RfbG9jayA9IDA7CiAKIAkJLyoKQEAgLTk2MiwxMyArOTYyLDEzIEBACiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCS8qIHN0aWxsIGxvY2tlZCAqLwotCQkJCWlmICgobGhlYWQgIT0gcG9ydC0+c2NfcG9ydC5pbmZvLT54bWl0LmhlYWQpCisJCQkJaWYgKChsaGVhZCAhPSBwb3J0LT5zY19wb3J0LnN0YXRlLT54bWl0LmhlYWQpCiAJCQkJICAgIHx8IChsdGFpbCAhPQotCQkJCQlwb3J0LT5zY19wb3J0LmluZm8tPnhtaXQudGFpbCkpIHsKKwkJCQkJcG9ydC0+c2NfcG9ydC5zdGF0ZS0+eG1pdC50YWlsKSkgewogCQkJCQlsaGVhZCA9Ci0JCQkJCQlwb3J0LT5zY19wb3J0LmluZm8tPnhtaXQuaGVhZDsKKwkJCQkJCXBvcnQtPnNjX3BvcnQuc3RhdGUtPnhtaXQuaGVhZDsKIAkJCQkJbHRhaWwgPQotCQkJCQkJcG9ydC0+c2NfcG9ydC5pbmZvLT54bWl0LnRhaWw7CisJCQkJCQlwb3J0LT5zY19wb3J0LnN0YXRlLT54bWl0LnRhaWw7CiAJCQkJCWNvdW50ZXIgPSAwOwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCmluZGV4IDFkZjUzMjUuLmQ1NDg2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3VuaHYuYwpAQCAtMTg0LDggKzE4NCw4IEBACiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IE5VTEw7CiAKLQlpZiAocG9ydC0+aW5mbyAhPSBOVUxMKQkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KLQkJdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJaWYgKHBvcnQtPnN0YXRlICE9IE5VTEwpCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLworCQl0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAKIAlpZiAoc3VuaHZfb3BzLT5yZWNlaXZlX2NoYXJzKHBvcnQsIHR0eSkpCiAJCXN1bl9kb19icmVhaygpOwpAQCAtMTk3LDEwICsxOTcsMTAgQEAKIHsKIAlzdHJ1Y3QgY2lyY19idWYgKnhtaXQ7CiAKLQlpZiAoIXBvcnQtPmluZm8pCisJaWYgKCFwb3J0LT5zdGF0ZSkKIAkJcmV0dXJuOwogCi0JeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQocG9ydCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwppbmRleCAwMzU1ZWZlLi5kMWFkMzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwpAQCAtMTE3LDggKzExNyw4IEBACiAJaW50IGNvdW50ID0gMDsKIAlpbnQgaTsKIAotCWlmICh1cC0+cG9ydC5pbmZvICE9IE5VTEwpCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLwotCQl0dHkgPSB1cC0+cG9ydC5pbmZvLT5wb3J0LnR0eTsKKwlpZiAodXAtPnBvcnQuc3RhdGUgIT0gTlVMTCkJCS8qIFVub3BlbmVkIHNlcmlhbCBjb25zb2xlICovCisJCXR0eSA9IHVwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eTsKIAogCS8qIFJlYWQgbnVtYmVyIG9mIEJZVEVTIChDaGFyYWN0ZXIgKyBTdGF0dXMpIGF2YWlsYWJsZS4gKi8KIAlpZiAoc3RhdC0+c3JlZy5pc3IwICYgU0FCODI1MzJfSVNSMF9SUEYpIHsKQEAgLTIyOSw3ICsyMjksNyBAQAogc3RhdGljIHZvaWQgdHJhbnNtaXRfY2hhcnMoc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKnVwLAogCQkJICAgdW5pb24gc2FiODI1MzJfaXJxX3N0YXR1cyAqc3RhdCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CiAJaW50IGk7CiAKIAlpZiAoc3RhdC0+c3JlZy5pc3IxICYgU0FCODI1MzJfSVNSMV9BTExTKSB7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJdXAtPnBvcnQuaWNvdW50LmRzcisrOwogCX0KIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3Vuc2FiX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC00MjksNyArNDI5LDcgQEAKIHN0YXRpYyB2b2lkIHN1bnNhYl9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqKSBwb3J0OwotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpbnQgaTsKIAogCXVwLT5pbnRlcnJ1cHRfbWFzazEgJj0gfihTQUI4MjUzMl9JTVIxX0FMTFN8U0FCODI1MzJfSU1SMV9YUFIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKaW5kZXggNDdjNjgzNy4uNjhkMjYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCkBAIC0zMTEsNyArMzExLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdHR5X3N0cnVjdCAqCiByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwLCB1bnNpZ25lZCBjaGFyICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaCwgZmxhZzsKIAlpbnQgbWF4X2NvdW50ID0gMjU2OwogCWludCBzYXdfY29uc29sZV9icmsgPSAwOwpAQCAtMzg5LDcgKzM4OSw3IEBACiAKIHN0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwKQogewotCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1cC0+cG9ydC5zdGF0ZS0+eG1pdDsKIAlpbnQgY291bnQ7CiAKIAlpZiAodXAtPnBvcnQueF9jaGFyKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKIAlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENUUykKIAkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdXAtPnBvcnQsIHN0YXR1cyAmIFVBUlRfTVNSX0NUUyk7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHN1bnN1X3NlcmlhbF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggZTA5ZDNjZS4uZWY2OTNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0zMjgsOSArMzI4LDkgQEAKIAl1bnNpZ25lZCBjaGFyIGNoLCByMSwgZmxhZzsKIAogCXR0eSA9IE5VTEw7Ci0JaWYgKHVwLT5wb3J0LmluZm8gIT0gTlVMTCAmJgkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KLQkgICAgdXAtPnBvcnQuaW5mby0+cG9ydC50dHkgIT0gTlVMTCkJLyogS2V5Ym9hcmQgfHwgbW91c2UgKi8KLQkJdHR5ID0gdXAtPnBvcnQuaW5mby0+cG9ydC50dHk7CisJaWYgKHVwLT5wb3J0LnN0YXRlICE9IE5VTEwgJiYJCS8qIFVub3BlbmVkIHNlcmlhbCBjb25zb2xlICovCisJICAgIHVwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eSAhPSBOVUxMKQkvKiBLZXlib2FyZCB8fCBtb3VzZSAqLworCQl0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAKIAlmb3IgKDs7KSB7CiAKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdXAtPnBvcnQsCiAJCQkJCSAgICAgICAoc3RhdHVzICYgQ1RTKSk7CiAKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1cC0+cG9ydC5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXAtPnBvcnQuc3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogCX0KIAogCXVwLT5wcmV2X3N0YXR1cyA9IHN0YXR1czsKQEAgLTUwMSw5ICs1MDEsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVwLT5wb3J0LmluZm8gPT0gTlVMTCkKKwlpZiAodXAtPnBvcnQuc3RhdGUgPT0gTlVMTCkKIAkJZ290byBhY2tfdHhfaW50OwotCXhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKKwl4bWl0ID0gJnVwLT5wb3J0LnN0YXRlLT54bWl0OwogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCiAJCWdvdG8gYWNrX3R4X2ludDsKIApAQCAtNzA1LDcgKzcwNSw3IEBACiAJCXBvcnQtPmljb3VudC50eCsrOwogCQlwb3J0LT54X2NoYXIgPSAwOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAkJd3JpdGViKHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSwgJmNoYW5uZWwtPmRhdGEpOwogCQlaU0RFTEFZKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5jIGIvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYwppbmRleCAwNjNhMzEzLi4zNGIzMWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmMKQEAgLTc3LDcgKzc3LDcgQEAKIAogc3RhdGljIHZvaWQgdGltYnVhcnRfcnhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAogCXdoaWxlIChpb3JlYWQzMihwb3J0LT5tZW1iYXNlICsgVElNQlVBUlRfSVNSKSAmIFJYRFApIHsKIAkJdTggY2ggPSBpb3JlYWQ4KHBvcnQtPm1lbWJhc2UgKyBUSU1CVUFSVF9SWEZJRk8pOwpAQCAtODYsNyArODYsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKLQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5pbmZvLT5wb3J0LnR0eSk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+c3RhdGUtPnBvcnQudHR5KTsKIAlzcGluX2xvY2soJnBvcnQtPmxvY2spOwogCiAJZGV2X2RiZyhwb3J0LT5kZXYsICIlcyAtIHRvdGFsIHJlYWQgJWQgYnl0ZXNcbiIsCkBAIC05NSw3ICs5NSw3IEBACiAKIHN0YXRpYyB2b2lkIHRpbWJ1YXJ0X3R4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJd2hpbGUgKCEoaW9yZWFkMzIocG9ydC0+bWVtYmFzZSArIFRJTUJVQVJUX0lTUikgJiBUWEJGKSAmJgogCQkhdWFydF9jaXJjX2VtcHR5KHhtaXQpKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAKIHsKIAlzdHJ1Y3QgdGltYnVhcnRfcG9ydCAqdWFydCA9CiAJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdGltYnVhcnRfcG9ydCwgcG9ydCk7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQocG9ydCkpCiAJCXJldHVybjsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQlpb3dyaXRlMzIoQ1RTX0RFTFRBLCBwb3J0LT5tZW1iYXNlICsgVElNQlVBUlRfSVNSKTsKIAkJY3RzID0gdGltYnVhcnRfZ2V0X21jdHJsKHBvcnQpOwogCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKHBvcnQsIGN0cyAmIFRJT0NNX0NUUyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIAl9CiAKIAkqaWVyIHw9IENUU19ERUxUQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMgYi9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCmluZGV4IDMzMTcxNDguLjM3N2YyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYwpAQCAtNzUsNyArNzUsNyBAQAogCiBzdGF0aWMgaW50IHVsaXRlX3JlY2VpdmUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IHN0YXQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgY2hhciBjaCA9IDA7CiAJY2hhciBmbGFnID0gVFRZX05PUk1BTDsKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAKIHN0YXRpYyBpbnQgdWxpdGVfdHJhbnNtaXQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IHN0YXQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ICA9ICZwb3J0LT5pbmZvLT54bWl0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCAgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAlpZiAoc3RhdCAmIFVMSVRFX1NUQVRVU19UWEZVTEwpCiAJCXJldHVybiAwOwpAQCAtMTU0LDE3ICsxNTQsMjIgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCB1bGl0ZV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7Ci0JaW50IGJ1c3k7CisJaW50IGJ1c3ksIG4gPSAwOwogCiAJZG8gewogCQlpbnQgc3RhdCA9IHJlYWRiKHBvcnQtPm1lbWJhc2UgKyBVTElURV9TVEFUVVMpOwogCQlidXN5ICA9IHVsaXRlX3JlY2VpdmUocG9ydCwgc3RhdCk7CiAJCWJ1c3kgfD0gdWxpdGVfdHJhbnNtaXQocG9ydCwgc3RhdCk7CisJCW4rKzsKIAl9IHdoaWxlIChidXN5KTsKIAotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPmluZm8tPnBvcnQudHR5KTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKKwkvKiB3b3JrIGRvbmU/ICovCisJaWYgKG4gPiAxKSB7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPnN0YXRlLT5wb3J0LnR0eSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9IGVsc2UgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHVsaXRlX3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0yMjEsNyArMjI2LDcgQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCB1bGl0ZV9pc3IsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sICJ1YXJ0bGl0ZSIsIHBvcnQpOworCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgInVhcnRsaXRlIiwgcG9ydCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKaW5kZXggZTk0NWU3OC4uMGMwOGYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpwOwogCXVuc2lnbmVkIGludCBjb3VudDsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnFlX3BvcnQtPnBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJYmRwID0gcWVfcG9ydC0+cnhfY3VyOwogCkBAIC00NjYsNyArNDY2LDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIGNoLCAqY3A7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZxZV9wb3J0LT5wb3J0OwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OwogCXN0cnVjdCBxZV9iZCAqYmRwOwogCXUxNiBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGZsZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYyBiL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYwppbmRleCBkYWM1NTBlLi4zYmViNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAljaGFyIGZsYWc7CiAJaW50IG1heF9jb3VudCA9IFJYX01BWF9DT1VOVDsKIAotCXR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAlsc3IgPSAqc3RhdHVzOwogCiAJZG8gewpAQCAtMzg2LDcgKzM4Niw3IEBACiAJaWYgKG1zciAmIFVBUlRfTVNSX0RDVFMpCiAJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwgbXNyICYgVUFSVF9NU1JfQ1RTKTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+c3RhdGUtPnBvcnQuZGVsdGFfbXNyX3dhaXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNtaXRfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTM5NCw3ICszOTQsNyBAQAogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdDsKIAlpbnQgbWF4X2NvdW50ID0gVFhfTUFYX0NPVU5UOwogCi0JeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCXhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAlpZiAocG9ydC0+eF9jaGFyKSB7CiAJCXNpdV93cml0ZShwb3J0LCBVQVJUX1RYLCBwb3J0LT54X2NoYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvenMuYyBiL2RyaXZlcnMvc2VyaWFsL3pzLmMKaW5kZXggZDhjMjgwOS4uMWE3ZmQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvenMuYworKysgYi9kcml2ZXJzL3NlcmlhbC96cy5jCkBAIC02MDIsMTIgKzYwMiwxMiBAQAogCQl1YXJ0X2luc2VydF9jaGFyKHVwb3J0LCBzdGF0dXMsIFJ4X09WUiwgY2gsIGZsYWcpOwogCX0KIAotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHVwb3J0LT5pbmZvLT5wb3J0LnR0eSk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godXBvcnQtPnN0YXRlLT5wb3J0LnR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIHpzX3Jhd190cmFuc21pdF9jaGFycyhzdHJ1Y3QgenNfcG9ydCAqenBvcnQpCiB7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnpwb3J0LT5wb3J0LmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnpwb3J0LT5wb3J0LnN0YXRlLT54bWl0OwogCiAJLyogWE9OL1hPRkYgY2hhcnMuICAqLwogCWlmICh6cG9ydC0+cG9ydC54X2NoYXIpIHsKQEAgLTY4Niw3ICs2ODYsNyBAQAogCQkJdXBvcnQtPmljb3VudC5ybmcrKzsKIAogCQlpZiAoZGVsdGEpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwb3J0LT5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKIAkJc3Bpbl9sb2NrKCZzY2MtPnpsb2NrKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NmaS9LY29uZmlnIGIvZHJpdmVycy9zZmkvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDExNTEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZmkvS2NvbmZpZwpAQCAtMCwwICsxLDE3IEBACisjCisjIFNGSSBDb25maWd1cmF0aW9uCisjCisKK21lbnVjb25maWcgU0ZJCisJYm9vbCAiU0ZJIChTaW1wbGUgRmlybXdhcmUgSW50ZXJmYWNlKSBTdXBwb3J0IgorCS0tLWhlbHAtLS0KKwlUaGUgU2ltcGxlIEZpcm13YXJlIEludGVyZmFjZSAoU0ZJKSBwcm92aWRlcyBhIGxpZ2h0d2VpZ2h0IG1ldGhvZAorCWZvciBwbGF0Zm9ybSBmaXJtd2FyZSB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtCisJdmlhIHN0YXRpYyB0YWJsZXMgaW4gbWVtb3J5LiAgS2VybmVsIFNGSSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvCisJYm9vdCBvbiBTRkktb25seSBwbGF0Zm9ybXMuICBDdXJyZW50bHksIGFsbCBTRkktb25seSBwbGF0Zm9ybXMgYXJlCisJYmFzZWQgb24gdGhlIDJuZCBnZW5lcmF0aW9uIEludGVsIEF0b20gcHJvY2Vzc29yIHBsYXRmb3JtLAorCWNvZGUtbmFtZWQgTW9vcmVzdG93bi4KKworCUZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3NpbXBsZWZpcm13YXJlLm9yZworCisJU2F5ICdZJyBoZXJlIHRvIGVuYWJsZSB0aGUga2VybmVsIHRvIGJvb3Qgb24gU0ZJLW9ubHkgcGxhdGZvcm1zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZmkvTWFrZWZpbGUgYi9kcml2ZXJzL3NmaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQzNzMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZmkvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmoteQkrPSBzZmlfYWNwaS5vCitvYmoteQkrPSBzZmlfY29yZS5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2ZpL3NmaV9hY3BpLmMgYi9kcml2ZXJzL3NmaS9zZmlfYWNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YWJhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NmaS9zZmlfYWNwaS5jCkBAIC0wLDAgKzEsMTc1IEBACisvKiBzZmlfYWNwaS5jIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgLSBBQ1BJIGV4dGVuc2lvbnMgKi8KKworLyoKKworICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisKKyAgR1BMIExJQ0VOU0UgU1VNTUFSWQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorCisgIEJTRCBMSUNFTlNFCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJTRkkiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NmaS5oPgorI2luY2x1ZGUgInNmaV9jb3JlLmgiCisKKy8qCisgKiBTRkkgY2FuIGFjY2VzcyBBQ1BJLWRlZmluZWQgdGFibGVzIHZpYSBhbiBvcHRpb25hbCBBQ1BJIFhTRFQuCisgKgorICogVGhpcyBhbGxvd3MgcmUtdXNlLCBhbmQgYXZvaWRzIHJlLWRlZmluaXRpb24sIG9mIHN0YW5kYXJkIHRhYmxlcy4KKyAqIEZvciBleGFtcGxlLCB0aGUgIk1DRkciIHRhYmxlIGlzIGRlZmluZWQgYnkgUENJLCByZXNlcnZlZCBieSBBQ1BJLAorICogYW5kIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQgbWFueSBTRkktb25seSBzeXN0ZW1zLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV94c2R0ICp4c2R0X3ZhIF9fcmVhZF9tb3N0bHk7CisKKyNkZWZpbmUgWFNEVF9HRVRfTlVNX0VOVFJJRVMocHRhYmxlLCBlbnRyeV90eXBlKSBcCisJKChwdGFibGUtPmhlYWRlci5sZW5ndGggLSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSkgLyBcCisJKHNpemVvZihlbnRyeV90eXBlKSkpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKmFjcGlfdG9fc2ZpX3RoKAorCQkJCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGgpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqKXRoOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqc2ZpX3RvX2FjcGlfdGgoCisJCQkJc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoKQoreworCXJldHVybiAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopdGg7Cit9CisKKy8qCisgKiBzZmlfYWNwaV9wYXJzZV94c2R0KCkKKyAqCisgKiBQYXJzZSB0aGUgQUNQSSBYU0RUIGZvciBsYXRlciBhY2Nlc3MgYnkgc2ZpX2FjcGlfdGFibGVfcGFyc2UoKS4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2ZpX2FjcGlfcGFyc2VfeHNkdChzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGgpCit7CisJc3RydWN0IHNmaV90YWJsZV9rZXkga2V5ID0gU0ZJX0FOWV9LRVk7CisJaW50IHRibF9jbnQsIGk7CisJdm9pZCAqcmV0OworCisJeHNkdF92YSA9IChzdHJ1Y3QgYWNwaV90YWJsZV94c2R0ICopdGg7CisJdGJsX2NudCA9IFhTRFRfR0VUX05VTV9FTlRSSUVTKHhzZHRfdmEsIHU2NCk7CisJZm9yIChpID0gMDsgaSA8IHRibF9jbnQ7IGkrKykgeworCQlyZXQgPSBzZmlfY2hlY2tfdGFibGUoeHNkdF92YS0+dGFibGVfb2Zmc2V0X2VudHJ5W2ldLCAma2V5KTsKKwkJaWYgKElTX0VSUihyZXQpKSB7CisJCQlkaXNhYmxlX3NmaSgpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgc2ZpX2FjcGlfaW5pdCh2b2lkKQoreworCXN0cnVjdCBzZmlfdGFibGVfa2V5IHhzZHRfa2V5ID0geyAuc2lnID0gU0ZJX1NJR19YU0RUIH07CisKKwlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19YU0RULCBOVUxMLCBOVUxMLCBzZmlfYWNwaV9wYXJzZV94c2R0KTsKKworCS8qIE9ubHkgY2FsbCB0aGUgZ2V0X3RhYmxlIHRvIGtlZXAgdGhlIHRhYmxlIG1hcHBlZCAqLworCXhzZHRfdmEgPSAoc3RydWN0IGFjcGlfdGFibGVfeHNkdCAqKXNmaV9nZXRfdGFibGUoJnhzZHRfa2V5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqc2ZpX2FjcGlfZ2V0X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpCit7CisJdTMyIHRibF9jbnQsIGk7CisJdm9pZCAqcmV0OworCisJdGJsX2NudCA9IFhTRFRfR0VUX05VTV9FTlRSSUVTKHhzZHRfdmEsIHU2NCk7CisJZm9yIChpID0gMDsgaSA8IHRibF9jbnQ7IGkrKykgeworCQlyZXQgPSBzZmlfY2hlY2tfdGFibGUoeHNkdF92YS0+dGFibGVfb2Zmc2V0X2VudHJ5W2ldLCBrZXkpOworCQlpZiAoIUlTX0VSUihyZXQpICYmIHJldCkKKwkJCXJldHVybiBzZmlfdG9fYWNwaV90aChyZXQpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzZmlfYWNwaV9wdXRfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSkKK3sKKwlzZmlfcHV0X3RhYmxlKGFjcGlfdG9fc2ZpX3RoKHRhYmxlKSk7Cit9CisKKy8qCisgKiBzZmlfYWNwaV90YWJsZV9wYXJzZSgpCisgKgorICogRmluZCBzcGVjaWZpZWQgdGFibGUgaW4gWFNEVCwgcnVuIGhhbmRsZXIgb24gaXQgYW5kIHJldHVybiBpdHMgcmV0dXJuIHZhbHVlCisgKi8KK2ludCBzZmlfYWNwaV90YWJsZV9wYXJzZShjaGFyICpzaWduYXR1cmUsIGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkLAorCQkJaW50KCpoYW5kbGVyKShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKikpCit7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CisJc3RydWN0IHNmaV90YWJsZV9rZXkga2V5OworCWludCByZXQgPSAwOworCisJaWYgKHNmaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC0xOworCisJa2V5LnNpZyA9IHNpZ25hdHVyZTsKKwlrZXkub2VtX2lkID0gb2VtX2lkOworCWtleS5vZW1fdGFibGVfaWQgPSBvZW1fdGFibGVfaWQ7CisKKwl0YWJsZSA9IHNmaV9hY3BpX2dldF90YWJsZSgma2V5KTsKKwlpZiAoIXRhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGhhbmRsZXIodGFibGUpOworCXNmaV9hY3BpX3B1dF90YWJsZSh0YWJsZSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjQ5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCkBAIC0wLDAgKzEsNDA3IEBACisvKiBzZmlfY29yZS5jIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgLSBjb3JlIGludGVybmFscyAqLworCisvKgorCisgIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKworICBHUEwgTElDRU5TRSBTVU1NQVJZCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisKKyAgQlNEIExJQ0VOU0UKKworICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgICBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIlNGSSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKworI2luY2x1ZGUgInNmaV9jb3JlLmgiCisKKyNkZWZpbmUgT05fU0FNRV9QQUdFKGFkZHIxLCBhZGRyMikgXAorCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIxKSAmIFBBR0VfTUFTSykgPT0gXAorCSgodW5zaWduZWQgbG9uZykoYWRkcjIpICYgUEFHRV9NQVNLKSkKKyNkZWZpbmUgVEFCTEVfT05fUEFHRShwYWdlLCB0YWJsZSwgc2l6ZSkgKE9OX1NBTUVfUEFHRShwYWdlLCB0YWJsZSkgJiYgXAorCQkJCU9OX1NBTUVfUEFHRShwYWdlLCB0YWJsZSArIHNpemUpKQorCitpbnQgc2ZpX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKHNmaV9kaXNhYmxlZCk7CisKK3N0YXRpYyB1NjQgc3lzdF9wYSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzeXN0X3ZhIF9fcmVhZF9tb3N0bHk7CisKKy8qCisgKiBGVyBjcmVhdGVzIGFuZCBzYXZlcyB0aGUgU0ZJIHRhYmxlcyBpbiBtZW1vcnkuIFdoZW4gdGhlc2UgdGFibGVzIGdldAorICogdXNlZCwgdGhleSBtYXkgbmVlZCB0byBiZSBtYXBwZWQgdG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlLCBhbmQgdGhlIG1hcHBpbmcKKyAqIGNhbiBoYXBwZW4gYmVmb3JlIG9yIGFmdGVyIHRoZSBpb3JlbWFwKCkgaXMgcmVhZHksIHNvIGEgZmxhZyBpcyBuZWVkZWQKKyAqIHRvIGluZGljYXRpbmcgdGhpcworICovCitzdGF0aWMgdTMyIHNmaV91c2VfaW9yZW1hcCBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzZmlfbWFwX21lbW9yeSh1NjQgcGh5cywgdTMyIHNpemUpCit7CisJaWYgKCFwaHlzIHx8ICFzaXplKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChzZmlfdXNlX2lvcmVtYXApCisJCXJldHVybiBpb3JlbWFwKHBoeXMsIHNpemUpOworCWVsc2UKKwkJcmV0dXJuIGVhcmx5X2lvcmVtYXAocGh5cywgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNmaV91bm1hcF9tZW1vcnkodm9pZCBfX2lvbWVtICp2aXJ0LCB1MzIgc2l6ZSkKK3sKKwlpZiAoIXZpcnQgfHwgIXNpemUpCisJCXJldHVybjsKKworCWlmIChzZmlfdXNlX2lvcmVtYXApCisJCWlvdW5tYXAodmlydCk7CisJZWxzZQorCQllYXJseV9pb3VubWFwKHZpcnQsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBzZmlfcHJpbnRfdGFibGVfaGVhZGVyKHVuc2lnbmVkIGxvbmcgbG9uZyBwYSwKKwkJCQlzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqaGVhZGVyKQoreworCXByX2luZm8oIiU0LjRzICVsbFgsICUwNFggKHYlZCAlNi42cyAlOC44cylcbiIsCisJCWhlYWRlci0+c2lnLCBwYSwKKwkJaGVhZGVyLT5sZW4sIGhlYWRlci0+cmV2LCBoZWFkZXItPm9lbV9pZCwKKwkJaGVhZGVyLT5vZW1fdGFibGVfaWQpOworfQorCisvKgorICogc2ZpX3ZlcmlmeV90YWJsZSgpCisgKiBTYW5pdHkgY2hlY2sgdGFibGUgbGVuZ2gsIGNhbGN1bGF0ZSBjaGVja3N1bQorICovCitzdGF0aWMgX19pbml0IGludCBzZmlfdmVyaWZ5X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSkKK3sKKworCXU4IGNoZWNrc3VtID0gMDsKKwl1OCAqcHVjaGFyID0gKHU4ICopdGFibGU7CisJdTMyIGxlbmd0aCA9IHRhYmxlLT5sZW47CisKKwkvKiBTYW5pdHkgY2hlY2sgdGFibGUgbGVuZ3RoIGFnYWluc3QgYXJiaXRyYXJ5IDFNQiBsaW1pdCAqLworCWlmIChsZW5ndGggPiAweDEwMDAwMCkgeworCQlwcl9lcnIoIkludmFsaWQgdGFibGUgbGVuZ3RoIDB4JXhcbiIsIGxlbmd0aCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl3aGlsZSAobGVuZ3RoLS0pCisJCWNoZWNrc3VtICs9ICpwdWNoYXIrKzsKKworCWlmIChjaGVja3N1bSkgeworCQlwcl9lcnIoIkNoZWNrc3VtICUyLjJYIHNob3VsZCBiZSAlMi4yWFxuIiwKKwkJCXRhYmxlLT5jc3VtLCB0YWJsZS0+Y3N1bSAtIGNoZWNrc3VtKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNmaV9tYXBfdGFibGUoKQorICoKKyAqIFJldHVybiBhZGRyZXNzIG9mIG1hcHBlZCB0YWJsZQorICogQ2hlY2sgZm9yIGNvbW1vbiBjYXNlIHRoYXQgd2UgY2FuIHJlLXVzZSBtYXBwaW5nIHRvIFNZU1QsCisgKiB3aGljaCByZXF1aXJlcyBzeXN0X3BhLCBzeXN0X3ZhIHRvIGJlIGluaXRpYWxpemVkLgorICovCitzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqc2ZpX21hcF90YWJsZSh1NjQgcGEpCit7CisJc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoOworCXUzMiBsZW5ndGg7CisKKwlpZiAoIVRBQkxFX09OX1BBR0Uoc3lzdF9wYSwgcGEsIHNpemVvZihzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlcikpKQorCQl0aCA9IHNmaV9tYXBfbWVtb3J5KHBhLCBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIpKTsKKwllbHNlCisJCXRoID0gKHZvaWQgKilzeXN0X3ZhICsgKHBhIC0gc3lzdF9wYSk7CisKKwkgLyogSWYgdGFibGUgZml0cyBvbiBzYW1lIHBhZ2UgYXMgaXRzIGhlYWRlciwgd2UgYXJlIGRvbmUgKi8KKwlpZiAoVEFCTEVfT05fUEFHRSh0aCwgdGgsIHRoLT5sZW4pKQorCQlyZXR1cm4gdGg7CisKKwkvKiBFbnRpcmUgdGFibGUgZG9lcyBub3QgZml0IG9uIHNhbWUgcGFnZSBhcyBTWVNUICovCisJbGVuZ3RoID0gdGgtPmxlbjsKKwlpZiAoIVRBQkxFX09OX1BBR0Uoc3lzdF9wYSwgcGEsIHNpemVvZihzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlcikpKQorCQlzZmlfdW5tYXBfbWVtb3J5KHRoLCBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIpKTsKKworCXJldHVybiBzZmlfbWFwX21lbW9yeShwYSwgbGVuZ3RoKTsKK30KKworLyoKKyAqIHNmaV91bm1hcF90YWJsZSgpCisgKgorICogVW5kb2VzIGVmZmVjdCBvZiBzZmlfbWFwX3RhYmxlKCkgYnkgdW5tYXBwaW5nIHRhYmxlCisgKiBpZiBpdCBkaWQgbm90IGNvbXBsZXRlbHkgZml0IG9uIHNhbWUgcGFnZSBhcyBTWVNULgorICovCit2b2lkIHNmaV91bm1hcF90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGgpCit7CisJaWYgKCFUQUJMRV9PTl9QQUdFKHN5c3RfdmEsIHRoLCB0aC0+bGVuKSkKKwkJc2ZpX3VubWFwX21lbW9yeSh0aCwgVEFCTEVfT05fUEFHRSh0aCwgdGgsIHRoLT5sZW4pID8KKwkJCQkJc2l6ZW9mKCp0aCkgOiB0aC0+bGVuKTsKK30KKworc3RhdGljIGludCBzZmlfdGFibGVfY2hlY2tfa2V5KHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0aCwKKwkJCQlzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSAqa2V5KQoreworCisJaWYgKHN0cm5jbXAodGgtPnNpZywga2V5LT5zaWcsIFNGSV9TSUdOQVRVUkVfU0laRSkKKwkJfHwgKGtleS0+b2VtX2lkICYmIHN0cm5jbXAodGgtPm9lbV9pZCwKKwkJCQlrZXktPm9lbV9pZCwgU0ZJX09FTV9JRF9TSVpFKSkKKwkJfHwgKGtleS0+b2VtX3RhYmxlX2lkICYmIHN0cm5jbXAodGgtPm9lbV90YWJsZV9pZCwKKwkJCQlrZXktPm9lbV90YWJsZV9pZCwgU0ZJX09FTV9UQUJMRV9JRF9TSVpFKSkpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgaW4gMiBjYXNlczoKKyAqIDEuIHVzZWQgdG8gZW51bWVyYXRlIGFuZCB2ZXJpZnkgdGhlIHRhYmxlcyBhZGRyZXNzZWQgYnkgU1lTVC9YU0RULAorICogICAgdGh1cyBubyBzaWduYXR1cmUgd2lsbCBiZSBnaXZlbiAoaW4ga2VybmVsIGJvb3QgcGhhc2UpCisgKiAyLiB1c2VkIHRvIHBhcnNlIG9uZSBzcGVjaWZpYyB0YWJsZSwgc2lnbmF0dXJlIG11c3QgZXhpc3QsIGFuZAorICogICAgdGhlIG1hcHBlZCB2aXJ0IGFkZHJlc3Mgd2lsbCBiZSByZXR1cm5lZCwgYW5kIHRoZSB2aXJ0IHNwYWNlCisgKiAgICB3aWxsIGJlIHJlbGVhc2VkIGJ5IGNhbGwgc2ZpX3B1dF90YWJsZSgpIGxhdGVyCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJTlVMTDoJCQl3aGVuIGNhbid0IGZpbmQgYSB0YWJsZSBtYXRjaGluZyB0aGUga2V5CisgKglFUlJfUFRSKGVycm9yKToJCWVycm9yIHZhbHVlCisgKgl2aXJ0IHRhYmxlIGFkZHJlc3M6CXdoZW4gYSBtYXRjaGVkIHRhYmxlIGlzIGZvdW5kCisgKi8KK3N0cnVjdCBzZmlfdGFibGVfaGVhZGVyICpzZmlfY2hlY2tfdGFibGUodTY0IHBhLCBzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSAqa2V5KQoreworCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0aDsKKwl2b2lkICpyZXQgPSBOVUxMOworCisJdGggPSBzZmlfbWFwX3RhYmxlKHBhKTsKKwlpZiAoIXRoKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmICgha2V5LT5zaWcpIHsKKwkJc2ZpX3ByaW50X3RhYmxlX2hlYWRlcihwYSwgdGgpOworCQlpZiAoc2ZpX3ZlcmlmeV90YWJsZSh0aCkpCisJCQlyZXQgPSBFUlJfUFRSKC1FSU5WQUwpOworCX0gZWxzZSB7CisJCWlmICghc2ZpX3RhYmxlX2NoZWNrX2tleSh0aCwga2V5KSkKKwkJCXJldHVybiB0aDsJLyogU3VjY2VzcyAqLworCX0KKworCXNmaV91bm1hcF90YWJsZSh0aCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHNmaV9nZXRfdGFibGUoKQorICoKKyAqIFNlYXJjaCBTWVNUIGZvciB0aGUgc3BlY2lmaWVkIHRhYmxlIHdpdGggdGhlIHNpZ25hdHVyZSBpbgorICogdGhlIGtleSwgYW5kIHJldHVybiB0aGUgbWFwcGVkIHRhYmxlCisgKi8KK3N0cnVjdCBzZmlfdGFibGVfaGVhZGVyICpzZmlfZ2V0X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpCit7CisJc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoOworCXUzMiB0YmxfY250LCBpOworCisJdGJsX2NudCA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc3lzdF92YSwgdTY0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGJsX2NudDsgaSsrKSB7CisJCXRoID0gc2ZpX2NoZWNrX3RhYmxlKHN5c3RfdmEtPnBlbnRyeVtpXSwga2V5KTsKKwkJaWYgKCFJU19FUlIodGgpICYmIHRoKQorCQkJcmV0dXJuIHRoOworCX0KKworCXJldHVybiBOVUxMOworfQorCit2b2lkIHNmaV9wdXRfdGFibGUoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoKQoreworCXNmaV91bm1hcF90YWJsZSh0aCk7Cit9CisKKy8qIEZpbmQgdGFibGUgd2l0aCBzaWduYXR1cmUsIHJ1biBoYW5kbGVyIG9uIGl0ICovCitpbnQgc2ZpX3RhYmxlX3BhcnNlKGNoYXIgKnNpZ25hdHVyZSwgY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQsCisJCQlzZmlfdGFibGVfaGFuZGxlciBoYW5kbGVyKQoreworCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CisJc3RydWN0IHNmaV90YWJsZV9rZXkga2V5OworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKHNmaV9kaXNhYmxlZCB8fCAhaGFuZGxlciB8fCAhc2lnbmF0dXJlKQorCQlnb3RvIGV4aXQ7CisKKwlrZXkuc2lnID0gc2lnbmF0dXJlOworCWtleS5vZW1faWQgPSBvZW1faWQ7CisJa2V5Lm9lbV90YWJsZV9pZCA9IG9lbV90YWJsZV9pZDsKKworCXRhYmxlID0gc2ZpX2dldF90YWJsZSgma2V5KTsKKwlpZiAoIXRhYmxlKQorCQlnb3RvIGV4aXQ7CisKKwlyZXQgPSBoYW5kbGVyKHRhYmxlKTsKKwlzZmlfcHV0X3RhYmxlKHRhYmxlKTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNmaV90YWJsZV9wYXJzZSk7CisKKy8qCisgKiBzZmlfcGFyc2Vfc3lzdCgpCisgKiBDaGVja3N1bSBhbGwgdGhlIHRhYmxlcyBpbiBTWVNUIGFuZCBwcmludCB0aGVpciBoZWFkZXJzCisgKgorICogc3VjY2Vzczogc2V0IHN5c3RfdmEsIHJldHVybiAwCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNmaV9wYXJzZV9zeXN0KHZvaWQpCit7CisJc3RydWN0IHNmaV90YWJsZV9rZXkga2V5ID0gU0ZJX0FOWV9LRVk7CisJaW50IHRibF9jbnQsIGk7CisJdm9pZCAqcmV0OworCisJc3lzdF92YSA9IHNmaV9tYXBfbWVtb3J5KHN5c3RfcGEsIHNpemVvZihzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSkpOworCWlmICghc3lzdF92YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0YmxfY250ID0gU0ZJX0dFVF9OVU1fRU5UUklFUyhzeXN0X3ZhLCB1NjQpOworCWZvciAoaSA9IDA7IGkgPCB0YmxfY250OyBpKyspIHsKKwkJcmV0ID0gc2ZpX2NoZWNrX3RhYmxlKHN5c3RfdmEtPnBlbnRyeVtpXSwgJmtleSk7CisJCWlmIChJU19FUlIocmV0KSkKKwkJCXJldHVybiBQVFJfRVJSKHJldCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgT1MgZmluZHMgdGhlIFN5c3RlbSBUYWJsZSBieSBzZWFyY2hpbmcgMTYtYnl0ZSBib3VuZGFyaWVzIGJldHdlZW4KKyAqIHBoeXNpY2FsIGFkZHJlc3MgMHgwMDBFMDAwMCBhbmQgMHgwMDBGRkZGRi4gVGhlIE9TIHNoYWxsIHNlYXJjaCB0aGlzIHJlZ2lvbgorICogc3RhcnRpbmcgYXQgdGhlIGxvdyBhZGRyZXNzIGFuZCBzaGFsbCBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSAxc3QgdmFsaWQgU0ZJCisgKiBTeXN0ZW0gVGFibGUgaXMgZm91bmQuCisgKgorICogc3VjY2Vzczogc2V0IHN5c3RfcGEsIHJldHVybiAwCisgKiBmYWlsOiByZXR1cm4gLTEKKyAqLworc3RhdGljIF9faW5pdCBpbnQgc2ZpX2ZpbmRfc3lzdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsZW47CisJdm9pZCAqc3RhcnQ7CisKKwlsZW4gPSBTRklfU1lTVF9TRUFSQ0hfRU5EIC0gU0ZJX1NZU1RfU0VBUkNIX0JFR0lOOworCXN0YXJ0ID0gc2ZpX21hcF9tZW1vcnkoU0ZJX1NZU1RfU0VBUkNIX0JFR0lOLCBsZW4pOworCWlmICghc3RhcnQpCisJCXJldHVybiAtMTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuOyBvZmZzZXQgKz0gMTYpIHsKKwkJc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnN5c3RfaGRyOworCisJCXN5c3RfaGRyID0gc3RhcnQgKyBvZmZzZXQ7CisJCWlmIChzdHJuY21wKHN5c3RfaGRyLT5zaWcsIFNGSV9TSUdfU1lTVCwKKwkJCQlTRklfU0lHTkFUVVJFX1NJWkUpKQorCQkJY29udGludWU7CisKKwkJaWYgKHN5c3RfaGRyLT5sZW4gPiBQQUdFX1NJWkUpCisJCQljb250aW51ZTsKKworCQlzZmlfcHJpbnRfdGFibGVfaGVhZGVyKFNGSV9TWVNUX1NFQVJDSF9CRUdJTiArIG9mZnNldCwKKwkJCQkJc3lzdF9oZHIpOworCisJCWlmIChzZmlfdmVyaWZ5X3RhYmxlKHN5c3RfaGRyKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEVuZm9yY2UgU0ZJIHNwZWMgbWFuZGF0ZSB0aGF0IFNZU1QgcmVzaWRlIHdpdGhpbiBhIHBhZ2UuCisJCSAqLworCQlpZiAoIU9OX1NBTUVfUEFHRShzeXN0X3BhLCBzeXN0X3BhICsgc3lzdF9oZHItPmxlbikpIHsKKwkJCXByX2luZm8oIlNZU1QgMHglbGx4ICsgMHgleCBjcm9zc2VzIHBhZ2VcbiIsCisJCQkJCXN5c3RfcGEsIHN5c3RfaGRyLT5sZW4pOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTdWNjZXNzICovCisJCXN5c3RfcGEgPSBTRklfU1lTVF9TRUFSQ0hfQkVHSU4gKyBvZmZzZXQ7CisJCXNmaV91bm1hcF9tZW1vcnkoc3RhcnQsIGxlbik7CisJCXJldHVybiAwOworCX0KKworCXNmaV91bm1hcF9tZW1vcnkoc3RhcnQsIGxlbik7CisJcmV0dXJuIC0xOworfQorCit2b2lkIF9faW5pdCBzZmlfaW5pdCh2b2lkKQoreworCWlmICghYWNwaV9kaXNhYmxlZCkKKwkJZGlzYWJsZV9zZmkoKTsKKworCWlmIChzZmlfZGlzYWJsZWQpCisJCXJldHVybjsKKworCXByX2luZm8oIlNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgdjAuNyBodHRwOi8vc2ltcGxlZmlybXdhcmUub3JnXG4iKTsKKworCWlmIChzZmlfZmluZF9zeXN0KCkgfHwgc2ZpX3BhcnNlX3N5c3QoKSB8fCBzZmlfcGxhdGZvcm1faW5pdCgpKQorCQlkaXNhYmxlX3NmaSgpOworCisJcmV0dXJuOworfQorCit2b2lkIF9faW5pdCBzZmlfaW5pdF9sYXRlKHZvaWQpCit7CisJaW50IGxlbmd0aDsKKworCWlmIChzZmlfZGlzYWJsZWQpCisJCXJldHVybjsKKworCWxlbmd0aCA9IHN5c3RfdmEtPmhlYWRlci5sZW47CisJc2ZpX3VubWFwX21lbW9yeShzeXN0X3ZhLCBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9zaW1wbGUpKTsKKworCS8qIFVzZSBpb3JlbWFwIG5vdyBhZnRlciBpdCBpcyByZWFkeSAqLworCXNmaV91c2VfaW9yZW1hcCA9IDE7CisJc3lzdF92YSA9IHNmaV9tYXBfbWVtb3J5KHN5c3RfcGEsIGxlbmd0aCk7CisKKwlzZmlfYWNwaV9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NmaS9zZmlfY29yZS5oIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTgyZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuaApAQCAtMCwwICsxLDcwIEBACisvKiBzZmlfY29yZS5oIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UsIGludGVybmFsIGhlYWRlciAqLworCisvKgorCisgIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKworICBHUEwgTElDRU5TRSBTVU1NQVJZCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisKKyAgQlNEIExJQ0VOU0UKKworICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgICBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCitzdHJ1Y3Qgc2ZpX3RhYmxlX2tleXsKKwljaGFyCSpzaWc7CisJY2hhcgkqb2VtX2lkOworCWNoYXIJKm9lbV90YWJsZV9pZDsKK307CisKKyNkZWZpbmUgU0ZJX0FOWV9LRVkgeyAuc2lnID0gTlVMTCwgLm9lbV9pZCA9IE5VTEwsIC5vZW1fdGFibGVfaWQgPSBOVUxMIH0KKworZXh0ZXJuIGludCBfX2luaXQgc2ZpX2FjcGlfaW5pdCh2b2lkKTsKK2V4dGVybiAgc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnNmaV9jaGVja190YWJsZSh1NjQgcGFkZHIsCisJCQkJCXN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpOworc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnNmaV9nZXRfdGFibGUoc3RydWN0IHNmaV90YWJsZV9rZXkgKmtleSk7CitleHRlcm4gdm9pZCBzZmlfcHV0X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCAyYzczM2MyLi40YjZmN2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTExNywxMCArMTE3LDExIEBACiAJICBzcGVlZCB3aXRoIGEgY3VzdG9tIHZlcnNpb24gb2YgdGhpcyBkcml2ZXI7IHNlZSB0aGUgc291cmNlIGNvZGUuCiAKIGNvbmZpZyBTUElfSU1YCi0JdHJpc3RhdGUgIkZyZWVzY2FsZSBpTVggU1BJIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBBUkNIX01YMSAmJiBFWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIGkuTVggU1BJIGNvbnRyb2xsZXJzIgorCWRlcGVuZHMgb24gQVJDSF9NWEMKKwlzZWxlY3QgU1BJX0JJVEJBTkcKIAloZWxwCi0JICBUaGlzIGVuYWJsZXMgdXNpbmcgdGhlIEZyZWVzY2FsZSBpTVggU1BJIGNvbnRyb2xsZXIgaW4gbWFzdGVyCisJICBUaGlzIGVuYWJsZXMgdXNpbmcgdGhlIEZyZWVzY2FsZSBpLk1YIFNQSSBjb250cm9sbGVycyBpbiBtYXN0ZXIKIAkgIG1vZGUuCiAKIGNvbmZpZyBTUElfTE03MF9MTFAKQEAgLTE3MywxMSArMTc0LDIxIEBACiAJdHJpc3RhdGUgIkFSTSBBTUJBIFBMMDIyIFNTUCBjb250cm9sbGVyIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gQVJNX0FNQkEgJiYgRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCB5IGlmIE1BQ0hfVTMwMAorCWRlZmF1bHQgeSBpZiBBUkNIX1JFQUxWSUVXCisJZGVmYXVsdCB5IGlmIElOVEVHUkFUT1JfSU1QRDEKKwlkZWZhdWx0IHkgaWYgQVJDSF9WRVJTQVRJTEUKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIEFSTShSKSBBTUJBKFIpIFByaW1lQ2VsbCBQTDAyMiBTU1AKIAkgIGNvbnRyb2xsZXIuIElmIHlvdSBoYXZlIGFuIGVtYmVkZGVkIHN5c3RlbSB3aXRoIGFuIEFNQkEoUikKIAkgIGJ1cyBhbmQgYSBQTDAyMiBjb250cm9sbGVyLCBzYXkgWSBvciBNIGhlcmUuCiAKK2NvbmZpZyBTUElfUFBDNHh4CisJdHJpc3RhdGUgIlBQQzR4eCBTUEkgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFBQQzMyICYmIDR4eCAmJiBTUElfTUFTVEVSCisJc2VsZWN0IFNQSV9CSVRCQU5HCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIGEgZHJpdmVyIGZvciB0aGUgUFBDNHh4IFNQSSBDb250cm9sbGVyLgorCiBjb25maWcgU1BJX1BYQTJYWAogCXRyaXN0YXRlICJQWEEyeHggU1NQIFNQSSBtYXN0ZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBFWFBFUklNRU5UQUwKQEAgLTIxMSw2ICsyMjIsMTIgQEAKIAloZWxwCiAJICBTUEkgZHJpdmVyIGZvciBTdXBlckggU0NJIGJsb2Nrcy4KIAorY29uZmlnIFNQSV9TVE1QM1hYWAorCXRyaXN0YXRlICJGcmVlc2NhbGUgU1RNUDM3eHgvMzc4eCBTUEkvU1NQIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX1NUTVAzWFhYICYmIFNQSV9NQVNURVIKKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBGcmVlc2NhbGUgU1RNUDM3eHgvMzc4eCBTb0MgU1NQIGludGVyZmFjZQorCiBjb25maWcgU1BJX1RYWDkKIAl0cmlzdGF0ZSAiVG9zaGliYSBUWHg5IFNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gR0VORVJJQ19HUElPICYmIENQVV9UWDQ5WFgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggM2RlNDA4ZC4uNmQ3YTNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDcgQEAKIG9iai0kKENPTkZJR19TUElfQVUxNTUwKQkJKz0gYXUxNTUwX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0JVVFRFUkZMWSkJCSs9IHNwaV9idXR0ZXJmbHkubwogb2JqLSQoQ09ORklHX1NQSV9HUElPKQkJCSs9IHNwaV9ncGlvLm8KLW9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IHNwaV9pbXgubworb2JqLSQoQ09ORklHX1NQSV9JTVgpCQkJKz0gbXhjX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0xNNzBfTExQKQkJKz0gc3BpX2xtNzBsbHAubwogb2JqLSQoQ09ORklHX1NQSV9QWEEyWFgpCQkrPSBweGEyeHhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfT01BUF9VV0lSRSkJCSs9IG9tYXBfdXdpcmUubwpAQCAtMjYsMTEgKzI2LDEzIEBACiBvYmotJChDT05GSUdfU1BJX1BMMDIyKQkJCSs9IGFtYmEtcGwwMjIubwogb2JqLSQoQ09ORklHX1NQSV9NUEM1Mnh4X1BTQykJCSs9IG1wYzUyeHhfcHNjX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX01QQzh4eHgpCQkrPSBzcGlfbXBjOHh4eC5vCitvYmotJChDT05GSUdfU1BJX1BQQzR4eCkJCSs9IHNwaV9wcGM0eHgubwogb2JqLSQoQ09ORklHX1NQSV9TM0MyNFhYX0dQSU8pCQkrPSBzcGlfczNjMjR4eF9ncGlvLm8KIG9iai0kKENPTkZJR19TUElfUzNDMjRYWCkJCSs9IHNwaV9zM2MyNHh4Lm8KIG9iai0kKENPTkZJR19TUElfVFhYOSkJCQkrPSBzcGlfdHh4OS5vCiBvYmotJChDT05GSUdfU1BJX1hJTElOWCkJCSs9IHhpbGlueF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9TSF9TQ0kpCQkrPSBzcGlfc2hfc2NpLm8KK29iai0kKENPTkZJR19TUElfU1RNUDNYWFgpCQkrPSBzcGlfc3RtcC5vCiAjIAkuLi4gYWRkIGFib3ZlIHRoaXMgbGluZSAuLi4KIAogIyBTUEkgcHJvdG9jb2wgZHJpdmVycyAoZGV2aWNlL2xpbmsgb24gYnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXhjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXhjX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDQ3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9teGNfc3BpLmMKQEAgLTAsMCArMSw2ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInNwaV9pbXgiCisKKyNkZWZpbmUgTVhDX0NTUElSWERBVEEJCTB4MDAKKyNkZWZpbmUgTVhDX0NTUElUWERBVEEJCTB4MDQKKyNkZWZpbmUgTVhDX0NTUElDVFJMCQkweDA4CisjZGVmaW5lIE1YQ19DU1BJSU5UCQkweDBjCisjZGVmaW5lIE1YQ19SRVNFVAkJMHgxYworCisvKiBnZW5lcmljIGRlZmluZXMgdG8gYWJzdHJhY3QgZnJvbSB0aGUgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dHMgKi8KKyNkZWZpbmUgTVhDX0lOVF9SUgkoMSA8PCAwKSAvKiBSZWNlaXZlIGRhdGEgcmVhZHkgaW50ZXJydXB0ICovCisjZGVmaW5lIE1YQ19JTlRfVEUJKDEgPDwgMSkgLyogVHJhbnNtaXQgRklGTyBlbXB0eSBpbnRlcnJ1cHQgKi8KKworc3RydWN0IG14Y19zcGlfY29uZmlnIHsKKwl1bnNpZ25lZCBpbnQgc3BlZWRfaHo7CisJdW5zaWduZWQgaW50IGJwdzsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwlpbnQgY3M7Cit9OworCitzdHJ1Y3QgbXhjX3NwaV9kYXRhIHsKKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcgYml0YmFuZzsKKworCXN0cnVjdCBjb21wbGV0aW9uIHhmZXJfZG9uZTsKKwl2b2lkICpiYXNlOworCWludCBpcnE7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGxvbmcgc3BpX2NsazsKKwlpbnQgKmNoaXBzZWxlY3Q7CisKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdm9pZCAoKnR4KShzdHJ1Y3QgbXhjX3NwaV9kYXRhICopOworCXZvaWQgKCpyeCkoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKKwl2b2lkICpyeF9idWY7CisJY29uc3Qgdm9pZCAqdHhfYnVmOworCXVuc2lnbmVkIGludCB0eGZpZm87IC8qIG51bWJlciBvZiB3b3JkcyBwdXNoZWQgaW4gdHggRklGTyAqLworCisJLyogU29DIHNwZWNpZmljIGZ1bmN0aW9ucyAqLworCXZvaWQgKCppbnRjdHJsKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICosIGludCk7CisJaW50ICgqY29uZmlnKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICosIHN0cnVjdCBteGNfc3BpX2NvbmZpZyAqKTsKKwl2b2lkICgqdHJpZ2dlcikoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKKwlpbnQgKCpyeF9hdmFpbGFibGUpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7Cit9OworCisjZGVmaW5lIE1YQ19TUElfQlVGX1JYKHR5cGUpCQkJCQkJXAorc3RhdGljIHZvaWQgbXhjX3NwaV9idWZfcnhfIyN0eXBlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGludCB2YWwgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElSWERBVEEpOwlcCisJCQkJCQkJCQlcCisJaWYgKG14Y19zcGktPnJ4X2J1ZikgewkJCQkJCVwKKwkJKih0eXBlICopbXhjX3NwaS0+cnhfYnVmID0gdmFsOwkJCQlcCisJCW14Y19zcGktPnJ4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAorCX0JCQkJCQkJCVwKK30KKworI2RlZmluZSBNWENfU1BJX0JVRl9UWCh0eXBlKQkJCQkJCVwKK3N0YXRpYyB2b2lkIG14Y19zcGlfYnVmX3R4XyMjdHlwZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQkJXAorewkJCQkJCQkJCVwKKwl0eXBlIHZhbCA9IDA7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAobXhjX3NwaS0+dHhfYnVmKSB7CQkJCQkJXAorCQl2YWwgPSAqKHR5cGUgKilteGNfc3BpLT50eF9idWY7CQkJCVwKKwkJbXhjX3NwaS0+dHhfYnVmICs9IHNpemVvZih0eXBlKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCW14Y19zcGktPmNvdW50IC09IHNpemVvZih0eXBlKTsJCQkJCVwKKwkJCQkJCQkJCVwKKwl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElUWERBVEEpOwkJCVwKK30KKworTVhDX1NQSV9CVUZfUlgodTgpCitNWENfU1BJX0JVRl9UWCh1OCkKK01YQ19TUElfQlVGX1JYKHUxNikKK01YQ19TUElfQlVGX1RYKHUxNikKK01YQ19TUElfQlVGX1JYKHUzMikKK01YQ19TUElfQlVGX1RYKHUzMikKKworLyogRmlyc3QgZW50cnkgaXMgcmVzZXJ2ZWQsIHNlY29uZCBlbnRyeSBpcyB2YWxpZCBvbmx5IGlmIFNESENfU1BJRU4gaXMgc2V0CisgKiAod2hpY2ggaXMgY3VycmVudGx5IG5vdCB0aGUgY2FzZSBpbiB0aGlzIGRyaXZlcikKKyAqLworc3RhdGljIGludCBteGNfY2xrZGl2c1tdID0gezAsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMjQsIDMyLCA0OCwgNjQsIDk2LCAxMjgsIDE5MiwKKwkyNTYsIDM4NCwgNTEyLCA3NjgsIDEwMjR9OworCisvKiBNWDIxLCBNWDI3ICovCitzdGF0aWMgdW5zaWduZWQgaW50IG14Y19zcGlfY2xrZGl2XzEodW5zaWduZWQgaW50IGZpbiwKKwkJdW5zaWduZWQgaW50IGZzcGkpCit7CisJaW50IGksIG1heDsKKworCWlmIChjcHVfaXNfbXgyMSgpKQorCQltYXggPSAxODsKKwllbHNlCisJCW1heCA9IDE2OworCisJZm9yIChpID0gMjsgaSA8IG1heDsgaSsrKQorCQlpZiAoZnNwaSAqIG14Y19jbGtkaXZzW2ldID49IGZpbikKKwkJCXJldHVybiBpOworCisJcmV0dXJuIG1heDsKK30KKworLyogTVgxLCBNWDMxLCBNWDM1ICovCitzdGF0aWMgdW5zaWduZWQgaW50IG14Y19zcGlfY2xrZGl2XzIodW5zaWduZWQgaW50IGZpbiwKKwkJdW5zaWduZWQgaW50IGZzcGkpCit7CisJaW50IGksIGRpdiA9IDQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCWlmIChmc3BpICogZGl2ID49IGZpbikKKwkJCXJldHVybiBpOworCQlkaXYgPDw9IDE7CisJfQorCisJcmV0dXJuIDc7Cit9CisKKyNkZWZpbmUgTVgzMV9JTlRSRUdfVEVFTgkoMSA8PCAwKQorI2RlZmluZSBNWDMxX0lOVFJFR19SUkVOCSgxIDw8IDMpCisKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgMCkKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMSkKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9YQ0gJKDEgPDwgMikKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9QSEEJKDEgPDwgNSkKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU0NUTAkoMSA8PCA2KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1NTUE9MCSgxIDw8IDcpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfQkNfU0hJRlQJOAorI2RlZmluZSBNWDM1X0NTUElDVFJMX0JMX1NISUZUCTIwCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfQ1NfU0hJRlQJMjQKKyNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9DU19TSElGVAkxMgorI2RlZmluZSBNWDMxX0NTUElDVFJMX0RSX1NISUZUCTE2CisKKyNkZWZpbmUgTVgzMV9DU1BJU1RBVFVTCQkweDE0CisjZGVmaW5lIE1YMzFfU1RBVFVTX1JSCQkoMSA8PCAzKQorCisvKiBUaGVzZSBmdW5jdGlvbnMgYWxzbyB3b3JrIGZvciB0aGUgaS5NWDM1LCBidXQgYmUgYXdhcmUgdGhhdAorICogdGhlIGkuTVgzNSBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0IGZvciBiaXRzCisgKiB3ZSBkbyBub3QgdXNlIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkIG14MzFfaW50Y3RybChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCisJCXZhbCB8PSBNWDMxX0lOVFJFR19URUVOOworCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQorCQl2YWwgfD0gTVgzMV9JTlRSRUdfUlJFTjsKKworCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Cit9CisKK3N0YXRpYyB2b2lkIG14MzFfdHJpZ2dlcihzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKwlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9YQ0g7CisJd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgbXgzMV9jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKKwkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgaW50IHJlZyA9IE1YMzFfQ1NQSUNUUkxfRU5BQkxFIHwgTVgzMV9DU1BJQ1RSTF9NQVNURVI7CisKKwlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMihteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAorCQlNWDMxX0NTUElDVFJMX0RSX1NISUZUOworCisJaWYgKGNwdV9pc19teDMxKCkpCisJCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDMxX0NTUElDVFJMX0JDX1NISUZUOworCWVsc2UgaWYgKGNwdV9pc19teDM1KCkpIHsKKwkJcmVnIHw9IChjb25maWctPmJwdyAtIDEpIDw8IE1YMzVfQ1NQSUNUUkxfQkxfU0hJRlQ7CisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTQ1RMOworCX0KKworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKKwkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfUEhBOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKKwkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfUE9MOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1NfSElHSCkKKwkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfU1NQT0w7CisJaWYgKGNvbmZpZy0+Y3MgPCAwKSB7CisJCWlmIChjcHVfaXNfbXgzMSgpKQorCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzFfQ1NQSUNUUkxfQ1NfU0hJRlQ7CisJCWVsc2UgaWYgKGNwdV9pc19teDM1KCkpCisJCQlyZWcgfD0gKGNvbmZpZy0+Y3MgKyAzMikgPDwgTVgzNV9DU1BJQ1RSTF9DU19TSElGVDsKKwl9CisKKwl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MzFfcnhfYXZhaWxhYmxlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCit7CisJcmV0dXJuIHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWDMxX0NTUElTVEFUVVMpICYgTVgzMV9TVEFUVVNfUlI7Cit9CisKKyNkZWZpbmUgTVgyN19JTlRSRUdfUlIJCSgxIDw8IDQpCisjZGVmaW5lIE1YMjdfSU5UUkVHX1RFRU4JKDEgPDwgOSkKKyNkZWZpbmUgTVgyN19JTlRSRUdfUlJFTgkoMSA8PCAxMykKKworI2RlZmluZSBNWDI3X0NTUElDVFJMX1BPTAkoMSA8PCA1KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX1BIQQkoMSA8PCA2KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX1NTUE9MCSgxIDw8IDgpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfWENICSgxIDw8IDkpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDEwKQorI2RlZmluZSBNWDI3X0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMSkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9EUl9TSElGVAkxNAorI2RlZmluZSBNWDI3X0NTUElDVFJMX0NTX1NISUZUCTE5CisKK3N0YXRpYyB2b2lkIG14MjdfaW50Y3RybChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCisJCXZhbCB8PSBNWDI3X0lOVFJFR19URUVOOworCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQorCQl2YWwgfD0gTVgyN19JTlRSRUdfUlJFTjsKKworCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Cit9CisKK3N0YXRpYyB2b2lkIG14MjdfdHJpZ2dlcihzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKwlyZWcgfD0gTVgyN19DU1BJQ1RSTF9YQ0g7CisJd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgbXgyN19jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKKwkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgaW50IHJlZyA9IE1YMjdfQ1NQSUNUUkxfRU5BQkxFIHwgTVgyN19DU1BJQ1RSTF9NQVNURVI7CisKKwlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMShteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAorCQlNWDI3X0NTUElDVFJMX0RSX1NISUZUOworCXJlZyB8PSBjb25maWctPmJwdyAtIDE7CisKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCisJCXJlZyB8PSBNWDI3X0NTUElDVFJMX1BIQTsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCisJCXJlZyB8PSBNWDI3X0NTUElDVFJMX1BPTDsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCisJCXJlZyB8PSBNWDI3X0NTUElDVFJMX1NTUE9MOworCWlmIChjb25maWctPmNzIDwgMCkKKwkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMjdfQ1NQSUNUUkxfQ1NfU0hJRlQ7CisKKwl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MjdfcnhfYXZhaWxhYmxlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCit7CisJcmV0dXJuIHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCkgJiBNWDI3X0lOVFJFR19SUjsKK30KKworI2RlZmluZSBNWDFfSU5UUkVHX1JSCQkoMSA8PCAzKQorI2RlZmluZSBNWDFfSU5UUkVHX1RFRU4JCSgxIDw8IDgpCisjZGVmaW5lIE1YMV9JTlRSRUdfUlJFTgkJKDEgPDwgMTEpCisKKyNkZWZpbmUgTVgxX0NTUElDVFJMX1BPTAkoMSA8PCA0KQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9YQ0gJKDEgPDwgOCkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX0VOQUJMRQkoMSA8PCA5KQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEwKQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfRFJfU0hJRlQJMTMKKworc3RhdGljIHZvaWQgbXgxX2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQorCQl2YWwgfD0gTVgxX0lOVFJFR19URUVOOworCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQorCQl2YWwgfD0gTVgxX0lOVFJFR19SUkVOOworCisJd3JpdGVsKHZhbCwgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJSU5UKTsKK30KKworc3RhdGljIHZvaWQgbXgxX3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJcmVnIHw9IE1YMV9DU1BJQ1RSTF9YQ0g7CisJd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgbXgxX2NvbmZpZyhzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLAorCQlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnID0gTVgxX0NTUElDVFJMX0VOQUJMRSB8IE1YMV9DU1BJQ1RSTF9NQVNURVI7CisKKwlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMihteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAorCQlNWDFfQ1NQSUNUUkxfRFJfU0hJRlQ7CisJcmVnIHw9IGNvbmZpZy0+YnB3IC0gMTsKKworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKKwkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QSEE7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQorCQlyZWcgfD0gTVgxX0NTUElDVFJMX1BPTDsKKworCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgxX3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQoreworCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgxX0lOVFJFR19SUjsKK30KKworc3RhdGljIHZvaWQgbXhjX3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXVuc2lnbmVkIGludCBjcyA9IDA7CisJaW50IGdwaW8gPSBteGNfc3BpLT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOworCXN0cnVjdCBteGNfc3BpX2NvbmZpZyBjb25maWc7CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpCisJCWNzID0gMTsKKworCWlmIChpc19hY3RpdmUgPT0gQklUQkFOR19DU19JTkFDVElWRSkgeworCQlpZiAoZ3BpbyA+PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWNzKTsKKwkJcmV0dXJuOworCX0KKworCWNvbmZpZy5icHcgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisJY29uZmlnLnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisJY29uZmlnLm1vZGUgPSBzcGktPm1vZGU7CisJY29uZmlnLmNzID0gbXhjX3NwaS0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKKworCW14Y19zcGktPmNvbmZpZyhteGNfc3BpLCAmY29uZmlnKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgKi8KKwlpZiAoY29uZmlnLmJwdyA8PSA4KSB7CisJCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTg7CisJCW14Y19zcGktPnR4ID0gbXhjX3NwaV9idWZfdHhfdTg7CisJfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDE2KSB7CisJCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTE2OworCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3UxNjsKKwl9IGVsc2UgaWYgKGNvbmZpZy5icHcgPD0gMzIpIHsKKwkJbXhjX3NwaS0+cnggPSBteGNfc3BpX2J1Zl9yeF91MzI7CisJCW14Y19zcGktPnR4ID0gbXhjX3NwaV9idWZfdHhfdTMyOworCX0gZWxzZQorCQlCVUcoKTsKKworCWlmIChncGlvID49IDApCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIGNzKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbXhjX3NwaV9wdXNoKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCit7CisJd2hpbGUgKG14Y19zcGktPnR4ZmlmbyA8IDgpIHsKKwkJaWYgKCFteGNfc3BpLT5jb3VudCkKKwkJCWJyZWFrOworCQlteGNfc3BpLT50eChteGNfc3BpKTsKKwkJbXhjX3NwaS0+dHhmaWZvKys7CisJfQorCisJbXhjX3NwaS0+dHJpZ2dlcihteGNfc3BpKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG14Y19zcGlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gZGV2X2lkOworCisJd2hpbGUgKG14Y19zcGktPnJ4X2F2YWlsYWJsZShteGNfc3BpKSkgeworCQlteGNfc3BpLT5yeChteGNfc3BpKTsKKwkJbXhjX3NwaS0+dHhmaWZvLS07CisJfQorCisJaWYgKG14Y19zcGktPmNvdW50KSB7CisJCW14Y19zcGlfcHVzaChteGNfc3BpKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmIChteGNfc3BpLT50eGZpZm8pIHsKKwkJLyogTm8gZGF0YSBsZWZ0IHRvIHB1c2gsIGJ1dCBzdGlsbCB3YWl0aW5nIGZvciByeCBkYXRhLAorCQkgKiBlbmFibGUgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSBpbnRlcnJ1cHQuCisJCSAqLworCQlteGNfc3BpLT5pbnRjdHJsKG14Y19zcGksIE1YQ19JTlRfUlIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCAwKTsKKwljb21wbGV0ZSgmbXhjX3NwaS0+eGZlcl9kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBteGNfc3BpX3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgY29uZmlnOworCisJY29uZmlnLmJwdyA9IHQgPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOworCWNvbmZpZy5zcGVlZF9oeiAgPSB0ID8gdC0+c3BlZWRfaHogOiBzcGktPm1heF9zcGVlZF9oejsKKwljb25maWcubW9kZSA9IHNwaS0+bW9kZTsKKworCW14Y19zcGktPmNvbmZpZyhteGNfc3BpLCAmY29uZmlnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14Y19zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcikKK3sKKwlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlteGNfc3BpLT50eF9idWYgPSB0cmFuc2Zlci0+dHhfYnVmOworCW14Y19zcGktPnJ4X2J1ZiA9IHRyYW5zZmVyLT5yeF9idWY7CisJbXhjX3NwaS0+Y291bnQgPSB0cmFuc2Zlci0+bGVuOworCW14Y19zcGktPnR4ZmlmbyA9IDA7CisKKwlpbml0X2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7CisKKwlteGNfc3BpX3B1c2gobXhjX3NwaSk7CisKKwlteGNfc3BpLT5pbnRjdHJsKG14Y19zcGksIE1YQ19JTlRfVEUpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmbXhjX3NwaS0+eGZlcl9kb25lKTsKKworCXJldHVybiB0cmFuc2Zlci0+bGVuOworfQorCitzdGF0aWMgaW50IG14Y19zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpZiAoIXNwaS0+Yml0c19wZXJfd29yZCkKKwkJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKworCXByX2RlYnVnKCIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCisJCSBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5tYXhfc3BlZWRfaHopOworCisJbXhjX3NwaV9jaGlwc2VsZWN0KHNwaSwgQklUQkFOR19DU19JTkFDVElWRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXhjX3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y19zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKm14Y19wbGF0Zm9ybV9pbmZvOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaSwgcmV0OworCisJbXhjX3BsYXRmb3JtX2luZm8gPSAoc3RydWN0IHNwaV9pbXhfbWFzdGVyICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFteGNfcGxhdGZvcm1faW5mbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgdGhlIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXhjX3NwaV9kYXRhKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBteGNfcGxhdGZvcm1faW5mby0+bnVtX2NoaXBzZWxlY3Q7CisKKwlteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCW14Y19zcGktPmJpdGJhbmcubWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKKwlteGNfc3BpLT5jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPmNoaXBzZWxlY3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKSB7CisJCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldIDwgMCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBncGlvX3JlcXVlc3QobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSwgRFJJVkVSX05BTUUpOworCQlpZiAocmV0KSB7CisJCQlpLS07CisJCQl3aGlsZSAoaSA+IDApCisJCQkJaWYgKG14Y19zcGktPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCQkJZ3Bpb19mcmVlKG14Y19zcGktPmNoaXBzZWxlY3RbaS0tXSk7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgY3MgZ3Bpb3MiKTsKKwkJCWdvdG8gb3V0X21hc3Rlcl9wdXQ7CisJCX0KKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KG14Y19zcGktPmNoaXBzZWxlY3RbaV0sIDEpOworCX0KKworCW14Y19zcGktPmJpdGJhbmcuY2hpcHNlbGVjdCA9IG14Y19zcGlfY2hpcHNlbGVjdDsKKwlteGNfc3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gbXhjX3NwaV9zZXR1cHhmZXI7CisJbXhjX3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBteGNfc3BpX3RyYW5zZmVyOworCW14Y19zcGktPmJpdGJhbmcubWFzdGVyLT5zZXR1cCA9IG14Y19zcGlfc2V0dXA7CisJbXhjX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmNsZWFudXAgPSBteGNfc3BpX2NsZWFudXA7CisKKwlpbml0X2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBwbGF0Zm9ybSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2dwaW9fZnJlZTsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X2dwaW9fZnJlZTsKKwl9CisKKwlteGNfc3BpLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghbXhjX3NwaS0+YmFzZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWxlYXNlX21lbTsKKwl9CisKKwlteGNfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghbXhjX3NwaS0+aXJxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEobXhjX3NwaS0+aXJxLCBteGNfc3BpX2lzciwgMCwgRFJJVkVSX05BTUUsIG14Y19zcGkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGlycSVkOiAlZFxuIiwgbXhjX3NwaS0+aXJxLCByZXQpOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKworCWlmIChjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpIHsKKwkJbXhjX3NwaS0+aW50Y3RybCA9IG14MzFfaW50Y3RybDsKKwkJbXhjX3NwaS0+Y29uZmlnID0gbXgzMV9jb25maWc7CisJCW14Y19zcGktPnRyaWdnZXIgPSBteDMxX3RyaWdnZXI7CisJCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MzFfcnhfYXZhaWxhYmxlOworCX0gZWxzZSAgaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MjEoKSkgeworCQlteGNfc3BpLT5pbnRjdHJsID0gbXgyN19pbnRjdHJsOworCQlteGNfc3BpLT5jb25maWcgPSBteDI3X2NvbmZpZzsKKwkJbXhjX3NwaS0+dHJpZ2dlciA9IG14MjdfdHJpZ2dlcjsKKwkJbXhjX3NwaS0+cnhfYXZhaWxhYmxlID0gbXgyN19yeF9hdmFpbGFibGU7CisJfSBlbHNlIGlmIChjcHVfaXNfbXgxKCkpIHsKKwkJbXhjX3NwaS0+aW50Y3RybCA9IG14MV9pbnRjdHJsOworCQlteGNfc3BpLT5jb25maWcgPSBteDFfY29uZmlnOworCQlteGNfc3BpLT50cmlnZ2VyID0gbXgxX3RyaWdnZXI7CisJCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MV9yeF9hdmFpbGFibGU7CisJfSBlbHNlCisJCUJVRygpOworCisJbXhjX3NwaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKG14Y19zcGktPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIobXhjX3NwaS0+Y2xrKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJY2xrX2VuYWJsZShteGNfc3BpLT5jbGspOworCW14Y19zcGktPnNwaV9jbGsgPSBjbGtfZ2V0X3JhdGUobXhjX3NwaS0+Y2xrKTsKKworCWlmICghY3B1X2lzX214MzEoKSB8fCAhY3B1X2lzX214MzUoKSkKKwkJd3JpdGVsKDEsIG14Y19zcGktPmJhc2UgKyBNWENfUkVTRVQpOworCisJbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCAwKTsKKworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZteGNfc3BpLT5iaXRiYW5nKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImJpdGJhbmcgc3RhcnQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2Nsa19wdXQ7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlZFxuIik7CisKKwlyZXR1cm4gcmV0OworCitvdXRfY2xrX3B1dDoKKwljbGtfZGlzYWJsZShteGNfc3BpLT5jbGspOworCWNsa19wdXQobXhjX3NwaS0+Y2xrKTsKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShteGNfc3BpLT5pcnEsIG14Y19zcGkpOworb3V0X2lvdW5tYXA6CisJaW91bm1hcChteGNfc3BpLT5iYXNlKTsKK291dF9yZWxlYXNlX21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK291dF9ncGlvX2ZyZWU6CisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKKwkJaWYgKG14Y19zcGktPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCWdwaW9fZnJlZShteGNfc3BpLT5jaGlwc2VsZWN0W2ldKTsKK291dF9tYXN0ZXJfcHV0OgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJa2ZyZWUobWFzdGVyKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBteGNfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlpbnQgaTsKKworCXNwaV9iaXRiYW5nX3N0b3AoJm14Y19zcGktPmJpdGJhbmcpOworCisJd3JpdGVsKDAsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCWNsa19kaXNhYmxlKG14Y19zcGktPmNsayk7CisJY2xrX3B1dChteGNfc3BpLT5jbGspOworCWZyZWVfaXJxKG14Y19zcGktPmlycSwgbXhjX3NwaSk7CisJaW91bm1hcChteGNfc3BpLT5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCisJCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCisJCQlncGlvX2ZyZWUobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSk7CisKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSBteGNfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChteGNfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBteGNfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZteGNfc3BpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBteGNfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhjX3NwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChteGNfc3BpX2luaXQpOworbW9kdWxlX2V4aXQobXhjX3NwaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEkgTWFzdGVyIENvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwppbmRleCA5YjgwYWQzLi5iYTFhODcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKQEAgLTQxLDYgKzQxLDkgQEAKIAogI2RlZmluZSBPTUFQMl9NQ1NQSV9NQVhfRlJFUQkJNDgwMDAwMDAKIAorLyogT01BUDIgaGFzIDMgU1BJIGNvbnRyb2xsZXJzLCB3aGlsZSBPTUFQMyBoYXMgNCAqLworI2RlZmluZSBPTUFQMl9NQ1NQSV9NQVhfQ1RSTCAJCTQKKwogI2RlZmluZSBPTUFQMl9NQ1NQSV9SRVZJU0lPTgkJMHgwMAogI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUcJCTB4MTAKICNkZWZpbmUgT01BUDJfTUNTUElfU1lTU1RBVFVTCQkweDE0CkBAIC01OSw0MCArNjIsNDAgQEAKIAogLyogcGVyLXJlZ2lzdGVyIGJpdG1hc2tzOiAqLwogCi0jZGVmaW5lIE9NQVAyX01DU1BJX1NZU0NPTkZJR19TTUFSVElETEUJKDIgPDwgMykKLSNkZWZpbmUgT01BUDJfTUNTUElfU1lTQ09ORklHX0VOQVdBS0VVUAkoMSA8PCAyKQotI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfQVVUT0lETEUJKDEgPDwgMCkKLSNkZWZpbmUgT01BUDJfTUNTUElfU1lTQ09ORklHX1NPRlRSRVNFVAkoMSA8PCAxKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfU01BUlRJRExFCUJJVCg0KQorI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfRU5BV0FLRVVQCUJJVCgyKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNDT05GSUdfQVVUT0lETEUJQklUKDApCisjZGVmaW5lIE9NQVAyX01DU1BJX1NZU0NPTkZJR19TT0ZUUkVTRVQJQklUKDEpCiAKLSNkZWZpbmUgT01BUDJfTUNTUElfU1lTU1RBVFVTX1JFU0VURE9ORQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9TWVNTVEFUVVNfUkVTRVRET05FCUJJVCgwKQogCi0jZGVmaW5lIE9NQVAyX01DU1BJX01PRFVMQ1RSTF9TSU5HTEUJKDEgPDwgMCkKLSNkZWZpbmUgT01BUDJfTUNTUElfTU9EVUxDVFJMX01TCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAyX01DU1BJX01PRFVMQ1RSTF9TVEVTVAkoMSA8PCAzKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfU0lOR0xFCUJJVCgwKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfTVMJQklUKDIpCisjZGVmaW5lIE9NQVAyX01DU1BJX01PRFVMQ1RSTF9TVEVTVAlCSVQoMykKIAotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfUEhBCQkoMSA8PCAwKQotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfUE9MCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfUEhBCQlCSVQoMCkKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1BPTAkJQklUKDEpCiAjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9DTEtEX01BU0sJKDB4MGYgPDwgMikKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0VQT0wJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9FUE9MCQlCSVQoNikKICNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1dMX01BU0sJKDB4MWYgPDwgNykKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX1RSTV9SWF9PTkxZCSgweDAxIDw8IDEyKQotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfVFJNX1RYX09OTFkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9UUk1fUlhfT05MWQlCSVQoMTIpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9UUk1fVFhfT05MWQlCSVQoMTMpCiAjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9UUk1fTUFTSwkoMHgwMyA8PCAxMikKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0RNQVcJCSgxIDw8IDE0KQotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfRE1BUgkJKDEgPDwgMTUpCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9EUEUwCQkoMSA8PCAxNikKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0RQRTEJCSgxIDw8IDE3KQotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfSVMJCSgxIDw8IDE4KQotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENPTkZfVFVSQk8JKDEgPDwgMTkpCi0jZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9GT1JDRQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0RNQVcJCUJJVCgxNCkKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0RNQVIJCUJJVCgxNSkKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0RQRTAJCUJJVCgxNikKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0RQRTEJCUJJVCgxNykKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hDT05GX0lTCQlCSVQoMTgpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9UVVJCTwlCSVQoMTkpCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ09ORl9GT1JDRQlCSVQoMjApCiAKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hTVEFUX1JYUwkJKDEgPDwgMCkKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hTVEFUX1RYUwkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDJfTUNTUElfQ0hTVEFUX0VPVAkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDJfTUNTUElfQ0hTVEFUX1JYUwkJQklUKDApCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIU1RBVF9UWFMJCUJJVCgxKQorI2RlZmluZSBPTUFQMl9NQ1NQSV9DSFNUQVRfRU9UCQlCSVQoMikKIAotI2RlZmluZSBPTUFQMl9NQ1NQSV9DSENUUkxfRU4JCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyX01DU1BJX0NIQ1RSTF9FTgkJQklUKDApCiAKLSNkZWZpbmUgT01BUDJfTUNTUElfV0FLRVVQRU5BQkxFX1dLRU4JKDEgPDwgMCkKKyNkZWZpbmUgT01BUDJfTUNTUElfV0FLRVVQRU5BQkxFX1dLRU4JQklUKDApCiAKIC8qIFdlIGhhdmUgMiBETUEgY2hhbm5lbHMgcGVyIENTLCBvbmUgZm9yIFJYIGFuZCBvbmUgZm9yIFRYICovCiBzdHJ1Y3Qgb21hcDJfbWNzcGlfZG1hIHsKQEAgLTEzMSw4ICsxMzQsMjMgQEAKIAl2b2lkIF9faW9tZW0JCSpiYXNlOwogCXVuc2lnbmVkIGxvbmcJCXBoeXM7CiAJaW50CQkJd29yZF9sZW47CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCS8qIENvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBzaGFkb3cgcmVnaXN0ZXIgKi8KKwl1MzIJCQljaGNvbmYwOwogfTsKIAorLyogdXNlZCBmb3IgY29udGV4dCBzYXZlIGFuZCByZXN0b3JlLCBzdHJ1Y3R1cmUgbWVtYmVycyB0byBiZSB1cGRhdGVkIHdoZW5ldmVyCisgKiBjb3JyZXNwb25kaW5nIHJlZ2lzdGVycyBhcmUgbW9kaWZpZWQuCisgKi8KK3N0cnVjdCBvbWFwMl9tY3NwaV9yZWdzIHsKKwl1MzIgc3lzY29uZmlnOworCXUzMiBtb2R1bGN0cmw7CisJdTMyIHdha2V1cGVuYWJsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNzOworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9yZWdzIG9tYXAyX21jc3BpX2N0eFtPTUFQMl9NQ1NQSV9NQVhfQ1RSTF07CisKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqb21hcDJfbWNzcGlfd3E7CiAKICNkZWZpbmUgTU9EX1JFR19CSVQodmFsLCBtYXNrLCBzZXQpIGRvIHsgXApAQCAtMTcyLDEyICsxOTAsMjcgQEAKIAlyZXR1cm4gX19yYXdfcmVhZGwoY3MtPmJhc2UgKyBpZHgpOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBtY3NwaV9jYWNoZWRfY2hjb25mMChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBvbWFwMl9tY3NwaV9jcyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisKKwlyZXR1cm4gY3MtPmNoY29uZjA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY3NwaV93cml0ZV9jaGNvbmYwKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHUzMiB2YWwpCit7CisJc3RydWN0IG9tYXAyX21jc3BpX2NzICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKworCWNzLT5jaGNvbmYwID0gdmFsOworCW1jc3BpX3dyaXRlX2NzX3JlZyhzcGksIE9NQVAyX01DU1BJX0NIQ09ORjAsIHZhbCk7Cit9CisKIHN0YXRpYyB2b2lkIG9tYXAyX21jc3BpX3NldF9kbWFfcmVxKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCiAJCWludCBpc19yZWFkLCBpbnQgZW5hYmxlKQogewogCXUzMiBsLCBydzsKIAotCWwgPSBtY3NwaV9yZWFkX2NzX3JlZyhzcGksIE9NQVAyX01DU1BJX0NIQ09ORjApOworCWwgPSBtY3NwaV9jYWNoZWRfY2hjb25mMChzcGkpOwogCiAJaWYgKGlzX3JlYWQpIC8qIDEgaXMgcmVhZCwgMCB3cml0ZSAqLwogCQlydyA9IE9NQVAyX01DU1BJX0NIQ09ORl9ETUFSOwpAQCAtMTg1LDcgKzIxOCw3IEBACiAJCXJ3ID0gT01BUDJfTUNTUElfQ0hDT05GX0RNQVc7CiAKIAlNT0RfUkVHX0JJVChsLCBydywgZW5hYmxlKTsKLQltY3NwaV93cml0ZV9jc19yZWcoc3BpLCBPTUFQMl9NQ1NQSV9DSENPTkYwLCBsKTsKKwltY3NwaV93cml0ZV9jaGNvbmYwKHNwaSwgbCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXAyX21jc3BpX3NldF9lbmFibGUoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGVuYWJsZSkKQEAgLTIwMCw5ICsyMzMsOSBAQAogewogCXUzMiBsOwogCi0JbCA9IG1jc3BpX3JlYWRfY3NfcmVnKHNwaSwgT01BUDJfTUNTUElfQ0hDT05GMCk7CisJbCA9IG1jc3BpX2NhY2hlZF9jaGNvbmYwKHNwaSk7CiAJTU9EX1JFR19CSVQobCwgT01BUDJfTUNTUElfQ0hDT05GX0ZPUkNFLCBjc19hY3RpdmUpOwotCW1jc3BpX3dyaXRlX2NzX3JlZyhzcGksIE9NQVAyX01DU1BJX0NIQ09ORjAsIGwpOworCW1jc3BpX3dyaXRlX2NoY29uZjAoc3BpLCBsKTsKIH0KIAogc3RhdGljIHZvaWQgb21hcDJfbWNzcGlfc2V0X21hc3Rlcl9tb2RlKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCkBAIC0yMTcsNiArMjUwLDQ2IEBACiAJTU9EX1JFR19CSVQobCwgT01BUDJfTUNTUElfTU9EVUxDVFJMX01TLCAwKTsKIAlNT0RfUkVHX0JJVChsLCBPTUFQMl9NQ1NQSV9NT0RVTENUUkxfU0lOR0xFLCAxKTsKIAltY3NwaV93cml0ZV9yZWcobWFzdGVyLCBPTUFQMl9NQ1NQSV9NT0RVTENUUkwsIGwpOworCisJb21hcDJfbWNzcGlfY3R4W21hc3Rlci0+YnVzX251bSAtIDFdLm1vZHVsY3RybCA9IGw7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX21jc3BpX3Jlc3RvcmVfY3R4KHN0cnVjdCBvbWFwMl9tY3NwaSAqbWNzcGkpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKnNwaV9jbnRybDsKKwlzdHJ1Y3Qgb21hcDJfbWNzcGlfY3MgKmNzOworCXNwaV9jbnRybCA9IG1jc3BpLT5tYXN0ZXI7CisKKwkvKiBNY1NQSTogY29udGV4dCByZXN0b3JlICovCisJbWNzcGlfd3JpdGVfcmVnKHNwaV9jbnRybCwgT01BUDJfTUNTUElfTU9EVUxDVFJMLAorCQkJb21hcDJfbWNzcGlfY3R4W3NwaV9jbnRybC0+YnVzX251bSAtIDFdLm1vZHVsY3RybCk7CisKKwltY3NwaV93cml0ZV9yZWcoc3BpX2NudHJsLCBPTUFQMl9NQ1NQSV9TWVNDT05GSUcsCisJCQlvbWFwMl9tY3NwaV9jdHhbc3BpX2NudHJsLT5idXNfbnVtIC0gMV0uc3lzY29uZmlnKTsKKworCW1jc3BpX3dyaXRlX3JlZyhzcGlfY250cmwsIE9NQVAyX01DU1BJX1dBS0VVUEVOQUJMRSwKKwkJCW9tYXAyX21jc3BpX2N0eFtzcGlfY250cmwtPmJ1c19udW0gLSAxXS53YWtldXBlbmFibGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcywgJm9tYXAyX21jc3BpX2N0eFtzcGlfY250cmwtPmJ1c19udW0gLSAxXS5jcywKKwkJCW5vZGUpCisJCV9fcmF3X3dyaXRlbChjcy0+Y2hjb25mMCwgY3MtPmJhc2UgKyBPTUFQMl9NQ1NQSV9DSENPTkYwKTsKK30KK3N0YXRpYyB2b2lkIG9tYXAyX21jc3BpX2Rpc2FibGVfY2xvY2tzKHN0cnVjdCBvbWFwMl9tY3NwaSAqbWNzcGkpCit7CisJY2xrX2Rpc2FibGUobWNzcGktPmljayk7CisJY2xrX2Rpc2FibGUobWNzcGktPmZjayk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfbWNzcGlfZW5hYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcDJfbWNzcGkgKm1jc3BpKQoreworCWlmIChjbGtfZW5hYmxlKG1jc3BpLT5pY2spKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoY2xrX2VuYWJsZShtY3NwaS0+ZmNrKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvbWFwMl9tY3NwaV9yZXN0b3JlX2N0eChtY3NwaSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkCkBAIC0zNTcsNyArNDMwLDcgQEAKIAljID0gY291bnQ7CiAJd29yZF9sZW4gPSBjcy0+d29yZF9sZW47CiAKLQlsID0gbWNzcGlfcmVhZF9jc19yZWcoc3BpLCBPTUFQMl9NQ1NQSV9DSENPTkYwKTsKKwlsID0gbWNzcGlfY2FjaGVkX2NoY29uZjAoc3BpKTsKIAlsICY9IH5PTUFQMl9NQ1NQSV9DSENPTkZfVFJNX01BU0s7CiAKIAkvKiBXZSBzdG9yZSB0aGUgcHJlLWNhbGN1bGF0ZWQgcmVnaXN0ZXIgYWRkcmVzc2VzIG9uIHN0YWNrIHRvIHNwZWVkCkBAIC0zOTcsOCArNDcwLDcgQEAKIAkJCQkgKiBtb3JlIHdvcmQgaS9vOiBzd2l0Y2ggdG8gcngrdHgKIAkJCQkgKi8KIAkJCQlpZiAoYyA9PSAwICYmIHR4ID09IE5VTEwpCi0JCQkJCW1jc3BpX3dyaXRlX2NzX3JlZyhzcGksCi0JCQkJCQkJT01BUDJfTUNTUElfQ0hDT05GMCwgbCk7CisJCQkJCW1jc3BpX3dyaXRlX2NoY29uZjAoc3BpLCBsKTsKIAkJCQkqcngrKyA9IF9fcmF3X3JlYWRsKHJ4X3JlZyk7CiAjaWZkZWYgVkVSQk9TRQogCQkJCWRldl9kYmcoJnNwaS0+ZGV2LCAicmVhZC0lZCAlMDJ4XG4iLApAQCAtNDM2LDggKzUwOCw3IEBACiAJCQkJICogbW9yZSB3b3JkIGkvbzogc3dpdGNoIHRvIHJ4K3R4CiAJCQkJICovCiAJCQkJaWYgKGMgPT0gMCAmJiB0eCA9PSBOVUxMKQotCQkJCQltY3NwaV93cml0ZV9jc19yZWcoc3BpLAotCQkJCQkJCU9NQVAyX01DU1BJX0NIQ09ORjAsIGwpOworCQkJCQltY3NwaV93cml0ZV9jaGNvbmYwKHNwaSwgbCk7CiAJCQkJKnJ4KysgPSBfX3Jhd19yZWFkbChyeF9yZWcpOwogI2lmZGVmIFZFUkJPU0UKIAkJCQlkZXZfZGJnKCZzcGktPmRldiwgInJlYWQtJWQgJTA0eFxuIiwKQEAgLTQ3NSw4ICs1NDYsNyBAQAogCQkJCSAqIG1vcmUgd29yZCBpL286IHN3aXRjaCB0byByeCt0eAogCQkJCSAqLwogCQkJCWlmIChjID09IDAgJiYgdHggPT0gTlVMTCkKLQkJCQkJbWNzcGlfd3JpdGVfY3NfcmVnKHNwaSwKLQkJCQkJCQlPTUFQMl9NQ1NQSV9DSENPTkYwLCBsKTsKKwkJCQkJbWNzcGlfd3JpdGVfY2hjb25mMChzcGksIGwpOwogCQkJCSpyeCsrID0gX19yYXdfcmVhZGwocnhfcmVnKTsKICNpZmRlZiBWRVJCT1NFCiAJCQkJZGV2X2RiZygmc3BpLT5kZXYsICJyZWFkLSVkICUwNHhcbiIsCkBAIC01MDUsMTAgKzU3NSwxMiBAQAogewogCXN0cnVjdCBvbWFwMl9tY3NwaV9jcyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CiAJc3RydWN0IG9tYXAyX21jc3BpICptY3NwaTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqc3BpX2NudHJsOwogCXUzMiBsID0gMCwgZGl2ID0gMDsKIAl1OCB3b3JkX2xlbiA9IHNwaS0+Yml0c19wZXJfd29yZDsKIAogCW1jc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc3BpX2NudHJsID0gbWNzcGktPm1hc3RlcjsKIAogCWlmICh0ICE9IE5VTEwgJiYgdC0+Yml0c19wZXJfd29yZCkKIAkJd29yZF9sZW4gPSB0LT5iaXRzX3Blcl93b3JkOwpAQCAtNTIyLDcgKzU5NCw3IEBACiAJfSBlbHNlCiAJCWRpdiA9IDE1OwogCi0JbCA9IG1jc3BpX3JlYWRfY3NfcmVnKHNwaSwgT01BUDJfTUNTUElfQ0hDT05GMCk7CisJbCA9IG1jc3BpX2NhY2hlZF9jaGNvbmYwKHNwaSk7CiAKIAkvKiBzdGFuZGFyZCA0LXdpcmUgbWFzdGVyIG1vZGU6ICBTQ0ssIE1PU0kvb3V0LCBNSVNPL2luLCBuQ1MKIAkgKiBSRVZJU0lUOiB0aGlzIGNvbnRyb2xsZXIgY291bGQgc3VwcG9ydCBTUElfM1dJUkUgbW9kZS4KQEAgLTU1NCw3ICs2MjYsNyBAQAogCWVsc2UKIAkJbCAmPSB+T01BUDJfTUNTUElfQ0hDT05GX1BIQTsKIAotCW1jc3BpX3dyaXRlX2NzX3JlZyhzcGksIE9NQVAyX01DU1BJX0NIQ09ORjAsIGwpOworCW1jc3BpX3dyaXRlX2NoY29uZjAoc3BpLCBsKTsKIAogCWRldl9kYmcoJnNwaS0+ZGV2LCAic2V0dXA6IHNwZWVkICVkLCBzYW1wbGUgJXMgZWRnZSwgY2xrICVzXG4iLAogCQkJT01BUDJfTUNTUElfTUFYX0ZSRVEgLyAoMSA8PCBkaXYpLApAQCAtNjQ3LDcgKzcxOSwxMSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWNzLT5iYXNlID0gbWNzcGktPmJhc2UgKyBzcGktPmNoaXBfc2VsZWN0ICogMHgxNDsKIAkJY3MtPnBoeXMgPSBtY3NwaS0+cGh5cyArIHNwaS0+Y2hpcF9zZWxlY3QgKiAweDE0OworCQljcy0+Y2hjb25mMCA9IDA7CiAJCXNwaS0+Y29udHJvbGxlcl9zdGF0ZSA9IGNzOworCQkvKiBMaW5rIHRoaXMgdG8gY29udGV4dCBzYXZlIGxpc3QgKi8KKwkJbGlzdF9hZGRfdGFpbCgmY3MtPm5vZGUsCisJCQkmb21hcDJfbWNzcGlfY3R4W21jc3BpLT5tYXN0ZXItPmJ1c19udW0gLSAxXS5jcyk7CiAJfQogCiAJaWYgKG1jc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwgPT0gLTEKQEAgLTY1NywxMSArNzMzLDExIEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWNsa19lbmFibGUobWNzcGktPmljayk7Ci0JY2xrX2VuYWJsZShtY3NwaS0+ZmNrKTsKKwlpZiAob21hcDJfbWNzcGlfZW5hYmxlX2Nsb2NrcyhtY3NwaSkpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0ID0gb21hcDJfbWNzcGlfc2V0dXBfdHJhbnNmZXIoc3BpLCBOVUxMKTsKLQljbGtfZGlzYWJsZShtY3NwaS0+ZmNrKTsKLQljbGtfZGlzYWJsZShtY3NwaS0+aWNrKTsKKwlvbWFwMl9tY3NwaV9kaXNhYmxlX2Nsb2NrcyhtY3NwaSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjcwLDEwICs3NDYsMTUgQEAKIHsKIAlzdHJ1Y3Qgb21hcDJfbWNzcGkJKm1jc3BpOwogCXN0cnVjdCBvbWFwMl9tY3NwaV9kbWEJKm1jc3BpX2RtYTsKKwlzdHJ1Y3Qgb21hcDJfbWNzcGlfY3MJKmNzOwogCiAJbWNzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAltY3NwaV9kbWEgPSAmbWNzcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKIAorCS8qIFVubGluayBjb250cm9sbGVyIHN0YXRlIGZyb20gY29udGV4dCBzYXZlIGxpc3QgKi8KKwljcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKwlsaXN0X2RlbCgmY3MtPm5vZGUpOworCiAJa2ZyZWUoc3BpLT5jb250cm9sbGVyX3N0YXRlKTsKIAogCWlmIChtY3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsICE9IC0xKSB7CkBAIC02OTMsOCArNzc0LDggQEAKIAltY3NwaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb21hcDJfbWNzcGksIHdvcmspOwogCXNwaW5fbG9ja19pcnEoJm1jc3BpLT5sb2NrKTsKIAotCWNsa19lbmFibGUobWNzcGktPmljayk7Ci0JY2xrX2VuYWJsZShtY3NwaS0+ZmNrKTsKKwlpZiAob21hcDJfbWNzcGlfZW5hYmxlX2Nsb2NrcyhtY3NwaSkpCisJCWdvdG8gb3V0OwogCiAJLyogV2Ugb25seSBlbmFibGUgb25lIGNoYW5uZWwgYXQgYSB0aW1lIC0tIHRoZSBvbmUgd2hvc2UgbWVzc2FnZSBpcwogCSAqIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSAtLSBhbHRob3VnaCB0aGlzIGNvbnRyb2xsZXIgd291bGQgZ2xhZGx5CkBAIC03NDEsMTMgKzgyMiwxMyBAQAogCQkJCWNzX2FjdGl2ZSA9IDE7CiAJCQl9CiAKLQkJCWNoY29uZiA9IG1jc3BpX3JlYWRfY3NfcmVnKHNwaSwgT01BUDJfTUNTUElfQ0hDT05GMCk7CisJCQljaGNvbmYgPSBtY3NwaV9jYWNoZWRfY2hjb25mMChzcGkpOwogCQkJY2hjb25mICY9IH5PTUFQMl9NQ1NQSV9DSENPTkZfVFJNX01BU0s7CiAJCQlpZiAodC0+dHhfYnVmID09IE5VTEwpCiAJCQkJY2hjb25mIHw9IE9NQVAyX01DU1BJX0NIQ09ORl9UUk1fUlhfT05MWTsKIAkJCWVsc2UgaWYgKHQtPnJ4X2J1ZiA9PSBOVUxMKQogCQkJCWNoY29uZiB8PSBPTUFQMl9NQ1NQSV9DSENPTkZfVFJNX1RYX09OTFk7Ci0JCQltY3NwaV93cml0ZV9jc19yZWcoc3BpLCBPTUFQMl9NQ1NQSV9DSENPTkYwLCBjaGNvbmYpOworCQkJbWNzcGlfd3JpdGVfY2hjb25mMChzcGksIGNoY29uZik7CiAKIAkJCWlmICh0LT5sZW4pIHsKIAkJCQl1bnNpZ25lZAljb3VudDsKQEAgLTc5Niw5ICs4NzcsOSBAQAogCQlzcGluX2xvY2tfaXJxKCZtY3NwaS0+bG9jayk7CiAJfQogCi0JY2xrX2Rpc2FibGUobWNzcGktPmZjayk7Ci0JY2xrX2Rpc2FibGUobWNzcGktPmljayk7CisJb21hcDJfbWNzcGlfZGlzYWJsZV9jbG9ja3MobWNzcGkpOwogCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZtY3NwaS0+bG9jayk7CiB9CiAKQEAgLTg4NSw4ICs5NjYsOCBAQAogCXN0cnVjdCBzcGlfbWFzdGVyCSptYXN0ZXIgPSBtY3NwaS0+bWFzdGVyOwogCXUzMgkJCXRtcDsKIAotCWNsa19lbmFibGUobWNzcGktPmljayk7Ci0JY2xrX2VuYWJsZShtY3NwaS0+ZmNrKTsKKwlpZiAob21hcDJfbWNzcGlfZW5hYmxlX2Nsb2NrcyhtY3NwaSkpCisJCXJldHVybiAtMTsKIAogCW1jc3BpX3dyaXRlX3JlZyhtYXN0ZXIsIE9NQVAyX01DU1BJX1NZU0NPTkZJRywKIAkJCU9NQVAyX01DU1BJX1NZU0NPTkZJR19TT0ZUUkVTRVQpOwpAQCAtODk0LDE4ICs5NzUsMTggQEAKIAkJdG1wID0gbWNzcGlfcmVhZF9yZWcobWFzdGVyLCBPTUFQMl9NQ1NQSV9TWVNTVEFUVVMpOwogCX0gd2hpbGUgKCEodG1wICYgT01BUDJfTUNTUElfU1lTU1RBVFVTX1JFU0VURE9ORSkpOwogCi0JbWNzcGlfd3JpdGVfcmVnKG1hc3RlciwgT01BUDJfTUNTUElfU1lTQ09ORklHLAotCQkJT01BUDJfTUNTUElfU1lTQ09ORklHX0FVVE9JRExFIHwKLQkJCU9NQVAyX01DU1BJX1NZU0NPTkZJR19FTkFXQUtFVVAgfAotCQkJT01BUDJfTUNTUElfU1lTQ09ORklHX1NNQVJUSURMRSk7CisJdG1wID0gT01BUDJfTUNTUElfU1lTQ09ORklHX0FVVE9JRExFIHwKKwkJT01BUDJfTUNTUElfU1lTQ09ORklHX0VOQVdBS0VVUCB8CisJCU9NQVAyX01DU1BJX1NZU0NPTkZJR19TTUFSVElETEU7CisJbWNzcGlfd3JpdGVfcmVnKG1hc3RlciwgT01BUDJfTUNTUElfU1lTQ09ORklHLCB0bXApOworCW9tYXAyX21jc3BpX2N0eFttYXN0ZXItPmJ1c19udW0gLSAxXS5zeXNjb25maWcgPSB0bXA7CiAKLQltY3NwaV93cml0ZV9yZWcobWFzdGVyLCBPTUFQMl9NQ1NQSV9XQUtFVVBFTkFCTEUsCi0JCQlPTUFQMl9NQ1NQSV9XQUtFVVBFTkFCTEVfV0tFTik7CisJdG1wID0gT01BUDJfTUNTUElfV0FLRVVQRU5BQkxFX1dLRU47CisJbWNzcGlfd3JpdGVfcmVnKG1hc3RlciwgT01BUDJfTUNTUElfV0FLRVVQRU5BQkxFLCB0bXApOworCW9tYXAyX21jc3BpX2N0eFttYXN0ZXItPmJ1c19udW0gLSAxXS53YWtldXBlbmFibGUgPSB0bXA7CiAKIAlvbWFwMl9tY3NwaV9zZXRfbWFzdGVyX21vZGUobWFzdGVyKTsKLQotCWNsa19kaXNhYmxlKG1jc3BpLT5mY2spOwotCWNsa19kaXNhYmxlKG1jc3BpLT5pY2spOworCW9tYXAyX21jc3BpX2Rpc2FibGVfY2xvY2tzKG1jc3BpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTMzLDcgKzEwMTQsOCBAQAogCU9NQVAyNFhYX0RNQV9TUEkyX1RYMSwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpM19yeGRtYV9pZFtdID0gewogCU9NQVAyNFhYX0RNQV9TUEkzX1JYMCwKIAlPTUFQMjRYWF9ETUFfU1BJM19SWDEsCkBAIC05NDUsNyArMTAyNyw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiBzdGF0aWMgdTggX19pbml0ZGF0YSBzcGk0X3J4ZG1hX2lkW10gPSB7CiAJT01BUDM0WFhfRE1BX1NQSTRfUlgwLAogfTsKQEAgLTk3NSwxNCArMTA1NywxNSBAQAogCQl0eGRtYV9pZCA9IHNwaTJfdHhkbWFfaWQ7CiAJCW51bV9jaGlwc2VsZWN0ID0gMjsKIAkJYnJlYWs7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIAljYXNlIDM6CiAJCXJ4ZG1hX2lkID0gc3BpM19yeGRtYV9pZDsKIAkJdHhkbWFfaWQgPSBzcGkzX3R4ZG1hX2lkOwogCQludW1fY2hpcHNlbGVjdCA9IDI7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogCWNhc2UgNDoKIAkJcnhkbWFfaWQgPSBzcGk0X3J4ZG1hX2lkOwogCQl0eGRtYV9pZCA9IHNwaTRfdHhkbWFfaWQ7CkBAIC0xMDM4LDYgKzExMjEsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJm1jc3BpLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbWNzcGktPm1zZ19xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJm9tYXAyX21jc3BpX2N0eFttYXN0ZXItPmJ1c19udW0gLSAxXS5jcyk7CiAKIAltY3NwaS0+aWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7CiAJaWYgKElTX0VSUihtY3NwaS0+aWNrKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCmluZGV4IDg5ODBhNTYuLmU3NWJhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXVuc2lnbmVkCWJpdHMgPSB1c3QtPmJpdHNfcGVyX3dvcmQ7CiAJdW5zaWduZWQJYnl0ZXM7CiAJdTE2CQl2YWwsIHc7Ci0JaW50CQlzdGF0dXMgPSAwOzsKKwlpbnQJCXN0YXR1cyA9IDA7CiAKIAlpZiAoIXQtPnR4X2J1ZiAmJiAhdC0+cnhfYnVmKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBkOTQ5ZGJmLi4zMWRkNTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC0xNzI5LDcgKzE3MjksNyBAQAogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmRyaXZlciwgcHhhMnh4X3NwaV9wcm9iZSk7CiB9Ci1tb2R1bGVfaW5pdChweGEyeHhfc3BpX2luaXQpOworc3Vic3lzX2luaXRjYWxsKHB4YTJ4eF9zcGlfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBweGEyeHhfc3BpX2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggNzA4NDVjYy4uYjc2ZjI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogCkBAIC01OSw5ICs2MCwzMiBAQAogICogYW5kIHRoZSBzeXNmcyB2ZXJzaW9uIG1ha2VzIGNvbGRwbHVnIHdvcmsgdG9vLgogICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqc3BpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkICppZCwKKwkJCQkJCWNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzZGV2KQoreworCXdoaWxlIChpZC0+bmFtZVswXSkgeworCQlpZiAoIXN0cmNtcChzZGV2LT5tb2RhbGlhcywgaWQtPm5hbWUpKQorCQkJcmV0dXJuIGlkOworCQlpZCsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgKnNwaV9nZXRfZGV2aWNlX2lkKGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlICpzZGV2KQoreworCWNvbnN0IHN0cnVjdCBzcGlfZHJpdmVyICpzZHJ2ID0gdG9fc3BpX2RyaXZlcihzZGV2LT5kZXYuZHJpdmVyKTsKKworCXJldHVybiBzcGlfbWF0Y2hfaWQoc2Rydi0+aWRfdGFibGUsIHNkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3BpX2dldF9kZXZpY2VfaWQpOworCiBzdGF0aWMgaW50IHNwaV9tYXRjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewogCWNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlCSpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJY29uc3Qgc3RydWN0IHNwaV9kcml2ZXIJKnNkcnYgPSB0b19zcGlfZHJpdmVyKGRydik7CisKKwlpZiAoc2Rydi0+aWRfdGFibGUpCisJCXJldHVybiAhIXNwaV9tYXRjaF9pZChzZHJ2LT5pZF90YWJsZSwgc3BpKTsKIAogCXJldHVybiBzdHJjbXAoc3BpLT5tb2RhbGlhcywgZHJ2LT5uYW1lKSA9PSAwOwogfQpAQCAtNzAsNyArOTQsNyBAQAogewogCWNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlCQkqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwogCi0JYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9JXMiLCBzcGktPm1vZGFsaWFzKTsKKwlhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz0lcyVzIiwgU1BJX01PRFVMRV9QUkVGSVgsIHNwaS0+bW9kYWxpYXMpOwogCXJldHVybiAwOwogfQogCkBAIC02MzksNiArNjYzLDY1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcGlfc2V0dXApOwogCisvKioKKyAqIHNwaV9hc3luYyAtIGFzeW5jaHJvbm91cyBTUEkgdHJhbnNmZXIKKyAqIEBzcGk6IGRldmljZSB3aXRoIHdoaWNoIGRhdGEgd2lsbCBiZSBleGNoYW5nZWQKKyAqIEBtZXNzYWdlOiBkZXNjcmliZXMgdGhlIGRhdGEgdHJhbnNmZXJzLCBpbmNsdWRpbmcgY29tcGxldGlvbiBjYWxsYmFjaworICogQ29udGV4dDogYW55IChpcnFzIG1heSBiZSBibG9ja2VkLCBldGMpCisgKgorICogVGhpcyBjYWxsIG1heSBiZSB1c2VkIGluX2lycSBhbmQgb3RoZXIgY29udGV4dHMgd2hpY2ggY2FuJ3Qgc2xlZXAsCisgKiBhcyB3ZWxsIGFzIGZyb20gdGFzayBjb250ZXh0cyB3aGljaCBjYW4gc2xlZXAuCisgKgorICogVGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgaXMgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hpY2ggY2FuJ3Qgc2xlZXAuCisgKiBCZWZvcmUgdGhhdCBpbnZvY2F0aW9uLCB0aGUgdmFsdWUgb2YgbWVzc2FnZS0+c3RhdHVzIGlzIHVuZGVmaW5lZC4KKyAqIFdoZW4gdGhlIGNhbGxiYWNrIGlzIGlzc3VlZCwgbWVzc2FnZS0+c3RhdHVzIGhvbGRzIGVpdGhlciB6ZXJvICh0bworICogaW5kaWNhdGUgY29tcGxldGUgc3VjY2Vzcykgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLiAgQWZ0ZXIgdGhhdAorICogY2FsbGJhY2sgcmV0dXJucywgdGhlIGRyaXZlciB3aGljaCBpc3N1ZWQgdGhlIHRyYW5zZmVyIHJlcXVlc3QgbWF5CisgKiBkZWFsbG9jYXRlIHRoZSBhc3NvY2lhdGVkIG1lbW9yeTsgaXQncyBubyBsb25nZXIgaW4gdXNlIGJ5IGFueSBTUEkKKyAqIGNvcmUgb3IgY29udHJvbGxlciBkcml2ZXIgY29kZS4KKyAqCisgKiBOb3RlIHRoYXQgYWx0aG91Z2ggYWxsIG1lc3NhZ2VzIHRvIGEgc3BpX2RldmljZSBhcmUgaGFuZGxlZCBpbgorICogRklGTyBvcmRlciwgbWVzc2FnZXMgbWF5IGdvIHRvIGRpZmZlcmVudCBkZXZpY2VzIGluIG90aGVyIG9yZGVycy4KKyAqIFNvbWUgZGV2aWNlIG1pZ2h0IGJlIGhpZ2hlciBwcmlvcml0eSwgb3IgaGF2ZSB2YXJpb3VzICJoYXJkIiBhY2Nlc3MKKyAqIHRpbWUgcmVxdWlyZW1lbnRzLCBmb3IgZXhhbXBsZS4KKyAqCisgKiBPbiBkZXRlY3Rpb24gb2YgYW55IGZhdWx0IGR1cmluZyB0aGUgdHJhbnNmZXIsIHByb2Nlc3Npbmcgb2YKKyAqIHRoZSBlbnRpcmUgbWVzc2FnZSBpcyBhYm9ydGVkLCBhbmQgdGhlIGRldmljZSBpcyBkZXNlbGVjdGVkLgorICogVW50aWwgcmV0dXJuaW5nIGZyb20gdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBjb21wbGV0aW9uIGNhbGxiYWNrLAorICogbm8gb3RoZXIgc3BpX21lc3NhZ2UgcXVldWVkIHRvIHRoYXQgZGV2aWNlIHdpbGwgYmUgcHJvY2Vzc2VkLgorICogKFRoaXMgcnVsZSBhcHBsaWVzIGVxdWFsbHkgdG8gYWxsIHRoZSBzeW5jaHJvbm91cyB0cmFuc2ZlciBjYWxscywKKyAqIHdoaWNoIGFyZSB3cmFwcGVycyBhcm91bmQgdGhpcyBjb3JlIGFzeW5jaHJvbm91cyBwcmltaXRpdmUuKQorICovCitpbnQgc3BpX2FzeW5jKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSkKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpLT5tYXN0ZXI7CisKKwkvKiBIYWxmLWR1cGxleCBsaW5rcyBpbmNsdWRlIG9yaWdpbmFsIE1pY3JvV2lyZSwgYW5kIG9uZXMgd2l0aAorCSAqIG9ubHkgb25lIGRhdGEgcGluIGxpa2UgU1BJXzNXSVJFIChzd2l0Y2hlcyBkaXJlY3Rpb24pIG9yIHdoZXJlCisJICogZWl0aGVyIE1PU0kgb3IgTUlTTyBpcyBtaXNzaW5nLiAgVGhleSBjYW4gYWxzbyBiZSBjYXVzZWQgYnkKKwkgKiBzb2Z0d2FyZSBsaW1pdGF0aW9ucy4KKwkgKi8KKwlpZiAoKG1hc3Rlci0+ZmxhZ3MgJiBTUElfTUFTVEVSX0hBTEZfRFVQTEVYKQorCQkJfHwgKHNwaS0+bW9kZSAmIFNQSV8zV0lSRSkpIHsKKwkJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKKwkJdW5zaWduZWQgZmxhZ3MgPSBtYXN0ZXItPmZsYWdzOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1lc3NhZ2UtPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQkJaWYgKHhmZXItPnJ4X2J1ZiAmJiB4ZmVyLT50eF9idWYpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoKGZsYWdzICYgU1BJX01BU1RFUl9OT19UWCkgJiYgeGZlci0+dHhfYnVmKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKChmbGFncyAmIFNQSV9NQVNURVJfTk9fUlgpICYmIHhmZXItPnJ4X2J1ZikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCW1lc3NhZ2UtPnNwaSA9IHNwaTsKKwltZXNzYWdlLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJcmV0dXJuIG1hc3Rlci0+dHJhbnNmZXIoc3BpLCBtZXNzYWdlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNwaV9hc3luYyk7CisKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTk1ZTQ1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYworKysgL2Rldi9udWxsCkBAIC0xLDE3NzAgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvc3BpL3NwaV9pbXguYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTV0FQUAotICoJQW5kcmVhIFBhdGVybmlhbmkgPGEucGF0ZXJuaWFuaUBzd2FwcC1lbmcuaXQ+Ci0gKgotICogSW5pdGlhbCB2ZXJzaW9uIGluc3BpcmVkIGJ5OgotICoJbGludXgtMi42LjE3LXJjMy1tbTEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaW14LWRtYS5oPgotI2luY2x1ZGUgPG1hY2gvc3BpX2lteC5oPgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogU1BJIFJlZ2lzdGVycyBvZmZzZXRzIGZyb20gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgU1BJX1JYREFUQQkJKDB4MDApCi0jZGVmaW5lIFNQSV9UWERBVEEJCSgweDA0KQotI2RlZmluZSBTUElfQ09OVFJPTAkJKDB4MDgpCi0jZGVmaW5lIFNQSV9JTlRfU1RBVFVTCQkoMHgwQykKLSNkZWZpbmUgU1BJX1RFU1QJCSgweDEwKQotI2RlZmluZSBTUElfUEVSSU9ECQkoMHgxNCkKLSNkZWZpbmUgU1BJX0RNQQkJCSgweDE4KQotI2RlZmluZSBTUElfUkVTRVQJCSgweDFDKQotCi0vKiBTUEkgQ29udHJvbCBSZWdpc3RlciBCaXQgRmllbGRzICYgTWFza3MgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfQklUQ09VTlRfTUFTSwkoMHhGKQkJLyogQml0IENvdW50IE1hc2sgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfQklUQ09VTlQobikJCSgoKG4pIC0gMSkgJiBTUElfQ09OVFJPTF9CSVRDT1VOVF9NQVNLKQotI2RlZmluZSBTUElfQ09OVFJPTF9QT0wJCQkoMHgxIDw8IDQpICAgICAgLyogQ2xvY2sgUG9sYXJpdHkgTWFzayAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9QT0xfQUNUX0hJR0gJKDB4MCA8PCA0KSAgICAgIC8qIEFjdGl2ZSBoaWdoIHBvbC4gKDA9aWRsZSkgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfUE9MX0FDVF9MT1cJCSgweDEgPDwgNCkgICAgICAvKiBBY3RpdmUgbG93IHBvbC4gKDE9aWRsZSkgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfUEhBCQkJKDB4MSA8PCA1KSAgICAgIC8qIENsb2NrIFBoYXNlIE1hc2sgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfUEhBXzAJCSgweDAgPDwgNSkgICAgICAvKiBDbG9jayBQaGFzZSAwICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1BIQV8xCQkoMHgxIDw8IDUpICAgICAgLyogQ2xvY2sgUGhhc2UgMSAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9TU0NUTAkJKDB4MSA8PCA2KSAgICAgIC8qIC9TUyBXYXZlZm9ybSBTZWxlY3QgTWFzayAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9TU0NUTF8wCQkoMHgwIDw8IDYpICAgICAgLyogTWFzdGVyOiAvU1Mgc3RheXMgbG93IGJldHdlZW4gU1BJIGJ1cnN0Ci0JCQkJCQkJICAgU2xhdmU6IFJYRklGTyBhZHZhbmNlZCBieSBCSVRfQ09VTlQgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfU1NDVExfMQkJKDB4MSA8PCA2KSAgICAgIC8qIE1hc3RlcjogL1NTIGluc2VydCBwdWxzZSBiZXR3ZWVuIFNQSSBidXJzdAotCQkJCQkJCSAgIFNsYXZlOiBSWEZJRk8gYWR2YW5jZWQgYnkgL1NTIHJpc2luZyBlZGdlICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1NTUE9MCQkoMHgxIDw8IDcpICAgICAgLyogL1NTIFBvbGFyaXR5IFNlbGVjdCBNYXNrICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1NTUE9MX0FDVF9MT1cJKDB4MCA8PCA3KSAgICAgIC8qIC9TUyBBY3RpdmUgbG93ICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1NTUE9MX0FDVF9ISUdICSgweDEgPDwgNykgICAgICAvKiAvU1MgQWN0aXZlIGhpZ2ggKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfWENICQkJKDB4MSA8PCA4KSAgICAgIC8qIEV4Y2hhbmdlICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX1NQSUVOCQkoMHgxIDw8IDkpICAgICAgLyogU1BJIE1vZHVsZSBFbmFibGUgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfTU9ERQkJKDB4MSA8PCAxMCkgICAgIC8qIFNQSSBNb2RlIFNlbGVjdCBNYXNrICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX01PREVfU0xBVkUJCSgweDAgPDwgMTApICAgICAvKiBTUEkgTW9kZSBTbGF2ZSAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9NT0RFX01BU1RFUgkJKDB4MSA8PCAxMCkgICAgIC8qIFNQSSBNb2RlIE1hc3RlciAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9EUkNUTAkJKDB4MyA8PCAxMSkgICAgIC8qIC9TUElfUkRZIENvbnRyb2wgTWFzayAqLwotI2RlZmluZSBTUElfQ09OVFJPTF9EUkNUTF8wCQkoMHgwIDw8IDExKSAgICAgLyogSWdub3JlIC9TUElfUkRZICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX0RSQ1RMXzEJCSgweDEgPDwgMTEpICAgICAvKiAvU1BJX1JEWSBmYWxsaW5nIGVkZ2UgdHJpZ2dlcnMgaW5wdXQgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfRFJDVExfMgkJKDB4MiA8PCAxMSkgICAgIC8qIC9TUElfUkRZIGFjdGl2ZSBsb3cgbGV2ZWwgdHJpZ2dlcnMgaW5wdXQgKi8KLSNkZWZpbmUgU1BJX0NPTlRST0xfREFUQVJBVEUJCSgweDcgPDwgMTMpICAgICAvKiBEYXRhIFJhdGUgTWFzayAqLwotI2RlZmluZSBTUElfUEVSQ0xLMl9ESVZfTUlOCQkoMCkJCS8qIFBFUkNMSzI6NCAqLwotI2RlZmluZSBTUElfUEVSQ0xLMl9ESVZfTUFYCQkoNykJCS8qIFBFUkNMSzI6NTEyICovCi0jZGVmaW5lIFNQSV9DT05UUk9MX0RBVEFSQVRFX01JTgkoU1BJX1BFUkNMSzJfRElWX01BWCA8PCAxMykKLSNkZWZpbmUgU1BJX0NPTlRST0xfREFUQVJBVEVfTUFYCShTUElfUEVSQ0xLMl9ESVZfTUlOIDw8IDEzKQotI2RlZmluZSBTUElfQ09OVFJPTF9EQVRBUkFURV9CQUQJKFNQSV9DT05UUk9MX0RBVEFSQVRFX01JTiArIDEpCi0KLS8qIFNQSSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyIEJpdCBGaWVsZHMgJiBNYXNrcyAqLwotI2RlZmluZSBTUElfU1RBVFVTX1RFCSgweDEgPDwgMCkJLyogVFhGSUZPIEVtcHR5IFN0YXR1cyAqLwotI2RlZmluZSBTUElfU1RBVFVTX1RICSgweDEgPDwgMSkgICAgICAvKiBUWEZJRk8gSGFsZiBTdGF0dXMgKi8KLSNkZWZpbmUgU1BJX1NUQVRVU19URgkoMHgxIDw8IDIpICAgICAgLyogVFhGSUZPIEZ1bGwgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9TVEFUVVNfUlIJKDB4MSA8PCAzKSAgICAgIC8qIFJYRklGTyBEYXRhIFJlYWR5IFN0YXR1cyAqLwotI2RlZmluZSBTUElfU1RBVFVTX1JICSgweDEgPDwgNCkgICAgICAvKiBSWEZJRk8gSGFsZiBTdGF0dXMgKi8KLSNkZWZpbmUgU1BJX1NUQVRVU19SRgkoMHgxIDw8IDUpICAgICAgLyogUlhGSUZPIEZ1bGwgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9TVEFUVVNfUk8JKDB4MSA8PCA2KSAgICAgIC8qIFJYRklGTyBPdmVyZmxvdyAqLwotI2RlZmluZSBTUElfU1RBVFVTX0JPCSgweDEgPDwgNykgICAgICAvKiBCaXQgQ291bnQgT3ZlcmZsb3cgKi8KLSNkZWZpbmUgU1BJX1NUQVRVUwkoMHhGRikJCS8qIFNQSSBTdGF0dXMgTWFzayAqLwotI2RlZmluZSBTUElfSU5URU5fVEUJKDB4MSA8PCA4KSAgICAgIC8qIFRYRklGTyBFbXB0eSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9JTlRFTl9USAkoMHgxIDw8IDkpICAgICAgLyogVFhGSUZPIEhhbGYgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfSU5URU5fVEYJKDB4MSA8PCAxMCkgICAgIC8qIFRYRklGTyBGdWxsIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgU1BJX0lOVEVOX1JFCSgweDEgPDwgMTEpICAgICAvKiBSWEZJRk8gRGF0YSBSZWFkeSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9JTlRFTl9SSAkoMHgxIDw8IDEyKSAgICAgLyogUlhGSUZPIEhhbGYgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfSU5URU5fUkYJKDB4MSA8PCAxMykgICAgIC8qIFJYRklGTyBGdWxsIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgU1BJX0lOVEVOX1JPCSgweDEgPDwgMTQpICAgICAvKiBSWEZJRk8gT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfSU5URU5fQk8JKDB4MSA8PCAxNSkgICAgIC8qIEJpdCBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9JTlRFTgkoMHhGRiA8PCA4KQkvKiBTUEkgSW50ZXJydXB0IEVuYWJsZSBNYXNrICovCi0KLS8qIFNQSSBUZXN0IFJlZ2lzdGVyIEJpdCBGaWVsZHMgJiBNYXNrcyAqLwotI2RlZmluZSBTUElfVEVTVF9UWENOVAkJKDB4RiA8PCAwKQkvKiBUWEZJRk8gQ291bnRlciAqLwotI2RlZmluZSBTUElfVEVTVF9SWENOVF9MU0IJKDQpCQkvKiBSWEZJRk8gQ291bnRlciBMU0IgKi8KLSNkZWZpbmUgU1BJX1RFU1RfUlhDTlQJCSgweEYgPDwgNCkJLyogUlhGSUZPIENvdW50ZXIgKi8KLSNkZWZpbmUgU1BJX1RFU1RfU1NUQVRVUwkoMHhGIDw8IDgpCS8qIFN0YXRlIE1hY2hpbmUgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9URVNUX0xCQwkJKDB4MSA8PCAxNCkJLyogTG9vcCBCYWNrIENvbnRyb2wgKi8KLQotLyogU1BJIFBlcmlvZCBSZWdpc3RlciBCaXQgRmllbGRzICYgTWFza3MgKi8KLSNkZWZpbmUgU1BJX1BFUklPRF9XQUlUCQkoMHg3RkZGIDw8IDApCS8qIFdhaXQgQmV0d2VlbiBUcmFuc2FjdGlvbnMgKi8KLSNkZWZpbmUgU1BJX1BFUklPRF9NQVhfV0FJVAkoMHg3RkZGKQkvKiBNYXggV2FpdCBCZXR3ZWVuCi0JCQkJCQkJVHJhbnNhY3Rpb25zICovCi0jZGVmaW5lIFNQSV9QRVJJT0RfQ1NSQwkJKDB4MSA8PCAxNSkJLyogUGVyaW9kIENsb2NrIFNvdXJjZSBNYXNrICovCi0jZGVmaW5lIFNQSV9QRVJJT0RfQ1NSQ19CQ0xLCSgweDAgPDwgMTUpCS8qIFBlcmlvZCBDbG9jayBTb3VyY2UgaXMKLQkJCQkJCQlCaXQgQ2xvY2sgKi8KLSNkZWZpbmUgU1BJX1BFUklPRF9DU1JDXzMyNzY4CSgweDEgPDwgMTUpCS8qIFBlcmlvZCBDbG9jayBTb3VyY2UgaXMKLQkJCQkJCQkzMi43NjggS0h6IENsb2NrICovCi0KLS8qIFNQSSBETUEgUmVnaXN0ZXIgQml0IEZpZWxkcyAmIE1hc2tzICovCi0jZGVmaW5lIFNQSV9ETUFfUkhETUEJKDB4MSA8PCA0KQkvKiBSWEZJRk8gSGFsZiBTdGF0dXMgKi8KLSNkZWZpbmUgU1BJX0RNQV9SRkRNQQkoMHgxIDw8IDUpICAgICAgLyogUlhGSUZPIEZ1bGwgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9ETUFfVEVETUEJKDB4MSA8PCA2KSAgICAgIC8qIFRYRklGTyBFbXB0eSBTdGF0dXMgKi8KLSNkZWZpbmUgU1BJX0RNQV9USERNQQkoMHgxIDw8IDcpICAgICAgLyogVFhGSUZPIEhhbGYgU3RhdHVzICovCi0jZGVmaW5lIFNQSV9ETUFfUkhERU4JKDB4MSA8PCAxMikJLyogUlhGSUZPIEhhbGYgRE1BIFJlcXVlc3QgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9ETUFfUkZERU4JKDB4MSA8PCAxMykgICAgIC8qIFJYRklGTyBGdWxsIERNQSBSZXF1ZXN0IEVuYWJsZSAqLwotI2RlZmluZSBTUElfRE1BX1RFREVOCSgweDEgPDwgMTQpICAgICAvKiBUWEZJRk8gRW1wdHkgRE1BIFJlcXVlc3QgRW5hYmxlICovCi0jZGVmaW5lIFNQSV9ETUFfVEhERU4JKDB4MSA8PCAxNSkgICAgIC8qIFRYRklGTyBIYWxmIERNQSBSZXF1ZXN0IEVuYWJsZSAqLwotCi0vKiBTUEkgU29mdCBSZXNldCBSZWdpc3RlciBCaXQgRmllbGRzICYgTWFza3MgKi8KLSNkZWZpbmUgU1BJX1JFU0VUX1NUQVJUCSgweDEpCQkvKiBTdGFydCAqLwotCi0vKiBEZWZhdWx0IFNQSSBjb25maWd1cmF0aW9uIHZhbHVlcyAqLwotI2RlZmluZSBTUElfREVGQVVMVF9DT05UUk9MCQlcCi0oCQkJCQlcCi0JU1BJX0NPTlRST0xfQklUQ09VTlQoMTYpIHwgCVwKLQlTUElfQ09OVFJPTF9QT0xfQUNUX0hJR0ggfAlcCi0JU1BJX0NPTlRST0xfUEhBXzAgfAkJXAotCVNQSV9DT05UUk9MX1NQSUVOIHwJCVwKLQlTUElfQ09OVFJPTF9TU0NUTF8xIHwJCVwKLQlTUElfQ09OVFJPTF9NT0RFX01BU1RFUiB8CVwKLQlTUElfQ09OVFJPTF9EUkNUTF8wIHwJCVwKLQlTUElfQ09OVFJPTF9EQVRBUkFURV9NSU4JXAotKQotI2RlZmluZSBTUElfREVGQVVMVF9FTkFCTEVfTE9PUEJBQ0sJKDApCi0jZGVmaW5lIFNQSV9ERUZBVUxUX0VOQUJMRV9ETUEJCSgwKQotI2RlZmluZSBTUElfREVGQVVMVF9QRVJJT0RfV0FJVAkJKDgpCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUWC9SWCBTUEkgRklGTyBzaXplICovCi0jZGVmaW5lIFNQSV9GSUZPX0RFUFRICQkJKDgpCi0jZGVmaW5lIFNQSV9GSUZPX0JZVEVfV0lEVEgJCSgyKQotI2RlZmluZSBTUElfRklGT19PVkVSRkxPV19NQVJHSU4JKDIpCi0KLS8qIERNQSBidXJzdCBsZW5ndGggZm9yIGhhbGYgZnVsbC9lbXB0eSByZXF1ZXN0IHRyaWdnZXIgKi8KLSNkZWZpbmUgU1BJX0RNQV9CTFIJCQkoU1BJX0ZJRk9fREVQVEggKiBTUElfRklGT19CWVRFX1dJRFRIIC8gMikKLQotLyogRHVtbXkgY2hhciBvdXRwdXQgdG8gYWNoaWV2ZSByZWFkcy4KLSAgIENob29zaW5nIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSBhbGwgemVyb2VzIG1heSBoZWxwIHBhdHRlcm4gcmVjb2dpdGlvbgotICAgZm9yIG9zY2lsbG9zY29wZSBhbmFseXNpcywgYnV0IG1heSBicmVhayBzb21lIGRyaXZlcnMuICovCi0jZGVmaW5lIFNQSV9EVU1NWV91OAkJCTAKLSNkZWZpbmUgU1BJX0RVTU1ZX3UxNgkJCSgoU1BJX0RVTU1ZX3U4IDw8IDgpIHwgU1BJX0RVTU1ZX3U4KQotI2RlZmluZSBTUElfRFVNTVlfdTMyCQkJKChTUElfRFVNTVlfdTE2IDw8IDE2KSB8IFNQSV9EVU1NWV91MTYpCi0KLS8qKgotICogTWFjcm8gdG8gY2hhbmdlIGEgdTMyIGZpZWxkOgotICogQHIgOiByZWdpc3RlciB0byBlZGl0Ci0gKiBAbSA6IGJpdCBtYXNrCi0gKiBAdiA6IG5ldyB2YWx1ZSBmb3IgdGhlIGZpZWxkIGNvcnJlY3RseSBiaXQtYWxsaWduZWQKLSovCi0jZGVmaW5lIHUzMl9FRElUKHIsIG0sIHYpCQlyID0gKHIgJiB+KG0pKSB8ICh2KQotCi0vKiBNZXNzYWdlIHN0YXRlICovCi0jZGVmaW5lIFNUQVJUX1NUQVRFCQkJKCh2b2lkKikwKQotI2RlZmluZSBSVU5OSU5HX1NUQVRFCQkJKCh2b2lkKikxKQotI2RlZmluZSBET05FX1NUQVRFCQkJKCh2b2lkKikyKQotI2RlZmluZSBFUlJPUl9TVEFURQkJCSgodm9pZCopLTEpCi0KLS8qIFF1ZXVlIHN0YXRlICovCi0jZGVmaW5lIFFVRVVFX1JVTk5JTkcJCQkoMCkKLSNkZWZpbmUgUVVFVUVfU1RPUFBFRAkJCSgxKQotCi0jZGVmaW5lIElTX0RNQV9BTElHTkVEKHgpIAkJKCgodTMyKSh4KSAmIDB4MDMpID09IDApCi0jZGVmaW5lIERNQV9BTElHTk1FTlQJCQk0Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBEcml2ZXIgZGF0YSBzdHJ1Y3RzICovCi0KLS8qIENvbnRleHQgKi8KLXN0cnVjdCBkcml2ZXJfZGF0YSB7Ci0JLyogRHJpdmVyIG1vZGVsIGhvb2t1cCAqLwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0KLQkvKiBTUEkgZnJhbWV3b3JrIGhvb2t1cCAqLwotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7Ci0KLQkvKiBJTVggaG9va3VwICovCi0Jc3RydWN0IHNwaV9pbXhfbWFzdGVyICptYXN0ZXJfaW5mbzsKLQotCS8qIE1lbW9yeSByZXNvdXJjZXMgYW5kIFNQSSByZWdzIHZpcnR1YWwgYWRkcmVzcyAqLwotCXN0cnVjdCByZXNvdXJjZSAqaW9hcmVhOwotCXZvaWQgX19pb21lbSAqcmVnczsKLQotCS8qIFNQSSBSWF9EQVRBIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQlkbWFfYWRkcl90IHJkX2RhdGFfcGh5czsKLQotCS8qIERyaXZlciBtZXNzYWdlIHF1ZXVlICovCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtxdWV1ZTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKLQlpbnQgYnVzeTsKLQlpbnQgcnVuOwotCi0JLyogTWVzc2FnZSBUcmFuc2ZlciBwdW1wICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHB1bXBfdHJhbnNmZXJzOwotCi0JLyogQ3VycmVudCBtZXNzYWdlLCB0cmFuc2ZlciBhbmQgc3RhdGUgKi8KLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKmN1cl9tc2c7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciAqY3VyX3RyYW5zZmVyOwotCXN0cnVjdCBjaGlwX2RhdGEgKmN1cl9jaGlwOwotCi0JLyogUmQgLyBXciBidWZmZXJzIHBvaW50ZXJzICovCi0Jc2l6ZV90IGxlbjsKLQl2b2lkICp0eDsKLQl2b2lkICp0eF9lbmQ7Ci0Jdm9pZCAqcng7Ci0Jdm9pZCAqcnhfZW5kOwotCi0JdTggcmRfb25seTsKLQl1OCBuX2J5dGVzOwotCWludCBjc19jaGFuZ2U7Ci0KLQkvKiBGdW5jdGlvbiBwb2ludGVycyAqLwotCWlycXJldHVybl90ICgqdHJhbnNmZXJfaGFuZGxlcikoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7Ci0Jdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKLQotCS8qIERNQSBzZXR1cCAqLwotCWludCByeF9jaGFubmVsOwotCWludCB0eF9jaGFubmVsOwotCWRtYV9hZGRyX3QgcnhfZG1hOwotCWRtYV9hZGRyX3QgdHhfZG1hOwotCWludCByeF9kbWFfbmVlZHNfdW5tYXA7Ci0JaW50IHR4X2RtYV9uZWVkc191bm1hcDsKLQlzaXplX3QgdHhfbWFwX2xlbjsKLQl1MzIgZHVtbXlfZG1hX2J1ZiBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLQlzdHJ1Y3QgY2xrICpjbGs7Ci19OwotCi0vKiBSdW50aW1lIHN0YXRlICovCi1zdHJ1Y3QgY2hpcF9kYXRhIHsKLQl1MzIgY29udHJvbDsKLQl1MzIgcGVyaW9kOwotCXUzMiB0ZXN0OwotCi0JdTggZW5hYmxlX2RtYToxOwotCXU4IGJpdHNfcGVyX3dvcmQ7Ci0JdTggbl9ieXRlczsKLQl1MzIgbWF4X3NwZWVkX2h6OwotCi0Jdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKLX07Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLXN0YXRpYyB2b2lkIHB1bXBfbWVzc2FnZXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotc3RhdGljIHZvaWQgZmx1c2goc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBkcnZfZGF0YS0+cmVnczsKLQl1MzIgY29udHJvbDsKLQotCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJmbHVzaFxuIik7Ci0KLQkvKiBXYWl0IGZvciBlbmQgb2YgdHJhbnNhY3Rpb24gKi8KLQlkbyB7Ci0JCWNvbnRyb2wgPSByZWFkbChyZWdzICsgU1BJX0NPTlRST0wpOwotCX0gd2hpbGUgKGNvbnRyb2wgJiBTUElfQ09OVFJPTF9YQ0gpOwotCi0JLyogUmVsZWFzZSBjaGlwIHNlbGVjdCBpZiByZXF1ZXN0ZWQsIHRyYW5zZmVyIGRlbGF5cyBhcmUKLQkgICBoYW5kbGVkIGluIHB1bXBfdHJhbnNmZXJzICovCi0JaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCi0JCWRydl9kYXRhLT5jc19jb250cm9sKFNQSV9DU19ERUFTU0VSVCk7Ci0KLQkvKiBEaXNhYmxlIFNQSSB0byBmbHVzaCBGSUZPcyAqLwotCXdyaXRlbChjb250cm9sICYgflNQSV9DT05UUk9MX1NQSUVOLCByZWdzICsgU1BJX0NPTlRST0wpOwotCXdyaXRlbChjb250cm9sLCByZWdzICsgU1BJX0NPTlRST0wpOwotfQotCi1zdGF0aWMgdm9pZCByZXN0b3JlX3N0YXRlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0Jc3RydWN0IGNoaXBfZGF0YSAqY2hpcCA9IGRydl9kYXRhLT5jdXJfY2hpcDsKLQotCS8qIExvYWQgY2hpcCByZWdpc3RlcnMgKi8KLQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkicmVzdG9yZV9zdGF0ZVxuIgotCQkiICAgIHRlc3QgICAgPSAweCUwOFhcbiIKLQkJIiAgICBjb250cm9sID0gMHglMDhYXG4iLAotCQljaGlwLT50ZXN0LAotCQljaGlwLT5jb250cm9sKTsKLQl3cml0ZWwoY2hpcC0+dGVzdCwgcmVncyArIFNQSV9URVNUKTsKLQl3cml0ZWwoY2hpcC0+cGVyaW9kLCByZWdzICsgU1BJX1BFUklPRCk7Ci0Jd3JpdGVsKDAsIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0Jd3JpdGVsKGNoaXAtPmNvbnRyb2wsIHJlZ3MgKyBTUElfQ09OVFJPTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG51bGxfY3NfY29udHJvbCh1MzIgY29tbWFuZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgZGF0YV90b193cml0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXJldHVybiAoKHUzMikoZHJ2X2RhdGEtPnR4X2VuZCAtIGRydl9kYXRhLT50eCkpIC8gZHJ2X2RhdGEtPm5fYnl0ZXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGRhdGFfdG9fcmVhZChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXJldHVybiAoKHUzMikoZHJ2X2RhdGEtPnJ4X2VuZCAtIGRydl9kYXRhLT5yeCkpIC8gZHJ2X2RhdGEtPm5fYnl0ZXM7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBkcnZfZGF0YS0+cmVnczsKLQl2b2lkICp0eCA9IGRydl9kYXRhLT50eDsKLQl2b2lkICp0eF9lbmQgPSBkcnZfZGF0YS0+dHhfZW5kOwotCXU4IG5fYnl0ZXMgPSBkcnZfZGF0YS0+bl9ieXRlczsKLQl1MzIgcmVtYWluaW5nX3dyaXRlczsKLQl1MzIgZmlmb19hdmFpbF9zcGFjZTsKLQl1MzIgbjsKLQl1MTYgZDsKLQotCS8qIENvbXB1dGUgaG93IG1hbnkgZmlmbyB3cml0ZXMgdG8gZG8gKi8KLQlyZW1haW5pbmdfd3JpdGVzID0gKHUzMikodHhfZW5kIC0gdHgpIC8gbl9ieXRlczsKLQlmaWZvX2F2YWlsX3NwYWNlID0gU1BJX0ZJRk9fREVQVEggLQotCQkJCShyZWFkbChyZWdzICsgU1BJX1RFU1QpICYgU1BJX1RFU1RfVFhDTlQpOwotCWlmIChkcnZfZGF0YS0+cnggJiYgKGZpZm9fYXZhaWxfc3BhY2UgPiBTUElfRklGT19PVkVSRkxPV19NQVJHSU4pKQotCQkvKiBGaXggbWlzdW5kZXJzdG9vZCByZWNlaXZlIG92ZXJmbG93ICovCi0JCWZpZm9fYXZhaWxfc3BhY2UgLT0gU1BJX0ZJRk9fT1ZFUkZMT1dfTUFSR0lOOwotCW4gPSBtaW4ocmVtYWluaW5nX3dyaXRlcywgZmlmb19hdmFpbF9zcGFjZSk7Ci0KLQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkid3JpdGUgdHlwZSAlc1xuIgotCQkiICAgIHJlbWFpbmluZyB3cml0ZXMgPSAlZFxuIgotCQkiICAgIGZpZm8gYXZhaWwgc3BhY2UgPSAlZFxuIgotCQkiICAgIGZpZm8gd3JpdGVzICAgICAgPSAlZFxuIiwKLQkJKG5fYnl0ZXMgPT0gMSkgPyAidTgiIDogInUxNiIsCi0JCXJlbWFpbmluZ193cml0ZXMsCi0JCWZpZm9fYXZhaWxfc3BhY2UsCi0JCW4pOwotCi0JaWYgKG4gPiAwKSB7Ci0JCS8qIEZpbGwgU1BJIFRYRklGTyAqLwotCQlpZiAoZHJ2X2RhdGEtPnJkX29ubHkpIHsKLQkJCXR4ICs9IG4gKiBuX2J5dGVzOwotCQkJd2hpbGUgKG4tLSkKLQkJCQl3cml0ZWwoU1BJX0RVTU1ZX3UxNiwgcmVncyArIFNQSV9UWERBVEEpOwotCQl9IGVsc2UgewotCQkJaWYgKG5fYnl0ZXMgPT0gMSkgewotCQkJCXdoaWxlIChuLS0pIHsKLQkJCQkJZCA9ICoodTgqKXR4OwotCQkJCQl3cml0ZWwoZCwgcmVncyArIFNQSV9UWERBVEEpOwotCQkJCQl0eCArPSAxOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJd2hpbGUgKG4tLSkgewotCQkJCQlkID0gKih1MTYqKXR4OwotCQkJCQl3cml0ZWwoZCwgcmVncyArIFNQSV9UWERBVEEpOwotCQkJCQl0eCArPSAyOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIFRyaWdnZXIgdHJhbnNmZXIgKi8KLQkJd3JpdGVsKHJlYWRsKHJlZ3MgKyBTUElfQ09OVFJPTCkgfCBTUElfQ09OVFJPTF9YQ0gsCi0JCQlyZWdzICsgU1BJX0NPTlRST0wpOwotCi0JCS8qIFVwZGF0ZSB0eCBwb2ludGVyICovCi0JCWRydl9kYXRhLT50eCA9IHR4OwotCX0KLQotCXJldHVybiAodHggPj0gdHhfZW5kKTsKLX0KLQotc3RhdGljIGludCByZWFkKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0Jdm9pZCAqcnggPSBkcnZfZGF0YS0+cng7Ci0Jdm9pZCAqcnhfZW5kID0gZHJ2X2RhdGEtPnJ4X2VuZDsKLQl1OCBuX2J5dGVzID0gZHJ2X2RhdGEtPm5fYnl0ZXM7Ci0JdTMyIHJlbWFpbmluZ19yZWFkczsKLQl1MzIgZmlmb19yeGNudDsKLQl1MzIgbjsKLQl1MTYgZDsKLQotCS8qIENvbXB1dGUgaG93IG1hbnkgZmlmbyByZWFkcyB0byBkbyAqLwotCXJlbWFpbmluZ19yZWFkcyA9ICh1MzIpKHJ4X2VuZCAtIHJ4KSAvIG5fYnl0ZXM7Ci0JZmlmb19yeGNudCA9IChyZWFkbChyZWdzICsgU1BJX1RFU1QpICYgU1BJX1RFU1RfUlhDTlQpID4+Ci0JCQlTUElfVEVTVF9SWENOVF9MU0I7Ci0JbiA9IG1pbihyZW1haW5pbmdfcmVhZHMsIGZpZm9fcnhjbnQpOwotCi0JZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJInJlYWQgdHlwZSAlc1xuIgotCQkiICAgIHJlbWFpbmluZyByZWFkcyA9ICVkXG4iCi0JCSIgICAgZmlmbyByeCBjb3VudCAgID0gJWRcbiIKLQkJIiAgICBmaWZvIHJlYWRzICAgICAgPSAlZFxuIiwKLQkJKG5fYnl0ZXMgPT0gMSkgPyAidTgiIDogInUxNiIsCi0JCXJlbWFpbmluZ19yZWFkcywKLQkJZmlmb19yeGNudCwKLQkJbik7Ci0KLQlpZiAobiA+IDApIHsKLQkJLyogUmVhZCBTUEkgUlhGSUZPICovCi0JCWlmIChuX2J5dGVzID09IDEpIHsKLQkJCXdoaWxlIChuLS0pIHsKLQkJCQlkID0gcmVhZGwocmVncyArIFNQSV9SWERBVEEpOwotCQkJCSooKHU4KilyeCkgPSBkOwotCQkJCXJ4ICs9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl3aGlsZSAobi0tKSB7Ci0JCQkJZCA9IHJlYWRsKHJlZ3MgKyBTUElfUlhEQVRBKTsKLQkJCQkqKCh1MTYqKXJ4KSA9IGQ7Ci0JCQkJcnggKz0gMjsKLQkJCX0KLQkJfQotCi0JCS8qIFVwZGF0ZSByeCBwb2ludGVyICovCi0JCWRydl9kYXRhLT5yeCA9IHJ4OwotCX0KLQotCXJldHVybiAocnggPj0gcnhfZW5kKTsKLX0KLQotc3RhdGljIHZvaWQgKm5leHRfdHJhbnNmZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnRyYW5zID0gZHJ2X2RhdGEtPmN1cl90cmFuc2ZlcjsKLQotCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciAqLwotCWlmICh0cmFucy0+dHJhbnNmZXJfbGlzdC5uZXh0ICE9ICZtc2ctPnRyYW5zZmVycykgewotCQlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0KLQkJCWxpc3RfZW50cnkodHJhbnMtPnRyYW5zZmVyX2xpc3QubmV4dCwKLQkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKLQkJCQkJdHJhbnNmZXJfbGlzdCk7Ci0JCXJldHVybiBSVU5OSU5HX1NUQVRFOwotCX0KLQotCXJldHVybiBET05FX1NUQVRFOwotfQotCi1zdGF0aWMgaW50IG1hcF9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQl2b2lkICpidWY7Ci0KLQlkcnZfZGF0YS0+cnhfZG1hX25lZWRzX3VubWFwID0gMDsKLQlkcnZfZGF0YS0+dHhfZG1hX25lZWRzX3VubWFwID0gMDsKLQotCWlmICghZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hIHx8Ci0JCSFkcnZfZGF0YS0+Y3VyX2NoaXAtPmVuYWJsZV9kbWEpCi0JCQlyZXR1cm4gLTE7Ci0KLQltc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKLQlkZXYgPSAmbXNnLT5zcGktPmRldjsKLQlpZiAobXNnLT5pc19kbWFfbWFwcGVkKSB7Ci0JCWlmIChkcnZfZGF0YS0+dHhfZG1hKQotCQkJLyogVGhlIGNhbGxlciBwcm92aWRlZCBhdCBsZWFzdCBkbWEgYW5kIGNwdSB2aXJ0dWFsCi0JCQkgICBhZGRyZXNzIGZvciB3cml0ZTsgcHVtcF90cmFuc2ZlcnMoKSB3aWxsIGNvbnNpZGVyIHRoZQotCQkJICAgdHJhbnNmZXIgYXMgd3JpdGUgb25seSBpZiBjcHUgcnggdmlydHVhbCBhZGRyZXNzIGlzCi0JCQkgICBOVUxMICovCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAoZHJ2X2RhdGEtPnJ4X2RtYSkgewotCQkJLyogVGhlIGNhbGxlciBwcm92aWRlZCBkbWEgYW5kIGNwdSB2aXJ0dWFsIGFkZHJlc3MgdG8KLQkJCSAgIHBlcmZvcm1lIHJlYWQgb25seSB0cmFuc2ZlciAtLT4KLQkJCSAgIHVzZSBkcnZfZGF0YS0+ZHVtbXlfZG1hX2J1ZiBmb3IgZHVtbXkgd3JpdGVzIHRvCi0JCQkgICBhY2hpdmUgcmVhZHMgKi8KLQkJCWJ1ZiA9ICZkcnZfZGF0YS0+ZHVtbXlfZG1hX2J1ZjsKLQkJCWRydl9kYXRhLT50eF9tYXBfbGVuID0gc2l6ZW9mKGRydl9kYXRhLT5kdW1teV9kbWFfYnVmKTsKLQkJCWRydl9kYXRhLT50eF9kbWEgPSBkbWFfbWFwX3NpbmdsZShkZXYsCi0JCQkJCQkJYnVmLAotCQkJCQkJCWRydl9kYXRhLT50eF9tYXBfbGVuLAotCQkJCQkJCURNQV9UT19ERVZJQ0UpOwotCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZHJ2X2RhdGEtPnR4X2RtYSkpCi0JCQkJcmV0dXJuIC0xOwotCi0JCQlkcnZfZGF0YS0+dHhfZG1hX25lZWRzX3VubWFwID0gMTsKLQotCQkJLyogRmxhZ3MgdHJhbnNmZXIgYXMgcmRfb25seSBmb3IgcHVtcF90cmFuc2ZlcnMoKSBETUEKLQkJCSAgIHJlZ3MgcHJvZ3JhbW1pbmcgKHNob3VsZCBiZSByZWR1bmRhbnQpICovCi0JCQlkcnZfZGF0YS0+dHggPSBOVUxMOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCWlmICghSVNfRE1BX0FMSUdORUQoZHJ2X2RhdGEtPnJ4KSB8fCAhSVNfRE1BX0FMSUdORUQoZHJ2X2RhdGEtPnR4KSkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGRydl9kYXRhLT50eCA9PSBOVUxMKSB7Ci0JCS8qIFJlYWQgb25seSBtZXNzYWdlIC0tPiB1c2UgZHJ2X2RhdGEtPmR1bW15X2RtYV9idWYgZm9yIGR1bW15Ci0JCSAgIHdyaXRlcyB0byBhY2hpdmUgcmVhZHMgKi8KLQkJYnVmID0gJmRydl9kYXRhLT5kdW1teV9kbWFfYnVmOwotCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiA9IHNpemVvZihkcnZfZGF0YS0+ZHVtbXlfZG1hX2J1Zik7Ci0JfSBlbHNlIHsKLQkJYnVmID0gZHJ2X2RhdGEtPnR4OwotCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiA9IGRydl9kYXRhLT5sZW47Ci0JfQotCWRydl9kYXRhLT50eF9kbWEgPSBkbWFfbWFwX3NpbmdsZShkZXYsCi0JCQkJCWJ1ZiwKLQkJCQkJZHJ2X2RhdGEtPnR4X21hcF9sZW4sCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRydl9kYXRhLT50eF9kbWEpKQotCQlyZXR1cm4gLTE7Ci0JZHJ2X2RhdGEtPnR4X2RtYV9uZWVkc191bm1hcCA9IDE7Ci0KLQkvKiBOVUxMIHJ4IG1lYW5zIHdyaXRlLW9ubHkgdHJhbnNmZXIgYW5kIG5vIG1hcCBuZWVkZWQKLQkgKiBzaW5jZSByeCBETUEgd2lsbCBub3QgYmUgdXNlZCAqLwotCWlmIChkcnZfZGF0YS0+cngpIHsKLQkJYnVmID0gZHJ2X2RhdGEtPnJ4OwotCQlkcnZfZGF0YS0+cnhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LAotCQkJCQkJYnVmLAotCQkJCQkJZHJ2X2RhdGEtPmxlbiwKLQkJCQkJCURNQV9GUk9NX0RFVklDRSk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRydl9kYXRhLT5yeF9kbWEpKSB7Ci0JCQlpZiAoZHJ2X2RhdGEtPnR4X2RtYSkgewotCQkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCQkJZHJ2X2RhdGEtPnR4X2RtYSwKLQkJCQkJCWRydl9kYXRhLT50eF9tYXBfbGVuLAotCQkJCQkJRE1BX1RPX0RFVklDRSk7Ci0JCQkJZHJ2X2RhdGEtPnR4X2RtYV9uZWVkc191bm1hcCA9IDA7Ci0JCQl9Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJZHJ2X2RhdGEtPnJ4X2RtYV9uZWVkc191bm1hcCA9IDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFwX2RtYV9idWZmZXJzKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbXNnLT5zcGktPmRldjsKLQotCWlmIChkcnZfZGF0YS0+cnhfZG1hX25lZWRzX3VubWFwKSB7Ci0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCWRydl9kYXRhLT5yeF9kbWEsCi0JCQkJZHJ2X2RhdGEtPmxlbiwKLQkJCQlETUFfRlJPTV9ERVZJQ0UpOwotCQlkcnZfZGF0YS0+cnhfZG1hX25lZWRzX3VubWFwID0gMDsKLQl9Ci0JaWYgKGRydl9kYXRhLT50eF9kbWFfbmVlZHNfdW5tYXApIHsKLQkJZG1hX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJZHJ2X2RhdGEtPnR4X2RtYSwKLQkJCQlkcnZfZGF0YS0+dHhfbWFwX2xlbiwKLQkJCQlETUFfVE9fREVWSUNFKTsKLQkJZHJ2X2RhdGEtPnR4X2RtYV9uZWVkc191bm1hcCA9IDA7Ci0JfQotfQotCi0vKiBDYWxsZXIgYWxyZWFkeSBzZXQgbWVzc2FnZS0+c3RhdHVzIChkbWEgaXMgYWxyZWFkeSBibG9ja2VkKSAqLwotc3RhdGljIHZvaWQgZ2l2ZWJhY2soc3RydWN0IHNwaV9tZXNzYWdlICptZXNzYWdlLCBzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IGRydl9kYXRhLT5yZWdzOwotCi0JLyogQnJpbmcgU1BJIHRvIHNsZWVwOyByZXN0b3JlX3N0YXRlKCkgYW5kIHB1bXBfdHJhbnNmZXIoKQotCSAgIHdpbGwgZG8gbmV3IHNldHVwICovCi0Jd3JpdGVsKDAsIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0Jd3JpdGVsKDAsIHJlZ3MgKyBTUElfRE1BKTsKLQotCS8qIFVuY29uZGl0aW9uZWQgZGVzZWxjdCAqLwotCWRydl9kYXRhLT5jc19jb250cm9sKFNQSV9DU19ERUFTU0VSVCk7Ci0KLQltZXNzYWdlLT5zdGF0ZSA9IE5VTEw7Ci0JaWYgKG1lc3NhZ2UtPmNvbXBsZXRlKQotCQltZXNzYWdlLT5jb21wbGV0ZShtZXNzYWdlLT5jb250ZXh0KTsKLQotCWRydl9kYXRhLT5jdXJfbXNnID0gTlVMTDsKLQlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0gTlVMTDsKLQlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBOVUxMOwotCXF1ZXVlX3dvcmsoZHJ2X2RhdGEtPndvcmtxdWV1ZSwgJmRydl9kYXRhLT53b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hX2Vycl9oYW5kbGVyKGludCBjaGFubmVsLCB2b2lkICpkYXRhLCBpbnQgZXJyY29kZSkKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGF0YTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOwotCi0JZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImRtYV9lcnJfaGFuZGxlclxuIik7Ci0KLQkvKiBEaXNhYmxlIGJvdGggcnggYW5kIHR4IGRtYSBjaGFubmVscyAqLwotCWlteF9kbWFfZGlzYWJsZShkcnZfZGF0YS0+cnhfY2hhbm5lbCk7Ci0JaW14X2RtYV9kaXNhYmxlKGRydl9kYXRhLT50eF9jaGFubmVsKTsKLQl1bm1hcF9kbWFfYnVmZmVycyhkcnZfZGF0YSk7Ci0KLQlmbHVzaChkcnZfZGF0YSk7Ci0KLQltc2ctPnN0YXRlID0gRVJST1JfU1RBVEU7Ci0JdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hX3R4X2hhbmRsZXIoaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRhdGE7Ci0KLQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiZG1hX3R4X2hhbmRsZXJcbiIpOwotCi0JaW14X2RtYV9kaXNhYmxlKGNoYW5uZWwpOwotCi0JLyogTm93IHdhaXRzIGZvciBUWCBGSUZPIGVtcHR5ICovCi0Jd3JpdGVsKFNQSV9JTlRFTl9URSwgZHJ2X2RhdGEtPnJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfdHJhbnNmZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQl1MzIgc3RhdHVzOwotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0KLQlzdGF0dXMgPSByZWFkbChyZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCi0JaWYgKChzdGF0dXMgJiAoU1BJX0lOVEVOX1JPIHwgU1BJX1NUQVRVU19STykpCi0JCQk9PSAoU1BJX0lOVEVOX1JPIHwgU1BJX1NUQVRVU19STykpIHsKLQkJd3JpdGVsKHN0YXR1cyAmIH5TUElfSU5URU4sIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0KLQkJaW14X2RtYV9kaXNhYmxlKGRydl9kYXRhLT50eF9jaGFubmVsKTsKLQkJaW14X2RtYV9kaXNhYmxlKGRydl9kYXRhLT5yeF9jaGFubmVsKTsKLQkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwotCi0JCWZsdXNoKGRydl9kYXRhKTsKLQotCQlkZXZfd2FybigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkiZG1hX3RyYW5zZmVyIC0gZmlmbyBvdmVydW5cbiIpOwotCi0JCW1zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKLQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKLQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIFNQSV9TVEFUVVNfVEUpIHsKLQkJd3JpdGVsKHN0YXR1cyAmIH5TUElfSU5URU5fVEUsIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0KLQkJaWYgKGRydl9kYXRhLT5yeCkgewotCQkJLyogV2FpdCBlbmQgb2YgdHJhbnNmZXIgYmVmb3JlIHJlYWQgdHJhaWxpbmcgZGF0YSAqLwotCQkJd2hpbGUgKHJlYWRsKHJlZ3MgKyBTUElfQ09OVFJPTCkgJiBTUElfQ09OVFJPTF9YQ0gpCi0JCQkJY3B1X3JlbGF4KCk7Ci0KLQkJCWlteF9kbWFfZGlzYWJsZShkcnZfZGF0YS0+cnhfY2hhbm5lbCk7Ci0JCQl1bm1hcF9kbWFfYnVmZmVycyhkcnZfZGF0YSk7Ci0KLQkJCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCi0JCQkgICBoYW5kbGVkIGluIHB1bXBfdHJhbnNmZXJzKCkgKi8KLQkJCWlmIChkcnZfZGF0YS0+Y3NfY2hhbmdlKQotCQkJCWRydl9kYXRhLT5jc19jb250cm9sKFNQSV9DU19ERUFTU0VSVCk7Ci0KLQkJCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgdHJhaWxpbmcgZGF0YSBhbmQgcmVhZCB0aGVtICovCi0JCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCSJkbWFfdHJhbnNmZXIgLSB0ZXN0ID0gMHglMDhYXG4iLAotCQkJCXJlYWRsKHJlZ3MgKyBTUElfVEVTVCkpOwotCQkJZHJ2X2RhdGEtPnJ4ID0gZHJ2X2RhdGEtPnJ4X2VuZCAtCi0JCQkJCSgocmVhZGwocmVncyArIFNQSV9URVNUKSAmCi0JCQkJCVNQSV9URVNUX1JYQ05UKSA+PgotCQkJCQlTUElfVEVTVF9SWENOVF9MU0IpKmRydl9kYXRhLT5uX2J5dGVzOwotCQkJcmVhZChkcnZfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBXcml0ZSBvbmx5IHRyYW5zZmVyICovCi0JCQl1bm1hcF9kbWFfYnVmZmVycyhkcnZfZGF0YSk7Ci0KLQkJCWZsdXNoKGRydl9kYXRhKTsKLQkJfQotCi0JCS8qIEVuZCBvZiB0cmFuc2ZlciwgdXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJlZCAqLwotCQltc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbjsKLQotCQkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KLQkJbXNnLT5zdGF0ZSA9IG5leHRfdHJhbnNmZXIoZHJ2X2RhdGEpOwotCi0JCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KLQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKLQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JLyogT3BwcyBwcm9ibGVtIGRldGVjdGVkICovCi0JcmV0dXJuIElSUV9OT05FOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3dyb25seV90cmFuc2ZlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Ci0JdTMyIHN0YXR1czsKLQlpcnFyZXR1cm5fdCBoYW5kbGVkID0gSVJRX05PTkU7Ci0KLQlzdGF0dXMgPSByZWFkbChyZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCi0JaWYgKHN0YXR1cyAmIFNQSV9JTlRFTl9URSkgewotCQkvKiBUWEZJRk8gRW1wdHkgSW50ZXJydXB0IG9uIHRoZSBsYXN0IHRyYW5zZmVyZWQgd29yZCAqLwotCQl3cml0ZWwoc3RhdHVzICYgflNQSV9JTlRFTiwgcmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCSJpbnRlcnJ1cHRfd3Jvbmx5X3RyYW5zZmVyIC0gZW5kIG9mIHR4XG4iKTsKLQotCQlmbHVzaChkcnZfZGF0YSk7Ci0KLQkJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJlZCAqLwotCQltc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbjsKLQotCQkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KLQkJbXNnLT5zdGF0ZSA9IG5leHRfdHJhbnNmZXIoZHJ2X2RhdGEpOwotCi0JCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KLQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKLQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKHN0YXR1cyAmIFNQSV9TVEFUVVNfVEgpIHsKLQkJCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJImludGVycnVwdF93cm9ubHlfdHJhbnNmZXIgLSBzdGF0dXMgPSAweCUwOFhcbiIsCi0JCQkJc3RhdHVzKTsKLQotCQkJLyogUHVtcCBkYXRhICovCi0JCQlpZiAod3JpdGUoZHJ2X2RhdGEpKSB7Ci0JCQkJLyogRW5kIG9mIFRYRklGTyB3cml0ZXMsCi0JCQkJICAgbm93IHdhaXQgdW50aWwgVFhGSUZPIGlzIGVtcHR5ICovCi0JCQkJd3JpdGVsKFNQSV9JTlRFTl9URSwgcmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCQl9Ci0KLQkJCXN0YXR1cyA9IHJlYWRsKHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0KLQkJCS8qIFdlIGRpZCBzb21ldGhpbmcgKi8KLQkJCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKLQkJfQotCX0KLQotCXJldHVybiBoYW5kbGVkOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBkcnZfZGF0YS0+cmVnczsKLQl1MzIgc3RhdHVzLCBjb250cm9sOwotCWlycXJldHVybl90IGhhbmRsZWQgPSBJUlFfTk9ORTsKLQl1bnNpZ25lZCBsb25nIGxpbWl0OwotCi0Jc3RhdHVzID0gcmVhZGwocmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQotCWlmIChzdGF0dXMgJiBTUElfSU5URU5fVEUpIHsKLQkJLyogVFhGSUZPIEVtcHR5IEludGVycnVwdCBvbiB0aGUgbGFzdCB0cmFuc2ZlcmVkIHdvcmQgKi8KLQkJd3JpdGVsKHN0YXR1cyAmIH5TUElfSU5URU4sIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0JCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkiaW50ZXJydXB0X3RyYW5zZmVyIC0gZW5kIG9mIHR4XG4iKTsKLQotCQlpZiAobXNnLT5zdGF0ZSA9PSBFUlJPUl9TVEFURSkgewotCQkJLyogUlhGSUZPIG92ZXJydW4gd2FzIGRldGVjdGVkIGFuZCBtZXNzYWdlIGFib3J0ZWQgKi8KLQkJCWZsdXNoKGRydl9kYXRhKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFdhaXQgZm9yIGVuZCBvZiB0cmFuc2FjdGlvbiAqLwotCQkJZG8gewotCQkJCWNvbnRyb2wgPSByZWFkbChyZWdzICsgU1BJX0NPTlRST0wpOwotCQkJfSB3aGlsZSAoY29udHJvbCAmIFNQSV9DT05UUk9MX1hDSCk7Ci0KLQkJCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCi0JCQkgICBoYW5kbGVkIGluIHB1bXBfdHJhbnNmZXJzICovCi0JCQlpZiAoZHJ2X2RhdGEtPmNzX2NoYW5nZSkKLQkJCQlkcnZfZGF0YS0+Y3NfY29udHJvbChTUElfQ1NfREVBU1NFUlQpOwotCi0JCQkvKiBSZWFkIHRyYWlsaW5nIGJ5dGVzICovCi0JCQlsaW1pdCA9IGxvb3BzX3Blcl9qaWZmeSA8PCAxOwotCQkJd2hpbGUgKChyZWFkKGRydl9kYXRhKSA9PSAwKSAmJiAtLWxpbWl0KQotCQkJCWNwdV9yZWxheCgpOwotCi0JCQlpZiAobGltaXQgPT0gMCkKLQkJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyIC0gIgotCQkJCQkidHJhaWxpbmcgYnl0ZSByZWFkIGZhaWxlZFxuIik7Ci0JCQllbHNlCi0JCQkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkJImludGVycnVwdF90cmFuc2ZlciAtIGVuZCBvZiByeFxuIik7Ci0KLQkJCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgKi8KLQkJCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+bGVuOwotCi0JCQkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KLQkJCW1zZy0+c3RhdGUgPSBuZXh0X3RyYW5zZmVyKGRydl9kYXRhKTsKLQkJfQotCi0JCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KLQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKLQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKHN0YXR1cyAmIChTUElfU1RBVFVTX1RIIHwgU1BJX1NUQVRVU19STykpIHsKLQkJCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJImludGVycnVwdF90cmFuc2ZlciAtIHN0YXR1cyA9IDB4JTA4WFxuIiwKLQkJCQlzdGF0dXMpOwotCi0JCQlpZiAoc3RhdHVzICYgU1BJX1NUQVRVU19STykgewotCQkJCS8qIFJYRklGTyBvdmVycnVuLCBhYm9ydCBtZXNzYWdlIGVuZCB3YWl0Ci0JCQkJICAgdW50aWwgVFhGSUZPIGlzIGVtcHR5ICovCi0JCQkJd3JpdGVsKFNQSV9JTlRFTl9URSwgcmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQotCQkJCWRldl93YXJuKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyIC0gZmlmbyBvdmVydW5cbiIKLQkJCQkJIiAgICBkYXRhIG5vdCB5ZXQgd3JpdHRlbiA9ICVkXG4iCi0JCQkJCSIgICAgZGF0YSBub3QgeWV0IHJlYWQgICAgPSAlZFxuIiwKLQkJCQkJZGF0YV90b193cml0ZShkcnZfZGF0YSksCi0JCQkJCWRhdGFfdG9fcmVhZChkcnZfZGF0YSkpOwotCi0JCQkJbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOwotCi0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCi0JCQkvKiBQdW1wIGRhdGEgKi8KLQkJCXJlYWQoZHJ2X2RhdGEpOwotCQkJaWYgKHdyaXRlKGRydl9kYXRhKSkgewotCQkJCS8qIEVuZCBvZiBUWEZJRk8gd3JpdGVzLAotCQkJCSAgIG5vdyB3YWl0IHVudGlsIFRYRklGTyBpcyBlbXB0eSAqLwotCQkJCXdyaXRlbChTUElfSU5URU5fVEUsIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCi0JCQlzdGF0dXMgPSByZWFkbChyZWdzICsgU1BJX0lOVF9TVEFUVVMpOwotCi0JCQkvKiBXZSBkaWQgc29tZXRoaW5nICovCi0JCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gaGFuZGxlZDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHNwaV9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSAoc3RydWN0IGRyaXZlcl9kYXRhICopZGV2X2lkOwotCi0JaWYgKCFkcnZfZGF0YS0+Y3VyX21zZykgewotCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJInNwaV9pbnQgLSBiYWQgbWVzc2FnZSBzdGF0ZVxuIik7Ci0JCS8qIE5ldmVyIGZhaWwgKi8KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCXJldHVybiBkcnZfZGF0YS0+dHJhbnNmZXJfaGFuZGxlcihkcnZfZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHNwaV9zcGVlZF9oeihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhLCB1MzIgZGF0YV9yYXRlKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoZHJ2X2RhdGEtPmNsaykgLyAoNCA8PCAoKGRhdGFfcmF0ZSkgPj4gMTMpKTsKLX0KLQotc3RhdGljIHUzMiBzcGlfZGF0YV9yYXRlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEsIHUzMiBzcGVlZF9oeikKLXsKLQl1MzIgZGl2OwotCXUzMiBxdWFudGl6ZWRfaHogPSBjbGtfZ2V0X3JhdGUoZHJ2X2RhdGEtPmNsaykgPj4gMjsKLQotCWZvciAoZGl2ID0gU1BJX1BFUkNMSzJfRElWX01JTjsKLQkJZGl2IDw9IFNQSV9QRVJDTEsyX0RJVl9NQVg7Ci0JCWRpdisrLCBxdWFudGl6ZWRfaHogPj49IDEpIHsKLQkJCWlmIChxdWFudGl6ZWRfaHogPD0gc3BlZWRfaHopCi0JCQkJLyogTWF4IGF2YWlsYWJsZSBzcGVlZCBMRVEgcmVxdWlyZWQgc3BlZWQgKi8KLQkJCQlyZXR1cm4gZGl2IDw8IDEzOwotCX0KLQlyZXR1cm4gU1BJX0NPTlRST0xfREFUQVJBVEVfQkFEOwotfQotCi1zdGF0aWMgdm9pZCBwdW1wX3RyYW5zZmVycyh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKilkYXRhOwotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZTsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlciwgKnByZXZpb3VzOwotCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXA7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzOwotCXUzMiB0bXAsIGNvbnRyb2w7Ci0KLQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAicHVtcF90cmFuc2ZlclxuIik7Ci0KLQltZXNzYWdlID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0KLQkvKiBIYW5kbGUgZm9yIGFib3J0ICovCi0JaWYgKG1lc3NhZ2UtPnN0YXRlID09IEVSUk9SX1NUQVRFKSB7Ci0JCW1lc3NhZ2UtPnN0YXR1cyA9IC1FSU87Ci0JCWdpdmViYWNrKG1lc3NhZ2UsIGRydl9kYXRhKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEhhbmRsZSBlbmQgb2YgbWVzc2FnZSAqLwotCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBET05FX1NUQVRFKSB7Ci0JCW1lc3NhZ2UtPnN0YXR1cyA9IDA7Ci0JCWdpdmViYWNrKG1lc3NhZ2UsIGRydl9kYXRhKTsKLQkJcmV0dXJuOwotCX0KLQotCWNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7Ci0KLQkvKiBEZWxheSBpZiByZXF1ZXN0ZWQgYXQgZW5kIG9mIHRyYW5zZmVyKi8KLQl0cmFuc2ZlciA9IGRydl9kYXRhLT5jdXJfdHJhbnNmZXI7Ci0JaWYgKG1lc3NhZ2UtPnN0YXRlID09IFJVTk5JTkdfU1RBVEUpIHsKLQkJcHJldmlvdXMgPSBsaXN0X2VudHJ5KHRyYW5zZmVyLT50cmFuc2Zlcl9saXN0LnByZXYsCi0JCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIsCi0JCQkJCXRyYW5zZmVyX2xpc3QpOwotCQlpZiAocHJldmlvdXMtPmRlbGF5X3VzZWNzKQotCQkJdWRlbGF5KHByZXZpb3VzLT5kZWxheV91c2Vjcyk7Ci0JfSBlbHNlIHsKLQkJLyogU1RBUlRfU1RBVEUgKi8KLQkJbWVzc2FnZS0+c3RhdGUgPSBSVU5OSU5HX1NUQVRFOwotCQlkcnZfZGF0YS0+Y3NfY29udHJvbCA9IGNoaXAtPmNzX2NvbnRyb2w7Ci0JfQotCi0JdHJhbnNmZXIgPSBkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyOwotCWRydl9kYXRhLT50eCA9ICh2b2lkICopdHJhbnNmZXItPnR4X2J1ZjsKLQlkcnZfZGF0YS0+dHhfZW5kID0gZHJ2X2RhdGEtPnR4ICsgdHJhbnNmZXItPmxlbjsKLQlkcnZfZGF0YS0+cnggPSB0cmFuc2Zlci0+cnhfYnVmOwotCWRydl9kYXRhLT5yeF9lbmQgPSBkcnZfZGF0YS0+cnggKyB0cmFuc2Zlci0+bGVuOwotCWRydl9kYXRhLT5yeF9kbWEgPSB0cmFuc2Zlci0+cnhfZG1hOwotCWRydl9kYXRhLT50eF9kbWEgPSB0cmFuc2Zlci0+dHhfZG1hOwotCWRydl9kYXRhLT5sZW4gPSB0cmFuc2Zlci0+bGVuOwotCWRydl9kYXRhLT5jc19jaGFuZ2UgPSB0cmFuc2Zlci0+Y3NfY2hhbmdlOwotCWRydl9kYXRhLT5yZF9vbmx5ID0gKGRydl9kYXRhLT50eCA9PSBOVUxMKTsKLQotCXJlZ3MgPSBkcnZfZGF0YS0+cmVnczsKLQljb250cm9sID0gcmVhZGwocmVncyArIFNQSV9DT05UUk9MKTsKLQotCS8qIEJpdHMgcGVyIHdvcmQgc2V0dXAgKi8KLQl0bXAgPSB0cmFuc2Zlci0+Yml0c19wZXJfd29yZDsKLQlpZiAodG1wID09IDApIHsKLQkJLyogVXNlIGRldmljZSBzZXR1cCAqLwotCQl0bXAgPSBjaGlwLT5iaXRzX3Blcl93b3JkOwotCQlkcnZfZGF0YS0+bl9ieXRlcyA9IGNoaXAtPm5fYnl0ZXM7Ci0JfSBlbHNlCi0JCS8qIFVzZSBwZXItdHJhbnNmZXIgc2V0dXAgKi8KLQkJZHJ2X2RhdGEtPm5fYnl0ZXMgPSAodG1wIDw9IDgpID8gMSA6IDI7Ci0JdTMyX0VESVQoY29udHJvbCwgU1BJX0NPTlRST0xfQklUQ09VTlRfTUFTSywgdG1wIC0gMSk7Ci0KLQkvKiBTcGVlZCBzZXR1cCAoc3VyZWx5IHZhbGlkIGJlY2F1c2UgYWxyZWFkeSBjaGVja2VkKSAqLwotCXRtcCA9IHRyYW5zZmVyLT5zcGVlZF9oejsKLQlpZiAodG1wID09IDApCi0JCXRtcCA9IGNoaXAtPm1heF9zcGVlZF9oejsKLQl0bXAgPSBzcGlfZGF0YV9yYXRlKGRydl9kYXRhLCB0bXApOwotCXUzMl9FRElUKGNvbnRyb2wsIFNQSV9DT05UUk9MX0RBVEFSQVRFLCB0bXApOwotCi0Jd3JpdGVsKGNvbnRyb2wsIHJlZ3MgKyBTUElfQ09OVFJPTCk7Ci0KLQkvKiBBc3NlcnQgZGV2aWNlIGNoaXAtc2VsZWN0ICovCi0JZHJ2X2RhdGEtPmNzX2NvbnRyb2woU1BJX0NTX0FTU0VSVCk7Ci0KLQkvKiBETUEgY2Fubm90IHJlYWQvd3JpdGUgU1BJIEZJRk9zIG90aGVyIHRoYW4gMTYgYml0cyBhdCBhIHRpbWU7IGhlbmNlCi0JICAgaWYgYml0c19wZXJfd29yZCBpcyBsZXNzIG9yIGVxdWFsIDggUElPIHRyYW5zZmVycyBhcmUgcGVyZm9ybWVkLgotCSAgIE1vcmVvdmVyIERNQSBpcyBjb252aW5pZW50IGZvciB0cmFuc2ZlciBsZW5ndGggYmlnZ2VyIHRoYW4gRklGT3MKLQkgICBieXRlIHNpemUuICovCi0JaWYgKChkcnZfZGF0YS0+bl9ieXRlcyA9PSAyKSAmJgotCQkoZHJ2X2RhdGEtPmxlbiA+IFNQSV9GSUZPX0RFUFRIKlNQSV9GSUZPX0JZVEVfV0lEVEgpICYmCi0JCShtYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpID09IDApKSB7Ci0JCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkicHVtcCBkbWEgdHJhbnNmZXJcbiIKLQkJCSIgICAgdHggICAgICA9ICVwXG4iCi0JCQkiICAgIHR4X2RtYSAgPSAlMDhYXG4iCi0JCQkiICAgIHJ4ICAgICAgPSAlcFxuIgotCQkJIiAgICByeF9kbWEgID0gJTA4WFxuIgotCQkJIiAgICBsZW4gICAgID0gJWRcbiIsCi0JCQlkcnZfZGF0YS0+dHgsCi0JCQkodW5zaWduZWQgaW50KWRydl9kYXRhLT50eF9kbWEsCi0JCQlkcnZfZGF0YS0+cngsCi0JCQkodW5zaWduZWQgaW50KWRydl9kYXRhLT5yeF9kbWEsCi0JCQlkcnZfZGF0YS0+bGVuKTsKLQotCQkvKiBFbnN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCQlkcnZfZGF0YS0+dHJhbnNmZXJfaGFuZGxlciA9IGRtYV90cmFuc2ZlcjsKLQotCQkvKiBUcmlnZ2VyIHRyYW5zZmVyICovCi0JCXdyaXRlbChyZWFkbChyZWdzICsgU1BJX0NPTlRST0wpIHwgU1BJX0NPTlRST0xfWENILAotCQkJcmVncyArIFNQSV9DT05UUk9MKTsKLQotCQkvKiBTZXR1cCB0eCBETUEgKi8KLQkJaWYgKGRydl9kYXRhLT50eCkKLQkJCS8qIExpbmVhciBzb3VyY2UgYWRkcmVzcyAqLwotCQkJQ0NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9Ci0JCQkJQ0NSX0RNT0RfRklGTyB8Ci0JCQkJQ0NSX1NNT0RfTElORUFSIHwKLQkJCQlDQ1JfU1NJWl8zMiB8IENDUl9EU0laXzE2IHwKLQkJCQlDQ1JfUkVOOwotCQllbHNlCi0JCQkvKiBSZWFkIG9ubHkgdHJhbnNmZXIgLT4gZml4ZWQgc291cmNlIGFkZHJlc3MgZm9yCi0JCQkgICBkdW1teSB3cml0ZSB0byBhY2hpdmUgcmVhZCAqLwotCQkJQ0NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9Ci0JCQkJQ0NSX0RNT0RfRklGTyB8Ci0JCQkJQ0NSX1NNT0RfRklGTyB8Ci0JCQkJQ0NSX1NTSVpfMzIgfCBDQ1JfRFNJWl8xNiB8Ci0JCQkJQ0NSX1JFTjsKLQotCQlpbXhfZG1hX3NldHVwX3NpbmdsZSgKLQkJCWRydl9kYXRhLT50eF9jaGFubmVsLAotCQkJZHJ2X2RhdGEtPnR4X2RtYSwKLQkJCWRydl9kYXRhLT5sZW4sCi0JCQlkcnZfZGF0YS0+cmRfZGF0YV9waHlzICsgNCwKLQkJCURNQV9NT0RFX1dSSVRFKTsKLQotCQlpZiAoZHJ2X2RhdGEtPnJ4KSB7Ci0JCQkvKiBTZXR1cCByeCBETUEgZm9yIGxpbmVhciBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JCQlDQ1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0KLQkJCQlDQ1JfRE1PRF9MSU5FQVIgfAotCQkJCUNDUl9TTU9EX0ZJRk8gfAotCQkJCUNDUl9EU0laXzMyIHwgQ0NSX1NTSVpfMTYgfAotCQkJCUNDUl9SRU47Ci0JCQlpbXhfZG1hX3NldHVwX3NpbmdsZSgKLQkJCQlkcnZfZGF0YS0+cnhfY2hhbm5lbCwKLQkJCQlkcnZfZGF0YS0+cnhfZG1hLAotCQkJCWRydl9kYXRhLT5sZW4sCi0JCQkJZHJ2X2RhdGEtPnJkX2RhdGFfcGh5cywKLQkJCQlETUFfTU9ERV9SRUFEKTsKLQkJCWlteF9kbWFfZW5hYmxlKGRydl9kYXRhLT5yeF9jaGFubmVsKTsKLQotCQkJLyogRW5hYmxlIFNQSSBpbnRlcnJ1cHQgKi8KLQkJCXdyaXRlbChTUElfSU5URU5fUk8sIHJlZ3MgKyBTUElfSU5UX1NUQVRVUyk7Ci0KLQkJCS8qIFNldCBTUEkgdG8gcmVxdWVzdCBETUEgc2VydmljZSBvbiBib3RoCi0JCQkgICBSeCBhbmQgVHggaGFsZiBmaWZvIHdhdGVybWFyayAqLwotCQkJd3JpdGVsKFNQSV9ETUFfUkhERU4gfCBTUElfRE1BX1RIREVOLCByZWdzICsgU1BJX0RNQSk7Ci0JCX0gZWxzZQotCQkJLyogV3JpdGUgb25seSBhY2Nlc3MgLT4gc2V0IFNQSSB0byByZXF1ZXN0IERNQQotCQkJICAgc2VydmljZSBvbiBUeCBoYWxmIGZpZm8gd2F0ZXJtYXJrICovCi0JCQl3cml0ZWwoU1BJX0RNQV9USERFTiwgcmVncyArIFNQSV9ETUEpOwotCi0JCWlteF9kbWFfZW5hYmxlKGRydl9kYXRhLT50eF9jaGFubmVsKTsKLQl9IGVsc2UgewotCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJInB1bXAgcGlvIHRyYW5zZmVyXG4iCi0JCQkiICAgIHR4ICAgICAgPSAlcFxuIgotCQkJIiAgICByeCAgICAgID0gJXBcbiIKLQkJCSIgICAgbGVuICAgICA9ICVkXG4iLAotCQkJZHJ2X2RhdGEtPnR4LAotCQkJZHJ2X2RhdGEtPnJ4LAotCQkJZHJ2X2RhdGEtPmxlbik7Ci0KLQkJLyogRW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgaW50ZXJydXB0IGhhbmRsZXIJKi8KLQkJaWYgKGRydl9kYXRhLT5yeCkKLQkJCWRydl9kYXRhLT50cmFuc2Zlcl9oYW5kbGVyID0gaW50ZXJydXB0X3RyYW5zZmVyOwotCQllbHNlCi0JCQlkcnZfZGF0YS0+dHJhbnNmZXJfaGFuZGxlciA9IGludGVycnVwdF93cm9ubHlfdHJhbnNmZXI7Ci0KLQkJLyogRW5hYmxlIFNQSSBpbnRlcnJ1cHQgKi8KLQkJaWYgKGRydl9kYXRhLT5yeCkKLQkJCXdyaXRlbChTUElfSU5URU5fVEggfCBTUElfSU5URU5fUk8sCi0JCQkJcmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQkJZWxzZQotCQkJd3JpdGVsKFNQSV9JTlRFTl9USCwgcmVncyArIFNQSV9JTlRfU1RBVFVTKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHB1bXBfbWVzc2FnZXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPQotCQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJpdmVyX2RhdGEsIHdvcmspOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBMb2NrIHF1ZXVlIGFuZCBjaGVjayBmb3IgcXVldWUgd29yayAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCWlmIChsaXN0X2VtcHR5KCZkcnZfZGF0YS0+cXVldWUpIHx8IGRydl9kYXRhLT5ydW4gPT0gUVVFVUVfU1RPUFBFRCkgewotCQlkcnZfZGF0YS0+YnVzeSA9IDA7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBhbHJlYWR5IHJ1bm5pbmcgYSBtZXNzYWdlICovCi0JaWYgKGRydl9kYXRhLT5jdXJfbXNnKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBFeHRyYWN0IGhlYWQgb2YgcXVldWUgKi8KLQlkcnZfZGF0YS0+Y3VyX21zZyA9IGxpc3RfZW50cnkoZHJ2X2RhdGEtPnF1ZXVlLm5leHQsCi0JCQkJCXN0cnVjdCBzcGlfbWVzc2FnZSwgcXVldWUpOwotCWxpc3RfZGVsX2luaXQoJmRydl9kYXRhLT5jdXJfbXNnLT5xdWV1ZSk7Ci0JZHJ2X2RhdGEtPmJ1c3kgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBJbml0aWFsIG1lc3NhZ2Ugc3RhdGUgKi8KLQlkcnZfZGF0YS0+Y3VyX21zZy0+c3RhdGUgPSBTVEFSVF9TVEFURTsKLQlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0gbGlzdF9lbnRyeShkcnZfZGF0YS0+Y3VyX21zZy0+dHJhbnNmZXJzLm5leHQsCi0JCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAotCQkJCQkJdHJhbnNmZXJfbGlzdCk7Ci0KLQkvKiBTZXR1cCB0aGUgU1BJIHVzaW5nIHRoZSBwZXIgY2hpcCBjb25maWd1cmF0aW9uICovCi0JZHJ2X2RhdGEtPmN1cl9jaGlwID0gc3BpX2dldF9jdGxkYXRhKGRydl9kYXRhLT5jdXJfbXNnLT5zcGkpOwotCXJlc3RvcmVfc3RhdGUoZHJ2X2RhdGEpOwotCi0JLyogTWFyayBhcyBidXN5IGFuZCBsYXVuY2ggdHJhbnNmZXJzICovCi0JdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKLX0KLQotc3RhdGljIGludCB0cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0JdTMyIG1pbl9zcGVlZF9oeiwgbWF4X3NwZWVkX2h6LCB0bXA7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCW1zZy0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0KLQkvKiBQZXIgdHJhbnNmZXIgc2V0dXAgY2hlY2sgKi8KLQltaW5fc3BlZWRfaHogPSBzcGlfc3BlZWRfaHooZHJ2X2RhdGEsIFNQSV9DT05UUk9MX0RBVEFSQVRFX01JTik7Ci0JbWF4X3NwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7Ci0JCXRtcCA9IHRyYW5zLT5iaXRzX3Blcl93b3JkOwotCQlpZiAodG1wID4gMTYpIHsKLQkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJIm1lc3NhZ2UgcmVqZWN0ZWQgOiAiCi0JCQkJImludmFsaWQgdHJhbnNmZXIgYml0c19wZXJfd29yZCAoJWQgYml0cylcbiIsCi0JCQkJdG1wKTsKLQkJCWdvdG8gbXNnX3JlamVjdGVkOwotCQl9Ci0JCXRtcCA9IHRyYW5zLT5zcGVlZF9oejsKLQkJaWYgKHRtcCkgewotCQkJaWYgKHRtcCA8IG1pbl9zcGVlZF9oeikgewotCQkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJCSJtZXNzYWdlIHJlamVjdGVkIDogIgotCQkJCQkiZGV2aWNlIG1pbiBzcGVlZCAoJWQgSHopIGV4Y2VlZHMgIgotCQkJCQkicmVxdWlyZWQgdHJhbnNmZXIgc3BlZWQgKCVkIEh6KVxuIiwKLQkJCQkJbWluX3NwZWVkX2h6LAotCQkJCQl0bXApOwotCQkJCWdvdG8gbXNnX3JlamVjdGVkOwotCQkJfSBlbHNlIGlmICh0bXAgPiBtYXhfc3BlZWRfaHopIHsKLQkJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCQkibWVzc2FnZSByZWplY3RlZCA6ICIKLQkJCQkJInRyYW5zZmVyIHNwZWVkICglZCBIeikgZXhjZWVkcyAiCi0JCQkJCSJkZXZpY2UgbWF4IHNwZWVkICglZCBIeilcbiIsCi0JCQkJCXRtcCwKLQkJCQkJbWF4X3NwZWVkX2h6KTsKLQkJCQlnb3RvIG1zZ19yZWplY3RlZDsKLQkJCX0KLQkJfQotCX0KLQotCS8qIE1lc3NhZ2UgYWNjZXB0ZWQgKi8KLQltc2ctPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKLQltc2ctPnN0YXRlID0gU1RBUlRfU1RBVEU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQlpZiAoZHJ2X2RhdGEtPnJ1biA9PSBRVUVVRV9TVE9QUEVEKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRVNIVVRET1dOOwotCX0KLQotCWxpc3RfYWRkX3RhaWwoJm1zZy0+cXVldWUsICZkcnZfZGF0YS0+cXVldWUpOwotCWlmIChkcnZfZGF0YS0+cnVuID09IFFVRVVFX1JVTk5JTkcgJiYgIWRydl9kYXRhLT5idXN5KQotCQlxdWV1ZV93b3JrKGRydl9kYXRhLT53b3JrcXVldWUsICZkcnZfZGF0YS0+d29yayk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotCi1tc2dfcmVqZWN0ZWQ6Ci0JLyogTWVzc2FnZSByZWplY3RlZCBhbmQgbm90IHF1ZXVlZCAqLwotCW1zZy0+c3RhdHVzID0gLUVJTlZBTDsKLQltc2ctPnN0YXRlID0gRVJST1JfU1RBVEU7Ci0JaWYgKG1zZy0+Y29tcGxldGUpCi0JCW1zZy0+Y29tcGxldGUobXNnLT5jb250ZXh0KTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyogT24gZmlyc3Qgc2V0dXAgYmFkIHZhbHVlcyBtdXN0IGZyZWUgY2hpcF9kYXRhIG1lbW9yeSBzaW5jZSB3aWxsIGNhdXNlCi0gICBzcGlfbmV3X2RldmljZSB0byBmYWlsLiBCYWQgdmFsdWUgc2V0dXAgZnJvbSBwcm90b2NvbCBkcml2ZXIgYXJlIHNpbXBseSBub3QKLSAgIGFwcGxpZWQgYW5kIG5vdGlmaWVkIHRvIHRoZSBjYWxsaW5nIGRyaXZlci4gKi8KLXN0YXRpYyBpbnQgc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0Jc3RydWN0IHNwaV9pbXhfY2hpcCAqY2hpcF9pbmZvOwotCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXA7Ci0JaW50IGZpcnN0X3NldHVwID0gMDsKLQl1MzIgdG1wOwotCWludCBzdGF0dXMgPSAwOwotCi0JLyogR2V0IGNvbnRyb2xsZXIgZGF0YSAqLwotCWNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOwotCi0JLyogR2V0IGNvbnRyb2xsZXJfc3RhdGUgKi8KLQljaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7Ci0JaWYgKGNoaXAgPT0gTlVMTCkgewotCQlmaXJzdF9zZXR1cCA9IDE7Ci0KLQkJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGlwX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjaGlwKSB7Ci0JCQlkZXZfZXJyKCZzcGktPmRldiwKLQkJCQkic2V0dXAgLSBjYW5ub3QgYWxsb2NhdGUgY29udHJvbGxlciBzdGF0ZVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQljaGlwLT5jb250cm9sID0gU1BJX0RFRkFVTFRfQ09OVFJPTDsKLQotCQlpZiAoY2hpcF9pbmZvID09IE5VTEwpIHsKLQkJCS8qIHNwaV9ib2FyZF9pbmZvLmNvbnRyb2xsZXJfZGF0YSBub3QgaXMgc3VwcGxpZWQgKi8KLQkJCWNoaXBfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcGlfaW14X2NoaXApLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNoaXBfaW5mbykgewotCQkJCWRldl9lcnIoJnNwaS0+ZGV2LAotCQkJCQkic2V0dXAgLSAiCi0JCQkJCSJjYW5ub3QgYWxsb2NhdGUgY29udHJvbGxlciBkYXRhXG4iKTsKLQkJCQlzdGF0dXMgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyX2ZpcnN0X3NldHVwOwotCQkJfQotCQkJLyogU2V0IGNvbnRyb2xsZXIgZGF0YSBkZWZhdWx0IHZhbHVlICovCi0JCQljaGlwX2luZm8tPmVuYWJsZV9sb29wYmFjayA9Ci0JCQkJCQlTUElfREVGQVVMVF9FTkFCTEVfTE9PUEJBQ0s7Ci0JCQljaGlwX2luZm8tPmVuYWJsZV9kbWEgPSBTUElfREVGQVVMVF9FTkFCTEVfRE1BOwotCQkJY2hpcF9pbmZvLT5pbnNfc3NfcHVsc2UgPSAxOwotCQkJY2hpcF9pbmZvLT5iY2xrX3dhaXQgPSBTUElfREVGQVVMVF9QRVJJT0RfV0FJVDsKLQkJCWNoaXBfaW5mby0+Y3NfY29udHJvbCA9IG51bGxfY3NfY29udHJvbDsKLQkJfQotCX0KLQotCS8qIE5vdyBzZXQgY29udHJvbGxlciBzdGF0ZSBiYXNlZCBvbiBjb250cm9sbGVyIGRhdGEgKi8KLQotCWlmIChmaXJzdF9zZXR1cCkgewotCQkvKiBTUEkgbG9vcGJhY2sgKi8KLQkJaWYgKGNoaXBfaW5mby0+ZW5hYmxlX2xvb3BiYWNrKQotCQkJY2hpcC0+dGVzdCA9IFNQSV9URVNUX0xCQzsKLQkJZWxzZQotCQkJY2hpcC0+dGVzdCA9IDA7Ci0KLQkJLyogU1BJIGRtYSBkcml2ZW4gKi8KLQkJY2hpcC0+ZW5hYmxlX2RtYSA9IGNoaXBfaW5mby0+ZW5hYmxlX2RtYTsKLQotCQkvKiBTUEkgL1NTIHB1bHNlIGJldHdlZW4gc3BpIGJ1cnN0ICovCi0JCWlmIChjaGlwX2luZm8tPmluc19zc19wdWxzZSkKLQkJCXUzMl9FRElUKGNoaXAtPmNvbnRyb2wsCi0JCQkJU1BJX0NPTlRST0xfU1NDVEwsIFNQSV9DT05UUk9MX1NTQ1RMXzEpOwotCQllbHNlCi0JCQl1MzJfRURJVChjaGlwLT5jb250cm9sLAotCQkJCVNQSV9DT05UUk9MX1NTQ1RMLCBTUElfQ09OVFJPTF9TU0NUTF8wKTsKLQotCQkvKiBTUEkgYmNsayB3YWl0cyBiZXR3ZWVuIGVhY2ggYml0c19wZXJfd29yZCBzcGkgYnVyc3QgKi8KLQkJaWYgKGNoaXBfaW5mby0+YmNsa193YWl0ID4gU1BJX1BFUklPRF9NQVhfV0FJVCkgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsCi0JCQkJInNldHVwIC0gIgotCQkJCSJiY2xrX3dhaXQgZXhjZWVkcyBtYXggYWxsb3dlZCAoJWQpXG4iLAotCQkJCVNQSV9QRVJJT0RfTUFYX1dBSVQpOwotCQkJZ290byBlcnJfZmlyc3Rfc2V0dXA7Ci0JCX0KLQkJY2hpcC0+cGVyaW9kID0gU1BJX1BFUklPRF9DU1JDX0JDTEsgfAotCQkJCShjaGlwX2luZm8tPmJjbGtfd2FpdCAmIFNQSV9QRVJJT0RfV0FJVCk7Ci0JfQotCi0JLyogU1BJIG1vZGUgKi8KLQl0bXAgPSBzcGktPm1vZGU7Ci0JaWYgKHRtcCAmIFNQSV9DU19ISUdIKSB7Ci0JCXUzMl9FRElUKGNoaXAtPmNvbnRyb2wsCi0JCQkJU1BJX0NPTlRST0xfU1NQT0wsIFNQSV9DT05UUk9MX1NTUE9MX0FDVF9ISUdIKTsKLQl9Ci0Jc3dpdGNoICh0bXAgJiBTUElfTU9ERV8zKSB7Ci0JY2FzZSBTUElfTU9ERV8wOgotCQl0bXAgPSAwOwotCQlicmVhazsKLQljYXNlIFNQSV9NT0RFXzE6Ci0JCXRtcCA9IFNQSV9DT05UUk9MX1BIQV8xOwotCQlicmVhazsKLQljYXNlIFNQSV9NT0RFXzI6Ci0JCXRtcCA9IFNQSV9DT05UUk9MX1BPTF9BQ1RfTE9XOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBTUElfTU9ERV8zICovCi0JCXRtcCA9IFNQSV9DT05UUk9MX1BIQV8xIHwgU1BJX0NPTlRST0xfUE9MX0FDVF9MT1c7Ci0JCWJyZWFrOwotCX0KLQl1MzJfRURJVChjaGlwLT5jb250cm9sLCBTUElfQ09OVFJPTF9QT0wgfCBTUElfQ09OVFJPTF9QSEEsIHRtcCk7Ci0KLQkvKiBTUEkgd29yZCB3aWR0aCAqLwotCXRtcCA9IHNwaS0+Yml0c19wZXJfd29yZDsKLQlpZiAodG1wID4gMTYpIHsKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJZGV2X2Vycigmc3BpLT5kZXYsCi0JCQkic2V0dXAgLSAiCi0JCQkiaW52YWxpZCBiaXRzX3Blcl93b3JkICglZClcbiIsCi0JCQl0bXApOwotCQlpZiAoZmlyc3Rfc2V0dXApCi0JCQlnb3RvIGVycl9maXJzdF9zZXR1cDsKLQkJZWxzZSB7Ci0JCQkvKiBVbmRvIHNldHVwIHVzaW5nIGNoaXAgYXMgYmFja3VwIGNvcHkgKi8KLQkJCXRtcCA9IGNoaXAtPmJpdHNfcGVyX3dvcmQ7Ci0JCQlzcGktPmJpdHNfcGVyX3dvcmQgPSB0bXA7Ci0JCX0KLQl9Ci0JY2hpcC0+Yml0c19wZXJfd29yZCA9IHRtcDsKLQl1MzJfRURJVChjaGlwLT5jb250cm9sLCBTUElfQ09OVFJPTF9CSVRDT1VOVF9NQVNLLCB0bXAgLSAxKTsKLQljaGlwLT5uX2J5dGVzID0gKHRtcCA8PSA4KSA/IDEgOiAyOwotCi0JLyogU1BJIGRhdGFyYXRlICovCi0JdG1wID0gc3BpX2RhdGFfcmF0ZShkcnZfZGF0YSwgc3BpLT5tYXhfc3BlZWRfaHopOwotCWlmICh0bXAgPT0gU1BJX0NPTlRST0xfREFUQVJBVEVfQkFEKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LAotCQkJInNldHVwIC0gIgotCQkJIkhXIG1pbiBzcGVlZCAoJWQgSHopIGV4Y2VlZHMgcmVxdWlyZWQgIgotCQkJIm1heCBzcGVlZCAoJWQgSHopXG4iLAotCQkJc3BpX3NwZWVkX2h6KGRydl9kYXRhLCBTUElfQ09OVFJPTF9EQVRBUkFURV9NSU4pLAotCQkJc3BpLT5tYXhfc3BlZWRfaHopOwotCQlpZiAoZmlyc3Rfc2V0dXApCi0JCQlnb3RvIGVycl9maXJzdF9zZXR1cDsKLQkJZWxzZQotCQkJLyogVW5kbyBzZXR1cCB1c2luZyBjaGlwIGFzIGJhY2t1cCBjb3B5ICovCi0JCQlzcGktPm1heF9zcGVlZF9oeiA9IGNoaXAtPm1heF9zcGVlZF9oejsKLQl9IGVsc2UgewotCQl1MzJfRURJVChjaGlwLT5jb250cm9sLCBTUElfQ09OVFJPTF9EQVRBUkFURSwgdG1wKTsKLQkJLyogQWN0dWFsIHJvdW5kZWQgbWF4X3NwZWVkX2h6ICovCi0JCXRtcCA9IHNwaV9zcGVlZF9oeihkcnZfZGF0YSwgdG1wKTsKLQkJc3BpLT5tYXhfc3BlZWRfaHogPSB0bXA7Ci0JCWNoaXAtPm1heF9zcGVlZF9oeiA9IHRtcDsKLQl9Ci0KLQkvKiBTUEkgY2hpcC1zZWxlY3QgbWFuYWdlbWVudCAqLwotCWlmIChjaGlwX2luZm8tPmNzX2NvbnRyb2wpCi0JCWNoaXAtPmNzX2NvbnRyb2wgPSBjaGlwX2luZm8tPmNzX2NvbnRyb2w7Ci0JZWxzZQotCQljaGlwLT5jc19jb250cm9sID0gbnVsbF9jc19jb250cm9sOwotCi0JLyogU2F2ZSBjb250cm9sbGVyX3N0YXRlICovCi0Jc3BpX3NldF9jdGxkYXRhKHNwaSwgY2hpcCk7Ci0KLQkvKiBTdW1tYXJ5ICovCi0JZGV2X2RiZygmc3BpLT5kZXYsCi0JCSJzZXR1cCBzdWNjZWRlZFxuIgotCQkiICAgIGxvb3BiYWNrIGVuYWJsZSAgID0gJXNcbiIKLQkJIiAgICBkbWEgZW5hYmxlICAgICAgICA9ICVzXG4iCi0JCSIgICAgaW5zZXJ0IC9zcyBwdWxzZSAgPSAlc1xuIgotCQkiICAgIHBlcmlvZCB3YWl0ICAgICAgID0gJWRcbiIKLQkJIiAgICBtb2RlICAgICAgICAgICAgICA9ICVkXG4iCi0JCSIgICAgYml0cyBwZXIgd29yZCAgICAgPSAlZFxuIgotCQkiICAgIG1pbiBzcGVlZCAgICAgICAgID0gJWQgSHpcbiIKLQkJIiAgICByb3VuZGVkIG1heCBzcGVlZCA9ICVkIEh6XG4iLAotCQljaGlwLT50ZXN0ICYgU1BJX1RFU1RfTEJDID8gIlllcyIgOiAiTm8iLAotCQljaGlwLT5lbmFibGVfZG1hID8gIlllcyIgOiAiTm8iLAotCQljaGlwLT5jb250cm9sICYgU1BJX0NPTlRST0xfU1NDVEwgPyAiWWVzIiA6ICJObyIsCi0JCWNoaXAtPnBlcmlvZCAmIFNQSV9QRVJJT0RfV0FJVCwKLQkJc3BpLT5tb2RlLAotCQlzcGktPmJpdHNfcGVyX3dvcmQsCi0JCXNwaV9zcGVlZF9oeihkcnZfZGF0YSwgU1BJX0NPTlRST0xfREFUQVJBVEVfTUlOKSwKLQkJc3BpLT5tYXhfc3BlZWRfaHopOwotCXJldHVybiBzdGF0dXM7Ci0KLWVycl9maXJzdF9zZXR1cDoKLQlrZnJlZShjaGlwKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Ja2ZyZWUoc3BpX2dldF9jdGxkYXRhKHNwaSkpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3F1ZXVlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0JSU5JVF9MSVNUX0hFQUQoJmRydl9kYXRhLT5xdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRydl9kYXRhLT5sb2NrKTsKLQotCWRydl9kYXRhLT5ydW4gPSBRVUVVRV9TVE9QUEVEOwotCWRydl9kYXRhLT5idXN5ID0gMDsKLQotCXRhc2tsZXRfaW5pdCgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzLAotCQkJcHVtcF90cmFuc2ZlcnMsCSh1bnNpZ25lZCBsb25nKWRydl9kYXRhKTsKLQotCUlOSVRfV09SSygmZHJ2X2RhdGEtPndvcmssIHB1bXBfbWVzc2FnZXMpOwotCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7Ci0JaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0YXJ0X3F1ZXVlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGRydl9kYXRhLT5ydW4gPT0gUVVFVUVfUlVOTklORyB8fCBkcnZfZGF0YS0+YnVzeSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWRydl9kYXRhLT5ydW4gPSBRVUVVRV9SVU5OSU5HOwotCWRydl9kYXRhLT5jdXJfbXNnID0gTlVMTDsKLQlkcnZfZGF0YS0+Y3VyX3RyYW5zZmVyID0gTlVMTDsKLQlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0KLQlxdWV1ZV93b3JrKGRydl9kYXRhLT53b3JrcXVldWUsICZkcnZfZGF0YS0+d29yayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdG9wX3F1ZXVlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsaW1pdCA9IDUwMDsKLQlpbnQgc3RhdHVzID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCi0JLyogVGhpcyBpcyBhIGJpdCBsYW1lLCBidXQgaXMgb3B0aW1pemVkIGZvciB0aGUgY29tbW9uIGV4ZWN1dGlvbiBwYXRoLgotCSAqIEEgd2FpdF9xdWV1ZSBvbiB0aGUgZHJ2X2RhdGEtPmJ1c3kgY291bGQgYmUgdXNlZCwgYnV0IHRoZW4gdGhlIGNvbW1vbgotCSAqIGV4ZWN1dGlvbiBwYXRoIChwdW1wX21lc3NhZ2VzKSB3b3VsZCBiZSByZXF1aXJlZCB0byBjYWxsIHdha2VfdXAgb3IKLQkgKiBmcmllbmRzIG9uIGV2ZXJ5IFNQSSBtZXNzYWdlLiBEbyB0aGlzIGluc3RlYWQgKi8KLQlkcnZfZGF0YS0+cnVuID0gUVVFVUVfU1RPUFBFRDsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRydl9kYXRhLT5xdWV1ZSkgJiYgZHJ2X2RhdGEtPmJ1c3kgJiYgbGltaXQtLSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwotCQltc2xlZXAoMTApOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKLQl9Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmRydl9kYXRhLT5xdWV1ZSkgfHwgZHJ2X2RhdGEtPmJ1c3kpCi0JCXN0YXR1cyA9IC1FQlVTWTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydl9kYXRhLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGRlc3Ryb3lfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gc3RvcF9xdWV1ZShkcnZfZGF0YSk7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKGRydl9kYXRhLT53b3JrcXVldWUpCi0JCWRlc3Ryb3lfd29ya3F1ZXVlKGRydl9kYXRhLT53b3JrcXVldWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNwaV9pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCXN0cnVjdCBzcGlfaW14X21hc3RlciAqcGxhdGZvcm1faW5mbzsKLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGE7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGlycSwgc3RhdHVzID0gMDsKLQotCXBsYXRmb3JtX2luZm8gPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaWYgKHBsYXRmb3JtX2luZm8gPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIG5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOwotCQlzdGF0dXMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9ub19wZGF0YTsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBtYXN0ZXIgd2l0aCBzcGFjZSBmb3IgZHJ2X2RhdGEgKi8KLQltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKGRldiwgc2l6ZW9mKHN0cnVjdCBkcml2ZXJfZGF0YSkpOwotCWlmICghbWFzdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JlIC0gY2Fubm90IGFsbG9jIHNwaV9tYXN0ZXJcbiIpOwotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9ub19tZW07Ci0JfQotCWRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCWRydl9kYXRhLT5tYXN0ZXIgPSBtYXN0ZXI7Ci0JZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvID0gcGxhdGZvcm1faW5mbzsKLQlkcnZfZGF0YS0+cGRldiA9IHBkZXY7Ci0KLQkvKiB0aGUgc3BpLT5tb2RlIGJpdHMgdW5kZXJzdG9vZCBieSB0aGlzIGRyaXZlcjogKi8KLQltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfQ1NfSElHSDsKLQotCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOwotCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwbGF0Zm9ybV9pbmZvLT5udW1fY2hpcHNlbGVjdDsKLQltYXN0ZXItPmRtYV9hbGlnbm1lbnQgPSBETUFfQUxJR05NRU5UOwotCW1hc3Rlci0+Y2xlYW51cCA9IGNsZWFudXA7Ci0JbWFzdGVyLT5zZXR1cCA9IHNldHVwOwotCW1hc3Rlci0+dHJhbnNmZXIgPSB0cmFuc2ZlcjsKLQotCWRydl9kYXRhLT5kdW1teV9kbWFfYnVmID0gU1BJX0RVTU1ZX3UzMjsKLQotCWRydl9kYXRhLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwZXJjbGsyIik7Ci0JaWYgKElTX0VSUihkcnZfZGF0YS0+Y2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIGNhbm5vdCBnZXQgY2xvY2tcbiIpOwotCQlzdGF0dXMgPSBQVFJfRVJSKGRydl9kYXRhLT5jbGspOwotCQlnb3RvIGVycl9ub19jbGs7Ci0JfQotCWNsa19lbmFibGUoZHJ2X2RhdGEtPmNsayk7Ci0KLQkvKiBGaW5kIGFuZCBtYXAgcmVzb3VyY2VzICovCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIE1FTSByZXNvdXJjZXMgbm90IGRlZmluZWRcbiIpOwotCQlzdGF0dXMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9ub19pb3JlczsKLQl9Ci0JZHJ2X2RhdGEtPmlvYXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LAotCQkJCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKLQkJCQkJCXBkZXYtPm5hbWUpOwotCWlmIChkcnZfZGF0YS0+aW9hcmVhID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBjYW5ub3QgcmVzZXJ2ZSByZWdpb25cbiIpOwotCQlzdGF0dXMgPSAtRU5YSU87Ci0JCWdvdG8gZXJyX25vX2lvcmVzOwotCX0KLQlkcnZfZGF0YS0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7Ci0JaWYgKGRydl9kYXRhLT5yZWdzID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBjYW5ub3QgbWFwIElPXG4iKTsKLQkJc3RhdHVzID0gLUVOWElPOwotCQlnb3RvIGVycl9ub19pb21hcDsKLQl9Ci0JZHJ2X2RhdGEtPnJkX2RhdGFfcGh5cyA9IChkbWFfYWRkcl90KXJlcy0+c3RhcnQ7Ci0KLQkvKiBBdHRhY2ggdG8gSVJRICovCi0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIElSUSByZXNvdXJjZSBub3QgZGVmaW5lZFxuIik7Ci0JCXN0YXR1cyA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX25vX2lycXJlczsKLQl9Ci0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoaXJxLCBzcGlfaW50LCBJUlFGX0RJU0FCTEVELAotCQkJICAgICBkZXZfbmFtZShkZXYpLCBkcnZfZGF0YSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBjYW5ub3QgZ2V0IElSUSAoJWQpXG4iLCBzdGF0dXMpOwotCQlnb3RvIGVycl9ub19pcnFyZXM7Ci0JfQotCi0JLyogU2V0dXAgRE1BIGlmIHJlcXVlc3RlZCAqLwotCWRydl9kYXRhLT50eF9jaGFubmVsID0gLTE7Ci0JZHJ2X2RhdGEtPnJ4X2NoYW5uZWwgPSAtMTsKLQlpZiAocGxhdGZvcm1faW5mby0+ZW5hYmxlX2RtYSkgewotCQkvKiBHZXQgcnggRE1BIGNoYW5uZWwgKi8KLQkJZHJ2X2RhdGEtPnJ4X2NoYW5uZWwgPSBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbygic3BpX2lteF9yeCIsCi0JCQkJCQkJICAgICAgIERNQV9QUklPX0hJR0gpOwotCQlpZiAoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwgPCAwKSB7Ci0JCQlkZXZfZXJyKGRldiwKLQkJCQkicHJvYmUgLSBwcm9ibGVtICglZCkgcmVxdWVzdGluZyByeCBjaGFubmVsXG4iLAotCQkJCWRydl9kYXRhLT5yeF9jaGFubmVsKTsKLQkJCWdvdG8gZXJyX25vX3J4ZG1hOwotCQl9IGVsc2UKLQkJCWlteF9kbWFfc2V0dXBfaGFuZGxlcnMoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwsIE5VTEwsCi0JCQkJCQlkbWFfZXJyX2hhbmRsZXIsIGRydl9kYXRhKTsKLQotCQkvKiBHZXQgdHggRE1BIGNoYW5uZWwgKi8KLQkJZHJ2X2RhdGEtPnR4X2NoYW5uZWwgPSBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbygic3BpX2lteF90eCIsCi0JCQkJCQkJICAgICAgIERNQV9QUklPX01FRElVTSk7Ci0JCWlmIChkcnZfZGF0YS0+dHhfY2hhbm5lbCA8IDApIHsKLQkJCWRldl9lcnIoZGV2LAotCQkJCSJwcm9iZSAtIHByb2JsZW0gKCVkKSByZXF1ZXN0aW5nIHR4IGNoYW5uZWxcbiIsCi0JCQkJZHJ2X2RhdGEtPnR4X2NoYW5uZWwpOwotCQkJaW14X2RtYV9mcmVlKGRydl9kYXRhLT5yeF9jaGFubmVsKTsKLQkJCWdvdG8gZXJyX25vX3R4ZG1hOwotCQl9IGVsc2UKLQkJCWlteF9kbWFfc2V0dXBfaGFuZGxlcnMoZHJ2X2RhdGEtPnR4X2NoYW5uZWwsCi0JCQkJCQlkbWFfdHhfaGFuZGxlciwgZG1hX2Vycl9oYW5kbGVyLAotCQkJCQkJZHJ2X2RhdGEpOwotCi0JCS8qIFNldCByZXF1ZXN0IHNvdXJjZSBhbmQgYnVyc3QgbGVuZ3RoIGZvciBhbGxvY2F0ZWQgY2hhbm5lbHMgKi8KLQkJc3dpdGNoIChkcnZfZGF0YS0+cGRldi0+aWQpIHsKLQkJY2FzZSAxOgotCQkJLyogVXNpbmcgU1BJMSAqLwotCQkJUlNTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBETUFfUkVRX1NQSTFfUjsKLQkJCVJTU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gRE1BX1JFUV9TUEkxX1Q7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJLyogVXNpbmcgU1BJMiAqLwotCQkJUlNTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBETUFfUkVRX1NQSTJfUjsKLQkJCVJTU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gRE1BX1JFUV9TUEkyX1Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIoZGV2LCAicHJvYmUgLSBiYWQgU1BJIElkXG4iKTsKLQkJCWlteF9kbWFfZnJlZShkcnZfZGF0YS0+cnhfY2hhbm5lbCk7Ci0JCQlpbXhfZG1hX2ZyZWUoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpOwotCQkJc3RhdHVzID0gLUVOT0RFVjsKLQkJCWdvdG8gZXJyX25vX2RldmlkOwotCQl9Ci0JCUJMUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBTUElfRE1BX0JMUjsKLQkJQkxSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFNQSV9ETUFfQkxSOwotCX0KLQotCS8qIExvYWQgZGVmYXVsdCBTUEkgY29uZmlndXJhdGlvbiAqLwotCXdyaXRlbChTUElfUkVTRVRfU1RBUlQsIGRydl9kYXRhLT5yZWdzICsgU1BJX1JFU0VUKTsKLQl3cml0ZWwoMCwgZHJ2X2RhdGEtPnJlZ3MgKyBTUElfUkVTRVQpOwotCXdyaXRlbChTUElfREVGQVVMVF9DT05UUk9MLCBkcnZfZGF0YS0+cmVncyArIFNQSV9DT05UUk9MKTsKLQotCS8qIEluaXRpYWwgYW5kIHN0YXJ0IHF1ZXVlICovCi0Jc3RhdHVzID0gaW5pdF9xdWV1ZShkcnZfZGF0YSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JlIC0gcHJvYmxlbSBpbml0aWFsaXppbmcgcXVldWVcbiIpOwotCQlnb3RvIGVycl9pbml0X3F1ZXVlOwotCX0KLQlzdGF0dXMgPSBzdGFydF9xdWV1ZShkcnZfZGF0YSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JlIC0gcHJvYmxlbSBzdGFydGluZyBxdWV1ZVxuIik7Ci0JCWdvdG8gZXJyX3N0YXJ0X3F1ZXVlOwotCX0KLQotCS8qIFJlZ2lzdGVyIHdpdGggdGhlIFNQSSBmcmFtZXdvcmsgKi8KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcnZfZGF0YSk7Ci0Jc3RhdHVzID0gc3BpX3JlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOwotCWlmIChzdGF0dXMgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9iZSAtIHByb2JsZW0gcmVnaXN0ZXJpbmcgc3BpIG1hc3RlclxuIik7Ci0JCWdvdG8gZXJyX3NwaV9yZWdpc3RlcjsKLQl9Ci0KLQlkZXZfZGJnKGRldiwgInByb2JlIHN1Y2NlZGVkXG4iKTsKLQlyZXR1cm4gMDsKLQotZXJyX2luaXRfcXVldWU6Ci1lcnJfc3RhcnRfcXVldWU6Ci1lcnJfc3BpX3JlZ2lzdGVyOgotCWRlc3Ryb3lfcXVldWUoZHJ2X2RhdGEpOwotCi1lcnJfbm9fcnhkbWE6Ci1lcnJfbm9fdHhkbWE6Ci1lcnJfbm9fZGV2aWQ6Ci0JZnJlZV9pcnEoaXJxLCBkcnZfZGF0YSk7Ci0KLWVycl9ub19pcnFyZXM6Ci0JaW91bm1hcChkcnZfZGF0YS0+cmVncyk7Ci0KLWVycl9ub19pb21hcDoKLQlyZWxlYXNlX3Jlc291cmNlKGRydl9kYXRhLT5pb2FyZWEpOwotCWtmcmVlKGRydl9kYXRhLT5pb2FyZWEpOwotCi1lcnJfbm9faW9yZXM6Ci0JY2xrX2Rpc2FibGUoZHJ2X2RhdGEtPmNsayk7Ci0JY2xrX3B1dChkcnZfZGF0YS0+Y2xrKTsKLQotZXJyX25vX2NsazoKLQlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotCi1lcnJfbm9fcGRhdGE6Ci1lcnJfbm9fbWVtOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgX19leGl0IHNwaV9pbXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpcnE7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlpZiAoIWRydl9kYXRhKQotCQlyZXR1cm4gMDsKLQotCXRhc2tsZXRfa2lsbCgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKLQotCS8qIFJlbW92ZSB0aGUgcXVldWUgKi8KLQlzdGF0dXMgPSBkZXN0cm95X3F1ZXVlKGRydl9kYXRhKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicXVldWUgcmVtb3ZlIGZhaWxlZCAoJWQpXG4iLCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCS8qIFJlc2V0IFNQSSAqLwotCXdyaXRlbChTUElfUkVTRVRfU1RBUlQsIGRydl9kYXRhLT5yZWdzICsgU1BJX1JFU0VUKTsKLQl3cml0ZWwoMCwgZHJ2X2RhdGEtPnJlZ3MgKyBTUElfUkVTRVQpOwotCi0JLyogUmVsZWFzZSBETUEgKi8KLQlpZiAoZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hKSB7Ci0JCVJTU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gMDsKLQkJUlNTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSAwOwotCQlpbXhfZG1hX2ZyZWUoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpOwotCQlpbXhfZG1hX2ZyZWUoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpOwotCX0KLQotCS8qIFJlbGVhc2UgSVJRICovCi0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoaXJxID49IDApCi0JCWZyZWVfaXJxKGlycSwgZHJ2X2RhdGEpOwotCi0JY2xrX2Rpc2FibGUoZHJ2X2RhdGEtPmNsayk7Ci0JY2xrX3B1dChkcnZfZGF0YS0+Y2xrKTsKLQotCS8qIFJlbGVhc2UgbWFwIHJlc291cmNlcyAqLwotCWlvdW5tYXAoZHJ2X2RhdGEtPnJlZ3MpOwotCXJlbGVhc2VfcmVzb3VyY2UoZHJ2X2RhdGEtPmlvYXJlYSk7Ci0Ja2ZyZWUoZHJ2X2RhdGEtPmlvYXJlYSk7Ci0KLQkvKiBEaXNjb25uZWN0IGZyb20gdGhlIFNQSSBmcmFtZXdvcmsgKi8KLQlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoZHJ2X2RhdGEtPm1hc3Rlcik7Ci0Jc3BpX21hc3Rlcl9wdXQoZHJ2X2RhdGEtPm1hc3Rlcik7Ci0KLQkvKiBQcmV2ZW50IGRvdWJsZSByZW1vdmUgKi8KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQotCWRldl9kYmcoJnBkZXYtPmRldiwgInJlbW92ZSBzdWNjZWRlZFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3BpX2lteF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCS8qIFJlc2V0IFNQSSAqLwotCXdyaXRlbChTUElfUkVTRVRfU1RBUlQsIGRydl9kYXRhLT5yZWdzICsgU1BJX1JFU0VUKTsKLQl3cml0ZWwoMCwgZHJ2X2RhdGEtPnJlZ3MgKyBTUElfUkVTRVQpOwotCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAic2h1dGRvd24gc3VjY2VkZWRcbiIpOwotfQotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgc3BpX2lteF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlzdGF0dXMgPSBzdG9wX3F1ZXVlKGRydl9kYXRhKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInN1c3BlbmQgY2Fubm90IHN0b3AgcXVldWVcbiIpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCWRldl9kYmcoJnBkZXYtPmRldiwgInN1c3BlbmRlZFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzcGlfaW14X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgc3RhdHVzID0gMDsKLQotCS8qIFN0YXJ0IHRoZSBxdWV1ZSBydW5uaW5nICovCi0Jc3RhdHVzID0gc3RhcnRfcXVldWUoZHJ2X2RhdGEpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSBzdGFydGluZyBxdWV1ZSAoJWQpXG4iLCBzdGF0dXMpOwotCWVsc2UKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVzdW1lZFxuIik7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotI2Vsc2UKLSNkZWZpbmUgc3BpX2lteF9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgc3BpX2lteF9yZXN1bWUgTlVMTAotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06c3BpX2lteCIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic3BpX2lteCIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnJlbW92ZSA9IF9fZXhpdF9wKHNwaV9pbXhfcmVtb3ZlKSwKLQkuc2h1dGRvd24gPSBzcGlfaW14X3NodXRkb3duLAotCS5zdXNwZW5kID0gc3BpX2lteF9zdXNwZW5kLAotCS5yZXN1bWUgPSBzcGlfaW14X3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNwaV9pbXhfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmRyaXZlciwgc3BpX2lteF9wcm9iZSk7Ci19Ci1tb2R1bGVfaW5pdChzcGlfaW14X2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc3BpX2lteF9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChzcGlfaW14X2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBbmRyZWEgUGF0ZXJuaWFuaSwgPGEucGF0ZXJuaWFuaUBzd2FwcC1lbmcuaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImlNWCBTUEkgQ29udHJvbGxlciBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDBhMThkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX3BwYzR4eC5jCkBAIC0wLDAgKzEsNjEyIEBACisvKgorICogU1BJX1BQQzRYWCBTUEkgY29udHJvbGxlciBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdhcnkgSmVubmVqb2huIDxnYXJ5akBkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDggU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZworICogQ29weXJpZ2h0IDIwMDkgSGFycmlzIENvcnBvcmF0aW9uLCBTdGV2ZW4gQS4gRmFsY28gPHNmYWxjb0BoYXJyaXMuY29tPgorICoKKyAqIEJhc2VkIGluIHBhcnQgb24gZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBCZW4gRG9va3MKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogVGhlIFBQQzR4eCBTUEkgY29udHJvbGxlciBoYXMgbm8gRklGTyBzbyBlYWNoIHNlbnQvcmVjZWl2ZWQgYnl0ZSB3aWxsCisgKiBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gdGhlIENQVS4gVGhpcyBjYW4gY2F1c2UgaGlnaCBDUFUgdXRpbGl6YXRpb24uCisgKiBUaGlzIGRyaXZlciBhbGxvd3MgcGxhdGZvcm1zIHRvIHJlZHVjZSB0aGUgaW50ZXJydXB0IGxvYWQgb24gdGhlIENQVQorICogZHVyaW5nIFNQSSB0cmFuc2ZlcnMgYnkgc2V0dGluZyBtYXhfc3BlZWRfaHogdmlhIHRoZSBkZXZpY2UgdHJlZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZGNyLmg+CisjaW5jbHVkZSA8YXNtL2Rjci1yZWdzLmg+CisKKy8qIGJpdHMgaW4gbW9kZSByZWdpc3RlciAtIGJpdCAwIGlzIE1TYiAqLworCisvKgorICogU1BJX1BQQzRYWF9NT0RFX1NDUCA9IDAgbWVhbnMgImRhdGEgbGF0Y2hlZCBvbiB0cmFpbGluZyBlZGdlIG9mIGNsb2NrIgorICogU1BJX1BQQzRYWF9NT0RFX1NDUCA9IDEgbWVhbnMgImRhdGEgbGF0Y2hlZCBvbiBsZWFkaW5nIGVkZ2Ugb2YgY2xvY2siCisgKiBOb3RlOiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIENQSEEuCisgKi8KKyNkZWZpbmUgU1BJX1BQQzRYWF9NT0RFX1NDUAkoMHg4MCA+PiAzKQorCisvKiBTUElfUFBDNFhYX01PREVfU1BFID0gMSBtZWFucyAicG9ydCBlbmFibGVkIiAqLworI2RlZmluZSBTUElfUFBDNFhYX01PREVfU1BFCSgweDgwID4+IDQpCisKKy8qCisgKiBTUElfUFBDNFhYX01PREVfUkQgPSAwIG1lYW5zICJNU0IgZmlyc3QiIC0gdGhpcyBpcyB0aGUgbm9ybWFsIG1vZGUKKyAqIFNQSV9QUEM0WFhfTU9ERV9SRCA9IDEgbWVhbnMgIkxTQiBmaXJzdCIgLSB0aGlzIGlzIGJpdC1yZXZlcnNlZCBtb2RlCisgKiBOb3RlOiBUaGlzIGlzIGlkZW50aWNhbCB0byBTUElfTFNCX0ZJUlNULgorICovCisjZGVmaW5lIFNQSV9QUEM0WFhfTU9ERV9SRAkoMHg4MCA+PiA1KQorCisvKgorICogU1BJX1BQQzRYWF9NT0RFX0NJID0gMCBtZWFucyAiY2xvY2sgaWRsZXMgbG93IgorICogU1BJX1BQQzRYWF9NT0RFX0NJID0gMSBtZWFucyAiY2xvY2sgaWRsZXMgaGlnaCIKKyAqIE5vdGU6IFRoaXMgaXMgaWRlbnRpY2FsIHRvIENQT0wuCisgKi8KKyNkZWZpbmUgU1BJX1BQQzRYWF9NT0RFX0NJCSgweDgwID4+IDYpCisKKy8qCisgKiBTUElfUFBDNFhYX01PREVfSUwgPSAwIG1lYW5zICJsb29wYmFjayBkaXNhYmxlIgorICogU1BJX1BQQzRYWF9NT0RFX0lMID0gMSBtZWFucyAibG9vcGJhY2sgZW5hYmxlIgorICovCisjZGVmaW5lIFNQSV9QUEM0WFhfTU9ERV9JTAkoMHg4MCA+PiA3KQorCisvKiBiaXRzIGluIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKy8qIHN0YXJ0cyBhIHRyYW5zZmVyIHdoZW4gc2V0ICovCisjZGVmaW5lIFNQSV9QUEM0WFhfQ1JfU1RSCSgweDgwID4+IDcpCisKKy8qIGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovCisvKiBwb3J0IGlzIGJ1c3kgd2l0aCBhIHRyYW5zZmVyICovCisjZGVmaW5lIFNQSV9QUEM0WFhfU1JfQlNZCSgweDgwID4+IDYpCisvKiBSeEQgcmVhZHkgKi8KKyNkZWZpbmUgU1BJX1BQQzRYWF9TUl9SQlIJKDB4ODAgPj4gNykKKworLyogY2xvY2sgc2V0dGluZ3MgKFNDUCBhbmQgQ0kpIGZvciB2YXJpb3VzIFNQSSBtb2RlcyAqLworI2RlZmluZSBTUElfQ0xLX01PREUwCShTUElfUFBDNFhYX01PREVfU0NQIHwgMCkKKyNkZWZpbmUgU1BJX0NMS19NT0RFMQkoMCB8IDApCisjZGVmaW5lIFNQSV9DTEtfTU9ERTIJKFNQSV9QUEM0WFhfTU9ERV9TQ1AgfCBTUElfUFBDNFhYX01PREVfQ0kpCisjZGVmaW5lIFNQSV9DTEtfTU9ERTMJKDAgfCBTUElfUFBDNFhYX01PREVfQ0kpCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJInNwaV9wcGM0eHhfb2YiCisKK3N0cnVjdCBzcGlfcHBjNHh4X3JlZ3MgeworCXU4IG1vZGU7CisJdTggcnhkOworCXU4IHR4ZDsKKwl1OCBjcjsKKwl1OCBzcjsKKwl1OCBkdW1teTsKKwkvKgorCSAqIENsb2NrIGRpdmlzb3IgbW9kdWx1cyByZWdpc3RlcgorCSAqIFRoaXMgdXNlcyB0aGUgZm9sbHdpbmcgZm9ybXVsYToKKwkgKiAgICBTQ1BDbGtPdXQgPSBPUEJDTEsvKDQoQ0RNICsgMSkpCisJICogb3IKKwkgKiAgICBDRE0gPSAoT1BCQ0xLLzQqU0NQQ2xrT3V0KSAtIDEKKwkgKiBiaXQgMCBpcyB0aGUgTVNiIQorCSAqLworCXU4IGNkbTsKK307CisKKy8qIFNQSSBDb250cm9sbGVyIGRyaXZlcidzIHByaXZhdGUgZGF0YS4gKi8KK3N0cnVjdCBwcGM0eHhfc3BpIHsKKwkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLworCXN0cnVjdCBzcGlfYml0YmFuZyBiaXRiYW5nOworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisKKwl1NjQgbWFwYmFzZTsKKwl1NjQgbWFwc2l6ZTsKKwlpbnQgaXJxbnVtOworCS8qIG5lZWQgdGhpcyB0byBzZXQgdGhlIFNQSSBjbG9jayAqLworCXVuc2lnbmVkIGludCBvcGJfZnJlcTsKKworCS8qIGZvciB0cmFuc2ZlcnMgKi8KKwlpbnQgbGVuOworCWludCBjb3VudDsKKwkvKiBkYXRhIGJ1ZmZlcnMgKi8KKwljb25zdCB1bnNpZ25lZCBjaGFyICp0eDsKKwl1bnNpZ25lZCBjaGFyICpyeDsKKworCWludCAqZ3Bpb3M7CisKKwlzdHJ1Y3Qgc3BpX3BwYzR4eF9yZWdzIF9faW9tZW0gKnJlZ3M7IC8qIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVycyAqLworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworfTsKKworLyogbmVlZCB0aGlzIHNvIHdlIGNhbiBzZXQgdGhlIGNsb2NrIGluIHRoZSBjaGlwc2VsZWN0IHJvdXRpbmUgKi8KK3N0cnVjdCBzcGlfcHBjNHh4X2NzIHsKKwl1OCBtb2RlOworfTsKKworc3RhdGljIGludCBzcGlfcHBjNHh4X3R4cngoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgcHBjNHh4X3NwaSAqaHc7CisJdTggZGF0YTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LCAidHhyeDogdHggJXAsIHJ4ICVwLCBsZW4gJWRcbiIsCisJCXQtPnR4X2J1ZiwgdC0+cnhfYnVmLCB0LT5sZW4pOworCisJaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWh3LT50eCA9IHQtPnR4X2J1ZjsKKwlody0+cnggPSB0LT5yeF9idWY7CisJaHctPmxlbiA9IHQtPmxlbjsKKwlody0+Y291bnQgPSAwOworCisJLyogc2VuZCB0aGUgZmlyc3QgYnl0ZSAqLworCWRhdGEgPSBody0+dHggPyBody0+dHhbMF0gOiAwOworCW91dF84KCZody0+cmVncy0+dHhkLCBkYXRhKTsKKwlvdXRfOCgmaHctPnJlZ3MtPmNyLCBTUElfUFBDNFhYX0NSX1NUUik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmaHctPmRvbmUpOworCisJcmV0dXJuIGh3LT5jb3VudDsKK30KKworc3RhdGljIGludCBzcGlfcHBjNHh4X3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBwcGM0eHhfc3BpICpodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXN0cnVjdCBzcGlfcHBjNHh4X2NzICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKwlpbnQgc2NyOworCXU4IGNkbSA9IDA7CisJdTMyIHNwZWVkOworCXU4IGJpdHNfcGVyX3dvcmQ7CisKKwkvKiBTdGFydCB3aXRoIHRoZSBnZW5lcmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGV2aWNlLiAqLworCWJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisJc3BlZWQgPSBzcGktPm1heF9zcGVlZF9oejsKKworCS8qCisJICogTW9kaWZ5IHRoZSBjb25maWd1cmF0aW9uIGlmIHRoZSB0cmFuc2ZlciBvdmVycmlkZXMgaXQuICBEbyBub3QgYWxsb3cKKwkgKiB0aGUgdHJhbnNmZXIgdG8gb3ZlcndyaXRlIHRoZSBnZW5lcmljIGNvbmZpZ3VyYXRpb24gd2l0aCB6ZXJvcy4KKwkgKi8KKwlpZiAodCkgeworCQlpZiAodC0+Yml0c19wZXJfd29yZCkKKwkJCWJpdHNfcGVyX3dvcmQgPSB0LT5iaXRzX3Blcl93b3JkOworCisJCWlmICh0LT5zcGVlZF9oeikKKwkJCXNwZWVkID0gbWluKHQtPnNwZWVkX2h6LCBzcGktPm1heF9zcGVlZF9oeik7CisJfQorCisJaWYgKGJpdHNfcGVyX3dvcmQgIT0gOCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgYml0cy1wZXItd29yZCAoJWQpXG4iLAorCQkJCWJpdHNfcGVyX3dvcmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXNwZWVkIHx8IChzcGVlZCA+IHNwaS0+bWF4X3NwZWVkX2h6KSkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgc3BlZWRfaHogKCVkKVxuIiwgc3BlZWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXcml0ZSBuZXcgY29uZmlncmF0aW9uICovCisJb3V0XzgoJmh3LT5yZWdzLT5tb2RlLCBjcy0+bW9kZSk7CisKKwkvKiBTZXQgdGhlIGNsb2NrICovCisJLyogb3BiX2ZyZXEgd2FzIGFscmVhZHkgZGl2aWRlZCBieSA0ICovCisJc2NyID0gKGh3LT5vcGJfZnJlcSAvIHNwZWVkKSAtIDE7CisJaWYgKHNjciA+IDApCisJCWNkbSA9IG1pbihzY3IsIDB4ZmYpOworCisJZGV2X2RiZygmc3BpLT5kZXYsICJzZXR0aW5nIHByZS1zY2FsZXIgdG8gJWQgKGh6ICVkKVxuIiwgY2RtLCBzcGVlZCk7CisKKwlpZiAoaW5fOCgmaHctPnJlZ3MtPmNkbSkgIT0gY2RtKQorCQlvdXRfOCgmaHctPnJlZ3MtPmNkbSwgY2RtKTsKKworCXNwaW5fbG9jaygmaHctPmJpdGJhbmcubG9jayk7CisJaWYgKCFody0+Yml0YmFuZy5idXN5KSB7CisJCWh3LT5iaXRiYW5nLmNoaXBzZWxlY3Qoc3BpLCBCSVRCQU5HX0NTX0lOQUNUSVZFKTsKKwkJLyogTmVlZCB0byBuZGVsYXkgaGVyZT8gKi8KKwl9CisJc3Bpbl91bmxvY2soJmh3LT5iaXRiYW5nLmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3BpX3BwYzR4eF9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzcGlfcHBjNHh4X2NzICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKworCWlmIChzcGktPmJpdHNfcGVyX3dvcmQgIT0gOCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgYml0cy1wZXItd29yZCAoJWQpXG4iLAorCQkJc3BpLT5iaXRzX3Blcl93b3JkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzcGktPm1heF9zcGVlZF9oeikgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgbWF4X3NwZWVkX2h6IChtdXN0IGJlIG5vbi16ZXJvKVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjcyA9PSBOVUxMKSB7CisJCWNzID0ga3phbGxvYyhzaXplb2YgKmNzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjcykKKwkJCXJldHVybiAtRU5PTUVNOworCQlzcGktPmNvbnRyb2xsZXJfc3RhdGUgPSBjczsKKwl9CisKKwkvKgorCSAqIFdlIHNldCBhbGwgYml0cyBvZiB0aGUgU1BJMF9NT0RFIHJlZ2lzdGVyLCBzbywKKwkgKiBubyBuZWVkIHRvIHJlYWQtbW9kaWZ5LXdyaXRlCisJICovCisJY3MtPm1vZGUgPSBTUElfUFBDNFhYX01PREVfU1BFOworCisJc3dpdGNoIChzcGktPm1vZGUgJiAoU1BJX0NQSEEgfCBTUElfQ1BPTCkpIHsKKwljYXNlIFNQSV9NT0RFXzA6CisJCWNzLT5tb2RlIHw9IFNQSV9DTEtfTU9ERTA7CisJCWJyZWFrOworCWNhc2UgU1BJX01PREVfMToKKwkJY3MtPm1vZGUgfD0gU1BJX0NMS19NT0RFMTsKKwkJYnJlYWs7CisJY2FzZSBTUElfTU9ERV8yOgorCQljcy0+bW9kZSB8PSBTUElfQ0xLX01PREUyOworCQlicmVhazsKKwljYXNlIFNQSV9NT0RFXzM6CisJCWNzLT5tb2RlIHw9IFNQSV9DTEtfTU9ERTM7CisJCWJyZWFrOworCX0KKworCWlmIChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKQorCQljcy0+bW9kZSB8PSBTUElfUFBDNFhYX01PREVfUkQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BpX3BwYzR4eF9jaGlwc2VsKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcHBjNHh4X3NwaSAqaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1bnNpZ25lZCBpbnQgY3MgPSBzcGktPmNoaXBfc2VsZWN0OworCXVuc2lnbmVkIGludCBjc3BvbDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIGNoaXAgc2VsZWN0cyBhdCBhbGwsIG9yIGlmIHRoaXMgaXMgdGhlIHNwZWNpYWwKKwkgKiBjYXNlIG9mIGEgbm9uLWV4aXN0ZW50IChkdW1teSkgY2hpcCBzZWxlY3QsIGRvIG5vdGhpbmcuCisJICovCisKKwlpZiAoIWh3LT5tYXN0ZXItPm51bV9jaGlwc2VsZWN0IHx8IGh3LT5ncGlvc1tjc10gPT0gLUVFWElTVCkKKwkJcmV0dXJuOworCisJY3Nwb2wgPSBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDEgOiAwOworCWlmICh2YWx1ZSA9PSBCSVRCQU5HX0NTX0lOQUNUSVZFKQorCQljc3BvbCA9ICFjc3BvbDsKKworCWdwaW9fc2V0X3ZhbHVlKGh3LT5ncGlvc1tjc10sIGNzcG9sKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNwaV9wcGM0eHhfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcHBjNHh4X3NwaSAqaHc7CisJdTggc3RhdHVzOworCXU4IGRhdGE7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJaHcgPSAoc3RydWN0IHBwYzR4eF9zcGkgKilkZXZfaWQ7CisKKwlzdGF0dXMgPSBpbl84KCZody0+cmVncy0+c3IpOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKgorCSAqIEJTWSBkZS1hc3NlcnRzIG9uZSBjeWNsZSBhZnRlciB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuICBUaGUKKwkgKiBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiAgVGhlIGV4YWN0CisJICogcmVsYXRpb25zaGlwIGlzIG5vdCBkb2N1bWVudGVkLCBoZW5jZSB0aGlzIGNvZGUuCisJICovCisKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgU1BJX1BQQzRYWF9TUl9CU1kpKSB7CisJCXU4IGxzdGF0dXM7CisJCWludCBjbnQgPSAwOworCisJCWRldl9kYmcoaHctPmRldiwgImdvdCBpbnRlcnJ1cHQgYnV0IHNwaSBzdGlsbCBidXN5P1xuIik7CisJCWRvIHsKKwkJCW5kZWxheSgxMCk7CisJCQlsc3RhdHVzID0gaW5fOCgmaHctPnJlZ3MtPnNyKTsKKwkJfSB3aGlsZSAoKytjbnQgPCAxMDAgJiYgbHN0YXR1cyAmIFNQSV9QUEM0WFhfU1JfQlNZKTsKKworCQlpZiAoY250ID49IDEwMCkgeworCQkJZGV2X2Vycihody0+ZGV2LCAiYnVzeXdhaXQ6IHRvbyBtYW55IGxvb3BzIVxuIik7CisJCQljb21wbGV0ZSgmaHctPmRvbmUpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UgeworCQkJLyogc3RhdHVzIGlzIGFsd2F5cyAxIChSQlIpIGhlcmUgKi8KKwkJCXN0YXR1cyA9IGluXzgoJmh3LT5yZWdzLT5zcik7CisJCQlkZXZfZGJnKGh3LT5kZXYsICJsb29wcyAlZCBzdGF0dXMgJXhcbiIsIGNudCwgc3RhdHVzKTsKKwkJfQorCX0KKworCWNvdW50ID0gaHctPmNvdW50OworCWh3LT5jb3VudCsrOworCisJLyogUkJSIHRyaWdnZXJlZCB0aGlzIGludGVycnVwdC4gIFRoZXJlZm9yZSwgZGF0YSBtdXN0IGJlIHJlYWR5LiAqLworCWRhdGEgPSBpbl84KCZody0+cmVncy0+cnhkKTsKKwlpZiAoaHctPnJ4KQorCQlody0+cnhbY291bnRdID0gZGF0YTsKKworCWNvdW50Kys7CisKKwlpZiAoY291bnQgPCBody0+bGVuKSB7CisJCWRhdGEgPSBody0+dHggPyBody0+dHhbY291bnRdIDogMDsKKwkJb3V0XzgoJmh3LT5yZWdzLT50eGQsIGRhdGEpOworCQlvdXRfOCgmaHctPnJlZ3MtPmNyLCBTUElfUFBDNFhYX0NSX1NUUik7CisJfSBlbHNlIHsKKwkJY29tcGxldGUoJmh3LT5kb25lKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9wcGM0eHhfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWtmcmVlKHNwaS0+Y29udHJvbGxlcl9zdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9wcGM0eHhfZW5hYmxlKHN0cnVjdCBwcGM0eHhfc3BpICpodykKK3sKKwkvKgorCSAqIE9uIGFsbCA0eHggUFBDJ3MgdGhlIFNQSSBidXMgaXMgc2hhcmVkL211bHRpcGxleGVkIHdpdGgKKwkgKiB0aGUgMm5kIEkyQyBidXMuIFdlIG5lZWQgdG8gZW5hYmxlIHRoZSB0aGUgU1BJIGJ1cyBiZWZvcmUKKwkgKiB1c2luZyBpdC4KKwkgKi8KKworCS8qIG5lZWQgdG8gY2xlYXIgYml0IDE0IHRvIGVuYWJsZSBTUEMgKi8KKwlkY3JpX2NscnNldChTRFIwLCBTRFIwX1BGQzEsIDB4ODAwMDAwMDAgPj4gMTQsIDApOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2dwaW9zKHN0cnVjdCBwcGM0eHhfc3BpICpodykKK3sKKwlpZiAoaHctPm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBody0+bWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKQorCQkJaWYgKGdwaW9faXNfdmFsaWQoaHctPmdwaW9zW2ldKSkKKwkJCQlncGlvX2ZyZWUoaHctPmdwaW9zW2ldKTsKKworCQlrZnJlZShody0+Z3Bpb3MpOworCQlody0+Z3Bpb3MgPSBOVUxMOworCX0KK30KKworLyoKKyAqIG9mX2RldmljZSBsYXllciBzdHVmZi4uLgorICovCitzdGF0aWMgaW50IF9faW5pdCBzcGlfcHBjNHh4X29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBwcGM0eHhfc3BpICpodzsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBzcGlfYml0YmFuZyAqYmJwOworCXN0cnVjdCByZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPm5vZGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9wLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpvcGJucDsKKwlpbnQgcmV0OworCWludCBudW1fZ3Bpb3M7CisJY29uc3QgdW5zaWduZWQgaW50ICpjbGs7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKGRldiwgc2l6ZW9mICpodyk7CisJaWYgKG1hc3RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBtYXN0ZXIpOworCWh3ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWh3LT5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCWh3LT5kZXYgPSBkZXY7CisKKwlpbml0X2NvbXBsZXRpb24oJmh3LT5kb25lKTsKKworCS8qCisJICogQSBjb3VudCBvZiB6ZXJvIGltcGxpZXMgYSBzaW5nbGUgU1BJIGRldmljZSB3aXRob3V0IGFueSBjaGlwLXNlbGVjdC4KKwkgKiBOb3RlIHRoYXQgb2ZfZ3Bpb19jb3VudCBjb3VudHMgYWxsIGdwaW9zIGFzc2lnbmVkIHRvIHRoaXMgc3BpIG1hc3Rlci4KKwkgKiBUaGlzIGluY2x1ZGVzIGJvdGggIm51bGwiIGdwaW8ncyBhbmQgcmVhbCBvbmVzLgorCSAqLworCW51bV9ncGlvcyA9IG9mX2dwaW9fY291bnQobnApOworCWlmIChudW1fZ3Bpb3MpIHsKKwkJaW50IGk7CisKKwkJaHctPmdwaW9zID0ga3phbGxvYyhzaXplb2YoaW50KSAqIG51bV9ncGlvcywgR0ZQX0tFUk5FTCk7CisJCWlmICghaHctPmdwaW9zKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX21hc3RlcjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBudW1fZ3Bpb3M7IGkrKykgeworCQkJaW50IGdwaW87CisJCQllbnVtIG9mX2dwaW9fZmxhZ3MgZmxhZ3M7CisKKwkJCWdwaW8gPSBvZl9nZXRfZ3Bpb19mbGFncyhucCwgaSwgJmZsYWdzKTsKKwkJCWh3LT5ncGlvc1tpXSA9IGdwaW87CisKKwkJCWlmIChncGlvX2lzX3ZhbGlkKGdwaW8pKSB7CisJCQkJLyogUmVhbCBDUyAtIHNldCB0aGUgaW5pdGlhbCBzdGF0ZS4gKi8KKwkJCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgbnAtPm5hbWUpOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVxdWVzdCBncGlvICIKKwkJCQkJCQkiIyVkOiAlZFxuIiwgaSwgcmV0KTsKKwkJCQkJZ290byBmcmVlX2dwaW9zOworCQkJCX0KKworCQkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLAorCQkJCQkJISEoZmxhZ3MgJiBPRl9HUElPX0FDVElWRV9MT1cpKTsKKwkJCX0gZWxzZSBpZiAoZ3BpbyA9PSAtRUVYSVNUKSB7CisJCQkJOyAvKiBObyBDUywgYnV0IHRoYXQncyBPSy4gKi8KKwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIGdwaW8gIyVkOiAlZFxuIiwgaSwgZ3Bpbyk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGZyZWVfZ3Bpb3M7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTZXR1cCB0aGUgc3RhdGUgZm9yIHRoZSBiaXRiYW5nIGRyaXZlciAqLworCWJicCA9ICZody0+Yml0YmFuZzsKKwliYnAtPm1hc3RlciA9IGh3LT5tYXN0ZXI7CisJYmJwLT5zZXR1cF90cmFuc2ZlciA9IHNwaV9wcGM0eHhfc2V0dXB4ZmVyOworCWJicC0+Y2hpcHNlbGVjdCA9IHNwaV9wcGM0eHhfY2hpcHNlbDsKKwliYnAtPnR4cnhfYnVmcyA9IHNwaV9wcGM0eHhfdHhyeDsKKwliYnAtPnVzZV9kbWEgPSAwOworCWJicC0+bWFzdGVyLT5zZXR1cCA9IHNwaV9wcGM0eHhfc2V0dXA7CisJYmJwLT5tYXN0ZXItPmNsZWFudXAgPSBzcGlfcHBjNHh4X2NsZWFudXA7CisKKwkvKiBBbGxvY2F0ZSBidXMgbnVtIGR5bmFtaWNhbGx5LiAqLworCWJicC0+bWFzdGVyLT5idXNfbnVtID0gLTE7CisKKwkvKiB0aGUgc3BpLT5tb2RlIGJpdHMgdW5kZXJzdG9vZCBieSB0aGlzIGRyaXZlcjogKi8KKwliYnAtPm1hc3Rlci0+bW9kZV9iaXRzID0KKwkJU1BJX0NQSEEgfCBTUElfQ1BPTCB8IFNQSV9DU19ISUdIIHwgU1BJX0xTQl9GSVJTVDsKKworCS8qIHRoaXMgbWFueSBwaW5zIGluIGFsbCBHUElPIGNvbnRyb2xsZXJzICovCisJYmJwLT5tYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gbnVtX2dwaW9zOworCisJLyogR2V0IHRoZSBjbG9jayBmb3IgdGhlIE9QQiAqLworCW9wYm5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImlibSxvcGIiKTsKKwlpZiAob3BibnAgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIk9QQjogY2Fubm90IGZpbmQgbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9ncGlvczsKKwl9CisJLyogR2V0IHRoZSBjbG9jayAoSHopIGZvciB0aGUgT1BCICovCisJY2xrID0gb2ZfZ2V0X3Byb3BlcnR5KG9wYm5wLCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJaWYgKGNsayA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiT1BCOiBubyBjbG9jay1mcmVxdWVuY3kgcHJvcGVydHkgc2V0XG4iKTsKKwkJb2Zfbm9kZV9wdXQob3BibnApOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfZ3Bpb3M7CisJfQorCWh3LT5vcGJfZnJlcSA9ICpjbGs7CisJaHctPm9wYl9mcmVxID4+PSAyOworCW9mX25vZGVfcHV0KG9wYm5wKTsKKworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXNvdXJjZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIHdoaWxlIHBhcnNpbmcgZGV2aWNlIG5vZGUgcmVzb3VyY2VcbiIpOworCQlnb3RvIGZyZWVfZ3Bpb3M7CisJfQorCWh3LT5tYXBiYXNlID0gcmVzb3VyY2Uuc3RhcnQ7CisJaHctPm1hcHNpemUgPSByZXNvdXJjZS5lbmQgLSByZXNvdXJjZS5zdGFydCArIDE7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoaHctPm1hcHNpemUgPCBzaXplb2Yoc3RydWN0IHNwaV9wcGM0eHhfcmVncykpIHsKKwkJZGV2X2VycihkZXYsICJ0b28gc21hbGwgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZnJlZV9ncGlvczsKKwl9CisKKwkvKiBSZXF1ZXN0IElSUSAqLworCWh3LT5pcnFudW0gPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaHctPmlycW51bSwgc3BpX3BwYzR4eF9pbnQsCisJCQkgIElSUUZfRElTQUJMRUQsICJzcGlfcHBjNHh4X29mIiwgKHZvaWQgKilodyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBpbnRlcnJ1cHRcbiIpOworCQlnb3RvIGZyZWVfZ3Bpb3M7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaHctPm1hcGJhc2UsIGh3LT5tYXBzaXplLCBEUklWRVJfTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJyZXNvdXJjZSB1bmF2YWlsYWJsZVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byByZXF1ZXN0X21lbV9lcnJvcjsKKwl9CisKKwlody0+cmVncyA9IGlvcmVtYXAoaHctPm1hcGJhc2UsIHNpemVvZihzdHJ1Y3Qgc3BpX3BwYzR4eF9yZWdzKSk7CisKKwlpZiAoIWh3LT5yZWdzKSB7CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIG1lbW9yeSBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG1hcF9pb19lcnJvcjsKKwl9CisKKwlzcGlfcHBjNHh4X2VuYWJsZShodyk7CisKKwkvKiBGaW5hbGx5IHJlZ2lzdGVyIG91ciBzcGkgY29udHJvbGxlciAqLworCWRldi0+ZG1hX21hc2sgPSAwOworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KGJicCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBTUEkgbWFzdGVyXG4iKTsKKwkJZ290byB1bm1hcF9yZWdzOworCX0KKworCWRldl9pbmZvKGRldiwgImRyaXZlciBpbml0aWFsaXplZFxuIik7CisJb2ZfcmVnaXN0ZXJfc3BpX2RldmljZXMobWFzdGVyLCBucCk7CisKKwlyZXR1cm4gMDsKKwordW5tYXBfcmVnczoKKwlpb3VubWFwKGh3LT5yZWdzKTsKK21hcF9pb19lcnJvcjoKKwlyZWxlYXNlX21lbV9yZWdpb24oaHctPm1hcGJhc2UsIGh3LT5tYXBzaXplKTsKK3JlcXVlc3RfbWVtX2Vycm9yOgorCWZyZWVfaXJxKGh3LT5pcnFudW0sIGh3KTsKK2ZyZWVfZ3Bpb3M6CisJZnJlZV9ncGlvcyhodyk7CitmcmVlX21hc3RlcjoKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJZGV2X2VycihkZXYsICJpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHNwaV9wcGM0eHhfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOworCXN0cnVjdCBwcGM0eHhfc3BpICpodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXNwaV9iaXRiYW5nX3N0b3AoJmh3LT5iaXRiYW5nKTsKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihody0+bWFwYmFzZSwgaHctPm1hcHNpemUpOworCWZyZWVfaXJxKGh3LT5pcnFudW0sIGh3KTsKKwlpb3VubWFwKGh3LT5yZWdzKTsKKwlmcmVlX2dwaW9zKGh3KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpX3BwYzR4eF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBwYzR4eC1zcGkiLCB9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3BpX3BwYzR4eF9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHNwaV9wcGM0eHhfb2ZfZHJpdmVyID0geworCS5tYXRjaF90YWJsZSA9IHNwaV9wcGM0eHhfb2ZfbWF0Y2gsCisJLnByb2JlID0gc3BpX3BwYzR4eF9vZl9wcm9iZSwKKwkucmVtb3ZlID0gX19leGl0X3Aoc3BpX3BwYzR4eF9vZl9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzcGlfcHBjNHh4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzcGlfcHBjNHh4X29mX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzcGlfcHBjNHh4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc3BpX3BwYzR4eF9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNwaV9wcGM0eHhfb2ZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNwaV9wcGM0eHhfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdhcnkgSmVubmVqb2huICYgU3RlZmFuIFJvZXNlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbXBsZSBQUEM0eHggU1BJIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKaW5kZXggM2YzMTE5ZC4uMzNkOTRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCkBAIC0yMCwxNyArMjAsMjggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGkuaD4KIAorLyoqCisgKiBzM2MyNHh4X3NwaV9kZXZzdGF0ZSAtIHBlciBkZXZpY2UgZGF0YQorICogQGh6OiBMYXN0IGZyZXF1ZW5jeSBjYWxjdWxhdGVkIGZvciBAc3BwcmUgZmllbGQuCisgKiBAbW9kZTogTGFzdCBtb2RlIHNldHRpbmcgZm9yIHRoZSBAc3Bjb24gZmllbGQuCisgKiBAc3Bjb246IFZhbHVlIHRvIHdyaXRlIHRvIHRoZSBTUENPTiByZWdpc3Rlci4KKyAqIEBzcHByZTogVmFsdWUgdG8gd3JpdGUgdG8gdGhlIFNQUFJFIHJlZ2lzdGVyLgorICovCitzdHJ1Y3QgczNjMjR4eF9zcGlfZGV2c3RhdGUgeworCXVuc2lnbmVkIGludAloejsKKwl1bnNpZ25lZCBpbnQJbW9kZTsKKwl1OAkJc3Bjb247CisJdTgJCXNwcHJlOworfTsKKwogc3RydWN0IHMzYzI0eHhfc3BpIHsKIAkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLwogCXN0cnVjdCBzcGlfYml0YmFuZwkgYml0YmFuZzsKQEAgLTcxLDQzICs4MiwzMSBAQAogCiBzdGF0aWMgdm9pZCBzM2MyNHh4X3NwaV9jaGlwc2VsKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgczNjMjR4eF9zcGlfZGV2c3RhdGUgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOwogCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSB0b19odyhzcGkpOwogCXVuc2lnbmVkIGludCBjc3BvbCA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDA7Ci0JdW5zaWduZWQgaW50IHNwY29uOworCisJLyogY2hhbmdlIHRoZSBjaGlwc2VsZWN0IHN0YXRlIGFuZCB0aGUgc3RhdGUgb2YgdGhlIHNwaSBlbmdpbmUgY2xvY2sgKi8KIAogCXN3aXRjaCAodmFsdWUpIHsKIAljYXNlIEJJVEJBTkdfQ1NfSU5BQ1RJVkU6CiAJCWh3LT5zZXRfY3MoaHctPnBkYXRhLCBzcGktPmNoaXBfc2VsZWN0LCBjc3BvbF4xKTsKKwkJd3JpdGViKGNzLT5zcGNvbiwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQQ09OKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJJVEJBTkdfQ1NfQUNUSVZFOgotCQlzcGNvbiA9IHJlYWRiKGh3LT5yZWdzICsgUzNDMjQxMF9TUENPTik7Ci0KLQkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQotCQkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9DUEhBX0ZNVEI7Ci0JCWVsc2UKLQkJCXNwY29uICY9IH5TM0MyNDEwX1NQQ09OX0NQSEFfRk1UQjsKLQotCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCi0JCQlzcGNvbiB8PSBTM0MyNDEwX1NQQ09OX0NQT0xfSElHSDsKLQkJZWxzZQotCQkJc3Bjb24gJj0gflMzQzI0MTBfU1BDT05fQ1BPTF9ISUdIOwotCi0JCXNwY29uIHw9IFMzQzI0MTBfU1BDT05fRU5TQ0s7Ci0KLQkJLyogd3JpdGUgbmV3IGNvbmZpZ3JhdGlvbiAqLwotCi0JCXdyaXRlYihzcGNvbiwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQQ09OKTsKKwkJd3JpdGViKGNzLT5zcGNvbiB8IFMzQzI0MTBfU1BDT05fRU5TQ0ssCisJCSAgICAgICBody0+cmVncyArIFMzQzI0MTBfU1BDT04pOwogCQlody0+c2V0X2NzKGh3LT5wZGF0YSwgc3BpLT5jaGlwX3NlbGVjdCwgY3Nwb2wpOwotCiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBzM2MyNHh4X3NwaV9zZXR1cHhmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKLQkJCQkgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3N0YXRpYyBpbnQgczNjMjR4eF9zcGlfdXBkYXRlX3N0YXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJICAgIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCiB7CiAJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHRvX2h3KHNwaSk7CisJc3RydWN0IHMzYzI0eHhfc3BpX2RldnN0YXRlICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgYnB3OwogCXVuc2lnbmVkIGludCBoejsKIAl1bnNpZ25lZCBpbnQgZGl2OwpAQCAtMTI3LDE3ICsxMjYsNzMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2xrID0gY2xrX2dldF9yYXRlKGh3LT5jbGspOwotCWRpdiA9IERJVl9ST1VORF9VUChjbGssIGh6ICogMikgLSAxOworCWlmIChzcGktPm1vZGUgIT0gY3MtPm1vZGUpIHsKKwkJdTggc3Bjb24gPSBTUENPTl9ERUZBVUxUOwogCi0JaWYgKGRpdiA+IDI1NSkKLQkJZGl2ID0gMjU1OworCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQSEEpCisJCQlzcGNvbiB8PSBTM0MyNDEwX1NQQ09OX0NQSEFfRk1UQjsKIAotCWRldl9kYmcoJnNwaS0+ZGV2LCAic2V0dGluZyBwcmUtc2NhbGVyIHRvICVkICh3YW50ZWQgJWQsIGdvdCAlbGQpXG4iLAotCQlkaXYsIGh6LCBjbGsgLyAoMiAqIChkaXYgKyAxKSkpOworCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCQlzcGNvbiB8PSBTM0MyNDEwX1NQQ09OX0NQT0xfSElHSDsKIAorCQljcy0+bW9kZSA9IHNwaS0+bW9kZTsKKwkJY3MtPnNwY29uID0gc3Bjb247CisJfQogCi0Jd3JpdGViKGRpdiwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQUFJFKTsKKwlpZiAoY3MtPmh6ICE9IGh6KSB7CisJCWNsayA9IGNsa19nZXRfcmF0ZShody0+Y2xrKTsKKwkJZGl2ID0gRElWX1JPVU5EX1VQKGNsaywgaHogKiAyKSAtIDE7CisKKwkJaWYgKGRpdiA+IDI1NSkKKwkJCWRpdiA9IDI1NTsKKworCQlkZXZfZGJnKCZzcGktPmRldiwgInByZS1zY2FsZXI9JWQgKHdhbnRlZCAlZCwgZ290ICVsZClcbiIsCisJCQlkaXYsIGh6LCBjbGsgLyAoMiAqIChkaXYgKyAxKSkpOworCisJCWNzLT5oeiA9IGh6OworCQljcy0+c3BwcmUgPSBkaXY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9zcGlfc2V0dXB4ZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpX2RldnN0YXRlICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gdG9faHcoc3BpKTsKKwlpbnQgcmV0OworCisJcmV0ID0gczNjMjR4eF9zcGlfdXBkYXRlX3N0YXRlKHNwaSwgdCk7CisJaWYgKCFyZXQpCisJCXdyaXRlYihjcy0+c3BwcmUsIGh3LT5yZWdzICsgUzNDMjQxMF9TUFBSRSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHMzYzI0eHhfc3BpX2RldnN0YXRlICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gdG9faHcoc3BpKTsKKwlpbnQgcmV0OworCisJLyogYWxsb2NhdGUgc2V0dGluZ3Mgb24gdGhlIGZpcnN0IGNhbGwgKi8KKwlpZiAoIWNzKSB7CisJCWNzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0eHhfc3BpX2RldnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY3MpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAibm8gbWVtb3J5IGZvciBjb250cm9sbGVyIHN0YXRlXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJY3MtPnNwY29uID0gU1BDT05fREVGQVVMVDsKKwkJY3MtPmh6ID0gLTE7CisJCXNwaS0+Y29udHJvbGxlcl9zdGF0ZSA9IGNzOworCX0KKworCS8qIGluaXRpYWxpc2UgdGhlIHN0YXRlIGZyb20gdGhlIGRldmljZSAqLworCXJldCA9IHMzYzI0eHhfc3BpX3VwZGF0ZV9zdGF0ZShzcGksIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2soJmh3LT5iaXRiYW5nLmxvY2spOwogCWlmICghaHctPmJpdGJhbmcuYnVzeSkgewpAQCAtMTQ5LDE3ICsyMDQsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0eHhfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCitzdGF0aWMgdm9pZCBzM2MyNHh4X3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHMzYzI0eHhfc3BpX3NldHVweGZlcihzcGksIE5VTEwpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAic2V0dXB4ZmVyIHJldHVybmVkICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOworCWtmcmVlKHNwaS0+Y29udHJvbGxlcl9zdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3X3R4Ynl0ZShzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3LCBpbnQgY291bnQpCkBAIC0yODksNyArMzM2LDkgQEAKIAlody0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IHMzYzI0eHhfc3BpX3NldHVweGZlcjsKIAlody0+Yml0YmFuZy5jaGlwc2VsZWN0ICAgICA9IHMzYzI0eHhfc3BpX2NoaXBzZWw7CiAJaHctPmJpdGJhbmcudHhyeF9idWZzICAgICAgPSBzM2MyNHh4X3NwaV90eHJ4OwotCWh3LT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgID0gczNjMjR4eF9zcGlfc2V0dXA7CisKKwlody0+bWFzdGVyLT5zZXR1cCAgPSBzM2MyNHh4X3NwaV9zZXR1cDsKKwlody0+bWFzdGVyLT5jbGVhbnVwID0gczNjMjR4eF9zcGlfY2xlYW51cDsKIAogCWRldl9kYmcoaHctPmRldiwgImJpdGJhbmcgYXQgJXBcbiIsICZody0+Yml0YmFuZyk7CiAKQEAgLTMwMiw3ICszNTEsNyBAQAogCQlnb3RvIGVycl9ub19pb3JlczsKIAl9CiAKLQlody0+aW9hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzEsCisJaHctPmlvYXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCiAJCQkJCXBkZXYtPm5hbWUpOwogCiAJaWYgKGh3LT5pb2FyZWEgPT0gTlVMTCkgewpAQCAtMzExLDcgKzM2MCw3IEBACiAJCWdvdG8gZXJyX25vX2lvcmVzOwogCX0KIAotCWh3LT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSsxKTsKKwlody0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoaHctPnJlZ3MgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIElPXG4iKTsKIAkJZXJyID0gLUVOWElPOwpAQCAtMzg4LDcgKzQzNyw3IEBACiAKICBlcnJfbm9faW9yZXM6CiAgZXJyX25vX3BkYXRhOgotCXNwaV9tYXN0ZXJfcHV0KGh3LT5tYXN0ZXIpOzsKKwlzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTsKIAogIGVycl9ub21lbToKIAlyZXR1cm4gZXJyOwpAQCAtNDIxLDkgKzQ3MCw5IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBzM2MyNHh4X3NwaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOwogCiAJaWYgKGh3LT5wZGF0YSAmJiBody0+cGRhdGEtPmdwaW9fc2V0dXApCiAJCWh3LT5wZGF0YS0+Z3Bpb19zZXR1cChody0+cGRhdGEsIDApOwpAQCAtNDMyLDI3ICs0ODEsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNHh4X3NwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgczNjMjR4eF9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKIAogCXMzYzI0eHhfc3BpX2luaXRpYWxzZXR1cChodyk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzM2MyNHh4X3NwaV9wbW9wcyA9IHsKKwkuc3VzcGVuZAk9IHMzYzI0eHhfc3BpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNHh4X3NwaV9yZXN1bWUsCit9OworCisjZGVmaW5lIFMzQzI0WFhfU1BJX1BNT1BTICZzM2MyNHh4X3NwaV9wbW9wcwogI2Vsc2UKLSNkZWZpbmUgczNjMjR4eF9zcGlfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzYzI0eHhfc3BpX3Jlc3VtZSAgTlVMTAotI2VuZGlmCisjZGVmaW5lIFMzQzI0WFhfU1BJX1BNT1BTIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEwLXNwaSIpOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjR4eF9zcGlfZHJpdmVyID0gewogCS5yZW1vdmUJCT0gX19leGl0X3AoczNjMjR4eF9zcGlfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHMzYzI0eHhfc3BpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNHh4X3NwaV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInMzYzI0MTAtc3BpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IFMzQzI0WFhfU1BJX1BNT1BTLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODcxZGMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwpAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIEZyZWVzY2FsZSBTVE1QMzc4WCBTUEkgbWFzdGVyIGRyaXZlcgorICoKKyAqIEF1dGhvcjogZG1pdHJ5IHBlcnZ1c2hpbiA8ZGlta2FAZW1iZWRkZWRhbGxleS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8bWFjaC9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPG1hY2gvc3RtcDN4eHguaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zc3AuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYXBiaC5oPgorCisKKy8qIDAgbWVhbnMgRE1BIG1vZGUocmVjb21tZW5kZWQsIGRlZmF1bHQpLCAhMCAtIFBJTyBtb2RlICovCitzdGF0aWMgaW50IHBpbzsKK3N0YXRpYyBpbnQgY2xvY2s7CisKKy8qIGRlZmF1bHQgdGltZW91dCBmb3IgYnVzeSB3YWl0cyBpcyAyIHNlY29uZHMgKi8KKyNkZWZpbmUgU1RNUF9TUElfVElNRU9VVAkoMiAqIEhaKQorCitzdHJ1Y3Qgc3RtcF9zcGkgeworCWludAkJaWQ7CisKKwl2b2lkICogIF9faW9tZW0gcmVnczsJLyogdmFkZHIgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzICovCisKKwlpbnQJCWlycSwgZXJyX2lycTsKKwl1MzIJCWRtYTsKKwlzdHJ1Y3Qgc3RtcDN4eHhfZG1hX2Rlc2NyaXB0b3IgZDsKKworCXUzMgkJc3BlZWRfa2h6OworCXUzMgkJc2F2ZWRfdGltaW5nczsKKwl1MzIJCWRpdmlkZXI7CisKKwlzdHJ1Y3QgY2xrCSpjbGs7CisJc3RydWN0IGRldmljZQkqbWFzdGVyX2RldjsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CisKKwkvKiBsb2NrIHByb3RlY3RzIHF1ZXVlIGFjY2VzcyAqLworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworCisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKK307CisKKyNkZWZpbmUgYnVzeV93YWl0KGNvbmQpCQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsgU1RNUF9TUElfVElNRU9VVDsJCVwKKwlib29sIHN1Y2NlZWRlZCA9IGZhbHNlOwkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChjb25kKSB7CQkJCQkJXAorCQkJc3VjY2VlZGVkID0gdHJ1ZTsJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQl9CQkJCQkJCVwKKwkJY3B1X3JlbGF4KCk7CQkJCQkJXAorCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGVuZF9qaWZmaWVzLCBqaWZmaWVzKSk7CQkJXAorCXN1Y2NlZWRlZDsJCQkJCQkJXAorCX0pCisKKy8qKgorICogc3RtcF9zcGlfaW5pdF9odworICogSW5pdGlhbGl6ZSB0aGUgU1NQIHBvcnQKKyAqLworc3RhdGljIGludCBzdG1wX3NwaV9pbml0X2h3KHN0cnVjdCBzdG1wX3NwaSAqc3MpCit7CisJaW50IGVyciA9IDA7CisJdm9pZCAqcGlucyA9IHNzLT5tYXN0ZXJfZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJZXJyID0gc3RtcDN4eHhfcmVxdWVzdF9waW5fZ3JvdXAocGlucywgZGV2X25hbWUoc3MtPm1hc3Rlcl9kZXYpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNzLT5jbGsgPSBjbGtfZ2V0KE5VTEwsICJzc3AiKTsKKwlpZiAoSVNfRVJSKHNzLT5jbGspKSB7CisJCWVyciA9IFBUUl9FUlIoc3MtPmNsayk7CisJCWdvdG8gb3V0X2ZyZWVfcGluczsKKwl9CisJY2xrX2VuYWJsZShzcy0+Y2xrKTsKKworCXN0bXAzeHh4X3Jlc2V0X2Jsb2NrKHNzLT5yZWdzLCBmYWxzZSk7CisJc3RtcDN4eHhfZG1hX3Jlc2V0X2NoYW5uZWwoc3MtPmRtYSk7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfcGluczoKKwlzdG1wM3h4eF9yZWxlYXNlX3Bpbl9ncm91cChwaW5zLCBkZXZfbmFtZShzcy0+bWFzdGVyX2RldikpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHN0bXBfc3BpX3JlbGVhc2VfaHcoc3RydWN0IHN0bXBfc3BpICpzcykKK3sKKwl2b2lkICpwaW5zID0gc3MtPm1hc3Rlcl9kZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoc3MtPmNsayAmJiAhSVNfRVJSKHNzLT5jbGspKSB7CisJCWNsa19kaXNhYmxlKHNzLT5jbGspOworCQljbGtfcHV0KHNzLT5jbGspOworCX0KKwlzdG1wM3h4eF9yZWxlYXNlX3Bpbl9ncm91cChwaW5zLCBkZXZfbmFtZShzcy0+bWFzdGVyX2RldikpOworfQorCitzdGF0aWMgaW50IHN0bXBfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJdTggYml0c19wZXJfd29yZDsKKwl1MzIgaHo7CisJc3RydWN0IHN0bXBfc3BpICpzcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXUxNiByYXRlOworCisJYml0c19wZXJfd29yZCA9IHNwaS0+Yml0c19wZXJfd29yZDsKKwlpZiAodCAmJiB0LT5iaXRzX3Blcl93b3JkKQorCQliaXRzX3Blcl93b3JkID0gdC0+Yml0c19wZXJfd29yZDsKKworCS8qCisJICogQ2FsY3VsYXRlIHNwZWVkOgorCSAqCS0gYnkgZGVmYXVsdCwgdXNlIG1heGltdW0gc3BlZWQgZnJvbSBzc3AgY2xrCisJICoJLSBpZiBkZXZpY2Ugb3ZlcnJpZGVzIGl0LCB1c2UgaXQKKwkgKgktIGlmIHRyYW5zZmVyIHNwZWNpZmllcyBvdGhlciBzcGVlZCwgdXNlIHRyYW5zZmVyJ3Mgb25lCisJICovCisJaHogPSAxMDAwICogc3MtPnNwZWVkX2toeiAvIHNzLT5kaXZpZGVyOworCWlmIChzcGktPm1heF9zcGVlZF9oeikKKwkJaHogPSBtaW4oaHosIHNwaS0+bWF4X3NwZWVkX2h6KTsKKwlpZiAodCAmJiB0LT5zcGVlZF9oeikKKwkJaHogPSBtaW4oaHosIHQtPnNwZWVkX2h6KTsKKworCWlmIChoeiA9PSAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiQ2Fubm90IGNvbnRpbnVlIHdpdGggemVybyBjbG9ja1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChiaXRzX3Blcl93b3JkICE9IDgpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICIlcywgdW5zdXBwb3J0ZWQgYml0c19wZXJfd29yZD0lZFxuIiwKKwkJCV9fZnVuY19fLCBiaXRzX3Blcl93b3JkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZygmc3BpLT5kZXYsICJSZXF1ZXN0ZWQgY2xrIHJhdGUgPSAldUh6LCBtYXggPSAldUh6LyVkID0gJXVIelxuIiwKKwkJaHosIHNzLT5zcGVlZF9raHosIHNzLT5kaXZpZGVyLAorCQlzcy0+c3BlZWRfa2h6ICogMTAwMCAvIHNzLT5kaXZpZGVyKTsKKworCWlmIChzcy0+c3BlZWRfa2h6ICogMTAwMCAvIHNzLT5kaXZpZGVyIDwgaHopIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICIlcywgdW5zdXBwb3J0ZWQgY2xvY2sgcmF0ZSAldUh6XG4iLAorCQkJX19mdW5jX18sIGh6KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmF0ZSA9IDEwMDAgKiBzcy0+c3BlZWRfa2h6L3NzLT5kaXZpZGVyL2h6OworCisJd3JpdGVsKEJGKHNzLT5kaXZpZGVyLCBTU1BfVElNSU5HX0NMT0NLX0RJVklERSkJCXwKKwkgICAgICAgQkYocmF0ZSAtIDEsIFNTUF9USU1JTkdfQ0xPQ0tfUkFURSksCisJICAgICAgIEhXX1NTUF9USU1JTkcgKyBzcy0+cmVncyk7CisKKwl3cml0ZWwoQkYoMSAvKiBtb2RlIFNQSSAqLywgU1NQX0NUUkwxX1NTUF9NT0RFKQkJfAorCSAgICAgICBCRig0IC8qIDggYml0cyAgICovLCBTU1BfQ1RSTDFfV09SRF9MRU5HVEgpCXwKKwkgICAgICAgKChzcGktPm1vZGUgJiBTUElfQ1BPTCkgPyBCTV9TU1BfQ1RSTDFfUE9MQVJJVFkgOiAwKSB8CisJICAgICAgICgoc3BpLT5tb2RlICYgU1BJX0NQSEEpID8gQk1fU1NQX0NUUkwxX1BIQVNFIDogMCkgfAorCSAgICAgICAocGlvID8gMCA6IEJNX1NTUF9DVFJMMV9ETUFfRU5BQkxFKSwKKwkgICAgICAgc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtcF9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwkvKiBzcGlfc2V0dXAoKSBkb2VzIGJhc2ljIGNoZWNrcywKKwkgKiBzdG1wX3NwaV9zZXR1cF90cmFuc2ZlcigpIGRvZXMgbW9yZSBsYXRlcgorCSAqLworCWlmIChzcGktPmJpdHNfcGVyX3dvcmQgIT0gOCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIiVzLCB1bnN1cHBvcnRlZCBiaXRzX3Blcl93b3JkPSVkXG4iLAorCQkJX19mdW5jX18sIHNwaS0+Yml0c19wZXJfd29yZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1MzIgc3RtcF9zcGlfY3ModW5zaWduZWQgY3MpCit7CisJcmV0dXJuICAoKGNzICYgMSkgPyBCTV9TU1BfQ1RSTDBfV0FJVF9GT1JfQ01EIDogMCkgfAorCQkoKGNzICYgMikgPyBCTV9TU1BfQ1RSTDBfV0FJVF9GT1JfSVJRIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgc3RtcF9zcGlfdHhyeF9kbWEoc3RydWN0IHN0bXBfc3BpICpzcywgaW50IGNzLAorCQl1bnNpZ25lZCBjaGFyICpidWYsIGRtYV9hZGRyX3QgZG1hX2J1ZiwgaW50IGxlbiwKKwkJaW50IGZpcnN0LCBpbnQgbGFzdCwgYm9vbCB3cml0ZSkKK3sKKwl1MzIgYzAgPSAwOworCWRtYV9hZGRyX3Qgc3BpX2J1Zl9kbWEgPSBkbWFfYnVmOworCWludCBzdGF0dXMgPSAwOworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHdyaXRlID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRTsKKworCWMwIHw9IChmaXJzdCA/IEJNX1NTUF9DVFJMMF9MT0NLX0NTIDogMCk7CisJYzAgfD0gKGxhc3QgPyBCTV9TU1BfQ1RSTDBfSUdOT1JFX0NSQyA6IDApOworCWMwIHw9ICh3cml0ZSA/IDAgOiBCTV9TU1BfQ1RSTDBfUkVBRCk7CisJYzAgfD0gQk1fU1NQX0NUUkwwX0RBVEFfWEZFUjsKKworCWMwIHw9IHN0bXBfc3BpX2NzKGNzKTsKKworCWMwIHw9IEJGKGxlbiwgU1NQX0NUUkwwX1hGRVJfQ09VTlQpOworCisJaWYgKCFkbWFfYnVmKQorCQlzcGlfYnVmX2RtYSA9IGRtYV9tYXBfc2luZ2xlKHNzLT5tYXN0ZXJfZGV2LCBidWYsIGxlbiwgZGlyKTsKKworCXNzLT5kLmNvbW1hbmQtPmNtZCA9CisJCUJGKGxlbiwgQVBCSF9DSG5fQ01EX1hGRVJfQ09VTlQpCXwKKwkJQkYoMSwgQVBCSF9DSG5fQ01EX0NNRFdPUkRTKQkJfAorCQlCTV9BUEJIX0NIbl9DTURfV0FJVDRFTkRDTUQJCXwKKwkJQk1fQVBCSF9DSG5fQ01EX0lSUU9OQ01QTFQJCXwKKwkJQkYod3JpdGUgPyBCVl9BUEJIX0NIbl9DTURfQ09NTUFORF9fRE1BX1JFQUQgOgorCQkJICAgQlZfQVBCSF9DSG5fQ01EX0NPTU1BTkRfX0RNQV9XUklURSwKKwkJICAgQVBCSF9DSG5fQ01EX0NPTU1BTkQpOworCXNzLT5kLmNvbW1hbmQtPnBpb193b3Jkc1swXSA9IGMwOworCXNzLT5kLmNvbW1hbmQtPmJ1Zl9wdHIgPSBzcGlfYnVmX2RtYTsKKworCXN0bXAzeHh4X2RtYV9yZXNldF9jaGFubmVsKHNzLT5kbWEpOworCXN0bXAzeHh4X2RtYV9jbGVhcl9pbnRlcnJ1cHQoc3MtPmRtYSk7CisJc3RtcDN4eHhfZG1hX2VuYWJsZV9pbnRlcnJ1cHQoc3MtPmRtYSk7CisJaW5pdF9jb21wbGV0aW9uKCZzcy0+ZG9uZSk7CisJc3RtcDN4eHhfZG1hX2dvKHNzLT5kbWEsICZzcy0+ZCwgMSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmc3MtPmRvbmUpOworCisJaWYgKCFidXN5X3dhaXQocmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApICYgQk1fU1NQX0NUUkwwX1JVTikpCisJCXN0YXR1cyA9IEVUSU1FRE9VVDsKKworCWlmICghZG1hX2J1ZikKKwkJZG1hX3VubWFwX3NpbmdsZShzcy0+bWFzdGVyX2Rldiwgc3BpX2J1Zl9kbWEsIGxlbiwgZGlyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1wX3NwaV9lbmFibGUoc3RydWN0IHN0bXBfc3BpICpzcykKK3sKKwlzdG1wM3h4eF9zZXRsKEJNX1NTUF9DVFJMMF9MT0NLX0NTLCBzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7CisJc3RtcDN4eHhfY2xlYXJsKEJNX1NTUF9DVFJMMF9JR05PUkVfQ1JDLCBzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1wX3NwaV9kaXNhYmxlKHN0cnVjdCBzdG1wX3NwaSAqc3MpCit7CisJc3RtcDN4eHhfY2xlYXJsKEJNX1NTUF9DVFJMMF9MT0NLX0NTLCBzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7CisJc3RtcDN4eHhfc2V0bChCTV9TU1BfQ1RSTDBfSUdOT1JFX0NSQywgc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworfQorCitzdGF0aWMgaW50IHN0bXBfc3BpX3R4cnhfcGlvKHN0cnVjdCBzdG1wX3NwaSAqc3MsIGludCBjcywKKwkJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAorCQlib29sIGZpcnN0LCBib29sIGxhc3QsIGJvb2wgd3JpdGUpCit7CisJaWYgKGZpcnN0KQorCQlzdG1wX3NwaV9lbmFibGUoc3MpOworCisJc3RtcDN4eHhfc2V0bChzdG1wX3NwaV9jcyhjcyksIHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKTsKKworCXdoaWxlIChsZW4tLSkgeworCQlpZiAobGFzdCAmJiBsZW4gPD0gMCkKKwkJCXN0bXBfc3BpX2Rpc2FibGUoc3MpOworCisJCXN0bXAzeHh4X2NsZWFybChCTV9TU1BfQ1RSTDBfWEZFUl9DT1VOVCwKKwkJCQlzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7CisJCXN0bXAzeHh4X3NldGwoMSwgc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworCisJCWlmICh3cml0ZSkKKwkJCXN0bXAzeHh4X2NsZWFybChCTV9TU1BfQ1RSTDBfUkVBRCwKKwkJCQkJc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApOworCQllbHNlCisJCQlzdG1wM3h4eF9zZXRsKEJNX1NTUF9DVFJMMF9SRUFELAorCQkJCQlzcy0+cmVncyArIEhXX1NTUF9DVFJMMCk7CisKKwkJLyogUnVuISAqLworCQlzdG1wM3h4eF9zZXRsKEJNX1NTUF9DVFJMMF9SVU4sIHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKTsKKworCQlpZiAoIWJ1c3lfd2FpdChyZWFkbChzcy0+cmVncyArIEhXX1NTUF9DVFJMMCkgJgorCQkJCUJNX1NTUF9DVFJMMF9SVU4pKQorCQkJYnJlYWs7CisKKwkJaWYgKHdyaXRlKQorCQkJd3JpdGVsKCpidWYsIHNzLT5yZWdzICsgSFdfU1NQX0RBVEEpOworCisJCS8qIFNldCBUUkFOU0ZFUiAqLworCQlzdG1wM3h4eF9zZXRsKEJNX1NTUF9DVFJMMF9EQVRBX1hGRVIsIHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKTsKKworCQlpZiAoIXdyaXRlKSB7CisJCQlpZiAoYnVzeV93YWl0KChyZWFkbChzcy0+cmVncyArIEhXX1NTUF9TVEFUVVMpICYKKwkJCQkJQk1fU1NQX1NUQVRVU19GSUZPX0VNUFRZKSkpCisJCQkJYnJlYWs7CisJCQkqYnVmID0gcmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfREFUQSkgJiAweEZGOworCQl9CisKKwkJaWYgKCFidXN5X3dhaXQocmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApICYKKwkJCQkJQk1fU1NQX0NUUkwwX1JVTikpCisJCQlicmVhazsKKworCQkvKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGJ5dGUgKi8KKwkJYnVmKys7CisJfQorCisJcmV0dXJuIGxlbiA8IDAgPyAwIDogLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCBzdG1wX3NwaV9oYW5kbGVfbWVzc2FnZShzdHJ1Y3Qgc3RtcF9zcGkgKnNzLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm0pCit7CisJYm9vbCBmaXJzdCwgbGFzdDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0LCAqdG1wX3Q7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IGNzOworCisJY3MgPSBtLT5zcGktPmNoaXBfc2VsZWN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHQsIHRtcF90LCAmbS0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisKKwkJZmlyc3QgPSAoJnQtPnRyYW5zZmVyX2xpc3QgPT0gbS0+dHJhbnNmZXJzLm5leHQpOworCQlsYXN0ID0gKCZ0LT50cmFuc2Zlcl9saXN0ID09IG0tPnRyYW5zZmVycy5wcmV2KTsKKworCQlpZiAoZmlyc3QgfHwgdC0+c3BlZWRfaHogfHwgdC0+Yml0c19wZXJfd29yZCkKKwkJCXN0bXBfc3BpX3NldHVwX3RyYW5zZmVyKG0tPnNwaSwgdCk7CisKKwkJLyogcmVqZWN0ICJub3QgbGFzdCIgdHJhbnNmZXJzIHdoaWNoIHJlcXVlc3QgdG8gY2hhbmdlIGNzICovCisJCWlmICh0LT5jc19jaGFuZ2UgJiYgIWxhc3QpIHsKKwkJCWRldl9lcnIoJm0tPnNwaS0+ZGV2LAorCQkJCSJNZXNzYWdlIHdpdGggdC0+Y3NfY2hhbmdlIGhhcyBiZWVuIHNraXBwZWRcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAodC0+dHhfYnVmKSB7CisJCQlzdGF0dXMgPSBwaW8gPworCQkJICAgc3RtcF9zcGlfdHhyeF9waW8oc3MsIGNzLCAodm9pZCAqKXQtPnR4X2J1ZiwKKwkJCQkgICB0LT5sZW4sIGZpcnN0LCBsYXN0LCB0cnVlKSA6CisJCQkgICBzdG1wX3NwaV90eHJ4X2RtYShzcywgY3MsICh2b2lkICopdC0+dHhfYnVmLAorCQkJCSAgIHQtPnR4X2RtYSwgdC0+bGVuLCBmaXJzdCwgbGFzdCwgdHJ1ZSk7CisjaWZkZWYgREVCVUcKKwkJCWlmICh0LT5sZW4gPCAweDEwKQorCQkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJUeCAiLAorCQkJCQlEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCXQtPnR4X2J1ZiwgdC0+bGVuKTsKKwkJCWVsc2UKKwkJCQlwcl9kZWJ1ZygiVHg6ICVkIGJ5dGVzXG4iLCB0LT5sZW4pOworI2VuZGlmCisJCX0KKwkJaWYgKHQtPnJ4X2J1ZikgeworCQkJc3RhdHVzID0gcGlvID8KKwkJCSAgIHN0bXBfc3BpX3R4cnhfcGlvKHNzLCBjcywgdC0+cnhfYnVmLAorCQkJCSAgIHQtPmxlbiwgZmlyc3QsIGxhc3QsIGZhbHNlKSA6CisJCQkgICBzdG1wX3NwaV90eHJ4X2RtYShzcywgY3MsIHQtPnJ4X2J1ZiwKKwkJCQkgICB0LT5yeF9kbWEsIHQtPmxlbiwgZmlyc3QsIGxhc3QsIGZhbHNlKTsKKyNpZmRlZiBERUJVRworCQkJaWYgKHQtPmxlbiA8IDB4MTApCisJCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIlJ4ICIsCisJCQkJCURVTVBfUFJFRklYX09GRlNFVCwKKwkJCQkJdC0+cnhfYnVmLCB0LT5sZW4pOworCQkJZWxzZQorCQkJCXByX2RlYnVnKCJSeDogJWQgYnl0ZXNcbiIsIHQtPmxlbik7CisjZW5kaWYKKwkJfQorCisJCWlmICh0LT5kZWxheV91c2VjcykKKwkJCXVkZWxheSh0LT5kZWxheV91c2Vjcyk7CisKKwkJaWYgKHN0YXR1cykKKwkJCWJyZWFrOworCisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogc3RtcF9zcGlfaGFuZGxlIC0gaGFuZGxlIG1lc3NhZ2VzIGZyb20gdGhlIHF1ZXVlCisgKi8KK3N0YXRpYyB2b2lkIHN0bXBfc3BpX2hhbmRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IHN0bXBfc3BpICpzcyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3Qgc3RtcF9zcGksIHdvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNwaV9tZXNzYWdlICptOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNzLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzcy0+cXVldWUpKSB7CisJCW0gPSBsaXN0X2VudHJ5KHNzLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgc3BpX21lc3NhZ2UsIHF1ZXVlKTsKKwkJbGlzdF9kZWxfaW5pdCgmbS0+cXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcy0+bG9jaywgZmxhZ3MpOworCisJCW0tPnN0YXR1cyA9IHN0bXBfc3BpX2hhbmRsZV9tZXNzYWdlKHNzLCBtKTsKKwkJbS0+Y29tcGxldGUobS0+Y29udGV4dCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNzLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNzLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogc3RtcF9zcGlfdHJhbnNmZXIgLSBwZXJmb3JtIG1lc3NhZ2UgdHJhbnNmZXIuCisgKiBDYWxsZWQgaW5kaXJlY3RseSBmcm9tIHNwaV9hc3luYywgcXVldWVzIGFsbCB0aGUgbWVzc2FnZXMgdG8KKyAqIHNwaV9oYW5kbGVfbWVzc2FnZS4KKyAqIEBzcGk6IHNwaSBkZXZpY2UKKyAqIEBtOiBtZXNzYWdlIHRvIGJlIHF1ZXVlZAorICovCitzdGF0aWMgaW50IHN0bXBfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbSkKK3sKKwlzdHJ1Y3Qgc3RtcF9zcGkgKnNzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW0tPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3MtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZtLT5xdWV1ZSwgJnNzLT5xdWV1ZSk7CisJcXVldWVfd29yayhzcy0+d29ya3F1ZXVlLCAmc3MtPndvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdG1wX3NwaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzdG1wX3NwaSAqc3MgPSBkZXZfaWQ7CisKKwlzdG1wM3h4eF9kbWFfY2xlYXJfaW50ZXJydXB0KHNzLT5kbWEpOworCWNvbXBsZXRlKCZzcy0+ZG9uZSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtcF9zcGlfaXJxX2VycihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHN0bXBfc3BpICpzcyA9IGRldl9pZDsKKwl1MzIgYzEsIHN0OworCisJYzEgPSByZWFkbChzcy0+cmVncyArIEhXX1NTUF9DVFJMMSk7CisJc3QgPSByZWFkbChzcy0+cmVncyArIEhXX1NTUF9TVEFUVVMpOworCWRldl9lcnIoc3MtPm1hc3Rlcl9kZXYsICIlczogc3RhdHVzID0gMHglMDhYLCBjMSA9IDB4JTA4WFxuIiwKKwkJX19mdW5jX18sIHN0LCBjMSk7CisJc3RtcDN4eHhfY2xlYXJsKGMxICYgMHhDQ0NDMDAwMCwgc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzdG1wX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3Qgc3RtcF9zcGkgKnNzOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJmRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHN0bXBfc3BpKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0MDsKKwl9CisJbWFzdGVyLT5mbGFncyA9IFNQSV9NQVNURVJfSEFMRl9EVVBMRVg7CisKKwlzcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7CisKKwkvKiBHZXQgcmVzb3VyY2VzKG1lbW9yeSwgSVJRKSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dF9wdXRfbWFzdGVyOworCX0KKwlzcy0+cmVncyA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCWlmICghc3MtPnJlZ3MpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfcHV0X21hc3RlcjsKKwl9CisKKwlzcy0+bWFzdGVyX2RldiA9ICZkZXYtPmRldjsKKwlzcy0+aWQgPSBkZXYtPmlkOworCisJSU5JVF9XT1JLKCZzcy0+d29yaywgc3RtcF9zcGlfaGFuZGxlKTsKKwlJTklUX0xJU1RfSEVBRCgmc3MtPnF1ZXVlKTsKKwlzcGluX2xvY2tfaW5pdCgmc3MtPmxvY2spOworCisJc3MtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldl9uYW1lKCZkZXYtPmRldikpOworCWlmICghc3MtPndvcmtxdWV1ZSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0X3B1dF9tYXN0ZXI7CisJfQorCW1hc3Rlci0+dHJhbnNmZXIgPSBzdG1wX3NwaV90cmFuc2ZlcjsKKwltYXN0ZXItPnNldHVwID0gc3RtcF9zcGlfc2V0dXA7CisKKwkvKiB0aGUgc3BpLT5tb2RlIGJpdHMgdW5kZXJzdG9vZCBieSB0aGlzIGRyaXZlcjogKi8KKwltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEE7CisKKwlzcy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChzcy0+aXJxIDwgMCkgeworCQllcnIgPSBzcy0+aXJxOworCQlnb3RvIG91dF9wdXRfbWFzdGVyOworCX0KKwlzcy0+ZXJyX2lycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAxKTsKKwlpZiAoc3MtPmVycl9pcnEgPCAwKSB7CisJCWVyciA9IHNzLT5lcnJfaXJxOworCQlnb3RvIG91dF9wdXRfbWFzdGVyOworCX0KKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dF9wdXRfbWFzdGVyOworCX0KKworCXNzLT5kbWEgPSByLT5zdGFydDsKKwllcnIgPSBzdG1wM3h4eF9kbWFfcmVxdWVzdChzcy0+ZG1hLCAmZGV2LT5kZXYsIGRldl9uYW1lKCZkZXYtPmRldikpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3B1dF9tYXN0ZXI7CisKKwllcnIgPSBzdG1wM3h4eF9kbWFfYWxsb2NhdGVfY29tbWFuZChzcy0+ZG1hLCAmc3MtPmQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWVfZG1hOworCisJbWFzdGVyLT5idXNfbnVtID0gZGV2LT5pZDsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gMTsKKworCS8qIFNQSSBjb250cm9sbGVyIGluaXRpYWxpemF0aW9ucyAqLworCWVyciA9IHN0bXBfc3BpX2luaXRfaHcoc3MpOworCWlmIChlcnIpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJjYW5ub3QgaW5pdGlhbGl6ZSBoYXJkd2FyZVxuIik7CisJCWdvdG8gb3V0X2ZyZWVfZG1hX2Rlc2M7CisJfQorCisJaWYgKGNsb2NrKSB7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgImNsb2NrIHJhdGUgZm9yY2VkIHRvICVkXG4iLCBjbG9jayk7CisJCWNsa19zZXRfcmF0ZShzcy0+Y2xrLCBjbG9jayk7CisJfQorCXNzLT5zcGVlZF9raHogPSBjbGtfZ2V0X3JhdGUoc3MtPmNsayk7CisJc3MtPmRpdmlkZXIgPSAyOworCWRldl9pbmZvKCZkZXYtPmRldiwgIm1heCBwb3NzaWJsZSBzcGVlZCAlZCA9ICVsZC8lZCBrSHpcbiIsCisJCXNzLT5zcGVlZF9raHosIGNsa19nZXRfcmF0ZShzcy0+Y2xrKSwgc3MtPmRpdmlkZXIpOworCisJLyogUmVnaXN0ZXIgZm9yIFNQSSBpbnRlcnJ1cHQgKi8KKwllcnIgPSByZXF1ZXN0X2lycShzcy0+aXJxLCBzdG1wX3NwaV9pcnEsIDAsCisJCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHNzKTsKKwlpZiAoZXJyKSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkLCAlZFxuIiwgZXJyKTsKKwkJZ290byBvdXRfcmVsZWFzZV9odzsKKwl9CisKKwkvKiAuLmFuZCBzaGFyZWQgaW50ZXJydXB0IGZvciBhbGwgU1NQIGNvbnRyb2xsZXJzICovCisJZXJyID0gcmVxdWVzdF9pcnEoc3MtPmVycl9pcnEsIHN0bXBfc3BpX2lycV9lcnIsIElSUUZfU0hBUkVELAorCQkJICBkZXZfbmFtZSgmZGV2LT5kZXYpLCBzcyk7CisJaWYgKGVycikgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgInJlcXVlc3RfaXJxKGVycm9yKSBmYWlsZWQsICVkXG4iLCBlcnIpOworCQlnb3RvIG91dF9mcmVlX2lycTsKKwl9CisKKwllcnIgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJaWYgKGVycikgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhbm5vdCByZWdpc3RlciBzcGkgbWFzdGVyLCAlZFxuIiwgZXJyKTsKKwkJZ290byBvdXRfZnJlZV9pcnFfMjsKKwl9CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiYXQgKG1hcHBlZCkgMHglMDhYLCBpcnE9JWQsIGJ1cyAlZCwgJXMgbW9kZVxuIiwKKwkJCSh1MzIpc3MtPnJlZ3MsIHNzLT5pcnEsIG1hc3Rlci0+YnVzX251bSwKKwkJCXBpbyA/ICJQSU8iIDogIkRNQSIpOworCXJldHVybiAwOworCitvdXRfZnJlZV9pcnFfMjoKKwlmcmVlX2lycShzcy0+ZXJyX2lycSwgc3MpOworb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKHNzLT5pcnEsIHNzKTsKK291dF9mcmVlX2RtYV9kZXNjOgorCXN0bXAzeHh4X2RtYV9mcmVlX2NvbW1hbmQoc3MtPmRtYSwgJnNzLT5kKTsKK291dF9mcmVlX2RtYToKKwlzdG1wM3h4eF9kbWFfcmVsZWFzZShzcy0+ZG1hKTsKK291dF9yZWxlYXNlX2h3OgorCXN0bXBfc3BpX3JlbGVhc2VfaHcoc3MpOworb3V0X3B1dF9tYXN0ZXI6CisJaWYgKHNzLT53b3JrcXVldWUpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHNzLT53b3JrcXVldWUpOworCWlmIChzcy0+cmVncykKKwkJaW91bm1hcChzcy0+cmVncyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworb3V0MDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzdG1wX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1wX3NwaSAqc3M7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKworCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaWYgKG1hc3RlciA9PSBOVUxMKQorCQlnb3RvIG91dDA7CisJc3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKworCWZyZWVfaXJxKHNzLT5lcnJfaXJxLCBzcyk7CisJZnJlZV9pcnEoc3MtPmlycSwgc3MpOworCXN0bXAzeHh4X2RtYV9mcmVlX2NvbW1hbmQoc3MtPmRtYSwgJnNzLT5kKTsKKwlzdG1wM3h4eF9kbWFfcmVsZWFzZShzcy0+ZG1hKTsKKwlzdG1wX3NwaV9yZWxlYXNlX2h3KHNzKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShzcy0+d29ya3F1ZXVlKTsKKwlpb3VubWFwKHNzLT5yZWdzKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CitvdXQwOgorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHN0bXBfc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHBtc2cpCit7CisJc3RydWN0IHN0bXBfc3BpICpzczsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCisJbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlzcy0+c2F2ZWRfdGltaW5ncyA9IHJlYWRsKEhXX1NTUF9USU1JTkcgKyBzcy0+cmVncyk7CisJY2xrX2Rpc2FibGUoc3MtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG1wX3NwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3RtcF9zcGkgKnNzOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwltYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCWNsa19lbmFibGUoc3MtPmNsayk7CisJc3RtcDN4eHhfcmVzZXRfYmxvY2soc3MtPnJlZ3MsIGZhbHNlKTsKKwl3cml0ZWwoc3MtPnNhdmVkX3RpbWluZ3MsIHNzLT5yZWdzICsgSFdfU1NQX1RJTUlORyk7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgc3RtcF9zcGlfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHN0bXBfc3BpX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN0bXBfc3BpX2RyaXZlciA9IHsKKwkucHJvYmUJPSBzdG1wX3NwaV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3Aoc3RtcF9zcGlfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzdG1wM3h4eF9zc3AiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kID0gc3RtcF9zcGlfc3VzcGVuZCwKKwkucmVzdW1lICA9IHN0bXBfc3BpX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0bXBfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzdG1wX3NwaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3RtcF9zcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzdG1wX3NwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzdG1wX3NwaV9pbml0KTsKK21vZHVsZV9leGl0KHN0bXBfc3BpX2V4aXQpOworbW9kdWxlX3BhcmFtKHBpbywgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjbG9jaywgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9BVVRIT1IoImRtaXRyeSBwZXJ2dXNoaW4gPGRwZXJ2dXNoaW5AZW1iZWRkZWRhbGxleS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNUTVAzeHh4IFNQSS9TU1AgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IDYwNmU3YTQuLmY5MjFiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC02ODgsMyArNjg4LDQgQEAKIE1PRFVMRV9BVVRIT1IoIkFuZHJlYSBQYXRlcm5pYW5pLCA8YS5wYXRlcm5pYW5pQHN3YXBwLWVuZy5pdD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVXNlciBtb2RlIFNQSSBkZXZpY2UgaW50ZXJmYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInNwaTpzcGlkZXYiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3RsZTYyeDAuYyBiL2RyaXZlcnMvc3BpL3RsZTYyeDAuYwppbmRleCA0NTU5OTFmLi5iZjk1NDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS90bGU2MngwLmMKKysrIGIvZHJpdmVycy9zcGkvdGxlNjJ4MC5jCkBAIC0zMjksMyArMzI5LDQgQEAKIE1PRFVMRV9BVVRIT1IoIkJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVExFNjJ4MCBTUEkgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInNwaTp0bGU2MngwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCmluZGV4IDEwZDNmY2YuLjgyYjM0ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC00Nyw2ICs0Nyw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCBjMzAwOTNiLi5iMWNhZDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLSQoQ09ORklHX0VUMTMxWCkJCSs9IGV0MTMxeC8KIG9iai0kKENPTkZJR19TTElDT1NTKQkJKz0gc2xpY29zcy8KIG9iai0kKENPTkZJR19WSURFT19HTzcwMDcpCSs9IGdvNzAwNy8KK29iai0kKENPTkZJR19WSURFT19DWDI1ODIxKQkrPSBjeDI1ODIxLwogb2JqLSQoQ09ORklHX1VTQl9JUF9DT01NT04pCSs9IHVzYmlwLwogb2JqLSQoQ09ORklHX1czNVVORCkJCSs9IHdpbmJvbmQvCiBvYmotJChDT05GSUdfUFJJU00yX1VTQikJKz0gd2xhbi1uZy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzc1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9LY29uZmlnCkBAIC0wLDAgKzEsMzQgQEAKK2NvbmZpZyBWSURFT19DWDI1ODIxCisJdHJpc3RhdGUgIkNvbmV4YW50IGN4MjU4MjEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIElOUFVUCisJc2VsZWN0IEkyQ19BTEdPQklUCisJc2VsZWN0IFZJREVPX0JUQ1gKKwlzZWxlY3QgVklERU9fVFZFRVBST00KKwlzZWxlY3QgVklERU9fSVIKKwlzZWxlY3QgVklERU9CVUZfRFZCCisJc2VsZWN0IFZJREVPQlVGX0RNQV9TRworCXNlbGVjdCBWSURFT19DWDI1ODQwCisJc2VsZWN0IFZJREVPX0NYMjM0MVgKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBDb25leGFudCAyNTgyMSBiYXNlZAorCSAgVFYgY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MjU4MjEKKworY29uZmlnIFZJREVPX0NYMjU4MjFfQUxTQQorCXRyaXN0YXRlICJDb25leGFudCAyNTgyMSBETUEgYXVkaW8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0NYMjU4MjEgJiYgU05EICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTTkRfUENNCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgZGlyZWN0IChETUEpIGF1ZGlvIG9uCisJICBDb25leGFudCAyNTgyMSBiYXNlZCBjYXB0dXJlIGNhcmRzIHVzaW5nIEFMU0EuCisKKwkgIEl0IG9ubHkgd29ya3Mgd2l0aCBib2FyZHMgd2l0aCBmdW5jdGlvbiAwMSBlbmFibGVkLgorCSAgVG8gY2hlY2sgaWYgeW91ciBib2FyZCBzdXBwb3J0cywgdXNlIGxzcGNpIC1uLgorCSAgSWYgc3VwcG9ydGVkLCB5b3Ugc2hvdWxkIHNlZSAxNGYxOjg4MDEgb3IgMTRmMTo4ODExCisJICBQQ0kgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDI1ODIxLWFsc2EuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmODdmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK2N4MjU4MjEtb2Jqcwk6PSBjeDI1ODIxLWNvcmUubyBjeDI1ODIxLWNhcmRzLm8gY3gyNTgyMS1pMmMubyBjeDI1ODIxLWdwaW8ubyAJCQkJXAorCQkJCWN4MjU4MjEtbWVkdXNhLXZpZGVvLm8gY3gyNTgyMS12aWRlby5vIGN4MjU4MjEtdmlkZW8wLm8gY3gyNTgyMS12aWRlbzEubyAgICBcCisJCQkJY3gyNTgyMS12aWRlbzIubyBjeDI1ODIxLXZpZGVvMy5vIGN4MjU4MjEtdmlkZW80Lm8gY3gyNTgyMS12aWRlbzUubyAgICAgICAgIFwKKwkJCQljeDI1ODIxLXZpZGVvNi5vIGN4MjU4MjEtdmlkZW83Lm8gY3gyNTgyMS12aWR1cHM5Lm8gY3gyNTgyMS12aWR1cHMxMC5vICAgICAgXAorCQkJCWN4MjU4MjEtYXVkdXBzMTEubyBjeDI1ODIxLXZpZGVvLXVwc3RyZWFtLm8gY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIubyAJXAorCQkJCWN4MjU4MjEtYXVkaW8tdXBzdHJlYW0ubyBjeDI1ODIxLXZpZGVvaW9jdGwubworCitvYmotJChDT05GSUdfVklERU9fQ1gyNTgyMSkgKz0gY3gyNTgyMS5vCitvYmotJChDT05GSUdfVklERU9fQ1gyNTgyMV9BTFNBKSArPSBjeDI1ODIxLWFsc2EubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJhNTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvUkVBRE1FCkBAIC0wLDAgKzEsNiBAQAorVG9kbzoKKwktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKKwktIHNwYXJzZSBjbGVhbnVwcworCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYWxzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZWVmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYwpAQCAtMCwwICsxLDc4OSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKglCYXNlZCBvbiBTQUE3MTN4IEFMU0EgZHJpdmVyIGFuZCBDWDg4IGRyaXZlcgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJjeDI1ODIxLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1yZWcuaCIKKworI2RlZmluZSBBVURJT19TUkFNX0NIQU5ORUwJU1JBTV9DSDA4CisKKyNkZWZpbmUgZHByaW50ayhsZXZlbCxmbXQsIGFyZy4uLikJaWYgKGRlYnVnID49IGxldmVsKSBcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMTogIiBmbXQsIGNoaXAtPmRldi0+bmFtZSAsICMjIGFyZykKKworI2RlZmluZSBkcHJpbnRrX2NvcmUobGV2ZWwsZm10LCBhcmcuLi4pCWlmIChkZWJ1ZyA+PSBsZXZlbCkgXAorCXByaW50ayhLRVJOX0RFQlVHICIlcy8xOiAiIGZtdCwgY2hpcC0+ZGV2LT5uYW1lICwgIyMgYXJnKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCURhdGEgdHlwZSBkZWNsYXJhdGlvbnMgLSBDYW4gYmUgbW9kZWQgdG8gYSBoZWFkZXIgZmlsZSBsYXRlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jeDI1ODIxX2NhcmRzW1NORFJWX0NBUkRTXTsKK3N0YXRpYyBpbnQgZGV2bm87CisKK3N0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiB7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgcTsKKworCS8qIHBjaSBpL28gKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCisJLyogYXVkaW8gY29udHJvbHMgKi8KKwlpbnQgaXJxOworCisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJc3BpbmxvY2tfdCByZWdfbG9jazsKKwlhdG9taWNfdCBjb3VudDsKKworCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kX3NpemU7CisJdW5zaWduZWQgaW50IG51bV9wZXJpb2RzOworCisJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hX3Jpc2M7CisKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworfTsKK3R5cGVkZWYgc3RydWN0IGN4MjU4MjFfYXVkaW9fZGV2IHNuZF9jeDI1ODIxX2NhcmRfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJTW9kdWxlIGdsb2JhbCBzdGF0aWMgdmFycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IHsgMSxbMSAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMSB9OworCittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIGN4MjU4MjEgc291bmRjYXJkLiBkZWZhdWx0IGVuYWJsZWQuIik7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgY3gyNTgyMSBjYXB0dXJlIGludGVyZmFjZShzKS4iKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCQlNb2R1bGUgbWFjcm9zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIGRyaXZlciBtb2R1bGUgZm9yIGN4MjU4MjEgYmFzZWQgY2FwdHVyZSBjYXJkcyIpOworTU9EVUxFX0FVVEhPUigiSGllcCBIdXluaCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7Q29uZXhhbnQsMjU4MjF9Iik7CS8vInt7Q29uZXhhbnQsMjM4ODF9LCIKKworc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCU1vZHVsZSBzcGVjaWZpYyBmdW50aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb25zdGFudHMgdGFrZW4gZnJvbSBjeDg4LXJlZy5oICovCisjZGVmaW5lIEFVRF9JTlRfRE5fUklTQ0kxICAgICAgICgxIDw8ICAwKQorI2RlZmluZSBBVURfSU5UX1VQX1JJU0NJMSAgICAgICAoMSA8PCAgMSkKKyNkZWZpbmUgQVVEX0lOVF9SRFNfRE5fUklTQ0kxICAgKDEgPDwgIDIpCisjZGVmaW5lIEFVRF9JTlRfRE5fUklTQ0kyICAgICAgICgxIDw8ICA0KQkvKiB5ZXMsIDMgaXMgc2tpcHBlZCAqLworI2RlZmluZSBBVURfSU5UX1VQX1JJU0NJMiAgICAgICAoMSA8PCAgNSkKKyNkZWZpbmUgQVVEX0lOVF9SRFNfRE5fUklTQ0kyICAgKDEgPDwgIDYpCisjZGVmaW5lIEFVRF9JTlRfRE5fU1lOQyAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBBVURfSU5UX1VQX1NZTkMgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgQVVEX0lOVF9SRFNfRE5fU1lOQyAgICAgKDEgPDwgMTQpCisjZGVmaW5lIEFVRF9JTlRfT1BDX0VSUiAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBBVURfSU5UX0JFUl9JUlEgICAgICAgICAoMSA8PCAyMCkKKyNkZWZpbmUgQVVEX0lOVF9NQ0hHX0lSUSAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIEdQX0NPVU5UX0NPTlRST0xfUkVTRVQJMHgzCisKKyNkZWZpbmUgUENJX01TS19BVURfRVhUICAgKDEgPDwgIDQpCisjZGVmaW5lIFBDSV9NU0tfQVVEX0lOVCAgICgxIDw8ICAzKQorLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBTZXRzIGF1ZGlvIERNQQorICovCisKK3N0YXRpYyBpbnQgX2N4MjU4MjFfc3RhcnRfYXVkaW9fZG1hKHNuZF9jeDI1ODIxX2NhcmRfdCAqIGNoaXApCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPSBjaGlwLT5idWY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGlwLT5kZXY7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqYXVkaW9fY2ggPQorCSAgICAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW0FVRElPX1NSQU1fQ0hBTk5FTF07CisJdTMyIHRtcCA9IDA7CisKKwkvLyBlbmFibGUgb3V0cHV0IG9uIHRoZSBHUElPIDAgZm9yIHRoZSBNQ0xLIEFEQyAoQXVkaW8pCisJY3gyNTgyMV9zZXRfZ3Bpb3Bpbl9kaXJlY3Rpb24oY2hpcC0+ZGV2LCAwLCAwKTsKKworCS8qIE1ha2Ugc3VyZSBSSVNDL0ZJRk8gYXJlIG9mZiBiZWZvcmUgY2hhbmdpbmcgRklGTy9SSVNDIHNldHRpbmdzICovCisJY3hfY2xlYXIoQVVEX0lOVF9ETUFfQ1RMLAorCQkgRkxEX0FVRF9EU1RfQV9SSVNDX0VOIHwgRkxEX0FVRF9EU1RfQV9GSUZPX0VOKTsKKworCS8qIHNldHVwIGZpZm8gKyBmb3JtYXQgLSBvdXQgY2hhbm5lbCAqLworCWN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX2F1ZGlvKGNoaXAtPmRldiwgYXVkaW9fY2gsIGJ1Zi0+YnBsLAorCQkJCQkgYnVmLT5yaXNjLmRtYSk7CisKKwkvKiBzZXRzIGJwbCBzaXplICovCisJY3hfd3JpdGUoQVVEX0FfTE5HVEgsIGJ1Zi0+YnBsKTsKKworCS8qIHJlc2V0IGNvdW50ZXIgKi8KKwljeF93cml0ZShBVURfQV9HUENOVF9DVEwsIEdQX0NPVU5UX0NPTlRST0xfUkVTRVQpOwkvL0dQX0NPVU5UX0NPTlRST0xfUkVTRVQgPSAweDMKKwlhdG9taWNfc2V0KCZjaGlwLT5jb3VudCwgMCk7CisKKwkvL1NldCB0aGUgaW5wdXQgbW9kZSB0byAxNi1iaXQKKwl0bXAgPSBjeF9yZWFkKEFVRF9BX0NGRyk7CisJY3hfd3JpdGUoQVVEX0FfQ0ZHLAorCQkgdG1wIHwgRkxEX0FVRF9EU1RfUEtfTU9ERSB8IEZMRF9BVURfRFNUX0VOQUJMRSB8CisJCSBGTERfQVVEX0NMS19FTkFCTEUpOworCisJLy9wcmludGsoS0VSTl9JTkZPICJERUJVRzogU3RhcnQgYXVkaW8gRE1BLCAlZCBCL2xpbmUsIGNtZHNfc3RhcnQoMHgleCk9ICVkIGxpbmVzL0ZJRk8sICVkIHBlcmlvZHMsICVkICIKKwkvLyAgICAgICJieXRlIGJ1ZmZlclxuIiwgYnVmLT5icGwsIGF1ZGlvX2NoLT5jbWRzX3N0YXJ0LCBjeF9yZWFkKGF1ZGlvX2NoLT5jbWRzX3N0YXJ0ICsgMTIpPj4xLAorCS8vICAgICAgY2hpcC0+bnVtX3BlcmlvZHMsIGJ1Zi0+YnBsICogY2hpcC0+bnVtX3BlcmlvZHMpOworCisJLyogRW5hYmxlcyBjb3JyZXNwb25kaW5nIGJpdHMgYXQgQVVEX0lOVF9TVEFUICovCisJY3hfd3JpdGUoQVVEX0FfSU5UX01TSywKKwkJIEZMRF9BVURfRFNUX1JJU0NJMSB8IEZMRF9BVURfRFNUX09GIHwgRkxEX0FVRF9EU1RfU1lOQyB8CisJCSBGTERfQVVEX0RTVF9PUENfRVJSKTsKKworCS8qIENsZWFuIGFueSBwZW5kaW5nIGludGVycnVwdCBiaXRzIGFscmVhZHkgc2V0ICovCisJY3hfd3JpdGUoQVVEX0FfSU5UX1NUQVQsIH4wKTsKKworCS8qIGVuYWJsZSBhdWRpbyBpcnFzICovCisJY3hfc2V0KFBDSV9JTlRfTVNLLCBjaGlwLT5kZXYtPnBjaV9pcnFtYXNrIHwgUENJX01TS19BVURfSU5UKTsKKworCS8vIFR1cm4gb24gYXVkaW8gZG93bnN0cmVhbSBmaWZvIGFuZCByaXNjIGVuYWJsZSAweDEwMQorCXRtcCA9IGN4X3JlYWQoQVVEX0lOVF9ETUFfQ1RMKTsKKwljeF9zZXQoQVVEX0lOVF9ETUFfQ1RMLAorCSAgICAgICB0bXAgfCAoRkxEX0FVRF9EU1RfQV9SSVNDX0VOIHwgRkxEX0FVRF9EU1RfQV9GSUZPX0VOKSk7CisKKwltZGVsYXkoMTAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBSZXNldHMgYXVkaW8gRE1BCisgKi8KK3N0YXRpYyBpbnQgX2N4MjU4MjFfc3RvcF9hdWRpb19kbWEoc25kX2N4MjU4MjFfY2FyZF90ICogY2hpcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGNoaXAtPmRldjsKKworCS8qIHN0b3AgZG1hICovCisJY3hfY2xlYXIoQVVEX0lOVF9ETUFfQ1RMLAorCQkgRkxEX0FVRF9EU1RfQV9SSVNDX0VOIHwgRkxEX0FVRF9EU1RfQV9GSUZPX0VOKTsKKworCS8qIGRpc2FibGUgaXJxcyAqLworCWN4X2NsZWFyKFBDSV9JTlRfTVNLLCBQQ0lfTVNLX0FVRF9JTlQpOworCWN4X2NsZWFyKEFVRF9BX0lOVF9NU0ssCisJCSBBVURfSU5UX09QQ19FUlIgfCBBVURfSU5UX0ROX1NZTkMgfCBBVURfSU5UX0ROX1JJU0NJMiB8CisJCSBBVURfSU5UX0ROX1JJU0NJMSk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhfSVJRX0xPT1AgNTAKKworLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBJUlEgZG1hIGJpdHMKKyAqLworc3RhdGljIGNoYXIgKmN4MjU4MjFfYXVkX2lycXNbMzJdID0geworCSJkbl9yaXNjaTEiLCAidXBfcmlzY2kxIiwgInJkc19kbl9yaXNjMSIsCS8qIDAtMiAqLworCU5VTEwsCQkJLyogcmVzZXJ2ZWQgKi8KKwkiZG5fcmlzY2kyIiwgInVwX3Jpc2NpMiIsICJyZHNfZG5fcmlzYzIiLAkvKiA0LTYgKi8KKwlOVUxMLAkJCS8qIHJlc2VydmVkICovCisJImRuZl9vZiIsICJ1cGZfdWYiLCAicmRzX2RuZl91ZiIsCS8qIDgtMTAgKi8KKwlOVUxMLAkJCS8qIHJlc2VydmVkICovCisJImRuX3N5bmMiLCAidXBfc3luYyIsICJyZHNfZG5fc3luYyIsCS8qIDEyLTE0ICovCisJTlVMTCwJCQkvKiByZXNlcnZlZCAqLworCSJvcGNfZXJyIiwgInBhcl9lcnIiLCAicmlwX2VyciIsCS8qIDE2LTE4ICovCisJInBjaV9hYm9ydCIsICJiZXJfaXJxIiwgIm1jaGdfaXJxIgkvKiAxOS0yMSAqLworfTsKKworLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBUaHJlYXRzIElSUSBhdWRpbyBzcGVjaWZpYyBjYWxscworICovCitzdGF0aWMgdm9pZCBjeDI1ODIxX2F1ZF9pcnEoc25kX2N4MjU4MjFfY2FyZF90ICogY2hpcCwgdTMyIHN0YXR1cywgdTMyIG1hc2spCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGlwLT5kZXY7CisKKwlpZiAoMCA9PSAoc3RhdHVzICYgbWFzaykpIHsKKwkJcmV0dXJuOworCX0KKworCWN4X3dyaXRlKEFVRF9BX0lOVF9TVEFULCBzdGF0dXMpOworCWlmIChkZWJ1ZyA+IDEgfHwgKHN0YXR1cyAmIG1hc2sgJiB+MHhmZikpCisJCWN4MjU4MjFfcHJpbnRfaXJxYml0cyhkZXYtPm5hbWUsICJpcnEgYXVkIiwKKwkJCQkgICAgICBjeDI1ODIxX2F1ZF9pcnFzLAorCQkJCSAgICAgIEFSUkFZX1NJWkUoY3gyNTgyMV9hdWRfaXJxcyksIHN0YXR1cywKKwkJCQkgICAgICBtYXNrKTsKKworCS8qIHJpc2Mgb3AgY29kZSBlcnJvciAqLworCWlmIChzdGF0dXMgJiBBVURfSU5UX09QQ19FUlIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORyAlcy8xOiBBdWRpbyByaXNjIG9wIGNvZGUgZXJyb3JcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCisJCWN4X2NsZWFyKEFVRF9JTlRfRE1BX0NUTCwKKwkJCSBGTERfQVVEX0RTVF9BX1JJU0NfRU4gfCBGTERfQVVEX0RTVF9BX0ZJRk9fRU4pOworCQljeDI1ODIxX3NyYW1fY2hhbm5lbF9kdW1wX2F1ZGlvKGRldiwKKwkJCQkJCSZjeDI1ODIxX3NyYW1fY2hhbm5lbHMKKwkJCQkJCVtBVURJT19TUkFNX0NIQU5ORUxdKTsKKwl9CisJaWYgKHN0YXR1cyAmIEFVRF9JTlRfRE5fU1lOQykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HICVzOiBEb3duc3RyZWFtIHN5bmMgZXJyb3IhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJY3hfd3JpdGUoQVVEX0FfR1BDTlRfQ1RMLCBHUF9DT1VOVF9DT05UUk9MX1JFU0VUKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHJpc2MxIGRvd25zdHJlYW0gKi8KKwlpZiAoc3RhdHVzICYgQVVEX0lOVF9ETl9SSVNDSTEpIHsKKwkJYXRvbWljX3NldCgmY2hpcC0+Y291bnQsIGN4X3JlYWQoQVVEX0FfR1BDTlQpKTsKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5zdWJzdHJlYW0pOworCX0KK30KKworLyoKKyAqIEJPQVJEIFNwZWNpZmljOiBIYW5kbGVzIElSUSBjYWxscworICovCitzdGF0aWMgaXJxcmV0dXJuX3QgY3gyNTgyMV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXNuZF9jeDI1ODIxX2NhcmRfdCAqY2hpcCA9IGRldl9pZDsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGNoaXAtPmRldjsKKwl1MzIgc3RhdHVzLCBwY2lfc3RhdHVzOworCXUzMiBhdWRpbnRfc3RhdHVzLCBhdWRpbnRfbWFzazsKKwlpbnQgbG9vcCwgaGFuZGxlZCA9IDA7CisJaW50IGF1ZGludF9jb3VudCA9IDA7CisKKwlhdWRpbnRfc3RhdHVzID0gY3hfcmVhZChBVURfQV9JTlRfU1RBVCk7CisJYXVkaW50X21hc2sgPSBjeF9yZWFkKEFVRF9BX0lOVF9NU0spOworCWF1ZGludF9jb3VudCA9IGN4X3JlYWQoQVVEX0FfR1BDTlQpOworCXN0YXR1cyA9IGN4X3JlYWQoUENJX0lOVF9TVEFUKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCAxOyBsb29wKyspIHsKKwkJc3RhdHVzID0gY3hfcmVhZChQQ0lfSU5UX1NUQVQpOworCQlpZiAoMCA9PSBzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IGN4X3JlYWQoUENJX0lOVF9TVEFUKTsKKwkJCWF1ZGludF9zdGF0dXMgPSBjeF9yZWFkKEFVRF9BX0lOVF9TVEFUKTsKKwkJCWF1ZGludF9tYXNrID0gY3hfcmVhZChBVURfQV9JTlRfTVNLKTsKKworCQkJaWYgKHN0YXR1cykgeworCQkJCWhhbmRsZWQgPSAxOworCQkJCWN4X3dyaXRlKFBDSV9JTlRfU1RBVCwgc3RhdHVzKTsKKworCQkJCWN4MjU4MjFfYXVkX2lycShjaGlwLCBhdWRpbnRfc3RhdHVzLAorCQkJCQkJYXVkaW50X21hc2spOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJZ290byBvdXQ7CisJCX0KKworCQloYW5kbGVkID0gMTsKKwkJY3hfd3JpdGUoUENJX0lOVF9TVEFULCBzdGF0dXMpOworCisJCWN4MjU4MjFfYXVkX2lycShjaGlwLCBhdWRpbnRfc3RhdHVzLCBhdWRpbnRfbWFzayk7CisJfQorCisJcGNpX3N0YXR1cyA9IGN4X3JlYWQoUENJX0lOVF9TVEFUKTsKKworCWlmIChoYW5kbGVkKQorCQljeF93cml0ZShQQ0lfSU5UX1NUQVQsIHBjaV9zdGF0dXMpOworCisgICAgICBvdXQ6CisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3N0YXRpYyBpbnQgZHNwX2J1ZmZlcl9mcmVlKHNuZF9jeDI1ODIxX2NhcmRfdCAqIGNoaXApCit7CisJQlVHX09OKCFjaGlwLT5kbWFfc2l6ZSk7CisKKwlkcHJpbnRrKDIsICJGcmVlaW5nIGJ1ZmZlclxuIik7CisJdmlkZW9idWZfc2dfZG1hX3VubWFwKCZjaGlwLT5wY2ktPmRldiwgY2hpcC0+ZG1hX3Jpc2MpOworCXZpZGVvYnVmX2RtYV9mcmVlKGNoaXAtPmRtYV9yaXNjKTsKKwlidGN4X3Jpc2NtZW1fZnJlZShjaGlwLT5wY2ksICZjaGlwLT5idWYtPnJpc2MpOworCWtmcmVlKGNoaXAtPmJ1Zik7CisKKwljaGlwLT5kbWFfcmlzYyA9IE5VTEw7CisJY2hpcC0+ZG1hX3NpemUgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkJQUxTQSBQQ00gSW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERpZ2l0YWwgaGFyZHdhcmUgZGVmaW5pdGlvbgorICovCisjZGVmaW5lIERFRkFVTFRfRklGT19TSVpFCTM4NAorc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9jeDI1ODIxX2RpZ2l0YWxfaHcgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkgICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCSAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKworCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS8qIEFuYWxvZyBhdWRpbyBvdXRwdXQgd2lsbCBiZSBmdWxsIG9mIGNsaWNrcyBhbmQgcG9wcyBpZiB0aGVyZQorCSAgIGFyZSBub3QgZXhhY3RseSBmb3VyIGxpbmVzIGluIHRoZSBTUkFNIEZJRk8gYnVmZmVyLiAgKi8KKwkucGVyaW9kX2J5dGVzX21pbiA9IERFRkFVTFRfRklGT19TSVpFIC8gMywKKwkucGVyaW9kX2J5dGVzX21heCA9IERFRkFVTFRfRklGT19TSVpFIC8gMywKKwkucGVyaW9kc19taW4gPSAxLAorCS5wZXJpb2RzX21heCA9IEFVRElPX0xJTkVfU0laRSwKKwkuYnVmZmVyX2J5dGVzX21heCA9IChBVURJT19MSU5FX1NJWkUgKiBBVURJT19MSU5FX1NJWkUpLAkvLzEyOCoxMjggPSAxNjM4NCA9IDEwMjQgKiAxNgorfTsKKworLyoKKyAqIGF1ZGlvIHBjbSBjYXB0dXJlIG9wZW4gY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBzbmRfY3gyNTgyMV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzbmRfY3gyNTgyMV9jYXJkX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBicGwgPSAwOworCisJaWYgKCFjaGlwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiREVCVUc6IGN4MjU4MjEgY2FuJ3QgZmluZCBkZXZpY2Ugc3RydWN0LiIKKwkJICAgICAgICIgQ2FuJ3QgcHJvY2VlZCB3aXRoIG9wZW5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllcnIgPQorCSAgICBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MihydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gX2Vycm9yOworCisJY2hpcC0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCisJcnVudGltZS0+aHcgPSBzbmRfY3gyNTgyMV9kaWdpdGFsX2h3OworCisJaWYgKGN4MjU4MjFfc3JhbV9jaGFubmVsc1tBVURJT19TUkFNX0NIQU5ORUxdLmZpZm9fc2l6ZSAhPQorCSAgICBERUZBVUxUX0ZJRk9fU0laRSkgeworCQlicGwgPSBjeDI1ODIxX3NyYW1fY2hhbm5lbHNbQVVESU9fU1JBTV9DSEFOTkVMXS5maWZvX3NpemUgLyAzOwkvL3NpbmNlIHRoZXJlIGFyZSAzIGF1ZGlvIENsdXN0ZXJzCisJCWJwbCAmPSB+NzsJLyogbXVzdCBiZSBtdWx0aXBsZSBvZiA4ICovCisKKwkJaWYgKGJwbCA+IEFVRElPX0xJTkVfU0laRSkgeworCQkJYnBsID0gQVVESU9fTElORV9TSVpFOworCQl9CisJCXJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19taW4gPSBicGw7CisJCXJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19tYXggPSBicGw7CisJfQorCisJcmV0dXJuIDA7CisgICAgICBfZXJyb3I6CisJZHByaW50aygxLCAiRXJyb3Igb3BlbmluZyBQQ00hXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogYXVkaW8gY2xvc2UgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBzbmRfY3gyNTgyMV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGh3X3BhcmFtcyBjYWxsYmFjaworICovCitzdGF0aWMgaW50IHNuZF9jeDI1ODIxX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc25kX2N4MjU4MjFfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYTsKKworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCWludCByZXQ7CisKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSkgeworCQlkc3BfYnVmZmVyX2ZyZWUoY2hpcCk7CisJCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCX0KKworCWNoaXAtPnBlcmlvZF9zaXplID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOworCWNoaXAtPm51bV9wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMoaHdfcGFyYW1zKTsKKwljaGlwLT5kbWFfc2l6ZSA9IGNoaXAtPnBlcmlvZF9zaXplICogcGFyYW1zX3BlcmlvZHMoaHdfcGFyYW1zKTsKKworCUJVR19PTighY2hpcC0+ZG1hX3NpemUpOworCUJVR19PTihjaGlwLT5udW1fcGVyaW9kcyAmIChjaGlwLT5udW1fcGVyaW9kcyAtIDEpKTsKKworCWJ1ZiA9IHZpZGVvYnVmX3NnX2FsbG9jKHNpemVvZigqYnVmKSk7CisJaWYgKE5VTEwgPT0gYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjaGlwLT5wZXJpb2Rfc2l6ZSA+IEFVRElPX0xJTkVfU0laRSkgeworCQljaGlwLT5wZXJpb2Rfc2l6ZSA9IEFVRElPX0xJTkVfU0laRTsKKwl9CisKKwlidWYtPnZiLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJYnVmLT52Yi5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwlidWYtPnZiLndpZHRoID0gY2hpcC0+cGVyaW9kX3NpemU7CisJYnVmLT5icGwgPSBjaGlwLT5wZXJpb2Rfc2l6ZTsKKwlidWYtPnZiLmhlaWdodCA9IGNoaXAtPm51bV9wZXJpb2RzOworCWJ1Zi0+dmIuc2l6ZSA9IGNoaXAtPmRtYV9zaXplOworCisJZG1hID0gdmlkZW9idWZfdG9fZG1hKCZidWYtPnZiKTsKKwl2aWRlb2J1Zl9kbWFfaW5pdChkbWEpOworCisJcmV0ID0gdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKGRtYSwgUENJX0RNQV9GUk9NREVWSUNFLAorCQkJCSAgICAgICAoUEFHRV9BTElHTihidWYtPnZiLnNpemUpID4+CisJCQkJCVBBR0VfU0hJRlQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IHZpZGVvYnVmX3NnX2RtYV9tYXAoJmNoaXAtPnBjaS0+ZGV2LCBkbWEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0KKwkgICAgY3gyNTgyMV9yaXNjX2RhdGFidWZmZXJfYXVkaW8oY2hpcC0+cGNpLCAmYnVmLT5yaXNjLCBkbWEtPnNnbGlzdCwKKwkJCQkJICBidWYtPnZiLndpZHRoLCBidWYtPnZiLmhlaWdodCwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkRFQlVHOiBFUlJPUiBhZnRlciBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbygpIFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogTG9vcCBiYWNrIHRvIHN0YXJ0IG9mIHByb2dyYW0gKi8KKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisKKwljaGlwLT5idWYgPSBidWY7CisJY2hpcC0+ZG1hX3Jpc2MgPSBkbWE7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gY2hpcC0+ZG1hX3Jpc2MtPnZtYWxsb2M7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSBjaGlwLT5kbWFfc2l6ZTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hZGRyID0gMDsKKworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBodyBmcmVlIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBpbnQgc25kX2N4MjU4MjFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzbmRfY3gyNTgyMV9jYXJkX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSkgeworCQlkc3BfYnVmZmVyX2ZyZWUoY2hpcCk7CisJCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcHJlcGFyZSBjYWxsYmFjaworICovCitzdGF0aWMgaW50IHNuZF9jeDI1ODIxX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0cmlnZ2VyIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBpbnQgc25kX2N4MjU4MjFfY2FyZF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICBpbnQgY21kKQoreworCXNuZF9jeDI1ODIxX2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgZXJyID0gMDsKKworCS8qIExvY2FsIGludGVycnVwdHMgYXJlIGFscmVhZHkgZGlzYWJsZWQgYnkgQUxTQSAqLworCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQllcnIgPSBfY3gyNTgyMV9zdGFydF9hdWRpb19kbWEoY2hpcCk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZXJyID0gX2N4MjU4MjFfc3RvcF9hdWRpb19kbWEoY2hpcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogcG9pbnRlciBjYWxsYmFjaworICovCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2N4MjU4MjFfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0KKwkJCQkJICAgICAqc3Vic3RyZWFtKQoreworCXNuZF9jeDI1ODIxX2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXUxNiBjb3VudDsKKworCWNvdW50ID0gYXRvbWljX3JlYWQoJmNoaXAtPmNvdW50KTsKKworCXJldHVybiBydW50aW1lLT5wZXJpb2Rfc2l6ZSAqIChjb3VudCAmIChydW50aW1lLT5wZXJpb2RzIC0gMSkpOworfQorCisvKgorICogcGFnZSBjYWxsYmFjayAobmVlZGVkIGZvciBtbWFwKQorICovCitzdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9jeDI1ODIxX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl2b2lkICpwYWdlcHRyID0gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKKworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Cit9CisKKy8qCisgKiBvcGVyYXRvcnMKKyAqLworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY3gyNTgyMV9wY21fb3BzID0geworCS5vcGVuID0gc25kX2N4MjU4MjFfcGNtX29wZW4sCisJLmNsb3NlID0gc25kX2N4MjU4MjFfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHNuZF9jeDI1ODIxX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNuZF9jeDI1ODIxX2h3X2ZyZWUsCisJLnByZXBhcmUgPSBzbmRfY3gyNTgyMV9wcmVwYXJlLAorCS50cmlnZ2VyID0gc25kX2N4MjU4MjFfY2FyZF90cmlnZ2VyLAorCS5wb2ludGVyID0gc25kX2N4MjU4MjFfcG9pbnRlciwKKwkucGFnZSA9IHNuZF9jeDI1ODIxX3BhZ2UsCit9OworCisvKgorICogQUxTQSBjcmVhdGUgYSBQQ00gZGV2aWNlOiAgQ2FsbGVkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBib2FyZC4gU2V0cyB1cCB0aGUgbmFtZSBhbmQgaG9va3MgdXAKKyAqICB0aGUgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBpbnQgc25kX2N4MjU4MjFfcGNtKHNuZF9jeDI1ODIxX2NhcmRfdCAqIGNoaXAsIGludCBkZXZpY2UsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgbmFtZSwgZGV2aWNlLCAwLCAxLCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJFUlJPUjogRkFJTEVEIHNuZF9wY21fbmV3KCkgaW4gJXNcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiBlcnI7CisJfQorCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCXN0cmNweShwY20tPm5hbWUsIG5hbWUpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9jeDI1ODIxX3BjbV9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlCYXNpYyBGbG93IGZvciBTb3VuZCBEZXZpY2VzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFBDSSBJRCBUYWJsZSAtIDE0ZjE6ODgwMSBhbmQgMTRmMTo4ODExIG1lYW5zIGZ1bmN0aW9uIDE6IEF1ZGlvCisgKiBPbmx5IGJvYXJkcyB3aXRoIGVlcHJvbSBhbmQgYnl0ZSAxIGF0IGVlcHJvbT0xIGhhdmUgaXQKKyAqLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3gyNTgyMV9hdWRpb19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7MHgxNGYxLCAweDA5MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswLH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjeDI1ODIxX2F1ZGlvX3BjaV90YmwpOworCisvKgorICogTm90IHVzZWQgaW4gdGhlIGZ1bmN0aW9uIHNuZF9jeDI1ODIxX2Rldl9mcmVlIHNvIHJlbW92aW5nCisgKiBmcm9tIHRoZSBmaWxlLgorICovCisvKgorc3RhdGljIGludCBzbmRfY3gyNTgyMV9mcmVlKHNuZF9jeDI1ODIxX2NhcmRfdCAqY2hpcCkKK3sKKwlpZiAoY2hpcC0+aXJxID49IDApCisJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisKKwljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGNoaXAtPmRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CisKKwlyZXR1cm4gMDsKK30KKyovCisKKy8qCisgKiBDb21wb25lbnQgRGVzdHJ1Y3RvcgorICovCitzdGF0aWMgdm9pZCBzbmRfY3gyNTgyMV9kZXZfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc25kX2N4MjU4MjFfY2FyZF90ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJLy9zbmRfY3gyNTgyMV9mcmVlKGNoaXApOworCXNuZF9jYXJkX2ZyZWUoY2hpcC0+Y2FyZCk7Cit9CisKKy8qCisgKiBBbHNhIENvbnN0cnVjdG9yIC0gQ29tcG9uZW50IHByb2JlCisgKi8KK3N0YXRpYyBpbnQgY3gyNTgyMV9hdWRpb19pbml0ZGV2KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzbmRfY3gyNTgyMV9jYXJkX3QgKmNoaXA7CisJaW50IGVycjsKKworCWlmIChkZXZubyA+PSBTTkRSVl9DQVJEUykgeworCQlwcmludGsoS0VSTl9JTkZPICJERUJVRyBFUlJPUjogZGV2bm8gPj0gU05EUlZfQ0FSRFMgJXNcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAoLUVOT0RFVik7CisJfQorCisJaWYgKCFlbmFibGVbZGV2bm9dKSB7CisJCSsrZGV2bm87CisJCXByaW50ayhLRVJOX0lORk8gIkRFQlVHIEVSUk9SOiAhZW5hYmxlW2Rldm5vXSAlc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gKC1FTk9FTlQpOworCX0KKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsCisJCQkgc2l6ZW9mKHNuZF9jeDI1ODIxX2NhcmRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiREVCVUcgRVJST1I6IGNhbm5vdCBjcmVhdGUgc25kX2NhcmRfbmV3IGluICVzXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gZXJyOworCX0KKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJjeDI1ODIxIik7CisKKwkvKiBDYXJkICJjcmVhdGlvbiIgKi8KKwljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3gyNTgyMV9kZXZfZnJlZTsKKwljaGlwID0gKHNuZF9jeDI1ODIxX2NhcmRfdCAqKSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKKworCWNoaXAtPmRldiA9IGRldjsKKwljaGlwLT5jYXJkID0gY2FyZDsKKwljaGlwLT5wY2kgPSBkZXYtPnBjaTsKKwljaGlwLT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApOworCisJY2hpcC0+aXJxID0gZGV2LT5wY2ktPmlycTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+cGNpLT5pcnEsIGN4MjU4MjFfaXJxLAorCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGNoaXAtPmRldi0+bmFtZSwgY2hpcCk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SICVzOiBjYW4ndCBnZXQgSVJRICVkIGZvciBBTFNBXG4iLAorCQkgICAgICAgY2hpcC0+ZGV2LT5uYW1lLCBkZXYtPnBjaS0+aXJxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoKGVyciA9IHNuZF9jeDI1ODIxX3BjbShjaGlwLCAwLCAiY3gyNTgyMSBEaWdpdGFsIikpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiREVCVUcgRVJST1I6IGNhbm5vdCBjcmVhdGUgc25kX2N4MjU4MjFfcGNtICVzXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIGVycm9yOworCX0KKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmNoaXAtPnBjaS0+ZGV2KTsKKworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJjeDI1ODIxIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlZCIsIGNoaXAtPmRldi0+bmFtZSwKKwkJY2hpcC0+aW9iYXNlLCBjaGlwLT5pcnEpOworCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJDWDI1ODIxIik7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcy8laTogQUxTQSBzdXBwb3J0IGZvciBjeDI1ODIxIGJvYXJkc1xuIiwKKwkgICAgICAgY2FyZC0+ZHJpdmVyLCBkZXZubyk7CisKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJERUJVRyBFUlJPUjogY2Fubm90IHJlZ2lzdGVyIHNvdW5kIGNhcmQgJXNcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc25kX2N4MjU4MjFfY2FyZHNbZGV2bm9dID0gY2FyZDsKKworCWRldm5vKys7CisJcmV0dXJuIDA7CisKKyAgICAgIGVycm9yOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCQlMSU5VWCBNT0RVTEUgSU5JVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBjeDI1ODIxX2F1ZGlvX2Zpbmkodm9pZCkKK3sKKwlzbmRfY2FyZF9mcmVlKHNuZF9jeDI1ODIxX2NhcmRzWzBdKTsKK30KKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXplcgorICoKKyAqIExvb3BzIHRocm91Z2ggcHJlc2VudCBzYWE3MTM0IGNhcmRzLCBhbmQgYXNzaWducyBhbiBBTFNBIGRldmljZQorICogdG8gZWFjaCBvbmUKKyAqCisgKi8KK3N0YXRpYyBpbnQgY3gyNTgyMV9hbHNhX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQlkZXYgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisJCWN4MjU4MjFfYXVkaW9faW5pdGRldihkZXYpOworCX0KKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgImN4MjU4MjEgRVJST1IgQUxTQTogbm8gY3gyNTgyMSBjYXJkcyBmb3VuZFxuIik7CisKKwlyZXR1cm4gMDsKKworfQorCitsYXRlX2luaXRjYWxsKGN4MjU4MjFfYWxzYV9pbml0KTsKK21vZHVsZV9leGl0KGN4MjU4MjFfYXVkaW9fZmluaSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZGRmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmMKQEAgLTAsMCArMSw4MDQgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiwgPHNodS5saW5AY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1hdWRpby11cHN0cmVhbS5oIgorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjU4MjEgYmFzZWQgVFYgY2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIkhpZXAgSHV5bmggPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9pbnRyX21zayA9CisgICAgRkxEX0FVRF9TUkNfUklTQ0kxIHwgRkxEX0FVRF9TUkNfT0YgfCBGTERfQVVEX1NSQ19TWU5DIHwKKyAgICBGTERfQVVEX1NSQ19PUENfRVJSOworCitpbnQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXBfdXBzdHJlYW1fYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgYnBsLCB1MzIgcmlzYykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbGluZXM7CisJdTMyIGNkdDsKKworCWlmIChjaC0+Y21kc19zdGFydCA9PSAwKSB7CisJCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgMCk7CisJCXJldHVybiAwOworCX0KKworCWJwbCA9IChicGwgKyA3KSAmIH43OwkvKiBhbGlnbm1lbnQgKi8KKwljZHQgPSBjaC0+Y2R0OworCWxpbmVzID0gY2gtPmZpZm9fc2l6ZSAvIGJwbDsKKworCWlmIChsaW5lcyA+IDMpIHsKKwkJbGluZXMgPSAzOworCX0KKworCUJVR19PTihsaW5lcyA8IDIpOworCisJLyogd3JpdGUgQ0RUICovCisJZm9yIChpID0gMDsgaSA8IGxpbmVzOyBpKyspIHsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpLCBjaC0+Zmlmb19zdGFydCArIGJwbCAqIGkpOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyA0LCAwKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgOCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDEyLCAwKTsKKwl9CisKKwkvKiB3cml0ZSBDTURTICovCisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCByaXNjKTsKKworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgNCwgMCk7CisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyA4LCBjZHQpOworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTIsIEFVRElPX0NEVF9TSVpFX1FXKTsKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDE2LCBjaC0+Y3RybF9zdGFydCk7CisKKwkvL0lRIHNpemUKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCBBVURJT19JUV9TSVpFX0RXKTsKKworCWZvciAoaSA9IDI0OyBpIDwgODA7IGkgKz0gNCkKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyBpLCAwKTsKKworCS8qIGZpbGwgcmVnaXN0ZXJzICovCisJY3hfd3JpdGUoY2gtPnB0cjFfcmVnLCBjaC0+Zmlmb19zdGFydCk7CisJY3hfd3JpdGUoY2gtPnB0cjJfcmVnLCBjZHQpOworCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgQVVESU9fQ0RUX1NJWkVfUVcpOworCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgQVVESU9fQ0xVU1RFUl9TSVpFX1FXIC0gMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fbGUzMiAqY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQkJIF9fbGUzMiAqIHJwLAorCQkJCQkJIGRtYV9hZGRyX3QgZGF0YWJ1Zl9waHlzX2FkZHIsCisJCQkJCQkgdW5zaWduZWQgaW50IGJwbCwKKwkJCQkJCSBpbnQgZmlmb19lbmFibGUpCit7CisJdW5zaWduZWQgaW50IGxpbmU7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9CisJICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbZGV2LT5fYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3RdOworCWludCBvZmZzZXQgPSAwOworCisJLyogc2NhbiBsaW5lcyAqLworCWZvciAobGluZSA9IDA7IGxpbmUgPCBMSU5FU19QRVJfQVVESU9fQlVGRkVSOyBsaW5lKyspIHsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVBRCB8IFJJU0NfU09MIHwgUklTQ19FT0wgfCBicGwpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoZGF0YWJ1Zl9waHlzX2FkZHIgKyBvZmZzZXQpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCQkvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgRklGTyBhZnRlciB0aGUgZmlyc3QgMyBsaW5lcworCQkvLyBGb3IgdGhlIHVwc3RyZWFtIGF1ZGlvIGNoYW5uZWwsIHRoZSByaXNjIGVuZ2luZSB3aWxsIGVuYWJsZSB0aGUgRklGTy4KKwkJaWYgKGZpZm9fZW5hYmxlICYmIGxpbmUgPT0gMikgeworCQkJKihycCsrKSA9IFJJU0NfV1JJVEVDUjsKKwkJCSoocnArKykgPSBzcmFtX2NoLT5kbWFfY3RsOworCQkJKihycCsrKSA9IHNyYW1fY2gtPmZsZF9hdWRfZmlmb19lbjsKKwkJCSoocnArKykgPSAweDAwMDAwMDIwOworCQl9CisKKwkJb2Zmc2V0ICs9IEFVRElPX0xJTkVfU0laRTsKKwl9CisKKwlyZXR1cm4gcnA7Cit9CisKK2ludCBjeDI1ODIxX3Jpc2NfYnVmZmVyX3Vwc3RyZWFtX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnBsLCB1bnNpZ25lZCBpbnQgbGluZXMpCit7CisJX19sZTMyICpycDsKKwlpbnQgZmlmb19lbmFibGUgPSAwOworCWludCBmcmFtZSA9IDAsIGkgPSAwOworCWludCBmcmFtZV9zaXplID0gQVVESU9fREFUQV9CVUZfU1o7CisJaW50IGRhdGFidWZfb2Zmc2V0ID0gMDsKKwlpbnQgcmlzY19mbGFnID0gUklTQ19DTlRfSU5DOworCWRtYV9hZGRyX3QgcmlzY19waHlzX2p1bXBfYWRkcjsKKworCS8qIFZpcnR1YWwgYWRkcmVzcyBvZiBSaXNjIGJ1ZmZlciBwcm9ncmFtICovCisJcnAgPSBkZXYtPl9yaXNjX3ZpcnRfYWRkcjsKKworCS8qIHN5bmMgaW5zdHJ1Y3Rpb24gKi8KKwkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19SRVNZTkMgfCBBVURJT19TWU5DX0xJTkUpOworCisJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgTlVNX0FVRElPX0ZSQU1FUzsgZnJhbWUrKykgeworCQlkYXRhYnVmX29mZnNldCA9IGZyYW1lX3NpemUgKiBmcmFtZTsKKworCQlpZiAoZnJhbWUgPT0gMCkgeworCQkJZmlmb19lbmFibGUgPSAxOworCQkJcmlzY19mbGFnID0gUklTQ19DTlRfUkVTRVQ7CisJCX0gZWxzZSB7CisJCQlmaWZvX2VuYWJsZSA9IDA7CisJCQlyaXNjX2ZsYWcgPSBSSVNDX0NOVF9JTkM7CisJCX0KKworCQkvL0NhbGN1bGF0ZSBwaHlzaWNhbCBqdW1wIGFkZHJlc3MKKwkJaWYgKChmcmFtZSArIDEpID09IE5VTV9BVURJT19GUkFNRVMpIHsKKwkJCXJpc2NfcGh5c19qdW1wX2FkZHIgPQorCQkJICAgIGRldi0+X3Jpc2NfcGh5c19zdGFydF9hZGRyICsKKwkJCSAgICBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRTsKKwkJfSBlbHNlIHsKKwkJCXJpc2NfcGh5c19qdW1wX2FkZHIgPQorCQkJICAgIGRldi0+X3Jpc2NfcGh5c19zdGFydF9hZGRyICsKKwkJCSAgICBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArCisJCQkgICAgQVVESU9fUklTQ19ETUFfQlVGX1NJWkUgKiAoZnJhbWUgKyAxKTsKKwkJfQorCisJCXJwID0gY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtX2F1ZGlvKGRldiwgcnAsCisJCQkJCQkgICAgICAgZGV2LT4KKwkJCQkJCSAgICAgICBfYXVkaW9kYXRhX2J1Zl9waHlzX2FkZHIKKwkJCQkJCSAgICAgICArIGRhdGFidWZfb2Zmc2V0LCBicGwsCisJCQkJCQkgICAgICAgZmlmb19lbmFibGUpOworCisJCWlmIChVU0VfUklTQ19OT09QX0FVRElPKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX05PX09QUzsgaSsrKSB7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfTk9PUCk7CisJCQl9CisJCX0KKworCQkvLyBMb29wIHRvIChOdGgpRnJhbWVSSVNDIG9yIHRvIFN0YXJ0IG9mIFJpc2MgcHJvZ3JhbSAmIGdlbmVyYXRlIElSUQorCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgcmlzY19mbGFnKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKHJpc2NfcGh5c19qdW1wX2FkZHIpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CisKKwkJLy9SZWNhbGN1bGF0ZSB2aXJ0dWFsIGFkZHJlc3MgYmFzZWQgb24gZnJhbWUgaW5kZXgKKwkJcnAgPSBkZXYtPl9yaXNjX3ZpcnRfYWRkciArIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFIC8gNCArCisJCSAgICAoQVVESU9fUklTQ19ETUFfQlVGX1NJWkUgKiAoZnJhbWUgKyAxKSAvIDQpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGN4MjU4MjFfZnJlZV9tZW1vcnlfYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+X3Jpc2NfdmlydF9hZGRyKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+X2F1ZGlvcmlzY19zaXplLAorCQkJCSAgICBkZXYtPl9yaXNjX3ZpcnRfYWRkciwgZGV2LT5fcmlzY19waHlzX2FkZHIpOworCQlkZXYtPl9yaXNjX3ZpcnRfYWRkciA9IE5VTEw7CisJfQorCisJaWYgKGRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+X2F1ZGlvZGF0YV9idWZfc2l6ZSwKKwkJCQkgICAgZGV2LT5fYXVkaW9kYXRhX2J1Zl92aXJ0X2FkZHIsCisJCQkJICAgIGRldi0+X2F1ZGlvZGF0YV9idWZfcGh5c19hZGRyKTsKKwkJZGV2LT5fYXVkaW9kYXRhX2J1Zl92aXJ0X2FkZHIgPSBOVUxMOworCX0KK30KKwordm9pZCBjeDI1ODIxX3N0b3BfdXBzdHJlYW1fYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9CisJICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbQVVESU9fVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0JdOworCXUzMiB0bXAgPSAwOworCisJaWYgKCFkZXYtPl9hdWRpb19pc19ydW5uaW5nKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxOiBObyBhdWRpbyBmaWxlIGlzIGN1cnJlbnRseSBydW5uaW5nIHNvIHJldHVybiFcbiIpOworCQlyZXR1cm47CisJfQorCS8vRGlzYWJsZSBSSVNDIGludGVycnVwdHMKKwljeF93cml0ZShzcmFtX2NoLT5pbnRfbXNrLCAwKTsKKworCS8vVHVybiBPRkYgcmlzYyBhbmQgZmlmbyBlbmFibGUgaW4gQVVEX0RNQV9DTlRSTAorCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisJY3hfd3JpdGUoc3JhbV9jaC0+ZG1hX2N0bCwKKwkJIHRtcCAmIH4oc3JhbV9jaC0+ZmxkX2F1ZF9maWZvX2VuIHwgc3JhbV9jaC0+ZmxkX2F1ZF9yaXNjX2VuKSk7CisKKwkvL0NsZWFyIGRhdGEgYnVmZmVyIG1lbW9yeQorCWlmIChkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkcikKKwkJbWVtc2V0KGRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyLCAwLAorCQkgICAgICAgZGV2LT5fYXVkaW9kYXRhX2J1Zl9zaXplKTsKKworCWRldi0+X2F1ZGlvX2lzX3J1bm5pbmcgPSAwOworCWRldi0+X2lzX2ZpcnN0X2F1ZGlvX2ZyYW1lID0gMDsKKwlkZXYtPl9hdWRpb2ZyYW1lX2NvdW50ID0gMDsKKwlkZXYtPl9hdWRpb2ZpbGVfc3RhdHVzID0gRU5EX09GX0ZJTEU7CisKKwlpZiAoZGV2LT5faXJxX2F1ZGlvX3F1ZXVlcykgeworCQlrZnJlZShkZXYtPl9pcnFfYXVkaW9fcXVldWVzKTsKKwkJZGV2LT5faXJxX2F1ZGlvX3F1ZXVlcyA9IE5VTEw7CisJfQorCisJaWYgKGRldi0+X2F1ZGlvZmlsZW5hbWUgIT0gTlVMTCkKKwkJa2ZyZWUoZGV2LT5fYXVkaW9maWxlbmFtZSk7Cit9CisKK3ZvaWQgY3gyNTgyMV9mcmVlX21lbV91cHN0cmVhbV9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5fYXVkaW9faXNfcnVubmluZykgeworCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fYXVkaW8oZGV2KTsKKwl9CisKKwljeDI1ODIxX2ZyZWVfbWVtb3J5X2F1ZGlvKGRldik7Cit9CisKK2ludCBjeDI1ODIxX2dldF9hdWRpb19kYXRhKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwlzdHJ1Y3QgZmlsZSAqbXlmaWxlOworCWludCBmcmFtZV9pbmRleF90ZW1wID0gZGV2LT5fYXVkaW9mcmFtZV9pbmRleDsKKwlpbnQgaSA9IDA7CisJaW50IGxpbmVfc2l6ZSA9IEFVRElPX0xJTkVfU0laRTsKKwlpbnQgZnJhbWVfc2l6ZSA9IEFVRElPX0RBVEFfQlVGX1NaOworCWludCBmcmFtZV9vZmZzZXQgPSBmcmFtZV9zaXplICogZnJhbWVfaW5kZXhfdGVtcDsKKwlzc2l6ZV90IHZmc19yZWFkX3JldHZhbCA9IDA7CisJY2hhciBteWJ1ZltsaW5lX3NpemVdOworCWxvZmZfdCBmaWxlX29mZnNldCA9IGRldi0+X2F1ZGlvZnJhbWVfY291bnQgKiBmcmFtZV9zaXplOworCWxvZmZfdCBwb3M7CisJbW1fc2VnbWVudF90IG9sZF9mczsKKworCWlmIChkZXYtPl9hdWRpb2ZpbGVfc3RhdHVzID09IEVORF9PRl9GSUxFKQorCQlyZXR1cm4gMDsKKworCW15ZmlsZSA9IGZpbHBfb3BlbihkZXYtPl9hdWRpb2ZpbGVuYW1lLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLCAwKTsKKworCWlmIChJU19FUlIobXlmaWxlKSkgeworCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7CisJCXByaW50aygiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhIFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9hdWRpb2ZpbGVuYW1lLCBvcGVuX2Vycm5vKTsKKwkJcmV0dXJuIFBUUl9FUlIobXlmaWxlKTsKKwl9IGVsc2UgeworCQlpZiAoIShteWZpbGUtPmZfb3ApKSB7CisJCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgeworCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXBvcyA9IG15ZmlsZS0+Zl9wb3M7CisJCW9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5fYXVkaW9fbGluZXNfY291bnQ7IGkrKykgeworCQkJcG9zID0gZmlsZV9vZmZzZXQ7CisKKwkJCXZmc19yZWFkX3JldHZhbCA9CisJCQkgICAgdmZzX3JlYWQobXlmaWxlLCBteWJ1ZiwgbGluZV9zaXplLCAmcG9zKTsKKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA+IDAgJiYgdmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZQorCQkJICAgICYmIGRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJCQltZW1jcHkoKHZvaWQgKikoZGV2LT5fYXVkaW9kYXRhX2J1Zl92aXJ0X2FkZHIgKworCQkJCQkJZnJhbWVfb2Zmc2V0IC8gNCksIG15YnVmLAorCQkJCSAgICAgICB2ZnNfcmVhZF9yZXR2YWwpOworCQkJfQorCisJCQlmaWxlX29mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CisJCQlmcmFtZV9vZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOworCisJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAiRG9uZTogZXhpdCAlcygpIHNpbmNlIG5vIG1vcmUgYnl0ZXMgdG8gcmVhZCBmcm9tIEF1ZGlvIGZpbGUuXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaSA+IDApCisJCQlkZXYtPl9hdWRpb2ZyYW1lX2NvdW50Kys7CisKKwkJZGV2LT5fYXVkaW9maWxlX3N0YXR1cyA9CisJCSAgICAodmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZSkgPyBJTl9QUk9HUkVTUyA6IEVORF9PRl9GSUxFOworCisJCXNldF9mcyhvbGRfZnMpOworCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfYXVkaW91cHNfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGN4MjU4MjFfZGV2LCBfYXVkaW9fd29ya19lbnRyeSk7CisKKwlpZiAoIWRldikgeworCQlwcmludGsoIkVSUk9SICVzKCk6IHNpbmNlIGNvbnRhaW5lcl9vZih3b3JrX3N0cnVjdCkgRkFJTEVEISBcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwljeDI1ODIxX2dldF9hdWRpb19kYXRhKGRldiwKKwkJCSAgICAgICAmZGV2LT5zcmFtX2NoYW5uZWxzW2Rldi0+CisJCQkJCQkgICBfYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3RdKTsKK30KKworaW50IGN4MjU4MjFfb3BlbmZpbGVfYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoKQoreworCXN0cnVjdCBmaWxlICpteWZpbGU7CisJaW50IGkgPSAwLCBqID0gMDsKKwlpbnQgbGluZV9zaXplID0gQVVESU9fTElORV9TSVpFOworCXNzaXplX3QgdmZzX3JlYWRfcmV0dmFsID0gMDsKKwljaGFyIG15YnVmW2xpbmVfc2l6ZV07CisJbG9mZl90IHBvczsKKwlsb2ZmX3Qgb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpMDsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCisJbXlmaWxlID0gZmlscF9vcGVuKGRldi0+X2F1ZGlvZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19MQVJHRUZJTEUsIDApOworCisJaWYgKElTX0VSUihteWZpbGUpKSB7CisJCWNvbnN0IGludCBvcGVuX2Vycm5vID0gLVBUUl9FUlIobXlmaWxlKTsKKwkJcHJpbnRrKCIlcygpOiBFUlJPUiBvcGVuaW5nIGZpbGUoJXMpIHdpdGggZXJybm8gPSAlZCEgXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRldi0+X2F1ZGlvZmlsZW5hbWUsIG9wZW5fZXJybm8pOworCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOworCX0gZWxzZSB7CisJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKKwkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISBcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgeworCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXBvcyA9IG15ZmlsZS0+Zl9wb3M7CisJCW9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKworCQlmb3IgKGogPSAwOyBqIDwgTlVNX0FVRElPX0ZSQU1FUzsgaisrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5fYXVkaW9fbGluZXNfY291bnQ7IGkrKykgeworCQkJCXBvcyA9IG9mZnNldDsKKworCQkJCXZmc19yZWFkX3JldHZhbCA9CisJCQkJICAgIHZmc19yZWFkKG15ZmlsZSwgbXlidWYsIGxpbmVfc2l6ZSwgJnBvcyk7CisKKwkJCQlpZiAodmZzX3JlYWRfcmV0dmFsID4gMAorCQkJCSAgICAmJiB2ZnNfcmVhZF9yZXR2YWwgPT0gbGluZV9zaXplCisJCQkJICAgICYmIGRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJCQkJbWVtY3B5KCh2b2lkICopKGRldi0+CisJCQkJCQkJX2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyCisJCQkJCQkJKyBvZmZzZXQgLyA0KSwgbXlidWYsCisJCQkJCSAgICAgICB2ZnNfcmVhZF9yZXR2YWwpOworCQkJCX0KKworCQkJCW9mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CisKKwkJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gQXVkaW8gZmlsZS5cbiIsCisJCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGkgPiAwKSB7CisJCQkJZGV2LT5fYXVkaW9mcmFtZV9jb3VudCsrOworCQkJfQorCisJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlkZXYtPl9hdWRpb2ZpbGVfc3RhdHVzID0KKwkJICAgICh2ZnNfcmVhZF9yZXR2YWwgPT0gbGluZV9zaXplKSA/IElOX1BST0dSRVNTIDogRU5EX09GX0ZJTEU7CisKKwkJc2V0X2ZzKG9sZF9mcyk7CisJCW15ZmlsZS0+Zl9wb3MgPSAwOworCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNTgyMV9hdWRpb191cHN0cmVhbV9idWZmZXJfcHJlcGFyZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJCSBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoLAorCQkJCQkJIGludCBicGwpCit7CisJaW50IHJldCA9IDA7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlkbWFfYWRkcl90IGRhdGFfZG1hX2FkZHI7CisKKwljeDI1ODIxX2ZyZWVfbWVtb3J5X2F1ZGlvKGRldik7CisKKwlkZXYtPl9yaXNjX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPmF1ZGlvX3Vwc3RyZWFtX3Jpc2NidWZfc2l6ZSwKKwkJCQkgJmRtYV9hZGRyKTsKKwlkZXYtPl9yaXNjX3ZpcnRfc3RhcnRfYWRkciA9IGRldi0+X3Jpc2NfdmlydF9hZGRyOworCWRldi0+X3Jpc2NfcGh5c19zdGFydF9hZGRyID0gZG1hX2FkZHI7CisJZGV2LT5fcmlzY19waHlzX2FkZHIgPSBkbWFfYWRkcjsKKwlkZXYtPl9hdWRpb3Jpc2Nfc2l6ZSA9IGRldi0+YXVkaW9fdXBzdHJlYW1fcmlzY2J1Zl9zaXplOworCisJaWYgKCFkZXYtPl9yaXNjX3ZpcnRfYWRkcikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMSBFUlJPUjogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSBGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBSSVNDIHByb2dyYW0hIFJldHVybmluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLy9DbGVhciBvdXQgbWVtb3J5IGF0IGFkZHJlc3MKKwltZW1zZXQoZGV2LT5fcmlzY192aXJ0X2FkZHIsIDAsIGRldi0+X2F1ZGlvcmlzY19zaXplKTsKKworCS8vRm9yIEF1ZGlvIERhdGEgYnVmZmVyIGFsbG9jYXRpb24KKwlkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPmF1ZGlvX3Vwc3RyZWFtX2RhdGFidWZfc2l6ZSwKKwkJCQkgJmRhdGFfZG1hX2FkZHIpOworCWRldi0+X2F1ZGlvZGF0YV9idWZfcGh5c19hZGRyID0gZGF0YV9kbWFfYWRkcjsKKwlkZXYtPl9hdWRpb2RhdGFfYnVmX3NpemUgPSBkZXYtPmF1ZGlvX3Vwc3RyZWFtX2RhdGFidWZfc2l6ZTsKKworCWlmICghZGV2LT5fYXVkaW9kYXRhX2J1Zl92aXJ0X2FkZHIpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjEgRVJST1I6IHBjaV9hbGxvY19jb25zaXN0ZW50KCkgRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSBidWZmZXIhIFJldHVybmluZy4gXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8vQ2xlYXIgb3V0IG1lbW9yeSBhdCBhZGRyZXNzCisJbWVtc2V0KGRldi0+X2F1ZGlvZGF0YV9idWZfdmlydF9hZGRyLCAwLCBkZXYtPl9hdWRpb2RhdGFfYnVmX3NpemUpOworCisJcmV0ID0gY3gyNTgyMV9vcGVuZmlsZV9hdWRpbyhkZXYsIHNyYW1fY2gpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLy9DcmVhdGluZyBSSVNDIHByb2dyYW1zCisJcmV0ID0KKwkgICAgY3gyNTgyMV9yaXNjX2J1ZmZlcl91cHN0cmVhbV9hdWRpbyhkZXYsIGRldi0+cGNpLCBicGwsCisJCQkJCSAgICAgICBkZXYtPl9hdWRpb19saW5lc19jb3VudCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJjeDI1ODIxIEVSUk9SIGNyZWF0aW5nIGF1ZGlvIHVwc3RyZWFtIFJJU0MgcHJvZ3JhbXMhIFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuIDA7CisKKyAgICAgIGVycm9yOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBjeDI1ODIxX2F1ZGlvX3Vwc3RyZWFtX2lycShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLAorCQkJICAgICAgIHUzMiBzdGF0dXMpCit7CisJaW50IGkgPSAwOworCXUzMiBpbnRfbXNrX3RtcDsKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFuX251bV07CisJZG1hX2FkZHJfdCByaXNjX3BoeXNfanVtcF9hZGRyOworCV9fbGUzMiAqcnA7CisKKwlpZiAoc3RhdHVzICYgRkxEX0FVRF9TUkNfUklTQ0kxKSB7CisJCS8vR2V0IGludGVycnVwdF9pbmRleCBvZiB0aGUgcHJvZ3JhbSB0aGF0IGludGVycnVwdGVkCisJCXUzMiBwcm9nX2NudCA9IGN4X3JlYWQoY2hhbm5lbC0+Z3BjbnQpOworCisJCS8vU2luY2Ugd2UndmUgaWRlbnRpZmllZCBvdXIgSVJRLCBjbGVhciBvdXIgYml0cyBmcm9tIHRoZSBpbnRlcnJ1cHQgbWFzayBhbmQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMKKwkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X21zaywgMCk7CisJCWN4X3dyaXRlKGNoYW5uZWwtPmludF9zdGF0LCBjeF9yZWFkKGNoYW5uZWwtPmludF9zdGF0KSk7CisKKwkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKKworCQl3aGlsZSAocHJvZ19jbnQgIT0gZGV2LT5fbGFzdF9pbmRleF9pcnEpIHsKKwkJCS8vVXBkYXRlIF9sYXN0X2luZGV4X2lycQorCQkJaWYgKGRldi0+X2xhc3RfaW5kZXhfaXJxIDwgKE5VTUJFUl9PRl9QUk9HUkFNUyAtIDEpKSB7CisJCQkJZGV2LT5fbGFzdF9pbmRleF9pcnErKzsKKwkJCX0gZWxzZSB7CisJCQkJZGV2LT5fbGFzdF9pbmRleF9pcnEgPSAwOworCQkJfQorCisJCQlkZXYtPl9hdWRpb2ZyYW1lX2luZGV4ID0gZGV2LT5fbGFzdF9pbmRleF9pcnE7CisKKwkJCXF1ZXVlX3dvcmsoZGV2LT5faXJxX2F1ZGlvX3F1ZXVlcywKKwkJCQkgICAmZGV2LT5fYXVkaW9fd29ya19lbnRyeSk7CisJCX0KKworCQlpZiAoZGV2LT5faXNfZmlyc3RfYXVkaW9fZnJhbWUpIHsKKwkJCWRldi0+X2lzX2ZpcnN0X2F1ZGlvX2ZyYW1lID0gMDsKKworCQkJaWYgKGRldi0+X3Jpc2NfdmlydF9zdGFydF9hZGRyICE9IE5VTEwpIHsKKwkJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0KKwkJCQkgICAgZGV2LT5fcmlzY19waHlzX3N0YXJ0X2FkZHIgKworCQkJCSAgICBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArCisJCQkJICAgIEFVRElPX1JJU0NfRE1BX0JVRl9TSVpFOworCisJCQkJcnAgPSBjeDI1ODIxX3Jpc2NfZmllbGRfdXBzdHJlYW1fYXVkaW8oZGV2LAorCQkJCQkJCQkgICAgICAgZGV2LT4KKwkJCQkJCQkJICAgICAgIF9yaXNjX3ZpcnRfc3RhcnRfYWRkcgorCQkJCQkJCQkgICAgICAgKyAxLAorCQkJCQkJCQkgICAgICAgZGV2LT4KKwkJCQkJCQkJICAgICAgIF9hdWRpb2RhdGFfYnVmX3BoeXNfYWRkciwKKwkJCQkJCQkJICAgICAgIEFVRElPX0xJTkVfU0laRSwKKwkJCQkJCQkJICAgICAgIEZJRk9fRElTQUJMRSk7CisKKwkJCQlpZiAoVVNFX1JJU0NfTk9PUF9BVURJTykgeworCQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX05PX09QUzsgaSsrKSB7CisJCQkJCQkqKHJwKyspID0KKwkJCQkJCSAgICBjcHVfdG9fbGUzMihSSVNDX05PT1ApOworCQkJCQl9CisJCQkJfQorCQkJCS8vIEp1bXAgdG8gMm5kIEF1ZGlvIEZyYW1lCisJCQkJKihycCsrKSA9CisJCQkJICAgIGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8CisJCQkJCQlSSVNDX0NOVF9SRVNFVCk7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHJpc2NfcGh5c19qdW1wX2FkZHIpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsKKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdHVzICYgRkxEX0FVRF9TUkNfT0YpCisJCQlwcmludGsoIiVzOiBBdWRpbyBSZWNlaXZlZCBPdmVyZmxvdyBFcnJvciBJbnRlcnJ1cHQhXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKworCQlpZiAoc3RhdHVzICYgRkxEX0FVRF9TUkNfU1lOQykKKwkJCXByaW50aygiJXM6IEF1ZGlvIFJlY2VpdmVkIFN5bmMgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisKKwkJaWYgKHN0YXR1cyAmIEZMRF9BVURfU1JDX09QQ19FUlIpCisJCQlwcmludGsoIiVzOiBBdWRpbyBSZWNlaXZlZCBPcENvZGUgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisKKwkJLy8gUmVhZCBhbmQgd3JpdGUgYmFjayB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBjbGVhciBvdXIgYml0cworCQljeF93cml0ZShjaGFubmVsLT5pbnRfc3RhdCwgY3hfcmVhZChjaGFubmVsLT5pbnRfc3RhdCkpOworCX0KKworCWlmIChkZXYtPl9hdWRpb2ZpbGVfc3RhdHVzID09IEVORF9PRl9GSUxFKSB7CisJCXByaW50aygiY3gyNTgyMTogRU9GIENoYW5uZWwgQXVkaW8gRnJhbWVjb3VudCA9ICVkXG4iLAorCQkgICAgICAgZGV2LT5fYXVkaW9mcmFtZV9jb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisJLy9FbFNFLCBzZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCByZS1lbmFibGUgaXJxLgorCWludF9tc2tfdG1wID0gY3hfcmVhZChjaGFubmVsLT5pbnRfbXNrKTsKKwljeF93cml0ZShjaGFubmVsLT5pbnRfbXNrLCBpbnRfbXNrX3RtcCB8PSBfaW50cl9tc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjeDI1ODIxX3Vwc3RyZWFtX2lycV9hdWRpbyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBkZXZfaWQ7CisJdTMyIG1za19zdGF0LCBhdWRpb19zdGF0dXM7CisJaW50IGhhbmRsZWQgPSAwOworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2g7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC0xOworCisJc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbZGV2LT5fYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3RdOworCisJbXNrX3N0YXQgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc3RhdCk7CisJYXVkaW9fc3RhdHVzID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfc3RhdCk7CisKKwkvLyBPbmx5IGRlYWwgd2l0aCBvdXIgaW50ZXJydXB0CisJaWYgKGF1ZGlvX3N0YXR1cykgeworCQloYW5kbGVkID0KKwkJICAgIGN4MjU4MjFfYXVkaW9fdXBzdHJlYW1faXJxKGRldiwKKwkJCQkJICAgICAgIGRldi0+CisJCQkJCSAgICAgICBfYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3QsCisJCQkJCSAgICAgICBhdWRpb19zdGF0dXMpOworCX0KKworCWlmIChoYW5kbGVkIDwgMCkgeworCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fYXVkaW8oZGV2KTsKKwl9IGVsc2UgeworCQloYW5kbGVkICs9IGhhbmRsZWQ7CisJfQorCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfd2FpdF9maWZvX2VuYWJsZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJaW50IGNvdW50ID0gMDsKKwl1MzIgdG1wOworCisJZG8geworCQkvL1dhaXQgMTAgbWljcm9zZWNvbmQgYmVmb3JlIGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgRklGTyBpcyB0dXJuZWQgT04uCisJCXVkZWxheSgxMCk7CisKKwkJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKworCQlpZiAoY291bnQrKyA+IDEwMDApCS8vMTAgbWlsbGlzZWNvbmQgdGltZW91dAorCQl7CisJCQlwcmludGsKKwkJCSAgICAoImN4MjU4MjEgRVJST1I6ICVzKCkgZmlmbyBpcyBOT1QgdHVybmVkIG9uLiBUaW1lb3V0IVxuIiwKKwkJCSAgICAgX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9CisKKwl9IHdoaWxlICghKHRtcCAmIHNyYW1fY2gtPmZsZF9hdWRfZmlmb19lbikpOworCit9CisKK2ludCBjeDI1ODIxX3N0YXJ0X2F1ZGlvX2RtYV91cHN0cmVhbShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gpCit7CisJdTMyIHRtcCA9IDA7CisJaW50IGVyciA9IDA7CisKKwkvLyBTZXQgdGhlIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIFJJU0MgcHJvZ3JhbSBpbiB0aGUgaW5pdGlhbCBwcm9ncmFtIGNvdW50ZXIoSVBDKSBtZW1iZXIgb2YgdGhlIENNRFMuCisJY3hfd3JpdGUoc3JhbV9jaC0+Y21kc19zdGFydCArIDAsIGRldi0+X3Jpc2NfcGh5c19hZGRyKTsKKwljeF93cml0ZShzcmFtX2NoLT5jbWRzX3N0YXJ0ICsgNCwgMCk7CS8qIFJpc2MgSVBDIEhpZ2ggNjQgYml0cyA2My0zMiAqLworCisJLyogcmVzZXQgY291bnRlciAqLworCWN4X3dyaXRlKHNyYW1fY2gtPmdwY250X2N0bCwgMyk7CisKKwkvL1NldCB0aGUgbGluZSBsZW5ndGggICAgICAgKEl0IGxvb2tzIGxpa2Ugd2UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZSBsaW5lIGxlbmd0aCkKKwljeF93cml0ZShzcmFtX2NoLT5hdWRfbGVuZ3RoLCBBVURJT19MSU5FX1NJWkUgJiBGTERfQVVEX0RTVF9MTl9MTkdUSCk7CisKKwkvL1NldCB0aGUgaW5wdXQgbW9kZSB0byAxNi1iaXQKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmF1ZF9jZmcpOworCXRtcCB8PQorCSAgICBGTERfQVVEX1NSQ19FTkFCTEUgfCBGTERfQVVEX0RTVF9QS19NT0RFIHwgRkxEX0FVRF9DTEtfRU5BQkxFIHwKKwkgICAgRkxEX0FVRF9NQVNURVJfTU9ERSB8IEZMRF9BVURfQ0xLX1NFTEVDVF9QTExfRCB8IEZMRF9BVURfU09OWV9NT0RFOworCWN4X3dyaXRlKHNyYW1fY2gtPmF1ZF9jZmcsIHRtcCk7CisKKwkvLyBSZWFkIGFuZCB3cml0ZSBiYWNrIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHRvIGNsZWFyIGl0CisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfc3RhdCk7CisJY3hfd3JpdGUoc3JhbV9jaC0+aW50X3N0YXQsIHRtcCk7CisKKwkvLyBDbGVhciBvdXIgYml0cyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgorCWN4X3dyaXRlKHNyYW1fY2gtPmludF9zdGF0LCBfaW50cl9tc2spOworCisJLy9TZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCBlbmFibGUgaXJxLgorCWN4X3NldChQQ0lfSU5UX01TSywgY3hfcmVhZChQQ0lfSU5UX01TSykgfCAoMSA8PCBzcmFtX2NoLT5pcnFfYml0KSk7CisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXNrKTsKKwljeF93cml0ZShzcmFtX2NoLT5pbnRfbXNrLCB0bXAgfD0gX2ludHJfbXNrKTsKKworCWVyciA9CisJICAgIHJlcXVlc3RfaXJxKGRldi0+cGNpLT5pcnEsIGN4MjU4MjFfdXBzdHJlYW1faXJxX2F1ZGlvLAorCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IHVwc3RyZWFtIElSUSAlZFxuIiwgZGV2LT5uYW1lLAorCQkgICAgICAgZGV2LT5wY2ktPmlycSk7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJLy8gU3RhcnQgdGhlIERNQSAgZW5naW5lCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwljeF9zZXQoc3JhbV9jaC0+ZG1hX2N0bCwgdG1wIHwgc3JhbV9jaC0+ZmxkX2F1ZF9yaXNjX2VuKTsKKworCWRldi0+X2F1ZGlvX2lzX3J1bm5pbmcgPSAxOworCWRldi0+X2lzX2ZpcnN0X2F1ZGlvX2ZyYW1lID0gMTsKKworCS8vIFRoZSBmaWZvX2VuIGJpdCB0dXJucyBvbiBieSB0aGUgZmlyc3QgUmlzYyBwcm9ncmFtCisJY3gyNTgyMV93YWl0X2ZpZm9fZW5hYmxlKGRldiwgc3JhbV9jaCk7CisKKwlyZXR1cm4gMDsKKworICAgICAgZmFpbF9pcnE6CisJY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihkZXYpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjeDI1ODIxX2F1ZGlvX3Vwc3RyZWFtX2luaXQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFubmVsX3NlbGVjdCkKK3sKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoOworCWludCByZXR2YWwgPSAwOworCWludCBlcnIgPSAwOworCWludCBzdHJfbGVuZ3RoID0gMDsKKworCWlmIChkZXYtPl9hdWRpb19pc19ydW5uaW5nKSB7CisJCXByaW50aygiQXVkaW8gQ2hhbm5lbCBpcyBzdGlsbCBydW5uaW5nIHNvIHJldHVybiFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXYtPl9hdWRpb191cHN0cmVhbV9jaGFubmVsX3NlbGVjdCA9IGNoYW5uZWxfc2VsZWN0OworCXNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5uZWxfc2VsZWN0XTsKKworCS8vV29yayBxdWV1ZQorCUlOSVRfV09SSygmZGV2LT5fYXVkaW9fd29ya19lbnRyeSwgY3gyNTgyMV9hdWRpb3Vwc19oYW5kbGVyKTsKKwlkZXYtPl9pcnFfYXVkaW9fcXVldWVzID0KKwkgICAgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImN4MjU4MjFfYXVkaW93b3JrcXVldWUiKTsKKworCWlmICghZGV2LT5faXJxX2F1ZGlvX3F1ZXVlcykgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMSBFUlJPUjogY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoKSBmb3IgQXVkaW8gRkFJTEVEIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldi0+X2xhc3RfaW5kZXhfaXJxID0gMDsKKwlkZXYtPl9hdWRpb19pc19ydW5uaW5nID0gMDsKKwlkZXYtPl9hdWRpb2ZyYW1lX2NvdW50ID0gMDsKKwlkZXYtPl9hdWRpb2ZpbGVfc3RhdHVzID0gUkVTRVRfU1RBVFVTOworCWRldi0+X2F1ZGlvX2xpbmVzX2NvdW50ID0gTElORVNfUEVSX0FVRElPX0JVRkZFUjsKKwlfbGluZV9zaXplID0gQVVESU9fTElORV9TSVpFOworCisJaWYgKGRldi0+aW5wdXRfYXVkaW9maWxlbmFtZSkgeworCQlzdHJfbGVuZ3RoID0gc3RybGVuKGRldi0+aW5wdXRfYXVkaW9maWxlbmFtZSk7CisJCWRldi0+X2F1ZGlvZmlsZW5hbWUgPQorCQkgICAgKGNoYXIgKilrbWFsbG9jKHN0cl9sZW5ndGggKyAxLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWRldi0+X2F1ZGlvZmlsZW5hbWUpCisJCQlnb3RvIGVycm9yOworCisJCW1lbWNweShkZXYtPl9hdWRpb2ZpbGVuYW1lLCBkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUsCisJCSAgICAgICBzdHJfbGVuZ3RoICsgMSk7CisKKwkJLy9EZWZhdWx0IGlmIGZpbGVuYW1lIGlzIGVtcHR5IHN0cmluZworCQlpZiAoc3RyY21wKGRldi0+aW5wdXRfYXVkaW9maWxlbmFtZSwgIiIpID09IDApIHsKKwkJCWRldi0+X2F1ZGlvZmlsZW5hbWUgPSAiL3Jvb3QvYXVkaW9HT09ELndhdiI7CisJCX0KKwl9IGVsc2UgeworCQlzdHJfbGVuZ3RoID0gc3RybGVuKF9kZWZhdWx0QXVkaW9OYW1lKTsKKwkJZGV2LT5fYXVkaW9maWxlbmFtZSA9CisJCSAgICAoY2hhciAqKWttYWxsb2Moc3RyX2xlbmd0aCArIDEsIEdGUF9LRVJORUwpOworCisJCWlmICghZGV2LT5fYXVkaW9maWxlbmFtZSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJbWVtY3B5KGRldi0+X2F1ZGlvZmlsZW5hbWUsIF9kZWZhdWx0QXVkaW9OYW1lLCBzdHJfbGVuZ3RoICsgMSk7CisJfQorCisJcmV0dmFsID0KKwkgICAgY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXBfdXBzdHJlYW1fYXVkaW8oZGV2LCBzcmFtX2NoLCBfbGluZV9zaXplLAorCQkJCQkJICAgICAgMCk7CisKKwlkZXYtPmF1ZGlvX3Vwc3RyZWFtX3Jpc2NidWZfc2l6ZSA9CisJICAgIEFVRElPX1JJU0NfRE1BX0JVRl9TSVpFICogTlVNX0FVRElPX1BST0dTICsKKwkgICAgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkU7CisJZGV2LT5hdWRpb191cHN0cmVhbV9kYXRhYnVmX3NpemUgPSBBVURJT19EQVRBX0JVRl9TWiAqIE5VTV9BVURJT19QUk9HUzsKKworCS8vQWxsb2NhdGluZyBidWZmZXJzIGFuZCBwcmVwYXJlIFJJU0MgcHJvZ3JhbQorCXJldHZhbCA9CisJICAgIGN4MjU4MjFfYXVkaW9fdXBzdHJlYW1fYnVmZmVyX3ByZXBhcmUoZGV2LCBzcmFtX2NoLCBfbGluZV9zaXplKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczogRmFpbGVkIHRvIHNldCB1cCBBdWRpbyB1cHN0cmVhbSBidWZmZXJzIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCS8vU3RhcnQgUklTQyBlbmdpbmUKKwljeDI1ODIxX3N0YXJ0X2F1ZGlvX2RtYV91cHN0cmVhbShkZXYsIHNyYW1fY2gpOworCisJcmV0dXJuIDA7CisKKyAgICAgIGVycm9yOgorCWN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5ODdhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8tdXBzdHJlYW0uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4sIDxzaHUubGluQGNvbmV4YW50LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2RlZmluZSBOVU1fQVVESU9fUFJPR1MgICAgICAgOAorI2RlZmluZSBOVU1fQVVESU9fRlJBTUVTICAgICAgOAorI2RlZmluZSBFTkRfT0ZfRklMRSAgICAgICAgICAgMAorI2RlZmluZSBJTl9QUk9HUkVTUyAgICAgICAgICAgMQorI2RlZmluZSBSRVNFVF9TVEFUVVMgICAgICAgICAgLTEKKyNkZWZpbmUgRklGT19ESVNBQkxFICAgICAgICAgIDAKKyNkZWZpbmUgRklGT19FTkFCTEUgICAgICAgICAgIDEKKyNkZWZpbmUgTlVNX05PX09QUyAgICAgICAgICAgIDQKKworI2RlZmluZSBSSVNDX1JFQURfSU5TVFJVQ1RJT05fU0laRSAgICAgIDEyCisjZGVmaW5lIFJJU0NfSlVNUF9JTlNUUlVDVElPTl9TSVpFICAgICAgMTIKKyNkZWZpbmUgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgICAxNgorI2RlZmluZSBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSAgICAgIDQKKyNkZWZpbmUgRFdPUkRfU0laRSAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVRElPX1NZTkNfTElORSAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIExJTkVTX1BFUl9BVURJT19CVUZGRVIgICAgICAxNQorI2RlZmluZSBBVURJT19MSU5FX1NJWkUgICAgICAgICAgICAgMTI4CisjZGVmaW5lIEFVRElPX0RBVEFfQlVGX1NaICAgICAgICAgICAoQVVESU9fTElORV9TSVpFICogTElORVNfUEVSX0FVRElPX0JVRkZFUikKKworI2RlZmluZSBVU0VfUklTQ19OT09QX0FVRElPICAgMQorCisjaWZkZWYgVVNFX1JJU0NfTk9PUF9BVURJTworI2RlZmluZSBBVURJT19SSVNDX0RNQV9CVUZfU0laRSAgICAoIExJTkVTX1BFUl9BVURJT19CVUZGRVIqUklTQ19SRUFEX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIE5VTV9OT19PUFMqRFdPUkRfU0laRSArIFJJU0NfSlVNUF9JTlNUUlVDVElPTl9TSVpFKQorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1JJU0NfTk9PUF9BVURJTworI2RlZmluZSBBVURJT19SSVNDX0RNQV9CVUZfU0laRSAgICAoIExJTkVTX1BFUl9BVURJT19CVUZGRVIqUklTQ19SRUFEX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIFJJU0NfSlVNUF9JTlNUUlVDVElPTl9TSVpFKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xpbmVfc2l6ZTsKK2NoYXIgKl9kZWZhdWx0QXVkaW9OYW1lID0gIi9yb290L2F1ZGlvR09PRC53YXYiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwM2Y0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NYMjU4MjFfQVVESU9fSF9fCisjZGVmaW5lIF9fQ1gyNTgyMV9BVURJT19IX18KKworI2RlZmluZSBVU0VfUklTQ19OT09QICAgICAgICAgICAgICAgMQorI2RlZmluZSBMSU5FU19QRVJfQlVGRkVSICAgICAgICAgICAgMTUKKyNkZWZpbmUgQVVESU9fTElORV9TSVpFICAgICAgICAgICAgIDEyOAorCisvL051bWJlciBvZiBidWZmZXIgcHJvZ3JhbXMgdG8gdXNlIGF0IG9uY2UuCisjZGVmaW5lIE5VTUJFUl9PRl9QUk9HUkFNUyAgOAorCisvL01heCBzaXplIG9mIHRoZSBSSVNDIHByb2dyYW0gZm9yIGEgYnVmZmVyLiAtIHdvcnN0IGNhc2UgaXMgMiB3cml0ZXMgcGVyIGxpbmUKKy8vIFNwYWNlIGlzIGFsc28gYWRkZWQgZm9yIHRoZSA0IG5vLW9wIGluc3RydWN0aW9ucyBhZGRlZCBvbiB0aGUgZW5kLgorCisjaWZuZGVmIFVTRV9SSVNDX05PT1AKKyNkZWZpbmUgTUFYX0JVRkZFUl9QUk9HUkFNX1NJWkUgICAgIFwKKyAgICAoMipMSU5FU19QRVJfQlVGRkVSKlJJU0NfV1JJVEVfSU5TVFJVQ1RJT05fU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFKjQpCisjZW5kaWYKKworLy8gTUFFIDEyIEp1bHkgMjAwNSBUcnkgdG8gdXNlIE5PT1AgUklTQyBpbnN0cnVjdGlvbiBpbnN0ZWFkCisjaWZkZWYgVVNFX1JJU0NfTk9PUAorI2RlZmluZSBNQVhfQlVGRkVSX1BST0dSQU1fU0laRSAgICAgXAorICAgICgyKkxJTkVTX1BFUl9CVUZGRVIqUklTQ19XUklURV9JTlNUUlVDVElPTl9TSVpFICsgUklTQ19OT09QX0lOU1RSVUNUSU9OX1NJWkUqNCkKKyNlbmRpZgorCisvL1NpemVzIG9mIHZhcmlvdXMgaW5zdHJ1Y3Rpb25zIGluIGJ5dGVzLiAgVXNlZCB3aGVuIGFkZGluZyBpbnN0cnVjdGlvbnMuCisjZGVmaW5lIFJJU0NfV1JJVEVfSU5TVFJVQ1RJT05fU0laRSAxMgorI2RlZmluZSBSSVNDX0pVTVBfSU5TVFJVQ1RJT05fU0laRSAgMTIKKyNkZWZpbmUgUklTQ19TS0lQX0lOU1RSVUNUSU9OX1NJWkUgIDQKKyNkZWZpbmUgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgIDQKKyNkZWZpbmUgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgIDE2CisjZGVmaW5lIFJJU0NfTk9PUF9JTlNUUlVDVElPTl9TSVpFIDQKKworI2RlZmluZSBNQVhfQVVESU9fRE1BX0JVRkZFUl9TSVpFIChNQVhfQlVGRkVSX1BST0dSQU1fU0laRSAqIE5VTUJFUl9PRl9QUk9HUkFNUyArIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzhiODkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWR1cHMxMS5jCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gxMV07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDExXSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMTFdCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDExXS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSAxMDsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhWNEwyX1BJWF9GTVRfWVVZVik7CisKKwl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCisJCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAorCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKKworCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzExKSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMTEpKSB7CisJCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKKwl9IGVsc2UgeworCQkvKiByZWFkKCkgY2FwdHVyZSAqLworCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7CisJCWlmIChOVUxMID09IGJ1ZikKKwkJCXJldHVybiBQT0xMRVJSOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8vc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8KKwkvL2N4X3dyaXRlKGNoYW5uZWwxMS0+ZG1hX2N0bCwgMCk7CisKKwkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzExKSkgeworCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKKwkJcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU8xMSk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoIXJlc19nZXQoZGV2LCBmaCwgZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzExKSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xMSk7CisJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJlc19mcmVlKGRldiwgZmgsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB2aWRlb19pb2N0bF91cHN0cmVhbTExKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGNvbW1hbmQgPSAwOworCXN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqZGF0YV9mcm9tX3VzZXI7CisKKwlkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7CisKKwlpZiAoIWRhdGFfZnJvbV91c2VyKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxIGluICVzKCk6IFVwc3RyZWFtIGRhdGEgaXMgSU5WQUxJRC4gUmV0dXJuaW5nLlxuIiwKKwkJICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKKworCWlmIChjb21tYW5kICE9IFVQU1RSRUFNX1NUQVJUX0FVRElPICYmIGNvbW1hbmQgIT0gVVBTVFJFQU1fU1RPUF9BVURJTykgeworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXYtPmlucHV0X2ZpbGVuYW1lID0gZGF0YV9mcm9tX3VzZXItPmlucHV0X2ZpbGVuYW1lOworCWRldi0+aW5wdXRfYXVkaW9maWxlbmFtZSA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKKwlkZXYtPnZpZF9zdGRuYW1lID0gZGF0YV9mcm9tX3VzZXItPnZpZF9zdGRuYW1lOworCWRldi0+cGl4ZWxfZm9ybWF0ID0gZGF0YV9mcm9tX3VzZXItPnBpeGVsX2Zvcm1hdDsKKwlkZXYtPmNoYW5uZWxfc2VsZWN0ID0gZGF0YV9mcm9tX3VzZXItPmNoYW5uZWxfc2VsZWN0OworCWRldi0+Y29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBVUFNUUkVBTV9TVEFSVF9BVURJTzoKKwkJY3gyNTgyMV9zdGFydF91cHN0cmVhbV9hdWRpbyhkZXYsIGRhdGFfZnJvbV91c2VyKTsKKwkJYnJlYWs7CisKKwljYXNlIFVQU1RSRUFNX1NUT1BfQVVESU86CisJCWN4MjU4MjFfc3RvcF91cHN0cmVhbV9hdWRpbyhkZXYpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsX3Vwc3RyZWFtMTEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2Nfc19zdGQgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCA9IHZpZGlvY19xdWVyeXN0ZCwKKyNlbmRpZgorCS52aWRpb2NfY3JvcGNhcCA9IHZpZGlvY19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wID0gdmlkaW9jX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCisJLnZpZGlvY19nX3ByaW9yaXR5ID0gdmlkaW9jX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5ID0gdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmID0gdmlkaW9jZ21idWYsCisjZW5kaWYKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxMSA9IHsKKwkubmFtZSA9ICJjeDI1ODIxLWF1ZGlvdXBzdHJlYW0iLAorCS5mb3BzID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1iaWZmdW5jcy5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1iaWZmdW5jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMjZhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWJpZmZ1bmNzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfQklURlVOQ1NfSAorI2RlZmluZSBfQklURlVOQ1NfSAorCisjZGVmaW5lIFNldEJpdChCaXQpICAoMSA8PCBCaXQpCisKK2lubGluZSB1OCBnZXRCaXQodTMyIHNhbXBsZSwgdTggaW5kZXgpCit7CisJcmV0dXJuICh1OCkgKChzYW1wbGUgPj4gaW5kZXgpICYgMSk7Cit9CisKK2lubGluZSB1MzIgY2xlYXJCaXRBdFBvcyh1MzIgdmFsdWUsIHU4IGJpdCkKK3sKKwlyZXR1cm4gdmFsdWUgJiB+KDEgPDwgYml0KTsKK30KKworaW5saW5lIHUzMiBzZXRCaXRBdFBvcyh1MzIgc2FtcGxlLCB1OCBiaXQpCit7CisJc2FtcGxlIHw9ICgxIDw8IGJpdCk7CisJcmV0dXJuIHNhbXBsZTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY2FyZHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY2FyZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDBiOWVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1jYXJkcy5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoJQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CisKKyNpbmNsdWRlICJjeDI1ODIxLmgiCisjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCisKKy8vIGJvYXJkIGNvbmZpZyBpbmZvCisKK3N0cnVjdCBjeDI1ODIxX2JvYXJkIGN4MjU4MjFfYm9hcmRzW10gPSB7CisJW1VOS05PV05fQk9BUkRdID0geworCQkJICAgLm5hbWUgPSAiVU5LTk9XTi9HRU5FUklDIiwKKwkJCSAgIC8vIEVuc3VyZSBzYWZlIGRlZmF1bHQgZm9yIHVua25vd24gYm9hcmRzCisJCQkgICAuY2xrX2ZyZXEgPSAwLAorCQkJICAgfSwKKworCVtDWDI1ODIxX0JPQVJEXSA9IHsKKwkJCSAgIC5uYW1lID0gIkNYMjU4MjEiLAorCQkJICAgLnBvcnRiID0gQ1gyNTgyMV9SQVcsCisJCQkgICAucG9ydGMgPSBDWDI1ODIxXzI2NCwKKwkJCSAgIC5pbnB1dFswXS50eXBlID0gQ1gyNTgyMV9WTVVYX0NPTVBPU0lURSwKKwkJCSAgIH0sCisKK307CisKK2NvbnN0IHVuc2lnbmVkIGludCBjeDI1ODIxX2Jjb3VudCA9IEFSUkFZX1NJWkUoY3gyNTgyMV9ib2FyZHMpOworCitzdHJ1Y3QgY3gyNTgyMV9zdWJpZCBjeDI1ODIxX3N1Ymlkc1tdID0geworCXsKKwkgLnN1YnZlbmRvciA9IDB4MTRmMSwKKwkgLnN1YmRldmljZSA9IDB4MDkyMCwKKwkgLmNhcmQgPSBDWDI1ODIxX0JPQVJELAorCSB9LAorfTsKKwordm9pZCBjeDI1ODIxX2NhcmRfc2V0dXAoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJc3RhdGljIHU4IGVlcHJvbVsyNTZdOworCisJaWYgKGRldi0+aTJjX2J1c1swXS5pMmNfcmMgPT0gMCkgeworCQlkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOworCQl0dmVlcHJvbV9yZWFkKCZkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudCwgZWVwcm9tLAorCQkJICAgICAgc2l6ZW9mKGVlcHJvbSkpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjZWFlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY29yZS5jCkBAIC0wLDAgKzEsMTU1MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJjeDI1ODIxLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1zcmFtLmgiCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQXRoZW5hIGNhcmRzIik7CitNT0RVTEVfQVVUSE9SKCJTaHUgTGluIC0gSGllcCBIdXluaCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3QgbGlzdF9oZWFkIGN4MjU4MjFfZGV2bGlzdDsKKworc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjYXJkW10gPSB7WzAgLi4uIChDWDI1ODIxX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07Cittb2R1bGVfcGFyYW1fYXJyYXkoY2FyZCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2FyZCwgImNhcmQgdHlwZSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGN4MjU4MjFfZGV2Y291bnQgPSAwOworCitzdGF0aWMgREVGSU5FX01VVEVYKGRldmxpc3QpOworTElTVF9IRUFEKGN4MjU4MjFfZGV2bGlzdCk7CisKK3N0cnVjdCBzcmFtX2NoYW5uZWwgY3gyNTgyMV9zcmFtX2NoYW5uZWxzW10gPSB7CisJW1NSQU1fQ0gwMF0gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gwMCwKKwkJICAgICAgIC5uYW1lID0gIlZJRCBBIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0FfRE9XTl9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfQV9JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfQV9DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9BX0RPV05fQ0xVU1RFUl8xLAorCQkgICAgICAgLmZpZm9fc2l6ZSA9IChWSURfQ0xVU1RFUl9TSVpFIDw8IDIpLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BMV9QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BMV9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BMV9DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BMV9DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfQV9JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0FfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0FfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfRFNUX0FfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfRFNUX0FfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX0RTVF9BX0dQQ05ULAorCQkgICAgICAgLnZpcF9jdGwgPSBWSURfRFNUX0FfVklQX0NUTCwKKwkJICAgICAgIC5waXhfZnJtdCA9IFZJRF9EU1RfQV9QSVhfRlJNVCwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDAxXSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDAxLAorCQkgICAgICAgLm5hbWUgPSAiVklEIEIiLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBWSURfQl9ET1dOX0NNRFMsCisJCSAgICAgICAuY3RybF9zdGFydCA9IFZJRF9CX0lRLAorCQkgICAgICAgLmNkdCA9IFZJRF9CX0NEVCwKKwkJICAgICAgIC5maWZvX3N0YXJ0ID0gVklEX0JfRE9XTl9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKFZJRF9DTFVTVEVSX1NJWkUgPDwgMiksCisJCSAgICAgICAucHRyMV9yZWcgPSBETUEyX1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUEyX1BUUjIsCisJCSAgICAgICAuY250MV9yZWcgPSBETUEyX0NOVDEsCisJCSAgICAgICAuY250Ml9yZWcgPSBETUEyX0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IFZJRF9CX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBWSURfQl9JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBWSURfQl9JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IFZJRF9EU1RfQl9ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IFZJRF9EU1RfQl9HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBWSURfRFNUX0JfR1BDTlQsCisJCSAgICAgICAudmlwX2N0bCA9IFZJRF9EU1RfQl9WSVBfQ1RMLAorCQkgICAgICAgLnBpeF9mcm10ID0gVklEX0RTVF9CX1BJWF9GUk1ULAorCQkgICAgICAgfSwKKworCVtTUkFNX0NIMDJdID0geworCQkgICAgICAgLmkgPSBTUkFNX0NIMDIsCisJCSAgICAgICAubmFtZSA9ICJWSUQgQyIsCisJCSAgICAgICAuY21kc19zdGFydCA9IFZJRF9DX0RPV05fQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gVklEX0NfSVEsCisJCSAgICAgICAuY2R0ID0gVklEX0NfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBWSURfQ19ET1dOX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSAoVklEX0NMVVNURVJfU0laRSA8PCAyKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTNfUFRSMSwKKwkJICAgICAgIC5wdHIyX3JlZyA9IERNQTNfUFRSMiwKKwkJICAgICAgIC5jbnQxX3JlZyA9IERNQTNfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTNfQ05UMiwKKwkJICAgICAgIC5pbnRfbXNrID0gVklEX0NfSU5UX01TSywKKwkJICAgICAgIC5pbnRfc3RhdCA9IFZJRF9DX0lOVF9TVEFULAorCQkgICAgICAgLmludF9tc3RhdCA9IFZJRF9DX0lOVF9NU1RBVCwKKwkJICAgICAgIC5kbWFfY3RsID0gVklEX0RTVF9DX0RNQV9DVEwsCisJCSAgICAgICAuZ3BjbnRfY3RsID0gVklEX0RTVF9DX0dQQ05UX0NUTCwKKwkJICAgICAgIC5ncGNudCA9IFZJRF9EU1RfQ19HUENOVCwKKwkJICAgICAgIC52aXBfY3RsID0gVklEX0RTVF9DX1ZJUF9DVEwsCisJCSAgICAgICAucGl4X2ZybXQgPSBWSURfRFNUX0NfUElYX0ZSTVQsCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gwM10gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gwMywKKwkJICAgICAgIC5uYW1lID0gIlZJRCBEIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0RfRE9XTl9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfRF9JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfRF9DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9EX0RPV05fQ0xVU1RFUl8xLAorCQkgICAgICAgLmZpZm9fc2l6ZSA9IChWSURfQ0xVU1RFUl9TSVpFIDw8IDIpLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BNF9QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BNF9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BNF9DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BNF9DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfRF9JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0RfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0RfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfRFNUX0RfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfRFNUX0RfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX0RTVF9EX0dQQ05ULAorCQkgICAgICAgLnZpcF9jdGwgPSBWSURfRFNUX0RfVklQX0NUTCwKKwkJICAgICAgIC5waXhfZnJtdCA9IFZJRF9EU1RfRF9QSVhfRlJNVCwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDA0XSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDA0LAorCQkgICAgICAgLm5hbWUgPSAiVklEIEUiLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBWSURfRV9ET1dOX0NNRFMsCisJCSAgICAgICAuY3RybF9zdGFydCA9IFZJRF9FX0lRLAorCQkgICAgICAgLmNkdCA9IFZJRF9FX0NEVCwKKwkJICAgICAgIC5maWZvX3N0YXJ0ID0gVklEX0VfRE9XTl9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKFZJRF9DTFVTVEVSX1NJWkUgPDwgMiksCisJCSAgICAgICAucHRyMV9yZWcgPSBETUE1X1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUE1X1BUUjIsCisJCSAgICAgICAuY250MV9yZWcgPSBETUE1X0NOVDEsCisJCSAgICAgICAuY250Ml9yZWcgPSBETUE1X0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IFZJRF9FX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBWSURfRV9JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBWSURfRV9JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IFZJRF9EU1RfRV9ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IFZJRF9EU1RfRV9HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBWSURfRFNUX0VfR1BDTlQsCisJCSAgICAgICAudmlwX2N0bCA9IFZJRF9EU1RfRV9WSVBfQ1RMLAorCQkgICAgICAgLnBpeF9mcm10ID0gVklEX0RTVF9FX1BJWF9GUk1ULAorCQkgICAgICAgfSwKKworCVtTUkFNX0NIMDVdID0geworCQkgICAgICAgLmkgPSBTUkFNX0NIMDUsCisJCSAgICAgICAubmFtZSA9ICJWSUQgRiIsCisJCSAgICAgICAuY21kc19zdGFydCA9IFZJRF9GX0RPV05fQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gVklEX0ZfSVEsCisJCSAgICAgICAuY2R0ID0gVklEX0ZfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBWSURfRl9ET1dOX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSAoVklEX0NMVVNURVJfU0laRSA8PCAyKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTZfUFRSMSwKKwkJICAgICAgIC5wdHIyX3JlZyA9IERNQTZfUFRSMiwKKwkJICAgICAgIC5jbnQxX3JlZyA9IERNQTZfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTZfQ05UMiwKKwkJICAgICAgIC5pbnRfbXNrID0gVklEX0ZfSU5UX01TSywKKwkJICAgICAgIC5pbnRfc3RhdCA9IFZJRF9GX0lOVF9TVEFULAorCQkgICAgICAgLmludF9tc3RhdCA9IFZJRF9GX0lOVF9NU1RBVCwKKwkJICAgICAgIC5kbWFfY3RsID0gVklEX0RTVF9GX0RNQV9DVEwsCisJCSAgICAgICAuZ3BjbnRfY3RsID0gVklEX0RTVF9GX0dQQ05UX0NUTCwKKwkJICAgICAgIC5ncGNudCA9IFZJRF9EU1RfRl9HUENOVCwKKwkJICAgICAgIC52aXBfY3RsID0gVklEX0RTVF9GX1ZJUF9DVEwsCisJCSAgICAgICAucGl4X2ZybXQgPSBWSURfRFNUX0ZfUElYX0ZSTVQsCisJCSAgICAgICB9LAorCisJW1NSQU1fQ0gwNl0gPSB7CisJCSAgICAgICAuaSA9IFNSQU1fQ0gwNiwKKwkJICAgICAgIC5uYW1lID0gIlZJRCBHIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gVklEX0dfRE9XTl9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfR19JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfR19DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9HX0RPV05fQ0xVU1RFUl8xLAorCQkgICAgICAgLmZpZm9fc2l6ZSA9IChWSURfQ0xVU1RFUl9TSVpFIDw8IDIpLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BN19QVFIxLAorCQkgICAgICAgLnB0cjJfcmVnID0gRE1BN19QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BN19DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BN19DTlQyLAorCQkgICAgICAgLmludF9tc2sgPSBWSURfR19JTlRfTVNLLAorCQkgICAgICAgLmludF9zdGF0ID0gVklEX0dfSU5UX1NUQVQsCisJCSAgICAgICAuaW50X21zdGF0ID0gVklEX0dfSU5UX01TVEFULAorCQkgICAgICAgLmRtYV9jdGwgPSBWSURfRFNUX0dfRE1BX0NUTCwKKwkJICAgICAgIC5ncGNudF9jdGwgPSBWSURfRFNUX0dfR1BDTlRfQ1RMLAorCQkgICAgICAgLmdwY250ID0gVklEX0RTVF9HX0dQQ05ULAorCQkgICAgICAgLnZpcF9jdGwgPSBWSURfRFNUX0dfVklQX0NUTCwKKwkJICAgICAgIC5waXhfZnJtdCA9IFZJRF9EU1RfR19QSVhfRlJNVCwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDA3XSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDA3LAorCQkgICAgICAgLm5hbWUgPSAiVklEIEgiLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBWSURfSF9ET1dOX0NNRFMsCisJCSAgICAgICAuY3RybF9zdGFydCA9IFZJRF9IX0lRLAorCQkgICAgICAgLmNkdCA9IFZJRF9IX0NEVCwKKwkJICAgICAgIC5maWZvX3N0YXJ0ID0gVklEX0hfRE9XTl9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKFZJRF9DTFVTVEVSX1NJWkUgPDwgMiksCisJCSAgICAgICAucHRyMV9yZWcgPSBETUE4X1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUE4X1BUUjIsCisJCSAgICAgICAuY250MV9yZWcgPSBETUE4X0NOVDEsCisJCSAgICAgICAuY250Ml9yZWcgPSBETUE4X0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IFZJRF9IX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBWSURfSF9JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBWSURfSF9JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IFZJRF9EU1RfSF9ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IFZJRF9EU1RfSF9HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBWSURfRFNUX0hfR1BDTlQsCisJCSAgICAgICAudmlwX2N0bCA9IFZJRF9EU1RfSF9WSVBfQ1RMLAorCQkgICAgICAgLnBpeF9mcm10ID0gVklEX0RTVF9IX1BJWF9GUk1ULAorCQkgICAgICAgfSwKKworCVtTUkFNX0NIMDhdID0geworCQkgICAgICAgLm5hbWUgPSAiYXVkaW8gZnJvbSIsCisJCSAgICAgICAuY21kc19zdGFydCA9IEFVRF9BX0RPV05fQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gQVVEX0FfSVEsCisJCSAgICAgICAuY2R0ID0gQVVEX0FfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBBVURfQV9ET1dOX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSBBVURJT19DTFVTVEVSX1NJWkUgKiAzLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BMTdfUFRSMSwKKwkJICAgICAgIC5wdHIyX3JlZyA9IERNQTE3X1BUUjIsCisJCSAgICAgICAuY250MV9yZWcgPSBETUExN19DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BMTdfQ05UMiwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDA5XSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDA5LAorCQkgICAgICAgLm5hbWUgPSAiVklEIFVwc3RyZWFtIEkiLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBWSURfSV9VUF9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfSV9JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfSV9DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9JX1VQX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSAoVklEX0NMVVNURVJfU0laRSA8PCAyKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTE1X1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUExNV9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BMTVfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTE1X0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IFZJRF9JX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBWSURfSV9JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBWSURfSV9JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IFZJRF9TUkNfSV9ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IFZJRF9TUkNfSV9HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBWSURfU1JDX0lfR1BDTlQsCisKKwkJICAgICAgIC52aWRfZm10X2N0bCA9IFZJRF9TUkNfSV9GTVRfQ1RMLAorCQkgICAgICAgLnZpZF9hY3RpdmVfY3RsMSA9IFZJRF9TUkNfSV9BQ1RJVkVfQ1RMMSwKKwkJICAgICAgIC52aWRfYWN0aXZlX2N0bDIgPSBWSURfU1JDX0lfQUNUSVZFX0NUTDIsCisJCSAgICAgICAudmlkX2NkdF9zaXplID0gVklEX1NSQ19JX0NEVF9TWiwKKwkJICAgICAgIC5pcnFfYml0ID0gOCwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDEwXSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDEwLAorCQkgICAgICAgLm5hbWUgPSAiVklEIFVwc3RyZWFtIEoiLAorCQkgICAgICAgLmNtZHNfc3RhcnQgPSBWSURfSl9VUF9DTURTLAorCQkgICAgICAgLmN0cmxfc3RhcnQgPSBWSURfSl9JUSwKKwkJICAgICAgIC5jZHQgPSBWSURfSl9DRFQsCisJCSAgICAgICAuZmlmb19zdGFydCA9IFZJRF9KX1VQX0NMVVNURVJfMSwKKwkJICAgICAgIC5maWZvX3NpemUgPSAoVklEX0NMVVNURVJfU0laRSA8PCAyKSwKKwkJICAgICAgIC5wdHIxX3JlZyA9IERNQTE2X1BUUjEsCisJCSAgICAgICAucHRyMl9yZWcgPSBETUExNl9QVFIyLAorCQkgICAgICAgLmNudDFfcmVnID0gRE1BMTZfQ05UMSwKKwkJICAgICAgIC5jbnQyX3JlZyA9IERNQTE2X0NOVDIsCisJCSAgICAgICAuaW50X21zayA9IFZJRF9KX0lOVF9NU0ssCisJCSAgICAgICAuaW50X3N0YXQgPSBWSURfSl9JTlRfU1RBVCwKKwkJICAgICAgIC5pbnRfbXN0YXQgPSBWSURfSl9JTlRfTVNUQVQsCisJCSAgICAgICAuZG1hX2N0bCA9IFZJRF9TUkNfSl9ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IFZJRF9TUkNfSl9HUENOVF9DVEwsCisJCSAgICAgICAuZ3BjbnQgPSBWSURfU1JDX0pfR1BDTlQsCisKKwkJICAgICAgIC52aWRfZm10X2N0bCA9IFZJRF9TUkNfSl9GTVRfQ1RMLAorCQkgICAgICAgLnZpZF9hY3RpdmVfY3RsMSA9IFZJRF9TUkNfSl9BQ1RJVkVfQ1RMMSwKKwkJICAgICAgIC52aWRfYWN0aXZlX2N0bDIgPSBWSURfU1JDX0pfQUNUSVZFX0NUTDIsCisJCSAgICAgICAudmlkX2NkdF9zaXplID0gVklEX1NSQ19KX0NEVF9TWiwKKwkJICAgICAgIC5pcnFfYml0ID0gOSwKKwkJICAgICAgIH0sCisKKwlbU1JBTV9DSDExXSA9IHsKKwkJICAgICAgIC5pID0gU1JBTV9DSDExLAorCQkgICAgICAgLm5hbWUgPSAiQXVkaW8gVXBzdHJlYW0gQ2hhbm5lbCBCIiwKKwkJICAgICAgIC5jbWRzX3N0YXJ0ID0gQVVEX0JfVVBfQ01EUywKKwkJICAgICAgIC5jdHJsX3N0YXJ0ID0gQVVEX0JfSVEsCisJCSAgICAgICAuY2R0ID0gQVVEX0JfQ0RULAorCQkgICAgICAgLmZpZm9fc3RhcnQgPSBBVURfQl9VUF9DTFVTVEVSXzEsCisJCSAgICAgICAuZmlmb19zaXplID0gKEFVRElPX0NMVVNURVJfU0laRSAqIDMpLAorCQkgICAgICAgLnB0cjFfcmVnID0gRE1BMjJfUFRSMSwKKwkJICAgICAgIC5wdHIyX3JlZyA9IERNQTIyX1BUUjIsCisJCSAgICAgICAuY250MV9yZWcgPSBETUEyMl9DTlQxLAorCQkgICAgICAgLmNudDJfcmVnID0gRE1BMjJfQ05UMiwKKwkJICAgICAgIC5pbnRfbXNrID0gQVVEX0JfSU5UX01TSywKKwkJICAgICAgIC5pbnRfc3RhdCA9IEFVRF9CX0lOVF9TVEFULAorCQkgICAgICAgLmludF9tc3RhdCA9IEFVRF9CX0lOVF9NU1RBVCwKKwkJICAgICAgIC5kbWFfY3RsID0gQVVEX0lOVF9ETUFfQ1RMLAorCQkgICAgICAgLmdwY250X2N0bCA9IEFVRF9CX0dQQ05UX0NUTCwKKwkJICAgICAgIC5ncGNudCA9IEFVRF9CX0dQQ05ULAorCQkgICAgICAgLmF1ZF9sZW5ndGggPSBBVURfQl9MTkdUSCwKKwkJICAgICAgIC5hdWRfY2ZnID0gQVVEX0JfQ0ZHLAorCQkgICAgICAgLmZsZF9hdWRfZmlmb19lbiA9IEZMRF9BVURfU1JDX0JfRklGT19FTiwKKwkJICAgICAgIC5mbGRfYXVkX3Jpc2NfZW4gPSBGTERfQVVEX1NSQ19CX1JJU0NfRU4sCisJCSAgICAgICAuaXJxX2JpdCA9IDExLAorCQkgICAgICAgfSwKK307CisKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwwID0gJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tTUkFNX0NIMDBdOworc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDEgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwMV07CitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsMiA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDAyXTsKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwzID0gJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tTUkFNX0NIMDNdOworc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDQgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNF07CitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsNSA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDA1XTsKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw2ID0gJmN4MjU4MjFfc3JhbV9jaGFubmVsc1tTUkFNX0NIMDZdOworc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDcgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwN107CitzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsOSA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDA5XTsKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwxMCA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDEwXTsKK3N0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwxMSA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbU1JBTV9DSDExXTsKKworc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgbXBlZ3E7CisKK3N0YXRpYyBpbnQgY3gyNTgyMV9yaXNjX2RlY29kZSh1MzIgcmlzYykKK3sKKwlzdGF0aWMgY2hhciAqaW5zdHJbMTZdID0geworCQlbUklTQ19TWU5DID4+IDI4XSA9ICJzeW5jIiwKKwkJW1JJU0NfV1JJVEUgPj4gMjhdID0gIndyaXRlIiwKKwkJW1JJU0NfV1JJVEVDID4+IDI4XSA9ICJ3cml0ZWMiLAorCQlbUklTQ19SRUFEID4+IDI4XSA9ICJyZWFkIiwKKwkJW1JJU0NfUkVBREMgPj4gMjhdID0gInJlYWRjIiwKKwkJW1JJU0NfSlVNUCA+PiAyOF0gPSAianVtcCIsCisJCVtSSVNDX1NLSVAgPj4gMjhdID0gInNraXAiLAorCQlbUklTQ19XUklURVJNID4+IDI4XSA9ICJ3cml0ZXJtIiwKKwkJW1JJU0NfV1JJVEVDTSA+PiAyOF0gPSAid3JpdGVjbSIsCisJCVtSSVNDX1dSSVRFQ1IgPj4gMjhdID0gIndyaXRlY3IiLAorCX07CisJc3RhdGljIGludCBpbmNyWzE2XSA9IHsKKwkJW1JJU0NfV1JJVEUgPj4gMjhdID0gMywKKwkJW1JJU0NfSlVNUCA+PiAyOF0gPSAzLAorCQlbUklTQ19TS0lQID4+IDI4XSA9IDEsCisJCVtSSVNDX1NZTkMgPj4gMjhdID0gMSwKKwkJW1JJU0NfV1JJVEVSTSA+PiAyOF0gPSAzLAorCQlbUklTQ19XUklURUNNID4+IDI4XSA9IDMsCisJCVtSSVNDX1dSSVRFQ1IgPj4gMjhdID0gNCwKKwl9OworCXN0YXRpYyBjaGFyICpiaXRzW10gPSB7CisJCSIxMiIsICIxMyIsICIxNCIsICJyZXN5bmMiLAorCQkiY250MCIsICJjbnQxIiwgIjE4IiwgIjE5IiwKKwkJIjIwIiwgIjIxIiwgIjIyIiwgIjIzIiwKKwkJImlycTEiLCAiaXJxMiIsICJlb2wiLCAic29sIiwKKwl9OworCWludCBpOworCisJcHJpbnRrKCIweCUwOHggWyAlcyIsIHJpc2MsCisJICAgICAgIGluc3RyW3Jpc2MgPj4gMjhdID8gaW5zdHJbcmlzYyA+PiAyOF0gOiAiSU5WQUxJRCIpOworCWZvciAoaSA9IEFSUkFZX1NJWkUoYml0cykgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAocmlzYyAmICgxIDw8IChpICsgMTIpKSkKKwkJCXByaW50aygiICVzIiwgYml0c1tpXSk7CisJfQorCXByaW50aygiIGNvdW50PSVkIF1cbiIsIHJpc2MgJiAweGZmZik7CisJcmV0dXJuIGluY3JbcmlzYyA+PiAyOF0gPyBpbmNyW3Jpc2MgPj4gMjhdIDogMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTJjX3NsYXZlX2RpZF9hY2soc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cyA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBidXMtPmRldjsKKwlyZXR1cm4gY3hfcmVhZChidXMtPnJlZ19zdGF0KSAmIDB4MDE7Cit9CisKK3ZvaWQgY3hfaTJjX3JlYWRfcHJpbnQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHUzMiByZWcsIGNvbnN0IGNoYXIgKnJlZ19zdHJpbmcpCit7CisJaW50IHRtcCA9IDA7CisJdTMyIHZhbHVlID0gMDsKKworCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCByZWcsICZ0bXApOworfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX3JlZ2lzdGVyc19pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCXUzMiB0bXA7CisKKwkvLyBlbmFibGUgUlVOX1JJU0MgaW4gUGVjb3MKKwljeF93cml0ZShERVZfQ05UUkwyLCAweDIwKTsKKworCS8vIFNldCB0aGUgbWFzdGVyIFBDSSBpbnRlcnJ1cHQgbWFza3MgdG8gZW5hYmxlIHZpZGVvLCBhdWRpbywgTUJJRiwgYW5kIEdQSU8gaW50ZXJydXB0cworCS8vIEkyQyBpbnRlcnJ1cHQgbWFza2luZyBpcyBoYW5kbGVkIGJ5IHRoZSBJMkMgb2JqZWN0cyB0aGVtc2VsdmVzLgorCWN4X3dyaXRlKFBDSV9JTlRfTVNLLCAweDIwMDFGRkZGKTsKKworCXRtcCA9IGN4X3JlYWQoUkRSX1RMQ1RMMCk7CisJdG1wICY9IH5GTERfQ0ZHX1JDQl9DS19FTjsJLy8gQ2xlYXIgdGhlIFJDQl9DS19FTiBiaXQKKwljeF93cml0ZShSRFJfVExDVEwwLCB0bXApOworCisJLy8gUExMLUEgc2V0dGluZyBmb3IgdGhlIEF1ZGlvIE1hc3RlciBDbG9jaworCWN4X3dyaXRlKFBMTF9BX0lOVF9GUkFDLCAweDk4MDdBNThCKTsKKworCS8vIFBMTF9BX1BPU1QgPSAweDFDLCBQTExfQV9PVVRfVE9fUElOID0gMHgxCisJY3hfd3JpdGUoUExMX0FfUE9TVF9TVEFUX0JJU1QsIDB4ODAwMDAxOUMpOworCisJLy8gY2xlYXIgcmVzZXQgYml0IFszMV0KKwl0bXAgPSBjeF9yZWFkKFBMTF9BX0lOVF9GUkFDKTsKKwljeF93cml0ZShQTExfQV9JTlRfRlJBQywgdG1wICYgMHg3RkZGRkZGRik7CisKKwkvLyBQTEwtQiBzZXR0aW5nIGZvciBNb2JpbHlnZW4gSG9zdCBCdXMgSW50ZXJmYWNlCisJY3hfd3JpdGUoUExMX0JfSU5UX0ZSQUMsIDB4OTg4M0E4NkYpOworCisJLy8gUExMX0JfUE9TVCA9IDB4RCwgUExMX0JfT1VUX1RPX1BJTiA9IDB4MAorCWN4X3dyaXRlKFBMTF9CX1BPU1RfU1RBVF9CSVNULCAweDgwMDAwMThEKTsKKworCS8vIGNsZWFyIHJlc2V0IGJpdCBbMzFdCisJdG1wID0gY3hfcmVhZChQTExfQl9JTlRfRlJBQyk7CisJY3hfd3JpdGUoUExMX0JfSU5UX0ZSQUMsIHRtcCAmIDB4N0ZGRkZGRkYpOworCisJLy8gUExMLUMgc2V0dGluZyBmb3IgdmlkZW8gdXBzdHJlYW0gY2hhbm5lbAorCWN4X3dyaXRlKFBMTF9DX0lOVF9GUkFDLCAweDk2QTBFQTNGKTsKKworCS8vIFBMTF9DX1BPU1QgPSAweDMsIFBMTF9DX09VVF9UT19QSU4gPSAweDAKKwljeF93cml0ZShQTExfQ19QT1NUX1NUQVRfQklTVCwgMHg4MDAwMDEwMyk7CisKKwkvLyBjbGVhciByZXNldCBiaXQgWzMxXQorCXRtcCA9IGN4X3JlYWQoUExMX0NfSU5UX0ZSQUMpOworCWN4X3dyaXRlKFBMTF9DX0lOVF9GUkFDLCB0bXAgJiAweDdGRkZGRkZGKTsKKworCS8vIFBMTC1EIHNldHRpbmcgZm9yIGF1ZGlvIHVwc3RyZWFtIGNoYW5uZWwKKwljeF93cml0ZShQTExfRF9JTlRfRlJBQywgMHg5ODc1N0Y1Qik7CisKKwkvLyBQTExfRF9QT1NUID0gMHgxMywgUExMX0RfT1VUX1RPX1BJTiA9IDB4MAorCWN4X3dyaXRlKFBMTF9EX1BPU1RfU1RBVF9CSVNULCAweDgwMDAwMTEzKTsKKworCS8vIGNsZWFyIHJlc2V0IGJpdCBbMzFdCisJdG1wID0gY3hfcmVhZChQTExfRF9JTlRfRlJBQyk7CisJY3hfd3JpdGUoUExMX0RfSU5UX0ZSQUMsIHRtcCAmIDB4N0ZGRkZGRkYpOworCisJLy8gVGhpcyBzZWxlY3RzIHRoZSBQTEwgQyBjbG9jayBzb3VyY2UgZm9yIHRoZSB2aWRlbyB1cHN0cmVhbSBjaGFubmVsIEkgYW5kIEoKKwl0bXAgPSBjeF9yZWFkKFZJRF9DSF9DTEtfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfQ0xLX1NFTCwgKHRtcCAmIDB4MDBGRkZGRkYpIHwgMHgyNDAwMDAwMCk7CisKKwkvLyA2NTYvVklQIFNSQyBVcHN0cmVhbSBDaGFubmVsIEkgJiBKIGFuZCA3IC0gSG9zdCBCdXMgSW50ZXJmYWNlIGZvciBjaGFubmVsIEEtQworCS8vc2VsZWN0IDY1Ni9WSVAgRFNUIGZvciBkb3duc3RyZWFtIENoYW5uZWwgQSAtIEMKKwl0bXAgPSBjeF9yZWFkKFZJRF9DSF9NT0RFX1NFTCk7CisJLy9jeF93cml0ZSggVklEX0NIX01PREVfU0VMLCB0bXAgfCAweDFCMDAwMUZGKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCAmIDB4RkZGRkZFMDApOworCisJLy8gZW5hYmxlcyA2NTYgcG9ydCBJIGFuZCBKIGFzIG91dHB1dAorCXRtcCA9IGN4X3JlYWQoQ0xLX1JTVCk7CisJdG1wIHw9IEZMRF9VU0VfQUxUX1BMTF9SRUY7CS8vIHVzZSBleHRlcm5hbCBBTFRfUExMX1JFRiBwaW4gYXMgaXRzIHJlZmVyZW5jZSBjbG9jayBpbnN0ZWFkCisJY3hfd3JpdGUoQ0xLX1JTVCwgdG1wICYgfihGTERfVklEX0lfQ0xLX05PRSB8IEZMRF9WSURfSl9DTEtfTk9FKSk7CisKKwltZGVsYXkoMTAwKTsKK30KKworaW50IGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBicGwsIHUzMiByaXNjKQoreworCXVuc2lnbmVkIGludCBpLCBsaW5lczsKKwl1MzIgY2R0OworCisJaWYgKGNoLT5jbWRzX3N0YXJ0ID09IDApIHsKKwkJY3hfd3JpdGUoY2gtPnB0cjFfcmVnLCAwKTsKKwkJY3hfd3JpdGUoY2gtPnB0cjJfcmVnLCAwKTsKKwkJY3hfd3JpdGUoY2gtPmNudDJfcmVnLCAwKTsKKwkJY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnBsID0gKGJwbCArIDcpICYgfjc7CS8qIGFsaWdubWVudCAqLworCWNkdCA9IGNoLT5jZHQ7CisJbGluZXMgPSBjaC0+Zmlmb19zaXplIC8gYnBsOworCisJaWYgKGxpbmVzID4gNCkgeworCQlsaW5lcyA9IDQ7CisJfQorCisJQlVHX09OKGxpbmVzIDwgMik7CisKKwljeF93cml0ZSg4ICsgMCwgUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwljeF93cml0ZSg4ICsgNCwgOCk7CisJY3hfd3JpdGUoOCArIDgsIDApOworCisJLyogd3JpdGUgQ0RUICovCisJZm9yIChpID0gMDsgaSA8IGxpbmVzOyBpKyspIHsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpLCBjaC0+Zmlmb19zdGFydCArIGJwbCAqIGkpOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyA0LCAwKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgOCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDEyLCAwKTsKKwl9CisKKwkvL2luaXQgdGhlIGZpcnN0IGNkdCBidWZmZXIKKwlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCisJCWN4X3dyaXRlKGNoLT5maWZvX3N0YXJ0ICsgNCAqIGksIGkpOworCisJLyogd3JpdGUgQ01EUyAqLworCWlmIChjaC0+anVtcG9ubHkpIHsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCA4KTsKKwl9IGVsc2UgeworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDAsIHJpc2MpOworCX0KKworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgNCwgMCk7CS8qIDY0IGJpdHMgNjMtMzIgKi8KKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDgsIGNkdCk7CisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxMiwgKGxpbmVzICogMTYpID4+IDMpOworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTYsIGNoLT5jdHJsX3N0YXJ0KTsKKworCWlmIChjaC0+anVtcG9ubHkpCisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMjAsIDB4ODAwMDAwMDAgfCAoNjQgPj4gMikpOworCWVsc2UKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgNjQgPj4gMik7CisKKwlmb3IgKGkgPSAyNDsgaSA8IDgwOyBpICs9IDQpCisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgaSwgMCk7CisKKwkvKiBmaWxsIHJlZ2lzdGVycyAqLworCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgY2gtPmZpZm9fc3RhcnQpOworCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgY2R0KTsKKwljeF93cml0ZShjaC0+Y250Ml9yZWcsIChsaW5lcyAqIDE2KSA+PiAzKTsKKwljeF93cml0ZShjaC0+Y250MV9yZWcsIChicGwgPj4gMykgLSAxKTsKKworCXJldHVybiAwOworfQorCitpbnQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXBfYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBicGwsIHUzMiByaXNjKQoreworCXVuc2lnbmVkIGludCBpLCBsaW5lczsKKwl1MzIgY2R0OworCisJaWYgKGNoLT5jbWRzX3N0YXJ0ID09IDApIHsKKwkJY3hfd3JpdGUoY2gtPnB0cjFfcmVnLCAwKTsKKwkJY3hfd3JpdGUoY2gtPnB0cjJfcmVnLCAwKTsKKwkJY3hfd3JpdGUoY2gtPmNudDJfcmVnLCAwKTsKKwkJY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnBsID0gKGJwbCArIDcpICYgfjc7CS8qIGFsaWdubWVudCAqLworCWNkdCA9IGNoLT5jZHQ7CisJbGluZXMgPSBjaC0+Zmlmb19zaXplIC8gYnBsOworCisJaWYgKGxpbmVzID4gMykgeworCQlsaW5lcyA9IDM7CS8vZm9yIEFVRElPCisJfQorCisJQlVHX09OKGxpbmVzIDwgMik7CisKKwljeF93cml0ZSg4ICsgMCwgUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwljeF93cml0ZSg4ICsgNCwgOCk7CisJY3hfd3JpdGUoOCArIDgsIDApOworCisJLyogd3JpdGUgQ0RUICovCisJZm9yIChpID0gMDsgaSA8IGxpbmVzOyBpKyspIHsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpLCBjaC0+Zmlmb19zdGFydCArIGJwbCAqIGkpOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyA0LCAwKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgOCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDEyLCAwKTsKKwl9CisKKwkvKiB3cml0ZSBDTURTICovCisJaWYgKGNoLT5qdW1wb25seSkgeworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDAsIDgpOworCX0gZWxzZSB7CisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMCwgcmlzYyk7CisJfQorCisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyA0LCAwKTsJLyogNjQgYml0cyA2My0zMiAqLworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgOCwgY2R0KTsKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDEyLCAobGluZXMgKiAxNikgPj4gMyk7CisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxNiwgY2gtPmN0cmxfc3RhcnQpOworCisJLy9JUSBzaXplCisJaWYgKGNoLT5qdW1wb25seSkgeworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCAweDgwMDAwMDAwIHwgKDY0ID4+IDIpKTsKKwl9IGVsc2UgeworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCA2NCA+PiAyKTsKKwl9CisKKwkvL3plcm8gb3V0CisJZm9yIChpID0gMjQ7IGkgPCA4MDsgaSArPSA0KQorCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIGksIDApOworCisJLyogZmlsbCByZWdpc3RlcnMgKi8KKwljeF93cml0ZShjaC0+cHRyMV9yZWcsIGNoLT5maWZvX3N0YXJ0KTsKKwljeF93cml0ZShjaC0+cHRyMl9yZWcsIGNkdCk7CisJY3hfd3JpdGUoY2gtPmNudDJfcmVnLCAobGluZXMgKiAxNikgPj4gMyk7CisJY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAoYnBsID4+IDMpIC0gMSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjeDI1ODIxX3NyYW1fY2hhbm5lbF9kdW1wKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCkKK3sKKwlzdGF0aWMgY2hhciAqbmFtZVtdID0geworCQkiaW5pdCByaXNjIGxvIiwKKwkJImluaXQgcmlzYyBoaSIsCisJCSJjZHQgYmFzZSIsCisJCSJjZHQgc2l6ZSIsCisJCSJpcSBiYXNlIiwKKwkJImlxIHNpemUiLAorCQkicmlzYyBwYyBsbyIsCisJCSJyaXNjIHBjIGhpIiwKKwkJImlxIHdyIHB0ciIsCisJCSJpcSByZCBwdHIiLAorCQkiY2R0IGN1cnJlbnQiLAorCQkicGNpIHRhcmdldCBsbyIsCisJCSJwY2kgdGFyZ2V0IGhpIiwKKwkJImxpbmUgLyBieXRlIiwKKwl9OworCXUzMiByaXNjOworCXVuc2lnbmVkIGludCBpLCBqLCBuOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIC0gZG1hIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgY2gtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hbWUpOyBpKyspCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNtZHMgKyAweCUyeDogICAlLTE1czogMHglMDh4XG4iLCBpICogNCwKKwkJICAgICAgIG5hbWVbaV0sIGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogaSkpOworCisJaiA9IGkgKiA0OworCWZvciAoaSA9IDA7IGkgPCA0OykgeworCQlyaXNjID0gY3hfcmVhZChjaC0+Y21kc19zdGFydCArIDQgKiAoaSArIDE0KSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNtZHMgKyAweCUyeDogICByaXNjJWQ6ICIsIGogKyBpICogNCwgaSk7CisJCWkgKz0gY3gyNTgyMV9yaXNjX2RlY29kZShyaXNjKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgKDY0ID4+IDIpOyBpICs9IG4pIHsKKwkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogaSk7CisJCS8qIE5vIGNvbnNpZGVyYXRpb24gZm9yIGJpdHMgNjMtMzIgKi8KKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdHJsICsgMHglMnggKDB4JTA4eCk6IGlxICV4OiAiLCBpICogNCwKKwkJICAgICAgIGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGksIGkpOworCQluID0gY3gyNTgyMV9yaXNjX2RlY29kZShyaXNjKTsKKwkJZm9yIChqID0gMTsgaiA8IG47IGorKykgeworCQkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogKGkgKyBqKSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImN0cmwgKyAweCUyeCA6ICAgaXEgJXg6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKKwkJCSAgICAgICA0ICogKGkgKyBqKSwgaSArIGosIHJpc2MsIGopOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgZmlmbzogMHglMDh4IC0+IDB4JXhcbiIsCisJICAgICAgIGNoLT5maWZvX3N0YXJ0LCBjaC0+Zmlmb19zdGFydCArIGNoLT5maWZvX3NpemUpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGN0cmw6IDB4JTA4eCAtPiAweCV4XG4iLAorCSAgICAgICBjaC0+Y3RybF9zdGFydCwgY2gtPmN0cmxfc3RhcnQgKyA2ICogMTYpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIHB0cjFfcmVnOiAweCUwOHhcbiIsCisJICAgICAgIGN4X3JlYWQoY2gtPnB0cjFfcmVnKSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgcHRyMl9yZWc6IDB4JTA4eFxuIiwKKwkgICAgICAgY3hfcmVhZChjaC0+cHRyMl9yZWcpKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjbnQxX3JlZzogMHglMDh4XG4iLAorCSAgICAgICBjeF9yZWFkKGNoLT5jbnQxX3JlZykpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGNudDJfcmVnOiAweCUwOHhcbiIsCisJICAgICAgIGN4X3JlYWQoY2gtPmNudDJfcmVnKSk7Cit9CisKK3ZvaWQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcF9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoKQoreworCXN0YXRpYyBjaGFyICpuYW1lW10gPSB7CisJCSJpbml0IHJpc2MgbG8iLAorCQkiaW5pdCByaXNjIGhpIiwKKwkJImNkdCBiYXNlIiwKKwkJImNkdCBzaXplIiwKKwkJImlxIGJhc2UiLAorCQkiaXEgc2l6ZSIsCisJCSJyaXNjIHBjIGxvIiwKKwkJInJpc2MgcGMgaGkiLAorCQkiaXEgd3IgcHRyIiwKKwkJImlxIHJkIHB0ciIsCisJCSJjZHQgY3VycmVudCIsCisJCSJwY2kgdGFyZ2V0IGxvIiwKKwkJInBjaSB0YXJnZXQgaGkiLAorCQkibGluZSAvIGJ5dGUiLAorCX07CisKKwl1MzIgcmlzYywgdmFsdWUsIHRtcDsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgbjsKKworCXByaW50ayhLRVJOX0lORk8gIlxuJXM6ICVzIC0gZG1hIEF1ZGlvIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsCisJICAgICAgIGRldi0+bmFtZSwgY2gtPm5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFtZSk7IGkrKykKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNtZHMgKyAweCUyeDogICAlLTE1czogMHglMDh4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBpICogNCwgbmFtZVtpXSwKKwkJICAgICAgIGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogaSkpOworCisJaiA9IGkgKiA0OworCWZvciAoaSA9IDA7IGkgPCA0OykgeworCQlyaXNjID0gY3hfcmVhZChjaC0+Y21kc19zdGFydCArIDQgKiAoaSArIDE0KSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNtZHMgKyAweCUyeDogICByaXNjJWQ6ICIsIGogKyBpICogNCwgaSk7CisJCWkgKz0gY3gyNTgyMV9yaXNjX2RlY29kZShyaXNjKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgKDY0ID4+IDIpOyBpICs9IG4pIHsKKwkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogaSk7CisJCS8qIE5vIGNvbnNpZGVyYXRpb24gZm9yIGJpdHMgNjMtMzIgKi8KKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdHJsICsgMHglMnggKDB4JTA4eCk6IGlxICV4OiAiLCBpICogNCwKKwkJICAgICAgIGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGksIGkpOworCQluID0gY3gyNTgyMV9yaXNjX2RlY29kZShyaXNjKTsKKworCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKSB7CisJCQlyaXNjID0gY3hfcmVhZChjaC0+Y3RybF9zdGFydCArIDQgKiAoaSArIGopKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiY3RybCArIDB4JTJ4IDogICBpcSAleDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAorCQkJICAgICAgIDQgKiAoaSArIGopLCBpICsgaiwgcmlzYywgaik7CisJCX0KKwl9CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBmaWZvOiAweCUwOHggLT4gMHgleFxuIiwKKwkgICAgICAgY2gtPmZpZm9fc3RhcnQsIGNoLT5maWZvX3N0YXJ0ICsgY2gtPmZpZm9fc2l6ZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgY3RybDogMHglMDh4IC0+IDB4JXhcbiIsCisJICAgICAgIGNoLT5jdHJsX3N0YXJ0LCBjaC0+Y3RybF9zdGFydCArIDYgKiAxNik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgcHRyMV9yZWc6IDB4JTA4eFxuIiwKKwkgICAgICAgY3hfcmVhZChjaC0+cHRyMV9yZWcpKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBwdHIyX3JlZzogMHglMDh4XG4iLAorCSAgICAgICBjeF9yZWFkKGNoLT5wdHIyX3JlZykpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGNudDFfcmVnOiAweCUwOHhcbiIsCisJICAgICAgIGN4X3JlYWQoY2gtPmNudDFfcmVnKSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgY250Ml9yZWc6IDB4JTA4eFxuIiwKKwkgICAgICAgY3hfcmVhZChjaC0+Y250Ml9yZWcpKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmlzYyA9IGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA1NiArIChpICogNCkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpbnN0cnVjdGlvbiAlZCA9IDB4JXhcbiIsIGksIHJpc2MpOworCX0KKworCS8vcmVhZCBkYXRhIGZyb20gdGhlIGZpcnN0IGNkdCBidWZmZXIKKwlyaXNjID0gY3hfcmVhZChBVURfQV9DRFQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIlxucmVhZCBjZHQgbG9jPTB4JXhcbiIsIHJpc2MpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJbiA9IGN4X3JlYWQocmlzYyArIGkgKiA0KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiMHgleCAiLCBuKTsKKwl9CisJcHJpbnRrKEtFUk5fV0FSTklORyAiXG5cbiIpOworCisJdmFsdWUgPSBjeF9yZWFkKENMS19SU1QpOworCUNYMjU4MjFfSU5GTygiIENMS19SU1QgPSAweCV4IFxuXG4iLCB2YWx1ZSk7CisKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0FfUE9TVF9TVEFUX0JJU1QpOworCUNYMjU4MjFfSU5GTygiIFBMTF9BX1BPU1RfU1RBVF9CSVNUID0gMHgleCBcblxuIiwgdmFsdWUpOworCXZhbHVlID0gY3hfcmVhZChQTExfQV9JTlRfRlJBQyk7CisJQ1gyNTgyMV9JTkZPKCIgUExMX0FfSU5UX0ZSQUMgPSAweCV4IFxuXG4iLCB2YWx1ZSk7CisKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0JfUE9TVF9TVEFUX0JJU1QpOworCUNYMjU4MjFfSU5GTygiIFBMTF9CX1BPU1RfU1RBVF9CSVNUID0gMHgleCBcblxuIiwgdmFsdWUpOworCXZhbHVlID0gY3hfcmVhZChQTExfQl9JTlRfRlJBQyk7CisJQ1gyNTgyMV9JTkZPKCIgUExMX0JfSU5UX0ZSQUMgPSAweCV4IFxuXG4iLCB2YWx1ZSk7CisKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0NfUE9TVF9TVEFUX0JJU1QpOworCUNYMjU4MjFfSU5GTygiIFBMTF9DX1BPU1RfU1RBVF9CSVNUID0gMHgleCBcblxuIiwgdmFsdWUpOworCXZhbHVlID0gY3hfcmVhZChQTExfQ19JTlRfRlJBQyk7CisJQ1gyNTgyMV9JTkZPKCIgUExMX0NfSU5UX0ZSQUMgPSAweCV4IFxuXG4iLCB2YWx1ZSk7CisKKwl2YWx1ZSA9IGN4X3JlYWQoUExMX0RfUE9TVF9TVEFUX0JJU1QpOworCUNYMjU4MjFfSU5GTygiIFBMTF9EX1BPU1RfU1RBVF9CSVNUID0gMHgleCBcblxuIiwgdmFsdWUpOworCXZhbHVlID0gY3hfcmVhZChQTExfRF9JTlRfRlJBQyk7CisJQ1gyNTgyMV9JTkZPKCIgUExMX0RfSU5UX0ZSQUMgPSAweCV4IFxuXG4iLCB2YWx1ZSk7CisKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgQUZFX0FCX0RJQUdfQ1RSTCwgJnRtcCk7CisJQ1gyNTgyMV9JTkZPKCIgQUZFX0FCX0RJQUdfQ1RSTCAoMHgxMDkwMDA5MCkgPSAweCV4IFxuXG4iLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfc2h1dGRvd24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaW50IGk7CisKKwkvKiBkaXNhYmxlIFJJU0MgY29udHJvbGxlciAqLworCWN4X3dyaXRlKERFVl9DTlRSTDIsIDApOworCisJLyogRGlzYWJsZSBWaWRlbyBBL0IgYWN0aXZpdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspIHsKKwkJY3hfd3JpdGUoZGV2LT5zcmFtX2NoYW5uZWxzW2ldLmRtYV9jdGwsIDApOworCQljeF93cml0ZShkZXYtPnNyYW1fY2hhbm5lbHNbaV0uaW50X21zaywgMCk7CisJfQorCisJZm9yIChpID0gVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9JOyBpIDw9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSjsKKwkgICAgIGkrKykgeworCQljeF93cml0ZShkZXYtPnNyYW1fY2hhbm5lbHNbaV0uZG1hX2N0bCwgMCk7CisJCWN4X3dyaXRlKGRldi0+c3JhbV9jaGFubmVsc1tpXS5pbnRfbXNrLCAwKTsKKwl9CisKKwkvKiBEaXNhYmxlIEF1ZGlvIGFjdGl2aXR5ICovCisJY3hfd3JpdGUoQVVEX0lOVF9ETUFfQ1RMLCAwKTsKKworCS8qIERpc2FibGUgU2VyaWFsIHBvcnQgKi8KKwljeF93cml0ZShVQVJUX0NUTCwgMCk7CisKKwkvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KKwljeF93cml0ZShQQ0lfSU5UX01TSywgMCk7CisJY3hfd3JpdGUoQVVEX0FfSU5UX01TSywgMCk7Cit9CisKK3ZvaWQgY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbm5lbF9zZWxlY3QsCisJCQkgICAgICB1MzIgZm9ybWF0KQoreworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoOworCisJaWYgKGNoYW5uZWxfc2VsZWN0IDw9IDcgJiYgY2hhbm5lbF9zZWxlY3QgPj0gMCkgeworCQljaCA9ICZjeDI1ODIxX3NyYW1fY2hhbm5lbHNbY2hhbm5lbF9zZWxlY3RdOworCQljeF93cml0ZShjaC0+cGl4X2ZybXQsIGZvcm1hdCk7CisJCWRldi0+cGl4ZWxfZm9ybWF0c1tjaGFubmVsX3NlbGVjdF0gPSBmb3JtYXQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX3NldF92aXBfbW9kZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gpCit7CisJY3hfd3JpdGUoY2gtPnBpeF9mcm10LCBQSVhFTF9GUk1UXzQyMik7CisJY3hfd3JpdGUoY2gtPnZpcF9jdGwsIFBJWEVMX0VOR0lORV9WSVAxKTsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9pbml0aWFsaXplKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWludCBpOworCisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJY3gyNTgyMV9zaHV0ZG93bihkZXYpOworCWN4X3dyaXRlKFBDSV9JTlRfU1RBVCwgMHhmZmZmZmZmZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspCisJCWN4X3dyaXRlKGRldi0+c3JhbV9jaGFubmVsc1tpXS5pbnRfc3RhdCwgMHhmZmZmZmZmZik7CisKKwljeF93cml0ZShBVURfQV9JTlRfU1RBVCwgMHhmZmZmZmZmZik7CisJY3hfd3JpdGUoQVVEX0JfSU5UX1NUQVQsIDB4ZmZmZmZmZmYpOworCWN4X3dyaXRlKEFVRF9DX0lOVF9TVEFULCAweGZmZmZmZmZmKTsKKwljeF93cml0ZShBVURfRF9JTlRfU1RBVCwgMHhmZmZmZmZmZik7CisJY3hfd3JpdGUoQVVEX0VfSU5UX1NUQVQsIDB4ZmZmZmZmZmYpOworCisJY3hfd3JpdGUoQ0xLX0RFTEFZLCBjeF9yZWFkKENMS19ERUxBWSkgJiAweDgwMDAwMDAwKTsKKwljeF93cml0ZShQQURfQ1RSTCwgMHgxMik7CS8vZm9yIEkyQworCWN4MjU4MjFfcmVnaXN0ZXJzX2luaXQoZGV2KTsJLy9pbml0IFBlY29zIHJlZ2lzdGVycworCW1kZWxheSgxMDApOworCisJZm9yIChpID0gMDsgaSA8IFZJRF9DSEFOTkVMX05VTTsgaSsrKSB7CisJCWN4MjU4MjFfc2V0X3ZpcF9tb2RlKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1tpXSk7CisJCWN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1tpXSwgMTQ0MCwKKwkJCQkJICAgMCk7CisJCWRldi0+cGl4ZWxfZm9ybWF0c1tpXSA9IFBJWEVMX0ZSTVRfNDIyOworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltpXSA9IEZBTFNFOworCX0KKworCS8vUHJvYmFibHkgb25seSBhZmZlY3QgRG93bnN0cmVhbQorCWZvciAoaSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSTsgaSA8PSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0o7CisJICAgICBpKyspIHsKKwkJY3gyNTgyMV9zZXRfdmlwX21vZGUoZGV2LCAmZGV2LT5zcmFtX2NoYW5uZWxzW2ldKTsKKwl9CisKKwljeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF9hdWRpbyhkZXYsICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA4XSwKKwkJCQkJIDEyOCwgMCk7CisKKwljeDI1ODIxX2dwaW9faW5pdChkZXYpOworfQorCitzdGF0aWMgaW50IGdldF9yZXNvdXJjZXMoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbgorCSAgICAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCksCisJICAgICBkZXYtPm5hbWUpKQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBNTUlPIG1lbW9yeSBAIDB4JWxseFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCkpOworCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9kZXZfY2hlY2tyZXZpc2lvbihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlkZXYtPmh3cmV2aXNpb24gPSBjeF9yZWFkKFJEUl9DRkcyKSAmIDB4ZmY7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcygpIEhhcmR3YXJlIHJldmlzaW9uID0gMHglMDJ4XG4iLCBfX2Z1bmNfXywKKwkgICAgICAgZGV2LT5od3JldmlzaW9uKTsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9pb3VubWFwKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUmVsZWFzaW5nIElPIG1lbW9yeSAqLworCWlmIChkZXYtPmxtbWlvICE9IE5VTEwpIHsKKwkJQ1gyNTgyMV9JTkZPKCJSZWxlYXNpbmcgbG1taW8uXG4iKTsKKwkJaW91bm1hcChkZXYtPmxtbWlvKTsKKwkJZGV2LT5sbW1pbyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGN4MjU4MjFfZGV2X3NldHVwKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWludCBpb19zaXplID0gMCwgaTsKKworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX3RlbXBsYXRlW10gPSB7CisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMCwKKwkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxLAorCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTIsCisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMywKKwkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGU0LAorCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTUsCisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNiwKKwkJJmN4MjU4MjFfdmlkZW9fdGVtcGxhdGU3LAorCQkmY3gyNTgyMV92aWRlb190ZW1wbGF0ZTksCisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTAsCisJCSZjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTEsCisJCSZjeDI1ODIxX3ZpZGVvaW9jdGxfdGVtcGxhdGUsCisJfTsKKworCXByaW50ayhLRVJOX0lORk8gIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCXByaW50ayhLRVJOX0lORk8gImN4MjU4MjEgc2V0IHVwXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKKworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisKKwlhdG9taWNfaW5jKCZkZXYtPnJlZmNvdW50KTsKKworCWRldi0+bnIgPSArK2N4MjU4MjFfZGV2Y291bnQ7CisJc3ByaW50ZihkZXYtPm5hbWUsICJjeDI1ODIxWyVkXSIsIGRldi0+bnIpOworCisJbXV0ZXhfbG9jaygmZGV2bGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KTsKKwltdXRleF91bmxvY2soJmRldmxpc3QpOworCisJc3RyY3B5KGN4MjU4MjFfYm9hcmRzW1VOS05PV05fQk9BUkRdLm5hbWUsICJ1bmtub3duIik7CisJc3RyY3B5KGN4MjU4MjFfYm9hcmRzW0NYMjU4MjFfQk9BUkRdLm5hbWUsICJjeDI1ODIxIik7CisKKwlpZiAoZGV2LT5wY2ktPmRldmljZSAhPSAweDgyMTApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzKCkgRXhpdGluZy4gSW5jb3JyZWN0IEhhcmR3YXJlIGRldmljZSA9IDB4JTAyeFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPnBjaS0+ZGV2aWNlKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIkF0aGVuYSBIYXJkd2FyZSBkZXZpY2UgPSAweCUwMnhcbiIsCisJCSAgICAgICBkZXYtPnBjaS0+ZGV2aWNlKTsKKwl9CisKKwkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCisJZGV2LT5jbGtfZnJlcSA9IDI4MDAwMDAwOworCWRldi0+c3JhbV9jaGFubmVscyA9IGN4MjU4MjFfc3JhbV9jaGFubmVsczsKKworCWlmIChkZXYtPm5yID4gMSkgeworCQlDWDI1ODIxX0lORk8oImRldi0+bnIgPiAxISIpOworCX0KKworCS8qIGJvYXJkIGNvbmZpZyAqLworCWRldi0+Ym9hcmQgPSAxOwkJLy9jYXJkW2Rldi0+bnJdOworCWRldi0+X21heF9udW1fZGVjb2RlcnMgPSBNQVhfREVDT0RFUlM7CisKKwlkZXYtPnBjaV9idXMgPSBkZXYtPnBjaS0+YnVzLT5udW1iZXI7CisJZGV2LT5wY2lfc2xvdCA9IFBDSV9TTE9UKGRldi0+cGNpLT5kZXZmbik7CisJZGV2LT5wY2lfaXJxbWFzayA9IDB4MDAxZjAwOworCisJLyogRXh0ZXJuYWwgTWFzdGVyIDEgQnVzICovCisJZGV2LT5pMmNfYnVzWzBdLm5yID0gMDsKKwlkZXYtPmkyY19idXNbMF0uZGV2ID0gZGV2OworCWRldi0+aTJjX2J1c1swXS5yZWdfc3RhdCA9IEkyQzFfU1RBVDsKKwlkZXYtPmkyY19idXNbMF0ucmVnX2N0cmwgPSBJMkMxX0NUUkw7CisJZGV2LT5pMmNfYnVzWzBdLnJlZ19hZGRyID0gSTJDMV9BRERSOworCWRldi0+aTJjX2J1c1swXS5yZWdfcmRhdGEgPSBJMkMxX1JEQVRBOworCWRldi0+aTJjX2J1c1swXS5yZWdfd2RhdGEgPSBJMkMxX1dEQVRBOworCWRldi0+aTJjX2J1c1swXS5pMmNfcGVyaW9kID0gKDB4MDcgPDwgMjQpOwkvKiAxLjk1TUh6ICovCisKKworCWlmIChnZXRfcmVzb3VyY2VzKGRldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgTm8gbW9yZSBQQ0llIHJlc291cmNlcyBmb3IgIgorCQkgICAgICAgInN1YnN5c3RlbTogJTA0eDolMDR4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKKwkJICAgICAgIGRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKKworCQljeDI1ODIxX2RldmNvdW50LS07CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFBDSWUgc3R1ZmYgKi8KKwlkZXYtPmJhc2VfaW9fYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCk7CisJaW9fc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApOworCisJaWYgKCFkZXYtPmJhc2VfaW9fYWRkcikgeworCQlDWDI1ODIxX0VSUigiTm8gUENJIE1lbW9yeSByZXNvdXJjZXMsIGV4aXRpbmchXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2LT5sbW1pbyA9IGlvcmVtYXAoZGV2LT5iYXNlX2lvX2FkZHIsIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApKTsKKworCWlmICghZGV2LT5sbW1pbykgeworCQlDWDI1ODIxX0VSUgorCQkgICAgKCJpb3JlbWFwIGZhaWxlZCwgbWF5YmUgaW5jcmVhc2luZyBfX1ZNQUxMT0NfUkVTRVJWRSBpbiBwYWdlLmhcbiIpOworCQljeDI1ODIxX2lvdW5tYXAoZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5ibW1pbyA9ICh1OCBfX2lvbWVtICopIGRldi0+bG1taW87CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogc3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCisJICAgICAgIGRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlLCBjeDI1ODIxX2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLAorCSAgICAgICBkZXYtPmJvYXJkLCBjYXJkW2Rldi0+bnJdID09IGRldi0+Ym9hcmQgPworCSAgICAgICAiaW5zbW9kIG9wdGlvbiIgOiAiYXV0b2RldGVjdGVkIik7CisKKwkvKiBpbml0IGhhcmR3YXJlICovCisJY3gyNTgyMV9pbml0aWFsaXplKGRldik7CisKKwljeDI1ODIxX2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzBdKTsKKy8vICBjeDI1ODIxX2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzFdKTsKKy8vICBjeDI1ODIxX2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzJdKTsKKworCUNYMjU4MjFfSU5GTygiaTJjIHJlZ2lzdGVyISBidXMtPmkyY19yYyA9ICVkXG4iLAorCQkgICAgIGRldi0+aTJjX2J1c1swXS5pMmNfcmMpOworCisJY3gyNTgyMV9jYXJkX3NldHVwKGRldik7CisJbWVkdXNhX3ZpZGVvX2luaXQoZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBWSURfQ0hBTk5FTF9OVU07IGkrKykgeworCQlpZiAoY3gyNTgyMV92aWRlb19yZWdpc3RlcihkZXYsIGksIHZpZGVvX3RlbXBsYXRlW2ldKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcygpIEZhaWxlZCB0byByZWdpc3RlciBhbmFsb2cgdmlkZW8gYWRhcHRlcnMgb24gVklEIGNoYW5uZWwgJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGkpOworCQl9CisJfQorCisJZm9yIChpID0gVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9JOworCSAgICAgaSA8PSBBVURJT19VUFNUUkVBTV9TUkFNX0NIQU5ORUxfQjsgaSsrKSB7CisJCS8vU2luY2Ugd2UgZG9uJ3QgaGF2ZSB0ZW1wbGF0ZTggZm9yIEF1ZGlvIERvd25zdHJlYW0KKwkJaWYgKGN4MjU4MjFfdmlkZW9fcmVnaXN0ZXIoZGV2LCBpLCB2aWRlb190ZW1wbGF0ZVtpIC0gMV0pIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzKCkgRmFpbGVkIHRvIHJlZ2lzdGVyIGFuYWxvZyB2aWRlbyBhZGFwdGVycyBmb3IgVXBzdHJlYW0gY2hhbm5lbCAlZC5cbiIsCisJCQkgICAgICAgX19mdW5jX18sIGkpOworCQl9CisJfQorCisJLy8gcmVnaXN0ZXIgSU9DVEwgZGV2aWNlCisJZGV2LT5pb2N0bF9kZXYgPQorCSAgICBjeDI1ODIxX3ZkZXZfaW5pdChkZXYsIGRldi0+cGNpLCB2aWRlb190ZW1wbGF0ZVtWSURFT19JT0NUTF9DSF0sCisJCQkgICAgICAidmlkZW8iKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UKKwkgICAgKGRldi0+aW9jdGxfZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCBWSURFT19JT0NUTF9DSCkgPCAwKSB7CisJCWN4MjU4MjFfdmlkZW9pb2N0bF91bnJlZ2lzdGVyKGRldik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzKCkgRmFpbGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGFkYXB0ZXIgZm9yIElPQ1RMIHNvIHJlbGVhc2luZy5cbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJfQorCisJY3gyNTgyMV9kZXZfY2hlY2tyZXZpc2lvbihkZXYpOworCUNYMjU4MjFfSU5GTygiY3gyNTgyMSBzZXR1cCBkb25lIVxuIik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX3ZpZGVvX2NoMShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKnVwX2RhdGEpCit7CisJZGV2LT5faXNOVFNDID0gIXN0cmNtcChkZXYtPnZpZF9zdGRuYW1lLCAiTlRTQyIpID8gMSA6IDA7CisKKwlkZXYtPnR2bm9ybSA9ICFkZXYtPl9pc05UU0MgPyBWNEwyX1NURF9QQUxfQkcgOiBWNEwyX1NURF9OVFNDX007CisJbWVkdXNhX3NldF92aWRlb3N0YW5kYXJkKGRldik7CisKKwljeDI1ODIxX3ZpZHVwc3RyZWFtX2luaXRfY2gxKGRldiwgZGV2LT5jaGFubmVsX3NlbGVjdCwKKwkJCQkgICAgIGRldi0+cGl4ZWxfZm9ybWF0KTsKK30KKwordm9pZCBjeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX3ZpZGVvX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKnVwX2RhdGEpCit7CisJZGV2LT5faXNOVFNDX2NoMiA9ICFzdHJjbXAoZGV2LT52aWRfc3RkbmFtZV9jaDIsICJOVFNDIikgPyAxIDogMDsKKworCWRldi0+dHZub3JtID0gIWRldi0+X2lzTlRTQ19jaDIgPyBWNEwyX1NURF9QQUxfQkcgOiBWNEwyX1NURF9OVFNDX007CisJbWVkdXNhX3NldF92aWRlb3N0YW5kYXJkKGRldik7CisKKwljeDI1ODIxX3ZpZHVwc3RyZWFtX2luaXRfY2gyKGRldiwgZGV2LT5jaGFubmVsX3NlbGVjdF9jaDIsCisJCQkJICAgICBkZXYtPnBpeGVsX2Zvcm1hdF9jaDIpOworfQorCit2b2lkIGN4MjU4MjFfc3RhcnRfdXBzdHJlYW1fYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICBzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKnVwX2RhdGEpCit7CisJY3gyNTgyMV9hdWRpb191cHN0cmVhbV9pbml0KGRldiwgQVVESU9fVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0IpOworfQorCit2b2lkIGN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaW50IGk7CisKKwlpZiAoIWRldi0+YmFzZV9pb19hZGRyKQorCQlyZXR1cm47CisKKwljeDI1ODIxX2ZyZWVfbWVtX3Vwc3RyZWFtX2NoMShkZXYpOworCWN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fY2gyKGRldik7CisJY3gyNTgyMV9mcmVlX21lbV91cHN0cmVhbV9hdWRpbyhkZXYpOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9pb19hZGRyLCBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSk7CisKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+cmVmY291bnQpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgVklEX0NIQU5ORUxfTlVNOyBpKyspCisJCWN4MjU4MjFfdmlkZW9fdW5yZWdpc3RlcihkZXYsIGkpOworCisJZm9yIChpID0gVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9JOworCSAgICAgaSA8PSBBVURJT19VUFNUUkVBTV9TUkFNX0NIQU5ORUxfQjsgaSsrKSB7CisJCWN4MjU4MjFfdmlkZW9fdW5yZWdpc3RlcihkZXYsIGkpOworCX0KKworCWN4MjU4MjFfdmlkZW9pb2N0bF91bnJlZ2lzdGVyKGRldik7CisKKwljeDI1ODIxX2kyY191bnJlZ2lzdGVyKCZkZXYtPmkyY19idXNbMF0pOworCWN4MjU4MjFfaW91bm1hcChkZXYpOworfQorCitzdGF0aWMgX19sZTMyICpjeDI1ODIxX3Jpc2NfZmllbGQoX19sZTMyICogcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHN5bmNfbGluZSwKKwkJCQkgIHVuc2lnbmVkIGludCBicGwsIHVuc2lnbmVkIGludCBwYWRkaW5nLAorCQkJCSAgdW5zaWduZWQgaW50IGxpbmVzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGxpbmUsIHRvZG87CisKKwkvKiBzeW5jIGluc3RydWN0aW9uICovCisJaWYgKHN5bmNfbGluZSAhPSBOT19TWU5DX0xJTkUpIHsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgc3luY19saW5lKTsKKwl9CisKKwkvKiBzY2FuIGxpbmVzICovCisJc2cgPSBzZ2xpc3Q7CisJZm9yIChsaW5lID0gMDsgbGluZSA8IGxpbmVzOyBsaW5lKyspIHsKKwkJd2hpbGUgKG9mZnNldCAmJiBvZmZzZXQgPj0gc2dfZG1hX2xlbihzZykpIHsKKwkJCW9mZnNldCAtPSBzZ19kbWFfbGVuKHNnKTsKKwkJCXNnKys7CisJCX0KKwkJaWYgKGJwbCA8PSBzZ19kbWFfbGVuKHNnKSAtIG9mZnNldCkgeworCQkJLyogZml0cyBpbnRvIGN1cnJlbnQgY2h1bmsgKi8KKwkJCSoocnArKykgPQorCQkJICAgIGNwdV90b19sZTMyKFJJU0NfV1JJVEUgfCBSSVNDX1NPTCB8IFJJU0NfRU9MIHwgYnBsKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykgKyBvZmZzZXQpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisJCQlvZmZzZXQgKz0gYnBsOworCQl9IGVsc2UgeworCQkJLyogc2NhbmxpbmUgbmVlZHMgdG8gYmUgc3BsaXQgKi8KKwkJCXRvZG8gPSBicGw7CisJCQkqKHJwKyspID0KKwkJCSAgICBjcHVfdG9fbGUzMihSSVNDX1dSSVRFIHwgUklTQ19TT0wgfAorCQkJCQkoc2dfZG1hX2xlbihzZykgLSBvZmZzZXQpKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykgKyBvZmZzZXQpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisJCQl0b2RvIC09IChzZ19kbWFfbGVuKHNnKSAtIG9mZnNldCk7CisJCQlvZmZzZXQgPSAwOworCQkJc2crKzsKKwkJCXdoaWxlICh0b2RvID4gc2dfZG1hX2xlbihzZykpIHsKKwkJCQkqKHJwKyspID0KKwkJCQkgICAgY3B1X3RvX2xlMzIoUklTQ19XUklURSB8IHNnX2RtYV9sZW4oc2cpKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKwkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOworCQkJCXNnKys7CisJCQl9CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURSB8IFJJU0NfRU9MIHwgdG9kbyk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCQkJb2Zmc2V0ICs9IHRvZG87CisJCX0KKworCQlvZmZzZXQgKz0gcGFkZGluZzsKKwl9CisKKwlyZXR1cm4gcnA7Cit9CisKK2ludCBjeDI1ODIxX3Jpc2NfYnVmZmVyKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MsCisJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgdW5zaWduZWQgaW50IHRvcF9vZmZzZXQsCisJCQl1bnNpZ25lZCBpbnQgYm90dG9tX29mZnNldCwgdW5zaWduZWQgaW50IGJwbCwKKwkJCXVuc2lnbmVkIGludCBwYWRkaW5nLCB1bnNpZ25lZCBpbnQgbGluZXMpCit7CisJdTMyIGluc3RydWN0aW9uczsKKwl1MzIgZmllbGRzOworCV9fbGUzMiAqcnA7CisJaW50IHJjOworCisJZmllbGRzID0gMDsKKwlpZiAoVU5TRVQgIT0gdG9wX29mZnNldCkKKwkJZmllbGRzKys7CisJaWYgKFVOU0VUICE9IGJvdHRvbV9vZmZzZXQpCisJCWZpZWxkcysrOworCisJLyogZXN0aW1hdGUgcmlzYyBtZW06IHdvcnN0IGNhc2UgaXMgb25lIHdyaXRlIHBlciBwYWdlIGJvcmRlciArCisJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jcyArIGp1bXAgKGFsbCAyIGR3b3JkcykuICBQYWRkaW5nCisJICAgY2FuIGNhdXNlIG5leHQgYnBsIHRvIHN0YXJ0IGNsb3NlIHRvIGEgcGFnZSBib3JkZXIuICBGaXJzdCBETUEKKwkgICByZWdpb24gbWF5IGJlIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgKi8KKwkvKiB3cml0ZSBhbmQganVtcCBuZWVkIGFuZCBleHRyYSBkd29yZCAqLworCWluc3RydWN0aW9ucyA9CisJICAgIGZpZWxkcyAqICgxICsgKChicGwgKyBwYWRkaW5nKSAqIGxpbmVzKSAvIFBBR0VfU0laRSArIGxpbmVzKTsKKwlpbnN0cnVjdGlvbnMgKz0gMjsKKwlyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyAqIDEyKTsKKworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIHdyaXRlIHJpc2MgaW5zdHJ1Y3Rpb25zICovCisJcnAgPSByaXNjLT5jcHU7CisKKwlpZiAoVU5TRVQgIT0gdG9wX29mZnNldCkgeworCQlycCA9IGN4MjU4MjFfcmlzY19maWVsZChycCwgc2dsaXN0LCB0b3Bfb2Zmc2V0LCAwLCBicGwsIHBhZGRpbmcsCisJCQkJCWxpbmVzKTsKKwl9CisKKwlpZiAoVU5TRVQgIT0gYm90dG9tX29mZnNldCkgeworCQlycCA9IGN4MjU4MjFfcmlzY19maWVsZChycCwgc2dsaXN0LCBib3R0b21fb2Zmc2V0LCAweDIwMCwgYnBsLAorCQkJCQlwYWRkaW5nLCBsaW5lcyk7CisJfQorCisJLyogc2F2ZSBwb2ludGVyIHRvIGptcCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisJcmlzYy0+am1wID0gcnA7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2xlMzIgKmN4MjU4MjFfcmlzY19maWVsZF9hdWRpbyhfX2xlMzIgKiBycCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkJCXVuc2lnbmVkIGludCBvZmZzZXQsIHUzMiBzeW5jX2xpbmUsCisJCQkJCXVuc2lnbmVkIGludCBicGwsIHVuc2lnbmVkIGludCBwYWRkaW5nLAorCQkJCQl1bnNpZ25lZCBpbnQgbGluZXMsIHVuc2lnbmVkIGludCBscGkpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgbGluZSwgdG9kbywgc29sOworCisJLyogc3luYyBpbnN0cnVjdGlvbiAqLworCWlmIChzeW5jX2xpbmUgIT0gTk9fU1lOQ19MSU5FKQorCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19SRVNZTkMgfCBzeW5jX2xpbmUpOworCisJLyogc2NhbiBsaW5lcyAqLworCXNnID0gc2dsaXN0OworCWZvciAobGluZSA9IDA7IGxpbmUgPCBsaW5lczsgbGluZSsrKSB7CisJCXdoaWxlIChvZmZzZXQgJiYgb2Zmc2V0ID49IHNnX2RtYV9sZW4oc2cpKSB7CisJCQlvZmZzZXQgLT0gc2dfZG1hX2xlbihzZyk7CisJCQlzZysrOworCQl9CisKKwkJaWYgKGxwaSAmJiBsaW5lID4gMCAmJiAhKGxpbmUgJSBscGkpKQorCQkJc29sID0gUklTQ19TT0wgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkM7CisJCWVsc2UKKwkJCXNvbCA9IFJJU0NfU09MOworCisJCWlmIChicGwgPD0gc2dfZG1hX2xlbihzZykgLSBvZmZzZXQpIHsKKwkJCS8qIGZpdHMgaW50byBjdXJyZW50IGNodW5rICovCisJCQkqKHJwKyspID0KKwkJCSAgICBjcHVfdG9fbGUzMihSSVNDX1dSSVRFIHwgc29sIHwgUklTQ19FT0wgfCBicGwpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSArIG9mZnNldCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKwkJCW9mZnNldCArPSBicGw7CisJCX0gZWxzZSB7CisJCQkvKiBzY2FubGluZSBuZWVkcyB0byBiZSBzcGxpdCAqLworCQkJdG9kbyA9IGJwbDsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFIHwgc29sIHwKKwkJCQkJICAgICAgKHNnX2RtYV9sZW4oc2cpIC0gb2Zmc2V0KSk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpICsgb2Zmc2V0KTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCQkJdG9kbyAtPSAoc2dfZG1hX2xlbihzZykgLSBvZmZzZXQpOworCQkJb2Zmc2V0ID0gMDsKKwkJCXNnKys7CisJCQl3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEUgfAorCQkJCQkJICAgICAgc2dfZG1hX2xlbihzZykpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCQkJCXRvZG8gLT0gc2dfZG1hX2xlbihzZyk7CisJCQkJc2crKzsKKwkJCX0KKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFIHwgUklTQ19FT0wgfCB0b2RvKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisJCQlvZmZzZXQgKz0gdG9kbzsKKwkJfQorCQlvZmZzZXQgKz0gcGFkZGluZzsKKwl9CisKKwlyZXR1cm4gcnA7Cit9CisKK2ludCBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbyhzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCSAgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKKwkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJCSAgdW5zaWduZWQgaW50IGJwbCwKKwkJCQkgIHVuc2lnbmVkIGludCBsaW5lcywgdW5zaWduZWQgaW50IGxwaSkKK3sKKwl1MzIgaW5zdHJ1Y3Rpb25zOworCV9fbGUzMiAqcnA7CisJaW50IHJjOworCisJLyogZXN0aW1hdGUgcmlzYyBtZW06IHdvcnN0IGNhc2UgaXMgb25lIHdyaXRlIHBlciBwYWdlIGJvcmRlciArCisJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jcyArIGp1bXAgKGFsbCAyIGR3b3JkcykuICBIZXJlCisJICAgdGhlcmUgaXMgbm8gcGFkZGluZyBhbmQgbm8gc3luYy4gIEZpcnN0IERNQSByZWdpb24gbWF5IGJlIHNtYWxsZXIKKwkgICB0aGFuIFBBR0VfU0laRSAqLworCS8qIEp1bXAgYW5kIHdyaXRlIG5lZWQgYW4gZXh0cmEgZHdvcmQgKi8KKwlpbnN0cnVjdGlvbnMgPSAxICsgKGJwbCAqIGxpbmVzKSAvIFBBR0VfU0laRSArIGxpbmVzOworCWluc3RydWN0aW9ucyArPSAxOworCisJaWYgKChyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyAqIDEyKSkgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiB3cml0ZSByaXNjIGluc3RydWN0aW9ucyAqLworCXJwID0gcmlzYy0+Y3B1OworCXJwID0gY3gyNTgyMV9yaXNjX2ZpZWxkX2F1ZGlvKHJwLCBzZ2xpc3QsIDAsIE5PX1NZTkNfTElORSwgYnBsLCAwLAorCQkJCSAgICAgIGxpbmVzLCBscGkpOworCisJLyogc2F2ZSBwb2ludGVyIHRvIGptcCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisJcmlzYy0+am1wID0gcnA7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOworCXJldHVybiAwOworfQorCitpbnQgY3gyNTgyMV9yaXNjX3N0b3BwZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKKwkJCSB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCV9fbGUzMiAqcnA7CisJaW50IHJjOworCisJcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCA0ICogMTYpOworCisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KKwlycCA9IHJpc2MtPmNwdTsKKworCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFQ1IgfCBSSVNDX0lSUTEpOworCSoocnArKykgPSBjcHVfdG9fbGUzMihyZWcpOworCSoocnArKykgPSBjcHVfdG9fbGUzMih2YWx1ZSk7CisJKihycCsrKSA9IGNwdV90b19sZTMyKG1hc2spOworCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX0pVTVApOworCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjLT5kbWEpOworCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCXJldHVybiAwOworfQorCit2b2lkIGN4MjU4MjFfZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEgPSB2aWRlb2J1Zl90b19kbWEoJmJ1Zi0+dmIpOworCisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKKwl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOworCXZpZGVvYnVmX2RtYV91bm1hcChxLCBkbWEpOworCXZpZGVvYnVmX2RtYV9mcmVlKGRtYSk7CisJYnRjeF9yaXNjbWVtX2ZyZWUodG9fcGNpX2RldihxLT5kZXYpLCAmYnVmLT5yaXNjKTsKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworc3RhdGljIGlycXJldHVybl90IGN4MjU4MjFfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGRldl9pZDsKKwl1MzIgcGNpX3N0YXR1cywgcGNpX21hc2s7CisJdTMyIHZpZF9zdGF0dXM7CisJaW50IGksIGhhbmRsZWQgPSAwOworCXUzMiBtYXNrWzhdID0geyAxLCAyLCA0LCA4LCAxNiwgMzIsIDY0LCAxMjggfTsKKworCXBjaV9zdGF0dXMgPSBjeF9yZWFkKFBDSV9JTlRfU1RBVCk7CisJcGNpX21hc2sgPSBjeF9yZWFkKFBDSV9JTlRfTVNLKTsKKworCWlmIChwY2lfc3RhdHVzID09IDApCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IFZJRF9DSEFOTkVMX05VTTsgaSsrKSB7CisJCWlmIChwY2lfc3RhdHVzICYgbWFza1tpXSkgeworCQkJdmlkX3N0YXR1cyA9IGN4X3JlYWQoZGV2LT5zcmFtX2NoYW5uZWxzW2ldLmludF9zdGF0KTsKKworCQkJaWYgKHZpZF9zdGF0dXMpCisJCQkJaGFuZGxlZCArPQorCQkJCSAgICBjeDI1ODIxX3ZpZGVvX2lycShkZXYsIGksIHZpZF9zdGF0dXMpOworCisJCQljeF93cml0ZShQQ0lfSU5UX1NUQVQsIG1hc2tbaV0pOworCQl9CisJfQorCisgICAgICBvdXQ6CisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3ZvaWQgY3gyNTgyMV9wcmludF9pcnFiaXRzKGNoYXIgKm5hbWUsIGNoYXIgKnRhZywgY2hhciAqKnN0cmluZ3MsCisJCQkgICBpbnQgbGVuLCB1MzIgYml0cywgdTMyIG1hc2spCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVzIFsweCV4XSIsIG5hbWUsIHRhZywgYml0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKCEoYml0cyAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RyaW5nc1tpXSkKKwkJCXByaW50aygiICVzIiwgc3RyaW5nc1tpXSk7CisJCWVsc2UKKwkJCXByaW50aygiICVkIiwgaSk7CisJCWlmICghKG1hc2sgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJcHJpbnRrKCIqIik7CisJfQorCXByaW50aygiXG4iKTsKK30KKworc3RydWN0IGN4MjU4MjFfZGV2ICpjeDI1ODIxX2Rldl9nZXQoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXJldHVybiBkZXY7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGN4MjU4MjFfaW5pdGRldihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXY7CisJaW50IGVyciA9IDA7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwY2lfZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsX2ZyZWU7CisKKwkvKiBwY2kgaW5pdCAqLworCWRldi0+cGNpID0gcGNpX2RldjsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpX2RldikpIHsKKwkJZXJyID0gLUVJTzsKKworCQlwcmludGsoS0VSTl9JTkZPICJwY2kgZW5hYmxlIGZhaWxlZCEgIik7CisKKwkJZ290byBmYWlsX3VucmVnaXN0ZXJfZGV2aWNlOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImN4MjU4MjEgQXRoZW5hIHBjaSBlbmFibGUgISBcbiIpOworCisJaWYgKGN4MjU4MjFfZGV2X3NldHVwKGRldikgPCAwKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RldmljZTsKKwl9CisKKwkvKiBwcmludCBwY2kgaW5mbyAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmRldi0+cGNpX3Jldik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICZkZXYtPnBjaV9sYXQpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzA6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCisJICAgICAgICJsYXRlbmN5OiAlZCwgbW1pbzogMHglbGx4XG4iLCBkZXYtPm5hbWUsCisJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpLCBkZXYtPnBjaV9yZXYsIHBjaV9kZXYtPmlycSwKKwkgICAgICAgZGV2LT5wY2lfbGF0LCAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+YmFzZV9pb19hZGRyKTsKKworCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOworCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgMHhmZmZmZmZmZikpIHsKKwkJcHJpbnRrKCIlcy8wOiBPb3BzOiBubyAzMmJpdCBQQ0kgRE1BID8/P1xuIiwgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBmYWlsX2lycTsKKwl9CisKKwllcnIgPQorCSAgICByZXF1ZXN0X2lycShwY2lfZGV2LT5pcnEsIGN4MjU4MjFfaXJxLCBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCisJCQlkZXYtPm5hbWUsIGRldik7CisKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJCSAgICAgICBwY2lfZGV2LT5pcnEpOworCQlnb3RvIGZhaWxfaXJxOworCX0KKworCXJldHVybiAwOworCisgICAgICBmYWlsX2lycToKKwlwcmludGsoS0VSTl9JTkZPICJjeDI1ODIxIGN4MjU4MjFfaW5pdGRldigpIGNhbid0IGdldCBJUlEgISBcbiIpOworCWN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKworICAgICAgZmFpbF91bnJlZ2lzdGVyX2RldmljZToKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKworICAgICAgZmFpbF9mcmVlOgorCWtmcmVlKGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGN4MjU4MjFfZmluaWRldihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZ2V0X2N4MjU4MjEodjRsMl9kZXYpOworCisJY3gyNTgyMV9zaHV0ZG93bihkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKKworCS8qIHVucmVnaXN0ZXIgc3R1ZmYgKi8KKwlpZiAocGNpX2Rldi0+aXJxKQorCQlmcmVlX2lycShwY2lfZGV2LT5pcnEsIGRldik7CisKKwltdXRleF9sb2NrKCZkZXZsaXN0KTsKKwlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKKwltdXRleF91bmxvY2soJmRldmxpc3QpOworCisJY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeDI1ODIxX3BjaV90YmxbXSA9IHsKKwl7CisJIC8qIENYMjU4MjEgQXRoZW5hICovCisJIC52ZW5kb3IgPSAweDE0ZjEsCisJIC5kZXZpY2UgPSAweDgyMTAsCisJIC5zdWJ2ZW5kb3IgPSAweDE0ZjEsCisJIC5zdWJkZXZpY2UgPSAweDA5MjAsCisJIH0sCisJeworCSAvKiAtLS0gZW5kIG9mIGxpc3QgLS0tICovCisJIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjeDI1ODIxX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3gyNTgyMV9wY2lfZHJpdmVyID0geworCS5uYW1lID0gImN4MjU4MjEiLAorCS5pZF90YWJsZSA9IGN4MjU4MjFfcGNpX3RibCwKKwkucHJvYmUgPSBjeDI1ODIxX2luaXRkZXYsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGN4MjU4MjFfZmluaWRldiksCisJLyogVE9ETyAqLworCS5zdXNwZW5kID0gTlVMTCwKKwkucmVzdW1lID0gTlVMTCwKK307CisKK3N0YXRpYyBpbnQgY3gyNTgyMV9pbml0KHZvaWQpCit7CisJSU5JVF9MSVNUX0hFQUQoJmN4MjU4MjFfZGV2bGlzdCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNTgyMSBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCisJICAgICAgIChDWDI1ODIxX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAorCSAgICAgICAoQ1gyNTgyMV9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLCBDWDI1ODIxX1ZFUlNJT05fQ09ERSAmIDB4ZmYpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjeDI1ODIxX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBjeDI1ODIxX2Zpbmkodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmN4MjU4MjFfcGNpX2RyaXZlcik7Cit9CisKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9kZXZsaXN0KTsKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9zcmFtX2NoYW5uZWxzKTsKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9wcmludF9pcnFiaXRzKTsKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9kZXZfZ2V0KTsKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9kZXZfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwKTsKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcCk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX2F1ZGlvKTsKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcF9hdWRpbyk7CitFWFBPUlRfU1lNQk9MKGN4MjU4MjFfcmlzY19kYXRhYnVmZmVyX2F1ZGlvKTsKK0VYUE9SVF9TWU1CT0woY3gyNTgyMV9zZXRfZ3Bpb3Bpbl9kaXJlY3Rpb24pOworCittb2R1bGVfaW5pdChjeDI1ODIxX2luaXQpOworbW9kdWxlX2V4aXQoY3gyNTgyMV9maW5pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtZ3Bpby5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhMzdiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtZ3Bpby5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKiogR1BJTyBzdHVmZnMgKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjeDI1ODIxX3NldF9ncGlvcGluX2RpcmVjdGlvbihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICBpbnQgcGluX251bWJlciwgaW50IHBpbl9sb2dpY192YWx1ZSkKK3sKKwlpbnQgYml0ID0gcGluX251bWJlcjsKKwl1MzIgZ3Bpb19vZV9yZWcgPSBHUElPX0xPX09FOworCXUzMiBncGlvX3JlZ2lzdGVyID0gMDsKKwl1MzIgdmFsdWUgPSAwOworCisJLy8gQ2hlY2sgZm9yIHZhbGlkIHBpbk51bWJlcgorCWlmIChwaW5fbnVtYmVyID49IDQ3KQorCQlyZXR1cm47CisKKwlpZiAocGluX251bWJlciA+IDMxKSB7CisJCWJpdCA9IHBpbl9udW1iZXIgLSAzMTsKKwkJZ3Bpb19vZV9yZWcgPSBHUElPX0hJX09FOworCX0KKwkvLyBIZXJlIHdlIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIEdQSU9zIDAgYW5kIDEgYXJlIG91dHB1dC4ga2VlcCB0aGUgcmVzdCBhcyBpcworCWdwaW9fcmVnaXN0ZXIgPSBjeF9yZWFkKGdwaW9fb2VfcmVnKTsKKworCWlmIChwaW5fbG9naWNfdmFsdWUgPT0gMSkgeworCQl2YWx1ZSA9IGdwaW9fcmVnaXN0ZXIgfCBTZXRfR1BJT19CaXQoYml0KTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IGdwaW9fcmVnaXN0ZXIgJiBDbGVhcl9HUElPX0JpdChiaXQpOworCX0KKworCWN4X3dyaXRlKGdwaW9fb2VfcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfc2V0X2dwaW9waW5fbG9naWN2YWx1ZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgaW50IHBpbl9udW1iZXIsIGludCBwaW5fbG9naWNfdmFsdWUpCit7CisJaW50IGJpdCA9IHBpbl9udW1iZXI7CisJdTMyIGdwaW9fcmVnID0gR1BJT19MTzsKKwl1MzIgdmFsdWUgPSAwOworCisJLy8gQ2hlY2sgZm9yIHZhbGlkIHBpbk51bWJlcgorCWlmIChwaW5fbnVtYmVyID49IDQ3KQorCQlyZXR1cm47CisKKwljeDI1ODIxX3NldF9ncGlvcGluX2RpcmVjdGlvbihkZXYsIHBpbl9udW1iZXIsIDApOwkvLyBjaGFuZ2UgdG8gb3V0cHV0IGRpcmVjdGlvbgorCisJaWYgKHBpbl9udW1iZXIgPiAzMSkgeworCQliaXQgPSBwaW5fbnVtYmVyIC0gMzE7CisJCWdwaW9fcmVnID0gR1BJT19ISTsKKwl9CisKKwl2YWx1ZSA9IGN4X3JlYWQoZ3Bpb19yZWcpOworCisJaWYgKHBpbl9sb2dpY192YWx1ZSA9PSAwKSB7CisJCXZhbHVlICY9IENsZWFyX0dQSU9fQml0KGJpdCk7CisJfSBlbHNlIHsKKwkJdmFsdWUgfD0gU2V0X0dQSU9fQml0KGJpdCk7CisJfQorCisJY3hfd3JpdGUoZ3Bpb19yZWcsIHZhbHVlKTsKK30KKwordm9pZCBjeDI1ODIxX2dwaW9faW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyNTgyMV9CT0FSRF9DT05FWEFOVF9BVEhFTkExMDoKKwlkZWZhdWx0OgorCQkvL3NldCBHUElPIDUgdG8gc2VsZWN0IHRoZSBwYXRoIGZvciBNZWR1c2EvQXRoZW5hCisJCWN4MjU4MjFfc2V0X2dwaW9waW5fbG9naWN2YWx1ZShkZXYsIDUsIDEpOworCQltZGVsYXkoMjApOworCQlicmVhazsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtZ3Bpby5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwNzY0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtZ3Bpby5oCkBAIC0wLDAgKzEsMiBAQAorCit2b2lkIGN4MjU4MjFfZ3Bpb19pbml0KHN0cnVjdCBhdGhlbmFfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1pMmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmMjY4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtaTJjLmMKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoJQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLmgiCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX2RlYnVnOworbW9kdWxlX3BhcmFtKGkyY19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaTJjX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtpMmNdIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX3NjYW4gPSAwOworbW9kdWxlX3BhcmFtKGkyY19zY2FuLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpMmNfc2NhbiwgInNjYW4gaTJjIGJ1cyBhdCBpbnNtb2QgdGltZSIpOworCisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKVwKKwlkbyB7IGlmIChpMmNfZGVidWcgPj0gbGV2ZWwpXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXMvMDogIiBmbXQsIGRldi0+bmFtZSwgIyMgYXJnKTtcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBJMkNfV0FJVF9ERUxBWSAzMgorI2RlZmluZSBJMkNfV0FJVF9SRVRSWSA2NAorCisjZGVmaW5lIEkyQ19FWFRFTkQgICgxIDw8IDMpCisjZGVmaW5lIEkyQ19OT1NUT1AgICgxIDw8IDQpCisKK3N0YXRpYyBpbmxpbmUgaW50IGkyY19zbGF2ZV9kaWRfYWNrKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApCit7CisJc3RydWN0IGN4MjU4MjFfaTJjICpidXMgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gYnVzLT5kZXY7CisJcmV0dXJuIGN4X3JlYWQoYnVzLT5yZWdfc3RhdCkgJiAweDAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBpMmNfaXNfYnVzeShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQoreworCXN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCXJldHVybiBjeF9yZWFkKGJ1cy0+cmVnX3N0YXQpICYgMHgwMiA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IGkyY193YWl0X2RvbmUoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCkKK3sKKwlpbnQgY291bnQ7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBJMkNfV0FJVF9SRVRSWTsgY291bnQrKykgeworCQlpZiAoIWkyY19pc19idXN5KGkyY19hZGFwKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoSTJDX1dBSVRfREVMQVkpOworCX0KKworCWlmIChJMkNfV0FJVF9SRVRSWSA9PSBjb3VudCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpMmNfc2VuZGJ5dGVzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkgY29uc3Qgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IGpvaW5lZF9ybGVuKQoreworCXN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCXUzMiB3ZGF0YSwgYWRkciwgY3RybDsKKwlpbnQgcmV0dmFsLCBjbnQ7CisKKwlpZiAoam9pbmVkX3JsZW4pCisJCWRwcmludGsoMSwgIiVzKG1zZy0+d2xlbj0lZCwgbmV4dG1zZy0+cmxlbj0lZClcbiIsIF9fZnVuY19fLAorCQkJbXNnLT5sZW4sIGpvaW5lZF9ybGVuKTsKKwllbHNlCisJCWRwcmludGsoMSwgIiVzKG1zZy0+bGVuPSVkKVxuIiwgX19mdW5jX18sIG1zZy0+bGVuKTsKKworCS8qIERlYWwgd2l0aCBpMmMgcHJvYmUgZnVuY3Rpb25zIHdpdGggemVybyBwYXlsb2FkICovCisJaWYgKG1zZy0+bGVuID09IDApIHsKKwkJY3hfd3JpdGUoYnVzLT5yZWdfYWRkciwgbXNnLT5hZGRyIDw8IDI1KTsKKwkJY3hfd3JpdGUoYnVzLT5yZWdfY3RybCwgYnVzLT5pMmNfcGVyaW9kIHwgKDEgPDwgMikpOworCisJCWlmICghaTJjX3dhaXRfZG9uZShpMmNfYWRhcCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAoIWkyY19zbGF2ZV9kaWRfYWNrKGkyY19hZGFwKSkKKwkJCXJldHVybiAtRUlPOworCisJCWRwcmludGsoMSwgIiVzKCkgcmV0dXJucyAwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCS8qIGRldiwgcmVnICsgZmlyc3QgYnl0ZSAqLworCWFkZHIgPSAobXNnLT5hZGRyIDw8IDI1KSB8IG1zZy0+YnVmWzBdOworCXdkYXRhID0gbXNnLT5idWZbMF07CisKKwljdHJsID0gYnVzLT5pMmNfcGVyaW9kIHwgKDEgPDwgMTIpIHwgKDEgPDwgMik7CisKKwlpZiAobXNnLT5sZW4gPiAxKQorCQljdHJsIHw9IEkyQ19OT1NUT1AgfCBJMkNfRVhURU5EOworCWVsc2UgaWYgKGpvaW5lZF9ybGVuKQorCQljdHJsIHw9IEkyQ19OT1NUT1A7CisKKwljeF93cml0ZShidXMtPnJlZ19hZGRyLCBhZGRyKTsKKwljeF93cml0ZShidXMtPnJlZ193ZGF0YSwgd2RhdGEpOworCWN4X3dyaXRlKGJ1cy0+cmVnX2N0cmwsIGN0cmwpOworCisJcmV0dmFsID0gaTJjX3dhaXRfZG9uZShpMmNfYWRhcCk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyOworCisJaWYgKHJldHZhbCA9PSAwKQorCQlnb3RvIGVpbzsKKworCWlmIChpMmNfZGVidWcpIHsKKwkJaWYgKCEoY3RybCAmIEkyQ19OT1NUT1ApKQorCQkJcHJpbnRrKCIgPlxuIik7CisJfQorCisJZm9yIChjbnQgPSAxOyBjbnQgPCBtc2ctPmxlbjsgY250KyspIHsKKwkJLyogZm9sbG93aW5nIGJ5dGVzICovCisJCXdkYXRhID0gbXNnLT5idWZbY250XTsKKwkJY3RybCA9IGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDEyKSB8ICgxIDw8IDIpOworCisJCWlmIChjbnQgPCBtc2ctPmxlbiAtIDEpCisJCQljdHJsIHw9IEkyQ19OT1NUT1AgfCBJMkNfRVhURU5EOworCQllbHNlIGlmIChqb2luZWRfcmxlbikKKwkJCWN0cmwgfD0gSTJDX05PU1RPUDsKKworCQljeF93cml0ZShidXMtPnJlZ19hZGRyLCBhZGRyKTsKKwkJY3hfd3JpdGUoYnVzLT5yZWdfd2RhdGEsIHdkYXRhKTsKKwkJY3hfd3JpdGUoYnVzLT5yZWdfY3RybCwgY3RybCk7CisKKwkJcmV0dmFsID0gaTJjX3dhaXRfZG9uZShpMmNfYWRhcCk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBlcnI7CisKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJZ290byBlaW87CisKKwkJaWYgKGkyY19kZWJ1ZykgeworCQkJZHByaW50aygxLCAiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKKwkJCWlmICghKGN0cmwgJiBJMkNfTk9TVE9QKSkKKwkJCQlkcHJpbnRrKDEsICIgPlxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gbXNnLT5sZW47CisKKyAgICAgIGVpbzoKKwlyZXR2YWwgPSAtRUlPOworICAgICAgZXJyOgorCWlmIChpMmNfZGVidWcpCisJCXByaW50ayhLRVJOX0VSUiAiIEVSUjogJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBpMmNfcmVhZGJ5dGVzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkgY29uc3Qgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IGpvaW5lZCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cyA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBidXMtPmRldjsKKwl1MzIgY3RybCwgY250OworCWludCByZXR2YWw7CisKKwlpZiAoaTJjX2RlYnVnICYmICFqb2luZWQpCisJCWRwcmludGsoMSwgIjYtJXMobXNnLT5sZW49JWQpXG4iLCBfX2Z1bmNfXywgbXNnLT5sZW4pOworCisJLyogRGVhbCB3aXRoIGkyYyBwcm9iZSBmdW5jdGlvbnMgd2l0aCB6ZXJvIHBheWxvYWQgKi8KKwlpZiAobXNnLT5sZW4gPT0gMCkgeworCQljeF93cml0ZShidXMtPnJlZ19hZGRyLCBtc2ctPmFkZHIgPDwgMjUpOworCQljeF93cml0ZShidXMtPnJlZ19jdHJsLCBidXMtPmkyY19wZXJpb2QgfCAoMSA8PCAyKSB8IDEpOworCQlpZiAoIWkyY193YWl0X2RvbmUoaTJjX2FkYXApKQorCQkJcmV0dXJuIC1FSU87CisJCWlmICghaTJjX3NsYXZlX2RpZF9hY2soaTJjX2FkYXApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJZHByaW50aygxLCAiJXMoKSByZXR1cm5zIDBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGkyY19kZWJ1ZykgeworCQlpZiAoam9pbmVkKQorCQkJZHByaW50aygxLCAiIFIiKTsKKwkJZWxzZQorCQkJZHByaW50aygxLCAiIDxSICUwMngiLCAobXNnLT5hZGRyIDw8IDEpICsgMSk7CisJfQorCisJZm9yIChjbnQgPSAwOyBjbnQgPCBtc2ctPmxlbjsgY250KyspIHsKKworCQljdHJsID0gYnVzLT5pMmNfcGVyaW9kIHwgKDEgPDwgMTIpIHwgKDEgPDwgMikgfCAxOworCisJCWlmIChjbnQgPCBtc2ctPmxlbiAtIDEpCisJCQljdHJsIHw9IEkyQ19OT1NUT1AgfCBJMkNfRVhURU5EOworCisJCWN4X3dyaXRlKGJ1cy0+cmVnX2FkZHIsIG1zZy0+YWRkciA8PCAyNSk7CisJCWN4X3dyaXRlKGJ1cy0+cmVnX2N0cmwsIGN0cmwpOworCisJCXJldHZhbCA9IGkyY193YWl0X2RvbmUoaTJjX2FkYXApOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAocmV0dmFsID09IDApCisJCQlnb3RvIGVpbzsKKwkJbXNnLT5idWZbY250XSA9IGN4X3JlYWQoYnVzLT5yZWdfcmRhdGEpICYgMHhmZjsKKworCQlpZiAoaTJjX2RlYnVnKSB7CisJCQlkcHJpbnRrKDEsICIgJTAyeCIsIG1zZy0+YnVmW2NudF0pOworCQkJaWYgKCEoY3RybCAmIEkyQ19OT1NUT1ApKQorCQkJCWRwcmludGsoMSwgIiA+XG4iKTsKKwkJfQorCX0KKworCXJldHVybiBtc2ctPmxlbjsKKyAgICAgIGVpbzoKKwlyZXR2YWwgPSAtRUlPOworICAgICAgZXJyOgorCWlmIChpMmNfZGVidWcpCisJCXByaW50ayhLRVJOX0VSUiAiIEVSUjogJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBpMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cyA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBidXMtPmRldjsKKwlpbnQgaSwgcmV0dmFsID0gMDsKKworCWRwcmludGsoMSwgIiVzKG51bSA9ICVkKVxuIiwgX19mdW5jX18sIG51bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJZHByaW50aygxLCAiJXMobnVtID0gJWQpIGFkZHIgPSAweCUwMnggIGxlbiA9IDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgbnVtLCBtc2dzW2ldLmFkZHIsIG1zZ3NbaV0ubGVuKTsKKworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiByZWFkICovCisJCQlyZXR2YWwgPSBpMmNfcmVhZGJ5dGVzKGkyY19hZGFwLCAmbXNnc1tpXSwgMCk7CisJCX0gZWxzZSBpZiAoaSArIDEgPCBudW0gJiYgKG1zZ3NbaSArIDFdLmZsYWdzICYgSTJDX01fUkQpICYmCisJCQkgICBtc2dzW2ldLmFkZHIgPT0gbXNnc1tpICsgMV0uYWRkcikgeworCQkJLyogd3JpdGUgdGhlbiByZWFkIGZyb20gc2FtZSBhZGRyZXNzICovCisJCQlyZXR2YWwgPQorCQkJICAgIGkyY19zZW5kYnl0ZXMoaTJjX2FkYXAsICZtc2dzW2ldLCBtc2dzW2kgKyAxXS5sZW4pOworCisJCQlpZiAocmV0dmFsIDwgMCkKKwkJCQlnb3RvIGVycjsKKwkJCWkrKzsKKwkJCXJldHZhbCA9IGkyY19yZWFkYnl0ZXMoaTJjX2FkYXAsICZtc2dzW2ldLCAxKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHdyaXRlICovCisJCQlyZXR2YWwgPSBpMmNfc2VuZGJ5dGVzKGkyY19hZGFwLCAmbXNnc1tpXSwgMCk7CisJCX0KKworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gbnVtOworCisgICAgICBlcnI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdTMyIGN4MjU4MjFfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUwgfAorCSAgICBJMkNfRlVOQ19JMkMgfAorCSAgICBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfAorCSAgICBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX1dPUkRfREFUQTsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGN4MjU4MjFfaTJjX2FsZ29fdGVtcGxhdGUgPSB7CisJLm1hc3Rlcl94ZmVyID0gaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBjeDI1ODIxX2Z1bmN0aW9uYWxpdHksCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGN4MjU4MjFfaTJjX2FkYXBfdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAiY3gyNTgyMSIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmFsZ28gPSAmY3gyNTgyMV9pMmNfYWxnb190ZW1wbGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjeDI1ODIxX2kyY19jbGllbnRfdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAiY3gyNTgyMSBpbnRlcm5hbCIsCit9OworCisvKiBpbml0ICsgcmVnaXN0ZXIgaTJjIGFsZ28tYml0IGFkYXB0ZXIgKi8KK2ludCBjeDI1ODIxX2kyY19yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCisJZHByaW50aygxLCAiJXMoYnVzID0gJWQpXG4iLCBfX2Z1bmNfXywgYnVzLT5ucik7CisKKwltZW1jcHkoJmJ1cy0+aTJjX2FkYXAsICZjeDI1ODIxX2kyY19hZGFwX3RlbXBsYXRlLAorCSAgICAgICBzaXplb2YoYnVzLT5pMmNfYWRhcCkpOworCW1lbWNweSgmYnVzLT5pMmNfYWxnbywgJmN4MjU4MjFfaTJjX2FsZ29fdGVtcGxhdGUsCisJICAgICAgIHNpemVvZihidXMtPmkyY19hbGdvKSk7CisJbWVtY3B5KCZidXMtPmkyY19jbGllbnQsICZjeDI1ODIxX2kyY19jbGllbnRfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZihidXMtPmkyY19jbGllbnQpKTsKKworCWJ1cy0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZkZXYtPnBjaS0+ZGV2OworCisJc3RybGNweShidXMtPmkyY19hZGFwLm5hbWUsIGJ1cy0+ZGV2LT5uYW1lLCBzaXplb2YoYnVzLT5pMmNfYWRhcC5uYW1lKSk7CisKKwlidXMtPmkyY19hbGdvLmRhdGEgPSBidXM7CisJYnVzLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBidXM7CisJaTJjX3NldF9hZGFwZGF0YSgmYnVzLT5pMmNfYWRhcCwgJmRldi0+djRsMl9kZXYpOworCWkyY19hZGRfYWRhcHRlcigmYnVzLT5pMmNfYWRhcCk7CisKKwlidXMtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidXMtPmkyY19hZGFwOworCisJLy9zZXQgdXAgdGhlIEkyYworCWJ1cy0+aTJjX2NsaWVudC5hZGRyID0gKDB4ODggPj4gMSk7CisKKwlyZXR1cm4gYnVzLT5pMmNfcmM7Cit9CisKK2ludCBjeDI1ODIxX2kyY191bnJlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzKQoreworCWkyY19kZWxfYWRhcHRlcigmYnVzLT5pMmNfYWRhcCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3gyNTgyMV9hdl9jbGsoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBlbmFibGUpCit7CisJLyogd3JpdGUgMCB0byBidXMgMiBhZGRyIDB4MTQ0IHZpYSBpMnhfeGZlcigpICovCisJY2hhciBidWZmZXJbM107CisJc3RydWN0IGkyY19tc2cgbXNnOworCWRwcmludGsoMSwgIiVzKGVuYWJsZWQgPSAlZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOworCisJLyogUmVnaXN0ZXIgMHgxNDQgKi8KKwlidWZmZXJbMF0gPSAweDAxOworCWJ1ZmZlclsxXSA9IDB4NDQ7CisJaWYgKGVuYWJsZSA9PSAxKQorCQlidWZmZXJbMl0gPSAweDA1OworCWVsc2UKKwkJYnVmZmVyWzJdID0gMHgwMDsKKworCW1zZy5hZGRyID0gMHg0NDsKKwltc2cuZmxhZ3MgPSBJMkNfTV9URU47CisJbXNnLmxlbiA9IDM7CisJbXNnLmJ1ZiA9IGJ1ZmZlcjsKKworCWkyY194ZmVyKCZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXAsICZtc2csIDEpOworfQorCitpbnQgY3gyNTgyMV9pMmNfcmVhZChzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cywgdTE2IHJlZ19hZGRyLCBpbnQgKnZhbHVlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmYnVzLT5pMmNfY2xpZW50OworCWludCByZXR2YWwgPSAwOworCWludCB2ID0gMDsKKwl1OCBhZGRyWzJdID0geyAwLCAwIH07CisJdTggYnVmWzRdID0geyAwLCAwLCAwLCAwIH07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0geworCQl7CisJCSAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJIC5mbGFncyA9IDAsCisJCSAubGVuID0gMiwKKwkJIC5idWYgPSBhZGRyLAorCQkgfSwgeworCQkgICAgIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgICAgIC5mbGFncyA9IEkyQ19NX1JELAorCQkgICAgIC5sZW4gPSA0LAorCQkgICAgIC5idWYgPSBidWYsCisJCSAgICAgfQorCX07CisKKwlhZGRyWzBdID0gKHJlZ19hZGRyID4+IDgpOworCWFkZHJbMV0gPSAocmVnX2FkZHIgJiAweGZmKTsKKwltc2dzWzBdLmFkZHIgPSAweDQ0OworCW1zZ3NbMV0uYWRkciA9IDB4NDQ7CisKKwlyZXR2YWwgPSBpMmNfeGZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpOworCisJdiA9IChidWZbM10gPDwgMjQpIHwgKGJ1ZlsyXSA8PCAxNikgfCAoYnVmWzFdIDw8IDgpIHwgYnVmWzBdOworCSp2YWx1ZSA9IHY7CisKKwlyZXR1cm4gdjsKK30KKworaW50IGN4MjU4MjFfaTJjX3dyaXRlKHN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzLCB1MTYgcmVnX2FkZHIsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmJ1cy0+aTJjX2NsaWVudDsKKwlpbnQgcmV0dmFsID0gMDsKKwl1OCBidWZbNl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMV0gPSB7CisJCXsKKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gMCwKKwkJIC5sZW4gPSA2LAorCQkgLmJ1ZiA9IGJ1ZiwKKwkJIH0KKwl9OworCisJYnVmWzBdID0gcmVnX2FkZHIgPj4gODsKKwlidWZbMV0gPSByZWdfYWRkciAmIDB4ZmY7CisJYnVmWzVdID0gKHZhbHVlID4+IDI0KSAmIDB4ZmY7CisJYnVmWzRdID0gKHZhbHVlID4+IDE2KSAmIDB4ZmY7CisJYnVmWzNdID0gKHZhbHVlID4+IDgpICYgMHhmZjsKKwlidWZbMl0gPSB2YWx1ZSAmIDB4ZmY7CisJY2xpZW50LT5mbGFncyA9IDA7CisJbXNnc1swXS5hZGRyID0gMHg0NDsKKworCXJldHZhbCA9IGkyY194ZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtZGVmaW5lcy5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtZGVmaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDIxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS1kZWZpbmVzLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTUVEVVNBX0RFRl9IXworI2RlZmluZSBfTUVEVVNBX0RFRl9IXworCisvLyBWaWRlbyBkZW9jZGVyIHRoYXQgd2Ugc3VwcG9ydGVkCisjZGVmaW5lIFZERUNfQQkJMAorI2RlZmluZSBWREVDX0IJCTEKKyNkZWZpbmUgVkRFQ19DCQkyCisjZGVmaW5lIFZERUNfRAkJMworI2RlZmluZSBWREVDX0UJCTQKKyNkZWZpbmUgVkRFQ19GCQk1CisjZGVmaW5lIFZERUNfRwkJNgorI2RlZmluZSBWREVDX0gJCTcKKworLy8jZGVmaW5lIEFVVE9fU1dJVENIX0JJVFtdICA9IHsgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSB9OworCisvLyBUaGUgZm9sbG93aW5nIGJpdCBwb3NpdGlvbiBlbmFibGVzIGF1dG9tYXRpYyBzb3VyY2Ugc3dpdGNoaW5nIGZvciBkZWNvZGVyIEEtSC4KKy8vIERpc3BsYXkgaW5kZXggcGVyIGNhbWVyYS4KKy8vI2RlZmluZSBWREVDX0lOREVYW10gPSB7MCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgN307CisKKy8vIFNlbGVjdCBpbnB1dCBiaXQgdG8gdmlkZW8gZGVjb2RlciBBLUguCisvLyNkZWZpbmUgQ0hfU1JDX1NFTF9CSVRbXSA9IHsyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzF9OworCisvLyBlbmQgb2YgZGlzcGxheSBzZXF1ZW5jZQorI2RlZmluZSBFTkRfT0ZfU0VRCQkJCQkweEY7CisKKy8vIHJlZ2lzdHJ5IHN0cmluZyBzaXplCisjZGVmaW5lIE1BWF9SRUdJU1RSWV9TWgkJCQkJNDA7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS1yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmM5MGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtcmVnLmgKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19NRURVU0FfUkVHSVNURVJTX18KKyNkZWZpbmUgX19NRURVU0FfUkVHSVNURVJTX18KKworLy8gU2VyaWFsIFNsYXZlIFJlZ2lzdGVycworI2RlZmluZQlIT1NUX1JFR0lTVEVSMQkJCQkweDAwMDAKKyNkZWZpbmUJSE9TVF9SRUdJU1RFUjIJCQkJMHgwMDAxCisKKy8vIENoaXAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMKKyNkZWZpbmUJQ0hJUF9DVFJMCQkJCQkweDAxMDAKKyNkZWZpbmUJQUZFX0FCX0NUUkwJCQkJCTB4MDEwNAorI2RlZmluZQlBRkVfQ0RfQ1RSTAkJCQkJMHgwMTA4CisjZGVmaW5lCUFGRV9FRl9DVFJMCQkJCQkweDAxMEMKKyNkZWZpbmUJQUZFX0dIX0NUUkwJCQkJCTB4MDExMAorI2RlZmluZQlERU5DX0FCX0NUUkwJCQkJMHgwMTE0CisjZGVmaW5lCUJZUF9BQl9DVFJMCQkJCQkweDAxMTgKKyNkZWZpbmUJTU9OX0FfQ1RSTAkJCQkJMHgwMTFDCisjZGVmaW5lCURJU1BfU0VRX0EJCQkJCTB4MDEyMAorI2RlZmluZQlESVNQX1NFUV9CCQkJCQkweDAxMjQKKyNkZWZpbmUJRElTUF9BQl9DTlQJCQkJCTB4MDEyOAorI2RlZmluZQlESVNQX0NEX0NOVAkJCQkJMHgwMTJDCisjZGVmaW5lCURJU1BfRUZfQ05UCQkJCQkweDAxMzAKKyNkZWZpbmUJRElTUF9HSF9DTlQJCQkJCTB4MDEzNAorI2RlZmluZQlESVNQX0lKX0NOVAkJCQkJMHgwMTM4CisjZGVmaW5lCVBJTl9PRV9DVFJMCQkJCQkweDAxM0MKKyNkZWZpbmUJUElOX1NQRF9DVFJMCQkJCTB4MDE0MAorI2RlZmluZQlQSU5fU1BEX0NUUkwyCQkJCTB4MDE0NAorI2RlZmluZQlJUlFfU1RBVF9DVFJMCQkJCTB4MDE0OAorI2RlZmluZQlQT1dFUl9DVFJMX0FCCQkJCTB4MDE0QworI2RlZmluZQlQT1dFUl9DVFJMX0NECQkJCTB4MDE1MAorI2RlZmluZQlQT1dFUl9DVFJMX0VGCQkJCTB4MDE1NAorI2RlZmluZQlQT1dFUl9DVFJMX0dICQkJCTB4MDE1OAorI2RlZmluZQlUVU5FX0NUUkwJCQkJCTB4MDE1QworI2RlZmluZQlCSUFTX0NUUkwJCQkJCTB4MDE2MAorI2RlZmluZQlBRkVfQUJfRElBR19DVFJMCQkJMHgwMTY0CisjZGVmaW5lCUFGRV9DRF9ESUFHX0NUUkwJCQkweDAxNjgKKyNkZWZpbmUJQUZFX0VGX0RJQUdfQ1RSTAkJCTB4MDE2QworI2RlZmluZQlBRkVfR0hfRElBR19DVFJMCQkJMHgwMTcwCisjZGVmaW5lCVBMTF9BQl9ESUFHX0NUUkwJCQkweDAxNzQKKyNkZWZpbmUJUExMX0NEX0RJQUdfQ1RSTAkJCTB4MDE3OAorI2RlZmluZQlQTExfRUZfRElBR19DVFJMCQkJMHgwMTdDCisjZGVmaW5lCVBMTF9HSF9ESUFHX0NUUkwJCQkweDAxODAKKyNkZWZpbmUJVEVTVF9DVFJMCQkJCQkweDAxODQKKyNkZWZpbmUJQklTVF9TVEFUCQkJCQkweDAxODgKKyNkZWZpbmUJQklTVF9TVEFUMgkJCQkJMHgwMThDCisjZGVmaW5lCUJJU1RfVklEX1BMTF9BQl9TVEFUCQkweDAxOTAKKyNkZWZpbmUJQklTVF9WSURfUExMX0NEX1NUQVQJCTB4MDE5NAorI2RlZmluZQlCSVNUX1ZJRF9QTExfRUZfU1RBVAkJMHgwMTk4CisjZGVmaW5lCUJJU1RfVklEX1BMTF9HSF9TVEFUCQkweDAxOUMKKyNkZWZpbmUJRExMX0RJQUdfQ1RSTAkJCQkweDAxQTAKKyNkZWZpbmUJREVWX0NIX0lEX0NUUkwJCQkJMHgwMUE0CisjZGVmaW5lCUFCSVNUX0NUUkxfU1RBVFVTCQkJMHgwMUE4CisjZGVmaW5lCUFCSVNUX0ZSRVEJCQkJCTB4MDFBQworI2RlZmluZQlBQklTVF9HT0VSVF9TSElGVAkJCTB4MDFCMAorI2RlZmluZQlBQklTVF9DT0VGMTIJCQkJMHgwMUI0CisjZGVmaW5lCUFCSVNUX0NPRUYzNAkJCQkweDAxQjgKKyNkZWZpbmUJQUJJU1RfQ09FRjU2CQkJCTB4MDFCQworI2RlZmluZQlBQklTVF9DT0VGN19TTlIJCQkJMHgwMUMwCisjZGVmaW5lCUFCSVNUX0FEQ19DQUwJCQkJMHgwMUM0CisjZGVmaW5lCUFCSVNUX0JJTjFfVkdBMAkJCQkweDAxQzgKKyNkZWZpbmUJQUJJU1RfQklOMl9WR0ExCQkJCTB4MDFDQworI2RlZmluZQlBQklTVF9CSU4zX1ZHQTIJCQkJMHgwMUQwCisjZGVmaW5lCUFCSVNUX0JJTjRfVkdBMwkJCQkweDAxRDQKKyNkZWZpbmUJQUJJU1RfQklONV9WR0E0CQkJCTB4MDFEOAorI2RlZmluZQlBQklTVF9CSU42X1ZHQTUJCQkJMHgwMURDCisjZGVmaW5lCUFCSVNUX0JJTjdfVkdBNgkJCQkweDB4MUUwCisjZGVmaW5lCUFCSVNUX0NMQU1QX0EJCQkJMHgweDFFNAorI2RlZmluZQlBQklTVF9DTEFNUF9CCQkJCTB4MHgxRTgKKyNkZWZpbmUJQUJJU1RfQ0xBTVBfQwkJCQkweDAxRUMKKyNkZWZpbmUJQUJJU1RfQ0xBTVBfRAkJCQkweDAxRjAKKyNkZWZpbmUJQUJJU1RfQ0xBTVBfRQkJCQkweDAxRjQKKyNkZWZpbmUJQUJJU1RfQ0xBTVBfRgkJCQkweDAxRjgKKworLy8gICAgICAgICAgICAgIERpZ2l0YWwgVmlkZW8gRW5jb2RlciBBIFJlZ2lzdGVycworI2RlZmluZQlERU5DX0FfUkVHXzEJCQkJCTB4MDIwMAorI2RlZmluZQlERU5DX0FfUkVHXzIJCQkJCTB4MDIwNAorI2RlZmluZQlERU5DX0FfUkVHXzMJCQkJCTB4MDIwOAorI2RlZmluZQlERU5DX0FfUkVHXzQJCQkJCTB4MDIwQworI2RlZmluZQlERU5DX0FfUkVHXzUJCQkJCTB4MDIxMAorI2RlZmluZQlERU5DX0FfUkVHXzYJCQkJCTB4MDIxNAorI2RlZmluZQlERU5DX0FfUkVHXzcJCQkJCTB4MDIxOAorI2RlZmluZQlERU5DX0FfUkVHXzgJCQkJCTB4MDIxQworCisvLyAgICAgIERpZ2l0YWwgVmlkZW8gRW5jb2RlciBCIFJlZ2lzdGVycworI2RlZmluZQlERU5DX0JfUkVHXzEJCQkJCTB4MDMwMAorI2RlZmluZQlERU5DX0JfUkVHXzIJCQkJCTB4MDMwNAorI2RlZmluZQlERU5DX0JfUkVHXzMJCQkJCTB4MDMwOAorI2RlZmluZQlERU5DX0JfUkVHXzQJCQkJCTB4MDMwQworI2RlZmluZQlERU5DX0JfUkVHXzUJCQkJCTB4MDMxMAorI2RlZmluZQlERU5DX0JfUkVHXzYJCQkJCTB4MDMxNAorI2RlZmluZQlERU5DX0JfUkVHXzcJCQkJCTB4MDMxOAorI2RlZmluZQlERU5DX0JfUkVHXzgJCQkJCTB4MDMxQworCisvLyAgICAgICAgICAgICAgVmlkZW8gRGVjb2RlciBBIFJlZ2lzdGVycworI2RlZmluZQlNT0RFX0NUUkwJCQkJCQkweDEwMDAKKyNkZWZpbmUJT1VUX0NUUkwxCQkJCQkJMHgxMDA0CisjZGVmaW5lCU9VVF9DVFJMX05TCQkJCQkJMHgxMDA4CisjZGVmaW5lCUdFTl9TVEFUCQkJCQkJMHgxMDBDCisjZGVmaW5lCUlOVF9TVEFUX01BU0sJCQkJCTB4MTAxMAorI2RlZmluZQlMVU1BX0NUUkwJCQkJCQkweDEwMTQKKyNkZWZpbmUJQ0hST01BX0NUUkwJCQkJCQkweDEwMTgKKyNkZWZpbmUJQ1JVU0hfQ1RSTAkJCQkJCTB4MTAxQworI2RlZmluZQlIT1JJWl9USU1fQ1RSTAkJCQkJMHgxMDIwCisjZGVmaW5lCVZFUlRfVElNX0NUUkwJCQkJCTB4MTAyNAorI2RlZmluZQlNSVNDX1RJTV9DVFJMCQkJCQkweDEwMjgKKyNkZWZpbmUJRklFTERfQ09VTlQJCQkJCQkweDEwMkMKKyNkZWZpbmUJSFNDQUxFX0NUUkwJCQkJCQkweDEwMzAKKyNkZWZpbmUJVlNDQUxFX0NUUkwJCQkJCQkweDEwMzQKKyNkZWZpbmUJTUFOX1ZHQV9DVFJMCQkJCQkweDEwMzgKKyNkZWZpbmUJTUFOX0FHQ19DVFJMCQkJCQkweDEwM0MKKyNkZWZpbmUJREZFX0NUUkwxCQkJCQkJMHgxMDQwCisjZGVmaW5lCURGRV9DVFJMMgkJCQkJCTB4MTA0NAorI2RlZmluZQlERkVfQ1RSTDMJCQkJCQkweDEwNDgKKyNkZWZpbmUJUExMX0NUUkwJCQkJCQkweDEwNEMKKyNkZWZpbmUJUExMX0NUUkxfRkFTVAkJCQkJMHgxMDUwCisjZGVmaW5lCUhUTF9DVFJMCQkJCQkJMHgxMDU0CisjZGVmaW5lCVNSQ19DRkcJCQkJCQkJMHgxMDU4CisjZGVmaW5lCVNDX1NURVBfU0laRQkJCQkJMHgxMDVDCisjZGVmaW5lCVNDX0NPTlZFUkdFX0NUUkwJCQkJMHgxMDYwCisjZGVmaW5lCVNDX0xPT1BfQ1RSTAkJCQkJMHgxMDY0CisjZGVmaW5lCUNPTUJfMkRfSEZTX0NGRwkJCQkJMHgxMDY4CisjZGVmaW5lCUNPTUJfMkRfSEZEX0NGRwkJCQkJMHgxMDZDCisjZGVmaW5lCUNPTUJfMkRfTEZfQ0ZHCQkJCQkweDEwNzAKKyNkZWZpbmUJQ09NQl8yRF9CTEVORAkJCQkJMHgxMDc0CisjZGVmaW5lCUNPTUJfTUlTQ19DVFJMCQkJCQkweDEwNzgKKyNkZWZpbmUJQ09NQl9GTEFUX1RIUkVTSF9DVFJMCQkJMHgxMDdDCisjZGVmaW5lCUNPTUJfVEVTVAkJCQkJCTB4MTA4MAorI2RlZmluZQlCUF9NSVNDX0NUUkwJCQkJCTB4MTA4NAorI2RlZmluZQlWQ1JfREVUX0NUUkwJCQkJCTB4MTA4OAorI2RlZmluZQlOT0lTRV9ERVRfQ1RSTAkJCQkJMHgxMDhDCisjZGVmaW5lCUNPTUJfRkxBVF9OT0lTRV9DVFJMCQkJMHgxMDkwCisjZGVmaW5lCVZFUlNJT04JCQkJCQkJMHgxMUY4CisjZGVmaW5lCVNPRlRfUlNUX0NUUkwJCQkJCTB4MTFGQworCisvLyAgICAgIFZpZGVvIERlY29kZXIgQiBSZWdpc3RlcnMKKyNkZWZpbmUJVkRFQ19CX01PREVfQ1RSTAkJCQkweDEyMDAKKyNkZWZpbmUJVkRFQ19CX09VVF9DVFJMMQkJCQkweDEyMDQKKyNkZWZpbmUJVkRFQ19CX09VVF9DVFJMX05TCQkJCTB4MTIwOAorI2RlZmluZQlWREVDX0JfR0VOX1NUQVQJCQkJCTB4MTIwQworI2RlZmluZQlWREVDX0JfSU5UX1NUQVRfTUFTSwkJCTB4MTIxMAorI2RlZmluZQlWREVDX0JfTFVNQV9DVFJMCQkJCTB4MTIxNAorI2RlZmluZQlWREVDX0JfQ0hST01BX0NUUkwJCQkJMHgxMjE4CisjZGVmaW5lCVZERUNfQl9DUlVTSF9DVFJMCQkJCTB4MTIxQworI2RlZmluZQlWREVDX0JfSE9SSVpfVElNX0NUUkwJCQkweDEyMjAKKyNkZWZpbmUJVkRFQ19CX1ZFUlRfVElNX0NUUkwJCQkweDEyMjQKKyNkZWZpbmUJVkRFQ19CX01JU0NfVElNX0NUUkwJCQkweDEyMjgKKyNkZWZpbmUJVkRFQ19CX0ZJRUxEX0NPVU5UCQkJCTB4MTIyQworI2RlZmluZQlWREVDX0JfSFNDQUxFX0NUUkwJCQkJMHgxMjMwCisjZGVmaW5lCVZERUNfQl9WU0NBTEVfQ1RSTAkJCQkweDEyMzQKKyNkZWZpbmUJVkRFQ19CX01BTl9WR0FfQ1RSTAkJCQkweDEyMzgKKyNkZWZpbmUJVkRFQ19CX01BTl9BR0NfQ1RSTAkJCQkweDEyM0MKKyNkZWZpbmUJVkRFQ19CX0RGRV9DVFJMMQkJCQkweDEyNDAKKyNkZWZpbmUJVkRFQ19CX0RGRV9DVFJMMgkJCQkweDEyNDQKKyNkZWZpbmUJVkRFQ19CX0RGRV9DVFJMMwkJCQkweDEyNDgKKyNkZWZpbmUJVkRFQ19CX1BMTF9DVFJMCQkJCQkweDEyNEMKKyNkZWZpbmUJVkRFQ19CX1BMTF9DVFJMX0ZBU1QJCQkweDEyNTAKKyNkZWZpbmUJVkRFQ19CX0hUTF9DVFJMCQkJCQkweDEyNTQKKyNkZWZpbmUJVkRFQ19CX1NSQ19DRkcJCQkJCTB4MTI1OAorI2RlZmluZQlWREVDX0JfU0NfU1RFUF9TSVpFCQkJCTB4MTI1QworI2RlZmluZQlWREVDX0JfU0NfQ09OVkVSR0VfQ1RSTAkJCTB4MTI2MAorI2RlZmluZQlWREVDX0JfU0NfTE9PUF9DVFJMCQkJCTB4MTI2NAorI2RlZmluZQlWREVDX0JfQ09NQl8yRF9IRlNfQ0ZHCQkJMHgxMjY4CisjZGVmaW5lCVZERUNfQl9DT01CXzJEX0hGRF9DRkcJCQkweDEyNkMKKyNkZWZpbmUJVkRFQ19CX0NPTUJfMkRfTEZfQ0ZHCQkJMHgxMjcwCisjZGVmaW5lCVZERUNfQl9DT01CXzJEX0JMRU5ECQkJMHgxMjc0CisjZGVmaW5lCVZERUNfQl9DT01CX01JU0NfQ1RSTAkJCTB4MTI3OAorI2RlZmluZQlWREVDX0JfQ09NQl9GTEFUX1RIUkVTSF9DVFJMCTB4MTI3QworI2RlZmluZQlWREVDX0JfQ09NQl9URVNUCQkJCTB4MTI4MAorI2RlZmluZQlWREVDX0JfQlBfTUlTQ19DVFJMCQkJCTB4MTI4NAorI2RlZmluZQlWREVDX0JfVkNSX0RFVF9DVFJMCQkJCTB4MTI4OAorI2RlZmluZQlWREVDX0JfTk9JU0VfREVUX0NUUkwJCQkweDEyOEMKKyNkZWZpbmUJVkRFQ19CX0NPTUJfRkxBVF9OT0lTRV9DVFJMCQkweDEyOTAKKyNkZWZpbmUJVkRFQ19CX1ZFUlNJT04JCQkJCTB4MTNGOAorI2RlZmluZQlWREVDX0JfU09GVF9SU1RfQ1RSTAkJCTB4MTNGQworCisvLyBWaWRlbyBEZWNvZGVyIEMgUmVnaXN0ZXJzCisjZGVmaW5lCVZERUNfQ19NT0RFX0NUUkwJCQkJMHgxNDAwCisjZGVmaW5lCVZERUNfQ19PVVRfQ1RSTDEJCQkJMHgxNDA0CisjZGVmaW5lCVZERUNfQ19PVVRfQ1RSTF9OUwkJCQkweDE0MDgKKyNkZWZpbmUJVkRFQ19DX0dFTl9TVEFUCQkJCQkweDE0MEMKKyNkZWZpbmUJVkRFQ19DX0lOVF9TVEFUX01BU0sJCQkweDE0MTAKKyNkZWZpbmUgVkRFQ19DX0xVTUFfQ1RSTAkJCQkweDE0MTQKKyNkZWZpbmUgVkRFQ19DX0NIUk9NQV9DVFJMCQkJCTB4MTQxOAorI2RlZmluZQlWREVDX0NfQ1JVU0hfQ1RSTAkJCQkweDE0MUMKKyNkZWZpbmUJVkRFQ19DX0hPUklaX1RJTV9DVFJMCQkJMHgxNDIwCisjZGVmaW5lCVZERUNfQ19WRVJUX1RJTV9DVFJMCQkJMHgxNDI0CisjZGVmaW5lCVZERUNfQ19NSVNDX1RJTV9DVFJMCQkJMHgxNDI4CisjZGVmaW5lCVZERUNfQ19GSUVMRF9DT1VOVAkJCQkweDE0MkMKKyNkZWZpbmUJVkRFQ19DX0hTQ0FMRV9DVFJMCQkJCTB4MTQzMAorI2RlZmluZQlWREVDX0NfVlNDQUxFX0NUUkwJCQkJMHgxNDM0CisjZGVmaW5lCVZERUNfQ19NQU5fVkdBX0NUUkwJCQkJMHgxNDM4CisjZGVmaW5lCVZERUNfQ19NQU5fQUdDX0NUUkwJCQkJMHgxNDNDCisjZGVmaW5lCVZERUNfQ19ERkVfQ1RSTDEJCQkJMHgxNDQwCisjZGVmaW5lCVZERUNfQ19ERkVfQ1RSTDIJCQkJMHgxNDQ0CisjZGVmaW5lCVZERUNfQ19ERkVfQ1RSTDMJCQkJMHgxNDQ4CisjZGVmaW5lCVZERUNfQ19QTExfQ1RSTAkJCQkJMHgxNDRDCisjZGVmaW5lCVZERUNfQ19QTExfQ1RSTF9GQVNUCQkJMHgxNDUwCisjZGVmaW5lCVZERUNfQ19IVExfQ1RSTAkJCQkJMHgxNDU0CisjZGVmaW5lCVZERUNfQ19TUkNfQ0ZHCQkJCQkweDE0NTgKKyNkZWZpbmUJVkRFQ19DX1NDX1NURVBfU0laRQkJCQkweDE0NUMKKyNkZWZpbmUJVkRFQ19DX1NDX0NPTlZFUkdFX0NUUkwJCQkweDE0NjAKKyNkZWZpbmUJVkRFQ19DX1NDX0xPT1BfQ1RSTAkJCQkweDE0NjQKKyNkZWZpbmUJVkRFQ19DX0NPTUJfMkRfSEZTX0NGRwkJCTB4MTQ2OAorI2RlZmluZQlWREVDX0NfQ09NQl8yRF9IRkRfQ0ZHCQkJMHgxNDZDCisjZGVmaW5lCVZERUNfQ19DT01CXzJEX0xGX0NGRwkJCTB4MTQ3MAorI2RlZmluZQlWREVDX0NfQ09NQl8yRF9CTEVORAkJCTB4MTQ3NAorI2RlZmluZQlWREVDX0NfQ09NQl9NSVNDX0NUUkwJCQkweDE0NzgKKyNkZWZpbmUJVkRFQ19DX0NPTUJfRkxBVF9USFJFU0hfQ1RSTAkweDE0N0MKKyNkZWZpbmUJVkRFQ19DX0NPTUJfVEVTVAkJCQkweDE0ODAKKyNkZWZpbmUJVkRFQ19DX0JQX01JU0NfQ1RSTAkJCQkweDE0ODQKKyNkZWZpbmUJVkRFQ19DX1ZDUl9ERVRfQ1RSTAkJCQkweDE0ODgKKyNkZWZpbmUJVkRFQ19DX05PSVNFX0RFVF9DVFJMCQkJMHgxNDhDCisjZGVmaW5lCVZERUNfQ19DT01CX0ZMQVRfTk9JU0VfQ1RSTAkJMHgxNDkwCisjZGVmaW5lCVZERUNfQ19WRVJTSU9OCQkJCQkweDE1RjgKKyNkZWZpbmUJVkRFQ19DX1NPRlRfUlNUX0NUUkwJCQkweDE1RkMKKworLy8gVmlkZW8gRGVjb2RlciBEIFJlZ2lzdGVycworI2RlZmluZSBWREVDX0RfTU9ERV9DVFJMCQkJCTB4MTYwMAorI2RlZmluZSBWREVDX0RfT1VUX0NUUkwxCQkJCTB4MTYwNAorI2RlZmluZSBWREVDX0RfT1VUX0NUUkxfTlMJCQkJMHgxNjA4CisjZGVmaW5lIFZERUNfRF9HRU5fU1RBVAkJCQkJMHgxNjBDCisjZGVmaW5lIFZERUNfRF9JTlRfU1RBVF9NQVNLCQkJMHgxNjEwCisjZGVmaW5lIFZERUNfRF9MVU1BX0NUUkwJCQkJMHgxNjE0CisjZGVmaW5lIFZERUNfRF9DSFJPTUFfQ1RSTAkJCQkweDE2MTgKKyNkZWZpbmUgVkRFQ19EX0NSVVNIX0NUUkwJCQkJMHgxNjFDCisjZGVmaW5lIFZERUNfRF9IT1JJWl9USU1fQ1RSTAkJCTB4MTYyMAorI2RlZmluZSBWREVDX0RfVkVSVF9USU1fQ1RSTAkJCTB4MTYyNAorI2RlZmluZSBWREVDX0RfTUlTQ19USU1fQ1RSTAkJCTB4MTYyOAorI2RlZmluZSBWREVDX0RfRklFTERfQ09VTlQJCQkJMHgxNjJDCisjZGVmaW5lIFZERUNfRF9IU0NBTEVfQ1RSTAkJCQkweDE2MzAKKyNkZWZpbmUgVkRFQ19EX1ZTQ0FMRV9DVFJMCQkJCTB4MTYzNAorI2RlZmluZSBWREVDX0RfTUFOX1ZHQV9DVFJMCQkJCTB4MTYzOAorI2RlZmluZSBWREVDX0RfTUFOX0FHQ19DVFJMCQkJCTB4MTYzQworI2RlZmluZSBWREVDX0RfREZFX0NUUkwxCQkJCTB4MTY0MAorI2RlZmluZSBWREVDX0RfREZFX0NUUkwyCQkJCTB4MTY0NAorI2RlZmluZSBWREVDX0RfREZFX0NUUkwzCQkJCTB4MTY0OAorI2RlZmluZSBWREVDX0RfUExMX0NUUkwJCQkJCTB4MTY0QworI2RlZmluZSBWREVDX0RfUExMX0NUUkxfRkFTVAkJCTB4MTY1MAorI2RlZmluZSBWREVDX0RfSFRMX0NUUkwJCQkJCTB4MTY1NAorI2RlZmluZSBWREVDX0RfU1JDX0NGRwkJCQkJMHgxNjU4CisjZGVmaW5lIFZERUNfRF9TQ19TVEVQX1NJWkUJCQkJMHgxNjVDCisjZGVmaW5lIFZERUNfRF9TQ19DT05WRVJHRV9DVFJMCQkJMHgxNjYwCisjZGVmaW5lIFZERUNfRF9TQ19MT09QX0NUUkwJCQkJMHgxNjY0CisjZGVmaW5lIFZERUNfRF9DT01CXzJEX0hGU19DRkcJCQkweDE2NjgKKyNkZWZpbmUgVkRFQ19EX0NPTUJfMkRfSEZEX0NGRwkJCTB4MTY2QworI2RlZmluZSBWREVDX0RfQ09NQl8yRF9MRl9DRkcJCQkweDE2NzAKKyNkZWZpbmUgVkRFQ19EX0NPTUJfMkRfQkxFTkQJCQkweDE2NzQKKyNkZWZpbmUgVkRFQ19EX0NPTUJfTUlTQ19DVFJMCQkJMHgxNjc4CisjZGVmaW5lIFZERUNfRF9DT01CX0ZMQVRfVEhSRVNIX0NUUkwJMHgxNjdDCisjZGVmaW5lIFZERUNfRF9DT01CX1RFU1QJCQkJMHgxNjgwCisjZGVmaW5lIFZERUNfRF9CUF9NSVNDX0NUUkwJCQkJMHgxNjg0CisjZGVmaW5lIFZERUNfRF9WQ1JfREVUX0NUUkwJCQkJMHgxNjg4CisjZGVmaW5lIFZERUNfRF9OT0lTRV9ERVRfQ1RSTAkJCTB4MTY4QworI2RlZmluZSBWREVDX0RfQ09NQl9GTEFUX05PSVNFX0NUUkwJCTB4MTY5MAorI2RlZmluZSBWREVDX0RfVkVSU0lPTgkJCQkJMHgxN0Y4CisjZGVmaW5lIFZERUNfRF9TT0ZUX1JTVF9DVFJMCQkJMHgxN0ZDCisKKy8vIFZpZGVvIERlY29kZXIgRSBSZWdpc3RlcnMKKyNkZWZpbmUJVkRFQ19FX01PREVfQ1RSTAkJCQkweDE4MDAKKyNkZWZpbmUJVkRFQ19FX09VVF9DVFJMMQkJCQkweDE4MDQKKyNkZWZpbmUJVkRFQ19FX09VVF9DVFJMX05TCQkJCTB4MTgwOAorI2RlZmluZQlWREVDX0VfR0VOX1NUQVQJCQkJCTB4MTgwQworI2RlZmluZQlWREVDX0VfSU5UX1NUQVRfTUFTSwkJCTB4MTgxMAorI2RlZmluZQlWREVDX0VfTFVNQV9DVFJMCQkJCTB4MTgxNAorI2RlZmluZQlWREVDX0VfQ0hST01BX0NUUkwJCQkJMHgxODE4CisjZGVmaW5lCVZERUNfRV9DUlVTSF9DVFJMCQkJCTB4MTgxQworI2RlZmluZQlWREVDX0VfSE9SSVpfVElNX0NUUkwJCQkweDE4MjAKKyNkZWZpbmUJVkRFQ19FX1ZFUlRfVElNX0NUUkwJCQkweDE4MjQKKyNkZWZpbmUJVkRFQ19FX01JU0NfVElNX0NUUkwJCQkweDE4MjgKKyNkZWZpbmUJVkRFQ19FX0ZJRUxEX0NPVU5UCQkJCTB4MTgyQworI2RlZmluZQlWREVDX0VfSFNDQUxFX0NUUkwJCQkJMHgxODMwCisjZGVmaW5lCVZERUNfRV9WU0NBTEVfQ1RSTAkJCQkweDE4MzQKKyNkZWZpbmUJVkRFQ19FX01BTl9WR0FfQ1RSTAkJCQkweDE4MzgKKyNkZWZpbmUJVkRFQ19FX01BTl9BR0NfQ1RSTAkJCQkweDE4M0MKKyNkZWZpbmUJVkRFQ19FX0RGRV9DVFJMMQkJCQkweDE4NDAKKyNkZWZpbmUJVkRFQ19FX0RGRV9DVFJMMgkJCQkweDE4NDQKKyNkZWZpbmUJVkRFQ19FX0RGRV9DVFJMMwkJCQkweDE4NDgKKyNkZWZpbmUJVkRFQ19FX1BMTF9DVFJMCQkJCQkweDE4NEMKKyNkZWZpbmUJVkRFQ19FX1BMTF9DVFJMX0ZBU1QJCQkweDE4NTAKKyNkZWZpbmUJVkRFQ19FX0hUTF9DVFJMCQkJCQkweDE4NTQKKyNkZWZpbmUJVkRFQ19FX1NSQ19DRkcJCQkJCTB4MTg1OAorI2RlZmluZQlWREVDX0VfU0NfU1RFUF9TSVpFCQkJCTB4MTg1QworI2RlZmluZQlWREVDX0VfU0NfQ09OVkVSR0VfQ1RSTAkJCTB4MTg2MAorI2RlZmluZQlWREVDX0VfU0NfTE9PUF9DVFJMCQkJCTB4MTg2NAorI2RlZmluZQlWREVDX0VfQ09NQl8yRF9IRlNfQ0ZHCQkJMHgxODY4CisjZGVmaW5lCVZERUNfRV9DT01CXzJEX0hGRF9DRkcJCQkweDE4NkMKKyNkZWZpbmUJVkRFQ19FX0NPTUJfMkRfTEZfQ0ZHCQkJMHgxODcwCisjZGVmaW5lCVZERUNfRV9DT01CXzJEX0JMRU5ECQkJMHgxODc0CisjZGVmaW5lCVZERUNfRV9DT01CX01JU0NfQ1RSTAkJCTB4MTg3OAorI2RlZmluZQlWREVDX0VfQ09NQl9GTEFUX1RIUkVTSF9DVFJMCTB4MTg3QworI2RlZmluZQlWREVDX0VfQ09NQl9URVNUCQkJCTB4MTg4MAorI2RlZmluZQlWREVDX0VfQlBfTUlTQ19DVFJMCQkJCTB4MTg4NAorI2RlZmluZQlWREVDX0VfVkNSX0RFVF9DVFJMCQkJCTB4MTg4OAorI2RlZmluZQlWREVDX0VfTk9JU0VfREVUX0NUUkwJCQkweDE4OEMKKyNkZWZpbmUJVkRFQ19FX0NPTUJfRkxBVF9OT0lTRV9DVFJMCQkweDE4OTAKKyNkZWZpbmUJVkRFQ19FX1ZFUlNJT04JCQkJCTB4MTlGOAorI2RlZmluZQlWREVDX0VfU09GVF9SU1RfQ1RSTAkJCTB4MTlGQworCisvLyBWaWRlbyBEZWNvZGVyIEYgUmVnaXN0ZXJzCisjZGVmaW5lCVZERUNfRl9NT0RFX0NUUkwJCQkJMHgxQTAwCisjZGVmaW5lCVZERUNfRl9PVVRfQ1RSTDEJCQkJMHgxQTA0CisjZGVmaW5lCVZERUNfRl9PVVRfQ1RSTF9OUwkJCQkweDFBMDgKKyNkZWZpbmUJVkRFQ19GX0dFTl9TVEFUCQkJCQkweDFBMEMKKyNkZWZpbmUJVkRFQ19GX0lOVF9TVEFUX01BU0sJCQkweDFBMTAKKyNkZWZpbmUJVkRFQ19GX0xVTUFfQ1RSTAkJCQkweDFBMTQKKyNkZWZpbmUJVkRFQ19GX0NIUk9NQV9DVFJMCQkJCTB4MUExOAorI2RlZmluZQlWREVDX0ZfQ1JVU0hfQ1RSTAkJCQkweDFBMUMKKyNkZWZpbmUJVkRFQ19GX0hPUklaX1RJTV9DVFJMCQkJMHgxQTIwCisjZGVmaW5lCVZERUNfRl9WRVJUX1RJTV9DVFJMCQkJMHgxQTI0CisjZGVmaW5lCVZERUNfRl9NSVNDX1RJTV9DVFJMCQkJMHgxQTI4CisjZGVmaW5lCVZERUNfRl9GSUVMRF9DT1VOVAkJCQkweDFBMkMKKyNkZWZpbmUJVkRFQ19GX0hTQ0FMRV9DVFJMCQkJCTB4MUEzMAorI2RlZmluZQlWREVDX0ZfVlNDQUxFX0NUUkwJCQkJMHgxQTM0CisjZGVmaW5lCVZERUNfRl9NQU5fVkdBX0NUUkwJCQkJMHgxQTM4CisjZGVmaW5lCVZERUNfRl9NQU5fQUdDX0NUUkwJCQkJMHgxQTNDCisjZGVmaW5lCVZERUNfRl9ERkVfQ1RSTDEJCQkJMHgxQTQwCisjZGVmaW5lCVZERUNfRl9ERkVfQ1RSTDIJCQkJMHgxQTQ0CisjZGVmaW5lCVZERUNfRl9ERkVfQ1RSTDMJCQkJMHgxQTQ4CisjZGVmaW5lCVZERUNfRl9QTExfQ1RSTAkJCQkJMHgxQTRDCisjZGVmaW5lCVZERUNfRl9QTExfQ1RSTF9GQVNUCQkJMHgxQTUwCisjZGVmaW5lCVZERUNfRl9IVExfQ1RSTAkJCQkJMHgxQTU0CisjZGVmaW5lCVZERUNfRl9TUkNfQ0ZHCQkJCQkweDFBNTgKKyNkZWZpbmUJVkRFQ19GX1NDX1NURVBfU0laRQkJCQkweDFBNUMKKyNkZWZpbmUJVkRFQ19GX1NDX0NPTlZFUkdFX0NUUkwJCQkweDFBNjAKKyNkZWZpbmUJVkRFQ19GX1NDX0xPT1BfQ1RSTAkJCQkweDFBNjQKKyNkZWZpbmUJVkRFQ19GX0NPTUJfMkRfSEZTX0NGRwkJCTB4MUE2OAorI2RlZmluZQlWREVDX0ZfQ09NQl8yRF9IRkRfQ0ZHCQkJMHgxQTZDCisjZGVmaW5lCVZERUNfRl9DT01CXzJEX0xGX0NGRwkJCTB4MUE3MAorI2RlZmluZQlWREVDX0ZfQ09NQl8yRF9CTEVORAkJCTB4MUE3NAorI2RlZmluZQlWREVDX0ZfQ09NQl9NSVNDX0NUUkwJCQkweDFBNzgKKyNkZWZpbmUJVkRFQ19GX0NPTUJfRkxBVF9USFJFU0hfQ1RSTAkweDFBN0MKKyNkZWZpbmUJVkRFQ19GX0NPTUJfVEVTVAkJCQkweDFBODAKKyNkZWZpbmUJVkRFQ19GX0JQX01JU0NfQ1RSTAkJCQkweDFBODQKKyNkZWZpbmUJVkRFQ19GX1ZDUl9ERVRfQ1RSTAkJCQkweDFBODgKKyNkZWZpbmUJVkRFQ19GX05PSVNFX0RFVF9DVFJMCQkJMHgxQThDCisjZGVmaW5lCVZERUNfRl9DT01CX0ZMQVRfTk9JU0VfQ1RSTAkJMHgxQTkwCisjZGVmaW5lCVZERUNfRl9WRVJTSU9OCQkJCQkweDFCRjgKKyNkZWZpbmUJVkRFQ19GX1NPRlRfUlNUX0NUUkwJCQkweDFCRkMKKworLy8gVmlkZW8gRGVjb2RlciBHIFJlZ2lzdGVycworI2RlZmluZQlWREVDX0dfTU9ERV9DVFJMCQkJCTB4MUMwMAorI2RlZmluZQlWREVDX0dfT1VUX0NUUkwxCQkJCTB4MUMwNAorI2RlZmluZQlWREVDX0dfT1VUX0NUUkxfTlMJCQkJMHgxQzA4CisjZGVmaW5lCVZERUNfR19HRU5fU1RBVAkJCQkJMHgxQzBDCisjZGVmaW5lCVZERUNfR19JTlRfU1RBVF9NQVNLCQkJMHgxQzEwCisjZGVmaW5lCVZERUNfR19MVU1BX0NUUkwJCQkJMHgxQzE0CisjZGVmaW5lCVZERUNfR19DSFJPTUFfQ1RSTAkJCQkweDFDMTgKKyNkZWZpbmUJVkRFQ19HX0NSVVNIX0NUUkwJCQkJMHgxQzFDCisjZGVmaW5lCVZERUNfR19IT1JJWl9USU1fQ1RSTAkJCTB4MUMyMAorI2RlZmluZQlWREVDX0dfVkVSVF9USU1fQ1RSTAkJCTB4MUMyNAorI2RlZmluZQlWREVDX0dfTUlTQ19USU1fQ1RSTAkJCTB4MUMyOAorI2RlZmluZQlWREVDX0dfRklFTERfQ09VTlQJCQkJMHgxQzJDCisjZGVmaW5lCVZERUNfR19IU0NBTEVfQ1RSTAkJCQkweDFDMzAKKyNkZWZpbmUJVkRFQ19HX1ZTQ0FMRV9DVFJMCQkJCTB4MUMzNAorI2RlZmluZQlWREVDX0dfTUFOX1ZHQV9DVFJMCQkJCTB4MUMzOAorI2RlZmluZQlWREVDX0dfTUFOX0FHQ19DVFJMCQkJCTB4MUMzQworI2RlZmluZQlWREVDX0dfREZFX0NUUkwxCQkJCTB4MUM0MAorI2RlZmluZQlWREVDX0dfREZFX0NUUkwyCQkJCTB4MUM0NAorI2RlZmluZQlWREVDX0dfREZFX0NUUkwzCQkJCTB4MUM0OAorI2RlZmluZQlWREVDX0dfUExMX0NUUkwJCQkJCTB4MUM0QworI2RlZmluZQlWREVDX0dfUExMX0NUUkxfRkFTVAkJCTB4MUM1MAorI2RlZmluZQlWREVDX0dfSFRMX0NUUkwJCQkJCTB4MUM1NAorI2RlZmluZQlWREVDX0dfU1JDX0NGRwkJCQkJMHgxQzU4CisjZGVmaW5lCVZERUNfR19TQ19TVEVQX1NJWkUJCQkJMHgxQzVDCisjZGVmaW5lCVZERUNfR19TQ19DT05WRVJHRV9DVFJMCQkJMHgxQzYwCisjZGVmaW5lCVZERUNfR19TQ19MT09QX0NUUkwJCQkJMHgxQzY0CisjZGVmaW5lCVZERUNfR19DT01CXzJEX0hGU19DRkcJCQkweDFDNjgKKyNkZWZpbmUJVkRFQ19HX0NPTUJfMkRfSEZEX0NGRwkJCTB4MUM2QworI2RlZmluZQlWREVDX0dfQ09NQl8yRF9MRl9DRkcJCQkweDFDNzAKKyNkZWZpbmUJVkRFQ19HX0NPTUJfMkRfQkxFTkQJCQkweDFDNzQKKyNkZWZpbmUJVkRFQ19HX0NPTUJfTUlTQ19DVFJMCQkJMHgxQzc4CisjZGVmaW5lCVZERUNfR19DT01CX0ZMQVRfVEhSRVNIX0NUUkwJMHgxQzdDCisjZGVmaW5lCVZERUNfR19DT01CX1RFU1QJCQkJMHgxQzgwCisjZGVmaW5lCVZERUNfR19CUF9NSVNDX0NUUkwJCQkJMHgxQzg0CisjZGVmaW5lCVZERUNfR19WQ1JfREVUX0NUUkwJCQkJMHgxQzg4CisjZGVmaW5lCVZERUNfR19OT0lTRV9ERVRfQ1RSTAkJCTB4MUM4QworI2RlZmluZQlWREVDX0dfQ09NQl9GTEFUX05PSVNFX0NUUkwJCTB4MUM5MAorI2RlZmluZQlWREVDX0dfVkVSU0lPTgkJCQkJMHgxREY4CisjZGVmaW5lCVZERUNfR19TT0ZUX1JTVF9DVFJMCQkJMHgxREZDCisKKy8vICAgICAgICAgICAgICBWaWRlbyBEZWNvZGVyIEggUmVnaXN0ZXJzCisjZGVmaW5lCVZERUNfSF9NT0RFX0NUUkwJCQkJMHgxRTAwCisjZGVmaW5lCVZERUNfSF9PVVRfQ1RSTDEJCQkJMHgxRTA0CisjZGVmaW5lCVZERUNfSF9PVVRfQ1RSTF9OUwkJCQkweDFFMDgKKyNkZWZpbmUJVkRFQ19IX0dFTl9TVEFUCQkJCQkweDFFMEMKKyNkZWZpbmUJVkRFQ19IX0lOVF9TVEFUX01BU0sJCQkweDFFMUUKKyNkZWZpbmUJVkRFQ19IX0xVTUFfQ1RSTAkJCQkweDFFMTQKKyNkZWZpbmUJVkRFQ19IX0NIUk9NQV9DVFJMCQkJCTB4MUUxOAorI2RlZmluZQlWREVDX0hfQ1JVU0hfQ1RSTAkJCQkweDFFMUMKKyNkZWZpbmUJVkRFQ19IX0hPUklaX1RJTV9DVFJMCQkJMHgxRTIwCisjZGVmaW5lCVZERUNfSF9WRVJUX1RJTV9DVFJMCQkJMHgxRTI0CisjZGVmaW5lCVZERUNfSF9NSVNDX1RJTV9DVFJMCQkJMHgxRTI4CisjZGVmaW5lCVZERUNfSF9GSUVMRF9DT1VOVAkJCQkweDFFMkMKKyNkZWZpbmUJVkRFQ19IX0hTQ0FMRV9DVFJMCQkJCTB4MUUzMAorI2RlZmluZQlWREVDX0hfVlNDQUxFX0NUUkwJCQkJMHgxRTM0CisjZGVmaW5lCVZERUNfSF9NQU5fVkdBX0NUUkwJCQkJMHgxRTM4CisjZGVmaW5lCVZERUNfSF9NQU5fQUdDX0NUUkwJCQkJMHgxRTNDCisjZGVmaW5lCVZERUNfSF9ERkVfQ1RSTDEJCQkJMHgxRTQwCisjZGVmaW5lCVZERUNfSF9ERkVfQ1RSTDIJCQkJMHgxRTQ0CisjZGVmaW5lCVZERUNfSF9ERkVfQ1RSTDMJCQkJMHgxRTQ4CisjZGVmaW5lCVZERUNfSF9QTExfQ1RSTAkJCQkJMHgxRTRDCisjZGVmaW5lCVZERUNfSF9QTExfQ1RSTF9GQVNUCQkJMHgxRTUwCisjZGVmaW5lCVZERUNfSF9IVExfQ1RSTAkJCQkJMHgxRTU0CisjZGVmaW5lCVZERUNfSF9TUkNfQ0ZHCQkJCQkweDFFNTgKKyNkZWZpbmUJVkRFQ19IX1NDX1NURVBfU0laRQkJCQkweDFFNUMKKyNkZWZpbmUJVkRFQ19IX1NDX0NPTlZFUkdFX0NUUkwJCQkweDFFNjAKKyNkZWZpbmUJVkRFQ19IX1NDX0xPT1BfQ1RSTAkJCQkweDFFNjQKKyNkZWZpbmUJVkRFQ19IX0NPTUJfMkRfSEZTX0NGRwkJCTB4MUU2OAorI2RlZmluZQlWREVDX0hfQ09NQl8yRF9IRkRfQ0ZHCQkJMHgxRTZDCisjZGVmaW5lCVZERUNfSF9DT01CXzJEX0xGX0NGRwkJCTB4MUU3MAorI2RlZmluZQlWREVDX0hfQ09NQl8yRF9CTEVORAkJCTB4MUU3NAorI2RlZmluZQlWREVDX0hfQ09NQl9NSVNDX0NUUkwJCQkweDFFNzgKKyNkZWZpbmUJVkRFQ19IX0NPTUJfRkxBVF9USFJFU0hfQ1RSTAkweDFFN0MKKyNkZWZpbmUJVkRFQ19IX0NPTUJfVEVTVAkJCQkweDFFODAKKyNkZWZpbmUJVkRFQ19IX0JQX01JU0NfQ1RSTAkJCQkweDFFODQKKyNkZWZpbmUJVkRFQ19IX1ZDUl9ERVRfQ1RSTAkJCQkweDFFODgKKyNkZWZpbmUJVkRFQ19IX05PSVNFX0RFVF9DVFJMCQkJMHgxRThDCisjZGVmaW5lCVZERUNfSF9DT01CX0ZMQVRfTk9JU0VfQ1RSTAkJMHgxRTkwCisjZGVmaW5lCVZERUNfSF9WRVJTSU9OCQkJCQkweDFGRjgKKyNkZWZpbmUJVkRFQ19IX1NPRlRfUlNUX0NUUkwJCQkweDFGRkMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTFVNQV9DVFJMIHJlZ2lzdGVyIGZpZWxkcworI2RlZmluZSBWREVDX0FfQlJJVEVfQ1RSTAkJCQkweDEwMTQKKyNkZWZpbmUgVkRFQ19BX0NOVFJTVF9DVFJMICAgICAgIAkJMHgxMDE1CisjZGVmaW5lIFZERUNfQV9QRUFLX1NFTCAgICAgICAgICAJCTB4MTAxNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDSFJPTUFfQ1RSTCByZWdpc3RlciBmaWVsZHMKKyNkZWZpbmUgVkRFQ19BX1VTQVRfQ1RSTCAgICAgICAgIAkJMHgxMDE4CisjZGVmaW5lIFZERUNfQV9WU0FUX0NUUkwgICAgICAgICAJCTB4MTAxOQorI2RlZmluZSBWREVDX0FfSFVFX0NUUkwgICAgICAgICAgCQkweDEwMUEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGRmODEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYwpAQCAtMCwwICsxLDg2OSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEuaCIKKyNpbmNsdWRlICJjeDI1ODIxLW1lZHVzYS12aWRlby5oIgorI2luY2x1ZGUgImN4MjU4MjEtYmlmZnVuY3MuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vbWVkdXNhX2VuYWJsZV9ibHVlZmllbGRfb3V0cHV0KCkKKy8vCisvLyBFbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgYmx1ZSBmaWxlZCBvdXRwdXQgaWYgbm8gdmlkZW8KKy8vCitzdGF0aWMgdm9pZCBtZWR1c2FfZW5hYmxlX2JsdWVmaWVsZF9vdXRwdXQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFubmVsLAorCQkJCQkgICBpbnQgZW5hYmxlKQoreworCWludCByZXRfdmFsID0gMTsKKwl1MzIgdmFsdWUgPSAwOworCXUzMiB0bXAgPSAwOworCWludCBvdXRfY3RybCA9IE9VVF9DVFJMMTsKKwlpbnQgb3V0X2N0cmxfbnMgPSBPVVRfQ1RSTF9OUzsKKworCXN3aXRjaCAoY2hhbm5lbCkgeworCWRlZmF1bHQ6CisJY2FzZSBWREVDX0E6CisJCWJyZWFrOworCWNhc2UgVkRFQ19COgorCQlvdXRfY3RybCA9IFZERUNfQl9PVVRfQ1RSTDE7CisJCW91dF9jdHJsX25zID0gVkRFQ19CX09VVF9DVFJMX05TOworCQlicmVhazsKKwljYXNlIFZERUNfQzoKKwkJb3V0X2N0cmwgPSBWREVDX0NfT1VUX0NUUkwxOworCQlvdXRfY3RybF9ucyA9IFZERUNfQ19PVVRfQ1RSTF9OUzsKKwkJYnJlYWs7CisJY2FzZSBWREVDX0Q6CisJCW91dF9jdHJsID0gVkRFQ19EX09VVF9DVFJMMTsKKwkJb3V0X2N0cmxfbnMgPSBWREVDX0RfT1VUX0NUUkxfTlM7CisJCWJyZWFrOworCWNhc2UgVkRFQ19FOgorCQlvdXRfY3RybCA9IFZERUNfRV9PVVRfQ1RSTDE7CisJCW91dF9jdHJsX25zID0gVkRFQ19FX09VVF9DVFJMX05TOworCQlyZXR1cm47CisJY2FzZSBWREVDX0Y6CisJCW91dF9jdHJsID0gVkRFQ19GX09VVF9DVFJMMTsKKwkJb3V0X2N0cmxfbnMgPSBWREVDX0ZfT1VUX0NUUkxfTlM7CisJCXJldHVybjsKKwljYXNlIFZERUNfRzoKKwkJb3V0X2N0cmwgPSBWREVDX0dfT1VUX0NUUkwxOworCQlvdXRfY3RybF9ucyA9IFZERUNfR19PVVRfQ1RSTF9OUzsKKwkJcmV0dXJuOworCWNhc2UgVkRFQ19IOgorCQlvdXRfY3RybCA9IFZERUNfSF9PVVRfQ1RSTDE7CisJCW91dF9jdHJsX25zID0gVkRFQ19IX09VVF9DVFJMX05TOworCQlyZXR1cm47CisJfQorCisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIG91dF9jdHJsLCAmdG1wKTsKKwl2YWx1ZSAmPSAweEZGRkZGRjdGOwkvLyBjbGVhciBCTFVFX0ZJRUxEX0VOCisJaWYgKGVuYWJsZSkKKwkJdmFsdWUgfD0gMHgwMDAwMDA4MDsJLy8gc2V0IEJMVUVfRklFTERfRU4KKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgb3V0X2N0cmwsIHZhbHVlKTsKKworCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBvdXRfY3RybF9ucywgJnRtcCk7CisJdmFsdWUgJj0gMHhGRkZGRkY3RjsKKwlpZiAoZW5hYmxlKQorCQl2YWx1ZSB8PSAweDAwMDAwMDgwOwkvLyBzZXQgQkxVRV9GSUVMRF9FTgorCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBvdXRfY3RybF9ucywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IG1lZHVzYV9pbml0aWFsaXplX250c2Moc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaW50IHJldF92YWwgPSAwOworCWludCBpID0gMDsKKwl1MzIgdmFsdWUgPSAwOworCXUzMiB0bXAgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfREVDT0RFUlM7IGkrKykgeworCQkvLyBzZXQgdmlkZW8gZm9ybWF0IE5UU0MtTQorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIE1PREVfQ1RSTCArICgweDIwMCAqIGkpLAorCQkJCSAgICAgJnRtcCk7CisJCXZhbHVlICY9IDB4RkZGRkZGRjA7CisJCXZhbHVlIHw9IDB4MTAwMDE7CS8vIGVuYWJsZSB0aGUgZmFzdCBsb2NraW5nIG1vZGUgYml0WzE2XQorCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIE1PREVfQ1RSTCArICgweDIwMCAqIGkpLAorCQkJCSAgICAgIHZhbHVlKTsKKworCQkvLyByZXNvbHV0aW9uIE5UU0MgNzIweDQ4MAorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBIT1JJWl9USU1fQ1RSTCArICgweDIwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHgwMEMwMEMwMDsKKwkJdmFsdWUgfD0gMHg2MTJEMDA3NDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIEhPUklaX1RJTV9DVFJMICsgKDB4MjAwICogaSksIHZhbHVlKTsKKworCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBWRVJUX1RJTV9DVFJMICsgKDB4MjAwICogaSksICZ0bXApOworCQl2YWx1ZSAmPSAweDAwQzAwQzAwOworCQl2YWx1ZSB8PSAweDFDMUUwMDFBOwkvLyB2YmxhbmtfY250ICsgMiB0byBnZXQgY2FtZXJhIElECisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBWRVJUX1RJTV9DVFJMICsgKDB4MjAwICogaSksIHZhbHVlKTsKKworCQkvLyBjaHJvbWEgc3ViY2FycmllciBzdGVwIHNpemUKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIFNDX1NURVBfU0laRSArICgweDIwMCAqIGkpLCAweDQzRTAwMDAwKTsKKworCQkvLyBlbmFibGUgVklQIG9wdGlvbmFsIGFjdGl2ZQorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBPVVRfQ1RSTF9OUyArICgweDIwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGRkZCRkZGRjsKKwkJdmFsdWUgfD0gMHgwMDA0MDAwMDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIE9VVF9DVFJMX05TICsgKDB4MjAwICogaSksIHZhbHVlKTsKKworCQkvLyBlbmFibGUgVklQIG9wdGlvbmFsIGFjdGl2ZSAoVklQX09QVF9BTCkgZm9yIGRpcmVjdCBvdXRwdXQuCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgT1VUX0NUUkwxICsgKDB4MjAwICogaSksCisJCQkJICAgICAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGRkZCRkZGRjsKKwkJdmFsdWUgfD0gMHgwMDA0MDAwMDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBPVVRfQ1RSTDEgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICB2YWx1ZSk7CisKKwkJLy8gY2xlYXIgVlBSRVNfVkVSVF9FTiBiaXQsIGZpeGVzIHRoZSBjaHJvbWEgcnVuIGF3YXkgcHJvYmxlbQorCQkvLyB3aGVuIHRoZSBpbnB1dCBzd2l0Y2hpbmcgcmF0ZSA8IDE2IGZpZWxkcworCQkvLworCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBNSVNDX1RJTV9DVFJMICsgKDB4MjAwICogaSksICZ0bXApOworCQl2YWx1ZSA9IHNldEJpdEF0UG9zKHZhbHVlLCAxNCk7CS8vIGRpc2FibGUgc3BlY2lhbCBwbGF5IGRldGVjdGlvbgorCQl2YWx1ZSA9IGNsZWFyQml0QXRQb3ModmFsdWUsIDE1KTsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIE1JU0NfVElNX0NUUkwgKyAoMHgyMDAgKiBpKSwgdmFsdWUpOworCisJCS8vIHNldCB2YmlfZ2F0ZV9lbiB0byAwCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgREZFX0NUUkwxICsgKDB4MjAwICogaSksCisJCQkJICAgICAmdG1wKTsKKwkJdmFsdWUgPSBjbGVhckJpdEF0UG9zKHZhbHVlLCAyOSk7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgREZFX0NUUkwxICsgKDB4MjAwICogaSksCisJCQkJICAgICAgdmFsdWUpOworCisJCS8vIEVuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBibHVlIGZpZWxkIG91dHB1dCBpZiBubyB2aWRlbworCQltZWR1c2FfZW5hYmxlX2JsdWVmaWVsZF9vdXRwdXQoZGV2LCBpLCAxKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VOQ09ERVJTOyBpKyspIHsKKwkJLy8gTlRTQyBoY2xvY2sKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgREVOQ19BX1JFR18xICsgKDB4MTAwICogaSksICZ0bXApOworCQl2YWx1ZSAmPSAweEYwMDBGQzAwOworCQl2YWx1ZSB8PSAweDA2QjQwMkQwOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR18xICsgKDB4MTAwICogaSksIHZhbHVlKTsKKworCQkvLyBidXJzdCBiZWdpbiBhbmQgYnVyc3QgZW5kCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfMiArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGRjAwMDAwMDsKKwkJdmFsdWUgfD0gMHgwMDdFOTA1NDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfMiArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgREVOQ19BX1JFR18zICsgKDB4MTAwICogaSksICZ0bXApOworCQl2YWx1ZSAmPSAweEZDMDBGRTAwOworCQl2YWx1ZSB8PSAweDAwRUMwMEYwOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR18zICsgKDB4MTAwICogaSksIHZhbHVlKTsKKworCQkvLyBzZXQgTlRTQyB2YmxhbmssIG5vIHBoYXNlIGFsdGVybmF0aW9uLCA3LjUgSVJFIHBlZGVzdGFsCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfNCArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHgwMEZDRkZGRjsKKwkJdmFsdWUgfD0gMHgxMzAyMDAwMDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfNCArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgREVOQ19BX1JFR181ICsgKDB4MTAwICogaSksICZ0bXApOworCQl2YWx1ZSAmPSAweEZGRkYwMDAwOworCQl2YWx1ZSB8PSAweDAwMDBFNTc1OworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR181ICsgKDB4MTAwICogaSksIHZhbHVlKTsKKworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR182ICsgKDB4MTAwICogaSksIDB4MDA5QTg5QzEpOworCisJCS8vIFN1YmNhcnJpZXIgSW5jcmVtZW50CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzcgKyAoMHgxMDAgKiBpKSwgMHgyMUYwN0MxRik7CisJfQorCisJLy9zZXQgcGljdHVyZSByZXNvbHV0aW9ucworCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBIU0NBTEVfQ1RSTCwgMHgwKTsJLy8wIC0gNzIwCisJcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIFZTQ0FMRV9DVFJMLCAweDApOwkvLzAgLSA0ODAKKworCS8vIHNldCBCeXBhc3MgaW5wdXQgZm9ybWF0IHRvIE5UU0MgNTI1IGxpbmVzCisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIEJZUF9BQl9DVFJMLCAmdG1wKTsKKwl2YWx1ZSB8PSAweDAwMDgwMjAwOworCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBCWVBfQUJfQ1RSTCwgdmFsdWUpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgbWVkdXNhX1BBTENvbWJJbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgZGVjKQoreworCWludCByZXRfdmFsID0gLTE7CisJdTMyIHZhbHVlID0gMCwgdG1wID0gMDsKKworCS8vIFNldHVwIGZvciAyRCB0aHJlc2hvbGQKKwlyZXRfdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQ09NQl8yRF9IRlNfQ0ZHICsgKDB4MjAwICogZGVjKSwKKwkJCSAgICAgIDB4MjAwMDI4NjEpOworCXJldF92YWwgPQorCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBDT01CXzJEX0hGRF9DRkcgKyAoMHgyMDAgKiBkZWMpLAorCQkJICAgICAgMHgyMDAwMjg2MSk7CisJcmV0X3ZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIENPTUJfMkRfTEZfQ0ZHICsgKDB4MjAwICogZGVjKSwKKwkJCSAgICAgIDB4MjAwQTEwMjMpOworCisJLy8gU2V0dXAgZmxhdCBjaHJvbWEgYW5kIGx1bWEgdGhyZXNob2xkcworCXZhbHVlID0KKwkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICBDT01CX0ZMQVRfVEhSRVNIX0NUUkwgKyAoMHgyMDAgKiBkZWMpLCAmdG1wKTsKKwl2YWx1ZSAmPSAweDA2MjMwMDAwOworCXJldF92YWwgPQorCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICAgQ09NQl9GTEFUX1RIUkVTSF9DVFJMICsgKDB4MjAwICogZGVjKSwgdmFsdWUpOworCisJLy8gc2V0IGNvbWIgMkQgYmxlbmQKKwlyZXRfdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQ09NQl8yRF9CTEVORCArICgweDIwMCAqIGRlYyksCisJCQkgICAgICAweDIxMEYwRjBGKTsKKworCS8vIENPTUIgTUlTQyBDT05UUk9MCisJcmV0X3ZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIENPTUJfTUlTQ19DVFJMICsgKDB4MjAwICogZGVjKSwKKwkJCSAgICAgIDB4NDExMjBBN0YpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgbWVkdXNhX2luaXRpYWxpemVfcGFsKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWludCByZXRfdmFsID0gMDsKKwlpbnQgaSA9IDA7CisJdTMyIHZhbHVlID0gMDsKKwl1MzIgdG1wID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFQ09ERVJTOyBpKyspIHsKKwkJLy8gc2V0IHZpZGVvIGZvcm1hdCBQQUwtQkRHSEkKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBNT0RFX0NUUkwgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICZ0bXApOworCQl2YWx1ZSAmPSAweEZGRkZGRkYwOworCQl2YWx1ZSB8PSAweDEwMDA0OwkvLyBlbmFibGUgdGhlIGZhc3QgbG9ja2luZyBtb2RlIGJpdFsxNl0KKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBNT0RFX0NUUkwgKyAoMHgyMDAgKiBpKSwKKwkJCQkgICAgICB2YWx1ZSk7CisKKwkJLy8gcmVzb2x1dGlvbiBQQUwgNzIweDU3NgorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBIT1JJWl9USU1fQ1RSTCArICgweDIwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHgwMEMwMEMwMDsKKwkJdmFsdWUgfD0gMHg2MzJEMDA3RDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIEhPUklaX1RJTV9DVFJMICsgKDB4MjAwICogaSksIHZhbHVlKTsKKworCQkvLyB2Ymxhbms2NTZfY250PXgyNiwgdmFjdGl2ZV9jbnQ9MjQwaCwgdmJsYW5rX2NudD14MjQKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgVkVSVF9USU1fQ1RSTCArICgweDIwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHgwMEMwMEMwMDsKKwkJdmFsdWUgfD0gMHgyODI0MDAyNjsJLy8gdmJsYW5rX2NudCArIDIgdG8gZ2V0IGNhbWVyYSBJRAorCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgVkVSVF9USU1fQ1RSTCArICgweDIwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gY2hyb21hIHN1YmNhcnJpZXIgc3RlcCBzaXplCisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBTQ19TVEVQX1NJWkUgKyAoMHgyMDAgKiBpKSwgMHg1NDExRTJEMCk7CisKKwkJLy8gZW5hYmxlIFZJUCBvcHRpb25hbCBhY3RpdmUKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgT1VUX0NUUkxfTlMgKyAoMHgyMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4RkZGQkZGRkY7CisJCXZhbHVlIHw9IDB4MDAwNDAwMDA7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBPVVRfQ1RSTF9OUyArICgweDIwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gZW5hYmxlIFZJUCBvcHRpb25hbCBhY3RpdmUgKFZJUF9PUFRfQUwpIGZvciBkaXJlY3Qgb3V0cHV0LgorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIE9VVF9DVFJMMSArICgweDIwMCAqIGkpLAorCQkJCSAgICAgJnRtcCk7CisJCXZhbHVlICY9IDB4RkZGQkZGRkY7CisJCXZhbHVlIHw9IDB4MDAwNDAwMDA7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgT1VUX0NUUkwxICsgKDB4MjAwICogaSksCisJCQkJICAgICAgdmFsdWUpOworCisJCS8vIGNsZWFyIFZQUkVTX1ZFUlRfRU4gYml0LCBmaXhlcyB0aGUgY2hyb21hIHJ1biBhd2F5IHByb2JsZW0KKwkJLy8gd2hlbiB0aGUgaW5wdXQgc3dpdGNoaW5nIHJhdGUgPCAxNiBmaWVsZHMKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgTUlTQ19USU1fQ1RSTCArICgweDIwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgPSBzZXRCaXRBdFBvcyh2YWx1ZSwgMTQpOwkvLyBkaXNhYmxlIHNwZWNpYWwgcGxheSBkZXRlY3Rpb24KKwkJdmFsdWUgPSBjbGVhckJpdEF0UG9zKHZhbHVlLCAxNSk7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBNSVNDX1RJTV9DVFJMICsgKDB4MjAwICogaSksIHZhbHVlKTsKKworCQkvLyBzZXQgdmJpX2dhdGVfZW4gdG8gMAorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIERGRV9DVFJMMSArICgweDIwMCAqIGkpLAorCQkJCSAgICAgJnRtcCk7CisJCXZhbHVlID0gY2xlYXJCaXRBdFBvcyh2YWx1ZSwgMjkpOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIERGRV9DVFJMMSArICgweDIwMCAqIGkpLAorCQkJCSAgICAgIHZhbHVlKTsKKworCQltZWR1c2FfUEFMQ29tYkluaXQoZGV2LCBpKTsKKworCQkvLyBFbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgYmx1ZSBmaWVsZCBvdXRwdXQgaWYgbm8gdmlkZW8KKwkJbWVkdXNhX2VuYWJsZV9ibHVlZmllbGRfb3V0cHV0KGRldiwgaSwgMSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9FTkNPREVSUzsgaSsrKSB7CisJCS8vIFBBTCBoY2xvY2sKKwkJdmFsdWUgPQorCQkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgREVOQ19BX1JFR18xICsgKDB4MTAwICogaSksICZ0bXApOworCQl2YWx1ZSAmPSAweEYwMDBGQzAwOworCQl2YWx1ZSB8PSAweDA2QzAwMkQwOworCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR18xICsgKDB4MTAwICogaSksIHZhbHVlKTsKKworCQkvLyBidXJzdCBiZWdpbiBhbmQgYnVyc3QgZW5kCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfMiArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGRjAwMDAwMDsKKwkJdmFsdWUgfD0gMHgwMDdFOTc1NDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfMiArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gaGJsYW5rIGFuZCB2YWN0aXZlCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfMyArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGQzAwRkUwMDsKKwkJdmFsdWUgfD0gMHgwMEZDMDEyMDsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfMyArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJLy8gc2V0IFBBTCB2YmxhbmssIHBoYXNlIGFsdGVybmF0aW9uLCAwIElSRSBwZWRlc3RhbAorCQl2YWx1ZSA9CisJCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICBERU5DX0FfUkVHXzQgKyAoMHgxMDAgKiBpKSwgJnRtcCk7CisJCXZhbHVlICY9IDB4MDBGQ0ZGRkY7CisJCXZhbHVlIHw9IDB4MTQwMTAwMDA7CisJCXJldF92YWwgPQorCQkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICBERU5DX0FfUkVHXzQgKyAoMHgxMDAgKiBpKSwgdmFsdWUpOworCisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgIERFTkNfQV9SRUdfNSArICgweDEwMCAqIGkpLCAmdG1wKTsKKwkJdmFsdWUgJj0gMHhGRkZGMDAwMDsKKwkJdmFsdWUgfD0gMHgwMDAwRjA3ODsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfNSArICgweDEwMCAqIGkpLCB2YWx1ZSk7CisKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIERFTkNfQV9SRUdfNiArICgweDEwMCAqIGkpLCAweDAwQTQ5M0NGKTsKKworCQkvLyBTdWJjYXJyaWVyIEluY3JlbWVudAorCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgREVOQ19BX1JFR183ICsgKDB4MTAwICogaSksIDB4MkEwOThBQ0IpOworCX0KKworCS8vc2V0IHBpY3R1cmUgcmVzb2x1dGlvbnMKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgSFNDQUxFX0NUUkwsIDB4MCk7CS8vMCAtIDcyMAorCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBWU0NBTEVfQ1RSTCwgMHgwKTsJLy8wIC0gNTc2CisKKwkvLyBzZXQgQnlwYXNzIGlucHV0IGZvcm1hdCB0byBQQUwgNjI1IGxpbmVzCisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIEJZUF9BQl9DVFJMLCAmdG1wKTsKKwl2YWx1ZSAmPSAweEZGRjdGREZGOworCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBCWVBfQUJfQ1RSTCwgdmFsdWUpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK2ludCBtZWR1c2Ffc2V0X3ZpZGVvc3RhbmRhcmQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaW50IHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCXUzMiB2YWx1ZSA9IDAsIHRtcCA9IDA7CisKKwlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspIHsKKwkJc3RhdHVzID0gbWVkdXNhX2luaXRpYWxpemVfcGFsKGRldik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gbWVkdXNhX2luaXRpYWxpemVfbnRzYyhkZXYpOworCX0KKworCS8vIEVuYWJsZSBERU5DX0Egb3V0cHV0CisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIERFTkNfQV9SRUdfNCwgJnRtcCk7CisJdmFsdWUgPSBzZXRCaXRBdFBvcyh2YWx1ZSwgNCk7CisJc3RhdHVzID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgREVOQ19BX1JFR180LCB2YWx1ZSk7CisKKwkvLyBFbmFibGUgREVOQ19CIG91dHB1dAorCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBERU5DX0JfUkVHXzQsICZ0bXApOworCXZhbHVlID0gc2V0Qml0QXRQb3ModmFsdWUsIDQpOworCXN0YXR1cyA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIERFTkNfQl9SRUdfNCwgdmFsdWUpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBtZWR1c2Ffc2V0X3Jlc29sdXRpb24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCB3aWR0aCwKKwkJCSAgIGludCBkZWNvZGVyX3NlbGVjdCkKK3sKKwlpbnQgZGVjb2RlciA9IDA7CisJaW50IGRlY29kZXJfY291bnQgPSAwOworCWludCByZXRfdmFsID0gMDsKKwl1MzIgaHNjYWxlID0gMHgwOworCXUzMiB2c2NhbGUgPSAweDA7CisJY29uc3QgaW50IE1BWF9XSURUSCA9IDcyMDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwkvLyB2YWxpZGF0ZSB0aGUgd2lkdGggLSBjYW5ub3QgYmUgbmVnYXRpdmUKKwlpZiAod2lkdGggPiBNQVhfV0lEVEgpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjEgJXMoKSA6IHdpZHRoICVkID4gTUFYX1dJRFRIICVkICEgcmVzZXR0aW5nIHRvIE1BWF9XSURUSCBcbiIsCisJCSAgICAgX19mdW5jX18sIHdpZHRoLCBNQVhfV0lEVEgpOworCQl3aWR0aCA9IE1BWF9XSURUSDsKKwl9CisKKwlpZiAoZGVjb2Rlcl9zZWxlY3QgPD0gNyAmJiBkZWNvZGVyX3NlbGVjdCA+PSAwKSB7CisJCWRlY29kZXIgPSBkZWNvZGVyX3NlbGVjdDsKKwkJZGVjb2Rlcl9jb3VudCA9IGRlY29kZXJfc2VsZWN0ICsgMTsKKwl9IGVsc2UgeworCQlkZWNvZGVyID0gMDsKKwkJZGVjb2Rlcl9jb3VudCA9IF9udW1fZGVjb2RlcnM7CisJfQorCisJc3dpdGNoICh3aWR0aCkgeworCWNhc2UgMzIwOgorCQloc2NhbGUgPSAweDEzRTM0QjsKKwkJdnNjYWxlID0gMHgwOworCQlicmVhazsKKworCWNhc2UgMzUyOgorCQloc2NhbGUgPSAweDEwQTI3MzsKKwkJdnNjYWxlID0gMHgwOworCQlicmVhazsKKworCWNhc2UgMTc2OgorCQloc2NhbGUgPSAweDMxMTVCMjsKKwkJdnNjYWxlID0gMHgxRTAwOworCQlicmVhazsKKworCWNhc2UgMTYwOgorCQloc2NhbGUgPSAweDM3OEQ4NDsKKwkJdnNjYWxlID0gMHgxRTAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CQkvLzcyMAorCQloc2NhbGUgPSAweDA7CisJCXZzY2FsZSA9IDB4MDsKKwkJYnJlYWs7CisJfQorCisJZm9yICg7IGRlY29kZXIgPCBkZWNvZGVyX2NvdW50OyBkZWNvZGVyKyspIHsKKwkJLy8gd3JpdGUgc2NhbGluZyB2YWx1ZXMgZm9yIGVhY2ggZGVjb2RlcgorCQlyZXRfdmFsID0KKwkJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkJICAgICAgSFNDQUxFX0NUUkwgKyAoMHgyMDAgKiBkZWNvZGVyKSwgaHNjYWxlKTsKKwkJcmV0X3ZhbCA9CisJCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJCSAgICAgIFZTQ0FMRV9DVFJMICsgKDB4MjAwICogZGVjb2RlciksIHZzY2FsZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBtZWR1c2Ffc2V0X2RlY29kZXJkdXJhdGlvbihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGRlY29kZXIsCisJCQkJICAgICAgIGludCBkdXJhdGlvbikKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJdTMyIGZsZF9jbnQgPSAwOworCXUzMiB0bXAgPSAwOworCXUzMiBkaXNwX2NudF9yZWcgPSBESVNQX0FCX0NOVDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwkvLyBubyBzdXBwb3J0CisJaWYgKGRlY29kZXIgPCBWREVDX0EgJiYgZGVjb2RlciA+IFZERUNfSCkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGRlY29kZXIpIHsKKwlkZWZhdWx0OgorCQlicmVhazsKKwljYXNlIFZERUNfQzoKKwljYXNlIFZERUNfRDoKKwkJZGlzcF9jbnRfcmVnID0gRElTUF9DRF9DTlQ7CisJCWJyZWFrOworCWNhc2UgVkRFQ19FOgorCWNhc2UgVkRFQ19GOgorCQlkaXNwX2NudF9yZWcgPSBESVNQX0VGX0NOVDsKKwkJYnJlYWs7CisJY2FzZSBWREVDX0c6CisJY2FzZSBWREVDX0g6CisJCWRpc3BfY250X3JlZyA9IERJU1BfR0hfQ05UOworCQlicmVhazsKKwl9CisKKwlfZGlzcGxheV9maWVsZF9jbnRbZGVjb2Rlcl0gPSBkdXJhdGlvbjsKKworCS8vIHVwZGF0ZSBoYXJkd2FyZQorCWZsZF9jbnQgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIGRpc3BfY250X3JlZywgJnRtcCk7CisKKwlpZiAoIShkZWNvZGVyICUgMikpCS8vIEVWRU4gZGVjb2RlcgorCXsKKwkJZmxkX2NudCAmPSAweEZGRkYwMDAwOworCQlmbGRfY250IHw9IGR1cmF0aW9uOworCX0gZWxzZSB7CisJCWZsZF9jbnQgJj0gMHgwMDAwRkZGRjsKKwkJZmxkX2NudCB8PSAoKHUzMikgZHVyYXRpb24pIDw8IDE2OworCX0KKworCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBkaXNwX2NudF9yZWcsIGZsZF9jbnQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTWFwIHRvIE1lZHVzYSByZWdpc3RlciBzZXR0aW5nCitzdGF0aWMgaW50IG1hcE0oaW50IHNyY01pbiwKKwkJaW50IHNyY01heCwgaW50IHNyY1ZhbCwgaW50IGRzdE1pbiwgaW50IGRzdE1heCwgaW50ICpkc3RWYWwpCit7CisJaW50IG51bWVyYXRvcjsKKwlpbnQgZGVub21pbmF0b3I7CisJaW50IHF1b3RpZW50OworCisJaWYgKChzcmNNaW4gPT0gc3JjTWF4KSB8fCAoc3JjVmFsIDwgc3JjTWluKSB8fCAoc3JjVmFsID4gc3JjTWF4KSkgeworCQlyZXR1cm4gLTE7CisJfQorCS8vIFRoaXMgaXMgdGhlIG92ZXJhbGwgZXhwcmVzc2lvbiB1c2VkOgorCS8vICpkc3RWYWwgPSAoc3JjVmFsIC0gc3JjTWluKSooZHN0TWF4IC0gZHN0TWluKSAvIChzcmNNYXggLSBzcmNNaW4pICsgZHN0TWluOworCS8vIGJ1dCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIHNvIGJlbG93IHdlIHVzZSB0aGUgbW9kdWx1cworCS8vIG9wZXJhdG9yIHRvIGZpbmQgdGhlIHJlbWFpbmRlciBhbmQgaW5jcmVtZW50IGlmIG5lY2Vzc2FyeS4KKwludW1lcmF0b3IgPSAoc3JjVmFsIC0gc3JjTWluKSAqIChkc3RNYXggLSBkc3RNaW4pOworCWRlbm9taW5hdG9yID0gc3JjTWF4IC0gc3JjTWluOworCXF1b3RpZW50ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7CisKKwlpZiAoMiAqIChudW1lcmF0b3IgJSBkZW5vbWluYXRvcikgPj0gZGVub21pbmF0b3IpIHsKKwkJcXVvdGllbnQrKzsKKwl9CisKKwkqZHN0VmFsID0gcXVvdGllbnQgKyBkc3RNaW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY29udmVydF90b190d29zKGxvbmcgbnVtZXJpYywgdW5zaWduZWQgbG9uZyBiaXRzX2xlbikKK3sKKwl1bnNpZ25lZCBjaGFyIHRlbXA7CisKKwlpZiAobnVtZXJpYyA+PSAwKQorCQlyZXR1cm4gbnVtZXJpYzsKKwllbHNlIHsKKwkJdGVtcCA9IH4oYWJzKG51bWVyaWMpICYgMHhGRik7CisJCXRlbXAgKz0gMTsKKwkJcmV0dXJuIHRlbXA7CisJfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworaW50IG1lZHVzYV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGJyaWdodG5lc3MsIGludCBkZWNvZGVyKQoreworCWludCByZXRfdmFsID0gMDsKKwlpbnQgdmFsdWUgPSAwOworCXUzMiB2YWwgPSAwLCB0bXAgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoKGJyaWdodG5lc3MgPiBWSURFT19QUk9DQU1QX01BWCkKKwkgICAgfHwgKGJyaWdodG5lc3MgPCBWSURFT19QUk9DQU1QX01JTikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCXJldF92YWwgPQorCSAgICBtYXBNKFZJREVPX1BST0NBTVBfTUlOLCBWSURFT19QUk9DQU1QX01BWCwgYnJpZ2h0bmVzcywKKwkJIFNJR05FRF9CWVRFX01JTiwgU0lHTkVEX0JZVEVfTUFYLCAmdmFsdWUpOworCXZhbHVlID0gY29udmVydF90b190d29zKHZhbHVlLCA4KTsKKwl2YWwgPQorCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgIFZERUNfQV9CUklURV9DVFJMICsgKDB4MjAwICogZGVjb2RlciksICZ0bXApOworCXZhbCAmPSAweEZGRkZGRjAwOworCXJldF92YWwgfD0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgIFZERUNfQV9CUklURV9DVFJMICsgKDB4MjAwICogZGVjb2RlciksCisJCQkgICAgICB2YWwgfCB2YWx1ZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiByZXRfdmFsOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworaW50IG1lZHVzYV9zZXRfY29udHJhc3Qoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjb250cmFzdCwgaW50IGRlY29kZXIpCit7CisJaW50IHJldF92YWwgPSAwOworCWludCB2YWx1ZSA9IDA7CisJdTMyIHZhbCA9IDAsIHRtcCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKChjb250cmFzdCA+IFZJREVPX1BST0NBTVBfTUFYKSB8fCAoY29udHJhc3QgPCBWSURFT19QUk9DQU1QX01JTikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0X3ZhbCA9CisJICAgIG1hcE0oVklERU9fUFJPQ0FNUF9NSU4sIFZJREVPX1BST0NBTVBfTUFYLCBjb250cmFzdCwKKwkJIFVOU0lHTkVEX0JZVEVfTUlOLCBVTlNJR05FRF9CWVRFX01BWCwgJnZhbHVlKTsKKwl2YWwgPQorCSAgICBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgIFZERUNfQV9DTlRSU1RfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLCAmdG1wKTsKKwl2YWwgJj0gMHhGRkZGRkYwMDsKKwlyZXRfdmFsIHw9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgICBWREVDX0FfQ05UUlNUX0NUUkwgKyAoMHgyMDAgKiBkZWNvZGVyKSwKKwkJCSAgICAgIHZhbCB8IHZhbHVlKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2ludCBtZWR1c2Ffc2V0X2h1ZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGh1ZSwgaW50IGRlY29kZXIpCit7CisJaW50IHJldF92YWwgPSAwOworCWludCB2YWx1ZSA9IDA7CisJdTMyIHZhbCA9IDAsIHRtcCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKChodWUgPiBWSURFT19QUk9DQU1QX01BWCkgfHwgKGh1ZSA8IFZJREVPX1BST0NBTVBfTUlOKSkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXRfdmFsID0KKwkgICAgbWFwTShWSURFT19QUk9DQU1QX01JTiwgVklERU9fUFJPQ0FNUF9NQVgsIGh1ZSwgU0lHTkVEX0JZVEVfTUlOLAorCQkgU0lHTkVEX0JZVEVfTUFYLCAmdmFsdWUpOworCisJdmFsdWUgPSBjb252ZXJ0X3RvX3R3b3ModmFsdWUsIDgpOworCXZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgVkRFQ19BX0hVRV9DVFJMICsgKDB4MjAwICogZGVjb2RlciksICZ0bXApOworCXZhbCAmPSAweEZGRkZGRjAwOworCisJcmV0X3ZhbCB8PQorCSAgICBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICAgVkRFQ19BX0hVRV9DVFJMICsgKDB4MjAwICogZGVjb2RlciksIHZhbCB8IHZhbHVlKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2ludCBtZWR1c2Ffc2V0X3NhdHVyYXRpb24oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBzYXR1cmF0aW9uLCBpbnQgZGVjb2RlcikKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJaW50IHZhbHVlID0gMDsKKwl1MzIgdmFsID0gMCwgdG1wID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwlpZiAoKHNhdHVyYXRpb24gPiBWSURFT19QUk9DQU1QX01BWCkKKwkgICAgfHwgKHNhdHVyYXRpb24gPCBWSURFT19QUk9DQU1QX01JTikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0X3ZhbCA9CisJICAgIG1hcE0oVklERU9fUFJPQ0FNUF9NSU4sIFZJREVPX1BST0NBTVBfTUFYLCBzYXR1cmF0aW9uLAorCQkgVU5TSUdORURfQllURV9NSU4sIFVOU0lHTkVEX0JZVEVfTUFYLCAmdmFsdWUpOworCisJdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLAorCQkJICAgICBWREVDX0FfVVNBVF9DVFJMICsgKDB4MjAwICogZGVjb2RlciksICZ0bXApOworCXZhbCAmPSAweEZGRkZGRjAwOworCXJldF92YWwgfD0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgIFZERUNfQV9VU0FUX0NUUkwgKyAoMHgyMDAgKiBkZWNvZGVyKSwKKwkJCSAgICAgIHZhbCB8IHZhbHVlKTsKKworCXZhbCA9CisJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCSAgICAgVkRFQ19BX1ZTQVRfQ1RSTCArICgweDIwMCAqIGRlY29kZXIpLCAmdG1wKTsKKwl2YWwgJj0gMHhGRkZGRkYwMDsKKwlyZXRfdmFsIHw9CisJICAgIGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sCisJCQkgICAgICBWREVDX0FfVlNBVF9DVFJMICsgKDB4MjAwICogZGVjb2RlciksCisJCQkgICAgICB2YWwgfCB2YWx1ZSk7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQcm9ncmFtIHRoZSBkaXNwbGF5IHNlcXVlbmNlIGFuZCBtb25pdG9yIG91dHB1dC4KKy8vCitpbnQgbWVkdXNhX3ZpZGVvX2luaXQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJdTMyIHZhbHVlID0gMCwgdG1wID0gMDsKKwlpbnQgcmV0X3ZhbCA9IDA7CisJaW50IGkgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKworCV9udW1fZGVjb2RlcnMgPSBkZXYtPl9tYXhfbnVtX2RlY29kZXJzOworCisJLy8gZGlzYWJsZSBBdXRvIHNvdXJjZSBzZWxlY3Rpb24gb24gYWxsIHZpZGVvIGRlY29kZXJzCisJdmFsdWUgPSBjeDI1ODIxX2kyY19yZWFkKCZkZXYtPmkyY19idXNbMF0sIE1PTl9BX0NUUkwsICZ0bXApOworCXZhbHVlICY9IDB4RkZGRkYwRkY7CisJcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIE1PTl9BX0NUUkwsIHZhbHVlKTsKKworCWlmIChyZXRfdmFsIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvLyBUdXJuIG9mZiBNYXN0ZXIgc291cmNlIHN3aXRjaCBlbmFibGUKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgTU9OX0FfQ1RSTCwgJnRtcCk7CisJdmFsdWUgJj0gMHhGRkZGRkZERjsKKwlyZXRfdmFsID0gY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgTU9OX0FfQ1RSTCwgdmFsdWUpOworCisJaWYgKHJldF92YWwgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IF9udW1fZGVjb2RlcnM7IGkrKykgeworCQltZWR1c2Ffc2V0X2RlY29kZXJkdXJhdGlvbihkZXYsIGksIF9kaXNwbGF5X2ZpZWxkX2NudFtpXSk7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKworCS8vIFNlbGVjdCBtb25pdG9yIGFzIERFTkMgQSBpbnB1dCwgcG93ZXIgdXAgdGhlIERBQworCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBERU5DX0FCX0NUUkwsICZ0bXApOworCXZhbHVlICY9IDB4RkY3MEZGNzA7CisJdmFsdWUgfD0gMHgwMDA5MDAwODsJLy8gc2V0IGVuX2FjdGl2ZQorCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBERU5DX0FCX0NUUkwsIHZhbHVlKTsKKworCWlmIChyZXRfdmFsIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvLyBlbmFibGUgaW5wdXQgaXMgVklQLzY1NgorCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBCWVBfQUJfQ1RSTCwgJnRtcCk7CisJdmFsdWUgfD0gMHgwMDA0MDEwMDsJLy8gZW5hYmxlIFZJUAorCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBCWVBfQUJfQ1RSTCwgdmFsdWUpOworCisJaWYgKHJldF92YWwgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vIHNlbGVjdCBBRkUgY2xvY2sgdG8gb3V0cHV0IG1vZGUKKwl2YWx1ZSA9IGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwgQUZFX0FCX0RJQUdfQ1RSTCwgJnRtcCk7CisJdmFsdWUgJj0gMHg4M0ZGRkZGRjsKKwlyZXRfdmFsID0KKwkgICAgY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwgQUZFX0FCX0RJQUdfQ1RSTCwKKwkJCSAgICAgIHZhbHVlIHwgMHgxMDAwMDAwMCk7CisKKwlpZiAocmV0X3ZhbCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLy8gVHVybiBvbiBhbGwgb2YgdGhlIGRhdGEgb3V0IGFuZCBjb250cm9sIG91dHB1dCBwaW5zLgorCXZhbHVlID0gY3gyNTgyMV9pMmNfcmVhZCgmZGV2LT5pMmNfYnVzWzBdLCBQSU5fT0VfQ1RSTCwgJnRtcCk7CisJdmFsdWUgJj0gMHhGRUYwRkUwMDsKKwlpZiAoX251bV9kZWNvZGVycyA9PSBNQVhfREVDT0RFUlMpIHsKKwkJLy8gTm90ZTogVGhlIG9jdGFsIGJvYXJkIGRvZXMgbm90IHN1cHBvcnQgY29udHJvbCBwaW5zKGJpdDE2LTE5KS4KKwkJLy8gVGhlc2UgYml0cyBhcmUgaWdub3JlZCBpbiB0aGUgb2N0YWwgYm9hcmQuCisJCXZhbHVlIHw9IDB4MDEwMDAxRjg7CS8vIGRpc2FibGUgVkRFQyBBLUMgcG9ydCwgZGVmYXVsdCB0byBNb2JpbHlnZW4gSW50ZXJmYWNlCisJfSBlbHNlIHsKKwkJdmFsdWUgfD0gMHgwMTBGMDEwODsJLy8gZGlzYWJsZSBWREVDIEEtQyBwb3J0LCBkZWZhdWx0IHRvIE1vYmlseWdlbiBJbnRlcmZhY2UKKwl9CisKKwl2YWx1ZSB8PSA3OworCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBQSU5fT0VfQ1RSTCwgdmFsdWUpOworCWlmIChyZXRfdmFsIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldF92YWwgPSBtZWR1c2Ffc2V0X3ZpZGVvc3RhbmRhcmQoZGV2KTsKKworCWlmIChyZXRfdmFsIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhYjRiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTUVEVVNBX1ZJREVPX0gKKyNkZWZpbmUgX01FRFVTQV9WSURFT19ICisKKyNpbmNsdWRlICJjeDI1ODIxLW1lZHVzYS1kZWZpbmVzLmgiCisKKy8vIENvbG9yIGNvbnRyb2wgY29uc3RhbnRzCisjZGVmaW5lIFZJREVPX1BST0NBTVBfTUlOICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFZJREVPX1BST0NBTVBfTUFYICAgICAgICAgICAgICAgICAxMDAwMAorI2RlZmluZSBVTlNJR05FRF9CWVRFX01JTiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVTlNJR05FRF9CWVRFX01BWCAgICAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBTSUdORURfQllURV9NSU4gICAgICAgICAgICAgICAgICAgLTEyOAorI2RlZmluZSBTSUdORURfQllURV9NQVggICAgICAgICAgICAgICAgICAgMTI3CisKKy8vIERlZmF1bHQgdmlkZW8gY29sb3Igc2V0dGluZ3MKKyNkZWZpbmUgU0hBUlBORVNTX0RFRkFVTFQgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIFNBVFVSQVRJT05fREVGQVVMVCAgICAgICAgICAgICAgNTAwMAorI2RlZmluZSBCUklHSFRORVNTX0RFRkFVTFQgICAgICAgICAgICAgIDYyMDAKKyNkZWZpbmUgQ09OVFJBU1RfREVGQVVMVCAgICAgICAgICAgICAgICA1MDAwCisjZGVmaW5lIEhVRV9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgNTAwMAorCit1bnNpZ25lZCBzaG9ydCBfbnVtX2RlY29kZXJzOwordW5zaWduZWQgc2hvcnQgX251bV9jYW1lcmFzOworCit1bnNpZ25lZCBpbnQgX3ZpZGVvX3N0YW5kYXJkOworaW50IF9kaXNwbGF5X2ZpZWxkX2NudFtNQVhfREVDT0RFUlNdOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDFlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXJlZy5oCkBAIC0wLDAgKzEsMTU5MiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NYMjU4MjFfUkVHSVNURVJTX18KKyNkZWZpbmUgX19DWDI1ODIxX1JFR0lTVEVSU19fCisKKy8qIFJpc2MgSW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFJJU0NfQ05UX0lOQwkgMHgwMDAxMDAwMAorI2RlZmluZSBSSVNDX0NOVF9SRVNFVAkgMHgwMDAzMDAwMAorI2RlZmluZSBSSVNDX0lSUTEJCSAweDAxMDAwMDAwCisjZGVmaW5lIFJJU0NfSVJRMgkJIDB4MDIwMDAwMDAKKyNkZWZpbmUgUklTQ19FT0wJCSAweDA0MDAwMDAwCisjZGVmaW5lIFJJU0NfU09MCQkgMHgwODAwMDAwMAorI2RlZmluZSBSSVNDX1dSSVRFCQkgMHgxMDAwMDAwMAorI2RlZmluZSBSSVNDX1NLSVAJCSAweDIwMDAwMDAwCisjZGVmaW5lIFJJU0NfSlVNUAkJIDB4NzAwMDAwMDAKKyNkZWZpbmUgUklTQ19TWU5DCQkgMHg4MDAwMDAwMAorI2RlZmluZSBSSVNDX1JFU1lOQwkJIDB4ODAwMDgwMDAKKyNkZWZpbmUgUklTQ19SRUFECQkgMHg5MDAwMDAwMAorI2RlZmluZSBSSVNDX1dSSVRFUk0JIDB4QjAwMDAwMDAKKyNkZWZpbmUgUklTQ19XUklURUNNCSAweEMwMDAwMDAwCisjZGVmaW5lIFJJU0NfV1JJVEVDUgkgMHhEMDAwMDAwMAorI2RlZmluZSBSSVNDX1dSSVRFQwkJIDB4NTAwMDAwMDAKKyNkZWZpbmUgUklTQ19SRUFEQwkJIDB4QTAwMDAwMDAKKworI2RlZmluZSBSSVNDX1NZTkNfT0RECQkgMHgwMDAwMDAwMAorI2RlZmluZSBSSVNDX1NZTkNfRVZFTgkJIDB4MDAwMDAyMDAKKyNkZWZpbmUgUklTQ19TWU5DX09ERF9WQkkJIDB4MDAwMDAwMDYKKyNkZWZpbmUgUklTQ19TWU5DX0VWRU5fVkJJCSAweDAwMDAwMjA3CisjZGVmaW5lIFJJU0NfTk9PUAkJCSAweEYwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFTQiBTUkFNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBUWF9TUkFNICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwCS8vIFRyYW5zbWl0IFNSQU0KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUlhfUkFNICAgICAgICAgICAgICAgICAgICAweDAxMDAwMAkvLyBSZWNlaXZlIFNSQU0KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQXBwbGljYXRpb24gTGF5ZXIgKEFMKQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgREVWX0NOVFJMMiAgICAgICAgICAgICAgICAweDA0MDAwMAkvLyBEZXZpY2UgY29udHJvbAorI2RlZmluZSAgRkxEX1JVTl9SSVNDICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFBDSV9JTlRfTVNLICAgICAgICAgICAgICAgMHgwNDAwMTAJLy8gUENJIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBQQ0lfSU5UX1NUQVQgICAgICAgICAgICAgIDB4MDQwMDE0CS8vIFBDSSBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBQQ0lfSU5UX01TVEFUICAgICAgICAgICAgIDB4MDQwMDE4CS8vIFBDSSBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgRkxEX0hBTU1FUkhFQURfSU5UICAgICAgICAoMSA8PCAyNykKKyNkZWZpbmUgIEZMRF9VQVJUX0lOVCAgICAgICAgICAgICAgKDEgPDwgMjYpCisjZGVmaW5lICBGTERfSVJRTl9JTlQgICAgICAgICAgICAgICgxIDw8IDI1KQorI2RlZmluZSAgRkxEX1RNX0lOVCAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgIEZMRF9JMkNfM19SQUNLICAgICAgICAgICAgKDEgPDwgMjcpCisjZGVmaW5lICBGTERfSTJDXzNfSU5UICAgICAgICAgICAgICgxIDw8IDI2KQorI2RlZmluZSAgRkxEX0kyQ18yX1JBQ0sgICAgICAgICAgICAoMSA8PCAyNSkKKyNkZWZpbmUgIEZMRF9JMkNfMl9JTlQgICAgICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lICBGTERfSTJDXzFfUkFDSyAgICAgICAgICAgICgxIDw8IDIzKQorI2RlZmluZSAgRkxEX0kyQ18xX0lOVCAgICAgICAgICAgICAoMSA8PCAyMikKKworI2RlZmluZSAgRkxEX0FQQl9ETUFfQkVSUl9JTlQgICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgIEZMRF9BTF9XUl9CRVJSX0lOVCAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lICBGTERfQUxfUkRfQkVSUl9JTlQgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSAgRkxEX1JJU0NfV1JfQkVSUl9JTlQgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgIEZMRF9SSVNDX1JEX0JFUlJfSU5UICAgICAgKDEgPDwgMTcpCisKKyNkZWZpbmUgIEZMRF9WSURfSV9JTlQgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgIEZMRF9WSURfSF9JTlQgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgIEZMRF9WSURfR19JTlQgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgIEZMRF9WSURfRl9JTlQgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgIEZMRF9WSURfRV9JTlQgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgIEZMRF9WSURfRF9JTlQgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgIEZMRF9WSURfQ19JTlQgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgIEZMRF9WSURfQl9JTlQgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgIEZMRF9WSURfQV9JTlQgICAgICAgICAgICAgKDEgPDwgMCkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0FfSU5UX01TSyAgICAgICAgICAgICAweDA0MDAyMAkvLyBWaWRlbyBBIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfQV9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDI0CS8vIFZpZGVvIEEgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0FfSU5UX01TVEFUICAgICAgICAgICAweDA0MDAyOAkvLyBWaWRlbyBBIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfQV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDJDCS8vIFZpZGVvIEEgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0JfSU5UX01TSyAgICAgICAgICAgICAweDA0MDAzMAkvLyBWaWRlbyBCIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfQl9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDM0CS8vIFZpZGVvIEIgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0JfSU5UX01TVEFUICAgICAgICAgICAweDA0MDAzOAkvLyBWaWRlbyBCIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfQl9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDNDCS8vIFZpZGVvIEIgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0NfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA0MAkvLyBWaWRlbyBDIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfQ19JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDQ0CS8vIFZpZGVvIEMgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0NfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA0OAkvLyBWaWRlbyBDIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfQ19JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDRDCS8vIFZpZGVvIEMgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0RfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA1MAkvLyBWaWRlbyBEIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfRF9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDU0CS8vIFZpZGVvIEQgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0RfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA1OAkvLyBWaWRlbyBEIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfRF9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDVDCS8vIFZpZGVvIEQgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0VfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA2MAkvLyBWaWRlbyBFIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfRV9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDY0CS8vIFZpZGVvIEUgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0VfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA2OAkvLyBWaWRlbyBFIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfRV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDZDCS8vIFZpZGVvIEUgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0ZfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA3MAkvLyBWaWRlbyBGIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfRl9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDc0CS8vIFZpZGVvIEYgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0ZfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA3OAkvLyBWaWRlbyBGIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfRl9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDdDCS8vIFZpZGVvIEYgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0dfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA4MAkvLyBWaWRlbyBHIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfR19JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDg0CS8vIFZpZGVvIEcgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0dfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA4OAkvLyBWaWRlbyBHIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfR19JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDhDCS8vIFZpZGVvIEcgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0hfSU5UX01TSyAgICAgICAgICAgICAweDA0MDA5MAkvLyBWaWRlbyBIIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfSF9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMDk0CS8vIFZpZGVvIEggaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0hfSU5UX01TVEFUICAgICAgICAgICAweDA0MDA5OAkvLyBWaWRlbyBIIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfSF9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMDlDCS8vIFZpZGVvIEggaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0lfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBBMAkvLyBWaWRlbyBJIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfSV9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMEE0CS8vIFZpZGVvIEkgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0lfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBBOAkvLyBWaWRlbyBJIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfSV9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMEFDCS8vIFZpZGVvIEkgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0pfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBCMAkvLyBWaWRlbyBKIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBWSURfSl9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMEI0CS8vIFZpZGVvIEogaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgVklEX0pfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBCOAkvLyBWaWRlbyBKIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBWSURfSl9JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMEJDCS8vIFZpZGVvIEogaW50ZXJydXB0IHNldCBzdGF0dXMKKworI2RlZmluZSAgRkxEX1ZJRF9TUkNfT1BDX0VSUiAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lICBGTERfVklEX0RTVF9PUENfRVJSICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgIEZMRF9WSURfU1JDX1NZTkMgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSAgRkxEX1ZJRF9EU1RfU1lOQyAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lICBGTERfVklEX1NSQ19VRiAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgIEZMRF9WSURfRFNUX09GICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSAgRkxEX1ZJRF9TUkNfUklTQzIgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lICBGTERfVklEX0RTVF9SSVNDMiAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgIEZMRF9WSURfU1JDX1JJU0MxICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgRkxEX1ZJRF9EU1RfUklTQzEgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lICBGTERfVklEX1NSQ19FUlJPUlMJCUZMRF9WSURfU1JDX09QQ19FUlIgfCBGTERfVklEX1NSQ19TWU5DIHwgRkxEX1ZJRF9TUkNfVUYKKyNkZWZpbmUgIEZMRF9WSURfRFNUX0VSUk9SUwkJRkxEX1ZJRF9EU1RfT1BDX0VSUiB8IEZMRF9WSURfRFNUX1NZTkMgfCBGTERfVklEX0RTVF9PRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfQV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEMwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgQVVEX0FfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBDNAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgQVVEX0FfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBDOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9BX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwQ0MJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9CX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAwRDAJLy8gQXVkaW8gSW50IGludGVycnVwdCBtYXNrCisjZGVmaW5lICBBVURfQl9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMEQ0CS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBBVURfQl9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMEQ4CS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgQVVEX0JfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDBEQwkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQVVEX0NfSU5UX01TSyAgICAgICAgICAgICAweDA0MDBFMAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgIEFVRF9DX0lOVF9TVEFUICAgICAgICAgICAgMHgwNDAwRTQJLy8gQXVkaW8gSW50IGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9DX0lOVF9NU1RBVCAgICAgICAgICAgMHgwNDAwRTgJLy8gQXVkaW8gSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBBVURfQ19JTlRfU1NUQVQgICAgICAgICAgIDB4MDQwMEVDCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfRF9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMEYwCS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSAgQVVEX0RfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDBGNAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgQVVEX0RfSU5UX01TVEFUICAgICAgICAgICAweDA0MDBGOAkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIEFVRF9EX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAwRkMJLy8gQXVkaW8gSW50IGludGVycnVwdCBzZXQgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9FX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAxMDAJLy8gQXVkaW8gSW50IGludGVycnVwdCBtYXNrCisjZGVmaW5lICBBVURfRV9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMTA0CS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBBVURfRV9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMTA4CS8vIEF1ZGlvIEludCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgQVVEX0VfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDEwQwkvLyBBdWRpbyBJbnQgaW50ZXJydXB0IHNldCBzdGF0dXMKKworI2RlZmluZSAgRkxEX0FVRF9TUkNfT1BDX0VSUiAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lICBGTERfQVVEX0RTVF9PUENfRVJSICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgIEZMRF9BVURfU1JDX1NZTkMgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSAgRkxEX0FVRF9EU1RfU1lOQyAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lICBGTERfQVVEX1NSQ19PRiAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgIEZMRF9BVURfRFNUX09GICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSAgRkxEX0FVRF9TUkNfUklTQ0kyICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lICBGTERfQVVEX0RTVF9SSVNDSTIgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgIEZMRF9BVURfU1JDX1JJU0NJMSAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgRkxEX0FVRF9EU1RfUklTQ0kxICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIE1CSUZfQV9JTlRfTVNLICAgICAgICAgICAgIDB4MDQwMTEwCS8vIE1CSUYgSW50IGludGVycnVwdCBtYXNrCisjZGVmaW5lICBNQklGX0FfSU5UX1NUQVQgICAgICAgICAgICAweDA0MDExNAkvLyBNQklGIEludCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBNQklGX0FfSU5UX01TVEFUICAgICAgICAgICAweDA0MDExOAkvLyBNQklGIEludCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgTUJJRl9BX0lOVF9TU1RBVCAgICAgICAgICAgMHgwNDAxMUMJLy8gTUJJRiBJbnQgaW50ZXJydXB0IHNldCBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgTUJJRl9CX0lOVF9NU0sgICAgICAgICAgICAgMHgwNDAxMjAJLy8gTUJJRiBJbnQgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgIE1CSUZfQl9JTlRfU1RBVCAgICAgICAgICAgIDB4MDQwMTI0CS8vIE1CSUYgSW50IGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgIE1CSUZfQl9JTlRfTVNUQVQgICAgICAgICAgIDB4MDQwMTI4CS8vIE1CSUYgSW50IGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBNQklGX0JfSU5UX1NTVEFUICAgICAgICAgICAweDA0MDEyQwkvLyBNQklGIEludCBpbnRlcnJ1cHQgc2V0IHN0YXR1cworCisjZGVmaW5lICBGTERfTUJJRl9EU1RfT1BDX0VSUiAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lICBGTERfTUJJRl9EU1RfU1lOQyAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lICBGTERfTUJJRl9EU1RfT0YgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lICBGTERfTUJJRl9EU1RfUklTQ0kyICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICBGTERfTUJJRl9EU1RfUklTQ0kxICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9FWFRfSU5UX01TSyAgICAgICAgICAgMHgwNDAwNjAJLy8gQXVkaW8gRXh0IGludGVycnVwdCBtYXNrCisjZGVmaW5lICBBVURfRVhUX0lOVF9TVEFUICAgICAgICAgIDB4MDQwMDY0CS8vIEF1ZGlvIEV4dCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBBVURfRVhUX0lOVF9NU1RBVCAgICAgICAgIDB4MDQwMDY4CS8vIEF1ZGlvIEV4dCBpbnRlcnJ1cHQgbWFza2VkIHN0YXR1cworI2RlZmluZSAgQVVEX0VYVF9JTlRfU1NUQVQgICAgICAgICAweDA0MDA2QwkvLyBBdWRpbyBFeHQgaW50ZXJydXB0IHNldCBzdGF0dXMKKyNkZWZpbmUgIEZMRF9BVURfRVhUX09QQ19FUlIgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSAgRkxEX0FVRF9FWFRfU1lOQyAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lICBGTERfQVVEX0VYVF9PRiAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgIEZMRF9BVURfRVhUX1JJU0NJMiAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSAgRkxEX0FVRF9FWFRfUklTQ0kxICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEdQSU9fTE8gICAgICAgICAgICAgICAgICAgMHgxMTAwMTAJLy8gTG93ZXIgIG9mIEdQSU8gcGlucyBbMzE6MF0KKyNkZWZpbmUgIEdQSU9fSEkgICAgICAgICAgICAgICAgICAgMHgxMTAwMTQJLy8gVXBwZXIgV09SRCAgb2YgR1BJTyBwaW5zIFs0NzozMV0KKworI2RlZmluZSAgR1BJT19MT19PRSAgICAgICAgICAgICAgICAweDExMDAxOAkvLyBMb3dlciAgb2YgR1BJTyBvdXRwdXQgZW5hYmxlIFszMTowXQorI2RlZmluZSAgR1BJT19ISV9PRSAgICAgICAgICAgICAgICAweDExMDAxQwkvLyBVcHBlciB3b3JkICBvZiBHUElPIG91dHB1dCBlbmFibGUgWzQ3OjMyXQorCisjZGVmaW5lICBHUElPX0xPX0lOVF9NU0sgICAgICAgICAgIDB4MTEwMDNDCS8vIEdQSU8gaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgIEdQSU9fTE9fSU5UX1NUQVQgICAgICAgICAgMHgxMTAwNDQJLy8gR1BJTyBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICBHUElPX0xPX0lOVF9NU1RBVCAgICAgICAgIDB4MTEwMDRDCS8vIEdQSU8gaW50ZXJydXB0IG1hc2tlZCBzdGF0dXMKKyNkZWZpbmUgIEdQSU9fTE9fSVNNX1NOUyAgICAgICAgICAgMHgxMTAwNTQJLy8gR1BJTyBpbnRlcnJ1cHQgc2Vuc2l0aXZpdHkKKyNkZWZpbmUgIEdQSU9fTE9fSVNNX1BPTCAgICAgICAgICAgMHgxMTAwNUMJLy8gR1BJTyBpbnRlcnJ1cHQgcG9sYXJpdHkKKworI2RlZmluZSAgR1BJT19ISV9JTlRfTVNLICAgICAgICAgICAweDExMDA0MAkvLyBHUElPIGludGVycnVwdCBtYXNrCisjZGVmaW5lICBHUElPX0hJX0lOVF9TVEFUICAgICAgICAgIDB4MTEwMDQ4CS8vIEdQSU8gaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgR1BJT19ISV9JTlRfTVNUQVQgICAgICAgICAweDExMDA1MAkvLyBHUElPIGludGVycnVwdCBtYXNrZWQgc3RhdHVzCisjZGVmaW5lICBHUElPX0hJX0lTTV9TTlMgICAgICAgICAgIDB4MTEwMDU4CS8vIEdQSU8gaW50ZXJydXB0IHNlbnNpdGl2aXR5CisjZGVmaW5lICBHUElPX0hJX0lTTV9QT0wgICAgICAgICAgIDB4MTEwMDYwCS8vIEdQSU8gaW50ZXJydXB0IHBvbGFyaXR5CisKKyNkZWZpbmUgIEZMRF9HUElPNDNfSU5UICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lICBGTERfR1BJTzQyX0lOVCAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSAgRkxEX0dQSU80MV9JTlQgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSAgRkxEX0dQSU80MF9JTlQgICAgICAgICAgICAoMSA8PCA4KQorCisjZGVmaW5lICBGTERfR1BJTzlfSU5UICAgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lICBGTERfR1BJTzhfSU5UICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lICBGTERfR1BJTzdfSU5UICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lICBGTERfR1BJTzZfSU5UICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lICBGTERfR1BJTzVfSU5UICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lICBGTERfR1BJTzRfSU5UICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lICBGTERfR1BJTzNfSU5UICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lICBGTERfR1BJTzJfSU5UICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lICBGTERfR1BJTzFfSU5UICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lICBGTERfR1BJTzBfSU5UICAgICAgICAgICAgICgxIDw8IDApCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFRDX1JFUSAgICAgICAgICAgICAgICAgICAgMHgwNDAwOTAJLy8gUmlkZXIgUENJIEV4cHJlc3MgdHJhRkZpYyBjbGFzcyByZXF1ZXN0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFRDX1JFUV9TRVQgICAgICAgICAgICAgICAgMHgwNDAwOTQJLy8gUmlkZXIgUENJIEV4cHJlc3MgdHJhRkZpYyBjbGFzcyByZXF1ZXN0IHNldAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBSaWRlcgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyBQQ0kgQ29tcGF0aWJsZSBIZWFkZXIKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkcwICAgICAgICAgICAgICAgICAgMHgwNTAwMDAKKyNkZWZpbmUgIFJEUl9WRU5ET1JfREVWSUNFX0lEX0NGRyAgMHgwNTAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGRzEgICAgICAgICAgICAgICAgICAweDA1MDAwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHMiAgICAgICAgICAgICAgICAgIDB4MDUwMDA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkczICAgICAgICAgICAgICAgICAgMHgwNTAwMEMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGRzQgICAgICAgICAgICAgICAgICAweDA1MDAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHNSAgICAgICAgICAgICAgICAgIDB4MDUwMDE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkc2ICAgICAgICAgICAgICAgICAgMHgwNTAwMTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGRzcgICAgICAgICAgICAgICAgICAweDA1MDAxQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHOCAgICAgICAgICAgICAgICAgIDB4MDUwMDIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkc5ICAgICAgICAgICAgICAgICAgMHgwNTAwMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGR0EgICAgICAgICAgICAgICAgICAweDA1MDAyOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHQiAgICAgICAgICAgICAgICAgIDB4MDUwMDJDCisjZGVmaW5lICBSRFJfU1VTU1lTVEVNX0lEX0NGRyAgICAgIDB4MDUwMDJDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkdDICAgICAgICAgICAgICAgICAgMHgwNTAwMzAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0NGR0QgICAgICAgICAgICAgICAgICAweDA1MDAzNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQ0ZHRSAgICAgICAgICAgICAgICAgIDB4MDUwMDM4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9DRkdGICAgICAgICAgICAgICAgICAgMHgwNTAwM0MKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gUENJLUV4cHJlc3MgQ2FwYWJpbGl0aWVzCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUEVDQVAgICAgICAgICAgICAgICAgIDB4MDUwMDQwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9QRURFVkNBUCAgICAgICAgICAgICAgMHgwNTAwNDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1BFREVWU0MgICAgICAgICAgICAgICAweDA1MDA0OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUEVMSU5LQ0FQICAgICAgICAgICAgIDB4MDUwMDRDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9QRUxJTktTQyAgICAgICAgICAgICAgMHgwNTAwNTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1BNSUNBUCAgICAgICAgICAgICAgICAweDA1MDA4MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUE1DU1IgICAgICAgICAgICAgICAgIDB4MDUwMDg0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WUERDQVAgICAgICAgICAgICAgICAgMHgwNTAwOTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZQRERBVEEgICAgICAgICAgICAgICAweDA1MDA5NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTVNJQ0FQICAgICAgICAgICAgICAgIDB4MDUwMEEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9NU0lBUkwgICAgICAgICAgICAgICAgMHgwNTAwQTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX01TSUFSVSAgICAgICAgICAgICAgICAweDA1MDBBOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTVNJREFUQSAgICAgICAgICAgICAgIDB4MDUwMEFDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFBDSSBFeHByZXNzIEV4dGVuZGVkIENhcGFiaWxpdGllcworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUlhDQVAgICAgICAgICAgICAgICAweDA1MDEwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQUVSVUVTVEEgICAgICAgICAgICAgIDB4MDUwMTA0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BRVJVRU1TSyAgICAgICAgICAgICAgMHgwNTAxMDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUlVFU0VWICAgICAgICAgICAgICAweDA1MDEwQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQUVSQ0VTVEEgICAgICAgICAgICAgIDB4MDUwMTEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BRVJDRU1TSyAgICAgICAgICAgICAgMHgwNTAxMTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUkNDICAgICAgICAgICAgICAgICAweDA1MDExOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQUVSSEwwICAgICAgICAgICAgICAgIDB4MDUwMTFDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9BRVJITDEgICAgICAgICAgICAgICAgMHgwNTAxMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FFUkhMMiAgICAgICAgICAgICAgICAweDA1MDEyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfQUVSSEwzICAgICAgICAgICAgICAgIDB4MDUwMTI4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1hDQVAgICAgICAgICAgICAgICAgMHgwNTAyMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQ0FQMSAgICAgICAgICAgICAgICAweDA1MDIwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNDQVAyICAgICAgICAgICAgICAgIDB4MDUwMjA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1NDICAgICAgICAgICAgICAgICAgMHgwNTAyMEMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjBfQ0FQICAgICAgICAgICAgICAweDA1MDIxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSMF9DVFJMICAgICAgICAgICAgIDB4MDUwMjE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IwX1NUQVQgICAgICAgICAgICAgMHgwNTAyMTgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjFfQ0FQICAgICAgICAgICAgICAweDA1MDIxQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSMV9DVFJMICAgICAgICAgICAgIDB4MDUwMjIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IxX1NUQVQgICAgICAgICAgICAgMHgwNTAyMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjJfQ0FQICAgICAgICAgICAgICAweDA1MDIyOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSMl9DVFJMICAgICAgICAgICAgIDB4MDUwMjJDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IyX1NUQVQgICAgICAgICAgICAgMHgwNTAyMzAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjNfQ0FQICAgICAgICAgICAgICAweDA1MDIzNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSM19DVFJMICAgICAgICAgICAgIDB4MDUwMjM4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ1IzX1NUQVQgICAgICAgICAgICAgMHgwNTAyM0MKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQVJCMCAgICAgICAgICAgICAgICAweDA1MDI0MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNBUkIxICAgICAgICAgICAgICAgIDB4MDUwMjQ0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ0FSQjIgICAgICAgICAgICAgICAgMHgwNTAyNDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQVJCMyAgICAgICAgICAgICAgICAweDA1MDI0QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNBUkI0ICAgICAgICAgICAgICAgIDB4MDUwMjUwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9WQ0FSQjUgICAgICAgICAgICAgICAgMHgwNTAyNTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDQVJCNiAgICAgICAgICAgICAgICAweDA1MDI1OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNBUkI3ICAgICAgICAgICAgICAgIDB4MDUwMjVDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SRFJTVEFUMCAgICAgICAgICAgICAgMHgwNTAzMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JEUlNUQVQxICAgICAgICAgICAgICAweDA1MDMwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUkRSQ1RMMCAgICAgICAgICAgICAgIDB4MDUwMzA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SRFJDVEwxICAgICAgICAgICAgICAgMHgwNTAzMEMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVHJhbnNhY3Rpb24gTGF5ZXIgUmVnaXN0ZXJzCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVExTVEFUMCAgICAgICAgICAgICAgIDB4MDUwMzEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9UTFNUQVQxICAgICAgICAgICAgICAgMHgwNTAzMTQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1RMQ1RMMCAgICAgICAgICAgICAgICAweDA1MDMxOAorI2RlZmluZSAgRkxEX0NGR19VUl9DUExfTU9ERSAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lICBGTERfQ0ZHX0NPUlJfRVJSX1FVSVRFICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgIEZMRF9DRkdfUkNCX0NLX0VOICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSAgRkxEX0NGR19CTkRSWV9DS19FTiAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lICBGTERfQ0ZHX0JZVEVfRU5fQ0tfRU4gICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgIEZMRF9DRkdfUkVMQVhfT1JERVJfTVNLICAgMHgwMDAwMDAwMgorI2RlZmluZSAgRkxEX0NGR19UQUdfT1JERVJfRU4gICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9UTENUTDEgICAgICAgICAgICAgICAgMHgwNTAzMUMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JFUVJDQUwgICAgICAgICAgICAgICAweDA1MDMyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUkVRUkNBVSAgICAgICAgICAgICAgIDB4MDUwMzI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SRVFFUEEgICAgICAgICAgICAgICAgMHgwNTAzMjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JFUUNUUkwgICAgICAgICAgICAgICAweDA1MDMyQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUkVRU1RBVCAgICAgICAgICAgICAgIDB4MDUwMzMwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9UTF9URVNUICAgICAgICAgICAgICAgMHgwNTAzMzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1ZDUjAxX0NUTCAgICAgICAgICAgICAweDA1MDM0OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfVkNSMjNfQ1RMICAgICAgICAgICAgIDB4MDUwMzRDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SWF9WQ1IwX0ZDICAgICAgICAgICAgMHgwNTAzNTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX1JYX1ZDUjFfRkMgICAgICAgICAgICAweDA1MDM1NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfUlhfVkNSMl9GQyAgICAgICAgICAgIDB4MDUwMzU4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SWF9WQ1IzX0ZDICAgICAgICAgICAgMHgwNTAzNUMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRGF0YSBMaW5rIExheWVyIFJlZ2lzdGVycworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0RMTFNUQVQgICAgICAgICAgICAgICAweDA1MDM2MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfRExMQ1RSTCAgICAgICAgICAgICAgIDB4MDUwMzY0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9SRVBMQVlUTyAgICAgICAgICAgICAgMHgwNTAzNjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX0FDS0xBVFRPICAgICAgICAgICAgICAweDA1MDM2QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBNQUMgTGF5ZXIgUmVnaXN0ZXJzCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTUFDU1RBVDAgICAgICAgICAgICAgIDB4MDUwMzgwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9NQUNTVEFUMSAgICAgICAgICAgICAgMHgwNTAzODQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX01BQ0NUUkwwICAgICAgICAgICAgICAweDA1MDM4OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTUFDQ1RSTDEgICAgICAgICAgICAgIDB4MDUwMzhDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFJEUl9NQUNDVFJMMiAgICAgICAgICAgICAgMHgwNTAzOTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgUkRSX01BQ19MQl9EQVRBICAgICAgICAgICAweDA1MDM5NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBSRFJfTDBTX0VYSVRfTEFUICAgICAgICAgIDB4MDUwMzk4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIERNQUMKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTFfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMDAJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyX1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDA0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BM19QVFIxICAgICAgICAgICAgICAgICAweDEwMDAwOAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTRfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMEMJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE1X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDEwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNl9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAxNAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCM2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTdfUFRSMSAgICAgICAgICAgICAgICAgMHgxMDAwMTgJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE4X1BUUjEgICAgICAgICAgICAgICAgIDB4MTAwMDFDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOV9QVFIxICAgICAgICAgICAgICAgICAweDEwMDAyMAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCM5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTEwX1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwMjQJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTFfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAyOAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMxMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMl9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDJDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzEyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTEzX1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwMzAJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMTMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTRfUFRSMSAgICAgICAgICAgICAgICAweDEwMDAzNAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDM4CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE2X1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwM0MJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTdfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA0MAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMxNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDQ0CS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzE4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE5X1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwNDgJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMTkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjBfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA0QwkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMV9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDUwCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzIxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIyX1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwNTQJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMjIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjNfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA1OAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMyMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNF9QVFIxICAgICAgICAgICAgICAgIDB4MTAwMDVDCS8vIERNQSBDdXJyZW50IFB0ciA6IENoIzI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI1X1BUUjEgICAgICAgICAgICAgICAgMHgxMDAwNjAJLy8gRE1BIEN1cnJlbnQgUHRyIDogQ2gjMjUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjZfUFRSMSAgICAgICAgICAgICAgICAweDEwMDA2NAkvLyBETUEgQ3VycmVudCBQdHIgOiBDaCMyNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExX1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDgwCS8vIERNQSBUYWIgUHRyIDogQ2gjMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyX1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDg0CS8vIERNQSBUYWIgUHRyIDogQ2gjMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEzX1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDg4CS8vIERNQSBUYWIgUHRyIDogQ2gjMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE0X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDhDCS8vIERNQSBUYWIgUHRyIDogQ2gjNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE1X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDkwCS8vIERNQSBUYWIgUHRyIDogQ2gjNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE2X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDk0CS8vIERNQSBUYWIgUHRyIDogQ2gjNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE3X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDk4CS8vIERNQSBUYWIgUHRyIDogQ2gjNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE4X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMDlDCS8vIERNQSBUYWIgUHRyIDogQ2gjOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE5X1BUUjIgICAgICAgICAgICAgICAgIDB4MTAwMEEwCS8vIERNQSBUYWIgUHRyIDogQ2gjOQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMF9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEE0CS8vIERNQSBUYWIgUHRyIDogQ2gjMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTFfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBBOAkvLyBETUEgVGFiIFB0ciA6IENoIzExCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTEyX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQUMJLy8gRE1BIFRhYiBQdHIgOiBDaCMxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExM19QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEIwCS8vIERNQSBUYWIgUHRyIDogQ2gjMTMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTRfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBCNAkvLyBETUEgVGFiIFB0ciA6IENoIzE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE1X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQjgJLy8gRE1BIFRhYiBQdHIgOiBDaCMxNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNl9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEJDCS8vIERNQSBUYWIgUHRyIDogQ2gjMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTdfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBDMAkvLyBETUEgVGFiIFB0ciA6IENoIzE3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE4X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwQzQJLy8gRE1BIFRhYiBQdHIgOiBDaCMxOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEM4CS8vIERNQSBUYWIgUHRyIDogQ2gjMTkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjBfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBDQwkvLyBETUEgVGFiIFB0ciA6IENoIzIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIxX1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwRDAJLy8gRE1BIFRhYiBQdHIgOiBDaCMyMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMl9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEQ0CS8vIERNQSBUYWIgUHRyIDogQ2gjMjIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjNfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBEOAkvLyBETUEgVGFiIFB0ciA6IENoIzIzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI0X1BUUjIgICAgICAgICAgICAgICAgMHgxMDAwREMJLy8gRE1BIFRhYiBQdHIgOiBDaCMyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNV9QVFIyICAgICAgICAgICAgICAgIDB4MTAwMEUwCS8vIERNQSBUYWIgUHRyIDogQ2gjMjUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjZfUFRSMiAgICAgICAgICAgICAgICAweDEwMDBFNAkvLyBETUEgVGFiIFB0ciA6IENoIzI2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTFfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMDAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyX0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTA0CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BM19DTlQxICAgICAgICAgICAgICAgICAweDEwMDEwOAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTRfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMEMJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE1X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTEwCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BNl9DTlQxICAgICAgICAgICAgICAgICAweDEwMDExNAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCM2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTdfQ05UMSAgICAgICAgICAgICAgICAgMHgxMDAxMTgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE4X0NOVDEgICAgICAgICAgICAgICAgIDB4MTAwMTFDCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BOV9DTlQxICAgICAgICAgICAgICAgICAweDEwMDEyMAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCM5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTEwX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMjQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTFfQ05UMSAgICAgICAgICAgICAgICAweDEwMDEyOAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMxMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMl9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTJDCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzEyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTEzX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxMzAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTRfQ05UMSAgICAgICAgICAgICAgICAweDEwMDEzNAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMxNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTM4CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE2X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxM0MJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTdfQ05UMSAgICAgICAgICAgICAgICAweDEwMDE0MAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMxNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTQ0CS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzE4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE5X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNDgJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMTkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjBfQ05UMSAgICAgICAgICAgICAgICAweDEwMDE0QwkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMV9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTUwCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzIxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIyX0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNTQJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjNfQ05UMSAgICAgICAgICAgICAgICAweDEwMDE1OAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMyMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNF9DTlQxICAgICAgICAgICAgICAgIDB4MTAwMTVDCS8vIERNQSBCdUZGZXIgU2l6ZSA6IENoIzI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI1X0NOVDEgICAgICAgICAgICAgICAgMHgxMDAxNjAJLy8gRE1BIEJ1RkZlciBTaXplIDogQ2gjMjUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjZfQ05UMSAgICAgICAgICAgICAgICAweDEwMDE2NAkvLyBETUEgQnVGRmVyIFNpemUgOiBDaCMyNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExX0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTgwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyX0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTg0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEzX0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTg4CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE0X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMThDCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE1X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTkwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE2X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTk0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE3X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTk4CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE4X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMTlDCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUE5X0NOVDIgICAgICAgICAgICAgICAgIDB4MTAwMUEwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjOQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExMF9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUE0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTFfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFBOAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzExCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTEyX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQUMJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExM19DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUIwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTRfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFCNAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE1X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQjgJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExNl9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUJDCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMTdfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFDMAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzE3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTE4X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxQzQJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMxOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUExOV9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUM4CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMTkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjBfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFDQwkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTIxX0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxRDAJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMyMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyMl9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUQ0CS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMjIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjNfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFEOAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzIzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIERNQTI0X0NOVDIgICAgICAgICAgICAgICAgMHgxMDAxREMJLy8gRE1BIFRhYmxlIFNpemUgOiBDaCMyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBETUEyNV9DTlQyICAgICAgICAgICAgICAgIDB4MTAwMUUwCS8vIERNQSBUYWJsZSBTaXplIDogQ2gjMjUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRE1BMjZfQ05UMiAgICAgICAgICAgICAgICAweDEwMDFFNAkvLyBETUEgVGFibGUgU2l6ZSA6IENoIzI2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAvLyBJVEcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFRNX0NOVF9MRFcgICAgICAgICAgICAgICAgMHgxMTAwMDAJLy8gVGltZXIgOiBDb3VudGVyIGxvdworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBUTV9DTlRfVVcgICAgICAgICAgICAgICAgIDB4MTEwMDA0CS8vIFRpbWVyIDogQ291bnRlciBoaWdoIHdvcmQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVE1fTE1UX0xEVyAgICAgICAgICAgICAgICAweDExMDAwOAkvLyBUaW1lciA6IExpbWl0IGxvdworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBUTV9MTVRfVVcgICAgICAgICAgICAgICAgIDB4MTEwMDBDCS8vIFRpbWVyIDogTGltaXQgaGlnaCB3b3JkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEdQMF9JTyAgICAgICAgICAgICAgICAgICAgMHgxMTAwMTAJLy8gR1BJTyBvdXRwdXQgZW5hYmxlcyBkYXRhIEkvTworI2RlZmluZSAgRkxEX0dQX09FICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCS8vIEdQSU86IEdQX09FIG91dHB1dCBlbmFibGUKKyNkZWZpbmUgIEZMRF9HUF9JTiAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAkvLyBHUElPOiBHUF9JTiBzdGF0dXMKKyNkZWZpbmUgIEZMRF9HUF9PVVQgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgkvLyBHUElPOiBHUF9PVVQgY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBHUElPX0lTTSAgICAgICAgICAgICAgICAgIDB4MTEwMDE0CS8vIEdQSU8gaW50ZXJydXB0IHNlbnNpdGl2aXR5IG1vZGUKKyNkZWZpbmUgIEZMRF9HUF9JU01fU05TICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSAgRkxEX0dQX0lTTV9QT0wgICAgICAgICAgICAweDAwMDAwMDA3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFNPRlRfUkVTRVQgICAgICAgICAgICAgICAgMHgxMTAwMUMJLy8gT3V0cHV0IHN5c3RlbSByZXNldCByZWcKKyNkZWZpbmUgIEZMRF9QRUNPU19TT0ZUX1JFU0VUICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBNQzQxNl9SV0QgICAgICAgICAgICAgICAgIDB4MTEwMDIwCS8vIE1DNDE2IEdQSU9bMTg6M10gcGluCisjZGVmaW5lICBNQzQxNl9PRU4gICAgICAgICAgICAgICAgIDB4MTEwMDI0CS8vIE91dHB1dCBlbmFibGUgb2YgR1BJT1sxODozXQorI2RlZmluZSAgTUM0MTZfQ1RMICAgICAgICAgICAgICAgICAweDExMDAyOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBTFRfUElOX09VVF9TRUwgICAgICAgICAgIDB4MTEwMDJDCS8vIEFsdGVybmF0ZSBHUElPIG91dHB1dCBzZWxlY3QKKworI2RlZmluZSAgRkxEX0FMVF9HUElPX09VVF9TRUwgICAgICAweEYwMDAwMDAwCisvLyAwICAgICAgICAgIERpc2FibGVkIDwtLSBkZWZhdWx0CisvLyAxICAgICAgICAgIEdQSU9bMF0KKy8vIDIgICAgICAgICAgR1BJT1sxMF0KKy8vIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTAorLy8gNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0KKy8vIDUgICAgICAgICAgVklQXzY1Nl9DTEsKKy8vIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXQorLy8gNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdCisvLyA4ICAgICAgICAgIEFUVF9JRgorCisjZGVmaW5lICBGTERfQVVYX1BMTF9DTEtfQUxUX1NFTCAgIDB4MEYwMDAwMDAKKy8vIDAgICAgICAgICAgQVVYX1BMTF9DTEs8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBHUElPWzJdCisvLyAyICAgICAgICAgIEdQSU9bMTBdCisvLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKKy8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCisvLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCisvLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KKy8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorCisjZGVmaW5lICBGTERfSVJfVFhfQUxUX1NFTCAgICAgICAgIDB4MDBGMDAwMDAKKy8vIDAgICAgICAgICAgSVJfVFggPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgR1BJT1sxXQorLy8gMiAgICAgICAgICBHUElPWzEwXQorLy8gMyAgICAgICAgICBWSVBfNjU2X0RBVEFfVkFMCisvLyA0ICAgICAgICAgIFZJUF82NTZfREFUQVswXQorLy8gNSAgICAgICAgICBWSVBfNjU2X0NMSworLy8gNiAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzFdCisvLyA3ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMF0KKworI2RlZmluZSAgRkxEX0lSX1JYX0FMVF9TRUwgICAgICAgICAweDAwMEYwMDAwCisvLyAwICAgICAgICAgIElSX1JYIDwtLSBkZWZhdWx0CisvLyAxICAgICAgICAgIEdQSU9bMF0KKy8vIDIgICAgICAgICAgR1BJT1sxMF0KKy8vIDMgICAgICAgICAgVklQXzY1Nl9EQVRBX1ZBTAorLy8gNCAgICAgICAgICBWSVBfNjU2X0RBVEFbMF0KKy8vIDUgICAgICAgICAgVklQXzY1Nl9DTEsKKy8vIDYgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFsxXQorLy8gNyAgICAgICAgICBWSVBfNjU2X0RBVEFfRVhUWzBdCisKKyNkZWZpbmUgIEZMRF9HUElPMTBfQUxUX1NFTCAgICAgICAgMHgwMDAwRjAwMAorLy8gMCAgICAgICAgICBHUElPWzEwXSA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBHUElPWzBdCisvLyAyICAgICAgICAgIEdQSU9bMTBdCisvLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKKy8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCisvLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCisvLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KKy8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorCisjZGVmaW5lICBGTERfR1BJTzJfQUxUX1NFTCAgICAgICAgIDB4MDAwMDBGMDAKKy8vIDAgICAgICAgICAgR1BJT1syXSA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBHUElPWzFdCisvLyAyICAgICAgICAgIEdQSU9bMTBdCisvLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKKy8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCisvLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCisvLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KKy8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorCisjZGVmaW5lICBGTERfR1BJTzFfQUxUX1NFTCAgICAgICAgIDB4MDAwMDAwRjAKKy8vIDAgICAgICAgICAgR1BJT1sxXSA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBHUElPWzBdCisvLyAyICAgICAgICAgIEdQSU9bMTBdCisvLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKKy8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCisvLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCisvLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KKy8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorCisjZGVmaW5lICBGTERfR1BJTzBfQUxUX1NFTCAgICAgICAgIDB4MDAwMDAwMEYKKy8vIDAgICAgICAgICAgR1BJT1swXSA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBHUElPWzFdCisvLyAyICAgICAgICAgIEdQSU9bMTBdCisvLyAzICAgICAgICAgIFZJUF82NTZfREFUQV9WQUwKKy8vIDQgICAgICAgICAgVklQXzY1Nl9EQVRBWzBdCisvLyA1ICAgICAgICAgIFZJUF82NTZfQ0xLCisvLyA2ICAgICAgICAgIFZJUF82NTZfREFUQV9FWFRbMV0KKy8vIDcgICAgICAgICAgVklQXzY1Nl9EQVRBX0VYVFswXQorCisjZGVmaW5lICBBTFRfUElOX0lOX1NFTCAgICAgICAgICAgIDB4MTEwMDMwCS8vIEFsdGVybmF0ZSBHUElPIGlucHV0IHNlbGVjdAorCisjZGVmaW5lICBGTERfR1BJTzEwX0FMVF9JTl9TRUwgICAgIDB4MDAwMEYwMDAKKy8vIDAgICAgICAgICAgR1BJT1sxMF0gPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgSVJfUlgKKy8vIDIgICAgICAgICAgSVJfVFgKKy8vIDMgICAgICAgICAgQVVYX1BMTF9DTEsKKy8vIDQgICAgICAgICAgSUZfQVRUX1NFTAorLy8gNSAgICAgICAgICBHUElPWzBdCisvLyA2ICAgICAgICAgIEdQSU9bMV0KKy8vIDcgICAgICAgICAgR1BJT1syXQorCisjZGVmaW5lICBGTERfR1BJTzJfQUxUX0lOX1NFTCAgICAgIDB4MDAwMDBGMDAKKy8vIDAgICAgICAgICAgR1BJT1syXSA8LS0gZGVmYXVsdAorLy8gMSAgICAgICAgICBJUl9SWAorLy8gMiAgICAgICAgICBJUl9UWAorLy8gMyAgICAgICAgICBBVVhfUExMX0NMSworLy8gNCAgICAgICAgICBJRl9BVFRfU0VMCisKKyNkZWZpbmUgIEZMRF9HUElPMV9BTFRfSU5fU0VMICAgICAgMHgwMDAwMDBGMAorLy8gMCAgICAgICAgICBHUElPWzFdIDwtLSBkZWZhdWx0CisvLyAxICAgICAgICAgIElSX1JYCisvLyAyICAgICAgICAgIElSX1RYCisvLyAzICAgICAgICAgIEFVWF9QTExfQ0xLCisvLyA0ICAgICAgICAgIElGX0FUVF9TRUwKKworI2RlZmluZSAgRkxEX0dQSU8wX0FMVF9JTl9TRUwgICAgICAweDAwMDAwMDBGCisvLyAwICAgICAgICAgIEdQSU9bMF0gPC0tIGRlZmF1bHQKKy8vIDEgICAgICAgICAgSVJfUlgKKy8vIDIgICAgICAgICAgSVJfVFgKKy8vIDMgICAgICAgICAgQVVYX1BMTF9DTEsKKy8vIDQgICAgICAgICAgSUZfQVRUX1NFTAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBURVNUX0JVU19DVEwxICAgICAgICAgICAgIDB4MTEwMDQwCS8vIFRlc3QgYnVzIGNvbnRyb2wgcmVnaXN0ZXIgIzEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVEVTVF9CVVNfQ1RMMiAgICAgICAgICAgICAweDExMDA0NAkvLyBUZXN0IGJ1cyBjb250cm9sIHJlZ2lzdGVyICMyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIENMS19ERUxBWSAgICAgICAgICAgICAgICAgMHgxMTAwNDgJLy8gQ2xvY2sgZGVsYXkKKyNkZWZpbmUgIEZMRF9NT0VfQ0xLX0RJUyAgICAgICAgICAgMHg4MDAwMDAwMAkvLyBEaXNhYmxlIE1vRSBjbG9jaworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBQQURfQ1RSTCAgICAgICAgICAgICAgICAgIDB4MTEwMDY4CS8vIFBhZCBkcml2ZSBzdHJlbmd0aCBjb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIE1CSVNUX0NUUkwgICAgICAgICAgICAgICAgMHgxMTAwNTAJLy8gU1JBTSBtZW1vcnkgYnVpbHQtaW4gc2VsZiB0ZXN0IGNvbnRyb2wKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgTUJJU1RfU1RBVCAgICAgICAgICAgICAgICAweDExMDA1NAkvLyBTUkFNIG1lbW9yeSBidWlsdC1pbiBzZWxmIHRlc3Qgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFBMTCByZWdpc3RlcnMKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFBMTF9BX0lOVF9GUkFDICAgICAgICAgICAgMHgxMTAwODgKKyNkZWZpbmUgIFBMTF9BX1BPU1RfU1RBVF9CSVNUICAgICAgMHgxMTAwOEMKKyNkZWZpbmUgIFBMTF9CX0lOVF9GUkFDICAgICAgICAgICAgMHgxMTAwOTAKKyNkZWZpbmUgIFBMTF9CX1BPU1RfU1RBVF9CSVNUICAgICAgMHgxMTAwOTQKKyNkZWZpbmUgIFBMTF9DX0lOVF9GUkFDICAgICAgICAgICAgMHgxMTAwOTgKKyNkZWZpbmUgIFBMTF9DX1BPU1RfU1RBVF9CSVNUICAgICAgMHgxMTAwOUMKKyNkZWZpbmUgIFBMTF9EX0lOVF9GUkFDICAgICAgICAgICAgMHgxMTAwQTAKKyNkZWZpbmUgIFBMTF9EX1BPU1RfU1RBVF9CSVNUICAgICAgMHgxMTAwQTQKKworI2RlZmluZSAgQ0xLX1JTVCAgICAgICAgICAgICAgICAgICAweDExMDAyQworI2RlZmluZSAgRkxEX1ZJRF9JX0NMS19OT0UgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lICBGTERfVklEX0pfQ0xLX05PRSAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgIEZMRF9VU0VfQUxUX1BMTF9SRUYgICAgICAgMHgwMDAwNDAwMAorCisjZGVmaW5lICBWSURfQ0hfTU9ERV9TRUwgICAgICAgICAgIDB4MTEwMDc4CisjZGVmaW5lICBWSURfQ0hfQ0xLX1NFTCAgICAgICAgICAgIDB4MTEwMDdDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZCSV9BX0RNQSAgICAgICAgICAgICAgICAgMHgxMzAwMDgJLy8gVkJJIEEgRE1BIGRhdGEgcG9ydAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQV9WSVBfQ1RMICAgICAgICAgICAgIDB4MTMwMDgwCS8vIFZpZGVvIEEgVklQIGZvcm1hdCBjb250cm9sCisjZGVmaW5lICBGTERfVklQX01PREUgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0FfUElYRUxfRlJNVCAgICAgICAgICAweDEzMDA4NAkvLyBWaWRlbyBBIHBpeGVsIGZvcm1hdAorI2RlZmluZSAgRkxEX1ZJRF9BX0dBTU1BX0RJUyAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lICBGTERfVklEX0FfRk9STUFUICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgIEZMRF9WSURfQV9HQU1NQV9GQUNUT1IgICAgMHgwMDAwMDAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQV9WQklfQ1RMICAgICAgICAgICAgIDB4MTMwMDg4CS8vIFZpZGVvIEEgVkJJIG1pc2NlbGxhbmVvdXMgY29udHJvbAorI2RlZmluZSAgRkxEX1ZJRF9BX1ZJUF9FWFQgICAgICAgICAweDAwMDAwMDAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9CX0RNQSAgICAgICAgICAgICAgICAgMHgxMzAxMDAJLy8gVmlkZW8gQiBETUEgZGF0YSBwb3J0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZCSV9CX0RNQSAgICAgICAgICAgICAgICAgMHgxMzAxMDgJLy8gVkJJIEIgRE1BIGRhdGEgcG9ydAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQl9TUkNfU0VMICAgICAgICAgICAgIDB4MTMwMTQ0CS8vIFZpZGVvIEIgc291cmNlIHNlbGVjdAorI2RlZmluZSAgRkxEX1ZJRF9CX1NSQ19TRUwgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9CX0xOR1RIICAgICAgICAgICAgICAgMHgxMzAxNTAJLy8gVmlkZW8gQiBsaW5lIGxlbmd0aAorI2RlZmluZSAgRkxEX1ZJRF9CX0xOX0xOR1RIICAgICAgICAweDAwMDAwRkZGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFZJRF9CX1ZJUF9DVEwgICAgICAgICAgICAgMHgxMzAxODAJLy8gVmlkZW8gQiBWSVAgZm9ybWF0IGNvbnRyb2wKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgVklEX0JfUElYRUxfRlJNVCAgICAgICAgICAweDEzMDE4NAkvLyBWaWRlbyBCIHBpeGVsIGZvcm1hdAorI2RlZmluZSAgRkxEX1ZJRF9CX0dBTU1BX0RJUyAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lICBGTERfVklEX0JfRk9STUFUICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgIEZMRF9WSURfQl9HQU1NQV9GQUNUT1IgICAgMHgwMDAwMDAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQ19ETUEgICAgICAgICAgICAgICAgIDB4MTMwMjAwCS8vIFZpZGVvIEMgRE1BIGRhdGEgcG9ydAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBWSURfQ19MTkdUSCAgICAgICAgICAgICAgIDB4MTMwMjUwCS8vIFZpZGVvIEMgbGluZSBsZW5ndGgKKyNkZWZpbmUgIEZMRF9WSURfQ19MTl9MTkdUSCAgICAgICAgMHgwMDAwMEZGRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBWaWRlbyBEZXN0aW5hdGlvbiBDaGFubmVscworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfRFNUX0FfR1BDTlQgICAgICAgICAgIDB4MTMwMDIwCS8vIFZpZGVvIEEgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9EU1RfQl9HUENOVCAgICAgICAgICAgMHgxMzAxMjAJLy8gVmlkZW8gQiBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX0RTVF9DX0dQQ05UICAgICAgICAgICAweDEzMDIyMAkvLyBWaWRlbyBDIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfRFNUX0RfR1BDTlQgICAgICAgICAgIDB4MTMwMzIwCS8vIFZpZGVvIEQgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9EU1RfRV9HUENOVCAgICAgICAgICAgMHgxMzA0MjAJLy8gVmlkZW8gRSBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX0RTVF9GX0dQQ05UICAgICAgICAgICAweDEzMDUyMAkvLyBWaWRlbyBGIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfRFNUX0dfR1BDTlQgICAgICAgICAgIDB4MTMwNjIwCS8vIFZpZGVvIEcgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9EU1RfSF9HUENOVCAgICAgICAgICAgMHgxMzA3MjAJLy8gVmlkZW8gSCBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9EU1RfQV9HUENOVF9DVEwgICAgICAgMHgxMzAwMzAJLy8gVmlkZW8gQSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9CX0dQQ05UX0NUTCAgICAgICAweDEzMDEzMAkvLyBWaWRlbyBCIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0NfR1BDTlRfQ1RMICAgICAgIDB4MTMwMjMwCS8vIFZpZGVvIEMgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfRF9HUENOVF9DVEwgICAgICAgMHgxMzAzMzAJLy8gVmlkZW8gRCBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9FX0dQQ05UX0NUTCAgICAgICAweDEzMDQzMAkvLyBWaWRlbyBFIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0ZfR1BDTlRfQ1RMICAgICAgIDB4MTMwNTMwCS8vIFZpZGVvIEYgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfR19HUENOVF9DVEwgICAgICAgMHgxMzA2MzAJLy8gVmlkZW8gRyBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9IX0dQQ05UX0NUTCAgICAgICAweDEzMDczMAkvLyBWaWRlbyBIIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgVklEX0RTVF9BX0RNQV9DVEwgICAgICAgICAweDEzMDA0MAkvLyBWaWRlbyBBIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0JfRE1BX0NUTCAgICAgICAgIDB4MTMwMTQwCS8vIFZpZGVvIEIgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfQ19ETUFfQ1RMICAgICAgICAgMHgxMzAyNDAJLy8gVmlkZW8gQyBETUEgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9EX0RNQV9DVEwgICAgICAgICAweDEzMDM0MAkvLyBWaWRlbyBEIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0VfRE1BX0NUTCAgICAgICAgIDB4MTMwNDQwCS8vIFZpZGVvIEUgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfRl9ETUFfQ1RMICAgICAgICAgMHgxMzA1NDAJLy8gVmlkZW8gRiBETUEgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9HX0RNQV9DVEwgICAgICAgICAweDEzMDY0MAkvLyBWaWRlbyBHIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0hfRE1BX0NUTCAgICAgICAgIDB4MTMwNzQwCS8vIFZpZGVvIEggRE1BIGNvbnRyb2wKKworI2RlZmluZSAgRkxEX1ZJRF9SSVNDX0VOICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICBGTERfVklEX0ZJRk9fRU4gICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfRFNUX0FfVklQX0NUTCAgICAgICAgIDB4MTMwMDgwCS8vIFZpZGVvIEEgVklQIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfQl9WSVBfQ1RMICAgICAgICAgMHgxMzAxODAJLy8gVmlkZW8gQiBWSVAgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9DX1ZJUF9DVEwgICAgICAgICAweDEzMDI4MAkvLyBWaWRlbyBDIFZJUCBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0RfVklQX0NUTCAgICAgICAgIDB4MTMwMzgwCS8vIFZpZGVvIEQgVklQIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfRV9WSVBfQ1RMICAgICAgICAgMHgxMzA0ODAJLy8gVmlkZW8gRSBWSVAgY29udHJvbAorI2RlZmluZSAgVklEX0RTVF9GX1ZJUF9DVEwgICAgICAgICAweDEzMDU4MAkvLyBWaWRlbyBGIFZJUCBjb250cm9sCisjZGVmaW5lICBWSURfRFNUX0dfVklQX0NUTCAgICAgICAgIDB4MTMwNjgwCS8vIFZpZGVvIEcgVklQIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9EU1RfSF9WSVBfQ1RMICAgICAgICAgMHgxMzA3ODAJLy8gVmlkZW8gSCBWSVAgY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9EU1RfQV9QSVhfRlJNVCAgICAgICAgMHgxMzAwODQJLy8gVmlkZW8gQSBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfQl9QSVhfRlJNVCAgICAgICAgMHgxMzAxODQJLy8gVmlkZW8gQiBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfQ19QSVhfRlJNVCAgICAgICAgMHgxMzAyODQJLy8gVmlkZW8gQyBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfRF9QSVhfRlJNVCAgICAgICAgMHgxMzAzODQJLy8gVmlkZW8gRCBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfRV9QSVhfRlJNVCAgICAgICAgMHgxMzA0ODQJLy8gVmlkZW8gRSBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfRl9QSVhfRlJNVCAgICAgICAgMHgxMzA1ODQJLy8gVmlkZW8gRiBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfR19QSVhfRlJNVCAgICAgICAgMHgxMzA2ODQJLy8gVmlkZW8gRyBQaXhlbCBmb3JtYXQKKyNkZWZpbmUgIFZJRF9EU1RfSF9QSVhfRlJNVCAgICAgICAgMHgxMzA3ODQJLy8gVmlkZW8gSCBQaXhlbCBmb3JtYXQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVmlkZW8gU291cmNlIENoYW5uZWxzCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9TUkNfQV9HUENOVF9DVEwgICAgICAgMHgxMzA4MDQJLy8gVmlkZW8gQSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19CX0dQQ05UX0NUTCAgICAgICAweDEzMDkwNAkvLyBWaWRlbyBCIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0NfR1BDTlRfQ1RMICAgICAgIDB4MTMwQTA0CS8vIFZpZGVvIEMgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfRF9HUENOVF9DVEwgICAgICAgMHgxMzBCMDQJLy8gVmlkZW8gRCBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19FX0dQQ05UX0NUTCAgICAgICAweDEzMEMwNAkvLyBWaWRlbyBFIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0ZfR1BDTlRfQ1RMICAgICAgIDB4MTMwRDA0CS8vIFZpZGVvIEYgZ2VuZXJhbCBwdXJwb3NlIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfSV9HUENOVF9DVEwgICAgICAgMHgxMzBFMDQJLy8gVmlkZW8gSSBnZW5lcmFsIHB1cnBvc2UgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19KX0dQQ05UX0NUTCAgICAgICAweDEzMEYwNAkvLyBWaWRlbyBKIGdlbmVyYWwgcHVycG9zZSBjb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgVklEX1NSQ19BX0dQQ05UICAgICAgICAgICAweDEzMDgwOAkvLyBWaWRlbyBBIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfU1JDX0JfR1BDTlQgICAgICAgICAgIDB4MTMwOTA4CS8vIFZpZGVvIEIgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9TUkNfQ19HUENOVCAgICAgICAgICAgMHgxMzBBMDgJLy8gVmlkZW8gQyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX1NSQ19EX0dQQ05UICAgICAgICAgICAweDEzMEIwOAkvLyBWaWRlbyBEIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfU1JDX0VfR1BDTlQgICAgICAgICAgIDB4MTMwQzA4CS8vIFZpZGVvIEUgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKyNkZWZpbmUgIFZJRF9TUkNfRl9HUENOVCAgICAgICAgICAgMHgxMzBEMDgJLy8gVmlkZW8gRiBnZW5lcmFsIHB1cnBvc2UgY291bnRlcgorI2RlZmluZSAgVklEX1NSQ19JX0dQQ05UICAgICAgICAgICAweDEzMEUwOAkvLyBWaWRlbyBJIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCisjZGVmaW5lICBWSURfU1JDX0pfR1BDTlQgICAgICAgICAgIDB4MTMwRjA4CS8vIFZpZGVvIEogZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfU1JDX0FfRE1BX0NUTCAgICAgICAgIDB4MTMwODBDCS8vIFZpZGVvIEEgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfQl9ETUFfQ1RMICAgICAgICAgMHgxMzA5MEMJLy8gVmlkZW8gQiBETUEgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19DX0RNQV9DVEwgICAgICAgICAweDEzMEEwQwkvLyBWaWRlbyBDIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0RfRE1BX0NUTCAgICAgICAgIDB4MTMwQjBDCS8vIFZpZGVvIEQgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfRV9ETUFfQ1RMICAgICAgICAgMHgxMzBDMEMJLy8gVmlkZW8gRSBETUEgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19GX0RNQV9DVEwgICAgICAgICAweDEzMEQwQwkvLyBWaWRlbyBGIERNQSBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0lfRE1BX0NUTCAgICAgICAgIDB4MTMwRTBDCS8vIFZpZGVvIEkgRE1BIGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfSl9ETUFfQ1RMICAgICAgICAgMHgxMzBGMEMJLy8gVmlkZW8gSiBETUEgY29udHJvbAorCisjZGVmaW5lICBGTERfQVBCX1JJU0NfRU4gICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgIEZMRF9BUEJfRklGT19FTiAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9TUkNfQV9GTVRfQ1RMICAgICAgICAgMHgxMzA4MTAJLy8gVmlkZW8gQSBmb3JtYXQgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19CX0ZNVF9DVEwgICAgICAgICAweDEzMDkxMAkvLyBWaWRlbyBCIGZvcm1hdCBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0NfRk1UX0NUTCAgICAgICAgIDB4MTMwQTEwCS8vIFZpZGVvIEMgZm9ybWF0IGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfRF9GTVRfQ1RMICAgICAgICAgMHgxMzBCMTAJLy8gVmlkZW8gRCBmb3JtYXQgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19FX0ZNVF9DVEwgICAgICAgICAweDEzMEMxMAkvLyBWaWRlbyBFIGZvcm1hdCBjb250cm9sCisjZGVmaW5lICBWSURfU1JDX0ZfRk1UX0NUTCAgICAgICAgIDB4MTMwRDEwCS8vIFZpZGVvIEYgZm9ybWF0IGNvbnRyb2wKKyNkZWZpbmUgIFZJRF9TUkNfSV9GTVRfQ1RMICAgICAgICAgMHgxMzBFMTAJLy8gVmlkZW8gSSBmb3JtYXQgY29udHJvbAorI2RlZmluZSAgVklEX1NSQ19KX0ZNVF9DVEwgICAgICAgICAweDEzMEYxMAkvLyBWaWRlbyBKIGZvcm1hdCBjb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSAgVklEX1NSQ19BX0FDVElWRV9DVEwxICAgICAweDEzMDgxNAkvLyBWaWRlbyBBIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19CX0FDVElWRV9DVEwxICAgICAweDEzMDkxNAkvLyBWaWRlbyBCIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19DX0FDVElWRV9DVEwxICAgICAweDEzMEExNAkvLyBWaWRlbyBDIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19EX0FDVElWRV9DVEwxICAgICAweDEzMEIxNAkvLyBWaWRlbyBEIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19FX0FDVElWRV9DVEwxICAgICAweDEzMEMxNAkvLyBWaWRlbyBFIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19GX0FDVElWRV9DVEwxICAgICAweDEzMEQxNAkvLyBWaWRlbyBGIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19JX0FDVElWRV9DVEwxICAgICAweDEzMEUxNAkvLyBWaWRlbyBJIGFjdGl2ZSBjb250cm9sICAgICAgMQorI2RlZmluZSAgVklEX1NSQ19KX0FDVElWRV9DVEwxICAgICAweDEzMEYxNAkvLyBWaWRlbyBKIGFjdGl2ZSBjb250cm9sICAgICAgMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIFZJRF9TUkNfQV9BQ1RJVkVfQ1RMMiAgICAgMHgxMzA4MTgJLy8gVmlkZW8gQSBhY3RpdmUgY29udHJvbCAgICAgIDIKKyNkZWZpbmUgIFZJRF9TUkNfQl9BQ1RJVkVfQ1RMMiAgICAgMHgxMzA5MTgJLy8gVmlkZW8gQiBhY3RpdmUgY29udHJvbCAgICAgIDIKKyNkZWZpbmUgIFZJRF9TUkNfQ19BQ1RJVkVfQ1RMMiAgICAgMHgxMzBBMTgJLy8gVmlkZW8gQyBhY3RpdmUgY29udHJvbCAgICAgIDIKKyNkZWZpbmUgIFZJRF9TUkNfRF9BQ1RJVkVfQ1RMMiAgICAgMHgxMzBCMTgJLy8gVmlkZW8gRCBhY3RpdmUgY29udHJvbCAgICAgIDIKKyNkZWZpbmUgIFZJRF9TUkNfRV9BQ1RJVkVfQ1RMMiAgICAgMHgxMzBDMTgJLy8gVmlkZW8gRSBhY3RpdmUgY29udHJvbCAgICAgIDIKKyNkZWZpbmUgIFZJRF9TUkNfRl9BQ1RJVkVfQ1RMMiAgICAgMHgxMzBEMTgJLy8gVmlkZW8gRiBhY3RpdmUgY29udHJvbCAgICAgIDIKKyNkZWZpbmUgIFZJRF9TUkNfSV9BQ1RJVkVfQ1RMMiAgICAgMHgxMzBFMTgJLy8gVmlkZW8gSSBhY3RpdmUgY29udHJvbCAgICAgIDIKKyNkZWZpbmUgIFZJRF9TUkNfSl9BQ1RJVkVfQ1RMMiAgICAgMHgxMzBGMTgJLy8gVmlkZW8gSiBhY3RpdmUgY29udHJvbCAgICAgIDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBWSURfU1JDX0FfQ0RUX1NaICAgICAgICAgIDB4MTMwODFDCS8vIFZpZGVvIEEgQ0RUIHNpemUKKyNkZWZpbmUgIFZJRF9TUkNfQl9DRFRfU1ogICAgICAgICAgMHgxMzA5MUMJLy8gVmlkZW8gQiBDRFQgc2l6ZQorI2RlZmluZSAgVklEX1NSQ19DX0NEVF9TWiAgICAgICAgICAweDEzMEExQwkvLyBWaWRlbyBDIENEVCBzaXplCisjZGVmaW5lICBWSURfU1JDX0RfQ0RUX1NaICAgICAgICAgIDB4MTMwQjFDCS8vIFZpZGVvIEQgQ0RUIHNpemUKKyNkZWZpbmUgIFZJRF9TUkNfRV9DRFRfU1ogICAgICAgICAgMHgxMzBDMUMJLy8gVmlkZW8gRSBDRFQgc2l6ZQorI2RlZmluZSAgVklEX1NSQ19GX0NEVF9TWiAgICAgICAgICAweDEzMEQxQwkvLyBWaWRlbyBGIENEVCBzaXplCisjZGVmaW5lICBWSURfU1JDX0lfQ0RUX1NaICAgICAgICAgIDB4MTMwRTFDCS8vIFZpZGVvIEkgQ0RUIHNpemUKKyNkZWZpbmUgIFZJRF9TUkNfSl9DRFRfU1ogICAgICAgICAgMHgxMzBGMUMJLy8gVmlkZW8gSiBDRFQgc2l6ZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBdWRpbyBJL0YKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9EU1RfQV9ETUEgICAgICAgICAgICAgMHgxNDAwMDAJLy8gQXVkaW8gSW50IEEgRE1BIGRhdGEgcG9ydAorI2RlZmluZSAgQVVEX1NSQ19BX0RNQSAgICAgICAgICAgICAweDE0MDAwOAkvLyBBdWRpbyBJbnQgQSBETUEgZGF0YSBwb3J0CisKKyNkZWZpbmUgIEFVRF9BX0dQQ05UICAgICAgICAgICAgICAgMHgxNDAwMTAJLy8gQXVkaW8gSW50IEEgZ3AgY291bnRlcgorI2RlZmluZSAgRkxEX0FVRF9BX0dQX0NOVCAgICAgICAgICAweDAwMDBGRkZGCisKKyNkZWZpbmUgIEFVRF9BX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDAwMTQJLy8gQXVkaW8gSW50IEEgZ3AgY29udHJvbAorCisjZGVmaW5lICBBVURfQV9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMDE4CS8vIEF1ZGlvIEludCBBIGxpbmUgbGVuZ3RoCisKKyNkZWZpbmUgIEFVRF9BX0NGRyAgICAgICAgICAgICAgICAgMHgxNDAwMUMJLy8gQXVkaW8gSW50IEEgY29uZmlndXJhdGlvbgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfRFNUX0JfRE1BICAgICAgICAgICAgIDB4MTQwMTAwCS8vIEF1ZGlvIEludCBCIERNQSBkYXRhIHBvcnQKKyNkZWZpbmUgIEFVRF9TUkNfQl9ETUEgICAgICAgICAgICAgMHgxNDAxMDgJLy8gQXVkaW8gSW50IEIgRE1BIGRhdGEgcG9ydAorCisjZGVmaW5lICBBVURfQl9HUENOVCAgICAgICAgICAgICAgIDB4MTQwMTEwCS8vIEF1ZGlvIEludCBCIGdwIGNvdW50ZXIKKyNkZWZpbmUgIEZMRF9BVURfQl9HUF9DTlQgICAgICAgICAgMHgwMDAwRkZGRgorCisjZGVmaW5lICBBVURfQl9HUENOVF9DVEwgICAgICAgICAgIDB4MTQwMTE0CS8vIEF1ZGlvIEludCBCIGdwIGNvbnRyb2wKKworI2RlZmluZSAgQVVEX0JfTE5HVEggICAgICAgICAgICAgICAweDE0MDExOAkvLyBBdWRpbyBJbnQgQiBsaW5lIGxlbmd0aAorCisjZGVmaW5lICBBVURfQl9DRkcgICAgICAgICAgICAgICAgIDB4MTQwMTFDCS8vIEF1ZGlvIEludCBCIGNvbmZpZ3VyYXRpb24KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQVVEX0RTVF9DX0RNQSAgICAgICAgICAgICAweDE0MDIwMAkvLyBBdWRpbyBJbnQgQyBETUEgZGF0YSBwb3J0CisjZGVmaW5lICBBVURfU1JDX0NfRE1BICAgICAgICAgICAgIDB4MTQwMjA4CS8vIEF1ZGlvIEludCBDIERNQSBkYXRhIHBvcnQKKworI2RlZmluZSAgQVVEX0NfR1BDTlQgICAgICAgICAgICAgICAweDE0MDIxMAkvLyBBdWRpbyBJbnQgQyBncCBjb3VudGVyCisjZGVmaW5lICBGTERfQVVEX0NfR1BfQ05UICAgICAgICAgIDB4MDAwMEZGRkYKKworI2RlZmluZSAgQVVEX0NfR1BDTlRfQ1RMICAgICAgICAgICAweDE0MDIxNAkvLyBBdWRpbyBJbnQgQyBncCBjb250cm9sCisKKyNkZWZpbmUgIEFVRF9DX0xOR1RIICAgICAgICAgICAgICAgMHgxNDAyMTgJLy8gQXVkaW8gSW50IEMgbGluZSBsZW5ndGgKKworI2RlZmluZSAgQVVEX0NfQ0ZHICAgICAgICAgICAgICAgICAweDE0MDIxQwkvLyBBdWRpbyBJbnQgQyBjb25maWd1cmF0aW9uCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEFVRF9EU1RfRF9ETUEgICAgICAgICAgICAgMHgxNDAzMDAJLy8gQXVkaW8gSW50IEQgRE1BIGRhdGEgcG9ydAorI2RlZmluZSAgQVVEX1NSQ19EX0RNQSAgICAgICAgICAgICAweDE0MDMwOAkvLyBBdWRpbyBJbnQgRCBETUEgZGF0YSBwb3J0CisKKyNkZWZpbmUgIEFVRF9EX0dQQ05UICAgICAgICAgICAgICAgMHgxNDAzMTAJLy8gQXVkaW8gSW50IEQgZ3AgY291bnRlcgorI2RlZmluZSAgRkxEX0FVRF9EX0dQX0NOVCAgICAgICAgICAweDAwMDBGRkZGCisKKyNkZWZpbmUgIEFVRF9EX0dQQ05UX0NUTCAgICAgICAgICAgMHgxNDAzMTQJLy8gQXVkaW8gSW50IEQgZ3AgY29udHJvbAorCisjZGVmaW5lICBBVURfRF9MTkdUSCAgICAgICAgICAgICAgIDB4MTQwMzE4CS8vIEF1ZGlvIEludCBEIGxpbmUgbGVuZ3RoCisKKyNkZWZpbmUgIEFVRF9EX0NGRyAgICAgICAgICAgICAgICAgMHgxNDAzMUMJLy8gQXVkaW8gSW50IEQgY29uZmlndXJhdGlvbgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBBVURfU1JDX0VfRE1BICAgICAgICAgICAgIDB4MTQwNDAwCS8vIEF1ZGlvIEludCBFIERNQSBkYXRhIHBvcnQKKworI2RlZmluZSAgQVVEX0VfR1BDTlQgICAgICAgICAgICAgICAweDE0MDQxMAkvLyBBdWRpbyBJbnQgRSBncCBjb3VudGVyCisjZGVmaW5lICBGTERfQVVEX0VfR1BfQ05UICAgICAgICAgIDB4MDAwMEZGRkYKKworI2RlZmluZSAgQVVEX0VfR1BDTlRfQ1RMICAgICAgICAgICAweDE0MDQxNAkvLyBBdWRpbyBJbnQgRSBncCBjb250cm9sCisKKyNkZWZpbmUgIEFVRF9FX0NGRyAgICAgICAgICAgICAgICAgMHgxNDA0MUMJLy8gQXVkaW8gSW50IEUgY29uZmlndXJhdGlvbgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0xOX0xOR1RIICAgICAgMHgwMDAwMEZGRgorCisjZGVmaW5lICBGTERfQVVEX0RTVF9QS19NT0RFICAgICAgIDB4MDAwMDQwMDAKKworI2RlZmluZSAgRkxEX0FVRF9DTEtfRU5BQkxFICAgICAgICAweDAwMDAwMjAwCisKKyNkZWZpbmUgIEZMRF9BVURfTUFTVEVSX01PREUgICAgICAgMHgwMDAwMDAwMgorCisjZGVmaW5lICBGTERfQVVEX1NPTllfTU9ERSAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSAgRkxEX0FVRF9DTEtfU0VMRUNUX1BMTF9EICAweDAwMDAxODAwCisKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0VOQUJMRSAgICAgICAgMHgwMDAyMDAwMAorCisjZGVmaW5lICBGTERfQVVEX1NSQ19FTkFCTEUgICAgICAgIDB4MDAwMTAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgQVVEX0lOVF9ETUFfQ1RMICAgICAgICAgICAweDE0MDUwMAkvLyBBdWRpbyBJbnQgRE1BIGNvbnRyb2wKKworI2RlZmluZSAgRkxEX0FVRF9TUkNfRV9SSVNDX0VOICAgICAweDAwMDA4MDAwCisjZGVmaW5lICBGTERfQVVEX1NSQ19DX1JJU0NfRU4gICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgIEZMRF9BVURfU1JDX0JfUklTQ19FTiAgICAgMHgwMDAwMjAwMAorI2RlZmluZSAgRkxEX0FVRF9TUkNfQV9SSVNDX0VOICAgICAweDAwMDAxMDAwCisKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0RfUklTQ19FTiAgICAgMHgwMDAwMDgwMAorI2RlZmluZSAgRkxEX0FVRF9EU1RfQ19SSVNDX0VOICAgICAweDAwMDAwNDAwCisjZGVmaW5lICBGTERfQVVEX0RTVF9CX1JJU0NfRU4gICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0FfUklTQ19FTiAgICAgMHgwMDAwMDEwMAorCisjZGVmaW5lICBGTERfQVVEX1NSQ19FX0ZJRk9fRU4gICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgIEZMRF9BVURfU1JDX0NfRklGT19FTiAgICAgMHgwMDAwMDA0MAorI2RlZmluZSAgRkxEX0FVRF9TUkNfQl9GSUZPX0VOICAgICAweDAwMDAwMDIwCisjZGVmaW5lICBGTERfQVVEX1NSQ19BX0ZJRk9fRU4gICAgIDB4MDAwMDAwMTAKKworI2RlZmluZSAgRkxEX0FVRF9EU1RfRF9GSUZPX0VOICAgICAweDAwMDAwMDA4CisjZGVmaW5lICBGTERfQVVEX0RTVF9DX0ZJRk9fRU4gICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgIEZMRF9BVURfRFNUX0JfRklGT19FTiAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgRkxEX0FVRF9EU1RfQV9GSUZPX0VOICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyAgICAgICAgICAgICAgICAgICBNb2JpbHlnZW4gSW50ZXJmYWNlIFJlZ2lzdGVycworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE1vYmlseWdlbiBJbnRlcmZhY2UgQQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgTUJfSUZfQV9ETUEgICAgICAgICAgICAgICAweDE1MDAwMAkvLyBNQklGIEEgRE1BIGRhdGEgcG9ydAorI2RlZmluZSAgTUJfSUZfQV9HUENOICAgICAgICAgICAgICAweDE1MDAwOAkvLyBNQklGIEEgR1AgY291bnRlcgorI2RlZmluZSAgTUJfSUZfQV9HUENOX0NUUkwgICAgICAgICAweDE1MDAwQworI2RlZmluZSAgTUJfSUZfQV9ETUFfQ1RSTCAgICAgICAgICAweDE1MDAxMAorI2RlZmluZSAgTUJfSUZfQV9MRU5HVEggICAgICAgICAgICAweDE1MDAxNAorI2RlZmluZSAgTUJfSUZfQV9IRE1BX1hGRVJfU1ogICAgICAweDE1MDAxOAorI2RlZmluZSAgTUJfSUZfQV9IQ01EICAgICAgICAgICAgICAweDE1MDAxQworI2RlZmluZSAgTUJfSUZfQV9IQ09ORklHICAgICAgICAgICAweDE1MDAyMAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF8wICAgICAweDE1MDAyNAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF8xICAgICAweDE1MDAyOAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF8yICAgICAweDE1MDAyQworI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF8zICAgICAweDE1MDAzMAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF80ICAgICAweDE1MDAzNAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF81ICAgICAweDE1MDAzOAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF82ICAgICAweDE1MDAzQworI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF83ICAgICAweDE1MDA0MAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF84ICAgICAweDE1MDA0NAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF85ICAgICAweDE1MDA0OAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9BICAgICAweDE1MDA0QworI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9CICAgICAweDE1MDA1MAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9DICAgICAweDE1MDA1NAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9EICAgICAweDE1MDA1OAorI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9FICAgICAweDE1MDA1QworI2RlZmluZSAgTUJfSUZfQV9EQVRBX1NUUlVDVF9GICAgICAweDE1MDA2MAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTW9iaWx5Z2VuIEludGVyZmFjZSBCCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBNQl9JRl9CX0RNQSAgICAgICAgICAgICAgIDB4MTYwMDAwCS8vIE1CSUYgQSBETUEgZGF0YSBwb3J0CisjZGVmaW5lICBNQl9JRl9CX0dQQ04gICAgICAgICAgICAgIDB4MTYwMDA4CS8vIE1CSUYgQSBHUCBjb3VudGVyCisjZGVmaW5lICBNQl9JRl9CX0dQQ05fQ1RSTCAgICAgICAgIDB4MTYwMDBDCisjZGVmaW5lICBNQl9JRl9CX0RNQV9DVFJMICAgICAgICAgIDB4MTYwMDEwCisjZGVmaW5lICBNQl9JRl9CX0xFTkdUSCAgICAgICAgICAgIDB4MTYwMDE0CisjZGVmaW5lICBNQl9JRl9CX0hETUFfWEZFUl9TWiAgICAgIDB4MTYwMDE4CisjZGVmaW5lICBNQl9JRl9CX0hDTUQgICAgICAgICAgICAgIDB4MTYwMDFDCisjZGVmaW5lICBNQl9JRl9CX0hDT05GSUcgICAgICAgICAgIDB4MTYwMDIwCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzAgICAgIDB4MTYwMDI0CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzEgICAgIDB4MTYwMDI4CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzIgICAgIDB4MTYwMDJDCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzMgICAgIDB4MTYwMDMwCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzQgICAgIDB4MTYwMDM0CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzUgICAgIDB4MTYwMDM4CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzYgICAgIDB4MTYwMDNDCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzcgICAgIDB4MTYwMDQwCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzggICAgIDB4MTYwMDQ0CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUXzkgICAgIDB4MTYwMDQ4CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUX0EgICAgIDB4MTYwMDRDCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUX0IgICAgIDB4MTYwMDUwCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUX0MgICAgIDB4MTYwMDU0CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUX0QgICAgIDB4MTYwMDU4CisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUX0UgICAgIDB4MTYwMDVDCisjZGVmaW5lICBNQl9JRl9CX0RBVEFfU1RSVUNUX0YgICAgIDB4MTYwMDYwCisKKy8vIE1CX0RNQV9DVFJMCisjZGVmaW5lICBGTERfTUJfSUZfUklTQ19FTiAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgIEZMRF9NQl9JRl9GSUZPX0VOICAgICAgICAgMHgwMDAwMDAwMQorCisvLyBNQl9MRU5HVEgKKyNkZWZpbmUgIEZMRF9NQl9JRl9MTl9MTkdUSCAgICAgICAgMHgwMDAwMEZGRgorCisvLyBNQl9IQ01EIHJlZ2lzdGVyCisjZGVmaW5lICBGTERfTUJfSENNRF9IX0dPICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfQlVTWSAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSAgRkxEX01CX0hDTURfSF9ETUFfSE9MRCAgICAweDEwMDAwMDAwCisjZGVmaW5lICBGTERfTUJfSENNRF9IX0RNQV9CVVNZICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfRE1BX1RZUEUgICAgMHgwNDAwMDAwMAorI2RlZmluZSAgRkxEX01CX0hDTURfSF9ETUFfWEFDVCAgICAweDAyMDAwMDAwCisjZGVmaW5lICBGTERfTUJfSENNRF9IX1JXX04gICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgIEZMRF9NQl9IQ01EX0hfQUREUiAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSAgRkxEX01CX0hDTURfSF9EQVRBICAgICAgICAweDAwMDBGRkZGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEkyQyAjMQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDMV9BRERSICAgICAgICAgICAgICAgICAweDE4MDAwMAkvLyBJMkMgIzEgYWRkcmVzcworI2RlZmluZSAgRkxEX0kyQ19EQUREUiAgICAgICAgICAgICAweGZlMDAwMDAwCS8vIFJXIFszMToyNV0gSTJDIERldmljZSBBZGRyZXNzCisJCQkJCQkgLy8gUk8gWzI0XSByZXNlcnZlZAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgRkxEX0kyQ19TQUREUiAgICAgICAgICAgICAweDAwRkZGRkZGCS8vIFJXIFsyMzowXSAgSTJDIFN1Yi1hZGRyZXNzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzFfV0RBVEEgICAgICAgICAgICAgICAgMHgxODAwMDQJLy8gSTJDICMxIHdyaXRlIGRhdGEKKyNkZWZpbmUgIEZMRF9JMkNfV0RBVEEgICAgICAgICAgICAgMHhGRkZGRkZGRgkvLyBSVyBbMzE6MF0KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDMV9DVFJMICAgICAgICAgICAgICAgICAweDE4MDAwOAkvLyBJMkMgIzEgY29udHJvbAorI2RlZmluZSAgRkxEX0kyQ19QRVJJT0QgICAgICAgICAgICAweEZGMDAwMDAwCS8vIFJXIFszMToyNF0KKyNkZWZpbmUgIEZMRF9JMkNfU0NMX0lOICAgICAgICAgICAgMHgwMDIwMDAwMAkvLyBSVyBbMjFdCisjZGVmaW5lICBGTERfSTJDX1NEQV9JTiAgICAgICAgICAgIDB4MDAxMDAwMDAJLy8gUlcgWzIwXQorCQkJCQkJIC8vIFJPIFsxOToxOF0gcmVzZXJ2ZWQKKyNkZWZpbmUgIEZMRF9JMkNfU0NMX09VVCAgICAgICAgICAgMHgwMDAyMDAwMAkvLyBSVyBbMTddCisjZGVmaW5lICBGTERfSTJDX1NEQV9PVVQgICAgICAgICAgIDB4MDAwMTAwMDAJLy8gUlcgWzE2XQorCQkJCQkJIC8vIFJPIFsxNV0gcmVzZXJ2ZWQKKyNkZWZpbmUgIEZMRF9JMkNfREFUQV9MRU4gICAgICAgICAgMHgwMDAwNzAwMAkvLyBSVyBbMTQ6MTJdCisjZGVmaW5lICBGTERfSTJDX1NBRERSX0lOQyAgICAgICAgIDB4MDAwMDA4MDAJLy8gUlcgWzExXQorCQkJCQkJIC8vIFJPIFsxMDo5XSByZXNlcnZlZAorI2RlZmluZSAgRkxEX0kyQ19TQUREUl9MRU4gICAgICAgICAweDAwMDAwMzAwCS8vIFJXIFs5OjhdCisJCQkJCQkgLy8gUk8gWzc6Nl0gcmVzZXJ2ZWQKKyNkZWZpbmUgIEZMRF9JMkNfU09GVCAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvLyBSVyBbNV0KKyNkZWZpbmUgIEZMRF9JMkNfTk9TVE9QICAgICAgICAgICAgMHgwMDAwMDAxMAkvLyBSVyBbNF0KKyNkZWZpbmUgIEZMRF9JMkNfRVhURU5EICAgICAgICAgICAgMHgwMDAwMDAwOAkvLyBSVyBbM10KKyNkZWZpbmUgIEZMRF9JMkNfU1lOQyAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvLyBSVyBbMl0KKyNkZWZpbmUgIEZMRF9JMkNfUkVBRF9TQSAgICAgICAgICAgMHgwMDAwMDAwMgkvLyBSVyBbMV0KKyNkZWZpbmUgIEZMRF9JMkNfUkVBRF9XUk4gICAgICAgICAgMHgwMDAwMDAwMQkvLyBSVyBbMF0KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDMV9SREFUQSAgICAgICAgICAgICAgICAweDE4MDAwQwkvLyBJMkMgIzEgcmVhZCBkYXRhCisjZGVmaW5lICBGTERfSTJDX1JEQVRBICAgICAgICAgICAgIDB4RkZGRkZGRkYJLy8gUk8gWzMxOjBdCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzFfU1RBVCAgICAgICAgICAgICAgICAgMHgxODAwMTAJLy8gSTJDICMxIHN0YXR1cworI2RlZmluZSAgRkxEX0kyQ19YRkVSX0lOX1BST0cgICAgICAweDAwMDAwMDAyCS8vIFJPIFsxXQorI2RlZmluZSAgRkxEX0kyQ19SQUNLICAgICAgICAgICAgICAweDAwMDAwMDAxCS8vIFJPIFswXQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBJMkMgIzIKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzJfQUREUiAgICAgICAgICAgICAgICAgMHgxOTAwMDAJLy8gSTJDICMyIGFkZHJlc3MKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDMl9XREFUQSAgICAgICAgICAgICAgICAweDE5MDAwNAkvLyBJMkMgIzIgd3JpdGUgZGF0YQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMyX0NUUkwgICAgICAgICAgICAgICAgIDB4MTkwMDA4CS8vIEkyQyAjMiBjb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzJfUkRBVEEgICAgICAgICAgICAgICAgMHgxOTAwMEMJLy8gSTJDICMyIHJlYWQgZGF0YQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMyX1NUQVQgICAgICAgICAgICAgICAgIDB4MTkwMDEwCS8vIEkyQyAjMiBzdGF0dXMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSTJDICMzCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMzX0FERFIgICAgICAgICAgICAgICAgIDB4MUEwMDAwCS8vIEkyQyAjMyBhZGRyZXNzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIEkyQzNfV0RBVEEgICAgICAgICAgICAgICAgMHgxQTAwMDQJLy8gSTJDICMzIHdyaXRlIGRhdGEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDM19DVFJMICAgICAgICAgICAgICAgICAweDFBMDAwOAkvLyBJMkMgIzMgY29udHJvbAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBJMkMzX1JEQVRBICAgICAgICAgICAgICAgIDB4MUEwMDBDCS8vIEkyQyAjMyByZWFkIGRhdGEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSAgSTJDM19TVEFUICAgICAgICAgICAgICAgICAweDFBMDAxMAkvLyBJMkMgIzMgc3RhdHVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFVBUlQKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFVBUlRfQ1RMICAgICAgICAgICAgICAgICAgMHgxQjAwMDAJLy8gVUFSVCBDb250cm9sIFJlZ2lzdGVyCisjZGVmaW5lICBGTERfTE9PUF9CQUNLX0VOICAgICAgICAgICgxIDw8IDcpCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisjZGVmaW5lICBGTERfUlhfVFJHX1NaICAgICAgICAgICAgICgzIDw8IDIpCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisjZGVmaW5lICBGTERfUlhfRU4gICAgICAgICAgICAgICAgICgxIDw8IDEpCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisjZGVmaW5lICBGTERfVFhfRU4gICAgICAgICAgICAgICAgICgxIDw8IDApCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFVBUlRfQlJEICAgICAgICAgICAgICAgICAgMHgxQjAwMDQJLy8gVUFSVCBCYXVkIFJhdGUgRGl2aXNvcgorI2RlZmluZSAgRkxEX0JSRCAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAweDE5NworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBVQVJUX0RCVUYgICAgICAgICAgICAgICAgIDB4MUIwMDA4CS8vIFVBUlQgVHgvUnggRGF0YSBCdUZGZXIKKyNkZWZpbmUgIEZMRF9EQiAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBVQVJUX0lTUiAgICAgICAgICAgICAgICAgIDB4MUIwMDBDCS8vIFVBUlQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSAgRkxEX1JYRF9USU1FT1VUX0VOICAgICAgICAoMSA8PCA3KQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX0ZSTV9FUlJfRU4gICAgICAgICAgICAoMSA8PCA2KQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1JYRF9SRFlfRU4gICAgICAgICAgICAoMSA8PCA1KQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1RYRF9FTVBUWV9FTiAgICAgICAgICAoMSA8PCA0KQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1JYRF9PVkVSRkxPVyAgICAgICAgICAoMSA8PCAzKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX0ZSTV9FUlIgICAgICAgICAgICAgICAoMSA8PCAyKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1JYRF9SRFkgICAgICAgICAgICAgICAoMSA8PCAxKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorI2RlZmluZSAgRkxEX1RYRF9FTVBUWSAgICAgICAgICAgICAoMSA8PCAwKQkvLyBSVyBmaWVsZCAtIGRlZmF1bHQgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lICBVQVJUX0NOVCAgICAgICAgICAgICAgICAgIDB4MUIwMDEwCS8vIFVBUlQgVHgvUnggRklGTyBCeXRlIENvdW50CisjZGVmaW5lICBGTERfVFhEX0NOVCAgICAgICAgICAgICAgICgweDFGIDw8IDgpCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisjZGVmaW5lICBGTERfUlhEX0NOVCAgICAgICAgICAgICAgICgweDFGIDw8IDApCS8vIFJXIGZpZWxkIC0gZGVmYXVsdCAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE1vdGlvbiBEZXRlY3Rpb24KKyNkZWZpbmUgIE1EX0NIMF9HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAwMTQKKyNkZWZpbmUgIE1EX0NIMV9HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAwOTQKKyNkZWZpbmUgIE1EX0NIMl9HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAxMTQKKyNkZWZpbmUgIE1EX0NIM19HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAxOTQKKyNkZWZpbmUgIE1EX0NINF9HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAyMTQKKyNkZWZpbmUgIE1EX0NINV9HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAyOTQKKyNkZWZpbmUgIE1EX0NINl9HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAzMTQKKyNkZWZpbmUgIE1EX0NIN19HUklEX0JMT0NLX1lDTlQgICAgMHgxNzAzOTQKKworI2RlZmluZSBQSVhFTF9GUk1UXzQyMiAgICA0CisjZGVmaW5lIFBJWEVMX0ZSTVRfNDExICAgIDUKKyNkZWZpbmUgUElYRUxfRlJNVF9ZOCAgICAgNgorCisjZGVmaW5lIFBJWEVMX0VOR0lORV9WSVAxIDAKKyNkZWZpbmUgUElYRUxfRU5HSU5FX1ZJUDIgMQorCisjZW5kaWYgLy9BdGhlbmFfUkVHSVNURVJTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXNyYW0uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtc3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNjc3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXNyYW0uaApAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FUSEVOQV9TUkFNX0hfXworI2RlZmluZSBfX0FUSEVOQV9TUkFNX0hfXworCisvLyNkZWZpbmUgUlhfU1JBTV9TVEFSVF9TSVpFICAgICAgICA9IDA7ICAvLyAgU3RhcnQgb2YgcmVzZXJ2ZWQgU1JBTQorI2RlZmluZSBWSURfQ01EU19TSVpFICAgICAgICAgICAgIDgwCS8vICBWaWRlbyBDTURTIHNpemUgaW4gYnl0ZXMKKyNkZWZpbmUgQVVESU9fQ01EU19TSVpFICAgICAgICAgICA4MAkvLyAgQVVESU8gQ01EUyBzaXplIGluIGJ5dGVzCisjZGVmaW5lIE1CSUZfQ01EU19TSVpFICAgICAgICAgICAgODAJLy8gIE1CSUYgIENNRFMgc2l6ZSBpbiBieXRlcworCisvLyNkZWZpbmUgUlhfU1JBTV9QT09MX1NUQVJUX1NJWkUgICA9IDA7ICAvLyAgU3RhcnQgb2YgdXNlYWJsZSBSWCBTUkFNIGZvciBidWZmZXJzCisjZGVmaW5lIFZJRF9JUV9TSVpFICAgICAgICAgICAgICAgNjQJLy8gIFZJRCBpbnN0cnVjdGlvbiBxdWV1ZSBzaXplIGluIGJ5dGVzCisjZGVmaW5lIE1CSUZfSVFfU0laRSAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgQVVESU9fSVFfU0laRSAgICAgICAgICAgICA2NAkvLyAgQVVEIGluc3RydWN0aW9uIHF1ZXVlIHNpemUgaW4gYnl0ZXMKKworI2RlZmluZSBWSURfQ0RUX1NJWkUgICAgICAgICAgICAgIDY0CS8vICBWSUQgY2x1c3RlciBkZXNjcmlwdG9yIHRhYmxlIHNpemUgaW4gYnl0ZXMKKyNkZWZpbmUgTUJJRl9DRFRfU0laRSAgICAgICAgICAgICA2NAkvLyAgTUJJRi9IQkkgY2x1c3RlciBkZXNjcmlwdG9yIHRhYmxlIHNpemUgaW4gYnl0ZXMKKyNkZWZpbmUgQVVESU9fQ0RUX1NJWkUgICAgICAgICAgICA0OAkvLyAgQVVEIGNsdXN0ZXIgZGVzY3JpcHRvciB0YWJsZSBzaXplIGluIGJ5dGVzCisKKy8vI2RlZmluZSBSWF9TUkFNX1BPT0xfRlJFRV9TSVpFICAgID0gMTY7IC8vICBTdGFydCBvZiBhdmFpbGFibGUgUlggU1JBTQorLy8jZGVmaW5lIFJYX1NSQU1fRU5EX1NJWkUgICAgICAgICAgPSAwOyAgLy8gIEVuZCBvZiBSWCBTUkFNCisKKy8vI2RlZmluZSBUWF9TUkFNX1BPT0xfU1RBUlRfU0laRSAgID0gMDsgIC8vICBTdGFydCBvZiB0cmFuc21pdCBwb29sIFNSQU0KKy8vI2RlZmluZSBNU0lfREFUQV9TSVpFICAgICAgICAgICAgID0gNjQ7IC8vICBSZXNlcnZlZCAoTVNJIERhdGEsIFJJU0Mgd29ya2luZyBzdG9yYQorCisjZGVmaW5lIFZJRF9DTFVTVEVSX1NJWkUgICAgICAgICAgMTQ0MAkvLyAgVklEIGNsdXN0ZXIgZGF0YSBsaW5lCisjZGVmaW5lIEFVRElPX0NMVVNURVJfU0laRSAgICAgICAgMTI4CS8vICBBVURJTyBjbHVzdGVyIGRhdGEgbGluZQorI2RlZmluZSBNQklGX0NMVVNURVJfU0laRSAgICAgICAgIDE0NDAJLy8gIE1CSUYvSEJJIGNsdXN0ZXIgZGF0YSBsaW5lCisKKy8vI2RlZmluZSBUWF9TUkFNX1BPT0xfRlJFRV9TSVpFICAgID0gNzA0OyAgICAvLyAgU3RhcnQgb2YgYXZhaWxhYmxlIFRYIFNSQU0KKy8vI2RlZmluZSBUWF9TUkFNX0VORF9TSVpFICAgICAgICAgID0gMDsgICAgICAvLyAgRW5kIG9mIFRYIFNSQU0KKworLy8gUmVjZWl2ZSBTUkFNCisjZGVmaW5lIFJYX1NSQU1fU1RBUlQgICAgICAgICAgICAgMHgxMDAwMAorI2RlZmluZSBWSURfQV9ET1dOX0NNRFMgICAgICAgICAgIDB4MTAwMDAKKyNkZWZpbmUgVklEX0JfRE9XTl9DTURTICAgICAgICAgICAweDEwMDUwCisjZGVmaW5lIFZJRF9DX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDBBMAorI2RlZmluZSBWSURfRF9ET1dOX0NNRFMgICAgICAgICAgIDB4MTAwRjAKKyNkZWZpbmUgVklEX0VfRE9XTl9DTURTICAgICAgICAgICAweDEwMTQwCisjZGVmaW5lIFZJRF9GX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDE5MAorI2RlZmluZSBWSURfR19ET1dOX0NNRFMgICAgICAgICAgIDB4MTAxRTAKKyNkZWZpbmUgVklEX0hfRE9XTl9DTURTICAgICAgICAgICAweDEwMjMwCisjZGVmaW5lIFZJRF9BX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDI4MAorI2RlZmluZSBWSURfQl9VUF9DTURTICAgICAgICAgICAgIDB4MTAyRDAKKyNkZWZpbmUgVklEX0NfVVBfQ01EUyAgICAgICAgICAgICAweDEwMzIwCisjZGVmaW5lIFZJRF9EX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDM3MAorI2RlZmluZSBWSURfRV9VUF9DTURTICAgICAgICAgICAgIDB4MTAzQzAKKyNkZWZpbmUgVklEX0ZfVVBfQ01EUyAgICAgICAgICAgICAweDEwNDEwCisjZGVmaW5lIFZJRF9JX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDQ2MAorI2RlZmluZSBWSURfSl9VUF9DTURTICAgICAgICAgICAgIDB4MTA0QjAKKyNkZWZpbmUgQVVEX0FfRE9XTl9DTURTICAgICAgICAgICAweDEwNTAwCisjZGVmaW5lIEFVRF9CX0RPV05fQ01EUyAgICAgICAgICAgMHgxMDU1MAorI2RlZmluZSBBVURfQ19ET1dOX0NNRFMgICAgICAgICAgIDB4MTA1QTAKKyNkZWZpbmUgQVVEX0RfRE9XTl9DTURTICAgICAgICAgICAweDEwNUYwCisjZGVmaW5lIEFVRF9BX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDY0MAorI2RlZmluZSBBVURfQl9VUF9DTURTICAgICAgICAgICAgIDB4MTA2OTAKKyNkZWZpbmUgQVVEX0NfVVBfQ01EUyAgICAgICAgICAgICAweDEwNkUwCisjZGVmaW5lIEFVRF9FX1VQX0NNRFMgICAgICAgICAgICAgMHgxMDczMAorI2RlZmluZSBNQklGX0FfRE9XTl9DTURTICAgICAgICAgIDB4MTA3ODAKKyNkZWZpbmUgTUJJRl9CX0RPV05fQ01EUyAgICAgICAgICAweDEwN0QwCisjZGVmaW5lIERNQV9TQ1JBVENIX1BBRCAgICAgICAgICAgMHgxMDgyMAkvLyBTY3JhdGNoIHBhZCBhcmVhIGZyb20gMHgxMDgyMCB0byAweDEwQjQwCisKKy8vI2RlZmluZSBSWF9TUkFNX1BPT0xfU1RBUlQgICAgICAgID0gMHgxMDVCMDsKKworI2RlZmluZSBWSURfQV9JUSAgICAgICAgICAgICAgICAgIDB4MTEwMDAKKyNkZWZpbmUgVklEX0JfSVEgICAgICAgICAgICAgICAgICAweDExMDQwCisjZGVmaW5lIFZJRF9DX0lRICAgICAgICAgICAgICAgICAgMHgxMTA4MAorI2RlZmluZSBWSURfRF9JUSAgICAgICAgICAgICAgICAgIDB4MTEwQzAKKyNkZWZpbmUgVklEX0VfSVEgICAgICAgICAgICAgICAgICAweDExMTAwCisjZGVmaW5lIFZJRF9GX0lRICAgICAgICAgICAgICAgICAgMHgxMTE0MAorI2RlZmluZSBWSURfR19JUSAgICAgICAgICAgICAgICAgIDB4MTExODAKKyNkZWZpbmUgVklEX0hfSVEgICAgICAgICAgICAgICAgICAweDExMUMwCisjZGVmaW5lIFZJRF9JX0lRICAgICAgICAgICAgICAgICAgMHgxMTIwMAorI2RlZmluZSBWSURfSl9JUSAgICAgICAgICAgICAgICAgIDB4MTEyNDAKKyNkZWZpbmUgQVVEX0FfSVEgICAgICAgICAgICAgICAgICAweDExMjgwCisjZGVmaW5lIEFVRF9CX0lRICAgICAgICAgICAgICAgICAgMHgxMTJDMAorI2RlZmluZSBBVURfQ19JUSAgICAgICAgICAgICAgICAgIDB4MTEzMDAKKyNkZWZpbmUgQVVEX0RfSVEgICAgICAgICAgICAgICAgICAweDExMzQwCisjZGVmaW5lIEFVRF9FX0lRICAgICAgICAgICAgICAgICAgMHgxMTM4MAorI2RlZmluZSBNQklGX0FfSVEgICAgICAgICAgICAgICAgIDB4MTEwMDAKKyNkZWZpbmUgTUJJRl9CX0lRICAgICAgICAgICAgICAgICAweDExMEMwCisKKyNkZWZpbmUgVklEX0FfQ0RUICAgICAgICAgICAgICAgICAweDEwQzAwCisjZGVmaW5lIFZJRF9CX0NEVCAgICAgICAgICAgICAgICAgMHgxMEM0MAorI2RlZmluZSBWSURfQ19DRFQgICAgICAgICAgICAgICAgIDB4MTBDODAKKyNkZWZpbmUgVklEX0RfQ0RUICAgICAgICAgICAgICAgICAweDEwQ0MwCisjZGVmaW5lIFZJRF9FX0NEVCAgICAgICAgICAgICAgICAgMHgxMEQwMAorI2RlZmluZSBWSURfRl9DRFQgICAgICAgICAgICAgICAgIDB4MTBENDAKKyNkZWZpbmUgVklEX0dfQ0RUICAgICAgICAgICAgICAgICAweDEwRDgwCisjZGVmaW5lIFZJRF9IX0NEVCAgICAgICAgICAgICAgICAgMHgxMERDMAorI2RlZmluZSBWSURfSV9DRFQgICAgICAgICAgICAgICAgIDB4MTBFMDAKKyNkZWZpbmUgVklEX0pfQ0RUICAgICAgICAgICAgICAgICAweDEwRTQwCisjZGVmaW5lIEFVRF9BX0NEVCAgICAgICAgICAgICAgICAgMHgxMEU4MAorI2RlZmluZSBBVURfQl9DRFQgICAgICAgICAgICAgICAgIDB4MTBFQjAKKyNkZWZpbmUgQVVEX0NfQ0RUICAgICAgICAgICAgICAgICAweDEwRUUwCisjZGVmaW5lIEFVRF9EX0NEVCAgICAgICAgICAgICAgICAgMHgxMEYxMAorI2RlZmluZSBBVURfRV9DRFQgICAgICAgICAgICAgICAgIDB4MTBGNDAKKyNkZWZpbmUgTUJJRl9BX0NEVCAgICAgICAgICAgICAgICAweDEwQzAwCisjZGVmaW5lIE1CSUZfQl9DRFQgICAgICAgICAgICAgICAgMHgxMENDMAorCisvLyBDbHVzdGVyIEJ1ZmZlciBmb3IgUlgKKyNkZWZpbmUgVklEX0FfVVBfQ0xVU1RFUl8xICAgICAgICAweDExNDAwCisjZGVmaW5lIFZJRF9BX1VQX0NMVVNURVJfMiAgICAgICAgMHgxMTlBMAorI2RlZmluZSBWSURfQV9VUF9DTFVTVEVSXzMgICAgICAgIDB4MTFGNDAKKyNkZWZpbmUgVklEX0FfVVBfQ0xVU1RFUl80ICAgICAgICAweDEyNEUwCisKKyNkZWZpbmUgVklEX0JfVVBfQ0xVU1RFUl8xICAgICAgICAweDEyQTgwCisjZGVmaW5lIFZJRF9CX1VQX0NMVVNURVJfMiAgICAgICAgMHgxMzAyMAorI2RlZmluZSBWSURfQl9VUF9DTFVTVEVSXzMgICAgICAgIDB4MTM1QzAKKyNkZWZpbmUgVklEX0JfVVBfQ0xVU1RFUl80ICAgICAgICAweDEzQjYwCisKKyNkZWZpbmUgVklEX0NfVVBfQ0xVU1RFUl8xICAgICAgICAweDE0MTAwCisjZGVmaW5lIFZJRF9DX1VQX0NMVVNURVJfMiAgICAgICAgMHgxNDZBMAorI2RlZmluZSBWSURfQ19VUF9DTFVTVEVSXzMgICAgICAgIDB4MTRDNDAKKyNkZWZpbmUgVklEX0NfVVBfQ0xVU1RFUl80ICAgICAgICAweDE1MUUwCisKKyNkZWZpbmUgVklEX0RfVVBfQ0xVU1RFUl8xICAgICAgICAweDE1NzgwCisjZGVmaW5lIFZJRF9EX1VQX0NMVVNURVJfMiAgICAgICAgMHgxNUQyMAorI2RlZmluZSBWSURfRF9VUF9DTFVTVEVSXzMgICAgICAgIDB4MTYyQzAKKyNkZWZpbmUgVklEX0RfVVBfQ0xVU1RFUl80ICAgICAgICAweDE2ODYwCisKKyNkZWZpbmUgVklEX0VfVVBfQ0xVU1RFUl8xICAgICAgICAweDE2RTAwCisjZGVmaW5lIFZJRF9FX1VQX0NMVVNURVJfMiAgICAgICAgMHgxNzNBMAorI2RlZmluZSBWSURfRV9VUF9DTFVTVEVSXzMgICAgICAgIDB4MTc5NDAKKyNkZWZpbmUgVklEX0VfVVBfQ0xVU1RFUl80ICAgICAgICAweDE3RUUwCisKKyNkZWZpbmUgVklEX0ZfVVBfQ0xVU1RFUl8xICAgICAgICAweDE4NDgwCisjZGVmaW5lIFZJRF9GX1VQX0NMVVNURVJfMiAgICAgICAgMHgxOEEyMAorI2RlZmluZSBWSURfRl9VUF9DTFVTVEVSXzMgICAgICAgIDB4MThGQzAKKyNkZWZpbmUgVklEX0ZfVVBfQ0xVU1RFUl80ICAgICAgICAweDE5NTYwCisKKyNkZWZpbmUgVklEX0lfVVBfQ0xVU1RFUl8xICAgICAgICAweDE5QjAwCisjZGVmaW5lIFZJRF9JX1VQX0NMVVNURVJfMiAgICAgICAgMHgxQTBBMAorI2RlZmluZSBWSURfSV9VUF9DTFVTVEVSXzMgICAgICAgIDB4MUE2NDAKKyNkZWZpbmUgVklEX0lfVVBfQ0xVU1RFUl80ICAgICAgICAweDFBQkUwCisKKyNkZWZpbmUgVklEX0pfVVBfQ0xVU1RFUl8xICAgICAgICAweDFCMTgwCisjZGVmaW5lIFZJRF9KX1VQX0NMVVNURVJfMiAgICAgICAgMHgxQjcyMAorI2RlZmluZSBWSURfSl9VUF9DTFVTVEVSXzMgICAgICAgIDB4MUJDQzAKKyNkZWZpbmUgVklEX0pfVVBfQ0xVU1RFUl80ICAgICAgICAweDFDMjYwCisKKyNkZWZpbmUgQVVEX0FfVVBfQ0xVU1RFUl8xICAgICAgICAweDFDODAwCisjZGVmaW5lIEFVRF9BX1VQX0NMVVNURVJfMiAgICAgICAgMHgxQzg4MAorI2RlZmluZSBBVURfQV9VUF9DTFVTVEVSXzMgICAgICAgIDB4MUM5MDAKKworI2RlZmluZSBBVURfQl9VUF9DTFVTVEVSXzEgICAgICAgIDB4MUM5ODAKKyNkZWZpbmUgQVVEX0JfVVBfQ0xVU1RFUl8yICAgICAgICAweDFDQTAwCisjZGVmaW5lIEFVRF9CX1VQX0NMVVNURVJfMyAgICAgICAgMHgxQ0E4MAorCisjZGVmaW5lIEFVRF9DX1VQX0NMVVNURVJfMSAgICAgICAgMHgxQ0IwMAorI2RlZmluZSBBVURfQ19VUF9DTFVTVEVSXzIgICAgICAgIDB4MUNCODAKKyNkZWZpbmUgQVVEX0NfVVBfQ0xVU1RFUl8zICAgICAgICAweDFDQzAwCisKKyNkZWZpbmUgQVVEX0VfVVBfQ0xVU1RFUl8xICAgICAgICAweDFDQzgwCisjZGVmaW5lIEFVRF9FX1VQX0NMVVNURVJfMiAgICAgICAgMHgxQ0QwMAorI2RlZmluZSBBVURfRV9VUF9DTFVTVEVSXzMgICAgICAgIDB4MUNEODAKKworI2RlZmluZSBSWF9TUkFNX1BPT0xfRlJFRSAgICAgICAgIDB4MUNFMDAKKyNkZWZpbmUgUlhfU1JBTV9FTkQgICAgICAgICAgICAgICAweDFEMDAwCisKKy8vIEZyZWUgUmVjZWl2ZSBTUkFNICAgIDE0NCBCeXRlcworCisvLyBUcmFuc21pdCBTUkFNCisjZGVmaW5lIFRYX1NSQU1fUE9PTF9TVEFSVCAgICAgICAgMHgwMDAwMAorCisjZGVmaW5lIFZJRF9BX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwMDA0MAorI2RlZmluZSBWSURfQV9ET1dOX0NMVVNURVJfMiAgICAgIDB4MDA1RTAKKyNkZWZpbmUgVklEX0FfRE9XTl9DTFVTVEVSXzMgICAgICAweDAwQjgwCisjZGVmaW5lIFZJRF9BX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwMTEyMAorCisjZGVmaW5lIFZJRF9CX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwMTZDMAorI2RlZmluZSBWSURfQl9ET1dOX0NMVVNURVJfMiAgICAgIDB4MDFDNjAKKyNkZWZpbmUgVklEX0JfRE9XTl9DTFVTVEVSXzMgICAgICAweDAyMjAwCisjZGVmaW5lIFZJRF9CX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwMjdBMAorCisjZGVmaW5lIFZJRF9DX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwMkQ0MAorI2RlZmluZSBWSURfQ19ET1dOX0NMVVNURVJfMiAgICAgIDB4MDMyRTAKKyNkZWZpbmUgVklEX0NfRE9XTl9DTFVTVEVSXzMgICAgICAweDAzODgwCisjZGVmaW5lIFZJRF9DX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwM0UyMAorCisjZGVmaW5lIFZJRF9EX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwNDNDMAorI2RlZmluZSBWSURfRF9ET1dOX0NMVVNURVJfMiAgICAgIDB4MDQ5NjAKKyNkZWZpbmUgVklEX0RfRE9XTl9DTFVTVEVSXzMgICAgICAweDA0RjAwCisjZGVmaW5lIFZJRF9EX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwNTRBMAorCisjZGVmaW5lIFZJRF9FX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwNWE0MAorI2RlZmluZSBWSURfRV9ET1dOX0NMVVNURVJfMiAgICAgIDB4MDVGRTAKKyNkZWZpbmUgVklEX0VfRE9XTl9DTFVTVEVSXzMgICAgICAweDA2NTgwCisjZGVmaW5lIFZJRF9FX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwNkIyMAorCisjZGVmaW5lIFZJRF9GX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwNzBDMAorI2RlZmluZSBWSURfRl9ET1dOX0NMVVNURVJfMiAgICAgIDB4MDc2NjAKKyNkZWZpbmUgVklEX0ZfRE9XTl9DTFVTVEVSXzMgICAgICAweDA3QzAwCisjZGVmaW5lIFZJRF9GX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwODFBMAorCisjZGVmaW5lIFZJRF9HX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwODc0MAorI2RlZmluZSBWSURfR19ET1dOX0NMVVNURVJfMiAgICAgIDB4MDhDRTAKKyNkZWZpbmUgVklEX0dfRE9XTl9DTFVTVEVSXzMgICAgICAweDA5MjgwCisjZGVmaW5lIFZJRF9HX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwOTgyMAorCisjZGVmaW5lIFZJRF9IX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwOURDMAorI2RlZmluZSBWSURfSF9ET1dOX0NMVVNURVJfMiAgICAgIDB4MEEzNjAKKyNkZWZpbmUgVklEX0hfRE9XTl9DTFVTVEVSXzMgICAgICAweDBBOTAwCisjZGVmaW5lIFZJRF9IX0RPV05fQ0xVU1RFUl80ICAgICAgMHgwQUVBMAorCisjZGVmaW5lIEFVRF9BX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwQjUwMAorI2RlZmluZSBBVURfQV9ET1dOX0NMVVNURVJfMiAgICAgIDB4MEI1ODAKKyNkZWZpbmUgQVVEX0FfRE9XTl9DTFVTVEVSXzMgICAgICAweDBCNjAwCisKKyNkZWZpbmUgQVVEX0JfRE9XTl9DTFVTVEVSXzEgICAgICAweDBCNjgwCisjZGVmaW5lIEFVRF9CX0RPV05fQ0xVU1RFUl8yICAgICAgMHgwQjcwMAorI2RlZmluZSBBVURfQl9ET1dOX0NMVVNURVJfMyAgICAgIDB4MEI3ODAKKworI2RlZmluZSBBVURfQ19ET1dOX0NMVVNURVJfMSAgICAgIDB4MEI4MDAKKyNkZWZpbmUgQVVEX0NfRE9XTl9DTFVTVEVSXzIgICAgICAweDBCODgwCisjZGVmaW5lIEFVRF9DX0RPV05fQ0xVU1RFUl8zICAgICAgMHgwQjkwMAorCisjZGVmaW5lIEFVRF9EX0RPV05fQ0xVU1RFUl8xICAgICAgMHgwQjk4MAorI2RlZmluZSBBVURfRF9ET1dOX0NMVVNURVJfMiAgICAgIDB4MEJBMDAKKyNkZWZpbmUgQVVEX0RfRE9XTl9DTFVTVEVSXzMgICAgICAweDBCQTgwCisKKyNkZWZpbmUgVFhfU1JBTV9QT09MX0ZSRUUgICAgICAgICAweDBCQjAwCisjZGVmaW5lIFRYX1NSQU1fRU5EICAgICAgICAgICAgICAgMHgwQzAwMAorCisjZGVmaW5lIEJZVEVTX1RPX0RXT1JEUyhiY291bnQpICgoYmNvdW50KSA+PiAyKQorI2RlZmluZSBCWVRFU19UT19RV09SRFMoYmNvdW50KSAoKGJjb3VudCkgPj4gMykKKyNkZWZpbmUgQllURVNfVE9fT1dPUkRTKGJjb3VudCkgKChiY291bnQpID4+IDQpCisKKyNkZWZpbmUgVklEX0lRX1NJWkVfRFcgICAgICAgICAgICAgQllURVNfVE9fRFdPUkRTKFZJRF9JUV9TSVpFKQorI2RlZmluZSBWSURfQ0RUX1NJWkVfUVcgICAgICAgICAgICBCWVRFU19UT19RV09SRFMoVklEX0NEVF9TSVpFKQorI2RlZmluZSBWSURfQ0xVU1RFUl9TSVpFX09XICAgICAgICBCWVRFU19UT19PV09SRFMoVklEX0NMVVNURVJfU0laRSkKKworI2RlZmluZSBBVURJT19JUV9TSVpFX0RXICAgICAgICAgICBCWVRFU19UT19EV09SRFMoQVVESU9fSVFfU0laRSkKKyNkZWZpbmUgQVVESU9fQ0RUX1NJWkVfUVcgICAgICAgICAgQllURVNfVE9fUVdPUkRTKEFVRElPX0NEVF9TSVpFKQorI2RlZmluZSBBVURJT19DTFVTVEVSX1NJWkVfUVcgICAgICBCWVRFU19UT19RV09SRFMoQVVESU9fQ0xVU1RFUl9TSVpFKQorCisjZGVmaW5lIE1CSUZfSVFfU0laRV9EVyAgICAgICAgICAgIEJZVEVTX1RPX0RXT1JEUyhNQklGX0lRX1NJWkUpCisjZGVmaW5lIE1CSUZfQ0RUX1NJWkVfUVcgICAgICAgICAgIEJZVEVTX1RPX1FXT1JEUyhNQklGX0NEVF9TSVpFKQorI2RlZmluZSBNQklGX0NMVVNURVJfU0laRV9PVyAgICAgICBCWVRFU19UT19PV09SRFMoTUJJRl9DTFVTVEVSX1NJWkUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5MDVlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmMKQEAgLTAsMCArMSw4MzUgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiwgPHNodS5saW5AY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuaCIKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyNTgyMSBiYXNlZCBUViBjYXJkcyIpOworTU9EVUxFX0FVVEhPUigiSGllcCBIdXluaCA8aGllcC5odXluaEBjb25leGFudC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgX2ludHJfbXNrID0KKyAgICBGTERfVklEX1NSQ19SSVNDMSB8IEZMRF9WSURfU1JDX1VGIHwgRkxEX1ZJRF9TUkNfU1lOQyB8IEZMRF9WSURfU1JDX09QQ19FUlI7CisKK3N0YXRpYyBfX2xlMzIgKmN4MjU4MjFfdXBkYXRlX3Jpc2Nwcm9ncmFtX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgICAgX19sZTMyICogcnAsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBicGwsIHUzMiBzeW5jX2xpbmUsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBsaW5lcywKKwkJCQkJICAgICAgaW50IGZpZm9fZW5hYmxlLCBpbnQgZmllbGRfdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGluZSwgaTsKKwlpbnQgZGlzdF9iZXR3bl9zdGFydHMgPSBicGwgKiAyOworCisJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgc3luY19saW5lKTsKKworCWlmIChVU0VfUklTQ19OT09QX1ZJREVPKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fTk9fT1BTOyBpKyspIHsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX05PT1ApOworCQl9CisJfQorCisJLyogc2NhbiBsaW5lcyAqLworCWZvciAobGluZSA9IDA7IGxpbmUgPCBsaW5lczsgbGluZSsrKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1JFQUQgfCBSSVNDX1NPTCB8IFJJU0NfRU9MIHwgYnBsKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKGRldi0+X2RhdGFfYnVmX3BoeXNfYWRkcl9jaDIgKyBvZmZzZXQpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCQlpZiAoKGxpbmVzIDw9IE5UU0NfRklFTERfSEVJR0hUKQorCQkgICAgfHwgKGxpbmUgPCAoTlRTQ19GSUVMRF9IRUlHSFQgLSAxKSkKKwkJICAgIHx8ICEoZGV2LT5faXNOVFNDX2NoMikpIHsKKwkJCW9mZnNldCArPSBkaXN0X2JldHduX3N0YXJ0czsKKwkJfQorCX0KKworCXJldHVybiBycDsKK30KKworc3RhdGljIF9fbGUzMiAqY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgICAgIF9fbGUzMiAqIHJwLAorCQkJCQkgICAgICAgZG1hX2FkZHJfdCBkYXRhYnVmX3BoeXNfYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJCSAgICAgICB1MzIgc3luY19saW5lLCB1bnNpZ25lZCBpbnQgYnBsLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxpbmVzLAorCQkJCQkgICAgICAgaW50IGZpZm9fZW5hYmxlLCBpbnQgZmllbGRfdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGluZSwgaTsKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0KKwkgICAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPl9jaGFubmVsMl91cHN0cmVhbV9zZWxlY3RdOworCWludCBkaXN0X2JldHduX3N0YXJ0cyA9IGJwbCAqIDI7CisKKwkvKiBzeW5jIGluc3RydWN0aW9uICovCisJaWYgKHN5bmNfbGluZSAhPSBOT19TWU5DX0xJTkUpIHsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgc3luY19saW5lKTsKKwl9CisKKwlpZiAoVVNFX1JJU0NfTk9PUF9WSURFTykgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX05PX09QUzsgaSsrKSB7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19OT09QKTsKKwkJfQorCX0KKworCS8qIHNjYW4gbGluZXMgKi8KKwlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgbGluZXM7IGxpbmUrKykgeworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19SRUFEIHwgUklTQ19TT0wgfCBSSVNDX0VPTCB8IGJwbCk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihkYXRhYnVmX3BoeXNfYWRkciArIG9mZnNldCk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJCWlmICgobGluZXMgPD0gTlRTQ19GSUVMRF9IRUlHSFQpCisJCSAgICB8fCAobGluZSA8IChOVFNDX0ZJRUxEX0hFSUdIVCAtIDEpKQorCQkgICAgfHwgIShkZXYtPl9pc05UU0NfY2gyKSkgeworCQkJb2Zmc2V0ICs9IGRpc3RfYmV0d25fc3RhcnRzOworCQl9CisKKwkJLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBlbmFibGUgdGhlIEZJRk8gYWZ0ZXIgdGhlIGZpcnN0IDQgbGluZXMKKwkJLy8gRm9yIHRoZSB1cHN0cmVhbSB2aWRlbyBjaGFubmVsLCB0aGUgcmlzYyBlbmdpbmUgd2lsbCBlbmFibGUgdGhlIEZJRk8uCisJCWlmIChmaWZvX2VuYWJsZSAmJiBsaW5lID09IDMpIHsKKwkJCSoocnArKykgPSBSSVNDX1dSSVRFQ1I7CisJCQkqKHJwKyspID0gc3JhbV9jaC0+ZG1hX2N0bDsKKwkJCSoocnArKykgPSBGTERfVklEX0ZJRk9fRU47CisJCQkqKHJwKyspID0gMHgwMDAwMDAwMTsKKwkJfQorCX0KKworCXJldHVybiBycDsKK30KKworaW50IGN4MjU4MjFfcmlzY19idWZmZXJfdXBzdHJlYW1fY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB0b3Bfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgYnBsLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGxpbmVzKQoreworCV9fbGUzMiAqcnA7CisJaW50IGZpZm9fZW5hYmxlID0gMDsKKwlpbnQgc2luZ2xlZmllbGRfbGluZXMgPSBsaW5lcyA+PiAxOwkvL2dldCBsaW5lIGNvdW50IGZvciBzaW5nbGUgZmllbGQKKwlpbnQgb2RkX251bV9saW5lcyA9IHNpbmdsZWZpZWxkX2xpbmVzOworCWludCBmcmFtZSA9IDA7CisJaW50IGZyYW1lX3NpemUgPSAwOworCWludCBkYXRhYnVmX29mZnNldCA9IDA7CisJaW50IHJpc2NfcHJvZ3JhbV9zaXplID0gMDsKKwlpbnQgcmlzY19mbGFnID0gUklTQ19DTlRfUkVTRVQ7CisJdW5zaWduZWQgaW50IGJvdHRvbV9vZmZzZXQgPSBicGw7CisJZG1hX2FkZHJfdCByaXNjX3BoeXNfanVtcF9hZGRyOworCisJaWYgKGRldi0+X2lzTlRTQ19jaDIpIHsKKwkJb2RkX251bV9saW5lcyA9IHNpbmdsZWZpZWxkX2xpbmVzICsgMTsKKwkJcmlzY19wcm9ncmFtX3NpemUgPSBGUkFNRTFfVklEX1BST0dfU0laRTsKKwkJZnJhbWVfc2l6ZSA9CisJCSAgICAoYnBsID09CisJCSAgICAgWTQxMV9MSU5FX1NaKSA/IEZSQU1FX1NJWkVfTlRTQ19ZNDExIDoKKwkJICAgIEZSQU1FX1NJWkVfTlRTQ19ZNDIyOworCX0gZWxzZSB7CisJCXJpc2NfcHJvZ3JhbV9zaXplID0gUEFMX1ZJRF9QUk9HX1NJWkU7CisJCWZyYW1lX3NpemUgPQorCQkgICAgKGJwbCA9PQorCQkgICAgIFk0MTFfTElORV9TWikgPyBGUkFNRV9TSVpFX1BBTF9ZNDExIDogRlJBTUVfU0laRV9QQUxfWTQyMjsKKwl9CisKKwkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgUmlzYyBidWZmZXIgcHJvZ3JhbSAqLworCXJwID0gZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDI7CisKKwlmb3IgKGZyYW1lID0gMDsgZnJhbWUgPCBOVU1fRlJBTUVTOyBmcmFtZSsrKSB7CisJCWRhdGFidWZfb2Zmc2V0ID0gZnJhbWVfc2l6ZSAqIGZyYW1lOworCisJCWlmIChVTlNFVCAhPSB0b3Bfb2Zmc2V0KSB7CisJCQlmaWZvX2VuYWJsZSA9IChmcmFtZSA9PSAwKSA/IEZJRk9fRU5BQkxFIDogRklGT19ESVNBQkxFOworCQkJcnAgPSBjeDI1ODIxX3Jpc2NfZmllbGRfdXBzdHJlYW1fY2gyKGRldiwgcnAsCisJCQkJCQkJICAgICBkZXYtPgorCQkJCQkJCSAgICAgX2RhdGFfYnVmX3BoeXNfYWRkcl9jaDIKKwkJCQkJCQkgICAgICsgZGF0YWJ1Zl9vZmZzZXQsCisJCQkJCQkJICAgICB0b3Bfb2Zmc2V0LCAwLCBicGwsCisJCQkJCQkJICAgICBvZGRfbnVtX2xpbmVzLAorCQkJCQkJCSAgICAgZmlmb19lbmFibGUsCisJCQkJCQkJICAgICBPRERfRklFTEQpOworCQl9CisKKwkJZmlmb19lbmFibGUgPSBGSUZPX0RJU0FCTEU7CisKKwkJLy9FdmVuIGZpZWxkCisJCXJwID0gY3gyNTgyMV9yaXNjX2ZpZWxkX3Vwc3RyZWFtX2NoMihkZXYsIHJwLAorCQkJCQkJICAgICBkZXYtPgorCQkJCQkJICAgICBfZGF0YV9idWZfcGh5c19hZGRyX2NoMiArCisJCQkJCQkgICAgIGRhdGFidWZfb2Zmc2V0LAorCQkJCQkJICAgICBib3R0b21fb2Zmc2V0LCAweDIwMCwgYnBsLAorCQkJCQkJICAgICBzaW5nbGVmaWVsZF9saW5lcywKKwkJCQkJCSAgICAgZmlmb19lbmFibGUsIEVWRU5fRklFTEQpOworCisJCWlmIChmcmFtZSA9PSAwKSB7CisJCQlyaXNjX2ZsYWcgPSBSSVNDX0NOVF9SRVNFVDsKKwkJCXJpc2NfcGh5c19qdW1wX2FkZHIgPQorCQkJICAgIGRldi0+X2RtYV9waHlzX3N0YXJ0X2FkZHJfY2gyICsgcmlzY19wcm9ncmFtX3NpemU7CisJCX0gZWxzZSB7CisJCQlyaXNjX2ZsYWcgPSBSSVNDX0NOVF9JTkM7CisJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0gZGV2LT5fZG1hX3BoeXNfc3RhcnRfYWRkcl9jaDI7CisJCX0KKworCQkvLyBMb29wIHRvIDJuZEZyYW1lUklTQyBvciB0byBTdGFydCBvZiBSaXNjIHByb2dyYW0gJiBnZW5lcmF0ZSBJUlEKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IHJpc2NfZmxhZyk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjX3BoeXNfanVtcF9hZGRyKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9CisJICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9KXTsKKwl1MzIgdG1wID0gMDsKKworCWlmICghZGV2LT5faXNfcnVubmluZ19jaDIpIHsKKwkJcHJpbnRrCisJCSAgICAoImN4MjU4MjE6IE5vIHZpZGVvIGZpbGUgaXMgY3VycmVudGx5IHJ1bm5pbmcgc28gcmV0dXJuIVxuIik7CisJCXJldHVybjsKKwl9CisJLy9EaXNhYmxlIFJJU0MgaW50ZXJydXB0cworCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X21zayk7CisJY3hfd3JpdGUoc3JhbV9jaC0+aW50X21zaywgdG1wICYgfl9pbnRyX21zayk7CisKKwkvL1R1cm4gT0ZGIHJpc2MgYW5kIGZpZm8KKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCWN4X3dyaXRlKHNyYW1fY2gtPmRtYV9jdGwsIHRtcCAmIH4oRkxEX1ZJRF9GSUZPX0VOIHwgRkxEX1ZJRF9SSVNDX0VOKSk7CisKKwkvL0NsZWFyIGRhdGEgYnVmZmVyIG1lbW9yeQorCWlmIChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyKQorCQltZW1zZXQoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiwgMCwKKwkJICAgICAgIGRldi0+X2RhdGFfYnVmX3NpemVfY2gyKTsKKworCWRldi0+X2lzX3J1bm5pbmdfY2gyID0gMDsKKwlkZXYtPl9pc19maXJzdF9mcmFtZV9jaDIgPSAwOworCWRldi0+X2ZyYW1lX2NvdW50X2NoMiA9IDA7CisJZGV2LT5fZmlsZV9zdGF0dXNfY2gyID0gRU5EX09GX0ZJTEU7CisKKwlpZiAoZGV2LT5faXJxX3F1ZXVlc19jaDIpIHsKKwkJa2ZyZWUoZGV2LT5faXJxX3F1ZXVlc19jaDIpOworCQlkZXYtPl9pcnFfcXVldWVzX2NoMiA9IE5VTEw7CisJfQorCisJaWYgKGRldi0+X2ZpbGVuYW1lX2NoMiAhPSBOVUxMKQorCQlrZnJlZShkZXYtPl9maWxlbmFtZV9jaDIpOworCisJdG1wID0gY3hfcmVhZChWSURfQ0hfTU9ERV9TRUwpOworCWN4X3dyaXRlKFZJRF9DSF9NT0RFX1NFTCwgdG1wICYgMHhGRkZGRkUwMCk7Cit9CisKK3ZvaWQgY3gyNTgyMV9mcmVlX21lbV91cHN0cmVhbV9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+X2lzX3J1bm5pbmdfY2gyKSB7CisJCWN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDIoZGV2KTsKKwl9CisKKwlpZiAoZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDIpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT5fcmlzY19zaXplX2NoMiwKKwkJCQkgICAgZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDIsCisJCQkJICAgIGRldi0+X2RtYV9waHlzX2FkZHJfY2gyKTsKKwkJZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDIgPSBOVUxMOworCX0KKworCWlmIChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+X2RhdGFfYnVmX3NpemVfY2gyLAorCQkJCSAgICBkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyLAorCQkJCSAgICBkZXYtPl9kYXRhX2J1Zl9waHlzX2FkZHJfY2gyKTsKKwkJZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiA9IE5VTEw7CisJfQorfQorCitpbnQgY3gyNTgyMV9nZXRfZnJhbWVfY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoKQoreworCXN0cnVjdCBmaWxlICpteWZpbGU7CisJaW50IGZyYW1lX2luZGV4X3RlbXAgPSBkZXYtPl9mcmFtZV9pbmRleF9jaDI7CisJaW50IGkgPSAwOworCWludCBsaW5lX3NpemUgPQorCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0X2NoMiA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gWTQxMV9MSU5FX1NaIDogWTQyMl9MSU5FX1NaOworCWludCBmcmFtZV9zaXplID0gMDsKKwlpbnQgZnJhbWVfb2Zmc2V0ID0gMDsKKwlzc2l6ZV90IHZmc19yZWFkX3JldHZhbCA9IDA7CisJY2hhciBteWJ1ZltsaW5lX3NpemVdOworCWxvZmZfdCBmaWxlX29mZnNldDsKKwlsb2ZmX3QgcG9zOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKKwlpZiAoZGV2LT5fZmlsZV9zdGF0dXNfY2gyID09IEVORF9PRl9GSUxFKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPl9pc05UU0NfY2gyKSB7CisJCWZyYW1lX3NpemUgPQorCQkgICAgKGxpbmVfc2l6ZSA9PQorCQkgICAgIFk0MTFfTElORV9TWikgPyBGUkFNRV9TSVpFX05UU0NfWTQxMSA6CisJCSAgICBGUkFNRV9TSVpFX05UU0NfWTQyMjsKKwl9IGVsc2UgeworCQlmcmFtZV9zaXplID0KKwkJICAgIChsaW5lX3NpemUgPT0KKwkJICAgICBZNDExX0xJTkVfU1opID8gRlJBTUVfU0laRV9QQUxfWTQxMSA6IEZSQU1FX1NJWkVfUEFMX1k0MjI7CisJfQorCisJZnJhbWVfb2Zmc2V0ID0gKGZyYW1lX2luZGV4X3RlbXAgPiAwKSA/IGZyYW1lX3NpemUgOiAwOworCWZpbGVfb2Zmc2V0ID0gZGV2LT5fZnJhbWVfY291bnRfY2gyICogZnJhbWVfc2l6ZTsKKworCW15ZmlsZSA9IGZpbHBfb3BlbihkZXYtPl9maWxlbmFtZV9jaDIsIE9fUkRPTkxZIHwgT19MQVJHRUZJTEUsIDApOworCisJaWYgKElTX0VSUihteWZpbGUpKSB7CisJCWNvbnN0IGludCBvcGVuX2Vycm5vID0gLVBUUl9FUlIobXlmaWxlKTsKKwkJcHJpbnRrKCIlcygpOiBFUlJPUiBvcGVuaW5nIGZpbGUoJXMpIHdpdGggZXJybm8gPSAlZCEgXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRldi0+X2ZpbGVuYW1lX2NoMiwgb3Blbl9lcnJubyk7CisJCXJldHVybiBQVFJfRVJSKG15ZmlsZSk7CisJfSBlbHNlIHsKKwkJaWYgKCEobXlmaWxlLT5mX29wKSkgeworCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWlmICghbXlmaWxlLT5mX29wLT5yZWFkKSB7CisJCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEiLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcG9zID0gbXlmaWxlLT5mX3BvczsKKwkJb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPl9saW5lc19jb3VudF9jaDI7IGkrKykgeworCQkJcG9zID0gZmlsZV9vZmZzZXQ7CisKKwkJCXZmc19yZWFkX3JldHZhbCA9CisJCQkgICAgdmZzX3JlYWQobXlmaWxlLCBteWJ1ZiwgbGluZV9zaXplLCAmcG9zKTsKKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA+IDAgJiYgdmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZQorCQkJICAgICYmIGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIgIT0gTlVMTCkgeworCQkJCW1lbWNweSgodm9pZCAqKShkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyICsKKwkJCQkJCWZyYW1lX29mZnNldCAvIDQpLCBteWJ1ZiwKKwkJCQkgICAgICAgdmZzX3JlYWRfcmV0dmFsKTsKKwkJCX0KKworCQkJZmlsZV9vZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOworCQkJZnJhbWVfb2Zmc2V0ICs9IHZmc19yZWFkX3JldHZhbDsKKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIkRvbmU6IGV4aXQgJXMoKSBzaW5jZSBubyBtb3JlIGJ5dGVzIHRvIHJlYWQgZnJvbSBWaWRlbyBmaWxlLlxuIiwKKwkJCQkgICAgICAgX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGkgPiAwKQorCQkJZGV2LT5fZnJhbWVfY291bnRfY2gyKys7CisKKwkJZGV2LT5fZmlsZV9zdGF0dXNfY2gyID0KKwkJICAgICh2ZnNfcmVhZF9yZXR2YWwgPT0gbGluZV9zaXplKSA/IElOX1BST0dSRVNTIDogRU5EX09GX0ZJTEU7CisKKwkJc2V0X2ZzKG9sZF9mcyk7CisJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV92aWR1cHNfaGFuZGxlcl9jaDIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDI1ODIxX2RldiwgX2lycV93b3JrX2VudHJ5X2NoMik7CisKKwlpZiAoIWRldikgeworCQlwcmludGsoIkVSUk9SICVzKCk6IHNpbmNlIGNvbnRhaW5lcl9vZih3b3JrX3N0cnVjdCkgRkFJTEVEISBcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwljeDI1ODIxX2dldF9mcmFtZV9jaDIoZGV2LAorCQkJICAgICAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPgorCQkJCQkJICBfY2hhbm5lbDJfdXBzdHJlYW1fc2VsZWN0XSk7Cit9CisKK2ludCBjeDI1ODIxX29wZW5maWxlX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwlzdHJ1Y3QgZmlsZSAqbXlmaWxlOworCWludCBpID0gMCwgaiA9IDA7CisJaW50IGxpbmVfc2l6ZSA9CisJICAgIChkZXYtPl9waXhlbF9mb3JtYXRfY2gyID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBZNDExX0xJTkVfU1ogOiBZNDIyX0xJTkVfU1o7CisJc3NpemVfdCB2ZnNfcmVhZF9yZXR2YWwgPSAwOworCWNoYXIgbXlidWZbbGluZV9zaXplXTsKKwlsb2ZmX3QgcG9zOworCWxvZmZfdCBvZmZzZXQgPSAodW5zaWduZWQgbG9uZykwOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKKwlteWZpbGUgPSBmaWxwX29wZW4oZGV2LT5fZmlsZW5hbWVfY2gyLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLCAwKTsKKworCWlmIChJU19FUlIobXlmaWxlKSkgeworCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7CisJCXByaW50aygiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhIFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZV9jaDIsIG9wZW5fZXJybm8pOworCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOworCX0gZWxzZSB7CisJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKKwkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgeworCQkJcHJpbnRrCisJCQkgICAgKCIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhICBSZXR1cm5pbmcuIiwKKwkJCSAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlwb3MgPSBteWZpbGUtPmZfcG9zOworCQlvbGRfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9GUkFNRVM7IGorKykgeworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+X2xpbmVzX2NvdW50X2NoMjsgaSsrKSB7CisJCQkJcG9zID0gb2Zmc2V0OworCisJCQkJdmZzX3JlYWRfcmV0dmFsID0KKwkJCQkgICAgdmZzX3JlYWQobXlmaWxlLCBteWJ1ZiwgbGluZV9zaXplLCAmcG9zKTsKKworCQkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPiAwCisJCQkJICAgICYmIHZmc19yZWFkX3JldHZhbCA9PSBsaW5lX3NpemUKKwkJCQkgICAgJiYgZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiAhPSBOVUxMKSB7CisJCQkJCW1lbWNweSgodm9pZCAqKShkZXYtPgorCQkJCQkJCV9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyCisJCQkJCQkJKyBvZmZzZXQgLyA0KSwgbXlidWYsCisJCQkJCSAgICAgICB2ZnNfcmVhZF9yZXR2YWwpOworCQkJCX0KKworCQkJCW9mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CisKKwkJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCisJCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGkgPiAwKQorCQkJCWRldi0+X2ZyYW1lX2NvdW50X2NoMisrOworCisJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlkZXYtPl9maWxlX3N0YXR1c19jaDIgPQorCQkgICAgKHZmc19yZWFkX3JldHZhbCA9PSBsaW5lX3NpemUpID8gSU5fUFJPR1JFU1MgOiBFTkRfT0ZfRklMRTsKKworCQlzZXRfZnMob2xkX2ZzKTsKKwkJbXlmaWxlLT5mX3BvcyA9IDA7CisJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI1ODIxX3Vwc3RyZWFtX2J1ZmZlcl9wcmVwYXJlX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2gsCisJCQkJCSAgICAgICBpbnQgYnBsKQoreworCWludCByZXQgPSAwOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJZG1hX2FkZHJfdCBkYXRhX2RtYV9hZGRyOworCisJaWYgKGRldi0+X2RtYV92aXJ0X2FkZHJfY2gyICE9IE5VTEwpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgZGV2LT51cHN0cmVhbV9yaXNjYnVmX3NpemVfY2gyLAorCQkJCSAgICBkZXYtPl9kbWFfdmlydF9hZGRyX2NoMiwKKwkJCQkgICAgZGV2LT5fZG1hX3BoeXNfYWRkcl9jaDIpOworCX0KKworCWRldi0+X2RtYV92aXJ0X2FkZHJfY2gyID0KKwkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+dXBzdHJlYW1fcmlzY2J1Zl9zaXplX2NoMiwKKwkJCQkgJmRtYV9hZGRyKTsKKwlkZXYtPl9kbWFfdmlydF9zdGFydF9hZGRyX2NoMiA9IGRldi0+X2RtYV92aXJ0X2FkZHJfY2gyOworCWRldi0+X2RtYV9waHlzX3N0YXJ0X2FkZHJfY2gyID0gZG1hX2FkZHI7CisJZGV2LT5fZG1hX3BoeXNfYWRkcl9jaDIgPSBkbWFfYWRkcjsKKwlkZXYtPl9yaXNjX3NpemVfY2gyID0gZGV2LT51cHN0cmVhbV9yaXNjYnVmX3NpemVfY2gyOworCisJaWYgKCFkZXYtPl9kbWFfdmlydF9hZGRyX2NoMikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgUmlzYyBidWZmZXIhIFJldHVybmluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvL0luaWl0aXplIGF0IHRoaXMgYWRkcmVzcyB1bnRpbCBuIGJ5dGVzIHRvIDAKKwltZW1zZXQoZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDIsIDAsIGRldi0+X3Jpc2Nfc2l6ZV9jaDIpOworCisJaWYgKGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPnVwc3RyZWFtX2RhdGFidWZfc2l6ZV9jaDIsCisJCQkJICAgIGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcl9jaDIsCisJCQkJICAgIGRldi0+X2RhdGFfYnVmX3BoeXNfYWRkcl9jaDIpOworCX0KKwkvL0ZvciBWaWRlbyBEYXRhIGJ1ZmZlciBhbGxvY2F0aW9uCisJZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMiA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPnVwc3RyZWFtX2RhdGFidWZfc2l6ZV9jaDIsCisJCQkJICZkYXRhX2RtYV9hZGRyKTsKKwlkZXYtPl9kYXRhX2J1Zl9waHlzX2FkZHJfY2gyID0gZGF0YV9kbWFfYWRkcjsKKwlkZXYtPl9kYXRhX2J1Zl9zaXplX2NoMiA9IGRldi0+dXBzdHJlYW1fZGF0YWJ1Zl9zaXplX2NoMjsKKworCWlmICghZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSBidWZmZXIhIFJldHVybmluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvL0luaXRpYWxpemUgYXQgdGhpcyBhZGRyZXNzIHVudGlsIG4gYnl0ZXMgdG8gMAorCW1lbXNldChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHJfY2gyLCAwLCBkZXYtPl9kYXRhX2J1Zl9zaXplX2NoMik7CisKKwlyZXQgPSBjeDI1ODIxX29wZW5maWxlX2NoMihkZXYsIHNyYW1fY2gpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLy9DcmVhdGluZyBSSVNDIHByb2dyYW1zCisJcmV0ID0KKwkgICAgY3gyNTgyMV9yaXNjX2J1ZmZlcl91cHN0cmVhbV9jaDIoZGV2LCBkZXYtPnBjaSwgMCwgYnBsLAorCQkJCQkgICAgIGRldi0+X2xpbmVzX2NvdW50X2NoMik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgImN4MjU4MjE6IEZhaWxlZCBjcmVhdGluZyBWaWRlbyBVcHN0cmVhbSBSaXNjIHByb2dyYW1zISBcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY3gyNTgyMV92aWRlb191cHN0cmVhbV9pcnFfY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0sCisJCQkJICAgdTMyIHN0YXR1cykKK3sKKwl1MzIgaW50X21za190bXA7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dOworCWludCBzaW5nbGVmaWVsZF9saW5lcyA9IE5UU0NfRklFTERfSEVJR0hUOworCWludCBsaW5lX3NpemVfaW5fYnl0ZXMgPSBZNDIyX0xJTkVfU1o7CisJaW50IG9kZF9yaXNjX3Byb2dfc2l6ZSA9IDA7CisJZG1hX2FkZHJfdCByaXNjX3BoeXNfanVtcF9hZGRyOworCV9fbGUzMiAqcnA7CisKKwlpZiAoc3RhdHVzICYgRkxEX1ZJRF9TUkNfUklTQzEpIHsKKwkJLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyBvbmUgcHJvZ3JhbSBwZXIgY2FsbAorCQl1MzIgcHJvZ19jbnQgPSBjeF9yZWFkKGNoYW5uZWwtPmdwY250KTsKKworCQkvL1NpbmNlIHdlJ3ZlIGlkZW50aWZpZWQgb3VyIElSUSwgY2xlYXIgb3VyIGJpdHMgZnJvbSB0aGUgaW50ZXJydXB0IG1hc2sgYW5kIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzCisJCWludF9tc2tfdG1wID0gY3hfcmVhZChjaGFubmVsLT5pbnRfbXNrKTsKKwkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X21zaywgaW50X21za190bXAgJiB+X2ludHJfbXNrKTsKKwkJY3hfd3JpdGUoY2hhbm5lbC0+aW50X3N0YXQsIF9pbnRyX21zayk7CisKKwkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKKworCQlkZXYtPl9mcmFtZV9pbmRleF9jaDIgPSBwcm9nX2NudDsKKworCQlxdWV1ZV93b3JrKGRldi0+X2lycV9xdWV1ZXNfY2gyLCAmZGV2LT5faXJxX3dvcmtfZW50cnlfY2gyKTsKKworCQlpZiAoZGV2LT5faXNfZmlyc3RfZnJhbWVfY2gyKSB7CisJCQlkZXYtPl9pc19maXJzdF9mcmFtZV9jaDIgPSAwOworCisJCQlpZiAoZGV2LT5faXNOVFNDX2NoMikgeworCQkJCXNpbmdsZWZpZWxkX2xpbmVzICs9IDE7CisJCQkJb2RkX3Jpc2NfcHJvZ19zaXplID0gT0REX0ZMRF9OVFNDX1BST0dfU0laRTsKKwkJCX0gZWxzZSB7CisJCQkJc2luZ2xlZmllbGRfbGluZXMgPSBQQUxfRklFTERfSEVJR0hUOworCQkJCW9kZF9yaXNjX3Byb2dfc2l6ZSA9IE9ERF9GTERfUEFMX1BST0dfU0laRTsKKwkJCX0KKworCQkJaWYgKGRldi0+X2RtYV92aXJ0X3N0YXJ0X2FkZHJfY2gyICE9IE5VTEwpIHsKKwkJCQlsaW5lX3NpemVfaW5fYnl0ZXMgPQorCQkJCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0X2NoMiA9PQorCQkJCSAgICAgUElYRUxfRlJNVF80MTEpID8gWTQxMV9MSU5FX1NaIDoKKwkJCQkgICAgWTQyMl9MSU5FX1NaOworCQkJCXJpc2NfcGh5c19qdW1wX2FkZHIgPQorCQkJCSAgICBkZXYtPl9kbWFfcGh5c19zdGFydF9hZGRyX2NoMiArCisJCQkJICAgIG9kZF9yaXNjX3Byb2dfc2l6ZTsKKworCQkJCXJwID0gY3gyNTgyMV91cGRhdGVfcmlzY3Byb2dyYW1fY2gyKGRldiwKKwkJCQkJCQkJICAgIGRldi0+CisJCQkJCQkJCSAgICBfZG1hX3ZpcnRfc3RhcnRfYWRkcl9jaDIsCisJCQkJCQkJCSAgICBUT1BfT0ZGU0VULAorCQkJCQkJCQkgICAgbGluZV9zaXplX2luX2J5dGVzLAorCQkJCQkJCQkgICAgMHgwLAorCQkJCQkJCQkgICAgc2luZ2xlZmllbGRfbGluZXMsCisJCQkJCQkJCSAgICBGSUZPX0RJU0FCTEUsCisJCQkJCQkJCSAgICBPRERfRklFTEQpOworCisJCQkJLy8gSnVtcCB0byBFdmVuIFJpc2MgcHJvZ3JhbSBvZiAxc3QgRnJhbWUKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIocmlzY19waHlzX2p1bXBfYWRkcik7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOworCQkJfQorCQl9CisKKwkJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOworCX0KKworCWlmIChkZXYtPl9maWxlX3N0YXR1c19jaDIgPT0gRU5EX09GX0ZJTEUpIHsKKwkJcHJpbnRrKCJjeDI1ODIxOiBFT0YgQ2hhbm5lbCAyIEZyYW1lY291bnQgPSAlZFxuIiwKKwkJICAgICAgIGRldi0+X2ZyYW1lX2NvdW50X2NoMik7CisJCXJldHVybiAtMTsKKwl9CisJLy9FbFNFLCBzZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCByZS1lbmFibGUgaXJxLgorCWludF9tc2tfdG1wID0gY3hfcmVhZChjaGFubmVsLT5pbnRfbXNrKTsKKwljeF93cml0ZShjaGFubmVsLT5pbnRfbXNrLCBpbnRfbXNrX3RtcCB8PSBfaW50cl9tc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjeDI1ODIxX3Vwc3RyZWFtX2lycV9jaDIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZGV2X2lkOworCXUzMiBtc2tfc3RhdCwgdmlkX3N0YXR1czsKKwlpbnQgaGFuZGxlZCA9IDA7CisJaW50IGNoYW5uZWxfbnVtID0gMDsKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtMTsKKworCWNoYW5uZWxfbnVtID0gVklEX1VQU1RSRUFNX1NSQU1fQ0hBTk5FTF9KOworCisJc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbm5lbF9udW1dOworCisJbXNrX3N0YXQgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc3RhdCk7CisJdmlkX3N0YXR1cyA9IGN4X3JlYWQoc3JhbV9jaC0+aW50X3N0YXQpOworCisJLy8gT25seSBkZWFsIHdpdGggb3VyIGludGVycnVwdAorCWlmICh2aWRfc3RhdHVzKSB7CisJCWhhbmRsZWQgPQorCQkgICAgY3gyNTgyMV92aWRlb191cHN0cmVhbV9pcnFfY2gyKGRldiwgY2hhbm5lbF9udW0sCisJCQkJCQkgICB2aWRfc3RhdHVzKTsKKwl9CisKKwlpZiAoaGFuZGxlZCA8IDApIHsKKwkJY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX3ZpZGVvX2NoMihkZXYpOworCX0gZWxzZSB7CisJCWhhbmRsZWQgKz0gaGFuZGxlZDsKKwl9CisKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9zZXRfcGl4ZWxlbmdpbmVfY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwgaW50IHBpeF9mb3JtYXQpCit7CisJaW50IHdpZHRoID0gV0lEVEhfRDE7CisJaW50IGhlaWdodCA9IGRldi0+X2xpbmVzX2NvdW50X2NoMjsKKwlpbnQgbnVtX2xpbmVzLCBvZGRfbnVtX2xpbmVzOworCXUzMiB2YWx1ZTsKKwlpbnQgdmlwX21vZGUgPSBQSVhFTF9FTkdJTkVfVklQMTsKKworCXZhbHVlID0gKChwaXhfZm9ybWF0ICYgMHgzKSA8PCAxMikgfCAodmlwX21vZGUgJiAweDcpOworCXZhbHVlICY9IDB4RkZGRkZGRUY7CisJdmFsdWUgfD0gZGV2LT5faXNOVFNDX2NoMiA/IDAgOiAweDEwOworCWN4X3dyaXRlKGNoLT52aWRfZm10X2N0bCwgdmFsdWUpOworCisJLy8gc2V0IG51bWJlciBvZiBhY3RpdmUgcGl4ZWxzIGluIGVhY2ggbGluZS4gRGVmYXVsdCBpcyA3MjAgcGl4ZWxzIGluIGJvdGggTlRTQyBhbmQgUEFMIGZvcm1hdAorCWN4X3dyaXRlKGNoLT52aWRfYWN0aXZlX2N0bDEsIHdpZHRoKTsKKworCW51bV9saW5lcyA9IChoZWlnaHQgLyAyKSAmIDB4M0ZGOworCW9kZF9udW1fbGluZXMgPSBudW1fbGluZXM7CisKKwlpZiAoZGV2LT5faXNOVFNDX2NoMikgeworCQlvZGRfbnVtX2xpbmVzICs9IDE7CisJfQorCisJdmFsdWUgPSAobnVtX2xpbmVzIDw8IDE2KSB8IG9kZF9udW1fbGluZXM7CisKKwkvLyBzZXQgbnVtYmVyIG9mIGFjdGl2ZSBsaW5lcyBpbiBmaWVsZCAwICh0b3ApIGFuZCBmaWVsZCAxIChib3R0b20pCisJY3hfd3JpdGUoY2gtPnZpZF9hY3RpdmVfY3RsMiwgdmFsdWUpOworCisJY3hfd3JpdGUoY2gtPnZpZF9jZHRfc2l6ZSwgVklEX0NEVF9TSVpFID4+IDMpOworfQorCitpbnQgY3gyNTgyMV9zdGFydF92aWRlb19kbWFfdXBzdHJlYW1fY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQkgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwl1MzIgdG1wID0gMDsKKwlpbnQgZXJyID0gMDsKKworCS8vIDY1Ni9WSVAgU1JDIFVwc3RyZWFtIENoYW5uZWwgSSAmIEogYW5kIDcgLSBIb3N0IEJ1cyBJbnRlcmZhY2UgZm9yIGNoYW5uZWwgQS1DCisJdG1wID0gY3hfcmVhZChWSURfQ0hfTU9ERV9TRUwpOworCWN4X3dyaXRlKFZJRF9DSF9NT0RFX1NFTCwgdG1wIHwgMHgxQjAwMDFGRik7CisKKwkvLyBTZXQgdGhlIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIFJJU0MgcHJvZ3JhbSBpbiB0aGUgaW5pdGlhbCBwcm9ncmFtIGNvdW50ZXIoSVBDKSBtZW1iZXIgb2YgdGhlIGNtZHMuCisJY3hfd3JpdGUoc3JhbV9jaC0+Y21kc19zdGFydCArIDAsIGRldi0+X2RtYV9waHlzX2FkZHJfY2gyKTsKKwljeF93cml0ZShzcmFtX2NoLT5jbWRzX3N0YXJ0ICsgNCwgMCk7CS8qIFJpc2MgSVBDIEhpZ2ggNjQgYml0cyA2My0zMiAqLworCisJLyogcmVzZXQgY291bnRlciAqLworCWN4X3dyaXRlKHNyYW1fY2gtPmdwY250X2N0bCwgMyk7CisKKwkvLyBDbGVhciBvdXIgYml0cyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgorCWN4X3dyaXRlKHNyYW1fY2gtPmludF9zdGF0LCBfaW50cl9tc2spOworCisJLy9TZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCBlbmFibGUgaXJxLgorCWN4X3NldChQQ0lfSU5UX01TSywgY3hfcmVhZChQQ0lfSU5UX01TSykgfCAoMSA8PCBzcmFtX2NoLT5pcnFfYml0KSk7CisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXNrKTsKKwljeF93cml0ZShzcmFtX2NoLT5pbnRfbXNrLCB0bXAgfD0gX2ludHJfbXNrKTsKKworCWVyciA9CisJICAgIHJlcXVlc3RfaXJxKGRldi0+cGNpLT5pcnEsIGN4MjU4MjFfdXBzdHJlYW1faXJxX2NoMiwKKwkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2LT5uYW1lLCBkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCB1cHN0cmVhbSBJUlEgJWRcbiIsIGRldi0+bmFtZSwKKwkJICAgICAgIGRldi0+cGNpLT5pcnEpOworCQlnb3RvIGZhaWxfaXJxOworCX0KKwkvLyBTdGFydCB0aGUgRE1BICBlbmdpbmUKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCWN4X3NldChzcmFtX2NoLT5kbWFfY3RsLCB0bXAgfCBGTERfVklEX1JJU0NfRU4pOworCisJZGV2LT5faXNfcnVubmluZ19jaDIgPSAxOworCWRldi0+X2lzX2ZpcnN0X2ZyYW1lX2NoMiA9IDE7CisKKwlyZXR1cm4gMDsKKworICAgICAgZmFpbF9pcnE6CisJY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihkZXYpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjeDI1ODIxX3ZpZHVwc3RyZWFtX2luaXRfY2gyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbm5lbF9zZWxlY3QsCisJCQkJIGludCBwaXhlbF9mb3JtYXQpCit7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaDsKKwl1MzIgdG1wOworCWludCByZXR2YWwgPSAwOworCWludCBlcnIgPSAwOworCWludCBkYXRhX2ZyYW1lX3NpemUgPSAwOworCWludCByaXNjX2J1ZmZlcl9zaXplID0gMDsKKwlpbnQgc3RyX2xlbmd0aCA9IDA7CisKKwlpZiAoZGV2LT5faXNfcnVubmluZ19jaDIpIHsKKwkJcHJpbnRrKCJWaWRlbyBDaGFubmVsIGlzIHN0aWxsIHJ1bm5pbmcgc28gcmV0dXJuIVxuIik7CisJCXJldHVybiAwOworCX0KKworCWRldi0+X2NoYW5uZWwyX3Vwc3RyZWFtX3NlbGVjdCA9IGNoYW5uZWxfc2VsZWN0OworCXNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5uZWxfc2VsZWN0XTsKKworCUlOSVRfV09SSygmZGV2LT5faXJxX3dvcmtfZW50cnlfY2gyLCBjeDI1ODIxX3ZpZHVwc19oYW5kbGVyX2NoMik7CisJZGV2LT5faXJxX3F1ZXVlc19jaDIgPQorCSAgICBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY3gyNTgyMV93b3JrcXVldWUyIik7CisKKwlpZiAoIWRldi0+X2lycV9xdWV1ZXNfY2gyKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxOiBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgpIGZvciBWaWRlbyBGQUlMRUQhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8vIDY1Ni9WSVAgU1JDIFVwc3RyZWFtIENoYW5uZWwgSSAmIEogYW5kIDcgLSBIb3N0IEJ1cyBJbnRlcmZhY2UgZm9yIGNoYW5uZWwgQS1DCisJdG1wID0gY3hfcmVhZChWSURfQ0hfTU9ERV9TRUwpOworCWN4X3dyaXRlKFZJRF9DSF9NT0RFX1NFTCwgdG1wIHwgMHgxQjAwMDFGRik7CisKKwlkZXYtPl9pc19ydW5uaW5nX2NoMiA9IDA7CisJZGV2LT5fZnJhbWVfY291bnRfY2gyID0gMDsKKwlkZXYtPl9maWxlX3N0YXR1c19jaDIgPSBSRVNFVF9TVEFUVVM7CisJZGV2LT5fbGluZXNfY291bnRfY2gyID0gZGV2LT5faXNOVFNDX2NoMiA/IDQ4MCA6IDU3NjsKKwlkZXYtPl9waXhlbF9mb3JtYXRfY2gyID0gcGl4ZWxfZm9ybWF0OworCWRldi0+X2xpbmVfc2l6ZV9jaDIgPQorCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0X2NoMiA9PQorCSAgICAgUElYRUxfRlJNVF80MjIpID8gKFdJRFRIX0QxICogMikgOiAoV0lEVEhfRDEgKiAzKSAvIDI7CisJZGF0YV9mcmFtZV9zaXplID0gZGV2LT5faXNOVFNDX2NoMiA/IE5UU0NfREFUQV9CVUZfU1ogOiBQQUxfREFUQV9CVUZfU1o7CisJcmlzY19idWZmZXJfc2l6ZSA9CisJICAgIGRldi0+X2lzTlRTQ19jaDIgPyBOVFNDX1JJU0NfQlVGX1NJWkUgOiBQQUxfUklTQ19CVUZfU0laRTsKKworCWlmIChkZXYtPmlucHV0X2ZpbGVuYW1lX2NoMikgeworCQlzdHJfbGVuZ3RoID0gc3RybGVuKGRldi0+aW5wdXRfZmlsZW5hbWVfY2gyKTsKKwkJZGV2LT5fZmlsZW5hbWVfY2gyID0KKwkJICAgIChjaGFyICopa21hbGxvYyhzdHJfbGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkZXYtPl9maWxlbmFtZV9jaDIpCisJCQlnb3RvIGVycm9yOworCisJCW1lbWNweShkZXYtPl9maWxlbmFtZV9jaDIsIGRldi0+aW5wdXRfZmlsZW5hbWVfY2gyLAorCQkgICAgICAgc3RyX2xlbmd0aCArIDEpOworCX0gZWxzZSB7CisJCXN0cl9sZW5ndGggPSBzdHJsZW4oZGV2LT5fZGVmYXVsdG5hbWVfY2gyKTsKKwkJZGV2LT5fZmlsZW5hbWVfY2gyID0KKwkJICAgIChjaGFyICopa21hbGxvYyhzdHJfbGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkZXYtPl9maWxlbmFtZV9jaDIpCisJCQlnb3RvIGVycm9yOworCisJCW1lbWNweShkZXYtPl9maWxlbmFtZV9jaDIsIGRldi0+X2RlZmF1bHRuYW1lX2NoMiwKKwkJICAgICAgIHN0cl9sZW5ndGggKyAxKTsKKwl9CisKKwkvL0RlZmF1bHQgaWYgZmlsZW5hbWUgaXMgZW1wdHkgc3RyaW5nCisJaWYgKHN0cmNtcChkZXYtPmlucHV0X2ZpbGVuYW1lX2NoMiwgIiIpID09IDApIHsKKwkJaWYgKGRldi0+X2lzTlRTQ19jaDIpIHsKKwkJCWRldi0+X2ZpbGVuYW1lX2NoMiA9CisJCQkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdF9jaDIgPT0KKwkJCSAgICAgUElYRUxfRlJNVF80MTEpID8gIi9yb290L3ZpZDQxMS55dXYiIDoKKwkJCSAgICAiL3Jvb3QvdmlkdGVzdC55dXYiOworCQl9IGVsc2UgeworCQkJZGV2LT5fZmlsZW5hbWVfY2gyID0KKwkJCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0X2NoMiA9PQorCQkJICAgICBQSVhFTF9GUk1UXzQxMSkgPyAiL3Jvb3QvcGFsNDExLnl1diIgOgorCQkJICAgICIvcm9vdC9wYWw0MjIueXV2IjsKKwkJfQorCX0KKworCXJldHZhbCA9CisJICAgIGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX3Vwc3RyZWFtKGRldiwgc3JhbV9jaCwKKwkJCQkJCWRldi0+X2xpbmVfc2l6ZV9jaDIsIDApOworCisJLyogc2V0dXAgZmlmbyArIGZvcm1hdCAqLworCWN4MjU4MjFfc2V0X3BpeGVsZW5naW5lX2NoMihkZXYsIHNyYW1fY2gsIGRldi0+X3BpeGVsX2Zvcm1hdF9jaDIpOworCisJZGV2LT51cHN0cmVhbV9yaXNjYnVmX3NpemVfY2gyID0gcmlzY19idWZmZXJfc2l6ZSAqIDI7CisJZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemVfY2gyID0gZGF0YV9mcmFtZV9zaXplICogMjsKKworCS8vQWxsb2NhdGluZyBidWZmZXJzIGFuZCBwcmVwYXJlIFJJU0MgcHJvZ3JhbQorCXJldHZhbCA9CisJICAgIGN4MjU4MjFfdXBzdHJlYW1fYnVmZmVyX3ByZXBhcmVfY2gyKGRldiwgc3JhbV9jaCwKKwkJCQkJCWRldi0+X2xpbmVfc2l6ZV9jaDIpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBGYWlsZWQgdG8gc2V0IHVwIFZpZGVvIHVwc3RyZWFtIGJ1ZmZlcnMhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYV91cHN0cmVhbV9jaDIoZGV2LCBzcmFtX2NoKTsKKworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGRldik7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmZWVhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiwgPHNodS5saW5AY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjZGVmaW5lIE9QRU5fRklMRV8xICAgICAgICAgICAwCisjZGVmaW5lIE5VTV9QUk9HUyAgICAgICAgICAgICA4CisjZGVmaW5lIE5VTV9GUkFNRVMgICAgICAgICAgICAyCisjZGVmaW5lIE9ERF9GSUVMRCAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5fRklFTEQgICAgICAgICAgICAxCisjZGVmaW5lIFRPUF9PRkZTRVQgICAgICAgICAgICAwCisjZGVmaW5lIEZJRk9fRElTQUJMRSAgICAgICAgICAwCisjZGVmaW5lIEZJRk9fRU5BQkxFICAgICAgICAgICAxCisjZGVmaW5lIFRFU1RfRlJBTUVTICAgICAgICAgICA1CisjZGVmaW5lIEVORF9PRl9GSUxFICAgICAgICAgICAwCisjZGVmaW5lIElOX1BST0dSRVNTICAgICAgICAgICAxCisjZGVmaW5lIFJFU0VUX1NUQVRVUyAgICAgICAgICAtMQorI2RlZmluZSBOVU1fTk9fT1BTICAgICAgICAgICAgNQorCisvLyBQQUwgYW5kIE5UU0MgbGluZSBzaXplcyBhbmQgbnVtYmVyIG9mIGxpbmVzLgorI2RlZmluZSBXSURUSF9EMSAgICAgICAgICAgICAgNzIwCisjZGVmaW5lIE5UU0NfTElORVNfUEVSX0ZSQU1FICA0ODAKKyNkZWZpbmUgUEFMX0xJTkVTX1BFUl9GUkFNRSAgIDU3NgorI2RlZmluZSBQQUxfTElORV9TWiAgICAgICAgICAgMTQ0MAorI2RlZmluZSBZNDIyX0xJTkVfU1ogICAgICAgICAgMTQ0MAorI2RlZmluZSBZNDExX0xJTkVfU1ogICAgICAgICAgMTA4MAorI2RlZmluZSBOVFNDX0ZJRUxEX0hFSUdIVCAgICAgMjQwCisjZGVmaW5lIE5UU0NfT0REX0ZMRF9MSU5FUyAgICAyNDEKKyNkZWZpbmUgUEFMX0ZJRUxEX0hFSUdIVCAgICAgIDI4OAorCisjZGVmaW5lIEZSQU1FX1NJWkVfTlRTQ19ZNDIyICAgIChOVFNDX0xJTkVTX1BFUl9GUkFNRSAqIFk0MjJfTElORV9TWikKKyNkZWZpbmUgRlJBTUVfU0laRV9OVFNDX1k0MTEgICAgKE5UU0NfTElORVNfUEVSX0ZSQU1FICogWTQxMV9MSU5FX1NaKQorI2RlZmluZSBGUkFNRV9TSVpFX1BBTF9ZNDIyICAgICAoUEFMX0xJTkVTX1BFUl9GUkFNRSAqIFk0MjJfTElORV9TWikKKyNkZWZpbmUgRlJBTUVfU0laRV9QQUxfWTQxMSAgICAgKFBBTF9MSU5FU19QRVJfRlJBTUUgKiBZNDExX0xJTkVfU1opCisKKyNkZWZpbmUgTlRTQ19EQVRBX0JVRl9TWiAgICAgICAgKFk0MjJfTElORV9TWiAqIE5UU0NfTElORVNfUEVSX0ZSQU1FKQorI2RlZmluZSBQQUxfREFUQV9CVUZfU1ogICAgICAgICAoWTQyMl9MSU5FX1NaICogUEFMX0xJTkVTX1BFUl9GUkFNRSkKKworI2RlZmluZSBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSAgIDE2CisjZGVmaW5lIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICAgICAgNAorI2RlZmluZSBKVU1QX0lOU1RSVUNUSU9OX1NJWkUgICAgICAgICAgIDEyCisjZGVmaW5lIE1BWFNJWkVfTk9fT1BTICAgICAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgRFdPUkRfU0laRSAgICAgICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgVVNFX1JJU0NfTk9PUF9WSURFTyAgIDEKKworI2lmZGVmIFVTRV9SSVNDX05PT1BfVklERU8KKyNkZWZpbmUgUEFMX1VTX1ZJRF9QUk9HX1NJWkUgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArICAgXAorCQkJCSAgICBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIE5VTV9OT19PUFMqRFdPUkRfU0laRSkKKworI2RlZmluZSBQQUxfUklTQ19CVUZfU0laRSAgICAgICAgICgyICogUEFMX1VTX1ZJRF9QUk9HX1NJWkUpCisKKyNkZWZpbmUgUEFMX1ZJRF9QUk9HX1NJWkUgICAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQqMikgKiAzICogRFdPUkRfU0laRSArIDIqUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFICsgMipOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisKKyNkZWZpbmUgT0REX0ZMRF9QQUxfUFJPR19TSVpFICAgICAoKFBBTF9GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisKKyNkZWZpbmUgTlRTQ19VU19WSURfUFJPR19TSVpFICAgICAoKE5UU0NfT0REX0ZMRF9MSU5FUyArIDEpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgSlVNUF9JTlNUUlVDVElPTl9TSVpFICsgTlVNX05PX09QUypEV09SRF9TSVpFKQorCisjZGVmaW5lIE5UU0NfUklTQ19CVUZfU0laRSAgICAgICAgKDIgKiAoUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBOVFNDX1VTX1ZJRF9QUk9HX1NJWkUpKQorCisjZGVmaW5lIEZSQU1FMV9WSURfUFJPR19TSVpFICAgICAgKChOVFNDX09ERF9GTERfTElORVMgKyBOVFNDX0ZJRUxEX0hFSUdIVCkgKiAzICogRFdPUkRfU0laRSArIDIqUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFICsgMipOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisjZGVmaW5lIE9ERF9GTERfTlRTQ19QUk9HX1NJWkUgICAgKChOVFNDX09ERF9GTERfTElORVMpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisjZW5kaWYKKworI2lmbmRlZiBVU0VfUklTQ19OT09QX1ZJREVPCisjZGVmaW5lIFBBTF9VU19WSURfUFJPR19TSVpFICAgICAgKChQQUxfRklFTERfSEVJR0hUICsgMSkgKiAzICogRFdPUkRfU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICkKKyNkZWZpbmUgUEFMX1JJU0NfQlVGX1NJWkUgICAgICAgICAoIDIgKiAoUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBQQUxfVVNfVklEX1BST0dfU0laRSkgKQorI2RlZmluZSBQQUxfVklEX1BST0dfU0laRSAgICAgICAgICgoUEFMX0ZJRUxEX0hFSUdIVCoyKSAqIDMgKiBEV09SRF9TSVpFICsgMipSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBKVU1QX0lOU1RSVUNUSU9OX1NJWkUgKQorI2RlZmluZSBPRERfRkxEX1BBTF9QUk9HX1NJWkUgICAgICgoUEFMX0ZJRUxEX0hFSUdIVCkgKiAzICogRFdPUkRfU0laRSArIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKQorI2RlZmluZSBPRERfRkxEX05UU0NfUFJPR19TSVpFICAgICgoTlRTQ19PRERfRkxEX0xJTkVTKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSApCisjZGVmaW5lIE5UU0NfVVNfVklEX1BST0dfU0laRSAgICAgKChOVFNDX09ERF9GTERfTElORVMgKyAxKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBKVU1QX0lOU1RSVUNUSU9OX1NJWkUpCisjZGVmaW5lIE5UU0NfUklTQ19CVUZfU0laRSAgICAgICAgKDIgKiAoUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBOVFNDX1VTX1ZJRF9QUk9HX1NJWkUpICkKKyNkZWZpbmUgRlJBTUUxX1ZJRF9QUk9HX1NJWkUgICAgICAoKE5UU0NfT0REX0ZMRF9MSU5FUyArIE5UU0NfRklFTERfSEVJR0hUKSAqIDMgKiBEV09SRF9TSVpFICsgMipSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBKVU1QX0lOU1RSVUNUSU9OX1NJWkUgKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3ZGQzZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0uYwpAQCAtMCwwICsxLDg5NCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8aGllcC5odXluaEBjb25leGFudC5jb20+LCA8c2h1LmxpbkBjb25leGFudC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmgiCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjU4MjEgYmFzZWQgVFYgY2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIkhpZXAgSHV5bmggPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9pbnRyX21zayA9CisgICAgRkxEX1ZJRF9TUkNfUklTQzEgfCBGTERfVklEX1NSQ19VRiB8IEZMRF9WSURfU1JDX1NZTkMgfCBGTERfVklEX1NSQ19PUENfRVJSOworCitpbnQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXBfdXBzdHJlYW0oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoLAorCQkJCQl1bnNpZ25lZCBpbnQgYnBsLCB1MzIgcmlzYykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbGluZXM7CisJdTMyIGNkdDsKKworCWlmIChjaC0+Y21kc19zdGFydCA9PSAwKSB7CisJCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgMCk7CisJCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgMCk7CisJCXJldHVybiAwOworCX0KKworCWJwbCA9IChicGwgKyA3KSAmIH43OwkvKiBhbGlnbm1lbnQgKi8KKwljZHQgPSBjaC0+Y2R0OworCWxpbmVzID0gY2gtPmZpZm9fc2l6ZSAvIGJwbDsKKworCWlmIChsaW5lcyA+IDQpIHsKKwkJbGluZXMgPSA0OworCX0KKworCUJVR19PTihsaW5lcyA8IDIpOworCisJLyogd3JpdGUgQ0RUICovCisJZm9yIChpID0gMDsgaSA8IGxpbmVzOyBpKyspIHsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpLCBjaC0+Zmlmb19zdGFydCArIGJwbCAqIGkpOworCQljeF93cml0ZShjZHQgKyAxNiAqIGkgKyA0LCAwKTsKKwkJY3hfd3JpdGUoY2R0ICsgMTYgKiBpICsgOCwgMCk7CisJCWN4X3dyaXRlKGNkdCArIDE2ICogaSArIDEyLCAwKTsKKwl9CisKKwkvKiB3cml0ZSBDTURTICovCisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCByaXNjKTsKKworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgNCwgMCk7CisJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyA4LCBjZHQpOworCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTIsIChsaW5lcyAqIDE2KSA+PiAzKTsKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDE2LCBjaC0+Y3RybF9zdGFydCk7CisKKwljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCBWSURfSVFfU0laRV9EVyk7CisKKwlmb3IgKGkgPSAyNDsgaSA8IDgwOyBpICs9IDQpCisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgaSwgMCk7CisKKwkvKiBmaWxsIHJlZ2lzdGVycyAqLworCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgY2gtPmZpZm9fc3RhcnQpOworCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgY2R0KTsKKwljeF93cml0ZShjaC0+Y250Ml9yZWcsIChsaW5lcyAqIDE2KSA+PiAzKTsKKwljeF93cml0ZShjaC0+Y250MV9yZWcsIChicGwgPj4gMykgLSAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19sZTMyICpjeDI1ODIxX3VwZGF0ZV9yaXNjcHJvZ3JhbShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICBfX2xlMzIgKiBycCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgYnBsLCB1MzIgc3luY19saW5lLAorCQkJCQkgIHVuc2lnbmVkIGludCBsaW5lcywgaW50IGZpZm9fZW5hYmxlLAorCQkJCQkgIGludCBmaWVsZF90eXBlKQoreworCXVuc2lnbmVkIGludCBsaW5lLCBpOworCWludCBkaXN0X2JldHduX3N0YXJ0cyA9IGJwbCAqIDI7CisKKwkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19SRVNZTkMgfCBzeW5jX2xpbmUpOworCisJaWYgKFVTRV9SSVNDX05PT1BfVklERU8pIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9OT19PUFM7IGkrKykgeworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfTk9PUCk7CisJCX0KKwl9CisKKwkvKiBzY2FuIGxpbmVzICovCisJZm9yIChsaW5lID0gMDsgbGluZSA8IGxpbmVzOyBsaW5lKyspIHsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVBRCB8IFJJU0NfU09MIHwgUklTQ19FT0wgfCBicGwpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyICsgb2Zmc2V0KTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwkJaWYgKChsaW5lcyA8PSBOVFNDX0ZJRUxEX0hFSUdIVCkKKwkJICAgIHx8IChsaW5lIDwgKE5UU0NfRklFTERfSEVJR0hUIC0gMSkpIHx8ICEoZGV2LT5faXNOVFNDKSkgeworCQkJb2Zmc2V0ICs9IGRpc3RfYmV0d25fc3RhcnRzOworCQl9CisJfQorCisJcmV0dXJuIHJwOworfQorCitzdGF0aWMgX19sZTMyICpjeDI1ODIxX3Jpc2NfZmllbGRfdXBzdHJlYW0oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIF9fbGUzMiAqIHJwLAorCQkJCQkgICBkbWFfYWRkcl90IGRhdGFidWZfcGh5c19hZGRyLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MzIgc3luY19saW5lLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgYnBsLCB1bnNpZ25lZCBpbnQgbGluZXMsCisJCQkJCSAgIGludCBmaWZvX2VuYWJsZSwgaW50IGZpZWxkX3R5cGUpCit7CisJdW5zaWduZWQgaW50IGxpbmUsIGk7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9CisJICAgICZkZXYtPnNyYW1fY2hhbm5lbHNbZGV2LT5fY2hhbm5lbF91cHN0cmVhbV9zZWxlY3RdOworCWludCBkaXN0X2JldHduX3N0YXJ0cyA9IGJwbCAqIDI7CisKKwkvKiBzeW5jIGluc3RydWN0aW9uICovCisJaWYgKHN5bmNfbGluZSAhPSBOT19TWU5DX0xJTkUpIHsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgc3luY19saW5lKTsKKwl9CisKKwlpZiAoVVNFX1JJU0NfTk9PUF9WSURFTykgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX05PX09QUzsgaSsrKSB7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19OT09QKTsKKwkJfQorCX0KKworCS8qIHNjYW4gbGluZXMgKi8KKwlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgbGluZXM7IGxpbmUrKykgeworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19SRUFEIHwgUklTQ19TT0wgfCBSSVNDX0VPTCB8IGJwbCk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihkYXRhYnVmX3BoeXNfYWRkciArIG9mZnNldCk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJCWlmICgobGluZXMgPD0gTlRTQ19GSUVMRF9IRUlHSFQpCisJCSAgICB8fCAobGluZSA8IChOVFNDX0ZJRUxEX0hFSUdIVCAtIDEpKSB8fCAhKGRldi0+X2lzTlRTQykpIHsKKwkJCW9mZnNldCArPSBkaXN0X2JldHduX3N0YXJ0czsJLy90byBza2lwIHRoZSBvdGhlciBmaWVsZCBsaW5lCisJCX0KKworCQkvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgRklGTyBhZnRlciB0aGUgZmlyc3QgNCBsaW5lcworCQkvLyBGb3IgdGhlIHVwc3RyZWFtIHZpZGVvIGNoYW5uZWwsIHRoZSByaXNjIGVuZ2luZSB3aWxsIGVuYWJsZSB0aGUgRklGTy4KKwkJaWYgKGZpZm9fZW5hYmxlICYmIGxpbmUgPT0gMykgeworCQkJKihycCsrKSA9IFJJU0NfV1JJVEVDUjsKKwkJCSoocnArKykgPSBzcmFtX2NoLT5kbWFfY3RsOworCQkJKihycCsrKSA9IEZMRF9WSURfRklGT19FTjsKKwkJCSoocnArKykgPSAweDAwMDAwMDAxOworCQl9CisJfQorCisJcmV0dXJuIHJwOworfQorCitpbnQgY3gyNTgyMV9yaXNjX2J1ZmZlcl91cHN0cmVhbShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgdW5zaWduZWQgaW50IHRvcF9vZmZzZXQsCisJCQkJIHVuc2lnbmVkIGludCBicGwsIHVuc2lnbmVkIGludCBsaW5lcykKK3sKKwlfX2xlMzIgKnJwOworCWludCBmaWZvX2VuYWJsZSA9IDA7CisJaW50IHNpbmdsZWZpZWxkX2xpbmVzID0gbGluZXMgPj4gMTsJLy9nZXQgbGluZSBjb3VudCBmb3Igc2luZ2xlIGZpZWxkCisJaW50IG9kZF9udW1fbGluZXMgPSBzaW5nbGVmaWVsZF9saW5lczsKKwlpbnQgZnJhbWUgPSAwOworCWludCBmcmFtZV9zaXplID0gMDsKKwlpbnQgZGF0YWJ1Zl9vZmZzZXQgPSAwOworCWludCByaXNjX3Byb2dyYW1fc2l6ZSA9IDA7CisJaW50IHJpc2NfZmxhZyA9IFJJU0NfQ05UX1JFU0VUOworCXVuc2lnbmVkIGludCBib3R0b21fb2Zmc2V0ID0gYnBsOworCWRtYV9hZGRyX3QgcmlzY19waHlzX2p1bXBfYWRkcjsKKworCWlmIChkZXYtPl9pc05UU0MpIHsKKwkJb2RkX251bV9saW5lcyA9IHNpbmdsZWZpZWxkX2xpbmVzICsgMTsKKwkJcmlzY19wcm9ncmFtX3NpemUgPSBGUkFNRTFfVklEX1BST0dfU0laRTsKKwkJZnJhbWVfc2l6ZSA9CisJCSAgICAoYnBsID09CisJCSAgICAgWTQxMV9MSU5FX1NaKSA/IEZSQU1FX1NJWkVfTlRTQ19ZNDExIDoKKwkJICAgIEZSQU1FX1NJWkVfTlRTQ19ZNDIyOworCX0gZWxzZSB7CisJCXJpc2NfcHJvZ3JhbV9zaXplID0gUEFMX1ZJRF9QUk9HX1NJWkU7CisJCWZyYW1lX3NpemUgPQorCQkgICAgKGJwbCA9PQorCQkgICAgIFk0MTFfTElORV9TWikgPyBGUkFNRV9TSVpFX1BBTF9ZNDExIDogRlJBTUVfU0laRV9QQUxfWTQyMjsKKwl9CisKKwkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgUmlzYyBidWZmZXIgcHJvZ3JhbSAqLworCXJwID0gZGV2LT5fZG1hX3ZpcnRfYWRkcjsKKworCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IE5VTV9GUkFNRVM7IGZyYW1lKyspIHsKKwkJZGF0YWJ1Zl9vZmZzZXQgPSBmcmFtZV9zaXplICogZnJhbWU7CisKKwkJaWYgKFVOU0VUICE9IHRvcF9vZmZzZXQpIHsKKwkJCWZpZm9fZW5hYmxlID0gKGZyYW1lID09IDApID8gRklGT19FTkFCTEUgOiBGSUZPX0RJU0FCTEU7CisJCQlycCA9IGN4MjU4MjFfcmlzY19maWVsZF91cHN0cmVhbShkZXYsIHJwLAorCQkJCQkJCSBkZXYtPgorCQkJCQkJCSBfZGF0YV9idWZfcGh5c19hZGRyICsKKwkJCQkJCQkgZGF0YWJ1Zl9vZmZzZXQsCisJCQkJCQkJIHRvcF9vZmZzZXQsIDAsIGJwbCwKKwkJCQkJCQkgb2RkX251bV9saW5lcywKKwkJCQkJCQkgZmlmb19lbmFibGUsCisJCQkJCQkJIE9ERF9GSUVMRCk7CisJCX0KKworCQlmaWZvX2VuYWJsZSA9IEZJRk9fRElTQUJMRTsKKworCQkvL0V2ZW4gRmllbGQKKwkJcnAgPSBjeDI1ODIxX3Jpc2NfZmllbGRfdXBzdHJlYW0oZGV2LCBycCwKKwkJCQkJCSBkZXYtPl9kYXRhX2J1Zl9waHlzX2FkZHIgKworCQkJCQkJIGRhdGFidWZfb2Zmc2V0LCBib3R0b21fb2Zmc2V0LAorCQkJCQkJIDB4MjAwLCBicGwsIHNpbmdsZWZpZWxkX2xpbmVzLAorCQkJCQkJIGZpZm9fZW5hYmxlLCBFVkVOX0ZJRUxEKTsKKworCQlpZiAoZnJhbWUgPT0gMCkgeworCQkJcmlzY19mbGFnID0gUklTQ19DTlRfUkVTRVQ7CisJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0KKwkJCSAgICBkZXYtPl9kbWFfcGh5c19zdGFydF9hZGRyICsgcmlzY19wcm9ncmFtX3NpemU7CisJCX0gZWxzZSB7CisJCQlyaXNjX3BoeXNfanVtcF9hZGRyID0gZGV2LT5fZG1hX3BoeXNfc3RhcnRfYWRkcjsKKwkJCXJpc2NfZmxhZyA9IFJJU0NfQ05UX0lOQzsKKwkJfQorCisJCS8vIExvb3AgdG8gMm5kRnJhbWVSSVNDIG9yIHRvIFN0YXJ0IG9mIFJpc2MgcHJvZ3JhbSAmIGdlbmVyYXRlIElSUQorCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgcmlzY19mbGFnKTsKKwkJKihycCsrKSA9IGNwdV90b19sZTMyKHJpc2NfcGh5c19qdW1wX2FkZHIpOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX3ZpZGVvX2NoMShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0KKwkgICAgJmRldi0+c3JhbV9jaGFubmVsc1tWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0ldOworCXUzMiB0bXAgPSAwOworCisJaWYgKCFkZXYtPl9pc19ydW5uaW5nKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxOiBObyB2aWRlbyBmaWxlIGlzIGN1cnJlbnRseSBydW5uaW5nIHNvIHJldHVybiFcbiIpOworCQlyZXR1cm47CisJfQorCS8vRGlzYWJsZSBSSVNDIGludGVycnVwdHMKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc2spOworCWN4X3dyaXRlKHNyYW1fY2gtPmludF9tc2ssIHRtcCAmIH5faW50cl9tc2spOworCisJLy9UdXJuIE9GRiByaXNjIGFuZCBmaWZvIGVuYWJsZQorCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisJY3hfd3JpdGUoc3JhbV9jaC0+ZG1hX2N0bCwgdG1wICYgfihGTERfVklEX0ZJRk9fRU4gfCBGTERfVklEX1JJU0NfRU4pKTsKKworCS8vQ2xlYXIgZGF0YSBidWZmZXIgbWVtb3J5CisJaWYgKGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcikKKwkJbWVtc2V0KGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciwgMCwgZGV2LT5fZGF0YV9idWZfc2l6ZSk7CisKKwlkZXYtPl9pc19ydW5uaW5nID0gMDsKKwlkZXYtPl9pc19maXJzdF9mcmFtZSA9IDA7CisJZGV2LT5fZnJhbWVfY291bnQgPSAwOworCWRldi0+X2ZpbGVfc3RhdHVzID0gRU5EX09GX0ZJTEU7CisKKwlpZiAoZGV2LT5faXJxX3F1ZXVlcykgeworCQlrZnJlZShkZXYtPl9pcnFfcXVldWVzKTsKKwkJZGV2LT5faXJxX3F1ZXVlcyA9IE5VTEw7CisJfQorCisJaWYgKGRldi0+X2ZpbGVuYW1lICE9IE5VTEwpCisJCWtmcmVlKGRldi0+X2ZpbGVuYW1lKTsKKworCXRtcCA9IGN4X3JlYWQoVklEX0NIX01PREVfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCAmIDB4RkZGRkZFMDApOworfQorCit2b2lkIGN4MjU4MjFfZnJlZV9tZW1fdXBzdHJlYW1fY2gxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQoreworCWlmIChkZXYtPl9pc19ydW5uaW5nKSB7CisJCWN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDEoZGV2KTsKKwl9CisKKwlpZiAoZGV2LT5fZG1hX3ZpcnRfYWRkcikgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPl9yaXNjX3NpemUsCisJCQkJICAgIGRldi0+X2RtYV92aXJ0X2FkZHIsIGRldi0+X2RtYV9waHlzX2FkZHIpOworCQlkZXYtPl9kbWFfdmlydF9hZGRyID0gTlVMTDsKKwl9CisKKwlpZiAoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+X2RhdGFfYnVmX3NpemUsCisJCQkJICAgIGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciwKKwkJCQkgICAgZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyKTsKKwkJZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyID0gTlVMTDsKKwl9Cit9CisKK2ludCBjeDI1ODIxX2dldF9mcmFtZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwlzdHJ1Y3QgZmlsZSAqbXlmaWxlOworCWludCBmcmFtZV9pbmRleF90ZW1wID0gZGV2LT5fZnJhbWVfaW5kZXg7CisJaW50IGkgPSAwOworCWludCBsaW5lX3NpemUgPQorCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0ID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBZNDExX0xJTkVfU1ogOiBZNDIyX0xJTkVfU1o7CisJaW50IGZyYW1lX3NpemUgPSAwOworCWludCBmcmFtZV9vZmZzZXQgPSAwOworCXNzaXplX3QgdmZzX3JlYWRfcmV0dmFsID0gMDsKKwljaGFyIG15YnVmW2xpbmVfc2l6ZV07CisJbG9mZl90IGZpbGVfb2Zmc2V0OworCWxvZmZfdCBwb3M7CisJbW1fc2VnbWVudF90IG9sZF9mczsKKworCWlmIChkZXYtPl9maWxlX3N0YXR1cyA9PSBFTkRfT0ZfRklMRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2LT5faXNOVFNDKSB7CisJCWZyYW1lX3NpemUgPQorCQkgICAgKGxpbmVfc2l6ZSA9PQorCQkgICAgIFk0MTFfTElORV9TWikgPyBGUkFNRV9TSVpFX05UU0NfWTQxMSA6CisJCSAgICBGUkFNRV9TSVpFX05UU0NfWTQyMjsKKwl9IGVsc2UgeworCQlmcmFtZV9zaXplID0KKwkJICAgIChsaW5lX3NpemUgPT0KKwkJICAgICBZNDExX0xJTkVfU1opID8gRlJBTUVfU0laRV9QQUxfWTQxMSA6IEZSQU1FX1NJWkVfUEFMX1k0MjI7CisJfQorCisJZnJhbWVfb2Zmc2V0ID0gKGZyYW1lX2luZGV4X3RlbXAgPiAwKSA/IGZyYW1lX3NpemUgOiAwOworCWZpbGVfb2Zmc2V0ID0gZGV2LT5fZnJhbWVfY291bnQgKiBmcmFtZV9zaXplOworCisJbXlmaWxlID0gZmlscF9vcGVuKGRldi0+X2ZpbGVuYW1lLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLCAwKTsKKworCWlmIChJU19FUlIobXlmaWxlKSkgeworCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7CisJCXByaW50aygiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhIFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZSwgb3Blbl9lcnJubyk7CisJCXJldHVybiBQVFJfRVJSKG15ZmlsZSk7CisJfSBlbHNlIHsKKwkJaWYgKCEobXlmaWxlLT5mX29wKSkgeworCQkJcHJpbnRrKCIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWlmICghbXlmaWxlLT5mX29wLT5yZWFkKSB7CisJCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEiLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcG9zID0gbXlmaWxlLT5mX3BvczsKKwkJb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPl9saW5lc19jb3VudDsgaSsrKSB7CisJCQlwb3MgPSBmaWxlX29mZnNldDsKKworCQkJdmZzX3JlYWRfcmV0dmFsID0KKwkJCSAgICB2ZnNfcmVhZChteWZpbGUsIG15YnVmLCBsaW5lX3NpemUsICZwb3MpOworCisJCQlpZiAodmZzX3JlYWRfcmV0dmFsID4gMCAmJiB2ZnNfcmVhZF9yZXR2YWwgPT0gbGluZV9zaXplCisJCQkgICAgJiYgZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJCQltZW1jcHkoKHZvaWQgKikoZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyICsKKwkJCQkJCWZyYW1lX29mZnNldCAvIDQpLCBteWJ1ZiwKKwkJCQkgICAgICAgdmZzX3JlYWRfcmV0dmFsKTsKKwkJCX0KKworCQkJZmlsZV9vZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOworCQkJZnJhbWVfb2Zmc2V0ICs9IHZmc19yZWFkX3JldHZhbDsKKworCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgeworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIkRvbmU6IGV4aXQgJXMoKSBzaW5jZSBubyBtb3JlIGJ5dGVzIHRvIHJlYWQgZnJvbSBWaWRlbyBmaWxlLlxuIiwKKwkJCQkgICAgICAgX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGkgPiAwKQorCQkJZGV2LT5fZnJhbWVfY291bnQrKzsKKworCQlkZXYtPl9maWxlX3N0YXR1cyA9CisJCSAgICAodmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZSkgPyBJTl9QUk9HUkVTUyA6IEVORF9PRl9GSUxFOworCisJCXNldF9mcyhvbGRfZnMpOworCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjU4MjFfdmlkdXBzX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDI1ODIxX2RldiwgX2lycV93b3JrX2VudHJ5KTsKKworCWlmICghZGV2KSB7CisJCXByaW50aygiRVJST1IgJXMoKTogc2luY2UgY29udGFpbmVyX29mKHdvcmtfc3RydWN0KSBGQUlMRUQhIFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWN4MjU4MjFfZ2V0X2ZyYW1lKGRldiwKKwkJCSAgJmRldi0+c3JhbV9jaGFubmVsc1tkZXYtPl9jaGFubmVsX3Vwc3RyZWFtX3NlbGVjdF0pOworfQorCitpbnQgY3gyNTgyMV9vcGVuZmlsZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwlzdHJ1Y3QgZmlsZSAqbXlmaWxlOworCWludCBpID0gMCwgaiA9IDA7CisJaW50IGxpbmVfc2l6ZSA9CisJICAgIChkZXYtPl9waXhlbF9mb3JtYXQgPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFk0MTFfTElORV9TWiA6IFk0MjJfTElORV9TWjsKKwlzc2l6ZV90IHZmc19yZWFkX3JldHZhbCA9IDA7CisJY2hhciBteWJ1ZltsaW5lX3NpemVdOworCWxvZmZfdCBwb3M7CisJbG9mZl90IG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKTA7CisJbW1fc2VnbWVudF90IG9sZF9mczsKKworCW15ZmlsZSA9IGZpbHBfb3BlbihkZXYtPl9maWxlbmFtZSwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7CisKKwlpZiAoSVNfRVJSKG15ZmlsZSkpIHsKKwkJY29uc3QgaW50IG9wZW5fZXJybm8gPSAtUFRSX0VSUihteWZpbGUpOworCQlwcmludGsoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkISBcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5fZmlsZW5hbWUsIG9wZW5fZXJybm8pOworCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOworCX0gZWxzZSB7CisJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKKwkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgeworCQkJcHJpbnRrCisJCQkgICAgKCIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhICBSZXR1cm5pbmcuIiwKKwkJCSAgICAgX19mdW5jX18pOworCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlwb3MgPSBteWZpbGUtPmZfcG9zOworCQlvbGRfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9GUkFNRVM7IGorKykgeworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+X2xpbmVzX2NvdW50OyBpKyspIHsKKwkJCQlwb3MgPSBvZmZzZXQ7CisKKwkJCQl2ZnNfcmVhZF9yZXR2YWwgPQorCQkJCSAgICB2ZnNfcmVhZChteWZpbGUsIG15YnVmLCBsaW5lX3NpemUsICZwb3MpOworCisJCQkJaWYgKHZmc19yZWFkX3JldHZhbCA+IDAKKwkJCQkgICAgJiYgdmZzX3JlYWRfcmV0dmFsID09IGxpbmVfc2l6ZQorCQkJCSAgICAmJiBkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIgIT0gTlVMTCkgeworCQkJCQltZW1jcHkoKHZvaWQgKikoZGV2LT4KKwkJCQkJCQlfZGF0YV9idWZfdmlydF9hZGRyICsKKwkJCQkJCQlvZmZzZXQgLyA0KSwgbXlidWYsCisJCQkJCSAgICAgICB2ZnNfcmVhZF9yZXR2YWwpOworCQkJCX0KKworCQkJCW9mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CisKKwkJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCisJCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGkgPiAwKQorCQkJCWRldi0+X2ZyYW1lX2NvdW50Kys7CisKKwkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPCBsaW5lX3NpemUpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWRldi0+X2ZpbGVfc3RhdHVzID0KKwkJICAgICh2ZnNfcmVhZF9yZXR2YWwgPT0gbGluZV9zaXplKSA/IElOX1BST0dSRVNTIDogRU5EX09GX0ZJTEU7CisKKwkJc2V0X2ZzKG9sZF9mcyk7CisJCW15ZmlsZS0+Zl9wb3MgPSAwOworCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDI1ODIxX3Vwc3RyZWFtX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoLCBpbnQgYnBsKQoreworCWludCByZXQgPSAwOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJZG1hX2FkZHJfdCBkYXRhX2RtYV9hZGRyOworCisJaWYgKGRldi0+X2RtYV92aXJ0X2FkZHIgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPnVwc3RyZWFtX3Jpc2NidWZfc2l6ZSwKKwkJCQkgICAgZGV2LT5fZG1hX3ZpcnRfYWRkciwgZGV2LT5fZG1hX3BoeXNfYWRkcik7CisJfQorCisJZGV2LT5fZG1hX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPnVwc3RyZWFtX3Jpc2NidWZfc2l6ZSwKKwkJCQkgJmRtYV9hZGRyKTsKKwlkZXYtPl9kbWFfdmlydF9zdGFydF9hZGRyID0gZGV2LT5fZG1hX3ZpcnRfYWRkcjsKKwlkZXYtPl9kbWFfcGh5c19zdGFydF9hZGRyID0gZG1hX2FkZHI7CisJZGV2LT5fZG1hX3BoeXNfYWRkciA9IGRtYV9hZGRyOworCWRldi0+X3Jpc2Nfc2l6ZSA9IGRldi0+dXBzdHJlYW1fcmlzY2J1Zl9zaXplOworCisJaWYgKCFkZXYtPl9kbWFfdmlydF9hZGRyKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxOiBGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBSaXNjIGJ1ZmZlciEgUmV0dXJuaW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vQ2xlYXIgbWVtb3J5IGF0IGFkZHJlc3MKKwltZW1zZXQoZGV2LT5fZG1hX3ZpcnRfYWRkciwgMCwgZGV2LT5fcmlzY19zaXplKTsKKworCWlmIChkZXYtPl9kYXRhX2J1Zl92aXJ0X2FkZHIgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpLCBkZXYtPnVwc3RyZWFtX2RhdGFidWZfc2l6ZSwKKwkJCQkgICAgZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyLAorCQkJCSAgICBkZXYtPl9kYXRhX2J1Zl9waHlzX2FkZHIpOworCX0KKwkvL0ZvciBWaWRlbyBEYXRhIGJ1ZmZlciBhbGxvY2F0aW9uCisJZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyID0KKwkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5wY2ksIGRldi0+dXBzdHJlYW1fZGF0YWJ1Zl9zaXplLAorCQkJCSAmZGF0YV9kbWFfYWRkcik7CisJZGV2LT5fZGF0YV9idWZfcGh5c19hZGRyID0gZGF0YV9kbWFfYWRkcjsKKwlkZXYtPl9kYXRhX2J1Zl9zaXplID0gZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemU7CisKKwlpZiAoIWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMTogRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSBidWZmZXIhIFJldHVybmluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvL0NsZWFyIG1lbW9yeSBhdCBhZGRyZXNzCisJbWVtc2V0KGRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkciwgMCwgZGV2LT5fZGF0YV9idWZfc2l6ZSk7CisKKwlyZXQgPSBjeDI1ODIxX29wZW5maWxlKGRldiwgc3JhbV9jaCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvL0NyZWF0ZSBSSVNDIHByb2dyYW1zCisJcmV0ID0KKwkgICAgY3gyNTgyMV9yaXNjX2J1ZmZlcl91cHN0cmVhbShkZXYsIGRldi0+cGNpLCAwLCBicGwsCisJCQkJCSBkZXYtPl9saW5lc19jb3VudCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgImN4MjU4MjE6IEZhaWxlZCBjcmVhdGluZyBWaWRlbyBVcHN0cmVhbSBSaXNjIHByb2dyYW1zISBcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY3gyNTgyMV92aWRlb191cHN0cmVhbV9pcnEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFuX251bSwKKwkJCSAgICAgICB1MzIgc3RhdHVzKQoreworCXUzMiBpbnRfbXNrX3RtcDsKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsID0gJmRldi0+c3JhbV9jaGFubmVsc1tjaGFuX251bV07CisJaW50IHNpbmdsZWZpZWxkX2xpbmVzID0gTlRTQ19GSUVMRF9IRUlHSFQ7CisJaW50IGxpbmVfc2l6ZV9pbl9ieXRlcyA9IFk0MjJfTElORV9TWjsKKwlpbnQgb2RkX3Jpc2NfcHJvZ19zaXplID0gMDsKKwlkbWFfYWRkcl90IHJpc2NfcGh5c19qdW1wX2FkZHI7CisJX19sZTMyICpycDsKKworCWlmIChzdGF0dXMgJiBGTERfVklEX1NSQ19SSVNDMSkgeworCQkvLyBXZSBzaG91bGQgb25seSBwcm9jZXNzIG9uZSBwcm9ncmFtIHBlciBjYWxsCisJCXUzMiBwcm9nX2NudCA9IGN4X3JlYWQoY2hhbm5lbC0+Z3BjbnQpOworCisJCS8vU2luY2Ugd2UndmUgaWRlbnRpZmllZCBvdXIgSVJRLCBjbGVhciBvdXIgYml0cyBmcm9tIHRoZSBpbnRlcnJ1cHQgbWFzayBhbmQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMKKwkJaW50X21za190bXAgPSBjeF9yZWFkKGNoYW5uZWwtPmludF9tc2spOworCQljeF93cml0ZShjaGFubmVsLT5pbnRfbXNrLCBpbnRfbXNrX3RtcCAmIH5faW50cl9tc2spOworCQljeF93cml0ZShjaGFubmVsLT5pbnRfc3RhdCwgX2ludHJfbXNrKTsKKworCQlzcGluX2xvY2soJmRldi0+c2xvY2spOworCisJCWRldi0+X2ZyYW1lX2luZGV4ID0gcHJvZ19jbnQ7CisKKwkJcXVldWVfd29yayhkZXYtPl9pcnFfcXVldWVzLCAmZGV2LT5faXJxX3dvcmtfZW50cnkpOworCisJCWlmIChkZXYtPl9pc19maXJzdF9mcmFtZSkgeworCQkJZGV2LT5faXNfZmlyc3RfZnJhbWUgPSAwOworCisJCQlpZiAoZGV2LT5faXNOVFNDKSB7CisJCQkJc2luZ2xlZmllbGRfbGluZXMgKz0gMTsKKwkJCQlvZGRfcmlzY19wcm9nX3NpemUgPSBPRERfRkxEX05UU0NfUFJPR19TSVpFOworCQkJfSBlbHNlIHsKKwkJCQlzaW5nbGVmaWVsZF9saW5lcyA9IFBBTF9GSUVMRF9IRUlHSFQ7CisJCQkJb2RkX3Jpc2NfcHJvZ19zaXplID0gT0REX0ZMRF9QQUxfUFJPR19TSVpFOworCQkJfQorCisJCQlpZiAoZGV2LT5fZG1hX3ZpcnRfc3RhcnRfYWRkciAhPSBOVUxMKSB7CisJCQkJbGluZV9zaXplX2luX2J5dGVzID0KKwkJCQkgICAgKGRldi0+X3BpeGVsX2Zvcm1hdCA9PQorCQkJCSAgICAgUElYRUxfRlJNVF80MTEpID8gWTQxMV9MSU5FX1NaIDoKKwkJCQkgICAgWTQyMl9MSU5FX1NaOworCQkJCXJpc2NfcGh5c19qdW1wX2FkZHIgPQorCQkJCSAgICBkZXYtPl9kbWFfcGh5c19zdGFydF9hZGRyICsKKwkJCQkgICAgb2RkX3Jpc2NfcHJvZ19zaXplOworCisJCQkJcnAgPSBjeDI1ODIxX3VwZGF0ZV9yaXNjcHJvZ3JhbShkZXYsCisJCQkJCQkJCWRldi0+CisJCQkJCQkJCV9kbWFfdmlydF9zdGFydF9hZGRyLAorCQkJCQkJCQlUT1BfT0ZGU0VULAorCQkJCQkJCQlsaW5lX3NpemVfaW5fYnl0ZXMsCisJCQkJCQkJCTB4MCwKKwkJCQkJCQkJc2luZ2xlZmllbGRfbGluZXMsCisJCQkJCQkJCUZJRk9fRElTQUJMRSwKKwkJCQkJCQkJT0REX0ZJRUxEKTsKKworCQkJCS8vIEp1bXAgdG8gRXZlbiBSaXNjIHByb2dyYW0gb2YgMXN0IEZyYW1lCisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCk7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHJpc2NfcGh5c19qdW1wX2FkZHIpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsKKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdHVzICYgRkxEX1ZJRF9TUkNfVUYpCisJCQlwcmludGsKKwkJCSAgICAoIiVzOiBWaWRlbyBSZWNlaXZlZCBVbmRlcmZsb3cgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgX19mdW5jX18pOworCisJCWlmIChzdGF0dXMgJiBGTERfVklEX1NSQ19TWU5DKQorCQkJcHJpbnRrKCIlczogVmlkZW8gUmVjZWl2ZWQgU3luYyBFcnJvciBJbnRlcnJ1cHQhXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKworCQlpZiAoc3RhdHVzICYgRkxEX1ZJRF9TUkNfT1BDX0VSUikKKwkJCXByaW50aygiJXM6IFZpZGVvIFJlY2VpdmVkIE9wQ29kZSBFcnJvciBJbnRlcnJ1cHQhXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwl9CisKKwlpZiAoZGV2LT5fZmlsZV9zdGF0dXMgPT0gRU5EX09GX0ZJTEUpIHsKKwkJcHJpbnRrKCJjeDI1ODIxOiBFT0YgQ2hhbm5lbCAxIEZyYW1lY291bnQgPSAlZFxuIiwKKwkJICAgICAgIGRldi0+X2ZyYW1lX2NvdW50KTsKKwkJcmV0dXJuIC0xOworCX0KKwkvL0VsU0UsIHNldCB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIsIHJlLWVuYWJsZSBpcnEuCisJaW50X21za190bXAgPSBjeF9yZWFkKGNoYW5uZWwtPmludF9tc2spOworCWN4X3dyaXRlKGNoYW5uZWwtPmludF9tc2ssIGludF9tc2tfdG1wIHw9IF9pbnRyX21zayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IGN4MjU4MjFfdXBzdHJlYW1faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGRldl9pZDsKKwl1MzIgbXNrX3N0YXQsIHZpZF9zdGF0dXM7CisJaW50IGhhbmRsZWQgPSAwOworCWludCBjaGFubmVsX251bSA9IDA7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLTE7CisKKwljaGFubmVsX251bSA9IFZJRF9VUFNUUkVBTV9TUkFNX0NIQU5ORUxfSTsKKworCXNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW2NoYW5uZWxfbnVtXTsKKworCW1za19zdGF0ID0gY3hfcmVhZChzcmFtX2NoLT5pbnRfbXN0YXQpOworCXZpZF9zdGF0dXMgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9zdGF0KTsKKworCS8vIE9ubHkgZGVhbCB3aXRoIG91ciBpbnRlcnJ1cHQKKwlpZiAodmlkX3N0YXR1cykgeworCQloYW5kbGVkID0KKwkJICAgIGN4MjU4MjFfdmlkZW9fdXBzdHJlYW1faXJxKGRldiwgY2hhbm5lbF9udW0sIHZpZF9zdGF0dXMpOworCX0KKworCWlmIChoYW5kbGVkIDwgMCkgeworCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW9fY2gxKGRldik7CisJfSBlbHNlIHsKKwkJaGFuZGxlZCArPSBoYW5kbGVkOworCX0KKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCit2b2lkIGN4MjU4MjFfc2V0X3BpeGVsZW5naW5lKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwKKwkJCSAgICAgaW50IHBpeF9mb3JtYXQpCit7CisJaW50IHdpZHRoID0gV0lEVEhfRDE7CisJaW50IGhlaWdodCA9IGRldi0+X2xpbmVzX2NvdW50OworCWludCBudW1fbGluZXMsIG9kZF9udW1fbGluZXM7CisJdTMyIHZhbHVlOworCWludCB2aXBfbW9kZSA9IE9VVFBVVF9GUk1UXzY1NjsKKworCXZhbHVlID0gKChwaXhfZm9ybWF0ICYgMHgzKSA8PCAxMikgfCAodmlwX21vZGUgJiAweDcpOworCXZhbHVlICY9IDB4RkZGRkZGRUY7CisJdmFsdWUgfD0gZGV2LT5faXNOVFNDID8gMCA6IDB4MTA7CisJY3hfd3JpdGUoY2gtPnZpZF9mbXRfY3RsLCB2YWx1ZSk7CisKKwkvLyBzZXQgbnVtYmVyIG9mIGFjdGl2ZSBwaXhlbHMgaW4gZWFjaCBsaW5lLiBEZWZhdWx0IGlzIDcyMCBwaXhlbHMgaW4gYm90aCBOVFNDIGFuZCBQQUwgZm9ybWF0CisJY3hfd3JpdGUoY2gtPnZpZF9hY3RpdmVfY3RsMSwgd2lkdGgpOworCisJbnVtX2xpbmVzID0gKGhlaWdodCAvIDIpICYgMHgzRkY7CisJb2RkX251bV9saW5lcyA9IG51bV9saW5lczsKKworCWlmIChkZXYtPl9pc05UU0MpIHsKKwkJb2RkX251bV9saW5lcyArPSAxOworCX0KKworCXZhbHVlID0gKG51bV9saW5lcyA8PCAxNikgfCBvZGRfbnVtX2xpbmVzOworCisJLy8gc2V0IG51bWJlciBvZiBhY3RpdmUgbGluZXMgaW4gZmllbGQgMCAodG9wKSBhbmQgZmllbGQgMSAoYm90dG9tKQorCWN4X3dyaXRlKGNoLT52aWRfYWN0aXZlX2N0bDIsIHZhbHVlKTsKKworCWN4X3dyaXRlKGNoLT52aWRfY2R0X3NpemUsIFZJRF9DRFRfU0laRSA+PiAzKTsKK30KKworaW50IGN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hX3Vwc3RyZWFtKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCkKK3sKKwl1MzIgdG1wID0gMDsKKwlpbnQgZXJyID0gMDsKKworCS8vIDY1Ni9WSVAgU1JDIFVwc3RyZWFtIENoYW5uZWwgSSAmIEogYW5kIDcgLSBIb3N0IEJ1cyBJbnRlcmZhY2UgZm9yIGNoYW5uZWwgQS1DCisJdG1wID0gY3hfcmVhZChWSURfQ0hfTU9ERV9TRUwpOworCWN4X3dyaXRlKFZJRF9DSF9NT0RFX1NFTCwgdG1wIHwgMHgxQjAwMDFGRik7CisKKwkvLyBTZXQgdGhlIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIFJJU0MgcHJvZ3JhbSBpbiB0aGUgaW5pdGlhbCBwcm9ncmFtIGNvdW50ZXIoSVBDKSBtZW1iZXIgb2YgdGhlIGNtZHMuCisJY3hfd3JpdGUoc3JhbV9jaC0+Y21kc19zdGFydCArIDAsIGRldi0+X2RtYV9waHlzX2FkZHIpOworCWN4X3dyaXRlKHNyYW1fY2gtPmNtZHNfc3RhcnQgKyA0LCAwKTsJLyogUmlzYyBJUEMgSGlnaCA2NCBiaXRzIDYzLTMyICovCisKKwkvKiByZXNldCBjb3VudGVyICovCisJY3hfd3JpdGUoc3JhbV9jaC0+Z3BjbnRfY3RsLCAzKTsKKworCS8vIENsZWFyIG91ciBiaXRzIGZyb20gdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuCisJY3hfd3JpdGUoc3JhbV9jaC0+aW50X3N0YXQsIF9pbnRyX21zayk7CisKKwkvL1NldCB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIsIGVuYWJsZSBpcnEuCisJY3hfc2V0KFBDSV9JTlRfTVNLLCBjeF9yZWFkKFBDSV9JTlRfTVNLKSB8ICgxIDw8IHNyYW1fY2gtPmlycV9iaXQpKTsKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmludF9tc2spOworCWN4X3dyaXRlKHNyYW1fY2gtPmludF9tc2ssIHRtcCB8PSBfaW50cl9tc2spOworCisJZXJyID0KKwkgICAgcmVxdWVzdF9pcnEoZGV2LT5wY2ktPmlycSwgY3gyNTgyMV91cHN0cmVhbV9pcnEsCisJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgdXBzdHJlYW0gSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJCSAgICAgICBkZXYtPnBjaS0+aXJxKTsKKwkJZ290byBmYWlsX2lycTsKKwl9CisKKwkvLyBTdGFydCB0aGUgRE1BICBlbmdpbmUKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCWN4X3NldChzcmFtX2NoLT5kbWFfY3RsLCB0bXAgfCBGTERfVklEX1JJU0NfRU4pOworCisJZGV2LT5faXNfcnVubmluZyA9IDE7CisJZGV2LT5faXNfZmlyc3RfZnJhbWUgPSAxOworCisJcmV0dXJuIDA7CisKKyAgICAgIGZhaWxfaXJxOgorCWN4MjU4MjFfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY3gyNTgyMV92aWR1cHN0cmVhbV9pbml0X2NoMShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5uZWxfc2VsZWN0LAorCQkJCSBpbnQgcGl4ZWxfZm9ybWF0KQoreworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2g7CisJdTMyIHRtcDsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgZGF0YV9mcmFtZV9zaXplID0gMDsKKwlpbnQgcmlzY19idWZmZXJfc2l6ZSA9IDA7CisJaW50IHN0cl9sZW5ndGggPSAwOworCisJaWYgKGRldi0+X2lzX3J1bm5pbmcpIHsKKwkJcHJpbnRrKCJWaWRlbyBDaGFubmVsIGlzIHN0aWxsIHJ1bm5pbmcgc28gcmV0dXJuIVxuIik7CisJCXJldHVybiAwOworCX0KKworCWRldi0+X2NoYW5uZWxfdXBzdHJlYW1fc2VsZWN0ID0gY2hhbm5lbF9zZWxlY3Q7CisJc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbm5lbF9zZWxlY3RdOworCisJSU5JVF9XT1JLKCZkZXYtPl9pcnFfd29ya19lbnRyeSwgY3gyNTgyMV92aWR1cHNfaGFuZGxlcik7CisJZGV2LT5faXJxX3F1ZXVlcyA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjeDI1ODIxX3dvcmtxdWV1ZSIpOworCisJaWYgKCFkZXYtPl9pcnFfcXVldWVzKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxOiBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgpIGZvciBWaWRlbyBGQUlMRUQhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8vIDY1Ni9WSVAgU1JDIFVwc3RyZWFtIENoYW5uZWwgSSAmIEogYW5kIDcgLSBIb3N0IEJ1cyBJbnRlcmZhY2UgZm9yIGNoYW5uZWwgQS1DCisJdG1wID0gY3hfcmVhZChWSURfQ0hfTU9ERV9TRUwpOworCWN4X3dyaXRlKFZJRF9DSF9NT0RFX1NFTCwgdG1wIHwgMHgxQjAwMDFGRik7CisKKwlkZXYtPl9pc19ydW5uaW5nID0gMDsKKwlkZXYtPl9mcmFtZV9jb3VudCA9IDA7CisJZGV2LT5fZmlsZV9zdGF0dXMgPSBSRVNFVF9TVEFUVVM7CisJZGV2LT5fbGluZXNfY291bnQgPSBkZXYtPl9pc05UU0MgPyA0ODAgOiA1NzY7CisJZGV2LT5fcGl4ZWxfZm9ybWF0ID0gcGl4ZWxfZm9ybWF0OworCWRldi0+X2xpbmVfc2l6ZSA9CisJICAgIChkZXYtPl9waXhlbF9mb3JtYXQgPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDIyKSA/IChXSURUSF9EMSAqIDIpIDogKFdJRFRIX0QxICogMykgLyAyOworCWRhdGFfZnJhbWVfc2l6ZSA9IGRldi0+X2lzTlRTQyA/IE5UU0NfREFUQV9CVUZfU1ogOiBQQUxfREFUQV9CVUZfU1o7CisJcmlzY19idWZmZXJfc2l6ZSA9CisJICAgIGRldi0+X2lzTlRTQyA/IE5UU0NfUklTQ19CVUZfU0laRSA6IFBBTF9SSVNDX0JVRl9TSVpFOworCisJaWYgKGRldi0+aW5wdXRfZmlsZW5hbWUpIHsKKwkJc3RyX2xlbmd0aCA9IHN0cmxlbihkZXYtPmlucHV0X2ZpbGVuYW1lKTsKKwkJZGV2LT5fZmlsZW5hbWUgPSAoY2hhciAqKWttYWxsb2Moc3RyX2xlbmd0aCArIDEsIEdGUF9LRVJORUwpOworCisJCWlmICghZGV2LT5fZmlsZW5hbWUpCisJCQlnb3RvIGVycm9yOworCisJCW1lbWNweShkZXYtPl9maWxlbmFtZSwgZGV2LT5pbnB1dF9maWxlbmFtZSwgc3RyX2xlbmd0aCArIDEpOworCX0gZWxzZSB7CisJCXN0cl9sZW5ndGggPSBzdHJsZW4oZGV2LT5fZGVmYXVsdG5hbWUpOworCQlkZXYtPl9maWxlbmFtZSA9IChjaGFyICopa21hbGxvYyhzdHJfbGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkZXYtPl9maWxlbmFtZSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJbWVtY3B5KGRldi0+X2ZpbGVuYW1lLCBkZXYtPl9kZWZhdWx0bmFtZSwgc3RyX2xlbmd0aCArIDEpOworCX0KKworCS8vRGVmYXVsdCBpZiBmaWxlbmFtZSBpcyBlbXB0eSBzdHJpbmcKKwlpZiAoc3RyY21wKGRldi0+aW5wdXRfZmlsZW5hbWUsICIiKSA9PSAwKSB7CisJCWlmIChkZXYtPl9pc05UU0MpIHsKKwkJCWRldi0+X2ZpbGVuYW1lID0KKwkJCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0ID09CisJCQkgICAgIFBJWEVMX0ZSTVRfNDExKSA/ICIvcm9vdC92aWQ0MTEueXV2IiA6CisJCQkgICAgIi9yb290L3ZpZHRlc3QueXV2IjsKKwkJfSBlbHNlIHsKKwkJCWRldi0+X2ZpbGVuYW1lID0KKwkJCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0ID09CisJCQkgICAgIFBJWEVMX0ZSTVRfNDExKSA/ICIvcm9vdC9wYWw0MTEueXV2IiA6CisJCQkgICAgIi9yb290L3BhbDQyMi55dXYiOworCQl9CisJfQorCisJZGV2LT5faXNfcnVubmluZyA9IDA7CisJZGV2LT5fZnJhbWVfY291bnQgPSAwOworCWRldi0+X2ZpbGVfc3RhdHVzID0gUkVTRVRfU1RBVFVTOworCWRldi0+X2xpbmVzX2NvdW50ID0gZGV2LT5faXNOVFNDID8gNDgwIDogNTc2OworCWRldi0+X3BpeGVsX2Zvcm1hdCA9IHBpeGVsX2Zvcm1hdDsKKwlkZXYtPl9saW5lX3NpemUgPQorCSAgICAoZGV2LT5fcGl4ZWxfZm9ybWF0ID09CisJICAgICBQSVhFTF9GUk1UXzQyMikgPyAoV0lEVEhfRDEgKiAyKSA6IChXSURUSF9EMSAqIDMpIC8gMjsKKworCXJldHZhbCA9CisJICAgIGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX3Vwc3RyZWFtKGRldiwgc3JhbV9jaCwgZGV2LT5fbGluZV9zaXplLAorCQkJCQkJMCk7CisKKwkvKiBzZXR1cCBmaWZvICsgZm9ybWF0ICovCisJY3gyNTgyMV9zZXRfcGl4ZWxlbmdpbmUoZGV2LCBzcmFtX2NoLCBkZXYtPl9waXhlbF9mb3JtYXQpOworCisJZGV2LT51cHN0cmVhbV9yaXNjYnVmX3NpemUgPSByaXNjX2J1ZmZlcl9zaXplICogMjsKKwlkZXYtPnVwc3RyZWFtX2RhdGFidWZfc2l6ZSA9IGRhdGFfZnJhbWVfc2l6ZSAqIDI7CisKKwkvL0FsbG9jYXRpbmcgYnVmZmVycyBhbmQgcHJlcGFyZSBSSVNDIHByb2dyYW0KKwlyZXR2YWwgPSBjeDI1ODIxX3Vwc3RyZWFtX2J1ZmZlcl9wcmVwYXJlKGRldiwgc3JhbV9jaCwgZGV2LT5fbGluZV9zaXplKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczogRmFpbGVkIHRvIHNldCB1cCBWaWRlbyB1cHN0cmVhbSBidWZmZXJzIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJY3gyNTgyMV9zdGFydF92aWRlb19kbWFfdXBzdHJlYW0oZGV2LCBzcmFtX2NoKTsKKworCXJldHVybiAwOworCisgICAgICBlcnJvcjoKKwljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGRldik7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWY5MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPiwgPHNodS5saW5AY29uZXhhbnQuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjZGVmaW5lIE9VVFBVVF9GUk1UXzY1NiAgICAgICAwCisjZGVmaW5lIE9QRU5fRklMRV8xICAgICAgICAgICAwCisjZGVmaW5lIE5VTV9QUk9HUyAgICAgICAgICAgICA4CisjZGVmaW5lIE5VTV9GUkFNRVMgICAgICAgICAgICAyCisjZGVmaW5lIE9ERF9GSUVMRCAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5fRklFTEQgICAgICAgICAgICAxCisjZGVmaW5lIFRPUF9PRkZTRVQgICAgICAgICAgICAwCisjZGVmaW5lIEZJRk9fRElTQUJMRSAgICAgICAgICAwCisjZGVmaW5lIEZJRk9fRU5BQkxFICAgICAgICAgICAxCisjZGVmaW5lIFRFU1RfRlJBTUVTICAgICAgICAgICA1CisjZGVmaW5lIEVORF9PRl9GSUxFICAgICAgICAgICAwCisjZGVmaW5lIElOX1BST0dSRVNTICAgICAgICAgICAxCisjZGVmaW5lIFJFU0VUX1NUQVRVUyAgICAgICAgICAtMQorI2RlZmluZSBOVU1fTk9fT1BTICAgICAgICAgICAgNQorCisvLyBQQUwgYW5kIE5UU0MgbGluZSBzaXplcyBhbmQgbnVtYmVyIG9mIGxpbmVzLgorI2RlZmluZSBXSURUSF9EMSAgICAgICAgICAgICAgNzIwCisjZGVmaW5lIE5UU0NfTElORVNfUEVSX0ZSQU1FICA0ODAKKyNkZWZpbmUgUEFMX0xJTkVTX1BFUl9GUkFNRSAgIDU3NgorI2RlZmluZSBQQUxfTElORV9TWiAgICAgICAgICAgMTQ0MAorI2RlZmluZSBZNDIyX0xJTkVfU1ogICAgICAgICAgMTQ0MAorI2RlZmluZSBZNDExX0xJTkVfU1ogICAgICAgICAgMTA4MAorI2RlZmluZSBOVFNDX0ZJRUxEX0hFSUdIVCAgICAgMjQwCisjZGVmaW5lIE5UU0NfT0REX0ZMRF9MSU5FUyAgICAyNDEKKyNkZWZpbmUgUEFMX0ZJRUxEX0hFSUdIVCAgICAgIDI4OAorCisjZGVmaW5lIEZSQU1FX1NJWkVfTlRTQ19ZNDIyICAgIChOVFNDX0xJTkVTX1BFUl9GUkFNRSAqIFk0MjJfTElORV9TWikKKyNkZWZpbmUgRlJBTUVfU0laRV9OVFNDX1k0MTEgICAgKE5UU0NfTElORVNfUEVSX0ZSQU1FICogWTQxMV9MSU5FX1NaKQorI2RlZmluZSBGUkFNRV9TSVpFX1BBTF9ZNDIyICAgICAoUEFMX0xJTkVTX1BFUl9GUkFNRSAqIFk0MjJfTElORV9TWikKKyNkZWZpbmUgRlJBTUVfU0laRV9QQUxfWTQxMSAgICAgKFBBTF9MSU5FU19QRVJfRlJBTUUgKiBZNDExX0xJTkVfU1opCisKKyNkZWZpbmUgTlRTQ19EQVRBX0JVRl9TWiAgICAgICAgKFk0MjJfTElORV9TWiAqIE5UU0NfTElORVNfUEVSX0ZSQU1FKQorI2RlZmluZSBQQUxfREFUQV9CVUZfU1ogICAgICAgICAoWTQyMl9MSU5FX1NaICogUEFMX0xJTkVTX1BFUl9GUkFNRSkKKworI2RlZmluZSBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSAgIDE2CisjZGVmaW5lIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICAgICAgNAorI2RlZmluZSBKVU1QX0lOU1RSVUNUSU9OX1NJWkUgICAgICAgICAgIDEyCisjZGVmaW5lIE1BWFNJWkVfTk9fT1BTICAgICAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgRFdPUkRfU0laRSAgICAgICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgVVNFX1JJU0NfTk9PUF9WSURFTyAgIDEKKworI2lmZGVmIFVTRV9SSVNDX05PT1BfVklERU8KKyNkZWZpbmUgUEFMX1VTX1ZJRF9QUk9HX1NJWkUgICAgICAgICgoUEFMX0ZJRUxEX0hFSUdIVCkgKiAzICogRFdPUkRfU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgICBcCisJCQkJICAgICAgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisKKyNkZWZpbmUgUEFMX1JJU0NfQlVGX1NJWkUgICAgICAgICAgICgyICogUEFMX1VTX1ZJRF9QUk9HX1NJWkUpCisKKyNkZWZpbmUgUEFMX1ZJRF9QUk9HX1NJWkUgICAgICAgICAgICgoUEFMX0ZJRUxEX0hFSUdIVCoyKSAqIDMgKiBEV09SRF9TSVpFICsgMipSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgICBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIEpVTVBfSU5TVFJVQ1RJT05fU0laRSArIDIqTlVNX05PX09QUypEV09SRF9TSVpFKQorCisjZGVmaW5lIE9ERF9GTERfUEFMX1BST0dfU0laRSAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgICBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIE5VTV9OT19PUFMqRFdPUkRfU0laRSkKKworI2RlZmluZSBPRERfRkxEX05UU0NfUFJPR19TSVpFICAgICAgKChOVFNDX09ERF9GTERfTElORVMpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgICBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIE5VTV9OT19PUFMqRFdPUkRfU0laRSkKKworI2RlZmluZSBOVFNDX1VTX1ZJRF9QUk9HX1NJWkUgICAgICAgKChOVFNDX09ERF9GTERfTElORVMgKyAxKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgICAgSlVNUF9JTlNUUlVDVElPTl9TSVpFICsgTlVNX05PX09QUypEV09SRF9TSVpFKQorCisjZGVmaW5lIE5UU0NfUklTQ19CVUZfU0laRSAgICAgICAgICAoMiAqIChSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIE5UU0NfVVNfVklEX1BST0dfU0laRSkpCisKKyNkZWZpbmUgRlJBTUUxX1ZJRF9QUk9HX1NJWkUgICAgICAgICgoTlRTQ19PRERfRkxEX0xJTkVTICsgTlRTQ19GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyAyKlJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgXAorCQkJCSAgICAgIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFICsgMipOVU1fTk9fT1BTKkRXT1JEX1NJWkUpCisKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9SSVNDX05PT1BfVklERU8KKyNkZWZpbmUgUEFMX1VTX1ZJRF9QUk9HX1NJWkUgICAgICAgICgoUEFMX0ZJRUxEX0hFSUdIVCkgKiAzICogRFdPUkRfU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgXAorCQkJCSAgICAgIFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFKQorCisjZGVmaW5lIFBBTF9SSVNDX0JVRl9TSVpFICAgICAgICAgICAoMiAqIFBBTF9VU19WSURfUFJPR19TSVpFKQorCisjZGVmaW5lIFBBTF9WSURfUFJPR19TSVpFICAgICAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQqMikgKiAzICogRFdPUkRfU0laRSArIDIqUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBcCisJCQkJICAgICAgUklTQ19XUklURUNSX0lOU1RSVUNUSU9OX1NJWkUgKyBKVU1QX0lOU1RSVUNUSU9OX1NJWkUgKQorCisjZGVmaW5lIE9ERF9GTERfUEFMX1BST0dfU0laRSAgICAgICAoKFBBTF9GSUVMRF9IRUlHSFQpICogMyAqIERXT1JEX1NJWkUgKyBSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICkKKyNkZWZpbmUgT0REX0ZMRF9OVFNDX1BST0dfU0laRSAgICAgICgoTlRTQ19PRERfRkxEX0xJTkVTKSAqIDMgKiBEV09SRF9TSVpFICsgUklTQ19TWU5DX0lOU1RSVUNUSU9OX1NJWkUgKyBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSApCisKKyNkZWZpbmUgTlRTQ19VU19WSURfUFJPR19TSVpFICAgICAgICgoTlRTQ19PRERfRkxEX0xJTkVTICsgMSkgKiAzICogRFdPUkRfU0laRSArIFJJU0NfV1JJVEVDUl9JTlNUUlVDVElPTl9TSVpFICsgSlVNUF9JTlNUUlVDVElPTl9TSVpFKQorI2RlZmluZSBOVFNDX1JJU0NfQlVGX1NJWkUgICAgICAgICAgKCAyICogKFJJU0NfU1lOQ19JTlNUUlVDVElPTl9TSVpFICsgTlRTQ19VU19WSURfUFJPR19TSVpFKSApCisjZGVmaW5lIEZSQU1FMV9WSURfUFJPR19TSVpFICAgICAgICAoKE5UU0NfT0REX0ZMRF9MSU5FUyArIE5UU0NfRklFTERfSEVJR0hUKSAqIDMgKiBEV09SRF9TSVpFICsgMipSSVNDX1NZTkNfSU5TVFJVQ1RJT05fU0laRSArIFwKKwkJCQkgICAgICBSSVNDX1dSSVRFQ1JfSU5TVFJVQ1RJT05fU0laRSArIEpVTVBfSU5TVFJVQ1RJT05fU0laRSApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODM0YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jCkBAIC0wLDAgKzEsMTI5OSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDI1ODIxIGJhc2VkIFRWIGNhcmRzIik7CitNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4gKENYMjU4MjFfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmFkaW9fbnJbXSA9IHtbMCAuLi4gKENYMjU4MjFfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKKworbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KHJhZGlvX25yLCBpbnQsIE5VTEwsIDA0NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW8gZGV2aWNlIG51bWJlcnMiKTsKK01PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJyYWRpbyBkZXZpY2UgbnVtYmVycyIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX2RlYnVnID0gVklERU9fREVCVUc7Cittb2R1bGVfcGFyYW0odmlkZW9fZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFt2aWRlb10iKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBpcnFfZGVidWc7Cittb2R1bGVfcGFyYW0oaXJxX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcnFfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW0lSUSBoYW5kbGVyXSIpOworCit1bnNpZ25lZCBpbnQgdmlkX2xpbWl0ID0gMTY7Cittb2R1bGVfcGFyYW0odmlkX2xpbWl0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aWRfbGltaXQsICJjYXB0dXJlIG1lbW9yeSBsaW1pdCBpbiBtZWdhYnl0ZXMiKTsKKworc3RhdGljIHZvaWQgaW5pdF9jb250cm9scyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtKTsKKworI2RlZmluZSBGT1JNQVRfRkxBR1NfUEFDS0VEICAgICAgIDB4MDEKKworc3RydWN0IGN4MjU4MjFfZm10IGZvcm1hdHNbXSA9IHsKKwl7CisJIC5uYW1lID0gIjggYnBwLCBncmF5IiwKKwkgLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9HUkVZLAorCSAuZGVwdGggPSA4LAorCSAuZmxhZ3MgPSBGT1JNQVRfRkxBR1NfUEFDS0VELAorCSB9LCB7CisJICAgICAubmFtZSA9ICI0OjE6MSwgcGFja2VkLCBZNDFQIiwKKwkgICAgIC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfWTQxUCwKKwkgICAgIC5kZXB0aCA9IDEyLAorCSAgICAgLmZsYWdzID0gRk9STUFUX0ZMQUdTX1BBQ0tFRCwKKwkgICAgIH0sIHsKKwkJIC5uYW1lID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAorCQkgLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkgLmRlcHRoID0gMTYsCisJCSAuZmxhZ3MgPSBGT1JNQVRfRkxBR1NfUEFDS0VELAorCQkgfSwgeworCQkgICAgIC5uYW1lID0gIjQ6MjoyLCBwYWNrZWQsIFVZVlkiLAorCQkgICAgIC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJICAgICAuZGVwdGggPSAxNiwKKwkJICAgICAuZmxhZ3MgPSBGT1JNQVRfRkxBR1NfUEFDS0VELAorCQkgICAgIH0sIHsKKwkJCSAubmFtZSA9ICI0OjI6MCwgWVVWIiwKKwkJCSAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQyMCwKKwkJCSAuZGVwdGggPSAxMiwKKwkJCSAuZmxhZ3MgPSBGT1JNQVRfRkxBR1NfUEFDS0VELAorCQkJIH0sCit9OworCitpbnQgZ2V0X2Zvcm1hdF9zaXplKHZvaWQpCit7CisJcmV0dXJuIEFSUkFZX1NJWkUoZm9ybWF0cyk7Cit9CisKK3N0cnVjdCBjeDI1ODIxX2ZtdCAqZm9ybWF0X2J5X2ZvdXJjYyh1bnNpZ25lZCBpbnQgZm91cmNjKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWTQxUCB8fCBmb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQxMVApIHsKKwkJcmV0dXJuIGZvcm1hdHMgKyAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdHMpOyBpKyspCisJCWlmIChmb3JtYXRzW2ldLmZvdXJjYyA9PSBmb3VyY2MpCisJCQlyZXR1cm4gZm9ybWF0cyArIGk7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzKDB4JTA4eCkgTk9UIEZPVU5EXG4iLCBfX2Z1bmNfXywgZm91cmNjKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBkdW1wX3ZpZGVvX3F1ZXVlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmICghbGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2Zvcl9lYWNoKGl0ZW0sICZxLT5hY3RpdmUpCisJCSAgICBidWYgPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgeworCQlsaXN0X2Zvcl9lYWNoKGl0ZW0sICZxLT5xdWV1ZWQpCisJCSAgICBidWYgPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCX0KKworfQorCit2b2lkIGN4MjU4MjFfdmlkZW9fd2FrZXVwKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSwKKwkJCSAgdTMyIGNvdW50KQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCWludCBiYzsKKworCWZvciAoYmMgPSAwOzsgYmMrKykgeworCQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQkJZHByaW50aygxLCAiYmM9JWQgKD0wOiBhY3RpdmUgZW1wdHkpXG4iLCBiYyk7CisJCQlicmVhazsKKwkJfQorCisJCWJ1ZiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKworCQkvKiBjb3VudCBjb21lcyBmcm9tIHRoZSBodyBhbmQgaXQgaXMgMTZiaXQgd2lkZSAtLQorCQkgKiB0aGlzIHRyaWNrIGhhbmRsZXMgd3JhcC1hcm91bmRzIGNvcnJlY3RseSBmb3IKKwkJICogdXAgdG8gMzI3NjcgYnVmZmVycyBpbiBmbGlnaHQuLi4gKi8KKwkJaWYgKChzMTYpIChjb3VudCAtIGJ1Zi0+Y291bnQpIDwgMCkgeworCQkJYnJlYWs7CisJCX0KKworCQlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfRE9ORTsKKwkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKQorCQlkZWxfdGltZXIoJnEtPnRpbWVvdXQpOworCWVsc2UKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCWlmIChiYyAhPSAxKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBiYyk7Cit9CisKKyNpZmRlZiBUVU5FUl9GTEFHCitpbnQgY3gyNTgyMV9zZXRfdHZub3JtKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCB2NGwyX3N0ZF9pZCBub3JtKQoreworCWRwcmludGsoMSwgIiVzKG5vcm0gPSAweCUwOHgpIG5hbWU6IFslc11cbiIsIF9fZnVuY19fLAorCQkodW5zaWduZWQgaW50KW5vcm0sIHY0bDJfbm9ybV90b19uYW1lKG5vcm0pKTsKKworCWRldi0+dHZub3JtID0gbm9ybTsKKworCS8qIFRlbGwgdGhlIGludGVybmFsIEEvViBkZWNvZGVyICovCisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIHNfc3RkLCBub3JtKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0cnVjdCB2aWRlb19kZXZpY2UgKmN4MjU4MjFfdmRldl9pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCSAgICAgICBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZW1wbGF0ZSwKKwkJCQkgICAgICAgY2hhciAqdHlwZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gdmZkKQorCQlyZXR1cm4gTlVMTDsKKwkqdmZkID0gKnRlbXBsYXRlOworCXZmZC0+bWlub3IgPSAtMTsKKwl2ZmQtPnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzICglcykiLCBkZXYtPm5hbWUsIHR5cGUsCisJCSBjeDI1ODIxX2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKKwlyZXR1cm4gdmZkOworfQorCisvKgorc3RhdGljIGludCBjeDI1ODIxX2N0cmxfcXVlcnkoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3sKKyAgICBpbnQgaTsKKworICAgIGlmIChxY3RybC0+aWQgPCBWNEwyX0NJRF9CQVNFIHx8IHFjdHJsLT5pZCA+PSBWNEwyX0NJRF9MQVNUUDEpCisJcmV0dXJuIC1FSU5WQUw7CisgICAgZm9yIChpID0gMDsgaSA8IENYMjU4MjFfQ1RMUzsgaSsrKQorCWlmIChjeDI1ODIxX2N0bHNbaV0udi5pZCA9PSBxY3RybC0+aWQpCisJICAgIGJyZWFrOworICAgIGlmIChpID09IENYMjU4MjFfQ1RMUykgeworCSpxY3RybCA9IG5vX2N0bDsKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgKnFjdHJsID0gY3gyNTgyMV9jdGxzW2ldLnY7CisgICAgcmV0dXJuIDA7Cit9CisqLworCisvLyByZXNvdXJjZSBtYW5hZ2VtZW50CitpbnQgcmVzX2dldChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IGN4MjU4MjFfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KQoreworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwlpZiAoZmgtPnJlc291cmNlcyAmIGJpdCkKKwkJLyogaGF2ZSBpdCBhbHJlYWR5IGFsbG9jYXRlZCAqLworCQlyZXR1cm4gMTsKKworCS8qIGlzIGl0IGZyZWU/ICovCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoZGV2LT5yZXNvdXJjZXMgJiBiaXQpIHsKKwkJLyogbm8sIHNvbWVvbmUgZWxzZSB1c2VzIGl0ICovCisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIGl0J3MgZnJlZSwgZ3JhYiBpdCAqLworCWZoLT5yZXNvdXJjZXMgfD0gYml0OworCWRldi0+cmVzb3VyY2VzIHw9IGJpdDsKKwlkcHJpbnRrKDEsICJyZXM6IGdldCAlZFxuIiwgYml0KTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIDE7Cit9CisKK2ludCByZXNfY2hlY2soc3RydWN0IGN4MjU4MjFfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KQoreworCXJldHVybiBmaC0+cmVzb3VyY2VzICYgYml0OworfQorCitpbnQgcmVzX2xvY2tlZChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGJpdCkKK3sKKwlyZXR1cm4gZGV2LT5yZXNvdXJjZXMgJiBiaXQ7Cit9CisKK3ZvaWQgcmVzX2ZyZWUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBjeDI1ODIxX2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJQlVHX09OKChmaC0+cmVzb3VyY2VzICYgYml0cykgIT0gYml0cyk7CisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmaC0+cmVzb3VyY2VzICY9IH5iaXRzOworCWRldi0+cmVzb3VyY2VzICY9IH5iaXRzOworCWRwcmludGsoMSwgInJlczogcHV0ICVkXG4iLCBiaXRzKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7Cit9CisKK2ludCBjeDI1ODIxX3ZpZGVvX211eChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisJbWVtc2V0KCZyb3V0ZSwgMCwgc2l6ZW9mKHJvdXRlKSk7CisKKwlkcHJpbnRrKDEsICIlcygpIHZpZGVvX211eDogJWQgW3ZtdXg9JWQsIGdwaW89MHgleCwweCV4LDB4JXgsMHgleF1cbiIsCisJCV9fZnVuY19fLCBpbnB1dCwgSU5QVVQoaW5wdXQpLT52bXV4LCBJTlBVVChpbnB1dCktPmdwaW8wLAorCQlJTlBVVChpbnB1dCktPmdwaW8xLCBJTlBVVChpbnB1dCktPmdwaW8yLCBJTlBVVChpbnB1dCktPmdwaW8zKTsKKwlkZXYtPmlucHV0ID0gaW5wdXQ7CisKKwlyb3V0ZS5pbnB1dCA9IElOUFVUKGlucHV0KS0+dm11eDsKKworCS8qIFRlbGwgdGhlIGludGVybmFsIEEvViBkZWNvZGVyICovCisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX3JvdXRpbmcsIElOUFVUKGlucHV0KS0+dm11eCwgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJICAgIHN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxLAorCQkJICAgIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmLAorCQkJICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJaW50IHRtcCA9IDA7CisKKwkvKiBzZXR1cCBmaWZvICsgZm9ybWF0ICovCisJY3gyNTgyMV9zcmFtX2NoYW5uZWxfc2V0dXAoZGV2LCBjaGFubmVsLCBidWYtPmJwbCwgYnVmLT5yaXNjLmRtYSk7CisKKwkvKiByZXNldCBjb3VudGVyICovCisJY3hfd3JpdGUoY2hhbm5lbC0+Z3BjbnRfY3RsLCAzKTsKKwlxLT5jb3VudCA9IDE7CisKKwkvKiBlbmFibGUgaXJxICovCisJY3hfc2V0KFBDSV9JTlRfTVNLLCBjeF9yZWFkKFBDSV9JTlRfTVNLKSB8ICgxIDw8IGNoYW5uZWwtPmkpKTsKKwljeF9zZXQoY2hhbm5lbC0+aW50X21zaywgMHgxMSk7CisKKwkvKiBzdGFydCBkbWEgKi8KKwljeF93cml0ZShjaGFubmVsLT5kbWFfY3RsLCAweDExKTsJLyogRklGTyBhbmQgUklTQyBlbmFibGUgKi8KKworCS8qIG1ha2Ugc3VyZSB1cHN0cmVhbSBzZXR0aW5nIGlmIGFueSBpcyByZXZlcnNlZCAqLworCXRtcCA9IGN4X3JlYWQoVklEX0NIX01PREVfU0VMKTsKKwljeF93cml0ZShWSURfQ0hfTU9ERV9TRUwsIHRtcCAmIDB4RkZGRkZFMDApOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDI1ODIxX3Jlc3RhcnRfdmlkZW9fcXVldWUoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEsCisJCQkJc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiwgKnByZXY7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKKworCWlmICghbGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlidWYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUubmV4dCwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsIGNoYW5uZWwpOworCisJCWxpc3RfZm9yX2VhY2goaXRlbSwgJnEtPmFjdGl2ZSkgeworCQkJYnVmID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQl9CisKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmV2ID0gTlVMTDsKKwlmb3IgKDs7KSB7CisJCWlmIChsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKQorCQkJcmV0dXJuIDA7CisKKwkJYnVmID0KKwkJICAgIGxpc3RfZW50cnkocS0+cXVldWVkLm5leHQsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCisJCWlmIChOVUxMID09IHByZXYpIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLCBjaGFubmVsKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJfSBlbHNlIGlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoICYmCisJCQkgICBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQgJiYKKwkJCSAgIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgeworCQkJbGlzdF9tb3ZlX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIEJpdHMgNjMgLSAzMiAqLworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHJldiA9IGJ1ZjsKKwl9Cit9CisKK3ZvaWQgY3gyNTgyMV92aWRfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGN4MjU4MjFfZGF0YSAqdGltZW91dF9kYXRhID0gKHN0cnVjdCBjeDI1ODIxX2RhdGEgKilkYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdGltZW91dF9kYXRhLT5kZXY7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9IHRpbWVvdXRfZGF0YS0+Y2hhbm5lbDsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbY2hhbm5lbC0+aV07CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsIGNoYW5uZWwpOworCWN4X2NsZWFyKGNoYW5uZWwtPmRtYV9jdGwsIDB4MTEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJYnVmID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLm5leHQsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworCX0KKworCWN4MjU4MjFfcmVzdGFydF92aWRlb19xdWV1ZShkZXYsIHEsIGNoYW5uZWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKK30KKworaW50IGN4MjU4MjFfdmlkZW9faXJxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0sIHUzMiBzdGF0dXMpCit7CisJdTMyIGNvdW50ID0gMDsKKwlpbnQgaGFuZGxlZCA9IDA7CisJdTMyIG1hc2s7CisJc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dOworCisJbWFzayA9IGN4X3JlYWQoY2hhbm5lbC0+aW50X21zayk7CisJaWYgKDAgPT0gKHN0YXR1cyAmIG1hc2spKQorCQlyZXR1cm4gaGFuZGxlZDsKKworCWN4X3dyaXRlKGNoYW5uZWwtPmludF9zdGF0LCBzdGF0dXMpOworCisJLyogcmlzYyBvcCBjb2RlIGVycm9yICovCisJaWYgKHN0YXR1cyAmICgxIDw8IDE2KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcywgJXM6IHZpZGVvIHJpc2Mgb3AgY29kZSBlcnJvclxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgY2hhbm5lbC0+bmFtZSk7CisJCWN4X2NsZWFyKGNoYW5uZWwtPmRtYV9jdGwsIDB4MTEpOworCQljeDI1ODIxX3NyYW1fY2hhbm5lbF9kdW1wKGRldiwgY2hhbm5lbCk7CisJfQorCisJLyogcmlzYzEgeSAqLworCWlmIChzdGF0dXMgJiBGTERfVklEX0RTVF9SSVNDMSkgeworCQlzcGluX2xvY2soJmRldi0+c2xvY2spOworCQljb3VudCA9IGN4X3JlYWQoY2hhbm5lbC0+Z3BjbnQpOworCQljeDI1ODIxX3ZpZGVvX3dha2V1cChkZXYsICZkZXYtPnZpZHFbY2hhbm5lbC0+aV0sIGNvdW50KTsKKwkJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOworCQloYW5kbGVkKys7CisJfQorCisJLyogcmlzYzIgeSAqLworCWlmIChzdGF0dXMgJiAweDEwKSB7CisJCWRwcmludGsoMiwgInN0b3BwZXIgdmlkZW9cbiIpOworCQlzcGluX2xvY2soJmRldi0+c2xvY2spOworCQljeDI1ODIxX3Jlc3RhcnRfdmlkZW9fcXVldWUoZGV2LCAmZGV2LT52aWRxW2NoYW5uZWwtPmldLAorCQkJCQkgICAgY2hhbm5lbCk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKwkJaGFuZGxlZCsrOworCX0KKwlyZXR1cm4gaGFuZGxlZDsKK30KKwordm9pZCBjeDI1ODIxX3ZpZGVvaW9jdGxfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5pb2N0bF9kZXYpIHsKKwkJaWYgKGRldi0+aW9jdGxfZGV2LT5taW5vciAhPSAtMSkKKwkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+aW9jdGxfZGV2KTsKKwkJZWxzZQorCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT5pb2N0bF9kZXYpOworCisJCWRldi0+aW9jdGxfZGV2ID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgY3gyNTgyMV92aWRlb191bnJlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0pCit7CisJY3hfY2xlYXIoUENJX0lOVF9NU0ssIDEpOworCisJaWYgKGRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXSkgeworCQlpZiAoLTEgIT0gZGV2LT52aWRlb19kZXZbY2hhbl9udW1dLT5taW5vcikKKwkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXSk7CisJCWVsc2UKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXSk7CisKKwkJZGV2LT52aWRlb19kZXZbY2hhbl9udW1dID0gTlVMTDsKKworCQlidGN4X3Jpc2NtZW1fZnJlZShkZXYtPnBjaSwgJmRldi0+dmlkcVtjaGFuX251bV0uc3RvcHBlcik7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGV2aWNlICVkIHJlbGVhc2VkIVxuIiwgY2hhbl9udW0pOworCX0KKworfQorCitpbnQgY3gyNTgyMV92aWRlb19yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLAorCQkJICAgc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fdGVtcGxhdGUpCit7CisJaW50IGVycjsKKworCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKKworCS8vcHJpbnRrKEtFUk5fV0FSTklORyAiQ2hhbm5lbCAlZFxuIiwgY2hhbl9udW0pOworCisjaWZkZWYgVFVORVJfRkxBRworCWRldi0+dHZub3JtID0gdmlkZW9fdGVtcGxhdGUtPmN1cnJlbnRfbm9ybTsKKyNlbmRpZgorCisJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCisJZGV2LT50aW1lb3V0X2RhdGFbY2hhbl9udW1dLmRldiA9IGRldjsKKwlkZXYtPnRpbWVvdXRfZGF0YVtjaGFuX251bV0uY2hhbm5lbCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHFbY2hhbl9udW1dLmFjdGl2ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcVtjaGFuX251bV0ucXVldWVkKTsKKwlkZXYtPnZpZHFbY2hhbl9udW1dLnRpbWVvdXQuZnVuY3Rpb24gPSBjeDI1ODIxX3ZpZF90aW1lb3V0OworCWRldi0+dmlkcVtjaGFuX251bV0udGltZW91dC5kYXRhID0KKwkgICAgKHVuc2lnbmVkIGxvbmcpJmRldi0+dGltZW91dF9kYXRhW2NoYW5fbnVtXTsKKwlpbml0X3RpbWVyKCZkZXYtPnZpZHFbY2hhbl9udW1dLnRpbWVvdXQpOworCWN4MjU4MjFfcmlzY19zdG9wcGVyKGRldi0+cGNpLCAmZGV2LT52aWRxW2NoYW5fbnVtXS5zdG9wcGVyLAorCQkJICAgICBkZXYtPnNyYW1fY2hhbm5lbHNbY2hhbl9udW1dLmRtYV9jdGwsIDB4MTEsIDApOworCisJLyogcmVnaXN0ZXIgdjRsIGRldmljZXMgKi8KKwlkZXYtPnZpZGVvX2RldltjaGFuX251bV0gPQorCSAgICBjeDI1ODIxX3ZkZXZfaW5pdChkZXYsIGRldi0+cGNpLCB2aWRlb190ZW1wbGF0ZSwgInZpZGVvIik7CisJZXJyID0KKwkgICAgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2W2NoYW5fbnVtXSwgVkZMX1RZUEVfR1JBQkJFUiwKKwkJCQkgIHZpZGVvX25yW2Rldi0+bnJdKTsKKworCWlmIChlcnIgPCAwKSB7CisJCWdvdG8gZmFpbF91bnJlZzsKKwl9CisJLy9zZXQgUENJIGludGVycnVwdAorCWN4X3NldChQQ0lfSU5UX01TSywgMHhmZik7CisKKwkvKiBpbml0aWFsIGRldmljZSBjb25maWd1cmF0aW9uICovCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKyNpZmRlZiBUVU5FUl9GTEFHCisJY3gyNTgyMV9zZXRfdHZub3JtKGRldiwgZGV2LT50dm5vcm0pOworI2VuZGlmCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJaW5pdF9jb250cm9scyhkZXYsIGNoYW5fbnVtKTsKKworCXJldHVybiAwOworCisgICAgICBmYWlsX3VucmVnOgorCWN4MjU4MjFfdmlkZW9fdW5yZWdpc3RlcihkZXYsIGNoYW5fbnVtKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYnVmZmVyX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBxLT5wcml2X2RhdGE7CisKKwkqc2l6ZSA9IGZoLT5mbXQtPmRlcHRoICogZmgtPndpZHRoICogZmgtPmhlaWdodCA+PiAzOworCisJaWYgKDAgPT0gKmNvdW50KQorCQkqY291bnQgPSAzMjsKKworCXdoaWxlICgqc2l6ZSAqICpjb3VudCA+IHZpZF9saW1pdCAqIDEwMjQgKiAxMDI0KQorCQkoKmNvdW50KS0tOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBidWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJaW50IHJjLCBpbml0X2J1ZmZlciA9IDA7CisJdTMyIGxpbmUwX29mZnNldCwgbGluZTFfb2Zmc2V0OworCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSA9IHZpZGVvYnVmX3RvX2RtYSgmYnVmLT52Yik7CisJaW50IGJwbF9sb2NhbCA9IExJTkVfU0laRV9EMTsKKwlpbnQgY2hhbm5lbF9vcGVuZWQgPSAwOworCisJQlVHX09OKE5VTEwgPT0gZmgtPmZtdCk7CisJaWYgKGZoLT53aWR0aCA8IDQ4IHx8IGZoLT53aWR0aCA+IDcyMCB8fAorCSAgICBmaC0+aGVpZ2h0IDwgMzIgfHwgZmgtPmhlaWdodCA+IDU3NikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYtPnZiLnNpemUgPSAoZmgtPndpZHRoICogZmgtPmhlaWdodCAqIGZoLT5mbXQtPmRlcHRoKSA+PiAzOworCisJaWYgKDAgIT0gYnVmLT52Yi5iYWRkciAmJiBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChidWYtPmZtdCAhPSBmaC0+Zm10IHx8CisJICAgIGJ1Zi0+dmIud2lkdGggIT0gZmgtPndpZHRoIHx8CisJICAgIGJ1Zi0+dmIuaGVpZ2h0ICE9IGZoLT5oZWlnaHQgfHwgYnVmLT52Yi5maWVsZCAhPSBmaWVsZCkgeworCQlidWYtPmZtdCA9IGZoLT5mbXQ7CisJCWJ1Zi0+dmIud2lkdGggPSBmaC0+d2lkdGg7CisJCWJ1Zi0+dmIuaGVpZ2h0ID0gZmgtPmhlaWdodDsKKwkJYnVmLT52Yi5maWVsZCA9IGZpZWxkOworCQlpbml0X2J1ZmZlciA9IDE7CisJfQorCisJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgeworCQlpbml0X2J1ZmZlciA9IDE7CisJCXJjID0gdmlkZW9idWZfaW9sb2NrKHEsICZidWYtPnZiLCBOVUxMKTsKKwkJaWYgKDAgIT0gcmMpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWRlb2J1Zl9pb2xvY2sgZmFpbGVkIVxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlkcHJpbnRrKDEsICJpbml0X2J1ZmZlcj0lZFxuIiwgaW5pdF9idWZmZXIpOworCisJaWYgKGluaXRfYnVmZmVyKSB7CisKKwkJY2hhbm5lbF9vcGVuZWQgPSBkZXYtPmNoYW5uZWxfb3BlbmVkOworCQljaGFubmVsX29wZW5lZCA9IChjaGFubmVsX29wZW5lZCA8IDAKKwkJCQkgIHx8IGNoYW5uZWxfb3BlbmVkID4gNykgPyA3IDogY2hhbm5lbF9vcGVuZWQ7CisKKwkJaWYgKGRldi0+cGl4ZWxfZm9ybWF0c1tjaGFubmVsX29wZW5lZF0gPT0gUElYRUxfRlJNVF80MTEpCisJCQlidWYtPmJwbCA9IChidWYtPmZtdC0+ZGVwdGggKiBidWYtPnZiLndpZHRoKSA+PiAzOworCQllbHNlCisJCQlidWYtPmJwbCA9IChidWYtPmZtdC0+ZGVwdGggPj4gMykgKiAoYnVmLT52Yi53aWR0aCk7CisKKwkJaWYgKGRldi0+cGl4ZWxfZm9ybWF0c1tjaGFubmVsX29wZW5lZF0gPT0gUElYRUxfRlJNVF80MTEpIHsKKwkJCWJwbF9sb2NhbCA9IGJ1Zi0+YnBsOworCQl9IGVsc2UgeworCQkJYnBsX2xvY2FsID0gYnVmLT5icGw7CS8vRGVmYXVsdAorCisJCQlpZiAoY2hhbm5lbF9vcGVuZWQgPj0gMCAmJiBjaGFubmVsX29wZW5lZCA8PSA3KSB7CisJCQkJaWYgKGRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW2NoYW5uZWxfb3BlbmVkXSkgeworCQkJCQlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcKKwkJCQkJICAgIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQkJCQkJYnBsX2xvY2FsID0gMzUyIDw8IDE7CisJCQkJCWVsc2UKKwkJCQkJCWJwbF9sb2NhbCA9CisJCQkJCQkgICAgZGV2LT4KKwkJCQkJCSAgICBjaWZfd2lkdGhbY2hhbm5lbF9vcGVuZWRdIDw8CisJCQkJCQkgICAgMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlzd2l0Y2ggKGJ1Zi0+dmIuZmllbGQpIHsKKwkJY2FzZSBWNEwyX0ZJRUxEX1RPUDoKKwkJCWN4MjU4MjFfcmlzY19idWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCisJCQkJCSAgICBkbWEtPnNnbGlzdCwgMCwgVU5TRVQsCisJCQkJCSAgICBidWYtPmJwbCwgMCwgYnVmLT52Yi5oZWlnaHQpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006CisJCQljeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAorCQkJCQkgICAgZG1hLT5zZ2xpc3QsIFVOU0VULCAwLAorCQkJCQkgICAgYnVmLT5icGwsIDAsIGJ1Zi0+dmIuaGVpZ2h0KTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKKwkJCS8qIEFsbCBvdGhlciBmb3JtYXRzIGFyZSB0b3AgZmllbGQgZmlyc3QgKi8KKwkJCWxpbmUwX29mZnNldCA9IDA7CisJCQlsaW5lMV9vZmZzZXQgPSBidWYtPmJwbDsKKwkJCWRwcmludGsoMSwgInRvcCBmaWVsZCBmaXJzdFxuIik7CisKKwkJCWN4MjU4MjFfcmlzY19idWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCisJCQkJCSAgICBkbWEtPnNnbGlzdCwgbGluZTBfb2Zmc2V0LAorCQkJCQkgICAgYnBsX2xvY2FsLCBicGxfbG9jYWwsIGJwbF9sb2NhbCwKKwkJCQkJICAgIGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9GSUVMRF9TRVFfVEI6CisJCQljeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAorCQkJCQkgICAgZG1hLT5zZ2xpc3QsCisJCQkJCSAgICAwLCBidWYtPmJwbCAqIChidWYtPnZiLmhlaWdodCA+PiAxKSwKKwkJCQkJICAgIGJ1Zi0+YnBsLCAwLCBidWYtPnZiLmhlaWdodCA+PiAxKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfRklFTERfU0VRX0JUOgorCQkJY3gyNTgyMV9yaXNjX2J1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKKwkJCQkJICAgIGRtYS0+c2dsaXN0LAorCQkJCQkgICAgYnVmLT5icGwgKiAoYnVmLT52Yi5oZWlnaHQgPj4gMSksIDAsCisJCQkJCSAgICBidWYtPmJwbCwgMCwgYnVmLT52Yi5oZWlnaHQgPj4gMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJfQorCisJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcHJlcCAtICVkeCVkICVkYnBwIFwiJXNcIiAtIGRtYT0weCUwOGx4XG4iLAorCQlidWYsIGJ1Zi0+dmIuaSwgZmgtPndpZHRoLCBmaC0+aGVpZ2h0LCBmaC0+Zm10LT5kZXB0aCwKKwkJZmgtPmZtdC0+bmFtZSwgKHVuc2lnbmVkIGxvbmcpYnVmLT5yaXNjLmRtYSk7CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisKKwlyZXR1cm4gMDsKKworICAgICAgZmFpbDoKKwljeDI1ODIxX2ZyZWVfYnVmZmVyKHEsIGJ1Zik7CisJcmV0dXJuIHJjOworfQorCit2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCisJY3gyNTgyMV9mcmVlX2J1ZmZlcihxLCBidWYpOworfQorCitzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKmdldF9xdWV1ZShzdHJ1Y3QgY3gyNTgyMV9maCAqZmgpCit7CisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlyZXR1cm4gJmZoLT52aWRxOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK2ludCBnZXRfcmVzb3VyY2Uoc3RydWN0IGN4MjU4MjFfZmggKmZoLCBpbnQgcmVzb3VyY2UpCit7CisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlyZXR1cm4gcmVzb3VyY2U7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworaW50IHZpZGVvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcihnZXRfcXVldWUoZmgpLCB2bWEpOworfQorCisvKiBWSURFTyBJT0NUTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2ludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisKKwlmLT5mbXQucGl4LndpZHRoID0gZmgtPndpZHRoOworCWYtPmZtdC5waXguaGVpZ2h0ID0gZmgtPmhlaWdodDsKKwlmLT5mbXQucGl4LmZpZWxkID0gZmgtPnZpZHEuZmllbGQ7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IGZoLT5mbXQtPmZvdXJjYzsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IChmLT5mbXQucGl4LndpZHRoICogZmgtPmZtdC0+ZGVwdGgpID4+IDM7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZm10ICpmbXQ7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCXVuc2lnbmVkIGludCBtYXh3LCBtYXhoOworCisJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlpZiAoTlVMTCA9PSBmbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCW1heHcgPSA3MjA7CisJbWF4aCA9IDU3NjsKKworCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgeworCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IG1heGggLyAyKQorCQkgICAgPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgOiBWNEwyX0ZJRUxEX1RPUDsKKwl9CisKKwlzd2l0Y2ggKGZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX1RPUDoKKwljYXNlIFY0TDJfRklFTERfQk9UVE9NOgorCQltYXhoID0gbWF4aCAvIDI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmLT5mbXQucGl4LmZpZWxkID0gZmllbGQ7CisJaWYgKGYtPmZtdC5waXguaGVpZ2h0IDwgMzIpCisJCWYtPmZtdC5waXguaGVpZ2h0ID0gMzI7CisJaWYgKGYtPmZtdC5waXguaGVpZ2h0ID4gbWF4aCkKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSBtYXhoOworCWlmIChmLT5mbXQucGl4LndpZHRoIDwgNDgpCisJCWYtPmZtdC5waXgud2lkdGggPSA0ODsKKwlpZiAoZi0+Zm10LnBpeC53aWR0aCA+IG1heHcpCisJCWYtPmZtdC5waXgud2lkdGggPSBtYXh3OworCWYtPmZtdC5waXgud2lkdGggJj0gfjB4MDM7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAoZi0+Zm10LnBpeC53aWR0aCAqIGZtdC0+ZGVwdGgpID4+IDM7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY3gyNTgyMSIpOworCXN0cmxjcHkoY2FwLT5jYXJkLCBjeDI1ODIxX2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJc3ByaW50ZihjYXAtPmJ1c19pbmZvLCAiUENJZTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7CisJY2FwLT52ZXJzaW9uID0gQ1gyNTgyMV9WRVJTSU9OX0NPREU7CisJY2FwLT5jYXBhYmlsaXRpZXMgPQorCSAgICBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCWlmIChVTlNFVCAhPSBkZXYtPnR1bmVyX3R5cGUpCisJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlpZiAodW5saWtlbHkoZi0+aW5kZXggPj0gQVJSQVlfU0laRShmb3JtYXRzKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgZm9ybWF0c1tmLT5pbmRleF0ubmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzW2YtPmluZGV4XS5mb3VyY2M7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAoraW50IHZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcTsKKwlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyByZXE7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKworCXEgPSBnZXRfcXVldWUoZmgpOworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisJcmVxLnR5cGUgPSBxLT50eXBlOworCXJlcS5jb3VudCA9IDg7CisJcmVxLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJZXJyID0gdmlkZW9idWZfcmVxYnVmcyhxLCAmcmVxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCW1idWYtPmZyYW1lcyA9IHJlcS5jb3VudDsKKwltYnVmLT5zaXplID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWJ1Zi0+ZnJhbWVzOyBpKyspIHsKKwkJbWJ1Zi0+b2Zmc2V0c1tpXSA9IHEtPmJ1ZnNbaV0tPmJvZmY7CisJCW1idWYtPnNpemUgKz0gcS0+YnVmc1tpXS0+YnNpemU7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcyhnZXRfcXVldWUoZmgpLCBwKTsKK30KKworaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKGdldF9xdWV1ZShmaCksIHApOworfQorCitpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXJldHVybiB2aWRlb2J1Zl9xYnVmKGdldF9xdWV1ZShmaCksIHApOworfQorCitpbnQgdmlkaW9jX2dfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsIGVudW0gdjRsMl9wcmlvcml0eSAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilmKS0+ZGV2OworCisJKnAgPSB2NGwyX3ByaW9fbWF4KCZkZXYtPnByaW8pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2Nfc19wcmlvcml0eShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZiwgZW51bSB2NGwyX3ByaW9yaXR5IHByaW8pCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilmKS0+ZGV2OworCisJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmRldi0+cHJpbywgJmZoLT5wcmlvLCBwcmlvKTsKK30KKworI2lmZGVmIFRVTkVSX0ZMQUcKK2ludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogdHZub3JtcykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZGV2LT50dm5vcm0gPT0gKnR2bm9ybXMpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwljeDI1ODIxX3NldF90dm5vcm0oZGV2LCAqdHZub3Jtcyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJbWVkdXNhX3NldF92aWRlb3N0YW5kYXJkKGRldik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgY3gyNTgyMV9lbnVtX2lucHV0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVbXSA9IHsKKwkJW0NYMjU4MjFfVk1VWF9DT01QT1NJVEVdID0gIkNvbXBvc2l0ZSIsCisJCVtDWDI1ODIxX1ZNVVhfU1ZJREVPXSA9ICJTLVZpZGVvIiwKKwkJW0NYMjU4MjFfVk1VWF9ERUJVR10gPSAiZm9yIGRlYnVnIG9ubHkiLAorCX07CisJdW5zaWduZWQgaW50IG47CisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJbiA9IGktPmluZGV4OworCWlmIChuID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoMCA9PSBJTlBVVChuKS0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7CisJaS0+aW5kZXggPSBuOworCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCXN0cmNweShpLT5uYW1lLCBpbmFtZVtJTlBVVChuKS0+dHlwZV0pOworCisJaS0+c3RkID0gQ1gyNTgyMV9OT1JNUzsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gY3gyNTgyMV9lbnVtX2lucHV0KGRldiwgaSk7Cit9CisKK2ludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwkqaSA9IGRldi0+aW5wdXQ7CisJZHByaW50aygxLCAiJXMoKSByZXR1cm5zICVkXG4iLCBfX2Z1bmNfXywgKmkpOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJZHByaW50aygxLCAiJXMoJWQpXG4iLCBfX2Z1bmNfXywgaSk7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGkgPiAyKSB7CisJCWRwcmludGsoMSwgIiVzKCkgLUVJTlZBTFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWN4MjU4MjFfdmlkZW9fbXV4KGRldiwgaSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiAwOworfQorCisjaWZkZWYgVFVORVJfRkxBRworaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJZi0+ZnJlcXVlbmN5ID0gZGV2LT5mcmVxOworCisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGN4MjU4MjFfc2V0X2ZyZXEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWRldi0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOworCisJLyogV2hlbiBjaGFuZ2luZyBjaGFubmVscyBpdCBpcyByZXF1aXJlZCB0byByZXNldCBUVkFVRElPICovCisJbXNsZWVwKDEwKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfZnJlcShkZXYsIGYpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitpbnQgdmlkaW9jX2dfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilmaCktPmRldjsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKWZoKS0+ZGV2OworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKyNpZmRlZiBUVU5FUl9GTEFHCitpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwlpZiAodW5saWtlbHkoVU5TRVQgPT0gZGV2LT50dW5lcl90eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKDAgIT0gdC0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7CisJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOworCXQtPnJhbmdlaGlnaCA9IDB4ZmZmZmZmZmZVTDsKKworCXQtPnNpZ25hbCA9IDB4ZmZmZjsJLyogTE9DS0VEICovCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCWlmIChVTlNFVCA9PSBkZXYtPnR1bmVyX3R5cGUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgwICE9IHQtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisjZW5kaWYKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBub19jdGwgPSB7CisJLm5hbWUgPSAiNDIiLAorCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBjeDI1ODIxX2N0bHNbXSA9IHsKKwkvKiAtLS0gdmlkZW8gLS0tICovCisJeworCSAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCSAubmFtZSA9ICJCcmlnaHRuZXNzIiwKKwkgLm1pbmltdW0gPSAwLAorCSAubWF4aW11bSA9IDEwMDAwLAorCSAuc3RlcCA9IDEsCisJIC5kZWZhdWx0X3ZhbHVlID0gNjIwMCwKKwkgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCSB9LCB7CisJICAgICAuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkgICAgIC5uYW1lID0gIkNvbnRyYXN0IiwKKwkgICAgIC5taW5pbXVtID0gMCwKKwkgICAgIC5tYXhpbXVtID0gMTAwMDAsCisJICAgICAuc3RlcCA9IDEsCisJICAgICAuZGVmYXVsdF92YWx1ZSA9IDUwMDAsCisJICAgICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAgICB9LCB7CisJCSAuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkgLm5hbWUgPSAiU2F0dXJhdGlvbiIsCisJCSAubWluaW11bSA9IDAsCisJCSAubWF4aW11bSA9IDEwMDAwLAorCQkgLnN0ZXAgPSAxLAorCQkgLmRlZmF1bHRfdmFsdWUgPSA1MDAwLAorCQkgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkgfSwgeworCQkgICAgIC5pZCA9IFY0TDJfQ0lEX0hVRSwKKwkJICAgICAubmFtZSA9ICJIdWUiLAorCQkgICAgIC5taW5pbXVtID0gMCwKKwkJICAgICAubWF4aW11bSA9IDEwMDAwLAorCQkgICAgIC5zdGVwID0gMSwKKwkJICAgICAuZGVmYXVsdF92YWx1ZSA9IDUwMDAsCisJCSAgICAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkgICAgIH0KK307CitzdGF0aWMgY29uc3QgaW50IENYMjU4MjFfQ1RMUyA9IEFSUkFZX1NJWkUoY3gyNTgyMV9jdGxzKTsKKworc3RhdGljIGludCBjeDI1ODIxX2N0cmxfcXVlcnkoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3sKKwlpbnQgaTsKKworCWlmIChxY3RybC0+aWQgPCBWNEwyX0NJRF9CQVNFIHx8IHFjdHJsLT5pZCA+PSBWNEwyX0NJRF9MQVNUUDEpCisJCXJldHVybiAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCBDWDI1ODIxX0NUTFM7IGkrKykKKwkJaWYgKGN4MjU4MjFfY3Rsc1tpXS5pZCA9PSBxY3RybC0+aWQpCisJCQlicmVhazsKKwlpZiAoaSA9PSBDWDI1ODIxX0NUTFMpIHsKKwkJKnFjdHJsID0gbm9fY3RsOworCQlyZXR1cm4gMDsKKwl9CisJKnFjdHJsID0gY3gyNTgyMV9jdGxzW2ldOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJICAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQoreworCXJldHVybiBjeDI1ODIxX2N0cmxfcXVlcnkocWN0cmwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFZJREVPIENUUkwgSU9DVExTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsX2J5X2lkKHVuc2lnbmVkIGludCBpZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBDWDI1ODIxX0NUTFM7IGkrKykKKwkJaWYgKGN4MjU4MjFfY3Rsc1tpXS5pZCA9PSBpZCkKKwkJCXJldHVybiBjeDI1ODIxX2N0bHMgKyBpOworCXJldHVybiBOVUxMOworfQorCitpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmw7CisKKwljdHJsID0gY3RybF9ieV9pZChjdGwtPmlkKTsKKworCWlmIChOVUxMID09IGN0cmwpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoY3RsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RsLT52YWx1ZSA9IGRldi0+Y3RsX2JyaWdodDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWN0bC0+dmFsdWUgPSBkZXYtPmN0bF9odWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWN0bC0+dmFsdWUgPSBkZXYtPmN0bF9jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdGwtPnZhbHVlID0gZGV2LT5jdGxfc2F0dXJhdGlvbjsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgY3gyNTgyMV9zZXRfY29udHJvbChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCwgaW50IGNoYW5fbnVtKQoreworCWludCBlcnI7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOworCisJZXJyID0gLUVJTlZBTDsKKworCWN0cmwgPSBjdHJsX2J5X2lkKGN0bC0+aWQpOworCisJaWYgKE5VTEwgPT0gY3RybCkKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOgorCQlpZiAoY3RsLT52YWx1ZSA8IGN0cmwtPm1pbmltdW0pCisJCQljdGwtPnZhbHVlID0gY3RybC0+bWluaW11bTsKKwkJaWYgKGN0bC0+dmFsdWUgPiBjdHJsLT5tYXhpbXVtKQorCQkJY3RsLT52YWx1ZSA9IGN0cmwtPm1heGltdW07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIG5vdGhpbmcgKi8gOworCX07CisKKwlzd2l0Y2ggKGN0bC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWRldi0+Y3RsX2JyaWdodCA9IGN0bC0+dmFsdWU7CisJCW1lZHVzYV9zZXRfYnJpZ2h0bmVzcyhkZXYsIGN0bC0+dmFsdWUsIGNoYW5fbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWRldi0+Y3RsX2h1ZSA9IGN0bC0+dmFsdWU7CisJCW1lZHVzYV9zZXRfaHVlKGRldiwgY3RsLT52YWx1ZSwgY2hhbl9udW0pOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlkZXYtPmN0bF9jb250cmFzdCA9IGN0bC0+dmFsdWU7CisJCW1lZHVzYV9zZXRfY29udHJhc3QoZGV2LCBjdGwtPnZhbHVlLCBjaGFuX251bSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJZGV2LT5jdGxfc2F0dXJhdGlvbiA9IGN0bC0+dmFsdWU7CisJCW1lZHVzYV9zZXRfc2F0dXJhdGlvbihkZXYsIGN0bC0+dmFsdWUsIGNoYW5fbnVtKTsKKwkJYnJlYWs7CisJfQorCisJZXJyID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfY29udHJvbHMoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjaGFuX251bSkKK3sKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IENYMjU4MjFfQ1RMUzsgaSsrKSB7CisJCWN0cmwuaWQgPSBjeDI1ODIxX2N0bHNbaV0uaWQ7CisJCWN0cmwudmFsdWUgPSBjeDI1ODIxX2N0bHNbaV0uZGVmYXVsdF92YWx1ZTsKKworCQljeDI1ODIxX3NldF9jb250cm9sKGRldiwgJmN0cmwsIGNoYW5fbnVtKTsKKwl9Cit9CisKK2ludCB2aWRpb2NfY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljcm9wY2FwLT5ib3VuZHMudG9wID0gY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IDcyMDsKKwljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gZGV2LT50dm5vcm0gPT0gVjRMMl9TVERfUEFMX0JHID8gNTc2IDogNDgwOworCWNyb3BjYXAtPnBpeGVsYXNwZWN0Lm51bWVyYXRvciA9CisJICAgIGRldi0+dHZub3JtID09IFY0TDJfU1REX1BBTF9CRyA/IDU5IDogMTA7CisJY3JvcGNhcC0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPQorCSAgICBkZXYtPnR2bm9ybSA9PSBWNEwyX1NURF9QQUxfQkcgPyA1NCA6IDExOworCWNyb3BjYXAtPmRlZnJlY3QgPSBjcm9wY2FwLT5ib3VuZHM7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2Nfc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwkvLyB2aWRpb2Nfc19jcm9wIG5vdCBzdXBwb3J0ZWQKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IHZpZGlvY19nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJLy8gdmlkaW9jX2dfY3JvcCBub3Qgc3VwcG9ydGVkCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCB2aWRpb2NfcXVlcnlzdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogbm9ybSkKK3sKKwkvLyBtZWR1c2EgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBzdGFuZGFyZCBzZW5zaW5nIG9mIGN1cnJlbnQgaW5wdXQKKwkqbm9ybSA9IENYMjU4MjFfTk9STVM7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3ZhbGlkX3dpZHRoKHUzMiB3aWR0aCwgdjRsMl9zdGRfaWQgdHZub3JtKQoreworCWlmICh0dm5vcm0gPT0gVjRMMl9TVERfUEFMX0JHKSB7CisJCWlmICh3aWR0aCA9PSAzNTIgfHwgd2lkdGggPT0gNzIwKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKworCWlmICh0dm5vcm0gPT0gVjRMMl9TVERfTlRTQ19NKSB7CisJCWlmICh3aWR0aCA9PSAzMjAgfHwgd2lkdGggPT0gMzUyIHx8IHdpZHRoID09IDcyMCkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc192YWxpZF9oZWlnaHQodTMyIGhlaWdodCwgdjRsMl9zdGRfaWQgdHZub3JtKQoreworCWlmICh0dm5vcm0gPT0gVjRMMl9TVERfUEFMX0JHKSB7CisJCWlmIChoZWlnaHQgPT0gNTc2IHx8IGhlaWdodCA9PSAyODgpCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKHR2bm9ybSA9PSBWNEwyX1NURF9OVFNDX00pIHsKKwkJaWYgKGhlaWdodCA9PSA0ODAgfHwgaGVpZ2h0ID09IDI0MCkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDE3ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5oCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBDWDI1ODIxX1ZJREVPX0hfCisjZGVmaW5lIENYMjU4MjFfVklERU9fSF8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAiY3gyNTgyMS5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisvKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNlbmRpZgorCisjZGVmaW5lIFRVTkVSX0ZMQUcKKworI2RlZmluZSBWSURFT19ERUJVRyAwCisKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pXAorICAgIGRvIHsgaWYgKFZJREVPX0RFQlVHID49IGxldmVsKVwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMvMDogIiBmbXQsIGRldi0+bmFtZSwgIyMgYXJnKTtcCisgICAgfSB3aGlsZSAoMCkKKworLy9Gb3IgSU9DVEwgdG8gaWRlbnRpZnkgcnVubmluZyB1cHN0cmVhbQorI2RlZmluZSBVUFNUUkVBTV9TVEFSVF9WSURFTyAgICAgICAgNzAwCisjZGVmaW5lIFVQU1RSRUFNX1NUT1BfVklERU8gICAgICAgICA3MDEKKyNkZWZpbmUgVVBTVFJFQU1fU1RBUlRfQVVESU8gICAgICAgIDcwMgorI2RlZmluZSBVUFNUUkVBTV9TVE9QX0FVRElPICAgICAgICAgNzAzCisjZGVmaW5lIFVQU1RSRUFNX0RVTVBfUkVHSVNURVJTICAgICA3MDIKKyNkZWZpbmUgU0VUX1ZJREVPX1NURCAgICAgICAgICAgICAgIDgwMAorI2RlZmluZSBTRVRfUElYRUxfRk9STUFUICAgICAgICAgICAgMTAwMAorI2RlZmluZSBFTkFCTEVfQ0lGX1JFU09MVVRJT04gICAgICAgMTAwMQorCisjZGVmaW5lIFJFR19SRUFECQkgICAgOTAwCisjZGVmaW5lIFJFR19XUklURQkJICAgIDkwMQorI2RlZmluZSBNRURVU0FfUkVBRAkJICAgIDkxMAorI2RlZmluZSBNRURVU0FfV1JJVEUJCTkxMQorCitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDA7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDE7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDI7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDM7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDQ7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDU7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDY7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDc7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDk7CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCAqY2hhbm5lbDEwOworZXh0ZXJuIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwxMTsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUwOworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTE7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMjsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUzOworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTQ7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNTsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU2OworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTc7CitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlOTsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxMDsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxMTsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9pb2N0bF90ZW1wbGF0ZTsKKy8vZXh0ZXJuIGNvbnN0IHUzMiAqY3RybF9jbGFzc2VzW107CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlkX2xpbWl0OworCisjZGVmaW5lIEZPUk1BVF9GTEFHU19QQUNLRUQgICAgICAgMHgwMQorZXh0ZXJuIHN0cnVjdCBjeDI1ODIxX2ZtdCBmb3JtYXRzW107CitleHRlcm4gc3RydWN0IGN4MjU4MjFfZm10ICpmb3JtYXRfYnlfZm91cmNjKHVuc2lnbmVkIGludCBmb3VyY2MpOworZXh0ZXJuIHN0cnVjdCBjeDI1ODIxX2RhdGEgdGltZW91dF9kYXRhW01BWF9WSURfQ0hBTk5FTF9OVU1dOworCitleHRlcm4gdm9pZCBkdW1wX3ZpZGVvX3F1ZXVlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJICAgICBzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSk7CitleHRlcm4gdm9pZCBjeDI1ODIxX3ZpZGVvX3dha2V1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEsIHUzMiBjb3VudCk7CisKKyNpZmRlZiBUVU5FUl9GTEFHCitleHRlcm4gaW50IGN4MjU4MjFfc2V0X3R2bm9ybShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgdjRsMl9zdGRfaWQgbm9ybSk7CisjZW5kaWYKKworZXh0ZXJuIGludCByZXNfZ2V0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgY3gyNTgyMV9maCAqZmgsCisJCSAgIHVuc2lnbmVkIGludCBiaXQpOworZXh0ZXJuIGludCByZXNfY2hlY2soc3RydWN0IGN4MjU4MjFfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KTsKK2V4dGVybiBpbnQgcmVzX2xvY2tlZChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGJpdCk7CitleHRlcm4gdm9pZCByZXNfZnJlZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IGN4MjU4MjFfZmggKmZoLAorCQkgICAgIHVuc2lnbmVkIGludCBiaXRzKTsKK2V4dGVybiBpbnQgY3gyNTgyMV92aWRlb19tdXgoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBpbnB1dCk7CitleHRlcm4gaW50IGN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgIHN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxLAorCQkJCSAgIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmLAorCQkJCSAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwpOworCitleHRlcm4gaW50IGN4MjU4MjFfc2V0X3NjYWxlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgd2lkdGgsCisJCQkgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsIGVudW0gdjRsMl9maWVsZCBmaWVsZCk7CitleHRlcm4gaW50IGN4MjU4MjFfdmlkZW9faXJxKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0sIHUzMiBzdGF0dXMpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV92aWRlb191bnJlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0pOworZXh0ZXJuIGludCBjeDI1ODIxX3ZpZGVvX3JlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbl9udW0sCisJCQkJICBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb190ZW1wbGF0ZSk7CitleHRlcm4gaW50IGdldF9mb3JtYXRfc2l6ZSh2b2lkKTsKKworZXh0ZXJuIGludCBidWZmZXJfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkJdW5zaWduZWQgaW50ICpzaXplKTsKK2V4dGVybiBpbnQgYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCSAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKTsKK2V4dGVybiB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKTsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKmdldF9xdWV1ZShzdHJ1Y3QgY3gyNTgyMV9maCAqZmgpOworZXh0ZXJuIGludCBnZXRfcmVzb3VyY2Uoc3RydWN0IGN4MjU4MjFfZmggKmZoLCBpbnQgcmVzb3VyY2UpOworZXh0ZXJuIGludCB2aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOworZXh0ZXJuIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApOworZXh0ZXJuIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKK2V4dGVybiBpbnQgdmlkaW9jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmKTsKK2V4dGVybiBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpwKTsKK2V4dGVybiBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpwKTsKK2V4dGVybiBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCk7CitleHRlcm4gaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKiB0dm5vcm1zKTsKK2V4dGVybiBpbnQgY3gyNTgyMV9lbnVtX2lucHV0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSk7CitleHRlcm4gaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSk7CitleHRlcm4gaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpOworZXh0ZXJuIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpOworZXh0ZXJuIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCk7CitleHRlcm4gaW50IHZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7CitleHRlcm4gaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZik7CitleHRlcm4gaW50IGN4MjU4MjFfc2V0X2ZyZXEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZik7CitleHRlcm4gaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZik7CitleHRlcm4gaW50IHZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpOworZXh0ZXJuIGludCB2aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKTsKK2V4dGVybiBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp0KTsKK2V4dGVybiBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp0KTsKKworZXh0ZXJuIGludCBpc192YWxpZF93aWR0aCh1MzIgd2lkdGgsIHY0bDJfc3RkX2lkIHR2bm9ybSk7CitleHRlcm4gaW50IGlzX3ZhbGlkX2hlaWdodCh1MzIgaGVpZ2h0LCB2NGwyX3N0ZF9pZCB0dm5vcm0pOworCitleHRlcm4gaW50IHZpZGlvY19nX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmLCBlbnVtIHY0bDJfcHJpb3JpdHkgKnApOworZXh0ZXJuIGludCB2aWRpb2Nfc19wcmlvcml0eShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZiwKKwkJCSAgICAgZW51bSB2NGwyX3ByaW9yaXR5IHByaW8pOworCitleHRlcm4gaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCk7CitleHRlcm4gaW50IGN4MjU4MjFfc2V0X2NvbnRyb2woc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCwgaW50IGNoYW5fbnVtKTsKKworZXh0ZXJuIGludCB2aWRpb2NfY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXApOworZXh0ZXJuIGludCB2aWRpb2Nfc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKTsKK2V4dGVybiBpbnQgdmlkaW9jX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCk7CisKK2V4dGVybiBpbnQgdmlkaW9jX3F1ZXJ5c3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqIG5vcm0pOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMC5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBmYWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzAuYwpAQCAtMCwwICsxLDQ1MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDBdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwMF0pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJdTMyIHBpeF9mb3JtYXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDAwXQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwMF0tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDAwOworCXBpeF9mb3JtYXQgPQorCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU8wKSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMCkpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAwXSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDAtPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMCkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPMCk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8wKSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8wKTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKworCS8vIGNoZWNrIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgdmFsaWQgYmFzZWQgb24gc2V0IHN0YW5kYXJkCisJaWYgKGlzX3ZhbGlkX3dpZHRoKGYtPmZtdC5waXgud2lkdGgsIGRldi0+dHZub3JtKSkgeworCQlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCX0KKworCWlmIChpc192YWxpZF9oZWlnaHQoZi0+Zm10LnBpeC5oZWlnaHQsIGRldi0+dHZub3JtKSkgeworCQlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJfQorCisJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1k0MVApCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQxMTsKKwllbHNlIGlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MjI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4MjU4MjFfc2V0X3BpeGVsX2Zvcm1hdChkZXYsIFNSQU1fQ0gwMCwgcGl4X2Zvcm1hdCk7CisKKwkvLyBjaGVjayBpZiBjaWYgcmVzb2x1dGlvbgorCWlmIChmaC0+d2lkdGggPT0gMzIwIHx8IGZoLT53aWR0aCA9PSAzNTIpIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAwXSA9IDE7CisJfSBlbHNlIHsKKwkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAwXSA9IDA7CisJfQorCWRldi0+Y2lmX3dpZHRoW1NSQU1fQ0gwMF0gPSBmaC0+d2lkdGg7CisJbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgZmgtPndpZHRoLCBTUkFNX0NIMDApOworCisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisKKwlyZXRfdmFsID0gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJcC0+c2VxdWVuY2UgPSBkZXYtPnZpZHFbU1JBTV9DSDAwXS5jb3VudDsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDBdOworCXUzMiB0bXAgPSAwOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgMCBpcyAlc1xuIiwKKwkgICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDApOworfQorCisvLyBleHBvcnRlZCBzdHVmZgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisJLnJlYWQgPSB2aWRlb19yZWFkLAorCS5wb2xsID0gdmlkZW9fcG9sbCwKKwkubW1hcCA9IHZpZGVvX21tYXAsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMCA9IHsKKwkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8xLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZGRkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMS5jCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gwMV07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDAxXSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwl1MzIgcGl4X2Zvcm1hdDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDFdCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDAxXS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBTUkFNX0NIMDE7CisJcGl4X2Zvcm1hdCA9CisJICAgIChkZXYtPnBpeGVsX2Zvcm1hdHNbZGV2LT5jaGFubmVsX29wZW5lZF0gPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFY0TDJfUElYX0ZNVF9ZNDFQIDogVjRMMl9QSVhfRk1UX1lVWVY7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7CisKKwl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCisJCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAorCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKKworCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzEpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKKwkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU8xKSkgeworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCgpIGNhcHR1cmUgKi8KKwkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7CisJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKSB7CisJCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUpIHsKKwkJCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCQkJaWYgKGRldiAmJiBkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDFdKSB7CisJCQkJdTggY2FtX2lkID0gKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKTsKKwkJCQltZW1jcHkoKGNoYXIgKilidWYtPnZiLmJhZGRyLAorCQkJCSAgICAgICAoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAoZmgtPndpZHRoICogMiksCisJCQkJICAgICAgIChmaC0+d2lkdGggKiAyKSk7CisJCQkJKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKSA9IGNhbV9pZDsKKwkJCX0KKwkJfQorCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8vc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8KKwljeF93cml0ZShjaGFubmVsMS0+ZG1hX2N0bCwgMCk7CS8qIEZJRk8gYW5kIFJJU0MgZGlzYWJsZSAqLworCisJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU8xKSkgeworCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKKwkJcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU8xKTsKKwl9CisKKwlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKKwkJYnVmZmVyX3JlbGVhc2UoJmZoLT52aWRxLCBmaC0+dmlkcS5yZWFkX2J1Zik7CisJCWtmcmVlKGZoLT52aWRxLnJlYWRfYnVmKTsKKwl9CisKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKKworCXY0bDJfcHJpb19jbG9zZSgmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoIXJlc19nZXQoZGV2LCBmaCwgZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzEpKSkpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oZ2V0X3F1ZXVlKGZoKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGVyciwgcmVzOworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGkgIT0gZmgtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzEpOworCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXNfZnJlZShkZXYsIGZoLCByZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKwlpbnQgcGl4X2Zvcm1hdCA9IDA7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CisKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisKKwkvLyBjaGVjayBpZiB3aWR0aCBhbmQgaGVpZ2h0IGlzIHZhbGlkIGJhc2VkIG9uIHNldCBzdGFuZGFyZAorCWlmIChpc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwl9CisKKwlpZiAoaXNfdmFsaWRfaGVpZ2h0KGYtPmZtdC5waXguaGVpZ2h0LCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCX0KKworCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZNDFQKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MTE7CisJZWxzZSBpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDIyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeDI1ODIxX3NldF9waXhlbF9mb3JtYXQoZGV2LCBTUkFNX0NIMDEsIHBpeF9mb3JtYXQpOworCisJLy8gY2hlY2sgaWYgY2lmIHJlc29sdXRpb24KKwlpZiAoZmgtPndpZHRoID09IDMyMCB8fCBmaC0+d2lkdGggPT0gMzUyKSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMV0gPSAxOworCX0gZWxzZSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwMV0gPSAwOworCX0KKwlkZXYtPmNpZl93aWR0aFtTUkFNX0NIMDFdID0gZmgtPndpZHRoOworCW1lZHVzYV9zZXRfcmVzb2x1dGlvbihkZXYsIGZoLT53aWR0aCwgU1JBTV9DSDAxKTsKKworCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAorCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJcmV0X3ZhbCA9IHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCXAtPnNlcXVlbmNlID0gZGV2LT52aWRxW1NSQU1fQ0gwMV0uY291bnQ7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWNoYXIgbmFtZVszMiArIDJdOworCisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDAxXTsKKwl1MzIgdG1wID0gMDsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDEgaXMgJXNcbiIsCisJICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDAxKTsKK30KKworLy9leHBvcnRlZCBzdHVmZgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisJLnJlYWQgPSB2aWRlb19yZWFkLAorCS5wb2xsID0gdmlkZW9fcG9sbCwKKwkubW1hcCA9IHZpZGVvX21tYXAsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMSA9IHsKKwkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8yLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMDRlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMi5jCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gwMl07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDAyXSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwl1MzIgcGl4X2Zvcm1hdDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDJdCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDAyXS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDAyOworCXBpeF9mb3JtYXQgPQorCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU8yKSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMikpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAyXSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDItPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMikpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPMik7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8yKSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8yKTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSAwOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCisJLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKKwlpZiAoaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJfQorCisJaWYgKGlzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwl9CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDAyLCBwaXhfZm9ybWF0KTsKKworCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCisJaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDJdID0gMTsKKwl9IGVsc2UgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDJdID0gMDsKKwl9CisJZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDAyXSA9IGZoLT53aWR0aDsKKwltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwMik7CisKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDJdLmNvdW50OworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwMl07CisJdTMyIHRtcCA9IDA7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKworCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgMiBpcyAlc1xuIiwKKwkgICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDIpOworfQorCisvLyBleHBvcnRlZCBzdHVmZgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisJLnJlYWQgPSB2aWRlb19yZWFkLAorCS5wb2xsID0gdmlkZW9fcG9sbCwKKwkubW1hcCA9IHZpZGVvX21tYXAsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMiA9IHsKKwkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8zLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDFhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMy5jCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gwM107CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDAzXSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwl1MzIgcGl4X2Zvcm1hdDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDNdCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDAzXS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDAzOworCXBpeF9mb3JtYXQgPQorCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU8zKSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMykpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDAzXSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDMtPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPMykpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPMyk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8zKSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8zKTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSAwOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCisJLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKKwlpZiAoaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJfQorCisJaWYgKGlzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwl9CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDAzLCBwaXhfZm9ybWF0KTsKKworCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCisJaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDNdID0gMTsKKwl9IGVsc2UgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDNdID0gMDsKKwl9CisJZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDAzXSA9IGZoLT53aWR0aDsKKwltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwMyk7CisKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDNdLmNvdW50OworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwM107CisJdTMyIHRtcCA9IDA7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDMgaXMgJXNcbiIsCisJICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDAzKTsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTMgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNC5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBkNzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzQuYwpAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDRdOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZWQpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCWJ1Zi0+dmIuaSk7CisKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLAorCQkJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNF0pOworCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsCisJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50LCBxLT5jb3VudCk7CisJfSBlbHNlIHsKKwkJcHJldiA9CisJCSAgICBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoID09IGJ1Zi0+dmIud2lkdGgKKwkJICAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAorCQkgICAgJiYgcHJldi0+Zm10ID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKKwkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CisKKwkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJZHByaW50aygyLAorCQkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IHF1ZXVlZFxuIiwgYnVmLAorCQkJCWJ1Zi0+dmIuaSk7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlkcHJpbnRrKDIsICJhY3RpdmUgcXVldWUgZW1wdHkhXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4MjU4MjFfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlID0gYnVmZmVyX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJdTMyIHBpeF9mb3JtYXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOworCisJCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDA0XQorCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwNF0tPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKworCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCisJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+ZGV2ID0gZGV2OworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+d2lkdGggPSA3MjA7CisKKwlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCisJCWZoLT5oZWlnaHQgPSA1NzY7CisJZWxzZQorCQlmaC0+aGVpZ2h0ID0gNDgwOworCisJZGV2LT5jaGFubmVsX29wZW5lZCA9IFNSQU1fQ0gwNDsKKwlwaXhfZm9ybWF0ID0KKwkgICAgKGRldi0+cGl4ZWxfZm9ybWF0c1tkZXYtPmNoYW5uZWxfb3BlbmVkXSA9PQorCSAgICAgUElYRUxfRlJNVF80MTEpID8gVjRMMl9QSVhfRk1UX1k0MVAgOiBWNEwyX1BJWF9GTVRfWVVZVjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhwaXhfZm9ybWF0KTsKKworCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCisJCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAorCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKKworCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzQpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKKwkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU80KSkgeworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCgpIGNhcHR1cmUgKi8KKwkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7CisJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKSB7CisJCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUpIHsKKwkJCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCQkJaWYgKGRldiAmJiBkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDRdKSB7CisJCQkJdTggY2FtX2lkID0gKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKTsKKwkJCQltZW1jcHkoKGNoYXIgKilidWYtPnZiLmJhZGRyLAorCQkJCSAgICAgICAoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAoZmgtPndpZHRoICogMiksCisJCQkJICAgICAgIChmaC0+d2lkdGggKiAyKSk7CisJCQkJKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKSA9IGNhbV9pZDsKKwkJCX0KKwkJfQorCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8vc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8KKwljeF93cml0ZShjaGFubmVsNC0+ZG1hX2N0bCwgMCk7CS8qIEZJRk8gYW5kIFJJU0MgZGlzYWJsZSAqLworCisJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU80KSkgeworCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKKwkJcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU80KTsKKwl9CisKKwlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKKwkJYnVmZmVyX3JlbGVhc2UoJmZoLT52aWRxLCBmaC0+dmlkcS5yZWFkX2J1Zik7CisJCWtmcmVlKGZoLT52aWRxLnJlYWRfYnVmKTsKKwl9CisKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKKworCXY0bDJfcHJpb19jbG9zZSgmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoIXJlc19nZXQoZGV2LCBmaCwgZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzQpKSkpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oZ2V0X3F1ZXVlKGZoKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGVyciwgcmVzOworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGkgIT0gZmgtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzQpOworCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXNfZnJlZShkZXYsIGZoLCByZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKwlpbnQgcGl4X2Zvcm1hdCA9IDA7CisKKwkvLyBjaGVjayBwcmlvcml0eQorCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CisKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisKKwkvLyBjaGVjayBpZiB3aWR0aCBhbmQgaGVpZ2h0IGlzIHZhbGlkIGJhc2VkIG9uIHNldCBzdGFuZGFyZAorCWlmIChpc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwl9CisKKwlpZiAoaXNfdmFsaWRfaGVpZ2h0KGYtPmZtdC5waXguaGVpZ2h0LCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCX0KKworCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZNDFQKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MTE7CisJZWxzZSBpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDIyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeDI1ODIxX3NldF9waXhlbF9mb3JtYXQoZGV2LCBTUkFNX0NIMDQsIHBpeF9mb3JtYXQpOworCisJLy8gY2hlY2sgaWYgY2lmIHJlc29sdXRpb24KKwlpZiAoZmgtPndpZHRoID09IDMyMCB8fCBmaC0+d2lkdGggPT0gMzUyKSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwNF0gPSAxOworCX0gZWxzZSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwNF0gPSAwOworCX0KKwlkZXYtPmNpZl93aWR0aFtTUkFNX0NIMDRdID0gZmgtPndpZHRoOworCW1lZHVzYV9zZXRfcmVzb2x1dGlvbihkZXYsIGZoLT53aWR0aCwgU1JBTV9DSDA0KTsKKworCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAorCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJcmV0X3ZhbCA9IHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCXAtPnNlcXVlbmNlID0gZGV2LT52aWRxW1NSQU1fQ0gwNF0uY291bnQ7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWNoYXIgbmFtZVszMiArIDJdOworCisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9ICZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA0XTsKKwl1MzIgdG1wID0gMDsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCBjb3JlLCBsb2dfc3RhdHVzKTsKKworCXRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgNCBpcyAlc1xuIiwKKwkgICAgICAgKHRtcCAmIDB4MTEpID8gInN0cmVhbWluZyIgOiAic3RvcHBlZCIpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBjeDI1ODIxX3NldF9jb250cm9sKGRldiwgY3RsLCBTUkFNX0NIMDQpOworfQorCisvLyBleHBvcnRlZCBzdHVmZgorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCisJLnJlYWQgPSB2aWRlb19yZWFkLAorCS5wb2xsID0gdmlkZW9fcG9sbCwKKwkubW1hcCA9IHZpZGVvX21tYXAsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNCA9IHsKKwkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW81LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZjBiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNS5jCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gwNV07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA1XSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwl1MzIgcGl4X2Zvcm1hdDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDVdCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA1XS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgPSBkZXY7CisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT53aWR0aCA9IDcyMDsKKworCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9CRyB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJZmgtPmhlaWdodCA9IDU3NjsKKwllbHNlCisJCWZoLT5oZWlnaHQgPSA0ODA7CisKKwlkZXYtPmNoYW5uZWxfb3BlbmVkID0gU1JBTV9DSDA1OworCXBpeF9mb3JtYXQgPQorCSAgICAoZGV2LT5waXhlbF9mb3JtYXRzW2Rldi0+Y2hhbm5lbF9vcGVuZWRdID09CisJICAgICBQSVhFTF9GUk1UXzQxMSkgPyBWNEwyX1BJWF9GTVRfWTQxUCA6IFY0TDJfUElYX0ZNVF9ZVVlWOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKHBpeF9mb3JtYXQpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU81KSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKKworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNSkpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikgeworCQlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7CisJCQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bU1JBTV9DSDA1XSkgeworCQkJCXU4IGNhbV9pZCA9ICooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMyk7CisJCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKKwkJCQkgICAgICAgKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGZoLT53aWR0aCAqIDIpLAorCQkJCSAgICAgICAoZmgtPndpZHRoICogMikpOworCQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJY3hfd3JpdGUoY2hhbm5lbDUtPmRtYV9jdGwsIDApOwkvKiBGSUZPIGFuZCBSSVNDIGRpc2FibGUgKi8KKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPNSkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPNSk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU81KSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU81KTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSAwOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCisJLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKKwlpZiAoaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJfQorCisJaWYgKGlzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwl9CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDA1LCBwaXhfZm9ybWF0KTsKKworCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCisJaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDVdID0gMTsKKwl9IGVsc2UgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDVdID0gMDsKKwl9CisJZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDA1XSA9IGZoLT53aWR0aDsKKwltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwNSk7CisKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDVdLmNvdW50OworCisJcmV0dXJuIHJldF92YWw7Cit9CitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzdHJ1Y3Qgc3JhbV9jaGFubmVsICpzcmFtX2NoID0gJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDVdOworCXUzMiB0bXAgPSAwOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCisJdG1wID0gY3hfcmVhZChzcmFtX2NoLT5kbWFfY3RsKTsKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBpbnB1dCA1IGlzICVzXG4iLAorCSAgICAgICAodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGN4MjU4MjFfc2V0X2NvbnRyb2woZGV2LCBjdGwsIFNSQU1fQ0gwNSk7Cit9CisKKy8vIGV4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2Nfc19zdGQgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCA9IHZpZGlvY19xdWVyeXN0ZCwKKyNlbmRpZgorCS52aWRpb2NfY3JvcGNhcCA9IHZpZGlvY19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wID0gdmlkaW9jX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCisJLnZpZGlvY19nX3ByaW9yaXR5ID0gdmlkaW9jX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5ID0gdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmID0gdmlkaW9jZ21idWYsCisjZW5kaWYKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU1ID0geworCS5uYW1lID0gImN4MjU4MjEtdmlkZW8iLAorCS5mb3BzID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW82LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0MWI0OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW82LmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDA2XTsKKworCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOworCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKKworCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCisJCQlidWYtPnZiLmkpOworCisJfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKKwkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDZdKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJZHByaW50aygyLAorCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOworCX0gZWxzZSB7CisJCXByZXYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCisJCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKKwkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOworCisJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKKwkJCWRwcmludGsoMiwKKwkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKKworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCQlidWYtPnZiLmkpOworCQl9CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCXUzMiBwaXhfZm9ybWF0OworCisJbG9ja19rZXJuZWwoKTsKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjU4MjFfZGV2LCBkZXZsaXN0KTsKKworCQlpZiAoaC0+dmlkZW9fZGV2W1NSQU1fQ0gwNl0KKwkJICAgICYmIGgtPnZpZGVvX2RldltTUkFNX0NIMDZdLT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKwl9CisKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoIm9wZW4gbWlub3I9JWQgdHlwZT0lc1xuIiwgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisKKwkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBTUkFNX0NIMDY7CisJcGl4X2Zvcm1hdCA9CisJICAgIChkZXYtPnBpeGVsX2Zvcm1hdHNbZGV2LT5jaGFubmVsX29wZW5lZF0gPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFY0TDJfUElYX0ZNVF9ZNDFQIDogVjRMMl9QSVhfRk1UX1lVWVY7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7CisKKwl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCisJCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAorCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKKworCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzYpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKKwkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU82KSkgeworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCgpIGNhcHR1cmUgKi8KKwkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7CisJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKSB7CisJCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUpIHsKKwkJCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCQkJaWYgKGRldiAmJiBkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDZdKSB7CisJCQkJdTggY2FtX2lkID0gKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKTsKKwkJCQltZW1jcHkoKGNoYXIgKilidWYtPnZiLmJhZGRyLAorCQkJCSAgICAgICAoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAoZmgtPndpZHRoICogMiksCisJCQkJICAgICAgIChmaC0+d2lkdGggKiAyKSk7CisJCQkJKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKSA9IGNhbV9pZDsKKwkJCX0KKwkJfQorCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8vc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8KKwljeF93cml0ZShjaGFubmVsNi0+ZG1hX2N0bCwgMCk7CS8qIEZJRk8gYW5kIFJJU0MgZGlzYWJsZSAqLworCisJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU82KSkgeworCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKKwkJcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU82KTsKKwl9CisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU82KSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU82KTsKKwllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoZ2V0X3F1ZXVlKGZoKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmVzX2ZyZWUoZGV2LCBmaCwgcmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisJaW50IHBpeF9mb3JtYXQgPSAwOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCisJLy8gY2hlY2sgaWYgd2lkdGggYW5kIGhlaWdodCBpcyB2YWxpZCBiYXNlZCBvbiBzZXQgc3RhbmRhcmQKKwlpZiAoaXNfdmFsaWRfd2lkdGgoZi0+Zm10LnBpeC53aWR0aCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJfQorCisJaWYgKGlzX3ZhbGlkX2hlaWdodChmLT5mbXQucGl4LmhlaWdodCwgZGV2LT50dm5vcm0pKSB7CisJCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwl9CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTQxUCkKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDExOworCWVsc2UgaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCXBpeF9mb3JtYXQgPSBQSVhFTF9GUk1UXzQyMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KGRldiwgU1JBTV9DSDA2LCBwaXhfZm9ybWF0KTsKKworCS8vIGNoZWNrIGlmIGNpZiByZXNvbHV0aW9uCisJaWYgKGZoLT53aWR0aCA9PSAzMjAgfHwgZmgtPndpZHRoID09IDM1MikgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDZdID0gMTsKKwl9IGVsc2UgeworCQlkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDZdID0gMDsKKwl9CisJZGV2LT5jaWZfd2lkdGhbU1JBTV9DSDA2XSA9IGZoLT53aWR0aDsKKwltZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwNik7CisKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKworCXJldF92YWwgPSB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwlwLT5zZXF1ZW5jZSA9IGRldi0+dmlkcVtTUkFNX0NIMDZdLmNvdW50OworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwNl07CisJdTMyIHRtcCA9IDA7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDYgaXMgJXNcbiIsCisJICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDA2KTsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTYgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjVjOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzcuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtTUkFNX0NIMDddOworCisJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLworCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOworCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOwkvKiBiaXRzIDYzLTMyICovCisKKwlkcHJpbnRrKDIsICJqbXAgdG8gc3RvcHBlciAoMHgleClcbiIsIGJ1Zi0+cmlzYy5qbXBbMV0pOworCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCisJCQlidWYtPnZiLmkpOworCisJfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKKwkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMDddKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJZHByaW50aygyLAorCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOworCX0gZWxzZSB7CisJCXByZXYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCisJCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKKwkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOworCisJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKKwkJCWRwcmludGsoMiwKKwkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKKworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCQlidWYtPnZiLmkpOworCQl9CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCXUzMiBwaXhfZm9ybWF0OworCisJbG9ja19rZXJuZWwoKTsKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjU4MjFfZGV2LCBkZXZsaXN0KTsKKworCQlpZiAoaC0+dmlkZW9fZGV2W1NSQU1fQ0gwN10KKwkJICAgICYmIGgtPnZpZGVvX2RldltTUkFNX0NIMDddLT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKwl9CisKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoIm9wZW4gbWlub3I9JWQgdHlwZT0lc1xuIiwgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisKKwkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBTUkFNX0NIMDc7CisJcGl4X2Zvcm1hdCA9CisJICAgIChkZXYtPnBpeGVsX2Zvcm1hdHNbZGV2LT5jaGFubmVsX29wZW5lZF0gPT0KKwkgICAgIFBJWEVMX0ZSTVRfNDExKSA/IFY0TDJfUElYX0ZNVF9ZNDFQIDogVjRMMl9QSVhfRk1UX1lVWVY7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7CisKKwl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCisJCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAorCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKKworCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFTzcpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9vbmUoJmZoLT52aWRxLCBkYXRhLCBjb3VudCwgcHBvcywKKwkJCQkJIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmOworCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU83KSkgeworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCgpIGNhcHR1cmUgKi8KKwkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7CisJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKSB7CisJCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUpIHsKKwkJCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCQkJaWYgKGRldiAmJiBkZXYtPnVzZV9jaWZfcmVzb2x1dGlvbltTUkFNX0NIMDddKSB7CisJCQkJdTggY2FtX2lkID0gKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKTsKKwkJCQltZW1jcHkoKGNoYXIgKilidWYtPnZiLmJhZGRyLAorCQkJCSAgICAgICAoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAoZmgtPndpZHRoICogMiksCisJCQkJICAgICAgIChmaC0+d2lkdGggKiAyKSk7CisJCQkJKigoY2hhciAqKWJ1Zi0+dmIuYmFkZHIgKyAzKSA9IGNhbV9pZDsKKwkJCX0KKwkJfQorCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8vc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8KKwljeF93cml0ZShjaGFubmVsNy0+ZG1hX2N0bCwgMCk7CS8qIEZJRk8gYW5kIFJJU0MgZGlzYWJsZSAqLworCisJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU83KSkgeworCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmZoLT52aWRxKTsKKwkJcmVzX2ZyZWUoZGV2LCBmaCwgUkVTT1VSQ0VfVklERU83KTsKKwl9CisKKwlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKKwkJYnVmZmVyX3JlbGVhc2UoJmZoLT52aWRxLCBmaC0+dmlkcS5yZWFkX2J1Zik7CisJCWtmcmVlKGZoLT52aWRxLnJlYWRfYnVmKTsKKwl9CisKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKKworCXY0bDJfcHJpb19jbG9zZSgmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoIXJlc19nZXQoZGV2LCBmaCwgZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzcpKSkpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oZ2V0X3F1ZXVlKGZoKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGVyciwgcmVzOworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGkgIT0gZmgtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzcpOworCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXNfZnJlZShkZXYsIGZoLCByZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKwlpbnQgcGl4X2Zvcm1hdCA9IDA7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CisKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisKKwkvLyBjaGVjayBpZiB3aWR0aCBhbmQgaGVpZ2h0IGlzIHZhbGlkIGJhc2VkIG9uIHNldCBzdGFuZGFyZAorCWlmIChpc192YWxpZF93aWR0aChmLT5mbXQucGl4LndpZHRoLCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwl9CisKKwlpZiAoaXNfdmFsaWRfaGVpZ2h0KGYtPmZtdC5waXguaGVpZ2h0LCBkZXYtPnR2bm9ybSkpIHsKKwkJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCX0KKworCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZNDFQKQorCQlwaXhfZm9ybWF0ID0gUElYRUxfRlJNVF80MTE7CisJZWxzZSBpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikKKwkJcGl4X2Zvcm1hdCA9IFBJWEVMX0ZSTVRfNDIyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljeDI1ODIxX3NldF9waXhlbF9mb3JtYXQoZGV2LCBTUkFNX0NIMDcsIHBpeF9mb3JtYXQpOworCisJLy8gY2hlY2sgaWYgY2lmIHJlc29sdXRpb24KKwlpZiAoZmgtPndpZHRoID09IDMyMCB8fCBmaC0+d2lkdGggPT0gMzUyKSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwN10gPSAxOworCX0gZWxzZSB7CisJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW1NSQU1fQ0gwN10gPSAwOworCX0KKwlkZXYtPmNpZl93aWR0aFtTUkFNX0NIMDddID0gZmgtPndpZHRoOworCW1lZHVzYV9zZXRfcmVzb2x1dGlvbihkZXYsIGZoLT53aWR0aCwgU1JBTV9DSDA3KTsKKworCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAorCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCisJcmV0X3ZhbCA9IHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKworCXAtPnNlcXVlbmNlID0gZGV2LT52aWRxW1NSQU1fQ0gwN10uY291bnQ7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2ggPSAmZGV2LT5zcmFtX2NoYW5uZWxzW1NSQU1fQ0gwN107CisJdTMyIHRtcCA9IDA7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisKKwl0bXAgPSBjeF9yZWFkKHNyYW1fY2gtPmRtYV9jdGwpOworCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIGlucHV0IDcgaXMgJXNcbiIsCisJICAgICAgICh0bXAgJiAweDExKSA/ICJzdHJlYW1pbmciIDogInN0b3BwZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY3gyNTgyMV9zZXRfY29udHJvbChkZXYsIGN0bCwgU1JBTV9DSDA3KTsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTcgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS12aWRlbyIsCisJLmZvcHMgPSAmdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKKwkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW9pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzEyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYwpAQCAtMCwwICsxLDQ5NiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBDb25leGFudCBDWDI1ODIxIFBDSWUgYnJpZGdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KKyAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+CisgKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLmgiCisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CisJICAgIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+dmlkcVtWSURFT19JT0NUTF9DSF07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbVklERU9fSU9DVExfQ0hdKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJZHByaW50aygyLAorCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOworCX0gZWxzZSB7CisJCXByZXYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCisJCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKKwkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOworCisJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKKwkJCWRwcmludGsoMiwKKwkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKKworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCQlidWYtPnZiLmkpOworCQl9CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCXUzMiBwaXhfZm9ybWF0OworCisJbG9ja19rZXJuZWwoKTsKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjU4MjFfZGV2LCBkZXZsaXN0KTsKKworCQlpZiAoaC0+aW9jdGxfZGV2ICYmIGgtPmlvY3RsX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSBWSURFT19JT0NUTF9DSDsKKwlwaXhfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MocGl4X2Zvcm1hdCk7CisKKwl2NGwyX3ByaW9fb3BlbigmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmgtPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsCisJCQkgICAgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAorCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciksIGZoKTsKKworCWRwcmludGsoMSwgInBvc3QgdmlkZW9idWZfcXVldWVfaW5pdCgpXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChmaC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LCBSRVNPVVJDRV9WSURFT19JT0NUTCkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFT19JT0NUTCkpIHsKKwkJLyogc3RyZWFtaW5nIGNhcHR1cmUgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJmZoLT52aWRxLnN0cmVhbSkpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwkJYnVmID0gbGlzdF9lbnRyeShmaC0+dmlkcS5zdHJlYW0ubmV4dCwKKwkJCQkgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKilmaC0+dmlkcS5yZWFkX2J1ZjsKKwkJaWYgKE5VTEwgPT0gYnVmKQorCQkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0RPTkUgfHwgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFT19JT0NUTCkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPX0lPQ1RMKTsKKwl9CisKKwlpZiAoZmgtPnZpZHEucmVhZF9idWYpIHsKKwkJYnVmZmVyX3JlbGVhc2UoJmZoLT52aWRxLCBmaC0+dmlkcS5yZWFkX2J1Zik7CisJCWtmcmVlKGZoLT52aWRxLnJlYWRfYnVmKTsKKwl9CisKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKKworCXY0bDJfcHJpb19jbG9zZSgmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHVubGlrZWx5KGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGkgIT0gZmgtPnR5cGUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSghcmVzX2dldChkZXYsIGZoLCBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPX0lPQ1RMKSkpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBlcnIsIHJlczsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU9fSU9DVEwpOworCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXNfZnJlZShkZXYsIGZoLCByZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJaW50IGVycjsKKworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKKworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKwlmaC0+Zm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlmaC0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCWZoLT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLCBmaC0+d2lkdGgsCisJCWZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBsb25nIHZpZGVvX2lvY3RsX3NldChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBkb3duc3RyZWFtX3VzZXJfc3RydWN0ICpkYXRhX2Zyb21fdXNlcjsKKwlpbnQgY29tbWFuZDsKKwlpbnQgd2lkdGggPSA3MjA7CisJaW50IHNlbGVjdGVkX2NoYW5uZWwgPSAwLCBwaXhfZm9ybWF0ID0gMCwgaSA9IDA7CisJaW50IGNpZl9lbmFibGUgPSAwLCBjaWZfd2lkdGggPSAwOworCXUzMiB2YWx1ZSA9IDA7CisKKwlkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgZG93bnN0cmVhbV91c2VyX3N0cnVjdCAqKWFyZzsKKworCWlmICghZGF0YV9mcm9tX3VzZXIpIHsKKwkJcHJpbnRrKCJjeDI1ODIxIGluICVzKCk6IFVzZXIgZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmcuXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKwlpZiAoY29tbWFuZCAhPSBTRVRfVklERU9fU1REICYmIGNvbW1hbmQgIT0gU0VUX1BJWEVMX0ZPUk1BVAorCSAgICAmJiBjb21tYW5kICE9IEVOQUJMRV9DSUZfUkVTT0xVVElPTiAmJiBjb21tYW5kICE9IFJFR19SRUFECisJICAgICYmIGNvbW1hbmQgIT0gUkVHX1dSSVRFICYmIGNvbW1hbmQgIT0gTUVEVVNBX1JFQUQKKwkgICAgJiYgY29tbWFuZCAhPSBNRURVU0FfV1JJVEUpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBTRVRfVklERU9fU1REOgorCQlkZXYtPnR2bm9ybSA9CisJCSAgICAhc3RyY21wKGRhdGFfZnJvbV91c2VyLT52aWRfc3RkbmFtZSwKKwkJCSAgICAiUEFMIikgPyBWNEwyX1NURF9QQUxfQkcgOiBWNEwyX1NURF9OVFNDX007CisJCW1lZHVzYV9zZXRfdmlkZW9zdGFuZGFyZChkZXYpOworCQlicmVhazsKKworCWNhc2UgU0VUX1BJWEVMX0ZPUk1BVDoKKwkJc2VsZWN0ZWRfY2hhbm5lbCA9IGRhdGFfZnJvbV91c2VyLT5kZWNvZGVyX3NlbGVjdDsKKwkJcGl4X2Zvcm1hdCA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7CisKKwkJaWYgKCEoc2VsZWN0ZWRfY2hhbm5lbCA8PSA3ICYmIHNlbGVjdGVkX2NoYW5uZWwgPj0gMCkpIHsKKwkJCXNlbGVjdGVkX2NoYW5uZWwgLT0gNDsKKwkJCXNlbGVjdGVkX2NoYW5uZWwgPSBzZWxlY3RlZF9jaGFubmVsICUgODsKKwkJfQorCisJCWlmIChzZWxlY3RlZF9jaGFubmVsID49IDApCisJCQljeDI1ODIxX3NldF9waXhlbF9mb3JtYXQoZGV2LCBzZWxlY3RlZF9jaGFubmVsLAorCQkJCQkJIHBpeF9mb3JtYXQpOworCisJCWJyZWFrOworCisJY2FzZSBFTkFCTEVfQ0lGX1JFU09MVVRJT046CisJCXNlbGVjdGVkX2NoYW5uZWwgPSBkYXRhX2Zyb21fdXNlci0+ZGVjb2Rlcl9zZWxlY3Q7CisJCWNpZl9lbmFibGUgPSBkYXRhX2Zyb21fdXNlci0+Y2lmX3Jlc29sdXRpb25fZW5hYmxlOworCQljaWZfd2lkdGggPSBkYXRhX2Zyb21fdXNlci0+Y2lmX3dpZHRoOworCisJCWlmIChjaWZfZW5hYmxlKSB7CisJCQlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcKKwkJCSAgICB8fCBkZXYtPnR2bm9ybSAmIFY0TDJfU1REX1BBTF9ESykKKwkJCQl3aWR0aCA9IDM1MjsKKwkJCWVsc2UKKwkJCQl3aWR0aCA9IChjaWZfd2lkdGggPT0gMzIwCisJCQkJCSB8fCBjaWZfd2lkdGggPT0gMzUyKSA/IGNpZl93aWR0aCA6IDMyMDsKKwkJfQorCisJCWlmICghKHNlbGVjdGVkX2NoYW5uZWwgPD0gNyAmJiBzZWxlY3RlZF9jaGFubmVsID49IDApKSB7CisJCQlzZWxlY3RlZF9jaGFubmVsIC09IDQ7CisJCQlzZWxlY3RlZF9jaGFubmVsID0gc2VsZWN0ZWRfY2hhbm5lbCAlIDg7CisJCX0KKworCQlpZiAoc2VsZWN0ZWRfY2hhbm5lbCA8PSA3ICYmIHNlbGVjdGVkX2NoYW5uZWwgPj0gMCkgeworCQkJZGV2LT51c2VfY2lmX3Jlc29sdXRpb25bc2VsZWN0ZWRfY2hhbm5lbF0gPSBjaWZfZW5hYmxlOworCQkJZGV2LT5jaWZfd2lkdGhbc2VsZWN0ZWRfY2hhbm5lbF0gPSB3aWR0aDsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBWSURfQ0hBTk5FTF9OVU07IGkrKykgeworCQkJCWRldi0+dXNlX2NpZl9yZXNvbHV0aW9uW2ldID0gY2lmX2VuYWJsZTsKKwkJCQlkZXYtPmNpZl93aWR0aFtpXSA9IHdpZHRoOworCQkJfQorCQl9CisKKwkJbWVkdXNhX3NldF9yZXNvbHV0aW9uKGRldiwgd2lkdGgsIHNlbGVjdGVkX2NoYW5uZWwpOworCQlicmVhazsKKwljYXNlIFJFR19SRUFEOgorCQlkYXRhX2Zyb21fdXNlci0+cmVnX2RhdGEgPSBjeF9yZWFkKGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcyk7CisJCWJyZWFrOworCWNhc2UgUkVHX1dSSVRFOgorCQljeF93cml0ZShkYXRhX2Zyb21fdXNlci0+cmVnX2FkZHJlc3MsIGRhdGFfZnJvbV91c2VyLT5yZWdfZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTUVEVVNBX1JFQUQ6CisJCXZhbHVlID0KKwkJICAgIGN4MjU4MjFfaTJjX3JlYWQoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICAgICh1MTYpIGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcywKKwkJCQkgICAgICZkYXRhX2Zyb21fdXNlci0+cmVnX2RhdGEpOworCQlicmVhazsKKwljYXNlIE1FRFVTQV9XUklURToKKwkJY3gyNTgyMV9pMmNfd3JpdGUoJmRldi0+aTJjX2J1c1swXSwKKwkJCQkgICh1MTYpIGRhdGFfZnJvbV91c2VyLT5yZWdfYWRkcmVzcywKKwkJCQkgIGRhdGFfZnJvbV91c2VyLT5yZWdfZGF0YSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJY2hhciBuYW1lWzMyICsgMl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKKwljeDI1ODIxX2NhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGV4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bF9zZXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2Nfc19zdGQgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCA9IHZpZGlvY19xdWVyeXN0ZCwKKyNlbmRpZgorCS52aWRpb2NfY3JvcGNhcCA9IHZpZGlvY19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wID0gdmlkaW9jX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCisJLnZpZGlvY19nX3ByaW9yaXR5ID0gdmlkaW9jX2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5ID0gdmlkaW9jX3NfcHJpb3JpdHksCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmID0gdmlkaW9jZ21idWYsCisjZW5kaWYKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9pb2N0bF90ZW1wbGF0ZSA9IHsKKwkubmFtZSA9ICJjeDI1ODIxLXZpZGVvaW9jdGwiLAorCS5mb3BzID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWR1cHMxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWR1cHMxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjYzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczEwLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQorCSAgICBjb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSA9ICZkZXYtPnZpZHFbU1JBTV9DSDEwXTsKKworCS8qIGFkZCBqdW1wIHRvIHN0b3BwZXIgKi8KKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19JUlExIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIocS0+c3RvcHBlci5kbWEpOworCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLworCisJZHByaW50aygyLCAiam1wIHRvIHN0b3BwZXIgKDB4JXgpXG4iLCBidWYtPnJpc2Muam1wWzFdKTsKKworCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+cXVldWVkKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gcXVldWVkXG4iLCBidWYsCisJCQlidWYtPnZiLmkpOworCisJfSBlbHNlIGlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwKKwkJCQkJJmRldi0+c3JhbV9jaGFubmVsc1tTUkFNX0NIMTBdKTsKKwkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKKwkJZHByaW50aygyLAorCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlLCBidWYgY250ID0gJWQsIHEtPmNvdW50ID0gJWRcbiIsCisJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOworCX0gZWxzZSB7CisJCXByZXYgPQorCQkgICAgbGlzdF9lbnRyeShxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCisJCSAgICAmJiBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQKKwkJICAgICYmIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7CisJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOworCisJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKKwkJCWRwcmludGsoMiwKKwkJCQkiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBhcHBlbmQgdG8gYWN0aXZlLCBidWYtPmNvdW50PSVkXG4iLAorCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKKworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKKwkJCQlidWYtPnZiLmkpOworCQl9CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwkJZHByaW50aygyLCAiYWN0aXZlIHF1ZXVlIGVtcHR5IVxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCisJbG9ja19rZXJuZWwoKTsKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjU4MjFfZGV2LCBkZXZsaXN0KTsKKworCQlpZiAoaC0+dmlkZW9fZGV2W1NSQU1fQ0gxMF0KKwkJICAgICYmIGgtPnZpZGVvX2RldltTUkFNX0NIMTBdLT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKwl9CisKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoIm9wZW4gbWlub3I9JWQgdHlwZT0lc1xuIiwgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisKKwkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+ZGV2ID0gZGV2OworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+d2lkdGggPSA3MjA7CisKKwlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfQkcgfHwgZGV2LT50dm5vcm0gJiBWNEwyX1NURF9QQUxfREspCisJCWZoLT5oZWlnaHQgPSA1NzY7CisJZWxzZQorCQlmaC0+aGVpZ2h0ID0gNDgwOworCisJZGV2LT5jaGFubmVsX29wZW5lZCA9IDk7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoVjRMMl9QSVhfRk1UX1lVWVYpOworCisJdjRsMl9wcmlvX29wZW4oJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZoLT52aWRxLCAmY3gyNTgyMV92aWRlb19xb3BzLAorCQkJICAgICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKKwkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3gyNTgyMV9idWZmZXIpLCBmaCk7CisKKwlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZmgtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKHJlc19sb2NrZWQoZmgtPmRldiwgUkVTT1VSQ0VfVklERU8xMCkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzEwKSkgeworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52aWRxLnN0cmVhbS5uZXh0LAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiLnN0cmVhbSk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCgpIGNhcHR1cmUgKi8KKwkJYnVmID0gKHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqKWZoLT52aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlwb2xsX3dhaXQoZmlsZSwgJmJ1Zi0+dmIuZG9uZSwgd2FpdCk7CisJaWYgKGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRE9ORSB8fCBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvL3N0b3AgdGhlIHJpc2MgZW5naW5lIGFuZCBmaWZvCisJLy9jeF93cml0ZShjaGFubmVsMTAtPmRtYV9jdGwsIDApOworCisJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfVklERU8xMCkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPMTApOworCX0KKworCWlmIChmaC0+dmlkcS5yZWFkX2J1ZikgeworCQlidWZmZXJfcmVsZWFzZSgmZmgtPnZpZHEsIGZoLT52aWRxLnJlYWRfYnVmKTsKKwkJa2ZyZWUoZmgtPnZpZHEucmVhZF9idWYpOworCX0KKworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCisJdjRsMl9wcmlvX2Nsb3NlKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtmcmVlKGZoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodW5saWtlbHkoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldiwgZmgsIGdldF9yZXNvdXJjZShmaCwgUkVTT1VSQ0VfVklERU8xMCkpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgZXJyLCByZXM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfcmVzb3VyY2UoZmgsIFJFU09VUkNFX1ZJREVPMTApOworCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXNfZnJlZShkZXYsIGZoLCByZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB2aWRlb19pb2N0bF91cHN0cmVhbTEwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGNvbW1hbmQgPSAwOworCXN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqZGF0YV9mcm9tX3VzZXI7CisKKwlkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7CisKKwlpZiAoIWRhdGFfZnJvbV91c2VyKSB7CisJCXByaW50aworCQkgICAgKCJjeDI1ODIxIGluICVzKCk6IFVwc3RyZWFtIGRhdGEgaXMgSU5WQUxJRC4gUmV0dXJuaW5nLlxuIiwKKwkJICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKKworCWlmIChjb21tYW5kICE9IFVQU1RSRUFNX1NUQVJUX1ZJREVPICYmIGNvbW1hbmQgIT0gVVBTVFJFQU1fU1RPUF9WSURFTykgeworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXYtPmlucHV0X2ZpbGVuYW1lX2NoMiA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKKwlkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7CisJZGV2LT52aWRfc3RkbmFtZV9jaDIgPSBkYXRhX2Zyb21fdXNlci0+dmlkX3N0ZG5hbWU7CisJZGV2LT5waXhlbF9mb3JtYXRfY2gyID0gZGF0YV9mcm9tX3VzZXItPnBpeGVsX2Zvcm1hdDsKKwlkZXYtPmNoYW5uZWxfc2VsZWN0X2NoMiA9IGRhdGFfZnJvbV91c2VyLT5jaGFubmVsX3NlbGVjdDsKKwlkZXYtPmNvbW1hbmRfY2gyID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKwljYXNlIFVQU1RSRUFNX1NUQVJUX1ZJREVPOgorCQljeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX3ZpZGVvX2NoMihkZXYsIGRhdGFfZnJvbV91c2VyKTsKKwkJYnJlYWs7CisKKwljYXNlIFVQU1RSRUFNX1NUT1BfVklERU86CisJCWN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDIoZGV2KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIGYpOworCisJaWYgKDAgIT0gZXJyKQorCQlyZXR1cm4gZXJyOworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWZoLT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CisJZmgtPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCWZoLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwlkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWN4MjU4MjFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWNoYXIgbmFtZVszMiArIDJdOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSAoKHN0cnVjdCBjeDI1ODIxX2ZoICopcHJpdiktPmRldjsKKwlpbnQgZXJyOworCisJaWYgKGZoKSB7CisJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOworCQlpZiAoMCAhPSBlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvL2V4cG9ydGVkIHN0dWZmCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2aWRlb19vcGVuLAorCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKKwkucmVhZCA9IHZpZGVvX3JlYWQsCisJLnBvbGwgPSB2aWRlb19wb2xsLAorCS5tbWFwID0gdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bF91cHN0cmVhbTEwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19yZXFidWZzID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmID0gdmlkaW9jX2RxYnVmLAorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX3Nfc3RkID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgPSB2aWRpb2NfcXVlcnlzdGQsCisjZW5kaWYKKwkudmlkaW9jX2Nyb3BjYXAgPSB2aWRpb2NfY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCA9IHZpZGlvY19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgPSB2aWRpb2NfZ19jcm9wLAorCS52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfZ19wcmlvcml0eSA9IHZpZGlvY19nX3ByaW9yaXR5LAorCS52aWRpb2Nfc19wcmlvcml0eSA9IHZpZGlvY19zX3ByaW9yaXR5LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCisjaWZkZWYgVFVORVJfRkxBRworCS52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMTAgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS11cHN0cmVhbTEwIiwKKwkuZm9wcyA9ICZ2aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAorCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWR1cHM5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjOGMxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jCkBAIC0wLDAgKzEsNDMzIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjU4MjEgUENJZSBicmlkZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvbmV4YW50IFN5c3RlbXMgSW5jLgorICogIEF1dGhvcnMgIDxzaHUubGluQGNvbmV4YW50LmNvbT4sIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4KKyAqICBCYXNlZCBvbiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+IGN4MjM4ODUgZHJpdmVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkgICAgY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKnByZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT52aWRxW1NSQU1fQ0gwOV07CisKKwkvKiBhZGQganVtcCB0byBzdG9wcGVyICovCisJYnVmLT5yaXNjLmptcFswXSA9IGNwdV90b19sZTMyKFJJU0NfSlVNUCB8IFJJU0NfSVJRMSB8IFJJU0NfQ05UX0lOQyk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKHEtPnN0b3BwZXIuZG1hKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KKworCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAorCQkJYnVmLT52Yi5pKTsKKworCX0gZWxzZSBpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKKwkJY3gyNTgyMV9zdGFydF92aWRlb19kbWEoZGV2LCBxLCBidWYsCisJCQkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbU1JBTV9DSDA5XSk7CisJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CisJCWRwcmludGsoMiwKKwkJCSJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGZpcnN0IGFjdGl2ZSwgYnVmIGNudCA9ICVkLCBxLT5jb3VudCA9ICVkXG4iLAorCQkJYnVmLCBidWYtPnZiLmksIGJ1Zi0+Y291bnQsIHEtPmNvdW50KTsKKwl9IGVsc2UgeworCQlwcmV2ID0KKwkJICAgIGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAocHJldi0+dmIud2lkdGggPT0gYnVmLT52Yi53aWR0aAorCQkgICAgJiYgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0CisJCSAgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOworCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKKworCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQlkcHJpbnRrKDIsCisJCQkJIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIGFjdGl2ZSwgYnVmLT5jb3VudD0lZFxuIiwKKwkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwkJCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgcXVldWVkXG4iLCBidWYsCisJCQkJYnVmLT52Yi5pKTsKKwkJfQorCX0KKworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKworCWxvY2tfa2VybmVsKCk7CisJbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7CisKKwkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDldCisJCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA5XS0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisJfQorCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCisJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmRldiA9IGRldjsKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPndpZHRoID0gNzIwOworCisJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0JHIHx8IGRldi0+dHZub3JtICYgVjRMMl9TVERfUEFMX0RLKQorCQlmaC0+aGVpZ2h0ID0gNTc2OworCWVsc2UKKwkJZmgtPmhlaWdodCA9IDQ4MDsKKworCWRldi0+Y2hhbm5lbF9vcGVuZWQgPSA4OworCWZoLT5mbXQgPSBmb3JtYXRfYnlfZm91cmNjKFY0TDJfUElYX0ZNVF9ZVVlWKTsKKworCXY0bDJfcHJpb19vcGVuKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmlkcSwgJmN4MjU4MjFfdmlkZW9fcW9wcywKKwkJCSAgICAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCisJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwgZmgpOworCisJZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgbG9mZl90ICogcHBvcykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGZoLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsIFJFU09VUkNFX1ZJREVPOSkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQkgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CisKKwlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9WSURFTzkpKSB7CisJCS8qIHN0cmVhbWluZyBjYXB0dXJlICovCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcS5zdHJlYW0pKQorCQkJcmV0dXJuIFBPTExFUlI7CisJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPnZpZHEuc3RyZWFtLm5leHQsCisJCQkJIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIuc3RyZWFtKTsKKwl9IGVsc2UgeworCQkvKiByZWFkKCkgY2FwdHVyZSAqLworCQlidWYgPSAoc3RydWN0IGN4MjU4MjFfYnVmZmVyICopZmgtPnZpZHEucmVhZF9idWY7CisJCWlmIChOVUxMID09IGJ1ZikKKwkJCXJldHVybiBQT0xMRVJSOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmYnVmLT52Yi5kb25lLCB3YWl0KTsKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IGJ1Zi0+dmIuc3RhdGUgPT0gVklERU9CVUZfRVJST1IpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8vc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8KKwkvL2N4X3dyaXRlKGNoYW5uZWw5LT5kbWFfY3RsLCAwKTsKKworCS8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLworCWlmIChyZXNfY2hlY2soZmgsIFJFU09VUkNFX1ZJREVPOSkpIHsKKwkJdmlkZW9idWZfcXVldWVfY2FuY2VsKCZmaC0+dmlkcSk7CisJCXJlc19mcmVlKGRldiwgZmgsIFJFU09VUkNFX1ZJREVPOSk7CisJfQorCisJaWYgKGZoLT52aWRxLnJlYWRfYnVmKSB7CisJCWJ1ZmZlcl9yZWxlYXNlKCZmaC0+dmlkcSwgZmgtPnZpZHEucmVhZF9idWYpOworCQlrZnJlZShmaC0+dmlkcS5yZWFkX2J1Zik7CisJfQorCisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmlkcSk7CisKKwl2NGwyX3ByaW9fY2xvc2UoJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShpICE9IGZoLT50eXBlKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkoIXJlc19nZXQoZGV2LCBmaCwgZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzkpKSkpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oZ2V0X3F1ZXVlKGZoKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGVyciwgcmVzOworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGkgIT0gZmgtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gZ2V0X3Jlc291cmNlKGZoLCBSRVNPVVJDRV9WSURFTzkpOworCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihnZXRfcXVldWUoZmgpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXNfZnJlZShkZXYsIGZoLCByZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB2aWRlb19pb2N0bF91cHN0cmVhbTkoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBjb21tYW5kID0gMDsKKwlzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKmRhdGFfZnJvbV91c2VyOworCisJZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICopYXJnOworCisJaWYgKCFkYXRhX2Zyb21fdXNlcikgeworCQlwcmludGsKKwkJICAgICgiY3gyNTgyMSBpbiAlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCisJCSAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CisKKwlpZiAoY29tbWFuZCAhPSBVUFNUUkVBTV9TVEFSVF9WSURFTyAmJiBjb21tYW5kICE9IFVQU1RSRUFNX1NUT1BfVklERU8pIHsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5pbnB1dF9maWxlbmFtZSA9IGRhdGFfZnJvbV91c2VyLT5pbnB1dF9maWxlbmFtZTsKKwlkZXYtPmlucHV0X2F1ZGlvZmlsZW5hbWUgPSBkYXRhX2Zyb21fdXNlci0+aW5wdXRfZmlsZW5hbWU7CisJZGV2LT52aWRfc3RkbmFtZSA9IGRhdGFfZnJvbV91c2VyLT52aWRfc3RkbmFtZTsKKwlkZXYtPnBpeGVsX2Zvcm1hdCA9IGRhdGFfZnJvbV91c2VyLT5waXhlbF9mb3JtYXQ7CisJZGV2LT5jaGFubmVsX3NlbGVjdCA9IGRhdGFfZnJvbV91c2VyLT5jaGFubmVsX3NlbGVjdDsKKwlkZXYtPmNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgVVBTVFJFQU1fU1RBUlRfVklERU86CisJCWN4MjU4MjFfc3RhcnRfdXBzdHJlYW1fdmlkZW9fY2gxKGRldiwgZGF0YV9mcm9tX3VzZXIpOworCQlicmVhazsKKworCWNhc2UgVVBTVFJFQU1fU1RPUF9WSURFTzoKKwkJY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX3ZpZGVvX2NoMShkZXYpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7CisKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisJZmgtPmZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwlmaC0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywgZmgtPndpZHRoLAorCQlmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OworCWNoYXIgbmFtZVszMiArIDJdOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gKChzdHJ1Y3QgY3gyNTgyMV9maCAqKXByaXYpLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKKwlpbnQgZXJyOworCWlmIChmaCkgeworCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYgKDAgIT0gZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gZXhwb3J0ZWQgc3R1ZmYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSB2aWRlb19yZWxlYXNlLAorCS5yZWFkID0gdmlkZW9fcmVhZCwKKwkucG9sbCA9IHZpZGVvX3BvbGwsCisJLm1tYXAgPSB2aWRlb19tbWFwLAorCS5pb2N0bCA9IHZpZGVvX2lvY3RsX3Vwc3RyZWFtOSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKyNpZmRlZiBUVU5FUl9GTEFHCisJLnZpZGlvY19zX3N0ZCA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkID0gdmlkaW9jX3F1ZXJ5c3RkLAorI2VuZGlmCisJLnZpZGlvY19jcm9wY2FwID0gdmlkaW9jX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgPSB2aWRpb2Nfc19jcm9wLAorCS52aWRpb2NfZ19jcm9wID0gdmlkaW9jX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2xvZ19zdGF0dXMgPSB2aWRpb2NfbG9nX3N0YXR1cywKKwkudmlkaW9jX2dfcHJpb3JpdHkgPSB2aWRpb2NfZ19wcmlvcml0eSwKKwkudmlkaW9jX3NfcHJpb3JpdHkgPSB2aWRpb2Nfc19wcmlvcml0eSwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorI2lmZGVmIFRVTkVSX0ZMQUcKKwkudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTkgPSB7CisJLm5hbWUgPSAiY3gyNTgyMS11cHN0cmVhbTkiLAorCS5mb3BzID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAorCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjI4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLmgKQEAgLTAsMCArMSw2MDIgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTgyMSBQQ0llIGJyaWRnZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQ29uZXhhbnQgU3lzdGVtcyBJbmMuCisgKiAgQXV0aG9ycyAgPHNodS5saW5AY29uZXhhbnQuY29tPiwgPGhpZXAuaHV5bmhAY29uZXhhbnQuY29tPgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyMzg4NSBkcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIENYMjU4MjFfSF8KKyNkZWZpbmUgQ1gyNTgyMV9IXworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWR2Yi5oPgorCisjaW5jbHVkZSAiYnRjeC1yaXNjLmgiCisjaW5jbHVkZSAiY3gyNTgyMS1yZWcuaCIKKyNpbmNsdWRlICJjeDI1ODIxLW1lZHVzYS1yZWcuaCIKKyNpbmNsdWRlICJjeDI1ODIxLXNyYW0uaCIKKyNpbmNsdWRlICJjeDI1ODIxLWF1ZGlvLmgiCisjaW5jbHVkZSAibWVkaWEvY3gyMzQxeC5oIgorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNkZWZpbmUgQ1gyNTgyMV9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMTA2KQorCisjZGVmaW5lIFVOU0VUICgtMVUpCisjZGVmaW5lIE5PX1NZTkNfTElORSAoLTFVKQorCisjZGVmaW5lIENYMjU4MjFfTUFYQk9BUkRTIDIKKworI2RlZmluZSBUUlVFICAgIDEKKyNkZWZpbmUgRkFMU0UgICAwCisjZGVmaW5lIExJTkVfU0laRV9EMSAgICAxNDQwCisKKy8vIE51bWJlciBvZiBkZWNvZGVycyBhbmQgZW5jb2RlcnMKKyNkZWZpbmUgTUFYX0RFQ09ERVJTICAgICAgICAgICAgOAorI2RlZmluZSBNQVhfRU5DT0RFUlMgICAgICAgICAgICAyCisjZGVmaW5lIFFVQURfREVDT0RFUlMgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX0NBTUVSQVMgICAgICAgICAgICAgMTYKKworLyogTWF4IG51bWJlciBvZiBpbnB1dHMgYnkgY2FyZCAqLworI2RlZmluZSBNQVhfQ1gyNTgyMV9JTlBVVCA4CisjZGVmaW5lIElOUFVUKG5yKSAoJmN4MjU4MjFfYm9hcmRzW2Rldi0+Ym9hcmRdLmlucHV0W25yXSkKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU8wICAgICAgIDEKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU8xICAgICAgIDIKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU8yICAgICAgIDQKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU8zICAgICAgIDgKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU80ICAgICAgIDE2CisjZGVmaW5lIFJFU09VUkNFX1ZJREVPNSAgICAgICAzMgorI2RlZmluZSBSRVNPVVJDRV9WSURFTzYgICAgICAgNjQKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU83ICAgICAgIDEyOAorI2RlZmluZSBSRVNPVVJDRV9WSURFTzggICAgICAgMjU2CisjZGVmaW5lIFJFU09VUkNFX1ZJREVPOSAgICAgICA1MTIKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU8xMCAgICAgIDEwMjQKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU8xMSAgICAgIDIwNDgKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU9fSU9DVEwgIDQwOTYKKworI2RlZmluZSBCVUZGRVJfVElNRU9VVCAgICAgKEhaKQkvKiAwLjUgc2Vjb25kcyAqLworCisjZGVmaW5lIFVOS05PV05fQk9BUkQgICAgICAgMAorI2RlZmluZSBDWDI1ODIxX0JPQVJEICAgICAgICAxCisKKy8qIEN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworI2RlZmluZSBDWDI1ODIxX05PUk1TIChcCisgICAgVjRMMl9TVERfTlRTQ19NIHwgIFY0TDJfU1REX05UU0NfTV9KUCB8IFY0TDJfU1REX05UU0NfTV9LUiB8IFwKKyAgICBWNEwyX1NURF9QQUxfQkcgfCAgVjRMMl9TVERfUEFMX0RLICAgIHwgIFY0TDJfU1REX1BBTF9JICAgIHwgXAorICAgIFY0TDJfU1REX1BBTF9NICB8ICBWNEwyX1NURF9QQUxfTiAgICAgfCAgVjRMMl9TVERfUEFMX0ggICAgfCBcCisgICAgVjRMMl9TVERfUEFMX05jICkKKworI2RlZmluZSBDWDI1ODIxX0JPQVJEX0NPTkVYQU5UX0FUSEVOQTEwIDEKKyNkZWZpbmUgTUFYX1ZJRF9DSEFOTkVMX05VTSAgICAgMTIKKyNkZWZpbmUgVklEX0NIQU5ORUxfTlVNIDgKKworc3RydWN0IGN4MjU4MjFfZm10IHsKKwljaGFyICpuYW1lOworCXUzMiBmb3VyY2M7CQkvKiB2NGwyIGZvcm1hdCBpZCAqLworCWludCBkZXB0aDsKKwlpbnQgZmxhZ3M7CisJdTMyIGN4Zm9ybWF0OworfTsKKworc3RydWN0IGN4MjU4MjFfY3RybCB7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHY7CisJdTMyIG9mZjsKKwl1MzIgcmVnOworCXUzMiBtYXNrOworCXUzMiBzaGlmdDsKK307CisKK3N0cnVjdCBjeDI1ODIxX3R2bm9ybSB7CisJY2hhciAqbmFtZTsKKwl2NGwyX3N0ZF9pZCBpZDsKKwl1MzIgY3hpZm9ybWF0OworCXUzMiBjeG9mb3JtYXQ7Cit9OworCitzdHJ1Y3QgY3gyNTgyMV9maCB7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXY7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisJaW50IHJhZGlvOworCXUzMiByZXNvdXJjZXM7CisKKwllbnVtIHY0bDJfcHJpb3JpdHkgcHJpbzsKKworCS8qIHZpZGVvIG92ZXJsYXkgKi8KKwlzdHJ1Y3QgdjRsMl93aW5kb3cgd2luOworCXN0cnVjdCB2NGwyX2NsaXAgKmNsaXBzOworCXVuc2lnbmVkIGludCBuY2xpcHM7CisKKwkvKiB2aWRlbyBjYXB0dXJlICovCisJc3RydWN0IGN4MjU4MjFfZm10ICpmbXQ7CisJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7CisKKwkvKiB2YmkgY2FwdHVyZSAqLworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSB2aWRxOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSB2YmlxOworCisJLyogSDI2NCBFbmNvZGVyIHNwZWNpZmljcyBPTkxZICovCisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlIG1wZWdxOworCWF0b21pY190IHY0bF9yZWFkaW5nOworfTsKKworZW51bSBjeDI1ODIxX2l0eXBlIHsKKwlDWDI1ODIxX1ZNVVhfQ09NUE9TSVRFID0gMSwKKwlDWDI1ODIxX1ZNVVhfU1ZJREVPLAorCUNYMjU4MjFfVk1VWF9ERUJVRywKKwlDWDI1ODIxX1JBRElPLAorfTsKKworZW51bSBjeDI1ODIxX3NyY19zZWxfdHlwZSB7CisJQ1gyNTgyMV9TUkNfU0VMX0VYVF82NTZfVklERU8gPSAwLAorCUNYMjU4MjFfU1JDX1NFTF9QQVJBTExFTF9NUEVHX1ZJREVPCit9OworCisvKiBidWZmZXIgZm9yIG9uZSB2aWRlbyBmcmFtZSAqLworc3RydWN0IGN4MjU4MjFfYnVmZmVyIHsKKwkvKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciB2YjsKKworCS8qIGN4MjU4MjEgc3BlY2lmaWMgKi8KKwl1bnNpZ25lZCBpbnQgYnBsOworCXN0cnVjdCBidGN4X3Jpc2NtZW0gcmlzYzsKKwlzdHJ1Y3QgY3gyNTgyMV9mbXQgKmZtdDsKKwl1MzIgY291bnQ7Cit9OworCitzdHJ1Y3QgY3gyNTgyMV9pbnB1dCB7CisJZW51bSBjeDI1ODIxX2l0eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHZtdXg7CisJdTMyIGdwaW8wLCBncGlvMSwgZ3BpbzIsIGdwaW8zOworfTsKKwordHlwZWRlZiBlbnVtIHsKKwlDWDI1ODIxX1VOREVGSU5FRCA9IDAsCisJQ1gyNTgyMV9SQVcsCisJQ1gyNTgyMV8yNjQKK30gcG9ydF90OworCitzdHJ1Y3QgY3gyNTgyMV9ib2FyZCB7CisJY2hhciAqbmFtZTsKKwlwb3J0X3QgcG9ydGEsIHBvcnRiLCBwb3J0YzsKKwl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKKwl1bnNpZ25lZCBpbnQgcmFkaW9fdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHR1bmVyX2FkZHI7CisJdW5zaWduZWQgY2hhciByYWRpb19hZGRyOworCisJdTMyIGNsa19mcmVxOworCXN0cnVjdCBjeDI1ODIxX2lucHV0IGlucHV0WzJdOworfTsKKworc3RydWN0IGN4MjU4MjFfc3ViaWQgeworCXUxNiBzdWJ2ZW5kb3I7CisJdTE2IHN1YmRldmljZTsKKwl1MzIgY2FyZDsKK307CisKK3N0cnVjdCBjeDI1ODIxX2kyYyB7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXY7CisKKwlpbnQgbnI7CisKKwkvKiBpMmMgaS9vICovCisJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOworCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYWxnbzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50OworCXUzMiBpMmNfcmM7CisKKwkvKiBjeDI1ODIxIHJlZ2lzdGVycyB1c2VkIGZvciByYXcgYWRkZXNzICovCisJdTMyIGkyY19wZXJpb2Q7CisJdTMyIHJlZ19jdHJsOworCXUzMiByZWdfc3RhdDsKKwl1MzIgcmVnX2FkZHI7CisJdTMyIHJlZ19yZGF0YTsKKwl1MzIgcmVnX3dkYXRhOworfTsKKworc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgeworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVkOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVvdXQ7CisJc3RydWN0IGJ0Y3hfcmlzY21lbSBzdG9wcGVyOworCXUzMiBjb3VudDsKK307CisKK3N0cnVjdCBjeDI1ODIxX2RhdGEgeworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OworCXN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWw7Cit9OworCitzdHJ1Y3QgY3gyNTgyMV9kZXYgeworCXN0cnVjdCBsaXN0X2hlYWQgZGV2bGlzdDsKKwlhdG9taWNfdCByZWZjb3VudDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisKKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisKKwkvKiBwY2kgc3R1ZmYgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCXVuc2lnbmVkIGNoYXIgcGNpX3JldiwgcGNpX2xhdDsKKwlpbnQgcGNpX2J1cywgcGNpX3Nsb3Q7CisJdTMyIGJhc2VfaW9fYWRkcjsKKwl1MzIgX19pb21lbSAqbG1taW87CisJdTggX19pb21lbSAqYm1taW87CisJaW50IHBjaV9pcnFtYXNrOworCWludCBod3JldmlzaW9uOworCisJdTMyIGNsa19mcmVxOworCisJLyogSTJDIGFkYXB0ZXJzOiBNYXN0ZXIgMSAmIDIgKEV4dGVybmFsKSAmIE1hc3RlciAzIChJbnRlcm5hbCBvbmx5KSAqLworCXN0cnVjdCBjeDI1ODIxX2kyYyBpMmNfYnVzWzNdOworCisJaW50IG5yOworCXN0cnVjdCBtdXRleCBsb2NrOworCisJLyogYm9hcmQgZGV0YWlscyAqLworCXVuc2lnbmVkIGludCBib2FyZDsKKwljaGFyIG5hbWVbMzJdOworCisJLyogc3JhbSBjb25maWd1cmF0aW9uICovCisJc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaGFubmVsczsKKworCS8qIEFuYWxvZyB2aWRlbyAqLworCXUzMiByZXNvdXJjZXM7CisJdW5zaWduZWQgaW50IGlucHV0OworCXUzMiB0dmF1ZGlvOworCXY0bDJfc3RkX2lkIHR2bm9ybTsKKwl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHR1bmVyX2FkZHI7CisJdW5zaWduZWQgaW50IHJhZGlvX3R5cGU7CisJdW5zaWduZWQgY2hhciByYWRpb19hZGRyOworCXVuc2lnbmVkIGludCBoYXNfcmFkaW87CisJdW5zaWduZWQgaW50IHZpZGVjX3R5cGU7CisJdW5zaWduZWQgY2hhciB2aWRlY19hZGRyOworCXVuc2lnbmVkIHNob3J0IF9tYXhfbnVtX2RlY29kZXJzOworCisJaW50IGN0bF9icmlnaHQ7CisJaW50IGN0bF9jb250cmFzdDsKKwlpbnQgY3RsX2h1ZTsKKwlpbnQgY3RsX3NhdHVyYXRpb247CisKKwlzdHJ1Y3QgY3gyNTgyMV9kYXRhIHRpbWVvdXRfZGF0YVtNQVhfVklEX0NIQU5ORUxfTlVNXTsKKworCS8qIEFuYWxvZyBBdWRpbyBVcHN0cmVhbSAqLworCWludCBfYXVkaW9faXNfcnVubmluZzsKKwlpbnQgX2F1ZGlvcGl4ZWxfZm9ybWF0OworCWludCBfaXNfZmlyc3RfYXVkaW9fZnJhbWU7CisJaW50IF9hdWRpb2ZpbGVfc3RhdHVzOworCWludCBfYXVkaW9fbGluZXNfY291bnQ7CisJaW50IF9hdWRpb2ZyYW1lX2NvdW50OworCWludCBfYXVkaW9fdXBzdHJlYW1fY2hhbm5lbF9zZWxlY3Q7CisJaW50IF9sYXN0X2luZGV4X2lycTsJLy9UaGUgbGFzdCBpbnRlcnJ1cHQgaW5kZXggcHJvY2Vzc2VkLgorCisJX19sZTMyICpfcmlzY19hdWRpb19qbXBfYWRkcjsKKwlfX2xlMzIgKl9yaXNjX3ZpcnRfc3RhcnRfYWRkcjsKKwlfX2xlMzIgKl9yaXNjX3ZpcnRfYWRkcjsKKwlkbWFfYWRkcl90IF9yaXNjX3BoeXNfYWRkcjsKKwlkbWFfYWRkcl90IF9yaXNjX3BoeXNfc3RhcnRfYWRkcjsKKworCXVuc2lnbmVkIGludCBfYXVkaW9yaXNjX3NpemU7CisJdW5zaWduZWQgaW50IF9hdWRpb2RhdGFfYnVmX3NpemU7CisJX19sZTMyICpfYXVkaW9kYXRhX2J1Zl92aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBfYXVkaW9kYXRhX2J1Zl9waHlzX2FkZHI7CisJY2hhciAqX2F1ZGlvZmlsZW5hbWU7CisKKwkvKiBWNGwgKi8KKwl1MzIgZnJlcTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZbTUFYX1ZJRF9DSEFOTkVMX05VTV07CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmJpX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpyYWRpb19kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqaW9jdGxfZGV2OworCisJc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgdmlkcVtNQVhfVklEX0NIQU5ORUxfTlVNXTsKKwlzcGlubG9ja190IHNsb2NrOworCisJLyogVmlkZW8gVXBzdHJlYW0gKi8KKwlpbnQgX2xpbmVfc2l6ZTsKKwlpbnQgX3Byb2dfY250OworCWludCBfcGl4ZWxfZm9ybWF0OworCWludCBfaXNfZmlyc3RfZnJhbWU7CisJaW50IF9pc19ydW5uaW5nOworCWludCBfZmlsZV9zdGF0dXM7CisJaW50IF9saW5lc19jb3VudDsKKwlpbnQgX2ZyYW1lX2NvdW50OworCWludCBfY2hhbm5lbF91cHN0cmVhbV9zZWxlY3Q7CisJdW5zaWduZWQgaW50IF9yaXNjX3NpemU7CisKKwlfX2xlMzIgKl9kbWFfdmlydF9zdGFydF9hZGRyOworCV9fbGUzMiAqX2RtYV92aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBfZG1hX3BoeXNfYWRkcjsKKwlkbWFfYWRkcl90IF9kbWFfcGh5c19zdGFydF9hZGRyOworCisJdW5zaWduZWQgaW50IF9kYXRhX2J1Zl9zaXplOworCV9fbGUzMiAqX2RhdGFfYnVmX3ZpcnRfYWRkcjsKKwlkbWFfYWRkcl90IF9kYXRhX2J1Zl9waHlzX2FkZHI7CisJY2hhciAqX2ZpbGVuYW1lOworCWNoYXIgKl9kZWZhdWx0bmFtZTsKKworCWludCBfbGluZV9zaXplX2NoMjsKKwlpbnQgX3Byb2dfY250X2NoMjsKKwlpbnQgX3BpeGVsX2Zvcm1hdF9jaDI7CisJaW50IF9pc19maXJzdF9mcmFtZV9jaDI7CisJaW50IF9pc19ydW5uaW5nX2NoMjsKKwlpbnQgX2ZpbGVfc3RhdHVzX2NoMjsKKwlpbnQgX2xpbmVzX2NvdW50X2NoMjsKKwlpbnQgX2ZyYW1lX2NvdW50X2NoMjsKKwlpbnQgX2NoYW5uZWwyX3Vwc3RyZWFtX3NlbGVjdDsKKwl1bnNpZ25lZCBpbnQgX3Jpc2Nfc2l6ZV9jaDI7CisKKwlfX2xlMzIgKl9kbWFfdmlydF9zdGFydF9hZGRyX2NoMjsKKwlfX2xlMzIgKl9kbWFfdmlydF9hZGRyX2NoMjsKKwlkbWFfYWRkcl90IF9kbWFfcGh5c19hZGRyX2NoMjsKKwlkbWFfYWRkcl90IF9kbWFfcGh5c19zdGFydF9hZGRyX2NoMjsKKworCXVuc2lnbmVkIGludCBfZGF0YV9idWZfc2l6ZV9jaDI7CisJX19sZTMyICpfZGF0YV9idWZfdmlydF9hZGRyX2NoMjsKKwlkbWFfYWRkcl90IF9kYXRhX2J1Zl9waHlzX2FkZHJfY2gyOworCWNoYXIgKl9maWxlbmFtZV9jaDI7CisJY2hhciAqX2RlZmF1bHRuYW1lX2NoMjsKKworCS8qIE1QRUcgRW5jb2RlciBPTkxZIHNldHRpbmdzICovCisJdTMyIGN4MjM0MTdfbWFpbGJveDsKKwlzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyBtcGVnX3BhcmFtczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2NGxfZGV2aWNlOworCWF0b21pY190IHY0bF9yZWFkZXJfY291bnQ7CisJc3RydWN0IGN4MjU4MjFfdHZub3JtIGVuY29kZXJub3JtOworCisJdTMyIHVwc3RyZWFtX3Jpc2NidWZfc2l6ZTsKKwl1MzIgdXBzdHJlYW1fZGF0YWJ1Zl9zaXplOworCXUzMiB1cHN0cmVhbV9yaXNjYnVmX3NpemVfY2gyOworCXUzMiB1cHN0cmVhbV9kYXRhYnVmX3NpemVfY2gyOworCXUzMiBhdWRpb191cHN0cmVhbV9yaXNjYnVmX3NpemU7CisJdTMyIGF1ZGlvX3Vwc3RyZWFtX2RhdGFidWZfc2l6ZTsKKwlpbnQgX2lzTlRTQzsKKwlpbnQgX2ZyYW1lX2luZGV4OworCWludCBfYXVkaW9mcmFtZV9pbmRleDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX2lycV9xdWV1ZXM7CisJc3RydWN0IHdvcmtfc3RydWN0IF9pcnFfd29ya19lbnRyeTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX2lycV9xdWV1ZXNfY2gyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBfaXJxX3dvcmtfZW50cnlfY2gyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpfaXJxX2F1ZGlvX3F1ZXVlczsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgX2F1ZGlvX3dvcmtfZW50cnk7CisJY2hhciAqaW5wdXRfZmlsZW5hbWU7CisJY2hhciAqaW5wdXRfZmlsZW5hbWVfY2gyOworCWludCBfZnJhbWVfaW5kZXhfY2gyOworCWludCBfaXNOVFNDX2NoMjsKKwljaGFyICp2aWRfc3RkbmFtZV9jaDI7CisJaW50IHBpeGVsX2Zvcm1hdF9jaDI7CisJaW50IGNoYW5uZWxfc2VsZWN0X2NoMjsKKwlpbnQgY29tbWFuZF9jaDI7CisJY2hhciAqaW5wdXRfYXVkaW9maWxlbmFtZTsKKwljaGFyICp2aWRfc3RkbmFtZTsKKwlpbnQgcGl4ZWxfZm9ybWF0OworCWludCBjaGFubmVsX3NlbGVjdDsKKwlpbnQgY29tbWFuZDsKKwlpbnQgcGl4ZWxfZm9ybWF0c1tWSURfQ0hBTk5FTF9OVU1dOworCWludCB1c2VfY2lmX3Jlc29sdXRpb25bVklEX0NIQU5ORUxfTlVNXTsKKwlpbnQgY2lmX3dpZHRoW1ZJRF9DSEFOTkVMX05VTV07CisJaW50IGNoYW5uZWxfb3BlbmVkOworfTsKKworc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0IHsKKwljaGFyICppbnB1dF9maWxlbmFtZTsKKwljaGFyICp2aWRfc3RkbmFtZTsKKwlpbnQgcGl4ZWxfZm9ybWF0OworCWludCBjaGFubmVsX3NlbGVjdDsKKwlpbnQgY29tbWFuZDsKK307CisKK3N0cnVjdCBkb3duc3RyZWFtX3VzZXJfc3RydWN0IHsKKwljaGFyICp2aWRfc3RkbmFtZTsKKwlpbnQgcGl4ZWxfZm9ybWF0OworCWludCBjaWZfcmVzb2x1dGlvbl9lbmFibGU7CisJaW50IGNpZl93aWR0aDsKKwlpbnQgZGVjb2Rlcl9zZWxlY3Q7CisJaW50IGNvbW1hbmQ7CisJaW50IHJlZ19hZGRyZXNzOworCWludCByZWdfZGF0YTsKK307CisKK2V4dGVybiBzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKnVwX2RhdGE7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4MjU4MjFfZGV2ICpnZXRfY3gyNTgyMShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDI1ODIxX2RldiwgdjRsMl9kZXYpOworfQorCisjZGVmaW5lIGN4MjU4MjFfY2FsbF9hbGwoZGV2LCBvLCBmLCBhcmdzLi4uKSBcCisgICAgdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIG8sIGYsICMjYXJncykKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY3gyNTgyMV9kZXZsaXN0OworZXh0ZXJuIHN0cnVjdCBjeDI1ODIxX2JvYXJkIGN4MjU4MjFfYm9hcmRzW107CitleHRlcm4gc3RydWN0IGN4MjU4MjFfc3ViaWQgY3gyNTgyMV9zdWJpZHNbXTsKKworI2RlZmluZSBTUkFNX0NIMDAgIDAJCS8qIFZpZGVvIEEgKi8KKyNkZWZpbmUgU1JBTV9DSDAxICAxCQkvKiBWaWRlbyBCICovCisjZGVmaW5lIFNSQU1fQ0gwMiAgMgkJLyogVmlkZW8gQyAqLworI2RlZmluZSBTUkFNX0NIMDMgIDMJCS8qIFZpZGVvIEQgKi8KKyNkZWZpbmUgU1JBTV9DSDA0ICA0CQkvKiBWaWRlbyBFICovCisjZGVmaW5lIFNSQU1fQ0gwNSAgNQkJLyogVmlkZW8gRiAqLworI2RlZmluZSBTUkFNX0NIMDYgIDYJCS8qIFZpZGVvIEcgKi8KKyNkZWZpbmUgU1JBTV9DSDA3ICA3CQkvKiBWaWRlbyBIICovCisKKyNkZWZpbmUgU1JBTV9DSDA4ICA4CQkvKiBBdWRpbyBBICovCisjZGVmaW5lIFNSQU1fQ0gwOSAgOQkJLyogVmlkZW8gVXBzdHJlYW0gSSAqLworI2RlZmluZSBTUkFNX0NIMTAgIDEwCQkvKiBWaWRlbyBVcHN0cmVhbSBKICovCisjZGVmaW5lIFNSQU1fQ0gxMSAgMTEJCS8qIEF1ZGlvIFVwc3RyZWFtIEFVRF9DSEFOTkVMX0IgKi8KKworI2RlZmluZSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0kgICAgIFNSQU1fQ0gwOQorI2RlZmluZSBWSURfVVBTVFJFQU1fU1JBTV9DSEFOTkVMX0ogICAgIFNSQU1fQ0gxMAorI2RlZmluZSBBVURJT19VUFNUUkVBTV9TUkFNX0NIQU5ORUxfQiAgIFNSQU1fQ0gxMQorI2RlZmluZSBWSURFT19JT0NUTF9DSCAgMTEKKworc3RydWN0IHNyYW1fY2hhbm5lbCB7CisJY2hhciAqbmFtZTsKKwl1MzIgaTsKKwl1MzIgY21kc19zdGFydDsKKwl1MzIgY3RybF9zdGFydDsKKwl1MzIgY2R0OworCXUzMiBmaWZvX3N0YXJ0OworCXUzMiBmaWZvX3NpemU7CisJdTMyIHB0cjFfcmVnOworCXUzMiBwdHIyX3JlZzsKKwl1MzIgY250MV9yZWc7CisJdTMyIGNudDJfcmVnOworCXUzMiBpbnRfbXNrOworCXUzMiBpbnRfc3RhdDsKKwl1MzIgaW50X21zdGF0OworCXUzMiBkbWFfY3RsOworCXUzMiBncGNudF9jdGw7CisJdTMyIGdwY250OworCXUzMiBhdWRfbGVuZ3RoOworCXUzMiBhdWRfY2ZnOworCXUzMiBmbGRfYXVkX2ZpZm9fZW47CisJdTMyIGZsZF9hdWRfcmlzY19lbjsKKworCS8vRm9yIFVwc3RyZWFtIFZpZGVvCisJdTMyIHZpZF9mbXRfY3RsOworCXUzMiB2aWRfYWN0aXZlX2N0bDE7CisJdTMyIHZpZF9hY3RpdmVfY3RsMjsKKwl1MzIgdmlkX2NkdF9zaXplOworCisJdTMyIHZpcF9jdGw7CisJdTMyIHBpeF9mcm10OworCXUzMiBqdW1wb25seTsKKwl1MzIgaXJxX2JpdDsKK307CitleHRlcm4gc3RydWN0IHNyYW1fY2hhbm5lbCBjeDI1ODIxX3NyYW1fY2hhbm5lbHNbXTsKKworI2RlZmluZSBTVEFUVVNfU1VDQ0VTUyAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX1VOU1VDQ0VTU0ZVTCAgICAtMQorCisjZGVmaW5lIGN4X3JlYWQocmVnKSAgICAgICAgICAgICByZWFkbChkZXYtPmxtbWlvICsgKChyZWcpPj4yKSkKKyNkZWZpbmUgY3hfd3JpdGUocmVnLCB2YWx1ZSkgICAgIHdyaXRlbCgodmFsdWUpLCBkZXYtPmxtbWlvICsgKChyZWcpPj4yKSkKKworI2RlZmluZSBjeF9hbmRvcihyZWcsIG1hc2ssIHZhbHVlKSBcCisgIHdyaXRlbCgocmVhZGwoZGV2LT5sbW1pbysoKHJlZyk+PjIpKSAmIH4obWFzaykpIHxcCisgICgodmFsdWUpICYgKG1hc2spKSwgZGV2LT5sbW1pbysoKHJlZyk+PjIpKQorCisjZGVmaW5lIGN4X3NldChyZWcsIGJpdCkgICAgICAgICAgY3hfYW5kb3IoKHJlZyksIChiaXQpLCAoYml0KSkKKyNkZWZpbmUgY3hfY2xlYXIocmVnLCBiaXQpICAgICAgICBjeF9hbmRvcigocmVnKSwgKGJpdCksIDApCisKKyNkZWZpbmUgU2V0X0dQSU9fQml0KEJpdCkgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEJpdCkKKyNkZWZpbmUgQ2xlYXJfR1BJT19CaXQoQml0KSAgICAgICAgICAgICAgICAgICAgICh+KDEgPDwgQml0KSkKKworI2RlZmluZSBDWDI1ODIxX0VSUihmbXQsIGFyZ3MuLi4pICAgICAgcHJpbnRrKEtFUk5fRVJSICAiY3gyNTgyMSglZCk6ICIgZm10LCBkZXYtPmJvYXJkLCAjIyBhcmdzKQorI2RlZmluZSBDWDI1ODIxX1dBUk4oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY3gyNTgyMSglZCk6ICIgZm10LCBkZXYtPmJvYXJkICwgIyMgYXJncykKKyNkZWZpbmUgQ1gyNTgyMV9JTkZPKGZtdCwgYXJncy4uLikgICAgIHByaW50ayhLRVJOX0lORk8gImN4MjU4MjEoJWQpOiAiIGZtdCwgZGV2LT5ib2FyZCAsICMjIGFyZ3MpCisKK2V4dGVybiBpbnQgY3gyNTgyMV9pMmNfcmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfaTJjICpidXMpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9jYXJkX3NldHVwKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgY3gyNTgyMV9pcl9pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgY3gyNTgyMV9pMmNfcmVhZChzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cywgdTE2IHJlZ19hZGRyLCBpbnQgKnZhbHVlKTsKK2V4dGVybiBpbnQgY3gyNTgyMV9pMmNfd3JpdGUoc3RydWN0IGN4MjU4MjFfaTJjICpidXMsIHUxNiByZWdfYWRkciwgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgY3gyNTgyMV9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9pMmMgKmJ1cyk7CitleHRlcm4gdm9pZCBjeDI1ODIxX2dwaW9faW5pdChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldik7CitleHRlcm4gdm9pZCBjeDI1ODIxX3NldF9ncGlvcGluX2RpcmVjdGlvbihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICBpbnQgcGluX251bWJlciwgaW50IHBpbl9sb2dpY192YWx1ZSk7CisKK2V4dGVybiBpbnQgbWVkdXNhX3ZpZGVvX2luaXQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIGludCBtZWR1c2Ffc2V0X3ZpZGVvc3RhbmRhcmQoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgbWVkdXNhX3NldF9yZXNvbHV0aW9uKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgd2lkdGgsCisJCQkJICBpbnQgZGVjb2Rlcl9zZWxlY3QpOworZXh0ZXJuIGludCBtZWR1c2Ffc2V0X2JyaWdodG5lc3Moc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBicmlnaHRuZXNzLAorCQkJCSBpbnQgZGVjb2Rlcik7CitleHRlcm4gaW50IG1lZHVzYV9zZXRfY29udHJhc3Qoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIGludCBjb250cmFzdCwKKwkJCSAgICAgICBpbnQgZGVjb2Rlcik7CitleHRlcm4gaW50IG1lZHVzYV9zZXRfaHVlKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgaHVlLCBpbnQgZGVjb2Rlcik7CitleHRlcm4gaW50IG1lZHVzYV9zZXRfc2F0dXJhdGlvbihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IHNhdHVyYXRpb24sCisJCQkJIGludCBkZWNvZGVyKTsKKworZXh0ZXJuIGludCBjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaCwgdW5zaWduZWQgaW50IGJwbCwKKwkJCQkgICAgICB1MzIgcmlzYyk7CisKK2V4dGVybiBpbnQgY3gyNTgyMV9yaXNjX2J1ZmZlcihzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAorCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB0b3Bfb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBib3R0b21fb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBicGwsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHBhZGRpbmcsIHVuc2lnbmVkIGludCBsaW5lcyk7CitleHRlcm4gaW50IGN4MjU4MjFfcmlzY19kYXRhYnVmZmVyX2F1ZGlvKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJCSBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAorCQkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkJCSB1bnNpZ25lZCBpbnQgYnBsLAorCQkJCQkgdW5zaWduZWQgaW50IGxpbmVzLCB1bnNpZ25lZCBpbnQgbHBpKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmKTsKK2V4dGVybiBpbnQgY3gyNTgyMV9yaXNjX3N0b3BwZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKKwkJCQl1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXAoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCisJCQkJICAgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcF9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoKTsKKworZXh0ZXJuIHN0cnVjdCBjeDI1ODIxX2RldiAqY3gyNTgyMV9kZXZfZ2V0KHN0cnVjdCBwY2lfZGV2ICpwY2kpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9wcmludF9pcnFiaXRzKGNoYXIgKm5hbWUsIGNoYXIgKnRhZywgY2hhciAqKnN0cmluZ3MsCisJCQkJICBpbnQgbGVuLCB1MzIgYml0cywgdTMyIG1hc2spOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldik7CitleHRlcm4gaW50IGN4MjU4MjFfc3JhbV9jaGFubmVsX3NldHVwX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQkgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgYnBsLCB1MzIgcmlzYyk7CisKK2V4dGVybiBpbnQgY3gyNTgyMV92aWR1cHN0cmVhbV9pbml0X2NoMShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJaW50IGNoYW5uZWxfc2VsZWN0LCBpbnQgcGl4ZWxfZm9ybWF0KTsKK2V4dGVybiBpbnQgY3gyNTgyMV92aWR1cHN0cmVhbV9pbml0X2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJaW50IGNoYW5uZWxfc2VsZWN0LCBpbnQgcGl4ZWxfZm9ybWF0KTsKK2V4dGVybiBpbnQgY3gyNTgyMV9hdWRpb191cHN0cmVhbV9pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCSAgICAgICBpbnQgY2hhbm5lbF9zZWxlY3QpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9mcmVlX21lbV91cHN0cmVhbV9jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9mcmVlX21lbV91cHN0cmVhbV9jaDIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9mcmVlX21lbV91cHN0cmVhbV9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldik7CitleHRlcm4gdm9pZCBjeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX3ZpZGVvX2NoMShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QKKwkJCQkJICAgICAqdXBfZGF0YSk7CitleHRlcm4gdm9pZCBjeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX3ZpZGVvX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QKKwkJCQkJICAgICAqdXBfZGF0YSk7CitleHRlcm4gdm9pZCBjeDI1ODIxX3N0YXJ0X3Vwc3RyZWFtX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQkgc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICp1cF9kYXRhKTsKK2V4dGVybiB2b2lkIGN4MjU4MjFfc3RvcF91cHN0cmVhbV92aWRlb19jaDEoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zdG9wX3Vwc3RyZWFtX3ZpZGVvX2NoMihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldik7CitleHRlcm4gdm9pZCBjeDI1ODIxX3N0b3BfdXBzdHJlYW1fYXVkaW8oc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIGludCBjeDI1ODIxX3NyYW1fY2hhbm5lbF9zZXR1cF91cHN0cmVhbShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJwbCwgdTMyIHJpc2MpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV9zZXRfcGl4ZWxfZm9ybWF0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCBpbnQgY2hhbm5lbCwKKwkJCQkgICAgIHUzMiBmb3JtYXQpOworZXh0ZXJuIHZvaWQgY3gyNTgyMV92aWRlb2lvY3RsX3VucmVnaXN0ZXIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYpOworZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgKmN4MjU4MjFfdmRldl9pbml0KHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCQkgICAgICBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZW1wbGF0ZSwKKwkJCQkJICAgICAgY2hhciAqdHlwZSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZwppbmRleCBjYTZhZGU2Li5lNDdmNjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFZJREVPX0dPNzAwNwotCXRyaXN0YXRlICJHbyA3MDA3IHN1cHBvcnQiCisJdHJpc3RhdGUgIldJUyBHTzcwMDcgTVBFRyBlbmNvZGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBJTlBVVAogCWRlcGVuZHMgb24gU05ECiAJc2VsZWN0IFZJREVPQlVGX0RNQV9TRwpAQCAtMTAsMTcgKzEwLDE5IEBACiAJc2VsZWN0IENSQzMyCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3Igc29tZSB3ZWlyZCBkZXZpY2UuLi4KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBXSVMgR083MDA3IE1QRUcKKwkgIGVuY29kZXIgY2hpcC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ283MDA3CiAKIGNvbmZpZyBWSURFT19HTzcwMDdfVVNCCi0JdHJpc3RhdGUgIkdvIDcwMDcgVVNCIHN1cHBvcnQiCisJdHJpc3RhdGUgIldJUyBHTzcwMDcgVVNCIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcgJiYgVVNCCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3Igc29tZSB3ZWlyZCBkZXZpY2UuLi4KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBXSVMgR083MDA3IE1QRUcKKwkgIGVuY29kZXIgY2hpcCBvdmVyIFVTQi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ283MDA3LXVzYgpAQCAtMzAsOCArMzIsNzggQEAKIAlkZXBlbmRzIG9uIFZJREVPX0dPNzAwN19VU0IgJiYgRFZCX1VTQgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBTZW5zb3JheSAyMjUwLzIyNTEgZGV2aWNlCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgU2Vuc29yYXkgMjI1MC8yMjUxIGRldmljZS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgczIyNTAtYm9hcmQKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzMjI1MAorCitjb25maWcgVklERU9fR083MDA3X09WNzY0MAorCXRyaXN0YXRlICJPVjc2NDAgc3ViZGV2IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgT1Y3NjQwIHN1Yi1kZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdpcy1vdjc2NDAKKworY29uZmlnIFZJREVPX0dPNzAwN19TQUE3MTEzCisJdHJpc3RhdGUgIlNBQTcxMTMgc3ViZGV2IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgU0FBNzExMyBzdWItZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3aXMtc2FhNzExMworCitjb25maWcgVklERU9fR083MDA3X1NBQTcxMTUKKwl0cmlzdGF0ZSAiU0FBNzExNSBzdWJkZXYgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0dPNzAwNworCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBTQUE3MTE1IHN1Yi1kZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdpcy1zYWE3MTE1CisKK2NvbmZpZyBWSURFT19HTzcwMDdfVFc5OTAzCisJdHJpc3RhdGUgIlRXOTkwMyBzdWJkZXYgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0dPNzAwNworCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBUVzk5MDMgc3ViLWRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd2lzLXR3OTkwMworCitjb25maWcgVklERU9fR083MDA3X1VEQTEzNDIKKwl0cmlzdGF0ZSAiVURBMTM0MiBzdWJkZXYgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0dPNzAwNworCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBVREExMzQyIHN1Yi1kZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdpcy11ZGExMzQyCisKK2NvbmZpZyBWSURFT19HTzcwMDdfU09OWV9UVU5FUgorCXRyaXN0YXRlICJTb255IHR1bmVyIHN1YmRldiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fR083MDA3CisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIFNvbnkgVHVuZXIgc3ViLWRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd2lzLXNvbnktdHVuZXIKKworY29uZmlnIFZJREVPX0dPNzAwN19UVzI4MDQKKwl0cmlzdGF0ZSAiVFcyODA0IHN1YmRldiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fR083MDA3CisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIFRXMjgwNCBzdWItZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3aXMtdHcyODA0CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L01ha2VmaWxlCmluZGV4IGU1MTRiNGEuLmQxNGVhODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9NYWtlZmlsZQpAQCAtNiwyMiArNiwzNCBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwNykgKz0gZ283MDA3Lm8KIG9iai0kKENPTkZJR19WSURFT19HTzcwMDdfVVNCKSArPSBnbzcwMDctdXNiLm8KIG9iai0kKENPTkZJR19WSURFT19HTzcwMDdfVVNCX1MyMjUwX0JPQVJEKSArPSBzMjI1MC5vCitvYmotJChDT05GSUdfVklERU9fR083MDA3X1NBQTcxMTMpICs9IHdpcy1zYWE3MTEzLm8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDdfT1Y3NjQwKSArPSB3aXMtb3Y3NjQwLm8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDdfU0FBNzExNSkgKz0gd2lzLXNhYTcxMTUubworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwN19UVzk5MDMpICs9IHdpcy10dzk5MDMubworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwN19VREExMzQyKSArPSB3aXMtdWRhMTM0Mi5vCitvYmotJChDT05GSUdfVklERU9fR083MDA3X1NPTllfVFVORVIpICs9IHdpcy1zb255LXR1bmVyLm8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDdfVFcyODA0KSArPSB3aXMtdHcyODA0Lm8KIAogZ283MDA3LW9ianMgKz0gZ283MDA3LXY0bDIubyBnbzcwMDctZHJpdmVyLm8gZ283MDA3LWkyYy5vIGdvNzAwNy1mdy5vIFwKLQkJc25kLWdvNzAwNy5vIHdpcy1zYWE3MTEzLm8KKwkJc25kLWdvNzAwNy5vCiAKIHMyMjUwLW9ianMgKz0gczIyNTAtYm9hcmQubyBzMjI1MC1sb2FkZXIubwogCi0jIFVuY29tcGlsZSB3aGVuIHRoZSBzYWE3MTM0IHBhdGNoZXMgZ2V0IGludG8gdXBzdHJlYW0KKyMgVW5jb21tZW50IHdoZW4gdGhlIHNhYTcxMzQgcGF0Y2hlcyBnZXQgaW50byB1cHN0cmVhbQogI2lmbmVxICgkKENPTkZJR19WSURFT19TQUE3MTM0KSwpCiAjb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMzQpICs9IHNhYTcxMzQtZ283MDA3Lm8KLSNFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQKKyNFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQgLURTQUE3MTM0X01QRUdfR083MDA3PTMKICNlbmRpZgogCisjIFMyMjUwIG5lZWRzIGN5cHJlc3MgZXp1c2IgbG9hZGVyIGZyb20gZHZiLXVzYgogaWZuZXEgKCQoQ09ORklHX1ZJREVPX0dPNzAwN19VU0JfUzIyNTBfQk9BUkQpLCkKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IKIGVuZGlmCiAKLUVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvc3RhZ2luZy9zYWE3MTM0CiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCisKKyMgVWJ1bnR1IDguMDQgaGFzIENPTkZJR19TTkQgdW5kZWZpbmVkLCBzbyBpbmNsdWRlIGx1bSBzb3VuZC9jb25maWcuaCB0b28KK2lmZXEgKCQoQ09ORklHX1NORCksKQorRVhUUkFfQ0ZMQUdTICs9IC1pbmNsdWRlIHNvdW5kL2NvbmZpZy5oCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYwppbmRleCA3N2IxZTc2Li40NzJmNGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpAQCAtNDksNyArNDksNyBAQAogCWdvLT5ocGlfb3BzLT5yZWFkX2ludGVycnVwdChnbyk7CiAJaWYgKHdhaXRfZXZlbnRfdGltZW91dChnby0+aW50ZXJydXB0X3dhaXRxLAogCQkJCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlLCA1KkhaKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHRpbWVvdXQgd2FpdGluZyBmb3IgcmVhZCBpbnRlcnJ1cHRcbiIpOworCQl2NGwyX2Vycihnby0+dmlkZW9fZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciByZWFkIGludGVycnVwdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKCFnby0+aW50ZXJydXB0X2F2YWlsYWJsZSkKQEAgLTk3LDEzICs5NywxMiBAQAogCXUxNiBpbnRyX3ZhbCwgaW50cl9kYXRhOwogCiAJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmd19uYW1lLCBnby0+ZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJnbzcwMDc6IHVuYWJsZSB0byBsb2FkIGZpcm13YXJlIGZyb20gZmlsZSBcIiVzXCJcbiIsCi0JCQlmd19uYW1lKTsKKwkJdjRsMl9lcnIoZ28sICJ1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGZpbGUgIgorCQkJIlwiJXNcIlxuIiwgZndfbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKGZ3X2VudHJ5LT5zaXplIDwgMTYgfHwgbWVtY21wKGZ3X2VudHJ5LT5kYXRhLCAiV0lTR083MDA3RlciLCAxMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGZpbGUgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSAiCisJCXY0bDJfZXJyKGdvLCAiZmlsZSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlICIKIAkJCQkiZ283MDA3IGZpcm13YXJlXG4iLCBmd19uYW1lKTsKIAkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJCXJldHVybiAtMTsKQEAgLTExMSw3ICsxMTAsNyBAQAogCWZ3X2xlbiA9IGZ3X2VudHJ5LT5zaXplIC0gMTY7CiAJYm91bmNlID0ga21hbGxvYyhmd19sZW4sIEdGUF9LRVJORUwpOwogCWlmIChib3VuY2UgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiCisJCXY0bDJfZXJyKGdvLCAidW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiCiAJCQkJImZpcm13YXJlIHRyYW5zZmVyXG4iLCBmd19sZW4pOwogCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKIAkJcmV0dXJuIC0xOwpAQCAtMTIyLDcgKzEyMSw3IEBACiAJCQlnbzcwMDdfc2VuZF9maXJtd2FyZShnbywgYm91bmNlLCBmd19sZW4pIDwgMCB8fAogCQkJZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmaW50cl92YWwsICZpbnRyX2RhdGEpIDwgMCB8fAogCQkJKGludHJfdmFsICYgfjB4MSkgIT0gMHg1YTVhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBlcnJvciB0cmFuc2ZlcnJpbmcgZmlybXdhcmVcbiIpOworCQl2NGwyX2VycihnbywgImVycm9yIHRyYW5zZmVycmluZyBmaXJtd2FyZVxuIik7CiAJCXJ2ID0gLTE7CiAJfQogCWtmcmVlKGJvdW5jZSk7CkBAIC0xNDAsOSArMTM5LDkgQEAKIHsKIAlpbnQgcmV0OwogCi0JZG93bigmZ28tPmh3X2xvY2spOworCW11dGV4X2xvY2soJmdvLT5od19sb2NrKTsKIAlyZXQgPSBnbzcwMDdfbG9hZF9lbmNvZGVyKGdvKTsKLQl1cCgmZ28tPmh3X2xvY2spOworCW11dGV4X3VubG9jaygmZ28tPmh3X2xvY2spOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gLTE7CiAJaWYgKCFpbml0X2kyYykKQEAgLTI1Nyw5ICsyNTYsOSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZ283MDA3OiByZWdpc3RlcmluZyBuZXcgJXNcbiIsIGdvLT5uYW1lKTsKIAotCWRvd24oJmdvLT5od19sb2NrKTsKKwltdXRleF9sb2NrKCZnby0+aHdfbG9jayk7CiAJcmV0ID0gZ283MDA3X2luaXRfZW5jb2Rlcihnbyk7Ci0JdXAoJmdvLT5od19sb2NrKTsKKwltdXRleF91bmxvY2soJmdvLT5od19sb2NrKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIC0xOwogCkBAIC0zMTYsNyArMzE1LDcgQEAKIAogCWlmIChnbzcwMDdfc2VuZF9maXJtd2FyZShnbywgZncsIGZ3X2xlbikgPCAwIHx8CiAJCQlnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBlcnJvciB0cmFuc2ZlcnJpbmcgZmlybXdhcmVcbiIpOworCQl2NGwyX2Vycihnby0+dmlkZW9fZGV2LCAiZXJyb3IgdHJhbnNmZXJyaW5nIGZpcm13YXJlXG4iKTsKIAkJcnYgPSAtMTsKIAkJZ290byBzdGFydF9lcnJvcjsKIAl9CkBAIC0zMjUsNyArMzI0LDcgQEAKIAlnby0+cGFyc2VfbGVuZ3RoID0gMDsKIAlnby0+c2Vlbl9mcmFtZSA9IDA7CiAJaWYgKGdvNzAwN19zdHJlYW1fc3RhcnQoZ28pIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZXJyb3Igc3RhcnRpbmcgc3RyZWFtIHRyYW5zZmVyXG4iKTsKKwkJdjRsMl9lcnIoZ28tPnZpZGVvX2RldiwgImVycm9yIHN0YXJ0aW5nIHN0cmVhbSB0cmFuc2ZlclxuIik7CiAJCXJ2ID0gLTE7CiAJCWdvdG8gc3RhcnRfZXJyb3I7CiAJfQpAQCAtNDIxLDcgKzQyMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAJCWlmIChnby0+YWN0aXZlX2J1ZiAhPSBOVUxMICYmCiAJCQkgICAgZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCA+PSBHTzcwMDdfQlVGX1NJWkUgLSAzKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3OiBkcm9wcGluZyBvdmVyc2l6ZWQgZnJhbWVcbiIpOworCQkJdjRsMl9pbmZvKGdvLT52aWRlb19kZXYsICJkcm9wcGluZyBvdmVyc2l6ZWQgZnJhbWVcbiIpOwogCQkJZ28tPmFjdGl2ZV9idWYtPm9mZnNldCAtPSBnby0+YWN0aXZlX2J1Zi0+Ynl0ZXN1c2VkOwogCQkJZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCA9IDA7CiAJCQlnby0+YWN0aXZlX2J1Zi0+bW9kZXRfYWN0aXZlID0gMDsKQEAgLTYwNCw3ICs2MDMsNyBAQAogCWdvLT50dW5lcl90eXBlID0gLTE7CiAJZ28tPmNoYW5uZWxfbnVtYmVyID0gMDsKIAlnby0+bmFtZVswXSA9IDA7Ci0JaW5pdF9NVVRFWCgmZ28tPmh3X2xvY2spOworCW11dGV4X2luaXQoJmdvLT5od19sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZnby0+ZnJhbWVfd2FpdHEpOwogCXNwaW5fbG9ja19pbml0KCZnby0+c3BpbmxvY2spOwogCWdvLT52aWRlb19kZXYgPSBOVUxMOwpAQCAtNjY5LDggKzY2OCw4IEBACiAJCWlmIChpMmNfZGVsX2FkYXB0ZXIoJmdvLT5pMmNfYWRhcHRlcikgPT0gMCkKIAkJCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgPSAwOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCQkiZ283MDA3OiBlcnJvciByZW1vdmluZyBJMkMgYWRhcHRlciFcbiIpOworCQkJdjRsMl9lcnIoZ28tPnZpZGVvX2RldiwKKwkJCQkiZXJyb3IgcmVtb3ZpbmcgSTJDIGFkYXB0ZXIhXG4iKTsKIAl9CiAKIAlpZiAoZ28tPmF1ZGlvX2VuYWJsZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZncuYwppbmRleCA4NzFlZDQzLi5hOGJiMjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWZ3LmMKQEAgLTEwMzQsNyArMTAzNCw4IEBACiAJCTB4QkYxQiwJCWZyYW1lbGVuWzddLAogCQkwLAkJMCwKIAotI2lmIDAgLyogUmVtb3ZlIG9uY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBtYXRjaGluZyAqLworI2lmIDAKKwkJLyogUmVtb3ZlIG9uY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBtYXRjaGluZyAqLwogCQkweDIwMGUsCQkweDAwMDAsCiAJCTB4QkY1NiwJCTQsCiAJCTB4QkY1NywJCTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1pMmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jCmluZGV4IGM4Mjg2N2YuLmI4Y2ZhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtNDgsNyArNDgsNyBAQAogCiAvKiBUaGVyZSBpcyBvbmx5IG9uZSBJMkMgcG9ydCBvbiB0aGUgVFcyODA0IHRoYXQgZmVlZHMgYWxsIGZvdXIgR083MDA3IFZJUHMKICAqIG9uIHRoZSBBZGxpbmsgUENJLU1QRzI0LCBzbyBhY2Nlc3MgaXMgc2hhcmVkIGJldHdlZW4gYWxsIG9mIHRoZW0uICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChhZGxpbmtfbXBnMjRfaTJjX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChhZGxpbmtfbXBnMjRfaTJjX2xvY2spOwogCiBzdGF0aWMgaW50IGdvNzAwN19pMmNfeGZlcihzdHJ1Y3QgZ283MDA3ICpnbywgdTE2IGFkZHIsIGludCByZWFkLAogCQl1MTYgY29tbWFuZCwgaW50IGZsYWdzLCB1OCAqZGF0YSkKQEAgLTY5LDExICs2OSwxMSBAQAogCQkJKmRhdGEsIGNvbW1hbmQsIGFkZHIpOwogI2VuZGlmCiAKLQlkb3duKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfbG9jaygmZ28tPmh3X2xvY2spOwogCiAJaWYgKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQpIHsKIAkJLyogQnJpZGdlIHRoZSBJMkMgcG9ydCBvbiB0aGlzIEdPNzAwNyB0byB0aGUgc2hhcmVkIGJ1cyAqLwotCQlkb3duKCZhZGxpbmtfbXBnMjRfaTJjX2xvY2spOworCQltdXRleF9sb2NrKCZhZGxpbmtfbXBnMjRfaTJjX2xvY2spOwogCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgyLCAweDAwMjApOwogCX0KIApAQCAtMTM0LDkgKzEzNCw5IEBACiAJaWYgKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQpIHsKIAkJLyogSXNvbGF0ZSB0aGUgSTJDIHBvcnQgb24gdGhpcyBHTzcwMDcgZnJvbSB0aGUgc2hhcmVkIGJ1cyAqLwogCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgyLCAweDAwMDApOwotCQl1cCgmYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZhZGxpbmtfbXBnMjRfaTJjX2xvY2spOwogCX0KLQl1cCgmZ28tPmh3X2xvY2spOworCW11dGV4X3VubG9jaygmZ28tPmh3X2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaAppbmRleCAxNzhkMTgxLi5jZTkzMDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1wcml2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctcHJpdi5oCkBAIC0xMzIsNyArMTMyLDcgQEAKIAogc3RydWN0IGdvNzAwN19maWxlIHsKIAlzdHJ1Y3QgZ283MDA3ICpnbzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJaW50IGJ1Zl9jb3VudDsKIAlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqYnVmczsKIH07CkBAIC0xNzAsNyArMTcwLDcgQEAKIAlpbnQgcmVmX2NvdW50OwogCWVudW0geyBTVEFUVVNfSU5JVCwgU1RBVFVTX09OTElORSwgU1RBVFVTX1NIVVRET1dOIH0gc3RhdHVzOwogCXNwaW5sb2NrX3Qgc3BpbmxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBod19sb2NrOworCXN0cnVjdCBtdXRleCBod19sb2NrOwogCWludCBzdHJlYW1pbmc7CiAJaW50IGluX3VzZTsKIAlpbnQgYXVkaW9fZW5hYmxlZDsKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF9kYXRhOwogfTsKIAotLyogQWxsIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGhwaV9sb2NrIHNlbWFwaG9yZSBoZWxkISAqLworLyogQWxsIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGhwaV9sb2NrIG11dGV4IGhlbGQhICovCiAjZGVmaW5lIGdvNzAwN19pbnRlcmZhY2VfcmVzZXQoZ28pIFwKIAkJCSgoZ28pLT5ocGlfb3BzLT5pbnRlcmZhY2VfcmVzZXQoZ28pKQogI2RlZmluZQlnbzcwMDdfd3JpdGVfaW50ZXJydXB0KGdvLCB4LCB5KSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXVzYi5jCmluZGV4IGFhNGE5ZTAuLmVjYWEzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXVzYi5jCkBAIC0zMyw3ICszMyw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXNzdW1lX2VuZHVyYTsKIG1vZHVsZV9wYXJhbShhc3N1bWVfZW5kdXJhLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhhc3N1bWVfZW5kdXJhLCAid2hlbiBwcm9iaW5nIGZhaWxzLCBoYXJkd2FyZSBpcyBhIFBlbGNvIEVuZHVyYSIpOworTU9EVUxFX1BBUk1fREVTQyhhc3N1bWVfZW5kdXJhLCAid2hlbiBwcm9iaW5nIGZhaWxzLCAiCisJCQkJImhhcmR3YXJlIGlzIGEgUGVsY28gRW5kdXJhIik7CiAKIC8qICNkZWZpbmUgR083MDA3X1VTQl9ERUJVRyAqLwogLyogI2RlZmluZSBHTzcwMDdfSTJDX0RFQlVHICovIC8qIGZvciBkZWJ1Z2dpbmcgdGhlIEVaLVVTQiBJMkMgYWRhcHRlciAqLwpAQCAtNDQsMTIgKzQ1LDEyIEBACiAKIC8qCiAgKiBQaXBlcyBvbiBFWi1VU0IgaW50ZXJmYWNlOgotICogCTAgc25kIC0gQ29udHJvbAotICogCTAgcmN2IC0gQ29udHJvbAotICogCTIgc25kIC0gRG93bmxvYWQgZmlybXdhcmUgKGNvbnRyb2wpCi0gKiAJNCByY3YgLSBSZWFkIEludGVycnVwdCAoaW50ZXJydXB0KQotICogCTYgcmN2IC0gUmVhZCBWaWRlbyAoYnVsaykKLSAqIAk4IHJjdiAtIFJlYWQgQXVkaW8gKGJ1bGspCisgKgkwIHNuZCAtIENvbnRyb2wKKyAqCTAgcmN2IC0gQ29udHJvbAorICoJMiBzbmQgLSBEb3dubG9hZCBmaXJtd2FyZSAoY29udHJvbCkKKyAqCTQgcmN2IC0gUmVhZCBJbnRlcnJ1cHQgKGludGVycnVwdCkKKyAqCTYgcmN2IC0gUmVhZCBWaWRlbyAoYnVsaykKKyAqCTggcmN2IC0gUmVhZCBBdWRpbyAoYnVsaykKICAqLwogCiAjZGVmaW5lIEdPNzAwN19VU0JfRVpVU0IJCSgxPDwwKQpAQCAtNjIsNyArNjMsNyBAQAogCiBzdHJ1Y3QgZ283MDA3X3VzYiB7CiAJc3RydWN0IGdvNzAwN191c2JfYm9hcmQgKmJvYXJkOwotCXN0cnVjdCBzZW1hcGhvcmUgaTJjX2xvY2s7CisJc3RydWN0IG11dGV4IGkyY19sb2NrOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJc3RydWN0IHVyYiAqdmlkZW9fdXJic1s4XTsKIAlzdHJ1Y3QgdXJiICphdWRpb191cmJzWzhdOwpAQCAtOTcsNyArOTgsNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJID0gMiwKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLnZpZGVvX2lucHV0CT0gMCwKIAkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKQEAgLTEzNCw3ICsxMzUsNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJID0gMiwKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLnZpZGVvX2lucHV0CT0gMCwKIAkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKQEAgLTE3Miw3ICsxNzMsNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJID0gMiwKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLnZpZGVvX2lucHV0CT0gMSwKIAkJCS8qCS5hdWRpb19pbnB1dAk9IEFVRElPX0VYVEVSTiwgKi8KQEAgLTIyOCw3ICsyMjksNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJID0gMywKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLnZpZGVvX2lucHV0CT0gMSwKIAkJCQkuYXVkaW9faW5wdXQJPSBUVkFVRElPX0lOUFVUX0VYVEVSTiwKQEAgLTI3Niw3ICsyNzcsNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJICA9IDEsCi0JCS5pbnB1dHMgCSAgPSB7CisJCS5pbnB1dHMJCSAgPSB7CiAJCQl7CiAJCQkJLm5hbWUJCT0gIkNhbWVyYSIsCiAJCQl9LApAQCAtMzA5LDcgKzMxMCw3IEBACiAJCQl9LAogCQl9LAogCQkubnVtX2lucHV0cwkgPSAyLAotCQkuaW5wdXRzIAkgPSB7CisJCS5pbnB1dHMJCSA9IHsKIAkJCXsKIAkJCQkudmlkZW9faW5wdXQJPSAyLAogCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLApAQCAtMzQxLDcgKzM0Miw3IEBACiAJCQkJCUdPNzAwN19TRU5TT1JfU0NBTElORywKIAkJLm51bV9pMmNfZGV2cwkgPSAwLAogCQkubnVtX2lucHV0cwkgPSAxLAotCQkuaW5wdXRzIAkgPSB7CisJCS5pbnB1dHMJCSA9IHsKIAkJCXsKIAkJCQkudmlkZW9faW5wdXQJPSAwLAogCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLApAQCAtMzY3LDcgKzM2OCw3IEBACiAJCS5zZW5zb3JfaF9vZmZzZXQgPSA4LAogCQkubnVtX2kyY19kZXZzCSA9IDAsCiAJCS5udW1faW5wdXRzCSA9IDEsCi0JCS5pbnB1dHMgCSA9IHsKKwkJLmlucHV0cwkJID0gewogCQkJewogCQkJCS5uYW1lCQk9ICJDYW1lcmEiLAogCQkJfSwKQEAgLTM5OSw3ICs0MDAsNyBAQAogCQkJfSwKIAkJfSwKIAkJLm51bV9pbnB1dHMJID0gMSwKLQkJLmlucHV0cyAJID0geworCQkuaW5wdXRzCQkgPSB7CiAJCQl7CiAJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCiAJCQl9LApAQCAtNDMwLDcgKzQzMSw3IEBACiAJCQl9LAogCQl9LAogCQkubnVtX2lucHV0cwkgPSAyLAotCQkuaW5wdXRzIAkgPSB7CisJCS5pbnB1dHMJCSA9IHsKIAkJCXsKIAkJCQkudmlkZW9faW5wdXQJPSAwLAogCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLApAQCAtNzM0LDE0ICs3MzUsMTUgQEAKIHN0YXRpYyB2b2lkIGdvNzAwN191c2JfcmVhZF92aWRlb19waXBlX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ283MDA3ICpnbyA9IChzdHJ1Y3QgZ283MDA3ICopdXJiLT5jb250ZXh0OwotCWludCByLCBzdGF0dXMgPSB1cmItPiBzdGF0dXM7CisJaW50IHIsIHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJaWYgKCFnby0+c3RyZWFtaW5nKSB7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ28tPmZyYW1lX3dhaXRxKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gdmlkZW8gcGlwZTogJWRcbiIsIHN0YXR1cyk7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gdmlkZW8gcGlwZTogJWRcbiIsCisJCQlzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CkBAIC03NjIsNyArNzY0LDggQEAKIAlpZiAoIWdvLT5zdHJlYW1pbmcpCiAJCXJldHVybjsKIAlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gYXVkaW8gcGlwZTogJWRcbiIsIHN0YXR1cyk7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gYXVkaW8gcGlwZTogJWRcbiIsCisJCQlzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CkBAIC04NzcsNyArODgwLDcgQEAKIAlpZiAoZ28tPnN0YXR1cyA9PSBTVEFUVVNfU0hVVERPV04pCiAJCXJldHVybiAtMTsKIAotCWRvd24oJnVzYi0+aTJjX2xvY2spOworCW11dGV4X2xvY2soJnVzYi0+aTJjX2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7CiAJCS8qIFRoZSBoYXJkd2FyZSBjb21tYW5kIGlzICJ3cml0ZSBzb21lIGJ5dGVzIHRoZW4gcmVhZCBzb21lCkBAIC05MzUsNyArOTM4LDcgQEAKIAlyZXQgPSAwOwogCiBpMmNfZG9uZToKLQl1cCgmdXNiLT5pMmNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1c2ItPmkyY19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDE3LDcgKzEwMjAsNyBAQAogCQlicmVhazsKIAljYXNlIEdPNzAwN19CT0FSRElEX1NFTlNPUkFZXzIyNTA6CiAJCXByaW50ayhLRVJOX0lORk8gIlNlbnNvcmF5IDIyNTAgZm91bmRcbiIpOwotCQluYW1lID0gIlNlbnNvcmF5IDIyNTAvMjI1MVxuIjsKKwkJbmFtZSA9ICJTZW5zb3JheSAyMjUwLzIyNTEiOwogCQlib2FyZCA9ICZib2FyZF9zZW5zb3JheV8yMjUwOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTA2NSw3ICsxMDY4LDcgQEAKIAlpZiAoYm9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQl9JMkMpIHsKIAkJbWVtY3B5KCZnby0+aTJjX2FkYXB0ZXIsICZnbzcwMDdfdXNiX2FkYXBfdGVtcGwsCiAJCQkJc2l6ZW9mKGdvNzAwN191c2JfYWRhcF90ZW1wbCkpOwotCQlpbml0X01VVEVYKCZ1c2ItPmkyY19sb2NrKTsKKwkJbXV0ZXhfaW5pdCgmdXNiLT5pMmNfbG9jayk7CiAJCWdvLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gZ28tPmRldjsKIAkJaTJjX3NldF9hZGFwZGF0YSgmZ28tPmkyY19hZGFwdGVyLCBnbyk7CiAJCWlmIChpMmNfYWRkX2FkYXB0ZXIoJmdvLT5pMmNfYWRhcHRlcikgPCAwKSB7CkBAIC0xMDk2LDcgKzEwOTksNyBAQAogCQkJCXVzYi0+Ym9hcmQgPSBib2FyZCA9ICZib2FyZF9lbmR1cmE7CiAJCQkJZ28tPmJvYXJkX2luZm8gPSAmYm9hcmQtPm1haW5faW5mbzsKIAkJCQlzdHJuY3B5KGdvLT5uYW1lLCAiUGVsY28gRW5kdXJhIiwKLQkJCQkJCXNpemVvZihnby0+bmFtZSkpOworCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKIAkJCX0gZWxzZSB7CiAJCQkJdTE2IGNoYW5uZWw7CiAKQEAgLTExNTQsOCArMTE1Nyw3IEBACiAJCSAqIHRvIHRoZSBFWi1VU0IgR1BJTyBvdXRwdXQgcGlucyAqLwogCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg0MCwgMHg3ZjAyLCAwLAogCQkJCQlOVUxMLCAwLCAwKSA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSJnbzcwMDctdXNiOiBHUElPIHdyaXRlIGZhaWxlZCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBHUElPIHdyaXRlIGZhaWxlZCFcbiIpOwogCQkJZ290byBpbml0ZmFpbDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYwppbmRleCAwNmNhY2QzLi40YmQzNTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCkBAIC03NSw3ICs3NSw3IEBACiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmdvLT5od19sb2NrKTsKKwltdXRleF9sb2NrKCZnby0+aHdfbG9jayk7CiAJaWYgKGdvLT5zdHJlYW1pbmcpIHsKIAkJZ28tPnN0cmVhbWluZyA9IDA7CiAJCWdvNzAwN19zdHJlYW1fc3RvcChnbyk7CkBAIC04NSw3ICs4NSw3IEBACiAJCWdvNzAwN19yZXNldF9lbmNvZGVyKGdvKTsKIAkJcmV0dmFsID0gMDsKIAl9Ci0JdXAoJmdvLT5od19sb2NrKTsKKwltdXRleF91bmxvY2soJmdvLT5od19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAxLDcgKzEwMSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCSsrZ28tPnJlZl9jb3VudDsKIAlnb2ZoLT5nbyA9IGdvOwotCWluaXRfTVVURVgoJmdvZmgtPmxvY2spOworCW11dGV4X2luaXQoJmdvZmgtPmxvY2spOwogCWdvZmgtPmJ1Zl9jb3VudCA9IDA7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZ29maDsKIAlyZXR1cm4gMDsKQEAgLTM4MywxMyArMzgzLDEwIEBACiAJfQogCXJldHVybiAwOwogfQorI2VuZGlmCiAKLXN0YXRpYyBpbnQgbXBlZ19xdWVyeWN0cmwodTMyIGlkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwpCitzdGF0aWMgaW50IG1wZWdfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCkKIHsKLQlzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKLQkJVjRMMl9DSURfVVNFUl9DTEFTUywKLQkJMAotCX07CiAJc3RhdGljIGNvbnN0IHUzMiBtcGVnX2N0cmxzW10gPSB7CiAJCVY0TDJfQ0lEX01QRUdfQ0xBU1MsCiAJCVY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUsCkBAIC00MDEsMjYgKzM5OCwxNSBAQAogCQkwCiAJfTsKIAlzdGF0aWMgY29uc3QgdTMyICpjdHJsX2NsYXNzZXNbXSA9IHsKLQkJdXNlcl9jdHJscywKIAkJbXBlZ19jdHJscywKIAkJTlVMTAogCX07CiAKLQkvKiBUaGUgY3RybCBtYXkgYWxyZWFkeSBjb250YWluIHRoZSBxdWVyaWVkIGkyYyBjb250cm9scywKLQkgKiBxdWVyeSB0aGUgbXBlZyBjb250cm9scyBpZiB0aGUgZXhpc3RpbmcgY3RybCBpZCBpcwotCSAqIGdyZWF0ZXIgdGhhbiB0aGUgbmV4dCBtcGVnIGN0cmwgaWQuCi0JICovCi0JaWQgPSB2NGwyX2N0cmxfbmV4dChjdHJsX2NsYXNzZXMsIGlkKTsKLQlpZiAoaWQgPj0gY3RybC0+aWQgJiYgY3RybC0+bmFtZVswXSkKLQkJcmV0dXJuIDA7Ci0KLQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKCpjdHJsKSk7Ci0JY3RybC0+aWQgPSBpZDsKKwljdHJsLT5pZCA9IHY0bDJfY3RybF9uZXh0KGN0cmxfY2xhc3NlcywgY3RybC0+aWQpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfVVNFUl9DTEFTUzoKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ0xBU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoY3RybCk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjdHJsLCAwLCAwLCAwLCAwKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjdHJsLAogCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9EVkQsCkBAIC00MzcsMjAgKzQyMywyMSBAQAogCQkJCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSwgMSwKIAkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoY3RybCwgMCwgMzQsIDEsIDE1KTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoY3RybCk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjdHJsLCAwLCAxLCAxLCAwKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKGN0cmwsCiAJCQkJNjQwMDAsCiAJCQkJMTAwMDAwMDAsIDEsCi0JCQkJOTgwMDAwMCk7CisJCQkJMTUwMDAwMCk7CiAJZGVmYXVsdDoKLQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcGVnX3NfY29udHJvbChzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsLCBzdHJ1Y3QgZ283MDA3ICpnbykKK3N0YXRpYyBpbnQgbXBlZ19zX2N0cmwoc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCwgc3RydWN0IGdvNzAwNyAqZ28pCiB7CiAJLyogcHJldHR5IHN1cmUgd2UgY2FuJ3QgY2hhbmdlIGFueSBvZiB0aGVzZSB3aGlsZSBzdHJlYW1pbmcgKi8KIAlpZiAoZ28tPnN0cmVhbWluZykKQEAgLTUyOCw2ICs1MTUsOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDM0KQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWdvLT5nb3Bfc2l6ZSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6CkBAIC01NDcsNyArNTM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcGVnX2dfY29udHJvbChzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsLCBzdHJ1Y3QgZ283MDA3ICpnbykKK3N0YXRpYyBpbnQgbXBlZ19nX2N0cmwoc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCwgc3RydWN0IGdvNzAwNyAqZ28pCiB7CiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKQEAgLTYwMCwxMyArNTg5LDExIEBACiAJfQogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJnbzcwMDciLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgZ28tPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKQEAgLTY1Myw4ICs2NDAsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWZtdC0+Zm10LnBpeC53aWR0aCA9IGdvLT53aWR0aDsKQEAgLTY3Miw4ICs2NTgsNyBAQAogc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJcmV0dXJuIHNldF9jYXB0dXJlX3NpemUoZ28sIGZtdCwgMSk7CiB9CkBAIC02ODEsOCArNjY2LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlpZiAoZ28tPnN0cmVhbWluZykKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTcwNSwxNCArNjg5LDE0IEBACiAJCQlyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJmdvZmgtPmxvY2spOworCW11dGV4X2xvY2soJmdvZmgtPmxvY2spOwogCWZvciAoaSA9IDA7IGkgPCBnb2ZoLT5idWZfY291bnQ7ICsraSkKIAkJaWYgKGdvZmgtPmJ1ZnNbaV0ubWFwcGVkID4gMCkKIAkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CiAKLQlkb3duKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfbG9jaygmZ28tPmh3X2xvY2spOwogCWlmIChnby0+aW5fdXNlID4gMCAmJiBnb2ZoLT5idWZfY291bnQgPT0gMCkgewotCQl1cCgmZ28tPmh3X2xvY2spOworCQltdXRleF91bmxvY2soJmdvLT5od19sb2NrKTsKIAkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKIAl9CiAKQEAgLTczMSw3ICs3MTUsNyBAQAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCFnb2ZoLT5idWZzKSB7Ci0JCQl1cCgmZ28tPmh3X2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZnby0+aHdfbG9jayk7CiAJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOwogCQl9CiAKQEAgLTc1MCw4ICs3MzQsOCBAQAogCX0KIAogCWdvZmgtPmJ1Zl9jb3VudCA9IGNvdW50OwotCXVwKCZnby0+aHdfbG9jayk7Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ28tPmh3X2xvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAKIAltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwogCkBAIC03NjIsNyArNzQ2LDcgQEAKIAlyZXR1cm4gMDsKIAogdW5sb2NrX2FuZF9yZXR1cm46Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNzc4LDcgKzc2Miw3IEBACiAKIAlpbmRleCA9IGJ1Zi0+aW5kZXg7CiAKLQlkb3duKCZnb2ZoLT5sb2NrKTsKKwltdXRleF9sb2NrKCZnb2ZoLT5sb2NrKTsKIAlpZiAoaW5kZXggPj0gZ29maC0+YnVmX2NvdW50KQogCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOwogCkBAIC04MDIsMTIgKzc4NiwxMiBAQAogCWJ1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKIAlidWYtPm0ub2Zmc2V0ID0gaW5kZXggKiBHTzcwMDdfQlVGX1NJWkU7CiAJYnVmLT5sZW5ndGggPSBHTzcwMDdfQlVGX1NJWkU7Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIAogdW5sb2NrX2FuZF9yZXR1cm46Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtODI0LDcgKzgwOCw3IEBACiAJCQlidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JZG93bigmZ29maC0+bG9jayk7CisJbXV0ZXhfbG9jaygmZ29maC0+bG9jayk7CiAJaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gZ29maC0+YnVmX2NvdW50KQogCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOwogCkBAIC04NjUsMTIgKzg0OSwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZnb2J1Zi0+c3RyZWFtLCAmZ28tPnN0cmVhbSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIAogdW5sb2NrX2FuZF9yZXR1cm46Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtODkwLDcgKzg3NCw3IEBACiAJaWYgKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiByZXR2YWw7CiAKLQlkb3duKCZnb2ZoLT5sb2NrKTsKKwltdXRleF9sb2NrKCZnb2ZoLT5sb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmZ28tPnN0cmVhbSkpCiAJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CiAJZ29idWYgPSBsaXN0X2VudHJ5KGdvLT5zdHJlYW0ubmV4dCwKQEAgLTkzNCwxMSArOTE4LDExIEBACiAJYnVmLT5sZW5ndGggPSBHTzcwMDdfQlVGX1NJWkU7CiAJYnVmLT5yZXNlcnZlZCA9IGdvYnVmLT5tb2RldF9hY3RpdmU7CiAKLQl1cCgmZ29maC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZnb2ZoLT5sb2NrKTsKIAlyZXR1cm4gMDsKIAogdW5sb2NrX2FuZF9yZXR1cm46Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtOTUyLDggKzkzNiw4IEBACiAJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJmdvZmgtPmxvY2spOwotCWRvd24oJmdvLT5od19sb2NrKTsKKwltdXRleF9sb2NrKCZnb2ZoLT5sb2NrKTsKKwltdXRleF9sb2NrKCZnby0+aHdfbG9jayk7CiAKIAlpZiAoIWdvLT5zdHJlYW1pbmcpIHsKIAkJZ28tPnN0cmVhbWluZyA9IDE7CkBAIC05NjQsOCArOTQ4LDggQEAKIAkJZWxzZQogCQkJcmV0dmFsID0gMDsKIAl9Ci0JdXAoJmdvLT5od19sb2NrKTsKLQl1cCgmZ29maC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZnby0+aHdfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZnb2ZoLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC05NzgsOSArOTYyLDkgQEAKIAogCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZG93bigmZ29maC0+bG9jayk7CisJbXV0ZXhfbG9jaygmZ29maC0+bG9jayk7CiAJZ283MDA3X3N0cmVhbW9mZihnbyk7Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk4OCwyMiArOTcyLDIwIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnF1ZXJ5KQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKIAkJcmV0dXJuIC1FSU87CiAKIAlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19RVUVSWUNUUkwsIHF1ZXJ5KTsKIAotCXJldHVybiAoIXF1ZXJ5LT5uYW1lWzBdKSA/IC1FSU5WQUwgOiAwOworCXJldHVybiAoIXF1ZXJ5LT5uYW1lWzBdKSA/IG1wZWdfcXVlcnljdHJsKHF1ZXJ5KSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcXVlcnk7CiAKIAlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCkBAIC0xMDEzLDcgKzk5NSw3IEBACiAJcXVlcnkuaWQgPSBjdHJsLT5pZDsKIAlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19RVUVSWUNUUkwsICZxdWVyeSk7CiAJaWYgKHF1ZXJ5Lm5hbWVbMF0gPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBtcGVnX2dfY3RybChjdHJsLCBnbyk7CiAJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfR19DVFJMLCBjdHJsKTsKIAogCXJldHVybiAwOwpAQCAtMTAyMiw4ICsxMDA0LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcXVlcnk7CiAKIAlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCkBAIC0xMDMzLDcgKzEwMTQsNyBAQAogCXF1ZXJ5LmlkID0gY3RybC0+aWQ7CiAJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfUVVFUllDVFJMLCAmcXVlcnkpOwogCWlmIChxdWVyeS5uYW1lWzBdID09IDApCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gbXBlZ19zX2N0cmwoY3RybCwgZ28pOwogCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1NfQ1RSTCwgY3RybCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwNDIsOCArMTAyMyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm0pCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCXN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZSA9IHsKIAkJLm51bWVyYXRvciA9IDEwMDEgKiAgZ28tPmZwc19zY2FsZSwKIAkJLmRlbm9taW5hdG9yID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUsCkBAIC0xMDYxLDggKzEwNDEsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19wYXJtKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAl1bnNpZ25lZCBpbnQgbiwgZDsKIAogCWlmIChwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKQEAgLTEwOTQsOCArMTA3Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCiAJCQkJICBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJLyogUmV0dXJuIC1FSU5WQUwsIGlmIGl0IGlzIGEgVFYgYm9hcmQgKi8KIAlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpIHx8CkBAIC0xMTE1LDggKzEwOTMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZW51bV9mcmFtZWludGVydmFscyhzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSAqZml2YWwpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJLyogUmV0dXJuIC1FSU5WQUwsIGlmIGl0IGlzIGEgVFYgYm9hcmQgKi8KIAlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpIHx8CkBAIC0xMTMzLDEwICsxMTEwLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOworCisJc3dpdGNoIChnby0+c3RhbmRhcmQpIHsKKwljYXNlIEdPNzAwN19TVERfTlRTQzoKKwkJKnN0ZCA9IFY0TDJfU1REX05UU0M7CisJCWJyZWFrOworCWNhc2UgR083MDA3X1NURF9QQUw6CisJCSpzdGQgPSBWNEwyX1NURF9QQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlpZiAoZ28tPnN0cmVhbWluZykKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTExNzgsMzAgKzExNzIsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLQljYXNlIFZJRElPQ19RVUVSWVNURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CitzdGF0aWMgaW50IHZpZGlvY19xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAotCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCi0JCQkJZ28tPmlucHV0ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkgewotCQkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQotCQkJCXJldHVybiAtRUlPOwotCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAotCQkJCQkJVklESU9DX1FVRVJZU1RELCBhcmcpOwotCQl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKQotCQkJKnN0ZCA9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTTsKLQkJZWxzZQotCQkJKnN0ZCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgorCWlmICgoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikgJiYKKwkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1FVRVJZU1RELCBzdGQpOworCX0gZWxzZSBpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpCisJCSpzdGQgPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU07CisJZWxzZQorCQkqc3RkID0gMDsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppbnApCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKGlucC0+aW5kZXggPj0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTIzMCw4ICsxMjIxLDcgQEAKIAogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppbnB1dCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAkqaW5wdXQgPSBnby0+aW5wdXQ7CiAKQEAgLTEyNDAsOCArMTIzMCw3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlpZiAoaW5wdXQgPj0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI2Miw4ICsxMjUxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI4MSw4ICsxMjY5LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQpCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMwOCw4ICsxMjk1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBwcml2OwotCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoKHN0cnVjdCBnbzcwMDdfZmlsZSAqKSBwcml2KS0+Z287CiAKIAlpZiAoIShnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzI0LDggKzEzMTAsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNDAsOCArMTMyNSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wY2FwKQogewotCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IHByaXY7Ci0Jc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9ICgoc3RydWN0IGdvNzAwN19maWxlICopIHByaXYpLT5nbzsKIAogCWlmIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzg1LDggKzEzNjksNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCiB7Ci0Jc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gcHJpdjsKLQlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXN0cnVjdCBnbzcwMDcgKmdvID0gKChzdHJ1Y3QgZ283MDA3X2ZpbGUgKikgcHJpdiktPmdvOwogCiAJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE3MzQsMTggKzE3MTcsMTggQEAKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIG9ubHkgc3VwcG9ydCBWTV9TSEFSRUQgbWFwcGluZyAqLwogCWlmICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgIT0gR083MDA3X0JVRl9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsgLyogbXVzdCBtYXAgZXhhY3RseSBvbmUgZnVsbCBidWZmZXIgKi8KLQlkb3duKCZnb2ZoLT5sb2NrKTsKKwltdXRleF9sb2NrKCZnb2ZoLT5sb2NrKTsKIAlpbmRleCA9IHZtYS0+dm1fcGdvZmYgLyBHTzcwMDdfQlVGX1BBR0VTOwogCWlmIChpbmRleCA+PSBnb2ZoLT5idWZfY291bnQpIHsKLQkJdXAoJmdvZmgtPmxvY2spOworCQltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsgLyogdHJ5aW5nIHRvIG1hcCBiZXlvbmQgcmVxdWVzdGVkIGJ1ZmZlcnMgKi8KIAl9CiAJaWYgKGluZGV4ICogR083MDA3X0JVRl9QQUdFUyAhPSB2bWEtPnZtX3Bnb2ZmKSB7Ci0JCXVwKCZnb2ZoLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZnb2ZoLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIG9mZnNldCBpcyBub3QgYWxpZ25lZCBvbiBidWZmZXIgYm91bmRhcnkgKi8KIAl9CiAJaWYgKGdvZmgtPmJ1ZnNbaW5kZXhdLm1hcHBlZCA+IDApIHsKLQkJdXAoJmdvZmgtPmxvY2spOworCQltdXRleF91bmxvY2soJmdvZmgtPmxvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlnb2ZoLT5idWZzW2luZGV4XS5tYXBwZWQgPSAxOwpAQCAtMTc1NCw3ICsxNzM3LDcgQEAKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7CiAJdm1hLT52bV9mbGFncyAmPSB+Vk1fSU87CiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAmZ29maC0+YnVmc1tpbmRleF07Ci0JdXAoJmdvZmgtPmxvY2spOworCW11dGV4X3VubG9jaygmZ29maC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MDEsNyArMTc4NCw5IEBACiAJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKIAkudmlkaW9jX3FidWYgICAgICAgICAgICAgID0gdmlkaW9jX3FidWYsCiAJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX2dfc3RkICAgICAgICAgICAgID0gdmlkaW9jX2dfc3RkLAogCS52aWRpb2Nfc19zdGQgICAgICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCAgICAgICAgICA9IHZpZGlvY19xdWVyeXN0ZCwKIAkudmlkaW9jX2VudW1faW5wdXQgICAgICAgID0gdmlkaW9jX2VudW1faW5wdXQsCiAJLnZpZGlvY19nX2lucHV0ICAgICAgICAgICA9IHZpZGlvY19nX2lucHV0LAogCS52aWRpb2Nfc19pbnB1dCAgICAgICAgICAgPSB2aWRpb2Nfc19pbnB1dCwKQEAgLTE4NjIsNyArMTg0Nyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmdvLT5od19sb2NrKTsKKwltdXRleF9sb2NrKCZnby0+aHdfbG9jayk7CiAJaWYgKGdvLT5zdHJlYW1pbmcpIHsKIAkJZ28tPnN0cmVhbWluZyA9IDA7CiAJCWdvNzAwN19zdHJlYW1fc3RvcChnbyk7CkBAIC0xODcwLDcgKzE4NTUsNyBAQAogCQlhYm9ydF9xdWV1ZWQoZ28pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKIAl9Ci0JdXAoJmdvLT5od19sb2NrKTsKKwltdXRleF91bmxvY2soJmdvLT5od19sb2NrKTsKIAlpZiAoZ28tPnZpZGVvX2RldikKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZ28tPnZpZGVvX2Rldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy50eHQgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy50eHQKaW5kZXggMWMyOTA3Yy4uMDZhNzZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcudHh0CisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LnR4dApAQCAtMiw3ICsyLDcgQEAKIAogUGV0ZSBFYmVybGVpbiA8cGV0ZUBzZW5zb3JheS5jb20+CiAKLVRoZSBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCBhbmQgaXMgY3VycmVudGx5IGhvc3RlZCBhdDoKK1RoZSBkcml2ZXIgd2FzIG9yaWduYWxseSByZWxlYXNlZCB1bmRlciB0aGUgR1BMIGFuZCBpcyBjdXJyZW50bHkgaG9zdGVkIGF0OgogaHR0cDovL25pa29zYXBpLm9yZy93aWtpL2luZGV4LnBocC9XSVNfR283MDA3X0xpbnV4X2RyaXZlcgogVGhlIGdvNzAwNyBmaXJtd2FyZSBjYW4gYmUgYWNxdWlyZWQgZnJvbSB0aGUgcGFja2FnZSBvbiB0aGUgc2l0ZSBhYm92ZS4KIApAQCAtMjQsMTAgKzI0LDEwIEBACiBiZWxvdy4KIAogCi1UaGUgUkVBRE1FIGZpbGVzIGZyb20gdGhlIG9yaWdpbmFsIHBhY2thZ2UgYXBwZWFycyBiZWxvdzoKK1RoZSBSRUFETUUgZmlsZXMgZnJvbSB0aGUgb3JpZ25hbCBwYWNrYWdlIGFwcGVhciBiZWxvdzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICBXSVMgR083MDA3U0IgUHVibGljIExpbnV4IERyaXZlcgorCQkgICAgIFdJUyBHTzcwMDdTQiBQdWJsaWMgTGludXggRHJpdmVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC03OCwyMyArNzgsMjMgQEAKIGZvciBjdXN0b20tYnVpbHQga2VybmVscywgdGhlIGZvbGxvd2luZyBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiB0aGUKIGtlcm5lbCBhcyBidWlsdC1pbiBvciBtb2R1bGVzOgogCi0gICAgICAgIENPTkZJR19IT1RQTFVHICAgICAgICAgICAtIFN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgZGV2aWNlcwotICAgICAgICBDT05GSUdfTU9EVUxFUyAgICAgICAgICAgLSBFbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSAgICAgICAgQ09ORklHX0tNT0QgICAgICAgICAgICAgIC0gQXV0b21hdGljIGtlcm5lbCBtb2R1bGUgbG9hZGluZwotICAgICAgICBDT05GSUdfRldfTE9BREVSICAgICAgICAgLSBIb3RwbHVnIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydAotICAgICAgICBDT05GSUdfSTJDICAgICAgICAgICAgICAgLSBJMkMgc3VwcG9ydAotICAgICAgICBDT05GSUdfVklERU9fREVWICAgICAgICAgLSBWaWRlbyBGb3IgTGludXgKLSAgICAgICAgQ09ORklHX1NPVU5EICAgICAgICAgICAgIC0gU291bmQgY2FyZCBzdXBwb3J0Ci0gICAgICAgIENPTkZJR19TTkQgICAgICAgICAgICAgICAtIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotICAgICAgICBDT05GSUdfVVNCICAgICAgICAgICAgICAgLSBTdXBwb3J0IGZvciBIb3N0LXNpZGUgVVNCCi0gICAgICAgIENPTkZJR19VU0JfREVWSUNFRlMgICAgICAtIFVTQiBkZXZpY2UgZmlsZXN5c3RlbQotICAgICAgICBDT05GSUdfVVNCX0VIQ0lfSENEICAgICAgLSBFSENJIEhDRCAoVVNCIDIuMCkgc3VwcG9ydAorCUNPTkZJR19IT1RQTFVHICAgICAgICAgICAtIFN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgZGV2aWNlcworCUNPTkZJR19NT0RVTEVTICAgICAgICAgICAtIEVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorCUNPTkZJR19LTU9EICAgICAgICAgICAgICAtIEF1dG9tYXRpYyBrZXJuZWwgbW9kdWxlIGxvYWRpbmcKKwlDT05GSUdfRldfTE9BREVSICAgICAgICAgLSBIb3RwbHVnIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydAorCUNPTkZJR19JMkMgICAgICAgICAgICAgICAtIEkyQyBzdXBwb3J0CisJQ09ORklHX1ZJREVPX0RFViAgICAgICAgIC0gVmlkZW8gRm9yIExpbnV4CisJQ09ORklHX1NPVU5EICAgICAgICAgICAgIC0gU291bmQgY2FyZCBzdXBwb3J0CisJQ09ORklHX1NORCAgICAgICAgICAgICAgIC0gQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisJQ09ORklHX1VTQiAgICAgICAgICAgICAgIC0gU3VwcG9ydCBmb3IgSG9zdC1zaWRlIFVTQgorCUNPTkZJR19VU0JfREVWSUNFRlMgICAgICAtIFVTQiBkZXZpY2UgZmlsZXN5c3RlbQorCUNPTkZJR19VU0JfRUhDSV9IQ0QgICAgICAtIEVIQ0kgSENEIChVU0IgMi4wKSBzdXBwb3J0CiAKIEFkZGl0aW9uYWxseSwgdG8gdXNlIHRoZSBleGFtcGxlIGFwcGxpY2F0aW9uLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgbmVlZCB0bwogYmUgZW5hYmxlZCBpbiB0aGUgQUxTQSBzZWN0aW9uOgogCi0gICAgICAgIENPTkZJR19TTkRfTUlYRVJfT1NTICAgICAtIE9TUyBNaXhlciBBUEkKLSAgICAgICAgQ09ORklHX1NORF9QQ01fT1NTICAgICAgIC0gT1NTIFBDTSAoZGlnaXRhbCBhdWRpbykgQVBJCisJQ09ORklHX1NORF9NSVhFUl9PU1MgICAgIC0gT1NTIE1peGVyIEFQSQorCUNPTkZJR19TTkRfUENNX09TUyAgICAgICAtIE9TUyBQQ00gKGRpZ2l0YWwgYXVkaW8pIEFQSQogCiBUaGUgaG90cGx1ZyBzY3JpcHRzLCBhbG9uZyB3aXRoIHRoZSBmeGxvYWQgdXRpbGl0eSwgbXVzdCBhbHNvIGJlIGluc3RhbGxlZC4KIFRoZXNlIHNjcmlwdHMgY2FuIGJlIG9idGFpbmVkIGZyb20gPGh0dHA6Ly9saW51eC1ob3RwbHVnLnNvdXJjZWZvcmdlLm5ldC8+LgpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIE1vc3QgdXNlcnMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGJ5IHNpbXBseSBydW5uaW5nOgogCi0gICAgICAgICQgbWFrZQorCSQgbWFrZQogCiBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgZHJpdmVyIGtpdC4gIEZpcnN0IHRoZSBrZXJuZWwgbW9kdWxlcwogd2lsbCBiZSBidWlsdCwgZm9sbG93ZWQgYnkgdGhlIGV4YW1wbGUgYXBwbGljYXRpb25zLgpAQCAtMTE3LDEyICsxMTcsMTIgQEAKIG90aGVyIHRoYW4gdGhlIGN1cnJlbnRseS1ydW5uaW5nIGtlcm5lbCwgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBuZWVkCiB0byBiZSBwYXNzZWQgdG8gbWFrZSB0byBzcGVjaWZ5IHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeToKIAotICAgICAgICAkIG1ha2UgS0VSTkVMU1JDPS91c3Ivc3JjL2xpbnV4LTIuNi4xMC1jdXN0b20zCisJJCBtYWtlIEtFUk5FTFNSQz0vdXNyL3NyYy9saW51eC0yLjYuMTAtY3VzdG9tMwogCiBPbmNlIHRoZSBjb21waWxlIGNvbXBsZXRlcywgdGhlIGRyaXZlciBhbmQgZmlybXdhcmUgZmlsZXMgc2hvdWxkIGJlCiBpbnN0YWxsZWQgYnkgcnVubmluZzoKIAotICAgICAgICAkIG1ha2UgaW5zdGFsbAorCSQgbWFrZSBpbnN0YWxsCiAKIFRoZSBrZXJuZWwgbW9kdWxlcyB3aWxsIGJlIHBsYWNlZCBpbiAiL2xpYi9tb2R1bGVzLzxLRVJORUwgVkVSU0lPTj4vZXh0cmEiCiBhbmQgdGhlIGZpcm13YXJlIGZpbGVzIHdpbGwgYmUgcGxhY2VkIGluIHRoZSBhcHByb3ByaWF0ZSBob3RwbHVnIGZpcm13YXJlCkBAIC0yMDAsNyArMjAwLDcgQEAKIFRvIHZlcmlmeSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHBsYWNlZCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbiwKIGV4ZWN1dGU6CiAKLSAgICAgICAgJCBtb2Rwcm9iZSAtYyB8IGdyZXAgd2lzLXNvbnktdHVuZXIKKwkkIG1vZHByb2JlIC1jIHwgZ3JlcCB3aXMtc29ueS10dW5lcgogCiBJZiB0aGUgY29uZmlndXJhdGlvbiBsaW5lIGFwcGVhcnMsIHRoZW4gbW9kcHJvYmUgd2lsbCBwYXNzIHRoZSBwYXJhbWV0ZXJzCiBjb3JyZWN0bHkgdGhlIG5leHQgdGltZSB0aGUgd2lzLXNvbnktdHVuZXIgbW9kdWxlIGlzIGxvYWRlZCBpbnRvIHRoZQpAQCAtMjIzLDcgKzIyMyw3IEBACiBoYXJkd2FyZSBhbmQgd2lsbCByZWNvcmQgdmlkZW8gYW5kIGF1ZGlvIHRvIGFuIEFWSSBmaWxlIGZvciBhIHNwZWNpZmllZAogbnVtYmVyIG9mIHNlY29uZHMuICBGb3IgZXhhbXBsZToKIAotICAgICAgICAkIGFwcHMvZ29yZWNvcmQgLWR1cmF0aW9uIDYwIGNhcHR1cmUuYXZpCisJJCBhcHBzL2dvcmVjb3JkIC1kdXJhdGlvbiA2MCBjYXB0dXJlLmF2aQogCiBJZiB0aGlzIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1Y2Nlc3NmdWxseSByZWNvcmQgYW4gQVZJIGZpbGUsIHRoZSBlcnJvcgogbWVzc2FnZXMgcHJvZHVjZWQgYnkgZ29yZWNvcmQgYW5kIHJlY29yZGVkIGluIHRoZSBzeXN0ZW0gbG9nICh1c3VhbGx5IGluCkBAIC0yODYsMzUgKzI4NiwzNSBAQAogCiAgICAgRmllbGRzIGluIHN0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXM6CiAKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIGluIGVhY2gKLSAgICAgICAgICBnb3Bfc2l6ZSAgICAgICAgICAgICAgICAgICBHcm91cCBPZiBQaWN0dXJlczsgaS5lLiB0aGUgbWF4aW11bQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBmcmFtZXMgbWludXMgb25lIGJldHdlZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIGtleSBmcmFtZS4KKwlfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgaW4gZWFjaAorCSAgZ29wX3NpemUgICAgICAgICAgICAgICAgICAgR3JvdXAgT2YgUGljdHVyZXM7IGkuZS4gdGhlIG1heGltdW0KKwkJCQkgICAgIG51bWJlciBvZiBmcmFtZXMgbWludXMgb25lIGJldHdlZW4KKwkJCQkgICAgIGVhY2gga2V5IGZyYW1lLgogCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlcXVlbnRpYWwKLSAgICAgICAgICBtYXhfYl9mcmFtZXMgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsbHktcHJlZGljdGVkIGZyYW1lcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQi1mcmFtZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLikKKwlfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZXF1ZW50aWFsCisJICBtYXhfYl9mcmFtZXMgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsbHktcHJlZGljdGVkIGZyYW1lcy4KKwkJCQkgICAgIChCLWZyYW1lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQuKQogCi0gICAgICAgIGVudW0gZ283MDA3X2FzcGVjdF9yYXRpbyAgICAgVGhlIGFzcGVjdCByYXRpbyB0byBiZSBlbmNvZGVkIGluIHRoZQotICAgICAgICAgIGFzcGVjdF9yYXRpbyAgICAgICAgICAgICAgIG1ldGEtZGF0YSBvZiB0aGUgY29tcHJlc3NlZCBmb3JtYXQuCisJZW51bSBnbzcwMDdfYXNwZWN0X3JhdGlvICAgICBUaGUgYXNwZWN0IHJhdGlvIHRvIGJlIGVuY29kZWQgaW4gdGhlCisJICBhc3BlY3RfcmF0aW8gICAgICAgICAgICAgICBtZXRhLWRhdGEgb2YgdGhlIGNvbXByZXNzZWQgZm9ybWF0LgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvaWNlcyBhcmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT18xXzEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19OVFNDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT180XzNfUEFMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X0FTUEVDVF9SQVRJT18xNl85X05UU0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfUEFMCisJCQkJICAgICBDaG9pY2VzIGFyZToKKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT18xXzEKKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT180XzNfTlRTQworCQkJCQlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19QQUwKKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT18xNl85X05UU0MKKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT18xNl85X1BBTAogCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgQml0LXdpc2UgT1Igb2YgY29udHJvbCBmbGFncyAoYmVsb3cpCi0gICAgICAgICAgZmxhZ3MKKwlfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIEJpdC13aXNlIE9SIG9mIGNvbnRyb2wgZmxhZ3MgKGJlbG93KQorCSAgZmxhZ3MKIAogICAgIEZsYWdzIGluIHN0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXM6CiAKLSAgICAgICAgR083MDA3X0NPTVBfQ0xPU0VEX0dPUCAgICAgICBPbmx5IHByb2R1Y2Ugc2VsZi1jb250YWluZWQgR09QcywgdXNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb2R1Y2Ugc3RyZWFtcyBhcHByb3ByaWF0ZSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gc2Vla2luZy4KKwlHTzcwMDdfQ09NUF9DTE9TRURfR09QICAgICAgIE9ubHkgcHJvZHVjZSBzZWxmLWNvbnRhaW5lZCBHT1BzLCB1c2VkCisJCQkJICAgICB0byBwcm9kdWNlIHN0cmVhbXMgYXBwcm9wcmlhdGUgZm9yCisJCQkJICAgICByYW5kb20gc2Vla2luZy4KIAotICAgICAgICBHTzcwMDdfQ09NUF9PTUlUX1NFUV9IRUFERVIgIE9taXQgdGhlIHN0cmVhbSBzZXF1ZW5jZSBoZWFkZXIuCisJR083MDA3X0NPTVBfT01JVF9TRVFfSEVBREVSICBPbWl0IHRoZSBzdHJlYW0gc2VxdWVuY2UgaGVhZGVyLgogCiAKICAgR083MDA3SU9DX1NfTVBFR19QQVJBTVMsIEdPNzAwN0lPQ19HX01QRUdfUEFSQU1TCkBAIC0zMzcsNTYgKzMzNyw1NiBAQAogCiAgICAgRmllbGRzIGluIHN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXM6CiAKLSAgICAgICAgZW51bSBnbzcwMDdfbXBlZ192aWRlb19zdGFuZGFyZAotICAgICAgICAgIG1wZWdfdmlkZW9fc3RhbmRhcmQgICAgICAgIFRoZSBNUEVHIHZpZGVvIHN0YW5kYXJkIGluIHdoaWNoIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3MgdGhlIHZpZGVvLgorCWVudW0gZ283MDA3X21wZWdfdmlkZW9fc3RhbmRhcmQKKwkgIG1wZWdfdmlkZW9fc3RhbmRhcmQgICAgICAgIFRoZSBNUEVHIHZpZGVvIHN0YW5kYXJkIGluIHdoaWNoIHRvCisJCQkJICAgICBjb21wcmVzcyB0aGUgdmlkZW8uCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9pY2VzIGFyZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFR19WSURFT19NUEVHMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHX1ZJREVPX01QRUcyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUdfVklERU9fTVBFRzQKKwkJCQkgICAgIENob2ljZXMgYXJlOgorCQkJCQlHTzcwMDdfTVBFR19WSURFT19NUEVHMQorCQkJCQlHTzcwMDdfTVBFR19WSURFT19NUEVHMgorCQkJCQlHTzcwMDdfTVBFR19WSURFT19NUEVHNAogCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgQml0LXdpc2UgT1Igb2YgY29udHJvbCBmbGFncyAoYmVsb3cpCi0gICAgICAgICAgZmxhZ3MKKwlfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIEJpdC13aXNlIE9SIG9mIGNvbnRyb2wgZmxhZ3MgKGJlbG93KQorCSAgZmxhZ3MKIAotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm9maWxlIGFuZCBsZXZlbCBpbmRpY2F0aW9uIHRvIGJlCi0gICAgICAgICAgcGFsaSAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVkIGluIHRoZSBzZXF1ZW5jZSBoZWFkZXIuICBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgb25seSB1c2VkIGFzIGFuIGluZGljYXRvciB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLCBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBNUEVHCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgdXNlZCBpbiB0aGUgdmlkZW8gc3RyZWFtLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCB2YWxpZCBmb3IgTVBFRzEuCisJX191MzIgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvZmlsZSBhbmQgbGV2ZWwgaW5kaWNhdGlvbiB0byBiZQorCSAgcGFsaSAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVkIGluIHRoZSBzZXF1ZW5jZSBoZWFkZXIuICBUaGlzCisJCQkJICAgICBpcyBvbmx5IHVzZWQgYXMgYW4gaW5kaWNhdG9yIHRvIHRoZQorCQkJCSAgICAgZGVjb2RlciwgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgTVBFRworCQkJCSAgICAgZmVhdHVyZXMgdXNlZCBpbiB0aGUgdmlkZW8gc3RyZWFtLgorCQkJCSAgICAgTm90IHZhbGlkIGZvciBNUEVHMS4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob2ljZXMgZm9yIE1QRUcyIGFyZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzJfUFJPRklMRV9NQUlOX01BSU4KKwkJCQkgICAgIENob2ljZXMgZm9yIE1QRUcyIGFyZToKKwkJCQkJR083MDA3X01QRUcyX1BST0ZJTEVfTUFJTl9NQUlOCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9pY2VzIGZvciBNUEVHNCBhcmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0w0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDUKKwkJCQkgICAgIENob2ljZXMgZm9yIE1QRUc0IGFyZToKKwkJCQkJR083MDA3X01QRUc0X1BST0ZJTEVfU19MMAorCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wxCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDIKKwkJCQkJR083MDA3X01QRUc0X1BST0ZJTEVfU19MMworCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wxCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDIKKwkJCQkJR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMworCQkJCQlHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0w0CisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wwCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wxCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wyCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wzCisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0w0CisJCQkJCUdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0w1CiAKICAgICBGbGFncyBpbiBzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zOgogCi0gICAgICAgIEdPNzAwN19NUEVHX0ZPUkNFX0RWRF9NT0RFICAgRm9yY2UgYWxsIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cmF0ZSBjb250cm9sIHNldHRpbmdzIHRvIGNvbXBseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRFZEIE1QRUcyIHN0cmVhbSByZXF1aXJlbWVudHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvdmVycmlkZXMgbW9zdCBjb21wcmVzc2lvbiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRyYXRlIHNldHRpbmdzIQorCUdPNzAwN19NUEVHX0ZPUkNFX0RWRF9NT0RFICAgRm9yY2UgYWxsIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYW5kCisJCQkJICAgICBiaXRyYXRlIGNvbnRyb2wgc2V0dGluZ3MgdG8gY29tcGx5CisJCQkJICAgICB3aXRoIERWRCBNUEVHMiBzdHJlYW0gcmVxdWlyZW1lbnRzLgorCQkJCSAgICAgVGhpcyBvdmVycmlkZXMgbW9zdCBjb21wcmVzc2lvbiBhbmQKKwkJCQkgICAgIGJpdHJhdGUgc2V0dGluZ3MhCiAKLSAgICAgICAgR083MDA3X01QRUdfT01JVF9HT1BfSEVBREVSICBPbWl0IHRoZSBHT1AgaGVhZGVyLgorCUdPNzAwN19NUEVHX09NSVRfR09QX0hFQURFUiAgT21pdCB0aGUgR09QIGhlYWRlci4KIAotICAgICAgICBHTzcwMDdfTVBFR19SRVBFQVRfU0VRSEVBREVSIFJlcGVhdCB0aGUgTVBFRyBzZXF1ZW5jZSBoZWFkZXIgYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RhcnQgb2YgZWFjaCBHT1AuCisJR083MDA3X01QRUdfUkVQRUFUX1NFUUhFQURFUiBSZXBlYXQgdGhlIE1QRUcgc2VxdWVuY2UgaGVhZGVyIGF0CisJCQkJICAgICB0aGUgc3RhcnQgb2YgZWFjaCBHT1AuCiAKIAogICBHTzcwMDdJT0NfU19CSVRSQVRFLCBHTzcwMDdJT0NfR19CSVRSQVRFCkBAIC00MDQsNyArNDA0LDcgQEAKIAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgSW5zdGFsbGluZyB0aGUgV0lTIFBDSSBWb3lhZ2VyIERyaXZlcgorCQkgICBJbnN0YWxsaW5nIHRoZSBXSVMgUENJIFZveWFnZXIgRHJpdmVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIFdJUyBQQ0kgVm95YWdlciBkcml2ZXIgcmVxdWlyZXMgc2V2ZXJhbCBwYXRjaGVzIHRvIHRoZSBMaW51eCAyLjYuMTEueApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCmluZGV4IDE3MDZmYmYuLjhjODVhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKQEAgLTIxLDEyICsyMSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSAiczIyNTAtbG9hZGVyLmgiCiAjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKICNpbmNsdWRlICJ3aXMtaTJjLmgiCiAKLWV4dGVybiBpbnQgczIyNTBsb2FkZXJfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHMyMjUwbG9hZGVyX2NsZWFudXAodm9pZCk7Ci0KICNkZWZpbmUgVExWMzIwX0FERFJFU1MgICAgICAweDM0CiAjZGVmaW5lIFZQWDMyMl9BRERSX0FOQUxPR0NPTlRST0wxCTB4MDIKICNkZWZpbmUgVlBYMzIyX0FERFJfQlJJR0hUTkVTUzAJCTB4MDEyNwpAQCAtMzQsNyArMzIsNyBAQAogI2RlZmluZSBWUFgzMjJfQUREUl9DT05UUkFTVDAJCTB4MDEyOAogI2RlZmluZSBWUFgzMjJfQUREUl9DT05UUkFTVDEJCTB4MDEzMgogI2RlZmluZSBWUFgzMjJfQUREUl9IVUUJCQkweDAwZGMKLSNkZWZpbmUgVlBYMzIyX0FERFJfU0FUCSAJICAgICAgICAweDAwMzAKKyNkZWZpbmUgVlBYMzIyX0FERFJfU0FUCQkJMHgwMDMwCiAKIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIHsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CkBAIC00Myw3ICs0MSw3IEBACiAKIHN0cnVjdCBnbzcwMDdfdXNiIHsKIAlzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCAqYm9hcmQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSBpMmNfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggaTJjX2xvY2s7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKIAlzdHJ1Y3QgdXJiICp2aWRlb191cmJzWzhdOwogCXN0cnVjdCB1cmIgKmF1ZGlvX3VyYnNbOF07CkBAIC0xMTQsNyArMTEyLDcgQEAKIH07CiAKIHN0cnVjdCBzMjI1MCB7Ci0JaW50IHN0ZDsKKwl2NGwyX3N0ZF9pZCBzdGQ7CiAJaW50IGlucHV0OwogCWludCBicmlnaHRuZXNzOwogCWludCBjb250cmFzdDsKQEAgLTE2NSw3ICsxNjMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXVzYiA9IGdvLT5ocGlfY29udGV4dDsKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ1c2ItPmkyY19sb2NrKSAhPSAwKSB7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgIT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJpMmMgbG9jayBmYWlsZWRcbiIpOwogCQlrZnJlZShidWYpOwogCQlyZXR1cm4gLUVJTlRSOwpAQCAtMTc1LDcgKzE3Myw3IEBACiAJCQkJICAgICAgIGJ1ZiwKIAkJCQkgICAgICAgMTYsIDEpOwogCi0JdXAoJnVzYi0+aTJjX2xvY2spOworCW11dGV4X3VubG9jaygmdXNiLT5pMmNfbG9jayk7CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMDMsMTkgKzIwMSwyMyBAQAogCW1lbXNldChidWYsIDB4Y2QsIDYpOwogCiAJdXNiID0gZ28tPmhwaV9jb250ZXh0OwotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnVzYi0+aTJjX2xvY2spICE9IDApIHsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1c2ItPmkyY19sb2NrKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImkyYyBsb2NrIGZhaWxlZFxuIik7CisJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiAtRUlOVFI7CiAJfQotCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDU3LCBhZGRyLCB2YWwsIGJ1ZiwgMTYsIDEpIDwgMCkKKwlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg1NywgYWRkciwgdmFsLCBidWYsIDE2LCAxKSA8IDApIHsKKwkJa2ZyZWUoYnVmKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCi0JdXAoJnVzYi0+aTJjX2xvY2spOworCW11dGV4X3VubG9jaygmdXNiLT5pMmNfbG9jayk7CiAJaWYgKGJ1ZlswXSA9PSAwKSB7CiAJCXVuc2lnbmVkIGludCBzdWJhZGRyLCB2YWxfcmVhZDsKIAogCQlzdWJhZGRyID0gKGJ1Zls0XSA8PCA4KSArIGJ1Zls1XTsKIAkJdmFsX3JlYWQgPSAoYnVmWzJdIDw8IDgpICsgYnVmWzNdOworCQlrZnJlZShidWYpOwogCQlpZiAodmFsX3JlYWQgIT0gdmFsKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJpbnZhbGlkIGZwIHdyaXRlICV4ICV4XG4iLAogCQkJICAgICAgIHZhbF9yZWFkLCB2YWwpOwpAQCAtMjI2LDggKzIyOCwxMCBAQAogCQkJICAgICAgIHN1YmFkZHIsIGFkZHIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQl9IGVsc2UKKwl9IGVsc2UgeworCQlrZnJlZShidWYpOwogCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAKIAkvKiBzYXZlIGxhc3QgMTJiIHZhbHVlICovCiAJaWYgKGFkZHIgPT0gMHgxMmIpCkBAIC0yMzYsNiArMjQwLDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmVhZF9yZWdfZnAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGFkZHIsIHUxNiAqdmFsKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2I7CisJdTggKmJ1ZjsKKworCWlmIChnbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChnby0+c3RhdHVzID09IFNUQVRVU19TSFVURE9XTikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWJ1ZiA9IGt6YWxsb2MoMTYsIEdGUF9LRVJORUwpOworCisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCisKKwltZW1zZXQoYnVmLCAweGNkLCA2KTsKKwl1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJpMmMgbG9jayBmYWlsZWRcbiIpOworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVJTlRSOworCX0KKwlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg1OCwgYWRkciwgMCwgYnVmLCAxNiwgMSkgPCAwKSB7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl1cCgmdXNiLT5pMmNfbG9jayk7CisKKwkqdmFsID0gKGJ1ZlswXSA8PCA4KSB8IGJ1ZlsxXTsKKwlrZnJlZShidWYpOworCisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludCB3cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpyZWdzKQogewogCWludCBpOwpAQCAtMzUwLDE0ICszOTMsNDIgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CiAJCWludCB2YWx1ZTE7CisJCXUxNiBvbGR2YWx1ZTsKIAogCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCXByaW50ayhLRVJOX0lORk8gInMyMjUwOiBmdXR1cmUgc2V0dGluZ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEwMCkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAxMDA7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJCXZhbHVlMSA9IChkZWMtPmJyaWdodG5lc3MgLSA1MCkgKiAyNTUgLyAxMDA7CisJCQlyZWFkX3JlZ19mcChjbGllbnQsIFZQWDMyMl9BRERSX0JSSUdIVE5FU1MwLCAmb2xkdmFsdWUpOworCQkJd3JpdGVfcmVnX2ZwKGNsaWVudCwgVlBYMzIyX0FERFJfQlJJR0hUTkVTUzAsCisJCQkJICAgICB2YWx1ZTEgfCAob2xkdmFsdWUgJiB+MHhmZikpOworCQkJcmVhZF9yZWdfZnAoY2xpZW50LCBWUFgzMjJfQUREUl9CUklHSFRORVNTMSwgJm9sZHZhbHVlKTsKKwkJCXdyaXRlX3JlZ19mcChjbGllbnQsIFZQWDMyMl9BRERSX0JSSUdIVE5FU1MxLAorCQkJCSAgICAgdmFsdWUxIHwgKG9sZHZhbHVlICYgfjB4ZmYpKTsKKwkJCXdyaXRlX3JlZ19mcChjbGllbnQsIDB4MTQwLCAweDYwKTsKKwkJCWJyZWFrOwogCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiczIyNTA6IGZ1dHVyZSBzZXR0aW5nXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGN0cmwtPnZhbHVlID4gMTAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAxMDA7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5jb250cmFzdCA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJdmFsdWUxID0gZGVjLT5jb250cmFzdCAqIDB4NDAgLyAxMDA7CisJCQlpZiAodmFsdWUxID4gMHgzZikKKwkJCQl2YWx1ZTEgPSAweDNmOyAvKiBtYXggKi8KKwkJCXJlYWRfcmVnX2ZwKGNsaWVudCwgVlBYMzIyX0FERFJfQ09OVFJBU1QwLCAmb2xkdmFsdWUpOworCQkJd3JpdGVfcmVnX2ZwKGNsaWVudCwgVlBYMzIyX0FERFJfQ09OVFJBU1QwLAorCQkJCSAgICAgdmFsdWUxIHwgKG9sZHZhbHVlICYgfjB4M2YpKTsKKwkJCXJlYWRfcmVnX2ZwKGNsaWVudCwgVlBYMzIyX0FERFJfQ09OVFJBU1QxLCAmb2xkdmFsdWUpOworCQkJd3JpdGVfcmVnX2ZwKGNsaWVudCwgVlBYMzIyX0FERFJfQ09OVFJBU1QxLAorCQkJCSAgICAgdmFsdWUxIHwgKG9sZHZhbHVlICYgfjB4M2YpKTsKKwkJCXdyaXRlX3JlZ19mcChjbGllbnQsIDB4MTQwLCAweDYwKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCkBAIC01NDEsNyArNjEyLDcgQEAKIAlkZWMtPmF1ZGlvX2lucHV0ID0gMDsKIAl3cml0ZV9yZWcoY2xpZW50LCAweDA4LCAweDAyKTsgLyogTGluZSBJbiAqLwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgPT0gMCkgeworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVzYi0+aTJjX2xvY2spID09IDApIHsKIAkJZGF0YSA9IGt6YWxsb2MoMTYsIEdGUF9LRVJORUwpOwogCQlpZiAoZGF0YSAhPSBOVUxMKSB7CiAJCQlpbnQgcmM7CkBAIC01NjAsNyArNjMxLDcgQEAKIAkJCX0KIAkJCWtmcmVlKGRhdGEpOwogCQl9Ci0JCXVwKCZ1c2ItPmkyY19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ1c2ItPmkyY19sb2NrKTsKIAl9CiAKIAlwcmludGsoInMyMjUwOiBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1sb2FkZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtbG9hZGVyLmMKaW5kZXggYmIyMjM0Ny4uZDdiZjgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1sb2FkZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWxvYWRlci5jCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIE1BWF9ERVZJQ0VTIDI1NgogCiBzdGF0aWMgcGRldmljZV9leHRlbnNpb25fdCBzMjI1MF9kZXZfdGFibGVbTUFYX0RFVklDRVNdOwotc3RhdGljIERFQ0xBUkVfTVVURVgoczIyNTBfZGV2X3RhYmxlX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoczIyNTBfZGV2X3RhYmxlX211dGV4KTsKIAogI2RlZmluZSB0b19zMjI1MGxvYWRlcl9kZXZfY29tbW9uKGQpIGNvbnRhaW5lcl9vZihkLCBkZXZpY2VfZXh0ZW5zaW9uX3QsIGtyZWYpCiBzdGF0aWMgdm9pZCBzMjI1MGxvYWRlcl9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCkBAIC02Nyw3ICs2Nyw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgaGFuZGxlIG11bHRpcGxlIGNvbmZpZ1xuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JZG93bigmczIyNTBfZGV2X3RhYmxlX211dGV4KTsKKwltdXRleF9sb2NrKCZzMjI1MF9kZXZfdGFibGVfbXV0ZXgpOwogCiAJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgTUFYX0RFVklDRVM7IG1pbm9yKyspIHsKIAkJaWYgKHMyMjUwX2Rldl90YWJsZVttaW5vcl0gPT0gTlVMTCkKQEAgLTk2LDcgKzk2LDcgQEAKIAogCWtyZWZfaW5pdCgmKHMtPmtyZWYpKTsKIAotCXVwKCZzMjI1MF9kZXZfdGFibGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmczIyNTBfZGV2X3RhYmxlX211dGV4KTsKIAogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgUzIyNTBfTE9BREVSX0ZJUk1XQVJFLCAmdXNiZGV2LT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMTI4LDcgKzEyOCw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWxlZDoKLQl1cCgmczIyNTBfZGV2X3RhYmxlX211dGV4KTsKKwltdXRleF91bmxvY2soJnMyMjUwX2Rldl90YWJsZV9tdXRleCk7CiBmYWlsZWQyOgogCWlmIChzKQogCQlrcmVmX3B1dCgmKHMtPmtyZWYpLCBzMjI1MGxvYWRlcl9kZWxldGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwppbmRleCBjZDE5YmU2Li4wM2M0ZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCmluZGV4IDZjMzQyN2IuLjUwNmRjYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCkBAIC0xMTEsNyArMTExLDggQEAKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDIsIDB4NDAgfCAoKmlucHV0IDw8IDEpKTsKIAkJYnJlYWs7CiAJfQotI2lmIDAgICAvKiBUaGUgc2NhbGVyIG9uIHRoaXMgdGhpbmcgc2VlbXMgdG8gYmUgaG9ycmlibHkgYnJva2VuICovCisjaWYgMAorCS8qIFRoZSBzY2FsZXIgb24gdGhpcyB0aGluZyBzZWVtcyB0byBiZSBob3JyaWJseSBicm9rZW4gKi8KIAljYXNlIERFQ09ERVJfU0VUX1JFU09MVVRJT046CiAJewogCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uICpyZXMgPSBhcmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggNjYwYTljMS4uMWZhMThmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMzksMTQgKzM5LDE0IEBACiBFWFBPUlRfU1lNQk9MKGlpb19kZXZ0KTsKIAogI2RlZmluZSBJSU9fREVWX01BWCAyNTYKLXN0YXRpYyBjaGFyICppaW9fbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKmlpb19kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImlpby8lcyIsIGRldl9uYW1lKGRldikpOwogfQogCiBzdHJ1Y3QgY2xhc3MgaWlvX2NsYXNzID0gewogCS5uYW1lID0gImlpbyIsCi0JLm5vZGVuYW1lID0gaWlvX25vZGVuYW1lLAorCS5kZXZub2RlID0gaWlvX2Rldm5vZGUsCiB9OwogRVhQT1JUX1NZTUJPTChpaW9fY2xhc3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IDNmNDk4ZjYuLjkwZmQ0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC0yMDYwLDcgKzIwNjAsNyBAQAogICAgIEJPT0xFQU4JCUFkaG9jQkdKb2luZWQ7CQkvLyBJbmRpY2F0ZSBBZGhvYyBCL0cgSm9pbi4KICAgICBCT09MRUFOCQlBZGhvYzIwTkpvaW5lZDsJCS8vIEluZGljYXRlIEFkaG9jIDIwTUh6IE4gSm9pbi4KICNlbmRpZgotCS8vIE5ldyBmb3IgV1BBLCB3aW5kb3dzIHdhbnQgdXMgdG8gdG8ga2VlcCBhc3NvY2lhdGlvbiBpbmZvcm1hdGlvbiBhbmQKKwkvLyBOZXcgZm9yIFdQQSwgd2luZG93cyB3YW50IHVzIHRvIGtlZXAgYXNzb2NpYXRpb24gaW5mb3JtYXRpb24gYW5kCiAJLy8gRml4ZWQgSUVzIGZyb20gbGFzdCBhc3NvY2lhdGlvbiByZXNwb25zZQogCU5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OICAgICBBc3NvY0luZm87CiAJVVNIT1JUICAgICAgIFJlcVZhcklFTGVuOyAgICAgICAgICAgICAgICAvLyBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKaW5kZXggMTJkNDE0ZC4uYmU5OWViMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKQEAgLTI1OTEsMyArMjU5MSw0IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPiIpOworTU9EVUxFX0FMSUFTKCJzcGk6Y3gzMTEweCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL0tjb25maWcgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZwppbmRleCBhODZlOTUyLi5iZjdjNjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZwpAQCAtMTUsNiArMTUsNyBAQAogCiBjb25maWcgVEhFUk1BTF9IV01PTgogCWJvb2wgIkhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFRIRVJNQUwKIAlkZXBlbmRzIG9uIEhXTU9OPXkgfHwgSFdNT049VEhFUk1BTAogCWhlbHAKIAkgIFRoZSBnZW5lcmljIHRoZXJtYWwgc3lzZnMgZHJpdmVyJ3MgaGFyZHdhcmUgbW9uaXRvcmluZyBzdXBwb3J0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZwppbmRleCBkY2Q0OWYxLi5lYmQ3MjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL0tjb25maWcKQEAgLTM5LDYgKzM5LDcgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9BVDkxCiAJZGVmYXVsdCB5IGlmIEFSQ0hfUE5YNDAwOCAmJiBJMkMKIAlkZWZhdWx0IHkgaWYgTUZEX1RDNjM5M1hCCisJZGVmYXVsdCB5IGlmIEFSQ0hfVzkwWDkwMAogCSMgUFBDOgogCWRlZmF1bHQgeSBpZiBTVEIwM3h4eAogCWRlZmF1bHQgeSBpZiBQUENfTVBDNTJ4eApAQCAtNTgsNiArNTksOCBAQAogCWRlZmF1bHQgeSBpZiBQUENfODN4eAogCWRlZmF1bHQgeSBpZiBTT0NfQVUxMjAwCiAJZGVmYXVsdCB5IGlmIEFSQ0hfSVhQNFhYCisJZGVmYXVsdCB5IGlmIEFSQ0hfVzkwWDkwMAorCWRlZmF1bHQgeSBpZiBBUkNIX0FUOTFTQU05RzQ1CiAJZGVmYXVsdCBQQ0kKIAogIyBBUk0gU0ExMTExIGNoaXBzIGhhdmUgYSBub24tUENJIGJhc2VkICJPSENJLWNvbXBhdGlibGUiIFVTQiBob3N0IGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggMTljYjdkNS4uYmUzYzliOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIG9iai0kKENPTkZJR19VU0JfRkhDSV9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX1hIQ0lfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX0lTUDEzNjJfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9VMTMyX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfUjhBNjY1OTdfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSBob3N0LwpAQCAtMzksNiArNDAsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUwpCSs9IHNlcmlhbC8KIAogb2JqLSQoQ09ORklHX1VTQikJCSs9IG1pc2MvCitvYmoteQkJCQkrPSBlYXJseS8KIAogb2JqLSQoQ09ORklHX1VTQl9BVE0pCQkrPSBhdG0vCiBvYmotJChDT05GSUdfVVNCX1NQRUVEVE9VQ0gpCSs9IGF0bS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCAyYmZjNDFlLi5lMzg2MWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTYwOSw2ICs2MTAsNyBAQAogCWFjbS0+dGhyb3R0bGUgPSAwOwogCiAJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CisJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZhY20tPnBvcnQuZmxhZ3MpOwogCXJ2ID0gdHR5X3BvcnRfYmxvY2tfdGlsX3JlYWR5KCZhY20tPnBvcnQsIHR0eSwgZmlscCk7CiBkb25lOgogCW11dGV4X3VubG9jaygmYWNtLT5tdXRleCk7CkBAIC04NTgsMTAgKzg2MCw3IEBACiAJaWYgKCFBQ01fUkVBRFkoYWNtKSkKIAkJcmV0dXJuOwogCi0JLyogRklYTUU6IE5lZWRzIHRvIHN1cHBvcnQgdGhlIHR0eV9iYXVkIGludGVyZmFjZSAqLwotCS8qIEZJWE1FOiBCcm9rZW4gb24gc3BhcmMgKi8KLQluZXdsaW5lLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMycChhY21fdHR5X3NwZWVkICsKLQkJKHRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCAmIH5DQkFVREVYKSArICh0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVURFWCA/IDE1IDogMCkpOworCW5ld2xpbmUuZHdEVEVSYXRlID0gY3B1X3RvX2xlMzIodHR5X2dldF9iYXVkX3JhdGUodHR5KSk7CiAJbmV3bGluZS5iQ2hhckZvcm1hdCA9IHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIgPyAyIDogMDsKIAluZXdsaW5lLmJQYXJpdHlUeXBlID0gdGVybWlvcy0+Y19jZmxhZyAmIFBBUkVOQiA/CiAJCQkJKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQgPyAxIDogMikgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCmluZGV4IGJhNTg5ZDQuLjNlNTY0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKQEAgLTMxMyw4ICszMTMsMTMgQEAKIAlyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRlc2MtPmludGYpOwogCWlmIChyIDwgMCkKIAkJZ290byBvdXRucDsKLQlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRlc2MtPndhaXQsICF0ZXN0X2JpdChXRE1fSU5fVVNFLAotCQkJCQkJCSAgICZkZXNjLT5mbGFncykpOworCisJaWYgKCFmaWxlLT5mX2ZsYWdzICYmIE9fTk9OQkxPQ0spCisJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVzYy0+d2FpdCwgIXRlc3RfYml0KFdETV9JTl9VU0UsCisJCQkJCQkJCSZkZXNjLT5mbGFncykpOworCWVsc2UKKwkJaWYgKHRlc3RfYml0KFdETV9JTl9VU0UsICZkZXNjLT5mbGFncykpCisJCQlyID0gLUVBR0FJTjsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0zNzcsNyArMzgyLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHdkbV9yZWFkCiAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWludCBydiwgY250cjsKKwlpbnQgcnYsIGNudHIgPSAwOwogCWludCBpID0gMDsKIAlzdHJ1Y3Qgd2RtX2RldmljZSAqZGVzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIApAQCAtMzg5LDEwICszOTQsMjMgQEAKIAlpZiAoZGVzYy0+bGVuZ3RoID09IDApIHsKIAkJZGVzYy0+cmVhZCA9IDA7CiByZXRyeToKKwkJaWYgKHRlc3RfYml0KFdETV9ESVNDT05ORUNUSU5HLCAmZGVzYy0+ZmxhZ3MpKSB7CisJCQlydiA9IC1FTk9ERVY7CisJCQlnb3RvIGVycjsKKwkJfQogCQlpKys7Ci0JCXJ2ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRlc2MtPndhaXQsCi0JCQkJCSAgICAgIHRlc3RfYml0KFdETV9SRUFELCAmZGVzYy0+ZmxhZ3MpKTsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlpZiAoIXRlc3RfYml0KFdETV9SRUFELCAmZGVzYy0+ZmxhZ3MpKSB7CisJCQkJcnYgPSBjbnRyID8gY250ciA6IC1FQUdBSU47CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlydiA9IDA7CisJCX0gZWxzZSB7CisJCQlydiA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXNjLT53YWl0LAorCQkJCXRlc3RfYml0KFdETV9SRUFELCAmZGVzYy0+ZmxhZ3MpKTsKKwkJfQogCisJCS8qIG1heSBoYXZlIGhhcHBlbmVkIHdoaWxlIHdlIHNsZXB0ICovCiAJCWlmICh0ZXN0X2JpdChXRE1fRElTQ09OTkVDVElORywgJmRlc2MtPmZsYWdzKSkgewogCQkJcnYgPSAtRU5PREVWOwogCQkJZ290byBlcnI7CkBAIC00NDgsNyArNDY2LDcgQEAKIAogZXJyOgogCW11dGV4X3VubG9jaygmZGVzYy0+cmxvY2spOwotCWlmIChydiA8IDApCisJaWYgKHJ2IDwgMCAmJiBydiAhPSAtRUFHQUlOKQogCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsICJ3ZG1fcmVhZDogZXhpdCBlcnJvclxuIik7CiAJcmV0dXJuIHJ2OwogfQpAQCAtNTA2LDggKzUyNCw2IEBACiAJZGVzYyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJaWYgKHRlc3RfYml0KFdETV9ESVNDT05ORUNUSU5HLCAmZGVzYy0+ZmxhZ3MpKQogCQlnb3RvIG91dDsKLQotCTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXNjOwogCiAJcnYgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGVzYy0+aW50Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCAyNmMwOWYwLi45YmMxMTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTEwNTcsMTQgKzEwNTcsMTQgQEAKIAkucmVsZWFzZSA9CXVzYmxwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgY2hhciAqdXNibHBfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKnVzYmxwX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAidXNiLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JscF9jbGFzcyA9IHsKIAkubmFtZSA9CQkibHAlZCIsCi0JLm5vZGVuYW1lID0JdXNibHBfbm9kZW5hbWUsCisJLmRldm5vZGUgPQl1c2JscF9kZXZub2RlLAogCS5mb3BzID0JCSZ1c2JscF9mb3BzLAogCS5taW5vcl9iYXNlID0JVVNCTFBfTUlOT1JfQkFTRSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCmluZGV4IGIwOWE1MjcuLjMzM2VlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC01Nyw3ICs1Nyw5IEBACiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgY2FwYWJpbGl0aWVzIGZvciB0aGUgZGV2aWNlCi0gKiBTZWUgc2VjdGlvbiA0LjIuMS44IG9mIHRoZSBVU0JUTUMgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAqIFNlZSBzZWN0aW9uIDQuMi4xLjggb2YgdGhlIFVTQlRNQyBzcGVjaWZpY2F0aW9uLAorICogYW5kIHNlY3Rpb24gNC4yLjIgb2YgdGhlIFVTQlRNQyB1c2I0ODggc3ViY2xhc3MKKyAqIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCiAgKi8KIHN0cnVjdCB1c2J0bWNfZGV2X2NhcGFiaWxpdGllcyB7CiAJX191OCBpbnRlcmZhY2VfY2FwYWJpbGl0aWVzOwpAQCAtODYsNiArODgsOCBAQAogCWJvb2wgVGVybUNoYXJFbmFibGVkOwogCWJvb2wgYXV0b19hYm9ydDsKIAorCWJvb2wgem9tYmllOyAvKiBmZCBvZiBkaXNjb25uZWN0ZWQgZGV2aWNlICovCisKIAlzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMJY2FwYWJpbGl0aWVzOwogCXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IG11dGV4IGlvX211dGV4OwkvKiBvbmx5IG9uZSBpL28gZnVuY3Rpb24gcnVubmluZyBhdCBhIHRpbWUgKi8KQEAgLTM2NywxMyArMzcxLDEzIEBACiB7CiAJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBpbnQgbl9jaGFyYWN0ZXJzOworCXUzMiBuX2NoYXJhY3RlcnM7CiAJdTggKmJ1ZmZlcjsKIAlpbnQgYWN0dWFsOwotCWludCBkb25lOwotCWludCByZW1haW5pbmc7CisJc2l6ZV90IGRvbmU7CisJc2l6ZV90IHJlbWFpbmluZzsKIAlpbnQgcmV0dmFsOwotCWludCB0aGlzX3BhcnQ7CisJc2l6ZV90IHRoaXNfcGFydDsKIAogCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIAlkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOwpAQCAtMzg0LDYgKzM4OCwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKwlpZiAoZGF0YS0+em9tYmllKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CiAKIAlyZW1haW5pbmcgPSBjb3VudDsKIAlkb25lID0gMDsKQEAgLTQwMSwxMCArNDA5LDEwIEBACiAJCWJ1ZmZlclsxXSA9IGRhdGEtPmJUYWc7CiAJCWJ1ZmZlclsyXSA9IH4oZGF0YS0+YlRhZyk7CiAJCWJ1ZmZlclszXSA9IDA7IC8qIFJlc2VydmVkICovCi0JCWJ1ZmZlcls0XSA9ICh0aGlzX3BhcnQgLSAxMiAtIDMpICYgMjU1OwotCQlidWZmZXJbNV0gPSAoKHRoaXNfcGFydCAtIDEyIC0gMykgPj4gOCkgJiAyNTU7Ci0JCWJ1ZmZlcls2XSA9ICgodGhpc19wYXJ0IC0gMTIgLSAzKSA+PiAxNikgJiAyNTU7Ci0JCWJ1ZmZlcls3XSA9ICgodGhpc19wYXJ0IC0gMTIgLSAzKSA+PiAyNCkgJiAyNTU7CisJCWJ1ZmZlcls0XSA9ICh0aGlzX3BhcnQpICYgMjU1OworCQlidWZmZXJbNV0gPSAoKHRoaXNfcGFydCkgPj4gOCkgJiAyNTU7CisJCWJ1ZmZlcls2XSA9ICgodGhpc19wYXJ0KSA+PiAxNikgJiAyNTU7CisJCWJ1ZmZlcls3XSA9ICgodGhpc19wYXJ0KSA+PiAyNCkgJiAyNTU7CiAJCWJ1ZmZlcls4XSA9IGRhdGEtPlRlcm1DaGFyRW5hYmxlZCAqIDI7CiAJCS8qIFVzZSB0ZXJtIGNoYXJhY3Rlcj8gKi8KIAkJYnVmZmVyWzldID0gZGF0YS0+VGVybUNoYXI7CkBAIC00NTUsNiArNDYzLDIyIEBACiAJCQkgICAgICAgKGJ1ZmZlcls2XSA8PCAxNikgKwogCQkJICAgICAgIChidWZmZXJbN10gPDwgMjQpOwogCisJCS8qIEVuc3VyZSB0aGUgaW5zdHJ1bWVudCBkb2Vzbid0IGxpZSBhYm91dCBpdCAqLworCQlpZihuX2NoYXJhY3RlcnMgPiBhY3R1YWwgLSAxMikgeworCQkJZGV2X2VycihkZXYsICJEZXZpY2UgbGllcyBhYm91dCBtZXNzYWdlIHNpemU6ICV1ID4gJWRcbiIsIG5fY2hhcmFjdGVycywgYWN0dWFsIC0gMTIpOworCQkJbl9jaGFyYWN0ZXJzID0gYWN0dWFsIC0gMTI7CisJCX0KKworCQkvKiBFbnN1cmUgdGhlIGluc3RydW1lbnQgZG9lc24ndCBzZW5kIG1vcmUgYmFjayB0aGFuIHJlcXVlc3RlZCAqLworCQlpZihuX2NoYXJhY3RlcnMgPiB0aGlzX3BhcnQpIHsKKwkJCWRldl9lcnIoZGV2LCAiRGV2aWNlIHJldHVybnMgbW9yZSB0aGFuIHJlcXVlc3RlZDogJXp1ID4gJXp1XG4iLCBkb25lICsgbl9jaGFyYWN0ZXJzLCBkb25lICsgdGhpc19wYXJ0KTsKKwkJCW5fY2hhcmFjdGVycyA9IHRoaXNfcGFydDsKKwkJfQorCisJCS8qIEJvdW5kIGFtb3VudCBvZiBkYXRhIHJlY2VpdmVkIGJ5IGFtb3VudCBvZiBkYXRhIHJlcXVlc3RlZCAqLworCQlpZiAobl9jaGFyYWN0ZXJzID4gdGhpc19wYXJ0KQorCQkJbl9jaGFyYWN0ZXJzID0gdGhpc19wYXJ0OworCiAJCS8qIENvcHkgYnVmZmVyIHRvIHVzZXIgc3BhY2UgKi8KIAkJaWYgKGNvcHlfdG9fdXNlcihidWYgKyBkb25lLCAmYnVmZmVyWzEyXSwgbl9jaGFyYWN0ZXJzKSkgewogCQkJLyogVGhlcmUgbXVzdCBoYXZlIGJlZW4gYW4gYWRkcmVzc2luZyBwcm9ibGVtICovCkBAIC00NjMsOCArNDg3LDExIEBACiAJCX0KIAogCQlkb25lICs9IG5fY2hhcmFjdGVyczsKLQkJaWYgKG5fY2hhcmFjdGVycyA8IFVTQlRNQ19TSVpFX0lPQlVGRkVSKQorCQkvKiBUZXJtaW5hdGUgaWYgZW5kLW9mLW1lc3NhZ2UgYml0IHJlY2lldmVkIGZyb20gZGV2aWNlICovCisJCWlmICgoYnVmZmVyWzhdICYgIDB4MDEpICYmIChhY3R1YWwgPj0gbl9jaGFyYWN0ZXJzICsgMTIpKQogCQkJcmVtYWluaW5nID0gMDsKKwkJZWxzZQorCQkJcmVtYWluaW5nIC09IG5fY2hhcmFjdGVyczsKIAl9CiAKIAkvKiBVcGRhdGUgZmlsZSBwb3NpdGlvbiB2YWx1ZSAqLwpAQCAtNDk2LDYgKzUyMywxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKwlpZiAoZGF0YS0+em9tYmllKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CiAKIAlyZW1haW5pbmcgPSBjb3VudDsKIAlkb25lID0gMDsKQEAgLTc2NywyMCArNzk4LDIxIEBACiAJfQogCiAJZGV2X2RiZyhkZXYsICJHRVRfQ0FQQUJJTElUSUVTIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOwotCWRldl9kYmcoZGV2LCAiSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlcls0XSk7Ci0JZGV2X2RiZyhkZXYsICJEZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzVdKTsKLQlkZXZfZGJnKGRldiwgIlVTQjQ4OCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzE0XSk7Ci0JZGV2X2RiZyhkZXYsICJVU0I0ODggZGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlclsxNV0pOwogCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CiAJCWRldl9lcnIoZGV2LCAiR0VUX0NBUEFCSUxJVElFUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKIAkJcnYgPSAtRVBFUk07CiAJCWdvdG8gZXJyX291dDsKIAl9CisJZGV2X2RiZyhkZXYsICJJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzRdKTsKKwlkZXZfZGJnKGRldiwgIkRldmljZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbNV0pOworCWRldl9kYmcoZGV2LCAiVVNCNDg4IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbMTRdKTsKKwlkZXZfZGJnKGRldiwgIlVTQjQ4OCBkZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzE1XSk7CiAKIAlkYXRhLT5jYXBhYmlsaXRpZXMuaW50ZXJmYWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlcls0XTsKIAlkYXRhLT5jYXBhYmlsaXRpZXMuZGV2aWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlcls1XTsKIAlkYXRhLT5jYXBhYmlsaXRpZXMudXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbMTRdOwogCWRhdGEtPmNhcGFiaWxpdGllcy51c2I0ODhfZGV2aWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlclsxNV07CisJcnYgPSAwOwogCiBlcnJfb3V0OgogCWtmcmVlKGJ1ZmZlcik7CkBAIC05MjUsNiArOTU3LDEwIEBACiAKIAlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKwlpZiAoZGF0YS0+em9tYmllKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gc2tpcF9pb19vbl96b21iaWU7CisJfQogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFVTQlRNQ19JT0NUTF9DTEVBUl9PVVRfSEFMVDoKQEAgLTk1Miw2ICs5ODgsNyBAQAogCQlicmVhazsKIAl9CiAKK3NraXBfaW9fb25fem9tYmllOgogCW11dGV4X3VubG9jaygmZGF0YS0+aW9fbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC05OTUsNiArMTAzMiw3IEBACiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTsKIAlrcmVmX2luaXQoJmRhdGEtPmtyZWYpOwogCW11dGV4X2luaXQoJmRhdGEtPmlvX211dGV4KTsKKwlkYXRhLT56b21iaWUgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSBVU0JUTUMgYlRhZyBhbmQgb3RoZXIgZmllbGRzICovCiAJZGF0YS0+YlRhZwk9IDE7CkBAIC0xMDY1LDE0ICsxMTAzLDMwIEBACiAJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2J0bWNfY2xhc3MpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZjYXBhYmlsaXR5X2F0dHJfZ3JwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmZGF0YV9hdHRyX2dycCk7CisJbXV0ZXhfbG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCWRhdGEtPnpvbWJpZSA9IDE7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5pb19tdXRleCk7CiAJa3JlZl9wdXQoJmRhdGEtPmtyZWYsIHVzYnRtY19kZWxldGUpOwogfQogCitzdGF0aWMgaW50IHVzYnRtY19zdXNwZW5kIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJLyogdGhpcyBkcml2ZXIgZG9lcyBub3QgaGF2ZSBwZW5kaW5nIFVSQnMgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2J0bWNfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYnRtY19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInVzYnRtYyIsCiAJLmlkX3RhYmxlCT0gdXNidG1jX2RldmljZXMsCiAJLnByb2JlCQk9IHVzYnRtY19wcm9iZSwKLQkuZGlzY29ubmVjdAk9IHVzYnRtY19kaXNjb25uZWN0CisJLmRpc2Nvbm5lY3QJPSB1c2J0bWNfZGlzY29ubmVjdCwKKwkuc3VzcGVuZAk9IHVzYnRtY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gdXNidG1jX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVzYnRtY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jIGIvZHJpdmVycy91c2IvY29yZS9jb25maWcuYwppbmRleCBhMTZjNTM4Li4wZDNhZjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCWVwLT5zc19lcF9jb21wLT5leHRyYWxlbiA9IGk7CiAJYnVmZmVyICs9IGk7CiAJc2l6ZSAtPSBpOwotCXJldHZhbCA9IGJ1ZmZlciAtIGJ1ZmZlcl9zdGFydCArIGk7CisJcmV0dmFsID0gYnVmZmVyIC0gYnVmZmVyX3N0YXJ0OwogCWlmIChudW1fc2tpcHBlZCA+IDApCiAJCWRldl9kYmcoZGRldiwgInNraXBwZWQgJWQgZGVzY3JpcHRvciVzIGFmdGVyICVzXG4iLAogCQkJCW51bV9za2lwcGVkLCBwbHVyYWwobnVtX3NraXBwZWQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IDQyNDdlY2MuLjE4MWY3OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAogI2luY2x1ZGUgImhjZC5oIgkvKiBmb3IgdXNiY29yZSBpbnRlcm5hbHMgKi8KICNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJodWIuaCIKIAogI2RlZmluZSBVU0JfTUFYQlVTCQkJNjQKICNkZWZpbmUgVVNCX0RFVklDRV9NQVgJCQlVU0JfTUFYQlVTICogMTI4CkBAIC03Myw2ICs3NCw3IEBACiAJdm9pZCBfX3VzZXIgKmRpc2Njb250ZXh0OwogCXVuc2lnbmVkIGxvbmcgaWZjbGFpbWVkOwogCXUzMiBzZWNpZDsKKwl1MzIgZGlzYWJsZWRfYnVsa19lcHM7CiB9OwogCiBzdHJ1Y3QgYXN5bmMgewpAQCAtODcsNiArODksOCBAQAogCXN0cnVjdCB1cmIgKnVyYjsKIAlpbnQgc3RhdHVzOwogCXUzMiBzZWNpZDsKKwl1OCBidWxrX2FkZHI7CisJdTggYnVsa19zdGF0dXM7CiB9OwogCiBzdGF0aWMgaW50IHVzYmZzX3Nub29wOwpAQCAtOTksMTEgKzEwMywxNSBAQAogCQkJZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsJXAogCX0gd2hpbGUgKDApCiAKK2VudW0gc25vb3Bfd2hlbiB7CisJU1VCTUlULCBDT01QTEVURQorfTsKKwogI2RlZmluZSBVU0JfREVWSUNFX0RFVgkJTUtERVYoVVNCX0RFVklDRV9NQUpPUiwgMCkKIAotCiAjZGVmaW5lCU1BWF9VU0JGU19CVUZGRVJfU0laRQkxNjM4NAogCisKIHN0YXRpYyBpbnQgY29ubmVjdGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCXJldHVybiAoIWxpc3RfZW1wdHkoJnBzLT5saXN0KSAmJgpAQCAtMzAwLDI0ICszMDgsNzkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgc25vb3BfdXJiKHN0cnVjdCB1cmIgKnVyYiwgdm9pZCBfX3VzZXIgKnVzZXJ1cmIpCitzdGF0aWMgdm9pZCBzbm9vcF91cmIoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXZvaWQgX191c2VyICp1c2VydXJiLCBpbnQgcGlwZSwgdW5zaWduZWQgbGVuZ3RoLAorCQlpbnQgdGltZW91dF9vcl9zdGF0dXMsIGVudW0gc25vb3Bfd2hlbiB3aGVuKQogewotCXVuc2lnbmVkIGo7Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0YXRpYyBjb25zdCBjaGFyICp0eXBlc1tdID0geyJpc29jIiwgImludCIsICJjdHJsIiwgImJ1bGsifTsKKwlzdGF0aWMgY29uc3QgY2hhciAqZGlyc1tdID0geyJvdXQiLCAiaW4ifTsKKwlpbnQgZXA7CisJY29uc3QgY2hhciAqdCwgKmQ7CiAKIAlpZiAoIXVzYmZzX3Nub29wKQogCQlyZXR1cm47CiAKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRpcmVjdGlvbj0lc1xuIiwKLQkJCXVzYl91cmJfZGlyX2luKHVyYikgPyAiSU4iIDogIk9VVCIpOwotCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNlcnVyYj0lcFxuIiwgdXNlcnVyYik7Ci0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPSV1XG4iLAotCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImFjdHVhbF9sZW5ndGg9JXVcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJkYXRhOiAiKTsKLQlmb3IgKGogPSAwOyBqIDwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOyArK2opCi0JCXByaW50aygiJTAyeCAiLCBkYXRhW2pdKTsKLQlwcmludGsoIlxuIik7CisJZXAgPSB1c2JfcGlwZWVuZHBvaW50KHBpcGUpOworCXQgPSB0eXBlc1t1c2JfcGlwZXR5cGUocGlwZSldOworCWQgPSBkaXJzWyEhdXNiX3BpcGVpbihwaXBlKV07CisKKwlpZiAodXNlcnVyYikgewkJLyogQXN5bmMgKi8KKwkJaWYgKHdoZW4gPT0gU1VCTUlUKQorCQkJZGV2X2luZm8oJnVkZXYtPmRldiwgInVzZXJ1cmIgJXAsIGVwJWQgJXMtJXMsICIKKwkJCQkJImxlbmd0aCAldVxuIiwKKwkJCQkJdXNlcnVyYiwgZXAsIHQsIGQsIGxlbmd0aCk7CisJCWVsc2UKKwkJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJ1c2VydXJiICVwLCBlcCVkICVzLSVzLCAiCisJCQkJCSJhY3R1YWxfbGVuZ3RoICV1IHN0YXR1cyAlZFxuIiwKKwkJCQkJdXNlcnVyYiwgZXAsIHQsIGQsIGxlbmd0aCwKKwkJCQkJdGltZW91dF9vcl9zdGF0dXMpOworCX0gZWxzZSB7CisJCWlmICh3aGVuID09IFNVQk1JVCkKKwkJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJlcCVkICVzLSVzLCBsZW5ndGggJXUsICIKKwkJCQkJInRpbWVvdXQgJWRcbiIsCisJCQkJCWVwLCB0LCBkLCBsZW5ndGgsIHRpbWVvdXRfb3Jfc3RhdHVzKTsKKwkJZWxzZQorCQkJZGV2X2luZm8oJnVkZXYtPmRldiwgImVwJWQgJXMtJXMsIGFjdHVhbF9sZW5ndGggJXUsICIKKwkJCQkJInN0YXR1cyAlZFxuIiwKKwkJCQkJZXAsIHQsIGQsIGxlbmd0aCwgdGltZW91dF9vcl9zdGF0dXMpOworCX0KK30KKworI2RlZmluZSBBU19DT05USU5VQVRJT04JMQorI2RlZmluZSBBU19VTkxJTksJMgorCitzdGF0aWMgdm9pZCBjYW5jZWxfYnVsa191cmJzKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB1bnNpZ25lZCBidWxrX2FkZHIpCitfX3JlbGVhc2VzKHBzLT5sb2NrKQorX19hY3F1aXJlcyhwcy0+bG9jaykKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzOworCisJLyogTWFyayBhbGwgdGhlIHBlbmRpbmcgVVJCcyB0aGF0IG1hdGNoIGJ1bGtfYWRkciwgdXAgdG8gYnV0IG5vdAorCSAqIGluY2x1ZGluZyB0aGUgZmlyc3Qgb25lIHdpdGhvdXQgQVNfQ09OVElOVUFUSU9OLiAgSWYgc3VjaCBhbgorCSAqIFVSQiBpcyBlbmNvdW50ZXJlZCB0aGVuIGEgbmV3IHRyYW5zZmVyIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgc28KKwkgKiB0aGUgZW5kcG9pbnQgZG9lc24ndCBuZWVkIHRvIGJlIGRpc2FibGVkOyBvdGhlcndpc2UgaXQgZG9lcy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmcHMtPmFzeW5jX3BlbmRpbmcsIGFzeW5jbGlzdCkgeworCQlpZiAoYXMtPmJ1bGtfYWRkciA9PSBidWxrX2FkZHIpIHsKKwkJCWlmIChhcy0+YnVsa19zdGF0dXMgIT0gQVNfQ09OVElOVUFUSU9OKQorCQkJCWdvdG8gcmVzY2FuOworCQkJYXMtPmJ1bGtfc3RhdHVzID0gQVNfVU5MSU5LOworCQkJYXMtPmJ1bGtfYWRkciA9IDA7CisJCX0KKwl9CisJcHMtPmRpc2FibGVkX2J1bGtfZXBzIHw9ICgxIDw8IGJ1bGtfYWRkcik7CisKKwkvKiBOb3cgY2FyZWZ1bGx5IHVubGluayBhbGwgdGhlIG1hcmtlZCBwZW5kaW5nIFVSQnMgKi8KKyByZXNjYW46CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhcywgJnBzLT5hc3luY19wZW5kaW5nLCBhc3luY2xpc3QpIHsKKwkJaWYgKGFzLT5idWxrX3N0YXR1cyA9PSBBU19VTkxJTkspIHsKKwkJCWFzLT5idWxrX3N0YXR1cyA9IDA7CQkvKiBPbmx5IG9uY2UgKi8KKwkJCXNwaW5fdW5sb2NrKCZwcy0+bG9jayk7CQkvKiBBbGxvdyBjb21wbGV0aW9ucyAqLworCQkJdXNiX3VubGlua191cmIoYXMtPnVyYik7CisJCQlzcGluX2xvY2soJnBzLT5sb2NrKTsKKwkJCWdvdG8gcmVzY2FuOworCQl9CisJfQogfQogCiBzdGF0aWMgdm9pZCBhc3luY19jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiKQpAQCAtMzQ2LDcgKzQwOSwxMSBAQAogCQlzZWNpZCA9IGFzLT5zZWNpZDsKIAl9CiAJc25vb3AoJnVyYi0+ZGV2LT5kZXYsICJ1cmIgY29tcGxldGVcbiIpOwotCXNub29wX3VyYih1cmIsIGFzLT51c2VydXJiKTsKKwlzbm9vcF91cmIodXJiLT5kZXYsIGFzLT51c2VydXJiLCB1cmItPnBpcGUsIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCWFzLT5zdGF0dXMsIENPTVBMRVRFKTsKKwlpZiAoYXMtPnN0YXR1cyA8IDAgJiYgYXMtPmJ1bGtfYWRkciAmJiBhcy0+c3RhdHVzICE9IC1FQ09OTlJFU0VUICYmCisJCQlhcy0+c3RhdHVzICE9IC1FTk9FTlQpCisJCWNhbmNlbF9idWxrX3VyYnMocHMsIGFzLT5idWxrX2FkZHIpOwogCXNwaW5fdW5sb2NrKCZwcy0+bG9jayk7CiAKIAlpZiAoc2lnbnIpCkBAIC02NTUsNiArNzIyLDcgQEAKIAlzdHJ1Y3QgYXN5bmMgKmFzOwogCiAJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJdXNiX2h1Yl9yZWxlYXNlX2FsbF9wb3J0cyhkZXYsIHBzKTsKIAogCS8qIFByb3RlY3QgYWdhaW5zdCBzaW11bHRhbmVvdXMgb3BlbiAqLwogCW11dGV4X2xvY2soJnVzYmZzX211dGV4KTsKQEAgLTY4OCw3ICs3NTYsNyBAQAogCXVuc2lnbmVkIGludCB0bW87CiAJdW5zaWduZWQgY2hhciAqdGJ1ZjsKIAl1bnNpZ25lZCB3TGVuZ3RoOwotCWludCBpLCBqLCByZXQ7CisJaW50IGksIHBpcGUsIHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY3RybCwgYXJnLCBzaXplb2YoY3RybCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTcwOCwyNCArNzc2LDE3IEBACiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGJ1Zik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzbm9vcCgmZGV2LT5kZXYsICJjb250cm9sIHJlYWQ6IGJSZXF1ZXN0PSUwMnggIgotCQkJCSJiUnJlcXVlc3RUeXBlPSUwMnggd1ZhbHVlPSUwNHggIgotCQkJCSJ3SW5kZXg9JTA0eCB3TGVuZ3RoPSUwNHhcbiIsCi0JCQljdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsCi0JCQkJY3RybC53SW5kZXgsIGN0cmwud0xlbmd0aCk7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgY3RybC53TGVuZ3RoLCB0bW8sIFNVQk1JVCk7CiAKIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKLQkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBjdHJsLmJSZXF1ZXN0LAorCQlpID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgcGlwZSwgY3RybC5iUmVxdWVzdCwKIAkJCQkgICAgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwud1ZhbHVlLCBjdHJsLndJbmRleCwKIAkJCQkgICAgdGJ1ZiwgY3RybC53TGVuZ3RoLCB0bW8pOwogCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbWF4KGksIDApLCBtaW4oaSwgMCksIENPTVBMRVRFKTsKKwogCQlpZiAoKGkgPiAwKSAmJiBjdHJsLndMZW5ndGgpIHsKLQkJCWlmICh1c2Jmc19zbm9vcCkgewotCQkJCWRldl9pbmZvKCZkZXYtPmRldiwgImNvbnRyb2wgcmVhZDogZGF0YSAiKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgaTsgKytqKQotCQkJCQlwcmludGsoIiUwMnggIiwgKHU4KSh0YnVmKVtqXSk7Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJfQogCQkJaWYgKGNvcHlfdG9fdXNlcihjdHJsLmRhdGEsIHRidWYsIGkpKSB7CiAJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOwogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtNzM4LDIyICs3OTksMTUgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KIAkJfQotCQlzbm9vcCgmZGV2LT5kZXYsICJjb250cm9sIHdyaXRlOiBiUmVxdWVzdD0lMDJ4ICIKLQkJCQkiYlJyZXF1ZXN0VHlwZT0lMDJ4IHdWYWx1ZT0lMDR4ICIKLQkJCQkid0luZGV4PSUwNHggd0xlbmd0aD0lMDR4XG4iLAotCQkJY3RybC5iUmVxdWVzdCwgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwud1ZhbHVlLAotCQkJCWN0cmwud0luZGV4LCBjdHJsLndMZW5ndGgpOwotCQlpZiAodXNiZnNfc25vb3ApIHsKLQkJCWRldl9pbmZvKCZkZXYtPmRldiwgImNvbnRyb2wgd3JpdGU6IGRhdGE6ICIpOwotCQkJZm9yIChqID0gMDsgaiA8IGN0cmwud0xlbmd0aDsgKytqKQotCQkJCXByaW50aygiJTAyeCAiLCAodW5zaWduZWQgY2hhcikodGJ1Zilbal0pOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9CisJCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgY3RybC53TGVuZ3RoLCB0bW8sIFNVQk1JVCk7CisKIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKIAkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBjdHJsLmJSZXF1ZXN0LAogCQkJCSAgICBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LAogCQkJCSAgICB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CiAJCXVzYl9sb2NrX2RldmljZShkZXYpOworCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBtYXgoaSwgMCksIG1pbihpLCAwKSwgQ09NUExFVEUpOwogCX0KIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGJ1Zik7CiAJaWYgKGkgPCAwICYmIGkgIT0gLUVQSVBFKSB7CkBAIC03NzIsNyArODI2LDcgQEAKIAl1bnNpZ25lZCBpbnQgdG1vLCBsZW4xLCBwaXBlOwogCWludCBsZW4yOwogCXVuc2lnbmVkIGNoYXIgKnRidWY7Ci0JaW50IGksIGosIHJldDsKKwlpbnQgaSwgcmV0OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZidWxrLCBhcmcsIHNpemVvZihidWxrKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNzk5LDE4ICs4NTMsMTQgQEAKIAkJCWtmcmVlKHRidWYpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc25vb3AoJmRldi0+ZGV2LCAiYnVsayByZWFkOiBsZW49MHglMDJ4IHRpbWVvdXQ9JTA0ZFxuIiwKLQkJCWJ1bGsubGVuLCBidWxrLnRpbWVvdXQpOworCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBsZW4xLCB0bW8sIFNVQk1JVCk7CisKIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKIAkJaSA9IHVzYl9idWxrX21zZyhkZXYsIHBpcGUsIHRidWYsIGxlbjEsICZsZW4yLCB0bW8pOwogCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMiwgaSwgQ09NUExFVEUpOworCiAJCWlmICghaSAmJiBsZW4yKSB7Ci0JCQlpZiAodXNiZnNfc25vb3ApIHsKLQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJidWxrIHJlYWQ6IGRhdGEgIik7Ci0JCQkJZm9yIChqID0gMDsgaiA8IGxlbjI7ICsraikKLQkJCQkJcHJpbnRrKCIlMDJ4ICIsICh1OCkodGJ1Zilbal0pOwotCQkJCXByaW50aygiXG4iKTsKLQkJCX0KIAkJCWlmIChjb3B5X3RvX3VzZXIoYnVsay5kYXRhLCB0YnVmLCBsZW4yKSkgewogCQkJCWtmcmVlKHRidWYpOwogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtODIzLDE3ICs4NzMsMTIgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KIAkJfQotCQlzbm9vcCgmZGV2LT5kZXYsICJidWxrIHdyaXRlOiBsZW49MHglMDJ4IHRpbWVvdXQ9JTA0ZFxuIiwKLQkJCWJ1bGsubGVuLCBidWxrLnRpbWVvdXQpOwotCQlpZiAodXNiZnNfc25vb3ApIHsKLQkJCWRldl9pbmZvKCZkZXYtPmRldiwgImJ1bGsgd3JpdGU6IGRhdGE6ICIpOwotCQkJZm9yIChqID0gMDsgaiA8IGxlbjE7ICsraikKLQkJCQlwcmludGsoIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpKHRidWYpW2pdKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQorCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBsZW4xLCB0bW8sIFNVQk1JVCk7CisKIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKIAkJaSA9IHVzYl9idWxrX21zZyhkZXYsIHBpcGUsIHRidWYsIGxlbjEsICZsZW4yLCB0bW8pOwogCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMiwgaSwgQ09NUExFVEUpOwogCX0KIAlrZnJlZSh0YnVmKTsKIAlpZiAoaSA8IDApCkBAIC05OTEsNiArMTAzNiw3IEBACiAKIAlpZiAodXVyYi0+ZmxhZ3MgJiB+KFVTQkRFVkZTX1VSQl9JU09fQVNBUCB8CiAJCQkJVVNCREVWRlNfVVJCX1NIT1JUX05PVF9PSyB8CisJCQkJVVNCREVWRlNfVVJCX0JVTEtfQ09OVElOVUFUSU9OIHwKIAkJCQlVU0JERVZGU19VUkJfTk9fRlNCUiB8CiAJCQkJVVNCREVWRlNfVVJCX1pFUk9fUEFDS0VUIHwKIAkJCQlVU0JERVZGU19VUkJfTk9fSU5URVJSVVBUKSkKQEAgLTEwNTEsMTMgKzEwOTcsNiBAQAogCQkJaXNfaW4gPSAwOwogCQkJdXVyYi0+ZW5kcG9pbnQgJj0gflVTQl9ESVJfSU47CiAJCX0KLQkJc25vb3AoJnBzLT5kZXYtPmRldiwgImNvbnRyb2wgdXJiOiBiUmVxdWVzdD0lMDJ4ICIKLQkJCSJiUnJlcXVlc3RUeXBlPSUwMnggd1ZhbHVlPSUwNHggIgotCQkJIndJbmRleD0lMDR4IHdMZW5ndGg9JTA0eFxuIiwKLQkJCWRyLT5iUmVxdWVzdCwgZHItPmJSZXF1ZXN0VHlwZSwKLQkJCV9fbGUxNl90b19jcHVwKCZkci0+d1ZhbHVlKSwKLQkJCV9fbGUxNl90b19jcHVwKCZkci0+d0luZGV4KSwKLQkJCV9fbGUxNl90b19jcHVwKCZkci0+d0xlbmd0aCkpOwogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfQlVMSzoKQEAgLTEwNzAsNyArMTEwOSw2IEBACiAJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKIAkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJc25vb3AoJnBzLT5kZXYtPmRldiwgImJ1bGsgdXJiXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lTTzoKQEAgLTEwOTcsMTIgKzExMzUsMTIgQEAKIAkJCX0KIAkJCXRvdGxlbiArPSBpc29wa3RbdV0ubGVuZ3RoOwogCQl9Ci0JCWlmICh0b3RsZW4gPiAzMjc2OCkgeworCQkvKiAzMDcyICogNjQgbWljcm9mcmFtZXMgKi8KKwkJaWYgKHRvdGxlbiA+IDE5NjYwOCkgewogCQkJa2ZyZWUoaXNvcGt0KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXV1cmItPmJ1ZmZlcl9sZW5ndGggPSB0b3RsZW47Ci0JCXNub29wKCZwcy0+ZGV2LT5kZXYsICJpc28gdXJiXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lOVEVSUlVQVDoKQEAgLTExMTEsNyArMTE0OSw2IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJc25vb3AoJnBzLT5kZXYtPmRldiwgImludGVycnVwdCB1cmJcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMTk4LDExICsxMjM1LDQ2IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCX0KLQlzbm9vcF91cmIoYXMtPnVyYiwgYXMtPnVzZXJ1cmIpOworCXNub29wX3VyYihwcy0+ZGV2LCBhcy0+dXNlcnVyYiwgYXMtPnVyYi0+cGlwZSwKKwkJCWFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIDAsIFNVQk1JVCk7CiAJYXN5bmNfbmV3cGVuZGluZyhhcyk7Ci0JaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihhcy0+dXJiLCBHRlBfS0VSTkVMKSkpIHsKKworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKCZlcC0+ZGVzYykpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcHMtPmxvY2spOworCisJCS8qIE5vdCBleGFjdGx5IHRoZSBlbmRwb2ludCBhZGRyZXNzOyB0aGUgZGlyZWN0aW9uIGJpdCBpcworCQkgKiBzaGlmdGVkIHRvIHRoZSAweDEwIHBvc2l0aW9uIHNvIHRoYXQgdGhlIHZhbHVlIHdpbGwgYmUKKwkJICogYmV0d2VlbiAwIGFuZCAzMS4KKwkJICovCisJCWFzLT5idWxrX2FkZHIgPSB1c2JfZW5kcG9pbnRfbnVtKCZlcC0+ZGVzYykgfAorCQkJKChlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQkJCT4+IDMpOworCisJCS8qIElmIHRoaXMgYnVsayBVUkIgaXMgdGhlIHN0YXJ0IG9mIGEgbmV3IHRyYW5zZmVyLCByZS1lbmFibGUKKwkJICogdGhlIGVuZHBvaW50LiAgT3RoZXJ3aXNlIG1hcmsgaXQgYXMgYSBjb250aW51YXRpb24gVVJCLgorCQkgKi8KKwkJaWYgKHV1cmItPmZsYWdzICYgVVNCREVWRlNfVVJCX0JVTEtfQ09OVElOVUFUSU9OKQorCQkJYXMtPmJ1bGtfc3RhdHVzID0gQVNfQ09OVElOVUFUSU9OOworCQllbHNlCisJCQlwcy0+ZGlzYWJsZWRfYnVsa19lcHMgJj0gfigxIDw8IGFzLT5idWxrX2FkZHIpOworCisJCS8qIERvbid0IGFjY2VwdCBjb250aW51YXRpb24gVVJCcyBpZiB0aGUgZW5kcG9pbnQgaXMKKwkJICogZGlzYWJsZWQgYmVjYXVzZSBvZiBhbiBlYXJsaWVyIGVycm9yLgorCQkgKi8KKwkJaWYgKHBzLT5kaXNhYmxlZF9idWxrX2VwcyAmICgxIDw8IGFzLT5idWxrX2FkZHIpKQorCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJZWxzZQorCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoYXMtPnVyYiwgR0ZQX0FUT01JQyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHMtPmxvY2spOworCX0gZWxzZSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGFzLT51cmIsIEdGUF9LRVJORUwpOworCX0KKworCWlmIChyZXQpIHsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcHMtPmRldi0+ZGV2LAogCQkJICAgInVzYmZzOiB1c2Jfc3VibWl0X3VyYiByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJc25vb3BfdXJiKHBzLT5kZXYsIGFzLT51c2VydXJiLCBhcy0+dXJiLT5waXBlLAorCQkJCTAsIHJldCwgQ09NUExFVEUpOwogCQlhc3luY19yZW1vdmVwZW5kaW5nKGFzKTsKIAkJZnJlZV9hc3luYyhhcyk7CiAJCXJldHVybiByZXQ7CkBAIC0xNTQ4LDYgKzE2MjAsMjkgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHByb2NfY2xhaW1fcG9ydChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBwb3J0bnVtOworCWludCByYzsKKworCWlmIChnZXRfdXNlcihwb3J0bnVtLCAodW5zaWduZWQgX191c2VyICopIGFyZykpCisJCXJldHVybiAtRUZBVUxUOworCXJjID0gdXNiX2h1Yl9jbGFpbV9wb3J0KHBzLT5kZXYsIHBvcnRudW0sIHBzKTsKKwlpZiAocmMgPT0gMCkKKwkJc25vb3AoJnBzLT5kZXYtPmRldiwgInBvcnQgJWQgY2xhaW1lZCBieSBwcm9jZXNzICVkOiAlc1xuIiwKKwkJCXBvcnRudW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19yZWxlYXNlX3BvcnQoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJdW5zaWduZWQgcG9ydG51bTsKKworCWlmIChnZXRfdXNlcihwb3J0bnVtLCAodW5zaWduZWQgX191c2VyICopIGFyZykpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiB1c2JfaHViX3JlbGVhc2VfcG9ydChwcy0+ZGV2LCBwb3J0bnVtLCBwcyk7Cit9CisKIC8qCiAgKiBOT1RFOiAgQWxsIHJlcXVlc3RzIGhlcmUgdGhhdCBoYXZlIGludGVyZmFjZSBudW1iZXJzIGFzIHBhcmFtZXRlcnMKICAqIGFyZSBhc3N1bWluZyB0aGF0IHNvbWVob3cgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcHJldmVudGVkIGZyb20KQEAgLTE2NDUsNyArMTc0MCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBVU0JERVZGU19SRUFQVVJCTkRFTEFZMzI6Ci0JCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUFQVVJCREVMQVkzMlxuIiwgX19mdW5jX18pOworCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVBUFVSQk5ERUxBWTMyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IHByb2NfcmVhcHVyYm5vbmJsb2NrX2NvbXBhdChwcywgcCk7CiAJCWJyZWFrOwogCkBAIC0xNjY2LDcgKzE3NjEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfUkVBUFVSQk5ERUxBWToKLQkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFQVBVUkJERUxBWVxuIiwgX19mdW5jX18pOworCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVBUFVSQk5ERUxBWVxuIiwgX19mdW5jX18pOwogCQlyZXQgPSBwcm9jX3JlYXB1cmJub25ibG9jayhwcywgcCk7CiAJCWJyZWFrOwogCkBAIC0xNjg5LDYgKzE3ODQsMTYgQEAKIAkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IElPQ1RMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IHByb2NfaW9jdGxfZGVmYXVsdChwcywgcCk7CiAJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19DTEFJTV9QT1JUOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogQ0xBSU1fUE9SVFxuIiwgX19mdW5jX18pOworCQlyZXQgPSBwcm9jX2NsYWltX3BvcnQocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVMRUFTRV9QT1JUOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVMRUFTRV9QT1JUXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IHByb2NfcmVsZWFzZV9wb3J0KHBzLCBwKTsKKwkJYnJlYWs7CiAJfQogCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJaWYgKHJldCA+PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKaW5kZXggNjllNTc3My4uNGY4NjQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0yMDcsNiArMjA3LDkgQEAKIAogCWludGYtPm5lZWRzX2JpbmRpbmcgPSAwOwogCisJaWYgKHVzYl9kZXZpY2VfaXNfb3duZWQodWRldikpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKHVkZXYtPmF1dGhvcml6ZWQgPT0gMCkgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJEZXZpY2UgaXMgbm90IGF1dGhvcml6ZWQgZm9yIHVzYWdlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yMzIsMjggKzIzNSwzNSBAQAogCQkvKiBUaGUgaW50ZXJmYWNlIHNob3VsZCBhbHdheXMgYXBwZWFyIHRvIGJlIGluIHVzZQogCQkgKiB1bmxlc3MgdGhlIGRyaXZlciBzdXBvcnRzIGF1dG9zdXNwZW5kLgogCQkgKi8KLQkJaW50Zi0+cG1fdXNhZ2VfY250ID0gIShkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKTsKKwkJYXRvbWljX3NldCgmaW50Zi0+cG1fdXNhZ2VfY250LCAhZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCk7CiAKIAkJLyogQ2Fycnkgb3V0IGEgZGVmZXJyZWQgc3dpdGNoIHRvIGFsdHNldHRpbmcgMCAqLwogCQlpZiAoaW50Zi0+bmVlZHNfYWx0c2V0dGluZzApIHsKLQkJCXVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGludGYtPmFsdHNldHRpbmdbMF0uCisJCQllcnJvciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGludGYtPmFsdHNldHRpbmdbMF0uCiAJCQkJCWRlc2MuYkludGVyZmFjZU51bWJlciwgMCk7CisJCQlpZiAoZXJyb3IgPCAwKQorCQkJCWdvdG8gZXJyOworCiAJCQlpbnRmLT5uZWVkc19hbHRzZXR0aW5nMCA9IDA7CiAJCX0KIAogCQllcnJvciA9IGRyaXZlci0+cHJvYmUoaW50ZiwgaWQpOwotCQlpZiAoZXJyb3IpIHsKLQkJCW1hcmtfcXVpZXNjZWQoaW50Zik7Ci0JCQlpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKLQkJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CT1VORDsKLQkJCXVzYl9jYW5jZWxfcXVldWVkX3Jlc2V0KGludGYpOwotCQl9IGVsc2UKLQkJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXJyOwogCisJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CiAJCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldik7CiAJfQogCiAJcmV0dXJuIGVycm9yOworCitlcnI6CisJbWFya19xdWllc2NlZChpbnRmKTsKKwlpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CisJdXNiX2NhbmNlbF9xdWV1ZWRfcmVzZXQoaW50Zik7CisJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggZGV2IGxvY2tlZCAqLwpAQCAtMjYyLDcgKzI3Miw3IEBACiAJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciA9IHRvX3VzYl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIHI7CiAKIAlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQklORElORzsKIApAQCAtMjkwLDExICszMDAsMTQgQEAKIAkJICogSnVzdCByZS1lbmFibGUgaXQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVuZHBvaW50IHRvZ2dsZXMuCiAJCSAqLwogCQl1c2JfZW5hYmxlX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCBmYWxzZSk7Ci0JfSBlbHNlIGlmICghZXJyb3IgJiYgaW50Zi0+ZGV2LnBvd2VyLnN0YXR1cyA9PSBEUE1fT04pCi0JCXVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGludGYtPmFsdHNldHRpbmdbMF0uCisJfSBlbHNlIGlmICghZXJyb3IgJiYgaW50Zi0+ZGV2LnBvd2VyLnN0YXR1cyA9PSBEUE1fT04pIHsKKwkJciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGludGYtPmFsdHNldHRpbmdbMF0uCiAJCQkJZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwKTsKLQllbHNlCisJCWlmIChyIDwgMCkKKwkJCWludGYtPm5lZWRzX2FsdHNldHRpbmcwID0gMTsKKwl9IGVsc2UgewogCQlpbnRmLT5uZWVkc19hbHRzZXR0aW5nMCA9IDE7CisJfQogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKIAlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CkBAIC0zNDQsNyArMzU3LDcgQEAKIAl1c2JfcG1fbG9jayh1ZGV2KTsKIAlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CT1VORDsKIAltYXJrX2FjdGl2ZShpZmFjZSk7Ci0JaWZhY2UtPnBtX3VzYWdlX2NudCA9ICEoZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCk7CisJYXRvbWljX3NldCgmaWZhY2UtPnBtX3VzYWdlX2NudCwgIWRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpOwogCXVzYl9wbV91bmxvY2sodWRldik7CiAKIAkvKiBpZiBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgYWRkZWQsIGJpbmQgbm93OyBlbHNlIGxldApAQCAtMTA2NSw3ICsxMDc4LDcgQEAKIAkJCWludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKIAkJCWlmICghaXNfYWN0aXZlKGludGYpKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKGludGYtPnBtX3VzYWdlX2NudCA+IDApCisJCQlpZiAoYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkgPiAwKQogCQkJCXJldHVybiAtRUJVU1k7CiAJCQlpZiAoaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCAmJgogCQkJCQkhdWRldi0+ZG9fcmVtb3RlX3dha2V1cCkgewpAQCAtMTQ2MSwxNyArMTQ3NCwxOSBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCWVsc2UgewogCQl1ZGV2LT5hdXRvX3BtID0gMTsKLQkJaW50Zi0+cG1fdXNhZ2VfY250ICs9IGluY191c2FnZV9jbnQ7CisJCWF0b21pY19hZGQoaW5jX3VzYWdlX2NudCwgJmludGYtPnBtX3VzYWdlX2NudCk7CiAJCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7Ci0JCWlmIChpbmNfdXNhZ2VfY250ID49IDAgJiYgaW50Zi0+cG1fdXNhZ2VfY250ID4gMCkgeworCQlpZiAoaW5jX3VzYWdlX2NudCA+PSAwICYmCisJCQkJYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkgPiAwKSB7CiAJCQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKIAkJCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldiwKIAkJCQkJCVBNU0dfQVVUT19SRVNVTUUpOwogCQkJaWYgKHN0YXR1cyAhPSAwKQotCQkJCWludGYtPnBtX3VzYWdlX2NudCAtPSBpbmNfdXNhZ2VfY250OworCQkJCWF0b21pY19zdWIoaW5jX3VzYWdlX2NudCwgJmludGYtPnBtX3VzYWdlX2NudCk7CiAJCQllbHNlCiAJCQkJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKLQkJfSBlbHNlIGlmIChpbmNfdXNhZ2VfY250IDw9IDAgJiYgaW50Zi0+cG1fdXNhZ2VfY250IDw9IDApIHsKKwkJfSBlbHNlIGlmIChpbmNfdXNhZ2VfY250IDw9IDAgJiYKKwkJCQlhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSA8PSAwKSB7CiAJCQlzdGF0dXMgPSB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIFBNU0dfQVVUT19TVVNQRU5EKTsKIAkJfQogCX0KQEAgLTE1MTYsNyArMTUzMSw3IEBACiAKIAlzdGF0dXMgPSB1c2JfYXV0b3BtX2RvX2ludGVyZmFjZShpbnRmLCAtMSk7CiAJZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgaW50Zi0+cG1fdXNhZ2VfY250KTsKKwkJCV9fZnVuY19fLCBzdGF0dXMsIGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSk7CiAKQEAgLTE1NDQsMTAgKzE1NTksMTAgQEAKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAl9IGVsc2UgewogCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCQktLWludGYtPnBtX3VzYWdlX2NudDsKKwkJYXRvbWljX2RlYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKIAkJaWYgKHVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkIHx8IHVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5IDwgMCkKIAkJCXN0YXR1cyA9IC1FUEVSTTsKLQkJZWxzZSBpZiAoaW50Zi0+cG1fdXNhZ2VfY250IDw9IDAgJiYKKwkJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkgPD0gMCAmJgogCQkJCSF0aW1lcl9wZW5kaW5nKCZ1ZGV2LT5hdXRvc3VzcGVuZC50aW1lcikpIHsKIAkJCXF1ZXVlX2RlbGF5ZWRfd29yayhrc3VzcGVuZF91c2Jfd3EsICZ1ZGV2LT5hdXRvc3VzcGVuZCwKIAkJCQkJcm91bmRfamlmZmllc191cF9yZWxhdGl2ZSgKQEAgLTE1NTUsNyArMTU3MCw3IEBACiAJCX0KIAl9CiAJZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgaW50Zi0+cG1fdXNhZ2VfY250KTsKKwkJCV9fZnVuY19fLCBzdGF0dXMsIGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyk7CiAKQEAgLTE1OTksNyArMTYxNCw3IEBACiAKIAlzdGF0dXMgPSB1c2JfYXV0b3BtX2RvX2ludGVyZmFjZShpbnRmLCAxKTsKIAlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IHN0YXR1cyAlZCBjbnQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzLCBpbnRmLT5wbV91c2FnZV9jbnQpOworCQkJX19mdW5jX18sIHN0YXR1cywgYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkpOwogCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UpOwpAQCAtMTYyNywxMCArMTY0MiwxNCBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCWVsc2UgaWYgKHVkZXYtPmF1dG9yZXN1bWVfZGlzYWJsZWQpCiAJCXN0YXR1cyA9IC1FUEVSTTsKLQllbHNlIGlmICgrK2ludGYtPnBtX3VzYWdlX2NudCA+IDAgJiYgdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKLQkJcXVldWVfd29yayhrc3VzcGVuZF91c2Jfd3EsICZ1ZGV2LT5hdXRvcmVzdW1lKTsKKwllbHNlIHsKKwkJYXRvbWljX2luYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKKwkJaWYgKGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpID4gMCAmJgorCQkJCXVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCQlxdWV1ZV93b3JrKGtzdXNwZW5kX3VzYl93cSwgJnVkZXYtPmF1dG9yZXN1bWUpOworCX0KIAlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IHN0YXR1cyAlZCBjbnQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzLCBpbnRmLT5wbV91c2FnZV9jbnQpOworCQkJX19mdW5jX18sIHN0YXR1cywgYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkpOwogCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmMpOwpAQCAtMTY1Miw3ICsxNjcxLDcgQEAKIAogCXN0YXR1cyA9IHVzYl9hdXRvcG1fZG9faW50ZXJmYWNlKGludGYsIDApOwogCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkIGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMsIGludGYtPnBtX3VzYWdlX2NudCk7CisJCQlfX2Z1bmNfXywgc3RhdHVzLCBhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCmluZGV4IDVjZWY4ODkuLjIyMmVlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCkBAIC02NywxNCArNjcsMTQgQEAKIAlzdHJ1Y3QgY2xhc3MgKmNsYXNzOwogfSAqdXNiX2NsYXNzOwogCi1zdGF0aWMgY2hhciAqdXNiX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICp1c2JfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciAqZHJ2OwogCiAJZHJ2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKCFkcnYgfHwgIWRydi0+bm9kZW5hbWUpCisJaWYgKCFkcnYgfHwgIWRydi0+ZGV2bm9kZSkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGRydi0+bm9kZW5hbWUoZGV2KTsKKwlyZXR1cm4gZHJ2LT5kZXZub2RlKGRldiwgbW9kZSk7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF91c2JfY2xhc3Modm9pZCkKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlrZnJlZSh1c2JfY2xhc3MpOwogCQl1c2JfY2xhc3MgPSBOVUxMOwogCX0KLQl1c2JfY2xhc3MtPmNsYXNzLT5ub2RlbmFtZSA9IHVzYl9ub2RlbmFtZTsKKwl1c2JfY2xhc3MtPmNsYXNzLT5kZXZub2RlID0gdXNiX2Rldm5vZGU7CiAKIGV4aXQ6CiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2IvY29yZS9nZW5lcmljLmMKaW5kZXggMzBlY2FjMy4uMDVlNmQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9nZW5lcmljLmMKQEAgLTE1OCw3ICsxNTgsOSBAQAogCS8qIENob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiAgVGhpcyByZWdpc3RlcnMgdGhlIGludGVyZmFjZXMKIAkgKiB3aXRoIHRoZSBkcml2ZXIgY29yZSBhbmQgbGV0cyBpbnRlcmZhY2UgZHJpdmVycyBiaW5kIHRvIHRoZW0uCiAJICovCi0JaWYgKHVkZXYtPmF1dGhvcml6ZWQgPT0gMCkKKwlpZiAodXNiX2RldmljZV9pc19vd25lZCh1ZGV2KSkKKwkJOwkJLyogRG9uJ3QgY29uZmlndXJlIGlmIHRoZSBkZXZpY2UgaXMgb3duZWQgKi8KKwllbHNlIGlmICh1ZGV2LT5hdXRob3JpemVkID09IDApCiAJCWRldl9lcnIoJnVkZXYtPmRldiwgIkRldmljZSBpcyBub3QgYXV0aG9yaXplZCBmb3IgdXNhZ2VcbiIpOwogCWVsc2UgewogCQljID0gdXNiX2Nob29zZV9jb25maWd1cmF0aW9uKHVkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggOTVjY2ZhMC4uMzRkZTQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0zMzcsNzIgKzMzNyw4OSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKgotICogaGVscGVyIHJvdXRpbmUgZm9yIHJldHVybmluZyBzdHJpbmcgZGVzY3JpcHRvcnMgaW4gVVRGLTE2TEUKLSAqIGlucHV0IGNhbiBhY3R1YWxseSBiZSBJU08tODg1OS0xOyBBU0NJSSBpcyBpdHMgNy1iaXQgc3Vic2V0CisvKioKKyAqIGFzY2lpMmRlc2MoKSAtIEhlbHBlciByb3V0aW5lIGZvciBwcm9kdWNpbmcgVVRGLTE2TEUgc3RyaW5nIGRlc2NyaXB0b3JzCisgKiBAczogTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIChhY3R1YWxseSBJU08tODg1OS0xKSBzdHJpbmcKKyAqIEBidWY6IEJ1ZmZlciBmb3IgVVNCIHN0cmluZyBkZXNjcmlwdG9yIChoZWFkZXIgKyBVVEYtMTZMRSkKKyAqIEBsZW46IExlbmd0aCAoaW4gYnl0ZXM7IG1heSBiZSBvZGQpIG9mIGRlc2NyaXB0b3IgYnVmZmVyLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBmaWxsZWQgaW46IDIgKyAyKnN0cmxlbihzKSBvcgorICogYnVmbGVuLCB3aGljaGV2ZXIgaXMgbGVzcy4KKyAqCisgKiBVU0IgU3RyaW5nIGRlc2NyaXB0b3JzIGNhbiBjb250YWluIGF0IG1vc3QgMTI2IGNoYXJhY3RlcnM7IGlucHV0CisgKiBzdHJpbmdzIGxvbmdlciB0aGFuIHRoYXQgYXJlIHRydW5jYXRlZC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGFzY2lpMnV0ZihjaGFyICpzLCB1OCAqdXRmLCBpbnQgdXRmbWF4KQorc3RhdGljIHVuc2lnbmVkCithc2NpaTJkZXNjKGNoYXIgY29uc3QgKnMsIHU4ICpidWYsIHVuc2lnbmVkIGxlbikKIHsKLQl1bnNpZ25lZCByZXR2YWw7CisJdW5zaWduZWQgbiwgdCA9IDIgKyAyKnN0cmxlbihzKTsKIAotCWZvciAocmV0dmFsID0gMDsgKnMgJiYgdXRmbWF4ID4gMTsgdXRmbWF4IC09IDIsIHJldHZhbCArPSAyKSB7Ci0JCSp1dGYrKyA9ICpzKys7Ci0JCSp1dGYrKyA9IDA7CisJaWYgKHQgPiAyNTQpCisJCXQgPSAyNTQ7CS8qIExvbmdlc3QgcG9zc2libGUgVVRGIHN0cmluZyBkZXNjcmlwdG9yICovCisJaWYgKGxlbiA+IHQpCisJCWxlbiA9IHQ7CisKKwl0ICs9IFVTQl9EVF9TVFJJTkcgPDwgODsJLyogTm93IHQgaXMgZmlyc3QgMTYgYml0cyB0byBzdG9yZSAqLworCisJbiA9IGxlbjsKKwl3aGlsZSAobi0tKSB7CisJCSpidWYrKyA9IHQ7CisJCWlmICghbi0tKQorCQkJYnJlYWs7CisJCSpidWYrKyA9IHQgPj4gODsKKwkJdCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CiAJfQotCWlmICh1dGZtYXggPiAwKSB7Ci0JCSp1dGYgPSAqczsKLQkJKytyZXR2YWw7Ci0JfQotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGxlbjsKIH0KIAotLyoKLSAqIHJoX3N0cmluZyAtIHByb3ZpZGVzIG1hbnVmYWN0dXJlciwgcHJvZHVjdCBhbmQgc2VyaWFsIHN0cmluZ3MgZm9yIHJvb3QgaHViCi0gKiBAaWQ6IHRoZSBzdHJpbmcgSUQgbnVtYmVyICgxOiBzZXJpYWwgbnVtYmVyLCAyOiBwcm9kdWN0LCAzOiB2ZW5kb3IpCisvKioKKyAqIHJoX3N0cmluZygpIC0gcHJvdmlkZXMgc3RyaW5nIGRlc2NyaXB0b3JzIGZvciByb290IGh1YgorICogQGlkOiB0aGUgc3RyaW5nIElEIG51bWJlciAoMDogbGFuZ2lkcywgMTogc2VyaWFsICMsIDI6IHByb2R1Y3QsIDM6IHZlbmRvcikKICAqIEBoY2Q6IHRoZSBob3N0IGNvbnRyb2xsZXIgZm9yIHRoaXMgcm9vdCBodWIKLSAqIEBkYXRhOiByZXR1cm4gcGFja2V0IGluIFVURi0xNiBMRQotICogQGxlbjogbGVuZ3RoIG9mIHRoZSByZXR1cm4gcGFja2V0CisgKiBAZGF0YTogYnVmZmVyIGZvciBvdXRwdXQgcGFja2V0CisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlcgogICoKICAqIFByb2R1Y2VzIGVpdGhlciBhIG1hbnVmYWN0dXJlciwgcHJvZHVjdCBvciBzZXJpYWwgbnVtYmVyIHN0cmluZyBmb3IgdGhlCiAgKiB2aXJ0dWFsIHJvb3QgaHViIGRldmljZS4KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBmaWxsZWQgaW46IHRoZSBsZW5ndGggb2YgdGhlIGRlc2NyaXB0b3Igb3IKKyAqIG9mIHRoZSBwcm92aWRlZCBidWZmZXIsIHdoaWNoZXZlciBpcyBsZXNzLgogICovCi1zdGF0aWMgdW5zaWduZWQgcmhfc3RyaW5nKGludCBpZCwgc3RydWN0IHVzYl9oY2QgKmhjZCwgdTggKmRhdGEsIHVuc2lnbmVkIGxlbikKK3N0YXRpYyB1bnNpZ25lZAorcmhfc3RyaW5nKGludCBpZCwgc3RydWN0IHVzYl9oY2QgY29uc3QgKmhjZCwgdTggKmRhdGEsIHVuc2lnbmVkIGxlbikKIHsKLQljaGFyIGJ1ZiBbMTAwXTsKKwljaGFyIGJ1ZlsxMDBdOworCWNoYXIgY29uc3QgKnM7CisJc3RhdGljIGNoYXIgY29uc3QgbGFuZ2lkc1s0XSA9IHs0LCBVU0JfRFRfU1RSSU5HLCAweDA5LCAweDA0fTsKIAogCS8vIGxhbmd1YWdlIGlkcwotCWlmIChpZCA9PSAwKSB7Ci0JCWJ1ZlswXSA9IDQ7ICAgIGJ1ZlsxXSA9IDM7CS8qIDQgYnl0ZXMgc3RyaW5nIGRhdGEgKi8KLQkJYnVmWzJdID0gMHgwOTsgYnVmWzNdID0gMHgwNDsJLyogTVNGVC1zcGVhayBmb3IgImVuLXVzIiAqLwotCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCwgbGVuLCA0KTsKLQkJbWVtY3B5IChkYXRhLCBidWYsIGxlbik7CisJc3dpdGNoIChpZCkgeworCWNhc2UgMDoKKwkJLyogQXJyYXkgb2YgTEFOR0lEIGNvZGVzICgweDA0MDkgaXMgTVNGVC1zcGVhayBmb3IgImVuLXVzIikgKi8KKwkJLyogU2VlIGh0dHA6Ly93d3cudXNiLm9yZy9kZXZlbG9wZXJzL2RvY3MvVVNCX0xBTkdJRHMucGRmICovCisJCWlmIChsZW4gPiA0KQorCQkJbGVuID0gNDsKKwkJbWVtY3B5KGRhdGEsIGxhbmdpZHMsIGxlbik7CiAJCXJldHVybiBsZW47Ci0KLQkvLyBzZXJpYWwgbnVtYmVyCi0JfSBlbHNlIGlmIChpZCA9PSAxKSB7Ci0JCXN0cmxjcHkgKGJ1ZiwgaGNkLT5zZWxmLmJ1c19uYW1lLCBzaXplb2YgYnVmKTsKLQotCS8vIHByb2R1Y3QgZGVzY3JpcHRpb24KLQl9IGVsc2UgaWYgKGlkID09IDIpIHsKLQkJc3RybGNweSAoYnVmLCBoY2QtPnByb2R1Y3RfZGVzYywgc2l6ZW9mIGJ1Zik7Ci0KLSAJLy8gaWQgMyA9PSB2ZW5kb3IgZGVzY3JpcHRpb24KLQl9IGVsc2UgaWYgKGlkID09IDMpIHsKKwljYXNlIDE6CisJCS8qIFNlcmlhbCBudW1iZXIgKi8KKwkJcyA9IGhjZC0+c2VsZi5idXNfbmFtZTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkvKiBQcm9kdWN0IG5hbWUgKi8KKwkJcyA9IGhjZC0+cHJvZHVjdF9kZXNjOworCQlicmVhazsKKwljYXNlIDM6CisJCS8qIE1hbnVmYWN0dXJlciAqLwogCQlzbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiJXMgJXMgJXMiLCBpbml0X3V0c25hbWUoKS0+c3lzbmFtZSwKIAkJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLCBoY2QtPmRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlzID0gYnVmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBDYW4ndCBoYXBwZW47IGNhbGxlciBndWFyYW50ZWVzIGl0ICovCisJCXJldHVybiAwOwogCX0KIAotCXN3aXRjaCAobGVuKSB7CQkvKiBBbGwgY2FzZXMgZmFsbCB0aHJvdWdoICovCi0JZGVmYXVsdDoKLQkJbGVuID0gMiArIGFzY2lpMnV0ZiAoYnVmLCBkYXRhICsgMiwgbGVuIC0gMik7Ci0JY2FzZSAyOgotCQlkYXRhIFsxXSA9IDM7CS8qIHR5cGUgPT0gc3RyaW5nICovCi0JY2FzZSAxOgotCQlkYXRhIFswXSA9IDIgKiAoc3RybGVuIChidWYpICsgMSk7Ci0JY2FzZSAwOgotCQk7CQkvKiBDb21waWxlciB3YW50cyBhIHN0YXRlbWVudCBoZXJlICovCi0JfQotCXJldHVybiBsZW47CisJcmV0dXJuIGFzY2lpMmRlc2MocywgZGF0YSwgbGVuKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaAppbmRleCBlYzVjNjdlLi43OTc4MmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKQEAgLTI2Nyw2ICsyNjcsMTEgQEAKIAl2b2lkCSgqcmVzZXRfYmFuZHdpZHRoKShzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgdXNiX2RldmljZSAqKTsKIAkJLyogUmV0dXJucyB0aGUgaGFyZHdhcmUtY2hvc2VuIGRldmljZSBhZGRyZXNzICovCiAJaW50CSgqYWRkcmVzc19kZXZpY2UpKHN0cnVjdCB1c2JfaGNkICosIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKKwkJLyogTm90aWZpZXMgdGhlIEhDRCBhZnRlciBhIGh1YiBkZXNjcmlwdG9yIGlzIGZldGNoZWQuCisJCSAqIFdpbGwgYmxvY2suCisJCSAqLworCWludAkoKnVwZGF0ZV9odWJfZGV2aWNlKShzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwKKwkJCXN0cnVjdCB1c2JfdHQgKnR0LCBnZnBfdCBtZW1fZmxhZ3MpOwogfTsKIAogZXh0ZXJuIGludCB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA3MWY4NmM2Li41Y2U4MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTc4LDYgKzc4LDcgQEAKIAl1OAkJCWluZGljYXRvcltVU0JfTUFYQ0hJTERSRU5dOwogCXN0cnVjdCBkZWxheWVkX3dvcmsJbGVkczsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWluaXRfd29yazsKKwl2b2lkCQkJKipwb3J0X293bmVyczsKIH07CiAKIApAQCAtMTYyLDggKzE2MywxMCBAQAogfQogCiAvKiBOb3RlIHRoYXQgaGRldiBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIG11c3QgYmUgbG9ja2VkISAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2h1YiAqaGRldl90b19odWIoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYpCitzdGF0aWMgc3RydWN0IHVzYl9odWIgKmhkZXZfdG9faHViKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQogeworCWlmICghaGRldiB8fCAhaGRldi0+YWN0Y29uZmlnKQorCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gdXNiX2dldF9pbnRmZGF0YShoZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXSk7CiB9CiAKQEAgLTM3Miw3ICszNzUsNyBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKIAkvKiBTdXBwcmVzcyBhdXRvc3VzcGVuZCB1bnRpbCBraHViZCBydW5zICovCi0JdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpLT5wbV91c2FnZV9jbnQgPSAxOworCWF0b21pY19zZXQoJnRvX3VzYl9pbnRlcmZhY2UoaHViLT5pbnRmZGV2KS0+cG1fdXNhZ2VfY250LCAxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZodWJfZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmICghaHViLT5kaXNjb25uZWN0ZWQgJiYgbGlzdF9lbXB0eSgmaHViLT5ldmVudF9saXN0KSkgewpAQCAtMzg0LDggKzM4NywxMCBAQAogCiB2b2lkIHVzYl9raWNrX2todWJkKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQogewotCS8qIEZJWE1FOiBXaGF0IGlmIGhkZXYgaXNuJ3QgYm91bmQgdG8gdGhlIGh1YiBkcml2ZXI/ICovCi0Ja2lja19raHViZChoZGV2X3RvX2h1YihoZGV2KSk7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IGhkZXZfdG9faHViKGhkZXYpOworCisJaWYgKGh1YikKKwkJa2lja19raHViZChodWIpOwogfQogCiAKQEAgLTY3Nyw3ICs2ODIsOCBAQAogCQkJCQltc2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CiAKIAkJCS8qIFN1cHByZXNzIGF1dG9zdXNwZW5kIHVudGlsIGluaXQgaXMgZG9uZSAqLwotCQkJdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpLT5wbV91c2FnZV9jbnQgPSAxOworCQkJYXRvbWljX3NldCgmdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpLT4KKwkJCQkJcG1fdXNhZ2VfY250LCAxKTsKIAkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KIAkJfSBlbHNlIHsKIAkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwpAQCAtODU0LDI1ICs4NjAsMjQgQEAKIHN0YXRpYyBpbnQgaHViX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX2h1YiAqaHViLAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQpCiB7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlzdHJ1Y3QgZGV2aWNlICpodWJfZGV2ID0gaHViLT5pbnRmZGV2OwogCXUxNiBodWJzdGF0dXMsIGh1YmNoYW5nZTsKIAl1MTYgd0h1YkNoYXJhY3RlcmlzdGljczsKIAl1bnNpZ25lZCBpbnQgcGlwZTsKIAlpbnQgbWF4cCwgcmV0OwotCWNoYXIgKm1lc3NhZ2U7CisJY2hhciAqbWVzc2FnZSA9ICJvdXQgb2YgbWVtb3J5IjsKIAogCWh1Yi0+YnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhoZGV2LCBzaXplb2YoKmh1Yi0+YnVmZmVyKSwgR0ZQX0tFUk5FTCwKIAkJCSZodWItPmJ1ZmZlcl9kbWEpOwogCWlmICghaHViLT5idWZmZXIpIHsKLQkJbWVzc2FnZSA9ICJjYW4ndCBhbGxvY2F0ZSBodWIgaXJxIGJ1ZmZlciI7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAlodWItPnN0YXR1cyA9IGttYWxsb2Moc2l6ZW9mKCpodWItPnN0YXR1cyksIEdGUF9LRVJORUwpOwogCWlmICghaHViLT5zdGF0dXMpIHsKLQkJbWVzc2FnZSA9ICJjYW4ndCBrbWFsbG9jIGh1YiBzdGF0dXMgYnVmZmVyIjsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KQEAgLTg4MCw3ICs4ODUsNiBAQAogCiAJaHViLT5kZXNjcmlwdG9yID0ga21hbGxvYyhzaXplb2YoKmh1Yi0+ZGVzY3JpcHRvciksIEdGUF9LRVJORUwpOwogCWlmICghaHViLT5kZXNjcmlwdG9yKSB7Ci0JCW1lc3NhZ2UgPSAiY2FuJ3Qga21hbGxvYyBodWIgZGVzY3JpcHRvciI7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC05MDQsNiArOTA4LDEyIEBACiAJZGV2X2luZm8gKGh1Yl9kZXYsICIlZCBwb3J0JXMgZGV0ZWN0ZWRcbiIsIGhkZXYtPm1heGNoaWxkLAogCQkoaGRldi0+bWF4Y2hpbGQgPT0gMSkgPyAiIiA6ICJzIik7CiAKKwlodWItPnBvcnRfb3duZXJzID0ga3phbGxvYyhoZGV2LT5tYXhjaGlsZCAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh1Yi0+cG9ydF9vd25lcnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwogCXdIdWJDaGFyYWN0ZXJpc3RpY3MgPSBsZTE2X3RvX2NwdShodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MpOwogCiAJaWYgKHdIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9DT01QT1VORCkgewpAQCAtMTA1Miw2ICsxMDYyLDE5IEBACiAJCWRldl9kYmcoaHViX2RldiwgIiV1bUEgYnVzIHBvd2VyIGJ1ZGdldCBmb3IgZWFjaCBjaGlsZFxuIiwKIAkJCQlodWItPm1BX3Blcl9wb3J0KTsKIAorCS8qIFVwZGF0ZSB0aGUgSENEJ3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBodWIgYmVmb3JlIGtodWJkCisJICogc3RhcnRzIGdldHRpbmcgcG9ydCBzdGF0dXMgY2hhbmdlcyBmb3IgZGV2aWNlcyB1bmRlciB0aGUgaHViLgorCSAqLworCWhjZCA9IGJ1c190b19oY2QoaGRldi0+YnVzKTsKKwlpZiAoaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKSB7CisJCXJldCA9IGhjZC0+ZHJpdmVyLT51cGRhdGVfaHViX2RldmljZShoY2QsIGhkZXYsCisJCQkJJmh1Yi0+dHQsIEdGUF9LRVJORUwpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWVzc2FnZSA9ICJjYW4ndCB1cGRhdGUgSENEIGh1YiBpbmZvIjsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwogCXJldCA9IGh1Yl9odWJfc3RhdHVzKGh1YiwgJmh1YnN0YXR1cywgJmh1YmNoYW5nZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWVzc2FnZSA9ICJjYW4ndCBnZXQgaHViIHN0YXR1cyI7CkBAIC0xMDgyLDcgKzExMDUsNiBAQAogCiAJaHViLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghaHViLT51cmIpIHsKLQkJbWVzc2FnZSA9ICJjb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHQgdXJiIjsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KQEAgLTExMzEsMTEgKzExNTMsMTMgQEAKIAlodWJfcXVpZXNjZShodWIsIEhVQl9ESVNDT05ORUNUKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWh1Yi0+aGRldi0+bWF4Y2hpbGQgPSAwOwogCiAJaWYgKGh1Yi0+aGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCWhpZ2hzcGVlZF9odWJzLS07CiAKIAl1c2JfZnJlZV91cmIoaHViLT51cmIpOworCWtmcmVlKGh1Yi0+cG9ydF9vd25lcnMpOwogCWtmcmVlKGh1Yi0+ZGVzY3JpcHRvcik7CiAJa2ZyZWUoaHViLT5zdGF0dXMpOwogCXVzYl9idWZmZXJfZnJlZShodWItPmhkZXYsIHNpemVvZigqaHViLT5idWZmZXIpLCBodWItPmJ1ZmZlciwKQEAgLTEyNTAsNiArMTI3NCw3OSBAQAogCX0KIH0KIAorLyoKKyAqIEFsbG93IHVzZXIgcHJvZ3JhbXMgdG8gY2xhaW0gcG9ydHMgb24gYSBodWIuICBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkCisgKiB0byBvbmUgb2YgdGhlc2UgImNsYWltZWQiIHBvcnRzLCB0aGUgcHJvZ3JhbSB3aWxsICJvd24iIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgZmluZF9wb3J0X293bmVyKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB1bnNpZ25lZCBwb3J0MSwKKwkJdm9pZCAqKipwcG93bmVyKQoreworCWlmIChoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChwb3J0MSA9PSAwIHx8IHBvcnQxID4gaGRldi0+bWF4Y2hpbGQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhpcyBhc3N1bWVzIHRoYXQgZGV2aWNlcyBub3QgbWFuYWdlZCBieSB0aGUgaHViIGRyaXZlcgorCSAqIHdpbGwgYWx3YXlzIGhhdmUgbWF4Y2hpbGQgZXF1YWwgdG8gMC4KKwkgKi8KKwkqcHBvd25lciA9ICYoaGRldl90b19odWIoaGRldiktPnBvcnRfb3duZXJzW3BvcnQxIC0gMV0pOworCXJldHVybiAwOworfQorCisvKiBJbiB0aGUgZm9sbG93aW5nIHRocmVlIGZ1bmN0aW9ucywgdGhlIGNhbGxlciBtdXN0IGhvbGQgaGRldidzIGxvY2sgKi8KK2ludCB1c2JfaHViX2NsYWltX3BvcnQoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHVuc2lnbmVkIHBvcnQxLCB2b2lkICpvd25lcikKK3sKKwlpbnQgcmM7CisJdm9pZCAqKnBvd25lcjsKKworCXJjID0gZmluZF9wb3J0X293bmVyKGhkZXYsIHBvcnQxLCAmcG93bmVyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlpZiAoKnBvd25lcikKKwkJcmV0dXJuIC1FQlVTWTsKKwkqcG93bmVyID0gb3duZXI7CisJcmV0dXJuIHJjOworfQorCitpbnQgdXNiX2h1Yl9yZWxlYXNlX3BvcnQoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHVuc2lnbmVkIHBvcnQxLCB2b2lkICpvd25lcikKK3sKKwlpbnQgcmM7CisJdm9pZCAqKnBvd25lcjsKKworCXJjID0gZmluZF9wb3J0X293bmVyKGhkZXYsIHBvcnQxLCAmcG93bmVyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlpZiAoKnBvd25lciAhPSBvd25lcikKKwkJcmV0dXJuIC1FTk9FTlQ7CisJKnBvd25lciA9IE5VTEw7CisJcmV0dXJuIHJjOworfQorCit2b2lkIHVzYl9odWJfcmVsZWFzZV9hbGxfcG9ydHMoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHZvaWQgKm93bmVyKQoreworCWludCBuOworCXZvaWQgKipwb3duZXI7CisKKwluID0gZmluZF9wb3J0X293bmVyKGhkZXYsIDEsICZwb3duZXIpOworCWlmIChuID09IDApIHsKKwkJZm9yICg7IG4gPCBoZGV2LT5tYXhjaGlsZDsgKCsrbiwgKytwb3duZXIpKSB7CisJCQlpZiAoKnBvd25lciA9PSBvd25lcikKKwkJCQkqcG93bmVyID0gTlVMTDsKKwkJfQorCX0KK30KKworLyogVGhlIGNhbGxlciBtdXN0IGhvbGQgdWRldidzIGxvY2sgKi8KK2Jvb2wgdXNiX2RldmljZV9pc19vd25lZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViOworCisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCB8fCAhdWRldi0+cGFyZW50KQorCQlyZXR1cm4gZmFsc2U7CisJaHViID0gaGRldl90b19odWIodWRldi0+cGFyZW50KTsKKwlyZXR1cm4gISFodWItPnBvcnRfb3duZXJzW3VkZXYtPnBvcnRudW0gLSAxXTsKK30KKwogCiBzdGF0aWMgdm9pZCByZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewpAQCAtMjg0OSwxNCArMjk0Niw3IEBACiAJCQkvKiBGb3IgYSBzdXNwZW5kZWQgZGV2aWNlLCB0cmVhdCB0aGlzIGFzIGEKIAkJCSAqIHJlbW90ZSB3YWtldXAgZXZlbnQuCiAJCQkgKi8KLQkJCWlmICh1ZGV2LT5kb19yZW1vdGVfd2FrZXVwKQotCQkJCXN0YXR1cyA9IHJlbW90ZV93YWtldXAodWRldik7Ci0KLQkJCS8qIE90aGVyd2lzZSBsZWF2ZSBpdCBiZTsgZGV2aWNlcyBjYW4ndCB0ZWxsIHRoZQotCQkJICogZGlmZmVyZW5jZSBiZXR3ZWVuIHN1c3BlbmRlZCBhbmQgZGlzYWJsZWQuCi0JCQkgKi8KLQkJCWVsc2UKLQkJCQlzdGF0dXMgPSAwOworCQkJc3RhdHVzID0gcmVtb3RlX3dha2V1cCh1ZGV2KTsKICNlbmRpZgogCiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKaW5kZXggZmZlNzVlOC4uOTdiNDBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwpAQCAtNDgsNyArNDgsNiBAQAogI2RlZmluZSBVU0JGU19ERUZBVUxUX0JVU01PREUgKFNfSVhVR08gfCBTX0lSVUdPKQogI2RlZmluZSBVU0JGU19ERUZBVUxUX0xJU1RNT0RFIFNfSVJVR08KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVzYmZzX29wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZmF1bHRfZmlsZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdXNiZnNfbW91bnQ7CiBzdGF0aWMgaW50IHVzYmZzX21vdW50X2NvdW50OwkvKiA9IDAgKi8KQEAgLTQ0OSw3ICs0NDgsNyBAQAogCS5sbHNlZWsgPQlkZWZhdWx0X2ZpbGVfbHNlZWssCiB9OwogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdXNiZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVzYmZzX29wcyA9IHsKIAkuc3RhdGZzID0Jc2ltcGxlX3N0YXRmcywKIAkuZHJvcF9pbm9kZSA9CWdlbmVyaWNfZGVsZXRlX2lub2RlLAogCS5yZW1vdW50X2ZzID0JcmVtb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggOTcyMGU2OS4uZGE3MThlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTQ1OSwzNSArNDU5LDIzIEBACiAJCQlpby0+dXJic1tpXS0+Y29udGV4dCA9IGlvOwogCiAJCQkvKgotCQkJICogU29tZSBzeXN0ZW1zIG5lZWQgdG8gcmV2ZXJ0IHRvIFBJTyB3aGVuIERNQSBpcwotCQkJICogdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuICBGb3IgdGhlaXIgc2FrZXMsIGJvdGgKLQkJCSAqIHRyYW5zZmVyX2J1ZmZlciBhbmQgdHJhbnNmZXJfZG1hIGFyZSBzZXQgd2hlbgotCQkJICogcG9zc2libGUuICBIb3dldmVyIHRoaXMgY2FuIG9ubHkgd29yayBvbiBzeXN0ZW1zCi0JCQkgKiB3aXRob3V0OgorCQkJICogU29tZSBzeXN0ZW1zIG5lZWQgdG8gcmV2ZXJ0IHRvIFBJTyB3aGVuIERNQSBpcyB0ZW1wb3JhcmlseQorCQkJICogdW5hdmFpbGFibGUuICBGb3IgdGhlaXIgc2FrZXMsIGJvdGggdHJhbnNmZXJfYnVmZmVyIGFuZAorCQkJICogdHJhbnNmZXJfZG1hIGFyZSBzZXQgd2hlbiBwb3NzaWJsZS4KIAkJCSAqCi0JCQkgKiAgLSBISUdITUVNLCBzaW5jZSBETUEgYnVmZmVycyBsb2NhdGVkIGluIGhpZ2ggbWVtb3J5Ci0JCQkgKiAgICBhcmUgbm90IGRpcmVjdGx5IGFkZHJlc3NhYmxlIGJ5IHRoZSBDUFUgZm9yIFBJTzsKLQkJCSAqCi0JCQkgKiAgLSBJT01NVSwgc2luY2UgZG1hX21hcF9zZygpIGlzIGFsbG93ZWQgdG8gdXNlIGFuCi0JCQkgKiAgICBJT01NVSB0byBtYWtlIHZpcnR1YWxseSBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgYmUKLQkJCSAqICAgICJkbWEtY29udGlndW91cyIgc28gdGhhdCBQSU8gYW5kIERNQSBuZWVkIGRpZmVyZW50Ci0JCQkgKiAgICBudW1iZXJzIG9mIFVSQnMuCi0JCQkgKgotCQkJICogU28gd2hlbiBISUdITUVNIG9yIElPTU1VIGFyZSBpbiB1c2UsIHRyYW5zZmVyX2J1ZmZlcgotCQkJICogaXMgTlVMTCB0byBwcmV2ZW50IHN0YWxlIHBvaW50ZXJzIGFuZCB0byBoZWxwIHNwb3QKLQkJCSAqIGJ1Z3MuCisJCQkgKiBOb3RlIHRoYXQgaWYgSU9NTVUgY29hbGVzY2luZyBvY2N1cnJlZCwgd2UgY2Fubm90CisJCQkgKiB0cnVzdCBzZ19wYWdlIGFueW1vcmUsIHNvIGNoZWNrIGlmIFMvRyBsaXN0IHNocnVuay4KIAkJCSAqLworCQkJaWYgKGlvLT5uZW50cyA9PSBpby0+ZW50cmllcyAmJiAhUGFnZUhpZ2hNZW0oc2dfcGFnZShzZykpKQorCQkJCWlvLT51cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPSBzZ192aXJ0KHNnKTsKKwkJCWVsc2UKKwkJCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKKwogCQkJaWYgKGRtYSkgewogCQkJCWlvLT51cmJzW2ldLT50cmFuc2Zlcl9kbWEgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCQkJbGVuID0gc2dfZG1hX2xlbihzZyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfSElHSE1FTSkgfHwgZGVmaW5lZChDT05GSUdfR0FSVF9JT01NVSkKLQkJCQlpby0+dXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKLSNlbHNlCi0JCQkJaW8tPnVyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9IHNnX3ZpcnQoc2cpOwotI2VuZGlmCiAJCQl9IGVsc2UgewogCQkJCS8qIGhjIG1heSB1c2UgX29ubHlfIHRyYW5zZmVyX2J1ZmZlciAqLwotCQkJCWlvLT51cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPSBzZ192aXJ0KHNnKTsKIAkJCQlsZW4gPSBzZy0+bGVuZ3RoOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCBhMjZmNzM4Li5iMWI4NWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogI2VuZGlmCS8qIENPTkZJR19QTSAqLwogCiAKLXN0YXRpYyBjaGFyICp1c2Jfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGNoYXIgKnVzYl9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCkBAIC0zMjQsNyArMzI0LDcgQEAKIAkubmFtZSA9CQkidXNiX2RldmljZSIsCiAJLnJlbGVhc2UgPQl1c2JfcmVsZWFzZV9kZXYsCiAJLnVldmVudCA9CXVzYl9kZXZfdWV2ZW50LAotCS5ub2RlbmFtZSA9IAl1c2Jfbm9kZW5hbWUsCisJLmRldm5vZGUgPSAJdXNiX2Rldm5vZGUsCiAJLnBtID0JCSZ1c2JfZGV2aWNlX3BtX29wcywKIH07CiAKQEAgLTQxMyw4ICs0MTMsMTMgQEAKIAkJfSBlbHNlIHsKIAkJCXNucHJpbnRmKGRldi0+ZGV2cGF0aCwgc2l6ZW9mIGRldi0+ZGV2cGF0aCwKIAkJCQkiJXMuJWQiLCBwYXJlbnQtPmRldnBhdGgsIHBvcnQxKTsKLQkJCWRldi0+cm91dGUgPSBwYXJlbnQtPnJvdXRlICsKLQkJCQkocG9ydDEgPDwgKChwYXJlbnQtPmxldmVsIC0gMSkqNCkpOworCQkJLyogUm91dGUgc3RyaW5nIGFzc3VtZXMgaHVicyBoYXZlIGxlc3MgdGhhbiAxNiBwb3J0cyAqLworCQkJaWYgKHBvcnQxIDwgMTUpCisJCQkJZGV2LT5yb3V0ZSA9IHBhcmVudC0+cm91dGUgKworCQkJCQkocG9ydDEgPDwgKChwYXJlbnQtPmxldmVsIC0gMSkqNCkpOworCQkJZWxzZQorCQkJCWRldi0+cm91dGUgPSBwYXJlbnQtPnJvdXRlICsKKwkJCQkJKDE1IDw8ICgocGFyZW50LT5sZXZlbCAtIDEpKjQpKTsKIAkJfQogCiAJCWRldi0+ZGV2LnBhcmVudCA9ICZwYXJlbnQtPmRldjsKQEAgLTkxNCwxMSArOTE5LDExIEBACiAJCQl8fCAhKGJ1cyA9IGRldi0+YnVzKQogCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKQogCQkJfHwgIWNvbnRyb2xsZXItPmRtYV9tYXNrKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRklYTUUgZ2VuZXJpYyBhcGkgYnJva2VuIGxpa2UgcGNpLCBjYW4ndCByZXBvcnQgZXJyb3JzICovCiAJcmV0dXJuIGRtYV9tYXBfc2coY29udHJvbGxlciwgc2csIG5lbnRzLAotCQkJaXNfaW4gPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKKwkJCWlzX2luID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSkgPyA6IC1FTk9NRU07CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYnVmZmVyX21hcF9zZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmggYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCmluZGV4IGMwZTBhZTIuLjlhOGIxNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtMzcsNiArMzcsMTMgQEAKIGV4dGVybiB2b2lkIHVzYl9mb3JjZWRfdW5iaW5kX2ludGYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogZXh0ZXJuIHZvaWQgdXNiX3JlYmluZF9pbnRmKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIAorZXh0ZXJuIGludCB1c2JfaHViX2NsYWltX3BvcnQoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHVuc2lnbmVkIHBvcnQsCisJCXZvaWQgKm93bmVyKTsKK2V4dGVybiBpbnQgdXNiX2h1Yl9yZWxlYXNlX3BvcnQoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHVuc2lnbmVkIHBvcnQsCisJCXZvaWQgKm93bmVyKTsKK2V4dGVybiB2b2lkIHVzYl9odWJfcmVsZWFzZV9hbGxfcG9ydHMoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHZvaWQgKm93bmVyKTsKK2V4dGVybiBib29sIHVzYl9kZXZpY2VfaXNfb3duZWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOworCiBleHRlcm4gaW50ICB1c2JfaHViX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB1c2JfaHViX2NsZWFudXAodm9pZCk7CiBleHRlcm4gaW50IHVzYl9tYWpvcl9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZWFybHkvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9lYXJseS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmVkZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZWFybHkvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBlYXJseSBVU0IgZGV2aWNlcworIworCitvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1ApICAgICAgICArPSBlaGNpLWRiZ3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMgYi9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA2YTI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKQEAgLTAsMCArMSw5OTYgQEAKKy8qCisgKiBTdGFuZGFsb25lIEVIQ0kgdXNiIGRlYnVnIGRyaXZlcgorICoKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieToKKyAqICBFcmljIFcuIEJpZWRlcm1hbiIgPGViaWVkZXJtQHhtaXNzaW9uLmNvbT4gYW5kCisgKiAgWWluZ2hhaSBMdSA8eWhsdS5rZXJuZWxAZ21haWwuY29tPgorICoKKyAqIENoYW5nZXMgZm9yIGVhcmx5L2xhdGUgcHJpbnRrIGFuZCBIVyBlcnJhdGE6CisgKiAgSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2VoY2lfZGVmLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKworLyogVGhlIGNvZGUgaGVyZSBpcyBpbnRlbmRlZCB0byB0YWxrIGRpcmVjdGx5IHRvIHRoZSBFSENJIGRlYnVnIHBvcnQKKyAqIGFuZCBkb2VzIG5vdCByZXF1aXJlIHRoYXQgeW91IGhhdmUgYW55IGtpbmQgb2YgVVNCIGhvc3QgY29udHJvbGxlcgorICogZHJpdmVycyBvciBVU0IgZGV2aWNlIGRyaXZlcnMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgorICoKKyAqIElmIHlvdSBtYWtlIGEgY2hhbmdlIHRvIGFueXRoaW5nIGluIGhlcmUsIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcworICogbmVlZCB0byBwYXNzIHdoZXJlIGEgVVNCIGRlYnVnIGRldmljZSB3b3JrcyBpbiB0aGUgZm9sbG93aW5nCisgKiBjb25maWd1cmF0aW9ucy4KKyAqCisgKiAxLiBib290IGFyZ3M6ICBlYXJseXByaW50az1kYmdwCisgKiAgICAgbyBrZXJuZWwgY29tcGlsZWQgd2l0aCAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorICogICAgIG8ga2VybmVsIGNvbXBpbGVkIHdpdGggQ09ORklHX1VTQl9FSENJX0hDRD15CisgKiAyLiBib290IGFyZ3M6IGVhcmx5cHJpbnRrPWRiZ3Asa2VlcAorICogICAgIG8ga2VybmVsIGNvbXBpbGVkIHdpdGggIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyAqICAgICBvIGtlcm5lbCBjb21waWxlZCB3aXRoIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQorICogMy4gYm9vdCBhcmdzOiBlYXJseXByaW50az1kYmdwIGNvbnNvbGU9dHR5VVNCMAorICogICAgIG8ga2VybmVsIGhhcyBDT05GSUdfVVNCX0VIQ0lfSENEPXkgYW5kCisgKiAgICAgICBDT05GSUdfVVNCX1NFUklBTF9ERUJVRz15CisgKiA0LiBib290IGFyZ3M6IGVhcmx5cHJpbnRrPXZnYSxkYmdwCisgKiAgICAgbyBrZXJuZWwgY29tcGlsZWQgd2l0aCAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorICogICAgIG8ga2VybmVsIGNvbXBpbGVkIHdpdGggQ09ORklHX1VTQl9FSENJX0hDRD15CisgKgorICogRm9yIHRoZSA0dGggY29uZmlndXJhdGlvbiB5b3UgY2FuIHR1cm4gb24gb3Igb2ZmIHRoZSBEQkdQX0RFQlVHCisgKiBzdWNoIHRoYXQgeW91IGNhbiBkZWJ1ZyB0aGUgZGJncCBkZXZpY2UncyBkcml2ZXIgY29kZS4KKyAqLworCitzdGF0aWMgaW50IGRiZ3BfcGh5c19wb3J0ID0gMTsKKworc3RhdGljIHN0cnVjdCBlaGNpX2NhcHMgX19pb21lbSAqZWhjaV9jYXBzOworc3RhdGljIHN0cnVjdCBlaGNpX3JlZ3MgX19pb21lbSAqZWhjaV9yZWdzOworc3RhdGljIHN0cnVjdCBlaGNpX2RiZ19wb3J0IF9faW9tZW0gKmVoY2lfZGVidWc7CitzdGF0aWMgaW50IGRiZ3Bfbm90X3NhZmU7IC8qIENhbm5vdCB1c2UgZGVidWcgZGV2aWNlIGR1cmluZyBlaGNpIHJlc2V0ICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRiZ3BfZW5kcG9pbnRfb3V0OworCitzdHJ1Y3QgZWhjaV9kZXYgeworCXUzMiBidXM7CisJdTMyIHNsb3Q7CisJdTMyIGZ1bmM7Cit9OworCitzdGF0aWMgc3RydWN0IGVoY2lfZGV2IGVoY2lfZGV2OworCisjZGVmaW5lIFVTQl9ERUJVR19ERVZOVU0gMTI3CisKKyNkZWZpbmUgREJHUF9EQVRBX1RPR0dMRQkweDg4MDAKKworI2lmZGVmIERCR1BfREVCVUcKKyNkZWZpbmUgZGJncF9wcmludGsgcHJpbnRrCitzdGF0aWMgdm9pZCBkYmdwX2VoY2lfc3RhdHVzKGNoYXIgKnN0cikKK3sKKwlpZiAoIWVoY2lfZGVidWcpCisJCXJldHVybjsKKwlkYmdwX3ByaW50aygiZGJncDogJXNcbiIsIHN0cik7CisJZGJncF9wcmludGsoIiAgRGVidWcgY29udHJvbDogJTA4eCIsIHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKSk7CisJZGJncF9wcmludGsoIiAgZWhjaSBjbWQgICAgIDogJTA4eCIsIHJlYWRsKCZlaGNpX3JlZ3MtPmNvbW1hbmQpKTsKKwlkYmdwX3ByaW50aygiICBlaGNpIGNvbmYgZmxnOiAlMDh4XG4iLAorCQkgICAgcmVhZGwoJmVoY2lfcmVncy0+Y29uZmlndXJlZF9mbGFnKSk7CisJZGJncF9wcmludGsoIiAgZWhjaSBzdGF0dXMgIDogJTA4eCIsIHJlYWRsKCZlaGNpX3JlZ3MtPnN0YXR1cykpOworCWRiZ3BfcHJpbnRrKCIgIGVoY2kgcG9ydHNjICA6ICUwOHhcbiIsCisJCSAgICByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1tkYmdwX3BoeXNfcG9ydCAtIDFdKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRiZ3BfZWhjaV9zdGF0dXMoY2hhciAqc3RyKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdwX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB1MzIgZGJncF9waWRfdXBkYXRlKHUzMiB4LCB1MzIgdG9rKQoreworCXJldHVybiAoKHggXiBEQkdQX0RBVEFfVE9HR0xFKSAmIDB4ZmZmZjAwKSB8ICh0b2sgJiAweGZmKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZGJncF9sZW5fdXBkYXRlKHUzMiB4LCB1MzIgbGVuKQoreworCXJldHVybiAoeCAmIH4weDBmKSB8IChsZW4gJiAweDBmKTsKK30KKworLyoKKyAqIFVTQiBQYWNrZXQgSURzIChQSURzKQorICovCisKKy8qIHRva2VuICovCisjZGVmaW5lIFVTQl9QSURfT1VUCQkweGUxCisjZGVmaW5lIFVTQl9QSURfSU4JCTB4NjkKKyNkZWZpbmUgVVNCX1BJRF9TT0YJCTB4YTUKKyNkZWZpbmUgVVNCX1BJRF9TRVRVUAkJMHgyZAorLyogaGFuZHNoYWtlICovCisjZGVmaW5lIFVTQl9QSURfQUNLCQkweGQyCisjZGVmaW5lIFVTQl9QSURfTkFLCQkweDVhCisjZGVmaW5lIFVTQl9QSURfU1RBTEwJCTB4MWUKKyNkZWZpbmUgVVNCX1BJRF9OWUVUCQkweDk2CisvKiBkYXRhICovCisjZGVmaW5lIFVTQl9QSURfREFUQTAJCTB4YzMKKyNkZWZpbmUgVVNCX1BJRF9EQVRBMQkJMHg0YgorI2RlZmluZSBVU0JfUElEX0RBVEEyCQkweDg3CisjZGVmaW5lIFVTQl9QSURfTURBVEEJCTB4MGYKKy8qIFNwZWNpYWwgKi8KKyNkZWZpbmUgVVNCX1BJRF9QUkVBTUJMRQkweDNjCisjZGVmaW5lIFVTQl9QSURfRVJSCQkweDNjCisjZGVmaW5lIFVTQl9QSURfU1BMSVQJCTB4NzgKKyNkZWZpbmUgVVNCX1BJRF9QSU5HCQkweGI0CisjZGVmaW5lIFVTQl9QSURfVU5ERUZfMAkJMHhmMAorCisjZGVmaW5lIFVTQl9QSURfREFUQV9UT0dHTEUJMHg4OAorI2RlZmluZSBEQkdQX0NMQUlNIChEQkdQX09XTkVSIHwgREJHUF9FTkFCTEVEIHwgREJHUF9JTlVTRSkKKworI2RlZmluZSBQQ0lfQ0FQX0lEX0VIQ0lfREVCVUcJMHhhCisKKyNkZWZpbmUgSFVCX1JPT1RfUkVTRVRfVElNRQk1MAkvKiB0aW1lcyBhcmUgaW4gbXNlYyAqLworI2RlZmluZSBIVUJfU0hPUlRfUkVTRVRfVElNRQkxMAorI2RlZmluZSBIVUJfTE9OR19SRVNFVF9USU1FCTIwMAorI2RlZmluZSBIVUJfUkVTRVRfVElNRU9VVAk1MDAKKworI2RlZmluZSBEQkdQX01BWF9QQUNLRVQJCTgKKyNkZWZpbmUgREJHUF9USU1FT1VUCQkoMjUwICogMTAwMCkKKworc3RhdGljIGludCBkYmdwX3dhaXRfdW50aWxfY29tcGxldGUodm9pZCkKK3sKKwl1MzIgY3RybDsKKwlpbnQgbG9vcCA9IERCR1BfVElNRU9VVDsKKworCWRvIHsKKwkJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwkJLyogU3RvcCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCAqLworCQlpZiAoY3RybCAmIERCR1BfRE9ORSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS1sb29wID4gMCk7CisKKwlpZiAoIWxvb3ApCisJCXJldHVybiAtREJHUF9USU1FT1VUOworCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIG9ic2VydmVkIHRoZSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24sCisJICogY2xlYXIgdGhlIGRvbmUgYml0LgorCSAqLworCXdyaXRlbChjdHJsIHwgREJHUF9ET05FLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJcmV0dXJuIChjdHJsICYgREJHUF9FUlJPUikgPyAtREJHUF9FUlJDT0RFKGN0cmwpIDogREJHUF9MRU4oY3RybCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdwX21kZWxheShpbnQgbXMpCit7CisJaW50IGk7CisKKwl3aGlsZSAobXMtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorCQkJb3V0YigweDEsIDB4ODApOworCX0KK30KKworc3RhdGljIHZvaWQgZGJncF9icmVhdGgodm9pZCkKK3sKKwkvKiBTbGVlcCB0byBnaXZlIHRoZSBkZWJ1ZyBwb3J0IGEgY2hhbmNlIHRvIGJyZWF0aGUgKi8KK30KKworc3RhdGljIGludCBkYmdwX3dhaXRfdW50aWxfZG9uZSh1bnNpZ25lZCBjdHJsKQoreworCXUzMiBwaWRzLCBscGlkOworCWludCByZXQ7CisJaW50IGxvb3AgPSAzOworCityZXRyeToKKwl3cml0ZWwoY3RybCB8IERCR1BfR08sICZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwlyZXQgPSBkYmdwX3dhaXRfdW50aWxfY29tcGxldGUoKTsKKwlwaWRzID0gcmVhZGwoJmVoY2lfZGVidWctPnBpZHMpOworCWxwaWQgPSBEQkdQX1BJRF9HRVQocGlkcyk7CisKKwlpZiAocmV0IDwgMCkgeworCQkvKiBBIC1EQkdQX1RJTUVPVVQgZmFpbHVyZSBoZXJlIG1lYW5zIHRoZSBkZXZpY2UgaGFzCisJCSAqIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIGl0IHdhcyB1bnBsdWdnZWQsIGluIHdoaWNoCisJCSAqIGNhc2Ugd2UgZG8gbm90IHdhbnQgdG8gaGFuZyB0aGUgc3lzdGVtIHNvIHRoZSBkYmdwCisJCSAqIHdpbGwgYmUgbWFya2VkIGFzIHVuc2FmZSB0byB1c2UuICBFSENJIHJlc2V0IGlzIHRoZQorCQkgKiBvbmx5IHdheSB0byByZWNvdmVyIGlmIHlvdSB1bnBsdWcgdGhlIGRiZ3AgZGV2aWNlLgorCQkgKi8KKwkJaWYgKHJldCA9PSAtREJHUF9USU1FT1VUICYmICFkYmdwX25vdF9zYWZlKQorCQkJZGJncF9ub3Rfc2FmZSA9IDE7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcG9ydCBpcyBnZXR0aW5nIGZ1bGwgb3IgaXQgaGFzIGRyb3BwZWQgZGF0YQorCSAqIHN0YXJ0IHBhY2luZyBvdXJzZWx2ZXMsIG5vdCBuZWNlc3NhcnkgYnV0IGl0J3MgZnJpZW5kbHkuCisJICovCisJaWYgKChscGlkID09IFVTQl9QSURfTkFLKSB8fCAobHBpZCA9PSBVU0JfUElEX05ZRVQpKQorCQlkYmdwX2JyZWF0aCgpOworCisJLyogSWYgSSBnZXQgYSBOQUNLIHJlaXNzdWUgdGhlIHRyYW5zbWlzc2lvbiAqLworCWlmIChscGlkID09IFVTQl9QSURfTkFLKSB7CisJCWlmICgtLWxvb3AgPiAwKQorCQkJZ290byByZXRyeTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGJncF9zZXRfZGF0YShjb25zdCB2b2lkICpidWYsIGludCBzaXplKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmOworCXUzMiBsbywgaGk7CisJaW50IGk7CisKKwlsbyA9IGhpID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNCAmJiBpIDwgc2l6ZTsgaSsrKQorCQlsbyB8PSBieXRlc1tpXSA8PCAoOCppKTsKKwlmb3IgKDsgaSA8IDggJiYgaSA8IHNpemU7IGkrKykKKwkJaGkgfD0gYnl0ZXNbaV0gPDwgKDgqKGkgLSA0KSk7CisJd3JpdGVsKGxvLCAmZWhjaV9kZWJ1Zy0+ZGF0YTAzKTsKKwl3cml0ZWwoaGksICZlaGNpX2RlYnVnLT5kYXRhNDcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGJncF9nZXRfZGF0YSh2b2lkICpidWYsIGludCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmOworCXUzMiBsbywgaGk7CisJaW50IGk7CisKKwlsbyA9IHJlYWRsKCZlaGNpX2RlYnVnLT5kYXRhMDMpOworCWhpID0gcmVhZGwoJmVoY2lfZGVidWctPmRhdGE0Nyk7CisJZm9yIChpID0gMDsgaSA8IDQgJiYgaSA8IHNpemU7IGkrKykKKwkJYnl0ZXNbaV0gPSAobG8gPj4gKDgqaSkpICYgMHhmZjsKKwlmb3IgKDsgaSA8IDggJiYgaSA8IHNpemU7IGkrKykKKwkJYnl0ZXNbaV0gPSAoaGkgPj4gKDgqKGkgLSA0KSkpICYgMHhmZjsKK30KKworc3RhdGljIGludCBkYmdwX291dCh1MzIgYWRkciwgY29uc3QgY2hhciAqYnl0ZXMsIGludCBzaXplKQoreworCXUzMiBwaWRzLCBjdHJsOworCisJcGlkcyA9IHJlYWRsKCZlaGNpX2RlYnVnLT5waWRzKTsKKwlwaWRzID0gZGJncF9waWRfdXBkYXRlKHBpZHMsIFVTQl9QSURfT1VUKTsKKworCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJY3RybCA9IGRiZ3BfbGVuX3VwZGF0ZShjdHJsLCBzaXplKTsKKwljdHJsIHw9IERCR1BfT1VUOworCWN0cmwgfD0gREJHUF9HTzsKKworCWRiZ3Bfc2V0X2RhdGEoYnl0ZXMsIHNpemUpOworCXdyaXRlbChhZGRyLCAmZWhjaV9kZWJ1Zy0+YWRkcmVzcyk7CisJd3JpdGVsKHBpZHMsICZlaGNpX2RlYnVnLT5waWRzKTsKKwlyZXR1cm4gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7Cit9CisKK3N0YXRpYyBpbnQgZGJncF9idWxrX3dyaXRlKHVuc2lnbmVkIGRldm51bSwgdW5zaWduZWQgZW5kcG9pbnQsCisJCQkgY29uc3QgY2hhciAqYnl0ZXMsIGludCBzaXplKQoreworCWludCByZXQ7CisJaW50IGxvb3BzID0gNTsKKwl1MzIgYWRkcjsKKwlpZiAoc2l6ZSA+IERCR1BfTUFYX1BBQ0tFVCkKKwkJcmV0dXJuIC0xOworCisJYWRkciA9IERCR1BfRVBBRERSKGRldm51bSwgZW5kcG9pbnQpOwordHJ5X2FnYWluOgorCWlmIChsb29wcy0tKSB7CisJCXJldCA9IGRiZ3Bfb3V0KGFkZHIsIGJ5dGVzLCBzaXplKTsKKwkJaWYgKHJldCA9PSAtREJHUF9FUlJfQkFEKSB7CisJCQlpbnQgdHJ5X2xvb3BzID0gMzsKKwkJCWRvIHsKKwkJCQkvKiBFbWl0IGEgZHVtbXkgcGFja2V0IHRvIHJlLXN5bmMgY29tbXVuaWNhdGlvbgorCQkJCSAqIHdpdGggdGhlIGRlYnVnIGRldmljZSAqLworCQkJCWlmIChkYmdwX291dChhZGRyLCAiMTIzNDU2NzgiLCA4KSA+PSAwKSB7CisJCQkJCXVkZWxheSgyKTsKKwkJCQkJZ290byB0cnlfYWdhaW47CisJCQkJfQorCQkJfSB3aGlsZSAodHJ5X2xvb3BzLS0pOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkYmdwX2J1bGtfcmVhZCh1bnNpZ25lZCBkZXZudW0sIHVuc2lnbmVkIGVuZHBvaW50LCB2b2lkICpkYXRhLAorCQkJCSBpbnQgc2l6ZSkKK3sKKwl1MzIgcGlkcywgYWRkciwgY3RybDsKKwlpbnQgcmV0OworCisJaWYgKHNpemUgPiBEQkdQX01BWF9QQUNLRVQpCisJCXJldHVybiAtMTsKKworCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIGVuZHBvaW50KTsKKworCXBpZHMgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+cGlkcyk7CisJcGlkcyA9IGRiZ3BfcGlkX3VwZGF0ZShwaWRzLCBVU0JfUElEX0lOKTsKKworCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJY3RybCA9IGRiZ3BfbGVuX3VwZGF0ZShjdHJsLCBzaXplKTsKKwljdHJsICY9IH5EQkdQX09VVDsKKwljdHJsIHw9IERCR1BfR087CisKKwl3cml0ZWwoYWRkciwgJmVoY2lfZGVidWctPmFkZHJlc3MpOworCXdyaXRlbChwaWRzLCAmZWhjaV9kZWJ1Zy0+cGlkcyk7CisJcmV0ID0gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2l6ZSA+IHJldCkKKwkJc2l6ZSA9IHJldDsKKwlkYmdwX2dldF9kYXRhKGRhdGEsIHNpemUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGJncF9jb250cm9sX21zZyh1bnNpZ25lZCBkZXZudW0sIGludCByZXF1ZXN0dHlwZSwKKwlpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKmRhdGEsIGludCBzaXplKQoreworCXUzMiBwaWRzLCBhZGRyLCBjdHJsOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgcmVxOworCWludCByZWFkOworCWludCByZXQ7CisKKwlyZWFkID0gKHJlcXVlc3R0eXBlICYgVVNCX0RJUl9JTikgIT0gMDsKKwlpZiAoc2l6ZSA+IChyZWFkID8gREJHUF9NQVhfUEFDS0VUOjApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBDb21wdXRlIHRoZSBjb250cm9sIG1lc3NhZ2UgKi8KKwlyZXEuYlJlcXVlc3RUeXBlID0gcmVxdWVzdHR5cGU7CisJcmVxLmJSZXF1ZXN0ID0gcmVxdWVzdDsKKwlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYodmFsdWUpOworCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisJcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKworCXBpZHMgPSBEQkdQX1BJRF9TRVQoVVNCX1BJRF9EQVRBMCwgVVNCX1BJRF9TRVRVUCk7CisJYWRkciA9IERCR1BfRVBBRERSKGRldm51bSwgMCk7CisKKwljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOworCWN0cmwgPSBkYmdwX2xlbl91cGRhdGUoY3RybCwgc2l6ZW9mKHJlcSkpOworCWN0cmwgfD0gREJHUF9PVVQ7CisJY3RybCB8PSBEQkdQX0dPOworCisJLyogU2VuZCB0aGUgc2V0dXAgbWVzc2FnZSAqLworCWRiZ3Bfc2V0X2RhdGEoJnJlcSwgc2l6ZW9mKHJlcSkpOworCXdyaXRlbChhZGRyLCAmZWhjaV9kZWJ1Zy0+YWRkcmVzcyk7CisJd3JpdGVsKHBpZHMsICZlaGNpX2RlYnVnLT5waWRzKTsKKwlyZXQgPSBkYmdwX3dhaXRfdW50aWxfZG9uZShjdHJsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlYWQgdGhlIHJlc3VsdCAqLworCXJldHVybiBkYmdwX2J1bGtfcmVhZChkZXZudW0sIDAsIGRhdGEsIHNpemUpOworfQorCisKKy8qIEZpbmQgYSBQQ0kgY2FwYWJpbGl0eSAqLworc3RhdGljIHUzMiBfX2luaXQgZmluZF9jYXAodTMyIG51bSwgdTMyIHNsb3QsIHUzMiBmdW5jLCBpbnQgY2FwKQoreworCXU4IHBvczsKKwlpbnQgYnl0ZXM7CisKKwlpZiAoIShyZWFkX3BjaV9jb25maWdfMTYobnVtLCBzbG90LCBmdW5jLCBQQ0lfU1RBVFVTKSAmCisJCVBDSV9TVEFUVVNfQ0FQX0xJU1QpKQorCQlyZXR1cm4gMDsKKworCXBvcyA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKG51bSwgc2xvdCwgZnVuYywgUENJX0NBUEFCSUxJVFlfTElTVCk7CisJZm9yIChieXRlcyA9IDA7IGJ5dGVzIDwgNDggJiYgcG9zID49IDB4NDA7IGJ5dGVzKyspIHsKKwkJdTggaWQ7CisKKwkJcG9zICY9IH4zOworCQlpZCA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKG51bSwgc2xvdCwgZnVuYywgcG9zK1BDSV9DQVBfTElTVF9JRCk7CisJCWlmIChpZCA9PSAweGZmKQorCQkJYnJlYWs7CisJCWlmIChpZCA9PSBjYXApCisJCQlyZXR1cm4gcG9zOworCisJCXBvcyA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKG51bSwgc2xvdCwgZnVuYywKKwkJCQkJCSBwb3MrUENJX0NBUF9MSVNUX05FWFQpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBfX2luaXQgX19maW5kX2RiZ3AodTMyIGJ1cywgdTMyIHNsb3QsIHUzMiBmdW5jKQoreworCXUzMiBjbGFzczsKKworCWNsYXNzID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NMQVNTX1JFVklTSU9OKTsKKwlpZiAoKGNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19TRVJJQUxfVVNCX0VIQ0kpCisJCXJldHVybiAwOworCisJcmV0dXJuIGZpbmRfY2FwKGJ1cywgc2xvdCwgZnVuYywgUENJX0NBUF9JRF9FSENJX0RFQlVHKTsKK30KKworc3RhdGljIHUzMiBfX2luaXQgZmluZF9kYmdwKGludCBlaGNpX251bSwgdTMyICpyYnVzLCB1MzIgKnJzbG90LCB1MzIgKnJmdW5jKQoreworCXUzMiBidXMsIHNsb3QsIGZ1bmM7CisKKwlmb3IgKGJ1cyA9IDA7IGJ1cyA8IDI1NjsgYnVzKyspIHsKKwkJZm9yIChzbG90ID0gMDsgc2xvdCA8IDMyOyBzbG90KyspIHsKKwkJCWZvciAoZnVuYyA9IDA7IGZ1bmMgPCA4OyBmdW5jKyspIHsKKwkJCQl1bnNpZ25lZCBjYXA7CisKKwkJCQljYXAgPSBfX2ZpbmRfZGJncChidXMsIHNsb3QsIGZ1bmMpOworCisJCQkJaWYgKCFjYXApCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChlaGNpX251bS0tICE9IDApCisJCQkJCWNvbnRpbnVlOworCQkJCSpyYnVzID0gYnVzOworCQkJCSpyc2xvdCA9IHNsb3Q7CisJCQkJKnJmdW5jID0gZnVuYzsKKwkJCQlyZXR1cm4gY2FwOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRiZ3BfZWhjaV9zdGFydHVwKHZvaWQpCit7CisJdTMyIGN0cmwsIGNtZCwgc3RhdHVzOworCWludCBsb29wOworCisJLyogQ2xhaW0gb3duZXJzaGlwLCBidXQgZG8gbm90IGVuYWJsZSB5ZXQgKi8KKwljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOworCWN0cmwgfD0gREJHUF9PV05FUjsKKwljdHJsICY9IH4oREJHUF9FTkFCTEVEIHwgREJHUF9JTlVTRSk7CisJd3JpdGVsKGN0cmwsICZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwl1ZGVsYXkoMSk7CisKKwlkYmdwX2VoY2lfc3RhdHVzKCJFSENJIHN0YXJ0dXAiKTsKKwkvKiBTdGFydCB0aGUgZWhjaSBydW5uaW5nICovCisJY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJY21kICY9IH4oQ01EX0xSRVNFVCB8IENNRF9JQUFEIHwgQ01EX1BTRSB8IENNRF9BU0UgfCBDTURfUkVTRVQpOworCWNtZCB8PSBDTURfUlVOOworCXdyaXRlbChjbWQsICZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCisJLyogRW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcm91dGVkIHRvIHRoZSBFSENJICovCisJd3JpdGVsKEZMQUdfQ0YsICZlaGNpX3JlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7CisKKwkvKiBXYWl0IHVudGlsIHRoZSBjb250cm9sbGVyIGlzIG5vIGxvbmdlciBoYWx0ZWQgKi8KKwlsb29wID0gMTA7CisJZG8geworCQlzdGF0dXMgPSByZWFkbCgmZWhjaV9yZWdzLT5zdGF0dXMpOworCQlpZiAoIShzdGF0dXMgJiBTVFNfSEFMVCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcCA+IDApOworCisJaWYgKCFsb29wKSB7CisJCWRiZ3BfcHJpbnRrKCJlaGNpIGNhbiBub3QgYmUgc3RhcnRlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYmdwX3ByaW50aygiZWhjaSBzdGFydGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYmdwX2VoY2lfY29udHJvbGxlcl9yZXNldCh2b2lkKQoreworCWludCBsb29wID0gMjUwICogMTAwMDsKKwl1MzIgY21kOworCisJLyogUmVzZXQgdGhlIEVIQ0kgY29udHJvbGxlciAqLworCWNtZCA9IHJlYWRsKCZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCWNtZCB8PSBDTURfUkVTRVQ7CisJd3JpdGVsKGNtZCwgJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJZG8geworCQljbWQgPSByZWFkbCgmZWhjaV9yZWdzLT5jb21tYW5kKTsKKwl9IHdoaWxlICgoY21kICYgQ01EX1JFU0VUKSAmJiAoLS1sb29wID4gMCkpOworCisJaWYgKCFsb29wKSB7CisJCWRiZ3BfcHJpbnRrKCJjYW4gbm90IHJlc2V0IGVoY2lcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWRiZ3BfZWhjaV9zdGF0dXMoImVoY2kgcmVzZXQgZG9uZSIpOworCXJldHVybiAwOworfQorc3RhdGljIGludCBlaGNpX3dhaXRfZm9yX3BvcnQoaW50IHBvcnQpOworLyogUmV0dXJuIDAgb24gc3VjY2VzcworICogUmV0dXJuIC1FTk9ERVYgZm9yIGFueSBnZW5lcmFsIGZhaWx1cmUKKyAqIFJldHVybiAtRUlPIGlmIHdhaXQgZm9yIHBvcnQgZmFpbHMKKyAqLworaW50IGRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCh2b2lkKQoreworCWludCBkZXZudW07CisJc3RydWN0IHVzYl9kZWJ1Z19kZXNjcmlwdG9yIGRiZ3BfZGVzYzsKKwlpbnQgcmV0OworCXUzMiBjdHJsLCBwb3J0c2MsIGNtZDsKKwlpbnQgZGJnX3BvcnQgPSBkYmdwX3BoeXNfcG9ydDsKKwlpbnQgdHJpZXMgPSAzOworCWludCByZXNldF9wb3J0X3RyaWVzID0gMTsKKwlpbnQgdHJ5X2hhcmRfb25jZSA9IDE7CisKK3RyeV9wb3J0X3Jlc2V0X2FnYWluOgorCXJldCA9IGRiZ3BfZWhjaV9zdGFydHVwKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhaXQgZm9yIGEgZGV2aWNlIHRvIHNob3cgdXAgaW4gdGhlIGRlYnVnIHBvcnQgKi8KKwlyZXQgPSBlaGNpX3dhaXRfZm9yX3BvcnQoZGJnX3BvcnQpOworCWlmIChyZXQgPCAwKSB7CisJCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2RiZ19wb3J0IC0gMV0pOworCQlpZiAoIShwb3J0c2MgJiBQT1JUX0NPTk5FQ1QpICYmIHRyeV9oYXJkX29uY2UpIHsKKwkJCS8qIExhc3QgZGl0Y2ggZWZmb3J0IHRvIHRyeSB0byBmb3JjZSBlbmFibGUKKwkJCSAqIHRoZSBkZWJ1ZyBkZXZpY2UgYnkgdXNpbmcgdGhlIHBhY2tldCB0ZXN0CisJCQkgKiBlaGNpIGNvbW1hbmQgdG8gdHJ5IGFuZCB3YWtlIGl0IHVwLiAqLworCQkJdHJ5X2hhcmRfb25jZSA9IDA7CisJCQljbWQgPSByZWFkbCgmZWhjaV9yZWdzLT5jb21tYW5kKTsKKwkJCWNtZCAmPSB+Q01EX1JVTjsKKwkJCXdyaXRlbChjbWQsICZlaGNpX3JlZ3MtPmNvbW1hbmQpOworCQkJcG9ydHNjID0gcmVhZGwoJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbZGJnX3BvcnQgLSAxXSk7CisJCQlwb3J0c2MgfD0gUE9SVF9URVNUX1BLVDsKKwkJCXdyaXRlbChwb3J0c2MsICZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW2RiZ19wb3J0IC0gMV0pOworCQkJZGJncF9laGNpX3N0YXR1cygiVHJ5aW5nIHRvIGZvcmNlIGRlYnVnIHBvcnQgb25saW5lIik7CisJCQltZGVsYXkoNTApOworCQkJZGJncF9laGNpX2NvbnRyb2xsZXJfcmVzZXQoKTsKKwkJCWdvdG8gdHJ5X3BvcnRfcmVzZXRfYWdhaW47CisJCX0gZWxzZSBpZiAocmVzZXRfcG9ydF90cmllcy0tKSB7CisJCQlnb3RvIHRyeV9wb3J0X3Jlc2V0X2FnYWluOworCQl9CisJCWRiZ3BfcHJpbnRrKCJObyBkZXZpY2UgZm91bmQgaW4gZGVidWcgcG9ydFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkYmdwX2VoY2lfc3RhdHVzKCJ3YWl0IGZvciBwb3J0IGRvbmUiKTsKKworCS8qIEVuYWJsZSB0aGUgZGVidWcgcG9ydCAqLworCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJY3RybCB8PSBEQkdQX0NMQUlNOworCXdyaXRlbChjdHJsLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwlpZiAoKGN0cmwgJiBEQkdQX0NMQUlNKSAhPSBEQkdQX0NMQUlNKSB7CisJCWRiZ3BfcHJpbnRrKCJObyBkZXZpY2UgaW4gZGVidWcgcG9ydFxuIik7CisJCXdyaXRlbChjdHJsICYgfkRCR1BfQ0xBSU0sICZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRiZ3BfZWhjaV9zdGF0dXMoImRlYnVnIHBvcnRlZCBlbmFibGVkIik7CisKKwkvKiBDb21wbGV0ZWx5IHRyYW5zZmVyIHRoZSBkZWJ1ZyBkZXZpY2UgdG8gdGhlIGRlYnVnIGNvbnRyb2xsZXIgKi8KKwlwb3J0c2MgPSByZWFkbCgmZWhjaV9yZWdzLT5wb3J0X3N0YXR1c1tkYmdfcG9ydCAtIDFdKTsKKwlwb3J0c2MgJj0gflBPUlRfUEU7CisJd3JpdGVsKHBvcnRzYywgJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbZGJnX3BvcnQgLSAxXSk7CisKKwlkYmdwX21kZWxheSgxMDApOworCit0cnlfYWdhaW46CisJLyogRmluZCB0aGUgZGVidWcgZGV2aWNlIGFuZCBtYWtlIGl0IGRldmljZSBudW1iZXIgMTI3ICovCisJZm9yIChkZXZudW0gPSAwOyBkZXZudW0gPD0gMTI3OyBkZXZudW0rKykgeworCQlyZXQgPSBkYmdwX2NvbnRyb2xfbXNnKGRldm51bSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCAoVVNCX0RUX0RFQlVHIDw8IDgpLCAwLAorCQkJJmRiZ3BfZGVzYywgc2l6ZW9mKGRiZ3BfZGVzYykpOworCQlpZiAocmV0ID4gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZGV2bnVtID4gMTI3KSB7CisJCWRiZ3BfcHJpbnRrKCJDb3VsZCBub3QgZmluZCBhdHRhY2hlZCBkZWJ1ZyBkZXZpY2VcbiIpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKHJldCA8IDApIHsKKwkJZGJncF9wcmludGsoIkF0dGFjaGVkIGRldmljZSBpcyBub3QgYSBkZWJ1ZyBkZXZpY2VcbiIpOworCQlnb3RvIGVycjsKKwl9CisJZGJncF9lbmRwb2ludF9vdXQgPSBkYmdwX2Rlc2MuYkRlYnVnT3V0RW5kcG9pbnQ7CisKKwkvKiBNb3ZlIHRoZSBkZXZpY2UgdG8gMTI3IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgKi8KKwlpZiAoZGV2bnVtICE9IFVTQl9ERUJVR19ERVZOVU0pIHsKKwkJcmV0ID0gZGJncF9jb250cm9sX21zZyhkZXZudW0sCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCVVTQl9SRVFfU0VUX0FERFJFU1MsIFVTQl9ERUJVR19ERVZOVU0sIDAsIE5VTEwsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGJncF9wcmludGsoIkNvdWxkIG5vdCBtb3ZlIGF0dGFjaGVkIGRldmljZSB0byAlZFxuIiwKKwkJCQlVU0JfREVCVUdfREVWTlVNKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCWRldm51bSA9IFVTQl9ERUJVR19ERVZOVU07CisJCWRiZ3BfcHJpbnRrKCJkZWJ1ZyBkZXZpY2UgcmVuYW1lZCB0byAxMjdcbiIpOworCX0KKworCS8qIEVuYWJsZSB0aGUgZGVidWcgaW50ZXJmYWNlICovCisJcmV0ID0gZGJncF9jb250cm9sX21zZyhVU0JfREVCVUdfREVWTlVNLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJVVNCX1JFUV9TRVRfRkVBVFVSRSwgVVNCX0RFVklDRV9ERUJVR19NT0RFLCAwLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmdwX3ByaW50aygiIENvdWxkIG5vdCBlbmFibGUgdGhlIGRlYnVnIGRldmljZVxuIik7CisJCWdvdG8gZXJyOworCX0KKwlkYmdwX3ByaW50aygiZGVidWcgaW50ZXJmYWNlIGVuYWJsZWRcbiIpOworCS8qIFBlcmZvcm0gYSBzbWFsbCB3cml0ZSB0byBnZXQgdGhlIGV2ZW4vb2RkIGRhdGEgc3RhdGUgaW4gc3luYworCSAqLworCXJldCA9IGRiZ3BfYnVsa193cml0ZShVU0JfREVCVUdfREVWTlVNLCBkYmdwX2VuZHBvaW50X291dCwgIiAiLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmdwX3ByaW50aygiZGJncF9idWxrX3dyaXRlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwlkYmdwX3ByaW50aygic21hbGwgd3JpdGUgZG9uZWRcbiIpOworCWRiZ3Bfbm90X3NhZmUgPSAwOworCisJcmV0dXJuIDA7CitlcnI6CisJaWYgKHRyaWVzLS0pCisJCWdvdG8gdHJ5X2FnYWluOworCXJldHVybiAtRU5PREVWOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGJncF9leHRlcm5hbF9zdGFydHVwKTsKKworc3RhdGljIGludCBfX2luaXQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQoreworCXUzMiBwb3J0c2M7CisJdTMyIGRlbGF5X3RpbWUsIGRlbGF5OworCWludCBsb29wOworCisJZGJncF9laGNpX3N0YXR1cygicmVzZXQgcG9ydCIpOworCS8qIFJlc2V0IHRoZSB1c2IgZGVidWcgcG9ydCAqLworCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW3BvcnQgLSAxXSk7CisJcG9ydHNjICY9IH5QT1JUX1BFOworCXBvcnRzYyB8PSBQT1JUX1JFU0VUOworCXdyaXRlbChwb3J0c2MsICZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW3BvcnQgLSAxXSk7CisKKwlkZWxheSA9IEhVQl9ST09UX1JFU0VUX1RJTUU7CisJZm9yIChkZWxheV90aW1lID0gMDsgZGVsYXlfdGltZSA8IEhVQl9SRVNFVF9USU1FT1VUOworCSAgICAgZGVsYXlfdGltZSArPSBkZWxheSkgeworCQlkYmdwX21kZWxheShkZWxheSk7CisJCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW3BvcnQgLSAxXSk7CisJCWlmICghKHBvcnRzYyAmIFBPUlRfUkVTRVQpKQorCQkJYnJlYWs7CisJfQorCQlpZiAocG9ydHNjICYgUE9SVF9SRVNFVCkgeworCQkJLyogZm9yY2UgcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJCWxvb3AgPSAxMDAgKiAxMDAwOworCQkJd3JpdGVsKHBvcnRzYyAmIH4oUE9SVF9SV0NfQklUUyB8IFBPUlRfUkVTRVQpLAorCQkJCSZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW3BvcnQgLSAxXSk7CisJCQlkbyB7CisJCQkJdWRlbGF5KDEpOworCQkJCXBvcnRzYyA9IHJlYWRsKCZlaGNpX3JlZ3MtPnBvcnRfc3RhdHVzW3BvcnQtMV0pOworCQkJfSB3aGlsZSAoKHBvcnRzYyAmIFBPUlRfUkVTRVQpICYmICgtLWxvb3AgPiAwKSk7CisJCX0KKworCQkvKiBEZXZpY2Ugd2VudCBhd2F5PyAqLworCQlpZiAoIShwb3J0c2MgJiBQT1JUX0NPTk5FQ1QpKQorCQkJcmV0dXJuIC1FTk9UQ09OTjsKKworCQkvKiBib21iIG91dCBjb21wbGV0ZWx5IGlmIHNvbWV0aGluZyB3ZWlyZCBoYXBwZW5kICovCisJCWlmICgocG9ydHNjICYgUE9SVF9DU0MpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogSWYgd2UndmUgZmluaXNoZWQgcmVzZXR0aW5nLCB0aGVuIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLworCQlpZiAoIShwb3J0c2MgJiBQT1JUX1JFU0VUKSAmJiAocG9ydHNjICYgUE9SVF9QRSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IGVoY2lfd2FpdF9mb3JfcG9ydChpbnQgcG9ydCkKK3sKKwl1MzIgc3RhdHVzOworCWludCByZXQsIHJlcHM7CisKKwlmb3IgKHJlcHMgPSAwOyByZXBzIDwgMzAwOyByZXBzKyspIHsKKwkJc3RhdHVzID0gcmVhZGwoJmVoY2lfcmVncy0+c3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAmIFNUU19QQ0QpCisJCQlicmVhazsKKwkJZGJncF9tZGVsYXkoMSk7CisJfQorCXJldCA9IGVoY2lfcmVzZXRfcG9ydChwb3J0KTsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiAwOworCXJldHVybiAtRU5PVENPTk47Cit9CisKK3R5cGVkZWYgdm9pZCAoKnNldF9kZWJ1Z19wb3J0X3QpKGludCBwb3J0KTsKKworc3RhdGljIHZvaWQgX19pbml0IGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCit7Cit9CisKK3N0YXRpYyBzZXRfZGVidWdfcG9ydF90IF9faW5pdGRhdGEgc2V0X2RlYnVnX3BvcnQgPSBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0OworCitzdGF0aWMgdm9pZCBfX2luaXQgbnZpZGlhX3NldF9kZWJ1Z19wb3J0KGludCBwb3J0KQoreworCXUzMiBkd29yZDsKKwlkd29yZCA9IHJlYWRfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsCisJCQkJIDB4NzQpOworCWR3b3JkICY9IH4oMHgwZjw8MTIpOworCWR3b3JkIHw9ICgocG9ydCAmIDB4MGYpPDwxMik7CisJd3JpdGVfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsIDB4NzQsCisJCQkJIGR3b3JkKTsKKwlkYmdwX3ByaW50aygic2V0IGRlYnVnIHBvcnQgdG8gJWRcbiIsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZGV0ZWN0X3NldF9kZWJ1Z19wb3J0KHZvaWQpCit7CisJdTMyIHZlbmRvcmlkOworCisJdmVuZG9yaWQgPSByZWFkX3BjaV9jb25maWcoZWhjaV9kZXYuYnVzLCBlaGNpX2Rldi5zbG90LCBlaGNpX2Rldi5mdW5jLAorCQkgMHgwMCk7CisKKwlpZiAoKHZlbmRvcmlkICYgMHhmZmZmKSA9PSAweDEwZGUpIHsKKwkJZGJncF9wcmludGsoInVzaW5nIG52aWRpYSBzZXRfZGVidWdfcG9ydFxuIik7CisJCXNldF9kZWJ1Z19wb3J0ID0gbnZpZGlhX3NldF9kZWJ1Z19wb3J0OworCX0KK30KKworLyogVGhlIGNvZGUgaW4gZWFybHlfZWhjaV9iaW9zX2hhbmRvZmYoKSBpcyBkZXJpdmVkIGZyb20gdGhlIHVzYiBwY2kKKyAqIHF1aXJrIGluaXRpYWxpemF0aW9uLCBidXQgYWx0ZXJlZCBzbyBhcyB0byB1c2UgdGhlIGVhcmx5IFBDSQorICogcm91dGluZXMuICovCisjZGVmaW5lIEVIQ0lfVVNCTEVHU1VQX0JJT1MJKDEgPDwgMTYpCS8qIEJJT1Mgc2VtYXBob3JlICovCisjZGVmaW5lIEVIQ0lfVVNCTEVHQ1RMU1RTCTQJCS8qIGxlZ2FjeSBjb250cm9sL3N0YXR1cyAqLworc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2VoY2lfYmlvc19oYW5kb2ZmKHZvaWQpCit7CisJdTMyIGhjY19wYXJhbXMgPSByZWFkbCgmZWhjaV9jYXBzLT5oY2NfcGFyYW1zKTsKKwlpbnQgb2Zmc2V0ID0gKGhjY19wYXJhbXMgPj4gOCkgJiAweGZmOworCXUzMiBjYXA7CisJaW50IG1zZWM7CisKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuOworCisJY2FwID0gcmVhZF9wY2lfY29uZmlnKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwKKwkJCSAgICAgIGVoY2lfZGV2LmZ1bmMsIG9mZnNldCk7CisJZGJncF9wcmludGsoImRiZ3A6IGVoY2kgQklPUyBzdGF0ZSAlMDh4XG4iLCBjYXApOworCisJaWYgKChjYXAgJiAweGZmKSA9PSAxICYmIChjYXAgJiBFSENJX1VTQkxFR1NVUF9CSU9TKSkgeworCQlkYmdwX3ByaW50aygiZGJncDogQklPUyBoYW5kb2ZmXG4iKTsKKwkJd3JpdGVfcGNpX2NvbmZpZ19ieXRlKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwKKwkJCQkgICAgICBlaGNpX2Rldi5mdW5jLCBvZmZzZXQgKyAzLCAxKTsKKwl9CisKKwkvKiBpZiBib290IGZpcm13YXJlIG5vdyBvd25zIEVIQ0ksIHNwaW4gdGlsbCBpdCBoYW5kcyBpdCBvdmVyLiAqLworCW1zZWMgPSAxMDAwOworCXdoaWxlICgoY2FwICYgRUhDSV9VU0JMRUdTVVBfQklPUykgJiYgKG1zZWMgPiAwKSkgeworCQltZGVsYXkoMTApOworCQltc2VjIC09IDEwOworCQljYXAgPSByZWFkX3BjaV9jb25maWcoZWhjaV9kZXYuYnVzLCBlaGNpX2Rldi5zbG90LAorCQkJCSAgICAgIGVoY2lfZGV2LmZ1bmMsIG9mZnNldCk7CisJfQorCisJaWYgKGNhcCAmIEVIQ0lfVVNCTEVHU1VQX0JJT1MpIHsKKwkJLyogd2VsbCwgcG9zc2libHkgYnVnZ3kgQklPUy4uLiB0cnkgdG8gc2h1dCBpdCBkb3duLAorCQkgKiBhbmQgaG9wZSBub3RoaW5nIGdvZXMgdG9vIHdyb25nICovCisJCWRiZ3BfcHJpbnRrKCJkYmdwOiBCSU9TIGhhbmRvZmYgZmFpbGVkOiAlMDh4XG4iLCBjYXApOworCQl3cml0ZV9wY2lfY29uZmlnX2J5dGUoZWhjaV9kZXYuYnVzLCBlaGNpX2Rldi5zbG90LAorCQkJCSAgICAgIGVoY2lfZGV2LmZ1bmMsIG9mZnNldCArIDIsIDApOworCX0KKworCS8qIGp1c3QgaW4gY2FzZSwgYWx3YXlzIGRpc2FibGUgRUhDSSBTTUlzICovCisJd3JpdGVfcGNpX2NvbmZpZ19ieXRlKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwgZWhjaV9kZXYuZnVuYywKKwkJCSAgICAgIG9mZnNldCArIEVIQ0lfVVNCTEVHQ1RMU1RTLCAwKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZWhjaV9zZXR1cCh2b2lkKQoreworCXUzMiBjdHJsLCBwb3J0c2MsIGhjc19wYXJhbXM7CisJdTMyIGRlYnVnX3BvcnQsIG5ld19kZWJ1Z19wb3J0ID0gMCwgbl9wb3J0czsKKwlpbnQgcmV0LCBpOworCWludCBwb3J0X21hcF90cmllZDsKKwlpbnQgcGxheXRpbWVzID0gMzsKKworCWVhcmx5X2VoY2lfYmlvc19oYW5kb2ZmKCk7CisKK3RyeV9uZXh0X3RpbWU6CisJcG9ydF9tYXBfdHJpZWQgPSAwOworCit0cnlfbmV4dF9wb3J0OgorCisJaGNzX3BhcmFtcyA9IHJlYWRsKCZlaGNpX2NhcHMtPmhjc19wYXJhbXMpOworCWRlYnVnX3BvcnQgPSBIQ1NfREVCVUdfUE9SVChoY3NfcGFyYW1zKTsKKwlkYmdwX3BoeXNfcG9ydCA9IGRlYnVnX3BvcnQ7CisJbl9wb3J0cyAgICA9IEhDU19OX1BPUlRTKGhjc19wYXJhbXMpOworCisJZGJncF9wcmludGsoImRlYnVnX3BvcnQ6ICVkXG4iLCBkZWJ1Z19wb3J0KTsKKwlkYmdwX3ByaW50aygibl9wb3J0czogICAgJWRcbiIsIG5fcG9ydHMpOworCWRiZ3BfZWhjaV9zdGF0dXMoIiIpOworCisJZm9yIChpID0gMTsgaSA8PSBuX3BvcnRzOyBpKyspIHsKKwkJcG9ydHNjID0gcmVhZGwoJmVoY2lfcmVncy0+cG9ydF9zdGF0dXNbaS0xXSk7CisJCWRiZ3BfcHJpbnRrKCJwb3J0c3RhdHVzJWQ6ICUwOHhcbiIsIGksIHBvcnRzYyk7CisJfQorCisJaWYgKHBvcnRfbWFwX3RyaWVkICYmIChuZXdfZGVidWdfcG9ydCAhPSBkZWJ1Z19wb3J0KSkgeworCQlpZiAoLS1wbGF5dGltZXMpIHsKKwkJCXNldF9kZWJ1Z19wb3J0KG5ld19kZWJ1Z19wb3J0KTsKKwkJCWdvdG8gdHJ5X25leHRfdGltZTsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCisJLyogT25seSByZXNldCB0aGUgY29udHJvbGxlciBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUKKwkgKiBjb25maWd1cmVkIHN0YXRlICovCisJaWYgKCEocmVhZGwoJmVoY2lfcmVncy0+Y29uZmlndXJlZF9mbGFnKSAmIEZMQUdfQ0YpKSB7CisJCWlmIChkYmdwX2VoY2lfY29udHJvbGxlcl9yZXNldCgpICE9IDApCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJZGJncF9laGNpX3N0YXR1cygiZWhjaSBza2lwIC0gYWxyZWFkeSBjb25maWd1cmVkIik7CisJfQorCisJcmV0ID0gZGJncF9leHRlcm5hbF9zdGFydHVwKCk7CisJaWYgKHJldCA9PSAtRUlPKQorCQlnb3RvIG5leHRfZGVidWdfcG9ydDsKKworCWlmIChyZXQgPCAwKSB7CisJCS8qIFRoaW5ncyBkaWRuJ3Qgd29yayBzbyByZW1vdmUgbXkgY2xhaW0gKi8KKwkJY3RybCA9IHJlYWRsKCZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwkJY3RybCAmPSB+KERCR1BfQ0xBSU0gfCBEQkdQX09VVCk7CisJCXdyaXRlbChjdHJsLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7CisKK25leHRfZGVidWdfcG9ydDoKKwlwb3J0X21hcF90cmllZCB8PSAoMTw8KGRlYnVnX3BvcnQgLSAxKSk7CisJbmV3X2RlYnVnX3BvcnQgPSAoKGRlYnVnX3BvcnQtMSsxKSVuX3BvcnRzKSArIDE7CisJaWYgKHBvcnRfbWFwX3RyaWVkICE9ICgoMTw8bl9wb3J0cykgLSAxKSkgeworCQlzZXRfZGVidWdfcG9ydChuZXdfZGVidWdfcG9ydCk7CisJCWdvdG8gdHJ5X25leHRfcG9ydDsKKwl9CisJaWYgKC0tcGxheXRpbWVzKSB7CisJCXNldF9kZWJ1Z19wb3J0KG5ld19kZWJ1Z19wb3J0KTsKKwkJZ290byB0cnlfbmV4dF90aW1lOworCX0KKworCXJldHVybiAtMTsKK30KKworaW50IF9faW5pdCBlYXJseV9kYmdwX2luaXQoY2hhciAqcykKK3sKKwl1MzIgZGVidWdfcG9ydCwgYmFyLCBvZmZzZXQ7CisJdTMyIGJ1cywgc2xvdCwgZnVuYywgY2FwOworCXZvaWQgX19pb21lbSAqZWhjaV9iYXI7CisJdTMyIGRiZ3BfbnVtOworCXUzMiBiYXJfdmFsOworCWNoYXIgKmU7CisJaW50IHJldDsKKwl1OCBieXRlOworCisJaWYgKCFlYXJseV9wY2lfYWxsb3dlZCgpKQorCQlyZXR1cm4gLTE7CisKKwlkYmdwX251bSA9IDA7CisJaWYgKCpzKQorCQlkYmdwX251bSA9IHNpbXBsZV9zdHJ0b3VsKHMsICZlLCAxMCk7CisJZGJncF9wcmludGsoImRiZ3BfbnVtOiAlZFxuIiwgZGJncF9udW0pOworCisJY2FwID0gZmluZF9kYmdwKGRiZ3BfbnVtLCAmYnVzLCAmc2xvdCwgJmZ1bmMpOworCWlmICghY2FwKQorCQlyZXR1cm4gLTE7CisKKwlkYmdwX3ByaW50aygiRm91bmQgRUhDSSBkZWJ1ZyBwb3J0IG9uICUwMng6JTAyeC4lMXhcbiIsIGJ1cywgc2xvdCwKKwkJCSBmdW5jKTsKKworCWRlYnVnX3BvcnQgPSByZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCBmdW5jLCBjYXApOworCWJhciA9IChkZWJ1Z19wb3J0ID4+IDI5KSAmIDB4NzsKKwliYXIgPSAoYmFyICogNCkgKyAweGM7CisJb2Zmc2V0ID0gKGRlYnVnX3BvcnQgPj4gMTYpICYgMHhmZmY7CisJZGJncF9wcmludGsoImJhcjogJTAyeCBvZmZzZXQ6ICUwM3hcbiIsIGJhciwgb2Zmc2V0KTsKKwlpZiAoYmFyICE9IFBDSV9CQVNFX0FERFJFU1NfMCkgeworCQlkYmdwX3ByaW50aygib25seSBkZWJ1ZyBwb3J0cyBvbiBiYXIgMSBoYW5kbGVkLlxuIik7CisKKwkJcmV0dXJuIC0xOworCX0KKworCWJhcl92YWwgPSByZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCBmdW5jLCBQQ0lfQkFTRV9BRERSRVNTXzApOworCWRiZ3BfcHJpbnRrKCJiYXJfdmFsOiAlMDJ4IG9mZnNldDogJTAzeFxuIiwgYmFyX3ZhbCwgb2Zmc2V0KTsKKwlpZiAoYmFyX3ZhbCAmIH5QQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSB7CisJCWRiZ3BfcHJpbnRrKCJvbmx5IHNpbXBsZSAzMmJpdCBtbWlvIGJhcnMgc3VwcG9ydGVkXG4iKTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJLyogZG91YmxlIGNoZWNrIGlmIHRoZSBtZW0gc3BhY2UgaXMgZW5hYmxlZCAqLworCWJ5dGUgPSByZWFkX3BjaV9jb25maWdfYnl0ZShidXMsIHNsb3QsIGZ1bmMsIDB4MDQpOworCWlmICghKGJ5dGUgJiAweDIpKSB7CisJCWJ5dGUgIHw9IDB4MDI7CisJCXdyaXRlX3BjaV9jb25maWdfYnl0ZShidXMsIHNsb3QsIGZ1bmMsIDB4MDQsIGJ5dGUpOworCQlkYmdwX3ByaW50aygibW1pbyBmb3IgZWhjaSBlbmFibGVkXG4iKTsKKwl9CisKKwkvKgorCSAqIEZJWE1FIEkgZG9uJ3QgaGF2ZSB0aGUgYmFyIHNpemUgc28ganVzdCBndWVzcyBQQUdFX1NJWkUgaXMgbW9yZQorCSAqIHRoYW4gZW5vdWdoLiAgMUsgaXMgdGhlIGJpZ2dlc3QgSSBoYXZlIHNlZW4uCisJICovCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9EQkdQX0JBU0UsIGJhcl92YWwgJiBQQUdFX01BU0spOworCWVoY2lfYmFyID0gKHZvaWQgX19pb21lbSAqKV9fZml4X3RvX3ZpcnQoRklYX0RCR1BfQkFTRSk7CisJZWhjaV9iYXIgKz0gYmFyX3ZhbCAmIH5QQUdFX01BU0s7CisJZGJncF9wcmludGsoImVoY2lfYmFyOiAlcFxuIiwgZWhjaV9iYXIpOworCisJZWhjaV9jYXBzICA9IGVoY2lfYmFyOworCWVoY2lfcmVncyAgPSBlaGNpX2JhciArIEhDX0xFTkdUSChyZWFkbCgmZWhjaV9jYXBzLT5oY19jYXBiYXNlKSk7CisJZWhjaV9kZWJ1ZyA9IGVoY2lfYmFyICsgb2Zmc2V0OworCWVoY2lfZGV2LmJ1cyA9IGJ1czsKKwllaGNpX2Rldi5zbG90ID0gc2xvdDsKKwllaGNpX2Rldi5mdW5jID0gZnVuYzsKKworCWRldGVjdF9zZXRfZGVidWdfcG9ydCgpOworCisJcmV0ID0gZWhjaV9zZXR1cCgpOworCWlmIChyZXQgPCAwKSB7CisJCWRiZ3BfcHJpbnRrKCJlaGNpX3NldHVwIGZhaWxlZFxuIik7CisJCWVoY2lfZGVidWcgPSBOVUxMOworCisJCXJldHVybiAtMTsKKwl9CisJZGJncF9laGNpX3N0YXR1cygiZWFybHlfaW5pdF9jb21wbGV0ZSIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVhcmx5X2RiZ3Bfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqc3RyLCB1MzIgbikKK3sKKwlpbnQgY2h1bmssIHJldDsKKwljaGFyIGJ1ZltEQkdQX01BWF9QQUNLRVRdOworCWludCB1c2VfY3IgPSAwOworCXUzMiBjbWQsIGN0cmw7CisJaW50IHJlc2V0X3J1biA9IDA7CisKKwlpZiAoIWVoY2lfZGVidWcgfHwgZGJncF9ub3Rfc2FmZSkKKwkJcmV0dXJuOworCisJY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJaWYgKHVubGlrZWx5KCEoY21kICYgQ01EX1JVTikpKSB7CisJCS8qIElmIHRoZSBlaGNpIGNvbnRyb2xsZXIgaXMgbm90IGluIHRoZSBydW4gc3RhdGUgZG8gZXh0ZW5kZWQKKwkJICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgYWNwaSBvciBzb21lIG90aGVyIGluaXRpYWxpemF0aW9uIGFsc28KKwkJICogcmVzZXQgdGhlIGVoY2kgZGVidWcgcG9ydCAqLworCQljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOworCQlpZiAoIShjdHJsICYgREJHUF9FTkFCTEVEKSkgeworCQkJZGJncF9ub3Rfc2FmZSA9IDE7CisJCQlkYmdwX2V4dGVybmFsX3N0YXJ0dXAoKTsKKwkJfSBlbHNlIHsKKwkJCWNtZCB8PSBDTURfUlVOOworCQkJd3JpdGVsKGNtZCwgJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJCQlyZXNldF9ydW4gPSAxOworCQl9CisJfQorCXdoaWxlIChuID4gMCkgeworCQlmb3IgKGNodW5rID0gMDsgY2h1bmsgPCBEQkdQX01BWF9QQUNLRVQgJiYgbiA+IDA7CisJCSAgICAgc3RyKyssIGNodW5rKyssIG4tLSkgeworCQkJaWYgKCF1c2VfY3IgJiYgKnN0ciA9PSAnXG4nKSB7CisJCQkJdXNlX2NyID0gMTsKKwkJCQlidWZbY2h1bmtdID0gJ1xyJzsKKwkJCQlzdHItLTsKKwkJCQluKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAodXNlX2NyKQorCQkJCXVzZV9jciA9IDA7CisJCQlidWZbY2h1bmtdID0gKnN0cjsKKwkJfQorCQlpZiAoY2h1bmsgPiAwKSB7CisJCQlyZXQgPSBkYmdwX2J1bGtfd3JpdGUoVVNCX0RFQlVHX0RFVk5VTSwKKwkJCQkgICAgICBkYmdwX2VuZHBvaW50X291dCwgYnVmLCBjaHVuayk7CisJCX0KKwl9CisJaWYgKHVubGlrZWx5KHJlc2V0X3J1bikpIHsKKwkJY21kID0gcmVhZGwoJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJCWNtZCAmPSB+Q01EX1JVTjsKKwkJd3JpdGVsKGNtZCwgJmVoY2lfcmVncy0+Y29tbWFuZCk7CisJfQorfQorCitzdHJ1Y3QgY29uc29sZSBlYXJseV9kYmdwX2NvbnNvbGUgPSB7CisJLm5hbWUgPQkJImVhcmx5ZGJnIiwKKwkud3JpdGUgPQllYXJseV9kYmdwX3dyaXRlLAorCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXggPQktMSwKK307CisKK2ludCBkYmdwX3Jlc2V0X3ByZXAodm9pZCkKK3sKKwl1MzIgY3RybDsKKworCWRiZ3Bfbm90X3NhZmUgPSAxOworCWlmICghZWhjaV9kZWJ1ZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZWFybHlfZGJncF9jb25zb2xlLmluZGV4ICE9IC0xICYmCisJCSEoZWFybHlfZGJncF9jb25zb2xlLmZsYWdzICYgQ09OX0JPT1QpKQorCQlyZXR1cm4gMTsKKwkvKiBUaGlzIG1lYW5zIHRoZSBjb25zb2xlIGlzIG5vdCBpbml0aWFsaXplZCwgb3Igc2hvdWxkIGdldAorCSAqIHNodXRkb3duIHNvIGFzIHRvIGFsbG93IGZvciByZXVzZSBvZiB0aGUgdXNiIGRldmljZSwgd2hpY2gKKwkgKiBtZWFucyBpdCBpcyB0aW1lIHRvIHNodXRkb3duIHRoZSB1c2IgZGVidWcgcG9ydC4gKi8KKwljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOworCWlmIChjdHJsICYgREJHUF9FTkFCTEVEKSB7CisJCWN0cmwgJj0gfihEQkdQX0NMQUlNKTsKKwkJd3JpdGVsKGN0cmwsICZlaGNpX2RlYnVnLT5jb250cm9sKTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYmdwX3Jlc2V0X3ByZXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCA5Zjk4NmI0Li4zMzM1MTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0FUOTEKIAlib29sZWFuICJBdG1lbCBBVDkxIFVTQiBEZXZpY2UgUG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSAmJiAhQVJDSF9BVDkxU0FNOVJMICYmICFBUkNIX0FUOTFDQVA5CisJZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVNBTTlSTCAmJiAhQVJDSF9BVDkxQ0FQOSAmJiAhQVJDSF9BVDkxU0FNOUc0NQogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAJaGVscAogCSAgIE1hbnkgQXRtZWwgQVQ5MSBwcm9jZXNzb3JzIChzdWNoIGFzIHRoZSBBVDkxUk0yMDAwKSBoYXZlIGEKQEAgLTE0Myw3ICsxNDMsNyBAQAogY29uZmlnIFVTQl9HQURHRVRfQVRNRUxfVVNCQQogCWJvb2xlYW4gIkF0bWVsIFVTQkEiCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECi0JZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTFDQVA5IHx8IEFSQ0hfQVQ5MVNBTTlSTAorCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxQ0FQOSB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxU0FNOUc0NQogCWhlbHAKIAkgIFVTQkEgaXMgdGhlIGludGVncmF0ZWQgaGlnaC1zcGVlZCBVU0IgRGV2aWNlIGNvbnRyb2xsZXIgb24KIAkgIHRoZSBBVDMyQVA3MDB4LCBzb21lIEFUOTFTQU05IGFuZCBBVDkxQ0FQOSBwcm9jZXNzb3JzIGZyb20gQXRtZWwuCkBAIC02MjcsOSArNjI3LDEwIEBACiBjb25maWcgVVNCX0VUSAogCXRyaXN0YXRlICJFdGhlcm5ldCBHYWRnZXQgKHdpdGggQ0RDIEV0aGVybmV0IHN1cHBvcnQpIgogCWRlcGVuZHMgb24gTkVUCisJc2VsZWN0IENSQzMyCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBFdGhlcm5ldCBzdHlsZSBjb21tdW5pY2F0aW9uLCBpbiBlaXRoZXIKLQkgIG9mIHR3byB3YXlzOgorCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBFdGhlcm5ldCBzdHlsZSBjb21tdW5pY2F0aW9uLCBpbiBvbmUgb2YKKwkgIHNldmVyYWwgd2F5czoKIAkgIAogCSAgIC0gVGhlICJDb21tdW5pY2F0aW9uIERldmljZSBDbGFzcyIgKENEQykgRXRoZXJuZXQgQ29udHJvbCBNb2RlbC4KIAkgICAgIFRoYXQgcHJvdG9jb2wgaXMgb2Z0ZW4gYXZvaWRlZCB3aXRoIHB1cmUgRXRoZXJuZXQgYWRhcHRlcnMsIGluCkBAIC02MzksNyArNjQwLDExIEBACiAJICAgLSBPbiBoYXJkd2FyZSBjYW4ndCBpbXBsZW1lbnQgdGhhdCBwcm90b2NvbCwgYSBzaW1wbGUgQ0RDIHN1YnNldAogCSAgICAgaXMgdXNlZCwgcGxhY2luZyBmZXdlciBkZW1hbmRzIG9uIFVTQi4KIAotCSAgUk5ESVMgc3VwcG9ydCBpcyBhIHRoaXJkIG9wdGlvbiwgbW9yZSBkZW1hbmRpbmcgdGhhbiB0aGF0IHN1YnNldC4KKwkgICAtIENEQyBFdGhlcm5ldCBFbXVsYXRpb24gTW9kZWwgKEVFTSkgaXMgYSBuZXdlciBzdGFuZGFyZCB0aGF0IGhhcworCSAgICAgYSBzaW1wbGVyIGludGVyZmFjZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IG1vcmUgVVNCIGhhcmR3YXJlLgorCisJICBSTkRJUyBzdXBwb3J0IGlzIGFuIGFkZGl0aW9uYWwgb3B0aW9uLCBtb3JlIGRlbWFuZGluZyB0aGFuIHRoYW4KKwkgIHN1YnNldC4KIAogCSAgV2l0aGluIHRoZSBVU0IgZGV2aWNlLCB0aGlzIGdhZGdldCBkcml2ZXIgZXhwb3NlcyBhIG5ldHdvcmsgZGV2aWNlCiAJICAidXNiWCIsIHdoZXJlIFggZGVwZW5kcyBvbiB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZS4KQEAgLTY3Miw2ICs2NzcsMjIgQEAKIAkgICBYUCwgeW91J2xsIG5lZWQgdG8gZG93bmxvYWQgZHJpdmVycyBmcm9tIE1pY3Jvc29mdCdzIHdlYnNpdGU7IGEgVVJMCiAJICAgaXMgZ2l2ZW4gaW4gY29tbWVudHMgZm91bmQgaW4gdGhhdCBpbmZvIGZpbGUuCiAKK2NvbmZpZyBVU0JfRVRIX0VFTQorICAgICAgIGJvb2wgIkV0aGVybmV0IEVtdWxhdGlvbiBNb2RlbCAoRUVNKSBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gVVNCX0VUSAorICAgICAgIGRlZmF1bHQgbgorICAgICAgIGhlbHAKKyAgICAgICAgIENEQyBFRU0gaXMgYSBuZXdlciBVU0Igc3RhbmRhcmQgdGhhdCBpcyBzb21ld2hhdCBzaW1wbGVyIHRoYW4gQ0RDIEVDTQorICAgICAgICAgYW5kIHRoZXJlZm9yZSBjYW4gYmUgc3VwcG9ydGVkIGJ5IG1vcmUgaGFyZHdhcmUuICBUZWNobmljYWxseSBFQ00gYW5kCisgICAgICAgICBFRU0gYXJlIGRlc2lnbmVkIGZvciBkaWZmZXJlbnQgYXBwbGljYXRpb25zLiAgVGhlIEVDTSBtb2RlbCBleHRlbmRzCisgICAgICAgICB0aGUgbmV0d29yayBpbnRlcmZhY2UgdG8gdGhlIHRhcmdldCAoZS5nLiBhIFVTQiBjYWJsZSBtb2RlbSksIGFuZCB0aGUKKyAgICAgICAgIEVFTSBtb2RlbCBpcyBmb3IgbW9iaWxlIGRldmljZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBob3N0cyB1c2luZworICAgICAgICAgZXRoZXJuZXQgb3ZlciBVU0IuICBGb3IgTGludXggZ2FkZ2V0cywgaG93ZXZlciwgdGhlIGludGVyZmFjZSB3aXRoCisgICAgICAgICB0aGUgaG9zdCBpcyB0aGUgc2FtZSAoYSB1c2JYIGRldmljZSksIHNvIHRoZSBkaWZmZXJlbmNlcyBhcmUgbWluaW1hbC4KKworICAgICAgICAgSWYgeW91IHNheSAieSIgaGVyZSwgdGhlIEV0aGVybmV0IGdhZGdldCBkcml2ZXIgd2lsbCB1c2UgdGhlIEVFTQorICAgICAgICAgcHJvdG9jb2wgcmF0aGVyIHRoYW4gRUNNLiAgSWYgdW5zdXJlLCBzYXkgIm4iLgorCiBjb25maWcgVVNCX0dBREdFVEZTCiAJdHJpc3RhdGUgIkdhZGdldCBGaWxlc3lzdGVtIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwppbmRleCA3NzM1MmNjLi5kNWI2NTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKQEAgLTIzNzgsNDAgKzIzNzgsMzQgQEAKIAkJaWYgKCFlcC0+Y2FuY2VsX3RyYW5zZmVyICYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LAogCQkJCQlzdHJ1Y3QgdWRjX3JlcXVlc3QsIHF1ZXVlKTsKLQkJCWlmIChyZXEpIHsKLQkJCQkvKgotCQkJCSAqIGxlbmd0aCBieXRlcyB0cmFuc2ZlcmVkCi0JCQkJICogY2hlY2sgZG1hIGRvbmUgb2YgbGFzdCBkZXNjLiBpbiBQUEJEVSBtb2RlCi0JCQkJICovCi0JCQkJaWYgKHVzZV9kbWFfcHBiX2R1KSB7Ci0JCQkJCXRkID0gdWRjX2dldF9sYXN0X2RtYV9kZXNjKHJlcSk7Ci0JCQkJCWlmICh0ZCkgewotCQkJCQkJZG1hX2RvbmUgPQotCQkJCQkJCUFNRF9HRVRCSVRTKHRkLT5zdGF0dXMsCi0JCQkJCQkJVURDX0RNQV9JTl9TVFNfQlMpOwotCQkJCQkJLyogZG9uJ3QgY2FyZSBETUEgZG9uZSAqLwotCQkJCQkJcmVxLT5yZXEuYWN0dWFsID0KLQkJCQkJCQlyZXEtPnJlcS5sZW5ndGg7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQkvKiBhc3N1bWUgYWxsIGJ5dGVzIHRyYW5zZmVycmVkICovCisJCQkvKgorCQkJICogbGVuZ3RoIGJ5dGVzIHRyYW5zZmVyZWQKKwkJCSAqIGNoZWNrIGRtYSBkb25lIG9mIGxhc3QgZGVzYy4gaW4gUFBCRFUgbW9kZQorCQkJICovCisJCQlpZiAodXNlX2RtYV9wcGJfZHUpIHsKKwkJCQl0ZCA9IHVkY19nZXRfbGFzdF9kbWFfZGVzYyhyZXEpOworCQkJCWlmICh0ZCkgeworCQkJCQlkbWFfZG9uZSA9CisJCQkJCQlBTURfR0VUQklUUyh0ZC0+c3RhdHVzLAorCQkJCQkJVURDX0RNQV9JTl9TVFNfQlMpOworCQkJCQkvKiBkb24ndCBjYXJlIERNQSBkb25lICovCiAJCQkJCXJlcS0+cmVxLmFjdHVhbCA9IHJlcS0+cmVxLmxlbmd0aDsKIAkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGFzc3VtZSBhbGwgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KKwkJCQlyZXEtPnJlcS5hY3R1YWwgPSByZXEtPnJlcS5sZW5ndGg7CisJCQl9CiAKLQkJCQlpZiAocmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkgewotCQkJCQkvKiBjb21wbGV0ZSByZXEgKi8KLQkJCQkJY29tcGxldGVfcmVxKGVwLCByZXEsIDApOwotCQkJCQlyZXEtPmRtYV9nb2luZyA9IDA7Ci0JCQkJCS8qIGZ1cnRoZXIgcmVxdWVzdCBhdmFpbGFibGUgPyAqLwotCQkJCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgewotCQkJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KLQkJCQkJCXRtcCA9IHJlYWRsKAotCQkJCQkJCSZkZXYtPnJlZ3MtPmVwX2lycW1zayk7Ci0JCQkJCQl0bXAgfD0gQU1EX0JJVChlcC0+bnVtKTsKLQkJCQkJCXdyaXRlbCh0bXAsCi0JCQkJCQkJJmRldi0+cmVncy0+ZXBfaXJxbXNrKTsKLQkJCQkJfQotCisJCQlpZiAocmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkgeworCQkJCS8qIGNvbXBsZXRlIHJlcSAqLworCQkJCWNvbXBsZXRlX3JlcShlcCwgcmVxLCAwKTsKKwkJCQlyZXEtPmRtYV9nb2luZyA9IDA7CisJCQkJLyogZnVydGhlciByZXF1ZXN0IGF2YWlsYWJsZSA/ICovCisJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwkJCQkJdG1wID0gcmVhZGwoJmRldi0+cmVncy0+ZXBfaXJxbXNrKTsKKwkJCQkJdG1wIHw9IEFNRF9CSVQoZXAtPm51bSk7CisJCQkJCXdyaXRlbCh0bXAsICZkZXYtPnJlZ3MtPmVwX2lycW1zayk7CiAJCQkJfQogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDcyYmFlOGYuLjY2NDUwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0xNzU0LDcgKzE3NTQsNiBAQAogCQkJCUlSUUZfRElTQUJMRUQsIGRyaXZlcl9uYW1lLCB1ZGMpKSB7CiAJCQlEQkcoInJlcXVlc3QgdmJ1cyBpcnEgJWQgZmFpbGVkXG4iLAogCQkJCQl1ZGMtPmJvYXJkLnZidXNfcGluKTsKLQkJCWZyZWVfaXJxKHVkYy0+dWRwX2lycSwgdWRjKTsKIAkJCXJldHZhbCA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbDM7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F1ZGlvLmMKaW5kZXggOWY4MGY0ZS4uYTNhMGY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F1ZGlvLmMKQEAgLTEwNiwyMCArMTA2LDIwIEBACiAJCQljdHJsLT5iUmVxdWVzdCwgd192YWx1ZSwgbGVuLCBlcCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7Ci0JY2FzZSBTRVRfQ1VSOgorCWNhc2UgVUFDX1NFVF9DVVI6CiAJCXZhbHVlID0gMDsKIAkJYnJlYWs7CiAKLQljYXNlIFNFVF9NSU46CisJY2FzZSBVQUNfU0VUX01JTjoKIAkJYnJlYWs7CiAKLQljYXNlIFNFVF9NQVg6CisJY2FzZSBVQUNfU0VUX01BWDoKIAkJYnJlYWs7CiAKLQljYXNlIFNFVF9SRVM6CisJY2FzZSBVQUNfU0VUX1JFUzoKIAkJYnJlYWs7CiAKLQljYXNlIFNFVF9NRU06CisJY2FzZSBVQUNfU0VUX01FTToKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTQyLDEzICsxNDIsMTMgQEAKIAkJCWN0cmwtPmJSZXF1ZXN0LCB3X3ZhbHVlLCBsZW4sIGVwKTsKIAogCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKLQljYXNlIEdFVF9DVVI6Ci0JY2FzZSBHRVRfTUlOOgotCWNhc2UgR0VUX01BWDoKLQljYXNlIEdFVF9SRVM6CisJY2FzZSBVQUNfR0VUX0NVUjoKKwljYXNlIFVBQ19HRVRfTUlOOgorCWNhc2UgVUFDX0dFVF9NQVg6CisJY2FzZSBVQUNfR0VUX1JFUzoKIAkJdmFsdWUgPSAzOwogCQlicmVhazsKLQljYXNlIEdFVF9NRU06CisJY2FzZSBVQUNfR0VUX01FTToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xNzEsMTEgKzE3MSwxMSBAQAogCSAqIEF1ZGlvIGNsYXNzIG1lc3NhZ2VzOyBpbnRlcmZhY2UgYWN0aXZhdGlvbiB1c2VzIHNldF9hbHQoKS4KIAkgKi8KIAlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0VHlwZSkgewotCWNhc2UgVVNCX0FVRElPX1NFVF9FTkRQT0lOVDoKKwljYXNlIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQ6CiAJCXZhbHVlID0gYXVkaW9fc2V0X2VuZHBvaW50X3JlcShjLCBjdHJsKTsKIAkJYnJlYWs7CiAKLQljYXNlIFVTQl9BVURJT19HRVRfRU5EUE9JTlQ6CisJY2FzZSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQ6CiAJCXZhbHVlID0gYXVkaW9fZ2V0X2VuZHBvaW50X3JlcShjLCBjdHJsKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCA1OWU4NTIzLi5kMDUzOTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC02MDIsNyArNjAyLDcgQEAKIAkJCX0KIAkJfQogCi0JCWZvciAobGVuID0gMDsgcy0+d0RhdGFbbGVuXSAmJiBsZW4gPD0gMTI2OyBsZW4rKykKKwkJZm9yIChsZW4gPSAwOyBsZW4gPD0gMTI2ICYmIHMtPndEYXRhW2xlbl07IGxlbisrKQogCQkJY29udGludWU7CiAJCWlmICghbGVuKQogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggYTU2YjI0ZC4uNWUwOTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtMTMwNiwxMSArMTMwNiw2IEBACiAJCQlzZXR1cCA9ICooc3RydWN0IHVzYl9jdHJscmVxdWVzdCopIHVyYi0+c2V0dXBfcGFja2V0OwogCQkJd19pbmRleCA9IGxlMTZfdG9fY3B1KHNldHVwLndJbmRleCk7CiAJCQl3X3ZhbHVlID0gbGUxNl90b19jcHUoc2V0dXAud1ZhbHVlKTsKLQkJCWlmIChsZTE2X3RvX2NwdShzZXR1cC53TGVuZ3RoKSAhPQotCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKLQkJCQlzdGF0dXMgPSAtRU9WRVJGTE9XOwotCQkJCWdvdG8gcmV0dXJuX3VyYjsKLQkJCX0KIAogCQkJLyogcGFyYW5vaWEsIGluIGNhc2Ugb2Ygc3RhbGUgcXVldWVkIGRhdGEgKi8KIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggYmQxMDJmNS4uZjM3ZGUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTYxLDYgKzYxLDExIEBACiAgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCiAgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCiAgKiBuZWVkbGVzc2x5IGNvbXBsZXguICBUaGV5IGJvcnJvdyBtb3JlIGZyb20gQ0RDIEFDTSB0aGFuIENEQyBFQ00uCisgKgorICogV2hpbGUgQ0RDIEVDTSwgQ0RDIFN1YnNldCwgYW5kIFJORElTIGFyZSBkZXNpZ25lZCB0byBleHRlbmQgdGhlIGV0aGVybmV0CisgKiBpbnRlcmZhY2UgdG8gdGhlIHRhcmdldCwgQ0RDIEVFTSB3YXMgZGVzaWduZWQgdG8gdXNlIGV0aGVybmV0IG92ZXIgdGhlIFVTQgorICogbGluayBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0YXJnZXQuICBDREMgRUVNIGlzIGltcGxlbWVudGVkIGFzIGFuIGFsdGVybmF0aXZlCisgKiB0byB0aG9zZSBvdGhlciBwcm90b2NvbHMgd2hlbiB0aGF0IGNvbW11bmljYXRpb24gbW9kZWwgaXMgbW9yZSBhcHByb3ByaWF0ZQogICovCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJFdGhlcm5ldCBHYWRnZXQiCkBAIC0xMTQsNiArMTE5LDcgQEAKICNpbmNsdWRlICJmX3JuZGlzLmMiCiAjaW5jbHVkZSAicm5kaXMuYyIKICNlbmRpZgorI2luY2x1ZGUgImZfZWVtLmMiCiAjaW5jbHVkZSAidV9ldGhlci5jIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTUwLDYgKzE1NiwxMCBAQAogI2RlZmluZSBSTkRJU19WRU5ET1JfTlVNCTB4MDUyNQkvKiBOZXRDaGlwICovCiAjZGVmaW5lIFJORElTX1BST0RVQ1RfTlVNCTB4YTRhMgkvKiBFdGhlcm5ldC9STkRJUyBHYWRnZXQgKi8KIAorLyogRm9yIEVFTSBnYWRnZXRzICovCisjZGVmaW5lIEVFTV9WRU5ET1JfTlVNCTB4MDUyNQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCisjZGVmaW5lIEVFTV9QUk9EVUNUX05VTQkweGE0YTEJLyogSU5WQUxJRCAtIE5FRURTIFRPIEJFIEFMTE9DQVRFRCAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKQEAgLTI0Niw4ICsyNTYsMTYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmZGVmIENPTkZJR19VU0JfRVRIX0VFTQorc3RhdGljIGludCB1c2VfZWVtID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IHVzZV9lZW07CisjZW5kaWYKK21vZHVsZV9wYXJhbSh1c2VfZWVtLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModXNlX2VlbSwgInVzZSBDREMgRUVNIG1vZGUiKTsKKwogLyoKLSAqIFdlIF9hbHdheXNfIGhhdmUgYW4gRUNNIG9yIENEQyBTdWJzZXQgY29uZmlndXJhdGlvbi4KKyAqIFdlIF9hbHdheXNfIGhhdmUgYW4gRUNNLCBDREMgU3Vic2V0LCBvciBFRU0gY29uZmlndXJhdGlvbi4KICAqLwogc3RhdGljIGludCBfX2luaXQgZXRoX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7CkBAIC0yNTgsNyArMjc2LDkgQEAKIAkJYy0+Ym1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKIAl9CiAKLQlpZiAoY2FuX3N1cHBvcnRfZWNtKGMtPmNkZXYtPmdhZGdldCkpCisJaWYgKHVzZV9lZW0pCisJCXJldHVybiBlZW1fYmluZF9jb25maWcoYyk7CisJZWxzZSBpZiAoY2FuX3N1cHBvcnRfZWNtKGMtPmNkZXYtPmdhZGdldCkpCiAJCXJldHVybiBlY21fYmluZF9jb25maWcoYywgaG9zdGFkZHIpOwogCWVsc2UKIAkJcmV0dXJuIGdldGhfYmluZF9jb25maWcoYywgaG9zdGFkZHIpOwpAQCAtMjg2LDcgKzMwNiwxMiBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogc2V0IHVwIG1haW4gY29uZmlnIGxhYmVsIGFuZCBkZXZpY2UgZGVzY3JpcHRvciAqLwotCWlmIChjYW5fc3VwcG9ydF9lY20oY2Rldi0+Z2FkZ2V0KSkgeworCWlmICh1c2VfZWVtKSB7CisJCS8qIEVFTSAqLworCQlldGhfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgRXRoZXJuZXQgKEVFTSkiOworCQlkZXZpY2VfZGVzYy5pZFZlbmRvciA9IGNwdV90b19sZTE2KEVFTV9WRU5ET1JfTlVNKTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0gY3B1X3RvX2xlMTYoRUVNX1BST0RVQ1RfTlVNKTsKKwl9IGVsc2UgaWYgKGNhbl9zdXBwb3J0X2VjbShjZGV2LT5nYWRnZXQpKSB7CiAJCS8qIEVDTSAqLwogCQlldGhfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgRXRoZXJuZXQgKEVDTSkiOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwppbmRleCA2NjUyN2JhLi45OGU5YmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKQEAgLTI4LDYgKzI4LDkgQEAKIG1vZHVsZV9wYXJhbShhdWRpb19idWZfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXVkaW9fYnVmX3NpemUsICJBdWRpbyBidWZmZXIgc2l6ZSIpOwogCitzdGF0aWMgaW50IGdlbmVyaWNfc2V0X2NtZChzdHJ1Y3QgdXNiX2F1ZGlvX2NvbnRyb2wgKmNvbiwgdTggY21kLCBpbnQgdmFsdWUpOworc3RhdGljIGludCBnZW5lcmljX2dldF9jbWQoc3RydWN0IHVzYl9hdWRpb19jb250cm9sICpjb24sIHU4IGNtZCk7CisKIC8qCiAgKiBERVNDUklQVE9SUyAuLi4gbW9zdCBhcmUgc3RhdGljLCBidXQgc3RyaW5ncyBhbmQgZnVsbAogICogY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLgpAQCAtNTAsMTYgKzUzLDE2IEBACiAJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCiB9OwogCi1ERUNMQVJFX1VTQl9BQ19IRUFERVJfREVTQ1JJUFRPUigyKTsKK0RFQ0xBUkVfVUFDX0FDX0hFQURFUl9ERVNDUklQVE9SKDIpOwogCi0jZGVmaW5lIFVTQl9EVF9BQ19IRUFERVJfTEVOR0gJVVNCX0RUX0FDX0hFQURFUl9TSVpFKEZfQVVESU9fTlVNX0lOVEVSRkFDRVMpCisjZGVmaW5lIFVBQ19EVF9BQ19IRUFERVJfTEVOR1RICVVBQ19EVF9BQ19IRUFERVJfU0laRShGX0FVRElPX05VTV9JTlRFUkZBQ0VTKQogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdGF0aWMgc3RydWN0IHVzYl9hY19oZWFkZXJfZGVzY3JpcHRvcl8yIGFjX2hlYWRlcl9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9BQ19IRUFERVJfTEVOR0gsCitzdGF0aWMgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8yIGFjX2hlYWRlcl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVBQ19EVF9BQ19IRUFERVJfTEVOR1RILAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlIRUFERVIsCisJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19IRUFERVIsCiAJLmJjZEFEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9EVF9BQ19IRUFERVJfTEVOR0gpLAorCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCksCiAJLmJJbkNvbGxlY3Rpb24gPQlGX0FVRElPX05VTV9JTlRFUkZBQ0VTLAogCS5iYUludGVyZmFjZU5yID0gewogCQlbMF0gPQkJRl9BVURJT19BQ19JTlRFUkZBQ0UsCkBAIC02OCwzMyArNzEsMzMgQEAKIH07CiAKICNkZWZpbmUgSU5QVVRfVEVSTUlOQUxfSUQJMQotc3RhdGljIHN0cnVjdCB1c2JfaW5wdXRfdGVybWluYWxfZGVzY3JpcHRvciBpbnB1dF90ZXJtaW5hbF9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9BQ19JTlBVVF9URVJNSU5BTF9TSVpFLAorc3RhdGljIHN0cnVjdCB1YWNfaW5wdXRfdGVybWluYWxfZGVzY3JpcHRvciBpbnB1dF90ZXJtaW5hbF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVBQ19EVF9JTlBVVF9URVJNSU5BTF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlJTlBVVF9URVJNSU5BTCwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVUFDX0lOUFVUX1RFUk1JTkFMLAogCS5iVGVybWluYWxJRCA9CQlJTlBVVF9URVJNSU5BTF9JRCwKLQkud1Rlcm1pbmFsVHlwZSA9CVVTQl9BQ19URVJNSU5BTF9TVFJFQU1JTkcsCisJLndUZXJtaW5hbFR5cGUgPQlVQUNfVEVSTUlOQUxfU1RSRUFNSU5HLAogCS5iQXNzb2NUZXJtaW5hbCA9CTAsCiAJLndDaGFubmVsQ29uZmlnID0JMHgzLAogfTsKIAotREVDTEFSRV9VU0JfQUNfRkVBVFVSRV9VTklUX0RFU0NSSVBUT1IoMCk7CitERUNMQVJFX1VBQ19GRUFUVVJFX1VOSVRfREVTQ1JJUFRPUigwKTsKIAogI2RlZmluZSBGRUFUVVJFX1VOSVRfSUQJCTIKLXN0YXRpYyBzdHJ1Y3QgdXNiX2FjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yXzAgZmVhdHVyZV91bml0X2Rlc2MgPSB7Ci0JLmJMZW5ndGgJCT0gVVNCX0RUX0FDX0ZFQVRVUkVfVU5JVF9TSVpFKDApLAorc3RhdGljIHN0cnVjdCB1YWNfZmVhdHVyZV91bml0X2Rlc2NyaXB0b3JfMCBmZWF0dXJlX3VuaXRfZGVzYyA9IHsKKwkuYkxlbmd0aAkJPSBVQUNfRFRfRkVBVFVSRV9VTklUX1NJWkUoMCksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCi0JLmJEZXNjcmlwdG9yU3VidHlwZQk9IEZFQVRVUkVfVU5JVCwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlCT0gVUFDX0ZFQVRVUkVfVU5JVCwKIAkuYlVuaXRJRAkJPSBGRUFUVVJFX1VOSVRfSUQsCiAJLmJTb3VyY2VJRAkJPSBJTlBVVF9URVJNSU5BTF9JRCwKIAkuYkNvbnRyb2xTaXplCQk9IDIsCi0JLmJtYUNvbnRyb2xzWzBdCQk9IChGVV9NVVRFIHwgRlVfVk9MVU1FKSwKKwkuYm1hQ29udHJvbHNbMF0JCT0gKFVBQ19GVV9NVVRFIHwgVUFDX0ZVX1ZPTFVNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9hdWRpb19jb250cm9sIG11dGVfY29udHJvbCA9IHsKIAkubGlzdCA9IExJU1RfSEVBRF9JTklUKG11dGVfY29udHJvbC5saXN0KSwKIAkubmFtZSA9ICJNdXRlIENvbnRyb2wiLAotCS50eXBlID0gTVVURV9DT05UUk9MLAorCS50eXBlID0gVUFDX01VVEVfQ09OVFJPTCwKIAkvKiBUb2RvOiBhZGQgcmVhbCBNdXRlIGNvbnRyb2wgY29kZSAqLwogCS5zZXQgPSBnZW5lcmljX3NldF9jbWQsCiAJLmdldCA9IGdlbmVyaWNfZ2V0X2NtZCwKQEAgLTEwMyw3ICsxMDYsNyBAQAogc3RhdGljIHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCB2b2x1bWVfY29udHJvbCA9IHsKIAkubGlzdCA9IExJU1RfSEVBRF9JTklUKHZvbHVtZV9jb250cm9sLmxpc3QpLAogCS5uYW1lID0gIlZvbHVtZSBDb250cm9sIiwKLQkudHlwZSA9IFZPTFVNRV9DT05UUk9MLAorCS50eXBlID0gVUFDX1ZPTFVNRV9DT05UUk9MLAogCS8qIFRvZG86IGFkZCByZWFsIFZvbHVtZSBjb250cm9sIGNvZGUgKi8KIAkuc2V0ID0gZ2VuZXJpY19zZXRfY21kLAogCS5nZXQgPSBnZW5lcmljX2dldF9jbWQsCkBAIC0xMTMsMTcgKzExNiwxNyBAQAogCS5saXN0ID0gTElTVF9IRUFEX0lOSVQoZmVhdHVyZV91bml0Lmxpc3QpLAogCS5pZCA9IEZFQVRVUkVfVU5JVF9JRCwKIAkubmFtZSA9ICJNdXRlICYgVm9sdW1lIENvbnRyb2wiLAotCS50eXBlID0gRkVBVFVSRV9VTklULAorCS50eXBlID0gVUFDX0ZFQVRVUkVfVU5JVCwKIAkuZGVzYyA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopJmZlYXR1cmVfdW5pdF9kZXNjLAogfTsKIAogI2RlZmluZSBPVVRQVVRfVEVSTUlOQUxfSUQJMwotc3RhdGljIHN0cnVjdCB1c2Jfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7Ci0JLmJMZW5ndGgJCT0gVVNCX0RUX0FDX09VVFBVVF9URVJNSU5BTF9TSVpFLAorc3RhdGljIHN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7CisJLmJMZW5ndGgJCT0gVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YnR5cGUJPSBPVVRQVVRfVEVSTUlOQUwsCisJLmJEZXNjcmlwdG9yU3VidHlwZQk9IFVBQ19PVVRQVVRfVEVSTUlOQUwsCiAJLmJUZXJtaW5hbElECQk9IE9VVFBVVF9URVJNSU5BTF9JRCwKLQkud1Rlcm1pbmFsVHlwZQkJPSBVU0JfQUNfT1VUUFVUX1RFUk1JTkFMX1NQRUFLRVIsCisJLndUZXJtaW5hbFR5cGUJCT0gVUFDX09VVFBVVF9URVJNSU5BTF9TUEVBS0VSLAogCS5iQXNzb2NUZXJtaW5hbAkJPSBGRUFUVVJFX1VOSVRfSUQsCiAJLmJTb3VyY2VJRAkJPSBGRUFUVVJFX1VOSVRfSUQsCiB9OwpAQCAtMTQ4LDIyICsxNTEsMjIgQEAKIH07CiAKIC8qIEIuNC4yICBDbGFzcy1TcGVjaWZpYyBBUyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIHN0cnVjdCB1c2JfYXNfaGVhZGVyX2Rlc2NyaXB0b3IgYXNfaGVhZGVyX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0RUX0FTX0hFQURFUl9TSVpFLAorc3RhdGljIHN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3IgYXNfaGVhZGVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVUFDX0RUX0FTX0hFQURFUl9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlBU19HRU5FUkFMLAorCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfQVNfR0VORVJBTCwKIAkuYlRlcm1pbmFsTGluayA9CUlOUFVUX1RFUk1JTkFMX0lELAogCS5iRGVsYXkgPQkJMSwKLQkud0Zvcm1hdFRhZyA9CQlVU0JfQVNfQVVESU9fRk9STUFUX1RZUEVfSV9QQ00sCisJLndGb3JtYXRUYWcgPQkJVUFDX0ZPUk1BVF9UWVBFX0lfUENNLAogfTsKIAotREVDTEFSRV9VU0JfQVNfRk9STUFUX1RZUEVfSV9ESVNDUkVURV9ERVNDKDEpOworREVDTEFSRV9VQUNfRk9STUFUX1RZUEVfSV9ESVNDUkVURV9ERVNDKDEpOwogCi1zdGF0aWMgc3RydWN0IHVzYl9hc19mb3JtYXRlX3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yXzEgYXNfdHlwZV9pX2Rlc2MgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0FTX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQ19TSVpFKDEpLAorc3RhdGljIHN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yXzEgYXNfdHlwZV9pX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVUFDX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQ19TSVpFKDEpLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAotCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlGT1JNQVRfVFlQRSwKLQkuYkZvcm1hdFR5cGUgPQkJVVNCX0FTX0ZPUk1BVF9UWVBFX0ksCisJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19GT1JNQVRfVFlQRSwKKwkuYkZvcm1hdFR5cGUgPQkJVUFDX0ZPUk1BVF9UWVBFX0ksCiAJLmJTdWJmcmFtZVNpemUgPQkyLAogCS5iQml0UmVzb2x1dGlvbiA9CTE2LAogCS5iU2FtRnJlcVR5cGUgPQkJMSwKQEAgLTE3NCwxNyArMTc3LDE3IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAotCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0FTX0VORFBPSU5UX0FEQVBUSVZFCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRQogCQkJCXwgVVNCX0VORFBPSU5UX1hGRVJfSVNPQywKIAkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KE9VVF9FUF9NQVhfUEFDS0VUX1NJWkUpLAogCS5iSW50ZXJ2YWwgPQkJNCwKIH07CiAKIC8qIENsYXNzLXNwZWNpZmljIEFTIElTTyBPVVQgRW5kcG9pbnQgRGVzY3JpcHRvciAqLwotc3RhdGljIHN0cnVjdCB1c2JfYXNfaXNvX2VuZHBvaW50X2Rlc2NyaXB0b3IgYXNfaXNvX291dF9kZXNjIF9faW5pdGRhdGEgPSB7Ci0JLmJMZW5ndGggPQkJVVNCX0FTX0lTT19FTkRQT0lOVF9ERVNDX1NJWkUsCitzdGF0aWMgc3RydWN0IHVhY19pc29fZW5kcG9pbnRfZGVzY3JpcHRvciBhc19pc29fb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlVQUNfSVNPX0VORFBPSU5UX0RFU0NfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0VORFBPSU5ULAotCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlFUF9HRU5FUkFMLAorCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfRVBfR0VORVJBTCwKIAkuYm1BdHRyaWJ1dGVzID0gCTEsCiAJLmJMb2NrRGVsYXlVbml0cyA9CTEsCiAJLndMb2NrRGVsYXkgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigxKSwKQEAgLTQ1NiwxMSArNDU5LDExIEBACiAJICogQXVkaW8gY2xhc3MgbWVzc2FnZXM7IGludGVyZmFjZSBhY3RpdmF0aW9uIHVzZXMgc2V0X2FsdCgpLgogCSAqLwogCXN3aXRjaCAoY3RybC0+YlJlcXVlc3RUeXBlKSB7Ci0JY2FzZSBVU0JfQVVESU9fU0VUX0lOVEY6CisJY2FzZSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRToKIAkJdmFsdWUgPSBhdWRpb19zZXRfaW50Zl9yZXEoZiwgY3RybCk7CiAJCWJyZWFrOwogCi0JY2FzZSBVU0JfQVVESU9fR0VUX0lOVEY6CisJY2FzZSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFOgogCQl2YWx1ZSA9IGF1ZGlvX2dldF9pbnRmX3JlcShmLCBjdHJsKTsKIAkJYnJlYWs7CiAKQEAgLTYzMiw2ICs2MzUsMTggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludCBnZW5lcmljX3NldF9jbWQoc3RydWN0IHVzYl9hdWRpb19jb250cm9sICpjb24sIHU4IGNtZCwgaW50IHZhbHVlKQoreworCWNvbi0+ZGF0YVtjbWRdID0gdmFsdWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW5lcmljX2dldF9jbWQoc3RydWN0IHVzYl9hdWRpb19jb250cm9sICpjb24sIHU4IGNtZCkKK3sKKwlyZXR1cm4gY29uLT5kYXRhW2NtZF07Cit9CisKIC8qIFRvZG86IGFkZCBtb3JlIGNvbnRyb2wgc2VsZWNvdG9yIGR5bmFtaWNhbGx5ICovCiBpbnQgX19pbml0IGNvbnRyb2xfc2VsZWN0b3JfaW5pdChzdHJ1Y3QgZl9hdWRpbyAqYXVkaW8pCiB7CkBAIC02NDIsMTAgKzY1NywxMCBAQAogCWxpc3RfYWRkKCZtdXRlX2NvbnRyb2wubGlzdCwgJmZlYXR1cmVfdW5pdC5jb250cm9sKTsKIAlsaXN0X2FkZCgmdm9sdW1lX2NvbnRyb2wubGlzdCwgJmZlYXR1cmVfdW5pdC5jb250cm9sKTsKIAotCXZvbHVtZV9jb250cm9sLmRhdGFbX0NVUl0gPSAweGZmYzA7Ci0Jdm9sdW1lX2NvbnRyb2wuZGF0YVtfTUlOXSA9IDB4ZTNhMDsKLQl2b2x1bWVfY29udHJvbC5kYXRhW19NQVhdID0gMHhmZmYwOwotCXZvbHVtZV9jb250cm9sLmRhdGFbX1JFU10gPSAweDAwMzA7CisJdm9sdW1lX2NvbnRyb2wuZGF0YVtVQUNfX0NVUl0gPSAweGZmYzA7CisJdm9sdW1lX2NvbnRyb2wuZGF0YVtVQUNfX01JTl0gPSAweGUzYTA7CisJdm9sdW1lX2NvbnRyb2wuZGF0YVtVQUNfX01BWF0gPSAweGZmZjA7CisJdm9sdW1lX2NvbnRyb2wuZGF0YVtVQUNfX1JFU10gPSAweDAwMzA7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1NzdkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCkBAIC0wLDAgKzEsNTYyIEBACisvKgorICogZl9lZW0uYyAtLSBVU0IgQ0RDIEV0aGVybmV0IChFRU0pIGxpbmsgZnVuY3Rpb24gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUsMjAwOCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRUYgSm9obnNvbiBUZWNobm9sb2dpZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKworI2luY2x1ZGUgInVfZXRoZXIuaCIKKworI2RlZmluZSBFRU1fSExFTiAyCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgIkNEQyBFdGhlcm5ldCBFbXVsYXRpb24gTW9kZWwiIChDREMgRUVNKQorICogRXRoZXJuZXQgbGluay4KKyAqLworCitzdHJ1Y3QgZWVtX2VwX2Rlc2NzIHsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmluOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb3V0OworfTsKKworc3RydWN0IGZfZWVtIHsKKwlzdHJ1Y3QgZ2V0aGVyCQkJcG9ydDsKKwl1OAkJCQljdHJsX2lkOworCisJc3RydWN0IGVlbV9lcF9kZXNjcwkJZnM7CisJc3RydWN0IGVlbV9lcF9kZXNjcwkJaHM7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmX2VlbSAqZnVuY190b19lZW0oc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX2VlbSwgcG9ydC5mdW5jKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaW50ZXJmYWNlIGRlc2NyaXB0b3I6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGVlbV9pbnRmIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGVlbV9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLyogLmJJbnRlcmZhY2VOdW1iZXIgPSBEWU5BTUlDICovCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ09NTSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JVVNCX0NEQ19TVUJDTEFTU19FRU0sCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9DRENfUFJPVE9fRUVNLAorCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLworfTsKKworLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGVlbV9mc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGVlbV9mc19vdXRfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplZW1fZnNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCS8qIENEQyBFRU0gY29udHJvbCBkZXNjcmlwdG9ycyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlZW1faW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWVtX2ZzX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVlbV9mc19vdXRfZGVzYywKKwlOVUxMLAorfTsKKworLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGVlbV9oc19pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZWVtX2hzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZWVtX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkvKiBDREMgRUVNIGNvbnRyb2wgZGVzY3JpcHRvcnMgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWVtX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVlbV9oc19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlZW1faHNfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIHN0cmluZyBkZXNjcmlwdG9yczogKi8KKworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIGVlbV9zdHJpbmdfZGVmc1tdID0geworCVswXS5zID0gIkNEQyBFdGhlcm5ldCBFbXVsYXRpb24gTW9kZWwgKEVFTSkiLAorCXsgIH0gLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIGVlbV9zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlID0JCTB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncyA9CQllZW1fc3RyaW5nX2RlZnMsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqZWVtX3N0cmluZ3NbXSA9IHsKKwkmZWVtX3N0cmluZ190YWJsZSwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlZW1fc2V0dXAoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisJaW50CQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwl1MTYJCQl3X2luZGV4ID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KTsKKwl1MTYJCQl3X3ZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKKwl1MTYJCQl3X2xlbmd0aCA9IGxlMTZfdG9fY3B1KGN0cmwtPndMZW5ndGgpOworCisJREJHKGNkZXYsICJpbnZhbGlkIGNvbnRyb2wgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOworCisJLyogZGV2aWNlIGVpdGhlciBzdGFsbHMgKHZhbHVlIDwgMCkgb3IgcmVwb3J0cyBzdWNjZXNzICovCisJcmV0dXJuIHZhbHVlOworfQorCisKK3N0YXRpYyBpbnQgZWVtX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgdW5zaWduZWQgaW50ZiwgdW5zaWduZWQgYWx0KQoreworCXN0cnVjdCBmX2VlbQkJKmVlbSA9IGZ1bmNfdG9fZWVtKGYpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCisJLyogd2Uga25vdyBhbHQgPT0gMCwgc28gdGhpcyBpcyBhbiBhY3RpdmF0aW9uIG9yIGEgcmVzZXQgKi8KKwlpZiAoYWx0ICE9IDApCisJCWdvdG8gZmFpbDsKKworCWlmIChpbnRmID09IGVlbS0+Y3RybF9pZCkgeworCisJCWlmIChlZW0tPnBvcnQuaW5fZXAtPmRyaXZlcl9kYXRhKSB7CisJCQlEQkcoY2RldiwgInJlc2V0IGVlbVxuIik7CisJCQlnZXRoZXJfZGlzY29ubmVjdCgmZWVtLT5wb3J0KTsKKwkJfQorCisJCWlmICghZWVtLT5wb3J0LmluKSB7CisJCQlEQkcoY2RldiwgImluaXQgZWVtXG4iKTsKKwkJCWVlbS0+cG9ydC5pbiA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCWVlbS0+aHMuaW4sIGVlbS0+ZnMuaW4pOworCQkJZWVtLT5wb3J0Lm91dCA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCWVlbS0+aHMub3V0LCBlZW0tPmZzLm91dCk7CisJCX0KKworCQkvKiB6bHBzIHNob3VsZCBub3Qgb2NjdXIgYmVjYXVzZSB6ZXJvLWxlbmd0aCBFRU0gcGFja2V0cworCQkgKiB3aWxsIGJlIGluc2VydGVkIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgd291bGQgb2NjdXIKKwkJICovCisJCWVlbS0+cG9ydC5pc196bHBfb2sgPSAxOworCQllZW0tPnBvcnQuY2RjX2ZpbHRlciA9IERFRkFVTFRfRklMVEVSOworCQlEQkcoY2RldiwgImFjdGl2YXRlIGVlbVxuIik7CisJCW5ldCA9IGdldGhlcl9jb25uZWN0KCZlZW0tPnBvcnQpOworCQlpZiAoSVNfRVJSKG5ldCkpCisJCQlyZXR1cm4gUFRSX0VSUihuZXQpOworCX0gZWxzZQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gMDsKK2ZhaWw6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGVlbV9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZfZWVtCQkqZWVtID0gZnVuY190b19lZW0oZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJREJHKGNkZXYsICJlZW0gZGVhY3RpdmF0ZWRcbiIpOworCisJaWYgKGVlbS0+cG9ydC5pbl9lcC0+ZHJpdmVyX2RhdGEpCisJCWdldGhlcl9kaXNjb25uZWN0KCZlZW0tPnBvcnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFRU0gZnVuY3Rpb24gZHJpdmVyIHNldHVwL2JpbmRpbmcgKi8KKworc3RhdGljIGludCBfX2luaXQKK2VlbV9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBjLT5jZGV2OworCXN0cnVjdCBmX2VlbQkJKmVlbSA9IGZ1bmNfdG9fZWVtKGYpOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBpbnRlcmZhY2UgSURzICovCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCWVlbS0+Y3RybF9pZCA9IHN0YXR1czsKKwllZW1faW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCisJc3RhdHVzID0gLUVOT0RFVjsKKworCS8qIGFsbG9jYXRlIGluc3RhbmNlLXNwZWNpZmljIGVuZHBvaW50cyAqLworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZWVtX2ZzX2luX2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwllZW0tPnBvcnQuaW5fZXAgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZlZW1fZnNfb3V0X2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwllZW0tPnBvcnQub3V0X2VwID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCXN0YXR1cyA9IC1FTk9NRU07CisKKwkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhlZW1fZnNfZnVuY3Rpb24pOworCWlmICghZi0+ZGVzY3JpcHRvcnMpCisJCWdvdG8gZmFpbDsKKworCWVlbS0+ZnMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChlZW1fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmVlbV9mc19pbl9kZXNjKTsKKwllZW0tPmZzLm91dCA9IHVzYl9maW5kX2VuZHBvaW50KGVlbV9mc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZWVtX2ZzX291dF9kZXNjKTsKKworCS8qIHN1cHBvcnQgYWxsIHJlbGV2YW50IGhhcmR3YXJlIHNwZWVkcy4uLiB3ZSBleHBlY3QgdGhhdCB3aGVuCisJICogaGFyZHdhcmUgaXMgZHVhbCBzcGVlZCwgYWxsIGJ1bGstY2FwYWJsZSBlbmRwb2ludHMgd29yayBhdAorCSAqIGJvdGggc3BlZWRzCisJICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCQllZW1faHNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQllZW1fZnNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQllZW1faHNfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZWVtX2ZzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisKKwkJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGVlbV9oc19mdW5jdGlvbik7CisJCWlmICghZi0+aHNfZGVzY3JpcHRvcnMpCisJCQlnb3RvIGZhaWw7CisKKwkJZWVtLT5ocy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGVlbV9oc19mdW5jdGlvbiwKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmVlbV9oc19pbl9kZXNjKTsKKwkJZWVtLT5ocy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChlZW1faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZlZW1faHNfb3V0X2Rlc2MpOworCX0KKworCURCRyhjZGV2LCAiQ0RDIEV0aGVybmV0IChFRU0pOiAlcyBzcGVlZCBJTi8lcyBPVVQvJXNcbiIsCisJCQlnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkgPyAiZHVhbCIgOiAiZnVsbCIsCisJCQllZW0tPnBvcnQuaW5fZXAtPm5hbWUsIGVlbS0+cG9ydC5vdXRfZXAtPm5hbWUpOworCXJldHVybiAwOworCitmYWlsOgorCWlmIChmLT5kZXNjcmlwdG9ycykKKwkJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCisJLyogd2UgbWlnaHQgYXMgd2VsbCByZWxlYXNlIG91ciBjbGFpbXMgb24gZW5kcG9pbnRzICovCisJaWYgKGVlbS0+cG9ydC5vdXQpCisJCWVlbS0+cG9ydC5vdXRfZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlpZiAoZWVtLT5wb3J0LmluKQorCQllZW0tPnBvcnQuaW5fZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCUVSUk9SKGNkZXYsICIlczogY2FuJ3QgYmluZCwgZXJyICVkXG4iLCBmLT5uYW1lLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQKK2VlbV91bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXN0cnVjdCBmX2VlbQkqZWVtID0gZnVuY190b19lZW0oZik7CisKKwlEQkcoYy0+Y2RldiwgImVlbSB1bmJpbmRcbiIpOworCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkKKwkJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+aHNfZGVzY3JpcHRvcnMpOworCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmRlc2NyaXB0b3JzKTsKKwlrZnJlZShlZW0pOworfQorCitzdGF0aWMgdm9pZCBlZW1fY21kX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKK30KKworLyoKKyAqIEFkZCB0aGUgRUVNIGhlYWRlciBhbmQgZXRoZXJuZXQgY2hlY2tzdW0uCisgKiBXZSBjdXJyZW50bHkgZG8gbm90IGF0dGVtcHQgdG8gcHV0IG11bHRpcGxlIGV0aGVybmV0IGZyYW1lcworICogaW50byBhIHNpbmdsZSBVU0IgdHJhbnNmZXIKKyAqLworc3RhdGljIHN0cnVjdCBza19idWZmICplZW1fd3JhcChzdHJ1Y3QgZ2V0aGVyICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmCSpza2IyID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2VwCSppbiA9IHBvcnQtPmluX2VwOworCWludAkJcGFkbGVuID0gMDsKKwl1MTYJCWxlbiA9IHNrYi0+bGVuOworCisJaWYgKCFza2JfY2xvbmVkKHNrYikpIHsKKwkJaW50IGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7CisJCWludCB0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOworCisJCS8qIFdoZW4gKGxlbiArIEVFTV9ITEVOICsgRVRIX0ZDU19MRU4pICUgaW4tPm1heHBhY2tldCkgaXMgMCwKKwkJICogc3RpY2sgdHdvIGJ5dGVzIG9mIHplcm8tbGVuZ3RoIEVFTSBwYWNrZXQgb24gdGhlIGVuZC4KKwkJICovCisJCWlmICgoKGxlbiArIEVFTV9ITEVOICsgRVRIX0ZDU19MRU4pICUgaW4tPm1heHBhY2tldCkgPT0gMCkKKwkJCXBhZGxlbiArPSAyOworCisJCWlmICgodGFpbHJvb20gPj0gKEVUSF9GQ1NfTEVOICsgcGFkbGVuKSkgJiYKKwkJCQkoaGVhZHJvb20gPj0gRUVNX0hMRU4pKQorCQkJZ290byBkb25lOworCX0KKworCXNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCBFRU1fSExFTiwgRVRIX0ZDU19MRU4gKyBwYWRsZW4sIEdGUF9BVE9NSUMpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJc2tiID0gc2tiMjsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIHNrYjsKKworZG9uZToKKwkvKiB1c2UgdGhlICJubyBDUkMiIG9wdGlvbiAqLworCXB1dF91bmFsaWduZWRfYmUzMigweGRlYWRiZWVmLCBza2JfcHV0KHNrYiwgNCkpOworCisJLyogRUVNIHBhY2tldCBoZWFkZXIgZm9ybWF0OgorCSAqIGIwLi4xMzoJbGVuZ3RoIG9mIGV0aGVybmV0IGZyYW1lCisJICogYjE0OgkJYm1DUkMgKDAgPT0gc2VudGluZWwgQ1JDKQorCSAqIGIxNToJCWJtVHlwZSAoMCA9PSBkYXRhKQorCSAqLworCWxlbiA9IHNrYi0+bGVuOworCXB1dF91bmFsaWduZWRfbGUxNigobGVuICYgMHgzRkZGKSB8IEJJVCgxNCksIHNrYl9wdXNoKHNrYiwgMikpOworCisJLyogYWRkIGEgemVyby1sZW5ndGggRUVNIHBhY2tldCwgaWYgbmVlZGVkICovCisJaWYgKHBhZGxlbikKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KDAsIHNrYl9wdXQoc2tiLCAyKSk7CisKKwlyZXR1cm4gc2tiOworfQorCisvKgorICogUmVtb3ZlIHRoZSBFRU0gaGVhZGVyLiAgTm90ZSB0aGF0IHRoZXJlIGNhbiBiZSBtYW55IEVFTSBwYWNrZXRzIGluIGEgc2luZ2xlCisgKiBVU0IgdHJhbnNmZXIsIHNvIHdlIG5lZWQgdG8gYnJlYWsgdGhlbSBvdXQgYW5kIGhhbmRsZSB0aGVtIGluZGVwZW5kZW50bHkuCisgKi8KK3N0YXRpYyBpbnQgZWVtX3Vud3JhcChzdHJ1Y3QgZ2V0aGVyICpwb3J0LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gcG9ydC0+ZnVuYy5jb25maWctPmNkZXY7CisJaW50CQkJCXN0YXR1cyA9IDA7CisKKwlkbyB7CisJCXN0cnVjdCBza19idWZmCSpza2IyOworCQl1MTYJCWhlYWRlcjsKKwkJdTE2CQlsZW4gPSAwOworCisJCWlmIChza2ItPmxlbiA8IEVFTV9ITEVOKSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJREJHKGNkZXYsICJpbnZhbGlkIEVFTSBoZWFkZXJcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qIHJlbW92ZSB0aGUgRUVNIGhlYWRlciAqLworCQloZWFkZXIgPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhKTsKKwkJc2tiX3B1bGwoc2tiLCBFRU1fSExFTik7CisKKwkJLyogRUVNIHBhY2tldCBoZWFkZXIgZm9ybWF0OgorCQkgKiBiMC4uMTQ6CUVFTSB0eXBlIGRlcGVuZGVudCAoZGF0YSBvciBjb21tYW5kKQorCQkgKiBiMTU6CQlibVR5cGUgKDAgPT0gZGF0YSwgMSA9PSBjb21tYW5kKQorCQkgKi8KKwkJaWYgKGhlYWRlciAmIEJJVCgxNSkpIHsKKwkJCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gY2Rldi0+cmVxOworCQkJdTE2CQkJYm1FRU1DbWQ7CisKKwkJCS8qIEVFTSBjb21tYW5kIHBhY2tldCBmb3JtYXQ6CisJCQkgKiBiMC4uMTA6CWJtRUVNQ21kUGFyYW0KKwkJCSAqIGIxMS4uMTM6CWJtRUVNQ21kCisJCQkgKiBiMTQ6CQlyZXNlcnZlZCAobXVzdCBiZSB6ZXJvKQorCQkJICogYjE1OgkJYm1UeXBlICgxID09IGNvbW1hbmQpCisJCQkgKi8KKwkJCWlmIChoZWFkZXIgJiBCSVQoMTQpKQorCQkJCWNvbnRpbnVlOworCisJCQlibUVFTUNtZCA9IChoZWFkZXIgPj4gMTEpICYgMHg3OworCQkJc3dpdGNoIChibUVFTUNtZCkgeworCQkJY2FzZSAwOiAvKiBlY2hvICovCisJCQkJbGVuID0gaGVhZGVyICYgMHg3RkY7CisJCQkJaWYgKHNrYi0+bGVuIDwgbGVuKSB7CisJCQkJCXN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCisJCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCQkJCWlmICh1bmxpa2VseSghc2tiMikpIHsKKwkJCQkJREJHKGNkZXYsICJFRU0gZWNobyByZXNwb25zZSBlcnJvclxuIik7CisJCQkJCWdvdG8gbmV4dDsKKwkJCQl9CisJCQkJc2tiX3RyaW0oc2tiMiwgbGVuKTsKKwkJCQlwdXRfdW5hbGlnbmVkX2xlMTYoQklUKDE1KSB8IEJJVCgxMSkgfCBsZW4sCisJCQkJCQkJc2tiX3B1c2goc2tiMiwgMikpOworCQkJCXNrYl9jb3B5X2JpdHMoc2tiLCAwLCByZXEtPmJ1Ziwgc2tiLT5sZW4pOworCQkJCXJlcS0+bGVuZ3RoID0gc2tiLT5sZW47CisJCQkJcmVxLT5jb21wbGV0ZSA9IGVlbV9jbWRfY29tcGxldGU7CisJCQkJcmVxLT56ZXJvID0gMTsKKwkJCQlpZiAodXNiX2VwX3F1ZXVlKHBvcnQtPmluX2VwLCByZXEsIEdGUF9BVE9NSUMpKQorCQkJCQlEQkcoY2RldiwgImVjaG8gcmVzcG9uc2UgcXVldWUgZmFpbFxuIik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTogIC8qIGVjaG8gcmVzcG9uc2UgKi8KKwkJCWNhc2UgMjogIC8qIHN1c3BlbmQgaGludCAqLworCQkJY2FzZSAzOiAgLyogcmVzcG9uc2UgaGludCAqLworCQkJY2FzZSA0OiAgLyogcmVzcG9uc2UgY29tcGxldGUgaGludCAqLworCQkJY2FzZSA1OiAgLyogdGlja2xlICovCisJCQlkZWZhdWx0OiAvKiByZXNlcnZlZCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJdTMyCQljcmMsIGNyYzI7CisJCQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiMzsKKworCQkJLyogY2hlY2sgZm9yIHplcm8tbGVuZ3RoIEVFTSBwYWNrZXQgKi8KKwkJCWlmIChoZWFkZXIgPT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJLyogRUVNIGRhdGEgcGFja2V0IGZvcm1hdDoKKwkJCSAqIGIwLi4xMzoJbGVuZ3RoIG9mIGV0aGVybmV0IGZyYW1lCisJCQkgKiBiMTQ6CQlibUNSQyAoMCA9PSBzZW50aW5lbCwgMSA9PSBjYWxjdWxhdGVkKQorCQkJICogYjE1OgkJYm1UeXBlICgwID09IGRhdGEpCisJCQkgKi8KKwkJCWxlbiA9IGhlYWRlciAmIDB4M0ZGRjsKKwkJCWlmICgoc2tiLT5sZW4gPCBsZW4pCisJCQkJCXx8IChsZW4gPCAoRVRIX0hMRU4gKyBFVEhfRkNTX0xFTikpKSB7CisJCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCisJCQkvKiB2YWxpZGF0ZSBDUkMgKi8KKwkJCWNyYyA9IGdldF91bmFsaWduZWRfbGUzMihza2ItPmRhdGEgKyBsZW4gLSBFVEhfRkNTX0xFTik7CisJCQlpZiAoaGVhZGVyICYgQklUKDE0KSkgeworCQkJCWNyYyA9IGdldF91bmFsaWduZWRfbGUzMihza2ItPmRhdGEgKyBsZW4KKwkJCQkJCQktIEVUSF9GQ1NfTEVOKTsKKwkJCQljcmMyID0gfmNyYzMyX2xlKH4wLAorCQkJCQkJc2tiLT5kYXRhLAorCQkJCQkJc2tiLT5sZW4gLSBFVEhfRkNTX0xFTik7CisJCQl9IGVsc2UgeworCQkJCWNyYyA9IGdldF91bmFsaWduZWRfYmUzMihza2ItPmRhdGEgKyBsZW4KKwkJCQkJCQktIEVUSF9GQ1NfTEVOKTsKKwkJCQljcmMyID0gMHhkZWFkYmVlZjsKKwkJCX0KKwkJCWlmIChjcmMgIT0gY3JjMikgeworCQkJCURCRyhjZGV2LCAiaW52YWxpZCBFRU0gQ1JDXG4iKTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisKKwkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmICh1bmxpa2VseSghc2tiMikpIHsKKwkJCQlEQkcoY2RldiwgInVuYWJsZSB0byB1bmZyYW1lIEVFTSBwYWNrZXRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc2tiX3RyaW0oc2tiMiwgbGVuIC0gRVRIX0ZDU19MRU4pOworCisJCQlza2IzID0gc2tiX2NvcHlfZXhwYW5kKHNrYjIsCisJCQkJCQlORVRfSVBfQUxJR04sCisJCQkJCQkwLAorCQkJCQkJR0ZQX0FUT01JQyk7CisJCQlpZiAodW5saWtlbHkoIXNrYjMpKSB7CisJCQkJREJHKGNkZXYsICJ1bmFibGUgdG8gcmVhbGlnbiBFRU0gcGFja2V0XG4iKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYjIpOworCQkJc2tiX3F1ZXVlX3RhaWwobGlzdCwgc2tiMyk7CisJCX0KK25leHQ6CisJCXNrYl9wdWxsKHNrYiwgbGVuKTsKKwl9IHdoaWxlIChza2ItPmxlbik7CisKK2Vycm9yOgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBlZW1fYmluZF9jb25maWcgLSBhZGQgQ0RDIEV0aGVybmV0IChFRU0pIG5ldHdvcmsgbGluayB0byBhIGNvbmZpZ3VyYXRpb24KKyAqIEBjOiB0aGUgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IHRoZSBuZXR3b3JrIGxpbmsKKyAqIENvbnRleHQ6IHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgZ2FkZ2V0IHNldHVwCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBjYWxsZWQgQGdldGhlcl9zZXR1cCgpLiAgQ2FsbGVyIGlzIGFsc28gcmVzcG9uc2libGUKKyAqIGZvciBjYWxsaW5nIEBnZXRoZXJfY2xlYW51cCgpIGJlZm9yZSBtb2R1bGUgdW5sb2FkLgorICovCitpbnQgX19pbml0IGVlbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCit7CisJc3RydWN0IGZfZWVtCSplZW07CisJaW50CQlzdGF0dXM7CisKKwkvKiBtYXliZSBhbGxvY2F0ZSBkZXZpY2UtZ2xvYmFsIHN0cmluZyBJRHMgKi8KKwlpZiAoZWVtX3N0cmluZ19kZWZzWzBdLmlkID09IDApIHsKKworCQkvKiBjb250cm9sIGludGVyZmFjZSBsYWJlbCAqLworCQlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGMtPmNkZXYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJCWVlbV9zdHJpbmdfZGVmc1swXS5pZCA9IHN0YXR1czsKKwkJZWVtX2ludGYuaUludGVyZmFjZSA9IHN0YXR1czsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgbmV3IGluc3RhbmNlICovCisJZWVtID0ga3phbGxvYyhzaXplb2YgKmVlbSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlZW0pCisJCXJldHVybiAtRU5PTUVNOworCisJZWVtLT5wb3J0LmNkY19maWx0ZXIgPSBERUZBVUxUX0ZJTFRFUjsKKworCWVlbS0+cG9ydC5mdW5jLm5hbWUgPSAiY2RjX2VlbSI7CisJZWVtLT5wb3J0LmZ1bmMuc3RyaW5ncyA9IGVlbV9zdHJpbmdzOworCS8qIGRlc2NyaXB0b3JzIGFyZSBwZXItaW5zdGFuY2UgY29waWVzICovCisJZWVtLT5wb3J0LmZ1bmMuYmluZCA9IGVlbV9iaW5kOworCWVlbS0+cG9ydC5mdW5jLnVuYmluZCA9IGVlbV91bmJpbmQ7CisJZWVtLT5wb3J0LmZ1bmMuc2V0X2FsdCA9IGVlbV9zZXRfYWx0OworCWVlbS0+cG9ydC5mdW5jLnNldHVwID0gZWVtX3NldHVwOworCWVlbS0+cG9ydC5mdW5jLmRpc2FibGUgPSBlZW1fZGlzYWJsZTsKKwllZW0tPnBvcnQud3JhcCA9IGVlbV93cmFwOworCWVlbS0+cG9ydC51bndyYXAgPSBlZW1fdW53cmFwOworCWVlbS0+cG9ydC5oZWFkZXJfbGVuID0gRUVNX0hMRU47CisKKwlzdGF0dXMgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZlZW0tPnBvcnQuZnVuYyk7CisJaWYgKHN0YXR1cykKKwkJa2ZyZWUoZWVtKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwppbmRleCA0MjRhMzdjLi5jOTk2NmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKQEAgLTI4NiwxMiArMjg2LDE3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcm5kaXNfYWRkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHN0cnVjdCBza19idWZmICpybmRpc19hZGRfaGVhZGVyKHN0cnVjdCBnZXRoZXIgKnBvcnQsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBzaXplb2Yoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSkpOwotCWlmIChza2IpCi0JCXJuZGlzX2FkZF9oZHIoc2tiKTsKLQlyZXR1cm4gc2tiOworCXN0cnVjdCBza19idWZmICpza2IyOworCisJc2tiMiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgc2l6ZW9mKHN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUpKTsKKwlpZiAoc2tiMikKKwkJcm5kaXNfYWRkX2hkcihza2IyKTsKKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIHNrYjI7CiB9CiAKIHN0YXRpYyB2b2lkIHJuZGlzX3Jlc3BvbnNlX2F2YWlsYWJsZSh2b2lkICpfcm5kaXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwppbmRleCBkNzAxYmY0Li43ODgxZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKQEAgLTI3NTEsNiArMjc1MSwxMCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgcWVfdWRjX21hdGNoW10gPSB7CiAJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1xZS11c2IiLAorCQkuZGF0YSA9ICh2b2lkICopUE9SVF9RRSwKKwl9LAorCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtcWUtdXNiIiwKIAkJLmRhdGEgPSAodm9pZCAqKVBPUlRfUUUsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggYjkzMTJkYy4uZDBiMWU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogI2RlZmluZSBHTUlESV9NU19JTlRFUkZBQ0UJMQogI2RlZmluZSBHTUlESV9OVU1fSU5URVJGQUNFUwkyCiAKLURFQ0xBUkVfVVNCX0FDX0hFQURFUl9ERVNDUklQVE9SKDEpOworREVDTEFSRV9VQUNfQUNfSEVBREVSX0RFU0NSSVBUT1IoMSk7CiBERUNMQVJFX1VTQl9NSURJX09VVF9KQUNLX0RFU0NSSVBUT1IoMSk7CiBERUNMQVJFX1VTQl9NU19FTkRQT0lOVF9ERVNDUklQVE9SKDEpOwogCkBAIC0yMzcsMTIgKzIzNywxMiBAQAogfTsKIAogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY19oZWFkZXJfZGVzY3JpcHRvcl8xIGFjX2hlYWRlcl9kZXNjID0gewotCS5iTGVuZ3RoID0JCVVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yXzEgYWNfaGVhZGVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVUFDX0RUX0FDX0hFQURFUl9TSVpFKDEpLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVU0JfTVNfSEVBREVSLAogCS5iY2RBREMgPQkJY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQkud1RvdGFsTGVuZ3RoID0JCWNwdV90b19sZTE2KFVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSksCisJLndUb3RhbExlbmd0aCA9CQljcHVfdG9fbGUxNihVQUNfRFRfQUNfSEVBREVSX1NJWkUoMSkpLAogCS5iSW5Db2xsZWN0aW9uID0JMSwKIAkuYmFJbnRlcmZhY2VOciA9IHsKIAkJWzBdID0JCUdNSURJX01TX0lOVEVSRkFDRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggN2QzM2Y1MC4uYzQ0MzY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTIwMzMsNyArMjAzMyw3IEBACiAJcmV0dXJuIGlub2RlOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7CiAJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCiAJLmRyb3BfaW5vZGUgPQlnZW5lcmljX2RlbGV0ZV9pbm9kZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwppbmRleCBlZDIxZTI2Li5lNmZlZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKQEAgLTU2LDYgKzU2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogCiAvKgogICogVGhpcyBkcml2ZXIgaXMgUFhBMjV4IG9ubHkuICBHcmFiIHRoZSByaWdodCByZWdpc3RlciBkZWZpbml0aW9ucy4KQEAgLTEwMDgsMTUgKzEwMDksMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogYm9hcmRzIG1heSBjb25zdW1lIGN1cnJlbnQgZnJvbSBWQlVTLCB1cCB0byAxMDAtNTAwbUEgYmFzZWQgb24gY29uZmlnLgorICogdGhlIDUwMHVBIHN1c3BlbmQgY2VpbGluZyBtZWFucyB0aGF0IGV4Y2x1c2l2ZWx5IHZidXMtcG93ZXJlZCBQWEEgZGVzaWducworICogdmlvbGF0ZSBVU0Igc3BlY3MuCisgKi8KK3N0YXRpYyBpbnQgcHhhMjV4X3VkY192YnVzX2RyYXcoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCXN0cnVjdCBweGEyNXhfdWRjCSp1ZGM7CisKKwl1ZGMgPSBjb250YWluZXJfb2YoX2dhZGdldCwgc3RydWN0IHB4YTI1eF91ZGMsIGdhZGdldCk7CisKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJcmV0dXJuIG90Z19zZXRfcG93ZXIodWRjLT50cmFuc2NlaXZlciwgbUEpOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBweGEyNXhfdWRjX29wcyA9IHsKIAkuZ2V0X2ZyYW1lCT0gcHhhMjV4X3VkY19nZXRfZnJhbWUsCiAJLndha2V1cAkJPSBweGEyNXhfdWRjX3dha2V1cCwKIAkudmJ1c19zZXNzaW9uCT0gcHhhMjV4X3VkY192YnVzX3Nlc3Npb24sCiAJLnB1bGx1cAkJPSBweGEyNXhfdWRjX3B1bGx1cCwKLQotCS8vIC52YnVzX2RyYXcgLi4uIGJvYXJkcyBtYXkgY29uc3VtZSBjdXJyZW50IGZyb20gVkJVUywgdXAgdG8KLQkvLyAxMDAtNTAwbUEgYmFzZWQgb24gY29uZmlnLiAgdGhlIDUwMHVBIHN1c3BlbmQgY2VpbGluZyBtZWFucwotCS8vIHRoYXQgZXhjbHVzaXZlbHkgdmJ1cy1wb3dlcmVkIFBYQSBkZXNpZ25zIHZpb2xhdGUgVVNCIHNwZWNzLgorCS52YnVzX2RyYXcJPSBweGEyNXhfdWRjX3ZidXNfZHJhdywKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMzAzLDkgKzEzMTYsMjMgQEAKIAkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgogCSAqLwogCURNU0coInJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCS8qIGNvbm5lY3QgdG8gYnVzIHRocm91Z2ggdHJhbnNjZWl2ZXIgKi8KKwlpZiAoZGV2LT50cmFuc2NlaXZlcikgeworCQlyZXR2YWwgPSBvdGdfc2V0X3BlcmlwaGVyYWwoZGV2LT50cmFuc2NlaXZlciwgJmRldi0+Z2FkZ2V0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJRE1TRygiY2FuJ3QgYmluZCB0byB0cmFuc2NlaXZlclxuIik7CisJCQlpZiAoZHJpdmVyLT51bmJpbmQpCisJCQkJZHJpdmVyLT51bmJpbmQoJmRldi0+Z2FkZ2V0KTsKKwkJCWdvdG8gYmluZF9mYWlsOworCQl9CisJfQorCiAJcHVsbHVwKGRldik7CiAJZHVtcF9zdGF0ZShkZXYpOwogCXJldHVybiAwOworYmluZF9mYWlsOgorCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKIApAQCAtMTM1MSw2ICsxMzc4LDkgQEAKIAlzdG9wX2FjdGl2aXR5KGRldiwgZHJpdmVyKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKwlpZiAoZGV2LT50cmFuc2NlaXZlcikKKwkJKHZvaWQpIG90Z19zZXRfcGVyaXBoZXJhbChkZXYtPnRyYW5zY2VpdmVyLCBOVUxMKTsKKwogCWRyaXZlci0+dW5iaW5kKCZkZXYtPmdhZGdldCk7CiAJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CiAJZGV2LT5kcml2ZXIgPSBOVUxMOwpAQCAtMjE2Miw2ICsyMTkyLDggQEAKIAlkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJZGV2LT5tYWNoID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwlkZXYtPnRyYW5zY2VpdmVyID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCiAJaWYgKGdwaW9faXNfdmFsaWQoZGV2LT5tYWNoLT5ncGlvX3ZidXMpKSB7CiAJCWlmICgocmV0dmFsID0gZ3Bpb19yZXF1ZXN0KGRldi0+bWFjaC0+Z3Bpb192YnVzLAogCQkJCSJweGEyNXhfdWRjIEdQSU8gVkJVUyIpKSkgewpAQCAtMjI2NCw2ICsyMjk2LDEwIEBACiAJaWYgKGdwaW9faXNfdmFsaWQoZGV2LT5tYWNoLT5ncGlvX3ZidXMpKQogCQlncGlvX2ZyZWUoZGV2LT5tYWNoLT5ncGlvX3ZidXMpOwogIGVycl9ncGlvX3ZidXM6CisJaWYgKGRldi0+dHJhbnNjZWl2ZXIpIHsKKwkJb3RnX3B1dF90cmFuc2NlaXZlcihkZXYtPnRyYW5zY2VpdmVyKTsKKwkJZGV2LT50cmFuc2NlaXZlciA9IE5VTEw7CisJfQogCWNsa19wdXQoZGV2LT5jbGspOwogIGVycl9jbGs6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTIzMDUsNiArMjM0MSwxMSBAQAogCiAJY2xrX3B1dChkZXYtPmNsayk7CiAKKwlpZiAoZGV2LT50cmFuc2NlaXZlcikgeworCQlvdGdfcHV0X3RyYW5zY2VpdmVyKGRldi0+dHJhbnNjZWl2ZXIpOworCQlkZXYtPnRyYW5zY2VpdmVyID0gTlVMTDsKKwl9CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuaAppbmRleCAxZDUxYWEyLi5mNTcyYzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmgKQEAgLTEyOCw2ICsxMjgsNyBAQAogCXN0cnVjdCBkZXZpY2UJCQkJKmRldjsKIAlzdHJ1Y3QgY2xrCQkJCSpjbGs7CiAJc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvCQkqbWFjaDsKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCQkJKnRyYW5zY2VpdmVyOwogCXU2NAkJCQkJZG1hX21hc2s7CiAJc3RydWN0IHB4YTI1eF9lcAkJCWVwIFtQWEFfVURDX05VTV9FTkRQT0lOVFNdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCmluZGV4IGNhNDFiMGIuLjQ4MjY3YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCkBAIC0xMDIyLDIyICsxMDIyLDI5IEBACiAJcmV0dXJuIHI7CiB9CiAKLWludCBybmRpc19ybV9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBybmRpc19ybV9oZHIoc3RydWN0IGdldGhlciAqcG9ydCwKKwkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQogewogCS8qIHRtcCBwb2ludHMgdG8gYSBzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlICovCiAJX19sZTMyCQkqdG1wID0gKHZvaWQgKikgc2tiLT5kYXRhOwogCiAJLyogTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZW5ndGggKi8KIAlpZiAoY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRykKLQkJCSE9IGdldF91bmFsaWduZWQodG1wKyspKQorCQkJIT0gZ2V0X3VuYWxpZ25lZCh0bXArKykpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXRtcCsrOwogCiAJLyogRGF0YU9mZnNldCwgRGF0YUxlbmd0aCAqLwotCWlmICghc2tiX3B1bGwoc2tiLCBnZXRfdW5hbGlnbmVkX2xlMzIodG1wKyspICsgOCkpCisJaWYgKCFza2JfcHVsbChza2IsIGdldF91bmFsaWduZWRfbGUzMih0bXArKykgKyA4KSkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVPVkVSRkxPVzsKKwl9CiAJc2tiX3RyaW0oc2tiLCBnZXRfdW5hbGlnbmVkX2xlMzIodG1wKyspKTsKIAorCXNrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmgKaW5kZXggYWFjNjFkZi4uYzIzNmFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmgKQEAgLTI1MSw3ICsyNTEsOCBAQAogCQkJICAgIGNvbnN0IGNoYXIgKnZlbmRvckRlc2NyKTsKIGludCAgcm5kaXNfc2V0X3BhcmFtX21lZGl1bSAodTggY29uZmlnTnIsIHUzMiBtZWRpdW0sIHUzMiBzcGVlZCk7CiB2b2lkIHJuZGlzX2FkZF9oZHIgKHN0cnVjdCBza19idWZmICpza2IpOwotaW50IHJuZGlzX3JtX2hkciAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcm5kaXNfcm1faGRyKHN0cnVjdCBnZXRoZXIgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTsKIHU4ICAgKnJuZGlzX2dldF9uZXh0X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiAqbGVuZ3RoKTsKIHZvaWQgcm5kaXNfZnJlZV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1OCAqYnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCmluZGV4IDUwYzcxYWEuLjRiNWRiZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKQEAgLTIzOTIsNyArMjM5Miw3IEBACiAJCWdyc3RjdGwgPSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlNUQ1RMKTsKIAl9IHdoaWxlICghKGdyc3RjdGwgJiBTM0NfR1JTVENUTF9DU2Z0UnN0KSAmJiB0aW1lb3V0LS0gPiAwKTsKIAotCWlmICghZ3JzdGN0bCAmIFMzQ19HUlNUQ1RMX0NTZnRSc3QpIHsKKwlpZiAoIShncnN0Y3RsICYgUzNDX0dSU1RDVExfQ1NmdFJzdCkpIHsKIAkJZGV2X2Vycihoc290Zy0+ZGV2LCAiRmFpbGVkIHRvIGdldCBDU2Z0UnN0IGFzc2VydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjUxNCw4ICsyNTE0LDggQEAKIAkgKiBETUEgbW9kZSB3ZSBtYXkgbmVlZCB0aGlzLiAqLwogCXdyaXRlbChTM0NfRE9FUE1TS19TZXR1cE1zayB8IFMzQ19ET0VQTVNLX0FIQkVyck1zayB8CiAJICAgICAgIFMzQ19ET0VQTVNLX0VQRGlzYmxkTXNrIHwKLQkgICAgICAgdXNpbmdfZG1hKGhzb3RnKSA/IChTM0NfRElFUE1TS19YZmVyQ29tcGxNc2sgfAotCQkJCSAgIFMzQ19ESUVQTVNLX1RpbWVPVVRNc2spIDogMCwKKwkgICAgICAgKHVzaW5nX2RtYShoc290ZykgPyAoUzNDX0RJRVBNU0tfWGZlckNvbXBsTXNrIHwKKwkJCQkgICBTM0NfRElFUE1TS19UaW1lT1VUTXNrKSA6IDApLAogCSAgICAgICBoc290Zy0+cmVncyArIFMzQ19ET0VQTVNLKTsKIAogCXdyaXRlbCgwLCBoc290Zy0+cmVncyArIFMzQ19EQUlOVE1TSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCmluZGV4IGE5YjQ1MmYuLmQ1ZjRjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCkBAIC0xNzAzLDggKzE3MDMsNyBAQAogCWRwcmludGsoREVCVUdfTk9STUFMLCJ1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcigpICclcydcbiIsCiAJCWRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCi0JaWYgKGRyaXZlci0+ZGlzY29ubmVjdCkKLQkJZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CisJZHJpdmVyLT51bmJpbmQoJnVkYy0+Z2FkZ2V0KTsKIAogCWRldmljZV9kZWwoJnVkYy0+Z2FkZ2V0LmRldik7CiAJdWRjLT5kcml2ZXIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKaW5kZXggMGYzZDIyZi4uYjUyMDBkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jCkBAIC0yNTMsMTEgKzI1MywxMyBAQAogCXNuZC0+ZmlscCA9IGZpbHBfb3Blbihmbl9jYXAsIE9fUkRPTkxZLCAwKTsKIAlpZiAoSVNfRVJSKHNuZC0+ZmlscCkpIHsKIAkJRVJST1IoY2FyZCwgIk5vIHN1Y2ggUENNIGNhcHR1cmUgZGV2aWNlOiAlc1xuIiwgZm5fY2FwKTsKLQkJc25kLT5maWxwID0gTlVMTDsKKwkJc25kLT5zdWJzdHJlYW0gPSBOVUxMOworCQlzbmQtPmNhcmQgPSBOVUxMOworCX0gZWxzZSB7CisJCXBjbV9maWxlID0gc25kLT5maWxwLT5wcml2YXRlX2RhdGE7CisJCXNuZC0+c3Vic3RyZWFtID0gcGNtX2ZpbGUtPnN1YnN0cmVhbTsKKwkJc25kLT5jYXJkID0gY2FyZDsKIAl9Ci0JcGNtX2ZpbGUgPSBzbmQtPmZpbHAtPnByaXZhdGVfZGF0YTsKLQlzbmQtPnN1YnN0cmVhbSA9IHBjbV9maWxlLT5zdWJzdHJlYW07Ci0Jc25kLT5jYXJkID0gY2FyZDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKaW5kZXggYzY2NTIxOS4uZjg3NTFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCkBAIC0zNyw4ICszNyw5IEBACiAgKiBvbmUgKCEpIG5ldHdvcmsgbGluayB0aHJvdWdoIHRoZSBVU0IgZ2FkZ2V0IHN0YWNrLCBub3JtYWxseSAidXNiMCIuCiAgKgogICogVGhlIGNvbnRyb2wgYW5kIGRhdGEgbW9kZWxzIGFyZSBoYW5kbGVkIGJ5IHRoZSBmdW5jdGlvbiBkcml2ZXIgd2hpY2gKLSAqIGNvbm5lY3RzIHRvIHRoaXMgY29kZTsgc3VjaCBhcyBDREMgRXRoZXJuZXQsICJDREMgU3Vic2V0Iiwgb3IgUk5ESVMuCi0gKiBUaGF0IGluY2x1ZGVzIGFsbCBkZXNjcmlwdG9yIGFuZCBlbmRwb2ludCBtYW5hZ2VtZW50LgorICogY29ubmVjdHMgdG8gdGhpcyBjb2RlOyBzdWNoIGFzIENEQyBFdGhlcm5ldCAoRUNNIG9yIEVFTSksCisgKiAiQ0RDIFN1YnNldCIsIG9yIFJORElTLiAgVGhhdCBpbmNsdWRlcyBhbGwgZGVzY3JpcHRvciBhbmQgZW5kcG9pbnQKKyAqIG1hbmFnZW1lbnQuCiAgKgogICogTGluayBsZXZlbCBhZGRyZXNzaW5nIGlzIGhhbmRsZWQgYnkgdGhpcyBjb21wb25lbnQgdXNpbmcgbW9kdWxlCiAgKiBwYXJhbWV0ZXJzOyBpZiBubyBzdWNoIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLCByYW5kb20gbGluayBsZXZlbApAQCAtNjgsOSArNjksMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXR4X3JlcXMsIHJ4X3JlcXM7CiAJYXRvbWljX3QJCXR4X3FsZW47CiAKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXJ4X2ZyYW1lczsKKwogCXVuc2lnbmVkCQloZWFkZXJfbGVuOwotCXN0cnVjdCBza19idWZmCQkqKCp3cmFwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQlpbnQJCQkoKnVud3JhcCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJc3RydWN0IHNrX2J1ZmYJCSooKndyYXApKHN0cnVjdCBnZXRoZXIgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CQkJKCp1bndyYXApKHN0cnVjdCBnZXRoZXIgKiwKKwkJCQkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogCkBAIC0yNjksNyArMjc0LDcgQEAKIAogc3RhdGljIHZvaWQgcnhfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBza19idWZmCSpza2IgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IHNrX2J1ZmYJKnNrYiA9IHJlcS0+Y29udGV4dCwgKnNrYjI7CiAJc3RydWN0IGV0aF9kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKIAlpbnQJCXN0YXR1cyA9IHJlcS0+c3RhdHVzOwogCkBAIC0yNzgsMjYgKzI4Myw0NyBAQAogCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCiAJY2FzZSAwOgogCQlza2JfcHV0KHNrYiwgcmVxLT5hY3R1YWwpOwotCQlpZiAoZGV2LT51bndyYXApCi0JCQlzdGF0dXMgPSBkZXYtPnVud3JhcChza2IpOwotCQlpZiAoc3RhdHVzIDwgMAotCQkJCXx8IEVUSF9ITEVOID4gc2tiLT5sZW4KLQkJCQl8fCBza2ItPmxlbiA+IEVUSF9GUkFNRV9MRU4pIHsKLQkJCWRldi0+bmV0LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCWRldi0+bmV0LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQlEQkcoZGV2LCAicnggbGVuZ3RoICVkXG4iLCBza2ItPmxlbik7Ci0JCQlicmVhazsKKworCQlpZiAoZGV2LT51bndyYXApIHsKKwkJCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJCWlmIChkZXYtPnBvcnRfdXNiKSB7CisJCQkJc3RhdHVzID0gZGV2LT51bndyYXAoZGV2LT5wb3J0X3VzYiwKKwkJCQkJCQlza2IsCisJCQkJCQkJJmRldi0+cnhfZnJhbWVzKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlzdGF0dXMgPSAtRU5PVENPTk47CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXNrYl9xdWV1ZV90YWlsKCZkZXYtPnJ4X2ZyYW1lcywgc2tiKTsKIAkJfQotCi0JCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi0+bmV0KTsKLQkJZGV2LT5uZXQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JCS8qIG5vIGJ1ZmZlciBjb3BpZXMgbmVlZGVkLCB1bmxlc3MgaGFyZHdhcmUgY2FuJ3QKLQkJICogdXNlIHNrYiBidWZmZXJzLgotCQkgKi8KLQkJc3RhdHVzID0gbmV0aWZfcngoc2tiKTsKIAkJc2tiID0gTlVMTDsKKworCQlza2IyID0gc2tiX2RlcXVldWUoJmRldi0+cnhfZnJhbWVzKTsKKwkJd2hpbGUgKHNrYjIpIHsKKwkJCWlmIChzdGF0dXMgPCAwCisJCQkJCXx8IEVUSF9ITEVOID4gc2tiMi0+bGVuCisJCQkJCXx8IHNrYjItPmxlbiA+IEVUSF9GUkFNRV9MRU4pIHsKKwkJCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQlEQkcoZGV2LCAicnggbGVuZ3RoICVkXG4iLCBza2IyLT5sZW4pOworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYjIpOworCQkJCWdvdG8gbmV4dF9mcmFtZTsKKwkJCX0KKwkJCXNrYjItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiMiwgZGV2LT5uZXQpOworCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCWRldi0+bmV0LT5zdGF0cy5yeF9ieXRlcyArPSBza2IyLT5sZW47CisKKwkJCS8qIG5vIGJ1ZmZlciBjb3BpZXMgbmVlZGVkLCB1bmxlc3MgaGFyZHdhcmUgY2FuJ3QKKwkJCSAqIHVzZSBza2IgYnVmZmVycy4KKwkJCSAqLworCQkJc3RhdHVzID0gbmV0aWZfcngoc2tiMik7CituZXh0X2ZyYW1lOgorCQkJc2tiMiA9IHNrYl9kZXF1ZXVlKCZkZXYtPnJ4X2ZyYW1lcyk7CisJCX0KIAkJYnJlYWs7CiAKIAkvKiBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duICovCkBAIC01MzcsMTQgKzU2MywxNSBAQAogCSAqIG9yIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBmb3IgZXh0cmEgaGVhZGVycyB3ZSBuZWVkCiAJICovCiAJaWYgKGRldi0+d3JhcCkgewotCQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiX25ldzsKKwkJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotCQlza2JfbmV3ID0gZGV2LT53cmFwKHNrYik7Ci0JCWlmICghc2tiX25ldykKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlpZiAoZGV2LT5wb3J0X3VzYikKKwkJCXNrYiA9IGRldi0+d3JhcChkZXYtPnBvcnRfdXNiLCBza2IpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFza2IpCiAJCQlnb3RvIGRyb3A7CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJc2tiID0gc2tiX25ldzsKIAkJbGVuZ3RoID0gc2tiLT5sZW47CiAJfQogCXJlcS0+YnVmID0gc2tiLT5kYXRhOwpAQCAtNTc4LDkgKzYwNSw5IEBACiAJfQogCiAJaWYgKHJldHZhbCkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogZHJvcDoKIAkJZGV2LT5uZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGxpc3RfZW1wdHkoJmRldi0+dHhfcmVxcykpCiAJCQluZXRpZl9zdGFydF9xdWV1ZShuZXQpOwpAQCAtNzUzLDYgKzc4MCw4IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dHhfcmVxcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+cnhfcmVxcyk7CiAKKwlza2JfcXVldWVfaGVhZF9pbml0KCZkZXYtPnJ4X2ZyYW1lcyk7CisKIAkvKiBuZXR3b3JrIGRldmljZSBzZXR1cCAqLwogCWRldi0+bmV0ID0gbmV0OwogCXN0cmNweShuZXQtPm5hbWUsICJ1c2IlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmgKaW5kZXggMGQxZjdhZS4uOTFiMzlmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5oCkBAIC02MCwxMiArNjAsMTMgQEAKIAogCXUxNgkJCQljZGNfZmlsdGVyOwogCi0JLyogaG9va3MgZm9yIGFkZGVkIGZyYW1pbmcsIGFzIG5lZWRlZCBmb3IgUk5ESVMgYW5kIEVFTS4KLQkgKiB3ZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSBmcmFtZXMgcGVyIFNLQi4KLQkgKi8KKwkvKiBob29rcyBmb3IgYWRkZWQgZnJhbWluZywgYXMgbmVlZGVkIGZvciBSTkRJUyBhbmQgRUVNLiAqLwogCXUzMgkJCQloZWFkZXJfbGVuOwotCXN0cnVjdCBza19idWZmCQkJKigqd3JhcCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JaW50CQkJCSgqdW53cmFwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJCSooKndyYXApKHN0cnVjdCBnZXRoZXIgKnBvcnQsCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQJCQkJKCp1bndyYXApKHN0cnVjdCBnZXRoZXIgKnBvcnQsCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CiAKIAkvKiBjYWxsZWQgb24gbmV0d29yayBvcGVuL2Nsb3NlICovCiAJdm9pZAkJCQkoKm9wZW4pKHN0cnVjdCBnZXRoZXIgKik7CkBAIC0xMDksNiArMTEwLDcgQEAKIC8qIGVhY2ggY29uZmlndXJhdGlvbiBtYXkgYmluZCBvbmUgaW5zdGFuY2Ugb2YgYW4gZXRoZXJuZXQgbGluayAqLwogaW50IGdldGhfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBldGhhZGRyW0VUSF9BTEVOXSk7CiBpbnQgZWNtX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pOworaW50IGVlbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpOwogCiAjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYwppbmRleCBmYzZlNzA5Li5hZGY4MjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYwpAQCAtMTExNCw3ICsxMTE0LDYgQEAKIAkvKiBleHBvcnQgdGhlIGRyaXZlciAuLi4gKi8KIAlzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOwogCWlmIChzdGF0dXMpIHsKLQkJcHV0X3R0eV9kcml2ZXIoZ3NfdHR5X2RyaXZlcik7CiAJCXByX2VycigiJXM6IGNhbm5vdCByZWdpc3RlciwgZXJyICVkXG4iLAogCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKaW5kZXggZjIxY2E3ZC4uOWI0M2IyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtMTEzLDYgKzExMywxMiBAQAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVVNCIGNvbnRyb2xsZXIgcHJlc2VudCBvbiB0aGUgUG93ZXJQQwogCSAgT3BlbkZpcm13YXJlIHBsYXRmb3JtIGJ1cy4KIAorY29uZmlnIFVTQl9XOTBYOTAwX0VIQ0kKKwlib29sICJXOTBYOTAwKFc5MFA5MTApIEVIQ0kgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBBUkNIX1c5MFg5MDAKKwktLS1oZWxwLS0tCisJCUVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFc5MFg5MDAgVVNCIGNvbnRyb2xsZXIKKwogY29uZmlnIFVTQl9PWFUyMTBIUF9IQ0QKIAl0cmlzdGF0ZSAiT1hVMjEwSFAgSENEIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKQEAgLTE1Myw2ICsxNTksMTggQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlzcDE3NjAuCiAKK2NvbmZpZyBVU0JfSVNQMTM2Ml9IQ0QKKwl0cmlzdGF0ZSAiSVNQMTM2MiBIQ0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnRzIHRoZSBQaGlsaXBzIElTUDEzNjIgY2hpcCBhcyBhIGhvc3QgY29udHJvbGxlcgorCisJICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IGlzb2Nocm9ub3VzIHRyYW5zZmVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXNwMTM2Mi1oY2QuCisKIGNvbmZpZyBVU0JfT0hDSV9IQ0QKIAl0cmlzdGF0ZSAiT0hDSSBIQ0Qgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQiAmJiBVU0JfQVJDSF9IQVNfT0hDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggMjg5ZDc0OC4uZjU4YjI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0yMSw2ICsyMSw3IEBACiBvYmotJChDT05GSUdfVVNCX0VIQ0lfSENEKQkrPSBlaGNpLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX09YVTIxMEhQX0hDRCkJKz0gb3h1MjEwaHAtaGNkLm8KIG9iai0kKENPTkZJR19VU0JfSVNQMTE2WF9IQ0QpCSs9IGlzcDExNngtaGNkLm8KK29iai0kKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QpCSs9IGlzcDEzNjItaGNkLm8KIG9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpCSs9IG9oY2ktaGNkLm8KIG9iai0kKENPTkZJR19VU0JfVUhDSV9IQ0QpCSs9IHVoY2ktaGNkLm8KIG9iai0kKENPTkZJR19VU0JfRkhDSV9IQ0QpCSs9IGZoY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXRtZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MxYjdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBEcml2ZXIgZm9yIEVIQ0kgVUhQIG9uIEF0bWVsIGNoaXBzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbiwKKyAqICAgICAgICAgICAgICAgICAgICAgTmljb2xhcyBGZXJyZSA8bmljb2xhcy5mZXJyZUBhdG1lbC5jb20+CisgKgorICogIEJhc2VkIG9uIHZhcmlvdXMgZWhjaS0qLmMgZHJpdmVycworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKy8qIGludGVyZmFjZSBhbmQgZnVuY3Rpb24gY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayAqaWNsaywgKmZjbGs7CitzdGF0aWMgaW50IGNsb2NrZWQ7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGF0bWVsX3N0YXJ0X2Nsb2NrKHZvaWQpCit7CisJY2xrX2VuYWJsZShpY2xrKTsKKwljbGtfZW5hYmxlKGZjbGspOworCWNsb2NrZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9zdG9wX2Nsb2NrKHZvaWQpCit7CisJY2xrX2Rpc2FibGUoZmNsayk7CisJY2xrX2Rpc2FibGUoaWNsayk7CisJY2xvY2tlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX3N0YXJ0X2VoY2koc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJzdGFydFxuIik7CisJYXRtZWxfc3RhcnRfY2xvY2soKTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfc3RvcF9laGNpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAic3RvcFxuIik7CisJYXRtZWxfc3RvcF9jbG9jaygpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGVoY2lfYXRtZWxfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCWludCByZXR2YWwgPSAwOworCisJLyogcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDAgKi8KKwllaGNpLT5jYXBzID0gaGNkLT5yZWdzOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKworCQlIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCWRiZ19oY3NfcGFyYW1zKGVoY2ksICJyZXNldCIpOworCWRiZ19oY2NfcGFyYW1zKGVoY2ksICJyZXNldCIpOworCisJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCisJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCisJcmV0dmFsID0gZWhjaV9oYWx0KGVoY2kpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBkYXRhIHN0cnVjdHVyZSBpbml0ICovCisJcmV0dmFsID0gZWhjaV9pbml0KGhjZCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWVoY2ktPnNicm4gPSAweDIwOworCisJZWhjaV9yZXNldChlaGNpKTsKKwllaGNpX3BvcnRfcG93ZXIoZWhjaSwgMCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX2F0bWVsX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24JCT0gaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYwkJPSAiQXRtZWwgRUhDSSBVSFAgSFMiLAorCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCisJLyogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlICovCisJLmlycQkJCT0gZWhjaV9pcnEsCisJLmZsYWdzCQkJPSBIQ0RfTUVNT1JZIHwgSENEX1VTQjIsCisKKwkvKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucyAqLworCS5yZXNldAkJCT0gZWhjaV9hdG1lbF9zZXR1cCwKKwkuc3RhcnQJCQk9IGVoY2lfcnVuLAorCS5zdG9wCQkJPSBlaGNpX3N0b3AsCisJLnNodXRkb3duCQk9IGVoY2lfc2h1dGRvd24sCisKKwkvKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcyAqLworCS51cmJfZW5xdWV1ZQkJPSBlaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJPSBlaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlCT0gZWhjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyogc2NoZWR1bGluZyBzdXBwb3J0ICovCisJLmdldF9mcmFtZV9udW1iZXIJPSBlaGNpX2dldF9mcmFtZSwKKworCS8qIHJvb3QgaHViIHN1cHBvcnQgKi8KKwkuaHViX3N0YXR1c19kYXRhCT0gZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sCQk9IGVoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kCQk9IGVoY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUJCT0gZWhjaV9idXNfcmVzdW1lLAorCS5yZWxpbnF1aXNoX3BvcnQJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKKwkucG9ydF9oYW5kZWRfb3Zlcgk9IGVoY2lfcG9ydF9oYW5kZWRfb3ZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVoY2lfYXRtZWxfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwljb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIgPSAmZWhjaV9hdG1lbF9oY19kcml2ZXI7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlpbnQgcmV0dmFsOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByX2RlYnVnKCJJbml0aWFsaXppbmcgQXRtZWwtU29DIFVTQiBIb3N0IENvbnRyb2xsZXJcbiIpOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDw9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkZvdW5kIEhDIHdpdGggbm8gSVJRLiBDaGVjayAlcyBzZXR1cCFcbiIsCisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9jcmVhdGVfaGNkOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9jcmVhdGVfaGNkOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkZvdW5kIEhDIHdpdGggbm8gcmVnaXN0ZXIgYWRkci4gQ2hlY2sgJXMgc2V0dXAhXG4iLAorCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfcmVxdWVzdF9yZXNvdXJjZTsKKwl9CisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwKKwkJCQlkcml2ZXItPmRlc2NyaXB0aW9uKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb250cm9sbGVyIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGZhaWxfcmVxdWVzdF9yZXNvdXJjZTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoaGNkLT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXJyb3IgbWFwcGluZyBtZW1vcnlcbiIpOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxfaW9yZW1hcDsKKwl9CisKKwlpY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZWhjaV9jbGsiKTsKKwlpZiAoSVNfRVJSKGljbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGdldHRpbmcgaW50ZXJmYWNlIGNsb2NrXG4iKTsKKwkJcmV0dmFsID0gLUVOT0VOVDsKKwkJZ290byBmYWlsX2dldF9pY2xrOworCX0KKwlmY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidWhwY2siKTsKKwlpZiAoSVNfRVJSKGZjbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGdldHRpbmcgZnVuY3Rpb24gY2xvY2tcbiIpOworCQlyZXR2YWwgPSAtRU5PRU5UOworCQlnb3RvIGZhaWxfZ2V0X2ZjbGs7CisJfQorCisJYXRtZWxfc3RhcnRfZWhjaShwZGV2KTsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsX2FkZF9oY2Q7CisKKwlyZXR1cm4gcmV0dmFsOworCitmYWlsX2FkZF9oY2Q6CisJYXRtZWxfc3RvcF9laGNpKHBkZXYpOworCWNsa19wdXQoZmNsayk7CitmYWlsX2dldF9mY2xrOgorCWNsa19wdXQoaWNsayk7CitmYWlsX2dldF9pY2xrOgorCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2ZhaWxfaW9yZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKK2ZhaWxfcmVxdWVzdF9yZXNvdXJjZToKKwl1c2JfcHV0X2hjZChoY2QpOworZmFpbF9jcmVhdGVfaGNkOgorCWRldl9lcnIoJnBkZXYtPmRldiwgImluaXQgJXMgZmFpbCwgJWRcbiIsCisJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2V4aXQgZWhjaV9hdG1lbF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZWhjaV9zaHV0ZG93bihoY2QpOworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlhdG1lbF9zdG9wX2VoY2kocGRldik7CisJY2xrX3B1dChmY2xrKTsKKwljbGtfcHV0KGljbGspOworCWZjbGsgPSBpY2xrID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX2F0bWVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZWhjaV9hdG1lbF9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChlaGNpX2F0bWVsX2Rydl9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCisJLmRyaXZlci5uYW1lCT0gImF0bWVsLWVoY2kiLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwppbmRleCA1OWQyMDhkLi5lZDc3YmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCkBAIC0xOTksMTAgKzE5OSw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgZWhjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBlaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKQEAgLTIyOSwxMiArMjI4LDYgQEAKIAllaGNpX3dyaXRlbChlaGNpLCAwLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCSh2b2lkKWVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIAotCS8qIG1ha2Ugc3VyZSBzbmFwc2hvdCBiZWluZyByZXN1bWVkIHJlLWVudW1lcmF0ZXMgZXZlcnl0aGluZyAqLwotCWlmIChtZXNzYWdlLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpIHsKLQkJZWhjaV9oYWx0KGVoY2kpOwotCQllaGNpX3Jlc2V0KGVoY2kpOwotCX0KLQogCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CiAKIAlhdTF4eHhfc3RvcF9laGMoKTsKQEAgLTI0OCwxMCArMjQxLDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotc3RhdGljIGludCBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwogCiAJYXUxeHh4X3N0YXJ0X2VoYygpOwpAQCAtMzA1LDIwICsyOTcsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGF1MXh4eF9laGNpX3Btb3BzID0geworCS5zdXNwZW5kCT0gZWhjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZWhjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsCit9OworCisjZGVmaW5lIEFVMVhYWF9FSENJX1BNT1BTICZhdTF4eHhfZWhjaV9wbW9wcworCiAjZWxzZQotI2RlZmluZSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQgTlVMTAotI2RlZmluZSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSBOVUxMCisjZGVmaW5lIEFVMVhYWF9FSENJX1BNT1BTIE5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX2hjZF9hdTF4eHhfZHJpdmVyID0gewogCS5wcm9iZQkJPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gZWhjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUsCiAJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLQkuc3VzcGVuZAk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImF1MXh4eC1laGNpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IEFVMVhYWF9FSENJX1BNT1BTLAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwppbmRleCA3ZjRhY2U3Li44NzRkMjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCkBAIC0xMzQsMTAgKzEzNCwxMSBAQAogc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQKIGRiZ19xaCAoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQogeworCXN0cnVjdCBlaGNpX3FoX2h3ICpodyA9IHFoLT5odzsKKwogCWVoY2lfZGJnIChlaGNpLCAiJXMgcWggJXAgbiUwOHggaW5mbyAleCAleCBxdGQgJXhcbiIsIGxhYmVsLAotCQlxaCwgcWgtPmh3X25leHQsIHFoLT5od19pbmZvMSwgcWgtPmh3X2luZm8yLAotCQlxaC0+aHdfY3VycmVudCk7Ci0JZGJnX3F0ZCAoIm92ZXJsYXkiLCBlaGNpLCAoc3RydWN0IGVoY2lfcXRkICopICZxaC0+aHdfcXRkX25leHQpOworCQlxaCwgaHctPmh3X25leHQsIGh3LT5od19pbmZvMSwgaHctPmh3X2luZm8yLCBody0+aHdfY3VycmVudCk7CisJZGJnX3F0ZCgib3ZlcmxheSIsIGVoY2ksIChzdHJ1Y3QgZWhjaV9xdGQgKikgJmh3LT5od19xdGRfbmV4dCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkCkBAIC00MDAsMzEgKzQwMSwzMiBAQAogCWNoYXIJCQkqbmV4dCA9ICpuZXh0cDsKIAljaGFyCQkJbWFyazsKIAlfX2xlMzIJCQlsaXN0X2VuZCA9IEVIQ0lfTElTVF9FTkQoZWhjaSk7CisJc3RydWN0IGVoY2lfcWhfaHcJKmh3ID0gcWgtPmh3OwogCi0JaWYgKHFoLT5od19xdGRfbmV4dCA9PSBsaXN0X2VuZCkJLyogTkVDIGRvZXMgdGhpcyAqLworCWlmIChody0+aHdfcXRkX25leHQgPT0gbGlzdF9lbmQpCS8qIE5FQyBkb2VzIHRoaXMgKi8KIAkJbWFyayA9ICdAJzsKIAllbHNlCi0JCW1hcmsgPSB0b2tlbl9tYXJrKGVoY2ksIHFoLT5od190b2tlbik7CisJCW1hcmsgPSB0b2tlbl9tYXJrKGVoY2ksIGh3LT5od190b2tlbik7CiAJaWYgKG1hcmsgPT0gJy8nKSB7CS8qIHFoX2FsdF9uZXh0IGNvbnRyb2xzIHFoIGFkdmFuY2U/ICovCi0JCWlmICgocWgtPmh3X2FsdF9uZXh0ICYgUVREX01BU0soZWhjaSkpCi0JCQkJPT0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0KQorCQlpZiAoKGh3LT5od19hbHRfbmV4dCAmIFFURF9NQVNLKGVoY2kpKQorCQkJCT09IGVoY2ktPmFzeW5jLT5ody0+aHdfYWx0X25leHQpCiAJCQltYXJrID0gJyMnOwkvKiBibG9ja2VkICovCi0JCWVsc2UgaWYgKHFoLT5od19hbHRfbmV4dCA9PSBsaXN0X2VuZCkKKwkJZWxzZSBpZiAoaHctPmh3X2FsdF9uZXh0ID09IGxpc3RfZW5kKQogCQkJbWFyayA9ICcuJzsJLyogdXNlIGh3X3F0ZF9uZXh0ICovCiAJCS8qIGVsc2UgYWx0X25leHQgcG9pbnRzIHRvIHNvbWUgb3RoZXIgcXRkICovCiAJfQotCXNjcmF0Y2ggPSBoYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5od19pbmZvMSk7Ci0JaHdfY3VyciA9IChtYXJrID09ICcqJykgPyBoYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5od19jdXJyZW50KSA6IDA7CisJc2NyYXRjaCA9IGhjMzJfdG9fY3B1cChlaGNpLCAmaHctPmh3X2luZm8xKTsKKwlod19jdXJyID0gKG1hcmsgPT0gJyonKSA/IGhjMzJfdG9fY3B1cChlaGNpLCAmaHctPmh3X2N1cnJlbnQpIDogMDsKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAogCQkJInFoLyVwIGRldiVkICVjcyBlcCVkICUwOHggJTA4eCAoJTA4eCVjICVzIG5hayVkKSIsCiAJCQlxaCwgc2NyYXRjaCAmIDB4MDA3ZiwKIAkJCXNwZWVkX2NoYXIgKHNjcmF0Y2gpLAogCQkJKHNjcmF0Y2ggPj4gOCkgJiAweDAwMGYsCi0JCQlzY3JhdGNoLCBoYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5od19pbmZvMiksCi0JCQloYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5od190b2tlbiksIG1hcmssCi0JCQkoY3B1X3RvX2hjMzIoZWhjaSwgUVREX1RPR0dMRSkgJiBxaC0+aHdfdG9rZW4pCisJCQlzY3JhdGNoLCBoYzMyX3RvX2NwdXAoZWhjaSwgJmh3LT5od19pbmZvMiksCisJCQloYzMyX3RvX2NwdXAoZWhjaSwgJmh3LT5od190b2tlbiksIG1hcmssCisJCQkoY3B1X3RvX2hjMzIoZWhjaSwgUVREX1RPR0dMRSkgJiBody0+aHdfdG9rZW4pCiAJCQkJPyAiZGF0YTEiIDogImRhdGEwIiwKLQkJCShoYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5od19hbHRfbmV4dCkgPj4gMSkgJiAweDBmKTsKKwkJCShoYzMyX3RvX2NwdXAoZWhjaSwgJmh3LT5od19hbHRfbmV4dCkgPj4gMSkgJiAweDBmKTsKIAlzaXplIC09IHRlbXA7CiAJbmV4dCArPSB0ZW1wOwogCkBAIC00MzUsMTAgKzQzNywxMCBAQAogCQltYXJrID0gJyAnOwogCQlpZiAoaHdfY3VyciA9PSB0ZC0+cXRkX2RtYSkKIAkJCW1hcmsgPSAnKic7Ci0JCWVsc2UgaWYgKHFoLT5od19xdGRfbmV4dCA9PSBjcHVfdG9faGMzMihlaGNpLCB0ZC0+cXRkX2RtYSkpCisJCWVsc2UgaWYgKGh3LT5od19xdGRfbmV4dCA9PSBjcHVfdG9faGMzMihlaGNpLCB0ZC0+cXRkX2RtYSkpCiAJCQltYXJrID0gJysnOwogCQllbHNlIGlmIChRVERfTEVOR1RIIChzY3JhdGNoKSkgewotCQkJaWYgKHRkLT5od19hbHRfbmV4dCA9PSBlaGNpLT5hc3luYy0+aHdfYWx0X25leHQpCisJCQlpZiAodGQtPmh3X2FsdF9uZXh0ID09IGVoY2ktPmFzeW5jLT5ody0+aHdfYWx0X25leHQpCiAJCQkJbWFyayA9ICcjJzsKIAkJCWVsc2UgaWYgKHRkLT5od19hbHRfbmV4dCAhPSBsaXN0X2VuZCkKIAkJCQltYXJrID0gJy8nOwpAQCAtNTUwLDEyICs1NTIsMTUgQEAKIAkJbmV4dCArPSB0ZW1wOwogCiAJCWRvIHsKKwkJCXN0cnVjdCBlaGNpX3FoX2h3ICpodzsKKwogCQkJc3dpdGNoIChoYzMyX3RvX2NwdShlaGNpLCB0YWcpKSB7CiAJCQljYXNlIFFfVFlQRV9RSDoKKwkJCQlodyA9IHAucWgtPmh3OwogCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICIgcWglZC0lMDR4LyVwIiwKIAkJCQkJCXAucWgtPnBlcmlvZCwKIAkJCQkJCWhjMzJfdG9fY3B1cChlaGNpLAotCQkJCQkJCQkmcC5xaC0+aHdfaW5mbzIpCisJCQkJCQkJJmh3LT5od19pbmZvMikKIAkJCQkJCQkvKiB1ZnJhbWUgbWFza3MgKi8KIAkJCQkJCQkmIChRSF9DTUFTSyB8IFFIX1NNQVNLKSwKIAkJCQkJCXAucWgpOwpAQCAtNTc2LDcgKzU4MSw3IEBACiAJCQkJLyogc2hvdyBtb3JlIGluZm8gdGhlIGZpcnN0IHRpbWUgYXJvdW5kICovCiAJCQkJaWYgKHRlbXAgPT0gc2Vlbl9jb3VudCkgewogCQkJCQl1MzIJc2NyYXRjaCA9IGhjMzJfdG9fY3B1cChlaGNpLAotCQkJCQkJCSZwLnFoLT5od19pbmZvMSk7CisJCQkJCQkJJmh3LT5od19pbmZvMSk7CiAJCQkJCXN0cnVjdCBlaGNpX3F0ZAkqcXRkOwogCQkJCQljaGFyCQkqdHlwZSA9ICIiOwogCkBAIC02MDksNyArNjE0LDcgQEAKIAkJCQl9IGVsc2UKIAkJCQkJdGVtcCA9IDA7CiAJCQkJaWYgKHAucWgpIHsKLQkJCQkJdGFnID0gUV9ORVhUX1RZUEUoZWhjaSwgcC5xaC0+aHdfbmV4dCk7CisJCQkJCXRhZyA9IFFfTkVYVF9UWVBFKGVoY2ksIGh3LT5od19uZXh0KTsKIAkJCQkJcCA9IHAucWgtPnFoX25leHQ7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtODc5LDggKzg4NCw3IEBACiAJc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGJ1ZikgewotCQlpZiAoYnVmLT5vdXRwdXRfYnVmKQotCQkJdmZyZWUoYnVmLT5vdXRwdXRfYnVmKTsKKwkJdmZyZWUoYnVmLT5vdXRwdXRfYnVmKTsKIAkJa2ZyZWUoYnVmKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCAxMWM2MjdjLi45ODM1ZTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtMTI3LDYgKzEyNiw4IEBACiAKIAkJc3dpdGNoIChhY3Rpb24pIHsKIAkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKKwkJCWlmICghZWhjaS0+bmVlZF9pb193YXRjaGRvZykKKwkJCQlyZXR1cm47CiAJCQl0ID0gRUhDSV9JT19KSUZGSUVTOwogCQkJYnJlYWs7CiAJCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgpAQCAtMjM5LDYgKzI0MCwxMSBAQAogCWludAlyZXR2YWw7CiAJdTMyCWNvbW1hbmQgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKIAorCS8qIElmIHRoZSBFSENJIGRlYnVnIGNvbnRyb2xsZXIgaXMgYWN0aXZlLCBzcGVjaWFsIGNhcmUgbXVzdCBiZQorCSAqIHRha2VuIGJlZm9yZSBhbmQgYWZ0ZXIgYSBob3N0IGNvbnRyb2xsZXIgcmVzZXQgKi8KKwlpZiAoZWhjaS0+ZGVidWcgJiYgIWRiZ3BfcmVzZXRfcHJlcCgpKQorCQllaGNpLT5kZWJ1ZyA9IE5VTEw7CisKIAljb21tYW5kIHw9IENNRF9SRVNFVDsKIAlkYmdfY21kIChlaGNpLCAicmVzZXQiLCBjb21tYW5kKTsKIAllaGNpX3dyaXRlbChlaGNpLCBjb21tYW5kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CkBAIC0yNDcsMTIgKzI1MywyMSBAQAogCXJldHZhbCA9IGhhbmRzaGFrZSAoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQsCiAJCQkgICAgQ01EX1JFU0VULCAwLCAyNTAgKiAxMDAwKTsKIAorCWlmIChlaGNpLT5oYXNfaG9zdHBjKSB7CisJCWVoY2lfd3JpdGVsKGVoY2ksIFVTQk1PREVfRVhfSEMgfCBVU0JNT0RFX0VYX1ZCUFMsCisJCQkodTMyIF9faW9tZW0gKikoKCh1OCAqKWVoY2ktPnJlZ3MpICsgVVNCTU9ERV9FWCkpOworCQllaGNpX3dyaXRlbChlaGNpLCBUWEZJRk9fREVGQVVMVCwKKwkJCSh1MzIgX19pb21lbSAqKSgoKHU4ICopZWhjaS0+cmVncykgKyBUWEZJTExUVU5JTkcpKTsKKwl9CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAogCWlmIChlaGNpX2lzX1RESShlaGNpKSkKIAkJdGRpX3Jlc2V0IChlaGNpKTsKIAorCWlmIChlaGNpLT5kZWJ1ZykKKwkJZGJncF9leHRlcm5hbF9zdGFydHVwKCk7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC01MDUsOSArNTIwLDE0IEBACiAJdTMyCQkJdGVtcDsKIAlpbnQJCQlyZXR2YWw7CiAJdTMyCQkJaGNjX3BhcmFtczsKKwlzdHJ1Y3QgZWhjaV9xaF9odwkqaHc7CiAKIAlzcGluX2xvY2tfaW5pdCgmZWhjaS0+bG9jayk7CiAKKwkvKgorCSAqIGtlZXAgaW8gd2F0Y2hkb2cgYnkgZGVmYXVsdCwgdGhvc2UgZ29vZCBIQ0RzIGNvdWxkIHR1cm4gb2ZmIGl0IGxhdGVyCisJICovCisJZWhjaS0+bmVlZF9pb193YXRjaGRvZyA9IDE7CiAJaW5pdF90aW1lcigmZWhjaS0+d2F0Y2hkb2cpOwogCWVoY2ktPndhdGNoZG9nLmZ1bmN0aW9uID0gZWhjaV93YXRjaGRvZzsKIAllaGNpLT53YXRjaGRvZy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVoY2k7CkBAIC01NDQsMTIgKzU2NCwxMyBAQAogCSAqIGZyb20gYXV0b21hdGljYWxseSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgdGQgYWZ0ZXIgc2hvcnQgcmVhZHMuCiAJICovCiAJZWhjaS0+YXN5bmMtPnFoX25leHQucWggPSBOVUxMOwotCWVoY2ktPmFzeW5jLT5od19uZXh0ID0gUUhfTkVYVChlaGNpLCBlaGNpLT5hc3luYy0+cWhfZG1hKTsKLQllaGNpLT5hc3luYy0+aHdfaW5mbzEgPSBjcHVfdG9faGMzMihlaGNpLCBRSF9IRUFEKTsKLQllaGNpLT5hc3luYy0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLCBRVERfU1RTX0hBTFQpOwotCWVoY2ktPmFzeW5jLT5od19xdGRfbmV4dCA9IEVIQ0lfTElTVF9FTkQoZWhjaSk7CisJaHcgPSBlaGNpLT5hc3luYy0+aHc7CisJaHctPmh3X25leHQgPSBRSF9ORVhUKGVoY2ksIGVoY2ktPmFzeW5jLT5xaF9kbWEpOworCWh3LT5od19pbmZvMSA9IGNwdV90b19oYzMyKGVoY2ksIFFIX0hFQUQpOworCWh3LT5od190b2tlbiA9IGNwdV90b19oYzMyKGVoY2ksIFFURF9TVFNfSEFMVCk7CisJaHctPmh3X3F0ZF9uZXh0ID0gRUhDSV9MSVNUX0VORChlaGNpKTsKIAllaGNpLT5hc3luYy0+cWhfc3RhdGUgPSBRSF9TVEFURV9MSU5LRUQ7Ci0JZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0ID0gUVREX05FWFQoZWhjaSwgZWhjaS0+YXN5bmMtPmR1bW15LT5xdGRfZG1hKTsKKwlody0+aHdfYWx0X25leHQgPSBRVERfTkVYVChlaGNpLCBlaGNpLT5hc3luYy0+ZHVtbXktPnF0ZF9kbWEpOwogCiAJLyogY2xlYXIgaW50ZXJydXB0IGVuYWJsZXMsIHNldCBpcnEgbGF0ZW5jeSAqLwogCWlmIChsb2cyX2lycV90aHJlc2ggPCAwIHx8IGxvZzJfaXJxX3RocmVzaCA+IDYpCkBAIC04NTAsMTIgKzg3MSwxOCBAQAogCWlmICghSENfSVNfUlVOTklORyhlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpICYmIGVoY2ktPnJlY2xhaW0pCiAJCWVuZF91bmxpbmtfYXN5bmMoZWhjaSk7CiAKLQkvKiBpZiBpdCdzIG5vdCBsaW5rZWQgdGhlbiB0aGVyZSdzIG5vdGhpbmcgdG8gZG8gKi8KLQlpZiAocWgtPnFoX3N0YXRlICE9IFFIX1NUQVRFX0xJTktFRCkKLQkJOworCS8qIElmIHRoZSBRSCBpc24ndCBsaW5rZWQgdGhlbiB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvCisJICogdW5sZXNzIHdlIHdlcmUgY2FsbGVkIGR1cmluZyBhIGdpdmViYWNrLCBpbiB3aGljaCBjYXNlCisJICogcWhfY29tcGxldGlvbnMoKSBoYXMgdG8gZGVhbCB3aXRoIGl0LgorCSAqLworCWlmIChxaC0+cWhfc3RhdGUgIT0gUUhfU1RBVEVfTElOS0VEKSB7CisJCWlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfQ09NUExFVElORykKKwkJCXFoLT5uZWVkc19yZXNjYW4gPSAxOworCQlyZXR1cm47CisJfQogCiAJLyogZGVmZXIgdGlsbCBsYXRlciBpZiBidXN5ICovCi0JZWxzZSBpZiAoZWhjaS0+cmVjbGFpbSkgeworCWlmIChlaGNpLT5yZWNsYWltKSB7CiAJCXN0cnVjdCBlaGNpX3FoCQkqbGFzdDsKIAogCQlmb3IgKGxhc3QgPSBlaGNpLT5yZWNsYWltOwpAQCAtOTE1LDggKzk0Miw5IEBACiAJCQlicmVhazsKIAkJc3dpdGNoIChxaC0+cWhfc3RhdGUpIHsKIAkJY2FzZSBRSF9TVEFURV9MSU5LRUQ6CisJCWNhc2UgUUhfU1RBVEVfQ09NUExFVElORzoKIAkJCWludHJfZGVzY2hlZHVsZSAoZWhjaSwgcWgpOwotCQkJLyogRkFMTCBUSFJPVUdIICovCisJCQlicmVhazsKIAkJY2FzZSBRSF9TVEFURV9JRExFOgogCQkJcWhfY29tcGxldGlvbnMgKGVoY2ksIHFoKTsKIAkJCWJyZWFrOwpAQCAtOTI1LDIzICs5NTMsNiBAQAogCQkJCQlxaCwgcWgtPnFoX3N0YXRlKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCi0JCS8qIHJlc2NoZWR1bGUgUUggaWZmIGFub3RoZXIgcmVxdWVzdCBpcyBxdWV1ZWQgKi8KLQkJaWYgKCFsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KQotCQkJCSYmIEhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKSB7Ci0JCQlyYyA9IHFoX3NjaGVkdWxlKGVoY2ksIHFoKTsKLQotCQkJLyogQW4gZXJyb3IgaGVyZSBsaWtlbHkgaW5kaWNhdGVzIGhhbmRzaGFrZSBmYWlsdXJlCi0JCQkgKiBvciBubyBzcGFjZSBsZWZ0IGluIHRoZSBzY2hlZHVsZS4gIE5laXRoZXIgZmF1bHQKLQkJCSAqIHNob3VsZCBoYXBwZW4gb2Z0ZW4gLi4uCi0JCQkgKgotCQkJICogRklYTUUga2lsbCB0aGUgbm93LWR5c2Z1bmN0aW9uYWwgcXVldWVkIHVyYnMKLQkJCSAqLwotCQkJaWYgKHJjICE9IDApCi0JCQkJZWhjaV9lcnIoZWhjaSwKLQkJCQkJImNhbid0IHJlc2NoZWR1bGUgcWggJXAsIGVyciAlZCIsCi0JCQkJCXFoLCByYyk7Ci0JCX0KIAkJYnJlYWs7CiAKIAljYXNlIFBJUEVfSVNPQ0hST05PVVM6CkBAIC05NzksNyArOTkwLDcgQEAKIAkvKiBlbmRwb2ludHMgY2FuIGJlIGlzbyBzdHJlYW1zLiAgZm9yIG5vdywgd2UgZG9uJ3QKIAkgKiBhY2NlbGVyYXRlIGlzbyBjb21wbGV0aW9ucyAuLi4gc28gc3BpbiBhIHdoaWxlLgogCSAqLwotCWlmIChxaC0+aHdfaW5mbzEgPT0gMCkgeworCWlmIChxaC0+aHctPmh3X2luZm8xID09IDApIHsKIAkJZWhjaV92ZGJnIChlaGNpLCAiaXNvIGRlbGF5XG4iKTsKIAkJZ290byBpZGxlX3RpbWVvdXQ7CiAJfQpAQCAtOTg4LDYgKzk5OSw3IEBACiAJCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0lETEU7CiAJc3dpdGNoIChxaC0+cWhfc3RhdGUpIHsKIAljYXNlIFFIX1NUQVRFX0xJTktFRDoKKwljYXNlIFFIX1NUQVRFX0NPTVBMRVRJTkc6CiAJCWZvciAodG1wID0gZWhjaS0+YXN5bmMtPnFoX25leHQucWg7CiAJCQkJdG1wICYmIHRtcCAhPSBxaDsKIAkJCQl0bXAgPSB0bXAtPnFoX25leHQucWgpCkBAIC0xMDUyLDE4ICsxMDY0LDE3IEBACiAJCXVzYl9zZXR0b2dnbGUocWgtPmRldiwgZXBudW0sIGlzX291dCwgMCk7CiAJCWlmICghbGlzdF9lbXB0eSgmcWgtPnF0ZF9saXN0KSkgewogCQkJV0FSTl9PTkNFKDEsICJjbGVhcl9oYWx0IGZvciBhIGJ1c3kgZW5kcG9pbnRcbiIpOwotCQl9IGVsc2UgaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpIHsKKwkJfSBlbHNlIGlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfTElOS0VEIHx8CisJCQkJcWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0NPTVBMRVRJTkcpIHsKIAogCQkJLyogVGhlIHRvZ2dsZSB2YWx1ZSBpbiB0aGUgUUggY2FuJ3QgYmUgdXBkYXRlZAogCQkJICogd2hpbGUgdGhlIFFIIGlzIGFjdGl2ZS4gIFVubGluayBpdCBub3c7CiAJCQkgKiByZS1saW5raW5nIHdpbGwgY2FsbCBxaF9yZWZyZXNoKCkuCiAJCQkgKi8KLQkJCWlmIChlcHR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQkJaWYgKGVwdHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKQogCQkJCXVubGlua19hc3luYyhlaGNpLCBxaCk7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCWludHJfZGVzY2hlZHVsZShlaGNpLCBxaCk7Ci0JCQkJKHZvaWQpIHFoX3NjaGVkdWxlKGVoY2ksIHFoKTsKLQkJCX0KIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CkBAIC0xMTE3LDYgKzExMjgsMTYgQEAKICNkZWZpbmUJUExBVEZPUk1fRFJJVkVSCQlpeHA0eHhfZWhjaV9kcml2ZXIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VTQl9XOTBYOTAwX0VIQ0kKKyNpbmNsdWRlICJlaGNpLXc5MHg5MDAuYyIKKyNkZWZpbmUJUExBVEZPUk1fRFJJVkVSCQllaGNpX2hjZF93OTB4OTAwX2RyaXZlcgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxCisjaW5jbHVkZSAiZWhjaS1hdG1lbC5jIgorI2RlZmluZQlQTEFURk9STV9EUklWRVIJCWVoY2lfYXRtZWxfZHJpdmVyCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKFBDSV9EUklWRVIpICYmICFkZWZpbmVkKFBMQVRGT1JNX0RSSVZFUikgJiYgXAogICAgICFkZWZpbmVkKFBTM19TWVNURU1fQlVTX0RSSVZFUikgJiYgIWRlZmluZWQoT0ZfUExBVEZPUk1fRFJJVkVSKQogI2Vycm9yICJtaXNzaW5nIGJ1cyBnbHVlIGZvciBlaGNpLWhjZCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwppbmRleCBmNDZhZDI3Li4xYjZmMWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCkBAIC0xMTEsNiArMTExLDcgQEAKIAlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CiAJaW50CQkJcG9ydDsKIAlpbnQJCQltYXNrOworCXUzMiBfX2lvbWVtCQkqaG9zdHBjX3JlZyA9IE5VTEw7CiAKIAllaGNpX2RiZyhlaGNpLCAic3VzcGVuZCByb290IGh1YlxuIik7CiAKQEAgLTE0Miw2ICsxNDMsOSBAQAogCQl1MzIJCXQxID0gZWhjaV9yZWFkbChlaGNpLCByZWcpICYgflBPUlRfUldDX0JJVFM7CiAJCXUzMgkJdDIgPSB0MTsKIAorCQlpZiAoZWhjaS0+aGFzX2hvc3RwYykKKwkJCWhvc3RwY19yZWcgPSAodTMyIF9faW9tZW0gKikoKHU4ICopZWhjaS0+cmVncworCQkJCSsgSE9TVFBDMCArIDQgKiAocG9ydCAmIDB4ZmYpKTsKIAkJLyoga2VlcCB0cmFjayBvZiB3aGljaCBwb3J0cyB3ZSBzdXNwZW5kICovCiAJCWlmICh0MSAmIFBPUlRfT1dORVIpCiAJCQlzZXRfYml0KHBvcnQsICZlaGNpLT5vd25lZF9wb3J0cyk7CkBAIC0xNTEsMTUgKzE1NSwzNyBAQAogCQl9CiAKIAkJLyogZW5hYmxlIHJlbW90ZSB3YWtldXAgb24gYWxsIHBvcnRzICovCi0JCWlmIChoY2QtPnNlbGYucm9vdF9odWItPmRvX3JlbW90ZV93YWtldXApCi0JCQl0MiB8PSBQT1JUX1dBS0VfQklUUzsKLQkJZWxzZQorCQlpZiAoaGNkLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwKSB7CisJCQkvKiBvbmx5IGVuYWJsZSBhcHByb3ByaWF0ZSB3YWtlIGJpdHMsIG90aGVyd2lzZSB0aGUKKwkJCSAqIGhhcmR3YXJlIGNhbiBub3QgZ28gcGh5IGxvdyBwb3dlciBtb2RlLiBJZiBhIHJhY2UKKwkJCSAqIGNvbmRpdGlvbiBoYXBwZW5zIGhlcmUoY29ubmVjdGlvbiBjaGFuZ2UgZHVyaW5nIGJpdHMKKwkJCSAqIHNldCksIHRoZSBwb3J0IGNoYW5nZSBkZXRlY3Rpb24gd2lsbCBmaW5hbGx5IGZpeCBpdC4KKwkJCSAqLworCQkJaWYgKHQxICYgUE9SVF9DT05ORUNUKSB7CisJCQkJdDIgfD0gUE9SVF9XS09DX0UgfCBQT1JUX1dLRElTQ19FOworCQkJCXQyICY9IH5QT1JUX1dLQ09OTl9FOworCQkJfSBlbHNlIHsKKwkJCQl0MiB8PSBQT1JUX1dLT0NfRSB8IFBPUlRfV0tDT05OX0U7CisJCQkJdDIgJj0gflBPUlRfV0tESVNDX0U7CisJCQl9CisJCX0gZWxzZQogCQkJdDIgJj0gflBPUlRfV0FLRV9CSVRTOwogCiAJCWlmICh0MSAhPSB0MikgewogCQkJZWhjaV92ZGJnIChlaGNpLCAicG9ydCAlZCwgJTA4eCAtPiAlMDh4XG4iLAogCQkJCXBvcnQgKyAxLCB0MSwgdDIpOwogCQkJZWhjaV93cml0ZWwoZWhjaSwgdDIsIHJlZyk7CisJCQlpZiAoaG9zdHBjX3JlZykgeworCQkJCXUzMgl0MzsKKworCQkJCW1zbGVlcCg1KTsvKiA1bXMgZm9yIEhDRCBlbnRlciBsb3cgcHdyIG1vZGUgKi8KKwkJCQl0MyA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CisJCQkJZWhjaV93cml0ZWwoZWhjaSwgdDMgfCBIT1NUUENfUEhDRCwgaG9zdHBjX3JlZyk7CisJCQkJdDMgPSBlaGNpX3JlYWRsKGVoY2ksIGhvc3RwY19yZWcpOworCQkJCWVoY2lfZGJnKGVoY2ksICJQb3J0JWQgcGh5IGxvdyBwd3IgbW9kZSAlc1xuIiwKKwkJCQkJcG9ydCwgKHQzICYgSE9TVFBDX1BIQ0QpID8KKwkJCQkJInN1Y2NlZWRlZCIgOiAiZmFpbGVkIik7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTE4Myw2ICsyMDksMTEgQEAKIAogCWVoY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCk7CiAJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisKKwkvKiBlaGNpX3dvcmsoKSBtYXkgaGF2ZSByZS1lbmFibGVkIHRoZSB3YXRjaGRvZyB0aW1lciwgd2hpY2ggd2UgZG8gbm90CisJICogd2FudCwgYW5kIHNvIHdlIG11c3QgZGVsZXRlIGFueSBwZW5kaW5nIHdhdGNoZG9nIHRpbWVyIGV2ZW50cy4KKwkgKi8KKwlkZWxfdGltZXJfc3luYygmZWhjaS0+d2F0Y2hkb2cpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQsNiArMjM1LDEzIEBACiAJCXJldHVybiAtRVNIVVRET1dOOwogCX0KIAorCWlmICh1bmxpa2VseShlaGNpLT5kZWJ1ZykpIHsKKwkJaWYgKGVoY2ktPmRlYnVnICYmICFkYmdwX3Jlc2V0X3ByZXAoKSkKKwkJCWVoY2ktPmRlYnVnID0gTlVMTDsKKwkJZWxzZQorCQkJZGJncF9leHRlcm5hbF9zdGFydHVwKCk7CisJfQorCiAJLyogSWRlYWxseSBhbmQgd2UndmUgZ290IGEgcmVhbCByZXN1bWUgaGVyZSwgYW5kIG5vIHBvcnQncyBwb3dlcgogCSAqIHdhcyBsb3N0LiAgKEZvciBQQ0ksIHRoYXQgbWVhbnMgVmF1eCB3YXMgbWFpbnRhaW5lZC4pICBCdXQgd2UKIAkgKiBjb3VsZCBpbnN0ZWFkIGJlIHJlc3RvcmluZyBhIHN3c3VzcCBzbmFwc2hvdCAtLSBzbyB0aGF0IEJJT1Mgd2FzCkBAIC01NjMsNyArNjAxLDggQEAKIAlpbnQJCXBvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOwogCXUzMiBfX2lvbWVtCSpzdGF0dXNfcmVnID0gJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzWwogCQkJCSh3SW5kZXggJiAweGZmKSAtIDFdOwotCXUzMgkJdGVtcCwgc3RhdHVzOworCXUzMiBfX2lvbWVtCSpob3N0cGNfcmVnID0gTlVMTDsKKwl1MzIJCXRlbXAsIHRlbXAxLCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpbnQJCXJldHZhbCA9IDA7CiAJdW5zaWduZWQJc2VsZWN0b3I7CkBAIC01NzUsNiArNjE0LDkgQEAKIAkgKiBwb3dlciwgInRoaXMgaXMgdGhlIG9uZSIsIGV0Yy4gIEVIQ0kgc3BlYyBzdXBwb3J0cyB0aGlzLgogCSAqLwogCisJaWYgKGVoY2ktPmhhc19ob3N0cGMpCisJCWhvc3RwY19yZWcgPSAodTMyIF9faW9tZW0gKikoKHU4ICopZWhjaS0+cmVncworCQkJCSsgSE9TVFBDMCArIDQgKiAoKHdJbmRleCAmIDB4ZmYpIC0gMSkpOwogCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAodHlwZVJlcSkgewogCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgpAQCAtNzczLDcgKzgxNSwxMSBAQAogCQlpZiAodGVtcCAmIFBPUlRfQ09OTkVDVCkgewogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OOwogCQkJLy8gc3RhdHVzIG1heSBiZSBmcm9tIGludGVncmF0ZWQgVFQKLQkJCXN0YXR1cyB8PSBlaGNpX3BvcnRfc3BlZWQoZWhjaSwgdGVtcCk7CisJCQlpZiAoZWhjaS0+aGFzX2hvc3RwYykgeworCQkJCXRlbXAxID0gZWhjaV9yZWFkbChlaGNpLCBob3N0cGNfcmVnKTsKKwkJCQlzdGF0dXMgfD0gZWhjaV9wb3J0X3NwZWVkKGVoY2ksIHRlbXAxKTsKKwkJCX0gZWxzZQorCQkJCXN0YXR1cyB8PSBlaGNpX3BvcnRfc3BlZWQoZWhjaSwgdGVtcCk7CiAJCX0KIAkJaWYgKHRlbXAgJiBQT1JUX1BFKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEU7CkBAIC04MTYsNiArODYyLDE1IEBACiAJY2FzZSBTZXRQb3J0RmVhdHVyZToKIAkJc2VsZWN0b3IgPSB3SW5kZXggPj4gODsKIAkJd0luZGV4ICY9IDB4ZmY7CisJCWlmICh1bmxpa2VseShlaGNpLT5kZWJ1ZykpIHsKKwkJCS8qIElmIHRoZSBkZWJ1ZyBwb3J0IGlzIGFjdGl2ZSBhbnkgcG9ydAorCQkJICogZmVhdHVyZSByZXF1ZXN0cyBzaG91bGQgZ2V0IGRlbmllZCAqLworCQkJaWYgKHdJbmRleCA9PSBIQ1NfREVCVUdfUE9SVChlaGNpLT5oY3NfcGFyYW1zKSAmJgorCQkJICAgIChyZWFkbCgmZWhjaS0+ZGVidWctPmNvbnRyb2wpICYgREJHUF9FTkFCTEVEKSkgeworCQkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQkJZ290byBlcnJvcl9leGl0OworCQkJfQorCQl9CiAJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQogCQkJZ290byBlcnJvcjsKIAkJd0luZGV4LS07CkBAIC04MzIsNiArODg3LDI0IEBACiAJCQkJCXx8ICh0ZW1wICYgUE9SVF9SRVNFVCkgIT0gMCkKIAkJCQlnb3RvIGVycm9yOwogCQkJZWhjaV93cml0ZWwoZWhjaSwgdGVtcCB8IFBPUlRfU1VTUEVORCwgc3RhdHVzX3JlZyk7CisJCQkvKiBBZnRlciBhYm92ZSBjaGVjayB0aGUgcG9ydCBtdXN0IGJlIGNvbm5lY3RlZC4KKwkJCSAqIFNldCBhcHByb3ByaWF0ZSBiaXQgdGh1cyBjb3VsZCBwdXQgcGh5IGludG8gbG93IHBvd2VyCisJCQkgKiBtb2RlIGlmIHdlIGhhdmUgaG9zdHBjIGZlYXR1cmUKKwkJCSAqLworCQkJaWYgKGhvc3RwY19yZWcpIHsKKwkJCQl0ZW1wICY9IH5QT1JUX1dLQ09OTl9FOworCQkJCXRlbXAgfD0gKFBPUlRfV0tESVNDX0UgfCBQT1JUX1dLT0NfRSk7CisJCQkJZWhjaV93cml0ZWwoZWhjaSwgdGVtcCB8IFBPUlRfU1VTUEVORCwKKwkJCQkJCQlzdGF0dXNfcmVnKTsKKwkJCQltc2xlZXAoNSk7LyogNW1zIGZvciBIQ0QgZW50ZXIgbG93IHB3ciBtb2RlICovCisJCQkJdGVtcDEgPSBlaGNpX3JlYWRsKGVoY2ksIGhvc3RwY19yZWcpOworCQkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAxIHwgSE9TVFBDX1BIQ0QsCisJCQkJCWhvc3RwY19yZWcpOworCQkJCXRlbXAxID0gZWhjaV9yZWFkbChlaGNpLCBob3N0cGNfcmVnKTsKKwkJCQllaGNpX2RiZyhlaGNpLCAiUG9ydCVkIHBoeSBsb3cgcHdyIG1vZGUgJXNcbiIsCisJCQkJCXdJbmRleCwgKHRlbXAxICYgSE9TVFBDX1BIQ0QpID8KKwkJCQkJInN1Y2NlZWRlZCIgOiAiZmFpbGVkIik7CisJCQl9CiAJCQlzZXRfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgpAQCAtODk0LDYgKzk2Nyw3IEBACiAJCS8qICJzdGFsbCIgb24gZXJyb3IgKi8KIAkJcmV0dmFsID0gLUVQSVBFOwogCX0KK2Vycm9yX2V4aXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jCmluZGV4IDEwZDUyOTEuLmFlZGE5NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMKQEAgLTc1LDcgKzc1LDggQEAKIAl9CiAJaWYgKHFoLT5kdW1teSkKIAkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgcWgtPmR1bW15KTsKLQlkbWFfcG9vbF9mcmVlIChlaGNpLT5xaF9wb29sLCBxaCwgcWgtPnFoX2RtYSk7CisJZG1hX3Bvb2xfZnJlZShlaGNpLT5xaF9wb29sLCBxaC0+aHcsIHFoLT5xaF9kbWEpOworCWtmcmVlKHFoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBlaGNpX3FoICplaGNpX3FoX2FsbG9jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGdmcF90IGZsYWdzKQpAQCAtODMsMTIgKzg0LDE0IEBACiAJc3RydWN0IGVoY2lfcWgJCSpxaDsKIAlkbWFfYWRkcl90CQlkbWE7CiAKLQlxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKQotCQlkbWFfcG9vbF9hbGxvYyAoZWhjaS0+cWhfcG9vbCwgZmxhZ3MsICZkbWEpOworCXFoID0ga3phbGxvYyhzaXplb2YgKnFoLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXFoKQotCQlyZXR1cm4gcWg7Ci0KLQltZW1zZXQgKHFoLCAwLCBzaXplb2YgKnFoKTsKKwkJZ290byBkb25lOworCXFoLT5odyA9IChzdHJ1Y3QgZWhjaV9xaF9odyAqKQorCQlkbWFfcG9vbF9hbGxvYyhlaGNpLT5xaF9wb29sLCBmbGFncywgJmRtYSk7CisJaWYgKCFxaC0+aHcpCisJCWdvdG8gZmFpbDsKKwltZW1zZXQocWgtPmh3LCAwLCBzaXplb2YgKnFoLT5odyk7CiAJcWgtPnJlZmNvdW50ID0gMTsKIAlxaC0+ZWhjaSA9IGVoY2k7CiAJcWgtPnFoX2RtYSA9IGRtYTsKQEAgLTk5LDEwICsxMDIsMTUgQEAKIAlxaC0+ZHVtbXkgPSBlaGNpX3F0ZF9hbGxvYyAoZWhjaSwgZmxhZ3MpOwogCWlmIChxaC0+ZHVtbXkgPT0gTlVMTCkgewogCQllaGNpX2RiZyAoZWhjaSwgIm5vIGR1bW15IHRkXG4iKTsKLQkJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cWhfcG9vbCwgcWgsIHFoLT5xaF9kbWEpOwotCQlxaCA9IE5VTEw7CisJCWdvdG8gZmFpbDE7CiAJfQorZG9uZToKIAlyZXR1cm4gcWg7CitmYWlsMToKKwlkbWFfcG9vbF9mcmVlKGVoY2ktPnFoX3Bvb2wsIHFoLT5odywgcWgtPnFoX2RtYSk7CitmYWlsOgorCWtmcmVlKHFoKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyogdG8gc2hhcmUgYSBxaCAoY3B1IHRocmVhZHMsIG9yIGhjKSAqLwpAQCAtMTgwLDcgKzE4OCw3IEBACiAJLyogUUhzIGZvciBjb250cm9sL2J1bGsvaW50ciB0cmFuc2ZlcnMgKi8KIAllaGNpLT5xaF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9xaCIsCiAJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyLAotCQkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9xaCksCisJCQlzaXplb2Yoc3RydWN0IGVoY2lfcWhfaHcpLAogCQkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKGZvciBodyBwYXJ0cykgKi8sCiAJCQk0MDk2IC8qIGNhbid0IGNyb3NzIDRLICovKTsKIAlpZiAoIWVoY2ktPnFoX3Bvb2wpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCBjMmYxYjdkLi4zNzg4NjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC0yNywyOCArMjcsOCBAQAogLyogY2FsbGVkIGFmdGVyIHBvd2VydXAsIGJ5IHByb2JlIG9yIHN5c3RlbS1wbSAid2FrZXVwIiAqLwogc3RhdGljIGludCBlaGNpX3BjaV9yZWluaXQoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl1MzIJCQl0ZW1wOwogCWludAkJCXJldHZhbDsKIAotCS8qIG9wdGlvbmFsIGRlYnVnIHBvcnQsIG5vcm1hbGx5IGluIHRoZSBmaXJzdCBCQVIgKi8KLQl0ZW1wID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCAweDBhKTsKLQlpZiAodGVtcCkgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgdGVtcCwgJnRlbXApOwotCQl0ZW1wID4+PSAxNjsKLQkJaWYgKCh0ZW1wICYgKDMgPDwgMTMpKSA9PSAoMSA8PCAxMykpIHsKLQkJCXRlbXAgJj0gMHgxZmZmOwotCQkJZWhjaS0+ZGVidWcgPSBlaGNpX3RvX2hjZChlaGNpKS0+cmVncyArIHRlbXA7Ci0JCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+ZGVidWctPmNvbnRyb2wpOwotCQkJZWhjaV9pbmZvKGVoY2ksICJkZWJ1ZyBwb3J0ICVkJXNcbiIsCi0JCQkJSENTX0RFQlVHX1BPUlQoZWhjaS0+aGNzX3BhcmFtcyksCi0JCQkJKHRlbXAgJiBEQkdQX0VOQUJMRUQpCi0JCQkJCT8gIiBJTiBVU0UiCi0JCQkJCTogIiIpOwotCQkJaWYgKCEodGVtcCAmIERCR1BfRU5BQkxFRCkpCi0JCQkJZWhjaS0+ZGVidWcgPSBOVUxMOwotCQl9Ci0JfQotCiAJLyogd2UgZXhwZWN0IHN0YXRpYyBxdWlyayBjb2RlIHRvIGhhbmRsZSB0aGUgImV4dGVuZGVkIGNhcGFiaWxpdGllcyIKIAkgKiAoY3VycmVudGx5IGp1c3QgQklPUyBoYW5kb2ZmKSBhbGxvd2VkIHN0YXJ0aW5nIHdpdGggRUhDSSAwLjk2CiAJICovCkBAIC0xMjksNiArMTA5LDkgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAogCXN3aXRjaCAocGRldi0+dmVuZG9yKSB7CisJY2FzZSBQQ0lfVkVORE9SX0lEX0lOVEVMOgorCQllaGNpLT5uZWVkX2lvX3dhdGNoZG9nID0gMDsKKwkJYnJlYWs7CiAJY2FzZSBQQ0lfVkVORE9SX0lEX1RESToKIAkJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RESV9FSENJKSB7CiAJCQloY2QtPmhhc190dCA9IDE7CkBAIC0xOTIsNiArMTc1LDI1IEBACiAJCWJyZWFrOwogCX0KIAorCS8qIG9wdGlvbmFsIGRlYnVnIHBvcnQsIG5vcm1hbGx5IGluIHRoZSBmaXJzdCBCQVIgKi8KKwl0ZW1wID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCAweDBhKTsKKwlpZiAodGVtcCkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgdGVtcCwgJnRlbXApOworCQl0ZW1wID4+PSAxNjsKKwkJaWYgKCh0ZW1wICYgKDMgPDwgMTMpKSA9PSAoMSA8PCAxMykpIHsKKwkJCXRlbXAgJj0gMHgxZmZmOworCQkJZWhjaS0+ZGVidWcgPSBlaGNpX3RvX2hjZChlaGNpKS0+cmVncyArIHRlbXA7CisJCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+ZGVidWctPmNvbnRyb2wpOworCQkJZWhjaV9pbmZvKGVoY2ksICJkZWJ1ZyBwb3J0ICVkJXNcbiIsCisJCQkJSENTX0RFQlVHX1BPUlQoZWhjaS0+aGNzX3BhcmFtcyksCisJCQkJKHRlbXAgJiBEQkdQX0VOQUJMRUQpCisJCQkJCT8gIiBJTiBVU0UiCisJCQkJCTogIiIpOworCQkJaWYgKCEodGVtcCAmIERCR1BfRU5BQkxFRCkpCisJCQkJZWhjaS0+ZGVidWcgPSBOVUxMOworCQl9CisJfQorCiAJZWhjaV9yZXNldChlaGNpKTsKIAogCS8qIGF0IGxlYXN0IHRoZSBHZW5lc3lzIEdMODgwUyBuZWVkcyBmaXh1cCBoZXJlICovCkBAIC0yNDIsNyArMjQ0LDcgQEAKIAkgKiBTeXN0ZW0gc3VzcGVuZCBjdXJyZW50bHkgZXhwZWN0cyB0byBiZSBhYmxlIHRvIHN1c3BlbmQgdGhlIGVudGlyZQogCSAqIGRldmljZSB0cmVlLCBkZXZpY2UtYXQtYS10aW1lLiAgSWYgd2UgZmFpbGVkIHNlbGVjdGl2ZSBzdXNwZW5kCiAJICogcmVwb3J0cywgc3lzdGVtIHN1c3BlbmQgd291bGQgZmFpbDsgc28gdGhlIHJvb3QgaHViIGNvZGUgbXVzdCBjbGFpbQotCSAqIHN1Y2Nlc3MuICBUaGF0J3MgbHlpbmcgdG8gdXNiY29yZSwgYW5kIGl0IG1hdHRlcnMgZm9yIGZvciBydW50aW1lCisJICogc3VjY2Vzcy4gIFRoYXQncyBseWluZyB0byB1c2Jjb3JlLCBhbmQgaXQgbWF0dGVycyBmb3IgcnVudGltZQogCSAqIFBNIHNjZW5hcmlvcyB3aXRoIHNlbGVjdGl2ZSBzdXNwZW5kIGFuZCByZW1vdGUgd2FrZXVwLi4uCiAJICovCiAJaWYgKGVoY2ktPm5vX3NlbGVjdGl2ZV9zdXNwZW5kICYmIGRldmljZV9jYW5fd2FrZXVwKCZwZGV2LT5kZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKaW5kZXggNzY3MzU1NC4uMDBhZDljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC04NywzMSArODcsMzMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWhfdXBkYXRlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCwgc3RydWN0IGVoY2lfcXRkICpxdGQpCiB7CisJc3RydWN0IGVoY2lfcWhfaHcgKmh3ID0gcWgtPmh3OworCiAJLyogd3JpdGVzIHRvIGFuIGFjdGl2ZSBvdmVybGF5IGFyZSB1bnNhZmUgKi8KIAlCVUdfT04ocWgtPnFoX3N0YXRlICE9IFFIX1NUQVRFX0lETEUpOwogCi0JcWgtPmh3X3F0ZF9uZXh0ID0gUVREX05FWFQoZWhjaSwgcXRkLT5xdGRfZG1hKTsKLQlxaC0+aHdfYWx0X25leHQgPSBFSENJX0xJU1RfRU5EKGVoY2kpOworCWh3LT5od19xdGRfbmV4dCA9IFFURF9ORVhUKGVoY2ksIHF0ZC0+cXRkX2RtYSk7CisJaHctPmh3X2FsdF9uZXh0ID0gRUhDSV9MSVNUX0VORChlaGNpKTsKIAogCS8qIEV4Y2VwdCBmb3IgY29udHJvbCBlbmRwb2ludHMsIHdlIG1ha2UgaGFyZHdhcmUgbWFpbnRhaW4gZGF0YQogCSAqIHRvZ2dsZSAobGlrZSBPSENJKSAuLi4gaGVyZSAocmUpaW5pdGlhbGl6ZSB0aGUgdG9nZ2xlIGluIHRoZSBRSCwKIAkgKiBhbmQgc2V0IHRoZSBwc2V1ZG8tdG9nZ2xlIGluIHVkZXYuIE9ubHkgdXNiX2NsZWFyX2hhbHQoKSB3aWxsCiAJICogZXZlciBjbGVhciBpdC4KIAkgKi8KLQlpZiAoIShxaC0+aHdfaW5mbzEgJiBjcHVfdG9faGMzMihlaGNpLCAxIDw8IDE0KSkpIHsKKwlpZiAoIShody0+aHdfaW5mbzEgJiBjcHVfdG9faGMzMihlaGNpLCAxIDw8IDE0KSkpIHsKIAkJdW5zaWduZWQJaXNfb3V0LCBlcG51bTsKIAogCQlpc19vdXQgPSAhKHF0ZC0+aHdfdG9rZW4gJiBjcHVfdG9faGMzMihlaGNpLCAxIDw8IDgpKTsKLQkJZXBudW0gPSAoaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfaW5mbzEpID4+IDgpICYgMHgwZjsKKwkJZXBudW0gPSAoaGMzMl90b19jcHVwKGVoY2ksICZody0+aHdfaW5mbzEpID4+IDgpICYgMHgwZjsKIAkJaWYgKHVubGlrZWx5ICghdXNiX2dldHRvZ2dsZSAocWgtPmRldiwgZXBudW0sIGlzX291dCkpKSB7Ci0JCQlxaC0+aHdfdG9rZW4gJj0gfmNwdV90b19oYzMyKGVoY2ksIFFURF9UT0dHTEUpOworCQkJaHctPmh3X3Rva2VuICY9IH5jcHVfdG9faGMzMihlaGNpLCBRVERfVE9HR0xFKTsKIAkJCXVzYl9zZXR0b2dnbGUgKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQsIDEpOwogCQl9CiAJfQogCiAJLyogSEMgbXVzdCBzZWUgbGF0ZXN0IHF0ZCBhbmQgcWggZGF0YSBiZWZvcmUgd2UgY2xlYXIgQUNUSVZFK0hBTFQgKi8KIAl3bWIgKCk7Ci0JcWgtPmh3X3Rva2VuICY9IGNwdV90b19oYzMyKGVoY2ksIFFURF9UT0dHTEUgfCBRVERfU1RTX1BJTkcpOworCWh3LT5od190b2tlbiAmPSBjcHVfdG9faGMzMihlaGNpLCBRVERfVE9HR0xFIHwgUVREX1NUU19QSU5HKTsKIH0KIAogLyogaWYgaXQgd2VyZW4ndCBmb3IgYSBjb21tb24gc2lsaWNvbiBxdWlyayAod3JpdGluZyB0aGUgZHVtbXkgaW50byB0aGUgcWgKQEAgLTEyOSw3ICsxMzEsNyBAQAogCQlxdGQgPSBsaXN0X2VudHJ5IChxaC0+cXRkX2xpc3QubmV4dCwKIAkJCQlzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKIAkJLyogZmlyc3QgcXRkIG1heSBhbHJlYWR5IGJlIHBhcnRpYWxseSBwcm9jZXNzZWQgKi8KLQkJaWYgKGNwdV90b19oYzMyKGVoY2ksIHF0ZC0+cXRkX2RtYSkgPT0gcWgtPmh3X2N1cnJlbnQpCisJCWlmIChjcHVfdG9faGMzMihlaGNpLCBxdGQtPnF0ZF9kbWEpID09IHFoLT5ody0+aHdfY3VycmVudCkKIAkJCXF0ZCA9IE5VTEw7CiAJfQogCkBAIC0yNjAsNyArMjYyLDcgQEAKIAkJc3RydWN0IGVoY2lfcWgJKnFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OwogCiAJCS8qIFMtbWFzayBpbiBhIFFIIG1lYW5zIGl0J3MgYW4gaW50ZXJydXB0IHVyYiAqLwotCQlpZiAoKHFoLT5od19pbmZvMiAmIGNwdV90b19oYzMyKGVoY2ksIFFIX1NNQVNLKSkgIT0gMCkgeworCQlpZiAoKHFoLT5ody0+aHdfaW5mbzIgJiBjcHVfdG9faGMzMihlaGNpLCBRSF9TTUFTSykpICE9IDApIHsKIAogCQkJLyogLi4uIHVwZGF0ZSBoYy13aWRlIHBlcmlvZGljIHN0YXRzIChmb3IgdXNiZnMpICovCiAJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMtLTsKQEAgLTI5Nyw3ICsyOTksNiBAQAogc3RhdGljIHZvaWQgc3RhcnRfdW5saW5rX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CiBzdGF0aWMgdm9pZCB1bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKTsKIAotc3RhdGljIHZvaWQgaW50cl9kZXNjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CiBzdGF0aWMgaW50IHFoX3NjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CiAKIC8qCkBAIC0zMDgsMTMgKzMwOSwxNCBAQAogc3RhdGljIHVuc2lnbmVkCiBxaF9jb21wbGV0aW9ucyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCiB7Ci0Jc3RydWN0IGVoY2lfcXRkCQkqbGFzdCA9IE5VTEwsICplbmQgPSBxaC0+ZHVtbXk7CisJc3RydWN0IGVoY2lfcXRkCQkqbGFzdCwgKmVuZCA9IHFoLT5kdW1teTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeSwgKnRtcDsKLQlpbnQJCQlsYXN0X3N0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlpbnQJCQlsYXN0X3N0YXR1czsKIAlpbnQJCQlzdG9wcGVkOwogCXVuc2lnbmVkCQljb3VudCA9IDA7CiAJdTgJCQlzdGF0ZTsKLQlfX2xlMzIJCQloYWx0ID0gSEFMVF9CSVQoZWhjaSk7CisJY29uc3QgX19sZTMyCQloYWx0ID0gSEFMVF9CSVQoZWhjaSk7CisJc3RydWN0IGVoY2lfcWhfaHcJKmh3ID0gcWgtPmh3OwogCiAJaWYgKHVubGlrZWx5IChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSkpCiAJCXJldHVybiBjb3VudDsKQEAgLTMyNCwxMSArMzI2LDIwIEBACiAJICogdGhleSBhZGQgdXJicyB0byB0aGlzIHFoJ3MgcXVldWUgb3IgbWFyayB0aGVtIGZvciB1bmxpbmtpbmcuCiAJICoKIAkgKiBOT1RFOiAgdW5saW5raW5nIGV4cGVjdHMgdG8gYmUgZG9uZSBpbiBxdWV1ZSBvcmRlci4KKwkgKgorCSAqIEl0J3MgYSBidWcgZm9yIHFoLT5xaF9zdGF0ZSB0byBiZSBhbnl0aGluZyBvdGhlciB0aGFuCisJICogUUhfU1RBVEVfSURMRSwgdW5sZXNzIG91ciBjYWxsZXIgaXMgc2Nhbl9hc3luYygpIG9yCisJICogc2Nhbl9wZXJpb2RpYygpLgogCSAqLwogCXN0YXRlID0gcWgtPnFoX3N0YXRlOwogCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0NPTVBMRVRJTkc7CiAJc3RvcHBlZCA9IChzdGF0ZSA9PSBRSF9TVEFURV9JRExFKTsKIAorIHJlc2NhbjoKKwlsYXN0ID0gTlVMTDsKKwlsYXN0X3N0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlxaC0+bmVlZHNfcmVzY2FuID0gMDsKKwogCS8qIHJlbW92ZSBkZS1hY3RpdmF0ZWQgUVREcyBmcm9tIGZyb250IG9mIHF1ZXVlLgogCSAqIGFmdGVyIGZhdWx0cyAoaW5jbHVkaW5nIHNob3J0IHJlYWRzKSwgY2xlYW51cCB0aGlzIHVyYgogCSAqIHRoZW4gbGV0IHRoZSBxdWV1ZSBhZHZhbmNlLgpAQCAtMzkyLDcgKzQwMyw4IEBACiAJCQkJCXF0ZC0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLAogCQkJCQkJCXRva2VuKTsKIAkJCQkJd21iKCk7Ci0JCQkJCXFoLT5od190b2tlbiA9IGNwdV90b19oYzMyKGVoY2ksIHRva2VuKTsKKwkJCQkJaHctPmh3X3Rva2VuID0gY3B1X3RvX2hjMzIoZWhjaSwKKwkJCQkJCQl0b2tlbik7CiAJCQkJCWdvdG8gcmV0cnlfeGFjdGVycjsKIAkJCQl9CiAJCQkJc3RvcHBlZCA9IDE7CkBAIC00MzUsOCArNDQ3LDggQEAKIAkJCS8qIHFoIHVubGlua2VkOyB0b2tlbiBpbiBvdmVybGF5IG1heSBiZSBtb3N0IGN1cnJlbnQgKi8KIAkJCWlmIChzdGF0ZSA9PSBRSF9TVEFURV9JRExFCiAJCQkJCSYmIGNwdV90b19oYzMyKGVoY2ksIHF0ZC0+cXRkX2RtYSkKLQkJCQkJCT09IHFoLT5od19jdXJyZW50KSB7Ci0JCQkJdG9rZW4gPSBoYzMyX3RvX2NwdShlaGNpLCBxaC0+aHdfdG9rZW4pOworCQkJCQkJPT0gaHctPmh3X2N1cnJlbnQpIHsKKwkJCQl0b2tlbiA9IGhjMzJfdG9fY3B1KGVoY2ksIGh3LT5od190b2tlbik7CiAKIAkJCQkvKiBBbiB1bmxpbmsgbWF5IGxlYXZlIGFuIGluY29tcGxldGUKIAkJCQkgKiBhc3luYyB0cmFuc2FjdGlvbiBpbiB0aGUgVFQgYnVmZmVyLgpAQCAtNDQ5LDkgKzQ2MSw5IEBACiAJCQkgKiBwYXRjaCB0aGUgcWggbGF0ZXIgYW5kIHNvIHRoYXQgY29tcGxldGlvbnMgY2FuJ3QKIAkJCSAqIGFjdGl2YXRlIGl0IHdoaWxlIHdlICJrbm93IiBpdCdzIHN0b3BwZWQuCiAJCQkgKi8KLQkJCWlmICgoaGFsdCAmIHFoLT5od190b2tlbikgPT0gMCkgeworCQkJaWYgKChoYWx0ICYgaHctPmh3X3Rva2VuKSA9PSAwKSB7CiBoYWx0OgotCQkJCXFoLT5od190b2tlbiB8PSBoYWx0OworCQkJCWh3LT5od190b2tlbiB8PSBoYWx0OwogCQkJCXdtYiAoKTsKIAkJCX0KIAkJfQpAQCAtNTAzLDYgKzUxNSwyMSBAQAogCQllaGNpX3F0ZF9mcmVlIChlaGNpLCBsYXN0KTsKIAl9CiAKKwkvKiBEbyB3ZSBuZWVkIHRvIHJlc2NhbiBmb3IgVVJCcyBkZXF1ZXVlZCBkdXJpbmcgYSBnaXZlYmFjaz8gKi8KKwlpZiAodW5saWtlbHkocWgtPm5lZWRzX3Jlc2NhbikpIHsKKwkJLyogSWYgdGhlIFFIIGlzIGFscmVhZHkgdW5saW5rZWQsIGRvIHRoZSByZXNjYW4gbm93LiAqLworCQlpZiAoc3RhdGUgPT0gUUhfU1RBVEVfSURMRSkKKwkJCWdvdG8gcmVzY2FuOworCisJCS8qIE90aGVyd2lzZSB3ZSBoYXZlIHRvIHdhaXQgdW50aWwgdGhlIFFIIGlzIGZ1bGx5IHVubGlua2VkLgorCQkgKiBPdXIgY2FsbGVyIHdpbGwgc3RhcnQgYW4gdW5saW5rIGlmIHFoLT5uZWVkc19yZXNjYW4gaXMKKwkJICogc2V0LiAgQnV0IGlmIGFuIHVubGluayBoYXMgYWxyZWFkeSBzdGFydGVkLCBub3RoaW5nIG5lZWRzCisJCSAqIHRvIGJlIGRvbmUuCisJCSAqLworCQlpZiAoc3RhdGUgIT0gUUhfU1RBVEVfTElOS0VEKQorCQkJcWgtPm5lZWRzX3Jlc2NhbiA9IDA7CisJfQorCiAJLyogcmVzdG9yZSBvcmlnaW5hbCBzdGF0ZTsgY2FsbGVyIG11c3QgdW5saW5rIG9yIHJlbGluayAqLwogCXFoLT5xaF9zdGF0ZSA9IHN0YXRlOwogCkBAIC01MTAsNyArNTM3LDcgQEAKIAkgKiBpdCBhZnRlciBmYXVsdCBjbGVhbnVwLCBvciByZWNvdmVyaW5nIGZyb20gc2lsaWNvbiB3cm9uZ2x5CiAJICogb3ZlcmxheWluZyB0aGUgZHVtbXkgcXRkICh3aGljaCByZWR1Y2VzIERNQSBjaGF0dGVyKS4KIAkgKi8KLQlpZiAoc3RvcHBlZCAhPSAwIHx8IHFoLT5od19xdGRfbmV4dCA9PSBFSENJX0xJU1RfRU5EKGVoY2kpKSB7CisJaWYgKHN0b3BwZWQgIT0gMCB8fCBody0+aHdfcXRkX25leHQgPT0gRUhDSV9MSVNUX0VORChlaGNpKSkgewogCQlzd2l0Y2ggKHN0YXRlKSB7CiAJCWNhc2UgUUhfU1RBVEVfSURMRToKIAkJCXFoX3JlZnJlc2goZWhjaSwgcWgpOwpAQCAtNTI3LDEyICs1NTQsOSBAQAogCQkJICogVGhhdCBzaG91bGQgYmUgcmFyZSBmb3IgaW50ZXJydXB0IHRyYW5zZmVycywKIAkJCSAqIGV4Y2VwdCBtYXliZSBoaWdoIGJhbmR3aWR0aCAuLi4KIAkJCSAqLwotCQkJaWYgKChjcHVfdG9faGMzMihlaGNpLCBRSF9TTUFTSykKLQkJCQkJJiBxaC0+aHdfaW5mbzIpICE9IDApIHsKLQkJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHFoKTsKLQkJCQkodm9pZCkgcWhfc2NoZWR1bGUgKGVoY2ksIHFoKTsKLQkJCX0gZWxzZQotCQkJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCisJCQkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gc3RhcnQgYW4gdW5saW5rICovCisJCQlxaC0+bmVlZHNfcmVzY2FuID0gMTsKIAkJCWJyZWFrOwogCQkvKiBvdGhlcndpc2UsIHVubGluayBhbHJlYWR5IHN0YXJ0ZWQgKi8KIAkJfQpAQCAtNjQ5LDcgKzY3Myw3IEBACiAJCSAqICh0aGlzIHdpbGwgdXN1YWxseSBiZSBvdmVycmlkZGVuIGxhdGVyLikKIAkJICovCiAJCWlmIChpc19pbnB1dCkKLQkJCXF0ZC0+aHdfYWx0X25leHQgPSBlaGNpLT5hc3luYy0+aHdfYWx0X25leHQ7CisJCQlxdGQtPmh3X2FsdF9uZXh0ID0gZWhjaS0+YXN5bmMtPmh3LT5od19hbHRfbmV4dDsKIAogCQkvKiBxaCBtYWtlcyBjb250cm9sIHBhY2tldHMgdXNlIHF0ZCB0b2dnbGU7IG1heWJlIHN3aXRjaCBpdCAqLwogCQlpZiAoKG1heHBhY2tldCAmICh0aGlzX3F0ZF9sZW4gKyAobWF4cGFja2V0IC0gMSkpKSA9PSAwKQpAQCAtNzQ0LDYgKzc2OCw3IEBACiAJaW50CQkJaXNfaW5wdXQsIHR5cGU7CiAJaW50CQkJbWF4cCA9IDA7CiAJc3RydWN0IHVzYl90dAkJKnR0ID0gdXJiLT5kZXYtPnR0OworCXN0cnVjdCBlaGNpX3FoX2h3CSpodzsKIAogCWlmICghcWgpCiAJCXJldHVybiBxaDsKQEAgLTg5MCw4ICs5MTUsOSBAQAogCiAJLyogaW5pdCBhcyBsaXZlLCB0b2dnbGUgY2xlYXIsIGFkdmFuY2UgdG8gZHVtbXkgKi8KIAlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOwotCXFoLT5od19pbmZvMSA9IGNwdV90b19oYzMyKGVoY2ksIGluZm8xKTsKLQlxaC0+aHdfaW5mbzIgPSBjcHVfdG9faGMzMihlaGNpLCBpbmZvMik7CisJaHcgPSBxaC0+aHc7CisJaHctPmh3X2luZm8xID0gY3B1X3RvX2hjMzIoZWhjaSwgaW5mbzEpOworCWh3LT5od19pbmZvMiA9IGNwdV90b19oYzMyKGVoY2ksIGluZm8yKTsKIAl1c2Jfc2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgIWlzX2lucHV0LCAxKTsKIAlxaF9yZWZyZXNoIChlaGNpLCBxaCk7CiAJcmV0dXJuIHFoOwpAQCAtOTEwLDYgKzkzNiw4IEBACiAJaWYgKHVubGlrZWx5KHFoLT5jbGVhcmluZ190dCkpCiAJCXJldHVybjsKIAorCVdBUk5fT04ocWgtPnFoX3N0YXRlICE9IFFIX1NUQVRFX0lETEUpOworCiAJLyogKHJlKXN0YXJ0IHRoZSBhc3luYyBzY2hlZHVsZT8gKi8KIAloZWFkID0gZWhjaS0+YXN5bmM7CiAJdGltZXJfYWN0aW9uX2RvbmUgKGVoY2ksIFRJTUVSX0FTWU5DX09GRik7CkBAIC05MjgsMTYgKzk1NiwxNSBAQAogCX0KIAogCS8qIGNsZWFyIGhhbHQgYW5kL29yIHRvZ2dsZTsgYW5kIG1heWJlIHJlY292ZXIgZnJvbSBzaWxpY29uIHF1aXJrICovCi0JaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9JRExFKQotCQlxaF9yZWZyZXNoIChlaGNpLCBxaCk7CisJcWhfcmVmcmVzaChlaGNpLCBxaCk7CiAKIAkvKiBzcGxpY2UgcmlnaHQgYWZ0ZXIgc3RhcnQgKi8KIAlxaC0+cWhfbmV4dCA9IGhlYWQtPnFoX25leHQ7Ci0JcWgtPmh3X25leHQgPSBoZWFkLT5od19uZXh0OworCXFoLT5ody0+aHdfbmV4dCA9IGhlYWQtPmh3LT5od19uZXh0OwogCXdtYiAoKTsKIAogCWhlYWQtPnFoX25leHQucWggPSBxaDsKLQloZWFkLT5od19uZXh0ID0gZG1hOworCWhlYWQtPmh3LT5od19uZXh0ID0gZG1hOwogCiAJcWhfZ2V0KHFoKTsKIAlxaC0+eGFjdGVycnMgPSAwOwpAQCAtOTg0LDcgKzEwMTEsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2JfcmVzZXRfZGV2aWNlKCkgYnJpZWZseSByZXZlcnRzIHRvIGFkZHJlc3MgMCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzYl9waXBlZGV2aWNlICh1cmItPnBpcGUpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFoLT5od19pbmZvMSAmPSB+cWhfYWRkcl9tYXNrOworCQkJCXFoLT5ody0+aHdfaW5mbzEgJj0gfnFoX2FkZHJfbWFzazsKIAkJfQogCiAJCS8qIGp1c3Qgb25lIHdheSB0byBxdWV1ZSByZXF1ZXN0czogc3dhcCB3aXRoIHRoZSBkdW1teSBxdGQuCkBAIC0xMTY5LDcgKzExOTYsNyBAQAogCXdoaWxlIChwcmV2LT5xaF9uZXh0LnFoICE9IHFoKQogCQlwcmV2ID0gcHJldi0+cWhfbmV4dC5xaDsKIAotCXByZXYtPmh3X25leHQgPSBxaC0+aHdfbmV4dDsKKwlwcmV2LT5ody0+aHdfbmV4dCA9IHFoLT5ody0+aHdfbmV4dDsKIAlwcmV2LT5xaF9uZXh0ID0gcWgtPnFoX25leHQ7CiAJd21iICgpOwogCkBAIC0xMjE0LDYgKzEyNDEsOCBAQAogCQkJCXFoID0gcWhfZ2V0IChxaCk7CiAJCQkJcWgtPnN0YW1wID0gZWhjaS0+c3RhbXA7CiAJCQkJdGVtcCA9IHFoX2NvbXBsZXRpb25zIChlaGNpLCBxaCk7CisJCQkJaWYgKHFoLT5uZWVkc19yZXNjYW4pCisJCQkJCXVubGlua19hc3luYyhlaGNpLCBxaCk7CiAJCQkJcWhfcHV0IChxaCk7CiAJCQkJaWYgKHRlbXAgIT0gMCkgewogCQkJCQlnb3RvIHJlc2NhbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggZWRkNjFlZS4uM2VhMDU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTYwLDYgKzYwLDIwIEBACiAJfQogfQogCitzdGF0aWMgX19oYzMyICoKK3NoYWRvd19uZXh0X3BlcmlvZGljKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgdW5pb24gZWhjaV9zaGFkb3cgKnBlcmlvZGljLAorCQlfX2hjMzIgdGFnKQoreworCXN3aXRjaCAoaGMzMl90b19jcHUoZWhjaSwgdGFnKSkgeworCS8qIG91ciBlaGNpX3NoYWRvdy5xaCBpcyBhY3R1YWxseSBzb2Z0d2FyZSBwYXJ0ICovCisJY2FzZSBRX1RZUEVfUUg6CisJCXJldHVybiAmcGVyaW9kaWMtPnFoLT5ody0+aHdfbmV4dDsKKwkvKiBvdGhlcnMgYXJlIGh3IHBhcnRzICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIHBlcmlvZGljLT5od19uZXh0OworCX0KK30KKwogLyogY2FsbGVyIG11c3QgaG9sZCBlaGNpLT5sb2NrICovCiBzdGF0aWMgdm9pZCBwZXJpb2RpY191bmxpbmsgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgdW5zaWduZWQgZnJhbWUsIHZvaWQgKnB0cikKIHsKQEAgLTcxLDcgKzg1LDggQEAKIAl3aGlsZSAoaGVyZS5wdHIgJiYgaGVyZS5wdHIgIT0gcHRyKSB7CiAJCXByZXZfcCA9IHBlcmlvZGljX25leHRfc2hhZG93KGVoY2ksIHByZXZfcCwKIAkJCQlRX05FWFRfVFlQRShlaGNpLCAqaHdfcCkpOwotCQlod19wID0gaGVyZS5od19uZXh0OworCQlod19wID0gc2hhZG93X25leHRfcGVyaW9kaWMoZWhjaSwgJmhlcmUsCisJCQkJUV9ORVhUX1RZUEUoZWhjaSwgKmh3X3ApKTsKIAkJaGVyZSA9ICpwcmV2X3A7CiAJfQogCS8qIGFuIGludGVycnVwdCBlbnRyeSAoYXQgbGlzdCBlbmQpIGNvdWxkIGhhdmUgYmVlbiBzaGFyZWQgKi8KQEAgLTgzLDcgKzk4LDcgQEAKIAkgKi8KIAkqcHJldl9wID0gKnBlcmlvZGljX25leHRfc2hhZG93KGVoY2ksICZoZXJlLAogCQkJUV9ORVhUX1RZUEUoZWhjaSwgKmh3X3ApKTsKLQkqaHdfcCA9ICpoZXJlLmh3X25leHQ7CisJKmh3X3AgPSAqc2hhZG93X25leHRfcGVyaW9kaWMoZWhjaSwgJmhlcmUsIFFfTkVYVF9UWVBFKGVoY2ksICpod19wKSk7CiB9CiAKIC8qIGhvdyBtYW55IG9mIHRoZSB1ZnJhbWUncyAxMjUgdXNlY3MgYXJlIGFsbG9jYXRlZD8gKi8KQEAgLTkzLDE4ICsxMDgsMjAgQEAKIAlfX2hjMzIJCQkqaHdfcCA9ICZlaGNpLT5wZXJpb2RpYyBbZnJhbWVdOwogCXVuaW9uIGVoY2lfc2hhZG93CSpxID0gJmVoY2ktPnBzaGFkb3cgW2ZyYW1lXTsKIAl1bnNpZ25lZAkJdXNlY3MgPSAwOworCXN0cnVjdCBlaGNpX3FoX2h3CSpodzsKIAogCXdoaWxlIChxLT5wdHIpIHsKIAkJc3dpdGNoIChoYzMyX3RvX2NwdShlaGNpLCBRX05FWFRfVFlQRShlaGNpLCAqaHdfcCkpKSB7CiAJCWNhc2UgUV9UWVBFX1FIOgorCQkJaHcgPSBxLT5xaC0+aHc7CiAJCQkvKiBpcyBpdCBpbiB0aGUgUy1tYXNrPyAqLwotCQkJaWYgKHEtPnFoLT5od19pbmZvMiAmIGNwdV90b19oYzMyKGVoY2ksIDEgPDwgdWZyYW1lKSkKKwkJCWlmIChody0+aHdfaW5mbzIgJiBjcHVfdG9faGMzMihlaGNpLCAxIDw8IHVmcmFtZSkpCiAJCQkJdXNlY3MgKz0gcS0+cWgtPnVzZWNzOwogCQkJLyogLi4uIG9yIEMtbWFzaz8gKi8KLQkJCWlmIChxLT5xaC0+aHdfaW5mbzIgJiBjcHVfdG9faGMzMihlaGNpLAorCQkJaWYgKGh3LT5od19pbmZvMiAmIGNwdV90b19oYzMyKGVoY2ksCiAJCQkJCTEgPDwgKDggKyB1ZnJhbWUpKSkKIAkJCQl1c2VjcyArPSBxLT5xaC0+Y191c2VjczsKLQkJCWh3X3AgPSAmcS0+cWgtPmh3X25leHQ7CisJCQlod19wID0gJmh3LT5od19uZXh0OwogCQkJcSA9ICZxLT5xaC0+cWhfbmV4dDsKIAkJCWJyZWFrOwogCQkvLyBjYXNlIFFfVFlQRV9GU1ROOgpAQCAtMjM3LDEwICsyNTQsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQljYXNlIFFfVFlQRV9RSDoKIAkJCWlmIChzYW1lX3R0KGRldiwgcS0+cWgtPmRldikpIHsKLQkJCQl1ZiA9IHR0X3N0YXJ0X3VmcmFtZShlaGNpLCBxLT5xaC0+aHdfaW5mbzIpOworCQkJCXVmID0gdHRfc3RhcnRfdWZyYW1lKGVoY2ksIHEtPnFoLT5ody0+aHdfaW5mbzIpOwogCQkJCXR0X3VzZWNzW3VmXSArPSBxLT5xaC0+dHRfdXNlY3M7CiAJCQl9Ci0JCQlod19wID0gJnEtPnFoLT5od19uZXh0OworCQkJaHdfcCA9ICZxLT5xaC0+aHctPmh3X25leHQ7CiAJCQlxID0gJnEtPnFoLT5xaF9uZXh0OwogCQkJY29udGludWU7CiAJCWNhc2UgUV9UWVBFX1NJVEQ6CkBAIC0zNzUsNiArMzkyLDcgQEAKIAlmb3IgKDsgZnJhbWUgPCBlaGNpLT5wZXJpb2RpY19zaXplOyBmcmFtZSArPSBwZXJpb2QpIHsKIAkJdW5pb24gZWhjaV9zaGFkb3cJaGVyZTsKIAkJX19oYzMyCQkJdHlwZTsKKwkJc3RydWN0IGVoY2lfcWhfaHcJKmh3OwogCiAJCWhlcmUgPSBlaGNpLT5wc2hhZG93IFtmcmFtZV07CiAJCXR5cGUgPSBRX05FWFRfVFlQRShlaGNpLCBlaGNpLT5wZXJpb2RpYyBbZnJhbWVdKTsKQEAgLTM4NSwxNyArNDAzLDE4IEBACiAJCQkJaGVyZSA9IGhlcmUuaXRkLT5pdGRfbmV4dDsKIAkJCQljb250aW51ZTsKIAkJCWNhc2UgUV9UWVBFX1FIOgorCQkJCWh3ID0gaGVyZS5xaC0+aHc7CiAJCQkJaWYgKHNhbWVfdHQgKGRldiwgaGVyZS5xaC0+ZGV2KSkgewogCQkJCQl1MzIJCW1hc2s7CiAKIAkJCQkJbWFzayA9IGhjMzJfdG9fY3B1KGVoY2ksCi0JCQkJCQkJaGVyZS5xaC0+aHdfaW5mbzIpOworCQkJCQkJCWh3LT5od19pbmZvMik7CiAJCQkJCS8qICJrbm93cyIgbm8gZ2FwIGlzIG5lZWRlZCAqLwogCQkJCQltYXNrIHw9IG1hc2sgPj4gODsKIAkJCQkJaWYgKG1hc2sgJiB1Zl9tYXNrKQogCQkJCQkJYnJlYWs7CiAJCQkJfQotCQkJCXR5cGUgPSBRX05FWFRfVFlQRShlaGNpLCBoZXJlLnFoLT5od19uZXh0KTsKKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUoZWhjaSwgaHctPmh3X25leHQpOwogCQkJCWhlcmUgPSBoZXJlLnFoLT5xaF9uZXh0OwogCQkJCWNvbnRpbnVlOwogCQkJY2FzZSBRX1RZUEVfU0lURDoKQEAgLTQ5OCw3ICs1MTcsOCBAQAogCiAJZGV2X2RiZyAoJnFoLT5kZXYtPmRldiwKIAkJImxpbmsgcWglZC0lMDR4LyVwIHN0YXJ0ICVkIFslZC8lZCB1c11cbiIsCi0JCXBlcmlvZCwgaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfaW5mbzIpICYgKFFIX0NNQVNLIHwgUUhfU01BU0spLAorCQlwZXJpb2QsIGhjMzJfdG9fY3B1cChlaGNpLCAmcWgtPmh3LT5od19pbmZvMikKKwkJCSYgKFFIX0NNQVNLIHwgUUhfU01BU0spLAogCQlxaCwgcWgtPnN0YXJ0LCBxaC0+dXNlY3MsIHFoLT5jX3VzZWNzKTsKIAogCS8qIGhpZ2ggYmFuZHdpZHRoLCBvciBvdGhlcndpc2UgZXZlcnkgbWljcm9mcmFtZSAqLwpAQCAtNTE3LDcgKzUzNyw3IEBACiAJCQlpZiAodHlwZSA9PSBjcHVfdG9faGMzMihlaGNpLCBRX1RZUEVfUUgpKQogCQkJCWJyZWFrOwogCQkJcHJldiA9IHBlcmlvZGljX25leHRfc2hhZG93KGVoY2ksIHByZXYsIHR5cGUpOwotCQkJaHdfcCA9ICZoZXJlLnFoLT5od19uZXh0OworCQkJaHdfcCA9IHNoYWRvd19uZXh0X3BlcmlvZGljKGVoY2ksICZoZXJlLCB0eXBlKTsKIAkJCWhlcmUgPSAqcHJldjsKIAkJfQogCkBAIC01MjgsMTQgKzU0OCwxNCBAQAogCQkJaWYgKHFoLT5wZXJpb2QgPiBoZXJlLnFoLT5wZXJpb2QpCiAJCQkJYnJlYWs7CiAJCQlwcmV2ID0gJmhlcmUucWgtPnFoX25leHQ7Ci0JCQlod19wID0gJmhlcmUucWgtPmh3X25leHQ7CisJCQlod19wID0gJmhlcmUucWgtPmh3LT5od19uZXh0OwogCQkJaGVyZSA9ICpwcmV2OwogCQl9CiAJCS8qIGxpbmsgaW4gdGhpcyBxaCwgdW5sZXNzIHNvbWUgZWFybGllciBwYXNzIGRpZCB0aGF0ICovCiAJCWlmIChxaCAhPSBoZXJlLnFoKSB7CiAJCQlxaC0+cWhfbmV4dCA9IGhlcmU7CiAJCQlpZiAoaGVyZS5xaCkKLQkJCQlxaC0+aHdfbmV4dCA9ICpod19wOworCQkJCXFoLT5ody0+aHdfbmV4dCA9ICpod19wOwogCQkJd21iICgpOwogCQkJcHJldi0+cWggPSBxaDsKIAkJCSpod19wID0gUUhfTkVYVCAoZWhjaSwgcWgtPnFoX2RtYSk7CkBAIC01ODEsNyArNjAxLDcgQEAKIAlkZXZfZGJnICgmcWgtPmRldi0+ZGV2LAogCQkidW5saW5rIHFoJWQtJTA0eC8lcCBzdGFydCAlZCBbJWQvJWQgdXNdXG4iLAogCQlxaC0+cGVyaW9kLAotCQloYzMyX3RvX2NwdXAoZWhjaSwgJnFoLT5od19pbmZvMikgJiAoUUhfQ01BU0sgfCBRSF9TTUFTSyksCisJCWhjMzJfdG9fY3B1cChlaGNpLCAmcWgtPmh3LT5od19pbmZvMikgJiAoUUhfQ01BU0sgfCBRSF9TTUFTSyksCiAJCXFoLCBxaC0+c3RhcnQsIHFoLT51c2VjcywgcWgtPmNfdXNlY3MpOwogCiAJLyogcWgtPnFoX25leHQgc3RpbGwgImxpdmUiIHRvIEhDICovCkBAIC01OTUsNyArNjE1LDE5IEBACiAKIHN0YXRpYyB2b2lkIGludHJfZGVzY2hlZHVsZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCiB7Ci0JdW5zaWduZWQJd2FpdDsKKwl1bnNpZ25lZAkJd2FpdDsKKwlzdHJ1Y3QgZWhjaV9xaF9odwkqaHcgPSBxaC0+aHc7CisJaW50CQkJcmM7CisKKwkvKiBJZiB0aGUgUUggaXNuJ3QgbGlua2VkIHRoZW4gdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbworCSAqIHVubGVzcyB3ZSB3ZXJlIGNhbGxlZCBkdXJpbmcgYSBnaXZlYmFjaywgaW4gd2hpY2ggY2FzZQorCSAqIHFoX2NvbXBsZXRpb25zKCkgaGFzIHRvIGRlYWwgd2l0aCBpdC4KKwkgKi8KKwlpZiAocWgtPnFoX3N0YXRlICE9IFFIX1NUQVRFX0xJTktFRCkgeworCQlpZiAocWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0NPTVBMRVRJTkcpCisJCQlxaC0+bmVlZHNfcmVzY2FuID0gMTsKKwkJcmV0dXJuOworCX0KIAogCXFoX3VubGlua19wZXJpb2RpYyAoZWhjaSwgcWgpOwogCkBAIC02MDYsMTUgKzYzOCwzMyBAQAogCSAqLwogCWlmIChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KQogCQkJfHwgKGNwdV90b19oYzMyKGVoY2ksIFFIX0NNQVNLKQotCQkJCQkmIHFoLT5od19pbmZvMikgIT0gMCkKKwkJCQkJJiBody0+aHdfaW5mbzIpICE9IDApCiAJCXdhaXQgPSAyOwogCWVsc2UKIAkJd2FpdCA9IDU1OwkvKiB3b3JzdCBjYXNlOiAzICogMTAyNCAqLwogCiAJdWRlbGF5ICh3YWl0KTsKIAlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOwotCXFoLT5od19uZXh0ID0gRUhDSV9MSVNUX0VORChlaGNpKTsKKwlody0+aHdfbmV4dCA9IEVIQ0lfTElTVF9FTkQoZWhjaSk7CiAJd21iICgpOworCisJcWhfY29tcGxldGlvbnMoZWhjaSwgcWgpOworCisJLyogcmVzY2hlZHVsZSBRSCBpZmYgYW5vdGhlciByZXF1ZXN0IGlzIHF1ZXVlZCAqLworCWlmICghbGlzdF9lbXB0eSgmcWgtPnF0ZF9saXN0KSAmJgorCQkJSENfSVNfUlVOTklORyhlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKSB7CisJCXJjID0gcWhfc2NoZWR1bGUoZWhjaSwgcWgpOworCisJCS8qIEFuIGVycm9yIGhlcmUgbGlrZWx5IGluZGljYXRlcyBoYW5kc2hha2UgZmFpbHVyZQorCQkgKiBvciBubyBzcGFjZSBsZWZ0IGluIHRoZSBzY2hlZHVsZS4gIE5laXRoZXIgZmF1bHQKKwkJICogc2hvdWxkIGhhcHBlbiBvZnRlbiAuLi4KKwkJICoKKwkJICogRklYTUUga2lsbCB0aGUgbm93LWR5c2Z1bmN0aW9uYWwgcXVldWVkIHVyYnMKKwkJICovCisJCWlmIChyYyAhPSAwKQorCQkJZWhjaV9lcnIoZWhjaSwgImNhbid0IHJlc2NoZWR1bGUgcWggJXAsIGVyciAlZFxuIiwKKwkJCQkJcWgsIHJjKTsKKwl9CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03MzksMTQgKzc4OSwxNSBAQAogCXVuc2lnbmVkCXVmcmFtZTsKIAlfX2hjMzIJCWNfbWFzazsKIAl1bnNpZ25lZAlmcmFtZTsJCS8qIDAuLihxaC0+cGVyaW9kIC0gMSksIG9yIE5PX0ZSQU1FICovCisJc3RydWN0IGVoY2lfcWhfaHcJKmh3ID0gcWgtPmh3OwogCiAJcWhfcmVmcmVzaChlaGNpLCBxaCk7Ci0JcWgtPmh3X25leHQgPSBFSENJX0xJU1RfRU5EKGVoY2kpOworCWh3LT5od19uZXh0ID0gRUhDSV9MSVNUX0VORChlaGNpKTsKIAlmcmFtZSA9IHFoLT5zdGFydDsKIAogCS8qIHJldXNlIHRoZSBwcmV2aW91cyBzY2hlZHVsZSBzbG90cywgaWYgd2UgY2FuICovCiAJaWYgKGZyYW1lIDwgcWgtPnBlcmlvZCkgewotCQl1ZnJhbWUgPSBmZnMoaGMzMl90b19jcHVwKGVoY2ksICZxaC0+aHdfaW5mbzIpICYgUUhfU01BU0spOworCQl1ZnJhbWUgPSBmZnMoaGMzMl90b19jcHVwKGVoY2ksICZody0+aHdfaW5mbzIpICYgUUhfU01BU0spOwogCQlzdGF0dXMgPSBjaGVja19pbnRyX3NjaGVkdWxlIChlaGNpLCBmcmFtZSwgLS11ZnJhbWUsCiAJCQkJcWgsICZjX21hc2spOwogCX0gZWxzZSB7CkBAIC03ODQsMTEgKzgzNSwxMSBAQAogCQlxaC0+c3RhcnQgPSBmcmFtZTsKIAogCQkvKiByZXNldCBTLWZyYW1lIGFuZCAobWF5YmUpIEMtZnJhbWUgbWFza3MgKi8KLQkJcWgtPmh3X2luZm8yICY9IGNwdV90b19oYzMyKGVoY2ksIH4oUUhfQ01BU0sgfCBRSF9TTUFTSykpOwotCQlxaC0+aHdfaW5mbzIgfD0gcWgtPnBlcmlvZAorCQlody0+aHdfaW5mbzIgJj0gY3B1X3RvX2hjMzIoZWhjaSwgfihRSF9DTUFTSyB8IFFIX1NNQVNLKSk7CisJCWh3LT5od19pbmZvMiB8PSBxaC0+cGVyaW9kCiAJCQk/IGNwdV90b19oYzMyKGVoY2ksIDEgPDwgdWZyYW1lKQogCQkJOiBjcHVfdG9faGMzMihlaGNpLCBRSF9TTUFTSyk7Ci0JCXFoLT5od19pbmZvMiB8PSBjX21hc2s7CisJCWh3LT5od19pbmZvMiB8PSBjX21hc2s7CiAJfSBlbHNlCiAJCWVoY2lfZGJnIChlaGNpLCAicmV1c2VkIHFoICVwIHNjaGVkdWxlXG4iLCBxaCk7CiAKQEAgLTIxODgsMTAgKzIyMzksMTEgQEAKIAkJCWNhc2UgUV9UWVBFX1FIOgogCQkJCS8qIGhhbmRsZSBhbnkgY29tcGxldGlvbnMgKi8KIAkJCQl0ZW1wLnFoID0gcWhfZ2V0IChxLnFoKTsKLQkJCQl0eXBlID0gUV9ORVhUX1RZUEUoZWhjaSwgcS5xaC0+aHdfbmV4dCk7CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFKGVoY2ksIHEucWgtPmh3LT5od19uZXh0KTsKIAkJCQlxID0gcS5xaC0+cWhfbmV4dDsKIAkJCQltb2RpZmllZCA9IHFoX2NvbXBsZXRpb25zIChlaGNpLCB0ZW1wLnFoKTsKLQkJCQlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkgKCZ0ZW1wLnFoLT5xdGRfbGlzdCkpKQorCQkJCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZ0ZW1wLnFoLT5xdGRfbGlzdCkgfHwKKwkJCQkJCXRlbXAucWgtPm5lZWRzX3Jlc2NhbikpCiAJCQkJCWludHJfZGVzY2hlZHVsZSAoZWhjaSwgdGVtcC5xaCk7CiAJCQkJcWhfcHV0ICh0ZW1wLnFoKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS13OTB4OTAwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdzkweDkwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTIxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdzkweDkwMC5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogbGludXgvZHJpdmVyL3VzYi9ob3N0L2VoY2ktdzkweDkwMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKmViYWJsZSBwaHkwIGFuZCBwaHkxIGZvciB3OTBwOTEwKi8KKyNkZWZpbmUJRU5QSFkJCSgweDAxPDw4KQorI2RlZmluZSBQSFkwX0NUUgkoMHhBNCkKKyNkZWZpbmUgUEhZMV9DVFIJKDB4QTgpCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHVzYl93OTB4OTAwX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKKwkJICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0dmFsID0gMCwgaXJxOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldHZhbCA9IC1FTlhJTzsKKwkJZ290byBlcnIxOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJnBkZXYtPmRldiwgInc5MHg5MDAgRUhDSSIpOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjI7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmIChoY2QtPnJlZ3MgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGVycjM7CisJfQorCisJZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CisJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsKKwkJIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisKKwkvKiBlbmFibGUgUEhZIDAsMSx0aGUgcmVncyBvbmx5IGFwcGx5IHRvIHc5MHA5MTAKKwkqICAweEE0LDB4QTggd2VyZSBvZmZzZXRzIG9mIFBIWTAgYW5kIFBIWTEgY29udHJvbGxlciBvZgorCSogIHc5MHA5MTAgSUMgcmVsYXRpdmUgdG8gZWhjaS0+cmVncy4KKwkqLworCXZhbCA9IF9fcmF3X3JlYWRsKGVoY2ktPnJlZ3MrUEhZMF9DVFIpOworCXZhbCB8PSBFTlBIWTsKKwlfX3Jhd193cml0ZWwodmFsLCBlaGNpLT5yZWdzK1BIWTBfQ1RSKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKGVoY2ktPnJlZ3MrUEhZMV9DVFIpOworCXZhbCB8PSBFTlBIWTsKKwlfX3Jhd193cml0ZWwodmFsLCBlaGNpLT5yZWdzK1BIWTFfQ1RSKTsKKworCWVoY2ktPmhjc19wYXJhbXMgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKwllaGNpLT5zYnJuID0gMHgyMDsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCWdvdG8gZXJyNDsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CisJaWYgKHJldHZhbCAhPSAwKQorCQlnb3RvIGVycjQ7CisKKwllaGNpX3dyaXRlbChlaGNpLCAxLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKworCXJldHVybiByZXR2YWw7CitlcnI0OgorCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2VycjM6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitlcnIyOgorCXVzYl9wdXRfaGNkKGhjZCk7CitlcnIxOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYwordm9pZCB1c2JfdzkweDkwMF9yZW1vdmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX3c5MHg5MDBfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9IGhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPSAiTnV2b3RvbiB3OTB4OTAwIEVIQ0kgSG9zdCBDb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0gZWhjaV9pcnEsCisJLmZsYWdzID0gSENEX1VTQjJ8SENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkucmVzZXQgPSBlaGNpX2luaXQsCisJLnN0YXJ0ID0gZWhjaV9ydW4sCisKKwkuc3RvcCA9IGVoY2lfc3RvcCwKKwkuc2h1dGRvd24gPSBlaGNpX3NodXRkb3duLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9IGVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0gZWhjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPSBlaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPSBlaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmCUNPTkZJR19QTQorCS5idXNfc3VzcGVuZCA9IGVoY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPSBlaGNpX2J1c19yZXN1bWUsCisjZW5kaWYKKwkucmVsaW5xdWlzaF9wb3J0CT0gZWhjaV9yZWxpbnF1aXNoX3BvcnQsCisJLnBvcnRfaGFuZGVkX292ZXIJPSBlaGNpX3BvcnRfaGFuZGVkX292ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlaGNpX3c5MHg5MDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHVzYl93OTB4OTAwX3Byb2JlKCZlaGNpX3c5MHg5MDBfaGNfZHJpdmVyLCBwZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZWhjaV93OTB4OTAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXVzYl93OTB4OTAwX3JlbW92ZShoY2QsIHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVoY2lfaGNkX3c5MHg5MDBfZHJpdmVyID0geworCS5wcm9iZSAgPSBlaGNpX3c5MHg5MDBfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGVoY2lfdzkweDkwMF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInc5MHg5MDAtZWhjaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9SKCJXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInc5MHA5MTAgdXNiIGVoY2kgZHJpdmVyISIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3OTBwOTEwLWVoY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKaW5kZXggMmJmZmYzMC4uMDY0ZTc2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgX19oYzE2CV9fbGUxNgogI2VuZGlmCiAKLS8qIHN0YXRpc3RpY3MgY2FuIGJlIGtlcHQgZm9yIGZvciB0dW5pbmcvbW9uaXRvcmluZyAqLworLyogc3RhdGlzdGljcyBjYW4gYmUga2VwdCBmb3IgdHVuaW5nL21vbml0b3JpbmcgKi8KIHN0cnVjdCBlaGNpX3N0YXRzIHsKIAkvKiBpcnEgdXNhZ2UgKi8KIAl1bnNpZ25lZCBsb25nCQlub3JtYWw7CkBAIC0xMjYsNiArMTI2LDcgQEAKIAl1bnNpZ25lZAkJYmlnX2VuZGlhbl9tbWlvOjE7CiAJdW5zaWduZWQJCWJpZ19lbmRpYW5fZGVzYzoxOwogCXVuc2lnbmVkCQloYXNfYW1jY191c2IyMzoxOworCXVuc2lnbmVkCQluZWVkX2lvX3dhdGNoZG9nOjE7CiAKIAkvKiByZXF1aXJlZCBmb3IgdXNiMzIgcXVpcmsgKi8KIAkjZGVmaW5lIE9IQ0lfQ1RSTF9IQ0ZTICAgICAgICAgICgzIDw8IDYpCkBAIC0xMzUsNiArMTM2LDcgQEAKIAkjZGVmaW5lIE9IQ0lfSENDVFJMX09GRlNFVCAgICAgIDB4NAogCSNkZWZpbmUgT0hDSV9IQ0NUUkxfTEVOICAgICAgICAgMHg0CiAJX19oYzMyCQkJKm9oY2lfaGNjdHJsX3JlZzsKKwl1bnNpZ25lZAkJaGFzX2hvc3RwYzoxOwogCiAJdTgJCQlzYnJuOwkJLyogcGFja2VkIHJlbGVhc2UgbnVtYmVyICovCiAKQEAgLTI5OCw4ICszMDAsOCBAQAogICogVGhlc2UgYXBwZWFyIGluIGJvdGggdGhlIGFzeW5jIGFuZCAoZm9yIGludGVycnVwdCkgcGVyaW9kaWMgc2NoZWR1bGVzLgogICovCiAKLXN0cnVjdCBlaGNpX3FoIHsKLQkvKiBmaXJzdCBwYXJ0IGRlZmluZWQgYnkgRUhDSSBzcGVjICovCisvKiBmaXJzdCBwYXJ0IGRlZmluZWQgYnkgRUhDSSBzcGVjICovCitzdHJ1Y3QgZWhjaV9xaF9odyB7CiAJX19oYzMyCQkJaHdfbmV4dDsJLyogc2VlIEVIQ0kgMy42LjEgKi8KIAlfX2hjMzIJCQlod19pbmZvMTsgICAgICAgLyogc2VlIEVIQ0kgMy42LjIgKi8KICNkZWZpbmUJUUhfSEVBRAkJMHgwMDAwODAwMApAQCAtMzE3LDcgKzMxOSwxMCBAQAogCV9faGMzMgkJCWh3X3Rva2VuOwogCV9faGMzMgkJCWh3X2J1ZiBbNV07CiAJX19oYzMyCQkJaHdfYnVmX2hpIFs1XTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7CiAKK3N0cnVjdCBlaGNpX3FoIHsKKwlzdHJ1Y3QgZWhjaV9xaF9odwkqaHc7CiAJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KIAlkbWFfYWRkcl90CQlxaF9kbWE7CQkvKiBhZGRyZXNzIG9mIHFoICovCiAJdW5pb24gZWhjaV9zaGFkb3cJcWhfbmV4dDsJLyogcHRyIHRvIHFoOyBvciBwZXJpb2RpYyAqLwpAQCAtMzM2LDYgKzM0MSw3IEBACiAJdTMyCQkJcmVmY291bnQ7CiAJdW5zaWduZWQJCXN0YW1wOwogCisJdTgJCQluZWVkc19yZXNjYW47CS8qIERlcXVldWUgZHVyaW5nIGdpdmViYWNrICovCiAJdTgJCQlxaF9zdGF0ZTsKICNkZWZpbmUJUUhfU1RBVEVfTElOS0VECQkxCQkvKiBIQyBzZWVzIHRoaXMgKi8KICNkZWZpbmUJUUhfU1RBVEVfVU5MSU5LCQkyCQkvKiBIQyBtYXkgc3RpbGwgc2VlIHRoaXMgKi8KQEAgLTM1Nyw3ICszNjMsNyBAQAogCiAJc3RydWN0IHVzYl9kZXZpY2UJKmRldjsJCS8qIGFjY2VzcyB0byBUVCAqLwogCXVuc2lnbmVkCQljbGVhcmluZ190dDoxOwkvKiBDbGVhci1UVC1CdWYgaW4gcHJvZ3Jlc3MgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTQ0LDcgKzU1MCw3IEBACiBlaGNpX3BvcnRfc3BlZWQoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBpbnQgcG9ydHNjKQogewogCWlmIChlaGNpX2lzX1RESShlaGNpKSkgewotCQlzd2l0Y2ggKChwb3J0c2M+PjI2KSYzKSB7CisJCXN3aXRjaCAoKHBvcnRzYyA+PiAoZWhjaS0+aGFzX2hvc3RwYyA/IDI1IDogMjYpKSAmIDMpIHsKIAkJY2FzZSAwOgogCQkJcmV0dXJuIDA7CiAJCWNhc2UgMToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzVkODI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCkBAIC0wLDAgKzEsMjkwOSBAQAorLyoKKyAqIElTUDEzNjIgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBMb3RoYXIgV2Fzc21hbm4gPExXQEtBUk8tZWxlY3Ryb25pY3MuZGU+CisgKgorICogRGVyaXZlZCBmcm9tIHRoZSBTTDgxMSBIQ0QsIHJld3JpdHRlbiBmb3IgSVNQMTE2eC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBPbGF2IEtvbmdhcyA8b2tAYXJ0ZWNkZXNpZ24uZWU+CisgKgorICogUG9ydGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUHNpb24gVGVrbG9naXggKGZvciBOZXRCb29rIFBSTykKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYXZpZCBCcm93bmVsbAorICovCisKKy8qCisgKiBUaGUgSVNQMTM2MiBjaGlwIHJlcXVpcmVzIGEgbGFyZ2UgZGVsYXkgKDMwMG5zIGFuZCA0NjJucykgYmV0d2VlbgorICogYWNjZXNzZXMgdG8gdGhlIGFkZHJlc3MgYW5kIGRhdGEgcmVnaXN0ZXIuCisgKiBUaGUgZm9sbG93aW5nIHRpbWluZyBvcHRpb25zIGV4aXN0OgorICoKKyAqIDEuIENvbmZpZ3VyZSB5b3VyIG1lbW9yeSBjb250cm9sbGVyIHRvIGFkZCBzdWNoIGRlbGF5cyBpZiBpdCBjYW4gKHRoZSBiZXN0KQorICogMi4gSW1wbGVtZW50IHBsYXRmb3JtLXNwZWNpZmljIGRlbGF5IGZ1bmN0aW9uIHBvc3NpYmx5CisgKiAgICBjb21iaW5lZCB3aXRoIGNvbmZpZ3VyaW5nIHRoZSBtZW1vcnkgY29udHJvbGxlcjsgc2VlCisgKiAgICBpbmNsdWRlL2xpbnV4L3VzYl9pc3AxMzYyLmggZm9yIG1vcmUgaW5mby4KKyAqIDMuIFVzZSBuZGVsYXkgKGVhc2llc3QsIHBvb3Jlc3QpLgorICoKKyAqIFVzZSB0aGUgY29ycmVzcG9uZGluZyBtYWNyb3MgVVNFX1BMQVRGT1JNX0RFTEFZIGFuZCBVU0VfTkRFTEFZIGluIHRoZQorICogcGxhdGZvcm0gc3BlY2lmaWMgc2VjdGlvbiBvZiBpc3AxMzYyLmggdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSB2YXJpYW50LgorICoKKyAqIEFsc28gbm90ZSB0aGF0IGFjY29yZGluZyB0byB0aGUgUGhpbGlwcyAiSVNQMTM2MiBFcnJhdGEiIGRvY3VtZW50CisgKiBSZXYgMS4wMCBmcm9tIDI3IE1heSBkYXRhIGNvcnJ1cHRpb24gbWF5IG9jY3VyIHdoZW4gdGhlICNXUiBzaWduYWwKKyAqIGlzIHJlYXNzZXJ0ZWQgKGV2ZW4gd2l0aCAjQ1MgZGVhc3NlcnRlZCkgd2l0aGluIDEzMm5zIGFmdGVyIGEKKyAqIHdyaXRlIGN5Y2xlIHRvIGFueSBjb250cm9sbGVyIHJlZ2lzdGVyLiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndAorICogaW1wbGVtZW50IHRoZSByZWNvbW1lbmRlZCBmaXggKGdhdGluZyB0aGUgI1dSIHdpdGggI0NTKSBzb2Z0d2FyZQorICogbXVzdCBlbnN1cmUgdGhhdCBubyBmdXJ0aGVyIHdyaXRlIGN5Y2xlIChub3QgbmVjZXNzYXJpbHkgdG8gdGhlIGNoaXAhKQorICogaXMgaXNzdWVkIGJ5IHRoZSBDUFUgd2l0aGluIHRoaXMgaW50ZXJ2YWwuCisKKyAqIEZvciBQWEEyNXggdGhpcyBjYW4gYmUgZW5zdXJlZCBieSB1c2luZyBWTElPIHdpdGggdGhlIG1heGltdW0KKyAqIHJlY292ZXJ5IHRpbWUgKE1TQ3ggPSAweDdmOGMpIHdpdGggYSBtZW1vcnkgY2xvY2sgb2YgOTkuNTMgTUh6LgorICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjIGRlZmluZSBJU1AxMzYyX0RFQlVHCisjZWxzZQorIyB1bmRlZiBJU1AxMzYyX0RFQlVHCisjZW5kaWYKKworLyoKKyAqIFRoZSBQWEEyNTUgVURDIGFwcGFyZW50bHkgZG9lc24ndCBoYW5kbGUgR0VUX1NUQVRVUywgR0VUX0NPTkZJRyBhbmQKKyAqIEdFVF9JTlRFUkZBQ0UgcmVxdWVzdHMgY29ycmVjdGx5IHdoZW4gdGhlIFNFVFVQIGFuZCBEQVRBIHN0YWdlcyBvZiB0aGUKKyAqIHJlcXVlc3RzIGFyZSBjYXJyaWVkIG91dCBpbiBzZXBhcmF0ZSBmcmFtZXMuIFRoaXMgd2lsbCBkZWxheSBhbnkgU0VUVVAKKyAqIHBhY2tldHMgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZyYW1lIHNvIHRoYXQgdGhpcyBzaXR1YXRpb24gaXMKKyAqIHVubGlrZWx5IHRvIG9jY3VyIChhbmQgbWFrZXMgdXNidGVzdCBoYXBweSBydW5uaW5nIHdpdGggYSBQWEEyNTUgdGFyZ2V0CisgKiBkZXZpY2UpLgorICovCisjdW5kZWYgQlVHR1lfUFhBMlhYX1VEQ19VU0JURVNUCisKKyN1bmRlZiBQVERfVFJBQ0UKKyN1bmRlZiBVUkJfVFJBQ0UKKyN1bmRlZiBWRVJCT1NFCisjdW5kZWYgUkVHSVNURVJTCisKKy8qIFRoaXMgZW5hYmxlcyBhIG1lbW9yeSB0ZXN0IG9uIHRoZSBJU1AxMzYyIGNoaXAgbWVtb3J5IHRvIG1ha2Ugc3VyZSB0aGUKKyAqIGNoaXAgYWNjZXNzIHRpbWluZyBpcyBjb3JyZWN0LgorICovCisjdW5kZWYgQ0hJUF9CVUZGRVJfVEVTVAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMzYyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCitzdGF0aWMgaW50IGRiZ19sZXZlbDsKKyNpZmRlZiBJU1AxMzYyX0RFQlVHCittb2R1bGVfcGFyYW0oZGJnX2xldmVsLCBpbnQsIDA2NDQpOworI2Vsc2UKK21vZHVsZV9wYXJhbShkYmdfbGV2ZWwsIGludCwgMCk7CisjZGVmaW5lCVNUVUJfREVCVUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorI2luY2x1ZGUgIi4uL2NvcmUvdXNiLmgiCisjaW5jbHVkZSAiaXNwMTM2Mi5oIgorCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjIwMDUtMDQtMDQiCisjZGVmaW5lIERSSVZFUl9ERVNDCSJJU1AxMzYyIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIgorCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgY29uc3QgY2hhciBoY2RfbmFtZVtdID0gImlzcDEzNjItaGNkIjsKKworc3RhdGljIHZvaWQgaXNwMTM2Ml9oY19zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpOworc3RhdGljIGludCBpc3AxMzYyX2hjX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogV2hlbiBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0aGFuZGxlciBvbmx5IGlzcDEzNjJfaGNkLT5pcnFlbmIgaXMgbW9kaWZpZWQsCisgKiBzaW5jZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCB3cml0ZSBpc3AxMzYyX2hjZC0+aXJxZW5iIHRvIEhDdVBJTlQgdXBvbgorICogY29tcGxldGlvbi4KKyAqIFdlIGRvbid0IG5lZWQgYSAnZGlzYWJsZScgY291bnRlcnBhcnQsIHNpbmNlIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZAorICogb25seSBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc3AxMzYyX2VuYWJsZV9pbnQoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdTE2IG1hc2spCit7CisJaWYgKChpc3AxMzYyX2hjZC0+aXJxZW5iIHwgbWFzaykgPT0gaXNwMTM2Ml9oY2QtPmlycWVuYikKKwkJcmV0dXJuOworCWlmIChtYXNrICYgfmlzcDEzNjJfaGNkLT5pcnFlbmIpCisJCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQsIG1hc2sgJiB+aXNwMTM2Ml9oY2QtPmlycWVuYik7CisJaXNwMTM2Ml9oY2QtPmlycWVuYiB8PSBtYXNrOworCWlmIChpc3AxMzYyX2hjZC0+aXJxX2FjdGl2ZSkKKwkJcmV0dXJuOworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIsIGlzcDEzNjJfaGNkLT5pcnFlbmIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICpnZXRfcHRkX3F1ZXVlKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsCisJCQkJCQkgICAgIHUxNiBvZmZzZXQpCit7CisJc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSA9IE5VTEw7CisKKwlpZiAob2Zmc2V0IDwgaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbMV0uYnVmX3N0YXJ0KQorCQllcHEgPSAmaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbMF07CisJZWxzZSBpZiAob2Zmc2V0IDwgaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYnVmX3N0YXJ0KQorCQllcHEgPSAmaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbMV07CisJZWxzZSBpZiAob2Zmc2V0IDwgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfc3RhcnQpCisJCWVwcSA9ICZpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZTsKKwllbHNlIGlmIChvZmZzZXQgPCBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJ1Zl9zdGFydCArCisJCSAgIGlzcDEzNjJfaGNkLT5hdGxfcXVldWUuYnVmX3NpemUpCisJCWVwcSA9ICZpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlOworCisJaWYgKGVwcSkKKwkJREJHKDEsICIlczogUFREICQlMDR4IGlzIG9uICVzIHF1ZXVlXG4iLCBfX2Z1bmNfXywgb2Zmc2V0LCBlcHEtPm5hbWUpOworCWVsc2UKKwkJcHJfd2FybmluZygiJXM6IGludmFsaWQgUFREICQlMDR4XG4iLCBfX2Z1bmNfXywgb2Zmc2V0KTsKKworCXJldHVybiBlcHE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9wdGRfb2Zmc2V0KHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEsIHU4IGluZGV4KQoreworCWludCBvZmZzZXQ7CisKKwlpZiAoaW5kZXggKiBlcHEtPmJsa19zaXplID4gZXBxLT5idWZfc2l6ZSkgeworCQlwcl93YXJuaW5nKCIlczogQmFkICVzIGluZGV4ICVkKCVkKVxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwgaW5kZXgsCisJCSAgICAgZXBxLT5idWZfc2l6ZSAvIGVwcS0+YmxrX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zmc2V0ID0gZXBxLT5idWZfc3RhcnQgKyBpbmRleCAqIGVwcS0+YmxrX3NpemU7CisJREJHKDMsICIlczogJXMgUFREWyUwMnhdICMgJTA0eFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwgaW5kZXgsIG9mZnNldCk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHUxNiBtYXhfdHJhbnNmZXJfc2l6ZShzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgaW50IG1wcykKK3sKKwl1MTYgeGZlcl9zaXplID0gbWluX3Qoc2l6ZV90LCBNQVhfWEZFUl9TSVpFLCBzaXplKTsKKworCXhmZXJfc2l6ZSA9IG1pbl90KHNpemVfdCwgeGZlcl9zaXplLCBlcHEtPmJ1Zl9hdmFpbCAqIGVwcS0+YmxrX3NpemUgLSBQVERfSEVBREVSX1NJWkUpOworCWlmICh4ZmVyX3NpemUgPCBzaXplICYmIHhmZXJfc2l6ZSAlIG1wcykKKwkJeGZlcl9zaXplIC09IHhmZXJfc2l6ZSAlIG1wczsKKworCXJldHVybiB4ZmVyX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgY2xhaW1fcHRkX2J1ZmZlcnMoc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSwKKwkJCSAgICAgc3RydWN0IGlzcDEzNjJfZXAgKmVwLCB1MTYgbGVuKQoreworCWludCBwdGRfb2Zmc2V0ID0gLUVJTlZBTDsKKwlpbnQgaW5kZXg7CisJaW50IG51bV9wdGRzID0gKChsZW4gKyBQVERfSEVBREVSX1NJWkUgLSAxKSAvIGVwcS0+YmxrX3NpemUpICsgMTsKKwlpbnQgZm91bmQgPSAtMTsKKwlpbnQgbGFzdCA9IC0xOworCisJQlVHX09OKGxlbiA+IGVwcS0+YnVmX3NpemUpOworCisJaWYgKCFlcHEtPmJ1Zl9hdmFpbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoZXAtPm51bV9wdGRzKQorCQlwcl9lcnIoIiVzOiAlcyBsZW4gJWQvJWQgbnVtX3B0ZHMgJWQgYnVmX21hcCAlMDhseCBza2lwX21hcCAlMDhseFxuIiwgX19mdW5jX18sCisJCSAgICBlcHEtPm5hbWUsIGxlbiwgZXBxLT5ibGtfc2l6ZSwgbnVtX3B0ZHMsIGVwcS0+YnVmX21hcCwgZXBxLT5za2lwX21hcCk7CisJQlVHX09OKGVwLT5udW1fcHRkcyAhPSAwKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8PSBlcHEtPmJ1Zl9jb3VudCAtIG51bV9wdGRzOyBpbmRleCsrKSB7CisJCWlmICh0ZXN0X2JpdChpbmRleCwgJmVwcS0+YnVmX21hcCkpCisJCQljb250aW51ZTsKKwkJZm91bmQgPSBpbmRleDsKKwkJZm9yIChsYXN0ID0gaW5kZXggKyAxOyBsYXN0IDwgaW5kZXggKyBudW1fcHRkczsgbGFzdCsrKSB7CisJCQlpZiAodGVzdF9iaXQobGFzdCwgJmVwcS0+YnVmX21hcCkpIHsKKwkJCQlmb3VuZCA9IC0xOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChmb3VuZCA+PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChmb3VuZCA8IDApCisJCXJldHVybiAtRU9WRVJGTE9XOworCisJREJHKDEsICIlczogRm91bmQgJWQgUFREc1slZF0gZm9yICVkLyVkIGJ5dGVcbiIsIF9fZnVuY19fLAorCSAgICBudW1fcHRkcywgZm91bmQsIGxlbiwgKGludCkoZXBxLT5ibGtfc2l6ZSAtIFBURF9IRUFERVJfU0laRSkpOworCXB0ZF9vZmZzZXQgPSBnZXRfcHRkX29mZnNldChlcHEsIGZvdW5kKTsKKwlXQVJOX09OKHB0ZF9vZmZzZXQgPCAwKTsKKwllcC0+cHRkX29mZnNldCA9IHB0ZF9vZmZzZXQ7CisJZXAtPm51bV9wdGRzICs9IG51bV9wdGRzOworCWVwcS0+YnVmX2F2YWlsIC09IG51bV9wdGRzOworCUJVR19PTihlcHEtPmJ1Zl9hdmFpbCA+IGVwcS0+YnVmX2NvdW50KTsKKwllcC0+cHRkX2luZGV4ID0gZm91bmQ7CisJZm9yIChpbmRleCA9IGZvdW5kOyBpbmRleCA8IGxhc3Q7IGluZGV4KyspCisJCV9fc2V0X2JpdChpbmRleCwgJmVwcS0+YnVmX21hcCk7CisJREJHKDEsICIlczogRG9uZSAlcyBQVERbJWRdICQlMDR4LCBhdmFpbCAlZCBjb3VudCAlZCBjbGFpbWVkICVkICUwOGx4OiUwOGx4XG4iLAorCSAgICBfX2Z1bmNfXywgZXBxLT5uYW1lLCBlcC0+cHRkX2luZGV4LCBlcC0+cHRkX29mZnNldCwKKwkgICAgZXBxLT5idWZfYXZhaWwsIGVwcS0+YnVmX2NvdW50LCBudW1fcHRkcywgZXBxLT5idWZfbWFwLCBlcHEtPnNraXBfbWFwKTsKKworCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfcHRkX2J1ZmZlcnMoc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSwgc3RydWN0IGlzcDEzNjJfZXAgKmVwKQoreworCWludCBpbmRleCA9IGVwLT5wdGRfaW5kZXg7CisJaW50IGxhc3QgPSBlcC0+cHRkX2luZGV4ICsgZXAtPm51bV9wdGRzOworCisJaWYgKGxhc3QgPiBlcHEtPmJ1Zl9jb3VudCkKKwkJcHJfZXJyKCIlczogZXAgJXAgcmVxICVkIGxlbiAlZCAlcyBQVERbJWRdICQlMDR4IG51bV9wdGRzICVkIGJ1Zl9jb3VudCAlZCBidWZfYXZhaWwgJWQgYnVmX21hcCAlMDhseCBza2lwX21hcCAlMDhseFxuIiwKKwkJICAgIF9fZnVuY19fLCBlcCwgZXAtPm51bV9yZXEsIGVwLT5sZW5ndGgsIGVwcS0+bmFtZSwgZXAtPnB0ZF9pbmRleCwKKwkJICAgIGVwLT5wdGRfb2Zmc2V0LCBlcC0+bnVtX3B0ZHMsIGVwcS0+YnVmX2NvdW50LCBlcHEtPmJ1Zl9hdmFpbCwKKwkJICAgIGVwcS0+YnVmX21hcCwgZXBxLT5za2lwX21hcCk7CisJQlVHX09OKGxhc3QgPiBlcHEtPmJ1Zl9jb3VudCk7CisKKwlmb3IgKDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKSB7CisJCV9fY2xlYXJfYml0KGluZGV4LCAmZXBxLT5idWZfbWFwKTsKKwkJX19zZXRfYml0KGluZGV4LCAmZXBxLT5za2lwX21hcCk7CisJfQorCWVwcS0+YnVmX2F2YWlsICs9IGVwLT5udW1fcHRkczsKKwllcHEtPnB0ZF9jb3VudC0tOworCisJQlVHX09OKGVwcS0+YnVmX2F2YWlsID4gZXBxLT5idWZfY291bnQpOworCUJVR19PTihlcHEtPnB0ZF9jb3VudCA+IGVwcS0+YnVmX2NvdW50KTsKKworCURCRygxLCAiJXM6IERvbmUgJXMgUFREcyAkJTA0eCByZWxlYXNlZCAlZCBhdmFpbCAlZCBjb3VudCAlZFxuIiwKKwkgICAgX19mdW5jX18sIGVwcS0+bmFtZSwKKwkgICAgZXAtPnB0ZF9vZmZzZXQsIGVwLT5udW1fcHRkcywgZXBxLT5idWZfYXZhaWwsIGVwcS0+YnVmX2NvdW50KTsKKwlEQkcoMSwgIiVzOiBidWZfbWFwICUwOGx4IHNraXBfbWFwICUwOGx4XG4iLCBfX2Z1bmNfXywKKwkgICAgZXBxLT5idWZfbWFwLCBlcHEtPnNraXBfbWFwKTsKKworCWVwLT5udW1fcHRkcyA9IDA7CisJZXAtPnB0ZF9vZmZzZXQgPSAtRUlOVkFMOworCWVwLT5wdGRfaW5kZXggPSAtRUlOVkFMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICBTZXQgdXAgUFREJ3MuCisqLworc3RhdGljIHZvaWQgcHJlcGFyZV9wdGQoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgc3RydWN0IHVyYiAqdXJiLAorCQkJc3RydWN0IGlzcDEzNjJfZXAgKmVwLCBzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxLAorCQkJdTE2IGZubykKK3sKKwlzdHJ1Y3QgcHRkICpwdGQ7CisJaW50IHRvZ2dsZTsKKwlpbnQgZGlyOworCXUxNiBsZW47CisJc2l6ZV90IGJ1Zl9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlEQkcoMywgIiVzOiAlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwgZXApOworCisJcHRkID0gJmVwLT5wdGQ7CisKKwllcC0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlzd2l0Y2ggKGVwLT5uZXh0cGlkKSB7CisJY2FzZSBVU0JfUElEX0lOOgorCQl0b2dnbGUgPSB1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDApOworCQlkaXIgPSBQVERfRElSX0lOOworCQlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpIHsKKwkJCWxlbiA9IG1pbl90KHNpemVfdCwgZXAtPm1heHBhY2tldCwgYnVmX2xlbik7CisJCX0gZWxzZSBpZiAodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpIHsKKwkJCWxlbiA9IG1pbl90KHNpemVfdCwgdXJiLT5pc29fZnJhbWVfZGVzY1tmbm9dLmxlbmd0aCwgTUFYX1hGRVJfU0laRSk7CisJCQllcC0+ZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tmbm9dLm9mZnNldDsKKwkJfSBlbHNlCisJCQlsZW4gPSBtYXhfdHJhbnNmZXJfc2l6ZShlcHEsIGJ1Zl9sZW4sIGVwLT5tYXhwYWNrZXQpOworCQlEQkcoMSwgIiVzOiBJTiAgICBsZW4gJWQvJWQvJWQgZnJvbSBVUkJcbiIsIF9fZnVuY19fLCBsZW4sIGVwLT5tYXhwYWNrZXQsCisJCSAgICAoaW50KWJ1Zl9sZW4pOworCQlicmVhazsKKwljYXNlIFVTQl9QSURfT1VUOgorCQl0b2dnbGUgPSB1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDEpOworCQlkaXIgPSBQVERfRElSX09VVDsKKwkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKQorCQkJbGVuID0gbWluX3Qoc2l6ZV90LCBlcC0+bWF4cGFja2V0LCBidWZfbGVuKTsKKwkJZWxzZSBpZiAodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCisJCQlsZW4gPSBtaW5fdChzaXplX3QsIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoLCBNQVhfWEZFUl9TSVpFKTsKKwkJZWxzZQorCQkJbGVuID0gbWF4X3RyYW5zZmVyX3NpemUoZXBxLCBidWZfbGVuLCBlcC0+bWF4cGFja2V0KTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJcHJfaW5mbygiJXM6IFNlbmRpbmcgWkVSTyBwYWNrZXQ6ICVkXG4iLCBfX2Z1bmNfXywKKwkJCSAgICAgdXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCk7CisJCURCRygxLCAiJXM6IE9VVCAgIGxlbiAlZC8lZC8lZCBmcm9tIFVSQlxuIiwgX19mdW5jX18sIGxlbiwgZXAtPm1heHBhY2tldCwKKwkJICAgIChpbnQpYnVmX2xlbik7CisJCWJyZWFrOworCWNhc2UgVVNCX1BJRF9TRVRVUDoKKwkJdG9nZ2xlID0gMDsKKwkJZGlyID0gUFREX0RJUl9TRVRVUDsKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCQlEQkcoMSwgIiVzOiBTRVRVUCBsZW4gJWRcbiIsIF9fZnVuY19fLCBsZW4pOworCQllcC0+ZGF0YSA9IHVyYi0+c2V0dXBfcGFja2V0OworCQlicmVhazsKKwljYXNlIFVTQl9QSURfQUNLOgorCQl0b2dnbGUgPSAxOworCQlsZW4gPSAwOworCQlkaXIgPSAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICYmIHVzYl9waXBlaW4odXJiLT5waXBlKSkgPworCQkJUFREX0RJUl9PVVQgOiBQVERfRElSX0lOOworCQlEQkcoMSwgIiVzOiBBQ0sgICBsZW4gJWRcbiIsIF9fZnVuY19fLCBsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0b2dnbGUgPSBkaXIgPSBsZW4gPSAwOworCQlwcl9lcnIoIiVzQCVkOiBlcC0+bmV4dHBpZCAlMDJ4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGVwLT5uZXh0cGlkKTsKKwkJQlVHX09OKDEpOworCX0KKworCWVwLT5sZW5ndGggPSBsZW47CisJaWYgKCFsZW4pCisJCWVwLT5kYXRhID0gTlVMTDsKKworCXB0ZC0+Y291bnQgPSBQVERfQ0NfTVNLIHwgUFREX0FDVElWRV9NU0sgfCBQVERfVE9HR0xFKHRvZ2dsZSk7CisJcHRkLT5tcHMgPSBQVERfTVBTKGVwLT5tYXhwYWNrZXQpIHwgUFREX1NQRCh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykgfAorCQlQVERfRVAoZXAtPmVwbnVtKTsKKwlwdGQtPmxlbiA9IFBURF9MRU4obGVuKSB8IFBURF9ESVIoZGlyKTsKKwlwdGQtPmZhZGRyID0gUFREX0ZBKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSkpOworCisJaWYgKHVzYl9waXBlaW50KHVyYi0+cGlwZSkpIHsKKwkJcHRkLT5mYWRkciB8PSBQVERfU0ZfSU5UKGVwLT5icmFuY2gpOworCQlwdGQtPmZhZGRyIHw9IFBURF9QUihlcC0+aW50ZXJ2YWwgPyBfX2ZmcyhlcC0+aW50ZXJ2YWwpIDogMCk7CisJfQorCWlmICh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkKKwkJcHRkLT5mYWRkciB8PSBQVERfU0ZfSVNPKGZubyk7CisKKwlEQkcoMSwgIiVzOiBGaW5pc2hlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX3dyaXRlX3B0ZChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCBzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXAsCisJCQkgICAgICBzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxKQoreworCXN0cnVjdCBwdGQgKnB0ZCA9ICZlcC0+cHRkOworCWludCBsZW4gPSBQVERfR0VUX0RJUihwdGQpID09IFBURF9ESVJfSU4gPyAwIDogZXAtPmxlbmd0aDsKKworCV9CVUdfT04oZXAtPnB0ZF9vZmZzZXQgPCAwKTsKKworCXByZWZldGNoKHB0ZCk7CisJaXNwMTM2Ml93cml0ZV9idWZmZXIoaXNwMTM2Ml9oY2QsIHB0ZCwgZXAtPnB0ZF9vZmZzZXQsIFBURF9IRUFERVJfU0laRSk7CisJaWYgKGxlbikKKwkJaXNwMTM2Ml93cml0ZV9idWZmZXIoaXNwMTM2Ml9oY2QsIGVwLT5kYXRhLAorCQkJCSAgICAgZXAtPnB0ZF9vZmZzZXQgKyBQVERfSEVBREVSX1NJWkUsIGxlbik7CisKKwlkdW1wX3B0ZChwdGQpOworCWR1bXBfcHRkX291dF9kYXRhKHB0ZCwgZXAtPmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX3JlYWRfcHRkKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHN0cnVjdCBpc3AxMzYyX2VwICplcCwKKwkJCSAgICAgc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSkKK3sKKwlzdHJ1Y3QgcHRkICpwdGQgPSAmZXAtPnB0ZDsKKwlpbnQgYWN0X2xlbjsKKworCVdBUk5fT04obGlzdF9lbXB0eSgmZXAtPmFjdGl2ZSkpOworCUJVR19PTihlcC0+cHRkX29mZnNldCA8IDApOworCisJbGlzdF9kZWxfaW5pdCgmZXAtPmFjdGl2ZSk7CisJREJHKDEsICIlczogZXAgJXAgcmVtb3ZlZCBmcm9tIGFjdGl2ZSBsaXN0ICVwXG4iLCBfX2Z1bmNfXywgZXAsICZlcHEtPmFjdGl2ZSk7CisKKwlwcmVmZXRjaHcocHRkKTsKKwlpc3AxMzYyX3JlYWRfYnVmZmVyKGlzcDEzNjJfaGNkLCBwdGQsIGVwLT5wdGRfb2Zmc2V0LCBQVERfSEVBREVSX1NJWkUpOworCWR1bXBfcHRkKHB0ZCk7CisJYWN0X2xlbiA9IFBURF9HRVRfQ09VTlQocHRkKTsKKwlpZiAoUFREX0dFVF9ESVIocHRkKSAhPSBQVERfRElSX0lOIHx8IGFjdF9sZW4gPT0gMCkKKwkJcmV0dXJuOworCWlmIChhY3RfbGVuID4gZXAtPmxlbmd0aCkKKwkJcHJfZXJyKCIlczogZXAgJXAgUFREICQlMDR4IGFjdF9sZW4gJWQgZXAtPmxlbmd0aCAlZFxuIiwgX19mdW5jX18sIGVwLAorCQkJIGVwLT5wdGRfb2Zmc2V0LCBhY3RfbGVuLCBlcC0+bGVuZ3RoKTsKKwlCVUdfT04oYWN0X2xlbiA+IGVwLT5sZW5ndGgpOworCS8qIE9ubHkgdHJhbnNmZXIgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgaGFzIGFjdHVhbGx5IGJlZW4gb3ZlcndyaXR0ZW4KKwkgKiBpbiB0aGUgY2hpcCBidWZmZXIuIFdlIGRvbid0IHdhbnQgYW55IGRhdGEgdGhhdCBkb2Vzbid0IGJlbG9uZyB0byB0aGUKKwkgKiB0cmFuc2ZlciB0byBsZWFrIG91dCBvZiB0aGUgY2hpcCB0byB0aGUgY2FsbGVycyB0cmFuc2ZlciBidWZmZXIhCisJICovCisJcHJlZmV0Y2h3KGVwLT5kYXRhKTsKKwlpc3AxMzYyX3JlYWRfYnVmZmVyKGlzcDEzNjJfaGNkLCBlcC0+ZGF0YSwKKwkJCSAgICBlcC0+cHRkX29mZnNldCArIFBURF9IRUFERVJfU0laRSwgYWN0X2xlbik7CisJZHVtcF9wdGRfaW5fZGF0YShwdGQsIGVwLT5kYXRhKTsKK30KKworLyoKKyAqIElOVCBQVERzIHdpbGwgc3RheSBpbiB0aGUgY2hpcCB1bnRpbCBkYXRhIGlzIGF2YWlsYWJsZS4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUgYSBQVEQgZnJvbSB0aGUgY2hpcCB3aGVuIHRoZSBVUkIgaXMgZGVxdWV1ZWQuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBzcGlubG9jayBoZWxkIGFuZCBJUlFzIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9wdGQoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgc3RydWN0IGlzcDEzNjJfZXAgKmVwKQorCit7CisJaW50IGluZGV4OworCXN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHE7CisKKwlEQkcoMSwgIiVzOiBlcCAlcCBQVERbJWRdICQlMDR4XG4iLCBfX2Z1bmNfXywgZXAsIGVwLT5wdGRfaW5kZXgsIGVwLT5wdGRfb2Zmc2V0KTsKKwlCVUdfT04oZXAtPnB0ZF9vZmZzZXQgPCAwKTsKKworCWVwcSA9IGdldF9wdGRfcXVldWUoaXNwMTM2Ml9oY2QsIGVwLT5wdGRfb2Zmc2V0KTsKKwlCVUdfT04oIWVwcSk7CisKKwkvKiBwdXQgZXAgaW4gcmVtb3ZlX2xpc3QgZm9yIGNsZWFudXAgKi8KKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZlcC0+cmVtb3ZlX2xpc3QpKTsKKwlsaXN0X2FkZF90YWlsKCZlcC0+cmVtb3ZlX2xpc3QsICZpc3AxMzYyX2hjZC0+cmVtb3ZlX2xpc3QpOworCS8qIGxldCBTT0YgaW50ZXJydXB0IGhhbmRsZSB0aGUgY2xlYW51cCAqLworCWlzcDEzNjJfZW5hYmxlX2ludChpc3AxMzYyX2hjZCwgSEN1UElOVF9TT0YpOworCisJaW5kZXggPSBlcC0+cHRkX2luZGV4OworCWlmIChpbmRleCA8IDApCisJCS8qIElTTyBxdWV1ZXMgZG9uJ3QgaGF2ZSBTS0lQIHJlZ2lzdGVycyAqLworCQlyZXR1cm47CisKKwlEQkcoMSwgIiVzOiBEaXNhYmxpbmcgUFREWyUwMnhdICQlMDR4ICUwOGx4fCUwOHhcbiIsIF9fZnVuY19fLAorCSAgICBpbmRleCwgZXAtPnB0ZF9vZmZzZXQsIGVwcS0+c2tpcF9tYXAsIDEgPDwgaW5kZXgpOworCisJLyogcHJldmVudCBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgUFREICh3aWxsIGJlIGVmZmVjdGl2ZSBhZnRlciBuZXh0IFNPRikgKi8KKwllcHEtPnNraXBfbWFwIHw9IDEgPDwgaW5kZXg7CisJaWYgKGVwcSA9PSAmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZSkgeworCQlEQkcoMiwgIiVzOiBBVExTS0lQID0gJTA4eCAtPiAlMDhseFxuIiwgX19mdW5jX18sCisJCSAgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQVRMU0tJUCksIGVwcS0+c2tpcF9tYXApOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTFNLSVAsIGVwcS0+c2tpcF9tYXApOworCQlpZiAofmVwcS0+c2tpcF9tYXAgPT0gMCkKKwkJCWlzcDEzNjJfY2xyX21hc2sxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCBIQ0JVRlNUQVRfQVRMX0FDVElWRSk7CisJfSBlbHNlIGlmIChlcHEgPT0gJmlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlKSB7CisJCURCRygyLCAiJXM6IElOVExTS0lQID0gJTA4eCAtPiAlMDhseFxuIiwgX19mdW5jX18sCisJCSAgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTFNLSVApLCBlcHEtPnNraXBfbWFwKTsKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMU0tJUCwgZXBxLT5za2lwX21hcCk7CisJCWlmICh+ZXBxLT5za2lwX21hcCA9PSAwKQorCQkJaXNwMTM2Ml9jbHJfbWFzazE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQsIEhDQlVGU1RBVF9JTlRMX0FDVElWRSk7CisJfQorfQorCisvKgorICBUYWtlIGRvbmUgb3IgZmFpbGVkIHJlcXVlc3RzIG91dCBvZiBzY2hlZHVsZS4gR2l2ZSBiYWNrCisgIHByb2Nlc3NlZCB1cmJzLgorKi8KK3N0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHN0cnVjdCBpc3AxMzYyX2VwICplcCwKKwkJCSAgIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKKyAgICAgX19yZWxlYXNlcyhpc3AxMzYyX2hjZC0+bG9jaykKKyAgICAgX19hY3F1aXJlcyhpc3AxMzYyX2hjZC0+bG9jaykKK3sKKwl1cmItPmhjcHJpdiA9IE5VTEw7CisJZXAtPmVycm9yX2NvdW50ID0gMDsKKworCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkKKwkJZXAtPm5leHRwaWQgPSBVU0JfUElEX1NFVFVQOworCisJVVJCX0RCRygiJXM6IHJlcSAlZCBGQSAlZCBlcCVkJXMgJXM6IGxlbiAlZC8lZCAlcyBzdGF0ICVkXG4iLCBfX2Z1bmNfXywKKwkJZXAtPm51bV9yZXEsIHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCisJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJIXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJvdXQiIDogImluIiwKKwkJdXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkgPyAiY3RybCIgOgorCQkJdXNiX3BpcGVpbnQodXJiLT5waXBlKSA/ICJpbnQiIDoKKwkJCXVzYl9waXBlYnVsayh1cmItPnBpcGUpID8gImJ1bGsiIDoKKwkJCSJpc28iLAorCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgPworCQkic2hvcnRfb2siIDogIiIsIHVyYi0+c3RhdHVzKTsKKworCisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaXNwMTM2Ml9oY2RfdG9faGNkKGlzcDEzNjJfaGNkKSwgdXJiKTsKKwlzcGluX3VubG9jaygmaXNwMTM2Ml9oY2QtPmxvY2spOworCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGlzcDEzNjJfaGNkX3RvX2hjZChpc3AxMzYyX2hjZCksIHVyYiwgc3RhdHVzKTsKKwlzcGluX2xvY2soJmlzcDEzNjJfaGNkLT5sb2NrKTsKKworCS8qIHRha2UgaWRsZSBlbmRwb2ludHMgb3V0IG9mIHRoZSBzY2hlZHVsZSByaWdodCBhd2F5ICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+aGVwLT51cmJfbGlzdCkpCisJCXJldHVybjsKKworCS8qIGFzeW5jIGRlc2NoZWR1bGUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5zY2hlZHVsZSkpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZXAtPnNjaGVkdWxlKTsKKwkJcmV0dXJuOworCX0KKworCisJaWYgKGVwLT5pbnRlcnZhbCkgeworCQkvKiBwZXJpb2RpYyBkZXNjaGVkdWxlICovCisJCURCRygxLCAiZGVzY2hlZHVsZSBxaCVkLyVwIGJyYW5jaCAlZCBsb2FkICVkIGJhbmR3aWR0aCAlZCAtPiAlZFxuIiwgZXAtPmludGVydmFsLAorCQkgICAgZXAsIGVwLT5icmFuY2gsIGVwLT5sb2FkLAorCQkgICAgaXNwMTM2Ml9oY2QtPmxvYWRbZXAtPmJyYW5jaF0sCisJCSAgICBpc3AxMzYyX2hjZC0+bG9hZFtlcC0+YnJhbmNoXSAtIGVwLT5sb2FkKTsKKwkJaXNwMTM2Ml9oY2QtPmxvYWRbZXAtPmJyYW5jaF0gLT0gZXAtPmxvYWQ7CisJCWVwLT5icmFuY2ggPSBQRVJJT0RJQ19TSVpFOworCX0KK30KKworLyoKKyAqIEFuYWx5emUgdHJhbnNmZXIgcmVzdWx0cywgaGFuZGxlIHBhcnRpYWwgdHJhbnNmZXJzIGFuZCBlcnJvcnMKKyovCitzdGF0aWMgdm9pZCBwb3N0cHJvY19lcChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCBzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXApCit7CisJc3RydWN0IHVyYiAqdXJiID0gZ2V0X3VyYihlcCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHB0ZCAqcHRkOworCWludCBzaG9ydF9vazsKKwl1MTYgbGVuOworCWludCB1cmJzdGF0ID0gLUVJTlBST0dSRVNTOworCXU4IGNjOworCisJREJHKDIsICIlczogZXAgJXAgcmVxICVkXG4iLCBfX2Z1bmNfXywgZXAsIGVwLT5udW1fcmVxKTsKKworCXVkZXYgPSB1cmItPmRldjsKKwlwdGQgPSAmZXAtPnB0ZDsKKwljYyA9IFBURF9HRVRfQ0MocHRkKTsKKwlpZiAoY2MgPT0gUFREX05PVEFDQ0VTU0VEKSB7CisJCXByX2VycigiJXM6IHJlcSAlZCBQVEQgJXAgVW50b3VjaGVkIGJ5IElTUDEzNjJcbiIsIF9fZnVuY19fLAorCQkgICAgZXAtPm51bV9yZXEsIHB0ZCk7CisJCWNjID0gUFREX0RFVk5PVFJFU1A7CisJfQorCisJc2hvcnRfb2sgPSAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKTsKKwlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwkvKiBEYXRhIHVuZGVycnVuIGlzIHNwZWNpYWwuIEZvciBhbGxvd2VkIHVuZGVycnVuCisJICAgd2UgY2xlYXIgdGhlIGVycm9yIGFuZCBjb250aW51ZSBhcyBub3JtYWwuIEZvcgorCSAgIGZvcmJpZGRlbiB1bmRlcnJ1biB3ZSBmaW5pc2ggdGhlIERBVEEgc3RhZ2UKKwkgICBpbW1lZGlhdGVseSB3aGlsZSBmb3IgY29udHJvbCB0cmFuc2ZlciwKKwkgICB3ZSBkbyBhIFNUQVRVUyBzdGFnZS4KKwkqLworCWlmIChjYyA9PSBQVERfREFUQVVOREVSUlVOKSB7CisJCWlmIChzaG9ydF9vaykgeworCQkJREJHKDEsICIlczogcmVxICVkIEFsbG93ZWQgZGF0YSB1bmRlcnJ1biBzaG9ydF8lc29rICVkLyVkLyVkIGJ5dGVcbiIsCisJCQkgICAgX19mdW5jX18sIGVwLT5udW1fcmVxLCBzaG9ydF9vayA/ICIiIDogIm5vdF8iLAorCQkJICAgIFBURF9HRVRfQ09VTlQocHRkKSwgZXAtPm1heHBhY2tldCwgbGVuKTsKKwkJCWNjID0gUFREX0NDX05PRVJST1I7CisJCQl1cmJzdGF0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCURCRygxLCAiJXM6IHJlcSAlZCBEYXRhIFVuZGVycnVuICVzIG5leHRwaWQgJTAyeCBzaG9ydF8lc29rICVkLyVkLyVkIGJ5dGVcbiIsCisJCQkgICAgX19mdW5jX18sIGVwLT5udW1fcmVxLAorCQkJICAgIHVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJJTiIgOiAiT1VUIiwgZXAtPm5leHRwaWQsCisJCQkgICAgc2hvcnRfb2sgPyAiIiA6ICJub3RfIiwKKwkJCSAgICBQVERfR0VUX0NPVU5UKHB0ZCksIGVwLT5tYXhwYWNrZXQsIGxlbik7CisJCQlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpIHsKKwkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOworCQkJCS8qIHNhdmUgdGhlIGRhdGEgdW5kZXJydW4gZXJyb3IgY29kZSBmb3IgbGF0ZXIgYW5kCisJCQkJICogcHJvY2VkZSB3aXRoIHRoZSBzdGF0dXMgc3RhZ2UKKwkJCQkgKi8KKwkJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gUFREX0dFVF9DT1VOVChwdGQpOworCQkJCUJVR19PTih1cmItPmFjdHVhbF9sZW5ndGggPiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJCQkJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCQkJdXJiLT5zdGF0dXMgPSBjY190b19lcnJvcltQVERfREFUQVVOREVSUlVOXTsKKwkJCX0gZWxzZSB7CisJCQkJdXNiX3NldHRvZ2dsZSh1ZGV2LCBlcC0+ZXBudW0sIGVwLT5uZXh0cGlkID09IFVTQl9QSURfT1VULAorCQkJCQkgICAgICBQVERfR0VUX1RPR0dMRShwdGQpKTsKKwkJCQl1cmJzdGF0ID0gY2NfdG9fZXJyb3JbUFREX0RBVEFVTkRFUlJVTl07CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChjYyAhPSBQVERfQ0NfTk9FUlJPUikgeworCQlpZiAoKytlcC0+ZXJyb3JfY291bnQgPj0gMyB8fCBjYyA9PSBQVERfQ0NfU1RBTEwgfHwgY2MgPT0gUFREX0RBVEFPVkVSUlVOKSB7CisJCQl1cmJzdGF0ID0gY2NfdG9fZXJyb3JbY2NdOworCQkJREJHKDEsICIlczogcmVxICVkIG5leHRwaWQgJTAyeCwgc3RhdHVzICVkLCBlcnJvciAlZCwgZXJyb3JfY291bnQgJWRcbiIsCisJCQkgICAgX19mdW5jX18sIGVwLT5udW1fcmVxLCBlcC0+bmV4dHBpZCwgdXJic3RhdCwgY2MsCisJCQkgICAgZXAtPmVycm9yX2NvdW50KTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKGVwLT5uZXh0cGlkKSB7CisJY2FzZSBVU0JfUElEX09VVDoKKwkJaWYgKFBURF9HRVRfQ09VTlQocHRkKSAhPSBlcC0+bGVuZ3RoKQorCQkJcHJfZXJyKCIlczogY291bnQ9JWQgbGVuPSVkXG4iLCBfX2Z1bmNfXywKKwkJCSAgIFBURF9HRVRfQ09VTlQocHRkKSwgZXAtPmxlbmd0aCk7CisJCUJVR19PTihQVERfR0VUX0NPVU5UKHB0ZCkgIT0gZXAtPmxlbmd0aCk7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBlcC0+bGVuZ3RoOworCQlCVUdfT04odXJiLT5hY3R1YWxfbGVuZ3RoID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJdXNiX3NldHRvZ2dsZSh1ZGV2LCBlcC0+ZXBudW0sIDEsIFBURF9HRVRfVE9HR0xFKHB0ZCkpOworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgeworCQkJREJHKDMsICIlczogcmVxICVkIHhmZXIgY29tcGxldGUgJWQvJWQgc3RhdHVzICVkIC0+IDBcbiIsIF9fZnVuY19fLAorCQkJICAgIGVwLT5udW1fcmVxLCBsZW4sIGVwLT5tYXhwYWNrZXQsIHVyYnN0YXQpOworCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKSB7CisJCQkJREJHKDMsICIlczogcmVxICVkICVzIFdhaXQgZm9yIEFDS1xuIiwgX19mdW5jX18sCisJCQkJICAgIGVwLT5udW1fcmVxLAorCQkJCSAgICB1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiSU4iIDogIk9VVCIpOworCQkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9BQ0s7CisJCQl9IGVsc2UgeworCQkJCWlmIChsZW4gJSBlcC0+bWF4cGFja2V0IHx8CisJCQkJICAgICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkpIHsKKwkJCQkJdXJic3RhdCA9IDA7CisJCQkJCURCRygzLCAiJXM6IHJlcSAlZCBVUkIgJXMgc3RhdHVzICVkIGNvdW50ICVkLyVkLyVkXG4iLAorCQkJCQkgICAgX19mdW5jX18sIGVwLT5udW1fcmVxLCB1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiSU4iIDogIk9VVCIsCisJCQkJCSAgICB1cmJzdGF0LCBsZW4sIGVwLT5tYXhwYWNrZXQsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX1BJRF9JTjoKKwkJbGVuID0gUFREX0dFVF9DT1VOVChwdGQpOworCQlCVUdfT04obGVuID4gZXAtPmxlbmd0aCk7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBsZW47CisJCUJVR19PTih1cmItPmFjdHVhbF9sZW5ndGggPiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIGVwLT5lcG51bSwgMCwgUFREX0dFVF9UT0dHTEUocHRkKSk7CisJCS8qIGlmIHRyYW5zZmVyIGNvbXBsZXRlZCBvciAoYWxsb3dlZCkgZGF0YSB1bmRlcnJ1biAqLworCQlpZiAoKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9PSB1cmItPmFjdHVhbF9sZW5ndGgpIHx8CisJCSAgICBsZW4gJSBlcC0+bWF4cGFja2V0KSB7CisJCQlEQkcoMywgIiVzOiByZXEgJWQgeGZlciBjb21wbGV0ZSAlZC8lZCBzdGF0dXMgJWQgLT4gMFxuIiwgX19mdW5jX18sCisJCQkgICAgZXAtPm51bV9yZXEsIGxlbiwgZXAtPm1heHBhY2tldCwgdXJic3RhdCk7CisJCQlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpIHsKKwkJCQlEQkcoMywgIiVzOiByZXEgJWQgJXMgV2FpdCBmb3IgQUNLXG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgZXAtPm51bV9yZXEsCisJCQkJICAgIHVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJJTiIgOiAiT1VUIik7CisJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0FDSzsKKwkJCX0gZWxzZSB7CisJCQkJdXJic3RhdCA9IDA7CisJCQkJREJHKDMsICIlczogcmVxICVkIFVSQiAlcyBzdGF0dXMgJWQgY291bnQgJWQvJWQvJWRcbiIsCisJCQkJICAgIF9fZnVuY19fLCBlcC0+bnVtX3JlcSwgdXNiX3BpcGVpbih1cmItPnBpcGUpID8gIklOIiA6ICJPVVQiLAorCQkJCSAgICB1cmJzdGF0LCBsZW4sIGVwLT5tYXhwYWNrZXQsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX1NFVFVQOgorCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID09IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0FDSzsKKwkJfSBlbHNlIGlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIDAsIDEsIDEpOworCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX09VVDsKKwkJfSBlbHNlIHsKKwkJCXVzYl9zZXR0b2dnbGUodWRldiwgMCwgMCwgMSk7CisJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfSU47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX0FDSzoKKwkJREJHKDMsICIlczogcmVxICVkIGdvdCBBQ0sgJWQgLT4gMFxuIiwgX19mdW5jX18sIGVwLT5udW1fcmVxLAorCQkgICAgdXJic3RhdCk7CisJCVdBUk5fT04odXJic3RhdCAhPSAtRUlOUFJPR1JFU1MpOworCQl1cmJzdGF0ID0gMDsKKwkJZXAtPm5leHRwaWQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJfQorCisgb3V0OgorCWlmICh1cmJzdGF0ICE9IC1FSU5QUk9HUkVTUykgeworCQlEQkcoMiwgIiVzOiBGaW5pc2hpbmcgZXAgJXAgcmVxICVkIHVyYiAlcCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLAorCQkgICAgZXAsIGVwLT5udW1fcmVxLCB1cmIsIHVyYnN0YXQpOworCQlmaW5pc2hfcmVxdWVzdChpc3AxMzYyX2hjZCwgZXAsIHVyYiwgdXJic3RhdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfdW5saW5rcyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVwLCB0bXAsICZpc3AxMzYyX2hjZC0+cmVtb3ZlX2xpc3QsIHJlbW92ZV9saXN0KSB7CisJCXN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEgPQorCQkJZ2V0X3B0ZF9xdWV1ZShpc3AxMzYyX2hjZCwgZXAtPnB0ZF9vZmZzZXQpOworCQlpbnQgaW5kZXggPSBlcC0+cHRkX2luZGV4OworCisJCUJVR19PTihlcHEgPT0gTlVMTCk7CisJCWlmIChpbmRleCA+PSAwKSB7CisJCQlEQkcoMSwgIiVzOiByZW1vdmUgUFREWyVkXSAkJTA0eFxuIiwgX19mdW5jX18sIGluZGV4LCBlcC0+cHRkX29mZnNldCk7CisJCQlCVUdfT04oZXAtPm51bV9wdGRzID09IDApOworCQkJcmVsZWFzZV9wdGRfYnVmZmVycyhlcHEsIGVwKTsKKwkJfQorCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5oZXAtPnVyYl9saXN0KSkgeworCQkJc3RydWN0IHVyYiAqdXJiID0gZ2V0X3VyYihlcCk7CisKKwkJCURCRygxLCAiJXM6IEZpbmlzaGluZyByZXEgJWQgZXAgJXAgZnJvbSByZW1vdmVfbGlzdFxuIiwgX19mdW5jX18sCisJCQkgICAgZXAtPm51bV9yZXEsIGVwKTsKKwkJCWZpbmlzaF9yZXF1ZXN0KGlzcDEzNjJfaGNkLCBlcCwgdXJiLCAtRVNIVVRET1dOKTsKKwkJfQorCQlXQVJOX09OKGxpc3RfZW1wdHkoJmVwLT5hY3RpdmUpKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+YWN0aXZlKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmZXAtPmFjdGl2ZSk7CisJCQlEQkcoMSwgIiVzOiBlcCAlcCByZW1vdmVkIGZyb20gYWN0aXZlIGxpc3RcbiIsIF9fZnVuY19fLCBlcCk7CisJCX0KKwkJbGlzdF9kZWxfaW5pdCgmZXAtPnJlbW92ZV9saXN0KTsKKwkJREJHKDEsICIlczogZXAgJXAgcmVtb3ZlZCBmcm9tIHJlbW92ZV9saXN0XG4iLCBfX2Z1bmNfXywgZXApOworCX0KKwlEQkcoMSwgIiVzOiBEb25lXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXRsX3RyYW5zZmVycyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCBpbnQgY291bnQpCit7CisJaWYgKGNvdW50ID4gMCkgeworCQlpZiAoY291bnQgPCBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLnB0ZF9jb3VudCkKKwkJCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQVRMRFRDLCBjb3VudCk7CisJCWlzcDEzNjJfZW5hYmxlX2ludChpc3AxMzYyX2hjZCwgSEN1UElOVF9BVEwpOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTFNLSVAsIGlzcDEzNjJfaGNkLT5hdGxfcXVldWUuc2tpcF9tYXApOworCQlpc3AxMzYyX3NldF9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgSENCVUZTVEFUX0FUTF9BQ1RJVkUpOworCX0gZWxzZQorCQlpc3AxMzYyX2VuYWJsZV9pbnQoaXNwMTM2Ml9oY2QsIEhDdVBJTlRfU09GKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9pbnRsX3RyYW5zZmVycyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCWlzcDEzNjJfZW5hYmxlX2ludChpc3AxMzYyX2hjZCwgSEN1UElOVF9JTlRMKTsKKwlpc3AxMzYyX3NldF9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgSENCVUZTVEFUX0lOVExfQUNUSVZFKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExTS0lQLCBpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5za2lwX21hcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfaXN0bF90cmFuc2ZlcnMoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgaW50IGZsaXApCit7CisJaXNwMTM2Ml9lbmFibGVfaW50KGlzcDEzNjJfaGNkLCBmbGlwID8gSEN1UElOVF9JU1RMMSA6IEhDdVBJTlRfSVNUTDApOworCWlzcDEzNjJfc2V0X21hc2sxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCBmbGlwID8KKwkJCSAgIEhDQlVGU1RBVF9JU1RMMV9GVUxMIDogSENCVUZTVEFUX0lTVEwwX0ZVTEwpOworfQorCitzdGF0aWMgaW50IHN1Ym1pdF9yZXEoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgc3RydWN0IHVyYiAqdXJiLAorCQkgICAgICBzdHJ1Y3QgaXNwMTM2Ml9lcCAqZXAsIHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEpCit7CisJaW50IGluZGV4ID0gZXBxLT5mcmVlX3B0ZDsKKworCXByZXBhcmVfcHRkKGlzcDEzNjJfaGNkLCB1cmIsIGVwLCBlcHEsIDApOworCWluZGV4ID0gY2xhaW1fcHRkX2J1ZmZlcnMoZXBxLCBlcCwgZXAtPmxlbmd0aCk7CisJaWYgKGluZGV4ID09IC1FTk9NRU0pIHsKKwkJREJHKDEsICIlczogcmVxICVkIE5vIGZyZWUgJXMgUFREIGF2YWlsYWJsZTogJWQsICUwOGx4OiUwOGx4XG4iLCBfX2Z1bmNfXywKKwkJICAgIGVwLT5udW1fcmVxLCBlcHEtPm5hbWUsIGVwLT5udW1fcHRkcywgZXBxLT5idWZfbWFwLCBlcHEtPnNraXBfbWFwKTsKKwkJcmV0dXJuIGluZGV4OworCX0gZWxzZSBpZiAoaW5kZXggPT0gLUVPVkVSRkxPVykgeworCQlEQkcoMSwgIiVzOiByZXEgJWQgTm90IGVub3VnaCBzcGFjZSBmb3IgJWQgYnl0ZSAlcyBQVEQgJWQgJTA4bHg6JTA4bHhcbiIsCisJCSAgICBfX2Z1bmNfXywgZXAtPm51bV9yZXEsIGVwLT5sZW5ndGgsIGVwcS0+bmFtZSwgZXAtPm51bV9wdGRzLAorCQkgICAgZXBxLT5idWZfbWFwLCBlcHEtPnNraXBfbWFwKTsKKwkJcmV0dXJuIGluZGV4OworCX0gZWxzZQorCQlCVUdfT04oaW5kZXggPCAwKTsKKwlsaXN0X2FkZF90YWlsKCZlcC0+YWN0aXZlLCAmZXBxLT5hY3RpdmUpOworCURCRygxLCAiJXM6IGVwICVwIHJlcSAlZCBsZW4gJWQgYWRkZWQgdG8gYWN0aXZlIGxpc3QgJXBcbiIsIF9fZnVuY19fLAorCSAgICBlcCwgZXAtPm51bV9yZXEsIGVwLT5sZW5ndGgsICZlcHEtPmFjdGl2ZSk7CisJREJHKDEsICIlczogU3VibWl0dGluZyAlcyBQVEQgJCUwNHggZm9yIGVwICVwIHJlcSAlZFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwKKwkgICAgZXAtPnB0ZF9vZmZzZXQsIGVwLCBlcC0+bnVtX3JlcSk7CisJaXNwMTM2Ml93cml0ZV9wdGQoaXNwMTM2Ml9oY2QsIGVwLCBlcHEpOworCV9fY2xlYXJfYml0KGVwLT5wdGRfaW5kZXgsICZlcHEtPnNraXBfbWFwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9hdGxfdHJhbnNmZXJzKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QpCit7CisJaW50IHB0ZF9jb3VudCA9IDA7CisJc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSA9ICZpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlOworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlpbnQgZGVmZXIgPSAwOworCisJaWYgKGF0b21pY19yZWFkKCZlcHEtPmZpbmlzaGluZykpIHsKKwkJREJHKDEsICIlczogZmluaXNoX3RyYW5zZmVycyBpcyBhY3RpdmUgZm9yICVzXG4iLCBfX2Z1bmNfXywgZXBxLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXAsICZpc3AxMzYyX2hjZC0+YXN5bmMsIHNjaGVkdWxlKSB7CisJCXN0cnVjdCB1cmIgKnVyYiA9IGdldF91cmIoZXApOworCQlpbnQgcmV0OworCisJCWlmICghbGlzdF9lbXB0eSgmZXAtPmFjdGl2ZSkpIHsKKwkJCURCRygyLCAiJXM6IFNraXBwaW5nIGFjdGl2ZSAlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwgZXApOworCQkJY29udGludWU7CisJCX0KKworCQlEQkcoMSwgIiVzOiBQcm9jZXNzaW5nICVzIGVwICVwIHJlcSAlZFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwKKwkJICAgIGVwLCBlcC0+bnVtX3JlcSk7CisKKwkJcmV0ID0gc3VibWl0X3JlcShpc3AxMzYyX2hjZCwgdXJiLCBlcCwgZXBxKTsKKwkJaWYgKHJldCA9PSAtRU5PTUVNKSB7CisJCQlkZWZlciA9IDE7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChyZXQgPT0gLUVPVkVSRkxPVykgeworCQkJZGVmZXIgPSAxOworCQkJY29udGludWU7CisJCX0KKyNpZmRlZiBCVUdHWV9QWEEyWFhfVURDX1VTQlRFU1QKKwkJZGVmZXIgPSBlcC0+bmV4dHBpZCA9PSBVU0JfUElEX1NFVFVQOworI2VuZGlmCisJCXB0ZF9jb3VudCsrOworCX0KKworCS8qIEF2b2lkIHN0YXJ2aW5nIG9mIGVuZHBvaW50cyAqLworCWlmIChpc3AxMzYyX2hjZC0+YXN5bmMubmV4dCAhPSBpc3AxMzYyX2hjZC0+YXN5bmMucHJldikgeworCQlEQkcoMiwgIiVzOiBDeWNsaW5nIEFTWU5DIHNjaGVkdWxlICVkXG4iLCBfX2Z1bmNfXywgcHRkX2NvdW50KTsKKwkJbGlzdF9tb3ZlKCZpc3AxMzYyX2hjZC0+YXN5bmMsIGlzcDEzNjJfaGNkLT5hc3luYy5uZXh0KTsKKwl9CisJaWYgKHB0ZF9jb3VudCB8fCBkZWZlcikKKwkJZW5hYmxlX2F0bF90cmFuc2ZlcnMoaXNwMTM2Ml9oY2QsIGRlZmVyID8gMCA6IHB0ZF9jb3VudCk7CisKKwllcHEtPnB0ZF9jb3VudCArPSBwdGRfY291bnQ7CisJaWYgKGVwcS0+cHRkX2NvdW50ID4gZXBxLT5zdGF0X21heHB0ZHMpIHsKKwkJZXBxLT5zdGF0X21heHB0ZHMgPSBlcHEtPnB0ZF9jb3VudDsKKwkJREJHKDAsICIlczogbWF4X3B0ZHM6ICVkXG4iLCBfX2Z1bmNfXywgZXBxLT5zdGF0X21heHB0ZHMpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RhcnRfaW50bF90cmFuc2ZlcnMoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlpbnQgcHRkX2NvdW50ID0gMDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxID0gJmlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlOworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKworCWlmIChhdG9taWNfcmVhZCgmZXBxLT5maW5pc2hpbmcpKSB7CisJCURCRygxLCAiJXM6IGZpbmlzaF90cmFuc2ZlcnMgaXMgYWN0aXZlIGZvciAlc1xuIiwgX19mdW5jX18sIGVwcS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVwLCAmaXNwMTM2Ml9oY2QtPnBlcmlvZGljLCBzY2hlZHVsZSkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSBnZXRfdXJiKGVwKTsKKwkJaW50IHJldDsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5hY3RpdmUpKSB7CisJCQlEQkcoMSwgIiVzOiBTa2lwcGluZyBhY3RpdmUgJXMgZXAgJXBcbiIsIF9fZnVuY19fLAorCQkJICAgIGVwcS0+bmFtZSwgZXApOworCQkJY29udGludWU7CisJCX0KKworCQlEQkcoMSwgIiVzOiBQcm9jZXNzaW5nICVzIGVwICVwIHJlcSAlZFxuIiwgX19mdW5jX18sCisJCSAgICBlcHEtPm5hbWUsIGVwLCBlcC0+bnVtX3JlcSk7CisJCXJldCA9IHN1Ym1pdF9yZXEoaXNwMTM2Ml9oY2QsIHVyYiwgZXAsIGVwcSk7CisJCWlmIChyZXQgPT0gLUVOT01FTSkKKwkJCWJyZWFrOworCQllbHNlIGlmIChyZXQgPT0gLUVPVkVSRkxPVykKKwkJCWNvbnRpbnVlOworCQlwdGRfY291bnQrKzsKKwl9CisKKwlpZiAocHRkX2NvdW50KSB7CisJCXN0YXRpYyBpbnQgbGFzdF9jb3VudDsKKworCQlpZiAocHRkX2NvdW50ICE9IGxhc3RfY291bnQpIHsKKwkJCURCRygwLCAiJXM6IHB0ZF9jb3VudDogJWRcbiIsIF9fZnVuY19fLCBwdGRfY291bnQpOworCQkJbGFzdF9jb3VudCA9IHB0ZF9jb3VudDsKKwkJfQorCQllbmFibGVfaW50bF90cmFuc2ZlcnMoaXNwMTM2Ml9oY2QpOworCX0KKworCWVwcS0+cHRkX2NvdW50ICs9IHB0ZF9jb3VudDsKKwlpZiAoZXBxLT5wdGRfY291bnQgPiBlcHEtPnN0YXRfbWF4cHRkcykKKwkJZXBxLT5zdGF0X21heHB0ZHMgPSBlcHEtPnB0ZF9jb3VudDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV4dF9wdGQoc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgKmVwcSwgc3RydWN0IGlzcDEzNjJfZXAgKmVwKQoreworCXUxNiBwdGRfb2Zmc2V0ID0gZXAtPnB0ZF9vZmZzZXQ7CisJaW50IG51bV9wdGRzID0gKGVwLT5sZW5ndGggKyBQVERfSEVBREVSX1NJWkUgKyAoZXBxLT5ibGtfc2l6ZSAtIDEpKSAvIGVwcS0+YmxrX3NpemU7CisKKwlEQkcoMiwgIiVzOiBQVEQgb2Zmc2V0ICQlMDR4ICsgJTA0eCA9PiAlZCAqICUwNHggLT4gJCUwNHhcbiIsIF9fZnVuY19fLCBwdGRfb2Zmc2V0LAorCSAgICBlcC0+bGVuZ3RoLCBudW1fcHRkcywgZXBxLT5ibGtfc2l6ZSwgcHRkX29mZnNldCArIG51bV9wdGRzICogZXBxLT5ibGtfc2l6ZSk7CisKKwlwdGRfb2Zmc2V0ICs9IG51bV9wdGRzICogZXBxLT5ibGtfc2l6ZTsKKwlpZiAocHRkX29mZnNldCA8IGVwcS0+YnVmX3N0YXJ0ICsgZXBxLT5idWZfc2l6ZSkKKwkJcmV0dXJuIHB0ZF9vZmZzZXQ7CisJZWxzZQorCQlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfaXNvX3RyYW5zZmVycyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCWludCBwdGRfY291bnQgPSAwOworCWludCBmbGlwID0gaXNwMTM2Ml9oY2QtPmlzdGxfZmxpcDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxOworCWludCBwdGRfb2Zmc2V0OworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqdG1wOworCXUxNiBmbm8gPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRk1OVU0pOworCisgZmlsbDI6CisJZXBxID0gJmlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlW2ZsaXBdOworCWlmIChhdG9taWNfcmVhZCgmZXBxLT5maW5pc2hpbmcpKSB7CisJCURCRygxLCAiJXM6IGZpbmlzaF90cmFuc2ZlcnMgaXMgYWN0aXZlIGZvciAlc1xuIiwgX19mdW5jX18sIGVwcS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJmVwcS0+YWN0aXZlKSkKKwkJcmV0dXJuOworCisJcHRkX29mZnNldCA9IGVwcS0+YnVmX3N0YXJ0OworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcCwgdG1wLCAmaXNwMTM2Ml9oY2QtPmlzb2MsIHNjaGVkdWxlKSB7CisJCXN0cnVjdCB1cmIgKnVyYiA9IGdldF91cmIoZXApOworCQlzMTYgZGlmZiA9IGZubyAtICh1MTYpdXJiLT5zdGFydF9mcmFtZTsKKworCQlEQkcoMSwgIiVzOiBQcm9jZXNzaW5nICVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXBxLT5uYW1lLCBlcCk7CisKKwkJaWYgKGRpZmYgPiB1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB7CisJCQkvKiB0aW1lIGZyYW1lIGZvciB0aGlzIFVSQiBoYXMgZWxhcHNlZCAqLworCQkJZmluaXNoX3JlcXVlc3QoaXNwMTM2Ml9oY2QsIGVwLCB1cmIsIC1FT1ZFUkZMT1cpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoZGlmZiA8IC0xKSB7CisJCQkvKiBVUkIgaXMgbm90IGR1ZSBpbiB0aGlzIGZyYW1lIG9yIHRoZSBuZXh0IG9uZS4KKwkJCSAqIENvbXBhcmluZyB3aXRoICctMScgaW5zdGVhZCBvZiAnMCcgYWNjb3VudHMgZm9yIGRvdWJsZQorCQkJICogYnVmZmVyaW5nIGluIHRoZSBJU1AxMzYyIHdoaWNoIGVuYWJsZXMgdXMgdG8gcXVldWUgdGhlIFBURAorCQkJICogb25lIGZyYW1lIGFoZWFkIG9mIHRpbWUKKwkJCSAqLworCQl9IGVsc2UgaWYgKGRpZmYgPT0gLTEpIHsKKwkJCS8qIHN1Ym1pdCBQVEQncyB0aGF0IGFyZSBkdWUgaW4gdGhlIG5leHQgZnJhbWUgKi8KKwkJCXByZXBhcmVfcHRkKGlzcDEzNjJfaGNkLCB1cmIsIGVwLCBlcHEsIGZubyk7CisJCQlpZiAocHRkX29mZnNldCArIFBURF9IRUFERVJfU0laRSArIGVwLT5sZW5ndGggPgorCQkJICAgIGVwcS0+YnVmX3N0YXJ0ICsgZXBxLT5idWZfc2l6ZSkgeworCQkJCXByX2VycigiJXM6IE5vdCBlbm91Z2ggSVNPIGJ1ZmZlciBzcGFjZSBmb3IgJWQgYnl0ZSBQVERcbiIsCisJCQkJICAgIF9fZnVuY19fLCBlcC0+bGVuZ3RoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVwLT5wdGRfb2Zmc2V0ID0gcHRkX29mZnNldDsKKwkJCWxpc3RfYWRkX3RhaWwoJmVwLT5hY3RpdmUsICZlcHEtPmFjdGl2ZSk7CisKKwkJCXB0ZF9vZmZzZXQgPSBuZXh0X3B0ZChlcHEsIGVwKTsKKwkJCWlmIChwdGRfb2Zmc2V0IDwgMCkgeworCQkJCXByX3dhcm5pbmcoIiVzOiByZXEgJWQgTm8gbW9yZSAlcyBQVEQgYnVmZmVycyBhdmFpbGFibGVcbiIsIF9fZnVuY19fLAorCQkJCSAgICAgZXAtPm51bV9yZXEsIGVwcS0+bmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlcCwgJmVwcS0+YWN0aXZlLCBhY3RpdmUpIHsKKwkJaWYgKGVwcS0+YWN0aXZlLm5leHQgPT0gJmVwLT5hY3RpdmUpCisJCQllcC0+cHRkLm1wcyB8PSBQVERfTEFTVF9NU0s7CisJCWlzcDEzNjJfd3JpdGVfcHRkKGlzcDEzNjJfaGNkLCBlcCwgZXBxKTsKKwkJcHRkX2NvdW50Kys7CisJfQorCisJaWYgKHB0ZF9jb3VudCkKKwkJZW5hYmxlX2lzdGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkLCBmbGlwKTsKKworCWVwcS0+cHRkX2NvdW50ICs9IHB0ZF9jb3VudDsKKwlpZiAoZXBxLT5wdGRfY291bnQgPiBlcHEtPnN0YXRfbWF4cHRkcykKKwkJZXBxLT5zdGF0X21heHB0ZHMgPSBlcHEtPnB0ZF9jb3VudDsKKworCS8qIGNoZWNrLCB3aGV0aGVyIHRoZSBzZWNvbmQgSVNUTCBidWZmZXIgbWF5IGFsc28gYmUgZmlsbGVkICovCisJaWYgKCEoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQpICYKKwkgICAgICAoZmxpcCA/IEhDQlVGU1RBVF9JU1RMMF9GVUxMIDogSENCVUZTVEFUX0lTVEwxX0ZVTEwpKSkgeworCQlmbm8rKzsKKwkJcHRkX2NvdW50ID0gMDsKKwkJZmxpcCA9IDEgLSBmbGlwOworCQlnb3RvIGZpbGwyOworCX0KK30KKworc3RhdGljIHZvaWQgZmluaXNoX3RyYW5zZmVycyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB1bnNpZ25lZCBsb25nIGRvbmVfbWFwLAorCQkJICAgICBzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxKQoreworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqdG1wOworCisJaWYgKGxpc3RfZW1wdHkoJmVwcS0+YWN0aXZlKSkgeworCQlEQkcoMSwgIiVzOiBOb3RoaW5nIHRvIGRvIGZvciAlcyBxdWV1ZVxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlEQkcoMSwgIiVzOiBGaW5pc2hpbmcgJXMgdHJhbnNmZXJzICUwOGx4XG4iLCBfX2Z1bmNfXywgZXBxLT5uYW1lLCBkb25lX21hcCk7CisKKwlhdG9taWNfaW5jKCZlcHEtPmZpbmlzaGluZyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVwLCB0bXAsICZlcHEtPmFjdGl2ZSwgYWN0aXZlKSB7CisJCWludCBpbmRleCA9IGVwLT5wdGRfaW5kZXg7CisKKwkJREJHKDEsICIlczogQ2hlY2tpbmcgJXMgUFREWyUwMnhdICQlMDR4XG4iLCBfX2Z1bmNfXywgZXBxLT5uYW1lLAorCQkgICAgaW5kZXgsIGVwLT5wdGRfb2Zmc2V0KTsKKworCQlCVUdfT04oaW5kZXggPCAwKTsKKwkJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KGluZGV4LCAmZG9uZV9tYXApKSB7CisJCQlpc3AxMzYyX3JlYWRfcHRkKGlzcDEzNjJfaGNkLCBlcCwgZXBxKTsKKwkJCWVwcS0+ZnJlZV9wdGQgPSBpbmRleDsKKwkJCUJVR19PTihlcC0+bnVtX3B0ZHMgPT0gMCk7CisJCQlyZWxlYXNlX3B0ZF9idWZmZXJzKGVwcSwgZXApOworCisJCQlEQkcoMSwgIiVzOiBlcCAlcCByZXEgJWQgcmVtb3ZlZCBmcm9tIGFjdGl2ZSBsaXN0XG4iLCBfX2Z1bmNfXywKKwkJCSAgICBlcCwgZXAtPm51bV9yZXEpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cmVtb3ZlX2xpc3QpKSB7CisJCQkJbGlzdF9kZWxfaW5pdCgmZXAtPnJlbW92ZV9saXN0KTsKKwkJCQlEQkcoMSwgIiVzOiBlcCAlcCByZW1vdmVkIGZyb20gcmVtb3ZlIGxpc3RcbiIsIF9fZnVuY19fLCBlcCk7CisJCQl9CisJCQlEQkcoMSwgIiVzOiBQb3N0cHJvY2Vzc2luZyAlcyBlcCAlcCByZXEgJWRcbiIsIF9fZnVuY19fLCBlcHEtPm5hbWUsCisJCQkgICAgZXAsIGVwLT5udW1fcmVxKTsKKwkJCXBvc3Rwcm9jX2VwKGlzcDEzNjJfaGNkLCBlcCk7CisJCX0KKwkJaWYgKCFkb25lX21hcCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZG9uZV9tYXApCisJCXByX3dhcm5pbmcoIiVzOiBkb25lX21hcCBub3QgY2xlYXI6ICUwOGx4OiUwOGx4XG4iLCBfX2Z1bmNfXywgZG9uZV9tYXAsCisJCSAgICAgZXBxLT5za2lwX21hcCk7CisJYXRvbWljX2RlYygmZXBxLT5maW5pc2hpbmcpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfaXNvX3RyYW5zZmVycyhzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCBzdHJ1Y3QgaXNwMTM2Ml9lcF9xdWV1ZSAqZXBxKQoreworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlzdHJ1Y3QgaXNwMTM2Ml9lcCAqdG1wOworCisJaWYgKGxpc3RfZW1wdHkoJmVwcS0+YWN0aXZlKSkgeworCQlEQkcoMSwgIiVzOiBOb3RoaW5nIHRvIGRvIGZvciAlcyBxdWV1ZVxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlEQkcoMSwgIiVzOiBGaW5pc2hpbmcgJXMgdHJhbnNmZXJzXG4iLCBfX2Z1bmNfXywgZXBxLT5uYW1lKTsKKworCWF0b21pY19pbmMoJmVwcS0+ZmluaXNoaW5nKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXAsIHRtcCwgJmVwcS0+YWN0aXZlLCBhY3RpdmUpIHsKKwkJREJHKDEsICIlczogQ2hlY2tpbmcgUFREICQlMDR4XG4iLCBfX2Z1bmNfXywgZXAtPnB0ZF9vZmZzZXQpOworCisJCWlzcDEzNjJfcmVhZF9wdGQoaXNwMTM2Ml9oY2QsIGVwLCBlcHEpOworCQlEQkcoMSwgIiVzOiBQb3N0cHJvY2Vzc2luZyAlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwcS0+bmFtZSwgZXApOworCQlwb3N0cHJvY19lcChpc3AxMzYyX2hjZCwgZXApOworCX0KKwlXQVJOX09OKGVwcS0+YmxrX3NpemUgIT0gMCk7CisJYXRvbWljX2RlYygmZXBxLT5maW5pc2hpbmcpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXNwMTM2Ml9pcnEoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlpbnQgaGFuZGxlZCA9IDA7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXUxNiBpcnFzdGF0OworCXUxNiBzdmNfbWFzazsKKworCXNwaW5fbG9jaygmaXNwMTM2Ml9oY2QtPmxvY2spOworCisJQlVHX09OKGlzcDEzNjJfaGNkLT5pcnFfYWN0aXZlKyspOworCisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQiwgMCk7CisKKwlpcnFzdGF0ID0gaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKTsKKwlEQkcoMywgIiVzOiBnb3QgSVJRICUwNHg6JTA0eFxuIiwgX19mdW5jX18sIGlycXN0YXQsIGlzcDEzNjJfaGNkLT5pcnFlbmIpOworCisJLyogb25seSBoYW5kbGUgaW50ZXJydXB0cyB0aGF0IGFyZSBjdXJyZW50bHkgZW5hYmxlZCAqLworCWlycXN0YXQgJj0gaXNwMTM2Ml9oY2QtPmlycWVuYjsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBpcnFzdGF0KTsKKwlzdmNfbWFzayA9IGlycXN0YXQ7CisKKwlpZiAoaXJxc3RhdCAmIEhDdVBJTlRfU09GKSB7CisJCWlzcDEzNjJfaGNkLT5pcnFlbmIgJj0gfkhDdVBJTlRfU09GOworCQlpc3AxMzYyX2hjZC0+aXJxX3N0YXRbSVNQMTM2Ml9JTlRfU09GXSsrOworCQloYW5kbGVkID0gMTsKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfU09GOworCQlEQkcoMywgIiVzOiBTT0ZcbiIsIF9fZnVuY19fKTsKKwkJaXNwMTM2Ml9oY2QtPmZtaW5kZXggPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRk1OVU0pOworCQlpZiAoIWxpc3RfZW1wdHkoJmlzcDEzNjJfaGNkLT5yZW1vdmVfbGlzdCkpCisJCQlmaW5pc2hfdW5saW5rcyhpc3AxMzYyX2hjZCk7CisJCWlmICghbGlzdF9lbXB0eSgmaXNwMTM2Ml9oY2QtPmFzeW5jKSAmJiAhKGlycXN0YXQgJiBIQ3VQSU5UX0FUTCkpIHsKKwkJCWlmIChsaXN0X2VtcHR5KCZpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmFjdGl2ZSkpIHsKKwkJCQlzdGFydF9hdGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwkJCX0gZWxzZSB7CisJCQkJaXNwMTM2Ml9lbmFibGVfaW50KGlzcDEzNjJfaGNkLCBIQ3VQSU5UX0FUTCk7CisJCQkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENBVExTS0lQLAorCQkJCQkJICAgIGlzcDEzNjJfaGNkLT5hdGxfcXVldWUuc2tpcF9tYXApOworCQkJCWlzcDEzNjJfc2V0X21hc2sxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCBIQ0JVRlNUQVRfQVRMX0FDVElWRSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaXJxc3RhdCAmIEhDdVBJTlRfSVNUTDApIHsKKwkJaXNwMTM2Ml9oY2QtPmlycV9zdGF0W0lTUDEzNjJfSU5UX0lTVEwwXSsrOworCQloYW5kbGVkID0gMTsKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfSVNUTDA7CisJCWlzcDEzNjJfY2xyX21hc2sxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCBIQ0JVRlNUQVRfSVNUTDBfRlVMTCk7CisJCURCRygxLCAiJXM6IElTVEwwXG4iLCBfX2Z1bmNfXyk7CisJCVdBUk5fT04oKGludCkhIWlzcDEzNjJfaGNkLT5pc3RsX2ZsaXApOworCQlXQVJOX09OKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFUKSAmCisJCQlIQ0JVRlNUQVRfSVNUTDBfQUNUSVZFKTsKKwkJV0FSTl9PTighKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFUKSAmCisJCQlIQ0JVRlNUQVRfSVNUTDBfRE9ORSkpOworCQlpc3AxMzYyX2hjZC0+aXJxZW5iICY9IH5IQ3VQSU5UX0lTVEwwOworCX0KKworCWlmIChpcnFzdGF0ICYgSEN1UElOVF9JU1RMMSkgeworCQlpc3AxMzYyX2hjZC0+aXJxX3N0YXRbSVNQMTM2Ml9JTlRfSVNUTDFdKys7CisJCWhhbmRsZWQgPSAxOworCQlzdmNfbWFzayAmPSB+SEN1UElOVF9JU1RMMTsKKwkJaXNwMTM2Ml9jbHJfbWFzazE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQsIEhDQlVGU1RBVF9JU1RMMV9GVUxMKTsKKwkJREJHKDEsICIlczogSVNUTDFcbiIsIF9fZnVuY19fKTsKKwkJV0FSTl9PTighKGludClpc3AxMzYyX2hjZC0+aXN0bF9mbGlwKTsKKwkJV0FSTl9PTihpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCkgJgorCQkJSENCVUZTVEFUX0lTVEwxX0FDVElWRSk7CisJCVdBUk5fT04oIShpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCkgJgorCQkJSENCVUZTVEFUX0lTVEwxX0RPTkUpKTsKKwkJaXNwMTM2Ml9oY2QtPmlycWVuYiAmPSB+SEN1UElOVF9JU1RMMTsKKwl9CisKKwlpZiAoaXJxc3RhdCAmIChIQ3VQSU5UX0lTVEwwIHwgSEN1UElOVF9JU1RMMSkpIHsKKwkJV0FSTl9PTigoaXJxc3RhdCAmIChIQ3VQSU5UX0lTVEwwIHwgSEN1UElOVF9JU1RMMSkpID09CisJCQkoSEN1UElOVF9JU1RMMCB8IEhDdVBJTlRfSVNUTDEpKTsKKwkJZmluaXNoX2lzb190cmFuc2ZlcnMoaXNwMTM2Ml9oY2QsCisJCQkJICAgICAmaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaXNwMTM2Ml9oY2QtPmlzdGxfZmxpcF0pOworCQlzdGFydF9pc29fdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwkJaXNwMTM2Ml9oY2QtPmlzdGxfZmxpcCA9IDEgLSBpc3AxMzYyX2hjZC0+aXN0bF9mbGlwOworCX0KKworCWlmIChpcnFzdGF0ICYgSEN1UElOVF9JTlRMKSB7CisJCXUzMiBkb25lX21hcCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMRE9ORSk7CisJCXUzMiBza2lwX21hcCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMU0tJUCk7CisJCWlzcDEzNjJfaGNkLT5pcnFfc3RhdFtJU1AxMzYyX0lOVF9JTlRMXSsrOworCisJCURCRygyLCAiJXM6IElOVExcbiIsIF9fZnVuY19fKTsKKworCQlzdmNfbWFzayAmPSB+SEN1UElOVF9JTlRMOworCisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTFNLSVAsIHNraXBfbWFwIHwgZG9uZV9tYXApOworCQlpZiAofihkb25lX21hcCB8IHNraXBfbWFwKSA9PSAwKQorCQkJLyogQWxsIFBURHMgYXJlIGZpbmlzaGVkLCBkaXNhYmxlIElOVEwgcHJvY2Vzc2luZyBlbnRpcmVseSAqLworCQkJaXNwMTM2Ml9jbHJfbWFzazE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQsIEhDQlVGU1RBVF9JTlRMX0FDVElWRSk7CisKKwkJaGFuZGxlZCA9IDE7CisJCVdBUk5fT04oIWRvbmVfbWFwKTsKKwkJaWYgKGRvbmVfbWFwKSB7CisJCQlEQkcoMywgIiVzOiBJTlRMIGRvbmVfbWFwICUwOHhcbiIsIF9fZnVuY19fLCBkb25lX21hcCk7CisJCQlmaW5pc2hfdHJhbnNmZXJzKGlzcDEzNjJfaGNkLCBkb25lX21hcCwgJmlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlKTsKKwkJCXN0YXJ0X2ludGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwkJfQorCX0KKworCWlmIChpcnFzdGF0ICYgSEN1UElOVF9BVEwpIHsKKwkJdTMyIGRvbmVfbWFwID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTERPTkUpOworCQl1MzIgc2tpcF9tYXAgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQVRMU0tJUCk7CisJCWlzcDEzNjJfaGNkLT5pcnFfc3RhdFtJU1AxMzYyX0lOVF9BVExdKys7CisKKwkJREJHKDIsICIlczogQVRMXG4iLCBfX2Z1bmNfXyk7CisKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfQVRMOworCisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQVRMU0tJUCwgc2tpcF9tYXAgfCBkb25lX21hcCk7CisJCWlmICh+KGRvbmVfbWFwIHwgc2tpcF9tYXApID09IDApCisJCQlpc3AxMzYyX2Nscl9tYXNrMTYoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCwgSENCVUZTVEFUX0FUTF9BQ1RJVkUpOworCQlpZiAoZG9uZV9tYXApIHsKKwkJCURCRygzLCAiJXM6IEFUTCBkb25lX21hcCAlMDh4XG4iLCBfX2Z1bmNfXywgZG9uZV9tYXApOworCQkJZmluaXNoX3RyYW5zZmVycyhpc3AxMzYyX2hjZCwgZG9uZV9tYXAsICZpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlKTsKKwkJCXN0YXJ0X2F0bF90cmFuc2ZlcnMoaXNwMTM2Ml9oY2QpOworCQl9CisJCWhhbmRsZWQgPSAxOworCX0KKworCWlmIChpcnFzdGF0ICYgSEN1UElOVF9PUFIpIHsKKwkJdTMyIGludHN0YXQgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UU1RBVCk7CisJCWlzcDEzNjJfaGNkLT5pcnFfc3RhdFtJU1AxMzYyX0lOVF9PUFJdKys7CisKKwkJc3ZjX21hc2sgJj0gfkhDdVBJTlRfT1BSOworCQlEQkcoMiwgIiVzOiBPUFIgJTA4eDolMDh4XG4iLCBfX2Z1bmNfXywgaW50c3RhdCwgaXNwMTM2Ml9oY2QtPmludGVuYik7CisJCWludHN0YXQgJj0gaXNwMTM2Ml9oY2QtPmludGVuYjsKKwkJaWYgKGludHN0YXQgJiBPSENJX0lOVFJfVUUpIHsKKwkJCXByX2VycigiVW5yZWNvdmVyYWJsZSBlcnJvclxuIik7CisJCQkvKiBGSVhNRTogZG8gaGVyZSByZXNldCBvciBjbGVhbnVwIG9yIHdoYXRldmVyICovCisJCX0KKwkJaWYgKGludHN0YXQgJiBPSENJX0lOVFJfUkhTQykgeworCQkJaXNwMTM2Ml9oY2QtPnJoc3RhdHVzID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTKTsKKwkJCWlzcDEzNjJfaGNkLT5yaHBvcnRbMF0gPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSk7CisJCQlpc3AxMzYyX2hjZC0+cmhwb3J0WzFdID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDIpOworCQl9CisJCWlmIChpbnRzdGF0ICYgT0hDSV9JTlRSX1JEKSB7CisJCQlwcl9pbmZvKCIlczogUkVTVU1FIERFVEVDVEVEXG4iLCBfX2Z1bmNfXyk7CisJCQlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wpOworCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKKwkJfQorCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVFNUQVQsIGludHN0YXQpOworCQlpcnFzdGF0ICY9IH5IQ3VQSU5UX09QUjsKKwkJaGFuZGxlZCA9IDE7CisJfQorCisJaWYgKGlycXN0YXQgJiBIQ3VQSU5UX1NVU1ApIHsKKwkJaXNwMTM2Ml9oY2QtPmlycV9zdGF0W0lTUDEzNjJfSU5UX1NVU1BdKys7CisJCWhhbmRsZWQgPSAxOworCQlzdmNfbWFzayAmPSB+SEN1UElOVF9TVVNQOworCisJCXByX2luZm8oIiVzOiBTVVNQRU5EIElSUVxuIiwgX19mdW5jX18pOworCX0KKworCWlmIChpcnFzdGF0ICYgSEN1UElOVF9DTEtSRFkpIHsKKwkJaXNwMTM2Ml9oY2QtPmlycV9zdGF0W0lTUDEzNjJfSU5UX0NMS1JEWV0rKzsKKwkJaGFuZGxlZCA9IDE7CisJCWlzcDEzNjJfaGNkLT5pcnFlbmIgJj0gfkhDdVBJTlRfQ0xLUkRZOworCQlzdmNfbWFzayAmPSB+SEN1UElOVF9DTEtSRFk7CisJCXByX2luZm8oIiVzOiBDTEtSRFkgSVJRXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJaWYgKHN2Y19tYXNrKQorCQlwcl9lcnIoIiVzOiBVbnNlcnZpY2VkIGludGVycnVwdChzKSAlMDR4XG4iLCBfX2Z1bmNfXywgc3ZjX21hc2spOworCisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQiwgaXNwMTM2Ml9oY2QtPmlycWVuYik7CisJaXNwMTM2Ml9oY2QtPmlycV9hY3RpdmUtLTsKKwlzcGluX3VubG9jaygmaXNwMTM2Ml9oY2QtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJTUFYX1BFUklPRElDX0xPQUQJOTAwCS8qIG91dCBvZiAxMDAwIHVzZWMgKi8KK3N0YXRpYyBpbnQgYmFsYW5jZShzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB1MTYgaW50ZXJ2YWwsIHUxNiBsb2FkKQoreworCWludCBpLCBicmFuY2ggPSAtRU5PU1BDOworCisJLyogc2VhcmNoIGZvciB0aGUgbGVhc3QgbG9hZGVkIHNjaGVkdWxlIGJyYW5jaCBvZiB0aGF0IGludGVydmFsCisJICogd2hpY2ggaGFzIGVub3VnaCBiYW5kd2lkdGggbGVmdCB1bnJlc2VydmVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBpbnRlcnZhbDsgaSsrKSB7CisJCWlmIChicmFuY2ggPCAwIHx8IGlzcDEzNjJfaGNkLT5sb2FkW2JyYW5jaF0gPiBpc3AxMzYyX2hjZC0+bG9hZFtpXSkgeworCQkJaW50IGo7CisKKwkJCWZvciAoaiA9IGk7IGogPCBQRVJJT0RJQ19TSVpFOyBqICs9IGludGVydmFsKSB7CisJCQkJaWYgKChpc3AxMzYyX2hjZC0+bG9hZFtqXSArIGxvYWQpID4gTUFYX1BFUklPRElDX0xPQUQpIHsKKwkJCQkJcHJfZXJyKCIlczogbmV3IGxvYWQgJWQgbG9hZFslMDJ4XSAlZCBtYXggJWRcbiIsIF9fZnVuY19fLAorCQkJCQkgICAgbG9hZCwgaiwgaXNwMTM2Ml9oY2QtPmxvYWRbal0sIE1BWF9QRVJJT0RJQ19MT0FEKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGogPCBQRVJJT0RJQ19TSVpFKQorCQkJCWNvbnRpbnVlOworCQkJYnJhbmNoID0gaTsKKwkJfQorCX0KKwlyZXR1cm4gYnJhbmNoOworfQorCisvKiBOQiEgQUxMIHRoZSBjb2RlIGFib3ZlIHRoaXMgcG9pbnQgcnVucyB3aXRoIGlzcDEzNjJfaGNkLT5sb2NrCisgICBoZWxkLCBpcnFzIG9mZgorKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBpc3AxMzYyX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkgICAgICAgc3RydWN0IHVyYiAqdXJiLAorCQkJICAgICAgIGdmcF90IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB1cmItPmRldjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVyYi0+cGlwZTsKKwlpbnQgaXNfb3V0ID0gIXVzYl9waXBlaW4ocGlwZSk7CisJaW50IHR5cGUgPSB1c2JfcGlwZXR5cGUocGlwZSk7CisJaW50IGVwbnVtID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCA9IHVyYi0+ZXA7CisJc3RydWN0IGlzcDEzNjJfZXAgKmVwID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWwgPSAwOworCisJREJHKDMsICIlczogdXJiICVwXG4iLCBfX2Z1bmNfXywgdXJiKTsKKworCWlmICh0eXBlID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJcHJfZXJyKCJJc29jaHJvbm91cyB0cmFuc2ZlcnMgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCVVSQl9EQkcoIiVzOiBGQSAlZCBlcCVkJXMgJXM6IGxlbiAlZCAlcyVzXG4iLCBfX2Z1bmNfXywKKwkJdXNiX3BpcGVkZXZpY2UocGlwZSksIGVwbnVtLAorCQlpc19vdXQgPyAib3V0IiA6ICJpbiIsCisJCXVzYl9waXBlY29udHJvbChwaXBlKSA/ICJjdHJsIiA6CisJCQl1c2JfcGlwZWludChwaXBlKSA/ICJpbnQiIDoKKwkJCXVzYl9waXBlYnVsayhwaXBlKSA/ICJidWxrIiA6CisJCQkiaXNvIiwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkgPyAiWkVST19QQUNLRVQgIiA6ICIiLAorCQkhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSA/CisJCSJzaG9ydF9vayIgOiAiIik7CisKKwkvKiBhdm9pZCBhbGwgYWxsb2NhdGlvbnMgd2l0aGluIHNwaW5sb2NrczogcmVxdWVzdCBvciBlbmRwb2ludCAqLworCWlmICghaGVwLT5oY3ByaXYpIHsKKwkJZXAgPSBrY2FsbG9jKDEsIHNpemVvZiAqZXAsIG1lbV9mbGFncyk7CisJCWlmICghZXApCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwkvKiBkb24ndCBzdWJtaXQgdG8gYSBkZWFkIG9yIGRpc2FibGVkIHBvcnQgKi8KKwlpZiAoISgoaXNwMTM2Ml9oY2QtPnJocG9ydFswXSB8IGlzcDEzNjJfaGNkLT5yaHBvcnRbMV0pICYKKwkgICAgICAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkpIHx8CisJICAgICFIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CisJCWtmcmVlKGVwKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX25vdF9saW5rZWQ7CisJfQorCisJcmV0dmFsID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7CisJaWYgKHJldHZhbCkgeworCQlrZnJlZShlcCk7CisJCWdvdG8gZmFpbF9ub3RfbGlua2VkOworCX0KKworCWlmIChoZXAtPmhjcHJpdikgeworCQllcCA9IGhlcC0+aGNwcml2OworCX0gZWxzZSB7CisJCUlOSVRfTElTVF9IRUFEKCZlcC0+c2NoZWR1bGUpOworCQlJTklUX0xJU1RfSEVBRCgmZXAtPmFjdGl2ZSk7CisJCUlOSVRfTElTVF9IRUFEKCZlcC0+cmVtb3ZlX2xpc3QpOworCQllcC0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCQllcC0+aGVwID0gaGVwOworCQllcC0+ZXBudW0gPSBlcG51bTsKKwkJZXAtPm1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQodWRldiwgdXJiLT5waXBlLCBpc19vdXQpOworCQllcC0+cHRkX29mZnNldCA9IC1FSU5WQUw7CisJCWVwLT5wdGRfaW5kZXggPSAtRUlOVkFMOworCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIGVwbnVtLCBpc19vdXQsIDApOworCisJCWlmICh0eXBlID09IFBJUEVfQ09OVFJPTCkKKwkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9TRVRVUDsKKwkJZWxzZSBpZiAoaXNfb3V0KQorCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX09VVDsKKwkJZWxzZQorCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0lOOworCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCQlpZiAodXJiLT5pbnRlcnZhbCA+IFBFUklPRElDX1NJWkUpCisJCQkJdXJiLT5pbnRlcnZhbCA9IFBFUklPRElDX1NJWkU7CisJCQllcC0+aW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCQkJZXAtPmJyYW5jaCA9IFBFUklPRElDX1NJWkU7CisJCQllcC0+bG9hZCA9IHVzYl9jYWxjX2J1c190aW1lKHVkZXYtPnNwZWVkLCAhaXNfb3V0LAorCQkJCQkJICAgICAodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKSwKKwkJCQkJCSAgICAgdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCBpc19vdXQpKSAvIDEwMDA7CisJCQlicmVhazsKKwkJfQorCQloZXAtPmhjcHJpdiA9IGVwOworCX0KKwllcC0+bnVtX3JlcSA9IGlzcDEzNjJfaGNkLT5yZXFfc2VyaWFsKys7CisKKwkvKiBtYXliZSBwdXQgZW5kcG9pbnQgaW50byBzY2hlZHVsZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCWNhc2UgUElQRV9CVUxLOgorCQlpZiAobGlzdF9lbXB0eSgmZXAtPnNjaGVkdWxlKSkgeworCQkJREJHKDEsICIlczogQWRkaW5nIGVwICVwIHJlcSAlZCB0byBhc3luYyBzY2hlZHVsZVxuIiwKKwkJCQlfX2Z1bmNfXywgZXAsIGVwLT5udW1fcmVxKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmVwLT5zY2hlZHVsZSwgJmlzcDEzNjJfaGNkLT5hc3luYyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXVyYi0+aW50ZXJ2YWwgPSBlcC0+aW50ZXJ2YWw7CisKKwkJLyogdXJiIHN1Ym1pdHRlZCBmb3IgYWxyZWFkeSBleGlzdGluZyBFUCAqLworCQlpZiAoZXAtPmJyYW5jaCA8IFBFUklPRElDX1NJWkUpCisJCQlicmVhazsKKworCQlyZXR2YWwgPSBiYWxhbmNlKGlzcDEzNjJfaGNkLCBlcC0+aW50ZXJ2YWwsIGVwLT5sb2FkKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCXByX2VycigiJXM6IGJhbGFuY2UgcmV0dXJuZWQgJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOworCQkJZ290byBmYWlsOworCQl9CisJCWVwLT5icmFuY2ggPSByZXR2YWw7CisJCXJldHZhbCA9IDA7CisJCWlzcDEzNjJfaGNkLT5mbWluZGV4ID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0ZNTlVNKTsKKwkJREJHKDEsICIlczogQ3VycmVudCBmcmFtZSAlMDR4IGJyYW5jaCAlMDJ4IHN0YXJ0X2ZyYW1lICUwNHgoJTA0eClcbiIsCisJCSAgICBfX2Z1bmNfXywgaXNwMTM2Ml9oY2QtPmZtaW5kZXgsIGVwLT5icmFuY2gsCisJCSAgICAoKGlzcDEzNjJfaGNkLT5mbWluZGV4ICsgUEVSSU9ESUNfU0laRSAtIDEpICYKKwkJICAgICB+KFBFUklPRElDX1NJWkUgLSAxKSkgKyBlcC0+YnJhbmNoLAorCQkgICAgKGlzcDEzNjJfaGNkLT5mbWluZGV4ICYgKFBFUklPRElDX1NJWkUgLSAxKSkgKyBlcC0+YnJhbmNoKTsKKworCQlpZiAobGlzdF9lbXB0eSgmZXAtPnNjaGVkdWxlKSkgeworCQkJaWYgKHR5cGUgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJCXUxNiBmcmFtZSA9IGlzcDEzNjJfaGNkLT5mbWluZGV4OworCisJCQkJZnJhbWUgKz0gbWF4X3QodTE2LCA4LCBlcC0+aW50ZXJ2YWwpOworCQkJCWZyYW1lICY9IH4oZXAtPmludGVydmFsIC0gMSk7CisJCQkJZnJhbWUgfD0gZXAtPmJyYW5jaDsKKwkJCQlpZiAoZnJhbWVfYmVmb3JlKGZyYW1lLCBpc3AxMzYyX2hjZC0+Zm1pbmRleCkpCisJCQkJCWZyYW1lICs9IGVwLT5pbnRlcnZhbDsKKwkJCQl1cmItPnN0YXJ0X2ZyYW1lID0gZnJhbWU7CisKKwkJCQlEQkcoMSwgIiVzOiBBZGRpbmcgZXAgJXAgdG8gaXNvYyBzY2hlZHVsZVxuIiwgX19mdW5jX18sIGVwKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZlcC0+c2NoZWR1bGUsICZpc3AxMzYyX2hjZC0+aXNvYyk7CisJCQl9IGVsc2UgeworCQkJCURCRygxLCAiJXM6IEFkZGluZyBlcCAlcCB0byBwZXJpb2RpYyBzY2hlZHVsZVxuIiwgX19mdW5jX18sIGVwKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZlcC0+c2NoZWR1bGUsICZpc3AxMzYyX2hjZC0+cGVyaW9kaWMpOworCQkJfQorCQl9IGVsc2UKKwkJCURCRygxLCAiJXM6IGVwICVwIGFscmVhZHkgc2NoZWR1bGVkXG4iLCBfX2Z1bmNfXywgZXApOworCisJCURCRygyLCAiJXM6IGxvYWQgJWQgYmFuZHdpZHRoICVkIC0+ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgIGVwLT5sb2FkIC8gZXAtPmludGVydmFsLCBpc3AxMzYyX2hjZC0+bG9hZFtlcC0+YnJhbmNoXSwKKwkJICAgIGlzcDEzNjJfaGNkLT5sb2FkW2VwLT5icmFuY2hdICsgZXAtPmxvYWQpOworCQlpc3AxMzYyX2hjZC0+bG9hZFtlcC0+YnJhbmNoXSArPSBlcC0+bG9hZDsKKwl9CisKKwl1cmItPmhjcHJpdiA9IGhlcDsKKwlBTElHTlNUQVQoaXNwMTM2Ml9oY2QsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCWNhc2UgUElQRV9CVUxLOgorCQlzdGFydF9hdGxfdHJhbnNmZXJzKGlzcDEzNjJfaGNkKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJc3RhcnRfaW50bF90cmFuc2ZlcnMoaXNwMTM2Ml9oY2QpOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCXN0YXJ0X2lzb190cmFuc2ZlcnMoaXNwMTM2Ml9oY2QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisgZmFpbDoKKwlpZiAocmV0dmFsKQorCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CisKKworIGZhaWxfbm90X2xpbmtlZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCWlmIChyZXR2YWwpCisJCURCRygwLCAiJXM6IHVyYiAlcCBmYWlsZWQgd2l0aCAlZFxuIiwgX19mdW5jX18sIHVyYiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGlzcDEzNjJfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpc3AxMzYyX2VwICplcDsKKwlpbnQgcmV0dmFsID0gMDsKKworCURCRygzLCAiJXM6IHVyYiAlcFxuIiwgX19mdW5jX18sIHVyYik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlyZXR2YWwgPSB1c2JfaGNkX2NoZWNrX3VubGlua191cmIoaGNkLCB1cmIsIHN0YXR1cyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJaGVwID0gdXJiLT5oY3ByaXY7CisKKwlpZiAoIWhlcCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJRFJNOworCX0KKworCWVwID0gaGVwLT5oY3ByaXY7CisJaWYgKGVwKSB7CisJCS8qIEluIGZyb250IG9mIHF1ZXVlPyAqLworCQlpZiAoZXAtPmhlcC0+dXJiX2xpc3QubmV4dCA9PSAmdXJiLT51cmJfbGlzdCkgeworCQkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+YWN0aXZlKSkgeworCQkJCURCRygxLCAiJXM6IHVyYiAlcCBlcCAlcCByZXEgJWQgYWN0aXZlIFBURFslZF0gJCUwNHhcbiIsIF9fZnVuY19fLAorCQkJCSAgICB1cmIsIGVwLCBlcC0+bnVtX3JlcSwgZXAtPnB0ZF9pbmRleCwgZXAtPnB0ZF9vZmZzZXQpOworCQkJCS8qIGRpc2FibGUgcHJvY2Vzc2luZyBhbmQgcXVldWUgUFREIGZvciByZW1vdmFsICovCisJCQkJcmVtb3ZlX3B0ZChpc3AxMzYyX2hjZCwgZXApOworCQkJCXVyYiA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKHVyYikgeworCQkJREJHKDEsICIlczogRmluaXNoaW5nIGVwICVwIHJlcSAlZFxuIiwgX19mdW5jX18sIGVwLAorCQkJICAgIGVwLT5udW1fcmVxKTsKKwkJCWZpbmlzaF9yZXF1ZXN0KGlzcDEzNjJfaGNkLCBlcCwgdXJiLCBzdGF0dXMpOworCQl9IGVsc2UKKwkJCURCRygxLCAiJXM6IHVyYiAlcCBhY3RpdmU7IHdhaXQ0aXJxXG4iLCBfX2Z1bmNfXywgdXJiKTsKKwl9IGVsc2UgeworCQlwcl93YXJuaW5nKCIlczogTm8gRVAgaW4gVVJCICVwXG4iLCBfX2Z1bmNfXywgdXJiKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwl9Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlEQkcoMywgIiVzOiBleGl0XG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX2VuZHBvaW50X2Rpc2FibGUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXApCit7CisJc3RydWN0IGlzcDEzNjJfZXAgKmVwID0gaGVwLT5oY3ByaXY7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoMSwgIiVzOiBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKKwlpZiAoIWVwKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZoZXAtPnVyYl9saXN0KSkgeworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5hY3RpdmUpICYmIGxpc3RfZW1wdHkoJmVwLT5yZW1vdmVfbGlzdCkpIHsKKwkJCURCRygxLCAiJXM6IFJlbW92aW5nIGVwICVwIHJlcSAlZCBQVERbJWRdICQlMDR4XG4iLCBfX2Z1bmNfXywKKwkJCSAgICBlcCwgZXAtPm51bV9yZXEsIGVwLT5wdGRfaW5kZXgsIGVwLT5wdGRfb2Zmc2V0KTsKKwkJCXJlbW92ZV9wdGQoaXNwMTM2Ml9oY2QsIGVwKTsKKwkJCXByX2luZm8oIiVzOiBXYWl0aW5nIGZvciBJbnRlcnJ1cHQgdG8gY2xlYW4gdXBcbiIsIF9fZnVuY19fKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCS8qIFdhaXQgZm9yIGludGVycnVwdCB0byBjbGVhciBvdXQgYWN0aXZlIGxpc3QgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5hY3RpdmUpKQorCQltc2xlZXAoMSk7CisKKwlEQkcoMSwgIiVzOiBGcmVlaW5nIEVQICVwXG4iLCBfX2Z1bmNfXywgZXApOworCisJdXNiX3B1dF9kZXYoZXAtPnVkZXYpOworCWtmcmVlKGVwKTsKKwloZXAtPmhjcHJpdiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaXNwMTM2Ml9nZXRfZnJhbWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJdTMyIGZtbnVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlmbW51bSA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENGTU5VTSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAoaW50KWZtbnVtOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBBZGFwdGVkIGZyb20gb2hjaS1odWIuYyAqLworc3RhdGljIGludCBpc3AxMzYyX2h1Yl9zdGF0dXNfZGF0YShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCWludCBwb3J0cywgaSwgY2hhbmdlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwkvKiBSZXBvcnQgbm8gc3RhdHVzIGNoYW5nZSBub3csIGlmIHdlIGFyZSBzY2hlZHVsZWQgdG8gYmUKKwkgICBjYWxsZWQgbGF0ZXIgKi8KKwlpZiAodGltZXJfcGVuZGluZygmaGNkLT5yaF90aW1lcikpCisJCXJldHVybiAwOworCisJcG9ydHMgPSBpc3AxMzYyX2hjZC0+cmhkZXNjYSAmIFJIX0FfTkRQOworCUJVR19PTihwb3J0cyA+IDIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJLyogaW5pdCBzdGF0dXMgKi8KKwlpZiAoaXNwMTM2Ml9oY2QtPnJoc3RhdHVzICYgKFJIX0hTX0xQU0MgfCBSSF9IU19PQ0lDKSkKKwkJYnVmWzBdID0gY2hhbmdlZCA9IDE7CisJZWxzZQorCQlidWZbMF0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHBvcnRzOyBpKyspIHsKKwkJdTMyIHN0YXR1cyA9IGlzcDEzNjJfaGNkLT5yaHBvcnRbaV07CisKKwkJaWYgKHN0YXR1cyAmIChSSF9QU19DU0MgfCBSSF9QU19QRVNDIHwgUkhfUFNfUFNTQyB8CisJCQkgICAgICBSSF9QU19PQ0lDIHwgUkhfUFNfUFJTQykpIHsKKwkJCWNoYW5nZWQgPSAxOworCQkJYnVmWzBdIHw9IDEgPDwgKGkgKyAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCEoc3RhdHVzICYgUkhfUFNfQ0NTKSkKKwkJCWNvbnRpbnVlOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX2h1Yl9kZXNjcmlwdG9yKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsCisJCQkJICAgc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzYykKK3sKKwl1MzIgcmVnID0gaXNwMTM2Ml9oY2QtPnJoZGVzY2E7CisKKwlEQkcoMywgIiVzOiBlbnRlclxuIiwgX19mdW5jX18pOworCisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CisJZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisJZGVzYy0+Yk5iclBvcnRzID0gcmVnICYgMHgzOworCS8qIFBvd2VyIHN3aXRjaGluZywgZGV2aWNlIHR5cGUsIG92ZXJjdXJyZW50LiAqLworCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBjcHVfdG9fbGUxNigocmVnID4+IDgpICYgMHgxZik7CisJREJHKDAsICIlczogaHViY2hhcmFjdGVyaXN0aWNzID0gJTAyeFxuIiwgX19mdW5jX18sIGNwdV90b19sZTE2KChyZWcgPj4gOCkgJiAweDFmKSk7CisJZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAocmVnID4+IDI0KSAmIDB4ZmY7CisJLyogdHdvIGJpdG1hcHM6ICBwb3J0cyByZW1vdmFibGUsIGFuZCBsZWdhY3kgUG9ydFB3ckN0cmxNYXNrICovCisJZGVzYy0+Yml0bWFwWzBdID0gZGVzYy0+Yk5iclBvcnRzID09IDEgPyAxIDw8IDEgOiAzIDw8IDE7CisJZGVzYy0+Yml0bWFwWzFdID0gfjA7CisKKwlEQkcoMywgIiVzOiBleGl0XG4iLCBfX2Z1bmNfXyk7Cit9CisKKy8qIEFkYXB0ZWQgZnJvbSBvaGNpLWh1Yi5jICovCitzdGF0aWMgaW50IGlzcDEzNjJfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJCQkgICAgICAgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHQxOworCWludCBwb3J0cyA9IGlzcDEzNjJfaGNkLT5yaGRlc2NhICYgUkhfQV9ORFA7CisJdTMyIHRtcCA9IDA7CisKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIENsZWFySHViRmVhdHVyZToKKwkJREJHKDAsICJDbGVhckh1YkZlYXR1cmU6ICIpOworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJCV9EQkcoMCwgIkNfSFVCX09WRVJfQ1VSUkVOVFxuIik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhTVEFUVVMsIFJIX0hTX09DSUMpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJCV9EQkcoMCwgIkNfSFVCX0xPQ0FMX1BPV0VSXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCURCRygwLCAiU2V0SHViRmVhdHVyZTogIik7CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkJX0RCRygwLCAiQ19IVUJfT1ZFUl9DVVJSRU5UIG9yIENfSFVCX0xPQ0FMX1BPV0VSXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCURCRygwLCAiR2V0SHViRGVzY3JpcHRvclxuIik7CisJCWlzcDEzNjJfaHViX2Rlc2NyaXB0b3IoaXNwMTM2Ml9oY2QsIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJTdGF0dXM6CisJCURCRygwLCAiR2V0SHViU3RhdHVzXG4iKTsKKwkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMigwKSwgKF9fbGUzMiAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldFBvcnRTdGF0dXM6CisjaWZuZGVmIFZFUkJPU0UKKwkJREJHKDAsICJHZXRQb3J0U3RhdHVzXG4iKTsKKyNlbmRpZgorCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJCWdvdG8gZXJyb3I7CisJCXRtcCA9IGlzcDEzNjJfaGNkLT5yaHBvcnRbLS13SW5kZXhdOworCQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTMyKHRtcCksIChfX2xlMzIgKikgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBDbGVhclBvcnRGZWF0dXJlOgorCQlEQkcoMCwgIkNsZWFyUG9ydEZlYXR1cmU6ICIpOworCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJCWdvdG8gZXJyb3I7CisJCXdJbmRleC0tOworCisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6CisJCQlfREJHKDAsICJVU0JfUE9SVF9GRUFUX0VOQUJMRVxuIik7CisJCQl0bXAgPSBSSF9QU19DQ1M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQkJX0RCRygwLCAiVVNCX1BPUlRfRkVBVF9DX0VOQUJMRVxuIik7CisJCQl0bXAgPSBSSF9QU19QRVNDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQkJX0RCRygwLCAiVVNCX1BPUlRfRkVBVF9TVVNQRU5EXG4iKTsKKwkJCXRtcCA9IFJIX1BTX1BPQ0k7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EXG4iKTsKKwkJCXRtcCA9IFJIX1BTX1BTU0M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJX0RCRygwLCAiVVNCX1BPUlRfRkVBVF9QT1dFUlxuIik7CisJCQl0bXAgPSBSSF9QU19MU0RBOworCisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OXG4iKTsKKwkJCXRtcCA9IFJIX1BTX0NTQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CisJCQlfREJHKDAsICJVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UXG4iKTsKKwkJCXRtcCA9IFJIX1BTX09DSUM7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ6CisJCQlfREJHKDAsICJVU0JfUE9SVF9GRUFUX0NfUkVTRVRcbiIpOworCQkJdG1wID0gUkhfUFNfUFJTQzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEgKyB3SW5kZXgsIHRtcCk7CisJCWlzcDEzNjJfaGNkLT5yaHBvcnRbd0luZGV4XSA9CisJCQlpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSArIHdJbmRleCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCURCRygwLCAiU2V0UG9ydEZlYXR1cmU6ICIpOworCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJCWdvdG8gZXJyb3I7CisJCXdJbmRleC0tOworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfU1VTUEVORFxuIik7CisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwkJCWlmIChvaGNpLT5oY2Quc2VsZi5vdGdfcG9ydCA9PSAod0luZGV4ICsgMSkgJiYKKwkJCSAgICBvaGNpLT5oY2Quc2VsZi5iX2hucF9lbmFibGUpIHsKKwkJCQlzdGFydF9obnAob2hjaSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgd0luZGV4LCBSSF9QU19QU1MpOworCQkJaXNwMTM2Ml9oY2QtPnJocG9ydFt3SW5kZXhdID0KKwkJCQlpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSArIHdJbmRleCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCV9EQkcoMCwgIlVTQl9QT1JUX0ZFQVRfUE9XRVJcbiIpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEgKyB3SW5kZXgsIFJIX1BTX1BQUyk7CisJCQlpc3AxMzYyX2hjZC0+cmhwb3J0W3dJbmRleF0gPQorCQkJCWlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgd0luZGV4KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJX0RCRygwLCAiVVNCX1BPUlRfRkVBVF9SRVNFVFxuIik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCQkJdDEgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhVU0JfUkVTRVRfV0lEVEgpOworCQkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHQxKSkgeworCQkJCS8qIHNwaW4gdW50aWwgYW55IGN1cnJlbnQgcmVzZXQgZmluaXNoZXMgKi8KKwkJCQlmb3IgKDs7KSB7CisJCQkJCXRtcCA9IGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgd0luZGV4KTsKKwkJCQkJaWYgKCEodG1wICYgUkhfUFNfUFJTKSkKKwkJCQkJCWJyZWFrOworCQkJCQl1ZGVsYXkoNTAwKTsKKwkJCQl9CisJCQkJaWYgKCEodG1wICYgUkhfUFNfQ0NTKSkKKwkJCQkJYnJlYWs7CisJCQkJLyogUmVzZXQgbGFzdHMgMTBtcyAoY2xhaW1zIGRhdGFzaGVldCkgKi8KKwkJCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEgKyB3SW5kZXgsIChSSF9QU19QUlMpKTsKKworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQkJbXNsZWVwKDEwKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCX0KKworCQkJaXNwMTM2Ml9oY2QtPnJocG9ydFt3SW5kZXhdID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLAorCQkJCQkJCQkJIEhDUkhQT1JUMSArIHdJbmRleCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKyBlcnJvcjoKKwkJLyogInByb3RvY29sIHN0YWxsIiBvbiBlcnJvciAqLworCQlfREJHKDAsICJQUk9UT0NPTCBTVEFMTFxuIik7CisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYJQ09ORklHX1BNCitzdGF0aWMgaW50IGlzcDEzNjJfYnVzX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBpc3AxMzYyX2hjZC0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCk7CisJc3dpdGNoIChpc3AxMzYyX2hjZC0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJY2FzZSBPSENJX1VTQl9SRVNVTUU6CisJCURCRygwLCAiJXM6IHJlc3VtZS9zdXNwZW5kP1xuIiwgX19mdW5jX18pOworCQlpc3AxMzYyX2hjZC0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX0hDRlM7CisJCWlzcDEzNjJfaGNkLT5oY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU0VUOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wsIGlzcDEzNjJfaGNkLT5oY19jb250cm9sKTsKKwkJLyogRkFMTCBUSFJPVUdIICovCisJY2FzZSBPSENJX1VTQl9SRVNFVDoKKwkJc3RhdHVzID0gLUVCVVNZOworCQlwcl93YXJuaW5nKCIlczogbmVlZHMgcmVpbml0IVxuIiwgX19mdW5jX18pOworCQlnb3RvIGRvbmU7CisJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCQlwcl93YXJuaW5nKCIlczogYWxyZWFkeSBzdXNwZW5kZWQ/XG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZG9uZTsKKwl9CisJREJHKDAsICIlczogc3VzcGVuZCByb290IGh1YlxuIiwgX19mdW5jX18pOworCisJLyogRmlyc3Qgc3RvcCBhbnkgcHJvY2Vzc2luZyAqLworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9RVUlFU0NJTkc7CisJaWYgKCFsaXN0X2VtcHR5KCZpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmFjdGl2ZSkgfHwKKwkgICAgIWxpc3RfZW1wdHkoJmlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLmFjdGl2ZSkgfHwKKwkgICAgIWxpc3RfZW1wdHkoJmlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlWzBdIC5hY3RpdmUpIHx8CisJICAgICFsaXN0X2VtcHR5KCZpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVsxXSAuYWN0aXZlKSkgeworCQlpbnQgbGltaXQ7CisKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENBVExTS0lQLCB+MCk7CisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTFNLSVAsIH4wKTsKKwkJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSENCVUZTVEFULCAwKTsKKwkJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQiwgMCk7CisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UU1RBVCwgT0hDSV9JTlRSX1NGKTsKKworCQlEQkcoMCwgIiVzOiBzdG9wcGluZyBzY2hlZHVsZXMgLi4uXG4iLCBfX2Z1bmNfXyk7CisJCWxpbWl0ID0gMjAwMDsKKwkJd2hpbGUgKGxpbWl0ID4gMCkgeworCQkJdWRlbGF5KDI1MCk7CisJCQlsaW1pdCAtPSAyNTA7CisJCQlpZiAoaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVFNUQVQpICYgT0hDSV9JTlRSX1NGKQorCQkJCWJyZWFrOworCQl9CisJCW1kZWxheSg3KTsKKwkJaWYgKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0FUTCkgeworCQkJdTMyIGRvbmVfbWFwID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTERPTkUpOworCQkJZmluaXNoX3RyYW5zZmVycyhpc3AxMzYyX2hjZCwgZG9uZV9tYXAsICZpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlKTsKKwkJfQorCQlpZiAoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfSU5UTCkgeworCQkJdTMyIGRvbmVfbWFwID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExET05FKTsKKwkJCWZpbmlzaF90cmFuc2ZlcnMoaXNwMTM2Ml9oY2QsIGRvbmVfbWFwLCAmaXNwMTM2Ml9oY2QtPmludGxfcXVldWUpOworCQl9CisJCWlmIChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9JU1RMMCkKKwkJCWZpbmlzaF9pc29fdHJhbnNmZXJzKGlzcDEzNjJfaGNkLCAmaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbMF0pOworCQlpZiAoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfSVNUTDEpCisJCQlmaW5pc2hfaXNvX3RyYW5zZmVycyhpc3AxMzYyX2hjZCwgJmlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlWzFdKTsKKwl9CisJREJHKDAsICIlczogSENJTlRTVEFUOiAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJICAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRTVEFUKSk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRTVEFULAorCQkJICAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRTVEFUKSk7CisKKwkvKiBTdXNwZW5kIGh1YiAqLworCWlzcDEzNjJfaGNkLT5oY19jb250cm9sID0gT0hDSV9VU0JfU1VTUEVORDsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wpOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCwgaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCk7CisKKyNpZiAxCisJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCk7CisJaWYgKChpc3AxMzYyX2hjZC0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSAhPSBPSENJX1VTQl9TVVNQRU5EKSB7CisJCXByX2VycigiJXM6IGNvbnRyb2xsZXIgd29uJ3Qgc3VzcGVuZCAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJICAgIGlzcDEzNjJfaGNkLT5oY19jb250cm9sKTsKKwkJc3RhdHVzID0gLUVCVVNZOworCX0gZWxzZQorI2VuZGlmCisJeworCQkvKiBubyByZXN1bWVzIHVudGlsIGRldmljZXMgZmluaXNoIHN1c3BlbmRpbmcgKi8KKwkJaXNwMTM2Ml9oY2QtPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKwl9Citkb25lOgorCWlmIChzdGF0dXMgPT0gMCkgeworCQloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCQlEQkcoMCwgIiVzOiBIQ0Qgc3VzcGVuZGVkOiAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJICAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENDT05UUk9MKSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBpc3AxMzYyX2J1c19yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJdTMyIHBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzID0gLUVJTlBST0dSRVNTOworCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGlzcDEzNjJfaGNkLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJaXNwMTM2Ml9oY2QtPmhjX2NvbnRyb2wgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCk7CisJcHJfaW5mbygiJXM6IEhDQ09OVFJPTDogJTA4eFxuIiwgX19mdW5jX18sIGlzcDEzNjJfaGNkLT5oY19jb250cm9sKTsKKwlpZiAoaGNkLT5zdGF0ZSA9PSBIQ19TVEFURV9SRVNVTUlORykgeworCQlwcl93YXJuaW5nKCIlczogZHVwbGljYXRlIHJlc3VtZVxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAwOworCX0gZWxzZQorCQlzd2l0Y2ggKGlzcDEzNjJfaGNkLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpIHsKKwkJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCQkJREJHKDAsICIlczogcmVzdW1lIHJvb3QgaHViXG4iLCBfX2Z1bmNfXyk7CisJCQlpc3AxMzYyX2hjZC0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX0hDRlM7CisJCQlpc3AxMzYyX2hjZC0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNVTUU7CisJCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wsIGlzcDEzNjJfaGNkLT5oY19jb250cm9sKTsKKwkJCWJyZWFrOworCQljYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJCS8qIEhDRlMgY2hhbmdlcyBzb21ldGltZSBhZnRlciBJTlRSX1JEICovCisJCQlEQkcoMCwgIiVzOiByZW1vdGUgd2FrZXVwXG4iLCBfX2Z1bmNfXyk7CisJCQlicmVhazsKKwkJY2FzZSBPSENJX1VTQl9PUEVSOgorCQkJREJHKDAsICIlczogb2RkIHJlc3VtZVxuIiwgX19mdW5jX18pOworCQkJc3RhdHVzID0gMDsKKwkJCWhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkJLyogUkVTRVQsIHdlIGxvc3QgcG93ZXIgKi8KKwkJCURCRygwLCAiJXM6IHJvb3QgaHViIGhhcmR3YXJlIHJlc2V0XG4iLCBfX2Z1bmNfXyk7CisJCQlzdGF0dXMgPSAtRUJVU1k7CisJCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCWlmIChzdGF0dXMgPT0gLUVCVVNZKSB7CisJCURCRygwLCAiJXM6IFJlc3RhcnRpbmcgSENcbiIsIF9fZnVuY19fKTsKKwkJaXNwMTM2Ml9oY19zdG9wKGhjZCk7CisJCXJldHVybiBpc3AxMzYyX2hjX3N0YXJ0KGhjZCk7CisJfQorCWlmIChzdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm4gc3RhdHVzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCXBvcnQgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQSkgJiBSSF9BX05EUDsKKwl3aGlsZSAocG9ydC0tKSB7CisJCXUzMiBzdGF0ID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEgKyBwb3J0KTsKKworCQkvKiBmb3JjZSBnbG9iYWwsIG5vdCBzZWxlY3RpdmUsIHJlc3VtZSAqLworCQlpZiAoIShzdGF0ICYgUkhfUFNfUFNTKSkgeworCQkJREJHKDAsICIlczogTm90IFJlc3VtaW5nIFJIIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCURCRygwLCAiJXM6IFJlc3VtaW5nIFJIIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0KTsKKwkJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSFBPUlQxICsgcG9ydCwgUkhfUFNfUE9DSSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwkvKiBTb21lIGNvbnRyb2xsZXJzIChsdWNlbnQpIG5lZWQgZXh0cmEtbG9uZyBkZWxheXMgKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CisJbWRlbGF5KDIwIC8qIHVzYiAxMS41LjEuMTAgKi8gKyAxNSk7CisKKwlpc3AxMzYyX2hjZC0+aGNfY29udHJvbCA9IE9IQ0lfVVNCX09QRVI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENDT05UUk9MKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NPTlRST0wsIGlzcDEzNjJfaGNkLT5oY19jb250cm9sKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCS8qIFRSU01SQ1kgKi8KKwltc2xlZXAoMTApOworCisJLyoga2VlcCBpdCBhbGl2ZSBmb3IgfjV4IHN1c3BlbmQgKyByZXN1bWUgY29zdHMgKi8KKwlpc3AxMzYyX2hjZC0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCk7CisKKwloY2QtPnNlbGYucm9vdF9odWItPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZQlpc3AxMzYyX2J1c19zdXNwZW5kCU5VTEwKKyNkZWZpbmUJaXNwMTM2Ml9idXNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgU1RVQl9ERUJVR19GSUxFCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QpCit7Cit9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHZvaWQgZHVtcF9pcnEoc3RydWN0IHNlcV9maWxlICpzLCBjaGFyICpsYWJlbCwgdTE2IG1hc2spCit7CisJc2VxX3ByaW50ZihzLCAiJS0xNXMgJTA0eCVzJXMlcyVzJXMlc1xuIiwgbGFiZWwsIG1hc2ssCisJCSAgIG1hc2sgJiBIQ3VQSU5UX0NMS1JEWSA/ICIgY2xrcmR5IiA6ICIiLAorCQkgICBtYXNrICYgSEN1UElOVF9TVVNQID8gIiBzdXNwIiA6ICIiLAorCQkgICBtYXNrICYgSEN1UElOVF9PUFIgPyAiIG9wciIgOiAiIiwKKwkJICAgbWFzayAmIEhDdVBJTlRfRU9UID8gIiBlb3QiIDogIiIsCisJCSAgIG1hc2sgJiBIQ3VQSU5UX0FUTCA/ICIgYXRsIiA6ICIiLAorCQkgICBtYXNrICYgSEN1UElOVF9TT0YgPyAiIHNvZiIgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfaW50KHN0cnVjdCBzZXFfZmlsZSAqcywgY2hhciAqbGFiZWwsIHUzMiBtYXNrKQoreworCXNlcV9wcmludGYocywgIiUtMTVzICUwOHglcyVzJXMlcyVzJXMlc1xuIiwgbGFiZWwsIG1hc2ssCisJCSAgIG1hc2sgJiBPSENJX0lOVFJfTUlFID8gIiBNSUUiIDogIiIsCisJCSAgIG1hc2sgJiBPSENJX0lOVFJfUkhTQyA/ICIgcmhzYyIgOiAiIiwKKwkJICAgbWFzayAmIE9IQ0lfSU5UUl9GTk8gPyAiIGZubyIgOiAiIiwKKwkJICAgbWFzayAmIE9IQ0lfSU5UUl9VRSA/ICIgdWUiIDogIiIsCisJCSAgIG1hc2sgJiBPSENJX0lOVFJfUkQgPyAiIHJkIiA6ICIiLAorCQkgICBtYXNrICYgT0hDSV9JTlRSX1NGID8gIiBzb2YiIDogIiIsCisJCSAgIG1hc2sgJiBPSENJX0lOVFJfU08gPyAiIHNvIiA6ICIiKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9jdHJsKHN0cnVjdCBzZXFfZmlsZSAqcywgY2hhciAqbGFiZWwsIHUzMiBtYXNrKQoreworCXNlcV9wcmludGYocywgIiUtMTVzICUwOHglcyVzJXNcbiIsIGxhYmVsLCBtYXNrLAorCQkgICBtYXNrICYgT0hDSV9DVFJMX1JXQyA/ICIgcndjIiA6ICIiLAorCQkgICBtYXNrICYgT0hDSV9DVFJMX1JXRSA/ICIgcndlIiA6ICIiLAorCQkgICAoeworCQkJICAgY2hhciAqaGNmczsKKwkJCSAgIHN3aXRjaCAobWFzayAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJCQkgICBjYXNlIE9IQ0lfVVNCX09QRVI6CisJCQkJICAgaGNmcyA9ICIgb3BlciI7CisJCQkJICAgYnJlYWs7CisJCQkgICBjYXNlIE9IQ0lfVVNCX1JFU0VUOgorCQkJCSAgIGhjZnMgPSAiIHJlc2V0IjsKKwkJCQkgICBicmVhazsKKwkJCSAgIGNhc2UgT0hDSV9VU0JfUkVTVU1FOgorCQkJCSAgIGhjZnMgPSAiIHJlc3VtZSI7CisJCQkJICAgYnJlYWs7CisJCQkgICBjYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CisJCQkJICAgaGNmcyA9ICIgc3VzcGVuZCI7CisJCQkJICAgYnJlYWs7CisJCQkgICBkZWZhdWx0OgorCQkJCSAgIGhjZnMgPSAiID8iOworCQkJICAgfQorCQkJICAgaGNmczsKKwkJICAgfSkpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3JlZ3Moc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCXNlcV9wcmludGYocywgIkhDUkVWSVNJT04gWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDUkVWSVNJT04pLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkVWSVNJT04pKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0NPTlRST0wgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0NPTlRST0wpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQ09OVFJPTCkpOworCXNlcV9wcmludGYocywgIkhDQ01EU1RBVCAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDQ01EU1RBVCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENDTURTVEFUKSk7CisJc2VxX3ByaW50ZihzLCAiSENJTlRTVEFUICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJTlRTVEFUKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVFNUQVQpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0lOVEVOQiAgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0lOVEVOQiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRFTkIpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0ZNSU5UVkwgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0ZNSU5UVkwpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRk1JTlRWTCkpOworCXNlcV9wcmludGYocywgIkhDRk1SRU0gICAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDRk1SRU0pLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRk1SRU0pKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0ZNTlVNICAgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0ZNTlVNKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0ZNTlVNKSk7CisJc2VxX3ByaW50ZihzLCAiSENMU1RIUkVTSCBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENMU1RIUkVTSCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENMU1RIUkVTSCkpOworCXNlcV9wcmludGYocywgIkhDUkhERVNDQSAgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDUkhERVNDQSksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENSSERFU0NBKSk7CisJc2VxX3ByaW50ZihzLCAiSENSSERFU0NCICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENSSERFU0NCKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIREVTQ0IpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ1JIU1RBVFVTIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ1JIU1RBVFVTKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTKSk7CisJc2VxX3ByaW50ZihzLCAiSENSSFBPUlQxICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENSSFBPUlQxKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIUE9SVDEpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ1JIUE9SVDIgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ1JIUE9SVDIpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMikpOworCXNlcV9wcmludGYocywgIlxuIik7CisJc2VxX3ByaW50ZihzLCAiSENIV0NGRyAgICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDSFdDRkcpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDSFdDRkcpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0RNQUNGRyAgIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENETUFDRkcpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDRE1BQ0ZHKSk7CisJc2VxX3ByaW50ZihzLCAiSENYRkVSQ1RSICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDWEZFUkNUUiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENYRkVSQ1RSKSk7CisJc2VxX3ByaW50ZihzLCAiSEN1UElOVCAgICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDdVBJTlQpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ3VQSU5URU5CIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSEN1UElOVEVOQiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQikpOworCXNlcV9wcmludGYocywgIkhDQ0hJUElEICAgWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0NISVBJRCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENDSElQSUQpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ1NDUkFUQ0ggIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENTQ1JBVENIKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ1NDUkFUQ0gpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0JVRlNUQVQgIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENCVUZTVEFUKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0JVRlNUQVQpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0RJUkFERFIgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0RJUkFERFIpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRElSQUREUikpOworI2lmIDAKKwlzZXFfcHJpbnRmKHMsICJIQ0RJUkRBVEEgIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSENESVJEQVRBKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0RJUkRBVEEpKTsKKyNlbmRpZgorCXNlcV9wcmludGYocywgIkhDSVNUTEJVRlNaWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0lTVExCVUZTWiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENJU1RMQlVGU1opKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0lTVExSQVRFIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJU1RMUkFURSksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENJU1RMUkFURSkpOworCXNlcV9wcmludGYocywgIlxuIik7CisJc2VxX3ByaW50ZihzLCAiSENJTlRMQlVGU1pbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDSU5UTEJVRlNaKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0lOVExCVUZTWikpOworCXNlcV9wcmludGYocywgIkhDSU5UTEJMS1NaWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0lOVExCTEtTWiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENJTlRMQkxLU1opKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0lOVExET05FIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0lOVExET05FKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVExET05FKSk7CisJc2VxX3ByaW50ZihzLCAiSENJTlRMU0tJUCBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJTlRMU0tJUCksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMU0tJUCkpOworCXNlcV9wcmludGYocywgIkhDSU5UTExBU1QgWyUwMnhdICUwOHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDSU5UTExBU1QpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTExBU1QpKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0lOVExDVVJSIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENJTlRMQ1VSUiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENJTlRMQ1VSUikpOworCXNlcV9wcmludGYocywgIlxuIik7CisJc2VxX3ByaW50ZihzLCAiSENBVExCVUZTWiBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDQVRMQlVGU1opLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQVRMQlVGU1opKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0FUTEJMS1NaIFslMDJ4XSAgICAgJTA0eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENBVExCTEtTWiksCisJCSAgIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENBVExCTEtTWikpOworI2lmIDAKKwlzZXFfcHJpbnRmKHMsICJIQ0FUTERPTkUgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0FUTERPTkUpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQVRMRE9ORSkpOworI2VuZGlmCisJc2VxX3ByaW50ZihzLCAiSENBVExTS0lQICBbJTAyeF0gJTA4eFxuIiwgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfSENBVExTS0lQKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTFNLSVApKTsKKwlzZXFfcHJpbnRmKHMsICJIQ0FUTExBU1QgIFslMDJ4XSAlMDh4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0FUTExBU1QpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDQVRMTEFTVCkpOworCXNlcV9wcmludGYocywgIkhDQVRMQ1VSUiAgWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0FUTENVUlIpLAorCQkgICBpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQVRMQ1VSUikpOworCXNlcV9wcmludGYocywgIlxuIik7CisJc2VxX3ByaW50ZihzLCAiSENBVExEVEMgICBbJTAyeF0gICAgICUwNHhcbiIsIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDQVRMRFRDKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0FUTERUQykpOworCXNlcV9wcmludGYocywgIkhDQVRMRFRDVE8gWyUwMnhdICAgICAlMDR4XG4iLCBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR19IQ0FUTERUQ1RPKSwKKwkJICAgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0FUTERUQ1RPKSk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19pc3AxMzYyX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IHMtPnByaXZhdGU7CisJc3RydWN0IGlzcDEzNjJfZXAgKmVwOworCWludCBpOworCisJc2VxX3ByaW50ZihzLCAiJXNcbiVzIHZlcnNpb24gJXNcbiIsCisJCSAgIGlzcDEzNjJfaGNkX3RvX2hjZChpc3AxMzYyX2hjZCktPnByb2R1Y3RfZGVzYywgaGNkX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKKworCS8qIGNvbGxlY3Qgc3RhdGlzdGljcyB0byBoZWxwIGVzdGltYXRlIHBvdGVudGlhbCB3aW4gZm9yCisJICogRE1BIGVuZ2luZXMgdGhhdCBjYXJlIGFib3V0IGFsaWdubWVudCAoUFhBKQorCSAqLworCXNlcV9wcmludGYocywgImFsaWdubWVudDogIDE2Yi8lbGQgOGIvJWxkIDRiLyVsZCAyYi8lbGQgMWIvJWxkXG4iLAorCQkgICBpc3AxMzYyX2hjZC0+c3RhdDE2LCBpc3AxMzYyX2hjZC0+c3RhdDgsIGlzcDEzNjJfaGNkLT5zdGF0NCwKKwkJICAgaXNwMTM2Ml9oY2QtPnN0YXQyLCBpc3AxMzYyX2hjZC0+c3RhdDEpOworCXNlcV9wcmludGYocywgIm1heCAjIHB0ZHMgaW4gQVRMICBmaWZvOiAlZFxuIiwgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5zdGF0X21heHB0ZHMpOworCXNlcV9wcmludGYocywgIm1heCAjIHB0ZHMgaW4gSU5UTCBmaWZvOiAlZFxuIiwgaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuc3RhdF9tYXhwdGRzKTsKKwlzZXFfcHJpbnRmKHMsICJtYXggIyBwdGRzIGluIElTVEwgZmlmbzogJWRcbiIsCisJCSAgIG1heChpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVswXSAuc3RhdF9tYXhwdGRzLAorCQkgICAgICAgaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbMV0gLnN0YXRfbWF4cHRkcykpOworCisJLyogRklYTUU6IGRvbid0IHNob3cgdGhlIGZvbGxvd2luZyBpbiBzdXNwZW5kZWQgc3RhdGUgKi8KKwlzcGluX2xvY2tfaXJxKCZpc3AxMzYyX2hjZC0+bG9jayk7CisKKwlkdW1wX2lycShzLCAiaGNfaXJxX2VuYWJsZSIsIGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQikpOworCWR1bXBfaXJxKHMsICJoY19pcnFfc3RhdHVzIiwgaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSk7CisJZHVtcF9pbnQocywgIm9oY2lfaW50X2VuYWJsZSIsIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRFTkIpKTsKKwlkdW1wX2ludChzLCAib2hjaV9pbnRfc3RhdHVzIiwgaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0lOVFNUQVQpKTsKKwlkdW1wX2N0cmwocywgIm9oY2lfY29udHJvbCIsIGlzcDEzNjJfcmVhZF9yZWczMihpc3AxMzYyX2hjZCwgSENDT05UUk9MKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lTUDEzNjJfSVJRUzsgaSsrKQorCQlpZiAoaXNwMTM2Ml9oY2QtPmlycV9zdGF0W2ldKQorCQkJc2VxX3ByaW50ZihzLCAiJS0xNXM6ICVkXG4iLAorCQkJCSAgIElTUDEzNjJfSU5UX05BTUUoaSksIGlzcDEzNjJfaGNkLT5pcnFfc3RhdFtpXSk7CisKKwlkdW1wX3JlZ3MocywgaXNwMTM2Ml9oY2QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXAsICZpc3AxMzYyX2hjZC0+YXN5bmMsIHNjaGVkdWxlKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQlzZXFfcHJpbnRmKHMsICIlcCwgZXAlZCVzLCBtYXhwYWNrZXQgJWQ6XG4iLCBlcCwgZXAtPmVwbnVtLAorCQkJICAgKHsKKwkJCQkgICBjaGFyICpzOworCQkJCSAgIHN3aXRjaCAoZXAtPm5leHRwaWQpIHsKKwkJCQkgICBjYXNlIFVTQl9QSURfSU46CisJCQkJCSAgIHMgPSAiaW4iOworCQkJCQkgICBicmVhazsKKwkJCQkgICBjYXNlIFVTQl9QSURfT1VUOgorCQkJCQkgICBzID0gIm91dCI7CisJCQkJCSAgIGJyZWFrOworCQkJCSAgIGNhc2UgVVNCX1BJRF9TRVRVUDoKKwkJCQkJICAgcyA9ICJzZXR1cCI7CisJCQkJCSAgIGJyZWFrOworCQkJCSAgIGNhc2UgVVNCX1BJRF9BQ0s6CisJCQkJCSAgIHMgPSAic3RhdHVzIjsKKwkJCQkJICAgYnJlYWs7CisJCQkJICAgZGVmYXVsdDoKKwkJCQkJICAgcyA9ICI/IjsKKwkJCQkJICAgYnJlYWs7CisJCQkJICAgfTsKKwkJCQkgICBzO30pLCBlcC0+bWF4cGFja2V0KSA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodXJiLCAmZXAtPmhlcC0+dXJiX2xpc3QsIHVyYl9saXN0KSB7CisJCQlzZXFfcHJpbnRmKHMsICIgIHVyYiVwLCAlZC8lZFxuIiwgdXJiLAorCQkJCSAgIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCQkgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQl9CisJfQorCWlmICghbGlzdF9lbXB0eSgmaXNwMTM2Ml9oY2QtPmFzeW5jKSkKKwkJc2VxX3ByaW50ZihzLCAiXG4iKTsKKwlkdW1wX3B0ZF9xdWV1ZSgmaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZSk7CisKKwlzZXFfcHJpbnRmKHMsICJwZXJpb2RpYyBzaXplPSAlZFxuIiwgUEVSSU9ESUNfU0laRSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVwLCAmaXNwMTM2Ml9oY2QtPnBlcmlvZGljLCBzY2hlZHVsZSkgeworCQlzZXFfcHJpbnRmKHMsICJicmFuY2g6JTJkIGxvYWQ6JTNkIFBURFslZF0gJCUwNHg6XG4iLCBlcC0+YnJhbmNoLAorCQkJICAgaXNwMTM2Ml9oY2QtPmxvYWRbZXAtPmJyYW5jaF0sIGVwLT5wdGRfaW5kZXgsIGVwLT5wdGRfb2Zmc2V0KTsKKworCQlzZXFfcHJpbnRmKHMsICIgICAlZC8lcCAoJXNkZXYlZCBlcCVkJXMgbWF4ICVkKVxuIiwKKwkJCSAgIGVwLT5pbnRlcnZhbCwgZXAsCisJCQkgICAoZXAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSA/ICIiIDogImxzICIsCisJCQkgICBlcC0+dWRldi0+ZGV2bnVtLCBlcC0+ZXBudW0sCisJCQkgICAoZXAtPmVwbnVtID09IDApID8gIiIgOgorCQkJICAgKChlcC0+bmV4dHBpZCA9PSBVU0JfUElEX0lOKSA/CisJCQkgICAgImluIiA6ICJvdXQiKSwgZXAtPm1heHBhY2tldCk7CisJfQorCWR1bXBfcHRkX3F1ZXVlKCZpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZSk7CisKKwlzZXFfcHJpbnRmKHMsICJJU086XG4iKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXAsICZpc3AxMzYyX2hjZC0+aXNvYywgc2NoZWR1bGUpIHsKKwkJc2VxX3ByaW50ZihzLCAiICAgJWQvJXAgKCVzZGV2JWQgZXAlZCVzIG1heCAlZClcbiIsCisJCQkgICBlcC0+aW50ZXJ2YWwsIGVwLAorCQkJICAgKGVwLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgPyAiIiA6ICJscyAiLAorCQkJICAgZXAtPnVkZXYtPmRldm51bSwgZXAtPmVwbnVtLAorCQkJICAgKGVwLT5lcG51bSA9PSAwKSA/ICIiIDoKKwkJCSAgICgoZXAtPm5leHRwaWQgPT0gVVNCX1BJRF9JTikgPworCQkJICAgICJpbiIgOiAib3V0IiksIGVwLT5tYXhwYWNrZXQpOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmaXNwMTM2Ml9oY2QtPmxvY2spOworCXNlcV9wcmludGYocywgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX2lzcDEzNjJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY19pc3AxMzYyX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX29wcyA9IHsKKwkub3BlbiA9IHByb2NfaXNwMTM2Ml9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworLyogZXhwZWN0IGp1c3Qgb25lIGlzcDEzNjJfaGNkIHBlciBzeXN0ZW0gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHByb2NfZmlsZW5hbWVbXSA9ICJkcml2ZXIvaXNwMTM2MiI7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisKKwlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeShwcm9jX2ZpbGVuYW1lLCAwLCBOVUxMKTsKKwlpZiAocGRlID09IE5VTEwpIHsKKwkJcHJfd2FybmluZygiJXM6IEZhaWxlZCB0byBjcmVhdGUgZGVidWcgZmlsZSAnJXMnXG4iLCBfX2Z1bmNfXywgcHJvY19maWxlbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwZGUtPnByb2NfZm9wcyA9ICZwcm9jX29wczsKKwlwZGUtPmRhdGEgPSBpc3AxMzYyX2hjZDsKKwlpc3AxMzYyX2hjZC0+cGRlID0gcGRlOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZGVidWdfZmlsZShzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCWlmIChpc3AxMzYyX2hjZC0+cGRlKQorCQlyZW1vdmVfcHJvY19lbnRyeShwcm9jX2ZpbGVuYW1lLCAwKTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGlzcDEzNjJfc3dfcmVzZXQoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlpbnQgdG1wID0gMjA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSENTV1JFUywgSENTV1JFU19NQUdJQyk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENDTURTVEFULCBPSENJX0hDUik7CisJd2hpbGUgKC0tdG1wKSB7CisJCW1kZWxheSgxKTsKKwkJaWYgKCEoaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0NNRFNUQVQpICYgT0hDSV9IQ1IpKQorCQkJYnJlYWs7CisJfQorCWlmICghdG1wKQorCQlwcl9lcnIoIlNvZnR3YXJlIHJlc2V0IHRpbWVvdXRcbiIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaXNwMTM2Ml9tZW1fY29uZmlnKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRvdGFsOworCXUxNiBpc3RsX3NpemUgPSBJU1AxMzYyX0lTVExfQlVGU0laRTsKKwl1MTYgaW50bF9ibGtzaXplID0gSVNQMTM2Ml9JTlRMX0JMS1NJWkUgKyBQVERfSEVBREVSX1NJWkU7CisJdTE2IGludGxfc2l6ZSA9IElTUDEzNjJfSU5UTF9CVUZGRVJTICogaW50bF9ibGtzaXplOworCXUxNiBhdGxfYmxrc2l6ZSA9IElTUDEzNjJfQVRMX0JMS1NJWkUgKyBQVERfSEVBREVSX1NJWkU7CisJdTE2IGF0bF9idWZmZXJzID0gKElTUDEzNjJfQlVGX1NJWkUgLSAoaXN0bF9zaXplICsgaW50bF9zaXplKSkgLyBhdGxfYmxrc2l6ZTsKKwl1MTYgYXRsX3NpemU7CisJaW50IGk7CisKKwlXQVJOX09OKGlzdGxfc2l6ZSAmIDMpOworCVdBUk5fT04oYXRsX2Jsa3NpemUgJiAzKTsKKwlXQVJOX09OKGludGxfYmxrc2l6ZSAmIDMpOworCVdBUk5fT04oYXRsX2Jsa3NpemUgPCBQVERfSEVBREVSX1NJWkUpOworCVdBUk5fT04oaW50bF9ibGtzaXplIDwgUFREX0hFQURFUl9TSVpFKTsKKworCUJVR19PTigodW5zaWduZWQpSVNQMTM2Ml9JTlRMX0JVRkZFUlMgPiAzMik7CisJaWYgKGF0bF9idWZmZXJzID4gMzIpCisJCWF0bF9idWZmZXJzID0gMzI7CisJYXRsX3NpemUgPSBhdGxfYnVmZmVycyAqIGF0bF9ibGtzaXplOworCXRvdGFsID0gYXRsX3NpemUgKyBpbnRsX3NpemUgKyBpc3RsX3NpemU7CisJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJJU1AxMzYyIE1lbW9yeSB1c2FnZTpcbiIpOworCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBJU1RMOiAgICAyICogJTRkOiAgICAgJTRkIEAgJCUwNHg6JCUwNHhcbiIsCisJCSBpc3RsX3NpemUgLyAyLCBpc3RsX3NpemUsIDAsIGlzdGxfc2l6ZSAvIDIpOworCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBJTlRMOiAlNGQgKiAoJTN1KzgpOiAgJTRkIEAgJCUwNHhcbiIsCisJCSBJU1AxMzYyX0lOVExfQlVGRkVSUywgaW50bF9ibGtzaXplIC0gUFREX0hFQURFUl9TSVpFLAorCQkgaW50bF9zaXplLCBpc3RsX3NpemUpOworCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBBVEwgOiAlNGQgKiAoJTN1KzgpOiAgJTRkIEAgJCUwNHhcbiIsCisJCSBhdGxfYnVmZmVycywgYXRsX2Jsa3NpemUgLSBQVERfSEVBREVSX1NJWkUsCisJCSBhdGxfc2l6ZSwgaXN0bF9zaXplICsgaW50bF9zaXplKTsKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgVVNFRC9GUkVFOiAgICU0ZCAgICAgICU0ZFxuIiwgdG90YWwsCisJCSBJU1AxMzYyX0JVRl9TSVpFIC0gdG90YWwpOworCisJaWYgKHRvdGFsID4gSVNQMTM2Ml9CVUZfU0laRSkgeworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiJXM6IE1lbW9yeSByZXF1ZXN0ZWQ6ICVkLCBhdmFpbGFibGUgJWRcbiIsCisJCQlfX2Z1bmNfXywgdG90YWwsIElTUDEzNjJfQlVGX1NJWkUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0b3RhbCA9IGlzdGxfc2l6ZSArIGludGxfc2l6ZSArIGF0bF9zaXplOworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5idWZfc3RhcnQgPSBpICogaXN0bF9zaXplIC8gMiwKKwkJaXNwMTM2Ml9oY2QtPmlzdGxfcXVldWVbaV0uYnVmX3NpemUgPSBpc3RsX3NpemUgLyAyOworCQlpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5ibGtfc2l6ZSA9IDQ7CisJCUlOSVRfTElTVF9IRUFEKCZpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5hY3RpdmUpOworCQlzbnByaW50Zihpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5uYW1lLAorCQkJIHNpemVvZihpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5uYW1lKSwgIklTVEwlZCIsIGkpOworCQlEQkcoMywgIiVzOiAlNXMgYnVmICQlMDR4ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgICBpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5uYW1lLAorCQkgICAgIGlzcDEzNjJfaGNkLT5pc3RsX3F1ZXVlW2ldLmJ1Zl9zdGFydCwKKwkJICAgICBpc3AxMzYyX2hjZC0+aXN0bF9xdWV1ZVtpXS5idWZfc2l6ZSk7CisJfQorCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDSVNUTEJVRlNaLCBpc3RsX3NpemUgLyAyKTsKKworCWlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLmJ1Zl9zdGFydCA9IGlzdGxfc2l6ZTsKKwlpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfc2l6ZSA9IGludGxfc2l6ZTsKKwlpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfY291bnQgPSBJU1AxMzYyX0lOVExfQlVGRkVSUzsKKwlpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5ibGtfc2l6ZSA9IGludGxfYmxrc2l6ZTsKKwlpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfYXZhaWwgPSBpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5idWZfY291bnQ7CisJaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuc2tpcF9tYXAgPSB+MDsKKwlJTklUX0xJU1RfSEVBRCgmaXNwMTM2Ml9oY2QtPmludGxfcXVldWUuYWN0aXZlKTsKKworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDSU5UTEJVRlNaLAorCQkJICAgIGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLmJ1Zl9zaXplKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0lOVExCTEtTWiwKKwkJCSAgICBpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5ibGtfc2l6ZSAtIFBURF9IRUFERVJfU0laRSk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENJTlRMU0tJUCwgfjApOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5UTExBU1QsCisJCQkgICAgMSA8PCAoSVNQMTM2Ml9JTlRMX0JVRkZFUlMgLSAxKSk7CisKKwlpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJ1Zl9zdGFydCA9IGlzdGxfc2l6ZSArIGludGxfc2l6ZTsKKwlpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJ1Zl9zaXplID0gYXRsX3NpemU7CisJaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfY291bnQgPSBhdGxfYnVmZmVyczsKKwlpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJsa19zaXplID0gYXRsX2Jsa3NpemU7CisJaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfYXZhaWwgPSBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJ1Zl9jb3VudDsKKwlpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLnNraXBfbWFwID0gfjA7CisJSU5JVF9MSVNUX0hFQUQoJmlzcDEzNjJfaGNkLT5hdGxfcXVldWUuYWN0aXZlKTsKKworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDQVRMQlVGU1osCisJCQkgICAgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfc2l6ZSk7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSENBVExCTEtTWiwKKwkJCSAgICBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJsa19zaXplIC0gUFREX0hFQURFUl9TSVpFKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTFNLSVAsIH4wKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ0FUTExBU1QsCisJCQkgICAgMSA8PCAoYXRsX2J1ZmZlcnMgLSAxKSk7CisKKwlzbnByaW50Zihpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLm5hbWUsCisJCSBzaXplb2YoaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5uYW1lKSwgIkFUTCIpOworCXNucHJpbnRmKGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLm5hbWUsCisJCSBzaXplb2YoaXNwMTM2Ml9oY2QtPmludGxfcXVldWUubmFtZSksICJJTlRMIik7CisJREJHKDMsICIlczogJTVzIGJ1ZiAkJTA0eCAlMmQgKiAlNGQgPSAlNGRcbiIsIF9fZnVuY19fLAorCSAgICAgaXNwMTM2Ml9oY2QtPmludGxfcXVldWUubmFtZSwKKwkgICAgIGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLmJ1Zl9zdGFydCwKKwkgICAgIElTUDEzNjJfSU5UTF9CVUZGRVJTLCBpc3AxMzYyX2hjZC0+aW50bF9xdWV1ZS5ibGtfc2l6ZSwKKwkgICAgIGlzcDEzNjJfaGNkLT5pbnRsX3F1ZXVlLmJ1Zl9zaXplKTsKKwlEQkcoMywgIiVzOiAlNXMgYnVmICQlMDR4ICUyZCAqICU0ZCA9ICU0ZFxuIiwgX19mdW5jX18sCisJICAgICBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLm5hbWUsCisJICAgICBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJ1Zl9zdGFydCwKKwkgICAgIGF0bF9idWZmZXJzLCBpc3AxMzYyX2hjZC0+YXRsX3F1ZXVlLmJsa19zaXplLAorCSAgICAgaXNwMTM2Ml9oY2QtPmF0bF9xdWV1ZS5idWZfc2l6ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNwMTM2Ml9oY19yZXNldChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwl1bnNpZ25lZCBsb25nIHQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMTAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNsa3JkeSA9IDA7CisKKwlwcl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKworCWlmIChpc3AxMzYyX2hjZC0+Ym9hcmQgJiYgaXNwMTM2Ml9oY2QtPmJvYXJkLT5yZXNldCkgeworCQlpc3AxMzYyX2hjZC0+Ym9hcmQtPnJlc2V0KGhjZC0+c2VsZi5jb250cm9sbGVyLCAxKTsKKwkJbXNsZWVwKDIwKTsKKwkJaWYgKGlzcDEzNjJfaGNkLT5ib2FyZC0+Y2xvY2spCisJCQlpc3AxMzYyX2hjZC0+Ym9hcmQtPmNsb2NrKGhjZC0+c2VsZi5jb250cm9sbGVyLCAxKTsKKwkJaXNwMTM2Ml9oY2QtPmJvYXJkLT5yZXNldChoY2QtPnNlbGYuY29udHJvbGxlciwgMCk7CisJfSBlbHNlCisJCWlzcDEzNjJfc3dfcmVzZXQoaXNwMTM2Ml9oY2QpOworCisJLyogY2hpcCBoYXMgYmVlbiByZXNldC4gRmlyc3Qgd2UgbmVlZCB0byBzZWUgYSBjbG9jayAqLworCXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwl3aGlsZSAoIWNsa3JkeSAmJiB0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCB0KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJY2xrcmR5ID0gaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfQ0xLUkRZOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQlpZiAoIWNsa3JkeSkKKwkJCW1zbGVlcCg0KTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBIQ3VQSU5UX0NMS1JEWSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWNsa3JkeSkgeworCQlwcl9lcnIoIkNsb2NrIG5vdCByZWFkeSBhZnRlciAlbHVtc1xuIiwgdGltZW91dCk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlzcDEzNjJfaGNfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0bXA7CisKKwlwcl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKworCWRlbF90aW1lcl9zeW5jKCZoY2QtPnJoX3RpbWVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQiwgMCk7CisKKwkvKiBTd2l0Y2ggb2ZmIHBvd2VyIGZvciBhbGwgcG9ydHMgKi8KKwl0bXAgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQSk7CisJdG1wICY9IH4oUkhfQV9OUFMgfCBSSF9BX1BTTSk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSERFU0NBLCB0bXApOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhTVEFUVVMsIFJIX0hTX0xQUyk7CisKKwkvKiBSZXNldCB0aGUgY2hpcCAqLworCWlmIChpc3AxMzYyX2hjZC0+Ym9hcmQgJiYgaXNwMTM2Ml9oY2QtPmJvYXJkLT5yZXNldCkKKwkJaXNwMTM2Ml9oY2QtPmJvYXJkLT5yZXNldChoY2QtPnNlbGYuY29udHJvbGxlciwgMSk7CisJZWxzZQorCQlpc3AxMzYyX3N3X3Jlc2V0KGlzcDEzNjJfaGNkKTsKKworCWlmIChpc3AxMzYyX2hjZC0+Ym9hcmQgJiYgaXNwMTM2Ml9oY2QtPmJvYXJkLT5jbG9jaykKKwkJaXNwMTM2Ml9oY2QtPmJvYXJkLT5jbG9jayhoY2QtPnNlbGYuY29udHJvbGxlciwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgQ0hJUF9CVUZGRVJfVEVTVAorc3RhdGljIGludCBpc3AxMzYyX2NoaXBfdGVzdChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCWludCByZXQgPSAwOworCXUxNiAqcmVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZWYgPSBrbWFsbG9jKDIgKiBJU1AxMzYyX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVmKSB7CisJCWludCBvZmZzZXQ7CisJCXUxNiAqdHN0ID0gJnJlZltJU1AxMzYyX0JVRl9TSVpFIC8gMl07CisKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBJU1AxMzYyX0JVRl9TSVpFIC8gMjsgb2Zmc2V0KyspIHsKKwkJCXJlZltvZmZzZXRdID0gfm9mZnNldDsKKwkJCXRzdFtvZmZzZXRdID0gb2Zmc2V0OworCQl9CisKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCA0OyBvZmZzZXQrKykgeworCQkJaW50IGo7CisKKwkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCQlpc3AxMzYyX3dyaXRlX2J1ZmZlcihpc3AxMzYyX2hjZCwgKHU4ICopcmVmICsgb2Zmc2V0LCAwLCBqKTsKKwkJCQlpc3AxMzYyX3JlYWRfYnVmZmVyKGlzcDEzNjJfaGNkLCAodTggKil0c3QgKyBvZmZzZXQsIDAsIGopOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwkJCQlpZiAobWVtY21wKHJlZiwgdHN0LCBqKSkgeworCQkJCQlyZXQgPSAtRU5PREVWOworCQkJCQlwcl9lcnIoIiVzOiBtZW1vcnkgY2hlY2sgd2l0aCAlZCBieXRlIG9mZnNldCAlZCBmYWlsZWRcbiIsCisJCQkJCSAgICBfX2Z1bmNfXywgaiwgb2Zmc2V0KTsKKwkJCQkJZHVtcF9kYXRhKCh1OCAqKXJlZiArIG9mZnNldCwgaik7CisJCQkJCWR1bXBfZGF0YSgodTggKil0c3QgKyBvZmZzZXQsIGopOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQlpc3AxMzYyX3dyaXRlX2J1ZmZlcihpc3AxMzYyX2hjZCwgcmVmLCAwLCBJU1AxMzYyX0JVRl9TSVpFKTsKKwkJaXNwMTM2Ml9yZWFkX2J1ZmZlcihpc3AxMzYyX2hjZCwgdHN0LCAwLCBJU1AxMzYyX0JVRl9TSVpFKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAobWVtY21wKHJlZiwgdHN0LCBJU1AxMzYyX0JVRl9TSVpFKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCXByX2VycigiJXM6IG1lbW9yeSBjaGVjayBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCWR1bXBfZGF0YSgodTggKil0c3QsIElTUDEzNjJfQlVGX1NJWkUgLyAyKTsKKwkJfQorCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgMjU2OyBvZmZzZXQrKykgeworCQkJaW50IHRlc3Rfc2l6ZSA9IDA7CisKKwkJCXlpZWxkKCk7CisKKwkJCW1lbXNldCh0c3QsIDAsIElTUDEzNjJfQlVGX1NJWkUpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCQlpc3AxMzYyX3dyaXRlX2J1ZmZlcihpc3AxMzYyX2hjZCwgdHN0LCAwLCBJU1AxMzYyX0JVRl9TSVpFKTsKKwkJCWlzcDEzNjJfcmVhZF9idWZmZXIoaXNwMTM2Ml9oY2QsIHRzdCwgMCwgSVNQMTM2Ml9CVUZfU0laRSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJaWYgKG1lbWNtcCh0c3QsIHRzdCArIChJU1AxMzYyX0JVRl9TSVpFIC8gKDIgKiBzaXplb2YoKnRzdCkpKSwKKwkJCQkgICBJU1AxMzYyX0JVRl9TSVpFIC8gMikpIHsKKwkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gY2xlYXIgYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CisJCQkJZHVtcF9kYXRhKCh1OCAqKXRzdCwgSVNQMTM2Ml9CVUZfU0laRSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCWlzcDEzNjJfd3JpdGVfYnVmZmVyKGlzcDEzNjJfaGNkLCByZWYsIG9mZnNldCAqIDIsIFBURF9IRUFERVJfU0laRSk7CisJCQlpc3AxMzYyX3dyaXRlX2J1ZmZlcihpc3AxMzYyX2hjZCwgcmVmICsgUFREX0hFQURFUl9TSVpFIC8gc2l6ZW9mKCpyZWYpLAorCQkJCQkgICAgIG9mZnNldCAqIDIgKyBQVERfSEVBREVSX1NJWkUsIHRlc3Rfc2l6ZSk7CisJCQlpc3AxMzYyX3JlYWRfYnVmZmVyKGlzcDEzNjJfaGNkLCB0c3QsIG9mZnNldCAqIDIsCisJCQkJCSAgICBQVERfSEVBREVSX1NJWkUgKyB0ZXN0X3NpemUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCWlmIChtZW1jbXAocmVmLCB0c3QsIFBURF9IRUFERVJfU0laRSArIHRlc3Rfc2l6ZSkpIHsKKwkJCQlkdW1wX2RhdGEoKCh1OCAqKXJlZikgKyBvZmZzZXQsIFBURF9IRUFERVJfU0laRSArIHRlc3Rfc2l6ZSk7CisJCQkJZHVtcF9kYXRhKCh1OCAqKXRzdCwgUFREX0hFQURFUl9TSVpFICsgdGVzdF9zaXplKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJCQlpc3AxMzYyX3JlYWRfYnVmZmVyKGlzcDEzNjJfaGNkLCB0c3QsIG9mZnNldCAqIDIsCisJCQkJCQkgICAgUFREX0hFQURFUl9TSVpFICsgdGVzdF9zaXplKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQkJCWlmIChtZW1jbXAocmVmLCB0c3QsIFBURF9IRUFERVJfU0laRSArIHRlc3Rfc2l6ZSkpIHsKKwkJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCQkJcHJfZXJyKCIlczogbWVtb3J5IGNoZWNrIHdpdGggb2Zmc2V0ICUwMnggZmFpbGVkXG4iLAorCQkJCQkgICAgX19mdW5jX18sIG9mZnNldCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwcl93YXJuaW5nKCIlczogbWVtb3J5IGNoZWNrIHdpdGggb2Zmc2V0ICUwMnggb2sgYWZ0ZXIgc2Vjb25kIHJlYWRcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgb2Zmc2V0KTsKKwkJCX0KKwkJfQorCQlrZnJlZShyZWYpOworCX0KKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaXNwMTM2Ml9oY19zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWludCByZXQ7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCA9IGhjZF90b19pc3AxMzYyX2hjZChoY2QpOworCXN0cnVjdCBpc3AxMzYyX3BsYXRmb3JtX2RhdGEgKmJvYXJkID0gaXNwMTM2Ml9oY2QtPmJvYXJkOworCXUxNiBod2NmZzsKKwl1MTYgY2hpcGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCWNoaXBpZCA9IGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSENDSElQSUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoKGNoaXBpZCAmIEhDQ0hJUElEX01BU0spICE9IEhDQ0hJUElEX01BR0lDKSB7CisJCXByX2VycigiJXM6IEludmFsaWQgY2hpcCBJRCAlMDR4XG4iLCBfX2Z1bmNfXywgY2hpcGlkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYgQ0hJUF9CVUZGRVJfVEVTVAorCXJldCA9IGlzcDEzNjJfY2hpcF90ZXN0KGlzcDEzNjJfaGNkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVOT0RFVjsKKyNlbmRpZgorCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgYW5kIGRpc2FibGUgYWxsIGludGVycnVwdCBzb3VyY2VzICovCisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgMHhmZik7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVEVOQiwgMCk7CisKKwkvKiBIVyBjb25mICovCisJaHdjZmcgPSBIQ0hXQ0ZHX0lOVF9FTkFCTEUgfCBIQ0hXQ0ZHX0RCV0lEVEgoMSk7CisJaWYgKGJvYXJkLT5zZWwxNUtyZXMpCisJCWh3Y2ZnIHw9IEhDSFdDRkdfUFVMTERPV05fRFMyIHwKKwkJCSgoTUFYX1JPT1RfUE9SVFMgPiAxKSA/IEhDSFdDRkdfUFVMTERPV05fRFMxIDogMCk7CisJaWYgKGJvYXJkLT5jbGtub3RzdG9wKQorCQlod2NmZyB8PSBIQ0hXQ0ZHX0NMS05PVFNUT1A7CisJaWYgKGJvYXJkLT5vY19lbmFibGUpCisJCWh3Y2ZnIHw9IEhDSFdDRkdfQU5BTE9HX09DOworCWlmIChib2FyZC0+aW50X2FjdF9oaWdoKQorCQlod2NmZyB8PSBIQ0hXQ0ZHX0lOVF9QT0w7CisJaWYgKGJvYXJkLT5pbnRfZWRnZV90cmlnZ2VyZWQpCisJCWh3Y2ZnIHw9IEhDSFdDRkdfSU5UX1RSSUdHRVI7CisJaWYgKGJvYXJkLT5kcmVxX2FjdF9oaWdoKQorCQlod2NmZyB8PSBIQ0hXQ0ZHX0RSRVFfUE9MOworCWlmIChib2FyZC0+ZGFja19hY3RfaGlnaCkKKwkJaHdjZmcgfD0gSENIV0NGR19EQUNLX1BPTDsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ0hXQ0ZHLCBod2NmZyk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENIV0NGRyk7CisJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSENETUFDRkcsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBpc3AxMzYyX21lbV9jb25maWcoaGNkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwkvKiBSb290IGh1YiBjb25mICovCisJaXNwMTM2Ml9oY2QtPnJoZGVzY2EgPSAwOworCWlmIChib2FyZC0+bm9fcG93ZXJfc3dpdGNoaW5nKQorCQlpc3AxMzYyX2hjZC0+cmhkZXNjYSB8PSBSSF9BX05QUzsKKwlpZiAoYm9hcmQtPnBvd2VyX3N3aXRjaGluZ19tb2RlKQorCQlpc3AxMzYyX2hjZC0+cmhkZXNjYSB8PSBSSF9BX1BTTTsKKwlpZiAoYm9hcmQtPnBvdHBnKQorCQlpc3AxMzYyX2hjZC0+cmhkZXNjYSB8PSAoYm9hcmQtPnBvdHBnIDw8IDI0KSAmIFJIX0FfUE9UUEdUOworCWVsc2UKKwkJaXNwMTM2Ml9oY2QtPnJoZGVzY2EgfD0gKDI1IDw8IDI0KSAmIFJIX0FfUE9UUEdUOworCisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSERFU0NBLCBpc3AxMzYyX2hjZC0+cmhkZXNjYSAmIH5SSF9BX09DUE0pOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQSwgaXNwMTM2Ml9oY2QtPnJoZGVzY2EgfCBSSF9BX09DUE0pOworCWlzcDEzNjJfaGNkLT5yaGRlc2NhID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIREVTQ0EpOworCisJaXNwMTM2Ml9oY2QtPnJoZGVzY2IgPSBSSF9CX1BQQ007CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENSSERFU0NCLCBpc3AxMzYyX2hjZC0+cmhkZXNjYik7CisJaXNwMTM2Ml9oY2QtPnJoZGVzY2IgPSBpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhERVNDQik7CisKKwlpc3AxMzYyX3JlYWRfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRk1JTlRWTCk7CisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENGTUlOVFZMLCAoRlNNUChGSSkgPDwgMTYpIHwgRkkpOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDTFNUSFJFU0gsIExTVEhSRVNIKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlpc3AxMzYyX2hjZC0+aGNfY29udHJvbCA9IE9IQ0lfVVNCX09QRVI7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkvKiBTZXQgdXAgaW50ZXJydXB0cyAqLworCWlzcDEzNjJfaGNkLT5pbnRlbmIgPSBPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX1JIU0MgfCBPSENJX0lOVFJfVUU7CisJaXNwMTM2Ml9oY2QtPmludGVuYiB8PSBPSENJX0lOVFJfUkQ7CisJaXNwMTM2Ml9oY2QtPmlycWVuYiA9IEhDdVBJTlRfT1BSIHwgSEN1UElOVF9TVVNQOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDSU5URU5CLCBpc3AxMzYyX2hjZC0+aW50ZW5iKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5URU5CLCBpc3AxMzYyX2hjZC0+aXJxZW5iKTsKKworCS8qIEdvIG9wZXJhdGlvbmFsICovCisJaXNwMTM2Ml93cml0ZV9yZWczMihpc3AxMzYyX2hjZCwgSENDT05UUk9MLCBpc3AxMzYyX2hjZC0+aGNfY29udHJvbCk7CisJLyogZW5hYmxlIGdsb2JhbCBwb3dlciAqLworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhTVEFUVVMsIFJIX0hTX0xQU0MgfCBSSF9IU19EUldFKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgaXNwMTM2Ml9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIklTUDEzNjIgSG9zdCBDb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgaXNwMTM2Ml9oY2QpLAorCisJLmlycSA9CQkJaXNwMTM2Ml9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkucmVzZXQgPQkJaXNwMTM2Ml9oY19yZXNldCwKKwkuc3RhcnQgPQkJaXNwMTM2Ml9oY19zdGFydCwKKwkuc3RvcCA9CQkJaXNwMTM2Ml9oY19zdG9wLAorCisJLnVyYl9lbnF1ZXVlID0JCWlzcDEzNjJfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCWlzcDEzNjJfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlpc3AxMzYyX2VuZHBvaW50X2Rpc2FibGUsCisKKwkuZ2V0X2ZyYW1lX251bWJlciA9CWlzcDEzNjJfZ2V0X2ZyYW1lLAorCisJLmh1Yl9zdGF0dXNfZGF0YSA9CWlzcDEzNjJfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlpc3AxMzYyX2h1Yl9jb250cm9sLAorCS5idXNfc3VzcGVuZCA9CQlpc3AxMzYyX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCWlzcDEzNjJfYnVzX3Jlc3VtZSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgcmVzb3VyY2VfbGVuKHIpICgoKHIpLT5lbmQgLSAociktPnN0YXJ0KSArIDEpCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlzcDEzNjJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QgPSBoY2RfdG9faXNwMTM2Ml9oY2QoaGNkKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJlbW92ZV9kZWJ1Z19maWxlKGlzcDEzNjJfaGNkKTsKKwlEQkcoMCwgIiVzOiBSZW1vdmluZyBIQ0RcbiIsIF9fZnVuY19fKTsKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCisJREJHKDAsICIlczogVW5tYXBwaW5nIGRhdGFfcmVnIEAgJTA4eFxuIiwgX19mdW5jX18sCisJICAgICh1MzIpaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKKwlpb3VubWFwKGlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7CisKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywKKwkgICAgKHUzMilpc3AxMzYyX2hjZC0+YWRkcl9yZWcpOworCWlvdW5tYXAoaXNwMTM2Ml9oY2QtPmFkZHJfcmVnKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJREJHKDAsICIlczogcmVsZWFzZSBtZW1fcmVnaW9uOiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClyZXMtPnN0YXJ0KTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2VfbGVuKHJlcykpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlEQkcoMCwgIiVzOiByZWxlYXNlIG1lbV9yZWdpb246ICUwOGx4XG4iLCBfX2Z1bmNfXywgKGxvbmcgdW5zaWduZWQgaW50KXJlcy0+c3RhcnQpOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9sZW4ocmVzKSk7CisKKwlEQkcoMCwgIiVzOiBwdXRfaGNkXG4iLCBfX2Z1bmNfXyk7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlEQkcoMCwgIiVzOiBEb25lXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgaXNwMTM2Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmFkZHIsICpkYXRhOworCXZvaWQgX19pb21lbSAqYWRkcl9yZWc7CisJdm9pZCBfX2lvbWVtICpkYXRhX3JlZzsKKwlpbnQgaXJxOworCWludCByZXR2YWwgPSAwOworCisJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdC4gIGJvYXJkLXNwZWNpZmljIGluaXQgbG9naWMgc2hvdWxkCisJICogaGF2ZSBpbml0aWFsaXplZCB0aGlzIHRoZSB0aHJlZSByZXNvdXJjZXMgYW5kIHByb2JhYmx5IGJvYXJkCisJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQorCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgorCSAqLworCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMykgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycjE7CisJfQorCisJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIWFkZHIgfHwgIWRhdGEgfHwgaXJxIDwgMCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycjE7CisJfQorCisjaWZkZWYgQ09ORklHX1VTQl9IQ0RfRE1BCisJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKmRtYV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOworCisJCWlmICghZG1hX3JlcykgeworCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyMTsKKwkJfQorCQlpc3AxMzYyX2hjZC0+ZGF0YV9kbWEgPSBkbWFfcmVzLT5zdGFydDsKKwkJaXNwMTM2Ml9oY2QtPm1heF9kbWFfc2l6ZSA9IHJlc291cmNlX2xlbihkbWFfcmVzKTsKKwl9CisjZWxzZQorCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKKwkJREJHKDEsICJ3b24ndCBkbyBETUEiKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKyNlbmRpZgorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWRkci0+c3RhcnQsIHJlc291cmNlX2xlbihhZGRyKSwgaGNkX25hbWUpKSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKwlhZGRyX3JlZyA9IGlvcmVtYXAoYWRkci0+c3RhcnQsIHJlc291cmNlX2xlbihhZGRyKSk7CisJaWYgKGFkZHJfcmVnID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGRhdGEtPnN0YXJ0LCByZXNvdXJjZV9sZW4oZGF0YSksIGhjZF9uYW1lKSkgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMzsKKwl9CisJZGF0YV9yZWcgPSBpb3JlbWFwKGRhdGEtPnN0YXJ0LCByZXNvdXJjZV9sZW4oZGF0YSkpOworCWlmIChkYXRhX3JlZyA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyNDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoY2QgKi8KKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmaXNwMTM2Ml9oY19kcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjU7CisJfQorCWhjZC0+cnNyY19zdGFydCA9IGRhdGEtPnN0YXJ0OworCWlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJaXNwMTM2Ml9oY2QtPmRhdGFfcmVnID0gZGF0YV9yZWc7CisJaXNwMTM2Ml9oY2QtPmFkZHJfcmVnID0gYWRkcl9yZWc7CisKKwlpc3AxMzYyX2hjZC0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CisJc3Bpbl9sb2NrX2luaXQoJmlzcDEzNjJfaGNkLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaXNwMTM2Ml9oY2QtPmFzeW5jKTsKKwlJTklUX0xJU1RfSEVBRCgmaXNwMTM2Ml9oY2QtPnBlcmlvZGljKTsKKwlJTklUX0xJU1RfSEVBRCgmaXNwMTM2Ml9oY2QtPmlzb2MpOworCUlOSVRfTElTVF9IRUFEKCZpc3AxMzYyX2hjZC0+cmVtb3ZlX2xpc3QpOworCWlzcDEzNjJfaGNkLT5ib2FyZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworI2lmIFVTRV9QTEFURk9STV9ERUxBWQorCWlmICghaXNwMTM2Ml9oY2QtPmJvYXJkLT5kZWxheSkgeworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiTm8gcGxhdGZvcm0gZGVsYXkgZnVuY3Rpb24gZ2l2ZW5cbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycjY7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJNCisJaWYgKGlzcDEzNjJfaGNkLT5ib2FyZCkKKwkJc2V0X2lycV90eXBlKGlycSwgaXNwMTM2Ml9oY2QtPmJvYXJkLT5pbnRfYWN0X2hpZ2ggPyBJUlFUX1JJU0lORyA6IElSUVRfRkFMTElORyk7CisjZW5kaWYKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKKwlpZiAocmV0dmFsICE9IDApCisJCWdvdG8gZXJyNjsKKwlwcl9pbmZvKCIlcywgaXJxICVkXG4iLCBoY2QtPnByb2R1Y3RfZGVzYywgaXJxKTsKKworCWNyZWF0ZV9kZWJ1Z19maWxlKGlzcDEzNjJfaGNkKTsKKworCXJldHVybiAwOworCisgZXJyNjoKKwlEQkcoMCwgIiVzOiBGcmVlaW5nIGRldiAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilpc3AxMzYyX2hjZCk7CisJdXNiX3B1dF9oY2QoaGNkKTsKKyBlcnI1OgorCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLCAodTMyKWRhdGFfcmVnKTsKKwlpb3VubWFwKGRhdGFfcmVnKTsKKyBlcnI0OgorCURCRygwLCAiJXM6IFJlbGVhc2luZyBtZW0gcmVnaW9uICUwOGx4XG4iLCBfX2Z1bmNfXywgKGxvbmcgdW5zaWduZWQgaW50KWRhdGEtPnN0YXJ0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZGF0YS0+c3RhcnQsIHJlc291cmNlX2xlbihkYXRhKSk7CisgZXJyMzoKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilhZGRyX3JlZyk7CisJaW91bm1hcChhZGRyX3JlZyk7CisgZXJyMjoKKwlEQkcoMCwgIiVzOiBSZWxlYXNpbmcgbWVtIHJlZ2lvbiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClhZGRyLT5zdGFydCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGFkZHItPnN0YXJ0LCByZXNvdXJjZV9sZW4oYWRkcikpOworIGVycjE6CisJcHJfZXJyKCIlczogaW5pdCBlcnJvciwgJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmCUNPTkZJR19QTQorc3RhdGljIGludCBpc3AxMzYyX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCURCRygwLCAiJXM6IFN1c3BlbmRpbmcgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCURCRygwLCAiJXM6IFN1c3BlbmRpbmcgcm9vdCBodWJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gaXNwMTM2Ml9idXNfc3VzcGVuZChoY2QpOworCX0gZWxzZSB7CisJCURCRygwLCAiJXM6IFN1c3BlbmRpbmcgUkggcG9ydHNcbiIsIF9fZnVuY19fKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDUkhTVEFUVVMsIFJIX0hTX0xQUyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDEzNjJfaGNkLT5sb2NrLCBmbGFncyk7CisJfQorCWlmIChyZXR2YWwgPT0gMCkKKwkJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBpc3AxMzYyX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkID0gaGNkX3RvX2lzcDEzNjJfaGNkKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRygwLCAiJXM6IFJlc3VtaW5nXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKKwkJREJHKDAsICIlczogUmVzdW1lIFJIIHBvcnRzXG4iLCBfX2Z1bmNfXyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMzYyX2hjZC0+bG9jaywgZmxhZ3MpOworCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGlzcDEzNjJfaGNkLCBIQ1JIU1RBVFVTLCBSSF9IU19MUFNDKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTM2Ml9oY2QtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKworCXJldHVybiBpc3AxMzYyX2J1c19yZXN1bWUoaXNwMTM2Ml9oY2RfdG9faGNkKGlzcDEzNjJfaGNkKSk7Cit9CisjZWxzZQorI2RlZmluZQlpc3AxMzYyX3N1c3BlbmQJTlVMTAorI2RlZmluZQlpc3AxMzYyX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNwMTM2Ml9kcml2ZXIgPSB7CisJLnByb2JlID0gaXNwMTM2Ml9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaXNwMTM2Ml9yZW1vdmUpLAorCisJLnN1c3BlbmQgPSBpc3AxMzYyX3N1c3BlbmQsCisJLnJlc3VtZSA9IGlzcDEzNjJfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gKGNoYXIgKiloY2RfbmFtZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IGlzcDEzNjJfaW5pdCh2b2lkKQoreworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcHJfaW5mbygiZHJpdmVyICVzLCAlc1xuIiwgaGNkX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpc3AxMzYyX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChpc3AxMzYyX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgaXNwMTM2Ml9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDEzNjJfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGlzcDEzNjJfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjBmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaApAQCAtMCwwICsxLDEwNzkgQEAKKy8qCisgKiBJU1AxMzYyIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiBDT1BZUklHSFQgKEMpIGJ5IEwuIFdhc3NtYW5uIDxMV0BLQVJPLWVsZWN0cm9uaWNzLmRlPgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBQbGF0Zm9ybSBzcGVjaWZpYyBjb21waWxlIHRpbWUgb3B0aW9ucworICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9LQVJPKQorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9rYXJvLmg+CisKKyNkZWZpbmUgVVNFXzMyQklUCQkxCisKKworLyogVGhlc2Ugb3B0aW9ucyBhcmUgbXV0dWFsbHkgZWNsdXNpdmUgKi8KKyNkZWZpbmUgVVNFX1BMQVRGT1JNX0RFTEFZCTEKKyNkZWZpbmUgVVNFX05ERUxBWQkJMAorLyoKKyAqIE1BWF9ST09UX1BPUlRTOiBOdW1iZXIgb2YgZG93bnN0cmVhbSBwb3J0cworICoKKyAqIFRoZSBjaGlwIGhhcyB0d28gVVNCIHBvcnRzLCBvbmUgb2Ygd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQgYXMKKyAqIGFuIFVTQiBkZXZpY2UgcG9ydCwgc28gdGhlIHZhbHVlIG9mIHRoaXMgY29uc3RhbnQgaXMgaW1wbGVtZW50YXRpb24KKyAqIHNwZWNpZmljLgorICovCisjZGVmaW5lIE1BWF9ST09UX1BPUlRTCQkyCisjZGVmaW5lIERVTU1ZX0RFTEFZX0FDQ0VTUyBkbyB7fSB3aGlsZSAoMCkKKworLyogaW5zZXJ0IHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBvdGhlciBtYWNoaW5lcyBoZXJlICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19CTEFDS0ZJTikKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjZGVmaW5lIFVTRV8zMkJJVAkJMAorI2RlZmluZSBNQVhfUk9PVF9QT1JUUwkJMgorI2RlZmluZSBVU0VfUExBVEZPUk1fREVMQVkJMAorI2RlZmluZSBVU0VfTkRFTEFZCQkxCisKKyNkZWZpbmUgRFVNTVlfREVMQVlfQUNDRVNTIFwKKwlkbyB7IFwKKwkJYmZpbl9yZWFkMTYoQVNZTkNfQkFOSzBfQkFTRSk7IFwKKwkJYmZpbl9yZWFkMTYoQVNZTkNfQkFOSzBfQkFTRSk7IFwKKwkJYmZpbl9yZWFkMTYoQVNZTkNfQkFOSzBfQkFTRSk7IFwKKwl9IHdoaWxlICgwKQorCisjdW5kZWYgaW5zdworI3VuZGVmIG91dHN3CisKKyNkZWZpbmUgaW5zdyAgZGVsYXllZF9pbnN3CisjZGVmaW5lIG91dHN3ICBkZWxheWVkX291dHN3CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheWVkX291dHN3KHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdW5zaWduZWQgc2hvcnQgKmJwID0gKHVuc2lnbmVkIHNob3J0ICopYnVmOworCXdoaWxlIChsZW4tLSkgeworCQlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJCW91dHcoKmJwKyssIGFkZHIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlbGF5ZWRfaW5zdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKKwl3aGlsZSAobGVuLS0pIHsKKwkJRFVNTVlfREVMQVlfQUNDRVNTOworCQkqYnArKyA9IGludygodm9pZCAqKWFkZHIpOworCX0KK30KKworI2Vsc2UKKworI2RlZmluZSBNQVhfUk9PVF9QT1JUUwkJMgorCisjZGVmaW5lIFVTRV8zMkJJVAkJMAorCisvKiBUaGVzZSBvcHRpb25zIGFyZSBtdXR1YWxseSBlY2x1c2l2ZSAqLworI2RlZmluZSBVU0VfUExBVEZPUk1fREVMQVkJMAorI2RlZmluZSBVU0VfTkRFTEFZCQkwCisKKyNkZWZpbmUgRFVNTVlfREVMQVlfQUNDRVNTIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgVVNCX1JFU0VUX1dJRFRICQkJNTAKKyNkZWZpbmUgTUFYX1hGRVJfU0laRQkJCTEwMjMKKworLyogQnVmZmVyIHNpemVzICovCisjZGVmaW5lIElTUDEzNjJfQlVGX1NJWkUJCTQwOTYKKyNkZWZpbmUgSVNQMTM2Ml9JU1RMX0JVRlNJWkUJCTUxMgorI2RlZmluZSBJU1AxMzYyX0lOVExfQkxLU0laRQkJNjQKKyNkZWZpbmUgSVNQMTM2Ml9JTlRMX0JVRkZFUlMJCTE2CisjZGVmaW5lIElTUDEzNjJfQVRMX0JMS1NJWkUJCTY0CisKKyNkZWZpbmUgSVNQMTM2Ml9SRUdfV1JJVEVfT0ZGU0VUCTB4ODAKKworI2lmZGVmIElTUDEzNjJfREVCVUcKK3R5cGVkZWYgY29uc3QgdW5zaWduZWQgaW50IGlzcDEzNjJfcmVnX3Q7CisKKyNkZWZpbmUgUkVHX1dJRFRIXzE2CQkJMHgwMDAKKyNkZWZpbmUgUkVHX1dJRFRIXzMyCQkJMHgxMDAKKyNkZWZpbmUgUkVHX1dJRFRIX01BU0sJCQkweDEwMAorI2RlZmluZSBSRUdfTk9fTUFTSwkJCTB4MGZmCisKKyNkZWZpbmUgUkVHX0FDQ0VTU19SCQkJMHgyMDAKKyNkZWZpbmUgUkVHX0FDQ0VTU19XCQkJMHg0MDAKKyNkZWZpbmUgUkVHX0FDQ0VTU19SVwkJCTB4NjAwCisjZGVmaW5lIFJFR19BQ0NFU1NfTUFTSwkJCTB4NjAwCisKKyNkZWZpbmUgSVNQMTM2Ml9SRUdfTk8ocikJCSgocikgJiBSRUdfTk9fTUFTSykKKworI2RlZmluZSBfQlVHX09OKHgpCUJVR19PTih4KQorI2RlZmluZSBfV0FSTl9PTih4KQlXQVJOX09OKHgpCisKKyNkZWZpbmUgSVNQMTM2Ml9SRUcobmFtZSwgYWRkciwgd2lkdGgsIHJ3KSBcCitzdGF0aWMgaXNwMTM2Ml9yZWdfdCBJU1AxMzYyX1JFR18jI25hbWUgPSAoKGFkZHIpIHwgKHdpZHRoKSB8IChydykpCisKKyNkZWZpbmUgUkVHX0FDQ0VTU19URVNUKHIpICAgQlVHX09OKCgocikgJiBJU1AxMzYyX1JFR19XUklURV9PRkZTRVQpICYmICEoKHIpICYgUkVHX0FDQ0VTU19XKSkKKyNkZWZpbmUgUkVHX1dJRFRIX1RFU1QociwgdykgQlVHX09OKCgocikgJiBSRUdfV0lEVEhfTUFTSykgIT0gKHcpKQorI2Vsc2UKK3R5cGVkZWYgY29uc3QgdW5zaWduZWQgY2hhciBpc3AxMzYyX3JlZ190OworI2RlZmluZSBJU1AxMzYyX1JFR19OTyhyKQkJKHIpCisjZGVmaW5lIF9CVUdfT04oeCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX1dBUk5fT04oeCkJCQlkbyB7fSB3aGlsZSAoMCkKKworI2RlZmluZSBJU1AxMzYyX1JFRyhuYW1lLCBhZGRyLCB3aWR0aCwgcncpIFwKK3N0YXRpYyBpc3AxMzYyX3JlZ190IElTUDEzNjJfUkVHXyMjbmFtZSA9IGFkZHIKKworI2RlZmluZSBSRUdfQUNDRVNTX1RFU1QocikJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBSRUdfV0lEVEhfVEVTVChyLCB3KQkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyogT0hDSSBjb21wYXRpYmxlIHJlZ2lzdGVycyAqLworLyoKKyAqIE5vdGU6IFNvbWUgb2YgdGhlIElTUDEzNjIgJ09IQ0knIHJlZ2lzdGVycyBpbXBsZW1lbnQgb25seQorICogYSBzdWJzZXQgb2YgdGhlIGJpdHMgZGVmaW5lZCBpbiB0aGUgT0hDSSBzcGVjLgorICoKKyAqIEJpdG1hc2tzIGZvciB0aGUgaW5kaXZpZHVhbCBiaXRzIG9mIHRoZXNlIHJlZ2lzdGVycyBhcmUgZGVmaW5lZCBpbiAib2hjaS5oIgorICovCitJU1AxMzYyX1JFRyhIQ1JFVklTSU9OLAkweDAwLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUik7CitJU1AxMzYyX1JFRyhIQ0NPTlRST0wsCTB4MDEsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0NNRFNUQVQsCTB4MDIsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lOVFNUQVQsCTB4MDMsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lOVEVOQiwJMHgwNCwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDSU5URElTLAkweDA1LAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENGTUlOVFZMLAkweDBkLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENGTVJFTSwJMHgwZSwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDRk1OVU0sCTB4MGYsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0xTVEhSRVNILAkweDExLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENSSERFU0NBLAkweDEyLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENSSERFU0NCLAkweDEzLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENSSFNUQVRVUywJMHgxNCwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDUkhQT1JUMSwJMHgxNSwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDUkhQT1JUMiwJMHgxNiwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKKworLyogUGhpbGlwcyBJU1AxMzYyIHNwZWNpZmljIHJlZ2lzdGVycyAqLworSVNQMTM2Ml9SRUcoSENIV0NGRywJMHgyMCwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKyNkZWZpbmUgSENIV0NGR19ESVNBQkxFX1NVU1BFTkQJKDEgPDwgMTUpCisjZGVmaW5lIEhDSFdDRkdfR0xPQkFMX1BXUkRPV04JKDEgPDwgMTQpCisjZGVmaW5lIEhDSFdDRkdfUFVMTERPV05fRFMyCSgxIDw8IDEzKQorI2RlZmluZSBIQ0hXQ0ZHX1BVTExET1dOX0RTMQkoMSA8PCAxMikKKyNkZWZpbmUgSENIV0NGR19DTEtOT1RTVE9QCSgxIDw8IDExKQorI2RlZmluZSBIQ0hXQ0ZHX0FOQUxPR19PQwkoMSA8PCAxMCkKKyNkZWZpbmUgSENIV0NGR19PTkVJTlQJCSgxIDw8IDkpCisjZGVmaW5lIEhDSFdDRkdfREFDS19NT0RFCSgxIDw8IDgpCisjZGVmaW5lIEhDSFdDRkdfT05FRE1BCQkoMSA8PCA3KQorI2RlZmluZSBIQ0hXQ0ZHX0RBQ0tfUE9MCSgxIDw8IDYpCisjZGVmaW5lIEhDSFdDRkdfRFJFUV9QT0wJKDEgPDwgNSkKKyNkZWZpbmUgSENIV0NGR19EQldJRFRIX01BU0sJKDB4MDMgPDwgMykKKyNkZWZpbmUgSENIV0NGR19EQldJRFRIKG4pCSgoKG4pIDw8IDMpICYgSENIV0NGR19EQldJRFRIX01BU0spCisjZGVmaW5lIEhDSFdDRkdfSU5UX1BPTAkJKDEgPDwgMikKKyNkZWZpbmUgSENIV0NGR19JTlRfVFJJR0dFUgkoMSA8PCAxKQorI2RlZmluZSBIQ0hXQ0ZHX0lOVF9FTkFCTEUJKDEgPDwgMCkKKworSVNQMTM2Ml9SRUcoSENETUFDRkcsCTB4MjEsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CisjZGVmaW5lIEhDRE1BQ0ZHX0NUUl9FTkFCTEUJKDEgPDwgNykKKyNkZWZpbmUgSENETUFDRkdfQlVSU1RfTEVOX01BU0sJKDB4MDMgPDwgNSkKKyNkZWZpbmUgSENETUFDRkdfQlVSU1RfTEVOKG4pCSgoKG4pIDw8IDUpICYgSENETUFDRkdfQlVSU1RfTEVOX01BU0spCisjZGVmaW5lIEhDRE1BQ0ZHX0JVUlNUX0xFTl8xCUhDRE1BQ0ZHX0JVUlNUX0xFTigwKQorI2RlZmluZSBIQ0RNQUNGR19CVVJTVF9MRU5fNAlIQ0RNQUNGR19CVVJTVF9MRU4oMSkKKyNkZWZpbmUgSENETUFDRkdfQlVSU1RfTEVOXzgJSENETUFDRkdfQlVSU1RfTEVOKDIpCisjZGVmaW5lIEhDRE1BQ0ZHX0RNQV9FTkFCTEUJKDEgPDwgNCkKKyNkZWZpbmUgSENETUFDRkdfQlVGX1RZUEVfTUFTSwkoMHgwNyA8PCAxKQorI2RlZmluZSBIQ0RNQUNGR19CVUZfVFlQRShuKQkoKChuKSA8PCAxKSAmIEhDRE1BQ0ZHX0JVRl9UWVBFX01BU0spCisjZGVmaW5lIEhDRE1BQ0ZHX0JVRl9JU1RMMAlIQ0RNQUNGR19CVUZfVFlQRSgwKQorI2RlZmluZSBIQ0RNQUNGR19CVUZfSVNUTDEJSENETUFDRkdfQlVGX1RZUEUoMSkKKyNkZWZpbmUgSENETUFDRkdfQlVGX0lOVEwJSENETUFDRkdfQlVGX1RZUEUoMikKKyNkZWZpbmUgSENETUFDRkdfQlVGX0FUTAlIQ0RNQUNGR19CVUZfVFlQRSgzKQorI2RlZmluZSBIQ0RNQUNGR19CVUZfRElSRUNUCUhDRE1BQ0ZHX0JVRl9UWVBFKDQpCisjZGVmaW5lIEhDRE1BQ0ZHX0RNQV9SV19TRUxFQ1QJKDEgPDwgMCkKKworSVNQMTM2Ml9SRUcoSENYRkVSQ1RSLAkweDIyLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworCitJU1AxMzYyX1JFRyhIQ3VQSU5ULAkweDI0LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworI2RlZmluZSBIQ3VQSU5UX1NPRgkJKDEgPDwgMCkKKyNkZWZpbmUgSEN1UElOVF9JU1RMMAkJKDEgPDwgMSkKKyNkZWZpbmUgSEN1UElOVF9JU1RMMQkJKDEgPDwgMikKKyNkZWZpbmUgSEN1UElOVF9FT1QJCSgxIDw8IDMpCisjZGVmaW5lIEhDdVBJTlRfT1BSCQkoMSA8PCA0KQorI2RlZmluZSBIQ3VQSU5UX1NVU1AJCSgxIDw8IDUpCisjZGVmaW5lIEhDdVBJTlRfQ0xLUkRZCQkoMSA8PCA2KQorI2RlZmluZSBIQ3VQSU5UX0lOVEwJCSgxIDw8IDcpCisjZGVmaW5lIEhDdVBJTlRfQVRMCQkoMSA8PCA4KQorI2RlZmluZSBIQ3VQSU5UX09URwkJKDEgPDwgOSkKKworSVNQMTM2Ml9SRUcoSEN1UElOVEVOQiwJMHgyNSwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKy8qIHNhbWUgYml0IGRlZmluaXRpb25zIGFwcGx5IGFzIGZvciBIQ3VQSU5UICovCisKK0lTUDEzNjJfUkVHKEhDQ0hJUElELAkweDI3LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUik7CisjZGVmaW5lIEhDQ0hJUElEX01BU0sJCTB4ZmYwMAorI2RlZmluZSBIQ0NISVBJRF9NQUdJQwkJMHgzNjAwCisKK0lTUDEzNjJfUkVHKEhDU0NSQVRDSCwJMHgyOCwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKKworSVNQMTM2Ml9SRUcoSENTV1JFUywJMHgyOSwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1cpOworI2RlZmluZSBIQ1NXUkVTX01BR0lDCQkweDAwZjYKKworSVNQMTM2Ml9SRUcoSENCVUZTVEFULAkweDJjLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworI2RlZmluZSBIQ0JVRlNUQVRfSVNUTDBfRlVMTAkoMSA8PCAwKQorI2RlZmluZSBIQ0JVRlNUQVRfSVNUTDFfRlVMTAkoMSA8PCAxKQorI2RlZmluZSBIQ0JVRlNUQVRfSU5UTF9BQ1RJVkUJKDEgPDwgMikKKyNkZWZpbmUgSENCVUZTVEFUX0FUTF9BQ1RJVkUJKDEgPDwgMykKKyNkZWZpbmUgSENCVUZTVEFUX1JFU0VUX0hXUFAJKDEgPDwgNCkKKyNkZWZpbmUgSENCVUZTVEFUX0lTVEwwX0FDVElWRQkoMSA8PCA1KQorI2RlZmluZSBIQ0JVRlNUQVRfSVNUTDFfQUNUSVZFCSgxIDw8IDYpCisjZGVmaW5lIEhDQlVGU1RBVF9JU1RMMF9ET05FCSgxIDw8IDgpCisjZGVmaW5lIEhDQlVGU1RBVF9JU1RMMV9ET05FCSgxIDw8IDkpCisjZGVmaW5lIEhDQlVGU1RBVF9QQUlSRURfUFREUFAJKDEgPDwgMTApCisKK0lTUDEzNjJfUkVHKEhDRElSQUREUiwJMHgzMiwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKKyNkZWZpbmUgSENESVJBRERSX0FERFJfTUFTSwkweDAwMDBmZmZmCisjZGVmaW5lIEhDRElSQUREUl9BRERSKG4pCSgoKG4pIDw8IDApICYgSENESVJBRERSX0FERFJfTUFTSykKKyNkZWZpbmUgSENESVJBRERSX0NPVU5UX01BU0sJMHhmZmZmMDAwMAorI2RlZmluZSBIQ0RJUkFERFJfQ09VTlQobikJKCgobikgPDwgMTYpICYgSENESVJBRERSX0NPVU5UX01BU0spCitJU1AxMzYyX1JFRyhIQ0RJUkRBVEEsCTB4NDUsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CisKK0lTUDEzNjJfUkVHKEhDSVNUTEJVRlNaLCAweDMwLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENJU1RMMFBPUlQsIDB4NDAsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lTVEwxUE9SVCwgMHg0MiwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDSVNUTFJBVEUsCTB4NDcsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CisKK0lTUDEzNjJfUkVHKEhDSU5UTEJVRlNaLCAweDMzLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENJTlRMUE9SVCwJMHg0MywJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDSU5UTEJMS1NaLCAweDUzLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENJTlRMRE9ORSwJMHgxNywJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1IpOworSVNQMTM2Ml9SRUcoSENJTlRMU0tJUCwJMHgxOCwJUkVHX1dJRFRIXzMyLAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKEhDSU5UTExBU1QsCTB4MTksCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0lOVExDVVJSLAkweDFhLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUik7CisKK0lTUDEzNjJfUkVHKEhDQVRMQlVGU1osIDB4MzQsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0FUTFBPUlQsCTB4NDQsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0FUTEJMS1NaLCAweDU0LAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoSENBVExET05FLAkweDFiLAlSRUdfV0lEVEhfMzIsCVJFR19BQ0NFU1NfUik7CitJU1AxMzYyX1JFRyhIQ0FUTFNLSVAsCTB4MWMsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0FUTExBU1QsCTB4MWQsCVJFR19XSURUSF8zMiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0FUTENVUlIsCTB4MWUsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SKTsKKworSVNQMTM2Ml9SRUcoSENBVExEVEMsCTB4NTEsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhIQ0FUTERUQ1RPLAkweDUyLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworCisKK0lTUDEzNjJfUkVHKE9UR0NPTlRST0wsCTB4NjIsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SVyk7CitJU1AxMzYyX1JFRyhPVEdTVEFUVVMsCTB4NjcsCVJFR19XSURUSF8xNiwJUkVHX0FDQ0VTU19SKTsKK0lTUDEzNjJfUkVHKE9UR0lOVCwJMHg2OCwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKE9UR0lOVEVOQiwJMHg2OSwJUkVHX1dJRFRIXzE2LAlSRUdfQUNDRVNTX1JXKTsKK0lTUDEzNjJfUkVHKE9UR1RJTUVSLAkweDZBLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworSVNQMTM2Ml9SRUcoT1RHQUxUVE1SLAkweDZDLAlSRUdfV0lEVEhfMTYsCVJFR19BQ0NFU1NfUlcpOworCisvKiBQaGlsaXBzIHRyYW5zZmVyIGRlc2NyaXB0b3IsIGNwdS1lbmRpYW4gKi8KK3N0cnVjdCBwdGQgeworCXUxNiBjb3VudDsKKyNkZWZpbmUJUFREX0NPVU5UX01TSwkoMHgzZmYgPDwgMCkKKyNkZWZpbmUJUFREX1RPR0dMRV9NU0sJKDEgPDwgMTApCisjZGVmaW5lCVBURF9BQ1RJVkVfTVNLCSgxIDw8IDExKQorI2RlZmluZQlQVERfQ0NfTVNLCSgweGYgPDwgMTIpCisJdTE2IG1wczsKKyNkZWZpbmUJUFREX01QU19NU0sJKDB4M2ZmIDw8IDApCisjZGVmaW5lCVBURF9TUERfTVNLCSgxIDw8IDEwKQorI2RlZmluZQlQVERfTEFTVF9NU0sJKDEgPDwgMTEpCisjZGVmaW5lCVBURF9FUF9NU0sJKDB4ZiA8PCAxMikKKwl1MTYgbGVuOworI2RlZmluZQlQVERfTEVOX01TSwkoMHgzZmYgPDwgMCkKKyNkZWZpbmUJUFREX0RJUl9NU0sJKDMgPDwgMTApCisjZGVmaW5lCVBURF9ESVJfU0VUVVAJKDApCisjZGVmaW5lCVBURF9ESVJfT1VUCSgxKQorI2RlZmluZQlQVERfRElSX0lOCSgyKQorCXUxNiBmYWRkcjsKKyNkZWZpbmUJUFREX0ZBX01TSwkoMHg3ZiA8PCAwKQorLyogUFREIEJ5dGUgNzogW1N0YXJ0aW5nRnJhbWUgKGlmIElTTyBQVEQpIHwgU3RhcnRpbmdGcmFtZVswLi40XSwgUG9sbGluZ1JhdGVbMC4uMl0gKGlmIElOVCBQVEQpXSAqLworI2RlZmluZSBQVERfU0ZfSVNPX01TSwkoMHhmZiA8PCA4KQorI2RlZmluZSBQVERfU0ZfSU5UX01TSwkoMHgxZiA8PCA4KQorI2RlZmluZSBQVERfUFJfTVNLCSgweDA3IDw8IDEzKQorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkKDIpKSk7CisjZGVmaW5lIFBURF9IRUFERVJfU0laRSBzaXplb2Yoc3RydWN0IHB0ZCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ29waWVkIGZyb20gb2hjaS5oOiAqLworLyoKKyAqIEhhcmR3YXJlIHRyYW5zZmVyIHN0YXR1cyBjb2RlcyAtLSBDQyBmcm9tIFBURAorICovCisjZGVmaW5lIFBURF9DQ19OT0VSUk9SICAgICAgMHgwMAorI2RlZmluZSBQVERfQ0NfQ1JDICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUFREX0NDX0JJVFNUVUZGSU5HICAweDAyCisjZGVmaW5lIFBURF9DQ19EQVRBVE9HR0xFTSAgMHgwMworI2RlZmluZSBQVERfQ0NfU1RBTEwgICAgICAgIDB4MDQKKyNkZWZpbmUgUFREX0RFVk5PVFJFU1AgICAgICAweDA1CisjZGVmaW5lIFBURF9QSURDSEVDS0ZBSUwgICAgMHgwNgorI2RlZmluZSBQVERfVU5FWFBFQ1RFRFBJRCAgIDB4MDcKKyNkZWZpbmUgUFREX0RBVEFPVkVSUlVOICAgICAweDA4CisjZGVmaW5lIFBURF9EQVRBVU5ERVJSVU4gICAgMHgwOQorICAgIC8qIDB4MEEsIDB4MEIgcmVzZXJ2ZWQgZm9yIGhhcmR3YXJlICovCisjZGVmaW5lIFBURF9CVUZGRVJPVkVSUlVOICAgMHgwQworI2RlZmluZSBQVERfQlVGRkVSVU5ERVJSVU4gIDB4MEQKKyAgICAvKiAweDBFLCAweDBGIHJlc2VydmVkIGZvciBIQ0QgKi8KKyNkZWZpbmUgUFREX05PVEFDQ0VTU0VEICAgICAweDBGCisKKworLyogbWFwIE9IQ0kgVEQgc3RhdHVzIGNvZGVzIChDQykgdG8gZXJybm8gdmFsdWVzICovCitzdGF0aWMgY29uc3QgaW50IGNjX3RvX2Vycm9yWzE2XSA9IHsKKwkvKiBObyAgRXJyb3IgICovICAgICAgICAgICAgICAgMCwKKwkvKiBDUkMgRXJyb3IgICovICAgICAgICAgICAgICAgLUVJTFNFUSwKKwkvKiBCaXQgU3R1ZmYgICovICAgICAgICAgICAgICAgLUVQUk9UTywKKwkvKiBEYXRhIFRvZ2cgICovICAgICAgICAgICAgICAgLUVJTFNFUSwKKwkvKiBTdGFsbCAgICAgICovICAgICAgICAgICAgICAgLUVQSVBFLAorCS8qIERldk5vdFJlc3AgKi8gICAgICAgICAgICAgICAtRVRJTUVET1VULAorCS8qIFBJRENoZWNrICAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAorCS8qIFVuRXhwUElEICAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAorCS8qIERhdGFPdmVyICAgKi8gICAgICAgICAgICAgICAtRU9WRVJGTE9XLAorCS8qIERhdGFVbmRlciAgKi8gICAgICAgICAgICAgICAtRVJFTU9URUlPLAorCS8qIChmb3IgaHcpICAgKi8gICAgICAgICAgICAgICAtRUlPLAorCS8qIChmb3IgaHcpICAgKi8gICAgICAgICAgICAgICAtRUlPLAorCS8qIEJ1ZmZlck92ZXIgKi8gICAgICAgICAgICAgICAtRUNPTU0sCisJLyogQnVmZlVuZGVyICAqLyAgICAgICAgICAgICAgIC1FTk9TUiwKKwkvKiAoZm9yIEhDRCkgICovICAgICAgICAgICAgICAgLUVBTFJFQURZLAorCS8qIChmb3IgSENEKSAgKi8gICAgICAgICAgICAgICAtRUFMUkVBRFkKK307CisKKworLyoKKyAqIEhjQ29udHJvbCAoY29udHJvbCkgcmVnaXN0ZXIgbWFza3MKKyAqLworI2RlZmluZSBPSENJX0NUUkxfSENGUwkoMyA8PCA2KQkvKiBob3N0IGNvbnRyb2xsZXIgZnVuY3Rpb25hbCBzdGF0ZSAqLworI2RlZmluZSBPSENJX0NUUkxfUldDCSgxIDw8IDkpCS8qIHJlbW90ZSB3YWtldXAgY29ubmVjdGVkICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9SV0UJKDEgPDwgMTApCS8qIHJlbW90ZSB3YWtldXAgZW5hYmxlICovCisKKy8qIHByZS1zaGlmdGVkIHZhbHVlcyBmb3IgSENGUyAqLworIwlkZWZpbmUgT0hDSV9VU0JfUkVTRVQJKDAgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX1JFU1VNRQkoMSA8PCA2KQorIwlkZWZpbmUgT0hDSV9VU0JfT1BFUgkoMiA8PCA2KQorIwlkZWZpbmUgT0hDSV9VU0JfU1VTUEVORAkoMyA8PCA2KQorCisvKgorICogSGNDb21tYW5kU3RhdHVzIChjbWRzdGF0dXMpIHJlZ2lzdGVyIG1hc2tzCisgKi8KKyNkZWZpbmUgT0hDSV9IQ1IJKDEgPDwgMCkJLyogaG9zdCBjb250cm9sbGVyIHJlc2V0ICovCisjZGVmaW5lIE9IQ0lfU09DICAJKDMgPDwgMTYpCS8qIHNjaGVkdWxpbmcgb3ZlcnJ1biBjb3VudCAqLworCisvKgorICogbWFza3MgdXNlZCB3aXRoIGludGVycnVwdCByZWdpc3RlcnM6CisgKiBIY0ludGVycnVwdFN0YXR1cyAoaW50cnN0YXR1cykKKyAqIEhjSW50ZXJydXB0RW5hYmxlIChpbnRyZW5hYmxlKQorICogSGNJbnRlcnJ1cHREaXNhYmxlIChpbnRyZGlzYWJsZSkKKyAqLworI2RlZmluZSBPSENJX0lOVFJfU08JKDEgPDwgMCkJLyogc2NoZWR1bGluZyBvdmVycnVuICovCisjZGVmaW5lIE9IQ0lfSU5UUl9XREgJKDEgPDwgMSkJLyogd3JpdGViYWNrIG9mIGRvbmVfaGVhZCAqLworI2RlZmluZSBPSENJX0lOVFJfU0YJKDEgPDwgMikJLyogc3RhcnQgZnJhbWUgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1JECSgxIDw8IDMpCS8qIHJlc3VtZSBkZXRlY3QgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1VFCSgxIDw8IDQpCS8qIHVucmVjb3ZlcmFibGUgZXJyb3IgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX0ZOTwkoMSA8PCA1KQkvKiBmcmFtZSBudW1iZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1JIU0MJKDEgPDwgNikJLyogcm9vdCBodWIgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBPSENJX0lOVFJfT0MJKDEgPDwgMzApCS8qIG93bmVyc2hpcCBjaGFuZ2UgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX01JRQkoMSA8PCAzMSkJLyogbWFzdGVyIGludGVycnVwdCBlbmFibGUgKi8KKworLyogcm9vdGh1Yi5wb3J0c3RhdHVzIFtpXSBiaXRzICovCisjZGVmaW5lIFJIX1BTX0NDUyAgICAgICAgICAgIDB4MDAwMDAwMDEgICAJLyogY3VycmVudCBjb25uZWN0IHN0YXR1cyAqLworI2RlZmluZSBSSF9QU19QRVMgICAgICAgICAgICAweDAwMDAwMDAyICAgCS8qIHBvcnQgZW5hYmxlIHN0YXR1cyovCisjZGVmaW5lIFJIX1BTX1BTUyAgICAgICAgICAgIDB4MDAwMDAwMDQgICAJLyogcG9ydCBzdXNwZW5kIHN0YXR1cyAqLworI2RlZmluZSBSSF9QU19QT0NJICAgICAgICAgICAweDAwMDAwMDA4ICAgCS8qIHBvcnQgb3ZlciBjdXJyZW50IGluZGljYXRvciAqLworI2RlZmluZSBSSF9QU19QUlMgICAgICAgICAgICAweDAwMDAwMDEwICAJLyogcG9ydCByZXNldCBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfUFBTICAgICAgICAgICAgMHgwMDAwMDEwMCAgIAkvKiBwb3J0IHBvd2VyIHN0YXR1cyAqLworI2RlZmluZSBSSF9QU19MU0RBICAgICAgICAgICAweDAwMDAwMjAwICAgIAkvKiBsb3cgc3BlZWQgZGV2aWNlIGF0dGFjaGVkICovCisjZGVmaW5lIFJIX1BTX0NTQyAgICAgICAgICAgIDB4MDAwMTAwMDAgCS8qIGNvbm5lY3Qgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19QRVNDICAgICAgICAgICAweDAwMDIwMDAwICAgCS8qIHBvcnQgZW5hYmxlIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfUFNTQyAgICAgICAgICAgMHgwMDA0MDAwMCAgICAJLyogcG9ydCBzdXNwZW5kIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfT0NJQyAgICAgICAgICAgMHgwMDA4MDAwMCAgICAJLyogb3ZlciBjdXJyZW50IGluZGljYXRvciBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfUFJTQyAgICAgICAgICAgMHgwMDEwMDAwMCAgIAkvKiBwb3J0IHJlc2V0IHN0YXR1cyBjaGFuZ2UgKi8KKworLyogcm9vdGh1Yi5zdGF0dXMgYml0cyAqLworI2RlZmluZSBSSF9IU19MUFMJICAgICAweDAwMDAwMDAxCQkvKiBsb2NhbCBwb3dlciBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfSFNfT0NJCSAgICAgMHgwMDAwMDAwMgkJLyogb3ZlciBjdXJyZW50IGluZGljYXRvciAqLworI2RlZmluZSBSSF9IU19EUldFCSAgICAgMHgwMDAwODAwMAkJLyogZGV2aWNlIHJlbW90ZSB3YWtldXAgZW5hYmxlICovCisjZGVmaW5lIFJIX0hTX0xQU0MJICAgICAweDAwMDEwMDAwCQkvKiBsb2NhbCBwb3dlciBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX0hTX09DSUMJICAgICAweDAwMDIwMDAwCQkvKiBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSAqLworI2RlZmluZSBSSF9IU19DUldFCSAgICAgMHg4MDAwMDAwMAkJLyogY2xlYXIgcmVtb3RlIHdha2V1cCBlbmFibGUgKi8KKworLyogcm9vdGh1Yi5iIG1hc2tzICovCisjZGVmaW5lIFJIX0JfRFIJCTB4MDAwMGZmZmYJCS8qIGRldmljZSByZW1vdmFibGUgZmxhZ3MgKi8KKyNkZWZpbmUgUkhfQl9QUENNCTB4ZmZmZjAwMDAJCS8qIHBvcnQgcG93ZXIgY29udHJvbCBtYXNrICovCisKKy8qIHJvb3RodWIuYSBtYXNrcyAqLworI2RlZmluZQlSSF9BX05EUAkoMHhmZiA8PCAwKQkJLyogbnVtYmVyIG9mIGRvd25zdHJlYW0gcG9ydHMgKi8KKyNkZWZpbmUJUkhfQV9QU00JKDEgPDwgOCkJCS8qIHBvd2VyIHN3aXRjaGluZyBtb2RlICovCisjZGVmaW5lCVJIX0FfTlBTCSgxIDw8IDkpCQkvKiBubyBwb3dlciBzd2l0Y2hpbmcgKi8KKyNkZWZpbmUJUkhfQV9EVAkJKDEgPDwgMTApCQkvKiBkZXZpY2UgdHlwZSAobWJ6KSAqLworI2RlZmluZQlSSF9BX09DUE0JKDEgPDwgMTEpCQkvKiBvdmVyIGN1cnJlbnQgcHJvdGVjdGlvbiBtb2RlICovCisjZGVmaW5lCVJIX0FfTk9DUAkoMSA8PCAxMikJCS8qIG5vIG92ZXIgY3VycmVudCBwcm90ZWN0aW9uICovCisjZGVmaW5lCVJIX0FfUE9UUEdUCSgweGZmIDw8IDI0KQkJLyogcG93ZXIgb24gdG8gcG93ZXIgZ29vZCB0aW1lICovCisKKyNkZWZpbmUJRkkJCQkweDJlZGYJCS8qIDEyMDAwIGJpdHMgcGVyIGZyYW1lICgtMSkgKi8KKyNkZWZpbmUJRlNNUChmaSkgCQkoMHg3ZmZmICYgKCg2ICogKChmaSkgLSAyMTApKSAvIDcpKQorI2RlZmluZSBMU1RIUkVTSAkJMHg2MjgJCS8qIGxvd3NwZWVkIGJpdCB0aHJlc2hvbGQgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBQVEQgYWNjZXNzb3IgbWFjcm9zLiAqLworI2RlZmluZSBQVERfR0VUX0NPVU5UKHApCSgoKHApLT5jb3VudCAmIFBURF9DT1VOVF9NU0spID4+IDApCisjZGVmaW5lIFBURF9DT1VOVCh2KQkJKCgodikgPDwgMCkgJiBQVERfQ09VTlRfTVNLKQorI2RlZmluZSBQVERfR0VUX1RPR0dMRShwKQkoKChwKS0+Y291bnQgJiBQVERfVE9HR0xFX01TSykgPj4gMTApCisjZGVmaW5lIFBURF9UT0dHTEUodikJCSgoKHYpIDw8IDEwKSAmIFBURF9UT0dHTEVfTVNLKQorI2RlZmluZSBQVERfR0VUX0FDVElWRShwKQkoKChwKS0+Y291bnQgJiBQVERfQUNUSVZFX01TSykgPj4gMTEpCisjZGVmaW5lIFBURF9BQ1RJVkUodikJCSgoKHYpIDw8IDExKSAmIFBURF9BQ1RJVkVfTVNLKQorI2RlZmluZSBQVERfR0VUX0NDKHApCQkoKChwKS0+Y291bnQgJiBQVERfQ0NfTVNLKSA+PiAxMikKKyNkZWZpbmUgUFREX0NDKHYpCQkoKCh2KSA8PCAxMikgJiBQVERfQ0NfTVNLKQorI2RlZmluZSBQVERfR0VUX01QUyhwKQkJKCgocCktPm1wcyAmIFBURF9NUFNfTVNLKSA+PiAwKQorI2RlZmluZSBQVERfTVBTKHYpCQkoKCh2KSA8PCAwKSAmIFBURF9NUFNfTVNLKQorI2RlZmluZSBQVERfR0VUX1NQRChwKQkJKCgocCktPm1wcyAmIFBURF9TUERfTVNLKSA+PiAxMCkKKyNkZWZpbmUgUFREX1NQRCh2KQkJKCgodikgPDwgMTApICYgUFREX1NQRF9NU0spCisjZGVmaW5lIFBURF9HRVRfTEFTVChwKQkJKCgocCktPm1wcyAmIFBURF9MQVNUX01TSykgPj4gMTEpCisjZGVmaW5lIFBURF9MQVNUKHYpCQkoKCh2KSA8PCAxMSkgJiBQVERfTEFTVF9NU0spCisjZGVmaW5lIFBURF9HRVRfRVAocCkJCSgoKHApLT5tcHMgJiBQVERfRVBfTVNLKSA+PiAxMikKKyNkZWZpbmUgUFREX0VQKHYpCQkoKCh2KSA8PCAxMikgJiBQVERfRVBfTVNLKQorI2RlZmluZSBQVERfR0VUX0xFTihwKQkJKCgocCktPmxlbiAmIFBURF9MRU5fTVNLKSA+PiAwKQorI2RlZmluZSBQVERfTEVOKHYpCQkoKCh2KSA8PCAwKSAmIFBURF9MRU5fTVNLKQorI2RlZmluZSBQVERfR0VUX0RJUihwKQkJKCgocCktPmxlbiAmIFBURF9ESVJfTVNLKSA+PiAxMCkKKyNkZWZpbmUgUFREX0RJUih2KQkJKCgodikgPDwgMTApICYgUFREX0RJUl9NU0spCisjZGVmaW5lIFBURF9HRVRfRkEocCkJCSgoKHApLT5mYWRkciAmIFBURF9GQV9NU0spID4+IDApCisjZGVmaW5lIFBURF9GQSh2KQkJKCgodikgPDwgMCkgJiBQVERfRkFfTVNLKQorI2RlZmluZSBQVERfR0VUX1NGX0lOVChwKQkoKChwKS0+ZmFkZHIgJiBQVERfU0ZfSU5UX01TSykgPj4gOCkKKyNkZWZpbmUgUFREX1NGX0lOVCh2KQkJKCgodikgPDwgOCkgJiBQVERfU0ZfSU5UX01TSykKKyNkZWZpbmUgUFREX0dFVF9TRl9JU08ocCkJKCgocCktPmZhZGRyICYgUFREX1NGX0lTT19NU0spID4+IDgpCisjZGVmaW5lIFBURF9TRl9JU08odikJCSgoKHYpIDw8IDgpICYgUFREX1NGX0lTT19NU0spCisjZGVmaW5lIFBURF9HRVRfUFIocCkJCSgoKHApLT5mYWRkciAmIFBURF9QUl9NU0spID4+IDEzKQorI2RlZmluZSBQVERfUFIodikJCSgoKHYpIDw8IDEzKSAmIFBURF9QUl9NU0spCisKKyNkZWZpbmUJTE9HMl9QRVJJT0RJQ19TSVpFCTUJLyogYXJiaXRyYXJ5OyB0aGlzIG1hdGNoZXMgT0hDSSAqLworI2RlZmluZQlQRVJJT0RJQ19TSVpFCQkoMSA8PCBMT0cyX1BFUklPRElDX1NJWkUpCisKK3N0cnVjdCBpc3AxMzYyX2VwIHsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKworCS8qIHBoaWxpcHMgdHJhbnNmZXIgZGVzY3JpcHRvciAqLworCXN0cnVjdCBwdGQJCXB0ZDsKKworCXU4CQkJbWF4cGFja2V0OworCXU4CQkJZXBudW07CisJdTgJCQluZXh0cGlkOworCXUxNgkJCWVycm9yX2NvdW50OworCXUxNgkJCWxlbmd0aDsJCS8qIG9mIGN1cnJlbnQgcGFja2V0ICovCisJczE2CQkJcHRkX29mZnNldDsJLyogYnVmZmVyIG9mZnNldCBpbiBJU1AxMzYyIHdoZXJlCisJCQkJCQkgICBQVEQgaGFzIGJlZW4gc3RvcmVkCisJCQkJCQkgICAoZm9yIGFjY2VzcyB0aHJ1IEhDRElSREFUQSkgKi8KKwlpbnQJCQlwdGRfaW5kZXg7CisJaW50IG51bV9wdGRzOworCXZvaWQgCQkJKmRhdGE7CQkvKiB0byBkYXRhYnVmICovCisJLyogcXVldWUgb2YgYWN0aXZlIEVQcyAodGhlIG9uZXMgdHJhbnNtaXR0ZWQgdG8gdGhlIGNoaXApICovCisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmU7CisKKwkvKiBwZXJpb2RpYyBzY2hlZHVsZSAqLworCXU4CQkJYnJhbmNoOworCXUxNgkJCWludGVydmFsOworCXUxNgkJCWxvYWQ7CisJdTE2CQkJbGFzdF9pc287CisKKwkvKiBhc3luYyBzY2hlZHVsZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJc2NoZWR1bGU7CS8qIGxpc3Qgb2YgYWxsIEVQcyB0aGF0IG5lZWQgcHJvY2Vzc2luZyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmVtb3ZlX2xpc3Q7CisJaW50CQkJbnVtX3JlcTsKK307CisKK3N0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZTsJCS8qIGxpc3Qgb2YgUFREcyBjdXJyZW50bHkgcHJvY2Vzc2VkIGJ5IEhDICovCisJYXRvbWljX3QJCWZpbmlzaGluZzsKKwl1bnNpZ25lZCBsb25nCQlidWZfbWFwOworCXVuc2lnbmVkIGxvbmcJCXNraXBfbWFwOworCWludAkJCWZyZWVfcHRkOworCXUxNgkJCWJ1Zl9zdGFydDsKKwl1MTYJCQlidWZfc2l6ZTsKKwl1MTYJCQlibGtfc2l6ZTsJLyogUFREIGJ1ZmZlciBibG9jayBzaXplIGZvciBBVEwgYW5kIElOVEwgKi8KKwl1OAkJCWJ1Zl9jb3VudDsKKwl1OAkJCWJ1Zl9hdmFpbDsKKwljaGFyCQkJbmFtZVsxNl07CisKKwkvKiBmb3Igc3RhdGlzdGljYWwgdHJhY2tpbmcgKi8KKwl1OAkJCXN0YXRfbWF4cHRkczsJLyogTWF4ICMgb2YgcHRkcyBzZWVuIHNpbXVsdGFuZW91c2x5IGluIGZpZm8gKi8KKwl1OAkJCXB0ZF9jb3VudDsJLyogbnVtYmVyIG9mIHB0ZHMgc3VibWl0dGVkIHRvIHRoaXMgcXVldWUgKi8KK307CisKK3N0cnVjdCBpc3AxMzYyX2hjZCB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl2b2lkIF9faW9tZW0JCSphZGRyX3JlZzsKKwl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKKworCXN0cnVjdCBpc3AxMzYyX3BsYXRmb3JtX2RhdGEgKmJvYXJkOworCisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwZGU7CisJdW5zaWduZWQgbG9uZwkJc3RhdDEsIHN0YXQyLCBzdGF0NCwgc3RhdDgsIHN0YXQxNjsKKworCS8qIEhDIHJlZ2lzdGVycyAqLworCXUzMgkJCWludGVuYjsJCS8qICJPSENJIiBpbnRlcnJ1cHRzICovCisJdTE2CQkJaXJxZW5iOwkJLyogdVAgaW50ZXJydXB0cyAqLworCisJLyogUm9vdCBodWIgcmVnaXN0ZXJzICovCisJdTMyCQkJcmhkZXNjYTsKKwl1MzIJCQlyaGRlc2NiOworCXUzMgkJCXJoc3RhdHVzOworCXUzMgkJCXJocG9ydFtNQVhfUk9PVF9QT1JUU107CisJdW5zaWduZWQgbG9uZwkJbmV4dF9zdGF0ZWNoYW5nZTsKKworCS8qIEhDIGNvbnRyb2wgcmVnIHNoYWRvdyBjb3B5ICovCisJdTMyCQkJaGNfY29udHJvbDsKKworCS8qIGFzeW5jIHNjaGVkdWxlOiBjb250cm9sLCBidWxrICovCisJc3RydWN0IGxpc3RfaGVhZAlhc3luYzsKKworCS8qIHBlcmlvZGljIHNjaGVkdWxlOiBpbnQgKi8KKwl1MTYJCQlsb2FkW1BFUklPRElDX1NJWkVdOworCXN0cnVjdCBsaXN0X2hlYWQJcGVyaW9kaWM7CisJdTE2CQkJZm1pbmRleDsKKworCS8qIHBlcmlvZGljIHNjaGVkdWxlOiBpc29jaHJvbm91cyAqLworCXN0cnVjdCBsaXN0X2hlYWQJaXNvYzsKKwlpbnQJCQlpc3RsX2ZsaXA6MTsKKwlpbnQJCQlpcnFfYWN0aXZlOjE7CisKKwkvKiBTY2hlZHVsZXMgZm9yIHRoZSBjdXJyZW50IGZyYW1lICovCisJc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgYXRsX3F1ZXVlOworCXN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlIGludGxfcXVldWU7CisJc3RydWN0IGlzcDEzNjJfZXBfcXVldWUgaXN0bF9xdWV1ZVsyXTsKKworCS8qIGxpc3Qgb2YgUFREcyByZXRyaWV2ZWQgZnJvbSBIQyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmVtb3ZlX2xpc3Q7CisJZW51bSB7CisJCUlTUDEzNjJfSU5UX1NPRiwKKwkJSVNQMTM2Ml9JTlRfSVNUTDAsCisJCUlTUDEzNjJfSU5UX0lTVEwxLAorCQlJU1AxMzYyX0lOVF9FT1QsCisJCUlTUDEzNjJfSU5UX09QUiwKKwkJSVNQMTM2Ml9JTlRfU1VTUCwKKwkJSVNQMTM2Ml9JTlRfQ0xLUkRZLAorCQlJU1AxMzYyX0lOVF9JTlRMLAorCQlJU1AxMzYyX0lOVF9BVEwsCisJCUlTUDEzNjJfSU5UX09URywKKwkJTlVNX0lTUDEzNjJfSVJRUworCX0gSVJRX05BTUVTOworCXVuc2lnbmVkIGludAkJaXJxX3N0YXRbTlVNX0lTUDEzNjJfSVJRU107CisJaW50CQkJcmVxX3NlcmlhbDsKK307CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqSVNQMTM2Ml9JTlRfTkFNRShpbnQgbikKK3sKKwlzd2l0Y2ggKG4pIHsKKwljYXNlIElTUDEzNjJfSU5UX1NPRjogICAgcmV0dXJuICJTT0YiOworCWNhc2UgSVNQMTM2Ml9JTlRfSVNUTDA6ICByZXR1cm4gIklTVEwwIjsKKwljYXNlIElTUDEzNjJfSU5UX0lTVEwxOiAgcmV0dXJuICJJU1RMMSI7CisJY2FzZSBJU1AxMzYyX0lOVF9FT1Q6ICAgIHJldHVybiAiRU9UIjsKKwljYXNlIElTUDEzNjJfSU5UX09QUjogICAgcmV0dXJuICJPUFIiOworCWNhc2UgSVNQMTM2Ml9JTlRfU1VTUDogICByZXR1cm4gIlNVU1AiOworCWNhc2UgSVNQMTM2Ml9JTlRfQ0xLUkRZOiByZXR1cm4gIkNMS1JEWSI7CisJY2FzZSBJU1AxMzYyX0lOVF9JTlRMOiAgIHJldHVybiAiSU5UTCI7CisJY2FzZSBJU1AxMzYyX0lOVF9BVEw6ICAgIHJldHVybiAiQVRMIjsKKwljYXNlIElTUDEzNjJfSU5UX09URzogICAgcmV0dXJuICJPVEciOworCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24iOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIEFMSUdOU1RBVChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB2b2lkICpwdHIpCit7CisJdW5zaWduZWQgcCA9ICh1bnNpZ25lZClwdHI7CisJaWYgKCEocCAmIDB4ZikpCisJCWlzcDEzNjJfaGNkLT5zdGF0MTYrKzsKKwllbHNlIGlmICghKHAgJiAweDcpKQorCQlpc3AxMzYyX2hjZC0+c3RhdDgrKzsKKwllbHNlIGlmICghKHAgJiAweDMpKQorCQlpc3AxMzYyX2hjZC0+c3RhdDQrKzsKKwllbHNlIGlmICghKHAgJiAweDEpKQorCQlpc3AxMzYyX2hjZC0+c3RhdDIrKzsKKwllbHNlCisJCWlzcDEzNjJfaGNkLT5zdGF0MSsrOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpc3AxMzYyX2hjZCAqaGNkX3RvX2lzcDEzNjJfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKikgKGhjZC0+aGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICppc3AxMzYyX2hjZF90b19oY2Qoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopaXNwMTM2Ml9oY2QsIHN0cnVjdCB1c2JfaGNkLCBoY2RfcHJpdik7Cit9CisKKyNkZWZpbmUgZnJhbWVfYmVmb3JlKGYxLCBmMikJKChzMTYpKCh1MTYpZjEgLSAodTE2KWYyKSA8IDApCisKKy8qCisgKiBJU1AxMzYyIEhXIEludGVyZmFjZQorICovCisKKyNpZmRlZiBJU1AxMzYyX0RFQlVHCisjZGVmaW5lIERCRyhsZXZlbCwgZm10Li4uKSBcCisJZG8geyBcCisJCWlmIChkYmdfbGV2ZWwgPiBsZXZlbCkgXAorCQkJcHJfZGVidWcoZm10KTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIF9EQkcobGV2ZWwsIGZtdC4uLikJXAorCWRvIHsgXAorCQlpZiAoZGJnX2xldmVsID4gbGV2ZWwpIFwKKwkJCXByaW50ayhmbXQpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQuLi4pCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX0RCRyBEQkcKKyNlbmRpZgorCisjaWZkZWYgVkVSQk9TRQorIyAgICBkZWZpbmUgVkRCRyhmbXQuLi4pCURCRygzLCBmbXQpCisjZWxzZQorIyAgICBkZWZpbmUgVkRCRyhmbXQuLi4pCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBSRUdJU1RFUlMKKyMgICAgZGVmaW5lIFJEQkcoZm10Li4uKQlEQkcoMSwgZm10KQorI2Vsc2UKKyMgICAgZGVmaW5lIFJEQkcoZm10Li4uKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgVVJCX1RSQUNFCisjZGVmaW5lIFVSQl9EQkcoZm10Li4uKQkJREJHKDAsIGZtdCkKKyNlbHNlCisjZGVmaW5lIFVSQl9EQkcoZm10Li4uKQkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworCisjaWYgVVNFX1BMQVRGT1JNX0RFTEFZCisjaWYgVVNFX05ERUxBWQorI2Vycm9yIFVTRV9QTEFURk9STV9ERUxBWSBhbmQgVVNFX05ERUxBWSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5LgorI2VuZGlmCisjZGVmaW5lCWlzcDEzNjJfZGVsYXkoaCwgZCkJKGgpLT5ib2FyZC0+ZGVsYXkoaXNwMTM2Ml9oY2RfdG9faGNkKGgpLT5zZWxmLmNvbnRyb2xsZXIsIGQpCisjZWxpZiBVU0VfTkRFTEFZCisjZGVmaW5lCWlzcDEzNjJfZGVsYXkoaCwgZCkJbmRlbGF5KGQpCisjZWxzZQorI2RlZmluZQlpc3AxMzYyX2RlbGF5KGgsIGQpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgZ2V0X3VyYihlcCkgKHsJCQkJCQkJXAorCUJVR19PTihsaXN0X2VtcHR5KCZlcC0+aGVwLT51cmJfbGlzdCkpOwkJCQlcCisJY29udGFpbmVyX29mKGVwLT5oZXAtPnVyYl9saXN0Lm5leHQsIHN0cnVjdCB1cmIsIHVyYl9saXN0KTsJXAorfSkKKworLyogYmFzaWMgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgSVNQMTM2MiBjaGlwIHJlZ2lzdGVycyAqLworLyogTk9URTogVGhlIGNvbnRlbnRzIG9mIHRoZSBhZGRyZXNzIHBvaW50ZXIgcmVnaXN0ZXIgY2Fubm90IGJlIHJlYWQgYmFjayEgVGhlIGRyaXZlciBtdXN0IGVuc3VyZSwKKyAqIHRoYXQgYWxsIHJlZ2lzdGVyIGFjY2Vzc2VzIGFyZSBwZXJmb3JtZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBzaW5jZSB0aGUgaW50ZXJydXB0CisgKiBoYW5kbGVyIGhhcyBubyB3YXkgb2YgcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgaXNwMTM2Ml93cml0ZV9hZGRyKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIGlzcDEzNjJfcmVnX3QgcmVnKQoreworCS8qX0JVR19PTigocmVnICYgSVNQMTM2Ml9SRUdfV1JJVEVfT0ZGU0VUKSAmJiAhKHJlZyAmIFJFR19BQ0NFU1NfVykpOyovCisJUkVHX0FDQ0VTU19URVNUKHJlZyk7CisJX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJd3JpdGV3KElTUDEzNjJfUkVHX05PKHJlZyksIGlzcDEzNjJfaGNkLT5hZGRyX3JlZyk7CisJRFVNTVlfREVMQVlfQUNDRVNTOworCWlzcDEzNjJfZGVsYXkoaXNwMTM2Ml9oY2QsIDEpOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX3dyaXRlX2RhdGExNihzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB1MTYgdmFsKQoreworCV9CVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CisJRFVNTVlfREVMQVlfQUNDRVNTOworCXdyaXRldyh2YWwsIGlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7Cit9CisKK3N0YXRpYyB1MTYgaXNwMTM2Ml9yZWFkX2RhdGExNihzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCXUxNiB2YWw7CisKKwlfQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwl2YWwgPSByZWFkdyhpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQgaXNwMTM2Ml93cml0ZV9kYXRhMzIoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdTMyIHZhbCkKK3sKKwlfQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworI2lmIFVTRV8zMkJJVAorCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwl3cml0ZWwodmFsLCBpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworI2Vsc2UKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJd3JpdGV3KCh1MTYpdmFsLCBpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwl3cml0ZXcodmFsID4+IDE2LCBpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworI2VuZGlmCit9CisKK3N0YXRpYyB1MzIgaXNwMTM2Ml9yZWFkX2RhdGEzMihzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkKQoreworCXUzMiB2YWw7CisKKwlfQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworI2lmIFVTRV8zMkJJVAorCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwl2YWwgPSByZWFkbChpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworI2Vsc2UKKwlEVU1NWV9ERUxBWV9BQ0NFU1M7CisJdmFsID0gKHUzMilyZWFkdyhpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworCURVTU1ZX0RFTEFZX0FDQ0VTUzsKKwl2YWwgfD0gKHUzMilyZWFkdyhpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpIDw8IDE2OworI2VuZGlmCisJcmV0dXJuIHZhbDsKK30KKworLyogdXNlIHJlYWRzdy93cml0ZXN3IHRvIGFjY2VzcyB0aGUgZmlmbyB3aGVuZXZlciBwb3NzaWJsZSAqLworLyogYXNzdW1lIEhDRElSREFUQSBvciBYRkVSQ1RSICYgYWRkcl9yZWcgaGF2ZSBiZWVuIHNldCB1cCAqLworc3RhdGljIHZvaWQgaXNwMTM2Ml9yZWFkX2ZpZm8oc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdm9pZCAqYnVmLCB1MTYgbGVuKQoreworCXU4ICpkcCA9IGJ1ZjsKKwl1MTYgZGF0YTsKKworCWlmICghbGVuKQorCQlyZXR1cm47CisKKwlfQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCisJUkRCRygiJXM6IFJlYWRpbmcgJWQgYnl0ZSBmcm9tIGZpZm8gdG8gbWVtIEAgJXBcbiIsIF9fZnVuY19fLCBsZW4sIGJ1Zik7CisjaWYgVVNFXzMyQklUCisJaWYgKGxlbiA+PSA0KSB7CisJCVJEQkcoIiVzOiBVc2luZyByZWFkc2wgZm9yICVkIGR3b3Jkc1xuIiwgX19mdW5jX18sIGxlbiA+PiAyKTsKKwkJcmVhZHNsKGlzcDEzNjJfaGNkLT5kYXRhX3JlZywgZHAsIGxlbiA+PiAyKTsKKwkJZHAgKz0gbGVuICYgfjM7CisJCWxlbiAmPSAzOworCX0KKyNlbmRpZgorCWlmIChsZW4gPj0gMikgeworCQlSREJHKCIlczogVXNpbmcgcmVhZHN3IGZvciAlZCB3b3Jkc1xuIiwgX19mdW5jX18sIGxlbiA+PiAxKTsKKwkJaW5zdygodW5zaWduZWQgbG9uZylpc3AxMzYyX2hjZC0+ZGF0YV9yZWcsIGRwLCBsZW4gPj4gMSk7CisJCWRwICs9IGxlbiAmIH4xOworCQlsZW4gJj0gMTsKKwl9CisKKwlCVUdfT04obGVuICYgfjEpOworCWlmIChsZW4gPiAwKSB7CisJCWRhdGEgPSBpc3AxMzYyX3JlYWRfZGF0YTE2KGlzcDEzNjJfaGNkKTsKKwkJUkRCRygiJXM6IFJlYWRpbmcgdHJhaWxpbmcgYnl0ZSAlMDJ4IHRvIG1lbSBAICUwOHhcbiIsIF9fZnVuY19fLAorCQkgICAgICh1OClkYXRhLCAodTMyKWRwKTsKKwkJKmRwID0gKHU4KWRhdGE7CisJfQorfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX3dyaXRlX2ZpZm8oc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdm9pZCAqYnVmLCB1MTYgbGVuKQoreworCXU4ICpkcCA9IGJ1ZjsKKwl1MTYgZGF0YTsKKworCWlmICghbGVuKQorCQlyZXR1cm47CisKKwlpZiAoKHVuc2lnbmVkKWRwICYgMHgxKSB7CisJCS8qIG5vdCBhbGlnbmVkICovCisJCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikgeworCQkJZGF0YSA9ICpkcCsrOworCQkJZGF0YSB8PSAqZHArKyA8PCA4OworCQkJaXNwMTM2Ml93cml0ZV9kYXRhMTYoaXNwMTM2Ml9oY2QsIGRhdGEpOworCQl9CisJCWlmIChsZW4pCisJCQlpc3AxMzYyX3dyaXRlX2RhdGExNihpc3AxMzYyX2hjZCwgKmRwKTsKKwkJcmV0dXJuOworCX0KKworCV9CVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CisKKwlSREJHKCIlczogV3JpdGluZyAlZCBieXRlIHRvIGZpZm8gZnJvbSBtZW1vcnkgQCVwXG4iLCBfX2Z1bmNfXywgbGVuLCBidWYpOworI2lmIFVTRV8zMkJJVAorCWlmIChsZW4gPj0gNCkgeworCQlSREJHKCIlczogVXNpbmcgd3JpdGVzbCBmb3IgJWQgZHdvcmRzXG4iLCBfX2Z1bmNfXywgbGVuID4+IDIpOworCQl3cml0ZXNsKGlzcDEzNjJfaGNkLT5kYXRhX3JlZywgZHAsIGxlbiA+PiAyKTsKKwkJZHAgKz0gbGVuICYgfjM7CisJCWxlbiAmPSAzOworCX0KKyNlbmRpZgorCWlmIChsZW4gPj0gMikgeworCQlSREJHKCIlczogVXNpbmcgd3JpdGVzdyBmb3IgJWQgd29yZHNcbiIsIF9fZnVuY19fLCBsZW4gPj4gMSk7CisJCW91dHN3KCh1bnNpZ25lZCBsb25nKWlzcDEzNjJfaGNkLT5kYXRhX3JlZywgZHAsIGxlbiA+PiAxKTsKKwkJZHAgKz0gbGVuICYgfjE7CisJCWxlbiAmPSAxOworCX0KKworCUJVR19PTihsZW4gJiB+MSk7CisJaWYgKGxlbiA+IDApIHsKKwkJLyogZmluYWxseSB3cml0ZSBhbnkgdHJhaWxpbmcgYnl0ZTsgd2UgZG9uJ3QgbmVlZCB0byBjYXJlCisJCSAqIGFib3V0IHRoZSBoaWdoIGJ5dGUgb2YgdGhlIGxhc3Qgd29yZCB3cml0dGVuCisJCSAqLworCQlkYXRhID0gKHUxNikqZHA7CisJCVJEQkcoIiVzOiBTZW5kaW5nIHRyYWlsaW5nIGJ5dGUgJTAyeCBmcm9tIG1lbSBAICUwOHhcbiIsIF9fZnVuY19fLAorCQkJZGF0YSwgKHUzMilkcCk7CisJCWlzcDEzNjJfd3JpdGVfZGF0YTE2KGlzcDEzNjJfaGNkLCBkYXRhKTsKKwl9Cit9CisKKyNkZWZpbmUgaXNwMTM2Ml9yZWFkX3JlZzE2KGQsIHIpCQkoewkJCVwKKwl1MTYgX192OwkJCQkJCQlcCisJUkVHX1dJRFRIX1RFU1QoSVNQMTM2Ml9SRUdfIyNyLCBSRUdfV0lEVEhfMTYpOwkJCVwKKwlpc3AxMzYyX3dyaXRlX2FkZHIoZCwgSVNQMTM2Ml9SRUdfIyNyKTsJCQkJXAorCV9fdiA9IGlzcDEzNjJfcmVhZF9kYXRhMTYoZCk7CQkJCQlcCisJUkRCRygiJXM6IFJlYWQgJTA0eCBmcm9tICVzWyUwMnhdXG4iLCBfX2Z1bmNfXywgX192LCAjciwJXAorCSAgICAgSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfIyNyKSk7CQkJCVwKKwlfX3Y7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGlzcDEzNjJfcmVhZF9yZWczMihkLCByKQkJKHsJCQlcCisJdTMyIF9fdjsJCQkJCQkJXAorCVJFR19XSURUSF9URVNUKElTUDEzNjJfUkVHXyMjciwgUkVHX1dJRFRIXzMyKTsJCQlcCisJaXNwMTM2Ml93cml0ZV9hZGRyKGQsIElTUDEzNjJfUkVHXyMjcik7CQkJCVwKKwlfX3YgPSBpc3AxMzYyX3JlYWRfZGF0YTMyKGQpOwkJCQkJXAorCVJEQkcoIiVzOiBSZWFkICUwOHggZnJvbSAlc1slMDJ4XVxuIiwgX19mdW5jX18sIF9fdiwgI3IsCVwKKwkgICAgIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHXyMjcikpOwkJCQlcCisJX192OwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBpc3AxMzYyX3dyaXRlX3JlZzE2KGQsIHIsIHYpCXsJCQkJCVwKKwlSRUdfV0lEVEhfVEVTVChJU1AxMzYyX1JFR18jI3IsIFJFR19XSURUSF8xNik7CQkJCVwKKwlpc3AxMzYyX3dyaXRlX2FkZHIoZCwgKElTUDEzNjJfUkVHXyMjcikgfCBJU1AxMzYyX1JFR19XUklURV9PRkZTRVQpOwlcCisJaXNwMTM2Ml93cml0ZV9kYXRhMTYoZCwgKHUxNikodikpOwkJCQkJXAorCVJEQkcoIiVzOiBXcm90ZSAlMDR4IHRvICVzWyUwMnhdXG4iLCBfX2Z1bmNfXywgKHUxNikodiksICNyLAlcCisJICAgICBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR18jI3IpKTsJCQkJCVwKK30KKworI2RlZmluZSBpc3AxMzYyX3dyaXRlX3JlZzMyKGQsIHIsIHYpCXsJCQkJCVwKKwlSRUdfV0lEVEhfVEVTVChJU1AxMzYyX1JFR18jI3IsIFJFR19XSURUSF8zMik7CQkJCVwKKwlpc3AxMzYyX3dyaXRlX2FkZHIoZCwgKElTUDEzNjJfUkVHXyMjcikgfCBJU1AxMzYyX1JFR19XUklURV9PRkZTRVQpOwlcCisJaXNwMTM2Ml93cml0ZV9kYXRhMzIoZCwgKHUzMikodikpOwkJCQkJXAorCVJEQkcoIiVzOiBXcm90ZSAlMDh4IHRvICVzWyUwMnhdXG4iLCBfX2Z1bmNfXywgKHUzMikodiksICNyLAlcCisJICAgICBJU1AxMzYyX1JFR19OTyhJU1AxMzYyX1JFR18jI3IpKTsJCQkJCVwKK30KKworI2RlZmluZSBpc3AxMzYyX3NldF9tYXNrMTYoZCwgciwgbSkgewkJCVwKKwl1MTYgX192OwkJCQkJXAorCV9fdiA9IGlzcDEzNjJfcmVhZF9yZWcxNihkLCByKTsJCQlcCisJaWYgKChfX3YgfCBtKSAhPSBfX3YpCQkJCVwKKwkJaXNwMTM2Ml93cml0ZV9yZWcxNihkLCByLCBfX3YgfCBtKTsJXAorfQorCisjZGVmaW5lIGlzcDEzNjJfY2xyX21hc2sxNihkLCByLCBtKSB7CQkJXAorCXUxNiBfX3Y7CQkJCQlcCisJX192ID0gaXNwMTM2Ml9yZWFkX3JlZzE2KGQsIHIpOwkJCVwKKwlpZiAoKF9fdiAmIH5tKSAhPSBfX3YpCQkJXAorCQlpc3AxMzYyX3dyaXRlX3JlZzE2KGQsIHIsIF9fdiAmIH5tKTsJXAorfQorCisjZGVmaW5lIGlzcDEzNjJfc2V0X21hc2szMihkLCByLCBtKSB7CQkJXAorCXUzMiBfX3Y7CQkJCQlcCisJX192ID0gaXNwMTM2Ml9yZWFkX3JlZzMyKGQsIHIpOwkJCVwKKwlpZiAoKF9fdiB8IG0pICE9IF9fdikJCQkJXAorCQlpc3AxMzYyX3dyaXRlX3JlZzMyKGQsIHIsIF9fdiB8IG0pOwlcCit9CisKKyNkZWZpbmUgaXNwMTM2Ml9jbHJfbWFzazMyKGQsIHIsIG0pIHsJCQlcCisJdTMyIF9fdjsJCQkJCVwKKwlfX3YgPSBpc3AxMzYyX3JlYWRfcmVnMzIoZCwgcik7CQkJXAorCWlmICgoX192ICYgfm0pICE9IF9fdikJCQlcCisJCWlzcDEzNjJfd3JpdGVfcmVnMzIoZCwgciwgX192ICYgfm0pOwlcCit9CisKKyNpZmRlZiBJU1AxMzYyX0RFQlVHCisjZGVmaW5lIGlzcDEzNjJfc2hvd19yZWcoZCwgcikgewkJCQkJCQkJXAorCWlmICgoSVNQMTM2Ml9SRUdfIyNyICYgUkVHX1dJRFRIX01BU0spID09IFJFR19XSURUSF8zMikJCQlcCisJCURCRygwLCAiJS0xMnNbJTAyeF06ICUwOHhcbiIsICNyLAkJCQkJXAorCQkJSVNQMTM2Ml9SRUdfTk8oSVNQMTM2Ml9SRUdfIyNyKSwgaXNwMTM2Ml9yZWFkX3JlZzMyKGQsIHIpKTsJXAorCWVsc2UJCQkJCQkJCQlcCisJCURCRygwLCAiJS0xMnNbJTAyeF06ICAgICAlMDR4XG4iLCAjciwJCQkJCVwKKwkJCUlTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHXyMjciksIGlzcDEzNjJfcmVhZF9yZWcxNihkLCByKSk7CVwKK30KKyNlbHNlCisjZGVmaW5lIGlzcDEzNjJfc2hvd19yZWcoZCwgcikJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpIGlzcDEzNjJfc2hvd19yZWdzKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QpCit7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENSRVZJU0lPTik7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENDT05UUk9MKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0NNRFNUQVQpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDSU5UU1RBVCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJTlRFTkIpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDRk1JTlRWTCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENGTVJFTSk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENGTU5VTSk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENMU1RIUkVTSCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENSSERFU0NBKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ1JIREVTQ0IpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDUkhTVEFUVVMpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDUkhQT1JUMSk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENSSFBPUlQyKTsKKworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDSFdDRkcpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDRE1BQ0ZHKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ1hGRVJDVFIpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpOworCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlEQkcoMCwgIiUtMTJzWyUwMnhdOiAgICAgJTA0eFxuIiwgIkhDdVBJTlRFTkIiLAorCQkJIElTUDEzNjJfUkVHX05PKElTUDEzNjJfUkVHX0hDdVBJTlRFTkIpLCBpc3AxMzYyX2hjZC0+aXJxZW5iKTsKKwllbHNlCisJCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDdVBJTlRFTkIpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQ0hJUElEKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ1NDUkFUQ0gpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQlVGU1RBVCk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENESVJBRERSKTsKKwkvKiBBY2Nlc3Mgd291bGQgYWR2YW5jZSBmaWZvCisJICogaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENESVJEQVRBKTsKKwkgKi8KKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0lTVExCVUZTWik7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJU1RMUkFURSk7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENJTlRMQlVGU1opOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDSU5UTEJMS1NaKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0lOVExET05FKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0lOVExTS0lQKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0lOVExMQVNUKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0lOVExDVVJSKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0FUTEJVRlNaKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0FUTEJMS1NaKTsKKwkvKiBvbmx5IHZhbGlkIGFmdGVyIEFUTF9ET05FIGludGVycnVwdAorCSAqIGlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQVRMRE9ORSk7CisJICovCisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENBVExTS0lQKTsKKwlpc3AxMzYyX3Nob3dfcmVnKGlzcDEzNjJfaGNkLCBIQ0FUTExBU1QpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQVRMQ1VSUik7CisJaXNwMTM2Ml9zaG93X3JlZyhpc3AxMzYyX2hjZCwgSENBVExEVEMpOworCWlzcDEzNjJfc2hvd19yZWcoaXNwMTM2Ml9oY2QsIEhDQVRMRFRDVE8pOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX3dyaXRlX2RpcmFkZHIoc3RydWN0IGlzcDEzNjJfaGNkICppc3AxMzYyX2hjZCwgdTE2IG9mZnNldCwgdTE2IGxlbikKK3sKKwlfQlVHX09OKG9mZnNldCAmIDEpOworCV9CVUdfT04ob2Zmc2V0ID49IElTUDEzNjJfQlVGX1NJWkUpOworCV9CVUdfT04obGVuID4gSVNQMTM2Ml9CVUZfU0laRSk7CisJX0JVR19PTihvZmZzZXQgKyBsZW4gPiBJU1AxMzYyX0JVRl9TSVpFKTsKKwlsZW4gPSAobGVuICsgMSkgJiB+MTsKKworCWlzcDEzNjJfY2xyX21hc2sxNihpc3AxMzYyX2hjZCwgSENETUFDRkcsIEhDRE1BQ0ZHX0NUUl9FTkFCTEUpOworCWlzcDEzNjJfd3JpdGVfcmVnMzIoaXNwMTM2Ml9oY2QsIEhDRElSQUREUiwKKwkJCSAgICBIQ0RJUkFERFJfQUREUihvZmZzZXQpIHwgSENESVJBRERSX0NPVU5UKGxlbikpOworfQorCitzdGF0aWMgdm9pZCBpc3AxMzYyX3JlYWRfYnVmZmVyKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHZvaWQgKmJ1ZiwgdTE2IG9mZnNldCwgaW50IGxlbikKK3sKKwlfQlVHX09OKG9mZnNldCAmIDEpOworCisJaXNwMTM2Ml93cml0ZV9kaXJhZGRyKGlzcDEzNjJfaGNkLCBvZmZzZXQsIGxlbik7CisKKwlEQkcoMywgIiVzOiBSZWFkaW5nICVkIGJ5dGUgZnJvbSBidWZmZXIgQCUwNHggdG8gbWVtb3J5IEAgJTA4eFxuIiwgX19mdW5jX18sCisJICAgIGxlbiwgb2Zmc2V0LCAodTMyKWJ1Zik7CisKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBIQ3VQSU5UX0VPVCk7CisJX1dBUk5fT04oKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0VPVCkpOworCisJaXNwMTM2Ml93cml0ZV9hZGRyKGlzcDEzNjJfaGNkLCBJU1AxMzYyX1JFR19IQ0RJUkRBVEEpOworCisJaXNwMTM2Ml9yZWFkX2ZpZm8oaXNwMTM2Ml9oY2QsIGJ1ZiwgbGVuKTsKKwlfV0FSTl9PTighKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0VPVCkpOworCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQsIEhDdVBJTlRfRU9UKTsKKwlfV0FSTl9PTigoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfRU9UKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlzcDEzNjJfd3JpdGVfYnVmZmVyKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHZvaWQgKmJ1ZiwgdTE2IG9mZnNldCwgaW50IGxlbikKK3sKKwlfQlVHX09OKG9mZnNldCAmIDEpOworCisJaXNwMTM2Ml93cml0ZV9kaXJhZGRyKGlzcDEzNjJfaGNkLCBvZmZzZXQsIGxlbik7CisKKwlEQkcoMywgIiVzOiBXcml0aW5nICVkIGJ5dGUgdG8gYnVmZmVyIEAlMDR4IGZyb20gbWVtb3J5IEAgJTA4eFxuIiwgX19mdW5jX18sCisJICAgIGxlbiwgb2Zmc2V0LCAodTMyKWJ1Zik7CisKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBIQ3VQSU5UX0VPVCk7CisJX1dBUk5fT04oKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0VPVCkpOworCisJaXNwMTM2Ml93cml0ZV9hZGRyKGlzcDEzNjJfaGNkLCBJU1AxMzYyX1JFR19IQ0RJUkRBVEEgfCBJU1AxMzYyX1JFR19XUklURV9PRkZTRVQpOworCWlzcDEzNjJfd3JpdGVfZmlmbyhpc3AxMzYyX2hjZCwgYnVmLCBsZW4pOworCisJX1dBUk5fT04oIShpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKKwlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBIQ3VQSU5UX0VPVCk7CisJX1dBUk5fT04oKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0VPVCkpOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBkdW1wX2RhdGEoY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWlmIChkYmdfbGV2ZWwgPiAwKSB7CisJCWludCBrOworCQlpbnQgbGYgPSAwOworCisJCWZvciAoayA9IDA7IGsgPCBsZW47ICsraykgeworCQkJaWYgKCFsZikKKwkJCQlEQkcoMCwgIiUwNHg6Iiwgayk7CisJCQlwcmludGsoIiAlMDJ4IiwgKCh1OCAqKSBidWYpW2tdKTsKKwkJCWxmID0gMTsKKwkJCWlmICghaykKKwkJCQljb250aW51ZTsKKwkJCWlmIChrICUgMTYgPT0gMTUpIHsKKwkJCQlwcmludGsoIlxuIik7CisJCQkJbGYgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGsgJSA4ID09IDcpCisJCQkJcHJpbnRrKCIgIik7CisJCQlpZiAoayAlIDQgPT0gMykKKwkJCQlwcmludGsoIiAiKTsKKwkJfQorCQlpZiAobGYpCisJCQlwcmludGsoIlxuIik7CisJfQorfQorCisjaWYgZGVmaW5lZChJU1AxMzYyX0RFQlVHKSAmJiBkZWZpbmVkKFBURF9UUkFDRSkKKworc3RhdGljIHZvaWQgZHVtcF9wdGQoc3RydWN0IHB0ZCAqcHRkKQoreworCURCRygwLCAiRVAgJXA6IENDPSV4IEVQPSVkIERJUj0leCBDTlQ9JWQgTEVOPSVkIE1QUz0lZCBUR0w9JXggQUNUPSV4IEZBPSVkIFNQRD0leCBTRj0leCBQUj0leCBMU1Q9JXhcbiIsCisJICAgIGNvbnRhaW5lcl9vZihwdGQsIHN0cnVjdCBpc3AxMzYyX2VwLCBwdGQpLAorCSAgICBQVERfR0VUX0NDKHB0ZCksIFBURF9HRVRfRVAocHRkKSwgUFREX0dFVF9ESVIocHRkKSwKKwkgICAgUFREX0dFVF9DT1VOVChwdGQpLCBQVERfR0VUX0xFTihwdGQpLCBQVERfR0VUX01QUyhwdGQpLAorCSAgICBQVERfR0VUX1RPR0dMRShwdGQpLCBQVERfR0VUX0FDVElWRShwdGQpLCBQVERfR0VUX0ZBKHB0ZCksCisJICAgIFBURF9HRVRfU1BEKHB0ZCksIFBURF9HRVRfU0ZfSU5UKHB0ZCksIFBURF9HRVRfUFIocHRkKSwgUFREX0dFVF9MQVNUKHB0ZCkpOworCURCRygwLCAiICAlMDR4ICUwNHggJTA0eCAlMDR4XG4iLCBwdGQtPmNvdW50LCBwdGQtPm1wcywgcHRkLT5sZW4sIHB0ZC0+ZmFkZHIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3B0ZF9vdXRfZGF0YShzdHJ1Y3QgcHRkICpwdGQsIHU4ICpidWYpCit7CisJaWYgKGRiZ19sZXZlbCA+IDApIHsKKwkJaWYgKFBURF9HRVRfRElSKHB0ZCkgIT0gUFREX0RJUl9JTiAmJiBQVERfR0VUX0xFTihwdGQpKSB7CisJCQlEQkcoMCwgIi0tb3V0LT5cbiIpOworCQkJZHVtcF9kYXRhKGJ1ZiwgUFREX0dFVF9MRU4ocHRkKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcHRkX2luX2RhdGEoc3RydWN0IHB0ZCAqcHRkLCB1OCAqYnVmKQoreworCWlmIChkYmdfbGV2ZWwgPiAwKSB7CisJCWlmIChQVERfR0VUX0RJUihwdGQpID09IFBURF9ESVJfSU4gJiYgUFREX0dFVF9DT1VOVChwdGQpKSB7CisJCQlEQkcoMCwgIjwtLWluLS1cbiIpOworCQkJZHVtcF9kYXRhKGJ1ZiwgUFREX0dFVF9DT1VOVChwdGQpKTsKKwkJfQorCQlEQkcoMCwgIi0tLS0tXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcHRkX3F1ZXVlKHN0cnVjdCBpc3AxMzYyX2VwX3F1ZXVlICplcHEpCit7CisJc3RydWN0IGlzcDEzNjJfZXAgKmVwOworCWludCBkYmcgPSBkYmdfbGV2ZWw7CisKKwlkYmdfbGV2ZWwgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXAsICZlcHEtPmFjdGl2ZSwgYWN0aXZlKSB7CisJCWR1bXBfcHRkKCZlcC0+cHRkKTsKKwkJZHVtcF9kYXRhKGVwLT5kYXRhLCBlcC0+bGVuZ3RoKTsKKwl9CisJZGJnX2xldmVsID0gZGJnOworfQorI2Vsc2UKKyNkZWZpbmUgZHVtcF9wdGQocHRkKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkdW1wX3B0ZF9pbl9kYXRhKHB0ZCwgYnVmKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVtcF9wdGRfb3V0X2RhdGEocHRkLCBidWYpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkdW1wX3B0ZF9kYXRhKHB0ZCwgYnVmKQkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGR1bXBfcHRkX3F1ZXVlKGVwcSkJCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggMTU0Mzg0Ni4uOTYwMGE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtMzg2LDYgKzM4NiwxMCBAQAogCQlod21vZGUgfD0gSFdfREFDS19QT0xfSElHSDsKIAlpZiAocHJpdi0+ZGV2ZmxhZ3MgJiBJU1AxNzYwX0ZMQUdfRFJFUV9QT0xfSElHSCkKIAkJaHdtb2RlIHw9IEhXX0RSRVFfUE9MX0hJR0g7CisJaWYgKHByaXYtPmRldmZsYWdzICYgSVNQMTc2MF9GTEFHX0lOVFJfUE9MX0hJR0gpCisJCWh3bW9kZSB8PSBIV19JTlRSX0hJR0hfQUNUOworCWlmIChwcml2LT5kZXZmbGFncyAmIElTUDE3NjBfRkxBR19JTlRSX0VER0VfVFJJRykKKwkJaHdtb2RlIHw9IEhXX0lOVFJfRURHRV9UUklHOwogCiAJLyoKIAkgKiBXZSBoYXZlIHRvIHNldCB0aGlzIGZpcnN0IGluIGNhc2Ugd2UncmUgaW4gMTYtYml0IG1vZGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKaW5kZXggNDYyZjQ5NC4uNjkzMWVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaApAQCAtMTQyLDYgKzE0Miw4IEBACiAjZGVmaW5lIElTUDE3NjBfRkxBR19EQUNLX1BPTF9ISUdICTB4MDAwMDAwMTAgLyogREFDSyBhY3RpdmUgaGlnaCAqLwogI2RlZmluZSBJU1AxNzYwX0ZMQUdfRFJFUV9QT0xfSElHSAkweDAwMDAwMDIwIC8qIERSRVEgYWN0aXZlIGhpZ2ggKi8KICNkZWZpbmUgSVNQMTc2MF9GTEFHX0lTUDE3NjEJCTB4MDAwMDAwNDAgLyogQ2hpcCBpcyBJU1AxNzYxICovCisjZGVmaW5lIElTUDE3NjBfRkxBR19JTlRSX1BPTF9ISUdICTB4MDAwMDAwODAgLyogSW50ZXJydXB0IHBvbGFyaXR5IGFjdGl2ZSBoaWdoICovCisjZGVmaW5lIElTUDE3NjBfRkxBR19JTlRSX0VER0VfVFJJRwkweDAwMDAwMTAwIC8qIEludGVycnVwdCBlZGdlIHRyaWdnZXJlZCAqLwogCiAvKiBjaGlwIG1lbW9yeSBtYW5hZ2VtZW50ICovCiBzdHJ1Y3QgbWVtb3J5X2NodW5rIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKaW5kZXggZDRmZWViZi4uMWM5Zjk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKQEAgLTMsNiArMyw3IEBACiAgKiBDdXJyZW50bHkgdGhlcmUgaXMgc3VwcG9ydCBmb3IKICAqIC0gT3BlbkZpcm13YXJlCiAgKiAtIFBDSQorICogLSBQREVWIChnZW5lcmljIHBsYXRmb3JtIGRldmljZSBjZW50cmFsaXplZCBkcml2ZXIgbW9kZWwpCiAgKgogICogKGMpIDIwMDcgU2ViYXN0aWFuIFNpZXdpb3IgPGJpZ2Vhc3lAbGludXRyb25peC5kZT4KICAqCkBAIC0xMSw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTc2MC5oPgogCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKICNpbmNsdWRlICJpc3AxNzYwLWhjZC5oIgpAQCAtMzA4LDYgKzMxMCw4IEBACiAJc3RydWN0IHJlc291cmNlICptZW1fcmVzOwogCXN0cnVjdCByZXNvdXJjZSAqaXJxX3JlczsKIAlyZXNvdXJjZV9zaXplX3QgbWVtX3NpemU7CisJc3RydWN0IGlzcDE3NjBfcGxhdGZvcm1fZGF0YSAqcHJpdiA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGludCBkZXZmbGFncyA9IDA7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRDsKIAogCW1lbV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtMzMwLDggKzMzNCwyMyBAQAogCX0KIAlpcnFmbGFncyB8PSBpcnFfcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCisJaWYgKHByaXYpIHsKKwkJaWYgKHByaXYtPmlzX2lzcDE3NjEpCisJCQlkZXZmbGFncyB8PSBJU1AxNzYwX0ZMQUdfSVNQMTc2MTsKKwkJaWYgKHByaXYtPmJ1c193aWR0aF8xNikKKwkJCWRldmZsYWdzIHw9IElTUDE3NjBfRkxBR19CVVNfV0lEVEhfMTY7CisJCWlmIChwcml2LT5wb3J0MV9vdGcpCisJCQlkZXZmbGFncyB8PSBJU1AxNzYwX0ZMQUdfT1RHX0VOOworCQlpZiAocHJpdi0+YW5hbG9nX29jKQorCQkJZGV2ZmxhZ3MgfD0gSVNQMTc2MF9GTEFHX0FOQUxPR19PQzsKKwkJaWYgKHByaXYtPmRhY2tfcG9sYXJpdHlfaGlnaCkKKwkJCWRldmZsYWdzIHw9IElTUDE3NjBfRkxBR19EQUNLX1BPTF9ISUdIOworCQlpZiAocHJpdi0+ZHJlcV9wb2xhcml0eV9oaWdoKQorCQkJZGV2ZmxhZ3MgfD0gSVNQMTc2MF9GTEFHX0RSRVFfUE9MX0hJR0g7CisJfQorCiAJaGNkID0gaXNwMTc2MF9yZWdpc3RlcihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUsIGlycV9yZXMtPnN0YXJ0LAotCQkJICAgICAgIGlycWZsYWdzLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgMCk7CisJCQkgICAgICAgaXJxZmxhZ3MsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBkZXZmbGFncyk7CiAJaWYgKElTX0VSUihoY2QpKSB7CiAJCXByX3dhcm5pbmcoImlzcDE3NjA6IEZhaWxlZCB0byByZWdpc3RlciB0aGUgSENEIGRldmljZVxuIik7CiAJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwppbmRleCBiYjVlNmY2Li43Y2NmZmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCWF0OTFfc3RhcnRfaGMocGRldik7CiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKIAotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIElSUUZfRElTQUJMRUQpOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIElSUUZfU0hBUkVEKTsKIAlpZiAocmV0dmFsID09IDApCiAJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwppbmRleCAyYWM0ZTAyLi5lNDM4MDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCkBAIC0yNDgsMTAgKzI0OCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKQEAgLTI3NCwxMCArMjczLDYgQEAKIAlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfTUlFLCAmb2hjaS0+cmVncy0+aW50cmRpc2FibGUpOwogCSh2b2lkKW9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJkaXNhYmxlKTsKIAotCS8qIG1ha2Ugc3VyZSBzbmFwc2hvdCBiZWluZyByZXN1bWVkIHJlLWVudW1lcmF0ZXMgZXZlcnl0aGluZyAqLwotCWlmIChtZXNzYWdlLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpCi0JCW9oY2lfdXNiX3Jlc2V0KG9oY2kpOwotCiAJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKIAogCWF1MXh4eF9zdG9wX29oYygpOwpAQCAtMjg3LDkgKzI4Miw5IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJYXUxeHh4X3N0YXJ0X29oYygpOwogCkBAIC0yOTgsMjAgKzI5MywyNiBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBhdTF4eHhfb2hjaV9wbW9wcyA9IHsKKwkuc3VzcGVuZAk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lLAorfTsKKworI2RlZmluZSBBVTFYWFhfT0hDSV9QTU9QUyAmYXUxeHh4X29oY2lfcG1vcHMKKwogI2Vsc2UKLSNkZWZpbmUgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUgTlVMTAorI2RlZmluZSBBVTFYWFhfT0hDSV9QTU9QUyBOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiYXUxeHh4LW9oY2kiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gQVUxWFhYX09IQ0lfUE1PUFMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwppbmRleCBiMGRiZjQxLi40ZTY4MTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCkBAIC0xODgsNyArMTg4LDYgQEAKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9oY2lfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKLQlpbnQgc3RhdHVzOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggNTgxNTE2OC4uNzhiYjc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBlNDRkYzJjLi5iNTI5NGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0xNzcsOSArMTc3LDEzIEBACiAKIAlpZiAoaW5mLT5mbGFncyAmIE5PX09DX1BST1RFQ1RJT04pCiAJCXVoY3JoZGEgfD0gVUhDUkhEQV9OT0NQOworCWVsc2UKKwkJdWhjcmhkYSAmPSB+VUhDUkhEQV9OT0NQOwogCiAJaWYgKGluZi0+ZmxhZ3MgJiBPQ19NT0RFX1BFUlBPUlQpCiAJCXVoY3JoZGEgfD0gVUhDUkhEQV9PQ1BNOworCWVsc2UKKwkJdWhjcmhkYSAmPSB+VUhDUkhEQV9PQ1BNOwogCiAJaWYgKGluZi0+cG93ZXJfb25fZGVsYXkpIHsKIAkJdWhjcmhkYSAmPSB+VUhDUkhEQV9QT1RQR1QoMHhmZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwppbmRleCBjMmQ4MGY4Li4xNmZlY2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQlpc19vdXQgPSAhKGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKTsKIAogCQkvKiBGSVhNRSB1c2Jjb3JlIGNoYW5nZXMgZGV2LT5kZXZudW0gYmVmb3JlIFNFVF9BRERSRVNTCi0JCSAqIHN1Y2VlZHMgLi4uIG90aGVyd2lzZSB3ZSB3b3VsZG4ndCBuZWVkICJwaXBlIi4KKwkJICogc3VjY2VlZHMgLi4uIG90aGVyd2lzZSB3ZSB3b3VsZG4ndCBuZWVkICJwaXBlIi4KIAkJICovCiAJCWluZm8gPSB1c2JfcGlwZWRldmljZSAocGlwZSk7CiAJCWVkLT50eXBlID0gdXNiX3BpcGV0eXBlKHBpcGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKaW5kZXggNWFjNDg5ZS4uNTBmNTdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCA4M2I1ZjljLi4yM2NmM2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtNDc1LDQgKzQ3NSw0IEBACiAJZWxzZSBpZiAocGRldi0+Y2xhc3MgPT0gUENJX0NMQVNTX1NFUklBTF9VU0JfWEhDSSkKIAkJcXVpcmtfdXNiX2hhbmRvZmZfeGhjaShwZGV2KTsKIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHF1aXJrX3VzYl9lYXJseV9oYW5kb2ZmKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya191c2JfZWFybHlfaGFuZG9mZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCBhOTQ5MjU5Li41YjIyYTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTcxOSw4ICs3MTksMTIgQEAKIAkJLyogcG9ydCBzdGF0dXMgc2VlbXMgd2VpcmQgdW50aWwgYWZ0ZXIgcmVzZXQsIHNvCiAJCSAqIGZvcmNlIHRoZSByZXNldCBhbmQgbWFrZSBraHViZCBjbGVhbiB1cCBsYXRlci4KIAkJICovCi0JCXNsODExLT5wb3J0MSB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTikKLQkJCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTik7CisJCWlmIChzbDgxMS0+c3RhdF9pbnNybXYgJiAxKQorCQkJc2w4MTEtPnBvcnQxIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OOworCQllbHNlCisJCQlzbDgxMS0+cG9ydDEgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTik7CisKKwkJc2w4MTEtPnBvcnQxIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT047CiAKIAl9IGVsc2UgaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX1JEKSB7CiAJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCA2NGU1N2JmLi5hY2Q1ODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTE0MjIsNyArMTQyMiw2IEBACiAJCWdvdG8gZXJyX3N1Ym1pdF9mYWlsZWQ7CiAKIAkvKiBBZGQgdGhpcyBVUkIgdG8gdGhlIFFIICovCi0JdXJicC0+cWggPSBxaDsKIAlsaXN0X2FkZF90YWlsKCZ1cmJwLT5ub2RlLCAmcWgtPnF1ZXVlKTsKIAogCS8qIElmIHRoZSBuZXcgVVJCIGlzIHRoZSBmaXJzdCBhbmQgb25seSBvbmUgb24gdGhpcyBRSCB0aGVuIGVpdGhlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCmluZGV4IGMyMDUwNzguLmM2MzI0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKQEAgLTIyNywxMSArMjI3LDIxIEBACiAJLyoKIAkgKiBOb3cgdGhhdCB0aGUgQVNMIGlzIHVwZGF0ZWQsIGNvbXBsZXRlIHRoZSByZW1vdmFsIG9mIGFueQogCSAqIHJlbW92ZWQgcXNldHMuCisJICoKKwkgKiBJZiB0aGUgcXNldCB3YXMgdG8gYmUgcmVzZXQsIGRvIHNvIGFuZCByZWluc2VydCBpdCBpbnRvIHRoZQorCSAqIEFTTCBpZiBpdCBoYXMgcGVuZGluZyB0cmFuc2ZlcnMuCiAJICovCiAJc3Bpbl9sb2NrX2lycSgmd2hjLT5sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxc2V0LCB0LCAmd2hjLT5hc3luY19yZW1vdmVkX2xpc3QsIGxpc3Rfbm9kZSkgewogCQlxc2V0X3JlbW92ZV9jb21wbGV0ZSh3aGMsIHFzZXQpOworCQlpZiAocXNldC0+cmVzZXQpIHsKKwkJCXFzZXRfcmVzZXQod2hjLCBxc2V0KTsKKwkJCWlmICghbGlzdF9lbXB0eSgmcXNldC0+c3RkcykpIHsKKwkJCQlhc2xfcXNldF9pbnNlcnRfYmVnaW4od2hjLCBxc2V0KTsKKwkJCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd2hjLT5hc3luY193b3JrKTsKKwkJCX0KKwkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycSgmd2hjLT5sb2NrKTsKQEAgLTI2Nyw3ICsyNzcsNyBAQAogCWVsc2UKIAkJZXJyID0gcXNldF9hZGRfdXJiKHdoYywgcXNldCwgdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWVycikgewotCQlpZiAoIXFzZXQtPmluX3N3X2xpc3QpCisJCWlmICghcXNldC0+aW5fc3dfbGlzdCAmJiAhcXNldC0+cmVtb3ZlKQogCQkJYXNsX3FzZXRfaW5zZXJ0X2JlZ2luKHdoYywgcXNldCk7CiAJfSBlbHNlCiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKCZ3aGMtPnd1c2JoYy51c2JfaGNkLCB1cmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2hjZC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2hjZC5jCmluZGV4IGUwMTlhNTAuLjY4N2I2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaGNkLmMKQEAgLTE5MiwxOSArMTkyLDIzIEBACiAJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0gdXNiX2hjZF90b193dXNiaGModXNiX2hjZCk7CiAJc3RydWN0IHdoYyAqd2hjID0gd3VzYmhjX3RvX3doYyh3dXNiaGMpOwogCXN0cnVjdCB3aGNfcXNldCAqcXNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndoYy0+bG9jaywgZmxhZ3MpOwogCiAJcXNldCA9IGVwLT5oY3ByaXY7CiAJaWYgKHFzZXQpIHsKIAkJcXNldC0+cmVtb3ZlID0gMTsKKwkJcXNldC0+cmVzZXQgPSAxOwogCiAJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKCZlcC0+ZGVzYykKIAkJICAgIHx8IHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJmVwLT5kZXNjKSkKIAkJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3aGMtPmFzeW5jX3dvcmspOwogCQllbHNlCiAJCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd2hjLT5wZXJpb2RpY193b3JrKTsKLQotCQlxc2V0X3Jlc2V0KHdoYywgcXNldCk7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCmluZGV4IGZmNGVmOWUuLmE5ZTA1YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKQEAgLTI1NSwxMSArMjU1LDIxIEBACiAJLyoKIAkgKiBOb3cgdGhhdCB0aGUgUFpMIGlzIHVwZGF0ZWQsIGNvbXBsZXRlIHRoZSByZW1vdmFsIG9mIGFueQogCSAqIHJlbW92ZWQgcXNldHMuCisJICoKKwkgKiBJZiB0aGUgcXNldCB3YXMgdG8gYmUgcmVzZXQsIGRvIHNvIGFuZCByZWluc2VydCBpdCBpbnRvIHRoZQorCSAqIFBaTCBpZiBpdCBoYXMgcGVuZGluZyB0cmFuc2ZlcnMuCiAJICovCiAJc3Bpbl9sb2NrX2lycSgmd2hjLT5sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxc2V0LCB0LCAmd2hjLT5wZXJpb2RpY19yZW1vdmVkX2xpc3QsIGxpc3Rfbm9kZSkgewogCQlxc2V0X3JlbW92ZV9jb21wbGV0ZSh3aGMsIHFzZXQpOworCQlpZiAocXNldC0+cmVzZXQpIHsKKwkJCXFzZXRfcmVzZXQod2hjLCBxc2V0KTsKKwkJCWlmICghbGlzdF9lbXB0eSgmcXNldC0+c3RkcykpIHsKKwkJCQlxc2V0X2luc2VydF9pbl9zd19saXN0KHdoYywgcXNldCk7CisJCQkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJndoYy0+cGVyaW9kaWNfd29yayk7CisJCQl9CisJCX0KIAl9CiAKIAlzcGluX3VubG9ja19pcnEoJndoYy0+bG9jayk7CkBAIC0yOTUsNyArMzA1LDcgQEAKIAllbHNlCiAJCWVyciA9IHFzZXRfYWRkX3VyYih3aGMsIHFzZXQsIHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFlcnIpIHsKLQkJaWYgKCFxc2V0LT5pbl9zd19saXN0KQorCQlpZiAoIXFzZXQtPmluX3N3X2xpc3QgJiYgIXFzZXQtPnJlbW92ZSkKIAkJCXFzZXRfaW5zZXJ0X2luX3N3X2xpc3Qod2hjLCBxc2V0KTsKIAl9IGVsc2UKIAkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoJndoYy0+d3VzYmhjLnVzYl9oY2QsIHVyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYwppbmRleCA2NDBiMzhmLi4xYjlkYzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMKQEAgLTEwMyw3ICsxMDMsNiBAQAogdm9pZCBxc2V0X2NsZWFyKHN0cnVjdCB3aGMgKndoYywgc3RydWN0IHdoY19xc2V0ICpxc2V0KQogewogCXFzZXQtPnRkX3N0YXJ0ID0gcXNldC0+dGRfZW5kID0gcXNldC0+bnRkcyA9IDA7Ci0JcXNldC0+cmVtb3ZlID0gMDsKIAogCXFzZXQtPnFoLmxpbmsgPSBjcHVfdG9fbGUzMihRSF9MSU5LX05URFMoOCkgfCBRSF9MSU5LX1QpOwogCXFzZXQtPnFoLnN0YXR1cyA9IHFzZXQtPnFoLnN0YXR1cyAmIFFIX1NUQVRVU19TRVFfTUFTSzsKQEAgLTEyNSw3ICsxMjQsNyBAQAogICovCiB2b2lkIHFzZXRfcmVzZXQoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCiB7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmcXNldC0+cmVtb3ZlX2NvbXBsZXRlKTsKKwlxc2V0LT5yZXNldCA9IDA7CiAKIAlxc2V0LT5xaC5zdGF0dXMgJj0gflFIX1NUQVRVU19TRVFfTUFTSzsKIAlxc2V0LT5xaC5jdXJfd2luZG93ID0gY3B1X3RvX2xlMzIoKDEgPDwgcXNldC0+bWF4X2J1cnN0KSAtIDEpOwpAQCAtMTU2LDYgKzE1NSw3IEBACiAKIHZvaWQgcXNldF9yZW1vdmVfY29tcGxldGUoc3RydWN0IHdoYyAqd2hjLCBzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQpCiB7CisJcXNldC0+cmVtb3ZlID0gMDsKIAlsaXN0X2RlbF9pbml0KCZxc2V0LT5saXN0X25vZGUpOwogCWNvbXBsZXRlKCZxc2V0LT5yZW1vdmVfY29tcGxldGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3doY2ktaGMuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS93aGNpLWhjLmgKaW5kZXggNzk0ZGJhMC4uZThkMDAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3doY2ktaGMuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvd2hjaS1oYy5oCkBAIC0yNjQsNiArMjY0LDcgQEAKIAl1bnNpZ25lZCBpbl9zd19saXN0OjE7CiAJdW5zaWduZWQgaW5faHdfbGlzdDoxOwogCXVuc2lnbmVkIHJlbW92ZToxOworCXVuc2lnbmVkIHJlc2V0OjE7CiAJc3RydWN0IHVyYiAqcGF1c2VfYWZ0ZXJfdXJiOwogCXN0cnVjdCBjb21wbGV0aW9uIHJlbW92ZV9jb21wbGV0ZTsKIAlpbnQgbWF4X2J1cnN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCmluZGV4IDcwNWUzNDMuLjMzMTI4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKQEAgLTQxMyw3ICs0MTMsOCBAQAogCWludCBpOwogCiAJc3RydWN0IHhoY2lfc2xvdF9jdHggKnNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgY3R4KTsKLQlkbWFfYWRkcl90IGRtYSA9IGN0eC0+ZG1hICsgKCh1bnNpZ25lZCBsb25nKXNsb3RfY3R4IC0gKHVuc2lnbmVkIGxvbmcpY3R4KTsKKwlkbWFfYWRkcl90IGRtYSA9IGN0eC0+ZG1hICsKKwkJKCh1bnNpZ25lZCBsb25nKXNsb3RfY3R4IC0gKHVuc2lnbmVkIGxvbmcpY3R4LT5ieXRlcyk7CiAJaW50IGNzeiA9IEhDQ182NEJZVEVfQ09OVEVYVCh4aGNpLT5oY2NfcGFyYW1zKTsKIAogCXhoY2lfZGJnKHhoY2ksICJTbG90IENvbnRleHQ6XG4iKTsKQEAgLTQ1OSw3ICs0NjAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsYXN0X2VwX2N0eDsgKytpKSB7CiAJCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIGN0eCwgaSk7CiAJCWRtYV9hZGRyX3QgZG1hID0gY3R4LT5kbWEgKwotCQkJKCh1bnNpZ25lZCBsb25nKWVwX2N0eCAtICh1bnNpZ25lZCBsb25nKWN0eCk7CisJCQkoKHVuc2lnbmVkIGxvbmcpZXBfY3R4IC0gKHVuc2lnbmVkIGxvbmcpY3R4LT5ieXRlcyk7CiAKIAkJeGhjaV9kYmcoeGhjaSwgIkVuZHBvaW50ICUwMmQgQ29udGV4dDpcbiIsIGkpOwogCQl4aGNpX2RiZyh4aGNpLCAiQCVwICh2aXJ0KSBAJTA4bGx4IChkbWEpICUjMDh4IC0gZXBfaW5mb1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYwppbmRleCA4MTZjMzljLi45OTkxMWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCkBAIC0yMiwxMiArMjIsMTggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKICNpbmNsdWRlICJ4aGNpLmgiCiAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2FyYWggU2hhcnAiCiAjZGVmaW5lIERSSVZFUl9ERVNDICInZVh0ZW5zaWJsZScgSG9zdCBDb250cm9sbGVyICh4SEMpIERyaXZlciIKIAorLyogU29tZSAwLjk1IGhhcmR3YXJlIGNhbid0IGhhbmRsZSB0aGUgY2hhaW4gYml0IG9uIGEgTGluayBUUkIgYmVpbmcgY2xlYXJlZCAqLworc3RhdGljIGludCBsaW5rX3F1aXJrOworbW9kdWxlX3BhcmFtKGxpbmtfcXVpcmssIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhsaW5rX3F1aXJrLCAiRG9uJ3QgY2xlYXIgdGhlIGNoYWluIGJpdCBvbiBhIGxpbmsgVFJCIik7CisKIC8qIFRPRE86IGNvcGllZCBmcm9tIGVoY2ktaGNkLmMgLSBjYW4gdGhpcyBiZSByZWZhY3RvcmVkPyAqLwogLyoKICAqIGhhbmRzaGFrZSAtIHNwaW4gcmVhZGluZyBoYyB1bnRpbCBoYW5kc2hha2UgY29tcGxldGVzIG9yIGZhaWxzCkBAIC0yMTQsNiArMjIwLDEyIEBACiAKIAl4aGNpX2RiZyh4aGNpLCAieGhjaV9pbml0XG4iKTsKIAlzcGluX2xvY2tfaW5pdCgmeGhjaS0+bG9jayk7CisJaWYgKGxpbmtfcXVpcmspIHsKKwkJeGhjaV9kYmcoeGhjaSwgIlFVSVJLOiBOb3QgY2xlYXJpbmcgTGluayBUUkIgY2hhaW4gYml0cy5cbiIpOworCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9MSU5LX1RSQl9RVUlSSzsKKwl9IGVsc2UgeworCQl4aGNpX2RiZyh4aGNpLCAieEhDSSBkb2Vzbid0IG5lZWQgbGluayBUUkIgUVVJUktcbiIpOworCX0KIAlyZXR2YWwgPSB4aGNpX21lbV9pbml0KHhoY2ksIEdGUF9LRVJORUwpOwogCXhoY2lfZGJnKHhoY2ksICJGaW5pc2hlZCB4aGNpX2luaXRcbiIpOwogCkBAIC0zMzksMTMgKzM1MSwxNCBAQAogCXhoY2lfZGJnX3JpbmdfcHRycyh4aGNpLCB4aGNpLT5jbWRfcmluZyk7CiAJeGhjaV9kYmdfY21kX3B0cnMoeGhjaSk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9IQ19TTE9UUzsgKytpKSB7Ci0JCWlmICh4aGNpLT5kZXZzW2ldKSB7Ci0JCQlmb3IgKGogPSAwOyBqIDwgMzE7ICsraikgewotCQkJCWlmICh4aGNpLT5kZXZzW2ldLT5lcF9yaW5nc1tqXSkgewotCQkJCQl4aGNpX2RiZyh4aGNpLCAiRGV2ICVkIGVuZHBvaW50IHJpbmcgJWQ6XG4iLCBpLCBqKTsKLQkJCQkJeGhjaV9kZWJ1Z19zZWdtZW50KHhoY2ksIHhoY2ktPmRldnNbaV0tPmVwX3JpbmdzW2pdLT5kZXFfc2VnKTsKLQkJCQl9Ci0JCQl9CisJCWlmICgheGhjaS0+ZGV2c1tpXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgMzE7ICsraikgeworCQkJc3RydWN0IHhoY2lfcmluZyAqcmluZyA9IHhoY2ktPmRldnNbaV0tPmVwc1tqXS5yaW5nOworCQkJaWYgKCFyaW5nKQorCQkJCWNvbnRpbnVlOworCQkJeGhjaV9kYmcoeGhjaSwgIkRldiAlZCBlbmRwb2ludCByaW5nICVkOlxuIiwgaSwgaik7CisJCQl4aGNpX2RlYnVnX3NlZ21lbnQoeGhjaSwgcmluZy0+ZGVxX3NlZyk7CiAJCX0KIAl9CiAKQEAgLTU1NSwxMyArNTY4LDIyIEBACiAJcmV0dXJuIDEgPDwgKHhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KGRlc2MpICsgMSk7CiB9CiAKKy8qIEZpbmQgdGhlIGZsYWcgZm9yIHRoaXMgZW5kcG9pbnQgKGZvciB1c2UgaW4gdGhlIGNvbnRyb2wgY29udGV4dCkuICBVc2UgdGhlCisgKiBlbmRwb2ludCBpbmRleCB0byBjcmVhdGUgYSBiaXRtYXNrLiAgVGhlIHNsb3QgY29udGV4dCBpcyBiaXQgMCwgZW5kcG9pbnQgMCBpcworICogYml0IDEsIGV0Yy4KKyAqLwordW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2ZsYWdfZnJvbV9pbmRleCh1bnNpZ25lZCBpbnQgZXBfaW5kZXgpCit7CisJcmV0dXJuIDEgPDwgKGVwX2luZGV4ICsgMSk7Cit9CisKIC8qIENvbXB1dGUgdGhlIGxhc3QgdmFsaWQgZW5kcG9pbnQgY29udGV4dCBpbmRleC4gIEJhc2ljYWxseSwgdGhpcyBpcyB0aGUKICAqIGVuZHBvaW50IGluZGV4IHBsdXMgb25lLiAgRm9yIHNsb3QgY29udGV4dHMgd2l0aCBtb3JlIHRoYW4gdmFsaWQgZW5kcG9pbnQsCiAgKiB3ZSBmaW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgaW4gdGhlIGFkZGVkIGNvbnRleHRzIGZsYWdzLgogICogZS5nLiBlcCAxIElOICh3aXRoIGVwbnVtIDB4ODEpID0+IGFkZGVkX2N0eHMgPSAwYjEwMDAKICAqIGZscygwYjEwMDApID0gNCwgYnV0IHRoZSBlbmRwb2ludCBjb250ZXh0IGluZGV4IGlzIDMsIHNvIHN1YnRyYWN0IG9uZS4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGhjaV9sYXN0X3ZhbGlkX2VuZHBvaW50KHUzMiBhZGRlZF9jdHhzKQordW5zaWduZWQgaW50IHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludCh1MzIgYWRkZWRfY3R4cykKIHsKIAlyZXR1cm4gZmxzKGFkZGVkX2N0eHMpIC0gMTsKIH0KQEAgLTU4OSw2ICs2MTEsNzEgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCB4aGNpX2NvbmZpZ3VyZV9lbmRwb2ludChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kLAorCQlib29sIGN0eF9jaGFuZ2UsIGJvb2wgbXVzdF9zdWNjZWVkKTsKKworLyoKKyAqIEZ1bGwgc3BlZWQgZGV2aWNlcyBtYXkgaGF2ZSBhIG1heCBwYWNrZXQgc2l6ZSBncmVhdGVyIHRoYW4gOCBieXRlcywgYnV0IHRoZQorICogVVNCIGNvcmUgZG9lc24ndCBrbm93IHRoYXQgdW50aWwgaXQgcmVhZHMgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlCisgKiBkZXNjcmlwdG9yLiAgSWYgdGhlIHVzYl9kZXZpY2UncyBtYXggcGFja2V0IHNpemUgY2hhbmdlcyBhZnRlciB0aGF0IHBvaW50LAorICogd2UgbmVlZCB0byBpc3N1ZSBhbiBldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmQgYW5kIHdhaXQgb24gaXQuCisgKi8KK3N0YXRpYyBpbnQgeGhjaV9jaGVja19tYXhwYWNrZXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1bnNpZ25lZCBpbnQgc2xvdF9pZCwKKwkJdW5zaWduZWQgaW50IGVwX2luZGV4LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqaW5fY3R4OworCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKm91dF9jdHg7CisJc3RydWN0IHhoY2lfaW5wdXRfY29udHJvbF9jdHggKmN0cmxfY3R4OworCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4OworCWludCBtYXhfcGFja2V0X3NpemU7CisJaW50IGh3X21heF9wYWNrZXRfc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCW91dF9jdHggPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5vdXRfY3R4OworCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBvdXRfY3R4LCBlcF9pbmRleCk7CisJaHdfbWF4X3BhY2tldF9zaXplID0gTUFYX1BBQ0tFVF9ERUNPREVEKGVwX2N0eC0+ZXBfaW5mbzIpOworCW1heF9wYWNrZXRfc2l6ZSA9IHVyYi0+ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZTsKKwlpZiAoaHdfbWF4X3BhY2tldF9zaXplICE9IG1heF9wYWNrZXRfc2l6ZSkgeworCQl4aGNpX2RiZyh4aGNpLCAiTWF4IFBhY2tldCBTaXplIGZvciBlcCAwIGNoYW5nZWQuXG4iKTsKKwkJeGhjaV9kYmcoeGhjaSwgIk1heCBwYWNrZXQgc2l6ZSBpbiB1c2JfZGV2aWNlID0gJWRcbiIsCisJCQkJbWF4X3BhY2tldF9zaXplKTsKKwkJeGhjaV9kYmcoeGhjaSwgIk1heCBwYWNrZXQgc2l6ZSBpbiB4SENJIEhXID0gJWRcbiIsCisJCQkJaHdfbWF4X3BhY2tldF9zaXplKTsKKwkJeGhjaV9kYmcoeGhjaSwgIklzc3VpbmcgZXZhbHVhdGUgY29udGV4dCBjb21tYW5kLlxuIik7CisKKwkJLyogU2V0IHVwIHRoZSBtb2RpZmllZCBjb250cm9sIGVuZHBvaW50IDAgKi8KKwkJeGhjaV9lbmRwb2ludF9jb3B5KHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0tPmluX2N0eCwKKwkJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5vdXRfY3R4LCBlcF9pbmRleCk7CisJCWluX2N0eCA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmluX2N0eDsKKwkJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIGluX2N0eCwgZXBfaW5kZXgpOworCQllcF9jdHgtPmVwX2luZm8yICY9IH5NQVhfUEFDS0VUX01BU0s7CisJCWVwX2N0eC0+ZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVChtYXhfcGFja2V0X3NpemUpOworCisJCS8qIFNldCB1cCB0aGUgaW5wdXQgY29udGV4dCBmbGFncyBmb3IgdGhlIGNvbW1hbmQgKi8KKwkJLyogRklYTUU6IFRoaXMgd29uJ3Qgd29yayBpZiBhIG5vbi1kZWZhdWx0IGNvbnRyb2wgZW5kcG9pbnQKKwkJICogY2hhbmdlcyBtYXggcGFja2V0IHNpemVzLgorCQkgKi8KKwkJY3RybF9jdHggPSB4aGNpX2dldF9pbnB1dF9jb250cm9sX2N0eCh4aGNpLCBpbl9jdHgpOworCQljdHJsX2N0eC0+YWRkX2ZsYWdzID0gRVAwX0ZMQUc7CisJCWN0cmxfY3R4LT5kcm9wX2ZsYWdzID0gMDsKKworCQl4aGNpX2RiZyh4aGNpLCAiU2xvdCAlZCBpbnB1dCBjb250ZXh0XG4iLCBzbG90X2lkKTsKKwkJeGhjaV9kYmdfY3R4KHhoY2ksIGluX2N0eCwgZXBfaW5kZXgpOworCQl4aGNpX2RiZyh4aGNpLCAiU2xvdCAlZCBvdXRwdXQgY29udGV4dFxuIiwgc2xvdF9pZCk7CisJCXhoY2lfZGJnX2N0eCh4aGNpLCBvdXRfY3R4LCBlcF9pbmRleCk7CisKKwkJcmV0ID0geGhjaV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgdXJiLT5kZXYsIE5VTEwsCisJCQkJdHJ1ZSwgZmFsc2UpOworCisJCS8qIENsZWFuIHVwIHRoZSBpbnB1dCBjb250ZXh0IGZvciBsYXRlciB1c2UgYnkgYmFuZHdpZHRoCisJCSAqIGZ1bmN0aW9ucy4KKwkJICovCisJCWN0cmxfY3R4LT5hZGRfZmxhZ3MgPSBTTE9UX0ZMQUc7CisJfQorCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBub24tZXJyb3IgcmV0dXJucyBhcmUgYSBwcm9taXNlIHRvIGdpdmViYWNrKCkgdGhlIHVyYiBsYXRlcgogICogd2UgZHJvcCBvd25lcnNoaXAgc28gbmV4dCBvd25lciAob3IgdXJiIHVubGluaykgY2FuIGdldCBpdApAQCAtNjAwLDEzICs2ODcsMTMgQEAKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgZXBfaW5kZXg7CiAKKwogCWlmICghdXJiIHx8IHhoY2lfY2hlY2tfYXJncyhoY2QsIHVyYi0+ZGV2LCB1cmItPmVwLCB0cnVlLCBfX2Z1bmNfXykgPD0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzbG90X2lkID0gdXJiLT5kZXYtPnNsb3RfaWQ7CiAJZXBfaW5kZXggPSB4aGNpX2dldF9lbmRwb2ludF9pbmRleCgmdXJiLT5lcC0+ZGVzYyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCWlmICgheGhjaS0+ZGV2cyB8fCAheGhjaS0+ZGV2c1tzbG90X2lkXSkgewogCQlpZiAoIWluX2ludGVycnVwdCgpKQogCQkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJXQVJOOiB1cmIgc3VibWl0dGVkIGZvciBkZXYgd2l0aCBubyBTbG90IElEXG4iKTsKQEAgLTYxOSwxOSArNzA2LDM4IEBACiAJCXJldCA9IC1FU0hVVERPV047CiAJCWdvdG8gZXhpdDsKIAl9Ci0JaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJnVyYi0+ZXAtPmRlc2MpKQorCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZ1cmItPmVwLT5kZXNjKSkgeworCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIG1heCBwYWNrZXQgc2l6ZSBmb3IgdGhlIGRlZmF1bHQgY29udHJvbAorCQkgKiBlbmRwb2ludCBjaGFuZ2VkIGR1cmluZyBGUyBkZXZpY2UgZW51bWVyYXRpb24KKwkJICovCisJCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKKwkJCXJldCA9IHhoY2lfY2hlY2tfbWF4cGFja2V0KHhoY2ksIHNsb3RfaWQsCisJCQkJCWVwX2luZGV4LCB1cmIpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCS8qIFdlIGhhdmUgYSBzcGlubG9jayBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gd2UgbXVzdCBwYXNzCiAJCSAqIGF0b21pYyBjb250ZXh0IHRvIHRoaXMgZnVuY3Rpb24sIHdoaWNoIG1heSBhbGxvY2F0ZSBtZW1vcnkuCiAJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCQlyZXQgPSB4aGNpX3F1ZXVlX2N0cmxfdHgoeGhjaSwgR0ZQX0FUT01JQywgdXJiLAogCQkJCXNsb3RfaWQsIGVwX2luZGV4KTsKLQllbHNlIGlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKCZ1cmItPmVwLT5kZXNjKSkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmdXJiLT5lcC0+ZGVzYykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAkJcmV0ID0geGhjaV9xdWV1ZV9idWxrX3R4KHhoY2ksIEdGUF9BVE9NSUMsIHVyYiwKIAkJCQlzbG90X2lkLCBlcF9pbmRleCk7Ci0JZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJnVyYi0+ZXAtPmRlc2MpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IHhoY2lfcXVldWVfaW50cl90eCh4aGNpLCBHRlBfQVRPTUlDLCB1cmIsCisJCQkJc2xvdF9pZCwgZXBfaW5kZXgpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKIAkJcmV0ID0gLUVJTlZBTDsKKwl9CiBleGl0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NzQsNiArNzgwLDcgQEAKIAlzdHJ1Y3QgeGhjaV90ZCAqdGQ7CiAJdW5zaWduZWQgaW50IGVwX2luZGV4OwogCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJc3RydWN0IHhoY2lfdmlydF9lcCAqZXA7CiAKIAl4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtNjg2LDE3ICs3OTMsMTggQEAKIAl4aGNpX2RiZyh4aGNpLCAiRXZlbnQgcmluZzpcbiIpOwogCXhoY2lfZGVidWdfcmluZyh4aGNpLCB4aGNpLT5ldmVudF9yaW5nKTsKIAllcF9pbmRleCA9IHhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KCZ1cmItPmVwLT5kZXNjKTsKLQllcF9yaW5nID0geGhjaS0+ZGV2c1t1cmItPmRldi0+c2xvdF9pZF0tPmVwX3JpbmdzW2VwX2luZGV4XTsKKwllcCA9ICZ4aGNpLT5kZXZzW3VyYi0+ZGV2LT5zbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKKwllcF9yaW5nID0gZXAtPnJpbmc7CiAJeGhjaV9kYmcoeGhjaSwgIkVuZHBvaW50IHJpbmc6XG4iKTsKIAl4aGNpX2RlYnVnX3JpbmcoeGhjaSwgZXBfcmluZyk7CiAJdGQgPSAoc3RydWN0IHhoY2lfdGQgKikgdXJiLT5oY3ByaXY7CiAKLQllcF9yaW5nLT5jYW5jZWxzX3BlbmRpbmcrKzsKLQlsaXN0X2FkZF90YWlsKCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QsICZlcF9yaW5nLT5jYW5jZWxsZWRfdGRfbGlzdCk7CisJZXAtPmNhbmNlbHNfcGVuZGluZysrOworCWxpc3RfYWRkX3RhaWwoJnRkLT5jYW5jZWxsZWRfdGRfbGlzdCwgJmVwLT5jYW5jZWxsZWRfdGRfbGlzdCk7CiAJLyogUXVldWUgYSBzdG9wIGVuZHBvaW50IGNvbW1hbmQsIGJ1dCBvbmx5IGlmIHRoaXMgaXMKIAkgKiB0aGUgZmlyc3QgY2FuY2VsbGF0aW9uIHRvIGJlIGhhbmRsZWQuCiAJICovCi0JaWYgKGVwX3JpbmctPmNhbmNlbHNfcGVuZGluZyA9PSAxKSB7CisJaWYgKGVwLT5jYW5jZWxzX3BlbmRpbmcgPT0gMSkgewogCQl4aGNpX3F1ZXVlX3N0b3BfZW5kcG9pbnQoeGhjaSwgdXJiLT5kZXYtPnNsb3RfaWQsIGVwX2luZGV4KTsKIAkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKIAl9CkBAIC05MzAsNiArMTAzOCwxNDEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgeGhjaV9jb25maWd1cmVfZW5kcG9pbnRfcmVzdWx0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCAqY21kX3N0YXR1cykKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoICgqY21kX3N0YXR1cykgeworCWNhc2UgQ09NUF9FTk9NRU06CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJOb3QgZW5vdWdoIGhvc3QgY29udHJvbGxlciByZXNvdXJjZXMgIgorCQkJCSJmb3IgbmV3IGRldmljZSBzdGF0ZS5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQkvKiBGSVhNRTogY2FuIHdlIGFsbG9jYXRlIG1vcmUgcmVzb3VyY2VzIGZvciB0aGUgSEM/ICovCisJCWJyZWFrOworCWNhc2UgQ09NUF9CV19FUlI6CisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJOb3QgZW5vdWdoIGJhbmR3aWR0aCAiCisJCQkJImZvciBuZXcgZGV2aWNlIHN0YXRlLlxuIik7CisJCXJldCA9IC1FTk9TUEM7CisJCS8qIEZJWE1FOiBjYW4gd2UgZ28gYmFjayB0byB0aGUgb2xkIHN0YXRlPyAqLworCQlicmVhazsKKwljYXNlIENPTVBfVFJCX0VSUjoKKwkJLyogdGhlIEhDRCBzZXQgdXAgc29tZXRoaW5nIHdyb25nICovCisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJFUlJPUjogRW5kcG9pbnQgZHJvcCBmbGFnID0gMCwgIgorCQkJCSJhZGQgZmxhZyA9IDEsICIKKwkJCQkiYW5kIGVuZHBvaW50IGlzIG5vdCBkaXNhYmxlZC5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIENPTVBfU1VDQ0VTUzoKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiU3VjY2Vzc2Z1bCBFbmRwb2ludCBDb25maWd1cmUgY29tbWFuZFxuIik7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXhoY2lfZXJyKHhoY2ksICJFUlJPUjogdW5leHBlY3RlZCBjb21tYW5kIGNvbXBsZXRpb24gIgorCQkJCSJjb2RlIDB4JXguXG4iLCAqY21kX3N0YXR1cyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhoY2lfZXZhbHVhdGVfY29udGV4dF9yZXN1bHQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50ICpjbWRfc3RhdHVzKQoreworCWludCByZXQ7CisJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2ID0geGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXTsKKworCXN3aXRjaCAoKmNtZF9zdGF0dXMpIHsKKwljYXNlIENPTVBfRUlOVkFMOgorCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiV0FSTjogeEhDSSBkcml2ZXIgc2V0dXAgaW52YWxpZCBldmFsdWF0ZSAiCisJCQkJImNvbnRleHQgY29tbWFuZC5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIENPTVBfRUJBRFNMVDoKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIldBUk46IHNsb3Qgbm90IGVuYWJsZWQgZm9yIgorCQkJCSJldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmQuXG4iKTsKKwljYXNlIENPTVBfQ1RYX1NUQVRFOgorCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiV0FSTjogaW52YWxpZCBjb250ZXh0IHN0YXRlIGZvciAiCisJCQkJImV2YWx1YXRlIGNvbnRleHQgY29tbWFuZC5cbiIpOworCQl4aGNpX2RiZ19jdHgoeGhjaSwgdmlydF9kZXYtPm91dF9jdHgsIDEpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIENPTVBfU1VDQ0VTUzoKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiU3VjY2Vzc2Z1bCBldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmRcbiIpOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl4aGNpX2Vycih4aGNpLCAiRVJST1I6IHVuZXhwZWN0ZWQgY29tbWFuZCBjb21wbGV0aW9uICIKKwkJCQkiY29kZSAweCV4LlxuIiwgKmNtZF9zdGF0dXMpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogSXNzdWUgYSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCBvciBldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmQKKyAqIGFuZCB3YWl0IGZvciBpdCB0byBmaW5pc2guCisgKi8KK3N0YXRpYyBpbnQgeGhjaV9jb25maWd1cmVfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZCwKKwkJYm9vbCBjdHhfY2hhbmdlLCBib29sIG11c3Rfc3VjY2VlZCkKK3sKKwlpbnQgcmV0OworCWludCB0aW1lbGVmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmluX2N0eDsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqY21kX2NvbXBsZXRpb247CisJaW50ICpjbWRfc3RhdHVzOworCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdOworCWlmIChjb21tYW5kKSB7CisJCWluX2N0eCA9IGNvbW1hbmQtPmluX2N0eDsKKwkJY21kX2NvbXBsZXRpb24gPSBjb21tYW5kLT5jb21wbGV0aW9uOworCQljbWRfc3RhdHVzID0gJmNvbW1hbmQtPnN0YXR1czsKKwkJY29tbWFuZC0+Y29tbWFuZF90cmIgPSB4aGNpLT5jbWRfcmluZy0+ZW5xdWV1ZTsKKwkJbGlzdF9hZGRfdGFpbCgmY29tbWFuZC0+Y21kX2xpc3QsICZ2aXJ0X2Rldi0+Y21kX2xpc3QpOworCX0gZWxzZSB7CisJCWluX2N0eCA9IHZpcnRfZGV2LT5pbl9jdHg7CisJCWNtZF9jb21wbGV0aW9uID0gJnZpcnRfZGV2LT5jbWRfY29tcGxldGlvbjsKKwkJY21kX3N0YXR1cyA9ICZ2aXJ0X2Rldi0+Y21kX3N0YXR1czsKKwl9CisKKwlpZiAoIWN0eF9jaGFuZ2UpCisJCXJldCA9IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHhoY2ksIGluX2N0eC0+ZG1hLAorCQkJCXVkZXYtPnNsb3RfaWQsIG11c3Rfc3VjY2VlZCk7CisJZWxzZQorCQlyZXQgPSB4aGNpX3F1ZXVlX2V2YWx1YXRlX2NvbnRleHQoeGhjaSwgaW5fY3R4LT5kbWEsCisJCQkJdWRldi0+c2xvdF9pZCk7CisJaWYgKHJldCA8IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQl4aGNpX2RiZyh4aGNpLCAiRklYTUUgYWxsb2NhdGUgYSBuZXcgcmluZyBzZWdtZW50XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCisJLyogV2FpdCBmb3IgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCWNtZF9jb21wbGV0aW9uLAorCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCWlmICh0aW1lbGVmdCA8PSAwKSB7CisJCXhoY2lfd2Fybih4aGNpLCAiJXMgd2hpbGUgd2FpdGluZyBmb3IgJXMgY29tbWFuZFxuIiwKKwkJCQl0aW1lbGVmdCA9PSAwID8gIlRpbWVvdXQiIDogIlNpZ25hbCIsCisJCQkJY3R4X2NoYW5nZSA9PSAwID8KKwkJCQkJImNvbmZpZ3VyZSBlbmRwb2ludCIgOgorCQkJCQkiZXZhbHVhdGUgY29udGV4dCIpOworCQkvKiBGSVhNRSBjYW5jZWwgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kICovCisJCXJldHVybiAtRVRJTUU7CisJfQorCisJaWYgKCFjdHhfY2hhbmdlKQorCQlyZXR1cm4geGhjaV9jb25maWd1cmVfZW5kcG9pbnRfcmVzdWx0KHhoY2ksIHVkZXYsIGNtZF9zdGF0dXMpOworCXJldHVybiB4aGNpX2V2YWx1YXRlX2NvbnRleHRfcmVzdWx0KHhoY2ksIHVkZXYsIGNtZF9zdGF0dXMpOworfQorCiAvKiBDYWxsZWQgYWZ0ZXIgb25lIG9yIG1vcmUgY2FsbHMgdG8geGhjaV9hZGRfZW5kcG9pbnQoKSBvcgogICogeGhjaV9kcm9wX2VuZHBvaW50KCkuICBJZiB0aGlzIGNhbGwgZmFpbHMsIHRoZSBVU0IgY29yZSBpcyBleHBlY3RlZAogICogdG8gY2FsbCB4aGNpX3Jlc2V0X2JhbmR3aWR0aCgpLgpAQCAtOTQ0LDggKzExODcsNiBAQAogewogCWludCBpOwogCWludCByZXQgPSAwOwotCWludCB0aW1lbGVmdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB4aGNpX2hjZCAqeGhjaTsKIAlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZQkqdmlydF9kZXY7CiAJc3RydWN0IHhoY2lfaW5wdXRfY29udHJvbF9jdHggKmN0cmxfY3R4OwpAQCAtOTc1LDU2ICsxMjE2LDggQEAKIAl4aGNpX2RiZ19jdHgoeGhjaSwgdmlydF9kZXYtPmluX2N0eCwKIAkJCUxBU1RfQ1RYX1RPX0VQX05VTShzbG90X2N0eC0+ZGV2X2luZm8pKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0geGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgdmlydF9kZXYtPmluX2N0eC0+ZG1hLAotCQkJdWRldi0+c2xvdF9pZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCQl4aGNpX2RiZyh4aGNpLCAiRklYTUUgYWxsb2NhdGUgYSBuZXcgcmluZyBzZWdtZW50XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCi0JLyogV2FpdCBmb3IgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0JdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCSZ2aXJ0X2Rldi0+Y21kX2NvbXBsZXRpb24sCi0JCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7Ci0JaWYgKHRpbWVsZWZ0IDw9IDApIHsKLQkJeGhjaV93YXJuKHhoY2ksICIlcyB3aGlsZSB3YWl0aW5nIGZvciBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZFxuIiwKLQkJCQl0aW1lbGVmdCA9PSAwID8gIlRpbWVvdXQiIDogIlNpZ25hbCIpOwotCQkvKiBGSVhNRSBjYW5jZWwgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kICovCi0JCXJldHVybiAtRVRJTUU7Ci0JfQotCi0Jc3dpdGNoICh2aXJ0X2Rldi0+Y21kX3N0YXR1cykgewotCWNhc2UgQ09NUF9FTk9NRU06Ci0JCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJOb3QgZW5vdWdoIGhvc3QgY29udHJvbGxlciByZXNvdXJjZXMgIgotCQkJCSJmb3IgbmV3IGRldmljZSBzdGF0ZS5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQkvKiBGSVhNRTogY2FuIHdlIGFsbG9jYXRlIG1vcmUgcmVzb3VyY2VzIGZvciB0aGUgSEM/ICovCi0JCWJyZWFrOwotCWNhc2UgQ09NUF9CV19FUlI6Ci0JCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJOb3QgZW5vdWdoIGJhbmR3aWR0aCAiCi0JCQkJImZvciBuZXcgZGV2aWNlIHN0YXRlLlxuIik7Ci0JCXJldCA9IC1FTk9TUEM7Ci0JCS8qIEZJWE1FOiBjYW4gd2UgZ28gYmFjayB0byB0aGUgb2xkIHN0YXRlPyAqLwotCQlicmVhazsKLQljYXNlIENPTVBfVFJCX0VSUjoKLQkJLyogdGhlIEhDRCBzZXQgdXAgc29tZXRoaW5nIHdyb25nICovCi0JCWRldl93YXJuKCZ1ZGV2LT5kZXYsICJFUlJPUjogRW5kcG9pbnQgZHJvcCBmbGFnID0gMCwgYWRkIGZsYWcgPSAxLCAiCi0JCQkJImFuZCBlbmRwb2ludCBpcyBub3QgZGlzYWJsZWQuXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBDT01QX1NVQ0NFU1M6Ci0JCWRldl9kYmcoJnVkZXYtPmRldiwgIlN1Y2Nlc3NmdWwgRW5kcG9pbnQgQ29uZmlndXJlIGNvbW1hbmRcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl4aGNpX2Vycih4aGNpLCAiRVJST1I6IHVuZXhwZWN0ZWQgY29tbWFuZCBjb21wbGV0aW9uICIKLQkJCQkiY29kZSAweCV4LlxuIiwgdmlydF9kZXYtPmNtZF9zdGF0dXMpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9CisJcmV0ID0geGhjaV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgdWRldiwgTlVMTCwKKwkJCWZhbHNlLCBmYWxzZSk7CiAJaWYgKHJldCkgewogCQkvKiBDYWxsZWUgc2hvdWxkIGNhbGwgcmVzZXRfYmFuZHdpZHRoKCkgKi8KIAkJcmV0dXJuIHJldDsKQEAgLTEwMzcsMTAgKzEyMzAsMTAgQEAKIAl4aGNpX3plcm9faW5fY3R4KHhoY2ksIHZpcnRfZGV2KTsKIAkvKiBGcmVlIGFueSBvbGQgcmluZ3MgKi8KIAlmb3IgKGkgPSAxOyBpIDwgMzE7ICsraSkgewotCQlpZiAodmlydF9kZXYtPm5ld19lcF9yaW5nc1tpXSkgewotCQkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgdmlydF9kZXYtPmVwX3JpbmdzW2ldKTsKLQkJCXZpcnRfZGV2LT5lcF9yaW5nc1tpXSA9IHZpcnRfZGV2LT5uZXdfZXBfcmluZ3NbaV07Ci0JCQl2aXJ0X2Rldi0+bmV3X2VwX3JpbmdzW2ldID0gTlVMTDsKKwkJaWYgKHZpcnRfZGV2LT5lcHNbaV0ubmV3X3JpbmcpIHsKKwkJCXhoY2lfcmluZ19mcmVlKHhoY2ksIHZpcnRfZGV2LT5lcHNbaV0ucmluZyk7CisJCQl2aXJ0X2Rldi0+ZXBzW2ldLnJpbmcgPSB2aXJ0X2Rldi0+ZXBzW2ldLm5ld19yaW5nOworCQkJdmlydF9kZXYtPmVwc1tpXS5uZXdfcmluZyA9IE5VTEw7CiAJCX0KIAl9CiAKQEAgLTEwNjcsMTQgKzEyNjAsOTMgQEAKIAl2aXJ0X2RldiA9IHhoY2ktPmRldnNbdWRldi0+c2xvdF9pZF07CiAJLyogRnJlZSBhbnkgcmluZ3MgYWxsb2NhdGVkIGZvciBhZGRlZCBlbmRwb2ludHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzE7ICsraSkgewotCQlpZiAodmlydF9kZXYtPm5ld19lcF9yaW5nc1tpXSkgewotCQkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgdmlydF9kZXYtPm5ld19lcF9yaW5nc1tpXSk7Ci0JCQl2aXJ0X2Rldi0+bmV3X2VwX3JpbmdzW2ldID0gTlVMTDsKKwkJaWYgKHZpcnRfZGV2LT5lcHNbaV0ubmV3X3JpbmcpIHsKKwkJCXhoY2lfcmluZ19mcmVlKHhoY2ksIHZpcnRfZGV2LT5lcHNbaV0ubmV3X3JpbmcpOworCQkJdmlydF9kZXYtPmVwc1tpXS5uZXdfcmluZyA9IE5VTEw7CiAJCX0KIAl9CiAJeGhjaV96ZXJvX2luX2N0eCh4aGNpLCB2aXJ0X2Rldik7CiB9CiAKK3N0YXRpYyB2b2lkIHhoY2lfc2V0dXBfaW5wdXRfY3R4X2Zvcl9jb25maWdfZXAoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICppbl9jdHgsCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKm91dF9jdHgsCisJCXUzMiBhZGRfZmxhZ3MsIHUzMiBkcm9wX2ZsYWdzKQoreworCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKKwljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksIGluX2N0eCk7CisJY3RybF9jdHgtPmFkZF9mbGFncyA9IGFkZF9mbGFnczsKKwljdHJsX2N0eC0+ZHJvcF9mbGFncyA9IGRyb3BfZmxhZ3M7CisJeGhjaV9zbG90X2NvcHkoeGhjaSwgaW5fY3R4LCBvdXRfY3R4KTsKKwljdHJsX2N0eC0+YWRkX2ZsYWdzIHw9IFNMT1RfRkxBRzsKKworCXhoY2lfZGJnKHhoY2ksICJJbnB1dCBDb250ZXh0OlxuIik7CisJeGhjaV9kYmdfY3R4KHhoY2ksIGluX2N0eCwgeGhjaV9sYXN0X3ZhbGlkX2VuZHBvaW50KGFkZF9mbGFncykpOworfQorCit2b2lkIHhoY2lfc2V0dXBfaW5wdXRfY3R4X2Zvcl9xdWlyayhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCisJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICppbl9jdHg7CisJc3RydWN0IHhoY2lfZXBfY3R4ICplcF9jdHg7CisJdTMyIGFkZGVkX2N0eHM7CisJZG1hX2FkZHJfdCBhZGRyOworCisJeGhjaV9lbmRwb2ludF9jb3B5KHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0tPmluX2N0eCwKKwkJCXhoY2ktPmRldnNbc2xvdF9pZF0tPm91dF9jdHgsIGVwX2luZGV4KTsKKwlpbl9jdHggPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHg7CisJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIGluX2N0eCwgZXBfaW5kZXgpOworCWFkZHIgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShkZXFfc3RhdGUtPm5ld19kZXFfc2VnLAorCQkJZGVxX3N0YXRlLT5uZXdfZGVxX3B0cik7CisJaWYgKGFkZHIgPT0gMCkgeworCQl4aGNpX3dhcm4oeGhjaSwgIldBUk4gQ2Fubm90IHN1Ym1pdCBjb25maWcgZXAgYWZ0ZXIgIgorCQkJCSJyZXNldCBlcCBjb21tYW5kXG4iKTsKKwkJeGhjaV93YXJuKHhoY2ksICJXQVJOIGRlcSBzZWcgPSAlcCwgZGVxIHB0ciA9ICVwXG4iLAorCQkJCWRlcV9zdGF0ZS0+bmV3X2RlcV9zZWcsCisJCQkJZGVxX3N0YXRlLT5uZXdfZGVxX3B0cik7CisJCXJldHVybjsKKwl9CisJZXBfY3R4LT5kZXEgPSBhZGRyIHwgZGVxX3N0YXRlLT5uZXdfY3ljbGVfc3RhdGU7CisKKwlhZGRlZF9jdHhzID0geGhjaV9nZXRfZW5kcG9pbnRfZmxhZ19mcm9tX2luZGV4KGVwX2luZGV4KTsKKwl4aGNpX3NldHVwX2lucHV0X2N0eF9mb3JfY29uZmlnX2VwKHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0tPmluX2N0eCwKKwkJCXhoY2ktPmRldnNbc2xvdF9pZF0tPm91dF9jdHgsIGFkZGVkX2N0eHMsIGFkZGVkX2N0eHMpOworfQorCit2b2lkIHhoY2lfY2xlYW51cF9zdGFsbGVkX3Jpbmcoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdW5zaWduZWQgaW50IGVwX2luZGV4KQoreworCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgZGVxX3N0YXRlOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOworCisJeGhjaV9kYmcoeGhjaSwgIkNsZWFuaW5nIHVwIHN0YWxsZWQgZW5kcG9pbnQgcmluZ1xuIik7CisJZXAgPSAmeGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKKwkvKiBXZSBuZWVkIHRvIG1vdmUgdGhlIEhXJ3MgZGVxdWV1ZSBwb2ludGVyIHBhc3QgdGhpcyBURCwKKwkgKiBvciBpdCB3aWxsIGF0dGVtcHQgdG8gcmVzZW5kIGl0IG9uIHRoZSBuZXh0IGRvb3JiZWxsIHJpbmcuCisJICovCisJeGhjaV9maW5kX25ld19kZXF1ZXVlX3N0YXRlKHhoY2ksIHVkZXYtPnNsb3RfaWQsCisJCQllcF9pbmRleCwgZXAtPnN0b3BwZWRfdGQsCisJCQkmZGVxX3N0YXRlKTsKKworCS8qIEhXIHdpdGggdGhlIHJlc2V0IGVuZHBvaW50IHF1aXJrIHdpbGwgdXNlIHRoZSBzYXZlZCBkZXF1ZXVlIHN0YXRlIHRvCisJICogaXNzdWUgYSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCBsYXRlci4KKwkgKi8KKwlpZiAoISh4aGNpLT5xdWlya3MgJiBYSENJX1JFU0VUX0VQX1FVSVJLKSkgeworCQl4aGNpX2RiZyh4aGNpLCAiUXVldWVpbmcgbmV3IGRlcXVldWUgc3RhdGVcbiIpOworCQl4aGNpX3F1ZXVlX25ld19kZXF1ZXVlX3N0YXRlKHhoY2ksIHVkZXYtPnNsb3RfaWQsCisJCQkJZXBfaW5kZXgsICZkZXFfc3RhdGUpOworCX0gZWxzZSB7CisJCS8qIEJldHRlciBob3BlIG5vIG9uZSB1c2VzIHRoZSBpbnB1dCBjb250ZXh0IGJldHdlZW4gbm93IGFuZCB0aGUKKwkJICogcmVzZXQgZW5kcG9pbnQgY29tcGxldGlvbiEKKwkJICovCisJCXhoY2lfZGJnKHhoY2ksICJTZXR0aW5nIHVwIGlucHV0IGNvbnRleHQgZm9yICIKKwkJCQkiY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmRcbiIpOworCQl4aGNpX3NldHVwX2lucHV0X2N0eF9mb3JfcXVpcmsoeGhjaSwgdWRldi0+c2xvdF9pZCwKKwkJCQllcF9pbmRleCwgJmRlcV9zdGF0ZSk7CisJfQorfQorCiAvKiBEZWFsIHdpdGggc3RhbGxlZCBlbmRwb2ludHMuICBUaGUgY29yZSBzaG91bGQgaGF2ZSBzZW50IHRoZSBjb250cm9sIG1lc3NhZ2UKICAqIHRvIGNsZWFyIHRoZSBoYWx0IGNvbmRpdGlvbi4gIEhvd2V2ZXIsIHdlIG5lZWQgdG8gbWFrZSB0aGUgeEhDSSBoYXJkd2FyZQogICogcmVzZXQgaXRzIHNlcXVlbmNlIG51bWJlciwgc2luY2UgYSBkZXZpY2Ugd2lsbCBleHBlY3QgYSBzZXF1ZW5jZSBudW1iZXIgb2YKQEAgLTEwODksOCArMTM2MSw3IEBACiAJdW5zaWduZWQgaW50IGVwX2luZGV4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKLQlzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlIGRlcV9zdGF0ZTsKLQlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKnZpcnRfZXA7CiAKIAl4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAl1ZGV2ID0gKHN0cnVjdCB1c2JfZGV2aWNlICopIGVwLT5oY3ByaXY7CkBAIC0xMTAwLDEyICsxMzcxLDE2IEBACiAJaWYgKCFlcC0+aGNwcml2KQogCQlyZXR1cm47CiAJZXBfaW5kZXggPSB4aGNpX2dldF9lbmRwb2ludF9pbmRleCgmZXAtPmRlc2MpOwotCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdLT5lcF9yaW5nc1tlcF9pbmRleF07Ci0JaWYgKCFlcF9yaW5nLT5zdG9wcGVkX3RkKSB7CisJdmlydF9lcCA9ICZ4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOworCWlmICghdmlydF9lcC0+c3RvcHBlZF90ZCkgewogCQl4aGNpX2RiZyh4aGNpLCAiRW5kcG9pbnQgMHgleCBub3QgaGFsdGVkLCByZWZ1c2luZyB0byByZXNldC5cbiIsCiAJCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJmVwLT5kZXNjKSkgeworCQl4aGNpX2RiZyh4aGNpLCAiQ29udHJvbCBlbmRwb2ludCBzdGFsbCBhbHJlYWR5IGhhbmRsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KIAogCXhoY2lfZGJnKHhoY2ksICJRdWV1ZWluZyByZXNldCBlbmRwb2ludCBjb21tYW5kXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTExNiwxNyArMTM5MSw4IEBACiAJICogY29tbWFuZC4gIEJldHRlciBob3BlIHRoYXQgbGFzdCBjb21tYW5kIHdvcmtlZCEKIAkgKi8KIAlpZiAoIXJldCkgewotCQl4aGNpX2RiZyh4aGNpLCAiQ2xlYW5pbmcgdXAgc3RhbGxlZCBlbmRwb2ludCByaW5nXG4iKTsKLQkJLyogV2UgbmVlZCB0byBtb3ZlIHRoZSBIVydzIGRlcXVldWUgcG9pbnRlciBwYXN0IHRoaXMgVEQsCi0JCSAqIG9yIGl0IHdpbGwgYXR0ZW1wdCB0byByZXNlbmQgaXQgb24gdGhlIG5leHQgZG9vcmJlbGwgcmluZy4KLQkJICovCi0JCXhoY2lfZmluZF9uZXdfZGVxdWV1ZV9zdGF0ZSh4aGNpLCB1ZGV2LT5zbG90X2lkLAotCQkJCWVwX2luZGV4LCBlcF9yaW5nLT5zdG9wcGVkX3RkLCAmZGVxX3N0YXRlKTsKLQkJeGhjaV9kYmcoeGhjaSwgIlF1ZXVlaW5nIG5ldyBkZXF1ZXVlIHN0YXRlXG4iKTsKLQkJeGhjaV9xdWV1ZV9uZXdfZGVxdWV1ZV9zdGF0ZSh4aGNpLCBlcF9yaW5nLAotCQkJCXVkZXYtPnNsb3RfaWQsCi0JCQkJZXBfaW5kZXgsICZkZXFfc3RhdGUpOwotCQlrZnJlZShlcF9yaW5nLT5zdG9wcGVkX3RkKTsKKwkJeGhjaV9jbGVhbnVwX3N0YWxsZWRfcmluZyh4aGNpLCB1ZGV2LCBlcF9pbmRleCk7CisJCWtmcmVlKHZpcnRfZXAtPnN0b3BwZWRfdGQpOwogCQl4aGNpX3JpbmdfY21kX2RiKHhoY2kpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CkBAIC0xMzI4LDYgKzE1OTQsODggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogT25jZSBhIGh1YiBkZXNjcmlwdG9yIGlzIGZldGNoZWQgZm9yIGEgZGV2aWNlLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgeEhDJ3MKKyAqIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGRldmljZS4KKyAqLworaW50IHhoY2lfdXBkYXRlX2h1Yl9kZXZpY2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCisJCQlzdHJ1Y3QgdXNiX3R0ICp0dCwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZkZXY7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29uZmlnX2NtZDsKKwlzdHJ1Y3QgeGhjaV9pbnB1dF9jb250cm9sX2N0eCAqY3RybF9jdHg7CisJc3RydWN0IHhoY2lfc2xvdF9jdHggKnNsb3RfY3R4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgdGhpbmtfdGltZTsKKwlpbnQgcmV0OworCisJLyogSWdub3JlIHJvb3QgaHVicyAqLworCWlmICghaGRldi0+cGFyZW50KQorCQlyZXR1cm4gMDsKKworCXZkZXYgPSB4aGNpLT5kZXZzW2hkZXYtPnNsb3RfaWRdOworCWlmICghdmRldikgeworCQl4aGNpX3dhcm4oeGhjaSwgIkNhbm5vdCB1cGRhdGUgaHViIGRlc2MgZm9yIHVua25vd24gZGV2aWNlLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljb25maWdfY21kID0geGhjaV9hbGxvY19jb21tYW5kKHhoY2ksIHRydWUsIG1lbV9mbGFncyk7CisJaWYgKCFjb25maWdfY21kKSB7CisJCXhoY2lfZGJnKHhoY2ksICJDb3VsZCBub3QgYWxsb2NhdGUgeEhDSSBjb21tYW5kIHN0cnVjdHVyZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCXhoY2lfc2xvdF9jb3B5KHhoY2ksIGNvbmZpZ19jbWQtPmluX2N0eCwgdmRldi0+b3V0X2N0eCk7CisJY3RybF9jdHggPSB4aGNpX2dldF9pbnB1dF9jb250cm9sX2N0eCh4aGNpLCBjb25maWdfY21kLT5pbl9jdHgpOworCWN0cmxfY3R4LT5hZGRfZmxhZ3MgfD0gU0xPVF9GTEFHOworCXNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgY29uZmlnX2NtZC0+aW5fY3R4KTsKKwlzbG90X2N0eC0+ZGV2X2luZm8gfD0gREVWX0hVQjsKKwlpZiAodHQtPm11bHRpKQorCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gREVWX01UVDsKKwlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPiAweDk1KSB7CisJCXhoY2lfZGJnKHhoY2ksICJ4SENJIHZlcnNpb24gJXggbmVlZHMgaHViICIKKwkJCQkiVFQgdGhpbmsgdGltZSBhbmQgbnVtYmVyIG9mIHBvcnRzXG4iLAorCQkJCSh1bnNpZ25lZCBpbnQpIHhoY2ktPmhjaV92ZXJzaW9uKTsKKwkJc2xvdF9jdHgtPmRldl9pbmZvMiB8PSBYSENJX01BWF9QT1JUUyhoZGV2LT5tYXhjaGlsZCk7CisJCS8qIFNldCBUVCB0aGluayB0aW1lIC0gY29udmVydCBmcm9tIG5zIHRvIEZTIGJpdCB0aW1lcy4KKwkJICogMCA9IDggRlMgYml0IHRpbWVzLCAxID0gMTYgRlMgYml0IHRpbWVzLAorCQkgKiAyID0gMjQgRlMgYml0IHRpbWVzLCAzID0gMzIgRlMgYml0IHRpbWVzLgorCQkgKi8KKwkJdGhpbmtfdGltZSA9IHR0LT50aGlua190aW1lOworCQlpZiAodGhpbmtfdGltZSAhPSAwKQorCQkJdGhpbmtfdGltZSA9ICh0aGlua190aW1lIC8gNjY2KSAtIDE7CisJCXNsb3RfY3R4LT50dF9pbmZvIHw9IFRUX1RISU5LX1RJTUUodGhpbmtfdGltZSk7CisJfSBlbHNlIHsKKwkJeGhjaV9kYmcoeGhjaSwgInhIQ0kgdmVyc2lvbiAleCBkb2Vzbid0IG5lZWQgaHViICIKKwkJCQkiVFQgdGhpbmsgdGltZSBvciBudW1iZXIgb2YgcG9ydHNcbiIsCisJCQkJKHVuc2lnbmVkIGludCkgeGhjaS0+aGNpX3ZlcnNpb24pOworCX0KKwlzbG90X2N0eC0+ZGV2X3N0YXRlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisKKwl4aGNpX2RiZyh4aGNpLCAiU2V0IHVwICVzIGZvciBodWIgZGV2aWNlLlxuIiwKKwkJCSh4aGNpLT5oY2lfdmVyc2lvbiA+IDB4OTUpID8KKwkJCSJjb25maWd1cmUgZW5kcG9pbnQiIDogImV2YWx1YXRlIGNvbnRleHQiKTsKKwl4aGNpX2RiZyh4aGNpLCAiU2xvdCAldSBJbnB1dCBDb250ZXh0OlxuIiwgaGRldi0+c2xvdF9pZCk7CisJeGhjaV9kYmdfY3R4KHhoY2ksIGNvbmZpZ19jbWQtPmluX2N0eCwgMCk7CisKKwkvKiBJc3N1ZSBhbmQgd2FpdCBmb3IgdGhlIGNvbmZpZ3VyZSBlbmRwb2ludCBvcgorCSAqIGV2YWx1YXRlIGNvbnRleHQgY29tbWFuZC4KKwkgKi8KKwlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPiAweDk1KQorCQlyZXQgPSB4aGNpX2NvbmZpZ3VyZV9lbmRwb2ludCh4aGNpLCBoZGV2LCBjb25maWdfY21kLAorCQkJCWZhbHNlLCBmYWxzZSk7CisJZWxzZQorCQlyZXQgPSB4aGNpX2NvbmZpZ3VyZV9lbmRwb2ludCh4aGNpLCBoZGV2LCBjb25maWdfY21kLAorCQkJCXRydWUsIGZhbHNlKTsKKworCXhoY2lfZGJnKHhoY2ksICJTbG90ICV1IE91dHB1dCBDb250ZXh0OlxuIiwgaGRldi0+c2xvdF9pZCk7CisJeGhjaV9kYmdfY3R4KHhoY2ksIHZkZXYtPm91dF9jdHgsIDApOworCisJeGhjaV9mcmVlX2NvbW1hbmQoeGhjaSwgY29uZmlnX2NtZCk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IHhoY2lfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCBlNmI5YTFjLi4xZGI0ZmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC05NCw2ICs5NCw5IEBACiAJCXZhbCA9IHByZXYtPnRyYnNbVFJCU19QRVJfU0VHTUVOVC0xXS5saW5rLmNvbnRyb2w7CiAJCXZhbCAmPSB+VFJCX1RZUEVfQklUTUFTSzsKIAkJdmFsIHw9IFRSQl9UWVBFKFRSQl9MSU5LKTsKKwkJLyogQWx3YXlzIHNldCB0aGUgY2hhaW4gYml0IHdpdGggMC45NSBoYXJkd2FyZSAqLworCQlpZiAoeGhjaV9saW5rX3RyYl9xdWlyayh4aGNpKSkKKwkJCXZhbCB8PSBUUkJfQ0hBSU47CiAJCXByZXYtPnRyYnNbVFJCU19QRVJfU0VHTUVOVC0xXS5saW5rLmNvbnRyb2wgPSB2YWw7CiAJfQogCXhoY2lfZGJnKHhoY2ksICJMaW5raW5nIHNlZ21lbnQgMHglbGx4IHRvIHNlZ21lbnQgMHglbGx4IChETUEpXG4iLApAQCAtMTQxLDcgKzE0NCw2IEBACiAJCXJldHVybiAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJnJpbmctPnRkX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5jYW5jZWxsZWRfdGRfbGlzdCk7CiAJaWYgKG51bV9zZWdzID09IDApCiAJCXJldHVybiByaW5nOwogCkBAIC0yNjIsOCArMjY0LDggQEAKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IDMxOyArK2kpCi0JCWlmIChkZXYtPmVwX3JpbmdzW2ldKQotCQkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgZGV2LT5lcF9yaW5nc1tpXSk7CisJCWlmIChkZXYtPmVwc1tpXS5yaW5nKQorCQkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgZGV2LT5lcHNbaV0ucmluZyk7CiAKIAlpZiAoZGV2LT5pbl9jdHgpCiAJCXhoY2lfZnJlZV9jb250YWluZXJfY3R4KHhoY2ksIGRldi0+aW5fY3R4KTsKQEAgLTI3OCw2ICsyODAsNyBAQAogCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKmRldjsKKwlpbnQgaTsKIAogCS8qIFNsb3QgSUQgMCBpcyByZXNlcnZlZCAqLwogCWlmIChzbG90X2lkID09IDAgfHwgeGhjaS0+ZGV2c1tzbG90X2lkXSkgewpAQCAtMzA2LDEyICszMDksMTcgQEAKIAl4aGNpX2RiZyh4aGNpLCAiU2xvdCAlZCBpbnB1dCBjdHggPSAweCVsbHggKGRtYSlcbiIsIHNsb3RfaWQsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWRldi0+aW5fY3R4LT5kbWEpOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgY2FuY2VsbGF0aW9uIGxpc3QgZm9yIGVhY2ggZW5kcG9pbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzE7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXBzW2ldLmNhbmNlbGxlZF90ZF9saXN0KTsKKwogCS8qIEFsbG9jYXRlIGVuZHBvaW50IDAgcmluZyAqLwotCWRldi0+ZXBfcmluZ3NbMF0gPSB4aGNpX3JpbmdfYWxsb2MoeGhjaSwgMSwgdHJ1ZSwgZmxhZ3MpOwotCWlmICghZGV2LT5lcF9yaW5nc1swXSkKKwlkZXYtPmVwc1swXS5yaW5nID0geGhjaV9yaW5nX2FsbG9jKHhoY2ksIDEsIHRydWUsIGZsYWdzKTsKKwlpZiAoIWRldi0+ZXBzWzBdLnJpbmcpCiAJCWdvdG8gZmFpbDsKIAogCWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfY29tcGxldGlvbik7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+Y21kX2xpc3QpOwogCiAJLyogUG9pbnQgdG8gb3V0cHV0IGRldmljZSBjb250ZXh0IGluIGRjYmFhLiAqLwogCXhoY2ktPmRjYmFhLT5kZXZfY29udGV4dF9wdHJzW3Nsb3RfaWRdID0gZGV2LT5vdXRfY3R4LT5kbWE7CkBAIC0zNTIsOSArMzYwLDkgQEAKIAkvKiAzKSBPbmx5IHRoZSBjb250cm9sIGVuZHBvaW50IGlzIHZhbGlkIC0gb25lIGVuZHBvaW50IGNvbnRleHQgKi8KIAlzbG90X2N0eC0+ZGV2X2luZm8gfD0gTEFTVF9DVFgoMSk7CiAKKwlzbG90X2N0eC0+ZGV2X2luZm8gfD0gKHUzMikgdWRldi0+cm91dGU7CiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgotCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gKHUzMikgdWRldi0+cm91dGU7CiAJCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSAodTMyKSBTTE9UX1NQRUVEX1NTOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgpAQCAtMzgyLDE0ICszOTAsMTIgQEAKIAl4aGNpX2RiZyh4aGNpLCAiU2V0IHJvb3QgaHViIHBvcnRudW0gdG8gJWRcbiIsIHRvcF9kZXYtPnBvcnRudW0pOwogCiAJLyogSXMgdGhpcyBhIExTL0ZTIGRldmljZSB1bmRlciBhIEhTIGh1Yj8gKi8KLQkvKgotCSAqIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoaXMgaXMgcmlnaHQsIHdoZXJlIGRvZXMgdGhlIFRUIGluZm8gZm9yIHRoZQotCSAqIHJvb3RodWIgb3IgcGFyZW50IGh1YiBjb21lIGZyb20/Ci0JICovCiAJaWYgKCh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XIHx8IHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSAmJgogCQkJdWRldi0+dHQpIHsKIAkJc2xvdF9jdHgtPnR0X2luZm8gPSB1ZGV2LT50dC0+aHViLT5zbG90X2lkOwogCQlzbG90X2N0eC0+dHRfaW5mbyB8PSB1ZGV2LT50dHBvcnQgPDwgODsKKwkJaWYgKHVkZXYtPnR0LT5tdWx0aSkKKwkJCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSBERVZfTVRUOwogCX0KIAl4aGNpX2RiZyh4aGNpLCAidWRldi0+dHQgPSAlcFxuIiwgdWRldi0+dHQpOwogCXhoY2lfZGJnKHhoY2ksICJ1ZGV2LT50dHBvcnQgPSAweCV4XG4iLCB1ZGV2LT50dHBvcnQpOwpAQCAtMzk4LDIyICs0MDQsMzUgQEAKIAkvKiBTdGVwIDUgKi8KIAllcDBfY3R4LT5lcF9pbmZvMiA9IEVQX1RZUEUoQ1RSTF9FUCk7CiAJLyoKLQkgKiBTZWUgc2VjdGlvbiA0LjMgYnVsbGV0IDY6Ci0JICogVGhlIGRlZmF1bHQgTWF4IFBhY2tldCBzaXplIGZvciBlcDAgaXMgIjggYnl0ZXMgZm9yIGEgVVNCMgotCSAqIExTL0ZTL0hTIGRldmljZSBvciA1MTIgYnl0ZXMgZm9yIGEgVVNCMyBTUyBkZXZpY2UiCiAJICogWFhYOiBOb3Qgc3VyZSBhYm91dCB3aXJlbGVzcyBVU0IgZGV2aWNlcy4KIAkgKi8KLQlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX1NVUEVSKQorCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9TVVBFUjoKIAkJZXAwX2N0eC0+ZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVCg1MTIpOwotCWVsc2UKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkvKiBVU0IgY29yZSBndWVzc2VzIGF0IGEgNjQtYnl0ZSBtYXggcGFja2V0IGZpcnN0IGZvciBGUyBkZXZpY2VzICovCisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJZXAwX2N0eC0+ZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVCg2NCk7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0xPVzoKIAkJZXAwX2N0eC0+ZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVCg4KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJCXhoY2lfZGJnKHhoY2ksICJGSVhNRSB4SENJIGRvZXNuJ3Qgc3VwcG9ydCB3aXJlbGVzcyBzcGVlZHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTmV3IHNwZWVkPyAqLworCQlCVUcoKTsKKwl9CiAJLyogRVAgMCBjYW4gaGFuZGxlICJidXJzdCIgc2l6ZXMgb2YgMSwgc28gTWF4IEJ1cnN0IFNpemUgZmllbGQgaXMgMCAqLwogCWVwMF9jdHgtPmVwX2luZm8yIHw9IE1BWF9CVVJTVCgwKTsKIAllcDBfY3R4LT5lcF9pbmZvMiB8PSBFUlJPUl9DT1VOVCgzKTsKIAogCWVwMF9jdHgtPmRlcSA9Ci0JCWRldi0+ZXBfcmluZ3NbMF0tPmZpcnN0X3NlZy0+ZG1hOwotCWVwMF9jdHgtPmRlcSB8PSBkZXYtPmVwX3JpbmdzWzBdLT5jeWNsZV9zdGF0ZTsKKwkJZGV2LT5lcHNbMF0ucmluZy0+Zmlyc3Rfc2VnLT5kbWE7CisJZXAwX2N0eC0+ZGVxIHw9IGRldi0+ZXBzWzBdLnJpbmctPmN5Y2xlX3N0YXRlOwogCiAJLyogU3RlcHMgNyBhbmQgOCB3ZXJlIGRvbmUgaW4geGhjaV9hbGxvY192aXJ0X2RldmljZSgpICovCiAKQEAgLTUyMywxMCArNTQyLDExIEBACiAJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgsIGVwX2luZGV4KTsKIAogCS8qIFNldCB1cCB0aGUgZW5kcG9pbnQgcmluZyAqLwotCXZpcnRfZGV2LT5uZXdfZXBfcmluZ3NbZXBfaW5kZXhdID0geGhjaV9yaW5nX2FsbG9jKHhoY2ksIDEsIHRydWUsIG1lbV9mbGFncyk7Ci0JaWYgKCF2aXJ0X2Rldi0+bmV3X2VwX3JpbmdzW2VwX2luZGV4XSkKKwl2aXJ0X2Rldi0+ZXBzW2VwX2luZGV4XS5uZXdfcmluZyA9CisJCXhoY2lfcmluZ19hbGxvYyh4aGNpLCAxLCB0cnVlLCBtZW1fZmxhZ3MpOworCWlmICghdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ubmV3X3JpbmcpCiAJCXJldHVybiAtRU5PTUVNOwotCWVwX3JpbmcgPSB2aXJ0X2Rldi0+bmV3X2VwX3JpbmdzW2VwX2luZGV4XTsKKwllcF9yaW5nID0gdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ubmV3X3Jpbmc7CiAJZXBfY3R4LT5kZXEgPSBlcF9yaW5nLT5maXJzdF9zZWctPmRtYSB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJZXBfY3R4LT5lcF9pbmZvID0geGhjaV9nZXRfZW5kcG9pbnRfaW50ZXJ2YWwodWRldiwgZXApOwpAQCAtNTk4LDYgKzYxOCw0OCBAQAogCSAqLwogfQogCisvKiBDb3B5IG91dHB1dCB4aGNpX2VwX2N0eCB0byB0aGUgaW5wdXQgeGhjaV9lcF9jdHggY29weS4KKyAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGNoYW5nZSBvbmUgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIGVuZHBvaW50IGFuZCB0aGVuCisgKiBpc3N1ZSBhIGNvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kLgorICovCit2b2lkIHhoY2lfZW5kcG9pbnRfY29weShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmluX2N0eCwKKwkJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqb3V0X2N0eCwKKwkJdW5zaWduZWQgaW50IGVwX2luZGV4KQoreworCXN0cnVjdCB4aGNpX2VwX2N0eCAqb3V0X2VwX2N0eDsKKwlzdHJ1Y3QgeGhjaV9lcF9jdHggKmluX2VwX2N0eDsKKworCW91dF9lcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgb3V0X2N0eCwgZXBfaW5kZXgpOworCWluX2VwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBpbl9jdHgsIGVwX2luZGV4KTsKKworCWluX2VwX2N0eC0+ZXBfaW5mbyA9IG91dF9lcF9jdHgtPmVwX2luZm87CisJaW5fZXBfY3R4LT5lcF9pbmZvMiA9IG91dF9lcF9jdHgtPmVwX2luZm8yOworCWluX2VwX2N0eC0+ZGVxID0gb3V0X2VwX2N0eC0+ZGVxOworCWluX2VwX2N0eC0+dHhfaW5mbyA9IG91dF9lcF9jdHgtPnR4X2luZm87Cit9CisKKy8qIENvcHkgb3V0cHV0IHhoY2lfc2xvdF9jdHggdG8gdGhlIGlucHV0IHhoY2lfc2xvdF9jdHguCisgKiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0byBjaGFuZ2Ugb25lIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBlbmRwb2ludCBhbmQgdGhlbgorICogaXNzdWUgYSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZC4gIE9ubHkgdGhlIGNvbnRleHQgZW50cmllcyBmaWVsZCBtYXR0ZXJzLAorICogYnV0IHdlJ2xsIGNvcHkgdGhlIHdob2xlIHRoaW5nIGFueXdheS4KKyAqLwordm9pZCB4aGNpX3Nsb3RfY29weShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmluX2N0eCwKKwkJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqb3V0X2N0eCkKK3sKKwlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqaW5fc2xvdF9jdHg7CisJc3RydWN0IHhoY2lfc2xvdF9jdHggKm91dF9zbG90X2N0eDsKKworCWluX3Nsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgaW5fY3R4KTsKKwlvdXRfc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCBvdXRfY3R4KTsKKworCWluX3Nsb3RfY3R4LT5kZXZfaW5mbyA9IG91dF9zbG90X2N0eC0+ZGV2X2luZm87CisJaW5fc2xvdF9jdHgtPmRldl9pbmZvMiA9IG91dF9zbG90X2N0eC0+ZGV2X2luZm8yOworCWluX3Nsb3RfY3R4LT50dF9pbmZvID0gb3V0X3Nsb3RfY3R4LT50dF9pbmZvOworCWluX3Nsb3RfY3R4LT5kZXZfc3RhdGUgPSBvdXRfc2xvdF9jdHgtPmRldl9zdGF0ZTsKK30KKwogLyogU2V0IHVwIHRoZSBzY3JhdGNocGFkIGJ1ZmZlciBhcnJheSBhbmQgc2NyYXRjaHBhZCBidWZmZXJzLCBpZiBuZWVkZWQuICovCiBzdGF0aWMgaW50IHNjcmF0Y2hwYWRfYWxsb2Moc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBmbGFncykKIHsKQEAgLTY5NSw2ICs3NTcsNDQgQEAKIAl4aGNpLT5zY3JhdGNocGFkID0gTlVMTDsKIH0KIAorc3RydWN0IHhoY2lfY29tbWFuZCAqeGhjaV9hbGxvY19jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJYm9vbCBhbGxvY2F0ZV9jb21wbGV0aW9uLCBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZDsKKworCWNvbW1hbmQgPSBremFsbG9jKHNpemVvZigqY29tbWFuZCksIG1lbV9mbGFncyk7CisJaWYgKCFjb21tYW5kKQorCQlyZXR1cm4gTlVMTDsKKworCWNvbW1hbmQtPmluX2N0eCA9CisJCXhoY2lfYWxsb2NfY29udGFpbmVyX2N0eCh4aGNpLCBYSENJX0NUWF9UWVBFX0lOUFVULCBtZW1fZmxhZ3MpOworCWlmICghY29tbWFuZC0+aW5fY3R4KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChhbGxvY2F0ZV9jb21wbGV0aW9uKSB7CisJCWNvbW1hbmQtPmNvbXBsZXRpb24gPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbXBsZXRpb24pLCBtZW1fZmxhZ3MpOworCQlpZiAoIWNvbW1hbmQtPmNvbXBsZXRpb24pIHsKKwkJCXhoY2lfZnJlZV9jb250YWluZXJfY3R4KHhoY2ksIGNvbW1hbmQtPmluX2N0eCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpbml0X2NvbXBsZXRpb24oY29tbWFuZC0+Y29tcGxldGlvbik7CisJfQorCisJY29tbWFuZC0+c3RhdHVzID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmY29tbWFuZC0+Y21kX2xpc3QpOworCXJldHVybiBjb21tYW5kOworfQorCit2b2lkIHhoY2lfZnJlZV9jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfY29tbWFuZCAqY29tbWFuZCkKK3sKKwl4aGNpX2ZyZWVfY29udGFpbmVyX2N0eCh4aGNpLAorCQkJY29tbWFuZC0+aW5fY3R4KTsKKwlrZnJlZShjb21tYW5kLT5jb21wbGV0aW9uKTsKKwlrZnJlZShjb21tYW5kKTsKK30KKwogdm9pZCB4aGNpX21lbV9jbGVhbnVwKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKIAlzdHJ1Y3QgcGNpX2RldgkqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKaW5kZXggNTkyZmU3ZS4uMDY1OTVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwpAQCAtMjQsNiArMjQsMTAgQEAKIAogI2luY2x1ZGUgInhoY2kuaCIKIAorLyogRGV2aWNlIGZvciBhIHF1aXJrICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRlJFU0NPX0xPR0lDCTB4MWI3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZSRVNDT19MT0dJQ19QREsJMHgxMDAwCisKIHN0YXRpYyBjb25zdCBjaGFyIGhjZF9uYW1lW10gPSAieGhjaV9oY2QiOwogCiAvKiBjYWxsZWQgYWZ0ZXIgcG93ZXJ1cCwgYnkgcHJvYmUgb3Igc3lzdGVtLXBtICJ3YWtldXAiICovCkBAIC01OSw5ICs2MywyMCBAQAogCXhoY2ktPmhjc19wYXJhbXMxID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+Y2FwX3JlZ3MtPmhjc19wYXJhbXMxKTsKIAl4aGNpLT5oY3NfcGFyYW1zMiA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmNhcF9yZWdzLT5oY3NfcGFyYW1zMik7CiAJeGhjaS0+aGNzX3BhcmFtczMgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5jYXBfcmVncy0+aGNzX3BhcmFtczMpOworCXhoY2ktPmhjY19wYXJhbXMgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5jYXBfcmVncy0+aGNfY2FwYmFzZSk7CisJeGhjaS0+aGNpX3ZlcnNpb24gPSBIQ19WRVJTSU9OKHhoY2ktPmhjY19wYXJhbXMpOwogCXhoY2ktPmhjY19wYXJhbXMgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5jYXBfcmVncy0+aGNjX3BhcmFtcyk7CiAJeGhjaV9wcmludF9yZWdpc3RlcnMoeGhjaSk7CiAKKwkvKiBMb29rIGZvciB2ZW5kb3Itc3BlY2lmaWMgcXVpcmtzICovCisJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0ZSRVNDT19MT0dJQyAmJgorCQkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRlJFU0NPX0xPR0lDX1BESyAmJgorCQkJcGRldi0+cmV2aXNpb24gPT0gMHgwKSB7CisJCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9SRVNFVF9FUF9RVUlSSzsKKwkJCXhoY2lfZGJnKHhoY2ksICJRVUlSSzogRnJlc2NvIExvZ2ljIHhIQyBuZWVkcyBjb25maWd1cmUiCisJCQkJCSIgZW5kcG9pbnQgY21kIGFmdGVyIHJlc2V0IGVuZHBvaW50XG4iKTsKKwl9CisKIAkvKiBNYWtlIHN1cmUgdGhlIEhDIGlzIGhhbHRlZC4gKi8KIAlyZXR2YWwgPSB4aGNpX2hhbHQoeGhjaSk7CiAJaWYgKHJldHZhbCkKQEAgLTEyMSw2ICsxMzYsNyBAQAogCS5jaGVja19iYW5kd2lkdGggPQl4aGNpX2NoZWNrX2JhbmR3aWR0aCwKIAkucmVzZXRfYmFuZHdpZHRoID0JeGhjaV9yZXNldF9iYW5kd2lkdGgsCiAJLmFkZHJlc3NfZGV2aWNlID0JeGhjaV9hZGRyZXNzX2RldmljZSwKKwkudXBkYXRlX2h1Yl9kZXZpY2UgPQl4aGNpX3VwZGF0ZV9odWJfZGV2aWNlLAogCiAJLyoKIAkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IGFhODhhMDYuLjE3M2MzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtMTcyLDggKzE3Miw5IEBACiAgKiBoYXZlIHRoZWlyIGNoYWluIGJpdCBjbGVhcmVkIChzbyB0aGF0IGVhY2ggTGluayBUUkIgaXMgYSBzZXBhcmF0ZSBURCkuCiAgKgogICogU2VjdGlvbiA2LjQuNC4xIG9mIHRoZSAwLjk1IHNwZWMgc2F5cyBsaW5rIFRSQnMgY2Fubm90IGhhdmUgdGhlIGNoYWluIGJpdAotICogc2V0LCBidXQgb3RoZXIgc2VjdGlvbnMgdGFsayBhYm91dCBkZWFsaW5nIHdpdGggdGhlIGNoYWluIGJpdCBzZXQuCi0gKiBBc3N1bWUgc2VjdGlvbiA2LjQuNC4xIGlzIHdyb25nLCBhbmQgdGhlIGNoYWluIGJpdCBjYW4gYmUgc2V0IGluIGEgTGluayBUUkIuCisgKiBzZXQsIGJ1dCBvdGhlciBzZWN0aW9ucyB0YWxrIGFib3V0IGRlYWxpbmcgd2l0aCB0aGUgY2hhaW4gYml0IHNldC4gIFRoaXMgd2FzCisgKiBmaXhlZCBpbiB0aGUgMC45NiBzcGVjaWZpY2F0aW9uIGVycmF0YSwgYnV0IHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQgYWxsIDAuOTUKKyAqIHhIQ0kgaGFyZHdhcmUgY2FuJ3QgaGFuZGxlIHRoZSBjaGFpbiBiaXQgYmVpbmcgY2xlYXJlZCBvbiBhIGxpbmsgVFJCLgogICovCiBzdGF0aWMgdm9pZCBpbmNfZW5xKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfcmluZyAqcmluZywgYm9vbCBjb25zdW1lcikKIHsKQEAgLTE5MSw4ICsxOTIsMTQgQEAKIAl3aGlsZSAobGFzdF90cmIoeGhjaSwgcmluZywgcmluZy0+ZW5xX3NlZywgbmV4dCkpIHsKIAkJaWYgKCFjb25zdW1lcikgewogCQkJaWYgKHJpbmcgIT0geGhjaS0+ZXZlbnRfcmluZykgewotCQkJCW5leHQtPmxpbmsuY29udHJvbCAmPSB+VFJCX0NIQUlOOwotCQkJCW5leHQtPmxpbmsuY29udHJvbCB8PSBjaGFpbjsKKwkJCQkvKiBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIDAuOTUgaGFyZHdhcmUsCisJCQkJICogY2Fycnkgb3ZlciB0aGUgY2hhaW4gYml0IG9mIHRoZSBwcmV2aW91cyBUUkIKKwkJCQkgKiAod2hpY2ggbWF5IG1lYW4gdGhlIGNoYWluIGJpdCBpcyBjbGVhcmVkKS4KKwkJCQkgKi8KKwkJCQlpZiAoIXhoY2lfbGlua190cmJfcXVpcmsoeGhjaSkpIHsKKwkJCQkJbmV4dC0+bGluay5jb250cm9sICY9IH5UUkJfQ0hBSU47CisJCQkJCW5leHQtPmxpbmsuY29udHJvbCB8PSBjaGFpbjsKKwkJCQl9CiAJCQkJLyogR2l2ZSB0aGlzIGxpbmsgVFJCIHRvIHRoZSBoYXJkd2FyZSAqLwogCQkJCXdtYigpOwogCQkJCWlmIChuZXh0LT5saW5rLmNvbnRyb2wgJiBUUkJfQ1lDTEUpCkBAIC0yODksMTYgKzI5NiwxOCBAQAogCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4KQogewotCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJc3RydWN0IHhoY2lfdmlydF9lcCAqZXA7CisJdW5zaWduZWQgaW50IGVwX3N0YXRlOwogCXUzMiBmaWVsZDsKIAlfX3UzMiBfX2lvbWVtICpkYl9hZGRyID0gJnhoY2ktPmRiYS0+ZG9vcmJlbGxbc2xvdF9pZF07CiAKLQllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBfcmluZ3NbZXBfaW5kZXhdOworCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJZXBfc3RhdGUgPSBlcC0+ZXBfc3RhdGU7CiAJLyogRG9uJ3QgcmluZyB0aGUgZG9vcmJlbGwgZm9yIHRoaXMgZW5kcG9pbnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcKIAkgKiBjYW5jZWxsYXRpb25zIGJlY2F1c2UgdGhlIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcuCiAJICovCi0JaWYgKCFlcF9yaW5nLT5jYW5jZWxzX3BlbmRpbmcgJiYgIShlcF9yaW5nLT5zdGF0ZSAmIFNFVF9ERVFfUEVORElORykKLQkJCSYmICEoZXBfcmluZy0+c3RhdGUgJiBFUF9IQUxURUQpKSB7CisJaWYgKCFlcC0+Y2FuY2Vsc19wZW5kaW5nICYmICEoZXBfc3RhdGUgJiBTRVRfREVRX1BFTkRJTkcpCisJCQkmJiAhKGVwX3N0YXRlICYgRVBfSEFMVEVEKSkgewogCQlmaWVsZCA9IHhoY2lfcmVhZGwoeGhjaSwgZGJfYWRkcikgJiBEQl9NQVNLOwogCQl4aGNpX3dyaXRlbCh4aGNpLCBmaWVsZCB8IEVQSV9UT19EQihlcF9pbmRleCksIGRiX2FkZHIpOwogCQkvKiBGbHVzaCBQQ0kgcG9zdGVkIHdyaXRlcyAtIEZJWE1FIE1hdHRoZXcgV2lsY294IHNheXMgdGhpcwpAQCAtMzU0LDcgKzM2Myw3IEBACiAJCXN0cnVjdCB4aGNpX3RkICpjdXJfdGQsIHN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICpkZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwotCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3JpbmcgPSBkZXYtPmVwX3JpbmdzW2VwX2luZGV4XTsKKwlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nID0gZGV2LT5lcHNbZXBfaW5kZXhdLnJpbmc7CiAJc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgKnRyYjsKIAlzdHJ1Y3QgeGhjaV9lcF9jdHggKmVwX2N0eDsKIAlkbWFfYWRkcl90IGFkZHI7CkBAIC0zNjIsNyArMzcxLDcgQEAKIAlzdGF0ZS0+bmV3X2N5Y2xlX3N0YXRlID0gMDsKIAl4aGNpX2RiZyh4aGNpLCAiRmluZGluZyBzZWdtZW50IGNvbnRhaW5pbmcgc3RvcHBlZCBUUkIuXG4iKTsKIAlzdGF0ZS0+bmV3X2RlcV9zZWcgPSBmaW5kX3RyYl9zZWcoY3VyX3RkLT5zdGFydF9zZWcsCi0JCQllcF9yaW5nLT5zdG9wcGVkX3RyYiwKKwkJCWRldi0+ZXBzW2VwX2luZGV4XS5zdG9wcGVkX3RyYiwKIAkJCSZzdGF0ZS0+bmV3X2N5Y2xlX3N0YXRlKTsKIAlpZiAoIXN0YXRlLT5uZXdfZGVxX3NlZykKIAkJQlVHKCk7CkBAIC00NDIsOSArNDUxLDExIEBACiAJCXVuaW9uIHhoY2lfdHJiICpkZXFfcHRyLCB1MzIgY3ljbGVfc3RhdGUpOwogCiB2b2lkIHhoY2lfcXVldWVfbmV3X2RlcXVldWVfc3RhdGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nLCB1bnNpZ25lZCBpbnQgc2xvdF9pZCwKLQkJdW5zaWduZWQgaW50IGVwX2luZGV4LCBzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpkZXFfc3RhdGUpCisJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCisJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSkKIHsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOworCiAJeGhjaV9kYmcoeGhjaSwgIlNldCBUUiBEZXEgUHRyIGNtZCwgbmV3IGRlcSBzZWcgPSAlcCAoMHglbGx4IGRtYSksICIKIAkJCSJuZXcgZGVxIHB0ciA9ICVwICgweCVsbHggZG1hKSwgbmV3IGN5Y2xlID0gJXVcbiIsCiAJCQlkZXFfc3RhdGUtPm5ld19kZXFfc2VnLApAQCAtNDYxLDggKzQ3Miw3IEBACiAJICogaWYgdGhlIHJpbmcgaXMgcnVubmluZywgYW5kIHJpbmdpbmcgdGhlIGRvb3JiZWxsIHN0YXJ0cyB0aGUKIAkgKiByaW5nIHJ1bm5pbmcuCiAJICovCi0JZXBfcmluZy0+c3RhdGUgfD0gU0VUX0RFUV9QRU5ESU5HOwotCXhoY2lfcmluZ19jbWRfZGIoeGhjaSk7CisJZXAtPmVwX3N0YXRlIHw9IFNFVF9ERVFfUEVORElORzsKIH0KIAogLyoKQEAgLTQ4MSw2ICs0OTEsNyBAQAogCXVuc2lnbmVkIGludCBzbG90X2lkOwogCXVuc2lnbmVkIGludCBlcF9pbmRleDsKIAlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCXN0cnVjdCB4aGNpX3RkICpjdXJfdGQgPSAwOwogCXN0cnVjdCB4aGNpX3RkICpsYXN0X3VubGlua2VkX3RkOwpAQCAtNDkzLDkgKzUwNCwxMCBAQAogCW1lbXNldCgmZGVxX3N0YXRlLCAwLCBzaXplb2YoZGVxX3N0YXRlKSk7CiAJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7CiAJZXBfaW5kZXggPSBUUkJfVE9fRVBfSU5ERVgodHJiLT5nZW5lcmljLmZpZWxkWzNdKTsKLQllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBfcmluZ3NbZXBfaW5kZXhdOworCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJZXBfcmluZyA9IGVwLT5yaW5nOwogCi0JaWYgKGxpc3RfZW1wdHkoJmVwX3JpbmctPmNhbmNlbGxlZF90ZF9saXN0KSkKKwlpZiAobGlzdF9lbXB0eSgmZXAtPmNhbmNlbGxlZF90ZF9saXN0KSkKIAkJcmV0dXJuOwogCiAJLyogRml4IHVwIHRoZSBlcCByaW5nIGZpcnN0LCBzbyBIVyBzdG9wcyBleGVjdXRpbmcgY2FuY2VsbGVkIFREcy4KQEAgLTUwMyw3ICs1MTUsNyBAQAogCSAqIGl0LiAgV2UncmUgYWxzbyBpbiB0aGUgZXZlbnQgaGFuZGxlciwgc28gd2UgY2FuJ3QgZ2V0IHJlLWludGVycnVwdGVkCiAJICogaWYgYW5vdGhlciBTdG9wIEVuZHBvaW50IGNvbW1hbmQgY29tcGxldGVzCiAJICovCi0JbGlzdF9mb3JfZWFjaChlbnRyeSwgJmVwX3JpbmctPmNhbmNlbGxlZF90ZF9saXN0KSB7CisJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmVwLT5jYW5jZWxsZWRfdGRfbGlzdCkgewogCQljdXJfdGQgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgeGhjaV90ZCwgY2FuY2VsbGVkX3RkX2xpc3QpOwogCQl4aGNpX2RiZyh4aGNpLCAiQ2FuY2VsbGluZyBURCBzdGFydGluZyBhdCAlcCwgMHglbGx4IChkbWEpLlxuIiwKIAkJCQljdXJfdGQtPmZpcnN0X3RyYiwKQEAgLTUxMiw3ICs1MjQsNyBAQAogCQkgKiBJZiB3ZSBzdG9wcGVkIG9uIHRoZSBURCB3ZSBuZWVkIHRvIGNhbmNlbCwgdGhlbiB3ZSBoYXZlIHRvCiAJCSAqIG1vdmUgdGhlIHhIQyBlbmRwb2ludCByaW5nIGRlcXVldWUgcG9pbnRlciBwYXN0IHRoaXMgVEQuCiAJCSAqLwotCQlpZiAoY3VyX3RkID09IGVwX3JpbmctPnN0b3BwZWRfdGQpCisJCWlmIChjdXJfdGQgPT0gZXAtPnN0b3BwZWRfdGQpCiAJCQl4aGNpX2ZpbmRfbmV3X2RlcXVldWVfc3RhdGUoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIGN1cl90ZCwKIAkJCQkJJmRlcV9zdGF0ZSk7CiAJCWVsc2UKQEAgLTUyMywxNCArNTM1LDE1IEBACiAJCSAqIHRoZSBjYW5jZWxsZWQgVEQgbGlzdCBmb3IgVVJCIGNvbXBsZXRpb24gbGF0ZXIuCiAJCSAqLwogCQlsaXN0X2RlbCgmY3VyX3RkLT50ZF9saXN0KTsKLQkJZXBfcmluZy0+Y2FuY2Vsc19wZW5kaW5nLS07CisJCWVwLT5jYW5jZWxzX3BlbmRpbmctLTsKIAl9CiAJbGFzdF91bmxpbmtlZF90ZCA9IGN1cl90ZDsKIAogCS8qIElmIG5lY2Vzc2FyeSwgcXVldWUgYSBTZXQgVHJhbnNmZXIgUmluZyBEZXF1ZXVlIFBvaW50ZXIgY29tbWFuZCAqLwogCWlmIChkZXFfc3RhdGUubmV3X2RlcV9wdHIgJiYgZGVxX3N0YXRlLm5ld19kZXFfc2VnKSB7Ci0JCXhoY2lfcXVldWVfbmV3X2RlcXVldWVfc3RhdGUoeGhjaSwgZXBfcmluZywKKwkJeGhjaV9xdWV1ZV9uZXdfZGVxdWV1ZV9zdGF0ZSh4aGNpLAogCQkJCXNsb3RfaWQsIGVwX2luZGV4LCAmZGVxX3N0YXRlKTsKKwkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKIAl9IGVsc2UgewogCQkvKiBPdGhlcndpc2UganVzdCByaW5nIHRoZSBkb29yYmVsbCB0byByZXN0YXJ0IHRoZSByaW5nICovCiAJCXJpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpOwpAQCAtNTQzLDcgKzU1Niw3IEBACiAJICogU28gc3RvcCB3aGVuIHdlJ3ZlIGNvbXBsZXRlZCB0aGUgVVJCIGZvciB0aGUgbGFzdCBURCB3ZSB1bmxpbmtlZC4KIAkgKi8KIAlkbyB7Ci0JCWN1cl90ZCA9IGxpc3RfZW50cnkoZXBfcmluZy0+Y2FuY2VsbGVkX3RkX2xpc3QubmV4dCwKKwkJY3VyX3RkID0gbGlzdF9lbnRyeShlcC0+Y2FuY2VsbGVkX3RkX2xpc3QubmV4dCwKIAkJCQlzdHJ1Y3QgeGhjaV90ZCwgY2FuY2VsbGVkX3RkX2xpc3QpOwogCQlsaXN0X2RlbCgmY3VyX3RkLT5jYW5jZWxsZWRfdGRfbGlzdCk7CiAKQEAgLTU5MCw3ICs2MDMsNyBAQAogCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRCh0cmItPmdlbmVyaWMuZmllbGRbM10pOwogCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lOREVYKHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7CiAJZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKLQllcF9yaW5nID0gZGV2LT5lcF9yaW5nc1tlcF9pbmRleF07CisJZXBfcmluZyA9IGRldi0+ZXBzW2VwX2luZGV4XS5yaW5nOwogCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKIAlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGRldi0+b3V0X2N0eCk7CiAKQEAgLTYzNCw3ICs2NDcsNyBAQAogCQkJCWVwX2N0eC0+ZGVxKTsKIAl9CiAKLQllcF9yaW5nLT5zdGF0ZSAmPSB+U0VUX0RFUV9QRU5ESU5HOworCWRldi0+ZXBzW2VwX2luZGV4XS5lcF9zdGF0ZSAmPSB+U0VUX0RFUV9QRU5ESU5HOwogCXJpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpOwogfQogCkBAIC02NDQsMTggKzY1Nyw2MCBAQAogewogCWludCBzbG90X2lkOwogCXVuc2lnbmVkIGludCBlcF9pbmRleDsKKwlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOwogCiAJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7CiAJZXBfaW5kZXggPSBUUkJfVE9fRVBfSU5ERVgodHJiLT5nZW5lcmljLmZpZWxkWzNdKTsKKwllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XS5yaW5nOwogCS8qIFRoaXMgY29tbWFuZCB3aWxsIG9ubHkgZmFpbCBpZiB0aGUgZW5kcG9pbnQgd2Fzbid0IGhhbHRlZCwKIAkgKiBidXQgd2UgZG9uJ3QgY2FyZS4KIAkgKi8KIAl4aGNpX2RiZyh4aGNpLCAiSWdub3JpbmcgcmVzZXQgZXAgY29tcGxldGlvbiBjb2RlIG9mICV1XG4iLAogCQkJKHVuc2lnbmVkIGludCkgR0VUX0NPTVBfQ09ERShldmVudC0+c3RhdHVzKSk7CiAKLQkvKiBDbGVhciBvdXIgaW50ZXJuYWwgaGFsdGVkIHN0YXRlIGFuZCByZXN0YXJ0IHRoZSByaW5nICovCi0JeGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBfcmluZ3NbZXBfaW5kZXhdLT5zdGF0ZSAmPSB+RVBfSEFMVEVEOwotCXJpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpOworCS8qIEhXIHdpdGggdGhlIHJlc2V0IGVuZHBvaW50IHF1aXJrIG5lZWRzIHRvIGhhdmUgYSBjb25maWd1cmUgZW5kcG9pbnQKKwkgKiBjb21tYW5kIGNvbXBsZXRlIGJlZm9yZSB0aGUgZW5kcG9pbnQgY2FuIGJlIHVzZWQuICBRdWV1ZSB0aGF0IGhlcmUKKwkgKiBiZWNhdXNlIHRoZSBIVyBjYW4ndCBoYW5kbGUgdHdvIGNvbW1hbmRzIGJlaW5nIHF1ZXVlZCBpbiBhIHJvdy4KKwkgKi8KKwlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9SRVNFVF9FUF9RVUlSSykgeworCQl4aGNpX2RiZyh4aGNpLCAiUXVldWVpbmcgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmRcbiIpOworCQl4aGNpX3F1ZXVlX2NvbmZpZ3VyZV9lbmRwb2ludCh4aGNpLAorCQkJCXhoY2ktPmRldnNbc2xvdF9pZF0tPmluX2N0eC0+ZG1hLCBzbG90X2lkLAorCQkJCWZhbHNlKTsKKwkJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKKwl9IGVsc2UgeworCQkvKiBDbGVhciBvdXIgaW50ZXJuYWwgaGFsdGVkIHN0YXRlIGFuZCByZXN0YXJ0IHRoZSByaW5nICovCisJCXhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0uZXBfc3RhdGUgJj0gfkVQX0hBTFRFRDsKKwkJcmluZ19lcF9kb29yYmVsbCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCk7CisJfQorfQorCisvKiBDaGVjayB0byBzZWUgaWYgYSBjb21tYW5kIGluIHRoZSBkZXZpY2UncyBjb21tYW5kIHF1ZXVlIG1hdGNoZXMgdGhpcyBvbmUuCisgKiBTaWduYWwgdGhlIGNvbXBsZXRpb24gb3IgZnJlZSB0aGUgY29tbWFuZCwgYW5kIHJldHVybiAxLiAgUmV0dXJuIDAgaWYgdGhlCisgKiBjb21wbGV0ZWQgY29tbWFuZCBpc24ndCBhdCB0aGUgaGVhZCBvZiB0aGUgY29tbWFuZCBsaXN0LgorICovCitzdGF0aWMgaW50IGhhbmRsZV9jbWRfaW5fY21kX3dhaXRfbGlzdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldiwKKwkJc3RydWN0IHhoY2lfZXZlbnRfY21kICpldmVudCkKK3sKKwlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kOworCisJaWYgKGxpc3RfZW1wdHkoJnZpcnRfZGV2LT5jbWRfbGlzdCkpCisJCXJldHVybiAwOworCisJY29tbWFuZCA9IGxpc3RfZW50cnkodmlydF9kZXYtPmNtZF9saXN0Lm5leHQsCisJCQlzdHJ1Y3QgeGhjaV9jb21tYW5kLCBjbWRfbGlzdCk7CisJaWYgKHhoY2ktPmNtZF9yaW5nLT5kZXF1ZXVlICE9IGNvbW1hbmQtPmNvbW1hbmRfdHJiKQorCQlyZXR1cm4gMDsKKworCWNvbW1hbmQtPnN0YXR1cyA9CisJCUdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cyk7CisJbGlzdF9kZWwoJmNvbW1hbmQtPmNtZF9saXN0KTsKKwlpZiAoY29tbWFuZC0+Y29tcGxldGlvbikKKwkJY29tcGxldGUoY29tbWFuZC0+Y29tcGxldGlvbik7CisJZWxzZQorCQl4aGNpX2ZyZWVfY29tbWFuZCh4aGNpLCBjb21tYW5kKTsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX2NtZF9jb21wbGV0aW9uKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKQEAgLTY2NCw2ICs3MTksMTEgQEAKIAlpbnQgc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyk7CiAJdTY0IGNtZF9kbWE7CiAJZG1hX2FkZHJfdCBjbWRfZGVxdWV1ZV9kbWE7CisJc3RydWN0IHhoY2lfaW5wdXRfY29udHJvbF9jdHggKmN0cmxfY3R4OworCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldjsKKwl1bnNpZ25lZCBpbnQgZXBfaW5kZXg7CisJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKKwl1bnNpZ25lZCBpbnQgZXBfc3RhdGU7CiAKIAljbWRfZG1hID0gZXZlbnQtPmNtZF90cmI7CiAJY21kX2RlcXVldWVfZG1hID0geGhjaV90cmJfdmlydF90b19kbWEoeGhjaS0+Y21kX3JpbmctPmRlcV9zZWcsCkBAIC02OTEsNiArNzUxLDQ3IEBACiAJCQl4aGNpX2ZyZWVfdmlydF9kZXZpY2UoeGhjaSwgc2xvdF9pZCk7CiAJCWJyZWFrOwogCWNhc2UgVFJCX1RZUEUoVFJCX0NPTkZJR19FUCk6CisJCXZpcnRfZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKKwkJaWYgKGhhbmRsZV9jbWRfaW5fY21kX3dhaXRfbGlzdCh4aGNpLCB2aXJ0X2RldiwgZXZlbnQpKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIENvbmZpZ3VyZSBlbmRwb2ludCBjb21tYW5kcyBjYW4gY29tZSBmcm9tIHRoZSBVU0IgY29yZQorCQkgKiBjb25maWd1cmF0aW9uIG9yIGFsdCBzZXR0aW5nIGNoYW5nZXMsIG9yIGJlY2F1c2UgdGhlIEhXCisJCSAqIG5lZWRlZCBhbiBleHRyYSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCBhZnRlciBhIHJlc2V0CisJCSAqIGVuZHBvaW50IGNvbW1hbmQuICBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSB4SENJIGRyaXZlciBpcworCQkgKiBub3Qgd2FpdGluZyBvbiB0aGUgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQuCisJCSAqLworCQljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksCisJCQkJdmlydF9kZXYtPmluX2N0eCk7CisJCS8qIElucHV0IGN0eCBhZGRfZmxhZ3MgYXJlIHRoZSBlbmRwb2ludCBpbmRleCBwbHVzIG9uZSAqLworCQllcF9pbmRleCA9IHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludChjdHJsX2N0eC0+YWRkX2ZsYWdzKSAtIDE7CisJCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLnJpbmc7CisJCWlmICghZXBfcmluZykgeworCQkJLyogVGhpcyBtdXN0IGhhdmUgYmVlbiBhbiBpbml0aWFsIGNvbmZpZ3VyZSBlbmRwb2ludCAqLworCQkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+Y21kX3N0YXR1cyA9CisJCQkJR0VUX0NPTVBfQ09ERShldmVudC0+c3RhdHVzKTsKKwkJCWNvbXBsZXRlKCZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5jbWRfY29tcGxldGlvbik7CisJCQlicmVhazsKKwkJfQorCQllcF9zdGF0ZSA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0uZXBfc3RhdGU7CisJCXhoY2lfZGJnKHhoY2ksICJDb21wbGV0ZWQgY29uZmlnIGVwIGNtZCAtIGxhc3QgZXAgaW5kZXggPSAlZCwgIgorCQkJCSJzdGF0ZSA9ICVkXG4iLCBlcF9pbmRleCwgZXBfc3RhdGUpOworCQlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9SRVNFVF9FUF9RVUlSSyAmJgorCQkJCWVwX3N0YXRlICYgRVBfSEFMVEVEKSB7CisJCQkvKiBDbGVhciBvdXIgaW50ZXJuYWwgaGFsdGVkIHN0YXRlIGFuZCByZXN0YXJ0IHJpbmcgKi8KKwkJCXhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0uZXBfc3RhdGUgJj0KKwkJCQl+RVBfSEFMVEVEOworCQkJcmluZ19lcF9kb29yYmVsbCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCk7CisJCX0gZWxzZSB7CisJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5jbWRfc3RhdHVzID0KKwkJCQlHRVRfQ09NUF9DT0RFKGV2ZW50LT5zdGF0dXMpOworCQkJY29tcGxldGUoJnhoY2ktPmRldnNbc2xvdF9pZF0tPmNtZF9jb21wbGV0aW9uKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSQl9UWVBFKFRSQl9FVkFMX0NPTlRFWFQpOgorCQl2aXJ0X2RldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07CisJCWlmIChoYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3QoeGhjaSwgdmlydF9kZXYsIGV2ZW50KSkKKwkJCWJyZWFrOwogCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5jbWRfc3RhdHVzID0gR0VUX0NPTVBfQ09ERShldmVudC0+c3RhdHVzKTsKIAkJY29tcGxldGUoJnhoY2ktPmRldnNbc2xvdF9pZF0tPmNtZF9jb21wbGV0aW9uKTsKIAkJYnJlYWs7CkBAIC04MDUsNyArOTA2LDkgQEAKIAkJc3RydWN0IHhoY2lfdHJhbnNmZXJfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp4ZGV2OworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOwogCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJdW5zaWduZWQgaW50IHNsb3RfaWQ7CiAJaW50IGVwX2luZGV4OwogCXN0cnVjdCB4aGNpX3RkICp0ZCA9IDA7CiAJZG1hX2FkZHJfdCBldmVudF9kbWE7CkBAIC04MTQsOSArOTE3LDExIEBACiAJc3RydWN0IHVyYiAqdXJiID0gMDsKIAlpbnQgc3RhdHVzID0gLUVJTlBST0dSRVNTOwogCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4OworCXUzMiB0cmJfY29tcF9jb2RlOwogCiAJeGhjaV9kYmcoeGhjaSwgIkluICVzXG4iLCBfX2Z1bmNfXyk7Ci0JeGRldiA9IHhoY2ktPmRldnNbVFJCX1RPX1NMT1RfSUQoZXZlbnQtPmZsYWdzKV07CisJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyk7CisJeGRldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07CiAJaWYgKCF4ZGV2KSB7CiAJCXhoY2lfZXJyKHhoY2ksICJFUlJPUiBUcmFuc2ZlciBldmVudCBwb2ludGVkIHRvIGJhZCBzbG90XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC04MjUsNyArOTMwLDggQEAKIAkvKiBFbmRwb2ludCBJRCBpcyAxIGJhc2VkLCBvdXIgaW5kZXggaXMgemVybyBiYXNlZCAqLwogCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lEKGV2ZW50LT5mbGFncykgLSAxOwogCXhoY2lfZGJnKHhoY2ksICIlcyAtIGVwIGluZGV4ID0gJWRcbiIsIF9fZnVuY19fLCBlcF9pbmRleCk7Ci0JZXBfcmluZyA9IHhkZXYtPmVwX3JpbmdzW2VwX2luZGV4XTsKKwllcCA9ICZ4ZGV2LT5lcHNbZXBfaW5kZXhdOworCWVwX3JpbmcgPSBlcC0+cmluZzsKIAllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgeGRldi0+b3V0X2N0eCwgZXBfaW5kZXgpOwogCWlmICghZXBfcmluZyB8fCAoZXBfY3R4LT5lcF9pbmZvICYgRVBfU1RBVEVfTUFTSykgPT0gRVBfU1RBVEVfRElTQUJMRUQpIHsKIAkJeGhjaV9lcnIoeGhjaSwgIkVSUk9SIFRyYW5zZmVyIGV2ZW50IHBvaW50ZWQgdG8gZGlzYWJsZWQgZW5kcG9pbnRcbiIpOwpAQCAtODcwLDcgKzk3Niw4IEBACiAJCQkodW5zaWduZWQgaW50KSBldmVudC0+ZmxhZ3MpOwogCiAJLyogTG9vayBmb3IgY29tbW9uIGVycm9yIGNhc2VzICovCi0Jc3dpdGNoIChHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pKSB7CisJdHJiX2NvbXBfY29kZSA9IEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbik7CisJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7CiAJLyogU2tpcCBjb2RlcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZyBkZXBlbmRpbmcgb24KIAkgKiB0cmFuc2ZlciB0eXBlCiAJICovCkBAIC04ODUsNyArOTkyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDT01QX1NUQUxMOgogCQl4aGNpX3dhcm4oeGhjaSwgIldBUk46IFN0YWxsZWQgZW5kcG9pbnRcbiIpOwotCQllcF9yaW5nLT5zdGF0ZSB8PSBFUF9IQUxURUQ7CisJCWVwLT5lcF9zdGF0ZSB8PSBFUF9IQUxURUQ7CiAJCXN0YXR1cyA9IC1FUElQRTsKIAkJYnJlYWs7CiAJY2FzZSBDT01QX1RSQl9FUlI6CkBAIC05MTMsNyArMTAyMCw3IEBACiAJLyogV2FzIHRoaXMgYSBjb250cm9sIHRyYW5zZmVyPyAqLwogCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZ0ZC0+dXJiLT5lcC0+ZGVzYykpIHsKIAkJeGhjaV9kZWJ1Z190cmIoeGhjaSwgeGhjaS0+ZXZlbnRfcmluZy0+ZGVxdWV1ZSk7Ci0JCXN3aXRjaCAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSkgeworCQlzd2l0Y2ggKHRyYl9jb21wX2NvZGUpIHsKIAkJY2FzZSBDT01QX1NVQ0NFU1M6CiAJCQlpZiAoZXZlbnRfdHJiID09IGVwX3JpbmctPmRlcXVldWUpIHsKIAkJCQl4aGNpX3dhcm4oeGhjaSwgIldBUk46IFN1Y2Nlc3Mgb24gY3RybCBzZXR1cCBUUkIgd2l0aG91dCBJT0Mgc2V0Pz9cbiIpOwpAQCAtOTI4LDggKzEwMzUsMzcgQEAKIAkJCWJyZWFrOwogCQljYXNlIENPTVBfU0hPUlRfVFg6CiAJCQl4aGNpX3dhcm4oeGhjaSwgIldBUk46IHNob3J0IHRyYW5zZmVyIG9uIGNvbnRyb2wgZXBcbiIpOwotCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKKwkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgQ09NUF9CQUJCTEU6CisJCQkvKiBUaGUgMC45NiBzcGVjIHNheXMgYSBiYWJibGluZyBjb250cm9sIGVuZHBvaW50CisJCQkgKiBpcyBub3QgaGFsdGVkLiBUaGUgMC45NiBzcGVjIHNheXMgaXQgaXMuICBTb21lIEhXCisJCQkgKiBjbGFpbXMgdG8gYmUgMC45NSBjb21wbGlhbnQsIGJ1dCBpdCBoYWx0cyB0aGUgY29udHJvbAorCQkJICogZW5kcG9pbnQgYW55d2F5LiAgQ2hlY2sgaWYgYSBiYWJibGUgaGFsdGVkIHRoZQorCQkJICogZW5kcG9pbnQuCisJCQkgKi8KKwkJCWlmIChlcF9jdHgtPmVwX2luZm8gIT0gRVBfU1RBVEVfSEFMVEVEKQorCQkJCWJyZWFrOworCQkJLyogZWxzZSBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBDT01QX1NUQUxMOgorCQkJLyogRGlkIHdlIHRyYW5zZmVyIHBhcnQgb2YgdGhlIGRhdGEgKG1pZGRsZSkgcGhhc2U/ICovCisJCQlpZiAoZXZlbnRfdHJiICE9IGVwX3JpbmctPmRlcXVldWUgJiYKKwkJCQkJZXZlbnRfdHJiICE9IHRkLT5sYXN0X3RyYikKKwkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0KKwkJCQkJdGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJCQktIFRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbik7CisJCQllbHNlCisJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwkJCWVwLT5zdG9wcGVkX3RkID0gdGQ7CisJCQllcC0+c3RvcHBlZF90cmIgPSBldmVudF90cmI7CisJCQl4aGNpX3F1ZXVlX3Jlc2V0X2VwKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4KTsKKwkJCXhoY2lfY2xlYW51cF9zdGFsbGVkX3JpbmcoeGhjaSwgdGQtPnVyYi0+ZGV2LCBlcF9pbmRleCk7CisJCQl4aGNpX3JpbmdfY21kX2RiKHhoY2kpOworCQkJZ290byB0ZF9jbGVhbnVwOwogCQlkZWZhdWx0OgogCQkJLyogT3RoZXJzIGFscmVhZHkgaGFuZGxlZCBhYm92ZSAqLwogCQkJYnJlYWs7CkBAIC05NDMsNyArMTA3OSwxMCBAQAogCQkJaWYgKGV2ZW50X3RyYiA9PSB0ZC0+bGFzdF90cmIpIHsKIAkJCQlpZiAodGQtPnVyYi0+YWN0dWFsX2xlbmd0aCAhPSAwKSB7CiAJCQkJCS8qIERvbid0IG92ZXJ3cml0ZSBhIHByZXZpb3VzbHkgc2V0IGVycm9yIGNvZGUgKi8KLQkJCQkJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwgc3RhdHVzID09IDApCisJCQkJCWlmICgoc3RhdHVzID09IC1FSU5QUk9HUkVTUyB8fAorCQkJCQkJCQlzdGF0dXMgPT0gMCkgJiYKKwkJCQkJCQkodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MKKwkJCQkJCQkgJiBVUkJfU0hPUlRfTk9UX09LKSkKIAkJCQkJCS8qIERpZCB3ZSBhbHJlYWR5IHNlZSBhIHNob3J0IGRhdGEgc3RhZ2U/ICovCiAJCQkJCQlzdGF0dXMgPSAtRVJFTU9URUlPOwogCQkJCX0gZWxzZSB7CkBAIC05NTIsNyArMTA5MSw3IEBACiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCS8qIE1heWJlIHRoZSBldmVudCB3YXMgZm9yIHRoZSBkYXRhIHN0YWdlPyAqLwotCQkJCWlmIChHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pICE9IENPTVBfU1RPUF9JTlZBTCkgeworCQkJCWlmICh0cmJfY29tcF9jb2RlICE9IENPTVBfU1RPUF9JTlZBTCkgewogCQkJCQkvKiBXZSBkaWRuJ3Qgc3RvcCBvbiBhIGxpbmsgVFJCIGluIHRoZSBtaWRkbGUgKi8KIAkJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9CiAJCQkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KQEAgLTk2NCw3ICsxMTAzLDcgQEAKIAkJCX0KIAkJfQogCX0gZWxzZSB7Ci0JCXN3aXRjaCAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSkgeworCQlzd2l0Y2ggKHRyYl9jb21wX2NvZGUpIHsKIAkJY2FzZSBDT01QX1NVQ0NFU1M6CiAJCQkvKiBEb3VibGUgY2hlY2sgdGhhdCB0aGUgSFcgdHJhbnNmZXJyZWQgZXZlcnl0aGluZy4gKi8KIAkJCWlmIChldmVudF90cmIgIT0gdGQtPmxhc3RfdHJiKSB7CkBAIC05NzUsNyArMTExNCwxMiBAQAogCQkJCWVsc2UKIAkJCQkJc3RhdHVzID0gMDsKIAkJCX0gZWxzZSB7Ci0JCQkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgYnVsayB0cmFuc2ZlciFcbiIpOworCQkJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKCZ0ZC0+dXJiLT5lcC0+ZGVzYykpCisJCQkJCXhoY2lfZGJnKHhoY2ksICJTdWNjZXNzZnVsIGJ1bGsgIgorCQkJCQkJCSJ0cmFuc2ZlciFcbiIpOworCQkJCWVsc2UKKwkJCQkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgaW50ZXJydXB0ICIKKwkJCQkJCQkidHJhbnNmZXIhXG4iKTsKIAkJCQlzdGF0dXMgPSAwOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xMDAxLDExICsxMTQ1LDE3IEBACiAJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9CiAJCQkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQogCQkJCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pOwotCQkJCWlmICh0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoIDwgMCkgeworCQkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwKKwkJCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJCQkJeGhjaV93YXJuKHhoY2ksICJIQyBnYXZlIGJhZCBsZW5ndGggIgogCQkJCQkJCSJvZiAlZCBieXRlcyBsZWZ0XG4iLAogCQkJCQkJCVRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbikpOwogCQkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJCQkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYKKwkJCQkJCQlVUkJfU0hPUlRfTk9UX09LKQorCQkJCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKKwkJCQkJZWxzZQorCQkJCQkJc3RhdHVzID0gMDsKIAkJCQl9CiAJCQkJLyogRG9uJ3Qgb3ZlcndyaXRlIGEgcHJldmlvdXNseSBzZXQgZXJyb3IgY29kZSAqLwogCQkJCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CkBAIC0xMDQxLDMwICsxMTkxLDMxIEBACiAJCQkvKiBJZiB0aGUgcmluZyBkaWRuJ3Qgc3RvcCBvbiBhIExpbmsgb3IgTm8tb3AgVFJCLCBhZGQKIAkJCSAqIGluIHRoZSBhY3R1YWwgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSB0aGUgTm9ybWFsIFRSQgogCQkJICovCi0JCQlpZiAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSAhPSBDT01QX1NUT1BfSU5WQUwpCisJCQlpZiAodHJiX2NvbXBfY29kZSAhPSBDT01QX1NUT1BfSU5WQUwpCiAJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCArPQogCQkJCQlUUkJfTEVOKGN1cl90cmItPmdlbmVyaWMuZmllbGRbMl0pIC0KIAkJCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKIAkJfQogCX0KLQlpZiAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSA9PSBDT01QX1NUT1BfSU5WQUwgfHwKLQkJCUdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbikgPT0gQ09NUF9TVE9QKSB7CisJaWYgKHRyYl9jb21wX2NvZGUgPT0gQ09NUF9TVE9QX0lOVkFMIHx8CisJCQl0cmJfY29tcF9jb2RlID09IENPTVBfU1RPUCkgewogCQkvKiBUaGUgRW5kcG9pbnQgU3RvcCBDb21tYW5kIGNvbXBsZXRpb24gd2lsbCB0YWtlIGNhcmUgb2YgYW55CiAJCSAqIHN0b3BwZWQgVERzLiAgQSBzdG9wcGVkIFREIG1heSBiZSByZXN0YXJ0ZWQsIHNvIGRvbid0IHVwZGF0ZQogCQkgKiB0aGUgcmluZyBkZXF1ZXVlIHBvaW50ZXIgb3IgdGFrZSB0aGlzIFREIG9mZiBhbnkgbGlzdHMgeWV0LgogCQkgKi8KLQkJZXBfcmluZy0+c3RvcHBlZF90ZCA9IHRkOwotCQllcF9yaW5nLT5zdG9wcGVkX3RyYiA9IGV2ZW50X3RyYjsKKwkJZXAtPnN0b3BwZWRfdGQgPSB0ZDsKKwkJZXAtPnN0b3BwZWRfdHJiID0gZXZlbnRfdHJiOwogCX0gZWxzZSB7Ci0JCWlmIChHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pID09IENPTVBfU1RBTEwpIHsKKwkJaWYgKHRyYl9jb21wX2NvZGUgPT0gQ09NUF9TVEFMTCB8fAorCQkJCXRyYl9jb21wX2NvZGUgPT0gQ09NUF9CQUJCTEUpIHsKIAkJCS8qIFRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgZnJvbSB0aGUgZHJpdmVyJ3MKIAkJCSAqIHBlcnNwZWN0aXZlLCBidXQgd2UgbmVlZCB0byBpc3N1ZSBhIHNldCBkZXF1ZXVlCiAJCQkgKiBjb21tYW5kIGZvciB0aGlzIHN0YWxsZWQgZW5kcG9pbnQgdG8gbW92ZSB0aGUgZGVxdWV1ZQogCQkJICogcG9pbnRlciBwYXN0IHRoZSBURC4gIFdlIGNhbid0IGRvIHRoYXQgaGVyZSBiZWNhdXNlCiAJCQkgKiB0aGUgaGFsdCBjb25kaXRpb24gbXVzdCBiZSBjbGVhcmVkIGZpcnN0LgogCQkJICovCi0JCQllcF9yaW5nLT5zdG9wcGVkX3RkID0gdGQ7Ci0JCQllcF9yaW5nLT5zdG9wcGVkX3RyYiA9IGV2ZW50X3RyYjsKKwkJCWVwLT5zdG9wcGVkX3RkID0gdGQ7CisJCQllcC0+c3RvcHBlZF90cmIgPSBldmVudF90cmI7CiAJCX0gZWxzZSB7CiAJCQkvKiBVcGRhdGUgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8KIAkJCXdoaWxlIChlcF9yaW5nLT5kZXF1ZXVlICE9IHRkLT5sYXN0X3RyYikKQEAgLTEwNzIsMTYgKzEyMjMsNDEgQEAKIAkJCWluY19kZXEoeGhjaSwgZXBfcmluZywgZmFsc2UpOwogCQl9CiAKK3RkX2NsZWFudXA6CiAJCS8qIENsZWFuIHVwIHRoZSBlbmRwb2ludCdzIFREIGxpc3QgKi8KIAkJdXJiID0gdGQtPnVyYjsKKwkJLyogRG8gb25lIGxhc3QgY2hlY2sgb2YgdGhlIGFjdHVhbCB0cmFuc2ZlciBsZW5ndGguCisJCSAqIElmIHRoZSBob3N0IGNvbnRyb2xsZXIgc2FpZCB3ZSB0cmFuc2ZlcnJlZCBtb3JlIGRhdGEgdGhhbgorCQkgKiB0aGUgYnVmZmVyIGxlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoIHdpbGwgYmUgYSB2ZXJ5IGJpZworCQkgKiBudW1iZXIgKHNpbmNlIGl0J3MgdW5zaWduZWQpLiAgUGxheSBpdCBzYWZlIGFuZCBzYXkgd2UgZGlkbid0CisJCSAqIHRyYW5zZmVyIGFueXRoaW5nLgorCQkgKi8KKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgeworCQkJeGhjaV93YXJuKHhoY2ksICJVUkIgdHJhbnNmZXIgbGVuZ3RoIGlzIHdyb25nLCAiCisJCQkJCSJ4SEMgaXNzdWU/IHJlcS4gbGVuID0gJXUsICIKKwkJCQkJImFjdC4gbGVuID0gJXVcbiIsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQllbHNlCisJCQkJc3RhdHVzID0gMDsKKwkJfQogCQlsaXN0X2RlbCgmdGQtPnRkX2xpc3QpOwogCQkvKiBXYXMgdGhpcyBURCBzbGF0ZWQgdG8gYmUgY2FuY2VsbGVkIGJ1dCBjb21wbGV0ZWQgYW55d2F5PyAqLwogCQlpZiAoIWxpc3RfZW1wdHkoJnRkLT5jYW5jZWxsZWRfdGRfbGlzdCkpIHsKIAkJCWxpc3RfZGVsKCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpOwotCQkJZXBfcmluZy0+Y2FuY2Vsc19wZW5kaW5nLS07CisJCQllcC0+Y2FuY2Vsc19wZW5kaW5nLS07CiAJCX0KLQkJLyogTGVhdmUgdGhlIFREIGFyb3VuZCBmb3IgdGhlIHJlc2V0IGVuZHBvaW50IGZ1bmN0aW9uIHRvIHVzZSAqLwotCQlpZiAoR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKSAhPSBDT01QX1NUQUxMKSB7CisJCS8qIExlYXZlIHRoZSBURCBhcm91bmQgZm9yIHRoZSByZXNldCBlbmRwb2ludCBmdW5jdGlvbiB0byB1c2UKKwkJICogKGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGEgY29udHJvbCBlbmRwb2ludCwgc2luY2Ugd2UgYWxyZWFkeQorCQkgKiBxdWV1ZWQgdGhlIFNldCBUUiBkZXF1ZXVlIHBvaW50ZXIgY29tbWFuZCBmb3Igc3RhbGxlZAorCQkgKiBjb250cm9sIGVuZHBvaW50cykuCisJCSAqLworCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmdXJiLT5lcC0+ZGVzYykgfHwKKwkJCSh0cmJfY29tcF9jb2RlICE9IENPTVBfU1RBTEwgJiYKKwkJCQl0cmJfY29tcF9jb2RlICE9IENPTVBfQkFCQkxFKSkgewogCQkJa2ZyZWUodGQpOwogCQl9CiAJCXVyYi0+aGNwcml2ID0gTlVMTDsKQEAgLTEwOTQsNyArMTI3MCw3IEBACiAJaWYgKHVyYikgewogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh4aGNpX3RvX2hjZCh4aGNpKSwgdXJiKTsKIAkJeGhjaV9kYmcoeGhjaSwgIkdpdmViYWNrIFVSQiAlcCwgbGVuID0gJWQsIHN0YXR1cyA9ICVkXG4iLAotCQkJCXVyYiwgdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCwgc3RhdHVzKTsKKwkJCQl1cmIsIHVyYi0+YWN0dWFsX2xlbmd0aCwgc3RhdHVzKTsKIAkJc3Bpbl91bmxvY2soJnhoY2ktPmxvY2spOwogCQl1c2JfaGNkX2dpdmViYWNrX3VyYih4aGNpX3RvX2hjZCh4aGNpKSwgdXJiLCBzdGF0dXMpOwogCQlzcGluX2xvY2soJnhoY2ktPmxvY2spOwpAQCAtMTIzNSw3ICsxNDExLDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKLQlyZXQgPSBwcmVwYXJlX3JpbmcoeGhjaSwgeGRldi0+ZXBfcmluZ3NbZXBfaW5kZXhdLAorCXJldCA9IHByZXBhcmVfcmluZyh4aGNpLCB4ZGV2LT5lcHNbZXBfaW5kZXhdLnJpbmcsCiAJCQllcF9jdHgtPmVwX2luZm8gJiBFUF9TVEFURV9NQVNLLAogCQkJbnVtX3RyYnMsIG1lbV9mbGFncyk7CiAJaWYgKHJldCkKQEAgLTEyNTUsOSArMTQzMSw5IEBACiAJKCp0ZCktPnVyYiA9IHVyYjsKIAl1cmItPmhjcHJpdiA9ICh2b2lkICopICgqdGQpOwogCS8qIEFkZCB0aGlzIFREIHRvIHRoZSB0YWlsIG9mIHRoZSBlbmRwb2ludCByaW5nJ3MgVEQgbGlzdCAqLwotCWxpc3RfYWRkX3RhaWwoJigqdGQpLT50ZF9saXN0LCAmeGRldi0+ZXBfcmluZ3NbZXBfaW5kZXhdLT50ZF9saXN0KTsKLQkoKnRkKS0+c3RhcnRfc2VnID0geGRldi0+ZXBfcmluZ3NbZXBfaW5kZXhdLT5lbnFfc2VnOwotCSgqdGQpLT5maXJzdF90cmIgPSB4ZGV2LT5lcF9yaW5nc1tlcF9pbmRleF0tPmVucXVldWU7CisJbGlzdF9hZGRfdGFpbCgmKCp0ZCktPnRkX2xpc3QsICZ4ZGV2LT5lcHNbZXBfaW5kZXhdLnJpbmctPnRkX2xpc3QpOworCSgqdGQpLT5zdGFydF9zZWcgPSB4ZGV2LT5lcHNbZXBfaW5kZXhdLnJpbmctPmVucV9zZWc7CisJKCp0ZCktPmZpcnN0X3RyYiA9IHhkZXYtPmVwc1tlcF9pbmRleF0ucmluZy0+ZW5xdWV1ZTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMzNSw2ICsxNTExLDQ3IEBACiAJcmluZ19lcF9kb29yYmVsbCh4aGNpLCBzbG90X2lkLCBlcF9pbmRleCk7CiB9CiAKKy8qCisgKiB4SENJIHVzZXMgbm9ybWFsIFRSQnMgZm9yIGJvdGggYnVsayBhbmQgaW50ZXJydXB0LiAgV2hlbiB0aGUgaW50ZXJydXB0CisgKiBlbmRwb2ludCBpcyB0byBiZSBzZXJ2aWNlZCwgdGhlIHhIQyB3aWxsIGNvbnN1bWUgKGF0IG1vc3QpIG9uZSBURC4gIEEgVEQKKyAqIChjb21wcmlzZWQgb2Ygc2cgbGlzdCBlbnRyaWVzKSBjYW4gdGFrZSBzZXZlcmFsIHNlcnZpY2UgaW50ZXJ2YWxzIHRvCisgKiB0cmFuc21pdC4KKyAqLworaW50IHhoY2lfcXVldWVfaW50cl90eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IG1lbV9mbGFncywKKwkJc3RydWN0IHVyYiAqdXJiLCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4KQoreworCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksCisJCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5vdXRfY3R4LCBlcF9pbmRleCk7CisJaW50IHhoY2lfaW50ZXJ2YWw7CisJaW50IGVwX2ludGVydmFsOworCisJeGhjaV9pbnRlcnZhbCA9IEVQX0lOVEVSVkFMX1RPX1VGUkFNRVMoZXBfY3R4LT5lcF9pbmZvKTsKKwllcF9pbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisJLyogQ29udmVydCB0byBtaWNyb2ZyYW1lcyAqLworCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVyB8fAorCQkJdXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKQorCQllcF9pbnRlcnZhbCAqPSA4OworCS8qIEZJWE1FIGNoYW5nZSB0aGlzIHRvIGEgd2FybmluZyBhbmQgYSBzdWdnZXN0aW9uIHRvIHVzZSB0aGUgbmV3IEFQSQorCSAqIHRvIHNldCB0aGUgcG9sbGluZyBpbnRlcnZhbCAob25jZSB0aGUgQVBJIGlzIGFkZGVkKS4KKwkgKi8KKwlpZiAoeGhjaV9pbnRlcnZhbCAhPSBlcF9pbnRlcnZhbCkgeworCQlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJEcml2ZXIgdXNlcyBkaWZmZXJlbnQgaW50ZXJ2YWwiCisJCQkJCSIgKCVkIG1pY3JvZnJhbWUlcykgdGhhbiB4SENJICIKKwkJCQkJIiglZCBtaWNyb2ZyYW1lJXMpXG4iLAorCQkJCQllcF9pbnRlcnZhbCwKKwkJCQkJZXBfaW50ZXJ2YWwgPT0gMSA/ICIiIDogInMiLAorCQkJCQl4aGNpX2ludGVydmFsLAorCQkJCQl4aGNpX2ludGVydmFsID09IDEgPyAiIiA6ICJzIik7CisJCXVyYi0+aW50ZXJ2YWwgPSB4aGNpX2ludGVydmFsOworCQkvKiBDb252ZXJ0IGJhY2sgdG8gZnJhbWVzIGZvciBMUy9GUyBkZXZpY2VzICovCisJCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVyB8fAorCQkJCXVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkKKwkJCXVyYi0+aW50ZXJ2YWwgLz0gODsKKwl9CisJcmV0dXJuIHhoY2lfcXVldWVfYnVsa190eCh4aGNpLCBHRlBfQVRPTUlDLCB1cmIsIHNsb3RfaWQsIGVwX2luZGV4KTsKK30KKwogc3RhdGljIGludCBxdWV1ZV9idWxrX3NnX3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgbWVtX2ZsYWdzLAogCQlzdHJ1Y3QgdXJiICp1cmIsIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpCiB7CkBAIC0xMzUwLDcgKzE1NjcsNyBAQAogCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICpzdGFydF90cmI7CiAJaW50IHN0YXJ0X2N5Y2xlOwogCi0JZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwX3JpbmdzW2VwX2luZGV4XTsKKwllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XS5yaW5nOwogCW51bV90cmJzID0gY291bnRfc2dfdHJic19uZWVkZWQoeGhjaSwgdXJiKTsKIAludW1fc2dzID0gdXJiLT5udW1fc2dzOwogCkBAIC0xNDgzLDcgKzE3MDAsNyBAQAogCWlmICh1cmItPnNnKQogCQlyZXR1cm4gcXVldWVfYnVsa19zZ190eCh4aGNpLCBtZW1fZmxhZ3MsIHVyYiwgc2xvdF9pZCwgZXBfaW5kZXgpOwogCi0JZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwX3JpbmdzW2VwX2luZGV4XTsKKwllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XS5yaW5nOwogCiAJbnVtX3RyYnMgPSAwOwogCS8qIEhvdyBtdWNoIGRhdGEgaXMgKHBvdGVudGlhbGx5KSBsZWZ0IGJlZm9yZSB0aGUgNjRLQiBib3VuZGFyeT8gKi8KQEAgLTE1OTQsNyArMTgxMSw3IEBACiAJdTMyIGZpZWxkLCBsZW5ndGhfZmllbGQ7CiAJc3RydWN0IHhoY2lfdGQgKnRkOwogCi0JZXBfcmluZyA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwX3JpbmdzW2VwX2luZGV4XTsKKwllcF9yaW5nID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XS5yaW5nOwogCiAJLyoKIAkgKiBOZWVkIHRvIGNvcHkgc2V0dXAgcGFja2V0IGludG8gc2V0dXAgVFJCLCBzbyB3ZSBjYW4ndCB1c2UgdGhlIHNldHVwCkBAIC0xNjc3LDEyICsxODk0LDI3IEBACiAKIC8qKioqCQlDb21tYW5kIFJpbmcgT3BlcmF0aW9ucwkJKioqKi8KIAotLyogR2VuZXJpYyBmdW5jdGlvbiBmb3IgcXVldWVpbmcgYSBjb21tYW5kIFRSQiBvbiB0aGUgY29tbWFuZCByaW5nICovCi1zdGF0aWMgaW50IHF1ZXVlX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MzIgZmllbGQxLCB1MzIgZmllbGQyLCB1MzIgZmllbGQzLCB1MzIgZmllbGQ0KQorLyogR2VuZXJpYyBmdW5jdGlvbiBmb3IgcXVldWVpbmcgYSBjb21tYW5kIFRSQiBvbiB0aGUgY29tbWFuZCByaW5nLgorICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgcm9vbSBvbiB0aGUgY29tbWFuZCByaW5nIGZvciBvbmUgY29tbWFuZCBUUkIuCisgKiBBbHNvIGNoZWNrIHRoYXQgdGhlcmUncyByb29tIHJlc2VydmVkIGZvciBjb21tYW5kcyB0aGF0IG11c3Qgbm90IGZhaWwuCisgKiBJZiB0aGlzIGlzIGEgY29tbWFuZCB0aGF0IG11c3Qgbm90IGZhaWwsIG1lYW5pbmcgY29tbWFuZF9tdXN0X3N1Y2NlZWQgPSBUUlVFLAorICogdGhlbiBvbmx5IGNoZWNrIGZvciB0aGUgbnVtYmVyIG9mIHJlc2VydmVkIHNwb3RzLgorICogRG9uJ3QgZGVjcmVtZW50IHhoY2ktPmNtZF9yaW5nX3Jlc2VydmVkX3RyYnMgYWZ0ZXIgd2UndmUgcXVldWVkIHRoZSBUUkIKKyAqIGJlY2F1c2UgdGhlIGNvbW1hbmQgZXZlbnQgaGFuZGxlciBtYXkgd2FudCB0byByZXN1Ym1pdCBhIGZhaWxlZCBjb21tYW5kLgorICovCitzdGF0aWMgaW50IHF1ZXVlX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MzIgZmllbGQxLCB1MzIgZmllbGQyLAorCQl1MzIgZmllbGQzLCB1MzIgZmllbGQ0LCBib29sIGNvbW1hbmRfbXVzdF9zdWNjZWVkKQogewotCWlmICghcm9vbV9vbl9yaW5nKHhoY2ksIHhoY2ktPmNtZF9yaW5nLCAxKSkgeworCWludCByZXNlcnZlZF90cmJzID0geGhjaS0+Y21kX3JpbmdfcmVzZXJ2ZWRfdHJiczsKKwlpZiAoIWNvbW1hbmRfbXVzdF9zdWNjZWVkKQorCQlyZXNlcnZlZF90cmJzKys7CisKKwlpZiAoIXJvb21fb25fcmluZyh4aGNpLCB4aGNpLT5jbWRfcmluZywgcmVzZXJ2ZWRfdHJicykpIHsKIAkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKIAkJCXhoY2lfZXJyKHhoY2ksICJFUlI6IE5vIHJvb20gZm9yIGNvbW1hbmQgb24gY29tbWFuZCByaW5nXG4iKTsKKwkJaWYgKGNvbW1hbmRfbXVzdF9zdWNjZWVkKQorCQkJeGhjaV9lcnIoeGhjaSwgIkVSUjogUmVzZXJ2ZWQgVFJCIGNvdW50aW5nIGZvciAiCisJCQkJCSJ1bmZhaWxhYmxlIGNvbW1hbmRzIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcXVldWVfdHJiKHhoY2ksIHhoY2ktPmNtZF9yaW5nLCBmYWxzZSwgZmllbGQxLCBmaWVsZDIsIGZpZWxkMywKQEAgLTE2OTMsNyArMTkyNSw3IEBACiAvKiBRdWV1ZSBhIG5vLW9wIGNvbW1hbmQgb24gdGhlIGNvbW1hbmQgcmluZyAqLwogc3RhdGljIGludCBxdWV1ZV9jbWRfbm9vcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7Ci0JcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwgVFJCX1RZUEUoVFJCX0NNRF9OT09QKSk7CisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwgVFJCX1RZUEUoVFJCX0NNRF9OT09QKSwgZmFsc2UpOwogfQogCiAvKgpAQCAtMTcxMiw3ICsxOTQ0LDcgQEAKIGludCB4aGNpX3F1ZXVlX3Nsb3RfY29udHJvbChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHUzMiB0cmJfdHlwZSwgdTMyIHNsb3RfaWQpCiB7CiAJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwKLQkJCVRSQl9UWVBFKHRyYl90eXBlKSB8IFNMT1RfSURfRk9SX1RSQihzbG90X2lkKSk7CisJCQlUUkJfVFlQRSh0cmJfdHlwZSkgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCksIGZhbHNlKTsKIH0KIAogLyogUXVldWUgYW4gYWRkcmVzcyBkZXZpY2UgY29tbWFuZCBUUkIgKi8KQEAgLTE3MjEsMTYgKzE5NTMsMjggQEAKIHsKIAlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCBsb3dlcl8zMl9iaXRzKGluX2N0eF9wdHIpLAogCQkJdXBwZXJfMzJfYml0cyhpbl9jdHhfcHRyKSwgMCwKLQkJCVRSQl9UWVBFKFRSQl9BRERSX0RFVikgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCkpOworCQkJVFJCX1RZUEUoVFJCX0FERFJfREVWKSB8IFNMT1RfSURfRk9SX1RSQihzbG90X2lkKSwKKwkJCWZhbHNlKTsKIH0KIAogLyogUXVldWUgYSBjb25maWd1cmUgZW5kcG9pbnQgY29tbWFuZCBUUkIgKi8KIGludCB4aGNpX3F1ZXVlX2NvbmZpZ3VyZV9lbmRwb2ludChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGRtYV9hZGRyX3QgaW5fY3R4X3B0ciwKKwkJdTMyIHNsb3RfaWQsIGJvb2wgY29tbWFuZF9tdXN0X3N1Y2NlZWQpCit7CisJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgbG93ZXJfMzJfYml0cyhpbl9jdHhfcHRyKSwKKwkJCXVwcGVyXzMyX2JpdHMoaW5fY3R4X3B0ciksIDAsCisJCQlUUkJfVFlQRShUUkJfQ09ORklHX0VQKSB8IFNMT1RfSURfRk9SX1RSQihzbG90X2lkKSwKKwkJCWNvbW1hbmRfbXVzdF9zdWNjZWVkKTsKK30KKworLyogUXVldWUgYW4gZXZhbHVhdGUgY29udGV4dCBjb21tYW5kIFRSQiAqLworaW50IHhoY2lfcXVldWVfZXZhbHVhdGVfY29udGV4dChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGRtYV9hZGRyX3QgaW5fY3R4X3B0ciwKIAkJdTMyIHNsb3RfaWQpCiB7CiAJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgbG93ZXJfMzJfYml0cyhpbl9jdHhfcHRyKSwKIAkJCXVwcGVyXzMyX2JpdHMoaW5fY3R4X3B0ciksIDAsCi0JCQlUUkJfVFlQRShUUkJfQ09ORklHX0VQKSB8IFNMT1RfSURfRk9SX1RSQihzbG90X2lkKSk7CisJCQlUUkJfVFlQRShUUkJfRVZBTF9DT05URVhUKSB8IFNMT1RfSURfRk9SX1RSQihzbG90X2lkKSwKKwkJCWZhbHNlKTsKIH0KIAogaW50IHhoY2lfcXVldWVfc3RvcF9lbmRwb2ludChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLApAQCAtMTc0MSw3ICsxOTg1LDcgQEAKIAl1MzIgdHlwZSA9IFRSQl9UWVBFKFRSQl9TVE9QX1JJTkcpOwogCiAJcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwKLQkJCXRyYl9zbG90X2lkIHwgdHJiX2VwX2luZGV4IHwgdHlwZSk7CisJCQl0cmJfc2xvdF9pZCB8IHRyYl9lcF9pbmRleCB8IHR5cGUsIGZhbHNlKTsKIH0KIAogLyogU2V0IFRyYW5zZmVyIFJpbmcgRGVxdWV1ZSBQb2ludGVyIGNvbW1hbmQuCkBAIC0xNzY1LDcgKzIwMDksNyBAQAogCX0KIAlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCBsb3dlcl8zMl9iaXRzKGFkZHIpIHwgY3ljbGVfc3RhdGUsCiAJCQl1cHBlcl8zMl9iaXRzKGFkZHIpLCAwLAotCQkJdHJiX3Nsb3RfaWQgfCB0cmJfZXBfaW5kZXggfCB0eXBlKTsKKwkJCXRyYl9zbG90X2lkIHwgdHJiX2VwX2luZGV4IHwgdHlwZSwgZmFsc2UpOwogfQogCiBpbnQgeGhjaV9xdWV1ZV9yZXNldF9lcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLApAQCAtMTc3NSw1ICsyMDE5LDYgQEAKIAl1MzIgdHJiX2VwX2luZGV4ID0gRVBfSURfRk9SX1RSQihlcF9pbmRleCk7CiAJdTMyIHR5cGUgPSBUUkJfVFlQRShUUkJfUkVTRVRfRVApOwogCi0JcmV0dXJuIHF1ZXVlX2NvbW1hbmQoeGhjaSwgMCwgMCwgMCwgdHJiX3Nsb3RfaWQgfCB0cmJfZXBfaW5kZXggfCB0eXBlKTsKKwlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCAwLCAwLCAwLCB0cmJfc2xvdF9pZCB8IHRyYl9lcF9pbmRleCB8IHR5cGUsCisJCQlmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCmluZGV4IGQzMWQzMjIuLjRiMjU0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCkBAIC01MDksNiArNTA5LDggQEAKICNkZWZpbmUgTUFYX0VYSVQJKDB4ZmZmZikKIC8qIFJvb3QgaHViIHBvcnQgbnVtYmVyIHRoYXQgaXMgbmVlZGVkIHRvIGFjY2VzcyB0aGUgVVNCIGRldmljZSAqLwogI2RlZmluZSBST09UX0hVQl9QT1JUKHApCSgoKHApICYgMHhmZikgPDwgMTYpCisvKiBNYXhpbXVtIG51bWJlciBvZiBwb3J0cyB1bmRlciBhIGh1YiBkZXZpY2UgKi8KKyNkZWZpbmUgWEhDSV9NQVhfUE9SVFMocCkJKCgocCkgJiAweGZmKSA8PCAyNCkKIAogLyogdHRfaW5mbyBiaXRtYXNrcyAqLwogLyoKQEAgLTUyMiw2ICs1MjQsNyBAQAogICogJzAnIGlmIHRoZSBkZXZpY2UgaXMgbm90IGxvdyBvciBmdWxsIHNwZWVkLgogICovCiAjZGVmaW5lIFRUX1BPUlQJCSgweGZmIDw8IDgpCisjZGVmaW5lIFRUX1RISU5LX1RJTUUocCkJKCgocCkgJiAweDMpIDw8IDE2KQogCiAvKiBkZXZfc3RhdGUgYml0bWFza3MgKi8KIC8qIFVTQiBkZXZpY2UgYWRkcmVzcyAtIGFzc2lnbmVkIGJ5IHRoZSBIQyAqLwpAQCAtNTgxLDYgKzU4NCw3IEBACiAvKiBiaXQgMTUgaXMgTGluZWFyIFN0cmVhbSBBcnJheSAqLwogLyogSW50ZXJ2YWwgLSBwZXJpb2QgYmV0d2VlbiByZXF1ZXN0cyB0byBhbiBlbmRwb2ludCAtIDEyNXUgaW5jcmVtZW50cy4gKi8KICNkZWZpbmUgRVBfSU5URVJWQUwocCkJCSgocCAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBFUF9JTlRFUlZBTF9UT19VRlJBTUVTKHApCQkoMSA8PCAoKChwKSA+PiAxNikgJiAweGZmKSkKIAogLyogZXBfaW5mbzIgYml0bWFza3MgKi8KIC8qCkBAIC01ODksNiArNTkzLDcgQEAKICAqLwogI2RlZmluZQlGT1JDRV9FVkVOVAkoMHgxKQogI2RlZmluZSBFUlJPUl9DT1VOVChwKQkoKChwKSAmIDB4MykgPDwgMSkKKyNkZWZpbmUgQ1RYX1RPX0VQX1RZUEUocCkJKCgocCkgPj4gMykgJiAweDcpCiAjZGVmaW5lIEVQX1RZUEUocCkJKChwKSA8PCAzKQogI2RlZmluZSBJU09DX09VVF9FUAkxCiAjZGVmaW5lIEJVTEtfT1VUX0VQCTIKQEAgLTYwMSw2ICs2MDYsOCBAQAogLyogYml0IDcgaXMgSG9zdCBJbml0aWF0ZSBEaXNhYmxlIC0gZm9yIGRpc2FibGluZyBzdHJlYW0gc2VsZWN0aW9uICovCiAjZGVmaW5lIE1BWF9CVVJTVChwKQkoKChwKSYweGZmKSA8PCA4KQogI2RlZmluZSBNQVhfUEFDS0VUKHApCSgoKHApJjB4ZmZmZikgPDwgMTYpCisjZGVmaW5lIE1BWF9QQUNLRVRfTUFTSwkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUgTUFYX1BBQ0tFVF9ERUNPREVEKHApCSgoKHApID4+IDE2KSAmIDB4ZmZmZikKIAogCiAvKioKQEAgLTYxNiwxMSArNjIzLDQ0IEBACiAJdTMyCXJzdmQyWzZdOwogfTsKIAorLyogUmVwcmVzZW50cyBldmVyeXRoaW5nIHRoYXQgaXMgbmVlZGVkIHRvIGlzc3VlIGEgY29tbWFuZCBvbiB0aGUgY29tbWFuZCByaW5nLgorICogSXQncyB1c2VmdWwgdG8gcHJlLWFsbG9jYXRlIHRoZXNlIGZvciBjb21tYW5kcyB0aGF0IGNhbm5vdCBmYWlsIGR1ZSB0bworICogb3V0LW9mLW1lbW9yeSBlcnJvcnMsIGxpa2UgZnJlZWluZyBzdHJlYW1zLgorICovCitzdHJ1Y3QgeGhjaV9jb21tYW5kIHsKKwkvKiBJbnB1dCBjb250ZXh0IGZvciBjaGFuZ2luZyBkZXZpY2Ugc3RhdGUgKi8KKwlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4CSppbl9jdHg7CisJdTMyCQkJCXN0YXR1czsKKwkvKiBJZiBjb21wbGV0aW9uIGlzIG51bGwsIG5vIG9uZSBpcyB3YWl0aW5nIG9uIHRoaXMgY29tbWFuZAorCSAqIGFuZCB0aGUgc3RydWN0dXJlIGNhbiBiZSBmcmVlZCBhZnRlciB0aGUgY29tbWFuZCBjb21wbGV0ZXMuCisJICovCisJc3RydWN0IGNvbXBsZXRpb24JCSpjb21wbGV0aW9uOworCXVuaW9uIHhoY2lfdHJiCQkJKmNvbW1hbmRfdHJiOworCXN0cnVjdCBsaXN0X2hlYWQJCWNtZF9saXN0OworfTsKKwogLyogZHJvcCBjb250ZXh0IGJpdG1hc2tzICovCiAjZGVmaW5lCURST1BfRVAoeCkJKDB4MSA8PCB4KQogLyogYWRkIGNvbnRleHQgYml0bWFza3MgKi8KICNkZWZpbmUJQUREX0VQKHgpCSgweDEgPDwgeCkKIAorc3RydWN0IHhoY2lfdmlydF9lcCB7CisJc3RydWN0IHhoY2lfcmluZwkJKnJpbmc7CisJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgaW4gY2FzZSB0aGUgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgZmFpbHMgYW5kIHdlCisJICogaGF2ZSB0byByZXN0b3JlIHRoZSBkZXZpY2Ugc3RhdGUgdG8gdGhlIHByZXZpb3VzIHN0YXRlCisJICovCisJc3RydWN0IHhoY2lfcmluZwkJKm5ld19yaW5nOworCXVuc2lnbmVkIGludAkJCWVwX3N0YXRlOworI2RlZmluZSBTRVRfREVRX1BFTkRJTkcJCSgxIDw8IDApCisjZGVmaW5lIEVQX0hBTFRFRAkJKDEgPDwgMSkKKwkvKiAtLS0tICBSZWxhdGVkIHRvIFVSQiBjYW5jZWxsYXRpb24gLS0tLSAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2FuY2VsbGVkX3RkX2xpc3Q7CisJdW5zaWduZWQgaW50CQljYW5jZWxzX3BlbmRpbmc7CisJLyogVGhlIFRSQiB0aGF0IHdhcyBsYXN0IHJlcG9ydGVkIGluIGEgc3RvcHBlZCBlbmRwb2ludCByaW5nICovCisJdW5pb24geGhjaV90cmIJCSpzdG9wcGVkX3RyYjsKKwlzdHJ1Y3QgeGhjaV90ZAkJKnN0b3BwZWRfdGQ7Cit9OworCiBzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSB7CiAJLyoKIAkgKiBDb21tYW5kcyB0byB0aGUgaGFyZHdhcmUgYXJlIHBhc3NlZCBhbiAiaW5wdXQgY29udGV4dCIgdGhhdApAQCAtNjMzLDE2ICs2NzMsMTEgQEAKIAlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICAgICAgICpvdXRfY3R4OwogCS8qIFVzZWQgZm9yIGFkZHJlc3NpbmcgZGV2aWNlcyBhbmQgY29uZmlndXJhdGlvbiBjaGFuZ2VzICovCiAJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAgICAgICAqaW5fY3R4OwotCi0JLyogRklYTUUgd2hlbiBzdHJlYW0gc3VwcG9ydCBpcyBhZGRlZCAqLwotCXN0cnVjdCB4aGNpX3JpbmcJCSplcF9yaW5nc1szMV07Ci0JLyogVGVtcG9yYXJ5IHN0b3JhZ2UgaW4gY2FzZSB0aGUgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgZmFpbHMgYW5kIHdlCi0JICogaGF2ZSB0byByZXN0b3JlIHRoZSBkZXZpY2Ugc3RhdGUgdG8gdGhlIHByZXZpb3VzIHN0YXRlCi0JICovCi0Jc3RydWN0IHhoY2lfcmluZwkJKm5ld19lcF9yaW5nc1szMV07CisJc3RydWN0IHhoY2lfdmlydF9lcAkJZXBzWzMxXTsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJY21kX2NvbXBsZXRpb247CiAJLyogU3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgaXNzdWVkIGZvciB0aGlzIGRldmljZSAqLwogCXUzMgkJCQljbWRfc3RhdHVzOworCXN0cnVjdCBsaXN0X2hlYWQJCWNtZF9saXN0OwogfTsKIAogCkBAIC05MDUsNiArOTQwLDggQEAKICAqIEl0IG11c3QgYWxzbyBiZSBncmVhdGVyIHRoYW4gMTYuCiAgKi8KICNkZWZpbmUgVFJCU19QRVJfU0VHTUVOVAk2NAorLyogQWxsb3cgdHdvIGNvbW1hbmRzICsgYSBsaW5rIFRSQiwgYWxvbmcgd2l0aCBhbnkgcmVzZXJ2ZWQgY29tbWFuZCBUUkJzICovCisjZGVmaW5lIE1BWF9SU1ZEX0NNRF9UUkJTCShUUkJTX1BFUl9TRUdNRU5UIC0gMykKICNkZWZpbmUgU0VHTUVOVF9TSVpFCQkoVFJCU19QRVJfU0VHTUVOVCoxNikKIC8qIFRSQiBidWZmZXIgcG9pbnRlcnMgY2FuJ3QgY3Jvc3MgNjRLQiBib3VuZGFyaWVzICovCiAjZGVmaW5lIFRSQl9NQVhfQlVGRl9TSElGVAkJMTYKQEAgLTkyNiw2ICs5NjMsMTIgQEAKIAl1bmlvbiB4aGNpX3RyYgkJKmxhc3RfdHJiOwogfTsKIAorc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSB7CisJc3RydWN0IHhoY2lfc2VnbWVudCAqbmV3X2RlcV9zZWc7CisJdW5pb24geGhjaV90cmIgKm5ld19kZXFfcHRyOworCWludCBuZXdfY3ljbGVfc3RhdGU7Cit9OworCiBzdHJ1Y3QgeGhjaV9yaW5nIHsKIAlzdHJ1Y3QgeGhjaV9zZWdtZW50CSpmaXJzdF9zZWc7CiAJdW5pb24gIHhoY2lfdHJiCQkqZW5xdWV1ZTsKQEAgLTkzNSwxNSArOTc4LDYgQEAKIAlzdHJ1Y3QgeGhjaV9zZWdtZW50CSpkZXFfc2VnOwogCXVuc2lnbmVkIGludAkJZGVxX3VwZGF0ZXM7CiAJc3RydWN0IGxpc3RfaGVhZAl0ZF9saXN0OwotCS8qIC0tLS0gIFJlbGF0ZWQgdG8gVVJCIGNhbmNlbGxhdGlvbiAtLS0tICovCi0Jc3RydWN0IGxpc3RfaGVhZAljYW5jZWxsZWRfdGRfbGlzdDsKLQl1bnNpZ25lZCBpbnQJCWNhbmNlbHNfcGVuZGluZzsKLQl1bnNpZ25lZCBpbnQJCXN0YXRlOwotI2RlZmluZSBTRVRfREVRX1BFTkRJTkcJCSgxIDw8IDApCi0jZGVmaW5lIEVQX0hBTFRFRAkJKDEgPDwgMSkKLQkvKiBUaGUgVFJCIHRoYXQgd2FzIGxhc3QgcmVwb3J0ZWQgaW4gYSBzdG9wcGVkIGVuZHBvaW50IHJpbmcgKi8KLQl1bmlvbiB4aGNpX3RyYgkJKnN0b3BwZWRfdHJiOwotCXN0cnVjdCB4aGNpX3RkCQkqc3RvcHBlZF90ZDsKIAkvKgogCSAqIFdyaXRlIHRoZSBjeWNsZSBzdGF0ZSBpbnRvIHRoZSBUUkIgY3ljbGUgZmllbGQgdG8gZ2l2ZSBvd25lcnNoaXAgb2YKIAkgKiB0aGUgVFJCIHRvIHRoZSBob3N0IGNvbnRyb2xsZXIgKGlmIHdlIGFyZSB0aGUgcHJvZHVjZXIpLCBvciB0byBjaGVjawpAQCAtOTUyLDEyICs5ODYsNiBAQAogCXUzMgkJCWN5Y2xlX3N0YXRlOwogfTsKIAotc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSB7Ci0Jc3RydWN0IHhoY2lfc2VnbWVudCAqbmV3X2RlcV9zZWc7Ci0JdW5pb24geGhjaV90cmIgKm5ld19kZXFfcHRyOwotCWludCBuZXdfY3ljbGVfc3RhdGU7Ci19OwotCiBzdHJ1Y3QgeGhjaV9lcnN0X2VudHJ5IHsKIAkvKiA2NC1iaXQgZXZlbnQgcmluZyBzZWdtZW50IGFkZHJlc3MgKi8KIAl1NjQJc2VnX2FkZHI7CkBAIC0xMDM0LDYgKzEwNjIsNyBAQAogCS8qIGRhdGEgc3RydWN0dXJlcyAqLwogCXN0cnVjdCB4aGNpX2RldmljZV9jb250ZXh0X2FycmF5ICpkY2JhYTsKIAlzdHJ1Y3QgeGhjaV9yaW5nCSpjbWRfcmluZzsKKwl1bnNpZ25lZCBpbnQJCWNtZF9yaW5nX3Jlc2VydmVkX3RyYnM7CiAJc3RydWN0IHhoY2lfcmluZwkqZXZlbnRfcmluZzsKIAlzdHJ1Y3QgeGhjaV9lcnN0CWVyc3Q7CiAJLyogU2NyYXRjaHBhZCAqLwpAQCAtMTA1OCw2ICsxMDg3LDkgQEAKIAlpbnQJCQlub29wc19zdWJtaXR0ZWQ7CiAJaW50CQkJbm9vcHNfaGFuZGxlZDsKIAlpbnQJCQllcnJvcl9iaXRtYXNrOworCXVuc2lnbmVkIGludAkJcXVpcmtzOworI2RlZmluZQlYSENJX0xJTktfVFJCX1FVSVJLCSgxIDw8IDApCisjZGVmaW5lIFhIQ0lfUkVTRVRfRVBfUVVJUksJKDEgPDwgMSkKIH07CiAKIC8qIEZvciB0ZXN0aW5nIHB1cnBvc2VzICovCkBAIC0xMTM2LDYgKzExNjgsMTMgQEAKIAl3cml0ZWwodmFsX2hpLCBwdHIgKyAxKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgeGhjaV9saW5rX3RyYl9xdWlyayhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCit7CisJdTMyIHRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5jYXBfcmVncy0+aGNfY2FwYmFzZSk7CisJcmV0dXJuICgoSENfVkVSU0lPTih0ZW1wKSA9PSAweDk1KSAmJgorCQkJKHhoY2ktPnF1aXJrcyAmIFhIQ0lfTElOS19UUkJfUVVJUkspKTsKK30KKwogLyogeEhDSSBkZWJ1Z2dpbmcgKi8KIHZvaWQgeGhjaV9wcmludF9pcl9zZXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9pbnRyX3JlZyAqaXJfc2V0LCBpbnQgc2V0X251bSk7CiB2b2lkIHhoY2lfcHJpbnRfcmVnaXN0ZXJzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CkBAIC0xMTUwLDcgKzExODksNyBAQAogdm9pZCB4aGNpX2RiZ19yaW5nX3B0cnMoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKTsKIHZvaWQgeGhjaV9kYmdfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgbGFzdF9lcCk7CiAKLS8qIHhIQ0kgbWVtb3J5IG1hbmFnbWVudCAqLworLyogeEhDSSBtZW1vcnkgbWFuYWdlbWVudCAqLwogdm9pZCB4aGNpX21lbV9jbGVhbnVwKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiBpbnQgeGhjaV9tZW1faW5pdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IGZsYWdzKTsKIHZvaWQgeGhjaV9mcmVlX3ZpcnRfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgaW50IHNsb3RfaWQpOwpAQCAtMTE1OCwxMSArMTE5NywyNCBAQAogaW50IHhoY2lfc2V0dXBfYWRkcmVzc2FibGVfdmlydF9kZXYoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiB1bnNpZ25lZCBpbnQgeGhjaV9nZXRfZW5kcG9pbnRfaW5kZXgoc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKTsKIHVuc2lnbmVkIGludCB4aGNpX2dldF9lbmRwb2ludF9mbGFnKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYyk7Cit1bnNpZ25lZCBpbnQgeGhjaV9nZXRfZW5kcG9pbnRfZmxhZ19mcm9tX2luZGV4KHVuc2lnbmVkIGludCBlcF9pbmRleCk7Cit1bnNpZ25lZCBpbnQgeGhjaV9sYXN0X3ZhbGlkX2VuZHBvaW50KHUzMiBhZGRlZF9jdHhzKTsKIHZvaWQgeGhjaV9lbmRwb2ludF96ZXJvKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKTsKK3ZvaWQgeGhjaV9lbmRwb2ludF9jb3B5KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqaW5fY3R4LAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpvdXRfY3R4LAorCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwordm9pZCB4aGNpX3Nsb3RfY29weShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmluX2N0eCwKKwkJc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqb3V0X2N0eCk7CiBpbnQgeGhjaV9lbmRwb2ludF9pbml0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2LAogCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKIAkJZ2ZwX3QgbWVtX2ZsYWdzKTsKIHZvaWQgeGhjaV9yaW5nX2ZyZWUoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKTsKK3N0cnVjdCB4aGNpX2NvbW1hbmQgKnhoY2lfYWxsb2NfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCWJvb2wgYWxsb2NhdGVfY29tcGxldGlvbiwgZ2ZwX3QgbWVtX2ZsYWdzKTsKK3ZvaWQgeGhjaV9mcmVlX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIC8qIHhIQ0kgUENJIGdsdWUgKi8KQEAgLTExODIsNiArMTIzNCw4IEBACiBpbnQgeGhjaV9hbGxvY19kZXYoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogdm9pZCB4aGNpX2ZyZWVfZGV2KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIGludCB4aGNpX2FkZHJlc3NfZGV2aWNlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKK2ludCB4aGNpX3VwZGF0ZV9odWJfZGV2aWNlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LAorCQkJc3RydWN0IHVzYl90dCAqdHQsIGdmcF90IG1lbV9mbGFncyk7CiBpbnQgeGhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IG1lbV9mbGFncyk7CiBpbnQgeGhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOwogaW50IHhoY2lfYWRkX2VuZHBvaW50KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKTsKQEAgLTEyMDUsNyArMTI1OSwxMSBAQAogCQlpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4KTsKIGludCB4aGNpX3F1ZXVlX2J1bGtfdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsIHN0cnVjdCB1cmIgKnVyYiwKIAkJaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCk7CitpbnQgeGhjaV9xdWV1ZV9pbnRyX3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgbWVtX2ZsYWdzLCBzdHJ1Y3QgdXJiICp1cmIsCisJCWludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwogaW50IHhoY2lfcXVldWVfY29uZmlndXJlX2VuZHBvaW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAorCQl1MzIgc2xvdF9pZCwgYm9vbCBjb21tYW5kX211c3Rfc3VjY2VlZCk7CitpbnQgeGhjaV9xdWV1ZV9ldmFsdWF0ZV9jb250ZXh0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAogCQl1MzIgc2xvdF9pZCk7CiBpbnQgeGhjaV9xdWV1ZV9yZXNldF9lcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOwpAQCAtMTIxMyw4ICsxMjcxLDEzIEBACiAJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCiAJCXN0cnVjdCB4aGNpX3RkICpjdXJfdGQsIHN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKnN0YXRlKTsKIHZvaWQgeGhjaV9xdWV1ZV9uZXdfZGVxdWV1ZV9zdGF0ZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3JpbmcsIHVuc2lnbmVkIGludCBzbG90X2lkLAotCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgsIHN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSk7CisJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCisJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSk7Cit2b2lkIHhoY2lfY2xlYW51cF9zdGFsbGVkX3Jpbmcoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdW5zaWduZWQgaW50IGVwX2luZGV4KTsKK3ZvaWQgeGhjaV9xdWV1ZV9jb25maWdfZXBfcXVpcmsoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAorCQlzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpkZXFfc3RhdGUpOwogCiAvKiB4SENJIHJvb3RodWIgY29kZSAqLwogaW50IHhoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsIHUxNiB3SW5kZXgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwppbmRleCA0NTQxZGZjLi40NTlhNzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKQEAgLTY1MywzMyArNjUzLDYgQEAKIAkubWF4X3NlY3RvcnM9CQkyNTYsIC8qIDEyOCBLICovCiB9OwogCi1zdHJ1Y3QgdmVuZG9yX3Byb2R1Y3QKLXsKLQljaGFyKiBuYW1lOwotCWVudW0KLQl7Ci0JCW10c19zdXBfdW5rbm93bj0wLAotCQltdHNfc3VwX2FscGhhLAotCQltdHNfc3VwX2Z1bGwKLQl9Ci0Jc3VwcG9ydF9zdGF0dXM7Ci19IDsKLQotCi0vKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSB0aGUgbXNtVVNCLmluZiBmaWxlIG9uIHRoZSBXaW5kb3dzIGRyaXZlciBDRCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB2ZW5kb3JfcHJvZHVjdCBtdHNfc3VwcG9ydGVkX3Byb2R1Y3RzW10gPQotewotCXsgIlBoYW50b20gMzM2Q1giLAltdHNfc3VwX3Vua25vd259LAotCXsgIlBoYW50b20gMzM2Q1giLAltdHNfc3VwX3Vua25vd259LAotCXsgIlNjYW5tYWtlciBYNiIsCW10c19zdXBfYWxwaGF9LAotCXsgIlBoYW50b20gQzYiLAkJbXRzX3N1cF91bmtub3dufSwKLQl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKLQl7ICJTY2FuTWFrZXIgVjZVU0wiLAltdHNfc3VwX3Vua25vd259LAotCXsgIlNjYW5NYWtlciBWNlVTTCIsCW10c19zdXBfdW5rbm93bn0sCi0JeyAiU2Nhbm1ha2VyIFY2VUwiLAltdHNfc3VwX3Vua25vd259LAotCXsgIlNjYW5tYWtlciBWNlVQTCIsCW10c19zdXBfYWxwaGF9LAotfTsKLQogLyogVGhlIGVudHJpZXMgb2YgbWljcm90ZWtfdGFibGUgbXVzdCBjb3JyZXNwb25kLCBsaW5lLWJ5LWxpbmUgdG8KICAgIHRoZSBlbnRyaWVzIG9mIG10c19zdXBwb3J0ZWRfcHJvZHVjdHNbXS4gKi8KIApAQCAtNzExLDcgKzY4NCw2IEBACiAJaW50IGVycl9yZXR2YWwgPSAtRU5PTUVNOwogCiAJc3RydWN0IG10c19kZXNjICogbmV3X2Rlc2M7Ci0Jc3RydWN0IHZlbmRvcl9wcm9kdWN0IGNvbnN0KiBwOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKIAogCS8qIHRoZSBjdXJyZW50IGFsdHNldHRpbmcgb24gdGhlIGludGVyZmFjZSB3ZSdyZSBwcm9iaW5nICovCkBAIC03MjYsMTUgKzY5OCw2IEBACiAKIAlNVFNfREVCVUdfR09UX0hFUkUoKTsKIAotCXAgPSAmbXRzX3N1cHBvcnRlZF9wcm9kdWN0c1tpZCAtIG10c191c2JfaWRzXTsKLQotCU1UU19ERUJVR19HT1RfSEVSRSgpOwotCi0JTVRTX0RFQlVHKCAiZm91bmQgbW9kZWwgJXNcbiIsIHAtPm5hbWUgKTsKLQlpZiAoIHAtPnN1cHBvcnRfc3RhdHVzICE9IG10c19zdXBfZnVsbCApCi0JCU1UU19NRVNTQUdFKCAibW9kZWwgJXMgaXMgbm90IGtub3duIHRvIGJlIGZ1bGx5IHN1cHBvcnRlZCwgcmVwb3J0cyB3ZWxjb21lIVxuIiwKLQkJCSAgICAgcC0+bmFtZSApOwotCiAJLyogdGhlIGN1cnJlbnQgYWx0c2V0dGluZyBvbiB0aGUgaW50ZXJmYWNlIHdlJ3JlIHByb2JpbmcgKi8KIAlhbHRzZXR0aW5nID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKaW5kZXggNmRhODg4Ny4uMTMzN2E5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKQEAgLTk2LDYgKzk2LDggQEAKIAkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogCiBzdGF0aWMgdm9pZCBpZG1vdXNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgaW50IGlkbW91c2Vfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOworc3RhdGljIGludCBpZG1vdXNlX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAKIC8qIGZpbGUgb3BlcmF0aW9uIHBvaW50ZXJzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZG1vdXNlX2ZvcHMgPSB7CkBAIC0xMTcsNyArMTE5LDExIEBACiAJLm5hbWUgPSBEUklWRVJfU0hPUlQsCiAJLnByb2JlID0gaWRtb3VzZV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGlkbW91c2VfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9IGlkbW91c2Vfc3VzcGVuZCwKKwkucmVzdW1lID0gaWRtb3VzZV9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9IGlkbW91c2VfcmVzdW1lLAogCS5pZF90YWJsZSA9IGlkbW91c2VfdGFibGUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKIH07CiAKIHN0YXRpYyBpbnQgaWRtb3VzZV9jcmVhdGVfaW1hZ2Uoc3RydWN0IHVzYl9pZG1vdXNlICpkZXYpCkBAIC0xOTcsNiArMjAzLDE3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogUE0gb3BlcmF0aW9ucyBhcmUgbm9wcyBhcyB0aGlzIGRyaXZlciBkb2VzIElPIG9ubHkgZHVyaW5nIG9wZW4oKSAqLworc3RhdGljIGludCBpZG1vdXNlX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkbW91c2VfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRtb3VzZV9kZWxldGUoc3RydWN0IHVzYl9pZG1vdXNlICpkZXYpCiB7CiAJa2ZyZWUoZGV2LT5idWxrX2luX2J1ZmZlcik7CkBAIC0yMzUsOSArMjUyLDEzIEBACiAJfSBlbHNlIHsKIAogCQkvKiBjcmVhdGUgYSBuZXcgaW1hZ2UgYW5kIGNoZWNrIGZvciBzdWNjZXNzICovCisJCXJlc3VsdCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShpbnRlcmZhY2UpOworCQlpZiAocmVzdWx0KQorCQkJZ290byBlcnJvcjsKIAkJcmVzdWx0ID0gaWRtb3VzZV9jcmVhdGVfaW1hZ2UgKGRldik7CiAJCWlmIChyZXN1bHQpCiAJCQlnb3RvIGVycm9yOworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoaW50ZXJmYWNlKTsKIAogCQkvKiBpbmNyZW1lbnQgb3VyIHVzYWdlIGNvdW50IGZvciB0aGUgZHJpdmVyICovCiAJCSsrZGV2LT5vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKaW5kZXggOTBlMWE4ZC4uZTc1YmI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCkBAIC03MjcsNyArNzI3LDcgQEAKIAkucG9sbCA9IGlvd2Fycmlvcl9wb2xsLAogfTsKIAotc3RhdGljIGNoYXIgKmlvd2Fycmlvcl9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqaW93YXJyaW9yX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAidXNiLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CkBAIC03MzgsNyArNzM4LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGlvd2Fycmlvcl9jbGFzcyA9IHsKIAkubmFtZSA9ICJpb3dhcnJpb3IlZCIsCi0JLm5vZGVuYW1lID0gaW93YXJyaW9yX25vZGVuYW1lLAorCS5kZXZub2RlID0gaW93YXJyaW9yX2Rldm5vZGUsCiAJLmZvcHMgPSAmaW93YXJyaW9yX2ZvcHMsCiAJLm1pbm9yX2Jhc2UgPSBJT1dBUlJJT1JfTUlOT1JfQkFTRSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKaW5kZXggYWQ0ZmIxNS4uOTBmMTMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwpAQCAtNDEyLDYgKzQxMiw5IEBACiAKIAlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwlpZiAoIWRldi0+aW50ZikKKwkJcmV0dXJuIFBPTExFUlIgfCBQT0xMSFVQOworCiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPnJlYWRfd2FpdCwgd2FpdCk7CiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPndyaXRlX3dhaXQsIHdhaXQpOwogCkBAIC03NjcsNiArNzcwLDkgQEAKIAkJbGRfdXNiX2RlbGV0ZShkZXYpOwogCX0gZWxzZSB7CiAJCWRldi0+aW50ZiA9IE5VTEw7CisJCS8qIHdha2UgdXAgcG9sbGVycyAqLworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZkZXYtPnJlYWRfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJmRldi0+d3JpdGVfd2FpdCk7CiAJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwppbmRleCBjMWUyNDMzLi5mYWE2ZDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCS5sbHNlZWsgPQl0b3dlcl9sbHNlZWssCiB9OwogCi1zdGF0aWMgY2hhciAqbGVnb3VzYnRvd2VyX25vZGVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBjaGFyICpsZWdvdXNidG93ZXJfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJ1c2IvJXMiLCBkZXZfbmFtZShkZXYpKTsKIH0KQEAgLTI3Nyw3ICsyNzcsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdG93ZXJfY2xhc3MgPSB7CiAJLm5hbWUgPQkJImxlZ291c2J0b3dlciVkIiwKLQkubm9kZW5hbWUgPSAJbGVnb3VzYnRvd2VyX25vZGVuYW1lLAorCS5kZXZub2RlID0gCWxlZ291c2J0b3dlcl9kZXZub2RlLAogCS5mb3BzID0JCSZ0b3dlcl9mb3BzLAogCS5taW5vcl9iYXNlID0JTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSwKIH07CkBAIC01NTIsNiArNTUyLDkgQEAKIAogCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWlmICghZGV2LT51ZGV2KQorCQlyZXR1cm4gUE9MTEVSUiB8IFBPTExIVVA7CisKIAlwb2xsX3dhaXQoZmlsZSwgJmRldi0+cmVhZF93YWl0LCB3YWl0KTsKIAlwb2xsX3dhaXQoZmlsZSwgJmRldi0+d3JpdGVfd2FpdCwgd2FpdCk7CiAKQEAgLTEwMjUsNiArMTAyOCw5IEBACiAJCXRvd2VyX2RlbGV0ZSAoZGV2KTsKIAl9IGVsc2UgewogCQlkZXYtPnVkZXYgPSBOVUxMOworCQkvKiB3YWtlIHVwIHBvbGxlcnMgKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmZGV2LT5yZWFkX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZkZXYtPndyaXRlX3dhaXQpOwogCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IGI0ZWM3MTYuLjAwMjU4NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC03OSwxNCArNzksMTIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1PQlVGUzsgaSsrKSB7CiAJCWlmIChzaXN1c2ItPm9idWZbaV0pIHsKLQkJCXVzYl9idWZmZXJfZnJlZShzaXN1c2ItPnNpc3VzYl9kZXYsIHNpc3VzYi0+b2J1ZnNpemUsCi0JCQkJc2lzdXNiLT5vYnVmW2ldLCBzaXN1c2ItPnRyYW5zZmVyX2RtYV9vdXRbaV0pOworCQkJa2ZyZWUoc2lzdXNiLT5vYnVmW2ldKTsKIAkJCXNpc3VzYi0+b2J1ZltpXSA9IE5VTEw7CiAJCX0KIAl9CiAJaWYgKHNpc3VzYi0+aWJ1ZikgewotCQl1c2JfYnVmZmVyX2ZyZWUoc2lzdXNiLT5zaXN1c2JfZGV2LCBzaXN1c2ItPmlidWZzaXplLAotCQkJc2lzdXNiLT5pYnVmLCBzaXN1c2ItPnRyYW5zZmVyX2RtYV9pbik7CisJCWtmcmVlKHNpc3VzYi0+aWJ1Zik7CiAJCXNpc3VzYi0+aWJ1ZiA9IE5VTEw7CiAJfQogfQpAQCAtMjMwLDggKzIyOCw3IEBACiAKIHN0YXRpYyBpbnQKIHNpc3VzYl9idWxrb3V0X21zZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBpbmRleCwgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsCi0JCWludCBsZW4sIGludCAqYWN0dWFsX2xlbmd0aCwgaW50IHRpbWVvdXQsIHVuc2lnbmVkIGludCB0ZmxhZ3MsCi0JCWRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hKQorCQlpbnQgbGVuLCBpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgdGZsYWdzKQogewogCXN0cnVjdCB1cmIgKnVyYiA9IHNpc3VzYi0+c2lzdXJib3V0W2luZGV4XTsKIAlpbnQgcmV0dmFsLCBieXRlc3dyaXR0ZW4gPSAwOwpAQCAtMjQ1LDkgKzI0Miw2IEBACiAJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSB0ZmxhZ3M7CiAJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAotCWlmICgodXJiLT50cmFuc2Zlcl9kbWEgPSB0cmFuc2Zlcl9kbWEpKQotCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCiAJLyogU2V0IHVwIGNvbnRleHQgKi8KIAlzaXN1c2ItPnVyYm91dF9jb250ZXh0W2luZGV4XS5hY3R1YWxfbGVuZ3RoID0gKHRpbWVvdXQpID8KIAkJCQkJCU5VTEwgOiBhY3R1YWxfbGVuZ3RoOwpAQCAtMjk3LDggKzI5MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNpc3VzYl9idWxraW5fbXNnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsIGludCBsZW4sCi0JCWludCAqYWN0dWFsX2xlbmd0aCwgaW50IHRpbWVvdXQsIHVuc2lnbmVkIGludCB0ZmxhZ3MsIGRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hKQorc2lzdXNiX2J1bGtpbl9tc2coc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCB1bnNpZ25lZCBpbnQgcGlwZSwgdm9pZCAqZGF0YSwKKwlpbnQgbGVuLCBpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgdGZsYWdzKQogewogCXN0cnVjdCB1cmIgKnVyYiA9IHNpc3VzYi0+c2lzdXJiaW47CiAJaW50IHJldHZhbCwgcmVhZGJ5dGVzID0gMDsKQEAgLTMxMSw5ICszMDUsNiBAQAogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gdGZsYWdzOwogCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAKLQlpZiAoKHVyYi0+dHJhbnNmZXJfZG1hID0gdHJhbnNmZXJfZG1hKSkKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQogCXNpc3VzYi0+Y29tcGxldGVpbiA9IDA7CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsID09IDApIHsKQEAgLTQyMiw4ICs0MTMsNyBAQAogCQkJCQkJdGhpc3Bhc3MsCiAJCQkJCQkmdHJhbnNmZXJyZWRfbGVuLAogCQkJCQkJYXN5bmMgPyAwIDogNSAqIEhaLAotCQkJCQkJdGZsYWdzLAotCQkJCQkJc2lzdXNiLT50cmFuc2Zlcl9kbWFfb3V0W2luZGV4XSk7CisJCQkJCQl0ZmxhZ3MpOwogCiAJCQlpZiAocmVzdWx0ID09IC1FVElNRURPVVQpIHsKIApAQCAtNDMyLDI5ICs0MjIsMTYgQEAKIAkJCQkJcmV0dXJuIC1FVElNRTsKIAogCQkJCWNvbnRpbnVlOworCQkJfQogCi0JCQl9IGVsc2UgaWYgKChyZXN1bHQgPT0gMCkgJiYgIWFzeW5jICYmIHRyYW5zZmVycmVkX2xlbikgeworCQkJaWYgKChyZXN1bHQgPT0gMCkgJiYgIWFzeW5jICYmIHRyYW5zZmVycmVkX2xlbikgewogCiAJCQkJdGhpc3Bhc3MgLT0gdHJhbnNmZXJyZWRfbGVuOwotCQkJCWlmICh0aGlzcGFzcykgewotCQkJCQlpZiAoc2lzdXNiLT50cmFuc2Zlcl9kbWFfb3V0KSB7Ci0JCQkJCQkvKiBJZiBETUEsIGNvcHkgcmVtYWluaW5nCi0JCQkJCQkgKiB0byBiZWdpbm5pbmcgb2YgYnVmZmVyCi0JCQkJCQkgKi8KLQkJCQkJCW1lbWNweShidWZmZXIsCi0JCQkJCQkgICAgICAgYnVmZmVyICsgdHJhbnNmZXJyZWRfbGVuLAotCQkJCQkJICAgICAgIHRoaXNwYXNzKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIElmIG5vdCBETUEsIHNpbXBseSBpbmNyZWFzZQotCQkJCQkJICogdGhlIHBvaW50ZXIKLQkJCQkJCSAqLwotCQkJCQkJYnVmZmVyICs9IHRyYW5zZmVycmVkX2xlbjsKLQkJCQkJfQotCQkJCX0KKwkJCQlidWZmZXIgKz0gdHJhbnNmZXJyZWRfbGVuOwogCiAJCQl9IGVsc2UKIAkJCQlicmVhazsKLQkJfTsKKwkJfQogCiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwpAQCAtNTMwLDggKzUwNyw3IEBACiAJCQkJCSAgIHRoaXNwYXNzLAogCQkJCQkgICAmdHJhbnNmZXJyZWRfbGVuLAogCQkJCQkgICA1ICogSFosCi0JCQkJCSAgIHRmbGFncywKLQkJCQkJICAgc2lzdXNiLT50cmFuc2Zlcl9kbWFfaW4pOworCQkJCQkgICB0ZmxhZ3MpOwogCiAJCWlmICh0cmFuc2ZlcnJlZF9sZW4pCiAJCQl0aGlzcGFzcyA9IHRyYW5zZmVycmVkX2xlbjsKQEAgLTMxMzIsOCArMzEwOCw3IEBACiAKIAkvKiBBbGxvY2F0ZSBidWZmZXJzICovCiAJc2lzdXNiLT5pYnVmc2l6ZSA9IFNJU1VTQl9JQlVGX1NJWkU7Ci0JaWYgKCEoc2lzdXNiLT5pYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFNJU1VTQl9JQlVGX1NJWkUsCi0JCQkJCUdGUF9LRVJORUwsICZzaXN1c2ItPnRyYW5zZmVyX2RtYV9pbikpKSB7CisJaWYgKCEoc2lzdXNiLT5pYnVmID0ga21hbGxvYyhTSVNVU0JfSUJVRl9TSVpFLCBHRlBfS0VSTkVMKSkpIHsKIAkJZGV2X2Vycigmc2lzdXNiLT5zaXN1c2JfZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpbnB1dCBidWZmZXIiKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl8yOwpAQCAtMzE0Miw5ICszMTE3LDcgQEAKIAlzaXN1c2ItPm51bW9idWZzID0gMDsKIAlzaXN1c2ItPm9idWZzaXplID0gU0lTVVNCX09CVUZfU0laRTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNT0JVRlM7IGkrKykgewotCQlpZiAoIShzaXN1c2ItPm9idWZbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgU0lTVVNCX09CVUZfU0laRSwKLQkJCQkJR0ZQX0tFUk5FTCwKLQkJCQkJJnNpc3VzYi0+dHJhbnNmZXJfZG1hX291dFtpXSkpKSB7CisJCWlmICghKHNpc3VzYi0+b2J1ZltpXSA9IGttYWxsb2MoU0lTVVNCX09CVUZfU0laRSwgR0ZQX0tFUk5FTCkpKSB7CiAJCQlpZiAoaSA9PSAwKSB7CiAJCQkJZGV2X2Vycigmc2lzdXNiLT5zaXN1c2JfZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyXG4iKTsKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmggYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaAppbmRleCBjZjBiNGE1Li41NTQ5MmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaApAQCAtMTIzLDggKzEyMyw2IEBACiAJaW50IG51bW9idWZzOwkJLyogbnVtYmVyIG9mIG9idWZzID0gbnVtYmVyIG9mIG91dCB1cmJzICovCiAJY2hhciAqb2J1ZltOVU1PQlVGU10sICppYnVmOwkvKiB0cmFuc2ZlciBidWZmZXJzICovCiAJaW50IG9idWZzaXplLCBpYnVmc2l6ZTsKLQlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYV9vdXRbTlVNT0JVRlNdOwotCWRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hX2luOwogCXN0cnVjdCB1cmIgKnNpc3VyYm91dFtOVU1PQlVGU107CiAJc3RydWN0IHVyYiAqc2lzdXJiaW47CiAJdW5zaWduZWQgY2hhciB1cmJzdGF0dXNbTlVNT0JVRlNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKaW5kZXggMjhhNmEzYS4uM2RiMjU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jCkBAIC0zOCw2ICszOCw3IEBACiAKIHN0cnVjdCB1c2Jfc2V2c2VnZGV2IHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAogCXU4IHBvd2VyZWQ7CiAJdTggbW9kZV9tc2I7CkBAIC00Niw2ICs0Nyw4IEBACiAJdTggdGV4dG1vZGU7CiAJdTggdGV4dFtNQVhMRU5dOwogCXUxNiB0ZXh0bGVuZ3RoOworCisJdTggc2hhZG93X3Bvd2VyOyAvKiBmb3IgUE0gKi8KIH07CiAKIC8qIHN5c2ZzX3N0cmVxIGNhbid0IHJlcGxhY2UgdGhpcyBjb21wbGV0ZWx5CkBAIC02NSw2ICs2OCwxMiBAQAogewogCWludCByYzsKIAorCWlmICghbXlkZXYtPnNoYWRvd19wb3dlciAmJiBteWRldi0+cG93ZXJlZCkgeworCQlyYyA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShteWRldi0+aW50Zik7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm47CisJfQorCiAJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAogCQkJMHgxMiwKQEAgLTc2LDEyICs4NSwxOCBAQAogCQkJMjAwMCk7CiAJaWYgKHJjIDwgMCkKIAkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgInBvd2VyIHJldHZhbCA9ICVkXG4iLCByYyk7CisKKwlpZiAobXlkZXYtPnNoYWRvd19wb3dlciAmJiAhbXlkZXYtPnBvd2VyZWQpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShteWRldi0+aW50Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X21vZGUoc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2KQogewogCWludCByYzsKIAorCWlmKG15ZGV2LT5zaGFkb3dfcG93ZXIgIT0gMSkKKwkJcmV0dXJuOworCiAJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAogCQkJMHgxMiwKQEAgLTk2LDE0ICsxMTEsMTcgQEAKIAkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgIm1vZGUgcmV0dmFsID0gJWRcbiIsIHJjKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKHN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldikKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYsIGdmcF90IG1mKQogewogCWludCByYzsKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAJdTggZGVjaW1hbHMgPSAwOwogCi0JYnVmZmVyID0ga3phbGxvYyhNQVhMRU4sIEdGUF9LRVJORUwpOworCWlmKG15ZGV2LT5zaGFkb3dfcG93ZXIgIT0gMSkKKwkJcmV0dXJuOworCisJYnVmZmVyID0ga3phbGxvYyhNQVhMRU4sIG1mKTsKIAlpZiAoIWJ1ZmZlcikgewogCQlkZXZfZXJyKCZteWRldi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybjsKQEAgLTE2Myw3ICsxODEsNyBAQAogCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKIAkJCQkJCQkJXAogCW15ZGV2LT5uYW1lID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQlcCi0JdXBkYXRlX2ZjbihteWRldik7IFwKKwl1cGRhdGVfZmNuKG15ZGV2KTsgCQkJCQlcCiAJCQkJCQkJCVwKIAlyZXR1cm4gY291bnQ7CQkJCQkJXAogfQkJCQkJCQkJXApAQCAtMTk0LDcgKzIxMiw3IEBACiAJaWYgKGVuZCA+IDApCiAJCW1lbWNweShteWRldi0+dGV4dCwgYnVmLCBlbmQpOwogCi0JdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2KTsKKwl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYsIEdGUF9LRVJORUwpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjQyLDcgKzI2MCw3IEBACiAJCWlmIChidWZbaV0gPT0gJzEnKQogCQkJbXlkZXYtPmRlY2ltYWxzW2VuZC0xLWldID0gMTsKIAotCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2LCBHRlBfS0VSTkVMKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTI4Niw3ICszMDQsNyBAQAogCWZvciAoaSA9IDA7IGRpc3BsYXlfdGV4dG1vZGVzW2ldOyBpKyspIHsKIAkJaWYgKHN5c2ZzX3N0cmVxKGRpc3BsYXlfdGV4dG1vZGVzW2ldLCBidWYpKSB7CiAJCQlteWRldi0+dGV4dG1vZGUgPSBpOwotCQkJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2KTsKKwkJCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldiwgR0ZQX0tFUk5FTCk7CiAJCQlyZXR1cm4gY291bnQ7CiAJCX0KIAl9CkBAIC0zMzAsNiArMzQ4LDcgQEAKIAl9CiAKIAlteWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCW15ZGV2LT5pbnRmID0gaW50ZXJmYWNlOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBteWRldik7CiAKIAkvKnNldCBkZWZhdWx0cyAqLwpAQCAtMzY0LDExICszODMsNDkgQEAKIAlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgNyBTZWdtZW50IG5vdyBkaXNjb25uZWN0ZWRcbiIpOwogfQogCitzdGF0aWMgaW50IHNldnNlZ19zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXY7CisKKwlteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJbXlkZXYtPnNoYWRvd19wb3dlciA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXZzZWdfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldjsKKworCW15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlteWRldi0+c2hhZG93X3Bvd2VyID0gMTsKKwl1cGRhdGVfZGlzcGxheV9tb2RlKG15ZGV2KTsKKwl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYsIEdGUF9OT0lPKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldnNlZ19yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2OworCisJbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCW15ZGV2LT5zaGFkb3dfcG93ZXIgPSAxOworCXVwZGF0ZV9kaXNwbGF5X21vZGUobXlkZXYpOworCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldiwgR0ZQX05PSU8pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZXZzZWdfZHJpdmVyID0gewogCS5uYW1lID0JCSJ1c2JzZXZzZWciLAogCS5wcm9iZSA9CXNldnNlZ19wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXNldnNlZ19kaXNjb25uZWN0LAorCS5zdXNwZW5kID0Jc2V2c2VnX3N1c3BlbmQsCisJLnJlc3VtZSA9CXNldnNlZ19yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXNldnNlZ19yZXNldF9yZXN1bWUsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVzYl9zZXZzZWdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tb24vS2NvbmZpZwppbmRleCBmMjhmMzUwLi42MzU3NDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9tb24vS2NvbmZpZwpAQCAtNSwxMSArNSw5IEBACiBjb25maWcgVVNCX01PTgogCXRyaXN0YXRlICJVU0IgTW9uaXRvciIKIAlkZXBlbmRzIG9uIFVTQgotCWRlZmF1bHQgeSBpZiBVU0I9eQotCWRlZmF1bHQgbSBpZiBVU0I9bQogCWhlbHAKIAkgIElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24sIGEgY29tcG9uZW50IHdoaWNoIGNhcHR1cmVzIHRoZSBVU0IgdHJhZmZpYwogCSAgYmV0d2VlbiBwZXJpcGhlcmFsLXNwZWNpZmljIGRyaXZlcnMgYW5kIEhDIGRyaXZlcnMgd2lsbCBiZSBidWlsdC4KIAkgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dD4uCiAKLQkgIElmIHVuc3VyZSwgc2F5IFkgKGlmIGFsbG93ZWQpLCBvdGhlcndpc2UgTS4KKwkgIElmIHVuc3VyZSwgc2F5IFksIGlmIGFsbG93ZWQsIG90aGVyd2lzZSBNLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbW9uL01ha2VmaWxlCmluZGV4IGM2NTE2YjUuLjM4NGIxOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9tb24vTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBVU0IgbW9uaXRvcgogIwogCi11c2Jtb24tb2Jqcwk6PSBtb25fbWFpbi5vIG1vbl9zdGF0Lm8gbW9uX3RleHQubyBtb25fYmluLm8gbW9uX2RtYS5vCit1c2Jtb24tb2Jqcwk6PSBtb25fbWFpbi5vIG1vbl9zdGF0Lm8gbW9uX3RleHQubyBtb25fYmluLm8KIAogb2JqLSQoQ09ORklHX1VTQl9NT04pCSs9IHVzYm1vbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCAwZjdhMzBiLi5kZmRjNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTIyMCw5ICsyMjAsOCBAQAogCiAvKgogICogVGhpcyBpcyBhICJjaHVua2VkIG1lbWNweSIuIEl0IGRvZXMgbm90IG1hbmlwdWxhdGUgYW55IGNvdW50ZXJzLgotICogQnV0IGl0IHJldHVybnMgdGhlIG5ldyBvZmZzZXQgZm9yIHJlcGVhdGVkIGFwcGxpY2F0aW9uLgogICovCi11bnNpZ25lZCBpbnQgbW9uX2NvcHlfdG9fYnVmZihjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnRoaXMsCitzdGF0aWMgdm9pZCBtb25fY29weV90b19idWZmKGNvbnN0IHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqdGhpcywKICAgICB1bnNpZ25lZCBpbnQgb2ZmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewogCXVuc2lnbmVkIGludCBzdGVwX2xlbjsKQEAgLTI0Nyw3ICsyNDYsNiBAQAogCQlmcm9tICs9IHN0ZXBfbGVuOwogCQlsZW5ndGggLT0gc3RlcF9sZW47CiAJfQotCXJldHVybiBvZmY7CiB9CiAKIC8qCkBAIC00MDAsMTUgKzM5OCw4IEBACiAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IHVyYiAqdXJiLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewogCi0JaWYgKHVyYi0+ZGV2LT5idXMtPnVzZXNfZG1hICYmCi0JICAgICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApKSB7Ci0JCW1vbl9kbWFwZWVrX3ZlYyhycCwgb2Zmc2V0LCB1cmItPnRyYW5zZmVyX2RtYSwgbGVuZ3RoKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpCiAJCXJldHVybiAnWic7Ci0KIAltb25fY29weV90b19idWZmKHJwLCBvZmZzZXQsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgpOwogCXJldHVybiAwOwogfQpAQCAtNjM1LDcgKzYyNiw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnJwLT5iX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJwLT5iX3dhaXQpOwogCW11dGV4X2luaXQoJnJwLT5mZXRjaF9sb2NrKTsKLQogCXJwLT5iX3NpemUgPSBCVUZGX0RGTDsKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IG1vbl9wZ21hcCkgKiAocnAtPmJfc2l6ZS9DSFVOS19TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fZG1hLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2RtYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDBjYzgwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21vbi9tb25fZG1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogVGhlIFVTQiBNb25pdG9yLCBpbnNwaXJlZCBieSBEYXZlIEhhcmRpbmcncyBVU0JNb24uCi0gKgotICogbW9uX2RtYS5jOiBMaWJyYXJ5IHdoaWNoIHNub29wcyBvbiBETUEgYXJlYXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFBldGUgWmFpdGNldiAoemFpdGNldkByZWRoYXQuY29tKQotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0jaW5jbHVkZSA8bGludXgvdXNiLmg+CS8qIE9ubHkgbmVlZGVkIGZvciBkZWNsYXJhdGlvbnMgaW4gdXNiX21vbi5oICovCi0jaW5jbHVkZSAidXNiX21vbi5oIgotCi0vKgotICogUEMtY29tcGF0aWJsZXMsIGFyZSwgZm9ydHVuYXRlbHksIHN1ZmZpY2llbnRseSBjYWNoZS1jb2hlcmVudCBmb3IgdGhpcy4KLSAqLwotI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgLyogQ09ORklHX0FSQ0hfSTM4NiBkb2Vzbid0IGV4aXQgKi8KLSNkZWZpbmUgTU9OX0hBU19VTk1BUCAxCi0KLSNkZWZpbmUgcGh5c190b19wYWdlKHBoeXMpCXBmbl90b19wYWdlKChwaHlzKSA+PiBQQUdFX1NISUZUKQotCi1jaGFyIG1vbl9kbWFwZWVrKHVuc2lnbmVkIGNoYXIgKmRzdCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgcGFnZSAqcGc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyICptYXA7Ci0JdW5zaWduZWQgY2hhciAqcHRyOwotCi0JLyoKLQkgKiBPbiBpMzg2LCBhIERNQSBoYW5kbGUgaXMgdGhlICJwaHlzaWNhbCIgYWRkcmVzcyBvZiBhIHBhZ2UuCi0JICogSW4gb3RoZXIgd29yZHMsIHRoZSBidXMgYWRkcmVzcyBpcyBlcXVhbCB0byBwaHlzaWNhbCBhZGRyZXNzLgotCSAqIFRoZXJlIGlzIG5vIElPTU1VLgotCSAqLwotCXBnID0gcGh5c190b19wYWdlKGRtYV9hZGRyKTsKLQotCS8qCi0JICogV2UgYXJlIGNhbGxlZCBmcm9tIGhhcmR3YXJlIElSUXMgaW4gY2FzZSBvZiBjYWxsYmFja3MuCi0JICogQnV0IHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBzb2Z0aXJxIG9yIHByb2Nlc3MgY29udGV4dCBpbiBjYXNlCi0JICogb2Ygc3VibWlzc2lvbnMuIEluIHN1Y2ggY2FzZSwgd2UgbmVlZCB0byBwcm90ZWN0IEtNX0lSUTAuCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hcCA9IGttYXBfYXRvbWljKHBnLCBLTV9JUlEwKTsKLQlwdHIgPSBtYXAgKyAoZG1hX2FkZHIgJiAoUEFHRV9TSVpFLTEpKTsKLQltZW1jcHkoZHN0LCBwdHIsIGxlbik7Ci0Ja3VubWFwX2F0b21pYyhtYXAsIEtNX0lSUTApOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBtb25fZG1hcGVla192ZWMoY29uc3Qgc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwKLSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHN0ZXBfbGVuOwotCXN0cnVjdCBwYWdlICpwZzsKLQl1bnNpZ25lZCBjaGFyICptYXA7Ci0JdW5zaWduZWQgbG9uZyBwYWdlX29mZiwgcGFnZV9sZW47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jd2hpbGUgKGxlbmd0aCkgewotCQkvKiBjb21wdXRlIG51bWJlciBvZiBieXRlcyB3ZSBhcmUgZ29pbmcgdG8gY29weSBpbiB0aGlzIHBhZ2UgKi8KLQkJc3RlcF9sZW4gPSBsZW5ndGg7Ci0JCXBhZ2Vfb2ZmID0gZG1hX2FkZHIgJiAoUEFHRV9TSVpFLTEpOwotCQlwYWdlX2xlbiA9IFBBR0VfU0laRSAtIHBhZ2Vfb2ZmOwotCQlpZiAocGFnZV9sZW4gPCBzdGVwX2xlbikKLQkJCXN0ZXBfbGVuID0gcGFnZV9sZW47Ci0KLQkJLyogY29weSBkYXRhIGFuZCBhZHZhbmNlIHBvaW50ZXJzICovCi0JCXBnID0gcGh5c190b19wYWdlKGRtYV9hZGRyKTsKLQkJbWFwID0ga21hcF9hdG9taWMocGcsIEtNX0lSUTApOwotCQlvZmZzZXQgPSBtb25fY29weV90b19idWZmKHJwLCBvZmZzZXQsIG1hcCArIHBhZ2Vfb2ZmLCBzdGVwX2xlbik7Ci0JCWt1bm1hcF9hdG9taWMobWFwLCBLTV9JUlEwKTsKLQkJZG1hX2FkZHIgKz0gc3RlcF9sZW47Ci0JCWxlbmd0aCAtPSBzdGVwX2xlbjsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0jZW5kaWYgLyogX19pMzg2X18gKi8KLQotI2lmbmRlZiBNT05fSEFTX1VOTUFQCi1jaGFyIG1vbl9kbWFwZWVrKHVuc2lnbmVkIGNoYXIgKmRzdCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgaW50IGxlbikKLXsKLQlyZXR1cm4gJ0QnOwotfQotCi12b2lkIG1vbl9kbWFwZWVrX3ZlYyhjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLAotICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JOwotfQotCi0jZW5kaWYgLyogTU9OX0hBU19VTk1BUCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwppbmRleCA1ZTBhYjQyLi5lMGMyZGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwpAQCAtMzYxLDcgKzM2MSw2IEBACiAJfQogCS8vIE1PRF9JTkNfVVNFX0NPVU5UKHdoaWNoX21vZHVsZT8pOwogCi0KIAltdXRleF9sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSAodWJ1cywgJnVzYl9idXNfbGlzdCwgYnVzX2xpc3QpIHsKIAkJbW9uX2J1c19pbml0KHVidXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYwppbmRleCBhN2ViNGM5Li45ZjFhOTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYwpAQCAtMTUwLDIwICsxNTAsNiBAQAogCQkJcmV0dXJuICc+JzsKIAl9CiAKLQkvKgotCSAqIFRoZSBjaGVjayB0byBzZWUgaWYgaXQncyBzYWZlIHRvIHBva2UgYXQgZGF0YSBoYXMgYW4gZW5vcm1vdXMKLQkgKiBudW1iZXIgb2YgY29ybmVyIGNhc2VzLCBidXQgaXQgc2VlbXMgdGhhdCB0aGUgZm9sbG93aW5nIGlzCi0JICogbW9yZSBvciBsZXNzIHNhZmUuCi0JICoKLQkgKiBXZSBkbyBub3QgZXZlbiB0cnkgdG8gbG9vayBhdCB0cmFuc2Zlcl9idWZmZXIsIGJlY2F1c2UgaXQgY2FuCi0JICogY29udGFpbiBub24tTlVMTCBnYXJiYWdlIGluIGNhc2UgdGhlIHVwcGVyIGxldmVsIHByb21pc2VkIHRvCi0JICogc2V0IERNQSBmb3IgdGhlIEhDRC4KLQkgKi8KLQlpZiAodXJiLT5kZXYtPmJ1cy0+dXNlc19kbWEgJiYKLQkgICAgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkpIHsKLQkJcmV0dXJuIG1vbl9kbWFwZWVrKGVwLT5kYXRhLCB1cmItPnRyYW5zZmVyX2RtYSwgbGVuKTsKLQl9Ci0KIAlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkKIAkJcmV0dXJuICdaJzsJLyogJzAnIHdvdWxkIGJlIG5vdCBhcyBwcmV0dHkuICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmggYi9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oCmluZGV4IGY1ZDg0ZmYuLmRmOWE0ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmgKKysrIGIvZHJpdmVycy91c2IvbW9uL3VzYl9tb24uaApAQCAtNjUsMjAgKzY1LDYgQEAKIHZvaWQgbW9uX2Jpbl9leGl0KHZvaWQpOwogCiAvKgotICogRE1BIGludGVyZmFjZS4KLSAqCi0gKiBYWFggVGhlIHZlY3RvcmVkIHNpZGUgbmVlZHMgYSBzZXJpb3VzIHJlLXRoaW5raW5nLiBBYnN0cmFjdGluZyB2ZWN0b3JzLAotICogbGlrZSBpbiBQYW9sbydzIG9yaWdpbmFsIHBhdGNoLCBwcm9kdWNlcyBhIGRvdWJsZSBwa21hcC4gV2UgbmVlZCBhbiBpZGVhLgotKi8KLWV4dGVybiBjaGFyIG1vbl9kbWFwZWVrKHVuc2lnbmVkIGNoYXIgKmRzdCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgaW50IGxlbik7Ci0KLXN0cnVjdCBtb25fcmVhZGVyX2JpbjsKLWV4dGVybiB2b2lkIG1vbl9kbWFwZWVrX3ZlYyhjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLAotICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtb25fY29weV90b19idWZmKGNvbnN0IHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCi0gICAgdW5zaWduZWQgaW50IG9mZnNldCwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbik7Ci0KLS8qCiAgKi8KIGV4dGVybiBzdHJ1Y3QgbXV0ZXggbW9uX2xvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IDFkMjZiZWQuLjNhNjFkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtMTg1MCw2ICsxODUwLDEwIEBACiAJCWRtYV9jb250cm9sbGVyX2Rlc3Ryb3koYyk7CiAJfQogCisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URworCXB1dF9kZXZpY2UobXVzYi0+eGNlaXYtPmRldik7CisjZW5kaWYKKwogCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgMCk7CiAJbXVzYl9wbGF0Zm9ybV9leGl0KG11c2IpOwogCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgMCk7CkBAIC0xODU5LDEwICsxODYzLDYgQEAKIAkJY2xrX3B1dChtdXNiLT5jbG9jayk7CiAJfQogCi0jaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URwotCXB1dF9kZXZpY2UobXVzYi0+eGNlaXYtPmRldik7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRAogCXVzYl9wdXRfaGNkKG11c2JfdG9faGNkKG11c2IpKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKaW5kZXggZTBkNTZlZi4uNzdhNWY0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYwpAQCAtMTE3LDI0ICsxMTcsNyBAQAogCQlwcl9kZWJ1ZygiICBWQlVTICVkIG1BIGVycm9yICVkXG4iLCBtQSwgc3RhdHVzKTsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX3ZidXNfc291cmNlKHN0cnVjdCBpc3AxMzAxICppc3ApCi17Ci0JLyogdGhpcyBib2FyZCB3b24ndCBzdXBwbHkgbW9yZSB0aGFuIDhtQSB2YnVzIHBvd2VyLgotCSAqIHNvbWUgYm9hcmRzIGNhbiBzd2l0Y2ggYSAxMDBtYSAidW5pdCBsb2FkIiAob3IgbW9yZSkuCi0JICovCi19Ci0KLQotLyogcHJvZHVjdHMgd2lsbCBkZWxpdmVyIE9URyBtZXNzYWdlcyB3aXRoIExFRHMsIEdVSSwgZXRjICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbm90cmVzcG9uZGluZyhzdHJ1Y3QgaXNwMTMwMSAqaXNwKQotewotCXByaW50ayhLRVJOX05PVElDRSAiT1RHIGRldmljZSBub3QgcmVzcG9uZGluZy5cbiIpOwotfQotCi0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX0g0KQorI2Vsc2UKIAogc3RhdGljIHZvaWQgZW5hYmxlX3ZidXNfZHJhdyhzdHJ1Y3QgaXNwMTMwMSAqaXNwLCB1bnNpZ25lZCBtQSkKIHsKQEAgLTE0NCw2ICsxMjcsOCBAQAogCSAqLwogfQogCisjZW5kaWYKKwogc3RhdGljIHZvaWQgZW5hYmxlX3ZidXNfc291cmNlKHN0cnVjdCBpc3AxMzAxICppc3ApCiB7CiAJLyogdGhpcyBib2FyZCB3b24ndCBzdXBwbHkgbW9yZSB0aGFuIDhtQSB2YnVzIHBvd2VyLgpAQCAtMTU5LDggKzE0NCw2IEBACiB9CiAKIAotI2VuZGlmCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpc3AxMzAxX2RyaXZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCmluZGV4IGFlYzYxODguLjEzMWU2MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYwpAQCAtMzEsMTQgKzMxLDE5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHg2NTQ3LCAweDAyMzIpIH0sCisJeyBVU0JfREVWSUNFKDB4MThlYywgMHgzMTE4KSB9LAkJLyogVVNCIHRvIElyREEgYWRhcHRlciAqLwogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCi1zdHJ1Y3QgYXJrMzExNl9wcml2YXRlIHsKLQlzcGlubG9ja190IGxvY2s7Ci0JdTggdGVybWlvc19pbml0aWFsaXplZDsKLX07CitzdGF0aWMgaW50IGlzX2lyZGEoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgxOGVjICYmCisJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDMxMTgpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgQVJLMzExNl9TTkQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IHNlcSwKIAkJCSAgICAgICBfX3U4IHJlcXVlc3QsIF9fdTggcmVxdWVzdHR5cGUsCkBAIC04MiwyOSArODcsMjggQEAKIHN0YXRpYyBpbnQgYXJrMzExNl9hdHRhY2goc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAljaGFyICpidWY7Ci0Jc3RydWN0IGFyazMxMTZfcHJpdmF0ZSAqcHJpdjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7Ci0JCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXJrMzExNl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcHJpdikKLQkJCWdvdG8gY2xlYW51cDsKLQkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwotCi0JCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHByaXYpOwotCX0KIAogCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJZGJnKCJlcnJvciBrbWFsbG9jIC0+IG91dCBvZiBtZW0/Iik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJaWYgKGlzX2lyZGEoc2VyaWFsKSkKKwkJZGJnKCJJckRBIG1vZGUiKTsKKwogCS8qIDMgKi8KIAlBUkszMTE2X1NORChzZXJpYWwsIDMsIDB4RkUsIDB4NDAsIDB4MDAwOCwgMHgwMDAyKTsKIAlBUkszMTE2X1NORChzZXJpYWwsIDQsIDB4RkUsIDB4NDAsIDB4MDAwOCwgMHgwMDAxKTsKIAlBUkszMTE2X1NORChzZXJpYWwsIDUsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDA4KTsKLQlBUkszMTE2X1NORChzZXJpYWwsIDYsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDBCKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDYsIDB4RkUsIDB4NDAsIGlzX2lyZGEoc2VyaWFsKSA/IDB4MDAwMSA6IDB4MDAwMCwKKwkJICAgIDB4MDAwQik7CisKKwlpZiAoaXNfaXJkYShzZXJpYWwpKSB7CisJCUFSSzMxMTZfU05EKHNlcmlhbCwgMTAwMSwgMHhGRSwgMHg0MCwgMHgwMDAwLCAweDAwMEMpOworCQlBUkszMTE2X1NORChzZXJpYWwsIDEwMDIsIDB4RkUsIDB4NDAsIDB4MDA0MSwgMHgwMDBEKTsKKwkJQVJLMzExNl9TTkQoc2VyaWFsLCAxMDAzLCAweEZFLCAweDQwLCAweDAwMDEsIDB4MDAwQSk7CisJfQogCiAJLyogPC0tIHNlcTcgKi8KIAlBUkszMTE2X1JDVihzZXJpYWwsICA3LCAweEZFLCAweEMwLCAweDAwMDAsIDB4MDAwMywgMHgwMCwgYnVmKTsKQEAgLTE0MSw2ICsxNDUsOCBAQAogCUFSSzMxMTZfU05EKHNlcmlhbCwgMTQ3LCAweEZFLCAweDQwLCAweDAwODMsIDB4MDAwMyk7CiAJQVJLMzExNl9TTkQoc2VyaWFsLCAxNDgsIDB4RkUsIDB4NDAsIDB4MDAzOCwgMHgwMDAwKTsKIAlBUkszMTE2X1NORChzZXJpYWwsIDE0OSwgMHhGRSwgMHg0MCwgMHgwMDAxLCAweDAwMDEpOworCWlmIChpc19pcmRhKHNlcmlhbCkpCisJCUFSSzMxMTZfU05EKHNlcmlhbCwgMTAwNCwgMHhGRSwgMHg0MCwgMHgwMDAwLCAweDAwMDkpOwogCUFSSzMxMTZfU05EKHNlcmlhbCwgMTUwLCAweEZFLCAweDQwLCAweDAwMDMsIDB4MDAwMyk7CiAJQVJLMzExNl9SQ1Yoc2VyaWFsLCAxNTEsIDB4RkUsIDB4QzAsIDB4MDAwMCwgMHgwMDA0LCAweDAzLCBidWYpOwogCUFSSzMxMTZfU05EKHNlcmlhbCwgMTUyLCAweEZFLCAweDQwLCAweDAwMDAsIDB4MDAwMyk7CkBAIC0xNDksMTMgKzE1NSwxNiBAQAogCiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gMDsKK30KIAotY2xlYW51cDoKLQlmb3IgKC0taTsgaSA+PSAwOyAtLWkpIHsKLQkJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkpOwotCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKLQl9Ci0JcmV0dXJuIC1FTk9NRU07CitzdGF0aWMgdm9pZCBhcmszMTE2X2luaXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyA9IHR0eS0+dGVybWlvczsKKwkqdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKKwl0ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzgKKwkJCQkgICAgICB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdGVybWlvcy0+Y19pc3BlZWQgPSA5NjAwOworCXRlcm1pb3MtPmNfb3NwZWVkID0gOTYwMDsKIH0KIAogc3RhdGljIHZvaWQgYXJrMzExNl9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtMTYzLDEwICsxNzIsOCBAQAogCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlzdHJ1Y3QgYXJrMzExNl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyA9IHR0eS0+dGVybWlvczsKIAl1bnNpZ25lZCBpbnQgY2ZsYWcgPSB0ZXJtaW9zLT5jX2NmbGFnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJhdWQ7CiAJaW50IGFyazMxMTZfYmF1ZDsKIAljaGFyICpidWY7CkBAIC0xNzYsMTYgKzE4Myw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKLQkJKnRlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXRlcm1pb3MtPmNfY2ZsYWcgPSBCOTYwMCB8IENTOAotCQkJCQkgICAgICB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7Ci0JCXRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKLQkJdGVybWlvcy0+Y19vc3BlZWQgPSA5NjAwOwotCQlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJY2ZsYWcgPSB0ZXJtaW9zLT5jX2NmbGFnOwogCXRlcm1pb3MtPmNfY2ZsYWcgJj0gfihDTVNQQVJ8Q1JUU0NUUyk7CkBAIC0zMTgsOCArMzE1LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgYXJrMzExNl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBhcmszMTE2X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTMzNCw3ICszMzAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyZXN1bHQgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbih0dHksIHBvcnQsIGZpbHApOworCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBlcnJfb3V0OwogCkBAIC00NTUsNiArNDUxLDcgQEAKIAkubnVtX3BvcnRzID0JCTEsCiAJLmF0dGFjaCA9CQlhcmszMTE2X2F0dGFjaCwKIAkuc2V0X3Rlcm1pb3MgPQkJYXJrMzExNl9zZXRfdGVybWlvcywKKwkuaW5pdF90ZXJtaW9zID0JCWFyazMxMTZfaW5pdF90ZXJtaW9zLAogCS5pb2N0bCA9CQlhcmszMTE2X2lvY3RsLAogCS50aW9jbWdldCA9CQlhcmszMTE2X3Rpb2NtZ2V0LAogCS5vcGVuID0JCQlhcmszMTE2X29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKaW5kZXggNzAzM2IwMy4uYTA0NjdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwpAQCAtOTIsNyArOTIsNyBAQAogc3RhdGljIGludCAgYmVsa2luX3NhX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBiZWxraW5fc2FfcmVsZWFzZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgIGJlbGtpbl9zYV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGJlbGtpbl9zYV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGJlbGtpbl9zYV9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgYmVsa2luX3NhX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC0yMTMsNyArMjEzLDcgQEAKIAogCiBzdGF0aWMgaW50ICBiZWxraW5fc2Ffb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCisJCQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKaW5kZXggMjgzMDc2Ni4uNTllZmY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKQEAgLTU2LDYgKzU2LDE4IEBACiAjZGVmaW5lIENIMzQxX0JBVURCQVNFX0ZBQ1RPUiAxNTMyNjIwODAwCiAjZGVmaW5lIENIMzQxX0JBVURCQVNFX0RJVk1BWCAzCiAKKy8qIEJyZWFrIHN1cHBvcnQgLSB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBpbXBsZW1lbnQgdGhpcyB3YXMgZ2xlYW5lZCBmcm9tCisgKiB0aGUgTmV0L0ZyZWVCU0QgdWNoY29tLmMgZHJpdmVyIGJ5IFRha2Fub3JpIFdhdGFuYWJlLiAgRG9tbyBhcmlnYXRvLgorICovCisKKyNkZWZpbmUgQ0gzNDFfUkVRX1dSSVRFX1JFRyAgICAweDlBCisjZGVmaW5lIENIMzQxX1JFUV9SRUFEX1JFRyAgICAgMHg5NQorI2RlZmluZSBDSDM0MV9SRUdfQlJFQUsxICAgICAgIDB4MDUKKyNkZWZpbmUgQ0gzNDFfUkVHX0JSRUFLMiAgICAgICAweDE4CisjZGVmaW5lIENIMzQxX05CUkVBS19CSVRTX1JFRzEgMHgwMQorI2RlZmluZSBDSDM0MV9OQlJFQUtfQklUU19SRUcyIDB4NDAKKworCiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC0zMDAsOCArMzEyLDcgQEAKIAogCiAvKiBvcGVuIHRoaXMgZGV2aWNlLCBzZXQgZGVmYXVsdCBwYXJhbWV0ZXJzICovCi1zdGF0aWMgaW50IGNoMzQxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgY2gzNDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKQEAgLTMzMyw3ICszNDQsNyBAQAogCQlyZXR1cm4gLUVQUk9UTzsKIAl9CiAKLQlyID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0LCBmaWxwKTsKKwlyID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0KTsKIAogb3V0OglyZXR1cm4gcjsKIH0KQEAgLTM3NCw2ICszODUsNDUgQEAKIAkgKi8KIH0KIAorc3RhdGljIHZvaWQgY2gzNDFfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3sKKwljb25zdCB1aW50MTZfdCBjaDM0MV9icmVha19yZWcgPQorCQlDSDM0MV9SRUdfQlJFQUsxIHwgKCh1aW50MTZfdCkgQ0gzNDFfUkVHX0JSRUFLMiA8PCA4KTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgcjsKKwl1aW50MTZfdCByZWdfY29udGVudHM7CisJdWludDhfdCBicmVha19yZWdbMl07CisKKwlkYmcoIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlyID0gY2gzNDFfY29udHJvbF9pbihwb3J0LT5zZXJpYWwtPmRldiwgQ0gzNDFfUkVRX1JFQURfUkVHLAorCQkJY2gzNDFfYnJlYWtfcmVnLCAwLCBicmVha19yZWcsIHNpemVvZihicmVha19yZWcpKTsKKwlpZiAociA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVTQiBjb250cm9sIHJlYWQgZXJyb3Igd2hpbHN0IGdldHRpbmciCisJCQkJIiBicmVhayByZWdpc3RlciBjb250ZW50cy5cbiIsIF9fRklMRV9fKTsKKwkJcmV0dXJuOworCX0KKwlkYmcoIiVzIC0gaW5pdGlhbCBjaDM0MSBicmVhayByZWdpc3RlciBjb250ZW50cyAtIHJlZzE6ICV4LCByZWcyOiAleCIsCisJCQlfX2Z1bmNfXywgYnJlYWtfcmVnWzBdLCBicmVha19yZWdbMV0pOworCWlmIChicmVha19zdGF0ZSAhPSAwKSB7CisJCWRiZygiJXMgLSBFbnRlciBicmVhayBzdGF0ZSByZXF1ZXN0ZWQiLCBfX2Z1bmNfXyk7CisJCWJyZWFrX3JlZ1swXSAmPSB+Q0gzNDFfTkJSRUFLX0JJVFNfUkVHMTsKKwkJYnJlYWtfcmVnWzFdICY9IH5DSDM0MV9OQlJFQUtfQklUU19SRUcyOworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBMZWF2ZSBicmVhayBzdGF0ZSByZXF1ZXN0ZWQiLCBfX2Z1bmNfXyk7CisJCWJyZWFrX3JlZ1swXSB8PSBDSDM0MV9OQlJFQUtfQklUU19SRUcxOworCQlicmVha19yZWdbMV0gfD0gQ0gzNDFfTkJSRUFLX0JJVFNfUkVHMjsKKwl9CisJZGJnKCIlcyAtIE5ldyBjaDM0MSBicmVhayByZWdpc3RlciBjb250ZW50cyAtIHJlZzE6ICV4LCByZWcyOiAleCIsCisJCQlfX2Z1bmNfXywgYnJlYWtfcmVnWzBdLCBicmVha19yZWdbMV0pOworCXJlZ19jb250ZW50cyA9ICh1aW50MTZfdClicmVha19yZWdbMF0gfCAoKHVpbnQxNl90KWJyZWFrX3JlZ1sxXSA8PCA4KTsKKwlyID0gY2gzNDFfY29udHJvbF9vdXQocG9ydC0+c2VyaWFsLT5kZXYsIENIMzQxX1JFUV9XUklURV9SRUcsCisJCQljaDM0MV9icmVha19yZWcsIHJlZ19jb250ZW50cyk7CisJaWYgKHIgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVVNCIGNvbnRyb2wgd3JpdGUgZXJyb3Igd2hpbHN0IHNldHRpbmciCisJCQkJIiBicmVhayByZWdpc3RlciBjb250ZW50cy5cbiIsIF9fRklMRV9fKTsKK30KKwogc3RhdGljIGludCBjaDM0MV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewpAQCAtNTc3LDYgKzYyNyw3IEBACiAJLmNsb3NlICAgICAgICAgICAgID0gY2gzNDFfY2xvc2UsCiAJLmlvY3RsICAgICAgICAgICAgID0gY2gzNDFfaW9jdGwsCiAJLnNldF90ZXJtaW9zICAgICAgID0gY2gzNDFfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCAgICAgICAgID0gY2gzNDFfYnJlYWtfY3RsLAogCS50aW9jbWdldCAgICAgICAgICA9IGNoMzQxX3Rpb2NtZ2V0LAogCS50aW9jbXNldCAgICAgICAgICA9IGNoMzQxX3Rpb2Ntc2V0LAogCS5yZWFkX2ludF9jYWxsYmFjayA9IGNoMzQxX3JlYWRfaW50X2NhbGxiYWNrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKaW5kZXggMGU0ZjJlNC4uYjIyYWMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAKQEAgLTYzLDcgKzY0LDcgQEAKIAljaGFyICpzOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKLQlpbnQgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBOVUxMOwogCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyA9IE5VTEwsIGR1bW15OwogCkBAIC0xMTYsMTMgKzExNywxNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcl9nZXRfaW50ZXJmYWNlOworCisJcG9ydCA9IHNlcmlhbC0+cG9ydFtjby0+aW5kZXggLSBzZXJpYWwtPm1pbm9yXTsKIAl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKIAogCWluZm8tPnBvcnQgPSBwb3J0OwogCiAJKytwb3J0LT5wb3J0LmNvdW50OwotCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDEpIHsKKwlpZiAoIXRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKSB7CiAJCWlmIChzZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKSB7CiAJCQkvKgogCQkJICogYWxsb2NhdGUgYSBmYWtlIHR0eSBzbyB0aGUgZHJpdmVyIGNhbiBpbml0aWFsaXplCkBAIC0xNTAsOSArMTU1LDkgQEAKIAkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgb3BlbiBpZiB0aGlzCiAJCSAqIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBwb3J0IGlzIG9wZW5lZCAqLwogCQlpZiAoc2VyaWFsLT50eXBlLT5vcGVuKQotCQkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT5vcGVuKE5VTEwsIHBvcnQsIE5VTEwpOworCQkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT5vcGVuKE5VTEwsIHBvcnQpOwogCQllbHNlCi0JCQlyZXR2YWwgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbihOVUxMLCBwb3J0LCBOVUxMKTsKKwkJCXJldHZhbCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKE5VTEwsIHBvcnQpOwogCiAJCWlmIChyZXR2YWwpIHsKIAkJCWVycigiY291bGQgbm90IG9wZW4gVVNCIGNvbnNvbGUgcG9ydCIpOwpAQCAtMTY4LDYgKzE3Myw3IEBACiAJCQlrZnJlZSh0ZXJtaW9zKTsKIAkJCWtmcmVlKHR0eSk7CiAJCX0KKwkJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKTsKIAl9CiAJLyogTm93IHRoYXQgYW55IHJlcXVpcmVkIGZha2UgdHR5IG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlZCByZXN0b3JlCiAJICogdGhlIHR0eSBwb3J0IGNvdW50ICovCkBAIC0xNzUsMTggKzE4MSwyMiBAQAogCS8qIFRoZSBjb25zb2xlIGlzIHNwZWNpYWwgaW4gdGVybXMgb2YgY2xvc2luZyB0aGUgZGV2aWNlIHNvCiAJICogaW5kaWNhdGUgdGhpcyBwb3J0IGlzIG5vdyBhY3RpbmcgYXMgYSBzeXN0ZW0gY29uc29sZS4gKi8KIAlwb3J0LT5jb25zb2xlID0gMTsKLQlyZXR2YWwgPSAwOwogCi1vdXQ6CisJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7Ci1mcmVlX3Rlcm1pb3M6CisKKyBmcmVlX3Rlcm1pb3M6CiAJa2ZyZWUodGVybWlvcyk7CiAJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7Ci1mcmVlX3R0eToKKyBmcmVlX3R0eToKIAlrZnJlZSh0dHkpOwotcmVzZXRfb3Blbl9jb3VudDoKKyByZXNldF9vcGVuX2NvdW50OgogCXBvcnQtPnBvcnQuY291bnQgPSAwOwotCWdvdG8gb3V0OworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisgZXJyb3JfZ2V0X2ludGVyZmFjZToKKwl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOworCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCB1c2JfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggOTg1Y2JjZi4uNGEyMDhmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtMzMsOCArMzMsNyBAQAogLyoKICAqIEZ1bmN0aW9uIFByb3RvdHlwZXMKICAqLwotc3RhdGljIGludCBjcDIxMHhfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCi0JCQkJCQkJc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IGNwMjEweF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKik7CiBzdGF0aWMgdm9pZCBjcDIxMHhfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOwogc3RhdGljIHZvaWQgY3AyMTB4X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKik7CiBzdGF0aWMgdm9pZCBjcDIxMHhfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiwKQEAgLTM2OCw4ICszNjcsNyBAQAogCXJldHVybiBiYXVkOwogfQogCi1zdGF0aWMgaW50IGNwMjEweF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGNwMjEweF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlpbnQgcmVzdWx0OwpAQCAtMzk5LDEyICszOTcsNiBAQAogCiAJLyogQ29uZmlndXJlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSAqLwogCWNwMjEweF9nZXRfdGVybWlvcyh0dHksIHBvcnQpOwotCi0JLyogU2V0IHRoZSBEVFIgYW5kIFJUUyBwaW5zIGxvdyAqLwotCWNwMjEweF90aW9jbXNldF9wb3J0KHR0eSA/IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGEKLQkJCTogcG9ydCwKLQkJTlVMTCwgVElPQ01fRFRSIHwgVElPQ01fUlRTLCAwKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKaW5kZXggMzM2NTIzZi4uYjBmNjQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIHZvaWQgY3liZXJqYWNrX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBjeWJlcmphY2tfcmVsZWFzZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgIGN5YmVyamFja19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBjeWJlcmphY2tfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50IGN5YmVyamFja193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogfQogCiBzdGF0aWMgaW50ICBjeWJlcmphY2tfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCisJCQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCA1OWFkZmUxLi5lMGE4YjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTE3Miw4ICsxNzIsNyBAQAogc3RhdGljIGludCAgY3lwcmVzc19oaWRjb21fc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgIGN5cHJlc3NfY2E0MnYyX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBjeXByZXNzX3JlbGVhc2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBjeXByZXNzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGN5cHJlc3NfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBjeXByZXNzX2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IG9uKTsKIHN0YXRpYyBpbnQgIGN5cHJlc3Nfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKQEAgLTYzMyw4ICs2MzIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgY3lwcmVzc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgY3lwcmVzc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtNjU5LDE1ICs2NTcsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFNldCB0ZXJtaW9zICovCi0JcmVzdWx0ID0gY3lwcmVzc193cml0ZSh0dHksIHBvcnQsIE5VTEwsIDApOwotCi0JaWYgKHJlc3VsdCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkiJXMgLSBmYWlsZWQgc2V0dGluZyB0aGUgY29udHJvbCBsaW5lcyAtIGVycm9yICVkXG4iLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0gZWxzZQotCQlkYmcoIiVzIC0gc3VjY2VzcyBzZXR0aW5nIHRoZSBjb250cm9sIGxpbmVzIiwgX19mdW5jX18pOworCWN5cHJlc3Nfc2VuZChwb3J0KTsKIAogCWlmICh0dHkpCiAJCWN5cHJlc3Nfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCAmcHJpdi0+dG1wX3Rlcm1pb3MpOwpAQCAtMTAwNSw2ICs5OTUsOCBAQAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCS8qIFdlIGNhbid0IGNsZWFuIHRoaXMgb25lIHVwIGFzIHdlIGRvbid0IGtub3cgdGhlIGRldmljZSB0eXBlCisJICAgZWFybHkgZW5vdWdoICovCiAJaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7CiAJCWlmIChwcml2LT5jaGlwdHlwZSA9PSBDVF9FQVJUSE1BVEUpIHsKIAkJCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oCmluZGV4IGU3NzJiMDEuLjFmZDM2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaApAQCAtNTcsNyArNTcsNyBAQAogI2RlZmluZQlVQVJUX1JJCQkweDEwCS8qIHJpbmcgaW5kaWNhdG9yIC0gbW9kZW0gLSBkZXZpY2UgdG8gaG9zdCAqLwogI2RlZmluZSBVQVJUX0NECQkweDQwCS8qIGNhcnJpZXIgZGV0ZWN0IC0gbW9kZW0gLSBkZXZpY2UgdG8gaG9zdCAqLwogI2RlZmluZSBDWVBfRVJST1IgCTB4MDgJLyogcmVjZWl2ZWQgZnJvbSBpbnB1dCByZXBvcnQgLSBkZXZpY2UgdG8gaG9zdCAqLwotLyogTm90ZSAtIHRoZSBiZWxvdyBoYXMgbm90aGluZyB0byB0byB3aXRoIHRoZSAiZmVhdHVyZSByZXBvcnQiIHJlc2V0ICovCisvKiBOb3RlIC0gdGhlIGJlbG93IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlICJmZWF0dXJlIHJlcG9ydCIgcmVzZXQgKi8KICNkZWZpbmUgQ09OVFJPTF9SRVNFVAkweDA4ICAJLyogc2VudCB3aXRoIG91dHB1dCByZXBvcnQgLSBob3N0IHRvIGRldmljZSAqLwogCiAvKiBFbmQgb2YgUlMtMjMyIHByb3RvY29sIGRlZmluaXRpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggZjQ4MDgwOS4uYWIzZGQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtNDUzLDggKzQ1Myw3IEBACiBzdGF0aWMgdm9pZCBkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyBpbnQgZGlnaV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBkaWdpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyBpbnQgZGlnaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0Jc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbik7CkBAIC0xMzQ3LDggKzEzNDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRpZ2lfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCXN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggODBjYjM0Ny4uMzNjOWU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTc5LDggKzc5LDcgQEAKICNkZWZpbmUgRU1QRUdfUFJPRFVDVF9JRAkJMHgwMDAxCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGVtcGVnLWNhciBwbGF5ZXIgKi8KLXN0YXRpYyBpbnQgIGVtcGVnX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGVtcGVnX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBlbXBlZ19jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgIGVtcGVnX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCkBAIC05MCw4ICs4OSw3IEBACiBzdGF0aWMgdm9pZCBlbXBlZ190aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIGVtcGVnX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgaW50ICBlbXBlZ19zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQgZW1wZWdfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBlbXBlZ19pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBlbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBlbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIApAQCAtMTIzLDcgKzEyMSw3IEBACiAJLnRocm90dGxlID0JCWVtcGVnX3Rocm90dGxlLAogCS51bnRocm90dGxlID0JCWVtcGVnX3VudGhyb3R0bGUsCiAJLmF0dGFjaCA9CQllbXBlZ19zdGFydHVwLAotCS5zZXRfdGVybWlvcyA9CQllbXBlZ19zZXRfdGVybWlvcywKKwkuaW5pdF90ZXJtaW9zID0JCWVtcGVnX2luaXRfdGVybWlvcywKIAkud3JpdGUgPQkJZW1wZWdfd3JpdGUsCiAJLndyaXRlX3Jvb20gPQkJZW1wZWdfd3JpdGVfcm9vbSwKIAkuY2hhcnNfaW5fYnVmZmVyID0JZW1wZWdfY2hhcnNfaW5fYnVmZmVyLApAQCAtMTQyLDE3ICsxNDAsMTMgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEVtcGVnIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGVtcGVnX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZW1wZWdfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlpbnQgcmVzdWx0ID0gMDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQkvKiBGb3JjZSBkZWZhdWx0IHRlcm1pbyBzZXR0aW5ncyAqLwotCWVtcGVnX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgTlVMTCkgOwotCiAJYnl0ZXNfaW4gPSAwOwogCWJ5dGVzX291dCA9IDA7CiAKQEAgLTQyNSwxMSArNDE5LDkgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBlbXBlZ19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgZW1wZWdfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOwotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAkvKgogCSAqIFRoZSBlbXBlZy1jYXIgcGxheWVyIHdhbnRzIHRoZXNlIHBhcnRpY3VsYXIgdHR5IHNldHRpbmdzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA4ZmVjNWQ0Li40Zjg4M2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTc2LDYgKzE3Niw5IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01JQ1JPX0NIQU1FTEVPTl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JFTEFJU19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX09QRU5EQ0NfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PUEVORENDX1NOSUZGRVJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PUEVORENDX1RIUk9UVExFX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEKSB9LAogCXsgVVNCX0RFVklDRShJTlRFUkJJT01FVFJJQ1NfVklELCBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU1BST0dfSUkpIH0sCkBAIC02OTQsNiArNjk3LDggQEAKIAl7IFVTQl9ERVZJQ0UoREVfVklELCBXSFRfUElEKSB9LAogCXsgVVNCX0RFVklDRShBRElfVklELCBBRElfR05JQ0VfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKKwl7IFVTQl9ERVZJQ0UoQURJX1ZJRCwgQURJX0dOSUNFUExVU19QSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAogCXsgVVNCX0RFVklDRShKRVRJX1ZJRCwgSkVUSV9TUEMxMjAxX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTUFSVkVMTF9WSUQsIE1BUlZFTExfU0hFRVZBUExVR19QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LApAQCAtNzAyLDYgKzcwNyw4IEBACiAJeyBVU0JfREVWSUNFKEJBWUVSX1ZJRCwgQkFZRVJfQ09OVE9VUl9DQUJMRV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBNQVJWRUxMX09QRU5SRF9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgSEFNRUdfSE84MjBfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgSEFNRUdfSE84NzBfUElEKSB9LAogCXsgfSwJCQkJCS8qIE9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLwogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC03NDcsOCArNzU0LDcgQEAKIAkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyBpbnQgIGZ0ZGlfc2lvX3BvcnRfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICBmdGRpX3Npb19wb3J0X3JlbW92ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgIGZ0ZGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgZnRkaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZnRkaV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGZ0ZGlfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pOwogc3RhdGljIGludCAgZnRkaV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LApAQCAtMTY4MCw4ICsxNjg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmdGRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBmdGRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsgLyogZnRkaV9vcGVuICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDhjOTJiODguLjZmMzFlMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC04MSw2ICs4MSw5IEBACiAKIC8qIE9wZW5EQ0MgKHd3dy5vcGVuZGNjLmRlKSBwcm9kdWN0IGlkICovCiAjZGVmaW5lIEZURElfT1BFTkRDQ19QSUQJMHhCRkQ4CisjZGVmaW5lIEZURElfT1BFTkRDQ19TTklGRkVSX1BJRAkweEJGRDkKKyNkZWZpbmUgRlRESV9PUEVORENDX1RIUk9UVExFX1BJRAkweEJGREEKKyNkZWZpbmUgRlRESV9PUEVORENDX0dBVEVXQVlfUElECTB4QkZEQgogCiAvKiBTcHJvZyBJSSAoQW5kcmV3IENyb3NsYW5kJ3MgU3Byb2dJSSBEQ0MgaW50ZXJmYWNlKSAqLwogI2RlZmluZSBGVERJX1NQUk9HX0lJCQkweEYwQzgKQEAgLTkzMCw2ICs5MzMsNyBAQAogICovCiAjZGVmaW5lIEFESV9WSUQgCQkweDA0NTYKICNkZWZpbmUgQURJX0dOSUNFX1BJRCAJCTB4RjAwMAorI2RlZmluZSBBRElfR05JQ0VQTFVTX1BJRCAJMHhGMDAxCiAKIC8qCiAgKiBKRVRJIFNQRUNUUk9NRVRFUiBTUEVDQk9TIDEyMDEKQEAgLTk2OCw2ICs5NzIsMTIgQEAKICNkZWZpbmUgTUFSVkVMTF9PUEVOUkRfUElECTB4OWU5MAogCiAvKgorICogSGFtZWcgSE84MjAgYW5kIEhPODcwIGludGVyZmFjZSAodXNpbmcgVklEIDB4MDQwMykKKyAqLworI2RlZmluZSAgICAgICAgSEFNRUdfSE84MjBfUElEICAgICAgICAgMHhlZDc0CisjZGVmaW5lICAgICAgICBIQU1FR19ITzg3MF9QSUQgICAgICAgICAweGVkNzEKKworLyoKICAqICAgQm1SZXF1ZXN0VHlwZTogIDExMDAgMDAwMGIKICAqICAgYlJlcXVlc3Q6ICAgICAgIEZURElfRTJfUkVBRAogICogICB3VmFsdWU6ICAgICAgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKaW5kZXggODgzOWYxYy4uMjA0MzJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC05MzMsOCArOTMzLDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgZ2FybWluX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBnYXJtaW5fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1cyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCBjZTU3ZjZhLi5kZWJhMDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtMTE0LDggKzExNCw3IEBACiAjZW5kaWYKIH0KIAotaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC0xNjcsMjQgKzE2Niw2IEBACiAJfQogfQogCi1pbnQgdXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQotewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0JaW50IGksIGMgPSAwLCByOwotCi0JZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKLQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKLQkJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgcG9ydC0+cmVhZF91cmIpIHsKLQkJCXIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX05PSU8pOwotCQkJaWYgKHIgPCAwKQotCQkJCWMrKzsKLQkJfQotCX0KLQotCXJldHVybiBjID8gLUVJTyA6IDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKTsKLQogdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtMjczLDEyICsyNTQsODEgQEAKIAlyZXR1cm4gYndyaXRlOwogfQogCisvKioKKyAqIHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9zdGFydCAtIGtpY2sgb2ZmIGFuIFVSQiB3cml0ZQorICogQHBvcnQ6CVBvaW50ZXIgdG8gdGhlICZzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IGRhdGEKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcXVldWVkIG9uIHN1Y2Nlc3MuIFRoaXMgd2lsbCBiZSB6ZXJvIGlmIHRoZXJlCisgKiB3YXMgbm90aGluZyB0byBzZW5kLiBPdGhlcndpc2UsIGl0IHJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZQorICovCitzdGF0aWMgaW50IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9zdGFydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlpbnQgcmVzdWx0OworCWludCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgc3RhcnRfaW87CisKKwkvKiBBdG9taWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHdlIGNhbiBhbmQgbmVlZCB0byBzdGFydCBhIFVTQgorCSAqIG9wZXJhdGlvbi4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSkKKwkJc3RhcnRfaW8gPSBmYWxzZTsKKwllbHNlIHsKKwkJc3RhcnRfaW8gPSAoX19rZmlmb19sZW4ocG9ydC0+d3JpdGVfZmlmbykgIT0gMCk7CisJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gc3RhcnRfaW87CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCWlmICghc3RhcnRfaW8pCisJCXJldHVybiAwOworCisJZGF0YSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCWNvdW50ID0ga2ZpZm9fZ2V0KHBvcnQtPndyaXRlX2ZpZm8sIGRhdGEsIHBvcnQtPmJ1bGtfb3V0X3NpemUpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGNvdW50LCBkYXRhKTsKKworCS8qIHNldCB1cCBvdXIgdXJiICovCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LAorCQkJICAgKChzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8KKwkJCSAgICAgc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrIDoKKwkJCSAgICAgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2spLAorCQkJICAgcG9ydCk7CisKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJLyogZG9uJ3QgaGF2ZSB0byBncmFiIHRoZSBsb2NrIGhlcmUsIGFzIHdlIHdpbGwKKwkJICAgcmV0cnkgaWYgIT0gMCAqLworCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7CisJfSBlbHNlCisJCXJlc3VsdCA9IGNvdW50OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUgLSBnZW5lcmljIHdyaXRlIGZ1bmN0aW9uIGZvciBzZXJpYWwgVVNCIGRldmljZXMKKyAqIEB0dHk6CVBvaW50ZXIgdG8gJnN0cnVjdCB0dHlfc3RydWN0IGZvciB0aGUgZGV2aWNlCisgKiBAcG9ydDoJUG9pbnRlciB0byB0aGUgJnVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoZSBkZXZpY2UKKyAqIEBidWY6CVBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gd3JpdGUKKyAqIEBjb3VudDoJTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgd3JpdHRlbiwgd2hpY2ggbWF5IGJlIGFueXRoaW5nCisgKiBmcm9tIHplcm8gdG8gQGNvdW50LiBJZiBhbiBlcnJvciBvY2N1cnMsIGl0IHJldHVybnMgdGhlIG5lZ2F0aXZlIGVycm5vCisgKiB2YWx1ZS4KKyAqLwogaW50IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJaW50IHJlc3VsdDsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtMjg4LDU3ICszMzgsMjAgQEAKIAl9CiAKIAkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KLQlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAoIXNlcmlhbC0+bnVtX2J1bGtfb3V0KQorCQlyZXR1cm4gMDsKIAotCQlpZiAoc2VyaWFsLT50eXBlLT5tYXhfaW5fZmxpZ2h0X3VyYnMpCi0JCQlyZXR1cm4gdXNiX3NlcmlhbF9tdWx0aV91cmJfd3JpdGUodHR5LCBwb3J0LAotCQkJCQkJCSAgYnVmLCBjb3VudCk7CisJaWYgKHNlcmlhbC0+dHlwZS0+bWF4X2luX2ZsaWdodF91cmJzKQorCQlyZXR1cm4gdXNiX3NlcmlhbF9tdWx0aV91cmJfd3JpdGUodHR5LCBwb3J0LAorCQkJCQkJICBidWYsIGNvdW50KTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCQlpZiAocG9ydC0+d3JpdGVfdXJiX2J1c3kpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQkJCWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwljb3VudCA9IGtmaWZvX3B1dChwb3J0LT53cml0ZV9maWZvLCBidWYsIGNvdW50KTsKKwlyZXN1bHQgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfc3RhcnQocG9ydCk7CiAKLQkJY291bnQgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/Ci0JCQkJCXBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKwlpZiAocmVzdWx0ID49IDApCisJCXJlc3VsdCA9IGNvdW50OwogCi0JCW1lbWNweShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBjb3VudCk7Ci0JCWRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGRhdGEpOwotCi0JCS8qIHNldCB1cCBvdXIgdXJiICovCi0JCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsCi0JCQkJICAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAotCQkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAotCQkJCSAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwKLQkJCQkgICAoKHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaykgPwotCQkJCSAgICAgc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrIDoKLQkJCQkgICAgIHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrKSwKLQkJCQkgICBwb3J0KTsKLQotCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCi0JCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMTsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JCQkvKiBkb24ndCBoYXZlIHRvIGdyYWIgdGhlIGxvY2sgaGVyZSwgYXMgd2Ugd2lsbAotCQkJICAgcmV0cnkgaWYgIT0gMCAqLwotCQkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwotCQl9IGVsc2UKLQkJCXJlc3VsdCA9IGNvdW50OwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyogbm8gYnVsayBvdXQsIHNvIHJldHVybiAwIGJ5dGVzIHdyaXR0ZW4gKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlKTsKIApAQCAtMzU2LDkgKzM2OSw4IEBACiAJCQlyb29tID0gcG9ydC0+YnVsa19vdXRfc2l6ZSAqCiAJCQkJKHNlcmlhbC0+dHlwZS0+bWF4X2luX2ZsaWdodF91cmJzIC0KIAkJCQkgcG9ydC0+dXJic19pbl9mbGlnaHQpOwotCX0gZWxzZSBpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQgJiYgIShwb3J0LT53cml0ZV91cmJfYnVzeSkpIHsKLQkJcm9vbSA9IHBvcnQtPmJ1bGtfb3V0X3NpemU7Ci0JfQorCX0gZWxzZSBpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCisJCXJvb20gPSBwb3J0LT53cml0ZV9maWZvLT5zaXplIC0gX19rZmlmb19sZW4ocG9ydC0+d3JpdGVfZmlmbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgcm9vbSk7CkBAIC0zNzgsMTEgKzM5MCw4IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJCWNoYXJzID0gcG9ydC0+dHhfYnl0ZXNfZmxpZ2h0OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIGlmIChzZXJpYWwtPm51bV9idWxrX291dCkgewotCQkvKiBGSVhNRTogTG9ja2luZyAqLwotCQlpZiAocG9ydC0+d3JpdGVfdXJiX2J1c3kpCi0JCQljaGFycyA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKLQl9CisJfSBlbHNlIGlmIChzZXJpYWwtPm51bV9idWxrX291dCkKKwkJY2hhcnMgPSBrZmlmb19sZW4ocG9ydC0+d3JpdGVfZmlmbyk7CiAKIAlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCBjaGFycyk7CiAJcmV0dXJuIGNoYXJzOwpAQCAtNDg2LDE2ICs0OTUsMjMgQEAKIAkJaWYgKHBvcnQtPnVyYnNfaW5fZmxpZ2h0IDwgMCkKIAkJCXBvcnQtPnVyYnNfaW5fZmxpZ2h0ID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJCWlmIChzdGF0dXMpIHsKKwkJCWRiZygiJXMgLSBub256ZXJvIG11bHRpLXVyYiB3cml0ZSBidWxrIHN0YXR1cyAiCisJCQkJInJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQkJcmV0dXJuOworCQl9CiAJfSBlbHNlIHsKLQkJLyogSGFuZGxlIHRoZSBjYXNlIGZvciBzaW5nbGUgdXJiIG1vZGUgKi8KIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOworCisJCWlmIChzdGF0dXMpIHsKKwkJCWRiZygiJXMgLSBub256ZXJvIG11bHRpLXVyYiB3cml0ZSBidWxrIHN0YXR1cyAiCisJCQkJInJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQkJa2ZpZm9fcmVzZXQocG9ydC0+d3JpdGVfZmlmbyk7CisJCX0gZWxzZQorCQkJdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX3N0YXJ0KHBvcnQpOwogCX0KIAotCWlmIChzdGF0dXMpIHsKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOwotCQlyZXR1cm47Ci0JfQogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2spOwpAQCAtNTYwLDYgKzU3NiwzMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9oYW5kbGVfYnJlYWspOwogCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50IGksIGMgPSAwLCByOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KQorCQkJY29udGludWU7CisKKwkJaWYgKHBvcnQtPnJlYWRfdXJiKSB7CisJCQlyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9OT0lPKTsKKwkJCWlmIChyIDwgMCkKKwkJCQljKys7CisJCX0KKworCQlpZiAocG9ydC0+d3JpdGVfdXJiKSB7CisJCQlyID0gdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX3N0YXJ0KHBvcnQpOworCQkJaWYgKHIgPCAwKQorCQkJCWMrKzsKKwkJfQorCX0KKworCXJldHVybiBjID8gLUVJTyA6IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKTsKKwogdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCAwMTkxNjkzLi5iOTc5NjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMjA1LDggKzIwNSw3IEBACiBzdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2NtZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgdXNic2VyaWFsIGNhbGxiYWNrcyAqLwotc3RhdGljIGludCBlZGdlX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBlZGdlX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBlZGdlX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCBlZGdlX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTg1Miw4ICs4NTEsNyBAQAogICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIDAKICAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGVkZ2Vfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGVkZ2Vfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKQEAgLTI1NDIsNyArMjU0MCw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcgotICogIHRoaXMgZnVuY3Rpb24gYnVpbGRzIHVwIGEgdWFydCByZWdpc3RlciBtZXNzYWdlIGFuZCBzZW5kcyB0byB0byB0aGUgZGV2aWNlLgorICogIHRoaXMgZnVuY3Rpb24gYnVpbGRzIHVwIGEgdWFydCByZWdpc3RlciBtZXNzYWdlIGFuZCBzZW5kcyB0byB0aGUgZGV2aWNlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsCiAJCQkJCQlfX3U4IHJlZ051bSwgX191OCByZWdWYWx1ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKaW5kZXggZThiYzQyZi4uZDRjYzBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKQEAgLTE4MzEsOCArMTgzMSw3IEBACiAJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKLXN0YXRpYyBpbnQgZWRnZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZWRnZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IDI1NDVkNDUuLjI0ZmNjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNzUsNyArNzUsNyBAQAogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbiBpcGFxICovCiBzdGF0aWMgaW50ICBpcGFxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKKwkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgaXBhcV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgIGlwYXFfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CkBAIC01ODcsNyArNTg3LDcgQEAKIHN0YXRpYyBpbnQJCWJ5dGVzX291dDsKIAogc3RhdGljIGludCBpcGFxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXY7CkBAIC02MjgsMTEgKzYyOCw2IEBACiAJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOwogCX0KIAotCWlmICh0dHkpIHsKLQkJLyogRklYTUU6IFRoZXNlIHR3byBhcmUgYm9ndXMgKi8KLQkJdHR5LT5yYXcgPSAxOwotCQl0dHktPnJlYWxfcmF3ID0gMTsKLQl9CiAJLyoKIAkgKiBMb3NlIHRoZSBzbWFsbCBidWZmZXJzIHVzYnNlcmlhbCBwcm92aWRlcy4gTWFrZSBsYXJnZXIgb25lcy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwppbmRleCAyOWFkMDM4Li43MjdkMzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCkBAIC0xOTMsOCArMTkzLDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgaXB3X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBpcHdfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAl1OCBidWZfZmxvd19zdGF0aWNbMTZdID0gSVBXX0JZVEVTX0ZMT1dJTklUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDY2MDA5YjYuLjk1ZDhkMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTg2LDggKzg2LDcgQEAKIHN0YXRpYyBpbnQgeGJvZiA9IC0xOwogCiBzdGF0aWMgaW50ICBpcl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBpbnQgIGlyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbGVwKTsKK3N0YXRpYyBpbnQgIGlyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBpcl9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgIGlyX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTI5Niw4ICsyOTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBpcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJY2hhciAqYnVmZmVyOwogCWludCByZXN1bHQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwppbmRleCA5Njg3M2E3Li5lNmUwMmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwpAQCAtNDAsNyArNDAsNyBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMTAiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkluZmluaXR5IFVTQiBVbmxpbWl0ZWQgUGhvZW5peCBkcml2ZXIiCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewpAQCAtNjQsNiArNjQsNyBAQAogc3RhdGljIGludCBpdXVfY2FyZGluOwogc3RhdGljIGludCBpdXVfY2FyZG91dDsKIHN0YXRpYyBpbnQgeG1hczsKK3N0YXRpYyBpbnQgdmNjX2RlZmF1bHQgPSA1OwogCiBzdGF0aWMgdm9pZCByZWFkX3J4Y21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKQEAgLTcxLDcgKzcyLDYgQEAKIAlzcGlubG9ja190IGxvY2s7CS8qIHN0b3JlIGlycSBzdGF0ZSAqLwogCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OwogCXU4IGxpbmVfc3RhdHVzOwotCXU4IHRlcm1pb3NfaW5pdGlhbGl6ZWQ7CiAJaW50IHRpb3N0YXR1czsJCS8qIHN0b3JlIElVQVJUIFNJR05BTCBmb3IgdGlvY21nZXQgY2FsbCAqLwogCXU4IHJlc2V0OwkJLyogaWYgMSByZXNldCBpcyBuZWVkZWQgKi8KIAlpbnQgcG9sbDsJCS8qIG51bWJlciBvZiBwb2xsICovCkBAIC04MCw2ICs4MCw3IEBACiAJdTggKmJ1ZjsJCS8qIHVzZWQgZm9yIGluaXRpYWxpemUgc3BlZWQgKi8KIAl1OCAqZGJnYnVmOwkJLyogZGVidWcgYnVmZmVyICovCiAJdTggbGVuOworCWludCB2Y2M7CQkvKiB2Y2MgKGVpdGhlciAzIG9yIDUgVikgKi8KIH07CiAKIApAQCAtMTE1LDYgKzExNiw3IEBACiAJCWtmcmVlKHByaXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJcHJpdi0+dmNjID0gdmNjX2RlZmF1bHQ7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKQEAgLTEwMTAsMjIgKzEwMTIsMjggQEAKIAkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CiAJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CiAJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKLQkJbXNsZWVwKDEwMDApOwotCQkvKiB3YWl0IG9uZSBzZWNvbmQgdG8gZnJlZSBhbGwgYnVmZmVycyAqLwogCQlpdXVfbGVkKHBvcnQsIDAsIDAsIDB4RjAwMCwgMHhGRik7Ci0JCW1zbGVlcCgxMDAwKTsKLQkJdXNiX3Jlc2V0X2RldmljZShwb3J0LT5zZXJpYWwtPmRldik7CiAJfQogfQogCi1zdGF0aWMgaW50IGl1dV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIGl1dV9pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CisJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQ0xPQ0FMIHwgQ1JFQUQgfCBDUzggfCBCOTYwMAorCQkJCXwgVElPQ01fQ1RTIHwgQ1NUT1BCIHwgUEFSRU5COworCXR0eS0+dGVybWlvcy0+Y19pc3BlZWQgPSA5NjAwOworCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSA5NjAwOworCXR0eS0+dGVybWlvcy0+Y19sZmxhZyA9IDA7CisJdHR5LT50ZXJtaW9zLT5jX29mbGFnID0gMDsKKwl0dHktPnRlcm1pb3MtPmNfaWZsYWcgPSAwOworfQorCitzdGF0aWMgaW50IGl1dV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAl1OCAqYnVmOwogCWludCByZXN1bHQ7CiAJdTMyIGFjdHVhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpdXVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWRiZygiJXMgLSAgcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtMTA2NCwyMSArMTA3Miw3IEBACiAJCQkgIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLCA1MTIsCiAJCQkgIE5VTEwsIE5VTEwpOwogCi0JLyogc2V0IHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKHR0eSAmJiAhcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgewotCQkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IENMT0NBTCB8IENSRUFEIHwgQ1M4IHwgQjk2MDAKLQkJCQkJfCBUSU9DTV9DVFMgfCBDU1RPUEIgfCBQQVJFTkI7Ci0JCXR0eS0+dGVybWlvcy0+Y19pc3BlZWQgPSA5NjAwOwotCQl0dHktPnRlcm1pb3MtPmNfb3NwZWVkID0gOTYwMDsKLQkJdHR5LT50ZXJtaW9zLT5jX2xmbGFnID0gMDsKLQkJdHR5LT50ZXJtaW9zLT5jX29mbGFnID0gMDsKLQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnID0gMDsKLQkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7Ci0JCXByaXYtPnBvbGwgPSAwOwotCSB9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnBvbGwgPSAwOwogCiAJLyogaW5pdGlhbGl6ZSB3cml0ZWJ1ZiAqLwogI2RlZmluZSBGSVNIKGEsIGIsIGMsIGQpIGRvIHsgXApAQCAtMTE4Nyw2ICsxMTgxLDk1IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogaG93IHRvIGNoYW5nZSBWQ0MgKi8KK3N0YXRpYyBpbnQgaXV1X3ZjY19zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHZjYykKK3sKKwlpbnQgc3RhdHVzOworCXU4ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKDUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRiZygiJXMgLSBlbnRlciIsIF9fZnVuY19fKTsKKworCWJ1ZlswXSA9IElVVV9TRVRfVkNDOworCWJ1ZlsxXSA9IHZjYyAmIDB4RkY7CisJYnVmWzJdID0gKHZjYyA+PiA4KSAmIDB4RkY7CisJYnVmWzNdID0gKHZjYyA+PiAxNikgJiAweEZGOworCWJ1Zls0XSA9ICh2Y2MgPj4gMjQpICYgMHhGRjsKKworCXN0YXR1cyA9IGJ1bGtfaW1tZWRpYXRlKHBvcnQsIGJ1ZiwgNSk7CisJa2ZyZWUoYnVmKTsKKworCWlmIChzdGF0dXMgIT0gSVVVX09QRVJBVElPTl9PSykKKwkJZGJnKCIlcyAtIHZjYyBlcnJvciBzdGF0dXMgPSAlMngiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwllbHNlCisJCWRiZygiJXMgLSB2Y2MgT0sgISIsIF9fZnVuY19fKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBTeXNmcyBBdHRyaWJ1dGVzCisgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd192Y2NfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisJc3RydWN0IGl1dV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnZjYyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3ZjY19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCXN0cnVjdCBpdXVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIHY7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnYpKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSB2Y2NfbW9kZTogJXMgaXMgbm90IGEgdW5zaWduZWQgbG9uZ1xuIiwKKwkJCQlfX2Z1bmNfXywgYnVmKTsKKwkJZ290byBmYWlsX3N0b3JlX3ZjY19tb2RlOworCX0KKworCWRiZygiJXM6IHNldHRpbmcgdmNjX21vZGUgPSAlbGQiLCBfX2Z1bmNfXywgdik7CisKKwlpZiAoKHYgIT0gMykgJiYgKHYgIT0gNSkpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIHZjY19tb2RlICVsZCBpcyBpbnZhbGlkXG4iLCBfX2Z1bmNfXywgdik7CisJfSBlbHNlIHsKKwkJaXV1X3ZjY19zZXQocG9ydCwgdik7CisJCXByaXYtPnZjYyA9IHY7CisJfQorZmFpbF9zdG9yZV92Y2NfbW9kZToKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih2Y2NfbW9kZSwgU19JUlVTUiB8IFNfSVdVU1IsIHNob3dfdmNjX21vZGUsCisJc3RvcmVfdmNjX21vZGUpOworCitzdGF0aWMgaW50IGl1dV9jcmVhdGVfc3lzZnNfYXR0cnMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJcmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZSgmcG9ydC0+ZGV2LCAmZGV2X2F0dHJfdmNjX21vZGUpOworfQorCitzdGF0aWMgaW50IGl1dV9yZW1vdmVfc3lzZnNfYXR0cnMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZwb3J0LT5kZXYsICZkZXZfYXR0cl92Y2NfbW9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFbmQgU3lzZnMgQXR0cmlidXRlcworICovCisKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgaXV1X2RldmljZSA9IHsKIAkuZHJpdmVyID0gewogCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTExOTQsNiArMTI3Nyw4IEBACiAJCSAgIH0sCiAJLmlkX3RhYmxlID0gaWRfdGFibGUsCiAJLm51bV9wb3J0cyA9IDEsCisJLnBvcnRfcHJvYmUgPSBpdXVfY3JlYXRlX3N5c2ZzX2F0dHJzLAorCS5wb3J0X3JlbW92ZSA9IGl1dV9yZW1vdmVfc3lzZnNfYXR0cnMsCiAJLm9wZW4gPSBpdXVfb3BlbiwKIAkuY2xvc2UgPSBpdXVfY2xvc2UsCiAJLndyaXRlID0gaXV1X3VhcnRfd3JpdGUsCkBAIC0xMjAxLDYgKzEyODYsNyBAQAogCS50aW9jbWdldCA9IGl1dV90aW9jbWdldCwKIAkudGlvY21zZXQgPSBpdXVfdGlvY21zZXQsCiAJLnNldF90ZXJtaW9zID0gaXV1X3NldF90ZXJtaW9zLAorCS5pbml0X3Rlcm1pb3MgPSBpdXVfaW5pdF90ZXJtaW9zLAogCS5hdHRhY2ggPSBpdXVfc3RhcnR1cCwKIAkucmVsZWFzZSA9IGl1dV9yZWxlYXNlLAogfTsKQEAgLTEyNDIsMTQgKzEzMjgsMTkgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwogCiBtb2R1bGVfcGFyYW0oeG1hcywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyh4bWFzLCAieG1hcyBjb2xvciBlbmFibGVkIG9yIG5vdCIpOworTU9EVUxFX1BBUk1fREVTQyh4bWFzLCAiWG1hcyBjb2xvcnMgZW5hYmxlZCBvciBub3QiKTsKIAogbW9kdWxlX3BhcmFtKGJvb3N0LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoYm9vc3QsICJvdmVyY2xvY2sgYm9vc3QgcGVyY2VudCAxMDAgdG8gNTAwIik7CitNT0RVTEVfUEFSTV9ERVNDKGJvb3N0LCAiQ2FyZCBvdmVyY2xvY2sgYm9vc3QgKGluIHBlcmNlbnQgMTAwLTUwMCkiKTsKIAogbW9kdWxlX3BhcmFtKGNsb2NrbW9kZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGNsb2NrbW9kZSwgIjE9M01oejU3OSwyPTNNaHo2ODAsMz02TWh6Iik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrbW9kZSwgIkNhcmQgY2xvY2sgbW9kZSAoMT0zLjU3OSBNSHosIDI9My42ODAgTUh6LCAiCisJCSIzPTYgTWh6KSIpOwogCiBtb2R1bGVfcGFyYW0oY2Rtb2RlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoY2Rtb2RlLCAiQ2FyZCBkZXRlY3QgbW9kZSAwPW5vbmUsIDE9Q0QsIDI9IUNELCAzPURTUiwgIgotCQkgIjQ9IURTUiwgNT1DVFMsIDY9IUNUUywgNz1SSU5HLCA4PSFSSU5HIik7CitNT0RVTEVfUEFSTV9ERVNDKGNkbW9kZSwgIkNhcmQgZGV0ZWN0IG1vZGUgKDA9bm9uZSwgMT1DRCwgMj0hQ0QsIDM9RFNSLCAiCisJCSAiND0hRFNSLCA1PUNUUywgNj0hQ1RTLCA3PVJJTkcsIDg9IVJJTkcpIik7CisKK21vZHVsZV9wYXJhbSh2Y2NfZGVmYXVsdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHZjY19kZWZhdWx0LCAiU2V0IGRlZmF1bHQgVkNDIChlaXRoZXIgMyBmb3IgMy4zViBvciA1ICIKKwkJImZvciA1VikuIERlZmF1bHQgdG8gNS4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCmluZGV4IDI1OTRiODcuLmY4YzRiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwpAQCAtMTIwOSw4ICsxMjA5LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGtleXNwYW5fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGtleXNwYW5fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJKnBfcHJpdjsKIAlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCmluZGV4IDMxMDdlZDEuLjMwNzcxZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaApAQCAtMzYsOCArMzYsNyBAQAogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBLZXlzcGFuIHNlcmlhbCBjb252ZXJ0ZXIgKi8KIHN0YXRpYyBpbnQgIGtleXNwYW5fb3BlbgkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgc3RydWN0IGZpbGUgKmZpbHApOworCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBrZXlzcGFuX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBrZXlzcGFuX2R0cl9ydHMJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pOwogc3RhdGljIGludCAga2V5c3Bhbl9zdGFydHVwCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCmluZGV4IGQwYjEyZTQuLjI1N2MxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCkBAIC02ODEsNyArNjgxLDcgQEAKIAogCiBzdGF0aWMgaW50IGtleXNwYW5fcGRhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorCQkJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJdW5zaWduZWQgY2hhciByb29tOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKaW5kZXggMGY0NGJiOC4uZjczNzMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCkBAIC0zOCw3ICszOCw3IEBACiAgKiAgIDAuM2EgLSBpbXBsZW1lbnRlZCBwb29scyBvZiB3cml0ZSBVUkJzCiAgKiAgIDAuMyAgLSBhbHBoYSB2ZXJzaW9uIGZvciBwdWJsaWMgdGVzdGluZwogICogICAwLjIgIC0gVElPQ01HRVQgd29ya3MsIHNvIGF1dG9waWxvdCgxKSBjYW4gYmUgdXNlZCEKLSAqICAgMC4xICAtIGNhbiBiZSB1c2VkIHRvIHRvIHBpbG90LXhmZXIgLXAgL2Rldi90dHlVU0IwIC1sCisgKiAgIDAuMSAgLSBjYW4gYmUgdXNlZCB0byBkbyBwaWxvdC14ZmVyIC1wIC9kZXYvdHR5VVNCMCAtbAogICoKICAqICAgVGhlIGRyaXZlciBza2VsZXRvbiBpcyBtYWlubHkgYmFzZWQgb24gbWN0X3UyMzIuYyBhbmQgdmFyaW91cyBvdGhlcgogICogICBwaWVjZXMgb2YgY29kZSBzaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB0aGUgZHJpdmVycy91c2Ivc2VyaWFsLyBkaXJlY3RvcnkuCkBAIC03NSw4ICs3NSw3IEBACiBzdGF0aWMgaW50ICBrbHNpXzEwNV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQga2xzaV8xMDVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkIGtsc2lfMTA1X3JlbGVhc2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBrbHNpXzEwNV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBrbHNpXzEwNV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQga2xzaV8xMDVfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICBrbHNpXzEwNV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTM1OCw4ICszNTcsNyBAQAogCX0KIH0gLyoga2xzaV8xMDVfcmVsZWFzZSAqLwogCi1zdGF0aWMgaW50ICBrbHNpXzEwNV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTM3MSwxMCArMzY5LDYgQEAKIAogCWRiZygiJXMgcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JLyogZm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzCi0JICogdGhlIGRhdGEgdGhyb3VnaAotCSAqIHR0eS0+bG93X2xhdGVuY3kgPSAxOyAqLwotCiAJLyogRG8gYSBkZWZpbmVkIHJlc3RhcnQ6CiAJICogU2V0IHVwIHNhbmUgZGVmYXVsdCBiYXVkIHJhdGUgYW5kIHNlbmQgdGhlICdSRUFEX09OJwogCSAqIHZlbmRvciBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCmluZGV4IDZkYjBlNTYuLjQ1ZWE2OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKQEAgLTcwLDggKzcwLDcgQEAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBpbnQgIGtvYmlsX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBrb2JpbF9yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCAga29iaWxfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAga29iaWxfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGtvYmlsX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCAga29iaWxfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC04NSw3ICs4NCw3IEBACiBzdGF0aWMgdm9pZCBrb2JpbF93cml0ZV9jYWxsYmFjayhzdHJ1Y3QgdXJiICpwdXJiKTsKIHN0YXRpYyB2b2lkIGtvYmlsX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7Ci0KK3N0YXRpYyB2b2lkIGtvYmlsX2luaXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0gewogCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB9LApAQCAtMTIwLDYgKzExOSw3IEBACiAJLnJlbGVhc2UgPQkJa29iaWxfcmVsZWFzZSwKIAkuaW9jdGwgPQkJa29iaWxfaW9jdGwsCiAJLnNldF90ZXJtaW9zID0JCWtvYmlsX3NldF90ZXJtaW9zLAorCS5pbml0X3Rlcm1pb3MgPQkJa29iaWxfaW5pdF90ZXJtaW9zLAogCS50aW9jbWdldCA9CQlrb2JpbF90aW9jbWdldCwKIAkudGlvY21zZXQgPQkJa29iaWxfdGlvY21zZXQsCiAJLm9wZW4gPQkJCWtvYmlsX29wZW4sCkBAIC0yMTAsOSArMjEwLDE3IEBACiAJCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKIH0KIAorc3RhdGljIHZvaWQga29iaWxfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJLyogRGVmYXVsdCB0byBlY2hvIG9mZiBhbmQgb3RoZXIgc2FuZSBkZXZpY2Ugc2V0dGluZ3MgKi8KKwl0dHktPnRlcm1pb3MtPmNfbGZsYWcgPSAwOworCXR0eS0+dGVybWlvcy0+Y19sZmxhZyAmPSB+KElTSUcgfCBJQ0FOT04gfCBFQ0hPIHwgSUVYVEVOIHwgWENBU0UpOworCXR0eS0+dGVybWlvcy0+Y19pZmxhZyA9IElHTkJSSyB8IElHTlBBUiB8IElYT0ZGOworCS8qIGRvIE5PVCB0cmFuc2xhdGUgQ1IgdG8gQ1ItTkwgKDB4MEEgLT4gMHgwQSAweDBEKSAqLworCXR0eS0+dGVybWlvcy0+Y19vZmxhZyAmPSB+T05MQ1I7Cit9CiAKLXN0YXRpYyBpbnQga29iaWxfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGtvYmlsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqcHJpdjsKQEAgLTIyNiwxNiArMjM0LDYgQEAKIAkvKiBzb21lb25lIHNldHMgdGhlIGRldiB0byAwIGlmIHRoZSBjbG9zZSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkICovCiAJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAKLQlpZiAodHR5KSB7Ci0KLQkJLyogRGVmYXVsdCB0byBlY2hvIG9mZiBhbmQgb3RoZXIgc2FuZSBkZXZpY2Ugc2V0dGluZ3MgKi8KLQkJdHR5LT50ZXJtaW9zLT5jX2xmbGFnID0gMDsKLQkJdHR5LT50ZXJtaW9zLT5jX2xmbGFnICY9IH4oSVNJRyB8IElDQU5PTiB8IEVDSE8gfCBJRVhURU4gfAotCQkJCQkJCQkgWENBU0UpOwotCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgPSBJR05CUksgfCBJR05QQVIgfCBJWE9GRjsKLQkJLyogZG8gTk9UIHRyYW5zbGF0ZSBDUiB0byBDUi1OTCAoMHgwQSAtPiAweDBBIDB4MEQpICovCi0JCXR0eS0+dGVybWlvcy0+Y19vZmxhZyAmPSB+T05MQ1I7Ci0JfQogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyICovCiAJdHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRyYW5zZmVyX2J1ZmZlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggZDg4MjVlMS4uYWQ0OTk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTkzLDggKzkzLDcgQEAKICAqLwogc3RhdGljIGludCAgbWN0X3UyMzJfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkIG1jdF91MjMyX3JlbGVhc2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7Ci1zdGF0aWMgaW50ICBtY3RfdTIzMl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgbWN0X3UyMzJfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBtY3RfdTIzMl9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbik7CiBzdGF0aWMgdm9pZCBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwpAQCAtNDIxLDggKzQyMCw3IEBACiAJfQogfSAvKiBtY3RfdTIzMl9yZWxlYXNlICovCiAKLXN0YXRpYyBpbnQgIG1jdF91MjMyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC01NjgsMTAgKzU2NiwxMyBAQAogCSAqIFdvcmstYS1yb3VuZDogaGFuZGxlIHRoZSAndXN1YWwnIGJ1bGstaW4gcGlwZSBoZXJlCiAJICovCiAJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDIpIHsKLQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQkJaWYgKHR0eSkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0KIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKaW5kZXggY2NkNGRkMy4uNzYzZTMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCkBAIC04NSw3ICs4NSw3IEBACiAjZGVmaW5lIE1PU0NISVBfREVWSUNFX0lEXzc3MjAJCTB4NzcyMAogI2RlZmluZSBNT1NDSElQX0RFVklDRV9JRF83NzE1CQkweDc3MTUKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1vc2NoaXBfcG9ydF9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtb3NjaGlwX3BvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLCBNT1NDSElQX0RFVklDRV9JRF83NzIwKSB9LAogCXsgfSAvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTMxOSw4ICszMTksNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgbW9zNzcyMF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgbW9zNzcyMF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0MDsKQEAgLTM3OCwxMCArMzc3LDE0IEBACiAJIC8qIEluaXRpYWxpemUgTUNTNzcyMCAtLSBXcml0ZSBJbml0IHZhbHVlcyB0byBjb3JyZXNwb25kaW5nIFJlZ2lzdGVycwogCSAgKgogCSAgKiBSZWdpc3RlciBJbmRleAorCSAgKiAwIDogVEhSL1JIUgogCSAgKiAxIDogSUVSCiAJICAqIDIgOiBGQ1IKIAkgICogMyA6IExDUgogCSAgKiA0IDogTUNSCisJICAqIDUgOiBMU1IKKwkgICogNiA6IE1TUgorCSAgKiA3IDogU1BSCiAJICAqCiAJICAqIDB4MDggOiBTUDEvMiBDb250cm9sIFJlZwogCSAgKi8KQEAgLTEyNTAsMjAgKzEyNTMsODggQEAKIHN0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc3MjBfcG9ydCwgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCiB7Ci0JaW50IGNvdW50OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGNoYXIgZGF0YSA9IDA7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpbnQgY291bnQ7CiAKIAljb3VudCA9IG1vczc3MjBfY2hhcnNfaW5fYnVmZmVyKHR0eSk7CiAJaWYgKGNvdW50ID09IDApIHsKLQkJZGJnKCIlcyAtLSBFbXB0eSIsIF9fZnVuY19fKTsKLQkJcmVzdWx0ID0gVElPQ1NFUl9URU1UOworCQlzZW5kX21vc19jbWQocG9ydC0+c2VyaWFsLCBNT1NfUkVBRCwgcG9ydF9udW1iZXIsCisJCQkJCQkJVUFSVF9MU1IsICZkYXRhKTsKKwkJaWYgKChkYXRhICYgKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKSkKKwkJCQkJPT0gKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKSkgeworCQkJZGJnKCIlcyAtLSBFbXB0eSIsIF9fZnVuY19fKTsKKwkJCXJlc3VsdCA9IFRJT0NTRVJfVEVNVDsKKwkJfQogCX0KLQogCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbW9zNzcyMF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgaW50IG1jciA7CisJdW5zaWduZWQgaW50IG1zciA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJbWNyID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1I7CisJbXNyID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dNU1I7CisKKwlyZXN1bHQgPSAoKG1jciAmIFVBUlRfTUNSX0RUUikgID8gVElPQ01fRFRSIDogMCkgICAvKiAweDAwMiAqLworCSAgfCAoKG1jciAmIFVBUlRfTUNSX1JUUykgICA/IFRJT0NNX1JUUyA6IDApICAgLyogMHgwMDQgKi8KKwkgIHwgKChtc3IgJiBVQVJUX01TUl9DVFMpICAgPyBUSU9DTV9DVFMgOiAwKSAgIC8qIDB4MDIwICovCisJICB8ICgobXNyICYgVUFSVF9NU1JfRENEKSAgID8gVElPQ01fQ0FSIDogMCkgICAvKiAweDA0MCAqLworCSAgfCAoKG1zciAmIFVBUlRfTVNSX1JJKSAgICA/IFRJT0NNX1JJIDogIDApICAgLyogMHgwODAgKi8KKwkgIHwgKChtc3IgJiBVQVJUX01TUl9EU1IpICAgPyBUSU9DTV9EU1IgOiAwKTsgIC8qIDB4MTAwICovCisKKwlkYmcoIiVzIC0tICV4IiwgX19mdW5jX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IG1vczc3MjBfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IG1jciA7CisJdW5zaWduZWQgY2hhciBsbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkYmcoImhlIHdhcyBhdCB0aW9jbWdldCIpOworCisJbWNyID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1I7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQltY3IgfD0gVUFSVF9NQ1JfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCW1jciB8PSBVQVJUX01DUl9EVFI7CisJaWYgKHNldCAmIFRJT0NNX0xPT1ApCisJCW1jciB8PSBVQVJUX01DUl9MT09QOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQltY3IgJj0gflVBUlRfTUNSX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCW1jciAmPSB+VUFSVF9NQ1JfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX0xPT1ApCisJCW1jciAmPSB+VUFSVF9NQ1JfTE9PUDsKKworCW1vczc3MjBfcG9ydC0+c2hhZG93TUNSID0gbWNyOworCWxtY3IgPSBtb3M3NzIwX3BvcnQtPnNoYWRvd01DUjsKKworCXNlbmRfbW9zX2NtZChwb3J0LT5zZXJpYWwsIE1PU19XUklURSwKKwkJcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciwgVUFSVF9NQ1IsICZsbWNyKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNldF9tb2RlbV9pbmZvKHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc3MjBfcG9ydCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCiB7CkBAIC0xMzAxLDE0ICsxMzcyLDYgQEAKIAkJCW1jciAmPSB+VUFSVF9NQ1JfTE9PUDsKIAkJYnJlYWs7CiAKLQljYXNlIFRJT0NNU0VUOgotCQkvKiB0dXJuIG9mZiB0aGUgUlRTIGFuZCBEVFIgYW5kIExPT1BCQUNLCi0JCSAqIGFuZCB0aGVuIG9ubHkgdHVybiBvbiB3aGF0IHdhcyBhc2tlZCB0byAqLwotCQltY3IgJj0gIH4oVUFSVF9NQ1JfUlRTIHwgVUFSVF9NQ1JfRFRSIHwgVUFSVF9NQ1JfTE9PUCk7Ci0JCW1jciB8PSAoKGFyZyAmIFRJT0NNX1JUUykgPyBVQVJUX01DUl9SVFMgOiAwKTsKLQkJbWNyIHw9ICgoYXJnICYgVElPQ01fRFRSKSA/IFVBUlRfTUNSX0RUUiA6IDApOwotCQltY3IgfD0gKChhcmcgJiBUSU9DTV9MT09QKSA/IFVBUlRfTUNSX0xPT1AgOiAwKTsKLQkJYnJlYWs7CiAJfQogCiAJbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1IgPSBtY3I7CkBAIC0xMzIwLDI4ICsxMzgzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfbW9kZW1faW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQsCi0JCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQotewotCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwotCXVuc2lnbmVkIGludCBtc3IgPSBtb3M3NzIwX3BvcnQtPnNoYWRvd01TUjsKLQl1bnNpZ25lZCBpbnQgbWNyID0gbW9zNzcyMF9wb3J0LT5zaGFkb3dNQ1I7Ci0KLQlyZXN1bHQgPSAoKG1jciAmIFVBUlRfTUNSX0RUUikJPyBUSU9DTV9EVFI6IDApCSAgLyogMHgwMDIgKi8KLQkJICB8ICgobWNyICYgVUFSVF9NQ1JfUlRTKQk/IFRJT0NNX1JUUzogMCkgICAvKiAweDAwNCAqLwotCQkgIHwgKChtc3IgJiBVQVJUX01TUl9DVFMpCT8gVElPQ01fQ1RTOiAwKSAgIC8qIDB4MDIwICovCi0JCSAgfCAoKG1zciAmIFVBUlRfTVNSX0RDRCkJPyBUSU9DTV9DQVI6IDApICAgLyogMHgwNDAgKi8KLQkJICB8ICgobXNyICYgVUFSVF9NU1JfUkkpCT8gVElPQ01fUkk6ICAwKSAgIC8qIDB4MDgwICovCi0JCSAgfCAoKG1zciAmIFVBUlRfTVNSX0RTUikJPyBUSU9DTV9EU1I6IDApOyAgLyogMHgxMDAgKi8KLQotCi0JZGJnKCIlcyAtLSAleCIsIF9fZnVuY19fLCByZXN1bHQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0LAogCQkJICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQogewpAQCAtMTM5MiwxNyArMTQzMywxMSBAQAogCS8qIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgdXNpbmcgdGhlIG1vZGUgbWV0aG9kcyAqLwogCWNhc2UgVElPQ01CSVM6CiAJY2FzZSBUSU9DTUJJQzoKLQljYXNlIFRJT0NNU0VUOgogCQlkYmcoIiVzICglZCkgVElPQ01TRVQvVElPQ01CSUMvVElPQ01TRVQiLAogCQkJCQlfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAkJcmV0dXJuIHNldF9tb2RlbV9pbmZvKG1vczc3MjBfcG9ydCwgY21kLAogCQkJCSAgICAgICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKTsKIAotCWNhc2UgVElPQ01HRVQ6Ci0JCWRiZygiJXMgKCVkKSBUSU9DTUdFVCIsIF9fZnVuY19fLCAgcG9ydC0+bnVtYmVyKTsKLQkJcmV0dXJuIGdldF9tb2RlbV9pbmZvKG1vczc3MjBfcG9ydCwKLQkJCQkgICAgICAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZyk7Ci0KIAljYXNlIFRJT0NHU0VSSUFMOgogCQlkYmcoIiVzICglZCkgVElPQ0dTRVJJQUwiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7CiAJCXJldHVybiBnZXRfc2VyaWFsX2luZm8obW9zNzcyMF9wb3J0LApAQCAtMTU1Nyw2ICsxNTkyLDggQEAKIAkuYXR0YWNoCQkJPSBtb3M3NzIwX3N0YXJ0dXAsCiAJLnJlbGVhc2UJCT0gbW9zNzcyMF9yZWxlYXNlLAogCS5pb2N0bAkJCT0gbW9zNzcyMF9pb2N0bCwKKwkudGlvY21nZXQJCT0gbW9zNzcyMF90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gbW9zNzcyMF90aW9jbXNldCwKIAkuc2V0X3Rlcm1pb3MJCT0gbW9zNzcyMF9zZXRfdGVybWlvcywKIAkud3JpdGUJCQk9IG1vczc3MjBfd3JpdGUsCiAJLndyaXRlX3Jvb20JCT0gbW9zNzcyMF93cml0ZV9yb29tLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKaW5kZXggMjcwMDA5YS4uZjExYWJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCkBAIC04MjQsOCArODI0LDcgQEAKICAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgbW9zNzg0MF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgbW9zNzg0MF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJaW50IHJlc3BvbnNlOwogCWludCBqOwpAQCAtMjEzNCwxMDYgKzIxMzMsNiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIG1vczc4NDBfc2V0X21vZGVtX2luZm8KLSAqICAgICAgZnVuY3Rpb24gdG8gc2V0IG1vZGVtIGluZm8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRklYTUU6IFNob3VsZCBiZSB1c2luZyB0aGUgbW9kZWwgY29udHJvbCBob29rcyAqLwotCi1zdGF0aWMgaW50IG1vczc4NDBfc2V0X21vZGVtX2luZm8oc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0LAotCQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgaW50IG1jcjsKLQl1bnNpZ25lZCBpbnQgYXJnOwotCV9fdTE2IERhdGE7Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwotCi0JaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiltb3M3ODQwX3BvcnQtPnBvcnQ7Ci0JaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX2Z1bmNfXykpIHsKLQkJZGJnKCIlcyIsICJJbnZhbGlkIHBvcnQiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1jciA9IG1vczc4NDBfcG9ydC0+c2hhZG93TUNSOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmcsIHZhbHVlLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRJT0NNQklTOgotCQlpZiAoYXJnICYgVElPQ01fUlRTKQotCQkJbWNyIHw9IE1DUl9SVFM7Ci0JCWlmIChhcmcgJiBUSU9DTV9EVFIpCi0JCQltY3IgfD0gTUNSX1JUUzsKLQkJaWYgKGFyZyAmIFRJT0NNX0xPT1ApCi0JCQltY3IgfD0gTUNSX0xPT1BCQUNLOwotCQlicmVhazsKLQotCWNhc2UgVElPQ01CSUM6Ci0JCWlmIChhcmcgJiBUSU9DTV9SVFMpCi0JCQltY3IgJj0gfk1DUl9SVFM7Ci0JCWlmIChhcmcgJiBUSU9DTV9EVFIpCi0JCQltY3IgJj0gfk1DUl9SVFM7Ci0JCWlmIChhcmcgJiBUSU9DTV9MT09QKQotCQkJbWNyICY9IH5NQ1JfTE9PUEJBQ0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBUSU9DTVNFVDoKLQkJLyogdHVybiBvZmYgdGhlIFJUUyBhbmQgRFRSIGFuZCBMT09QQkFDSwotCQkgKiBhbmQgdGhlbiBvbmx5IHR1cm4gb24gd2hhdCB3YXMgYXNrZWQgdG8gKi8KLQkJbWNyICY9IH4oTUNSX1JUUyB8IE1DUl9EVFIgfCBNQ1JfTE9PUEJBQ0spOwotCQltY3IgfD0gKChhcmcgJiBUSU9DTV9SVFMpID8gTUNSX1JUUyA6IDApOwotCQltY3IgfD0gKChhcmcgJiBUSU9DTV9EVFIpID8gTUNSX0RUUiA6IDApOwotCQltY3IgfD0gKChhcmcgJiBUSU9DTV9MT09QKSA/IE1DUl9MT09QQkFDSyA6IDApOwotCQlicmVhazsKLQl9Ci0KLQlsb2NrX2tlcm5lbCgpOwotCW1vczc4NDBfcG9ydC0+c2hhZG93TUNSID0gbWNyOwotCi0JRGF0YSA9IG1vczc4NDBfcG9ydC0+c2hhZG93TUNSOwotCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOwotCXVubG9ja19rZXJuZWwoKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlkYmcoInNldHRpbmcgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiBGYWlsZWQiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIG1vczc4NDBfZ2V0X21vZGVtX2luZm8KLSAqICAgICAgZnVuY3Rpb24gdG8gZ2V0IG1vZGVtIGluZm8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBtb3M3ODQwX2dldF9tb2RlbV9pbmZvKHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCwKLQkJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQotewotCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwotCV9fdTE2IG1zcjsKLQl1bnNpZ25lZCBpbnQgbWNyID0gbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1I7Ci0gICAgICAgIG1vczc4NDBfZ2V0X3VhcnRfcmVnKG1vczc4NDBfcG9ydC0+cG9ydCwKLQkJCQkJCU1PREVNX1NUQVRVU19SRUdJU1RFUiwgJm1zcik7Ci0JcmVzdWx0ID0gKChtY3IgJiBNQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCS8qIDB4MDAyICovCi0JICAgIHwoKG1jciAmIE1DUl9SVFMpID8gVElPQ01fUlRTIDogMCkJLyogMHgwMDQgKi8KLQkgICAgfCgobXNyICYgTU9TNzg0MF9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCS8qIDB4MDIwICovCi0JICAgIHwoKG1zciAmIE1PUzc4NDBfTVNSX0NEKSA/IFRJT0NNX0NBUiA6IDApCS8qIDB4MDQwICovCi0JICAgIHwoKG1zciAmIE1PUzc4NDBfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkJLyogMHgwODAgKi8KLQkgICAgfCgobXNyICYgTU9TNzg0MF9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOwkvKiAweDEwMCAqLwotCi0JZGJnKCIlcyAtLSAleCIsIF9fZnVuY19fLCByZXN1bHQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBtb3M3ODQwX2dldF9zZXJpYWxfaW5mbwogICogICAgICBmdW5jdGlvbiB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgc2VyaWFsIHBvcnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyODEsNyArMjE4MCw2IEBACiAJc3RydWN0IGFzeW5jX2ljb3VudCBjbm93OwogCXN0cnVjdCBhc3luY19pY291bnQgY3ByZXY7CiAJc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3QgaWNvdW50OwotCWludCBtb3NyZXQgPSAwOwogCiAJaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX2Z1bmNfXykpIHsKIAkJZGJnKCIlcyIsICJJbnZhbGlkIHBvcnQiKTsKQEAgLTIzMDMsMjAgKzIyMDEsNiBAQAogCQlyZXR1cm4gbW9zNzg0MF9nZXRfbHNyX2luZm8odHR5LCBhcmdwKTsKIAkJcmV0dXJuIDA7CiAKLQkvKiBGSVhNRTogdXNlIHRoZSBtb2RlbSBob29rcyBhbmQgcmVtb3ZlIHRoaXMgKi8KLQljYXNlIFRJT0NNQklTOgotCWNhc2UgVElPQ01CSUM6Ci0JY2FzZSBUSU9DTVNFVDoKLQkJZGJnKCIlcyAoJWQpIFRJT0NNU0VUL1RJT0NNQklDL1RJT0NNU0VUIiwgX19mdW5jX18sCi0JCSAgICBwb3J0LT5udW1iZXIpOwotCQltb3NyZXQgPQotCQkgICAgbW9zNzg0MF9zZXRfbW9kZW1faW5mbyhtb3M3ODQwX3BvcnQsIGNtZCwgYXJncCk7Ci0JCXJldHVybiBtb3NyZXQ7Ci0KLQljYXNlIFRJT0NNR0VUOgotCQlkYmcoIiVzICglZCkgVElPQ01HRVQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQkJcmV0dXJuIG1vczc4NDBfZ2V0X21vZGVtX2luZm8obW9zNzg0MF9wb3J0LCBhcmdwKTsKLQogCWNhc2UgVElPQ0dTRVJJQUw6CiAJCWRiZygiJXMgKCVkKSBUSU9DR1NFUklBTCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCQlyZXR1cm4gbW9zNzg0MF9nZXRfc2VyaWFsX2luZm8obW9zNzg0MF9wb3J0LCBhcmdwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCmluZGV4IGI2NmI3MWMuLjk5YmQwMGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKQEAgLTgsNyArOCw3IEBACiAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICoge3NpZ2h9Ci0gKiBNb3Jvcm9sYSBzaG91bGQgYmUgdXNpbmcgdGhlIENEQyBBQ00gVVNCIHNwZWMsIGJ1dCBpbnN0ZWFkCisgKiBNb3Rvcm9sYSBzaG91bGQgYmUgdXNpbmcgdGhlIENEQyBBQ00gVVNCIHNwZWMsIGJ1dCBpbnN0ZWFkCiAgKiB0aGV5IHRyeSB0byBqdXN0ICJkbyB0aGVpciBvd24gdGhpbmciLi4uICBUaGlzIGRyaXZlciBzaG91bGQgaGFuZGxlIGEKICAqIGZldyBwaG9uZXMgaW4gd2hpY2ggYSBiYXNpYyAiZHVtYiBzZXJpYWwgY29ubmVjdGlvbiIgaXMgbmVlZGVkIHRvIGJlCiAgKiBhYmxlIHRvIGdldCBhIGNvbm5lY3Rpb24gdGhyb3VnaCB0byB0aGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jCmluZGV4IGY1ZjM3NTFhOC4uNWNlYWE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYwpAQCAtODAsOCArODAsNyBAQAogCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpbnQgbmF2bWFuX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBuYXZtYW5fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCWludCByZXN1bHQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwppbmRleCA1Njg1N2RkLi4wNjIyNjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKQEAgLTY0LDggKzY0LDcgQEAKICNkZWZpbmUgQlRfSUdOSVRJT05QUk9fSUQJMHgyMDAwCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgIG9tbmluZXRfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIG9tbmluZXRfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIG9tbmluZXRfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgb21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CkBAIC0xNjMsOCArMTYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbW5pbmV0X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBvbW5pbmV0X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKndwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKaW5kZXggMzM2YmJhNy4uMTA4NWE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCkBAIC0xNDQsOCArMTQ0LDcgQEAKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgb3B0aWNvbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgb3B0aWNvbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IGM3ODRkZGIuLmY2NmUzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTQ1LDggKzQ1LDcgQEAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBpbnQgIG9wdGlvbl9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgIG9wdGlvbl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCQkJc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgb3B0aW9uX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBvcHRpb25fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBvcHRpb25fZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgb24pOwogCkBAIC0yOTIsNiArMjkxLDcgQEAKIAogI2RlZmluZSBURUxJVF9WRU5ET1JfSUQJCQkJMHgxYmM3CiAjZGVmaW5lIFRFTElUX1BST0RVQ1RfVUM4NjRFCQkJMHgxMDAzCisjZGVmaW5lIFRFTElUX1BST0RVQ1RfVUM4NjRHCQkJMHgxMDA0CiAKIC8qIFpURSBQUk9EVUNUUyAqLwogI2RlZmluZSBaVEVfVkVORE9SX0lECQkJCTB4MTlkMgpAQCAtMzAwLDYgKzMwMCw3IEBACiAjZGVmaW5lIFpURV9QUk9EVUNUX01GNjI2CQkJMHgwMDMxCiAjZGVmaW5lIFpURV9QUk9EVUNUX0NETUFfVEVDSAkJCTB4ZmZmZQogI2RlZmluZSBaVEVfUFJPRFVDVF9BQzg3MTAJCQkweGZmZjEKKyNkZWZpbmUgWlRFX1BST0RVQ1RfQUMyNzI2CQkJMHhmZmY1CiAKICNkZWZpbmUgQkVOUV9WRU5ET1JfSUQJCQkJMHgwNGE1CiAjZGVmaW5lIEJFTlFfUFJPRFVDVF9IMTAJCQkweDQwNjgKQEAgLTUwMyw2ICs1MDQsNyBAQAogCXsgVVNCX0RFVklDRShRVUFMQ09NTV9WRU5ET1JfSUQsIDB4NjYxMyl9LCAvKiBPbmRhIEg2MDAvWlRFIE1GMzMwICovCiAJeyBVU0JfREVWSUNFKE1BWE9OX1ZFTkRPUl9JRCwgMHg2MjgwKSB9LCAvKiBCUDMtVVNCICYgQlAzLUVYVCBIU0RQQSAqLwogCXsgVVNCX0RFVklDRShURUxJVF9WRU5ET1JfSUQsIFRFTElUX1BST0RVQ1RfVUM4NjRFKSB9LAorCXsgVVNCX0RFVklDRShURUxJVF9WRU5ET1JfSUQsIFRFTElUX1BST0RVQ1RfVUM4NjRHKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfTUY2MjIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sIC8qIFpURSBXQ0RNQSBwcm9kdWN0cyAqLwogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgMHgwMDAyLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgMHgwMDAzLCAweGZmLCAweGZmLCAweGZmKSB9LApAQCAtNTcyLDYgKzU3NCw3IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAwNzMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9DRE1BX1RFQ0gsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9BQzg3MTAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9BQzI3MjYsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFKEJFTlFfVkVORE9SX0lELCBCRU5RX1BST0RVQ1RfSDEwKSB9LAogCXsgVVNCX0RFVklDRShETElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1MikgfSwKIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMV80NTEyKSB9LApAQCAtNTkzLDYgKzU5Niw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgICAgPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCiAJLnJlc3VtZSAgICAgPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPQkxLAogI2VuZGlmCiAJLmlkX3RhYmxlICAgPSBvcHRpb25faWRzLAogCS5ub19keW5hbWljX2lkID0gCTEsCkBAIC02NDAsNiArNjQ0LDEyIEBACiAjZGVmaW5lIElOX0JVRkxFTiA0MDk2CiAjZGVmaW5lIE9VVF9CVUZMRU4gNDA5NgogCitzdHJ1Y3Qgb3B0aW9uX2ludGZfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdCBzdXNwX2xvY2s7CisJdW5zaWduZWQgaW50IHN1c3BlbmRlZDoxOworCWludCBpbl9mbGlnaHQ7Cit9OworCiBzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSB7CiAJLyogSW5wdXQgZW5kcG9pbnRzIGFuZCBidWZmZXIgZm9yIHRoaXMgcG9ydCAqLwogCXN0cnVjdCB1cmIgKmluX3VyYnNbTl9JTl9VUkJdOwpAQCAtNjQ4LDYgKzY1OCw4IEBACiAJc3RydWN0IHVyYiAqb3V0X3VyYnNbTl9PVVRfVVJCXTsKIAl1OCAqb3V0X2J1ZmZlcltOX09VVF9VUkJdOwogCXVuc2lnbmVkIGxvbmcgb3V0X2J1c3k7CQkvKiBCaXQgdmVjdG9yIG9mIFVSQnMgaW4gdXNlICovCisJaW50IG9wZW5lZDsKKwlzdHJ1Y3QgdXNiX2FuY2hvciBkZWxheWVkOwogCiAJLyogU2V0dGluZ3MgZm9yIHRoZSBwb3J0ICovCiAJaW50IHJ0c19zdGF0ZTsJLyogSGFuZHNoYWtpbmcgcGlucyAob3V0cHV0cykgKi8KQEAgLTY5NCwxMiArNzA2LDE3IEBACiBzdGF0aWMgaW50IG9wdGlvbl9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlICpkYXRhOwogCS8qIEQtTGluayBEV00gNjUyIHN0aWxsIGV4cG9zZXMgQ0QtUm9tIGVtdWxhdGlvbiBpbnRlcmZhY2UgaW4gbW9kZW0gbW9kZSAqLwogCWlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBETElOS19WRU5ET1JfSUQgJiYKIAkJc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IERMSU5LX1BST0RVQ1RfRFdNXzY1MiAmJgogCQlzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZUNsYXNzID09IDB4OCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlkYXRhID0gc2VyaWFsLT5wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pbml0KCZkYXRhLT5zdXNwX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC03NTYsMTIgKzc3MywxNSBAQAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCXN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlICppbnRmZGF0YTsKIAlpbnQgaTsKIAlpbnQgbGVmdCwgdG9kbzsKIAlzdHJ1Y3QgdXJiICp0aGlzX3VyYiA9IE5VTEw7IC8qIHNwdXJpb3VzICovCiAJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50ZmRhdGEgPSBwb3J0LT5zZXJpYWwtPnByaXZhdGU7CiAKIAlkYmcoIiVzOiB3cml0ZSAoJWQgY2hhcnMpIiwgX19mdW5jX18sIGNvdW50KTsKIApAQCAtNzgzLDE3ICs4MDMsMzMgQEAKIAkJZGJnKCIlczogZW5kcG9pbnQgJWQgYnVmICVkIiwgX19mdW5jX18sCiAJCQl1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSwgaSk7CiAKKwkJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKTsKKwkJaWYgKGVyciA8IDApCisJCQlicmVhazsKKwogCQkvKiBzZW5kIHRoZSBkYXRhICovCiAJCW1lbWNweSh0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIHRvZG8pOwogCQl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHRvZG87CiAKLQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAoZXJyKSB7Ci0JCQlkYmcoInVzYl9zdWJtaXRfdXJiICVwICh3cml0ZSBidWxrKSBmYWlsZWQgIgotCQkJCSIoJWQpIiwgdGhpc191cmIsIGVycik7Ci0JCQljbGVhcl9iaXQoaSwgJnBvcnRkYXRhLT5vdXRfYnVzeSk7Ci0JCQljb250aW51ZTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGludGZkYXRhLT5zdXNwZW5kZWQpIHsKKwkJCXVzYl9hbmNob3JfdXJiKHRoaXNfdXJiLCAmcG9ydGRhdGEtPmRlbGF5ZWQpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50ZmRhdGEtPnN1c3BfbG9jaywgZmxhZ3MpOworCQl9IGVsc2UgeworCQkJaW50ZmRhdGEtPmluX2ZsaWdodCsrOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50ZmRhdGEtPnN1c3BfbG9jaywgZmxhZ3MpOworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKGVycikgeworCQkJCWRiZygidXNiX3N1Ym1pdF91cmIgJXAgKHdyaXRlIGJ1bGspIGZhaWxlZCAiCisJCQkJCSIoJWQpIiwgdGhpc191cmIsIGVycik7CisJCQkJY2xlYXJfYml0KGksICZwb3J0ZGF0YS0+b3V0X2J1c3kpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmZGF0YS0+c3VzcF9sb2NrLCBmbGFncyk7CisJCQkJaW50ZmRhdGEtPmluX2ZsaWdodC0tOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJfQorCiAJCXBvcnRkYXRhLT50eF9zdGFydF90aW1lW2ldID0gamlmZmllczsKIAkJYnVmICs9IHRvZG87CiAJCWxlZnQgLT0gdG9kbzsKQEAgLTgzNyw3ICs4NzMsMTAgQEAKIAkJCWlmIChlcnIpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAiCiAJCQkJCSIoJWQpIiwgX19mdW5jX18sIGVycik7CisJCQllbHNlCisJCQkJdXNiX21hcmtfbGFzdF9idXN5KHBvcnQtPnNlcmlhbC0+ZGV2KTsKIAkJfQorCiAJfQogCXJldHVybjsKIH0KQEAgLTg0NiwxNSArODg1LDIxIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisJc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhOwogCWludCBpOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCXBvcnQgPSAgdXJiLT5jb250ZXh0OworCWludGZkYXRhID0gcG9ydC0+c2VyaWFsLT5wcml2YXRlOwogCiAJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocG9ydCk7Ci0KKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpOwogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXNwaW5fbG9jaygmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJaW50ZmRhdGEtPmluX2ZsaWdodC0tOworCXNwaW5fdW5sb2NrKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwogCWZvciAoaSA9IDA7IGkgPCBOX09VVF9VUkI7ICsraSkgewogCQlpZiAocG9ydGRhdGEtPm91dF91cmJzW2ldID09IHVyYikgewogCQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CkBAIC05NjEsMTQgKzEwMDYsMTYgQEAKIAlyZXR1cm4gZGF0YV9sZW47CiB9CiAKLXN0YXRpYyBpbnQgb3B0aW9uX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBvcHRpb25fb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKwlzdHJ1Y3Qgb3B0aW9uX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlpbnQgaSwgZXJyOwogCXN0cnVjdCB1cmIgKnVyYjsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIApAQCAtOTg3LDYgKzEwMzQsMTIgQEAKIAogCW9wdGlvbl9zZW5kX3NldHVwKHBvcnQpOwogCisJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAxOworCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCXBvcnRkYXRhLT5vcGVuZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDExLDE2ICsxMDY0LDIzIEBACiAJaW50IGk7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisJc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gcG9ydC0+c2VyaWFsLT5wcml2YXRlOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWlmIChzZXJpYWwtPmRldikgewogCQkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCisJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCQlwb3J0ZGF0YS0+b3BlbmVkID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgTl9JTl9VUkI7IGkrKykKIAkJCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tpXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBOX09VVF9VUkI7IGkrKykKIAkJCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+b3V0X3VyYnNbaV0pOworCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOworCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJfQogfQogCkBAIC0xMTI1LDYgKzExODUsNyBAQAogCQkJCQlfX2Z1bmNfXywgaSk7CiAJCQlyZXR1cm4gMTsKIAkJfQorCQlpbml0X3VzYl9hbmNob3IoJnBvcnRkYXRhLT5kZWxheWVkKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7IGorKykgewogCQkJYnVmZmVyID0gKHU4ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwpAQCAtMTIyNywxOCArMTI4OCw1MiBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKKwlzdHJ1Y3Qgb3B0aW9uX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7CisJaW50IGI7CisKIAlkYmcoIiVzIGVudGVyZWQiLCBfX2Z1bmNfXyk7CisKKwlpZiAoc2VyaWFsLT5kZXYtPmF1dG9fcG0pIHsKKwkJc3Bpbl9sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJCWIgPSBpbnRmZGF0YS0+aW5fZmxpZ2h0OworCQlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCisJCWlmIChiKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwlpbnRmZGF0YS0+c3VzcGVuZGVkID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCXN0b3BfcmVhZF93cml0ZV91cmJzKHNlcmlhbCk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcGxheV9kZWxheWVkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKmRhdGE7CisJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZXJyOworCisJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKKwl3aGlsZSAoKHVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJnBvcnRkYXRhLT5kZWxheWVkKSkpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFlcnIpCisJCQlkYXRhLT5pbl9mbGlnaHQrKzsKKwl9Cit9CisKIHN0YXRpYyBpbnQgb3B0aW9uX3Jlc3VtZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewotCWludCBlcnIsIGksIGo7CisJaW50IGksIGo7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVyciA9IDA7CiAKIAlkYmcoIiVzIGVudGVyZWQiLCBfX2Z1bmNfXyk7CiAJLyogZ2V0IHRoZSBpbnRlcnJ1cHQgVVJCcyByZXN1Ym1pdHRlZCB1bmNvbmRpdGlvbmFsbHkgKi8KQEAgLTEyNTMsNyArMTM0OCw3IEBACiAJCWlmIChlcnIgPCAwKSB7CiAJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgaW50ZXJydXB0IFVSQiBvZiBwb3J0JWQiLAogCQkJCSBfX2Z1bmNfXywgZXJyLCBpKTsKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAl9CiAKQEAgLTEyNjEsMjcgKzEzNTYsMzIgQEAKIAkJLyogd2FsayBhbGwgcG9ydHMgKi8KIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAogCQkvKiBza2lwIGNsb3NlZCBwb3J0cyAqLwotCQlpZiAoIXBvcnQtPnBvcnQuY291bnQpIHsKLQkJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwkJaWYgKCFwb3J0ZGF0YS0+b3BlbmVkKSB7CisJCQlzcGluX3VubG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAogCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7IGorKykgewogCQkJdXJiID0gcG9ydGRhdGEtPmluX3VyYnNbal07Ci0JCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9OT0lPKTsKKwkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoZXJyIDwgMCkgewotCQkJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCQkJCWVycigiJXM6IEVycm9yICVkIGZvciBidWxrIFVSQiAlZCIsCiAJCQkJCSBfX2Z1bmNfXywgZXJyLCBpKTsKLQkJCQlyZXR1cm4gZXJyOworCQkJCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJCQkJZ290byBlcnJfb3V0OwogCQkJfQogCQl9Ci0JCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQlwbGF5X2RlbGF5ZWQocG9ydCk7CisJCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CiAJfQotCXJldHVybiAwOworCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCWludGZkYXRhLT5zdXNwZW5kZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CitlcnJfb3V0OgorCXJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggM2NlY2UyNy4uMGY0YTcwY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwpAQCAtMTQxLDExICsxNDEsMTEgQEAKIAkgICYmICgoYSktPmZyYW1lX2ZtdCA9PSAocHJpdiktPnBlbmRpbmdfc2V0dXAuZnJhbWVfZm10KSkKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBvdGk2ODU4X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgb3RpNjg1OF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgb3RpNjg1OF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIG90aTY4NThfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKK3N0YXRpYyB2b2lkIG90aTY4NThfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBvdGk2ODU4X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgb3RpNjg1OF9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJLndyaXRlID0JCW90aTY4NThfd3JpdGUsCiAJLmlvY3RsID0JCW90aTY4NThfaW9jdGwsCiAJLnNldF90ZXJtaW9zID0JCW90aTY4NThfc2V0X3Rlcm1pb3MsCisJLmluaXRfdGVybWlvcyA9IAlvdGk2ODU4X2luaXRfdGVybWlvcywKIAkudGlvY21nZXQgPQkJb3RpNjg1OF90aW9jbWdldCwKIAkudGlvY21zZXQgPQkJb3RpNjg1OF90aW9jbXNldCwKIAkucmVhZF9idWxrX2NhbGxiYWNrID0Jb3RpNjg1OF9yZWFkX2J1bGtfY2FsbGJhY2ssCkBAIC0yMDYsNyArMjA3LDYgQEAKIAlzdHJ1Y3QgewogCQl1OCByZWFkX3VyYl9pbl91c2U7CiAJCXU4IHdyaXRlX3VyYl9pbl91c2U7Ci0JCXU4IHRlcm1pb3NfaW5pdGlhbGl6ZWQ7CiAJfSBmbGFnczsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGRlbGF5ZWRfd3JpdGVfd29yazsKIApAQCAtNDQ3LDYgKzQ0NywxNCBAQAogCXJldHVybiBjaGFyczsKIH0KIAorc3RhdGljIHZvaWQgb3RpNjg1OF9pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CisJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjM4NDAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gMzg0MDA7CisJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDM4NDAwOworfQorCiBzdGF0aWMgdm9pZCBvdGk2ODU4X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CkBAIC00NjQsMTYgKzQ3Miw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmICghcHJpdi0+ZmxhZ3MudGVybWlvc19pbml0aWFsaXplZCkgewotCQkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEIzODQwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7Ci0JCXR0eS0+dGVybWlvcy0+Y19pc3BlZWQgPSAzODQwMDsKLQkJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDM4NDAwOwotCQlwcml2LT5mbGFncy50ZXJtaW9zX2luaXRpYWxpemVkID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCiAJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtNTY2LDggKzU2NCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IG90aTY4NThfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IG90aTY4NThfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBvdGk2ODU4X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IGt0ZXJtaW9zIHRtcF90ZXJtaW9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDNlODY4MTUuLjExMjhlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTk2LDYgKzk2LDcgQEAKIAl7IFVTQl9ERVZJQ0UoSFBfVkVORE9SX0lELCBIUF9MRDIyMF9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShDUkVTU0lfVkVORE9SX0lELCBDUkVTU0lfRURZX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX1FOM1VTQl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShTQU5XQV9WRU5ET1JfSUQsIFNBTldBX1BST0RVQ1RfSUQpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtNTI3LDYgKzUyOCwxMiBAQAogCWludCBiYXVkOwogCWludCBpOwogCXU4IGNvbnRyb2w7CisJY29uc3QgaW50IGJhdWRfc3VwW10gPSB7IDc1LCAxNTAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCAzNjAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICA0ODAwLCA3MjAwLCA5NjAwLCAxNDQwMCwgMTkyMDAsIDI4ODAwLCAzODQwMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsIDYxNDQwMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgOTIxNjAwLCAxMjI4ODAwLCAyNDU3NjAwLCAzMDAwMDAwLCA2MDAwMDAwIH07CisJaW50IGJhdWRfZmxvb3IsIGJhdWRfY2VpbDsKKwlpbnQgazsKIAogCWRiZygiJXMgLSAgcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCkBAIC01NzIsOSArNTc5LDM5IEBACiAJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSAlZCIsIF9fZnVuY19fLCBidWZbNl0pOwogCX0KIAorCS8qIEZvciByZWZlcmVuY2UgYnVmWzBdOmJ1ZlszXSBiYXVkIHJhdGUgdmFsdWUgKi8KKwkvKiBOT1RFOiBPbmx5IHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiBiYXVkX3N1cCBhcmUgc3VwcG9ydGVkICEKKwkgKiAgICAgICA9PiBpZiB1bnN1cHBvcnRlZCB2YWx1ZXMgYXJlIHNldCwgdGhlIFBMMjMwMyBzZWVtcyB0byB1c2UKKwkgKiAgICAgICAgICA5NjAwIGJhdWQgKGF0IGxlYXN0IG15IFBMMjMwM1ggYWx3YXlzIGRvZXMpCisJICovCiAJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7Ci0JZGJnKCIlcyAtIGJhdWQgPSAlZCIsIF9fZnVuY19fLCBiYXVkKTsKKwlkYmcoIiVzIC0gYmF1ZCByZXF1ZXN0ZWQgPSAlZCIsIF9fZnVuY19fLCBiYXVkKTsKIAlpZiAoYmF1ZCkgeworCQkvKiBTZXQgYmF1ZHJhdGUgdG8gbmVhcmVzdCBzdXBwb3J0ZWQgdmFsdWUgKi8KKwkJZm9yIChrPTA7IGs8QVJSQVlfU0laRShiYXVkX3N1cCk7IGsrKykgeworCQkJaWYgKGJhdWRfc3VwW2tdIC8gYmF1ZCkgeworCQkJCWJhdWRfY2VpbCA9IGJhdWRfc3VwW2tdOworCQkJCWlmIChrPT0wKSB7CisJCQkJCWJhdWQgPSBiYXVkX2NlaWw7CisJCQkJfSBlbHNlIHsKKwkJCQkJYmF1ZF9mbG9vciA9IGJhdWRfc3VwW2stMV07CisJCQkJCWlmICgoYmF1ZF9jZWlsICUgYmF1ZCkKKwkJCQkJICAgID4gKGJhdWQgJSBiYXVkX2Zsb29yKSkKKwkJCQkJCWJhdWQgPSBiYXVkX2Zsb29yOworCQkJCQllbHNlCisJCQkJCQliYXVkID0gYmF1ZF9jZWlsOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoYmF1ZCA+IDEyMjg4MDApIHsKKwkJCS8qIHR5cGVfMCwgdHlwZV8xIG9ubHkgc3VwcG9ydCB1cCB0byAxMjI4ODAwIGJhdWQgKi8KKwkJCWlmIChwcml2LT50eXBlICE9IEhYKQorCQkJCWJhdWQgPSAxMjI4ODAwOworCQkJZWxzZSBpZiAoYmF1ZCA+IDYwMDAwMDApCisJCQkJYmF1ZCA9IDYwMDAwMDA7CisJCX0KKwkJZGJnKCIlcyAtIGJhdWQgc2V0ID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CiAJCWJ1ZlswXSA9IGJhdWQgJiAweGZmOwogCQlidWZbMV0gPSAoYmF1ZCA+PiA4KSAmIDB4ZmY7CiAJCWJ1ZlsyXSA9IChiYXVkID4+IDE2KSAmIDB4ZmY7CkBAIC01ODUsOCArNjIyLDE2IEBACiAJLyogRm9yIHJlZmVyZW5jZSBidWZbNF09MSBpcyAxLjUgc3RvcCBiaXRzICovCiAJLyogRm9yIHJlZmVyZW5jZSBidWZbNF09MiBpcyAyIHN0b3AgYml0cyAqLwogCWlmIChjZmxhZyAmIENTVE9QQikgewotCQlidWZbNF0gPSAyOwotCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fZnVuY19fKTsKKwkJLyogTk9URTogQ29tcGx5IHdpdGggInJlYWwiIFVBUlRzIC8gUlMyMzI6CisJCSAqICAgICAgIHVzZSAxLjUgaW5zdGVhZCBvZiAyIHN0b3AgYml0cyB3aXRoIDUgZGF0YSBiaXRzCisJCSAqLworCQlpZiAoKGNmbGFnICYgQ1NJWkUpID09IENTNSkgeworCQkJYnVmWzRdID0gMTsKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxLjUiLCBfX2Z1bmNfXyk7CisJCX0gZWxzZSB7CisJCQlidWZbNF0gPSAyOworCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX2Z1bmNfXyk7CisJCX0KIAl9IGVsc2UgewogCQlidWZbNF0gPSAwOwogCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fZnVuY19fKTsKQEAgLTU5OSwxMSArNjQ0LDIxIEBACiAJCS8qIEZvciByZWZlcmVuY2UgYnVmWzVdPTMgaXMgbWFyayBwYXJpdHkgKi8KIAkJLyogRm9yIHJlZmVyZW5jZSBidWZbNV09NCBpcyBzcGFjZSBwYXJpdHkgKi8KIAkJaWYgKGNmbGFnICYgUEFST0REKSB7Ci0JCQlidWZbNV0gPSAxOwotCQkJZGJnKCIlcyAtIHBhcml0eSA9IG9kZCIsIF9fZnVuY19fKTsKKwkJCWlmIChjZmxhZyAmIENNU1BBUikgeworCQkJCWJ1Zls1XSA9IDM7CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IG1hcmsiLCBfX2Z1bmNfXyk7CisJCQl9IGVsc2UgeworCQkJCWJ1Zls1XSA9IDE7CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IG9kZCIsIF9fZnVuY19fKTsKKwkJCX0KIAkJfSBlbHNlIHsKLQkJCWJ1Zls1XSA9IDI7Ci0JCQlkYmcoIiVzIC0gcGFyaXR5ID0gZXZlbiIsIF9fZnVuY19fKTsKKwkJCWlmIChjZmxhZyAmIENNU1BBUikgeworCQkJCWJ1Zls1XSA9IDQ7CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IHNwYWNlIiwgX19mdW5jX18pOworCQkJfSBlbHNlIHsKKwkJCQlidWZbNV0gPSAyOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBldmVuIiwgX19mdW5jX18pOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJYnVmWzVdID0gMDsKQEAgLTY0Nyw3ICs3MDIsNyBAQAogCQlwbDIzMDNfdmVuZG9yX3dyaXRlKDB4MCwgMHgwLCBzZXJpYWwpOwogCX0KIAotCS8qIEZJWE1FOiBOZWVkIHRvIHJlYWQgYmFjayByZXN1bHRpbmcgYmF1ZCByYXRlICovCisJLyogU2F2ZSByZXN1bHRpbmcgYmF1ZCByYXRlICovCiAJaWYgKGJhdWQpCiAJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZCwgYmF1ZCk7CiAKQEAgLTY5MSw4ICs3NDYsNyBAQAogCiB9CiAKLXN0YXRpYyBpbnQgcGwyMzAzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBwbDIzMDNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBrdGVybWlvcyB0bXBfdGVybWlvczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtNzE0LDggKzc2OCw2IEBACiAJaWYgKHR0eSkKIAkJcGwyMzAzX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgJnRtcF90ZXJtaW9zKTsKIAotCS8qIEZJWE1FOiBuZWVkIHRvIGFzc2VydCBSVFMgYW5kIERUUiBpZiBDUlRTQ1RTIG9mZiAqLwotCiAJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgcmVhZCB1cmIiLCBfX2Z1bmNfXyk7CiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAppbmRleCBlZTk1MDVlLi5kNjQwZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCkBAIC0xMzAsMyArMTMwLDcgQEAKIC8qIFNvbnksIFVTQiBkYXRhIGNhYmxlIGZvciBDTUQtSnh4IG1vYmlsZSBwaG9uZXMgKi8KICNkZWZpbmUgU09OWV9WRU5ET1JfSUQJCTB4MDU0YwogI2RlZmluZSBTT05ZX1FOM1VTQl9QUk9EVUNUX0lECTB4MDQzNworCisvKiBTYW53YSBLQi1VU0IyIG11bHRpbWV0ZXIgY2FibGUgKElEOiAxMWFkOjAwMDEpICovCisjZGVmaW5lIFNBTldBX1ZFTkRPUl9JRAkJMHgxMWFkCisjZGVmaW5lIFNBTldBX1BST0RVQ1RfSUQJMHgwMDAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggZjQ4ZDA1ZS4uNjhmYTBlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtNTEsNiArNTEsMTIgQEAKIAljb25zdCB1OCAgKmlmYWNlaW5mbzsJLyogcG9pbnRlciB0byB0aGUgYXJyYXkgaG9sZGluZyB0aGUgbnVtYmVycyAqLwogfTsKIAorc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUgeworCXNwaW5sb2NrX3Qgc3VzcF9sb2NrOworCXVuc2lnbmVkIGludCBzdXNwZW5kZWQ6MTsKKwlpbnQgaW5fZmxpZ2h0OworfTsKKwogc3RhdGljIGludCBzaWVycmFfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBfX3UxNiBzd2lTdGF0ZSkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtMTQ0LDYgKzE1MCw3IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHNpZXJyYV9pbnRmX3ByaXZhdGUgKmRhdGE7CiAJdTggaWZudW07CiAKIAl1ZGV2ID0gc2VyaWFsLT5kZXY7CkBAIC0xNzEsNiArMTc4LDExIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWRhdGEgPSBzZXJpYWwtPnByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPnN1c3BfbG9jayk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjEsMTMgKzI3MywxOCBAQAogCS5uYW1lICAgICAgID0gInNpZXJyYSIsCiAJLnByb2JlICAgICAgPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kICAgID0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gdXNiX3NlcmlhbF9yZXN1bWUsCiAJLmlkX3RhYmxlICAgPSBpZF90YWJsZSwKIAkubm9fZHluYW1pY19pZCA9IAkxLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9CTEsCiB9OwogCiBzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSB7CiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIHRoZSBzdHJ1Y3R1cmUgKi8KIAlpbnQgb3V0c3RhbmRpbmdfdXJiczsJLyogbnVtYmVyIG9mIG91dCB1cmJzIGluIGZsaWdodCAqLworCXN0cnVjdCB1c2JfYW5jaG9yIGFjdGl2ZTsKKwlzdHJ1Y3QgdXNiX2FuY2hvciBkZWxheWVkOwogCiAJLyogSW5wdXQgZW5kcG9pbnRzIGFuZCBidWZmZXJzIGZvciB0aGlzIHBvcnQgKi8KIAlzdHJ1Y3QgdXJiICppbl91cmJzW05fSU5fVVJCXTsKQEAgLTI3OSw2ICsyOTYsOCBAQAogCWludCBkc3Jfc3RhdGU7CiAJaW50IGRjZF9zdGF0ZTsKIAlpbnQgcmlfc3RhdGU7CisKKwl1bnNpZ25lZCBpbnQgb3BlbmVkOjE7CiB9OwogCiBzdGF0aWMgaW50IHNpZXJyYV9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCkBAIC0zOTAsMjEgKzQwOSwyNSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlICppbnRmZGF0YTsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJaW50ZmRhdGEgPSBwb3J0LT5zZXJpYWwtPnByaXZhdGU7CiAKIAkvKiBmcmVlIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIsIGFzIHVzYl9mcmVlX3VyYigpIGRvZXMgbm90IGRvIHRoaXMgKi8KIAlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0KKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpOwogCWlmIChzdGF0dXMpCiAJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyAiCiAJCSAgICAicmVjZWl2ZWQ6ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmcG9ydGRhdGEtPmxvY2spOwogCS0tcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmcG9ydGRhdGEtPmxvY2spOworCXNwaW5fbG9jaygmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJLS1pbnRmZGF0YS0+aW5fZmxpZ2h0OworCXNwaW5fdW5sb2NrKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwogfQpAQCAtNDE0LDYgKzQzNyw3IEBACiAJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKQEAgLTQyNiw5ICs0NTAsOSBAQAogCQlyZXR1cm4gMDsKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludGZkYXRhID0gc2VyaWFsLT5wcml2YXRlOwogCiAJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHdyaXRlICglemQgYnl0ZXMpXG4iLCBfX2Z1bmNfXywgd3JpdGVzaXplKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gb3V0c3RhbmRpbmdfdXJiczogJWRcbiIsIF9fZnVuY19fLAogCQlwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyk7CkBAIC00NDIsNiArNDY2LDE0IEBACiAJCXBvcnRkYXRhLT5vdXRzdGFuZGluZ191cmJzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCisJcmV0dmFsID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKKwkJcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMtLTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKKwkJZ290byBlcnJvcl9zaW1wbGU7CisJfQorCiAJYnVmZmVyID0ga21hbGxvYyh3cml0ZXNpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZmVyKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwpAQCAtNDY4LDE0ICs1MDAsMjkgQEAKIAkvKiBIYW5kbGUgdGhlIG5lZWQgdG8gc2VuZCBhIHplcm8gbGVuZ3RoIHBhY2tldCAqLwogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKKworCWlmIChpbnRmZGF0YS0+c3VzcGVuZGVkKSB7CisJCXVzYl9hbmNob3JfdXJiKHVyYiwgJnBvcnRkYXRhLT5kZWxheWVkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50ZmRhdGEtPnN1c3BfbG9jaywgZmxhZ3MpOworCQlnb3RvIHNraXBfcG93ZXI7CisJfSBlbHNlIHsKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmcG9ydGRhdGEtPmFjdGl2ZSk7CisJfQogCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGZkYXRhLT5zdXNwX2xvY2ssIGZsYWdzKTsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgIgogCQkJIndpdGggc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWludGZkYXRhLT5pbl9mbGlnaHQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50ZmRhdGEtPnN1c3BfbG9jaywgZmxhZ3MpOwogCX0KIAorc2tpcF9wb3dlcjoKIAkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCiAJICogcmVhbGx5IGZyZWUgaXQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0ICovCiAJdXNiX2ZyZWVfdXJiKHVyYik7CkBAIC00OTEsNiArNTM4LDggQEAKIAlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIDIuIG91dHN0YW5kaW5nX3VyYnM6ICVkXG4iLCBfX2Z1bmNfXywKIAkJcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKHNlcmlhbC0+aW50ZXJmYWNlKTsKK2Vycm9yX3NpbXBsZToKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC01MzAsNiArNTc5LDcgQEAKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTiAmJiBzdGF0dXMgIT0gLUVQRVJNKSB7CisJCXVzYl9tYXJrX2xhc3RfYnVzeShwb3J0LT5zZXJpYWwtPmRldik7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIpCiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJyZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuIgpAQCAtNTkxLDYgKzY0MSw3IEBACiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nIElSUSBkYXRhICovCiAJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgc3RhdHVzICE9IC1FU0hVVERPV04gJiYgc3RhdHVzICE9IC1FTk9FTlQpIHsKKwkJdXNiX21hcmtfbGFzdF9idXN5KHNlcmlhbC0+ZGV2KTsKIAkJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVycikKQEAgLTcxMSw2ICs3NjIsOCBAQAogCWludCBpOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCXN0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlICppbnRmZGF0YSA9IHBvcnQtPnNlcmlhbC0+cHJpdmF0ZTsKKwogCiAJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTcyMyw2ICs3NzYsMTAgQEAKIAkJaWYgKCFzZXJpYWwtPmRpc2Nvbm5lY3RlZCkKIAkJCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwogCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCQlwb3J0ZGF0YS0+b3BlbmVkID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwogCiAJCS8qIFN0b3AgcmVhZGluZyB1cmJzICovCiAJCXNpZXJyYV9zdG9wX3J4X3VyYnMocG9ydCk7CkBAIC03MzEsMTQgKzc4OCwxNiBAQAogCQkJc2llcnJhX3JlbGVhc2VfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2ldKTsKIAkJCXBvcnRkYXRhLT5pbl91cmJzW2ldID0gTlVMTDsKIAkJfQorCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOworCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJfQogfQogCi1zdGF0aWMgaW50IHNpZXJyYV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgc2llcnJhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7CiAJaW50IGk7CiAJaW50IGVycjsKIAlpbnQgZW5kcG9pbnQ7CkBAIC03NzIsNiArODMxLDEyIEBACiAJfQogCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwogCisJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAxOworCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCXBvcnRkYXRhLT5vcGVuZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC04MTksNiArODg0LDggQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCXNwaW5fbG9ja19pbml0KCZwb3J0ZGF0YS0+bG9jayk7CisJCWluaXRfdXNiX2FuY2hvcigmcG9ydGRhdGEtPmFjdGl2ZSk7CisJCWluaXRfdXNiX2FuY2hvcigmcG9ydGRhdGEtPmRlbGF5ZWQpOwogCQkvKiBTZXQgdGhlIHBvcnQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgKi8KIAkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHBvcnRkYXRhKTsKIAl9CkBAIC04NDUsNiArOTEyLDgzIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzdG9wX3JlYWRfd3JpdGVfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpLCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCisJLyogU3RvcCByZWFkaW5nL3dyaXRpbmcgdXJicyAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7IGorKykKKwkJCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tqXSk7CisJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnBvcnRkYXRhLT5hY3RpdmUpOworCX0KK30KKworc3RhdGljIGludCBzaWVycmFfc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CisJaW50IGI7CisKKwlpZiAoc2VyaWFsLT5kZXYtPmF1dG9fcG0pIHsKKwkJaW50ZmRhdGEgPSBzZXJpYWwtPnByaXZhdGU7CisJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCQliID0gaW50ZmRhdGEtPmluX2ZsaWdodDsKKworCQlpZiAoYikgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0gZWxzZSB7CisJCQlpbnRmZGF0YS0+c3VzcGVuZGVkID0gMTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CisJCX0KKwl9CisJc3RvcF9yZWFkX3dyaXRlX3VyYnMoc2VyaWFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpZXJyYV9yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBzaWVycmFfaW50Zl9wcml2YXRlICppbnRmZGF0YSA9IHNlcmlhbC0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlYyA9IDA7CisJaW50IGksIGVycjsKKworCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJCXdoaWxlICgodXJiID0gdXNiX2dldF9mcm9tX2FuY2hvcigmcG9ydGRhdGEtPmRlbGF5ZWQpKSkgeworCQkJdXNiX2FuY2hvcl91cmIodXJiLCAmcG9ydGRhdGEtPmFjdGl2ZSk7CisJCQlpbnRmZGF0YS0+aW5fZmxpZ2h0Kys7CisJCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlpbnRmZGF0YS0+aW5fZmxpZ2h0LS07CisJCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQkJCXVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoJnBvcnRkYXRhLT5kZWxheWVkKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChwb3J0ZGF0YS0+b3BlbmVkKSB7CisJCQllcnIgPSBzaWVycmFfc3VibWl0X3J4X3VyYnMocG9ydCwgR0ZQX0FUT01JQyk7CisJCQlpZiAoZXJyKQorCQkJCWVjKys7CisJCX0KKwl9CisJaW50ZmRhdGEtPnN1c3BlbmRlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKKworCXJldHVybiBlYyA/IC1FSU8gOiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHNpZXJyYV9kZXZpY2UgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm93bmVyID0JVEhJU19NT0RVTEUsCkBAIC04NjUsNiArMTAwOSw4IEBACiAJLnRpb2Ntc2V0ICAgICAgICAgID0gc2llcnJhX3Rpb2Ntc2V0LAogCS5hdHRhY2ggICAgICAgICAgICA9IHNpZXJyYV9zdGFydHVwLAogCS5yZWxlYXNlICAgICAgICAgICA9IHNpZXJyYV9yZWxlYXNlLAorCS5zdXNwZW5kCSAgID0gc2llcnJhX3N1c3BlbmQsCisJLnJlc3VtZQkJICAgPSBzaWVycmFfcmVzdW1lLAogCS5yZWFkX2ludF9jYWxsYmFjayA9IHNpZXJyYV9pbnN0YXRfY2FsbGJhY2ssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwppbmRleCAzYzI0OWQ4Li4xZTU4MjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKQEAgLTI5OSw3ICsyOTksNiBAQAogCXdhaXRfcXVldWVfaGVhZF90CWRlbHRhX21zcl93YWl0OwogCXU4IAkJCWxpbmVfY29udHJvbDsKIAl1OCAJCQlsaW5lX3N0YXR1czsKLQl1OCAJCQl0ZXJtaW9zX2luaXRpYWxpemVkOwogfTsKIAogLyogZGVzYyA6IHdoZW4gZGV2aWNlIHBsdWcgaW4sdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSBjYWxsZWQuCkBAIC00OTgsNiArNDk3LDE1IEBACiAJCWRldl9kYmcoJnBvcnQtPmRldiwgInVzYl91bmxpbmtfdXJiKHJlYWRfdXJiKSA9ICVkXG4iLCByZXN1bHQpOwogfQogCitzdGF0aWMgdm9pZCBzcGNwOHg1X2luaXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIGZvciB0aGUgMXN0IHRpbWUgY2FsbCB0aGlzIGZ1bmN0aW9uICovCisJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEIxMTUyMDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCXR0eS0+dGVybWlvcy0+Y19pc3BlZWQgPSAxMTUyMDA7CisJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDExNTIwMDsKK30KKwogLyogc2V0IHRoZSBzZXJpYWwgcGFyYW0gZm9yIHRyYW5zZmVyLiB3ZSBzaG91bGQgY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdG8KICAqIHRyYW5zZmVyLiBpZiB3ZSBzZXQgZmxvdyBjb250cm9sIHdlIHNob3VsZCBkbyB0aGlzIHRvby4gKi8KIHN0YXRpYyB2b2lkIHNwY3A4eDVfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTUxNCwxNiArNTIyLDYgQEAKIAlpbnQgaTsKIAl1OCBjb250cm9sOwogCi0JLyogZm9yIHRoZSAxc3QgdGltZSBjYWxsIHRoaXMgZnVuY3Rpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgewotCQkqKHR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEIxMTUyMDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gMTE1MjAwOwotCQl0dHktPnRlcm1pb3MtPmNfb3NwZWVkID0gMTE1MjAwOwotCQlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KIAlpZiAoIXR0eV90ZXJtaW9zX2h3X2NoYW5nZSh0dHktPnRlcm1pb3MsIG9sZF90ZXJtaW9zKSkKQEAgLTU0Niw3ICs1NDQsNyBAQAogCX0KIAogCS8qIFNldCBCYXVkIFJhdGUgKi8KLQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTs7CisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAJc3dpdGNoIChiYXVkKSB7CiAJY2FzZSAzMDA6CWJ1ZlswXSA9IDB4MDA7CWJyZWFrOwogCWNhc2UgNjAwOglidWZbMF0gPSAweDAxOwlicmVhazsKQEAgLTYyMyw4ICs2MjEsNyBAQAogCiAvKiBvcGVuIHRoZSBzZXJpYWwgcG9ydC4gZG8gc29tZSB1c2Igc3lzdGVtIGNhbGwuIHNldCB0ZXJtaW9zIGFuZCBnZXQgdGhlIGxpbmUKICAqIHN0YXR1cyBvZiB0aGUgZGV2aWNlLiB0aGVuIHN1Ym1pdCB0aGUgcmVhZCB1cmIgKi8KLXN0YXRpYyBpbnQgc3BjcDh4NV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgc3BjcDh4NV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGt0ZXJtaW9zIHRtcF90ZXJtaW9zOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CkBAIC02NTgsOCArNjU1LDYgQEAKIAlwcml2LT5saW5lX3N0YXR1cyA9IHN0YXR1cyAmIDB4ZjAgOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qIEZJWE1FOiBuZWVkIHRvIGFzc2VydCBSVFMgYW5kIERUUiBpZiBDUlRTQ1RTIG9mZiAqLwotCiAJZGJnKCIlcyAtIHN1Ym1pdHRpbmcgcmVhZCB1cmIiLCBfX2Z1bmNfXyk7CiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKQEAgLTEwMTEsNiArMTAwNiw3IEBACiAJLmNhcnJpZXJfcmFpc2VkCQk9IHNwY3A4eDVfY2Fycmllcl9yYWlzZWQsCiAJLndyaXRlIAkJCT0gc3BjcDh4NV93cml0ZSwKIAkuc2V0X3Rlcm1pb3MgCQk9IHNwY3A4eDVfc2V0X3Rlcm1pb3MsCisJLmluaXRfdGVybWlvcwkJPSBzcGNwOHg1X2luaXRfdGVybWlvcywKIAkuaW9jdGwgCQkJPSBzcGNwOHg1X2lvY3RsLAogCS50aW9jbWdldCAJCT0gc3BjcDh4NV90aW9jbWdldCwKIAkudGlvY21zZXQgCQk9IHNwY3A4eDVfdGlvY21zZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKaW5kZXggNjE1N2ZhYy4uY2I3ZTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpAQCAtMTI0LDggKzEyNCw3IEBACiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHN5bWJvbF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgc3ltYm9sX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCmluZGV4IDNiYzYwOWYuLjFlOWRjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpAQCAtOTgsOCArOTgsNyBAQAogCiBzdGF0aWMgaW50IHRpX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCB0aV9yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIGludCB0aV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCXN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIHRpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCB0aV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpOwpAQCAtNDkyLDggKzQ5MSw3IEBACiB9CiAKIAotc3RhdGljIGludCB0aV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggOTkxODhjOS4uZmY3NWEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSAicGwyMzAzLmgiCiAKIC8qCkBAIC00Myw4ICs0NCw2IEBACiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiwgZ3JlZ0Brcm9haC5jb20sIGh0dHA6Ly93d3cua3JvYWguY29tL2xpbnV4LyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBTZXJpYWwgRHJpdmVyIGNvcmUiCiAKLXN0YXRpYyB2b2lkIHBvcnRfZnJlZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLQogLyogRHJpdmVyIHN0cnVjdHVyZSB3ZSByZWdpc3RlciB3aXRoIHRoZSBVU0IgY29yZSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zZXJpYWxfZHJpdmVyID0gewogCS5uYW1lID0JCSJ1c2JzZXJpYWwiLApAQCAtNjgsNiArNjcsMTEgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgodGFibGVfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKHVzYl9zZXJpYWxfZHJpdmVyX2xpc3QpOwogCisvKgorICogTG9vayB1cCB0aGUgc2VyaWFsIHN0cnVjdHVyZS4gIElmIGl0IGlzIGZvdW5kIGFuZCBpdCBoYXNuJ3QgYmVlbgorICogZGlzY29ubmVjdGVkLCByZXR1cm4gd2l0aCBpdHMgZGlzY19tdXRleCBoZWxkIGFuZCBpdHMgcmVmY291bnQKKyAqIGluY3JlbWVudGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICovCiBzdHJ1Y3QgdXNiX3NlcmlhbCAqdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgodW5zaWduZWQgaW5kZXgpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKQEAgLTc1LDggKzc5LDE1IEBACiAJbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CiAJc2VyaWFsID0gc2VyaWFsX3RhYmxlW2luZGV4XTsKIAotCWlmIChzZXJpYWwpCi0JCWtyZWZfZ2V0KCZzZXJpYWwtPmtyZWYpOworCWlmIChzZXJpYWwpIHsKKwkJbXV0ZXhfbG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKKwkJaWYgKHNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CisJCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJCQlzZXJpYWwgPSBOVUxMOworCQl9IGVsc2UgeworCQkJa3JlZl9nZXQoJnNlcmlhbC0+a3JlZik7CisJCX0KKwl9CiAJbXV0ZXhfdW5sb2NrKCZ0YWJsZV9sb2NrKTsKIAlyZXR1cm4gc2VyaWFsOwogfQpAQCAtMTI1LDggKzEzNiwxMCBAQAogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAorCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQogCQlzZXJpYWxfdGFibGVbc2VyaWFsLT5taW5vciArIGldID0gTlVMTDsKKwltdXRleF91bmxvY2soJnRhYmxlX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X3NlcmlhbChzdHJ1Y3Qga3JlZiAqa3JlZikKQEAgLTE0NSwyNDQgKzE1OCwyMjQgQEAKIAogCXNlcmlhbC0+dHlwZS0+cmVsZWFzZShzZXJpYWwpOwogCi0JZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkvKiBOb3cgdGhhdCBub3RoaW5nIGlzIHVzaW5nIHRoZSBwb3J0cywgdGhleSBjYW4gYmUgZnJlZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydF9wb2ludGVyczsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmIChwb3J0KQorCQlpZiAocG9ydCkgeworCQkJcG9ydC0+c2VyaWFsID0gTlVMTDsKIAkJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7Ci0JfQotCi0JLyogSWYgdGhpcyBpcyBhICJmYWtlIiBwb3J0LCB3ZSBoYXZlIHRvIGNsZWFuIGl0IHVwIGhlcmUsIGFzIGl0IHdpbGwKLQkgKiBub3QgZ2V0IGNsZWFuZWQgdXAgaW4gcG9ydF9yZWxlYXNlKCkgYXMgaXQgd2FzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aAotCSAqIHRoZSBkcml2ZXIgY29yZSAqLwotCWlmIChzZXJpYWwtPm51bV9wb3J0cyA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnMpIHsKLQkJZm9yIChpID0gc2VyaWFsLT5udW1fcG9ydHM7Ci0JCQkJCWkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpIHsKLQkJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCQlpZiAocG9ydCkKLQkJCQlwb3J0X2ZyZWUocG9ydCk7CiAJCX0KIAl9CiAKIAl1c2JfcHV0X2RldihzZXJpYWwtPmRldik7Ci0KLQkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KIAlrZnJlZShzZXJpYWwpOwogfQogCiB2b2lkIHVzYl9zZXJpYWxfcHV0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7Ci0JbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CiAJa3JlZl9wdXQoJnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOwotCW11dGV4X3VubG9jaygmdGFibGVfbG9jayk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHNlcmlhbF9vcGVuIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKKworLyoqCisgKiBzZXJpYWxfaW5zdGFsbCAtIGluc3RhbGwgdHR5CisgKiBAZHJpdmVyOiB0aGUgZHJpdmVyIChVU0IgaW4gb3VyIGNhc2UpCisgKiBAdHR5OiB0aGUgdHR5IGJlaW5nIGNyZWF0ZWQKKyAqCisgKiBDcmVhdGUgdGhlIHRlcm1pb3Mgb2JqZWN0cyBmb3IgdGhpcyB0dHkuICBXZSB1c2UgdGhlIGRlZmF1bHQKKyAqIFVTQiBzZXJpYWwgc2V0dGluZ3MgYnV0IHBlcm1pdCB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gYnkKKyAqIHNlcmlhbC0+dHlwZS0+aW5pdF90ZXJtaW9zLgorICoKKyAqIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIGEgbmV3IHR0eSBnZXRzIHVzZWQuICBIZW5jZSB0aGlzIGlzIHdoZXJlIHdlCisgKiBhY3F1aXJlIHJlZmVyZW5jZXMgdG8gdGhlIHVzYl9zZXJpYWwgc3RydWN0dXJlIGFuZCB0aGUgZHJpdmVyIG1vZHVsZSwKKyAqIHdoZXJlIHdlIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgcG9ydCwgYW5kIHdoZXJlIHdlIGRvIGFuIGF1dG9yZXN1bWUuCisgKiBBbGwgdGhlc2UgYWN0aW9ucyBhcmUgcmV2ZXJzZWQgaW4gc2VyaWFsX3JlbGVhc2UoKS4KKyAqLworc3RhdGljIGludCBzZXJpYWxfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCWludCBpZHggPSB0dHktPmluZGV4OwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKLQl1bnNpZ25lZCBpbnQgcG9ydE51bWJlcjsKLQlpbnQgcmV0dmFsID0gMDsKLQlpbnQgZmlyc3QgPSAwOworCWludCByZXR2YWwgPSAtRU5PREVWOwogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAotCS8qIGdldCB0aGUgc2VyaWFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dHkgcG9pbnRlciAqLwotCXNlcmlhbCA9IHVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KHR0eS0+aW5kZXgpOwotCWlmICghc2VyaWFsKSB7Ci0JCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJc2VyaWFsID0gdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgoaWR4KTsKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAotCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7Ci0JcG9ydE51bWJlciA9IHR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOwotCXBvcnQgPSBzZXJpYWwtPnBvcnRbcG9ydE51bWJlcl07Ci0JaWYgKCFwb3J0IHx8IHNlcmlhbC0+ZGlzY29ubmVjdGVkKQotCQlyZXR2YWwgPSAtRU5PREVWOwotCWVsc2UKLQkJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKLQkvKgotCSAqIE5vdGU6IE91ciBsb2NraW5nIG9yZGVyIHJlcXVpcmVtZW50IGRvZXMgbm90IGFsbG93IHBvcnQtPm11dGV4Ci0JICogdG8gYmUgYWNxdWlyZWQgd2hpbGUgc2VyaWFsLT5kaXNjX211dGV4IGlzIGhlbGQuCi0JICovCi0JbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOworCXBvcnQgPSBzZXJpYWwtPnBvcnRbaWR4IC0gc2VyaWFsLT5taW5vcl07CisJaWYgKCFwb3J0KQorCQlnb3RvIGVycm9yX25vX3BvcnQ7CisJaWYgKCF0cnlfbW9kdWxlX2dldChzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcikpCisJCWdvdG8gZXJyb3JfbW9kdWxlX2dldDsKKworCS8qIHBlcmZvcm0gdGhlIHN0YW5kYXJkIHNldHVwICovCisJcmV0dmFsID0gdHR5X2luaXRfdGVybWlvcyh0dHkpOwogCWlmIChyZXR2YWwpCi0JCWdvdG8gYmFpbG91dF9zZXJpYWxfcHV0OworCQlnb3RvIGVycm9yX2luaXRfdGVybWlvczsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnBvcnQtPm11dGV4KSkgewotCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7Ci0JCWdvdG8gYmFpbG91dF9wb3J0X3B1dDsKLQl9CisJcmV0dmFsID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yX2dldF9pbnRlcmZhY2U7CiAKLQkrK3BvcnQtPnBvcnQuY291bnQ7CisJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwogCi0JLyogc2V0IHVwIG91ciBwb3J0IHN0cnVjdHVyZSBtYWtpbmcgdGhlIHR0eSBkcml2ZXIKLQkgKiByZW1lbWJlciBvdXIgcG9ydCBvYmplY3QsIGFuZCB1cyBpdCAqLworCS8qIGFsbG93IHRoZSBkcml2ZXIgdG8gdXBkYXRlIHRoZSBzZXR0aW5ncyAqLworCWlmIChzZXJpYWwtPnR5cGUtPmluaXRfdGVybWlvcykKKwkJc2VyaWFsLT50eXBlLT5pbml0X3Rlcm1pb3ModHR5KTsKKwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0OworCisJLyogRmluYWwgaW5zdGFsbCAod2UgdXNlIHRoZSBkZWZhdWx0IG1ldGhvZCkgKi8KKwl0dHlfZHJpdmVyX2tyZWZfZ2V0KGRyaXZlcik7CisJdHR5LT5jb3VudCsrOworCWRyaXZlci0+dHR5c1tpZHhdID0gdHR5OworCXJldHVybiByZXR2YWw7CisKKyBlcnJvcl9nZXRfaW50ZXJmYWNlOgorIGVycm9yX2luaXRfdGVybWlvczoKKwltb2R1bGVfcHV0KHNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKTsKKyBlcnJvcl9tb2R1bGVfZ2V0OgorIGVycm9yX25vX3BvcnQ6CisJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKKwltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBzZXJpYWxfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXR2YWw7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+cG9ydC5sb2NrKTsKKwlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCisJCSsrcG9ydC0+cG9ydC5jb3VudDsKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnQubG9jayk7CiAJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgdHR5KTsKIAotCS8qIElmIHRoZSBjb25zb2xlIGlzIGF0dGFjaGVkLCB0aGUgZGV2aWNlIGlzIGFscmVhZHkgb3BlbiAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IDEgJiYgIXBvcnQtPmNvbnNvbGUpIHsKLQkJZmlyc3QgPSAxOwotCQkvKiBsb2NrIHRoaXMgbW9kdWxlIGJlZm9yZSB3ZSBjYWxsIGl0Ci0JCSAqIHRoaXMgbWF5IGZhaWwsIHdoaWNoIG1lYW5zIHdlIG11c3QgYmFpbCBvdXQsCi0JCSAqIHNhZmUgYmVjYXVzZSB3ZSBhcmUgY2FsbGVkIHdpdGggQktMIGhlbGQgKi8KLQkJaWYgKCF0cnlfbW9kdWxlX2dldChzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcikpIHsKLQkJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGJhaWxvdXRfbXV0ZXhfdW5sb2NrOwotCQl9Ci0KKwkvKiBEbyB0aGUgZGV2aWNlLXNwZWNpZmljIG9wZW4gb25seSBpZiB0aGUgaGFyZHdhcmUgaXNuJ3QKKwkgKiBhbHJlYWR5IGluaXRpYWxpemVkLgorCSAqLworCWlmICghdGVzdF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+cG9ydC5mbGFncykpIHsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAkJbXV0ZXhfbG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAkJaWYgKHNlcmlhbC0+ZGlzY29ubmVjdGVkKQogCQkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZWxzZQotCQkJcmV0dmFsID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gYmFpbG91dF9tb2R1bGVfcHV0OwotCi0JCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcwotCQkgKiBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcG9ydCBpcyBvcGVuZWQgKi8KLQkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT5vcGVuKHR0eSwgcG9ydCwgZmlscCk7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIGJhaWxvdXRfaW50ZXJmYWNlX3B1dDsKKwkJCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+b3Blbih0dHksIHBvcnQpOwogCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKIAkJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisKIAkvKiBOb3cgZG8gdGhlIGNvcnJlY3QgdHR5IGxheWVyIHNlbWFudGljcyAqLwogCXJldHZhbCA9IHR0eV9wb3J0X2Jsb2NrX3RpbF9yZWFkeSgmcG9ydC0+cG9ydCwgdHR5LCBmaWxwKTsKLQlpZiAocmV0dmFsID09IDApIHsKLQkJaWYgKCFmaXJzdCkKLQkJCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7Ci0JCXJldHVybiAwOwotCX0KLQltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7Ci0JaWYgKGZpcnN0ID09IDApCi0JCWdvdG8gYmFpbG91dF9tdXRleF91bmxvY2s7Ci0JLyogVW5kbyB0aGUgaW5pdGlhbCBwb3J0IGFjdGlvbnMgKi8KLQltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotYmFpbG91dF9pbnRlcmZhY2VfcHV0OgotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7Ci1iYWlsb3V0X21vZHVsZV9wdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCW1vZHVsZV9wdXQoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpOwotYmFpbG91dF9tdXRleF91bmxvY2s6Ci0JcG9ydC0+cG9ydC5jb3VudCA9IDA7Ci0JdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7Ci0JbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7Ci1iYWlsb3V0X3BvcnRfcHV0OgotCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7Ci1iYWlsb3V0X3NlcmlhbF9wdXQ6Ci0JdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiAvKioKLSAqCXNlcmlhbF9kb19kb3duCQktCXNodXQgZG93biBoYXJkd2FyZQotICoJQHBvcnQ6IHBvcnQgdG8gc2h1dCBkb3duCisgKiBzZXJpYWxfZG93biAtIHNodXQgZG93biBoYXJkd2FyZQorICogQHBvcnQ6IHBvcnQgdG8gc2h1dCBkb3duCiAgKgotICoJU2h1dCBkb3duIGEgVVNCIHBvcnQgdW5sZXNzIGl0IGlzIHRoZSBjb25zb2xlLiBXZSBuZXZlciBzaHV0IGRvd24gdGhlCi0gKgljb25zb2xlIGhhcmR3YXJlIGFzIGl0IHdpbGwgYWx3YXlzIGJlIGluIHVzZS4KLSAqCi0gKglEb24ndCBmcmVlIGFueSByZXNvdXJjZXMgYXQgdGhpcyBwb2ludAorICogU2h1dCBkb3duIGEgVVNCIHNlcmlhbCBwb3J0IHVubGVzcyBpdCBpcyB0aGUgY29uc29sZS4gIFdlIG5ldmVyCisgKiBzaHV0IGRvd24gdGhlIGNvbnNvbGUgaGFyZHdhcmUgYXMgaXQgd2lsbCBhbHdheXMgYmUgaW4gdXNlLgogICovCi1zdGF0aWMgdm9pZCBzZXJpYWxfZG9fZG93bihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgc2VyaWFsX2Rvd24oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRydiA9IHBvcnQtPnNlcmlhbC0+dHlwZTsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCi0JLyogVGhlIGNvbnNvbGUgaXMgbWFnaWNhbCwgZG8gbm90IGhhbmcgdXAgdGhlIGNvbnNvbGUgaGFyZHdhcmUKLQkgICBvciB0aGVyZSB3aWxsIGJlIHRlYXJzICovCisJLyoKKwkgKiBUaGUgY29uc29sZSBpcyBtYWdpY2FsLiAgRG8gbm90IGhhbmcgdXAgdGhlIGNvbnNvbGUgaGFyZHdhcmUKKwkgKiBvciB0aGVyZSB3aWxsIGJlIHRlYXJzLgorCSAqLwogCWlmIChwb3J0LT5jb25zb2xlKQogCQlyZXR1cm47CiAKKwkvKiBEb24ndCBjYWxsIHRoZSBjbG9zZSBtZXRob2QgaWYgdGhlIGhhcmR3YXJlIGhhc24ndCBiZWVuCisJICogaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+cG9ydC5mbGFncykpCisJCXJldHVybjsKKwogCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKLQlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Ci0Jb3duZXIgPSBzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcjsKLQogCWlmIChkcnYtPmNsb3NlKQogCQlkcnYtPmNsb3NlKHBvcnQpOwotCiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiB9CiAKLS8qKgotICoJc2VyaWFsX2RvX2ZyZWUJCS0JZnJlZSByZXNvdXJjZXMgcG9zdCBjbG9zZS9oYW5ndXAKLSAqCUBwb3J0OiBwb3J0IHRvIGZyZWUgdXAKLSAqCi0gKglEbyB0aGUgcmVzb3VyY2UgZnJlZWluZyBhbmQgcmVmY291bnQgZHJvcHBpbmcgZm9yIHRoZSBwb3J0LiBXZSBtdXN0Ci0gKgliZSBjYXJlZnVsIGFib3V0IG9yZGVyaW5nIGFuZCB3ZSBtdXN0IGF2b2lkIGZyZWVpbmcgdXAgdGhlIGNvbnNvbGUuCi0gKi8KLQotc3RhdGljIHZvaWQgc2VyaWFsX2RvX2ZyZWUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHNlcmlhbF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCi0JLyogVGhlIGNvbnNvbGUgaXMgbWFnaWNhbCwgZG8gbm90IGhhbmcgdXAgdGhlIGNvbnNvbGUgaGFyZHdhcmUKLQkgICBvciB0aGVyZSB3aWxsIGJlIHRlYXJzICovCi0JaWYgKHBvcnQtPmNvbnNvbGUpCi0JCXJldHVybjsKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCW93bmVyID0gc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXI7Ci0JcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKLQkvKiBNdXN0bid0IGRlcmVmZXJlbmNlIHBvcnQgYW55IG1vcmUgKi8KLQltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCi0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7Ci0JbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7Ci0JLyogTXVzdG4ndCBkZXJlZmVyZW5jZSBzZXJpYWwgYW55IG1vcmUgKi8KLQltb2R1bGVfcHV0KG93bmVyKTsKKwlzZXJpYWxfZG93bihwb3J0KTsKKwl0dHlfcG9ydF9oYW5ndXAoJnBvcnQtPnBvcnQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKLQlpZiAoIXBvcnQpCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKQorCQlyZXR1cm47CisJaWYgKHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KCZwb3J0LT5wb3J0LCB0dHksIGZpbHApID09IDApCisJCXJldHVybjsKKwlzZXJpYWxfZG93bihwb3J0KTsKKwl0dHlfcG9ydF9jbG9zZV9lbmQoJnBvcnQtPnBvcnQsIHR0eSk7CisJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgTlVMTCk7Cit9CisKKy8qKgorICogc2VyaWFsX3JlbGVhc2UgLSBmcmVlIHJlc291cmNlcyBwb3N0IGNsb3NlL2hhbmd1cAorICogQHBvcnQ6IHBvcnQgdG8gZnJlZSB1cAorICoKKyAqIERvIHRoZSByZXNvdXJjZSBmcmVlaW5nIGFuZCByZWZjb3VudCBkcm9wcGluZyBmb3IgdGhlIHBvcnQuCisgKiBBdm9pZCBmcmVlaW5nIHRoZSBjb25zb2xlLgorICoKKyAqIENhbGxlZCB3aGVuIHRoZSBsYXN0IHR0eSBrcmVmIGlzIGRyb3BwZWQuCisgKi8KK3N0YXRpYyB2b2lkIHNlcmlhbF9yZWxlYXNlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKworCS8qIFRoZSBjb25zb2xlIGlzIG1hZ2ljYWwuICBEbyBub3QgaGFuZyB1cCB0aGUgY29uc29sZSBoYXJkd2FyZQorCSAqIG9yIHRoZXJlIHdpbGwgYmUgdGVhcnMuCisJICovCisJaWYgKHBvcnQtPmNvbnNvbGUpCiAJCXJldHVybjsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQkvKiBGSVhNRToKLQkgICBUaGlzIGxlYXZlcyBhIHZlcnkgbmFycm93IHJhY2UuIFJlYWxseSB3ZSBzaG91bGQgZG8gdGhlCi0JICAgc2VyaWFsX2RvX2ZyZWUoKSBvbiB0dHktPnNodXRkb3duKCksIGJ1dCB0dHktPnNodXRkb3duIGNhbgotCSAgIGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0IGFuZCBzZXJpYWxfZG9fZnJlZSBjYW4gc2xlZXAuCisJLyogU3RhbmRhcmQgc2h1dGRvd24gcHJvY2Vzc2luZyAqLworCXR0eV9zaHV0ZG93bih0dHkpOwogCi0JICAgVGhlIHJpZ2h0IGZpeCBpcyBwcm9iYWJseSB0byBtYWtlIHRoZSB0dHkgZnJlZSAod2hpY2ggaXMgcmFyZSkKLQkgICBhbmQgdGh1cyB0dHktPnNodXRkb3duKCkgb2NjdXIgdmlhIGEgd29yayBxdWV1ZSBhbmQgc2ltcGxpZnkgYWxsCi0JICAgdGhlIGRyaXZlcnMgdGhhdCB1c2UgaXQuCi0JKi8KLQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQkvKiBzZXJpYWxfaGFuZ3VwIGFscmVhZHkgY2FsbGVkIHNlcmlhbF9kb3duIGF0IHRoaXMgcG9pbnQuCi0JCSAgIEFub3RoZXIgdXNlciBtYXkgaGF2ZSBhbHJlYWR5IHJlb3BlbmVkIHRoZSBwb3J0IGJ1dAotCQkgICBzZXJpYWxfZG9fZnJlZSBpcyByZWZjb3VudGVkICovCi0JCXNlcmlhbF9kb19mcmVlKHBvcnQpOwotCQlyZXR1cm47Ci0JfQorCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCi0JaWYgKHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KCZwb3J0LT5wb3J0LCB0dHksIGZpbHApID09IDApCi0JCXJldHVybjsKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJb3duZXIgPSBzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcjsKIAotCXNlcmlhbF9kb19kb3duKHBvcnQpOwkJCi0JdHR5X3BvcnRfY2xvc2VfZW5kKCZwb3J0LT5wb3J0LCB0dHkpOwotCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOwotCXNlcmlhbF9kb19mcmVlKHBvcnQpOwotfQorCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CisJaWYgKCFzZXJpYWwtPmRpc2Nvbm5lY3RlZCkKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAKLXN0YXRpYyB2b2lkIHNlcmlhbF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzZXJpYWxfZG9fZG93bihwb3J0KTsKLQl0dHlfcG9ydF9oYW5ndXAoJnBvcnQtPnBvcnQpOwotCS8qIFdlIG11c3Qgbm90IGZyZWUgcG9ydCB5ZXQgLSB0aGUgVVNCIHNlcmlhbCBsYXllciBkZXBlbmRzIG9uIGl0J3MKLQkgICBjb250aW51ZWQgZXhpc3RlbmNlICovCisJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKKwltb2R1bGVfcHV0KG93bmVyKTsKIH0KIAogc3RhdGljIGludCBzZXJpYWxfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLApAQCAtNTI3LDYgKzUyMCw3IEBACiAKIAkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7CisJCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01OTYsMTQgKzU5MCw2IEBACiAJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBvcnRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOwotCi0JZGJnICgiJXMgLSAlcyIsIF9fZnVuY19fLCBkZXZfbmFtZShkZXYpKTsKLQlwb3J0X2ZyZWUocG9ydCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGtpbGxfdHJhZmZpYyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CkBAIC02MjMsOCArNjA5LDEyIEBACiAJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKIH0KIAotc3RhdGljIHZvaWQgcG9ydF9mcmVlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBwb3J0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKworCWRiZyAoIiVzIC0gJXMiLCBfX2Z1bmNfXywgZGV2X25hbWUoZGV2KSk7CisKIAkvKgogCSAqIFN0b3AgYWxsIHRoZSB0cmFmZmljIGJlZm9yZSBjYW5jZWxsaW5nIHRoZSB3b3JrLCBzbyB0aGF0CiAJICogbm9ib2R5IHdpbGwgcmVzdGFydCBpdCBieSBjYWxsaW5nIHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50LgpAQCAtNjM2LDYgKzYyNiw4IEBACiAJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7CiAJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwogCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYik7CisJaWYgKCFJU19FUlIocG9ydC0+d3JpdGVfZmlmbykgJiYgcG9ydC0+d3JpdGVfZmlmbykKKwkJa2ZpZm9fZnJlZShwb3J0LT53cml0ZV9maWZvKTsKIAlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CiAJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKIAlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKQEAgLTkzNSw2ICs5MjcsMTEgQEAKIAkJbXV0ZXhfaW5pdCgmcG9ydC0+bXV0ZXgpOwogCQlJTklUX1dPUksoJnBvcnQtPndvcmssIHVzYl9zZXJpYWxfcG9ydF93b3JrKTsKIAkJc2VyaWFsLT5wb3J0W2ldID0gcG9ydDsKKwkJcG9ydC0+ZGV2LnBhcmVudCA9ICZpbnRlcmZhY2UtPmRldjsKKwkJcG9ydC0+ZGV2LmRyaXZlciA9IE5VTEw7CisJCXBvcnQtPmRldi5idXMgPSAmdXNiX3NlcmlhbF9idXNfdHlwZTsKKwkJcG9ydC0+ZGV2LnJlbGVhc2UgPSAmcG9ydF9yZWxlYXNlOworCQlkZXZpY2VfaW5pdGlhbGl6ZSgmcG9ydC0+ZGV2KTsKIAl9CiAKIAkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCkBAIC05NzAsNiArOTY3LDEwIEBACiAJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJfQorCQlwb3J0LT53cml0ZV9maWZvID0ga2ZpZm9fYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMLAorCQkJJnBvcnQtPmxvY2spOworCQlpZiAoSVNfRVJSKHBvcnQtPndyaXRlX2ZpZm8pKQorCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQlwb3J0LT5idWxrX291dF9zaXplID0gYnVmZmVyX3NpemU7CiAJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwpAQCAtMTA3NywxNSArMTA3OCwxMCBAQAogCS8qIHJlZ2lzdGVyIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBwb3J0cyB3aXRoIHRoZSBkcml2ZXIgY29yZSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQlwb3J0LT5kZXYucGFyZW50ID0gJmludGVyZmFjZS0+ZGV2OwotCQlwb3J0LT5kZXYuZHJpdmVyID0gTlVMTDsKLQkJcG9ydC0+ZGV2LmJ1cyA9ICZ1c2Jfc2VyaWFsX2J1c190eXBlOwotCQlwb3J0LT5kZXYucmVsZWFzZSA9ICZwb3J0X3JlbGVhc2U7Ci0KIAkJZGV2X3NldF9uYW1lKCZwb3J0LT5kZXYsICJ0dHlVU0IlZCIsIHBvcnQtPm51bWJlcik7CiAJCWRiZyAoIiVzIC0gcmVnaXN0ZXJpbmcgJXMiLCBfX2Z1bmNfXywgZGV2X25hbWUoJnBvcnQtPmRldikpOwogCQlwb3J0LT5kZXZfc3RhdGUgPSBQT1JUX1JFR0lTVEVSSU5HOwotCQlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJnBvcnQtPmRldik7CisJCXJldHZhbCA9IGRldmljZV9hZGQoJnBvcnQtPmRldik7CiAJCWlmIChyZXR2YWwpIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIkVycm9yIHJlZ2lzdGVyaW5nIHBvcnQgZGV2aWNlLCAiCiAJCQkJImNvbnRpbnVpbmdcbiIpOwpAQCAtMTEwMywzOSArMTA5OSw3IEBACiAJcmV0dXJuIDA7CiAKIHByb2JlX2Vycm9yOgotCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19pbjsgKytpKSB7Ci0JCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmICghcG9ydCkKLQkJCWNvbnRpbnVlOwotCQl1c2JfZnJlZV91cmIocG9ydC0+cmVhZF91cmIpOwotCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgewotCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQlpZiAoIXBvcnQpCi0JCQljb250aW51ZTsKLQkJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7Ci0JCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X2luOyArK2kpIHsKLQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKLQkJaWYgKCFwb3J0KQotCQkJY29udGludWU7Ci0JCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKLQkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlcik7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X291dDsgKytpKSB7Ci0JCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmICghcG9ydCkKLQkJCWNvbnRpbnVlOwotCQl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOwotCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcik7Ci0JfQotCi0JLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCi0JZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnM7ICsraSkKLQkJa2ZyZWUoc2VyaWFsLT5wb3J0W2ldKTsKLQlrZnJlZShzZXJpYWwpOworCXVzYl9zZXJpYWxfcHV0KHNlcmlhbCk7CiAJcmV0dXJuIC1FSU87CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX3Byb2JlKTsKQEAgLTExNjEsMTAgKzExMjUsNyBAQAogCQlpZiAocG9ydCkgewogCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQkJaWYgKHR0eSkgewotCQkJCS8qIFRoZSBoYW5ndXAgd2lsbCBvY2N1ciBhc3luY2hyb25vdXNseSBidXQKLQkJCQkgICB0aGUgb2JqZWN0IHJlZmNvdW50cyB3aWxsIHNvcnQgb3V0IGFsbCB0aGUKLQkJCQkgICBjbGVhbnVwICovCi0JCQkJdHR5X2hhbmd1cCh0dHkpOworCQkJCXR0eV92aGFuZ3VwKHR0eSk7CiAJCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCQl9CiAJCQlraWxsX3RyYWZmaWMocG9ydCk7CkBAIC0xMTg5LDggKzExNTAsNyBAQAogCX0KIAlzZXJpYWwtPnR5cGUtPmRpc2Nvbm5lY3Qoc2VyaWFsKTsKIAotCS8qIGxldCB0aGUgbGFzdCBob2xkZXIgb2YgdGhpcyBvYmplY3QKLQkgKiBjYXVzZSBpdCB0byBiZSBjbGVhbmVkIHVwICovCisJLyogbGV0IHRoZSBsYXN0IGhvbGRlciBvZiB0aGlzIG9iamVjdCBjYXVzZSBpdCB0byBiZSBjbGVhbmVkIHVwICovCiAJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKIAlkZXZfaW5mbyhkZXYsICJkZXZpY2UgZGlzY29ubmVjdGVkXG4iKTsKIH0KQEAgLTEyMDQsMTUgKzExNjQsMTkgQEAKIAogCXNlcmlhbC0+c3VzcGVuZGluZyA9IDE7CiAKKwlpZiAoc2VyaWFsLT50eXBlLT5zdXNwZW5kKSB7CisJCXIgPSBzZXJpYWwtPnR5cGUtPnN1c3BlbmQoc2VyaWFsLCBtZXNzYWdlKTsKKwkJaWYgKHIgPCAwKQorCQkJZ290byBlcnJfb3V0OworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCWlmIChwb3J0KQogCQkJa2lsbF90cmFmZmljKHBvcnQpOwogCX0KIAotCWlmIChzZXJpYWwtPnR5cGUtPnN1c3BlbmQpCi0JCXIgPSBzZXJpYWwtPnR5cGUtPnN1c3BlbmQoc2VyaWFsLCBtZXNzYWdlKTsKLQorZXJyX291dDoKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX3NlcmlhbF9zdXNwZW5kKTsKQEAgLTEyNDYsNiArMTIxMCw4IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9CXNlcmlhbF9jaGFyc19pbl9idWZmZXIsCiAJLnRpb2NtZ2V0ID0JCXNlcmlhbF90aW9jbWdldCwKIAkudGlvY21zZXQgPQkJc2VyaWFsX3Rpb2Ntc2V0LAorCS5zaHV0ZG93biA9IAkJc2VyaWFsX3JlbGVhc2UsCisJLmluc3RhbGwgPSAJCXNlcmlhbF9pbnN0YWxsLAogCS5wcm9jX2ZvcHMgPQkJJnNlcmlhbF9wcm9jX2ZvcHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKaW5kZXggNjE0ODAwOS4uN2I1YmZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYwpAQCAtNDMsMTEgKzQzLDEwIEBACiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKLXN0YXRpYyBpbnQgdXNiX2RlYnVnX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgdXNiX2RlYnVnX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlwb3J0LT5idWxrX291dF9zaXplID0gVVNCX0RFQlVHX01BWF9QQUNLRVRfU0laRTsKLQlyZXR1cm4gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0LCBmaWxwKTsKKwlyZXR1cm4gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0KTsKIH0KIAogLyogVGhpcyBIVyByZWFsbHkgZG9lcyBub3Qgc3VwcG9ydCBhIHNlcmlhbCBicmVhaywgc28gb25lIHdpbGwgYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggZjVkMGY2NC4uMWFhNWQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTM2LDggKzM2LDcgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBIYW5kU3ByaW5nIFZpc29yIC8gUGFsbSBPUyBkcml2ZXIiCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgaGFuZHNwcmluZyB2aXNvciAqLwotc3RhdGljIGludCAgdmlzb3Jfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICB2aXNvcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgdmlzb3JfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICB2aXNvcl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC0yNzMsOCArMjcyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhhbmRzcHJpbmcgVmlzb3Igc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgdmlzb3Jfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCB2aXNvcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwppbmRleCA4ZDEyNmRkLi42MjQyNGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIHN0YXRpYyBpbnQgIHdoaXRlaGVhdF9hdHRhY2goc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfcmVsZWFzZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgIHdoaXRlaGVhdF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CisJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIHdoaXRlaGVhdF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgIHdoaXRlaGVhdF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKQEAgLTI1OSw3ICsyNTksNyBAQAogCQkJCQkJX191OCAqZGF0YSwgX191OCBkYXRhc2l6ZSk7CiBzdGF0aWMgaW50IGZpcm1fb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgZmlybV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBmaXJtX3NldF9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CiBzdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKTsKIHN0YXRpYyBpbnQgZmlybV9zZXRfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CkBAIC02NTksOCArNjU5LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgd2hpdGVoZWF0X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCB3aGl0ZWhlYXRfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCWludAkJcmV0dmFsID0gMDsKIApAQCAtMTIxMSw3ICsxMjEwLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGZpcm1fc2V0dXBfcG9ydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wb3J0X3NldHRpbmdzIHBvcnRfc2V0dGluZ3M7CkBAIC0xMjg2LDcgKzEyODUsNyBAQAogCXBvcnRfc2V0dGluZ3MubGxvb3AgPSAwOwogCiAJLyogbm93IHNlbmQgdGhlIG1lc3NhZ2UgdG8gdGhlIGRldmljZSAqLwotCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUVVBfUE9SVCwKKwlmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfU0VUVVBfUE9SVCwKIAkJCShfX3U4ICopJnBvcnRfc2V0dGluZ3MsIHNpemVvZihwb3J0X3NldHRpbmdzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKaW5kZXggMmI2ZTU2NS4uZGVkODM2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAlpbnQgY291bnQgPSAwLCByYzsKIAotCWlmICghdXMgfHwgIWluZm8pCisJaWYgKCFpbmZvKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJbWVtY3B5KGNvbW1hbmQsIHNjb21tYW5kLCA4KTsKQEAgLTM5OSw3ICszOTksNyBAQAogCXVuc2lnbmVkIGNoYXIgKnJlcGx5OwogCWludCByYzsKIAotCWlmICghdXMgfHwgIWluZm8pCisJaWYgKCFpbmZvKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJaWYgKGluZm8tPmx1biA9PSAtMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMKaW5kZXggZWMxN2M5Ni4uMTA1ZDkwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCkBAIC0xMDIsNSArMTAyLDUgQEAKIAkJCQkgICAgICBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkJICAgICAgMHgwMSwgMHgwLCBOVUxMLCAweDAsIDEwMDApOwogCVVTX0RFQlVHUCgiSHVhd2VpIG1vZGUgc2V0IHJlc3VsdCBpcyAlZFxuIiwgcmVzdWx0KTsKLQlyZXR1cm4gKHJlc3VsdCA/IDAgOiAtRU5PREVWKTsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwppbmRleCAxYzY5NDIwLi42MTY4NTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpyZXBseTsKIAlpbnQgCSByYzsKIAotCWlmICghdXMgfHwgIWluZm8pCisJaWYgKCFpbmZvKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJY29tbWFuZFswXSA9IDB4RTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKaW5kZXggMzgwMjMzYi4uODBlNjVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCQl1c2Jfa2lsbF91cmIob25ldG91Y2gtPmlycSk7CiAJCQlicmVhazsKIAkJY2FzZSBVU19SRVNVTUU6Ci0JCQlpZiAodXNiX3N1Ym1pdF91cmIob25ldG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkgIT0gMCkKKwkJCWlmICh1c2Jfc3VibWl0X3VyYihvbmV0b3VjaC0+aXJxLCBHRlBfTk9JTykgIT0gMCkKIAkJCQlkZXZfZXJyKCZvbmV0b3VjaC0+aXJxLT5kZXYtPmRldiwKIAkJCQkJInVzYl9zdWJtaXRfdXJiIGZhaWxlZFxuIik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IDc0NzdkNDEuLjA3OWFlMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtNjYsMTMgKzY2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFKSwKIAotLyogbW9kaWZpZWQgYnkgVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PiAqLwotVU5VU1VBTF9ERVYoICAweDAzZWUsIDB4NjkwMSwgMHgwMDAwLCAweDAyMDAsCi0JCSJNaXRzdW1pIiwKLQkJIlVTQiBGREQiLAotCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotCiAvKiBSZXBvcnRlZCBieSBSb2RvbGZvIFF1ZXNhZGEgPHJxdWVzYWRhQHJvcXoubmV0PiAqLwogVU5VU1VBTF9ERVYoICAweDAzZWUsIDB4NjkwNiwgMHgwMDAzLCAweDAwMDMsCiAJCSJWSUEgVGVjaG5vbG9naWVzIEluYy4iLApAQCAtMjMzLDEzICsyMjYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTUFYX1NFQ1RPUlNfNjQgKSwKIAotLyogUmVwb3J0ZWQgYnkgT2xhZiBIZXJpbmcgPG9saEBzdXNlLmRlPiBmcm9tIG5vdmVsbCBidWcgIzEwNTg3OCAqLwotVU5VU1VBTF9ERVYoICAweDA0MjQsIDB4MGZkYywgMHgwMjEwLCAweDAyMTAsCi0JCSJTTVNDIiwKLQkJIkZEQyBHT0xELTIuMzAiLAotCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotCiAjaWZkZWYgTk9fU0REUjA5CiBVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKIAkJIk1pY3JvdGVjaCIsCkBAIC02NjQsMTkgKzY1MCwxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0JCQorLyogV2Uga2VlcCB0aGlzIGVudHJ5IHRvIGZvcmNlIHRoZSB0cmFuc3BvcnQ7IGZpcm13YXJlIDMuMDAgYW5kIGxhdGVyIGlzIG9rLiAqLwogVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAwMCwgMHgwMDAwLCAweDAyOTksCiAJCSJZLUUgRGF0YSIsCiAJCSJGbGFzaGJ1c3Rlci1VIiwKIAkJVVNfU0NfREVWSUNFLCAgVVNfUFJfQ0IsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4pLAogCi1VTlVTVUFMX0RFViggIDB4MDU3YiwgMHgwMDAwLCAweDAzMDAsIDB4OTk5OSwKLQkJIlktRSBEYXRhIiwKLQkJIkZsYXNoYnVzdGVyLVUiLAotCQlVU19TQ19ERVZJQ0UsICBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4pLAotCiAvKiBSZXBvcnRlZCBieSBKb2hhbm4gQ2FyZG9uIDxqb2hhbm4uY2FyZG9uQGZyZWUuZnI+CiAgKiBUaGlzIGVudHJ5IGlzIG5lZWRlZCBvbmx5IGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzCiAgKiBiSW50ZXJmYWNlQ2xhc3MgPSAweGZmICh2ZW5kb3Itc3BlY2lmaWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCmluZGV4IDYwYmE2MzEuLmI2MmYyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIFVTQl9TS0VMX1BST0RVQ1RfSUQJMHhmZmYwCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBza2VsX3RhYmxlIFtdID0geworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNrZWxfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1NLRUxfVkVORE9SX0lELCBVU0JfU0tFTF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC01MiwxNSArNTIsMjEgQEAKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwkJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlCWxpbWl0X3NlbTsJCS8qIGxpbWl0aW5nIHRoZSBudW1iZXIgb2Ygd3JpdGVzIGluIHByb2dyZXNzICovCiAJc3RydWN0IHVzYl9hbmNob3IJc3VibWl0dGVkOwkJLyogaW4gY2FzZSB3ZSBuZWVkIHRvIHJldHJhY3Qgb3VyIHN1Ym1pc3Npb25zICovCisJc3RydWN0IHVyYgkJKmJ1bGtfaW5fdXJiOwkJLyogdGhlIHVyYiB0byByZWFkIGRhdGEgd2l0aCAqLwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICpidWxrX2luX2J1ZmZlcjsJLyogdGhlIGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgKi8KIAlzaXplX3QJCQlidWxrX2luX3NpemU7CQkvKiB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKwlzaXplX3QJCQlidWxrX2luX2ZpbGxlZDsJCS8qIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyICovCisJc2l6ZV90CQkJYnVsa19pbl9jb3BpZWQ7CQkvKiBhbHJlYWR5IGNvcGllZCB0byB1c2VyIHNwYWNlICovCiAJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLwogCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHI7CS8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIG91dCBlbmRwb2ludCAqLwogCWludAkJCWVycm9yczsJCQkvKiB0aGUgbGFzdCByZXF1ZXN0IHRhbmtlZCAqLwogCWludAkJCW9wZW5fY291bnQ7CQkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIG9wZW5lcnMgKi8KKwlib29sCQkJb25nb2luZ19yZWFkOwkJLyogYSByZWFkIGlzIGdvaW5nIG9uICovCisJYm9vbAkJCXByb2Nlc3NlZF91cmI7CQkvKiBpbmRpY2F0ZXMgd2UgaGF2ZW4ndCBwcm9jZXNzZWQgdGhlIHVyYiAqLwogCXNwaW5sb2NrX3QJCWVycl9sb2NrOwkJLyogbG9jayBmb3IgZXJyb3JzICovCiAJc3RydWN0IGtyZWYJCWtyZWY7CiAJc3RydWN0IG11dGV4CQlpb19tdXRleDsJCS8qIHN5bmNocm9uaXplIEkvTyB3aXRoIGRpc2Nvbm5lY3QgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbglidWxrX2luX2NvbXBsZXRpb247CS8qIHRvIHdhaXQgZm9yIGFuIG9uZ29pbmcgcmVhZCAqLwogfTsKICNkZWZpbmUgdG9fc2tlbF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2Jfc2tlbCwga3JlZikKIApAQCAtNzEsNiArNzcsNyBAQAogewogCXN0cnVjdCB1c2Jfc2tlbCAqZGV2ID0gdG9fc2tlbF9kZXYoa3JlZik7CiAKKwl1c2JfZnJlZV91cmIoZGV2LT5idWxrX2luX3VyYik7CiAJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKIAlrZnJlZShkZXYtPmJ1bGtfaW5fYnVmZmVyKTsKIAlrZnJlZShkZXYpOwpAQCAtODcsNyArOTQsNyBAQAogCiAJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZza2VsX2RyaXZlciwgc3VibWlub3IpOwogCWlmICghaW50ZXJmYWNlKSB7Ci0JCWVyciAoIiVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsCisJCWVycigiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKIAkJICAgICBfX2Z1bmNfXywgc3VibWlub3IpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CkBAIC0xNzQsMzggKzE4MSwxOTAgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgc3NpemVfdCBza2VsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgdm9pZCBza2VsX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9za2VsICpkZXY7Ci0JaW50IHJldHZhbDsKLQlpbnQgYnl0ZXNfcmVhZDsKKworCWRldiA9IHVyYi0+Y29udGV4dDsKKworCXNwaW5fbG9jaygmZGV2LT5lcnJfbG9jayk7CisJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJaWYgKCEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKQorCQkJZXJyKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCSAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCisJCWRldi0+ZXJyb3JzID0gdXJiLT5zdGF0dXM7CisJfSBlbHNlIHsKKwkJZGV2LT5idWxrX2luX2ZpbGxlZCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl9CisJZGV2LT5vbmdvaW5nX3JlYWQgPSAwOworCXNwaW5fdW5sb2NrKCZkZXYtPmVycl9sb2NrKTsKKworCWNvbXBsZXRlKCZkZXYtPmJ1bGtfaW5fY29tcGxldGlvbik7Cit9CisKK3N0YXRpYyBpbnQgc2tlbF9kb19yZWFkX2lvKHN0cnVjdCB1c2Jfc2tlbCAqZGV2LCBzaXplX3QgY291bnQpCit7CisJaW50IHJ2OworCisJLyogcHJlcGFyZSBhIHJlYWQgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihkZXYtPmJ1bGtfaW5fdXJiLAorCQkJZGV2LT51ZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQlkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCWRldi0+YnVsa19pbl9idWZmZXIsCisJCQltaW4oZGV2LT5idWxrX2luX3NpemUsIGNvdW50KSwKKwkJCXNrZWxfcmVhZF9idWxrX2NhbGxiYWNrLAorCQkJZGV2KTsKKwkvKiB0ZWxsIGV2ZXJ5Ym9keSB0byBsZWF2ZSB0aGUgVVJCIGFsb25lICovCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5lcnJfbG9jayk7CisJZGV2LT5vbmdvaW5nX3JlYWQgPSAxOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5lcnJfbG9jayk7CisKKwkvKiBkbyBpdCAqLworCXJ2ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5idWxrX2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ2IDwgMCkgeworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKKwkJCV9fZnVuY19fLCBydik7CisJCWRldi0+YnVsa19pbl9maWxsZWQgPSAwOworCQlydiA9IChydiA9PSAtRU5PTUVNKSA/IHJ2IDogLUVJTzsKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5lcnJfbG9jayk7CisJCWRldi0+b25nb2luZ19yZWFkID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPmVycl9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNrZWxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OworCWludCBydjsKKwlib29sIG9uZ29pbmdfaW87CiAKIAlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJLyogaWYgd2UgY2Fubm90IHJlYWQgYXQgYWxsLCByZXR1cm4gRU9GICovCisJaWYgKCFkZXYtPmJ1bGtfaW5fdXJiIHx8ICFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwkvKiBubyBjb25jdXJyZW50IHJlYWRlcnMgKi8KKwlydiA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5pb19tdXRleCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCiAJaWYgKCFkZXYtPmludGVyZmFjZSkgewkJLyogZGlzY29ubmVjdCgpIHdhcyBjYWxsZWQgKi8KLQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJcnYgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyogZG8gYSBibG9ja2luZyBidWxrIHJlYWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCi0JcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKLQkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAotCQkJICAgICAgZGV2LT5idWxrX2luX2J1ZmZlciwKLQkJCSAgICAgIG1pbihkZXYtPmJ1bGtfaW5fc2l6ZSwgY291bnQpLAotCQkJICAgICAgJmJ5dGVzX3JlYWQsIDEwMDAwKTsKKwkvKiBpZiBJTyBpcyB1bmRlciB3YXksIHdlIG11c3Qgbm90IHRvdWNoIHRoaW5ncyAqLworcmV0cnk6CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5lcnJfbG9jayk7CisJb25nb2luZ19pbyA9IGRldi0+b25nb2luZ19yZWFkOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5lcnJfbG9jayk7CiAKLQkvKiBpZiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgY29weSB0aGUgZGF0YSB0byB1c2Vyc3BhY2UgKi8KLQlpZiAoIXJldHZhbCkgewotCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgZGV2LT5idWxrX2luX2J1ZmZlciwgYnl0ZXNfcmVhZCkpCi0JCQlyZXR2YWwgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXR2YWwgPSBieXRlc19yZWFkOworCWlmIChvbmdvaW5nX2lvKSB7CisJCS8qIG5vbmJsb2NraW5nIElPIHNoYWxsIG5vdCB3YWl0ICovCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcnYgPSAtRUFHQUlOOworCQkJZ290byBleGl0OworCQl9CisJCS8qCisJCSAqIElPIG1heSB0YWtlIGZvcmV2ZXIKKwkJICogaGVuY2Ugd2FpdCBpbiBhbiBpbnRlcnJ1cHRpYmxlIHN0YXRlCisJCSAqLworCQlydiA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmZGV2LT5idWxrX2luX2NvbXBsZXRpb24pOworCQlpZiAocnYgPCAwKQorCQkJZ290byBleGl0OworCQkvKgorCQkgKiBieSB3YWl0aW5nIHdlIGFsc28gc2VtaXByb2Nlc3NlZCB0aGUgdXJiCisJCSAqIHdlIG11c3QgZmluaXNoIG5vdworCQkgKi8KKwkJZGV2LT5idWxrX2luX2NvcGllZCA9IDA7CisJCWRldi0+cHJvY2Vzc2VkX3VyYiA9IDE7CiAJfQogCisJaWYgKCFkZXYtPnByb2Nlc3NlZF91cmIpIHsKKwkJLyoKKwkJICogdGhlIFVSQiBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQKKwkJICogZG8gaXQgbm93CisJCSAqLworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmJ1bGtfaW5fY29tcGxldGlvbik7CisJCWRldi0+YnVsa19pbl9jb3BpZWQgPSAwOworCQlkZXYtPnByb2Nlc3NlZF91cmIgPSAxOworCX0KKworCS8qIGVycm9ycyBtdXN0IGJlIHJlcG9ydGVkICovCisJcnYgPSBkZXYtPmVycm9yczsKKwlpZiAocnYgPCAwKSB7CisJCS8qIGFueSBlcnJvciBpcyByZXBvcnRlZCBvbmNlICovCisJCWRldi0+ZXJyb3JzID0gMDsKKwkJLyogdG8gcHJlc2VydmUgbm90aWZpY2F0aW9ucyBhYm91dCByZXNldCAqLworCQlydiA9IChydiA9PSAtRVBJUEUpID8gcnYgOiAtRUlPOworCQkvKiBubyBkYXRhIHRvIGRlbGl2ZXIgKi8KKwkJZGV2LT5idWxrX2luX2ZpbGxlZCA9IDA7CisJCS8qIHJlcG9ydCBpdCAqLworCQlnb3RvIGV4aXQ7CisJfQorCisJLyoKKwkgKiBpZiB0aGUgYnVmZmVyIGlzIGZpbGxlZCB3ZSBtYXkgc2F0aXNmeSB0aGUgcmVhZAorCSAqIGVsc2Ugd2UgbmVlZCB0byBzdGFydCBJTworCSAqLworCisJaWYgKGRldi0+YnVsa19pbl9maWxsZWQpIHsKKwkJLyogd2UgaGFkIHJlYWQgZGF0YSAqLworCQlzaXplX3QgYXZhaWxhYmxlID0gZGV2LT5idWxrX2luX2ZpbGxlZCAtIGRldi0+YnVsa19pbl9jb3BpZWQ7CisJCXNpemVfdCBjaHVuayA9IG1pbihhdmFpbGFibGUsIGNvdW50KTsKKworCQlpZiAoIWF2YWlsYWJsZSkgeworCQkJLyoKKwkJCSAqIGFsbCBkYXRhIGhhcyBiZWVuIHVzZWQKKwkJCSAqIGFjdHVhbCBJTyBuZWVkcyB0byBiZSBkb25lCisJCQkgKi8KKwkJCXJ2ID0gc2tlbF9kb19yZWFkX2lvKGRldiwgY291bnQpOworCQkJaWYgKHJ2IDwgMCkKKwkJCQlnb3RvIGV4aXQ7CisJCQllbHNlCisJCQkJZ290byByZXRyeTsKKwkJfQorCQkvKgorCQkgKiBkYXRhIGlzIGF2YWlsYWJsZQorCQkgKiBjaHVuayB0ZWxscyB1cyBob3cgbXVjaCBzaGFsbCBiZSBjb3BpZWQKKwkJICovCisKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsCisJCQkJIGRldi0+YnVsa19pbl9idWZmZXIgKyBkZXYtPmJ1bGtfaW5fY29waWVkLAorCQkJCSBjaHVuaykpCisJCQlydiA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJ2ID0gY2h1bms7CisKKwkJZGV2LT5idWxrX2luX2NvcGllZCArPSBjaHVuazsKKworCQkvKgorCQkgKiBpZiB3ZSBhcmUgYXNrZWQgZm9yIG1vcmUgdGhhbiB3ZSBoYXZlLAorCQkgKiB3ZSBzdGFydCBJTyBidXQgZG9uJ3Qgd2FpdAorCQkgKi8KKwkJaWYgKGF2YWlsYWJsZSA8IGNvdW50KQorCQkJc2tlbF9kb19yZWFkX2lvKGRldiwgY291bnQgLSBjaHVuayk7CisJfSBlbHNlIHsKKwkJLyogbm8gZGF0YSBpbiB0aGUgYnVmZmVyICovCisJCXJ2ID0gc2tlbF9kb19yZWFkX2lvKGRldiwgY291bnQpOworCQlpZiAocnYgPCAwKQorCQkJZ290byBleGl0OworCQllbHNlIGlmICghZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCQlnb3RvIHJldHJ5OworCQlydiA9IC1FQUdBSU47CisJfQogZXhpdDoKIAltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgdm9pZCBza2VsX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpAQCAtMjE2LDcgKzM3NSw3IEBACiAKIAkvKiBzeW5jL2FzeW5jIHVubGluayBmYXVsdHMgYXJlbid0IGVycm9ycyAqLwogCWlmICh1cmItPnN0YXR1cykgewotCQlpZighKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJaWYgKCEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAogCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKIAkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKQogCQkJZXJyKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKQEAgLTIzMyw3ICszOTIsOCBAQAogCXVwKCZkZXYtPmxpbWl0X3NlbSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNrZWxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKnVzZXJfYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IHNrZWxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKnVzZXJfYnVmZmVyLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdXNiX3NrZWwgKmRldjsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTI0NywxNCArNDA3LDI1IEBACiAJaWYgKGNvdW50ID09IDApCiAJCWdvdG8gZXhpdDsKIAotCS8qIGxpbWl0IHRoZSBudW1iZXIgb2YgVVJCcyBpbiBmbGlnaHQgdG8gc3RvcCBhIHVzZXIgZnJvbSB1c2luZyB1cCBhbGwgUkFNICovCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5saW1pdF9zZW0pKSB7Ci0JCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJZ290byBleGl0OworCS8qCisJICogbGltaXQgdGhlIG51bWJlciBvZiBVUkJzIGluIGZsaWdodCB0byBzdG9wIGEgdXNlciBmcm9tIHVzaW5nIHVwIGFsbAorCSAqIFJBTQorCSAqLworCWlmICghZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5saW1pdF9zZW0pKSB7CisJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZG93bl90cnlsb2NrKCZkZXYtPmxpbWl0X3NlbSkpIHsKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCQlnb3RvIGV4aXQ7CisJCX0KIAl9CiAKIAlzcGluX2xvY2tfaXJxKCZkZXYtPmVycl9sb2NrKTsKLQlpZiAoKHJldHZhbCA9IGRldi0+ZXJyb3JzKSA8IDApIHsKKwlyZXR2YWwgPSBkZXYtPmVycm9yczsKKwlpZiAocmV0dmFsIDwgMCkgewogCQkvKiBhbnkgZXJyb3IgaXMgcmVwb3J0ZWQgb25jZSAqLwogCQlkZXYtPmVycm9ycyA9IDA7CiAJCS8qIHRvIHByZXNlcnZlIG5vdGlmaWNhdGlvbnMgYWJvdXQgcmVzZXQgKi8KQEAgLTI3MSw3ICs0NDIsOCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LT51ZGV2LCB3cml0ZXNpemUsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIHdyaXRlc2l6ZSwgR0ZQX0tFUk5FTCwKKwkJCSAgICAgICAmdXJiLT50cmFuc2Zlcl9kbWEpOwogCWlmICghYnVmKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CkBAIC0zMDEsMTEgKzQ3MywxNSBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sCisJCSAgICByZXR2YWwpOwogCQlnb3RvIGVycm9yX3VuYW5jaG9yOwogCX0KIAotCS8qIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGlzIHVyYiwgdGhlIFVTQiBjb3JlIHdpbGwgZXZlbnR1YWxseSBmcmVlIGl0IGVudGlyZWx5ICovCisJLyoKKwkgKiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhpcyB1cmIsIHRoZSBVU0IgY29yZSB3aWxsIGV2ZW50dWFsbHkgZnJlZQorCSAqIGl0IGVudGlyZWx5CisJICovCiAJdXNiX2ZyZWVfdXJiKHVyYik7CiAKIApAQCAtMzQzLDcgKzUxOSw4IEBACiAJLm1pbm9yX2Jhc2UgPQlVU0JfU0tFTF9NSU5PUl9CQVNFLAogfTsKIAotc3RhdGljIGludCBza2VsX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgc2tlbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYl9za2VsICpkZXY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKQEAgLTM2Myw2ICs1NDAsNyBAQAogCW11dGV4X2luaXQoJmRldi0+aW9fbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPmVycl9sb2NrKTsKIAlpbml0X3VzYl9hbmNob3IoJmRldi0+c3VibWl0dGVkKTsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+YnVsa19pbl9jb21wbGV0aW9uKTsKIAogCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CiAJZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CkBAIC0zODQsNiArNTYyLDExIEBACiAJCQkJZXJyKCJDb3VsZCBub3QgYWxsb2NhdGUgYnVsa19pbl9idWZmZXIiKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQorCQkJZGV2LT5idWxrX2luX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRldi0+YnVsa19pbl91cmIpIHsKKwkJCQllcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBidWxrX2luX3VyYiIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CiAJCX0KIAogCQlpZiAoIWRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYmCkBAIC00NTMsNiArNjM2LDcgQEAKIAl0aW1lID0gdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoJmRldi0+c3VibWl0dGVkLCAxMDAwKTsKIAlpZiAoIXRpbWUpCiAJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRldi0+c3VibWl0dGVkKTsKKwl1c2Jfa2lsbF91cmIoZGV2LT5idWxrX2luX3VyYik7CiB9CiAKIHN0YXRpYyBpbnQgc2tlbF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKQEAgLTQ2NSw3ICs2NDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNrZWxfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3N0YXRpYyBpbnQgc2tlbF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1oYy5oIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtaGMuaAppbmRleCA1ODZkMzUwLi5kNmJlYTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1oYy5oCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLWhjLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqICAgICAgICAgICAgIHRvIGFuIGVuZHBvaW50IG9uIGEgV1VTQiBkZXZpY2UgdGhhdCBpcyBjb25uZWN0ZWQgdG8gYQogICogICAgICAgICAgICAgSFdBIFJDLgogICoKLSAqICB4ZmVyICAgICAgIFRyYW5zZmVyIG1hbmFnbWVudCAtLSB0aGlzIGlzIGFsbCB0aGUgY29kZSB0aGF0IGdldHMgYQorICogIHhmZXIgICAgICAgVHJhbnNmZXIgbWFuYWdlbWVudCAtLSB0aGlzIGlzIGFsbCB0aGUgY29kZSB0aGF0IGdldHMgYQogICogICAgICAgICAgICAgYnVmZmVyIGFuZCBwdXNoZXMgaXQgdG8gYSBkZXZpY2UgKG9yIHZpY2V2ZXJzYSkuICoKICAqCiAgKiBTb21lIGRheSBhIGxvdCBvZiB0aGlzIGNvZGUgd2lsbCBiZSBzaGFyZWQgYmV0d2VlbiB0aGlzIGRyaXZlciBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvbmV0ZGV2LmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL25ldGRldi5jCmluZGV4IDczMDU1NTMuLmIyMzZlNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC9uZXRkZXYuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIAluZXRpZl93YWtlX3F1ZXVlKG5ldF9kZXYpOwogI2lmZGVmIGkxNDgwdV9GTE9XX0NPTlRST0wKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihpMTQ4MHUtPm5vdGlmX3VyYiwgR0ZQX0tFUk5FTCk7OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGkxNDgwdS0+bm90aWZfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IHN1Ym1pdCBub3RpZmljYXRpb24gVVJCOiAlZFxuIiwgcmVzdWx0KTsKIAkJZ290byBlcnJvcl9ub3RpZl91cmJfc3VibWl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDExYWY0Y2IuLjliYmIyODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTEyNzUsMjYgKzEyNzUsNiBAQAogCSAgcGFpbnRpbmcgcHJvY2VkdXJlcyAodGhlIHNlY29uZGFyeSBoZWFkIGRvZXMgbm90IHVzZSBhY2NlbGVyYXRpb24KIAkgIGVuZ2luZSkuCiAKLWNvbmZpZyBGQl9NQVRST1hfTVVMVElIRUFECi0JYm9vbCAiTXVsdGloZWFkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQl9NQVRST1gKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgKHN1cHBvcnRlZCkgTWF0cm94IGRldmljZSBpbgotCSAgeW91ciBjb21wdXRlciBhbmQgeW91IHdhbnQgdG8gdXNlIGFsbCBvZiB0aGVtIGZvciBkaWZmZXJlbnQgbW9uaXRvcnMKLQkgICgibXVsdGloZWFkIikuIElmIHlvdSBoYXZlIG9ubHkgb25lIGRldmljZSwgeW91IHNob3VsZCBzYXkgTiBiZWNhdXNlCi0JICB0aGUgZHJpdmVyIGNvbXBpbGVkIHdpdGggWSBpcyBsYXJnZXIgYW5kIGEgYml0IHNsb3dlciwgZXNwZWNpYWxseSBvbgotCSAgaWEzMiAoaXg4NikuCi0KLQkgIElmIHlvdSBzYWlkIE0gdG8gIk1hdHJveCB1bmlmaWVkIGFjY2VsZXJhdGVkIGRyaXZlciIgYW5kIE4gaGVyZSwgeW91Ci0JICB3aWxsIHN0aWxsIGJlIGFibGUgdG8gdXNlIHNldmVyYWwgTWF0cm94IGRldmljZXMgc2ltdWx0YW5lb3VzbHk6Ci0JICBpbnNlcnQgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgdGhlIG1vZHVsZSBtYXRyb3hmYiBpbnRvIHRoZSBrZXJuZWwKLQkgIHdpdGggaW5zbW9kLCBzdXBwbHlpbmcgdGhlIHBhcmFtZXRlciAiZGV2PU4iIHdoZXJlIE4gaXMgMCwgMSwgZXRjLgotCSAgZm9yIHRoZSBkaWZmZXJlbnQgTWF0cm94IGRldmljZXMuIFRoaXMgbWV0aG9kIGlzIHNsaWdodGx5IGZhc3RlciBidXQKLQkgIHVzZXMgNDAgS0Igb2Yga2VybmVsIG1lbW9yeSBwZXIgTWF0cm94IGNhcmQuCi0KLQkgIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGVuYWJsaW5nICdNYXRyb3ggbXVsdGloZWFkIHN1cHBvcnQnIGlmIHlvdSBoYXZlCi0JICBvbmx5IG9uZSBNYXRyb3ggY2FyZCBpbiB0aGUgYm94LgotCiBjb25maWcgRkJfUkFERU9OCiAJdHJpc3RhdGUgIkFUSSBSYWRlb24gZGlzcGxheSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgUENJCkBAIC0yMDQxLDYgKzIwMjEsMTcgQEAKIAkgIGFuZCA4LCAxNSBvciAxNiBicHAgY29sb3I7IDkwIGRlZ3JlZXMgY2xvY2t3aXNlIGRpc3BsYXkgcm90YXRpb24gZm9yCiAJICBwYW5lbHMgPD0gMzIwIHBpeGVsIGhvcml6b250YWwgcmVzb2x1dGlvbi4KIAorY29uZmlnIEZCX0RBOFhYCisJdHJpc3RhdGUgIkRBOHh4L09NQVAtTDF4eCBGcmFtZWJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgQVJDSF9EQVZJTkNJX0RBOFhYCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgVEkgTENEIGNvbnRyb2xsZXIKKwkgIGZvdW5kIG9uIERBOHh4L09NQVAtTDF4eCBTb0NzLgorCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEZCX1ZJUlRVQUwKIAl0cmlzdGF0ZSAiVmlydHVhbCBGcmFtZSBCdWZmZXIgc3VwcG9ydCAoT05MWSBGT1IgVEVTVElORyEpIgogCWRlcGVuZHMgb24gRkIKQEAgLTIxMTcsNiArMjEwOCwxNyBAQAogCS0tLWhlbHAtLS0KIAkgIEZyYW1lYnVmZmVyIHN1cHBvcnQgZm9yIEZ1aml0c3UgTGltZSBHREMgb24gaG9zdCBDUFUgYnVzLgogCitjb25maWcgRkJfRVA5M1hYCisJdHJpc3RhdGUgIkVQOTNYWCBmcmFtZSBidWZmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfRVA5M1hYCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCS0tLWhlbHAtLS0KKwkgIEZyYW1lYnVmZmVyIGRyaXZlciBmb3IgdGhlIENpcnJ1cyBMb2dpYyBFUDkzWFggc2VyaWVzIG9mIHByb2Nlc3NvcnMuCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZAorCSAgZXA5M3h4LWZiLgorCiBjb25maWcgRkJfUFJFX0lOSVRfRkIKIAlib29sICJEb24ndCByZWluaXRpYWxpemUsIHVzZSBib290bG9hZGVyJ3MgR0RDL0Rpc3BsYXkgY29uZmlndXJhdGlvbiIKIAlkZXBlbmRzIG9uIEZCX01CODYyWFhfTElNRQpAQCAtMjEyNCw2ICsyMTI2LDE0IEBACiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgZGlzcGxheSBjb250ZW50cyBzaG91bGQgYmUgaW5oZXJpdGVkIGFzIHNldCBieQogCSAgdGhlIGJvb3Rsb2FkZXIuCiAKK2NvbmZpZyBGQl9NU00KKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gRkIgJiYgQVJDSF9NU00KKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJZGVmYXVsdCB5CisKIGNvbmZpZyBGQl9NWDMKIAl0cmlzdGF0ZSAiTVgzIEZyYW1lYnVmZmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBNWDNfSVBVCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQppbmRleCAwMWE4MTlmLi44MDIzMmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKQEAgLTg1LDYgKzg1LDcgQEAKIG9iai0kKENPTkZJR19GQl9UR0EpICAgICAgICAgICAgICArPSB0Z2FmYi5vCiBvYmotJChDT05GSUdfRkJfSFAzMDApICAgICAgICAgICAgKz0gaHBmYi5vCiBvYmotJChDT05GSUdfRkJfRzM2NCkgICAgICAgICAgICAgKz0gZzM2NGZiLm8KK29iai0kKENPTkZJR19GQl9FUDkzWFgpCQkgICs9IGVwOTN4eC1mYi5vCiBvYmotJChDT05GSUdfRkJfU0ExMTAwKSAgICAgICAgICAgKz0gc2ExMTAwZmIubwogb2JqLSQoQ09ORklHX0ZCX0hJVCkgICAgICAgICAgICAgICs9IGhpdGZiLm8KIG9iai0kKENPTkZJR19GQl9FUFNPTjEzNTUpCSAgKz0gZXBzb24xMzU1ZmIubwpAQCAtMTI2LDYgKzEyNyw3IEBACiBvYmotJChDT05GSUdfWEVOX0ZCREVWX0ZST05URU5EKSAgKz0geGVuLWZiZnJvbnQubwogb2JqLSQoQ09ORklHX0ZCX0NBUk1JTkUpICAgICAgICAgICs9IGNhcm1pbmVmYi5vCiBvYmotJChDT05GSUdfRkJfTUI4NjJYWCkJICArPSBtYjg2Mnh4Lworb2JqLSQoQ09ORklHX0ZCX01TTSkgICAgICAgICAgICAgICs9IG1zbS8KIAogIyBQbGF0Zm9ybSBvciBmYWxsYmFjayBkcml2ZXJzIGdvIGhlcmUKIG9iai0kKENPTkZJR19GQl9VVkVTQSkgICAgICAgICAgICArPSB1dmVzYWZiLm8KQEAgLTEzNiw2ICsxMzgsNyBAQAogb2JqLSQoQ09ORklHX0ZCX0JGNTRYX0xRMDQzKQkgICs9IGJmNTR4LWxxMDQzZmIubwogb2JqLSQoQ09ORklHX0ZCX0JGSU5fVDM1ME1DUUIpCSAgKz0gYmZpbi10MzUwbWNxYi1mYi5vCiBvYmotJChDT05GSUdfRkJfTVgzKQkJICArPSBteDNmYi5vCitvYmotJChDT05GSUdfRkJfREE4WFgpCQkgICs9IGRhOHh4LWZiLm8KIAogIyB0aGUgdGVzdCBmcmFtZWJ1ZmZlciBpcyBsYXN0CiBvYmotJChDT05GSUdfRkJfVklSVFVBTCkgICAgICAgICAgKz0gdmZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCA2M2QzNzM5Li45MTNiNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIFBSSU5US0koZm10LCBhcmdzLi4uKQlwcmludGsoS0VSTl9JTkZPICJhdHlmYjogIiBmbXQsICMjIGFyZ3MpCi0jZGVmaW5lIFBSSU5US0UoZm10LCBhcmdzLi4uKQkgcHJpbnRrKEtFUk5fRVJSICJhdHlmYjogIiBmbXQsICMjIGFyZ3MpCisjZGVmaW5lIFBSSU5US0UoZm10LCBhcmdzLi4uKQlwcmludGsoS0VSTl9FUlIgImF0eWZiOiAiIGZtdCwgIyMgYXJncykKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKSB8fCBkZWZpbmVkKENPTkZJR19QTUFDX0JBQ0tMSUdIVCkgfHwgXAogZGVmaW5lZCAoQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRZX0JBQ0tMSUdIVCkKQEAgLTE4OCwyNCArMTg4LDIzIEBACiAgKi8KIHN0YXRpYyB2b2lkIEFUSVJlZHVjZVJhdGlvKGludCAqTnVtZXJhdG9yLCBpbnQgKkRlbm9taW5hdG9yKQogewotICAgIGludCBNdWx0aXBsaWVyLCBEaXZpZGVyLCBSZW1haW5kZXI7CisJaW50IE11bHRpcGxpZXIsIERpdmlkZXIsIFJlbWFpbmRlcjsKIAotICAgIE11bHRpcGxpZXIgPSAqTnVtZXJhdG9yOwotICAgIERpdmlkZXIgPSAqRGVub21pbmF0b3I7CisJTXVsdGlwbGllciA9ICpOdW1lcmF0b3I7CisJRGl2aWRlciA9ICpEZW5vbWluYXRvcjsKIAotICAgIHdoaWxlICgoUmVtYWluZGVyID0gTXVsdGlwbGllciAlIERpdmlkZXIpKQotICAgIHsKLSAgICAgICAgTXVsdGlwbGllciA9IERpdmlkZXI7Ci0gICAgICAgIERpdmlkZXIgPSBSZW1haW5kZXI7Ci0gICAgfQorCXdoaWxlICgoUmVtYWluZGVyID0gTXVsdGlwbGllciAlIERpdmlkZXIpKSB7CisJCU11bHRpcGxpZXIgPSBEaXZpZGVyOworCQlEaXZpZGVyID0gUmVtYWluZGVyOworCX0KIAotICAgICpOdW1lcmF0b3IgLz0gRGl2aWRlcjsKLSAgICAqRGVub21pbmF0b3IgLz0gRGl2aWRlcjsKKwkqTnVtZXJhdG9yIC89IERpdmlkZXI7CisJKkRlbm9taW5hdG9yIC89IERpdmlkZXI7CiB9CiAjZW5kaWYKLSAgICAvKgotICAgICAqICBUaGUgSGFyZHdhcmUgcGFyYW1ldGVycyBmb3IgZWFjaCBjYXJkCi0gICAgICovCisvKgorICogVGhlIEhhcmR3YXJlIHBhcmFtZXRlcnMgZm9yIGVhY2ggY2FyZAorICovCiAKIHN0cnVjdCBwY2lfbW1hcF9tYXAgewogCXVuc2lnbmVkIGxvbmcgdm9mZjsKQEAgLTIyMywxNyArMjIyLDE5IEBACiAJLnlwYW5zdGVwCT0gMSwKIH07CiAKLSAgICAvKgotICAgICAqICBGcmFtZSBidWZmZXIgZGV2aWNlIEFQSQotICAgICAqLworLyoKKyAqIEZyYW1lIGJ1ZmZlciBkZXZpY2UgQVBJCisgKi8KIAogc3RhdGljIGludCBhdHlmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcik7CiBzdGF0aWMgaW50IGF0eWZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKTsKLXN0YXRpYyBpbnQgYXR5ZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGF0eWZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgYXR5ZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGF0eWZiX3NldGNvbHJlZyh1X2ludCByZWdubywgdV9pbnQgcmVkLCB1X2ludCBncmVlbiwgdV9pbnQgYmx1ZSwKLQl1X2ludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgYXR5ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKwkJCSAgIHVfaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOworc3RhdGljIGludCBhdHlmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogc3RhdGljIGludCBhdHlmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgYXR5ZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVfaW50IGNtZCwgdV9sb25nIGFyZyk7CiAjaWZkZWYgX19zcGFyY19fCkBAIC0yNDEsOSArMjQyLDkgQEAKICNlbmRpZgogc3RhdGljIGludCBhdHlmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAotICAgIC8qCi0gICAgICogIEludGVybmFsIHJvdXRpbmVzCi0gICAgICovCisvKgorICogSW50ZXJuYWwgcm91dGluZXMKKyAqLwogCiBzdGF0aWMgaW50IGF0eV9pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIApAQCAtMjU0LDggKzI1NSwxMSBAQAogc3RhdGljIHZvaWQgYXR5X2dldF9jcnRjKGNvbnN0IHN0cnVjdCBhdHlmYl9wYXIgKnBhciwgc3RydWN0IGNydGMgKmNydGMpOwogCiBzdGF0aWMgdm9pZCBhdHlfc2V0X2NydGMoY29uc3Qgc3RydWN0IGF0eWZiX3BhciAqcGFyLCBjb25zdCBzdHJ1Y3QgY3J0YyAqY3J0Yyk7Ci1zdGF0aWMgaW50IGF0eV92YXJfdG9fY3J0Yyhjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBjcnRjICpjcnRjKTsKLXN0YXRpYyBpbnQgYXR5X2NydGNfdG9fdmFyKGNvbnN0IHN0cnVjdCBjcnRjICpjcnRjLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CitzdGF0aWMgaW50IGF0eV92YXJfdG9fY3J0Yyhjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgIGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgc3RydWN0IGNydGMgKmNydGMpOworc3RhdGljIGludCBhdHlfY3J0Y190b192YXIoY29uc3Qgc3RydWN0IGNydGMgKmNydGMsCisJCQkgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CiBzdGF0aWMgdm9pZCBzZXRfb2ZmX3BpdGNoKHN0cnVjdCBhdHlmYl9wYXIgKnBhciwgY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8pOwogI2lmZGVmIENPTkZJR19QUEMKIHN0YXRpYyBpbnQgcmVhZF9hdHlfc2Vuc2UoY29uc3Qgc3RydWN0IGF0eWZiX3BhciAqcGFyKTsKQEAgLTI2NCw5ICsyNjgsOSBAQAogc3RhdGljIERFRklORV9NVVRFWChyZWJvb3RfbG9jayk7CiBzdGF0aWMgc3RydWN0IGZiX2luZm8gKnJlYm9vdF9pbmZvOwogCi0gICAgLyoKLSAgICAgKiAgSW50ZXJmYWNlIHVzZWQgYnkgdGhlIHdvcmxkCi0gICAgICovCisvKgorICogSW50ZXJmYWNlIHVzZWQgYnkgdGhlIHdvcmxkCisgKi8KIAogc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBkZWZhdWx0X3ZhciA9IHsKIAkvKiA2NDB4NDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDI1LjE3NSBNSHogZG90Y2xvY2spICovCkBAIC00NTIsMTQgKzQ1NiwxNCBAQAogCXR5cGUgPSBjaGlwX2lkICYgQ0ZHX0NISVBfVFlQRTsKIAlyZXYgPSAoY2hpcF9pZCAmIENGR19DSElQX1JFVikgPj4gMjQ7CiAKLQlzd2l0Y2gocGFyLT5wY2lfaWQpIHsKKwlzd2l0Y2ggKHBhci0+cGNpX2lkKSB7CiAjaWZkZWYgQ09ORklHX0ZCX0FUWV9HWAogCWNhc2UgUENJX0NISVBfTUFDSDY0R1g6Ci0JCWlmKHR5cGUgIT0gMHgwMGQ3KQorCQlpZiAodHlwZSAhPSAweDAwZDcpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfQ0hJUF9NQUNINjRDWDoKLQkJaWYodHlwZSAhPSAweDAwNTcpCisJCWlmICh0eXBlICE9IDB4MDA1NykKIAkJCXJldHVybiAtRU5PREVWOwogCQlicmVhazsKICNlbmRpZgpAQCAtNTY0LDcgKzU2OCw4IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19GQl9BVFlfQ1QgKi8KIAotc3RhdGljIHUzMiBhdHlmYl9nZXRfcGl4Y2xvY2soc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBhdHlmYl9wYXIgKnBhcikKK3N0YXRpYyB1MzIgYXR5ZmJfZ2V0X3BpeGNsb2NrKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICAgc3RydWN0IGF0eWZiX3BhciAqcGFyKQogewogCXUzMiBwaXhjbG9jayA9IHZhci0+cGl4Y2xvY2s7CiAjaWZkZWYgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRApAQCAtNTcyLDcgKzU3Nyw3IEBACiAJcGFyLT5wbGwuY3QueHJlcyA9IDA7CiAJaWYgKHBhci0+bGNkX3RhYmxlICE9IDApIHsKIAkJbGNkX29uX29mZiA9IGF0eV9sZF9sY2QoTENEX0dFTl9DTlRMLCBwYXIpOwotCQlpZihsY2Rfb25fb2ZmICYgTENEX09OKSB7CisJCWlmIChsY2Rfb25fb2ZmICYgTENEX09OKSB7CiAJCQlwYXItPnBsbC5jdC54cmVzID0gdmFyLT54cmVzOwogCQkJcGl4Y2xvY2sgPSBwYXItPmxjZF9waXhjbG9jazsKIAkJfQpAQCAtNTg0LDcgKzU4OSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUFBDKQogCiAvKgotICogIEFwcGxlIG1vbml0b3Igc2Vuc2UKKyAqIEFwcGxlIG1vbml0b3Igc2Vuc2UKICAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCByZWFkX2F0eV9zZW5zZShjb25zdCBzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIpCkBAIC02MjUsMTYgKzYzMCwxNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgotICogIENSVEMgcHJvZ3JhbW1pbmcKKyAqIENSVEMgcHJvZ3JhbW1pbmcKICAqLwogCiBzdGF0aWMgdm9pZCBhdHlfZ2V0X2NydGMoY29uc3Qgc3RydWN0IGF0eWZiX3BhciAqcGFyLCBzdHJ1Y3QgY3J0YyAqY3J0YykKIHsKICNpZmRlZiBDT05GSUdfRkJfQVRZX0dFTkVSSUNfTENECiAJaWYgKHBhci0+bGNkX3RhYmxlICE9IDApIHsKLQkJaWYoIU02NF9IQVMoTFRfTENEX1JFR1MpKSB7Ci0JCSAgICBjcnRjLT5sY2RfaW5kZXggPSBhdHlfbGRfbGUzMihMQ0RfSU5ERVgsIHBhcik7Ci0JCSAgICBhdHlfc3RfbGUzMihMQ0RfSU5ERVgsIGNydGMtPmxjZF9pbmRleCwgcGFyKTsKKwkJaWYgKCFNNjRfSEFTKExUX0xDRF9SRUdTKSkgeworCQkJY3J0Yy0+bGNkX2luZGV4ID0gYXR5X2xkX2xlMzIoTENEX0lOREVYLCBwYXIpOworCQkJYXR5X3N0X2xlMzIoTENEX0lOREVYLCBjcnRjLT5sY2RfaW5kZXgsIHBhcik7CiAJCX0KIAkJY3J0Yy0+bGNkX2NvbmZpZ19wYW5lbCA9IGF0eV9sZF9sY2QoQ05GR19QQU5FTCwgcGFyKTsKIAkJY3J0Yy0+bGNkX2dlbl9jbnRsID0gYXR5X2xkX2xjZChMQ0RfR0VOX0NOVEwsIHBhcik7CkBAIC02NDIsNyArNjQ3LDcgQEAKIAogCQkvKiBzd2l0Y2ggdG8gbm9uIHNoYWRvdyByZWdpc3RlcnMgKi8KIAkJYXR5X3N0X2xjZChMQ0RfR0VOX0NOVEwsIGNydGMtPmxjZF9nZW5fY250bCAmCi0gICAgICAgICAgICAgICAgICAgIH4oQ1JUQ19SV19TRUxFQ1QgfCBTSEFET1dfRU4gfCBTSEFET1dfUldfRU4pLCBwYXIpOworCQkJICAgfihDUlRDX1JXX1NFTEVDVCB8IFNIQURPV19FTiB8IFNIQURPV19SV19FTiksIHBhcik7CiAKIAkJLyogc2F2ZSBzdHJldGNoaW5nICovCiAJCWNydGMtPmhvcnpfc3RyZXRjaGluZyA9IGF0eV9sZF9sY2QoSE9SWl9TVFJFVENISU5HLCBwYXIpOwpAQCAtNjYzLDcgKzY2OCw3IEBACiAJaWYgKHBhci0+bGNkX3RhYmxlICE9IDApIHsKIAkJLyogc3dpdGNoIHRvIHNoYWRvdyByZWdpc3RlcnMgKi8KIAkJYXR5X3N0X2xjZChMQ0RfR0VOX0NOVEwsIChjcnRjLT5sY2RfZ2VuX2NudGwgJiB+Q1JUQ19SV19TRUxFQ1QpIHwKLQkJCVNIQURPV19FTiB8IFNIQURPV19SV19FTiwgcGFyKTsKKwkJCSAgIFNIQURPV19FTiB8IFNIQURPV19SV19FTiwgcGFyKTsKIAogCQljcnRjLT5zaGFkb3dfaF90b3RfZGlzcCA9IGF0eV9sZF9sZTMyKENSVENfSF9UT1RBTF9ESVNQLCBwYXIpOwogCQljcnRjLT5zaGFkb3dfaF9zeW5jX3N0cnRfd2lkID0gYXR5X2xkX2xlMzIoQ1JUQ19IX1NZTkNfU1RSVF9XSUQsIHBhcik7CkBAIC02ODAsMjEgKzY4NSwyMCBAQAogI2lmZGVmIENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QKIAlpZiAocGFyLT5sY2RfdGFibGUgIT0gMCkgewogCQkvKiBzdG9wIENSVEMgKi8KLQkJYXR5X3N0X2xlMzIoQ1JUQ19HRU5fQ05UTCwgY3J0Yy0+Z2VuX2NudGwgJiB+KENSVENfRVhUX0RJU1BfRU4gfCBDUlRDX0VOKSwgcGFyKTsKKwkJYXR5X3N0X2xlMzIoQ1JUQ19HRU5fQ05UTCwgY3J0Yy0+Z2VuX2NudGwgJgorCQkJICAgIH4oQ1JUQ19FWFRfRElTUF9FTiB8IENSVENfRU4pLCBwYXIpOwogCiAJCS8qIHVwZGF0ZSBub24tc2hhZG93IHJlZ2lzdGVycyBmaXJzdCAqLwogCQlhdHlfc3RfbGNkKENORkdfUEFORUwsIGNydGMtPmxjZF9jb25maWdfcGFuZWwsIHBhcik7CiAJCWF0eV9zdF9sY2QoTENEX0dFTl9DTlRMLCBjcnRjLT5sY2RfZ2VuX2NudGwgJgotCQkJfihDUlRDX1JXX1NFTEVDVCB8IFNIQURPV19FTiB8IFNIQURPV19SV19FTiksIHBhcik7CisJCQkgICB+KENSVENfUldfU0VMRUNUIHwgU0hBRE9XX0VOIHwgU0hBRE9XX1JXX0VOKSwgcGFyKTsKIAogCQkvKiB0ZW1wb3JhcmlseSBkaXNhYmxlIHN0cmV0Y2hpbmcgKi8KLQkJYXR5X3N0X2xjZChIT1JaX1NUUkVUQ0hJTkcsCi0JCQljcnRjLT5ob3J6X3N0cmV0Y2hpbmcgJgotCQkJfihIT1JaX1NUUkVUQ0hfTU9ERSB8IEhPUlpfU1RSRVRDSF9FTiksIHBhcik7Ci0JCWF0eV9zdF9sY2QoVkVSVF9TVFJFVENISU5HLAotCQkJY3J0Yy0+dmVydF9zdHJldGNoaW5nICYKLQkJCX4oVkVSVF9TVFJFVENIX1JBVElPMSB8IFZFUlRfU1RSRVRDSF9SQVRJTzIgfAotCQkJVkVSVF9TVFJFVENIX1VTRTAgfCBWRVJUX1NUUkVUQ0hfRU4pLCBwYXIpOworCQlhdHlfc3RfbGNkKEhPUlpfU1RSRVRDSElORywgY3J0Yy0+aG9yel9zdHJldGNoaW5nICYKKwkJCSAgIH4oSE9SWl9TVFJFVENIX01PREUgfCBIT1JaX1NUUkVUQ0hfRU4pLCBwYXIpOworCQlhdHlfc3RfbGNkKFZFUlRfU1RSRVRDSElORywgY3J0Yy0+dmVydF9zdHJldGNoaW5nICYKKwkJCSAgIH4oVkVSVF9TVFJFVENIX1JBVElPMSB8IFZFUlRfU1RSRVRDSF9SQVRJTzIgfAorCQkJICAgICBWRVJUX1NUUkVUQ0hfVVNFMCB8IFZFUlRfU1RSRVRDSF9FTiksIHBhcik7CiAJfQogI2VuZGlmCiAJLyogdHVybiBvZmYgQ1JUICovCkBAIC03MDIsMTcgKzcwNiwxOSBAQAogCiAJRFBSSU5USygic2V0dGluZyB1cCBDUlRDXG4iKTsKIAlEUFJJTlRLKCJzZXQgcHJpbWFyeSBDUlQgdG8gJWl4JWkgJWMlYyBjb21wb3NpdGUgJWNcbiIsCi0JICAgICgoKChjcnRjLT5oX3RvdF9kaXNwPj4xNikgJiAweGZmKSArIDEpPDwzKSwgKCgoY3J0Yy0+dl90b3RfZGlzcD4+MTYpICYgMHg3ZmYpICsgMSksCi0JICAgIChjcnRjLT5oX3N5bmNfc3RydF93aWQgJiAweDIwMDAwMCk/J04nOidQJywgKGNydGMtPnZfc3luY19zdHJ0X3dpZCAmIDB4MjAwMDAwKT8nTic6J1AnLAotCSAgICAoY3J0Yy0+Z2VuX2NudGwgJiBDUlRDX0NTWU5DX0VOKT8nUCc6J04nKTsKKwkJKCgoKGNydGMtPmhfdG90X2Rpc3AgPj4gMTYpICYgMHhmZikgKyAxKSA8PCAzKSwKKwkJKCgoY3J0Yy0+dl90b3RfZGlzcCA+PiAxNikgJiAweDdmZikgKyAxKSwKKwkJKGNydGMtPmhfc3luY19zdHJ0X3dpZCAmIDB4MjAwMDAwKSA/ICdOJyA6ICdQJywKKwkJKGNydGMtPnZfc3luY19zdHJ0X3dpZCAmIDB4MjAwMDAwKSA/ICdOJyA6ICdQJywKKwkJKGNydGMtPmdlbl9jbnRsICYgQ1JUQ19DU1lOQ19FTikgPyAnUCcgOiAnTicpOwogCi0JRFBSSU5USygiQ1JUQ19IX1RPVEFMX0RJU1A6ICV4XG4iLGNydGMtPmhfdG90X2Rpc3ApOwotCURQUklOVEsoIkNSVENfSF9TWU5DX1NUUlRfV0lEOiAleFxuIixjcnRjLT5oX3N5bmNfc3RydF93aWQpOwotCURQUklOVEsoIkNSVENfVl9UT1RBTF9ESVNQOiAleFxuIixjcnRjLT52X3RvdF9kaXNwKTsKLQlEUFJJTlRLKCJDUlRDX1ZfU1lOQ19TVFJUX1dJRDogJXhcbiIsY3J0Yy0+dl9zeW5jX3N0cnRfd2lkKTsKKwlEUFJJTlRLKCJDUlRDX0hfVE9UQUxfRElTUDogJXhcbiIsIGNydGMtPmhfdG90X2Rpc3ApOworCURQUklOVEsoIkNSVENfSF9TWU5DX1NUUlRfV0lEOiAleFxuIiwgY3J0Yy0+aF9zeW5jX3N0cnRfd2lkKTsKKwlEUFJJTlRLKCJDUlRDX1ZfVE9UQUxfRElTUDogJXhcbiIsIGNydGMtPnZfdG90X2Rpc3ApOworCURQUklOVEsoIkNSVENfVl9TWU5DX1NUUlRfV0lEOiAleFxuIiwgY3J0Yy0+dl9zeW5jX3N0cnRfd2lkKTsKIAlEUFJJTlRLKCJDUlRDX09GRl9QSVRDSDogJXhcbiIsIGNydGMtPm9mZl9waXRjaCk7CiAJRFBSSU5USygiQ1JUQ19WTElORV9DUk5UX1ZMSU5FOiAleFxuIiwgY3J0Yy0+dmxpbmVfY3JudF92bGluZSk7Ci0JRFBSSU5USygiQ1JUQ19HRU5fQ05UTDogJXhcbiIsY3J0Yy0+Z2VuX2NudGwpOworCURQUklOVEsoIkNSVENfR0VOX0NOVEw6ICV4XG4iLCBjcnRjLT5nZW5fY250bCk7CiAKIAlhdHlfc3RfbGUzMihDUlRDX0hfVE9UQUxfRElTUCwgY3J0Yy0+aF90b3RfZGlzcCwgcGFyKTsKIAlhdHlfc3RfbGUzMihDUlRDX0hfU1lOQ19TVFJUX1dJRCwgY3J0Yy0+aF9zeW5jX3N0cnRfd2lkLCBwYXIpOwpAQCAtNzMyLDE2ICs3MzgsMjIgQEAKIAlpZiAocGFyLT5sY2RfdGFibGUgIT0gMCkgewogCQkvKiBzd2l0Y2ggdG8gc2hhZG93IHJlZ2lzdGVycyAqLwogCQlhdHlfc3RfbGNkKExDRF9HRU5fQ05UTCwgKGNydGMtPmxjZF9nZW5fY250bCAmIH5DUlRDX1JXX1NFTEVDVCkgfAotCQkJKFNIQURPV19FTiB8IFNIQURPV19SV19FTiksIHBhcik7CisJCQkgICBTSEFET1dfRU4gfCBTSEFET1dfUldfRU4sIHBhcik7CiAKIAkJRFBSSU5USygic2V0IHNoYWRvdyBDUlQgdG8gJWl4JWkgJWMlY1xuIiwKLQkJICAgICgoKChjcnRjLT5zaGFkb3dfaF90b3RfZGlzcD4+MTYpICYgMHhmZikgKyAxKTw8MyksICgoKGNydGMtPnNoYWRvd192X3RvdF9kaXNwPj4xNikgJiAweDdmZikgKyAxKSwKLQkJICAgIChjcnRjLT5zaGFkb3dfaF9zeW5jX3N0cnRfd2lkICYgMHgyMDAwMDApPydOJzonUCcsIChjcnRjLT5zaGFkb3dfdl9zeW5jX3N0cnRfd2lkICYgMHgyMDAwMDApPydOJzonUCcpOworCQkJKCgoKGNydGMtPnNoYWRvd19oX3RvdF9kaXNwID4+IDE2KSAmIDB4ZmYpICsgMSkgPDwgMyksCisJCQkoKChjcnRjLT5zaGFkb3dfdl90b3RfZGlzcCA+PiAxNikgJiAweDdmZikgKyAxKSwKKwkJCShjcnRjLT5zaGFkb3dfaF9zeW5jX3N0cnRfd2lkICYgMHgyMDAwMDApID8gJ04nIDogJ1AnLAorCQkJKGNydGMtPnNoYWRvd192X3N5bmNfc3RydF93aWQgJiAweDIwMDAwMCkgPyAnTicgOiAnUCcpOwogCi0JCURQUklOVEsoIlNIQURPVyBDUlRDX0hfVE9UQUxfRElTUDogJXhcbiIsIGNydGMtPnNoYWRvd19oX3RvdF9kaXNwKTsKLQkJRFBSSU5USygiU0hBRE9XIENSVENfSF9TWU5DX1NUUlRfV0lEOiAleFxuIiwgY3J0Yy0+c2hhZG93X2hfc3luY19zdHJ0X3dpZCk7Ci0JCURQUklOVEsoIlNIQURPVyBDUlRDX1ZfVE9UQUxfRElTUDogJXhcbiIsIGNydGMtPnNoYWRvd192X3RvdF9kaXNwKTsKLQkJRFBSSU5USygiU0hBRE9XIENSVENfVl9TWU5DX1NUUlRfV0lEOiAleFxuIiwgY3J0Yy0+c2hhZG93X3Zfc3luY19zdHJ0X3dpZCk7CisJCURQUklOVEsoIlNIQURPVyBDUlRDX0hfVE9UQUxfRElTUDogJXhcbiIsCisJCQljcnRjLT5zaGFkb3dfaF90b3RfZGlzcCk7CisJCURQUklOVEsoIlNIQURPVyBDUlRDX0hfU1lOQ19TVFJUX1dJRDogJXhcbiIsCisJCQljcnRjLT5zaGFkb3dfaF9zeW5jX3N0cnRfd2lkKTsKKwkJRFBSSU5USygiU0hBRE9XIENSVENfVl9UT1RBTF9ESVNQOiAleFxuIiwKKwkJCWNydGMtPnNoYWRvd192X3RvdF9kaXNwKTsKKwkJRFBSSU5USygiU0hBRE9XIENSVENfVl9TWU5DX1NUUlRfV0lEOiAleFxuIiwKKwkJCWNydGMtPnNoYWRvd192X3N5bmNfc3RydF93aWQpOwogCiAJCWF0eV9zdF9sZTMyKENSVENfSF9UT1RBTF9ESVNQLCBjcnRjLT5zaGFkb3dfaF90b3RfZGlzcCwgcGFyKTsKIAkJYXR5X3N0X2xlMzIoQ1JUQ19IX1NZTkNfU1RSVF9XSUQsIGNydGMtPnNoYWRvd19oX3N5bmNfc3RydF93aWQsIHBhcik7CkBAIC03NTIsMTYgKzc2NCwxNiBAQAogCQlEUFJJTlRLKCJMQ0RfR0VOX0NOVEw6ICV4XG4iLCBjcnRjLT5sY2RfZ2VuX2NudGwpOwogCQlEUFJJTlRLKCJIT1JaX1NUUkVUQ0hJTkc6ICV4XG4iLCBjcnRjLT5ob3J6X3N0cmV0Y2hpbmcpOwogCQlEUFJJTlRLKCJWRVJUX1NUUkVUQ0hJTkc6ICV4XG4iLCBjcnRjLT52ZXJ0X3N0cmV0Y2hpbmcpOwotCQlpZighTTY0X0hBUyhMVF9MQ0RfUkVHUykpCi0JCSAgICBEUFJJTlRLKCJFWFRfVkVSVF9TVFJFVENIOiAleFxuIiwgY3J0Yy0+ZXh0X3ZlcnRfc3RyZXRjaCk7CisJCWlmICghTTY0X0hBUyhMVF9MQ0RfUkVHUykpCisJCQlEUFJJTlRLKCJFWFRfVkVSVF9TVFJFVENIOiAleFxuIiwgY3J0Yy0+ZXh0X3ZlcnRfc3RyZXRjaCk7CiAKIAkJYXR5X3N0X2xjZChMQ0RfR0VOX0NOVEwsIGNydGMtPmxjZF9nZW5fY250bCwgcGFyKTsKIAkJYXR5X3N0X2xjZChIT1JaX1NUUkVUQ0hJTkcsIGNydGMtPmhvcnpfc3RyZXRjaGluZywgcGFyKTsKIAkJYXR5X3N0X2xjZChWRVJUX1NUUkVUQ0hJTkcsIGNydGMtPnZlcnRfc3RyZXRjaGluZywgcGFyKTsKLQkJaWYoIU02NF9IQVMoTFRfTENEX1JFR1MpKSB7Ci0JCSAgICBhdHlfc3RfbGNkKEVYVF9WRVJUX1NUUkVUQ0gsIGNydGMtPmV4dF92ZXJ0X3N0cmV0Y2gsIHBhcik7Ci0JCSAgICBhdHlfbGRfbGUzMihMQ0RfSU5ERVgsIHBhcik7Ci0JCSAgICBhdHlfc3RfbGUzMihMQ0RfSU5ERVgsIGNydGMtPmxjZF9pbmRleCwgcGFyKTsKKwkJaWYgKCFNNjRfSEFTKExUX0xDRF9SRUdTKSkgeworCQkJYXR5X3N0X2xjZChFWFRfVkVSVF9TVFJFVENILCBjcnRjLT5leHRfdmVydF9zdHJldGNoLCBwYXIpOworCQkJYXR5X2xkX2xlMzIoTENEX0lOREVYLCBwYXIpOworCQkJYXR5X3N0X2xlMzIoTENEX0lOREVYLCBjcnRjLT5sY2RfaW5kZXgsIHBhcik7CiAJCX0KIAl9CiAjZW5kaWYgLyogQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRCAqLwpAQCAtNzc5LDcgKzc5MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQgYXR5X3Zhcl90b19jcnRjKGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvLAotCWNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgY3J0YyAqY3J0YykKKwkJCSAgIGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgc3RydWN0IGNydGMgKmNydGMpCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwogCXUzMiB4cmVzLCB5cmVzLCB2eHJlcywgdnlyZXMsIHhvZmZzZXQsIHlvZmZzZXQsIGJwcDsKQEAgLTgxNCwzNCArODI3LDMyIEBACiAJaWYgKGJwcCA8PSA4KSB7CiAJCWJwcCA9IDg7CiAJCXBpeF93aWR0aCA9IENSVENfUElYX1dJRFRIXzhCUFA7Ci0JCWRwX3BpeF93aWR0aCA9Ci0JCSAgICBIT1NUXzhCUFAgfCBTUkNfOEJQUCB8IERTVF84QlBQIHwKLQkJICAgIEJZVEVfT1JERVJfTFNCX1RPX01TQjsKKwkJZHBfcGl4X3dpZHRoID0gSE9TVF84QlBQIHwgU1JDXzhCUFAgfCBEU1RfOEJQUCB8CisJCQlCWVRFX09SREVSX0xTQl9UT19NU0I7CiAJCWRwX2NoYWluX21hc2sgPSBEUF9DSEFJTl84QlBQOwogCX0gZWxzZSBpZiAoYnBwIDw9IDE1KSB7CiAJCWJwcCA9IDE2OwogCQlwaXhfd2lkdGggPSBDUlRDX1BJWF9XSURUSF8xNUJQUDsKIAkJZHBfcGl4X3dpZHRoID0gSE9TVF8xNUJQUCB8IFNSQ18xNUJQUCB8IERTVF8xNUJQUCB8Ci0JCSAgICBCWVRFX09SREVSX0xTQl9UT19NU0I7CisJCQlCWVRFX09SREVSX0xTQl9UT19NU0I7CiAJCWRwX2NoYWluX21hc2sgPSBEUF9DSEFJTl8xNUJQUDsKIAl9IGVsc2UgaWYgKGJwcCA8PSAxNikgewogCQlicHAgPSAxNjsKIAkJcGl4X3dpZHRoID0gQ1JUQ19QSVhfV0lEVEhfMTZCUFA7CiAJCWRwX3BpeF93aWR0aCA9IEhPU1RfMTZCUFAgfCBTUkNfMTZCUFAgfCBEU1RfMTZCUFAgfAotCQkgICAgQllURV9PUkRFUl9MU0JfVE9fTVNCOworCQkJQllURV9PUkRFUl9MU0JfVE9fTVNCOwogCQlkcF9jaGFpbl9tYXNrID0gRFBfQ0hBSU5fMTZCUFA7CiAJfSBlbHNlIGlmIChicHAgPD0gMjQgJiYgTTY0X0hBUyhJTlRFR1JBVEVEKSkgewogCQlicHAgPSAyNDsKIAkJcGl4X3dpZHRoID0gQ1JUQ19QSVhfV0lEVEhfMjRCUFA7Ci0JCWRwX3BpeF93aWR0aCA9Ci0JCSAgICBIT1NUXzhCUFAgfCBTUkNfOEJQUCB8IERTVF84QlBQIHwKLQkJICAgIEJZVEVfT1JERVJfTFNCX1RPX01TQjsKKwkJZHBfcGl4X3dpZHRoID0gSE9TVF84QlBQIHwgU1JDXzhCUFAgfCBEU1RfOEJQUCB8CisJCQlCWVRFX09SREVSX0xTQl9UT19NU0I7CiAJCWRwX2NoYWluX21hc2sgPSBEUF9DSEFJTl8yNEJQUDsKIAl9IGVsc2UgaWYgKGJwcCA8PSAzMikgewogCQlicHAgPSAzMjsKIAkJcGl4X3dpZHRoID0gQ1JUQ19QSVhfV0lEVEhfMzJCUFA7CiAJCWRwX3BpeF93aWR0aCA9IEhPU1RfMzJCUFAgfCBTUkNfMzJCUFAgfCBEU1RfMzJCUFAgfAotCQkgICAgQllURV9PUkRFUl9MU0JfVE9fTVNCOworCQkJQllURV9PUkRFUl9MU0JfVE9fTVNCOwogCQlkcF9jaGFpbl9tYXNrID0gRFBfQ0hBSU5fMzJCUFA7CiAJfSBlbHNlCiAJCUZBSUwoImludmFsaWQgYnBwIik7CkBAIC04NTQsOSArODY1LDkgQEAKIAloX3N5bmNfcG9sID0gc3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUID8gMCA6IDE7CiAJdl9zeW5jX3BvbCA9IHN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgPyAwIDogMTsKIAotCWlmKCh4cmVzID4gMTYwMCkgfHwgKHlyZXMgPiAxMjAwKSkgeworCWlmICgoeHJlcyA+IDE2MDApIHx8ICh5cmVzID4gMTIwMCkpIHsKIAkJRkFJTCgiTUFDSDY0IGNoaXBzIGFyZSBkZXNpZ25lZCBmb3IgbWF4IDE2MDB4MTIwMFxuIgotCQkic2VsZWN0IGFub3RlciByZXNvbHV0aW9uLiIpOworCQkgICAgICJzZWxlY3QgYW5vdGVyIHJlc29sdXRpb24uIik7CiAJfQogCWhfc3luY19zdHJ0ID0gaF9kaXNwICsgdmFyLT5yaWdodF9tYXJnaW47CiAJaF9zeW5jX2VuZCA9IGhfc3luY19zdHJ0ICsgdmFyLT5oc3luY19sZW47CkBAIC04NjksMTEgKzg4MCwxMiBAQAogCiAjaWZkZWYgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRAogCWlmIChwYXItPmxjZF90YWJsZSAhPSAwKSB7Ci0JCWlmKCFNNjRfSEFTKExUX0xDRF9SRUdTKSkgewotCQkgICAgdTMyIGxjZF9pbmRleCA9IGF0eV9sZF9sZTMyKExDRF9JTkRFWCwgcGFyKTsKLQkJICAgIGNydGMtPmxjZF9pbmRleCA9IGxjZF9pbmRleCAmCi0JCQl+KExDRF9JTkRFWF9NQVNLIHwgTENEX0RJU1BMQVlfRElTIHwgTENEX1NSQ19TRUwgfCBDUlRDMl9ESVNQTEFZX0RJUyk7Ci0JCSAgICBhdHlfc3RfbGUzMihMQ0RfSU5ERVgsIGxjZF9pbmRleCwgcGFyKTsKKwkJaWYgKCFNNjRfSEFTKExUX0xDRF9SRUdTKSkgeworCQkJdTMyIGxjZF9pbmRleCA9IGF0eV9sZF9sZTMyKExDRF9JTkRFWCwgcGFyKTsKKwkJCWNydGMtPmxjZF9pbmRleCA9IGxjZF9pbmRleCAmCisJCQkJfihMQ0RfSU5ERVhfTUFTSyB8IExDRF9ESVNQTEFZX0RJUyB8CisJCQkJICBMQ0RfU1JDX1NFTCB8IENSVEMyX0RJU1BMQVlfRElTKTsKKwkJCWF0eV9zdF9sZTMyKExDRF9JTkRFWCwgbGNkX2luZGV4LCBwYXIpOwogCQl9CiAKIAkJaWYgKCFNNjRfSEFTKE1PQklMX0JVUykpCkBAIC04ODgsMTIgKzkwMCwxNCBAQAogCQkJVVNFX1NIQURPV0VEX1JPV0NVUiB8IFNIQURPV19FTiB8IFNIQURPV19SV19FTik7CiAJCWNydGMtPmxjZF9nZW5fY250bCB8PSBET05UX1NIQURPV19WUEFSIHwgTE9DS184RE9UOwogCi0JCWlmKChjcnRjLT5sY2RfZ2VuX2NudGwgJiBMQ0RfT04pICYmCi0JCQkoKHhyZXMgPiBwYXItPmxjZF93aWR0aCkgfHwgKHlyZXMgPiBwYXItPmxjZF9oZWlnaHQpKSkgewotCQkJLyogV2UgY2Fubm90IGRpc3BsYXkgdGhlIG1vZGUgb24gdGhlIExDRC4gSWYgdGhlIENSVCBpcyBlbmFibGVkCi0JCQkgICB3ZSBjYW4gdHVybiBvZmYgdGhlIExDRC4KLQkJCSAgIElmIHRoZSBDUlQgaXMgb2ZmLCBpdCBpc24ndCBhIGdvb2QgaWRlYSB0byBzd2l0Y2ggaXQgb247IHdlIGRvbid0Ci0JCQkgICBrbm93IGlmIG9uZSBpcyBjb25uZWN0ZWQuIFNvIGl0J3MgYmV0dGVyIHRvIGZhaWwgdGhlbi4KKwkJaWYgKChjcnRjLT5sY2RfZ2VuX2NudGwgJiBMQ0RfT04pICYmCisJCSAgICAoKHhyZXMgPiBwYXItPmxjZF93aWR0aCkgfHwgKHlyZXMgPiBwYXItPmxjZF9oZWlnaHQpKSkgeworCQkJLyoKKwkJCSAqIFdlIGNhbm5vdCBkaXNwbGF5IHRoZSBtb2RlIG9uIHRoZSBMQ0QuIElmIHRoZSBDUlQgaXMKKwkJCSAqIGVuYWJsZWQgd2UgY2FuIHR1cm4gb2ZmIHRoZSBMQ0QuCisJCQkgKiBJZiB0aGUgQ1JUIGlzIG9mZiwgaXQgaXNuJ3QgYSBnb29kIGlkZWEgdG8gc3dpdGNoIGl0CisJCQkgKiBvbjsgd2UgZG9uJ3Qga25vdyBpZiBvbmUgaXMgY29ubmVjdGVkLiBTbyBpdCdzIGJldHRlcgorCQkJICogdG8gZmFpbCB0aGVuLgogCQkJICovCiAJCQlpZiAoY3J0Yy0+bGNkX2dlbl9jbnRsICYgQ1JUX09OKSB7CiAJCQkJaWYgKCEodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX1RFU1QpKQpAQCAtOTE2LDE3ICs5MzAsMTggQEAKIAogCQl2bW9kZSAmPSB+KEZCX1ZNT0RFX0RPVUJMRSB8IEZCX1ZNT0RFX0lOVEVSTEFDRUQpOwogCi0JCS8qIFRoaXMgaXMgaG9ycm9yISBXaGVuIHdlIHNpbXVsYXRlLCBzYXkgNjQweDQ4MCBvbiBhbiA4MDB4NjAwCi0JCSAgIExDRCBtb25pdG9yLCB0aGUgQ1JUQyBzaG91bGQgYmUgcHJvZ3JhbW1lZCA4MDB4NjAwIHZhbHVlcyBmb3IKLQkJICAgdGhlIG5vbiB2aXNpYmxlIHBhcnQsIGJ1dCA2NDB4NDgwIGZvciB0aGUgdmlzaWJsZSBwYXJ0LgotCQkgICBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIG9uIGEgbGFwdG9wIHdpdGggaXQncyAxNDAweDEwNTAgTENECi0JCSAgIG1vbml0b3IgYW5kIGEgY29udmVudGlvbmFsIG1vbml0b3IgYm90aCBzd2l0Y2hlZCBvbi4KLQkJICAgVGVzdGVkIG1vZGVzOiAxMjgweDEwMjQsIDExNTJ4ODY0LCAxMDI0eDc2OCwgODAweDYwMCwKLQkJICAgIHdvcmtzIHdpdGggbGl0dGxlIGdsaXRjaGVzIGFsc28gd2l0aCBET1VCTEVTQ0FOIG1vZGVzCisJCS8qCisJCSAqIFRoaXMgaXMgaG9ycm9yISBXaGVuIHdlIHNpbXVsYXRlLCBzYXkgNjQweDQ4MCBvbiBhbiA4MDB4NjAwCisJCSAqIExDRCBtb25pdG9yLCB0aGUgQ1JUQyBzaG91bGQgYmUgcHJvZ3JhbW1lZCA4MDB4NjAwIHZhbHVlcyBmb3IKKwkJICogdGhlIG5vbiB2aXNpYmxlIHBhcnQsIGJ1dCA2NDB4NDgwIGZvciB0aGUgdmlzaWJsZSBwYXJ0LgorCQkgKiBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIG9uIGEgbGFwdG9wIHdpdGggaXQncyAxNDAweDEwNTAgTENECisJCSAqIG1vbml0b3IgYW5kIGEgY29udmVudGlvbmFsIG1vbml0b3IgYm90aCBzd2l0Y2hlZCBvbi4KKwkJICogVGVzdGVkIG1vZGVzOiAxMjgweDEwMjQsIDExNTJ4ODY0LCAxMDI0eDc2OCwgODAweDYwMCwKKwkJICogd29ya3Mgd2l0aCBsaXR0bGUgZ2xpdGNoZXMgYWxzbyB3aXRoIERPVUJMRVNDQU4gbW9kZXMKIAkJICovCiAJCWlmICh5cmVzIDwgcGFyLT5sY2RfaGVpZ2h0KSB7CiAJCQlWU2NhbiA9IHBhci0+bGNkX2hlaWdodCAvIHlyZXM7Ci0JCQlpZihWU2NhbiA+IDEpIHsKKwkJCWlmIChWU2NhbiA+IDEpIHsKIAkJCQlWU2NhbiA9IDI7CiAJCQkJdm1vZGUgfD0gRkJfVk1PREVfRE9VQkxFOwogCQkJfQpAQCAtOTUyLDcgKzk2Nyw3IEBACiAJRkFJTF9NQVgoImhfZGlzcCB0b28gbGFyZ2UiLCBoX2Rpc3AsIDB4ZmYpOwogCUZBSUxfTUFYKCJoX3N5bmNfc3RydCB0b28gbGFyZ2UiLCBoX3N5bmNfc3RydCwgMHgxZmYpOwogCS8qRkFJTF9NQVgoImhfc3luY193aWQgdG9vIGxhcmdlIiwgaF9zeW5jX3dpZCwgMHgxZik7Ki8KLQlpZihoX3N5bmNfd2lkID4gMHgxZikKKwlpZiAoaF9zeW5jX3dpZCA+IDB4MWYpCiAJCWhfc3luY193aWQgPSAweDFmOwogCUZBSUxfTUFYKCJoX3RvdGFsIHRvbyBsYXJnZSIsIGhfdG90YWwsIDB4MWZmKTsKIApAQCAtOTc4LDcgKzk5Myw3IEBACiAJRkFJTF9NQVgoInZfZGlzcCB0b28gbGFyZ2UiLCB2X2Rpc3AsIDB4N2ZmKTsKIAlGQUlMX01BWCgidl9zeW5jX3N0c3J0IHRvbyBsYXJnZSIsIHZfc3luY19zdHJ0LCAweDdmZik7CiAJLypGQUlMX01BWCgidl9zeW5jX3dpZCB0b28gbGFyZ2UiLCB2X3N5bmNfd2lkLCAweDFmKTsqLwotCWlmKHZfc3luY193aWQgPiAweDFmKQorCWlmICh2X3N5bmNfd2lkID4gMHgxZikKIAkJdl9zeW5jX3dpZCA9IDB4MWY7CiAJRkFJTF9NQVgoInZfdG90YWwgdG9vIGxhcmdlIiwgdl90b3RhbCwgMHg3ZmYpOwogCkBAIC05OTUsMTEgKzEwMTAsMTMgQEAKIAkJKChsaW5lX2xlbmd0aCAvIGJwcCkgPDwgMjIpOwogCWNydGMtPnZsaW5lX2NybnRfdmxpbmUgPSAwOwogCi0JY3J0Yy0+aF90b3RfZGlzcCA9IGhfdG90YWwgfCAoaF9kaXNwPDwxNik7Ci0JY3J0Yy0+aF9zeW5jX3N0cnRfd2lkID0gKGhfc3luY19zdHJ0ICYgMHhmZikgfCAoaF9zeW5jX2RseTw8OCkgfAotCQkoKGhfc3luY19zdHJ0ICYgMHgxMDApPDw0KSB8IChoX3N5bmNfd2lkPDwxNikgfCAoaF9zeW5jX3BvbDw8MjEpOwotCWNydGMtPnZfdG90X2Rpc3AgPSB2X3RvdGFsIHwgKHZfZGlzcDw8MTYpOwotCWNydGMtPnZfc3luY19zdHJ0X3dpZCA9IHZfc3luY19zdHJ0IHwgKHZfc3luY193aWQ8PDE2KSB8ICh2X3N5bmNfcG9sPDwyMSk7CisJY3J0Yy0+aF90b3RfZGlzcCA9IGhfdG90YWwgfCAoaF9kaXNwIDw8IDE2KTsKKwljcnRjLT5oX3N5bmNfc3RydF93aWQgPSAoaF9zeW5jX3N0cnQgJiAweGZmKSB8IChoX3N5bmNfZGx5IDw8IDgpIHwKKwkJKChoX3N5bmNfc3RydCAmIDB4MTAwKSA8PCA0KSB8IChoX3N5bmNfd2lkIDw8IDE2KSB8CisJCShoX3N5bmNfcG9sIDw8IDIxKTsKKwljcnRjLT52X3RvdF9kaXNwID0gdl90b3RhbCB8ICh2X2Rpc3AgPDwgMTYpOworCWNydGMtPnZfc3luY19zdHJ0X3dpZCA9IHZfc3luY19zdHJ0IHwgKHZfc3luY193aWQgPDwgMTYpIHwKKwkJKHZfc3luY19wb2wgPDwgMjEpOwogCiAJLyogY3J0Yy0+Z2VuX2NudGwgPSBhdHlfbGRfbGUzMihDUlRDX0dFTl9DTlRMLCBwYXIpICYgQ1JUQ19QUkVTRVJWRURfTUFTSzsgKi8KIAljcnRjLT5nZW5fY250bCA9IENSVENfRVhUX0RJU1BfRU4gfCBDUlRDX0VOIHwgcGl4X3dpZHRoIHwgY19zeW5jOwpAQCAtMTAxNCwxMyArMTAzMSwxNSBAQAogI2lmZGVmIENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QKIAlpZiAocGFyLT5sY2RfdGFibGUgIT0gMCkgewogCQl2ZGlzcGxheSA9IHlyZXM7Ci0JCWlmKHZtb2RlICYgRkJfVk1PREVfRE9VQkxFKQorCQlpZiAodm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpCiAJCQl2ZGlzcGxheSA8PD0gMTsKIAkJY3J0Yy0+Z2VuX2NudGwgJj0gfihDUlRDMl9FTiB8IENSVEMyX1BJWF9XSURUSCk7CiAJCWNydGMtPmxjZF9nZW5fY250bCAmPSB+KEhPUlpfRElWQlkyX0VOIHwgRElTX0hPUl9DUlRfRElWQlkyIHwKLQkJCS8qVFZDTEtfUE1fRU4gfCBWQ0xLX0RBQ19QTV9FTiB8Ki8KLQkJCVVTRV9TSEFET1dFRF9WRU5EIHwgVVNFX1NIQURPV0VEX1JPV0NVUiB8IFNIQURPV19FTiB8IFNIQURPV19SV19FTik7Ci0JCWNydGMtPmxjZF9nZW5fY250bCB8PSAoRE9OVF9TSEFET1dfVlBBUi8qIHwgTE9DS184RE9UKi8pOworCQkJCQkvKlRWQ0xLX1BNX0VOIHwgVkNMS19EQUNfUE1fRU4gfCovCisJCQkJCVVTRV9TSEFET1dFRF9WRU5EIHwKKwkJCQkJVVNFX1NIQURPV0VEX1JPV0NVUiB8CisJCQkJCVNIQURPV19FTiB8IFNIQURPV19SV19FTik7CisJCWNydGMtPmxjZF9nZW5fY250bCB8PSBET05UX1NIQURPV19WUEFSLyogfCBMT0NLXzhET1QqLzsKIAogCQkvKiBNT0JJTElUWSBNMSB0ZXN0ZWQsIEZJWE1FOiBMVCAqLwogCQljcnRjLT5ob3J6X3N0cmV0Y2hpbmcgPSBhdHlfbGRfbGNkKEhPUlpfU1RSRVRDSElORywgcGFyKTsKQEAgLTEwMjgsMjggKzEwNDcsMzIgQEAKIAkJCWNydGMtPmV4dF92ZXJ0X3N0cmV0Y2ggPSBhdHlfbGRfbGNkKEVYVF9WRVJUX1NUUkVUQ0gsIHBhcikgJgogCQkJCX4oQVVUT19WRVJUX1JBVElPIHwgVkVSVF9TVFJFVENIX01PREUgfCBWRVJUX1NUUkVUQ0hfUkFUSU8zKTsKIAotCQljcnRjLT5ob3J6X3N0cmV0Y2hpbmcgJj0KLQkJCX4oSE9SWl9TVFJFVENIX1JBVElPIHwgSE9SWl9TVFJFVENIX0xPT1AgfCBBVVRPX0hPUlpfUkFUSU8gfAotCQkJSE9SWl9TVFJFVENIX01PREUgfCBIT1JaX1NUUkVUQ0hfRU4pOworCQljcnRjLT5ob3J6X3N0cmV0Y2hpbmcgJj0gfihIT1JaX1NUUkVUQ0hfUkFUSU8gfAorCQkJCQkgICBIT1JaX1NUUkVUQ0hfTE9PUCB8IEFVVE9fSE9SWl9SQVRJTyB8CisJCQkJCSAgIEhPUlpfU1RSRVRDSF9NT0RFIHwgSE9SWl9TVFJFVENIX0VOKTsKIAkJaWYgKHhyZXMgPCBwYXItPmxjZF93aWR0aCAmJiBjcnRjLT5sY2RfZ2VuX2NudGwgJiBMQ0RfT04pIHsKIAkJCWRvIHsKIAkJCQkvKgotCQkJCSogVGhlIGhvcml6b250YWwgYmxlbmRlciBtaXNiZWhhdmVzIHdoZW4gSERpc3BsYXkgaXMgbGVzcyB0aGFuIGEKLQkJCQkqIGEgY2VydGFpbiB0aHJlc2hvbGQgKDQ0MCBmb3IgYSAxMDI0LXdpZGUgcGFuZWwpLiAgSXQgZG9lc24ndAotCQkJCSogc3RyZXRjaCBzdWNoIG1vZGVzIGVub3VnaC4gIFVzZSBwaXhlbCByZXBsaWNhdGlvbiBpbnN0ZWFkIG9mCi0JCQkJKiBibGVuZGluZyB0byBzdHJldGNoIG1vZGVzIHRoYXQgY2FuIGJlIG1hZGUgdG8gZXhhY3RseSBmaXQgdGhlCi0JCQkJKiBwYW5lbCB3aWR0aC4gIFRoZSB1bmRvY3VtZW50ZWQgIk5vTENEQmxlbmQiIG9wdGlvbiBhbGxvd3MgdGhlCi0JCQkJKiBwaXhlbC1yZXBsaWNhdGVkIG1vZGUgdG8gYmUgc2xpZ2h0bHkgd2lkZXIgb3IgbmFycm93ZXIgdGhhbiB0aGUKLQkJCQkqIHBhbmVsIHdpZHRoLiAgSXQgYWxzbyBjYXVzZXMgYSBtb2RlIHRoYXQgaXMgZXhhY3RseSBoYWxmIGFzIHdpZGUKLQkJCQkqIGFzIHRoZSBwYW5lbCB0byBiZSBwaXhlbC1yZXBsaWNhdGVkLCByYXRoZXIgdGhhbiBibGVuZGVkLgotCQkJCSovCisJCQkJICogVGhlIGhvcml6b250YWwgYmxlbmRlciBtaXNiZWhhdmVzIHdoZW4KKwkJCQkgKiBIRGlzcGxheSBpcyBsZXNzIHRoYW4gYSBjZXJ0YWluIHRocmVzaG9sZAorCQkJCSAqICg0NDAgZm9yIGEgMTAyNC13aWRlIHBhbmVsKS4gIEl0IGRvZXNuJ3QKKwkJCQkgKiBzdHJldGNoIHN1Y2ggbW9kZXMgZW5vdWdoLiAgVXNlIHBpeGVsCisJCQkJICogcmVwbGljYXRpb24gaW5zdGVhZCBvZiBibGVuZGluZyB0byBzdHJldGNoCisJCQkJICogbW9kZXMgdGhhdCBjYW4gYmUgbWFkZSB0byBleGFjdGx5IGZpdCB0aGUKKwkJCQkgKiBwYW5lbCB3aWR0aC4gIFRoZSB1bmRvY3VtZW50ZWQgIk5vTENEQmxlbmQiCisJCQkJICogb3B0aW9uIGFsbG93cyB0aGUgcGl4ZWwtcmVwbGljYXRlZCBtb2RlIHRvCisJCQkJICogYmUgc2xpZ2h0bHkgd2lkZXIgb3IgbmFycm93ZXIgdGhhbiB0aGUKKwkJCQkgKiBwYW5lbCB3aWR0aC4gIEl0IGFsc28gY2F1c2VzIGEgbW9kZSB0aGF0IGlzCisJCQkJICogZXhhY3RseSBoYWxmIGFzIHdpZGUgYXMgdGhlIHBhbmVsIHRvIGJlCisJCQkJICogcGl4ZWwtcmVwbGljYXRlZCwgcmF0aGVyIHRoYW4gYmxlbmRlZC4KKwkJCQkgKi8KIAkJCQlpbnQgSERpc3BsYXkgID0geHJlcyAmIH43OwogCQkJCWludCBuU3RyZXRjaCAgPSBwYXItPmxjZF93aWR0aCAvIEhEaXNwbGF5OwogCQkJCWludCBSZW1haW5kZXIgPSBwYXItPmxjZF93aWR0aCAlIEhEaXNwbGF5OwogCiAJCQkJaWYgKCghUmVtYWluZGVyICYmICgoblN0cmV0Y2ggPiAyKSkpIHx8Ci0JCQkJCSgoKEhEaXNwbGF5ICogMTYpIC8gcGFyLT5sY2Rfd2lkdGgpIDwgNykpIHsKLQkJCQkJc3RhdGljIGNvbnN0IGNoYXIgU3RyZXRjaExvb3BzW10gPSB7MTAsIDEyLCAxMywgMTUsIDE2fTsKKwkJCQkgICAgKCgoSERpc3BsYXkgKiAxNikgLyBwYXItPmxjZF93aWR0aCkgPCA3KSkgeworCQkJCQlzdGF0aWMgY29uc3QgY2hhciBTdHJldGNoTG9vcHNbXSA9IHsgMTAsIDEyLCAxMywgMTUsIDE2IH07CiAJCQkJCWludCBob3J6X3N0cmV0Y2hfbG9vcCA9IC0xLCBCZXN0UmVtYWluZGVyOwogCQkJCQlpbnQgTnVtZXJhdG9yID0gSERpc3BsYXksIERlbm9taW5hdG9yID0gcGFyLT5sY2Rfd2lkdGg7CiAJCQkJCWludCBJbmRleCA9IDU7CkBAIC0xMDk4LDEyICsxMTIxLDEyIEBACiAJCQkJKCgodmRpc3BsYXkgKiAoVkVSVF9TVFJFVENIX1JBVElPMCArIDEpKSAvIHBhci0+bGNkX2hlaWdodCkgJiBWRVJUX1NUUkVUQ0hfUkFUSU8wKSk7CiAKIAkJCWlmICghTTY0X0hBUyhMVF9MQ0RfUkVHUykgJiYKLQkJCSAgICB4cmVzIDw9IChNNjRfSEFTKE1PQklMX0JVUyk/MTAyNDo4MDApKQorCQkJICAgIHhyZXMgPD0gKE02NF9IQVMoTU9CSUxfQlVTKSA/IDEwMjQgOiA4MDApKQogCQkJCWNydGMtPmV4dF92ZXJ0X3N0cmV0Y2ggfD0gVkVSVF9TVFJFVENIX01PREU7CiAJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogRG9uJ3QgdXNlIHZlcnRpY2FsIGJsZW5kaW5nIGlmIHRoZSBtb2RlIGlzIHRvbyB3aWRlIG9yIG5vdAotCQkJICogdmVydGljYWxseSBzdHJldGNoZWQuCisJCQkgKiBEb24ndCB1c2UgdmVydGljYWwgYmxlbmRpbmcgaWYgdGhlIG1vZGUgaXMgdG9vIHdpZGUKKwkJCSAqIG9yIG5vdCB2ZXJ0aWNhbGx5IHN0cmV0Y2hlZC4KIAkJCSAqLwogCQkJY3J0Yy0+dmVydF9zdHJldGNoaW5nID0gMDsKIAkJfQpAQCAtMTEyNSwxMSArMTE0OCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0eV9jcnRjX3RvX3Zhcihjb25zdCBzdHJ1Y3QgY3J0YyAqY3J0Yywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCitzdGF0aWMgaW50IGF0eV9jcnRjX3RvX3Zhcihjb25zdCBzdHJ1Y3QgY3J0YyAqY3J0YywKKwkJCSAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQogewogCXUzMiB4cmVzLCB5cmVzLCBicHAsIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwgc3luYzsKLQl1MzIgaF90b3RhbCwgaF9kaXNwLCBoX3N5bmNfc3RydCwgaF9zeW5jX2RseSwgaF9zeW5jX3dpZCwKLQkgICAgaF9zeW5jX3BvbDsKKwl1MzIgaF90b3RhbCwgaF9kaXNwLCBoX3N5bmNfc3RydCwgaF9zeW5jX2RseSwgaF9zeW5jX3dpZCwgaF9zeW5jX3BvbDsKIAl1MzIgdl90b3RhbCwgdl9kaXNwLCB2X3N5bmNfc3RydCwgdl9zeW5jX3dpZCwgdl9zeW5jX3BvbCwgY19zeW5jOwogCXUzMiBwaXhfd2lkdGg7CiAJdTMyIGRvdWJsZV9zY2FuLCBpbnRlcmxhY2U7CkBAIC0xMTYxLDggKzExODQsOCBAQAogCWxvd2VyID0gdl9zeW5jX3N0cnQgLSB2X2Rpc3A7CiAJdnNsZW4gPSB2X3N5bmNfd2lkOwogCXN5bmMgPSAoaF9zeW5jX3BvbCA/IDAgOiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkgfAotCSAgICAodl9zeW5jX3BvbCA/IDAgOiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpIHwKLQkgICAgKGNfc3luYyA/IEZCX1NZTkNfQ09NUF9ISUdIX0FDVCA6IDApOworCQkodl9zeW5jX3BvbCA/IDAgOiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpIHwKKwkJKGNfc3luYyA/IEZCX1NZTkNfQ09NUF9ISUdIX0FDVCA6IDApOwogCiAJc3dpdGNoIChwaXhfd2lkdGgpIHsKICNpZiAwCkBAIC0xMjUyLDIwICsxMjc1LDIxIEBACiAJdmFyLT52c3luY19sZW4gPSB2c2xlbjsKIAl2YXItPnN5bmMgPSBzeW5jOwogCXZhci0+dm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOwotCS8qIEluIGRvdWJsZSBzY2FuIG1vZGUsIHRoZSB2ZXJ0aWNhbCBwYXJhbWV0ZXJzIGFyZSBkb3VibGVkLCBzbyB3ZSBuZWVkIHRvCi0JICAgaGFsZiB0aGVtIHRvIGdldCB0aGUgcmlnaHQgdmFsdWVzLgotCSAgIEluIGludGVybGFjZWQgbW9kZSB0aGUgdmFsdWVzIGFyZSBhbHJlYWR5IGNvcnJlY3QsIHNvIG5vIGNvcnJlY3Rpb24gaXMKLQkgICBuZWNlc3NhcnkuCisJLyoKKwkgKiBJbiBkb3VibGUgc2NhbiBtb2RlLCB0aGUgdmVydGljYWwgcGFyYW1ldGVycyBhcmUgZG91YmxlZCwKKwkgKiBzbyB3ZSBuZWVkIHRvIGhhbHZlIHRoZW0gdG8gZ2V0IHRoZSByaWdodCB2YWx1ZXMuCisJICogSW4gaW50ZXJsYWNlZCBtb2RlIHRoZSB2YWx1ZXMgYXJlIGFscmVhZHkgY29ycmVjdCwKKwkgKiBzbyBubyBjb3JyZWN0aW9uIGlzIG5lY2Vzc2FyeS4KIAkgKi8KIAlpZiAoaW50ZXJsYWNlKQogCQl2YXItPnZtb2RlID0gRkJfVk1PREVfSU5URVJMQUNFRDsKIAogCWlmIChkb3VibGVfc2NhbikgewogCQl2YXItPnZtb2RlID0gRkJfVk1PREVfRE9VQkxFOwotCQl2YXItPnlyZXM+Pj0xOwotCQl2YXItPnVwcGVyX21hcmdpbj4+PTE7Ci0JCXZhci0+bG93ZXJfbWFyZ2luPj49MTsKLQkJdmFyLT52c3luY19sZW4+Pj0xOworCQl2YXItPnlyZXMgPj49IDE7CisJCXZhci0+dXBwZXJfbWFyZ2luID4+PSAxOworCQl2YXItPmxvd2VyX21hcmdpbiA+Pj0gMTsKKwkJdmFyLT52c3luY19sZW4gPj49IDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMjg2LDcgKzEzMTAsOCBAQAogCWlmIChwYXItPmFzbGVlcCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKGVyciA9IGF0eV92YXJfdG9fY3J0YyhpbmZvLCB2YXIsICZwYXItPmNydGMpKSkKKwllcnIgPSBhdHlfdmFyX3RvX2NydGMoaW5mbywgdmFyLCAmcGFyLT5jcnRjKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJcGl4Y2xvY2sgPSBhdHlmYl9nZXRfcGl4Y2xvY2sodmFyLCBwYXIpOwpAQCAtMTI5NSw3ICsxMzIwLDkgQEAKIAkJUFJJTlRLRSgiSW52YWxpZCBwaXhjbG9ja1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSB7Ci0JCWlmKChlcnIgPSBwYXItPnBsbF9vcHMtPnZhcl90b19wbGwoaW5mbywgcGl4Y2xvY2ssIHZhci0+Yml0c19wZXJfcGl4ZWwsICZwYXItPnBsbCkpKQorCQllcnIgPSBwYXItPnBsbF9vcHMtPnZhcl90b19wbGwoaW5mbywgcGl4Y2xvY2ssCisJCQkJCSAgICAgICB2YXItPmJpdHNfcGVyX3BpeGVsLCAmcGFyLT5wbGwpOworCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTEzMTMsMjIgKzEzNDAsMjMgQEAKIAkJd2FpdF9mb3JfaWRsZShwYXIpOwogCiAJYXR5X3NldF9jcnRjKHBhciwgJnBhci0+Y3J0Yyk7Ci0JcGFyLT5kYWNfb3BzLT5zZXRfZGFjKGluZm8sICZwYXItPnBsbCwgdmFyLT5iaXRzX3Blcl9waXhlbCwgcGFyLT5hY2NlbF9mbGFncyk7CisJcGFyLT5kYWNfb3BzLT5zZXRfZGFjKGluZm8sICZwYXItPnBsbCwKKwkJCSAgICAgIHZhci0+Yml0c19wZXJfcGl4ZWwsIHBhci0+YWNjZWxfZmxhZ3MpOwogCXBhci0+cGxsX29wcy0+c2V0X3BsbChpbmZvLCAmcGFyLT5wbGwpOwogCiAjaWZkZWYgREVCVUcKLQlpZihwYXItPnBsbF9vcHMgJiYgcGFyLT5wbGxfb3BzLT5wbGxfdG9fdmFyKQotCQlwaXhjbG9ja19pbl9wcyA9IHBhci0+cGxsX29wcy0+cGxsX3RvX3ZhcihpbmZvLCAmKHBhci0+cGxsKSk7CisJaWYgKHBhci0+cGxsX29wcyAmJiBwYXItPnBsbF9vcHMtPnBsbF90b192YXIpCisJCXBpeGNsb2NrX2luX3BzID0gcGFyLT5wbGxfb3BzLT5wbGxfdG9fdmFyKGluZm8sICZwYXItPnBsbCk7CiAJZWxzZQogCQlwaXhjbG9ja19pbl9wcyA9IDA7CiAKLQlpZigwID09IHBpeGNsb2NrX2luX3BzKSB7CisJaWYgKDAgPT0gcGl4Y2xvY2tfaW5fcHMpIHsKIAkJUFJJTlRLRSgiQUxFUlQgb3BzLT5wbGxfdG9fdmFyIGdldCAwXG4iKTsKIAkJcGl4Y2xvY2tfaW5fcHMgPSBwaXhjbG9jazsKIAl9CiAKIAltZW1zZXQoJmRlYnVnLCAwLCBzaXplb2YoZGVidWcpKTsKLQlpZighYXR5X2NydGNfdG9fdmFyKCYocGFyLT5jcnRjKSwgJmRlYnVnKSkgeworCWlmICghYXR5X2NydGNfdG9fdmFyKCZwYXItPmNydGMsICZkZWJ1ZykpIHsKIAkJdTMyIGhTeW5jLCB2UmVmcmVzaDsKIAkJdTMyIGhfZGlzcCwgaF9zeW5jX3N0cnQsIGhfc3luY19lbmQsIGhfdG90YWw7CiAJCXUzMiB2X2Rpc3AsIHZfc3luY19zdHJ0LCB2X3N5bmNfZW5kLCB2X3RvdGFsOwpAQCAtMTM0NCwxNiArMTM3MiwyMCBAQAogCiAJCWhTeW5jID0gMTAwMDAwMDAwMCAvIChwaXhjbG9ja19pbl9wcyAqIGhfdG90YWwpOwogCQl2UmVmcmVzaCA9IChoU3luYyAqIDEwMDApIC8gdl90b3RhbDsKLSAgICAgICAgCWlmIChwYXItPmNydGMuZ2VuX2NudGwgJiBDUlRDX0lOVEVSTEFDRV9FTikKLSAgICAgICAgICAgIAl2UmVmcmVzaCAqPSAyOwotICAgICAgICAJaWYgKHBhci0+Y3J0Yy5nZW5fY250bCAmIENSVENfREJMX1NDQU5fRU4pCi0gICAgICAgICAgICAJdlJlZnJlc2ggLz0gMjsKKwkJaWYgKHBhci0+Y3J0Yy5nZW5fY250bCAmIENSVENfSU5URVJMQUNFX0VOKQorCQkJdlJlZnJlc2ggKj0gMjsKKwkJaWYgKHBhci0+Y3J0Yy5nZW5fY250bCAmIENSVENfREJMX1NDQU5fRU4pCisJCQl2UmVmcmVzaCAvPSAyOwogCiAJCURQUklOVEsoImF0eWZiX3NldF9wYXJcbiIpOwotCQlEUFJJTlRLKCIgU2V0IFZpc2libGUgTW9kZSB0byAlaXglaS0laVxuIiwgdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwotCQlEUFJJTlRLKCIgVmlydHVhbCByZXNvbHV0aW9uICVpeCVpLCBwaXhjbG9ja19pbl9wcyAlaSAoY2FsY3VsYXRlZCAlaSlcbiIsCi0JCQl2YXItPnhyZXNfdmlydHVhbCwgdmFyLT55cmVzX3ZpcnR1YWwsIHBpeGNsb2NrLCBwaXhjbG9ja19pbl9wcyk7Ci0JCURQUklOVEsoIiBEb3QgY2xvY2s6ICAgICAgICAgICAlaSBNSHpcbiIsIDEwMDAwMDAgLyBwaXhjbG9ja19pbl9wcyk7CisJCURQUklOVEsoIiBTZXQgVmlzaWJsZSBNb2RlIHRvICVpeCVpLSVpXG4iLAorCQkJdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlEUFJJTlRLKCIgVmlydHVhbCByZXNvbHV0aW9uICVpeCVpLCAiCisJCQkicGl4Y2xvY2tfaW5fcHMgJWkgKGNhbGN1bGF0ZWQgJWkpXG4iLAorCQkJdmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eXJlc192aXJ0dWFsLAorCQkJcGl4Y2xvY2ssIHBpeGNsb2NrX2luX3BzKTsKKwkJRFBSSU5USygiIERvdCBjbG9jazogICAgICAgICAgICVpIE1IelxuIiwKKwkJCTEwMDAwMDAgLyBwaXhjbG9ja19pbl9wcyk7CiAJCURQUklOVEsoIiBIb3Jpem9udGFsIHN5bmM6ICAgICAlaSBrSHpcbiIsIGhTeW5jKTsKIAkJRFBSSU5USygiIFZlcnRpY2FsIHJlZnJlc2g6ICAgICVpIEh6XG4iLCB2UmVmcmVzaCk7CiAJCURQUklOVEsoIiB4ICBzdHlsZTogJWkuJTAzaSAlaSAlaSAlaSAlaSAgICVpICVpICVpICVpXG4iLApAQCAtMTQ0OCw3ICsxNDgwLDggQEAKIAliYXNlID0gMHgyMDAwOwogCXByaW50aygiZGVidWcgYXR5ZmI6IE1hY2g2NCBub24tc2hhZG93IHJlZ2lzdGVyIHZhbHVlczoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpID0gaSs0KSB7Ci0JCWlmKGklMTYgPT0gMCkgcHJpbnRrKCJcbmRlYnVnIGF0eWZiOiAweCUwNFg6ICIsIGJhc2UgKyBpKTsKKwkJaWYgKGkgJSAxNiA9PSAwKQorCQkJcHJpbnRrKCJcbmRlYnVnIGF0eWZiOiAweCUwNFg6ICIsIGJhc2UgKyBpKTsKIAkJcHJpbnRrKCIgJTA4WCIsIGF0eV9sZF9sZTMyKGksIHBhcikpOwogCX0KIAlwcmludGsoIlxuXG4iKTsKQEAgLTE0NTgsOCArMTQ5MSwxMCBAQAogCWJhc2UgPSAweDAwOwogCXByaW50aygiZGVidWcgYXR5ZmI6IE1hY2g2NCBQTEwgcmVnaXN0ZXIgdmFsdWVzOiIpOwogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWlmKGklMTYgPT0gMCkgcHJpbnRrKCJcbmRlYnVnIGF0eWZiOiAweCUwMlg6ICIsIGJhc2UgKyBpKTsKLQkJaWYoaSU0ID09IDApICBwcmludGsoIiAiKTsKKwkJaWYgKGkgJSAxNiA9PSAwKQorCQkJcHJpbnRrKCJcbmRlYnVnIGF0eWZiOiAweCUwMlg6ICIsIGJhc2UgKyBpKTsKKwkJaWYgKGkgJSA0ID09IDApCisJCQlwcmludGsoIiAiKTsKIAkJcHJpbnRrKCIlMDJYIiwgYXR5X2xkX3BsbF9jdChpLCBwYXIpKTsKIAl9CiAJcHJpbnRrKCJcblxuIik7CkBAIC0xNDcwLDE5ICsxNTA1LDIxIEBACiAJCS8qIExDRCByZWdpc3RlcnMgKi8KIAkJYmFzZSA9IDB4MDA7CiAJCXByaW50aygiZGVidWcgYXR5ZmI6IExDRCByZWdpc3RlciB2YWx1ZXM6Iik7Ci0JCWlmKE02NF9IQVMoTFRfTENEX1JFR1MpKSB7Ci0JCSAgICBmb3IoaSA9IDA7IGkgPD0gUE9XRVJfTUFOQUdFTUVOVDsgaSsrKSB7Ci0JCQlpZihpID09IEVYVF9WRVJUX1NUUkVUQ0gpCi0JCQkgICAgY29udGludWU7Ci0JCQlwcmludGsoIlxuZGVidWcgYXR5ZmI6IDB4JTA0WDogIiwgbHRfbGNkX3JlZ3NbaV0pOwotCQkJcHJpbnRrKCIgJTA4WCIsIGF0eV9sZF9sY2QoaSwgcGFyKSk7Ci0JCSAgICB9Ci0KKwkJaWYgKE02NF9IQVMoTFRfTENEX1JFR1MpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDw9IFBPV0VSX01BTkFHRU1FTlQ7IGkrKykgeworCQkJCWlmIChpID09IEVYVF9WRVJUX1NUUkVUQ0gpCisJCQkJCWNvbnRpbnVlOworCQkJCXByaW50aygiXG5kZWJ1ZyBhdHlmYjogMHglMDRYOiAiLAorCQkJCSAgICAgICBsdF9sY2RfcmVnc1tpXSk7CisJCQkJcHJpbnRrKCIgJTA4WCIsIGF0eV9sZF9sY2QoaSwgcGFyKSk7CisJCQl9CiAJCX0gZWxzZSB7Ci0JCSAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQkJaWYoaSU0ID09IDApIHByaW50aygiXG5kZWJ1ZyBhdHlmYjogMHglMDJYOiAiLCBiYXNlICsgaSk7Ci0JCQlwcmludGsoIiAlMDhYIiwgYXR5X2xkX2xjZChpLCBwYXIpKTsKLQkJICAgIH0KKwkJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CisJCQkJaWYgKGkgJSA0ID09IDApCisJCQkJCXByaW50aygiXG5kZWJ1ZyBhdHlmYjogMHglMDJYOiAiLAorCQkJCQkgICAgICAgYmFzZSArIGkpOworCQkJCXByaW50aygiICUwOFgiLCBhdHlfbGRfbGNkKGksIHBhcikpOworCQkJfQogCQl9CiAJCXByaW50aygiXG5cbiIpOwogCX0KQEAgLTE1MDAsOSArMTUzNywxMCBAQAogCXVuaW9uIGF0eV9wbGwgcGxsOwogCXUzMiBwaXhjbG9jazsKIAotCW1lbWNweSgmcGxsLCAmKHBhci0+cGxsKSwgc2l6ZW9mKHBsbCkpOworCW1lbWNweSgmcGxsLCAmcGFyLT5wbGwsIHNpemVvZihwbGwpKTsKIAotCWlmKChlcnIgPSBhdHlfdmFyX3RvX2NydGMoaW5mbywgdmFyLCAmY3J0YykpKQorCWVyciA9IGF0eV92YXJfdG9fY3J0YyhpbmZvLCB2YXIsICZjcnRjKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJcGl4Y2xvY2sgPSBhdHlmYl9nZXRfcGl4Y2xvY2sodmFyLCBwYXIpOwpAQCAtMTUxMiw3ICsxNTUwLDkgQEAKIAkJCVBSSU5US0UoIkludmFsaWQgcGl4Y2xvY2tcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgewotCQlpZigoZXJyID0gcGFyLT5wbGxfb3BzLT52YXJfdG9fcGxsKGluZm8sIHBpeGNsb2NrLCB2YXItPmJpdHNfcGVyX3BpeGVsLCAmcGxsKSkpCisJCWVyciA9IHBhci0+cGxsX29wcy0+dmFyX3RvX3BsbChpbmZvLCBwaXhjbG9jaywKKwkJCQkJICAgICAgIHZhci0+Yml0c19wZXJfcGl4ZWwsICZwbGwpOworCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTE1MzksOSArMTU3OSw5IEBACiB9CiAKIAotICAgIC8qCi0gICAgICogIE9wZW4vUmVsZWFzZSB0aGUgZnJhbWUgYnVmZmVyIGRldmljZQotICAgICAqLworLyoKKyAqIE9wZW4vUmVsZWFzZSB0aGUgZnJhbWUgYnVmZmVyIGRldmljZQorICovCiAKIHN0YXRpYyBpbnQgYXR5ZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7CkBAIC0xNTUzLDcgKzE1OTMsNyBAQAogCQlwYXItPm1tYXBlZCA9IDA7CiAjZW5kaWYKIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGF0eV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMTU2OCw3ICsxNjA4LDggQEAKIAogCWlmIChpbnRfY250bCAmIENSVENfVkJMQU5LX0lOVCkgewogCQkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KLQkJYXR5X3N0X2xlMzIoQ1JUQ19JTlRfQ05UTCwgKGludF9jbnRsICYgQ1JUQ19JTlRfRU5fTUFTSykgfCBDUlRDX1ZCTEFOS19JTlRfQUssIHBhcik7CisJCWF0eV9zdF9sZTMyKENSVENfSU5UX0NOVEwsIChpbnRfY250bCAmIENSVENfSU5UX0VOX01BU0spIHwKKwkJCSAgICBDUlRDX1ZCTEFOS19JTlRfQUssIHBhcik7CiAJCXBhci0+dmJsYW5rLmNvdW50Kys7CiAJCWlmIChwYXItPnZibGFuay5wYW5fZGlzcGxheSkgewogCQkJcGFyLT52YmxhbmsucGFuX2Rpc3BsYXkgPSAwOwpAQCAtMTYwMyw5ICsxNjQ0LDExIEBACiAJCXNwaW5fbG9ja19pcnEoJnBhci0+aW50X2xvY2spOwogCQlpbnRfY250bCA9IGF0eV9sZF9sZTMyKENSVENfSU5UX0NOVEwsIHBhcikgJiBDUlRDX0lOVF9FTl9NQVNLOwogCQlpZiAoIShpbnRfY250bCAmIENSVENfVkJMQU5LX0lOVF9FTikpIHsKLQkJCXByaW50aygiYXR5ZmI6IHNvbWVvbmUgZGlzYWJsZWQgSVJRIFslMDh4XVxuIiwgaW50X2NudGwpOworCQkJcHJpbnRrKCJhdHlmYjogc29tZW9uZSBkaXNhYmxlZCBJUlEgWyUwOHhdXG4iLAorCQkJICAgICAgIGludF9jbnRsKTsKIAkJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHQgKi8KLQkJCWF0eV9zdF9sZTMyKENSVENfSU5UX0NOVEwsIGludF9jbnRsIHwgQ1JUQ19WQkxBTktfSU5UX0VOLCBwYXIgKTsKKwkJCWF0eV9zdF9sZTMyKENSVENfSU5UX0NOVEwsIGludF9jbnRsIHwKKwkJCQkgICAgQ1JUQ19WQkxBTktfSU5UX0VOLCBwYXIpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmcGFyLT5pbnRfbG9jayk7CiAJfQpAQCAtMTYyNSw3ICsxNjY4LDcgQEAKIAkJc3Bpbl9sb2NrX2lycSgmcGFyLT5pbnRfbG9jayk7CiAJCWludF9jbnRsID0gYXR5X2xkX2xlMzIoQ1JUQ19JTlRfQ05UTCwgcGFyKSAmIENSVENfSU5UX0VOX01BU0s7CiAJCS8qIGRpc2FibGUgaW50ZXJydXB0ICovCi0JCWF0eV9zdF9sZTMyKENSVENfSU5UX0NOVEwsIGludF9jbnRsICYgfkNSVENfVkJMQU5LX0lOVF9FTiwgcGFyICk7CisJCWF0eV9zdF9sZTMyKENSVENfSU5UX0NOVEwsIGludF9jbnRsICYgfkNSVENfVkJMQU5LX0lOVF9FTiwgcGFyKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwYXItPmludF9sb2NrKTsKIAkJZnJlZV9pcnEocGFyLT5pcnEsIHBhcik7CiAJfQpAQCAtMTYzNiw1MCArMTY3OSw2MiBAQAogc3RhdGljIGludCBhdHlmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKIAlzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIgPSAoc3RydWN0IGF0eWZiX3BhciAqKSBpbmZvLT5wYXI7Ci0JaWYgKHVzZXIpIHsKLQkJcGFyLT5vcGVuLS07Ci0JCW1kZWxheSgxKTsKLQkJd2FpdF9mb3JfaWRsZShwYXIpOwotCQlpZiAoIXBhci0+b3BlbikgewogI2lmZGVmIF9fc3BhcmNfXwotCQkJaW50IHdhc19tbWFwZWQgPSBwYXItPm1tYXBlZDsKLQotCQkJcGFyLT5tbWFwZWQgPSAwOwotCi0JCQlpZiAod2FzX21tYXBlZCkgewotCQkJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7Ci0KLQkJCQkvKiBOb3cgcmVzZXQgdGhlIGRlZmF1bHQgZGlzcGxheSBjb25maWcsIHdlIGhhdmUgbm8KLQkJCQkgKiBpZGVhIHdoYXQgdGhlIHByb2dyYW0ocykgd2hpY2ggbW1hcCdkIHRoZSBjaGlwIGRpZAotCQkJCSAqIHRvIHRoZSBjb25maWd1cmF0aW9uLCBub3Igd2hldGhlciBpdCByZXN0b3JlZCBpdAotCQkJCSAqIGNvcnJlY3RseS4KLQkJCQkgKi8KLQkJCQl2YXIgPSBkZWZhdWx0X3ZhcjsKLQkJCQlpZiAobm9hY2NlbCkKLQkJCQkJdmFyLmFjY2VsX2ZsYWdzICY9IH5GQl9BQ0NFTEZfVEVYVDsKLQkJCQllbHNlCi0JCQkJCXZhci5hY2NlbF9mbGFncyB8PSBGQl9BQ0NFTEZfVEVYVDsKLQkJCQlpZiAodmFyLnlyZXMgPT0gdmFyLnlyZXNfdmlydHVhbCkgewotCQkJCQl1MzIgdmlkZW9yYW0gPSAoaW5mby0+Zml4LnNtZW1fbGVuIC0gKFBBR0VfU0laRSA8PCAyKSk7Ci0JCQkJCXZhci55cmVzX3ZpcnR1YWwgPSAoKHZpZGVvcmFtICogOCkgLyB2YXIuYml0c19wZXJfcGl4ZWwpIC8gdmFyLnhyZXNfdmlydHVhbDsKLQkJCQkJaWYgKHZhci55cmVzX3ZpcnR1YWwgPCB2YXIueXJlcykKLQkJCQkJCXZhci55cmVzX3ZpcnR1YWwgPSB2YXIueXJlczsKLQkJCQl9Ci0JCQl9CisJaW50IHdhc19tbWFwZWQ7CiAjZW5kaWYKLQkJCWF0eV9kaXNhYmxlX2lycShwYXIpOworCisJaWYgKCF1c2VyKQorCQlyZXR1cm4gMDsKKworCXBhci0+b3Blbi0tOworCW1kZWxheSgxKTsKKwl3YWl0X2Zvcl9pZGxlKHBhcik7CisKKwlpZiAocGFyLT5vcGVuKQorCQlyZXR1cm4gMDsKKworI2lmZGVmIF9fc3BhcmNfXworCXdhc19tbWFwZWQgPSBwYXItPm1tYXBlZDsKKworCXBhci0+bW1hcGVkID0gMDsKKworCWlmICh3YXNfbW1hcGVkKSB7CisJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7CisKKwkJLyoKKwkJICogTm93IHJlc2V0IHRoZSBkZWZhdWx0IGRpc3BsYXkgY29uZmlnLCB3ZSBoYXZlCisJCSAqIG5vIGlkZWEgd2hhdCB0aGUgcHJvZ3JhbShzKSB3aGljaCBtbWFwJ2QgdGhlCisJCSAqIGNoaXAgZGlkIHRvIHRoZSBjb25maWd1cmF0aW9uLCBub3Igd2hldGhlciBpdAorCQkgKiByZXN0b3JlZCBpdCBjb3JyZWN0bHkuCisJCSAqLworCQl2YXIgPSBkZWZhdWx0X3ZhcjsKKwkJaWYgKG5vYWNjZWwpCisJCQl2YXIuYWNjZWxfZmxhZ3MgJj0gfkZCX0FDQ0VMRl9URVhUOworCQllbHNlCisJCQl2YXIuYWNjZWxfZmxhZ3MgfD0gRkJfQUNDRUxGX1RFWFQ7CisJCWlmICh2YXIueXJlcyA9PSB2YXIueXJlc192aXJ0dWFsKSB7CisJCQl1MzIgdmlkZW9yYW0gPSAoaW5mby0+Zml4LnNtZW1fbGVuIC0gKFBBR0VfU0laRSA8PCAyKSk7CisJCQl2YXIueXJlc192aXJ0dWFsID0KKwkJCQkoKHZpZGVvcmFtICogOCkgLyB2YXIuYml0c19wZXJfcGl4ZWwpIC8KKwkJCQl2YXIueHJlc192aXJ0dWFsOworCQkJaWYgKHZhci55cmVzX3ZpcnR1YWwgPCB2YXIueXJlcykKKwkJCQl2YXIueXJlc192aXJ0dWFsID0gdmFyLnlyZXM7CiAJCX0KIAl9Ci0JcmV0dXJuICgwKTsKKyNlbmRpZgorCWF0eV9kaXNhYmxlX2lycShwYXIpOworCisJcmV0dXJuIDA7CiB9CiAKLSAgICAvKgotICAgICAqICBQYW4gb3IgV3JhcCB0aGUgRGlzcGxheQotICAgICAqCi0gICAgICogIFRoaXMgY2FsbCBsb29rcyBvbmx5IGF0IHhvZmZzZXQsIHlvZmZzZXQgYW5kIHRoZSBGQl9WTU9ERV9ZV1JBUCBmbGFnCi0gICAgICovCisvKgorICogUGFuIG9yIFdyYXAgdGhlIERpc3BsYXkKKyAqCisgKiBUaGlzIGNhbGwgbG9va3Mgb25seSBhdCB4b2Zmc2V0LCB5b2Zmc2V0IGFuZCB0aGUgRkJfVk1PREVfWVdSQVAgZmxhZworICovCiAKLXN0YXRpYyBpbnQgYXR5ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCBhdHlmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwogCXUzMiB4cmVzLCB5cmVzLCB4b2Zmc2V0LCB5b2Zmc2V0OwpAQCAtMTY5MCw3ICsxNzQ1LDggQEAKIAkJeXJlcyA+Pj0gMTsKIAl4b2Zmc2V0ID0gKHZhci0+eG9mZnNldCArIDcpICYgfjc7CiAJeW9mZnNldCA9IHZhci0+eW9mZnNldDsKLQlpZiAoeG9mZnNldCArIHhyZXMgPiBwYXItPmNydGMudnhyZXMgfHwgeW9mZnNldCArIHlyZXMgPiBwYXItPmNydGMudnlyZXMpCisJaWYgKHhvZmZzZXQgKyB4cmVzID4gcGFyLT5jcnRjLnZ4cmVzIHx8CisJICAgIHlvZmZzZXQgKyB5cmVzID4gcGFyLT5jcnRjLnZ5cmVzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpbmZvLT52YXIueG9mZnNldCA9IHhvZmZzZXQ7CiAJaW5mby0+dmFyLnlvZmZzZXQgPSB5b2Zmc2V0OwpAQCAtMTcyNywxMCArMTc4MywxMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJY291bnQgPSB2YmwtPmNvdW50OwotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHZibC0+d2FpdCwgY291bnQgIT0gdmJsLT5jb3VudCwgSFovMTApOwotCWlmIChyZXQgPCAwKSB7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodmJsLT53YWl0LAorCQkJCQkgICAgICAgY291bnQgIT0gdmJsLT5jb3VudCwgSFovMTApOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCX0KIAlpZiAocmV0ID09IDApIHsKIAkJYXR5X2VuYWJsZV9pcnEocGFyLCAxKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CkBAIC0xNzg0LDcgKzE4NDAsOCBAQAogCQlmYnR5cC5mYl9kZXB0aCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKIAkJZmJ0eXAuZmJfY21zaXplID0gaW5mby0+Y21hcC5sZW47CiAJCWZidHlwLmZiX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW47Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBmYnR5cGUgX191c2VyICopIGFyZywgJmZidHlwLCBzaXplb2YoZmJ0eXApKSkKKwkJaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IGZidHlwZSBfX3VzZXIgKikgYXJnLCAmZmJ0eXAsCisJCQkJIHNpemVvZihmYnR5cCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogI2VuZGlmIC8qIF9fc3BhcmNfXyAqLwpAQCAtMTgwNCw3ICsxODYxLDcgQEAKIAljYXNlIEFUWUlPX0NMS1I6CiAJCWlmIChNNjRfSEFTKElOVEVHUkFURUQpKSB7CiAJCQlzdHJ1Y3QgYXR5Y2xrIGNsazsKLQkJCXVuaW9uIGF0eV9wbGwgKnBsbCA9ICYocGFyLT5wbGwpOworCQkJdW5pb24gYXR5X3BsbCAqcGxsID0gJnBhci0+cGxsOwogCQkJdTMyIGRzcF9jb25maWcgPSBwbGwtPmN0LmRzcF9jb25maWc7CiAJCQl1MzIgZHNwX29uX29mZiA9IHBsbC0+Y3QuZHNwX29uX29mZjsKIAkJCWNsay5yZWZfY2xrX3BlciA9IHBhci0+cmVmX2Nsa19wZXI7CkBAIC0xODI5LDggKzE4ODYsOSBAQAogCWNhc2UgQVRZSU9fQ0xLVzoKIAkJaWYgKE02NF9IQVMoSU5URUdSQVRFRCkpIHsKIAkJCXN0cnVjdCBhdHljbGsgY2xrOwotCQkJdW5pb24gYXR5X3BsbCAqcGxsID0gJihwYXItPnBsbCk7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmNsaywgKHN0cnVjdCBhdHljbGsgX191c2VyICopIGFyZywgc2l6ZW9mKGNsaykpKQorCQkJdW5pb24gYXR5X3BsbCAqcGxsID0gJnBhci0+cGxsOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbGssIChzdHJ1Y3QgYXR5Y2xrIF9fdXNlciAqKSBhcmcsCisJCQkJCSAgIHNpemVvZihjbGspKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXBhci0+cmVmX2Nsa19wZXIgPSBjbGsucmVmX2Nsa19wZXI7CiAJCQlwbGwtPmN0LnBsbF9yZWZfZGl2ID0gY2xrLnBsbF9yZWZfZGl2OwpAQCAtMTg0MSw4ICsxODk5LDEwIEBACiAJCQlwbGwtPmN0LnZjbGtfZmJfZGl2ID0gY2xrLnZjbGtfZmJfZGl2OwogCQkJcGxsLT5jdC52Y2xrX3Bvc3RfZGl2X3JlYWwgPSBjbGsudmNsa19wb3N0X2RpdjsKIAkJCXBsbC0+Y3QuZHNwX2NvbmZpZyA9IChjbGsuZHNwX3hjbGtzX3Blcl9yb3cgJiAweDNmZmYpIHwKLQkJCQkoKGNsay5kc3BfbG9vcF9sYXRlbmN5ICYgMHhmKTw8MTYpfCAoKGNsay5kc3BfcHJlY2lzaW9uICYgNyk8PDIwKTsKLQkJCXBsbC0+Y3QuZHNwX29uX29mZiA9IChjbGsuZHNwX29mZiAmIDB4N2ZmKSB8ICgoY2xrLmRzcF9vbiAmIDB4N2ZmKTw8MTYpOworCQkJCSgoY2xrLmRzcF9sb29wX2xhdGVuY3kgJiAweGYpIDw8IDE2KSB8CisJCQkJKChjbGsuZHNwX3ByZWNpc2lvbiAmIDcpIDw8IDIwKTsKKwkJCXBsbC0+Y3QuZHNwX29uX29mZiA9IChjbGsuZHNwX29mZiAmIDB4N2ZmKSB8CisJCQkJKChjbGsuZHNwX29uICYgMHg3ZmYpIDw8IDE2KTsKIAkJCS8qYXR5X2NhbGNfcGxsX2N0KGluZm8sICZwbGwtPmN0KTsqLwogCQkJYXR5X3NldF9wbGxfY3QoaW5mbywgcGxsKTsKIAkJfSBlbHNlCkBAIC0xOTEzLDggKzE5NzMsNyBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQltYXBfc2l6ZSA9IHBhci0+bW1hcF9tYXBbaV0uc2l6ZSAtIChvZmZzZXQgLSBzdGFydCk7Ci0JCQltYXBfb2Zmc2V0ID0KLQkJCSAgICBwYXItPm1tYXBfbWFwW2ldLnBvZmYgKyAob2Zmc2V0IC0gc3RhcnQpOworCQkJbWFwX29mZnNldCA9IHBhci0+bW1hcF9tYXBbaV0ucG9mZiArIChvZmZzZXQgLSBzdGFydCk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoIW1hcF9zaXplKSB7CkBAIC0xOTI0LDggKzE5ODMsNyBAQAogCQlpZiAocGFnZSArIG1hcF9zaXplID4gc2l6ZSkKIAkJCW1hcF9zaXplID0gc2l6ZSAtIHBhZ2U7CiAKLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0KLQkJICAgIH4ocGFyLT5tbWFwX21hcFtpXS5wcm90X21hc2spOworCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmPSB+KHBhci0+bW1hcF9tYXBbaV0ucHJvdF9tYXNrKTsKIAkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gcGFyLT5tbWFwX21hcFtpXS5wcm90X2ZsYWc7CiAKIAkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQgKyBwYWdlLApAQCAtMjAyOSw3ICsyMDg3LDggQEAKIAlwYXItPmFzbGVlcCA9IDE7CiAJcGFyLT5sb2NrX2JsYW5rID0gMTsKIAotCS8qIEJlY2F1c2Ugd2UgbWF5IGNoYW5nZSBQQ0kgRCBzdGF0ZSBvdXJzZWx2ZXMsIHdlIG5lZWQgdG8KKwkvKgorCSAqIEJlY2F1c2Ugd2UgbWF5IGNoYW5nZSBQQ0kgRCBzdGF0ZSBvdXJzZWx2ZXMsIHdlIG5lZWQgdG8KIAkgKiBmaXJzdCBzYXZlIHRoZSBjb25maWcgc3BhY2UgY29udGVudCBzbyB0aGUgY29yZSBjYW4KIAkgKiByZXN0b3JlIGl0IHByb3Blcmx5IG9uIHJlc3VtZS4KIAkgKi8KQEAgLTIwODAsNyArMjEzOSw4IEBACiAKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAKLQkvKiBQQ0kgc3RhdGUgd2lsbCBoYXZlIGJlZW4gcmVzdG9yZWQgYnkgdGhlIGNvcmUsIHNvCisJLyoKKwkgKiBQQ0kgc3RhdGUgd2lsbCBoYXZlIGJlZW4gcmVzdG9yZWQgYnkgdGhlIGNvcmUsIHNvCiAJICogd2Ugc2hvdWxkIGJlIGluIEQwIG5vdyB3aXRoIG91ciBjb25maWcgc3BhY2UgZnVsbHkKIAkgKiByZXN0b3JlZAogCSAqLwpAQCAtMjE5Miw4ICsyMjUyLDggQEAKIAogCWluZm8tPmJsX2RldiA9IGJkOwogCWZiX2JsX2RlZmF1bHRfY3VydmUoaW5mbywgMCwKLQkJMHgzRiAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfTEVWRUwsCi0JCTB4RkYgKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMKTsKKwkJCSAgICAweDNGICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9MRVZFTCwKKwkJCSAgICAweEZGICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9MRVZFTCk7CiAKIAliZC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBGQl9CQUNLTElHSFRfTEVWRUxTIC0gMTsKIAliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IGJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzczsKQEAgLTIyMzYsMTYgKzIyOTYsMTYgQEAKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmFnZXByb190YmwpOwogCX0KIAotCWZvciAoaT0wOyBpIDwgc2l6ZTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQlpZiAoeGNsayA8IHJlZnJlc2hfdGJsW2ldKQotCQlicmVhazsKKwkJCWJyZWFrOwogCX0KIAlwYXItPm1lbV9yZWZyZXNoX3JhdGUgPSBpOwogfQogCi0gICAgLyoKLSAgICAgKiAgSW5pdGlhbGlzYXRpb24KLSAgICAgKi8KKy8qCisgKiBJbml0aWFsaXNhdGlvbgorICovCiAKIHN0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqZmJfbGlzdCA9IE5VTEw7CiAKQEAgLTIzNzUsOCArMjQzNSwxMCBAQAogCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfUE1BQwotCS8qIFRoZSBBcHBsZSBpQm9vazEgdXNlcyBub24tc3RhbmRhcmQgbWVtb3J5IGZyZXF1ZW5jaWVzLiBXZSBkZXRlY3QgaXQKLQkgKiBhbmQgc2V0IHRoZSBmcmVxdWVuY3kgbWFudWFsbHkuICovCisJLyoKKwkgKiBUaGUgQXBwbGUgaUJvb2sxIHVzZXMgbm9uLXN0YW5kYXJkIG1lbW9yeSBmcmVxdWVuY2llcy4KKwkgKiBXZSBkZXRlY3QgaXQgYW5kIHNldCB0aGUgZnJlcXVlbmN5IG1hbnVhbGx5LgorCSAqLwogCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKSB7CiAJCXBhci0+cGxsX2xpbWl0cy5tY2xrID0gNzA7CiAJCXBhci0+cGxsX2xpbWl0cy54Y2xrID0gNTM7CkBAIC0yNDIxLDEzICsyNDgzLDE0IEBACiAKIAkvKiBzYXZlIHByZXZpb3VzIHZpZGVvIG1vZGUgKi8KIAlhdHlfZ2V0X2NydGMocGFyLCAmcGFyLT5zYXZlZF9jcnRjKTsKLQlpZihwYXItPnBsbF9vcHMtPmdldF9wbGwpCisJaWYgKHBhci0+cGxsX29wcy0+Z2V0X3BsbCkKIAkJcGFyLT5wbGxfb3BzLT5nZXRfcGxsKGluZm8sICZwYXItPnNhdmVkX3BsbCk7CiAKIAlwYXItPm1lbV9jbnRsID0gYXR5X2xkX2xlMzIoTUVNX0NOVEwsIHBhcik7CiAJZ3RiX21lbXNpemUgPSBNNjRfSEFTKEdUQl9EU1ApOwogCWlmIChndGJfbWVtc2l6ZSkKLQkJc3dpdGNoIChwYXItPm1lbV9jbnRsICYgMHhGKSB7CS8qIDB4RiB1c2VkIGluc3RlYWQgb2YgTUVNX1NJWkVfQUxJQVMgKi8KKwkJLyogMHhGIHVzZWQgaW5zdGVhZCBvZiBNRU1fU0laRV9BTElBUyAqLworCQlzd2l0Y2ggKHBhci0+bWVtX2NudGwgJiAweEYpIHsKIAkJY2FzZSBNRU1fU0laRV81MTJLOgogCQkJaW5mby0+Zml4LnNtZW1fbGVuID0gMHg4MDAwMDsKIAkJCWJyZWFrOwpAQCAtMjQ5Niw4ICsyNTU5LDggQEAKIAl9CiAKIAkvKgotCSAqICBSZWcgQmxvY2sgMCAoQ1QtY29tcGF0aWJsZSBibG9jaykgaXMgYXQgbW1pb19zdGFydAotCSAqICBSZWcgQmxvY2sgMSAobXVsdGltZWRpYSBleHRlbnNpb25zKSBpcyBhdCBtbWlvX3N0YXJ0IC0gMHg0MDAKKwkgKiBSZWcgQmxvY2sgMCAoQ1QtY29tcGF0aWJsZSBibG9jaykgaXMgYXQgbW1pb19zdGFydAorCSAqIFJlZyBCbG9jayAxIChtdWx0aW1lZGlhIGV4dGVuc2lvbnMpIGlzIGF0IG1taW9fc3RhcnQgLSAweDQwMAogCSAqLwogCWlmIChNNjRfSEFTKEdYKSkgewogCQlpbmZvLT5maXgubW1pb19sZW4gPSAweDQwMDsKQEAgLTI1MTYsODQgKzI1NzksOTggQEAKIAl9CiAKIAlQUklOVEtJKCIlZCVjICVzLCAlcyBNSHogWFRBTCwgJWQgTUh6IFBMTCwgJWQgTWh6IE1DTEssICVkIE1IeiBYQ0xLXG4iLAotCSAgICAgICBpbmZvLT5maXguc21lbV9sZW4gPT0gMHg4MDAwMCA/IDUxMiA6IChpbmZvLT5maXguc21lbV9sZW4gPj4gMjApLAotCSAgICAgICBpbmZvLT5maXguc21lbV9sZW4gPT0gMHg4MDAwMCA/ICdLJyA6ICdNJywgcmFtbmFtZSwgeHRhbCwgcGFyLT5wbGxfbGltaXRzLnBsbF9tYXgsCi0JICAgICAgIHBhci0+cGxsX2xpbWl0cy5tY2xrLCBwYXItPnBsbF9saW1pdHMueGNsayk7CisJCWluZm8tPmZpeC5zbWVtX2xlbiA9PSAweDgwMDAwID8gNTEyIDogKGluZm8tPmZpeC5zbWVtX2xlbj4+MjApLAorCQlpbmZvLT5maXguc21lbV9sZW4gPT0gMHg4MDAwMCA/ICdLJyA6ICdNJywgcmFtbmFtZSwgeHRhbCwKKwkJcGFyLT5wbGxfbGltaXRzLnBsbF9tYXgsIHBhci0+cGxsX2xpbWl0cy5tY2xrLAorCQlwYXItPnBsbF9saW1pdHMueGNsayk7CiAKICNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19GQl9BVFlfQ1QpCiAJaWYgKE02NF9IQVMoSU5URUdSQVRFRCkpIHsKIAkJaW50IGk7Ci0JCXByaW50aygiZGVidWcgYXR5ZmI6IEJVU19DTlRMIERBQ19DTlRMIE1FTV9DTlRMIEVYVF9NRU1fQ05UTCBDUlRDX0dFTl9DTlRMICIKLQkJICAgICAgICJEU1BfQ09ORklHIERTUF9PTl9PRkYgQ0xPQ0tfQ05UTFxuIgotCQkgICAgICAgImRlYnVnIGF0eWZiOiAlMDh4ICUwOHggJTA4eCAlMDh4ICAgICAlMDh4ICAgICAgJTA4eCAgICUwOHggICAlMDh4XG4iCisJCXByaW50aygiZGVidWcgYXR5ZmI6IEJVU19DTlRMIERBQ19DTlRMIE1FTV9DTlRMICIKKwkJICAgICAgICJFWFRfTUVNX0NOVEwgQ1JUQ19HRU5fQ05UTCBEU1BfQ09ORklHICIKKwkJICAgICAgICJEU1BfT05fT0ZGIENMT0NLX0NOVExcbiIKKwkJICAgICAgICJkZWJ1ZyBhdHlmYjogJTA4eCAlMDh4ICUwOHggIgorCQkgICAgICAgIiUwOHggICAgICUwOHggICAgICAlMDh4ICAgIgorCQkgICAgICAgIiUwOHggICAlMDh4XG4iCiAJCSAgICAgICAiZGVidWcgYXR5ZmI6IFBMTCIsCi0JCQlhdHlfbGRfbGUzMihCVVNfQ05UTCwgcGFyKSwgYXR5X2xkX2xlMzIoREFDX0NOVEwsIHBhciksCi0JCQlhdHlfbGRfbGUzMihNRU1fQ05UTCwgcGFyKSwgYXR5X2xkX2xlMzIoRVhUX01FTV9DTlRMLCBwYXIpLAotCQkJYXR5X2xkX2xlMzIoQ1JUQ19HRU5fQ05UTCwgcGFyKSwgYXR5X2xkX2xlMzIoRFNQX0NPTkZJRywgcGFyKSwKLQkJCWF0eV9sZF9sZTMyKERTUF9PTl9PRkYsIHBhciksIGF0eV9sZF9sZTMyKENMT0NLX0NOVEwsIHBhcikpOworCQkgICAgICAgYXR5X2xkX2xlMzIoQlVTX0NOVEwsIHBhciksCisJCSAgICAgICBhdHlfbGRfbGUzMihEQUNfQ05UTCwgcGFyKSwKKwkJICAgICAgIGF0eV9sZF9sZTMyKE1FTV9DTlRMLCBwYXIpLAorCQkgICAgICAgYXR5X2xkX2xlMzIoRVhUX01FTV9DTlRMLCBwYXIpLAorCQkgICAgICAgYXR5X2xkX2xlMzIoQ1JUQ19HRU5fQ05UTCwgcGFyKSwKKwkJICAgICAgIGF0eV9sZF9sZTMyKERTUF9DT05GSUcsIHBhciksCisJCSAgICAgICBhdHlfbGRfbGUzMihEU1BfT05fT0ZGLCBwYXIpLAorCQkgICAgICAgYXR5X2xkX2xlMzIoQ0xPQ0tfQ05UTCwgcGFyKSk7CiAJCWZvciAoaSA9IDA7IGkgPCA0MDsgaSsrKQogCQkJcHJpbnRrKCIgJTAyeCIsIGF0eV9sZF9wbGxfY3QoaSwgcGFyKSk7CiAJCXByaW50aygiXG4iKTsKIAl9CiAjZW5kaWYKLQlpZihwYXItPnBsbF9vcHMtPmluaXRfcGxsKQorCWlmIChwYXItPnBsbF9vcHMtPmluaXRfcGxsKQogCQlwYXItPnBsbF9vcHMtPmluaXRfcGxsKGluZm8sICZwYXItPnBsbCk7CiAJaWYgKHBhci0+cGxsX29wcy0+cmVzdW1lX3BsbCkKIAkJcGFyLT5wbGxfb3BzLT5yZXN1bWVfcGxsKGluZm8sICZwYXItPnBsbCk7CiAKIAkvKgotCSAqICBMYXN0IHBhZ2Ugb2YgOCBNQiAoNCBNQiBvbiBJU0EpIGFwZXJ0dXJlIGlzIE1NSU8sCi0JICogIHVubGVzcyB0aGUgYXV4aWxpYXJ5IHJlZ2lzdGVyIGFwZXJ0dXJlIGlzIHVzZWQuCisJICogTGFzdCBwYWdlIG9mIDggTUIgKDQgTUIgb24gSVNBKSBhcGVydHVyZSBpcyBNTUlPLAorCSAqIHVubGVzcyB0aGUgYXV4aWxpYXJ5IHJlZ2lzdGVyIGFwZXJ0dXJlIGlzIHVzZWQuCiAJICovCi0KIAlpZiAoIXBhci0+YXV4X3N0YXJ0ICYmCi0JCShpbmZvLT5maXguc21lbV9sZW4gPT0gMHg4MDAwMDAgfHwgKHBhci0+YnVzX3R5cGUgPT0gSVNBICYmIGluZm8tPmZpeC5zbWVtX2xlbiA9PSAweDQwMDAwMCkpKQorCSAgICAoaW5mby0+Zml4LnNtZW1fbGVuID09IDB4ODAwMDAwIHx8CisJICAgICAocGFyLT5idXNfdHlwZSA9PSBJU0EgJiYgaW5mby0+Zml4LnNtZW1fbGVuID09IDB4NDAwMDAwKSkpCiAJCWluZm8tPmZpeC5zbWVtX2xlbiAtPSBHVUlfUkVTRVJWRTsKIAogCS8qCi0JICogIERpc2FibGUgcmVnaXN0ZXIgYWNjZXNzIHRocm91Z2ggdGhlIGxpbmVhciBhcGVydHVyZQotCSAqICBpZiB0aGUgYXV4aWxpYXJ5IGFwZXJ0dXJlIGlzIHVzZWQgc28gd2UgY2FuIGFjY2VzcwotCSAqICB0aGUgZnVsbCA4IE1CIG9mIHZpZGVvIFJBTSBvbiA4IE1CIGJvYXJkcy4KKwkgKiBEaXNhYmxlIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIHRoZSBsaW5lYXIgYXBlcnR1cmUKKwkgKiBpZiB0aGUgYXV4aWxpYXJ5IGFwZXJ0dXJlIGlzIHVzZWQgc28gd2UgY2FuIGFjY2VzcworCSAqIHRoZSBmdWxsIDggTUIgb2YgdmlkZW8gUkFNIG9uIDggTUIgYm9hcmRzLgogCSAqLwogCWlmIChwYXItPmF1eF9zdGFydCkKLQkJYXR5X3N0X2xlMzIoQlVTX0NOVEwsIGF0eV9sZF9sZTMyKEJVU19DTlRMLCBwYXIpIHwgQlVTX0FQRVJfUkVHX0RJUywgcGFyKTsKKwkJYXR5X3N0X2xlMzIoQlVTX0NOVEwsIGF0eV9sZF9sZTMyKEJVU19DTlRMLCBwYXIpIHwKKwkJCSAgICBCVVNfQVBFUl9SRUdfRElTLCBwYXIpOwogCiAjaWZkZWYgQ09ORklHX01UUlIKIAlwYXItPm10cnJfYXBlciA9IC0xOwogCXBhci0+bXRycl9yZWcgPSAtMTsKIAlpZiAoIW5vbXRycikgewogCQkvKiBDb3ZlciB0aGUgd2hvbGUgcmVzb3VyY2UuICovCi0JCSBwYXItPm10cnJfYXBlciA9IG10cnJfYWRkKHBhci0+cmVzX3N0YXJ0LCBwYXItPnJlc19zaXplLCBNVFJSX1RZUEVfV1JDT01CLCAxKTsKLQkJIGlmIChwYXItPm10cnJfYXBlciA+PSAwICYmICFwYXItPmF1eF9zdGFydCkgeworCQlwYXItPm10cnJfYXBlciA9IG10cnJfYWRkKHBhci0+cmVzX3N0YXJ0LCBwYXItPnJlc19zaXplLAorCQkJCQkgIE1UUlJfVFlQRV9XUkNPTUIsIDEpOworCQlpZiAocGFyLT5tdHJyX2FwZXIgPj0gMCAmJiAhcGFyLT5hdXhfc3RhcnQpIHsKIAkJCS8qIE1ha2UgYSBob2xlIGZvciBtbWlvLiAqLwotCQkJcGFyLT5tdHJyX3JlZyA9IG10cnJfYWRkKHBhci0+cmVzX3N0YXJ0ICsgMHg4MDAwMDAgLSBHVUlfUkVTRVJWRSwKLQkJCQlHVUlfUkVTRVJWRSwgTVRSUl9UWVBFX1VOQ0FDSEFCTEUsIDEpOworCQkJcGFyLT5tdHJyX3JlZyA9IG10cnJfYWRkKHBhci0+cmVzX3N0YXJ0ICsgMHg4MDAwMDAgLQorCQkJCQkJIEdVSV9SRVNFUlZFLCBHVUlfUkVTRVJWRSwKKwkJCQkJCSBNVFJSX1RZUEVfVU5DQUNIQUJMRSwgMSk7CiAJCQlpZiAocGFyLT5tdHJyX3JlZyA8IDApIHsKIAkJCQltdHJyX2RlbChwYXItPm10cnJfYXBlciwgMCwgMCk7CiAJCQkJcGFyLT5tdHJyX2FwZXIgPSAtMTsKIAkJCX0KLQkJIH0KKwkJfQogCX0KICNlbmRpZgogCiAJaW5mby0+ZmJvcHMgPSAmYXR5ZmJfb3BzOwogCWluZm8tPnBzZXVkb19wYWxldHRlID0gcGFyLT5wc2V1ZG9fcGFsZXR0ZTsKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUICAgICAgICAgICB8Ci0JICAgICAgICAgICAgICBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQgfAotCSAgICAgICAgICAgICAgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgIHwKLQkgICAgICAgICAgICAgIEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBICB8Ci0JICAgICAgICAgICAgICBGQklORk9fSFdBQ0NFTF9ZUEFOOworCQkgICAgICBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQgfAorCQkgICAgICBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCAgfAorCQkgICAgICBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSAgfAorCQkgICAgICBGQklORk9fSFdBQ0NFTF9ZUEFOOwogCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCiAJaWYgKE02NF9IQVMoRzNfUEJfMV8xKSAmJiBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKSB7Ci0JCS8qIHRoZXNlIGJpdHMgbGV0IHRoZSAxMDEgcG93ZXJib29rIHdha2UgdXAgZnJvbSBzbGVlcCAtLSBwYXVsdXMgKi8KLQkJYXR5X3N0X2xjZChQT1dFUl9NQU5BR0VNRU5ULCBhdHlfbGRfbGNkKFBPV0VSX01BTkFHRU1FTlQsIHBhcikKLQkJCSAgIHwgKFVTRV9GMzJLSFogfCBUUklTVEFURV9NRU1fRU4pLCBwYXIpOworCQkvKgorCQkgKiB0aGVzZSBiaXRzIGxldCB0aGUgMTAxIHBvd2VyYm9vaworCQkgKiB3YWtlIHVwIGZyb20gc2xlZXAgLS0gcGF1bHVzCisJCSAqLworCQlhdHlfc3RfbGNkKFBPV0VSX01BTkFHRU1FTlQsIGF0eV9sZF9sY2QoUE9XRVJfTUFOQUdFTUVOVCwgcGFyKSB8CisJCQkgICBVU0VfRjMyS0haIHwgVFJJU1RBVEVfTUVNX0VOLCBwYXIpOwogCX0gZWxzZQogI2VuZGlmCiAJaWYgKE02NF9IQVMoTU9CSUxfQlVTKSAmJiBiYWNrbGlnaHQpIHsKICNpZmRlZiBDT05GSUdfRkJfQVRZX0JBQ0tMSUdIVAotCQlhdHlfYmxfaW5pdCAocGFyKTsKKwkJYXR5X2JsX2luaXQocGFyKTsKICNlbmRpZgogCX0KIApAQCAtMjYwMSw4ICsyNjc4LDggQEAKICNpZmRlZiBDT05GSUdfUFBDCiAJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7CiAJCS8qCi0JCSAqICBGSVhNRTogVGhlIE5WUkFNIHN0dWZmIHNob3VsZCBiZSBwdXQgaW4gYSBNYWMtc3BlY2lmaWMgZmlsZSwgYXMgaXQKLQkJICogICAgICAgICBhcHBsaWVzIHRvIGFsbCBNYWMgdmlkZW8gY2FyZHMKKwkJICogRklYTUU6IFRoZSBOVlJBTSBzdHVmZiBzaG91bGQgYmUgcHV0IGluIGEgTWFjLXNwZWNpZmljIGZpbGUsCisJCSAqICAgICAgICBhcyBpdCBhcHBsaWVzIHRvIGFsbCBNYWMgdmlkZW8gY2FyZHMKIAkJICovCiAJCWlmIChtb2RlKSB7CiAJCQlpZiAobWFjX2ZpbmRfbW9kZSgmdmFyLCBpbmZvLCBtb2RlLCA4KSkKQEAgLTI2MTUsOCArMjY5Miw3IEBACiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF82MDsKIAkJCQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoImlNYWMiKSkKIAkJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4Xzc1OwotCQkJCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZQotCQkJCQkgKCJQb3dlckJvb2syLDEiKSkKKwkJCQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQogCQkJCQkvKiBpQm9vayB3aXRoIDgwMHg2MDAgTENEICovCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV84MDBfNjAwXzYwOwogCQkJCWVsc2UKQEAgLTI2MzAsNyArMjcwNiw3IEBACiAJCQlpZiAoZGVmYXVsdF9jbW9kZSA8IENNT0RFXzggfHwgZGVmYXVsdF9jbW9kZSA+IENNT0RFXzMyKQogCQkJCWRlZmF1bHRfY21vZGUgPSBDTU9ERV84OwogCQkJaWYgKCFtYWNfdm1vZGVfdG9fdmFyKGRlZmF1bHRfdm1vZGUsIGRlZmF1bHRfY21vZGUsCi0JCQkJCSAgICAgICAmdmFyKSkKKwkJCQkJICAgICAgJnZhcikpCiAJCQkJaGFzX3ZhciA9IDE7CiAJCX0KIAl9CkBAIC0yNzAyLDEyICsyNzc4LDEyIEBACiAKICNpZmRlZiBDT05GSUdfTVRSUgogCWlmIChwYXItPm10cnJfcmVnID49IDApIHsKLQkgICAgbXRycl9kZWwocGFyLT5tdHJyX3JlZywgMCwgMCk7Ci0JICAgIHBhci0+bXRycl9yZWcgPSAtMTsKKwkJbXRycl9kZWwocGFyLT5tdHJyX3JlZywgMCwgMCk7CisJCXBhci0+bXRycl9yZWcgPSAtMTsKIAl9CiAJaWYgKHBhci0+bXRycl9hcGVyID49IDApIHsKLQkgICAgbXRycl9kZWwocGFyLT5tdHJyX2FwZXIsIDAsIDApOwotCSAgICBwYXItPm10cnJfYXBlciA9IC0xOworCQltdHJyX2RlbChwYXItPm10cnJfYXBlciwgMCwgMCk7CisJCXBhci0+bXRycl9hcGVyID0gLTE7CiAJfQogI2VuZGlmCiAJcmV0dXJuIHJldDsKQEAgLTI3MzUsMTggKzI4MTEsMTggQEAKIAlwaHlzX3NpemVbbTY0X251bV0gPSBzaXplOwogCXBoeXNfZ3VpcmVnYmFzZVttNjRfbnVtXSA9IGd1aXJlZ2Jhc2U7CiAJUFJJTlRLSSgic3RvcmVkIHRoZW0gYWxsOiAkJTA4bFggJCUwOGxYICQlMDhsWCBcbiIsIHZtZW1iYXNlLCBzaXplLAotCSAgICAgICBndWlyZWdiYXNlKTsKKwkJZ3VpcmVnYmFzZSk7CiAJcmV0dXJuIDA7CiAKLSAgICAgIG1hY2g2NF9pbnZhbGlkOgorIG1hY2g2NF9pbnZhbGlkOgogCXBoeXNfdm1lbWJhc2VbbTY0X251bV0gPSAwOwogCXJldHVybiAtMTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQVRBUkkgKi8KIAotICAgIC8qCi0gICAgICogIEJsYW5rIHRoZSBkaXNwbGF5LgotICAgICAqLworLyoKKyAqIEJsYW5rIHRoZSBkaXNwbGF5LgorICovCiAKIHN0YXRpYyBpbnQgYXR5ZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKQEAgLTI3NjgsMjAgKzI4NDQsMjAgQEAKIAlnZW5fY250bCA9IGF0eV9sZF9sZTMyKENSVENfR0VOX0NOVEwsIHBhcik7CiAJZ2VuX2NudGwgJj0gfjB4NDAwMDA0YzsKIAlzd2l0Y2ggKGJsYW5rKSB7Ci0JCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKLQkJCWJyZWFrOwotCQljYXNlIEZCX0JMQU5LX05PUk1BTDoKLQkJCWdlbl9jbnRsIHw9IDB4NDAwMDA0MDsKLQkJCWJyZWFrOwotCQljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6Ci0JCQlnZW5fY250bCB8PSAweDQwMDAwNDg7Ci0JCQlicmVhazsKLQkJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgotCQkJZ2VuX2NudGwgfD0gMHg0MDAwMDQ0OwotCQkJYnJlYWs7Ci0JCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQkJZ2VuX2NudGwgfD0gMHg0MDAwMDRjOwotCQkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgorCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJZ2VuX2NudGwgfD0gMHg0MDAwMDQwOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJCWdlbl9jbnRsIHw9IDB4NDAwMDA0ODsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgorCQlnZW5fY250bCB8PSAweDQwMDAwNDQ7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCQlnZW5fY250bCB8PSAweDQwMDAwNGM7CisJCWJyZWFrOwogCX0KIAlhdHlfc3RfbGUzMihDUlRDX0dFTl9DTlRMLCBnZW5fY250bCwgcGFyKTsKIApAQCAtMjgwNiwxNSArMjg4MiwxNSBAQAogCWF0eV9zdF84KERBQ19EQVRBLCBibHVlLCBwYXIpOwogfQogCi0gICAgLyoKLSAgICAgKiAgU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZSBhbHJlYWR5Ci0gICAgICogIHJvdW5kZWQgZG93biB0byB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMgKGFjY29yZGluZyB0byB0aGUKLSAgICAgKiAgZW50cmllcyBpbiB0aGUgdmFyIHN0cnVjdHVyZSkuIFJldHVybiAhPSAwIGZvciBpbnZhbGlkIHJlZ25vLgotICAgICAqICAhISA0ICYgOCA9ICBQU0VVRE8sID4gOCA9IERJUkVDVENPTE9SCi0gICAgICovCisvKgorICogU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZSBhbHJlYWR5CisgKiByb3VuZGVkIGRvd24gdG8gdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzIChhY2NvcmRpbmcgdG8gdGhlCisgKiBlbnRyaWVzIGluIHRoZSB2YXIgc3RydWN0dXJlKS4gUmV0dXJuICE9IDAgZm9yIGludmFsaWQgcmVnbm8uCisgKiAhISA0ICYgOCA9ICBQU0VVRE8sID4gOCA9IERJUkVDVENPTE9SCisgKi8KIAogc3RhdGljIGludCBhdHlmYl9zZXRjb2xyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCi0JdV9pbnQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKKwkJCSAgIHVfaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwogCWludCBpLCBkZXB0aDsKQEAgLTI4NjgsMTYgKzI5NDQsMTUgQEAKIAkJaWYgKGRlcHRoID09IDE2KSB7CiAJCQlpZiAocmVnbm8gPCAzMikKIAkJCQlhdHlfc3RfcGFsKHJlZ25vIDw8IDMsIHJlZCwKLQkJCQkJICAgcGFyLT5wYWxldHRlW3JlZ25vPDwxXS5ncmVlbiwKKwkJCQkJICAgcGFyLT5wYWxldHRlW3JlZ25vIDw8IDFdLmdyZWVuLAogCQkJCQkgICBibHVlLCBwYXIpOwotCQkJcmVkID0gcGFyLT5wYWxldHRlW3JlZ25vPj4xXS5yZWQ7Ci0JCQlibHVlID0gcGFyLT5wYWxldHRlW3JlZ25vPj4xXS5ibHVlOworCQkJcmVkID0gcGFyLT5wYWxldHRlW3JlZ25vID4+IDFdLnJlZDsKKwkJCWJsdWUgPSBwYXItPnBhbGV0dGVbcmVnbm8gPj4gMV0uYmx1ZTsKIAkJCXJlZ25vIDw8PSAyOwogCQl9IGVsc2UgaWYgKGRlcHRoID09IDE1KSB7CiAJCQlyZWdubyA8PD0gMzsKLQkJCWZvcihpID0gMDsgaSA8IDg7IGkrKykgewotCQkJICAgIGF0eV9zdF9wYWwocmVnbm8gKyBpLCByZWQsIGdyZWVuLCBibHVlLCBwYXIpOwotCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQlhdHlfc3RfcGFsKHJlZ25vICsgaSwgcmVkLCBncmVlbiwgYmx1ZSwgcGFyKTsKIAkJfQogCX0KIAlhdHlfc3RfcGFsKHJlZ25vLCByZWQsIGdyZWVuLCBibHVlLCBwYXIpOwpAQCAtMjg5MCw3ICsyOTY1LDggQEAKICNpZmRlZiBfX3NwYXJjX18KIAogc3RhdGljIGludCBfX2RldmluaXQgYXR5ZmJfc2V0dXBfc3BhcmMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyBhZGRyKQorCQkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwpAQCAtMjk3OCw3ICszMDU0LDggQEAKIAkJaisrOwogCX0KIAotCWlmKChyZXQgPSBjb3JyZWN0X2NoaXBzZXQocGFyKSkpCisJcmV0ID0gY29ycmVjdF9jaGlwc2V0KHBhcik7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCWlmIChJU19YTChwZGV2LT5kZXZpY2UpKSB7CkBAIC0zMTA4LDI4ICszMTg1LDI4IEBACiAJdTMyIGRyaXZfaW5mX3RhYiwgc2lnOwogCXUxNiBsY2Rfb2ZzOwogCi0JLyogVG8gc3VwcG9ydCBhbiBMQ0QgcGFuZWwsIHdlIHNob3VsZCBrbm93IGl0J3MgZGltZW5zaW9ucyBhbmQKKwkvKgorCSAqIFRvIHN1cHBvcnQgYW4gTENEIHBhbmVsLCB3ZSBzaG91bGQga25vdyBpdCdzIGRpbWVuc2lvbnMgYW5kCiAJICogIGl0J3MgZGVzaXJlZCBwaXhlbCBjbG9jay4KIAkgKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZG8gaXQ6CiAJICogIC0gQ2hlY2sgdGhlIHN0YXJ0dXAgdmlkZW8gbW9kZSBhbmQgY2FsY3VsYXRlIHRoZSBwYW5lbAogCSAqICAgIHNpemUgZnJvbSBpdC4gVGhpcyBpcyB1bnJlbGlhYmxlLgogCSAqICAtIFJlYWQgaXQgZnJvbSB0aGUgZHJpdmVyIGluZm9ybWF0aW9uIHRhYmxlIGluIHRoZSB2aWRlbyBCSU9TLgotCSovCisJICovCiAJLyogQWRkcmVzcyBvZiBkcml2ZXIgaW5mb3JtYXRpb24gdGFibGUgaXMgYXQgb2Zmc2V0IDB4NzguICovCiAJZHJpdl9pbmZfdGFiID0gYmlvc19iYXNlICsgKigodTE2ICopKGJpb3NfYmFzZSsweDc4KSk7CiAKIAkvKiBDaGVjayBmb3IgdGhlIGRyaXZlciBpbmZvcm1hdGlvbiB0YWJsZSBzaWduYXR1cmUuICovCi0Jc2lnID0gKCoodTMyICopZHJpdl9pbmZfdGFiKTsKKwlzaWcgPSAqKHUzMiAqKWRyaXZfaW5mX3RhYjsKIAlpZiAoKHNpZyA9PSAweDU0NTA0YzI0KSB8fCAvKiBSYWdlIExUIHBybyAqLwotCQkoc2lnID09IDB4NTQ0ZDUyMjQpIHx8IC8qIFJhZ2UgbW9iaWxpdHkgKi8KLQkJKHNpZyA9PSAweDU0NDM1ODI0KSB8fCAvKiBSYWdlIFhDICovCi0JCShzaWcgPT0gMHg1NDRjNTgyNCkpIHsgLyogUmFnZSBYTCAqLworCSAgICAoc2lnID09IDB4NTQ0ZDUyMjQpIHx8IC8qIFJhZ2UgbW9iaWxpdHkgKi8KKwkgICAgKHNpZyA9PSAweDU0NDM1ODI0KSB8fCAvKiBSYWdlIFhDICovCisJICAgIChzaWcgPT0gMHg1NDRjNTgyNCkpIHsgLyogUmFnZSBYTCAqLwogCQlQUklOVEtJKCJCSU9TIGNvbnRhaW5zIGRyaXZlciBpbmZvcm1hdGlvbiB0YWJsZS5cbiIpOwotCQlsY2Rfb2ZzID0gKCoodTE2ICopKGRyaXZfaW5mX3RhYiArIDEwKSk7CisJCWxjZF9vZnMgPSAqKHUxNiAqKShkcml2X2luZl90YWIgKyAxMCk7CiAJCXBhci0+bGNkX3RhYmxlID0gMDsKLQkJaWYgKGxjZF9vZnMgIT0gMCkgeworCQlpZiAobGNkX29mcyAhPSAwKQogCQkJcGFyLT5sY2RfdGFibGUgPSBiaW9zX2Jhc2UgKyBsY2Rfb2ZzOwotCQl9CiAJfQogCiAJaWYgKHBhci0+bGNkX3RhYmxlICE9IDApIHsKQEAgLTMxNDQsMTQgKzMyMjEsMTYgQEAKIAkJdTE2IHdpZHRoLCBoZWlnaHQsIHBhbmVsX3R5cGUsIHJlZnJlc2hfcmF0ZXM7CiAJCXUxNiAqbGNkbW9kZXB0cjsKIAkJdTMyIGZvcm1hdDsKLQkJdTggbGNkX3JlZnJlc2hfcmF0ZXNbMTZdID0gezUwLDU2LDYwLDY3LDcwLDcyLDc1LDc2LDg1LDkwLDEwMCwxMjAsMTQwLDE1MCwxNjAsMjAwfTsKLQkJLyogVGhlIG1vc3QgaW1wb3J0YW50IGluZm9ybWF0aW9uIGlzIHRoZSBwYW5lbCBzaXplIGF0CisJCXU4IGxjZF9yZWZyZXNoX3JhdGVzWzE2XSA9IHsgNTAsIDU2LCA2MCwgNjcsIDcwLCA3MiwgNzUsIDc2LCA4NSwKKwkJCQkJICAgICA5MCwgMTAwLCAxMjAsIDE0MCwgMTUwLCAxNjAsIDIwMCB9OworCQkvKgorCQkgKiBUaGUgbW9zdCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaXMgdGhlIHBhbmVsIHNpemUgYXQKIAkJICogb2Zmc2V0IDI1IGFuZCAyNywgYnV0IHRoZXJlJ3Mgc29tZSBvdGhlciBuaWNlIGluZm9ybWF0aW9uCiAJCSAqIHdoaWNoIHdlIHByaW50IHRvIHRoZSBzY3JlZW4uCiAJCSAqLwogCQlpZCA9ICoodTggKilwYXItPmxjZF90YWJsZTsKLQkJc3RybmNweShtb2RlbCwoY2hhciAqKXBhci0+bGNkX3RhYmxlKzEsMjQpOwotCQltb2RlbFsyM109MDsKKwkJc3RybmNweShtb2RlbCwgKGNoYXIgKilwYXItPmxjZF90YWJsZSsxLCAyNCk7CisJCW1vZGVsWzIzXSA9IDA7CiAKIAkJd2lkdGggPSBwYXItPmxjZF93aWR0aCA9ICoodTE2ICopKHBhci0+bGNkX3RhYmxlKzI1KTsKIAkJaGVpZ2h0ID0gcGFyLT5sY2RfaGVpZ2h0ID0gKih1MTYgKikocGFyLT5sY2RfdGFibGUrMjcpOwpAQCAtMzE2NCw3ICszMjQzLDcgQEAKIAkJCXR4dGR1YWwgPSAiZHVhbCAoc3BsaXQpICI7CiAJCWVsc2UKIAkJCXR4dGR1YWwgPSAiIjsKLQkJdGVjaCA9IChwYW5lbF90eXBlPj4yKSAmIDYzOworCQl0ZWNoID0gKHBhbmVsX3R5cGUgPj4gMikgJiA2MzsKIAkJc3dpdGNoICh0ZWNoKSB7CiAJCWNhc2UgMDoKIAkJCXR4dG1vbml0b3IgPSAicGFzc2l2ZSBtYXRyaXgiOwpAQCAtMzIyNCwyMiArMzMwMywyNCBAQAogCQkJfQogCQl9CiAJCVBSSU5US0koIiVzJXMgJXMgbW9uaXRvciBkZXRlY3RlZDogJXNcbiIsCi0JCQl0eHRkdWFsICx0eHRjb2xvdXIsIHR4dG1vbml0b3IsIG1vZGVsKTsKKwkJCXR4dGR1YWwsIHR4dGNvbG91ciwgdHh0bW9uaXRvciwgbW9kZWwpOwogCQlQUklOVEtJKCIgICAgICAgaWQ9JWQsICVkeCVkIHBpeGVscywgJXNcbiIsCiAJCQlpZCwgd2lkdGgsIGhlaWdodCwgdHh0Zm9ybWF0KTsKIAkJcmVmcmVzaF9yYXRlc19idWZbMF0gPSAwOwogCQlyZWZyZXNoX3JhdGVzID0gKih1MTYgKikocGFyLT5sY2RfdGFibGUrNjIpOwogCQltID0gMTsKIAkJZiA9IDA7Ci0JCWZvciAoaT0wO2k8MTY7aSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCQlpZiAocmVmcmVzaF9yYXRlcyAmIG0pIHsKIAkJCQlpZiAoZiA9PSAwKSB7Ci0JCQkJCXNwcmludGYoc3RyYnVmLCAiJWQiLCBsY2RfcmVmcmVzaF9yYXRlc1tpXSk7CisJCQkJCXNwcmludGYoc3RyYnVmLCAiJWQiLAorCQkJCQkJbGNkX3JlZnJlc2hfcmF0ZXNbaV0pOwogCQkJCQlmKys7CiAJCQkJfSBlbHNlIHsKLQkJCQkJc3ByaW50ZihzdHJidWYsICIsJWQiLCBsY2RfcmVmcmVzaF9yYXRlc1tpXSk7CisJCQkJCXNwcmludGYoc3RyYnVmLCAiLCVkIiwKKwkJCQkJCWxjZF9yZWZyZXNoX3JhdGVzW2ldKTsKIAkJCQl9Ci0JCQkJc3RyY2F0KHJlZnJlc2hfcmF0ZXNfYnVmLHN0cmJ1Zik7CisJCQkJc3RyY2F0KHJlZnJlc2hfcmF0ZXNfYnVmLCBzdHJidWYpOwogCQkJfQogCQkJbSA9IG0gPDwgMTsKIAkJfQpAQCAtMzI0Nyw3ICszMzI4LDggQEAKIAkJUFJJTlRLSSgiICAgICAgIHN1cHBvcnRzIHJlZnJlc2ggcmF0ZXMgWyVzXSwgZGVmYXVsdCAlZCBIelxuIiwKIAkJCXJlZnJlc2hfcmF0ZXNfYnVmLCBsY2RfcmVmcmVzaF9yYXRlc1tkZWZhdWx0X3JlZnJlc2hfcmF0ZV0pOwogCQlwYXItPmxjZF9yZWZyZXNocmF0ZSA9IGxjZF9yZWZyZXNoX3JhdGVzW2RlZmF1bHRfcmVmcmVzaF9yYXRlXTsKLQkJLyogV2Ugbm93IG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjcnRjIHBhcmFtZXRlcnMgZm9yIHRoZQorCQkvKgorCQkgKiBXZSBub3cgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNydGMgcGFyYW1ldGVycyBmb3IgdGhlCiAJCSAqIExDRCBtb25pdG9yLiBUaGlzIGlzIHRyaWNreSwgYmVjYXVzZSB0aGV5IGFyZSBub3Qgc3RvcmVkCiAJCSAqIGluZGl2aWR1YWxseSBpbiB0aGUgQklPUy4gSW5zdGVhZCwgdGhlIEJJT1MgY29udGFpbnMgYQogCQkgKiB0YWJsZSBvZiBkaXNwbGF5IG1vZGVzIHRoYXQgd29yayBmb3IgdGhpcyBtb25pdG9yLgpAQCAtMzM4Miw3ICszNDY0LDkgQEAKIH0KICNlbmRpZiAvKiBfX2kzODZfXyAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhdHlmYl9zZXR1cF9nZW5lcmljKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGludCBfX2RldmluaXQgYXR5ZmJfc2V0dXBfZ2VuZXJpYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1MTYgdG1wOwpAQCAtMzQyOSwxMCArMzUxMywxMiBAQAogCQlnb3RvIGF0eWZiX3NldHVwX2dlbmVyaWNfZmFpbDsKIAl9CiAKLQlpZigocmV0ID0gY29ycmVjdF9jaGlwc2V0KHBhcikpKQorCXJldCA9IGNvcnJlY3RfY2hpcHNldChwYXIpOworCWlmIChyZXQpCiAJCWdvdG8gYXR5ZmJfc2V0dXBfZ2VuZXJpY19mYWlsOwogI2lmZGVmIF9faTM4Nl9fCi0JaWYoKHJldCA9IGluaXRfZnJvbV9iaW9zKHBhcikpKQorCXJldCA9IGluaXRfZnJvbV9iaW9zKHBhcik7CisJaWYgKHJldCkKIAkJZ290byBhdHlmYl9zZXR1cF9nZW5lcmljX2ZhaWw7CiAjZW5kaWYKIAlpZiAoIShhdHlfbGRfbGUzMihDUlRDX0dFTl9DTlRMLCBwYXIpICYgQ1JUQ19FWFRfRElTUF9FTikpCkBAIC0zNDU3LDcgKzM1NDMsOCBAQAogCiAjZW5kaWYgLyogIV9fc3BhcmNfXyAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhdHlmYl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdHlmYl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgcmVzX3N0YXJ0LCByZXNfc2l6ZTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKQEAgLTM0ODIsMTAgKzM1NjksMTAgQEAKIAkvKiBSZXNlcnZlIHNwYWNlICovCiAJcmVzX3N0YXJ0ID0gcnAtPnN0YXJ0OwogCXJlc19zaXplID0gcnAtPmVuZCAtIHJwLT5zdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24gKHJlc19zdGFydCwgcmVzX3NpemUsICJhdHlmYiIpKQorCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlc19zdGFydCwgcmVzX3NpemUsICJhdHlmYiIpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0gICAgICAgIC8qIEFsbG9jYXRlIGZyYW1lYnVmZmVyICovCisJLyogQWxsb2NhdGUgZnJhbWVidWZmZXIgKi8KIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdHlmYl9wYXIpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIWluZm8pIHsKIAkJUFJJTlRLRSgiYXR5ZmJfcGNpX3Byb2JlKCkgY2FuJ3QgYWxsb2MgZmJfaW5mb1xuIik7CkBAIC0zNTczLDcgKzM2NjAsOCBAQAogCWZvciAobTY0X251bSA9IDA7IG02NF9udW0gPCBtYWNoNjRfY291bnQ7IG02NF9udW0rKykgewogCQlpZiAoIXBoeXNfdm1lbWJhc2VbbTY0X251bV0gfHwgIXBoeXNfc2l6ZVttNjRfbnVtXSB8fAogCQkgICAgIXBoeXNfZ3VpcmVnYmFzZVttNjRfbnVtXSkgewotCQkgICAgUFJJTlRLSSgicGh5c18qWyVkXSBwYXJhbWV0ZXJzIG5vdCBzZXQgPT4gcmV0dXJuaW5nIGVhcmx5LiBcbiIsIG02NF9udW0pOworCQkJUFJJTlRLSSgicGh5c18qWyVkXSBwYXJhbWV0ZXJzIG5vdCBzZXQgPT4gIgorCQkJCSJyZXR1cm5pbmcgZWFybHkuIFxuIiwgbTY0X251bSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zNTg5LDggKzM2NzcsOCBAQAogCQlwYXItPmlycSA9ICh1bnNpZ25lZCBpbnQpIC0xOyAvKiBzb21ldGhpbmcgaW52YWxpZCAqLwogCiAJCS8qCi0JCSAqICBNYXAgdGhlIHZpZGVvIG1lbW9yeSAocGh5c2ljYWwgYWRkcmVzcyBnaXZlbikgdG8gc29tZXdoZXJlIGluIHRoZQotCQkgKiAga2VybmVsIGFkZHJlc3Mgc3BhY2UuCisJCSAqIE1hcCB0aGUgdmlkZW8gbWVtb3J5IChwaHlzaWNhbCBhZGRyZXNzIGdpdmVuKQorCQkgKiB0byBzb21ld2hlcmUgaW4gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgogCQkgKi8KIAkJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwKHBoeXNfdm1lbWJhc2VbbTY0X251bV0sIHBoeXNfc2l6ZVttNjRfbnVtXSk7CiAJCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaW5mby0+c2NyZWVuX2Jhc2U7IC8qIEZha2UhICovCkBAIC0zNjYxLDEyICszNzQ5LDEyIEBACiAKICNpZmRlZiBDT05GSUdfTVRSUgogCWlmIChwYXItPm10cnJfcmVnID49IDApIHsKLQkgICAgbXRycl9kZWwocGFyLT5tdHJyX3JlZywgMCwgMCk7Ci0JICAgIHBhci0+bXRycl9yZWcgPSAtMTsKKwkJbXRycl9kZWwocGFyLT5tdHJyX3JlZywgMCwgMCk7CisJCXBhci0+bXRycl9yZWcgPSAtMTsKIAl9CiAJaWYgKHBhci0+bXRycl9hcGVyID49IDApIHsKLQkgICAgbXRycl9kZWwocGFyLT5tdHJyX2FwZXIsIDAsIDApOwotCSAgICBwYXItPm10cnJfYXBlciA9IC0xOworCQltdHJyX2RlbChwYXItPm10cnJfYXBlciwgMCwgMCk7CisJCXBhci0+bXRycl9hcGVyID0gLTE7CiAJfQogI2VuZGlmCiAjaWZuZGVmIF9fc3BhcmNfXwpAQCAtMzkwMCwyOSArMzk4OCwyOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdHlmYl9pbml0KHZvaWQpCiB7Ci0gICAgaW50IGVycjEgPSAxLCBlcnIyID0gMTsKKwlpbnQgZXJyMSA9IDEsIGVycjIgPSAxOwogI2lmbmRlZiBNT0RVTEUKLSAgICBjaGFyICpvcHRpb24gPSBOVUxMOworCWNoYXIgKm9wdGlvbiA9IE5VTEw7CiAKLSAgICBpZiAoZmJfZ2V0X29wdGlvbnMoImF0eWZiIiwgJm9wdGlvbikpCi0JcmV0dXJuIC1FTk9ERVY7Ci0gICAgYXR5ZmJfc2V0dXAob3B0aW9uKTsKKwlpZiAoZmJfZ2V0X29wdGlvbnMoImF0eWZiIiwgJm9wdGlvbikpCisJCXJldHVybiAtRU5PREVWOworCWF0eWZiX3NldHVwKG9wdGlvbik7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0kKLSAgICBlcnIxID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXR5ZmJfZHJpdmVyKTsKKwllcnIxID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXR5ZmJfZHJpdmVyKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19BVEFSSQotICAgIGVycjIgPSBhdHlmYl9hdGFyaV9wcm9iZSgpOworCWVycjIgPSBhdHlmYl9hdGFyaV9wcm9iZSgpOwogI2VuZGlmCiAKLSAgICBpZiAoZXJyMSAmJiBlcnIyKQotCXJldHVybiAtRU5PREVWOworCWlmIChlcnIxICYmIGVycjIpCisJCXJldHVybiAtRU5PREVWOwogCi0gICAgaWYgKGRtaV9jaGVja19zeXN0ZW0oYXR5ZmJfcmVib290X2lkcykpCi0JcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZhdHlmYl9yZWJvb3Rfbm90aWZpZXIpOworCWlmIChkbWlfY2hlY2tfc3lzdGVtKGF0eWZiX3JlYm9vdF9pZHMpKQorCQlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmF0eWZiX3JlYm9vdF9ub3RpZmllcik7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF0eWZiX2V4aXQodm9pZCkKQEAgLTM5NTEsOCArNDAzOSw3IEBACiBtb2R1bGVfcGFyYW0oeGNsaywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoeGNsaywgImludDogb3ZlcnJpZGUgYWNjZWxlcmF0ZWQgZW5naW5lIGNsb2NrIik7CiBtb2R1bGVfcGFyYW0oY29tcF9zeW5jLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhjb21wX3N5bmMsCi0JCSAiU2V0IGNvbXBvc2l0ZSBzeW5jIHNpZ25hbCB0byBsb3cgKDApIG9yIGhpZ2ggKDEpIik7CitNT0RVTEVfUEFSTV9ERVNDKGNvbXBfc3luYywgIlNldCBjb21wb3NpdGUgc3luYyBzaWduYWwgdG8gbG93ICgwKSBvciBoaWdoICgxKSIpOwogbW9kdWxlX3BhcmFtKG1vZGUsIGNoYXJwLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobW9kZSwgIlNwZWNpZnkgcmVzb2x1dGlvbiBhcyBcIjx4cmVzPng8eXJlcz5bLTxicHA+XVtAPHJlZnJlc2g+XVwiICIpOwogI2lmZGVmIENPTkZJR19NVFJSCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKaW5kZXggMzc4ZjI3Ny4uYTY5OWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwpAQCAtNzE1LDggKzcxNSwxMSBAQAogCQkJfQogCQkJLyogTW9kZSBvcHRpb24gKG9ubHkgb3B0aW9uIHRoYXQgc3RhcnQgd2l0aCBkaWdpdCkgKi8KIAkJCWVsc2UgaWYgKGlzZGlnaXQodGhpc19vcHRbMF0pKSB7Ci0JCQkJbW9kZSA9IGttYWxsb2Moc3RybGVuKHRoaXNfb3B0KSArIDEsIEdGUF9LRVJORUwpOwotCQkJCXN0cm5jcHkobW9kZSwgdGhpc19vcHQsIHN0cmxlbih0aGlzX29wdCkgKyAxKTsKKwkJCQltb2RlID0ga3N0cmR1cCh0aGlzX29wdCwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFtb2RlKSB7CisJCQkJCXByaW50X2VycigibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIik7CisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCX0KIAkJCX0KIAkJCS8qIFVuc3VwcG9ydGVkIG9wdGlvbiAqLwogCQkJZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCmluZGV4IGY4YTRiYjIuLjIyMTFhODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCkBAIC02MzksMyArNjM5LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiTENEIGFuZCBiYWNrbGlnaHQgZHJpdmVyIGZvciBTSEFSUCBDN3gwL0N4eDAwIik7CiBNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOmNvcmdpLWxjZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHR2MzUwcXYuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMKaW5kZXggMmViMjA2Yi4uNDYzMWNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHR2MzUwcXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jCkBAIC0zMjgsMyArMzI4LDQgQEAKIE1PRFVMRV9BVVRIT1IoIkhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIExUVjM1MFFWIExDRCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygic3BpOmx0djM1MHF2Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90ZG8yNG0uYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3RkbzI0bS5jCmluZGV4IDUxNDIyZmMuLmJiZmI1MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3RkbzI0bS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3RkbzI0bS5jCkBAIC00NzIsMyArNDcyLDQgQEAKIE1PRFVMRV9BVVRIT1IoIkVyaWMgTWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFRvcHBvbHkgVERPMjRNIExDRCBQYW5lbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJzcGk6dGRvMjRtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9sY2QuYwppbmRleCBiN2ZiYzc1Li41MGVjMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfbGNkLmMKQEAgLTMwMCw0ICszMDAsNCBAQAogTU9EVUxFX0FVVEhPUigiRG1pdHJ5IEJhcnlzaGtvdiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJMQ0QvQmFja2xpZ2h0IGNvbnRyb2wgZm9yIFNoYXJwIFNMLTYwMDAgUERBIik7Ci0KK01PRFVMRV9BTElBUygic3BpOnRvc2EtbGNkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC92Z2cyNDMyYTQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3ZnZzI0MzJhNC5jCmluZGV4IDhlNjUzYjguLmI0OTA2M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3ZnZzI0MzJhNC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3ZnZzI0MzJhNC5jCkBAIC0yODAsNSArMjgwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIkJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVkdHMjQzMkE0IExDRCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLQotCitNT0RVTEVfQUxJQVMoInNwaTpWR0cyNDMyQTQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2ZiY29weWFyZWEuYyBiL2RyaXZlcnMvdmlkZW8vY2ZiY29weWFyZWEuYwppbmRleCBkZjAzZjM3Li43OWU1ZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NmYmNvcHlhcmVhLmMKKysrIGIvZHJpdmVycy92aWRlby9jZmJjb3B5YXJlYS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJCQlkMCA+Pj0gcmlnaHQ7CiAJCQl9IGVsc2UgaWYgKHNyY19pZHgrbiA8PSBiaXRzKSB7CiAJCQkJLy8gU2luZ2xlIHNvdXJjZSB3b3JkCi0JCQkJZDAgPDw9IGxlZnQ7OworCQkJCWQwIDw8PSBsZWZ0OwogCQkJfSBlbHNlIHsKIAkJCQkvLyAyIHNvdXJjZSB3b3JkcwogCQkJCWQxID0gRkJfUkVBREwoc3JjICsgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYwppbmRleCA2OTg2NGIxLi42YjdjOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMKQEAgLTI1LDcgKzI1LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJaW50IGksIG9mZnNldCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKLQlpbnQgd2lkdGggPSAodmMtPnZjX2ZvbnQud2lkdGggKyA3KSA+PiAzOworCWludCB3aWR0aCA9IERJVl9ST1VORF9VUCh2Yy0+dmNfZm9udC53aWR0aCwgOCk7CiAJdW5zaWduZWQgaW50IGNlbGxzaXplID0gdmMtPnZjX2ZvbnQuaGVpZ2h0ICogd2lkdGg7CiAJdTggYzsKIApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCSAgICAgIGludCBmZywgaW50IGJnKQogewogCXN0cnVjdCBmYl9pbWFnZSBpbWFnZTsKLQl1MzIgd2lkdGggPSAodmMtPnZjX2ZvbnQud2lkdGggKyA3KS84OworCXUzMiB3aWR0aCA9IERJVl9ST1VORF9VUCh2Yy0+dmNfZm9udC53aWR0aCwgOCk7CiAJdTMyIGNlbGxzaXplID0gd2lkdGggKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJdTMyIG1heGNudCA9IGluZm8tPnBpeG1hcC5zaXplL2NlbGxzaXplOwogCXUzMiBzY2FuX2FsaWduID0gaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gLSAxOwpAQCAtMTczLDcgKzE3Myw3IEBACiAJCQljbnQgPSBjb3VudDsKIAogCQlpbWFnZS53aWR0aCA9IHZjLT52Y19mb250LndpZHRoICogY250OwotCQlwaXRjaCA9ICgoaW1hZ2Uud2lkdGggKyA3KSA+PiAzKSArIHNjYW5fYWxpZ247CisJCXBpdGNoID0gRElWX1JPVU5EX1VQKGltYWdlLndpZHRoLCA4KSArIHNjYW5fYWxpZ247CiAJCXBpdGNoICY9IH5zY2FuX2FsaWduOwogCQlzaXplID0gcGl0Y2ggKiBpbWFnZS5oZWlnaHQgKyBidWZfYWxpZ247CiAJCXNpemUgJj0gfmJ1Zl9hbGlnbjsKQEAgLTIzOSw3ICsyMzksNyBAQAogCXN0cnVjdCBmYl9jdXJzb3IgY3Vyc29yOwogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAl1bnNpZ25lZCBzaG9ydCBjaGFybWFzayA9IHZjLT52Y19oaV9mb250X21hc2sgPyAweDFmZiA6IDB4ZmY7Ci0JaW50IHcgPSAodmMtPnZjX2ZvbnQud2lkdGggKyA3KSA+PiAzLCBjOworCWludCB3ID0gRElWX1JPVU5EX1VQKHZjLT52Y19mb250LndpZHRoLCA4KSwgYzsKIAlpbnQgeSA9IHJlYWxfeShvcHMtPnAsIHZjLT52Y195KTsKIAlpbnQgYXR0cmlidXRlLCB1c2Vfc3cgPSAodmMtPnZjX2N1cnNvcl90eXBlICYgMHgxMCk7CiAJaW50IGVyciA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDNhNDQ2OTUuLjVhNjg2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIHN0YXRpYyBpbnQgZmJjb25faXNfZGVmYXVsdCA9IDE7IAogc3RhdGljIGludCBmYmNvbl9oYXNfZXhpdGVkOwogc3RhdGljIGludCBwcmltYXJ5X2RldmljZSA9IC0xOworc3RhdGljIGludCBmYmNvbl9oYXNfY29uc29sZV9iaW5kOwogCiAjaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkKIHN0YXRpYyBpbnQgbWFwX292ZXJyaWRlOwpAQCAtNTQ0LDYgKzU0NSw4IEBACiAJCQljb24yZmJfbWFwW2ldID0gLTE7CiAJCX0KIAkJaW5mb19pZHggPSAtMTsKKwl9IGVsc2UgeworCQlmYmNvbl9oYXNfY29uc29sZV9iaW5kID0gMTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtNzI1LDcgKzcyOCw3IEBACiAJCQkJICBpbnQgb2xkaWR4LCBpbnQgZm91bmQpCiB7CiAJc3RydWN0IGZiY29uX29wcyAqb3BzID0gb2xkaW5mby0+ZmJjb25fcGFyOwotCWludCBlcnIgPSAwOworCWludCBlcnIgPSAwLCByZXQ7CiAKIAlpZiAob2xkaW5mby0+ZmJvcHMtPmZiX3JlbGVhc2UgJiYKIAkgICAgb2xkaW5mby0+ZmJvcHMtPmZiX3JlbGVhc2Uob2xkaW5mbywgMCkpIHsKQEAgLTc1Miw4ICs3NTUsMTQgQEAKIAkJICBuZXdpbmZvIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4gVGh1cywgYSBjYWxsIHRvCiAJCSAgZmJfc2V0X3BhcigpIG1heSBiZSBuZWVkZWQgZm9yIHRoZSBuZXdpbmZvLgogCQkqLwotCQlpZiAobmV3aW5mby0+ZmJvcHMtPmZiX3NldF9wYXIpCi0JCQluZXdpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcihuZXdpbmZvKTsKKwkJaWYgKG5ld2luZm8tPmZib3BzLT5mYl9zZXRfcGFyKSB7CisJCQlyZXQgPSBuZXdpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcihuZXdpbmZvKTsKKworCQkJaWYgKHJldCkKKwkJCQlwcmludGsoS0VSTl9FUlIgImNvbjJmYl9yZWxlYXNlX29sZGluZm86ICIKKwkJCQkJImRldGVjdGVkIHVuaGFuZGxlZCBmYl9zZXRfcGFyIGVycm9yLCAiCisJCQkJCSJlcnJvciBjb2RlICVkXG4iLCByZXQpOworCQl9CiAJfQogCiAJcmV0dXJuIGVycjsKQEAgLTc2MywxMSArNzcyLDE4IEBACiAJCQkJaW50IHVuaXQsIGludCBzaG93X2xvZ28pCiB7CiAJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCWludCByZXQ7CiAKIAlvcHMtPmN1cnJjb24gPSBmZ19jb25zb2xlOwogCi0JaWYgKGluZm8tPmZib3BzLT5mYl9zZXRfcGFyICYmICEob3BzLT5mbGFncyAmIEZCQ09OX0ZMQUdTX0lOSVQpKQotCQlpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcihpbmZvKTsKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIgJiYgIShvcHMtPmZsYWdzICYgRkJDT05fRkxBR1NfSU5JVCkpIHsKKwkJcmV0ID0gaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIoaW5mbyk7CisKKwkJaWYgKHJldCkKKwkJCXByaW50ayhLRVJOX0VSUiAiY29uMmZiX2luaXRfZGlzcGxheTogZGV0ZWN0ZWQgIgorCQkJCSJ1bmhhbmRsZWQgZmJfc2V0X3BhciBlcnJvciwgIgorCQkJCSJlcnJvciBjb2RlICVkXG4iLCByZXQpOworCX0KIAogCW9wcy0+ZmxhZ3MgfD0gRkJDT05fRkxBR1NfSU5JVDsKIAlvcHMtPmdyYXBoaWNzID0gMDsKQEAgLTEwMDYsNyArMTAyMiw3IEBACiAJc3RydWN0IHZjX2RhdGEgKnN2YyA9ICpkZWZhdWx0X21vZGU7CiAJc3RydWN0IGRpc3BsYXkgKnQsICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJaW50IGxvZ28gPSAxLCBuZXdfcm93cywgbmV3X2NvbHMsIHJvd3MsIGNvbHMsIGNoYXJjbnQgPSAyNTY7Ci0JaW50IGNhcDsKKwlpbnQgY2FwLCByZXQ7CiAKIAlpZiAoaW5mb19pZHggPT0gLTEgfHwgaW5mbyA9PSBOVUxMKQogCSAgICByZXR1cm47CkBAIC0xMDkyLDggKzExMDgsMTUgQEAKIAkgKi8KIAlpZiAoQ09OX0lTX1ZJU0lCTEUodmMpICYmIHZjLT52Y19tb2RlID09IEtEX1RFWFQpIHsKIAkJaWYgKGluZm8tPmZib3BzLT5mYl9zZXRfcGFyICYmCi0JCSAgICAhKG9wcy0+ZmxhZ3MgJiBGQkNPTl9GTEFHU19JTklUKSkKLQkJCWluZm8tPmZib3BzLT5mYl9zZXRfcGFyKGluZm8pOworCQkgICAgIShvcHMtPmZsYWdzICYgRkJDT05fRkxBR1NfSU5JVCkpIHsKKwkJCXJldCA9IGluZm8tPmZib3BzLT5mYl9zZXRfcGFyKGluZm8pOworCisJCQlpZiAocmV0KQorCQkJCXByaW50ayhLRVJOX0VSUiAiZmJjb25faW5pdDogZGV0ZWN0ZWQgIgorCQkJCQkidW5oYW5kbGVkIGZiX3NldF9wYXIgZXJyb3IsICIKKwkJCQkJImVycm9yIGNvZGUgJWRcbiIsIHJldCk7CisJCX0KKwogCQlvcHMtPmZsYWdzIHw9IEZCQ09OX0ZMQUdTX0lOSVQ7CiAJfQogCkBAIC0yMTE5LDcgKzIxNDIsNyBAQAogCXN0cnVjdCBmYmNvbl9vcHMgKm9wczsKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7Ci0JaW50IGksIHByZXZfY29uc29sZSwgY2hhcmNudCA9IDI1NjsKKwlpbnQgaSwgcmV0LCBwcmV2X2NvbnNvbGUsIGNoYXJjbnQgPSAyNTY7CiAKIAlpbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKIAlvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CkBAIC0yMTc0LDggKzIxOTcsMTQgQEAKIAogCWlmIChvbGRfaW5mbyAhPSBOVUxMICYmIChvbGRfaW5mbyAhPSBpbmZvIHx8CiAJCQkJIGluZm8tPmZsYWdzICYgRkJJTkZPX01JU0NfQUxXQVlTX1NFVFBBUikpIHsKLQkJaWYgKGluZm8tPmZib3BzLT5mYl9zZXRfcGFyKQotCQkJaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIoaW5mbyk7CisJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0X3BhcikgeworCQkJcmV0ID0gaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIoaW5mbyk7CisKKwkJCWlmIChyZXQpCisJCQkJcHJpbnRrKEtFUk5fRVJSICJmYmNvbl9zd2l0Y2g6IGRldGVjdGVkICIKKwkJCQkJInVuaGFuZGxlZCBmYl9zZXRfcGFyIGVycm9yLCAiCisJCQkJCSJlcnJvciBjb2RlICVkXG4iLCByZXQpOworCQl9CiAKIAkJaWYgKG9sZF9pbmZvICE9IGluZm8pCiAJCQlmYmNvbl9kZWxfY3Vyc29yX3RpbWVyKG9sZF9pbmZvKTsKQEAgLTI5MjMsNiArMjk1MiwxMCBAQAogCiAJcmV0ID0gdW5iaW5kX2Nvbl9kcml2ZXIoJmZiX2NvbiwgZmlyc3RfZmJfdmMsIGxhc3RfZmJfdmMsCiAJCQkJZmJjb25faXNfZGVmYXVsdCk7CisKKwlpZiAoIXJldCkKKwkJZmJjb25faGFzX2NvbnNvbGVfYmluZCA9IDA7CisKIAlyZXR1cm4gcmV0OwogfQogI2Vsc2UKQEAgLTI5MzYsNiArMjk2OSw5IEBACiB7CiAJaW50IGksIG5ld19pZHggPSAtMSwgcmV0ID0gMDsKIAorCWlmICghZmJjb25faGFzX2NvbnNvbGVfYmluZCkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSBmaXJzdF9mYl92YzsgaSA8PSBsYXN0X2ZiX3ZjOyBpKyspIHsKIAkJaWYgKGNvbjJmYl9tYXBbaV0gIT0gaWR4ICYmCiAJCSAgICBjb24yZmJfbWFwW2ldICE9IC0xKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbmV3cG9ydF9jb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9uZXdwb3J0X2Nvbi5jCmluZGV4IGQzMWIyMDMuLjM3NzI0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9uZXdwb3J0X2Nvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9uZXdwb3J0X2Nvbi5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAl9CiAKIAluZXdwb3J0X3hzaXplID0gbmV3cG9ydF95c2l6ZSA9IDA7Ci0JZm9yIChpID0gMDsgbGluZXRhYmxlW2kgKyAxXSAmJiAoaSA8IHNpemVvZihsaW5ldGFibGUpKTsgaSArPSAyKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGluZXRhYmxlKSAtIDEgJiYgbGluZXRhYmxlW2kgKyAxXTsgaSArPSAyKSB7CiAJCWNvbHMgPSAwOwogCQluZXdwb3J0X3ZjMl9zZXQobnByZWdzLCBWQzJfSVJFR19SQUREUiwgbGluZXRhYmxlW2ldKTsKIAkJbnByZWdzLT5zZXQuZGNibW9kZSA9IChOUE9SVF9ETU9ERV9BVkMyIHwgVkMyX1JFR0FERFJfUkFNIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwppbmRleCA1OWQ3ZDVlLi5kYTU1Y2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCkBAIC0xODAsNyArMTgwLDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogLyogc29mdHdhcmUgc2Nyb2xsYmFjayAqLwogc3RhdGljIHZvaWQgKnZnYWNvbl9zY3JvbGxiYWNrOwogc3RhdGljIGludCB2Z2Fjb25fc2Nyb2xsYmFja190YWlsOwpAQCAtNTkwLDEyICs1ODksMTQgQEAKIAogc3RhdGljIHZvaWQgdmdhY29uX2RlaW5pdChzdHJ1Y3QgdmNfZGF0YSAqYykKIHsKLQkvKiBXaGVuIGNsb3NpbmcgdGhlIGxhc3QgY29uc29sZSwgcmVzZXQgdmlkZW8gb3JpZ2luICovCi0JaWYgKCEtLXZnYWNvbl91bmlfcGFnZWRpclsxXSkgeworCS8qIFdoZW4gY2xvc2luZyB0aGUgYWN0aXZlIGNvbnNvbGUsIHJlc2V0IHZpZGVvIG9yaWdpbiAqLworCWlmIChDT05fSVNfVklTSUJMRShjKSkgewogCQljLT52Y192aXNpYmxlX29yaWdpbiA9IHZnYV92cmFtX2Jhc2U7CiAJCXZnYV9zZXRfbWVtX3RvcChjKTsKLQkJY29uX2ZyZWVfdW5pbWFwKGMpOwogCX0KKworCWlmICghLS12Z2Fjb25fdW5pX3BhZ2VkaXJbMV0pCisJCWNvbl9mcmVlX3VuaW1hcChjKTsKIAljLT52Y191bmlfcGFnZWRpcl9sb2MgPSAmYy0+dmNfdW5pX3BhZ2VkaXI7CiAJY29uX3NldF9kZWZhdWx0X3VuaW1hcChjKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmUxMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCkBAIC0wLDAgKzEsODkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBCYXNlZCBvbiB0aGUgTENEIGRyaXZlciBmb3IgVEkgQXZhbGFuY2hlIHByb2Nlc3NvcnMgd3JpdHRlbiBieQorICogQWpheSBTaW5naCBhbmQgU2hhbG9tIEhhaS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8dmlkZW8vZGE4eHgtZmIuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAiZGE4eHhfbGNkYyIKKworLyogTENEIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBMQ0RfRU5EX09GX0ZSQU1FMAkJQklUKDgpCisjZGVmaW5lIExDRF9GSUZPX1VOREVSRkxPVwkJQklUKDUpCisjZGVmaW5lIExDRF9TWU5DX0xPU1QJCQlCSVQoMikKKworLyogTENEIERNQSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRF9ETUFfQlVSU1RfU0laRSh4KQkJKCh4KSA8PCA0KQorI2RlZmluZSBMQ0RfRE1BX0JVUlNUXzEJCQkweDAKKyNkZWZpbmUgTENEX0RNQV9CVVJTVF8yCQkJMHgxCisjZGVmaW5lIExDRF9ETUFfQlVSU1RfNAkJCTB4MgorI2RlZmluZSBMQ0RfRE1BX0JVUlNUXzgJCQkweDMKKyNkZWZpbmUgTENEX0RNQV9CVVJTVF8xNgkJMHg0CisjZGVmaW5lIExDRF9FTkRfT0ZfRlJBTUVfSU5UX0VOQQlCSVQoMikKKyNkZWZpbmUgTENEX0RVQUxfRlJBTUVfQlVGRkVSX0VOQUJMRQlCSVQoMCkKKworLyogTENEIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENEX0NMS19ESVZJU09SKHgpCQkoKHgpIDw8IDgpCisjZGVmaW5lIExDRF9SQVNURVJfTU9ERQkJCTB4MDEKKworLyogTENEIFJhc3RlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRF9QQUxFVFRFX0xPQURfTU9ERSh4KQkoKHgpIDw8IDIwKQorI2RlZmluZSBQQUxFVFRFX0FORF9EQVRBCQkweDAwCisjZGVmaW5lIFBBTEVUVEVfT05MWQkJCTB4MDEKKworI2RlZmluZSBMQ0RfTU9OT184QklUX01PREUJCUJJVCg5KQorI2RlZmluZSBMQ0RfUkFTVEVSX09SREVSCQlCSVQoOCkKKyNkZWZpbmUgTENEX1RGVF9NT0RFCQkJQklUKDcpCisjZGVmaW5lIExDRF9VTkRFUkZMT1dfSU5UX0VOQQkJQklUKDYpCisjZGVmaW5lIExDRF9NT05PQ0hST01FX01PREUJCUJJVCgxKQorI2RlZmluZSBMQ0RfUkFTVEVSX0VOQUJMRQkJQklUKDApCisjZGVmaW5lIExDRF9URlRfQUxUX0VOQUJMRQkJQklUKDIzKQorI2RlZmluZSBMQ0RfU1ROXzU2NV9FTkFCTEUJCUJJVCgyNCkKKworLyogTENEIFJhc3RlciBUaW1pbmcgMiBSZWdpc3RlciAqLworI2RlZmluZSBMQ0RfQUNfQklBU19UUkFOU0lUSU9OU19QRVJfSU5UKHgpCSgoeCkgPDwgMTYpCisjZGVmaW5lIExDRF9BQ19CSUFTX0ZSRVFVRU5DWSh4KQkJKCh4KSA8PCA4KQorI2RlZmluZSBMQ0RfU1lOQ19DVFJMCQkJCUJJVCgyNSkKKyNkZWZpbmUgTENEX1NZTkNfRURHRQkJCQlCSVQoMjQpCisjZGVmaW5lIExDRF9JTlZFUlRfUElYRUxfQ0xPQ0sJCQlCSVQoMjIpCisjZGVmaW5lIExDRF9JTlZFUlRfTElORV9DTE9DSwkJCUJJVCgyMSkKKyNkZWZpbmUgTENEX0lOVkVSVF9GUkFNRV9DTE9DSwkJCUJJVCgyMCkKKworLyogTENEIEJsb2NrICovCisjZGVmaW5lICBMQ0RfQ1RSTF9SRUcJCQkJMHg0CisjZGVmaW5lICBMQ0RfU1RBVF9SRUcJCQkJMHg4CisjZGVmaW5lICBMQ0RfUkFTVEVSX0NUUkxfUkVHCQkJMHgyOAorI2RlZmluZSAgTENEX1JBU1RFUl9USU1JTkdfMF9SRUcJCTB4MkMKKyNkZWZpbmUgIExDRF9SQVNURVJfVElNSU5HXzFfUkVHCQkweDMwCisjZGVmaW5lICBMQ0RfUkFTVEVSX1RJTUlOR18yX1JFRwkJMHgzNAorI2RlZmluZSAgTENEX0RNQV9DVFJMX1JFRwkJCTB4NDAKKyNkZWZpbmUgIExDRF9ETUFfRlJNX0JVRl9CQVNFX0FERFJfMF9SRUcJMHg0NAorI2RlZmluZSAgTENEX0RNQV9GUk1fQlVGX0NFSUxJTkdfQUREUl8wX1JFRwkweDQ4CisKKyNkZWZpbmUgV1NJX1RJTUVPVVQJNTAKKyNkZWZpbmUgUEFMRVRURV9TSVpFCTI1NgorI2RlZmluZSBMRUZUX01BUkdJTgk2NAorI2RlZmluZSBSSUdIVF9NQVJHSU4JNjQKKyNkZWZpbmUgVVBQRVJfTUFSR0lOCTMyCisjZGVmaW5lIExPV0VSX01BUkdJTgkzMgorCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IGRhOHh4X2ZiX3JlZ19iYXNlOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqbGNkY19yZWdzOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsY2RjX3JlYWQodW5zaWduZWQgaW50IGFkZHIpCit7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19yYXdfcmVhZGwoZGE4eHhfZmJfcmVnX2Jhc2UgKyAoYWRkcikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGNkY193cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBkYTh4eF9mYl9yZWdfYmFzZSArIChhZGRyKSk7Cit9CisKK3N0cnVjdCBkYTh4eF9mYl9wYXIgeworCXJlc291cmNlX3NpemVfdCBwX3BhbGV0dGVfYmFzZTsKKwl1bnNpZ25lZCBjaGFyICp2X3BhbGV0dGVfYmFzZTsKKwlzdHJ1Y3QgY2xrICpsY2RjX2NsazsKKwlpbnQgaXJxOworCXVuc2lnbmVkIHNob3J0IHBzZXVkb19wYWxldHRlWzE2XTsKKwl1bnNpZ25lZCBpbnQgZGF0YWJ1Zl9zejsKKwl1bnNpZ25lZCBpbnQgcGFsZXR0ZV9zejsKK307CisKKy8qIFZhcmlhYmxlIFNjcmVlbiBJbmZvcm1hdGlvbiAqLworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBkYTh4eF9mYl92YXIgX19kZXZpbml0ZGF0YSA9IHsKKwkueG9mZnNldCA9IDAsCisJLnlvZmZzZXQgPSAwLAorCS50cmFuc3AgPSB7MCwgMCwgMH0sCisJLm5vbnN0ZCA9IDAsCisJLmFjdGl2YXRlID0gMCwKKwkuaGVpZ2h0ID0gLTEsCisJLndpZHRoID0gLTEsCisJLnBpeGNsb2NrID0gNDY2NjYsCS8qIDQ2dXMgLSBBVU8gZGlzcGxheSAqLworCS5hY2NlbF9mbGFncyA9IDAsCisJLmxlZnRfbWFyZ2luID0gTEVGVF9NQVJHSU4sCisJLnJpZ2h0X21hcmdpbiA9IFJJR0hUX01BUkdJTiwKKwkudXBwZXJfbWFyZ2luID0gVVBQRVJfTUFSR0lOLAorCS5sb3dlcl9tYXJnaW4gPSBMT1dFUl9NQVJHSU4sCisJLnN5bmMgPSAwLAorCS52bW9kZSA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZGE4eHhfZmJfZml4IF9fZGV2aW5pdGRhdGEgPSB7CisJLmlkID0gIkRBOHh4IEZCIERydiIsCisJLnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnR5cGVfYXV4ID0gMCwKKwkudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SLAorCS54cGFuc3RlcCA9IDEsCisJLnlwYW5zdGVwID0gMSwKKwkueXdyYXBzdGVwID0gMSwKKwkuYWNjZWwgPSBGQl9BQ0NFTF9OT05FCit9OworCitzdHJ1Y3QgZGE4eHhfcGFuZWwgeworCWNvbnN0IGNoYXIJbmFtZVsyNV07CS8qIEZ1bGwgbmFtZSA8dmVuZG9yPl88bW9kZWw+ICovCisJdW5zaWduZWQgc2hvcnQJd2lkdGg7CisJdW5zaWduZWQgc2hvcnQJaGVpZ2h0OworCWludAkJaGZwOwkJLyogSG9yaXpvbnRhbCBmcm9udCBwb3JjaCAqLworCWludAkJaGJwOwkJLyogSG9yaXpvbnRhbCBiYWNrIHBvcmNoICovCisJaW50CQloc3c7CQkvKiBIb3Jpem9udGFsIFN5bmMgUHVsc2UgV2lkdGggKi8KKwlpbnQJCXZmcDsJCS8qIFZlcnRpY2FsIGZyb250IHBvcmNoICovCisJaW50CQl2YnA7CQkvKiBWZXJ0aWNhbCBiYWNrIHBvcmNoICovCisJaW50CQl2c3c7CQkvKiBWZXJ0aWNhbCBTeW5jIFB1bHNlIFdpZHRoICovCisJaW50CQlweGxfY2xrOwkvKiBQaXhlbCBjbG9jayAqLworCXVuc2lnbmVkIGNoYXIJaW52ZXJ0X3B4bF9jbGs7CS8qIEludmVydCBQaXhlbCBjbG9jayAqLworfTsKKworc3RhdGljIHN0cnVjdCBkYTh4eF9wYW5lbCBrbm93bl9sY2RfcGFuZWxzW10gPSB7CisJLyogU2hhcnAgTENEMDM1UTNERzAxICovCisJWzBdID0geworCQkubmFtZSA9ICJTaGFycF9MQ0QwMzVRM0RHMDEiLAorCQkud2lkdGggPSAzMjAsCisJCS5oZWlnaHQgPSAyNDAsCisJCS5oZnAgPSA4LAorCQkuaGJwID0gNiwKKwkJLmhzdyA9IDAsCisJCS52ZnAgPSAyLAorCQkudmJwID0gMiwKKwkJLnZzdyA9IDAsCisJCS5weGxfY2xrID0gMHgxMCwKKwkJLmludmVydF9weGxfY2xrID0gMSwKKwl9LAorCS8qIFNoYXJwIExLMDQzVDFERzAxICovCisJWzFdID0geworCQkubmFtZSA9ICJTaGFycF9MSzA0M1QxREcwMSIsCisJCS53aWR0aCA9IDQ4MCwKKwkJLmhlaWdodCA9IDI3MiwKKwkJLmhmcCA9IDIsCisJCS5oYnAgPSAyLAorCQkuaHN3ID0gNDEsCisJCS52ZnAgPSAyLAorCQkudmJwID0gMiwKKwkJLnZzdyA9IDEwLAorCQkucHhsX2NsayA9IDB4MTIsCisJCS5pbnZlcnRfcHhsX2NsayA9IDAsCisJfSwKK307CisKKy8qIERpc2FibGUgdGhlIFJhc3RlciBFbmdpbmUgb2YgdGhlIExDRCBDb250cm9sbGVyICovCitzdGF0aWMgdm9pZCBsY2RfZGlzYWJsZV9yYXN0ZXIoc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9DVFJMX1JFRyk7CisJaWYgKHJlZyAmIExDRF9SQVNURVJfRU5BQkxFKQorCQlsY2RjX3dyaXRlKHJlZyAmIH5MQ0RfUkFTVEVSX0VOQUJMRSwgTENEX1JBU1RFUl9DVFJMX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9ibGl0KGludCBsb2FkX21vZGUsIHN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhcikKK3sKKwl1MzIgdG1wID0gcGFyLT5wX3BhbGV0dGVfYmFzZSArIHBhci0+ZGF0YWJ1Zl9zeiAtIDQ7CisJdTMyIHJlZzsKKworCS8qIFVwZGF0ZSB0aGUgZGF0YWJ1ZiBpbiB0aGUgaHcuICovCisJbGNkY193cml0ZShwYXItPnBfcGFsZXR0ZV9iYXNlLCBMQ0RfRE1BX0ZSTV9CVUZfQkFTRV9BRERSXzBfUkVHKTsKKwlsY2RjX3dyaXRlKHRtcCwgTENEX0RNQV9GUk1fQlVGX0NFSUxJTkdfQUREUl8wX1JFRyk7CisKKwkvKiBTdGFydCB0aGUgRE1BLiAqLworCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKwlyZWcgJj0gfigzIDw8IDIwKTsKKwlpZiAobG9hZF9tb2RlID09IExPQURfREFUQSkKKwkJcmVnIHw9IExDRF9QQUxFVFRFX0xPQURfTU9ERShQQUxFVFRFX0FORF9EQVRBKTsKKwllbHNlIGlmIChsb2FkX21vZGUgPT0gTE9BRF9QQUxFVFRFKQorCQlyZWcgfD0gTENEX1BBTEVUVEVfTE9BRF9NT0RFKFBBTEVUVEVfT05MWSk7CisKKwlsY2RjX3dyaXRlKHJlZywgTENEX1JBU1RFUl9DVFJMX1JFRyk7Cit9CisKKy8qIENvbmZpZ3VyZSB0aGUgQnVyc3QgU2l6ZSBvZiBETUEgKi8KK3N0YXRpYyBpbnQgbGNkX2NmZ19kbWEoaW50IGJ1cnN0X3NpemUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGxjZGNfcmVhZChMQ0RfRE1BX0NUUkxfUkVHKSAmIDB4MDAwMDAwMDE7CisJc3dpdGNoIChidXJzdF9zaXplKSB7CisJY2FzZSAxOgorCQlyZWcgfD0gTENEX0RNQV9CVVJTVF9TSVpFKExDRF9ETUFfQlVSU1RfMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVnIHw9IExDRF9ETUFfQlVSU1RfU0laRShMQ0RfRE1BX0JVUlNUXzIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXJlZyB8PSBMQ0RfRE1BX0JVUlNUX1NJWkUoTENEX0RNQV9CVVJTVF80KTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlyZWcgfD0gTENEX0RNQV9CVVJTVF9TSVpFKExDRF9ETUFfQlVSU1RfOCk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXJlZyB8PSBMQ0RfRE1BX0JVUlNUX1NJWkUoTENEX0RNQV9CVVJTVF8xNik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlsY2RjX3dyaXRlKHJlZywgTENEX0RNQV9DVFJMX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGNkX2NmZ19hY19iaWFzKGludCBwZXJpb2QsIGludCB0cmFuc2l0aW9uc19wZXJfaW50KQoreworCXUzMiByZWc7CisKKwkvKiBTZXQgdGhlIEFDIEJpYXMgUGVyaW9kIGFuZCBOdW1iZXIgb2YgVHJhbnNpc2l0b25zIHBlciBJbnRlcnJ1cHQgKi8KKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9USU1JTkdfMl9SRUcpICYgMHhGRkYwMDAwMDsKKwlyZWcgfD0gTENEX0FDX0JJQVNfRlJFUVVFTkNZKHBlcmlvZCkgfAorCQlMQ0RfQUNfQklBU19UUkFOU0lUSU9OU19QRVJfSU5UKHRyYW5zaXRpb25zX3Blcl9pbnQpOworCWxjZGNfd3JpdGUocmVnLCBMQ0RfUkFTVEVSX1RJTUlOR18yX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9jZmdfaG9yaXpvbnRhbF9zeW5jKGludCBiYWNrX3BvcmNoLCBpbnQgcHVsc2Vfd2lkdGgsCisJCWludCBmcm9udF9wb3JjaCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfVElNSU5HXzBfUkVHKSAmIDB4ZjsKKwlyZWcgfD0gKChiYWNrX3BvcmNoICYgMHhmZikgPDwgMjQpCisJICAgIHwgKChmcm9udF9wb3JjaCAmIDB4ZmYpIDw8IDE2KQorCSAgICB8ICgocHVsc2Vfd2lkdGggJiAweDNmKSA8PCAxMCk7CisJbGNkY193cml0ZShyZWcsIExDRF9SQVNURVJfVElNSU5HXzBfUkVHKTsKK30KKworc3RhdGljIHZvaWQgbGNkX2NmZ192ZXJ0aWNhbF9zeW5jKGludCBiYWNrX3BvcmNoLCBpbnQgcHVsc2Vfd2lkdGgsCisJCWludCBmcm9udF9wb3JjaCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfVElNSU5HXzFfUkVHKSAmIDB4M2ZmOworCXJlZyB8PSAoKGJhY2tfcG9yY2ggJiAweGZmKSA8PCAyNCkKKwkgICAgfCAoKGZyb250X3BvcmNoICYgMHhmZikgPDwgMTYpCisJICAgIHwgKChwdWxzZV93aWR0aCAmIDB4M2YpIDw8IDEwKTsKKwlsY2RjX3dyaXRlKHJlZywgTENEX1JBU1RFUl9USU1JTkdfMV9SRUcpOworfQorCitzdGF0aWMgaW50IGxjZF9jZmdfZGlzcGxheShjb25zdCBzdHJ1Y3QgbGNkX2N0cmxfY29uZmlnICpjZmcpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKSAmIH4oTENEX1RGVF9NT0RFIHwKKwkJCQkJCUxDRF9NT05PXzhCSVRfTU9ERSB8CisJCQkJCQlMQ0RfTU9OT0NIUk9NRV9NT0RFKTsKKworCXN3aXRjaCAoY2ZnLT5wX2Rpc3BfcGFuZWwtPnBhbmVsX3NoYWRlKSB7CisJY2FzZSBNT05PQ0hST01FOgorCQlyZWcgfD0gTENEX01PTk9DSFJPTUVfTU9ERTsKKwkJaWYgKGNmZy0+bW9ub184Yml0X21vZGUpCisJCQlyZWcgfD0gTENEX01PTk9fOEJJVF9NT0RFOworCQlicmVhazsKKwljYXNlIENPTE9SX0FDVElWRToKKwkJcmVnIHw9IExDRF9URlRfTU9ERTsKKwkJaWYgKGNmZy0+dGZ0X2FsdF9tb2RlKQorCQkJcmVnIHw9IExDRF9URlRfQUxUX0VOQUJMRTsKKwkJYnJlYWs7CisKKwljYXNlIENPTE9SX1BBU1NJVkU6CisJCWlmIChjZmctPnN0bl81NjVfbW9kZSkKKwkJCXJlZyB8PSBMQ0RfU1ROXzU2NV9FTkFCTEU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZW5hYmxlIGFkZGl0aW9uYWwgaW50ZXJydXB0cyBoZXJlICovCisJcmVnIHw9IExDRF9VTkRFUkZMT1dfSU5UX0VOQTsKKworCWxjZGNfd3JpdGUocmVnLCBMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKworCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX1RJTUlOR18yX1JFRyk7CisKKwlpZiAoY2ZnLT5zeW5jX2N0cmwpCisJCXJlZyB8PSBMQ0RfU1lOQ19DVFJMOworCWVsc2UKKwkJcmVnICY9IH5MQ0RfU1lOQ19DVFJMOworCisJaWYgKGNmZy0+c3luY19lZGdlKQorCQlyZWcgfD0gTENEX1NZTkNfRURHRTsKKwllbHNlCisJCXJlZyAmPSB+TENEX1NZTkNfRURHRTsKKworCWlmIChjZmctPmludmVydF9saW5lX2Nsb2NrKQorCQlyZWcgfD0gTENEX0lOVkVSVF9MSU5FX0NMT0NLOworCWVsc2UKKwkJcmVnICY9IH5MQ0RfSU5WRVJUX0xJTkVfQ0xPQ0s7CisKKwlpZiAoY2ZnLT5pbnZlcnRfZnJtX2Nsb2NrKQorCQlyZWcgfD0gTENEX0lOVkVSVF9GUkFNRV9DTE9DSzsKKwllbHNlCisJCXJlZyAmPSB+TENEX0lOVkVSVF9GUkFNRV9DTE9DSzsKKworCWxjZGNfd3JpdGUocmVnLCBMQ0RfUkFTVEVSX1RJTUlOR18yX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsY2RfY2ZnX2ZyYW1lX2J1ZmZlcihzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKKwkJdTMyIGJwcCwgdTMyIHJhc3Rlcl9vcmRlcikKK3sKKwl1MzIgYnBsLCByZWc7CisKKwkvKiBEaXNhYmxlIER1YWwgRnJhbWUgQnVmZmVyLiAqLworCXJlZyA9IGxjZGNfcmVhZChMQ0RfRE1BX0NUUkxfUkVHKTsKKwlsY2RjX3dyaXRlKHJlZyAmIH5MQ0RfRFVBTF9GUkFNRV9CVUZGRVJfRU5BQkxFLAorCQkJCQkJTENEX0RNQV9DVFJMX1JFRyk7CisJLyogU2V0IHRoZSBQYW5lbCBXaWR0aCAqLworCS8qIFBpeGVscyBwZXIgbGluZSA9IChQUEwgKyAxKSoxNiAqLworCS8qMHgzRiBpbiBiaXRzIDQuLjkgZ2l2ZXMgbWF4IGhvcmlzb250YWwgcmVzb2x1dGlvbiA9IDEwMjQgcGl4ZWxzKi8KKwl3aWR0aCAmPSAweDNmMDsKKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9USU1JTkdfMF9SRUcpOworCXJlZyAmPSAweGZmZmZmYzAwOworCXJlZyB8PSAoKHdpZHRoID4+IDQpIC0gMSkgPDwgNDsKKwlsY2RjX3dyaXRlKHJlZywgTENEX1JBU1RFUl9USU1JTkdfMF9SRUcpOworCisJLyogU2V0IHRoZSBQYW5lbCBIZWlnaHQgKi8KKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9USU1JTkdfMV9SRUcpOworCXJlZyA9ICgoaGVpZ2h0IC0gMSkgJiAweDNmZikgfCAocmVnICYgMHhmZmZmZmMwMCk7CisJbGNkY193cml0ZShyZWcsIExDRF9SQVNURVJfVElNSU5HXzFfUkVHKTsKKworCS8qIFNldCB0aGUgUmFzdGVyIE9yZGVyIG9mIHRoZSBGcmFtZSBCdWZmZXIgKi8KKwlyZWcgPSBsY2RjX3JlYWQoTENEX1JBU1RFUl9DVFJMX1JFRykgJiB+KDEgPDwgOCk7CisJaWYgKHJhc3Rlcl9vcmRlcikKKwkJcmVnIHw9IExDRF9SQVNURVJfT1JERVI7CisJbGNkY193cml0ZShyZWcsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworCisJc3dpdGNoIChicHApIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDE2OgorCQlwYXItPnBhbGV0dGVfc3ogPSAxNiAqIDI7CisJCWJyZWFrOworCisJY2FzZSA4OgorCQlwYXItPnBhbGV0dGVfc3ogPSAyNTYgKiAyOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJwbCA9IHdpZHRoICogYnBwIC8gODsKKwlwYXItPmRhdGFidWZfc3ogPSBoZWlnaHQgKiBicGwgKyBwYXItPnBhbGV0dGVfc3o7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisJCQkgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgc2hvcnQgKnBhbGV0dGUgPSAodW5zaWduZWQgc2hvcnQgKilwYXItPnZfcGFsZXR0ZV9iYXNlOworCXVfc2hvcnQgcGFsOworCisJaWYgKHJlZ25vID4gMjU1KQorCQlyZXR1cm4gMTsKKworCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikKKwkJcmV0dXJuIDE7CisKKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDgpIHsKKwkJcmVkID4+PSA0OworCQlncmVlbiA+Pj0gODsKKwkJYmx1ZSA+Pj0gMTI7CisKKwkJcGFsID0gKHJlZCAmIDB4MGYwMCk7CisJCXBhbCB8PSAoZ3JlZW4gJiAweDAwZjApOworCQlwYWwgfD0gKGJsdWUgJiAweDAwMGYpOworCisJCXBhbGV0dGVbcmVnbm9dID0gcGFsOworCisJfSBlbHNlIGlmICgoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDE2KSAmJiByZWdubyA8IDE2KSB7CisJCXJlZCA+Pj0gKDE2IC0gaW5mby0+dmFyLnJlZC5sZW5ndGgpOworCQlyZWQgPDw9IGluZm8tPnZhci5yZWQub2Zmc2V0OworCisJCWdyZWVuID4+PSAoMTYgLSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwkJZ3JlZW4gPDw9IGluZm8tPnZhci5ncmVlbi5vZmZzZXQ7CisKKwkJYmx1ZSA+Pj0gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKwkJYmx1ZSA8PD0gaW5mby0+dmFyLmJsdWUub2Zmc2V0OworCisJCXBhci0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gcmVkIHwgZ3JlZW4gfCBibHVlOworCisJCXBhbGV0dGVbMF0gPSAweDQwMDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9yZXNldChzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIpCit7CisJLyogRGlzYWJsZSB0aGUgUmFzdGVyIGlmIHByZXZpb3VzbHkgRW5hYmxlZCAqLworCWlmIChsY2RjX3JlYWQoTENEX1JBU1RFUl9DVFJMX1JFRykgJiBMQ0RfUkFTVEVSX0VOQUJMRSkKKwkJbGNkX2Rpc2FibGVfcmFzdGVyKHBhcik7CisKKwkvKiBETUEgaGFzIHRvIGJlIGRpc2FibGVkICovCisJbGNkY193cml0ZSgwLCBMQ0RfRE1BX0NUUkxfUkVHKTsKKwlsY2RjX3dyaXRlKDAsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworfQorCitzdGF0aWMgaW50IGxjZF9pbml0KHN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhciwgY29uc3Qgc3RydWN0IGxjZF9jdHJsX2NvbmZpZyAqY2ZnLAorCQlzdHJ1Y3QgZGE4eHhfcGFuZWwgKnBhbmVsKQoreworCXUzMiBicHA7CisJaW50IHJldCA9IDA7CisKKwlsY2RfcmVzZXQocGFyKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgTENEIGNsb2NrIGRpdmlzb3IuICovCisJbGNkY193cml0ZShMQ0RfQ0xLX0RJVklTT1IocGFuZWwtPnB4bF9jbGspIHwKKwkJCShMQ0RfUkFTVEVSX01PREUgJiAweDEpLCBMQ0RfQ1RSTF9SRUcpOworCisJaWYgKHBhbmVsLT5pbnZlcnRfcHhsX2NsaykKKwkJbGNkY193cml0ZSgobGNkY19yZWFkKExDRF9SQVNURVJfVElNSU5HXzJfUkVHKSB8CisJCQlMQ0RfSU5WRVJUX1BJWEVMX0NMT0NLKSwgTENEX1JBU1RFUl9USU1JTkdfMl9SRUcpOworCWVsc2UKKwkJbGNkY193cml0ZSgobGNkY19yZWFkKExDRF9SQVNURVJfVElNSU5HXzJfUkVHKSAmCisJCQl+TENEX0lOVkVSVF9QSVhFTF9DTE9DSyksIExDRF9SQVNURVJfVElNSU5HXzJfUkVHKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgRE1BIGJ1cnN0IHNpemUuICovCisJcmV0ID0gbGNkX2NmZ19kbWEoY2ZnLT5kbWFfYnVyc3Rfc3opOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ29uZmlndXJlIHRoZSBBQyBiaWFzIHByb3BlcnRpZXMuICovCisJbGNkX2NmZ19hY19iaWFzKGNmZy0+YWNfYmlhcywgY2ZnLT5hY19iaWFzX2ludHJwdCk7CisKKwkvKiBDb25maWd1cmUgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHN5bmMgcHJvcGVydGllcy4gKi8KKwlsY2RfY2ZnX3ZlcnRpY2FsX3N5bmMocGFuZWwtPnZicCwgcGFuZWwtPnZzdywgcGFuZWwtPnZmcCk7CisJbGNkX2NmZ19ob3Jpem9udGFsX3N5bmMocGFuZWwtPmhicCwgcGFuZWwtPmhzdywgcGFuZWwtPmhmcCk7CisKKwkvKiBDb25maWd1cmUgZm9yIGRpc3BseSAqLworCXJldCA9IGxjZF9jZmdfZGlzcGxheShjZmcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKFFWR0EgIT0gY2ZnLT5wX2Rpc3BfcGFuZWwtPnBhbmVsX3R5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNmZy0+YnBwIDw9IGNmZy0+cF9kaXNwX3BhbmVsLT5tYXhfYnBwICYmCisJICAgIGNmZy0+YnBwID49IGNmZy0+cF9kaXNwX3BhbmVsLT5taW5fYnBwKQorCQlicHAgPSBjZmctPmJwcDsKKwllbHNlCisJCWJwcCA9IGNmZy0+cF9kaXNwX3BhbmVsLT5tYXhfYnBwOworCWlmIChicHAgPT0gMTIpCisJCWJwcCA9IDE2OworCXJldCA9IGxjZF9jZmdfZnJhbWVfYnVmZmVyKHBhciwgKHVuc2lnbmVkIGludClwYW5lbC0+d2lkdGgsCisJCQkJKHVuc2lnbmVkIGludClwYW5lbC0+aGVpZ2h0LCBicHAsCisJCQkJY2ZnLT5yYXN0ZXJfb3JkZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ29uZmlndXJlIEZERCAqLworCWxjZGNfd3JpdGUoKGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKSAmIDB4ZmZmMDBmZmYpIHwKKwkJICAgICAgIChjZmctPmZkZCA8PCAxMiksIExDRF9SQVNURVJfQ1RSTF9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsY2RjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwl1MzIgc3RhdCA9IGxjZGNfcmVhZChMQ0RfU1RBVF9SRUcpOworCXUzMiByZWc7CisKKwlpZiAoKHN0YXQgJiBMQ0RfU1lOQ19MT1NUKSAmJiAoc3RhdCAmIExDRF9GSUZPX1VOREVSRkxPVykpIHsKKwkJcmVnID0gbGNkY19yZWFkKExDRF9SQVNURVJfQ1RSTF9SRUcpOworCQlsY2RjX3dyaXRlKHJlZyAmIH5MQ0RfUkFTVEVSX0VOQUJMRSwgTENEX1JBU1RFUl9DVFJMX1JFRyk7CisJCWxjZGNfd3JpdGUoc3RhdCwgTENEX1NUQVRfUkVHKTsKKwkJbGNkY193cml0ZShyZWcgfCBMQ0RfUkFTVEVSX0VOQUJMRSwgTENEX1JBU1RFUl9DVFJMX1JFRyk7CisJfSBlbHNlCisJCWxjZGNfd3JpdGUoc3RhdCwgTENEX1NUQVRfUkVHKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMToKKwljYXNlIDg6CisJCXZhci0+cmVkLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDg7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDQ7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gNDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxNjoJCS8qIFJHQiA1NjUgKi8KKwkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAxMTsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwl2YXItPmdyZWVuLm1zYl9yaWdodCA9IDA7CisJdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7CisJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwlpZiAoaW5mbykgeworCQlzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwkJaWYgKGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKSAmIExDRF9SQVNURVJfRU5BQkxFKQorCQkJbGNkX2Rpc2FibGVfcmFzdGVyKHBhcik7CisJCWxjZGNfd3JpdGUoMCwgTENEX1JBU1RFUl9DVFJMX1JFRyk7CisKKwkJLyogZGlzYWJsZSBETUEgICovCisJCWxjZGNfd3JpdGUoMCwgTENEX0RNQV9DVFJMX1JFRyk7CisKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgcGFyLT5kYXRhYnVmX3N6ICsgUEFHRV9TSVpFLAorCQkJCQlpbmZvLT5zY3JlZW5fYmFzZSwKKwkJCQkJaW5mby0+Zml4LnNtZW1fc3RhcnQpOworCQlmcmVlX2lycShwYXItPmlycSwgcGFyKTsKKwkJY2xrX2Rpc2FibGUocGFyLT5sY2RjX2Nsayk7CisJCWNsa19wdXQocGFyLT5sY2RjX2Nsayk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRhOHh4X2ZiX3JlZ19iYXNlKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGxjZGNfcmVncy0+c3RhcnQsIHJlc291cmNlX3NpemUobGNkY19yZWdzKSk7CisKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCisJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBsY2Rfc3luY19hcmcgc3luY19hcmc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRkJJT0dFVF9DT05UUkFTVDoKKwljYXNlIEZCSU9QVVRfQ09OVFJBU1Q6CisJY2FzZSBGQklHRVRfQlJJR0hUTkVTUzoKKwljYXNlIEZCSVBVVF9CUklHSFRORVNTOgorCWNhc2UgRkJJR0VUX0NPTE9SOgorCWNhc2UgRkJJUFVUX0NPTE9SOgorCQlyZXR1cm4gLUVOT1RUWTsKKwljYXNlIEZCSVBVVF9IU1lOQzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzeW5jX2FyZywgKGNoYXIgKilhcmcsCisJCQkJc2l6ZW9mKHN0cnVjdCBsY2Rfc3luY19hcmcpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlsY2RfY2ZnX2hvcml6b250YWxfc3luYyhzeW5jX2FyZy5iYWNrX3BvcmNoLAorCQkJCQlzeW5jX2FyZy5wdWxzZV93aWR0aCwKKwkJCQkJc3luY19hcmcuZnJvbnRfcG9yY2gpOworCQlicmVhazsKKwljYXNlIEZCSVBVVF9WU1lOQzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzeW5jX2FyZywgKGNoYXIgKilhcmcsCisJCQkJc2l6ZW9mKHN0cnVjdCBsY2Rfc3luY19hcmcpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlsY2RfY2ZnX3ZlcnRpY2FsX3N5bmMoc3luY19hcmcuYmFja19wb3JjaCwKKwkJCQkJc3luY19hcmcucHVsc2Vfd2lkdGgsCisJCQkJCXN5bmNfYXJnLmZyb250X3BvcmNoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBkYTh4eF9mYl9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX2NoZWNrX3ZhciA9IGZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0Y29scmVnID0gZmJfc2V0Y29scmVnLAorCS5mYl9pb2N0bCA9IGZiX2lvY3RsLAorCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGRhOHh4X2xjZGNfcGxhdGZvcm1fZGF0YSAqZmJfcGRhdGEgPQorCQkJCQkJZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbGNkX2N0cmxfY29uZmlnICpsY2RfY2ZnOworCXN0cnVjdCBkYTh4eF9wYW5lbCAqbGNkY19pbmZvOworCXN0cnVjdCBmYl9pbmZvICpkYTh4eF9mYl9pbmZvOworCXN0cnVjdCBjbGsgKmZiX2NsayA9IE5VTEw7CisJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyOworCXJlc291cmNlX3NpemVfdCBsZW47CisJaW50IHJldCwgaTsKKworCWlmIChmYl9wZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiQ2FuIG5vdCBnZXQgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWxjZGNfcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXZpY2UsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWxjZGNfcmVncykgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwKKwkJCSJDYW4gbm90IGdldCBtZW1vcnkgcmVzb3VyY2UgZm9yIExDRCBjb250cm9sbGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJbGVuID0gcmVzb3VyY2Vfc2l6ZShsY2RjX3JlZ3MpOworCisJbGNkY19yZWdzID0gcmVxdWVzdF9tZW1fcmVnaW9uKGxjZGNfcmVncy0+c3RhcnQsIGxlbiwgbGNkY19yZWdzLT5uYW1lKTsKKwlpZiAoIWxjZGNfcmVncykKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRhOHh4X2ZiX3JlZ19iYXNlID0gKHJlc291cmNlX3NpemVfdClpb3JlbWFwKGxjZGNfcmVncy0+c3RhcnQsIGxlbik7CisJaWYgKCFkYTh4eF9mYl9yZWdfYmFzZSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlcXVlc3RfbWVtOworCX0KKworCWZiX2NsayA9IGNsa19nZXQoJmRldmljZS0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGZiX2NsaykpIHsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJDYW4gbm90IGdldCBkZXZpY2UgY2xvY2tcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKwlyZXQgPSBjbGtfZW5hYmxlKGZiX2Nsayk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xrX3B1dDsKKworCWZvciAoaSA9IDAsIGxjZGNfaW5mbyA9IGtub3duX2xjZF9wYW5lbHM7CisJCWkgPCBBUlJBWV9TSVpFKGtub3duX2xjZF9wYW5lbHMpOworCQlpKyssIGxjZGNfaW5mbysrKSB7CisJCWlmIChzdHJjbXAoZmJfcGRhdGEtPnR5cGUsIGxjZGNfaW5mby0+bmFtZSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IEFSUkFZX1NJWkUoa25vd25fbGNkX3BhbmVscykpIHsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJHTENEOiBObyB2YWxpZCBwYW5lbCBmb3VuZFxuIik7CisJCXJldCA9IEVOT0RFVjsKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJfSBlbHNlCisJCWRldl9pbmZvKCZkZXZpY2UtPmRldiwgIkdMQ0Q6IEZvdW5kICVzIHBhbmVsXG4iLAorCQkJCQlmYl9wZGF0YS0+dHlwZSk7CisKKwlsY2RfY2ZnID0gKHN0cnVjdCBsY2RfY3RybF9jb25maWcgKilmYl9wZGF0YS0+Y29udHJvbGxlcl9kYXRhOworCisJZGE4eHhfZmJfaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgZGE4eHhfZmJfcGFyKSwKKwkJCQkJJmRldmljZS0+ZGV2KTsKKwlpZiAoIWRhOHh4X2ZiX2luZm8pIHsKKwkJZGV2X2RiZygmZGV2aWNlLT5kZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGZiX2luZm9cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9CisKKwlwYXIgPSBkYTh4eF9mYl9pbmZvLT5wYXI7CisKKwlpZiAobGNkX2luaXQocGFyLCBsY2RfY2ZnLCBsY2RjX2luZm8pIDwgMCkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgImxjZF9pbml0IGZhaWxlZFxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CisJfQorCisJLyogYWxsb2NhdGUgZnJhbWUgYnVmZmVyICovCisJZGE4eHhfZmJfaW5mby0+c2NyZWVuX2Jhc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwKKwkJCQkJcGFyLT5kYXRhYnVmX3N6ICsgUEFHRV9TSVpFLAorCQkJCQkocmVzb3VyY2Vfc2l6ZV90ICopCisJCQkJCSZkYTh4eF9mYl9pbmZvLT5maXguc21lbV9zdGFydCwKKwkJCQkJR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCisJaWYgKCFkYTh4eF9mYl9pbmZvLT5zY3JlZW5fYmFzZSkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwKKwkJCSJHTENEOiBrbWFsbG9jIGZvciBmcmFtZSBidWZmZXIgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfcmVsZWFzZV9mYjsKKwl9CisKKwkvKiBtb3ZlIHBhbGV0dGUgYmFzZSBwb2ludGVyIGJ5IChQQUdFX1NJWkUgLSBwYWxldHRlX3N6KSBieXRlcyAqLworCXBhci0+dl9wYWxldHRlX2Jhc2UgPSBkYTh4eF9mYl9pbmZvLT5zY3JlZW5fYmFzZSArCisJCQkJKFBBR0VfU0laRSAtIHBhci0+cGFsZXR0ZV9zeik7CisJcGFyLT5wX3BhbGV0dGVfYmFzZSA9IGRhOHh4X2ZiX2luZm8tPmZpeC5zbWVtX3N0YXJ0ICsKKwkJCQkoUEFHRV9TSVpFIC0gcGFyLT5wYWxldHRlX3N6KTsKKworCS8qIHRoZSByZXN0IG9mIHRoZSBmcmFtZSBidWZmZXIgaXMgcGl4ZWwgZGF0YSAqLworCWRhOHh4X2ZiX2ZpeC5zbWVtX3N0YXJ0ID0gcGFyLT5wX3BhbGV0dGVfYmFzZSArIHBhci0+cGFsZXR0ZV9zejsKKwlkYTh4eF9mYl9maXguc21lbV9sZW4gPSBwYXItPmRhdGFidWZfc3ogLSBwYXItPnBhbGV0dGVfc3o7CisJZGE4eHhfZmJfZml4LmxpbmVfbGVuZ3RoID0gKGxjZGNfaW5mby0+d2lkdGggKiBsY2RfY2ZnLT5icHApIC8gODsKKworCXBhci0+bGNkY19jbGsgPSBmYl9jbGs7CisKKwlwYXItPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2aWNlLCAwKTsKKwlpZiAocGFyLT5pcnEgPCAwKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX3JlbGVhc2VfZmJfbWVtOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHBhci0+aXJxLCBsY2RjX2lycV9oYW5kbGVyLCAwLCBEUklWRVJfTkFNRSwgcGFyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWxlYXNlX2ZiX21lbTsKKworCS8qIEluaXRpYWxpemUgcGFyICovCisJZGE4eHhfZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gbGNkX2NmZy0+YnBwOworCisJZGE4eHhfZmJfdmFyLnhyZXMgPSBsY2RjX2luZm8tPndpZHRoOworCWRhOHh4X2ZiX3Zhci54cmVzX3ZpcnR1YWwgPSBsY2RjX2luZm8tPndpZHRoOworCisJZGE4eHhfZmJfdmFyLnlyZXMgPSBsY2RjX2luZm8tPmhlaWdodDsKKwlkYTh4eF9mYl92YXIueXJlc192aXJ0dWFsID0gbGNkY19pbmZvLT5oZWlnaHQ7CisKKwlkYTh4eF9mYl92YXIuZ3JheXNjYWxlID0KKwkgICAgbGNkX2NmZy0+cF9kaXNwX3BhbmVsLT5wYW5lbF9zaGFkZSA9PSBNT05PQ0hST01FID8gMSA6IDA7CisJZGE4eHhfZmJfdmFyLmJpdHNfcGVyX3BpeGVsID0gbGNkX2NmZy0+YnBwOworCisJZGE4eHhfZmJfdmFyLmhzeW5jX2xlbiA9IGxjZGNfaW5mby0+aHN3OworCWRhOHh4X2ZiX3Zhci52c3luY19sZW4gPSBsY2RjX2luZm8tPnZzdzsKKworCS8qIEluaXRpYWxpemUgZmJpbmZvICovCisJZGE4eHhfZmJfaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOworCWRhOHh4X2ZiX2luZm8tPmZpeCA9IGRhOHh4X2ZiX2ZpeDsKKwlkYTh4eF9mYl9pbmZvLT52YXIgPSBkYTh4eF9mYl92YXI7CisJZGE4eHhfZmJfaW5mby0+ZmJvcHMgPSAmZGE4eHhfZmJfb3BzOworCWRhOHh4X2ZiX2luZm8tPnBzZXVkb19wYWxldHRlID0gcGFyLT5wc2V1ZG9fcGFsZXR0ZTsKKworCXJldCA9IGZiX2FsbG9jX2NtYXAoJmRhOHh4X2ZiX2luZm8tPmNtYXAsIFBBTEVUVEVfU0laRSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwkvKiBGaXJzdCBwYWxldHRlX3N6IGJ5dGUgb2YgdGhlIGZyYW1lIGJ1ZmZlciBpcyB0aGUgcGFsZXR0ZSAqLworCWRhOHh4X2ZiX2luZm8tPmNtYXAubGVuID0gcGFyLT5wYWxldHRlX3N6OworCisJLyogRmx1c2ggdGhlIGJ1ZmZlciB0byB0aGUgc2NyZWVuLiAqLworCWxjZF9ibGl0KExPQURfREFUQSwgcGFyKTsKKworCS8qIGluaXRpYWxpemUgdmFyX3NjcmVlbmluZm8gKi8KKwlkYTh4eF9mYl92YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9GT1JDRTsKKwlmYl9zZXRfdmFyKGRhOHh4X2ZiX2luZm8sICZkYTh4eF9mYl92YXIpOworCisJZGV2X3NldF9kcnZkYXRhKCZkZXZpY2UtPmRldiwgZGE4eHhfZmJfaW5mbyk7CisJLyogUmVnaXN0ZXIgdGhlIEZyYW1lIEJ1ZmZlciAgKi8KKwlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoZGE4eHhfZmJfaW5mbykgPCAwKSB7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2LAorCQkJIkdMQ0Q6IEZyYW1lIEJ1ZmZlciBSZWdpc3RyYXRpb24gRmFpbGVkIVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2RlYWxsb2NfY21hcDsKKwl9CisKKwkvKiBlbmFibGUgcmFzdGVyIGVuZ2luZSAqLworCWxjZGNfd3JpdGUobGNkY19yZWFkKExDRF9SQVNURVJfQ1RSTF9SRUcpIHwKKwkJCUxDRF9SQVNURVJfRU5BQkxFLCBMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKworCXJldHVybiAwOworCitlcnJfZGVhbGxvY19jbWFwOgorCWZiX2RlYWxsb2NfY21hcCgmZGE4eHhfZmJfaW5mby0+Y21hcCk7CisKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShwYXItPmlycSwgcGFyKTsKKworZXJyX3JlbGVhc2VfZmJfbWVtOgorCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHBhci0+ZGF0YWJ1Zl9zeiArIFBBR0VfU0laRSwKKwkJCQlkYTh4eF9mYl9pbmZvLT5zY3JlZW5fYmFzZSwKKwkJCQlkYTh4eF9mYl9pbmZvLT5maXguc21lbV9zdGFydCk7CisKK2Vycl9yZWxlYXNlX2ZiOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoZGE4eHhfZmJfaW5mbyk7CisKK2Vycl9jbGtfZGlzYWJsZToKKwljbGtfZGlzYWJsZShmYl9jbGspOworCitlcnJfY2xrX3B1dDoKKwljbGtfcHV0KGZiX2Nsayk7CisKK2Vycl9pb3JlbWFwOgorCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRhOHh4X2ZiX3JlZ19iYXNlKTsKKworZXJyX3JlcXVlc3RfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihsY2RjX3JlZ3MtPnN0YXJ0LCBsZW4pOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCSByZXR1cm4gLUVCVVNZOworfQorc3RhdGljIGludCBmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCSByZXR1cm4gLUVCVVNZOworfQorI2Vsc2UKKyNkZWZpbmUgZmJfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGZiX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGE4eHhfZmJfZHJpdmVyID0geworCS5wcm9iZSA9IGZiX3Byb2JlLAorCS5yZW1vdmUgPSBmYl9yZW1vdmUsCisJLnN1c3BlbmQgPSBmYl9zdXNwZW5kLAorCS5yZXN1bWUgPSBmYl9yZXN1bWUsCisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYTh4eF9mYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGE4eHhfZmJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRhOHh4X2ZiX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGE4eHhfZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGE4eHhfZmJfaW5pdCk7Cittb2R1bGVfZXhpdChkYTh4eF9mYl9jbGVhbnVwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIFRJIGRhOHh4L29tYXAtbDF4eCIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZXA5M3h4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOWQ0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jCkBAIC0wLDAgKzEsNjQ2IEBACisvKgorICogbGludXgvZHJpdmVycy92aWRlby9lcDkzeHgtZmIuYworICoKKyAqIEZyYW1lYnVmZmVyIHN1cHBvcnQgZm9yIHRoZSBFUDkzeHggc2VyaWVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBCbHVld2F0ZXIgU3lzdGVtcyBMdGQKKyAqIEF1dGhvcjogUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSCBIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20+CisgKgorICogQmFzZWQgb24gdGhlIENpcnJ1cyBMb2dpYyBlcDkzeHhmYiBkcml2ZXIsIGFuZCB2YXJpb3VzIG90aGVyIGVwOTN4eGZiCisgKiBkcml2ZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKKyNpbmNsdWRlIDxtYWNoL2ZiLmg+CisKKy8qIFZlcnRpY2FsIEZyYW1lIFRpbWluZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVA5M1hYRkJfVkxJTkVTX1RPVEFMCQkJMHgwMDAwCS8qIFNXIGxvY2tlZCAqLworI2RlZmluZSBFUDkzWFhGQl9WU1lOQwkJCQkweDAwMDQJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX1ZBQ1RJVkUJCQkweDAwMDgJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX1ZCTEFOSwkJCQkweDAyMjgJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX1ZDTEsJCQkJMHgwMDBjCS8qIFNXIGxvY2tlZCAqLworCisvKiBIb3Jpem9udGFsIEZyYW1lIFRpbWluZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVA5M1hYRkJfSENMS1NfVE9UQUwJCQkweDAwMTAJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX0hTWU5DCQkJCTB4MDAxNAkvKiBTVyBsb2NrZWQgKi8KKyNkZWZpbmUgRVA5M1hYRkJfSEFDVElWRQkJCTB4MDAxOAkvKiBTVyBsb2NrZWQgKi8KKyNkZWZpbmUgRVA5M1hYRkJfSEJMQU5LCQkJCTB4MDIyYwkvKiBTVyBsb2NrZWQgKi8KKyNkZWZpbmUgRVA5M1hYRkJfSENMSwkJCQkweDAwMWMJLyogU1cgbG9ja2VkICovCisKKy8qIEZyYW1lIEJ1ZmZlciBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVA5M1hYRkJfU0NSRUVOX1BBR0UJCQkweDAwMjgKKyNkZWZpbmUgRVA5M1hYRkJfU0NSRUVOX0hQQUdFCQkJMHgwMDJjCisjZGVmaW5lIEVQOTNYWEZCX1NDUkVFTl9MSU5FUwkJCTB4MDAzMAorI2RlZmluZSBFUDkzWFhGQl9MSU5FX0xFTkdUSAkJCTB4MDAzNAorI2RlZmluZSBFUDkzWFhGQl9WTElORV9TVEVQCQkJMHgwMDM4CisjZGVmaW5lIEVQOTNYWEZCX0xJTkVfQ0FSUlkJCQkweDAwM2MJLyogU1cgbG9ja2VkICovCisjZGVmaW5lIEVQOTNYWEZCX0VPTF9PRkZTRVQJCQkweDAyMzAKKworLyogT3RoZXIgVmlkZW8gUmVnaXN0ZXJzICovCisjZGVmaW5lIEVQOTNYWEZCX0JSSUdIVE5FU1MJCQkweDAwMjAKKyNkZWZpbmUgRVA5M1hYRkJfQVRUUklCUwkJCTB4MDAyNAkvKiBTVyBsb2NrZWQgKi8KKyNkZWZpbmUgRVA5M1hYRkJfU1dMT0NLCQkJCTB4MDA3YwkvKiBTVyBsb2NrZWQgKi8KKyNkZWZpbmUgRVA5M1hYRkJfQUNfUkFURQkJCTB4MDIxNAorI2RlZmluZSBFUDkzWFhGQl9GSUZPX0xFVkVMCQkJMHgwMjM0CisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMTU9ERQkJCTB4MDA1NAorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREVfMzJCUFAJCSgweDcgPDwgMCkKKyNkZWZpbmUgRVA5M1hYRkJfUElYRUxNT0RFXzI0QlBQCQkoMHg2IDw8IDApCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMTU9ERV8xNkJQUAkJKDB4NCA8PCAwKQorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREVfOEJQUAkJCSgweDIgPDwgMCkKKyNkZWZpbmUgRVA5M1hYRkJfUElYRUxNT0RFX1NISUZUXzFQXzI0QgkJKDB4MCA8PCAzKQorI2RlZmluZSBFUDkzWFhGQl9QSVhFTE1PREVfU0hJRlRfMVBfMThCCQkoMHgxIDw8IDMpCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMTU9ERV9DT0xPUl9MVVQJCSgweDAgPDwgMTApCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMTU9ERV9DT0xPUl84ODgJCSgweDQgPDwgMTApCisjZGVmaW5lIEVQOTNYWEZCX1BJWEVMTU9ERV9DT0xPUl81NTUJCSgweDUgPDwgMTApCisjZGVmaW5lIEVQOTNYWEZCX1BBUkxfSUZfT1VUCQkJMHgwMDU4CisjZGVmaW5lIEVQOTNYWEZCX1BBUkxfSUZfSU4JCQkweDAwNWMKKworLyogQmxpbmsgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVA5M1hYRkJfQkxJTktfUkFURQkJCTB4MDA0MAorI2RlZmluZSBFUDkzWFhGQl9CTElOS19NQVNLCQkJMHgwMDQ0CisjZGVmaW5lIEVQOTNYWEZCX0JMSU5LX1BBVFRSTgkJCTB4MDA0OAorI2RlZmluZSBFUDkzWFhGQl9QQVRUUk5fTUFTSwkJCTB4MDA0YworI2RlZmluZSBFUDkzWFhGQl9CS0dSTkRfT0ZGU0VUCQkJMHgwMDUwCisKKy8qIEhhcmR3YXJlIEN1cnNvciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVA5M1hYRkJfQ1VSU09SX0FEUl9TVEFSVAkJMHgwMDYwCisjZGVmaW5lIEVQOTNYWEZCX0NVUlNPUl9BRFJfUkVTRVQJCTB4MDA2NAorI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfU0laRQkJCTB4MDA2OAorI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfQ09MT1IxCQkJMHgwMDZjCisjZGVmaW5lIEVQOTNYWEZCX0NVUlNPUl9DT0xPUjIJCQkweDAwNzAKKyNkZWZpbmUgRVA5M1hYRkJfQ1VSU09SX0JMSU5LX0NPTE9SMQkJMHgwMjFjCisjZGVmaW5lIEVQOTNYWEZCX0NVUlNPUl9CTElOS19DT0xPUjIJCTB4MDIyMAorI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfWFlfTE9DCQkJMHgwMDc0CisjZGVmaW5lIEVQOTNYWEZCX0NVUlNPUl9EU0NBTl9IWV9MT0MJCTB4MDA3OAorI2RlZmluZSBFUDkzWFhGQl9DVVJTT1JfQkxJTktfUkFURV9DVFJMCQkweDAyMjQKKworLyogTFVUIFJlZ2lzdGVycyAqLworI2RlZmluZSBFUDkzWFhGQl9HUllfU0NMX0xVVFIJCQkweDAwODAKKyNkZWZpbmUgRVA5M1hYRkJfR1JZX1NDTF9MVVRHCQkJMHgwMjgwCisjZGVmaW5lIEVQOTNYWEZCX0dSWV9TQ0xfTFVUQgkJCTB4MDMwMAorI2RlZmluZSBFUDkzWFhGQl9MVVRfU1dfQ09OVFJPTAkJCTB4MDIxOAorI2RlZmluZSBFUDkzWFhGQl9MVVRfU1dfQ09OVFJPTF9TV1RDSAkJKDEgPDwgMCkKKyNkZWZpbmUgRVA5M1hYRkJfTFVUX1NXX0NPTlRST0xfU1NUQVQJCSgxIDw8IDEpCisjZGVmaW5lIEVQOTNYWEZCX0NPTE9SX0xVVAkJCTB4MDQwMAorCisvKiBWaWRlbyBTaWduYXR1cmUgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVQOTNYWEZCX1ZJRF9TSUdfUlNMVF9WQUwJCTB4MDIwMAorI2RlZmluZSBFUDkzWFhGQl9WSURfU0lHX0NUUkwJCQkweDAyMDQKKyNkZWZpbmUgRVA5M1hYRkJfVlNJRwkJCQkweDAyMDgKKyNkZWZpbmUgRVA5M1hYRkJfSFNJRwkJCQkweDAyMGMKKyNkZWZpbmUgRVA5M1hYRkJfU0lHX0NMUl9TVFIJCQkweDAyMTAKKworLyogTWluaW11bSAvIE1heGltdW0gcmVzb2x1dGlvbnMgc3VwcG9ydGVkICovCisjZGVmaW5lIEVQOTNYWEZCX01JTl9YUkVTCQkJNjQKKyNkZWZpbmUgRVA5M1hYRkJfTUlOX1lSRVMJCQk2NAorI2RlZmluZSBFUDkzWFhGQl9NQVhfWFJFUwkJCTEwMjQKKyNkZWZpbmUgRVA5M1hYRkJfTUFYX1lSRVMJCQk3NjgKKworc3RydWN0IGVwOTN4eF9mYmkgeworCXN0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm8JKm1hY2hfaW5mbzsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqcmVzOworCXZvaWQgX19pb21lbQkJCSptbWlvX2Jhc2U7CisJdW5zaWduZWQgaW50CQkJcHNldWRvX3BhbGV0dGVbMjU2XTsKK307CisKK3N0YXRpYyBpbnQgY2hlY2tfc2NyZWVucGFnZV9idWcgPSAxOworbW9kdWxlX3BhcmFtKGNoZWNrX3NjcmVlbnBhZ2VfYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjaGVja19zY3JlZW5wYWdlX2J1ZywKKwkJICJDaGVjayBmb3IgYml0IDI3IHNjcmVlbiBwYWdlIGJ1Zy4gRGVmYXVsdCA9IDEiKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXA5M3h4ZmJfcmVhZGwoc3RydWN0IGVwOTN4eF9mYmkgKmZiaSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXJldHVybiBfX3Jhd19yZWFkbChmYmktPm1taW9fYmFzZSArIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDkzeHhmYl93cml0ZWwoc3RydWN0IGVwOTN4eF9mYmkgKmZiaSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGZiaS0+bW1pb19iYXNlICsgb2ZmKTsKK30KKworLyoKKyAqIFdyaXRlIHRvIG9uZSBvZiB0aGUgbG9ja2VkIHJhc3RlciByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDkzeHhmYl9vdXRfbG9ja2VkKHN0cnVjdCBlcDkzeHhfZmJpICpmYmksCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCByZWcpCit7CisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIGEgbG9jayBvciBkZWxheSBoZXJlIHNpbmNlIHRoZSByYXN0ZXIgcmVnaXN0ZXIKKwkgKiBibG9jayB3aWxsIHJlbWFpbiB1bmxvY2tlZCB1bnRpbCB0aGUgbmV4dCBhY2Nlc3MuCisJICovCisJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgMHhhYSwgRVA5M1hYRkJfU1dMT0NLKTsKKwllcDkzeHhmYl93cml0ZWwoZmJpLCB2YWwsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eGZiX3NldF92aWRlb19hdHRyaWJzKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBlcDkzeHhfZmJpICpmYmkgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IGF0dHJpYnM7CisKKwlhdHRyaWJzID0gRVA5M1hYRkJfRU5BQkxFOworCWF0dHJpYnMgfD0gZmJpLT5tYWNoX2luZm8tPmZsYWdzOworCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCBhdHRyaWJzLCBFUDkzWFhGQl9BVFRSSUJTKTsKK30KKworc3RhdGljIGludCBlcDkzeHhmYl9zZXRfcGl4ZWxtb2RlKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBlcDkzeHhfZmJpICpmYmkgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7CisKKwlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJdmFsID0gRVA5M1hYRkJfUElYRUxNT0RFXzhCUFAgfCBFUDkzWFhGQl9QSVhFTE1PREVfQ09MT1JfTFVUIHwKKwkJCUVQOTNYWEZCX1BJWEVMTU9ERV9TSElGVF8xUF8xOEI7CisKKwkJaW5mby0+dmFyLnJlZC5vZmZzZXQJPSAwOworCQlpbmZvLT52YXIucmVkLmxlbmd0aAk9IDg7CisJCWluZm8tPnZhci5ncmVlbi5vZmZzZXQJPSAwOworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoCT0gODsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0CT0gMDsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoCT0gODsKKwkJaW5mby0+Zml4LnZpc3VhbCAJPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJCWJyZWFrOworCisJY2FzZSAxNjoKKwkJdmFsID0gRVA5M1hYRkJfUElYRUxNT0RFXzE2QlBQIHwgRVA5M1hYRkJfUElYRUxNT0RFX0NPTE9SXzU1NSB8CisJCQlFUDkzWFhGQl9QSVhFTE1PREVfU0hJRlRfMVBfMThCOworCisJCWluZm8tPnZhci5yZWQub2Zmc2V0CT0gMTE7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoCT0gNTsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldAk9IDU7CisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGgJPSA2OworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQJPSAwOworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGgJPSA1OworCQlpbmZvLT5maXgudmlzdWFsIAk9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCWJyZWFrOworCisJY2FzZSAyNDoKKwkJdmFsID0gRVA5M1hYRkJfUElYRUxNT0RFXzI0QlBQIHwgRVA5M1hYRkJfUElYRUxNT0RFX0NPTE9SXzg4OCB8CisJCQlFUDkzWFhGQl9QSVhFTE1PREVfU0hJRlRfMVBfMjRCOworCisJCWluZm8tPnZhci5yZWQub2Zmc2V0CT0gMTY7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoCT0gODsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldAk9IDg7CisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGgJPSA4OworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQJPSAwOworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGgJPSA4OworCQlpbmZvLT5maXgudmlzdWFsIAk9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCWJyZWFrOworCisJY2FzZSAzMjoKKwkJdmFsID0gRVA5M1hYRkJfUElYRUxNT0RFXzMyQlBQIHwgRVA5M1hYRkJfUElYRUxNT0RFX0NPTE9SXzg4OCB8CisJCQlFUDkzWFhGQl9QSVhFTE1PREVfU0hJRlRfMVBfMjRCOworCisJCWluZm8tPnZhci5yZWQub2Zmc2V0CT0gMTY7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoCT0gODsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldAk9IDg7CisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGgJPSA4OworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQJPSAwOworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGgJPSA4OworCQlpbmZvLT5maXgudmlzdWFsIAk9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgdmFsLCBFUDkzWFhGQl9QSVhFTE1PREUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhmYl9zZXRfdGltaW5nKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBlcDkzeHhfZmJpICpmYmkgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IHZsaW5lc190b3RhbCwgaGNsa3NfdG90YWwsIHN0YXJ0LCBzdG9wOworCisJdmxpbmVzX3RvdGFsID0gaW5mby0+dmFyLnlyZXMgKyBpbmZvLT52YXIudXBwZXJfbWFyZ2luICsKKwkJaW5mby0+dmFyLmxvd2VyX21hcmdpbiArIGluZm8tPnZhci52c3luY19sZW4gLSAxOworCisJaGNsa3NfdG90YWwgPSBpbmZvLT52YXIueHJlcyArIGluZm8tPnZhci5sZWZ0X21hcmdpbiArCisJCWluZm8tPnZhci5yaWdodF9tYXJnaW4gKyBpbmZvLT52YXIuaHN5bmNfbGVuIC0gMTsKKworCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCB2bGluZXNfdG90YWwsIEVQOTNYWEZCX1ZMSU5FU19UT1RBTCk7CisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIGhjbGtzX3RvdGFsLCBFUDkzWFhGQl9IQ0xLU19UT1RBTCk7CisKKwlzdGFydCA9IHZsaW5lc190b3RhbDsKKwlzdG9wID0gdmxpbmVzX3RvdGFsIC0gaW5mby0+dmFyLnZzeW5jX2xlbjsKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgc3RhcnQgfCAoc3RvcCA8PCAxNiksIEVQOTNYWEZCX1ZTWU5DKTsKKworCXN0YXJ0ID0gdmxpbmVzX3RvdGFsIC0gaW5mby0+dmFyLnZzeW5jX2xlbiAtIGluZm8tPnZhci51cHBlcl9tYXJnaW47CisJc3RvcCA9IGluZm8tPnZhci5sb3dlcl9tYXJnaW4gLSAxOworCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCBzdGFydCB8IChzdG9wIDw8IDE2KSwgRVA5M1hYRkJfVkJMQU5LKTsKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgc3RhcnQgfCAoc3RvcCA8PCAxNiksIEVQOTNYWEZCX1ZBQ1RJVkUpOworCisJc3RhcnQgPSB2bGluZXNfdG90YWw7CisJc3RvcCA9IHZsaW5lc190b3RhbCArIDE7CisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIHN0YXJ0IHwgKHN0b3AgPDwgMTYpLCBFUDkzWFhGQl9WQ0xLKTsKKworCXN0YXJ0ID0gaGNsa3NfdG90YWw7CisJc3RvcCA9IGhjbGtzX3RvdGFsIC0gaW5mby0+dmFyLmhzeW5jX2xlbjsKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgc3RhcnQgfCAoc3RvcCA8PCAxNiksIEVQOTNYWEZCX0hTWU5DKTsKKworCXN0YXJ0ID0gaGNsa3NfdG90YWwgLSBpbmZvLT52YXIuaHN5bmNfbGVuIC0gaW5mby0+dmFyLmxlZnRfbWFyZ2luOworCXN0b3AgPSBpbmZvLT52YXIucmlnaHRfbWFyZ2luIC0gMTsKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgc3RhcnQgfCAoc3RvcCA8PCAxNiksIEVQOTNYWEZCX0hCTEFOSyk7CisJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIHN0YXJ0IHwgKHN0b3AgPDwgMTYpLCBFUDkzWFhGQl9IQUNUSVZFKTsKKworCXN0YXJ0ID0gaGNsa3NfdG90YWw7CisJc3RvcCA9IGhjbGtzX3RvdGFsOworCWVwOTN4eGZiX291dF9sb2NrZWQoZmJpLCBzdGFydCB8IChzdG9wIDw8IDE2KSwgRVA5M1hYRkJfSENMSyk7CisKKwllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgMHgwLCBFUDkzWFhGQl9MSU5FX0NBUlJZKTsKK30KKworc3RhdGljIGludCBlcDkzeHhmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBlcDkzeHhfZmJpICpmYmkgPSBpbmZvLT5wYXI7CisKKwljbGtfc2V0X3JhdGUoZmJpLT5jbGssIDEwMDAgKiBQSUNPUzJLSFooaW5mby0+dmFyLnBpeGNsb2NrKSk7CisKKwllcDkzeHhmYl9zZXRfdGltaW5nKGluZm8pOworCisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqCisJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDg7CisKKwllcDkzeHhmYl93cml0ZWwoZmJpLCBpbmZvLT5maXguc21lbV9zdGFydCwgRVA5M1hYRkJfU0NSRUVOX1BBR0UpOworCWVwOTN4eGZiX3dyaXRlbChmYmksIGluZm8tPnZhci55cmVzIC0gMSwgRVA5M1hYRkJfU0NSRUVOX0xJTkVTKTsKKwllcDkzeHhmYl93cml0ZWwoZmJpLCAoKGluZm8tPnZhci54cmVzICogaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKQorCQkJICAgICAgLyAzMikgLSAxLCBFUDkzWFhGQl9MSU5FX0xFTkdUSCk7CisJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgaW5mby0+Zml4LmxpbmVfbGVuZ3RoIC8gNCwgRVA5M1hYRkJfVkxJTkVfU1RFUCk7CisJZXA5M3h4ZmJfc2V0X3ZpZGVvX2F0dHJpYnMoaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4ZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IGVycjsKKworCWVyciA9IGVwOTN4eGZiX3NldF9waXhlbG1vZGUoaW5mbyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZhci0+eHJlcyA9IG1heF90KHVuc2lnbmVkIGludCwgdmFyLT54cmVzLCBFUDkzWFhGQl9NSU5fWFJFUyk7CisJdmFyLT54cmVzID0gbWluX3QodW5zaWduZWQgaW50LCB2YXItPnhyZXMsIEVQOTNYWEZCX01BWF9YUkVTKTsKKwl2YXItPnhyZXNfdmlydHVhbCA9IG1heCh2YXItPnhyZXNfdmlydHVhbCwgdmFyLT54cmVzKTsKKworCXZhci0+eXJlcyA9IG1heF90KHVuc2lnbmVkIGludCwgdmFyLT55cmVzLCBFUDkzWFhGQl9NSU5fWVJFUyk7CisJdmFyLT55cmVzID0gbWluX3QodW5zaWduZWQgaW50LCB2YXItPnlyZXMsIEVQOTNYWEZCX01BWF9ZUkVTKTsKKwl2YXItPnlyZXNfdmlydHVhbCA9IG1heCh2YXItPnlyZXNfdmlydHVhbCwgdmFyLT55cmVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwOTN4eGZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisKKwlpZiAob2Zmc2V0IDwgaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXJldHVybiBkbWFfbW1hcF93cml0ZWNvbWJpbmUoaW5mby0+ZGV2LCB2bWEsIGluZm8tPnNjcmVlbl9iYXNlLAorCQkJCQkgICAgIGluZm8tPmZpeC5zbWVtX3N0YXJ0LAorCQkJCQkgICAgIGluZm8tPmZpeC5zbWVtX2xlbik7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4ZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBlcDkzeHhfZmJpICpmYmkgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IGF0dHJpYnMgPSBlcDkzeHhmYl9yZWFkbChmYmksIEVQOTNYWEZCX0FUVFJJQlMpOworCisJaWYgKGJsYW5rX21vZGUpIHsKKwkJaWYgKGZiaS0+bWFjaF9pbmZvLT5ibGFuaykKKwkJCWZiaS0+bWFjaF9pbmZvLT5ibGFuayhibGFua19tb2RlLCBpbmZvKTsKKwkJZXA5M3h4ZmJfb3V0X2xvY2tlZChmYmksIGF0dHJpYnMgJiB+RVA5M1hYRkJfRU5BQkxFLAorCQkJCSAgICBFUDkzWFhGQl9BVFRSSUJTKTsKKwkJY2xrX2Rpc2FibGUoZmJpLT5jbGspOworCX0gZWxzZSB7CisJCWNsa19lbmFibGUoZmJpLT5jbGspOworCQllcDkzeHhmYl9vdXRfbG9ja2VkKGZiaSwgYXR0cmlicyB8IEVQOTNYWEZCX0VOQUJMRSwKKwkJCQkgICAgRVA5M1hYRkJfQVRUUklCUyk7CisJCWlmIChmYmktPm1hY2hfaW5mby0+YmxhbmspCisJCQlmYmktPm1hY2hfaW5mby0+YmxhbmsoYmxhbmtfbW9kZSwgaW5mbyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVwOTN4eGZiX2NvbnZlcnRfY29sb3IoaW50IHZhbCwgaW50IHdpZHRoKQoreworCXJldHVybiAoKHZhbCA8PCB3aWR0aCkgKyAweDdmZmYgLSB2YWwpID4+IDE2OworfQorCitzdGF0aWMgaW50IGVwOTN4eGZiX3NldGNvbHJlZyh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgICAgdW5zaWduZWQgaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGVwOTN4eF9mYmkgKmZiaSA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBpbnQgKnBhbCA9IGluZm8tPnBzZXVkb19wYWxldHRlOworCXVuc2lnbmVkIGludCBjdHJsLCBpLCByZ2IsIGx1dF9jdXJyZW50LCBsdXRfc3RhdDsKKworCXN3aXRjaCAoaW5mby0+Zml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX1BTRVVET0NPTE9SOgorCQlyZ2IgPSAoKHJlZCAmIDB4ZmYwMCkgPDwgOCkgfCAoZ3JlZW4gJiAweGZmMDApIHwKKwkJCSgoYmx1ZSAmIDB4ZmYwMCkgPj4gOCk7CisKKwkJcGFsW3JlZ25vXSA9IHJnYjsKKwkJZXA5M3h4ZmJfd3JpdGVsKGZiaSwgcmdiLCAoRVA5M1hYRkJfQ09MT1JfTFVUICsgKHJlZ25vIDw8IDIpKSk7CisJCWN0cmwgPSBlcDkzeHhmYl9yZWFkbChmYmksIEVQOTNYWEZCX0xVVF9TV19DT05UUk9MKTsKKwkJbHV0X3N0YXQgPSAhIShjdHJsICYgRVA5M1hYRkJfTFVUX1NXX0NPTlRST0xfU1NUQVQpOworCQlsdXRfY3VycmVudCA9ICEhKGN0cmwgJiBFUDkzWFhGQl9MVVRfU1dfQ09OVFJPTF9TV1RDSCk7CisKKwkJaWYgKGx1dF9zdGF0ID09IGx1dF9jdXJyZW50KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCQllcDkzeHhmYl93cml0ZWwoZmJpLCBwYWxbaV0sCisJCQkJCUVQOTNYWEZCX0NPTE9SX0xVVCArIChpIDw8IDIpKTsKKwkJCX0KKworCQkJZXA5M3h4ZmJfd3JpdGVsKGZiaSwKKwkJCQkJY3RybCBeIEVQOTNYWEZCX0xVVF9TV19DT05UUk9MX1NXVENILAorCQkJCQlFUDkzWFhGQl9MVVRfU1dfQ09OVFJPTCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6CisJCWlmIChyZWdubyA+IDE2KQorCQkJcmV0dXJuIDE7CisKKwkJcmVkID0gZXA5M3h4ZmJfY29udmVydF9jb2xvcihyZWQsIGluZm8tPnZhci5yZWQubGVuZ3RoKTsKKwkJZ3JlZW4gPSBlcDkzeHhmYl9jb252ZXJ0X2NvbG9yKGdyZWVuLCBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwkJYmx1ZSA9IGVwOTN4eGZiX2NvbnZlcnRfY29sb3IoYmx1ZSwgaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKwkJdHJhbnNwID0gZXA5M3h4ZmJfY29udmVydF9jb2xvcih0cmFuc3AsCisJCQkJCQlpbmZvLT52YXIudHJhbnNwLmxlbmd0aCk7CisKKwkJcGFsW3JlZ25vXSA9IChyZWQgPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKKwkJCShncmVlbiA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8CisJCQkoYmx1ZSA8PCBpbmZvLT52YXIuYmx1ZS5vZmZzZXQpIHwKKwkJCSh0cmFuc3AgPDwgaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBlcDkzeHhmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIJPSBlcDkzeHhmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIJPSBlcDkzeHhmYl9zZXRfcGFyLAorCS5mYl9ibGFuawk9IGVwOTN4eGZiX2JsYW5rLAorCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCisJLmZiX3NldGNvbHJlZwk9IGVwOTN4eGZiX3NldGNvbHJlZywKKwkuZmJfbW1hcAk9IGVwOTN4eGZiX21tYXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhmYl9jYWxjX2Zic2l6ZShzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICptYWNoX2luZm8pCit7CisJaW50IGksIGZiX3NpemUgPSAwOworCisJaWYgKG1hY2hfaW5mby0+bnVtX21vZGVzID09IEVQOTNYWEZCX1VTRV9NT0RFREIpIHsKKwkJZmJfc2l6ZSA9IEVQOTNYWEZCX01BWF9YUkVTICogRVA5M1hYRkJfTUFYX1lSRVMgKgorCQkJbWFjaF9pbmZvLT5icHAgLyA4OworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBtYWNoX2luZm8tPm51bV9tb2RlczsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOworCQkJaW50IHNpemU7CisKKwkJCW1vZGUgPSAmbWFjaF9pbmZvLT5tb2Rlc1tpXTsKKwkJCXNpemUgPSBtb2RlLT54cmVzICogbW9kZS0+eXJlcyAqIG1hY2hfaW5mby0+YnBwIC8gODsKKwkJCWlmIChzaXplID4gZmJfc2l6ZSkKKwkJCQlmYl9zaXplID0gc2l6ZTsKKwkJfQorCX0KKworCXJldHVybiBmYl9zaXplOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhmYl9hbGxvY192aWRlb21lbShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpID0gaW5mby0+cGFyOworCWNoYXIgX19pb21lbSAqdmlydF9hZGRyOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCXVuc2lnbmVkIGludCBmYl9zaXplOworCisJZmJfc2l6ZSA9IGVwOTN4eGZiX2NhbGNfZmJzaXplKGZiaS0+bWFjaF9pbmZvKTsKKwl2aXJ0X2FkZHIgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKGluZm8tPmRldiwgZmJfc2l6ZSwKKwkJCQkJICAgJnBoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2aXJ0X2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBUaGVyZSBpcyBhIGJ1ZyBpbiB0aGUgZXA5M3h4IGZyYW1lYnVmZmVyIHdoaWNoIGNhdXNlcyBwcm9ibGVtcworCSAqIGlmIGJpdCAyNyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBzZXQuCisJICogU2VlOiBodHRwOi8vbWFyYy5pbmZvLz9sPWxpbnV4LWFybS1rZXJuZWwmbT0xMTAwNjEyNDU1MDIwMDAmdz0yCisJICogVGhlcmUgZG9lcyBub3Qgc2VlbSB0byBiZSBhbnkgb2ZmaWNhbCBlcnJhdGEgZm9yIHRoaXMsIGJ1dCBJCisJICogaGF2ZSBjb25maXJtZWQgdGhlIHByb2JsZW0gZXhpc3RzIG9uIG15IGhhcmR3YXJlIChlcDkzMTUpIGF0CisJICogbGVhc3QuCisJICovCisJaWYgKGNoZWNrX3NjcmVlbnBhZ2VfYnVnICYmIHBoeXNfYWRkciAmICgxIDw8IDI3KSkgeworCQlkZXZfZXJyKGluZm8tPmRldiwgImVwOTN4eCBmcmFtZWJ1ZmZlciBidWcuIHBoeXMgYWRkciAoMHgleCkgIgorCQkJImhhcyBiaXQgMjcgc2V0OiBjYW5ub3QgaW5pdCBmcmFtZWJ1ZmZlclxuIiwKKwkJCXBoeXNfYWRkcik7CisKKwkJZG1hX2ZyZWVfY29oZXJlbnQoaW5mby0+ZGV2LCBmYl9zaXplLCB2aXJ0X2FkZHIsIHBoeXNfYWRkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gcGh5c19hZGRyOworCWluZm8tPmZpeC5zbWVtX2xlbiA9IGZiX3NpemU7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSB2aXJ0X2FkZHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4ZmJfZGVhbGxvY192aWRlb21lbShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5mby0+c2NyZWVuX2Jhc2UpCisJCWRtYV9mcmVlX2NvaGVyZW50KGluZm8tPmRldiwgaW5mby0+Zml4LnNtZW1fbGVuLAorCQkJCSAgaW5mby0+c2NyZWVuX2Jhc2UsIGluZm8tPmZpeC5zbWVtX3N0YXJ0KTsKK30KKworc3RhdGljIGludCBfX2luaXQgZXA5M3h4ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICptYWNoX2luZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWNoYXIgKnZpZGVvX21vZGU7CisJaW50IGVycjsKKworCWlmICghbWFjaF9pbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGVwOTN4eF9mYmkpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mby0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwlmYmkgPSBpbmZvLT5wYXI7CisJZmJpLT5tYWNoX2luZm8gPSBtYWNoX2luZm87CisKKwllcnIgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOworCWlmIChlcnIpCisJCWdvdG8gZmFpbGVkOworCisJZXJyID0gZXA5M3h4ZmJfYWxsb2NfdmlkZW9tZW0oaW5mbyk7CisJaWYgKGVycikKKwkJZ290byBmYWlsZWQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlmYmktPnJlcyA9IHJlczsKKwlmYmktPm1taW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWZiaS0+bW1pb19iYXNlKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJc3RyY3B5KGluZm8tPmZpeC5pZCwgcGRldi0+bmFtZSk7CisJaW5mby0+ZmJvcHMJCT0gJmVwOTN4eGZiX29wczsKKwlpbmZvLT5maXgudHlwZQkJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJaW5mby0+Zml4LmFjY2VsCQk9IEZCX0FDQ0VMX05PTkU7CisJaW5mby0+dmFyLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XOworCWluZm8tPnZhci52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOworCWluZm8tPmZsYWdzCQk9IEZCSU5GT19ERUZBVUxUOworCWluZm8tPm5vZGUJCT0gLTE7CisJaW5mby0+c3RhdGUJCT0gRkJJTkZPX1NUQVRFX1JVTk5JTkc7CisJaW5mby0+cHNldWRvX3BhbGV0dGUJPSAmZmJpLT5wc2V1ZG9fcGFsZXR0ZTsKKworCWZiX2dldF9vcHRpb25zKCJlcDkzeHgtZmIiLCAmdmlkZW9fbW9kZSk7CisJZXJyID0gZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIHZpZGVvX21vZGUsCisJCQkgICBmYmktPm1hY2hfaW5mby0+bW9kZXMsIGZiaS0+bWFjaF9pbmZvLT5udW1fbW9kZXMsCisJCQkgICBmYmktPm1hY2hfaW5mby0+ZGVmYXVsdF9tb2RlLCBmYmktPm1hY2hfaW5mby0+YnBwKTsKKwlpZiAoZXJyID09IDApIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJObyBzdWl0YWJsZSB2aWRlbyBtb2RlIGZvdW5kXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWYgKG1hY2hfaW5mby0+c2V0dXApIHsKKwkJZXJyID0gbWFjaF9pbmZvLT5zZXR1cChwZGV2KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZXA5M3h4ZmJfY2hlY2tfdmFyKCZpbmZvLT52YXIsIGluZm8pOworCWlmIChlcnIpCisJCWdvdG8gZmFpbGVkOworCisJZmJpLT5jbGsgPSBjbGtfZ2V0KGluZm8tPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihmYmktPmNsaykpIHsKKwkJZXJyID0gUFRSX0VSUihmYmktPmNsayk7CisJCWZiaS0+Y2xrID0gTlVMTDsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJZXA5M3h4ZmJfc2V0X3BhcihpbmZvKTsKKwljbGtfZW5hYmxlKGZiaS0+Y2xrKTsKKworCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChlcnIpCisJCWdvdG8gZmFpbGVkOworCisJZGV2X2luZm8oaW5mby0+ZGV2LCAicmVnaXN0ZXJlZC4gTW9kZSA9ICVkeCVkLSVkXG4iLAorCQkgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOworCXJldHVybiAwOworCitmYWlsZWQ6CisJaWYgKGZiaS0+Y2xrKQorCQljbGtfcHV0KGZiaS0+Y2xrKTsKKwlpZiAoZmJpLT5tbWlvX2Jhc2UpCisJCWlvdW5tYXAoZmJpLT5tbWlvX2Jhc2UpOworCWlmIChmYmktPnJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGZiaS0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShmYmktPnJlcykpOworCWVwOTN4eGZiX2RlYWxsb2NfdmlkZW9tZW0oaW5mbyk7CisJaWYgKCZpbmZvLT5jbWFwKQorCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCWlmIChmYmktPm1hY2hfaW5mby0+dGVhcmRvd24pCisJCWZiaS0+bWFjaF9pbmZvLT50ZWFyZG93bihwZGV2KTsKKwlrZnJlZShpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZXA5M3h4X2ZiaSAqZmJpID0gaW5mby0+cGFyOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwljbGtfZGlzYWJsZShmYmktPmNsayk7CisJY2xrX3B1dChmYmktPmNsayk7CisJaW91bm1hcChmYmktPm1taW9fYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGZiaS0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShmYmktPnJlcykpOworCWVwOTN4eGZiX2RlYWxsb2NfdmlkZW9tZW0oaW5mbyk7CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKworCWlmIChmYmktPm1hY2hfaW5mby0+dGVhcmRvd24pCisJCWZiaS0+bWFjaF9pbmZvLT50ZWFyZG93bihwZGV2KTsKKworCWtmcmVlKGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVwOTN4eGZiX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZXA5M3h4ZmJfcHJvYmUsCisJLnJlbW92ZQkJPSBlcDkzeHhmYl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZXA5M3h4LWZiIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVwOTN4eGZiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlcDkzeHhmYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXA5M3h4ZmJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlcDkzeHhmYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlcDkzeHhmYl9pbml0KTsKK21vZHVsZV9leGl0KGVwOTN4eGZiX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkVQOTNYWCBGcmFtZWJ1ZmZlciBEcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ZXA5M3h4LWZiIik7CitNT0RVTEVfQVVUSE9SKCJSeWFuIE1hbGxvbiA8cnlhbiZibHVld2F0ZXJzeXMuY29tPiwgIgorCSAgICAgICJIIEhhcnRsZXkgU3dlZXRlbiA8aHN3ZWV0ZW5AdmlzaW9uZW5ncmF2ZXJzLmNvbSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IGE4NWM4MTguLmExZjJlN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTg3MSw4ICs4NzEsOCBAQAogCQllcnIgPSAtRUlOVkFMOwogCiAJaWYgKGVyciB8fCAhaW5mby0+ZmJvcHMtPmZiX3Bhbl9kaXNwbGF5IHx8Ci0JICAgIHZhci0+eW9mZnNldCArIHlyZXMgPiBpbmZvLT52YXIueXJlc192aXJ0dWFsIHx8Ci0JICAgIHZhci0+eG9mZnNldCArIGluZm8tPnZhci54cmVzID4gaW5mby0+dmFyLnhyZXNfdmlydHVhbCkKKwkgICAgdmFyLT55b2Zmc2V0ID4gaW5mby0+dmFyLnlyZXNfdmlydHVhbCAtIHlyZXMgfHwKKwkgICAgdmFyLT54b2Zmc2V0ID4gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAtIGluZm8tPnZhci54cmVzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICgoZXJyID0gaW5mby0+ZmJvcHMtPmZiX3Bhbl9kaXNwbGF5KHZhciwgaW5mbykpKQpAQCAtOTU0LDYgKzk1NCw3IEBACiAJCQlnb3RvIGRvbmU7CiAKIAkJaWYgKCh2YXItPmFjdGl2YXRlICYgRkJfQUNUSVZBVEVfTUFTSykgPT0gRkJfQUNUSVZBVEVfTk9XKSB7CisJCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gb2xkX3ZhcjsKIAkJCXN0cnVjdCBmYl92aWRlb21vZGUgbW9kZTsKIAogCQkJaWYgKGluZm8tPmZib3BzLT5mYl9nZXRfY2FwcykgewpAQCAtOTYzLDEwICs5NjQsMjAgQEAKIAkJCQkJZ290byBkb25lOwogCQkJfQogCisJCQlvbGRfdmFyID0gaW5mby0+dmFyOwogCQkJaW5mby0+dmFyID0gKnZhcjsKIAotCQkJaWYgKGluZm8tPmZib3BzLT5mYl9zZXRfcGFyKQotCQkJCWluZm8tPmZib3BzLT5mYl9zZXRfcGFyKGluZm8pOworCQkJaWYgKGluZm8tPmZib3BzLT5mYl9zZXRfcGFyKSB7CisJCQkJcmV0ID0gaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIoaW5mbyk7CisKKwkJCQlpZiAocmV0KSB7CisJCQkJCWluZm8tPnZhciA9IG9sZF92YXI7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImRldGVjdGVkICIKKwkJCQkJCSJmYl9zZXRfcGFyIGVycm9yLCAiCisJCQkJCQkiZXJyb3IgY29kZTogJWRcbiIsIHJldCk7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisJCQl9CiAKIAkJCWZiX3Bhbl9kaXNwbGF5KGluZm8sICZpbmZvLT52YXIpOwogCQkJZmJfc2V0X2NtYXAoJmluZm8tPmNtYXAsIGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IDMwYWUzMDIuLjY2MzU4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTcxMCw3ICs3MTAsNyBAQAogCiAJZmJpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoZmJpLT5jbGspKSB7Ci0JCXJldCA9IFBUUl9FUlIoZmJpLT5jbGspOzsKKwkJcmV0ID0gUFRSX0VSUihmYmktPmNsayk7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgY2xvY2s6ICVkXG4iLCByZXQpOwogCQlnb3RvIGZhaWxlZF9nZXRjbG9jazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYwppbmRleCBkNDIzNDZlLi4wOWY2ZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmMKQEAgLTI1LDE2ICsyNSwxOSBAQAogCXJldHVybiAocCAmIDB4NDApID8gZmluIDogZmluIDw8ICgocCAmIDMpICsgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZzQ1MF9tbnAydmNvKENQTUlORk8gdW5zaWduZWQgaW50IG1ucCkgeworc3RhdGljIHVuc2lnbmVkIGludCBnNDUwX21ucDJ2Y28oY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCQkgdW5zaWduZWQgaW50IG1ucCkKK3sKIAl1bnNpZ25lZCBpbnQgbSwgbjsKIAogCW0gPSAoKG1ucCA+PiAxNikgJiAweDBGRikgKyAxOwogCW4gPSAoKG1ucCA+PiAgNykgJiAweDFGRSkgKyA0OwotCXJldHVybiAoQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcykucGxsLnJlZl9mcmVxICogbiArIChtID4+IDEpKSAvIG07CisJcmV0dXJuIChtaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxICogbiArIChtID4+IDEpKSAvIG07CiB9CiAKLXVuc2lnbmVkIGludCBnNDUwX21ucDJmKENQTUlORk8gdW5zaWduZWQgaW50IG1ucCkgewotCXJldHVybiBnNDUwX3ZjbzJmKG1ucCwgZzQ1MF9tbnAydmNvKFBNSU5GTyBtbnApKTsKK3Vuc2lnbmVkIGludCBnNDUwX21ucDJmKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVuc2lnbmVkIGludCBtbnApCit7CisJcmV0dXJuIGc0NTBfdmNvMmYobW5wLCBnNDUwX21ucDJ2Y28obWluZm8sIG1ucCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwbGxfZnJlcV9kZWx0YSh1bnNpZ25lZCBpbnQgZjEsIHVuc2lnbmVkIGludCBmMikgewpAQCAtNDksNyArNTIsMTAgQEAKICNkZWZpbmUgTk9fTU9SRV9NTlAJMHgwMUZGRkZGRgogI2RlZmluZSBHNDUwX01OUF9GUkVRQklUUwkoMHhGRkZGRkY0MykJLyogZG8gbm90IG1hc2sgaGlnaCBieXRlIHNvIHdlJ2xsIGNhdGNoIE5PX01PUkVfTU5QICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZzQ1MF9uZXh0cGxsKENQTUlORk8gY29uc3Qgc3RydWN0IG1hdHJveF9wbGxfbGltaXRzKiBwaSwgdW5zaWduZWQgaW50KiBmdmNvLCB1bnNpZ25lZCBpbnQgbW5wKSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGc0NTBfbmV4dHBsbChjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJCSBjb25zdCBzdHJ1Y3QgbWF0cm94X3BsbF9saW1pdHMgKnBpLAorCQkJCSB1bnNpZ25lZCBpbnQgKmZ2Y28sIHVuc2lnbmVkIGludCBtbnApCit7CiAJdW5zaWduZWQgaW50IG0sIG4sIHA7CiAJdW5zaWduZWQgaW50IHR2Y28gPSAqZnZjbzsKIApAQCAtOTAsMTIgKzk2LDE1IEBACiAJCX0gZWxzZSB7CiAJCQltLS07CiAJCX0KLSAgICAgICAgCW4gPSAoKHR2Y28gKiAobSsxKSArIEFDQ0VTU19GQklORk8oZmVhdHVyZXMpLnBsbC5yZWZfZnJlcSkgLyAoQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcykucGxsLnJlZl9mcmVxICogMikpIC0gMjsKKwkJbiA9ICgodHZjbyAqIChtKzEpICsgbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcSkgLyAobWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcSAqIDIpKSAtIDI7CiAJfSB3aGlsZSAobiA8IDB4MDMgfHwgbiA+IDB4N0EpOwogCXJldHVybiAobSA8PCAxNikgfCAobiA8PCA4KSB8IHA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZzQ1MF9maXJzdHBsbChDUE1JTkZPIGNvbnN0IHN0cnVjdCBtYXRyb3hfcGxsX2xpbWl0cyogcGksIHVuc2lnbmVkIGludCogdmNvLCB1bnNpZ25lZCBpbnQgZm91dCkgeworc3RhdGljIHVuc2lnbmVkIGludCBnNDUwX2ZpcnN0cGxsKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkJICBjb25zdCBzdHJ1Y3QgbWF0cm94X3BsbF9saW1pdHMgKnBpLAorCQkJCSAgdW5zaWduZWQgaW50ICp2Y28sIHVuc2lnbmVkIGludCBmb3V0KQorewogCXVuc2lnbmVkIGludCBwOwogCXVuc2lnbmVkIGludCB2Y29tYXg7CiAKQEAgLTEyMSw4OCArMTMwLDk0IEBACiAJCX0KIAkJKnZjbyA9IHR2Y287CiAJfQotCXJldHVybiBnNDUwX25leHRwbGwoUE1JTkZPIHBpLCB2Y28sIDB4RkYwMDAwIHwgcCk7CisJcmV0dXJuIGc0NTBfbmV4dHBsbChtaW5mbywgcGksIHZjbywgMHhGRjAwMDAgfCBwKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZzQ1MF9zZXRwbGwoQ1BNSU5GTyB1bnNpZ25lZCBpbnQgbW5wLCB1bnNpZ25lZCBpbnQgcGxsKSB7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnNDUwX3NldHBsbChjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW5wLCB1bnNpZ25lZCBpbnQgcGxsKQorewogCXN3aXRjaCAocGxsKSB7CiAJCWNhc2UgTV9QSVhFTF9QTExfQToKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQSVhQTExBTSwgbW5wID4+IDE2KTsKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQSVhQTExBTiwgbW5wID4+IDgpOwotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWFBMTEFQLCBtbnApOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBJWFBMTEFNLCBtbnAgPj4gMTYpOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBJWFBMTEFOLCBtbnAgPj4gOCk7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUElYUExMQVAsIG1ucCk7CiAJCQlyZXR1cm4gTTEwNjRfWFBJWFBMTFNUQVQ7CiAKIAkJY2FzZSBNX1BJWEVMX1BMTF9COgotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWFBMTEJNLCBtbnAgPj4gMTYpOwotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWFBMTEJOLCBtbnAgPj4gOCk7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYUExMQlAsIG1ucCk7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUElYUExMQk0sIG1ucCA+PiAxNik7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUElYUExMQk4sIG1ucCA+PiA4KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQSVhQTExCUCwgbW5wKTsKIAkJCXJldHVybiBNMTA2NF9YUElYUExMU1RBVDsKIAogCQljYXNlIE1fUElYRUxfUExMX0M6Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYUExMQ00sIG1ucCA+PiAxNik7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYUExMQ04sIG1ucCA+PiA4KTsKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQSVhQTExDUCwgbW5wKTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQSVhQTExDTSwgbW5wID4+IDE2KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQSVhQTExDTiwgbW5wID4+IDgpOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBJWFBMTENQLCBtbnApOwogCQkJcmV0dXJuIE0xMDY0X1hQSVhQTExTVEFUOwogCiAJCWNhc2UgTV9TWVNURU1fUExMOgotCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gREFDMTA2NF9YU1lTUExMTSwgbW5wID4+IDE2KTsKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE4sIG1ucCA+PiA4KTsKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTFAsIG1ucCk7CisJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExNLCBtbnAgPj4gMTYpOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgREFDMTA2NF9YU1lTUExMTiwgbW5wID4+IDgpOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgREFDMTA2NF9YU1lTUExMUCwgbW5wKTsKIAkJCXJldHVybiBEQUMxMDY0X1hTWVNQTExTVEFUOwogCiAJCWNhc2UgTV9WSURFT19QTEw6Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YVklEUExMTSwgbW5wID4+IDE2KTsKLQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hWSURQTExOLCBtbnAgPj4gOCk7Ci0JCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YVklEUExMUCwgbW5wKTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hWSURQTExNLCBtbnAgPj4gMTYpOworCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFZJRFBMTE4sIG1ucCA+PiA4KTsKKwkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hWSURQTExQLCBtbnApOwogCQkJcmV0dXJuIE0xMDY0X1hWSURQTExTVEFUOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZzQ1MF9jbXBwbGwoQ1BNSU5GTyB1bnNpZ25lZCBpbnQgbW5wLCB1bnNpZ25lZCBpbnQgcGxsKSB7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnNDUwX2NtcHBsbChjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW5wLCB1bnNpZ25lZCBpbnQgcGxsKQorewogCXVuc2lnbmVkIGNoYXIgbSA9IG1ucCA+PiAxNjsKIAl1bnNpZ25lZCBjaGFyIG4gPSBtbnAgPj4gODsKIAl1bnNpZ25lZCBjaGFyIHAgPSBtbnA7CiAKIAlzd2l0Y2ggKHBsbCkgewogCQljYXNlIE1fUElYRUxfUExMX0E6Ci0JCQlyZXR1cm4gKG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWFBMTEFNKSAhPSBtIHx8Ci0JCQkJbWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUElYUExMQU4pICE9IG4gfHwKLQkJCQltYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExBUCkgIT0gcCk7CisJCQlyZXR1cm4gKG1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWFBMTEFNKSAhPSBtIHx8CisJCQkJbWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YUElYUExMQU4pICE9IG4gfHwKKwkJCQltYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExBUCkgIT0gcCk7CiAKIAkJY2FzZSBNX1BJWEVMX1BMTF9COgotCQkJcmV0dXJuIChtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExCTSkgIT0gbSB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWFBMTEJOKSAhPSBuIHx8Ci0JCQkJbWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUElYUExMQlApICE9IHApOworCQkJcmV0dXJuIChtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExCTSkgIT0gbSB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWFBMTEJOKSAhPSBuIHx8CisJCQkJbWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YUElYUExMQlApICE9IHApOwogCiAJCWNhc2UgTV9QSVhFTF9QTExfQzoKLQkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUElYUExMQ00pICE9IG0gfHwKLQkJCQltYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExDTikgIT0gbiB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWFBMTENQKSAhPSBwKTsKKwkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YUElYUExMQ00pICE9IG0gfHwKKwkJCQltYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExDTikgIT0gbiB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWFBMTENQKSAhPSBwKTsKIAogCQljYXNlIE1fU1lTVEVNX1BMTDoKLQkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKFBNSU5GTyBEQUMxMDY0X1hTWVNQTExNKSAhPSBtIHx8Ci0JCQkJbWF0cm94ZmJfREFDX2luKFBNSU5GTyBEQUMxMDY0X1hTWVNQTExOKSAhPSBuIHx8Ci0JCQkJbWF0cm94ZmJfREFDX2luKFBNSU5GTyBEQUMxMDY0X1hTWVNQTExQKSAhPSBwKTsKKwkJCXJldHVybiAobWF0cm94ZmJfREFDX2luKG1pbmZvLCBEQUMxMDY0X1hTWVNQTExNKSAhPSBtIHx8CisJCQkJbWF0cm94ZmJfREFDX2luKG1pbmZvLCBEQUMxMDY0X1hTWVNQTExOKSAhPSBuIHx8CisJCQkJbWF0cm94ZmJfREFDX2luKG1pbmZvLCBEQUMxMDY0X1hTWVNQTExQKSAhPSBwKTsKIAogCQljYXNlIE1fVklERU9fUExMOgotCQkJcmV0dXJuIChtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hWSURQTExNKSAhPSBtIHx8Ci0JCQkJbWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YVklEUExMTikgIT0gbiB8fAotCQkJCW1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFZJRFBMTFApICE9IHApOworCQkJcmV0dXJuIChtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hWSURQTExNKSAhPSBtIHx8CisJCQkJbWF0cm94ZmJfREFDX2luKG1pbmZvLCBNMTA2NF9YVklEUExMTikgIT0gbiB8fAorCQkJCW1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFZJRFBMTFApICE9IHApOwogCX0KIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZzQ1MF9pc3BsbGxvY2tlZChDUE1JTkZPIHVuc2lnbmVkIGludCByZWdpZHgpIHsKK3N0YXRpYyBpbmxpbmUgaW50IGc0NTBfaXNwbGxsb2NrZWQoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCQkgICB1bnNpZ25lZCBpbnQgcmVnaWR4KQorewogCXVuc2lnbmVkIGludCBqOwogCiAJZm9yIChqID0gMDsgaiA8IDEwMDA7IGorKykgewotCQlpZiAobWF0cm94ZmJfREFDX2luKFBNSU5GTyByZWdpZHgpICYgMHg0MCkgeworCQlpZiAobWF0cm94ZmJfREFDX2luKG1pbmZvLCByZWdpZHgpICYgMHg0MCkgewogCQkJdW5zaWduZWQgaW50IHIgPSAwOwogCQkJaW50IGk7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQkJCXIgKz0gbWF0cm94ZmJfREFDX2luKFBNSU5GTyByZWdpZHgpICYgMHg0MDsKKwkJCQlyICs9IG1hdHJveGZiX0RBQ19pbihtaW5mbywgcmVnaWR4KSAmIDB4NDA7CiAJCQl9CiAJCQlyZXR1cm4gciA+PSAoOTAgKiAweDQwKTsKIAkJfQpAQCAtMjExLDggKzIyNiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGc0NTBfdGVzdHBsbChDUE1JTkZPIHVuc2lnbmVkIGludCBtbnAsIHVuc2lnbmVkIGludCBwbGwpIHsKLQlyZXR1cm4gZzQ1MF9pc3BsbGxvY2tlZChQTUlORk8gZzQ1MF9zZXRwbGwoUE1JTkZPIG1ucCwgcGxsKSk7CitzdGF0aWMgaW50IGc0NTBfdGVzdHBsbChjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBpbnQgbW5wLAorCQkJdW5zaWduZWQgaW50IHBsbCkKK3sKKwlyZXR1cm4gZzQ1MF9pc3BsbGxvY2tlZChtaW5mbywgZzQ1MF9zZXRwbGwobWluZm8sIG1ucCwgcGxsKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZWh3c3RhdGVfY2xrKHN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3LCB1bnNpZ25lZCBpbnQgbW5wLCB1bnNpZ25lZCBpbnQgcGxsKSB7CkBAIC0yMjUsMTMgKzI0MiwxOSBAQAogCX0KIH0KIAotdm9pZCBtYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKFdQTUlORk8gdW5zaWduZWQgaW50IG1ucCwgdW5zaWduZWQgaW50IHBsbCkgewotCWlmIChnNDUwX2NtcHBsbChQTUlORk8gbW5wLCBwbGwpKSB7Ci0JCWc0NTBfc2V0cGxsKFBNSU5GTyBtbnAsIHBsbCk7Cit2b2lkIG1hdHJveGZiX2c0NTBfc2V0cGxsX2NvbmQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdW5zaWduZWQgaW50IG1ucCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxsKQoreworCWlmIChnNDUwX2NtcHBsbChtaW5mbywgbW5wLCBwbGwpKSB7CisJCWc0NTBfc2V0cGxsKG1pbmZvLCBtbnAsIHBsbCk7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnNDUwX2ZpbmR3b3JraW5ncGxsKFdQTUlORk8gdW5zaWduZWQgaW50IHBsbCwgdW5zaWduZWQgaW50KiBtbnBhcnJheSwgdW5zaWduZWQgaW50IG1ucGNvdW50KSB7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnNDUwX2ZpbmR3b3JraW5ncGxsKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxsLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50ICptbnBhcnJheSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBtbnBjb3VudCkKK3sKIAl1bnNpZ25lZCBpbnQgZm91bmQgPSAwOwogCXVuc2lnbmVkIGludCBpZHg7CiAJdW5zaWduZWQgaW50IG1ucGZvdW5kID0gbW5wYXJyYXlbMF07CkBAIC0yNTUsMjIgKzI3OCwyMiBAQAogCQl3aGlsZSAoc3B0ciA+PSBzYXJyYXkpIHsKIAkJCXVuc2lnbmVkIGludCBtbnAgPSAqc3B0ci0tOwogCQkKLQkJCWlmIChnNDUwX3Rlc3RwbGwoUE1JTkZPIG1ucCAtIDB4MDMwMCwgcGxsKSAmJgotCQkJICAgIGc0NTBfdGVzdHBsbChQTUlORk8gbW5wICsgMHgwMzAwLCBwbGwpICYmCi0JCQkgICAgZzQ1MF90ZXN0cGxsKFBNSU5GTyBtbnAgLSAweDAyMDAsIHBsbCkgJiYKLQkJCSAgICBnNDUwX3Rlc3RwbGwoUE1JTkZPIG1ucCArIDB4MDIwMCwgcGxsKSAmJgotCQkJICAgIGc0NTBfdGVzdHBsbChQTUlORk8gbW5wIC0gMHgwMTAwLCBwbGwpICYmCi0JCQkgICAgZzQ1MF90ZXN0cGxsKFBNSU5GTyBtbnAgKyAweDAxMDAsIHBsbCkpIHsKLQkJCQlpZiAoZzQ1MF90ZXN0cGxsKFBNSU5GTyBtbnAsIHBsbCkpIHsKKwkJCWlmIChnNDUwX3Rlc3RwbGwobWluZm8sIG1ucCAtIDB4MDMwMCwgcGxsKSAmJgorCQkJICAgIGc0NTBfdGVzdHBsbChtaW5mbywgbW5wICsgMHgwMzAwLCBwbGwpICYmCisJCQkgICAgZzQ1MF90ZXN0cGxsKG1pbmZvLCBtbnAgLSAweDAyMDAsIHBsbCkgJiYKKwkJCSAgICBnNDUwX3Rlc3RwbGwobWluZm8sIG1ucCArIDB4MDIwMCwgcGxsKSAmJgorCQkJICAgIGc0NTBfdGVzdHBsbChtaW5mbywgbW5wIC0gMHgwMTAwLCBwbGwpICYmCisJCQkgICAgZzQ1MF90ZXN0cGxsKG1pbmZvLCBtbnAgKyAweDAxMDAsIHBsbCkpIHsKKwkJCQlpZiAoZzQ1MF90ZXN0cGxsKG1pbmZvLCBtbnAsIHBsbCkpIHsKIAkJCQkJcmV0dXJuIG1ucDsKIAkJCQl9Ci0JCQl9IGVsc2UgaWYgKCFmb3VuZCAmJiBnNDUwX3Rlc3RwbGwoUE1JTkZPIG1ucCwgcGxsKSkgeworCQkJfSBlbHNlIGlmICghZm91bmQgJiYgZzQ1MF90ZXN0cGxsKG1pbmZvLCBtbnAsIHBsbCkpIHsKIAkJCQltbnBmb3VuZCA9IG1ucDsKIAkJCQlmb3VuZCA9IDE7CiAJCQl9CiAJCX0KIAl9Ci0JZzQ1MF9zZXRwbGwoUE1JTkZPIG1ucGZvdW5kLCBwbGwpOworCWc0NTBfc2V0cGxsKG1pbmZvLCBtbnBmb3VuZCwgcGxsKTsKIAlyZXR1cm4gbW5wZm91bmQ7CiB9CiAKQEAgLTI4Myw3ICszMDYsOSBAQAogCWNpLT5kYXRhWzBdLm1ucF92YWx1ZSA9IG1ucF92YWx1ZTsKIH0KIAotc3RhdGljIGludCBnNDUwX2NoZWNrY2FjaGUoV1BNSU5GTyBzdHJ1Y3QgbWF0cm94X3BsbF9jYWNoZSogY2ksIHVuc2lnbmVkIGludCBtbnBfa2V5KSB7CitzdGF0aWMgaW50IGc0NTBfY2hlY2tjYWNoZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJICAgc3RydWN0IG1hdHJveF9wbGxfY2FjaGUgKmNpLCB1bnNpZ25lZCBpbnQgbW5wX2tleSkKK3sKIAl1bnNpZ25lZCBpbnQgaTsKIAkKIAltbnBfa2V5ICY9IEc0NTBfTU5QX0ZSRVFCSVRTOwpAQCAtMzAzLDggKzMyOCwxMCBAQAogCXJldHVybiBOT19NT1JFX01OUDsKIH0KIAotc3RhdGljIGludCBfX2c0NTBfc2V0Y2xrKFdQTUlORk8gdW5zaWduZWQgaW50IGZvdXQsIHVuc2lnbmVkIGludCBwbGwsIAotCQl1bnNpZ25lZCBpbnQqIG1ucGFycmF5LCB1bnNpZ25lZCBpbnQqIGRlbHRhYXJyYXkpIHsKK3N0YXRpYyBpbnQgX19nNDUwX3NldGNsayhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBpbnQgZm91dCwKKwkJCSB1bnNpZ25lZCBpbnQgcGxsLCB1bnNpZ25lZCBpbnQgKm1ucGFycmF5LAorCQkJIHVuc2lnbmVkIGludCAqZGVsdGFhcnJheSkKK3sKIAl1bnNpZ25lZCBpbnQgbW5wY291bnQ7CiAJdW5zaWduZWQgaW50IHBpeGVsX3ZjbzsKIAljb25zdCBzdHJ1Y3QgbWF0cm94X3BsbF9saW1pdHMqIHBpOwpAQCAtMzIxLDE5ICszNDgsMTkgQEAKIAkJCQkKIAkJCQltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKIAotCQkJCXhwd3JjdHJsID0gbWF0cm94ZmJfREFDX2luKFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCk7Ci0JCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBXUkNUUkwsIHhwd3JjdHJsICYgfk0xMDY0X1hQV1JDVFJMX1BBTkVMUEROKTsKKwkJCQl4cHdyY3RybCA9IG1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBXUkNUUkwpOworCQkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQV1JDVFJMLCB4cHdyY3RybCAmIH5NMTA2NF9YUFdSQ1RSTF9QQU5FTFBETik7CiAJCQkJbWdhX291dGIoTV9TRVFfSU5ERVgsIE1fU0VRMSk7CiAJCQkJbWdhX291dGIoTV9TRVFfREFUQSwgbWdhX2luYihNX1NFUV9EQVRBKSB8IE1fU0VRMV9TQ1JPRkYpOwotCQkJCXRtcCA9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwpOworCQkJCXRtcCA9IG1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWENMS0NUUkwpOwogCQkJCXRtcCB8PSBNMTA2NF9YUElYQ0xLQ1RSTF9ESVM7CiAJCQkJaWYgKCEodG1wICYgTTEwNjRfWFBJWENMS0NUUkxfUExMX1VQKSkgewogCQkJCQl0bXAgfD0gTTEwNjRfWFBJWENMS0NUUkxfUExMX1VQOwogCQkJCX0KLQkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCwgdG1wKTsKKwkJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCwgdG1wKTsKIAkJCQkvKiBEVkkgUExMIHByZWZlcnJlZCBmb3IgZnJlcXVlbmNpZXMgdXAgdG8KIAkJCQkgICBwYW5lbCBsaW5rIG1heCwgc3RhbmRhcmQgUExMIG90aGVyd2lzZSAqLwotCQkJCWlmIChmb3V0ID49IE1JTkZPLT5tYXhfcGl4ZWxfY2xvY2tfcGFuZWxsaW5rKQorCQkJCWlmIChmb3V0ID49IG1pbmZvLT5tYXhfcGl4ZWxfY2xvY2tfcGFuZWxsaW5rKQogCQkJCQl0bXAgPSAwOwogCQkJCWVsc2UgdG1wID0KIAkJCQkJTTEwNjRfWERWSUNMS0NUUkxfRFZJREFUQVBBVEhTRUwgfApAQCAtMzQxLDggKzM2OCw4IEBACiAJCQkJCU0xMDY0X1hEVklDTEtDVFJMX0MxRFZJQ0xLRU4gfAogCQkJCQlNMTA2NF9YRFZJQ0xLQ1RSTF9EVklMT09QQ1RMIHwKIAkJCQkJTTEwNjRfWERWSUNMS0NUUkxfUDFMT09QQldEVENUTDsKLQkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YRFZJQ0xLQ1RSTCx0bXApOwotCQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLAorCQkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hEVklDTEtDVFJMLCB0bXApOworCQkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hQV1JDVFJMLAogCQkJCQkJIHhwd3JjdHJsKTsKIAogCQkJCW1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncyk7CkBAIC0zNjMsMjAgKzM5MCwyMCBAQAogCQkJCX0KIAkJCQltZ2Ffb3V0YihNX01JU0NfUkVHLCBtaXNjKTsKIAkJCX0KLQkJCXBpID0gJkFDQ0VTU19GQklORk8obGltaXRzLnBpeGVsKTsKLQkJCWNpID0gJkFDQ0VTU19GQklORk8oY2FjaGUucGl4ZWwpOworCQkJcGkgPSAmbWluZm8tPmxpbWl0cy5waXhlbDsKKwkJCWNpID0gJm1pbmZvLT5jYWNoZS5waXhlbDsKIAkJCWJyZWFrOwogCQljYXNlIE1fU1lTVEVNX1BMTDoKIAkJCXsKIAkJCQl1X2ludDMyX3Qgb3B0OwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsICZvcHQpOworCQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgJm9wdCk7CiAJCQkJaWYgKCEob3B0ICYgMHgyMCkpIHsKLQkJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBvcHQgfCAweDIwKTsKKwkJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgb3B0IHwgMHgyMCk7CiAJCQkJfQogCQkJfQotCQkJcGkgPSAmQUNDRVNTX0ZCSU5GTyhsaW1pdHMuc3lzdGVtKTsKLQkJCWNpID0gJkFDQ0VTU19GQklORk8oY2FjaGUuc3lzdGVtKTsKKwkJCXBpID0gJm1pbmZvLT5saW1pdHMuc3lzdGVtOworCQkJY2kgPSAmbWluZm8tPmNhY2hlLnN5c3RlbTsKIAkJCWJyZWFrOwogCQljYXNlIE1fVklERU9fUExMOgogCQkJewpAQCAtMzg1LDE4ICs0MTIsMTggQEAKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQkJCQogCQkJCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwotCQkJCXRtcCA9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBXUkNUUkwpOworCQkJCXRtcCA9IG1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBXUkNUUkwpOwogCQkJCWlmICghKHRtcCAmIDIpKSB7Ci0JCQkJCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLCB0bXAgfCAyKTsKKwkJCQkJbWF0cm94ZmJfREFDX291dChtaW5mbywgTTEwNjRfWFBXUkNUUkwsIHRtcCB8IDIpOwogCQkJCX0KIAkJCQkKLQkJCQltbnAgPSBtYXRyb3hmYl9EQUNfaW4oUE1JTkZPIE0xMDY0X1hQSVhQTExDTSkgPDwgMTY7Ci0JCQkJbW5wIHw9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gTTEwNjRfWFBJWFBMTENOKSA8PCA4OwotCQkJCXBpeGVsX3ZjbyA9IGc0NTBfbW5wMnZjbyhQTUlORk8gbW5wKTsKKwkJCQltbnAgPSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIE0xMDY0X1hQSVhQTExDTSkgPDwgMTY7CisJCQkJbW5wIHw9IG1hdHJveGZiX0RBQ19pbihtaW5mbywgTTEwNjRfWFBJWFBMTENOKSA8PCA4OworCQkJCXBpeGVsX3ZjbyA9IGc0NTBfbW5wMnZjbyhtaW5mbywgbW5wKTsKIAkJCQltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogCQkJfQotCQkJcGkgPSAmQUNDRVNTX0ZCSU5GTyhsaW1pdHMudmlkZW8pOwotCQkJY2kgPSAmQUNDRVNTX0ZCSU5GTyhjYWNoZS52aWRlbyk7CisJCQlwaSA9ICZtaW5mby0+bGltaXRzLnZpZGVvOworCQkJY2kgPSAmbWluZm8tPmNhY2hlLnZpZGVvOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQwNywxMiArNDM0LDEyIEBACiAJCXVuc2lnbmVkIGludCBtbnA7CiAJCXVuc2lnbmVkIGludCB4dmNvOwogCi0JCWZvcihtbnAgPSBnNDUwX2ZpcnN0cGxsKFBNSU5GTyBwaSwgJnh2Y28sIGZvdXQpOyBtbnAgIT0gTk9fTU9SRV9NTlA7IG1ucCA9IGc0NTBfbmV4dHBsbChQTUlORk8gcGksICZ4dmNvLCBtbnApKSB7CisJCWZvciAobW5wID0gZzQ1MF9maXJzdHBsbChtaW5mbywgcGksICZ4dmNvLCBmb3V0KTsgbW5wICE9IE5PX01PUkVfTU5QOyBtbnAgPSBnNDUwX25leHRwbGwobWluZm8sIHBpLCAmeHZjbywgbW5wKSkgewogCQkJdW5zaWduZWQgaW50IGlkeDsKIAkJCXVuc2lnbmVkIGludCB2Y287CiAJCQl1bnNpZ25lZCBpbnQgZGVsdGE7CiAKLQkJCXZjbyA9IGc0NTBfbW5wMnZjbyhQTUlORk8gbW5wKTsKKwkJCXZjbyA9IGc0NTBfbW5wMnZjbyhtaW5mbywgbW5wKTsKICNpZiAwCQkJCiAJCQlpZiAocGxsID09IE1fVklERU9fUExMKSB7CiAJCQkJdW5zaWduZWQgaW50IGJpZywgc21hbGw7CkBAIC00NDQsNyArNDcxLDcgQEAKIAkJCQkJICogKGZyZXFzIG5lYXIgVkNPbWluIGFyZW4ndCBhcyBzdGFibGUpCiAJCQkJCSAqLwogCQkJCQlpZiAoZGVsdGEgPT0gZGVsdGFhcnJheVtpZHgtMV0KLQkJCQkJICAgICYmIHZjbyAhPSBnNDUwX21ucDJ2Y28oUE1JTkZPIG1ucGFycmF5W2lkeC0xXSkKKwkJCQkJICAgICYmIHZjbyAhPSBnNDUwX21ucDJ2Y28obWluZm8sIG1ucGFycmF5W2lkeC0xXSkKIAkJCQkJICAgICYmIHZjbyA8IChwaS0+dmNvbWluICogMTcgLyAxNikpIHsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CkBAIC00NjgsMTQgKzQ5NSwxNCBAQAogCQl1bnNpZ25lZCBpbnQgbW5wOwogCQkKIAkJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7Ci0JCW1ucCA9IGc0NTBfY2hlY2tjYWNoZShQTUlORk8gY2ksIG1ucGFycmF5WzBdKTsKKwkJbW5wID0gZzQ1MF9jaGVja2NhY2hlKG1pbmZvLCBjaSwgbW5wYXJyYXlbMF0pOwogCQlpZiAobW5wICE9IE5PX01PUkVfTU5QKSB7Ci0JCQltYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKFBNSU5GTyBtbnAsIHBsbCk7CisJCQltYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKG1pbmZvLCBtbnAsIHBsbCk7CiAJCX0gZWxzZSB7Ci0JCQltbnAgPSBnNDUwX2ZpbmR3b3JraW5ncGxsKFBNSU5GTyBwbGwsIG1ucGFycmF5LCBtbnBjb3VudCk7CisJCQltbnAgPSBnNDUwX2ZpbmR3b3JraW5ncGxsKG1pbmZvLCBwbGwsIG1ucGFycmF5LCBtbnBjb3VudCk7CiAJCQlnNDUwX2FkZGNhY2hlKGNpLCBtbnBhcnJheVswXSwgbW5wKTsKIAkJfQotCQl1cGRhdGVod3N0YXRlX2NsaygmQUNDRVNTX0ZCSU5GTyhodyksIG1ucCwgcGxsKTsKKwkJdXBkYXRlaHdzdGF0ZV9jbGsoJm1pbmZvLT5odywgbW5wLCBwbGwpOwogCQltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm4gbW5wOwogCX0KQEAgLTQ4NSwxNCArNTEyLDE2IEBACiAgKiBDdXJyZW50bHkgdGhlcmUgaXMgNShwKSAqIDEwKG0pID0gNTAgcG9zc2libGUgdmFsdWVzLiAqLwogI2RlZmluZSBNTlBfVEFCTEVfU0laRSAgNjQKIAotaW50IG1hdHJveGZiX2c0NTBfc2V0Y2xrKFdQTUlORk8gdW5zaWduZWQgaW50IGZvdXQsIHVuc2lnbmVkIGludCBwbGwpIHsKK2ludCBtYXRyb3hmYl9nNDUwX3NldGNsayhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBpbnQgZm91dCwKKwkJCSB1bnNpZ25lZCBpbnQgcGxsKQorewogCXVuc2lnbmVkIGludCogYXJyOwogCQogCWFyciA9IGttYWxsb2Moc2l6ZW9mKCphcnIpICogTU5QX1RBQkxFX1NJWkUgKiAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoYXJyKSB7CiAJCWludCByOwogCi0JCXIgPSBfX2c0NTBfc2V0Y2xrKFBNSU5GTyBmb3V0LCBwbGwsIGFyciwgYXJyICsgTU5QX1RBQkxFX1NJWkUpOworCQlyID0gX19nNDUwX3NldGNsayhtaW5mbywgZm91dCwgcGxsLCBhcnIsIGFyciArIE1OUF9UQUJMRV9TSVpFKTsKIAkJa2ZyZWUoYXJyKTsKIAkJcmV0dXJuIHI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmgKaW5kZXggYzE3ZWQ3NC4uYWFjNjE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5oCkBAIC0zLDggKzMsMTAgQEAKIAogI2luY2x1ZGUgIm1hdHJveGZiX2Jhc2UuaCIKIAotaW50IG1hdHJveGZiX2c0NTBfc2V0Y2xrKFdQTUlORk8gdW5zaWduZWQgaW50IGZvdXQsIHVuc2lnbmVkIGludCBwbGwpOwotdW5zaWduZWQgaW50IGc0NTBfbW5wMmYoQ1BNSU5GTyB1bnNpZ25lZCBpbnQgbW5wKTsKLXZvaWQgbWF0cm94ZmJfZzQ1MF9zZXRwbGxfY29uZChXUE1JTkZPIHVuc2lnbmVkIGludCBtbnAsIHVuc2lnbmVkIGludCBwbGwpOworaW50IG1hdHJveGZiX2c0NTBfc2V0Y2xrKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVuc2lnbmVkIGludCBmb3V0LAorCQkJIHVuc2lnbmVkIGludCBwbGwpOwordW5zaWduZWQgaW50IGc0NTBfbW5wMmYoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdW5zaWduZWQgaW50IG1ucCk7Cit2b2lkIG1hdHJveGZiX2c0NTBfc2V0cGxsX2NvbmQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdW5zaWduZWQgaW50IG1ucCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxsKTsKIAogI2VuZGlmCS8qIF9fRzQ1MF9QTExfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9pMmMtbWF0cm94ZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2kyYy1tYXRyb3hmYi5jCmluZGV4IGMxNGUzZTIuLmYzNzI4YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L2kyYy1tYXRyb3hmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2kyYy1tYXRyb3hmYi5jCkBAIC00MSw3ICs0MSw3IEBACiAJaW50IHY7CiAKIAltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKLQl2ID0gbWF0cm94ZmJfREFDX2luKFBNSU5GTyBEQUNfWEdFTklPREFUQSk7CisJdiA9IG1hdHJveGZiX0RBQ19pbihtaW5mbywgREFDX1hHRU5JT0RBVEEpOwogCW1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIHY7CiB9CkBAIC01MSwxMCArNTEsMTAgQEAKIAlpbnQgdjsKIAogCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwotCXYgPSAobWF0cm94ZmJfREFDX2luKFBNSU5GTyBEQUNfWEdFTklPQ1RSTCkgJiBtYXNrKSB8IHZhbDsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBEQUNfWEdFTklPQ1RSTCwgdik7CisJdiA9IChtYXRyb3hmYl9EQUNfaW4obWluZm8sIERBQ19YR0VOSU9DVFJMKSAmIG1hc2spIHwgdmFsOworCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIERBQ19YR0VOSU9DVFJMLCB2KTsKIAkvKiBXZSBtdXN0IHJlc2V0IEdFTklPREFUQSB2ZXJ5IG9mdGVuLi4uIFhGcmVlIHBsYXlzIHdpdGggdGhpcyByZWdpc3RlciAqLwotCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIERBQ19YR0VOSU9EQVRBLCAweDAwKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBEQUNfWEdFTklPREFUQSwgMHgwMCk7CiAJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTEyLDcgKzExMiw3IEBACiAJaTJjX3NldF9hZGFwZGF0YSgmYi0+YWRhcHRlciwgYik7CiAJYi0+YWRhcHRlci5jbGFzcyA9IGNsYXNzOwogCWItPmFkYXB0ZXIuYWxnb19kYXRhID0gJmItPmJhYzsKLQliLT5hZGFwdGVyLmRldi5wYXJlbnQgPSAmQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLT5kZXY7CisJYi0+YWRhcHRlci5kZXYucGFyZW50ID0gJm1pbmZvLT5wY2lkZXYtPmRldjsKIAliLT5iYWMgPSBtYXRyb3hfaTJjX2FsZ29fdGVtcGxhdGU7CiAJYi0+YmFjLmRhdGEgPSBiOwogCWVyciA9IGkyY19iaXRfYWRkX2J1cygmYi0+YWRhcHRlcik7CkBAIC0xNDksMTEgKzE0OSwxMSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwotCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIERBQ19YR0VOSU9EQVRBLCAweEZGKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBEQUNfWEdFTklPQ1RSTCwgMHgwMCk7CisJbWF0cm94ZmJfREFDX291dChtaW5mbywgREFDX1hHRU5JT0RBVEEsIDB4RkYpOworCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIERBQ19YR0VOSU9DVFJMLCAweDAwKTsKIAltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogCi0Jc3dpdGNoIChBQ0NFU1NfRkJJTkZPKGNoaXApKSB7CisJc3dpdGNoIChtaW5mby0+Y2hpcCkgewogCQljYXNlIE1HQV8yMDY0OgogCQljYXNlIE1HQV8yMTY0OgogCQkJZXJyID0gaTJjX2J1c19yZWcoJm0yaW5mby0+ZGRjMSwgbWluZm8sCkBAIC0xNjgsNyArMTY4LDcgQEAKIAl9CiAJaWYgKGVycikKIAkJZ290byBmYWlsX2RkYzE7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZHVhbGhlYWQpKSB7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5kdWFsaGVhZCkgewogCQllcnIgPSBpMmNfYnVzX3JlZygmbTJpbmZvLT5kZGMyLCBtaW5mbywKIAkJCQkgIEREQzJfREFUQSwgRERDMl9DTEssCiAJCQkJICAiRERDOmZiJXUgIzEiLCBJMkNfQ0xBU1NfRERDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuYwppbmRleCBhNzRlNWRhLi5mOWZhMGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5jCkBAIC0zMyw3ICszMywxMSBAQAogI2RlZmluZSBEQUMxMDY0X09QVF9NRElWMgkweDAwCiAjZGVmaW5lIERBQzEwNjRfT1BUX1JFU0VSVkVECTB4MTAKIAotc3RhdGljIHZvaWQgREFDMTA2NF9jYWxjY2xvY2soQ1BNSU5GTyB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGZtYXgsIHVuc2lnbmVkIGludCogaW4sIHVuc2lnbmVkIGludCogZmVlZCwgdW5zaWduZWQgaW50KiBwb3N0KSB7CitzdGF0aWMgdm9pZCBEQUMxMDY0X2NhbGNjbG9jayhjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZyZXEsIHVuc2lnbmVkIGludCBmbWF4LAorCQkJICAgICAgdW5zaWduZWQgaW50ICppbiwgdW5zaWduZWQgaW50ICpmZWVkLAorCQkJICAgICAgdW5zaWduZWQgaW50ICpwb3N0KQorewogCXVuc2lnbmVkIGludCBmdmNvOwogCXVuc2lnbmVkIGludCBwOwogCkBAIC00MSw3ICs0NSw3IEBACiAJCiAJLyogb25seSBmb3IgZGV2aWNlcyBvbGRlciB0aGFuIEc0NTAgKi8KIAotCWZ2Y28gPSBQTExfY2FsY2Nsb2NrKFBNSU5GTyBmcmVxLCBmbWF4LCBpbiwgZmVlZCwgJnApOworCWZ2Y28gPSBQTExfY2FsY2Nsb2NrKG1pbmZvLCBmcmVxLCBmbWF4LCBpbiwgZmVlZCwgJnApOwogCQogCXAgPSAoMSA8PCBwKSAtIDE7CiAJaWYgKGZ2Y28gPD0gMTAwMDAwKQpAQCAtODAsMzIgKzg0LDM1IEBACiAJCTB4MDAsCiAJCTB4MDAsIDB4MDAsIDB4RkYsIDB4RkZ9OwogCi1zdGF0aWMgdm9pZCBEQUMxMDY0X3NldHBjbGsoV1BNSU5GTyB1bnNpZ25lZCBsb25nIGZvdXQpIHsKK3N0YXRpYyB2b2lkIERBQzEwNjRfc2V0cGNsayhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1bnNpZ25lZCBsb25nIGZvdXQpCit7CiAJdW5zaWduZWQgaW50IG0sIG4sIHA7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlEQUMxMDY0X2NhbGNjbG9jayhQTUlORk8gZm91dCwgQUNDRVNTX0ZCSU5GTyhtYXhfcGl4ZWxfY2xvY2spLCAmbSwgJm4sICZwKTsKLQlBQ0NFU1NfRkJJTkZPKGh3KS5EQUNjbGtbMF0gPSBtOwotCUFDQ0VTU19GQklORk8oaHcpLkRBQ2Nsa1sxXSA9IG47Ci0JQUNDRVNTX0ZCSU5GTyhodykuREFDY2xrWzJdID0gcDsKKwlEQUMxMDY0X2NhbGNjbG9jayhtaW5mbywgZm91dCwgbWluZm8tPm1heF9waXhlbF9jbG9jaywgJm0sICZuLCAmcCk7CisJbWluZm8tPmh3LkRBQ2Nsa1swXSA9IG07CisJbWluZm8tPmh3LkRBQ2Nsa1sxXSA9IG47CisJbWluZm8tPmh3LkRBQ2Nsa1syXSA9IHA7CiB9CiAKLXN0YXRpYyB2b2lkIERBQzEwNjRfc2V0bWNsayhXUE1JTkZPIGludCBvc2NpbmZvLCB1bnNpZ25lZCBsb25nIGZtZW0pIHsKK3N0YXRpYyB2b2lkIERBQzEwNjRfc2V0bWNsayhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgb3NjaW5mbywKKwkJCSAgICB1bnNpZ25lZCBsb25nIGZtZW0pCit7CiAJdV9pbnQzMl90IG14OwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCURCRyhfX2Z1bmNfXykKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vaW5pdCkpIHsKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vaW5pdCkgewogCQkvKiByZWFkIE1DTEsgYW5kIGdpdmUgdXAuLi4gKi8KLQkJaHctPkRBQ2Nsa1szXSA9IGluREFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMTSk7Ci0JCWh3LT5EQUNjbGtbNF0gPSBpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE4pOwotCQlody0+REFDY2xrWzVdID0gaW5EQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExQKTsKKwkJaHctPkRBQ2Nsa1szXSA9IGluREFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMTSk7CisJCWh3LT5EQUNjbGtbNF0gPSBpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTE4pOworCQlody0+REFDY2xrWzVdID0gaW5EQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExQKTsKIAkJcmV0dXJuOwogCX0KIAlteCA9IGh3LT5NWG9wdGlvblJlZyB8IDB4MDAwMDAwMDQ7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBteCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbXgpOwogCW14ICY9IH4weDAwMDAwMEJCOwogCWlmIChvc2NpbmZvICYgREFDMTA2NF9PUFRfR0RJVjEpCiAJCW14IHw9IDB4MDAwMDAwMDg7CkBAIC0xMjAsOSArMTI3LDkgQEAKIAogCQkvKiBwb3dlcnVwIHN5c3RlbSBQTEwsIHNlbGVjdCBQQ0kgY2xvY2sgKi8KIAkJbXggfD0gMHgwMDAwMDAyMDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBteCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG14KTsKIAkJbXggJj0gfjB4MDAwMDAwMDQ7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgbXgpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBteCk7CiAKIAkJLyogISEhIHlvdSBtdXN0IG5vdCBhY2Nlc3MgZGV2aWNlIGlmIE1DTEsgaXMgbm90IHJ1bm5pbmcgISEhCiAJCSAgIERvaW5nIHNvIGNhdXNlIGltbWVkaWF0ZSBQQ0kgbG9ja3VwIDotKCBNYXliZSB0aGV5IHNob3VsZApAQCAtMTMxLDEyICsxMzgsMTIgQEAKIAkJICAgcGVyZmVjdC4uLiAqLwogCQkvKiAoYml0IDIgb2YgUENJX09QVElPTl9SRUcgbXVzdCBiZSAwLi4uIGFuZCBiaXRzIDAsMSBtdXN0IG5vdAogCQkgICBzZWxlY3QgUExMLi4uIGJlY2F1c2Ugb2YgUExMIGNhbiBiZSBzdG9wcGVkIGF0IHRoaXMgdGltZSkgKi8KLQkJREFDMTA2NF9jYWxjY2xvY2soUE1JTkZPIGZtZW0sIEFDQ0VTU19GQklORk8obWF4X3BpeGVsX2Nsb2NrKSwgJm0sICZuLCAmcCk7Ci0JCW91dERBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE0sIGh3LT5EQUNjbGtbM10gPSBtKTsKLQkJb3V0REFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMTiwgaHctPkRBQ2Nsa1s0XSA9IG4pOwotCQlvdXREQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExQLCBody0+REFDY2xrWzVdID0gcCk7CisJCURBQzEwNjRfY2FsY2Nsb2NrKG1pbmZvLCBmbWVtLCBtaW5mby0+bWF4X3BpeGVsX2Nsb2NrLCAmbSwgJm4sICZwKTsKKwkJb3V0REFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMTSwgaHctPkRBQ2Nsa1szXSA9IG0pOworCQlvdXREQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExOLCBody0+REFDY2xrWzRdID0gbik7CisJCW91dERBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTFAsIGh3LT5EQUNjbGtbNV0gPSBwKTsKIAkJZm9yIChjbGsgPSA2NTUzNjsgY2xrOyAtLWNsaykgewotCQkJaWYgKGluREFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMU1RBVCkgJiAweDQwKQorCQkJaWYgKGluREFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMU1RBVCkgJiAweDQwKQogCQkJCWJyZWFrOwogCQl9CiAJCWlmICghY2xrKQpAQCAtMTQ3LDI5ICsxNTQsMzAgQEAKIAkJLyogc2VsZWN0IHNwZWNpZmllZCBzeXN0ZW0gY2xvY2sgc291cmNlICovCiAJCW14IHw9IG9zY2luZm8gJiBEQUMxMDY0X09QVF9TQ0xLX01BU0s7CiAJfQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgbXgpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIG14KTsKIAlteCAmPSB+MHgwMDAwMDAwNDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIG14KTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBteCk7CiAJaHctPk1Yb3B0aW9uUmVnID0gbXg7CiB9CiAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX0cKLXN0YXRpYyB2b2lkIGc0NTBfc2V0X3BsbHMoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIGc0NTBfc2V0X3BsbHMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAl1X2ludDMyX3QgYzJfY3RsOwogCXVuc2lnbmVkIGludCBweGM7Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCWludCBwaXhlbG1ucDsKIAlpbnQgdmlkZW9tbnA7CiAJCiAJYzJfY3RsID0gaHctPmNydGMyLmN0bCAmIH4weDQwMDc7CS8qIENsZWFyIFBMTCArIGVuYWJsZSBmb3IgQ1JUQzIgKi8KIAljMl9jdGwgfD0gMHgwMDAxOwkJCS8qIEVuYWJsZSBDUlRDMiAqLwogCWh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0gJj0gfjB4MDI7CS8qIFN0b3AgVklERU8gUExMICovCi0JcGl4ZWxtbnAgPSBBQ0NFU1NfRkJJTkZPKGNydGMxKS5tbnA7Ci0JdmlkZW9tbnAgPSBBQ0NFU1NfRkJJTkZPKGNydGMyKS5tbnA7CisJcGl4ZWxtbnAgPSBtaW5mby0+Y3J0YzEubW5wOworCXZpZGVvbW5wID0gbWluZm8tPmNydGMyLm1ucDsKIAlpZiAodmlkZW9tbnAgPCAwKSB7CiAJCWMyX2N0bCAmPSB+MHgwMDAxOwkJCS8qIERpc2FibGUgQ1JUQzIgKi8KIAkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hQV1JDVFJMXSAmPSB+MHgxMDsJLyogUG93ZXJkb3duIENSVEMyICovCi0JfSBlbHNlIGlmIChBQ0NFU1NfRkJJTkZPKGNydGMyKS5waXhjbG9jayA9PSBBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzKS5wbGwucmVmX2ZyZXEpIHsKKwl9IGVsc2UgaWYgKG1pbmZvLT5jcnRjMi5waXhjbG9jayA9PSBtaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxKSB7CiAJCWMyX2N0bCB8PSAgMHg0MDAyOwkvKiBVc2UgcmVmZXJlbmNlIGRpcmVjdGx5ICovCiAJfSBlbHNlIGlmICh2aWRlb21ucCA9PSBwaXhlbG1ucCkgewogCQljMl9jdGwgfD0gIDB4MDAwNDsJLyogVXNlIHBpeGVsIFBMTCAqLwpAQCAtMTg0LDI3ICsxOTIsMjcgQEAKIAkJYzJfY3RsIHw9ICAweDAwMDY7CS8qIFVzZSB2aWRlbyBQTEwgKi8KIAkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hQV1JDVFJMXSB8PSAweDAyOwogCQkKLQkJb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWFBXUkNUUkwsIGh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0pOwotCQltYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKFBNSU5GTyB2aWRlb21ucCwgTV9WSURFT19QTEwpOworCQlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUFdSQ1RSTCwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hQV1JDVFJMXSk7CisJCW1hdHJveGZiX2c0NTBfc2V0cGxsX2NvbmQobWluZm8sIHZpZGVvbW5wLCBNX1ZJREVPX1BMTCk7CiAJfQogCiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hQSVhDTEtDVFJMXSAmPSB+TTEwNjRfWFBJWENMS0NUUkxfUExMX1VQOwogCWlmIChwaXhlbG1ucCA+PSAwKSB7CiAJCWh3LT5EQUNyZWdbUE9TMTA2NF9YUElYQ0xLQ1RSTF0gfD0gTTEwNjRfWFBJWENMS0NUUkxfUExMX1VQOwogCQkKLQkJb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwsIGh3LT5EQUNyZWdbUE9TMTA2NF9YUElYQ0xLQ1RSTF0pOwotCQltYXRyb3hmYl9nNDUwX3NldHBsbF9jb25kKFBNSU5GTyBwaXhlbG1ucCwgTV9QSVhFTF9QTExfQyk7CisJCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hQSVhDTEtDVFJMLCBody0+REFDcmVnW1BPUzEwNjRfWFBJWENMS0NUUkxdKTsKKwkJbWF0cm94ZmJfZzQ1MF9zZXRwbGxfY29uZChtaW5mbywgcGl4ZWxtbnAsIE1fUElYRUxfUExMX0MpOwogCX0KIAlpZiAoYzJfY3RsICE9IGh3LT5jcnRjMi5jdGwpIHsKIAkJaHctPmNydGMyLmN0bCA9IGMyX2N0bDsKIAkJbWdhX291dGwoMHgzQzEwLCBjMl9jdGwpOwogCX0KIAotCXB4YyA9IEFDQ0VTU19GQklORk8oY3J0YzEpLnBpeGNsb2NrOwotCWlmIChweGMgPT0gMCB8fCBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKLQkJcHhjID0gQUNDRVNTX0ZCSU5GTyhjcnRjMikucGl4Y2xvY2s7CisJcHhjID0gbWluZm8tPmNydGMxLnBpeGNsb2NrOworCWlmIChweGMgPT0gMCB8fCBtaW5mby0+b3V0cHV0c1syXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJCXB4YyA9IG1pbmZvLT5jcnRjMi5waXhjbG9jazsKIAl9Ci0JaWYgKEFDQ0VTU19GQklORk8oY2hpcCkgPT0gTUdBX0c1NTApIHsKKwlpZiAobWluZm8tPmNoaXAgPT0gTUdBX0c1NTApIHsKIAkJaWYgKHB4YyA8IDQ1MDAwKSB7CiAJCQlody0+REFDcmVnW1BPUzEwNjRfWFBBTk1PREVdID0gMHgwMDsJLyogMC01MCAqLwogCQl9IGVsc2UgaWYgKHB4YyA8IDU1MDAwKSB7CkBAIC0yNDUsMTggKzI1MywxOSBAQAogfQogI2VuZGlmCiAKLXZvaWQgREFDMTA2NF9nbG9iYWxfaW5pdChXUE1JTkZPMikgewotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOwordm9pZCBEQUMxMDY0X2dsb2JhbF9pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0gJj0gTTEwNjRfWE1JU0NDVFJMX0RBQ19XSURUSE1BU0s7CiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0gfD0gTTEwNjRfWE1JU0NDVFJMX0xVVF9FTjsKIAlody0+REFDcmVnW1BPUzEwNjRfWFBJWENMS0NUUkxdID0gTTEwNjRfWFBJWENMS0NUUkxfUExMX1VQIHwgTTEwNjRfWFBJWENMS0NUUkxfRU4gfCBNMTA2NF9YUElYQ0xLQ1RSTF9TUkNfUExMOwogI2lmZGVmIENPTkZJR19GQl9NQVRST1hfRwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CiAJCWh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0gPSAweDFGOwkvKiBwb3dlcnVwIGV2ZXJ5dGhpbmcgKi8KIAkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hPVVRQVVRDT05OXSA9IDB4MDA7CS8qIGRpc2FibGUgb3V0cHV0cyAqLwogCQlody0+REFDcmVnW1BPUzEwNjRfWE1JU0NDVFJMXSB8PSBNMTA2NF9YTUlTQ0NUUkxfREFDX0VOOwotCQlzd2l0Y2ggKEFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuc3JjKSB7CisJCXN3aXRjaCAobWluZm8tPm91dHB1dHNbMF0uc3JjKSB7CiAJCQljYXNlIE1BVFJPWEZCX1NSQ19DUlRDMToKIAkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMyOgogCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YT1VUUFVUQ09OTl0gfD0gMHgwMTsJLyogZW5hYmxlIG91dHB1dDsgQ1JUQzEvMiBzZWxlY3Rpb24gaXMgaW4gQ1JUQzIgY3RsICovCkBAIC0yNjUsMTIgKzI3NCwxMiBAQAogCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdICY9IH5NMTA2NF9YTUlTQ0NUUkxfREFDX0VOOwogCQkJCWJyZWFrOwogCQl9Ci0JCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5zcmMpIHsKKwkJc3dpdGNoIChtaW5mby0+b3V0cHV0c1sxXS5zcmMpIHsKIAkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMxOgogCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YT1VUUFVUQ09OTl0gfD0gMHgwNDsKIAkJCQlicmVhazsKIAkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMyOgotCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm1vZGUgPT0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUikgeworCQkJCWlmIChtaW5mby0+b3V0cHV0c1sxXS5tb2RlID09IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKIAkJCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hPVVRQVVRDT05OXSB8PSAweDA4OwogCQkJCX0gZWxzZSB7CiAJCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YT1VUUFVUQ09OTl0gfD0gMHgwQzsKQEAgLTI4MCw3ICsyODksNyBAQAogCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0gJj0gfjB4MDE7CQkvKiBQb3dlcm9mZiBEQUMyICovCiAJCQkJYnJlYWs7CiAJCX0KLQkJc3dpdGNoIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLnNyYykgeworCQlzd2l0Y2ggKG1pbmZvLT5vdXRwdXRzWzJdLnNyYykgewogCQkJY2FzZSBNQVRST1hGQl9TUkNfQ1JUQzE6CiAJCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hPVVRQVVRDT05OXSB8PSAweDIwOwogCQkJCWJyZWFrOwpAQCAtMjk5LDU1ICszMDgsNTcgQEAKIAkJCQlicmVhazsKIAkJfQogCQkvKiBOb3cgc2V0IHRpbW1pbmcgcmVsYXRlZCB2YXJpYWJsZXMuLi4gKi8KLQkJZzQ1MF9zZXRfcGxscyhQTUlORk8yKTsKKwkJZzQ1MF9zZXRfcGxscyhtaW5mbyk7CiAJfSBlbHNlCiAjZW5kaWYKIAl7Ci0JCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpIHsKKwkJaWYgKG1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpIHsKIAkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YUElYQ0xLQ1RSTF0gPSBNMTA2NF9YUElYQ0xLQ1RSTF9QTExfVVAgfCBNMTA2NF9YUElYQ0xLQ1RSTF9FTiB8IE0xMDY0X1hQSVhDTEtDVFJMX1NSQ19FWFQ7CiAJCQlody0+REFDcmVnW1BPUzEwNjRfWE1JU0NDVFJMXSB8PSBHWDAwX1hNSVNDQ1RSTF9NRkNfTUFGQyB8IEc0MDBfWE1JU0NDVFJMX1ZET19NQUZDMTI7Ci0JCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJCX0gZWxzZSBpZiAobWluZm8tPm91dHB1dHNbMV0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgewogCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0gfD0gR1gwMF9YTUlTQ0NUUkxfTUZDX01BRkMgfCBHNDAwX1hNSVNDQ1RSTF9WRE9fQzJfTUFGQzEyOwotCQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkKKwkJfSBlbHNlIGlmIChtaW5mby0+b3V0cHV0c1syXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKQogCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0gfD0gR1gwMF9YTUlTQ0NUUkxfTUZDX1BBTkVMTElOSyB8IEc0MDBfWE1JU0NDVFJMX1ZET19NQUZDMTI7CiAJCWVsc2UKIAkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YTUlTQ0NUUkxdIHw9IEdYMDBfWE1JU0NDVFJMX01GQ19ESVM7CiAKLQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuc3JjICE9IE1BVFJPWEZCX1NSQ19OT05FKQorCQlpZiAobWluZm8tPm91dHB1dHNbMF0uc3JjICE9IE1BVFJPWEZCX1NSQ19OT05FKQogCQkJaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0gfD0gTTEwNjRfWE1JU0NDVFJMX0RBQ19FTjsKIAl9CiB9CiAKLXZvaWQgREFDMTA2NF9nbG9iYWxfcmVzdG9yZShXUE1JTkZPMikgewotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOwordm9pZCBEQUMxMDY0X2dsb2JhbF9yZXN0b3JlKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCi0Jb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwsIGh3LT5EQUNyZWdbUE9TMTA2NF9YUElYQ0xLQ1RSTF0pOwotCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hNSVNDQ1RSTCwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hNSVNDQ1RSTF0pOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkgewotCQlvdXREQUMxMDY0KFBNSU5GTyAweDIwLCAweDA0KTsKLQkJb3V0REFDMTA2NChQTUlORk8gMHgxRiwgQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5kZnBfdHlwZSkpOwotCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgewotCQkJb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWFNZTkNDVFJMLCAweENDKTsKLQkJCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLCBody0+REFDcmVnW1BPUzEwNjRfWFBXUkNUUkxdKTsKLQkJCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQQU5NT0RFLCBody0+REFDcmVnW1BPUzEwNjRfWFBBTk1PREVdKTsKLQkJCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hPVVRQVVRDT05OLCBody0+REFDcmVnW1BPUzEwNjRfWE9VVFBVVENPTk5dKTsKKwlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCwgaHctPkRBQ3JlZ1tQT1MxMDY0X1hQSVhDTEtDVFJMXSk7CisJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWE1JU0NDVFJMLCBody0+REFDcmVnW1BPUzEwNjRfWE1JU0NDVFJMXSk7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5hY2NlbGVyYXRvciA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkgeworCQlvdXREQUMxMDY0KG1pbmZvLCAweDIwLCAweDA0KTsKKwkJb3V0REFDMTA2NChtaW5mbywgMHgxRiwgbWluZm8tPmRldmZsYWdzLmRmcF90eXBlKTsKKwkJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CisJCQlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YU1lOQ0NUUkwsIDB4Q0MpOworCQkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWFBXUkNUUkwsIGh3LT5EQUNyZWdbUE9TMTA2NF9YUFdSQ1RSTF0pOworCQkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWFBBTk1PREUsIGh3LT5EQUNyZWdbUE9TMTA2NF9YUEFOTU9ERV0pOworCQkJb3V0REFDMTA2NChtaW5mbywgTTEwNjRfWE9VVFBVVENPTk4sIGh3LT5EQUNyZWdbUE9TMTA2NF9YT1VUUFVUQ09OTl0pOwogCQl9CiAJfQogfQogCi1zdGF0aWMgaW50IERBQzEwNjRfaW5pdF8xKFdQTUlORk8gc3RydWN0IG15X3RpbW1pbmcqIG0pIHsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKK3N0YXRpYyBpbnQgREFDMTA2NF9pbml0XzEoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgc3RydWN0IG15X3RpbW1pbmcgKm0pCit7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCiAJbWVtY3B5KGh3LT5EQUNyZWcsIE1HQTEwNjRfREFDLCBzaXplb2YoTUdBMTA2NF9EQUNfcmVncykpOwotCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJc3dpdGNoIChtaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsKSB7CiAJCS8qIGNhc2UgNDogbm90IHN1cHBvcnRlZCBieSBNR0ExMDY0IERBQyAqLwogCQljYXNlIDg6CiAJCQlody0+REFDcmVnW1BPUzEwNjRfWE1VTENUUkxdID0gTTEwNjRfWE1VTENUUkxfREVQVEhfOEJQUCB8IE0xMDY0X1hNVUxDVFJMX0dSQVBISUNTX1BBTEVUSVpFRDsKIAkJCWJyZWFrOwogCQljYXNlIDE2OgotCQkJaWYgKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ncmVlbi5sZW5ndGggPT0gNSkKKwkJCWlmIChtaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCA9PSA1KQogCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YTVVMQ1RSTF0gPSBNMTA2NF9YTVVMQ1RSTF9ERVBUSF8xNUJQUF8xQlBQIHwgTTEwNjRfWE1VTENUUkxfR1JBUEhJQ1NfUEFMRVRJWkVEOwogCQkJZWxzZQogCQkJCWh3LT5EQUNyZWdbUE9TMTA2NF9YTVVMQ1RSTF0gPSBNMTA2NF9YTVVMQ1RSTF9ERVBUSF8xNkJQUCB8IE0xMDY0X1hNVUxDVFJMX0dSQVBISUNTX1BBTEVUSVpFRDsKQEAgLTM2MSwyMiArMzcyLDIzIEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMTsJLyogdW5zdXBwb3J0ZWQgZGVwdGggKi8KIAl9Ci0JaHctPkRBQ3JlZ1tQT1MxMDY0X1hWUkVGQ1RSTF0gPSBBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLkRBQzEwNjQueHZyZWZjdHJsKTsKKwlody0+REFDcmVnW1BPUzEwNjRfWFZSRUZDVFJMXSA9IG1pbmZvLT5mZWF0dXJlcy5EQUMxMDY0Lnh2cmVmY3RybDsKIAlody0+REFDcmVnW1BPUzEwNjRfWEdFTkNUUkxdICY9IH5NMTA2NF9YR0VOQ1RSTF9TWU5DX09OX0dSRUVOX01BU0s7CiAJaHctPkRBQ3JlZ1tQT1MxMDY0X1hHRU5DVFJMXSB8PSAobS0+c3luYyAmIEZCX1NZTkNfT05fR1JFRU4pP00xMDY0X1hHRU5DVFJMX1NZTkNfT05fR1JFRU46TTEwNjRfWEdFTkNUUkxfTk9fU1lOQ19PTl9HUkVFTjsKIAlody0+REFDcmVnW1BPUzEwNjRfWENVUkFERExdID0gMDsKIAlody0+REFDcmVnW1BPUzEwNjRfWENVUkFEREhdID0gMDsKIAotCURBQzEwNjRfZ2xvYmFsX2luaXQoUE1JTkZPMik7CisJREFDMTA2NF9nbG9iYWxfaW5pdChtaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgREFDMTA2NF9pbml0XzIoV1BNSU5GTyBzdHJ1Y3QgbXlfdGltbWluZyogbSkgewotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworc3RhdGljIGludCBEQUMxMDY0X2luaXRfMihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBzdHJ1Y3QgbXlfdGltbWluZyAqbSkKK3sKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsID4gMTYpIHsJLyogMjU2IGVudHJpZXMgKi8KKwlpZiAobWluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCA+IDE2KSB7CS8qIDI1NiBlbnRyaWVzICovCiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMzg0LDggKzM5Niw4IEBACiAJCQlody0+REFDcGFsW2kgKiAzICsgMV0gPSBpOwogCQkJaHctPkRBQ3BhbFtpICogMyArIDJdID0gaTsKIAkJfQotCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsID4gOCkgewotCQlpZiAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyZWVuLmxlbmd0aCA9PSA1KSB7CS8qIDAuLjMxLCAxMjguLjE1OSAqLworCX0gZWxzZSBpZiAobWluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCA+IDgpIHsKKwkJaWYgKG1pbmZvLT5mYmNvbi52YXIuZ3JlZW4ubGVuZ3RoID09IDUpIHsJLyogMC4uMzEsIDEyOC4uMTU5ICovCiAJCQlpbnQgaTsKIAogCQkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKQEAgLTQxMyw4ICs0MjUsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBEQUMxMDY0X3Jlc3RvcmVfMShXUE1JTkZPMikgewotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworc3RhdGljIHZvaWQgREFDMTA2NF9yZXN0b3JlXzEoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlDUklURkxBR1MKIApAQCAtNDIyLDI4ICs0MzUsMjkgQEAKIAogCUNSSVRCRUdJTgogCi0JaWYgKChpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE0pICE9IGh3LT5EQUNjbGtbM10pIHx8Ci0JICAgIChpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE4pICE9IGh3LT5EQUNjbGtbNF0pIHx8Ci0JICAgIChpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTFApICE9IGh3LT5EQUNjbGtbNV0pKSB7Ci0JCW91dERBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTE0sIGh3LT5EQUNjbGtbM10pOwotCQlvdXREQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExOLCBody0+REFDY2xrWzRdKTsKLQkJb3V0REFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMUCwgaHctPkRBQ2Nsa1s1XSk7CisJaWYgKChpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTE0pICE9IGh3LT5EQUNjbGtbM10pIHx8CisJICAgIChpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTE4pICE9IGh3LT5EQUNjbGtbNF0pIHx8CisJICAgIChpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTFApICE9IGh3LT5EQUNjbGtbNV0pKSB7CisJCW91dERBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTE0sIGh3LT5EQUNjbGtbM10pOworCQlvdXREQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExOLCBody0+REFDY2xrWzRdKTsKKwkJb3V0REFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMUCwgaHctPkRBQ2Nsa1s1XSk7CiAJfQogCXsKIAkJdW5zaWduZWQgaW50IGk7CiAKIAkJZm9yIChpID0gMDsgaSA8IHNpemVvZihNR0ExMDY0X0RBQ19yZWdzKTsgaSsrKSB7CiAJCQlpZiAoKGkgIT0gUE9TMTA2NF9YUElYQ0xLQ1RSTCkgJiYgKGkgIT0gUE9TMTA2NF9YTUlTQ0NUUkwpKQotCQkJCW91dERBQzEwNjQoUE1JTkZPIE1HQTEwNjRfREFDX3JlZ3NbaV0sIGh3LT5EQUNyZWdbaV0pOworCQkJCW91dERBQzEwNjQobWluZm8sIE1HQTEwNjRfREFDX3JlZ3NbaV0sIGh3LT5EQUNyZWdbaV0pOwogCQl9CiAJfQogCi0JREFDMTA2NF9nbG9iYWxfcmVzdG9yZShQTUlORk8yKTsKKwlEQUMxMDY0X2dsb2JhbF9yZXN0b3JlKG1pbmZvKTsKIAogCUNSSVRFTkQKIH07CiAKLXN0YXRpYyB2b2lkIERBQzEwNjRfcmVzdG9yZV8yKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBEQUMxMDY0X3Jlc3RvcmVfMihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogI2lmZGVmIERFQlVHCiAJdW5zaWduZWQgaW50IGk7CiAjZW5kaWYKQEAgLTQ1MywxMiArNDY3LDEyIEBACiAjaWZkZWYgREVCVUcKIAlkcHJpbnRrKEtFUk5fREVCVUcgIkRBQzEwNjRyZWdzICIpOwogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoTUdBMTA2NF9EQUNfcmVncyk7IGkrKykgewotCQlkcHJpbnRrKCJSJTAyWD0lMDJYICIsIE1HQTEwNjRfREFDX3JlZ3NbaV0sIEFDQ0VTU19GQklORk8oaHcpLkRBQ3JlZ1tpXSk7CisJCWRwcmludGsoIlIlMDJYPSUwMlggIiwgTUdBMTA2NF9EQUNfcmVnc1tpXSwgbWluZm8tPmh3LkRBQ3JlZ1tpXSk7CiAJCWlmICgoaSAmIDB4NykgPT0gMHg3KSBkcHJpbnRrKEtFUk5fREVCVUcgImNvbnRpbnVpbmcuLi4gIik7CiAJfQogCWRwcmludGsoS0VSTl9ERUJVRyAiREFDMTA2NGNsayAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlkcHJpbnRrKCJDJTAyWD0lMDJYICIsIGksIEFDQ0VTU19GQklORk8oaHcpLkRBQ2Nsa1tpXSk7CisJCWRwcmludGsoIkMlMDJYPSUwMlggIiwgaSwgbWluZm8tPmh3LkRBQ2Nsa1tpXSk7CiAJZHByaW50aygiXG4iKTsKICNlbmRpZgogfQpAQCAtNDcwLDE0ICs0ODQsMTQgQEAKIAkJaW50IHRtb3V0OwogCQlDUklURkxBR1MKIAotCQlEQUMxMDY0X3NldHBjbGsoUE1JTkZPIG0tPnBpeGNsb2NrKTsKKwkJREFDMTA2NF9zZXRwY2xrKG1pbmZvLCBtLT5waXhjbG9jayk7CiAKIAkJQ1JJVEJFR0lOCiAKIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhQTExDTSArIGksIEFDQ0VTU19GQklORk8oaHcpLkRBQ2Nsa1tpXSk7CisJCQlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYUExMQ00gKyBpLCBtaW5mby0+aHcuREFDY2xrW2ldKTsKIAkJZm9yICh0bW91dCA9IDUwMDAwMDsgdG1vdXQ7IHRtb3V0LS0pIHsKLQkJCWlmIChpbkRBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhQTExTVEFUKSAmIDB4NDApCisJCQlpZiAoaW5EQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYUExMU1RBVCkgJiAweDQwKQogCQkJCWJyZWFrOwogCQkJdWRlbGF5KDEwKTsKIAkJfTsKQEAgLTUwMCw5ICs1MTQsOSBAQAogc3RhdGljIGludCBnNDUwX2NvbXB1dGUodm9pZCogb3V0LCBzdHJ1Y3QgbXlfdGltbWluZyogbSkgewogI2RlZmluZSBtaW5mbyAoKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyopb3V0KQogCWlmIChtLT5tbnAgPCAwKSB7Ci0JCW0tPm1ucCA9IG1hdHJveGZiX2c0NTBfc2V0Y2xrKFBNSU5GTyBtLT5waXhjbG9jaywgKG0tPmNydGMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSA/IE1fUElYRUxfUExMX0MgOiBNX1ZJREVPX1BMTCk7CisJCW0tPm1ucCA9IG1hdHJveGZiX2c0NTBfc2V0Y2xrKG1pbmZvLCBtLT5waXhjbG9jaywgKG0tPmNydGMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSA/IE1fUElYRUxfUExMX0MgOiBNX1ZJREVPX1BMTCk7CiAJCWlmIChtLT5tbnAgPj0gMCkgewotCQkJbS0+cGl4Y2xvY2sgPSBnNDUwX21ucDJmKFBNSU5GTyBtLT5tbnApOworCQkJbS0+cGl4Y2xvY2sgPSBnNDUwX21ucDJmKG1pbmZvLCBtLT5tbnApOwogCQl9CiAJfQogI3VuZGVmIG1pbmZvCkBAIC01MTgsMTMgKzUzMiwxNCBAQAogI2VuZGlmIC8qIE5FRURfREFDMTA2NCAqLwogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRQotc3RhdGljIGludCBNR0ExMDY0X2luaXQoV1BNSU5GTyBzdHJ1Y3QgbXlfdGltbWluZyogbSkgewotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworc3RhdGljIGludCBNR0ExMDY0X2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgc3RydWN0IG15X3RpbW1pbmcgKm0pCit7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCi0JaWYgKERBQzEwNjRfaW5pdF8xKFBNSU5GTyBtKSkgcmV0dXJuIDE7Ci0JaWYgKG1hdHJveGZiX3ZnYUhXaW5pdChQTUlORk8gbSkpIHJldHVybiAxOworCWlmIChEQUMxMDY0X2luaXRfMShtaW5mbywgbSkpIHJldHVybiAxOworCWlmIChtYXRyb3hmYl92Z2FIV2luaXQobWluZm8sIG0pKSByZXR1cm4gMTsKIAogCWh3LT5NaXNjT3V0UmVnID0gMHhDQjsKIAlpZiAobS0+c3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKQpAQCAtNTM0LDIwICs1NDksMjEgQEAKIAlpZiAobS0+c3luYyAmIEZCX1NZTkNfQ09NUF9ISUdIX0FDVCkgLyogc2hvdWxkIGJlIG9ubHkgRkJfU1lOQ19DT01QICovCiAJCWh3LT5DUlRDRVhUWzNdIHw9IDB4NDA7CiAKLQlpZiAoREFDMTA2NF9pbml0XzIoUE1JTkZPIG0pKSByZXR1cm4gMTsKKwlpZiAoREFDMTA2NF9pbml0XzIobWluZm8sIG0pKSByZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9HCi1zdGF0aWMgaW50IE1HQUcxMDBfaW5pdChXUE1JTkZPIHN0cnVjdCBteV90aW1taW5nKiBtKSB7Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CitzdGF0aWMgaW50IE1HQUcxMDBfaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBzdHJ1Y3QgbXlfdGltbWluZyAqbSkKK3sKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlpZiAoREFDMTA2NF9pbml0XzEoUE1JTkZPIG0pKSByZXR1cm4gMTsKKwlpZiAoREFDMTA2NF9pbml0XzEobWluZm8sIG0pKSByZXR1cm4gMTsKIAlody0+TVhvcHRpb25SZWcgJj0gfjB4MjAwMDsKLQlpZiAobWF0cm94ZmJfdmdhSFdpbml0KFBNSU5GTyBtKSkgcmV0dXJuIDE7CisJaWYgKG1hdHJveGZiX3ZnYUhXaW5pdChtaW5mbywgbSkpIHJldHVybiAxOwogCiAJaHctPk1pc2NPdXRSZWcgPSAweEVGOwogCWlmIChtLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpCkBAIC01NTcsMjcgKzU3MywyOCBAQAogCWlmIChtLT5zeW5jICYgRkJfU1lOQ19DT01QX0hJR0hfQUNUKSAvKiBzaG91bGQgYmUgb25seSBGQl9TWU5DX0NPTVAgKi8KIAkJaHctPkNSVENFWFRbM10gfD0gMHg0MDsKIAotCWlmIChEQUMxMDY0X2luaXRfMihQTUlORk8gbSkpIHJldHVybiAxOworCWlmIChEQUMxMDY0X2luaXRfMihtaW5mbywgbSkpIHJldHVybiAxOwogCXJldHVybiAwOwogfQogI2VuZGlmCS8qIEcgKi8KIAogI2lmZGVmIENPTkZJR19GQl9NQVRST1hfTVlTVElRVUUKLXN0YXRpYyB2b2lkIE1HQTEwNjRfcmFtZGFjX2luaXQoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIE1HQTEwNjRfcmFtZGFjX2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAogCURCRyhfX2Z1bmNfXykKIAotCS8qIEFDQ0VTU19GQklORk8oZmVhdHVyZXMuREFDMTA2NC52Y29fZnJlcV9taW4pID0gMTIwMDAwOyAqLwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLnZjb19mcmVxX21pbikgPSA2MjAwMDsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5yZWZfZnJlcSkJID0gMTQzMTg7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWluKSA9IDEwMDsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9tYXgpID0gMTI3OwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmluX2Rpdl9taW4pCSA9IDE7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuaW5fZGl2X21heCkJID0gMzE7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwucG9zdF9zaGlmdF9tYXgpID0gMzsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLkRBQzEwNjQueHZyZWZjdHJsKSA9IERBQzEwNjRfWFZSRUZDVFJMX0VYVEVSTkFMOworCS8qIG1pbmZvLT5mZWF0dXJlcy5EQUMxMDY0LnZjb19mcmVxX21pbiA9IDEyMDAwMDsgKi8KKwltaW5mby0+ZmVhdHVyZXMucGxsLnZjb19mcmVxX21pbiA9IDYyMDAwOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJID0gMTQzMTg7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9taW4gPSAxMDA7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9tYXggPSAxMjc7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5pbl9kaXZfbWluCSA9IDE7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5pbl9kaXZfbWF4CSA9IDMxOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucG9zdF9zaGlmdF9tYXggPSAzOworCW1pbmZvLT5mZWF0dXJlcy5EQUMxMDY0Lnh2cmVmY3RybCA9IERBQzEwNjRfWFZSRUZDVFJMX0VYVEVSTkFMOwogCS8qIG1heWJlIGNtZGxpbmUgTUNMSz0gPywgZG9jIHNheXMgZ2Nsaz00NE1IeiwgbWNsaz02Nk1Iei4uLiBpdCB3YXMgNTUvODMgd2l0aCBvbGQgdmFsdWVzICovCi0JREFDMTA2NF9zZXRtY2xrKFBNSU5GTyBEQUMxMDY0X09QVF9NRElWMiB8IERBQzEwNjRfT1BUX0dESVYzIHwgREFDMTA2NF9PUFRfU0NMS19QTEwsIDEzMzMzMyk7CisJREFDMTA2NF9zZXRtY2xrKG1pbmZvLCBEQUMxMDY0X09QVF9NRElWMiB8IERBQzEwNjRfT1BUX0dESVYzIHwgREFDMTA2NF9PUFRfU0NMS19QTEwsIDEzMzMzMyk7CiB9CiAjZW5kaWYKIApAQCAtNTg5LDIzICs2MDYsMjUgQEAKIHN0YXRpYyBpbnQgZGVmNTAgPSAwOwkvKiByZWc1MCwgJiAweDBGLCAmIDB4MzAwMCAob25seSAweDAwMDAsIDB4MTAwMCwgMHgyMDAwICgweDMwMDAgZGlzYWxsb3dlZCBhbmQgdHJlYXRlZCBhcyAwKSAqLwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIE1HQUcxMDBfcHJvZ1BpeENsb2NrKENQTUlORk8gaW50IGZsYWdzLCBpbnQgbSwgaW50IG4sIGludCBwKSB7CitzdGF0aWMgdm9pZCBNR0FHMTAwX3Byb2dQaXhDbG9jayhjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgZmxhZ3MsCisJCQkJIGludCBtLCBpbnQgbiwgaW50IHApCit7CiAJaW50IHJlZzsKIAlpbnQgc2VsQ2xrOwogCWludCBjbGs7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCwgaW5EQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCkgfCBNMTA2NF9YUElYQ0xLQ1RSTF9ESVMgfAorCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hQSVhDTEtDVFJMLCBpbkRBQzEwNjQobWluZm8sIE0xMDY0X1hQSVhDTEtDVFJMKSB8IE0xMDY0X1hQSVhDTEtDVFJMX0RJUyB8CiAJCSAgIE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUCk7CiAJc3dpdGNoIChmbGFncyAmIDMpIHsKIAkJY2FzZSAwOgkJcmVnID0gTTEwNjRfWFBJWFBMTEFNOyBicmVhazsKIAkJY2FzZSAxOgkJcmVnID0gTTEwNjRfWFBJWFBMTEJNOyBicmVhazsKIAkJZGVmYXVsdDoJcmVnID0gTTEwNjRfWFBJWFBMTENNOyBicmVhazsKIAl9Ci0Jb3V0REFDMTA2NChQTUlORk8gcmVnKyssIG0pOwotCW91dERBQzEwNjQoUE1JTkZPIHJlZysrLCBuKTsKLQlvdXREQUMxMDY0KFBNSU5GTyByZWcsIHApOworCW91dERBQzEwNjQobWluZm8sIHJlZysrLCBtKTsKKwlvdXREQUMxMDY0KG1pbmZvLCByZWcrKywgbik7CisJb3V0REFDMTA2NChtaW5mbywgcmVnLCBwKTsKIAlzZWxDbGsgPSBtZ2FfaW5iKE1fTUlTQ19SRUdfUkVBRCkgJiB+MHhDOwogCS8qIHRoZXJlIHNob3VsZCBiZSBmbGFncyAmIDB4MDMgJiBjYXNlIDAvMS9lbHNlICovCiAJLyogYW5kIHdlIHNob3VsZCBmaXJzdCBzZWxlY3Qgc291cmNlIGFuZCBhZnRlciB0aGF0IHdlIHNob3VsZCB3YWl0IGZvciBQTEwgKi8KQEAgLTYxNyw2MSArNjM2LDY0IEBACiAJfQogCW1nYV9vdXRiKE1fTUlTQ19SRUcsIHNlbENsayk7CiAJZm9yIChjbGsgPSA1MDAwMDA7IGNsazsgY2xrLS0pIHsKLQkJaWYgKGluREFDMTA2NChQTUlORk8gTTEwNjRfWFBJWFBMTFNUQVQpICYgMHg0MCkKKwkJaWYgKGluREFDMTA2NChtaW5mbywgTTEwNjRfWFBJWFBMTFNUQVQpICYgMHg0MCkKIAkJCWJyZWFrOwogCQl1ZGVsYXkoMTApOwogCX07CiAJaWYgKCFjbGspCiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmI6IFBpeGVsIFBMTCVjIG5vdCBsb2NrZWQgYWZ0ZXIgdXN1YWwgdGltZVxuIiwgKHJlZy1NMTA2NF9YUElYUExMQU0tMikvNCArICdBJyk7Ci0Jc2VsQ2xrID0gaW5EQUMxMDY0KFBNSU5GTyBNMTA2NF9YUElYQ0xLQ1RSTCkgJiB+TTEwNjRfWFBJWENMS0NUUkxfU1JDX01BU0s7CisJc2VsQ2xrID0gaW5EQUMxMDY0KG1pbmZvLCBNMTA2NF9YUElYQ0xLQ1RSTCkgJiB+TTEwNjRfWFBJWENMS0NUUkxfU1JDX01BU0s7CiAJc3dpdGNoIChmbGFncyAmIDB4MEMpIHsKIAkJY2FzZSAweDAwOglzZWxDbGsgfD0gTTEwNjRfWFBJWENMS0NUUkxfU1JDX1BDSTsgYnJlYWs7CiAJCWNhc2UgMHgwNDoJc2VsQ2xrIHw9IE0xMDY0X1hQSVhDTEtDVFJMX1NSQ19QTEw7IGJyZWFrOwogCQlkZWZhdWx0OglzZWxDbGsgfD0gTTEwNjRfWFBJWENMS0NUUkxfU1JDX0VYVDsgYnJlYWs7CiAJfQotCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMLCBzZWxDbGspOwotCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMLCBpbkRBQzEwNjQoUE1JTkZPIE0xMDY0X1hQSVhDTEtDVFJMKSAmIH5NMTA2NF9YUElYQ0xLQ1RSTF9ESVMpOworCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hQSVhDTEtDVFJMLCBzZWxDbGspOworCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hQSVhDTEtDVFJMLCBpbkRBQzEwNjQobWluZm8sIE0xMDY0X1hQSVhDTEtDVFJMKSAmIH5NMTA2NF9YUElYQ0xLQ1RSTF9ESVMpOwogfQogCi1zdGF0aWMgdm9pZCBNR0FHMTAwX3NldFBpeENsb2NrKENQTUlORk8gaW50IGZsYWdzLCBpbnQgZnJlcSkgeworc3RhdGljIHZvaWQgTUdBRzEwMF9zZXRQaXhDbG9jayhjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgZmxhZ3MsCisJCQkJaW50IGZyZXEpCit7CiAJdW5zaWduZWQgaW50IG0sIG4sIHA7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlEQUMxMDY0X2NhbGNjbG9jayhQTUlORk8gZnJlcSwgQUNDRVNTX0ZCSU5GTyhtYXhfcGl4ZWxfY2xvY2spLCAmbSwgJm4sICZwKTsKLQlNR0FHMTAwX3Byb2dQaXhDbG9jayhQTUlORk8gZmxhZ3MsIG0sIG4sIHApOworCURBQzEwNjRfY2FsY2Nsb2NrKG1pbmZvLCBmcmVxLCBtaW5mby0+bWF4X3BpeGVsX2Nsb2NrLCAmbSwgJm4sICZwKTsKKwlNR0FHMTAwX3Byb2dQaXhDbG9jayhtaW5mbywgZmxhZ3MsIG0sIG4sIHApOwogfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFCi1zdGF0aWMgaW50IE1HQTEwNjRfcHJlaW5pdChXUE1JTkZPMikgeworc3RhdGljIGludCBNR0ExMDY0X3ByZWluaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAlzdGF0aWMgY29uc3QgaW50IHZ4cmVzX215c3RpcXVlW10gPSB7IDUxMiwgICAgICAgIDY0MCwgNzY4LCAgODAwLCAgODMyLCAgOTYwLAogCQkJCQkgICAgIDEwMjQsIDExNTIsIDEyODAsICAgICAgMTYwMCwgMTY2NCwgMTkyMCwKIAkJCQkJICAgICAyMDQ4LCAgICAwfTsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlKiBodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlEQkcoX19mdW5jX18pCiAKLQkvKiBBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY2ZiNCkgPSAwOyAuLi4gcHJlaW5pdGlhbGl6ZWQgYnkgMCAqLwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS50ZXh0KSA9IDE7Ci0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnZ4cmVzKSA9IHZ4cmVzX215c3RpcXVlOworCS8qIG1pbmZvLT5jYXBhYmxlLmNmYjQgPSAwOyAuLi4gcHJlaW5pdGlhbGl6ZWQgYnkgMCAqLworCW1pbmZvLT5jYXBhYmxlLnRleHQgPSAxOworCW1pbmZvLT5jYXBhYmxlLnZ4cmVzID0gdnhyZXNfbXlzdGlxdWU7CiAKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLm91dHB1dCA9ICZtMTA2NDsKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLnNyYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuZGVmYXVsdF9zcmM7Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5kYXRhID0gTUlORk87Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwltaW5mby0+b3V0cHV0c1swXS5vdXRwdXQgPSAmbTEwNjQ7CisJbWluZm8tPm91dHB1dHNbMF0uc3JjID0gbWluZm8tPm91dHB1dHNbMF0uZGVmYXVsdF9zcmM7CisJbWluZm8tPm91dHB1dHNbMF0uZGF0YSA9IG1pbmZvOworCW1pbmZvLT5vdXRwdXRzWzBdLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOwogCi0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9pbml0KSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vaW5pdCkKIAkJcmV0dXJuIDA7CS8qIGRvIG5vdCBtb2RpZnkgc2V0dGluZ3MgKi8KIAlody0+TVhvcHRpb25SZWcgJj0gMHhDMDAwMDEwMDsKIAlody0+TVhvcHRpb25SZWcgfD0gMHgwMDA5NEUyMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3ZnYSkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub3ZnYSkKIAkJaHctPk1Yb3B0aW9uUmVnICY9IH4weDAwMDAwMTAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vYmlvcykpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2Jpb3MpCiAJCWh3LT5NWG9wdGlvblJlZyAmPSB+MHg0MDAwMDAwMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub3BjaXJldHJ5KSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vcGNpcmV0cnkpCiAJCWh3LT5NWG9wdGlvblJlZyB8PSAgMHgyMDAwMDAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKIAltZ2Ffc2V0cihNX1NFUV9JTkRFWCwgMHgwMSwgMHgyMCk7CiAJbWdhX291dGwoTV9DVExXVFNULCAweDAwMDAwMDAwKTsKIAl1ZGVsYXkoMjAwKTsKQEAgLTY4MSwxMDEgKzcwMywxMDUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgTUdBMTA2NF9yZXNldChXUE1JTkZPMikgeworc3RhdGljIHZvaWQgTUdBMTA2NF9yZXNldChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCiAJREJHKF9fZnVuY19fKTsKIAotCU1HQTEwNjRfcmFtZGFjX2luaXQoUE1JTkZPMik7CisJTUdBMTA2NF9yYW1kYWNfaW5pdChtaW5mbyk7CiB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQl9NQVRST1hfRwotc3RhdGljIHZvaWQgZzQ1MF9tY2xrX2luaXQoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIGc0NTBfbWNsa19pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJLyogc3dpdGNoIGFsbCBjbG9ja3MgdG8gUENJIHNvdXJjZSAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgfCA0KTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTjNfUkVHLCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm9wdDMgJiB+MHgwMDMwMEMwMyk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyk7Ci0JCi0JaWYgKCgoQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQzICYgMHgwMDAwMDMpID09IDB4MDAwMDAzKSB8fAotCSAgICAoKEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0MyAmIDB4MDAwQzAwKSA9PSAweDAwMEMwMCkgfHwKLQkgICAgKChBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm9wdDMgJiAweDMwMDAwMCkgPT0gMHgzMDAwMDApKSB7Ci0JCW1hdHJveGZiX2c0NTBfc2V0Y2xrKFBNSU5GTyBBQ0NFU1NfRkJJTkZPKHZhbHVlcy5wbGwudmlkZW8pLCBNX1ZJREVPX1BMTCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnIHwgNCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OM19SRUcsIG1pbmZvLT52YWx1ZXMucmVnLm9wdDMgJiB+MHgwMDMwMEMwMyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnKTsKKworCWlmICgoKG1pbmZvLT52YWx1ZXMucmVnLm9wdDMgJiAweDAwMDAwMykgPT0gMHgwMDAwMDMpIHx8CisJICAgICgobWluZm8tPnZhbHVlcy5yZWcub3B0MyAmIDB4MDAwQzAwKSA9PSAweDAwMEMwMCkgfHwKKwkgICAgKChtaW5mby0+dmFsdWVzLnJlZy5vcHQzICYgMHgzMDAwMDApID09IDB4MzAwMDAwKSkgeworCQltYXRyb3hmYl9nNDUwX3NldGNsayhtaW5mbywgbWluZm8tPnZhbHVlcy5wbGwudmlkZW8sIE1fVklERU9fUExMKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBpbnQgcHdyOwogCQkKIAkJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7Ci0JCXB3ciA9IGluREFDMTA2NChQTUlORk8gTTEwNjRfWFBXUkNUUkwpICYgfjB4MDI7Ci0JCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hQV1JDVFJMLCBwd3IpOworCQlwd3IgPSBpbkRBQzEwNjQobWluZm8sIE0xMDY0X1hQV1JDVFJMKSAmIH4weDAyOworCQlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YUFdSQ1RSTCwgcHdyKTsKIAkJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIAl9Ci0JbWF0cm94ZmJfZzQ1MF9zZXRjbGsoUE1JTkZPIEFDQ0VTU19GQklORk8odmFsdWVzLnBsbC5zeXN0ZW0pLCBNX1NZU1RFTV9QTEwpOworCW1hdHJveGZiX2c0NTBfc2V0Y2xrKG1pbmZvLCBtaW5mby0+dmFsdWVzLnBsbC5zeXN0ZW0sIE1fU1lTVEVNX1BMTCk7CiAJCiAJLyogc3dpdGNoIGNsb2NrcyB0byB0aGVpciByZWFsIFBMTCBzb3VyY2UocykgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnIHwgNCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT04zX1JFRywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQzKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBtaW5mby0+aHcuTVhvcHRpb25SZWcgfCA0KTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT04zX1JFRywgbWluZm8tPnZhbHVlcy5yZWcub3B0Myk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnKTsKIAogfQogCi1zdGF0aWMgdm9pZCBnNDUwX21lbW9yeV9pbml0KFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBnNDUwX21lbW9yeV9pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJLyogZGlzYWJsZSBtZW1vcnkgcmVmcmVzaCAqLwotCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnICY9IH4weDAwMUY4MDAwOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcpOworCW1pbmZvLT5ody5NWG9wdGlvblJlZyAmPSB+MHgwMDFGODAwMDsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBtaW5mby0+aHcuTVhvcHRpb25SZWcpOwogCQogCS8qIHNldCBtZW1vcnkgaW50ZXJmYWNlIHBhcmFtZXRlcnMgKi8KLQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyAmPSB+MHgwMDIwN0UwMDsKLQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyB8PSAweDAwMjA3RTAwICYgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQ7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCBBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT04yX1JFRywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQyKTsKKwltaW5mby0+aHcuTVhvcHRpb25SZWcgJj0gfjB4MDAyMDdFMDA7CisJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnIHw9IDB4MDAyMDdFMDAgJiBtaW5mby0+dmFsdWVzLnJlZy5vcHQ7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT04yX1JFRywgbWluZm8tPnZhbHVlcy5yZWcub3B0Mik7CiAJCi0JbWdhX291dGwoTV9DVExXVFNULCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1jdGx3dHN0KTsKKwltZ2Ffb3V0bChNX0NUTFdUU1QsIG1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0KTsKIAkKIAkvKiBmaXJzdCBzZXQgdXAgbWVtb3J5IGludGVyZmFjZSB3aXRoIGRpc2FibGVkIG1lbW9yeSBpbnRlcmZhY2UgY2xvY2tzICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9NRU1NSVNDX1JFRywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tZW1taXNjICYgfjB4ODAwMDAwMDBVKTsKLQltZ2Ffb3V0bChNX01FTVJEQkssIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWVtcmRiayk7Ci0JbWdhX291dGwoTV9NQUNDRVNTLCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1hY2Nlc3MpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX01FTU1JU0NfUkVHLCBtaW5mby0+dmFsdWVzLnJlZy5tZW1taXNjICYgfjB4ODAwMDAwMDBVKTsKKwltZ2Ffb3V0bChNX01FTVJEQkssIG1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmspOworCW1nYV9vdXRsKE1fTUFDQ0VTUywgbWluZm8tPnZhbHVlcy5yZWcubWFjY2Vzcyk7CiAJLyogc3RhcnQgbWVtb3J5IGNsb2NrcyAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfTUVNTUlTQ19SRUcsIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWVtbWlzYyB8IDB4ODAwMDAwMDBVKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9NRU1NSVNDX1JFRywgbWluZm8tPnZhbHVlcy5yZWcubWVtbWlzYyB8IDB4ODAwMDAwMDBVKTsKIAogCXVkZWxheSgyMDApOwogCQotCWlmIChBQ0NFU1NfRkJJTkZPKHZhbHVlcykubWVtb3J5LmRkciAmJiAoIUFDQ0VTU19GQklORk8odmFsdWVzKS5tZW1vcnkuZW1yc3dlbiB8fCAhQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLm1lbW9yeS5kbGwpKSB7Ci0JCW1nYV9vdXRsKE1fTUVNUkRCSywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tZW1yZGJrICYgfjB4MTAwMCk7CisJaWYgKG1pbmZvLT52YWx1ZXMubWVtb3J5LmRkciAmJiAoIW1pbmZvLT52YWx1ZXMubWVtb3J5LmVtcnN3ZW4gfHwgIW1pbmZvLT52YWx1ZXMubWVtb3J5LmRsbCkpIHsKKwkJbWdhX291dGwoTV9NRU1SREJLLCBtaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrICYgfjB4MTAwMCk7CiAJfQotCW1nYV9vdXRsKE1fTUFDQ0VTUywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tYWNjZXNzIHwgMHg4MDAwKTsKKwltZ2Ffb3V0bChNX01BQ0NFU1MsIG1pbmZvLT52YWx1ZXMucmVnLm1hY2Nlc3MgfCAweDgwMDApOwogCQogCXVkZWxheSgyMDApOwogCQotCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnIHw9IDB4MDAxRjgwMDAgJiBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm9wdDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnKTsKKwltaW5mby0+aHcuTVhvcHRpb25SZWcgfD0gMHgwMDFGODAwMCAmIG1pbmZvLT52YWx1ZXMucmVnLm9wdDsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBtaW5mby0+aHcuTVhvcHRpb25SZWcpOwogCQogCS8qIHZhbHVlIGlzIHdyaXR0ZW4gdG8gbWVtb3J5IGNoaXBzIG9ubHkgaWYgb2xkICE9IG5ldyAqLwogCW1nYV9vdXRsKE1fUExOV1QsIDApOwogCW1nYV9vdXRsKE1fUExOV1QsIH4wKTsKIAkKLQlpZiAoQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tY3Rsd3RzdCAhPSBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1jdGx3dHN0X2NvcmUpIHsKLQkJbWdhX291dGwoTV9DVExXVFNULCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1jdGx3dHN0X2NvcmUpOworCWlmIChtaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdCAhPSBtaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdF9jb3JlKSB7CisJCW1nYV9vdXRsKE1fQ1RMV1RTVCwgbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3RfY29yZSk7CiAJfQogCQogfQogCi1zdGF0aWMgdm9pZCBnNDUwX3ByZWluaXQoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIGc0NTBfcHJlaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCXVfaW50MzJfdCBjMmN0bDsKIAl1X2ludDhfdCBjdXJjdGw7CiAJdV9pbnQ4X3QgYzFjdGw7CiAJCi0JLyogQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgPSBtaW5mby0+dmFsdWVzLnJlZy5vcHQ7ICovCi0JQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgJj0gMHhDMDAwMDEwMDsKLQlBQ0NFU1NfRkJJTkZPKGh3KS5NWG9wdGlvblJlZyB8PSAweDAwMDAwMDIwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vdmdhKSkKLQkJQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgJj0gfjB4MDAwMDAxMDA7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9iaW9zKSkKLQkJQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgJj0gfjB4NDAwMDAwMDA7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9wY2lyZXRyeSkpCi0JCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnIHw9ICAweDIwMDAwMDAwOwotCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnIHw9IEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0ICYgMHgwMzQwMDA0MDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnKTsKKwkvKiBtaW5mby0+aHcuTVhvcHRpb25SZWcgPSBtaW5mby0+dmFsdWVzLnJlZy5vcHQ7ICovCisJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnICY9IDB4QzAwMDAxMDA7CisJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnIHw9IDB4MDAwMDAwMjA7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub3ZnYSkKKwkJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnICY9IH4weDAwMDAwMTAwOworCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm9iaW9zKQorCQltaW5mby0+aHcuTVhvcHRpb25SZWcgJj0gfjB4NDAwMDAwMDA7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub3BjaXJldHJ5KQorCQltaW5mby0+aHcuTVhvcHRpb25SZWcgfD0gIDB4MjAwMDAwMDA7CisJbWluZm8tPmh3Lk1Yb3B0aW9uUmVnIHw9IG1pbmZvLT52YWx1ZXMucmVnLm9wdCAmIDB4MDM0MDAwNDA7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnKTsKIAogCS8qIEluaXQgc3lzdGVtIGNsb2NrcyAqLwogCQkKQEAgLTc4MywyNCArODA5LDI0IEBACiAJYzJjdGwgPSBtZ2FfaW5sKE1fQzJDVEwpOwogCW1nYV9vdXRsKE1fQzJDVEwsIGMyY3RsICYgfjEpOwogCS8qIHN0b3AgY3Vyc29yICovCi0JY3VyY3RsID0gaW5EQUMxMDY0KFBNSU5GTyBNMTA2NF9YQ1VSQ1RSTCk7Ci0Jb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWENVUkNUUkwsIDApOworCWN1cmN0bCA9IGluREFDMTA2NChtaW5mbywgTTEwNjRfWENVUkNUUkwpOworCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hDVVJDVFJMLCAwKTsKIAkvKiBzdG9wIGNydGMxICovCiAJYzFjdGwgPSBtZ2FfcmVhZHIoTV9TRVFfSU5ERVgsIDEpOwogCW1nYV9zZXRyKE1fU0VRX0lOREVYLCAxLCBjMWN0bCB8IDB4MjApOwogCi0JZzQ1MF9tY2xrX2luaXQoUE1JTkZPMik7Ci0JZzQ1MF9tZW1vcnlfaW5pdChQTUlORk8yKTsKKwlnNDUwX21jbGtfaW5pdChtaW5mbyk7CisJZzQ1MF9tZW1vcnlfaW5pdChtaW5mbyk7CiAJCiAJLyogc2V0IGxlZ2FjeSBWR0EgY2xvY2sgc291cmNlcyBmb3IgRE9TRW11IG9yIFZNd2FyZS4uLiAqLwotCW1hdHJveGZiX2c0NTBfc2V0Y2xrKFBNSU5GTyAyNTE3NSwgTV9QSVhFTF9QTExfQSk7Ci0JbWF0cm94ZmJfZzQ1MF9zZXRjbGsoUE1JTkZPIDI4MzIyLCBNX1BJWEVMX1BMTF9CKTsKKwltYXRyb3hmYl9nNDUwX3NldGNsayhtaW5mbywgMjUxNzUsIE1fUElYRUxfUExMX0EpOworCW1hdHJveGZiX2c0NTBfc2V0Y2xrKG1pbmZvLCAyODMyMiwgTV9QSVhFTF9QTExfQik7CiAKIAkvKiByZXN0b3JlIGNydGMxICovCiAJbWdhX3NldHIoTV9TRVFfSU5ERVgsIDEsIGMxY3RsKTsKIAkKIAkvKiByZXN0b3JlIGN1cnNvciAqLwotCW91dERBQzEwNjQoUE1JTkZPIE0xMDY0X1hDVVJDVFJMLCBjdXJjdGwpOworCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hDVVJDVFJMLCBjdXJjdGwpOwogCiAJLyogcmVzdG9yZSBjcnRjMiAqLwogCW1nYV9vdXRsKE1fQzJDVEwsIGMyY3RsKTsKQEAgLTgwOCwxMSArODM0LDEyIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IE1HQUcxMDBfcHJlaW5pdChXUE1JTkZPMikgeworc3RhdGljIGludCBNR0FHMTAwX3ByZWluaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAlzdGF0aWMgY29uc3QgaW50IHZ4cmVzX2cxMDBbXSA9IHsgIDUxMiwgICAgICAgIDY0MCwgNzY4LCAgODAwLCAgODMyLCAgOTYwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCwgMTE1MiwgMTI4MCwgICAgICAxNjAwLCAxNjY0LCAxOTIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCwgMH07Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAgICAgICAgIHVfaW50MzJfdCByZWc1MDsKICNpZiAwCkBAIC04MjIsNjggKzg0OSw2OCBAQAogCURCRyhfX2Z1bmNfXykKIAogCS8qIHRoZXJlIGFyZSBzb21lIGluc3RhYmlsaXRpZXMgaWYgaW5fZGl2ID4gMTkgJiYgdmNvIDwgNjEwMDAgKi8KLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgewotCQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC52Y29fZnJlcV9taW4pID0gMTMwMDAwOwkvKiBteSBzYW1wbGU6ID4xMTggKi8KKwlpZiAobWluZm8tPmRldmZsYWdzLmc0NTBkYWMpIHsKKwkJbWluZm8tPmZlYXR1cmVzLnBsbC52Y29fZnJlcV9taW4gPSAxMzAwMDA7CS8qIG15IHNhbXBsZTogPjExOCAqLwogCX0gZWxzZSB7Ci0JCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLnZjb19mcmVxX21pbikgPSA2MjAwMDsKKwkJbWluZm8tPmZlYXR1cmVzLnBsbC52Y29fZnJlcV9taW4gPSA2MjAwMDsKIAl9Ci0JaWYgKCFBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5yZWZfZnJlcSkpIHsKLQkJQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwucmVmX2ZyZXEpCSA9IDI3MDAwOworCWlmICghbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcSkgeworCQltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCSA9IDI3MDAwOwogCX0KLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9taW4pID0gNzsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9tYXgpID0gMTI3OwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmluX2Rpdl9taW4pCSA9IDE7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuaW5fZGl2X21heCkJID0gMzE7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwucG9zdF9zaGlmdF9tYXgpID0gMzsKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLkRBQzEwNjQueHZyZWZjdHJsKSA9IERBQzEwNjRfWFZSRUZDVFJMX0cxMDBfREVGQVVMVDsKLQkvKiBBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY2ZiNCkgPSAwOyAuLi4gcHJlaW5pdGlhbGl6ZWQgYnkgMCAqLwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS50ZXh0KSA9IDE7Ci0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnZ4cmVzKSA9IHZ4cmVzX2cxMDA7Ci0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnBsbnd0KSA9IEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuYWNjZWxlcmF0b3IpID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwCi0JCQk/IEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Muc2dyYW0pIDogMTsKKwltaW5mby0+ZmVhdHVyZXMucGxsLmZlZWRfZGl2X21pbiA9IDc7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5mZWVkX2Rpdl9tYXggPSAxMjc7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5pbl9kaXZfbWluCSA9IDE7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5pbl9kaXZfbWF4CSA9IDMxOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucG9zdF9zaGlmdF9tYXggPSAzOworCW1pbmZvLT5mZWF0dXJlcy5EQUMxMDY0Lnh2cmVmY3RybCA9IERBQzEwNjRfWFZSRUZDVFJMX0cxMDBfREVGQVVMVDsKKwkvKiBtaW5mby0+Y2FwYWJsZS5jZmI0ID0gMDsgLi4uIHByZWluaXRpYWxpemVkIGJ5IDAgKi8KKwltaW5mby0+Y2FwYWJsZS50ZXh0ID0gMTsKKwltaW5mby0+Y2FwYWJsZS52eHJlcyA9IHZ4cmVzX2cxMDA7CisJbWluZm8tPmNhcGFibGUucGxud3QgPSBtaW5mby0+ZGV2ZmxhZ3MuYWNjZWxlcmF0b3IgPT0gRkJfQUNDRUxfTUFUUk9YX01HQUcxMDAKKwkJCT8gbWluZm8tPmRldmZsYWdzLnNncmFtIDogMTsKIAogI2lmZGVmIENPTkZJR19GQl9NQVRST1hfRwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkub3V0cHV0ID0gJmc0NTBvdXQ7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CisJCW1pbmZvLT5vdXRwdXRzWzBdLm91dHB1dCA9ICZnNDUwb3V0OwogCX0gZWxzZQogI2VuZGlmCiAJewotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLm91dHB1dCA9ICZtMTA2NDsKKwkJbWluZm8tPm91dHB1dHNbMF0ub3V0cHV0ID0gJm0xMDY0OwogCX0KLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLnNyYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuZGVmYXVsdF9zcmM7Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5kYXRhID0gTUlORk87Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwltaW5mby0+b3V0cHV0c1swXS5zcmMgPSBtaW5mby0+b3V0cHV0c1swXS5kZWZhdWx0X3NyYzsKKwltaW5mby0+b3V0cHV0c1swXS5kYXRhID0gbWluZm87CisJbWluZm8tPm91dHB1dHNbMF0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgeworCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZzQ1MGRhYykgewogCQkvKiB3ZSBtdXN0IGRvIHRoaXMgYWx3YXlzLCBCSU9TIGRvZXMgbm90IGRvIGl0IGZvciB1cwogCQkgICBhbmQgYWNjZWxlcmF0b3IgZGllcyB3aXRob3V0IGl0ICovCiAJCW1nYV9vdXRsKDB4MUMwQywgMCk7CiAJfQotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vaW5pdCkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2luaXQpCiAJCXJldHVybiAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7Ci0JCWc0NTBfcHJlaW5pdChQTUlORk8yKTsKKwlpZiAobWluZm8tPmRldmZsYWdzLmc0NTBkYWMpIHsKKwkJZzQ1MF9wcmVpbml0KG1pbmZvKTsKIAkJcmV0dXJuIDA7CiAJfQogCWh3LT5NWG9wdGlvblJlZyAmPSAweEMwMDAwMTAwOwogCWh3LT5NWG9wdGlvblJlZyB8PSAweDAwMDAwMDIwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vdmdhKSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vdmdhKQogCQlody0+TVhvcHRpb25SZWcgJj0gfjB4MDAwMDAxMDA7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9iaW9zKSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vYmlvcykKIAkJaHctPk1Yb3B0aW9uUmVnICY9IH4weDQwMDAwMDAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vcGNpcmV0cnkpKQorCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm9wY2lyZXRyeSkKIAkJaHctPk1Yb3B0aW9uUmVnIHw9ICAweDIwMDAwMDAwOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKLQlEQUMxMDY0X3NldG1jbGsoUE1JTkZPIERBQzEwNjRfT1BUX01ESVYyIHwgREFDMTA2NF9PUFRfR0RJVjMgfCBEQUMxMDY0X09QVF9TQ0xLX1BDSSwgMTMzMzMzKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOworCURBQzEwNjRfc2V0bWNsayhtaW5mbywgREFDMTA2NF9PUFRfTURJVjIgfCBEQUMxMDY0X09QVF9HRElWMyB8IERBQzEwNjRfT1BUX1NDTEtfUENJLCAxMzMzMzMpOwogCi0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuYWNjZWxlcmF0b3IpID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT04yX1JFRywgJnJlZzUwKTsKKwlpZiAobWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsICZyZWc1MCk7CiAJCXJlZzUwICY9IH4weDMwMDA7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKIAogCQlody0+TVhvcHRpb25SZWcgfD0gMHgxMDgwOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7Ci0JCW1nYV9vdXRsKE1fQ1RMV1RTVCwgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tY3Rsd3RzdCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWluZm8tPnBjaWRldiwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJCW1nYV9vdXRsKE1fQ1RMV1RTVCwgbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QpOwogCQl1ZGVsYXkoMTAwKTsKIAkJbWdhX291dGIoMHgxQzA1LCAweDAwKTsKIAkJbWdhX291dGIoMHgxQzA1LCAweDgwKTsKQEAgLTg5Myw2OCArOTIwLDY5IEBACiAJCXVkZWxheSgxMDApOwogCQlyZWc1MCAmPSB+MHhGRjsKIAkJcmVnNTAgfD0gIDB4MDc7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKIAkJLyogaXQgc2hvdWxkIGhlbHAgd2l0aCBHMTAwICovCiAJCW1nYV9vdXRiKE1fR1JBUEhJQ1NfSU5ERVgsIDYpOwogCQltZ2Ffb3V0YihNX0dSQVBISUNTX0RBVEEsIChtZ2FfaW5iKE1fR1JBUEhJQ1NfREFUQSkgJiAzKSB8IDQpOwogCQltZ2Ffc2V0cihNX0VYVFZHQV9JTkRFWCwgMHgwMywgMHg4MSk7CiAJCW1nYV9zZXRyKE1fRVhUVkdBX0lOREVYLCAweDA0LCAweDAwKTsKLQkJbWdhX3dyaXRlYihBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSwgMHgwMDAwLCAweEFBKTsKLQkJbWdhX3dyaXRlYihBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSwgMHgwODAwLCAweDU1KTsKLQkJbWdhX3dyaXRlYihBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSwgMHg0MDAwLCAweDU1KTsKKwkJbWdhX3dyaXRlYihtaW5mby0+dmlkZW8udmJhc2UsIDB4MDAwMCwgMHhBQSk7CisJCW1nYV93cml0ZWIobWluZm8tPnZpZGVvLnZiYXNlLCAweDA4MDAsIDB4NTUpOworCQltZ2Ffd3JpdGViKG1pbmZvLT52aWRlby52YmFzZSwgMHg0MDAwLCAweDU1KTsKICNpZiAwCi0JCWlmIChtZ2FfcmVhZGIoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSksIDB4MDAwMCkgIT0gMHhBQSkgeworCQlpZiAobWdhX3JlYWRiKG1pbmZvLT52aWRlby52YmFzZSwgMHgwMDAwKSAhPSAweEFBKSB7CiAJCQlody0+TVhvcHRpb25SZWcgJj0gfjB4MTAwMDsKIAkJfQogI2VuZGlmCiAJCWh3LT5NWG9wdGlvblJlZyB8PSAweDAwMDc4MDIwOwotCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5hY2NlbGVyYXRvcikgPT0gRkJfQUNDRUxfTUFUUk9YX01HQUcyMDApIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTjJfUkVHLCAmcmVnNTApOworCX0gZWxzZSBpZiAobWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsICZyZWc1MCk7CiAJCXJlZzUwICY9IH4weDMwMDA7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsIHJlZzUwKTsKIAotCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5tZW10eXBlKSA9PSAtMSkKLQkJCWh3LT5NWG9wdGlvblJlZyB8PSBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm9wdCAmIDB4MUMwMDsKKwkJaWYgKG1pbmZvLT5kZXZmbGFncy5tZW10eXBlID09IC0xKQorCQkJaHctPk1Yb3B0aW9uUmVnIHw9IG1pbmZvLT52YWx1ZXMucmVnLm9wdCAmIDB4MUMwMDsKIAkJZWxzZQotCQkJaHctPk1Yb3B0aW9uUmVnIHw9IChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm1lbXR5cGUpICYgNykgPDwgMTA7Ci0JCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnNncmFtKSkKKwkJCWh3LT5NWG9wdGlvblJlZyB8PSAobWluZm8tPmRldmZsYWdzLm1lbXR5cGUgJiA3KSA8PCAxMDsKKwkJaWYgKG1pbmZvLT5kZXZmbGFncy5zZ3JhbSkKIAkJCWh3LT5NWG9wdGlvblJlZyB8PSAweDQwMDA7Ci0JCW1nYV9vdXRsKE1fQ1RMV1RTVCwgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tY3Rsd3RzdCk7Ci0JCW1nYV9vdXRsKE1fTUVNUkRCSywgQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5tZW1yZGJrKTsKKwkJbWdhX291dGwoTV9DVExXVFNULCBtaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdCk7CisJCW1nYV9vdXRsKE1fTUVNUkRCSywgbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiayk7CiAJCXVkZWxheSgyMDApOwogCQltZ2Ffb3V0bChNX01BQ0NFU1MsIDB4MDAwMDAwMDApOwogCQltZ2Ffb3V0bChNX01BQ0NFU1MsIDB4MDAwMDgwMDApOwogCQl1ZGVsYXkoMTAwKTsKLQkJbWdhX291dHcoTV9NRU1SREJLLCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1lbXJkYmspOworCQltZ2Ffb3V0dyhNX01FTVJEQkssIG1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmspOwogCQlody0+TVhvcHRpb25SZWcgfD0gMHgwMDA3ODAyMDsKIAl9IGVsc2UgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OMl9SRUcsICZyZWc1MCk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OMl9SRUcsICZyZWc1MCk7CiAJCXJlZzUwICY9IH4weDAwMDAwMTAwOwogCQlyZWc1MCB8PSAgMHgwMDAwMDAwMDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT04yX1JFRywgcmVnNTApOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT04yX1JFRywgcmVnNTApOwogCi0JCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm1lbXR5cGUpID09IC0xKQotCQkJaHctPk1Yb3B0aW9uUmVnIHw9IEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcub3B0ICYgMHgxQzAwOworCQlpZiAobWluZm8tPmRldmZsYWdzLm1lbXR5cGUgPT0gLTEpCisJCQlody0+TVhvcHRpb25SZWcgfD0gbWluZm8tPnZhbHVlcy5yZWcub3B0ICYgMHgxQzAwOwogCQllbHNlCi0JCQlody0+TVhvcHRpb25SZWcgfD0gKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MubWVtdHlwZSkgJiA3KSA8PCAxMDsKLQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Muc2dyYW0pKQorCQkJaHctPk1Yb3B0aW9uUmVnIHw9IChtaW5mby0+ZGV2ZmxhZ3MubWVtdHlwZSAmIDcpIDw8IDEwOworCQlpZiAobWluZm8tPmRldmZsYWdzLnNncmFtKQogCQkJaHctPk1Yb3B0aW9uUmVnIHw9IDB4NDAwMDsKLQkJbWdhX291dGwoTV9DVExXVFNULCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1jdGx3dHN0KTsKLQkJbWdhX291dGwoTV9NRU1SREJLLCBBQ0NFU1NfRkJJTkZPKHZhbHVlcykucmVnLm1lbXJkYmspOworCQltZ2Ffb3V0bChNX0NUTFdUU1QsIG1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0KTsKKwkJbWdhX291dGwoTV9NRU1SREJLLCBtaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrKTsKIAkJdWRlbGF5KDIwMCk7CiAJCW1nYV9vdXRsKE1fTUFDQ0VTUywgMHgwMDAwMDAwMCk7CiAJCW1nYV9vdXRsKE1fTUFDQ0VTUywgMHgwMDAwODAwMCk7CiAJCXVkZWxheSgxMDApOwotCQltZ2Ffb3V0bChNX01FTVJEQkssIEFDQ0VTU19GQklORk8odmFsdWVzKS5yZWcubWVtcmRiayk7CisJCW1nYV9vdXRsKE1fTUVNUkRCSywgbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiayk7CiAJCWh3LT5NWG9wdGlvblJlZyB8PSAweDAwMDQwMDIwOwogCX0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIGh3LT5NWG9wdGlvblJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgTUdBRzEwMF9yZXNldChXUE1JTkZPMikgeworc3RhdGljIHZvaWQgTUdBRzEwMF9yZXNldChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCXVfaW50OF90IGI7Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCkBAIC05NjQsNTQgKzk5Miw1NSBAQAogCiAJCWZpbmQgMTAxNC8yMiAoSUJNLzgyMzUxKTsgLyogaWYgZm91bmQgYW5kIGJyaWRnaW5nIE1hdHJveCwgZG8gc29tZSBzdHJhbmdlIHN0dWZmICovCiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGlibSwgUENJX1NFQ09OREFSWV9CVVMsICZiKTsKLQkJaWYgKGIgPT0gQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLT5idXMtPm51bWJlcikgeworCQlpZiAoYiA9PSBtaW5mby0+cGNpZGV2LT5idXMtPm51bWJlcikgewogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGlibSwgUENJX0NPTU1BTkQrMSwgMCk7CS8qIGRpc2FibGUgYmFjay10by1iYWNrICYgU0VSUiAqLwogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGlibSwgMHg0MSwgMHhGNCk7CQkvKiA/Pz8gKi8KIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShpYm0sIFBDSV9JT19CQVNFLCAweEYwKTsJLyogPz8/ICovCiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaWJtLCBQQ0lfSU9fTElNSVQsIDB4MDApOwkvKiA/Pz8gKi8KIAkJfQogI2VuZGlmCi0JCWlmICghQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub2luaXQpKSB7CisJCWlmICghbWluZm8tPmRldmZsYWdzLm5vaW5pdCkgewogCQkJaWYgKHg3QUY0ICYgOCkgewogCQkJCWh3LT5NWG9wdGlvblJlZyB8PSAweDQwOwkvKiBGSVhNRS4uLiAqLwotCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKKwkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOwogCQkJfQogCQkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIDB4MDYsIDB4MDApOwogCQl9CiAJfQotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CiAJCS8qIGVpdGhlciBsZWF2ZSBNQ0xLIGFzIGlzLi4uIG9yIHRoZXkgd2VyZSBzZXQgaW4gcHJlaW5pdCAqLwotCQlody0+REFDY2xrWzNdID0gaW5EQUMxMDY0KFBNSU5GTyBEQUMxMDY0X1hTWVNQTExNKTsKLQkJaHctPkRBQ2Nsa1s0XSA9IGluREFDMTA2NChQTUlORk8gREFDMTA2NF9YU1lTUExMTik7Ci0JCWh3LT5EQUNjbGtbNV0gPSBpbkRBQzEwNjQoUE1JTkZPIERBQzEwNjRfWFNZU1BMTFApOworCQlody0+REFDY2xrWzNdID0gaW5EQUMxMDY0KG1pbmZvLCBEQUMxMDY0X1hTWVNQTExNKTsKKwkJaHctPkRBQ2Nsa1s0XSA9IGluREFDMTA2NChtaW5mbywgREFDMTA2NF9YU1lTUExMTik7CisJCWh3LT5EQUNjbGtbNV0gPSBpbkRBQzEwNjQobWluZm8sIERBQzEwNjRfWFNZU1BMTFApOwogCX0gZWxzZSB7Ci0JCURBQzEwNjRfc2V0bWNsayhQTUlORk8gREFDMTA2NF9PUFRfUkVTRVJWRUQgfCBEQUMxMDY0X09QVF9NRElWMiB8IERBQzEwNjRfT1BUX0dESVYxIHwgREFDMTA2NF9PUFRfU0NMS19QTEwsIDEzMzMzMyk7CisJCURBQzEwNjRfc2V0bWNsayhtaW5mbywgREFDMTA2NF9PUFRfUkVTRVJWRUQgfCBEQUMxMDY0X09QVF9NRElWMiB8IERBQzEwNjRfT1BUX0dESVYxIHwgREFDMTA2NF9PUFRfU0NMS19QTEwsIDEzMzMzMyk7CiAJfQotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkgewotCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5kZnBfdHlwZSkgPT0gLTEpIHsKLQkJCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZGZwX3R5cGUpID0gaW5EQUMxMDY0KFBNSU5GTyAweDFGKTsKKwlpZiAobWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwKSB7CisJCWlmIChtaW5mby0+ZGV2ZmxhZ3MuZGZwX3R5cGUgPT0gLTEpIHsKKwkJCW1pbmZvLT5kZXZmbGFncy5kZnBfdHlwZSA9IGluREFDMTA2NChtaW5mbywgMHgxRik7CiAJCX0KIAl9Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9pbml0KSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vaW5pdCkKIAkJcmV0dXJuOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CiAJfSBlbHNlIHsKLQkJTUdBRzEwMF9zZXRQaXhDbG9jayhQTUlORk8gNCwgMjUxNzUpOwotCQlNR0FHMTAwX3NldFBpeENsb2NrKFBNSU5GTyA1LCAyODMyMik7CisJCU1HQUcxMDBfc2V0UGl4Q2xvY2sobWluZm8sIDQsIDI1MTc1KTsKKwkJTUdBRzEwMF9zZXRQaXhDbG9jayhtaW5mbywgNSwgMjgzMjIpOwogCQlpZiAoeDdBRjQgJiAweDEwKSB7Ci0JCQliID0gaW5EQUMxMDY0KFBNSU5GTyBNMTA2NF9YR0VOSU9EQVRBKSAmIH4xOwotCQkJb3V0REFDMTA2NChQTUlORk8gTTEwNjRfWEdFTklPREFUQSwgYik7Ci0JCQliID0gaW5EQUMxMDY0KFBNSU5GTyBNMTA2NF9YR0VOSU9DVFJMKSB8IDE7Ci0JCQlvdXREQUMxMDY0KFBNSU5GTyBNMTA2NF9YR0VOSU9DVFJMLCBiKTsKKwkJCWIgPSBpbkRBQzEwNjQobWluZm8sIE0xMDY0X1hHRU5JT0RBVEEpICYgfjE7CisJCQlvdXREQUMxMDY0KG1pbmZvLCBNMTA2NF9YR0VOSU9EQVRBLCBiKTsKKwkJCWIgPSBpbkRBQzEwNjQobWluZm8sIE0xMDY0X1hHRU5JT0NUUkwpIHwgMTsKKwkJCW91dERBQzEwNjQobWluZm8sIE0xMDY0X1hHRU5JT0NUUkwsIGIpOwogCQl9CiAJfQogfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFCi1zdGF0aWMgdm9pZCBNR0ExMDY0X3Jlc3RvcmUoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIE1HQTEwNjRfcmVzdG9yZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCWludCBpOwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCUNSSVRGTEFHUwogCkBAIC0xMDE5LDI1ICsxMDQ4LDI2IEBACiAKIAlDUklUQkVHSU4KIAotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOwogCW1nYV9vdXRiKE1fSUVOLCAweDAwKTsKIAltZ2Ffb3V0YihNX0NBQ0hFRkxVU0gsIDB4MDApOwogCiAJQ1JJVEVORAogCi0JREFDMTA2NF9yZXN0b3JlXzEoUE1JTkZPMik7Ci0JbWF0cm94ZmJfdmdhSFdyZXN0b3JlKFBNSU5GTzIpOwotCUFDQ0VTU19GQklORk8oY3J0YzEucGFucG9zKSA9IC0xOworCURBQzEwNjRfcmVzdG9yZV8xKG1pbmZvKTsKKwltYXRyb3hmYl92Z2FIV3Jlc3RvcmUobWluZm8pOworCW1pbmZvLT5jcnRjMS5wYW5wb3MgPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQltZ2Ffc2V0cihNX0VYVFZHQV9JTkRFWCwgaSwgaHctPkNSVENFWFRbaV0pOwotCURBQzEwNjRfcmVzdG9yZV8yKFBNSU5GTzIpOworCURBQzEwNjRfcmVzdG9yZV8yKG1pbmZvKTsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9HCi1zdGF0aWMgdm9pZCBNR0FHMTAwX3Jlc3RvcmUoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIE1HQUcxMDBfcmVzdG9yZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCWludCBpOwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCUNSSVRGTEFHUwogCkBAIC0xMDQ1LDE5ICsxMDc1LDE3IEBACiAKIAlDUklUQkVHSU4KIAotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOwogCUNSSVRFTkQKIAotCURBQzEwNjRfcmVzdG9yZV8xKFBNSU5GTzIpOwotCW1hdHJveGZiX3ZnYUhXcmVzdG9yZShQTUlORk8yKTsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YXzMyTUIKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5zdXBwb3J0MzJNQikpCisJREFDMTA2NF9yZXN0b3JlXzEobWluZm8pOworCW1hdHJveGZiX3ZnYUhXcmVzdG9yZShtaW5mbyk7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5zdXBwb3J0MzJNQikKIAkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIDgsIGh3LT5DUlRDRVhUWzhdKTsKLSNlbmRpZgotCUFDQ0VTU19GQklORk8oY3J0YzEucGFucG9zKSA9IC0xOworCW1pbmZvLT5jcnRjMS5wYW5wb3MgPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQltZ2Ffc2V0cihNX0VYVFZHQV9JTkRFWCwgaSwgaHctPkNSVENFWFRbaV0pOwotCURBQzEwNjRfcmVzdG9yZV8yKFBNSU5GTzIpOworCURBQzEwNjRfcmVzdG9yZV8yKG1pbmZvKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmggYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmgKaW5kZXggN2E5OGNlOC4uYzZlZDc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaApAQCAtMTEsOCArMTEsOCBAQAogZXh0ZXJuIHN0cnVjdCBtYXRyb3hfc3dpdGNoIG1hdHJveF9HMTAwOwogI2VuZGlmCiAjaWZkZWYgTkVFRF9EQUMxMDY0Ci12b2lkIERBQzEwNjRfZ2xvYmFsX2luaXQoV1BNSU5GTzIpOwotdm9pZCBEQUMxMDY0X2dsb2JhbF9yZXN0b3JlKFdQTUlORk8yKTsKK3ZvaWQgREFDMTA2NF9nbG9iYWxfaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKK3ZvaWQgREFDMTA2NF9nbG9iYWxfcmVzdG9yZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKICNlbmRpZgogCiAjZGVmaW5lIE0xMDY0X0lOREVYCTB4MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMKaW5kZXggNGU4MjUxMS4uODM1YWFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMKQEAgLTI3OSwyNyArMjc5LDMxIEBACiAgIFRWUDMwMjZfWENPTEtFWUNUUkxfWk9PTTEsCiAgIDB4MDAsIDB4MDAsIFRWUDMwMjZfWENVUkNUUkxfRElTIH07CiAKLXN0YXRpYyBpbnQgVGkzMDI2X2NhbGNjbG9jayhDUE1JTkZPIHVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBpbnQgZm1heCwgaW50KiBpbiwgaW50KiBmZWVkLCBpbnQqIHBvc3QpIHsKK3N0YXRpYyBpbnQgVGkzMDI2X2NhbGNjbG9jayhjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJICAgIHVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBpbnQgZm1heCwgaW50ICppbiwKKwkJCSAgICBpbnQgKmZlZWQsIGludCAqcG9zdCkKK3sKIAl1bnNpZ25lZCBpbnQgZnZjbzsKIAl1bnNpZ25lZCBpbnQgbGluLCBsZmVlZCwgbHBvc3Q7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlmdmNvID0gUExMX2NhbGNjbG9jayhQTUlORk8gZnJlcSwgZm1heCwgJmxpbiwgJmxmZWVkLCAmbHBvc3QpOworCWZ2Y28gPSBQTExfY2FsY2Nsb2NrKG1pbmZvLCBmcmVxLCBmbWF4LCAmbGluLCAmbGZlZWQsICZscG9zdCk7CiAJZnZjbyA+Pj0gKCpwb3N0ID0gbHBvc3QpOwogCSppbiA9IDY0IC0gbGluOwogCSpmZWVkID0gNjQgLSBsZmVlZDsKIAlyZXR1cm4gZnZjbzsKIH0KIAotc3RhdGljIGludCBUaTMwMjZfc2V0cGNsayhXUE1JTkZPIGludCBjbGspIHsKK3N0YXRpYyBpbnQgVGkzMDI2X3NldHBjbGsoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IGNsaykKK3sKIAl1bnNpZ25lZCBpbnQgZl9wbGw7CiAJdW5zaWduZWQgaW50IHBpeGZlZWQsIHBpeGluLCBwaXhwb3N0OwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAogCURCRyhfX2Z1bmNfXykKIAotCWZfcGxsID0gVGkzMDI2X2NhbGNjbG9jayhQTUlORk8gY2xrLCBBQ0NFU1NfRkJJTkZPKG1heF9waXhlbF9jbG9jayksICZwaXhpbiwgJnBpeGZlZWQsICZwaXhwb3N0KTsKKwlmX3BsbCA9IFRpMzAyNl9jYWxjY2xvY2sobWluZm8sIGNsaywgbWluZm8tPm1heF9waXhlbF9jbG9jaywgJnBpeGluLCAmcGl4ZmVlZCwgJnBpeHBvc3QpOwogCiAJaHctPkRBQ2Nsa1swXSA9IHBpeGluIHwgMHhDMDsKIAlody0+REFDY2xrWzFdID0gcGl4ZmVlZDsKQEAgLTMwOSw5ICszMTMsOSBAQAogCQl1bnNpZ25lZCBpbnQgbG9vcGZlZWQsIGxvb3BpbiwgbG9vcHBvc3QsIGxvb3BkaXYsIHo7CiAJCXVuc2lnbmVkIGludCBCcHA7CiAKLQkJQnBwID0gQUNDRVNTX0ZCSU5GTyhjdXJyLmZpbmFsX2JwcFNoaWZ0KTsKKwkJQnBwID0gbWluZm8tPmN1cnIuZmluYWxfYnBwU2hpZnQ7CiAKLQkJaWYgKEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5iaXRzX3Blcl9waXhlbCA9PSAyNCkgeworCQlpZiAobWluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCA9PSAyNCkgewogCQkJbG9vcGZlZWQgPSAzOwkJLyogc2V0IGxtIHRvIGFueSBwb3NzaWJsZSB2YWx1ZSAqLwogCQkJbG9vcGluID0gMyAqIDMyIC8gQnBwOwogCQl9IGVsc2UgewpAQCAtMzMwLDE4ICszMzQsMTggQEAKIAkJCWxvb3Bwb3N0ID0gMzsKIAkJCWxvb3BkaXYgPSB6LzE2OwogCQl9Ci0JCWlmIChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYml0c19wZXJfcGl4ZWwgPT0gMjQpIHsKKwkJaWYgKG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMjQpIHsKIAkJCWh3LT5EQUNjbGtbM10gPSAoKDY1IC0gbG9vcGluKSAmIDB4M0YpIHwgMHhDMDsKIAkJCWh3LT5EQUNjbGtbNF0gPSAoNjUgLSBsb29wZmVlZCkgfCAweDgwOwotCQkJaWYgKEFDQ0VTU19GQklORk8oYWNjZWwucmFtZGFjX3JldikgPiAweDIwKSB7Ci0JCQkJaWYgKGlzSW50ZXJsZWF2ZShNSU5GTykpCisJCQlpZiAobWluZm8tPmFjY2VsLnJhbWRhY19yZXYgPiAweDIwKSB7CisJCQkJaWYgKGlzSW50ZXJsZWF2ZShtaW5mbykpCiAJCQkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YTEFUQ0hDVFJMXSA9IFRWUDMwMjZCX1hMQVRDSENUUkxfOF8zOwogCQkJCWVsc2UgewogCQkJCQlody0+REFDY2xrWzRdICY9IH4weEMwOwogCQkJCQlody0+REFDcmVnW1BPUzMwMjZfWExBVENIQ1RSTF0gPSBUVlAzMDI2Ql9YTEFUQ0hDVFJMXzRfMzsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCWlmIChpc0ludGVybGVhdmUoTUlORk8pKQorCQkJCWlmIChpc0ludGVybGVhdmUobWluZm8pKQogCQkJCQk7CS8qIGRlZmF1bHQuLi4gKi8KIAkJCQllbHNlIHsKIAkJCQkJaHctPkRBQ2Nsa1s0XSBePSAweEMwOwkvKiBjaGFuZ2UgZnJvbSAweDgwIHRvIDB4NDAgKi8KQEAgLTM0OSw3ICszNTMsNyBAQAogCQkJCX0KIAkJCX0KIAkJCWh3LT5EQUNjbGtbNV0gPSBsb29wcG9zdCB8IDB4Rjg7Ci0JCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5tZ2FfMjRicHBfZml4KSkKKwkJCWlmIChtaW5mby0+ZGV2ZmxhZ3MubWdhXzI0YnBwX2ZpeCkKIAkJCQlody0+REFDY2xrWzVdIF49IDB4NDA7CiAJCX0gZWxzZSB7CiAJCQlody0+REFDY2xrWzNdID0gKCg2NSAtIGxvb3BpbikgJiAweDNGKSB8IDB4QzA7CkBAIC0zNjEsMTQgKzM2NSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IFRpMzAyNl9pbml0KFdQTUlORk8gc3RydWN0IG15X3RpbW1pbmcqIG0pIHsKLQl1X2ludDhfdCBtdXhjdHJsID0gaXNJbnRlcmxlYXZlKE1JTkZPKSA/IFRWUDMwMjZfWE1VWENUUkxfTUVNT1JZXzY0QklUIDogVFZQMzAyNl9YTVVYQ1RSTF9NRU1PUllfMzJCSVQ7Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CitzdGF0aWMgaW50IFRpMzAyNl9pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHN0cnVjdCBteV90aW1taW5nICptKQoreworCXVfaW50OF90IG11eGN0cmwgPSBpc0ludGVybGVhdmUobWluZm8pID8gVFZQMzAyNl9YTVVYQ1RSTF9NRU1PUllfNjRCSVQgOiBUVlAzMDI2X1hNVVhDVFJMX01FTU9SWV8zMkJJVDsKKwlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICpodyA9ICZtaW5mby0+aHc7CiAKIAlEQkcoX19mdW5jX18pCiAKIAltZW1jcHkoaHctPkRBQ3JlZywgTUdBREFDYnBwMzIsIHNpemVvZihody0+REFDcmVnKSk7Ci0Jc3dpdGNoIChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwlzd2l0Y2ggKG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwpIHsKIAkJY2FzZSA0Oglody0+REFDcmVnW1BPUzMwMjZfWExBVENIQ1RSTF0gPSBUVlAzMDI2X1hMQVRDSENUUkxfMTZfMTsJLyogb3IgXzhfMSwgdGhleSBhcmUgc2FtZSAqLwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hUUlVFQ09MT1JDVFJMXSA9IFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfUFNFVURPQ09MT1I7CiAJCQlody0+REFDcmVnW1BPUzMwMjZfWE1VWENUUkxdID0gbXV4Y3RybCB8IFRWUDMwMjZfWE1VWENUUkxfUElYRUxfNEJJVDsKQEAgLTM4Myw3ICszODgsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMTY6CiAJCQkvKiBYTEFUQ0hDVFJMIHNob3VsZCBiZSBfNF8xIC8gXzJfMS4uLiBXaHkgaXMgbm90PyAoXzJfMSBpcyB1c2VkIGV2ZXJ5dGltZSkgKi8KLQkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YVFJVRUNPTE9SQ1RSTF0gPSAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyZWVuLmxlbmd0aCA9PSA1KT8gKFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfRElSRUNUQ09MT1IgfCBUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX09SR0JfMTU1NSApIDogKFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfRElSRUNUQ09MT1IgfCBUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX1JHQl81NjUpOworCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hUUlVFQ09MT1JDVFJMXSA9IChtaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCA9PSA1KSA/IChUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX0RJUkVDVENPTE9SIHwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9PUkdCXzE1NTUpIDogKFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfRElSRUNUQ09MT1IgfCBUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX1JHQl81NjUpOwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hNVVhDVFJMXSA9IG11eGN0cmwgfCBUVlAzMDI2X1hNVVhDVFJMX1BJWEVMXzE2QklUOwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hDTEtDVFJMXSA9IFRWUDMwMjZfWENMS0NUUkxfU1JDX1BMTCB8IFRWUDMwMjZfWENMS0NUUkxfRElWMjsKIAkJCWJyZWFrOwpAQCAtNDAwLDcgKzQwNSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMTsJLyogVE9ETzogZmFpbGVkICovCiAJfQotCWlmIChtYXRyb3hmYl92Z2FIV2luaXQoUE1JTkZPIG0pKSByZXR1cm4gMTsKKwlpZiAobWF0cm94ZmJfdmdhSFdpbml0KG1pbmZvLCBtKSkgcmV0dXJuIDE7CiAKIAkvKiBzZXQgU1lOQyAqLwogCWh3LT5NaXNjT3V0UmVnID0gMHhDQjsKQEAgLTQxMiw5ICs0MTcsOSBAQAogCQlody0+REFDcmVnW1BPUzMwMjZfWEdFTkNUUkxdIHw9IFRWUDMwMjZfWEdFTkNUUkxfU1lOQ19PTl9HUkVFTjsKIAogCS8qIHNldCBERUxBWSAqLwotCWlmIChBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbikgPCAweDQwMDAwMCkKKwlpZiAobWluZm8tPnZpZGVvLmxlbiA8IDB4NDAwMDAwKQogCQlody0+Q1JUQ0VYVFszXSB8PSAweDA4OwotCWVsc2UgaWYgKEFDQ0VTU19GQklORk8odmlkZW8ubGVuKSA+IDB4NDAwMDAwKQorCWVsc2UgaWYgKG1pbmZvLT52aWRlby5sZW4gPiAweDQwMDAwMCkKIAkJaHctPkNSVENFWFRbM10gfD0gMHgxMDsKIAogCS8qIHNldCBIV0NVUlNPUiAqLwpAQCAtNDI2LDE0ICs0MzEsMTUgQEAKIAogCS8qIHNldCBpbnRlcmxlYXZpbmcgKi8KIAlody0+TVhvcHRpb25SZWcgJj0gfjB4MDAwMDEwMDA7Ci0JaWYgKGlzSW50ZXJsZWF2ZShNSU5GTykpIGh3LT5NWG9wdGlvblJlZyB8PSAweDAwMDAxMDAwOworCWlmIChpc0ludGVybGVhdmUobWluZm8pKSBody0+TVhvcHRpb25SZWcgfD0gMHgwMDAwMTAwMDsKIAogCS8qIHNldCBEQUMgKi8KLQlUaTMwMjZfc2V0cGNsayhQTUlORk8gbS0+cGl4Y2xvY2spOworCVRpMzAyNl9zZXRwY2xrKG1pbmZvLCBtLT5waXhjbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRpMzAyNl9zZXRNQ0xLKFdQTUlORk8gaW50IGZvdXQpeworc3RhdGljIHZvaWQgdGkzMDI2X3NldE1DTEsoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IGZvdXQpCit7CiAJdW5zaWduZWQgaW50IGZfcGxsOwogCXVuc2lnbmVkIGludCBwY2xrX20sIHBjbGtfbiwgcGNsa19wOwogCXVuc2lnbmVkIGludCBtY2xrX20sIG1jbGtfbiwgbWNsa19wOwpAQCAtNDQyLDI5ICs0NDgsMjkgQEAKIAogCURCRyhfX2Z1bmNfXykKIAotCWZfcGxsID0gVGkzMDI2X2NhbGNjbG9jayhQTUlORk8gZm91dCwgQUNDRVNTX0ZCSU5GTyhtYXhfcGl4ZWxfY2xvY2spLCAmbWNsa19uLCAmbWNsa19tLCAmbWNsa19wKTsKKwlmX3BsbCA9IFRpMzAyNl9jYWxjY2xvY2sobWluZm8sIGZvdXQsIG1pbmZvLT5tYXhfcGl4ZWxfY2xvY2ssICZtY2xrX24sICZtY2xrX20sICZtY2xrX3ApOwogCiAJLyogc2F2ZSBwY2xrICovCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEZDKTsKLQlwY2xrX24gPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEZEKTsKLQlwY2xrX20gPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweEZFKTsKLQlwY2xrX3AgPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEZDKTsKKwlwY2xrX24gPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEZEKTsKKwlwY2xrX20gPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEZFKTsKKwlwY2xrX3AgPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSk7CiAKIAkvKiBzdG9wIHBjbGsgKi8KLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4RkUpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgMHgwMCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEZFKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIDB4MDApOwogCiAJLyogc2V0IHBjbGsgdG8gbmV3IG1jbGsgKi8KLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4RkMpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgbWNsa19uIHwgMHhDMCk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBLCBtY2xrX20pOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgbWNsa19wIHwgMHhCMCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEZDKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIG1jbGtfbiB8IDB4QzApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSwgbWNsa19tKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIG1jbGtfcCB8IDB4QjApOwogCiAJLyogd2FpdCBmb3IgUExMIHRvIGxvY2sgKi8KIAlmb3IgKHRtb3V0ID0gNTAwMDAwOyB0bW91dDsgdG1vdXQtLSkgewotCQlpZiAoaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpICYgMHg0MCkKKwkJaWYgKGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBKSAmIDB4NDApCiAJCQlicmVhazsKIAkJdWRlbGF5KDEwKTsKIAl9OwpAQCAtNDcyLDIzICs0NzgsMjMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJtYXRyb3hmYjogVGVtcG9yYXJ5IHBpeGVsIFBMTCBub3QgbG9ja2VkIGFmdGVyIDUgc2Vjc1xuIik7CiAKIAkvKiBvdXRwdXQgcGNsayBvbiBtY2xrIHBpbiAqLwotCW1jbGtfY3RsID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTENUUkwpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTUVNUExMQ1RSTCwgbWNsa19jdGwgJiAweEU3KTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTENUUkwsIChtY2xrX2N0bCAmIDB4RTcpIHwgVFZQMzAyNl9YTUVNUExMQ1RSTF9TVFJPQkVNS0M0KTsKKwltY2xrX2N0bCA9IGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExDVFJMKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTENUUkwsIG1jbGtfY3RsICYgMHhFNyk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExDVFJMLCAobWNsa19jdGwgJiAweEU3KSB8IFRWUDMwMjZfWE1FTVBMTENUUkxfU1RST0JFTUtDNCk7CiAKIAkvKiBzdG9wIE1DTEsgKi8KLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4RkIpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTUVNUExMREFUQSwgMHgwMCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEZCKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTERBVEEsIDB4MDApOwogCiAJLyogc2V0IG1jbGsgdG8gbmV3IGZyZXEgKi8KLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4RjMpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTUVNUExMREFUQSwgbWNsa19uIHwgMHhDMCk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNRU1QTExEQVRBLCBtY2xrX20pOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTUVNUExMREFUQSwgbWNsa19wIHwgMHhCMCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweEYzKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTERBVEEsIG1jbGtfbiB8IDB4QzApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTUVNUExMREFUQSwgbWNsa19tKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTERBVEEsIG1jbGtfcCB8IDB4QjApOwogCiAJLyogd2FpdCBmb3IgUExMIHRvIGxvY2sgKi8KIAlmb3IgKHRtb3V0ID0gNTAwMDAwOyB0bW91dDsgdG1vdXQtLSkgewotCQlpZiAoaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTERBVEEpICYgMHg0MCkKKwkJaWYgKGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExEQVRBKSAmIDB4NDApCiAJCQlicmVhazsKIAkJdWRlbGF5KDEwKTsKIAl9CkBAIC00OTYsNyArNTAyLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJtYXRyb3hmYjogTWVtb3J5IFBMTCBub3QgbG9ja2VkIGFmdGVyIDUgc2Vjc1xuIik7CiAKIAlmX3BsbCA9IGZfcGxsICogMzMzIC8gKDEwMDAwIDw8IG1jbGtfcCk7Ci0JaWYgKGlzTWlsbGVuaXVtSUkoTUlORk8pKSB7CisJaWYgKGlzTWlsbGVuaXVtSUkobWluZm8pKSB7CiAJCXJmaGNudCA9IChmX3BsbCAtIDEyOCkgLyAyNTY7CiAJCWlmIChyZmhjbnQgPiAxNSkKIAkJCXJmaGNudCA9IDE1OwpAQCAtNTA1LDI2ICs1MTEsMjYgQEAKIAkJaWYgKHJmaGNudCA+IDE1KQogCQkJcmZoY250ID0gMDsKIAl9Ci0JQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgPSAoQUNDRVNTX0ZCSU5GTyhodykuTVhvcHRpb25SZWcgJiB+MHgwMDBGMDAwMCkgfCAocmZoY250IDw8IDE2KTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX09QVElPTl9SRUcsIEFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnKTsKKwltaW5mby0+aHcuTVhvcHRpb25SZWcgPSAobWluZm8tPmh3Lk1Yb3B0aW9uUmVnICYgfjB4MDAwRjAwMDApIHwgKHJmaGNudCA8PCAxNik7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWluZm8tPmh3Lk1Yb3B0aW9uUmVnKTsKIAogCS8qIG91dHB1dCBNQ0xLIHRvIE1DTEsgcGluICovCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hNRU1QTExDVFJMLCAobWNsa19jdGwgJiAweEU3KSB8IFRWUDMwMjZfWE1FTVBMTENUUkxfTUNMS19NQ0xLUExMKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTENUUkwsIChtY2xrX2N0bCAgICAgICApIHwgVFZQMzAyNl9YTUVNUExMQ1RSTF9NQ0xLX01DTEtQTEwgfCBUVlAzMDI2X1hNRU1QTExDVFJMX1NUUk9CRU1LQzQpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTUVNUExMQ1RSTCwgKG1jbGtfY3RsICYgMHhFNykgfCBUVlAzMDI2X1hNRU1QTExDVFJMX01DTEtfTUNMS1BMTCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNRU1QTExDVFJMLCAobWNsa19jdGwgICAgICAgKSB8IFRWUDMwMjZfWE1FTVBMTENUUkxfTUNMS19NQ0xLUExMIHwgVFZQMzAyNl9YTUVNUExMQ1RSTF9TVFJPQkVNS0M0KTsKIAogCS8qIHN0b3AgUENMSyAqLwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHhGRSk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBLCAweDAwKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4RkUpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSwgMHgwMCk7CiAKIAkvKiByZXN0b3JlIHBjbGsgKi8KLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4RkMpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgcGNsa19uKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIHBjbGtfbSk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBLCBwY2xrX3ApOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHhGQyk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCBwY2xrX24pOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSwgcGNsa19tKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIHBjbGtfcCk7CiAKIAkvKiB3YWl0IGZvciBQTEwgdG8gbG9jayAqLwogCWZvciAodG1vdXQgPSA1MDAwMDA7IHRtb3V0OyB0bW91dC0tKSB7Ci0JCWlmIChpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSkgJiAweDQwKQorCQlpZiAoaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEpICYgMHg0MCkKIAkJCWJyZWFrOwogCQl1ZGVsYXkoMTApOwogCX0KQEAgLTUzMiwyNiArNTM4LDI3IEBACiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmI6IFBpeGVsIFBMTCBub3QgbG9ja2VkIGFmdGVyIDUgc2Vjc1xuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHRpMzAyNl9yYW1kYWNfaW5pdChXUE1JTkZPMikgewotCitzdGF0aWMgdm9pZCB0aTMwMjZfcmFtZGFjX2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAlEQkcoX19mdW5jX18pCiAKLQlBQ0NFU1NfRkJJTkZPKGZlYXR1cmVzLnBsbC52Y29fZnJlcV9taW4pID0gMTEwMDAwOwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLnJlZl9mcmVxKQkgPSAxMTQ1NDU7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWluKSA9IDI7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWF4KSA9IDI0OwotCUFDQ0VTU19GQklORk8oZmVhdHVyZXMucGxsLmluX2Rpdl9taW4pCSA9IDI7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwuaW5fZGl2X21heCkJID0gNjM7Ci0JQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwucG9zdF9zaGlmdF9tYXgpID0gMzsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub2luaXQpKQorCW1pbmZvLT5mZWF0dXJlcy5wbGwudmNvX2ZyZXFfbWluID0gMTEwMDAwOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJID0gMTE0NTQ1OworCW1pbmZvLT5mZWF0dXJlcy5wbGwuZmVlZF9kaXZfbWluID0gMjsKKwltaW5mby0+ZmVhdHVyZXMucGxsLmZlZWRfZGl2X21heCA9IDI0OworCW1pbmZvLT5mZWF0dXJlcy5wbGwuaW5fZGl2X21pbgkgPSAyOworCW1pbmZvLT5mZWF0dXJlcy5wbGwuaW5fZGl2X21heAkgPSA2MzsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnBvc3Rfc2hpZnRfbWF4ID0gMzsKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vaW5pdCkKIAkJcmV0dXJuOwotCXRpMzAyNl9zZXRNQ0xLKFBNSU5GTyA2MDAwMCk7CisJdGkzMDI2X3NldE1DTEsobWluZm8sIDYwMDAwKTsKIH0KIAotc3RhdGljIHZvaWQgVGkzMDI2X3Jlc3RvcmUoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIFRpMzAyNl9yZXN0b3JlKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciBwcm9nZGFjWzZdOwotCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3ID0gJkFDQ0VTU19GQklORk8oaHcpOworCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUgKmh3ID0gJm1pbmZvLT5odzsKIAlDUklURkxBR1MKIAogCURCRyhfX2Z1bmNfXykKQEAgLTU2NSwzMSArNTcyLDMxIEBACiAKIAlDUklUQkVHSU4KIAotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOwogCiAJQ1JJVEVORAogCi0JbWF0cm94ZmJfdmdhSFdyZXN0b3JlKFBNSU5GTzIpOworCW1hdHJveGZiX3ZnYUhXcmVzdG9yZShtaW5mbyk7CiAKIAlDUklUQkVHSU4KIAotCUFDQ0VTU19GQklORk8oY3J0YzEucGFucG9zKSA9IC0xOworCW1pbmZvLT5jcnRjMS5wYW5wb3MgPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQltZ2Ffc2V0cihNX0VYVFZHQV9JTkRFWCwgaSwgaHctPkNSVENFWFRbaV0pOwogCiAJZm9yIChpID0gMDsgaSA8IDIxOyBpKyspIHsKLQkJb3V0VGkzMDI2KFBNSU5GTyBEQUNzZXFbaV0sIGh3LT5EQUNyZWdbaV0pOworCQlvdXRUaTMwMjYobWluZm8sIERBQ3NlcVtpXSwgaHctPkRBQ3JlZ1tpXSk7CiAJfQogCi0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweDAwKTsKLQlwcm9nZGFjWzBdID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpOwotCXByb2dkYWNbM10gPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YTE9PUFBMTERBVEEpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHgxNSk7Ci0JcHJvZ2RhY1sxXSA9IGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQSVhQTExEQVRBKTsKLQlwcm9nZGFjWzRdID0gaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWExPT1BQTExEQVRBKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4MkEpOwotCXByb2dkYWNbMl0gPSBpblRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSk7Ci0JcHJvZ2RhY1s1XSA9IGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hMT09QUExMREFUQSk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweDAwKTsKKwlwcm9nZGFjWzBdID0gaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEpOworCXByb2dkYWNbM10gPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YTE9PUFBMTERBVEEpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHgxNSk7CisJcHJvZ2RhY1sxXSA9IGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBKTsKKwlwcm9nZGFjWzRdID0gaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWExPT1BQTExEQVRBKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4MkEpOworCXByb2dkYWNbMl0gPSBpblRpMzAyNihtaW5mbywgVFZQMzAyNl9YUElYUExMREFUQSk7CisJcHJvZ2RhY1s1XSA9IGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hMT09QUExMREFUQSk7CiAKIAlDUklURU5ECiAJaWYgKG1lbWNtcChody0+REFDY2xrLCBwcm9nZGFjLCA2KSkgewpAQCAtNTk4LDIwICs2MDUsMjAgQEAKIAkJLyogTWF5YmUgZXZlbiB3ZSBzaG91bGQgY2FsbCBzY2hlZHVsZSgpID8gKi8KIAogCQlDUklUQkVHSU4KLQkJb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hDTEtDVFJMLCBody0+REFDcmVnW1BPUzMwMjZfWENMS0NUUkxdKTsKLQkJb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hQTExBRERSLCAweDJBKTsKLQkJb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hMT09QUExMREFUQSwgMCk7Ci0JCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgMCk7CisJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YQ0xLQ1RSTCwgaHctPkRBQ3JlZ1tQT1MzMDI2X1hDTEtDVFJMXSk7CisJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHgyQSk7CisJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTE9PUFBMTERBVEEsIDApOworCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIDApOwogCi0JCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHgwMCk7CisJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHgwMCk7CiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEsIGh3LT5EQUNjbGtbaV0pOworCQkJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQSVhQTExEQVRBLCBody0+REFDY2xrW2ldKTsKIAkJLyogd2FpdCBmb3IgUExMIG9ubHkgaWYgUExMIGNsb2NrIHJlcXVlc3RlZCAoYWx3YXlzIGZvciBQb3dlck1vZGUsIG5ldmVyIGZvciBWR0EpICovCiAJCWlmIChody0+TWlzY091dFJlZyAmIDB4MDgpIHsKIAkJCWludCB0bW91dDsKLQkJCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHgzRik7CisJCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4M0YpOwogCQkJZm9yICh0bW91dCA9IDUwMDAwMDsgdG1vdXQ7IC0tdG1vdXQpIHsKLQkJCQlpZiAoaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBJWFBMTERBVEEpICYgMHg0MCkKKwkJCQlpZiAoaW5UaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEpICYgMHg0MCkKIAkJCQkJYnJlYWs7CiAJCQkJdWRlbGF5KDEwKTsKIAkJCX0KQEAgLTYyNCwxOCArNjMxLDE4IEBACiAJCQkJZHByaW50ayhLRVJOX0lORk8gIlBpeGVsUExMOiAlZFxuIiwgNTAwMDAwLXRtb3V0KTsKIAkJCUNSSVRCRUdJTgogCQl9Ci0JCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTUVNUExMQ1RSTCwgaHctPkRBQ3JlZ1tQT1MzMDI2X1hNRU1QTExDVFJMXSk7Ci0JCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHgwMCk7CisJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTUVNUExMQ1RSTCwgaHctPkRBQ3JlZ1tQT1MzMDI2X1hNRU1QTExDVFJMXSk7CisJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YUExMQUREUiwgMHgwMCk7CiAJCWZvciAoaSA9IDM7IGkgPCA2OyBpKyspCi0JCQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWExPT1BQTExEQVRBLCBody0+REFDY2xrW2ldKTsKKwkJCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YTE9PUFBMTERBVEEsIGh3LT5EQUNjbGtbaV0pOwogCQlDUklURU5ECiAJCWlmICgoaHctPk1pc2NPdXRSZWcgJiAweDA4KSAmJiAoKGh3LT5EQUNjbGtbNV0gJiAweDgwKSA9PSAweDgwKSkgewogCQkJaW50IHRtb3V0OwogCiAJCQlDUklUQkVHSU4KLQkJCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUExMQUREUiwgMHgzRik7CisJCQlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBMTEFERFIsIDB4M0YpOwogCQkJZm9yICh0bW91dCA9IDUwMDAwMDsgdG1vdXQ7IC0tdG1vdXQpIHsKLQkJCQlpZiAoaW5UaTMwMjYoUE1JTkZPIFRWUDMwMjZfWExPT1BQTExEQVRBKSAmIDB4NDApCisJCQkJaWYgKGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hMT09QUExMREFUQSkgJiAweDQwKQogCQkJCQlicmVhazsKIAkJCQl1ZGVsYXkoMTApOwogCQkJfQpAQCAtNjYwLDY1ICs2NjcsNjYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBUaTMwMjZfcmVzZXQoV1BNSU5GTzIpIHsKLQorc3RhdGljIHZvaWQgVGkzMDI2X3Jlc2V0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJREJHKF9fZnVuY19fKQogCi0JdGkzMDI2X3JhbWRhY19pbml0KFBNSU5GTzIpOworCXRpMzAyNl9yYW1kYWNfaW5pdChtaW5mbyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWF0cm94X2FsdG91dCB0aTMwMjZfb3V0cHV0ID0gewogCS5uYW1lCSA9ICJQcmltYXJ5IG91dHB1dCIsCiB9OwogCi1zdGF0aWMgaW50IFRpMzAyNl9wcmVpbml0KFdQTUlORk8yKSB7CitzdGF0aWMgaW50IFRpMzAyNl9wcmVpbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJc3RhdGljIGNvbnN0IGludCB2eHJlc19taWxsMltdID0geyA1MTIsICAgICAgICA2NDAsIDc2OCwgIDgwMCwgIDgzMiwgIDk2MCwKIAkJCQkJICAxMDI0LCAxMTUyLCAxMjgwLCAgICAgIDE2MDAsIDE2NjQsIDE5MjAsCiAJCQkJCSAgMjA0OCwgMH07CiAJc3RhdGljIGNvbnN0IGludCB2eHJlc19taWxsMVtdID0geyAgICAgICAgICAgICA2NDAsIDc2OCwgIDgwMCwgICAgICAgIDk2MCwKIAkJCQkJICAxMDI0LCAxMTUyLCAxMjgwLCAgICAgIDE2MDAsICAgICAgIDE5MjAsCiAJCQkJCSAgMjA0OCwgMH07Ci0Jc3RydWN0IG1hdHJveF9od19zdGF0ZSogaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqaHcgPSAmbWluZm8tPmh3OwogCiAJREJHKF9fZnVuY19fKQogCi0JQUNDRVNTX0ZCSU5GTyhtaWxsZW5pdW0pID0gMTsKLQlBQ0NFU1NfRkJJTkZPKG1pbGxlbml1bUlJKSA9IChBQ0NFU1NfRkJJTkZPKHBjaWRldiktPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NSUwpOwotCUFDQ0VTU19GQklORk8oY2FwYWJsZS5jZmI0KSA9IDE7Ci0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnRleHQpID0gMTsgLyogaXNNaWxsZW5pdW1JSShNSU5GTyk7ICovCi0JQUNDRVNTX0ZCSU5GTyhjYXBhYmxlLnZ4cmVzKSA9IGlzTWlsbGVuaXVtSUkoTUlORk8pP3Z4cmVzX21pbGwyOnZ4cmVzX21pbGwxOworCW1pbmZvLT5taWxsZW5pdW0gPSAxOworCW1pbmZvLT5taWxsZW5pdW1JSSA9IChtaW5mby0+cGNpZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9NQVRST1hfTUlMKTsKKwltaW5mby0+Y2FwYWJsZS5jZmI0ID0gMTsKKwltaW5mby0+Y2FwYWJsZS50ZXh0ID0gMTsgLyogaXNNaWxsZW5pdW1JSShtaW5mbyk7ICovCisJbWluZm8tPmNhcGFibGUudnhyZXMgPSBpc01pbGxlbml1bUlJKG1pbmZvKSA/IHZ4cmVzX21pbGwyIDogdnhyZXNfbWlsbDE7CiAKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLmRhdGEgPSBNSU5GTzsKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLm91dHB1dCA9ICZ0aTMwMjZfb3V0cHV0OwotCUFDQ0VTU19GQklORk8ob3V0cHV0c1swXSkuc3JjID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzBdKS5kZWZhdWx0X3NyYzsKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOworCW1pbmZvLT5vdXRwdXRzWzBdLmRhdGEgPSBtaW5mbzsKKwltaW5mby0+b3V0cHV0c1swXS5vdXRwdXQgPSAmdGkzMDI2X291dHB1dDsKKwltaW5mby0+b3V0cHV0c1swXS5zcmMgPSBtaW5mby0+b3V0cHV0c1swXS5kZWZhdWx0X3NyYzsKKwltaW5mby0+b3V0cHV0c1swXS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vaW5pdCkpCisJaWYgKG1pbmZvLT5kZXZmbGFncy5ub2luaXQpCiAJCXJldHVybiAwOwogCS8qIHByZXNlcnZlIFZHQSBJL08sIEJJT1MgYW5kIFBQQyAqLwogCWh3LT5NWG9wdGlvblJlZyAmPSAweEMwMDAwMTAwOwogCWh3LT5NWG9wdGlvblJlZyB8PSAweDAwMkMwMDAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vdmdhKSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vdmdhKQogCQlody0+TVhvcHRpb25SZWcgJj0gfjB4MDAwMDAxMDA7Ci0JaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9iaW9zKSkKKwlpZiAobWluZm8tPmRldmZsYWdzLm5vYmlvcykKIAkJaHctPk1Yb3B0aW9uUmVnICY9IH4weDQwMDAwMDAwOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vcGNpcmV0cnkpKQorCWlmIChtaW5mby0+ZGV2ZmxhZ3Mubm9wY2lyZXRyeSkKIAkJaHctPk1Yb3B0aW9uUmVnIHw9ICAweDIwMDAwMDAwOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgaHctPk1Yb3B0aW9uUmVnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCBody0+TVhvcHRpb25SZWcpOwogCi0JQUNDRVNTX0ZCSU5GTyhhY2NlbC5yYW1kYWNfcmV2KSA9IGluVGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hTSUxJQ09OUkVWKTsKKwltaW5mby0+YWNjZWwucmFtZGFjX3JldiA9IGluVGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hTSUxJQ09OUkVWKTsKIAotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YQ0xLQ1RSTCwgVFZQMzAyNl9YQ0xLQ1RSTF9TUkNfQ0xLMFZHQSB8IFRWUDMwMjZfWENMS0NUUkxfQ0xLU1RPUFBFRCk7Ci0Jb3V0VGkzMDI2KFBNSU5GTyBUVlAzMDI2X1hUUlVFQ09MT1JDVFJMLCBUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX1BTRVVET0NPTE9SKTsKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1VWENUUkwsIFRWUDMwMjZfWE1VWENUUkxfVkdBKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWENMS0NUUkwsIFRWUDMwMjZfWENMS0NUUkxfU1JDX0NMSzBWR0EgfCBUVlAzMDI2X1hDTEtDVFJMX0NMS1NUT1BQRUQpOworCW91dFRpMzAyNihtaW5mbywgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTCwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9QU0VVRE9DT0xPUik7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hNVVhDVFJMLCBUVlAzMDI2X1hNVVhDVFJMX1ZHQSk7CiAKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWFBMTEFERFIsIDB4MkEpOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YTE9PUFBMTERBVEEsIDB4MDApOwotCW91dFRpMzAyNihQTUlORk8gVFZQMzAyNl9YUElYUExMREFUQSwgMHgwMCk7CisJb3V0VGkzMDI2KG1pbmZvLCBUVlAzMDI2X1hQTExBRERSLCAweDJBKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWExPT1BQTExEQVRBLCAweDAwKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWFBJWFBMTERBVEEsIDB4MDApOwogCiAJbWdhX291dGIoTV9NSVNDX1JFRywgMHg2Nyk7CiAKLQlvdXRUaTMwMjYoUE1JTkZPIFRWUDMwMjZfWE1FTVBMTENUUkwsIFRWUDMwMjZfWE1FTVBMTENUUkxfU1RST0JFTUtDNCB8IFRWUDMwMjZfWE1FTVBMTENUUkxfTUNMS19NQ0xLUExMKTsKKwlvdXRUaTMwMjYobWluZm8sIFRWUDMwMjZfWE1FTVBMTENUUkwsIFRWUDMwMjZfWE1FTVBMTENUUkxfU1RST0JFTUtDNCB8IFRWUDMwMjZfWE1FTVBMTENUUkxfTUNMS19NQ0xLUExMKTsKIAogCW1nYV9vdXRsKE1fUkVTRVQsIDEpOwogCXVkZWxheSgyNTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYWNjZWwuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2FjY2VsLmMKaW5kZXggOWMzYWVlZS4uODMzNWE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYWNjZWwuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5jCkBAIC04MSw3ICs4MSw3IEBACiAjaW5jbHVkZSAibWF0cm94ZmJfVGkzMDI2LmgiCiAjaW5jbHVkZSAibWF0cm94ZmJfbWlzYy5oIgogCi0jZGVmaW5lIGN1cnJfeWRzdG9yZyh4KQlBQ0NFU1NfRkJJTkZPMih4LCBjdXJyLnlkc3RvcmcucGl4ZWxzKQorI2RlZmluZSBjdXJyX3lkc3RvcmcoeCkJKCh4KS0+Y3Vyci55ZHN0b3JnLnBpeGVscykKIAogI2RlZmluZSBtZ2FfeWRzdGxlbih5LGwpIG1nYV9vdXRsKE1fWURTVExFTiB8IE1fRVhFQywgKCh5KSA8PCAxNikgfCAobCkpCiAKQEAgLTEwNyw3ICsxMDcsOCBAQAogc3RhdGljIHZvaWQgbWF0cm94ZmJfY2ZiNF9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyogaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0KiByZWN0KTsKIHN0YXRpYyB2b2lkIG1hdHJveGZiX2NmYjRfY29weWFyZWEoc3RydWN0IGZiX2luZm8qIGluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSogYXJlYSk7CiAKLXZvaWQgbWF0cm94X2NmYlhfaW5pdChXUE1JTkZPMikgewordm9pZCBtYXRyb3hfY2ZiWF9pbml0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJdV9pbnQzMl90IG1hY2Nlc3M7CiAJdV9pbnQzMl90IG1waXRjaDsKIAl1X2ludDMyX3QgbW9wbW9kZTsKQEAgLTExNSw1OSArMTE2LDU5IEBACiAKIAlEQkcoX19mdW5jX18pCiAKLQltcGl0Y2ggPSBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueHJlc192aXJ0dWFsOworCW1waXRjaCA9IG1pbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsOwogCi0JQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWE7Ci0JQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3Q7Ci0JQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdDsKLQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9jdXJzb3IgPSBOVUxMOworCW1pbmZvLT5mYm9wcy5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYTsKKwltaW5mby0+ZmJvcHMuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3Q7CisJbWluZm8tPmZib3BzLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQ7CisJbWluZm8tPmZib3BzLmZiX2N1cnNvciA9IE5VTEw7CiAKLQlhY2NlbCA9IChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYWNjZWxfZmxhZ3MgJiBGQl9BQ0NFTEZfVEVYVCkgPT0gRkJfQUNDRUxGX1RFWFQ7CisJYWNjZWwgPSAobWluZm8tPmZiY29uLnZhci5hY2NlbF9mbGFncyAmIEZCX0FDQ0VMRl9URVhUKSA9PSBGQl9BQ0NFTEZfVEVYVDsKIAotCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJc3dpdGNoIChtaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsKSB7CiAJCWNhc2UgNDoJCW1hY2Nlc3MgPSAweDAwMDAwMDAwOwkvKiBhY2NlbGVyYXRlIGFzIDhicHAgdmlkZW8gKi8KIAkJCQltcGl0Y2ggPSAobXBpdGNoID4+IDEpIHwgMHg4MDAwOyAvKiBkaXNhYmxlIGxpbmVhcml6YXRpb24gKi8KIAkJCQltb3Btb2RlID0gTV9PUE1PREVfNEJQUDsKLQkJCQltYXRyb3hfY2ZiNF9wYWwoQUNDRVNTX0ZCSU5GTyhjbWFwKSk7CisJCQkJbWF0cm94X2NmYjRfcGFsKG1pbmZvLT5jbWFwKTsKIAkJCQlpZiAoYWNjZWwgJiYgIShtcGl0Y2ggJiAxKSkgewotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NmYjRfY29weWFyZWE7Ci0JCQkJCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2ZpbGxyZWN0ID0gbWF0cm94ZmJfY2ZiNF9maWxscmVjdDsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2NvcHlhcmVhID0gbWF0cm94ZmJfY2ZiNF9jb3B5YXJlYTsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2ZpbGxyZWN0ID0gbWF0cm94ZmJfY2ZiNF9maWxscmVjdDsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCWNhc2UgODoJCW1hY2Nlc3MgPSAweDAwMDAwMDAwOwogCQkJCW1vcG1vZGUgPSBNX09QTU9ERV84QlBQOwotCQkJCW1hdHJveF9jZmI4X3BhbChBQ0NFU1NfRkJJTkZPKGNtYXApKTsKKwkJCQltYXRyb3hfY2ZiOF9wYWwobWluZm8tPmNtYXApOwogCQkJCWlmIChhY2NlbCkgewotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NvcHlhcmVhOwotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9maWxscmVjdCA9IG1hdHJveGZiX2ZpbGxyZWN0OwotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9pbWFnZWJsaXQgPSBtYXRyb3hmYl9pbWFnZWJsaXQ7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NvcHlhcmVhOworCQkJCQltaW5mby0+ZmJvcHMuZmJfZmlsbHJlY3QgPSBtYXRyb3hmYl9maWxscmVjdDsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2ltYWdlYmxpdCA9IG1hdHJveGZiX2ltYWdlYmxpdDsKIAkJCQl9CiAJCQkJYnJlYWs7Ci0JCWNhc2UgMTY6CWlmIChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuZ3JlZW4ubGVuZ3RoID09IDUpCisJCWNhc2UgMTY6CWlmIChtaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCA9PSA1KQogCQkJCQltYWNjZXNzID0gMHhDMDAwMDAwMTsKIAkJCQllbHNlCiAJCQkJCW1hY2Nlc3MgPSAweDQwMDAwMDAxOwogCQkJCW1vcG1vZGUgPSBNX09QTU9ERV8xNkJQUDsKIAkJCQlpZiAoYWNjZWwpIHsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfY29weWFyZWEgPSBtYXRyb3hmYl9jb3B5YXJlYTsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfZmlsbHJlY3QgPSBtYXRyb3hmYl9maWxscmVjdDsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfaW1hZ2VibGl0ID0gbWF0cm94ZmJfaW1hZ2VibGl0OworCQkJCQltaW5mby0+ZmJvcHMuZmJfY29weWFyZWEgPSBtYXRyb3hmYl9jb3B5YXJlYTsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2ZpbGxyZWN0ID0gbWF0cm94ZmJfZmlsbHJlY3Q7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9pbWFnZWJsaXQgPSBtYXRyb3hmYl9pbWFnZWJsaXQ7CiAJCQkJfQogCQkJCWJyZWFrOwogCQljYXNlIDI0OgltYWNjZXNzID0gMHgwMDAwMDAwMzsKIAkJCQltb3Btb2RlID0gTV9PUE1PREVfMjRCUFA7CiAJCQkJaWYgKGFjY2VsKSB7Ci0JCQkJCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2NvcHlhcmVhID0gbWF0cm94ZmJfY29weWFyZWE7Ci0JCQkJCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2ZpbGxyZWN0ID0gbWF0cm94ZmJfZmlsbHJlY3Q7Ci0JCQkJCUFDQ0VTU19GQklORk8oZmJvcHMpLmZiX2ltYWdlYmxpdCA9IG1hdHJveGZiX2ltYWdlYmxpdDsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2NvcHlhcmVhID0gbWF0cm94ZmJfY29weWFyZWE7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9maWxscmVjdCA9IG1hdHJveGZiX2ZpbGxyZWN0OworCQkJCQltaW5mby0+ZmJvcHMuZmJfaW1hZ2VibGl0ID0gbWF0cm94ZmJfaW1hZ2VibGl0OwogCQkJCX0KIAkJCQlicmVhazsKIAkJY2FzZSAzMjoJbWFjY2VzcyA9IDB4MDAwMDAwMDI7CiAJCQkJbW9wbW9kZSA9IE1fT1BNT0RFXzMyQlBQOwogCQkJCWlmIChhY2NlbCkgewotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NvcHlhcmVhOwotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9maWxscmVjdCA9IG1hdHJveGZiX2ZpbGxyZWN0OwotCQkJCQlBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9pbWFnZWJsaXQgPSBtYXRyb3hmYl9pbWFnZWJsaXQ7CisJCQkJCW1pbmZvLT5mYm9wcy5mYl9jb3B5YXJlYSA9IG1hdHJveGZiX2NvcHlhcmVhOworCQkJCQltaW5mby0+ZmJvcHMuZmJfZmlsbHJlY3QgPSBtYXRyb3hmYl9maWxscmVjdDsKKwkJCQkJbWluZm8tPmZib3BzLmZiX2ltYWdlYmxpdCA9IG1hdHJveGZiX2ltYWdlYmxpdDsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CW1hY2Nlc3MgPSAweDAwMDAwMDAwOwpAQCAtMTc2LDEwICsxNzcsMTAgQEAKIAl9CiAJbWdhX2ZpZm8oOCk7CiAJbWdhX291dGwoTV9QSVRDSCwgbXBpdGNoKTsKLQltZ2Ffb3V0bChNX1lEU1RPUkcsIGN1cnJfeWRzdG9yZyhNSU5GTykpOwotCWlmIChBQ0NFU1NfRkJJTkZPKGNhcGFibGUucGxud3QpKQorCW1nYV9vdXRsKE1fWURTVE9SRywgY3Vycl95ZHN0b3JnKG1pbmZvKSk7CisJaWYgKG1pbmZvLT5jYXBhYmxlLnBsbnd0KQogCQltZ2Ffb3V0bChNX1BMTldULCAtMSk7Ci0JaWYgKEFDQ0VTU19GQklORk8oY2FwYWJsZS5zcmNvcmcpKSB7CisJaWYgKG1pbmZvLT5jYXBhYmxlLnNyY29yZykgewogCQltZ2Ffb3V0bChNX1NSQ09SRywgMCk7CiAJCW1nYV9vdXRsKE1fRFNUT1JHLCAwKTsKIAl9CkBAIC0xODgsMTQgKzE4OSwxNiBAQAogCW1nYV9vdXRsKE1fWVRPUCwgMCk7CiAJbWdhX291dGwoTV9ZQk9ULCAweDAxRkZGRkZGKTsKIAltZ2Ffb3V0bChNX01BQ0NFU1MsIG1hY2Nlc3MpOwotCUFDQ0VTU19GQklORk8oYWNjZWwubV9kd2dfcmVjdCkgPSBNX0RXR19UUkFQIHwgTV9EV0dfU09MSUQgfCBNX0RXR19BUlpFUk8gfCBNX0RXR19TR05aRVJPIHwgTV9EV0dfU0hJRlRaRVJPOwotCWlmIChpc01pbGxlbml1bUlJKE1JTkZPKSkgQUNDRVNTX0ZCSU5GTyhhY2NlbC5tX2R3Z19yZWN0KSB8PSBNX0RXR19UUkFOU0M7Ci0JQUNDRVNTX0ZCSU5GTyhhY2NlbC5tX29wbW9kZSkgPSBtb3Btb2RlOworCW1pbmZvLT5hY2NlbC5tX2R3Z19yZWN0ID0gTV9EV0dfVFJBUCB8IE1fRFdHX1NPTElEIHwgTV9EV0dfQVJaRVJPIHwgTV9EV0dfU0dOWkVSTyB8IE1fRFdHX1NISUZUWkVSTzsKKwlpZiAoaXNNaWxsZW5pdW1JSShtaW5mbykpIG1pbmZvLT5hY2NlbC5tX2R3Z19yZWN0IHw9IE1fRFdHX1RSQU5TQzsKKwltaW5mby0+YWNjZWwubV9vcG1vZGUgPSBtb3Btb2RlOwogfQogCiBFWFBPUlRfU1lNQk9MKG1hdHJveF9jZmJYX2luaXQpOwogCi1zdGF0aWMgdm9pZCBtYXRyb3hfYWNjZWxfYm1vdmUoV1BNSU5GTyBpbnQgdnhyZXMsIGludCBzeSwgaW50IHN4LCBpbnQgZHksIGludCBkeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKSB7CitzdGF0aWMgdm9pZCBtYXRyb3hfYWNjZWxfYm1vdmUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHZ4cmVzLCBpbnQgc3ksCisJCQkgICAgICAgaW50IHN4LCBpbnQgZHksIGludCBkeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQorewogCWludCBzdGFydCwgZW5kOwogCUNSSVRGTEFHUwogCkBAIC0yMDksNyArMjEyLDcgQEAKIAkJCSBNX0RXR19CRkNPTCB8IE1fRFdHX1JFUExBQ0UpOwogCQltZ2Ffb3V0bChNX0FSNSwgdnhyZXMpOwogCQl3aWR0aC0tOwotCQlzdGFydCA9IHN5KnZ4cmVzK3N4K2N1cnJfeWRzdG9yZyhNSU5GTyk7CisJCXN0YXJ0ID0gc3kqdnhyZXMrc3grY3Vycl95ZHN0b3JnKG1pbmZvKTsKIAkJZW5kID0gc3RhcnQrd2lkdGg7CiAJfSBlbHNlIHsKIAkJbWdhX2ZpZm8oMyk7CkBAIC0yMTcsNyArMjIwLDcgQEAKIAkJbWdhX291dGwoTV9TR04sIDUpOwogCQltZ2Ffb3V0bChNX0FSNSwgLXZ4cmVzKTsKIAkJd2lkdGgtLTsKLQkJZW5kID0gKHN5K2hlaWdodC0xKSp2eHJlcytzeCtjdXJyX3lkc3RvcmcoTUlORk8pOworCQllbmQgPSAoc3kraGVpZ2h0LTEpKnZ4cmVzK3N4K2N1cnJfeWRzdG9yZyhtaW5mbyk7CiAJCXN0YXJ0ID0gZW5kK3dpZHRoOwogCQlkeSArPSBoZWlnaHQtMTsKIAl9CkBAIC0yMzEsNyArMjM0LDEwIEBACiAJQ1JJVEVORAogfQogCi1zdGF0aWMgdm9pZCBtYXRyb3hfYWNjZWxfYm1vdmVfbGluKFdQTUlORk8gaW50IHZ4cmVzLCBpbnQgc3ksIGludCBzeCwgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkgeworc3RhdGljIHZvaWQgbWF0cm94X2FjY2VsX2Jtb3ZlX2xpbihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgdnhyZXMsCisJCQkJICAgaW50IHN5LCBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LAorCQkJCSAgIGludCB3aWR0aCkKK3sKIAlpbnQgc3RhcnQsIGVuZDsKIAlDUklURkxBR1MKIApAQCAtMjQ1LDcgKzI1MSw3IEBACiAJCQlNX0RXR19CRkNPTCB8IE1fRFdHX1JFUExBQ0UpOwogCQltZ2Ffb3V0bChNX0FSNSwgdnhyZXMpOwogCQl3aWR0aC0tOwotCQlzdGFydCA9IHN5KnZ4cmVzK3N4K2N1cnJfeWRzdG9yZyhNSU5GTyk7CisJCXN0YXJ0ID0gc3kqdnhyZXMrc3grY3Vycl95ZHN0b3JnKG1pbmZvKTsKIAkJZW5kID0gc3RhcnQrd2lkdGg7CiAJfSBlbHNlIHsKIAkJbWdhX2ZpZm8oMyk7CkBAIC0yNTMsNyArMjU5LDcgQEAKIAkJbWdhX291dGwoTV9TR04sIDUpOwogCQltZ2Ffb3V0bChNX0FSNSwgLXZ4cmVzKTsKIAkJd2lkdGgtLTsKLQkJZW5kID0gKHN5K2hlaWdodC0xKSp2eHJlcytzeCtjdXJyX3lkc3RvcmcoTUlORk8pOworCQllbmQgPSAoc3kraGVpZ2h0LTEpKnZ4cmVzK3N4K2N1cnJfeWRzdG9yZyhtaW5mbyk7CiAJCXN0YXJ0ID0gZW5kK3dpZHRoOwogCQlkeSArPSBoZWlnaHQtMTsKIAl9CkBAIC0yNjksMjIgKzI3NSwyMyBAQAogfQogCiBzdGF0aWMgdm9pZCBtYXRyb3hmYl9jZmI0X2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvKiBpbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEqIGFyZWEpIHsKLQlNSU5GT19GUk9NX0lORk8oaW5mbyk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IGluZm8ybWluZm8oaW5mbyk7CiAKIAlpZiAoKGFyZWEtPnN4IHwgYXJlYS0+ZHggfCBhcmVhLT53aWR0aCkgJiAxKQogCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7CiAJZWxzZQotCQltYXRyb3hfYWNjZWxfYm1vdmVfbGluKFBNSU5GTyBBQ0NFU1NfRkJJTkZPKGZiY29uLnZhci54cmVzX3ZpcnR1YWwpID4+IDEsIGFyZWEtPnN5LCBhcmVhLT5zeCA+PiAxLCBhcmVhLT5keSwgYXJlYS0+ZHggPj4gMSwgYXJlYS0+aGVpZ2h0LCBhcmVhLT53aWR0aCA+PiAxKTsKKwkJbWF0cm94X2FjY2VsX2Jtb3ZlX2xpbihtaW5mbywgbWluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwgPj4gMSwgYXJlYS0+c3ksIGFyZWEtPnN4ID4+IDEsIGFyZWEtPmR5LCBhcmVhLT5keCA+PiAxLCBhcmVhLT5oZWlnaHQsIGFyZWEtPndpZHRoID4+IDEpOwogfQogCiBzdGF0aWMgdm9pZCBtYXRyb3hmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyogaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhKiBhcmVhKSB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCi0JbWF0cm94X2FjY2VsX2Jtb3ZlKFBNSU5GTyBBQ0NFU1NfRkJJTkZPKGZiY29uLnZhci54cmVzX3ZpcnR1YWwpLCBhcmVhLT5zeSwgYXJlYS0+c3gsIGFyZWEtPmR5LCBhcmVhLT5keCwgYXJlYS0+aGVpZ2h0LCBhcmVhLT53aWR0aCk7CisJbWF0cm94X2FjY2VsX2Jtb3ZlKG1pbmZvLCBtaW5mby0+ZmJjb24udmFyLnhyZXNfdmlydHVhbCwgYXJlYS0+c3ksIGFyZWEtPnN4LCBhcmVhLT5keSwgYXJlYS0+ZHgsIGFyZWEtPmhlaWdodCwgYXJlYS0+d2lkdGgpOwogfQogCi1zdGF0aWMgdm9pZCBtYXRyb3hmYl9hY2NlbF9jbGVhcihXUE1JTkZPIHVfaW50MzJfdCBjb2xvciwgaW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsCi0JCWludCB3aWR0aCkgeworc3RhdGljIHZvaWQgbWF0cm94ZmJfYWNjZWxfY2xlYXIoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgdV9pbnQzMl90IGNvbG9yLAorCQkJCSBpbnQgc3ksIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQorewogCUNSSVRGTEFHUwogCiAJREJHKF9fZnVuY19fKQpAQCAtMjkyLDcgKzI5OSw3IEBACiAJQ1JJVEJFR0lOCiAKIAltZ2FfZmlmbyg1KTsKLQltZ2Ffb3V0bChNX0RXR0NUTCwgQUNDRVNTX0ZCSU5GTyhhY2NlbC5tX2R3Z19yZWN0KSB8IE1fRFdHX1JFUExBQ0UpOworCW1nYV9vdXRsKE1fRFdHQ1RMLCBtaW5mby0+YWNjZWwubV9kd2dfcmVjdCB8IE1fRFdHX1JFUExBQ0UpOwogCW1nYV9vdXRsKE1fRkNPTCwgY29sb3IpOwogCW1nYV9vdXRsKE1fRlhCTkRSWSwgKChzeCArIHdpZHRoKSA8PCAxNikgfCBzeCk7CiAJbWdhX3lkc3RsZW4oc3ksIGhlaWdodCk7CkBAIC0zMDIsMTYgKzMwOSwxOCBAQAogfQogCiBzdGF0aWMgdm9pZCBtYXRyb3hmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyogaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0KiByZWN0KSB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJc3dpdGNoIChyZWN0LT5yb3ApIHsKIAkJY2FzZSBST1BfQ09QWToKLQkJCW1hdHJveGZiX2FjY2VsX2NsZWFyKFBNSU5GTyAoKHVfaW50MzJfdCopaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlY3QtPmNvbG9yXSwgcmVjdC0+ZHksIHJlY3QtPmR4LCByZWN0LT5oZWlnaHQsIHJlY3QtPndpZHRoKTsKKwkJCW1hdHJveGZiX2FjY2VsX2NsZWFyKG1pbmZvLCAoKHVfaW50MzJfdCAqKWluZm8tPnBzZXVkb19wYWxldHRlKVtyZWN0LT5jb2xvcl0sIHJlY3QtPmR5LCByZWN0LT5keCwgcmVjdC0+aGVpZ2h0LCByZWN0LT53aWR0aCk7CiAJCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG1hdHJveGZiX2NmYjRfY2xlYXIoV1BNSU5GTyB1X2ludDMyX3QgYmd4LCBpbnQgc3ksIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKSB7CitzdGF0aWMgdm9pZCBtYXRyb3hmYl9jZmI0X2NsZWFyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVfaW50MzJfdCBiZ3gsCisJCQkJaW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKIAlpbnQgd2hhdHRvZG87CiAJQ1JJVEZMQUdTCiAKQEAgLTMzMywxNiArMzQyLDE2IEBACiAJc3ggPj49IDE7CiAJaWYgKHdpZHRoKSB7CiAJCW1nYV9maWZvKDUpOwotCQltZ2Ffb3V0bChNX0RXR0NUTCwgQUNDRVNTX0ZCSU5GTyhhY2NlbC5tX2R3Z19yZWN0KSB8IE1fRFdHX1JFUExBQ0UyKTsKKwkJbWdhX291dGwoTV9EV0dDVEwsIG1pbmZvLT5hY2NlbC5tX2R3Z19yZWN0IHwgTV9EV0dfUkVQTEFDRTIpOwogCQltZ2Ffb3V0bChNX0ZDT0wsIGJneCk7CiAJCW1nYV9vdXRsKE1fRlhCTkRSWSwgKChzeCArIHdpZHRoKSA8PCAxNikgfCBzeCk7Ci0JCW1nYV9vdXRsKE1fWURTVCwgc3kgKiBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueHJlc192aXJ0dWFsID4+IDYpOworCQltZ2Ffb3V0bChNX1lEU1QsIHN5ICogbWluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwgPj4gNik7CiAJCW1nYV9vdXRsKE1fTEVOIHwgTV9FWEVDLCBoZWlnaHQpOwogCQlXYWl0VGlsbElkbGUoKTsKIAl9CiAJaWYgKHdoYXR0b2RvKSB7Ci0JCXVfaW50MzJfdCBzdGVwID0gQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnhyZXNfdmlydHVhbCA+PiAxOwotCQl2YWRkcl90IHZiYXNlID0gQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSk7CisJCXVfaW50MzJfdCBzdGVwID0gbWluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwgPj4gMTsKKwkJdmFkZHJfdCB2YmFzZSA9IG1pbmZvLT52aWRlby52YmFzZTsKIAkJaWYgKHdoYXR0b2RvICYgMSkgewogCQkJdW5zaWduZWQgaW50IHVhZGRyID0gc3kgKiBzdGVwICsgc3ggLSAxOwogCQkJdV9pbnQzMl90IGxvb3A7CkBAIC0zNjcsMTcgKzM3NiwxOSBAQAogfQogCiBzdGF0aWMgdm9pZCBtYXRyb3hmYl9jZmI0X2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvKiBpbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QqIHJlY3QpIHsKLQlNSU5GT19GUk9NX0lORk8oaW5mbyk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IGluZm8ybWluZm8oaW5mbyk7CiAKIAlzd2l0Y2ggKHJlY3QtPnJvcCkgewogCQljYXNlIFJPUF9DT1BZOgotCQkJbWF0cm94ZmJfY2ZiNF9jbGVhcihQTUlORk8gKCh1X2ludDMyX3QqKWluZm8tPnBzZXVkb19wYWxldHRlKVtyZWN0LT5jb2xvcl0sIHJlY3QtPmR5LCByZWN0LT5keCwgcmVjdC0+aGVpZ2h0LCByZWN0LT53aWR0aCk7CisJCQltYXRyb3hmYl9jZmI0X2NsZWFyKG1pbmZvLCAoKHVfaW50MzJfdCAqKWluZm8tPnBzZXVkb19wYWxldHRlKVtyZWN0LT5jb2xvcl0sIHJlY3QtPmR5LCByZWN0LT5keCwgcmVjdC0+aGVpZ2h0LCByZWN0LT53aWR0aCk7CiAJCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG1hdHJveGZiXzFicHBfaW1hZ2VibGl0KFdQTUlORk8gdV9pbnQzMl90IGZneCwgdV9pbnQzMl90IGJneCwKLQkJY29uc3QgdV9pbnQ4X3QqIGNoYXJkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB5eSwgaW50IHh4KSB7CitzdGF0aWMgdm9pZCBtYXRyb3hmYl8xYnBwX2ltYWdlYmxpdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCB1X2ludDMyX3QgZmd4LAorCQkJCSAgICB1X2ludDMyX3QgYmd4LCBjb25zdCB1X2ludDhfdCAqY2hhcmRhdGEsCisJCQkJICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHl5LCBpbnQgeHgpCit7CiAJdV9pbnQzMl90IHN0ZXA7CiAJdV9pbnQzMl90IHlkc3RsZW47CiAJdV9pbnQzMl90IHhsZW47CkBAIC00MTIsNyArNDIzLDcgQEAKIAltZ2Ffb3V0bChNX0ZDT0wsIGZneCk7CiAJbWdhX291dGwoTV9CQ09MLCBiZ3gpOwogCWZ4Ym5kcnkgPSAoKHh4ICsgd2lkdGggLSAxKSA8PCAxNikgfCB4eDsKLQltbWlvID0gQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKTsKKwltbWlvID0gbWluZm8tPm1taW8udmJhc2U7CiAKIAltZ2FfZmlmbyg2KTsKIAltZ2Ffd3JpdGVsKG1taW8sIE1fRlhCTkRSWSwgZnhibmRyeSk7CkBAIC00NjcsNyArNDc4LDcgQEAKIAogCiBzdGF0aWMgdm9pZCBtYXRyb3hmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8qIGluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSogaW1hZ2UpIHsKLQlNSU5GT19GUk9NX0lORk8oaW5mbyk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IGluZm8ybWluZm8oaW5mbyk7CiAKIAlEQkdfSEVBVlkoX19mdW5jX18pOwogCkBAIC00NzYsNyArNDg3LDcgQEAKIAogCQlmZ3ggPSAoKHVfaW50MzJfdCopaW5mby0+cHNldWRvX3BhbGV0dGUpW2ltYWdlLT5mZ19jb2xvcl07CiAJCWJneCA9ICgodV9pbnQzMl90KilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbaW1hZ2UtPmJnX2NvbG9yXTsKLQkJbWF0cm94ZmJfMWJwcF9pbWFnZWJsaXQoUE1JTkZPIGZneCwgYmd4LCBpbWFnZS0+ZGF0YSwgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LCBpbWFnZS0+ZHksIGltYWdlLT5keCk7CisJCW1hdHJveGZiXzFicHBfaW1hZ2VibGl0KG1pbmZvLCBmZ3gsIGJneCwgaW1hZ2UtPmRhdGEsIGltYWdlLT53aWR0aCwgaW1hZ2UtPmhlaWdodCwgaW1hZ2UtPmR5LCBpbWFnZS0+ZHgpOwogCX0gZWxzZSB7CiAJCS8qIERhbmdlciEgaW1hZ2UtPmRlcHRoIGlzIHVzZWxlc3M6IGxvZ28gcGFpbnRpbmcgY29kZSBhbHdheXMKIAkJICAgcGFzc2VzIGZyYW1lYnVmZmVyIGNvbG9yIGRlcHRoIGhlcmUsIGFsdGhvdWdoIGxvZ28gZGF0YSBhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2FjY2VsLmggYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5oCmluZGV4IGY0MGMzMTQuLjFlNDE4ZTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2FjY2VsLmgKQEAgLTMsNiArMyw2IEBACiAKICNpbmNsdWRlICJtYXRyb3hmYl9iYXNlLmgiCiAKLXZvaWQgbWF0cm94X2NmYlhfaW5pdChXUE1JTkZPMik7Cit2b2lkIG1hdHJveF9jZmJYX2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCmluZGV4IDBjMTA0OWIuLjcwNjRmYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKQEAgLTE1NCwyMSArMTU0LDIyIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfY3J0YzIoV1BNSU5GTyB1bnNpZ25lZCBpbnQgcG9zKSB7Ci0Jc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIGluZm8gPSBBQ0NFU1NfRkJJTkZPKGNydGMyLmluZm8pOworc3RhdGljIHZvaWQgdXBkYXRlX2NydGMyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVuc2lnbmVkIGludCBwb3MpCit7CisJc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8gKmluZm8gPSBtaW5mby0+Y3J0YzIuaW5mbzsKIAogCS8qIE1ha2Ugc3VyZSB0aGF0IGRpc3BsYXlzIGFyZSBjb21wYXRpYmxlICovCi0JaWYgKGluZm8gJiYgKGluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCA9PSBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYml0c19wZXJfcGl4ZWwpCi0JCSAmJiAoaW5mby0+ZmJjb24udmFyLnhyZXNfdmlydHVhbCA9PSBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueHJlc192aXJ0dWFsKQotCQkgJiYgKGluZm8tPmZiY29uLnZhci5ncmVlbi5sZW5ndGggPT0gQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyZWVuLmxlbmd0aCkKKwlpZiAoaW5mbyAmJiAoaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsID09IG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwpCisJCSAmJiAoaW5mby0+ZmJjb24udmFyLnhyZXNfdmlydHVhbCA9PSBtaW5mby0+ZmJjb24udmFyLnhyZXNfdmlydHVhbCkKKwkJICYmIChpbmZvLT5mYmNvbi52YXIuZ3JlZW4ubGVuZ3RoID09IG1pbmZvLT5mYmNvbi52YXIuZ3JlZW4ubGVuZ3RoKQogCQkgKSB7Ci0JCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJCXN3aXRjaCAobWluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCkgewogCQkJY2FzZSAxNjoKIAkJCWNhc2UgMzI6CiAJCQkJcG9zID0gcG9zICogODsKIAkJCQlpZiAoaW5mby0+aW50ZXJsYWNlZCkgewogCQkJCQltZ2Ffb3V0bCgweDNDMkMsIHBvcyk7Ci0JCQkJCW1nYV9vdXRsKDB4M0MyOCwgcG9zICsgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnhyZXNfdmlydHVhbCAqIEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5iaXRzX3Blcl9waXhlbCAvIDgpOworCQkJCQltZ2Ffb3V0bCgweDNDMjgsIHBvcyArIG1pbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsICogbWluZm8tPmZiY29uLnZhci5iaXRzX3Blcl9waXhlbCAvIDgpOwogCQkJCX0gZWxzZSB7CiAJCQkJCW1nYV9vdXRsKDB4M0MyOCwgcG9zKTsKIAkJCQl9CkBAIC0xNzcsMTcgKzE3OCwxOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbWF0cm94ZmJfY3J0YzFfcGFucG9zKFdQTUlORk8yKSB7Ci0JaWYgKEFDQ0VTU19GQklORk8oY3J0YzEucGFucG9zKSA+PSAwKSB7CitzdGF0aWMgdm9pZCBtYXRyb3hmYl9jcnRjMV9wYW5wb3Moc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKKwlpZiAobWluZm8tPmNydGMxLnBhbnBvcyA+PSAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBwYW5wb3M7CiAKIAkJbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncyk7Ci0JCXBhbnBvcyA9IEFDQ0VTU19GQklORk8oY3J0YzEucGFucG9zKTsKKwkJcGFucG9zID0gbWluZm8tPmNydGMxLnBhbnBvczsKIAkJaWYgKHBhbnBvcyA+PSAwKSB7CiAJCQl1bnNpZ25lZCBpbnQgZXh0dmdhX3JlZzsKIAotCQkJQUNDRVNTX0ZCSU5GTyhjcnRjMS5wYW5wb3MpID0gLTE7IC8qIE5vIHVwZGF0ZSBwZW5kaW5nIGFueW1vcmUgKi8KKwkJCW1pbmZvLT5jcnRjMS5wYW5wb3MgPSAtMTsgLyogTm8gdXBkYXRlIHBlbmRpbmcgYW55bW9yZSAqLwogCQkJZXh0dmdhX3JlZyA9IG1nYV9pbmIoTV9FWFRWR0FfSU5ERVgpOwogCQkJbWdhX3NldHIoTV9FWFRWR0FfSU5ERVgsIDB4MDAsIHBhbnBvcyk7CiAJCQlpZiAoZXh0dmdhX3JlZyAhPSAweDAwKSB7CkBAIC0yMDIsMzkgKzIwNCwzOSBAQAogewogCXVfaW50MzJfdCBzdGF0dXM7CiAJaW50IGhhbmRsZWQgPSAwOwotCi0JTUlORk9fRlJPTShkZXZfaWQpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBkZXZfaWQ7CiAKIAlzdGF0dXMgPSBtZ2FfaW5sKE1fU1RBVFVTKTsKIAogCWlmIChzdGF0dXMgJiAweDIwKSB7CiAJCW1nYV9vdXRsKE1fSUNMRUFSLCAweDIwKTsKLQkJQUNDRVNTX0ZCSU5GTyhjcnRjMS52c3luYy5jbnQpKys7Ci0JCW1hdHJveGZiX2NydGMxX3BhbnBvcyhQTUlORk8yKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZBQ0NFU1NfRkJJTkZPKGNydGMxLnZzeW5jLndhaXQpKTsKKwkJbWluZm8tPmNydGMxLnZzeW5jLmNudCsrOworCQltYXRyb3hmYl9jcnRjMV9wYW5wb3MobWluZm8pOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1pbmZvLT5jcnRjMS52c3luYy53YWl0KTsKIAkJaGFuZGxlZCA9IDE7CiAJfQogCWlmIChzdGF0dXMgJiAweDIwMCkgewogCQltZ2Ffb3V0bChNX0lDTEVBUiwgMHgyMDApOwotCQlBQ0NFU1NfRkJJTkZPKGNydGMyLnZzeW5jLmNudCkrKzsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZBQ0NFU1NfRkJJTkZPKGNydGMyLnZzeW5jLndhaXQpKTsKKwkJbWluZm8tPmNydGMyLnZzeW5jLmNudCsrOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1pbmZvLT5jcnRjMi52c3luYy53YWl0KTsKIAkJaGFuZGxlZCA9IDE7CiAJfQogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCi1pbnQgbWF0cm94ZmJfZW5hYmxlX2lycShXUE1JTkZPIGludCByZWVuYWJsZSkgeworaW50IG1hdHJveGZiX2VuYWJsZV9pcnEoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHJlZW5hYmxlKQorewogCXVfaW50MzJfdCBibTsKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkKKwlpZiAobWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwKQogCQlibSA9IDB4MjIwOwogCWVsc2UKIAkJYm0gPSAweDAyMDsKIAotCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpKSkgewotCQlpZiAocmVxdWVzdF9pcnEoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLT5pcnEsIG1hdHJveF9pcnEsCi0JCQkJSVJRRl9TSEFSRUQsICJtYXRyb3hmYiIsIE1JTkZPKSkgewotCQkJY2xlYXJfYml0KDAsICZBQ0NFU1NfRkJJTkZPKGlycV9mbGFncykpOworCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmbWluZm8tPmlycV9mbGFncykpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKG1pbmZvLT5wY2lkZXYtPmlycSwgbWF0cm94X2lycSwKKwkJCQlJUlFGX1NIQVJFRCwgIm1hdHJveGZiIiwgbWluZm8pKSB7CisJCQljbGVhcl9iaXQoMCwgJm1pbmZvLT5pcnFfZmxhZ3MpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogQ2xlYXIgYW55IHBlbmRpbmcgZmllbGQgaW50ZXJydXB0cyAqLwpAQCAtMjUyLDM3ICsyNTQsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWF0cm94ZmJfZGlzYWJsZV9pcnEoV1BNSU5GTzIpIHsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsICZBQ0NFU1NfRkJJTkZPKGlycV9mbGFncykpKSB7CitzdGF0aWMgdm9pZCBtYXRyb3hmYl9kaXNhYmxlX2lycShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJm1pbmZvLT5pcnFfZmxhZ3MpKSB7CiAJCS8qIEZsdXNoIHBlbmRpbmcgcGFuLWF0LXZibCByZXF1ZXN0Li4uICovCi0JCW1hdHJveGZiX2NydGMxX3BhbnBvcyhQTUlORk8yKTsKLQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuYWNjZWxlcmF0b3IpID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwKQorCQltYXRyb3hmYl9jcnRjMV9wYW5wb3MobWluZm8pOworCQlpZiAobWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwKQogCQkJbWdhX291dGwoTV9JRU4sIG1nYV9pbmwoTV9JRU4pICYgfjB4MjIwKTsKIAkJZWxzZQogCQkJbWdhX291dGwoTV9JRU4sIG1nYV9pbmwoTV9JRU4pICYgfjB4MjApOwotCQlmcmVlX2lycShBQ0NFU1NfRkJJTkZPKHBjaWRldiktPmlycSwgTUlORk8pOworCQlmcmVlX2lycShtaW5mby0+cGNpZGV2LT5pcnEsIG1pbmZvKTsKIAl9CiB9CiAKLWludCBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKFdQTUlORk8gdV9pbnQzMl90IGNydGMpIHsKK2ludCBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVfaW50MzJfdCBjcnRjKQorewogCXN0cnVjdCBtYXRyb3hfdnN5bmMgKnZzOwogCXVuc2lnbmVkIGludCBjbnQ7CiAJaW50IHJldDsKIAogCXN3aXRjaCAoY3J0YykgewogCQljYXNlIDA6Ci0JCQl2cyA9ICZBQ0NFU1NfRkJJTkZPKGNydGMxLnZzeW5jKTsKKwkJCXZzID0gJm1pbmZvLT5jcnRjMS52c3luYzsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5hY2NlbGVyYXRvcikgIT0gRkJfQUNDRUxfTUFUUk9YX01HQUc0MDApIHsKKwkJCWlmIChtaW5mby0+ZGV2ZmxhZ3MuYWNjZWxlcmF0b3IgIT0gRkJfQUNDRUxfTUFUUk9YX01HQUc0MDApIHsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KLQkJCXZzID0gJkFDQ0VTU19GQklORk8oY3J0YzIudnN5bmMpOworCQkJdnMgPSAmbWluZm8tPmNydGMyLnZzeW5jOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcmV0ID0gbWF0cm94ZmJfZW5hYmxlX2lycShQTUlORk8gMCk7CisJcmV0ID0gbWF0cm94ZmJfZW5hYmxlX2lycShtaW5mbywgMCk7CiAJaWYgKHJldCkgewogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTI5Myw3ICsyOTcsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAlpZiAocmV0ID09IDApIHsKLQkJbWF0cm94ZmJfZW5hYmxlX2lycShQTUlORk8gMSk7CisJCW1hdHJveGZiX2VuYWJsZV9pcnEobWluZm8sIDEpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMDEsMTIgKzMwNSwxMiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHZvaWQgbWF0cm94X3Bhbl92YXIoV1BNSU5GTyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikgeworc3RhdGljIHZvaWQgbWF0cm94X3Bhbl92YXIoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQorewogCXVuc2lnbmVkIGludCBwb3M7CiAJdW5zaWduZWQgc2hvcnQgcDAsIHAxLCBwMjsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YXzMyTUIKIAl1bnNpZ25lZCBpbnQgcDM7Ci0jZW5kaWYKIAlpbnQgdmJsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTMxNCw0NyArMzE4LDQ0IEBACiAKIAlEQkcoX19mdW5jX18pCiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZWFkKSkKKwlpZiAobWluZm8tPmRlYWQpCiAJCXJldHVybjsKIAotCUFDQ0VTU19GQklORk8oZmJjb24pLnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0OwotCUFDQ0VTU19GQklORk8oZmJjb24pLnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OwotCXBvcyA9IChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueW9mZnNldCAqIEFDQ0VTU19GQklORk8oZmJjb24pLnZhci54cmVzX3ZpcnR1YWwgKyBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueG9mZnNldCkgKiBBQ0NFU1NfRkJJTkZPKGN1cnIuZmluYWxfYnBwU2hpZnQpIC8gMzI7Ci0JcG9zICs9IEFDQ0VTU19GQklORk8oY3Vyci55ZHN0b3JnLmNodW5rcyk7Ci0JcDAgPSBBQ0NFU1NfRkJJTkZPKGh3KS5DUlRDWzB4MERdID0gcG9zICYgMHhGRjsKLQlwMSA9IEFDQ0VTU19GQklORk8oaHcpLkNSVENbMHgwQ10gPSAocG9zICYgMHhGRjAwKSA+PiA4OwotCXAyID0gQUNDRVNTX0ZCSU5GTyhodykuQ1JUQ0VYVFswXSA9IChBQ0NFU1NfRkJJTkZPKGh3KS5DUlRDRVhUWzBdICYgMHhCMCkgfCAoKHBvcyA+PiAxNikgJiAweDBGKSB8ICgocG9zID4+IDE0KSAmIDB4NDApOwotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfMzJNQgotCXAzID0gQUNDRVNTX0ZCSU5GTyhodykuQ1JUQ0VYVFs4XSA9IHBvcyA+PiAyMTsKLSNlbmRpZgorCW1pbmZvLT5mYmNvbi52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKKwltaW5mby0+ZmJjb24udmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7CisJcG9zID0gKG1pbmZvLT5mYmNvbi52YXIueW9mZnNldCAqIG1pbmZvLT5mYmNvbi52YXIueHJlc192aXJ0dWFsICsgbWluZm8tPmZiY29uLnZhci54b2Zmc2V0KSAqIG1pbmZvLT5jdXJyLmZpbmFsX2JwcFNoaWZ0IC8gMzI7CisJcG9zICs9IG1pbmZvLT5jdXJyLnlkc3RvcmcuY2h1bmtzOworCXAwID0gbWluZm8tPmh3LkNSVENbMHgwRF0gPSBwb3MgJiAweEZGOworCXAxID0gbWluZm8tPmh3LkNSVENbMHgwQ10gPSAocG9zICYgMHhGRjAwKSA+PiA4OworCXAyID0gbWluZm8tPmh3LkNSVENFWFRbMF0gPSAobWluZm8tPmh3LkNSVENFWFRbMF0gJiAweEIwKSB8ICgocG9zID4+IDE2KSAmIDB4MEYpIHwgKChwb3MgPj4gMTQpICYgMHg0MCk7CisJcDMgPSBtaW5mby0+aHcuQ1JUQ0VYVFs4XSA9IHBvcyA+PiAyMTsKIAogCS8qIEZCX0FDVElWQVRFX1ZCTCBhbmQgd2UgY2FuIGFjcXVpcmUgaW50ZXJydXB0cz8gSG9ub3IgRkJfQUNUSVZBVEVfVkJMIHRoZW4uLi4gKi8KLQl2YmwgPSAodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX1ZCTCkgJiYgKG1hdHJveGZiX2VuYWJsZV9pcnEoUE1JTkZPIDApID09IDApOworCXZibCA9ICh2YXItPmFjdGl2YXRlICYgRkJfQUNUSVZBVEVfVkJMKSAmJiAobWF0cm94ZmJfZW5hYmxlX2lycShtaW5mbywgMCkgPT0gMCk7CiAKIAlDUklUQkVHSU4KIAogCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwogCW1nYV9zZXRyKE1fQ1JUQ19JTkRFWCwgMHgwRCwgcDApOwogCW1nYV9zZXRyKE1fQ1JUQ19JTkRFWCwgMHgwQywgcDEpOwotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfMzJNQgotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnN1cHBvcnQzMk1CKSkKKwlpZiAobWluZm8tPmRldmZsYWdzLnN1cHBvcnQzMk1CKQogCQltZ2Ffc2V0cihNX0VYVFZHQV9JTkRFWCwgMHgwOCwgcDMpOwotI2VuZGlmCiAJaWYgKHZibCkgewotCQlBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcykgPSBwMjsKKwkJbWluZm8tPmNydGMxLnBhbnBvcyA9IHAyOwogCX0gZWxzZSB7CiAJCS8qIEFib3J0IGFueSBwZW5kaW5nIGNoYW5nZSAqLwotCQlBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcykgPSAtMTsKKwkJbWluZm8tPmNydGMxLnBhbnBvcyA9IC0xOwogCQltZ2Ffc2V0cihNX0VYVFZHQV9JTkRFWCwgMHgwMCwgcDIpOwogCX0KIAltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogCi0JdXBkYXRlX2NydGMyKFBNSU5GTyBwb3MpOworCXVwZGF0ZV9jcnRjMihtaW5mbywgcG9zKTsKIAogCUNSSVRFTkQKIH0KIAotc3RhdGljIHZvaWQgbWF0cm94ZmJfcmVtb3ZlKFdQTUlORk8gaW50IGR1bW15KSB7CitzdGF0aWMgdm9pZCBtYXRyb3hmYl9yZW1vdmUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IGR1bW15KQorewogCS8qIEN1cnJlbnRseSB3ZSBhcmUgaG9sZGluZyBiaWcga2VybmVsIGxvY2sgb24gYWxsIGRlYWQgJiB1c2Vjb3VudCB1cGRhdGVzLgogCSAqIERlc3Ryb3kgZXZlcnl0aGluZyBhZnRlciBhbGwgdXNlcnMgcmVsZWFzZSBpdC4gRXNwZWNpYWxseSBkbyBub3QgdW5yZWdpc3RlcgogCSAqIGZyYW1lYnVmZmVyIGFuZCBpb3VubWFwIG1lbW9yeSwgbmVpdGhlciBmYm1lbSBub3IgZmJjb24tY2ZiKiBkb2VzIG5vdCBjaGVjawpAQCAtMzYzLDI1ICszNjQsMjMgQEAKIAkgKiB3cml0ZSBkYXRhIHdpdGhvdXQgY2F1c2luZyB0b28gbXVjaCBkYW1hZ2UuLi4KIAkgKi8KIAotCUFDQ0VTU19GQklORk8oZGVhZCkgPSAxOwotCWlmIChBQ0NFU1NfRkJJTkZPKHVzZWNvdW50KSkgeworCW1pbmZvLT5kZWFkID0gMTsKKwlpZiAobWluZm8tPnVzZWNvdW50KSB7CiAJCS8qIGRlc3Ryb3kgaXQgbGF0ZXIgKi8KIAkJcmV0dXJuOwogCX0KLQltYXRyb3hmYl91bnJlZ2lzdGVyX2RldmljZShNSU5GTyk7Ci0JdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmQUNDRVNTX0ZCSU5GTyhmYmNvbikpOwotCW1hdHJveGZiX2c0NTBfc2h1dGRvd24oUE1JTkZPMik7CisJbWF0cm94ZmJfdW5yZWdpc3Rlcl9kZXZpY2UobWluZm8pOworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJm1pbmZvLT5mYmNvbik7CisJbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihtaW5mbyk7CiAjaWZkZWYgQ09ORklHX01UUlIKLQlpZiAoQUNDRVNTX0ZCSU5GTyhtdHJyLnZyYW1fdmFsaWQpKQotCQltdHJyX2RlbChBQ0NFU1NfRkJJTkZPKG10cnIudnJhbSksIEFDQ0VTU19GQklORk8odmlkZW8uYmFzZSksIEFDQ0VTU19GQklORk8odmlkZW8ubGVuKSk7CisJaWYgKG1pbmZvLT5tdHJyLnZyYW1fdmFsaWQpCisJCW10cnJfZGVsKG1pbmZvLT5tdHJyLnZyYW0sIG1pbmZvLT52aWRlby5iYXNlLCBtaW5mby0+dmlkZW8ubGVuKTsKICNlbmRpZgotCW1nYV9pb3VubWFwKEFDQ0VTU19GQklORk8obW1pby52YmFzZSkpOwotCW1nYV9pb3VubWFwKEFDQ0VTU19GQklORk8odmlkZW8udmJhc2UpKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oQUNDRVNTX0ZCSU5GTyh2aWRlby5iYXNlKSwgQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW5fbWF4aW11bSkpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihBQ0NFU1NfRkJJTkZPKG1taW8uYmFzZSksIDE2Mzg0KTsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRAorCW1nYV9pb3VubWFwKG1pbmZvLT5tbWlvLnZiYXNlKTsKKwltZ2FfaW91bm1hcChtaW5mby0+dmlkZW8udmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtaW5mby0+dmlkZW8uYmFzZSwgbWluZm8tPnZpZGVvLmxlbl9tYXhpbXVtKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWluZm8tPm1taW8uYmFzZSwgMTYzODQpOwogCWtmcmVlKG1pbmZvKTsKLSNlbmRpZgogfQogCiAJLyoKQEAgLTM5MCw0OCArMzg5LDUwIEBACiAKIHN0YXRpYyBpbnQgbWF0cm94ZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJREJHX0xPT1AoX19mdW5jX18pCiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZWFkKSkgeworCWlmIChtaW5mby0+ZGVhZCkgewogCQlyZXR1cm4gLUVOWElPOwogCX0KLQlBQ0NFU1NfRkJJTkZPKHVzZWNvdW50KSsrOworCW1pbmZvLT51c2Vjb3VudCsrOwogCWlmICh1c2VyKSB7Ci0JCUFDQ0VTU19GQklORk8odXNlcnVzZWNvdW50KSsrOworCQltaW5mby0+dXNlcnVzZWNvdW50Kys7CiAJfQogCXJldHVybigwKTsKIH0KIAogc3RhdGljIGludCBtYXRyb3hmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKLQlNSU5GT19GUk9NX0lORk8oaW5mbyk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IGluZm8ybWluZm8oaW5mbyk7CiAKIAlEQkdfTE9PUChfX2Z1bmNfXykKIAogCWlmICh1c2VyKSB7Ci0JCWlmICgwID09IC0tQUNDRVNTX0ZCSU5GTyh1c2VydXNlY291bnQpKSB7Ci0JCQltYXRyb3hmYl9kaXNhYmxlX2lycShQTUlORk8yKTsKKwkJaWYgKDAgPT0gLS1taW5mby0+dXNlcnVzZWNvdW50KSB7CisJCQltYXRyb3hmYl9kaXNhYmxlX2lycShtaW5mbyk7CiAJCX0KIAl9Ci0JaWYgKCEoLS1BQ0NFU1NfRkJJTkZPKHVzZWNvdW50KSkgJiYgQUNDRVNTX0ZCSU5GTyhkZWFkKSkgewotCQltYXRyb3hmYl9yZW1vdmUoUE1JTkZPIDApOworCWlmICghKC0tbWluZm8tPnVzZWNvdW50KSAmJiBtaW5mby0+ZGVhZCkgeworCQltYXRyb3hmYl9yZW1vdmUobWluZm8sIDApOwogCX0KIAlyZXR1cm4oMCk7CiB9CiAKIHN0YXRpYyBpbnQgbWF0cm94ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCiAJCXN0cnVjdCBmYl9pbmZvKiBpbmZvKSB7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJREJHKF9fZnVuY19fKQogCi0JbWF0cm94X3Bhbl92YXIoUE1JTkZPIHZhcik7CisJbWF0cm94X3Bhbl92YXIobWluZm8sIHZhcik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWF0cm94ZmJfZ2V0X2ZpbmFsX2JwcFNoaWZ0KENQTUlORk8gaW50IGJwcCkgeworc3RhdGljIGludCBtYXRyb3hmYl9nZXRfZmluYWxfYnBwU2hpZnQoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCQkgICAgICAgaW50IGJwcCkKK3sKIAlpbnQgYnBwc2hmdDI7CiAKIAlEQkcoX19mdW5jX18pCkBAIC00NDAsMTQgKzQ0MSwxNiBAQAogCWlmICghYnBwc2hmdDIpIHsKIAkJcmV0dXJuIDg7CiAJfQotCWlmIChpc0ludGVybGVhdmUoTUlORk8pKQorCWlmIChpc0ludGVybGVhdmUobWluZm8pKQogCQlicHBzaGZ0MiA+Pj0gMTsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy52aWRlbzY0Yml0cykpCisJaWYgKG1pbmZvLT5kZXZmbGFncy52aWRlbzY0Yml0cykKIAkJYnBwc2hmdDIgPj49IDE7CiAJcmV0dXJuIGJwcHNoZnQyOwogfQogCi1zdGF0aWMgaW50IG1hdHJveGZiX3Rlc3RfYW5kX3NldF9yb3VuZGluZyhDUE1JTkZPIGludCB4cmVzLCBpbnQgYnBwKSB7CitzdGF0aWMgaW50IG1hdHJveGZiX3Rlc3RfYW5kX3NldF9yb3VuZGluZyhjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJCQkgIGludCB4cmVzLCBpbnQgYnBwKQorewogCWludCBvdmVyOwogCWludCByb3VuZGluZzsKIApAQCAtNDY1LDExICs0NjgsMTEgQEAKIAkJCQlicmVhazsKIAkJZGVmYXVsdDoJcm91bmRpbmcgPSAxNjsKIAkJCQkvKiBvbiBHNDAwLCAxNiByZWFsbHkgZG9lcyBub3Qgd29yayAqLwotCQkJCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9PSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCkKKwkJCQlpZiAobWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yID09IEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwKQogCQkJCQlyb3VuZGluZyA9IDMyOwogCQkJCWJyZWFrOwogCX0KLQlpZiAoaXNJbnRlcmxlYXZlKE1JTkZPKSkgeworCWlmIChpc0ludGVybGVhdmUobWluZm8pKSB7CiAJCXJvdW5kaW5nICo9IDI7CiAJfQogCW92ZXIgPSB4cmVzICUgcm91bmRpbmc7CkBAIC00NzgsNyArNDgxLDkgQEAKIAlyZXR1cm4geHJlczsKIH0KIAotc3RhdGljIGludCBtYXRyb3hmYl9waXRjaF9hZGp1c3QoQ1BNSU5GTyBpbnQgeHJlcywgaW50IGJwcCkgeworc3RhdGljIGludCBtYXRyb3hmYl9waXRjaF9hZGp1c3QoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHhyZXMsCisJCQkJIGludCBicHApCit7CiAJY29uc3QgaW50KiB3aWR0aDsKIAlpbnQgeHJlc19uZXc7CiAKQEAgLTQ4NiwxOCArNDkxLDE4IEBACiAKIAlpZiAoIWJwcCkgcmV0dXJuIHhyZXM7CiAKLQl3aWR0aCA9IEFDQ0VTU19GQklORk8oY2FwYWJsZS52eHJlcyk7CisJd2lkdGggPSBtaW5mby0+Y2FwYWJsZS52eHJlczsKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnByZWNpc2Vfd2lkdGgpKSB7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5wcmVjaXNlX3dpZHRoKSB7CiAJCXdoaWxlICgqd2lkdGgpIHsKLQkJCWlmICgoKndpZHRoID49IHhyZXMpICYmIChtYXRyb3hmYl90ZXN0X2FuZF9zZXRfcm91bmRpbmcoUE1JTkZPICp3aWR0aCwgYnBwKSA9PSAqd2lkdGgpKSB7CisJCQlpZiAoKCp3aWR0aCA+PSB4cmVzKSAmJiAobWF0cm94ZmJfdGVzdF9hbmRfc2V0X3JvdW5kaW5nKG1pbmZvLCAqd2lkdGgsIGJwcCkgPT0gKndpZHRoKSkgewogCQkJCWJyZWFrOwogCQkJfQogCQkJd2lkdGgrKzsKIAkJfQogCQl4cmVzX25ldyA9ICp3aWR0aDsKIAl9IGVsc2UgewotCQl4cmVzX25ldyA9IG1hdHJveGZiX3Rlc3RfYW5kX3NldF9yb3VuZGluZyhQTUlORk8geHJlcywgYnBwKTsKKwkJeHJlc19uZXcgPSBtYXRyb3hmYl90ZXN0X2FuZF9zZXRfcm91bmRpbmcobWluZm8sIHhyZXMsIGJwcCk7CiAJfQogCXJldHVybiB4cmVzX25ldzsKIH0KQEAgLTUyNCw3ICs1MjksMTAgQEAKIAlyZXR1cm4gMTY7CS8qIHJldHVybiBzb21ldGhpbmcgcmVhc29uYWJsZS4uLiBvciBwYW5pYygpPyAqLwogfQogCi1zdGF0aWMgaW50IG1hdHJveGZiX2RlY29kZV92YXIoQ1BNSU5GTyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50ICp2aXN1YWwsIGludCAqdmlkZW9fY21hcF9sZW4sIHVuc2lnbmVkIGludCogeWRzdG9yZykgeworc3RhdGljIGludCBtYXRyb3hmYl9kZWNvZGVfdmFyKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkgICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCAqdmlzdWFsLAorCQkJICAgICAgIGludCAqdmlkZW9fY21hcF9sZW4sIHVuc2lnbmVkIGludCogeWRzdG9yZykKK3sKIAlzdHJ1Y3QgUkdCVCB7CiAJCXVuc2lnbmVkIGNoYXIgYnBwOwogCQlzdHJ1Y3QgewpAQCAtNTUxLDcgKzU1OSw3IEBACiAJREJHKF9fZnVuY19fKQogCiAJc3dpdGNoIChicHApIHsKLQkJY2FzZSA0OgkgaWYgKCFBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY2ZiNCkpIHJldHVybiAtRUlOVkFMOworCQljYXNlIDQ6CSBpZiAoIW1pbmZvLT5jYXBhYmxlLmNmYjQpIHJldHVybiAtRUlOVkFMOwogCQkJIGJyZWFrOwogCQljYXNlIDg6CSBicmVhazsKIAkJY2FzZSAxNjogYnJlYWs7CkBAIC01NjAsMTMgKzU2OCwxMyBAQAogCQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKIAl9CiAJKnlkc3RvcmcgPSAwOwotCXZyYW1sZW4gPSBBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpOworCXZyYW1sZW4gPSBtaW5mby0+dmlkZW8ubGVuX3VzYWJsZTsKIAlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCiAJCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwogCWlmICh2YXItPnhyZXNfdmlydHVhbCA8IHZhci0+eHJlcykKIAkJdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXM7CiAKLQl2YXItPnhyZXNfdmlydHVhbCA9IG1hdHJveGZiX3BpdGNoX2FkanVzdChQTUlORk8gdmFyLT54cmVzX3ZpcnR1YWwsIGJwcCk7CisJdmFyLT54cmVzX3ZpcnR1YWwgPSBtYXRyb3hmYl9waXRjaF9hZGp1c3QobWluZm8sIHZhci0+eHJlc192aXJ0dWFsLCBicHApOwogCW1lbWxlbiA9IHZhci0+eHJlc192aXJ0dWFsICogYnBwICogdmFyLT55cmVzX3ZpcnR1YWwgLyA4OwogCWlmIChtZW1sZW4gPiB2cmFtbGVuKSB7CiAJCXZhci0+eXJlc192aXJ0dWFsID0gdnJhbWxlbiAqIDggLyAodmFyLT54cmVzX3ZpcnR1YWwgKiBicHApOwpAQCAtNTc1LDcgKzU4Myw3IEBACiAJLyogVGhlcmUgaXMgaGFyZHdhcmUgYnVnIHRoYXQgbm8gbGluZSBjYW4gY3Jvc3MgNE1CIGJvdW5kYXJ5ICovCiAJLyogZ2l2ZSB1cCBmb3IgQ0ZCMjQsIGl0IGlzIGltcG9zc2libGUgdG8gZWFzeSB3b3JrYXJvdW5kIGl0ICovCiAJLyogZm9yIG90aGVyIHRyeSB0byBkbyBzb21ldGhpbmcgKi8KLQlpZiAoIUFDQ0VTU19GQklORk8oY2FwYWJsZS5jcm9zczRNQikgJiYgKG1lbWxlbiA+IDB4NDAwMDAwKSkgeworCWlmICghbWluZm8tPmNhcGFibGUuY3Jvc3M0TUIgJiYgKG1lbWxlbiA+IDB4NDAwMDAwKSkgewogCQlpZiAoYnBwID09IDI0KSB7CiAJCQkvKiBzb3JyeSAqLwogCQl9IGVsc2UgewpAQCAtNjQ0LDkgKzY1Miw3IEBACiAJCQkgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCiAJCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKIHsKLSNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRAogCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyogbWluZm8gPSBjb250YWluZXJfb2YoZmJfaW5mbywgc3RydWN0IG1hdHJveF9mYl9pbmZvLCBmYmNvbik7Ci0jZW5kaWYKIAogCURCRyhfX2Z1bmNfXykKIApAQCAtNjU3LDIwICs2NjMsMjAgQEAKIAkgKiAgIT0gMCBmb3IgaW52YWxpZCByZWduby4KIAkgKi8KIAotCWlmIChyZWdubyA+PSBBQ0NFU1NfRkJJTkZPKGN1cnIuY21hcF9sZW4pKQorCWlmIChyZWdubyA+PSBtaW5mby0+Y3Vyci5jbWFwX2xlbikKIAkJcmV0dXJuIDE7CiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyYXlzY2FsZSkgeworCWlmIChtaW5mby0+ZmJjb24udmFyLmdyYXlzY2FsZSkgewogCQkvKiBncmF5ID0gMC4zMCpSICsgMC41OSpHICsgMC4xMSpCICovCiAJCXJlZCA9IGdyZWVuID0gYmx1ZSA9IChyZWQgKiA3NyArIGdyZWVuICogMTUxICsgYmx1ZSAqIDI4KSA+PiA4OwogCX0KIAotCXJlZCA9IENOVlRfVE9IVyhyZWQsIEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5yZWQubGVuZ3RoKTsKLQlncmVlbiA9IENOVlRfVE9IVyhncmVlbiwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyZWVuLmxlbmd0aCk7Ci0JYmx1ZSA9IENOVlRfVE9IVyhibHVlLCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYmx1ZS5sZW5ndGgpOwotCXRyYW5zcCA9IENOVlRfVE9IVyh0cmFuc3AsIEFDQ0VTU19GQklORk8oZmJjb24pLnZhci50cmFuc3AubGVuZ3RoKTsKKwlyZWQgPSBDTlZUX1RPSFcocmVkLCBtaW5mby0+ZmJjb24udmFyLnJlZC5sZW5ndGgpOworCWdyZWVuID0gQ05WVF9UT0hXKGdyZWVuLCBtaW5mby0+ZmJjb24udmFyLmdyZWVuLmxlbmd0aCk7CisJYmx1ZSA9IENOVlRfVE9IVyhibHVlLCBtaW5mby0+ZmJjb24udmFyLmJsdWUubGVuZ3RoKTsKKwl0cmFuc3AgPSBDTlZUX1RPSFcodHJhbnNwLCBtaW5mby0+ZmJjb24udmFyLnRyYW5zcC5sZW5ndGgpOwogCi0Jc3dpdGNoIChBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwlzd2l0Y2ggKG1pbmZvLT5mYmNvbi52YXIuYml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDQ6CiAJY2FzZSA4OgogCQltZ2Ffb3V0YihNX0RBQ19SRUcsIHJlZ25vKTsKQEAgLTY4MywzMCArNjg5LDMwIEBACiAJCQlicmVhazsKIAkJewogCQkJdV9pbnQxNl90IGNvbCA9Ci0JCQkJKHJlZCA8PCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIucmVkLm9mZnNldCkgICAgIHwKLQkJCQkoZ3JlZW4gPDwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyZWVuLm9mZnNldCkgfAotCQkJCShibHVlIDw8IEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ibHVlLm9mZnNldCkgICB8Ci0JCQkJKHRyYW5zcCA8PCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIudHJhbnNwLm9mZnNldCk7IC8qIGZvciAxOjU6NTo1ICovCi0JCQlBQ0NFU1NfRkJJTkZPKGNtYXBbcmVnbm9dKSA9IGNvbCB8IChjb2wgPDwgMTYpOworCQkJCShyZWQgPDwgbWluZm8tPmZiY29uLnZhci5yZWQub2Zmc2V0KSAgICAgfAorCQkJCShncmVlbiA8PCBtaW5mby0+ZmJjb24udmFyLmdyZWVuLm9mZnNldCkgfAorCQkJCShibHVlIDw8IG1pbmZvLT5mYmNvbi52YXIuYmx1ZS5vZmZzZXQpICAgfAorCQkJCSh0cmFuc3AgPDwgbWluZm8tPmZiY29uLnZhci50cmFuc3Aub2Zmc2V0KTsgLyogZm9yIDE6NTo1OjUgKi8KKwkJCW1pbmZvLT5jbWFwW3JlZ25vXSA9IGNvbCB8IChjb2wgPDwgMTYpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJaWYgKHJlZ25vID49IDE2KQogCQkJYnJlYWs7Ci0JCUFDQ0VTU19GQklORk8oY21hcFtyZWdub10pID0KLQkJCShyZWQgICA8PCBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIucmVkLm9mZnNldCkgICB8Ci0JCQkoZ3JlZW4gPDwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLmdyZWVuLm9mZnNldCkgfAotCQkJKGJsdWUgIDw8IEFDQ0VTU19GQklORk8oZmJjb24pLnZhci5ibHVlLm9mZnNldCkgIHwKLQkJCSh0cmFuc3AgPDwgQUNDRVNTX0ZCSU5GTyhmYmNvbikudmFyLnRyYW5zcC5vZmZzZXQpOwkvKiA4Ojg6ODo4ICovCisJCW1pbmZvLT5jbWFwW3JlZ25vXSA9CisJCQkocmVkICAgPDwgbWluZm8tPmZiY29uLnZhci5yZWQub2Zmc2V0KSAgIHwKKwkJCShncmVlbiA8PCBtaW5mby0+ZmJjb24udmFyLmdyZWVuLm9mZnNldCkgfAorCQkJKGJsdWUgIDw8IG1pbmZvLT5mYmNvbi52YXIuYmx1ZS5vZmZzZXQpICB8CisJCQkodHJhbnNwIDw8IG1pbmZvLT5mYmNvbi52YXIudHJhbnNwLm9mZnNldCk7CS8qIDg6ODo4OjggKi8KIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtYXRyb3hmYl9pbml0X2ZpeChXUE1JTkZPMikKK3N0YXRpYyB2b2lkIG1hdHJveGZiX2luaXRfZml4KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCiB7Ci0Jc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmQUNDRVNTX0ZCSU5GTyhmYmNvbikuZml4OworCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4ID0gJm1pbmZvLT5mYmNvbi5maXg7CiAJREJHKF9fZnVuY19fKQogCiAJc3RyY3B5KGZpeC0+aWQsIk1BVFJPWCIpOwpAQCAtNzE0LDIwICs3MjAsMjAgQEAKIAlmaXgtPnhwYW5zdGVwID0gODsJLyogOCBmb3IgOGJwcCwgNCBmb3IgMTZicHAsIDIgZm9yIDMyYnBwICovCiAJZml4LT55cGFuc3RlcCA9IDE7CiAJZml4LT55d3JhcHN0ZXAgPSAwOwotCWZpeC0+bW1pb19zdGFydCA9IEFDQ0VTU19GQklORk8obW1pby5iYXNlKTsKLQlmaXgtPm1taW9fbGVuID0gQUNDRVNTX0ZCSU5GTyhtbWlvLmxlbik7Ci0JZml4LT5hY2NlbCA9IEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuYWNjZWxlcmF0b3IpOworCWZpeC0+bW1pb19zdGFydCA9IG1pbmZvLT5tbWlvLmJhc2U7CisJZml4LT5tbWlvX2xlbiA9IG1pbmZvLT5tbWlvLmxlbjsKKwlmaXgtPmFjY2VsID0gbWluZm8tPmRldmZsYWdzLmFjY2VsZXJhdG9yOwogfQogCi1zdGF0aWMgdm9pZCBtYXRyb3hmYl91cGRhdGVfZml4KFdQTUlORk8yKQorc3RhdGljIHZvaWQgbWF0cm94ZmJfdXBkYXRlX2ZpeChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQogewotCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4ID0gJkFDQ0VTU19GQklORk8oZmJjb24pLmZpeDsKKwlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZtaW5mby0+ZmJjb24uZml4OwogCURCRyhfX2Z1bmNfXykKIAotCW11dGV4X2xvY2soJkFDQ0VTU19GQklORk8oZmJjb24pLm1tX2xvY2spOwotCWZpeC0+c21lbV9zdGFydCA9IEFDQ0VTU19GQklORk8odmlkZW8uYmFzZSkgKyBBQ0NFU1NfRkJJTkZPKGN1cnIueWRzdG9yZy5ieXRlcyk7Ci0JZml4LT5zbWVtX2xlbiA9IEFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSkgLSBBQ0NFU1NfRkJJTkZPKGN1cnIueWRzdG9yZy5ieXRlcyk7Ci0JbXV0ZXhfdW5sb2NrKCZBQ0NFU1NfRkJJTkZPKGZiY29uKS5tbV9sb2NrKTsKKwltdXRleF9sb2NrKCZtaW5mby0+ZmJjb24ubW1fbG9jayk7CisJZml4LT5zbWVtX3N0YXJ0ID0gbWluZm8tPnZpZGVvLmJhc2UgKyBtaW5mby0+Y3Vyci55ZHN0b3JnLmJ5dGVzOworCWZpeC0+c21lbV9sZW4gPSBtaW5mby0+dmlkZW8ubGVuX3VzYWJsZSAtIG1pbmZvLT5jdXJyLnlkc3RvcmcuYnl0ZXM7CisJbXV0ZXhfdW5sb2NrKCZtaW5mby0+ZmJjb24ubW1fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgbWF0cm94ZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKQEAgLTczNiwxMiArNzQyLDEyIEBACiAJaW50IHZpc3VhbDsKIAlpbnQgY21hcF9sZW47CiAJdW5zaWduZWQgaW50IHlkc3Rvcmc7Ci0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCi0JaWYgKEFDQ0VTU19GQklORk8oZGVhZCkpIHsKKwlpZiAobWluZm8tPmRlYWQpIHsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JaWYgKChlcnIgPSBtYXRyb3hmYl9kZWNvZGVfdmFyKFBNSU5GTyB2YXIsICZ2aXN1YWwsICZjbWFwX2xlbiwgJnlkc3RvcmcpKSAhPSAwKQorCWlmICgoZXJyID0gbWF0cm94ZmJfZGVjb2RlX3ZhcihtaW5mbywgdmFyLCAmdmlzdWFsLCAmY21hcF9sZW4sICZ5ZHN0b3JnKSkgIT0gMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KQEAgLTc1MywzNSArNzU5LDM1IEBACiAJaW50IGNtYXBfbGVuOwogCXVuc2lnbmVkIGludCB5ZHN0b3JnOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyOwotCU1JTkZPX0ZST01fSU5GTyhpbmZvKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gaW5mbzJtaW5mbyhpbmZvKTsKIAogCURCRyhfX2Z1bmNfXykKIAotCWlmIChBQ0NFU1NfRkJJTkZPKGRlYWQpKSB7CisJaWYgKG1pbmZvLT5kZWFkKSB7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCiAJdmFyID0gJmluZm8tPnZhcjsKLQlpZiAoKGVyciA9IG1hdHJveGZiX2RlY29kZV92YXIoUE1JTkZPIHZhciwgJnZpc3VhbCwgJmNtYXBfbGVuLCAmeWRzdG9yZykpICE9IDApCisJaWYgKChlcnIgPSBtYXRyb3hmYl9kZWNvZGVfdmFyKG1pbmZvLCB2YXIsICZ2aXN1YWwsICZjbWFwX2xlbiwgJnlkc3RvcmcpKSAhPSAwKQogCQlyZXR1cm4gZXJyOwotCUFDQ0VTU19GQklORk8oZmJjb24uc2NyZWVuX2Jhc2UpID0gdmFkZHJfdmEoQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSkpICsgeWRzdG9yZzsKLQltYXRyb3hmYl91cGRhdGVfZml4KFBNSU5GTzIpOwotCUFDQ0VTU19GQklORk8oZmJjb24pLmZpeC52aXN1YWwgPSB2aXN1YWw7Ci0JQUNDRVNTX0ZCSU5GTyhmYmNvbikuZml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JQUNDRVNTX0ZCSU5GTyhmYmNvbikuZml4LnR5cGVfYXV4ID0gMDsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uKS5maXgubGluZV9sZW5ndGggPSAodmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPmJpdHNfcGVyX3BpeGVsKSA+PiAzOworCW1pbmZvLT5mYmNvbi5zY3JlZW5fYmFzZSA9IHZhZGRyX3ZhKG1pbmZvLT52aWRlby52YmFzZSkgKyB5ZHN0b3JnOworCW1hdHJveGZiX3VwZGF0ZV9maXgobWluZm8pOworCW1pbmZvLT5mYmNvbi5maXgudmlzdWFsID0gdmlzdWFsOworCW1pbmZvLT5mYmNvbi5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwltaW5mby0+ZmJjb24uZml4LnR5cGVfYXV4ID0gMDsKKwltaW5mby0+ZmJjb24uZml4LmxpbmVfbGVuZ3RoID0gKHZhci0+eHJlc192aXJ0dWFsICogdmFyLT5iaXRzX3Blcl9waXhlbCkgPj4gMzsKIAl7CiAJCXVuc2lnbmVkIGludCBwb3M7CiAKLQkJQUNDRVNTX0ZCSU5GTyhjdXJyLmNtYXBfbGVuKSA9IGNtYXBfbGVuOwotCQl5ZHN0b3JnICs9IEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MueWRzdG9yZyk7Ci0JCUFDQ0VTU19GQklORk8oY3Vyci55ZHN0b3JnLmJ5dGVzKSA9IHlkc3Rvcmc7Ci0JCUFDQ0VTU19GQklORk8oY3Vyci55ZHN0b3JnLmNodW5rcykgPSB5ZHN0b3JnID4+IChpc0ludGVybGVhdmUoTUlORk8pPzM6Mik7CisJCW1pbmZvLT5jdXJyLmNtYXBfbGVuID0gY21hcF9sZW47CisJCXlkc3RvcmcgKz0gbWluZm8tPmRldmZsYWdzLnlkc3Rvcmc7CisJCW1pbmZvLT5jdXJyLnlkc3RvcmcuYnl0ZXMgPSB5ZHN0b3JnOworCQltaW5mby0+Y3Vyci55ZHN0b3JnLmNodW5rcyA9IHlkc3RvcmcgPj4gKGlzSW50ZXJsZWF2ZShtaW5mbykgPyAzIDogMik7CiAJCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDQpCi0JCQlBQ0NFU1NfRkJJTkZPKGN1cnIueWRzdG9yZy5waXhlbHMpID0geWRzdG9yZzsKKwkJCW1pbmZvLT5jdXJyLnlkc3RvcmcucGl4ZWxzID0geWRzdG9yZzsKIAkJZWxzZQotCQkJQUNDRVNTX0ZCSU5GTyhjdXJyLnlkc3RvcmcucGl4ZWxzKSA9ICh5ZHN0b3JnICogOCkgLyB2YXItPmJpdHNfcGVyX3BpeGVsOwotCQlBQ0NFU1NfRkJJTkZPKGN1cnIuZmluYWxfYnBwU2hpZnQpID0gbWF0cm94ZmJfZ2V0X2ZpbmFsX2JwcFNoaWZ0KFBNSU5GTyB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJCW1pbmZvLT5jdXJyLnlkc3RvcmcucGl4ZWxzID0gKHlkc3RvcmcgKiA4KSAvIHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCW1pbmZvLT5jdXJyLmZpbmFsX2JwcFNoaWZ0ID0gbWF0cm94ZmJfZ2V0X2ZpbmFsX2JwcFNoaWZ0KG1pbmZvLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKIAkJewlzdHJ1Y3QgbXlfdGltbWluZyBtdDsKIAkJCXN0cnVjdCBtYXRyb3hfaHdfc3RhdGUqIGh3OwogCQkJaW50IG91dDsKQEAgLTc5Nyw1NCArODAzLDU1IEBACiAJCQkJZGVmYXVsdDoJbXQuZGVsYXkgPSAzMSArIDg7IGJyZWFrOwogCQkJfQogCi0JCQlodyA9ICZBQ0NFU1NfRkJJTkZPKGh3KTsKKwkJCWh3ID0gJm1pbmZvLT5odzsKIAotCQkJZG93bl9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7CisJCQlkb3duX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJCQlmb3IgKG91dCA9IDA7IG91dCA8IE1BVFJPWEZCX01BWF9PVVRQVVRTOyBvdXQrKykgewotCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSAmJgotCQkJCSAgICBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0LT5jb21wdXRlKSB7Ci0JCQkJCUFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQtPmNvbXB1dGUoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLmRhdGEsICZtdCk7CisJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW291dF0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSAmJgorCQkJCSAgICBtaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+Y29tcHV0ZSkgeworCQkJCQltaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+Y29tcHV0ZShtaW5mby0+b3V0cHV0c1tvdXRdLmRhdGEsICZtdCk7CiAJCQkJfQogCQkJfQotCQkJdXBfcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOwotCQkJQUNDRVNTX0ZCSU5GTyhjcnRjMSkucGl4Y2xvY2sgPSBtdC5waXhjbG9jazsKLQkJCUFDQ0VTU19GQklORk8oY3J0YzEpLm1ucCA9IG10Lm1ucDsKLQkJCUFDQ0VTU19GQklORk8oaHdfc3dpdGNoLT5pbml0KFBNSU5GTyAmbXQpKTsKLQkJCXBvcyA9ICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCArIHZhci0+eG9mZnNldCkgKiBBQ0NFU1NfRkJJTkZPKGN1cnIuZmluYWxfYnBwU2hpZnQpIC8gMzI7Ci0JCQlwb3MgKz0gQUNDRVNTX0ZCSU5GTyhjdXJyLnlkc3RvcmcuY2h1bmtzKTsKKwkJCXVwX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CisJCQltaW5mby0+Y3J0YzEucGl4Y2xvY2sgPSBtdC5waXhjbG9jazsKKwkJCW1pbmZvLT5jcnRjMS5tbnAgPSBtdC5tbnA7CisJCQltaW5mby0+aHdfc3dpdGNoLT5pbml0KG1pbmZvLCAmbXQpOworCQkJcG9zID0gKHZhci0+eW9mZnNldCAqIHZhci0+eHJlc192aXJ0dWFsICsgdmFyLT54b2Zmc2V0KSAqIG1pbmZvLT5jdXJyLmZpbmFsX2JwcFNoaWZ0IC8gMzI7CisJCQlwb3MgKz0gbWluZm8tPmN1cnIueWRzdG9yZy5jaHVua3M7CiAKIAkJCWh3LT5DUlRDWzB4MERdID0gcG9zICYgMHhGRjsKIAkJCWh3LT5DUlRDWzB4MENdID0gKHBvcyAmIDB4RkYwMCkgPj4gODsKIAkJCWh3LT5DUlRDRVhUWzBdID0gKGh3LT5DUlRDRVhUWzBdICYgMHhGMCkgfCAoKHBvcyA+PiAxNikgJiAweDBGKSB8ICgocG9zID4+IDE0KSAmIDB4NDApOwogCQkJaHctPkNSVENFWFRbOF0gPSBwb3MgPj4gMjE7Ci0JCQlBQ0NFU1NfRkJJTkZPKGh3X3N3aXRjaC0+cmVzdG9yZShQTUlORk8yKSk7Ci0JCQl1cGRhdGVfY3J0YzIoUE1JTkZPIHBvcyk7Ci0JCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKKwkJCW1pbmZvLT5od19zd2l0Y2gtPnJlc3RvcmUobWluZm8pOworCQkJdXBkYXRlX2NydGMyKG1pbmZvLCBwb3MpOworCQkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQkJZm9yIChvdXQgPSAwOyBvdXQgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgb3V0KyspIHsKLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEgJiYKLQkJCQkgICAgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+cHJvZ3JhbSkgewotCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0LT5wcm9ncmFtKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5kYXRhKTsKKwkJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxICYmCisJCQkJICAgIG1pbmZvLT5vdXRwdXRzW291dF0ub3V0cHV0LT5wcm9ncmFtKSB7CisJCQkJCW1pbmZvLT5vdXRwdXRzW291dF0ub3V0cHV0LT5wcm9ncmFtKG1pbmZvLT5vdXRwdXRzW291dF0uZGF0YSk7CiAJCQkJfQogCQkJfQogCQkJZm9yIChvdXQgPSAwOyBvdXQgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgb3V0KyspIHsKLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEgJiYKLQkJCQkgICAgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+c3RhcnQpIHsKLQkJCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+c3RhcnQoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLmRhdGEpOworCQkJCWlmIChtaW5mby0+b3V0cHV0c1tvdXRdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEgJiYKKwkJCQkgICAgbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPnN0YXJ0KSB7CisJCQkJCW1pbmZvLT5vdXRwdXRzW291dF0ub3V0cHV0LT5zdGFydChtaW5mby0+b3V0cHV0c1tvdXRdLmRhdGEpOwogCQkJCX0KIAkJCX0KLQkJCXVwX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKLQkJCW1hdHJveF9jZmJYX2luaXQoUE1JTkZPMik7CisJCQl1cF9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQkJbWF0cm94X2NmYlhfaW5pdChtaW5mbyk7CiAJCX0KIAl9Ci0JQUNDRVNTX0ZCSU5GTyhpbml0aWFsaXplZCkgPSAxOworCW1pbmZvLT5pbml0aWFsaXplZCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWF0cm94ZmJfZ2V0X3ZibGFuayhXUE1JTkZPIHN0cnVjdCBmYl92YmxhbmsgKnZibGFuaykKK3N0YXRpYyBpbnQgbWF0cm94ZmJfZ2V0X3ZibGFuayhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJICAgICAgIHN0cnVjdCBmYl92YmxhbmsgKnZibGFuaykKIHsKIAl1bnNpZ25lZCBpbnQgc3RzMTsKIAotCW1hdHJveGZiX2VuYWJsZV9pcnEoUE1JTkZPIDApOworCW1hdHJveGZiX2VuYWJsZV9pcnEobWluZm8sIDApOwogCW1lbXNldCh2YmxhbmssIDAsIHNpemVvZigqdmJsYW5rKSk7CiAJdmJsYW5rLT5mbGFncyA9IEZCX1ZCTEFOS19IQVZFX1ZDT1VOVCB8IEZCX1ZCTEFOS19IQVZFX1ZTWU5DIHwKIAkJCUZCX1ZCTEFOS19IQVZFX1ZCTEFOSyB8IEZCX1ZCTEFOS19IQVZFX0hCTEFOSzsKQEAgLTg1NywxMyArODY0LDEzIEBACiAJCXZibGFuay0+ZmxhZ3MgfD0gRkJfVkJMQU5LX0hCTEFOS0lORzsKIAlpZiAoc3RzMSAmIDgpCiAJCXZibGFuay0+ZmxhZ3MgfD0gRkJfVkJMQU5LX1ZTWU5DSU5HOwotCWlmICh2YmxhbmstPnZjb3VudCA+PSBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueXJlcykKKwlpZiAodmJsYW5rLT52Y291bnQgPj0gbWluZm8tPmZiY29uLnZhci55cmVzKQogCQl2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19WQkxBTktJTkc7Ci0JaWYgKHRlc3RfYml0KDAsICZBQ0NFU1NfRkJJTkZPKGlycV9mbGFncykpKSB7CisJaWYgKHRlc3RfYml0KDAsICZtaW5mby0+aXJxX2ZsYWdzKSkgewogCQl2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19IQVZFX0NPVU5UOwogCQkvKiBPbmx5IG9uZSB3cml0ZXIsIGFsaWduZWQgaW50IHZhbHVlLi4uCiAJCSAgIGl0IHNob3VsZCB3b3JrIHdpdGhvdXQgbG9jayBhbmQgd2l0aG91dCBhdG9taWNfdCAqLwotCQl2YmxhbmstPmNvdW50ID0gQUNDRVNTX0ZCSU5GTyhjcnRjMSkudnN5bmMuY250OworCQl2YmxhbmstPmNvdW50ID0gbWluZm8tPmNydGMxLnZzeW5jLmNudDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04NzYsMTEgKzg4MywxMSBAQAogCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlNSU5GT19GUk9NX0lORk8oaW5mbyk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IGluZm8ybWluZm8oaW5mbyk7CiAKIAlEQkcoX19mdW5jX18pCiAKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZWFkKSkgeworCWlmIChtaW5mby0+ZGVhZCkgewogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtODkwLDcgKzg5Nyw3IEBACiAJCQkJc3RydWN0IGZiX3ZibGFuayB2Ymxhbms7CiAJCQkJaW50IGVycjsKIAotCQkJCWVyciA9IG1hdHJveGZiX2dldF92YmxhbmsoUE1JTkZPICZ2YmxhbmspOworCQkJCWVyciA9IG1hdHJveGZiX2dldF92YmxhbmsobWluZm8sICZ2YmxhbmspOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CiAJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmJsYW5rLCBzaXplb2YodmJsYW5rKSkpCkBAIC05MDQsNyArOTExLDcgQEAKIAkJCQlpZiAoZ2V0X3VzZXIoY3J0LCAodV9pbnQzMl90IF9fdXNlciAqKWFyZykpCiAJCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQkJcmV0dXJuIG1hdHJveGZiX3dhaXRfZm9yX3N5bmMoUE1JTkZPIGNydCk7CisJCQkJcmV0dXJuIG1hdHJveGZiX3dhaXRfZm9yX3N5bmMobWluZm8sIGNydCk7CiAJCQl9CiAJCWNhc2UgTUFUUk9YRkJfU0VUX09VVFBVVF9NT0RFOgogCQkJewpAQCAtOTE2LDggKzkyMyw4IEBACiAJCQkJCXJldHVybiAtRUZBVUxUOwogCQkJCWlmIChtb20ub3V0cHV0ID49IE1BVFJPWEZCX01BWF9PVVRQVVRTKQogCQkJCQlyZXR1cm4gLUVOWElPOwotCQkJCWRvd25fcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOwotCQkJCW9wcm9jID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW21vbS5vdXRwdXRdKS5vdXRwdXQ7CisJCQkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQkJCW9wcm9jID0gbWluZm8tPm91dHB1dHNbbW9tLm91dHB1dF0ub3V0cHV0OwogCQkJCWlmICghb3Byb2MpIHsKIAkJCQkJdmFsID0gLUVOWElPOwogCQkJCX0gZWxzZSBpZiAoIW9wcm9jLT52ZXJpZnltb2RlKSB7CkBAIC05MjcsMTggKzkzNCwxOCBAQAogCQkJCQkJdmFsID0gLUVJTlZBTDsKIAkJCQkJfQogCQkJCX0gZWxzZSB7Ci0JCQkJCXZhbCA9IG9wcm9jLT52ZXJpZnltb2RlKEFDQ0VTU19GQklORk8ob3V0cHV0c1ttb20ub3V0cHV0XSkuZGF0YSwgbW9tLm1vZGUpOworCQkJCQl2YWwgPSBvcHJvYy0+dmVyaWZ5bW9kZShtaW5mby0+b3V0cHV0c1ttb20ub3V0cHV0XS5kYXRhLCBtb20ubW9kZSk7CiAJCQkJfQogCQkJCWlmICghdmFsKSB7Ci0JCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbbW9tLm91dHB1dF0pLm1vZGUgIT0gbW9tLm1vZGUpIHsKLQkJCQkJCUFDQ0VTU19GQklORk8ob3V0cHV0c1ttb20ub3V0cHV0XSkubW9kZSA9IG1vbS5tb2RlOworCQkJCQlpZiAobWluZm8tPm91dHB1dHNbbW9tLm91dHB1dF0ubW9kZSAhPSBtb20ubW9kZSkgeworCQkJCQkJbWluZm8tPm91dHB1dHNbbW9tLm91dHB1dF0ubW9kZSA9IG1vbS5tb2RlOwogCQkJCQkJdmFsID0gMTsKIAkJCQkJfQogCQkJCX0KLQkJCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7CisJCQkJdXBfcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAkJCQlpZiAodmFsICE9IDEpCiAJCQkJCXJldHVybiB2YWw7Ci0JCQkJc3dpdGNoIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbbW9tLm91dHB1dF0pLnNyYykgeworCQkJCXN3aXRjaCAobWluZm8tPm91dHB1dHNbbW9tLm91dHB1dF0uc3JjKSB7CiAJCQkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMxOgogCQkJCQkJbWF0cm94ZmJfc2V0X3BhcihpbmZvKTsKIAkJCQkJCWJyZWFrOwpAQCAtOTQ2LDExICs5NTMsMTEgQEAKIAkJCQkJCXsKIAkJCQkJCQlzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbyogY3J0YzI7CiAKLQkJCQkJCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oY3J0YzIubG9jaykpOwotCQkJCQkJCWNydGMyID0gQUNDRVNTX0ZCSU5GTyhjcnRjMi5pbmZvKTsKKwkJCQkJCQlkb3duX3JlYWQoJm1pbmZvLT5jcnRjMi5sb2NrKTsKKwkJCQkJCQljcnRjMiA9IG1pbmZvLT5jcnRjMi5pbmZvOwogCQkJCQkJCWlmIChjcnRjMikKIAkJCQkJCQkJY3J0YzItPmZiY29uLmZib3BzLT5mYl9zZXRfcGFyKCZjcnRjMi0+ZmJjb24pOwotCQkJCQkJCXVwX3JlYWQoJkFDQ0VTU19GQklORk8oY3J0YzIubG9jaykpOworCQkJCQkJCXVwX3JlYWQoJm1pbmZvLT5jcnRjMi5sb2NrKTsKIAkJCQkJCX0KIAkJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTk2NiwxNSArOTczLDE1IEBACiAJCQkJCXJldHVybiAtRUZBVUxUOwogCQkJCWlmIChtb20ub3V0cHV0ID49IE1BVFJPWEZCX01BWF9PVVRQVVRTKQogCQkJCQlyZXR1cm4gLUVOWElPOwotCQkJCWRvd25fcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOwotCQkJCW9wcm9jID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW21vbS5vdXRwdXRdKS5vdXRwdXQ7CisJCQkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQkJCW9wcm9jID0gbWluZm8tPm91dHB1dHNbbW9tLm91dHB1dF0ub3V0cHV0OwogCQkJCWlmICghb3Byb2MpIHsKIAkJCQkJdmFsID0gLUVOWElPOwogCQkJCX0gZWxzZSB7Ci0JCQkJCW1vbS5tb2RlID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW21vbS5vdXRwdXRdKS5tb2RlOworCQkJCQltb20ubW9kZSA9IG1pbmZvLT5vdXRwdXRzW21vbS5vdXRwdXRdLm1vZGU7CiAJCQkJCXZhbCA9IDA7CiAJCQkJfQotCQkJCXVwX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0LmxvY2spKTsKKwkJCQl1cF9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQkJCWlmICh2YWwpCiAJCQkJCXJldHVybiB2YWw7CiAJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbW9tLCBzaXplb2YobW9tKSkpCkBAIC05OTMsOSArMTAwMCw5IEBACiAJCQkJCWlmICh0bXAgJiAoMSA8PCBpKSkgewogCQkJCQkJaWYgKGkgPj0gTUFUUk9YRkJfTUFYX09VVFBVVFMpCiAJCQkJCQkJcmV0dXJuIC1FTlhJTzsKLQkJCQkJCWlmICghQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5vdXRwdXQpCisJCQkJCQlpZiAoIW1pbmZvLT5vdXRwdXRzW2ldLm91dHB1dCkKIAkJCQkJCQlyZXR1cm4gLUVOWElPOwotCQkJCQkJc3dpdGNoIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLnNyYykgeworCQkJCQkJc3dpdGNoIChtaW5mby0+b3V0cHV0c1tpXS5zcmMpIHsKIAkJCQkJCQljYXNlIE1BVFJPWEZCX1NSQ19OT05FOgogCQkJCQkJCWNhc2UgTUFUUk9YRkJfU1JDX0NSVEMxOgogCQkJCQkJCQlicmVhazsKQEAgLTEwMDQsMTIgKzEwMTEsMTIgQEAKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5wYW5lbGxpbmspKSB7CisJCQkJaWYgKG1pbmZvLT5kZXZmbGFncy5wYW5lbGxpbmspIHsKIAkJCQkJaWYgKHRtcCAmIE1BVFJPWEZCX09VVFBVVF9DT05OX0RGUCkgewogCQkJCQkJaWYgKHRtcCAmIE1BVFJPWEZCX09VVFBVVF9DT05OX1NFQ09OREFSWSkKIAkJCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQkJCWZvciAoaSA9IDA7IGkgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgaSsrKSB7Ci0JCQkJCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tpXSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgeworCQkJCQkJCWlmIChtaW5mby0+b3V0cHV0c1tpXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CiAJCQkJCQkJCXJldHVybiAtRUJVU1k7CiAJCQkJCQkJfQogCQkJCQkJfQpAQCAtMTAxOCwxMyArMTAyNSwxMyBAQAogCQkJCWNoYW5nZXMgPSAwOwogCQkJCWZvciAoaSA9IDA7IGkgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgaSsrKSB7CiAJCQkJCWlmICh0bXAgJiAoMSA8PCBpKSkgewotCQkJCQkJaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tpXSkuc3JjICE9IE1BVFJPWEZCX1NSQ19DUlRDMSkgeworCQkJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW2ldLnNyYyAhPSBNQVRST1hGQl9TUkNfQ1JUQzEpIHsKIAkJCQkJCQljaGFuZ2VzID0gMTsKLQkJCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLnNyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMTsKKwkJCQkJCQltaW5mby0+b3V0cHV0c1tpXS5zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7CiAJCQkJCQl9Ci0JCQkJCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW2ldKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CisJCQkJCX0gZWxzZSBpZiAobWluZm8tPm91dHB1dHNbaV0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgewogCQkJCQkJY2hhbmdlcyA9IDE7Ci0JCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOworCQkJCQkJbWluZm8tPm91dHB1dHNbaV0uc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7CiAJCQkJCX0KIAkJCQl9CiAJCQkJaWYgKCFjaGFuZ2VzKQpAQCAtMTAzOCw3ICsxMDQ1LDcgQEAKIAkJCQlpbnQgaTsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgaSsrKSB7Ci0JCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpIHsKKwkJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW2ldLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpIHsKIAkJCQkJCWNvbm4gfD0gMSA8PCBpOwogCQkJCQl9CiAJCQkJfQpAQCAtMTA1Miw4ICsxMDU5LDggQEAKIAkJCQlpbnQgaTsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgaSsrKSB7Ci0JCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLm91dHB1dCkgewotCQkJCQkJc3dpdGNoIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLnNyYykgeworCQkJCQlpZiAobWluZm8tPm91dHB1dHNbaV0ub3V0cHV0KSB7CisJCQkJCQlzd2l0Y2ggKG1pbmZvLT5vdXRwdXRzW2ldLnNyYykgewogCQkJCQkJCWNhc2UgTUFUUk9YRkJfU1JDX05PTkU6CiAJCQkJCQkJY2FzZSBNQVRST1hGQl9TUkNfQ1JUQzE6CiAJCQkJCQkJCWNvbm4gfD0gMSA8PCBpOwpAQCAtMTA2MSw3ICsxMDY4LDcgQEAKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5wYW5lbGxpbmspKSB7CisJCQkJaWYgKG1pbmZvLT5kZXZmbGFncy5wYW5lbGxpbmspIHsKIAkJCQkJaWYgKGNvbm4gJiBNQVRST1hGQl9PVVRQVVRfQ09OTl9ERlApCiAJCQkJCQljb25uICY9IH5NQVRST1hGQl9PVVRQVVRfQ09OTl9TRUNPTkRBUlk7CiAJCQkJCWlmIChjb25uICYgTUFUUk9YRkJfT1VUUFVUX0NPTk5fU0VDT05EQVJZKQpAQCAtMTA3Nyw3ICsxMDg0LDcgQEAKIAkJCQlpbnQgaTsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBNQVRST1hGQl9NQVhfT1VUUFVUUzsgaSsrKSB7Ci0JCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLm91dHB1dCkgeworCQkJCQlpZiAobWluZm8tPm91dHB1dHNbaV0ub3V0cHV0KSB7CiAJCQkJCQljb25uIHw9IDEgPDwgaTsKIAkJCQkJfQogCQkJCX0KQEAgLTEwOTIsNyArMTA5OSw3IEBACiAJCQkJbWVtc2V0KCZyLCAwLCBzaXplb2YocikpOwogCQkJCXN0cmNweShyLmRyaXZlciwgIm1hdHJveGZiIik7CiAJCQkJc3RyY3B5KHIuY2FyZCwgIk1hdHJveCIpOwotCQkJCXNwcmludGYoci5idXNfaW5mbywgIlBDSTolcyIsIHBjaV9uYW1lKEFDQ0VTU19GQklORk8ocGNpZGV2KSkpOworCQkJCXNwcmludGYoci5idXNfaW5mbywgIlBDSTolcyIsIHBjaV9uYW1lKG1pbmZvLT5wY2lkZXYpKTsKIAkJCQlyLnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigxLDAsMCk7CiAJCQkJci5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19PVVRQVVQ7CiAJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmciwgc2l6ZW9mKHIpKSkKQEAgLTExMDgsMTUgKzExMTUsMTUgQEAKIAkJCQlpZiAoY29weV9mcm9tX3VzZXIoJnFjdHJsLCBhcmdwLCBzaXplb2YocWN0cmwpKSkKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKLQkJCQlpZiAoIUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0KSB7CisJCQkJZG93bl9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOworCQkJCWlmICghbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0KSB7CiAJCQkJCWVyciA9IC1FTlhJTzsKLQkJCQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0LT5nZXRxdWVyeWN0cmwpIHsKLQkJCQkJZXJyID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQtPmdldHF1ZXJ5Y3RybChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLmRhdGEsICZxY3RybCk7CisJCQkJfSBlbHNlIGlmIChtaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQtPmdldHF1ZXJ5Y3RybCkgeworCQkJCQllcnIgPSBtaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQtPmdldHF1ZXJ5Y3RybChtaW5mby0+b3V0cHV0c1sxXS5kYXRhLCAmcWN0cmwpOwogCQkJCX0gZWxzZSB7CiAJCQkJCWVyciA9IC1FSU5WQUw7CiAJCQkJfQotCQkJCXVwX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKKwkJCQl1cF9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQkJCWlmIChlcnIgPj0gMCAmJgogCQkJCSAgICBjb3B5X3RvX3VzZXIoYXJncCwgJnFjdHJsLCBzaXplb2YocWN0cmwpKSkKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMTMwLDE1ICsxMTM3LDE1IEBACiAJCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmdwLCBzaXplb2YoY3RybCkpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJCWRvd25fcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOwotCQkJCWlmICghQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQpIHsKKwkJCQlkb3duX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CisJCQkJaWYgKCFtaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQpIHsKIAkJCQkJZXJyID0gLUVOWElPOwotCQkJCX0gZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQtPmdldGN0cmwpIHsKLQkJCQkJZXJyID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQtPmdldGN0cmwoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kYXRhLCAmY3RybCk7CisJCQkJfSBlbHNlIGlmIChtaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQtPmdldGN0cmwpIHsKKwkJCQkJZXJyID0gbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0LT5nZXRjdHJsKG1pbmZvLT5vdXRwdXRzWzFdLmRhdGEsICZjdHJsKTsKIAkJCQl9IGVsc2UgewogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCX0KLQkJCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7CisJCQkJdXBfcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAkJCQlpZiAoZXJyID49IDAgJiYKIAkJCQkgICAgY29weV90b191c2VyKGFyZ3AsICZjdHJsLCBzaXplb2YoY3RybCkpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExNTMsMTUgKzExNjAsMTUgQEAKIAkJCQlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZ3AsIHNpemVvZihjdHJsKSkpCiAJCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQkJZG93bl9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7Ci0JCQkJaWYgKCFBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dCkgeworCQkJCWRvd25fcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwkJCQlpZiAoIW1pbmZvLT5vdXRwdXRzWzFdLm91dHB1dCkgewogCQkJCQllcnIgPSAtRU5YSU87Ci0JCQkJfSBlbHNlIGlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dC0+c2V0Y3RybCkgewotCQkJCQllcnIgPSBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm91dHB1dC0+c2V0Y3RybChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLmRhdGEsICZjdHJsKTsKKwkJCQl9IGVsc2UgaWYgKG1pbmZvLT5vdXRwdXRzWzFdLm91dHB1dC0+c2V0Y3RybCkgeworCQkJCQllcnIgPSBtaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQtPnNldGN0cmwobWluZm8tPm91dHB1dHNbMV0uZGF0YSwgJmN0cmwpOwogCQkJCX0gZWxzZSB7CiAJCQkJCWVyciA9IC1FSU5WQUw7CiAJCQkJfQotCQkJCXVwX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKKwkJCQl1cF9yZWFkKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAJfQpAQCAtMTE3NSwxMSArMTE4MiwxMSBAQAogCWludCBzZXE7CiAJaW50IGNydGM7CiAJQ1JJVEZMQUdTCi0JTUlORk9fRlJPTV9JTkZPKGluZm8pOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBpbmZvMm1pbmZvKGluZm8pOwogCiAJREJHKF9fZnVuY19fKQogCi0JaWYgKEFDQ0VTU19GQklORk8oZGVhZCkpCisJaWYgKG1pbmZvLT5kZWFkKQogCQlyZXR1cm4gMTsKIAogCXN3aXRjaCAoYmxhbmspIHsKQEAgLTEyODEsNyArMTI4OCw5IEBACiBzdGF0aWMgY2hhciB2aWRlb21vZGVbNjRdOwkJLyogIm1hdHJveDptb2RlOnh4eHh4IiBvciAibWF0cm94Onh4eHh4IiAqLwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbWF0cm94ZmJfZ2V0bWVtb3J5KFdQTUlORk8gdW5zaWduZWQgaW50IG1heFNpemUsIHVuc2lnbmVkIGludCAqcmVhbFNpemUpeworc3RhdGljIGludCBtYXRyb3hmYl9nZXRtZW1vcnkoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBtYXhTaXplLCB1bnNpZ25lZCBpbnQgKnJlYWxTaXplKQorewogCXZhZGRyX3Qgdm07CiAJdW5zaWduZWQgaW50IG9mZnM7CiAJdW5zaWduZWQgaW50IG9mZnMyOwpAQCAtMTI5MSw3ICsxMzAwLDcgQEAKIAogCURCRyhfX2Z1bmNfXykKIAotCXZtID0gQUNDRVNTX0ZCSU5GTyh2aWRlby52YmFzZSk7CisJdm0gPSBtaW5mby0+dmlkZW8udmJhc2U7CiAJbWF4U2l6ZSAmPSB+MHgxRkZGRkY7CS8qIG11c3QgYmUgWCoyTUIgKHJlYWxseSBpdCBtdXN0IGJlIDIgb3IgWCo0TUIpICovCiAJLyogYXQgbGVhc3QgMk1CICovCiAJaWYgKG1heFNpemUgPCAweDAyMDAwMDApIHJldHVybiAwOwpAQCAtMTMyMyw3ICsxMzMyLDcgQEAKIAogCSpyZWFsU2l6ZSA9IG9mZnMgLSAweDEwMDAwMDsKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTQotCUFDQ0VTU19GQklORk8oaW50ZXJsZWF2ZSkgPSAhKCFpc01pbGxlbml1bShNSU5GTykgfHwgKChvZmZzIC0gMHgxMDAwMDApICYgMHgzRkZGRkYpKTsKKwltaW5mby0+aW50ZXJsZWF2ZSA9ICEoIWlzTWlsbGVuaXVtKG1pbmZvKSB8fCAoKG9mZnMgLSAweDEwMDAwMCkgJiAweDNGRkZGRikpOwogI2VuZGlmCiAJcmV0dXJuIDE7CiB9CkBAIC0xMzQ1LDEzICsxMzU0LDkgQEAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX0cKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fYm9hcmQgdmJHMTAwCQk9IHsweDA4MDAwMDAsIDB4MDgwMDAwMCwgRkJfQUNDRUxfTUFUUk9YX01HQUcxMDAsCSZtYXRyb3hfRzEwMH07CiBzdGF0aWMgc3RydWN0IHZpZGVvX2JvYXJkIHZiRzIwMAkJPSB7MHgxMDAwMDAwLCAweDEwMDAwMDAsIEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwLAkmbWF0cm94X0cxMDB9OwotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfMzJNQgogLyogZnJvbSBkb2MgaXQgbG9va3MgbGlrZSB0aGF0IGFjY2VsZXJhdG9yIGNhbiBkcmF3IG9ubHkgdG8gbG93IDE2TUIgOi0oIERpcmVjdCBhY2Nlc3NlcyAmIGRpc3BsYXlpbmcgYXJlIE9LIGZvcgogICAgd2hvbGUgMzJNQiAqLwogc3RhdGljIHN0cnVjdCB2aWRlb19ib2FyZCB2Ykc0MDAJCT0gezB4MjAwMDAwMCwgMHgxMDAwMDAwLCBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCwJJm1hdHJveF9HMTAwfTsKLSNlbHNlCi1zdGF0aWMgc3RydWN0IHZpZGVvX2JvYXJkIHZiRzQwMAkJPSB7MHgyMDAwMDAwLCAweDEwMDAwMDAsIEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwLAkmbWF0cm94X0cxMDB9OwotI2VuZGlmCiAjZW5kaWYKIAogI2RlZmluZSBERVZGX1ZJREVPNjRCSVQJCTB4MDAwMQpAQCAtMTU1OCwxNiArMTU2MywxNyBAQAogCiBzdGF0aWMgaW50IGhvdHBsdWcgPSAwOwogCi1zdGF0aWMgdm9pZCBzZXREZWZhdWx0T3V0cHV0cyhXUE1JTkZPMikgeworc3RhdGljIHZvaWQgc2V0RGVmYXVsdE91dHB1dHMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25zdCBjaGFyKiBwdHI7CiAKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOwotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7CisJbWluZm8tPm91dHB1dHNbMF0uZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CisJCW1pbmZvLT5vdXRwdXRzWzFdLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOworCQltaW5mby0+b3V0cHV0c1syXS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMTsKIAl9IGVsc2UgaWYgKGRmcCkgewotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOworCQltaW5mby0+b3V0cHV0c1syXS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMTsKIAl9CiAJcHRyID0gb3V0cHV0czsKIAlmb3IgKGkgPSAwOyBpIDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IGkrKykgewpAQCAtMTU3NywxMSArMTU4MywxMSBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGMgPT0gJzAnKSB7Ci0JCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7CisJCQltaW5mby0+b3V0cHV0c1tpXS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19OT05FOwogCQl9IGVsc2UgaWYgKGMgPT0gJzEnKSB7Ci0JCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMxOwotCQl9IGVsc2UgaWYgKGMgPT0gJzInICYmIEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuY3J0YzIpKSB7Ci0JCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbaV0pLmRlZmF1bHRfc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMyOworCQkJbWluZm8tPm91dHB1dHNbaV0uZGVmYXVsdF9zcmMgPSBNQVRST1hGQl9TUkNfQ1JUQzE7CisJCX0gZWxzZSBpZiAoYyA9PSAnMicgJiYgbWluZm8tPmRldmZsYWdzLmNydGMyKSB7CisJCQltaW5mby0+b3V0cHV0c1tpXS5kZWZhdWx0X3NyYyA9IE1BVFJPWEZCX1NSQ19DUlRDMjsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmI6IFVua25vd24gb3V0cHV0cyBzZXR0aW5nXG4iKTsKIAkJCWJyZWFrOwpAQCAtMTU5MSw3ICsxNTk3LDggQEAKIAlvdXRwdXRzWzBdID0gMDsKIH0KIAotc3RhdGljIGludCBpbml0TWF0cm94MihXUE1JTkZPIHN0cnVjdCBib2FyZCogYil7CitzdGF0aWMgaW50IGluaXRNYXRyb3gyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHN0cnVjdCBib2FyZCAqYikKK3sKIAl1bnNpZ25lZCBsb25nIGN0cmxwdHJfcGh5cyA9IDA7CiAJdW5zaWduZWQgbG9uZyB2aWRlb19iYXNlX3BoeXMgPSAwOwogCXVuc2lnbmVkIGludCBtZW1zaXplOwpAQCAtMTYwNyw1OCArMTYxNCw1NiBAQAogCS8qIHNldCBkZWZhdWx0IHZhbHVlcy4uLiAqLwogCXZlc2FmYl9kZWZpbmVkLmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7CiAKLQlBQ0NFU1NfRkJJTkZPKGh3X3N3aXRjaCkgPSBiLT5iYXNlLT5sb3dsZXZlbDsKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmFjY2VsZXJhdG9yKSA9IGItPmJhc2UtPmFjY2VsSUQ7Ci0JQUNDRVNTX0ZCSU5GTyhtYXhfcGl4ZWxfY2xvY2spID0gYi0+bWF4Y2xrOworCW1pbmZvLT5od19zd2l0Y2ggPSBiLT5iYXNlLT5sb3dsZXZlbDsKKwltaW5mby0+ZGV2ZmxhZ3MuYWNjZWxlcmF0b3IgPSBiLT5iYXNlLT5hY2NlbElEOworCW1pbmZvLT5tYXhfcGl4ZWxfY2xvY2sgPSBiLT5tYXhjbGs7CiAKIAlwcmludGsoS0VSTl9JTkZPICJtYXRyb3hmYjogTWF0cm94ICVzIGRldGVjdGVkXG4iLCBiLT5uYW1lKTsKLQlBQ0NFU1NfRkJJTkZPKGNhcGFibGUucGxud3QpID0gMTsKLQlBQ0NFU1NfRkJJTkZPKGNoaXApID0gYi0+Y2hpcDsKLQlBQ0NFU1NfRkJJTkZPKGNhcGFibGUuc3Jjb3JnKSA9IGItPmZsYWdzICYgREVWRl9TUkNPUkc7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy52aWRlbzY0Yml0cykgPSBiLT5mbGFncyAmIERFVkZfVklERU82NEJJVDsKKwltaW5mby0+Y2FwYWJsZS5wbG53dCA9IDE7CisJbWluZm8tPmNoaXAgPSBiLT5jaGlwOworCW1pbmZvLT5jYXBhYmxlLnNyY29yZyA9IGItPmZsYWdzICYgREVWRl9TUkNPUkc7CisJbWluZm8tPmRldmZsYWdzLnZpZGVvNjRiaXRzID0gYi0+ZmxhZ3MgJiBERVZGX1ZJREVPNjRCSVQ7CiAJaWYgKGItPmZsYWdzICYgREVWRl9URVhUNEIpIHsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy52Z2FzdGVwKSA9IDQ7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudGV4dG1vZGUpID0gNDsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy50ZXh0X3R5cGVfYXV4KSA9IEZCX0FVWF9URVhUX01HQV9TVEVQMTY7CisJCW1pbmZvLT5kZXZmbGFncy52Z2FzdGVwID0gNDsKKwkJbWluZm8tPmRldmZsYWdzLnRleHRtb2RlID0gNDsKKwkJbWluZm8tPmRldmZsYWdzLnRleHRfdHlwZV9hdXggPSBGQl9BVVhfVEVYVF9NR0FfU1RFUDE2OwogCX0gZWxzZSBpZiAoYi0+ZmxhZ3MgJiBERVZGX1RFWFQxNkIpIHsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy52Z2FzdGVwKSA9IDE2OwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnRleHRtb2RlKSA9IDE7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudGV4dF90eXBlX2F1eCkgPSBGQl9BVVhfVEVYVF9NR0FfU1RFUDE2OworCQltaW5mby0+ZGV2ZmxhZ3Mudmdhc3RlcCA9IDE2OworCQltaW5mby0+ZGV2ZmxhZ3MudGV4dG1vZGUgPSAxOworCQltaW5mby0+ZGV2ZmxhZ3MudGV4dF90eXBlX2F1eCA9IEZCX0FVWF9URVhUX01HQV9TVEVQMTY7CiAJfSBlbHNlIHsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy52Z2FzdGVwKSA9IDg7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MudGV4dG1vZGUpID0gMTsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy50ZXh0X3R5cGVfYXV4KSA9IEZCX0FVWF9URVhUX01HQV9TVEVQODsKKwkJbWluZm8tPmRldmZsYWdzLnZnYXN0ZXAgPSA4OworCQltaW5mby0+ZGV2ZmxhZ3MudGV4dG1vZGUgPSAxOworCQltaW5mby0+ZGV2ZmxhZ3MudGV4dF90eXBlX2F1eCA9IEZCX0FVWF9URVhUX01HQV9TVEVQODsKIAl9Ci0jaWZkZWYgQ09ORklHX0ZCX01BVFJPWF8zMk1CCi0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5zdXBwb3J0MzJNQikgPSAoYi0+ZmxhZ3MgJiBERVZGX1NVUFBPUlQzMk1CKSAhPSAwOwotI2VuZGlmCi0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5wcmVjaXNlX3dpZHRoKSA9ICEoYi0+ZmxhZ3MgJiBERVZGX0FOWV9WWFJFUyk7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5jcnRjMikgPSAoYi0+ZmxhZ3MgJiBERVZGX0NSVEMyKSAhPSAwOwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MubWF2ZW5fY2FwYWJsZSkgPSAoYi0+ZmxhZ3MgJiBERVZGX01BVkVOX0NBUEFCTEUpICE9IDA7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5kdWFsaGVhZCkgPSAoYi0+ZmxhZ3MgJiBERVZGX0RVQUxIRUFEKSAhPSAwOwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MuZGZwX3R5cGUpID0gZGZwX3R5cGU7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSA9IChiLT5mbGFncyAmIERFVkZfRzQ1MERBQykgIT0gMDsKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnRleHRzdGVwKSA9IEFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mudmdhc3RlcCkgKiBBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnRleHRtb2RlKTsKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnRleHR2cmFtKSA9IDY1NTM2IC8gQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy50ZXh0bW9kZSk7Ci0Jc2V0RGVmYXVsdE91dHB1dHMoUE1JTkZPMik7CisJbWluZm8tPmRldmZsYWdzLnN1cHBvcnQzMk1CID0gKGItPmZsYWdzICYgREVWRl9TVVBQT1JUMzJNQikgIT0gMDsKKwltaW5mby0+ZGV2ZmxhZ3MucHJlY2lzZV93aWR0aCA9ICEoYi0+ZmxhZ3MgJiBERVZGX0FOWV9WWFJFUyk7CisJbWluZm8tPmRldmZsYWdzLmNydGMyID0gKGItPmZsYWdzICYgREVWRl9DUlRDMikgIT0gMDsKKwltaW5mby0+ZGV2ZmxhZ3MubWF2ZW5fY2FwYWJsZSA9IChiLT5mbGFncyAmIERFVkZfTUFWRU5fQ0FQQUJMRSkgIT0gMDsKKwltaW5mby0+ZGV2ZmxhZ3MuZHVhbGhlYWQgPSAoYi0+ZmxhZ3MgJiBERVZGX0RVQUxIRUFEKSAhPSAwOworCW1pbmZvLT5kZXZmbGFncy5kZnBfdHlwZSA9IGRmcF90eXBlOworCW1pbmZvLT5kZXZmbGFncy5nNDUwZGFjID0gKGItPmZsYWdzICYgREVWRl9HNDUwREFDKSAhPSAwOworCW1pbmZvLT5kZXZmbGFncy50ZXh0c3RlcCA9IG1pbmZvLT5kZXZmbGFncy52Z2FzdGVwICogbWluZm8tPmRldmZsYWdzLnRleHRtb2RlOworCW1pbmZvLT5kZXZmbGFncy50ZXh0dnJhbSA9IDY1NTM2IC8gbWluZm8tPmRldmZsYWdzLnRleHRtb2RlOworCXNldERlZmF1bHRPdXRwdXRzKG1pbmZvKTsKIAlpZiAoYi0+ZmxhZ3MgJiBERVZGX1BBTkVMTElOS19DQVBBQkxFKSB7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuZGF0YSA9IE1JTkZPOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLm91dHB1dCA9ICZwYW5lbGxpbmtfb3V0cHV0OwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLnNyYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuZGVmYXVsdF9zcmM7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MucGFuZWxsaW5rKSA9IDE7CisJCW1pbmZvLT5vdXRwdXRzWzJdLmRhdGEgPSBtaW5mbzsKKwkJbWluZm8tPm91dHB1dHNbMl0ub3V0cHV0ID0gJnBhbmVsbGlua19vdXRwdXQ7CisJCW1pbmZvLT5vdXRwdXRzWzJdLnNyYyA9IG1pbmZvLT5vdXRwdXRzWzJdLmRlZmF1bHRfc3JjOworCQltaW5mby0+b3V0cHV0c1syXS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwkJbWluZm8tPmRldmZsYWdzLnBhbmVsbGluayA9IDE7CiAJfQogCi0JaWYgKEFDQ0VTU19GQklORk8oY2FwYWJsZS5jcm9zczRNQikgPCAwKQotCQlBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY3Jvc3M0TUIpID0gYi0+ZmxhZ3MgJiBERVZGX0NST1NTNE1COworCWlmIChtaW5mby0+Y2FwYWJsZS5jcm9zczRNQiA8IDApCisJCW1pbmZvLT5jYXBhYmxlLmNyb3NzNE1CID0gYi0+ZmxhZ3MgJiBERVZGX0NST1NTNE1COwogCWlmIChiLT5mbGFncyAmIERFVkZfU1dBUFMpIHsKLQkJY3RybHB0cl9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KEFDQ0VTU19GQklORk8ocGNpZGV2KSwgMSk7Ci0JCXZpZGVvX2Jhc2VfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIDApOwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmZiUmVzb3VyY2UpID0gUENJX0JBU0VfQUREUkVTU18wOworCQljdHJscHRyX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQobWluZm8tPnBjaWRldiwgMSk7CisJCXZpZGVvX2Jhc2VfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChtaW5mby0+cGNpZGV2LCAwKTsKKwkJbWluZm8tPmRldmZsYWdzLmZiUmVzb3VyY2UgPSBQQ0lfQkFTRV9BRERSRVNTXzA7CiAJfSBlbHNlIHsKLQkJY3RybHB0cl9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KEFDQ0VTU19GQklORk8ocGNpZGV2KSwgMCk7Ci0JCXZpZGVvX2Jhc2VfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIDEpOwotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmZiUmVzb3VyY2UpID0gUENJX0JBU0VfQUREUkVTU18xOworCQljdHJscHRyX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQobWluZm8tPnBjaWRldiwgMCk7CisJCXZpZGVvX2Jhc2VfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChtaW5mby0+cGNpZGV2LCAxKTsKKwkJbWluZm8tPmRldmZsYWdzLmZiUmVzb3VyY2UgPSBQQ0lfQkFTRV9BRERSRVNTXzE7CiAJfQogCWVyciA9IC1FSU5WQUw7CiAJaWYgKCFjdHJscHRyX3BoeXMpIHsKQEAgLTE2NzYsNyArMTY4MSw3IEBACiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24odmlkZW9fYmFzZV9waHlzLCBtZW1zaXplLCAibWF0cm94ZmIgRkIiKSkgewogCQlnb3RvIGZhaWxDdHJsTVI7CiAJfQotCUFDQ0VTU19GQklORk8odmlkZW8ubGVuX21heGltdW0pID0gbWVtc2l6ZTsKKwltaW5mby0+dmlkZW8ubGVuX21heGltdW0gPSBtZW1zaXplOwogCS8qIGNvbnZlcnQgbWVtIChhdXRvZGV0ZWN0IGssIE0pICovCiAJaWYgKG1lbSA8IDEwMjQpIG1lbSAqPSAxMDI0OwogCWlmIChtZW0gPCAweDAwMTAwMDAwKSBtZW0gKj0gMTAyNDsKQEAgLTE2ODQsMTQgKzE2ODksMTQgQEAKIAlpZiAobWVtICYmIChtZW0gPCBtZW1zaXplKSkKIAkJbWVtc2l6ZSA9IG1lbTsKIAllcnIgPSAtRU5PTUVNOwotCWlmIChtZ2FfaW9yZW1hcChjdHJscHRyX3BoeXMsIDE2Mzg0LCBNR0FfSU9SRU1BUF9NTUlPLCAmQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKSkpIHsKKwlpZiAobWdhX2lvcmVtYXAoY3RybHB0cl9waHlzLCAxNjM4NCwgTUdBX0lPUkVNQVBfTU1JTywgJm1pbmZvLT5tbWlvLnZiYXNlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiOiBjYW5ub3QgaW9yZW1hcCglbFgsIDE2Mzg0KSwgbWF0cm94ZmIgZGlzYWJsZWRcbiIsIGN0cmxwdHJfcGh5cyk7CiAJCWdvdG8gZmFpbFZpZGVvTVI7CiAJfQotCUFDQ0VTU19GQklORk8obW1pby5iYXNlKSA9IGN0cmxwdHJfcGh5czsKLQlBQ0NFU1NfRkJJTkZPKG1taW8ubGVuKSA9IDE2Mzg0OwotCUFDQ0VTU19GQklORk8odmlkZW8uYmFzZSkgPSB2aWRlb19iYXNlX3BoeXM7Ci0JaWYgKG1nYV9pb3JlbWFwKHZpZGVvX2Jhc2VfcGh5cywgbWVtc2l6ZSwgTUdBX0lPUkVNQVBfRkIsICZBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSkpIHsKKwltaW5mby0+bW1pby5iYXNlID0gY3RybHB0cl9waHlzOworCW1pbmZvLT5tbWlvLmxlbiA9IDE2Mzg0OworCW1pbmZvLT52aWRlby5iYXNlID0gdmlkZW9fYmFzZV9waHlzOworCWlmIChtZ2FfaW9yZW1hcCh2aWRlb19iYXNlX3BoeXMsIG1lbXNpemUsIE1HQV9JT1JFTUFQX0ZCLCAmbWluZm8tPnZpZGVvLnZiYXNlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiOiBjYW5ub3QgaW9yZW1hcCglbFgsICVkKSwgbWF0cm94ZmIgZGlzYWJsZWRcbiIsCiAJCQl2aWRlb19iYXNlX3BoeXMsIG1lbXNpemUpOwogCQlnb3RvIGZhaWxDdHJsSU87CkBAIC0xNzAwLDYzICsxNzA1LDYzIEBACiAJCXVfaW50MzJfdCBjbWQ7CiAJCXVfaW50MzJfdCBtZ2Ffb3B0aW9uOwogCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9PUFRJT05fUkVHLCAmbWdhX29wdGlvbik7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChBQ0NFU1NfRkJJTkZPKHBjaWRldiksIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG1pbmZvLT5wY2lkZXYsIFBDSV9PUFRJT05fUkVHLCAmbWdhX29wdGlvbik7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJCW1nYV9vcHRpb24gJj0gMHg3RkZGRkZGRjsgLyogY2xlYXIgQklHX0VORElBTiAqLwogCQltZ2Ffb3B0aW9uIHw9IE1YX09QVElPTl9CU1dBUDsKIAkJLyogZGlzYWJsZSBwYWxldHRlIHNub29waW5nICovCiAJCWNtZCAmPSB+UENJX0NPTU1BTkRfVkdBX1BBTEVUVEU7CiAJCWlmIChwY2lfZGV2X3ByZXNlbnQoaW50ZWxfODI0MzcpKSB7Ci0JCQlpZiAoIShtZ2Ffb3B0aW9uICYgMHgyMDAwMDAwMCkgJiYgIUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9wY2lyZXRyeSkpIHsKKwkJCWlmICghKG1nYV9vcHRpb24gJiAweDIwMDAwMDAwKSAmJiAhbWluZm8tPmRldmZsYWdzLm5vcGNpcmV0cnkpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYXRyb3hmYjogRGlzYWJsaW5nIFBDSSByZXRyaWVzIGR1ZSB0byBpODI0MzcgcHJlc2VudFxuIik7CiAJCQl9CiAJCQltZ2Ffb3B0aW9uIHw9IDB4MjAwMDAwMDA7Ci0JCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vcGNpcmV0cnkpID0gMTsKKwkJCW1pbmZvLT5kZXZmbGFncy5ub3BjaXJldHJ5ID0gMTsKIAkJfQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEFDQ0VTU19GQklORk8ocGNpZGV2KSwgUENJX0NPTU1BTkQsIGNtZCk7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfT1BUSU9OX1JFRywgbWdhX29wdGlvbik7Ci0JCUFDQ0VTU19GQklORk8oaHcpLk1Yb3B0aW9uUmVnID0gbWdhX29wdGlvbjsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfT1BUSU9OX1JFRywgbWdhX29wdGlvbik7CisJCW1pbmZvLT5ody5NWG9wdGlvblJlZyA9IG1nYV9vcHRpb247CiAKIAkJLyogc2VsZWN0IG5vbi1ETUEgbWVtb3J5IGZvciBQQ0lfTUdBX0RBVEEsIG90aGVyd2lzZSBkdW1wIG9mIFBDSSBjZmcgc3BhY2UgY2FuIGxvY2sgUENJIGJ1cyAqLwogCQkvKiBtYXliZSBwcmVpbml0KCkgY2FuZGlkYXRlLCBidXQgaXQgaXMgc2FtZS4uLiBmb3IgYWxsIGRldmljZXMuLi4gYXQgdGhpcyB0aW1lLi4uICovCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLCBQQ0lfTUdBX0lOREVYLCAweDAwMDAzQzAwKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtaW5mby0+cGNpZGV2LCBQQ0lfTUdBX0lOREVYLCAweDAwMDAzQzAwKTsKIAl9CiAKIAllcnIgPSAtRU5YSU87Ci0JbWF0cm94ZmJfcmVhZF9waW5zKFBNSU5GTzIpOwotCWlmIChBQ0NFU1NfRkJJTkZPKGh3X3N3aXRjaCktPnByZWluaXQoUE1JTkZPMikpIHsKKwltYXRyb3hmYl9yZWFkX3BpbnMobWluZm8pOworCWlmIChtaW5mby0+aHdfc3dpdGNoLT5wcmVpbml0KG1pbmZvKSkgewogCQlnb3RvIGZhaWxWaWRlb0lPOwogCX0KIAogCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFtYXRyb3hmYl9nZXRtZW1vcnkoUE1JTkZPIG1lbXNpemUsICZBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbikpIHx8ICFBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbikpIHsKKwlpZiAoIW1hdHJveGZiX2dldG1lbW9yeShtaW5mbywgbWVtc2l6ZSwgJm1pbmZvLT52aWRlby5sZW4pIHx8ICFtaW5mby0+dmlkZW8ubGVuKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmI6IGNhbm5vdCBkZXRlcm1pbmUgbWVtb3J5IHNpemVcbiIpOwogCQlnb3RvIGZhaWxWaWRlb0lPOwogCX0KLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnlkc3RvcmcpID0gMDsKKwltaW5mby0+ZGV2ZmxhZ3MueWRzdG9yZyA9IDA7CiAKLQlBQ0NFU1NfRkJJTkZPKHZpZGVvLmJhc2UpID0gdmlkZW9fYmFzZV9waHlzOwotCUFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSkgPSBBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbik7Ci0JaWYgKEFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSkgPiBiLT5iYXNlLT5tYXhkaXNwbGF5YWJsZSkKLQkJQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW5fdXNhYmxlKSA9IGItPmJhc2UtPm1heGRpc3BsYXlhYmxlOworCW1pbmZvLT52aWRlby5iYXNlID0gdmlkZW9fYmFzZV9waHlzOworCW1pbmZvLT52aWRlby5sZW5fdXNhYmxlID0gbWluZm8tPnZpZGVvLmxlbjsKKwlpZiAobWluZm8tPnZpZGVvLmxlbl91c2FibGUgPiBiLT5iYXNlLT5tYXhkaXNwbGF5YWJsZSkKKwkJbWluZm8tPnZpZGVvLmxlbl91c2FibGUgPSBiLT5iYXNlLT5tYXhkaXNwbGF5YWJsZTsKICNpZmRlZiBDT05GSUdfTVRSUgogCWlmIChtdHJyKSB7Ci0JCUFDQ0VTU19GQklORk8obXRyci52cmFtKSA9IG10cnJfYWRkKHZpZGVvX2Jhc2VfcGh5cywgQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pLCBNVFJSX1RZUEVfV1JDT01CLCAxKTsKLQkJQUNDRVNTX0ZCSU5GTyhtdHJyLnZyYW1fdmFsaWQpID0gMTsKKwkJbWluZm8tPm10cnIudnJhbSA9IG10cnJfYWRkKHZpZGVvX2Jhc2VfcGh5cywgbWluZm8tPnZpZGVvLmxlbiwgTVRSUl9UWVBFX1dSQ09NQiwgMSk7CisJCW1pbmZvLT5tdHJyLnZyYW1fdmFsaWQgPSAxOwogCQlwcmludGsoS0VSTl9JTkZPICJtYXRyb3hmYjogTVRSUidzIHR1cm5lZCBvblxuIik7CiAJfQogI2VuZGlmCS8qIENPTkZJR19NVFJSICovCiAKLQlpZiAoIUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm92Z2EpKQorCWlmICghbWluZm8tPmRldmZsYWdzLm5vdmdhKQogCQlyZXF1ZXN0X3JlZ2lvbigweDNDMCwgMzIsICJtYXRyb3giKTsKLQltYXRyb3hmYl9nNDUwX2Nvbm5lY3QoUE1JTkZPMik7Ci0JQUNDRVNTX0ZCSU5GTyhod19zd2l0Y2gtPnJlc2V0KFBNSU5GTzIpKTsKKwltYXRyb3hmYl9nNDUwX2Nvbm5lY3QobWluZm8pOworCW1pbmZvLT5od19zd2l0Y2gtPnJlc2V0KG1pbmZvKTsKIAotCUFDQ0VTU19GQklORk8oZmJjb24ubW9uc3BlY3MuaGZtaW4pID0gMDsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLm1vbnNwZWNzLmhmbWF4KSA9IGZoOwotCUFDQ0VTU19GQklORk8oZmJjb24ubW9uc3BlY3MudmZtaW4pID0gMDsKLQlBQ0NFU1NfRkJJTkZPKGZiY29uLm1vbnNwZWNzLnZmbWF4KSA9IGZ2OwotCUFDQ0VTU19GQklORk8oZmJjb24ubW9uc3BlY3MuZHBtcykgPSAwOwkvKiBUQkQgKi8KKwltaW5mby0+ZmJjb24ubW9uc3BlY3MuaGZtaW4gPSAwOworCW1pbmZvLT5mYmNvbi5tb25zcGVjcy5oZm1heCA9IGZoOworCW1pbmZvLT5mYmNvbi5tb25zcGVjcy52Zm1pbiA9IDA7CisJbWluZm8tPmZiY29uLm1vbnNwZWNzLnZmbWF4ID0gZnY7CisJbWluZm8tPmZiY29uLm1vbnNwZWNzLmRwbXMgPSAwOwkvKiBUQkQgKi8KIAogCS8qIHN0YXRpYyBzZXR0aW5ncyAqLwogCXZlc2FmYl9kZWZpbmVkLnJlZCA9IGNvbG9yc1tkZXB0aC0xXS5yZWQ7CkBAIC0xNzY4LDI0ICsxNzczLDI0IEBACiAJaWYgKG5vYWNjZWwpCiAJCXZlc2FmYl9kZWZpbmVkLmFjY2VsX2ZsYWdzICY9IH5GQl9BQ0NFTEZfVEVYVDsKIAotCUFDQ0VTU19GQklORk8oZmJvcHMpID0gbWF0cm94ZmJfb3BzOwotCUFDQ0VTU19GQklORk8oZmJjb24uZmJvcHMpID0gJkFDQ0VTU19GQklORk8oZmJvcHMpOwotCUFDQ0VTU19GQklORk8oZmJjb24ucHNldWRvX3BhbGV0dGUpID0gQUNDRVNTX0ZCSU5GTyhjbWFwKTsKKwltaW5mby0+ZmJvcHMgPSBtYXRyb3hmYl9vcHM7CisJbWluZm8tPmZiY29uLmZib3BzID0gJm1pbmZvLT5mYm9wczsKKwltaW5mby0+ZmJjb24ucHNldWRvX3BhbGV0dGUgPSBtaW5mby0+Y21hcDsKIAkvKiBhZnRlciBfX2luaXQgdGltZSB3ZSBhcmUgbGlrZSBtb2R1bGUuLi4gbm8gbG9nbyAqLwotCUFDQ0VTU19GQklORk8oZmJjb24uZmxhZ3MpID0gaG90cGx1ZyA/IEZCSU5GT19GTEFHX01PRFVMRSA6IEZCSU5GT19GTEFHX0RFRkFVTFQ7Ci0JQUNDRVNTX0ZCSU5GTyhmYmNvbi5mbGFncykgfD0gRkJJTkZPX1BBUlRJQUxfUEFOX09LIHwgCSAvKiBQcmVmZXIgcGFubmluZyBmb3Igc2Nyb2xsIHVuZGVyIE1DIHZpZXdlci9lZGl0ICovCisJbWluZm8tPmZiY29uLmZsYWdzID0gaG90cGx1ZyA/IEZCSU5GT19GTEFHX01PRFVMRSA6IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisJbWluZm8tPmZiY29uLmZsYWdzIHw9IEZCSU5GT19QQVJUSUFMX1BBTl9PSyB8IAkgLyogUHJlZmVyIHBhbm5pbmcgZm9yIHNjcm9sbCB1bmRlciBNQyB2aWV3ZXIvZWRpdCAqLwogCQkJCSAgICAgIEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwgIC8qIFdlIGhhdmUgaHctYXNzaXN0ZWQgYm1vdmUgKi8KIAkJCQkgICAgICBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCB8ICAvKiBBbmQgZmlsbHJlY3QgKi8KIAkJCQkgICAgICBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQgfCAvKiBBbmQgaW1hZ2VibGl0ICovCiAJCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfWFBBTiB8ICAgICAgLyogQW5kIHdlIHN1cHBvcnQgYm90aCBob3Jpem9udGFsICovCiAJCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfWVBBTjsgICAgICAgLyogQW5kIHZlcnRpY2FsIHBhbm5pbmcgKi8KLQlBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl91c2FibGUpICY9IFBBR0VfTUFTSzsKLQlmYl9hbGxvY19jbWFwKCZBQ0NFU1NfRkJJTkZPKGZiY29uLmNtYXApLCAyNTYsIDEpOworCW1pbmZvLT52aWRlby5sZW5fdXNhYmxlICY9IFBBR0VfTUFTSzsKKwlmYl9hbGxvY19jbWFwKCZtaW5mby0+ZmJjb24uY21hcCwgMjU2LCAxKTsKIAogI2lmbmRlZiBNT0RVTEUKIAkvKiBtb2RlIGRhdGFiYXNlIGlzIG1hcmtlZCBfX2luaXQhISEgKi8KIAlpZiAoIWhvdHBsdWcpIHsKLQkJZmJfZmluZF9tb2RlKCZ2ZXNhZmJfZGVmaW5lZCwgJkFDQ0VTU19GQklORk8oZmJjb24pLCB2aWRlb21vZGVbMF0/dmlkZW9tb2RlOk5VTEwsCisJCWZiX2ZpbmRfbW9kZSgmdmVzYWZiX2RlZmluZWQsICZtaW5mby0+ZmJjb24sIHZpZGVvbW9kZVswXSA/IHZpZGVvbW9kZSA6IE5VTEwsCiAJCQlOVUxMLCAwLCAmZGVmYXVsdG1vZGUsIHZlc2FmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsKTsKIAl9CiAjZW5kaWYgLyogIU1PRFVMRSAqLwpAQCAtMTg3NCw1MiArMTg3OSw1MiBAQAogCQl2ZXNhZmJfZGVmaW5lZC55cmVzX3ZpcnR1YWwgPSA2NTUzNjsgLyogbGFyZ2UgZW5vdWdoIHRvIGJlIElORiwgYnV0IHNtYWxsIGVub3VnaAogCQkJCQkJCXRvIHlyZXNfdmlydHVhbCAqIHhyZXNfdmlydHVhbCA8IDJeMzIgKi8KIAl9Ci0JbWF0cm94ZmJfaW5pdF9maXgoUE1JTkZPMik7Ci0JQUNDRVNTX0ZCSU5GTyhmYmNvbi5zY3JlZW5fYmFzZSkgPSB2YWRkcl92YShBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSk7CisJbWF0cm94ZmJfaW5pdF9maXgobWluZm8pOworCW1pbmZvLT5mYmNvbi5zY3JlZW5fYmFzZSA9IHZhZGRyX3ZhKG1pbmZvLT52aWRlby52YmFzZSk7CiAJLyogTm9ybWFsaXplIHZhbHVlcyAobmFtZWx5IHlyZXNfdmlydHVhbCkgKi8KLQltYXRyb3hmYl9jaGVja192YXIoJnZlc2FmYl9kZWZpbmVkLCAmQUNDRVNTX0ZCSU5GTyhmYmNvbikpOworCW1hdHJveGZiX2NoZWNrX3ZhcigmdmVzYWZiX2RlZmluZWQsICZtaW5mby0+ZmJjb24pOwogCS8qIEFuZCBwdXQgaXQgaW50byAiY3VycmVudCIgdmFyLiBEbyBOT1QgcHJvZ3JhbSBoYXJkd2FyZSB5ZXQsIG9yIHdlJ2xsIG5vdCB0YWtlIG92ZXIKIAkgKiB2Z2Fjb24gY29ycmVjdGx5LiBmYmNvbl9zdGFydHVwIHdpbGwgY2FsbCBmYl9zZXRfcGFyIGZvciB1cywgV0lUSE9VVCBjaGVja192YXIsCiAJICogYW5kIHVuZm9ydHVuYXRlbHkgaXQgd2lsbCBkbyBpdCBCRUZPUkUgdmdhY29uIGNvbnRlbnRzIGlzIHNhdmVkLCBzbyBpdCB3b24ndCB3b3JrCiAJICogYW55d2F5LiBCdXQgd2UgYXQgbGVhc3QgdHJpZWQuLi4gKi8KLQlBQ0NFU1NfRkJJTkZPKGZiY29uLnZhcikgPSB2ZXNhZmJfZGVmaW5lZDsKKwltaW5mby0+ZmJjb24udmFyID0gdmVzYWZiX2RlZmluZWQ7CiAJZXJyID0gLUVJTlZBTDsKIAogCXByaW50ayhLRVJOX0lORk8gIm1hdHJveGZiOiAlZHglZHglZGJwcCAodmlydHVhbDogJWR4JWQpXG4iLAogCQl2ZXNhZmJfZGVmaW5lZC54cmVzLCB2ZXNhZmJfZGVmaW5lZC55cmVzLCB2ZXNhZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCwKIAkJdmVzYWZiX2RlZmluZWQueHJlc192aXJ0dWFsLCB2ZXNhZmJfZGVmaW5lZC55cmVzX3ZpcnR1YWwpOwogCXByaW50ayhLRVJOX0lORk8gIm1hdHJveGZiOiBmcmFtZWJ1ZmZlciBhdCAweCVsWCwgbWFwcGVkIHRvIDB4JXAsIHNpemUgJWRcbiIsCi0JCUFDQ0VTU19GQklORk8odmlkZW8uYmFzZSksIHZhZGRyX3ZhKEFDQ0VTU19GQklORk8odmlkZW8udmJhc2UpKSwgQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pKTsKKwkJbWluZm8tPnZpZGVvLmJhc2UsIHZhZGRyX3ZhKG1pbmZvLT52aWRlby52YmFzZSksIG1pbmZvLT52aWRlby5sZW4pOwogCiAvKiBXZSBkbyBub3QgaGF2ZSB0byBzZXQgY3VycmNvbiB0byAwLi4uIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyIGRvIGl0IGZvciB1cyBvbiBmaXJzdCBjb25zb2xlCiAgKiBhbmQgd2UgZG8gbm90IHdhbnQgY3VycmNvbiA9PSAwIGZvciBzdWJzZXF1ZW50IGZyYW1lYnVmZmVycyAqLwogCi0JQUNDRVNTX0ZCSU5GTyhmYmNvbikuZGV2aWNlID0gJkFDQ0VTU19GQklORk8ocGNpZGV2KS0+ZGV2OwotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmQUNDRVNTX0ZCSU5GTyhmYmNvbikpIDwgMCkgeworCW1pbmZvLT5mYmNvbi5kZXZpY2UgPSAmbWluZm8tPnBjaWRldi0+ZGV2OworCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmbWluZm8tPmZiY29uKSA8IDApIHsKIAkJZ290byBmYWlsVmlkZW9JTzsKIAl9CiAJcHJpbnRrKCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAotCSAgICAgICBBQ0NFU1NfRkJJTkZPKGZiY29uLm5vZGUpLCBBQ0NFU1NfRkJJTkZPKGZiY29uLmZpeC5pZCkpOworCSAgICAgICBtaW5mby0+ZmJjb24ubm9kZSwgbWluZm8tPmZiY29uLmZpeC5pZCk7CiAKIAkvKiB0aGVyZSBpcyBubyBjb25zb2xlIG9uIHRoaXMgZmIuLi4gYnV0IHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBoYXJkd2FyZQogCSAqIHVudGlsIHNvbWVvbmUgdGVsbHMgbWUgd2hhdCBpcyBwcm9wZXIgdGhpbmcgdG8gZG8gKi8KLQlpZiAoIUFDQ0VTU19GQklORk8oaW5pdGlhbGl6ZWQpKSB7CisJaWYgKCFtaW5mby0+aW5pdGlhbGl6ZWQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogaW5pdGlhbGl6aW5nIGhhcmR3YXJlXG4iLAotCQkgICAgICAgQUNDRVNTX0ZCSU5GTyhmYmNvbi5ub2RlKSk7CisJCSAgICAgICBtaW5mby0+ZmJjb24ubm9kZSk7CiAJCS8qIFdlIGhhdmUgdG8gdXNlIEZCX0FDVElWQVRFX0ZPUkNFLCBhcyB3ZSBoYWQgdG8gcHV0IHZlc2FmYl9kZWZpbmVkIHRvIHRoZSBmYmNvbi52YXIKIAkJICogYWxyZWFkeSBiZWZvcmUsIHNvIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyIHdvcmtzIGNvcnJlY3RseS4gKi8KIAkJdmVzYWZiX2RlZmluZWQuYWN0aXZhdGUgfD0gRkJfQUNUSVZBVEVfRk9SQ0U7Ci0JCWZiX3NldF92YXIoJkFDQ0VTU19GQklORk8oZmJjb24pLCAmdmVzYWZiX2RlZmluZWQpOworCQlmYl9zZXRfdmFyKCZtaW5mby0+ZmJjb24sICZ2ZXNhZmJfZGVmaW5lZCk7CiAJfQogCiAJcmV0dXJuIDA7CiBmYWlsVmlkZW9JTzo7Ci0JbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihQTUlORk8yKTsKLQltZ2FfaW91bm1hcChBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSk7CisJbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihtaW5mbyk7CisJbWdhX2lvdW5tYXAobWluZm8tPnZpZGVvLnZiYXNlKTsKIGZhaWxDdHJsSU86OwotCW1nYV9pb3VubWFwKEFDQ0VTU19GQklORk8obW1pby52YmFzZSkpOworCW1nYV9pb3VubWFwKG1pbmZvLT5tbWlvLnZiYXNlKTsKIGZhaWxWaWRlb01SOjsKLQlyZWxlYXNlX21lbV9yZWdpb24odmlkZW9fYmFzZV9waHlzLCBBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbl9tYXhpbXVtKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHZpZGVvX2Jhc2VfcGh5cywgbWluZm8tPnZpZGVvLmxlbl9tYXhpbXVtKTsKIGZhaWxDdHJsTVI6OwogCXJlbGVhc2VfbWVtX3JlZ2lvbihjdHJscHRyX3BoeXMsIDE2Mzg0KTsKIGZhaWw6OwpAQCAtMTk3NSw3ICsxOTgwLDcgQEAKIHN0YXRpYyB2b2lkIG1hdHJveGZiX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvKSB7CiAJc3RydWN0IG1hdHJveGZiX2RyaXZlciogZHJ2OwogCWludCBpID0gMDsKLQlsaXN0X2FkZCgmQUNDRVNTX0ZCSU5GTyhuZXh0X2ZiKSwgJm1hdHJveGZiX2xpc3QpOworCWxpc3RfYWRkKCZtaW5mby0+bmV4dF9mYiwgJm1hdHJveGZiX2xpc3QpOwogCWZvciAoZHJ2ID0gbWF0cm94ZmJfZHJpdmVyX2wobWF0cm94ZmJfZHJpdmVyX2xpc3QubmV4dCk7CiAJICAgICBkcnYgIT0gbWF0cm94ZmJfZHJpdmVyX2woJm1hdHJveGZiX2RyaXZlcl9saXN0KTsKIAkgICAgIGRydiA9IG1hdHJveGZiX2RyaXZlcl9sKGRydi0+bm9kZS5uZXh0KSkgewpAQCAtMTk5NSw3ICsyMDAwLDcgQEAKIHN0YXRpYyB2b2lkIG1hdHJveGZiX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyogbWluZm8pIHsKIAlpbnQgaTsKIAotCWxpc3RfZGVsKCZBQ0NFU1NfRkJJTkZPKG5leHRfZmIpKTsKKwlsaXN0X2RlbCgmbWluZm8tPm5leHRfZmIpOwogCWZvciAoaSA9IDA7IGkgPCBtaW5mby0+ZHJpdmVyc19jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBtYXRyb3hmYl9kcml2ZXIqIGRydiA9IG1pbmZvLT5kcml2ZXJzW2ldOwogCkBAIC0yMDExLDkgKzIwMTYsNiBAQAogCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyogbWluZm87CiAJaW50IGVycjsKIAl1X2ludDMyX3QgY21kOwotI2lmbmRlZiBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRAotCXN0YXRpYyBpbnQgcmVnaXN0ZXJlZCA9IDA7Ci0jZW5kaWYKIAlEQkcoX19mdW5jX18pCiAKIAlzdmlkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKQEAgLTIwMzcsNjggKzIwMzksNTcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFECiAJbWluZm8gPSBrbWFsbG9jKHNpemVvZigqbWluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1pbmZvKQogCQlyZXR1cm4gLTE7Ci0jZWxzZQotCWlmIChyZWdpc3RlcmVkKQkvKiBzaW5nbGVoZWFkIGRyaXZlci4uLiAqLwotCQlyZXR1cm4gLTE7Ci0JbWluZm8gPSAmbWF0cm94ZmJfZ2xvYmFsX214aW5mbzsKLSNlbmRpZgotCW1lbXNldChNSU5GTywgMCwgc2l6ZW9mKCpNSU5GTykpOworCW1lbXNldChtaW5mbywgMCwgc2l6ZW9mKCptaW5mbykpOwogCi0JQUNDRVNTX0ZCSU5GTyhwY2lkZXYpID0gcGRldjsKLQlBQ0NFU1NfRkJJTkZPKGRlYWQpID0gMDsKLQlBQ0NFU1NfRkJJTkZPKHVzZWNvdW50KSA9IDA7Ci0JQUNDRVNTX0ZCSU5GTyh1c2VydXNlY291bnQpID0gMDsKKwltaW5mby0+cGNpZGV2ID0gcGRldjsKKwltaW5mby0+ZGVhZCA9IDA7CisJbWluZm8tPnVzZWNvdW50ID0gMDsKKwltaW5mby0+dXNlcnVzZWNvdW50ID0gMDsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBNSU5GTyk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1pbmZvKTsKIAkvKiBERVZGTEFHUyAqLwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MubWVtdHlwZSkgPSBtZW10eXBlOworCW1pbmZvLT5kZXZmbGFncy5tZW10eXBlID0gbWVtdHlwZTsKIAlpZiAobWVtdHlwZSAhPSAtMSkKIAkJbm9pbml0ID0gMDsKIAlpZiAoY21kICYgUENJX0NPTU1BTkRfTUVNT1JZKSB7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm92Z2EpID0gbm92Z2E7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9iaW9zKSA9IG5vYmlvczsKLQkJQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5ub2luaXQpID0gbm9pbml0OworCQltaW5mby0+ZGV2ZmxhZ3Mubm92Z2EgPSBub3ZnYTsKKwkJbWluZm8tPmRldmZsYWdzLm5vYmlvcyA9IG5vYmlvczsKKwkJbWluZm8tPmRldmZsYWdzLm5vaW5pdCA9IG5vaW5pdDsKIAkJLyogc3Vic2VxdWVudCBoZWFkcyBhbHdheXMgbmVlZHMgaW5pdGlhbGl6YXRpb24gYW5kIG11c3Qgbm90IGVuYWJsZSBCSU9TICovCiAJCW5vdmdhID0gMTsKIAkJbm9iaW9zID0gMTsKIAkJbm9pbml0ID0gMDsKIAl9IGVsc2UgewotCQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vdmdhKSA9IDE7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9iaW9zKSA9IDE7Ci0JCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3Mubm9pbml0KSA9IDA7CisJCW1pbmZvLT5kZXZmbGFncy5ub3ZnYSA9IDE7CisJCW1pbmZvLT5kZXZmbGFncy5ub2Jpb3MgPSAxOworCQltaW5mby0+ZGV2ZmxhZ3Mubm9pbml0ID0gMDsKIAl9CiAKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLm5vcGNpcmV0cnkpID0gbm9fcGNpX3JldHJ5OwotCUFDQ0VTU19GQklORk8oZGV2ZmxhZ3MubWdhXzI0YnBwX2ZpeCkgPSBpbnYyNDsKLQlBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLnByZWNpc2Vfd2lkdGgpID0gb3B0aW9uX3ByZWNpc2Vfd2lkdGg7Ci0JQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5zZ3JhbSkgPSBzZ3JhbTsKLQlBQ0NFU1NfRkJJTkZPKGNhcGFibGUuY3Jvc3M0TUIpID0gY3Jvc3M0TUI7CisJbWluZm8tPmRldmZsYWdzLm5vcGNpcmV0cnkgPSBub19wY2lfcmV0cnk7CisJbWluZm8tPmRldmZsYWdzLm1nYV8yNGJwcF9maXggPSBpbnYyNDsKKwltaW5mby0+ZGV2ZmxhZ3MucHJlY2lzZV93aWR0aCA9IG9wdGlvbl9wcmVjaXNlX3dpZHRoOworCW1pbmZvLT5kZXZmbGFncy5zZ3JhbSA9IHNncmFtOworCW1pbmZvLT5jYXBhYmxlLmNyb3NzNE1CID0gY3Jvc3M0TUI7CiAKLQlzcGluX2xvY2tfaW5pdCgmQUNDRVNTX0ZCSU5GTyhsb2NrLkRBQykpOwotCXNwaW5fbG9ja19pbml0KCZBQ0NFU1NfRkJJTkZPKGxvY2suYWNjZWwpKTsKLQlpbml0X3J3c2VtKCZBQ0NFU1NfRkJJTkZPKGNydGMyLmxvY2spKTsKLQlpbml0X3J3c2VtKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7Ci0JbXV0ZXhfaW5pdCgmQUNDRVNTX0ZCSU5GTyhmYmNvbikubW1fbG9jayk7Ci0JQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpID0gMDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZBQ0NFU1NfRkJJTkZPKGNydGMxLnZzeW5jLndhaXQpKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZBQ0NFU1NfRkJJTkZPKGNydGMyLnZzeW5jLndhaXQpKTsKLQlBQ0NFU1NfRkJJTkZPKGNydGMxLnBhbnBvcykgPSAtMTsKKwlzcGluX2xvY2tfaW5pdCgmbWluZm8tPmxvY2suREFDKTsKKwlzcGluX2xvY2tfaW5pdCgmbWluZm8tPmxvY2suYWNjZWwpOworCWluaXRfcndzZW0oJm1pbmZvLT5jcnRjMi5sb2NrKTsKKwlpbml0X3J3c2VtKCZtaW5mby0+YWx0b3V0LmxvY2spOworCW11dGV4X2luaXQoJm1pbmZvLT5mYmNvbi5tbV9sb2NrKTsKKwltaW5mby0+aXJxX2ZsYWdzID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtaW5mby0+Y3J0YzEudnN5bmMud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWluZm8tPmNydGMyLnZzeW5jLndhaXQpOworCW1pbmZvLT5jcnRjMS5wYW5wb3MgPSAtMTsKIAotCWVyciA9IGluaXRNYXRyb3gyKFBNSU5GTyBiKTsKKwllcnIgPSBpbml0TWF0cm94MihtaW5mbywgYik7CiAJaWYgKCFlcnIpIHsKLSNpZm5kZWYgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQKLQkJcmVnaXN0ZXJlZCA9IDE7Ci0jZW5kaWYKLQkJbWF0cm94ZmJfcmVnaXN0ZXJfZGV2aWNlKE1JTkZPKTsKKwkJbWF0cm94ZmJfcmVnaXN0ZXJfZGV2aWNlKG1pbmZvKTsKIAkJcmV0dXJuIDA7CiAJfQotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFECiAJa2ZyZWUobWluZm8pOwotI2VuZGlmCiAJcmV0dXJuIC0xOwogfQogCkBAIC0yMTA2LDcgKzIwOTcsNyBAQAogCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyogbWluZm87CiAKIAltaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQltYXRyb3hmYl9yZW1vdmUoUE1JTkZPIDEpOworCW1hdHJveGZiX3JlbW92ZShtaW5mbywgMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYXRyb3hmYl9kZXZpY2VzW10gPSB7CkBAIC0yNTEwLDEzICsyNTAxLDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoaW52MjQsICJJbnZlcnRzIGNsb2NrIHBvbGFyaXR5IGZvciAyNGJwcCBhbmQgbG9vcCBmcmVxdWVuY3kgPiAxMDBNSHogKGRlZmF1bHQ9ZG8gbm90IGludmVydCBwb2xhcml0eSkiKTsKIG1vZHVsZV9wYXJhbShpbnZlcnNlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbnZlcnNlLCAiSW52ZXJzZSAoMCBvciAxKSAoZGVmYXVsdD0wKSIpOwotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFECiBtb2R1bGVfcGFyYW0oZGV2LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZXYsICJNdWx0aWhlYWQgc3VwcG9ydCwgYXR0YWNoIHRvIGRldmljZSBJRCAoMC4uTikgKGRlZmF1bHQ9YWxsIHdvcmtpbmcpIik7Ci0jZWxzZQotbW9kdWxlX3BhcmFtKGRldiwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGV2LCAiTXVsdGloZWFkIHN1cHBvcnQsIGF0dGFjaCB0byBkZXZpY2UgSUQgKDAuLk4pIChkZWZhdWx0PWZpcnN0IHdvcmtpbmcpIik7Ci0jZW5kaWYKIG1vZHVsZV9wYXJhbSh2ZXNhLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh2ZXNhLCAiU3RhcnR1cCB2aWRlb21vZGUgKDB4MDAwLTB4MUZGKSAoZGVmYXVsdD0weDEwMSkiKTsKIG1vZHVsZV9wYXJhbSh4cmVzLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oCmluZGV4IDk1ODgzMjMuLmYzYTRlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmgKQEAgLTU0LDkgKzU0LDYgQEAKICNpbmNsdWRlICIuLi9tYWNtb2Rlcy5oIgogI2VuZGlmCiAKLS8qIGFsd2F5cyBjb21waWxlIHN1cHBvcnQgZm9yIDMyTUIuLi4gSXQgY29zdCBhbG1vc3Qgbm90aGluZyAqLwotI2RlZmluZSBDT05GSUdfRkJfTUFUUk9YXzMyTUIKLQogI2lmZGVmIE1BVFJPWEZCX0RFQlVHCiAKICNkZWZpbmUgREVCVUcKQEAgLTQ2NCw5ICs0NjEsNyBAQAogCQlpbnQJCW5vcGNpcmV0cnk7CiAJCWludAkJbm9pbml0OwogCQlpbnQJCXNncmFtOwotI2lmZGVmIENPTkZJR19GQl9NQVRST1hfMzJNQgogCQlpbnQJCXN1cHBvcnQzMk1COwotI2VuZGlmCiAKIAkJaW50CQlhY2NlbGVyYXRvcjsKIAkJaW50CQl0ZXh0X3R5cGVfYXV4OwpAQCAtNTI0LDQ3ICs1MTksMTEgQEAKIAogI2RlZmluZSBpbmZvMm1pbmZvKGluZm8pIGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8sIGZiY29uKQogCi0jaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQKLSNkZWZpbmUgQUNDRVNTX0ZCSU5GTzIoaW5mbywgeCkgKGluZm8tPngpCi0jZGVmaW5lIEFDQ0VTU19GQklORk8oeCkgQUNDRVNTX0ZCSU5GTzIobWluZm8seCkKLQotI2RlZmluZSBNSU5GTyBtaW5mbwotCi0jZGVmaW5lIFdQTUlORk8yIHN0cnVjdCBtYXRyb3hfZmJfaW5mbyogbWluZm8KLSNkZWZpbmUgV1BNSU5GTyAgV1BNSU5GTzIgLAotI2RlZmluZSBDUE1JTkZPMiBjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvCi0jZGVmaW5lIENQTUlORk8JIENQTUlORk8yICwKLSNkZWZpbmUgUE1JTkZPMiAgbWluZm8KLSNkZWZpbmUgUE1JTkZPICAgUE1JTkZPMiAsCi0KLSNkZWZpbmUgTUlORk9fRlJPTSh4KQkgICBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qIG1pbmZvID0geAotI2Vsc2UKLQotZXh0ZXJuIHN0cnVjdCBtYXRyb3hfZmJfaW5mbyBtYXRyb3hmYl9nbG9iYWxfbXhpbmZvOwotCi0jZGVmaW5lIEFDQ0VTU19GQklORk8oeCkgKG1hdHJveGZiX2dsb2JhbF9teGluZm8ueCkKLSNkZWZpbmUgQUNDRVNTX0ZCSU5GTzIoaW5mbywgeCkgKG1hdHJveGZiX2dsb2JhbF9teGluZm8ueCkKLQotI2RlZmluZSBNSU5GTyAoJm1hdHJveGZiX2dsb2JhbF9teGluZm8pCi0KLSNkZWZpbmUgV1BNSU5GTzIgdm9pZAotI2RlZmluZSBXUE1JTkZPCi0jZGVmaW5lIENQTUlORk8yIHZvaWQKLSNkZWZpbmUgQ1BNSU5GTwotI2RlZmluZSBQTUlORk8yCi0jZGVmaW5lIFBNSU5GTwotCi0jZGVmaW5lIE1JTkZPX0ZST00oeCkKLQotI2VuZGlmCi0KLSNkZWZpbmUgTUlORk9fRlJPTV9JTkZPKHgpIE1JTkZPX0ZST00oaW5mbzJtaW5mbyh4KSkKLQogc3RydWN0IG1hdHJveF9zd2l0Y2ggewotCWludAkoKnByZWluaXQpKFdQTUlORk8yKTsKLQl2b2lkCSgqcmVzZXQpKFdQTUlORk8yKTsKLQlpbnQJKCppbml0KShXUE1JTkZPIHN0cnVjdCBteV90aW1taW5nKik7Ci0Jdm9pZAkoKnJlc3RvcmUpKFdQTUlORk8yKTsKKwlpbnQJKCpwcmVpbml0KShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKKwl2b2lkCSgqcmVzZXQpKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pOworCWludAkoKmluaXQpKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHN0cnVjdCBteV90aW1taW5nKik7CisJdm9pZAkoKnJlc3RvcmUpKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pOwogfTsKIAogc3RydWN0IG1hdHJveGZiX2RyaXZlciB7CkBAIC03MjcsMTEgKzY4NiwxMSBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBtZ2FfaW5iKGFkZHIpCQltZ2FfcmVhZGIoQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKSwgKGFkZHIpKQotI2RlZmluZSBtZ2FfaW5sKGFkZHIpCQltZ2FfcmVhZGwoQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKSwgKGFkZHIpKQotI2RlZmluZSBtZ2Ffb3V0YihhZGRyLHZhbCkJbWdhX3dyaXRlYihBQ0NFU1NfRkJJTkZPKG1taW8udmJhc2UpLCAoYWRkciksICh2YWwpKQotI2RlZmluZSBtZ2Ffb3V0dyhhZGRyLHZhbCkJbWdhX3dyaXRldyhBQ0NFU1NfRkJJTkZPKG1taW8udmJhc2UpLCAoYWRkciksICh2YWwpKQotI2RlZmluZSBtZ2Ffb3V0bChhZGRyLHZhbCkJbWdhX3dyaXRlbChBQ0NFU1NfRkJJTkZPKG1taW8udmJhc2UpLCAoYWRkciksICh2YWwpKQorI2RlZmluZSBtZ2FfaW5iKGFkZHIpCQltZ2FfcmVhZGIobWluZm8tPm1taW8udmJhc2UsIChhZGRyKSkKKyNkZWZpbmUgbWdhX2lubChhZGRyKQkJbWdhX3JlYWRsKG1pbmZvLT5tbWlvLnZiYXNlLCAoYWRkcikpCisjZGVmaW5lIG1nYV9vdXRiKGFkZHIsdmFsKQltZ2Ffd3JpdGViKG1pbmZvLT5tbWlvLnZiYXNlLCAoYWRkciksICh2YWwpKQorI2RlZmluZSBtZ2Ffb3V0dyhhZGRyLHZhbCkJbWdhX3dyaXRldyhtaW5mby0+bW1pby52YmFzZSwgKGFkZHIpLCAodmFsKSkKKyNkZWZpbmUgbWdhX291dGwoYWRkcix2YWwpCW1nYV93cml0ZWwobWluZm8tPm1taW8udmJhc2UsIChhZGRyKSwgKHZhbCkpCiAjZGVmaW5lIG1nYV9yZWFkcihwb3J0LGlkeCkJKG1nYV9vdXRiKChwb3J0KSwoaWR4KSksIG1nYV9pbmIoKHBvcnQpKzEpKQogI2RlZmluZSBtZ2Ffc2V0cihhZGRyLHBvcnQsdmFsKQltZ2Ffb3V0dyhhZGRyLCAoKHZhbCk8PDgpIHwgKHBvcnQpKQogCkBAIC03NTAsMTkgKzcwOSwyMCBAQAogI2RlZmluZSBpc01pbGxlbml1bUlJKHgpICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgbWF0cm94ZmJfREFDX2xvY2soKSAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soJkFDQ0VTU19GQklORk8obG9jay5EQUMpKQotI2RlZmluZSBtYXRyb3hmYl9EQUNfdW5sb2NrKCkgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZBQ0NFU1NfRkJJTkZPKGxvY2suREFDKSkKLSNkZWZpbmUgbWF0cm94ZmJfREFDX2xvY2tfaXJxc2F2ZShmbGFncykgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmQUNDRVNTX0ZCSU5GTyhsb2NrLkRBQyksZmxhZ3MpCi0jZGVmaW5lIG1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncykgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmQUNDRVNTX0ZCSU5GTyhsb2NrLkRBQyksZmxhZ3MpCi1leHRlcm4gdm9pZCBtYXRyb3hmYl9EQUNfb3V0KENQTUlORk8gaW50IHJlZywgaW50IHZhbCk7Ci1leHRlcm4gaW50IG1hdHJveGZiX0RBQ19pbihDUE1JTkZPIGludCByZWcpOworI2RlZmluZSBtYXRyb3hmYl9EQUNfbG9jaygpICAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmbWluZm8tPmxvY2suREFDKQorI2RlZmluZSBtYXRyb3hmYl9EQUNfdW5sb2NrKCkgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZtaW5mby0+bG9jay5EQUMpCisjZGVmaW5lIG1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1pbmZvLT5sb2NrLkRBQywgZmxhZ3MpCisjZGVmaW5lIG1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncykgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWluZm8tPmxvY2suREFDLCBmbGFncykKK2V4dGVybiB2b2lkIG1hdHJveGZiX0RBQ19vdXQoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHJlZywKKwkJCSAgICAgaW50IHZhbCk7CitleHRlcm4gaW50IG1hdHJveGZiX0RBQ19pbihjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgcmVnKTsKIGV4dGVybiB2b2lkIG1hdHJveGZiX3ZhcjJteShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8qIGZ2c2ksIHN0cnVjdCBteV90aW1taW5nKiBtdCk7Ci1leHRlcm4gaW50IG1hdHJveGZiX3dhaXRfZm9yX3N5bmMoV1BNSU5GTyB1X2ludDMyX3QgY3J0Yyk7Ci1leHRlcm4gaW50IG1hdHJveGZiX2VuYWJsZV9pcnEoV1BNSU5GTyBpbnQgcmVlbmFibGUpOworZXh0ZXJuIGludCBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVfaW50MzJfdCBjcnRjKTsKK2V4dGVybiBpbnQgbWF0cm94ZmJfZW5hYmxlX2lycShzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgcmVlbmFibGUpOwogCiAjaWZkZWYgTUFUUk9YRkJfVVNFX1NQSU5MT0NLUwotI2RlZmluZSBDUklUQkVHSU4gIHNwaW5fbG9ja19pcnFzYXZlKCZBQ0NFU1NfRkJJTkZPKGxvY2suYWNjZWwpLCBjcml0ZmxhZ3MpOwotI2RlZmluZSBDUklURU5ECSAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkFDQ0VTU19GQklORk8obG9jay5hY2NlbCksIGNyaXRmbGFncyk7CisjZGVmaW5lIENSSVRCRUdJTiAgc3Bpbl9sb2NrX2lycXNhdmUoJm1pbmZvLT5sb2NrLmFjY2VsLCBjcml0ZmxhZ3MpOworI2RlZmluZSBDUklURU5ECSAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pbmZvLT5sb2NrLmFjY2VsLCBjcml0ZmxhZ3MpOwogI2RlZmluZSBDUklURkxBR1MgIHVuc2lnbmVkIGxvbmcgY3JpdGZsYWdzOwogI2Vsc2UKICNkZWZpbmUgQ1JJVEJFR0lOCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9jcnRjMi5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfY3J0YzIuYwppbmRleCBlYmNiNWM2Li43ODQxNGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9jcnRjMi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2NydGMyLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJdW5zaWduZWQgaW50IHBvcykgewogCXVfaW50MzJfdCB0bXA7CiAJdV9pbnQzMl90IGRhdGFjdGw7Ci0JTUlORk9fRlJPTShtMmluZm8tPnByaW1hcnlfZGV2KTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbTJpbmZvLT5wcmltYXJ5X2RldjsKIAogCXN3aXRjaCAobW9kZSkgewogCQljYXNlIDE1OgpAQCAtODEsMTEgKzgxLDExIEBACiAJfQogCXRtcCB8PSAweDAwMDAwMDAxOwkvKiBlbmFibGUgQ1JUQzIgKi8KIAlkYXRhY3RsID0gMDsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7Ci0JCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7CisJaWYgKG1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKKwkJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CiAJCQl0bXAgfD0gMHgwMDAwMDAwNjsgLyogc291cmNlIGZyb20gc2Vjb25kYXJ5IHBpeGVsIFBMTCAqLwogCQkJLyogbm8gdmlkcnN0IHdoZW4gaW4gbW9uaXRvciBtb2RlICovCi0JCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlICE9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKKwkJCWlmIChtaW5mby0+b3V0cHV0c1sxXS5tb2RlICE9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKIAkJCQl0bXAgfD0gIDB4QzAwMDEwMDA7IC8qIEVuYWJsZSBIL1YgdmlkcnN0ICovCiAJCQl9CiAJCX0gZWxzZSB7CkBAIC05MywxMSArOTMsMTEgQEAKIAkJCXRtcCB8PSAweEMwMDAwMDAwOyAvKiBlbmFibGUgdnZpZHJzdCAmIGh2aWRyc3QgKi8KIAkJCS8qIE1HQSBUVk8gaXMgb3VyIGNsb2NrIHNvdXJjZSAqLwogCQl9Ci0JfSBlbHNlIGlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKKwl9IGVsc2UgaWYgKG1pbmZvLT5vdXRwdXRzWzBdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKIAkJdG1wIHw9IDB4MDAwMDAwMDQ7IC8qIHNvdXJjZSBmcm9tIHBpeGNsb2NrICovCiAJCS8qIFBJWFBMTCBpcyBvdXIgY2xvY2sgc291cmNlICovCiAJfQotCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKKwlpZiAobWluZm8tPm91dHB1dHNbMF0uc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgewogCQl0bXAgfD0gMHgwMDEwMDAwMDsJLyogY29ubmVjdCBDUlRDMiB0byBEQUMgKi8KIAl9CiAJaWYgKG10LT5pbnRlcmxhY2VkKSB7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJfQogCX0KIAltZ2Ffb3V0bCgweDNDMTAsIHRtcCk7Ci0JQUNDRVNTX0ZCSU5GTyhodykuY3J0YzIuY3RsID0gdG1wOworCW1pbmZvLT5ody5jcnRjMi5jdGwgPSB0bXA7CiAKIAl0bXAgPSBtdC0+VkRpc3BsYXkgPDwgMTY7CS8qIGxpbmUgY29tcGFyZSAqLwogCWlmIChtdC0+c3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKQpAQCAtMTU3LDEwICsxNTcsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgbWF0cm94ZmJfZGhfZGlzYWJsZShzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbyogbTJpbmZvKSB7Ci0JTUlORk9fRlJPTShtMmluZm8tPnByaW1hcnlfZGV2KTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbTJpbmZvLT5wcmltYXJ5X2RldjsKIAogCW1nYV9vdXRsKDB4M0MxMCwgMHgwMDAwMDAwNCk7CS8qIGRpc2FibGUgQ1JUQzIsIENSVEMxLT5EQUMxLCBQTEwgYXMgY2xvY2sgc291cmNlICovCi0JQUNDRVNTX0ZCSU5GTyhodykuY3J0YzIuY3RsID0gMHgwMDAwMDAwNDsKKwltaW5mby0+aHcuY3J0YzIuY3RsID0gMHgwMDAwMDAwNDsKIH0KIAogc3RhdGljIHZvaWQgbWF0cm94ZmJfZGhfcGFuX3ZhcihzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbyogbTJpbmZvLApAQCAtMTY4LDcgKzE2OCw3IEBACiAJdW5zaWduZWQgaW50IHBvczsKIAl1bnNpZ25lZCBpbnQgbGluZWxlbjsKIAl1bnNpZ25lZCBpbnQgcGl4ZWxzaXplOwotCU1JTkZPX0ZST00obTJpbmZvLT5wcmltYXJ5X2Rldik7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG0yaW5mby0+cHJpbWFyeV9kZXY7CiAKIAltMmluZm8tPmZiY29uLnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0OwogCW0yaW5mby0+ZmJjb24udmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7CkBAIC0yNjAsMTUgKzI2MCwxNSBAQAogCiBzdGF0aWMgaW50IG1hdHJveGZiX2RoX29wZW4oc3RydWN0IGZiX2luZm8qIGluZm8sIGludCB1c2VyKSB7CiAjZGVmaW5lIG0yaW5mbyAoY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvLCBmYmNvbikpCi0JTUlORk9fRlJPTShtMmluZm8tPnByaW1hcnlfZGV2KTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbTJpbmZvLT5wcmltYXJ5X2RldjsKIAotCWlmIChNSU5GTykgeworCWlmIChtaW5mbykgewogCQlpbnQgZXJyOwogCi0JCWlmIChBQ0NFU1NfRkJJTkZPKGRlYWQpKSB7CisJCWlmIChtaW5mby0+ZGVhZCkgewogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQotCQllcnIgPSBBQ0NFU1NfRkJJTkZPKGZib3BzKS5mYl9vcGVuKCZBQ0NFU1NfRkJJTkZPKGZiY29uKSwgdXNlcik7CisJCWVyciA9IG1pbmZvLT5mYm9wcy5mYl9vcGVuKCZtaW5mby0+ZmJjb24sIHVzZXIpOwogCQlpZiAoZXJyKSB7CiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yODAsMTAgKzI4MCwxMCBAQAogc3RhdGljIGludCBtYXRyb3hmYl9kaF9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvKiBpbmZvLCBpbnQgdXNlcikgewogI2RlZmluZSBtMmluZm8gKGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbywgZmJjb24pKQogCWludCBlcnIgPSAwOwotCU1JTkZPX0ZST00obTJpbmZvLT5wcmltYXJ5X2Rldik7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG0yaW5mby0+cHJpbWFyeV9kZXY7CiAKLQlpZiAoTUlORk8pIHsKLQkJZXJyID0gQUNDRVNTX0ZCSU5GTyhmYm9wcykuZmJfcmVsZWFzZSgmQUNDRVNTX0ZCSU5GTyhmYmNvbiksIHVzZXIpOworCWlmIChtaW5mbykgeworCQllcnIgPSBtaW5mby0+ZmJvcHMuZmJfcmVsZWFzZSgmbWluZm8tPmZiY29uLCB1c2VyKTsKIAl9CiAJcmV0dXJuIGVycjsKICN1bmRlZiBtMmluZm8KQEAgLTMyNiw3ICszMjYsNyBAQAogCWludCBtb2RlOwogCWludCBlcnI7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvKiB2YXIgPSAmaW5mby0+dmFyOwotCU1JTkZPX0ZST00obTJpbmZvLT5wcmltYXJ5X2Rldik7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IG0yaW5mby0+cHJpbWFyeV9kZXY7CiAKIAlpZiAoKGVyciA9IG1hdHJveGZiX2RoX2RlY29kZV92YXIobTJpbmZvLCB2YXIsICZ2aXN1YWwsICZjbWFwX2xlbiwgJm1vZGUpKSAhPSAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMzUyLDM5ICszNTIsMzkgQEAKIAkJcG9zID0gKG0yaW5mby0+ZmJjb24udmFyLnlvZmZzZXQgKiBtMmluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwgKyBtMmluZm8tPmZiY29uLnZhci54b2Zmc2V0KSAqIG0yaW5mby0+ZmJjb24udmFyLmJpdHNfcGVyX3BpeGVsID4+IDM7CiAJCXBvcyArPSBtMmluZm8tPnZpZGVvLm9mZmJhc2U7CiAJCWNudCA9IDA7Ci0JCWRvd25fcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOworCQlkb3duX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7Ci0JCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKKwkJCWlmIChtaW5mby0+b3V0cHV0c1tvdXRdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKIAkJCQljbnQrKzsKLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+Y29tcHV0ZSkgewotCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0LT5jb21wdXRlKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5kYXRhLCAmbXQpOworCQkJCWlmIChtaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+Y29tcHV0ZSkgeworCQkJCQltaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+Y29tcHV0ZShtaW5mby0+b3V0cHV0c1tvdXRdLmRhdGEsICZtdCk7CiAJCQkJfQogCQkJfQogCQl9Ci0JCUFDQ0VTU19GQklORk8oY3J0YzIpLnBpeGNsb2NrID0gbXQucGl4Y2xvY2s7Ci0JCUFDQ0VTU19GQklORk8oY3J0YzIpLm1ucCA9IG10Lm1ucDsKLQkJdXBfcmVhZCgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQpLmxvY2spOworCQltaW5mby0+Y3J0YzIucGl4Y2xvY2sgPSBtdC5waXhjbG9jazsKKwkJbWluZm8tPmNydGMyLm1ucCA9IG10Lm1ucDsKKwkJdXBfcmVhZCgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAkJaWYgKGNudCkgewogCQkJbWF0cm94ZmJfZGhfcmVzdG9yZShtMmluZm8sICZtdCwgbW9kZSwgcG9zKTsKIAkJfSBlbHNlIHsKIAkJCW1hdHJveGZiX2RoX2Rpc2FibGUobTJpbmZvKTsKIAkJfQotCQlEQUMxMDY0X2dsb2JhbF9pbml0KFBNSU5GTzIpOwotCQlEQUMxMDY0X2dsb2JhbF9yZXN0b3JlKFBNSU5GTzIpOwotCQlkb3duX3JlYWQoJkFDQ0VTU19GQklORk8oYWx0b3V0KS5sb2NrKTsKKwkJREFDMTA2NF9nbG9iYWxfaW5pdChtaW5mbyk7CisJCURBQzEwNjRfZ2xvYmFsX3Jlc3RvcmUobWluZm8pOworCQlkb3duX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7Ci0JCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIgJiYKLQkJCSAgICBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0LT5wcm9ncmFtKSB7Ci0JCQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dC0+cHJvZ3JhbShBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuZGF0YSk7CisJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyICYmCisJCQkgICAgbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQtPnByb2dyYW0pIHsKKwkJCQltaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+cHJvZ3JhbShtaW5mby0+b3V0cHV0c1tvdXRdLmRhdGEpOwogCQkJfQogCQl9CiAJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7Ci0JCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIgJiYKLQkJCSAgICBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0LT5zdGFydCkgewotCQkJCUFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5vdXRwdXQtPnN0YXJ0KEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5kYXRhKTsKKwkJCWlmIChtaW5mby0+b3V0cHV0c1tvdXRdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIgJiYKKwkJCSAgICBtaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+c3RhcnQpIHsKKwkJCQltaW5mby0+b3V0cHV0c1tvdXRdLm91dHB1dC0+c3RhcnQobWluZm8tPm91dHB1dHNbb3V0XS5kYXRhKTsKIAkJCX0KIAkJfQotCQl1cF9yZWFkKCZBQ0NFU1NfRkJJTkZPKGFsdG91dCkubG9jayk7CisJCXVwX3JlYWQoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJfQogCW0yaW5mby0+aW5pdGlhbGl6ZWQgPSAxOwogCXJldHVybiAwOwpAQCAtMzk5LDkgKzM5OSw5IEBACiB9CiAKIHN0YXRpYyBpbnQgbWF0cm94ZmJfZGhfZ2V0X3ZibGFuayhjb25zdCBzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbyogbTJpbmZvLCBzdHJ1Y3QgZmJfdmJsYW5rKiB2YmxhbmspIHsKLQlNSU5GT19GUk9NKG0yaW5mby0+cHJpbWFyeV9kZXYpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtMmluZm8tPnByaW1hcnlfZGV2OwogCi0JbWF0cm94ZmJfZW5hYmxlX2lycShQTUlORk8gMCk7CisJbWF0cm94ZmJfZW5hYmxlX2lycShtaW5mbywgMCk7CiAJbWVtc2V0KHZibGFuaywgMCwgc2l6ZW9mKCp2YmxhbmspKTsKIAl2YmxhbmstPmZsYWdzID0gRkJfVkJMQU5LX0hBVkVfVkNPVU5UIHwgRkJfVkJMQU5LX0hBVkVfVkJMQU5LOwogCS8qIG1hc2sgb3V0IHJlc2VydmVkIGJpdHMgKyBmaWVsZCBudW1iZXIgKG9kZC9ldmVuKSAqLwpAQCAtNDA5LDExICs0MDksMTEgQEAKIAkvKiBjb21wYXRpYmlsaXR5IHN0dWZmICovCiAJaWYgKHZibGFuay0+dmNvdW50ID49IG0yaW5mby0+ZmJjb24udmFyLnlyZXMpCiAJCXZibGFuay0+ZmxhZ3MgfD0gRkJfVkJMQU5LX1ZCTEFOS0lORzsKLSAgICAgICAgaWYgKHRlc3RfYml0KDAsICZBQ0NFU1NfRkJJTkZPKGlycV9mbGFncykpKSB7CisJaWYgKHRlc3RfYml0KDAsICZtaW5mby0+aXJxX2ZsYWdzKSkgewogICAgICAgICAgICAgICAgIHZibGFuay0+ZmxhZ3MgfD0gRkJfVkJMQU5LX0hBVkVfQ09VTlQ7CiAgICAgICAgICAgICAgICAgLyogT25seSBvbmUgd3JpdGVyLCBhbGlnbmVkIGludCB2YWx1ZS4uLgogICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCB3b3JrIHdpdGhvdXQgbG9jayBhbmQgd2l0aG91dCBhdG9taWNfdCAqLwotICAgICAgICAgICAgICAgIHZibGFuay0+Y291bnQgPSBBQ0NFU1NfRkJJTkZPKGNydGMyKS52c3luYy5jbnQ7CisJCXZibGFuay0+Y291bnQgPSBtaW5mby0+Y3J0YzIudnN5bmMuY250OwogICAgICAgICB9CiAJcmV0dXJuIDA7CiB9CkBAIC00MjMsNyArNDIzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAjZGVmaW5lIG0yaW5mbyAoY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvLCBmYmNvbikpCi0JTUlORk9fRlJPTShtMmluZm8tPnByaW1hcnlfZGV2KTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbTJpbmZvLT5wcmltYXJ5X2RldjsKIAogCURCRyhfX2Z1bmNfXykKIApAQCAtNDQ5LDEzICs0NDksMTMgQEAKIAogCQkJCWlmIChjcnQgIT0gMCkKIAkJCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQkJcmV0dXJuIG1hdHJveGZiX3dhaXRfZm9yX3N5bmMoUE1JTkZPIDEpOworCQkJCXJldHVybiBtYXRyb3hmYl93YWl0X2Zvcl9zeW5jKG1pbmZvLCAxKTsKIAkJCX0KIAkJY2FzZSBNQVRST1hGQl9TRVRfT1VUUFVUX01PREU6CiAJCWNhc2UgTUFUUk9YRkJfR0VUX09VVFBVVF9NT0RFOgogCQljYXNlIE1BVFJPWEZCX0dFVF9BTExfT1VUUFVUUzoKIAkJCXsKLQkJCQlyZXR1cm4gQUNDRVNTX0ZCSU5GTyhmYmNvbi5mYm9wcyktPmZiX2lvY3RsKCZBQ0NFU1NfRkJJTkZPKGZiY29uKSwgY21kLCBhcmcpOworCQkJCXJldHVybiBtaW5mby0+ZmJjb24uZmJvcHMtPmZiX2lvY3RsKCZtaW5mby0+ZmJjb24sIGNtZCwgYXJnKTsKIAkJCX0KIAkJY2FzZSBNQVRST1hGQl9TRVRfT1VUUFVUX0NPTk5FQ1RJT046CiAJCQl7CkBAIC00NjksOSArNDY5LDkgQEAKIAkJCQkJaWYgKHRtcCAmICgxIDw8IG91dCkpIHsKIAkJCQkJCWlmIChvdXQgPj0gTUFUUk9YRkJfTUFYX09VVFBVVFMpCiAJCQkJCQkJcmV0dXJuIC1FTlhJTzsKLQkJCQkJCWlmICghQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLm91dHB1dCkKKwkJCQkJCWlmICghbWluZm8tPm91dHB1dHNbb3V0XS5vdXRwdXQpCiAJCQkJCQkJcmV0dXJuIC1FTlhJTzsKLQkJCQkJCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYykgeworCQkJCQkJc3dpdGNoIChtaW5mby0+b3V0cHV0c1tvdXRdLnNyYykgewogCQkJCQkJCWNhc2UgTUFUUk9YRkJfU1JDX05PTkU6CiAJCQkJCQkJY2FzZSBNQVRST1hGQl9TUkNfQ1JUQzI6CiAJCQkJCQkJCWJyZWFrOwpAQCAtNDgwLDIyICs0ODAsMjIgQEAKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KLQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5wYW5lbGxpbmspKSB7CisJCQkJaWYgKG1pbmZvLT5kZXZmbGFncy5wYW5lbGxpbmspIHsKIAkJCQkJaWYgKHRtcCAmIE1BVFJPWEZCX09VVFBVVF9DT05OX0RGUCkKIAkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQlpZiAoKEFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgJiYgdG1wKQorCQkJCQlpZiAoKG1pbmZvLT5vdXRwdXRzWzJdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpICYmIHRtcCkKIAkJCQkJCXJldHVybiAtRUJVU1k7CiAJCQkJfQogCQkJCWNoYW5nZXMgPSAwOwogCQkJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7CiAJCQkJCWlmICh0bXAgJiAoMSA8PCBvdXQpKSB7Ci0JCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzW291dF0pLnNyYyAhPSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKKwkJCQkJCWlmIChtaW5mby0+b3V0cHV0c1tvdXRdLnNyYyAhPSBNQVRST1hGQl9TUkNfQ1JUQzIpIHsKIAkJCQkJCQljaGFuZ2VzID0gMTsKLQkJCQkJCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMyOworCQkJCQkJCW1pbmZvLT5vdXRwdXRzW291dF0uc3JjID0gTUFUUk9YRkJfU1JDX0NSVEMyOwogCQkJCQkJfQotCQkJCQl9IGVsc2UgaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CisJCQkJCX0gZWxzZSBpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CiAJCQkJCQljaGFuZ2VzID0gMTsKLQkJCQkJCUFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMgPSBNQVRST1hGQl9TUkNfTk9ORTsKKwkJCQkJCW1pbmZvLT5vdXRwdXRzW291dF0uc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7CiAJCQkJCX0KIAkJCQl9CiAJCQkJaWYgKCFjaGFuZ2VzKQpAQCAtNTA5LDcgKzUwOSw3IEBACiAJCQkJaW50IG91dDsKIAogCQkJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7Ci0JCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkuc3JjID09IE1BVFJPWEZCX1NSQ19DUlRDMikgeworCQkJCQlpZiAobWluZm8tPm91dHB1dHNbb3V0XS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMyKSB7CiAJCQkJCQljb25uIHw9IDEgPDwgb3V0OwogCQkJCQl9CiAJCQkJfQpAQCAtNTIzLDggKzUyMyw4IEBACiAJCQkJaW50IG91dDsKIAogCQkJCWZvciAob3V0ID0gMDsgb3V0IDwgTUFUUk9YRkJfTUFYX09VVFBVVFM7IG91dCsrKSB7Ci0JCQkJCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbb3V0XSkub3V0cHV0KSB7Ci0JCQkJCQlzd2l0Y2ggKEFDQ0VTU19GQklORk8ob3V0cHV0c1tvdXRdKS5zcmMpIHsKKwkJCQkJaWYgKG1pbmZvLT5vdXRwdXRzW291dF0ub3V0cHV0KSB7CisJCQkJCQlzd2l0Y2ggKG1pbmZvLT5vdXRwdXRzW291dF0uc3JjKSB7CiAJCQkJCQkJY2FzZSBNQVRST1hGQl9TUkNfTk9ORToKIAkJCQkJCQljYXNlIE1BVFJPWEZCX1NSQ19DUlRDMjoKIAkJCQkJCQkJdG1wIHw9IDEgPDwgb3V0OwpAQCAtNTMyLDkgKzUzMiw5IEBACiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9Ci0JCQkJaWYgKEFDQ0VTU19GQklORk8oZGV2ZmxhZ3MucGFuZWxsaW5rKSkgeworCQkJCWlmIChtaW5mby0+ZGV2ZmxhZ3MucGFuZWxsaW5rKSB7CiAJCQkJCXRtcCAmPSB+TUFUUk9YRkJfT1VUUFVUX0NPTk5fREZQOwotCQkJCQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CisJCQkJCWlmIChtaW5mby0+b3V0cHV0c1syXS5zcmMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSB7CiAJCQkJCQl0bXAgPSAwOwogCQkJCQl9CiAJCQkJfQpAQCAtNTk1LDcgKzU5NSw5IEBACiAJCTAsIHswLDAsMCwwLDB9CiB9OwogCi1zdGF0aWMgaW50IG1hdHJveGZiX2RoX3JlZ2l0KENQTUlORk8gc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIG0yaW5mbykgeworc3RhdGljIGludCBtYXRyb3hmYl9kaF9yZWdpdChjb25zdCBzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJICAgICBzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbyAqbTJpbmZvKQorewogI2RlZmluZSBtaW5mbyAobTJpbmZvLT5wcmltYXJ5X2RldikKIAl2b2lkKiBvbGRjcnRjMjsKIApAQCAtNjExLDIxICs2MTMsMjEgQEAKIAlpZiAobWVtIDwgNjQqMTAyNCkKIAkJbWVtICo9IDEwMjQ7CiAJbWVtICY9IH4weDAwMDAwRkZGOwkvKiBQQUdFX01BU0s/ICovCi0JaWYgKEFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSkgKyBtZW0gPD0gQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pKQotCQltMmluZm8tPnZpZGVvLm9mZmJhc2UgPSBBQ0NFU1NfRkJJTkZPKHZpZGVvLmxlbikgLSBtZW07Ci0JZWxzZSBpZiAoQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW4pIDwgbWVtKSB7CisJaWYgKG1pbmZvLT52aWRlby5sZW5fdXNhYmxlICsgbWVtIDw9IG1pbmZvLT52aWRlby5sZW4pCisJCW0yaW5mby0+dmlkZW8ub2ZmYmFzZSA9IG1pbmZvLT52aWRlby5sZW4gLSBtZW07CisJZWxzZSBpZiAobWluZm8tPnZpZGVvLmxlbiA8IG1lbSkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9IGVsc2UgeyAvKiBjaGVjayB5cmVzIG9uIGZpcnN0IGhlYWQuLi4gKi8KIAkJbTJpbmZvLT52aWRlby5ib3Jyb3dlZCA9IG1lbTsKLQkJQUNDRVNTX0ZCSU5GTyh2aWRlby5sZW5fdXNhYmxlKSAtPSBtZW07Ci0JCW0yaW5mby0+dmlkZW8ub2ZmYmFzZSA9IEFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSk7CisJCW1pbmZvLT52aWRlby5sZW5fdXNhYmxlIC09IG1lbTsKKwkJbTJpbmZvLT52aWRlby5vZmZiYXNlID0gbWluZm8tPnZpZGVvLmxlbl91c2FibGU7CiAJfQotCW0yaW5mby0+dmlkZW8uYmFzZSA9IEFDQ0VTU19GQklORk8odmlkZW8uYmFzZSkgKyBtMmluZm8tPnZpZGVvLm9mZmJhc2U7CisJbTJpbmZvLT52aWRlby5iYXNlID0gbWluZm8tPnZpZGVvLmJhc2UgKyBtMmluZm8tPnZpZGVvLm9mZmJhc2U7CiAJbTJpbmZvLT52aWRlby5sZW4gPSBtMmluZm8tPnZpZGVvLmxlbl91c2FibGUgPSBtMmluZm8tPnZpZGVvLmxlbl9tYXhpbXVtID0gbWVtOwotCW0yaW5mby0+dmlkZW8udmJhc2UudmFkZHIgPSB2YWRkcl92YShBQ0NFU1NfRkJJTkZPKHZpZGVvLnZiYXNlKSkgKyBtMmluZm8tPnZpZGVvLm9mZmJhc2U7Ci0JbTJpbmZvLT5tbWlvLmJhc2UgPSBBQ0NFU1NfRkJJTkZPKG1taW8uYmFzZSk7Ci0JbTJpbmZvLT5tbWlvLnZiYXNlID0gQUNDRVNTX0ZCSU5GTyhtbWlvLnZiYXNlKTsKLQltMmluZm8tPm1taW8ubGVuID0gQUNDRVNTX0ZCSU5GTyhtbWlvLmxlbik7CisJbTJpbmZvLT52aWRlby52YmFzZS52YWRkciA9IHZhZGRyX3ZhKG1pbmZvLT52aWRlby52YmFzZSkgKyBtMmluZm8tPnZpZGVvLm9mZmJhc2U7CisJbTJpbmZvLT5tbWlvLmJhc2UgPSBtaW5mby0+bW1pby5iYXNlOworCW0yaW5mby0+bW1pby52YmFzZSA9IG1pbmZvLT5tbWlvLnZiYXNlOworCW0yaW5mby0+bW1pby5sZW4gPSBtaW5mby0+bW1pby5sZW47CiAKIAltYXRyb3hmYl9kaF9pbml0X2ZpeChtMmluZm8pOwogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmbTJpbmZvLT5mYmNvbikpIHsKQEAgLTYzMywxMCArNjM1LDEwIEBACiAJfQogCWlmICghbTJpbmZvLT5pbml0aWFsaXplZCkKIAkJZmJfc2V0X3ZhcigmbTJpbmZvLT5mYmNvbiwgJm1hdHJveGZiX2RoX2RlZmluZWQpOwotCWRvd25fd3JpdGUoJkFDQ0VTU19GQklORk8oY3J0YzIubG9jaykpOwotCW9sZGNydGMyID0gQUNDRVNTX0ZCSU5GTyhjcnRjMi5pbmZvKTsKLQlBQ0NFU1NfRkJJTkZPKGNydGMyLmluZm8pID0gbTJpbmZvOwotCXVwX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGNydGMyLmxvY2spKTsKKwlkb3duX3dyaXRlKCZtaW5mby0+Y3J0YzIubG9jayk7CisJb2xkY3J0YzIgPSBtaW5mby0+Y3J0YzIuaW5mbzsKKwltaW5mby0+Y3J0YzIuaW5mbyA9IG0yaW5mbzsKKwl1cF93cml0ZSgmbWluZm8tPmNydGMyLmxvY2spOwogCWlmIChvbGRjcnRjMikgewogCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiX2NydGMyOiBJbnRlcm5hbCBjb25zaXN0ZW5jeSBjaGVjayBmYWlsZWQ6IGNydGMyIGFscmVhZHkgcHJlc2VudDogJXBcbiIsCiAJCQlvbGRjcnRjMik7CkBAIC02NDksMTIgKzY1MSwxMiBAQAogCiBzdGF0aWMgaW50IG1hdHJveGZiX2RoX3JlZ2lzdGVyZmIoc3RydWN0IG1hdHJveGZiX2RoX2ZiX2luZm8qIG0yaW5mbykgewogI2RlZmluZSBtaW5mbyAobTJpbmZvLT5wcmltYXJ5X2RldikKLQlpZiAobWF0cm94ZmJfZGhfcmVnaXQoUE1JTkZPIG0yaW5mbykpIHsKKwlpZiAobWF0cm94ZmJfZGhfcmVnaXQobWluZm8sIG0yaW5mbykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtYXRyb3hmYl9jcnRjMjogc2Vjb25kYXJ5IGhlYWQgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJtYXRyb3hmYl9jcnRjMjogc2Vjb25kYXJ5IGhlYWQgb2YgZmIldSB3YXMgcmVnaXN0ZXJlZCBhcyBmYiV1XG4iLAotCQlBQ0NFU1NfRkJJTkZPKGZiY29uLm5vZGUpLCBtMmluZm8tPmZiY29uLm5vZGUpOworCQltaW5mby0+ZmJjb24ubm9kZSwgbTJpbmZvLT5mYmNvbi5ub2RlKTsKIAltMmluZm8tPmZiY29uX3JlZ2lzdGVyZWQgPSAxOwogCXJldHVybiAwOwogI3VuZGVmIG1pbmZvCkBAIC02NjYsMTEgKzY2OCwxMSBAQAogCQlpbnQgaWQ7CiAJCXN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvKiBjcnRjMjsKIAotCQlkb3duX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGNydGMyLmxvY2spKTsKLQkJY3J0YzIgPSBBQ0NFU1NfRkJJTkZPKGNydGMyLmluZm8pOworCQlkb3duX3dyaXRlKCZtaW5mby0+Y3J0YzIubG9jayk7CisJCWNydGMyID0gbWluZm8tPmNydGMyLmluZm87CiAJCWlmIChjcnRjMiA9PSBtMmluZm8pCi0JCQlBQ0NFU1NfRkJJTkZPKGNydGMyLmluZm8pID0gTlVMTDsKLQkJdXBfd3JpdGUoJkFDQ0VTU19GQklORk8oY3J0YzIubG9jaykpOworCQkJbWluZm8tPmNydGMyLmluZm8gPSBOVUxMOworCQl1cF93cml0ZSgmbWluZm8tPmNydGMyLmxvY2spOwogCQlpZiAoY3J0YzIgIT0gbTJpbmZvKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIm1hdHJveGZiX2NydGMyOiBJbnRlcm5hbCBjb25zaXN0ZW5jeSBjaGVjayBmYWlsZWQ6IGNydGMyIG1pc21hdGNoIGF0IHVubG9hZDogJXAgIT0gJXBcbiIsCiAJCQkJY3J0YzIsIG0yaW5mbyk7CkBAIC02ODAsNyArNjgyLDcgQEAKIAkJaWQgPSBtMmluZm8tPmZiY29uLm5vZGU7CiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJm0yaW5mby0+ZmJjb24pOwogCQkvKiByZXR1cm4gbWVtb3J5IGJhY2sgdG8gcHJpbWFyeSBoZWFkICovCi0JCUFDQ0VTU19GQklORk8odmlkZW8ubGVuX3VzYWJsZSkgKz0gbTJpbmZvLT52aWRlby5ib3Jyb3dlZDsKKwkJbWluZm8tPnZpZGVvLmxlbl91c2FibGUgKz0gbTJpbmZvLT52aWRlby5ib3Jyb3dlZDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWF0cm94ZmJfY3J0YzI6IGZiJXUgdW5yZWdpc3RlcmVkXG4iLCBpZCk7CiAJCW0yaW5mby0+ZmJjb25fcmVnaXN0ZXJlZCA9IDA7CiAJfQpAQCAtNjkxLDE0ICs2OTMsMTQgQEAKIAlzdHJ1Y3QgbWF0cm94ZmJfZGhfZmJfaW5mbyogbTJpbmZvOwogCiAJLyogaGFyZHdhcmUgaXMgQ1JUQzIgaW5jYXBhYmxlLi4uICovCi0JaWYgKCFBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmNydGMyKSkKKwlpZiAoIW1pbmZvLT5kZXZmbGFncy5jcnRjMikKIAkJcmV0dXJuIE5VTEw7CiAJbTJpbmZvID0ga3phbGxvYyhzaXplb2YoKm0yaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghbTJpbmZvKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmJfY3J0YzI6IE5vdCBlbm91Z2ggbWVtb3J5IGZvciBDUlRDMiBjb250cm9sIHN0cnVjdHNcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbTJpbmZvLT5wcmltYXJ5X2RldiA9IE1JTkZPOworCW0yaW5mby0+cHJpbWFyeV9kZXYgPSBtaW5mbzsKIAlpZiAobWF0cm94ZmJfZGhfcmVnaXN0ZXJmYihtMmluZm8pKSB7CiAJCWtmcmVlKG0yaW5mbyk7CiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmJfY3J0YzI6IENSVEMyIGZyYW1lYnVmZmVyIGZhaWxlZCB0byByZWdpc3RlclxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9nNDUwLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9nNDUwLmMKaW5kZXggNjIwOWE3Ni4uY2ZmMDU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfZzQ1MC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2c0NTAuYwpAQCAtODAsNTIgKzgwLDU5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50KiBnZXRfY3RybF9wdHIoV1BNSU5GTyB1bnNpZ25lZCBpbnQgaWR4KSB7Ci0JcmV0dXJuIChpbnQqKSgoY2hhciopTUlORk8gKyBnNDUwX2NvbnRyb2xzW2lkeF0uY29udHJvbCk7CitzdGF0aWMgaW5saW5lIGludCAqZ2V0X2N0cmxfcHRyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHVuc2lnbmVkIGludCBpZHgpCit7CisJcmV0dXJuIChpbnQqKSgoY2hhciopbWluZm8gKyBnNDUwX2NvbnRyb2xzW2lkeF0uY29udHJvbCk7CiB9CiAKLXN0YXRpYyB2b2lkIHR2b19maWxsX2RlZmF1bHRzKFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCB0dm9fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCXVuc2lnbmVkIGludCBpOwogCQogCWZvciAoaSA9IDA7IGkgPCBHNDUwQ1RSTFM7IGkrKykgewotCQkqZ2V0X2N0cmxfcHRyKFBNSU5GTyBpKSA9IGc0NTBfY29udHJvbHNbaV0uZGVzYy5kZWZhdWx0X3ZhbHVlOworCQkqZ2V0X2N0cmxfcHRyKG1pbmZvLCBpKSA9IGc0NTBfY29udHJvbHNbaV0uZGVzYy5kZWZhdWx0X3ZhbHVlOwogCX0KIH0KIAotc3RhdGljIGludCBjdmUyX2dldF9yZWcoV1BNSU5GTyBpbnQgcmVnKSB7CitzdGF0aWMgaW50IGN2ZTJfZ2V0X3JlZyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgcmVnKQorewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHZhbDsKIAkKIAltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyAweDg3LCByZWcpOwotCXZhbCA9IG1hdHJveGZiX0RBQ19pbihQTUlORk8gMHg4OCk7CisJbWF0cm94ZmJfREFDX291dChtaW5mbywgMHg4NywgcmVnKTsKKwl2YWwgPSBtYXRyb3hmYl9EQUNfaW4obWluZm8sIDB4ODgpOwogCW1hdHJveGZiX0RBQ191bmxvY2tfaXJxcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIHZvaWQgY3ZlMl9zZXRfcmVnKFdQTUlORk8gaW50IHJlZywgaW50IHZhbCkgeworc3RhdGljIHZvaWQgY3ZlMl9zZXRfcmVnKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCByZWcsIGludCB2YWwpCit7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW1hdHJveGZiX0RBQ19sb2NrX2lycXNhdmUoZmxhZ3MpOwotCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIDB4ODcsIHJlZyk7Ci0JbWF0cm94ZmJfREFDX291dChQTUlORk8gMHg4OCwgdmFsKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCAweDg3LCByZWcpOworCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIDB4ODgsIHZhbCk7CiAJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgY3ZlMl9zZXRfcmVnMTAoV1BNSU5GTyBpbnQgcmVnLCBpbnQgdmFsKSB7CitzdGF0aWMgdm9pZCBjdmUyX3NldF9yZWcxMChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBpbnQgcmVnLCBpbnQgdmFsKQorewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltYXRyb3hmYl9EQUNfbG9ja19pcnFzYXZlKGZsYWdzKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyAweDg3LCByZWcpOwotCW1hdHJveGZiX0RBQ19vdXQoUE1JTkZPIDB4ODgsIHZhbCA+PiAyKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyAweDg3LCByZWcgKyAxKTsKLQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyAweDg4LCB2YWwgJiAzKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCAweDg3LCByZWcpOworCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIDB4ODgsIHZhbCA+PiAyKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCAweDg3LCByZWcgKyAxKTsKKwltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCAweDg4LCB2YWwgJiAzKTsKIAltYXRyb3hmYl9EQUNfdW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBnNDUwX2NvbXB1dGVfYndsZXZlbChDUE1JTkZPIGludCAqYmwsIGludCAqd2wpIHsKLQljb25zdCBpbnQgYiA9IEFDQ0VTU19GQklORk8oYWx0b3V0LnR2b19wYXJhbXMuYnJpZ2h0bmVzcykgKyBCTE1JTjsKLQljb25zdCBpbnQgYyA9IEFDQ0VTU19GQklORk8oYWx0b3V0LnR2b19wYXJhbXMuY29udHJhc3QpOworc3RhdGljIHZvaWQgZzQ1MF9jb21wdXRlX2J3bGV2ZWwoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50ICpibCwKKwkJCQkgaW50ICp3bCkKK3sKKwljb25zdCBpbnQgYiA9IG1pbmZvLT5hbHRvdXQudHZvX3BhcmFtcy5icmlnaHRuZXNzICsgQkxNSU47CisJY29uc3QgaW50IGMgPSBtaW5mby0+YWx0b3V0LnR2b19wYXJhbXMuY29udHJhc3Q7CiAKIAkqYmwgPSBtYXgoYiAtIGMsIEJMTUlOKTsKIAkqd2wgPSBtaW4oYiArIGMsIFdMTUFYKTsKQEAgLTE1NCw3ICsxNjEsNyBAQAogCiBzdGF0aWMgaW50IGc0NTBfc2V0X2N0cmwodm9pZCogbWQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKnApIHsKIAlpbnQgaTsKLQlNSU5GT19GUk9NKG1kKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQ7CiAJCiAJaSA9IGdldF9jdHJsX2lkKHAtPmlkKTsKIAlpZiAoaSA8IDApIHJldHVybiAtRUlOVkFMOwpAQCAtMTYyLDcgKzE2OSw3IEBACiAJLyoKIAkgKiBDaGVjayBpZiBjaGFuZ2VkLgogCSAqLwotCWlmIChwLT52YWx1ZSA9PSAqZ2V0X2N0cmxfcHRyKFBNSU5GTyBpKSkgcmV0dXJuIDA7CisJaWYgKHAtPnZhbHVlID09ICpnZXRfY3RybF9wdHIobWluZm8sIGkpKSByZXR1cm4gMDsKIAogCS8qCiAJICogQ2hlY2sgbGltaXRzLgpAQCAtMTczLDMxICsxODAsMzEgQEAKIAkvKgogCSAqIFN0b3JlIG5ldyB2YWx1ZS4KIAkgKi8KLQkqZ2V0X2N0cmxfcHRyKFBNSU5GTyBpKSA9IHAtPnZhbHVlOworCSpnZXRfY3RybF9wdHIobWluZm8sIGkpID0gcC0+dmFsdWU7CiAKIAlzd2l0Y2ggKHAtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKIAkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJCXsKIAkJCQlpbnQgYmxhY2tsZXZlbCwgd2hpdGVsZXZlbDsKLQkJCQlnNDUwX2NvbXB1dGVfYndsZXZlbChQTUlORk8gJmJsYWNrbGV2ZWwsICZ3aGl0ZWxldmVsKTsKLQkJCQljdmUyX3NldF9yZWcxMChQTUlORk8gMHgwZSwgYmxhY2tsZXZlbCk7Ci0JCQkJY3ZlMl9zZXRfcmVnMTAoUE1JTkZPIDB4MWUsIHdoaXRlbGV2ZWwpOworCQkJCWc0NTBfY29tcHV0ZV9id2xldmVsKG1pbmZvLCAmYmxhY2tsZXZlbCwgJndoaXRlbGV2ZWwpOworCQkJCWN2ZTJfc2V0X3JlZzEwKG1pbmZvLCAweDBlLCBibGFja2xldmVsKTsKKwkJCQljdmUyX3NldF9yZWcxMChtaW5mbywgMHgxZSwgd2hpdGVsZXZlbCk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQkJY3ZlMl9zZXRfcmVnKFBNSU5GTyAweDIwLCBwLT52YWx1ZSk7Ci0JCQljdmUyX3NldF9yZWcoUE1JTkZPIDB4MjIsIHAtPnZhbHVlKTsKKwkJCWN2ZTJfc2V0X3JlZyhtaW5mbywgMHgyMCwgcC0+dmFsdWUpOworCQkJY3ZlMl9zZXRfcmVnKG1pbmZvLCAweDIyLCBwLT52YWx1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQljdmUyX3NldF9yZWcoUE1JTkZPIDB4MjUsIHAtPnZhbHVlKTsKKwkJCWN2ZTJfc2V0X3JlZyhtaW5mbywgMHgyNSwgcC0+dmFsdWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgTUFUUk9YRkJfQ0lEX1RFU1RPVVQ6CiAJCQl7Ci0JCQkJdW5zaWduZWQgY2hhciB2YWwgPSBjdmUyX2dldF9yZWcgKFBNSU5GTyAweDA1KTsKKwkJCQl1bnNpZ25lZCBjaGFyIHZhbCA9IGN2ZTJfZ2V0X3JlZyhtaW5mbywgMHgwNSk7CiAJCQkJaWYgKHAtPnZhbHVlKSB2YWwgfD0gIDB4MDI7CiAJCQkJZWxzZSAgICAgICAgICB2YWwgJj0gfjB4MDI7Ci0JCQkJY3ZlMl9zZXRfcmVnKFBNSU5GTyAweDA1LCB2YWwpOworCQkJCWN2ZTJfc2V0X3JlZyhtaW5mbywgMHgwNSwgdmFsKTsKIAkJCX0KIAkJCWJyZWFrOwogCX0KQEAgLTIwOCwxMSArMjE1LDExIEBACiAKIHN0YXRpYyBpbnQgZzQ1MF9nZXRfY3RybCh2b2lkKiBtZCwgc3RydWN0IHY0bDJfY29udHJvbCAqcCkgewogCWludCBpOwotCU1JTkZPX0ZST00obWQpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtZDsKIAkKIAlpID0gZ2V0X2N0cmxfaWQocC0+aWQpOwogCWlmIChpIDwgMCkgcmV0dXJuIC1FSU5WQUw7Ci0JcC0+dmFsdWUgPSAqZ2V0X2N0cmxfcHRyKFBNSU5GTyBpKTsKKwlwLT52YWx1ZSA9ICpnZXRfY3RybF9wdHIobWluZm8sIGkpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjYsNyArMjMzLDkgQEAKIAl1bnNpZ25lZCBpbnQJdl90b3RhbDsKIH07CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVSZWdzKFdQTUlORk8gc3RydWN0IG1hdmVucmVncyogciwgc3RydWN0IG15X3RpbW1pbmcqIG10LCBjb25zdCBzdHJ1Y3Qgb3V0cHV0X2Rlc2MqIG91dGQpIHsKK3N0YXRpYyB2b2lkIGNvbXB1dGVSZWdzKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIHN0cnVjdCBtYXZlbnJlZ3MgKnIsCisJCQlzdHJ1Y3QgbXlfdGltbWluZyAqbXQsIGNvbnN0IHN0cnVjdCBvdXRwdXRfZGVzYyAqb3V0ZCkKK3sKIAl1X2ludDMyX3QgY2hyb21hc2M7CiAJdV9pbnQzMl90IGhsZW47CiAJdV9pbnQzMl90IGhzbDsKQEAgLTI1MSwxMCArMjYwLDEwIEBACiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIldhbnQgJXUga0h6IHBpeGNsb2NrXG4iLCAodW5zaWduZWQgaW50KXBpaWMpOwogCQotCW1ucCA9IG1hdHJveGZiX2c0NTBfc2V0Y2xrKFBNSU5GTyBwaWljLCBNX1ZJREVPX1BMTCk7CisJbW5wID0gbWF0cm94ZmJfZzQ1MF9zZXRjbGsobWluZm8sIHBpaWMsIE1fVklERU9fUExMKTsKIAkKIAltdC0+bW5wID0gbW5wOwotCW10LT5waXhjbG9jayA9IGc0NTBfbW5wMmYoUE1JTkZPIG1ucCk7CisJbXQtPnBpeGNsb2NrID0gZzQ1MF9tbnAyZihtaW5mbywgbW5wKTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiTU5QPSUwOFhcbiIsIG1ucCk7CiAKQEAgLTQ5MCw2NSArNDk5LDY3IEBACiAgCXJldHVybjsKIH0KIAotI2RlZmluZSBMUih4KSBjdmUyX3NldF9yZWcoUE1JTkZPICh4KSwgbS0+cmVnc1soeCldKQotc3RhdGljIHZvaWQgY3ZlMl9pbml0X1RWKFdQTUlORk8gY29uc3Qgc3RydWN0IG1hdmVucmVncyogbSkgeworI2RlZmluZSBMUih4KSBjdmUyX3NldF9yZWcobWluZm8sICh4KSwgbS0+cmVnc1soeCldKQorc3RhdGljIHZvaWQgY3ZlMl9pbml0X1RWKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkgY29uc3Qgc3RydWN0IG1hdmVucmVncyAqbSkKK3sKIAlpbnQgaTsKIAogCUxSKDB4ODApOwogCUxSKDB4ODIpOyBMUigweDgzKTsKIAlMUigweDg0KTsgTFIoMHg4NSk7CiAJCi0JY3ZlMl9zZXRfcmVnKFBNSU5GTyAweDNFLCAweDAxKTsKKwljdmUyX3NldF9yZWcobWluZm8sIDB4M0UsIDB4MDEpOwogCQogCWZvciAoaSA9IDA7IGkgPCAweDNFOyBpKyspIHsKIAkJTFIoaSk7CiAJfQotCWN2ZTJfc2V0X3JlZyhQTUlORk8gMHgzRSwgMHgwMCk7CisJY3ZlMl9zZXRfcmVnKG1pbmZvLCAweDNFLCAweDAwKTsKIH0KIAogc3RhdGljIGludCBtYXRyb3hmYl9nNDUwX2NvbXB1dGUodm9pZCogbWQsIHN0cnVjdCBteV90aW1taW5nKiBtdCkgewotCU1JTkZPX0ZST00obWQpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtZDsKIAotCWRwcmludGsoS0VSTl9ERUJVRyAiQ29tcHV0aW5nLCBtb2RlPSV1XG4iLCBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm1vZGUpOworCWRwcmludGsoS0VSTl9ERUJVRyAiQ29tcHV0aW5nLCBtb2RlPSV1XG4iLCBtaW5mby0+b3V0cHV0c1sxXS5tb2RlKTsKIAogCWlmIChtdC0+Y3J0YyA9PSBNQVRST1hGQl9TUkNfQ1JUQzIgJiYKLQkgICAgQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlICE9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKKwkgICAgbWluZm8tPm91dHB1dHNbMV0ubW9kZSAhPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SKSB7CiAJCWNvbnN0IHN0cnVjdCBvdXRwdXRfZGVzYyogb3V0ZDsKIAotCQljdmUyX2luaXRfVFZkYXRhKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkubW9kZSwgJkFDQ0VTU19GQklORk8oaHcpLm1hdmVuLCAmb3V0ZCk7CisJCWN2ZTJfaW5pdF9UVmRhdGEobWluZm8tPm91dHB1dHNbMV0ubW9kZSwgJm1pbmZvLT5ody5tYXZlbiwgJm91dGQpOwogCQl7CiAJCQlpbnQgYmxhY2tsZXZlbCwgd2hpdGVsZXZlbDsKLQkJCWc0NTBfY29tcHV0ZV9id2xldmVsKFBNSU5GTyAmYmxhY2tsZXZlbCwgJndoaXRlbGV2ZWwpOwotCQkJQUNDRVNTX0ZCSU5GTyhodykubWF2ZW4ucmVnc1sweDBFXSA9IGJsYWNrbGV2ZWwgPj4gMjsKLQkJCUFDQ0VTU19GQklORk8oaHcpLm1hdmVuLnJlZ3NbMHgwRl0gPSBibGFja2xldmVsICYgMzsKLQkJCUFDQ0VTU19GQklORk8oaHcpLm1hdmVuLnJlZ3NbMHgxRV0gPSB3aGl0ZWxldmVsID4+IDI7Ci0JCQlBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbi5yZWdzWzB4MUZdID0gd2hpdGVsZXZlbCAmIDM7CisJCQlnNDUwX2NvbXB1dGVfYndsZXZlbChtaW5mbywgJmJsYWNrbGV2ZWwsICZ3aGl0ZWxldmVsKTsKKwkJCW1pbmZvLT5ody5tYXZlbi5yZWdzWzB4MEVdID0gYmxhY2tsZXZlbCA+PiAyOworCQkJbWluZm8tPmh3Lm1hdmVuLnJlZ3NbMHgwRl0gPSBibGFja2xldmVsICYgMzsKKwkJCW1pbmZvLT5ody5tYXZlbi5yZWdzWzB4MUVdID0gd2hpdGVsZXZlbCA+PiAyOworCQkJbWluZm8tPmh3Lm1hdmVuLnJlZ3NbMHgxRl0gPSB3aGl0ZWxldmVsICYgMzsKIAotCQkJQUNDRVNTX0ZCSU5GTyhodykubWF2ZW4ucmVnc1sweDIwXSA9Ci0JCQlBQ0NFU1NfRkJJTkZPKGh3KS5tYXZlbi5yZWdzWzB4MjJdID0gQUNDRVNTX0ZCSU5GTyhhbHRvdXQudHZvX3BhcmFtcy5zYXR1cmF0aW9uKTsKKwkJCW1pbmZvLT5ody5tYXZlbi5yZWdzWzB4MjBdID0KKwkJCW1pbmZvLT5ody5tYXZlbi5yZWdzWzB4MjJdID0gbWluZm8tPmFsdG91dC50dm9fcGFyYW1zLnNhdHVyYXRpb247CiAKLQkJCUFDQ0VTU19GQklORk8oaHcpLm1hdmVuLnJlZ3NbMHgyNV0gPSBBQ0NFU1NfRkJJTkZPKGFsdG91dC50dm9fcGFyYW1zLmh1ZSk7CisJCQltaW5mby0+aHcubWF2ZW4ucmVnc1sweDI1XSA9IG1pbmZvLT5hbHRvdXQudHZvX3BhcmFtcy5odWU7CiAKLQkJCWlmIChBQ0NFU1NfRkJJTkZPKGFsdG91dC50dm9fcGFyYW1zLnRlc3RvdXQpKSB7Ci0JCQkJQUNDRVNTX0ZCSU5GTyhodykubWF2ZW4ucmVnc1sweDA1XSB8PSAweDAyOworCQkJaWYgKG1pbmZvLT5hbHRvdXQudHZvX3BhcmFtcy50ZXN0b3V0KSB7CisJCQkJbWluZm8tPmh3Lm1hdmVuLnJlZ3NbMHgwNV0gfD0gMHgwMjsKIAkJCX0KIAkJfQotCQljb21wdXRlUmVncyhQTUlORk8gJkFDQ0VTU19GQklORk8oaHcpLm1hdmVuLCBtdCwgb3V0ZCk7CisJCWNvbXB1dGVSZWdzKG1pbmZvLCAmbWluZm8tPmh3Lm1hdmVuLCBtdCwgb3V0ZCk7CiAJfSBlbHNlIGlmIChtdC0+bW5wIDwgMCkgewogCQkvKiBXZSBtdXN0IHByb2dyYW0gY2xvY2tzIGJlZm9yZSBDUlRDMiwgb3RoZXJ3aXNlIGludGVybGFjZWQgbW9kZQogCQkgICBzdGFydHVwIG1heSBmYWlsICovCi0JCW10LT5tbnAgPSBtYXRyb3hmYl9nNDUwX3NldGNsayhQTUlORk8gbXQtPnBpeGNsb2NrLCAobXQtPmNydGMgPT0gTUFUUk9YRkJfU1JDX0NSVEMxKSA/IE1fUElYRUxfUExMX0MgOiBNX1ZJREVPX1BMTCk7Ci0JCW10LT5waXhjbG9jayA9IGc0NTBfbW5wMmYoUE1JTkZPIG10LT5tbnApOworCQltdC0+bW5wID0gbWF0cm94ZmJfZzQ1MF9zZXRjbGsobWluZm8sIG10LT5waXhjbG9jaywgKG10LT5jcnRjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgPyBNX1BJWEVMX1BMTF9DIDogTV9WSURFT19QTEwpOworCQltdC0+cGl4Y2xvY2sgPSBnNDUwX21ucDJmKG1pbmZvLCBtdC0+bW5wKTsKIAl9CiAJZHByaW50ayhLRVJOX0RFQlVHICJQaXhjbG9jayA9ICV1XG4iLCBtdC0+cGl4Y2xvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1hdHJveGZiX2c0NTBfcHJvZ3JhbSh2b2lkKiBtZCkgewotCU1JTkZPX0ZST00obWQpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtZDsKIAkKLQlpZiAoQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlICE9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKLQkJY3ZlMl9pbml0X1RWKFBNSU5GTyAmQUNDRVNTX0ZCSU5GTyhodykubWF2ZW4pOworCWlmIChtaW5mby0+b3V0cHV0c1sxXS5tb2RlICE9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1IpIHsKKwkJY3ZlMl9pbml0X1RWKG1pbmZvLCAmbWluZm8tPmh3Lm1hdmVuKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01NjQsMTEgKzU3NSwxMSBAQAogfQogCiBzdGF0aWMgaW50IGc0NTBfZHZpX2NvbXB1dGUodm9pZCogbWQsIHN0cnVjdCBteV90aW1taW5nKiBtdCkgewotCU1JTkZPX0ZST00obWQpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtZDsKIAogCWlmIChtdC0+bW5wIDwgMCkgewotCQltdC0+bW5wID0gbWF0cm94ZmJfZzQ1MF9zZXRjbGsoUE1JTkZPIG10LT5waXhjbG9jaywgKG10LT5jcnRjID09IE1BVFJPWEZCX1NSQ19DUlRDMSkgPyBNX1BJWEVMX1BMTF9DIDogTV9WSURFT19QTEwpOwotCQltdC0+cGl4Y2xvY2sgPSBnNDUwX21ucDJmKFBNSU5GTyBtdC0+bW5wKTsKKwkJbXQtPm1ucCA9IG1hdHJveGZiX2c0NTBfc2V0Y2xrKG1pbmZvLCBtdC0+cGl4Y2xvY2ssIChtdC0+Y3J0YyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpID8gTV9QSVhFTF9QTExfQyA6IE1fVklERU9fUExMKTsKKwkJbXQtPnBpeGNsb2NrID0gZzQ1MF9tbnAyZihtaW5mbywgbXQtPm1ucCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTg4LDM0ICs1OTksMzYgQEAKIAkuY29tcHV0ZQk9IGc0NTBfZHZpX2NvbXB1dGUsCiB9OwogCi12b2lkIG1hdHJveGZiX2c0NTBfY29ubmVjdChXUE1JTkZPMikgewotCWlmIChBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmc0NTBkYWMpKSB7Ci0JCWRvd25fd3JpdGUoJkFDQ0VTU19GQklORk8oYWx0b3V0LmxvY2spKTsKLQkJdHZvX2ZpbGxfZGVmYXVsdHMoUE1JTkZPMik7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuc3JjID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kZWZhdWx0X3NyYzsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kYXRhID0gTUlORk87Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0ID0gJm1hdHJveGZiX2c0NTBfYWx0b3V0OwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLnNyYyA9IEFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuZGVmYXVsdF9zcmM7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1syXSkuZGF0YSA9IE1JTkZPOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLm91dHB1dCA9ICZtYXRyb3hmYl9nNDUwX2R2aTsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKLQkJdXBfd3JpdGUoJkFDQ0VTU19GQklORk8oYWx0b3V0LmxvY2spKTsKK3ZvaWQgbWF0cm94ZmJfZzQ1MF9jb25uZWN0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CisJCWRvd25fd3JpdGUoJm1pbmZvLT5hbHRvdXQubG9jayk7CisJCXR2b19maWxsX2RlZmF1bHRzKG1pbmZvKTsKKwkJbWluZm8tPm91dHB1dHNbMV0uc3JjID0gbWluZm8tPm91dHB1dHNbMV0uZGVmYXVsdF9zcmM7CisJCW1pbmZvLT5vdXRwdXRzWzFdLmRhdGEgPSBtaW5mbzsKKwkJbWluZm8tPm91dHB1dHNbMV0ub3V0cHV0ID0gJm1hdHJveGZiX2c0NTBfYWx0b3V0OworCQltaW5mby0+b3V0cHV0c1sxXS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwkJbWluZm8tPm91dHB1dHNbMl0uc3JjID0gbWluZm8tPm91dHB1dHNbMl0uZGVmYXVsdF9zcmM7CisJCW1pbmZvLT5vdXRwdXRzWzJdLmRhdGEgPSBtaW5mbzsKKwkJbWluZm8tPm91dHB1dHNbMl0ub3V0cHV0ID0gJm1hdHJveGZiX2c0NTBfZHZpOworCQltaW5mby0+b3V0cHV0c1syXS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwkJdXBfd3JpdGUoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJfQogfQogCi12b2lkIG1hdHJveGZiX2c0NTBfc2h1dGRvd24oV1BNSU5GTzIpIHsKLQlpZiAoQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5nNDUwZGFjKSkgewotCQlkb3duX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0ID0gTlVMTDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kYXRhID0gTlVMTDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5zcmMgPSBNQVRST1hGQl9TUkNfTk9ORTsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzJdKS5vdXRwdXQgPSBOVUxMOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLmRhdGEgPSBOVUxMOwotCQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMl0pLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOwotCQl1cF93cml0ZSgmQUNDRVNTX0ZCSU5GTyhhbHRvdXQubG9jaykpOwordm9pZCBtYXRyb3hmYl9nNDUwX3NodXRkb3duKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CisJaWYgKG1pbmZvLT5kZXZmbGFncy5nNDUwZGFjKSB7CisJCWRvd25fd3JpdGUoJm1pbmZvLT5hbHRvdXQubG9jayk7CisJCW1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOworCQltaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQgPSBOVUxMOworCQltaW5mby0+b3V0cHV0c1sxXS5kYXRhID0gTlVMTDsKKwkJbWluZm8tPm91dHB1dHNbMV0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJCW1pbmZvLT5vdXRwdXRzWzJdLnNyYyA9IE1BVFJPWEZCX1NSQ19OT05FOworCQltaW5mby0+b3V0cHV0c1syXS5vdXRwdXQgPSBOVUxMOworCQltaW5mby0+b3V0cHV0c1syXS5kYXRhID0gTlVMTDsKKwkJbWluZm8tPm91dHB1dHNbMl0ubW9kZSA9IE1BVFJPWEZCX09VVFBVVF9NT0RFX01PTklUT1I7CisJCXVwX3dyaXRlKCZtaW5mby0+YWx0b3V0LmxvY2spOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfZzQ1MC5oIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfZzQ1MC5oCmluZGV4IGEwODIyYTYuLjNhM2U2NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2c0NTAuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9nNDUwLmgKQEAgLTQsMTEgKzQsMTEgQEAKICNpbmNsdWRlICJtYXRyb3hmYl9iYXNlLmgiCiAKICNpZmRlZiBDT05GSUdfRkJfTUFUUk9YX0cKLXZvaWQgbWF0cm94ZmJfZzQ1MF9jb25uZWN0KFdQTUlORk8yKTsKLXZvaWQgbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihXUE1JTkZPMik7Cit2b2lkIG1hdHJveGZiX2c0NTBfY29ubmVjdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKK3ZvaWQgbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbWF0cm94ZmJfZzQ1MF9jb25uZWN0KFdQTUlORk8yKSB7IH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihXUE1JTkZPMikgeyB9Oworc3RhdGljIGlubGluZSB2b2lkIG1hdHJveGZiX2c0NTBfY29ubmVjdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKSB7IH07CitzdGF0aWMgaW5saW5lIHZvaWQgbWF0cm94ZmJfZzQ1MF9zaHV0ZG93bihzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKSB7IH07CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fTUFUUk9YRkJfRzQ1MF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21hdmVuLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9tYXZlbi5jCmluZGV4IDA0MjQwOGEuLjkxYWY5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21hdmVuLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWF2ZW4uYwpAQCAtNDU4LDkgKzQ1OCw5IEBACiAJCTB4MDAsCS8qIDNFIHdyaXR0ZW4gbXVsdGlwbGUgdGltZXMgKi8KIAkJMHgwMCwJLyogbmV2ZXIgd3JpdHRlbiAqLwogCX0sIE1BVFJPWEZCX09VVFBVVF9NT0RFX05UU0MsIDUyNSwgNjAgfTsKLQlNSU5GT19GUk9NKG1kLT5wcmltYXJ5X2hlYWQpOworCXN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8gPSBtZC0+cHJpbWFyeV9oZWFkOwogCi0JaWYgKEFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkubW9kZSA9PSBNQVRST1hGQl9PVVRQVVRfTU9ERV9QQUwpCisJaWYgKG1pbmZvLT5vdXRwdXRzWzFdLm1vZGUgPT0gTUFUUk9YRkJfT1VUUFVUX01PREVfUEFMKQogCQkqZGF0YSA9IHBhbHJlZ3M7CiAJZWxzZQogCQkqZGF0YSA9IG50c2NyZWdzOwpAQCAtNDk2LDExICs0OTYsMTEgQEAKIAkvKiBTZXQgc2F0dXJhdGlvbiAqLwogCXsKIAkJZGF0YS0+cmVnc1sweDIwXSA9Ci0JCWRhdGEtPnJlZ3NbMHgyMl0gPSBBQ0NFU1NfRkJJTkZPKGFsdG91dC50dm9fcGFyYW1zLnNhdHVyYXRpb24pOworCQlkYXRhLT5yZWdzWzB4MjJdID0gbWluZm8tPmFsdG91dC50dm9fcGFyYW1zLnNhdHVyYXRpb247CiAJfQogIAogCS8qIFNldCBIVUUgKi8KLQlkYXRhLT5yZWdzWzB4MjVdID0gQUNDRVNTX0ZCSU5GTyhhbHRvdXQudHZvX3BhcmFtcy5odWUpOworCWRhdGEtPnJlZ3NbMHgyNV0gPSBtaW5mby0+YWx0b3V0LnR2b19wYXJhbXMuaHVlOwogCXJldHVybjsKIH0KIApAQCAtNzQxLDkgKzc0MSw5IEBACiAJCXN0cnVjdCBtYXZlbnJlZ3MqIG0pIHsKIAl1bnNpZ25lZCBpbnQgdG1waTsKIAl1bnNpZ25lZCBpbnQgYSwgYnYsIGM7Ci0JTUlORk9fRlJPTShtZC0+cHJpbWFyeV9oZWFkKTsKKwlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQtPnByaW1hcnlfaGVhZDsKIAotCW0tPm1vZGUgPSBBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm1vZGU7CisJbS0+bW9kZSA9IG1pbmZvLT5vdXRwdXRzWzFdLm1vZGU7CiAJaWYgKG0tPm1vZGUgIT0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUikgewogCQl1bnNpZ25lZCBpbnQgbG1hcmdpbjsKIAkJdW5zaWduZWQgaW50IHVtYXJnaW47CkBAIC0xMTMyLDcgKzExMzIsNyBAQAogc3RhdGljIGludCBtYXZlbl9vdXRfY29tcHV0ZSh2b2lkKiBtZCwgc3RydWN0IG15X3RpbW1pbmcqIG10KSB7CiAjZGVmaW5lIG1kaW5mbyAoKHN0cnVjdCBtYXZlbl9kYXRhKiltZCkKICNkZWZpbmUgbWluZm8gKG1kaW5mby0+cHJpbWFyeV9oZWFkKQotCXJldHVybiBtYXZlbl9jb21wdXRlX3RpbW1pbmcobWQsIG10LCAmQUNDRVNTX0ZCSU5GTyhodykubWF2ZW4pOworCXJldHVybiBtYXZlbl9jb21wdXRlX3RpbW1pbmcobWQsIG10LCAmbWluZm8tPmh3Lm1hdmVuKTsKICN1bmRlZiBtaW5mbwogI3VuZGVmIG1kaW5mbwogfQpAQCAtMTE0MCw3ICsxMTQwLDcgQEAKIHN0YXRpYyBpbnQgbWF2ZW5fb3V0X3Byb2dyYW0odm9pZCogbWQpIHsKICNkZWZpbmUgbWRpbmZvICgoc3RydWN0IG1hdmVuX2RhdGEqKW1kKQogI2RlZmluZSBtaW5mbyAobWRpbmZvLT5wcmltYXJ5X2hlYWQpCi0JcmV0dXJuIG1hdmVuX3Byb2dyYW1fdGltbWluZyhtZCwgJkFDQ0VTU19GQklORk8oaHcpLm1hdmVuKTsKKwlyZXR1cm4gbWF2ZW5fcHJvZ3JhbV90aW1taW5nKG1kLCAmbWluZm8tPmh3Lm1hdmVuKTsKICN1bmRlZiBtaW5mbwogI3VuZGVmIG1kaW5mbwogfQpAQCAtMTE4NCwxNiArMTE4NCwxOCBAQAogCiBzdGF0aWMgaW50IG1hdmVuX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50KiBjbG50KSB7CiAJc3RydWN0IG1hdmVuX2RhdGEqIG1kID0gaTJjX2dldF9jbGllbnRkYXRhKGNsbnQpOwotCU1JTkZPX0ZST00oY29udGFpbmVyX29mKGNsbnQtPmFkYXB0ZXIsIHN0cnVjdCBpMmNfYml0X2FkYXB0ZXIsIGFkYXB0ZXIpLT5taW5mbyk7CisJc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyA9IGNvbnRhaW5lcl9vZihjbG50LT5hZGFwdGVyLAorCQkJCQkJICAgIHN0cnVjdCBpMmNfYml0X2FkYXB0ZXIsCisJCQkJCQkgICAgYWRhcHRlciktPm1pbmZvOwogCi0JbWQtPnByaW1hcnlfaGVhZCA9IE1JTkZPOworCW1kLT5wcmltYXJ5X2hlYWQgPSBtaW5mbzsKIAltZC0+Y2xpZW50ID0gY2xudDsKLQlkb3duX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7Ci0JQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5vdXRwdXQgPSAmbWF2ZW5fYWx0b3V0OwotCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuc3JjID0gQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kZWZhdWx0X3NyYzsKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLmRhdGEgPSBtZDsKLQlBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLm1vZGUgPSBNQVRST1hGQl9PVVRQVVRfTU9ERV9NT05JVE9SOwotCXVwX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7CisJZG93bl93cml0ZSgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwltaW5mby0+b3V0cHV0c1sxXS5vdXRwdXQgPSAmbWF2ZW5fYWx0b3V0OworCW1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9IG1pbmZvLT5vdXRwdXRzWzFdLmRlZmF1bHRfc3JjOworCW1pbmZvLT5vdXRwdXRzWzFdLmRhdGEgPSBtZDsKKwltaW5mby0+b3V0cHV0c1sxXS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwl1cF93cml0ZSgmbWluZm8tPmFsdG91dC5sb2NrKTsKIAlpZiAobWF2ZW5fZ2V0X3JlZyhjbG50LCAweEIyKSA8IDB4MTQpIHsKIAkJbWQtPnZlcnNpb24gPSBNR0FUVk9fQjsKIAkJLyogVHdlYWsgc29tZSB0aGluZ3MgZm9yIHRoaXMgb2xkIGNoaXAgKi8KQEAgLTEyMTgsMTQgKzEyMjAsMTQgQEAKIAlzdHJ1Y3QgbWF2ZW5fZGF0YSogbWQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xudCk7CiAKIAlpZiAobWQtPnByaW1hcnlfaGVhZCkgewotCQlNSU5GT19GUk9NKG1kLT5wcmltYXJ5X2hlYWQpOworCQlzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvID0gbWQtPnByaW1hcnlfaGVhZDsKIAotCQlkb3duX3dyaXRlKCZBQ0NFU1NfRkJJTkZPKGFsdG91dC5sb2NrKSk7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkuc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7Ci0JCUFDQ0VTU19GQklORk8ob3V0cHV0c1sxXSkub3V0cHV0ID0gTlVMTDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5kYXRhID0gTlVMTDsKLQkJQUNDRVNTX0ZCSU5GTyhvdXRwdXRzWzFdKS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKLQkJdXBfd3JpdGUoJkFDQ0VTU19GQklORk8oYWx0b3V0LmxvY2spKTsKKwkJZG93bl93cml0ZSgmbWluZm8tPmFsdG91dC5sb2NrKTsKKwkJbWluZm8tPm91dHB1dHNbMV0uc3JjID0gTUFUUk9YRkJfU1JDX05PTkU7CisJCW1pbmZvLT5vdXRwdXRzWzFdLm91dHB1dCA9IE5VTEw7CisJCW1pbmZvLT5vdXRwdXRzWzFdLmRhdGEgPSBOVUxMOworCQltaW5mby0+b3V0cHV0c1sxXS5tb2RlID0gTUFUUk9YRkJfT1VUUFVUX01PREVfTU9OSVRPUjsKKwkJdXBfd3JpdGUoJm1pbmZvLT5hbHRvdXQubG9jayk7CiAJCW1kLT5wcmltYXJ5X2hlYWQgPSBOVUxMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuYwppbmRleCA1YjVmMDcyLi45OTQ4Y2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWlzYy5jCkBAIC04OSwxMyArODksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tYXRyb3hmYi5oPgogCi12b2lkIG1hdHJveGZiX0RBQ19vdXQoQ1BNSU5GTyBpbnQgcmVnLCBpbnQgdmFsKSB7Cit2b2lkIG1hdHJveGZiX0RBQ19vdXQoY29uc3Qgc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgaW50IHJlZywgaW50IHZhbCkKK3sKIAlEQkdfUkVHKF9fZnVuY19fKQogCW1nYV9vdXRiKE1fUkFNREFDX0JBU0UrTV9YX0lOREVYLCByZWcpOwogCW1nYV9vdXRiKE1fUkFNREFDX0JBU0UrTV9YX0RBVEFSRUcsIHZhbCk7CiB9CiAKLWludCBtYXRyb3hmYl9EQUNfaW4oQ1BNSU5GTyBpbnQgcmVnKSB7CitpbnQgbWF0cm94ZmJfREFDX2luKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sIGludCByZWcpCit7CiAJREJHX1JFRyhfX2Z1bmNfXykKIAltZ2Ffb3V0YihNX1JBTURBQ19CQVNFK01fWF9JTkRFWCwgcmVnKTsKIAlyZXR1cm4gbWdhX2luYihNX1JBTURBQ19CQVNFK01fWF9EQVRBUkVHKTsKQEAgLTE4NCwxMyArMTg2LDE0IEBACiAJcmV0dXJuIGJlc3R2Y287CiB9CiAKLWludCBtYXRyb3hmYl92Z2FIV2luaXQoV1BNSU5GTyBzdHJ1Y3QgbXlfdGltbWluZyogbSkgeworaW50IG1hdHJveGZiX3ZnYUhXaW5pdChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLCBzdHJ1Y3QgbXlfdGltbWluZyAqbSkKK3sKIAl1bnNpZ25lZCBpbnQgaGQsIGhzLCBoZSwgaGJlLCBodDsKIAl1bnNpZ25lZCBpbnQgdmQsIHZzLCB2ZSwgdnQsIGxjOwogCXVuc2lnbmVkIGludCB3ZDsKIAl1bnNpZ25lZCBpbnQgZGl2aWRlcjsKIAlpbnQgaTsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICogY29uc3QgaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqIGNvbnN0IGh3ID0gJm1pbmZvLT5odzsKIAogCURCRyhfX2Z1bmNfXykKIApAQCAtMjQwLDcgKzI0Myw3IEBACiAJLyogc3RhbmRhcmQgdGltbWluZ3MgYXJlIGluIDhwaXhlbHMsIGJ1dCBmb3IgaW50ZXJsZWF2ZWQgd2UgY2Fubm90ICovCiAJLyogZG8gaXQgZm9yIDRicHAgKGJlY2F1c2Ugb2YgKDRicHAgPj4gMShpbnRlcmxlYXZlZCkpLzQgPT0gMCkgKi8KIAkvKiB1c2luZyAxNiBvciBtb3JlIHBpeGVscyBwZXIgdW5pdCBjYW4gc2F2ZSB1cyAqLwotCWRpdmlkZXIgPSBBQ0NFU1NfRkJJTkZPKGN1cnIuZmluYWxfYnBwU2hpZnQpOworCWRpdmlkZXIgPSBtaW5mby0+Y3Vyci5maW5hbF9icHBTaGlmdDsKIAl3aGlsZSAoZGl2aWRlciAmIDMpIHsKIAkJaGQgPj49IDE7CiAJCWhzID4+PSAxOwpAQCAtMjcwLDcgKzI3Myw3IEBACiAJaWYgKCgoaHQgJiAweDA3KSA9PSAweDA2KSB8fCAoKGh0ICYgMHgwRikgPT0gMHgwNCkpCiAJCWh0Kys7CiAJaGJlID0gaHQ7Ci0Jd2QgPSBBQ0NFU1NfRkJJTkZPKGZiY29uKS52YXIueHJlc192aXJ0dWFsICogQUNDRVNTX0ZCSU5GTyhjdXJyLmZpbmFsX2JwcFNoaWZ0KSAvIDY0OworCXdkID0gbWluZm8tPmZiY29uLnZhci54cmVzX3ZpcnR1YWwgKiBtaW5mby0+Y3Vyci5maW5hbF9icHBTaGlmdCAvIDY0OwogCiAJaHctPkNSVENFWFRbMF0gPSAwOwogCWh3LT5DUlRDRVhUWzVdID0gMDsKQEAgLTI4Nyw3ICsyOTAsNyBAQAogCQkJICAoKGhzICAgICAgJiAweDEwMCkgPj4gNikgfCAvKiBzeW5jIHN0YXJ0ICovCiAJCQkgICAoaGJlICAgICAmIDB4MDQwKTsJIC8qIGVuZCBob3IuIGJsYW5raW5nICovCiAJLyogRklYTUU6IEVuYWJsZSB2aWRyc3Qgb25seSBvbiBHNDAwLCBhbmQgb25seSBpZiBUVi1vdXQgaXMgdXNlZCAqLwotCWlmIChBQ0NFU1NfRkJJTkZPKG91dHB1dHNbMV0pLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpCisJaWYgKG1pbmZvLT5vdXRwdXRzWzFdLnNyYyA9PSBNQVRST1hGQl9TUkNfQ1JUQzEpCiAJCWh3LT5DUlRDRVhUWzFdIHw9IDB4ODg7CQkvKiBlbmFibGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdmlkcnN0ICovCiAJaHctPkNSVENFWFRbMl0gPSAgKCh2dCAmIDB4QzAwKSA+PiAxMCkgfAogCQkJICAoKHZkICYgMHg0MDApID4+ICA4KSB8CS8qIGRpc3AgZW5kICovCkBAIC0zMzEsOSArMzM0LDEwIEBACiAJcmV0dXJuIDA7CiB9OwogCi12b2lkIG1hdHJveGZiX3ZnYUhXcmVzdG9yZShXUE1JTkZPMikgewordm9pZCBtYXRyb3hmYl92Z2FIV3Jlc3RvcmUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAlpbnQgaTsKLQlzdHJ1Y3QgbWF0cm94X2h3X3N0YXRlICogY29uc3QgaHcgPSAmQUNDRVNTX0ZCSU5GTyhodyk7CisJc3RydWN0IG1hdHJveF9od19zdGF0ZSAqIGNvbnN0IGh3ID0gJm1pbmZvLT5odzsKIAlDUklURkxBR1MKIAogCURCRyhfX2Z1bmNfXykKQEAgLTUyMiw3ICs1MjYsOSBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfcGluczEoV1BNSU5GTyBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MqIGJkKSB7CitzdGF0aWMgaW50IHBhcnNlX3BpbnMxKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MgKmJkKQorewogCXVuc2lnbmVkIGludCBtYXhkYWM7CiAKIAlzd2l0Y2ggKGJkLT5waW5zWzIyXSkgewpAQCAtNTMzLDE3MyArNTM5LDE4OCBAQAogCWlmIChnZXRfdW5hbGlnbmVkX2xlMTYoYmQtPnBpbnMgKyAyNCkpIHsKIAkJbWF4ZGFjID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGJkLT5waW5zICsgMjQpICogMTA7CiAJfQotCU1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWF4ID0gbWF4ZGFjOwotCU1JTkZPLT52YWx1ZXMucGxsLnN5c3RlbSA9IGdldF91bmFsaWduZWRfbGUxNihiZC0+cGlucyArIDI4KSA/CisJbWluZm8tPmxpbWl0cy5waXhlbC52Y29tYXggPSBtYXhkYWM7CisJbWluZm8tPnZhbHVlcy5wbGwuc3lzdGVtID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGJkLT5waW5zICsgMjgpID8KIAkJZ2V0X3VuYWxpZ25lZF9sZTE2KGJkLT5waW5zICsgMjgpICogMTAgOiA1MDAwMDsKIAkvKiBpZ25vcmUgNE1CLCA4TUIsIG1vZHVsZSBjbG9ja3MgKi8KLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxID0gMTQzMTg7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDAwMDMwMTAxOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEgPSAxNDMxODsKKwltaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IDB4MDAwMzAxMDE7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfcGluczEoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIGRlZmF1bHRfcGluczEoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAkvKiBNaWxsZW5uaXVtICovCi0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJPSAyMjAwMDA7Ci0JTUlORk8tPnZhbHVlcy5wbGwuc3lzdGVtCT0gIDUwMDAwOwotCU1JTkZPLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAgMTQzMTg7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDAwMDMwMTAxOworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0gMjIwMDAwOworCW1pbmZvLT52YWx1ZXMucGxsLnN5c3RlbQk9ICA1MDAwMDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gIDE0MzE4OworCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwMDAzMDEwMTsKIH0KIAotc3RhdGljIGludCBwYXJzZV9waW5zMihXUE1JTkZPIGNvbnN0IHN0cnVjdCBtYXRyb3hfYmlvcyogYmQpIHsKLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk9Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gKGJkLT5waW5zWzQxXSA9PSAweEZGKSA/IDIzMDAwMCA6ICgoYmQtPnBpbnNbNDFdICsgMTAwKSAqIDEwMDApOwotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gKChiZC0+cGluc1s1MV0gJiAweDAxKSA/IDB4MDAwMDAwMDEgOiAwKSB8CitzdGF0aWMgaW50IHBhcnNlX3BpbnMyKHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MgKmJkKQoreworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAoYmQtPnBpbnNbNDFdID09IDB4RkYpID8gMjMwMDAwIDogKChiZC0+cGluc1s0MV0gKyAxMDApICogMTAwMCk7CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAoKGJkLT5waW5zWzUxXSAmIDB4MDEpID8gMHgwMDAwMDAwMSA6IDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzUxXSAmIDB4MDIpID8gMHgwMDAwMDEwMCA6IDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzUxXSAmIDB4MDQpID8gMHgwMDAxMDAwMCA6IDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzUxXSAmIDB4MDgpID8gMHgwMDAyMDAwMCA6IDApOwotCU1JTkZPLT52YWx1ZXMucGxsLnN5c3RlbQk9IChiZC0+cGluc1s0M10gPT0gMHhGRikgPyA1MDAwMCA6ICgoYmQtPnBpbnNbNDNdICsgMTAwKSAqIDEwMDApOwotCU1JTkZPLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAxNDMxODsKKwltaW5mby0+dmFsdWVzLnBsbC5zeXN0ZW0JPSAoYmQtPnBpbnNbNDNdID09IDB4RkYpID8gNTAwMDAgOiAoKGJkLT5waW5zWzQzXSArIDEwMCkgKiAxMDAwKTsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gMTQzMTg7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfcGluczIoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIGRlZmF1bHRfcGluczIoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAkvKiBNaWxsZW5uaXVtIElJLCBNeXN0aXF1ZSAqLwotCU1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KLQlNSU5GTy0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAyMzAwMDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDAwMDMwMTAxOwotCU1JTkZPLT52YWx1ZXMucGxsLnN5c3RlbQk9ICA1MDAwMDsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gIDE0MzE4OworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAyMzAwMDA7CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDAwMDMwMTAxOworCW1pbmZvLT52YWx1ZXMucGxsLnN5c3RlbQk9ICA1MDAwMDsKKwltaW5mby0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gIDE0MzE4OwogfQogCi1zdGF0aWMgaW50IHBhcnNlX3BpbnMzKFdQTUlORk8gY29uc3Qgc3RydWN0IG1hdHJveF9iaW9zKiBiZCkgewotCU1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KLQlNSU5GTy0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAoYmQtPnBpbnNbMzZdID09IDB4RkYpID8gMjMwMDAwCQkJOiAoKGJkLT5waW5zWzM2XSArIDEwMCkgKiAxMDAwKTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDQ4KSA9PSAweEZGRkZGRkZGID8KK3N0YXRpYyBpbnQgcGFyc2VfcGluczMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBtYXRyb3hfYmlvcyAqYmQpCit7CisJbWluZm8tPmxpbWl0cy5waXhlbC52Y29tYXgJPQorCW1pbmZvLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IChiZC0+cGluc1szNl0gPT0gMHhGRikgPyAyMzAwMDAJCQk6ICgoYmQtPnBpbnNbMzZdICsgMTAwKSAqIDEwMDApOworCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgNDgpID09IDB4RkZGRkZGRkYgPwogCQkweDAxMjUwQTIxIDogZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgNDgpOwogCS8qIG1lbW9yeSBjb25maWcgKi8KLQlNSU5GTy0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gKChiZC0+cGluc1s1N10gPDwgMjEpICYgMHgxRTAwMDAwMCkgfAorCW1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmsJPSAoKGJkLT5waW5zWzU3XSA8PCAyMSkgJiAweDFFMDAwMDAwKSB8CiAJCQkJCSAgKChiZC0+cGluc1s1N10gPDwgMjIpICYgMHgwMEMwMDAwMCkgfAogCQkJCQkgICgoYmQtPnBpbnNbNTZdIDw8ICAxKSAmIDB4MDAwMDAxRTApIHwKIAkJCQkJICAoIGJkLT5waW5zWzU2XSAgICAgICAgJiAweDAwMDAwMDBGKTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQJCT0gKGJkLT5waW5zWzU0XSAmIDcpIDw8IDEwOwotCU1JTkZPLT52YWx1ZXMucmVnLm9wdDIJCT0gYmQtPnBpbnNbNThdIDw8IDEyOwotCU1JTkZPLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAoYmQtPnBpbnNbNTJdICYgMHgyMCkgPyAxNDMxOCA6IDI3MDAwOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdAkJPSAoYmQtPnBpbnNbNTRdICYgNykgPDwgMTA7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0MgkJPSBiZC0+cGluc1s1OF0gPDwgMTI7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9IChiZC0+cGluc1s1Ml0gJiAweDIwKSA/IDE0MzE4IDogMjcwMDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfcGluczMoV1BNSU5GTzIpIHsKK3N0YXRpYyB2b2lkIGRlZmF1bHRfcGluczMoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbykKK3sKIAkvKiBHMTAwLCBHMjAwICovCi0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJPQotCU1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IDIzMDAwMDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IDB4MDEyNTBBMjE7Ci0JTUlORk8tPnZhbHVlcy5yZWcubWVtcmRiawk9IDB4MDAwMDAwMDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0CQk9IDB4MDAwMDBDMDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0MgkJPSAweDAwMDAwMDAwOwotCU1JTkZPLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAgMjcwMDA7CisJbWluZm8tPmxpbWl0cy5waXhlbC52Y29tYXgJPQorCW1pbmZvLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IDIzMDAwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IDB4MDEyNTBBMjE7CisJbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiawk9IDB4MDAwMDAwMDA7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0CQk9IDB4MDAwMDBDMDA7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0MgkJPSAweDAwMDAwMDAwOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAgMjcwMDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfcGluczQoV1BNSU5GTyBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MqIGJkKSB7Ci0JTUlORk8tPmxpbWl0cy5waXhlbC52Y29tYXgJPSAoYmQtPnBpbnNbIDM5XSA9PSAweEZGKSA/IDIzMDAwMAkJCTogYmQtPnBpbnNbIDM5XSAqIDQwMDA7Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gKGJkLT5waW5zWyAzOF0gPT0gMHhGRikgPyBNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk6IGJkLT5waW5zWyAzOF0gKiA0MDAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgNzEpOwotCU1JTkZPLT52YWx1ZXMucmVnLm1lbXJkYmsJPSAoKGJkLT5waW5zWzg3XSA8PCAyMSkgJiAweDFFMDAwMDAwKSB8CitzdGF0aWMgaW50IHBhcnNlX3BpbnM0KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWF0cm94X2Jpb3MgKmJkKQoreworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0gKGJkLT5waW5zWyAzOV0gPT0gMHhGRikgPyAyMzAwMDAJCQk6IGJkLT5waW5zWyAzOV0gKiA0MDAwOworCW1pbmZvLT5saW1pdHMuc3lzdGVtLnZjb21heAk9IChiZC0+cGluc1sgMzhdID09IDB4RkYpID8gbWluZm8tPmxpbWl0cy5waXhlbC52Y29tYXgJOiBiZC0+cGluc1sgMzhdICogNDAwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDcxKTsKKwltaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gKChiZC0+cGluc1s4N10gPDwgMjEpICYgMHgxRTAwMDAwMCkgfAogCQkJCQkgICgoYmQtPnBpbnNbODddIDw8IDIyKSAmIDB4MDBDMDAwMDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzg2XSA8PCAgMSkgJiAweDAwMDAwMUUwKSB8CiAJCQkJCSAgKCBiZC0+cGluc1s4Nl0gICAgICAgICYgMHgwMDAwMDAwRik7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0CQk9ICgoYmQtPnBpbnNbNTNdIDw8IDE1KSAmIDB4MDA0MDAwMDApIHwKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQJCT0gKChiZC0+cGluc1s1M10gPDwgMTUpICYgMHgwMDQwMDAwMCkgfAogCQkJCQkgICgoYmQtPnBpbnNbNTNdIDw8IDIyKSAmIDB4MTAwMDAwMDApIHwKIAkJCQkJICAoKGJkLT5waW5zWzUzXSA8PCAgNykgJiAweDAwMDAxQzAwKTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQzCQk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDY3KTsKLQlNSU5GTy0+dmFsdWVzLnBsbC5zeXN0ZW0JPSAoYmQtPnBpbnNbIDY1XSA9PSAweEZGKSA/IDIwMDAwMCAJCQk6IGJkLT5waW5zWyA2NV0gKiA0MDAwOwotCU1JTkZPLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAoYmQtPnBpbnNbIDkyXSAmIDB4MDEpID8gMTQzMTggOiAyNzAwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQzCQk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDY3KTsKKwltaW5mby0+dmFsdWVzLnBsbC5zeXN0ZW0JPSAoYmQtPnBpbnNbIDY1XSA9PSAweEZGKSA/IDIwMDAwMCAJCQk6IGJkLT5waW5zWyA2NV0gKiA0MDAwOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAoYmQtPnBpbnNbIDkyXSAmIDB4MDEpID8gMTQzMTggOiAyNzAwMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGVmYXVsdF9waW5zNChXUE1JTkZPMikgeworc3RhdGljIHZvaWQgZGVmYXVsdF9waW5zNChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCS8qIEc0MDAgKi8KLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk9Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gMjUyMDAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwNEE0NTBBMTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gMHgwMDAwMDBFNzsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQJCT0gMHgxMDAwMDQwMDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQzCQk9IDB4MDE5MEE0MTk7Ci0JTUlORk8tPnZhbHVlcy5wbGwuc3lzdGVtCT0gMjAwMDAwOwotCU1JTkZPLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAyNzAwMDsKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21heAk9CisJbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gMjUyMDAwOworCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwNEE0NTBBMTsKKwltaW5mby0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gMHgwMDAwMDBFNzsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQJCT0gMHgxMDAwMDQwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQzCQk9IDB4MDE5MEE0MTk7CisJbWluZm8tPnZhbHVlcy5wbGwuc3lzdGVtCT0gMjAwMDAwOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAyNzAwMDsKIH0KIAotc3RhdGljIGludCBwYXJzZV9waW5zNShXUE1JTkZPIGNvbnN0IHN0cnVjdCBtYXRyb3hfYmlvcyogYmQpIHsKK3N0YXRpYyBpbnQgcGFyc2VfcGluczUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBtYXRyb3hfYmlvcyAqYmQpCit7CiAJdW5zaWduZWQgaW50IG11bHQ7CiAJCiAJbXVsdCA9IGJkLT5waW5zWzRdPzgwMDA6NjAwMDsKIAkKLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk9IChiZC0+cGluc1sgMzhdID09IDB4RkYpID8gNjAwMDAwCQkJOiBiZC0+cGluc1sgMzhdICogbXVsdDsKLQlNSU5GTy0+bGltaXRzLnN5c3RlbS52Y29tYXgJPSAoYmQtPnBpbnNbIDM2XSA9PSAweEZGKSA/IE1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWF4CTogYmQtPnBpbnNbIDM2XSAqIG11bHQ7Ci0JTUlORk8tPmxpbWl0cy52aWRlby52Y29tYXgJPSAoYmQtPnBpbnNbIDM3XSA9PSAweEZGKSA/IE1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21heAk6IGJkLT5waW5zWyAzN10gKiBtdWx0OwotCU1JTkZPLT5saW1pdHMucGl4ZWwudmNvbWluCT0gKGJkLT5waW5zWzEyM10gPT0gMHhGRikgPyAyNTYwMDAJCQk6IGJkLT5waW5zWzEyM10gKiBtdWx0OwotCU1JTkZPLT5saW1pdHMuc3lzdGVtLnZjb21pbgk9IChiZC0+cGluc1sxMjFdID09IDB4RkYpID8gTUlORk8tPmxpbWl0cy5waXhlbC52Y29taW4JOiBiZC0+cGluc1sxMjFdICogbXVsdDsKLQlNSU5GTy0+bGltaXRzLnZpZGVvLnZjb21pbgk9IChiZC0+cGluc1sxMjJdID09IDB4RkYpID8gTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWluCTogYmQtPnBpbnNbMTIyXSAqIG11bHQ7Ci0JTUlORk8tPnZhbHVlcy5wbGwuc3lzdGVtCT0KLQlNSU5GTy0+dmFsdWVzLnBsbC52aWRlbwkJPSAoYmQtPnBpbnNbIDkyXSA9PSAweEZGKSA/IDI4NDAwMAkJCTogYmQtPnBpbnNbIDkyXSAqIDQwMDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0CQk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDQ4KTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQyCQk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDUyKTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQzCQk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDk0KTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdAk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDk4KTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tZW1taXNjCT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgMTAyKTsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJkLT5waW5zICsgMTA2KTsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gKGJkLT5waW5zWzExMF0gJiAweDAxKSA/IDE0MzE4IDogMjcwMDA7Ci0JTUlORk8tPnZhbHVlcy5tZW1vcnkuZGRyCT0gKGJkLT5waW5zWzExNF0gJiAweDYwKSA9PSAweDIwOwotCU1JTkZPLT52YWx1ZXMubWVtb3J5LmRsbAk9IChiZC0+cGluc1sxMTVdICYgMHgwMikgIT0gMDsKLQlNSU5GTy0+dmFsdWVzLm1lbW9yeS5lbXJzd2VuCT0gKGJkLT5waW5zWzExNV0gJiAweDAxKSAhPSAwOwotCU1JTkZPLT52YWx1ZXMucmVnLm1hY2Nlc3MJPSBNSU5GTy0+dmFsdWVzLm1lbW9yeS5lbXJzd2VuID8gMHgwMDAwNDAwMCA6IDB4MDAwMDAwMDA7CisJbWluZm8tPmxpbWl0cy5waXhlbC52Y29tYXgJPSAoYmQtPnBpbnNbIDM4XSA9PSAweEZGKSA/IDYwMDAwMAkJCTogYmQtPnBpbnNbIDM4XSAqIG11bHQ7CisJbWluZm8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0gKGJkLT5waW5zWyAzNl0gPT0gMHhGRikgPyBtaW5mby0+bGltaXRzLnBpeGVsLnZjb21heAk6IGJkLT5waW5zWyAzNl0gKiBtdWx0OworCW1pbmZvLT5saW1pdHMudmlkZW8udmNvbWF4CT0gKGJkLT5waW5zWyAzN10gPT0gMHhGRikgPyBtaW5mby0+bGltaXRzLnN5c3RlbS52Y29tYXgJOiBiZC0+cGluc1sgMzddICogbXVsdDsKKwltaW5mby0+bGltaXRzLnBpeGVsLnZjb21pbgk9IChiZC0+cGluc1sxMjNdID09IDB4RkYpID8gMjU2MDAwCQkJOiBiZC0+cGluc1sxMjNdICogbXVsdDsKKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29taW4JPSAoYmQtPnBpbnNbMTIxXSA9PSAweEZGKSA/IG1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWluCTogYmQtPnBpbnNbMTIxXSAqIG11bHQ7CisJbWluZm8tPmxpbWl0cy52aWRlby52Y29taW4JPSAoYmQtPnBpbnNbMTIyXSA9PSAweEZGKSA/IG1pbmZvLT5saW1pdHMuc3lzdGVtLnZjb21pbgk6IGJkLT5waW5zWzEyMl0gKiBtdWx0OworCW1pbmZvLT52YWx1ZXMucGxsLnN5c3RlbQk9CisJbWluZm8tPnZhbHVlcy5wbGwudmlkZW8JCT0gKGJkLT5waW5zWyA5Ml0gPT0gMHhGRikgPyAyODQwMDAJCQk6IGJkLT5waW5zWyA5Ml0gKiA0MDAwOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdAkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA0OCk7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0MgkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA1Mik7CisJbWluZm8tPnZhbHVlcy5yZWcub3B0MwkJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA5NCk7CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSBnZXRfdW5hbGlnbmVkX2xlMzIoYmQtPnBpbnMgKyA5OCk7CisJbWluZm8tPnZhbHVlcy5yZWcubWVtbWlzYwk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDEwMik7CisJbWluZm8tPnZhbHVlcy5yZWcubWVtcmRiawk9IGdldF91bmFsaWduZWRfbGUzMihiZC0+cGlucyArIDEwNik7CisJbWluZm8tPmZlYXR1cmVzLnBsbC5yZWZfZnJlcQk9IChiZC0+cGluc1sxMTBdICYgMHgwMSkgPyAxNDMxOCA6IDI3MDAwOworCW1pbmZvLT52YWx1ZXMubWVtb3J5LmRkcgk9IChiZC0+cGluc1sxMTRdICYgMHg2MCkgPT0gMHgyMDsKKwltaW5mby0+dmFsdWVzLm1lbW9yeS5kbGwJPSAoYmQtPnBpbnNbMTE1XSAmIDB4MDIpICE9IDA7CisJbWluZm8tPnZhbHVlcy5tZW1vcnkuZW1yc3dlbgk9IChiZC0+cGluc1sxMTVdICYgMHgwMSkgIT0gMDsKKwltaW5mby0+dmFsdWVzLnJlZy5tYWNjZXNzCT0gbWluZm8tPnZhbHVlcy5tZW1vcnkuZW1yc3dlbiA/IDB4MDAwMDQwMDAgOiAweDAwMDAwMDAwOwogCWlmIChiZC0+cGluc1sxMTVdICYgNCkgewotCQlNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdF9jb3JlID0gTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3Q7CisJCW1pbmZvLT52YWx1ZXMucmVnLm1jdGx3dHN0X2NvcmUgPSBtaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdDsKIAl9IGVsc2UgewogCQl1X2ludDMyX3Qgd3RzdF94bGF0W10gPSB7IDAsIDEsIDUsIDYsIDcsIDUsIDIsIDMgfTsKLQkJTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3RfY29yZSA9IChNSU5GTy0+dmFsdWVzLnJlZy5tY3Rsd3RzdCAmIH43KSB8Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3dHN0X3hsYXRbTUlORk8tPnZhbHVlcy5yZWcubWN0bHd0c3QgJiA3XTsKKwkJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3RfY29yZSA9IChtaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdCAmIH43KSB8CisJCQkJCQkgIHd0c3RfeGxhdFttaW5mby0+dmFsdWVzLnJlZy5tY3Rsd3RzdCAmIDddOwogCX0KLQlNSU5GTy0+bWF4X3BpeGVsX2Nsb2NrX3BhbmVsbGluayA9IGJkLT5waW5zWzQ3XSAqIDQwMDA7CisJbWluZm8tPm1heF9waXhlbF9jbG9ja19wYW5lbGxpbmsgPSBiZC0+cGluc1s0N10gKiA0MDAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnM1KFdQTUlORk8yKSB7CitzdGF0aWMgdm9pZCBkZWZhdWx0X3BpbnM1KHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8pCit7CiAJLyogTWluZSAxNk1CIEc0NTAgd2l0aCBTRFJBTSBERFIgKi8KLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21heAk9Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWF4CT0KLQlNSU5GTy0+bGltaXRzLnZpZGVvLnZjb21heAk9IDYwMDAwMDsKLQlNSU5GTy0+bGltaXRzLnBpeGVsLnZjb21pbgk9Ci0JTUlORk8tPmxpbWl0cy5zeXN0ZW0udmNvbWluCT0KLQlNSU5GTy0+bGltaXRzLnZpZGVvLnZjb21pbgk9IDI1NjAwMDsKLQlNSU5GTy0+dmFsdWVzLnBsbC5zeXN0ZW0JPQotCU1JTkZPLT52YWx1ZXMucGxsLnZpZGVvCQk9IDI4NDAwMDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQJCT0gMHg0MDRBMTE2MDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5vcHQyCQk9IDB4MDAwMEFDMDA7Ci0JTUlORk8tPnZhbHVlcy5yZWcub3B0MwkJPSAweDAwOTBBNDA5OwotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0X2NvcmUJPQotCU1JTkZPLT52YWx1ZXMucmVnLm1jdGx3dHN0CT0gMHgwQzgxNDYyQjsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tZW1taXNjCT0gMHg4MDAwMDAwNDsKLQlNSU5GTy0+dmFsdWVzLnJlZy5tZW1yZGJrCT0gMHgwMTAwMTEwMzsKLQlNSU5GTy0+ZmVhdHVyZXMucGxsLnJlZl9mcmVxCT0gMjcwMDA7Ci0JTUlORk8tPnZhbHVlcy5tZW1vcnkuZGRyCT0gMTsKLQlNSU5GTy0+dmFsdWVzLm1lbW9yeS5kbGwJPSAxOwotCU1JTkZPLT52YWx1ZXMubWVtb3J5LmVtcnN3ZW4JPSAxOwotCU1JTkZPLT52YWx1ZXMucmVnLm1hY2Nlc3MJPSAweDAwMDA0MDAwOworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWF4CT0KKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29tYXgJPQorCW1pbmZvLT5saW1pdHMudmlkZW8udmNvbWF4CT0gNjAwMDAwOworCW1pbmZvLT5saW1pdHMucGl4ZWwudmNvbWluCT0KKwltaW5mby0+bGltaXRzLnN5c3RlbS52Y29taW4JPQorCW1pbmZvLT5saW1pdHMudmlkZW8udmNvbWluCT0gMjU2MDAwOworCW1pbmZvLT52YWx1ZXMucGxsLnN5c3RlbQk9CisJbWluZm8tPnZhbHVlcy5wbGwudmlkZW8JCT0gMjg0MDAwOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdAkJPSAweDQwNEExMTYwOworCW1pbmZvLT52YWx1ZXMucmVnLm9wdDIJCT0gMHgwMDAwQUMwMDsKKwltaW5mby0+dmFsdWVzLnJlZy5vcHQzCQk9IDB4MDA5MEE0MDk7CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3RfY29yZQk9CisJbWluZm8tPnZhbHVlcy5yZWcubWN0bHd0c3QJPSAweDBDODE0NjJCOworCW1pbmZvLT52YWx1ZXMucmVnLm1lbW1pc2MJPSAweDgwMDAwMDA0OworCW1pbmZvLT52YWx1ZXMucmVnLm1lbXJkYmsJPSAweDAxMDAxMTAzOworCW1pbmZvLT5mZWF0dXJlcy5wbGwucmVmX2ZyZXEJPSAyNzAwMDsKKwltaW5mby0+dmFsdWVzLm1lbW9yeS5kZHIJPSAxOworCW1pbmZvLT52YWx1ZXMubWVtb3J5LmRsbAk9IDE7CisJbWluZm8tPnZhbHVlcy5tZW1vcnkuZW1yc3dlbgk9IDE7CisJbWluZm8tPnZhbHVlcy5yZWcubWFjY2Vzcwk9IDB4MDAwMDQwMDA7CiB9CiAKLXN0YXRpYyBpbnQgbWF0cm94ZmJfc2V0X2xpbWl0cyhXUE1JTkZPIGNvbnN0IHN0cnVjdCBtYXRyb3hfYmlvcyogYmQpIHsKK3N0YXRpYyBpbnQgbWF0cm94ZmJfc2V0X2xpbWl0cyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtYXRyb3hfYmlvcyAqYmQpCit7CiAJdW5zaWduZWQgaW50IHBpbnNfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBpbnNsZW5bXSA9IHsgNjQsIDY0LCA2NCwgMTI4LCAxMjggfTsKIAotCXN3aXRjaCAoQUNDRVNTX0ZCSU5GTyhjaGlwKSkgewotCQljYXNlIE1HQV8yMDY0OglkZWZhdWx0X3BpbnMxKFBNSU5GTzIpOyBicmVhazsKKwlzd2l0Y2ggKG1pbmZvLT5jaGlwKSB7CisJCWNhc2UgTUdBXzIwNjQ6CWRlZmF1bHRfcGluczEobWluZm8pOyBicmVhazsKIAkJY2FzZSBNR0FfMjE2NDoKIAkJY2FzZSBNR0FfMTA2NDoKLQkJY2FzZSBNR0FfMTE2NDoJZGVmYXVsdF9waW5zMihQTUlORk8yKTsgYnJlYWs7CisJCWNhc2UgTUdBXzExNjQ6CWRlZmF1bHRfcGluczIobWluZm8pOyBicmVhazsKIAkJY2FzZSBNR0FfRzEwMDoKLQkJY2FzZSBNR0FfRzIwMDoJZGVmYXVsdF9waW5zMyhQTUlORk8yKTsgYnJlYWs7Ci0JCWNhc2UgTUdBX0c0MDA6CWRlZmF1bHRfcGluczQoUE1JTkZPMik7IGJyZWFrOworCQljYXNlIE1HQV9HMjAwOglkZWZhdWx0X3BpbnMzKG1pbmZvKTsgYnJlYWs7CisJCWNhc2UgTUdBX0c0MDA6CWRlZmF1bHRfcGluczQobWluZm8pOyBicmVhazsKIAkJY2FzZSBNR0FfRzQ1MDoKLQkJY2FzZSBNR0FfRzU1MDoJZGVmYXVsdF9waW5zNShQTUlORk8yKTsgYnJlYWs7CisJCWNhc2UgTUdBX0c1NTA6CWRlZmF1bHRfcGluczUobWluZm8pOyBicmVhazsKIAl9CiAJaWYgKCFiZC0+Ymlvc192YWxpZCkgewogCQlwcmludGsoS0VSTl9JTkZPICJtYXRyb3hmYjogWW91ciBNYXRyb3ggZGV2aWNlIGRvZXMgbm90IGhhdmUgQklPU1xuIik7CkBAIC03MjQsMzggKzc0NSwzOSBAQAogCX0KIAlzd2l0Y2ggKHBpbnNfdmVyc2lvbikgewogCQljYXNlIDE6Ci0JCQlyZXR1cm4gcGFyc2VfcGluczEoUE1JTkZPIGJkKTsKKwkJCXJldHVybiBwYXJzZV9waW5zMShtaW5mbywgYmQpOwogCQljYXNlIDI6Ci0JCQlyZXR1cm4gcGFyc2VfcGluczIoUE1JTkZPIGJkKTsKKwkJCXJldHVybiBwYXJzZV9waW5zMihtaW5mbywgYmQpOwogCQljYXNlIDM6Ci0JCQlyZXR1cm4gcGFyc2VfcGluczMoUE1JTkZPIGJkKTsKKwkJCXJldHVybiBwYXJzZV9waW5zMyhtaW5mbywgYmQpOwogCQljYXNlIDQ6Ci0JCQlyZXR1cm4gcGFyc2VfcGluczQoUE1JTkZPIGJkKTsKKwkJCXJldHVybiBwYXJzZV9waW5zNChtaW5mbywgYmQpOwogCQljYXNlIDU6Ci0JCQlyZXR1cm4gcGFyc2VfcGluczUoUE1JTkZPIGJkKTsKKwkJCXJldHVybiBwYXJzZV9waW5zNShtaW5mbywgYmQpOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hdHJveGZiOiBQb3dlcnVwIGluZm8gdmVyc2lvbiAldSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwgcGluc192ZXJzaW9uKTsKIAkJCXJldHVybiAtMTsKIAl9CiB9CiAKLXZvaWQgbWF0cm94ZmJfcmVhZF9waW5zKFdQTUlORk8yKSB7Cit2b2lkIG1hdHJveGZiX3JlYWRfcGlucyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKQorewogCXUzMiBvcHQ7CiAJdTMyIGJpb3NiYXNlOwogCXUzMiBmYmJhc2U7Ci0Jc3RydWN0IHBjaV9kZXYqIHBkZXYgPSBBQ0NFU1NfRkJJTkZPKHBjaWRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtaW5mby0+cGNpZGV2OwogCQotCW1lbXNldCgmQUNDRVNTX0ZCSU5GTyhiaW9zKSwgMCwgc2l6ZW9mKEFDQ0VTU19GQklORk8oYmlvcykpKTsKKwltZW1zZXQoJm1pbmZvLT5iaW9zLCAwLCBzaXplb2YobWluZm8tPmJpb3MpKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX09QVElPTl9SRUcsICZvcHQpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX09QVElPTl9SRUcsIG9wdCB8IFBDSV9PUFRJT05fRU5BQkxFX1JPTSk7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9ST01fQUREUkVTUywgJmJpb3NiYXNlKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgQUNDRVNTX0ZCSU5GTyhkZXZmbGFncy5mYlJlc291cmNlKSwgJmZiYmFzZSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIG1pbmZvLT5kZXZmbGFncy5mYlJlc291cmNlLCAmZmJiYXNlKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9ST01fQUREUkVTUywgKGZiYmFzZSAmIFBDSV9ST01fQUREUkVTU19NQVNLKSB8IFBDSV9ST01fQUREUkVTU19FTkFCTEUpOwotCXBhcnNlX2Jpb3ModmFkZHJfdmEoQUNDRVNTX0ZCSU5GTyh2aWRlbykudmJhc2UpLCAmQUNDRVNTX0ZCSU5GTyhiaW9zKSk7CisJcGFyc2VfYmlvcyh2YWRkcl92YShtaW5mby0+dmlkZW8udmJhc2UpLCAmbWluZm8tPmJpb3MpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX1JPTV9BRERSRVNTLCBiaW9zYmFzZSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfT1BUSU9OX1JFRywgb3B0KTsKICNpZmRlZiBDT05GSUdfWDg2Ci0JaWYgKCFBQ0NFU1NfRkJJTkZPKGJpb3MpLmJpb3NfdmFsaWQpIHsKKwlpZiAoIW1pbmZvLT5iaW9zLmJpb3NfdmFsaWQpIHsKIAkJdW5zaWduZWQgY2hhciBfX2lvbWVtKiBiOwogCiAJCWIgPSBpb3JlbWFwKDB4MDAwQzAwMDAsIDY1NTM2KTsKQEAgLTc2OSwyNSArNzkxLDIxIEBACiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAibWF0cm94ZmI6IExlZ2FjeSBCSU9TIGlzIGZvciAlMDRYOiUwNFgsIHdoaWxlIHRoaXMgZGV2aWNlIGlzICUwNFg6JTA0WFxuIiwKIAkJCQkJdmVuLCBkZXYsIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcGFyc2VfYmlvcyhiLCAmQUNDRVNTX0ZCSU5GTyhiaW9zKSk7CisJCQkJcGFyc2VfYmlvcyhiLCAmbWluZm8tPmJpb3MpOwogCQkJfQogCQkJaW91bm1hcChiKTsKIAkJfQogCX0KICNlbmRpZgotCW1hdHJveGZiX3NldF9saW1pdHMoUE1JTkZPICZBQ0NFU1NfRkJJTkZPKGJpb3MpKTsKKwltYXRyb3hmYl9zZXRfbGltaXRzKG1pbmZvLCAmbWluZm8tPmJpb3MpOwogCXByaW50ayhLRVJOX0lORk8gIlBJblMgbWVtdHlwZSA9ICV1XG4iLAotCSAgICAgICAoQUNDRVNTX0ZCSU5GTyh2YWx1ZXMpLnJlZy5vcHQgJiAweDFDMDApID4+IDEwKTsKKwkgICAgICAgKG1pbmZvLT52YWx1ZXMucmVnLm9wdCAmIDB4MUMwMCkgPj4gMTApOwogfQogCiBFWFBPUlRfU1lNQk9MKG1hdHJveGZiX0RBQ19pbik7CiBFWFBPUlRfU1lNQk9MKG1hdHJveGZiX0RBQ19vdXQpOwogRVhQT1JUX1NZTUJPTChtYXRyb3hmYl92YXIybXkpOwogRVhQT1JUX1NZTUJPTChtYXRyb3hmYl9QTExfY2FsY2Nsb2NrKTsKLSNpZm5kZWYgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQKLXN0cnVjdCBtYXRyb3hfZmJfaW5mbyBtYXRyb3hmYl9nbG9iYWxfbXhpbmZvOwotRVhQT1JUX1NZTUJPTChtYXRyb3hmYl9nbG9iYWxfbXhpbmZvKTsKLSNlbmRpZgogRVhQT1JUX1NZTUJPTChtYXRyb3hmYl92Z2FIV2luaXQpOwkJLyogREFDMTA2NCwgVGkzMDI2ICovCiBFWFBPUlRfU1lNQk9MKG1hdHJveGZiX3ZnYUhXcmVzdG9yZSk7CQkvKiBEQUMxMDY0LCBUaTMwMjYgKi8KIEVYUE9SVF9TWU1CT0wobWF0cm94ZmJfcmVhZF9waW5zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuaAppbmRleCBjYjYyY2MwLi4zNTFjODIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWlzYy5oCkBAIC02LDEzICs2LDE2IEBACiAvKiBhbHNvIGZvciBtb2R1bGVzICovCiBpbnQgbWF0cm94ZmJfUExMX2NhbGNjbG9jayhjb25zdCBzdHJ1Y3QgbWF0cm94X3BsbF9mZWF0dXJlcyogcGxsLCB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGZtYXgsCiAJdW5zaWduZWQgaW50KiBpbiwgdW5zaWduZWQgaW50KiBmZWVkLCB1bnNpZ25lZCBpbnQqIHBvc3QpOwotc3RhdGljIGlubGluZSBpbnQgUExMX2NhbGNjbG9jayhDUE1JTkZPIHVuc2lnbmVkIGludCBmcmVxLCB1bnNpZ25lZCBpbnQgZm1heCwKLQkJdW5zaWduZWQgaW50KiBpbiwgdW5zaWduZWQgaW50KiBmZWVkLCB1bnNpZ25lZCBpbnQqIHBvc3QpIHsKLQlyZXR1cm4gbWF0cm94ZmJfUExMX2NhbGNjbG9jaygmQUNDRVNTX0ZCSU5GTyhmZWF0dXJlcy5wbGwpLCBmcmVxLCBmbWF4LCBpbiwgZmVlZCwgcG9zdCk7CitzdGF0aWMgaW5saW5lIGludCBQTExfY2FsY2Nsb2NrKGNvbnN0IHN0cnVjdCBtYXRyb3hfZmJfaW5mbyAqbWluZm8sCisJCQkJdW5zaWduZWQgaW50IGZyZXEsIHVuc2lnbmVkIGludCBmbWF4LAorCQkJCXVuc2lnbmVkIGludCAqaW4sIHVuc2lnbmVkIGludCAqZmVlZCwKKwkJCQl1bnNpZ25lZCBpbnQgKnBvc3QpCit7CisJcmV0dXJuIG1hdHJveGZiX1BMTF9jYWxjY2xvY2soJm1pbmZvLT5mZWF0dXJlcy5wbGwsIGZyZXEsIGZtYXgsIGluLCBmZWVkLCBwb3N0KTsKIH0KIAotaW50IG1hdHJveGZiX3ZnYUhXaW5pdChXUE1JTkZPIHN0cnVjdCBteV90aW1taW5nKiBtKTsKLXZvaWQgbWF0cm94ZmJfdmdhSFdyZXN0b3JlKFdQTUlORk8yKTsKLXZvaWQgbWF0cm94ZmJfcmVhZF9waW5zKFdQTUlORk8yKTsKK2ludCBtYXRyb3hmYl92Z2FIV2luaXQoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbywgc3RydWN0IG15X3RpbW1pbmcqIG0pOwordm9pZCBtYXRyb3hmYl92Z2FIV3Jlc3RvcmUoc3RydWN0IG1hdHJveF9mYl9pbmZvICptaW5mbyk7Cit2b2lkIG1hdHJveGZiX3JlYWRfcGlucyhzdHJ1Y3QgbWF0cm94X2ZiX2luZm8gKm1pbmZvKTsKIAogI2VuZGlmCS8qIF9fTUFUUk9YRkJfTUlTQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9tc20vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyZDZhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL01ha2VmaWxlCkBAIC0wLDAgKzEsMTkgQEAKKworIyBjb3JlIGZyYW1lYnVmZmVyCisjCitvYmoteSA6PSBtc21fZmIubworCisjIE1EUCBETUEvUFBQIGVuZ2luZQorIworb2JqLXkgKz0gbWRwLm8gbWRwX3NjYWxlX3RhYmxlcy5vIG1kcF9wcHAubworCisjIE1EREkgaW50ZXJmYWNlCisjCitvYmoteSArPSBtZGRpLm8KKworIyBNRERJIGNsaWVudC9wYW5lbCBkcml2ZXJzCisjCitvYmoteSArPSBtZGRpX2NsaWVudF9kdW1teS5vCitvYmoteSArPSBtZGRpX2NsaWVudF90b3NoaWJhLm8KK29iai15ICs9IG1kZGlfY2xpZW50X250MzUzOTkubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkZTVhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYwpAQCAtMCwwICsxLDgyOCBAQAorLyoKKyAqIE1TTSBNRERJIFRyYW5zcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CisjaW5jbHVkZSAibWRkaV9ody5oIgorCisjZGVmaW5lIEZMQUdfRElTQUJMRV9ISUJFUk5BVElPTiAweDAwMDEKKyNkZWZpbmUgRkxBR19IQVZFX0NBUFMJCSAweDAwMDIKKyNkZWZpbmUgRkxBR19IQVNfVlNZTkNfSVJRCSAweDAwMDQKKyNkZWZpbmUgRkxBR19IQVZFX1NUQVRVUwkgMHgwMDA4CisKKyNkZWZpbmUgQ01EX0dFVF9DTElFTlRfQ0FQICAgICAweDA2MDEKKyNkZWZpbmUgQ01EX0dFVF9DTElFTlRfU1RBVFVTICAweDA2MDIKKwordW5pb24gbWRkaV9yZXYgeworCXVuc2lnbmVkIGNoYXIgcmF3W01ERElfUkVWX0JVRkZFUl9TSVpFXTsKKwlzdHJ1Y3QgbWRkaV9yZXZfcGFja2V0IGhkcjsKKwlzdHJ1Y3QgbWRkaV9jbGllbnRfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgbWRkaV9jbGllbnRfY2FwcyBjYXBzOworCXN0cnVjdCBtZGRpX3JlZ2lzdGVyX2FjY2VzcyByZWc7Cit9OworCitzdHJ1Y3QgcmVnX3JlYWRfaW5mbyB7CisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHJlc3VsdDsKK307CisKK3N0cnVjdCBtZGRpX2luZm8geworCXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IHZlcnNpb247CisJY2hhciBfX2lvbWVtICpiYXNlOworCWludCBpcnE7CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSBjbGllbnRfZGF0YTsKKworCS8qIGJ1ZmZlciBmb3IgcmV2IGVuY2FwIHBhY2tldHMgKi8KKwl2b2lkICpyZXZfZGF0YTsKKwlkbWFfYWRkcl90IHJldl9hZGRyOworCXN0cnVjdCBtZGRpX2xsZW50cnkgKnJlZ193cml0ZV9kYXRhOworCWRtYV9hZGRyX3QgcmVnX3dyaXRlX2FkZHI7CisJc3RydWN0IG1kZGlfbGxlbnRyeSAqcmVnX3JlYWRfZGF0YTsKKwlkbWFfYWRkcl90IHJlZ19yZWFkX2FkZHI7CisJc2l6ZV90IHJldl9kYXRhX2N1cnI7CisKKwlzcGlubG9ja190IGludF9sb2NrOworCXVpbnQzMl90IGludF9lbmFibGU7CisJdWludDMyX3QgZ290X2ludDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpbnRfd2FpdDsKKworCXN0cnVjdCBtdXRleCByZWdfd3JpdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggcmVnX3JlYWRfbG9jazsKKwlzdHJ1Y3QgcmVnX3JlYWRfaW5mbyAqcmVnX3JlYWQ7CisKKwlzdHJ1Y3QgbWRkaV9jbGllbnRfY2FwcyBjYXBzOworCXN0cnVjdCBtZGRpX2NsaWVudF9zdGF0dXMgc3RhdHVzOworCisJdm9pZCAoKnBvd2VyX2NsaWVudCkoc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICosIGludCk7CisKKwkvKiBjbGllbnQgZGV2aWNlIHB1Ymxpc2hlZCB0byBiaW5kIHVzIHRvIHRoZQorCSAqIGFwcHJvcHJpYXRlIG1kZGlfY2xpZW50IGRyaXZlcgorCSAqLworCWNoYXIgY2xpZW50X25hbWVbMjBdOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbGllbnRfcGRldjsKK307CisKK3N0YXRpYyB2b2lkIG1kZGlfaW5pdF9yZXZfZW5jYXAoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSk7CisKKyNkZWZpbmUgbWRkaV9yZWFkbChyKSByZWFkbChtZGRpLT5iYXNlICsgKE1ERElfIyNyKSkKKyNkZWZpbmUgbWRkaV93cml0ZWwodiwgcikgd3JpdGVsKCh2KSwgbWRkaS0+YmFzZSArIChNRERJXyMjcikpCisKK3ZvaWQgbWRkaV9hY3RpdmF0ZV9saW5rKHN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2RhdGEpCit7CisJc3RydWN0IG1kZGlfaW5mbyAqbWRkaSA9IGNvbnRhaW5lcl9vZihjZGF0YSwgc3RydWN0IG1kZGlfaW5mbywKKwkJCQkJICAgICAgY2xpZW50X2RhdGEpOworCisJbWRkaV93cml0ZWwoTURESV9DTURfTElOS19BQ1RJVkUsIENNRCk7Cit9CisKK3N0YXRpYyB2b2lkIG1kZGlfaGFuZGxlX2xpbmtfbGlzdF9kb25lKHN0cnVjdCBtZGRpX2luZm8gKm1kZGkpCit7Cit9CisKK3N0YXRpYyB2b2lkIG1kZGlfcmVzZXRfcmV2X2VuY2FwX3B0cihzdHJ1Y3QgbWRkaV9pbmZvICptZGRpKQoreworCXByaW50ayhLRVJOX0lORk8gIm1kZGk6IHJlc2V0dGluZyByZXYgcHRyXG4iKTsKKwltZGRpLT5yZXZfZGF0YV9jdXJyID0gMDsKKwltZGRpX3dyaXRlbChtZGRpLT5yZXZfYWRkciwgUkVWX1BUUik7CisJbWRkaV93cml0ZWwobWRkaS0+cmV2X2FkZHIsIFJFVl9QVFIpOworCW1kZGlfd3JpdGVsKE1ERElfQ01EX0ZPUkNFX05FV19SRVZfUFRSLCBDTUQpOworfQorCitzdGF0aWMgdm9pZCBtZGRpX2hhbmRsZV9yZXZfZGF0YShzdHJ1Y3QgbWRkaV9pbmZvICptZGRpLCB1bmlvbiBtZGRpX3JldiAqcmV2KQoreworCWludCBpOworCXN0cnVjdCByZWdfcmVhZF9pbmZvICpyaTsKKworCWlmICgocmV2LT5oZHIubGVuZ3RoIDw9IE1ERElfUkVWX0JVRkZFUl9TSVpFIC0gMikgJiYKKwkgICAocmV2LT5oZHIubGVuZ3RoID49IHNpemVvZihzdHJ1Y3QgbWRkaV9yZXZfcGFja2V0KSAtIDIpKSB7CisKKwkJc3dpdGNoIChyZXYtPmhkci50eXBlKSB7CisJCWNhc2UgVFlQRV9DTElFTlRfQ0FQUzoKKwkJCW1lbWNweSgmbWRkaS0+Y2FwcywgJnJldi0+Y2FwcywKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1kZGlfY2xpZW50X2NhcHMpKTsKKwkJCW1kZGktPmZsYWdzIHw9IEZMQUdfSEFWRV9DQVBTOworCQkJd2FrZV91cCgmbWRkaS0+aW50X3dhaXQpOworCQkJYnJlYWs7CisJCWNhc2UgVFlQRV9DTElFTlRfU1RBVFVTOgorCQkJbWVtY3B5KCZtZGRpLT5zdGF0dXMsICZyZXYtPnN0YXR1cywKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1kZGlfY2xpZW50X3N0YXR1cykpOworCQkJbWRkaS0+ZmxhZ3MgfD0gRkxBR19IQVZFX1NUQVRVUzsKKwkJCXdha2VfdXAoJm1kZGktPmludF93YWl0KTsKKwkJCWJyZWFrOworCQljYXNlIFRZUEVfUkVHSVNURVJfQUNDRVNTOgorCQkJcmkgPSBtZGRpLT5yZWdfcmVhZDsKKwkJCWlmIChyaSA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAicmV2OiBnb3QgcmVnICV4ID0gJXggd2l0aG91dCAiCisJCQkJCQkgIiBwZW5kaW5nIHJlYWRcbiIsCisJCQkJICAgICAgIHJldi0+cmVnLnJlZ2lzdGVyX2FkZHJlc3MsCisJCQkJICAgICAgIHJldi0+cmVnLnJlZ2lzdGVyX2RhdGFfbGlzdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocmktPnJlZyAhPSByZXYtPnJlZy5yZWdpc3Rlcl9hZGRyZXNzKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAicmV2OiBnb3QgcmVnICV4ID0gJXggZm9yICIKKwkJCQkJCSAid3JvbmcgcmVnaXN0ZXIsIGV4cGVjdGVkICIKKwkJCQkJCSAiJXhcbiIsCisJCQkJICAgICAgIHJldi0+cmVnLnJlZ2lzdGVyX2FkZHJlc3MsCisJCQkJICAgICAgIHJldi0+cmVnLnJlZ2lzdGVyX2RhdGFfbGlzdCwgcmktPnJlZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZGRpLT5yZWdfcmVhZCA9IE5VTEw7CisJCQlyaS0+c3RhdHVzID0gMDsKKwkJCXJpLT5yZXN1bHQgPSByZXYtPnJlZy5yZWdpc3Rlcl9kYXRhX2xpc3Q7CisJCQljb21wbGV0ZSgmcmktPmRvbmUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJyZXY6IHVua25vd24gcmV2ZXJzZSBwYWNrZXQ6ICIKKwkJCQkJICJsZW49JTA0eCB0eXBlPSUwNHggQ1VSUl9SRVZfUFRSPSV4XG4iLAorCQkJICAgICAgIHJldi0+aGRyLmxlbmd0aCwgcmV2LT5oZHIudHlwZSwKKwkJCSAgICAgICBtZGRpX3JlYWRsKENVUlJfUkVWX1BUUikpOworCQkJZm9yIChpID0gMDsgaSA8IHJldi0+aGRyLmxlbmd0aCArIDI7IGkrKykgeworCQkJCWlmICgoaSAlIDE2KSA9PSAwKQorCQkJCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gIiAlMDJ4IiwgcmV2LT5yYXdbaV0pOworCQkJfQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKKwkJCW1kZGlfcmVzZXRfcmV2X2VuY2FwX3B0cihtZGRpKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gImJhZCByZXYgbGVuZ3RoLCAlZCwgQ1VSUl9SRVZfUFRSICV4XG4iLAorCQkgICAgICAgcmV2LT5oZHIubGVuZ3RoLCBtZGRpX3JlYWRsKENVUlJfUkVWX1BUUikpOworCQltZGRpX3Jlc2V0X3Jldl9lbmNhcF9wdHIobWRkaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtZGRpX3dhaXRfaW50ZXJydXB0KHN0cnVjdCBtZGRpX2luZm8gKm1kZGksIHVpbnQzMl90IGludG1hc2spOworCitzdGF0aWMgdm9pZCBtZGRpX2hhbmRsZV9yZXZfZGF0YV9hdmFpbChzdHJ1Y3QgbWRkaV9pbmZvICptZGRpKQoreworCXVuaW9uIG1kZGlfcmV2ICpyZXYgPSBtZGRpLT5yZXZfZGF0YTsKKwl1aW50MzJfdCByZXZfZGF0YV9jb3VudDsKKwl1aW50MzJfdCByZXZfY3JjX2Vycl9jb3VudDsKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVnX3JlYWRfaW5mbyAqcmk7CisJc2l6ZV90IHByZXZfb2Zmc2V0OworCXVpbnQxNl90IGxlbmd0aDsKKworCXVuaW9uIG1kZGlfcmV2ICpjcmV2ID0gbWRkaS0+cmV2X2RhdGEgKyBtZGRpLT5yZXZfZGF0YV9jdXJyOworCisJLyogY2xlYXIgdGhlIGludGVycnVwdCAqLworCW1kZGlfd3JpdGVsKE1ERElfSU5UX1JFVl9EQVRBX0FWQUlMLCBJTlQpOworCXJldl9kYXRhX2NvdW50ID0gbWRkaV9yZWFkbChSRVZfUEtUX0NOVCk7CisJcmV2X2NyY19lcnJfY291bnQgPSBtZGRpX3JlYWRsKFJFVl9DUkNfRVJSKTsKKwlpZiAocmV2X2RhdGFfY291bnQgPiAxKQorCQlwcmludGsoS0VSTl9JTkZPICJyZXZfZGF0YV9jb3VudCAlZFxuIiwgcmV2X2RhdGFfY291bnQpOworCisJaWYgKHJldl9jcmNfZXJyX2NvdW50KSB7CisJCXByaW50ayhLRVJOX0lORk8gInJldl9jcmNfZXJyX2NvdW50ICVkLCBJTlQgJXhcbiIsCisJCSAgICAgICByZXZfY3JjX2Vycl9jb3VudCwgIG1kZGlfcmVhZGwoSU5UKSk7CisJCXJpID0gbWRkaS0+cmVnX3JlYWQ7CisJCWlmIChyaSA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJyZXY6IGdvdCBjcmMgZXJyb3Igd2l0aG91dCBwZW5kaW5nICIKKwkJCSAgICAgICAicmVhZFxuIik7CisJCX0gZWxzZSB7CisJCQltZGRpLT5yZWdfcmVhZCA9IE5VTEw7CisJCQlyaS0+c3RhdHVzID0gLUVJTzsKKwkJCXJpLT5yZXN1bHQgPSAtMTsKKwkJCWNvbXBsZXRlKCZyaS0+ZG9uZSk7CisJCX0KKwl9CisKKwlpZiAocmV2X2RhdGFfY291bnQgPT0gMCkKKwkJcmV0dXJuOworCisJcHJldl9vZmZzZXQgPSBtZGRpLT5yZXZfZGF0YV9jdXJyOworCisJbGVuZ3RoID0gKigodWludDhfdCAqKW1kZGktPnJldl9kYXRhICsgbWRkaS0+cmV2X2RhdGFfY3Vycik7CisJbWRkaS0+cmV2X2RhdGFfY3VycisrOworCWlmIChtZGRpLT5yZXZfZGF0YV9jdXJyID09IE1ERElfUkVWX0JVRkZFUl9TSVpFKQorCQltZGRpLT5yZXZfZGF0YV9jdXJyID0gMDsKKwlsZW5ndGggKz0gKigodWludDhfdCAqKW1kZGktPnJldl9kYXRhICsgbWRkaS0+cmV2X2RhdGFfY3VycikgPDwgODsKKwltZGRpLT5yZXZfZGF0YV9jdXJyICs9IDEgKyBsZW5ndGg7CisJaWYgKG1kZGktPnJldl9kYXRhX2N1cnIgPj0gTURESV9SRVZfQlVGRkVSX1NJWkUpCisJCW1kZGktPnJldl9kYXRhX2N1cnIgPQorCQkJbWRkaS0+cmV2X2RhdGFfY3VyciAlIE1ERElfUkVWX0JVRkZFUl9TSVpFOworCisJaWYgKGxlbmd0aCA+IE1ERElfUkVWX0JVRkZFUl9TSVpFIC0gMikgeworCQlwcmludGsoS0VSTl9JTkZPICJtZGRpOiByZXYgZGF0YSBsZW5ndGggZ3JlYXRlciB0aGFuIGJ1ZmZlciIKKwkJCSJzaXplXG4iKTsKKwkJbWRkaV9yZXNldF9yZXZfZW5jYXBfcHRyKG1kZGkpOworCQlyZXR1cm47CisJfQorCisJaWYgKHByZXZfb2Zmc2V0ICsgMiArIGxlbmd0aCA+PSBNRERJX1JFVl9CVUZGRVJfU0laRSkgeworCQl1bmlvbiBtZGRpX3JldiB0bXByZXY7CisJCXNpemVfdCByZW0gPSBNRERJX1JFVl9CVUZGRVJfU0laRSAtIHByZXZfb2Zmc2V0OworCQltZW1jcHkoJnRtcHJldi5yYXdbMF0sIG1kZGktPnJldl9kYXRhICsgcHJldl9vZmZzZXQsIHJlbSk7CisJCW1lbWNweSgmdG1wcmV2LnJhd1tyZW1dLCBtZGRpLT5yZXZfZGF0YSwgMiArIGxlbmd0aCAtIHJlbSk7CisJCW1kZGlfaGFuZGxlX3Jldl9kYXRhKG1kZGksICZ0bXByZXYpOworCX0gZWxzZSB7CisJCW1kZGlfaGFuZGxlX3Jldl9kYXRhKG1kZGksIGNyZXYpOworCX0KKworCWlmIChwcmV2X29mZnNldCA8IE1ERElfUkVWX0JVRkZFUl9TSVpFIC8gMiAmJgorCSAgICBtZGRpLT5yZXZfZGF0YV9jdXJyID49IE1ERElfUkVWX0JVRkZFUl9TSVpFIC8gMikgeworCQltZGRpX3dyaXRlbChtZGRpLT5yZXZfYWRkciwgUkVWX1BUUik7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWRkaV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNkYXRhID0gZGF0YTsKKwlzdHJ1Y3QgbWRkaV9pbmZvICptZGRpID0gY29udGFpbmVyX29mKGNkYXRhLCBzdHJ1Y3QgbWRkaV9pbmZvLAorCQkJCQkgICAgICBjbGllbnRfZGF0YSk7CisJdWludDMyX3QgYWN0aXZlLCBzdGF0dXM7CisKKwlzcGluX2xvY2soJm1kZGktPmludF9sb2NrKTsKKworCWFjdGl2ZSA9IG1kZGlfcmVhZGwoSU5UKTsKKwlzdGF0dXMgPSBtZGRpX3JlYWRsKFNUQVQpOworCisJbWRkaV93cml0ZWwoYWN0aXZlLCBJTlQpOworCisJLyogaWdub3JlIGFueSBpbnRlcnJ1cHRzIHdlIGhhdmUgZGlzYWJsZWQgKi8KKwlhY3RpdmUgJj0gbWRkaS0+aW50X2VuYWJsZTsKKworCW1kZGktPmdvdF9pbnQgfD0gYWN0aXZlOworCXdha2VfdXAoJm1kZGktPmludF93YWl0KTsKKworCWlmIChhY3RpdmUgJiBNRERJX0lOVF9QUklfTElOS19MSVNUX0RPTkUpIHsKKwkJbWRkaS0+aW50X2VuYWJsZSAmPSAofk1ERElfSU5UX1BSSV9MSU5LX0xJU1RfRE9ORSk7CisJCW1kZGlfaGFuZGxlX2xpbmtfbGlzdF9kb25lKG1kZGkpOworCX0KKwlpZiAoYWN0aXZlICYgTURESV9JTlRfUkVWX0RBVEFfQVZBSUwpCisJCW1kZGlfaGFuZGxlX3Jldl9kYXRhX2F2YWlsKG1kZGkpOworCisJaWYgKGFjdGl2ZSAmIH5NRERJX0lOVF9ORUVEX0NMRUFSKQorCQltZGRpLT5pbnRfZW5hYmxlICY9IH4oYWN0aXZlICYgfk1ERElfSU5UX05FRURfQ0xFQVIpOworCisJaWYgKGFjdGl2ZSAmIE1ERElfSU5UX0xJTktfQUNUSVZFKSB7CisJCW1kZGktPmludF9lbmFibGUgJj0gKH5NRERJX0lOVF9MSU5LX0FDVElWRSk7CisJCW1kZGktPmludF9lbmFibGUgfD0gTURESV9JTlRfSU5fSElCRVJOQVRJT047CisJfQorCisJaWYgKGFjdGl2ZSAmIE1ERElfSU5UX0lOX0hJQkVSTkFUSU9OKSB7CisJCW1kZGktPmludF9lbmFibGUgJj0gKH5NRERJX0lOVF9JTl9ISUJFUk5BVElPTik7CisJCW1kZGktPmludF9lbmFibGUgfD0gTURESV9JTlRfTElOS19BQ1RJVkU7CisJfQorCisJbWRkaV93cml0ZWwobWRkaS0+aW50X2VuYWJsZSwgSU5URU4pOworCXNwaW5fdW5sb2NrKCZtZGRpLT5pbnRfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBsb25nIG1kZGlfd2FpdF9pbnRlcnJ1cHRfdGltZW91dChzdHJ1Y3QgbWRkaV9pbmZvICptZGRpLAorCQkJCQl1aW50MzJfdCBpbnRtYXNrLCBpbnQgdGltZW91dCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZGRpLT5pbnRfbG9jaywgaXJxX2ZsYWdzKTsKKwltZGRpLT5nb3RfaW50ICY9IH5pbnRtYXNrOworCW1kZGktPmludF9lbmFibGUgfD0gaW50bWFzazsKKwltZGRpX3dyaXRlbChtZGRpLT5pbnRfZW5hYmxlLCBJTlRFTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRkaS0+aW50X2xvY2ssIGlycV9mbGFncyk7CisJcmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChtZGRpLT5pbnRfd2FpdCwgbWRkaS0+Z290X2ludCAmIGludG1hc2ssCisJCQkJICB0aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgbWRkaV93YWl0X2ludGVycnVwdChzdHJ1Y3QgbWRkaV9pbmZvICptZGRpLCB1aW50MzJfdCBpbnRtYXNrKQoreworCWlmIChtZGRpX3dhaXRfaW50ZXJydXB0X3RpbWVvdXQobWRkaSwgaW50bWFzaywgSFovMTApID09IDApCisJCXByaW50ayhLRVJOX0lORk8gS0VSTl9FUlIgIm1kZGlfd2FpdF9pbnRlcnJ1cHQgJWQsIHRpbWVvdXQgIgorCQkgICAgICAgIndhaXRpbmcgZm9yICV4LCBJTlQgPSAleCwgU1RBVCA9ICV4IGdvdGludCA9ICV4XG4iLAorCQkgICAgICAgY3VycmVudC0+cGlkLCBpbnRtYXNrLCBtZGRpX3JlYWRsKElOVCksIG1kZGlfcmVhZGwoU1RBVCksCisJCSAgICAgICBtZGRpLT5nb3RfaW50KTsKK30KKworc3RhdGljIHZvaWQgbWRkaV9pbml0X3Jldl9lbmNhcChzdHJ1Y3QgbWRkaV9pbmZvICptZGRpKQoreworCW1lbXNldChtZGRpLT5yZXZfZGF0YSwgMHhlZSwgTURESV9SRVZfQlVGRkVSX1NJWkUpOworCW1kZGlfd3JpdGVsKG1kZGktPnJldl9hZGRyLCBSRVZfUFRSKTsKKwltZGRpX3dyaXRlbChNRERJX0NNRF9GT1JDRV9ORVdfUkVWX1BUUiwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworfQorCit2b2lkIG1kZGlfc2V0X2F1dG9faGliZXJuYXRlKHN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2RhdGEsIGludCBvbikKK3sKKwlzdHJ1Y3QgbWRkaV9pbmZvICptZGRpID0gY29udGFpbmVyX29mKGNkYXRhLCBzdHJ1Y3QgbWRkaV9pbmZvLAorCQkJCQkgICAgICBjbGllbnRfZGF0YSk7CisJbWRkaV93cml0ZWwoTURESV9DTURfUE9XRVJET1dOLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfSU5fSElCRVJOQVRJT04pOworCW1kZGlfd3JpdGVsKE1ERElfQ01EX0hJQkVSTkFURSB8ICEhb24sIENNRCk7CisJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKK30KKworCitzdGF0aWMgdWludDE2X3QgbWRkaV9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgbWRkaV9pbmZvICptZGRpKQoreworCW1kZGlfd3JpdGVsKDB4MDAwMSwgVkVSU0lPTik7CisJbWRkaV93cml0ZWwoTURESV9IT1NUX0JZVEVTX1BFUl9TVUJGUkFNRSwgQlBTKTsKKwltZGRpX3dyaXRlbCgweDAwMDMsIFNQTSk7IC8qIHN1YmZyYW1lcyBwZXIgbWVkaWEgKi8KKwltZGRpX3dyaXRlbCgweDAwMDUsIFRBMV9MRU4pOworCW1kZGlfd3JpdGVsKE1ERElfSE9TVF9UQTJfTEVOLCBUQTJfTEVOKTsKKwltZGRpX3dyaXRlbCgweDAwOTYsIERSSVZFX0hJKTsKKwkvKiAweDMyIG5vcm1hbCwgMHg1MCBmb3IgVG9zaGliYSBkaXNwbGF5ICovCisJbWRkaV93cml0ZWwoMHgwMDUwLCBEUklWRV9MTyk7CisJbWRkaV93cml0ZWwoMHgwMDNDLCBESVNQX1dBS0UpOyAvKiB3YWtldXAgY291bnRlciAqLworCW1kZGlfd3JpdGVsKE1ERElfSE9TVF9SRVZfUkFURV9ESVYsIFJFVl9SQVRFX0RJVik7CisKKwltZGRpX3dyaXRlbChNRERJX1JFVl9CVUZGRVJfU0laRSwgUkVWX1NJWkUpOworCW1kZGlfd3JpdGVsKE1ERElfTUFYX1JFVl9QS1RfU0laRSwgUkVWX0VOQ0FQX1NaKTsKKworCS8qIGRpc2FibGUgcGVyaW9kaWMgcmV2IGVuY2FwICovCisJbWRkaV93cml0ZWwoTURESV9DTURfUEVSSU9ESUNfUkVWX0VOQ0FQLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisKKwlpZiAobWRkaV9yZWFkbChQQURfQ1RMKSA9PSAwKSB7CisJCS8qIElmIHdlIGFyZSB0dXJuaW5nIG9uIGJhbmQgZ2FwLCBuZWVkIHRvIHdhaXQgNXVzIGJlZm9yZQorCQkgKiB0dXJuaW5nIG9uIHRoZSByZXN0IG9mIHRoZSBQQUQgKi8KKwkJbWRkaV93cml0ZWwoMHgwODAwMCwgUEFEX0NUTCk7CisJCXVkZWxheSg1KTsKKwl9CisKKwkvKiBSZWNvbW1lbmRhdGlvbiBmcm9tIFBBRCBodyB0ZWFtICovCisJbWRkaV93cml0ZWwoMHhhODUwZiwgUEFEX0NUTCk7CisKKworCS8qIE5lZWQgYW4gZXZlbiBudW1iZXIgZm9yIGNvdW50cyAqLworCW1kZGlfd3JpdGVsKDB4NjAwMDYsIERSSVZFUl9TVEFSVF9DTlQpOworCisJbWRkaV9zZXRfYXV0b19oaWJlcm5hdGUoJm1kZGktPmNsaWVudF9kYXRhLCAwKTsKKworCW1kZGlfd3JpdGVsKE1ERElfQ01EX0RJU1BfSUdOT1JFLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisKKwltZGRpX2luaXRfcmV2X2VuY2FwKG1kZGkpOworCXJldHVybiBtZGRpX3JlYWRsKENPUkVfVkVSKSAmIDB4ZmZmZjsKK30KKworc3RhdGljIHZvaWQgbWRkaV9zdXNwZW5kKHN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2RhdGEpCit7CisJc3RydWN0IG1kZGlfaW5mbyAqbWRkaSA9IGNvbnRhaW5lcl9vZihjZGF0YSwgc3RydWN0IG1kZGlfaW5mbywKKwkJCQkJICAgICAgY2xpZW50X2RhdGEpOworCS8qIHR1cm4gb2ZmIHRoZSBjbGllbnQgKi8KKwlpZiAobWRkaS0+cG93ZXJfY2xpZW50KQorCQltZGRpLT5wb3dlcl9jbGllbnQoJm1kZGktPmNsaWVudF9kYXRhLCAwKTsKKwkvKiB0dXJuIG9mZiB0aGUgbGluayAqLworCW1kZGlfd3JpdGVsKE1ERElfQ01EX1JFU0VULCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJLyogdHVybiBvZmYgdGhlIGNsb2NrICovCisJY2xrX2Rpc2FibGUobWRkaS0+Y2xrKTsKK30KKworc3RhdGljIHZvaWQgbWRkaV9yZXN1bWUoc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjZGF0YSkKK3sKKwlzdHJ1Y3QgbWRkaV9pbmZvICptZGRpID0gY29udGFpbmVyX29mKGNkYXRhLCBzdHJ1Y3QgbWRkaV9pbmZvLAorCQkJCQkgICAgICBjbGllbnRfZGF0YSk7CisJbWRkaV9zZXRfYXV0b19oaWJlcm5hdGUoJm1kZGktPmNsaWVudF9kYXRhLCAwKTsKKwkvKiB0dXJuIG9uIHRoZSBjbGllbnQgKi8KKwlpZiAobWRkaS0+cG93ZXJfY2xpZW50KQorCQltZGRpLT5wb3dlcl9jbGllbnQoJm1kZGktPmNsaWVudF9kYXRhLCAxKTsKKwkvKiB0dXJuIG9uIHRoZSBjbG9jayAqLworCWNsa19lbmFibGUobWRkaS0+Y2xrKTsKKwkvKiBzZXQgdXAgdGhlIGxvY2FsIHJlZ2lzdGVycyAqLworCW1kZGktPnJldl9kYXRhX2N1cnIgPSAwOworCW1kZGlfaW5pdF9yZWdpc3RlcnMobWRkaSk7CisJbWRkaV93cml0ZWwobWRkaS0+aW50X2VuYWJsZSwgSU5URU4pOworCW1kZGlfd3JpdGVsKE1ERElfQ01EX0xJTktfQUNUSVZFLCBDTUQpOworCW1kZGlfd3JpdGVsKE1ERElfQ01EX1NFTkRfUlRELCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJbWRkaV9zZXRfYXV0b19oaWJlcm5hdGUoJm1kZGktPmNsaWVudF9kYXRhLCAxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbWRkaV9nZXRfY2xpZW50X2NhcHMoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSkKK3sKKwlpbnQgaSwgajsKKworCS8qIGNsZWFyIGFueSBzdGFsZSBpbnRlcnJ1cHRzICovCisJbWRkaV93cml0ZWwoMHhmZmZmZmZmZiwgSU5UKTsKKworCW1kZGktPmludF9lbmFibGUgPSBNRERJX0lOVF9MSU5LX0FDVElWRSB8CisJCQkgICBNRERJX0lOVF9JTl9ISUJFUk5BVElPTiB8CisJCQkgICBNRERJX0lOVF9QUklfTElOS19MSVNUX0RPTkUgfAorCQkJICAgTURESV9JTlRfUkVWX0RBVEFfQVZBSUwgfAorCQkJICAgTURESV9JTlRfUkVWX09WRVJGTE9XIHwKKwkJCSAgIE1ERElfSU5UX1JFVl9PVkVSV1JJVEUgfAorCQkJICAgTURESV9JTlRfUlREX0ZBSUxVUkU7CisJbWRkaV93cml0ZWwobWRkaS0+aW50X2VuYWJsZSwgSU5URU4pOworCisJbWRkaV93cml0ZWwoTURESV9DTURfTElOS19BQ1RJVkUsIENNRCk7CisJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKKworCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJLyogdGhlIHRvc2hpYmEgdmdhIHBhbmVsIGRvZXMgbm90IHJlc3BvbmQgdG8gZ2V0CisJCSAqIGNhcHMgdW5sZXNzIHlvdSBTRU5EX1JURCwgYnV0IHRoZSBmaXJzdCBTRU5EX1JURAorCQkgKiB3aWxsIGZhaWwuLi4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXVpbnQzMl90IHN0YXQ7CisKKwkJCW1kZGlfd3JpdGVsKE1ERElfQ01EX1NFTkRfUlRELCBDTUQpOworCQkJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKKwkJCXN0YXQgPSBtZGRpX3JlYWRsKFNUQVQpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaSBjbWQgc2VuZCBydGQ6IGludCAleCwgc3RhdCAleCwgIgorCQkJCQkicnRkIHZhbCAleFxuIiwgbWRkaV9yZWFkbChJTlQpLCBzdGF0LAorCQkJCQltZGRpX3JlYWRsKFJURF9WQUwpKTsKKwkJCWlmICgoc3RhdCAmIE1ERElfU1RBVF9SVERfTUVBU19GQUlMKSA9PSAwKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKDEpOworCQl9CisKKwkJbWRkaV93cml0ZWwoQ01EX0dFVF9DTElFTlRfQ0FQLCBDTUQpOworCQltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCQl3YWl0X2V2ZW50X3RpbWVvdXQobWRkaS0+aW50X3dhaXQsIG1kZGktPmZsYWdzICYgRkxBR19IQVZFX0NBUFMsCisJCQkJICAgSFogLyAxMDApOworCisJCWlmIChtZGRpLT5mbGFncyAmIEZMQUdfSEFWRV9DQVBTKQorCQkJYnJlYWs7CisJCXByaW50ayhLRVJOX0lORk8gS0VSTl9FUlIgIm1kZGlfaW5pdCwgdGltZW91dCB3YWl0aW5nIGZvciAiCisJCQkJImNhcHNcbiIpOworCX0KKwlyZXR1cm4gbWRkaS0+ZmxhZ3MgJiBGTEFHX0hBVkVfQ0FQUzsKK30KKworLyogbGluayBtdXN0IGJlIGFjdGl2ZSB3aGVuIHRoaXMgaXMgY2FsbGVkICovCitpbnQgbWRkaV9jaGVja19zdGF0dXMoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSkKK3sKKwlpbnQgcmV0ID0gLTEsIHJldHJ5ID0gMzsKKwltdXRleF9sb2NrKCZtZGRpLT5yZWdfcmVhZF9sb2NrKTsKKwltZGRpX3dyaXRlbChNRERJX0NNRF9QRVJJT0RJQ19SRVZfRU5DQVAgfCAxLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisKKwlkbyB7CisJCW1kZGktPmZsYWdzICY9IH5GTEFHX0hBVkVfU1RBVFVTOworCQltZGRpX3dyaXRlbChDTURfR0VUX0NMSUVOVF9TVEFUVVMsIENNRCk7CisJCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJCXdhaXRfZXZlbnRfdGltZW91dChtZGRpLT5pbnRfd2FpdCwKKwkJCQkgICBtZGRpLT5mbGFncyAmIEZMQUdfSEFWRV9TVEFUVVMsCisJCQkJICAgSFogLyAxMDApOworCisJCWlmIChtZGRpLT5mbGFncyAmIEZMQUdfSEFWRV9TVEFUVVMpIHsKKwkJCWlmIChtZGRpLT5zdGF0dXMuY3JjX2Vycm9yX2NvdW50KQorCQkJCXByaW50ayhLRVJOX0lORk8gIm1kZGkgc3RhdHVzOiBjcmNfZXJyb3IgIgorCQkJCQkiY291bnQ6ICVkXG4iLAorCQkJCQltZGRpLT5zdGF0dXMuY3JjX2Vycm9yX2NvdW50KTsKKwkJCWVsc2UKKwkJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaSBzdGF0dXM6IGZhaWxlZCB0byBnZXQgY2xpZW50ICIKKwkJCQkic3RhdHVzXG4iKTsKKwkJbWRkaV93cml0ZWwoTURESV9DTURfU0VORF9SVEQsIENNRCk7CisJCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJfSB3aGlsZSAoLS1yZXRyeSk7CisKKwltZGRpX3dyaXRlbChNRERJX0NNRF9QRVJJT0RJQ19SRVZfRU5DQVAgfCAwLCBDTUQpOworCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfTk9fQ01EX1BLVFNfUEVORCk7CisJbXV0ZXhfdW5sb2NrKCZtZGRpLT5yZWdfcmVhZF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3ZvaWQgbWRkaV9yZW1vdGVfd3JpdGUoc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjZGF0YSwgdWludDMyX3QgdmFsLAorCQkgICAgICAgdWludDMyX3QgcmVnKQoreworCXN0cnVjdCBtZGRpX2luZm8gKm1kZGkgPSBjb250YWluZXJfb2YoY2RhdGEsIHN0cnVjdCBtZGRpX2luZm8sCisJCQkJCSAgICAgIGNsaWVudF9kYXRhKTsKKwlzdHJ1Y3QgbWRkaV9sbGVudHJ5ICpsbDsKKwlzdHJ1Y3QgbWRkaV9yZWdpc3Rlcl9hY2Nlc3MgKnJhOworCisJbXV0ZXhfbG9jaygmbWRkaS0+cmVnX3dyaXRlX2xvY2spOworCisJbGwgPSBtZGRpLT5yZWdfd3JpdGVfZGF0YTsKKworCXJhID0gJihsbC0+dS5yKTsKKwlyYS0+bGVuZ3RoID0gMTQgKyA0OworCXJhLT50eXBlID0gVFlQRV9SRUdJU1RFUl9BQ0NFU1M7CisJcmEtPmNsaWVudF9pZCA9IDA7CisJcmEtPnJlYWRfd3JpdGVfaW5mbyA9IE1ERElfV1JJVEUgfCAxOworCXJhLT5jcmMxNiA9IDA7CisKKwlyYS0+cmVnaXN0ZXJfYWRkcmVzcyA9IHJlZzsKKwlyYS0+cmVnaXN0ZXJfZGF0YV9saXN0ID0gdmFsOworCisJbGwtPmZsYWdzID0gMTsKKwlsbC0+aGVhZGVyX2NvdW50ID0gMTQ7CisJbGwtPmRhdGFfY291bnQgPSA0OworCWxsLT5kYXRhID0gbWRkaS0+cmVnX3dyaXRlX2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgbWRkaV9sbGVudHJ5LAorCQkJCQkJICAgdS5yLnJlZ2lzdGVyX2RhdGFfbGlzdCk7CisJbGwtPm5leHQgPSAwOworCWxsLT5yZXNlcnZlZCA9IDA7CisKKwltZGRpX3dyaXRlbChtZGRpLT5yZWdfd3JpdGVfYWRkciwgUFJJX1BUUik7CisKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX1BSSV9MSU5LX0xJU1RfRE9ORSk7CisJbXV0ZXhfdW5sb2NrKCZtZGRpLT5yZWdfd3JpdGVfbG9jayk7Cit9CisKK3VpbnQzMl90IG1kZGlfcmVtb3RlX3JlYWQoc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjZGF0YSwgdWludDMyX3QgcmVnKQoreworCXN0cnVjdCBtZGRpX2luZm8gKm1kZGkgPSBjb250YWluZXJfb2YoY2RhdGEsIHN0cnVjdCBtZGRpX2luZm8sCisJCQkJCSAgICAgIGNsaWVudF9kYXRhKTsKKwlzdHJ1Y3QgbWRkaV9sbGVudHJ5ICpsbDsKKwlzdHJ1Y3QgbWRkaV9yZWdpc3Rlcl9hY2Nlc3MgKnJhOworCXN0cnVjdCByZWdfcmVhZF9pbmZvIHJpOworCXVuc2lnbmVkIHM7CisJaW50IHJldHJ5X2NvdW50ID0gMjsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCW11dGV4X2xvY2soJm1kZGktPnJlZ19yZWFkX2xvY2spOworCisJbGwgPSBtZGRpLT5yZWdfcmVhZF9kYXRhOworCisJcmEgPSAmKGxsLT51LnIpOworCXJhLT5sZW5ndGggPSAxNDsKKwlyYS0+dHlwZSA9IFRZUEVfUkVHSVNURVJfQUNDRVNTOworCXJhLT5jbGllbnRfaWQgPSAwOworCXJhLT5yZWFkX3dyaXRlX2luZm8gPSBNRERJX1JFQUQgfCAxOworCXJhLT5jcmMxNiA9IDA7CisKKwlyYS0+cmVnaXN0ZXJfYWRkcmVzcyA9IHJlZzsKKworCWxsLT5mbGFncyA9IDB4MTE7CisJbGwtPmhlYWRlcl9jb3VudCA9IDE0OworCWxsLT5kYXRhX2NvdW50ID0gMDsKKwlsbC0+ZGF0YSA9IDA7CisJbGwtPm5leHQgPSAwOworCWxsLT5yZXNlcnZlZCA9IDA7CisKKwlzID0gbWRkaV9yZWFkbChTVEFUKTsKKworCXJpLnJlZyA9IHJlZzsKKwlyaS5zdGF0dXMgPSAtMTsKKworCWRvIHsKKwkJaW5pdF9jb21wbGV0aW9uKCZyaS5kb25lKTsKKwkJbWRkaS0+cmVnX3JlYWQgPSAmcmk7CisJCW1kZGlfd3JpdGVsKG1kZGktPnJlZ19yZWFkX2FkZHIsIFBSSV9QVFIpOworCisJCW1kZGlfd2FpdF9pbnRlcnJ1cHQobWRkaSwgTURESV9JTlRfUFJJX0xJTktfTElTVF9ET05FKTsKKworCQkvKiBFbmFibGUgUGVyaW9kaWMgUmV2ZXJzZSBFbmNhcHN1bGF0aW9uLiAqLworCQltZGRpX3dyaXRlbChNRERJX0NNRF9QRVJJT0RJQ19SRVZfRU5DQVAgfCAxLCBDTUQpOworCQltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyaS5kb25lLCBIWi8xMCkgPT0gMCAmJgorCQkgICAgIXJpLmRvbmUuZG9uZSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaV9yZW1vdGVfcmVhZCgleCkgdGltZW91dCAiCisJCQkJCSAiKCVkICVkICVkKVxuIiwKKwkJCSAgICAgICByZWcsIHJpLnN0YXR1cywgcmkucmVzdWx0LCByaS5kb25lLmRvbmUpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1kZGktPmludF9sb2NrLCBpcnFfZmxhZ3MpOworCQkJbWRkaS0+cmVnX3JlYWQgPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRkaS0+aW50X2xvY2ssIGlycV9mbGFncyk7CisJCQlyaS5zdGF0dXMgPSAtMTsKKwkJCXJpLnJlc3VsdCA9IC0xOworCQl9CisJCWlmIChyaS5zdGF0dXMgPT0gMCkKKwkJCWJyZWFrOworCisJCW1kZGlfd3JpdGVsKE1ERElfQ01EX1NFTkRfUlRELCBDTUQpOworCQltZGRpX3dyaXRlbChNRERJX0NNRF9MSU5LX0FDVElWRSwgQ01EKTsKKwkJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaV9yZW1vdGVfcmVhZDogZmFpbGVkLCBzZW50ICIKKwkJICAgICAgICJNRERJX0NNRF9TRU5EX1JURDogaW50ICV4LCBzdGF0ICV4LCBydGQgdmFsICV4ICIKKwkJICAgICAgICJjdXJyX3Jldl9wdHIgJXhcbiIsIG1kZGlfcmVhZGwoSU5UKSwgbWRkaV9yZWFkbChTVEFUKSwKKwkJICAgICAgIG1kZGlfcmVhZGwoUlREX1ZBTCksIG1kZGlfcmVhZGwoQ1VSUl9SRVZfUFRSKSk7CisJfSB3aGlsZSAocmV0cnlfY291bnQtLSA+IDApOworCS8qIERpc2FibGUgUGVyaW9kaWMgUmV2ZXJzZSBFbmNhcHN1bGF0aW9uLiAqLworCW1kZGlfd3JpdGVsKE1ERElfQ01EX1BFUklPRElDX1JFVl9FTkNBUCB8IDAsIENNRCk7CisJbWRkaV93YWl0X2ludGVycnVwdChtZGRpLCBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EKTsKKwltZGRpLT5yZWdfcmVhZCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZtZGRpLT5yZWdfcmVhZF9sb2NrKTsKKwlyZXR1cm4gcmkucmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IG1kZGlfaW5mbyBtZGRpX2luZm9bMl07CisKK3N0YXRpYyBpbnQgX19pbml0IG1kZGlfY2xrX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJIHN0cnVjdCBtZGRpX2luZm8gKm1kZGksCisJCQkJIHVuc2lnbmVkIGxvbmcgY2xrX3JhdGUpCit7CisJaW50IHJldDsKKworCS8qIHNldCB1cCB0aGUgY2xvY2tzICovCisJbWRkaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWRkaV9jbGsiKTsKKwlpZiAoSVNfRVJSKG1kZGktPmNsaykpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaTogZmFpbGVkIHRvIGdldCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKG1kZGktPmNsayk7CisJfQorCXJldCA9ICBjbGtfZW5hYmxlKG1kZGktPmNsayk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCXJldCA9IGNsa19zZXRfcmF0ZShtZGRpLT5jbGssIGNsa19yYXRlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJY2xrX3B1dChtZGRpLT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1kZGlfcmV2X2RhdGFfc2V0dXAoc3RydWN0IG1kZGlfaW5mbyAqbWRkaSkKK3sKKwl2b2lkICpkbWE7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKworCS8qIHNldCB1cCBkbWEgYnVmZmVyICovCisJZG1hID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIDB4MTAwMCwgJmRtYV9hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoZG1hID09IDApCisJCXJldHVybiAtRU5PTUVNOworCW1kZGktPnJldl9kYXRhID0gZG1hOworCW1kZGktPnJldl9kYXRhX2N1cnIgPSAwOworCW1kZGktPnJldl9hZGRyID0gZG1hX2FkZHI7CisJbWRkaS0+cmVnX3dyaXRlX2RhdGEgPSBkbWEgKyBNRERJX1JFVl9CVUZGRVJfU0laRTsKKwltZGRpLT5yZWdfd3JpdGVfYWRkciA9IGRtYV9hZGRyICsgTURESV9SRVZfQlVGRkVSX1NJWkU7CisJbWRkaS0+cmVnX3JlYWRfZGF0YSA9IG1kZGktPnJlZ193cml0ZV9kYXRhICsgMTsKKwltZGRpLT5yZWdfcmVhZF9hZGRyID0gbWRkaS0+cmVnX3dyaXRlX2FkZHIgKworCQkJICAgICAgc2l6ZW9mKCptZGRpLT5yZWdfd3JpdGVfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1kZGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXNtX21kZGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbWRkaV9pbmZvICptZGRpID0gJm1kZGlfaW5mb1twZGV2LT5pZF07CisJc3RydWN0IHJlc291cmNlICpyZXNvdXJjZTsKKwlpbnQgcmV0LCBpOworCisJcmVzb3VyY2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzb3VyY2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGRpOiBubyBhc3NvY2lhdGVkIG1lbSByZXNvdXJjZSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWRkaS0+YmFzZSA9IGlvcmVtYXAocmVzb3VyY2UtPnN0YXJ0LCByZXNvdXJjZS0+ZW5kIC0gcmVzb3VyY2UtPnN0YXJ0KTsKKwlpZiAoIW1kZGktPmJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGRpOiBmYWlsZWQgdG8gcmVtYXAgYmFzZSFcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX2lvcmVtYXA7CisJfQorCXJlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlc291cmNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRkaTogbm8gYXNzb2NpYXRlZCBpcnEgcmVzb3VyY2UhXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcl9nZXRfaXJxX3Jlc291cmNlOworCX0KKwltZGRpLT5pcnEgPSByZXNvdXJjZS0+c3RhcnQ7CisJcHJpbnRrKEtFUk5fSU5GTyAibWRkaTogaW5pdCgpIGJhc2U9MHglcCBpcnE9JWRcbiIsIG1kZGktPmJhc2UsCisJICAgICAgIG1kZGktPmlycSk7CisJbWRkaS0+cG93ZXJfY2xpZW50ID0gcGRhdGEtPnBvd2VyX2NsaWVudDsKKworCW11dGV4X2luaXQoJm1kZGktPnJlZ193cml0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZtZGRpLT5yZWdfcmVhZF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbWRkaS0+aW50X2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kZGktPmludF93YWl0KTsKKworCXJldCA9IG1kZGlfY2xrX3NldHVwKHBkZXYsIG1kZGksIHBkYXRhLT5jbGtfcmF0ZSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1kZGk6IGZhaWxlZCB0byBzZXR1cCBjbG9jayFcbiIpOworCQlnb3RvIGVycm9yX2Nsa19zZXR1cDsKKwl9CisKKwlyZXQgPSBtZGRpX3Jldl9kYXRhX3NldHVwKG1kZGkpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGRpOiBmYWlsZWQgdG8gc2V0dXAgcmV2IGRhdGEhXG4iKTsKKwkJZ290byBlcnJvcl9yZXZfZGF0YTsKKwl9CisKKwltZGRpLT5pbnRfZW5hYmxlID0gMDsKKwltZGRpX3dyaXRlbChtZGRpLT5pbnRfZW5hYmxlLCBJTlRFTik7CisJcmV0ID0gcmVxdWVzdF9pcnEobWRkaS0+aXJxLCBtZGRpX2lzciwgSVJRRl9ESVNBQkxFRCwgIm1kZGkiLAorCQkJICAmbWRkaS0+Y2xpZW50X2RhdGEpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGRpOiBmYWlsZWQgdG8gcmVxdWVzdCBlbmFibGUgaXJxIVxuIik7CisJCWdvdG8gZXJyb3JfcmVxdWVzdF9pcnE7CisJfQorCisJLyogdHVybiBvbiB0aGUgbWRkaSBjbGllbnQgYnJpZGdlIGNoaXAgKi8KKwlpZiAobWRkaS0+cG93ZXJfY2xpZW50KQorCQltZGRpLT5wb3dlcl9jbGllbnQoJm1kZGktPmNsaWVudF9kYXRhLCAxKTsKKworCS8qIGluaXRpYWxpemUgdGhlIG1kZGkgcmVnaXN0ZXJzICovCisJbWRkaV9zZXRfYXV0b19oaWJlcm5hdGUoJm1kZGktPmNsaWVudF9kYXRhLCAwKTsKKwltZGRpX3dyaXRlbChNRERJX0NNRF9SRVNFVCwgQ01EKTsKKwltZGRpX3dhaXRfaW50ZXJydXB0KG1kZGksIE1ERElfSU5UX05PX0NNRF9QS1RTX1BFTkQpOworCW1kZGktPnZlcnNpb24gPSBtZGRpX2luaXRfcmVnaXN0ZXJzKG1kZGkpOworCWlmIChtZGRpLT52ZXJzaW9uIDwgMHgyMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1kZGk6IHVuc3VwcG9ydGVkIHZlcnNpb24gMHgleFxuIiwKKwkJICAgICAgIG1kZGktPnZlcnNpb24pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX21kZGlfdmVyc2lvbjsKKwl9CisKKwkvKiByZWFkIHRoZSBjYXBhYmlsaXRpZXMgb2ZmIHRoZSBjbGllbnQgKi8KKwlpZiAoIW1kZGlfZ2V0X2NsaWVudF9jYXBzKG1kZGkpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1kZGk6IG5vIGNsaWVudCBmb3VuZFxuIik7CisJCS8qIHBvd2VyIGRvd24gdGhlIHBhbmVsICovCisJCW1kZGlfd3JpdGVsKE1ERElfQ01EX1BPV0VSRE9XTiwgQ01EKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaSBwb3dlcmRvd246IHN0YXQgJXhcbiIsIG1kZGlfcmVhZGwoU1RBVCkpOworCQltc2xlZXAoMTAwKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWRkaSBwb3dlcmRvd246IHN0YXQgJXhcbiIsIG1kZGlfcmVhZGwoU1RBVCkpOworCQlyZXR1cm4gMDsKKwl9CisJbWRkaV9zZXRfYXV0b19oaWJlcm5hdGUoJm1kZGktPmNsaWVudF9kYXRhLCAxKTsKKworCWlmIChtZGRpLT5jYXBzLk1mcl9OYW1lID09IDAgJiYgbWRkaS0+Y2Fwcy5Qcm9kdWN0X0NvZGUgPT0gMCkKKwkJcGRhdGEtPmZpeHVwKCZtZGRpLT5jYXBzLk1mcl9OYW1lLCAmbWRkaS0+Y2Fwcy5Qcm9kdWN0X0NvZGUpOworCisJbWRkaS0+Y2xpZW50X3BkZXYuaWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2NsaWVudHM7IGkrKykgeworCQlpZiAocGRhdGEtPmNsaWVudF9wbGF0Zm9ybV9kYXRhW2ldLnByb2R1Y3RfaWQgPT0KKwkJICAgIChtZGRpLT5jYXBzLk1mcl9OYW1lIDw8IDE2IHwgbWRkaS0+Y2Fwcy5Qcm9kdWN0X0NvZGUpKSB7CisJCQltZGRpLT5jbGllbnRfZGF0YS5wcml2YXRlX2NsaWVudF9kYXRhID0KKwkJCQlwZGF0YS0+Y2xpZW50X3BsYXRmb3JtX2RhdGFbaV0uY2xpZW50X2RhdGE7CisJCQltZGRpLT5jbGllbnRfcGRldi5uYW1lID0KKwkJCQlwZGF0YS0+Y2xpZW50X3BsYXRmb3JtX2RhdGFbaV0ubmFtZTsKKwkJCW1kZGktPmNsaWVudF9wZGV2LmlkID0KKwkJCQlwZGF0YS0+Y2xpZW50X3BsYXRmb3JtX2RhdGFbaV0uaWQ7CisJCQkvKiBYWFg6IHBvc3NpYmx5IHNldCBjbG9jayAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA+PSBwZGF0YS0+bnVtX2NsaWVudHMpCisJCW1kZGktPmNsaWVudF9wZGV2Lm5hbWUgPSAibWRkaV9jX2R1bW15IjsKKwlwcmludGsoS0VSTl9JTkZPICJtZGRpOiByZWdpc3RlcmluZyBwYW5lbCAlc1xuIiwKKwkJbWRkaS0+Y2xpZW50X3BkZXYubmFtZSk7CisKKwltZGRpLT5jbGllbnRfZGF0YS5zdXNwZW5kID0gbWRkaV9zdXNwZW5kOworCW1kZGktPmNsaWVudF9kYXRhLnJlc3VtZSA9IG1kZGlfcmVzdW1lOworCW1kZGktPmNsaWVudF9kYXRhLmFjdGl2YXRlX2xpbmsgPSBtZGRpX2FjdGl2YXRlX2xpbms7CisJbWRkaS0+Y2xpZW50X2RhdGEucmVtb3RlX3dyaXRlID0gbWRkaV9yZW1vdGVfd3JpdGU7CisJbWRkaS0+Y2xpZW50X2RhdGEucmVtb3RlX3JlYWQgPSBtZGRpX3JlbW90ZV9yZWFkOworCW1kZGktPmNsaWVudF9kYXRhLmF1dG9faGliZXJuYXRlID0gbWRkaV9zZXRfYXV0b19oaWJlcm5hdGU7CisJbWRkaS0+Y2xpZW50X2RhdGEuZmJfcmVzb3VyY2UgPSBwZGF0YS0+ZmJfcmVzb3VyY2U7CisJaWYgKHBkZXYtPmlkID09IDApCisJCW1kZGktPmNsaWVudF9kYXRhLmludGVyZmFjZV90eXBlID0gTVNNX01ERElfUE1ESF9JTlRFUkZBQ0U7CisJZWxzZSBpZiAocGRldi0+aWQgPT0gMSkKKwkJbWRkaS0+Y2xpZW50X2RhdGEuaW50ZXJmYWNlX3R5cGUgPSBNU01fTURESV9FTURIX0lOVEVSRkFDRTsKKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGRpOiBjYW4gbm90IGRldGVybWluZSBpbnRlcmZhY2UgJWQhXG4iLAorCQkgICAgICAgcGRldi0+aWQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX21kZGlfaW50ZXJmYWNlOworCX0KKworCW1kZGktPmNsaWVudF9wZGV2LmRldi5wbGF0Zm9ybV9kYXRhID0gJm1kZGktPmNsaWVudF9kYXRhOworCXByaW50ayhLRVJOX0lORk8gIm1kZGk6IHB1Ymxpc2g6ICVzXG4iLCBtZGRpLT5jbGllbnRfbmFtZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtZGRpLT5jbGllbnRfcGRldik7CisJcmV0dXJuIDA7CisKK2Vycm9yX21kZGlfaW50ZXJmYWNlOgorZXJyb3JfbWRkaV92ZXJzaW9uOgorCWZyZWVfaXJxKG1kZGktPmlycSwgMCk7CitlcnJvcl9yZXF1ZXN0X2lycToKKwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCAweDEwMDAsIG1kZGktPnJldl9kYXRhLCBtZGRpLT5yZXZfYWRkcik7CitlcnJvcl9yZXZfZGF0YToKK2Vycm9yX2Nsa19zZXR1cDoKK2Vycm9yX2dldF9pcnFfcmVzb3VyY2U6CisJaW91bm1hcChtZGRpLT5iYXNlKTsKK2Vycm9yX2lvcmVtYXA6CisKKwlwcmludGsoS0VSTl9JTkZPICJtZGRpOiBtZGRpX2luaXQoKSBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1kZGlfZHJpdmVyID0geworCS5wcm9iZSA9IG1kZGlfcHJvYmUsCisJLmRyaXZlciA9IHsgLm5hbWUgPSAibXNtX21kZGkiIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBfbWRkaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWRkaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChfbWRkaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X2R1bW15LmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9kdW1teS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYmFlODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9kdW1teS5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIGRyaXZlcnMvdmlkZW8vbXNtX2ZiL21kZGlfY2xpZW50X2R1bW15LmMKKyAqCisgKiBTdXBwb3J0IGZvciAiZHVtbXkiIG1kZGkgY2xpZW50IGRldmljZXMgd2hpY2ggcmVxdWlyZSBubworICogc3BlY2lhbCBpbml0aWFsaXphdGlvbiBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorCitzdHJ1Y3QgcGFuZWxfaW5mbyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZGV2OworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSBwYW5lbF9kYXRhOworfTsKKworc3RhdGljIGludCBtZGRpX2R1bW15X3N1c3BlbmQoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1kZGlfZHVtbXlfcmVzdW1lKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGRpX2R1bW15X2JsYW5rKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGRpX2R1bW15X3VuYmxhbmsoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1kZGlfZHVtbXlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHBhbmVsX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpbnQgcmV0OworCWlmICghcGFuZWwpCisJCXJldHVybiAtRU5PTUVNOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBhbmVsKTsKKwlwYW5lbC0+cGFuZWxfZGF0YS5zdXNwZW5kID0gbWRkaV9kdW1teV9zdXNwZW5kOworCXBhbmVsLT5wYW5lbF9kYXRhLnJlc3VtZSA9IG1kZGlfZHVtbXlfcmVzdW1lOworCXBhbmVsLT5wYW5lbF9kYXRhLmJsYW5rID0gbWRkaV9kdW1teV9ibGFuazsKKwlwYW5lbC0+cGFuZWxfZGF0YS51bmJsYW5rID0gbWRkaV9kdW1teV91bmJsYW5rOworCXBhbmVsLT5wYW5lbF9kYXRhLmNhcHMgPSBNU01GQl9DQVBfUEFSVElBTF9VUERBVEVTOworCXBhbmVsLT5wZGV2Lm5hbWUgPSAibXNtX3BhbmVsIjsKKwlwYW5lbC0+cGRldi5pZCA9IHBkZXYtPmlkOworCXBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKCZwYW5lbC0+cGRldiwKKwkJCQkgICAgICBjbGllbnRfZGF0YS0+ZmJfcmVzb3VyY2UsIDEpOworCXBhbmVsLT5wYW5lbF9kYXRhLmZiX2RhdGEgPSBjbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKwlwYW5lbC0+cGRldi5kZXYucGxhdGZvcm1fZGF0YSA9ICZwYW5lbC0+cGFuZWxfZGF0YTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbmVsLT5wZGV2KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHBhbmVsKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWRkaV9kdW1teV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlrZnJlZShwYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1kZGlfY2xpZW50X2R1bW15ID0geworCS5wcm9iZSA9IG1kZGlfZHVtbXlfcHJvYmUsCisJLnJlbW92ZSA9IG1kZGlfZHVtbXlfcmVtb3ZlLAorCS5kcml2ZXIgPSB7IC5uYW1lID0gIm1kZGlfY19kdW1teSIgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1kZGlfY2xpZW50X2R1bW15X2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1kZGlfY2xpZW50X2R1bW15KTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobWRkaV9jbGllbnRfZHVtbXlfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzc4MDUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jCkBAIC0wLDAgKzEsMjU1IEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZGRpX2NsaWVudF9udDM1Mzk5LmMKKyAqCisgKiBTdXBwb3J0IGZvciBOb3ZhdGVrIE5UMzUzOTkgTURESSBjbGllbnQgb2YgU2FwcGhpcmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSFRDIEluY29ycG9yYXRlZAorICogQXV0aG9yOiBTb2xvbW9uIENoaXUgKHNvbG9tb25fY2hpdUBodGMuY29tKQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobnQzNTM5OV92c3luY193YWl0KTsKKworc3RydWN0IHBhbmVsX2luZm8geworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZGV2OworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSBwYW5lbF9kYXRhOworCXN0cnVjdCBtc21mYl9jYWxsYmFjayAqZmJfY2FsbGJhY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHBhbmVsX3dvcms7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZiX3dxOworCWludCBudDM1Mzk5X2dvdF9pbnQ7Cit9OworCitzdGF0aWMgdm9pZAorbnQzNTM5OV9yZXF1ZXN0X3ZzeW5jKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSwKKwkJICAgICAgc3RydWN0IG1zbWZiX2NhbGxiYWNrICpjYWxsYmFjaykKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJcGFuZWwtPmZiX2NhbGxiYWNrID0gY2FsbGJhY2s7CisJaWYgKHBhbmVsLT5udDM1Mzk5X2dvdF9pbnQpIHsKKwkJcGFuZWwtPm50MzUzOTlfZ290X2ludCA9IDA7CisJCWNsaWVudF9kYXRhLT5hY3RpdmF0ZV9saW5rKGNsaWVudF9kYXRhKTsgLyogY2xlYXJzIGludGVycnVwdCAqLworCX0KK30KKworc3RhdGljIHZvaWQgbnQzNTM5OV93YWl0X3ZzeW5jKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJaWYgKHBhbmVsLT5udDM1Mzk5X2dvdF9pbnQpIHsKKwkJcGFuZWwtPm50MzUzOTlfZ290X2ludCA9IDA7CisJCWNsaWVudF9kYXRhLT5hY3RpdmF0ZV9saW5rKGNsaWVudF9kYXRhKTsgLyogY2xlYXJzIGludGVycnVwdCAqLworCX0KKworCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQobnQzNTM5OV92c3luY193YWl0LCBwYW5lbC0+bnQzNTM5OV9nb3RfaW50LAorCQkJCUhaLzIpID09IDApCisJCXByaW50ayhLRVJOX0VSUiAidGltZW91dCB3YWl0aW5nIGZvciBWU1lOQ1xuIik7CisKKwlwYW5lbC0+bnQzNTM5OV9nb3RfaW50ID0gMDsKKwkvKiBpbnRlcnJ1cHQgY2xlYXJzIHdoZW4gc2NyZWVuIGRtYSBzdGFydHMgKi8KK30KKworc3RhdGljIGludCBudDM1Mzk5X3N1c3BlbmQoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGNvbnRhaW5lcl9vZihwYW5lbF9kYXRhLCBzdHJ1Y3QgcGFuZWxfaW5mbywKKwkJCQkJCXBhbmVsX2RhdGEpOworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGEgPSBwYW5lbC0+Y2xpZW50X2RhdGE7CisKKwlzdHJ1Y3QgbXNtX21kZGlfYnJpZGdlX3BsYXRmb3JtX2RhdGEgKmJyaWRnZV9kYXRhID0KKwkJY2xpZW50X2RhdGEtPnByaXZhdGVfY2xpZW50X2RhdGE7CisJaW50IHJldDsKKworCXJldCA9IGJyaWRnZV9kYXRhLT51bmluaXQoYnJpZGdlX2RhdGEsIGNsaWVudF9kYXRhKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1kZGkgbnQzNTM5OSBjbGllbnQ6IG5vbiB6ZXJvIHJldHVybiBmcm9tICIKKwkJCSJ1bmluaXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljbGllbnRfZGF0YS0+c3VzcGVuZChjbGllbnRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnQzNTM5OV9yZXN1bWUoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGNvbnRhaW5lcl9vZihwYW5lbF9kYXRhLCBzdHJ1Y3QgcGFuZWxfaW5mbywKKwkJCQkJCXBhbmVsX2RhdGEpOworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGEgPSBwYW5lbC0+Y2xpZW50X2RhdGE7CisKKwlzdHJ1Y3QgbXNtX21kZGlfYnJpZGdlX3BsYXRmb3JtX2RhdGEgKmJyaWRnZV9kYXRhID0KKwkJY2xpZW50X2RhdGEtPnByaXZhdGVfY2xpZW50X2RhdGE7CisJaW50IHJldDsKKworCWNsaWVudF9kYXRhLT5yZXN1bWUoY2xpZW50X2RhdGEpOworCXJldCA9IGJyaWRnZV9kYXRhLT5pbml0KGJyaWRnZV9kYXRhLCBjbGllbnRfZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudDM1Mzk5X2JsYW5rKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCXN0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSAqYnJpZGdlX2RhdGEgPQorCQljbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKworCXJldHVybiBicmlkZ2VfZGF0YS0+YmxhbmsoYnJpZGdlX2RhdGEsIGNsaWVudF9kYXRhKTsKK30KKworc3RhdGljIGludCBudDM1Mzk5X3VuYmxhbmsoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGNvbnRhaW5lcl9vZihwYW5lbF9kYXRhLCBzdHJ1Y3QgcGFuZWxfaW5mbywKKwkJCQkJCXBhbmVsX2RhdGEpOworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGEgPSBwYW5lbC0+Y2xpZW50X2RhdGE7CisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCisJcmV0dXJuIGJyaWRnZV9kYXRhLT51bmJsYW5rKGJyaWRnZV9kYXRhLCBjbGllbnRfZGF0YSk7Cit9CisKK2lycXJldHVybl90IG50MzUzOTlfdnN5bmNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gZGF0YTsKKworCXBhbmVsLT5udDM1Mzk5X2dvdF9pbnQgPSAxOworCisJaWYgKHBhbmVsLT5mYl9jYWxsYmFjaykgeworCQlwYW5lbC0+ZmJfY2FsbGJhY2stPmZ1bmMocGFuZWwtPmZiX2NhbGxiYWNrKTsKKwkJcGFuZWwtPmZiX2NhbGxiYWNrID0gTlVMTDsKKwl9CisKKwl3YWtlX3VwKCZudDM1Mzk5X3ZzeW5jX3dhaXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNldHVwX3ZzeW5jKHN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCwgaW50IGluaXQpCit7CisJaW50IHJldDsKKwlpbnQgZ3BpbyA9IDk3OworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpZiAoIWluaXQpIHsKKwkJcmV0ID0gMDsKKwkJZ290byB1bmluaXQ7CisJfQorCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCAidnN5bmMiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXF1ZXN0X2dwaW9fZmFpbGVkOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ3Bpb19kaXJlY3Rpb25faW5wdXRfZmFpbGVkOworCisJcmV0ID0gaXJxID0gZ3Bpb190b19pcnEoZ3Bpbyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2dldF9pcnFfbnVtX2ZhaWxlZDsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbnQzNTM5OV92c3luY19pbnRlcnJ1cHQsIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICJ2c3luYyIsIHBhbmVsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXF1ZXN0X2lycV9mYWlsZWQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJ2c3luYyBvbiBncGlvICVkIG5vdyAlZFxuIiwKKwkgICAgICAgZ3BpbywgZ3Bpb19nZXRfdmFsdWUoZ3BpbykpOworCXJldHVybiAwOworCit1bmluaXQ6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3BpbyksIHBhbmVsLT5jbGllbnRfZGF0YSk7CitlcnJfcmVxdWVzdF9pcnFfZmFpbGVkOgorZXJyX2dldF9pcnFfbnVtX2ZhaWxlZDoKK2Vycl9ncGlvX2RpcmVjdGlvbl9pbnB1dF9mYWlsZWQ6CisJZ3Bpb19mcmVlKGdwaW8pOworZXJyX3JlcXVlc3RfZ3Bpb19mYWlsZWQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZGRpX250MzUzOTlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCisJaW50IHJldDsKKworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYW5lbF9pbmZvKSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVudGVyLlxuIiwgX19mdW5jX18pOworCisJaWYgKCFwYW5lbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGFuZWwpOworCisJcmV0ID0gc2V0dXBfdnN5bmMocGFuZWwsIDEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWRkaV9udDM1Mzk5X3NldHVwX3ZzeW5jIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGFuZWwtPmNsaWVudF9kYXRhID0gY2xpZW50X2RhdGE7CisJcGFuZWwtPnBhbmVsX2RhdGEuc3VzcGVuZCA9IG50MzUzOTlfc3VzcGVuZDsKKwlwYW5lbC0+cGFuZWxfZGF0YS5yZXN1bWUgPSBudDM1Mzk5X3Jlc3VtZTsKKwlwYW5lbC0+cGFuZWxfZGF0YS53YWl0X3ZzeW5jID0gbnQzNTM5OV93YWl0X3ZzeW5jOworCXBhbmVsLT5wYW5lbF9kYXRhLnJlcXVlc3RfdnN5bmMgPSBudDM1Mzk5X3JlcXVlc3RfdnN5bmM7CisJcGFuZWwtPnBhbmVsX2RhdGEuYmxhbmsgPSBudDM1Mzk5X2JsYW5rOworCXBhbmVsLT5wYW5lbF9kYXRhLnVuYmxhbmsgPSBudDM1Mzk5X3VuYmxhbms7CisJcGFuZWwtPnBhbmVsX2RhdGEuZmJfZGF0YSA9ICZicmlkZ2VfZGF0YS0+ZmJfZGF0YTsKKwlwYW5lbC0+cGFuZWxfZGF0YS5jYXBzID0gMDsKKworCXBhbmVsLT5wZGV2Lm5hbWUgPSAibXNtX3BhbmVsIjsKKwlwYW5lbC0+cGRldi5pZCA9IHBkZXYtPmlkOworCXBhbmVsLT5wZGV2LnJlc291cmNlID0gY2xpZW50X2RhdGEtPmZiX3Jlc291cmNlOworCXBhbmVsLT5wZGV2Lm51bV9yZXNvdXJjZXMgPSAxOworCXBhbmVsLT5wZGV2LmRldi5wbGF0Zm9ybV9kYXRhID0gJnBhbmVsLT5wYW5lbF9kYXRhOworCisJaWYgKGJyaWRnZV9kYXRhLT5pbml0KQorCQlicmlkZ2VfZGF0YS0+aW5pdChicmlkZ2VfZGF0YSwgY2xpZW50X2RhdGEpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYW5lbC0+cGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGRpX250MzUzOTlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzZXR1cF92c3luYyhwYW5lbCwgMCk7CisJa2ZyZWUocGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZGRpX2NsaWVudF8wYmRhXzhhNDcgPSB7CisJLnByb2JlID0gbWRkaV9udDM1Mzk5X3Byb2JlLAorCS5yZW1vdmUgPSBtZGRpX250MzUzOTlfcmVtb3ZlLAorCS5kcml2ZXIgPSB7IC5uYW1lID0gIm1kZGlfY18wYmRhXzhhNDciIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtZGRpX2NsaWVudF9udDM1Mzk5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtZGRpX2NsaWVudF8wYmRhXzhhNDcpOworfQorCittb2R1bGVfaW5pdChtZGRpX2NsaWVudF9udDM1Mzk5X2luaXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMGY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYwpAQCAtMCwwICsxLDI4MyBAQAorLyogZHJpdmVycy92aWRlby9tc21fZmIvbWRkaV9jbGllbnRfdG9zaGliYS5jCisgKgorICogU3VwcG9ydCBmb3IgVG9zaGliYSBUQzM1ODcyMFhCRyBtZGRpIGNsaWVudCBkZXZpY2VzIHdoaWNoIHJlcXVpcmUgbm8KKyAqIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorCisKKyNkZWZpbmUgTENEX0NPTlRST0xfQkxPQ0tfQkFTRSAweDExMDAwMAorI2RlZmluZSBDTU4gICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZSBJTlRGTEcgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDE4KQorI2RlZmluZSBIQ1lDTEUgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDM0KQorI2RlZmluZSBIREVfU1RBUlQgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDNDKQorI2RlZmluZSBWUE9TICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEMwKQorI2RlZmluZSBNUExGQlVGICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDIwKQorI2RlZmluZSBXQUtFVVAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDU0KQorI2RlZmluZSBXU1lOX0RMWSAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDU4KQorI2RlZmluZSBSRUdFTkIgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDVDKQorCisjZGVmaW5lIEJBU0U1IDB4MTUwMDAwCisjZGVmaW5lIEJBU0U2IDB4MTYwMDAwCisjZGVmaW5lIEJBU0U3IDB4MTcwMDAwCisKKyNkZWZpbmUgR1BJT0lFViAgICAgKEJBU0U1ICsgMHgxMCkKKyNkZWZpbmUgR1BJT0lFICAgICAgKEJBU0U1ICsgMHgxNCkKKyNkZWZpbmUgR1BJT1JJUyAgICAgKEJBU0U1ICsgMHgxOCkKKyNkZWZpbmUgR1BJT01JUyAgICAgKEJBU0U1ICsgMHgxQykKKyNkZWZpbmUgR1BJT0lDICAgICAgKEJBU0U1ICsgMHgyMCkKKworI2RlZmluZSBJTlRNQVNLICAgICAoQkFTRTYgKyAweDBDKQorI2RlZmluZSBJTlRNQVNLX1ZXQUtFT1VUICgxVSA8PCAwKQorI2RlZmluZSBJTlRNQVNLX1ZXQUtFT1VUX0FDVElWRV9MT1cgKDFVIDw8IDgpCisjZGVmaW5lIEdQSU9TRUwgICAgIChCQVNFNyArIDB4MDApCisjZGVmaW5lIEdQSU9TRUxfVldBS0VJTlQgKDFVIDw8IDApCisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0b3NoaWJhX3ZzeW5jX3dhaXQpOworCitzdHJ1Y3QgcGFuZWxfaW5mbyB7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBkZXY7CisJc3RydWN0IG1zbV9wYW5lbF9kYXRhIHBhbmVsX2RhdGE7CisJc3RydWN0IG1zbWZiX2NhbGxiYWNrICp0b3NoaWJhX2NhbGxiYWNrOworCWludCB0b3NoaWJhX2dvdF9pbnQ7Cit9OworCisKK3N0YXRpYyB2b2lkIHRvc2hpYmFfcmVxdWVzdF92c3luYyhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEsCisJCQkJICBzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgKmNhbGxiYWNrKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGNvbnRhaW5lcl9vZihwYW5lbF9kYXRhLCBzdHJ1Y3QgcGFuZWxfaW5mbywKKwkJCQkJCXBhbmVsX2RhdGEpOworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGEgPSBwYW5lbC0+Y2xpZW50X2RhdGE7CisKKwlwYW5lbC0+dG9zaGliYV9jYWxsYmFjayA9IGNhbGxiYWNrOworCWlmIChwYW5lbC0+dG9zaGliYV9nb3RfaW50KSB7CisJCXBhbmVsLT50b3NoaWJhX2dvdF9pbnQgPSAwOworCQljbGllbnRfZGF0YS0+YWN0aXZhdGVfbGluayhjbGllbnRfZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0b3NoaWJhX2NsZWFyX3ZzeW5jKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJY2xpZW50X2RhdGEtPmFjdGl2YXRlX2xpbmsoY2xpZW50X2RhdGEpOworfQorCitzdGF0aWMgdm9pZCB0b3NoaWJhX3dhaXRfdnN5bmMoc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGNvbnRhaW5lcl9vZihwYW5lbF9kYXRhLCBzdHJ1Y3QgcGFuZWxfaW5mbywKKwkJCQkJCXBhbmVsX2RhdGEpOworCXN0cnVjdCBtc21fbWRkaV9jbGllbnRfZGF0YSAqY2xpZW50X2RhdGEgPSBwYW5lbC0+Y2xpZW50X2RhdGE7CisKKwlpZiAocGFuZWwtPnRvc2hpYmFfZ290X2ludCkgeworCQlwYW5lbC0+dG9zaGliYV9nb3RfaW50ID0gMDsKKwkJY2xpZW50X2RhdGEtPmFjdGl2YXRlX2xpbmsoY2xpZW50X2RhdGEpOyAvKiBjbGVhcnMgaW50ZXJydXB0ICovCisJfQorCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQodG9zaGliYV92c3luY193YWl0LCBwYW5lbC0+dG9zaGliYV9nb3RfaW50LAorCQkJCUhaLzIpID09IDApCisJCXByaW50ayhLRVJOX0VSUiAidGltZW91dCB3YWl0aW5nIGZvciBWU1lOQ1xuIik7CisJcGFuZWwtPnRvc2hpYmFfZ290X2ludCA9IDA7CisJLyogaW50ZXJydXB0IGNsZWFycyB3aGVuIHNjcmVlbiBkbWEgc3RhcnRzICovCit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9zdXNwZW5kKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBicmlkZ2VfZGF0YS0+dW5pbml0KGJyaWRnZV9kYXRhLCBjbGllbnRfZGF0YSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9JTkZPICJtZGRpIHRvc2hpYmEgY2xpZW50OiBub24gemVybyByZXR1cm4gZnJvbSAiCisJCQkidW5pbml0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY2xpZW50X2RhdGEtPnN1c3BlbmQoY2xpZW50X2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfcmVzdW1lKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCWludCByZXQ7CisKKwljbGllbnRfZGF0YS0+cmVzdW1lKGNsaWVudF9kYXRhKTsKKwlyZXQgPSBicmlkZ2VfZGF0YS0+aW5pdChicmlkZ2VfZGF0YSwgY2xpZW50X2RhdGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9ibGFuayhzdHJ1Y3QgbXNtX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBhbmVsID0gY29udGFpbmVyX29mKHBhbmVsX2RhdGEsIHN0cnVjdCBwYW5lbF9pbmZvLAorCQkJCQkJcGFuZWxfZGF0YSk7CisJc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSA9IHBhbmVsLT5jbGllbnRfZGF0YTsKKwlzdHJ1Y3QgbXNtX21kZGlfYnJpZGdlX3BsYXRmb3JtX2RhdGEgKmJyaWRnZV9kYXRhID0KKwkJY2xpZW50X2RhdGEtPnByaXZhdGVfY2xpZW50X2RhdGE7CisKKwlyZXR1cm4gYnJpZGdlX2RhdGEtPmJsYW5rKGJyaWRnZV9kYXRhLCBjbGllbnRfZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV91bmJsYW5rKHN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBjb250YWluZXJfb2YocGFuZWxfZGF0YSwgc3RydWN0IHBhbmVsX2luZm8sCisJCQkJCQlwYW5lbF9kYXRhKTsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGFuZWwtPmNsaWVudF9kYXRhOworCXN0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSAqYnJpZGdlX2RhdGEgPQorCQljbGllbnRfZGF0YS0+cHJpdmF0ZV9jbGllbnRfZGF0YTsKKworCXJldHVybiBicmlkZ2VfZGF0YS0+dW5ibGFuayhicmlkZ2VfZGF0YSwgY2xpZW50X2RhdGEpOworfQorCitpcnFyZXR1cm5fdCB0b3NoaWJhX3ZzeW5jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9IGRhdGE7CisKKwlwYW5lbC0+dG9zaGliYV9nb3RfaW50ID0gMTsKKwlpZiAocGFuZWwtPnRvc2hpYmFfY2FsbGJhY2spIHsKKwkJcGFuZWwtPnRvc2hpYmFfY2FsbGJhY2stPmZ1bmMocGFuZWwtPnRvc2hpYmFfY2FsbGJhY2spOworCQlwYW5lbC0+dG9zaGliYV9jYWxsYmFjayA9IDA7CisJfQorCXdha2VfdXAoJnRvc2hpYmFfdnN5bmNfd2FpdCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNldHVwX3ZzeW5jKHN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCwKKwkJICAgICAgIGludCBpbml0KQoreworCWludCByZXQ7CisJaW50IGdwaW8gPSA5NzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKCFpbml0KSB7CisJCXJldCA9IDA7CisJCWdvdG8gdW5pbml0OworCX0KKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgInZzeW5jIik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVxdWVzdF9ncGlvX2ZhaWxlZDsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZGlyZWN0aW9uX2lucHV0X2ZhaWxlZDsKKworCXJldCA9IGlycSA9IGdwaW9fdG9faXJxKGdwaW8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9nZXRfaXJxX251bV9mYWlsZWQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHRvc2hpYmFfdnN5bmNfaW50ZXJydXB0LCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICAidnN5bmMiLCBwYW5lbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVxdWVzdF9pcnFfZmFpbGVkOworCXByaW50ayhLRVJOX0lORk8gInZzeW5jIG9uIGdwaW8gJWQgbm93ICVkXG4iLAorCSAgICAgICBncGlvLCBncGlvX2dldF92YWx1ZShncGlvKSk7CisJcmV0dXJuIDA7CisKK3VuaW5pdDoKKwlmcmVlX2lycShncGlvX3RvX2lycShncGlvKSwgcGFuZWwpOworZXJyX3JlcXVlc3RfaXJxX2ZhaWxlZDoKK2Vycl9nZXRfaXJxX251bV9mYWlsZWQ6CitlcnJfZ3Bpb19kaXJlY3Rpb25faW5wdXRfZmFpbGVkOgorCWdwaW9fZnJlZShncGlvKTsKK2Vycl9yZXF1ZXN0X2dwaW9fZmFpbGVkOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWRkaV90b3NoaWJhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSA9CisJCWNsaWVudF9kYXRhLT5wcml2YXRlX2NsaWVudF9kYXRhOworCXN0cnVjdCBwYW5lbF9pbmZvICpwYW5lbCA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYW5lbF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYW5lbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGFuZWwpOworCisJLyogbWRkaV9yZW1vdGVfd3JpdGUobWRkaSwgMCwgV0FLRVVQKTsgKi8KKwljbGllbnRfZGF0YS0+cmVtb3RlX3dyaXRlKGNsaWVudF9kYXRhLCBHUElPU0VMX1ZXQUtFSU5ULCBHUElPU0VMKTsKKwljbGllbnRfZGF0YS0+cmVtb3RlX3dyaXRlKGNsaWVudF9kYXRhLCBJTlRNQVNLX1ZXQUtFT1VULCBJTlRNQVNLKTsKKworCXJldCA9IHNldHVwX3ZzeW5jKHBhbmVsLCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1kZGlfYnJpZGdlX3NldHVwX3ZzeW5jIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGFuZWwtPmNsaWVudF9kYXRhID0gY2xpZW50X2RhdGE7CisJcGFuZWwtPnBhbmVsX2RhdGEuc3VzcGVuZCA9IHRvc2hpYmFfc3VzcGVuZDsKKwlwYW5lbC0+cGFuZWxfZGF0YS5yZXN1bWUgPSB0b3NoaWJhX3Jlc3VtZTsKKwlwYW5lbC0+cGFuZWxfZGF0YS53YWl0X3ZzeW5jID0gdG9zaGliYV93YWl0X3ZzeW5jOworCXBhbmVsLT5wYW5lbF9kYXRhLnJlcXVlc3RfdnN5bmMgPSB0b3NoaWJhX3JlcXVlc3RfdnN5bmM7CisJcGFuZWwtPnBhbmVsX2RhdGEuY2xlYXJfdnN5bmMgPSB0b3NoaWJhX2NsZWFyX3ZzeW5jOworCXBhbmVsLT5wYW5lbF9kYXRhLmJsYW5rID0gdG9zaGliYV9ibGFuazsKKwlwYW5lbC0+cGFuZWxfZGF0YS51bmJsYW5rID0gdG9zaGliYV91bmJsYW5rOworCXBhbmVsLT5wYW5lbF9kYXRhLmZiX2RhdGEgPSAgJmJyaWRnZV9kYXRhLT5mYl9kYXRhOworCXBhbmVsLT5wYW5lbF9kYXRhLmNhcHMgPSBNU01GQl9DQVBfUEFSVElBTF9VUERBVEVTOworCisJcGFuZWwtPnBkZXYubmFtZSA9ICJtc21fcGFuZWwiOworCXBhbmVsLT5wZGV2LmlkID0gcGRldi0+aWQ7CisJcGFuZWwtPnBkZXYucmVzb3VyY2UgPSBjbGllbnRfZGF0YS0+ZmJfcmVzb3VyY2U7CisJcGFuZWwtPnBkZXYubnVtX3Jlc291cmNlcyA9IDE7CisJcGFuZWwtPnBkZXYuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcGFuZWwtPnBhbmVsX2RhdGE7CisJYnJpZGdlX2RhdGEtPmluaXQoYnJpZGdlX2RhdGEsIGNsaWVudF9kYXRhKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbmVsLT5wZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1kZGlfdG9zaGliYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGFuZWwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNldHVwX3ZzeW5jKHBhbmVsLCAwKTsKKwlrZnJlZShwYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1kZGlfY2xpZW50X2QyNjNfMDAwMCA9IHsKKwkucHJvYmUgPSBtZGRpX3Rvc2hpYmFfcHJvYmUsCisJLnJlbW92ZSA9IG1kZGlfdG9zaGliYV9yZW1vdmUsCisJLmRyaXZlciA9IHsgLm5hbWUgPSAibWRkaV9jX2QyNjNfMDAwMCIgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1kZGlfY2xpZW50X3Rvc2hpYmFfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWRkaV9jbGllbnRfZDI2M18wMDAwKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobWRkaV9jbGllbnRfdG9zaGliYV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9ody5oIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2MwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2h3LmgKQEAgLTAsMCArMSwzMDUgQEAKKy8qIGRyaXZlcnMvdmlkZW8vbXNtX2ZiL21kZGlfaHcuaAorICoKKyAqIE1TTSBNRERJIEhhcmR3YXJlIFJlZ2lzdGVycyBhbmQgU3RydWN0dXJlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NRERJX0hXX0hfCisjZGVmaW5lIF9NRERJX0hXX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE1ERElfQ01EICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBNRERJX1ZFUlNJT04gICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgTURESV9QUklfUFRSICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE1ERElfU0VDX1BUUiAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBNRERJX0JQUyAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgTURESV9TUE0gICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIE1ERElfSU5UICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBNRERJX0lOVEVOICAgICAgICAgICAgICAweDAwMWMKKyNkZWZpbmUgTURESV9SRVZfUFRSICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIE1ERElfUkVWX1NJWkUgICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBNRERJX1NUQVQgICAgICAgICAgICAgICAweDAwMjgKKyNkZWZpbmUgTURESV9SRVZfUkFURV9ESVYgICAgICAgMHgwMDJjCisjZGVmaW5lIE1ERElfUkVWX0NSQ19FUlIgICAgICAgIDB4MDAzMAorI2RlZmluZSBNRERJX1RBMV9MRU4gICAgICAgICAgICAweDAwMzQKKyNkZWZpbmUgTURESV9UQTJfTEVOICAgICAgICAgICAgMHgwMDM4CisjZGVmaW5lIE1ERElfVEVTVF9CVVMgICAgICAgICAgIDB4MDAzYworI2RlZmluZSBNRERJX1RFU1QgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgTURESV9SRVZfUEtUX0NOVCAgICAgICAgMHgwMDQ0CisjZGVmaW5lIE1ERElfRFJJVkVfSEkgICAgICAgICAgIDB4MDA0OAorI2RlZmluZSBNRERJX0RSSVZFX0xPICAgICAgICAgICAweDAwNGMKKyNkZWZpbmUgTURESV9ESVNQX1dBS0UgICAgICAgICAgMHgwMDUwCisjZGVmaW5lIE1ERElfUkVWX0VOQ0FQX1NaICAgICAgIDB4MDA1NAorI2RlZmluZSBNRERJX1JURF9WQUwgICAgICAgICAgICAweDAwNTgKKyNkZWZpbmUgTURESV9QQURfQ1RMICAgICAgICAgICAgMHgwMDY4CisjZGVmaW5lIE1ERElfRFJJVkVSX1NUQVJUX0NOVCAgIDB4MDA2YworI2RlZmluZSBNRERJX05FWFRfUFJJX1BUUiAgICAgICAweDAwNzAKKyNkZWZpbmUgTURESV9ORVhUX1NFQ19QVFIgICAgICAgMHgwMDc0CisjZGVmaW5lIE1ERElfTUlTUl9DVEwgICAgICAgICAgIDB4MDA3OAorI2RlZmluZSBNRERJX01JU1JfREFUQSAgICAgICAgICAweDAwN2MKKyNkZWZpbmUgTURESV9TRl9DTlQgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIE1ERElfTUZfQ05UICAgICAgICAgICAgIDB4MDA4NAorI2RlZmluZSBNRERJX0NVUlJfUkVWX1BUUiAgICAgICAweDAwODgKKyNkZWZpbmUgTURESV9DT1JFX1ZFUiAgICAgICAgICAgMHgwMDhjCisKKyNkZWZpbmUgTURESV9JTlRfUFJJX1BUUl9SRUFEICAgICAgIDB4MDAwMQorI2RlZmluZSBNRERJX0lOVF9TRUNfUFRSX1JFQUQgICAgICAgMHgwMDAyCisjZGVmaW5lIE1ERElfSU5UX1JFVl9EQVRBX0FWQUlMICAgICAweDAwMDQKKyNkZWZpbmUgTURESV9JTlRfRElTUF9SRVEgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBNRERJX0lOVF9QUklfVU5ERVJGTE9XICAgICAgMHgwMDEwCisjZGVmaW5lIE1ERElfSU5UX1NFQ19VTkRFUkZMT1cgICAgICAweDAwMjAKKyNkZWZpbmUgTURESV9JTlRfUkVWX09WRVJGTE9XICAgICAgIDB4MDA0MAorI2RlZmluZSBNRERJX0lOVF9DUkNfRVJST1IgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIE1ERElfSU5UX01ERElfSU4gICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgTURESV9JTlRfUFJJX09WRVJXUklURSAgICAgIDB4MDIwMAorI2RlZmluZSBNRERJX0lOVF9TRUNfT1ZFUldSSVRFICAgICAgMHgwNDAwCisjZGVmaW5lIE1ERElfSU5UX1JFVl9PVkVSV1JJVEUgICAgICAweDA4MDAKKyNkZWZpbmUgTURESV9JTlRfRE1BX0ZBSUxVUkUgICAgICAgIDB4MTAwMAorI2RlZmluZSBNRERJX0lOVF9MSU5LX0FDVElWRSAgICAgICAgMHgyMDAwCisjZGVmaW5lIE1ERElfSU5UX0lOX0hJQkVSTkFUSU9OICAgICAweDQwMDAKKyNkZWZpbmUgTURESV9JTlRfUFJJX0xJTktfTElTVF9ET05FIDB4ODAwMAorI2RlZmluZSBNRERJX0lOVF9TRUNfTElOS19MSVNUX0RPTkUgMHgxMDAwMAorI2RlZmluZSBNRERJX0lOVF9OT19DTURfUEtUU19QRU5EICAgMHgyMDAwMAorI2RlZmluZSBNRERJX0lOVF9SVERfRkFJTFVSRSAgICAgICAgMHg0MDAwMAorI2RlZmluZSBNRERJX0lOVF9SRVZfUEtUX1JFQ0VJVkVEICAgMHg4MDAwMAorI2RlZmluZSBNRERJX0lOVF9SRVZfUEtUU19BVkFJTCAgICAgMHgxMDAwMDAKKworI2RlZmluZSBNRERJX0lOVF9ORUVEX0NMRUFSICggXAorCU1ERElfSU5UX1JFVl9EQVRBX0FWQUlMIHwgXAorCU1ERElfSU5UX1BSSV9VTkRFUkZMT1cgfCBcCisJTURESV9JTlRfU0VDX1VOREVSRkxPVyB8IFwKKwlNRERJX0lOVF9SRVZfT1ZFUkZMT1cgfCBcCisJTURESV9JTlRfQ1JDX0VSUk9SIHwgXAorCU1ERElfSU5UX1JFVl9QS1RfUkVDRUlWRUQpCisKKworI2RlZmluZSBNRERJX1NUQVRfTElOS19BQ1RJVkUgICAgICAgIDB4MDAwMQorI2RlZmluZSBNRERJX1NUQVRfTkVXX1JFVl9QVFIgICAgICAgIDB4MDAwMgorI2RlZmluZSBNRERJX1NUQVRfTkVXX1BSSV9QVFIgICAgICAgIDB4MDAwNAorI2RlZmluZSBNRERJX1NUQVRfTkVXX1NFQ19QVFIgICAgICAgIDB4MDAwOAorI2RlZmluZSBNRERJX1NUQVRfSU5fSElCRVJOQVRJT04gICAgIDB4MDAxMAorI2RlZmluZSBNRERJX1NUQVRfUFJJX0xJTktfTElTVF9ET05FIDB4MDAyMAorI2RlZmluZSBNRERJX1NUQVRfU0VDX0xJTktfTElTVF9ET05FIDB4MDA0MAorI2RlZmluZSBNRERJX1NUQVRfUEVORElOR19USU1JTkdfUEtUIDB4MDA4MAorI2RlZmluZSBNRERJX1NUQVRfUEVORElOR19SRVZfRU5DQVAgIDB4MDEwMAorI2RlZmluZSBNRERJX1NUQVRfUEVORElOR19QT1dFUkRPV04gIDB4MDIwMAorI2RlZmluZSBNRERJX1NUQVRfUlREX01FQVNfRkFJTCAgICAgIDB4MDgwMAorI2RlZmluZSBNRERJX1NUQVRfQ0xJRU5UX1dBS0VVUF9SRVEgIDB4MTAwMAorCisKKyNkZWZpbmUgTURESV9DTURfUE9XRVJET1dOICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgTURESV9DTURfUE9XRVJVUCAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgTURESV9DTURfSElCRVJOQVRFICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgTURESV9DTURfUkVTRVQgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgTURESV9DTURfRElTUF9JR05PUkUgICAgICAgICAweDA1MDEKKyNkZWZpbmUgTURESV9DTURfRElTUF9MSVNURU4gICAgICAgICAweDA1MDAKKyNkZWZpbmUgTURESV9DTURfU0VORF9SRVZfRU5DQVAgICAgICAweDA2MDAKKyNkZWZpbmUgTURESV9DTURfR0VUX0NMSUVOVF9DQVAgICAgICAweDA2MDEKKyNkZWZpbmUgTURESV9DTURfR0VUX0NMSUVOVF9TVEFUVVMgICAweDA2MDIKKyNkZWZpbmUgTURESV9DTURfU0VORF9SVEQgICAgICAgICAgICAweDA3MDAKKyNkZWZpbmUgTURESV9DTURfTElOS19BQ1RJVkUgICAgICAgICAweDA5MDAKKyNkZWZpbmUgTURESV9DTURfUEVSSU9ESUNfUkVWX0VOQ0FQICAweDBBMDAKKyNkZWZpbmUgTURESV9DTURfRk9SQ0VfTkVXX1JFVl9QVFIgICAweDBDMDAKKworCisKKyNkZWZpbmUgTURESV9WSURFT19SRVZfUEtUX1NJWkUgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTURESV9DTElFTlRfQ0FQQUJJTElUWV9SRVZfUEtUX1NJWkUgIDB4NjAKKyNkZWZpbmUgTURESV9NQVhfUkVWX1BLVF9TSVpFICAgICAgICAgICAgICAgIDB4NjAKKworLyogI2RlZmluZSBNRERJX1JFVl9CVUZGRVJfU0laRSAxMjggKi8KKyNkZWZpbmUgTURESV9SRVZfQlVGRkVSX1NJWkUgKE1ERElfTUFYX1JFVl9QS1RfU0laRSAqIDQpCisKKy8qIE1EUCBzZW5kcyAyNTYgcGl4ZWwgcGFja2V0cywgc28gbG93ZXIgdmFsdWUgaGliZXJuYXRlcyBtb3JlIHdpdGhvdXQKKyAqIHNpZ25pZmljYW50bHkgaW5jcmVhc2luZyBsYXRlbmN5IG9mIHdhaXRpbmcgZm9yIG5leHQgc3ViZnJhbWUgKi8KKyNkZWZpbmUgTURESV9IT1NUX0JZVEVTX1BFUl9TVUJGUkFNRSAgMHgzQzAwCisjZGVmaW5lIE1ERElfSE9TVF9UQTJfTEVOICAgICAgIDB4MDAwYworI2RlZmluZSBNRERJX0hPU1RfUkVWX1JBVEVfRElWICAweDAwMDIKKworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbWRkaV9yZXZfcGFja2V0IHsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDE2X3QgdHlwZTsKKwl1aW50MTZfdCBjbGllbnRfaWQ7Cit9OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbWRkaV9jbGllbnRfc3RhdHVzIHsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDE2X3QgdHlwZTsKKwl1aW50MTZfdCBjbGllbnRfaWQ7CisJdWludDE2X3QgcmV2ZXJzZV9saW5rX3JlcXVlc3Q7ICAvKiBieXRlcyBuZWVkZWQgaW4gcmV2IGVuY2FwIG1lc3NhZ2UgKi8KKwl1aW50OF90ICBjcmNfZXJyb3JfY291bnQ7CisJdWludDhfdCAgY2FwYWJpbGl0eV9jaGFuZ2U7CisJdWludDE2X3QgZ3JhcGhpY3NfYnVzeV9mbGFnczsKKwl1aW50MTZfdCBjcmMxNjsKK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtZGRpX2NsaWVudF9jYXBzIHsKKwl1aW50MTZfdCBsZW5ndGg7IC8qIGxlbmd0aCwgZXhjbHVzaXZlIG9mIHRoaXMgZmllbGQgKi8KKwl1aW50MTZfdCB0eXBlOyAvKiA2NiAqLworCXVpbnQxNl90IGNsaWVudF9pZDsKKworCXVpbnQxNl90IFByb3RvY29sX1ZlcnNpb247CisJdWludDE2X3QgTWluaW11bV9Qcm90b2NvbF9WZXJzaW9uOworCXVpbnQxNl90IERhdGFfUmF0ZV9DYXBhYmlsaXR5OworCXVpbnQ4X3QgIEludGVyZmFjZV9UeXBlX0NhcGFiaWxpdHk7CisJdWludDhfdCAgTnVtYmVyX29mX0FsdF9EaXNwbGF5czsKKwl1aW50MTZfdCBQb3N0Q2FsX0RhdGFfUmF0ZTsKKwl1aW50MTZfdCBCaXRtYXBfV2lkdGg7CisJdWludDE2X3QgQml0bWFwX0hlaWdodDsKKwl1aW50MTZfdCBEaXNwbGF5X1dpbmRvd19XaWR0aDsKKwl1aW50MTZfdCBEaXNwbGF5X1dpbmRvd19IZWlnaHQ7CisJdWludDMyX3QgQ29sb3JfTWFwX1NpemU7CisJdWludDE2X3QgQ29sb3JfTWFwX1JHQl9XaWR0aDsKKwl1aW50MTZfdCBSR0JfQ2FwYWJpbGl0eTsKKwl1aW50OF90ICBNb25vY2hyb21lX0NhcGFiaWxpdHk7CisJdWludDhfdCAgUmVzZXJ2ZWRfMTsKKwl1aW50MTZfdCBZX0NiX0NyX0NhcGFiaWxpdHk7CisJdWludDE2X3QgQmF5ZXJfQ2FwYWJpbGl0eTsKKwl1aW50MTZfdCBBbHBoYV9DdXJzb3JfSW1hZ2VfUGxhbmVzOworCXVpbnQzMl90IENsaWVudF9GZWF0dXJlX0NhcGFiaWxpdHlfSW5kaWNhdG9yczsKKwl1aW50OF90ICBNYXhpbXVtX1ZpZGVvX0ZyYW1lX1JhdGVfQ2FwYWJpbGl0eTsKKwl1aW50OF90ICBNaW5pbXVtX1ZpZGVvX0ZyYW1lX1JhdGVfQ2FwYWJpbGl0eTsKKwl1aW50MTZfdCBNaW5pbXVtX1N1Yl9mcmFtZV9SYXRlOworCXVpbnQxNl90IEF1ZGlvX0J1ZmZlcl9EZXB0aDsKKwl1aW50MTZfdCBBdWRpb19DaGFubmVsX0NhcGFiaWxpdHk7CisJdWludDE2X3QgQXVkaW9fU2FtcGxlX1JhdGVfQ2FwYWJpbGl0eTsKKwl1aW50OF90ICBBdWRpb19TYW1wbGVfUmVzb2x1dGlvbjsKKwl1aW50OF90ICBNaWNfQXVkaW9fU2FtcGxlX1Jlc29sdXRpb247CisJdWludDE2X3QgTWljX1NhbXBsZV9SYXRlX0NhcGFiaWxpdHk7CisJdWludDhfdCAgS2V5Ym9hcmRfRGF0YV9Gb3JtYXQ7CisJdWludDhfdCAgcG9pbnRpbmdfZGV2aWNlX2RhdGFfZm9ybWF0OworCXVpbnQxNl90IGNvbnRlbnRfcHJvdGVjdGlvbl90eXBlOworCXVpbnQxNl90IE1mcl9OYW1lOworCXVpbnQxNl90IFByb2R1Y3RfQ29kZTsKKwl1aW50MTZfdCBSZXNlcnZlZF8zOworCXVpbnQzMl90IFNlcmlhbF9OdW1iZXI7CisJdWludDhfdCAgV2Vla19vZl9NYW51ZmFjdHVyZTsKKwl1aW50OF90ICBZZWFyX29mX01hbnVmYWN0dXJlOworCisJdWludDE2X3QgY3JjMTY7Cit9IG1kZGlfY2xpZW50X2NhcGFiaWxpdHlfdHlwZTsKKworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbWRkaV92aWRlb19zdHJlYW0geworCXVpbnQxNl90IGxlbmd0aDsKKwl1aW50MTZfdCB0eXBlOyAvKiAxNiAqLworCXVpbnQxNl90IGNsaWVudF9pZDsgLyogMCAqLworCisJdWludDE2X3QgdmlkZW9fZGF0YV9mb3JtYXRfZGVzY3JpcHRvcjsKKy8qIGZvcm1hdCBvZiBlYWNoIHBpeGVsIGluIHRoZSBQaXhlbCBEYXRhIGluIHRoZSBwcmVzZW50IHN0cmVhbSBpbiB0aGUKKyAqIHByZXNlbnQgcGFja2V0LgorICogSWYgYml0cyBbMTU6MTNdID0gMDAwIG1vbm9jaHJvbWUKKyAqIElmIGJpdHMgWzE1OjEzXSA9IDAwMSBjb2xvciBwaXhlbHMgKHBhbGV0dGUpLgorICogSWYgYml0cyBbMTU6MTNdID0gMDEwIGNvbG9yIHBpeGVscyBpbiByYXcgUkdCCisgKiBJZiBiaXRzIFsxNToxM10gPSAwMTEgZGF0YSBpbiA0OjI6MiBZIENiIENyIGZvcm1hdAorICogSWYgYml0cyBbMTU6MTNdID0gMTAwIEJheWVyIHBpeGVscworICovCisKKwl1aW50MTZfdCBwaXhlbF9kYXRhX2F0dHJpYnV0ZXM7CisvKiBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorICogQml0cyBbMTowXSA9IDExICBwaXhlbCBkYXRhIGlzIGRpc3BsYXllZCB0byBib3RoIGV5ZXMKKyAqIEJpdHMgWzE6MF0gPSAxMCAgcGl4ZWwgZGF0YSBpcyByb3V0ZWQgdG8gdGhlIGxlZnQgZXllIG9ubHkuCisgKiBCaXRzIFsxOjBdID0gMDEgIHBpeGVsIGRhdGEgaXMgcm91dGVkIHRvIHRoZSByaWdodCBleWUgb25seS4KKyAqIEJpdHMgWzE6MF0gPSAwMCAgcGl4ZWwgZGF0YSBpcyByb3V0ZWQgdG8gdGhlIGFsdGVybmF0ZSBkaXNwbGF5LgorICogQml0IDIgaXMgMCAgUGl4ZWwgRGF0YSBpcyBpbiB0aGUgc3RhbmRhcmQgcHJvZ3Jlc3NpdmUgZm9ybWF0LgorICogQml0IDIgaXMgMSAgUGl4ZWwgRGF0YSBpcyBpbiBpbnRlcmxhY2UgZm9ybWF0LgorICogQml0IDMgaXMgMCAgUGl4ZWwgRGF0YSBpcyBpbiB0aGUgc3RhbmRhcmQgcHJvZ3Jlc3NpdmUgZm9ybWF0LgorICogQml0IDMgaXMgMSAgUGl4ZWwgRGF0YSBpcyBpbiBhbHRlcm5hdGUgcGl4ZWwgZm9ybWF0LgorICogQml0IDQgaXMgMCAgUGl4ZWwgRGF0YSBpcyB0byBvciBmcm9tIHRoZSBkaXNwbGF5IGZyYW1lIGJ1ZmZlci4KKyAqIEJpdCA0IGlzIDEgIFBpeGVsIERhdGEgaXMgdG8gb3IgZnJvbSB0aGUgY2FtZXJhLgorICogQml0IDUgaXMgMCAgcGl4ZWwgZGF0YSBjb250YWlucyB0aGUgbmV4dCBjb25zZWN1dGl2ZSByb3cgb2YgcGl4ZWxzLgorICogQml0IDUgaXMgMSAgWCBMZWZ0IEVkZ2UsIFkgVG9wIEVkZ2UsIFggUmlnaHQgRWRnZSwgWSBCb3R0b20gRWRnZSwKKyAqICAgICAgICAgICAgIFggU3RhcnQsIGFuZCBZIFN0YXJ0IHBhcmFtZXRlcnMgYXJlIG5vdCBkZWZpbmVkIGFuZAorICogICAgICAgICAgICAgc2hhbGwgYmUgaWdub3JlZCBieSB0aGUgY2xpZW50LgorICogQml0cyBbNzo2XSA9IDAxICBQaXhlbCBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIG9mZmxpbmUgaW1hZ2UgYnVmZmVyLgorICogQml0cyBbNzo2XSA9IDAwICBQaXhlbCBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciB0byByZWZyZXNoIGRpc3BsYXkuCisgKiBCaXRzIFs3OjZdID0gMTEgIFBpeGVsIGRhdGEgaXMgd3JpdHRlbiB0byBhbGwgaW1hZ2UgYnVmZmVycy4KKyAqIEJpdHMgWzc6Nl0gPSAxMCAgSW52YWxpZC4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisgKiBCaXRzIDggdGhyb3VnaCAxMSBhbHRlcm5hdGUgZGlzcGxheSBudW1iZXIuCisgKiBCaXRzIDEyIHRocm91Z2ggMTQgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGFuZCBzaGFsbCBiZSBzZXQgdG8gemVyby4KKyAqIEJpdCAxNSBpcyAxIHRoZSByb3cgb2YgcGl4ZWxzIGlzIHRoZSBsYXN0IHJvdyBvZiBwaXhlbHMgaW4gYSBmcmFtZS4KKyAqLworCisJdWludDE2X3QgeF9sZWZ0X2VkZ2U7CisJdWludDE2X3QgeV90b3BfZWRnZTsKKwkvKiBYLFkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgZWRnZSBvZiB0aGUgc2NyZWVuIHdpbmRvdyAqLworCisJdWludDE2X3QgeF9yaWdodF9lZGdlOworCXVpbnQxNl90IHlfYm90dG9tX2VkZ2U7CisJLyogWCxZIGNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSByaWdodCBlZGdlIG9mIHRoZSB3aW5kb3cgYmVpbmcKKwkgKiB1cGRhdGVkLiAqLworCisJdWludDE2X3QgeF9zdGFydDsKKwl1aW50MTZfdCB5X3N0YXJ0OworCS8qIChYIFN0YXJ0LCBZIFN0YXJ0KSBpcyB0aGUgZmlyc3QgcGl4ZWwgaW4gdGhlIFBpeGVsIERhdGEgZmllbGQKKwkgKiBiZWxvdy4gKi8KKworCXVpbnQxNl90IHBpeGVsX2NvdW50OworCS8qIG51bWJlciBvZiBwaXhlbHMgaW4gdGhlIFBpeGVsIERhdGEgZmllbGQgYmVsb3cuICovCisKKwl1aW50MTZfdCBwYXJhbWV0ZXJfQ1JDOworCS8qIDE2LWJpdCBDUkMgb2YgYWxsIGJ5dGVzIGZyb20gdGhlIFBhY2tldCBMZW5ndGggdG8gdGhlIFBpeGVsIENvdW50LiAqLworCisJdWludDE2X3QgcmVzZXJ2ZWQ7CisJLyogMTYtYml0IHZhcmlhYmxlIHRvIG1ha2Ugc3RydWN0dXJlIGFsaWduIG9uIDQgYnl0ZSBib3VuZGFyeSAqLworfTsKKworI2RlZmluZSBUWVBFX1ZJREVPX1NUUkVBTSAgICAgIDE2CisjZGVmaW5lIFRZUEVfQ0xJRU5UX0NBUFMgICAgICAgNjYKKyNkZWZpbmUgVFlQRV9SRUdJU1RFUl9BQ0NFU1MgICAxNDYKKyNkZWZpbmUgVFlQRV9DTElFTlRfU1RBVFVTICAgICA3MAorCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbWRkaV9yZWdpc3Rlcl9hY2Nlc3MgeworCXVpbnQxNl90IGxlbmd0aDsKKwl1aW50MTZfdCB0eXBlOyAvKiAxNDYgKi8KKwl1aW50MTZfdCBjbGllbnRfaWQ7CisKKwl1aW50MTZfdCByZWFkX3dyaXRlX2luZm87CisJLyogQml0cyAxMzowICBhIDE0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YKKwkgKiAgICAgICAgICAgIDMyLWJpdCBSZWdpc3RlciBEYXRhIExpc3QgaXRlbXMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gdGhlCisJICogICAgICAgICAgICBSZWdpc3RlciBEYXRhIExpc3QgZmllbGQuCisJICogQml0c1sxNToxNF0gPSAwMCAgV3JpdGUgdG8gcmVnaXN0ZXIocyk7CisJICogQml0c1sxNToxNF0gPSAxMCAgUmVhZCBmcm9tIHJlZ2lzdGVyKHMpOworCSAqIEJpdHNbMTU6MTRdID0gMTEgIFJlc3BvbnNlIHRvIGEgUmVhZC4KKwkgKiBCaXRzWzE1OjE0XSA9IDAxICB0aGlzIHZhbHVlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAqLworI2RlZmluZSBNRERJX1dSSVRFICAgICAoMCA8PCAxNCkKKyNkZWZpbmUgTURESV9SRUFEICAgICAgKDIgPDwgMTQpCisjZGVmaW5lIE1ERElfUkVBRF9SRVNQICgzIDw8IDE0KQorCisJdWludDMyX3QgcmVnaXN0ZXJfYWRkcmVzczsKKwkvKiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB0aGF0IGlzIHRvIGJlIHdyaXR0ZW4gdG8gb3IgcmVhZCBmcm9tLiAqLworCisJdWludDE2X3QgY3JjMTY7CisKKwl1aW50MzJfdCByZWdpc3Rlcl9kYXRhX2xpc3Q7CisJLyogbGlzdCBvZiA0LWJ5dGUgcmVnaXN0ZXIgZGF0YSB2YWx1ZXMgZm9yL2Zyb20gY2xpZW50IHJlZ2lzdGVycyAqLworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1kZGlfbGxlbnRyeSB7CisJdWludDE2X3QgZmxhZ3M7CisJdWludDE2X3QgaGVhZGVyX2NvdW50OworCXVpbnQxNl90IGRhdGFfY291bnQ7CisJZG1hX2FkZHJfdCBkYXRhOyAvKiAzMiBiaXQgKi8KKwlzdHJ1Y3QgbWRkaV9sbGVudHJ5ICpuZXh0OworCXVpbnQxNl90IHJlc2VydmVkOworCXVuaW9uIHsKKwkJc3RydWN0IG1kZGlfdmlkZW9fc3RyZWFtIHY7CisJCXN0cnVjdCBtZGRpX3JlZ2lzdGVyX2FjY2VzcyByOworCQl1aW50MzJfdCBfWzEyXTsKKwl9IHU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jIGIvZHJpdmVycy92aWRlby9tc20vbWRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2MzZhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCkBAIC0wLDAgKzEsNTM4IEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZHAuYworICoKKyAqIE1TTSBNRFAgSW50ZXJmYWNlICh1c2VkIGJ5IGZyYW1lYnVmZmVyIGNvcmUpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFFVQUxDT01NIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L21zbV9tZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KKyNpbmNsdWRlIDxsaW51eC9hbmRyb2lkX3BtZW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisKKyNpbmNsdWRlIDxtYWNoL21zbV9pb21hcC5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtZHBfaHcuaCIKKworc3RydWN0IGNsYXNzICptZHBfY2xhc3M7CisKKyNkZWZpbmUgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSAoMHgxMDAwMCkKKworc3RhdGljIHVpbnQxNl90IG1kcF9kZWZhdWx0X2Njc1tdID0geworCTB4MjU0LCAweDAwMCwgMHgzMzEsIDB4MjU0LCAweEYzOCwgMHhFNjEsIDB4MjU0LCAweDQwOSwgMHgwMDAsCisJMHgwMTAsIDB4MDgwLCAweDA4MAorfTsKKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1kcF9kbWEyX3dhaXRxdWV1ZSk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWRwX3BwcF93YWl0cXVldWUpOworc3RhdGljIHN0cnVjdCBtc21mYl9jYWxsYmFjayAqZG1hX2NhbGxiYWNrOworc3RhdGljIHN0cnVjdCBjbGsgKmNsazsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWRwX2lycV9tYXNrOworc3RhdGljIERFRklORV9TUElOTE9DSyhtZHBfbG9jayk7CitERUZJTkVfTVVURVgobWRwX211dGV4KTsKKworc3RhdGljIGludCBlbmFibGVfbWRwX2lycShzdHJ1Y3QgbWRwX2luZm8gKm1kcCwgdWludDMyX3QgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCUJVR19PTighbWFzayk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwX2xvY2ssIGlycV9mbGFncyk7CisJLyogaWYgdGhlIG1hc2sgYml0cyBhcmUgYWxyZWFkeSBzZXQgcmV0dXJuIGFuIGVycm9yLCB0aGlzIGludGVycnVwdAorCSAqIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCWlmIChtZHBfaXJxX21hc2sgJiBtYXNrKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRwIGlycSBhbHJlYWR5IG9uIGFscmVhZHkgb24gJXggJXhcbiIsCisJCSAgICAgICBtZHBfaXJxX21hc2ssIG1hc2spOworCQlyZXQgPSAtMTsKKwl9CisJLyogaWYgdGhlIG1kcCBpcnEgaXMgbm90IGFscmVhZHkgZW5hYmxlZCBlbmFibGUgaXQgKi8KKwlpZiAoIW1kcF9pcnFfbWFzaykgeworCQlpZiAoY2xrKQorCQkJY2xrX2VuYWJsZShjbGspOworCQllbmFibGVfaXJxKG1kcC0+aXJxKTsKKwl9CisKKwkvKiB1cGRhdGUgdGhlIGlycSBtYXNrIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgaW50ZXJydXB0IGlzCisJICogZW5hYmxlZCAqLworCW1kcF9pcnFfbWFzayB8PSBtYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9ja2VkX2Rpc2FibGVfbWRwX2lycShzdHJ1Y3QgbWRwX2luZm8gKm1kcCwgdWludDMyX3QgbWFzaykKK3sKKwkvKiB0aGlzIGludGVycnVwdCBpcyBhbHJlYWR5IGRpc2FibGVkISAqLworCWlmICghKG1kcF9pcnFfbWFzayAmIG1hc2spKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRwIGlycSBhbHJlYWR5IG9mZiAleCAleFxuIiwKKwkJICAgICAgIG1kcF9pcnFfbWFzaywgbWFzayk7CisJCXJldHVybiAtMTsKKwl9CisJLyogdXBkYXRlIHRoZSBpcnEgbWFzayB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlIGludGVycnVwdCBpcworCSAqIGRpc2FibGVkICovCisJbWRwX2lycV9tYXNrICY9IH4obWFzayk7CisJLyogaWYgbm8gb25lIGlzIHdhaXRpbmcgb24gdGhlIGludGVycnVwdCwgZGlzYWJsZSBpdCAqLworCWlmICghbWRwX2lycV9tYXNrKSB7CisJCWRpc2FibGVfaXJxKG1kcC0+aXJxKTsKKwkJaWYgKGNsaykKKwkJCWNsa19kaXNhYmxlKGNsayk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpc2FibGVfbWRwX2lycShzdHJ1Y3QgbWRwX2luZm8gKm1kcCwgdWludDMyX3QgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCXJldCA9IGxvY2tlZF9kaXNhYmxlX21kcF9pcnEobWRwLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHBfbG9jaywgaXJxX2ZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWRwX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXVpbnQzMl90IHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgbWRwX2luZm8gKm1kcCA9IGRhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwX2xvY2ssIGlycV9mbGFncyk7CisKKwlzdGF0dXMgPSBtZHBfcmVhZGwobWRwLCBNRFBfSU5UUl9TVEFUVVMpOworCW1kcF93cml0ZWwobWRwLCBzdGF0dXMsIE1EUF9JTlRSX0NMRUFSKTsKKworCXN0YXR1cyAmPSBtZHBfaXJxX21hc2s7CisJaWYgKHN0YXR1cyAmIERMMF9ETUEyX1RFUk1fRE9ORSkgeworCQlpZiAoZG1hX2NhbGxiYWNrKSB7CisJCQlkbWFfY2FsbGJhY2stPmZ1bmMoZG1hX2NhbGxiYWNrKTsKKwkJCWRtYV9jYWxsYmFjayA9IE5VTEw7CisJCX0KKwkJd2FrZV91cCgmbWRwX2RtYTJfd2FpdHF1ZXVlKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgREwwX1JPSV9ET05FKQorCQl3YWtlX3VwKCZtZHBfcHBwX3dhaXRxdWV1ZSk7CisKKwlpZiAoc3RhdHVzKQorCQlsb2NrZWRfZGlzYWJsZV9tZHBfaXJxKG1kcCwgc3RhdHVzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHVpbnQzMl90IG1kcF9jaGVja19tYXNrKHVpbnQzMl90IG1hc2spCit7CisJdWludDMyX3QgcmV0OworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kcF9sb2NrLCBpcnFfZmxhZ3MpOworCXJldCA9IG1kcF9pcnFfbWFzayAmIG1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRwX2xvY2ssIGlycV9mbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZHBfd2FpdChzdHJ1Y3QgbWRwX2luZm8gKm1kcCwgdWludDMyX3QgbWFzaywgd2FpdF9xdWV1ZV9oZWFkX3QgKndxKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJd2FpdF9ldmVudF90aW1lb3V0KCp3cSwgIW1kcF9jaGVja19tYXNrKG1hc2spLCBIWik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKG1kcF9pcnFfbWFzayAmIG1hc2spIHsKKwkJbG9ja2VkX2Rpc2FibGVfbWRwX2lycShtZHAsIG1hc2spOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0aW1lb3V0IHdhaXRpbmcgZm9yIG1kcCB0byBjb21wbGV0ZSAleFxuIiwKKwkJICAgICAgIG1hc2spOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHBfbG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbWRwX2RtYV93YWl0KHN0cnVjdCBtZHBfZGV2aWNlICptZHBfZGV2KQoreworI2RlZmluZSBNRFBfTUFYX1RJTUVPVVRTIDIwCisJc3RhdGljIGludCB0aW1lb3V0X2NvdW50OworCXN0cnVjdCBtZHBfaW5mbyAqbWRwID0gY29udGFpbmVyX29mKG1kcF9kZXYsIHN0cnVjdCBtZHBfaW5mbywgbWRwX2Rldik7CisKKwlpZiAobWRwX3dhaXQobWRwLCBETDBfRE1BMl9URVJNX0RPTkUsICZtZHBfZG1hMl93YWl0cXVldWUpID09IC1FVElNRURPVVQpCisJCXRpbWVvdXRfY291bnQrKzsKKwllbHNlCisJCXRpbWVvdXRfY291bnQgPSAwOworCisJaWYgKHRpbWVvdXRfY291bnQgPiBNRFBfTUFYX1RJTUVPVVRTKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWRwOiBkbWEgZmFpbGVkICVkIHRpbWVzLCBzb21ldGhpbmdzIHdyb25nIVxuIiwKKwkJICAgICAgIE1EUF9NQVhfVElNRU9VVFMpOworCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWRwX3BwcF93YWl0KHN0cnVjdCBtZHBfaW5mbyAqbWRwKQoreworCXJldHVybiBtZHBfd2FpdChtZHAsIERMMF9ST0lfRE9ORSwgJm1kcF9wcHBfd2FpdHF1ZXVlKTsKK30KKwordm9pZCBtZHBfZG1hX3RvX21kZGkoc3RydWN0IG1kcF9pbmZvICptZHAsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHN0cmlkZSwKKwkJICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCB4LCB1aW50MzJfdCB5LAorCQkgICAgIHN0cnVjdCBtc21mYl9jYWxsYmFjayAqY2FsbGJhY2spCit7CisJdWludDMyX3QgZG1hMl9jZmc7CisJdWludDE2X3QgbGRfcGFyYW0gPSAwOyAvKiAwPVBSSU0sIDE9U0VDRCwgMj1FWFQgKi8KKworCWlmIChlbmFibGVfbWRwX2lycShtZHAsIERMMF9ETUEyX1RFUk1fRE9ORSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZHBfZG1hX3RvX21kZGk6IGJ1c3lcbiIpOworCQlyZXR1cm47CisJfQorCisJZG1hX2NhbGxiYWNrID0gY2FsbGJhY2s7CisKKwlkbWEyX2NmZyA9IERNQV9QQUNLX1RJR0hUIHwKKwkJRE1BX1BBQ0tfQUxJR05fTFNCIHwKKwkJRE1BX1BBQ0tfUEFUVEVSTl9SR0IgfAorCQlETUFfT1VUX1NFTF9BSEIgfAorCQlETUFfSUJVRl9OT05DT05USUdVT1VTOworCisJZG1hMl9jZmcgfD0gRE1BX0lCVUZfRk9STUFUX1JHQjU2NTsKKworCWRtYTJfY2ZnIHw9IERNQV9PVVRfU0VMX01EREk7CisKKwlkbWEyX2NmZyB8PSBETUFfTURESV9ETUFPVVRfTENEX1NFTF9QUklNQVJZOworCisJZG1hMl9jZmcgfD0gRE1BX0RJVEhFUl9FTjsKKworCS8qIHNldHVwIHNpemUsIGFkZHJlc3MsIGFuZCBzdHJpZGUgKi8KKwltZHBfd3JpdGVsKG1kcCwgKGhlaWdodCA8PCAxNikgfCAod2lkdGgpLAorCQkgICBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTg0KTsKKwltZHBfd3JpdGVsKG1kcCwgYWRkciwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE4OCk7CisJbWRwX3dyaXRlbChtZHAsIHN0cmlkZSwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE4Qyk7CisKKwkvKiA2NjYgMThCUFAgKi8KKwlkbWEyX2NmZyB8PSBETUFfRFNUQzBHXzZCSVRTIHwgRE1BX0RTVEMxQl82QklUUyB8IERNQV9EU1RDMlJfNkJJVFM7CisKKwkvKiBzZXQgeSAmIHggb2Zmc2V0IGFuZCBNRERJIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnMgKi8KKwltZHBfd3JpdGVsKG1kcCwgKHkgPDwgMTYpIHwgKHgpLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTk0KTsKKwltZHBfd3JpdGVsKG1kcCwgbGRfcGFyYW0sIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxYTApOworCW1kcF93cml0ZWwobWRwLCAoTURESV9WRE9fUEFDS0VUX0RFU0MgPDwgMTYpIHwgTURESV9WRE9fUEFDS0VUX1BSSU0sCisJCSAgIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxYTQpOworCisJbWRwX3dyaXRlbChtZHAsIGRtYTJfY2ZnLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTgwKTsKKworCS8qIHN0YXJ0IERNQTIgKi8KKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDA0NCk7Cit9CisKK3ZvaWQgbWRwX2RtYShzdHJ1Y3QgbWRwX2RldmljZSAqbWRwX2RldiwgdWludDMyX3QgYWRkciwgdWludDMyX3Qgc3RyaWRlLAorCSAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgeCwgdWludDMyX3QgeSwKKwkgICAgIHN0cnVjdCBtc21mYl9jYWxsYmFjayAqY2FsbGJhY2ssIGludCBpbnRlcmZhY2UpCit7CisJc3RydWN0IG1kcF9pbmZvICptZHAgPSBjb250YWluZXJfb2YobWRwX2Rldiwgc3RydWN0IG1kcF9pbmZvLCBtZHBfZGV2KTsKKworCWlmIChpbnRlcmZhY2UgPT0gTVNNX01ERElfUE1ESF9JTlRFUkZBQ0UpIHsKKwkJbWRwX2RtYV90b19tZGRpKG1kcCwgYWRkciwgc3RyaWRlLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LAorCQkJCWNhbGxiYWNrKTsKKwl9Cit9CisKK2ludCBnZXRfaW1nKHN0cnVjdCBtZHBfaW1nICppbWcsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCSAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqbGVuLAorCSAgICBzdHJ1Y3QgZmlsZSAqKmZpbGVwKQoreworCWludCBwdXRfbmVlZGVkLCByZXQgPSAwOworCXN0cnVjdCBmaWxlICpmaWxlOworCXVuc2lnbmVkIGxvbmcgdnN0YXJ0OworCisjaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQorCWlmICghZ2V0X3BtZW1fZmlsZShpbWctPm1lbW9yeV9pZCwgc3RhcnQsICZ2c3RhcnQsIGxlbiwgZmlsZXApKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJZmlsZSA9IGZnZXRfbGlnaHQoaW1nLT5tZW1vcnlfaWQsICZwdXRfbmVlZGVkKTsKKwlpZiAoZmlsZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoTUFKT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldikgPT0gRkJfTUFKT1IpIHsKKwkJKnN0YXJ0ID0gaW5mby0+Zml4LnNtZW1fc3RhcnQ7CisJCSpsZW4gPSBpbmZvLT5maXguc21lbV9sZW47CisJfSBlbHNlCisJCXJldCA9IC0xOworCWZwdXRfbGlnaHQoZmlsZSwgcHV0X25lZWRlZCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHB1dF9pbWcoc3RydWN0IGZpbGUgKnNyY19maWxlLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUpCit7CisjaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQorCWlmIChzcmNfZmlsZSkKKwkJcHV0X3BtZW1fZmlsZShzcmNfZmlsZSk7CisJaWYgKGRzdF9maWxlKQorCQlwdXRfcG1lbV9maWxlKGRzdF9maWxlKTsKKyNlbmRpZgorfQorCitpbnQgbWRwX2JsaXQoc3RydWN0IG1kcF9kZXZpY2UgKm1kcF9kZXYsIHN0cnVjdCBmYl9pbmZvICpmYiwKKwkgICAgIHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0ID0gMCwgc3JjX2xlbiA9IDAsIGRzdF9zdGFydCA9IDAsIGRzdF9sZW4gPSAwOworCXN0cnVjdCBtZHBfaW5mbyAqbWRwID0gY29udGFpbmVyX29mKG1kcF9kZXYsIHN0cnVjdCBtZHBfaW5mbywgbWRwX2Rldik7CisJc3RydWN0IGZpbGUgKnNyY19maWxlID0gMCwgKmRzdF9maWxlID0gMDsKKworCS8qIFdPUktBUk9VTkQgRk9SIEhBUkRXQVJFIEJVRyBJTiBCRyBUSUxFIEZFVENIICovCisJaWYgKHVubGlrZWx5KHJlcS0+c3JjX3JlY3QuaCA9PSAwIHx8CisJCSAgICAgcmVxLT5zcmNfcmVjdC53ID09IDApKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXBkX3BwcDogc3JjIGltZyBvZiB6ZXJvIHNpemUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh1bmxpa2VseShyZXEtPmRzdF9yZWN0LmggPT0gMCB8fAorCQkgICAgIHJlcS0+ZHN0X3JlY3QudyA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBkbyB0aGlzIGZpcnN0IHNvIHRoYXQgaWYgdGhpcyBmYWlscywgdGhlIGNhbGxlciBjYW4gYWx3YXlzCisJICogc2FmZWx5IGNhbGwgcHV0X2ltZyAqLworCWlmICh1bmxpa2VseShnZXRfaW1nKCZyZXEtPnNyYywgZmIsICZzcmNfc3RhcnQsICZzcmNfbGVuLCAmc3JjX2ZpbGUpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IGNvdWxkIG5vdCByZXRyaWV2ZSBzcmMgaW1hZ2UgZnJvbSAiCisJCQkJIm1lbW9yeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShnZXRfaW1nKCZyZXEtPmRzdCwgZmIsICZkc3Rfc3RhcnQsICZkc3RfbGVuLCAmZHN0X2ZpbGUpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IGNvdWxkIG5vdCByZXRyaWV2ZSBkc3QgaW1hZ2UgZnJvbSAiCisJCQkJIm1lbW9yeVxuIik7CisjaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQorCQlwdXRfcG1lbV9maWxlKHNyY19maWxlKTsKKyNlbmRpZgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbXV0ZXhfbG9jaygmbWRwX211dGV4KTsKKworCS8qIHRyYW5zcF9tYXNraW5nIHVuaW1wbGVtZW50ZWQgKi8KKwlyZXEtPnRyYW5zcF9tYXNrID0gTURQX1RSQU5TUF9OT1A7CisJaWYgKHVubGlrZWx5KChyZXEtPnRyYW5zcF9tYXNrICE9IE1EUF9UUkFOU1BfTk9QIHx8CisJCSAgICAgIHJlcS0+YWxwaGEgIT0gTURQX0FMUEhBX05PUCB8fAorCQkgICAgICBIQVNfQUxQSEEocmVxLT5zcmMuZm9ybWF0KSkgJiYKKwkJICAgICAocmVxLT5mbGFncyAmIE1EUF9ST1RfOTAgJiYKKwkJICAgICAgcmVxLT5kc3RfcmVjdC53IDw9IDE2ICYmIHJlcS0+ZHN0X3JlY3QuaCA+PSAxNikpKSB7CisJCWludCBpOworCQl1bnNpZ25lZCBpbnQgdGlsZXMgPSByZXEtPmRzdF9yZWN0LmggLyAxNjsKKwkJdW5zaWduZWQgaW50IHJlbWFpbmRlciA9IHJlcS0+ZHN0X3JlY3QuaCAlIDE2OworCQlyZXEtPnNyY19yZWN0LncgPSAxNipyZXEtPnNyY19yZWN0LncgLyByZXEtPmRzdF9yZWN0Lmg7CisJCXJlcS0+ZHN0X3JlY3QuaCA9IDE2OworCQlmb3IgKGkgPSAwOyBpIDwgdGlsZXM7IGkrKykgeworCQkJZW5hYmxlX21kcF9pcnEobWRwLCBETDBfUk9JX0RPTkUpOworCQkJcmV0ID0gbWRwX3BwcF9ibGl0KG1kcCwgcmVxLCBzcmNfZmlsZSwgc3JjX3N0YXJ0LAorCQkJCQkgICBzcmNfbGVuLCBkc3RfZmlsZSwgZHN0X3N0YXJ0LAorCQkJCQkgICBkc3RfbGVuKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJfYmFkX2JsaXQ7CisJCQlyZXQgPSBtZHBfcHBwX3dhaXQobWRwKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJfd2FpdF9mYWlsZWQ7CisJCQlyZXEtPmRzdF9yZWN0LnkgKz0gMTY7CisJCQlyZXEtPnNyY19yZWN0LnggKz0gcmVxLT5zcmNfcmVjdC53OworCQl9CisJCWlmICghcmVtYWluZGVyKQorCQkJZ290byBlbmQ7CisJCXJlcS0+c3JjX3JlY3QudyA9IHJlbWFpbmRlcipyZXEtPnNyY19yZWN0LncgLyByZXEtPmRzdF9yZWN0Lmg7CisJCXJlcS0+ZHN0X3JlY3QuaCA9IHJlbWFpbmRlcjsKKwl9CisJZW5hYmxlX21kcF9pcnEobWRwLCBETDBfUk9JX0RPTkUpOworCXJldCA9IG1kcF9wcHBfYmxpdChtZHAsIHJlcSwgc3JjX2ZpbGUsIHNyY19zdGFydCwgc3JjX2xlbiwgZHN0X2ZpbGUsCisJCQkgICBkc3Rfc3RhcnQsCisJCQkgICBkc3RfbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9iYWRfYmxpdDsKKwlyZXQgPSBtZHBfcHBwX3dhaXQobWRwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl93YWl0X2ZhaWxlZDsKK2VuZDoKKwlwdXRfaW1nKHNyY19maWxlLCBkc3RfZmlsZSk7CisJbXV0ZXhfdW5sb2NrKCZtZHBfbXV0ZXgpOworCXJldHVybiAwOworZXJyX2JhZF9ibGl0OgorCWRpc2FibGVfbWRwX2lycShtZHAsIERMMF9ST0lfRE9ORSk7CitlcnJfd2FpdF9mYWlsZWQ6CisJcHV0X2ltZyhzcmNfZmlsZSwgZHN0X2ZpbGUpOworCW11dGV4X3VubG9jaygmbWRwX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG1kcF9zZXRfZ3JwX2Rpc3Aoc3RydWN0IG1kcF9kZXZpY2UgKm1kcF9kZXYsIHVuc2lnbmVkIGRpc3BfaWQpCit7CisJc3RydWN0IG1kcF9pbmZvICptZHAgPSBjb250YWluZXJfb2YobWRwX2Rldiwgc3RydWN0IG1kcF9pbmZvLCBtZHBfZGV2KTsKKworCWRpc3BfaWQgJj0gMHhmOworCW1kcF93cml0ZWwobWRwLCBkaXNwX2lkLCBNRFBfRlVMTF9CWVBBU1NfV09SRDQzKTsKK30KKworaW50IHJlZ2lzdGVyX21kcF9jbGllbnQoc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqY2ludCkKK3sKKwlpZiAoIW1kcF9jbGFzcykgeworCQlwcl9lcnIoIm1kcDogbm8gbWRwX2NsYXNzIHdoZW4gcmVnaXN0ZXJpbmcgbWRwIGNsaWVudFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwljaW50LT5jbGFzcyA9IG1kcF9jbGFzczsKKwlyZXR1cm4gY2xhc3NfaW50ZXJmYWNlX3JlZ2lzdGVyKGNpbnQpOworfQorCisjaW5jbHVkZSAibWRwX2NzY190YWJsZS5oIgorI2luY2x1ZGUgIm1kcF9zY2FsZV90YWJsZXMuaCIKKworaW50IG1kcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CisJaW50IHJldDsKKwlpbnQgbjsKKwlzdHJ1Y3QgbWRwX2luZm8gKm1kcDsKKworCXJlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlc291cmNlKSB7CisJCXByX2VycigibWRwOiBjYW4gbm90IGdldCBtZHAgbWVtIHJlc291cmNlIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1kcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZHBfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghbWRwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1kcC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAobWRwLT5pcnEgPCAwKSB7CisJCXByX2VycigibWRwOiBjYW4gbm90IGdldCBtZHAgaXJxXG4iKTsKKwkJcmV0ID0gbWRwLT5pcnE7CisJCWdvdG8gZXJyb3JfZ2V0X2lycTsKKwl9CisKKwltZHAtPmJhc2UgPSBpb3JlbWFwKHJlc291cmNlLT5zdGFydCwKKwkJCSAgICByZXNvdXJjZS0+ZW5kIC0gcmVzb3VyY2UtPnN0YXJ0KTsKKwlpZiAobWRwLT5iYXNlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtc21mYjogY2Fubm90IGFsbG9jYXRlIG1kcCByZWdzIVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfaW9yZW1hcDsKKwl9CisKKwltZHAtPm1kcF9kZXYuZG1hID0gbWRwX2RtYTsKKwltZHAtPm1kcF9kZXYuZG1hX3dhaXQgPSBtZHBfZG1hX3dhaXQ7CisJbWRwLT5tZHBfZGV2LmJsaXQgPSBtZHBfYmxpdDsKKwltZHAtPm1kcF9kZXYuc2V0X2dycF9kaXNwID0gbWRwX3NldF9ncnBfZGlzcDsKKworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1kcF9jbGsiKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWRwOiBmYWlsZWQgdG8gZ2V0IG1kcCBjbGsiKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShtZHAtPmlycSwgbWRwX2lzciwgSVJRRl9ESVNBQkxFRCwgIm1zbV9tZHAiLCBtZHApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmVxdWVzdF9pcnE7CisJZGlzYWJsZV9pcnEobWRwLT5pcnEpOworCW1kcF9pcnFfbWFzayA9IDA7CisKKwkvKiBkZWJ1ZyBpbnRlcmZhY2Ugd3JpdGUgYWNjZXNzICovCisJbWRwX3dyaXRlbChtZHAsIDEsIDB4NjApOworCisJbWRwX3dyaXRlbChtZHAsIE1EUF9BTllfSU5UUl9NQVNLLCBNRFBfSU5UUl9FTkFCTEUpOworCW1kcF93cml0ZWwobWRwLCAxLCBNRFBfRUJJMl9QT1JUTUFQX01PREUpOworCisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxZjgpOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMWZjKTsKKworCWZvciAobiA9IDA7IG4gPCBBUlJBWV9TSVpFKGNzY190YWJsZSk7IG4rKykKKwkJbWRwX3dyaXRlbChtZHAsIGNzY190YWJsZVtuXS52YWwsIGNzY190YWJsZVtuXS5yZWcpOworCisJLyogY2xlYXIgdXAgdW51c2VkIGZnL21haW4gcmVnaXN0ZXJzICovCisJLyogY29tcC5wbGFuZSAyJjMgeXN0cmlkZSAqLworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTIwKTsKKworCS8qIHVucGFja2VkIHBhdHRlcm4gKi8KKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDEyYyk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxMzApOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTM0KTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE1OCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxNWMpOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTYwKTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDE3MCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxNzQpOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMTdjKTsKKworCS8qIGNvbXAucGxhbmUgMiAmIDMgKi8KKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDExNCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxMTgpOworCisJLyogY2xlYXIgdW51c2VkIGJnIHJlZ2lzdGVycyAqLworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMWM4KTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDFkMCk7CisJbWRwX3dyaXRlbChtZHAsIDAsIE1EUF9DTURfREVCVUdfQUNDRVNTX0JBU0UgKyAweDAxZGMpOworCW1kcF93cml0ZWwobWRwLCAwLCBNRFBfQ01EX0RFQlVHX0FDQ0VTU19CQVNFICsgMHgwMWUwKTsKKwltZHBfd3JpdGVsKG1kcCwgMCwgTURQX0NNRF9ERUJVR19BQ0NFU1NfQkFTRSArIDB4MDFlNCk7CisKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShtZHBfdXBzY2FsZV90YWJsZSk7IG4rKykKKwkJbWRwX3dyaXRlbChtZHAsIG1kcF91cHNjYWxlX3RhYmxlW25dLnZhbCwKKwkJICAgICAgIG1kcF91cHNjYWxlX3RhYmxlW25dLnJlZyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgOTsgbisrKQorCQltZHBfd3JpdGVsKG1kcCwgbWRwX2RlZmF1bHRfY2NzW25dLCAweDQwNDQwICsgNCAqIG4pOworCW1kcF93cml0ZWwobWRwLCBtZHBfZGVmYXVsdF9jY3NbOV0sIDB4NDA1MDAgKyA0ICogMCk7CisJbWRwX3dyaXRlbChtZHAsIG1kcF9kZWZhdWx0X2Njc1sxMF0sIDB4NDA1MDAgKyA0ICogMCk7CisJbWRwX3dyaXRlbChtZHAsIG1kcF9kZWZhdWx0X2Njc1sxMV0sIDB4NDA1MDAgKyA0ICogMCk7CisKKwkvKiByZWdpc3RlciBtZHAgZGV2aWNlICovCisJbWRwLT5tZHBfZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCW1kcC0+bWRwX2Rldi5kZXYuY2xhc3MgPSBtZHBfY2xhc3M7CisJc25wcmludGYobWRwLT5tZHBfZGV2LmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAibWRwJWQiLCBwZGV2LT5pZCk7CisKKwkvKiBpZiB5b3UgY2FuIHJlbW92ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIHlvdSdkIGhhdmUgdG8gaW1wbGVtZW50CisJICogdGhpczoKKwltZHBfZGV2LnJlbGVhc2UgPSBtZHBfY2xhc3M7ICovCisKKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJm1kcC0+bWRwX2Rldi5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZGV2aWNlX3JlZ2lzdGVyOworCXJldHVybiAwOworCitlcnJvcl9kZXZpY2VfcmVnaXN0ZXI6CisJZnJlZV9pcnEobWRwLT5pcnEsIG1kcCk7CitlcnJvcl9yZXF1ZXN0X2lycToKKwlpb3VubWFwKG1kcC0+YmFzZSk7CitlcnJvcl9nZXRfaXJxOgorZXJyb3JfaW9yZW1hcDoKKwlrZnJlZShtZHApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1zbV9tZHBfZHJpdmVyID0geworCS5wcm9iZSA9IG1kcF9wcm9iZSwKKwkuZHJpdmVyID0gey5uYW1lID0gIm1zbV9tZHAifSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1kcF9pbml0KHZvaWQpCit7CisJbWRwX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibXNtX21kcCIpOworCWlmIChJU19FUlIobWRwX2NsYXNzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIG1kcCBjbGFzc1xuIik7CisJCXJldHVybiBQVFJfRVJSKG1kcF9jbGFzcyk7CisJfQorCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1zbV9tZHBfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKG1kcF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9jc2NfdGFibGUuaCBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9jc2NfdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNkZTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX2NzY190YWJsZS5oCkBAIC0wLDAgKzEsNTgyIEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZHBfY3NjX3RhYmxlLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworc3RhdGljIHN0cnVjdCB7CisJdWludDMyX3QgcmVnOworCXVpbnQzMl90IHZhbDsKK30gY3NjX3RhYmxlW10gPSB7CisJeyAweDQwNDAwLCAweDgzIH0sCisJeyAweDQwNDA0LCAweDEwMiB9LAorCXsgMHg0MDQwOCwgMHgzMiB9LAorCXsgMHg0MDQwYywgMHhmZmZmZmZiNSB9LAorCXsgMHg0MDQxMCwgMHhmZmZmZmY2YyB9LAorCXsgMHg0MDQxNCwgMHhlMSB9LAorCXsgMHg0MDQxOCwgMHhlMSB9LAorCXsgMHg0MDQxYywgMHhmZmZmZmY0NSB9LAorCXsgMHg0MDQyMCwgMHhmZmZmZmZkYyB9LAorCXsgMHg0MDQ0MCwgMHgyNTQgfSwKKwl7IDB4NDA0NDQsIDB4MCB9LAorCXsgMHg0MDQ0OCwgMHgzMzEgfSwKKwl7IDB4NDA0NGMsIDB4MjU0IH0sCisJeyAweDQwNDUwLCAweGZmZmZmZjM4IH0sCisJeyAweDQwNDU0LCAweGZmZmZmZTYxIH0sCisJeyAweDQwNDU4LCAweDI1NCB9LAorCXsgMHg0MDQ1YywgMHg0MDkgfSwKKwl7IDB4NDA0NjAsIDB4MCB9LAorCXsgMHg0MDQ4MCwgMHg1ZCB9LAorCXsgMHg0MDQ4NCwgMHgxM2EgfSwKKwl7IDB4NDA0ODgsIDB4MjAgfSwKKwl7IDB4NDA0OGMsIDB4ZmZmZmZmY2QgfSwKKwl7IDB4NDA0OTAsIDB4ZmZmZmZmNTQgfSwKKwl7IDB4NDA0OTQsIDB4ZTEgfSwKKwl7IDB4NDA0OTgsIDB4ZTEgfSwKKwl7IDB4NDA0OWMsIDB4ZmZmZmZmMzUgfSwKKwl7IDB4NDA0YTAsIDB4ZmZmZmZmZWMgfSwKKwl7IDB4NDA0YzAsIDB4MjU0IH0sCisJeyAweDQwNGM0LCAweDAgfSwKKwl7IDB4NDA0YzgsIDB4Mzk2IH0sCisJeyAweDQwNGNjLCAweDI1NCB9LAorCXsgMHg0MDRkMCwgMHhmZmZmZmY5NCB9LAorCXsgMHg0MDRkNCwgMHhmZmZmZmVmMCB9LAorCXsgMHg0MDRkOCwgMHgyNTQgfSwKKwl7IDB4NDA0ZGMsIDB4NDNhIH0sCisJeyAweDQwNGUwLCAweDAgfSwKKwl7IDB4NDA1MDAsIDB4MTAgfSwKKwl7IDB4NDA1MDQsIDB4ODAgfSwKKwl7IDB4NDA1MDgsIDB4ODAgfSwKKwl7IDB4NDA1NDAsIDB4MTAgfSwKKwl7IDB4NDA1NDQsIDB4ODAgfSwKKwl7IDB4NDA1NDgsIDB4ODAgfSwKKwl7IDB4NDA1ODAsIDB4MTAgfSwKKwl7IDB4NDA1ODQsIDB4ZWIgfSwKKwl7IDB4NDA1ODgsIDB4MTAgfSwKKwl7IDB4NDA1OGMsIDB4ZjAgfSwKKwl7IDB4NDA1YzAsIDB4MTAgfSwKKwl7IDB4NDA1YzQsIDB4ZWIgfSwKKwl7IDB4NDA1YzgsIDB4MTAgfSwKKwl7IDB4NDA1Y2MsIDB4ZjAgfSwKKwl7IDB4NDA4MDAsIDB4MCB9LAorCXsgMHg0MDgwNCwgMHgxNTE1MTUgfSwKKwl7IDB4NDA4MDgsIDB4MWQxZDFkIH0sCisJeyAweDQwODBjLCAweDIzMjMyMyB9LAorCXsgMHg0MDgxMCwgMHgyNzI3MjcgfSwKKwl7IDB4NDA4MTQsIDB4MmIyYjJiIH0sCisJeyAweDQwODE4LCAweDJmMmYyZiB9LAorCXsgMHg0MDgxYywgMHgzMzMzMzMgfSwKKwl7IDB4NDA4MjAsIDB4MzYzNjM2IH0sCisJeyAweDQwODI0LCAweDM5MzkzOSB9LAorCXsgMHg0MDgyOCwgMHgzYjNiM2IgfSwKKwl7IDB4NDA4MmMsIDB4M2UzZTNlIH0sCisJeyAweDQwODMwLCAweDQwNDA0MCB9LAorCXsgMHg0MDgzNCwgMHg0MzQzNDMgfSwKKwl7IDB4NDA4MzgsIDB4NDU0NTQ1IH0sCisJeyAweDQwODNjLCAweDQ3NDc0NyB9LAorCXsgMHg0MDg0MCwgMHg0OTQ5NDkgfSwKKwl7IDB4NDA4NDQsIDB4NGI0YjRiIH0sCisJeyAweDQwODQ4LCAweDRkNGQ0ZCB9LAorCXsgMHg0MDg0YywgMHg0ZjRmNGYgfSwKKwl7IDB4NDA4NTAsIDB4NTE1MTUxIH0sCisJeyAweDQwODU0LCAweDUzNTM1MyB9LAorCXsgMHg0MDg1OCwgMHg1NTU1NTUgfSwKKwl7IDB4NDA4NWMsIDB4NTY1NjU2IH0sCisJeyAweDQwODYwLCAweDU4NTg1OCB9LAorCXsgMHg0MDg2NCwgMHg1YTVhNWEgfSwKKwl7IDB4NDA4NjgsIDB4NWI1YjViIH0sCisJeyAweDQwODZjLCAweDVkNWQ1ZCB9LAorCXsgMHg0MDg3MCwgMHg1ZTVlNWUgfSwKKwl7IDB4NDA4NzQsIDB4NjA2MDYwIH0sCisJeyAweDQwODc4LCAweDYxNjE2MSB9LAorCXsgMHg0MDg3YywgMHg2MzYzNjMgfSwKKwl7IDB4NDA4ODAsIDB4NjQ2NDY0IH0sCisJeyAweDQwODg0LCAweDY2NjY2NiB9LAorCXsgMHg0MDg4OCwgMHg2NzY3NjcgfSwKKwl7IDB4NDA4OGMsIDB4Njg2ODY4IH0sCisJeyAweDQwODkwLCAweDZhNmE2YSB9LAorCXsgMHg0MDg5NCwgMHg2YjZiNmIgfSwKKwl7IDB4NDA4OTgsIDB4NmM2YzZjIH0sCisJeyAweDQwODljLCAweDZlNmU2ZSB9LAorCXsgMHg0MDhhMCwgMHg2ZjZmNmYgfSwKKwl7IDB4NDA4YTQsIDB4NzA3MDcwIH0sCisJeyAweDQwOGE4LCAweDcxNzE3MSB9LAorCXsgMHg0MDhhYywgMHg3MjcyNzIgfSwKKwl7IDB4NDA4YjAsIDB4NzQ3NDc0IH0sCisJeyAweDQwOGI0LCAweDc1NzU3NSB9LAorCXsgMHg0MDhiOCwgMHg3Njc2NzYgfSwKKwl7IDB4NDA4YmMsIDB4Nzc3Nzc3IH0sCisJeyAweDQwOGMwLCAweDc4Nzg3OCB9LAorCXsgMHg0MDhjNCwgMHg3OTc5NzkgfSwKKwl7IDB4NDA4YzgsIDB4N2E3YTdhIH0sCisJeyAweDQwOGNjLCAweDdjN2M3YyB9LAorCXsgMHg0MDhkMCwgMHg3ZDdkN2QgfSwKKwl7IDB4NDA4ZDQsIDB4N2U3ZTdlIH0sCisJeyAweDQwOGQ4LCAweDdmN2Y3ZiB9LAorCXsgMHg0MDhkYywgMHg4MDgwODAgfSwKKwl7IDB4NDA4ZTAsIDB4ODE4MTgxIH0sCisJeyAweDQwOGU0LCAweDgyODI4MiB9LAorCXsgMHg0MDhlOCwgMHg4MzgzODMgfSwKKwl7IDB4NDA4ZWMsIDB4ODQ4NDg0IH0sCisJeyAweDQwOGYwLCAweDg1ODU4NSB9LAorCXsgMHg0MDhmNCwgMHg4Njg2ODYgfSwKKwl7IDB4NDA4ZjgsIDB4ODc4Nzg3IH0sCisJeyAweDQwOGZjLCAweDg4ODg4OCB9LAorCXsgMHg0MDkwMCwgMHg4OTg5ODkgfSwKKwl7IDB4NDA5MDQsIDB4OGE4YThhIH0sCisJeyAweDQwOTA4LCAweDhiOGI4YiB9LAorCXsgMHg0MDkwYywgMHg4YzhjOGMgfSwKKwl7IDB4NDA5MTAsIDB4OGQ4ZDhkIH0sCisJeyAweDQwOTE0LCAweDhlOGU4ZSB9LAorCXsgMHg0MDkxOCwgMHg4ZjhmOGYgfSwKKwl7IDB4NDA5MWMsIDB4OGY4ZjhmIH0sCisJeyAweDQwOTIwLCAweDkwOTA5MCB9LAorCXsgMHg0MDkyNCwgMHg5MTkxOTEgfSwKKwl7IDB4NDA5MjgsIDB4OTI5MjkyIH0sCisJeyAweDQwOTJjLCAweDkzOTM5MyB9LAorCXsgMHg0MDkzMCwgMHg5NDk0OTQgfSwKKwl7IDB4NDA5MzQsIDB4OTU5NTk1IH0sCisJeyAweDQwOTM4LCAweDk2OTY5NiB9LAorCXsgMHg0MDkzYywgMHg5Njk2OTYgfSwKKwl7IDB4NDA5NDAsIDB4OTc5Nzk3IH0sCisJeyAweDQwOTQ0LCAweDk4OTg5OCB9LAorCXsgMHg0MDk0OCwgMHg5OTk5OTkgfSwKKwl7IDB4NDA5NGMsIDB4OWE5YTlhIH0sCisJeyAweDQwOTUwLCAweDliOWI5YiB9LAorCXsgMHg0MDk1NCwgMHg5YzljOWMgfSwKKwl7IDB4NDA5NTgsIDB4OWM5YzljIH0sCisJeyAweDQwOTVjLCAweDlkOWQ5ZCB9LAorCXsgMHg0MDk2MCwgMHg5ZTllOWUgfSwKKwl7IDB4NDA5NjQsIDB4OWY5ZjlmIH0sCisJeyAweDQwOTY4LCAweGEwYTBhMCB9LAorCXsgMHg0MDk2YywgMHhhMGEwYTAgfSwKKwl7IDB4NDA5NzAsIDB4YTFhMWExIH0sCisJeyAweDQwOTc0LCAweGEyYTJhMiB9LAorCXsgMHg0MDk3OCwgMHhhM2EzYTMgfSwKKwl7IDB4NDA5N2MsIDB4YTRhNGE0IH0sCisJeyAweDQwOTgwLCAweGE0YTRhNCB9LAorCXsgMHg0MDk4NCwgMHhhNWE1YTUgfSwKKwl7IDB4NDA5ODgsIDB4YTZhNmE2IH0sCisJeyAweDQwOThjLCAweGE3YTdhNyB9LAorCXsgMHg0MDk5MCwgMHhhN2E3YTcgfSwKKwl7IDB4NDA5OTQsIDB4YThhOGE4IH0sCisJeyAweDQwOTk4LCAweGE5YTlhOSB9LAorCXsgMHg0MDk5YywgMHhhYWFhYWEgfSwKKwl7IDB4NDA5YTAsIDB4YWFhYWFhIH0sCisJeyAweDQwOWE0LCAweGFiYWJhYiB9LAorCXsgMHg0MDlhOCwgMHhhY2FjYWMgfSwKKwl7IDB4NDA5YWMsIDB4YWRhZGFkIH0sCisJeyAweDQwOWIwLCAweGFkYWRhZCB9LAorCXsgMHg0MDliNCwgMHhhZWFlYWUgfSwKKwl7IDB4NDA5YjgsIDB4YWZhZmFmIH0sCisJeyAweDQwOWJjLCAweGFmYWZhZiB9LAorCXsgMHg0MDljMCwgMHhiMGIwYjAgfSwKKwl7IDB4NDA5YzQsIDB4YjFiMWIxIH0sCisJeyAweDQwOWM4LCAweGIyYjJiMiB9LAorCXsgMHg0MDljYywgMHhiMmIyYjIgfSwKKwl7IDB4NDA5ZDAsIDB4YjNiM2IzIH0sCisJeyAweDQwOWQ0LCAweGI0YjRiNCB9LAorCXsgMHg0MDlkOCwgMHhiNGI0YjQgfSwKKwl7IDB4NDA5ZGMsIDB4YjViNWI1IH0sCisJeyAweDQwOWUwLCAweGI2YjZiNiB9LAorCXsgMHg0MDllNCwgMHhiNmI2YjYgfSwKKwl7IDB4NDA5ZTgsIDB4YjdiN2I3IH0sCisJeyAweDQwOWVjLCAweGI4YjhiOCB9LAorCXsgMHg0MDlmMCwgMHhiOGI4YjggfSwKKwl7IDB4NDA5ZjQsIDB4YjliOWI5IH0sCisJeyAweDQwOWY4LCAweGJhYmFiYSB9LAorCXsgMHg0MDlmYywgMHhiYWJhYmEgfSwKKwl7IDB4NDBhMDAsIDB4YmJiYmJiIH0sCisJeyAweDQwYTA0LCAweGJjYmNiYyB9LAorCXsgMHg0MGEwOCwgMHhiY2JjYmMgfSwKKwl7IDB4NDBhMGMsIDB4YmRiZGJkIH0sCisJeyAweDQwYTEwLCAweGJlYmViZSB9LAorCXsgMHg0MGExNCwgMHhiZWJlYmUgfSwKKwl7IDB4NDBhMTgsIDB4YmZiZmJmIH0sCisJeyAweDQwYTFjLCAweGMwYzBjMCB9LAorCXsgMHg0MGEyMCwgMHhjMGMwYzAgfSwKKwl7IDB4NDBhMjQsIDB4YzFjMWMxIH0sCisJeyAweDQwYTI4LCAweGMxYzFjMSB9LAorCXsgMHg0MGEyYywgMHhjMmMyYzIgfSwKKwl7IDB4NDBhMzAsIDB4YzNjM2MzIH0sCisJeyAweDQwYTM0LCAweGMzYzNjMyB9LAorCXsgMHg0MGEzOCwgMHhjNGM0YzQgfSwKKwl7IDB4NDBhM2MsIDB4YzVjNWM1IH0sCisJeyAweDQwYTQwLCAweGM1YzVjNSB9LAorCXsgMHg0MGE0NCwgMHhjNmM2YzYgfSwKKwl7IDB4NDBhNDgsIDB4YzZjNmM2IH0sCisJeyAweDQwYTRjLCAweGM3YzdjNyB9LAorCXsgMHg0MGE1MCwgMHhjOGM4YzggfSwKKwl7IDB4NDBhNTQsIDB4YzhjOGM4IH0sCisJeyAweDQwYTU4LCAweGM5YzljOSB9LAorCXsgMHg0MGE1YywgMHhjOWM5YzkgfSwKKwl7IDB4NDBhNjAsIDB4Y2FjYWNhIH0sCisJeyAweDQwYTY0LCAweGNiY2JjYiB9LAorCXsgMHg0MGE2OCwgMHhjYmNiY2IgfSwKKwl7IDB4NDBhNmMsIDB4Y2NjY2NjIH0sCisJeyAweDQwYTcwLCAweGNjY2NjYyB9LAorCXsgMHg0MGE3NCwgMHhjZGNkY2QgfSwKKwl7IDB4NDBhNzgsIDB4Y2VjZWNlIH0sCisJeyAweDQwYTdjLCAweGNlY2VjZSB9LAorCXsgMHg0MGE4MCwgMHhjZmNmY2YgfSwKKwl7IDB4NDBhODQsIDB4Y2ZjZmNmIH0sCisJeyAweDQwYTg4LCAweGQwZDBkMCB9LAorCXsgMHg0MGE4YywgMHhkMGQwZDAgfSwKKwl7IDB4NDBhOTAsIDB4ZDFkMWQxIH0sCisJeyAweDQwYTk0LCAweGQyZDJkMiB9LAorCXsgMHg0MGE5OCwgMHhkMmQyZDIgfSwKKwl7IDB4NDBhOWMsIDB4ZDNkM2QzIH0sCisJeyAweDQwYWEwLCAweGQzZDNkMyB9LAorCXsgMHg0MGFhNCwgMHhkNGQ0ZDQgfSwKKwl7IDB4NDBhYTgsIDB4ZDRkNGQ0IH0sCisJeyAweDQwYWFjLCAweGQ1ZDVkNSB9LAorCXsgMHg0MGFiMCwgMHhkNmQ2ZDYgfSwKKwl7IDB4NDBhYjQsIDB4ZDZkNmQ2IH0sCisJeyAweDQwYWI4LCAweGQ3ZDdkNyB9LAorCXsgMHg0MGFiYywgMHhkN2Q3ZDcgfSwKKwl7IDB4NDBhYzAsIDB4ZDhkOGQ4IH0sCisJeyAweDQwYWM0LCAweGQ4ZDhkOCB9LAorCXsgMHg0MGFjOCwgMHhkOWQ5ZDkgfSwKKwl7IDB4NDBhY2MsIDB4ZDlkOWQ5IH0sCisJeyAweDQwYWQwLCAweGRhZGFkYSB9LAorCXsgMHg0MGFkNCwgMHhkYmRiZGIgfSwKKwl7IDB4NDBhZDgsIDB4ZGJkYmRiIH0sCisJeyAweDQwYWRjLCAweGRjZGNkYyB9LAorCXsgMHg0MGFlMCwgMHhkY2RjZGMgfSwKKwl7IDB4NDBhZTQsIDB4ZGRkZGRkIH0sCisJeyAweDQwYWU4LCAweGRkZGRkZCB9LAorCXsgMHg0MGFlYywgMHhkZWRlZGUgfSwKKwl7IDB4NDBhZjAsIDB4ZGVkZWRlIH0sCisJeyAweDQwYWY0LCAweGRmZGZkZiB9LAorCXsgMHg0MGFmOCwgMHhkZmRmZGYgfSwKKwl7IDB4NDBhZmMsIDB4ZTBlMGUwIH0sCisJeyAweDQwYjAwLCAweGUwZTBlMCB9LAorCXsgMHg0MGIwNCwgMHhlMWUxZTEgfSwKKwl7IDB4NDBiMDgsIDB4ZTFlMWUxIH0sCisJeyAweDQwYjBjLCAweGUyZTJlMiB9LAorCXsgMHg0MGIxMCwgMHhlM2UzZTMgfSwKKwl7IDB4NDBiMTQsIDB4ZTNlM2UzIH0sCisJeyAweDQwYjE4LCAweGU0ZTRlNCB9LAorCXsgMHg0MGIxYywgMHhlNGU0ZTQgfSwKKwl7IDB4NDBiMjAsIDB4ZTVlNWU1IH0sCisJeyAweDQwYjI0LCAweGU1ZTVlNSB9LAorCXsgMHg0MGIyOCwgMHhlNmU2ZTYgfSwKKwl7IDB4NDBiMmMsIDB4ZTZlNmU2IH0sCisJeyAweDQwYjMwLCAweGU3ZTdlNyB9LAorCXsgMHg0MGIzNCwgMHhlN2U3ZTcgfSwKKwl7IDB4NDBiMzgsIDB4ZThlOGU4IH0sCisJeyAweDQwYjNjLCAweGU4ZThlOCB9LAorCXsgMHg0MGI0MCwgMHhlOWU5ZTkgfSwKKwl7IDB4NDBiNDQsIDB4ZTllOWU5IH0sCisJeyAweDQwYjQ4LCAweGVhZWFlYSB9LAorCXsgMHg0MGI0YywgMHhlYWVhZWEgfSwKKwl7IDB4NDBiNTAsIDB4ZWJlYmViIH0sCisJeyAweDQwYjU0LCAweGViZWJlYiB9LAorCXsgMHg0MGI1OCwgMHhlY2VjZWMgfSwKKwl7IDB4NDBiNWMsIDB4ZWNlY2VjIH0sCisJeyAweDQwYjYwLCAweGVkZWRlZCB9LAorCXsgMHg0MGI2NCwgMHhlZGVkZWQgfSwKKwl7IDB4NDBiNjgsIDB4ZWVlZWVlIH0sCisJeyAweDQwYjZjLCAweGVlZWVlZSB9LAorCXsgMHg0MGI3MCwgMHhlZmVmZWYgfSwKKwl7IDB4NDBiNzQsIDB4ZWZlZmVmIH0sCisJeyAweDQwYjc4LCAweGYwZjBmMCB9LAorCXsgMHg0MGI3YywgMHhmMGYwZjAgfSwKKwl7IDB4NDBiODAsIDB4ZjFmMWYxIH0sCisJeyAweDQwYjg0LCAweGYxZjFmMSB9LAorCXsgMHg0MGI4OCwgMHhmMmYyZjIgfSwKKwl7IDB4NDBiOGMsIDB4ZjJmMmYyIH0sCisJeyAweDQwYjkwLCAweGYyZjJmMiB9LAorCXsgMHg0MGI5NCwgMHhmM2YzZjMgfSwKKwl7IDB4NDBiOTgsIDB4ZjNmM2YzIH0sCisJeyAweDQwYjljLCAweGY0ZjRmNCB9LAorCXsgMHg0MGJhMCwgMHhmNGY0ZjQgfSwKKwl7IDB4NDBiYTQsIDB4ZjVmNWY1IH0sCisJeyAweDQwYmE4LCAweGY1ZjVmNSB9LAorCXsgMHg0MGJhYywgMHhmNmY2ZjYgfSwKKwl7IDB4NDBiYjAsIDB4ZjZmNmY2IH0sCisJeyAweDQwYmI0LCAweGY3ZjdmNyB9LAorCXsgMHg0MGJiOCwgMHhmN2Y3ZjcgfSwKKwl7IDB4NDBiYmMsIDB4ZjhmOGY4IH0sCisJeyAweDQwYmMwLCAweGY4ZjhmOCB9LAorCXsgMHg0MGJjNCwgMHhmOWY5ZjkgfSwKKwl7IDB4NDBiYzgsIDB4ZjlmOWY5IH0sCisJeyAweDQwYmNjLCAweGZhZmFmYSB9LAorCXsgMHg0MGJkMCwgMHhmYWZhZmEgfSwKKwl7IDB4NDBiZDQsIDB4ZmFmYWZhIH0sCisJeyAweDQwYmQ4LCAweGZiZmJmYiB9LAorCXsgMHg0MGJkYywgMHhmYmZiZmIgfSwKKwl7IDB4NDBiZTAsIDB4ZmNmY2ZjIH0sCisJeyAweDQwYmU0LCAweGZjZmNmYyB9LAorCXsgMHg0MGJlOCwgMHhmZGZkZmQgfSwKKwl7IDB4NDBiZWMsIDB4ZmRmZGZkIH0sCisJeyAweDQwYmYwLCAweGZlZmVmZSB9LAorCXsgMHg0MGJmNCwgMHhmZWZlZmUgfSwKKwl7IDB4NDBiZjgsIDB4ZmZmZmZmIH0sCisJeyAweDQwYmZjLCAweGZmZmZmZiB9LAorCXsgMHg0MGMwMCwgMHgwIH0sCisJeyAweDQwYzA0LCAweDAgfSwKKwl7IDB4NDBjMDgsIDB4MCB9LAorCXsgMHg0MGMwYywgMHgwIH0sCisJeyAweDQwYzEwLCAweDAgfSwKKwl7IDB4NDBjMTQsIDB4MCB9LAorCXsgMHg0MGMxOCwgMHgwIH0sCisJeyAweDQwYzFjLCAweDAgfSwKKwl7IDB4NDBjMjAsIDB4MCB9LAorCXsgMHg0MGMyNCwgMHgwIH0sCisJeyAweDQwYzI4LCAweDAgfSwKKwl7IDB4NDBjMmMsIDB4MCB9LAorCXsgMHg0MGMzMCwgMHgwIH0sCisJeyAweDQwYzM0LCAweDAgfSwKKwl7IDB4NDBjMzgsIDB4MCB9LAorCXsgMHg0MGMzYywgMHgwIH0sCisJeyAweDQwYzQwLCAweDEwMTAxIH0sCisJeyAweDQwYzQ0LCAweDEwMTAxIH0sCisJeyAweDQwYzQ4LCAweDEwMTAxIH0sCisJeyAweDQwYzRjLCAweDEwMTAxIH0sCisJeyAweDQwYzUwLCAweDEwMTAxIH0sCisJeyAweDQwYzU0LCAweDEwMTAxIH0sCisJeyAweDQwYzU4LCAweDEwMTAxIH0sCisJeyAweDQwYzVjLCAweDEwMTAxIH0sCisJeyAweDQwYzYwLCAweDEwMTAxIH0sCisJeyAweDQwYzY0LCAweDEwMTAxIH0sCisJeyAweDQwYzY4LCAweDIwMjAyIH0sCisJeyAweDQwYzZjLCAweDIwMjAyIH0sCisJeyAweDQwYzcwLCAweDIwMjAyIH0sCisJeyAweDQwYzc0LCAweDIwMjAyIH0sCisJeyAweDQwYzc4LCAweDIwMjAyIH0sCisJeyAweDQwYzdjLCAweDIwMjAyIH0sCisJeyAweDQwYzgwLCAweDMwMzAzIH0sCisJeyAweDQwYzg0LCAweDMwMzAzIH0sCisJeyAweDQwYzg4LCAweDMwMzAzIH0sCisJeyAweDQwYzhjLCAweDMwMzAzIH0sCisJeyAweDQwYzkwLCAweDMwMzAzIH0sCisJeyAweDQwYzk0LCAweDQwNDA0IH0sCisJeyAweDQwYzk4LCAweDQwNDA0IH0sCisJeyAweDQwYzljLCAweDQwNDA0IH0sCisJeyAweDQwY2EwLCAweDQwNDA0IH0sCisJeyAweDQwY2E0LCAweDQwNDA0IH0sCisJeyAweDQwY2E4LCAweDUwNTA1IH0sCisJeyAweDQwY2FjLCAweDUwNTA1IH0sCisJeyAweDQwY2IwLCAweDUwNTA1IH0sCisJeyAweDQwY2I0LCAweDUwNTA1IH0sCisJeyAweDQwY2I4LCAweDYwNjA2IH0sCisJeyAweDQwY2JjLCAweDYwNjA2IH0sCisJeyAweDQwY2MwLCAweDYwNjA2IH0sCisJeyAweDQwY2M0LCAweDcwNzA3IH0sCisJeyAweDQwY2M4LCAweDcwNzA3IH0sCisJeyAweDQwY2NjLCAweDcwNzA3IH0sCisJeyAweDQwY2QwLCAweDcwNzA3IH0sCisJeyAweDQwY2Q0LCAweDgwODA4IH0sCisJeyAweDQwY2Q4LCAweDgwODA4IH0sCisJeyAweDQwY2RjLCAweDgwODA4IH0sCisJeyAweDQwY2UwLCAweDkwOTA5IH0sCisJeyAweDQwY2U0LCAweDkwOTA5IH0sCisJeyAweDQwY2U4LCAweGEwYTBhIH0sCisJeyAweDQwY2VjLCAweGEwYTBhIH0sCisJeyAweDQwY2YwLCAweGEwYTBhIH0sCisJeyAweDQwY2Y0LCAweGIwYjBiIH0sCisJeyAweDQwY2Y4LCAweGIwYjBiIH0sCisJeyAweDQwY2ZjLCAweGIwYjBiIH0sCisJeyAweDQwZDAwLCAweGMwYzBjIH0sCisJeyAweDQwZDA0LCAweGMwYzBjIH0sCisJeyAweDQwZDA4LCAweGQwZDBkIH0sCisJeyAweDQwZDBjLCAweGQwZDBkIH0sCisJeyAweDQwZDEwLCAweGUwZTBlIH0sCisJeyAweDQwZDE0LCAweGUwZTBlIH0sCisJeyAweDQwZDE4LCAweGUwZTBlIH0sCisJeyAweDQwZDFjLCAweGYwZjBmIH0sCisJeyAweDQwZDIwLCAweGYwZjBmIH0sCisJeyAweDQwZDI0LCAweDEwMTAxMCB9LAorCXsgMHg0MGQyOCwgMHgxMDEwMTAgfSwKKwl7IDB4NDBkMmMsIDB4MTExMTExIH0sCisJeyAweDQwZDMwLCAweDExMTExMSB9LAorCXsgMHg0MGQzNCwgMHgxMjEyMTIgfSwKKwl7IDB4NDBkMzgsIDB4MTIxMjEyIH0sCisJeyAweDQwZDNjLCAweDEzMTMxMyB9LAorCXsgMHg0MGQ0MCwgMHgxMzEzMTMgfSwKKwl7IDB4NDBkNDQsIDB4MTQxNDE0IH0sCisJeyAweDQwZDQ4LCAweDE1MTUxNSB9LAorCXsgMHg0MGQ0YywgMHgxNTE1MTUgfSwKKwl7IDB4NDBkNTAsIDB4MTYxNjE2IH0sCisJeyAweDQwZDU0LCAweDE2MTYxNiB9LAorCXsgMHg0MGQ1OCwgMHgxNzE3MTcgfSwKKwl7IDB4NDBkNWMsIDB4MTcxNzE3IH0sCisJeyAweDQwZDYwLCAweDE4MTgxOCB9LAorCXsgMHg0MGQ2NCwgMHgxOTE5MTkgfSwKKwl7IDB4NDBkNjgsIDB4MTkxOTE5IH0sCisJeyAweDQwZDZjLCAweDFhMWExYSB9LAorCXsgMHg0MGQ3MCwgMHgxYjFiMWIgfSwKKwl7IDB4NDBkNzQsIDB4MWIxYjFiIH0sCisJeyAweDQwZDc4LCAweDFjMWMxYyB9LAorCXsgMHg0MGQ3YywgMHgxYzFjMWMgfSwKKwl7IDB4NDBkODAsIDB4MWQxZDFkIH0sCisJeyAweDQwZDg0LCAweDFlMWUxZSB9LAorCXsgMHg0MGQ4OCwgMHgxZjFmMWYgfSwKKwl7IDB4NDBkOGMsIDB4MWYxZjFmIH0sCisJeyAweDQwZDkwLCAweDIwMjAyMCB9LAorCXsgMHg0MGQ5NCwgMHgyMTIxMjEgfSwKKwl7IDB4NDBkOTgsIDB4MjEyMTIxIH0sCisJeyAweDQwZDljLCAweDIyMjIyMiB9LAorCXsgMHg0MGRhMCwgMHgyMzIzMjMgfSwKKwl7IDB4NDBkYTQsIDB4MjQyNDI0IH0sCisJeyAweDQwZGE4LCAweDI0MjQyNCB9LAorCXsgMHg0MGRhYywgMHgyNTI1MjUgfSwKKwl7IDB4NDBkYjAsIDB4MjYyNjI2IH0sCisJeyAweDQwZGI0LCAweDI3MjcyNyB9LAorCXsgMHg0MGRiOCwgMHgyNzI3MjcgfSwKKwl7IDB4NDBkYmMsIDB4MjgyODI4IH0sCisJeyAweDQwZGMwLCAweDI5MjkyOSB9LAorCXsgMHg0MGRjNCwgMHgyYTJhMmEgfSwKKwl7IDB4NDBkYzgsIDB4MmIyYjJiIH0sCisJeyAweDQwZGNjLCAweDJjMmMyYyB9LAorCXsgMHg0MGRkMCwgMHgyYzJjMmMgfSwKKwl7IDB4NDBkZDQsIDB4MmQyZDJkIH0sCisJeyAweDQwZGQ4LCAweDJlMmUyZSB9LAorCXsgMHg0MGRkYywgMHgyZjJmMmYgfSwKKwl7IDB4NDBkZTAsIDB4MzAzMDMwIH0sCisJeyAweDQwZGU0LCAweDMxMzEzMSB9LAorCXsgMHg0MGRlOCwgMHgzMjMyMzIgfSwKKwl7IDB4NDBkZWMsIDB4MzMzMzMzIH0sCisJeyAweDQwZGYwLCAweDMzMzMzMyB9LAorCXsgMHg0MGRmNCwgMHgzNDM0MzQgfSwKKwl7IDB4NDBkZjgsIDB4MzUzNTM1IH0sCisJeyAweDQwZGZjLCAweDM2MzYzNiB9LAorCXsgMHg0MGUwMCwgMHgzNzM3MzcgfSwKKwl7IDB4NDBlMDQsIDB4MzgzODM4IH0sCisJeyAweDQwZTA4LCAweDM5MzkzOSB9LAorCXsgMHg0MGUwYywgMHgzYTNhM2EgfSwKKwl7IDB4NDBlMTAsIDB4M2IzYjNiIH0sCisJeyAweDQwZTE0LCAweDNjM2MzYyB9LAorCXsgMHg0MGUxOCwgMHgzZDNkM2QgfSwKKwl7IDB4NDBlMWMsIDB4M2UzZTNlIH0sCisJeyAweDQwZTIwLCAweDNmM2YzZiB9LAorCXsgMHg0MGUyNCwgMHg0MDQwNDAgfSwKKwl7IDB4NDBlMjgsIDB4NDE0MTQxIH0sCisJeyAweDQwZTJjLCAweDQyNDI0MiB9LAorCXsgMHg0MGUzMCwgMHg0MzQzNDMgfSwKKwl7IDB4NDBlMzQsIDB4NDQ0NDQ0IH0sCisJeyAweDQwZTM4LCAweDQ2NDY0NiB9LAorCXsgMHg0MGUzYywgMHg0NzQ3NDcgfSwKKwl7IDB4NDBlNDAsIDB4NDg0ODQ4IH0sCisJeyAweDQwZTQ0LCAweDQ5NDk0OSB9LAorCXsgMHg0MGU0OCwgMHg0YTRhNGEgfSwKKwl7IDB4NDBlNGMsIDB4NGI0YjRiIH0sCisJeyAweDQwZTUwLCAweDRjNGM0YyB9LAorCXsgMHg0MGU1NCwgMHg0ZDRkNGQgfSwKKwl7IDB4NDBlNTgsIDB4NGY0ZjRmIH0sCisJeyAweDQwZTVjLCAweDUwNTA1MCB9LAorCXsgMHg0MGU2MCwgMHg1MTUxNTEgfSwKKwl7IDB4NDBlNjQsIDB4NTI1MjUyIH0sCisJeyAweDQwZTY4LCAweDUzNTM1MyB9LAorCXsgMHg0MGU2YywgMHg1NDU0NTQgfSwKKwl7IDB4NDBlNzAsIDB4NTY1NjU2IH0sCisJeyAweDQwZTc0LCAweDU3NTc1NyB9LAorCXsgMHg0MGU3OCwgMHg1ODU4NTggfSwKKwl7IDB4NDBlN2MsIDB4NTk1OTU5IH0sCisJeyAweDQwZTgwLCAweDViNWI1YiB9LAorCXsgMHg0MGU4NCwgMHg1YzVjNWMgfSwKKwl7IDB4NDBlODgsIDB4NWQ1ZDVkIH0sCisJeyAweDQwZThjLCAweDVlNWU1ZSB9LAorCXsgMHg0MGU5MCwgMHg2MDYwNjAgfSwKKwl7IDB4NDBlOTQsIDB4NjE2MTYxIH0sCisJeyAweDQwZTk4LCAweDYyNjI2MiB9LAorCXsgMHg0MGU5YywgMHg2NDY0NjQgfSwKKwl7IDB4NDBlYTAsIDB4NjU2NTY1IH0sCisJeyAweDQwZWE0LCAweDY2NjY2NiB9LAorCXsgMHg0MGVhOCwgMHg2ODY4NjggfSwKKwl7IDB4NDBlYWMsIDB4Njk2OTY5IH0sCisJeyAweDQwZWIwLCAweDZhNmE2YSB9LAorCXsgMHg0MGViNCwgMHg2YzZjNmMgfSwKKwl7IDB4NDBlYjgsIDB4NmQ2ZDZkIH0sCisJeyAweDQwZWJjLCAweDZmNmY2ZiB9LAorCXsgMHg0MGVjMCwgMHg3MDcwNzAgfSwKKwl7IDB4NDBlYzQsIDB4NzE3MTcxIH0sCisJeyAweDQwZWM4LCAweDczNzM3MyB9LAorCXsgMHg0MGVjYywgMHg3NDc0NzQgfSwKKwl7IDB4NDBlZDAsIDB4NzY3Njc2IH0sCisJeyAweDQwZWQ0LCAweDc3Nzc3NyB9LAorCXsgMHg0MGVkOCwgMHg3OTc5NzkgfSwKKwl7IDB4NDBlZGMsIDB4N2E3YTdhIH0sCisJeyAweDQwZWUwLCAweDdjN2M3YyB9LAorCXsgMHg0MGVlNCwgMHg3ZDdkN2QgfSwKKwl7IDB4NDBlZTgsIDB4N2Y3ZjdmIH0sCisJeyAweDQwZWVjLCAweDgwODA4MCB9LAorCXsgMHg0MGVmMCwgMHg4MjgyODIgfSwKKwl7IDB4NDBlZjQsIDB4ODM4MzgzIH0sCisJeyAweDQwZWY4LCAweDg1ODU4NSB9LAorCXsgMHg0MGVmYywgMHg4Njg2ODYgfSwKKwl7IDB4NDBmMDAsIDB4ODg4ODg4IH0sCisJeyAweDQwZjA0LCAweDg5ODk4OSB9LAorCXsgMHg0MGYwOCwgMHg4YjhiOGIgfSwKKwl7IDB4NDBmMGMsIDB4OGQ4ZDhkIH0sCisJeyAweDQwZjEwLCAweDhlOGU4ZSB9LAorCXsgMHg0MGYxNCwgMHg5MDkwOTAgfSwKKwl7IDB4NDBmMTgsIDB4OTE5MTkxIH0sCisJeyAweDQwZjFjLCAweDkzOTM5MyB9LAorCXsgMHg0MGYyMCwgMHg5NTk1OTUgfSwKKwl7IDB4NDBmMjQsIDB4OTY5Njk2IH0sCisJeyAweDQwZjI4LCAweDk4OTg5OCB9LAorCXsgMHg0MGYyYywgMHg5YTlhOWEgfSwKKwl7IDB4NDBmMzAsIDB4OWI5YjliIH0sCisJeyAweDQwZjM0LCAweDlkOWQ5ZCB9LAorCXsgMHg0MGYzOCwgMHg5ZjlmOWYgfSwKKwl7IDB4NDBmM2MsIDB4YTFhMWExIH0sCisJeyAweDQwZjQwLCAweGEyYTJhMiB9LAorCXsgMHg0MGY0NCwgMHhhNGE0YTQgfSwKKwl7IDB4NDBmNDgsIDB4YTZhNmE2IH0sCisJeyAweDQwZjRjLCAweGE3YTdhNyB9LAorCXsgMHg0MGY1MCwgMHhhOWE5YTkgfSwKKwl7IDB4NDBmNTQsIDB4YWJhYmFiIH0sCisJeyAweDQwZjU4LCAweGFkYWRhZCB9LAorCXsgMHg0MGY1YywgMHhhZmFmYWYgfSwKKwl7IDB4NDBmNjAsIDB4YjBiMGIwIH0sCisJeyAweDQwZjY0LCAweGIyYjJiMiB9LAorCXsgMHg0MGY2OCwgMHhiNGI0YjQgfSwKKwl7IDB4NDBmNmMsIDB4YjZiNmI2IH0sCisJeyAweDQwZjcwLCAweGI4YjhiOCB9LAorCXsgMHg0MGY3NCwgMHhiYWJhYmEgfSwKKwl7IDB4NDBmNzgsIDB4YmJiYmJiIH0sCisJeyAweDQwZjdjLCAweGJkYmRiZCB9LAorCXsgMHg0MGY4MCwgMHhiZmJmYmYgfSwKKwl7IDB4NDBmODQsIDB4YzFjMWMxIH0sCisJeyAweDQwZjg4LCAweGMzYzNjMyB9LAorCXsgMHg0MGY4YywgMHhjNWM1YzUgfSwKKwl7IDB4NDBmOTAsIDB4YzdjN2M3IH0sCisJeyAweDQwZjk0LCAweGM5YzljOSB9LAorCXsgMHg0MGY5OCwgMHhjYmNiY2IgfSwKKwl7IDB4NDBmOWMsIDB4Y2RjZGNkIH0sCisJeyAweDQwZmEwLCAweGNmY2ZjZiB9LAorCXsgMHg0MGZhNCwgMHhkMWQxZDEgfSwKKwl7IDB4NDBmYTgsIDB4ZDNkM2QzIH0sCisJeyAweDQwZmFjLCAweGQ1ZDVkNSB9LAorCXsgMHg0MGZiMCwgMHhkN2Q3ZDcgfSwKKwl7IDB4NDBmYjQsIDB4ZDlkOWQ5IH0sCisJeyAweDQwZmI4LCAweGRiZGJkYiB9LAorCXsgMHg0MGZiYywgMHhkZGRkZGQgfSwKKwl7IDB4NDBmYzAsIDB4ZGZkZmRmIH0sCisJeyAweDQwZmM0LCAweGUxZTFlMSB9LAorCXsgMHg0MGZjOCwgMHhlM2UzZTMgfSwKKwl7IDB4NDBmY2MsIDB4ZTVlNWU1IH0sCisJeyAweDQwZmQwLCAweGU3ZTdlNyB9LAorCXsgMHg0MGZkNCwgMHhlOWU5ZTkgfSwKKwl7IDB4NDBmZDgsIDB4ZWJlYmViIH0sCisJeyAweDQwZmRjLCAweGVlZWVlZSB9LAorCXsgMHg0MGZlMCwgMHhmMGYwZjAgfSwKKwl7IDB4NDBmZTQsIDB4ZjJmMmYyIH0sCisJeyAweDQwZmU4LCAweGY0ZjRmNCB9LAorCXsgMHg0MGZlYywgMHhmNmY2ZjYgfSwKKwl7IDB4NDBmZjAsIDB4ZjhmOGY4IH0sCisJeyAweDQwZmY0LCAweGZiZmJmYiB9LAorCXsgMHg0MGZmOCwgMHhmZGZkZmQgfSwKKwl7IDB4NDBmZmMsIDB4ZmZmZmZmIH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwX2h3LmggYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNkZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX2h3LmgKQEAgLTAsMCArMSw2MjEgQEAKKy8qIGRyaXZlcnMvdmlkZW8vbXNtX2ZiL21kcF9ody5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFFVQUxDT01NIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NRFBfSFdfSF8KKyNkZWZpbmUgX01EUF9IV19IXworCisjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorCitzdHJ1Y3QgbWRwX2luZm8geworCXN0cnVjdCBtZHBfZGV2aWNlIG1kcF9kZXY7CisJY2hhciAqIF9faW9tZW0gYmFzZTsKKwlpbnQgaXJxOworfTsKK3N0cnVjdCBtZHBfYmxpdF9yZXE7CitzdHJ1Y3QgbWRwX2RldmljZTsKK2ludCBtZHBfcHBwX2JsaXQoY29uc3Qgc3RydWN0IG1kcF9pbmZvICptZHAsIHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwKKwkJIHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsCisJCSB1bnNpZ25lZCBsb25nIHNyY19sZW4sIHN0cnVjdCBmaWxlICpkc3RfZmlsZSwKKwkJIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LCB1bnNpZ25lZCBsb25nIGRzdF9sZW4pOworI2RlZmluZSBtZHBfd3JpdGVsKG1kcCwgdmFsdWUsIG9mZnNldCkgd3JpdGVsKHZhbHVlLCBtZHAtPmJhc2UgKyBvZmZzZXQpCisjZGVmaW5lIG1kcF9yZWFkbChtZHAsIG9mZnNldCkgcmVhZGwobWRwLT5iYXNlICsgb2Zmc2V0KQorCisjZGVmaW5lIE1EUF9TWU5DX0NPTkZJR18wICAgICAgICAgICAgICAgICgweDAwMDAwKQorI2RlZmluZSBNRFBfU1lOQ19DT05GSUdfMSAgICAgICAgICAgICAgICAoMHgwMDAwNCkKKyNkZWZpbmUgTURQX1NZTkNfQ09ORklHXzIgICAgICAgICAgICAgICAgKDB4MDAwMDgpCisjZGVmaW5lIE1EUF9TWU5DX1NUQVRVU18wICAgICAgICAgICAgICAgICgweDAwMDBjKQorI2RlZmluZSBNRFBfU1lOQ19TVEFUVVNfMSAgICAgICAgICAgICAgICAoMHgwMDAxMCkKKyNkZWZpbmUgTURQX1NZTkNfU1RBVFVTXzIgICAgICAgICAgICAgICAgKDB4MDAwMTQpCisjZGVmaW5lIE1EUF9TWU5DX1RIUkVTSF8wICAgICAgICAgICAgICAgICgweDAwMDE4KQorI2RlZmluZSBNRFBfU1lOQ19USFJFU0hfMSAgICAgICAgICAgICAgICAoMHgwMDAxYykKKyNkZWZpbmUgTURQX0lOVFJfRU5BQkxFICAgICAgICAgICAgICAgICAgKDB4MDAwMjApCisjZGVmaW5lIE1EUF9JTlRSX1NUQVRVUyAgICAgICAgICAgICAgICAgICgweDAwMDI0KQorI2RlZmluZSBNRFBfSU5UUl9DTEVBUiAgICAgICAgICAgICAgICAgICAoMHgwMDAyOCkKKyNkZWZpbmUgTURQX0RJU1BMQVkwX1NUQVJUICAgICAgICAgICAgICAgKDB4MDAwMzApCisjZGVmaW5lIE1EUF9ESVNQTEFZMV9TVEFSVCAgICAgICAgICAgICAgICgweDAwMDM0KQorI2RlZmluZSBNRFBfRElTUExBWV9TVEFUVVMgICAgICAgICAgICAgICAoMHgwMDAzOCkKKyNkZWZpbmUgTURQX0VCSTJfTENEMCAgICAgICAgICAgICAgICAgICAgKDB4MDAwM2MpCisjZGVmaW5lIE1EUF9FQkkyX0xDRDEgICAgICAgICAgICAgICAgICAgICgweDAwMDQwKQorI2RlZmluZSBNRFBfRElTUExBWTBfQUREUiAgICAgICAgICAgICAgICAoMHgwMDA1NCkKKyNkZWZpbmUgTURQX0RJU1BMQVkxX0FERFIgICAgICAgICAgICAgICAgKDB4MDAwNTgpCisjZGVmaW5lIE1EUF9FQkkyX1BPUlRNQVBfTU9ERSAgICAgICAgICAgICgweDAwMDVjKQorI2RlZmluZSBNRFBfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDA2MCkKKyNkZWZpbmUgTURQX1RWX09VVF9TVEFUVVMgICAgICAgICAgICAgICAgKDB4MDAwNjQpCisjZGVmaW5lIE1EUF9IV19WRVJTSU9OICAgICAgICAgICAgICAgICAgICgweDAwMDcwKQorI2RlZmluZSBNRFBfU1dfUkVTRVQgICAgICAgICAgICAgICAgICAgICAoMHgwMDA3NCkKKyNkZWZpbmUgTURQX0FYSV9FUlJPUl9NQVNURVJfU1RPUCAgICAgICAgKDB4MDAwNzgpCisjZGVmaW5lIE1EUF9TRUxfQ0xLX09SX0hDTEtfVEVTVF9CVVMgICAgICgweDAwMDdjKQorI2RlZmluZSBNRFBfUFJJTUFSWV9WU1lOQ19PVVRfQ1RSTCAgICAgICAoMHgwMDA4MCkKKyNkZWZpbmUgTURQX1NFQ09OREFSWV9WU1lOQ19PVVRfQ1RSTCAgICAgKDB4MDAwODQpCisjZGVmaW5lIE1EUF9FWFRFUk5BTF9WU1lOQ19PVVRfQ1RSTCAgICAgICgweDAwMDg4KQorI2RlZmluZSBNRFBfVlNZTkNfQ1RSTCAgICAgICAgICAgICAgICAgICAoMHgwMDA4YykKKyNkZWZpbmUgTURQX0NHQ19FTiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMDApCisjZGVmaW5lIE1EUF9DTURfU1RBVFVTICAgICAgICAgICAgICAgICAgICgweDEwMDA4KQorI2RlZmluZSBNRFBfUFJPRklMRV9FTiAgICAgICAgICAgICAgICAgICAoMHgxMDAxMCkKKyNkZWZpbmUgTURQX1BST0ZJTEVfQ09VTlQgICAgICAgICAgICAgICAgKDB4MTAwMTQpCisjZGVmaW5lIE1EUF9ETUFfU1RBUlQgICAgICAgICAgICAgICAgICAgICgweDEwMDQ0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDAgICAgICAgICAgICAoMHgxMDEwMCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQxICAgICAgICAgICAgKDB4MTAxMDQpCisjZGVmaW5lIE1EUF9DT01NQU5EX0NPTkZJRyAgICAgICAgICAgICAgICgweDEwMTA0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDIgICAgICAgICAgICAoMHgxMDEwOCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQzICAgICAgICAgICAgKDB4MTAxMGMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENCAgICAgICAgICAgICgweDEwMTEwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDYgICAgICAgICAgICAoMHgxMDExOCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ3ICAgICAgICAgICAgKDB4MTAxMWMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEOCAgICAgICAgICAgICgweDEwMTIwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDkgICAgICAgICAgICAoMHgxMDEyNCkKKyNkZWZpbmUgTURQX1BQUF9TT1VSQ0VfQ09ORklHICAgICAgICAgICAgKDB4MTAxMjQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMTAgICAgICAgICAgICgweDEwMTI4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDExICAgICAgICAgICAoMHgxMDEyYykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQxMiAgICAgICAgICAgKDB4MTAxMzApCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMTMgICAgICAgICAgICgweDEwMTM0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDE0ICAgICAgICAgICAoMHgxMDEzOCkKKyNkZWZpbmUgTURQX1BQUF9PUEVSQVRJT05fQ09ORklHICAgICAgICAgKDB4MTAxMzgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMTUgICAgICAgICAgICgweDEwMTNjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDE2ICAgICAgICAgICAoMHgxMDE0MCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQxNyAgICAgICAgICAgKDB4MTAxNDQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMTggICAgICAgICAgICgweDEwMTQ4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDE5ICAgICAgICAgICAoMHgxMDE0YykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyMCAgICAgICAgICAgKDB4MTAxNTApCisjZGVmaW5lIE1EUF9QUFBfREVTVElOQVRJT05fQ09ORklHICAgICAgICgweDEwMTUwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDIxICAgICAgICAgICAoMHgxMDE1NCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyMiAgICAgICAgICAgKDB4MTAxNTgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMjMgICAgICAgICAgICgweDEwMTVjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDI0ICAgICAgICAgICAoMHgxMDE2MCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyNSAgICAgICAgICAgKDB4MTAxNjQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMjYgICAgICAgICAgICgweDEwMTY4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDI3ICAgICAgICAgICAoMHgxMDE2YykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQyOSAgICAgICAgICAgKDB4MTAxNzQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMzAgICAgICAgICAgICgweDEwMTc4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDMxICAgICAgICAgICAoMHgxMDE3YykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQzMiAgICAgICAgICAgKDB4MTAxODApCisjZGVmaW5lIE1EUF9ETUFfQ09ORklHICAgICAgICAgICAgICAgICAgICgweDEwMTgwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDMzICAgICAgICAgICAoMHgxMDE4NCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQzNCAgICAgICAgICAgKDB4MTAxODgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JEMzUgICAgICAgICAgICgweDEwMThjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDM3ICAgICAgICAgICAoMHgxMDE5NCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQzOSAgICAgICAgICAgKDB4MTAxOWMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENDAgICAgICAgICAgICgweDEwMWEwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDQxICAgICAgICAgICAoMHgxMDFhNCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ0MyAgICAgICAgICAgKDB4MTAxYWMpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENDYgICAgICAgICAgICgweDEwMWI4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDQ3ICAgICAgICAgICAoMHgxMDFiYykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ0OCAgICAgICAgICAgKDB4MTAxYzApCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENDkgICAgICAgICAgICgweDEwMWM0KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDUwICAgICAgICAgICAoMHgxMDFjOCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ1MSAgICAgICAgICAgKDB4MTAxY2MpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENTIgICAgICAgICAgICgweDEwMWQwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDUzICAgICAgICAgICAoMHgxMDFkNCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ1NCAgICAgICAgICAgKDB4MTAxZDgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENTUgICAgICAgICAgICgweDEwMWRjKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDU2ICAgICAgICAgICAoMHgxMDFlMCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ1NyAgICAgICAgICAgKDB4MTAxZTQpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENTggICAgICAgICAgICgweDEwMWU4KQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDU5ICAgICAgICAgICAoMHgxMDFlYykKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ2MCAgICAgICAgICAgKDB4MTAxZjApCisjZGVmaW5lIE1EUF9WU1lOQ19USFJFU0hPTEQgICAgICAgICAgICAgICgweDEwMWYwKQorI2RlZmluZSBNRFBfRlVMTF9CWVBBU1NfV09SRDYxICAgICAgICAgICAoMHgxMDFmNCkKKyNkZWZpbmUgTURQX0ZVTExfQllQQVNTX1dPUkQ2MiAgICAgICAgICAgKDB4MTAxZjgpCisjZGVmaW5lIE1EUF9GVUxMX0JZUEFTU19XT1JENjMgICAgICAgICAgICgweDEwMWZjKQorI2RlZmluZSBNRFBfVEZFVENIX1RFU1RfTU9ERSAgICAgICAgICAgICAoMHgyMDAwNCkKKyNkZWZpbmUgTURQX1RGRVRDSF9TVEFUVVMgICAgICAgICAgICAgICAgKDB4MjAwMDgpCisjZGVmaW5lIE1EUF9URkVUQ0hfVElMRV9DT1VOVCAgICAgICAgICAgICgweDIwMDEwKQorI2RlZmluZSBNRFBfVEZFVENIX0ZFVENIX0NPVU5UICAgICAgICAgICAoMHgyMDAxNCkKKyNkZWZpbmUgTURQX1RGRVRDSF9DT05TVEFOVF9DT0xPUiAgICAgICAgKDB4MjAwNDApCisjZGVmaW5lIE1EUF9DU0NfQllQQVNTICAgICAgICAgICAgICAgICAgICgweDQwMDA0KQorI2RlZmluZSBNRFBfU0NBTEVfQ09FRkZfTFNCICAgICAgICAgICAgICAoMHg1ZmZmYykKKyNkZWZpbmUgTURQX1RWX09VVF9DVEwgICAgICAgICAgICAgICAgICAgKDB4YzAwMDApCisjZGVmaW5lIE1EUF9UVl9PVVRfRklSX0NPRUZGICAgICAgICAgICAgICgweGMwMDA0KQorI2RlZmluZSBNRFBfVFZfT1VUX0JVRl9BRERSICAgICAgICAgICAgICAoMHhjMDAwOCkKKyNkZWZpbmUgTURQX1RWX09VVF9DQ19EQVRBICAgICAgICAgICAgICAgKDB4YzAwMGMpCisjZGVmaW5lIE1EUF9UVl9PVVRfU09CRUwgICAgICAgICAgICAgICAgICgweGMwMDEwKQorI2RlZmluZSBNRFBfVFZfT1VUX1lfQ0xBTVAgICAgICAgICAgICAgICAoMHhjMDAxOCkKKyNkZWZpbmUgTURQX1RWX09VVF9DQl9DTEFNUCAgICAgICAgICAgICAgKDB4YzAwMWMpCisjZGVmaW5lIE1EUF9UVl9PVVRfQ1JfQ0xBTVAgICAgICAgICAgICAgICgweGMwMDIwKQorI2RlZmluZSBNRFBfVEVTVF9NT0RFX0NMSyAgICAgICAgICAgICAgICAoMHhkMDAwMCkKKyNkZWZpbmUgTURQX1RFU1RfTUlTUl9SRVNFVF9DTEsgICAgICAgICAgKDB4ZDAwMDQpCisjZGVmaW5lIE1EUF9URVNUX0VYUE9SVF9NSVNSX0NMSyAgICAgICAgICgweGQwMDA4KQorI2RlZmluZSBNRFBfVEVTVF9NSVNSX0NVUlJfVkFMX0NMSyAgICAgICAoMHhkMDAwYykKKyNkZWZpbmUgTURQX1RFU1RfTU9ERV9IQ0xLICAgICAgICAgICAgICAgKDB4ZDAxMDApCisjZGVmaW5lIE1EUF9URVNUX01JU1JfUkVTRVRfSENMSyAgICAgICAgICgweGQwMTA0KQorI2RlZmluZSBNRFBfVEVTVF9FWFBPUlRfTUlTUl9IQ0xLICAgICAgICAoMHhkMDEwOCkKKyNkZWZpbmUgTURQX1RFU1RfTUlTUl9DVVJSX1ZBTF9IQ0xLICAgICAgKDB4ZDAxMGMpCisjZGVmaW5lIE1EUF9URVNUX01PREVfRENMSyAgICAgICAgICAgICAgICgweGQwMjAwKQorI2RlZmluZSBNRFBfVEVTVF9NSVNSX1JFU0VUX0RDTEsgICAgICAgICAoMHhkMDIwNCkKKyNkZWZpbmUgTURQX1RFU1RfRVhQT1JUX01JU1JfRENMSyAgICAgICAgKDB4ZDAyMDgpCisjZGVmaW5lIE1EUF9URVNUX01JU1JfQ1VSUl9WQUxfRENMSyAgICAgICgweGQwMjBjKQorI2RlZmluZSBNRFBfVEVTVF9DQVBUVVJFRF9EQ0xLICAgICAgICAgICAoMHhkMDIxMCkKKyNkZWZpbmUgTURQX1RFU1RfTUlTUl9DQVBUX1ZBTF9EQ0xLICAgICAgKDB4ZDAyMTQpCisjZGVmaW5lIE1EUF9MQ0RDX0NUTCAgICAgICAgICAgICAgICAgICAgICgweGUwMDAwKQorI2RlZmluZSBNRFBfTENEQ19IU1lOQ19DVEwgICAgICAgICAgICAgICAoMHhlMDAwNCkKKyNkZWZpbmUgTURQX0xDRENfVlNZTkNfQ1RMICAgICAgICAgICAgICAgKDB4ZTAwMDgpCisjZGVmaW5lIE1EUF9MQ0RDX0FDVElWRV9IQ1RMICAgICAgICAgICAgICgweGUwMDBjKQorI2RlZmluZSBNRFBfTENEQ19BQ1RJVkVfVkNUTCAgICAgICAgICAgICAoMHhlMDAxMCkKKyNkZWZpbmUgTURQX0xDRENfQk9SREVSX0NMUiAgICAgICAgICAgICAgKDB4ZTAwMTQpCisjZGVmaW5lIE1EUF9MQ0RDX0hfQkxBTksgICAgICAgICAgICAgICAgICgweGUwMDE4KQorI2RlZmluZSBNRFBfTENEQ19WX0JMQU5LICAgICAgICAgICAgICAgICAoMHhlMDAxYykKKyNkZWZpbmUgTURQX0xDRENfVU5ERVJGTE9XX0NMUiAgICAgICAgICAgKDB4ZTAwMjApCisjZGVmaW5lIE1EUF9MQ0RDX0hTWU5DX1NLRVcgICAgICAgICAgICAgICgweGUwMDI0KQorI2RlZmluZSBNRFBfTENEQ19URVNUX0NUTCAgICAgICAgICAgICAgICAoMHhlMDAyOCkKKyNkZWZpbmUgTURQX0xDRENfTElORV9JUlEgICAgICAgICAgICAgICAgKDB4ZTAwMmMpCisjZGVmaW5lIE1EUF9MQ0RDX0NUTF9QT0xBUklUWSAgICAgICAgICAgICgweGUwMDMwKQorI2RlZmluZSBNRFBfTENEQ19ETUFfQ09ORklHICAgICAgICAgICAgICAoMHhlMTAwMCkKKyNkZWZpbmUgTURQX0xDRENfRE1BX1NJWkUgICAgICAgICAgICAgICAgKDB4ZTEwMDQpCisjZGVmaW5lIE1EUF9MQ0RDX0RNQV9JQlVGX0FERFIgICAgICAgICAgICgweGUxMDA4KQorI2RlZmluZSBNRFBfTENEQ19ETUFfSUJVRl9ZX1NUUklERSAgICAgICAoMHhlMTAwYykKKworCisjZGVmaW5lIE1EUF9ETUEyX1RFUk0gMHgxCisjZGVmaW5lIE1EUF9ETUEzX1RFUk0gMHgyCisjZGVmaW5lIE1EUF9QUFBfVEVSTSAweDMKKworLyogTURQX0lOVFJfRU5BQkxFICovCisjZGVmaW5lIERMMF9ST0lfRE9ORSAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIERMMV9ST0lfRE9ORSAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIERMMF9ETUEyX1RFUk1fRE9ORSAgICAgKDE8PDIpCisjZGVmaW5lIERMMV9ETUEyX1RFUk1fRE9ORSAgICAgKDE8PDMpCisjZGVmaW5lIERMMF9QUFBfVEVSTV9ET05FICAgICAgKDE8PDQpCisjZGVmaW5lIERMMV9QUFBfVEVSTV9ET05FICAgICAgKDE8PDUpCisjZGVmaW5lIFRWX09VVF9ETUEzX0RPTkUgICAgICAgKDE8PDYpCisjZGVmaW5lIFRWX0VOQ19VTkRFUlJVTiAgICAgICAgKDE8PDcpCisjZGVmaW5lIERMMF9GRVRDSF9ET05FICAgICAgICAgKDE8PDExKQorI2RlZmluZSBETDFfRkVUQ0hfRE9ORSAgICAgICAgICgxPDwxMikKKworI2RlZmluZSBNRFBfUFBQX0JVU1lfU1RBVFVTIChETDBfUk9JX0RPTkV8IFwKKwkJCSAgIERMMV9ST0lfRE9ORXwgXAorCQkJICAgREwwX1BQUF9URVJNX0RPTkV8IFwKKwkJCSAgIERMMV9QUFBfVEVSTV9ET05FKQorCisjZGVmaW5lIE1EUF9BTllfSU5UUl9NQVNLIChETDBfUk9JX0RPTkV8IFwKKwkJCSAgIERMMV9ST0lfRE9ORXwgXAorCQkJICAgREwwX0RNQTJfVEVSTV9ET05FfCBcCisJCQkgICBETDFfRE1BMl9URVJNX0RPTkV8IFwKKwkJCSAgIERMMF9QUFBfVEVSTV9ET05FfCBcCisJCQkgICBETDFfUFBQX1RFUk1fRE9ORXwgXAorCQkJICAgREwwX0ZFVENIX0RPTkV8IFwKKwkJCSAgIERMMV9GRVRDSF9ET05FfCBcCisJCQkgICBUVl9FTkNfVU5ERVJSVU4pCisKKyNkZWZpbmUgTURQX1RPUF9MVU1BICAgICAgIDE2CisjZGVmaW5lIE1EUF9UT1BfQ0hST01BICAgICAwCisjZGVmaW5lIE1EUF9CT1RUT01fTFVNQSAgICAxOQorI2RlZmluZSBNRFBfQk9UVE9NX0NIUk9NQSAgMworI2RlZmluZSBNRFBfTEVGVF9MVU1BICAgICAgMjIKKyNkZWZpbmUgTURQX0xFRlRfQ0hST01BICAgIDYKKyNkZWZpbmUgTURQX1JJR0hUX0xVTUEgICAgIDI1CisjZGVmaW5lIE1EUF9SSUdIVF9DSFJPTUEgICA5CisKKyNkZWZpbmUgQ0xSX0cgMHgwCisjZGVmaW5lIENMUl9CIDB4MQorI2RlZmluZSBDTFJfUiAweDIKKyNkZWZpbmUgQ0xSX0FMUEhBIDB4MworCisjZGVmaW5lIENMUl9ZICBDTFJfRworI2RlZmluZSBDTFJfQ0IgQ0xSX0IKKyNkZWZpbmUgQ0xSX0NSIENMUl9SCisKKy8qIGZyb20gbHNiIHRvIG1zYiAqLworI2RlZmluZSBNRFBfR0VUX1BBQ0tfUEFUVEVSTihhLCB4LCB5LCB6LCBiaXQpIFwKKwkoKChhKTw8KGJpdCozKSl8KCh4KTw8KGJpdCoyKSl8KCh5KTw8Yml0KXwoeikpCisKKy8qIE1EUF9TWU5DX0NPTkZJR18wLzEvMiAqLworI2RlZmluZSBNRFBfU1lOQ0ZHX0hHVF9MT0MgMjIKKyNkZWZpbmUgTURQX1NZTkNGR19WU1lOQ19FWFRfRU4gKDE8PDIxKQorI2RlZmluZSBNRFBfU1lOQ0ZHX1ZTWU5DX0lOVF9FTiAoMTw8MjApCisKKy8qIE1EUF9TWU5DX1RIUkVTSF8wICovCisjZGVmaW5lIE1EUF9QUklNX0JFTE9XX0xPQyAwCisjZGVmaW5lIE1EUF9QUklNX0FCT1ZFX0xPQyA4CisKKy8qIE1EUF97UFJJTUFSWSxTRUNPTkRBUlksRVhURVJOQUx9X1ZTWU5DX09VVF9DUkwgKi8KKyNkZWZpbmUgVlNZTkNfUFVMU0VfRU4gKDE8PDMxKQorI2RlZmluZSBWU1lOQ19QVUxTRV9JTlYgKDE8PDMwKQorCisvKiBNRFBfVlNZTkNfQ1RSTCAqLworI2RlZmluZSBESVNQMF9WU1lOQ19NQVBfVlNZTkMwIDAKKyNkZWZpbmUgRElTUDBfVlNZTkNfTUFQX1ZTWU5DMSAoMTw8MCkKKyNkZWZpbmUgRElTUDBfVlNZTkNfTUFQX1ZTWU5DMiAoKDE8PDApfCgxPDwxKSkKKworI2RlZmluZSBESVNQMV9WU1lOQ19NQVBfVlNZTkMwIDAKKyNkZWZpbmUgRElTUDFfVlNZTkNfTUFQX1ZTWU5DMSAoMTw8MikKKyNkZWZpbmUgRElTUDFfVlNZTkNfTUFQX1ZTWU5DMiAoKDE8PDIpfCgxPDwzKSkKKworI2RlZmluZSBQUklNQVJZX0xDRF9TWU5DX0VOICgxPDw0KQorI2RlZmluZSBQUklNQVJZX0xDRF9TWU5DX0RJU0FCTEUgMAorCisjZGVmaW5lIFNFQ09OREFSWV9MQ0RfU1lOQ19FTiAoMTw8NSkKKyNkZWZpbmUgU0VDT05EQVJZX0xDRF9TWU5DX0RJU0FCTEUgMAorCisjZGVmaW5lIEVYVEVSTkFMX0xDRF9TWU5DX0VOICgxPDw2KQorI2RlZmluZSBFWFRFUk5BTF9MQ0RfU1lOQ19ESVNBQkxFIDAKKworLyogTURQX1ZTWU5DX1RIUkVTSE9MRCAvIE1EUF9GVUxMX0JZUEFTU19XT1JENjAgKi8KKyNkZWZpbmUgVlNZTkNfVEhSRVNIT0xEX0FCT1ZFX0xPQyAwCisjZGVmaW5lIFZTWU5DX1RIUkVTSE9MRF9CRUxPV19MT0MgMTYKKyNkZWZpbmUgVlNZTkNfQU5USV9URUFSX0VOICgxPDwzMSkKKworLyogTURQX0NPTU1BTkRfQ09ORklHIC8gTURQX0ZVTExfQllQQVNTX1dPUkQxICovCisjZGVmaW5lIE1EUF9DTURfREJHQlVTX0VOICgxPDwwKQorCisvKiBNRFBfUFBQX1NPVVJDRV9DT05GSUcgLyBNRFBfRlVMTF9CWVBBU1NfV09SRDkmNTMgKi8KKyNkZWZpbmUgUFBQX1NSQ19DMEdfOEJJVCAoKDE8PDEpfCgxPDwwKSkKKyNkZWZpbmUgUFBQX1NSQ19DMUJfOEJJVCAoKDE8PDMpfCgxPDwyKSkKKyNkZWZpbmUgUFBQX1NSQ19DMlJfOEJJVCAoKDE8PDUpfCgxPDw0KSkKKyNkZWZpbmUgUFBQX1NSQ19DM0FfOEJJVCAoKDE8PDcpfCgxPDw2KSkKKworI2RlZmluZSBQUFBfU1JDX0MwR182QklUICgxPDwxKQorI2RlZmluZSBQUFBfU1JDX0MxQl82QklUICgxPDwzKQorI2RlZmluZSBQUFBfU1JDX0MyUl82QklUICgxPDw1KQorCisjZGVmaW5lIFBQUF9TUkNfQzBHXzVCSVQgKDE8PDApCisjZGVmaW5lIFBQUF9TUkNfQzFCXzVCSVQgKDE8PDIpCisjZGVmaW5lIFBQUF9TUkNfQzJSXzVCSVQgKDE8PDQpCisKKyNkZWZpbmUgUFBQX1NSQ19DM0FMUEhBX0VOICgxPDw4KQorCisjZGVmaW5lIFBQUF9TUkNfQlBQXzFCWVRFUyAwCisjZGVmaW5lIFBQUF9TUkNfQlBQXzJCWVRFUyAoMTw8OSkKKyNkZWZpbmUgUFBQX1NSQ19CUFBfM0JZVEVTICgxPDwxMCkKKyNkZWZpbmUgUFBQX1NSQ19CUFBfNEJZVEVTICgoMTw8MTApfCgxPDw5KSkKKworI2RlZmluZSBQUFBfU1JDX0JQUF9ST0lfT0REX1ggKDE8PDExKQorI2RlZmluZSBQUFBfU1JDX0JQUF9ST0lfT0REX1kgKDE8PDEyKQorI2RlZmluZSBQUFBfU1JDX0lOVEVSTFZEXzJDT01QT05FTlRTICgxPDwxMykKKyNkZWZpbmUgUFBQX1NSQ19JTlRFUkxWRF8zQ09NUE9ORU5UUyAoMTw8MTQpCisjZGVmaW5lIFBQUF9TUkNfSU5URVJMVkRfNENPTVBPTkVOVFMgKCgxPDwxNCl8KDE8PDEzKSkKKworCisvKiBSR0I2NjYgdW5wYWNrIGZvcm1hdAorKiogVElHSFQgbWVhbnMgUjYrRzYrQjYgdG9nZXRoZXIKKyoqIExPT1NFIG1lYW5zIFI2KzIgK0c2KzIrIEI2KzIgKHdpdGggTVNCKQorKiogICAgICAgICAgb3IgMitSNiArMitHNiArMitCNiAod2l0aCBMU0IpCisqLworI2RlZmluZSBQUFBfU1JDX1BBQ0tfVElHSFQgKDE8PDE3KQorI2RlZmluZSBQUFBfU1JDX1BBQ0tfTE9PU0UgMAorI2RlZmluZSBQUFBfU1JDX1BBQ0tfQUxJR05fTFNCIDAKKyNkZWZpbmUgUFBQX1NSQ19QQUNLX0FMSUdOX01TQiAoMTw8MTgpCisKKyNkZWZpbmUgUFBQX1NSQ19QTEFORV9JTlRFUkxWRCAwCisjZGVmaW5lIFBQUF9TUkNfUExBTkVfUFNFVURPUExOUiAoMTw8MjApCisKKyNkZWZpbmUgUFBQX1NSQ19XTVY5X01PREUgKDE8PDIxKQorCisvKiBNRFBfUFBQX09QRVJBVElPTl9DT05GSUcgLyBNRFBfRlVMTF9CWVBBU1NfV09SRDE0ICovCisjZGVmaW5lIFBQUF9PUF9TQ0FMRV9YX09OICgxPDwwKQorI2RlZmluZSBQUFBfT1BfU0NBTEVfWV9PTiAoMTw8MSkKKworI2RlZmluZSBQUFBfT1BfQ09OVkVSVF9SR0IyWUNCQ1IgMAorI2RlZmluZSBQUFBfT1BfQ09OVkVSVF9ZQ0JDUjJSR0IgKDE8PDIpCisjZGVmaW5lIFBQUF9PUF9DT05WRVJUX09OICgxPDwzKQorCisjZGVmaW5lIFBQUF9PUF9DT05WRVJUX01BVFJJWF9QUklNQVJZIDAKKyNkZWZpbmUgUFBQX09QX0NPTlZFUlRfTUFUUklYX1NFQ09OREFSWSAoMTw8NCkKKworI2RlZmluZSBQUFBfT1BfTFVUX0MwX09OICgxPDw1KQorI2RlZmluZSBQUFBfT1BfTFVUX0MxX09OICgxPDw2KQorI2RlZmluZSBQUFBfT1BfTFVUX0MyX09OICgxPDw3KQorCisvKiByb3RhdGUgb3IgYmxlbmQgZW5hYmxlICovCisjZGVmaW5lIFBQUF9PUF9ST1RfT04gKDE8PDgpCisKKyNkZWZpbmUgUFBQX09QX1JPVF85MCAoMTw8OSkKKyNkZWZpbmUgUFBQX09QX0ZMSVBfTFIgKDE8PDEwKQorI2RlZmluZSBQUFBfT1BfRkxJUF9VRCAoMTw8MTEpCisKKyNkZWZpbmUgUFBQX09QX0JMRU5EX09OICgxPDwxMikKKworI2RlZmluZSBQUFBfT1BfQkxFTkRfU1JDUElYRUxfQUxQSEEgMAorI2RlZmluZSBQUFBfT1BfQkxFTkRfRFNUUElYRUxfQUxQSEEgKDE8PDEzKQorI2RlZmluZSBQUFBfT1BfQkxFTkRfQ09OU1RBTlRfQUxQSEEgKDE8PDE0KQorI2RlZmluZSBQUFBfT1BfQkxFTkRfU1JDUElYRUxfVFJBTlNQICgoMTw8MTMpfCgxPDwxNCkpCisKKyNkZWZpbmUgUFBQX09QX0JMRU5EX0FMUEhBX0JMRU5EX05PUk1BTCAwCisjZGVmaW5lIFBQUF9PUF9CTEVORF9BTFBIQV9CTEVORF9SRVZFUlNFICgxPDwxNSkKKworI2RlZmluZSBQUFBfT1BfRElUSEVSX0VOICgxPDwxNikKKworI2RlZmluZSBQUFBfT1BfQ09MT1JfU1BBQ0VfUkdCIDAKKyNkZWZpbmUgUFBQX09QX0NPTE9SX1NQQUNFX1lDQkNSICgxPDwxNykKKworI2RlZmluZSBQUFBfT1BfU1JDX0NIUk9NQV9SR0IgMAorI2RlZmluZSBQUFBfT1BfU1JDX0NIUk9NQV9IMlYxICgxPDwxOCkKKyNkZWZpbmUgUFBQX09QX1NSQ19DSFJPTUFfSDFWMiAoMTw8MTkpCisjZGVmaW5lIFBQUF9PUF9TUkNfQ0hST01BXzQyMCAoKDE8PDE4KXwoMTw8MTkpKQorI2RlZmluZSBQUFBfT1BfU1JDX0NIUk9NQV9DT1NJVEUgMAorI2RlZmluZSBQUFBfT1BfU1JDX0NIUk9NQV9PRkZTSVRFICgxPDwyMCkKKworI2RlZmluZSBQUFBfT1BfRFNUX0NIUk9NQV9SR0IgMAorI2RlZmluZSBQUFBfT1BfRFNUX0NIUk9NQV9IMlYxICgxPDwyMSkKKyNkZWZpbmUgUFBQX09QX0RTVF9DSFJPTUFfSDFWMiAoMTw8MjIpCisjZGVmaW5lIFBQUF9PUF9EU1RfQ0hST01BXzQyMCAoKDE8PDIxKXwoMTw8MjIpKQorI2RlZmluZSBQUFBfT1BfRFNUX0NIUk9NQV9DT1NJVEUgMAorI2RlZmluZSBQUFBfT1BfRFNUX0NIUk9NQV9PRkZTSVRFICgxPDwyMykKKworI2RlZmluZSBQUFBfQkxFTkRfQUxQSEFfVFJBTlNQICgxPDwyNCkKKworI2RlZmluZSBQUFBfT1BfQkdfQ0hST01BX1JHQiAwCisjZGVmaW5lIFBQUF9PUF9CR19DSFJPTUFfSDJWMSAoMTw8MjUpCisjZGVmaW5lIFBQUF9PUF9CR19DSFJPTUFfSDFWMiAoMTw8MjYpCisjZGVmaW5lIFBQUF9PUF9CR19DSFJPTUFfNDIwICgoMTw8MjUpfCgxPDwyNikpCisjZGVmaW5lIFBQUF9PUF9CR19DSFJPTUFfU0lURV9DT1NJVEUgMAorI2RlZmluZSBQUFBfT1BfQkdfQ0hST01BX1NJVEVfT0ZGU0lURSAoMTw8MjcpCisKKy8qIE1EUF9QUFBfREVTVElOQVRJT05fQ09ORklHIC8gTURQX0ZVTExfQllQQVNTX1dPUkQyMCAqLworI2RlZmluZSBQUFBfRFNUX0MwR184QklUICgoMTw8MCl8KDE8PDEpKQorI2RlZmluZSBQUFBfRFNUX0MxQl84QklUICgoMTw8Myl8KDE8PDIpKQorI2RlZmluZSBQUFBfRFNUX0MyUl84QklUICgoMTw8NSl8KDE8PDQpKQorI2RlZmluZSBQUFBfRFNUX0MzQV84QklUICgoMTw8Nyl8KDE8PDYpKQorCisjZGVmaW5lIFBQUF9EU1RfQzBHXzZCSVQgKDE8PDEpCisjZGVmaW5lIFBQUF9EU1RfQzFCXzZCSVQgKDE8PDMpCisjZGVmaW5lIFBQUF9EU1RfQzJSXzZCSVQgKDE8PDUpCisKKyNkZWZpbmUgUFBQX0RTVF9DMEdfNUJJVCAoMTw8MCkKKyNkZWZpbmUgUFBQX0RTVF9DMUJfNUJJVCAoMTw8MikKKyNkZWZpbmUgUFBQX0RTVF9DMlJfNUJJVCAoMTw8NCkKKworI2RlZmluZSBQUFBfRFNUX0MzQV84QklUICgoMTw8Nyl8KDE8PDYpKQorI2RlZmluZSBQUFBfRFNUX0MzQUxQSEFfRU4gKDE8PDgpCisKKyNkZWZpbmUgUFBQX0RTVF9JTlRFUkxWRF8yQ09NUE9ORU5UUyAoMTw8OSkKKyNkZWZpbmUgUFBQX0RTVF9JTlRFUkxWRF8zQ09NUE9ORU5UUyAoMTw8MTApCisjZGVmaW5lIFBQUF9EU1RfSU5URVJMVkRfNENPTVBPTkVOVFMgKCgxPDwxMCl8KDE8PDkpKQorI2RlZmluZSBQUFBfRFNUX0lOVEVSTFZEXzZDT01QT05FTlRTICgoMTw8MTEpfCgxPDw5KSkKKworI2RlZmluZSBQUFBfRFNUX1BBQ0tfTE9PU0UgMAorI2RlZmluZSBQUFBfRFNUX1BBQ0tfVElHSFQgKDE8PDEzKQorI2RlZmluZSBQUFBfRFNUX1BBQ0tfQUxJR05fTFNCIDAKKyNkZWZpbmUgUFBQX0RTVF9QQUNLX0FMSUdOX01TQiAoMTw8MTQpCisKKyNkZWZpbmUgUFBQX0RTVF9PVVRfU0VMX0FYSSAwCisjZGVmaW5lIFBQUF9EU1RfT1VUX1NFTF9NRERJICgxPDwxNSkKKworI2RlZmluZSBQUFBfRFNUX0JQUF8yQllURVMgKDE8PDE2KQorI2RlZmluZSBQUFBfRFNUX0JQUF8zQllURVMgKDE8PDE3KQorI2RlZmluZSBQUFBfRFNUX0JQUF80QllURVMgKCgxPDwxNyl8KDE8PDE2KSkKKworI2RlZmluZSBQUFBfRFNUX1BMQU5FX0lOVEVSTFZEIDAKKyNkZWZpbmUgUFBQX0RTVF9QTEFORV9QTEFOQVIgKDE8PDE4KQorI2RlZmluZSBQUFBfRFNUX1BMQU5FX1BTRVVET1BMTlIgKDE8PDE5KQorCisjZGVmaW5lIFBQUF9EU1RfVE9fVFYgKDE8PDIwKQorCisjZGVmaW5lIFBQUF9EU1RfTURESV9QUklNQVJZIDAKKyNkZWZpbmUgUFBQX0RTVF9NRERJX1NFQ09OREFSWSAoMTw8MjEpCisjZGVmaW5lIFBQUF9EU1RfTURESV9FWFRFUk5BTCAoMTw8MjIpCisKKy8qIGltYWdlIGNvbmZpZ3VyYXRpb25zIGJ5IGltYWdlIHR5cGUgKi8KKyNkZWZpbmUgUFBQX0NGR19NRFBfUkdCXzU2NShkaXIpICAgICAgIChQUFBfIyNkaXIjI19DMlJfNUJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzBHXzZCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MxQl81QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19CUFBfMkJZVEVTIHwgXAorCQkJCQlQUFBfIyNkaXIjI19JTlRFUkxWRF8zQ09NUE9ORU5UUyB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19USUdIVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19BTElHTl9MU0IgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BMQU5FX0lOVEVSTFZEKQorCisjZGVmaW5lIFBQUF9DRkdfTURQX1JHQl84ODgoZGlyKSAgICAgICAoUFBQXyMjZGlyIyNfQzJSXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MwR184QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMUJfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQlBQXzNCWVRFUyB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfSU5URVJMVkRfM0NPTVBPTkVOVFMgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfVElHSFQgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfQUxJR05fTFNCIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QTEFORV9JTlRFUkxWRCkKKworI2RlZmluZSBQUFBfQ0ZHX01EUF9BUkdCXzg4ODgoZGlyKSAgICAgKFBQUF8jI2RpciMjX0MyUl84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMEdfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzFCXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MzQV84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DM0FMUEhBX0VOIHwgXAorCQkJCQlQUFBfIyNkaXIjI19CUFBfNEJZVEVTIHwgXAorCQkJCQlQUFBfIyNkaXIjI19JTlRFUkxWRF80Q09NUE9ORU5UUyB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19USUdIVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19BTElHTl9MU0IgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BMQU5FX0lOVEVSTFZEKQorCisjZGVmaW5lIFBQUF9DRkdfTURQX1hSR0JfODg4OChkaXIpIFBQUF9DRkdfTURQX0FSR0JfODg4OChkaXIpCisjZGVmaW5lIFBQUF9DRkdfTURQX1JHQkFfODg4OChkaXIpIFBQUF9DRkdfTURQX0FSR0JfODg4OChkaXIpCisjZGVmaW5lIFBQUF9DRkdfTURQX0JHUkFfODg4OChkaXIpIFBQUF9DRkdfTURQX0FSR0JfODg4OChkaXIpCisKKyNkZWZpbmUgUFBQX0NGR19NRFBfWV9DQkNSX0gyVjIoZGlyKSAgIChQUFBfIyNkaXIjI19DMlJfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzBHXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MxQl84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DM0FfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQlBQXzJCWVRFUyB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfSU5URVJMVkRfMkNPTVBPTkVOVFMgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfVElHSFQgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BBQ0tfQUxJR05fTFNCIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QTEFORV9QU0VVRE9QTE5SKQorCisjZGVmaW5lIFBQUF9DRkdfTURQX1lfQ1JDQl9IMlYyKGRpcikJUFBQX0NGR19NRFBfWV9DQkNSX0gyVjIoZGlyKQorCisjZGVmaW5lIFBQUF9DRkdfTURQX1lDUllDQl9IMlYxKGRpcikgICAoUFBQXyMjZGlyIyNfQzJSXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MwR184QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMUJfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzNBXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0JQUF8yQllURVMgfCBcCisJCQkJCVBQUF8jI2RpciMjX0lOVEVSTFZEXzRDT01QT05FTlRTIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QQUNLX1RJR0hUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19QQUNLX0FMSUdOX0xTQiB8XAorCQkJCQlQUFBfIyNkaXIjI19QTEFORV9JTlRFUkxWRCkKKworI2RlZmluZSBQUFBfQ0ZHX01EUF9ZX0NCQ1JfSDJWMShkaXIpICAgKFBQUF8jI2RpciMjX0MyUl84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19DMEdfOEJJVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfQzFCXzhCSVQgfCBcCisJCQkJCVBQUF8jI2RpciMjX0MzQV84QklUIHwgXAorCQkJCQlQUFBfIyNkaXIjI19CUFBfMkJZVEVTIHwgICBcCisJCQkJCVBQUF8jI2RpciMjX0lOVEVSTFZEXzJDT01QT05FTlRTIHwgIFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19USUdIVCB8IFwKKwkJCQkJUFBQXyMjZGlyIyNfUEFDS19BTElHTl9MU0IgfCBcCisJCQkJCVBQUF8jI2RpciMjX1BMQU5FX1BTRVVET1BMTlIpCisKKyNkZWZpbmUgUFBQX0NGR19NRFBfWV9DUkNCX0gyVjEoZGlyKQlQUFBfQ0ZHX01EUF9ZX0NCQ1JfSDJWMShkaXIpCisKKyNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfUkdCXzU2NSBcCisJTURQX0dFVF9QQUNLX1BBVFRFUk4oMCwgQ0xSX1IsIENMUl9HLCBDTFJfQiwgOCkKKyNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfUkdCXzg4OCBQUFBfUEFDS19QQVRURVJOX01EUF9SR0JfNTY1CisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1hSR0JfODg4OCBcCisJTURQX0dFVF9QQUNLX1BBVFRFUk4oQ0xSX0FMUEhBLCBDTFJfUiwgQ0xSX0csIENMUl9CLCA4KQorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9BUkdCXzg4ODggUFBQX1BBQ0tfUEFUVEVSTl9NRFBfWFJHQl84ODg4CisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1JHQkFfODg4OCBcCisJTURQX0dFVF9QQUNLX1BBVFRFUk4oQ0xSX0FMUEhBLCBDTFJfQiwgQ0xSX0csIENMUl9SLCA4KQorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9CR1JBXzg4ODggXAorCU1EUF9HRVRfUEFDS19QQVRURVJOKENMUl9BTFBIQSwgQ0xSX1IsIENMUl9HLCBDTFJfQiwgOCkKKyNkZWZpbmUgUFBQX1BBQ0tfUEFUVEVSTl9NRFBfWV9DQkNSX0gyVjEgXAorCU1EUF9HRVRfUEFDS19QQVRURVJOKDAsIDAsIENMUl9DQiwgQ0xSX0NSLCA4KQorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9ZX0NCQ1JfSDJWMiBQUFBfUEFDS19QQVRURVJOX01EUF9ZX0NCQ1JfSDJWMQorI2RlZmluZSBQUFBfUEFDS19QQVRURVJOX01EUF9ZX0NSQ0JfSDJWMSBcCisJTURQX0dFVF9QQUNLX1BBVFRFUk4oMCwgMCwgQ0xSX0NSLCBDTFJfQ0IsIDgpCisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1lfQ1JDQl9IMlYyIFBQUF9QQUNLX1BBVFRFUk5fTURQX1lfQ1JDQl9IMlYxCisjZGVmaW5lIFBQUF9QQUNLX1BBVFRFUk5fTURQX1lDUllDQl9IMlYxIFwKKwlNRFBfR0VUX1BBQ0tfUEFUVEVSTihDTFJfWSwgQ0xSX1IsIENMUl9ZLCBDTFJfQiwgOCkKKworI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1JHQl81NjUoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfUkdCCisjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfUkdCXzg4OChkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV9SR0IKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9YUkdCXzg4ODgoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfUkdCCisjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfQVJHQl84ODg4KGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX1JHQgorI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1JHQkFfODg4OChkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV9SR0IKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9CR1JBXzg4ODgoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfUkdCCisjZGVmaW5lIFBQUF9DSFJPTUFfU0FNUF9NRFBfWV9DQkNSX0gyVjEoZGlyKSBQUFBfT1BfIyNkaXIjI19DSFJPTUFfSDJWMQorI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1lfQ0JDUl9IMlYyKGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BXzQyMAorI2RlZmluZSBQUFBfQ0hST01BX1NBTVBfTURQX1lfQ1JDQl9IMlYxKGRpcikgUFBQX09QXyMjZGlyIyNfQ0hST01BX0gyVjEKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9ZX0NSQ0JfSDJWMihkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV80MjAKKyNkZWZpbmUgUFBQX0NIUk9NQV9TQU1QX01EUF9ZQ1JZQ0JfSDJWMShkaXIpIFBQUF9PUF8jI2RpciMjX0NIUk9NQV9IMlYxCisKKy8qIEhlbHBmdWwgYXJyYXkgZ2VuZXJhdGlvbiBtYWNyb3MgKi8KKyNkZWZpbmUgUFBQX0FSUkFZMChuYW1lKSBcCisJW01EUF9SR0JfNTY1XSA9IFBQUF8jI25hbWUjI19NRFBfUkdCXzU2NSxcCisJW01EUF9SR0JfODg4XSA9IFBQUF8jI25hbWUjI19NRFBfUkdCXzg4OCxcCisJW01EUF9YUkdCXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9YUkdCXzg4ODgsXAorCVtNRFBfQVJHQl84ODg4XSA9IFBQUF8jI25hbWUjI19NRFBfQVJHQl84ODg4LFwKKwlbTURQX1JHQkFfODg4OF0gPSBQUFBfIyNuYW1lIyNfTURQX1JHQkFfODg4OCxcCisJW01EUF9CR1JBXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9CR1JBXzg4ODgsXAorCVtNRFBfWV9DQkNSX0gyVjFdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NCQ1JfSDJWMSxcCisJW01EUF9ZX0NCQ1JfSDJWMl0gPSBQUFBfIyNuYW1lIyNfTURQX1lfQ0JDUl9IMlYyLFwKKwlbTURQX1lfQ1JDQl9IMlYxXSA9IFBQUF8jI25hbWUjI19NRFBfWV9DUkNCX0gyVjEsXAorCVtNRFBfWV9DUkNCX0gyVjJdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NSQ0JfSDJWMixcCisJW01EUF9ZQ1JZQ0JfSDJWMV0gPSBQUFBfIyNuYW1lIyNfTURQX1lDUllDQl9IMlYxCisKKyNkZWZpbmUgUFBQX0FSUkFZMShuYW1lLCBkaXIpIFwKKwlbTURQX1JHQl81NjVdID0gUFBQXyMjbmFtZSMjX01EUF9SR0JfNTY1KGRpciksXAorCVtNRFBfUkdCXzg4OF0gPSBQUFBfIyNuYW1lIyNfTURQX1JHQl84ODgoZGlyKSxcCisJW01EUF9YUkdCXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9YUkdCXzg4ODgoZGlyKSxcCisJW01EUF9BUkdCXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9BUkdCXzg4ODgoZGlyKSxcCisJW01EUF9SR0JBXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9SR0JBXzg4ODgoZGlyKSxcCisJW01EUF9CR1JBXzg4ODhdID0gUFBQXyMjbmFtZSMjX01EUF9CR1JBXzg4ODgoZGlyKSxcCisJW01EUF9ZX0NCQ1JfSDJWMV0gPSBQUFBfIyNuYW1lIyNfTURQX1lfQ0JDUl9IMlYxKGRpciksXAorCVtNRFBfWV9DQkNSX0gyVjJdID0gUFBQXyMjbmFtZSMjX01EUF9ZX0NCQ1JfSDJWMihkaXIpLFwKKwlbTURQX1lfQ1JDQl9IMlYxXSA9IFBQUF8jI25hbWUjI19NRFBfWV9DUkNCX0gyVjEoZGlyKSxcCisJW01EUF9ZX0NSQ0JfSDJWMl0gPSBQUFBfIyNuYW1lIyNfTURQX1lfQ1JDQl9IMlYyKGRpciksXAorCVtNRFBfWUNSWUNCX0gyVjFdID0gUFBQXyMjbmFtZSMjX01EUF9ZQ1JZQ0JfSDJWMShkaXIpCisKKyNkZWZpbmUgSVNfWUNSQ0IoaW1nKSAoKGltZyA9PSBNRFBfWV9DUkNCX0gyVjIpIHwgKGltZyA9PSBNRFBfWV9DQkNSX0gyVjIpIHwgXAorCQkgICAgICAgKGltZyA9PSBNRFBfWV9DUkNCX0gyVjEpIHwgKGltZyA9PSBNRFBfWV9DQkNSX0gyVjEpIHwgXAorCQkgICAgICAgKGltZyA9PSBNRFBfWUNSWUNCX0gyVjEpKQorI2RlZmluZSBJU19SR0IoaW1nKSAoKGltZyA9PSBNRFBfUkdCXzU2NSkgfCAoaW1nID09IE1EUF9SR0JfODg4KSB8IFwKKwkJICAgICAoaW1nID09IE1EUF9BUkdCXzg4ODgpIHwgKGltZyA9PSBNRFBfUkdCQV84ODg4KSB8IFwKKwkJICAgICAoaW1nID09IE1EUF9YUkdCXzg4ODgpIHwgKGltZyA9PSBNRFBfQkdSQV84ODg4KSkKKyNkZWZpbmUgSEFTX0FMUEhBKGltZykgKChpbWcgPT0gTURQX0FSR0JfODg4OCkgfCAoaW1nID09IE1EUF9SR0JBXzg4ODgpIHwgXAorCQkJKGltZyA9PSBNRFBfQkdSQV84ODg4KSkKKworI2RlZmluZSBJU19QU0VVRE9QTE5SKGltZykgKChpbWcgPT0gTURQX1lfQ1JDQl9IMlYyKSB8IFwKKwkJCSAgICAoaW1nID09IE1EUF9ZX0NCQ1JfSDJWMikgfCBcCisJCQkgICAgKGltZyA9PSBNRFBfWV9DUkNCX0gyVjEpIHwgXAorCQkJICAgIChpbWcgPT0gTURQX1lfQ0JDUl9IMlYxKSkKKworLyogTWFwcGluZ3MgZnJvbSBhZGRyIHRvIHB1cnBvc2UgKi8KKyNkZWZpbmUgUFBQX0FERFJfU1JDX1JPSQkJTURQX0ZVTExfQllQQVNTX1dPUkQyCisjZGVmaW5lIFBQUF9BRERSX1NSQzAJCQlNRFBfRlVMTF9CWVBBU1NfV09SRDMKKyNkZWZpbmUgUFBQX0FERFJfU1JDMQkJCU1EUF9GVUxMX0JZUEFTU19XT1JENAorI2RlZmluZSBQUFBfQUREUl9TUkNfWVNUUklERQkJTURQX0ZVTExfQllQQVNTX1dPUkQ3CisjZGVmaW5lIFBQUF9BRERSX1NSQ19DRkcJCU1EUF9GVUxMX0JZUEFTU19XT1JEOQorI2RlZmluZSBQUFBfQUREUl9TUkNfUEFDS19QQVRURVJOCU1EUF9GVUxMX0JZUEFTU19XT1JEMTAKKyNkZWZpbmUgUFBQX0FERFJfT1BFUkFUSU9OCQlNRFBfRlVMTF9CWVBBU1NfV09SRDE0CisjZGVmaW5lIFBQUF9BRERSX1BIQVNFWF9JTklUCQlNRFBfRlVMTF9CWVBBU1NfV09SRDE1CisjZGVmaW5lIFBQUF9BRERSX1BIQVNFWV9JTklUCQlNRFBfRlVMTF9CWVBBU1NfV09SRDE2CisjZGVmaW5lIFBQUF9BRERSX1BIQVNFWF9TVEVQCQlNRFBfRlVMTF9CWVBBU1NfV09SRDE3CisjZGVmaW5lIFBQUF9BRERSX1BIQVNFWV9TVEVQCQlNRFBfRlVMTF9CWVBBU1NfV09SRDE4CisjZGVmaW5lIFBQUF9BRERSX0FMUEhBX1RSQU5TUAkJTURQX0ZVTExfQllQQVNTX1dPUkQxOQorI2RlZmluZSBQUFBfQUREUl9EU1RfQ0ZHCQlNRFBfRlVMTF9CWVBBU1NfV09SRDIwCisjZGVmaW5lIFBQUF9BRERSX0RTVF9QQUNLX1BBVFRFUk4JTURQX0ZVTExfQllQQVNTX1dPUkQyMQorI2RlZmluZSBQUFBfQUREUl9EU1RfUk9JCQlNRFBfRlVMTF9CWVBBU1NfV09SRDI1CisjZGVmaW5lIFBQUF9BRERSX0RTVDAJCQlNRFBfRlVMTF9CWVBBU1NfV09SRDI2CisjZGVmaW5lIFBQUF9BRERSX0RTVDEJCQlNRFBfRlVMTF9CWVBBU1NfV09SRDI3CisjZGVmaW5lIFBQUF9BRERSX0RTVF9ZU1RSSURFCQlNRFBfRlVMTF9CWVBBU1NfV09SRDMwCisjZGVmaW5lIFBQUF9BRERSX0VER0UJCQlNRFBfRlVMTF9CWVBBU1NfV09SRDQ2CisjZGVmaW5lIFBQUF9BRERSX0JHMAkJCU1EUF9GVUxMX0JZUEFTU19XT1JENDgKKyNkZWZpbmUgUFBQX0FERFJfQkcxCQkJTURQX0ZVTExfQllQQVNTX1dPUkQ0OQorI2RlZmluZSBQUFBfQUREUl9CR19ZU1RSSURFCQlNRFBfRlVMTF9CWVBBU1NfV09SRDUxCisjZGVmaW5lIFBQUF9BRERSX0JHX0NGRwkJCU1EUF9GVUxMX0JZUEFTU19XT1JENTMKKyNkZWZpbmUgUFBQX0FERFJfQkdfUEFDS19QQVRURVJOCU1EUF9GVUxMX0JZUEFTU19XT1JENTQKKworLyogTURQX0RNQV9DT05GSUcgLyBNRFBfRlVMTF9CWVBBU1NfV09SRDMyICovCisjZGVmaW5lIERNQV9EU1RDMEdfNkJJVFMgKDE8PDEpCisjZGVmaW5lIERNQV9EU1RDMUJfNkJJVFMgKDE8PDMpCisjZGVmaW5lIERNQV9EU1RDMlJfNkJJVFMgKDE8PDUpCisjZGVmaW5lIERNQV9EU1RDMEdfNUJJVFMgKDE8PDApCisjZGVmaW5lIERNQV9EU1RDMUJfNUJJVFMgKDE8PDIpCisjZGVmaW5lIERNQV9EU1RDMlJfNUJJVFMgKDE8PDQpCisKKyNkZWZpbmUgRE1BX1BBQ0tfVElHSFQgKDE8PDYpCisjZGVmaW5lIERNQV9QQUNLX0xPT1NFIDAKKyNkZWZpbmUgRE1BX1BBQ0tfQUxJR05fTFNCIDAKKyNkZWZpbmUgRE1BX1BBQ0tfQUxJR05fTVNCICgxPDw3KQorI2RlZmluZSBETUFfUEFDS19QQVRURVJOX1JHQiBcCisJKE1EUF9HRVRfUEFDS19QQVRURVJOKDAsIENMUl9SLCBDTFJfRywgQ0xSX0IsIDIpPDw4KQorCisjZGVmaW5lIERNQV9PVVRfU0VMX0FIQiAgMAorI2RlZmluZSBETUFfT1VUX1NFTF9NRERJICgxPDwxNCkKKyNkZWZpbmUgRE1BX0FIQk1fTENEX1NFTF9QUklNQVJZIDAKKyNkZWZpbmUgRE1BX0FIQk1fTENEX1NFTF9TRUNPTkRBUlkgKDE8PDE1KQorI2RlZmluZSBETUFfSUJVRl9DM0FMUEhBX0VOICgxPDwxNikKKyNkZWZpbmUgRE1BX0RJVEhFUl9FTiAoMTw8MTcpCisKKyNkZWZpbmUgRE1BX01ERElfRE1BT1VUX0xDRF9TRUxfUFJJTUFSWSAwCisjZGVmaW5lIERNQV9NRERJX0RNQU9VVF9MQ0RfU0VMX1NFQ09OREFSWSAoMTw8MTgpCisjZGVmaW5lIERNQV9NRERJX0RNQU9VVF9MQ0RfU0VMX0VYVEVSTkFMICgxPDwxOSkKKworI2RlZmluZSBETUFfSUJVRl9GT1JNQVRfUkdCNTY1ICgxPDwyMCkKKyNkZWZpbmUgRE1BX0lCVUZfRk9STUFUX1JHQjg4OF9PUl9BUkdCODg4OCAwCisKKyNkZWZpbmUgRE1BX0lCVUZfTk9OQ09OVElHVU9VUyAoMTw8MjEpCisKKy8qIE1EREkgUkVHSVNURVIgPyAqLworI2RlZmluZSBNRERJX1ZET19QQUNLRVRfREVTQyAgMHg1NjY2CisjZGVmaW5lIE1ERElfVkRPX1BBQ0tFVF9QUklNICAweEMzCisjZGVmaW5lIE1ERElfVkRPX1BBQ0tFVF9TRUNEICAweEMwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMmM0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKQEAgLTAsMCArMSw3NTAgQEAKKy8qIGRyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXNtX21kcC5oPgorI2luY2x1ZGUgPGxpbnV4L2FuZHJvaWRfcG1lbS5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CisKKyNpbmNsdWRlICJtZHBfaHcuaCIKKyNpbmNsdWRlICJtZHBfc2NhbGVfdGFibGVzLmgiCisKKyNkZWZpbmUgRExPRyh4Li4uKSBkbyB7fSB3aGlsZSAoMCkKKworI2RlZmluZSBNRFBfRE9XTlNDQUxFX0JMVVIgKE1EUF9ET1dOU0NBTEVfTUFYICsgMSkKK3N0YXRpYyBpbnQgZG93bnNjYWxlX3lfdGFibGUgPSBNRFBfRE9XTlNDQUxFX01BWDsKK3N0YXRpYyBpbnQgZG93bnNjYWxlX3hfdGFibGUgPSBNRFBfRE9XTlNDQUxFX01BWDsKKworc3RydWN0IG1kcF9yZWdzIHsKKwl1aW50MzJfdCBzcmMwOworCXVpbnQzMl90IHNyYzE7CisJdWludDMyX3QgZHN0MDsKKwl1aW50MzJfdCBkc3QxOworCXVpbnQzMl90IHNyY19jZmc7CisJdWludDMyX3QgZHN0X2NmZzsKKwl1aW50MzJfdCBzcmNfcGFjazsKKwl1aW50MzJfdCBkc3RfcGFjazsKKwl1aW50MzJfdCBzcmNfcmVjdDsKKwl1aW50MzJfdCBkc3RfcmVjdDsKKwl1aW50MzJfdCBzcmNfeXN0cmlkZTsKKwl1aW50MzJfdCBkc3RfeXN0cmlkZTsKKwl1aW50MzJfdCBvcDsKKwl1aW50MzJfdCBzcmNfYnBwOworCXVpbnQzMl90IGRzdF9icHA7CisJdWludDMyX3QgZWRnZTsKKwl1aW50MzJfdCBwaGFzZXhfaW5pdDsKKwl1aW50MzJfdCBwaGFzZXlfaW5pdDsKKwl1aW50MzJfdCBwaGFzZXhfc3RlcDsKKwl1aW50MzJfdCBwaGFzZXlfc3RlcDsKK307CisKK3N0YXRpYyB1aW50MzJfdCBwYWNrX3BhdHRlcm5bXSA9IHsKKwlQUFBfQVJSQVkwKFBBQ0tfUEFUVEVSTikKK307CisKK3N0YXRpYyB1aW50MzJfdCBzcmNfaW1nX2NmZ1tdID0geworCVBQUF9BUlJBWTEoQ0ZHLCBTUkMpCit9OworCitzdGF0aWMgdWludDMyX3QgZHN0X2ltZ19jZmdbXSA9IHsKKwlQUFBfQVJSQVkxKENGRywgRFNUKQorfTsKKworc3RhdGljIHVpbnQzMl90IGJ5dGVzX3Blcl9waXhlbFtdID0geworCVtNRFBfUkdCXzU2NV0gPSAyLAorCVtNRFBfUkdCXzg4OF0gPSAzLAorCVtNRFBfWFJHQl84ODg4XSA9IDQsCisJW01EUF9BUkdCXzg4ODhdID0gNCwKKwlbTURQX1JHQkFfODg4OF0gPSA0LAorCVtNRFBfQkdSQV84ODg4XSA9IDQsCisJW01EUF9ZX0NCQ1JfSDJWMV0gPSAxLAorCVtNRFBfWV9DQkNSX0gyVjJdID0gMSwKKwlbTURQX1lfQ1JDQl9IMlYxXSA9IDEsCisJW01EUF9ZX0NSQ0JfSDJWMl0gPSAxLAorCVtNRFBfWUNSWUNCX0gyVjFdID0gMgorfTsKKworc3RhdGljIHVpbnQzMl90IGRzdF9vcF9jaHJvbWFbXSA9IHsKKwlQUFBfQVJSQVkxKENIUk9NQV9TQU1QLCBEU1QpCit9OworCitzdGF0aWMgdWludDMyX3Qgc3JjX29wX2Nocm9tYVtdID0geworCVBQUF9BUlJBWTEoQ0hST01BX1NBTVAsIFNSQykKK307CisKK3N0YXRpYyB1aW50MzJfdCBiZ19vcF9jaHJvbWFbXSA9IHsKKwlQUFBfQVJSQVkxKENIUk9NQV9TQU1QLCBCRykKK307CisKK3N0YXRpYyB2b2lkIHJvdGF0ZV9kc3RfYWRkcl94KHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwgc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCXJlZ3MtPmRzdDAgKz0gKHJlcS0+ZHN0X3JlY3QudyAtCisJCSAgICAgICBtaW4oKHVpbnQzMl90KTE2LCByZXEtPmRzdF9yZWN0LncpKSAqIHJlZ3MtPmRzdF9icHA7CisJcmVncy0+ZHN0MSArPSAocmVxLT5kc3RfcmVjdC53IC0KKwkJICAgICAgIG1pbigodWludDMyX3QpMTYsIHJlcS0+ZHN0X3JlY3QudykpICogcmVncy0+ZHN0X2JwcDsKK30KKworc3RhdGljIHZvaWQgcm90YXRlX2RzdF9hZGRyX3koc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLCBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+ZHN0MCArPSAocmVxLT5kc3RfcmVjdC5oIC0KKwkJICAgICAgIG1pbigodWludDMyX3QpMTYsIHJlcS0+ZHN0X3JlY3QuaCkpICoKKwkJICAgICAgIHJlZ3MtPmRzdF95c3RyaWRlOworCXJlZ3MtPmRzdDEgKz0gKHJlcS0+ZHN0X3JlY3QuaCAtCisJCSAgICAgICBtaW4oKHVpbnQzMl90KTE2LCByZXEtPmRzdF9yZWN0LmgpKSAqCisJCSAgICAgICByZWdzLT5kc3RfeXN0cmlkZTsKK30KKworc3RhdGljIHZvaWQgYmxpdF9yb3RhdGUoc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLAorCQkJc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCWlmIChyZXEtPmZsYWdzID09IE1EUF9ST1RfTk9QKQorCQlyZXR1cm47CisKKwlyZWdzLT5vcCB8PSBQUFBfT1BfUk9UX09OOworCWlmICgocmVxLT5mbGFncyAmIE1EUF9ST1RfOTAgfHwgcmVxLT5mbGFncyAmIE1EUF9GTElQX0xSKSAmJgorCSAgICAhKHJlcS0+ZmxhZ3MgJiBNRFBfUk9UXzkwICYmIHJlcS0+ZmxhZ3MgJiBNRFBfRkxJUF9MUikpCisJCXJvdGF0ZV9kc3RfYWRkcl94KHJlcSwgcmVncyk7CisJaWYgKHJlcS0+ZmxhZ3MgJiBNRFBfUk9UXzkwKQorCQlyZWdzLT5vcCB8PSBQUFBfT1BfUk9UXzkwOworCWlmIChyZXEtPmZsYWdzICYgTURQX0ZMSVBfVUQpIHsKKwkJcmVncy0+b3AgfD0gUFBQX09QX0ZMSVBfVUQ7CisJCXJvdGF0ZV9kc3RfYWRkcl95KHJlcSwgcmVncyk7CisJfQorCWlmIChyZXEtPmZsYWdzICYgTURQX0ZMSVBfTFIpCisJCXJlZ3MtPm9wIHw9IFBQUF9PUF9GTElQX0xSOworfQorCitzdGF0aWMgdm9pZCBibGl0X2NvbnZlcnQoc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLCBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MpCit7CisJaWYgKHJlcS0+c3JjLmZvcm1hdCA9PSByZXEtPmRzdC5mb3JtYXQpCisJCXJldHVybjsKKwlpZiAoSVNfUkdCKHJlcS0+c3JjLmZvcm1hdCkgJiYgSVNfWUNSQ0IocmVxLT5kc3QuZm9ybWF0KSkgeworCQlyZWdzLT5vcCB8PSBQUFBfT1BfQ09OVkVSVF9SR0IyWUNCQ1IgfCBQUFBfT1BfQ09OVkVSVF9PTjsKKwl9IGVsc2UgaWYgKElTX1lDUkNCKHJlcS0+c3JjLmZvcm1hdCkgJiYgSVNfUkdCKHJlcS0+ZHN0LmZvcm1hdCkpIHsKKwkJcmVncy0+b3AgfD0gUFBQX09QX0NPTlZFUlRfWUNCQ1IyUkdCIHwgUFBQX09QX0NPTlZFUlRfT047CisJCWlmIChyZXEtPmRzdC5mb3JtYXQgPT0gTURQX1JHQl81NjUpCisJCQlyZWdzLT5vcCB8PSBQUFBfT1BfQ09OVkVSVF9NQVRSSVhfU0VDT05EQVJZOworCX0KK30KKworI2RlZmluZSBHRVRfQklUX1JBTkdFKHZhbHVlLCBoaWdoLCBsb3cpIFwKKwkoKCgxIDw8IChoaWdoIC0gbG93ICsgMSkpIC0gMSkgJiAodmFsdWUgPj4gbG93KSkKK3N0YXRpYyB1aW50MzJfdCB0cmFuc3BfY29udmVydChzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEpCit7CisJdWludDMyX3QgdHJhbnNwID0gMDsKKwlpZiAocmVxLT5zcmMuZm9ybWF0ID09IE1EUF9SR0JfNTY1KSB7CisJCS8qIHBhZCBlYWNoIHZhbHVlIHRvIDggYml0cyBieSBjb3B5aW5nIHRoZSBoaWdoIGJpdHMgaW50byB0aGUKKwkJICogbG93IGVuZCwgY29udmVydCBSR0IgdG8gUkJHIGJ5IHN3aXRjaGluZyBsb3cgMiBjb21wb25lbnRzICovCisJCXRyYW5zcCB8PSAoKEdFVF9CSVRfUkFOR0UocmVxLT50cmFuc3BfbWFzaywgMTUsIDExKSA8PCAzKSB8CisJCQkgICAoR0VUX0JJVF9SQU5HRShyZXEtPnRyYW5zcF9tYXNrLCAxNSwgMTMpKSkgPDwgMTY7CisKKwkJdHJhbnNwIHw9ICgoR0VUX0JJVF9SQU5HRShyZXEtPnRyYW5zcF9tYXNrLCA0LCAwKSA8PCAzKSB8CisJCQkgICAoR0VUX0JJVF9SQU5HRShyZXEtPnRyYW5zcF9tYXNrLCA0LCAyKSkpIDw8IDg7CisKKwkJdHJhbnNwIHw9IChHRVRfQklUX1JBTkdFKHJlcS0+dHJhbnNwX21hc2ssIDEwLCA1KSA8PCAyKSB8CisJCQkgIChHRVRfQklUX1JBTkdFKHJlcS0+dHJhbnNwX21hc2ssIDEwLCA5KSk7CisJfSBlbHNlIHsKKwkJLyogY29udmVydCBSR0IgdG8gUkJHICovCisJCXRyYW5zcCB8PSAoR0VUX0JJVF9SQU5HRShyZXEtPnRyYW5zcF9tYXNrLCAxNSwgOCkpIHwKKwkJCSAgKEdFVF9CSVRfUkFOR0UocmVxLT50cmFuc3BfbWFzaywgMjMsIDE2KSA8PCAxNikgfAorCQkJICAoR0VUX0JJVF9SQU5HRShyZXEtPnRyYW5zcF9tYXNrLCA3LCAwKSA8PCA4KTsKKwl9CisJcmV0dXJuIHRyYW5zcDsKK30KKyN1bmRlZiBHRVRfQklUX1JBTkdFCisKK3N0YXRpYyB2b2lkIGJsaXRfYmxlbmQoc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLCBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MpCit7CisJLyogVFJBTlNQIEJMRU5EICovCisJaWYgKHJlcS0+dHJhbnNwX21hc2sgIT0gTURQX1RSQU5TUF9OT1ApIHsKKwkJcmVxLT50cmFuc3BfbWFzayA9IHRyYW5zcF9jb252ZXJ0KHJlcSk7CisJCWlmIChyZXEtPmFscGhhICE9IE1EUF9BTFBIQV9OT1ApIHsKKwkJCS8qIHVzZSBibGVuZGVkIHRyYW5zcGFyYW5jeSBtb2RlCisJCQkgKiBwaXhlbCA9IChzcmMgPT0gdHJhbnNwKSA/IGRzdCA6IGJsZW5kCisJCQkgKiBibGVuZCBpcyBjb21ibyBvZiBibGVuZF9lcV9zZWwgYW5kCisJCQkgKiBibGVuZF9hbHBoYV9zZWwgKi8KKwkJCXJlZ3MtPm9wIHw9IFBQUF9PUF9ST1RfT04gfCBQUFBfT1BfQkxFTkRfT04gfAorCQkJCVBQUF9PUF9CTEVORF9BTFBIQV9CTEVORF9OT1JNQUwgfAorCQkJCVBQUF9PUF9CTEVORF9DT05TVEFOVF9BTFBIQSB8CisJCQkJUFBQX0JMRU5EX0FMUEhBX1RSQU5TUDsKKwkJfSBlbHNlIHsKKwkJCS8qIHNpbXBsZSB0cmFuc3BhcmFuY3kgbW9kZQorCQkJICogcGl4ZWwgPSAoc3JjID09IHRyYW5zcCkgPyBkc3QgOiBzcmMgKi8KKwkJCXJlZ3MtPm9wIHw9IFBQUF9PUF9ST1RfT04gfCBQUFBfT1BfQkxFTkRfT04gfAorCQkJCVBQUF9PUF9CTEVORF9TUkNQSVhFTF9UUkFOU1A7CisJCX0KKwl9CisKKwlyZXEtPmFscGhhICY9IDB4ZmY7CisJLyogQUxQSEEgQkxFTkQgKi8KKwlpZiAoSEFTX0FMUEhBKHJlcS0+c3JjLmZvcm1hdCkpIHsKKwkJcmVncy0+b3AgfD0gUFBQX09QX1JPVF9PTiB8IFBQUF9PUF9CTEVORF9PTiB8CisJCQlQUFBfT1BfQkxFTkRfU1JDUElYRUxfQUxQSEE7CisJfSBlbHNlIGlmIChyZXEtPmFscGhhIDwgTURQX0FMUEhBX05PUCkgeworCQkvKiBqdXN0IGJsZW5kIGJ5IGFscGhhICovCisJCXJlZ3MtPm9wIHw9IFBQUF9PUF9ST1RfT04gfCBQUFBfT1BfQkxFTkRfT04gfAorCQkJUFBQX09QX0JMRU5EX0FMUEhBX0JMRU5EX05PUk1BTCB8CisJCQlQUFBfT1BfQkxFTkRfQ09OU1RBTlRfQUxQSEE7CisJfQorCisJcmVncy0+b3AgfD0gYmdfb3BfY2hyb21hW3JlcS0+ZHN0LmZvcm1hdF07Cit9CisKKyNkZWZpbmUgT05FX0hBTEYJKDFMTCA8PCAzMikKKyNkZWZpbmUgT05FCQkoMUxMIDw8IDMzKQorI2RlZmluZSBUV08JCSgyTEwgPDwgMzMpCisjZGVmaW5lIFRIUkVFCQkoM0xMIDw8IDMzKQorI2RlZmluZSBGUkFDX01BU0sgKE9ORSAtIDEpCisjZGVmaW5lIElOVF9NQVNLICh+RlJBQ19NQVNLKQorCitzdGF0aWMgaW50IHNjYWxlX3BhcmFtcyh1aW50MzJfdCBkaW1faW4sIHVpbnQzMl90IGRpbV9vdXQsIHVpbnQzMl90IG9yaWdpbiwKKwkJCXVpbnQzMl90ICpwaGFzZV9pbml0LCB1aW50MzJfdCAqcGhhc2Vfc3RlcCkKK3sKKwkvKiB0byBpbXByb3ZlIHByZWNpY3Npb24gY2FsY3VsYXRpb25zIGFyZSBkb25lIGluIFUzMS4zMyBhbmQgY29udmVydGVkCisJICogdG8gVTMuMjkgYXQgdGhlIGVuZCAqLworCWludDY0X3QgazEsIGsyLCBrMywgazQsIHRtcDsKKwl1aW50NjRfdCBuLCBkLCBvcywgb3NfcCwgb2QsIG9kX3AsIG9yZXE7CisJdW5zaWduZWQgcnBhID0gMDsKKwlpbnQ2NF90IGlwNjQsIGRlbHRhOworCisJaWYgKGRpbV9vdXQgJSAzID09IDApCisJCXJwYSA9ICEoZGltX2luICUgKGRpbV9vdXQgLyAzKSk7CisKKwluID0gKCh1aW50NjRfdClkaW1fb3V0KSA8PCAzNDsKKwlkID0gZGltX2luOworCWlmICghZCkKKwkJcmV0dXJuIC0xOworCWRvX2RpdihuLCBkKTsKKwlrMyA9IChuICsgMSkgPj4gMTsKKwlpZiAoKGszID4+IDQpIDwgKDFMTCA8PCAyNykgfHwgKGszID4+IDQpID4gKDFMTCA8PCAzMSkpIHsKKwkJRExPRygiY3JhcCBiYWQgc2NhbGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW4gPSAoKHVpbnQ2NF90KWRpbV9pbikgPDwgMzQ7CisJZCA9ICh1aW50NjRfdClkaW1fb3V0OworCWlmICghZCkKKwkJcmV0dXJuIC0xOworCWRvX2RpdihuLCBkKTsKKwlrMSA9IChuICsgMSkgPj4gMTsKKwlrMiA9IChrMSAtIE9ORSkgPj4gMTsKKworCSpwaGFzZV9pbml0ID0gKGludCkoazIgPj4gNCk7CisJazQgPSAoazMgLSBPTkUpID4+IDE7CisKKwlpZiAocnBhKSB7CisJCW9zID0gKCh1aW50NjRfdClvcmlnaW4gPDwgMzMpIC0gT05FX0hBTEY7CisJCXRtcCA9IChkaW1fb3V0ICogb3MpICsgT05FX0hBTEY7CisJCWlmICghZGltX2luKQorCQkJcmV0dXJuIC0xOworCQlkb19kaXYodG1wLCBkaW1faW4pOworCQlvZCA9IHRtcCAtIE9ORV9IQUxGOworCX0gZWxzZSB7CisJCW9zID0gKCh1aW50NjRfdClvcmlnaW4gPDwgMSkgLSAxOworCQlvZCA9ICgoKGszICogb3MpID4+IDEpICsgazQpOworCX0KKworCW9kX3AgPSBvZCAmIElOVF9NQVNLOworCWlmIChvZF9wICE9IG9kKQorCQlvZF9wICs9IE9ORTsKKworCWlmIChycGEpIHsKKwkJdG1wID0gKGRpbV9pbiAqIG9kX3ApICsgT05FX0hBTEY7CisJCWlmICghZGltX2luKQorCQkJcmV0dXJuIC0xOworCQlkb19kaXYodG1wLCBkaW1faW4pOworCQlvc19wID0gdG1wIC0gT05FX0hBTEY7CisJfSBlbHNlIHsKKwkJb3NfcCA9ICgoazEgKiAob2RfcCA+PiAzMykpICsgazIpOworCX0KKworCW9yZXEgPSAob3NfcCAmIElOVF9NQVNLKSAtIE9ORTsKKworCWlwNjQgPSBvc19wIC0gb3JlcTsKKwlkZWx0YSA9ICgoaW50NjRfdCkob3JpZ2luKSA8PCAzMykgLSBvcmVxOworCWlwNjQgLT0gZGVsdGE7CisJLyogbGltaXQgdG8gdmFsaWQgcmFuZ2UgYmVmb3JlIHRoZSBsZWZ0IHNoaWZ0ICovCisJZGVsdGEgPSAoaXA2NCAmICgxTEwgPDwgNjMpKSA/IDQgOiAtNDsKKwlkZWx0YSA8PD0gMzM7CisJd2hpbGUgKGFicygoaW50KShpcDY0ID4+IDMzKSkgPiA0KQorCQlpcDY0ICs9IGRlbHRhOworCSpwaGFzZV9pbml0ID0gKGludCkoaXA2NCA+PiA0KTsKKwkqcGhhc2Vfc3RlcCA9ICh1aW50MzJfdCkoazEgPj4gNCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfc2NhbGVfdGFibGUoY29uc3Qgc3RydWN0IG1kcF9pbmZvICptZHAsCisJCQkgICAgIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgKnRhYmxlLCBpbnQgbGVuKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJbWRwX3dyaXRlbChtZHAsIHRhYmxlW2ldLnZhbCwgdGFibGVbaV0ucmVnKTsKK30KKworZW51bSB7CitJTUdfTEVGVCwKK0lNR19SSUdIVCwKK0lNR19UT1AsCitJTUdfQk9UVE9NLAorfTsKKworc3RhdGljIHZvaWQgZ2V0X2VkZ2VfaW5mbyh1aW50MzJfdCBzcmMsIHVpbnQzMl90IHNyY19jb29yZCwgdWludDMyX3QgZHN0LAorCQkJICB1aW50MzJfdCAqaW50ZXJwMSwgdWludDMyX3QgKmludGVycDIsCisJCQkgIHVpbnQzMl90ICpyZXBlYXQxLCB1aW50MzJfdCAqcmVwZWF0MikgeworCWlmIChzcmMgPiAzICogZHN0KSB7CisJCSppbnRlcnAxID0gMDsKKwkJKmludGVycDIgPSBzcmMgLSAxOworCQkqcmVwZWF0MSA9IDA7CisJCSpyZXBlYXQyID0gMDsKKwl9IGVsc2UgaWYgKHNyYyA9PSAzICogZHN0KSB7CisJCSppbnRlcnAxID0gMDsKKwkJKmludGVycDIgPSBzcmM7CisJCSpyZXBlYXQxID0gMDsKKwkJKnJlcGVhdDIgPSAxOworCX0gZWxzZSBpZiAoc3JjID4gZHN0ICYmIHNyYyA8IDMgKiBkc3QpIHsKKwkJKmludGVycDEgPSAtMTsKKwkJKmludGVycDIgPSBzcmM7CisJCSpyZXBlYXQxID0gMTsKKwkJKnJlcGVhdDIgPSAxOworCX0gZWxzZSBpZiAoc3JjID09IGRzdCkgeworCQkqaW50ZXJwMSA9IC0xOworCQkqaW50ZXJwMiA9IHNyYyArIDE7CisJCSpyZXBlYXQxID0gMTsKKwkJKnJlcGVhdDIgPSAyOworCX0gZWxzZSB7CisJCSppbnRlcnAxID0gLTI7CisJCSppbnRlcnAyID0gc3JjICsgMTsKKwkJKnJlcGVhdDEgPSAyOworCQkqcmVwZWF0MiA9IDI7CisJfQorCSppbnRlcnAxICs9IHNyY19jb29yZDsKKwkqaW50ZXJwMiArPSBzcmNfY29vcmQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2VkZ2VfY29uZChzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsIHN0cnVjdCBtZHBfcmVncyAqcmVncykKK3sKKwlpbnQzMl90IGx1bWFfaW50ZXJwWzRdOworCWludDMyX3QgbHVtYV9yZXBlYXRbNF07CisJaW50MzJfdCBjaHJvbWFfaW50ZXJwWzRdOworCWludDMyX3QgY2hyb21hX2JvdW5kWzRdOworCWludDMyX3QgY2hyb21hX3JlcGVhdFs0XTsKKwl1aW50MzJfdCBkc3RfdywgZHN0X2g7CisKKwltZW1zZXQoJmx1bWFfaW50ZXJwLCAwLCBzaXplb2YoaW50MzJfdCkgKiA0KTsKKwltZW1zZXQoJmx1bWFfcmVwZWF0LCAwLCBzaXplb2YoaW50MzJfdCkgKiA0KTsKKwltZW1zZXQoJmNocm9tYV9pbnRlcnAsIDAsIHNpemVvZihpbnQzMl90KSAqIDQpOworCW1lbXNldCgmY2hyb21hX2JvdW5kLCAwLCBzaXplb2YoaW50MzJfdCkgKiA0KTsKKwltZW1zZXQoJmNocm9tYV9yZXBlYXQsIDAsIHNpemVvZihpbnQzMl90KSAqIDQpOworCXJlZ3MtPmVkZ2UgPSAwOworCisJaWYgKHJlcS0+ZmxhZ3MgJiBNRFBfUk9UXzkwKSB7CisJCWRzdF93ID0gcmVxLT5kc3RfcmVjdC5oOworCQlkc3RfaCA9IHJlcS0+ZHN0X3JlY3QudzsKKwl9IGVsc2UgeworCQlkc3RfdyA9IHJlcS0+ZHN0X3JlY3QudzsKKwkJZHN0X2ggPSByZXEtPmRzdF9yZWN0Lmg7CisJfQorCisJaWYgKHJlZ3MtPm9wICYgKFBQUF9PUF9TQ0FMRV9ZX09OIHwgUFBQX09QX1NDQUxFX1hfT04pKSB7CisJCWdldF9lZGdlX2luZm8ocmVxLT5zcmNfcmVjdC5oLCByZXEtPnNyY19yZWN0LnksIGRzdF9oLAorCQkJICAgICAgJmx1bWFfaW50ZXJwW0lNR19UT1BdLCAmbHVtYV9pbnRlcnBbSU1HX0JPVFRPTV0sCisJCQkgICAgICAmbHVtYV9yZXBlYXRbSU1HX1RPUF0sICZsdW1hX3JlcGVhdFtJTUdfQk9UVE9NXSk7CisJCWdldF9lZGdlX2luZm8ocmVxLT5zcmNfcmVjdC53LCByZXEtPnNyY19yZWN0LngsIGRzdF93LAorCQkJICAgICAgJmx1bWFfaW50ZXJwW0lNR19MRUZUXSwgJmx1bWFfaW50ZXJwW0lNR19SSUdIVF0sCisJCQkgICAgICAmbHVtYV9yZXBlYXRbSU1HX0xFRlRdLCAmbHVtYV9yZXBlYXRbSU1HX1JJR0hUXSk7CisJfSBlbHNlIHsKKwkJbHVtYV9pbnRlcnBbSU1HX0xFRlRdID0gcmVxLT5zcmNfcmVjdC54OworCQlsdW1hX2ludGVycFtJTUdfUklHSFRdID0gcmVxLT5zcmNfcmVjdC54ICsgcmVxLT5zcmNfcmVjdC53IC0gMTsKKwkJbHVtYV9pbnRlcnBbSU1HX1RPUF0gPSByZXEtPnNyY19yZWN0Lnk7CisJCWx1bWFfaW50ZXJwW0lNR19CT1RUT01dID0gcmVxLT5zcmNfcmVjdC55ICsgcmVxLT5zcmNfcmVjdC5oIC0gMTsKKwkJbHVtYV9yZXBlYXRbSU1HX0xFRlRdID0gMDsKKwkJbHVtYV9yZXBlYXRbSU1HX1RPUF0gPSAwOworCQlsdW1hX3JlcGVhdFtJTUdfUklHSFRdID0gMDsKKwkJbHVtYV9yZXBlYXRbSU1HX0JPVFRPTV0gPSAwOworCX0KKworCWNocm9tYV9pbnRlcnBbSU1HX0xFRlRdID0gbHVtYV9pbnRlcnBbSU1HX0xFRlRdOworCWNocm9tYV9pbnRlcnBbSU1HX1JJR0hUXSA9IGx1bWFfaW50ZXJwW0lNR19SSUdIVF07CisJY2hyb21hX2ludGVycFtJTUdfVE9QXSA9IGx1bWFfaW50ZXJwW0lNR19UT1BdOworCWNocm9tYV9pbnRlcnBbSU1HX0JPVFRPTV0gPSBsdW1hX2ludGVycFtJTUdfQk9UVE9NXTsKKworCWNocm9tYV9ib3VuZFtJTUdfTEVGVF0gPSByZXEtPnNyY19yZWN0Lng7CisJY2hyb21hX2JvdW5kW0lNR19SSUdIVF0gPSByZXEtPnNyY19yZWN0LnggKyByZXEtPnNyY19yZWN0LncgLSAxOworCWNocm9tYV9ib3VuZFtJTUdfVE9QXSA9IHJlcS0+c3JjX3JlY3QueTsKKwljaHJvbWFfYm91bmRbSU1HX0JPVFRPTV0gPSByZXEtPnNyY19yZWN0LnkgKyByZXEtPnNyY19yZWN0LmggLSAxOworCisJaWYgKElTX1lDUkNCKHJlcS0+c3JjLmZvcm1hdCkpIHsKKwkJY2hyb21hX2ludGVycFtJTUdfTEVGVF0gPSBjaHJvbWFfaW50ZXJwW0lNR19MRUZUXSA+PiAxOworCQljaHJvbWFfaW50ZXJwW0lNR19SSUdIVF0gPSAoY2hyb21hX2ludGVycFtJTUdfUklHSFRdICsgMSkgPj4gMTsKKworCQljaHJvbWFfYm91bmRbSU1HX0xFRlRdID0gY2hyb21hX2JvdW5kW0lNR19MRUZUXSA+PiAxOworCQljaHJvbWFfYm91bmRbSU1HX1JJR0hUXSA9IGNocm9tYV9ib3VuZFtJTUdfUklHSFRdID4+IDE7CisJfQorCisJaWYgKHJlcS0+c3JjLmZvcm1hdCA9PSBNRFBfWV9DQkNSX0gyVjIgfHwKKwkgICAgcmVxLT5zcmMuZm9ybWF0ID09IE1EUF9ZX0NSQ0JfSDJWMikgeworCQljaHJvbWFfaW50ZXJwW0lNR19UT1BdID0gKGNocm9tYV9pbnRlcnBbSU1HX1RPUF0gLSAxKSA+PiAxOworCQljaHJvbWFfaW50ZXJwW0lNR19CT1RUT01dID0gKGNocm9tYV9pbnRlcnBbSU1HX0JPVFRPTV0gKyAxKQorCQkJCQkgICAgPj4gMTsKKwkJY2hyb21hX2JvdW5kW0lNR19UT1BdID0gKGNocm9tYV9ib3VuZFtJTUdfVE9QXSArIDEpID4+IDE7CisJCWNocm9tYV9ib3VuZFtJTUdfQk9UVE9NXSA9IGNocm9tYV9ib3VuZFtJTUdfQk9UVE9NXSA+PiAxOworCX0KKworCWNocm9tYV9yZXBlYXRbSU1HX0xFRlRdID0gY2hyb21hX2JvdW5kW0lNR19MRUZUXSAtCisJCQkJICBjaHJvbWFfaW50ZXJwW0lNR19MRUZUXTsKKwljaHJvbWFfcmVwZWF0W0lNR19SSUdIVF0gPSBjaHJvbWFfaW50ZXJwW0lNR19SSUdIVF0gLQorCQkJCSAgY2hyb21hX2JvdW5kW0lNR19SSUdIVF07CisJY2hyb21hX3JlcGVhdFtJTUdfVE9QXSA9IGNocm9tYV9ib3VuZFtJTUdfVE9QXSAtCisJCQkJICBjaHJvbWFfaW50ZXJwW0lNR19UT1BdOworCWNocm9tYV9yZXBlYXRbSU1HX0JPVFRPTV0gPSBjaHJvbWFfaW50ZXJwW0lNR19CT1RUT01dIC0KKwkJCQkgIGNocm9tYV9ib3VuZFtJTUdfQk9UVE9NXTsKKworCWlmIChjaHJvbWFfcmVwZWF0W0lNR19MRUZUXSA8IDAgfHwgY2hyb21hX3JlcGVhdFtJTUdfTEVGVF0gPiAzIHx8CisJICAgIGNocm9tYV9yZXBlYXRbSU1HX1JJR0hUXSA8IDAgfHwgY2hyb21hX3JlcGVhdFtJTUdfUklHSFRdID4gMyB8fAorCSAgICBjaHJvbWFfcmVwZWF0W0lNR19UT1BdIDwgMCB8fCBjaHJvbWFfcmVwZWF0W0lNR19UT1BdID4gMyB8fAorCSAgICBjaHJvbWFfcmVwZWF0W0lNR19CT1RUT01dIDwgMCB8fCBjaHJvbWFfcmVwZWF0W0lNR19CT1RUT01dID4gMyB8fAorCSAgICBsdW1hX3JlcGVhdFtJTUdfTEVGVF0gPCAwIHx8IGx1bWFfcmVwZWF0W0lNR19MRUZUXSA+IDMgfHwKKwkgICAgbHVtYV9yZXBlYXRbSU1HX1JJR0hUXSA8IDAgfHwgbHVtYV9yZXBlYXRbSU1HX1JJR0hUXSA+IDMgfHwKKwkgICAgbHVtYV9yZXBlYXRbSU1HX1RPUF0gPCAwIHx8IGx1bWFfcmVwZWF0W0lNR19UT1BdID4gMyB8fAorCSAgICBsdW1hX3JlcGVhdFtJTUdfQk9UVE9NXSA8IDAgfHwgbHVtYV9yZXBlYXRbSU1HX0JPVFRPTV0gPiAzKQorCQlyZXR1cm4gLTE7CisKKwlyZWdzLT5lZGdlIHw9IChjaHJvbWFfcmVwZWF0W0lNR19MRUZUXSAmIDMpIDw8IE1EUF9MRUZUX0NIUk9NQTsKKwlyZWdzLT5lZGdlIHw9IChjaHJvbWFfcmVwZWF0W0lNR19SSUdIVF0gJiAzKSA8PCBNRFBfUklHSFRfQ0hST01BOworCXJlZ3MtPmVkZ2UgfD0gKGNocm9tYV9yZXBlYXRbSU1HX1RPUF0gJiAzKSA8PCBNRFBfVE9QX0NIUk9NQTsKKwlyZWdzLT5lZGdlIHw9IChjaHJvbWFfcmVwZWF0W0lNR19CT1RUT01dICYgMykgPDwgTURQX0JPVFRPTV9DSFJPTUE7CisJcmVncy0+ZWRnZSB8PSAobHVtYV9yZXBlYXRbSU1HX0xFRlRdICYgMykgPDwgTURQX0xFRlRfTFVNQTsKKwlyZWdzLT5lZGdlIHw9IChsdW1hX3JlcGVhdFtJTUdfUklHSFRdICYgMykgPDwgTURQX1JJR0hUX0xVTUE7CisJcmVncy0+ZWRnZSB8PSAobHVtYV9yZXBlYXRbSU1HX1RPUF0gJiAzKSA8PCBNRFBfVE9QX0xVTUE7CisJcmVncy0+ZWRnZSB8PSAobHVtYV9yZXBlYXRbSU1HX0JPVFRPTV0gJiAzKSA8PCBNRFBfQk9UVE9NX0xVTUE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmxpdF9zY2FsZShjb25zdCBzdHJ1Y3QgbWRwX2luZm8gKm1kcCwgc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLAorCQkgICAgICBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MpCit7CisJdWludDMyX3QgcGhhc2VfaW5pdF94LCBwaGFzZV9pbml0X3ksIHBoYXNlX3N0ZXBfeCwgcGhhc2Vfc3RlcF95OworCXVpbnQzMl90IHNjYWxlX2ZhY3Rvcl94LCBzY2FsZV9mYWN0b3JfeTsKKwl1aW50MzJfdCBkb3duc2NhbGU7CisJdWludDMyX3QgZHN0X3csIGRzdF9oOworCisJaWYgKHJlcS0+ZmxhZ3MgJiBNRFBfUk9UXzkwKSB7CisJCWRzdF93ID0gcmVxLT5kc3RfcmVjdC5oOworCQlkc3RfaCA9IHJlcS0+ZHN0X3JlY3QudzsKKwl9IGVsc2UgeworCQlkc3RfdyA9IHJlcS0+ZHN0X3JlY3QudzsKKwkJZHN0X2ggPSByZXEtPmRzdF9yZWN0Lmg7CisJfQorCWlmICgocmVxLT5zcmNfcmVjdC53ID09IGRzdF93KSAgJiYgKHJlcS0+c3JjX3JlY3QuaCA9PSBkc3RfaCkgJiYKKwkgICAgIShyZXEtPmZsYWdzICYgTURQX0JMVVIpKSB7CisJCXJlZ3MtPnBoYXNleF9pbml0ID0gMDsKKwkJcmVncy0+cGhhc2V5X2luaXQgPSAwOworCQlyZWdzLT5waGFzZXhfc3RlcCA9IDA7CisJCXJlZ3MtPnBoYXNleV9zdGVwID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNjYWxlX3BhcmFtcyhyZXEtPnNyY19yZWN0LncsIGRzdF93LCAxLCAmcGhhc2VfaW5pdF94LAorCQkJICZwaGFzZV9zdGVwX3gpIHx8CisJICAgIHNjYWxlX3BhcmFtcyhyZXEtPnNyY19yZWN0LmgsIGRzdF9oLCAxLCAmcGhhc2VfaW5pdF95LAorCQkJICZwaGFzZV9zdGVwX3kpKQorCQlyZXR1cm4gLTE7CisKKwlzY2FsZV9mYWN0b3JfeCA9IChkc3RfdyAqIDEwKSAvIHJlcS0+c3JjX3JlY3QudzsKKwlzY2FsZV9mYWN0b3JfeSA9IChkc3RfaCAqIDEwKSAvIHJlcS0+c3JjX3JlY3QuaDsKKworCWlmIChzY2FsZV9mYWN0b3JfeCA+IDgpCisJCWRvd25zY2FsZSA9IE1EUF9ET1dOU0NBTEVfUFQ4VE8xOworCWVsc2UgaWYgKHNjYWxlX2ZhY3Rvcl94ID4gNikKKwkJZG93bnNjYWxlID0gTURQX0RPV05TQ0FMRV9QVDZUT1BUODsKKwllbHNlIGlmIChzY2FsZV9mYWN0b3JfeCA+IDQpCisJCWRvd25zY2FsZSA9IE1EUF9ET1dOU0NBTEVfUFQ0VE9QVDY7CisJZWxzZQorCQlkb3duc2NhbGUgPSBNRFBfRE9XTlNDQUxFX1BUMlRPUFQ0OworCWlmIChkb3duc2NhbGUgIT0gZG93bnNjYWxlX3hfdGFibGUpIHsKKwkJbG9hZF9zY2FsZV90YWJsZShtZHAsIG1kcF9kb3duc2NhbGVfeF90YWJsZVtkb3duc2NhbGVdLCA2NCk7CisJCWRvd25zY2FsZV94X3RhYmxlID0gZG93bnNjYWxlOworCX0KKworCWlmIChzY2FsZV9mYWN0b3JfeSA+IDgpCisJCWRvd25zY2FsZSA9IE1EUF9ET1dOU0NBTEVfUFQ4VE8xOworCWVsc2UgaWYgKHNjYWxlX2ZhY3Rvcl95ID4gNikKKwkJZG93bnNjYWxlID0gTURQX0RPV05TQ0FMRV9QVDZUT1BUODsKKwllbHNlIGlmIChzY2FsZV9mYWN0b3JfeSA+IDQpCisJCWRvd25zY2FsZSA9IE1EUF9ET1dOU0NBTEVfUFQ0VE9QVDY7CisJZWxzZQorCQlkb3duc2NhbGUgPSBNRFBfRE9XTlNDQUxFX1BUMlRPUFQ0OworCWlmIChkb3duc2NhbGUgIT0gZG93bnNjYWxlX3lfdGFibGUpIHsKKwkJbG9hZF9zY2FsZV90YWJsZShtZHAsIG1kcF9kb3duc2NhbGVfeV90YWJsZVtkb3duc2NhbGVdLCA2NCk7CisJCWRvd25zY2FsZV95X3RhYmxlID0gZG93bnNjYWxlOworCX0KKworCXJlZ3MtPnBoYXNleF9pbml0ID0gcGhhc2VfaW5pdF94OworCXJlZ3MtPnBoYXNleV9pbml0ID0gcGhhc2VfaW5pdF95OworCXJlZ3MtPnBoYXNleF9zdGVwID0gcGhhc2Vfc3RlcF94OworCXJlZ3MtPnBoYXNleV9zdGVwID0gcGhhc2Vfc3RlcF95OworCXJlZ3MtPm9wIHw9IChQUFBfT1BfU0NBTEVfWV9PTiB8IFBQUF9PUF9TQ0FMRV9YX09OKTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9pZCBibGl0X2JsdXIoY29uc3Qgc3RydWN0IG1kcF9pbmZvICptZHAsIHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwKKwkJICAgICAgc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCWlmICghKHJlcS0+ZmxhZ3MgJiBNRFBfQkxVUikpCisJCXJldHVybjsKKworCWlmICghKGRvd25zY2FsZV94X3RhYmxlID09IE1EUF9ET1dOU0NBTEVfQkxVUiAmJgorCSAgICAgIGRvd25zY2FsZV95X3RhYmxlID09IE1EUF9ET1dOU0NBTEVfQkxVUikpIHsKKwkJbG9hZF9zY2FsZV90YWJsZShtZHAsIG1kcF9nYXVzc2lhbl9ibHVyX3RhYmxlLCAxMjgpOworCQlkb3duc2NhbGVfeF90YWJsZSA9IE1EUF9ET1dOU0NBTEVfQkxVUjsKKwkJZG93bnNjYWxlX3lfdGFibGUgPSBNRFBfRE9XTlNDQUxFX0JMVVI7CisJfQorCisJcmVncy0+b3AgfD0gKFBQUF9PUF9TQ0FMRV9ZX09OIHwgUFBQX09QX1NDQUxFX1hfT04pOworfQorCisKKyNkZWZpbmUgSU1HX0xFTihyZWN0X2gsIHcsIHJlY3RfdywgYnBwKSAoKChyZWN0X2gpICogdykgKiBicHApCisKKyNkZWZpbmUgWV9UT19DUkNCX1JBVElPKGZvcm1hdCkgXAorCSgoZm9ybWF0ID09IE1EUF9ZX0NCQ1JfSDJWMiB8fCBmb3JtYXQgPT0gTURQX1lfQ1JDQl9IMlYyKSA/ICAyIDpcCisJIChmb3JtYXQgPT0gTURQX1lfQ0JDUl9IMlYxIHx8IGZvcm1hdCA9PSBNRFBfWV9DUkNCX0gyVjEpID8gIDEgOiAxKQorCitzdGF0aWMgdm9pZCBnZXRfbGVuKHN0cnVjdCBtZHBfaW1nICppbWcsIHN0cnVjdCBtZHBfcmVjdCAqcmVjdCwgdWludDMyX3QgYnBwLAorCQkgICAgdWludDMyX3QgKmxlbjAsIHVpbnQzMl90ICpsZW4xKQoreworCSpsZW4wID0gSU1HX0xFTihyZWN0LT5oLCBpbWctPndpZHRoLCByZWN0LT53LCBicHApOworCWlmIChJU19QU0VVRE9QTE5SKGltZy0+Zm9ybWF0KSkKKwkJKmxlbjEgPSAqbGVuMC9ZX1RPX0NSQ0JfUkFUSU8oaW1nLT5mb3JtYXQpOworCWVsc2UKKwkJKmxlbjEgPSAwOworfQorCitzdGF0aWMgaW50IHZhbGlkX3NyY19kc3QodW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3JjX2xlbiwKKwkJCSB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCwgdW5zaWduZWQgbG9uZyBkc3RfbGVuLAorCQkJIHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwgc3RydWN0IG1kcF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgc3JjX21pbl9vayA9IHNyY19zdGFydDsKKwl1bnNpZ25lZCBsb25nIHNyY19tYXhfb2sgPSBzcmNfc3RhcnQgKyBzcmNfbGVuOworCXVuc2lnbmVkIGxvbmcgZHN0X21pbl9vayA9IGRzdF9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGRzdF9tYXhfb2sgPSBkc3Rfc3RhcnQgKyBkc3RfbGVuOworCXVpbnQzMl90IHNyYzBfbGVuLCBzcmMxX2xlbiwgZHN0MF9sZW4sIGRzdDFfbGVuOworCWdldF9sZW4oJnJlcS0+c3JjLCAmcmVxLT5zcmNfcmVjdCwgcmVncy0+c3JjX2JwcCwgJnNyYzBfbGVuLAorCQkgJnNyYzFfbGVuKTsKKwlnZXRfbGVuKCZyZXEtPmRzdCwgJnJlcS0+ZHN0X3JlY3QsIHJlZ3MtPmRzdF9icHAsICZkc3QwX2xlbiwKKwkJICZkc3QxX2xlbik7CisKKwlpZiAocmVncy0+c3JjMCA8IHNyY19taW5fb2sgfHwgcmVncy0+c3JjMCA+IHNyY19tYXhfb2sgfHwKKwkgICAgcmVncy0+c3JjMCArIHNyYzBfbGVuID4gc3JjX21heF9vaykgeworCQlETE9HKCJpbnZhbGlkX3NyYyAleCAleCAlbHggJWx4XG4iLCByZWdzLT5zcmMwLAorCQkgICAgICBzcmMwX2xlbiwgc3JjX21pbl9vaywgc3JjX21heF9vayk7CisJCXJldHVybiAwOworCX0KKwlpZiAocmVncy0+c3JjX2NmZyAmIFBQUF9TUkNfUExBTkVfUFNFVURPUExOUikgeworCQlpZiAocmVncy0+c3JjMSA8IHNyY19taW5fb2sgfHwgcmVncy0+c3JjMSA+IHNyY19tYXhfb2sgfHwKKwkJICAgIHJlZ3MtPnNyYzEgKyBzcmMxX2xlbiA+IHNyY19tYXhfb2spIHsKKwkJCURMT0coImludmFsaWRfc3JjMSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJaWYgKHJlZ3MtPmRzdDAgPCBkc3RfbWluX29rIHx8IHJlZ3MtPmRzdDAgPiBkc3RfbWF4X29rIHx8CisJICAgIHJlZ3MtPmRzdDAgKyBkc3QwX2xlbiA+IGRzdF9tYXhfb2spIHsKKwkJRExPRygiaW52YWxpZF9kc3QiKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyZWdzLT5kc3RfY2ZnICYgUFBQX1NSQ19QTEFORV9QU0VVRE9QTE5SKSB7CisJCWlmIChyZWdzLT5kc3QxIDwgZHN0X21pbl9vayB8fCByZWdzLT5kc3QxID4gZHN0X21heF9vayB8fAorCQkgICAgcmVncy0+ZHN0MSArIGRzdDFfbGVuID4gZHN0X21heF9vaykgeworCQkJRExPRygiaW52YWxpZF9kc3QxIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgdm9pZCBmbHVzaF9pbWdzKHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwgc3RydWN0IG1kcF9yZWdzICpyZWdzLAorCQkgICAgICAgc3RydWN0IGZpbGUgKnNyY19maWxlLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUpCit7CisjaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQorCXVpbnQzMl90IHNyYzBfbGVuLCBzcmMxX2xlbiwgZHN0MF9sZW4sIGRzdDFfbGVuOworCisJLyogZmx1c2ggc3JjIGltYWdlcyB0byBtZW1vcnkgYmVmb3JlIGRtYSB0byBtZHAgKi8KKwlnZXRfbGVuKCZyZXEtPnNyYywgJnJlcS0+c3JjX3JlY3QsIHJlZ3MtPnNyY19icHAsICZzcmMwX2xlbiwKKwkJJnNyYzFfbGVuKTsKKwlmbHVzaF9wbWVtX2ZpbGUoc3JjX2ZpbGUsIHJlcS0+c3JjLm9mZnNldCwgc3JjMF9sZW4pOworCWlmIChJU19QU0VVRE9QTE5SKHJlcS0+c3JjLmZvcm1hdCkpCisJCWZsdXNoX3BtZW1fZmlsZShzcmNfZmlsZSwgcmVxLT5zcmMub2Zmc2V0ICsgc3JjMF9sZW4sCisJCQkJc3JjMV9sZW4pOworCisJLyogZmx1c2ggZHN0IGltYWdlcyAqLworCWdldF9sZW4oJnJlcS0+ZHN0LCAmcmVxLT5kc3RfcmVjdCwgcmVncy0+ZHN0X2JwcCwgJmRzdDBfbGVuLAorCQkmZHN0MV9sZW4pOworCWZsdXNoX3BtZW1fZmlsZShkc3RfZmlsZSwgcmVxLT5kc3Qub2Zmc2V0LCBkc3QwX2xlbik7CisJaWYgKElTX1BTRVVET1BMTlIocmVxLT5kc3QuZm9ybWF0KSkKKwkJZmx1c2hfcG1lbV9maWxlKGRzdF9maWxlLCByZXEtPmRzdC5vZmZzZXQgKyBkc3QwX2xlbiwKKwkJCQlkc3QxX2xlbik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZ2V0X2Nocm9tYV9hZGRyKHN0cnVjdCBtZHBfaW1nICppbWcsIHN0cnVjdCBtZHBfcmVjdCAqcmVjdCwKKwkJCSAgICB1aW50MzJfdCBiYXNlLCB1aW50MzJfdCBicHAsIHVpbnQzMl90IGNmZywKKwkJCSAgICB1aW50MzJfdCAqYWRkciwgdWludDMyX3QgKnlzdHJpZGUpCit7CisJdWludDMyX3QgY29tcHJlc3NfdiA9IFlfVE9fQ1JDQl9SQVRJTyhpbWctPmZvcm1hdCk7CisJdWludDMyX3QgY29tcHJlc3NfaCA9IDI7CisJdWludDMyX3QgIG9mZnNldDsKKworCWlmIChJU19QU0VVRE9QTE5SKGltZy0+Zm9ybWF0KSkgeworCQlvZmZzZXQgPSAocmVjdC0+eCAvIGNvbXByZXNzX2gpICogY29tcHJlc3NfaDsKKwkJb2Zmc2V0ICs9IHJlY3QtPnkgPT0gMCA/IDAgOgorCQkJICAoKHJlY3QtPnkgKyAxKSAvIGNvbXByZXNzX3YpICogaW1nLT53aWR0aDsKKwkJKmFkZHIgPSBiYXNlICsgKGltZy0+d2lkdGggKiBpbWctPmhlaWdodCAqIGJwcCk7CisJCSphZGRyICs9IG9mZnNldCAqIGJwcDsKKwkJKnlzdHJpZGUgfD0gKnlzdHJpZGUgPDwgMTY7CisJfSBlbHNlIHsKKwkJKmFkZHIgPSAwOworCX0KK30KKworc3RhdGljIGludCBzZW5kX2JsaXQoY29uc3Qgc3RydWN0IG1kcF9pbmZvICptZHAsIHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwKKwkJICAgICBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MsIHN0cnVjdCBmaWxlICpzcmNfZmlsZSwKKwkJICAgICBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUpCit7CisJbWRwX3dyaXRlbChtZHAsIDEsIDB4MDYwKTsKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+c3JjX3JlY3QsIFBQUF9BRERSX1NSQ19ST0kpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5zcmMwLCBQUFBfQUREUl9TUkMwKTsKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+c3JjMSwgUFBQX0FERFJfU1JDMSk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnNyY195c3RyaWRlLCBQUFBfQUREUl9TUkNfWVNUUklERSk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnNyY19jZmcsIFBQUF9BRERSX1NSQ19DRkcpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5zcmNfcGFjaywgUFBQX0FERFJfU1JDX1BBQ0tfUEFUVEVSTik7CisKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+b3AsIFBQUF9BRERSX09QRVJBVElPTik7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnBoYXNleF9pbml0LCBQUFBfQUREUl9QSEFTRVhfSU5JVCk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnBoYXNleV9pbml0LCBQUFBfQUREUl9QSEFTRVlfSU5JVCk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnBoYXNleF9zdGVwLCBQUFBfQUREUl9QSEFTRVhfU1RFUCk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPnBoYXNleV9zdGVwLCBQUFBfQUREUl9QSEFTRVlfU1RFUCk7CisKKwltZHBfd3JpdGVsKG1kcCwgKHJlcS0+YWxwaGEgPDwgMjQpIHwgKHJlcS0+dHJhbnNwX21hc2sgJiAweGZmZmZmZiksCisJICAgICAgIFBQUF9BRERSX0FMUEhBX1RSQU5TUCk7CisKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+ZHN0X2NmZywgUFBQX0FERFJfRFNUX0NGRyk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmRzdF9wYWNrLCBQUFBfQUREUl9EU1RfUEFDS19QQVRURVJOKTsKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+ZHN0X3JlY3QsIFBQUF9BRERSX0RTVF9ST0kpOworCW1kcF93cml0ZWwobWRwLCByZWdzLT5kc3QwLCBQUFBfQUREUl9EU1QwKTsKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+ZHN0MSwgUFBQX0FERFJfRFNUMSk7CisJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmRzdF95c3RyaWRlLCBQUFBfQUREUl9EU1RfWVNUUklERSk7CisKKwltZHBfd3JpdGVsKG1kcCwgcmVncy0+ZWRnZSwgUFBQX0FERFJfRURHRSk7CisJaWYgKHJlZ3MtPm9wICYgUFBQX09QX0JMRU5EX09OKSB7CisJCW1kcF93cml0ZWwobWRwLCByZWdzLT5kc3QwLCBQUFBfQUREUl9CRzApOworCQltZHBfd3JpdGVsKG1kcCwgcmVncy0+ZHN0MSwgUFBQX0FERFJfQkcxKTsKKwkJbWRwX3dyaXRlbChtZHAsIHJlZ3MtPmRzdF95c3RyaWRlLCBQUFBfQUREUl9CR19ZU1RSSURFKTsKKwkJbWRwX3dyaXRlbChtZHAsIHNyY19pbWdfY2ZnW3JlcS0+ZHN0LmZvcm1hdF0sIFBQUF9BRERSX0JHX0NGRyk7CisJCW1kcF93cml0ZWwobWRwLCBwYWNrX3BhdHRlcm5bcmVxLT5kc3QuZm9ybWF0XSwKKwkJCSAgIFBQUF9BRERSX0JHX1BBQ0tfUEFUVEVSTik7CisJfQorCWZsdXNoX2ltZ3MocmVxLCByZWdzLCBzcmNfZmlsZSwgZHN0X2ZpbGUpOworCW1kcF93cml0ZWwobWRwLCAweDEwMDAsIE1EUF9ESVNQTEFZMF9TVEFSVCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtZHBfcHBwX2JsaXQoY29uc3Qgc3RydWN0IG1kcF9pbmZvICptZHAsIHN0cnVjdCBtZHBfYmxpdF9yZXEgKnJlcSwKKwkJIHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3JjX2xlbiwKKwkJIHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsIHVuc2lnbmVkIGxvbmcgZHN0X2xlbikKK3sKKwlzdHJ1Y3QgbWRwX3JlZ3MgcmVncyA9IHswfTsKKworCWlmICh1bmxpa2VseShyZXEtPnNyYy5mb3JtYXQgPj0gTURQX0lNR1RZUEVfTElNSVQgfHwKKwkJICAgICByZXEtPmRzdC5mb3JtYXQgPj0gTURQX0lNR1RZUEVfTElNSVQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXBkX3BwcDogaW1nIGlzIG9mIHdyb25nIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShyZXEtPnNyY19yZWN0LnggPiByZXEtPnNyYy53aWR0aCB8fAorCQkgICAgIHJlcS0+c3JjX3JlY3QueSA+IHJlcS0+c3JjLmhlaWdodCB8fAorCQkgICAgIHJlcS0+ZHN0X3JlY3QueCA+IHJlcS0+ZHN0LndpZHRoIHx8CisJCSAgICAgcmVxLT5kc3RfcmVjdC55ID4gcmVxLT5kc3QuaGVpZ2h0KSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IGltZyByZWN0IGlzIG91dHNpZGUgb2YgaW1nIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNldCB0aGUgc3JjIGltYWdlIGNvbmZpZ3VyYXRpb24gKi8KKwlyZWdzLnNyY19jZmcgPSBzcmNfaW1nX2NmZ1tyZXEtPnNyYy5mb3JtYXRdOworCXJlZ3Muc3JjX2NmZyB8PSAocmVxLT5zcmNfcmVjdC54ICYgMHgxKSA/IFBQUF9TUkNfQlBQX1JPSV9PRERfWCA6IDA7CisJcmVncy5zcmNfY2ZnIHw9IChyZXEtPnNyY19yZWN0LnkgJiAweDEpID8gUFBQX1NSQ19CUFBfUk9JX09ERF9ZIDogMDsKKwlyZWdzLnNyY19yZWN0ID0gKHJlcS0+c3JjX3JlY3QuaCA8PCAxNikgfCByZXEtPnNyY19yZWN0Lnc7CisJcmVncy5zcmNfcGFjayA9IHBhY2tfcGF0dGVybltyZXEtPnNyYy5mb3JtYXRdOworCisJLyogc2V0IHRoZSBkZXN0IGltYWdlIGNvbmZpZ3VyYXRpb24gKi8KKwlyZWdzLmRzdF9jZmcgPSBkc3RfaW1nX2NmZ1tyZXEtPmRzdC5mb3JtYXRdIHwgUFBQX0RTVF9PVVRfU0VMX0FYSTsKKwlyZWdzLmRzdF9yZWN0ID0gKHJlcS0+ZHN0X3JlY3QuaCA8PCAxNikgfCByZXEtPmRzdF9yZWN0Lnc7CisJcmVncy5kc3RfcGFjayA9IHBhY2tfcGF0dGVybltyZXEtPmRzdC5mb3JtYXRdOworCisJLyogc2V0IHNyYywgYnBwLCBzdGFydCBwaXhlbCBhbmQgeXN0cmlkZSAqLworCXJlZ3Muc3JjX2JwcCA9IGJ5dGVzX3Blcl9waXhlbFtyZXEtPnNyYy5mb3JtYXRdOworCXJlZ3Muc3JjMCA9IHNyY19zdGFydCArIHJlcS0+c3JjLm9mZnNldDsKKwlyZWdzLnNyY195c3RyaWRlID0gcmVxLT5zcmMud2lkdGggKiByZWdzLnNyY19icHA7CisJZ2V0X2Nocm9tYV9hZGRyKCZyZXEtPnNyYywgJnJlcS0+c3JjX3JlY3QsIHJlZ3Muc3JjMCwgcmVncy5zcmNfYnBwLAorCQkJcmVncy5zcmNfY2ZnLCAmcmVncy5zcmMxLCAmcmVncy5zcmNfeXN0cmlkZSk7CisJcmVncy5zcmMwICs9IChyZXEtPnNyY19yZWN0LnggKyAocmVxLT5zcmNfcmVjdC55ICogcmVxLT5zcmMud2lkdGgpKSAqCisJCSAgICAgIHJlZ3Muc3JjX2JwcDsKKworCS8qIHNldCBkc3QsIGJwcCwgc3RhcnQgcGl4ZWwgYW5kIHlzdHJpZGUgKi8KKwlyZWdzLmRzdF9icHAgPSBieXRlc19wZXJfcGl4ZWxbcmVxLT5kc3QuZm9ybWF0XTsKKwlyZWdzLmRzdDAgPSBkc3Rfc3RhcnQgKyByZXEtPmRzdC5vZmZzZXQ7CisJcmVncy5kc3RfeXN0cmlkZSA9IHJlcS0+ZHN0LndpZHRoICogcmVncy5kc3RfYnBwOworCWdldF9jaHJvbWFfYWRkcigmcmVxLT5kc3QsICZyZXEtPmRzdF9yZWN0LCByZWdzLmRzdDAsIHJlZ3MuZHN0X2JwcCwKKwkJCXJlZ3MuZHN0X2NmZywgJnJlZ3MuZHN0MSwgJnJlZ3MuZHN0X3lzdHJpZGUpOworCXJlZ3MuZHN0MCArPSAocmVxLT5kc3RfcmVjdC54ICsgKHJlcS0+ZHN0X3JlY3QueSAqIHJlcS0+ZHN0LndpZHRoKSkgKgorCQkgICAgICByZWdzLmRzdF9icHA7CisKKwlpZiAoIXZhbGlkX3NyY19kc3Qoc3JjX3N0YXJ0LCBzcmNfbGVuLCBkc3Rfc3RhcnQsIGRzdF9sZW4sIHJlcSwKKwkJCSAgICZyZWdzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IGZpbmFsIHNyYyBvciBkc3QgbG9jYXRpb24gaXMgIgorCQkJImludmFsaWQsIGFyZSB5b3UgdHJ5aW5nIHRvIG1ha2UgYW4gaW1hZ2UgdG9vIGxhcmdlICIKKwkJCSJvciB0byBwbGFjZSBpdCBvdXRzaWRlIHRoZSBzY3JlZW4/XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc2V0IHVwIG9wZXJhdGlvbiByZWdpc3RlciAqLworCXJlZ3Mub3AgPSAwOworCWJsaXRfcm90YXRlKHJlcSwgJnJlZ3MpOworCWJsaXRfY29udmVydChyZXEsICZyZWdzKTsKKwlpZiAocmVxLT5mbGFncyAmIE1EUF9ESVRIRVIpCisJCXJlZ3Mub3AgfD0gUFBQX09QX0RJVEhFUl9FTjsKKwlibGl0X2JsZW5kKHJlcSwgJnJlZ3MpOworCWlmIChibGl0X3NjYWxlKG1kcCwgcmVxLCAmcmVncykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBlcnJvciBjb21wdXRpbmcgc2NhbGUgZm9yIGltZy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYmxpdF9ibHVyKG1kcCwgcmVxLCAmcmVncyk7CisJcmVncy5vcCB8PSBkc3Rfb3BfY2hyb21hW3JlcS0+ZHN0LmZvcm1hdF0gfAorCQkgICBzcmNfb3BfY2hyb21hW3JlcS0+c3JjLmZvcm1hdF07CisKKwkvKiBpZiB0aGUgaW1hZ2UgaXMgWUNSWUNCLCB0aGUgeCBhbmQgdyBtdXN0IGJlIGV2ZW4gKi8KKwlpZiAodW5saWtlbHkocmVxLT5zcmMuZm9ybWF0ID09IE1EUF9ZQ1JZQ0JfSDJWMSkpIHsKKwkJcmVxLT5zcmNfcmVjdC54ID0gcmVxLT5zcmNfcmVjdC54ICYgKH4weDEpOworCQlyZXEtPnNyY19yZWN0LncgPSByZXEtPnNyY19yZWN0LncgJiAofjB4MSk7CisJCXJlcS0+ZHN0X3JlY3QueCA9IHJlcS0+ZHN0X3JlY3QueCAmICh+MHgxKTsKKwkJcmVxLT5kc3RfcmVjdC53ID0gcmVxLT5kc3RfcmVjdC53ICYgKH4weDEpOworCX0KKwlpZiAoZ2V0X2VkZ2VfY29uZChyZXEsICZyZWdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZW5kX2JsaXQobWRwLCByZXEsICZyZWdzLCBzcmNfZmlsZSwgZHN0X2ZpbGUpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwX3NjYWxlX3RhYmxlcy5jIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3NjYWxlX3RhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNDc4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfc2NhbGVfdGFibGVzLmMKQEAgLTAsMCArMSw3NjYgQEAKKy8qIGRyaXZlcnMvdmlkZW8vbXNtX2ZiL21kcF9zY2FsZV90YWJsZXMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAibWRwX3NjYWxlX3RhYmxlcy5oIgorI2luY2x1ZGUgIm1kcF9ody5oIgorCitzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF91cHNjYWxlX3RhYmxlW10gPSB7CisJeyAweDVmZmZjLCAweDAgfSwKKwl7IDB4NTAyMDAsIDB4N2ZjMDAwMDAgfSwKKwl7IDB4NWZmZmMsIDB4ZmY4MDAwMGQgfSwKKwl7IDB4NTAyMDQsIDB4N2VjMDAzZjkgfSwKKwl7IDB4NWZmZmMsIDB4ZmVjMDAwMWMgfSwKKwl7IDB4NTAyMDgsIDB4N2Q0MDAzZjMgfSwKKwl7IDB4NWZmZmMsIDB4ZmU0MDAwMmIgfSwKKwl7IDB4NTAyMGMsIDB4N2I4MDAzZWQgfSwKKwl7IDB4NWZmZmMsIDB4ZmQ4MDAwM2MgfSwKKwl7IDB4NTAyMTAsIDB4Nzk0MDAzZTggfSwKKwl7IDB4NWZmZmMsIDB4ZmNjMDAwNGQgfSwKKwl7IDB4NTAyMTQsIDB4NzZjMDAzZTQgfSwKKwl7IDB4NWZmZmMsIDB4ZmM0MDAwNWYgfSwKKwl7IDB4NTAyMTgsIDB4NzNjMDAzZTAgfSwKKwl7IDB4NWZmZmMsIDB4ZmI4MDAwNzEgfSwKKwl7IDB4NTAyMWMsIDB4NzA4MDAzZGUgfSwKKwl7IDB4NWZmZmMsIDB4ZmFjMDAwODUgfSwKKwl7IDB4NTAyMjAsIDB4NmQwMDAzZGIgfSwKKwl7IDB4NWZmZmMsIDB4ZmEwMDAwOTggfSwKKwl7IDB4NTAyMjQsIDB4Njk4MDAzZDkgfSwKKwl7IDB4NWZmZmMsIDB4Zjk4MDAwYWMgfSwKKwl7IDB4NTAyMjgsIDB4NjU0MDAzZDggfSwKKwl7IDB4NWZmZmMsIDB4ZjhjMDAwYzEgfSwKKwl7IDB4NTAyMmMsIDB4NjEwMDAzZDcgfSwKKwl7IDB4NWZmZmMsIDB4Zjg0MDAwZDUgfSwKKwl7IDB4NTAyMzAsIDB4NWM4MDAzZDcgfSwKKwl7IDB4NWZmZmMsIDB4ZjdjMDAwZTkgfSwKKwl7IDB4NTAyMzQsIDB4NTgwMDAzZDcgfSwKKwl7IDB4NWZmZmMsIDB4Zjc0MDAwZmQgfSwKKwl7IDB4NTAyMzgsIDB4NTM0MDAzZDggfSwKKwl7IDB4NWZmZmMsIDB4ZjZjMDAxMTIgfSwKKwl7IDB4NTAyM2MsIDB4NGU4MDAzZDggfSwKKwl7IDB4NWZmZmMsIDB4ZjY4MDAxMjYgfSwKKwl7IDB4NTAyNDAsIDB4NDk0MDAzZGEgfSwKKwl7IDB4NWZmZmMsIDB4ZjYwMDAxM2EgfSwKKwl7IDB4NTAyNDQsIDB4NDQ4MDAzZGIgfSwKKwl7IDB4NWZmZmMsIDB4ZjYwMDAxNGQgfSwKKwl7IDB4NTAyNDgsIDB4M2Y0MDAzZGQgfSwKKwl7IDB4NWZmZmMsIDB4ZjVjMDAxNjAgfSwKKwl7IDB4NTAyNGMsIDB4M2E0MDAzZGYgfSwKKwl7IDB4NWZmZmMsIDB4ZjVjMDAxNzIgfSwKKwl7IDB4NTAyNTAsIDB4MzU0MDAzZTEgfSwKKwl7IDB4NWZmZmMsIDB4ZjVjMDAxODQgfSwKKwl7IDB4NTAyNTQsIDB4MzA0MDAzZTMgfSwKKwl7IDB4NWZmZmMsIDB4ZjYwMDAxOTUgfSwKKwl7IDB4NTAyNTgsIDB4MmIwMDAzZTYgfSwKKwl7IDB4NWZmZmMsIDB4ZjY0MDAxYTYgfSwKKwl7IDB4NTAyNWMsIDB4MjYwMDAzZTggfSwKKwl7IDB4NWZmZmMsIDB4ZjZjMDAxYjQgfSwKKwl7IDB4NTAyNjAsIDB4MjE0MDAzZWIgfSwKKwl7IDB4NWZmZmMsIDB4Zjc4MDAxYzIgfSwKKwl7IDB4NTAyNjQsIDB4MWM0MDAzZWUgfSwKKwl7IDB4NWZmZmMsIDB4ZjgwMDAxY2YgfSwKKwl7IDB4NTAyNjgsIDB4MTdjMDAzZjEgfSwKKwl7IDB4NWZmZmMsIDB4ZjkwMDAxZGIgfSwKKwl7IDB4NTAyNmMsIDB4MTM0MDAzZjMgfSwKKwl7IDB4NWZmZmMsIDB4ZmEwMDAxZTUgfSwKKwl7IDB4NTAyNzAsIDB4ZjAwMDNmNiB9LAorCXsgMHg1ZmZmYywgMHhmYjQwMDFlZSB9LAorCXsgMHg1MDI3NCwgMHhhYzAwM2Y5IH0sCisJeyAweDVmZmZjLCAweGZjYzAwMWY1IH0sCisJeyAweDUwMjc4LCAweDcwMDAzZmIgfSwKKwl7IDB4NWZmZmMsIDB4ZmU0MDAxZmIgfSwKKwl7IDB4NTAyN2MsIDB4MzQwMDNmZSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2Rvd25zY2FsZV94X3RhYmxlX1BUMlRPUFQ0W10gPSB7CisJeyAweDVmZmZjLCAweDc0MDAwOGMgfSwKKwl7IDB4NTAyODAsIDB4MzM4MDAwODggfSwKKwl7IDB4NWZmZmMsIDB4ODAwMDA4ZSB9LAorCXsgMHg1MDI4NCwgMHgzMzQwMDA4NCB9LAorCXsgMHg1ZmZmYywgMHg4NDAwMDkyIH0sCisJeyAweDUwMjg4LCAweDMzMDAwMDgwIH0sCisJeyAweDVmZmZjLCAweDkwMDAwOTQgfSwKKwl7IDB4NTAyOGMsIDB4MzMwMDAwN2IgfSwKKwl7IDB4NWZmZmMsIDB4OWMwMDA5OCB9LAorCXsgMHg1MDI5MCwgMHgzMjQwMDA3NyB9LAorCXsgMHg1ZmZmYywgMHhhNDAwMDliIH0sCisJeyAweDUwMjk0LCAweDMyMDAwMDczIH0sCisJeyAweDVmZmZjLCAweGIwMDAwOWQgfSwKKwl7IDB4NTAyOTgsICAweDMxYzAwMDZmIH0sCisJeyAweDVmZmZjLCAgMHhiYzAwMGEwIH0sCisJeyAweDUwMjljLCAgMHgzMTQwMDA2YiB9LAorCXsgMHg1ZmZmYywgIDB4YzgwMDBhMiB9LAorCXsgMHg1MDJhMCwgIDB4MzEwMDAwNjcgfSwKKwl7IDB4NWZmZmMsICAweGQ4MDAwYTUgfSwKKwl7IDB4NTAyYTQsICAweDMwODAwMDYyIH0sCisJeyAweDVmZmZjLCAgMHhlNDAwMGE4IH0sCisJeyAweDUwMmE4LCAgMHgyZmMwMDA1ZiB9LAorCXsgMHg1ZmZmYywgIDB4ZWMwMDBhYSB9LAorCXsgMHg1MDJhYywgIDB4MmZjMDAwNWIgfSwKKwl7IDB4NWZmZmMsICAweGY4MDAwYWQgfSwKKwl7IDB4NTAyYjAsICAweDJmNDAwMDU3IH0sCisJeyAweDVmZmZjLCAgMHgxMDgwMDBiMCB9LAorCXsgMHg1MDJiNCwgIDB4MmU0MDAwNTQgfSwKKwl7IDB4NWZmZmMsICAweDExNDAwMGIyIH0sCisJeyAweDUwMmI4LCAgMHgyZTAwMDA1MCB9LAorCXsgMHg1ZmZmYywgIDB4MTI0MDAwYjQgfSwKKwl7IDB4NTAyYmMsICAweDJkODAwMDRjIH0sCisJeyAweDVmZmZjLCAgMHgxMzAwMDBiNiB9LAorCXsgMHg1MDJjMCwgIDB4MmQwMDAwNDkgfSwKKwl7IDB4NWZmZmMsICAweDE0MDAwMGI4IH0sCisJeyAweDUwMmM0LCAgMHgyYzgwMDA0NSB9LAorCXsgMHg1ZmZmYywgIDB4MTUwMDAwYjkgfSwKKwl7IDB4NTAyYzgsICAweDJjMDAwMDQyIH0sCisJeyAweDVmZmZjLCAgMHgxNWMwMDBiZCB9LAorCXsgMHg1MDJjYywgIDB4MmI0MDAwM2UgfSwKKwl7IDB4NWZmZmMsICAweDE2YzAwMGJmIH0sCisJeyAweDUwMmQwLCAgMHgyYTgwMDAzYiB9LAorCXsgMHg1ZmZmYywgIDB4MTdjMDAwYmYgfSwKKwl7IDB4NTAyZDQsICAweDJhMDAwMDM5IH0sCisJeyAweDVmZmZjLCAgMHgxODgwMDBjMiB9LAorCXsgMHg1MDJkOCwgIDB4Mjk0MDAwMzYgfSwKKwl7IDB4NWZmZmMsICAweDE5YzAwMGM0IH0sCisJeyAweDUwMmRjLCAgMHgyODgwMDAzMiB9LAorCXsgMHg1ZmZmYywgIDB4MWFjMDAwYzUgfSwKKwl7IDB4NTAyZTAsICAweDI4MDAwMDJmIH0sCisJeyAweDVmZmZjLCAgMHgxYmMwMDBjNyB9LAorCXsgMHg1MDJlNCwgIDB4Mjc0MDAwMmMgfSwKKwl7IDB4NWZmZmMsICAweDFjYzAwMGM4IH0sCisJeyAweDUwMmU4LCAgMHgyNmMwMDAyOSB9LAorCXsgMHg1ZmZmYywgIDB4MWRjMDAwYzkgfSwKKwl7IDB4NTAyZWMsICAweDI2MDAwMDI3IH0sCisJeyAweDVmZmZjLCAgMHgxZWMwMDBjYyB9LAorCXsgMHg1MDJmMCwgIDB4MjUwMDAwMjQgfSwKKwl7IDB4NWZmZmMsICAweDIwMDAwMGNjIH0sCisJeyAweDUwMmY0LCAgMHgyNDgwMDAyMSB9LAorCXsgMHg1ZmZmYywgIDB4MjEwMDAwY2QgfSwKKwl7IDB4NTAyZjgsICAweDIzODAwMDIwIH0sCisJeyAweDVmZmZjLCAgMHgyMjAwMDBjZSB9LAorCXsgMHg1MDJmYywgIDB4MjMwMDAwMWQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF9kb3duc2NhbGVfeF90YWJsZV9QVDRUT1BUNltdID0geworCXsgMHg1ZmZmYywgIDB4NzQwMDA4YyB9LAorCXsgMHg1MDI4MCwgIDB4MzM4MDAwODggfSwKKwl7IDB4NWZmZmMsICAweDgwMDAwOGUgfSwKKwl7IDB4NTAyODQsICAweDMzNDAwMDg0IH0sCisJeyAweDVmZmZjLCAgMHg4NDAwMDkyIH0sCisJeyAweDUwMjg4LCAgMHgzMzAwMDA4MCB9LAorCXsgMHg1ZmZmYywgIDB4OTAwMDA5NCB9LAorCXsgMHg1MDI4YywgIDB4MzMwMDAwN2IgfSwKKwl7IDB4NWZmZmMsICAweDljMDAwOTggfSwKKwl7IDB4NTAyOTAsICAweDMyNDAwMDc3IH0sCisJeyAweDVmZmZjLCAgMHhhNDAwMDliIH0sCisJeyAweDUwMjk0LCAgMHgzMjAwMDA3MyB9LAorCXsgMHg1ZmZmYywgIDB4YjAwMDA5ZCB9LAorCXsgMHg1MDI5OCwgIDB4MzFjMDAwNmYgfSwKKwl7IDB4NWZmZmMsICAweGJjMDAwYTAgfSwKKwl7IDB4NTAyOWMsICAweDMxNDAwMDZiIH0sCisJeyAweDVmZmZjLCAgMHhjODAwMGEyIH0sCisJeyAweDUwMmEwLCAgMHgzMTAwMDA2NyB9LAorCXsgMHg1ZmZmYywgIDB4ZDgwMDBhNSB9LAorCXsgMHg1MDJhNCwgIDB4MzA4MDAwNjIgfSwKKwl7IDB4NWZmZmMsICAweGU0MDAwYTggfSwKKwl7IDB4NTAyYTgsICAweDJmYzAwMDVmIH0sCisJeyAweDVmZmZjLCAgMHhlYzAwMGFhIH0sCisJeyAweDUwMmFjLCAgMHgyZmMwMDA1YiB9LAorCXsgMHg1ZmZmYywgIDB4ZjgwMDBhZCB9LAorCXsgMHg1MDJiMCwgIDB4MmY0MDAwNTcgfSwKKwl7IDB4NWZmZmMsICAweDEwODAwMGIwIH0sCisJeyAweDUwMmI0LCAgMHgyZTQwMDA1NCB9LAorCXsgMHg1ZmZmYywgIDB4MTE0MDAwYjIgfSwKKwl7IDB4NTAyYjgsICAweDJlMDAwMDUwIH0sCisJeyAweDVmZmZjLCAgMHgxMjQwMDBiNCB9LAorCXsgMHg1MDJiYywgIDB4MmQ4MDAwNGMgfSwKKwl7IDB4NWZmZmMsICAweDEzMDAwMGI2IH0sCisJeyAweDUwMmMwLCAgMHgyZDAwMDA0OSB9LAorCXsgMHg1ZmZmYywgIDB4MTQwMDAwYjggfSwKKwl7IDB4NTAyYzQsICAweDJjODAwMDQ1IH0sCisJeyAweDVmZmZjLCAgMHgxNTAwMDBiOSB9LAorCXsgMHg1MDJjOCwgIDB4MmMwMDAwNDIgfSwKKwl7IDB4NWZmZmMsICAweDE1YzAwMGJkIH0sCisJeyAweDUwMmNjLCAgMHgyYjQwMDAzZSB9LAorCXsgMHg1ZmZmYywgIDB4MTZjMDAwYmYgfSwKKwl7IDB4NTAyZDAsICAweDJhODAwMDNiIH0sCisJeyAweDVmZmZjLCAgMHgxN2MwMDBiZiB9LAorCXsgMHg1MDJkNCwgIDB4MmEwMDAwMzkgfSwKKwl7IDB4NWZmZmMsICAweDE4ODAwMGMyIH0sCisJeyAweDUwMmQ4LCAgMHgyOTQwMDAzNiB9LAorCXsgMHg1ZmZmYywgIDB4MTljMDAwYzQgfSwKKwl7IDB4NTAyZGMsICAweDI4ODAwMDMyIH0sCisJeyAweDVmZmZjLCAgMHgxYWMwMDBjNSB9LAorCXsgMHg1MDJlMCwgIDB4MjgwMDAwMmYgfSwKKwl7IDB4NWZmZmMsICAweDFiYzAwMGM3IH0sCisJeyAweDUwMmU0LCAgMHgyNzQwMDAyYyB9LAorCXsgMHg1ZmZmYywgIDB4MWNjMDAwYzggfSwKKwl7IDB4NTAyZTgsICAweDI2YzAwMDI5IH0sCisJeyAweDVmZmZjLCAgMHgxZGMwMDBjOSB9LAorCXsgMHg1MDJlYywgIDB4MjYwMDAwMjcgfSwKKwl7IDB4NWZmZmMsICAweDFlYzAwMGNjIH0sCisJeyAweDUwMmYwLCAgMHgyNTAwMDAyNCB9LAorCXsgMHg1ZmZmYywgIDB4MjAwMDAwY2MgfSwKKwl7IDB4NTAyZjQsICAweDI0ODAwMDIxIH0sCisJeyAweDVmZmZjLCAgMHgyMTAwMDBjZCB9LAorCXsgMHg1MDJmOCwgIDB4MjM4MDAwMjAgfSwKKwl7IDB4NWZmZmMsICAweDIyMDAwMGNlIH0sCisJeyAweDUwMmZjLCAgMHgyMzAwMDAxZCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2Rvd25zY2FsZV94X3RhYmxlX1BUNlRPUFQ4W10gPSB7CisJeyAweDVmZmZjLCAgMHhmZTAwMDA3MCB9LAorCXsgMHg1MDI4MCwgIDB4NGJjMDAwNjggfSwKKwl7IDB4NWZmZmMsICAweGZlMDAwMDc4IH0sCisJeyAweDUwMjg0LCAgMHg0YmMwMDA2MCB9LAorCXsgMHg1ZmZmYywgIDB4ZmUwMDAwODAgfSwKKwl7IDB4NTAyODgsICAweDRiODAwMDU5IH0sCisJeyAweDVmZmZjLCAgMHhmZTAwMDA4OSB9LAorCXsgMHg1MDI4YywgIDB4NGIwMDAwNTIgfSwKKwl7IDB4NWZmZmMsICAweGZlNDAwMDkxIH0sCisJeyAweDUwMjkwLCAgMHg0YTgwMDA0YiB9LAorCXsgMHg1ZmZmYywgIDB4ZmU0MDAwOWEgfSwKKwl7IDB4NTAyOTQsICAweDRhMDAwMDQ0IH0sCisJeyAweDVmZmZjLCAgMHhmZTgwMDBhMyB9LAorCXsgMHg1MDI5OCwgIDB4NDk0MDAwM2QgfSwKKwl7IDB4NWZmZmMsICAweGZlYzAwMGFjIH0sCisJeyAweDUwMjljLCAgMHg0ODQwMDAzNyB9LAorCXsgMHg1ZmZmYywgIDB4ZmYwMDAwYjQgfSwKKwl7IDB4NTAyYTAsICAweDQ3ODAwMDMxIH0sCisJeyAweDVmZmZjLCAgMHhmZjgwMDBiZCB9LAorCXsgMHg1MDJhNCwgIDB4NDY0MDAwMmIgfSwKKwl7IDB4NWZmZmMsICAweGM1IH0sCisJeyAweDUwMmE4LCAgMHg0NTAwMDAyNiB9LAorCXsgMHg1ZmZmYywgIDB4ODAwMGNlIH0sCisJeyAweDUwMmFjLCAgMHg0MzgwMDAyMSB9LAorCXsgMHg1ZmZmYywgIDB4MTAwMDBkNiB9LAorCXsgMHg1MDJiMCwgIDB4NDI0MDAwMWMgfSwKKwl7IDB4NWZmZmMsICAweDE4MDAwZGYgfSwKKwl7IDB4NTAyYjQsICAweDQwODAwMDE4IH0sCisJeyAweDVmZmZjLCAgMHgyNDAwMGU2IH0sCisJeyAweDUwMmI4LCAgMHgzZjAwMDAxNCB9LAorCXsgMHg1ZmZmYywgIDB4MzAwMDBlZSB9LAorCXsgMHg1MDJiYywgIDB4M2Q0MDAwMTAgfSwKKwl7IDB4NWZmZmMsICAweDQwMDAwZjUgfSwKKwl7IDB4NTAyYzAsICAweDNiODAwMDBjIH0sCisJeyAweDVmZmZjLCAgMHg1MDAwMGZjIH0sCisJeyAweDUwMmM0LCAgMHgzOTgwMDAwOSB9LAorCXsgMHg1ZmZmYywgIDB4NjAwMDEwMiB9LAorCXsgMHg1MDJjOCwgIDB4MzdjMDAwMDYgfSwKKwl7IDB4NWZmZmMsICAweDcwMDAxMDkgfSwKKwl7IDB4NTAyY2MsICAweDM1ODAwMDA0IH0sCisJeyAweDVmZmZjLCAgMHg4NDAwMTBlIH0sCisJeyAweDUwMmQwLCAgMHgzMzgwMDAwMiB9LAorCXsgMHg1ZmZmYywgIDB4OTgwMDExNCB9LAorCXsgMHg1MDJkNCwgIDB4MzE0MDAwMDAgfSwKKwl7IDB4NWZmZmMsICAweGFjMDAxMTkgfSwKKwl7IDB4NTAyZDgsICAweDJmNDAwM2ZlIH0sCisJeyAweDVmZmZjLCAgMHhjNDAwMTFlIH0sCisJeyAweDUwMmRjLCAgMHgyZDAwMDNmYyB9LAorCXsgMHg1ZmZmYywgIDB4ZGMwMDEyMSB9LAorCXsgMHg1MDJlMCwgIDB4MmIwMDAzZmIgfSwKKwl7IDB4NWZmZmMsICAweGY0MDAxMjUgfSwKKwl7IDB4NTAyZTQsICAweDI4YzAwM2ZhIH0sCisJeyAweDVmZmZjLCAgMHgxMTAwMDEyOCB9LAorCXsgMHg1MDJlOCwgIDB4MjY4MDAzZjkgfSwKKwl7IDB4NWZmZmMsICAweDEyYzAwMTJhIH0sCisJeyAweDUwMmVjLCAgMHgyNDQwMDNmOSB9LAorCXsgMHg1ZmZmYywgIDB4MTQ4MDAxMmMgfSwKKwl7IDB4NTAyZjAsICAweDIyNDAwM2Y4IH0sCisJeyAweDVmZmZjLCAgMHgxNjQwMDEyZSB9LAorCXsgMHg1MDJmNCwgIDB4MjAwMDAzZjggfSwKKwl7IDB4NWZmZmMsICAweDE4MDAwMTJmIH0sCisJeyAweDUwMmY4LCAgMHgxZTAwMDNmOCB9LAorCXsgMHg1ZmZmYywgIDB4MWEwMDAxMmYgfSwKKwl7IDB4NTAyZmMsICAweDFjMDAwM2Y4IH0sCit9OworCitzdGF0aWMgc3RydWN0IG1kcF90YWJsZV9lbnRyeSBtZHBfZG93bnNjYWxlX3hfdGFibGVfUFQ4VE8xW10gPSB7CisJeyAweDVmZmZjLCAgMHgwIH0sCisJeyAweDUwMjgwLCAgMHg3ZmMwMDAwMCB9LAorCXsgMHg1ZmZmYywgIDB4ZmY4MDAwMGQgfSwKKwl7IDB4NTAyODQsICAweDdlYzAwM2Y5IH0sCisJeyAweDVmZmZjLCAgMHhmZWMwMDAxYyB9LAorCXsgMHg1MDI4OCwgIDB4N2Q0MDAzZjMgfSwKKwl7IDB4NWZmZmMsICAweGZlNDAwMDJiIH0sCisJeyAweDUwMjhjLCAgMHg3YjgwMDNlZCB9LAorCXsgMHg1ZmZmYywgIDB4ZmQ4MDAwM2MgfSwKKwl7IDB4NTAyOTAsICAweDc5NDAwM2U4IH0sCisJeyAweDVmZmZjLCAgMHhmY2MwMDA0ZCB9LAorCXsgMHg1MDI5NCwgIDB4NzZjMDAzZTQgfSwKKwl7IDB4NWZmZmMsICAweGZjNDAwMDVmIH0sCisJeyAweDUwMjk4LCAgMHg3M2MwMDNlMCB9LAorCXsgMHg1ZmZmYywgIDB4ZmI4MDAwNzEgfSwKKwl7IDB4NTAyOWMsICAweDcwODAwM2RlIH0sCisJeyAweDVmZmZjLCAgMHhmYWMwMDA4NSB9LAorCXsgMHg1MDJhMCwgIDB4NmQwMDAzZGIgfSwKKwl7IDB4NWZmZmMsICAweGZhMDAwMDk4IH0sCisJeyAweDUwMmE0LCAgMHg2OTgwMDNkOSB9LAorCXsgMHg1ZmZmYywgIDB4Zjk4MDAwYWMgfSwKKwl7IDB4NTAyYTgsICAweDY1NDAwM2Q4IH0sCisJeyAweDVmZmZjLCAgMHhmOGMwMDBjMSB9LAorCXsgMHg1MDJhYywgIDB4NjEwMDAzZDcgfSwKKwl7IDB4NWZmZmMsICAweGY4NDAwMGQ1IH0sCisJeyAweDUwMmIwLCAgMHg1YzgwMDNkNyB9LAorCXsgMHg1ZmZmYywgIDB4ZjdjMDAwZTkgfSwKKwl7IDB4NTAyYjQsICAweDU4MDAwM2Q3IH0sCisJeyAweDVmZmZjLCAgMHhmNzQwMDBmZCB9LAorCXsgMHg1MDJiOCwgIDB4NTM0MDAzZDggfSwKKwl7IDB4NWZmZmMsICAweGY2YzAwMTEyIH0sCisJeyAweDUwMmJjLCAgMHg0ZTgwMDNkOCB9LAorCXsgMHg1ZmZmYywgIDB4ZjY4MDAxMjYgfSwKKwl7IDB4NTAyYzAsICAweDQ5NDAwM2RhIH0sCisJeyAweDVmZmZjLCAgMHhmNjAwMDEzYSB9LAorCXsgMHg1MDJjNCwgIDB4NDQ4MDAzZGIgfSwKKwl7IDB4NWZmZmMsICAweGY2MDAwMTRkIH0sCisJeyAweDUwMmM4LCAgMHgzZjQwMDNkZCB9LAorCXsgMHg1ZmZmYywgIDB4ZjVjMDAxNjAgfSwKKwl7IDB4NTAyY2MsICAweDNhNDAwM2RmIH0sCisJeyAweDVmZmZjLCAgMHhmNWMwMDE3MiB9LAorCXsgMHg1MDJkMCwgIDB4MzU0MDAzZTEgfSwKKwl7IDB4NWZmZmMsICAweGY1YzAwMTg0IH0sCisJeyAweDUwMmQ0LCAgMHgzMDQwMDNlMyB9LAorCXsgMHg1ZmZmYywgIDB4ZjYwMDAxOTUgfSwKKwl7IDB4NTAyZDgsICAweDJiMDAwM2U2IH0sCisJeyAweDVmZmZjLCAgMHhmNjQwMDFhNiB9LAorCXsgMHg1MDJkYywgIDB4MjYwMDAzZTggfSwKKwl7IDB4NWZmZmMsICAweGY2YzAwMWI0IH0sCisJeyAweDUwMmUwLCAgMHgyMTQwMDNlYiB9LAorCXsgMHg1ZmZmYywgIDB4Zjc4MDAxYzIgfSwKKwl7IDB4NTAyZTQsICAweDFjNDAwM2VlIH0sCisJeyAweDVmZmZjLCAgMHhmODAwMDFjZiB9LAorCXsgMHg1MDJlOCwgIDB4MTdjMDAzZjEgfSwKKwl7IDB4NWZmZmMsICAweGY5MDAwMWRiIH0sCisJeyAweDUwMmVjLCAgMHgxMzQwMDNmMyB9LAorCXsgMHg1ZmZmYywgIDB4ZmEwMDAxZTUgfSwKKwl7IDB4NTAyZjAsICAweGYwMDAzZjYgfSwKKwl7IDB4NWZmZmMsICAweGZiNDAwMWVlIH0sCisJeyAweDUwMmY0LCAgMHhhYzAwM2Y5IH0sCisJeyAweDVmZmZjLCAgMHhmY2MwMDFmNSB9LAorCXsgMHg1MDJmOCwgIDB4NzAwMDNmYiB9LAorCXsgMHg1ZmZmYywgIDB4ZmU0MDAxZmIgfSwKKwl7IDB4NTAyZmMsICAweDM0MDAzZmUgfSwKK307CisKK3N0cnVjdCBtZHBfdGFibGVfZW50cnkgKm1kcF9kb3duc2NhbGVfeF90YWJsZVtNRFBfRE9XTlNDQUxFX01BWF0gPSB7CisJW01EUF9ET1dOU0NBTEVfUFQyVE9QVDRdID0gbWRwX2Rvd25zY2FsZV94X3RhYmxlX1BUMlRPUFQ0LAorCVtNRFBfRE9XTlNDQUxFX1BUNFRPUFQ2XSA9IG1kcF9kb3duc2NhbGVfeF90YWJsZV9QVDRUT1BUNiwKKwlbTURQX0RPV05TQ0FMRV9QVDZUT1BUOF0gPSBtZHBfZG93bnNjYWxlX3hfdGFibGVfUFQ2VE9QVDgsCisJW01EUF9ET1dOU0NBTEVfUFQ4VE8xXSAgPSBtZHBfZG93bnNjYWxlX3hfdGFibGVfUFQ4VE8xLAorfTsKKworc3RhdGljIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2Rvd25zY2FsZV95X3RhYmxlX1BUMlRPUFQ0W10gPSB7CisJeyAweDVmZmZjLCAgMHg3NDAwMDhjIH0sCisJeyAweDUwMzAwLCAgMHgzMzgwMDA4OCB9LAorCXsgMHg1ZmZmYywgIDB4ODAwMDA4ZSB9LAorCXsgMHg1MDMwNCwgIDB4MzM0MDAwODQgfSwKKwl7IDB4NWZmZmMsICAweDg0MDAwOTIgfSwKKwl7IDB4NTAzMDgsICAweDMzMDAwMDgwIH0sCisJeyAweDVmZmZjLCAgMHg5MDAwMDk0IH0sCisJeyAweDUwMzBjLCAgMHgzMzAwMDA3YiB9LAorCXsgMHg1ZmZmYywgIDB4OWMwMDA5OCB9LAorCXsgMHg1MDMxMCwgIDB4MzI0MDAwNzcgfSwKKwl7IDB4NWZmZmMsICAweGE0MDAwOWIgfSwKKwl7IDB4NTAzMTQsICAweDMyMDAwMDczIH0sCisJeyAweDVmZmZjLCAgMHhiMDAwMDlkIH0sCisJeyAweDUwMzE4LCAgMHgzMWMwMDA2ZiB9LAorCXsgMHg1ZmZmYywgIDB4YmMwMDBhMCB9LAorCXsgMHg1MDMxYywgIDB4MzE0MDAwNmIgfSwKKwl7IDB4NWZmZmMsICAweGM4MDAwYTIgfSwKKwl7IDB4NTAzMjAsICAweDMxMDAwMDY3IH0sCisJeyAweDVmZmZjLCAgMHhkODAwMGE1IH0sCisJeyAweDUwMzI0LCAgMHgzMDgwMDA2MiB9LAorCXsgMHg1ZmZmYywgIDB4ZTQwMDBhOCB9LAorCXsgMHg1MDMyOCwgIDB4MmZjMDAwNWYgfSwKKwl7IDB4NWZmZmMsICAweGVjMDAwYWEgfSwKKwl7IDB4NTAzMmMsICAweDJmYzAwMDViIH0sCisJeyAweDVmZmZjLCAgMHhmODAwMGFkIH0sCisJeyAweDUwMzMwLCAgMHgyZjQwMDA1NyB9LAorCXsgMHg1ZmZmYywgIDB4MTA4MDAwYjAgfSwKKwl7IDB4NTAzMzQsICAweDJlNDAwMDU0IH0sCisJeyAweDVmZmZjLCAgMHgxMTQwMDBiMiB9LAorCXsgMHg1MDMzOCwgIDB4MmUwMDAwNTAgfSwKKwl7IDB4NWZmZmMsICAweDEyNDAwMGI0IH0sCisJeyAweDUwMzNjLCAgMHgyZDgwMDA0YyB9LAorCXsgMHg1ZmZmYywgIDB4MTMwMDAwYjYgfSwKKwl7IDB4NTAzNDAsICAweDJkMDAwMDQ5IH0sCisJeyAweDVmZmZjLCAgMHgxNDAwMDBiOCB9LAorCXsgMHg1MDM0NCwgIDB4MmM4MDAwNDUgfSwKKwl7IDB4NWZmZmMsICAweDE1MDAwMGI5IH0sCisJeyAweDUwMzQ4LCAgMHgyYzAwMDA0MiB9LAorCXsgMHg1ZmZmYywgIDB4MTVjMDAwYmQgfSwKKwl7IDB4NTAzNGMsICAweDJiNDAwMDNlIH0sCisJeyAweDVmZmZjLCAgMHgxNmMwMDBiZiB9LAorCXsgMHg1MDM1MCwgIDB4MmE4MDAwM2IgfSwKKwl7IDB4NWZmZmMsICAweDE3YzAwMGJmIH0sCisJeyAweDUwMzU0LCAgMHgyYTAwMDAzOSB9LAorCXsgMHg1ZmZmYywgIDB4MTg4MDAwYzIgfSwKKwl7IDB4NTAzNTgsICAweDI5NDAwMDM2IH0sCisJeyAweDVmZmZjLCAgMHgxOWMwMDBjNCB9LAorCXsgMHg1MDM1YywgIDB4Mjg4MDAwMzIgfSwKKwl7IDB4NWZmZmMsICAweDFhYzAwMGM1IH0sCisJeyAweDUwMzYwLCAgMHgyODAwMDAyZiB9LAorCXsgMHg1ZmZmYywgIDB4MWJjMDAwYzcgfSwKKwl7IDB4NTAzNjQsICAweDI3NDAwMDJjIH0sCisJeyAweDVmZmZjLCAgMHgxY2MwMDBjOCB9LAorCXsgMHg1MDM2OCwgIDB4MjZjMDAwMjkgfSwKKwl7IDB4NWZmZmMsICAweDFkYzAwMGM5IH0sCisJeyAweDUwMzZjLCAgMHgyNjAwMDAyNyB9LAorCXsgMHg1ZmZmYywgIDB4MWVjMDAwY2MgfSwKKwl7IDB4NTAzNzAsICAweDI1MDAwMDI0IH0sCisJeyAweDVmZmZjLCAgMHgyMDAwMDBjYyB9LAorCXsgMHg1MDM3NCwgIDB4MjQ4MDAwMjEgfSwKKwl7IDB4NWZmZmMsICAweDIxMDAwMGNkIH0sCisJeyAweDUwMzc4LCAgMHgyMzgwMDAyMCB9LAorCXsgMHg1ZmZmYywgIDB4MjIwMDAwY2UgfSwKKwl7IDB4NTAzN2MsICAweDIzMDAwMDFkIH0sCit9OworCitzdGF0aWMgc3RydWN0IG1kcF90YWJsZV9lbnRyeSBtZHBfZG93bnNjYWxlX3lfdGFibGVfUFQ0VE9QVDZbXSA9IHsKKwl7IDB4NWZmZmMsICAweDc0MDAwOGMgfSwKKwl7IDB4NTAzMDAsICAweDMzODAwMDg4IH0sCisJeyAweDVmZmZjLCAgMHg4MDAwMDhlIH0sCisJeyAweDUwMzA0LCAgMHgzMzQwMDA4NCB9LAorCXsgMHg1ZmZmYywgIDB4ODQwMDA5MiB9LAorCXsgMHg1MDMwOCwgIDB4MzMwMDAwODAgfSwKKwl7IDB4NWZmZmMsICAweDkwMDAwOTQgfSwKKwl7IDB4NTAzMGMsICAweDMzMDAwMDdiIH0sCisJeyAweDVmZmZjLCAgMHg5YzAwMDk4IH0sCisJeyAweDUwMzEwLCAgMHgzMjQwMDA3NyB9LAorCXsgMHg1ZmZmYywgIDB4YTQwMDA5YiB9LAorCXsgMHg1MDMxNCwgIDB4MzIwMDAwNzMgfSwKKwl7IDB4NWZmZmMsICAweGIwMDAwOWQgfSwKKwl7IDB4NTAzMTgsICAweDMxYzAwMDZmIH0sCisJeyAweDVmZmZjLCAgMHhiYzAwMGEwIH0sCisJeyAweDUwMzFjLCAgMHgzMTQwMDA2YiB9LAorCXsgMHg1ZmZmYywgIDB4YzgwMDBhMiB9LAorCXsgMHg1MDMyMCwgIDB4MzEwMDAwNjcgfSwKKwl7IDB4NWZmZmMsICAweGQ4MDAwYTUgfSwKKwl7IDB4NTAzMjQsICAweDMwODAwMDYyIH0sCisJeyAweDVmZmZjLCAgMHhlNDAwMGE4IH0sCisJeyAweDUwMzI4LCAgMHgyZmMwMDA1ZiB9LAorCXsgMHg1ZmZmYywgIDB4ZWMwMDBhYSB9LAorCXsgMHg1MDMyYywgIDB4MmZjMDAwNWIgfSwKKwl7IDB4NWZmZmMsICAweGY4MDAwYWQgfSwKKwl7IDB4NTAzMzAsICAweDJmNDAwMDU3IH0sCisJeyAweDVmZmZjLCAgMHgxMDgwMDBiMCB9LAorCXsgMHg1MDMzNCwgIDB4MmU0MDAwNTQgfSwKKwl7IDB4NWZmZmMsICAweDExNDAwMGIyIH0sCisJeyAweDUwMzM4LCAgMHgyZTAwMDA1MCB9LAorCXsgMHg1ZmZmYywgIDB4MTI0MDAwYjQgfSwKKwl7IDB4NTAzM2MsICAweDJkODAwMDRjIH0sCisJeyAweDVmZmZjLCAgMHgxMzAwMDBiNiB9LAorCXsgMHg1MDM0MCwgIDB4MmQwMDAwNDkgfSwKKwl7IDB4NWZmZmMsICAweDE0MDAwMGI4IH0sCisJeyAweDUwMzQ0LCAgMHgyYzgwMDA0NSB9LAorCXsgMHg1ZmZmYywgIDB4MTUwMDAwYjkgfSwKKwl7IDB4NTAzNDgsICAweDJjMDAwMDQyIH0sCisJeyAweDVmZmZjLCAgMHgxNWMwMDBiZCB9LAorCXsgMHg1MDM0YywgIDB4MmI0MDAwM2UgfSwKKwl7IDB4NWZmZmMsICAweDE2YzAwMGJmIH0sCisJeyAweDUwMzUwLCAgMHgyYTgwMDAzYiB9LAorCXsgMHg1ZmZmYywgIDB4MTdjMDAwYmYgfSwKKwl7IDB4NTAzNTQsICAweDJhMDAwMDM5IH0sCisJeyAweDVmZmZjLCAgMHgxODgwMDBjMiB9LAorCXsgMHg1MDM1OCwgIDB4Mjk0MDAwMzYgfSwKKwl7IDB4NWZmZmMsICAweDE5YzAwMGM0IH0sCisJeyAweDUwMzVjLCAgMHgyODgwMDAzMiB9LAorCXsgMHg1ZmZmYywgIDB4MWFjMDAwYzUgfSwKKwl7IDB4NTAzNjAsICAweDI4MDAwMDJmIH0sCisJeyAweDVmZmZjLCAgMHgxYmMwMDBjNyB9LAorCXsgMHg1MDM2NCwgIDB4Mjc0MDAwMmMgfSwKKwl7IDB4NWZmZmMsICAweDFjYzAwMGM4IH0sCisJeyAweDUwMzY4LCAgMHgyNmMwMDAyOSB9LAorCXsgMHg1ZmZmYywgIDB4MWRjMDAwYzkgfSwKKwl7IDB4NTAzNmMsICAweDI2MDAwMDI3IH0sCisJeyAweDVmZmZjLCAgMHgxZWMwMDBjYyB9LAorCXsgMHg1MDM3MCwgIDB4MjUwMDAwMjQgfSwKKwl7IDB4NWZmZmMsICAweDIwMDAwMGNjIH0sCisJeyAweDUwMzc0LCAgMHgyNDgwMDAyMSB9LAorCXsgMHg1ZmZmYywgIDB4MjEwMDAwY2QgfSwKKwl7IDB4NTAzNzgsICAweDIzODAwMDIwIH0sCisJeyAweDVmZmZjLCAgMHgyMjAwMDBjZSB9LAorCXsgMHg1MDM3YywgIDB4MjMwMDAwMWQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IG1kcF9kb3duc2NhbGVfeV90YWJsZV9QVDZUT1BUOFtdID0geworCXsgMHg1ZmZmYywgIDB4ZmUwMDAwNzAgfSwKKwl7IDB4NTAzMDAsICAweDRiYzAwMDY4IH0sCisJeyAweDVmZmZjLCAgMHhmZTAwMDA3OCB9LAorCXsgMHg1MDMwNCwgIDB4NGJjMDAwNjAgfSwKKwl7IDB4NWZmZmMsICAweGZlMDAwMDgwIH0sCisJeyAweDUwMzA4LCAgMHg0YjgwMDA1OSB9LAorCXsgMHg1ZmZmYywgIDB4ZmUwMDAwODkgfSwKKwl7IDB4NTAzMGMsICAweDRiMDAwMDUyIH0sCisJeyAweDVmZmZjLCAgMHhmZTQwMDA5MSB9LAorCXsgMHg1MDMxMCwgIDB4NGE4MDAwNGIgfSwKKwl7IDB4NWZmZmMsICAweGZlNDAwMDlhIH0sCisJeyAweDUwMzE0LCAgMHg0YTAwMDA0NCB9LAorCXsgMHg1ZmZmYywgIDB4ZmU4MDAwYTMgfSwKKwl7IDB4NTAzMTgsICAweDQ5NDAwMDNkIH0sCisJeyAweDVmZmZjLCAgMHhmZWMwMDBhYyB9LAorCXsgMHg1MDMxYywgIDB4NDg0MDAwMzcgfSwKKwl7IDB4NWZmZmMsICAweGZmMDAwMGI0IH0sCisJeyAweDUwMzIwLCAgMHg0NzgwMDAzMSB9LAorCXsgMHg1ZmZmYywgIDB4ZmY4MDAwYmQgfSwKKwl7IDB4NTAzMjQsICAweDQ2NDAwMDJiIH0sCisJeyAweDVmZmZjLCAgMHhjNSB9LAorCXsgMHg1MDMyOCwgIDB4NDUwMDAwMjYgfSwKKwl7IDB4NWZmZmMsICAweDgwMDBjZSB9LAorCXsgMHg1MDMyYywgIDB4NDM4MDAwMjEgfSwKKwl7IDB4NWZmZmMsICAweDEwMDAwZDYgfSwKKwl7IDB4NTAzMzAsICAweDQyNDAwMDFjIH0sCisJeyAweDVmZmZjLCAgMHgxODAwMGRmIH0sCisJeyAweDUwMzM0LCAgMHg0MDgwMDAxOCB9LAorCXsgMHg1ZmZmYywgIDB4MjQwMDBlNiB9LAorCXsgMHg1MDMzOCwgIDB4M2YwMDAwMTQgfSwKKwl7IDB4NWZmZmMsICAweDMwMDAwZWUgfSwKKwl7IDB4NTAzM2MsICAweDNkNDAwMDEwIH0sCisJeyAweDVmZmZjLCAgMHg0MDAwMGY1IH0sCisJeyAweDUwMzQwLCAgMHgzYjgwMDAwYyB9LAorCXsgMHg1ZmZmYywgIDB4NTAwMDBmYyB9LAorCXsgMHg1MDM0NCwgIDB4Mzk4MDAwMDkgfSwKKwl7IDB4NWZmZmMsICAweDYwMDAxMDIgfSwKKwl7IDB4NTAzNDgsICAweDM3YzAwMDA2IH0sCisJeyAweDVmZmZjLCAgMHg3MDAwMTA5IH0sCisJeyAweDUwMzRjLCAgMHgzNTgwMDAwNCB9LAorCXsgMHg1ZmZmYywgIDB4ODQwMDEwZSB9LAorCXsgMHg1MDM1MCwgIDB4MzM4MDAwMDIgfSwKKwl7IDB4NWZmZmMsICAweDk4MDAxMTQgfSwKKwl7IDB4NTAzNTQsICAweDMxNDAwMDAwIH0sCisJeyAweDVmZmZjLCAgMHhhYzAwMTE5IH0sCisJeyAweDUwMzU4LCAgMHgyZjQwMDNmZSB9LAorCXsgMHg1ZmZmYywgIDB4YzQwMDExZSB9LAorCXsgMHg1MDM1YywgIDB4MmQwMDAzZmMgfSwKKwl7IDB4NWZmZmMsICAweGRjMDAxMjEgfSwKKwl7IDB4NTAzNjAsICAweDJiMDAwM2ZiIH0sCisJeyAweDVmZmZjLCAgMHhmNDAwMTI1IH0sCisJeyAweDUwMzY0LCAgMHgyOGMwMDNmYSB9LAorCXsgMHg1ZmZmYywgIDB4MTEwMDAxMjggfSwKKwl7IDB4NTAzNjgsICAweDI2ODAwM2Y5IH0sCisJeyAweDVmZmZjLCAgMHgxMmMwMDEyYSB9LAorCXsgMHg1MDM2YywgIDB4MjQ0MDAzZjkgfSwKKwl7IDB4NWZmZmMsICAweDE0ODAwMTJjIH0sCisJeyAweDUwMzcwLCAgMHgyMjQwMDNmOCB9LAorCXsgMHg1ZmZmYywgIDB4MTY0MDAxMmUgfSwKKwl7IDB4NTAzNzQsICAweDIwMDAwM2Y4IH0sCisJeyAweDVmZmZjLCAgMHgxODAwMDEyZiB9LAorCXsgMHg1MDM3OCwgIDB4MWUwMDAzZjggfSwKKwl7IDB4NWZmZmMsICAweDFhMDAwMTJmIH0sCisJeyAweDUwMzdjLCAgMHgxYzAwMDNmOCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2Rvd25zY2FsZV95X3RhYmxlX1BUOFRPMVtdID0geworCXsgMHg1ZmZmYywgIDB4MCB9LAorCXsgMHg1MDMwMCwgIDB4N2ZjMDAwMDAgfSwKKwl7IDB4NWZmZmMsICAweGZmODAwMDBkIH0sCisJeyAweDUwMzA0LCAgMHg3ZWMwMDNmOSB9LAorCXsgMHg1ZmZmYywgIDB4ZmVjMDAwMWMgfSwKKwl7IDB4NTAzMDgsICAweDdkNDAwM2YzIH0sCisJeyAweDVmZmZjLCAgMHhmZTQwMDAyYiB9LAorCXsgMHg1MDMwYywgIDB4N2I4MDAzZWQgfSwKKwl7IDB4NWZmZmMsICAweGZkODAwMDNjIH0sCisJeyAweDUwMzEwLCAgMHg3OTQwMDNlOCB9LAorCXsgMHg1ZmZmYywgIDB4ZmNjMDAwNGQgfSwKKwl7IDB4NTAzMTQsICAweDc2YzAwM2U0IH0sCisJeyAweDVmZmZjLCAgMHhmYzQwMDA1ZiB9LAorCXsgMHg1MDMxOCwgIDB4NzNjMDAzZTAgfSwKKwl7IDB4NWZmZmMsICAweGZiODAwMDcxIH0sCisJeyAweDUwMzFjLCAgMHg3MDgwMDNkZSB9LAorCXsgMHg1ZmZmYywgIDB4ZmFjMDAwODUgfSwKKwl7IDB4NTAzMjAsICAweDZkMDAwM2RiIH0sCisJeyAweDVmZmZjLCAgMHhmYTAwMDA5OCB9LAorCXsgMHg1MDMyNCwgIDB4Njk4MDAzZDkgfSwKKwl7IDB4NWZmZmMsICAweGY5ODAwMGFjIH0sCisJeyAweDUwMzI4LCAgMHg2NTQwMDNkOCB9LAorCXsgMHg1ZmZmYywgIDB4ZjhjMDAwYzEgfSwKKwl7IDB4NTAzMmMsICAweDYxMDAwM2Q3IH0sCisJeyAweDVmZmZjLCAgMHhmODQwMDBkNSB9LAorCXsgMHg1MDMzMCwgIDB4NWM4MDAzZDcgfSwKKwl7IDB4NWZmZmMsICAweGY3YzAwMGU5IH0sCisJeyAweDUwMzM0LCAgMHg1ODAwMDNkNyB9LAorCXsgMHg1ZmZmYywgIDB4Zjc0MDAwZmQgfSwKKwl7IDB4NTAzMzgsICAweDUzNDAwM2Q4IH0sCisJeyAweDVmZmZjLCAgMHhmNmMwMDExMiB9LAorCXsgMHg1MDMzYywgIDB4NGU4MDAzZDggfSwKKwl7IDB4NWZmZmMsICAweGY2ODAwMTI2IH0sCisJeyAweDUwMzQwLCAgMHg0OTQwMDNkYSB9LAorCXsgMHg1ZmZmYywgIDB4ZjYwMDAxM2EgfSwKKwl7IDB4NTAzNDQsICAweDQ0ODAwM2RiIH0sCisJeyAweDVmZmZjLCAgMHhmNjAwMDE0ZCB9LAorCXsgMHg1MDM0OCwgIDB4M2Y0MDAzZGQgfSwKKwl7IDB4NWZmZmMsICAweGY1YzAwMTYwIH0sCisJeyAweDUwMzRjLCAgMHgzYTQwMDNkZiB9LAorCXsgMHg1ZmZmYywgIDB4ZjVjMDAxNzIgfSwKKwl7IDB4NTAzNTAsICAweDM1NDAwM2UxIH0sCisJeyAweDVmZmZjLCAgMHhmNWMwMDE4NCB9LAorCXsgMHg1MDM1NCwgIDB4MzA0MDAzZTMgfSwKKwl7IDB4NWZmZmMsICAweGY2MDAwMTk1IH0sCisJeyAweDUwMzU4LCAgMHgyYjAwMDNlNiB9LAorCXsgMHg1ZmZmYywgIDB4ZjY0MDAxYTYgfSwKKwl7IDB4NTAzNWMsICAweDI2MDAwM2U4IH0sCisJeyAweDVmZmZjLCAgMHhmNmMwMDFiNCB9LAorCXsgMHg1MDM2MCwgIDB4MjE0MDAzZWIgfSwKKwl7IDB4NWZmZmMsICAweGY3ODAwMWMyIH0sCisJeyAweDUwMzY0LCAgMHgxYzQwMDNlZSB9LAorCXsgMHg1ZmZmYywgIDB4ZjgwMDAxY2YgfSwKKwl7IDB4NTAzNjgsICAweDE3YzAwM2YxIH0sCisJeyAweDVmZmZjLCAgMHhmOTAwMDFkYiB9LAorCXsgMHg1MDM2YywgIDB4MTM0MDAzZjMgfSwKKwl7IDB4NWZmZmMsICAweGZhMDAwMWU1IH0sCisJeyAweDUwMzcwLCAgMHhmMDAwM2Y2IH0sCisJeyAweDVmZmZjLCAgMHhmYjQwMDFlZSB9LAorCXsgMHg1MDM3NCwgIDB4YWMwMDNmOSB9LAorCXsgMHg1ZmZmYywgIDB4ZmNjMDAxZjUgfSwKKwl7IDB4NTAzNzgsICAweDcwMDAzZmIgfSwKKwl7IDB4NWZmZmMsICAweGZlNDAwMWZiIH0sCisJeyAweDUwMzdjLCAgMHgzNDAwM2ZlIH0sCit9OworCitzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5ICptZHBfZG93bnNjYWxlX3lfdGFibGVbTURQX0RPV05TQ0FMRV9NQVhdID0geworCVtNRFBfRE9XTlNDQUxFX1BUMlRPUFQ0XSA9IG1kcF9kb3duc2NhbGVfeV90YWJsZV9QVDJUT1BUNCwKKwlbTURQX0RPV05TQ0FMRV9QVDRUT1BUNl0gPSBtZHBfZG93bnNjYWxlX3lfdGFibGVfUFQ0VE9QVDYsCisJW01EUF9ET1dOU0NBTEVfUFQ2VE9QVDhdID0gbWRwX2Rvd25zY2FsZV95X3RhYmxlX1BUNlRPUFQ4LAorCVtNRFBfRE9XTlNDQUxFX1BUOFRPMV0gID0gbWRwX2Rvd25zY2FsZV95X3RhYmxlX1BUOFRPMSwKK307CisKK3N0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX2dhdXNzaWFuX2JsdXJfdGFibGVbXSA9IHsKKwkvKiBtYXggdmFyaWFuY2UgKi8KKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyODAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyODQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyODgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyOGMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyOTAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyOTQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyOTgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyOWMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYTAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYTQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYTgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYWMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYjAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYjQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYjgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYzAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYzQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyYzgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyY2MsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZDAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZDQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZDgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZGMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZTAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZTQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZTgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZWMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZjAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZjQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZjgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAyZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMDAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMDQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMDgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMGMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMTAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMTQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMTgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMWMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMjAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMjQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMjgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMzAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMzQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzMzgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzM2MsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNDAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNDQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNDgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNGMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNTAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNTQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNTgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNWMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNjAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNjQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNjgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNzAsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNzQsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzNzgsIDB4MjAwMDAwODAgfSwKKwl7IDB4NWZmZmMsIDB4MjAwMDAwODAgfSwKKwl7IDB4NTAzN2MsIDB4MjAwMDAwODAgfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfc2NhbGVfdGFibGVzLmggYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfc2NhbGVfdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwNzdiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9zY2FsZV90YWJsZXMuaApAQCAtMCwwICsxLDM4IEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbV9mYi9tZHBfc2NhbGVfdGFibGVzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01EUF9TQ0FMRV9UQUJMRVNfSF8KKyNkZWZpbmUgX01EUF9TQ0FMRV9UQUJMRVNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5IHsKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3QgdmFsOworfTsKKworZXh0ZXJuIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgbWRwX3Vwc2NhbGVfdGFibGVbNjRdOworCitlbnVtIHsKKwlNRFBfRE9XTlNDQUxFX1BUMlRPUFQ0LAorCU1EUF9ET1dOU0NBTEVfUFQ0VE9QVDYsCisJTURQX0RPV05TQ0FMRV9QVDZUT1BUOCwKKwlNRFBfRE9XTlNDQUxFX1BUOFRPMSwKKwlNRFBfRE9XTlNDQUxFX01BWCwKK307CisKK2V4dGVybiBzdHJ1Y3QgbWRwX3RhYmxlX2VudHJ5ICptZHBfZG93bnNjYWxlX3hfdGFibGVbTURQX0RPV05TQ0FMRV9NQVhdOworZXh0ZXJuIHN0cnVjdCBtZHBfdGFibGVfZW50cnkgKm1kcF9kb3duc2NhbGVfeV90YWJsZVtNRFBfRE9XTlNDQUxFX01BWF07CitleHRlcm4gc3RydWN0IG1kcF90YWJsZV9lbnRyeSBtZHBfZ2F1c3NpYW5fYmx1cl90YWJsZVtdOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21zbV9mYi5jIGIvZHJpdmVycy92aWRlby9tc20vbXNtX2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxMDFkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21zbV9mYi5jCkBAIC0wLDAgKzEsNjM2IEBACisvKiBkcml2ZXJzL3ZpZGVvL21zbS9tc21fZmIuYworICoKKyAqIENvcmUgTVNNIGZyYW1lYnVmZmVyIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlIEluY29ycG9yYXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbXNtX21kcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjZGVmaW5lIFBSSU5UX0ZQUyAwCisjZGVmaW5lIFBSSU5UX0JMSVRfVElNRSAwCisKKyNkZWZpbmUgU0xFRVBJTkcgMHg0CisjZGVmaW5lIFVQREFUSU5HIDB4MworI2RlZmluZSBGVUxMX1VQREFURV9ET05FIDB4MgorI2RlZmluZSBXQUtJTkcgMHgxCisjZGVmaW5lIEFXQUtFIDB4MAorCisjZGVmaW5lIE5PTkUgMAorI2RlZmluZSBTVVNQRU5EX1JFU1VNRSAweDEKKyNkZWZpbmUgRlBTIDB4MgorI2RlZmluZSBCTElUX1RJTUUgMHg0CisjZGVmaW5lIFNIT1dfVVBEQVRFUyAweDgKKworI2RlZmluZSBETE9HKG1hc2ssIGZtdCwgYXJncy4uLikgXAorZG8geyBcCisJaWYgKG1zbWZiX2RlYnVnX21hc2sgJiBtYXNrKSBcCisJCXByaW50ayhLRVJOX0lORk8gIm1zbWZiOiAiZm10LCAjI2FyZ3MpOyBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IG1zbWZiX2RlYnVnX21hc2s7Cittb2R1bGVfcGFyYW1fbmFtZWQobXNtZmJfZGVidWdfbWFzaywgbXNtZmJfZGVidWdfbWFzaywgaW50LAorCQkgICBTX0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlApOworCitzdHJ1Y3QgbWRwX2RldmljZSAqbWRwOworCitzdHJ1Y3QgbXNtZmJfaW5mbyB7CisJc3RydWN0IGZiX2luZm8gKmZiOworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWw7CisJaW50IHhyZXM7CisJaW50IHlyZXM7CisJdW5zaWduZWQgb3V0cHV0X2Zvcm1hdDsKKwl1bnNpZ25lZCB5b2Zmc2V0OworCXVuc2lnbmVkIGZyYW1lX3JlcXVlc3RlZDsKKwl1bnNpZ25lZCBmcmFtZV9kb25lOworCWludCBzbGVlcGluZzsKKwl1bnNpZ25lZCB1cGRhdGVfZnJhbWU7CisJc3RydWN0IHsKKwkJaW50IGxlZnQ7CisJCWludCB0b3A7CisJCWludCBlcmlnaHQ7IC8qIGV4Y2x1c2l2ZSAqLworCQlpbnQgZWJvdHRvbTsgLyogZXhjbHVzaXZlICovCisJfSB1cGRhdGVfaW5mbzsKKwljaGFyICpibGFjazsKKworCXNwaW5sb2NrX3QgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHBhbmVsX2luaXRfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZV93cTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzdW1lX3dvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdW1lX3dvcms7CisJc3RydWN0IG1zbWZiX2NhbGxiYWNrIGRtYV9jYWxsYmFjazsKKwlzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgdnN5bmNfY2FsbGJhY2s7CisJc3RydWN0IGhydGltZXIgZmFrZV92c3luYzsKKwlrdGltZV90IHZzeW5jX3JlcXVlc3RfdGltZTsKK307CisKK3N0YXRpYyBpbnQgbXNtZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNtZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlZCBmcm9tIGRtYSBpbnRlcnJ1cHQgaGFuZGxlciwgbXVzdCBub3Qgc2xlZXAgKi8KK3N0YXRpYyB2b2lkIG1zbWZiX2hhbmRsZV9kbWFfaW50ZXJydXB0KHN0cnVjdCBtc21mYl9jYWxsYmFjayAqY2FsbGJhY2spCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3RydWN0IG1zbWZiX2luZm8gKm1zbWZiICA9IGNvbnRhaW5lcl9vZihjYWxsYmFjaywgc3RydWN0IG1zbWZiX2luZm8sCisJCQkJCSAgICAgICBkbWFfY2FsbGJhY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKwltc21mYi0+ZnJhbWVfZG9uZSA9IG1zbWZiLT5mcmFtZV9yZXF1ZXN0ZWQ7CisJaWYgKG1zbWZiLT5zbGVlcGluZyA9PSBVUERBVElORyAmJgorCSAgICBtc21mYi0+ZnJhbWVfZG9uZSA9PSBtc21mYi0+dXBkYXRlX2ZyYW1lKSB7CisJCURMT0coU1VTUEVORF9SRVNVTUUsICJmdWxsIHVwZGF0ZSBjb21wbGV0ZWRcbiIpOworCQlxdWV1ZV93b3JrKG1zbWZiLT5yZXN1bWVfd29ya3F1ZXVlLCAmbXNtZmItPnJlc3VtZV93b3JrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCXdha2VfdXAoJm1zbWZiLT5mcmFtZV93cSk7Cit9CisKK3N0YXRpYyBpbnQgbXNtZmJfc3RhcnRfZG1hKHN0cnVjdCBtc21mYl9pbmZvICptc21mYikKK3sKKwl1aW50MzJfdCB4LCB5LCB3LCBoOworCXVuc2lnbmVkIGFkZHI7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdWludDMyX3QgeW9mZnNldDsKKwlzNjQgdGltZV9zaW5jZV9yZXF1ZXN0OworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWwgPSBtc21mYi0+cGFuZWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCXRpbWVfc2luY2VfcmVxdWVzdCA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihrdGltZV9nZXQoKSwKKwkJCSAgICAgbXNtZmItPnZzeW5jX3JlcXVlc3RfdGltZSkpOworCWlmICh0aW1lX3NpbmNlX3JlcXVlc3QgPiAyMCAqIE5TRUNfUEVSX01TRUMpIHsKKwkJdWludDMyX3QgdXM7CisJCXVzID0gZG9fZGl2KHRpbWVfc2luY2VfcmVxdWVzdCwgTlNFQ19QRVJfTVNFQykgLyBOU0VDX1BFUl9VU0VDOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtc21mYl9zdGFydF9kbWEgJWxsZC4lMDN1IG1zIGFmdGVyIHZzeW5jICIKKwkJCSJyZXF1ZXN0XG4iLCB0aW1lX3NpbmNlX3JlcXVlc3QsIHVzKTsKKwl9CisJaWYgKG1zbWZiLT5mcmFtZV9kb25lID09IG1zbWZiLT5mcmFtZV9yZXF1ZXN0ZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChtc21mYi0+c2xlZXBpbmcgPT0gU0xFRVBJTkcpIHsKKwkJRExPRyhTVVNQRU5EX1JFU1VNRSwgInRyaWVkIHRvIHN0YXJ0IGRtYSB3aGlsZSBhc2xlZXBcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisJeCA9IG1zbWZiLT51cGRhdGVfaW5mby5sZWZ0OworCXkgPSBtc21mYi0+dXBkYXRlX2luZm8udG9wOworCXcgPSBtc21mYi0+dXBkYXRlX2luZm8uZXJpZ2h0IC0geDsKKwloID0gbXNtZmItPnVwZGF0ZV9pbmZvLmVib3R0b20gLSB5OworCXlvZmZzZXQgPSBtc21mYi0+eW9mZnNldDsKKwltc21mYi0+dXBkYXRlX2luZm8ubGVmdCA9IG1zbWZiLT54cmVzICsgMTsKKwltc21mYi0+dXBkYXRlX2luZm8udG9wID0gbXNtZmItPnlyZXMgKyAxOworCW1zbWZiLT51cGRhdGVfaW5mby5lcmlnaHQgPSAwOworCW1zbWZiLT51cGRhdGVfaW5mby5lYm90dG9tID0gMDsKKwlpZiAodW5saWtlbHkodyA+IG1zbWZiLT54cmVzIHx8IGggPiBtc21mYi0+eXJlcyB8fAorCQkgICAgIHcgPT0gMCB8fCBoID09IDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gImludmFsaWQgdXBkYXRlOiAlZCAlZCAlZCAiCisJCQkJIiVkXG4iLCB4LCB5LCB3LCBoKTsKKwkJbXNtZmItPmZyYW1lX2RvbmUgPSBtc21mYi0+ZnJhbWVfcmVxdWVzdGVkOworCQlnb3RvIGVycm9yOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisKKwlhZGRyID0gKChtc21mYi0+eHJlcyAqICh5b2Zmc2V0ICsgeSkgKyB4KSAqIDIpOworCW1kcC0+ZG1hKG1kcCwgYWRkciArIG1zbWZiLT5mYi0+Zml4LnNtZW1fc3RhcnQsCisJCSBtc21mYi0+eHJlcyAqIDIsIHcsIGgsIHgsIHksICZtc21mYi0+ZG1hX2NhbGxiYWNrLAorCQkgcGFuZWwtPmludGVyZmFjZV90eXBlKTsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKwkvKiBzb21lIGNsaWVudHMgbmVlZCB0byBjbGVhciB0aGVpciB2c3luYyBpbnRlcnJ1cHQgKi8KKwlpZiAocGFuZWwtPmNsZWFyX3ZzeW5jKQorCQlwYW5lbC0+Y2xlYXJfdnN5bmMocGFuZWwpOworCXdha2VfdXAoJm1zbWZiLT5mcmFtZV93cSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlZCBmcm9tIGVzeW5jIGludGVycnVwdCBoYW5kbGVyLCBtdXN0IG5vdCBzbGVlcCAqLworc3RhdGljIHZvaWQgbXNtZmJfaGFuZGxlX3ZzeW5jX2ludGVycnVwdChzdHJ1Y3QgbXNtZmJfY2FsbGJhY2sgKmNhbGxiYWNrKQoreworCXN0cnVjdCBtc21mYl9pbmZvICptc21mYiA9IGNvbnRhaW5lcl9vZihjYWxsYmFjaywgc3RydWN0IG1zbWZiX2luZm8sCisJCQkJCSAgICAgICB2c3luY19jYWxsYmFjayk7CisJbXNtZmJfc3RhcnRfZG1hKG1zbWZiKTsKK30KKworc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IG1zbWZiX2Zha2VfdnN5bmMoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXN0cnVjdCBtc21mYl9pbmZvICptc21mYiAgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBtc21mYl9pbmZvLAorCQkJCQkgICAgICAgZmFrZV92c3luYyk7CisJbXNtZmJfc3RhcnRfZG1hKG1zbWZiKTsKKwlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIG1zbWZiX3Bhbl91cGRhdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IGxlZnQsIHVpbnQzMl90IHRvcCwKKwkJCSAgICAgdWludDMyX3QgZXJpZ2h0LCB1aW50MzJfdCBlYm90dG9tLAorCQkJICAgICB1aW50MzJfdCB5b2Zmc2V0LCBpbnQgcGFuX2Rpc3BsYXkpCit7CisJc3RydWN0IG1zbWZiX2luZm8gKm1zbWZiID0gaW5mby0+cGFyOworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWwgPSBtc21mYi0+cGFuZWw7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IHNsZWVwaW5nOworCWludCByZXRyeSA9IDE7CisKKwlETE9HKFNIT1dfVVBEQVRFUywgInVwZGF0ZSAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJbGVmdCwgdG9wLCBlcmlnaHQsIGVib3R0b20sIHlvZmZzZXQsIHBhbl9kaXNwbGF5KTsKK3Jlc3RhcnQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKworCS8qIGlmIHdlIGFyZSBzbGVlcGluZywgb24gYSBwYW5fZGlzcGxheSB3YWl0IDEwbXMgKHRvIHRocm90dGxlIGJhY2sKKwkgKiBkcmF3aW5nIG90aGVyd2lzZSByZXR1cm4gKi8KKwlpZiAobXNtZmItPnNsZWVwaW5nID09IFNMRUVQSU5HKSB7CisJCURMT0coU1VTUEVORF9SRVNVTUUsICJkcmF3aW5nIHdoaWxlIGFzbGVlcFxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKwkJaWYgKHBhbl9kaXNwbGF5KQorCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobXNtZmItPmZyYW1lX3dxLAorCQkJCW1zbWZiLT5zbGVlcGluZyAhPSBTTEVFUElORywgSFovMTApOworCQlyZXR1cm47CisJfQorCisJc2xlZXBpbmcgPSBtc21mYi0+c2xlZXBpbmc7CisJLyogb24gYSBmdWxsIHVwZGF0ZSwgaWYgdGhlIGxhc3QgZnJhbWUgaGFzIG5vdCBjb21wbGV0ZWQsIHdhaXQgZm9yIGl0ICovCisJaWYgKHBhbl9kaXNwbGF5ICYmIChtc21mYi0+ZnJhbWVfcmVxdWVzdGVkICE9IG1zbWZiLT5mcmFtZV9kb25lIHx8CisJCQkgICAgc2xlZXBpbmcgPT0gVVBEQVRJTkcpKSB7CisJCWludCByZXQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbWZiLT51cGRhdGVfbG9jaywgaXJxX2ZsYWdzKTsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobXNtZmItPmZyYW1lX3dxLAorCQkJbXNtZmItPmZyYW1lX2RvbmUgPT0gbXNtZmItPmZyYW1lX3JlcXVlc3RlZCAmJgorCQkJbXNtZmItPnNsZWVwaW5nICE9IFVQREFUSU5HLCA1ICogSFopOworCQlpZiAocmV0IDw9IDAgJiYgKG1zbWZiLT5mcmFtZV9yZXF1ZXN0ZWQgIT0gbXNtZmItPmZyYW1lX2RvbmUgfHwKKwkJCQkgbXNtZmItPnNsZWVwaW5nID09IFVQREFUSU5HKSkgeworCQkJaWYgKHJldHJ5ICYmIHBhbmVsLT5yZXF1ZXN0X3ZzeW5jICYmCisJCQkgICAgKHNsZWVwaW5nID09IEFXQUtFKSkgeworCQkJCXBhbmVsLT5yZXF1ZXN0X3ZzeW5jKHBhbmVsLAorCQkJCQkmbXNtZmItPnZzeW5jX2NhbGxiYWNrKTsKKwkJCQlyZXRyeSA9IDA7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNtZmJfcGFuX2Rpc3BsYXkgdGltZW91dCAiCisJCQkJCSJyZXJlcXVlc3QgdnN5bmNcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtc21mYl9wYW5fZGlzcGxheSB0aW1lb3V0ICIKKwkJCQkJIndhaXRpbmcgZm9yIGZyYW1lIHN0YXJ0LCAlZCAlZFxuIiwKKwkJCQkJbXNtZmItPmZyYW1lX3JlcXVlc3RlZCwKKwkJCQkJbXNtZmItPmZyYW1lX2RvbmUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlnb3RvIHJlc3RhcnQ7CisJfQorCisKKwltc21mYi0+ZnJhbWVfcmVxdWVzdGVkKys7CisJLyogaWYgbmVjZXNzYXJ5LCB1cGRhdGUgdGhlIHkgb2Zmc2V0LCBpZiB0aGlzIGlzIHRoZQorCSAqIGZpcnN0IGZ1bGwgdXBkYXRlIG9uIHJlc3VtZSwgc2V0IHRoZSBzbGVlcGluZyBzdGF0ZSAqLworCWlmIChwYW5fZGlzcGxheSkgeworCQltc21mYi0+eW9mZnNldCA9IHlvZmZzZXQ7CisJCWlmIChsZWZ0ID09IDAgJiYgdG9wID09IDAgJiYgZXJpZ2h0ID09IGluZm8tPnZhci54cmVzICYmCisJCSAgICBlYm90dG9tID09IGluZm8tPnZhci55cmVzKSB7CisJCQlpZiAoc2xlZXBpbmcgPT0gV0FLSU5HKSB7CisJCQkJbXNtZmItPnVwZGF0ZV9mcmFtZSA9IG1zbWZiLT5mcmFtZV9yZXF1ZXN0ZWQ7CisJCQkJRExPRyhTVVNQRU5EX1JFU1VNRSwgImZ1bGwgdXBkYXRlIHN0YXJ0aW5nXG4iKTsKKwkJCQltc21mYi0+c2xlZXBpbmcgPSBVUERBVElORzsKKwkJCX0KKwkJfQorCX0KKworCS8qIHNldCB0aGUgdXBkYXRlIHJlcXVlc3QgKi8KKwlpZiAobGVmdCA8IG1zbWZiLT51cGRhdGVfaW5mby5sZWZ0KQorCQltc21mYi0+dXBkYXRlX2luZm8ubGVmdCA9IGxlZnQ7CisJaWYgKHRvcCA8IG1zbWZiLT51cGRhdGVfaW5mby50b3ApCisJCW1zbWZiLT51cGRhdGVfaW5mby50b3AgPSB0b3A7CisJaWYgKGVyaWdodCA+IG1zbWZiLT51cGRhdGVfaW5mby5lcmlnaHQpCisJCW1zbWZiLT51cGRhdGVfaW5mby5lcmlnaHQgPSBlcmlnaHQ7CisJaWYgKGVib3R0b20gPiBtc21mYi0+dXBkYXRlX2luZm8uZWJvdHRvbSkKKwkJbXNtZmItPnVwZGF0ZV9pbmZvLmVib3R0b20gPSBlYm90dG9tOworCURMT0coU0hPV19VUERBVEVTLCAidXBkYXRlIHF1ZXVlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJbXNtZmItPnVwZGF0ZV9pbmZvLmxlZnQsIG1zbWZiLT51cGRhdGVfaW5mby50b3AsCisJCW1zbWZiLT51cGRhdGVfaW5mby5lcmlnaHQsIG1zbWZiLT51cGRhdGVfaW5mby5lYm90dG9tLAorCQltc21mYi0+eW9mZnNldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtZmItPnVwZGF0ZV9sb2NrLCBpcnFfZmxhZ3MpOworCisJLyogaWYgdGhlIHBhbmVsIGlzIGFsbCB0aGUgd2F5IG9uIHdhaXQgZm9yIHZzeW5jLCBvdGhlcndpc2Ugc2xlZXAKKwkgKiBmb3IgMTYgbXMgKGxvbmcgZW5vdWdoIGZvciB0aGUgZG1hIHRvIHBhbmVsKSBhbmQgdGhlbiBiZWdpbiBkbWEgKi8KKwltc21mYi0+dnN5bmNfcmVxdWVzdF90aW1lID0ga3RpbWVfZ2V0KCk7CisJaWYgKHBhbmVsLT5yZXF1ZXN0X3ZzeW5jICYmIChzbGVlcGluZyA9PSBBV0FLRSkpIHsKKwkJcGFuZWwtPnJlcXVlc3RfdnN5bmMocGFuZWwsICZtc21mYi0+dnN5bmNfY2FsbGJhY2spOworCX0gZWxzZSB7CisJCWlmICghaHJ0aW1lcl9hY3RpdmUoJm1zbWZiLT5mYWtlX3ZzeW5jKSkgeworCQkJaHJ0aW1lcl9zdGFydCgmbXNtZmItPmZha2VfdnN5bmMsCisJCQkJICAgICAga3RpbWVfc2V0KDAsIE5TRUNfUEVSX1NFQy82MCksCisJCQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1zbWZiX3VwZGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgbGVmdCwgdWludDMyX3QgdG9wLAorCQkJIHVpbnQzMl90IGVyaWdodCwgdWludDMyX3QgZWJvdHRvbSkKK3sKKwltc21mYl9wYW5fdXBkYXRlKGluZm8sIGxlZnQsIHRvcCwgZXJpZ2h0LCBlYm90dG9tLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgcG93ZXJfb25fcGFuZWwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtc21mYl9pbmZvICptc21mYiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXNtZmJfaW5mbywgcmVzdW1lX3dvcmspOworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWwgPSBtc21mYi0+cGFuZWw7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwltdXRleF9sb2NrKCZtc21mYi0+cGFuZWxfaW5pdF9sb2NrKTsKKwlETE9HKFNVU1BFTkRfUkVTVU1FLCAidHVybmluZyBvbiBwYW5lbFxuIik7CisJaWYgKG1zbWZiLT5zbGVlcGluZyA9PSBVUERBVElORykgeworCQlpZiAocGFuZWwtPnVuYmxhbmsocGFuZWwpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJtc21mYjogcGFuZWwgdW5ibGFuayBmYWlsZWQsIgorCQkJICAgICAgICJub3Qgc3RhcnRpbmcgZHJhd2luZ1xuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisJCW1zbWZiLT5zbGVlcGluZyA9IEFXQUtFOworCQl3YWtlX3VwKCZtc21mYi0+ZnJhbWVfd3EpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21mYi0+dXBkYXRlX2xvY2ssIGlycV9mbGFncyk7CisJfQorZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZtc21mYi0+cGFuZWxfaW5pdF9sb2NrKTsKK30KKworCitzdGF0aWMgaW50IG1zbWZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKCh2YXItPnhyZXMgIT0gaW5mby0+dmFyLnhyZXMpIHx8CisJICAgICh2YXItPnlyZXMgIT0gaW5mby0+dmFyLnlyZXMpIHx8CisJICAgICh2YXItPnhyZXNfdmlydHVhbCAhPSBpbmZvLT52YXIueHJlc192aXJ0dWFsKSB8fAorCSAgICAodmFyLT55cmVzX3ZpcnR1YWwgIT0gaW5mby0+dmFyLnlyZXNfdmlydHVhbCkgfHwKKwkgICAgKHZhci0+eG9mZnNldCAhPSBpbmZvLT52YXIueG9mZnNldCkgfHwKKwkgICAgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB8fAorCSAgICAodmFyLT5ncmF5c2NhbGUgIT0gaW5mby0+dmFyLmdyYXlzY2FsZSkpCisJCSByZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworaW50IG1zbWZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNtZmJfaW5mbyAqbXNtZmIgPSBpbmZvLT5wYXI7CisJc3RydWN0IG1zbV9wYW5lbF9kYXRhICpwYW5lbCA9IG1zbWZiLT5wYW5lbDsKKworCS8qICJVUERUIiAqLworCWlmICgocGFuZWwtPmNhcHMgJiBNU01GQl9DQVBfUEFSVElBTF9VUERBVEVTKSAmJgorCSAgICAodmFyLT5yZXNlcnZlZFswXSA9PSAweDU0NDQ1MDU1KSkgeworCQltc21mYl9wYW5fdXBkYXRlKGluZm8sIHZhci0+cmVzZXJ2ZWRbMV0gJiAweGZmZmYsCisJCQkJIHZhci0+cmVzZXJ2ZWRbMV0gPj4gMTYsCisJCQkJIHZhci0+cmVzZXJ2ZWRbMl0gJiAweGZmZmYsCisJCQkJIHZhci0+cmVzZXJ2ZWRbMl0gPj4gMTYsIHZhci0+eW9mZnNldCwgMSk7CisJfSBlbHNlIHsKKwkJbXNtZmJfcGFuX3VwZGF0ZShpbmZvLCAwLCAwLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQkJIHZhci0+eW9mZnNldCwgMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtc21mYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqcCwgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCWNmYl9maWxscmVjdChwLCByZWN0KTsKKwltc21mYl91cGRhdGUocCwgcmVjdC0+ZHgsIHJlY3QtPmR5LCByZWN0LT5keCArIHJlY3QtPndpZHRoLAorCQkgICAgIHJlY3QtPmR5ICsgcmVjdC0+aGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgbXNtZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKK3sKKwljZmJfY29weWFyZWEocCwgYXJlYSk7CisJbXNtZmJfdXBkYXRlKHAsIGFyZWEtPmR4LCBhcmVhLT5keSwgYXJlYS0+ZHggKyBhcmVhLT53aWR0aCwKKwkJICAgICBhcmVhLT5keSArIGFyZWEtPmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIG1zbWZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqcCwgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3sKKwljZmJfaW1hZ2VibGl0KHAsIGltYWdlKTsKKwltc21mYl91cGRhdGUocCwgaW1hZ2UtPmR4LCBpbWFnZS0+ZHksIGltYWdlLT5keCArIGltYWdlLT53aWR0aCwKKwkJICAgICBpbWFnZS0+ZHkgKyBpbWFnZS0+aGVpZ2h0KTsKK30KKworCitzdGF0aWMgaW50IG1zbWZiX2JsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCSAgICAgIHZvaWQgX191c2VyICpwKQoreworCXN0cnVjdCBtZHBfYmxpdF9yZXEgcmVxOworCXN0cnVjdCBtZHBfYmxpdF9yZXFfbGlzdCByZXFfbGlzdDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXFfbGlzdCwgcCwgc2l6ZW9mKHJlcV9saXN0KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZm9yIChpID0gMDsgaSA8IHJlcV9saXN0LmNvdW50OyBpKyspIHsKKwkJc3RydWN0IG1kcF9ibGl0X3JlcV9saXN0ICpsaXN0ID0KKwkJCShzdHJ1Y3QgbWRwX2JsaXRfcmVxX2xpc3QgKilwOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgJmxpc3QtPnJlcVtpXSwgc2l6ZW9mKHJlcSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IG1kcC0+YmxpdChtZHAsIGluZm8sICZyZXEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworREVGSU5FX01VVEVYKG1kcF9wcHBfbG9jayk7CisKK3N0YXRpYyBpbnQgbXNtZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKnAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTVNNRkJfR1JQX0RJU1A6CisJCW1kcC0+c2V0X2dycF9kaXNwKG1kcCwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNU01GQl9CTElUOgorCQlyZXQgPSBtc21mYl9ibGl0KHAsIGFyZ3ApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0lORk8gIm1zbWZiIHVua25vd24gaW9jdGw6ICVkXG4iLCBjbWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBtc21mYl9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4gPSBtc21mYl9vcGVuLAorCS5mYl9yZWxlYXNlID0gbXNtZmJfcmVsZWFzZSwKKwkuZmJfY2hlY2tfdmFyID0gbXNtZmJfY2hlY2tfdmFyLAorCS5mYl9wYW5fZGlzcGxheSA9IG1zbWZiX3Bhbl9kaXNwbGF5LAorCS5mYl9maWxscmVjdCA9IG1zbWZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYSA9IG1zbWZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBtc21mYl9pbWFnZWJsaXQsCisJLmZiX2lvY3RsID0gbXNtZmJfaW9jdGwsCit9OworCitzdGF0aWMgdW5zaWduZWQgUFBbMTZdOworCisKKworI2RlZmluZSBCSVRTX1BFUl9QSVhFTCAxNgorCitzdGF0aWMgdm9pZCBzZXR1cF9mYl9pbmZvKHN0cnVjdCBtc21mYl9pbmZvICptc21mYikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IG1zbWZiLT5mYjsKKwlpbnQgcjsKKworCS8qIGZpbmlzaCBzZXR0aW5nIHVwIHRoZSBmYl9pbmZvIHN0cnVjdCAqLworCXN0cm5jcHkoZmJfaW5mby0+Zml4LmlkLCAibXNtZmIiLCAxNik7CisJZmJfaW5mby0+Zml4LnlwYW5zdGVwID0gMTsKKworCWZiX2luZm8tPmZib3BzID0gJm1zbWZiX29wczsKKwlmYl9pbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOworCisJZmJfaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZmJfaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJZmJfaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gbXNtZmItPnhyZXMgKiAyOworCisJZmJfaW5mby0+dmFyLnhyZXMgPSBtc21mYi0+eHJlczsKKwlmYl9pbmZvLT52YXIueXJlcyA9IG1zbWZiLT55cmVzOworCWZiX2luZm8tPnZhci53aWR0aCA9IG1zbWZiLT5wYW5lbC0+ZmJfZGF0YS0+d2lkdGg7CisJZmJfaW5mby0+dmFyLmhlaWdodCA9IG1zbWZiLT5wYW5lbC0+ZmJfZGF0YS0+aGVpZ2h0OworCWZiX2luZm8tPnZhci54cmVzX3ZpcnR1YWwgPSBtc21mYi0+eHJlczsKKwlmYl9pbmZvLT52YXIueXJlc192aXJ0dWFsID0gbXNtZmItPnlyZXMgKiAyOworCWZiX2luZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IEJJVFNfUEVSX1BJWEVMOworCWZiX2luZm8tPnZhci5hY2NlbF9mbGFncyA9IDA7CisKKwlmYl9pbmZvLT52YXIueW9mZnNldCA9IDA7CisKKwlpZiAobXNtZmItPnBhbmVsLT5jYXBzICYgTVNNRkJfQ0FQX1BBUlRJQUxfVVBEQVRFUykgeworCQlmYl9pbmZvLT52YXIucmVzZXJ2ZWRbMF0gPSAweDU0NDQ1MDU1OworCQlmYl9pbmZvLT52YXIucmVzZXJ2ZWRbMV0gPSAwOworCQlmYl9pbmZvLT52YXIucmVzZXJ2ZWRbMl0gPSAodWludDE2X3QpbXNtZmItPnhyZXMgfAorCQkJCQkgICAoKHVpbnQzMl90KW1zbWZiLT55cmVzIDw8IDE2KTsKKwl9CisKKwlmYl9pbmZvLT52YXIucmVkLm9mZnNldCA9IDExOworCWZiX2luZm8tPnZhci5yZWQubGVuZ3RoID0gNTsKKwlmYl9pbmZvLT52YXIucmVkLm1zYl9yaWdodCA9IDA7CisJZmJfaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDU7CisJZmJfaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDY7CisJZmJfaW5mby0+dmFyLmdyZWVuLm1zYl9yaWdodCA9IDA7CisJZmJfaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwlmYl9pbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA1OworCWZiX2luZm8tPnZhci5ibHVlLm1zYl9yaWdodCA9IDA7CisKKwlyID0gZmJfYWxsb2NfY21hcCgmZmJfaW5mby0+Y21hcCwgMTYsIDApOworCWZiX2luZm8tPnBzZXVkb19wYWxldHRlID0gUFA7CisKKwlQUFswXSA9IDA7CisJZm9yIChyID0gMTsgciA8IDE2OyByKyspCisJCVBQW3JdID0gMHhmZmZmZmZmZjsKK30KKworc3RhdGljIGludCBzZXR1cF9mYm1lbShzdHJ1Y3QgbXNtZmJfaW5mbyAqbXNtZmIsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmZiID0gbXNtZmItPmZiOworCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CisJdW5zaWduZWQgbG9uZyBzaXplID0gbXNtZmItPnhyZXMgKiBtc21mYi0+eXJlcyAqCisJCQkgICAgIChCSVRTX1BFUl9QSVhFTCA+PiAzKSAqIDI7CisJdW5zaWduZWQgY2hhciAqZmJyYW07CisKKwkvKiBib2FyZCBmaWxlIG1pZ2h0IGhhdmUgYXR0YWNoZWQgYSByZXNvdXJjZSBkZXNjcmliaW5nIGFuIGZiICovCisJcmVzb3VyY2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzb3VyY2UpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY2hlY2sgdGhlIHJlc291cmNlIGlzIGxhcmdlIGVub3VnaCB0byBmaXQgdGhlIGZiICovCisJaWYgKHJlc291cmNlLT5lbmQgLSByZXNvdXJjZS0+c3RhcnQgPCBzaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGVkIHJlc291cmNlIGlzIHRvbyBzbWFsbCBmb3IgIgorCQkJCSJmYlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmYi0+Zml4LnNtZW1fc3RhcnQgPSByZXNvdXJjZS0+c3RhcnQ7CisJZmItPmZpeC5zbWVtX2xlbiA9IHJlc291cmNlLT5lbmQgLSByZXNvdXJjZS0+c3RhcnQ7CisJZmJyYW0gPSBpb3JlbWFwKHJlc291cmNlLT5zdGFydCwKKwkJCXJlc291cmNlLT5lbmQgLSByZXNvdXJjZS0+c3RhcnQpOworCWlmIChmYnJhbSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXNtZmI6IGNhbm5vdCBhbGxvY2F0ZSBmYnJhbSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZmItPnNjcmVlbl9iYXNlID0gZmJyYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNtZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmI7CisJc3RydWN0IG1zbWZiX2luZm8gKm1zbWZiOworCXN0cnVjdCBtc21fcGFuZWxfZGF0YSAqcGFuZWwgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFwYW5lbCkgeworCQlwcl9lcnIoIm1zbWZiX3Byb2JlOiBubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghcGFuZWwtPmZiX2RhdGEpIHsKKwkJcHJfZXJyKCJtc21mYl9wcm9iZTogbm8gZmJfZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZiID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc21mYl9pbmZvKSwgJnBkZXYtPmRldik7CisJaWYgKCFmYikKKwkJcmV0dXJuIC1FTk9NRU07CisJbXNtZmIgPSBmYi0+cGFyOworCW1zbWZiLT5mYiA9IGZiOworCW1zbWZiLT5wYW5lbCA9IHBhbmVsOworCW1zbWZiLT54cmVzID0gcGFuZWwtPmZiX2RhdGEtPnhyZXM7CisJbXNtZmItPnlyZXMgPSBwYW5lbC0+ZmJfZGF0YS0+eXJlczsKKworCXJldCA9IHNldHVwX2ZibWVtKG1zbWZiLCBwZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3NldHVwX2ZibWVtOworCisJc2V0dXBfZmJfaW5mbyhtc21mYik7CisKKwlzcGluX2xvY2tfaW5pdCgmbXNtZmItPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZtc21mYi0+cGFuZWxfaW5pdF9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtc21mYi0+ZnJhbWVfd3EpOworCW1zbWZiLT5yZXN1bWVfd29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgicGFuZWxfb24iKTsKKwlpZiAobXNtZmItPnJlc3VtZV93b3JrcXVldWUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBjcmVhdGUgcGFuZWxfb24gd29ya3F1ZXVlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9jcmVhdGVfd29ya3F1ZXVlOworCX0KKwlJTklUX1dPUksoJm1zbWZiLT5yZXN1bWVfd29yaywgcG93ZXJfb25fcGFuZWwpOworCW1zbWZiLT5ibGFjayA9IGt6YWxsb2MobXNtZmItPmZiLT52YXIuYml0c19wZXJfcGl4ZWwqbXNtZmItPnhyZXMsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJtc21mYl9wcm9iZSgpIGluc3RhbGxpbmcgJWQgeCAlZCBwYW5lbFxuIiwKKwkgICAgICAgbXNtZmItPnhyZXMsIG1zbWZiLT55cmVzKTsKKworCW1zbWZiLT5kbWFfY2FsbGJhY2suZnVuYyA9IG1zbWZiX2hhbmRsZV9kbWFfaW50ZXJydXB0OworCW1zbWZiLT52c3luY19jYWxsYmFjay5mdW5jID0gbXNtZmJfaGFuZGxlX3ZzeW5jX2ludGVycnVwdDsKKwlocnRpbWVyX2luaXQoJm1zbWZiLT5mYWtlX3ZzeW5jLCBDTE9DS19NT05PVE9OSUMsCisJCSAgICAgSFJUSU1FUl9NT0RFX1JFTCk7CisKKworCW1zbWZiLT5mYWtlX3ZzeW5jLmZ1bmN0aW9uID0gbXNtZmJfZmFrZV92c3luYzsKKworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyOworCisJbXNtZmItPnNsZWVwaW5nID0gV0FLSU5HOworCisJcmV0dXJuIDA7CisKK2Vycm9yX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyOgorCWRlc3Ryb3lfd29ya3F1ZXVlKG1zbWZiLT5yZXN1bWVfd29ya3F1ZXVlKTsKK2Vycm9yX2NyZWF0ZV93b3JrcXVldWU6CisJaW91bm1hcChmYi0+c2NyZWVuX2Jhc2UpOworZXJyb3Jfc2V0dXBfZmJtZW06CisJZnJhbWVidWZmZXJfcmVsZWFzZShtc21mYi0+ZmIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1zbV9wYW5lbF9kcml2ZXIgPSB7CisJLyogbmVlZCB0byB3cml0ZSByZW1vdmUgKi8KKwkucHJvYmUgPSBtc21mYl9wcm9iZSwKKwkuZHJpdmVyID0gey5uYW1lID0gIm1zbV9wYW5lbCJ9LAorfTsKKworCitzdGF0aWMgaW50IG1zbWZiX2FkZF9tZHBfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbGFzc19pbnRmKQoreworCS8qIG1pZ2h0IG5lZWQgbG9ja2luZyBpZiBtdWxpdHBsZSBtZHAgZGV2aWNlcyAqLworCWlmIChtZHApCisJCXJldHVybiAwOworCW1kcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtZHBfZGV2aWNlLCBkZXYpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1zbV9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBtc21mYl9yZW1vdmVfbWRwX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqY2xhc3NfaW50ZikKK3sKKwkvKiBtaWdodCBuZWVkIGxvY2tpbmcgaWYgbXVsaXRwbGUgbWRwIGRldmljZXMgKi8KKwlpZiAoZGV2ICE9ICZtZHAtPmRldikKKwkJcmV0dXJuOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtc21fcGFuZWxfZHJpdmVyKTsKKwltZHAgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzX2ludGVyZmFjZSBtc21fZmJfaW50ZXJmYWNlID0geworCS5hZGRfZGV2ID0gJm1zbWZiX2FkZF9tZHBfZGV2aWNlLAorCS5yZW1vdmVfZGV2ID0gJm1zbWZiX3JlbW92ZV9tZHBfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXNtZmJfaW5pdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9tZHBfY2xpZW50KCZtc21fZmJfaW50ZXJmYWNlKTsKK30KKworbW9kdWxlX2luaXQobXNtZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnCmluZGV4IDQ0NDA4ODUuLjU1MWUzZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnCkBAIC03LDYgKzcsNjkgQEAKIAloZWxwCiAgICAgICAgICAgRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgT01BUCBiYXNlZCBib2FyZHMuCiAKK2NvbmZpZyBGQl9PTUFQX0xDRF9WR0EKKyAgICAgICAgYm9vbCAiVXNlIExDRCBpbiBWR0EgbW9kZSIKKwkgICAgICAgIGRlcGVuZHMgb24gTUFDSF9PTUFQXzM0MzBTRFAgfHwgTUFDSF9PTUFQX0xEUAorCitjaG9pY2UKKwlkZXBlbmRzIG9uIEZCX09NQVAgJiYgTUFDSF9PVkVSTworCXByb21wdCAiU2NyZWVuIHJlc29sdXRpb24iCisJZGVmYXVsdCBGQl9PTUFQXzA3OU0zUgorCWhlbHAKKwkgIFNlbGVjdGVkIGRlc2lyZWQgc2NyZWVuIHJlc29sdXRpb24KKworY29uZmlnIEZCX09NQVBfMDMxTTNSCisJYm9vbGVhbiAiNjQwIHggNDgwIEAgNjAgSHogUmVkdWNlZCBibGFua2luZyIKKworY29uZmlnIEZCX09NQVBfMDQ4TTNSCisJYm9vbGVhbiAiODAwIHggNjAwIEAgNjAgSHogUmVkdWNlZCBibGFua2luZyIKKworY29uZmlnIEZCX09NQVBfMDc5TTNSCisJYm9vbGVhbiAiMTAyNCB4IDc2OCBAIDYwIEh6IFJlZHVjZWQgYmxhbmtpbmciCisKK2NvbmZpZyBGQl9PTUFQXzA5Mk05UgorCWJvb2xlYW4gIjEyODAgeCA3MjAgQCA2MCBIeiBSZWR1Y2VkIGJsYW5raW5nIgorCitlbmRjaG9pY2UKKworY29uZmlnIEZCX09NQVBfTENEQ19FWFRFUk5BTAorCWJvb2wgIkV4dGVybmFsIExDRCBjb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQl9PTUFQCisJaGVscAorCSAgU2F5IFkgaGVyZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0IGZvciBib2FyZHMgd2l0aCBhbgorCSAgZXh0ZXJuYWwgTENEIGNvbnRyb2xsZXIgY29ubmVjdGVkIHRvIHRoZSBTb1NTSS9SRkJJIGludGVyZmFjZS4KKworY29uZmlnIEZCX09NQVBfTENEQ19IV0E3NDIKKwlib29sICJFcHNvbiBIV0E3NDIgTENEIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX09NQVAgJiYgRkJfT01BUF9MQ0RDX0VYVEVSTkFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIHRoZSBleHRlcm5hbAorCSAgRXBzb24gSFdBNzQyIExDRCBjb250cm9sbGVyLgorCitjb25maWcgRkJfT01BUF9MQ0RDX0JMSVpaQVJECisJYm9vbCAiRXBzb24gQmxpenphcmQgTENEIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX09NQVAgJiYgRkJfT01BUF9MQ0RDX0VYVEVSTkFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIHRoZSBleHRlcm5hbAorCSAgRXBzb24gQmxpenphcmQgTENEIGNvbnRyb2xsZXIuCisKK2NvbmZpZyBGQl9PTUFQX01BTlVBTF9VUERBVEUKKwlib29sICJEZWZhdWx0IHRvIG1hbnVhbCB1cGRhdGUgbW9kZSIKKwlkZXBlbmRzIG9uIEZCX09NQVAgJiYgRkJfT01BUF9MQ0RDX0VYVEVSTkFMCisJaGVscAorCSAgU2F5IFkgaGVyZSwgaWYgeW91ciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgY2FwYWJsZSBvZgorCSAgbm90aWZ5aW5nIHRoZSBmcmFtZSBidWZmZXIgZHJpdmVyIHdoZW4gYSBjaGFuZ2UgaGFzIG9jY3VyZWQgaW4KKwkgIHRoZSBmcmFtZSBidWZmZXIgY29udGVudCBhbmQgdGh1cyBhIHJlbG9hZCBvZiB0aGUgaW1hZ2UgZGF0YSB0bworCSAgdGhlIGV4dGVybmFsIGZyYW1lIGJ1ZmZlciBpcyByZXF1aXJlZC4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEZCX09NQVBfTENEX01JUElECisJYm9vbCAiTUlQSSBEQkktQy9EQ1MgY29tcGF0aWJsZSBMQ0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX09NQVAgJiYgU1BJX01BU1RFUgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0IGZvciBMQ0RzIGNvbXBhdGlibGUgd2l0aAorCSAgdGhlIE1vYmlsZSBJbmR1c3RyeSBQcm9jZXNzb3IgSW50ZXJmYWNlIERCSS1DL0RDUworCSAgc3BlY2lmaWNhdGlvbi4gKFN1cHBvcnRlZCBMQ0RzOiBQaGlsaXBzIExQSDg5MjMsIFNoYXJwIExTMDQxWTMpCisKIGNvbmZpZyBGQl9PTUFQX0JPT1RMT0FERVJfSU5JVAogCWJvb2wgIkNoZWNrIGJvb3Rsb2FkZXIgaW5pdGlhbGl6YXRpb24iCiAJZGVwZW5kcyBvbiBGQl9PTUFQCkBAIC0zNiwyMyArOTksNCBAQAogICAgICAgICAgIGFuc3dlciB5ZXMuIEFuc3dlciBubyBpZiB5b3UgaGF2ZSBhIGRlZGljYXRlZCB2aWRlbwogICAgICAgICAgIG1lbW9yeSwgb3IgZG9uJ3QgdXNlIGFueSBvZiB0aGUgYWNjZWxlcmF0ZWQgZmVhdHVyZXMuCiAKLWNvbmZpZyBGQl9PTUFQX0xDRENfRVhURVJOQUwKLQlib29sICJFeHRlcm5hbCBMQ0QgY29udHJvbGxlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkJfT01BUAotCWhlbHAKLQkgIFNheSBZIGhlcmUsIGlmIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydCBmb3IgYm9hcmRzIHdpdGggYW4KLQkgIGV4dGVybmFsIExDRCBjb250cm9sbGVyIGNvbm5lY3RlZCB0byB0aGUgU29TU0kvUkZCSSBpbnRlcmZhY2UuCiAKLWNvbmZpZyBGQl9PTUFQX0xDRENfSFdBNzQyCi0JYm9vbCAiRXBzb24gSFdBNzQyIExDRCBjb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQl9PTUFQICYmIEZCX09NQVBfTENEQ19FWFRFUk5BTAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0IGZvciB0aGUgZXh0ZXJuYWwKLQkgIEVwc29uIEhXQTc0MiBMQ0QgY29udHJvbGxlci4KLQotY29uZmlnIEZCX09NQVBfTENEQ19CTElaWkFSRAotCWJvb2wgIkVwc29uIEJsaXp6YXJkIExDRCBjb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQl9PTUFQICYmIEZCX09NQVBfTENEQ19FWFRFUk5BTAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0IGZvciB0aGUgZXh0ZXJuYWwKLQkgIEVwc29uIEJsaXp6YXJkIExDRCBjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9vbWFwL01ha2VmaWxlCmluZGV4IGVkMTM4ODkuLmI2M2IxOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBACiAKIG9ianMteSQoQ09ORklHX0FSQ0hfT01BUDEpICs9IGxjZGMubwogb2Jqcy15JChDT05GSUdfQVJDSF9PTUFQMikgKz0gZGlzcGMubworb2Jqcy15JChDT05GSUdfQVJDSF9PTUFQMykgKz0gZGlzcGMubwogCiBvYmpzLSQoQ09ORklHX0FSQ0hfT01BUDEpJChDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMKSArPSBzb3NzaS5vCiBvYmpzLSQoQ09ORklHX0FSQ0hfT01BUDIpJChDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMKSArPSByZmJpLm8KQEAgLTE1LDYgKzE2LDcgQEAKIG9ianMteSQoQ09ORklHX0ZCX09NQVBfTENEQ19IV0E3NDIpICs9IGh3YTc0Mi5vCiBvYmpzLXkkKENPTkZJR19GQl9PTUFQX0xDRENfQkxJWlpBUkQpICs9IGJsaXp6YXJkLm8KIAorb2Jqcy15JChDT05GSUdfTUFDSF9BTVNfREVMVEEpICs9IGxjZF9hbXNfZGVsdGEubwogb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQX0g0KSArPSBsY2RfaDQubwogb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQX0gzKSArPSBsY2RfaDMubwogb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQX1BBTE1URSkgKz0gbGNkX3BhbG10ZS5vCkBAIC0yNCw1ICsyNiwxNSBAQAogb2Jqcy0kKENPTkZJR19BUkNIX09NQVAxNVhYKSQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpICs9IGxjZF9pbm4xNTEwLm8KIG9ianMteSQoQ09ORklHX01BQ0hfT01BUF9PU0spICs9IGxjZF9vc2subwogCitvYmpzLXkkKENPTkZJR19NQUNIX09NQVBfQVBPTExPTikgKz0gbGNkX2Fwb2xsb24ubworb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFApICs9IGxjZF8yNDMwc2RwLm8KK29ianMteSQoQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQKSArPSBsY2RfMjQzMHNkcC5vCitvYmpzLXkkKENPTkZJR19NQUNIX09NQVBfTERQKSArPSBsY2RfbGRwLm8KK29ianMteSQoQ09ORklHX01BQ0hfT01BUDJFVk0pICs9IGxjZF9vbWFwMmV2bS5vCitvYmpzLXkkKENPTkZJR19NQUNIX09NQVAzRVZNKSArPSBsY2Rfb21hcDNldm0ubworb2Jqcy15JChDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUpICs9IGxjZF9vbWFwM2JlYWdsZS5vCitvYmpzLXkkKENPTkZJR19GQl9PTUFQX0xDRF9NSVBJRCkgKz0gbGNkX21pcGlkLm8KK29ianMteSQoQ09ORklHX01BQ0hfT1ZFUk8pICs9IGxjZF9vdmVyby5vCisKIG9tYXBmYi1vYmpzIDo9ICQob2Jqcy15eSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwppbmRleCA5ZGZjZjM5Li5kNWU1OTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwpAQCAtNDQsNiArNDQsNyBAQAogI2RlZmluZSBCTElaWkFSRF9DTEtfU1JDCQkJMHgwZQogI2RlZmluZSBCTElaWkFSRF9NRU1fQkFOSzBfQUNUSVZBVEUJCTB4MTAKICNkZWZpbmUgQkxJWlpBUkRfTUVNX0JBTkswX1NUQVRVUwkJMHgxNAorI2RlZmluZSBCTElaWkFSRF9QQU5FTF9DT05GSUdVUkFUSU9OCQkweDI4CiAjZGVmaW5lIEJMSVpaQVJEX0hESVNQCQkJCTB4MmEKICNkZWZpbmUgQkxJWlpBUkRfSE5EUAkJCQkweDJjCiAjZGVmaW5lIEJMSVpaQVJEX1ZESVNQMAkJCQkweDJlCkBAIC0xNjIsNiArMTYzLDEwIEBACiAJaW50CQkJdmlkX3NjYWxlZDsKIAlpbnQJCQlsYXN0X2NvbG9yX21vZGU7CiAJaW50CQkJem9vbV9vbjsKKwlpbnQJCQl6b29tX2FyZWFfZ3gxOworCWludAkJCXpvb21fYXJlYV9neDI7CisJaW50CQkJem9vbV9hcmVhX2d5MTsKKwlpbnQJCQl6b29tX2FyZWFfZ3kyOwogCWludAkJCXNjcmVlbl93aWR0aDsKIAlpbnQJCQlzY3JlZW5faGVpZ2h0OwogCXVuc2lnbmVkCQl0ZV9jb25uZWN0ZWQ6MTsKQEAgLTUxMyw2ICs1MTgsMTMgQEAKIAlyZXR1cm4gUkVRX1BFTkRJTkc7CiB9CiAKK3N0YXRpYyBpbnQgY2hlY2tfMWRfaW50ZXJzZWN0KGludCBhMSwgaW50IGEyLCBpbnQgYjEsIGludCBiMikKK3sKKwlpZiAoYTIgPD0gYjEgfHwgYjIgPD0gYTEpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCiAvKiBTZXR1cCBhbGwgcGxhbmVzIHdpdGggYW4gb3ZlcmxhcHBpbmcgYXJlYSB3aXRoIHRoZSB1cGRhdGUgd2luZG93LiAqLwogc3RhdGljIGludCBkb19wYXJ0aWFsX3VwZGF0ZShzdHJ1Y3QgYmxpenphcmRfcmVxdWVzdCAqcmVxLCBpbnQgcGxhbmUsCiAJCQkgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLApAQCAtNTI1LDYgKzUzNyw3IEBACiAJaW50IGNvbG9yX21vZGU7CiAJaW50IGZsYWdzOwogCWludCB6b29tX29mZjsKKwlpbnQgaGF2ZV96b29tX2Zvcl90aGlzX3VwZGF0ZSA9IDA7CiAKIAkvKiBHbG9iYWwgY29vcmRpbmF0ZXMsIHJlbGF0aXZlIHRvIHBpeGVsIDAsMCBvZiB0aGUgTENEICovCiAJZ3gxID0geCArIGJsaXp6YXJkLnBsYW5lW3BsYW5lXS5wb3NfeDsKQEAgLTU0NCwxMCArNTU3LDYgQEAKIAkJZ3gyX291dCA9IGd4MV9vdXQgKyB3X291dDsKIAkJZ3kyX291dCA9IGd5MV9vdXQgKyBoX291dDsKIAl9Ci0Jem9vbV9vZmYgPSBibGl6emFyZC56b29tX29uICYmIGd4MSA9PSAwICYmIGd5MSA9PSAwICYmCi0JCXcgPT0gYmxpenphcmQuc2NyZWVuX3dpZHRoICYmIGggPT0gYmxpenphcmQuc2NyZWVuX2hlaWdodDsKLQlibGl6emFyZC56b29tX29uID0gKCF6b29tX29mZiAmJiBibGl6emFyZC56b29tX29uKSB8fAotCQkJICAgKHcgPCB3X291dCB8fCBoIDwgaF9vdXQpOwogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBGQl9QTEFORV9OVU07IGkrKykgewogCQlzdHJ1Y3QgcGxhbmVfaW5mbyAqcCA9ICZibGl6emFyZC5wbGFuZVtpXTsKQEAgLTY1Myw4ICs2NjIsNDkgQEAKIAllbHNlCiAJCWRpc2FibGVfdGVhcnN5bmMoKTsKIAorCWlmICgoZ3gyX291dCAtIGd4MV9vdXQpICE9IChneDIgLSBneDEpIHx8CisJICAgIChneTJfb3V0IC0gZ3kxX291dCkgIT0gKGd5MiAtIGd5MSkpCisJCWhhdmVfem9vbV9mb3JfdGhpc191cGRhdGUgPSAxOworCisJLyogJ2JhY2tncm91bmQnIHR5cGUgb2Ygc2NyZWVuIHVwZGF0ZSAoYXMgb3Bwb3NlZCB0byAnZGVzdHJ1Y3RpdmUnKQorCSAgIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgc2NhbGluZyBpZiBzY2FsaW5nIGlzIGFjdGl2ZSAqLworCXpvb21fb2ZmID0gYmxpenphcmQuem9vbV9vbiAmJiAhaGF2ZV96b29tX2Zvcl90aGlzX3VwZGF0ZSAmJgorCSAgICAoZ3gxX291dCA9PSAwKSAmJiAoZ3gyX291dCA9PSBibGl6emFyZC5zY3JlZW5fd2lkdGgpICYmCisJICAgIChneTFfb3V0ID09IDApICYmIChneTJfb3V0ID09IGJsaXp6YXJkLnNjcmVlbl9oZWlnaHQpICYmCisJICAgIChneDEgPT0gMCkgJiYgKGd5MSA9PSAwKTsKKworCWlmIChibGl6emFyZC56b29tX29uICYmICFoYXZlX3pvb21fZm9yX3RoaXNfdXBkYXRlICYmICF6b29tX29mZiAmJgorCSAgICBjaGVja18xZF9pbnRlcnNlY3QoYmxpenphcmQuem9vbV9hcmVhX2d4MSwgYmxpenphcmQuem9vbV9hcmVhX2d4MiwKKwkJCSAgICAgICBneDFfb3V0LCBneDJfb3V0KSAmJgorCSAgICBjaGVja18xZF9pbnRlcnNlY3QoYmxpenphcmQuem9vbV9hcmVhX2d5MSwgYmxpenphcmQuem9vbV9hcmVhX2d5MiwKKwkJCSAgICAgICBneTFfb3V0LCBneTJfb3V0KSkgeworCQkvKiBQcmV2aW91cyBzY3JlZW4gdXBkYXRlIHdhcyB1c2luZyBzY2FsaW5nLCBjdXJyZW50IHVwZGF0ZQorCQkgKiBpcyBub3QgdXNpbmcgaXQuIEFkZGl0aW9uYWxseSwgY3VycmVudCBzY3JlZW4gdXBkYXRlIGlzCisJCSAqIGdvaW5nIHRvIG92ZXJsYXAgd2l0aCB0aGUgc2NhbGVkIGFyZWEuIFNjYWxpbmcgbmVlZHMgdG8gYmUKKwkJICogZGlzYWJsZWQgaW4gb3JkZXIgdG8gYXZvaWQgJ21hZ25pZnlpbmcgZ2xhc3MnIGVmZmVjdC4KKwkJICogRHVtbXkgc2V0dXAgb2YgYmFja2dyb3VuZCB3aW5kb3cgY2FuIGJlIHVzZWQgZm9yIHRoaXMuCisJCSAqLworCQlzZXRfd2luZG93X3JlZ3MoMCwgMCwgYmxpenphcmQuc2NyZWVuX3dpZHRoLAorCQkJCWJsaXp6YXJkLnNjcmVlbl9oZWlnaHQsCisJCQkJMCwgMCwgYmxpenphcmQuc2NyZWVuX3dpZHRoLAorCQkJCWJsaXp6YXJkLnNjcmVlbl9oZWlnaHQsCisJCQkJQkxJWlpBUkRfQ09MT1JfUkdCNTY1LCAxLCBmbGFncyk7CisJCWJsaXp6YXJkLnpvb21fb24gPSAwOworCX0KKworCS8qIHJlbWVtYmVyIHNjYWxpbmcgc2V0dGluZ3MgaWYgd2UgaGF2ZSBzY2FsZWQgdXBkYXRlICovCisJaWYgKGhhdmVfem9vbV9mb3JfdGhpc191cGRhdGUpIHsKKwkJYmxpenphcmQuem9vbV9vbiA9IDE7CisJCWJsaXp6YXJkLnpvb21fYXJlYV9neDEgPSBneDFfb3V0OworCQlibGl6emFyZC56b29tX2FyZWFfZ3gyID0gZ3gyX291dDsKKwkJYmxpenphcmQuem9vbV9hcmVhX2d5MSA9IGd5MV9vdXQ7CisJCWJsaXp6YXJkLnpvb21fYXJlYV9neTIgPSBneTJfb3V0OworCX0KKwogCXNldF93aW5kb3dfcmVncyhneDEsIGd5MSwgZ3gyLCBneTIsIGd4MV9vdXQsIGd5MV9vdXQsIGd4Ml9vdXQsIGd5Ml9vdXQsCiAJCQljb2xvcl9tb2RlLCB6b29tX29mZiwgZmxhZ3MpOworCWlmICh6b29tX29mZikKKwkJYmxpenphcmQuem9vbV9vbiA9IDA7CiAKIAlibGl6emFyZC5leHRpZi0+c2V0X2JpdHNfcGVyX2N5Y2xlKDE2KTsKIAkvKiBzZXRfd2luZG93X3JlZ3MgaGFzIGxlZnQgdGhlIHJlZ2lzdGVyIGluZGV4IGF0IHRoZSByaWdodApAQCAtOTA4LDYgKzk1OCwzNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJsaXp6YXJkX3NldF9yb3RhdGUoaW50IGFuZ2xlKQoreworCXUzMiBsOworCisJbCA9IGJsaXp6YXJkX3JlYWRfcmVnKEJMSVpaQVJEX1BBTkVMX0NPTkZJR1VSQVRJT04pOworCWwgJj0gfjB4MDM7CisKKwlzd2l0Y2ggKGFuZ2xlKSB7CisJY2FzZSAwOgorCQlsID0gbCB8IDB4MDA7CisJCWJyZWFrOworCWNhc2UgOTA6CisJCWwgPSBsIHwgMHgwMzsKKwkJYnJlYWs7CisJY2FzZSAxODA6CisJCWwgPSBsIHwgMHgwMjsKKwkJYnJlYWs7CisJY2FzZSAyNzA6CisJCWwgPSBsIHwgMHgwMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmxpenphcmRfd3JpdGVfcmVnKEJMSVpaQVJEX1BBTkVMX0NPTkZJR1VSQVRJT04sIGwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYmxpenphcmRfZW5hYmxlX3BsYW5lKGludCBwbGFuZSwgaW50IGVuYWJsZSkKIHsKIAlpZiAoZW5hYmxlKQpAQCAtMTI4NSw3ICsxMzY0LDggQEAKIAljYXBzLT5jdHJsIHw9IE9NQVBGQl9DQVBTX01BTlVBTF9VUERBVEUgfAogCQlPTUFQRkJfQ0FQU19XSU5ET1dfUElYRUxfRE9VQkxFIHwKIAkJT01BUEZCX0NBUFNfV0lORE9XX1NDQUxFIHwKLQkJT01BUEZCX0NBUFNfV0lORE9XX09WRVJMQVk7CisJCU9NQVBGQl9DQVBTX1dJTkRPV19PVkVSTEFZIHwKKwkJT01BUEZCX0NBUFNfV0lORE9XX1JPVEFURTsKIAlpZiAoYmxpenphcmQudGVfY29ubmVjdGVkKQogCQljYXBzLT5jdHJsIHw9IE9NQVBGQl9DQVBTX1RFQVJTWU5DOwogCWNhcHMtPnduZF9jb2xvciB8PSAoMSA8PCBPTUFQRkJfQ09MT1JfUkdCNTY1KSB8CkBAIC0xNTYwLDYgKzE2NDAsNyBAQAogCS5zZXR1cF9wbGFuZQkJPSBibGl6emFyZF9zZXR1cF9wbGFuZSwKIAkuc2V0X3NjYWxlCQk9IGJsaXp6YXJkX3NldF9zY2FsZSwKIAkuZW5hYmxlX3BsYW5lCQk9IGJsaXp6YXJkX2VuYWJsZV9wbGFuZSwKKwkuc2V0X3JvdGF0ZQkJPSBibGl6emFyZF9zZXRfcm90YXRlLAogCS51cGRhdGVfd2luZG93CQk9IGJsaXp6YXJkX3VwZGF0ZV93aW5kb3dfYXN5bmMsCiAJLnN5bmMJCQk9IGJsaXp6YXJkX3N5bmMsCiAJLnN1c3BlbmQJCT0gYmxpenphcmRfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKaW5kZXggOTE1NDM5ZC4uODBhMTFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKQEAgLTE1NSw2ICsxNTUsOCBAQAogCXVuc2lnbmVkIGxvbmcJKm1hcDsKIH07CiAKKyNkZWZpbmUgTUFYX0lSUV9IQU5ETEVSUyAgICAgICAgICAgIDQKKwogc3RhdGljIHN0cnVjdCB7CiAJdm9pZCBfX2lvbWVtCSpiYXNlOwogCkBAIC0xNjcsOSArMTY5LDExIEBACiAKIAlpbnQJCWV4dF9tb2RlOwogCi0JdW5zaWduZWQgbG9uZwllbmFibGVkX2lycXM7Ci0Jdm9pZAkJKCppcnFfY2FsbGJhY2spKHZvaWQgKik7Ci0Jdm9pZAkJKmlycV9jYWxsYmFja19kYXRhOworCXN0cnVjdCB7CisJCXUzMglpcnFfbWFzazsKKwkJdm9pZAkoKmNhbGxiYWNrKSh2b2lkICopOworCQl2b2lkCSpkYXRhOworCX0gaXJxX2hhbmRsZXJzW01BWF9JUlFfSEFORExFUlNdOwogCXN0cnVjdCBjb21wbGV0aW9uCWZyYW1lX2RvbmU7CiAKIAlpbnQJCWZpcl9oaW5jW09NQVBGQl9QTEFORV9OVU1dOwpAQCAtMjg2LDcgKzI5MCw3IEBACiAJQlVHX09OKHBsYW5lID4gMik7CiAKIAlsID0gZGlzcGNfcmVhZF9yZWcoZnN6X3JlZ1twbGFuZV0pOwotCWwgJj0gRkxEX01BU0soMCwgOSk7CisJbCAmPSBGTERfTUFTSygwLCAxMSk7CiAJaWYgKGV4dF9tb2RlKSB7CiAJCWxvdyA9IGwgKiAzIC8gNDsKIAkJaGlnaCA9IGw7CkBAIC0yOTQsNyArMjk4LDcgQEAKIAkJbG93ID0gbCAvIDQ7CiAJCWhpZ2ggPSBsICogMyAvIDQ7CiAJfQotCU1PRF9SRUdfRkxEKGZ0cnNfcmVnW3BsYW5lXSwgRkxEX01BU0soMTYsIDkpIHwgRkxEX01BU0soMCwgOSksCisJTU9EX1JFR19GTEQoZnRyc19yZWdbcGxhbmVdLCBGTERfTUFTSygxNiwgMTIpIHwgRkxEX01BU0soMCwgMTIpLAogCQkJKGhpZ2ggPDwgMTYpIHwgbG93KTsKIH0KIApAQCAtODA5LDU3ICs4MTMsNzQgQEAKIAlwYW5lbC0+cGl4ZWxfY2xvY2sgPSBmY2sgLyBsY2tfZGl2IC8gcGNrX2RpdiAvIDEwMDA7CiB9CiAKLWludCBvbWFwX2Rpc3BjX3JlcXVlc3RfaXJxKHZvaWQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCByZWNhbGNfaXJxX21hc2sodm9pZCkKIHsKLQlpbnQgciA9IDA7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBpcnFfbWFzayA9IERJU1BDX0lSUV9NQVNLX0VSUk9SOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9JUlFfSEFORExFUlM7IGkrKykgeworCQlpZiAoIWRpc3BjLmlycV9oYW5kbGVyc1tpXS5jYWxsYmFjaykKKwkJCWNvbnRpbnVlOworCisJCWlycV9tYXNrIHw9IGRpc3BjLmlycV9oYW5kbGVyc1tpXS5pcnFfbWFzazsKKwl9CisKKwllbmFibGVfbGNkX2Nsb2NrcygxKTsKKwlNT0RfUkVHX0ZMRChESVNQQ19JUlFFTkFCTEUsIDB4N2ZmZiwgaXJxX21hc2spOworCWVuYWJsZV9sY2RfY2xvY2tzKDApOworfQorCitpbnQgb21hcF9kaXNwY19yZXF1ZXN0X2lycSh1bnNpZ25lZCBsb25nIGlycV9tYXNrLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKIAogCUJVR19PTihjYWxsYmFjayA9PSBOVUxMKTsKIAotCWlmIChkaXNwYy5pcnFfY2FsbGJhY2spCi0JCXIgPSAtRUJVU1k7Ci0JZWxzZSB7Ci0JCWRpc3BjLmlycV9jYWxsYmFjayA9IGNhbGxiYWNrOwotCQlkaXNwYy5pcnFfY2FsbGJhY2tfZGF0YSA9IGRhdGE7CisJZm9yIChpID0gMDsgaSA8IE1BWF9JUlFfSEFORExFUlM7IGkrKykgeworCQlpZiAoZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmNhbGxiYWNrKQorCQkJY29udGludWU7CisKKwkJZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmlycV9tYXNrID0gaXJxX21hc2s7CisJCWRpc3BjLmlycV9oYW5kbGVyc1tpXS5jYWxsYmFjayA9IGNhbGxiYWNrOworCQlkaXNwYy5pcnFfaGFuZGxlcnNbaV0uZGF0YSA9IGRhdGE7CisJCXJlY2FsY19pcnFfbWFzaygpOworCisJCXJldHVybiAwOwogCX0KIAotCXJldHVybiByOworCXJldHVybiAtRUJVU1k7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEpOwogCi12b2lkIG9tYXBfZGlzcGNfZW5hYmxlX2lycXMoaW50IGlycV9tYXNrKQordm9pZCBvbWFwX2Rpc3BjX2ZyZWVfaXJxKHVuc2lnbmVkIGxvbmcgaXJxX21hc2ssIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSksCisJCQkgdm9pZCAqZGF0YSkKIHsKLQllbmFibGVfbGNkX2Nsb2NrcygxKTsKLQlkaXNwYy5lbmFibGVkX2lycXMgPSBpcnFfbWFzazsKLQlpcnFfbWFzayB8PSBESVNQQ19JUlFfTUFTS19FUlJPUjsKLQlNT0RfUkVHX0ZMRChESVNQQ19JUlFFTkFCTEUsIDB4N2ZmZiwgaXJxX21hc2spOwotCWVuYWJsZV9sY2RfY2xvY2tzKDApOwotfQotRVhQT1JUX1NZTUJPTChvbWFwX2Rpc3BjX2VuYWJsZV9pcnFzKTsKKwlpbnQgaTsKIAotdm9pZCBvbWFwX2Rpc3BjX2Rpc2FibGVfaXJxcyhpbnQgaXJxX21hc2spCi17Ci0JZW5hYmxlX2xjZF9jbG9ja3MoMSk7Ci0JZGlzcGMuZW5hYmxlZF9pcnFzICY9IH5pcnFfbWFzazsKLQlpcnFfbWFzayAmPSB+RElTUENfSVJRX01BU0tfRVJST1I7Ci0JTU9EX1JFR19GTEQoRElTUENfSVJRRU5BQkxFLCAweDdmZmYsIGlycV9tYXNrKTsKLQllbmFibGVfbGNkX2Nsb2NrcygwKTsKLX0KLUVYUE9SVF9TWU1CT0wob21hcF9kaXNwY19kaXNhYmxlX2lycXMpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVJRX0hBTkRMRVJTOyBpKyspIHsKKwkJaWYgKGRpc3BjLmlycV9oYW5kbGVyc1tpXS5jYWxsYmFjayA9PSBjYWxsYmFjayAmJgorCQkgICAgZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmRhdGEgPT0gZGF0YSkgeworCQkJZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmlycV9tYXNrID0gMDsKKwkJCWRpc3BjLmlycV9oYW5kbGVyc1tpXS5jYWxsYmFjayA9IE5VTEw7CisJCQlkaXNwYy5pcnFfaGFuZGxlcnNbaV0uZGF0YSA9IE5VTEw7CisJCQlyZWNhbGNfaXJxX21hc2soKTsKKwkJCXJldHVybjsKKwkJfQorCX0KIAotdm9pZCBvbWFwX2Rpc3BjX2ZyZWVfaXJxKHZvaWQpCi17Ci0JZW5hYmxlX2xjZF9jbG9ja3MoMSk7Ci0Jb21hcF9kaXNwY19kaXNhYmxlX2lycXMoRElTUENfSVJRX01BU0tfQUxMKTsKLQlkaXNwYy5pcnFfY2FsbGJhY2sgPSBOVUxMOwotCWRpc3BjLmlycV9jYWxsYmFja19kYXRhID0gTlVMTDsKLQllbmFibGVfbGNkX2Nsb2NrcygwKTsKKwlCVUcoKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9kaXNwY19mcmVlX2lycSk7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX2Rpc3BjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKIHsKLQl1MzIgc3RhdCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX0lSUVNUQVRVUyk7CisJdTMyIHN0YXQ7CisJaW50IGkgPSAwOwogCisJZW5hYmxlX2xjZF9jbG9ja3MoMSk7CisKKwlzdGF0ID0gZGlzcGNfcmVhZF9yZWcoRElTUENfSVJRU1RBVFVTKTsKIAlpZiAoc3RhdCAmIERJU1BDX0lSUV9GUkFNRU1BU0spCiAJCWNvbXBsZXRlKCZkaXNwYy5mcmFtZV9kb25lKTsKIApAQCAtODcwLDExICs4OTEsMTcgQEAKIAkJfQogCX0KIAotCWlmICgoc3RhdCAmIGRpc3BjLmVuYWJsZWRfaXJxcykgJiYgZGlzcGMuaXJxX2NhbGxiYWNrKQotCQlkaXNwYy5pcnFfY2FsbGJhY2soZGlzcGMuaXJxX2NhbGxiYWNrX2RhdGEpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVJRX0hBTkRMRVJTOyBpKyspIHsKKwkJaWYgKHVubGlrZWx5KGRpc3BjLmlycV9oYW5kbGVyc1tpXS5jYWxsYmFjayAmJgorCQkJICAgICAoc3RhdCAmIGRpc3BjLmlycV9oYW5kbGVyc1tpXS5pcnFfbWFzaykpKQorCQkJZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmNhbGxiYWNrKAorCQkJCQkJZGlzcGMuaXJxX2hhbmRsZXJzW2ldLmRhdGEpOworCX0KIAogCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19JUlFTVEFUVVMsIHN0YXQpOwogCisJZW5hYmxlX2xjZF9jbG9ja3MoMCk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTkxMywxOCArOTQwLDEzIEBACiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9sY2RfY2xvY2tzKGludCBlbmFibGUpCiB7Ci0JaWYgKGVuYWJsZSkKLQkJY2xrX2VuYWJsZShkaXNwYy5kc3MxX2Zjayk7Ci0JZWxzZQotCQljbGtfZGlzYWJsZShkaXNwYy5kc3MxX2Zjayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9pbnRlcmZhY2VfY2xvY2tzKGludCBlbmFibGUpCi17Ci0JaWYgKGVuYWJsZSkKKwlpZiAoZW5hYmxlKSB7CiAJCWNsa19lbmFibGUoZGlzcGMuZHNzX2ljayk7Ci0JZWxzZQorCQljbGtfZW5hYmxlKGRpc3BjLmRzczFfZmNrKTsKKwl9IGVsc2UgeworCQljbGtfZGlzYWJsZShkaXNwYy5kc3MxX2Zjayk7CiAJCWNsa19kaXNhYmxlKGRpc3BjLmRzc19pY2spOworCX0KIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2RpZ2l0X2Nsb2NrcyhpbnQgZW5hYmxlKQpAQCAtMTM2NSw3ICsxMzg3LDYgQEAKIAlpZiAoKHIgPSBnZXRfZHNzX2Nsb2NrcygpKSA8IDApCiAJCWdvdG8gZmFpbDA7CiAKLQllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygxKTsKIAllbmFibGVfbGNkX2Nsb2NrcygxKTsKIAogI2lmZGVmIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVApAQCAtMTM5NiwxMCArMTQxNywxMCBAQAogCQllbmFibGVfZGlnaXRfY2xvY2tzKDApOwogCX0KIAotCS8qIEVuYWJsZSBzbWFydCBpZGxlIGFuZCBhdXRvaWRsZSAqLwotCWwgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19DT05UUk9MKTsKKwkvKiBFbmFibGUgc21hcnQgc3RhbmRieS9pZGxlLCBhdXRvaWRsZSBhbmQgd2FrZXVwICovCisJbCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX1NZU0NPTkZJRyk7CiAJbCAmPSB+KCgzIDw8IDEyKSB8ICgzIDw8IDMpKTsKLQlsIHw9ICgyIDw8IDEyKSB8ICgyIDw8IDMpIHwgKDEgPDwgMCk7CisJbCB8PSAoMiA8PCAxMikgfCAoMiA8PCAzKSB8ICgxIDw8IDIpIHwgKDEgPDwgMCk7CiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX1NZU0NPTkZJRywgbCk7CiAJb21hcF93cml0ZWwoMSA8PCAwLCBEU1NfQkFTRSArIERTU19TWVNDT05GSUcpOwogCkBAIC0xNDA5LDEwICsxNDMwLDkgQEAKIAlkaXNwY193cml0ZV9yZWcoRElTUENfQ09ORklHLCBsKTsKIAogCWwgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19JUlFTVEFUVVMpOwotCWRpc3BjX3dyaXRlX3JlZyhsLCBESVNQQ19JUlFTVEFUVVMpOworCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19JUlFTVEFUVVMsIGwpOwogCi0JLyogRW5hYmxlIHRob3NlIHRoYXQgd2UgaGFuZGxlIGFsd2F5cyAqLwotCW9tYXBfZGlzcGNfZW5hYmxlX2lycXMoRElTUENfSVJRX0ZSQU1FTUFTSyk7CisJcmVjYWxjX2lycV9tYXNrKCk7CiAKIAlpZiAoKHIgPSByZXF1ZXN0X2lycShJTlRfMjRYWF9EU1NfSVJRLCBvbWFwX2Rpc3BjX2lycV9oYW5kbGVyLAogCQkJICAgMCwgTU9EVUxFX05BTUUsIGZiZGV2KSkgPCAwKSB7CkBAIC0xNDY5LDcgKzE0ODksNiBAQAogCWZyZWVfaXJxKElOVF8yNFhYX0RTU19JUlEsIGZiZGV2KTsKIGZhaWwxOgogCWVuYWJsZV9sY2RfY2xvY2tzKDApOwotCWVuYWJsZV9pbnRlcmZhY2VfY2xvY2tzKDApOwogCXB1dF9kc3NfY2xvY2tzKCk7CiBmYWlsMDoKIAlpb3VubWFwKGRpc3BjLmJhc2UpOwpAQCAtMTQ4Nyw3ICsxNTA2LDYgQEAKIAljbGVhbnVwX2ZibWVtKCk7CiAJZnJlZV9wYWxldHRlX3JhbSgpOwogCWZyZWVfaXJxKElOVF8yNFhYX0RTU19JUlEsIGRpc3BjLmZiZGV2KTsKLQllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygwKTsKIAlwdXRfZHNzX2Nsb2NrcygpOwogCWlvdW5tYXAoZGlzcGMuYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaCBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5oCmluZGV4IGVmNzIwYTcuLmMxNWVhNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5oCkBAIC0zNyw5ICszNywxMCBAQAogZXh0ZXJuIHZvaWQgb21hcF9kaXNwY19lbmFibGVfbGNkX291dChpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIG9tYXBfZGlzcGNfZW5hYmxlX2RpZ2l0X291dChpbnQgZW5hYmxlKTsKIAotZXh0ZXJuIGludCAgb21hcF9kaXNwY19yZXF1ZXN0X2lycSh2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIG9tYXBfZGlzcGNfZnJlZV9pcnEodm9pZCk7CitleHRlcm4gaW50IG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEodW5zaWduZWQgbG9uZyBpcnFfbWFzaywKKwkJCQkgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIG9tYXBfZGlzcGNfZnJlZV9pcnEodW5zaWduZWQgbG9uZyBpcnFfbWFzaywKKwkJCQkgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfaW50X2N0cmw7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5jIGIvZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5jCmluZGV4IDVkNGYzNDguLmNhNTE1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvaHdhNzQyLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCiAJc3RydWN0IG9tYXBmYl9kZXZpY2UJKmZiZGV2OwogCXN0cnVjdCBsY2RfY3RybF9leHRpZgkqZXh0aWY7Ci0Jc3RydWN0IGxjZF9jdHJsCQkqaW50X2N0cmw7CisJY29uc3Qgc3RydWN0IGxjZF9jdHJsCSppbnRfY3RybDsKIAogCXN0cnVjdCBjbGsJCSpzeXNfY2s7CiB9IGh3YTc0MjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfMjQzMHNkcC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF8yNDMwc2RwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzNzEyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfMjQzMHNkcC5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogTENEIHBhbmVsIHN1cHBvcnQgZm9yIHRoZSBUSSAyNDMwU0RQIGJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IE1vbnRhVmlzdGEKKyAqIEF1dGhvcjogSHVueXVlIFlhdSA8aHlhdUBtdmlzdGEuY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL3ZpZGVvL29tYXAvbGNkLWFwb2xsb24uYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNkZWZpbmUgU0RQMjQzMF9MQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8JOTEKKyNkZWZpbmUgU0RQMjQzMF9MQ0RfUEFORUxfRU5BQkxFX0dQSU8JCTE1NAorI2RlZmluZSBTRFAzNDMwX0xDRF9QQU5FTF9CQUNLTElHSFRfR1BJTwkyNAorI2RlZmluZSBTRFAzNDMwX0xDRF9QQU5FTF9FTkFCTEVfR1BJTwkJMjgKKworc3RhdGljIHVuc2lnbmVkIGJhY2tsaWdodF9ncGlvOworc3RhdGljIHVuc2lnbmVkIGVuYWJsZV9ncGlvOworCisjZGVmaW5lIExDRF9QSVhDTE9DS19NQVgJCTU0MDAgLyogZnJlcSA1LjQgTUh6ICovCisjZGVmaW5lIFBNX1JFQ0VJVkVSICAgICAgICAgICAgIFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSCisjZGVmaW5lIEVOQUJMRV9WQVVYMl9ERURJQ0FURUQgIDB4MDkKKyNkZWZpbmUgRU5BQkxFX1ZBVVgyX0RFVl9HUlAgICAgMHgyMAorI2RlZmluZSBFTkFCTEVfVkFVWDNfREVESUNBVEVECTB4MDMKKyNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFVl9HUlAJMHgyMAorCisjZGVmaW5lIEVOQUJMRV9WUExMMl9ERURJQ0FURUQgICAgICAgICAgMHgwNQorI2RlZmluZSBFTkFCTEVfVlBMTDJfREVWX0dSUCAgICAgICAgICAgIDB4RTAKKyNkZWZpbmUgVFdMNDAzMF9WUExMMl9ERVZfR1JQICAgICAgICAgICAweDMzCisjZGVmaW5lIFRXTDQwMzBfVlBMTDJfREVESUNBVEVEICAgICAgICAgMHgzNgorCisjZGVmaW5lIHQyX291dChjLCByLCB2KSB0d2w0MDMwX2kyY193cml0ZV91OChjLCByLCB2KQorCisKK3N0YXRpYyBpbnQgc2RwMjQzMF9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKK3sKKwlpZiAobWFjaGluZV9pc19vbWFwXzM0MzBzZHAoKSkgeworCQllbmFibGVfZ3BpbyAgICA9IFNEUDM0MzBfTENEX1BBTkVMX0VOQUJMRV9HUElPOworCQliYWNrbGlnaHRfZ3BpbyA9IFNEUDM0MzBfTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPOworCX0gZWxzZSB7CisJCWVuYWJsZV9ncGlvICAgID0gU0RQMjQzMF9MQ0RfUEFORUxfRU5BQkxFX0dQSU87CisJCWJhY2tsaWdodF9ncGlvID0gU0RQMjQzMF9MQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU87CisJfQorCisJZ3Bpb19yZXF1ZXN0KGVuYWJsZV9ncGlvLCAiTENEIGVuYWJsZSIpOwkvKiBMQ0QgcGFuZWwgKi8KKwlncGlvX3JlcXVlc3QoYmFja2xpZ2h0X2dwaW8sICJMQ0QgYmwiKTsJCS8qIExDRCBiYWNrbGlnaHQgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZW5hYmxlX2dwaW8sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChiYWNrbGlnaHRfZ3BpbywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RwMjQzMF9wYW5lbF9jbGVhbnVwKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fZnJlZShiYWNrbGlnaHRfZ3Bpbyk7CisJZ3Bpb19mcmVlKGVuYWJsZV9ncGlvKTsKK30KKworc3RhdGljIGludCBzZHAyNDMwX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwl1OCBkZWRfdmFsLCBkZWRfcmVnOworCXU4IGdycF92YWwsIGdycF9yZWc7CisKKwlpZiAobWFjaGluZV9pc19vbWFwXzM0MzBzZHAoKSkgeworCQlkZWRfcmVnID0gVFdMNDAzMF9WQVVYM19ERURJQ0FURUQ7CisJCWRlZF92YWwgPSBFTkFCTEVfVkFVWDNfREVESUNBVEVEOworCQlncnBfcmVnID0gVFdMNDAzMF9WQVVYM19ERVZfR1JQOworCQlncnBfdmFsID0gRU5BQkxFX1ZBVVgzX0RFVl9HUlA7CisKKwkJaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKKwkJCXQyX291dChQTV9SRUNFSVZFUiwgRU5BQkxFX1ZQTEwyX0RFRElDQVRFRCwKKwkJCQkJVFdMNDAzMF9WUExMMl9ERURJQ0FURUQpOworCQkJdDJfb3V0KFBNX1JFQ0VJVkVSLCBFTkFCTEVfVlBMTDJfREVWX0dSUCwKKwkJCQkJVFdMNDAzMF9WUExMMl9ERVZfR1JQKTsKKwkJfQorCX0gZWxzZSB7CisJCWRlZF9yZWcgPSBUV0w0MDMwX1ZBVVgyX0RFRElDQVRFRDsKKwkJZGVkX3ZhbCA9IEVOQUJMRV9WQVVYMl9ERURJQ0FURUQ7CisJCWdycF9yZWcgPSBUV0w0MDMwX1ZBVVgyX0RFVl9HUlA7CisJCWdycF92YWwgPSBFTkFCTEVfVkFVWDJfREVWX0dSUDsKKwl9CisKKwlncGlvX3NldF92YWx1ZShlbmFibGVfZ3BpbywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoYmFja2xpZ2h0X2dwaW8sIDEpOworCisJaWYgKDAgIT0gdDJfb3V0KFBNX1JFQ0VJVkVSLCBkZWRfdmFsLCBkZWRfcmVnKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKDAgIT0gdDJfb3V0KFBNX1JFQ0VJVkVSLCBncnBfdmFsLCBncnBfcmVnKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RwMjQzMF9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fc2V0X3ZhbHVlKGVuYWJsZV9ncGlvLCAwKTsKKwlncGlvX3NldF92YWx1ZShiYWNrbGlnaHRfZ3BpbywgMCk7CisJaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKKwkJdDJfb3V0KFBNX1JFQ0VJVkVSLCAweDAsIFRXTDQwMzBfVlBMTDJfREVESUNBVEVEKTsKKwkJdDJfb3V0KFBNX1JFQ0VJVkVSLCAweDAsIFRXTDQwMzBfVlBMTDJfREVWX0dSUCk7CisJCW1zbGVlcCg0KTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNkcDI0MzBfcGFuZWxfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsY2RfcGFuZWwgc2RwMjQzMF9wYW5lbCA9IHsKKwkubmFtZQkJPSAic2RwMjQzMCIsCisJLmNvbmZpZwkJPSBPTUFQX0xDRENfUEFORUxfVEZUIHwgT01BUF9MQ0RDX0lOVl9WU1lOQyB8CisJCQkgIE9NQVBfTENEQ19JTlZfSFNZTkMsCisKKwkuYnBwCQk9IDE2LAorCS5kYXRhX2xpbmVzCT0gMTYsCisJLnhfcmVzCQk9IDI0MCwKKwkueV9yZXMJCT0gMzIwLAorCS5oc3cJCT0gMywJCS8qIGhzeW5jX2xlbiAoNCkgLSAxICovCisJLmhmcAkJPSAzLAkJLyogcmlnaHRfbWFyZ2luICg0KSAtIDEgKi8KKwkuaGJwCQk9IDM5LAkJLyogbGVmdF9tYXJnaW4gKDQwKSAtIDEgKi8KKwkudnN3CQk9IDEsCQkvKiB2c3luY19sZW4gKDIpIC0gMSAqLworCS52ZnAJCT0gMiwJCS8qIGxvd2VyX21hcmdpbiAqLworCS52YnAJCT0gNywJCS8qIHVwcGVyX21hcmdpbiAoOCkgLSAxICovCisKKwkucGl4ZWxfY2xvY2sJPSBMQ0RfUElYQ0xPQ0tfTUFYLAorCisJLmluaXQJCT0gc2RwMjQzMF9wYW5lbF9pbml0LAorCS5jbGVhbnVwCT0gc2RwMjQzMF9wYW5lbF9jbGVhbnVwLAorCS5lbmFibGUJCT0gc2RwMjQzMF9wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSBzZHAyNDMwX3BhbmVsX2Rpc2FibGUsCisJLmdldF9jYXBzCT0gc2RwMjQzMF9wYW5lbF9nZXRfY2FwcywKK307CisKK3N0YXRpYyBpbnQgc2RwMjQzMF9wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmc2RwMjQzMF9wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RwMjQzMF9wYW5lbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZHAyNDMwX3BhbmVsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJcG1fbWVzc2FnZV90IG1lc2cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RwMjQzMF9wYW5lbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZHAyNDMwX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc2RwMjQzMF9wYW5lbF9wcm9iZSwKKwkucmVtb3ZlCQk9IHNkcDI0MzBfcGFuZWxfcmVtb3ZlLAorCS5zdXNwZW5kCT0gc2RwMjQzMF9wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2RwMjQzMF9wYW5lbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNkcDI0MzBfbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkcDI0MzBfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZHAyNDMwX3BhbmVsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZHAyNDMwX3BhbmVsX2Rydl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNkcDI0MzBfcGFuZWxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2RwMjQzMF9wYW5lbF9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdChzZHAyNDMwX3BhbmVsX2Rydl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYW1zX2RlbHRhLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2Ftc19kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzQzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2Ftc19kZWx0YS5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQmFzZWQgb24gZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNTEwLmMKKyAqCisgKiBMQ0QgcGFuZWwgc3VwcG9ydCBmb3IgdGhlIEFtc3RyYWQgRTMgKERlbHRhKSB2aWRlb3Bob25lLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKb25hdGhhbiBNY0Rvd2VsbCA8bm9vZGxlc0BlYXJ0aC5saT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1hbXMtZGVsdGEuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwZmIuaD4KKworI2RlZmluZSBBTVNfREVMVEFfREVGQVVMVF9DT05UUkFTVAkxMTIKKworc3RhdGljIGludCBhbXNfZGVsdGFfcGFuZWxfaW5pdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwKKwkJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKK30KKworc3RhdGljIGludCBhbXNfZGVsdGFfcGFuZWxfZW5hYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9MQ0RfTkRJU1AsCisJCQlBTVNfREVMVEFfTEFUQ0gyX0xDRF9ORElTUCk7CisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShBTVNfREVMVEFfTEFUQ0gyX0xDRF9WQkxFTiwKKwkJCUFNU19ERUxUQV9MQVRDSDJfTENEX1ZCTEVOKTsKKworCW9tYXBfd3JpdGViKDEsIE9NQVBfUFdMX0NMS19FTkFCTEUpOworCW9tYXBfd3JpdGViKEFNU19ERUxUQV9ERUZBVUxUX0NPTlRSQVNULCBPTUFQX1BXTF9FTkFCTEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtc19kZWx0YV9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9MQ0RfVkJMRU4sIDApOworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9MQ0RfTkRJU1AsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbXNfZGVsdGFfcGFuZWxfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGNkX3BhbmVsIGFtc19kZWx0YV9wYW5lbCA9IHsKKwkubmFtZQkJPSAiYW1zLWRlbHRhIiwKKwkuY29uZmlnCQk9IDAsCisKKwkuYnBwCQk9IDEyLAorCS5kYXRhX2xpbmVzCT0gMTYsCisJLnhfcmVzCQk9IDQ4MCwKKwkueV9yZXMJCT0gMzIwLAorCS5waXhlbF9jbG9jawk9IDQ2ODcsCisJLmhzdwkJPSAzLAorCS5oZnAJCT0gMSwKKwkuaGJwCQk9IDEsCisJLnZzdwkJPSAxLAorCS52ZnAJCT0gMCwKKwkudmJwCQk9IDAsCisJLnBjZAkJPSAwLAorCS5hY2IJCT0gMzcsCisKKwkuaW5pdAkJPSBhbXNfZGVsdGFfcGFuZWxfaW5pdCwKKwkuY2xlYW51cAk9IGFtc19kZWx0YV9wYW5lbF9jbGVhbnVwLAorCS5lbmFibGUJCT0gYW1zX2RlbHRhX3BhbmVsX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGFtc19kZWx0YV9wYW5lbF9kaXNhYmxlLAorCS5nZXRfY2Fwcwk9IGFtc19kZWx0YV9wYW5lbF9nZXRfY2FwcywKK307CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX3BhbmVsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb21hcGZiX3JlZ2lzdGVyX3BhbmVsKCZhbXNfZGVsdGFfcGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtc19kZWx0YV9wYW5lbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbXNfZGVsdGFfcGFuZWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbXNfZGVsdGFfcGFuZWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYW1zX2RlbHRhX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gYW1zX2RlbHRhX3BhbmVsX3Byb2JlLAorCS5yZW1vdmUJCT0gYW1zX2RlbHRhX3BhbmVsX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGFtc19kZWx0YV9wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYW1zX2RlbHRhX3BhbmVsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibGNkX2Ftc19kZWx0YSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IGFtc19kZWx0YV9wYW5lbF9kcnZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtc19kZWx0YV9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYW1zX2RlbHRhX3BhbmVsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFtc19kZWx0YV9wYW5lbF9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdChhbXNfZGVsdGFfcGFuZWxfZHJ2X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9hcG9sbG9uLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2Fwb2xsb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjZhZTNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9hcG9sbG9uLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBMQ0QgcGFuZWwgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgT01BUDIgQXBvbGxvbiBib2FyZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEF1dGhvcjogS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy92aWRlby9vbWFwL2xjZC1oNC5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorCisvKiAjZGVmaW5lIFVTRV8zNUlOQ0hfTENEIDEgKi8KKworc3RhdGljIGludCBhcG9sbG9uX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCS8qIGNvbmZpZ3VyZSBMQ0QgUFdSX0VOICovCisJb21hcF9jZmdfcmVnKE0yMV8yNDJYX0dQSU8xMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwb2xsb25fcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKK30KKworc3RhdGljIGludCBhcG9sbG9uX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXBvbGxvbl9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhcG9sbG9uX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbGNkX3BhbmVsIGFwb2xsb25fcGFuZWwgPSB7CisJLm5hbWUJCT0gImFwb2xsb24iLAorCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCB8IE9NQVBfTENEQ19JTlZfVlNZTkMgfAorCQkJICBPTUFQX0xDRENfSU5WX0hTWU5DLAorCisJLmJwcAkJPSAxNiwKKwkuZGF0YV9saW5lcwk9IDE4LAorI2lmZGVmIFVTRV8zNUlOQ0hfTENECisJLnhfcmVzCQk9IDI0MCwKKwkueV9yZXMJCT0gMzIwLAorCS5oc3cJCT0gMiwKKwkuaGZwCQk9IDMsCisJLmhicAkJPSA5LAorCS52c3cJCT0gNCwKKwkudmZwCQk9IDMsCisJLnZicAkJPSA1LAorI2Vsc2UKKwkueF9yZXMJCT0gNDgwLAorCS55X3JlcwkJPSAyNzIsCisJLmhzdwkJPSA0MSwKKwkuaGZwCQk9IDIsCisJLmhicAkJPSAyLAorCS52c3cJCT0gMTAsCisJLnZmcAkJPSAyLAorCS52YnAJCT0gMiwKKyNlbmRpZgorCS5waXhlbF9jbG9jawk9IDYyNTAsCisKKwkuaW5pdAkJPSBhcG9sbG9uX3BhbmVsX2luaXQsCisJLmNsZWFudXAJPSBhcG9sbG9uX3BhbmVsX2NsZWFudXAsCisJLmVuYWJsZQkJPSBhcG9sbG9uX3BhbmVsX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGFwb2xsb25fcGFuZWxfZGlzYWJsZSwKKwkuZ2V0X2NhcHMJPSBhcG9sbG9uX3BhbmVsX2dldF9jYXBzLAorfTsKKworc3RhdGljIGludCBhcG9sbG9uX3BhbmVsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb21hcGZiX3JlZ2lzdGVyX3BhbmVsKCZhcG9sbG9uX3BhbmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcG9sbG9uX3BhbmVsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwb2xsb25fcGFuZWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBvbGxvbl9wYW5lbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhcG9sbG9uX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gYXBvbGxvbl9wYW5lbF9wcm9iZSwKKwkucmVtb3ZlCQk9IGFwb2xsb25fcGFuZWxfcmVtb3ZlLAorCS5zdXNwZW5kCT0gYXBvbGxvbl9wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXBvbGxvbl9wYW5lbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImFwb2xsb25fbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFwb2xsb25fcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhcG9sbG9uX3BhbmVsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcG9sbG9uX3BhbmVsX2Rydl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFwb2xsb25fcGFuZWxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYXBvbGxvbl9wYW5lbF9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdChhcG9sbG9uX3BhbmVsX2Rydl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDMuYwppbmRleCAyNDg2MjM3Li40MTdhZTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2gzLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oMy5jCkBAIC0xMjQsMTIgKzEyNCwxMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IGgzX3BhbmVsX2Rydl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBoM19wYW5lbF9kcnZfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmgzX3BhbmVsX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGgzX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaDNfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaDNfcGFuZWxfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYwppbmRleCA2ZmY1NjQzLi4wYzM5OGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2g0LmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oNC5jCkBAIC0xMDIsMTIgKzEwMiwxMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IGg0X3BhbmVsX2Rydl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBoNF9wYW5lbF9kcnZfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmg0X3BhbmVsX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGg0X3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaDRfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaDRfcGFuZWxfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTUxMC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNTEwLmMKaW5kZXggNjk1M2VkNC4uY2RiZDhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNTEwLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNTEwLmMKQEAgLTEwOSwxMiArMTA5LDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgaW5ub3ZhdG9yMTUxMF9wYW5lbF9kcnZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5ub3ZhdG9yMTUxMF9wYW5lbF9kcnZfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlubm92YXRvcjE1MTBfcGFuZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgaW5ub3ZhdG9yMTUxMF9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlubm92YXRvcjE1MTBfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW5ub3ZhdG9yMTUxMF9wYW5lbF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNjEwLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYwppbmRleCA0YzRmN2VlLi4yNjhmN2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYwpAQCAtMTMzLDEyICsxMzMsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBpbm5vdmF0b3IxNjEwX3BhbmVsX2Rydl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbm5vdmF0b3IxNjEwX3BhbmVsX2Rydl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW5ub3ZhdG9yMTYxMF9wYW5lbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBpbm5vdmF0b3IxNjEwX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbm5vdmF0b3IxNjEwX3BhbmVsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2xkcC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9sZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmZlODk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9sZHAuYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIExDRCBwYW5lbCBzdXBwb3J0IGZvciB0aGUgVEkgTERQIGJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFdpbmRSaXZlcgorICogQXV0aG9yOiBTdGFubGV5IE1pYW8gPHN0YW5sZXkubWlhb0B3aW5kcml2ZXIuY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL3ZpZGVvL29tYXAvbGNkLTI0MzBzZHAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2RlZmluZSBMQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8JKDE1ICsgT01BUF9NQVhfR1BJT19MSU5FUykKKyNkZWZpbmUgTENEX1BBTkVMX0VOQUJMRV9HUElPCQkoNyArIE9NQVBfTUFYX0dQSU9fTElORVMpCisKKyNkZWZpbmUgTENEX1BBTkVMX1JFU0VUX0dQSU8JCTU1CisjZGVmaW5lIExDRF9QQU5FTF9RVkdBX0dQSU8JCTU2CisKKyNpZmRlZiBDT05GSUdfRkJfT01BUF9MQ0RfVkdBCisjZGVmaW5lIExDRF9YUkVTCQk0ODAKKyNkZWZpbmUgTENEX1lSRVMJCTY0MAorI2RlZmluZSBMQ0RfUElYQ0xPQ0tfTUFYCTQxNzAwCisjZWxzZQorI2RlZmluZSBMQ0RfWFJFUwkJMjQwCisjZGVmaW5lIExDRF9ZUkVTCQkzMjAKKyNkZWZpbmUgTENEX1BJWENMT0NLX01BWAkxODUxODYKKyNlbmRpZgorCisjZGVmaW5lIFBNX1JFQ0VJVkVSICAgICAgICAgICAgIFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSCisjZGVmaW5lIEVOQUJMRV9WQVVYMl9ERURJQ0FURUQgIDB4MDkKKyNkZWZpbmUgRU5BQkxFX1ZBVVgyX0RFVl9HUlAgICAgMHgyMAorI2RlZmluZSBFTkFCTEVfVkFVWDNfREVESUNBVEVECTB4MDMKKyNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFVl9HUlAJMHgyMAorCisjZGVmaW5lIEVOQUJMRV9WUExMMl9ERURJQ0FURUQgICAgICAgICAgMHgwNQorI2RlZmluZSBFTkFCTEVfVlBMTDJfREVWX0dSUCAgICAgICAgICAgIDB4RTAKKyNkZWZpbmUgVFdMNDAzMF9WUExMMl9ERVZfR1JQICAgICAgICAgICAweDMzCisjZGVmaW5lIFRXTDQwMzBfVlBMTDJfREVESUNBVEVEICAgICAgICAgMHgzNgorCisjZGVmaW5lIHQyX291dChjLCByLCB2KSB0d2w0MDMwX2kyY193cml0ZV91OChjLCByLCB2KQorCisKK3N0YXRpYyBpbnQgbGRwX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfUkVTRVRfR1BJTywgImxjZCByZXNldCIpOworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfUVZHQV9HUElPLCAibGNkIHF2Z2EiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAibGNkIHBhbmVsIik7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9CQUNLTElHSFRfR1BJTywgImxjZCBiYWNrbGlnaHQiKTsKKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfUVZHQV9HUElPLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1JFU0VUX0dQSU8sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8sIDApOworCisjaWZkZWYgQ09ORklHX0ZCX09NQVBfTENEX1ZHQQorCWdwaW9fc2V0X3ZhbHVlKExDRF9QQU5FTF9RVkdBX0dQSU8sIDApOworI2Vsc2UKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfUVZHQV9HUElPLCAxKTsKKyNlbmRpZgorCWdwaW9fc2V0X3ZhbHVlKExDRF9QQU5FTF9SRVNFVF9HUElPLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsZHBfcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX2ZyZWUoTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX0VOQUJMRV9HUElPKTsKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1FWR0FfR1BJTyk7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9SRVNFVF9HUElPKTsKK30KKworc3RhdGljIGludCBsZHBfcGFuZWxfZW5hYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWlmICgwICE9IHQyX291dChQTV9SRUNFSVZFUiwgRU5BQkxFX1ZQTEwyX0RFRElDQVRFRCwKKwkJCVRXTDQwMzBfVlBMTDJfREVESUNBVEVEKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKDAgIT0gdDJfb3V0KFBNX1JFQ0VJVkVSLCBFTkFCTEVfVlBMTDJfREVWX0dSUCwKKwkJCVRXTDQwMzBfVlBMTDJfREVWX0dSUCkpCisJCXJldHVybiAtRUlPOworCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9FTkFCTEVfR1BJTywgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9CQUNLTElHSFRfR1BJTywgMSk7CisKKwlpZiAoMCAhPSB0Ml9vdXQoUE1fUkVDRUlWRVIsIEVOQUJMRV9WQVVYM19ERURJQ0FURUQsCisJCQkJVFdMNDAzMF9WQVVYM19ERURJQ0FURUQpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoMCAhPSB0Ml9vdXQoUE1fUkVDRUlWRVIsIEVOQUJMRV9WQVVYM19ERVZfR1JQLAorCQkJCVRXTDQwMzBfVkFVWDNfREVWX0dSUCkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxkcF9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8sIDApOworCisJdDJfb3V0KFBNX1JFQ0VJVkVSLCAweDAsIFRXTDQwMzBfVlBMTDJfREVESUNBVEVEKTsKKwl0Ml9vdXQoUE1fUkVDRUlWRVIsIDB4MCwgVFdMNDAzMF9WUExMMl9ERVZfR1JQKTsKKwltc2xlZXAoNCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxkcF9wYW5lbF9nZXRfY2FwcyhzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGxjZF9wYW5lbCBsZHBfcGFuZWwgPSB7CisJLm5hbWUJCT0gImxkcCIsCisJLmNvbmZpZwkJPSBPTUFQX0xDRENfUEFORUxfVEZUIHwgT01BUF9MQ0RDX0lOVl9WU1lOQyB8CisJCQkgIE9NQVBfTENEQ19JTlZfSFNZTkMsCisKKwkuYnBwCQk9IDE2LAorCS5kYXRhX2xpbmVzCT0gMTgsCisJLnhfcmVzCQk9IExDRF9YUkVTLAorCS55X3JlcwkJPSBMQ0RfWVJFUywKKwkuaHN3CQk9IDMsCQkvKiBoc3luY19sZW4gKDQpIC0gMSAqLworCS5oZnAJCT0gMywJCS8qIHJpZ2h0X21hcmdpbiAoNCkgLSAxICovCisJLmhicAkJPSAzOSwJCS8qIGxlZnRfbWFyZ2luICg0MCkgLSAxICovCisJLnZzdwkJPSAxLAkJLyogdnN5bmNfbGVuICgyKSAtIDEgKi8KKwkudmZwCQk9IDIsCQkvKiBsb3dlcl9tYXJnaW4gKi8KKwkudmJwCQk9IDcsCQkvKiB1cHBlcl9tYXJnaW4gKDgpIC0gMSAqLworCisJLnBpeGVsX2Nsb2NrCT0gTENEX1BJWENMT0NLX01BWCwKKworCS5pbml0CQk9IGxkcF9wYW5lbF9pbml0LAorCS5jbGVhbnVwCT0gbGRwX3BhbmVsX2NsZWFudXAsCisJLmVuYWJsZQkJPSBsZHBfcGFuZWxfZW5hYmxlLAorCS5kaXNhYmxlCT0gbGRwX3BhbmVsX2Rpc2FibGUsCisJLmdldF9jYXBzCT0gbGRwX3BhbmVsX2dldF9jYXBzLAorfTsKKworc3RhdGljIGludCBsZHBfcGFuZWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlvbWFwZmJfcmVnaXN0ZXJfcGFuZWwoJmxkcF9wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGRwX3BhbmVsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxkcF9wYW5lbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxkcF9wYW5lbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsZHBfcGFuZWxfZHJpdmVyID0geworCS5wcm9iZQkJPSBsZHBfcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSBsZHBfcGFuZWxfcmVtb3ZlLAorCS5zdXNwZW5kCT0gbGRwX3BhbmVsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBsZHBfcGFuZWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJsZHBfbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxkcF9wYW5lbF9kcnZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxkcF9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbGRwX3BhbmVsX2Rydl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmxkcF9wYW5lbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChsZHBfcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQobGRwX3BhbmVsX2Rydl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbWlwaWQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbWlwaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThlZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9taXBpZC5jCkBAIC0wLDAgKzEsNjI1IEBACisvKgorICogTENEIGRyaXZlciBmb3IgTUlQSSBEQkktQyAvIERDUyBjb21wYXRpYmxlIExDRHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPG1hY2gvbGNkX21pcGlkLmg+CisKKyNkZWZpbmUgTUlQSURfTU9EVUxFX05BTUUJCSJsY2RfbWlwaWQiCisKKyNkZWZpbmUgTUlQSURfQ01EX1JFQURfRElTUF9JRAkJMHgwNAorI2RlZmluZSBNSVBJRF9DTURfUkVBRF9SRUQJCTB4MDYKKyNkZWZpbmUgTUlQSURfQ01EX1JFQURfR1JFRU4JCTB4MDcKKyNkZWZpbmUgTUlQSURfQ01EX1JFQURfQkxVRQkJMHgwOAorI2RlZmluZSBNSVBJRF9DTURfUkVBRF9ESVNQX1NUQVRVUwkweDA5CisjZGVmaW5lIE1JUElEX0NNRF9SRERTRFIJCTB4MEYKKyNkZWZpbmUgTUlQSURfQ01EX1NMRUVQX0lOCQkweDEwCisjZGVmaW5lIE1JUElEX0NNRF9TTEVFUF9PVVQJCTB4MTEKKyNkZWZpbmUgTUlQSURfQ01EX0RJU1BfT0ZGCQkweDI4CisjZGVmaW5lIE1JUElEX0NNRF9ESVNQX09OCQkweDI5CisKKyNkZWZpbmUgTUlQSURfRVNEX0NIRUNLX1BFUklPRAkJbXNlY3NfdG9famlmZmllcyg1MDAwKQorCisjZGVmaW5lIHRvX21pcGlkX2RldmljZShwKQkJY29udGFpbmVyX29mKHAsIHN0cnVjdCBtaXBpZF9kZXZpY2UsIFwKKwkJCQkJCXBhbmVsKQorc3RydWN0IG1pcGlkX2RldmljZSB7CisJaW50CQllbmFibGVkOworCWludAkJcmV2aXNpb247CisJdW5zaWduZWQgaW50CXNhdmVkX2JrbGlnaHRfbGV2ZWw7CisJdW5zaWduZWQgbG9uZwlod19ndWFyZF9lbmQ7CQkvKiBuZXh0IHZhbHVlIG9mIGppZmZpZXMKKwkJCQkJCSAgIHdoZW4gd2UgY2FuIGlzc3VlIHRoZQorCQkJCQkJICAgbmV4dCBzbGVlcCBpbi9vdXQgY29tbWFuZCAqLworCXVuc2lnbmVkIGxvbmcJaHdfZ3VhcmRfd2FpdDsJCS8qIG1heCBndWFyZCB0aW1lIGluIGppZmZpZXMgKi8KKworCXN0cnVjdCBvbWFwZmJfZGV2aWNlCSpmYmRldjsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOworCXN0cnVjdCBtdXRleAkJbXV0ZXg7CisJc3RydWN0IGxjZF9wYW5lbAlwYW5lbDsKKworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSplc2Rfd3E7CisJc3RydWN0IGRlbGF5ZWRfd29yawllc2Rfd29yazsKKwl2b2lkCQkJKCplc2RfY2hlY2spKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm0pOworfTsKKworc3RhdGljIHZvaWQgbWlwaWRfdHJhbnNmZXIoc3RydWN0IG1pcGlkX2RldmljZSAqbWQsIGludCBjbWQsIGNvbnN0IHU4ICp3YnVmLAorCQkJICAgaW50IHdsZW4sIHU4ICpyYnVmLCBpbnQgcmxlbikKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCSp4LCB4ZmVyWzRdOworCXUxNgkJCXc7CisJaW50CQkJcjsKKworCUJVR19PTihtZC0+c3BpID09IE5VTEwpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisKKwltZW1zZXQoeGZlciwgMCwgc2l6ZW9mKHhmZXIpKTsKKwl4ID0gJnhmZXJbMF07CisKKwljbWQgJj0gIDB4ZmY7CisJeC0+dHhfYnVmCQk9ICZjbWQ7CisJeC0+Yml0c19wZXJfd29yZAk9IDk7CisJeC0+bGVuCQkJPSAyOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsICZtKTsKKworCWlmICh3bGVuKSB7CisJCXgrKzsKKwkJeC0+dHhfYnVmCQk9IHdidWY7CisJCXgtPmxlbgkJCT0gd2xlbjsKKwkJeC0+Yml0c19wZXJfd29yZAk9IDk7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsICZtKTsKKwl9CisKKwlpZiAocmxlbikgeworCQl4Kys7CisJCXgtPnJ4X2J1Zgk9ICZ3OworCQl4LT5sZW4JCT0gMTsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJm0pOworCisJCWlmIChybGVuID4gMSkgeworCQkJLyogQXJyYW5nZSBmb3IgdGhlIGV4dHJhIGNsb2NrIGJlZm9yZSB0aGUgZmlyc3QKKwkJCSAqIGRhdGEgYml0LgorCQkJICovCisJCQl4LT5iaXRzX3Blcl93b3JkID0gOTsKKwkJCXgtPmxlbgkJID0gMjsKKworCQkJeCsrOworCQkJeC0+cnhfYnVmCSA9ICZyYnVmWzFdOworCQkJeC0+bGVuCQkgPSBybGVuIC0gMTsKKwkJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsICZtKTsKKwkJfQorCX0KKworCXIgPSBzcGlfc3luYyhtZC0+c3BpLCAmbSk7CisJaWYgKHIgPCAwKQorCQlkZXZfZGJnKCZtZC0+c3BpLT5kZXYsICJzcGlfc3luYyAlZFxuIiwgcik7CisKKwlpZiAocmxlbikKKwkJcmJ1ZlswXSA9IHcgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWlwaWRfY21kKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kLCBpbnQgY21kKQoreworCW1pcGlkX3RyYW5zZmVyKG1kLCBjbWQsIE5VTEwsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWlwaWRfd3JpdGUoc3RydWN0IG1pcGlkX2RldmljZSAqbWQsCisJCQkgICAgICAgaW50IHJlZywgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwltaXBpZF90cmFuc2ZlcihtZCwgcmVnLCBidWYsIGxlbiwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtaXBpZF9yZWFkKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kLAorCQkJICAgICAgaW50IHJlZywgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwltaXBpZF90cmFuc2ZlcihtZCwgcmVnLCBOVUxMLCAwLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYXRhX2xpbmVzKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kLCBpbnQgZGF0YV9saW5lcykKK3sKKwl1MTYgcGFyOworCisJc3dpdGNoIChkYXRhX2xpbmVzKSB7CisJY2FzZSAxNjoKKwkJcGFyID0gMHgxNTA7CisJCWJyZWFrOworCWNhc2UgMTg6CisJCXBhciA9IDB4MTYwOworCQlicmVhazsKKwljYXNlIDI0OgorCQlwYXIgPSAweDE3MDsKKwkJYnJlYWs7CisJfQorCW1pcGlkX3dyaXRlKG1kLCAweDNhLCAodTggKikmcGFyLCAyKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9pbml0X3N0cmluZyhzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwl1MTYgaW5pdHBhcltdID0geyAweDAxMDIsIDB4MDEwMCwgMHgwMTAwIH07CisKKwltaXBpZF93cml0ZShtZCwgMHhjMiwgKHU4ICopaW5pdHBhciwgc2l6ZW9mKGluaXRwYXIpKTsKKwlzZXRfZGF0YV9saW5lcyhtZCwgbWQtPnBhbmVsLmRhdGFfbGluZXMpOworfQorCitzdGF0aWMgdm9pZCBod19ndWFyZF9zdGFydChzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCwgaW50IGd1YXJkX21zZWMpCit7CisJbWQtPmh3X2d1YXJkX3dhaXQgPSBtc2Vjc190b19qaWZmaWVzKGd1YXJkX21zZWMpOworCW1kLT5od19ndWFyZF9lbmQgPSBqaWZmaWVzICsgbWQtPmh3X2d1YXJkX3dhaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGh3X2d1YXJkX3dhaXQoc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJdW5zaWduZWQgbG9uZyB3YWl0ID0gbWQtPmh3X2d1YXJkX2VuZCAtIGppZmZpZXM7CisKKwlpZiAoKGxvbmcpd2FpdCA+IDAgJiYgd2FpdCA8PSBtZC0+aHdfZ3VhcmRfd2FpdCkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQod2FpdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfc2xlZXBfbW9kZShzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCwgaW50IG9uKQoreworCWludCBjbWQsIHNsZWVwX3RpbWUgPSA1MDsKKworCWlmIChvbikKKwkJY21kID0gTUlQSURfQ01EX1NMRUVQX0lOOworCWVsc2UKKwkJY21kID0gTUlQSURfQ01EX1NMRUVQX09VVDsKKwlod19ndWFyZF93YWl0KG1kKTsKKwltaXBpZF9jbWQobWQsIGNtZCk7CisJaHdfZ3VhcmRfc3RhcnQobWQsIDEyMCk7CisJLyoKKwkgKiBXaGVuIHdlIGVuYWJsZSB0aGUgcGFuZWwsIGl0IHNlZW1zIHdlIF9oYXZlXyB0byBzbGVlcAorCSAqIDEyMCBtcyBiZWZvcmUgc2VuZGluZyB0aGUgaW5pdCBzdHJpbmcuIFdoZW4gZGlzYWJsaW5nIHRoZQorCSAqIHBhbmVsIHdlJ2xsIHNsZWVwIGZvciB0aGUgZHVyYXRpb24gb2YgMiBmcmFtZXMsIHNvIHRoYXQgdGhlCisJICogY29udHJvbGxlciBjYW4gc3RpbGwgcHJvdmlkZSB0aGUgUENMSyxIUyxWUyBzaWduYWxzLgorCSAqLworCWlmICghb24pCisJCXNsZWVwX3RpbWUgPSAxMjA7CisJbXNsZWVwKHNsZWVwX3RpbWUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGlzcGxheV9zdGF0ZShzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCwgaW50IGVuYWJsZWQpCit7CisJaW50IGNtZCA9IGVuYWJsZWQgPyBNSVBJRF9DTURfRElTUF9PTiA6IE1JUElEX0NNRF9ESVNQX09GRjsKKworCW1pcGlkX2NtZChtZCwgY21kKTsKK30KKworc3RhdGljIGludCBtaXBpZF9zZXRfYmtsaWdodF9sZXZlbChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwgdW5zaWduZWQgaW50IGxldmVsKQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kID0gdG9fbWlwaWRfZGV2aWNlKHBhbmVsKTsKKwlzdHJ1Y3QgbWlwaWRfcGxhdGZvcm1fZGF0YSAqcGQgPSBtZC0+c3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZC0+Z2V0X2JrbGlnaHRfbWF4ID09IE5VTEwgfHwgcGQtPnNldF9ia2xpZ2h0X2xldmVsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChsZXZlbCA+IHBkLT5nZXRfYmtsaWdodF9tYXgocGQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW1kLT5lbmFibGVkKSB7CisJCW1kLT5zYXZlZF9ia2xpZ2h0X2xldmVsID0gbGV2ZWw7CisJCXJldHVybiAwOworCX0KKwlwZC0+c2V0X2JrbGlnaHRfbGV2ZWwocGQsIGxldmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1pcGlkX2dldF9ia2xpZ2h0X2xldmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kID0gdG9fbWlwaWRfZGV2aWNlKHBhbmVsKTsKKwlzdHJ1Y3QgbWlwaWRfcGxhdGZvcm1fZGF0YSAqcGQgPSBtZC0+c3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZC0+Z2V0X2JrbGlnaHRfbGV2ZWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHBkLT5nZXRfYmtsaWdodF9sZXZlbChwZCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWlwaWRfZ2V0X2JrbGlnaHRfbWF4KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kID0gdG9fbWlwaWRfZGV2aWNlKHBhbmVsKTsKKwlzdHJ1Y3QgbWlwaWRfcGxhdGZvcm1fZGF0YSAqcGQgPSBtZC0+c3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZC0+Z2V0X2JrbGlnaHRfbWF4ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBkLT5nZXRfYmtsaWdodF9tYXgocGQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtaXBpZF9nZXRfY2FwcyhzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gT01BUEZCX0NBUFNfU0VUX0JBQ0tMSUdIVDsKK30KKworc3RhdGljIHUxNiByZWFkX2ZpcnN0X3BpeGVsKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kKQoreworCXUxNiBwaXhlbDsKKwl1OCByZWQsIGdyZWVuLCBibHVlOworCisJbXV0ZXhfbG9jaygmbWQtPm11dGV4KTsKKwltaXBpZF9yZWFkKG1kLCBNSVBJRF9DTURfUkVBRF9SRUQsICZyZWQsIDEpOworCW1pcGlkX3JlYWQobWQsIE1JUElEX0NNRF9SRUFEX0dSRUVOLCAmZ3JlZW4sIDEpOworCW1pcGlkX3JlYWQobWQsIE1JUElEX0NNRF9SRUFEX0JMVUUsICZibHVlLCAxKTsKKwltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisKKwlzd2l0Y2ggKG1kLT5wYW5lbC5kYXRhX2xpbmVzKSB7CisJY2FzZSAxNjoKKwkJcGl4ZWwgPSAoKHJlZCA+PiAxKSA8PCAxMSkgfCAoZ3JlZW4gPDwgNSkgfCAoYmx1ZSA+PiAxKTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJLyogMjQgYml0IC0+IDE2IGJpdCAqLworCQlwaXhlbCA9ICgocmVkID4+IDMpIDw8IDExKSB8ICgoZ3JlZW4gPj4gMikgPDwgNSkgfAorCQkJKGJsdWUgPj4gMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBpeGVsID0gMDsKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIHBpeGVsOworfQorCitzdGF0aWMgaW50IG1pcGlkX3J1bl90ZXN0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLCBpbnQgdGVzdF9udW0pCit7CisJc3RydWN0IG1pcGlkX2RldmljZSAqbWQgPSB0b19taXBpZF9kZXZpY2UocGFuZWwpOworCXN0YXRpYyBjb25zdCB1MTYgdGVzdF92YWx1ZXNbNF0gPSB7CisJCTB4MDAwMCwgMHhmZmZmLCAweGFhYWEsIDB4NTU1NSwKKwl9OworCWludCBpOworCisJaWYgKHRlc3RfbnVtICE9IE1JUElEX1RFU1RfUkdCX0xJTkVTKQorCQlyZXR1cm4gTUlQSURfVEVTVF9JTlZBTElEOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVzdF92YWx1ZXMpOyBpKyspIHsKKwkJaW50IGRlbGF5OworCQl1bnNpZ25lZCBsb25nIHRtbzsKKworCQlvbWFwZmJfd3JpdGVfZmlyc3RfcGl4ZWwobWQtPmZiZGV2LCB0ZXN0X3ZhbHVlc1tpXSk7CisJCXRtbyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMCk7CisJCWRlbGF5ID0gMjU7CisJCXdoaWxlICgxKSB7CisJCQl1MTYgcGl4ZWw7CisKKwkJCW1zbGVlcChkZWxheSk7CisJCQlwaXhlbCA9IHJlYWRfZmlyc3RfcGl4ZWwobWQpOworCQkJaWYgKHBpeGVsID09IHRlc3RfdmFsdWVzW2ldKQorCQkJCWJyZWFrOworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdG1vKSkgeworCQkJCWRldl9lcnIoJm1kLT5zcGktPmRldiwKKwkJCQkJIk1JUEkgTENEIFJHQiBJL0YgdGVzdCBmYWlsZWQ6ICIKKwkJCQkJImV4cGVjdGluZyAlMDR4LCBnb3QgJTA0eFxuIiwKKwkJCQkJdGVzdF92YWx1ZXNbaV0sIHBpeGVsKTsKKwkJCQlyZXR1cm4gTUlQSURfVEVTVF9GQUlMRUQ7CisJCQl9CisJCQlkZWxheSA9IDEwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxzMDQxeTNfZXNkX3JlY292ZXIoc3RydWN0IG1pcGlkX2RldmljZSAqbWQpCit7CisJZGV2X2VycigmbWQtPnNwaS0+ZGV2LCAicGVyZm9ybWluZyBMQ0QgRVNEIHJlY292ZXJ5XG4iKTsKKwlzZXRfc2xlZXBfbW9kZShtZCwgMSk7CisJc2V0X3NsZWVwX21vZGUobWQsIDApOworfQorCitzdGF0aWMgdm9pZCBsczA0MXkzX2VzZF9jaGVja19tb2RlMShzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwl1OCBzdGF0ZTEsIHN0YXRlMjsKKworCW1pcGlkX3JlYWQobWQsIE1JUElEX0NNRF9SRERTRFIsICZzdGF0ZTEsIDEpOworCXNldF9zbGVlcF9tb2RlKG1kLCAwKTsKKwltaXBpZF9yZWFkKG1kLCBNSVBJRF9DTURfUkREU0RSLCAmc3RhdGUyLCAxKTsKKwlkZXZfZGJnKCZtZC0+c3BpLT5kZXYsICJFU0QgbW9kZSAxIHN0YXRlMSAlMDJ4IHN0YXRlMiAlMDJ4XG4iLAorCQlzdGF0ZTEsIHN0YXRlMik7CisJLyogRWFjaCBzbGVlcCBvdXQgY29tbWFuZCB3aWxsIHRyaWdnZXIgYSBzZWxmIGRpYWdub3N0aWMgYW5kIGZsaXAKKwkqIEJpdDYgaWYgdGhlIHRlc3QgcGFzc2VzLgorCSovCisJaWYgKCEoKHN0YXRlMSBeIHN0YXRlMikgJiAoMSA8PCA2KSkpCisJCWxzMDQxeTNfZXNkX3JlY292ZXIobWQpOworfQorCitzdGF0aWMgdm9pZCBsczA0MXkzX2VzZF9jaGVja19tb2RlMihzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwlpbnQgaTsKKwl1OCByYnVmWzJdOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQlpbnQJY21kOworCQlpbnQJd2xlbjsKKwkJdTE2CXdidWZbM107CisJfSAqcmQsIHJkX2N0cmxbN10gPSB7CisJCXsgMHhiMCwgNCwgeyAweDAxMDEsIDB4MDFmZSwgfSB9LAorCQl7IDB4YjEsIDQsIHsgMHgwMWRlLCAweDAxMjEsIH0gfSwKKwkJeyAweGMyLCA0LCB7IDB4MDEwMCwgMHgwMTAwLCB9IH0sCisJCXsgMHhiZCwgMiwgeyAweDAxMDAsIH0gfSwKKwkJeyAweGMyLCA0LCB7IDB4MDFmYywgMHgwMTAzLCB9IH0sCisJCXsgMHhiNCwgMCwgfSwKKwkJeyAweDAwLCAwLCB9LAorCX07CisKKwlyZCA9IHJkX2N0cmw7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgcmQrKykKKwkJbWlwaWRfd3JpdGUobWQsIHJkLT5jbWQsICh1OCAqKXJkLT53YnVmLCByZC0+d2xlbik7CisKKwl1ZGVsYXkoMTApOworCW1pcGlkX3JlYWQobWQsIHJkLT5jbWQsIHJidWYsIDIpOworCXJkKys7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrLCByZCsrKSB7CisJCXVkZWxheSgxMCk7CisJCW1pcGlkX3dyaXRlKG1kLCByZC0+Y21kLCAodTggKilyZC0+d2J1ZiwgcmQtPndsZW4pOworCX0KKworCWRldl9kYmcoJm1kLT5zcGktPmRldiwgIkVTRCBtb2RlIDIgc3RhdGUgJTAyeFxuIiwgcmJ1ZlsxXSk7CisJaWYgKHJidWZbMV0gPT0gMHgwMCkKKwkJbHMwNDF5M19lc2RfcmVjb3ZlcihtZCk7Cit9CisKK3N0YXRpYyB2b2lkIGxzMDQxeTNfZXNkX2NoZWNrKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kKQoreworCWxzMDQxeTNfZXNkX2NoZWNrX21vZGUxKG1kKTsKKwlpZiAobWQtPnJldmlzaW9uID49IDB4ODgpCisJCWxzMDQxeTNfZXNkX2NoZWNrX21vZGUyKG1kKTsKK30KKworc3RhdGljIHZvaWQgbWlwaWRfZXNkX3N0YXJ0X2NoZWNrKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kKQoreworCWlmIChtZC0+ZXNkX2NoZWNrICE9IE5VTEwpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhtZC0+ZXNkX3dxLCAmbWQtPmVzZF93b3JrLAorCQkJCSAgIE1JUElEX0VTRF9DSEVDS19QRVJJT0QpOworfQorCitzdGF0aWMgdm9pZCBtaXBpZF9lc2Rfc3RvcF9jaGVjayhzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwlpZiAobWQtPmVzZF9jaGVjayAhPSBOVUxMKQorCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUobWQtPmVzZF93cSwgJm1kLT5lc2Rfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlkX2VzZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWlwaWRfZGV2aWNlLAorCQkJCQkgICAgICAgZXNkX3dvcmsud29yayk7CisKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCW1kLT5lc2RfY2hlY2sobWQpOworCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKKwltaXBpZF9lc2Rfc3RhcnRfY2hlY2sobWQpOworfQorCitzdGF0aWMgaW50IG1pcGlkX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCA9IHRvX21pcGlkX2RldmljZShwYW5lbCk7CisKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCisJaWYgKG1kLT5lbmFibGVkKSB7CisJCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCXNldF9zbGVlcF9tb2RlKG1kLCAwKTsKKwltZC0+ZW5hYmxlZCA9IDE7CisJc2VuZF9pbml0X3N0cmluZyhtZCk7CisJc2V0X2Rpc3BsYXlfc3RhdGUobWQsIDEpOworCW1pcGlkX3NldF9ia2xpZ2h0X2xldmVsKHBhbmVsLCBtZC0+c2F2ZWRfYmtsaWdodF9sZXZlbCk7CisJbWlwaWRfZXNkX3N0YXJ0X2NoZWNrKG1kKTsKKworCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlwaWRfZGlzYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCA9IHRvX21pcGlkX2RldmljZShwYW5lbCk7CisKKwkvKgorCSAqIEEgZmluYWwgRVNEIHdvcmsgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSByZXR1cm5pbmcsCisJICogc28gZG8gdGhpcyB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suCisJICovCisJbWlwaWRfZXNkX3N0b3BfY2hlY2sobWQpOworCW11dGV4X2xvY2soJm1kLT5tdXRleCk7CisKKwlpZiAoIW1kLT5lbmFibGVkKSB7CisJCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwltZC0+c2F2ZWRfYmtsaWdodF9sZXZlbCA9IG1pcGlkX2dldF9ia2xpZ2h0X2xldmVsKHBhbmVsKTsKKwltaXBpZF9zZXRfYmtsaWdodF9sZXZlbChwYW5lbCwgMCk7CisJc2V0X2Rpc3BsYXlfc3RhdGUobWQsIDApOworCXNldF9zbGVlcF9tb2RlKG1kLCAxKTsKKwltZC0+ZW5hYmxlZCA9IDA7CisKKwltdXRleF91bmxvY2soJm1kLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcGFuZWxfZW5hYmxlZChzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwl1MzIgZGlzcF9zdGF0dXM7CisJaW50IGVuYWJsZWQ7CisKKwltaXBpZF9yZWFkKG1kLCBNSVBJRF9DTURfUkVBRF9ESVNQX1NUQVRVUywgKHU4ICopJmRpc3Bfc3RhdHVzLCA0KTsKKwlkaXNwX3N0YXR1cyA9IF9fYmUzMl90b19jcHUoZGlzcF9zdGF0dXMpOworCWVuYWJsZWQgPSAoZGlzcF9zdGF0dXMgJiAoMSA8PCAxNykpICYmIChkaXNwX3N0YXR1cyAmICgxIDw8IDEwKSk7CisJZGV2X2RiZygmbWQtPnNwaS0+ZGV2LAorCQkiTENEIHBhbmVsICVzZW5hYmxlZCBieSBib290bG9hZGVyIChzdGF0dXMgMHglMDR4KVxuIiwKKwkJZW5hYmxlZCA/ICIiIDogIm5vdCAiLCBkaXNwX3N0YXR1cyk7CisJcmV0dXJuIGVuYWJsZWQ7Cit9CisKK3N0YXRpYyBpbnQgbWlwaWRfaW5pdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwKKwkJCSAgICBzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYpCit7CisJc3RydWN0IG1pcGlkX2RldmljZSAqbWQgPSB0b19taXBpZF9kZXZpY2UocGFuZWwpOworCisJbWQtPmZiZGV2ID0gZmJkZXY7CisJbWQtPmVzZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJtaXBpZF9lc2QiKTsKKwlpZiAobWQtPmVzZF93cSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm1kLT5zcGktPmRldiwgImNhbid0IGNyZWF0ZSBFU0Qgd29ya3F1ZXVlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCUlOSVRfREVMQVlFRF9XT1JLKCZtZC0+ZXNkX3dvcmssIG1pcGlkX2VzZF93b3JrKTsKKwltdXRleF9pbml0KCZtZC0+bXV0ZXgpOworCisJbWQtPmVuYWJsZWQgPSBwYW5lbF9lbmFibGVkKG1kKTsKKworCWlmIChtZC0+ZW5hYmxlZCkKKwkJbWlwaWRfZXNkX3N0YXJ0X2NoZWNrKG1kKTsKKwllbHNlCisJCW1kLT5zYXZlZF9ia2xpZ2h0X2xldmVsID0gbWlwaWRfZ2V0X2JrbGlnaHRfbGV2ZWwocGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlkX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IG1pcGlkX2RldmljZSAqbWQgPSB0b19taXBpZF9kZXZpY2UocGFuZWwpOworCisJaWYgKG1kLT5lbmFibGVkKQorCQltaXBpZF9lc2Rfc3RvcF9jaGVjayhtZCk7CisJZGVzdHJveV93b3JrcXVldWUobWQtPmVzZF93cSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGNkX3BhbmVsIG1pcGlkX3BhbmVsID0geworCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCwKKworCS5icHAJCT0gMTYsCisJLnhfcmVzCQk9IDgwMCwKKwkueV9yZXMJCT0gNDgwLAorCS5waXhlbF9jbG9jawk9IDIxOTQwLAorCS5oc3cJCT0gNTAsCisJLmhmcAkJPSAyMCwKKwkuaGJwCQk9IDE1LAorCS52c3cJCT0gMiwKKwkudmZwCQk9IDEsCisJLnZicAkJPSAzLAorCisJLmluaXQJCQk9IG1pcGlkX2luaXQsCisJLmNsZWFudXAJCT0gbWlwaWRfY2xlYW51cCwKKwkuZW5hYmxlCQkJPSBtaXBpZF9lbmFibGUsCisJLmRpc2FibGUJCT0gbWlwaWRfZGlzYWJsZSwKKwkuZ2V0X2NhcHMJCT0gbWlwaWRfZ2V0X2NhcHMsCisJLnNldF9ia2xpZ2h0X2xldmVsCT0gbWlwaWRfc2V0X2JrbGlnaHRfbGV2ZWwsCisJLmdldF9ia2xpZ2h0X2xldmVsCT0gbWlwaWRfZ2V0X2JrbGlnaHRfbGV2ZWwsCisJLmdldF9ia2xpZ2h0X21heAk9IG1pcGlkX2dldF9ia2xpZ2h0X21heCwKKwkucnVuX3Rlc3QJCT0gbWlwaWRfcnVuX3Rlc3QsCit9OworCitzdGF0aWMgaW50IG1pcGlkX2RldGVjdChzdHJ1Y3QgbWlwaWRfZGV2aWNlICptZCkKK3sKKwlzdHJ1Y3QgbWlwaWRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJdTggZGlzcGxheV9pZFszXTsKKworCXBkYXRhID0gbWQtPnNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmbWQtPnNwaS0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJbWlwaWRfcmVhZChtZCwgTUlQSURfQ01EX1JFQURfRElTUF9JRCwgZGlzcGxheV9pZCwgMyk7CisJZGV2X2RiZygmbWQtPnNwaS0+ZGV2LCAiTUlQSSBkaXNwbGF5IElEOiAlMDJ4JTAyeCUwMnhcbiIsCisJCWRpc3BsYXlfaWRbMF0sIGRpc3BsYXlfaWRbMV0sIGRpc3BsYXlfaWRbMl0pOworCisJc3dpdGNoIChkaXNwbGF5X2lkWzBdKSB7CisJY2FzZSAweDQ1OgorCQltZC0+cGFuZWwubmFtZSA9ICJscGg4OTIzIjsKKwkJYnJlYWs7CisJY2FzZSAweDgzOgorCQltZC0+cGFuZWwubmFtZSA9ICJsczA0MXkzIjsKKwkJbWQtPmVzZF9jaGVjayA9IGxzMDQxeTNfZXNkX2NoZWNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltZC0+cGFuZWwubmFtZSA9ICJ1bmtub3duIjsKKwkJZGV2X2VycigmbWQtPnNwaS0+ZGV2LCAiaW52YWxpZCBkaXNwbGF5IElEXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWQtPnJldmlzaW9uID0gZGlzcGxheV9pZFsxXTsKKwltZC0+cGFuZWwuZGF0YV9saW5lcyA9IHBkYXRhLT5kYXRhX2xpbmVzOworCXByX2luZm8oIm9tYXBmYjogJXMgcmV2ICUwMnggTENEIGRldGVjdGVkLCAlZCBkYXRhIGxpbmVzXG4iLAorCQkJbWQtPnBhbmVsLm5hbWUsIG1kLT5yZXZpc2lvbiwgbWQtPnBhbmVsLmRhdGFfbGluZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlwaWRfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IG1pcGlkX2RldmljZSAqbWQ7CisJaW50IHI7CisKKwltZCA9IGt6YWxsb2Moc2l6ZW9mKCptZCksIEdGUF9LRVJORUwpOworCWlmIChtZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CisJbWQtPnNwaSA9IHNwaTsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBtZCk7CisJbWQtPnBhbmVsID0gbWlwaWRfcGFuZWw7CisKKwlyID0gbWlwaWRfZGV0ZWN0KG1kKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJb21hcGZiX3JlZ2lzdGVyX3BhbmVsKCZtZC0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlwaWRfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwltaXBpZF9kaXNhYmxlKCZtZC0+cGFuZWwpOworCWtmcmVlKG1kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbWlwaWRfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9IE1JUElEX01PRFVMRV9OQU1FLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJPSBtaXBpZF9zcGlfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG1pcGlkX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBtaXBpZF9kcnZfaW5pdCh2b2lkKQoreworCXNwaV9yZWdpc3Rlcl9kcml2ZXIoJm1pcGlkX3NwaV9kcml2ZXIpOworCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChtaXBpZF9kcnZfaW5pdCk7CisKK3N0YXRpYyB2b2lkIG1pcGlkX2Rydl9jbGVhbnVwKHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZtaXBpZF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1pcGlkX2Rydl9jbGVhbnVwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNSVBJIGRpc3BsYXkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAyZXZtLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAyZXZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyYmJlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDJldm0uYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIExDRCBwYW5lbCBzdXBwb3J0IGZvciB0aGUgTUlTVFJBTCBPTUFQMkVWTSBib2FyZAorICoKKyAqIEF1dGhvcjogQXJ1biBDIDxhcnVuZWRhcmF0aEBtaXN0cmFsc29sdXRpb25zLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2V2bS5jCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy92aWRlby9vbWFwL2xjZC1hcG9sbG9uLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisKKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2RlZmluZSBMQ0RfUEFORUxfRU5BQkxFX0dQSU8JMTU0CisjZGVmaW5lIExDRF9QQU5FTF9MUgkJMTI4CisjZGVmaW5lIExDRF9QQU5FTF9VRAkJMTI5CisjZGVmaW5lIExDRF9QQU5FTF9JTkkJCTE1MgorI2RlZmluZSBMQ0RfUEFORUxfUVZHQQkJMTQ4CisjZGVmaW5lIExDRF9QQU5FTF9SRVNCCQkxNTMKKworI2RlZmluZSBUV0xfTEVEX0xFREVOCQkweDAwCisjZGVmaW5lIFRXTF9QV01BX1BXTUFPTgkJMHgwMAorI2RlZmluZSBUV0xfUFdNQV9QV01BT0ZGCTB4MDEKKworc3RhdGljIHVuc2lnbmVkIGludCBia2xpZ2h0X2xldmVsOworCitzdGF0aWMgaW50IG9tYXAyZXZtX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfRU5BQkxFX0dQSU8sICJMQ0QgZW5hYmxlIik7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9MUiwgIkxDRCBsciIpOworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfVUQsICJMQ0QgdWQiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX0lOSSwgIkxDRCBpbmkiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1FWR0EsICJMQ0QgcXZnYSIpOworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfUkVTQiwgIkxDRCByZXNiIik7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1JFU0IsIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfSU5JLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1FWR0EsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfTFIsIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfVUQsIDEpOworCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDExLCBUV0xfTEVEX0xFREVOKTsKKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAxLCBUV0xfUFdNQV9QV01BT04pOworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDIsIFRXTF9QV01BX1BXTUFPRkYpOworCWJrbGlnaHRfbGV2ZWwgPSAxMDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDJldm1fcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1JFU0IpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfUVZHQSk7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9JTkkpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfVUQpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfTFIpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfRU5BQkxFX0dQSU8pOworfQorCitzdGF0aWMgaW50IG9tYXAyZXZtX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMmV2bV9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fc2V0X3ZhbHVlKExDRF9QQU5FTF9FTkFCTEVfR1BJTywgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyZXZtX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyZXZtX2JrbGlnaHRfc2V0bGV2ZWwoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJdTggYzsKKwlpZiAoKGxldmVsID49IDApICYmIChsZXZlbCA8PSAxMDApKSB7CisJCWMgPSAoMTI1ICogKDEwMCAtIGxldmVsKSkgLyAxMDAgKyAyOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCBjLCBUV0xfUFdNQV9QV01BT0ZGKTsKKwkJYmtsaWdodF9sZXZlbCA9IGxldmVsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvbWFwMmV2bV9ia2xpZ2h0X2dldGxldmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBia2xpZ2h0X2xldmVsOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9tYXAyZXZtX2JrbGlnaHRfZ2V0bWF4bGV2ZWwoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDEwMDsKK30KKworc3RydWN0IGxjZF9wYW5lbCBvbWFwMmV2bV9wYW5lbCA9IHsKKwkubmFtZQkJPSAib21hcDJldm0iLAorCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCB8IE9NQVBfTENEQ19JTlZfVlNZTkMgfAorCQkJICBPTUFQX0xDRENfSU5WX0hTWU5DLAorCisJLmJwcAkJPSAxNiwKKwkuZGF0YV9saW5lcwk9IDE4LAorCS54X3JlcwkJPSA0ODAsCisJLnlfcmVzCQk9IDY0MCwKKwkuaHN3CQk9IDMsCisJLmhmcAkJPSAwLAorCS5oYnAJCT0gMjgsCisJLnZzdwkJPSAyLAorCS52ZnAJCT0gMSwKKwkudmJwCQk9IDAsCisKKwkucGl4ZWxfY2xvY2sJPSAyMDAwMCwKKworCS5pbml0CQk9IG9tYXAyZXZtX3BhbmVsX2luaXQsCisJLmNsZWFudXAJPSBvbWFwMmV2bV9wYW5lbF9jbGVhbnVwLAorCS5lbmFibGUJCT0gb21hcDJldm1fcGFuZWxfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJldm1fcGFuZWxfZGlzYWJsZSwKKwkuZ2V0X2NhcHMJPSBvbWFwMmV2bV9wYW5lbF9nZXRfY2FwcywKKwkuc2V0X2JrbGlnaHRfbGV2ZWwgICAgICA9IG9tYXAyZXZtX2JrbGlnaHRfc2V0bGV2ZWwsCisJLmdldF9ia2xpZ2h0X2xldmVsICAgICAgPSBvbWFwMmV2bV9ia2xpZ2h0X2dldGxldmVsLAorCS5nZXRfYmtsaWdodF9tYXggICAgICAgID0gb21hcDJldm1fYmtsaWdodF9nZXRtYXhsZXZlbCwKK307CisKK3N0YXRpYyBpbnQgb21hcDJldm1fcGFuZWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlvbWFwZmJfcmVnaXN0ZXJfcGFuZWwoJm9tYXAyZXZtX3BhbmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMmV2bV9wYW5lbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMmV2bV9wYW5lbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJICAgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJldm1fcGFuZWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJldm1fcGFuZWxfZHJpdmVyID0geworCS5wcm9iZQkJPSBvbWFwMmV2bV9wYW5lbF9wcm9iZSwKKwkucmVtb3ZlCQk9IG9tYXAyZXZtX3BhbmVsX3JlbW92ZSwKKwkuc3VzcGVuZAk9IG9tYXAyZXZtX3BhbmVsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvbWFwMmV2bV9wYW5lbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm9tYXAyZXZtX2xjZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMmV2bV9wYW5lbF9kcnZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXAyZXZtX3BhbmVsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvbWFwMmV2bV9wYW5lbF9kcnZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMmV2bV9wYW5lbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvbWFwMmV2bV9wYW5lbF9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwMmV2bV9wYW5lbF9kcnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzYmVhZ2xlLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzYmVhZ2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxMTkxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNiZWFnbGUuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIExDRCBwYW5lbCBzdXBwb3J0IGZvciB0aGUgVEkgT01BUDMgQmVhZ2xlIGJvYXJkCisgKgorICogQXV0aG9yOiBLb2VuIEtvb2kgPGtvZW5Ab3BlbmVtYmVkZGVkLm9yZz4KKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy92aWRlby9vbWFwL2xjZC1vbWFwM2V2bS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNkZWZpbmUgTENEX1BBTkVMX0VOQUJMRV9HUElPICAgICAgIDE3MAorCitzdGF0aWMgaW50IG9tYXAzYmVhZ2xlX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfRU5BQkxFX0dQSU8sICJMQ0QgZW5hYmxlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAzYmVhZ2xlX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9FTkFCTEVfR1BJTyk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNiZWFnbGVfcGFuZWxfZW5hYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fc2V0X3ZhbHVlKExDRF9QQU5FTF9FTkFCTEVfR1BJTywgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAzYmVhZ2xlX3BhbmVsX2Rpc2FibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJZ3Bpb19zZXRfdmFsdWUoTENEX1BBTkVMX0VOQUJMRV9HUElPLCAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNiZWFnbGVfcGFuZWxfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsY2RfcGFuZWwgb21hcDNiZWFnbGVfcGFuZWwgPSB7CisJLm5hbWUJCT0gIm9tYXAzYmVhZ2xlIiwKKwkuY29uZmlnCQk9IE9NQVBfTENEQ19QQU5FTF9URlQsCisKKwkuYnBwCQk9IDE2LAorCS5kYXRhX2xpbmVzCT0gMjQsCisJLnhfcmVzCQk9IDEwMjQsCisJLnlfcmVzCQk9IDc2OCwKKwkuaHN3CQk9IDMsCQkvKiBoc3luY19sZW4gKDQpIC0gMSAqLworCS5oZnAJCT0gMywJCS8qIHJpZ2h0X21hcmdpbiAoNCkgLSAxICovCisJLmhicAkJPSAzOSwJCS8qIGxlZnRfbWFyZ2luICg0MCkgLSAxICovCisJLnZzdwkJPSAxLAkJLyogdnN5bmNfbGVuICgyKSAtIDEgKi8KKwkudmZwCQk9IDIsCQkvKiBsb3dlcl9tYXJnaW4gKi8KKwkudmJwCQk9IDcsCQkvKiB1cHBlcl9tYXJnaW4gKDgpIC0gMSAqLworCisJLnBpeGVsX2Nsb2NrCT0gNjQwMDAsCisKKwkuaW5pdAkJPSBvbWFwM2JlYWdsZV9wYW5lbF9pbml0LAorCS5jbGVhbnVwCT0gb21hcDNiZWFnbGVfcGFuZWxfY2xlYW51cCwKKwkuZW5hYmxlCQk9IG9tYXAzYmVhZ2xlX3BhbmVsX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAzYmVhZ2xlX3BhbmVsX2Rpc2FibGUsCisJLmdldF9jYXBzCT0gb21hcDNiZWFnbGVfcGFuZWxfZ2V0X2NhcHMsCit9OworCitzdGF0aWMgaW50IG9tYXAzYmVhZ2xlX3BhbmVsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb21hcGZiX3JlZ2lzdGVyX3BhbmVsKCZvbWFwM2JlYWdsZV9wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNiZWFnbGVfcGFuZWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNiZWFnbGVfcGFuZWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzYmVhZ2xlX3BhbmVsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAzYmVhZ2xlX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb21hcDNiZWFnbGVfcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwM2JlYWdsZV9wYW5lbF9yZW1vdmUsCisJLnN1c3BlbmQJPSBvbWFwM2JlYWdsZV9wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb21hcDNiZWFnbGVfcGFuZWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJvbWFwM2JlYWdsZV9sY2QiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDNiZWFnbGVfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwM2JlYWdsZV9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDNiZWFnbGVfcGFuZWxfZHJ2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcDNiZWFnbGVfcGFuZWxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob21hcDNiZWFnbGVfcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQob21hcDNiZWFnbGVfcGFuZWxfZHJ2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2V2bS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2V2bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTRjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzZXZtLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBMQ0QgcGFuZWwgc3VwcG9ydCBmb3IgdGhlIFRJIE9NQVAzIEVWTSBib2FyZAorICoKKyAqIEF1dGhvcjogU3RldmUgU2Frb21hbiA8c3RldmVAc2Frb21hbi5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC9sY2QtYXBvbGxvbi5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNkZWZpbmUgTENEX1BBTkVMX0VOQUJMRV9HUElPICAgICAgIDE1MworI2RlZmluZSBMQ0RfUEFORUxfTFIgICAgICAgICAgICAgICAgMgorI2RlZmluZSBMQ0RfUEFORUxfVUQgICAgICAgICAgICAgICAgMworI2RlZmluZSBMQ0RfUEFORUxfSU5JICAgICAgICAgICAgICAgMTUyCisjZGVmaW5lIExDRF9QQU5FTF9RVkdBICAgICAgICAgICAgICAxNTQKKyNkZWZpbmUgTENEX1BBTkVMX1JFU0IgICAgICAgICAgICAgIDE1NQorCisjZGVmaW5lIEVOQUJMRV9WREFDX0RFRElDQVRFRAkweDAzCisjZGVmaW5lIEVOQUJMRV9WREFDX0RFVl9HUlAJMHgyMAorI2RlZmluZSBFTkFCTEVfVlBMTDJfREVESUNBVEVECTB4MDUKKyNkZWZpbmUgRU5BQkxFX1ZQTEwyX0RFVl9HUlAJMHhFMAorCisjZGVmaW5lIFRXTF9MRURfTEVERU4JCTB4MDAKKyNkZWZpbmUgVFdMX1BXTUFfUFdNQU9OCQkweDAwCisjZGVmaW5lIFRXTF9QV01BX1BXTUFPRkYJMHgwMQorCitzdGF0aWMgdW5zaWduZWQgaW50IGJrbGlnaHRfbGV2ZWw7CisKK3N0YXRpYyBpbnQgb21hcDNldm1fcGFuZWxfaW5pdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwKKwkJCQlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYpCit7CisJZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9MUiwgIkxDRCBsciIpOworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfVUQsICJMQ0QgdWQiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX0lOSSwgIkxDRCBpbmkiKTsKKwlncGlvX3JlcXVlc3QoTENEX1BBTkVMX1JFU0IsICJMQ0QgcmVzYiIpOworCWdwaW9fcmVxdWVzdChMQ0RfUEFORUxfUVZHQSwgIkxDRCBxdmdhIik7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1JFU0IsIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfSU5JLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1FWR0EsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfTFIsIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfVUQsIDEpOworCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDExLCBUV0xfTEVEX0xFREVOKTsKKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAxLCBUV0xfUFdNQV9QV01BT04pOworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDIsIFRXTF9QV01BX1BXTUFPRkYpOworCWJrbGlnaHRfbGV2ZWwgPSAxMDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDNldm1fcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1FWR0EpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfUkVTQik7CisJZ3Bpb19mcmVlKExDRF9QQU5FTF9JTkkpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfVUQpOworCWdwaW9fZnJlZShMQ0RfUEFORUxfTFIpOworfQorCitzdGF0aWMgaW50IG9tYXAzZXZtX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfRU5BQkxFX0dQSU8sIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwM2V2bV9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fc2V0X3ZhbHVlKExDRF9QQU5FTF9FTkFCTEVfR1BJTywgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAzZXZtX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzZXZtX2JrbGlnaHRfc2V0bGV2ZWwoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJdTggYzsKKwlpZiAoKGxldmVsID49IDApICYmIChsZXZlbCA8PSAxMDApKSB7CisJCWMgPSAoMTI1ICogKDEwMCAtIGxldmVsKSkgLyAxMDAgKyAyOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCBjLCBUV0xfUFdNQV9QV01BT0ZGKTsKKwkJYmtsaWdodF9sZXZlbCA9IGxldmVsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvbWFwM2V2bV9ia2xpZ2h0X2dldGxldmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBia2xpZ2h0X2xldmVsOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9tYXAzZXZtX2JrbGlnaHRfZ2V0bWF4bGV2ZWwoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDEwMDsKK30KKworc3RydWN0IGxjZF9wYW5lbCBvbWFwM2V2bV9wYW5lbCA9IHsKKwkubmFtZQkJPSAib21hcDNldm0iLAorCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCB8IE9NQVBfTENEQ19JTlZfVlNZTkMgfAorCQkJICBPTUFQX0xDRENfSU5WX0hTWU5DLAorCisJLmJwcAkJPSAxNiwKKwkuZGF0YV9saW5lcwk9IDE4LAorCS54X3JlcwkJPSA0ODAsCisJLnlfcmVzCQk9IDY0MCwKKwkuaHN3CQk9IDMsCQkvKiBoc3luY19sZW4gKDQpIC0gMSAqLworCS5oZnAJCT0gMywJCS8qIHJpZ2h0X21hcmdpbiAoNCkgLSAxICovCisJLmhicAkJPSAzOSwJCS8qIGxlZnRfbWFyZ2luICg0MCkgLSAxICovCisJLnZzdwkJPSAxLAkJLyogdnN5bmNfbGVuICgyKSAtIDEgKi8KKwkudmZwCQk9IDIsCQkvKiBsb3dlcl9tYXJnaW4gKi8KKwkudmJwCQk9IDcsCQkvKiB1cHBlcl9tYXJnaW4gKDgpIC0gMSAqLworCisJLnBpeGVsX2Nsb2NrCT0gMjYwMDAsCisKKwkuaW5pdAkJPSBvbWFwM2V2bV9wYW5lbF9pbml0LAorCS5jbGVhbnVwCT0gb21hcDNldm1fcGFuZWxfY2xlYW51cCwKKwkuZW5hYmxlCQk9IG9tYXAzZXZtX3BhbmVsX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAzZXZtX3BhbmVsX2Rpc2FibGUsCisJLmdldF9jYXBzCT0gb21hcDNldm1fcGFuZWxfZ2V0X2NhcHMsCisJLnNldF9ia2xpZ2h0X2xldmVsICAgICAgPSBvbWFwM2V2bV9ia2xpZ2h0X3NldGxldmVsLAorCS5nZXRfYmtsaWdodF9sZXZlbCAgICAgID0gb21hcDNldm1fYmtsaWdodF9nZXRsZXZlbCwKKwkuZ2V0X2JrbGlnaHRfbWF4ICAgICAgICA9IG9tYXAzZXZtX2JrbGlnaHRfZ2V0bWF4bGV2ZWwsCit9OworCitzdGF0aWMgaW50IG9tYXAzZXZtX3BhbmVsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb21hcGZiX3JlZ2lzdGVyX3BhbmVsKCZvbWFwM2V2bV9wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNldm1fcGFuZWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNldm1fcGFuZWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzZXZtX3BhbmVsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAzZXZtX3BhbmVsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb21hcDNldm1fcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwM2V2bV9wYW5lbF9yZW1vdmUsCisJLnN1c3BlbmQJPSBvbWFwM2V2bV9wYW5lbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb21hcDNldm1fcGFuZWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJvbWFwM2V2bV9sY2QiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDNldm1fcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwM2V2bV9wYW5lbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDNldm1fcGFuZWxfZHJ2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcDNldm1fcGFuZWxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob21hcDNldm1fcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQob21hcDNldm1fcGFuZWxfZHJ2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3NrLmMKaW5kZXggMzc5Yzk2ZC4uYjNmYTg4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29zay5jCkBAIC0xMjcsMTIgKzEyNywxMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IG9za19wYW5lbF9kcnZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb3NrX3BhbmVsX2Rydl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb3NrX3BhbmVsX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIG9za19wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG9za19wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvc2tfcGFuZWxfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3Zlcm8uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3Zlcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmM1YzkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vdmVyby5jCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogTENEIHBhbmVsIHN1cHBvcnQgZm9yIHRoZSBHdW1zdGl4IE92ZXJvCisgKgorICogQXV0aG9yOiBTdGV2ZSBTYWtvbWFuIDxzdGV2ZUBzYWtvbWFuLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2RlZmluZSBMQ0RfRU5BQkxFICAgICAgIDE0NAorCitzdGF0aWMgaW50IG92ZXJvX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQoreworCWlmICgoZ3Bpb19yZXF1ZXN0KExDRF9FTkFCTEUsICJMQ0RfRU5BQkxFIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfRU5BQkxFLCAxKSA9PSAwKSkKKwkJZ3Bpb19leHBvcnQoTENEX0VOQUJMRSwgMCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBvYnRhaW4gZ3BpbyBmb3IgTENEX0VOQUJMRVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3Zlcm9fcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlncGlvX2ZyZWUoTENEX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbnQgb3Zlcm9fcGFuZWxfZW5hYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fc2V0X3ZhbHVlKExDRF9FTkFCTEUsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvdmVyb19wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQoreworCWdwaW9fc2V0X3ZhbHVlKExDRF9FTkFCTEUsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvdmVyb19wYW5lbF9nZXRfY2FwcyhzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGxjZF9wYW5lbCBvdmVyb19wYW5lbCA9IHsKKwkubmFtZQkJPSAib3Zlcm8iLAorCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCwKKwkuYnBwCQk9IDE2LAorCS5kYXRhX2xpbmVzCT0gMjQsCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9PTUFQXzAzMU0zUgorCisJLyogNjQwIHggNDgwIEAgNjAgSHogIFJlZHVjZWQgYmxhbmtpbmcgVkVTQSBDVlQgMC4zMU0zLVIgKi8KKwkueF9yZXMJCT0gNjQwLAorCS55X3JlcwkJPSA0ODAsCisJLmhmcAkJPSA0OCwKKwkuaHN3CQk9IDMyLAorCS5oYnAJCT0gODAsCisJLnZmcAkJPSAzLAorCS52c3cJCT0gNCwKKwkudmJwCQk9IDcsCisJLnBpeGVsX2Nsb2NrCT0gMjM1MDAsCisKKyNlbGlmIGRlZmluZWQgQ09ORklHX0ZCX09NQVBfMDQ4TTNSCisKKwkvKiA4MDAgeCA2MDAgQCA2MCBIeiAgUmVkdWNlZCBibGFua2luZyBWRVNBIENWVCAwLjQ4TTMtUiAqLworCS54X3JlcwkJPSA4MDAsCisJLnlfcmVzCQk9IDYwMCwKKwkuaGZwCQk9IDQ4LAorCS5oc3cJCT0gMzIsCisJLmhicAkJPSA4MCwKKwkudmZwCQk9IDMsCisJLnZzdwkJPSA0LAorCS52YnAJCT0gMTEsCisJLnBpeGVsX2Nsb2NrCT0gMzU1MDAsCisKKyNlbGlmIGRlZmluZWQgQ09ORklHX0ZCX09NQVBfMDc5TTNSCisKKwkvKiAxMDI0IHggNzY4IEAgNjAgSHogIFJlZHVjZWQgYmxhbmtpbmcgVkVTQSBDVlQgMC43OU0zLVIgKi8KKwkueF9yZXMJCT0gMTAyNCwKKwkueV9yZXMJCT0gNzY4LAorCS5oZnAJCT0gNDgsCisJLmhzdwkJPSAzMiwKKwkuaGJwCQk9IDgwLAorCS52ZnAJCT0gMywKKwkudnN3CQk9IDQsCisJLnZicAkJPSAxNSwKKwkucGl4ZWxfY2xvY2sJPSA1NjAwMCwKKworI2VsaWYgZGVmaW5lZCBDT05GSUdfRkJfT01BUF8wOTJNOVIKKworCS8qIDEyODAgeCA3MjAgQCA2MCBIeiAgUmVkdWNlZCBibGFua2luZyBWRVNBIENWVCAwLjkyTTktUiAqLworCS54X3JlcwkJPSAxMjgwLAorCS55X3JlcwkJPSA3MjAsCisJLmhmcAkJPSA0OCwKKwkuaHN3CQk9IDMyLAorCS5oYnAJCT0gODAsCisJLnZmcAkJPSAzLAorCS52c3cJCT0gNSwKKwkudmJwCQk9IDEzLAorCS5waXhlbF9jbG9jawk9IDY0MDAwLAorCisjZWxzZQorCisJLyogdXNlIDY0MCB4IDQ4MCBpZiBubyBjb25maWcgb3B0aW9uICovCisJLyogNjQwIHggNDgwIEAgNjAgSHogIFJlZHVjZWQgYmxhbmtpbmcgVkVTQSBDVlQgMC4zMU0zLVIgKi8KKwkueF9yZXMJCT0gNjQwLAorCS55X3JlcwkJPSA0ODAsCisJLmhmcAkJPSA0OCwKKwkuaHN3CQk9IDMyLAorCS5oYnAJCT0gODAsCisJLnZmcAkJPSAzLAorCS52c3cJCT0gNCwKKwkudmJwCQk9IDcsCisJLnBpeGVsX2Nsb2NrCT0gMjM1MDAsCisKKyNlbmRpZgorCisJLmluaXQJCT0gb3Zlcm9fcGFuZWxfaW5pdCwKKwkuY2xlYW51cAk9IG92ZXJvX3BhbmVsX2NsZWFudXAsCisJLmVuYWJsZQkJPSBvdmVyb19wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSBvdmVyb19wYW5lbF9kaXNhYmxlLAorCS5nZXRfY2Fwcwk9IG92ZXJvX3BhbmVsX2dldF9jYXBzLAorfTsKKworc3RhdGljIGludCBvdmVyb19wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmb3Zlcm9fcGFuZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92ZXJvX3BhbmVsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCS8qIG9tYXBmYiBkb2VzIG5vdCBoYXZlIHVucmVnaXN0ZXJfcGFuZWwgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3Zlcm9fcGFuZWxfZHJpdmVyID0geworCS5wcm9iZQkJPSBvdmVyb19wYW5lbF9wcm9iZSwKKwkucmVtb3ZlCQk9IG92ZXJvX3BhbmVsX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAib3Zlcm9fbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG92ZXJvX3BhbmVsX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb3Zlcm9fcGFuZWxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG92ZXJvX3BhbmVsX2Rydl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm92ZXJvX3BhbmVsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG92ZXJvX3BhbmVsX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KG92ZXJvX3BhbmVsX2Rydl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfcGFsbXRlLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG10ZS5jCmluZGV4IDIxODMxNzMuLjRiZjNjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfcGFsbXRlLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtdGUuYwpAQCAtMTA4LDEyICsxMDgsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBwYWxtdGVfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBhbG10ZV9wYW5lbF9kcnZfaW5pdCh2b2lkKQogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBhbG10ZV9wYW5lbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBwYWxtdGVfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYWxtdGVfcGFuZWxfZHJ2X2NsZWFudXAodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGFsbXRlX3BhbmVsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG10dC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtdHQuYwppbmRleCA1N2IwZjZjLi40OGVhMWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG10dC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfcGFsbXR0LmMKQEAgLTExMywxMiArMTEzLDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgcGFsbXR0X3BhbmVsX2Rydl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwYWxtdHRfcGFuZWxfZHJ2X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwYWxtdHRfcGFuZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgcGFsbXR0X3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFsbXR0X3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBhbG10dF9wYW5lbF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9wYWxtejcxLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG16NzEuYwppbmRleCBkMzNkNzhiLi4wNjk3ZDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG16NzEuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3BhbG16NzEuYwpAQCAtMTA5LDEyICsxMDksMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBwYWxtejcxX3BhbmVsX2Rydl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwYWxtejcxX3BhbmVsX2Rydl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGFsbXo3MV9wYW5lbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBwYWxtejcxX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFsbXo3MV9wYW5lbF9kcnZfY2xlYW51cCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwYWxtejcxX3BhbmVsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCmluZGV4IDg4NjIyMzMuLjEyNWU2MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJeyBPTUFQRkJfQ0FQU19XSU5ET1dfUElYRUxfRE9VQkxFLCAicGl4ZWwgZG91YmxlIHdpbmRvdyIgfSwKIAl7IE9NQVBGQl9DQVBTX1dJTkRPV19TQ0FMRSwgICAic2NhbGUgd2luZG93IiB9LAogCXsgT01BUEZCX0NBUFNfV0lORE9XX09WRVJMQVksICJvdmVybGF5IHdpbmRvdyIgfSwKKwl7IE9NQVBGQl9DQVBTX1dJTkRPV19ST1RBVEUsICAicm90YXRlIHdpbmRvdyIgfSwKIAl7IE9NQVBGQl9DQVBTX1NFVF9CQUNLTElHSFQsICAiYmFja2xpZ2h0IHNldHRpbmciIH0sCiB9OwogCkBAIC0yMTUsNiArMjE2LDE1IEBACiAJCQkJIG9mZnNldCwgdmFyLT54cmVzX3ZpcnR1YWwsCiAJCQkJIHBsYW5lLT5pbmZvLnBvc194LCBwbGFuZS0+aW5mby5wb3NfeSwKIAkJCQkgdmFyLT54cmVzLCB2YXItPnlyZXMsIHBsYW5lLT5jb2xvcl9tb2RlKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJaWYgKGZiZGV2LT5jdHJsLT5zZXRfcm90YXRlICE9IE5VTEwpIHsKKwkJciA9IGZiZGV2LT5jdHJsLT5zZXRfcm90YXRlKHZhci0+cm90YXRlKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisJfQorCiAJaWYgKGZiZGV2LT5jdHJsLT5zZXRfc2NhbGUgIT0gTlVMTCkKIAkJciA9IGZiZGV2LT5jdHJsLT5zZXRfc2NhbGUocGxhbmUtPmlkeCwKIAkJCQkgICB2YXItPnhyZXMsIHZhci0+eXJlcywKQEAgLTU1NCw3ICs1NjQsNiBAQAogCQl2YXItPnhvZmZzZXQgPSB2YXItPnhyZXNfdmlydHVhbCAtIHZhci0+eHJlczsKIAlpZiAodmFyLT55cmVzICsgdmFyLT55b2Zmc2V0ID4gdmFyLT55cmVzX3ZpcnR1YWwpCiAJCXZhci0+eW9mZnNldCA9IHZhci0+eXJlc192aXJ0dWFsIC0gdmFyLT55cmVzOwotCWxpbmVfc2l6ZSA9IHZhci0+eHJlcyAqIGJwcCAvIDg7CiAKIAlpZiAocGxhbmUtPmNvbG9yX21vZGUgPT0gT01BUEZCX0NPTE9SX1JHQjQ0NCkgewogCQl2YXItPnJlZC5vZmZzZXQJICA9IDg7IHZhci0+cmVkLmxlbmd0aAkgPSA0OwpAQCAtNjAwLDcgKzYwOSw3IEBACiAJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2ID0gcGxhbmUtPmZiZGV2OwogCiAJb21hcGZiX3JxdWV1ZV9sb2NrKGZiZGV2KTsKLQlpZiAoY3B1X2lzX29tYXAxNXh4KCkgJiYgcm90YXRlICE9IGZiaS0+dmFyLnJvdGF0ZSkgeworCWlmIChyb3RhdGUgIT0gZmJpLT52YXIucm90YXRlKSB7CiAJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqbmV3X3ZhciA9ICZmYmRldi0+bmV3X3ZhcjsKIAogCQltZW1jcHkobmV3X3ZhciwgJmZiaS0+dmFyLCBzaXplb2YoKm5ld192YXIpKTsKQEAgLTcwNywyOCArNzE2LDQyIEBACiAJCQkJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopLAogCQkJCXZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CisJaW50IHhyZXMsIHlyZXM7CiAJc3RydWN0IG9tYXBmYl9wbGFuZV9zdHJ1Y3QgKnBsYW5lID0gZmJpLT5wYXI7CiAJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2ID0gcGxhbmUtPmZiZGV2OwotCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmZiaS0+dmFyOwogCi0JdmFyID0gJmZiaS0+dmFyOwotCWlmICh3aW4tPnggPj0gdmFyLT54cmVzIHx8IHdpbi0+eSA+PSB2YXItPnlyZXMgfHwKLQkgICAgd2luLT5vdXRfeCA+IHZhci0+eHJlcyB8fCB3aW4tPm91dF95ID49IHZhci0+eXJlcykKKwlzd2l0Y2ggKHZhci0+cm90YXRlKSB7CisJY2FzZSAwOgorCWNhc2UgMTgwOgorCQl4cmVzID0gZmJkZXYtPnBhbmVsLT54X3JlczsKKwkJeXJlcyA9IGZiZGV2LT5wYW5lbC0+eV9yZXM7CisJCWJyZWFrOworCWNhc2UgOTA6CisJY2FzZSAyNzA6CisJCXhyZXMgPSBmYmRldi0+cGFuZWwtPnlfcmVzOworCQl5cmVzID0gZmJkZXYtPnBhbmVsLT54X3JlczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHdpbi0+eCA+PSB4cmVzIHx8IHdpbi0+eSA+PSB5cmVzIHx8CisJICAgIHdpbi0+b3V0X3ggPiB4cmVzIHx8IHdpbi0+b3V0X3kgPiB5cmVzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghZmJkZXYtPmN0cmwtPnVwZGF0ZV93aW5kb3cgfHwKIAkgICAgZmJkZXYtPmN0cmwtPmdldF91cGRhdGVfbW9kZSgpICE9IE9NQVBGQl9NQU5VQUxfVVBEQVRFKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICh3aW4tPnggKyB3aW4tPndpZHRoID49IHZhci0+eHJlcykKLQkJd2luLT53aWR0aCA9IHZhci0+eHJlcyAtIHdpbi0+eDsKLQlpZiAod2luLT55ICsgd2luLT5oZWlnaHQgPj0gdmFyLT55cmVzKQotCQl3aW4tPmhlaWdodCA9IHZhci0+eXJlcyAtIHdpbi0+eTsKLQkvKiBUaGUgb3V0IHNpemVzIHNob3VsZCBiZSBjcm9wcGVkIHRvIHRoZSBMQ0Qgc2l6ZSAqLwotCWlmICh3aW4tPm91dF94ICsgd2luLT5vdXRfd2lkdGggPiBmYmRldi0+cGFuZWwtPnhfcmVzKQotCQl3aW4tPm91dF93aWR0aCA9IGZiZGV2LT5wYW5lbC0+eF9yZXMgLSB3aW4tPm91dF94OwotCWlmICh3aW4tPm91dF95ICsgd2luLT5vdXRfaGVpZ2h0ID4gZmJkZXYtPnBhbmVsLT55X3JlcykKLQkJd2luLT5vdXRfaGVpZ2h0ID0gZmJkZXYtPnBhbmVsLT55X3JlcyAtIHdpbi0+b3V0X3k7CisJaWYgKHdpbi0+eCArIHdpbi0+d2lkdGggPiB4cmVzKQorCQl3aW4tPndpZHRoID0geHJlcyAtIHdpbi0+eDsKKwlpZiAod2luLT55ICsgd2luLT5oZWlnaHQgPiB5cmVzKQorCQl3aW4tPmhlaWdodCA9IHlyZXMgLSB3aW4tPnk7CisJaWYgKHdpbi0+b3V0X3ggKyB3aW4tPm91dF93aWR0aCA+IHhyZXMpCisJCXdpbi0+b3V0X3dpZHRoID0geHJlcyAtIHdpbi0+b3V0X3g7CisJaWYgKHdpbi0+b3V0X3kgKyB3aW4tPm91dF9oZWlnaHQgPiB5cmVzKQorCQl3aW4tPm91dF9oZWlnaHQgPSB5cmVzIC0gd2luLT5vdXRfeTsKIAlpZiAoIXdpbi0+d2lkdGggfHwgIXdpbi0+aGVpZ2h0IHx8ICF3aW4tPm91dF93aWR0aCB8fCAhd2luLT5vdXRfaGVpZ2h0KQogCQlyZXR1cm4gMDsKIApAQCAtMTY5OSw4ICsxNzIyLDggQEAKIAogCXByX2luZm8oIm9tYXBmYjogY29uZmlndXJlZCBmb3IgcGFuZWwgJXNcbiIsIGZiZGV2LT5wYW5lbC0+bmFtZSk7CiAKLQlkZWZfdnhyZXMgPSBkZWZfdnhyZXMgPyA6IGZiZGV2LT5wYW5lbC0+eF9yZXM7Ci0JZGVmX3Z5cmVzID0gZGVmX3Z5cmVzID8gOiBmYmRldi0+cGFuZWwtPnlfcmVzOworCWRlZl92eHJlcyA9IGRlZl92eHJlcyA/IGRlZl92eHJlcyA6IGZiZGV2LT5wYW5lbC0+eF9yZXM7CisJZGVmX3Z5cmVzID0gZGVmX3Z5cmVzID8gZGVmX3Z5cmVzIDogZmJkZXYtPnBhbmVsLT55X3JlczsKIAogCWluaXRfc3RhdGUrKzsKIApAQCAtMTgyMiw4ICsxODQ1LDggQEAKIHsKIAlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCW9tYXBmYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIGZiZGV2LT5mYl9pbmZvWzBdKTsKLQorCWlmIChmYmRldiAhPSBOVUxMKQorCQlvbWFwZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCBmYmRldi0+ZmJfaW5mb1swXSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MzIsNyArMTg1NSw4IEBACiB7CiAJc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlvbWFwZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgZmJkZXYtPmZiX2luZm9bMF0pOworCWlmIChmYmRldiAhPSBOVUxMKQorCQlvbWFwZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgZmJkZXYtPmZiX2luZm9bMF0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jIGIvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYwppbmRleCA5MzMyZDZjLi5lZTAxZTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9yZmJpLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAogI2RlZmluZSBESVNQQ19CQVNFCQkweDQ4MDUwNDAwCiAjZGVmaW5lIERJU1BDX0NPTlRST0wJCTB4MDA0MAorI2RlZmluZSBESVNQQ19JUlFfRlJBTUVNQVNLICAgICAweDAwMDEKIAogc3RhdGljIHN0cnVjdCB7CiAJdm9pZCBfX2lvbWVtCSpiYXNlOwpAQCAtNTUzLDcgKzU1NCw5IEBACiAJbCA9ICgweDAxIDw8IDIpOwogCXJmYmlfd3JpdGVfcmVnKFJGQklfQ09OVFJPTCwgbCk7CiAKLQlpZiAoKHIgPSBvbWFwX2Rpc3BjX3JlcXVlc3RfaXJxKHJmYmlfZG1hX2NhbGxiYWNrLCBOVUxMKSkgPCAwKSB7CisJciA9IG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEoRElTUENfSVJRX0ZSQU1FTUFTSywgcmZiaV9kbWFfY2FsbGJhY2ssCisJCQkJICAgTlVMTCk7CisJaWYgKHIgPCAwKSB7CiAJCWRldl9lcnIoZmJkZXYtPmRldiwgImNhbid0IGdldCBESVNQQyBpcnFcbiIpOwogCQlyZmJpX2VuYWJsZV9jbG9ja3MoMCk7CiAJCXJldHVybiByOwpAQCAtNTcwLDcgKzU3Myw3IEBACiAKIHN0YXRpYyB2b2lkIHJmYmlfY2xlYW51cCh2b2lkKQogewotCW9tYXBfZGlzcGNfZnJlZV9pcnEoKTsKKwlvbWFwX2Rpc3BjX2ZyZWVfaXJxKERJU1BDX0lSUV9GUkFNRU1BU0ssIHJmYmlfZG1hX2NhbGxiYWNrLCBOVUxMKTsKIAlyZmJpX3B1dF9jbG9ja3MoKTsKIAlpb3VubWFwKHJmYmkuYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYyBiL2RyaXZlcnMvdmlkZW8vcGxhdGludW1mYi5jCmluZGV4IGJhY2ZhYmQuLjBhMzY2ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcGxhdGludW1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcGxhdGludW1mYi5jCkBAIC0yMjMsMTAgKzIyMywxNCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBwbGF0aW51bV92cmFtX3JlcWQoaW50IHZpZGVvX21vZGUsIGludCBjb2xvcl9tb2RlKQogewotCXJldHVybiB2bW9kZV9hdHRyc1t2aWRlb19tb2RlLTFdLnZyZXMgKgotCSAgICAgICAodm1vZGVfYXR0cnNbdmlkZW9fbW9kZS0xXS5ocmVzICogKDE8PGNvbG9yX21vZGUpICsKLQkJKCh2aWRlb19tb2RlID09IFZNT0RFXzgzMl82MjRfNzUpICYmCi0JCSAoY29sb3JfbW9kZSA+IENNT0RFXzgpKSA/IDB4MTAgOiAweDIwKSArIDB4MTAwMDsKKwlpbnQgYmFzZXZhbCA9IHZtb2RlX2F0dHJzW3ZpZGVvX21vZGUtMV0uaHJlcyAqICgxPDxjb2xvcl9tb2RlKTsKKworCWlmICgodmlkZW9fbW9kZSA9PSBWTU9ERV84MzJfNjI0Xzc1KSAmJiAoY29sb3JfbW9kZSA+IENNT0RFXzgpKQorCQliYXNldmFsICs9IDB4MTA7CisJZWxzZQorCQliYXNldmFsICs9IDB4MjA7CisKKwlyZXR1cm4gdm1vZGVfYXR0cnNbdmlkZW9fbW9kZS0xXS52cmVzICogYmFzZXZhbCArIDB4MTAwMDsKIH0KIAogI2RlZmluZSBTVE9SRV9EMihhLCBkKSB7IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCmluZGV4IDVhNzIwODMuLmFkZjk2MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjX2ZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjX2ZiX3Byb2JlLAotCS5yZW1vdmUJCT0gczNjX2ZiX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY19mYl9yZW1vdmUpLAogCS5zdXNwZW5kCT0gczNjX2ZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2NfZmJfcmVzdW1lLAogCS5kcml2ZXIJCT0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKaW5kZXggN2RhMDAyNy4uYWFjNjYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCkBAIC0zNjksNyArMzY5LDkgQEAKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBmYmktPmlvOwogCWludCB0eXBlID0gZmJpLT5yZWdzLmxjZGNvbjEgJiBTM0MyNDEwX0xDRENPTjFfVEZUOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKLQlpbnQgY2xrZGl2ID0gczNjMjQxMGZiX2NhbGNfcGl4Y2xrKGZiaSwgdmFyLT5waXhjbG9jaykgLyAyOworCWludCBjbGtkaXY7CisKKwljbGtkaXYgPSBESVZfUk9VTkRfVVAoczNjMjQxMGZiX2NhbGNfcGl4Y2xrKGZiaSwgdmFyLT5waXhjbG9jayksIDIpOwogCiAJZHByaW50aygiJXM6IHZhci0+eHJlcyAgPSAlZFxuIiwgX19mdW5jX18sIHZhci0+eHJlcyk7CiAJZHByaW50aygiJXM6IHZhci0+eXJlcyAgPSAlZFxuIiwgX19mdW5jX18sIHZhci0+eXJlcyk7CkBAIC0xMTE5LDcgKzExMjEsNyBAQAogCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBmYl9kcml2ZXIpOwogCiAJaWYgKHJldCA9PSAwKQotCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTJmYl9kcml2ZXIpOzsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEyZmJfZHJpdmVyKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jIGIvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYwppbmRleCA0YTA2N2YwLi5hNGUwNWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKQEAgLTY5OCw4ICs2OTgsOCBAQAogCQkJCQkJcmF0ZSwgc2lzZmJfdnJhdGVbaV0ucmVmcmVzaCk7CiAJCQkJCWl2aWRlby0+cmF0ZV9pZHggPSBzaXNmYl92cmF0ZVtpXS5pZHg7CiAJCQkJCWl2aWRlby0+cmVmcmVzaF9yYXRlID0gc2lzZmJfdnJhdGVbaV0ucmVmcmVzaDsKLQkJCQl9IGVsc2UgaWYoKChyYXRlIC0gc2lzZmJfdnJhdGVbaS0xXS5yZWZyZXNoKSA8PSAyKQotCQkJCQkJJiYgKHNpc2ZiX3ZyYXRlW2ldLmlkeCAhPSAxKSkgeworCQkJCX0gZWxzZSBpZigoc2lzZmJfdnJhdGVbaV0uaWR4ICE9IDEpICYmCisJCQkJCQkoKHJhdGUgLSBzaXNmYl92cmF0ZVtpLTFdLnJlZnJlc2gpIDw9IDIpKSB7CiAJCQkJCURQUklOVEsoInNpc2ZiOiBBZGp1c3RpbmcgcmF0ZSBmcm9tICVkIGRvd24gdG8gJWRcbiIsCiAJCQkJCQlyYXRlLCBzaXNmYl92cmF0ZVtpLTFdLnJlZnJlc2gpOwogCQkJCQlpdmlkZW8tPnJhdGVfaWR4ID0gc2lzZmJfdnJhdGVbaS0xXS5pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy92c3RydWN0LmggYi9kcml2ZXJzL3ZpZGVvL3Npcy92c3RydWN0LmgKaW5kZXggNzA1Yzg1My4uYmVmNGFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvdnN0cnVjdC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3ZzdHJ1Y3QuaApAQCAtMzQyLDcgKzM0Miw3IEBACiAJdW5zaWduZWQgc2hvcnQJCQlTaVNfUlk0Q09FOwogCXVuc2lnbmVkIHNob3J0CQkJU2lTX0xDREhERVM7CiAJdW5zaWduZWQgc2hvcnQJCQlTaVNfTENEVkRFUzsKLQl1bnNpZ25lZCBzaG9ydAkJCVNpU19ERENfUG9ydDsKKwlTSVNJT0FERFJFU1MJCQlTaVNfRERDX1BvcnQ7CiAJdW5zaWduZWQgc2hvcnQJCQlTaVNfRERDX0luZGV4OwogCXVuc2lnbmVkIHNob3J0CQkJU2lTX0REQ19EYXRhOwogCXVuc2lnbmVkIHNob3J0CQkJU2lTX0REQ19ORGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCmluZGV4IGExZWIwODYuLjY5MTNmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwpAQCAtOTc0LDcgKzk3NCw3IEBACiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvYWNjZWwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMKaW5kZXggNDVjNTRiZi4uOWQ0ZjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvYWNjZWwuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCkBAIC0yMCwyMjkgKzIwLDQzMCBAQAogICovCiAjaW5jbHVkZSAiZ2xvYmFsLmgiCiAKLXZvaWQgdmlhZmJfaW5pdF9hY2NlbCh2b2lkKQorc3RhdGljIGludCBod19iaXRibHRfMSh2b2lkIF9faW9tZW0gKmVuZ2luZSwgdTggb3AsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKKwl1OCBkc3RfYnBwLCB1MzIgZHN0X2FkZHIsIHUzMiBkc3RfcGl0Y2gsIHUzMiBkc3RfeCwgdTMyIGRzdF95LAorCXUzMiAqc3JjX21lbSwgdTMyIHNyY19hZGRyLCB1MzIgc3JjX3BpdGNoLCB1MzIgc3JjX3gsIHUzMiBzcmNfeSwKKwl1MzIgZmdfY29sb3IsIHUzMiBiZ19jb2xvciwgdTggZmlsbF9yb3ApCiB7Ci0JdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSAtPSBDVVJTT1JfU0laRTsKLQl2aWFwYXJpbmZvLT5jdXJzb3Jfc3RhcnQgPSB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlOwotCXZpYXBhcmluZm8tPmZibWVtX3VzZWQgKz0gQ1VSU09SX1NJWkU7CisJdTMyIGdlX2NtZCA9IDAsIHRtcCwgaTsKIAotCS8qIFJldmVyc2UgOCoxMDI0IG1lbW9yeSBzcGFjZSBmb3IgY3Vyc29yIGltYWdlICovCi0JdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSAtPSAoQ1VSU09SX1NJWkUgKyBWUV9TSVpFKTsKLQl2aWFwYXJpbmZvLT5WUV9zdGFydCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7Ci0JdmlhcGFyaW5mby0+VlFfZW5kID0gdmlhcGFyaW5mby0+VlFfc3RhcnQgKyBWUV9TSVpFIC0gMTsKLQl2aWFwYXJpbmZvLT5mYm1lbV91c2VkICs9IChDVVJTT1JfU0laRSArIFZRX1NJWkUpOyB9Ci0KLXZvaWQgdmlhZmJfaW5pdF8yZF9lbmdpbmUodm9pZCkKLXsKLQl1MzIgZHdWUVN0YXJ0QWRkciwgZHdWUUVuZEFkZHI7Ci0JdTMyIGR3VlFMZW4sIGR3VlFTdGFydEwsIGR3VlFFbmRMLCBkd1ZRU3RhcnRFbmRIOwotCi0JLyogaW5pdCAyRCBlbmdpbmUgcmVncyB0byByZXNldCAyRCBlbmdpbmUgKi8KLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19HRU1PREUpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BBVEFERFIpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0ZHQ09MT1IpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0JHQ09MT1IpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NMSVBUTCk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ0xJUEJSKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19PRkZTRVQpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0tFWUNPTlRST0wpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19NT05PUEFUMSk7Ci0KLQkvKiBJbml0IEFHUCBhbmQgVlEgcmVncyAqLwotCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JY2FzZSBVTklDSFJPTUVfSzhNODkwOgotCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKLQkJd3JpdGVsKDB4MDAxMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOwotCQl3cml0ZWwoMHg2ODBBMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKLQkJd3JpdGVsKDB4MDIwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJd3JpdGVsKDB4MDAxMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOwotCQl3cml0ZWwoMHgwMDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJd3JpdGVsKDB4MDAzMzMwMDQsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCXdyaXRlbCgweDYwMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQl3cml0ZWwoMHg2MTAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJd3JpdGVsKDB4NjIwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCXdyaXRlbCgweDYzMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQl3cml0ZWwoMHg2NDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJd3JpdGVsKDB4N0QwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0KLQkJd3JpdGVsKDB4RkUwMjAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOwotCQl3cml0ZWwoMHgwMDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJYnJlYWs7CisJaWYgKCFvcCB8fCBvcCA+IDMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzE6IEludmFsaWQgb3BlcmF0aW9uOiAlZFxuIiwgb3ApOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKHZpYXBhcmluZm8tPlZRX3N0YXJ0ICE9IDApIHsKLQkJLyogRW5hYmxlIFZRICovCi0JCWR3VlFTdGFydEFkZHIgPSB2aWFwYXJpbmZvLT5WUV9zdGFydDsKLQkJZHdWUUVuZEFkZHIgPSB2aWFwYXJpbmZvLT5WUV9lbmQ7CiAKLQkJZHdWUVN0YXJ0TCA9IDB4NTAwMDAwMDAgfCAoZHdWUVN0YXJ0QWRkciAmIDB4RkZGRkZGKTsKLQkJZHdWUUVuZEwgPSAweDUxMDAwMDAwIHwgKGR3VlFFbmRBZGRyICYgMHhGRkZGRkYpOwotCQlkd1ZRU3RhcnRFbmRIID0gMHg1MjAwMDAwMCB8Ci0JCQkoKGR3VlFTdGFydEFkZHIgJiAweEZGMDAwMDAwKSA+PiAyNCkgfAotCQkJKChkd1ZRRW5kQWRkciAmIDB4RkYwMDAwMDApID4+IDE2KTsKLQkJZHdWUUxlbiA9IDB4NTMwMDAwMDAgfCAoVlFfU0laRSA+PiAzKTsKLQkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKLQkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgotCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6Ci0JCQlkd1ZRU3RhcnRMIHw9IDB4MjAwMDAwMDA7Ci0JCQlkd1ZRRW5kTCB8PSAweDIwMDAwMDAwOwotCQkJZHdWUVN0YXJ0RW5kSCB8PSAweDIwMDAwMDAwOwotCQkJZHdWUUxlbiB8PSAweDIwMDAwMDAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwlpZiAob3AgIT0gVklBX0JJVEJMVF9GSUxMICYmICFzcmNfbWVtICYmIHNyY19hZGRyID09IGRzdF9hZGRyKSB7CisJCWlmIChzcmNfeCA8IGRzdF94KSB7CisJCQlnZV9jbWQgfD0gMHgwMDAwODAwMDsKKwkJCXNyY194ICs9IHdpZHRoIC0gMTsKKwkJCWRzdF94ICs9IHdpZHRoIC0gMTsKIAkJfQotCi0JCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKLQkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgotCQkJd3JpdGVsKDB4MDAxMDAwMDAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNFVCk7Ci0JCQl3cml0ZWwoZHdWUVN0YXJ0RW5kSCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKGR3VlFTdGFydEwsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbChkd1ZRRW5kTCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKGR3VlFMZW4sCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDc0MzAxMDAxLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHgwMDAwMDAwMCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl3cml0ZWwoMHgwMEZFMDAwMCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU0VUKTsKLQkJCXdyaXRlbCgweDA4MDAwM0ZFLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHgwQTAwMDI3QywKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4MEIwMDAyNjAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDBDMDAwMjc0LAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHgwRDAwMDI2NCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4MEUwMDAwMDAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDBGMDAwMDIwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHgxMDAwMDI3RSwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4MTEwMDAyRkUsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDIwMEYwMDYwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0KLQkJCXdyaXRlbCgweDAwMDAwMDA2LAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHg0MDAwOEMwRiwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4NDQwMDAwMDAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDQ1MDgwQzA0LAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHg0NjgwMDQwOCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCi0JCQl3cml0ZWwoZHdWUVN0YXJ0RW5kSCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKGR3VlFTdGFydEwsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbChkd1ZRRW5kTCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKGR3VlFMZW4sCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSBWUSAqLwotCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewotCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6Ci0JCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKLQkJCXdyaXRlbCgweDAwMTAwMDAwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOwotCQkJd3JpdGVsKDB4NzQzMDEwMDAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJd3JpdGVsKDB4MDBGRTAwMDAsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNFVCk7Ci0JCQl3cml0ZWwoMHgwMDAwMDAwNCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4NDAwMDhDMEYsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCXdyaXRlbCgweDQ0MDAwMDAwLAotCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7Ci0JCQl3cml0ZWwoMHg0NTA4MEMwNCwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOwotCQkJd3JpdGVsKDB4NDY4MDA0MDgsCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKLQkJCWJyZWFrOworCQlpZiAoc3JjX3kgPCBkc3RfeSkgeworCQkJZ2VfY21kIHw9IDB4MDAwMDQwMDA7CisJCQlzcmNfeSArPSBoZWlnaHQgLSAxOworCQkJZHN0X3kgKz0gaGVpZ2h0IC0gMTsKIAkJfQogCX0KIAotCXZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aCh2aWFwYXJpbmZvLT5icHApOworCWlmIChvcCA9PSBWSUFfQklUQkxUX0ZJTEwpIHsKKwkJc3dpdGNoIChmaWxsX3JvcCkgeworCQljYXNlIDB4MDA6IC8qIGJsYWNrbmVzcyAqLworCQljYXNlIDB4NUE6IC8qIHBhdHRlcm4gaW52ZXJzaW9uICovCisJCWNhc2UgMHhGMDogLyogcGF0dGVybiBjb3B5ICovCisJCWNhc2UgMHhGRjogLyogd2hpdGVuZXNzICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBJbnZhbGlkIGZpbGwgcm9wOiAiCisJCQkJIiV1XG4iLCBmaWxsX3JvcCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KIAotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOwotCi0Jd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAotCQkgICAoKCh2aWFwYXJpbmZvLT5ocmVzICoKLQkJICAgICAgdmlhcGFyaW5mby0+YnBwID4+IDMpID4+IDMpIHwgKCgodmlhcGFyaW5mby0+aHJlcyAqCi0JCQkJCQkgICB2aWFwYXJpbmZvLT4KLQkJCQkJCSAgIGJwcCA+PiAzKSA+PiAzKSA8PCAxNikpLAotCQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QSVRDSCk7Ci19Ci0KLXZvaWQgdmlhZmJfc2V0XzJkX2NvbG9yX2RlcHRoKGludCBicHApCi17Ci0JdTMyIGR3R0VNb2RlOwotCi0JZHdHRU1vZGUgPSByZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgMHgwNCkgJiAweEZGRkZGQ0ZGOwotCi0Jc3dpdGNoIChicHApIHsKKwlzd2l0Y2ggKGRzdF9icHApIHsKKwljYXNlIDg6CisJCXRtcCA9IDB4MDAwMDAwMDA7CisJCWJyZWFrOwogCWNhc2UgMTY6Ci0JCWR3R0VNb2RlIHw9IFZJQV9HRU1fMTZicHA7CisJCXRtcCA9IDB4MDAwMDAxMDA7CiAJCWJyZWFrOwogCWNhc2UgMzI6Ci0JCWR3R0VNb2RlIHw9IFZJQV9HRU1fMzJicHA7CisJCXRtcCA9IDB4MDAwMDAzMDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWR3R0VNb2RlIHw9IFZJQV9HRU1fOGJwcDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzE6IFVuc3VwcG9ydGVkIGJwcCAlZFxuIiwKKwkJCWRzdF9icHApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgwNCk7CisKKwlpZiAob3AgIT0gVklBX0JJVEJMVF9GSUxMKSB7CisJCWlmIChzcmNfeCAmIChvcCA9PSBWSUFfQklUQkxUX01PTk8gPyAweEZGRkY4MDAwIDogMHhGRkZGRjAwMCkKKwkJCXx8IHNyY195ICYgMHhGRkZGRjAwMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzE6IFVuc3VwcG9ydGVkIHNvdXJjZSAiCisJCQkJIngveSAlZCAlZFxuIiwgc3JjX3gsIHNyY195KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRtcCA9IHNyY194IHwgKHNyY195IDw8IDE2KTsKKwkJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgwOCk7CisJfQorCisJaWYgKGRzdF94ICYgMHhGRkZGRjAwMCB8fCBkc3RfeSAmIDB4RkZGRkYwMDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzE6IFVuc3VwcG9ydGVkIGRlc3RpbmF0aW9uIHgveSAiCisJCQkiJWQgJWRcbiIsIGRzdF94LCBkc3RfeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0bXAgPSBkc3RfeCB8IChkc3RfeSA8PCAxNik7CisJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgwQyk7CisKKwlpZiAoKHdpZHRoIC0gMSkgJiAweEZGRkZGMDAwIHx8IChoZWlnaHQgLSAxKSAmIDB4RkZGRkYwMDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzE6IFVuc3VwcG9ydGVkIHdpZHRoL2hlaWdodCAiCisJCQkiJWQgJWRcbiIsIHdpZHRoLCBoZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdG1wID0gKHdpZHRoIC0gMSkgfCAoKGhlaWdodCAtIDEpIDw8IDE2KTsKKwl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDEwKTsKKworCWlmIChvcCAhPSBWSUFfQklUQkxUX0NPTE9SKQorCQl3cml0ZWwoZmdfY29sb3IsIGVuZ2luZSArIDB4MTgpOworCisJaWYgKG9wID09IFZJQV9CSVRCTFRfTU9OTykKKwkJd3JpdGVsKGJnX2NvbG9yLCBlbmdpbmUgKyAweDFDKTsKKworCWlmIChvcCAhPSBWSUFfQklUQkxUX0ZJTEwpIHsKKwkJdG1wID0gc3JjX21lbSA/IDAgOiBzcmNfYWRkcjsKKwkJaWYgKGRzdF9hZGRyICYgMHhFMDAwMDAwNykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzE6IFVuc3VwcG9ydGVkIHNvdXJjZSAiCisJCQkJImFkZHJlc3MgJVhcbiIsIHRtcCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0bXAgPj49IDM7CisJCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MzApOworCX0KKworCWlmIChkc3RfYWRkciAmIDB4RTAwMDAwMDcpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzE6IFVuc3VwcG9ydGVkIGRlc3RpbmF0aW9uICIKKwkJCSJhZGRyZXNzICVYXG4iLCBkc3RfYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0bXAgPSBkc3RfYWRkciA+PiAzOworCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MzQpOworCisJaWYgKG9wID09IFZJQV9CSVRCTFRfRklMTCkKKwkJdG1wID0gMDsKKwllbHNlCisJCXRtcCA9IHNyY19waXRjaDsKKwlpZiAodG1wICYgMHhGRkZGQzAwNyB8fCBkc3RfcGl0Y2ggJiAweEZGRkZDMDA3KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8xOiBVbnN1cHBvcnRlZCBwaXRjaCAlWCAlWFxuIiwKKwkJCXRtcCwgZHN0X3BpdGNoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRtcCA9ICh0bXAgPj4gMykgfCAoZHN0X3BpdGNoIDw8ICgxNiAtIDMpKTsKKwl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDM4KTsKKworCWlmIChvcCA9PSBWSUFfQklUQkxUX0ZJTEwpCisJCWdlX2NtZCB8PSBmaWxsX3JvcCA8PCAyNCB8IDB4MDAwMDIwMDAgfCAweDAwMDAwMDAxOworCWVsc2UgeworCQlnZV9jbWQgfD0gMHhDQzAwMDAwMDsgLyogUk9QPVNSQ0NPUFkgKi8KKwkJaWYgKHNyY19tZW0pCisJCQlnZV9jbWQgfD0gMHgwMDAwMDA0MDsKKwkJaWYgKG9wID09IFZJQV9CSVRCTFRfTU9OTykKKwkJCWdlX2NtZCB8PSAweDAwMDAwMDAyIHwgMHgwMDAwMDEwMCB8IDB4MDAwMjAwMDA7CisJCWVsc2UKKwkJCWdlX2NtZCB8PSAweDAwMDAwMDAxOworCX0KKwl3cml0ZWwoZ2VfY21kLCBlbmdpbmUpOworCisJaWYgKG9wID09IFZJQV9CSVRCTFRfRklMTCB8fCAhc3JjX21lbSkKKwkJcmV0dXJuIDA7CisKKwl0bXAgPSAod2lkdGggKiBoZWlnaHQgKiAob3AgPT0gVklBX0JJVEJMVF9NT05PID8gMSA6IChkc3RfYnBwID4+IDMpKSArCisJCTMpID4+IDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgdG1wOyBpKyspCisJCXdyaXRlbChzcmNfbWVtW2ldLCBlbmdpbmUgKyBWSUFfTU1JT19CTFRCQVNFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh3X2JpdGJsdF8yKHZvaWQgX19pb21lbSAqZW5naW5lLCB1OCBvcCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAorCXU4IGRzdF9icHAsIHUzMiBkc3RfYWRkciwgdTMyIGRzdF9waXRjaCwgdTMyIGRzdF94LCB1MzIgZHN0X3ksCisJdTMyICpzcmNfbWVtLCB1MzIgc3JjX2FkZHIsIHUzMiBzcmNfcGl0Y2gsIHUzMiBzcmNfeCwgdTMyIHNyY195LAorCXUzMiBmZ19jb2xvciwgdTMyIGJnX2NvbG9yLCB1OCBmaWxsX3JvcCkKK3sKKwl1MzIgZ2VfY21kID0gMCwgdG1wLCBpOworCisJaWYgKCFvcCB8fCBvcCA+IDMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzI6IEludmFsaWQgb3BlcmF0aW9uOiAlZFxuIiwgb3ApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAob3AgIT0gVklBX0JJVEJMVF9GSUxMICYmICFzcmNfbWVtICYmIHNyY19hZGRyID09IGRzdF9hZGRyKSB7CisJCWlmIChzcmNfeCA8IGRzdF94KSB7CisJCQlnZV9jbWQgfD0gMHgwMDAwODAwMDsKKwkJCXNyY194ICs9IHdpZHRoIC0gMTsKKwkJCWRzdF94ICs9IHdpZHRoIC0gMTsKKwkJfQorCQlpZiAoc3JjX3kgPCBkc3RfeSkgeworCQkJZ2VfY21kIHw9IDB4MDAwMDQwMDA7CisJCQlzcmNfeSArPSBoZWlnaHQgLSAxOworCQkJZHN0X3kgKz0gaGVpZ2h0IC0gMTsKKwkJfQorCX0KKworCWlmIChvcCA9PSBWSUFfQklUQkxUX0ZJTEwpIHsKKwkJc3dpdGNoIChmaWxsX3JvcCkgeworCQljYXNlIDB4MDA6IC8qIGJsYWNrbmVzcyAqLworCQljYXNlIDB4NUE6IC8qIHBhdHRlcm4gaW52ZXJzaW9uICovCisJCWNhc2UgMHhGMDogLyogcGF0dGVybiBjb3B5ICovCisJCWNhc2UgMHhGRjogLyogd2hpdGVuZXNzICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBJbnZhbGlkIGZpbGwgcm9wOiAiCisJCQkJIiV1XG4iLCBmaWxsX3JvcCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXN3aXRjaCAoZHN0X2JwcCkgeworCWNhc2UgODoKKwkJdG1wID0gMHgwMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdG1wID0gMHgwMDAwMDEwMDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdG1wID0gMHgwMDAwMDMwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzI6IFVuc3VwcG9ydGVkIGJwcCAlZFxuIiwKKwkJCWRzdF9icHApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgwNCk7CisKKwlpZiAob3AgPT0gVklBX0JJVEJMVF9GSUxMKQorCQl0bXAgPSAwOworCWVsc2UKKwkJdG1wID0gc3JjX3BpdGNoOworCWlmICh0bXAgJiAweEZGRkZDMDA3IHx8IGRzdF9waXRjaCAmIDB4RkZGRkMwMDcpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzI6IFVuc3VwcG9ydGVkIHBpdGNoICVYICVYXG4iLAorCQkJdG1wLCBkc3RfcGl0Y2gpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdG1wID0gKHRtcCA+PiAzKSB8IChkc3RfcGl0Y2ggPDwgKDE2IC0gMykpOworCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MDgpOworCisJaWYgKCh3aWR0aCAtIDEpICYgMHhGRkZGRjAwMCB8fCAoaGVpZ2h0IC0gMSkgJiAweEZGRkZGMDAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBVbnN1cHBvcnRlZCB3aWR0aC9oZWlnaHQgIgorCQkJIiVkICVkXG4iLCB3aWR0aCwgaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRtcCA9ICh3aWR0aCAtIDEpIHwgKChoZWlnaHQgLSAxKSA8PCAxNik7CisJd3JpdGVsKHRtcCwgZW5naW5lICsgMHgwQyk7CisKKwlpZiAoZHN0X3ggJiAweEZGRkZGMDAwIHx8IGRzdF95ICYgMHhGRkZGRjAwMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJod19iaXRibHRfMjogVW5zdXBwb3J0ZWQgZGVzdGluYXRpb24geC95ICIKKwkJCSIlZCAlZFxuIiwgZHN0X3gsIGRzdF95KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRtcCA9IGRzdF94IHwgKGRzdF95IDw8IDE2KTsKKwl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDEwKTsKKworCWlmIChkc3RfYWRkciAmIDB4RTAwMDAwMDcpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHdfYml0Ymx0XzI6IFVuc3VwcG9ydGVkIGRlc3RpbmF0aW9uICIKKwkJCSJhZGRyZXNzICVYXG4iLCBkc3RfYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0bXAgPSBkc3RfYWRkciA+PiAzOworCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MTQpOworCisJaWYgKG9wICE9IFZJQV9CSVRCTFRfRklMTCkgeworCQlpZiAoc3JjX3ggJiAob3AgPT0gVklBX0JJVEJMVF9NT05PID8gMHhGRkZGODAwMCA6IDB4RkZGRkYwMDApCisJCQl8fCBzcmNfeSAmIDB4RkZGRkYwMDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBVbnN1cHBvcnRlZCBzb3VyY2UgIgorCQkJCSJ4L3kgJWQgJWRcbiIsIHNyY194LCBzcmNfeSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0bXAgPSBzcmNfeCB8IChzcmNfeSA8PCAxNik7CisJCXdyaXRlbCh0bXAsIGVuZ2luZSArIDB4MTgpOworCisJCXRtcCA9IHNyY19tZW0gPyAwIDogc3JjX2FkZHI7CisJCWlmIChkc3RfYWRkciAmIDB4RTAwMDAwMDcpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImh3X2JpdGJsdF8yOiBVbnN1cHBvcnRlZCBzb3VyY2UgIgorCQkJCSJhZGRyZXNzICVYXG4iLCB0bXApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdG1wID4+PSAzOworCQl3cml0ZWwodG1wLCBlbmdpbmUgKyAweDFDKTsKKwl9CisKKwlpZiAob3AgIT0gVklBX0JJVEJMVF9DT0xPUikKKwkJd3JpdGVsKGZnX2NvbG9yLCBlbmdpbmUgKyAweDRDKTsKKworCWlmIChvcCA9PSBWSUFfQklUQkxUX01PTk8pCisJCXdyaXRlbChiZ19jb2xvciwgZW5naW5lICsgMHg1MCk7CisKKwlpZiAob3AgPT0gVklBX0JJVEJMVF9GSUxMKQorCQlnZV9jbWQgfD0gZmlsbF9yb3AgPDwgMjQgfCAweDAwMDAyMDAwIHwgMHgwMDAwMDAwMTsKKwllbHNlIHsKKwkJZ2VfY21kIHw9IDB4Q0MwMDAwMDA7IC8qIFJPUD1TUkNDT1BZICovCisJCWlmIChzcmNfbWVtKQorCQkJZ2VfY21kIHw9IDB4MDAwMDAwNDA7CisJCWlmIChvcCA9PSBWSUFfQklUQkxUX01PTk8pCisJCQlnZV9jbWQgfD0gMHgwMDAwMDAwMiB8IDB4MDAwMDAxMDAgfCAweDAwMDIwMDAwOworCQllbHNlCisJCQlnZV9jbWQgfD0gMHgwMDAwMDAwMTsKKwl9CisJd3JpdGVsKGdlX2NtZCwgZW5naW5lKTsKKworCWlmIChvcCA9PSBWSUFfQklUQkxUX0ZJTEwgfHwgIXNyY19tZW0pCisJCXJldHVybiAwOworCisJdG1wID0gKHdpZHRoICogaGVpZ2h0ICogKG9wID09IFZJQV9CSVRCTFRfTU9OTyA/IDEgOiAoZHN0X2JwcCA+PiAzKSkgKworCQkzKSA+PiAyOworCisJZm9yIChpID0gMDsgaSA8IHRtcDsgaSsrKQorCQl3cml0ZWwoc3JjX21lbVtpXSwgZW5naW5lICsgVklBX01NSU9fQkxUQkFTRSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZpYWZiX2luaXRfZW5naW5lKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKKwl2b2lkIF9faW9tZW0gKmVuZ2luZTsKKwl1MzIgdnFfc3RhcnRfYWRkciwgdnFfZW5kX2FkZHIsIHZxX3N0YXJ0X2xvdywgdnFfZW5kX2xvdywgdnFfaGlnaCwKKwkJdnFfbGVuLCBjaGlwX25hbWUgPSB2aWFwYXItPnNoYXJlZC0+Y2hpcF9pbmZvLmdmeF9jaGlwX25hbWU7CisKKwllbmdpbmUgPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CisJdmlhcGFyLT5zaGFyZWQtPmVuZ2luZV9tbWlvID0gZW5naW5lOworCWlmICghZW5naW5lKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpYWZiX2luaXRfYWNjZWw6IGlvcmVtYXAgZmFpbGVkLCAiCisJCQkiaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3dpdGNoIChjaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwljYXNlIFVOSUNIUk9NRV9LODAwOgorCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCWNhc2UgVU5JQ0hST01FX0NONzUwOgorCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl2aWFwYXItPnNoYXJlZC0+aHdfYml0Ymx0ID0gaHdfYml0Ymx0XzE7CisJCWJyZWFrOworCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCWNhc2UgVU5JQ0hST01FX1ZYODU1OgorCQl2aWFwYXItPnNoYXJlZC0+aHdfYml0Ymx0ID0gaHdfYml0Ymx0XzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpYXBhci0+c2hhcmVkLT5od19iaXRibHQgPSBOVUxMOworCX0KKworCXZpYXBhci0+ZmJtZW1fZnJlZSAtPSBDVVJTT1JfU0laRTsKKwl2aWFwYXItPnNoYXJlZC0+Y3Vyc29yX3ZyYW1fYWRkciA9IHZpYXBhci0+ZmJtZW1fZnJlZTsKKwl2aWFwYXItPmZibWVtX3VzZWQgKz0gQ1VSU09SX1NJWkU7CisKKwl2aWFwYXItPmZibWVtX2ZyZWUgLT0gVlFfU0laRTsKKwl2aWFwYXItPnNoYXJlZC0+dnFfdnJhbV9hZGRyID0gdmlhcGFyLT5mYm1lbV9mcmVlOworCXZpYXBhci0+ZmJtZW1fdXNlZCArPSBWUV9TSVpFOworCisJLyogSW5pdCBBR1AgYW5kIFZRIHJlZ3MgKi8KKwlzd2l0Y2ggKGNoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXdyaXRlbCgweDAwMTAwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOworCQl3cml0ZWwoMHg2ODBBMDAwMCwgZW5naW5lICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwMjAwMDAwMCwgZW5naW5lICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXdyaXRlbCgweDAwMTAwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TRVQpOworCQl3cml0ZWwoMHgwMDAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHgwMDMzMzAwNCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MDAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MTAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MjAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MzAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2NDAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg3RDAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCisJCXdyaXRlbCgweEZFMDIwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TRVQpOworCQl3cml0ZWwoMHgwMDAwMDAwMCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOwogCQlicmVhazsKIAl9CiAKLQkvKiBTZXQgQlBQIGFuZCBQaXRjaCAqLwotCXdyaXRlbChkd0dFTW9kZSwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VNT0RFKTsKLX0KKwkvKiBFbmFibGUgVlEgKi8KKwl2cV9zdGFydF9hZGRyID0gdmlhcGFyLT5zaGFyZWQtPnZxX3ZyYW1fYWRkcjsKKwl2cV9lbmRfYWRkciA9IHZpYXBhci0+c2hhcmVkLT52cV92cmFtX2FkZHIgKyBWUV9TSVpFIC0gMTsKIAotdm9pZCB2aWFmYl9od19jdXJzb3JfaW5pdCh2b2lkKQoteworCXZxX3N0YXJ0X2xvdyA9IDB4NTAwMDAwMDAgfCAodnFfc3RhcnRfYWRkciAmIDB4RkZGRkZGKTsKKwl2cV9lbmRfbG93ID0gMHg1MTAwMDAwMCB8ICh2cV9lbmRfYWRkciAmIDB4RkZGRkZGKTsKKwl2cV9oaWdoID0gMHg1MjAwMDAwMCB8ICgodnFfc3RhcnRfYWRkciAmIDB4RkYwMDAwMDApID4+IDI0KSB8CisJCSgodnFfZW5kX2FkZHIgJiAweEZGMDAwMDAwKSA+PiAxNik7CisJdnFfbGVuID0gMHg1MzAwMDAwMCB8IChWUV9TSVpFID4+IDMpOworCisJc3dpdGNoIChjaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl2cV9zdGFydF9sb3cgfD0gMHgyMDAwMDAwMDsKKwkJdnFfZW5kX2xvdyB8PSAweDIwMDAwMDAwOworCQl2cV9oaWdoIHw9IDB4MjAwMDAwMDA7CisJCXZxX2xlbiB8PSAweDIwMDAwMDAwOworCisJCXdyaXRlbCgweDAwMTAwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOworCQl3cml0ZWwodnFfaGlnaCwgZW5naW5lICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQl3cml0ZWwodnFfc3RhcnRfbG93LCBlbmdpbmUgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCXdyaXRlbCh2cV9lbmRfbG93LCBlbmdpbmUgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCXdyaXRlbCh2cV9sZW4sIGVuZ2luZSArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NzQzMDEwMDEsIGVuZ2luZSArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4MDAwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3JpdGVsKDB4MDBGRTAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNFVCk7CisJCXdyaXRlbCgweDA4MDAwM0ZFLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDBBMDAwMjdDLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDBCMDAwMjYwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDBDMDAwMjc0LCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDBEMDAwMjY0LCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDBFMDAwMDAwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDBGMDAwMDIwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDEwMDAwMjdFLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDExMDAwMkZFLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDIwMEYwMDYwLCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisKKwkJd3JpdGVsKDB4MDAwMDAwMDYsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NDAwMDhDMEYsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NDQwMDAwMDAsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NDUwODBDMDQsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NDY4MDA0MDgsIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKworCQl3cml0ZWwodnFfaGlnaCwgZW5naW5lICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwodnFfc3RhcnRfbG93LCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCh2cV9lbmRfbG93LCBlbmdpbmUgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCh2cV9sZW4sIGVuZ2luZSArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJYnJlYWs7CisJfQorCiAJLyogU2V0IEN1cnNvciBJbWFnZSBCYXNlIEFkZHJlc3MgKi8KLQl3cml0ZWwodmlhcGFyaW5mby0+Y3Vyc29yX3N0YXJ0LAotCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfTU9ERSk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX1BPUyk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX09SRyk7Ci0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX0JHKTsKLQl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfRkcpOworCXdyaXRlbCh2aWFwYXItPnNoYXJlZC0+Y3Vyc29yX3ZyYW1fYWRkciwgZW5naW5lICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJd3JpdGVsKDB4MCwgZW5naW5lICsgVklBX1JFR19DVVJTT1JfUE9TKTsKKwl3cml0ZWwoMHgwLCBlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9PUkcpOworCXdyaXRlbCgweDAsIGVuZ2luZSArIFZJQV9SRUdfQ1VSU09SX0JHKTsKKwl3cml0ZWwoMHgwLCBlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9GRyk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgdmlhZmJfc2hvd19od19jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBTdGF0dXMpCiB7Ci0JdTMyIHRlbXA7Ci0JdTMyIGlnYV9wYXRoID0gKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5pZ2FfcGF0aDsKKwlzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXIgPSBpbmZvLT5wYXI7CisJdTMyIHRlbXAsIGlnYV9wYXRoID0gdmlhcGFyLT5pZ2FfcGF0aDsKIAotCXRlbXAgPSByZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJdGVtcCA9IHJlYWRsKHZpYXBhci0+c2hhcmVkLT5lbmdpbmVfbW1pbyArIFZJQV9SRUdfQ1VSU09SX01PREUpOwogCXN3aXRjaCAoU3RhdHVzKSB7CiAJY2FzZSBIV19DdXJzb3JfT046CiAJCXRlbXAgfD0gMHgxOwpAQCAtMjU5LDI1ICs0NjAsMjcgQEAKIAlkZWZhdWx0OgogCQl0ZW1wICY9IDB4N0ZGRkZGRkY7CiAJfQotCXdyaXRlbCh0ZW1wLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJd3JpdGVsKHRlbXAsIHZpYXBhci0+c2hhcmVkLT5lbmdpbmVfbW1pbyArIFZJQV9SRUdfQ1VSU09SX01PREUpOwogfQogCi1pbnQgdmlhZmJfd2FpdF9lbmdpbmVfaWRsZSh2b2lkKQordm9pZCB2aWFmYl93YWl0X2VuZ2luZV9pZGxlKHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKIAlpbnQgbG9vcCA9IDA7CiAKLQl3aGlsZSAoIShyZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TVEFUVVMpICYKKwl3aGlsZSAoIShyZWFkbCh2aWFwYXItPnNoYXJlZC0+ZW5naW5lX21taW8gKyBWSUFfUkVHX1NUQVRVUykgJgogCQkJVklBX1ZSX1FVRVVFX0JVU1kpICYmIChsb29wIDwgTUFYTE9PUCkpIHsKIAkJbG9vcCsrOwogCQljcHVfcmVsYXgoKTsKIAl9CiAKLQl3aGlsZSAoKHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NUQVRVUykgJgorCXdoaWxlICgocmVhZGwodmlhcGFyLT5zaGFyZWQtPmVuZ2luZV9tbWlvICsgVklBX1JFR19TVEFUVVMpICYKIAkJICAgIChWSUFfQ01EX1JHVFJfQlVTWSB8IFZJQV8yRF9FTkdfQlVTWSB8IFZJQV8zRF9FTkdfQlVTWSkpICYmCiAJCSAgICAobG9vcCA8IE1BWExPT1ApKSB7CiAJCWxvb3ArKzsKIAkJY3B1X3JlbGF4KCk7CiAJfQogCi0JcmV0dXJuIGxvb3AgPj0gTUFYTE9PUDsKKwlpZiAobG9vcCA+PSBNQVhMT09QKQorCQlwcmludGsoS0VSTl9FUlIgInZpYWZiX3dhaXRfZW5naW5lX2lkbGU6IG5vdCBzeW5jaW5nXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5oCmluZGV4IDI5YmY4NTQuLjYxNWM4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvYWNjZWwuaApAQCAtMTU5LDExICsxNTksMTIgQEAKIAogI2RlZmluZSBNQVhMT09QICAgICAgICAgICAgICAgICAweEZGRkZGRgogCi12b2lkIHZpYWZiX2luaXRfYWNjZWwodm9pZCk7Ci12b2lkIHZpYWZiX2luaXRfMmRfZW5naW5lKHZvaWQpOwotdm9pZCBzZXRfMmRfY29sb3JfZGVwdGgoaW50KTsKLXZvaWQgdmlhZmJfaHdfY3Vyc29yX2luaXQodm9pZCk7Ci12b2lkIHZpYWZiX3Nob3dfaHdfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgU3RhdHVzKTsgaW50Ci12aWFmYl93YWl0X2VuZ2luZV9pZGxlKHZvaWQpOyB2b2lkIHZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aChpbnQgYnBwKTsKKyNkZWZpbmUgVklBX0JJVEJMVF9DT0xPUgkxCisjZGVmaW5lIFZJQV9CSVRCTFRfTU9OTwkJMgorI2RlZmluZSBWSUFfQklUQkxUX0ZJTEwJCTMKKworaW50IHZpYWZiX2luaXRfZW5naW5lKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK3ZvaWQgdmlhZmJfc2hvd19od19jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBTdGF0dXMpOwordm9pZCB2aWFmYl93YWl0X2VuZ2luZV9pZGxlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAogI2VuZGlmIC8qIF9fQUNDRUxfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKaW5kZXggZGRlOTVlZC4uNDc0ZjQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaApAQCAtNjgsNiArNjgsOSBAQAogI2RlZmluZSAgICAgVU5JQ0hST01FX1ZYODAwICAgICAgICAgMTEKICNkZWZpbmUgICAgIFVOSUNIUk9NRV9WWDgwMF9ESUQgICAgIDB4MTEyMgogCisjZGVmaW5lICAgICBVTklDSFJPTUVfVlg4NTUgICAgICAgICAxMgorI2RlZmluZSAgICAgVU5JQ0hST01FX1ZYODU1X0RJRCAgICAgMHg1MTIyCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlZmluaXRpb24gVE1EUyBUcmFzbWl0dGVyIEluZm9ybWF0aW9uICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyMiw3ICsxMjUsNiBAQAogc3RydWN0IGNoaXBfaW5mb3JtYXRpb24gewogCWludCBnZnhfY2hpcF9uYW1lOwogCWludCBnZnhfY2hpcF9yZXZpc2lvbjsKLQlpbnQgY2hpcF9vbl9zbG90OwogCXN0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24gdG1kc19jaGlwX2luZm87CiAJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiBsdmRzX2NoaXBfaW5mbzsKIAlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uIGx2ZHNfY2hpcF9pbmZvMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmMKaW5kZXggZDY5NjU0NC4uYzVjMzJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvZHZpLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiBzdGF0aWMgdm9pZCB0bWRzX3JlZ2lzdGVyX3dyaXRlKGludCBpbmRleCwgdTggZGF0YSkKIHsKLQl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPQorCXZpYXBhcmluZm8tPnNoYXJlZC0+aTJjX3N0dWZmLmkyY19wb3J0ID0KIAkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydDsKIAogCXZpYWZiX2kyY193cml0ZWJ5dGUodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KQEAgLTE3Miw3ICsxNzIsNyBAQAogewogCXU4IGRhdGE7CiAKLQl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPQorCXZpYXBhcmluZm8tPnNoYXJlZC0+aTJjX3N0dWZmLmkyY19wb3J0ID0KIAkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydDsKIAl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgogCSAgICB0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciwKQEAgLTE4Miw3ICsxODIsNyBAQAogCiBzdGF0aWMgaW50IHRtZHNfcmVnaXN0ZXJfcmVhZF9ieXRlcyhpbnQgaW5kZXgsIHU4ICpidWZmLCBpbnQgYnVmZl9sZW4pCiB7Ci0JdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0KKwl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9CiAJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQ7CiAJdmlhZmJfaTJjX3JlYWRieXRlcygodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCiAJCQkgdG1kc19jaGlwX3NsYXZlX2FkZHIsICh1OCkgaW5kZXgsIGJ1ZmYsIGJ1ZmZfbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmMKaW5kZXggNDY4YmUyNC4uYjY3NWNkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmMKQEAgLTMyLDcgKzMyLDYgQEAKIGludCB2aWFmYl9sY2RfbW9kZSA9IExDRF9PUEVOTERJOwogaW50IHZpYWZiX2JwcCA9IDMyOwogaW50IHZpYWZiX2JwcDEgPSAzMjsKLWludCB2aWFmYl9hY2NlbCA9IDE7CiBpbnQgdmlhZmJfQ1JUX09OID0gMTsKIGludCB2aWFmYl9EVklfT047CiBpbnQgdmlhZmJfTENEX09OIDsKQEAgLTQ2LDEzICs0NSwxMSBAQAogdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CiBpbnQgdmlhZmJfc2Vjb25kX3NpemU7CiBpbnQgdmlhZmJfcHJpbWFyeV9kZXYgPSBOb25lX0RldmljZTsKLXZvaWQgX19pb21lbSAqdmlhZmJfRkJfTU07CiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3hyZXMgPSA2NDA7CiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXMgPSA0ODA7CiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOwogaW50IHZpYWZiX2xjZF9wYW5lbF9pZCA9IExDRF9QQU5FTF9JRF9NQVhJTVVNICsgMTsKLXN0cnVjdCBmYl9jdXJzb3IgdmlhY3Vyc29yOwogc3RydWN0IGZiX2luZm8gKnZpYWZiaW5mbzsKIHN0cnVjdCBmYl9pbmZvICp2aWFmYmluZm8xOwogc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKaW5kZXggNzU0M2Q1Zi4uZDY5ZDBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKQEAgLTc3LDggKzc3LDYgQEAKIGV4dGVybiBpbnQgdmlhZmJfaG90cGx1Z19icHA7CiBleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfcmVmcmVzaDsKIGV4dGVybiBpbnQgdmlhZmJfcHJpbWFyeV9kZXY7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICp2aWFmYl9GQl9NTTsKLWV4dGVybiBzdHJ1Y3QgZmJfY3Vyc29yIHZpYWN1cnNvcjsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlczsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jIGIvZHJpdmVycy92aWRlby92aWEvaHcuYwppbmRleCBjODk2MDAwLi4zZTA4M2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKQEAgLTIxLDEyNSArMjEsMTQzIEBACiAKICNpbmNsdWRlICJnbG9iYWwuaCIKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkX2luZm8gcGNpaWRsaXN0W10gPSB7Ci0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfQ0xFMjY2X0RJRCwgVU5JQ0hST01FX0NMRTI2Nn0sCi0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfUE04MDBfRElELCBVTklDSFJPTUVfUE04MDB9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s0MDBfRElELCBVTklDSFJPTUVfSzQwMH0sCi0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfSzgwMF9ESUQsIFVOSUNIUk9NRV9LODAwfSwKLQl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9DTjcwMF9ESUQsIFVOSUNIUk9NRV9DTjcwMH0sCi0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfUDRNODkwX0RJRCwgVU5JQ0hST01FX1A0TTg5MH0sCi0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfSzhNODkwX0RJRCwgVU5JQ0hST01FX0s4TTg5MH0sCi0Je1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfQ1g3MDBfRElELCBVTklDSFJPTUVfQ1g3MDB9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1A0TTkwMF9ESUQsIFVOSUNIUk9NRV9QNE05MDB9LAotCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NONzUwX0RJRCwgVU5JQ0hST01FX0NONzUwfSwKLQl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9WWDgwMF9ESUQsIFVOSUNIUk9NRV9WWDgwMH0sCi0JezAsIDAsIDB9Ci19OwotCi1zdHJ1Y3Qgb2Zmc2V0IG9mZnNldF9yZWcgPSB7Ci0JLyogSUdBMSBPZmZzZXQgUmVnaXN0ZXIgKi8KLQl7SUdBMV9PRkZTRVRfUkVHX05VTSwge3tDUjEzLCAwLCA3fSwge0NSMzUsIDUsIDd9IH0gfSwKLQkvKiBJR0EyIE9mZnNldCBSZWdpc3RlciAqLwotCXtJR0EyX09GRlNFVF9SRUdfTlVNLCB7e0NSNjYsIDAsIDd9LCB7Q1I2NywgMCwgMX0gfSB9Ci19OwotCiBzdGF0aWMgc3RydWN0IHBsbF9tYXAgcGxsX3ZhbHVlW10gPSB7Ci0Je0NMS18yNV8xNzVNLCBDTEUyNjZfUExMXzI1XzE3NU0sIEs4MDBfUExMXzI1XzE3NU0sIENYNzAwXzI1XzE3NU19LAotCXtDTEtfMjlfNTgxTSwgQ0xFMjY2X1BMTF8yOV81ODFNLCBLODAwX1BMTF8yOV81ODFNLCBDWDcwMF8yOV81ODFNfSwKLQl7Q0xLXzI2Xzg4ME0sIENMRTI2Nl9QTExfMjZfODgwTSwgSzgwMF9QTExfMjZfODgwTSwgQ1g3MDBfMjZfODgwTX0sCi0Je0NMS18zMV80OTBNLCBDTEUyNjZfUExMXzMxXzQ5ME0sIEs4MDBfUExMXzMxXzQ5ME0sIENYNzAwXzMxXzQ5ME19LAotCXtDTEtfMzFfNTAwTSwgQ0xFMjY2X1BMTF8zMV81MDBNLCBLODAwX1BMTF8zMV81MDBNLCBDWDcwMF8zMV81MDBNfSwKLQl7Q0xLXzMxXzcyOE0sIENMRTI2Nl9QTExfMzFfNzI4TSwgSzgwMF9QTExfMzFfNzI4TSwgQ1g3MDBfMzFfNzI4TX0sCi0Je0NMS18zMl82NjhNLCBDTEUyNjZfUExMXzMyXzY2OE0sIEs4MDBfUExMXzMyXzY2OE0sIENYNzAwXzMyXzY2OE19LAotCXtDTEtfMzZfMDAwTSwgQ0xFMjY2X1BMTF8zNl8wMDBNLCBLODAwX1BMTF8zNl8wMDBNLCBDWDcwMF8zNl8wMDBNfSwKLQl7Q0xLXzQwXzAwME0sIENMRTI2Nl9QTExfNDBfMDAwTSwgSzgwMF9QTExfNDBfMDAwTSwgQ1g3MDBfNDBfMDAwTX0sCi0Je0NMS180MV8yOTFNLCBDTEUyNjZfUExMXzQxXzI5MU0sIEs4MDBfUExMXzQxXzI5MU0sIENYNzAwXzQxXzI5MU19LAotCXtDTEtfNDNfMTYzTSwgQ0xFMjY2X1BMTF80M18xNjNNLCBLODAwX1BMTF80M18xNjNNLCBDWDcwMF80M18xNjNNfSwKLQl7Q0xLXzQ1XzI1ME0sIENMRTI2Nl9QTExfNDVfMjUwTSwgSzgwMF9QTExfNDVfMjUwTSwgQ1g3MDBfNDVfMjUwTX0sCi0Je0NMS180Nl8wMDBNLCBDTEUyNjZfUExMXzQ2XzAwME0sIEs4MDBfUExMXzQ2XzAwME0sIENYNzAwXzQ2XzAwME19LAotCXtDTEtfNDZfOTk2TSwgQ0xFMjY2X1BMTF80Nl85OTZNLCBLODAwX1BMTF80Nl85OTZNLCBDWDcwMF80Nl85OTZNfSwKLQl7Q0xLXzQ4XzAwME0sIENMRTI2Nl9QTExfNDhfMDAwTSwgSzgwMF9QTExfNDhfMDAwTSwgQ1g3MDBfNDhfMDAwTX0sCi0Je0NMS180OF84NzVNLCBDTEUyNjZfUExMXzQ4Xzg3NU0sIEs4MDBfUExMXzQ4Xzg3NU0sIENYNzAwXzQ4Xzg3NU19LAotCXtDTEtfNDlfNTAwTSwgQ0xFMjY2X1BMTF80OV81MDBNLCBLODAwX1BMTF80OV81MDBNLCBDWDcwMF80OV81MDBNfSwKLQl7Q0xLXzUyXzQwNk0sIENMRTI2Nl9QTExfNTJfNDA2TSwgSzgwMF9QTExfNTJfNDA2TSwgQ1g3MDBfNTJfNDA2TX0sCi0Je0NMS181Ml85NzdNLCBDTEUyNjZfUExMXzUyXzk3N00sIEs4MDBfUExMXzUyXzk3N00sIENYNzAwXzUyXzk3N019LAotCXtDTEtfNTZfMjUwTSwgQ0xFMjY2X1BMTF81Nl8yNTBNLCBLODAwX1BMTF81Nl8yNTBNLCBDWDcwMF81Nl8yNTBNfSwKLQl7Q0xLXzYwXzQ2Nk0sIENMRTI2Nl9QTExfNjBfNDY2TSwgSzgwMF9QTExfNjBfNDY2TSwgQ1g3MDBfNjBfNDY2TX0sCi0Je0NMS182MV81MDBNLCBDTEUyNjZfUExMXzYxXzUwME0sIEs4MDBfUExMXzYxXzUwME0sIENYNzAwXzYxXzUwME19LAotCXtDTEtfNjVfMDAwTSwgQ0xFMjY2X1BMTF82NV8wMDBNLCBLODAwX1BMTF82NV8wMDBNLCBDWDcwMF82NV8wMDBNfSwKLQl7Q0xLXzY1XzE3OE0sIENMRTI2Nl9QTExfNjVfMTc4TSwgSzgwMF9QTExfNjVfMTc4TSwgQ1g3MDBfNjVfMTc4TX0sCi0Je0NMS182Nl83NTBNLCBDTEUyNjZfUExMXzY2Xzc1ME0sIEs4MDBfUExMXzY2Xzc1ME0sIENYNzAwXzY2Xzc1ME19LAotCXtDTEtfNjhfMTc5TSwgQ0xFMjY2X1BMTF82OF8xNzlNLCBLODAwX1BMTF82OF8xNzlNLCBDWDcwMF82OF8xNzlNfSwKLQl7Q0xLXzY5XzkyNE0sIENMRTI2Nl9QTExfNjlfOTI0TSwgSzgwMF9QTExfNjlfOTI0TSwgQ1g3MDBfNjlfOTI0TX0sCi0Je0NMS183MF8xNTlNLCBDTEUyNjZfUExMXzcwXzE1OU0sIEs4MDBfUExMXzcwXzE1OU0sIENYNzAwXzcwXzE1OU19LAotCXtDTEtfNzJfMDAwTSwgQ0xFMjY2X1BMTF83Ml8wMDBNLCBLODAwX1BMTF83Ml8wMDBNLCBDWDcwMF83Ml8wMDBNfSwKLQl7Q0xLXzc4Xzc1ME0sIENMRTI2Nl9QTExfNzhfNzUwTSwgSzgwMF9QTExfNzhfNzUwTSwgQ1g3MDBfNzhfNzUwTX0sCi0Je0NMS184MF8xMzZNLCBDTEUyNjZfUExMXzgwXzEzNk0sIEs4MDBfUExMXzgwXzEzNk0sIENYNzAwXzgwXzEzNk19LAotCXtDTEtfODNfMzc1TSwgQ0xFMjY2X1BMTF84M18zNzVNLCBLODAwX1BMTF84M18zNzVNLCBDWDcwMF84M18zNzVNfSwKLQl7Q0xLXzgzXzk1ME0sIENMRTI2Nl9QTExfODNfOTUwTSwgSzgwMF9QTExfODNfOTUwTSwgQ1g3MDBfODNfOTUwTX0sCi0Je0NMS184NF83NTBNLCBDTEUyNjZfUExMXzg0Xzc1ME0sIEs4MDBfUExMXzg0Xzc1ME0sIENYNzAwXzg0Xzc1ME19LAotCXtDTEtfODVfODYwTSwgQ0xFMjY2X1BMTF84NV84NjBNLCBLODAwX1BMTF84NV84NjBNLCBDWDcwMF84NV84NjBNfSwKLQl7Q0xLXzg4Xzc1ME0sIENMRTI2Nl9QTExfODhfNzUwTSwgSzgwMF9QTExfODhfNzUwTSwgQ1g3MDBfODhfNzUwTX0sCi0Je0NMS185NF81MDBNLCBDTEUyNjZfUExMXzk0XzUwME0sIEs4MDBfUExMXzk0XzUwME0sIENYNzAwXzk0XzUwME19LAotCXtDTEtfOTdfNzUwTSwgQ0xFMjY2X1BMTF85N183NTBNLCBLODAwX1BMTF85N183NTBNLCBDWDcwMF85N183NTBNfSwKKwl7Q0xLXzI1XzE3NU0sIENMRTI2Nl9QTExfMjVfMTc1TSwgSzgwMF9QTExfMjVfMTc1TSwKKwkgQ1g3MDBfMjVfMTc1TSwgVlg4NTVfMjVfMTc1TX0sCisJe0NMS18yOV81ODFNLCBDTEUyNjZfUExMXzI5XzU4MU0sIEs4MDBfUExMXzI5XzU4MU0sCisJIENYNzAwXzI5XzU4MU0sIFZYODU1XzI5XzU4MU19LAorCXtDTEtfMjZfODgwTSwgQ0xFMjY2X1BMTF8yNl84ODBNLCBLODAwX1BMTF8yNl84ODBNLAorCSBDWDcwMF8yNl84ODBNLCBWWDg1NV8yNl84ODBNfSwKKwl7Q0xLXzMxXzQ5ME0sIENMRTI2Nl9QTExfMzFfNDkwTSwgSzgwMF9QTExfMzFfNDkwTSwKKwkgQ1g3MDBfMzFfNDkwTSwgVlg4NTVfMzFfNDkwTX0sCisJe0NMS18zMV81MDBNLCBDTEUyNjZfUExMXzMxXzUwME0sIEs4MDBfUExMXzMxXzUwME0sCisJIENYNzAwXzMxXzUwME0sIFZYODU1XzMxXzUwME19LAorCXtDTEtfMzFfNzI4TSwgQ0xFMjY2X1BMTF8zMV83MjhNLCBLODAwX1BMTF8zMV83MjhNLAorCSBDWDcwMF8zMV83MjhNLCBWWDg1NV8zMV83MjhNfSwKKwl7Q0xLXzMyXzY2OE0sIENMRTI2Nl9QTExfMzJfNjY4TSwgSzgwMF9QTExfMzJfNjY4TSwKKwkgQ1g3MDBfMzJfNjY4TSwgVlg4NTVfMzJfNjY4TX0sCisJe0NMS18zNl8wMDBNLCBDTEUyNjZfUExMXzM2XzAwME0sIEs4MDBfUExMXzM2XzAwME0sCisJIENYNzAwXzM2XzAwME0sIFZYODU1XzM2XzAwME19LAorCXtDTEtfNDBfMDAwTSwgQ0xFMjY2X1BMTF80MF8wMDBNLCBLODAwX1BMTF80MF8wMDBNLAorCSBDWDcwMF80MF8wMDBNLCBWWDg1NV80MF8wMDBNfSwKKwl7Q0xLXzQxXzI5MU0sIENMRTI2Nl9QTExfNDFfMjkxTSwgSzgwMF9QTExfNDFfMjkxTSwKKwkgQ1g3MDBfNDFfMjkxTSwgVlg4NTVfNDFfMjkxTX0sCisJe0NMS180M18xNjNNLCBDTEUyNjZfUExMXzQzXzE2M00sIEs4MDBfUExMXzQzXzE2M00sCisJIENYNzAwXzQzXzE2M00sIFZYODU1XzQzXzE2M019LAorCXtDTEtfNDVfMjUwTSwgQ0xFMjY2X1BMTF80NV8yNTBNLCBLODAwX1BMTF80NV8yNTBNLAorCSBDWDcwMF80NV8yNTBNLCBWWDg1NV80NV8yNTBNfSwKKwl7Q0xLXzQ2XzAwME0sIENMRTI2Nl9QTExfNDZfMDAwTSwgSzgwMF9QTExfNDZfMDAwTSwKKwkgQ1g3MDBfNDZfMDAwTSwgVlg4NTVfNDZfMDAwTX0sCisJe0NMS180Nl85OTZNLCBDTEUyNjZfUExMXzQ2Xzk5Nk0sIEs4MDBfUExMXzQ2Xzk5Nk0sCisJIENYNzAwXzQ2Xzk5Nk0sIFZYODU1XzQ2Xzk5Nk19LAorCXtDTEtfNDhfMDAwTSwgQ0xFMjY2X1BMTF80OF8wMDBNLCBLODAwX1BMTF80OF8wMDBNLAorCSBDWDcwMF80OF8wMDBNLCBWWDg1NV80OF8wMDBNfSwKKwl7Q0xLXzQ4Xzg3NU0sIENMRTI2Nl9QTExfNDhfODc1TSwgSzgwMF9QTExfNDhfODc1TSwKKwkgQ1g3MDBfNDhfODc1TSwgVlg4NTVfNDhfODc1TX0sCisJe0NMS180OV81MDBNLCBDTEUyNjZfUExMXzQ5XzUwME0sIEs4MDBfUExMXzQ5XzUwME0sCisJIENYNzAwXzQ5XzUwME0sIFZYODU1XzQ5XzUwME19LAorCXtDTEtfNTJfNDA2TSwgQ0xFMjY2X1BMTF81Ml80MDZNLCBLODAwX1BMTF81Ml80MDZNLAorCSBDWDcwMF81Ml80MDZNLCBWWDg1NV81Ml80MDZNfSwKKwl7Q0xLXzUyXzk3N00sIENMRTI2Nl9QTExfNTJfOTc3TSwgSzgwMF9QTExfNTJfOTc3TSwKKwkgQ1g3MDBfNTJfOTc3TSwJVlg4NTVfNTJfOTc3TX0sCisJe0NMS181Nl8yNTBNLCBDTEUyNjZfUExMXzU2XzI1ME0sIEs4MDBfUExMXzU2XzI1ME0sCisJIENYNzAwXzU2XzI1ME0sIFZYODU1XzU2XzI1ME19LAorCXtDTEtfNjBfNDY2TSwgQ0xFMjY2X1BMTF82MF80NjZNLCBLODAwX1BMTF82MF80NjZNLAorCSBDWDcwMF82MF80NjZNLCBWWDg1NV82MF80NjZNfSwKKwl7Q0xLXzYxXzUwME0sIENMRTI2Nl9QTExfNjFfNTAwTSwgSzgwMF9QTExfNjFfNTAwTSwKKwkgQ1g3MDBfNjFfNTAwTSwgVlg4NTVfNjFfNTAwTX0sCisJe0NMS182NV8wMDBNLCBDTEUyNjZfUExMXzY1XzAwME0sIEs4MDBfUExMXzY1XzAwME0sCisJIENYNzAwXzY1XzAwME0sIFZYODU1XzY1XzAwME19LAorCXtDTEtfNjVfMTc4TSwgQ0xFMjY2X1BMTF82NV8xNzhNLCBLODAwX1BMTF82NV8xNzhNLAorCSBDWDcwMF82NV8xNzhNLCBWWDg1NV82NV8xNzhNfSwKKwl7Q0xLXzY2Xzc1ME0sIENMRTI2Nl9QTExfNjZfNzUwTSwgSzgwMF9QTExfNjZfNzUwTSwKKwkgQ1g3MDBfNjZfNzUwTSwgVlg4NTVfNjZfNzUwTX0sCisJe0NMS182OF8xNzlNLCBDTEUyNjZfUExMXzY4XzE3OU0sIEs4MDBfUExMXzY4XzE3OU0sCisJIENYNzAwXzY4XzE3OU0sIFZYODU1XzY4XzE3OU19LAorCXtDTEtfNjlfOTI0TSwgQ0xFMjY2X1BMTF82OV85MjRNLCBLODAwX1BMTF82OV85MjRNLAorCSBDWDcwMF82OV85MjRNLCBWWDg1NV82OV85MjRNfSwKKwl7Q0xLXzcwXzE1OU0sIENMRTI2Nl9QTExfNzBfMTU5TSwgSzgwMF9QTExfNzBfMTU5TSwKKwkgQ1g3MDBfNzBfMTU5TSwgVlg4NTVfNzBfMTU5TX0sCisJe0NMS183Ml8wMDBNLCBDTEUyNjZfUExMXzcyXzAwME0sIEs4MDBfUExMXzcyXzAwME0sCisJIENYNzAwXzcyXzAwME0sIFZYODU1XzcyXzAwME19LAorCXtDTEtfNzhfNzUwTSwgQ0xFMjY2X1BMTF83OF83NTBNLCBLODAwX1BMTF83OF83NTBNLAorCSBDWDcwMF83OF83NTBNLCBWWDg1NV83OF83NTBNfSwKKwl7Q0xLXzgwXzEzNk0sIENMRTI2Nl9QTExfODBfMTM2TSwgSzgwMF9QTExfODBfMTM2TSwKKwkgQ1g3MDBfODBfMTM2TSwgVlg4NTVfODBfMTM2TX0sCisJe0NMS184M18zNzVNLCBDTEUyNjZfUExMXzgzXzM3NU0sIEs4MDBfUExMXzgzXzM3NU0sCisJIENYNzAwXzgzXzM3NU0sIFZYODU1XzgzXzM3NU19LAorCXtDTEtfODNfOTUwTSwgQ0xFMjY2X1BMTF84M185NTBNLCBLODAwX1BMTF84M185NTBNLAorCSBDWDcwMF84M185NTBNLCBWWDg1NV84M185NTBNfSwKKwl7Q0xLXzg0Xzc1ME0sIENMRTI2Nl9QTExfODRfNzUwTSwgSzgwMF9QTExfODRfNzUwTSwKKwkgQ1g3MDBfODRfNzUwTSwgVlg4NTVfODRfNzUwTX0sCisJe0NMS184NV84NjBNLCBDTEUyNjZfUExMXzg1Xzg2ME0sIEs4MDBfUExMXzg1Xzg2ME0sCisJIENYNzAwXzg1Xzg2ME0sIFZYODU1Xzg1Xzg2ME19LAorCXtDTEtfODhfNzUwTSwgQ0xFMjY2X1BMTF84OF83NTBNLCBLODAwX1BMTF84OF83NTBNLAorCSBDWDcwMF84OF83NTBNLCBWWDg1NV84OF83NTBNfSwKKwl7Q0xLXzk0XzUwME0sIENMRTI2Nl9QTExfOTRfNTAwTSwgSzgwMF9QTExfOTRfNTAwTSwKKwkgQ1g3MDBfOTRfNTAwTSwgVlg4NTVfOTRfNTAwTX0sCisJe0NMS185N183NTBNLCBDTEUyNjZfUExMXzk3Xzc1ME0sIEs4MDBfUExMXzk3Xzc1ME0sCisJIENYNzAwXzk3Xzc1ME0sIFZYODU1Xzk3Xzc1ME19LAogCXtDTEtfMTAxXzAwME0sIENMRTI2Nl9QTExfMTAxXzAwME0sIEs4MDBfUExMXzEwMV8wMDBNLAotCSBDWDcwMF8xMDFfMDAwTX0sCisJIENYNzAwXzEwMV8wMDBNLCBWWDg1NV8xMDFfMDAwTX0sCiAJe0NMS18xMDZfNTAwTSwgQ0xFMjY2X1BMTF8xMDZfNTAwTSwgSzgwMF9QTExfMTA2XzUwME0sCi0JIENYNzAwXzEwNl81MDBNfSwKKwkgQ1g3MDBfMTA2XzUwME0sIFZYODU1XzEwNl81MDBNfSwKIAl7Q0xLXzEwOF8wMDBNLCBDTEUyNjZfUExMXzEwOF8wMDBNLCBLODAwX1BMTF8xMDhfMDAwTSwKLQkgQ1g3MDBfMTA4XzAwME19LAorCSBDWDcwMF8xMDhfMDAwTSwgVlg4NTVfMTA4XzAwME19LAogCXtDTEtfMTEzXzMwOU0sIENMRTI2Nl9QTExfMTEzXzMwOU0sIEs4MDBfUExMXzExM18zMDlNLAotCSBDWDcwMF8xMTNfMzA5TX0sCisJIENYNzAwXzExM18zMDlNLCBWWDg1NV8xMTNfMzA5TX0sCiAJe0NMS18xMThfODQwTSwgQ0xFMjY2X1BMTF8xMThfODQwTSwgSzgwMF9QTExfMTE4Xzg0ME0sCi0JIENYNzAwXzExOF84NDBNfSwKKwkgQ1g3MDBfMTE4Xzg0ME0sIFZYODU1XzExOF84NDBNfSwKIAl7Q0xLXzExOV8wMDBNLCBDTEUyNjZfUExMXzExOV8wMDBNLCBLODAwX1BMTF8xMTlfMDAwTSwKLQkgQ1g3MDBfMTE5XzAwME19LAorCSBDWDcwMF8xMTlfMDAwTSwgVlg4NTVfMTE5XzAwME19LAogCXtDTEtfMTIxXzc1ME0sIENMRTI2Nl9QTExfMTIxXzc1ME0sIEs4MDBfUExMXzEyMV83NTBNLAotCSBDWDcwMF8xMjFfNzUwTX0sCisJIENYNzAwXzEyMV83NTBNLCAwfSwKIAl7Q0xLXzEyNV8xMDRNLCBDTEUyNjZfUExMXzEyNV8xMDRNLCBLODAwX1BMTF8xMjVfMTA0TSwKLQkgQ1g3MDBfMTI1XzEwNE19LAorCSBDWDcwMF8xMjVfMTA0TSwgMH0sCiAJe0NMS18xMzNfMzA4TSwgQ0xFMjY2X1BMTF8xMzNfMzA4TSwgSzgwMF9QTExfMTMzXzMwOE0sCi0JIENYNzAwXzEzM18zMDhNfSwKKwkgQ1g3MDBfMTMzXzMwOE0sIDB9LAogCXtDTEtfMTM1XzAwME0sIENMRTI2Nl9QTExfMTM1XzAwME0sIEs4MDBfUExMXzEzNV8wMDBNLAotCSBDWDcwMF8xMzVfMDAwTX0sCisJIENYNzAwXzEzNV8wMDBNLCBWWDg1NV8xMzVfMDAwTX0sCiAJe0NMS18xMzZfNzAwTSwgQ0xFMjY2X1BMTF8xMzZfNzAwTSwgSzgwMF9QTExfMTM2XzcwME0sCi0JIENYNzAwXzEzNl83MDBNfSwKKwkgQ1g3MDBfMTM2XzcwME0sIFZYODU1XzEzNl83MDBNfSwKIAl7Q0xLXzEzOF80MDBNLCBDTEUyNjZfUExMXzEzOF80MDBNLCBLODAwX1BMTF8xMzhfNDAwTSwKLQkgQ1g3MDBfMTM4XzQwME19LAorCSBDWDcwMF8xMzhfNDAwTSwgVlg4NTVfMTM4XzQwME19LAogCXtDTEtfMTQ2Xzc2ME0sIENMRTI2Nl9QTExfMTQ2Xzc2ME0sIEs4MDBfUExMXzE0Nl83NjBNLAotCSBDWDcwMF8xNDZfNzYwTX0sCisJIENYNzAwXzE0Nl83NjBNLCBWWDg1NV8xNDZfNzYwTX0sCiAJe0NMS18xNTNfOTIwTSwgQ0xFMjY2X1BMTF8xNTNfOTIwTSwgSzgwMF9QTExfMTUzXzkyME0sCi0JIENYNzAwXzE1M185MjBNfSwKKwkgQ1g3MDBfMTUzXzkyME0sIFZYODU1XzE1M185MjBNfSwKIAl7Q0xLXzE1Nl8wMDBNLCBDTEUyNjZfUExMXzE1Nl8wMDBNLCBLODAwX1BMTF8xNTZfMDAwTSwKLQkgQ1g3MDBfMTU2XzAwME19LAorCSBDWDcwMF8xNTZfMDAwTSwgVlg4NTVfMTU2XzAwME19LAogCXtDTEtfMTU3XzUwME0sIENMRTI2Nl9QTExfMTU3XzUwME0sIEs4MDBfUExMXzE1N181MDBNLAotCSBDWDcwMF8xNTdfNTAwTX0sCisJIENYNzAwXzE1N181MDBNLCBWWDg1NV8xNTdfNTAwTX0sCiAJe0NMS18xNjJfMDAwTSwgQ0xFMjY2X1BMTF8xNjJfMDAwTSwgSzgwMF9QTExfMTYyXzAwME0sCi0JIENYNzAwXzE2Ml8wMDBNfSwKKwkgQ1g3MDBfMTYyXzAwME0sIFZYODU1XzE2Ml8wMDBNfSwKIAl7Q0xLXzE4N18wMDBNLCBDTEUyNjZfUExMXzE4N18wMDBNLCBLODAwX1BMTF8xODdfMDAwTSwKLQkgQ1g3MDBfMTg3XzAwME19LAorCSBDWDcwMF8xODdfMDAwTSwgVlg4NTVfMTg3XzAwME19LAogCXtDTEtfMTkzXzI5NU0sIENMRTI2Nl9QTExfMTkzXzI5NU0sIEs4MDBfUExMXzE5M18yOTVNLAotCSBDWDcwMF8xOTNfMjk1TX0sCisJIENYNzAwXzE5M18yOTVNLCBWWDg1NV8xOTNfMjk1TX0sCiAJe0NMS18yMDJfNTAwTSwgQ0xFMjY2X1BMTF8yMDJfNTAwTSwgSzgwMF9QTExfMjAyXzUwME0sCi0JIENYNzAwXzIwMl81MDBNfSwKKwkgQ1g3MDBfMjAyXzUwME0sIFZYODU1XzIwMl81MDBNfSwKIAl7Q0xLXzIwNF8wMDBNLCBDTEUyNjZfUExMXzIwNF8wMDBNLCBLODAwX1BMTF8yMDRfMDAwTSwKLQkgQ1g3MDBfMjA0XzAwME19LAorCSBDWDcwMF8yMDRfMDAwTSwgVlg4NTVfMjA0XzAwME19LAogCXtDTEtfMjE4XzUwME0sIENMRTI2Nl9QTExfMjE4XzUwME0sIEs4MDBfUExMXzIxOF81MDBNLAotCSBDWDcwMF8yMThfNTAwTX0sCisJIENYNzAwXzIxOF81MDBNLCBWWDg1NV8yMThfNTAwTX0sCiAJe0NMS18yMzRfMDAwTSwgQ0xFMjY2X1BMTF8yMzRfMDAwTSwgSzgwMF9QTExfMjM0XzAwME0sCi0JIENYNzAwXzIzNF8wMDBNfSwKKwkgQ1g3MDBfMjM0XzAwME0sIFZYODU1XzIzNF8wMDBNfSwKIAl7Q0xLXzI2N18yNTBNLCBDTEUyNjZfUExMXzI2N18yNTBNLCBLODAwX1BMTF8yNjdfMjUwTSwKLQkgQ1g3MDBfMjY3XzI1ME19LAorCSBDWDcwMF8yNjdfMjUwTSwgVlg4NTVfMjY3XzI1ME19LAogCXtDTEtfMjk3XzUwME0sIENMRTI2Nl9QTExfMjk3XzUwME0sIEs4MDBfUExMXzI5N181MDBNLAotCSBDWDcwMF8yOTdfNTAwTX0sCi0Je0NMS183NF80ODFNLCBDTEUyNjZfUExMXzc0XzQ4MU0sIEs4MDBfUExMXzc0XzQ4MU0sIENYNzAwXzc0XzQ4MU19LAorCSBDWDcwMF8yOTdfNTAwTSwgVlg4NTVfMjk3XzUwME19LAorCXtDTEtfNzRfNDgxTSwgQ0xFMjY2X1BMTF83NF80ODFNLCBLODAwX1BMTF83NF80ODFNLAorCSBDWDcwMF83NF80ODFNLCBWWDg1NV83NF80ODFNfSwKIAl7Q0xLXzE3Ml83OThNLCBDTEUyNjZfUExMXzE3Ml83OThNLCBLODAwX1BMTF8xNzJfNzk4TSwKLQkgQ1g3MDBfMTcyXzc5OE19LAorCSBDWDcwMF8xNzJfNzk4TSwgVlg4NTVfMTcyXzc5OE19LAogCXtDTEtfMTIyXzYxNE0sIENMRTI2Nl9QTExfMTIyXzYxNE0sIEs4MDBfUExMXzEyMl82MTRNLAotCSBDWDcwMF8xMjJfNjE0TX0sCi0Je0NMS183NF8yNzBNLCBDTEUyNjZfUExMXzc0XzI3ME0sIEs4MDBfUExMXzc0XzI3ME0sIENYNzAwXzc0XzI3ME19LAorCSBDWDcwMF8xMjJfNjE0TSwgVlg4NTVfMTIyXzYxNE19LAorCXtDTEtfNzRfMjcwTSwgQ0xFMjY2X1BMTF83NF8yNzBNLCBLODAwX1BMTF83NF8yNzBNLAorCSBDWDcwMF83NF8yNzBNLCAwfSwKIAl7Q0xLXzE0OF81MDBNLCBDTEUyNjZfUExMXzE0OF81MDBNLCBLODAwX1BMTF8xNDhfNTAwTSwKLQkgQ1g3MDBfMTQ4XzUwME19CisJIENYNzAwXzE0OF81MDBNLCBWWDg1NV8xNDhfNTAwTX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZmlmb19kZXB0aF9zZWxlY3QgZGlzcGxheV9maWZvX2RlcHRoX3JlZyA9IHsKQEAgLTUwOCw3ICs1MjYsOCBAQAogc3RhdGljIHZvaWQgc2V0X2xjZF9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpOwogc3RhdGljIGludCBzZWFyY2hfbW9kZV9zZXR0aW5nKGludCBNb2RlSW5mb0luZGV4KTsKIHN0YXRpYyB2b2lkIGxvYWRfZml4X2JpdF9jcnRjX3JlZyh2b2lkKTsKLXN0YXRpYyB2b2lkIGluaXRfZ2Z4X2NoaXBfaW5mbyh2b2lkKTsKK3N0YXRpYyB2b2lkIGluaXRfZ2Z4X2NoaXBfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGRpKTsKIHN0YXRpYyB2b2lkIGluaXRfdG1kc19jaGlwX2luZm8odm9pZCk7CiBzdGF0aWMgdm9pZCBpbml0X2x2ZHNfY2hpcF9pbmZvKHZvaWQpOwogc3RhdGljIHZvaWQgZGV2aWNlX3NjcmVlbl9vZmYodm9pZCk7CkBAIC01MTgsNyArNTM3LDYgQEAKIHN0YXRpYyB2b2lkIGRldmljZV9vbih2b2lkKTsKIHN0YXRpYyB2b2lkIGVuYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKHZvaWQpOwogc3RhdGljIHZvaWQgZGlzYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKHZvaWQpOwotc3RhdGljIGludCBnZXRfZmJfc2l6ZV9mcm9tX3BjaSh2b2lkKTsKIAogdm9pZCB2aWFmYl93cml0ZV9yZWcodTggaW5kZXgsIHUxNiBpb19wb3J0LCB1OCBkYXRhKQogewpAQCAtNjI5LDcwICs2NDcsNDMgQEAKIAl9CiB9CiAKLXZvaWQgdmlhZmJfc2V0X3N0YXJ0X2FkZHIodm9pZCkKK3ZvaWQgdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcyh1MzIgYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDAsIHRtcCA9IDAsIHNpemUgPSAwOwotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCURFQlVHX01TRyhLRVJOX0RFQlVHICJ2aWFmYl9zZXRfcHJpbWFyeV9hZGRyZXNzKDB4JTA4WClcbiIsIGFkZHIpOworCXZpYWZiX3dyaXRlX3JlZyhDUjBELCBWSUFDUiwgYWRkciAmIDB4RkYpOworCXZpYWZiX3dyaXRlX3JlZyhDUjBDLCBWSUFDUiwgKGFkZHIgPj4gOCkgJiAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1IzNCwgVklBQ1IsIChhZGRyID4+IDE2KSAmIDB4RkYpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNDgsIFZJQUNSLCAoYWRkciA+PiAyNCkgJiAweDFGLCAweDFGKTsKK30KIAotCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9zdGFydF9hZGRyIVxuIik7Ci0JdmlhZmJfdW5sb2NrX2NydCgpOwotCS8qIHVwZGF0ZSBzdGFydGluZyBhZGRyZXNzIG9mIElHQTEgKi8KLQl2aWFmYl93cml0ZV9yZWcoQ1IwQywgVklBQ1IsIDB4MDApOwkvKmluaXRpYWwgc3RhcnRpbmcgYWRkcmVzcyAqLwotCXZpYWZiX3dyaXRlX3JlZyhDUjBELCBWSUFDUiwgMHgwMCk7Ci0JdmlhZmJfd3JpdGVfcmVnKENSMzQsIFZJQUNSLCAweDAwKTsKLQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjQ4LCBWSUFDUiwgMHgwMCwgMHgxRik7Cit2b2lkIHZpYWZiX3NldF9zZWNvbmRhcnlfYWRkcmVzcyh1MzIgYWRkcikKK3sKKwlERUJVR19NU0coS0VSTl9ERUJVRyAidmlhZmJfc2V0X3NlY29uZGFyeV9hZGRyZXNzKDB4JTA4WClcbiIsIGFkZHIpOworCS8qIHNlY29uZGFyeSBkaXNwbGF5IHN1cHBvcnRzIG9ubHkgcXVhZHdvcmQgYWxpZ25lZCBtZW1vcnkgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjYyLCBWSUFDUiwgKGFkZHIgPj4gMikgJiAweEZFLCAweEZFKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1I2MywgVklBQ1IsIChhZGRyID4+IDEwKSAmIDB4RkYpOworCXZpYWZiX3dyaXRlX3JlZyhDUjY0LCBWSUFDUiwgKGFkZHIgPj4gMTgpICYgMHhGRik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JBMywgVklBQ1IsIChhZGRyID4+IDI2KSAmIDB4MDcsIDB4MDcpOworfQogCi0JaWYgKHZpYWZiX2R1YWxfZmIpIHsKLQkJdmlhcGFyaW5mby0+aWdhX3BhdGggPSBJR0ExOwotCQl2aWFwYXJpbmZvMS0+aWdhX3BhdGggPSBJR0EyOwotCX0KK3ZvaWQgdmlhZmJfc2V0X3ByaW1hcnlfcGl0Y2godTMyIHBpdGNoKQoreworCURFQlVHX01TRyhLRVJOX0RFQlVHICJ2aWFmYl9zZXRfcHJpbWFyeV9waXRjaCgweCUwOFgpXG4iLCBwaXRjaCk7CisJLyogc3BlYyBkb2VzIG5vdCBzYXkgdGhhdCBmaXJzdCBhZGFwdGVyIHNraXBzIDMgYml0cyBidXQgb2xkCisJICogY29kZSBkaWQgaXQgYW5kIHNlZW1zIHRvIGJlIHJlYXNvbmFibGUgaW4gYW5hbG9neSB0byAybmQgYWRhcHRlcgorCSAqLworCXBpdGNoID0gcGl0Y2ggPj4gMzsKKwl2aWFmYl93cml0ZV9yZWcoMHgxMywgVklBQ1IsIHBpdGNoICYgMHhGRik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgzNSwgVklBQ1IsIChwaXRjaCA+PiAoOCAtIDUpKSAmIDB4RTAsIDB4RTApOworfQogCi0JaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgewotCQlpZiAoIXZpYWZiX2R1YWxfZmIpIHsKLQkJCWlmICh2aWFmYl9zZWNvbmRfc2l6ZSkKLQkJCQlzaXplID0gdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKLQkJCWVsc2UKLQkJCQlzaXplID0gOCAqIDEwMjQgKiAxMDI0OwotCQl9IGVsc2UgewotCi0JCQlzaXplID0gdmlhcGFyaW5mbzEtPm1lbXNpemU7Ci0JCX0KLQkJb2Zmc2V0ID0gdmlhZmJfc2Vjb25kX29mZnNldDsKLQkJREVCVUdfTVNHKEtFUk5fSU5GTwotCQkJICAidmlhZmJfc2Vjb25kX3NpemU9JWx4LCBzZWNvbmQgc3RhcnRfYWRkZHJlc3M9JWx4XG4iLAotCQkJICBzaXplLCBvZmZzZXQpOwotCX0KLQlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7Ci0JCW9mZnNldCA9IG9mZnNldCA+PiAzOwotCi0JCXRtcCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCAweDYyKSAmIDB4MDE7Ci0JCXRtcCB8PSAob2Zmc2V0ICYgMHg3RikgPDwgMTsKLQkJdmlhZmJfd3JpdGVfcmVnKENSNjIsIFZJQUNSLCB0bXApOwotCQl2aWFmYl93cml0ZV9yZWcoQ1I2MywgVklBQ1IsICgob2Zmc2V0ICYgMHg3RjgwKSA+PiA3KSk7Ci0JCXZpYWZiX3dyaXRlX3JlZyhDUjY0LCBWSUFDUiwgKChvZmZzZXQgJiAweDdGODAwMCkgPj4gMTUpKTsKLQkJdmlhZmJfd3JpdGVfcmVnKENSQTMsIFZJQUNSLCAoKG9mZnNldCAmIDB4MzgwMDAwMCkgPj4gMjMpKTsKLQl9IGVsc2UgewotCQkvKiB1cGRhdGUgc3RhcnRpbmcgYWRkcmVzcyAqLwotCQl2aWFmYl93cml0ZV9yZWcoQ1I2MiwgVklBQ1IsIDB4MDApOwotCQl2aWFmYl93cml0ZV9yZWcoQ1I2MywgVklBQ1IsIDB4MDApOwotCQl2aWFmYl93cml0ZV9yZWcoQ1I2NCwgVklBQ1IsIDB4MDApOwotCQl2aWFmYl93cml0ZV9yZWcoQ1JBMywgVklBQ1IsIDB4MDApOwotCX0KLQotCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKLQkJaWYgKHZpYWZiX2FjY2VsKSB7Ci0JCQlpZiAoIXZpYWZiX2R1YWxfZmIpCi0JCQkJbGVuZ3RoID0gc2l6ZSAtIHZpYXBhcmluZm8tPmZibWVtX3VzZWQ7Ci0JCQllbHNlCi0JCQkJbGVuZ3RoID0gc2l6ZSAtIHZpYXBhcmluZm8xLT5mYm1lbV91c2VkOwotCQl9IGVsc2UKLQkJCWxlbmd0aCA9IHNpemU7Ci0JCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKSh2b2lkICopdmlhZmJfRkJfTU0gKwotCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKLQkJbWVtc2V0KCh2b2lkICopb2Zmc2V0LCAwLCBsZW5ndGgpOwotCX0KLQotCXZpYWZiX2xvY2tfY3J0KCk7Cit2b2lkIHZpYWZiX3NldF9zZWNvbmRhcnlfcGl0Y2godTMyIHBpdGNoKQoreworCURFQlVHX01TRyhLRVJOX0RFQlVHICJ2aWFmYl9zZXRfc2Vjb25kYXJ5X3BpdGNoKDB4JTA4WClcbiIsIHBpdGNoKTsKKwlwaXRjaCA9IHBpdGNoID4+IDM7CisJdmlhZmJfd3JpdGVfcmVnKDB4NjYsIFZJQUNSLCBwaXRjaCAmIDB4RkYpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4NjcsIFZJQUNSLCAocGl0Y2ggPj4gOCkgJiAweDAzLCAweDAzKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDcxLCBWSUFDUiwgKHBpdGNoID4+ICgxMCAtIDcpKSAmIDB4ODAsIDB4ODApOwogfQogCiB2b2lkIHZpYWZiX3NldF9vdXRwdXRfcGF0aChpbnQgZGV2aWNlLCBpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpCkBAIC0xMTIzLDMwICsxMTE0LDYgQEAKIAl9CiB9CiAKLXZvaWQgdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpCi17Ci0JaW50IHJlZ192YWx1ZTsKLQlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtOwotCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnOwotCi0Jc3dpdGNoIChzZXRfaWdhKSB7Ci0JY2FzZSBJR0ExX0lHQTI6Ci0JY2FzZSBJR0ExOgotCQlyZWdfdmFsdWUgPSBJR0ExX09GRlNFVF9GT1JNVUxBKGhfYWRkciwgYnBwX2J5dGUpOwotCQl2aWFmYl9sb2FkX3JlZ19udW0gPSBvZmZzZXRfcmVnLmlnYTFfb2Zmc2V0X3JlZy5yZWdfbnVtOwotCQlyZWcgPSBvZmZzZXRfcmVnLmlnYTFfb2Zmc2V0X3JlZy5yZWc7Ci0JCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKLQkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKLQkJCWJyZWFrOwotCWNhc2UgSUdBMjoKLQkJcmVnX3ZhbHVlID0gSUdBMl9PRkZTRVRfRk9STVVMQShoX2FkZHIsIGJwcF9ieXRlKTsKLQkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnX251bTsKLQkJcmVnID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnOwotCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7Ci0JCWJyZWFrOwotCX0KLX0KLQogdm9pZCB2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKQogewogCWludCByZWdfdmFsdWU7CkBAIC0xMjc3LDYgKzEyNDQsMTUgQEAKIAkJCSAgICBWWDgwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKIAkJfQogCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODU1KSB7CisJCQlpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gVlg4NTVfSUdBMV9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTFfZmlmb190aHJlc2hvbGQgPSBWWDg1NV9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBWWDg1NV9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgVlg4NTVfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKwogCQkvKiBTZXQgRGlzcGxheSBGSUZPIERlcGF0aCBTZWxlY3QgKi8KIAkJcmVnX3ZhbHVlID0gSUdBMV9GSUZPX0RFUFRIX1NFTEVDVF9GT1JNVUxBKGlnYTFfZmlmb19tYXhfZGVwdGgpOwogCQl2aWFmYl9sb2FkX3JlZ19udW0gPQpAQCAtMTQwOCw2ICsxMzg0LDE1IEBACiAJCQkgICAgVlg4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CiAJCX0KIAorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9WWDg1NSkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IFZYODU1X0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gVlg4NTVfSUdBMl9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTJfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgVlg4NTVfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFZYODU1X0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKIAkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzgwMCkgewogCQkJLyogU2V0IERpc3BsYXkgRklGTyBEZXBhdGggU2VsZWN0ICovCiAJCQlyZWdfdmFsdWUgPQpAQCAtMTQ5Niw2ICsxNDgxLDggQEAKIAkJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKIAkJCWNhc2UgVU5JQ0hST01FX1ZYODAwOgogCQkJCXJldHVybiBwbGxfdmFsdWVbaV0uY3g3MDBfcGxsOworCQkJY2FzZSBVTklDSFJPTUVfVlg4NTU6CisJCQkJcmV0dXJuIHBsbF92YWx1ZVtpXS52eDg1NV9wbGw7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNTI5LDYgKzE1MTYsNyBAQAogCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CiAJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKIAkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCWNhc2UgVU5JQ0hST01FX1ZYODU1OgogCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDQsIFZJQVNSLCBDTEsgLyAweDEwMDAwKTsKIAkJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuU1I0ND0leCIsIENMSyAvIDB4MTAwMDApOwogCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDUsIFZJQVNSLCAoQ0xLICYgMHhGRkZGKSAvIDB4MTAwKTsKQEAgLTE1NTcsNiArMTU0NSw3IEBACiAJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKIAkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgogCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKKwkJY2FzZSBVTklDSFJPTUVfVlg4NTU6CiAJCQl2aWFmYl93cml0ZV9yZWcoU1I0QSwgVklBU1IsIENMSyAvIDB4MTAwMDApOwogCQkJdmlhZmJfd3JpdGVfcmVnKFNSNEIsIFZJQVNSLCAoQ0xLICYgMHhGRkZGKSAvIDB4MTAwKTsKIAkJCXZpYWZiX3dyaXRlX3JlZyhTUjRDLCBWSUFTUiwgQ0xLICUgMHgxMDApOwpAQCAtMTkxNiw3ICsxOTA1LDYgQEAKIAlsb2FkX2ZpeF9iaXRfY3J0Y19yZWcoKTsKIAl2aWFmYl9sb2NrX2NydCgpOwogCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKLQl2aWFmYl9sb2FkX29mZnNldF9yZWcoaF9hZGRyLCBicHBfYnl0ZSwgc2V0X2lnYSk7CiAJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoaF9hZGRyLCBicHBfYnl0ZSwgc2V0X2lnYSk7CiAKIAkvKiBsb2FkIEZJRk8gKi8KQEAgLTE5MzMsOSArMTkyMSwxMCBAQAogCiB9CiAKLXZvaWQgdmlhZmJfaW5pdF9jaGlwX2luZm8odm9pZCkKK3ZvaWQgdmlhZmJfaW5pdF9jaGlwX2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwZGkpCiB7Ci0JaW5pdF9nZnhfY2hpcF9pbmZvKCk7CisJaW5pdF9nZnhfY2hpcF9pbmZvKHBkZXYsIHBkaSk7CiAJaW5pdF90bWRzX2NoaXBfaW5mbygpOwogCWluaXRfbHZkc19jaGlwX2luZm8oKTsKIApAQCAtMjAwOCwyNCArMTk5NywxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaW5pdF9nZnhfY2hpcF9pbmZvKHZvaWQpCitzdGF0aWMgdm9pZCBpbml0X2dmeF9jaGlwX2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkaSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7Ci0JdTMyIGk7CiAJdTggdG1wOwogCi0JLyogSW5kZW50aWZ5IEdGWCBDaGlwIE5hbWUgKi8KLQlmb3IgKGkgPSAwOyBwY2lpZGxpc3RbaV0udmVuZG9yICE9IDA7IGkrKykgewotCQlwZGV2ID0gcGNpX2dldF9kZXZpY2UocGNpaWRsaXN0W2ldLnZlbmRvciwKLQkJCXBjaWlkbGlzdFtpXS5kZXZpY2UsIDApOwotCQlpZiAocGRldikKLQkJCWJyZWFrOwotCX0KLQotCWlmICghcGNpaWRsaXN0W2ldLnZlbmRvcikKLQkJcmV0dXJuIDsKLQotCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9IHBjaWlkbGlzdFtpXS5jaGlwX2luZGV4OworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9IHBkaS0+ZHJpdmVyX2RhdGE7CiAKIAkvKiBDaGVjayByZXZpc2lvbiBvZiBDTEUyNjYgQ2hpcCAqLwogCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgewpAQCAtMjA1Niw4ICsyMDMzLDYgQEAKIAkJCQlDWDcwMF9SRVZJU0lPTl83MDA7CiAJCX0KIAl9Ci0KLQlwY2lfZGV2X3B1dChwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF90bWRzX2NoaXBfaW5mbyh2b2lkKQpAQCAtMjI3MSwxMSArMjI0NiwxMiBAQAogCQlicmVhazsKIAogCWNhc2UgVU5JQ0hST01FX0NYNzAwOgotCQl2aWFmYl93cml0ZV9yZWd4KENYNzAwX01vZGVYcmVncywgTlVNX1RPVEFMX0NYNzAwX01vZGVYcmVncyk7Ci0KIAljYXNlIFVOSUNIUk9NRV9WWDgwMDoKLQkJdmlhZmJfd3JpdGVfcmVneChWWDgwMF9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9WWDgwMF9Nb2RlWHJlZ3MpOworCQl2aWFmYl93cml0ZV9yZWd4KENYNzAwX01vZGVYcmVncywgTlVNX1RPVEFMX0NYNzAwX01vZGVYcmVncyk7CisJCWJyZWFrOwogCisJY2FzZSBVTklDSFJPTUVfVlg4NTU6CisJCXZpYWZiX3dyaXRlX3JlZ3goVlg4NTVfTW9kZVhyZWdzLCBOVU1fVE9UQUxfVlg4NTVfTW9kZVhyZWdzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMjkxLDcgKzIyNjcsOCBAQAogCQlvdXRiKFZQSVQuU1JbaSAtIDFdLCBWSUFTUiArIDEpOwogCX0KIAotCXZpYWZiX3NldF9zdGFydF9hZGRyKCk7CisJdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcygwKTsKKwl2aWFmYl9zZXRfc2Vjb25kYXJ5X2FkZHJlc3ModmlhZmJfU0FNTV9PTiA/IHZpYWZiX3NlY29uZF9vZmZzZXQgOiAwKTsKIAl2aWFmYl9zZXRfaWdhX3BhdGgoKTsKIAogCS8qIFdyaXRlIENSVEMgKi8KQEAgLTIzNzEsNiArMjM0OCw5IEBACiAJCX0KIAl9CiAKKwl2aWFmYl9zZXRfcHJpbWFyeV9waXRjaCh2aWFmYmluZm8tPmZpeC5saW5lX2xlbmd0aCk7CisJdmlhZmJfc2V0X3NlY29uZGFyeV9waXRjaCh2aWFmYl9kdWFsX2ZiID8gdmlhZmJpbmZvMS0+Zml4LmxpbmVfbGVuZ3RoCisJCTogdmlhZmJpbmZvLT5maXgubGluZV9sZW5ndGgpOwogCS8qIFVwZGF0ZSBSZWZyZXNoIFJhdGUgU2V0dGluZyAqLwogCiAJLyogQ2xlYXIgT24gU2NyZWVuICovCkBAIC0yNTQ1LDM4ICsyNTI1LDYgQEAKIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgwLCBCSVQ1ICsgQklUNCk7CiB9CiAKLXZvaWQgdmlhZmJfZ2V0X21taW9faW5mbyh1bnNpZ25lZCBsb25nICptbWlvX2Jhc2UsCi0JdW5zaWduZWQgbG9uZyAqbW1pb19sZW4pCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwotCXUzMiB2ZW5kb3IsIGRldmljZTsKLQl1MzIgaTsKLQotCWZvciAoaSA9IDA7IHBjaWlkbGlzdFtpXS52ZW5kb3IgIT0gMDsgaSsrKQotCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09Ci0JCQlwY2lpZGxpc3RbaV0uY2hpcF9pbmRleCkKLQkJCWJyZWFrOwotCi0JaWYgKCFwY2lpZGxpc3RbaV0udmVuZG9yKQotCQlyZXR1cm4gOwotCi0JdmVuZG9yID0gcGNpaWRsaXN0W2ldLnZlbmRvcjsKLQlkZXZpY2UgPSBwY2lpZGxpc3RbaV0uZGV2aWNlOwotCi0JcGRldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwgZGV2aWNlLCBOVUxMKTsKLQotCWlmICghcGRldikgewotCQkqbW1pb19iYXNlID0gMDsKLQkJKm1taW9fbGVuID0gMDsKLQkJcmV0dXJuIDsKLQl9Ci0KLQkqbW1pb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCSptbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7Ci0KLQlwY2lfZGV2X3B1dChwZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgZW5hYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCkKIHsKIAkvKiB0byBlbmFibGUgc2Vjb25kIGRpc3BsYXkgY2hhbm5lbC4gKi8KQEAgLTI1OTMsNDQgKzI1NDEsNyBAQAogCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCBCSVQ2LCBCSVQ2KTsKIH0KIAotdm9pZCB2aWFmYl9nZXRfZmJfaW5mbyh1bnNpZ25lZCBpbnQgKmZiX2Jhc2UsIHVuc2lnbmVkIGludCAqZmJfbGVuKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQl1MzIgdmVuZG9yLCBkZXZpY2U7Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBwY2lpZGxpc3RbaV0udmVuZG9yICE9IDA7IGkrKykKLQkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PQotCQkJcGNpaWRsaXN0W2ldLmNoaXBfaW5kZXgpCi0JCQlicmVhazsKLQotCWlmICghcGNpaWRsaXN0W2ldLnZlbmRvcikKLQkJcmV0dXJuIDsKLQotCXZlbmRvciA9IHBjaWlkbGlzdFtpXS52ZW5kb3I7Ci0JZGV2aWNlID0gcGNpaWRsaXN0W2ldLmRldmljZTsKLQotCXBkZXYgPSBwY2lfZ2V0X2RldmljZSh2ZW5kb3IsIGRldmljZSwgTlVMTCk7Ci0KLQlpZiAoIXBkZXYpIHsKLQkJKmZiX2Jhc2UgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IzMCkgPDwgMjQ7Ci0JCSpmYl9sZW4gPSB2aWFmYl9nZXRfbWVtc2l6ZSgpOwotCQlERUJVR19NU0coS0VSTl9JTkZPICJHZXQgRkIgaW5mbyBmcm9tIFNSMzAhXG4iKTsKLQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiZmJfYmFzZSA9ICUwOHhcbiIsICpmYl9iYXNlKTsKLQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiZmJfbGVuID0gJTA4eFxuIiwgKmZiX2xlbik7Ci0JCXJldHVybiA7Ci0JfQotCi0JKmZiX2Jhc2UgPSAodW5zaWduZWQgaW50KXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQkqZmJfbGVuID0gZ2V0X2ZiX3NpemVfZnJvbV9wY2koKTsKLQlERUJVR19NU0coS0VSTl9JTkZPICJHZXQgRkIgaW5mbyBmcm9tIFBDSSBzeXN0ZW0hXG4iKTsKLQlERUJVR19NU0coS0VSTl9JTkZPICJmYl9iYXNlID0gJTA4eFxuIiwgKmZiX2Jhc2UpOwotCURFQlVHX01TRyhLRVJOX0lORk8gImZiX2xlbiA9ICUwOHhcbiIsICpmYl9sZW4pOwotCi0JcGNpX2Rldl9wdXQocGRldik7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2ZiX3NpemVfZnJvbV9wY2kodm9pZCkKK2ludCB2aWFmYl9nZXRfZmJfc2l6ZV9mcm9tX3BjaSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY29uZmlnaWQsIGRldmljZWlkLCBGQlNpemUgPSAwOwogCWludCBWaWRlb01lbVNpemU7CkBAIC0yNjU2LDYgKzI1NjcsNyBAQAogCQljYXNlIFA0TTg5MF9GVU5DVElPTjM6CiAJCWNhc2UgUDRNOTAwX0ZVTkNUSU9OMzoKIAkJY2FzZSBWWDgwMF9GVU5DVElPTjM6CisJCWNhc2UgVlg4NTVfRlVOQ1RJT04zOgogCQkJLypjYXNlIENONzUwX0ZVTkNUSU9OMzogKi8KIAkJCW91dGwoY29uZmlnaWQgKyAweEEwLCAodW5zaWduZWQgbG9uZykweENGOCk7CiAJCQlGQlNpemUgPSBpbmwoKHVuc2lnbmVkIGxvbmcpMHhDRkMpOwpAQCAtMjcxOSw2ICsyNjMxLDEwIEBACiAJCQlWaWRlb01lbVNpemUgPSAoMjU2IDw8IDIwKTsJLyoyNTZNICovCiAJCQlicmVhazsKIAorCQljYXNlIDB4MDAwMDcwMDA6CS8qIE9ubHkgb24gVlg4NTUvODc1ICovCisJCQlWaWRlb01lbVNpemUgPSAoNTEyIDw8IDIwKTsJLyo1MTJNICovCisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KIAkJCWJyZWFrOwpAQCAtMjc4OCwyNCArMjcwNCw2IEBACiAJfQogfQogCi12b2lkIHZpYWZiX21lbW9yeV9waXRjaF9wYXRjaChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlpZiAoaW5mby0+dmFyLnhyZXMgIT0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCkgewotCQl2aWFmYl9sb2FkX29mZnNldF9yZWcoaW5mby0+dmFyLnhyZXNfdmlydHVhbCwKLQkJCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMywgSUdBMSk7Ci0KLQkJaWYgKHZpYWZiX1NBTU1fT04pIHsKLQkJCXZpYWZiX2xvYWRfb2Zmc2V0X3JlZyh2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzLAotCQkJCXZpYWZiX2JwcDEgPj4gMywKLQkJCQkJSUdBMik7Ci0JCX0gZWxzZSB7Ci0JCQl2aWFmYl9sb2FkX29mZnNldF9yZWcoaW5mby0+dmFyLnhyZXNfdmlydHVhbCwKLQkJCQkJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMsIElHQTIpOwotCQl9Ci0KLQl9Ci19Ci0KIC8qQWNjb3JkaW5nIHZhcidzIHhyZXMsIHlyZXMgZmlsbCB2YXIncyBvdGhlciB0aW1pbmcgaW5mb3JtYXRpb24qLwogdm9pZCB2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50IHJlZnJlc2gsCiAJCQkgIGludCBtb2RlX2luZGV4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKaW5kZXggNmZmMzhmYS4uYjg3NGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvaHcuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCkBAIC0xNDcsMTQgKzE0Nyw4IEBACiAvKiBsb2NhdGlvbjoge0NSNUYsMCw0fSAqLwogI2RlZmluZSBJR0EyX1ZFUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDEKIAotLyogRGVmaW5lIE9mZnNldCBhbmQgRmV0Y2ggQ291bnQgUmVnaXN0ZXIqLworLyogRGVmaW5lIEZldGNoIENvdW50IFJlZ2lzdGVyKi8KIAotLyogbG9jYXRpb246IHtDUjEzLDAsN30se0NSMzUsNSw3fSAqLwotI2RlZmluZSBJR0ExX09GRlNFVF9SRUdfTlVNICAgICAgICAgICAgIDIKLS8qIDggYnl0ZXMgYWxpZ25tZW50LiAqLwotI2RlZmluZSBJR0ExX09GRlNFUl9BTElHTl9CWVRFICAgICAgICAgIDgKLS8qIHg6IEggcmVzb2x1dGlvbiwgeTogY29sb3IgZGVwdGggKi8KLSNkZWZpbmUgSUdBMV9PRkZTRVRfRk9STVVMQSh4LCB5KSAgICAgICAgKCh4KnkpL0lHQTFfT0ZGU0VSX0FMSUdOX0JZVEUpCiAvKiBsb2NhdGlvbjoge1NSMUMsMCw3fSx7U1IxRCwwLDF9ICovCiAjZGVmaW5lIElHQTFfRkVUQ0hfQ09VTlRfUkVHX05VTSAgICAgICAgMgogLyogMTYgYnl0ZXMgYWxpZ25tZW50LiAqLwpAQCAtMTY0LDExICsxNTgsNiBAQAogI2RlZmluZSBJR0ExX0ZFVENIX0NPVU5UX0ZPUk1VTEEoeCwgeSkgICBcCiAJKCgoeCp5KS9JR0ExX0ZFVENIX0NPVU5UX0FMSUdOX0JZVEUpICsgSUdBMV9GRVRDSF9DT1VOVF9QQVRDSF9WQUxVRSkKIAotLyogbG9jYXRpb246IHtDUjY2LDAsN30se0NSNjcsMCwxfSAqLwotI2RlZmluZSBJR0EyX09GRlNFVF9SRUdfTlVNICAgICAgICAgICAgIDIKLSNkZWZpbmUgSUdBMl9PRkZTRVRfQUxJR05fQllURSAgICAgICAgICA4Ci0vKiB4OiBIIHJlc29sdXRpb24sIHk6IGNvbG9yIGRlcHRoICovCi0jZGVmaW5lIElHQTJfT0ZGU0VUX0ZPUk1VTEEoeCwgeSkgICAgICAgICgoeCp5KS9JR0EyX09GRlNFVF9BTElHTl9CWVRFKQogLyogbG9jYXRpb246IHtDUjY1LDAsN30se0NSNjcsMiwzfSAqLwogI2RlZmluZSBJR0EyX0ZFVENIX0NPVU5UX1JFR19OVU0gICAgICAgIDIKICNkZWZpbmUgSUdBMl9GRVRDSF9DT1VOVF9BTElHTl9CWVRFICAgICAxNgpAQCAtMzM1LDYgKzMyNCwxNyBAQAogLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KICNkZWZpbmUgVlg4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyOAogCisvKiBGb3IgVlQzNDA5ICovCisjZGVmaW5lIFZYODU1X0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICA0MDAKKyNkZWZpbmUgVlg4NTVfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMyMAorI2RlZmluZSBWWDg1NV9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgMzIwCisjZGVmaW5lIFZYODU1X0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAxNjAKKworI2RlZmluZSBWWDg1NV9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgMjAwCisjZGVmaW5lIFZYODU1X0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAxNjAKKyNkZWZpbmUgVlg4NTVfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDE2MAorI2RlZmluZSBWWDg1NV9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMzIwCisKICNkZWZpbmUgSUdBMV9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNICAgICAgICAgIDEKICNkZWZpbmUgSUdBMV9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNICAgICAgICAgICAgIDIKICNkZWZpbmUgSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEX1JFR19OVU0gICAgICAgIDIKQEAgLTYxNywyMyArNjE3LDYgQEAKIAlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfVkVSX1NZTkNfRU5EX1JFR19OVU1dOwogfTsKIAotLyogSUdBMSBPZmZzZXQgUmVnaXN0ZXIgKi8KLXN0cnVjdCBpZ2ExX29mZnNldCB7Ci0JaW50IHJlZ19udW07Ci0Jc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX09GRlNFVF9SRUdfTlVNXTsKLX07Ci0KLS8qIElHQTIgT2Zmc2V0IFJlZ2lzdGVyICovCi1zdHJ1Y3QgaWdhMl9vZmZzZXQgewotCWludCByZWdfbnVtOwotCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9PRkZTRVRfUkVHX05VTV07Ci19OwotCi1zdHJ1Y3Qgb2Zmc2V0IHsKLQlzdHJ1Y3QgaWdhMV9vZmZzZXQgaWdhMV9vZmZzZXRfcmVnOwotCXN0cnVjdCBpZ2EyX29mZnNldCBpZ2EyX29mZnNldF9yZWc7Ci19OwotCiAvKiBJR0ExIEZldGNoIENvdW50IFJlZ2lzdGVyICovCiBzdHJ1Y3QgaWdhMV9mZXRjaF9jb3VudCB7CiAJaW50IHJlZ19udW07CkBAIC03MTYsNiArNjk5LDcgQEAKIAl1MzIgY2xlMjY2X3BsbDsKIAl1MzIgazgwMF9wbGw7CiAJdTMyIGN4NzAwX3BsbDsKKwl1MzIgdng4NTVfcGxsOwogfTsKIAogc3RydWN0IHJnYkxVVCB7CkBAIC04NjAsNiArODQ0LDggQEAKICNkZWZpbmUgUDRNOTAwX0ZVTkNUSU9OMyAgICAweDMzNjQKIC8qIFZUMzM1MyBjaGlwc2V0Ki8KICNkZWZpbmUgVlg4MDBfRlVOQ1RJT04zICAgICAweDMzNTMKKy8qIFZUMzQwOSBjaGlwc2V0Ki8KKyNkZWZpbmUgVlg4NTVfRlVOQ1RJT04zICAgICAweDM0MDkKIAogI2RlZmluZSBOVU1fVE9UQUxfUExMX1RBQkxFIEFSUkFZX1NJWkUocGxsX3ZhbHVlKQogCkBAIC04ODMsNyArODY5LDYgQEAKIGV4dGVybiBpbnQgdmlhZmJfTENEMl9PTjsKIGV4dGVybiBpbnQgdmlhZmJfTENEX09OOwogZXh0ZXJuIGludCB2aWFmYl9EVklfT047Ci1leHRlcm4gaW50IHZpYWZiX2FjY2VsOwogZXh0ZXJuIGludCB2aWFmYl9ob3RwbHVnOwogCiB2b2lkIHZpYWZiX3dyaXRlX3JlZ19tYXNrKHU4IGluZGV4LCBpbnQgaW9fcG9ydCwgdTggZGF0YSwgdTggbWFzayk7CkBAIC05MDQsNyArODg5LDYgQEAKIHU4IHZpYWZiX3JlYWRfcmVnKGludCBpb19wb3J0LCB1OCBpbmRleCk7CiB2b2lkIHZpYWZiX2xvY2tfY3J0KHZvaWQpOwogdm9pZCB2aWFmYl91bmxvY2tfY3J0KHZvaWQpOwotdm9pZCB2aWFmYl9sb2FkX29mZnNldF9yZWcoaW50IGhfYWRkciwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSk7CiB2b2lkIHZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwogdm9pZCB2aWFmYl93cml0ZV9yZWd4KHN0cnVjdCBpb19yZWcgUmVnVGFibGVbXSwgaW50IEl0ZW1OdW0pOwogc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKGludCBJbmRleCk7CkBAIC05MTcsMTcgKzkwMSwyMCBAQAogaW50IHZpYWZiX3NldG1vZGUoaW50IHZtb2RlX2luZGV4LCBpbnQgaG9yX3JlcywgaW50IHZlcl9yZXMsCiAJICAgIGludCB2aWRlb19icHAsIGludCB2bW9kZV9pbmRleDEsIGludCBob3JfcmVzMSwKIAkgICAgaW50IHZlcl9yZXMxLCBpbnQgdmlkZW9fYnBwMSk7Ci12b2lkIHZpYWZiX2luaXRfY2hpcF9pbmZvKHZvaWQpOwordm9pZCB2aWFmYl9pbml0X2NoaXBfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkaSk7CiB2b2lkIHZpYWZiX2luaXRfZGFjKGludCBzZXRfaWdhKTsKIGludCB2aWFmYl9nZXRfcGl4Y2xvY2soaW50IGhyZXMsIGludCB2cmVzLCBpbnQgdm1vZGVfcmVmcmVzaCk7CiBpbnQgdmlhZmJfZ2V0X3JlZnJlc2goaW50IGhyZXMsIGludCB2cmVzLCB1MzIgZmxvYXRfcmVmcmVzaCk7CiB2b2lkIHZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbnQgaHJlcywgaW50IHZyZXMsIGludCBicHAsCiAJCQkgICBpbnQgdm1vZGVfcmVmcmVzaCwgaW50IGZsYWcpOwotdm9pZCB2aWFmYl9nZXRfbW1pb19pbmZvKHVuc2lnbmVkIGxvbmcgKm1taW9fYmFzZSwKLQl1bnNpZ25lZCBsb25nICptbWlvX2xlbik7CiAKK2ludCB2aWFmYl9nZXRfZmJfc2l6ZV9mcm9tX3BjaSh2b2lkKTsKIHZvaWQgdmlhZmJfc2V0X2lnYV9wYXRoKHZvaWQpOwotdm9pZCB2aWFmYl9zZXRfc3RhcnRfYWRkcih2b2lkKTsKK3ZvaWQgdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcyh1MzIgYWRkcik7Cit2b2lkIHZpYWZiX3NldF9zZWNvbmRhcnlfYWRkcmVzcyh1MzIgYWRkcik7Cit2b2lkIHZpYWZiX3NldF9wcmltYXJ5X3BpdGNoKHUzMiBwaXRjaCk7Cit2b2lkIHZpYWZiX3NldF9zZWNvbmRhcnlfcGl0Y2godTMyIHBpdGNoKTsKIHZvaWQgdmlhZmJfZ2V0X2ZiX2luZm8odW5zaWduZWQgaW50ICpmYl9iYXNlLCB1bnNpZ25lZCBpbnQgKmZiX2xlbik7CiAKICNlbmRpZiAvKiBfX0hXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmgKaW5kZXggODQyZmUzMC4uZGU4OTk4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oCkBAIC01MCw4ICs1MCw2IEBACiAjZGVmaW5lIFZJQUZCX0dFVF9HQU1NQV9MVVQJCTB4NTY0OTQxMjQKICNkZWZpbmUgVklBRkJfU0VUX0dBTU1BX0xVVAkJMHg1NjQ5NDEyNQogI2RlZmluZSBWSUFGQl9HRVRfR0FNTUFfU1VQUE9SVF9TVEFURQkweDU2NDk0MTI2Ci0jZGVmaW5lIFZJQUZCX1NFVF9WSURFT19ERVZJQ0UJCTB4NTY0OTQxMjcKLSNkZWZpbmUgVklBRkJfR0VUX1ZJREVPX0RFVklDRQkJMHg1NjQ5NDEyOAogI2RlZmluZSBWSUFGQl9TRVRfU0VDT05EX01PREUJCTB4NTY0OTQxMjkKICNkZWZpbmUgVklBRkJfU1lOQ19TVVJGQUNFCQkweDU2NDk0MTMwCiAjZGVmaW5lIFZJQUZCX0dFVF9EUklWRVJfQ0FQUwkJMHg1NjQ5NDEzMQpAQCAtMTc5LDkgKzE3Nyw3IEBACiAJdW5zaWduZWQgc2hvcnQgc2Vjb25kX2Rldl9icHA7CiAJLyogSW5kaWNhdGUgd2hpY2ggZGV2aWNlIGFyZSBwcmltYXJ5IGRpc3BsYXkgZGV2aWNlLiAqLwogCXVuc2lnbmVkIGludCBwcmltYXJ5X2RldmljZTsKLQkvKiBJbmRpY2F0ZSB3aGljaCBkZXZpY2Ugd2lsbCBzaG93IHZpZGVvLiBvbmx5IHZhbGlkIGluIGR1b3ZpZXcgbW9kZSAqLwotCXVuc2lnbmVkIGludCB2aWRlb19kZXZpY2Vfc3RhdHVzOwotCXVuc2lnbmVkIGludCBzdHJ1Y3RfcmVzZXJ2ZWRbMzRdOworCXVuc2lnbmVkIGludCBzdHJ1Y3RfcmVzZXJ2ZWRbMzVdOwogCXN0cnVjdCB2aWFmYl9pb2N0bF9sY2RfYXR0cmlidXRlIGxjZF9hdHRyaWJ1dGVzOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwppbmRleCA3OGM2YjMzLi5lM2U1OTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwpAQCAtMjA3LDEzICsyMDcsMTMgQEAKIAogaW50IHZpYWZiX2x2ZHNfdHJhc21pdHRlcl9pZGVudGlmeSh2b2lkKQogewotCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKKwl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKIAlpZiAodmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYoKSkgewogCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmkyY19wb3J0ID0gSTJDUE9SVElOREVYOwogCQlERUJVR19NU0coS0VSTl9JTkZPCiAJCQkgICJGb3VuZCBWSUEgVlQxNjM2IExWRFMgb24gcG9ydCBpMmMgMHgzMSBcbiIpOwogCX0gZWxzZSB7Ci0JCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CisJCXZpYXBhcmluZm8tPnNoYXJlZC0+aTJjX3N0dWZmLmkyY19wb3J0ID0gR1BJT1BPUlRJTkRFWDsKIAkJaWYgKHZpYWZiX2x2ZHNfaWRlbnRpZnlfdnQxNjM2KCkpIHsKIAkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uaTJjX3BvcnQgPQogCQkJCUdQSU9QT1JUSU5ERVg7CkBAIC00NzAsNyArNDcwLDcgQEAKIHsKIAl1OCBkYXRhOwogCi0JdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0gR1BJT1BPUlRJTkRFWDsKKwl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CiAJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KIAkgICAgbHZkc19jaGlwX2luZm8ubHZkc19jaGlwX3NsYXZlX2FkZHIsCiAJCQkodTgpIGluZGV4LCAmZGF0YSk7CkBAIC05NTIsMTMgKzk1MiwxMCBAQAogCWludCB2aWRlb19pbmRleCA9IHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemU7CiAJaW50IHNldF9pZ2EgPSBwbHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoOwogCWludCBtb2RlX2JwcCA9IHBsdmRzX3NldHRpbmdfaW5mby0+YnBwOwotCWludCB2aWFmYl9sb2FkX3JlZ19udW0gPSAwOwotCWludCByZWdfdmFsdWUgPSAwOwogCWludCBzZXRfaHJlcywgc2V0X3ZyZXM7CiAJaW50IHBhbmVsX2hyZXMsIHBhbmVsX3ZyZXM7CiAJdTMyIHBsbF9EX047CiAJaW50IG9mZnNldDsKLQlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZyA9IE5VTEw7CiAJc3RydWN0IGRpc3BsYXlfdGltaW5nIG1vZGVfY3J0X3JlZywgcGFuZWxfY3J0X3JlZzsKIAlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKnBhbmVsX2NydF90YWJsZSA9IE5VTEw7CiAJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwgPSBOVUxMOwpAQCAtMTAzOCwxNiArMTAzNSwxMSBAQAogCQl9CiAKIAkJLyogT2Zmc2V0IGZvciBzaW11bHRhbmVvdXMgKi8KLQkJcmVnX3ZhbHVlID0gb2Zmc2V0OwotCQl2aWFmYl9sb2FkX3JlZ19udW0gPSBvZmZzZXRfcmVnLmlnYTJfb2Zmc2V0X3JlZy5yZWdfbnVtOwotCQlyZWcgPSBvZmZzZXRfcmVnLmlnYTJfb2Zmc2V0X3JlZy5yZWc7Ci0JCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJdmlhZmJfc2V0X3NlY29uZGFyeV9waXRjaChvZmZzZXQgPDwgMyk7CiAJCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2xvYWRfcmVnISFcbiIpOwogCQl2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhzZXRfaHJlcywgNCwgSUdBMik7CiAJCS8qIEZldGNoIGNvdW50IGZvciBzaW11bHRhbmVvdXMgKi8KIAl9IGVsc2UgewkJLyogU0FNTSAqLwotCQkvKiBPZmZzZXQgZm9yIElHQTIgb25seSAqLwotCQl2aWFmYl9sb2FkX29mZnNldF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CiAJCS8qIEZldGNoIGNvdW50IGZvciBJR0EyIG9ubHkgKi8KIAkJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oCmluZGV4IDJlMTI1NGQuLjdjZDAzZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaApAQCAtMTY3LDYgKzE2NywxMCBAQAogI2RlZmluZSBTUjRCICAgIDB4NEIKICNkZWZpbmUgU1I0QyAgICAweDRDCiAjZGVmaW5lIFNSNTIgICAgMHg1MgorI2RlZmluZSBTUjU3CTB4NTcKKyNkZWZpbmUgU1I1OAkweDU4CisjZGVmaW5lIFNSNTkJMHg1OQorI2RlZmluZSBTUjVEICAgIDB4NUQKICNkZWZpbmUgU1I1RSAgICAweDVFCiAjZGVmaW5lIFNSNjUgICAgMHg2NQogCkBAIC05NjYsNiArOTcwLDEwMCBAQAogI2RlZmluZSBDWDcwMF8yOTdfNTAwTSAgICAweDAwQ0UwNDAzCiAjZGVmaW5lIENYNzAwXzEyMl82MTRNICAgIDB4MDA4NzA4MDIKIAorLyogUExMIGZvciBWWDg1NSAqLworI2RlZmluZSBWWDg1NV8yMl8wMDBNICAgICAweDAwN0IxMDA1CisjZGVmaW5lIFZYODU1XzI1XzE3NU0gICAgIDB4MDA4RDEwMDUKKyNkZWZpbmUgVlg4NTVfMjZfNzE5TSAgICAgMHgwMDk2MTAwNQorI2RlZmluZSBWWDg1NV8yNl84ODBNICAgICAweDAwOTYxMDA1CisjZGVmaW5lIFZYODU1XzI3XzAwME0gICAgIDB4MDA5NzEwMDUKKyNkZWZpbmUgVlg4NTVfMjlfNTgxTSAgICAgMHgwMEE1MTAwNQorI2RlZmluZSBWWDg1NV8yOV84MjlNICAgICAweDAwNjQxMDAzCisjZGVmaW5lIFZYODU1XzMxXzQ5ME0gICAgIDB4MDBCMDEwMDUKKyNkZWZpbmUgVlg4NTVfMzFfNTAwTSAgICAgMHgwMEIwMTAwNQorI2RlZmluZSBWWDg1NV8zMV83MjhNICAgICAweDAwOEUxMDA0CisjZGVmaW5lIFZYODU1XzMyXzY2OE0gICAgIDB4MDA5MjEwMDQKKyNkZWZpbmUgVlg4NTVfMzZfMDAwTSAgICAgMHgwMEExMTAwNAorI2RlZmluZSBWWDg1NV80MF8wMDBNICAgICAweDAwNzAwQzA1CisjZGVmaW5lIFZYODU1XzQxXzI5MU0gICAgIDB4MDA3MzBDMDUKKyNkZWZpbmUgVlg4NTVfNDNfMTYzTSAgICAgMHgwMDc5MEMwNQorI2RlZmluZSBWWDg1NV80NV8yNTBNICAgICAweDAwN0YwQzA1ICAgICAgLyogNDUuNDZNSHogKi8KKyNkZWZpbmUgVlg4NTVfNDZfMDAwTSAgICAgMHgwMDY3MEMwNAorI2RlZmluZSBWWDg1NV80Nl85OTZNICAgICAweDAwNjkwQzA0CisjZGVmaW5lIFZYODU1XzQ4XzAwME0gICAgIDB4MDA4NjBDMDUKKyNkZWZpbmUgVlg4NTVfNDhfODc1TSAgICAgMHgwMDg5MEMwNQorI2RlZmluZSBWWDg1NV80OV81MDBNICAgICAweDAwNTMwQzAzCisjZGVmaW5lIFZYODU1XzUyXzQwNk0gICAgIDB4MDA1ODBDMDMKKyNkZWZpbmUgVlg4NTVfNTJfOTc3TSAgICAgMHgwMDk0MEMwNQorI2RlZmluZSBWWDg1NV81Nl8yNTBNICAgICAweDAwOUQwQzA1CisjZGVmaW5lIFZYODU1XzYwXzQ2Nk0gICAgIDB4MDBBOTBDMDUKKyNkZWZpbmUgVlg4NTVfNjFfNTAwTSAgICAgMHgwMEFDMEMwNQorI2RlZmluZSBWWDg1NV82NV8wMDBNICAgICAweDAwNkQwQzAzCisjZGVmaW5lIFZYODU1XzY1XzE3OE0gICAgIDB4MDBCNjBDMDUKKyNkZWZpbmUgVlg4NTVfNjZfNzUwTSAgICAgMHgwMDcwMEMwMyAgICAvKjY3LjExNk1IeiAqLworI2RlZmluZSBWWDg1NV82N18yOTVNICAgICAweDAwQkMwQzA1CisjZGVmaW5lIFZYODU1XzY4XzE3OU0gICAgIDB4MDBCRjBDMDUKKyNkZWZpbmUgVlg4NTVfNjhfMzY5TSAgICAgMHgwMEJGMEMwNQorI2RlZmluZSBWWDg1NV82OV85MjRNICAgICAweDAwQzMwQzA1CisjZGVmaW5lIFZYODU1XzcwXzE1OU0gICAgIDB4MDBDMzBDMDUKKyNkZWZpbmUgVlg4NTVfNzJfMDAwTSAgICAgMHgwMEExMEMwNAorI2RlZmluZSBWWDg1NV83M18wMjNNICAgICAweDAwQ0MwQzA1CisjZGVmaW5lIFZYODU1Xzc0XzQ4MU0gICAgIDB4MDBEMTBDMDUKKyNkZWZpbmUgVlg4NTVfNzhfNzUwTSAgICAgMHgwMDZFMDgwNQorI2RlZmluZSBWWDg1NV83OV80NjZNICAgICAweDAwNkYwODA1CisjZGVmaW5lIFZYODU1XzgwXzEzNk0gICAgIDB4MDA3MDA4MDUKKyNkZWZpbmUgVlg4NTVfODFfNjI3TSAgICAgMHgwMDcyMDgwNQorI2RlZmluZSBWWDg1NV84M18zNzVNICAgICAweDAwNzUwODA1CisjZGVmaW5lIFZYODU1XzgzXzUyN00gICAgIDB4MDA3NTA4MDUKKyNkZWZpbmUgVlg4NTVfODNfOTUwTSAgICAgMHgwMDc1MDgwNQorI2RlZmluZSBWWDg1NV84NF81MzdNICAgICAweDAwNzYwODA1CisjZGVmaW5lIFZYODU1Xzg0Xzc1ME0gICAgIDB4MDA3NjA4MDUgICAgIC8qIDg0LjUzN01oeiAqLworI2RlZmluZSBWWDg1NV84NV81MDBNICAgICAweDAwNzYwODA1ICAgICAgICAvKiA4NS45MDkwODAgTUh6Ki8KKyNkZWZpbmUgVlg4NTVfODVfODYwTSAgICAgMHgwMDc2MDgwNQorI2RlZmluZSBWWDg1NV84NV85MDlNICAgICAweDAwNzYwODA1CisjZGVmaW5lIFZYODU1Xzg4Xzc1ME0gICAgIDB4MDA3QzA4MDUKKyNkZWZpbmUgVlg4NTVfODlfNDg5TSAgICAgMHgwMDdEMDgwNQorI2RlZmluZSBWWDg1NV85NF81MDBNICAgICAweDAwODQwODA1CisjZGVmaW5lIFZYODU1Xzk2XzY0OE0gICAgIDB4MDA4NzA4MDUKKyNkZWZpbmUgVlg4NTVfOTdfNzUwTSAgICAgMHgwMDg5MDgwNQorI2RlZmluZSBWWDg1NV8xMDFfMDAwTSAgICAweDAwOEQwODA1CisjZGVmaW5lIFZYODU1XzEwNl81MDBNICAgIDB4MDA5NTA4MDUKKyNkZWZpbmUgVlg4NTVfMTA4XzAwME0gICAgMHgwMDk3MDgwNQorI2RlZmluZSBWWDg1NV8xMTBfMTI1TSAgICAweDAwOTkwODA1CisjZGVmaW5lIFZYODU1XzExMl8wMDBNICAgIDB4MDA5RDA4MDUKKyNkZWZpbmUgVlg4NTVfMTEzXzMwOU0gICAgMHgwMDlGMDgwNQorI2RlZmluZSBWWDg1NV8xMTVfMDAwTSAgICAweDAwQTEwODA1CisjZGVmaW5lIFZYODU1XzExOF84NDBNICAgIDB4MDBBNjA4MDUKKyNkZWZpbmUgVlg4NTVfMTE5XzAwME0gICAgMHgwMEE3MDgwNQorI2RlZmluZSBWWDg1NV8xMjFfNzUwTSAgICAweDAwQUEwODA1ICAgICAgIC8qIDEyMS43MDRNSHogKi8KKyNkZWZpbmUgVlg4NTVfMTIyXzYxNE0gICAgMHgwMEFDMDgwNQorI2RlZmluZSBWWDg1NV8xMjZfMjY2TSAgICAweDAwQjEwODA1CisjZGVmaW5lIFZYODU1XzEzMF8yNTBNICAgIDB4MDBCNjA4MDUgICAgICAvKiAxMzAuMjUwICovCisjZGVmaW5lIFZYODU1XzEzNV8wMDBNICAgIDB4MDBCRDA4MDUKKyNkZWZpbmUgVlg4NTVfMTM2XzcwME0gICAgMHgwMEJGMDgwNQorI2RlZmluZSBWWDg1NV8xMzdfNzUwTSAgICAweDAwQzEwODA1CisjZGVmaW5lIFZYODU1XzEzOF80MDBNICAgIDB4MDBDMjA4MDUKKyNkZWZpbmUgVlg4NTVfMTQ0XzMwME0gICAgMHgwMENBMDgwNQorI2RlZmluZSBWWDg1NV8xNDZfNzYwTSAgICAweDAwQ0UwODA1CisjZGVmaW5lIFZYODU1XzE0OF81MDBNCSAgMHgwMEQwMDgwNQorI2RlZmluZSBWWDg1NV8xNTNfOTIwTSAgICAweDAwNTQwNDAyCisjZGVmaW5lIFZYODU1XzE1Nl8wMDBNICAgIDB4MDA2QzA0MDUKKyNkZWZpbmUgVlg4NTVfMTU2Xzg2N00gICAgMHgwMDZFMDQwNQorI2RlZmluZSBWWDg1NV8xNTdfNTAwTSAgICAweDAwNkUwNDA1CisjZGVmaW5lIFZYODU1XzE2Ml8wMDBNICAgIDB4MDA3MTA0MDUKKyNkZWZpbmUgVlg4NTVfMTcyXzc5OE0gICAgMHgwMDc5MDQwNQorI2RlZmluZSBWWDg1NV8xODdfMDAwTSAgICAweDAwODMwNDA1CisjZGVmaW5lIFZYODU1XzE5M18yOTVNICAgIDB4MDA4NzA0MDUKKyNkZWZpbmUgVlg4NTVfMjAyXzUwME0gICAgMHgwMDhFMDQwNQorI2RlZmluZSBWWDg1NV8yMDRfMDAwTSAgICAweDAwOEYwNDA1CisjZGVmaW5lIFZYODU1XzIxOF81MDBNICAgIDB4MDA5OTA0MDUKKyNkZWZpbmUgVlg4NTVfMjI5XzUwME0gICAgMHgwMEExMDQwNQorI2RlZmluZSBWWDg1NV8yMzRfMDAwTSAgICAweDAwQTQwNDA1CisjZGVmaW5lIFZYODU1XzI2N18yNTBNICAgIDB4MDBCQjA0MDUKKyNkZWZpbmUgVlg4NTVfMjk3XzUwME0gICAgMHgwMEQwMDQwNQorI2RlZmluZSBWWDg1NV8zMzlfNTAwTSAgICAweDAwNzcwMDA1CisjZGVmaW5lIFZYODU1XzM0MF83NzJNICAgIDB4MDA3NzAwMDUKKworCiAvKiBEZWZpbml0aW9uIENSVEMgVGltaW5nIEluZGV4ICovCiAjZGVmaW5lIEhfVE9UQUxfSU5ERVggICAgICAgICAgICAgICAwCiAjZGVmaW5lIEhfQUREUl9JTkRFWCAgICAgICAgICAgICAgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmMKaW5kZXggMGYzZWQ0ZS4uMTU1NDNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9pMmMuYwpAQCAtOTcsNyArOTcsNyBAQAogCW1tMVswXSA9IGluZGV4OwogCW1zZ3NbMF0ubGVuID0gMTsgbXNnc1sxXS5sZW4gPSAxOwogCW1zZ3NbMF0uYnVmID0gbW0xOyBtc2dzWzFdLmJ1ZiA9IHBkYXRhOwotCWkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+aTJjX3N0dWZmLmFkYXB0ZXIsIG1zZ3MsIDIpOworCWkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+c2hhcmVkLT5pMmNfc3R1ZmYuYWRhcHRlciwgbXNncywgMik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMSw3ICsxMTEsNyBAQAogCW1zZ3MuYWRkciA9IHNsYXZlX2FkZHIgLyAyOwogCW1zZ3MubGVuID0gMjsKIAltc2dzLmJ1ZiA9IG1zZzsKLQlyZXR1cm4gaTJjX3RyYW5zZmVyKCZ2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuYWRhcHRlciwgJm1zZ3MsIDEpOworCXJldHVybiBpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPnNoYXJlZC0+aTJjX3N0dWZmLmFkYXB0ZXIsICZtc2dzLCAxKTsKIH0KIAogaW50IHZpYWZiX2kyY19yZWFkYnl0ZXModTggc2xhdmVfYWRkciwgdTggaW5kZXgsIHU4ICpidWZmLCBpbnQgYnVmZl9sZW4pCkBAIC0xMjUsNTMgKzEyNSw1MyBAQAogCW1tMVswXSA9IGluZGV4OwogCW1zZ3NbMF0ubGVuID0gMTsgbXNnc1sxXS5sZW4gPSBidWZmX2xlbjsKIAltc2dzWzBdLmJ1ZiA9IG1tMTsgbXNnc1sxXS5idWYgPSBidWZmOwotCWkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+aTJjX3N0dWZmLmFkYXB0ZXIsIG1zZ3MsIDIpOworCWkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+c2hhcmVkLT5pMmNfc3R1ZmYuYWRhcHRlciwgbXNncywgMik7CiAJcmV0dXJuIDA7CiB9CiAKIGludCB2aWFmYl9jcmVhdGVfaTJjX2J1cyh2b2lkICp2aWFwYXIpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgdmlhZmJfcGFyICpwYXIgPSAoc3RydWN0IHZpYWZiX3BhciAqKXZpYXBhcjsKKwlzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqaTJjX3N0dWZmID0KKwkJJigoc3RydWN0IHZpYWZiX3BhciAqKXZpYXBhciktPnNoYXJlZC0+aTJjX3N0dWZmOwogCi0Jc3RyY3B5KHBhci0+aTJjX3N0dWZmLmFkYXB0ZXIubmFtZSwgInZpYV9pMmMiKTsKLQlwYXItPmkyY19zdHVmZi5pMmNfcG9ydCA9IDB4MDsKLQlwYXItPmkyY19zdHVmZi5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5pZCA9IDB4MDFGRkZGOwotCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuY2xhc3MgPSAwOwotCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuYWxnb19kYXRhID0gJnBhci0+aTJjX3N0dWZmLmFsZ287Ci0JcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5kZXYucGFyZW50ID0gTlVMTDsKLQlwYXItPmkyY19zdHVmZi5hbGdvLnNldHNkYSA9IHZpYV9pMmNfc2V0c2RhOwotCXBhci0+aTJjX3N0dWZmLmFsZ28uc2V0c2NsID0gdmlhX2kyY19zZXRzY2w7Ci0JcGFyLT5pMmNfc3R1ZmYuYWxnby5nZXRzZGEgPSB2aWFfaTJjX2dldHNkYTsKLQlwYXItPmkyY19zdHVmZi5hbGdvLmdldHNjbCA9IHZpYV9pMmNfZ2V0c2NsOwotCXBhci0+aTJjX3N0dWZmLmFsZ28udWRlbGF5ID0gNDA7Ci0JcGFyLT5pMmNfc3R1ZmYuYWxnby50aW1lb3V0ID0gMjA7Ci0JcGFyLT5pMmNfc3R1ZmYuYWxnby5kYXRhID0gJnBhci0+aTJjX3N0dWZmOworCXN0cmNweShpMmNfc3R1ZmYtPmFkYXB0ZXIubmFtZSwgInZpYV9pMmMiKTsKKwlpMmNfc3R1ZmYtPmkyY19wb3J0ID0gMHgwOworCWkyY19zdHVmZi0+YWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOworCWkyY19zdHVmZi0+YWRhcHRlci5pZCA9IDB4MDFGRkZGOworCWkyY19zdHVmZi0+YWRhcHRlci5jbGFzcyA9IDA7CisJaTJjX3N0dWZmLT5hZGFwdGVyLmFsZ29fZGF0YSA9ICZpMmNfc3R1ZmYtPmFsZ287CisJaTJjX3N0dWZmLT5hZGFwdGVyLmRldi5wYXJlbnQgPSBOVUxMOworCWkyY19zdHVmZi0+YWxnby5zZXRzZGEgPSB2aWFfaTJjX3NldHNkYTsKKwlpMmNfc3R1ZmYtPmFsZ28uc2V0c2NsID0gdmlhX2kyY19zZXRzY2w7CisJaTJjX3N0dWZmLT5hbGdvLmdldHNkYSA9IHZpYV9pMmNfZ2V0c2RhOworCWkyY19zdHVmZi0+YWxnby5nZXRzY2wgPSB2aWFfaTJjX2dldHNjbDsKKwlpMmNfc3R1ZmYtPmFsZ28udWRlbGF5ID0gNDA7CisJaTJjX3N0dWZmLT5hbGdvLnRpbWVvdXQgPSAyMDsKKwlpMmNfc3R1ZmYtPmFsZ28uZGF0YSA9IGkyY19zdHVmZjsKIAotCWkyY19zZXRfYWRhcGRhdGEoJnBhci0+aTJjX3N0dWZmLmFkYXB0ZXIsICZwYXItPmkyY19zdHVmZik7CisJaTJjX3NldF9hZGFwZGF0YSgmaTJjX3N0dWZmLT5hZGFwdGVyLCBpMmNfc3R1ZmYpOwogCiAJLyogUmFpc2UgU0NMIGFuZCBTREEgKi8KLQlwYXItPmkyY19zdHVmZi5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKLQl2aWFfaTJjX3NldHNkYSgmcGFyLT5pMmNfc3R1ZmYsIDEpOwotCXZpYV9pMmNfc2V0c2NsKCZwYXItPmkyY19zdHVmZiwgMSk7CisJaTJjX3N0dWZmLT5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKKwl2aWFfaTJjX3NldHNkYShpMmNfc3R1ZmYsIDEpOworCXZpYV9pMmNfc2V0c2NsKGkyY19zdHVmZiwgMSk7CiAKLQlwYXItPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7Ci0JdmlhX2kyY19zZXRzZGEoJnBhci0+aTJjX3N0dWZmLCAxKTsKLQl2aWFfaTJjX3NldHNjbCgmcGFyLT5pMmNfc3R1ZmYsIDEpOworCWkyY19zdHVmZi0+aTJjX3BvcnQgPSBHUElPUE9SVElOREVYOworCXZpYV9pMmNfc2V0c2RhKGkyY19zdHVmZiwgMSk7CisJdmlhX2kyY19zZXRzY2woaTJjX3N0dWZmLCAxKTsKIAl1ZGVsYXkoMjApOwogCi0JcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZwYXItPmkyY19zdHVmZi5hZGFwdGVyKTsKKwlyZXQgPSBpMmNfYml0X2FkZF9idXMoJmkyY19zdHVmZi0+YWRhcHRlcik7CiAJaWYgKHJldCA9PSAwKQotCQlERUJVR19NU0coIkkyQyBidXMgJXMgcmVnaXN0ZXJlZC5cbiIsCi0JCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIubmFtZSk7CisJCURFQlVHX01TRygiSTJDIGJ1cyAlcyByZWdpc3RlcmVkLlxuIiwgaTJjX3N0dWZmLT5hZGFwdGVyLm5hbWUpOwogCWVsc2UKIAkJREVCVUdfTVNHKCJGYWlsZWQgdG8gcmVnaXN0ZXIgSTJDIGJ1cyAlcy5cbiIsCi0JCQlwYXItPmkyY19zdHVmZi5hZGFwdGVyLm5hbWUpOworCQkJaTJjX3N0dWZmLT5hZGFwdGVyLm5hbWUpOwogCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgdmlhZmJfZGVsZXRlX2kyY19idXNzKHZvaWQgKnBhcikKIHsKLQlpMmNfZGVsX2FkYXB0ZXIoJigoc3RydWN0IHZpYWZiX3BhciAqKXBhciktPmkyY19zdHVmZi5hZGFwdGVyKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJigoc3RydWN0IHZpYWZiX3BhciAqKXBhciktPnNoYXJlZC0+aTJjX3N0dWZmLmFkYXB0ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKaW5kZXggNzI4MzNmMy4uNTZlYzY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0yMCwxMSArMjAsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjZGVmaW5lIF9NQVNURVJfRklMRQogCiAjaW5jbHVkZSAiZ2xvYmFsLmgiCiAKLXN0YXRpYyBpbnQgTUFYX0NVUlMgPSAzMjsKIHN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGVmYXVsdF92YXI7CiBzdGF0aWMgY2hhciAqdmlhZmJfbmFtZSA9ICJWaWEiOwogc3RhdGljIHUzMiBwc2V1ZG9fcGFsWzE3XTsKQEAgLTMzLDEyICszNCwxMSBAQAogc3RhdGljIGNoYXIgKnZpYWZiX21vZGUgPSAiNjQweDQ4MCI7CiBzdGF0aWMgY2hhciAqdmlhZmJfbW9kZTEgPSAiNjQweDQ4MCI7CiAKK3N0YXRpYyBpbnQgdmlhZmJfYWNjZWwgPSAxOworCiAvKiBBZGRlZCBmb3Igc3BlY2lmeWluZyBhY3RpdmUgZGV2aWNlcy4qLwogY2hhciAqdmlhZmJfYWN0aXZlX2RldiA9ICIiOwogCi0vKiBBZGRlZCBmb3Igc3BlY2lmeWluZyB2aWRlbyBvbiBkZXZpY2VzLiovCi1jaGFyICp2aWFmYl92aWRlb19kZXYgPSAiIjsKLQogLypBZGRlZCBmb3Igc3BlY2lmeSBsY2Qgb3V0cHV0IHBvcnQqLwogY2hhciAqdmlhZmJfbGNkX3BvcnQgPSAiIjsKIGNoYXIgKnZpYWZiX2R2aV9wb3J0ID0gIiI7CkBAIC01MCw3MSArNTAsMjAgQEAKIAkqc2VjX3Zhcik7CiBzdGF0aWMgdm9pZCByZXRyaWV2ZV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZwogCSpzZXR0aW5nX2luZm8pOwotc3RhdGljIHZvaWQgdmlhZmJfc2V0X3ZpZGVvX2RldmljZSh1MzIgdmlkZW9fZGV2X2luZm8pOwotc3RhdGljIHZvaWQgdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSh1MzIgKnZpZGVvX2Rldl9pbmZvKTsKLQotLyogTW9kZSBpbmZvcm1hdGlvbiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB2aWFmYl9tb2RlaW5mbyB2aWFmYl9tb2RlbnRyeVtdID0gewotCXs0ODAsIDY0MCwgVklBX1JFU180ODBYNjQwfSwKLQl7NjQwLCA0ODAsIFZJQV9SRVNfNjQwWDQ4MH0sCi0JezgwMCwgNDgwLCBWSUFfUkVTXzgwMFg0ODB9LAotCXs4MDAsIDYwMCwgVklBX1JFU184MDBYNjAwfSwKLQl7MTAyNCwgNzY4LCBWSUFfUkVTXzEwMjRYNzY4fSwKLQl7MTE1MiwgODY0LCBWSUFfUkVTXzExNTJYODY0fSwKLQl7MTI4MCwgMTAyNCwgVklBX1JFU18xMjgwWDEwMjR9LAotCXsxNjAwLCAxMjAwLCBWSUFfUkVTXzE2MDBYMTIwMH0sCi0JezE0NDAsIDEwNTAsIFZJQV9SRVNfMTQ0MFgxMDUwfSwKLQl7MTI4MCwgNzY4LCBWSUFfUkVTXzEyODBYNzY4LH0sCi0JezEyODAsIDgwMCwgVklBX1JFU18xMjgwWDgwMH0sCi0JezEyODAsIDk2MCwgVklBX1JFU18xMjgwWDk2MH0sCi0JezE5MjAsIDE0NDAsIFZJQV9SRVNfMTkyMFgxNDQwfSwKLQl7ODQ4LCA0ODAsIFZJQV9SRVNfODQ4WDQ4MH0sCi0JezE0MDAsIDEwNTAsIFZJQV9SRVNfMTQwMFgxMDUwfSwKLQl7NzIwLCA0ODAsIFZJQV9SRVNfNzIwWDQ4MH0sCi0JezcyMCwgNTc2LCBWSUFfUkVTXzcyMFg1NzZ9LAotCXsxMDI0LCA1MTIsIFZJQV9SRVNfMTAyNFg1MTJ9LAotCXsxMDI0LCA1NzYsIFZJQV9SRVNfMTAyNFg1NzZ9LAotCXsxMDI0LCA2MDAsIFZJQV9SRVNfMTAyNFg2MDB9LAotCXsxMjgwLCA3MjAsIFZJQV9SRVNfMTI4MFg3MjB9LAotCXsxOTIwLCAxMDgwLCBWSUFfUkVTXzE5MjBYMTA4MH0sCi0JezEzNjYsIDc2OCwgVklBX1JFU18xMzY4WDc2OH0sCi0JezE2ODAsIDEwNTAsIFZJQV9SRVNfMTY4MFgxMDUwfSwKLQl7OTYwLCA2MDAsIFZJQV9SRVNfOTYwWDYwMH0sCi0JezEwMDAsIDYwMCwgVklBX1JFU18xMDAwWDYwMH0sCi0JezEwMjQsIDU3NiwgVklBX1JFU18xMDI0WDU3Nn0sCi0JezEwMjQsIDYwMCwgVklBX1JFU18xMDI0WDYwMH0sCi0JezEwODgsIDYxMiwgVklBX1JFU18xMDg4WDYxMn0sCi0JezExNTIsIDcyMCwgVklBX1JFU18xMTUyWDcyMH0sCi0JezEyMDAsIDcyMCwgVklBX1JFU18xMjAwWDcyMH0sCi0JezEyODAsIDYwMCwgVklBX1JFU18xMjgwWDYwMH0sCi0JezEzNjAsIDc2OCwgVklBX1JFU18xMzYwWDc2OH0sCi0JezE0NDAsIDkwMCwgVklBX1JFU18xNDQwWDkwMH0sCi0JezE2MDAsIDkwMCwgVklBX1JFU18xNjAwWDkwMH0sCi0JezE2MDAsIDEwMjQsIFZJQV9SRVNfMTYwMFgxMDI0fSwKLQl7MTc5MiwgMTM0NCwgVklBX1JFU18xNzkyWDEzNDR9LAotCXsxODU2LCAxMzkyLCBWSUFfUkVTXzE4NTZYMTM5Mn0sCi0JezE5MjAsIDEyMDAsIFZJQV9SRVNfMTkyMFgxMjAwfSwKLQl7MjA0OCwgMTUzNiwgVklBX1JFU18yMDQ4WDE1MzZ9LAotCXswLCAwLCBWSUFfUkVTX0lOVkFMSUR9Ci19OwogCiBzdGF0aWMgc3RydWN0IGZiX29wcyB2aWFmYl9vcHM7CiAKLXN0YXRpYyBpbnQgdmlhZmJfdXBkYXRlX2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgc3RydWN0IGZiX2luZm8gKmluZm8pCisKK3N0YXRpYyB2b2lkIHZpYWZiX3VwZGF0ZV9maXgoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHZpYWZiX3BhciAqcHBhcjsKLQlwcGFyID0gaW5mby0+cGFyOworCXUzMiBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CiAKLQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl91cGRhdGVfZml4IVxuIik7Ci0KLQlmaXgtPnZpc3VhbCA9Ci0JICAgIHBwYXItPmJwcCA9PSA4ID8gRkJfVklTVUFMX1BTRVVET0NPTE9SIDogRkJfVklTVUFMX1RSVUVDT0xPUjsKLQlmaXgtPmxpbmVfbGVuZ3RoID0gcHBhci0+bGluZWxlbmd0aDsKLQotCXJldHVybiAwOworCWluZm8tPmZpeC52aXN1YWwgPQorCQlicHAgPT0gOCA/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0KKwkJKChpbmZvLT52YXIueHJlc192aXJ0dWFsICsgNykgJiB+NykgKiBicHAgLyA4OwogfQogCi0KIHN0YXRpYyB2b2lkIHZpYWZiX3NldHVwX2ZpeGluZm8oc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCiAJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbykKIHsKQEAgLTEyMyw4ICs3Miw2IEBACiAKIAlmaXgtPnNtZW1fc3RhcnQgPSB2aWFwYXJpbmZvLT5mYm1lbTsKIAlmaXgtPnNtZW1fbGVuID0gdmlhcGFyaW5mby0+ZmJtZW1fZnJlZTsKLQlmaXgtPm1taW9fc3RhcnQgPSB2aWFwYXJpbmZvLT5tbWlvX2Jhc2U7Ci0JZml4LT5tbWlvX2xlbiA9IHZpYXBhcmluZm8tPm1taW9fbGVuOwogCiAJZml4LT50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwogCWZpeC0+dHlwZV9hdXggPSAwOwpAQCAtMTQ3LDI4ICs5NCwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB2aWFmYl91cGRhdGVfdmlhZmJfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCB2aWFmYl9wYXIgKnBwYXI7Ci0KLQlwcGFyID0gaW5mby0+cGFyOwotCXBwYXItPmJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKLQlwcGFyLT5saW5lbGVuZ3RoID0gKChpbmZvLT52YXIueHJlc192aXJ0dWFsICsgNykgJiB+NykgKiBwcGFyLT5icHAgLyA4OwotCXBwYXItPmhyZXMgPSBpbmZvLT52YXIueHJlczsKLQlwcGFyLT52cmVzID0gaW5mby0+dmFyLnlyZXM7Ci0JcHBhci0+eG9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0OwotCXBwYXItPnlvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldDsKLX0KLQogc3RhdGljIGludCB2aWFmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCiAJc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJaW50IHZtb2RlX2luZGV4LCBodG90YWwsIHZ0b3RhbDsKLQlzdHJ1Y3QgdmlhZmJfcGFyICpwcGFyOworCXN0cnVjdCB2aWFmYl9wYXIgKnBwYXIgPSBpbmZvLT5wYXI7CiAJdTMyIGxvbmdfcmVmcmVzaDsKLQlzdHJ1Y3QgdmlhZmJfcGFyICpwX3ZpYWZiX3BhcjsKLQlwcGFyID0gaW5mby0+cGFyOwotCiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9jaGVja192YXIhXG4iKTsKIAkvKiBTYW5pdHkgY2hlY2sgKi8KQEAgLTIxMiwyMyArMTQzLDIxIEBACiAKIAkvKiBBZGp1c3QgdmFyIGFjY29yZGluZyB0byBvdXIgZHJpdmVyJ3Mgb3duIHRhYmxlICovCiAJdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8odmFyLCB2aWFmYl9yZWZyZXNoLCB2bW9kZV9pbmRleCk7Ci0KLQkvKiBUaGlzIGlzIGluZGVlZCBhIHBhdGNoIGZvciBWVDMzNTMgKi8KLQlpZiAoIWluZm8tPnBhcikKLQkJcmV0dXJuIC0xOwotCXBfdmlhZmJfcGFyID0gKHN0cnVjdCB2aWFmYl9wYXIgKilpbmZvLT5wYXI7Ci0JaWYgKHBfdmlhZmJfcGFyLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwKQotCQl2YXItPmFjY2VsX2ZsYWdzID0gMDsKKwlpZiAoaW5mby0+dmFyLmFjY2VsX2ZsYWdzICYgRkJfQUNDRUxGX1RFWFQgJiYKKwkJIXBwYXItPnNoYXJlZC0+ZW5naW5lX21taW8pCisJCWluZm8tPnZhci5hY2NlbF9mbGFncyA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWFmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKIAlpbnQgdm1vZGVfaW5kZXg7CiAJaW50IHZtb2RlX2luZGV4MSA9IDA7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfc2V0X3BhciFcbiIpOwogCisJdmlhcGFyLT5kZXB0aCA9IGZiX2dldF9jb2xvcl9kZXB0aCgmaW5mby0+dmFyLCAmaW5mby0+Zml4KTsKIAl2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLAogCQkJICAgICAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLCB2aWFmYl9yZWZyZXNoLCAwKTsKIApAQCAtMjUyLDIxICsxODEsMTIgQEAKIAkJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgdm1vZGVfaW5kZXgxLAogCQkJdmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxKTsKIAotCQkvKldlIHNob3VsZCBzZXQgbWVtb3J5IG9mZnNldCBhY2NvcmRpbmcgdmlydHVhbF94ICovCi0JCS8qRml4IG1lOnB1dCB0aGlzIGZ1bmN0aW9uIGludG8gdmlhZmJfc2V0bW9kZSAqLwotCQl2aWFmYl9tZW1vcnlfcGl0Y2hfcGF0Y2goaW5mbyk7Ci0KLQkJLyogVXBkYXRlICoqKmZiX3BhciBpbmZvcm1hdGlvbiAqLwotCQl2aWFmYl91cGRhdGVfdmlhZmJfcGFyKGluZm8pOwotCi0JCS8qIFVwZGF0ZSBvdGhlciBmaXhlZCBpbmZvcm1hdGlvbiAqLwotCQl2aWFmYl91cGRhdGVfZml4KCZpbmZvLT5maXgsIGluZm8pOworCQl2aWFmYl91cGRhdGVfZml4KGluZm8pOwogCQl2aWFmYl9icHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0JCS8qIFVwZGF0ZSB2aWFmYl9hY2NlbCwgaXQgaXMgbmVjZXNzYXJ5IHRvIG91ciAyRCBhY2NlbGVyYXRlICovCi0JCXZpYWZiX2FjY2VsID0gaW5mby0+dmFyLmFjY2VsX2ZsYWdzOwotCi0JCWlmICh2aWFmYl9hY2NlbCkKLQkJCXZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOworCQlpZiAoaW5mby0+dmFyLmFjY2VsX2ZsYWdzICYgRkJfQUNDRUxGX1RFWFQpCisJCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CisJCWVsc2UKKwkJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTAzLDEyICs0MjMsNyBAQAogCSAgICB2YXItPmJpdHNfcGVyX3BpeGVsIC8gMTY7CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJcbnZpYWZiX3Bhbl9kaXNwbGF5LG9mZnNldCA9JWQgIiwgb2Zmc2V0KTsKLQotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4NDgsIDB4M2Q0LCAoKG9mZnNldCA+PiAyNCkgJiAweDMpLCAweDMpOwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4MzQsIDB4M2Q0LCAoKG9mZnNldCA+PiAxNikgJiAweGZmKSwgMHhmZik7Ci0JdmlhZmJfd3JpdGVfcmVnX21hc2soMHgwYywgMHgzZDQsICgob2Zmc2V0ID4+IDgpICYgMHhmZiksIDB4ZmYpOwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4MGQsIDB4M2Q0LCAob2Zmc2V0ICYgMHhmZiksIDB4ZmYpOwotCisJdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcyhvZmZzZXQpOwogCXJldHVybiAwOwogfQogCkBAIC01NjAsNyArNDc1LDYgQEAKIAogCXUzMiBfX3VzZXIgKmFyZ3AgPSAodTMyIF9fdXNlciAqKSBhcmc7CiAJdTMyIGdwdTMyOwotCXUzMiB2aWRlb19kZXZfaW5mbyA9IDA7CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pb2N0bDogMHglWCAhIVxuIiwgY21kKTsKIAltZW1zZXQoJnUsIDAsIHNpemVvZih1KSk7CkBAIC03OTIsMTUgKzcwNiw2IEBACiAJCWlmIChwdXRfdXNlcihzdGF0ZV9pbmZvLCBhcmdwKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKLQljYXNlIFZJQUZCX1NFVF9WSURFT19ERVZJQ0U6Ci0JCWdldF91c2VyKHZpZGVvX2Rldl9pbmZvLCBhcmdwKTsKLQkJdmlhZmJfc2V0X3ZpZGVvX2RldmljZSh2aWRlb19kZXZfaW5mbyk7Ci0JCWJyZWFrOwotCWNhc2UgVklBRkJfR0VUX1ZJREVPX0RFVklDRToKLQkJdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSgmdmlkZW9fZGV2X2luZm8pOwotCQlpZiAocHV0X3VzZXIodmlkZW9fZGV2X2luZm8sIGFyZ3ApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwogCWNhc2UgVklBRkJfU1lOQ19TVVJGQUNFOgogCQlERUJVR19NU0coS0VSTl9JTkZPICJsb2JvIFZJQUZCX1NZTkNfU1VSRkFDRVxuIik7CiAJCWJyZWFrOwpAQCAtODY2LDEwICs3NzEsMTIgQEAKIHN0YXRpYyB2b2lkIHZpYWZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAogCWNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKIHsKLQl1MzIgY29sID0gMCwgcm9wID0gMDsKLQlpbnQgcGl0Y2g7CisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCB2aWFmYl9zaGFyZWQgKnNoYXJlZCA9IHZpYXBhci0+c2hhcmVkOworCXUzMiBmZ19jb2xvcjsKKwl1OCByb3A7CiAKLQlpZiAoIXZpYWZiX2FjY2VsKSB7CisJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQgfHwgIXNoYXJlZC0+aHdfYml0Ymx0KSB7CiAJCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKIAkJcmV0dXJuOwogCX0KQEAgLTg3Nyw2OCArNzg0LDMxIEBACiAJaWYgKCFyZWN0LT53aWR0aCB8fCAhcmVjdC0+aGVpZ2h0KQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKHJlY3QtPnJvcCkgewotCWNhc2UgUk9QX1hPUjoKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SKQorCQlmZ19jb2xvciA9ICgodTMyICopaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlY3QtPmNvbG9yXTsKKwllbHNlCisJCWZnX2NvbG9yID0gcmVjdC0+Y29sb3I7CisKKwlpZiAocmVjdC0+cm9wID09IFJPUF9YT1IpCiAJCXJvcCA9IDB4NUE7Ci0JCWJyZWFrOwotCWNhc2UgUk9QX0NPUFk6Ci0JZGVmYXVsdDoKKwllbHNlCiAJCXJvcCA9IDB4RjA7Ci0JCWJyZWFrOwotCX0KIAotCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7Ci0JY2FzZSA4OgotCQljb2wgPSByZWN0LT5jb2xvcjsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVjdC0+Y29sb3JdOwotCQlicmVhazsKLQljYXNlIDMyOgotCQljb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWN0LT5jb2xvcl07Ci0JCWJyZWFrOwotCX0KLQotCS8qIEJpdEJsdCBTb3VyY2UgQWRkcmVzcyAqLwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7Ci0JLyogU291cmNlIEJhc2UgQWRkcmVzcyAqLwotCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOwotCS8qIERlc3RpbmF0aW9uIEJhc2UgQWRkcmVzcyAqLwotCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQotCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCi0JCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOwotCS8qIFBpdGNoICovCi0JcGl0Y2ggPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjc7Ci0Jd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAotCQkgICAoKChwaXRjaCAqCi0JCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzKSA+PiAzKSB8Ci0JCSAgICAgICgoKHBpdGNoICogaW5mby0+Ci0JCSAgICAgIHZhci5iaXRzX3Blcl9waXhlbCA+PiAzKSA+PiAzKSA8PCAxNikpLAotCQkgICAgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QSVRDSCk7Ci0JLyogQml0Qmx0IERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KLQl3cml0ZWwoKChyZWN0LT5keSA8PCAxNikgfCByZWN0LT5keCksCi0JCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVFBPUyk7Ci0JLyogRGltZW5zaW9uOiB3aWR0aCAmIGhlaWdodCAqLwotCXdyaXRlbCgoKChyZWN0LT5oZWlnaHQgLSAxKSA8PCAxNikgfCAocmVjdC0+d2lkdGggLSAxKSksCi0JCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RJTUVOU0lPTik7Ci0JLyogRm9yZ3JvdW5kIGNvbG9yIG9yIERlc3RpbmF0aW9uIGNvbG9yICovCi0Jd3JpdGVsKGNvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRkdDT0xPUik7Ci0JLyogR0UgQ29tbWFuZCAqLwotCXdyaXRlbCgoMHgwMSB8IDB4MjAwMCB8IChyb3AgPDwgMjQpKSwKLQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VDTUQpOwotCisJREVCVUdfTVNHKEtFUk5fREVCVUcgInZpYWZiIDJEIGVuZ2luZTogZmlsbHJlY3RcbiIpOworCWlmIChzaGFyZWQtPmh3X2JpdGJsdChzaGFyZWQtPmVuZ2luZV9tbWlvLCBWSUFfQklUQkxUX0ZJTEwsCisJCXJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKKwkJdmlhcGFyLT52cmFtX2FkZHIsIGluZm8tPmZpeC5saW5lX2xlbmd0aCwgcmVjdC0+ZHgsIHJlY3QtPmR5LAorCQlOVUxMLCAwLCAwLCAwLCAwLCBmZ19jb2xvciwgMCwgcm9wKSkKKwkJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOwogfQogCiBzdGF0aWMgdm9pZCB2aWFmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAljb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCiB7Ci0JdTMyIGR5ID0gYXJlYS0+ZHksIHN5ID0gYXJlYS0+c3ksIGRpcmVjdGlvbiA9IDB4MDsKLQl1MzIgc3ggPSBhcmVhLT5zeCwgZHggPSBhcmVhLT5keCwgd2lkdGggPSBhcmVhLT53aWR0aDsKLQlpbnQgcGl0Y2g7CisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCB2aWFmYl9zaGFyZWQgKnNoYXJlZCA9IHZpYXBhci0+c2hhcmVkOwogCi0JREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfY29weWFyZWEhIVxuIik7Ci0KLQlpZiAoIXZpYWZiX2FjY2VsKSB7CisJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQgfHwgIXNoYXJlZC0+aHdfYml0Ymx0KSB7CiAJCWNmYl9jb3B5YXJlYShpbmZvLCBhcmVhKTsKIAkJcmV0dXJuOwogCX0KQEAgLTk0NiwyNjMgKzgxNiwxNDggQEAKIAlpZiAoIWFyZWEtPndpZHRoIHx8ICFhcmVhLT5oZWlnaHQpCiAJCXJldHVybjsKIAotCWlmIChzeSA8IGR5KSB7Ci0JCWR5ICs9IGFyZWEtPmhlaWdodCAtIDE7Ci0JCXN5ICs9IGFyZWEtPmhlaWdodCAtIDE7Ci0JCWRpcmVjdGlvbiB8PSAweDQwMDA7Ci0JfQotCi0JaWYgKHN4IDwgZHgpIHsKLQkJZHggKz0gd2lkdGggLSAxOwotCQlzeCArPSB3aWR0aCAtIDE7Ci0JCWRpcmVjdGlvbiB8PSAweDgwMDA7Ci0JfQotCi0JLyogU291cmNlIEJhc2UgQWRkcmVzcyAqLwotCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQotCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCi0JCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOwotCS8qIERlc3RpbmF0aW9uIEJhc2UgQWRkcmVzcyAqLwotCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQotCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCi0JCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOwotCS8qIFBpdGNoICovCi0JcGl0Y2ggPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjc7Ci0JLyogVklBX1BJVENIX0VOQUJMRSBjYW4gYmUgb21pdHRlZCBub3cuICovCi0Jd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAotCQkgICAoKChwaXRjaCAqCi0JCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzKSA+PiAzKSB8ICgoKHBpdGNoICoKLQkJCQkJCQkJaW5mby0+dmFyLgotCQkJCQkJCQliaXRzX3Blcl9waXhlbAotCQkJCQkJCQk+PiAzKSA+PiAzKQotCQkJCQkJCSAgICAgIDw8IDE2KSksCi0JCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOwotCS8qIEJpdEJsdCBTb3VyY2UgQWRkcmVzcyAqLwotCXdyaXRlbCgoKHN5IDw8IDE2KSB8IHN4KSwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDUE9TKTsKLQkvKiBCaXRCbHQgRGVzdGluYXRpb24gQWRkcmVzcyAqLwotCXdyaXRlbCgoKGR5IDw8IDE2KSB8IGR4KSwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKLQkvKiBEaW1lbnNpb246IHdpZHRoICYgaGVpZ2h0ICovCi0Jd3JpdGVsKCgoKGFyZWEtPmhlaWdodCAtIDEpIDw8IDE2KSB8IChhcmVhLT53aWR0aCAtIDEpKSwKLQkJICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRElNRU5TSU9OKTsKLQkvKiBHRSBDb21tYW5kICovCi0Jd3JpdGVsKCgweDAxIHwgZGlyZWN0aW9uIHwgKDB4Q0MgPDwgMjQpKSwKLQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VDTUQpOwotCisJREVCVUdfTVNHKEtFUk5fREVCVUcgInZpYWZiIDJEIGVuZ2luZTogY29weWFyZWFcbiIpOworCWlmIChzaGFyZWQtPmh3X2JpdGJsdChzaGFyZWQtPmVuZ2luZV9tbWlvLCBWSUFfQklUQkxUX0NPTE9SLAorCQlhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0LCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsCisJCXZpYXBhci0+dnJhbV9hZGRyLCBpbmZvLT5maXgubGluZV9sZW5ndGgsIGFyZWEtPmR4LCBhcmVhLT5keSwKKwkJTlVMTCwgdmlhcGFyLT52cmFtX2FkZHIsIGluZm8tPmZpeC5saW5lX2xlbmd0aCwKKwkJYXJlYS0+c3gsIGFyZWEtPnN5LCAwLCAwLCAwKSkKKwkJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOwogfQogCiBzdGF0aWMgdm9pZCB2aWFmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCiAJY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKIHsKLQl1MzIgc2l6ZSwgYmdfY29sID0gMCwgZmdfY29sID0gMCwgKnVkYXRhOwotCWludCBpOwotCWludCBwaXRjaDsKKwlzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHZpYWZiX3NoYXJlZCAqc2hhcmVkID0gdmlhcGFyLT5zaGFyZWQ7CisJdTMyIGZnX2NvbG9yID0gMCwgYmdfY29sb3IgPSAwOworCXU4IG9wOwogCi0JaWYgKCF2aWFmYl9hY2NlbCkgeworCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIHx8ICFzaGFyZWQtPmh3X2JpdGJsdCB8fAorCQkoaW1hZ2UtPmRlcHRoICE9IDEgJiYgaW1hZ2UtPmRlcHRoICE9IHZpYXBhci0+ZGVwdGgpKSB7CiAJCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwogCQlyZXR1cm47CiAJfQogCi0JdWRhdGEgPSAodTMyICopIGltYWdlLT5kYXRhOworCWlmIChpbWFnZS0+ZGVwdGggPT0gMSkgeworCQlvcCA9IFZJQV9CSVRCTFRfTU9OTzsKKwkJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUikgeworCQkJZmdfY29sb3IgPQorCQkJCSgodTMyICopaW5mby0+cHNldWRvX3BhbGV0dGUpW2ltYWdlLT5mZ19jb2xvcl07CisJCQliZ19jb2xvciA9CisJCQkJKCh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJfSBlbHNlIHsKKwkJCWZnX2NvbG9yID0gaW1hZ2UtPmZnX2NvbG9yOworCQkJYmdfY29sb3IgPSBpbWFnZS0+YmdfY29sb3I7CisJCX0KKwl9IGVsc2UKKwkJb3AgPSBWSUFfQklUQkxUX0NPTE9SOwogCi0Jc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKLQljYXNlIDg6Ci0JCWJnX2NvbCA9IGltYWdlLT5iZ19jb2xvcjsKLQkJZmdfY29sID0gaW1hZ2UtPmZnX2NvbG9yOwotCQlicmVhazsKLQljYXNlIDE2OgotCQliZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOwotCQlmZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOwotCQlicmVhazsKLQljYXNlIDMyOgotCQliZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOwotCQlmZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOwotCQlicmVhazsKLQl9Ci0Jc2l6ZSA9IGltYWdlLT53aWR0aCAqIGltYWdlLT5oZWlnaHQ7Ci0KLQkvKiBTb3VyY2UgQmFzZSBBZGRyZXNzICovCi0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDQkFTRSk7Ci0JLyogRGVzdGluYXRpb24gQmFzZSBBZGRyZXNzICovCi0Jd3JpdGVsKCgodW5zaWduZWQgbG9uZykgKGluZm8tPnNjcmVlbl9iYXNlKSAtCi0JCSAgICh1bnNpZ25lZCBsb25nKSB2aWFmYl9GQl9NTSkgPj4gMywKLQkJICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUQkFTRSk7Ci0JLyogUGl0Y2ggKi8KLQlwaXRjaCA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICsgNykgJiB+NzsKLQl3cml0ZWwoVklBX1BJVENIX0VOQUJMRSB8Ci0JCSAgICgoKHBpdGNoICoKLQkJICAgICAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMpID4+IDMpIHwgKCgocGl0Y2ggKgotCQkJCQkJCQlpbmZvLT52YXIuCi0JCQkJCQkJCWJpdHNfcGVyX3BpeGVsCi0JCQkJCQkJCT4+IDMpID4+IDMpCi0JCQkJCQkJICAgICAgPDwgMTYpKSwKLQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QSVRDSCk7Ci0JLyogQml0Qmx0IFNvdXJjZSBBZGRyZXNzICovCi0Jd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDUE9TKTsKLQkvKiBCaXRCbHQgRGVzdGluYXRpb24gQWRkcmVzcyAqLwotCXdyaXRlbCgoKGltYWdlLT5keSA8PCAxNikgfCBpbWFnZS0+ZHgpLAotCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RQT1MpOwotCS8qIERpbWVuc2lvbjogd2lkdGggJiBoZWlnaHQgKi8KLQl3cml0ZWwoKCgoaW1hZ2UtPmhlaWdodCAtIDEpIDw8IDE2KSB8IChpbWFnZS0+d2lkdGggLSAxKSksCi0JCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RJTUVOU0lPTik7Ci0JLyogZmIgY29sb3IgKi8KLQl3cml0ZWwoZmdfY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19GR0NPTE9SKTsKLQkvKiBiZyBjb2xvciAqLwotCXdyaXRlbChiZ19jb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0JHQ09MT1IpOwotCS8qIEdFIENvbW1hbmQgKi8KLQl3cml0ZWwoMHhDQzAyMDE0MiwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VDTUQpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemUgLyA0OyBpKyspIHsKLQkJd3JpdGVsKCp1ZGF0YSwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9NTUlPX0JMVEJBU0UpOwotCQl1ZGF0YSsrOwotCX0KLQorCURFQlVHX01TRyhLRVJOX0RFQlVHICJ2aWFmYiAyRCBlbmdpbmU6IGltYWdlYmxpdFxuIik7CisJaWYgKHNoYXJlZC0+aHdfYml0Ymx0KHNoYXJlZC0+ZW5naW5lX21taW8sIG9wLAorCQlpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQsIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKKwkJdmlhcGFyLT52cmFtX2FkZHIsIGluZm8tPmZpeC5saW5lX2xlbmd0aCwgaW1hZ2UtPmR4LCBpbWFnZS0+ZHksCisJCSh1MzIgKilpbWFnZS0+ZGF0YSwgMCwgMCwgMCwgMCwgZmdfY29sb3IsIGJnX2NvbG9yLCAwKSkKKwkJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyBpbnQgdmlhZmJfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpCiB7Ci0JdTMyIHRlbXAsIHh4LCB5eSwgYmdfY29sID0gMCwgZmdfY29sID0gMDsKLQlpbnQgaSwgaiA9IDA7Ci0Jc3RhdGljIGludCBod19jdXJzb3I7Ci0Jc3RydWN0IHZpYWZiX3BhciAqcF92aWFmYl9wYXI7CisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyID0gaW5mby0+cGFyOworCXZvaWQgX19pb21lbSAqZW5naW5lID0gdmlhcGFyLT5zaGFyZWQtPmVuZ2luZV9tbWlvOworCXUzMiB0ZW1wLCB4eCwgeXksIGJnX2NvbG9yID0gMCwgZmdfY29sb3IgPSAwLAorCQljaGlwX25hbWUgPSB2aWFwYXItPnNoYXJlZC0+Y2hpcF9pbmZvLmdmeF9jaGlwX25hbWU7CisJaW50IGksIGogPSAwLCBjdXJfc2l6ZSA9IDY0OwogCi0JaWYgKHZpYWZiX2FjY2VsKQotCQlod19jdXJzb3IgPSAxOwotCi0JaWYgKCF2aWFmYl9hY2NlbCkgewotCQlpZiAoaHdfY3Vyc29yKSB7Ci0JCQl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT0ZGKTsKLQkJCWh3X2N1cnNvciA9IDA7Ci0JCX0KLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKCgoKHN0cnVjdCB2aWFmYl9wYXIgKikoaW5mby0+cGFyKSktPmlnYV9wYXRoID09IElHQTIpCi0JICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikpCisJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQgfHwgaW5mbyAhPSB2aWFmYmluZm8pCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogV2hlbiBkdW92aWV3IGFuZCB1c2luZyBsY2QgLCB1c2Ugc29mdCBjdXJzb3IgKi8KLQlpZiAodmlhZmJfTENEX09OIHx8ICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+ZHVvdmlldykKKwlpZiAoY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYgJiYgdmlhcGFyLT5pZ2FfcGF0aCA9PSBJR0EyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXZpYWZiX3Nob3dfaHdfY3Vyc29yKGluZm8sIEhXX0N1cnNvcl9PRkYpOwotCXZpYWN1cnNvciA9ICpjdXJzb3I7CiAKIAlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUSE9UKSB7Ci0JCXZpYWN1cnNvci5ob3QgPSBjdXJzb3ItPmhvdDsKLQkJdGVtcCA9ICgodmlhY3Vyc29yLmhvdC54KSA8PCAxNikgKyB2aWFjdXJzb3IuaG90Lnk7Ci0JCXdyaXRlbCh0ZW1wLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfT1JHKTsKKwkJdGVtcCA9IChjdXJzb3ItPmhvdC54IDw8IDE2KSArIGN1cnNvci0+aG90Lnk7CisJCXdyaXRlbCh0ZW1wLCBlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9PUkcpOwogCX0KIAogCWlmIChjdXJzb3ItPnNldCAmIEZCX0NVUl9TRVRQT1MpIHsKLQkJdmlhY3Vyc29yLmltYWdlLmR4ID0gY3Vyc29yLT5pbWFnZS5keDsKLQkJdmlhY3Vyc29yLmltYWdlLmR5ID0gY3Vyc29yLT5pbWFnZS5keTsKIAkJeXkgPSBjdXJzb3ItPmltYWdlLmR5IC0gaW5mby0+dmFyLnlvZmZzZXQ7CiAJCXh4ID0gY3Vyc29yLT5pbWFnZS5keCAtIGluZm8tPnZhci54b2Zmc2V0OwogCQl0ZW1wID0geXkgJiAweEZGRkY7CiAJCXRlbXAgfD0gKHh4IDw8IDE2KTsKLQkJd3JpdGVsKHRlbXAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9QT1MpOworCQl3cml0ZWwodGVtcCwgZW5naW5lICsgVklBX1JFR19DVVJTT1JfUE9TKTsKKwl9CisKKwlpZiAoY3Vyc29yLT5pbWFnZS53aWR0aCA8PSAzMiAmJiBjdXJzb3ItPmltYWdlLmhlaWdodCA8PSAzMikKKwkJY3VyX3NpemUgPSAzMjsKKwllbHNlIGlmIChjdXJzb3ItPmltYWdlLndpZHRoIDw9IDY0ICYmIGN1cnNvci0+aW1hZ2UuaGVpZ2h0IDw9IDY0KQorCQljdXJfc2l6ZSA9IDY0OworCWVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYl9jdXJzb3I6IFRoZSBjdXJzb3IgaXMgdG9vIGxhcmdlICIKKwkJCSIlZHglZCIsIGN1cnNvci0+aW1hZ2Uud2lkdGgsIGN1cnNvci0+aW1hZ2UuaGVpZ2h0KTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKIAlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUU0laRSkgewotCQl0ZW1wID0gcmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOwotCi0JCWlmICgoY3Vyc29yLT5pbWFnZS53aWR0aCA8PSAzMikKLQkJICAgICYmIChjdXJzb3ItPmltYWdlLmhlaWdodCA8PSAzMikpIHsKLQkJCU1BWF9DVVJTID0gMzI7CisJCXRlbXAgPSByZWFkbChlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKwkJaWYgKGN1cl9zaXplID09IDMyKQogCQkJdGVtcCB8PSAweDI7Ci0JCX0gZWxzZSBpZiAoKGN1cnNvci0+aW1hZ2Uud2lkdGggPD0gNjQpCi0JCQkgICAmJiAoY3Vyc29yLT5pbWFnZS5oZWlnaHQgPD0gNjQpKSB7Ci0JCQlNQVhfQ1VSUyA9IDY0OwotCQkJdGVtcCAmPSAweEZGRkZGRkZEOwotCQl9IGVsc2UgewotCQkJREVCVUdfTVNHKEtFUk5fSU5GTwotCQkJIlRoZSBjdXJzb3IgaW1hZ2UgaXMgYmlnZXIgdGhhbiA2NHg2NCBiaXRzLi4uXG4iKTsKLQkJCXJldHVybiAtRU5YSU87Ci0JCX0KLQkJd3JpdGVsKHRlbXAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKwkJZWxzZQorCQkJdGVtcCAmPSB+MHgyOwogCi0JCXZpYWN1cnNvci5pbWFnZS5oZWlnaHQgPSBjdXJzb3ItPmltYWdlLmhlaWdodDsKLQkJdmlhY3Vyc29yLmltYWdlLndpZHRoID0gY3Vyc29yLT5pbWFnZS53aWR0aDsKKwkJd3JpdGVsKHRlbXAsIGVuZ2luZSArIFZJQV9SRUdfQ1VSU09SX01PREUpOwogCX0KIAogCWlmIChjdXJzb3ItPnNldCAmIEZCX0NVUl9TRVRDTUFQKSB7Ci0JCXZpYWN1cnNvci5pbWFnZS5mZ19jb2xvciA9IGN1cnNvci0+aW1hZ2UuZmdfY29sb3I7Ci0JCXZpYWN1cnNvci5pbWFnZS5iZ19jb2xvciA9IGN1cnNvci0+aW1hZ2UuYmdfY29sb3I7Ci0KLQkJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKLQkJY2FzZSA4OgotCQljYXNlIDE2OgotCQljYXNlIDMyOgotCQkJYmdfY29sID0KLQkJCSAgICAoMHhGRiA8PCAyNCkgfAotCQkJICAgICgoKGluZm8tPmNtYXAucmVkKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKLQkJCSAgICAweEZGMDApIDw8IDgpIHwKLQkJCSAgICAoKGluZm8tPmNtYXAuZ3JlZW4pW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgotCQkJICAgIDB4RkYwMCkgfAotCQkJICAgICgoKGluZm8tPmNtYXAuYmx1ZSlbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCi0JCQkgICAgMHhGRjAwKSA+PiA4KTsKLQkJCWZnX2NvbCA9Ci0JCQkgICAgKDB4RkYgPDwgMjQpIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLnJlZClbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCi0JCQkgICAgMHhGRjAwKSA8PCA4KSB8Ci0JCQkgICAgKChpbmZvLT5jbWFwLmdyZWVuKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKLQkJCSAgICAweEZGMDApIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLmJsdWUpW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgotCQkJICAgIDB4RkYwMCkgPj4gOCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOworCQlmZ19jb2xvciA9IGN1cnNvci0+aW1hZ2UuZmdfY29sb3I7CisJCWJnX2NvbG9yID0gY3Vyc29yLT5pbWFnZS5iZ19jb2xvcjsKKwkJaWYgKGNoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDAgfHwKKwkJCWNoaXBfbmFtZSA9PSBVTklDSFJPTUVfVlg4MDAgfHwKKwkJCWNoaXBfbmFtZSA9PSBVTklDSFJPTUVfVlg4NTUpIHsKKwkJCWZnX2NvbG9yID0KKwkJCQkoKGluZm8tPmNtYXAucmVkW2ZnX2NvbG9yXSAmIDB4RkZDMCkgPDwgMTQpIHwKKwkJCQkoKGluZm8tPmNtYXAuZ3JlZW5bZmdfY29sb3JdICYgMHhGRkMwKSA8PCA0KSB8CisJCQkJKChpbmZvLT5jbWFwLmJsdWVbZmdfY29sb3JdICYgMHhGRkMwKSA+PiA2KTsKKwkJCWJnX2NvbG9yID0KKwkJCQkoKGluZm8tPmNtYXAucmVkW2JnX2NvbG9yXSAmIDB4RkZDMCkgPDwgMTQpIHwKKwkJCQkoKGluZm8tPmNtYXAuZ3JlZW5bYmdfY29sb3JdICYgMHhGRkMwKSA8PCA0KSB8CisJCQkJKChpbmZvLT5jbWFwLmJsdWVbYmdfY29sb3JdICYgMHhGRkMwKSA+PiA2KTsKKwkJfSBlbHNlIHsKKwkJCWZnX2NvbG9yID0KKwkJCQkoKGluZm8tPmNtYXAucmVkW2ZnX2NvbG9yXSAmIDB4RkYwMCkgPDwgOCkgfAorCQkJCShpbmZvLT5jbWFwLmdyZWVuW2ZnX2NvbG9yXSAmIDB4RkYwMCkgfAorCQkJCSgoaW5mby0+Y21hcC5ibHVlW2ZnX2NvbG9yXSAmIDB4RkYwMCkgPj4gOCk7CisJCQliZ19jb2xvciA9CisJCQkJKChpbmZvLT5jbWFwLnJlZFtiZ19jb2xvcl0gJiAweEZGMDApIDw8IDgpIHwKKwkJCQkoaW5mby0+Y21hcC5ncmVlbltiZ19jb2xvcl0gJiAweEZGMDApIHwKKwkJCQkoKGluZm8tPmNtYXAuYmx1ZVtiZ19jb2xvcl0gJiAweEZGMDApID4+IDgpOwogCQl9CiAKLQkJLyogVGhpcyBpcyBpbmRlZWQgYSBwYXRjaCBmb3IgVlQzMzI0L1ZUMzM1MyAqLwotCQlpZiAoIWluZm8tPnBhcikKLQkJCXJldHVybiAwOwotCQlwX3ZpYWZiX3BhciA9IChzdHJ1Y3QgdmlhZmJfcGFyICopaW5mby0+cGFyOwotCi0JCWlmICgocF92aWFmYl9wYXItPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PQotCQkJVU5JQ0hST01FX0NYNzAwKSB8fAotCQkJKChwX3ZpYWZiX3Bhci0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09Ci0JCQlVTklDSFJPTUVfVlg4MDApKSkgewotCQkJYmdfY29sID0KLQkJCSAgICAoKChpbmZvLT5jbWFwLnJlZClbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCi0JCQkgICAgMHhGRkMwKSA8PCAxNCkgfAotCQkJICAgICgoKGluZm8tPmNtYXAuZ3JlZW4pW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgotCQkJICAgIDB4RkZDMCkgPDwgNCkgfAotCQkJICAgICgoKGluZm8tPmNtYXAuYmx1ZSlbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCi0JCQkgICAgMHhGRkMwKSA+PiA2KTsKLQkJCWZnX2NvbCA9Ci0JCQkgICAgKCgoaW5mby0+Y21hcC5yZWQpW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgotCQkJICAgIDB4RkZDMCkgPDwgMTQpIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLmdyZWVuKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKLQkJCSAgICAweEZGQzApIDw8IDQpIHwKLQkJCSAgICAoKChpbmZvLT5jbWFwLmJsdWUpW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgotCQkJICAgIDB4RkZDMCkgPj4gNik7Ci0JCX0KLQotCQl3cml0ZWwoYmdfY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfQkcpOwotCQl3cml0ZWwoZmdfY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfRkcpOworCQl3cml0ZWwoYmdfY29sb3IsIGVuZ2luZSArIFZJQV9SRUdfQ1VSU09SX0JHKTsKKwkJd3JpdGVsKGZnX2NvbG9yLCBlbmdpbmUgKyBWSUFfUkVHX0NVUlNPUl9GRyk7CiAJfQogCiAJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFNIQVBFKSB7CiAJCXN0cnVjdCB7Ci0JCQl1OCBkYXRhW0NVUlNPUl9TSVpFIC8gOF07Ci0JCQl1MzIgYmFrW0NVUlNPUl9TSVpFIC8gMzJdOworCQkJdTggZGF0YVtDVVJTT1JfU0laRV07CisJCQl1MzIgYmFrW0NVUlNPUl9TSVpFIC8gNF07CiAJCX0gKmNyX2RhdGEgPSBremFsbG9jKHNpemVvZigqY3JfZGF0YSksIEdGUF9BVE9NSUMpOwotCQlpbnQgc2l6ZSA9Ci0JCSAgICAoKHZpYWN1cnNvci5pbWFnZS53aWR0aCArIDcpID4+IDMpICoKLQkJICAgIHZpYWN1cnNvci5pbWFnZS5oZWlnaHQ7CisJCWludCBzaXplID0gKChjdXJzb3ItPmltYWdlLndpZHRoICsgNykgPj4gMykgKgorCQkJY3Vyc29yLT5pbWFnZS5oZWlnaHQ7CiAKLQkJaWYgKGNyX2RhdGEgPT0gTlVMTCkKLQkJCWdvdG8gb3V0OworCQlpZiAoIWNyX2RhdGEpCisJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlpZiAoTUFYX0NVUlMgPT0gMzIpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCAoQ1VSU09SX1NJWkUgLyAzMik7IGkrKykgeworCQlpZiAoY3VyX3NpemUgPT0gMzIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAoQ1VSU09SX1NJWkUgLyA0KTsgaSsrKSB7CiAJCQkJY3JfZGF0YS0+YmFrW2ldID0gMHgwOwogCQkJCWNyX2RhdGEtPmJha1tpICsgMV0gPSAweEZGRkZGRkZGOwogCQkJCWkgKz0gMTsKIAkJCX0KLQkJfSBlbHNlIGlmIChNQVhfQ1VSUyA9PSA2NCkgewotCQkJZm9yIChpID0gMDsgaSA8IChDVVJTT1JfU0laRSAvIDMyKTsgaSsrKSB7CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgKENVUlNPUl9TSVpFIC8gNCk7IGkrKykgewogCQkJCWNyX2RhdGEtPmJha1tpXSA9IDB4MDsKIAkJCQljcl9kYXRhLT5iYWtbaSArIDFdID0gMHgwOwogCQkJCWNyX2RhdGEtPmJha1tpICsgMl0gPSAweEZGRkZGRkZGOwpAQCAtMTIxMSwyNyArOTY2LDI3IEBACiAJCQl9CiAJCX0KIAotCQlzd2l0Y2ggKHZpYWN1cnNvci5yb3ApIHsKKwkJc3dpdGNoIChjdXJzb3ItPnJvcCkgewogCQljYXNlIFJPUF9YT1I6CiAJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQkJCWNyX2RhdGEtPmRhdGFbaV0gPSB2aWFjdXJzb3IubWFza1tpXTsKKwkJCQljcl9kYXRhLT5kYXRhW2ldID0gY3Vyc29yLT5tYXNrW2ldOwogCQkJYnJlYWs7CiAJCWNhc2UgUk9QX0NPUFk6CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCQkJY3JfZGF0YS0+ZGF0YVtpXSA9IHZpYWN1cnNvci5tYXNrW2ldOworCQkJCWNyX2RhdGEtPmRhdGFbaV0gPSBjdXJzb3ItPm1hc2tbaV07CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKE1BWF9DVVJTID09IDMyKSB7CisJCWlmIChjdXJfc2l6ZSA9PSAzMikgewogCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQkJCWNyX2RhdGEtPmJha1tqXSA9ICh1MzIpIGNyX2RhdGEtPmRhdGFbaV07CiAJCQkJY3JfZGF0YS0+YmFrW2ogKyAxXSA9IH5jcl9kYXRhLT5iYWtbal07CiAJCQkJaiArPSAyOwogCQkJfQotCQl9IGVsc2UgaWYgKE1BWF9DVVJTID09IDY0KSB7CisJCX0gZWxzZSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCQkJY3JfZGF0YS0+YmFrW2pdID0gKHUzMikgY3JfZGF0YS0+ZGF0YVtpXTsKIAkJCQljcl9kYXRhLT5iYWtbaiArIDFdID0gMHgwOwpAQCAtMTI0MSwxNCArOTk2LDEyIEBACiAJCQl9CiAJCX0KIAotCQltZW1jcHkoKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5mYm1lbV92aXJ0ICsKLQkJICAgICAgICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+Y3Vyc29yX3N0YXJ0LAotCQkgICAgICAgY3JfZGF0YS0+YmFrLCBDVVJTT1JfU0laRSk7Ci1vdXQ6CisJCW1lbWNweV90b2lvKHZpYWZiaW5mby0+c2NyZWVuX2Jhc2UgKyB2aWFwYXItPnNoYXJlZC0+CisJCQljdXJzb3JfdnJhbV9hZGRyLCBjcl9kYXRhLT5iYWssIENVUlNPUl9TSVpFKTsKIAkJa2ZyZWUoY3JfZGF0YSk7CiAJfQogCi0JaWYgKHZpYWN1cnNvci5lbmFibGUpCisJaWYgKGN1cnNvci0+ZW5hYmxlKQogCQl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT04pOwogCiAJcmV0dXJuIDA7CkBAIC0xMjU2LDggKzEwMDksOCBAQAogCiBzdGF0aWMgaW50IHZpYWZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JaWYgKHZpYWZiX2FjY2VsKQotCQl2aWFmYl93YWl0X2VuZ2luZV9pZGxlKCk7CisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkpCisJCXZpYWZiX3dhaXRfZW5naW5lX2lkbGUoaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjYsMTIgKzEwMTksMTYgQEAKIAl1MzIgaTsKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9nZXRfbW9kZV9pbmRleCFcbiIpOwogCi0JZm9yIChpID0gMDsgdmlhZmJfbW9kZW50cnlbaV0ubW9kZV9pbmRleCAhPSBWSUFfUkVTX0lOVkFMSUQ7IGkrKykKLQkJaWYgKHZpYWZiX21vZGVudHJ5W2ldLnhyZXMgPT0gaHJlcyAmJgotCQkJdmlhZmJfbW9kZW50cnlbaV0ueXJlcyA9PSB2cmVzKQorCWZvciAoaSA9IDA7IGkgPCBOVU1fVE9UQUxfTU9ERVRBQkxFOyBpKyspCisJCWlmIChDTEUyNjZNb2Rlc1tpXS5tb2RlX2FycmF5ICYmCisJCQlDTEUyNjZNb2Rlc1tpXS5jcnRjWzBdLmNydGMuaG9yX2FkZHIgPT0gaHJlcyAmJgorCQkJQ0xFMjY2TW9kZXNbaV0uY3J0Y1swXS5jcnRjLnZlcl9hZGRyID09IHZyZXMpCiAJCQlicmVhazsKIAotCXJldHVybiB2aWFmYl9tb2RlbnRyeVtpXS5tb2RlX2luZGV4OworCWlmIChpID09IE5VTV9UT1RBTF9NT0RFVEFCTEUpCisJCXJldHVybiBWSUFfUkVTX0lOVkFMSUQ7CisKKwlyZXR1cm4gQ0xFMjY2TW9kZXNbaV0uTW9kZUluZGV4OwogfQogCiBzdGF0aWMgdm9pZCBjaGVja19hdmFpbGFibGVfZGV2aWNlX3RvX2VuYWJsZShpbnQgZGV2aWNlX2lkKQpAQCAtMTM3NSwzNiArMTEzMiwxMSBAQAogCQl2aWFmYl9TQU1NX09OID0gYWN0aXZlX2Rldi5zYW1tOwogCXZpYWZiX3ByaW1hcnlfZGV2ID0gYWN0aXZlX2Rldi5wcmltYXJ5X2RldjsKIAotCXZpYWZiX3NldF9zdGFydF9hZGRyKCk7CisJdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcygwKTsKKwl2aWFmYl9zZXRfc2Vjb25kYXJ5X2FkZHJlc3ModmlhZmJfU0FNTV9PTiA/IHZpYWZiX3NlY29uZF9vZmZzZXQgOiAwKTsKIAl2aWFmYl9zZXRfaWdhX3BhdGgoKTsKIH0KIAotc3RhdGljIHZvaWQgdmlhZmJfc2V0X3ZpZGVvX2RldmljZSh1MzIgdmlkZW9fZGV2X2luZm8pCi17Ci0JdmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID0gU1RBVEVfT0ZGOwotCXZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9IFNUQVRFX09GRjsKLQl2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPSBTVEFURV9PRkY7Ci0KLQkvKiBDaGVjayBhdmFpbGFibGUgZGV2aWNlIHRvIGVuYWJsZTogKi8KLQlpZiAoKHZpZGVvX2Rldl9pbmZvICYgQ1JUX0RldmljZSkgPT0gQ1JUX0RldmljZSkKLQkJdmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID0gU1RBVEVfT047Ci0JZWxzZSBpZiAoKHZpZGVvX2Rldl9pbmZvICYgRFZJX0RldmljZSkgPT0gRFZJX0RldmljZSkKLQkJdmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID0gU1RBVEVfT047Ci0JZWxzZSBpZiAoKHZpZGVvX2Rldl9pbmZvICYgTENEX0RldmljZSkgPT0gTENEX0RldmljZSkKLQkJdmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID0gU1RBVEVfT047Ci19Ci0KLXN0YXRpYyB2b2lkIHZpYWZiX2dldF92aWRlb19kZXZpY2UodTMyICp2aWRlb19kZXZfaW5mbykKLXsKLQkqdmlkZW9fZGV2X2luZm8gPSBOb25lX0RldmljZTsKLQlpZiAodmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID09IFNUQVRFX09OKQotCQkqdmlkZW9fZGV2X2luZm8gfD0gQ1JUX0RldmljZTsKLQllbHNlIGlmICh2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPT0gU1RBVEVfT04pCi0JCSp2aWRlb19kZXZfaW5mbyB8PSBEVklfRGV2aWNlOwotCWVsc2UgaWYgKHZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9PSBTVEFURV9PTikKLQkJKnZpZGVvX2Rldl9pbmZvIHw9IExDRF9EZXZpY2U7Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0X3ByaW1hcnlfZGV2aWNlKHZvaWQpCiB7CiAJaW50IHByaW1hcnlfZGV2aWNlID0gMDsKQEAgLTE0NDYsMTggKzExNzgsNiBAQAogCXJldHVybiBwcmltYXJ5X2RldmljZTsKIH0KIAotc3RhdGljIHU4IGlzX2R1b3ZpZXcodm9pZCkKLXsKLQlpZiAoMCA9PSB2aWFmYl9TQU1NX09OKSB7Ci0JCWlmICh2aWFmYl9MQ0RfT04gKyB2aWFmYl9MQ0QyX09OICsKLQkJCXZpYWZiX0RWSV9PTiArIHZpYWZiX0NSVF9PTiA9PSAyKQotCQkJcmV0dXJuIHRydWU7Ci0JCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBhcHBseV9zZWNvbmRfbW9kZV9zZXR0aW5nKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbwogCSpzZWNfdmFyKQogewpAQCAtMTU1OSwxNCArMTI3OSwxMyBAQAogCQkJaWYgKHZpYWZiX1NBTU1fT04pCiAJCQkJdmlhZmJfcHJpbWFyeV9kZXYgPSBzZXR0aW5nX2luZm8ucHJpbWFyeV9kZXZpY2U7CiAKLQkJCXZpYWZiX3NldF9zdGFydF9hZGRyKCk7CisJCQl2aWFmYl9zZXRfcHJpbWFyeV9hZGRyZXNzKDApOworCQkJdmlhZmJfc2V0X3NlY29uZGFyeV9hZGRyZXNzKHZpYWZiX1NBTU1fT04gPyB2aWFmYl9zZWNvbmRfb2Zmc2V0IDogMCk7CiAJCQl2aWFmYl9zZXRfaWdhX3BhdGgoKTsKIAkJfQogCQluZWVkX3NldF9tb2RlID0gMTsKIAl9CiAKLQl2aWFwYXJpbmZvLT5kdW92aWV3ID0gaXNfZHVvdmlldygpOwotCiAJaWYgKCFuZWVkX3NldF9tb2RlKSB7CiAJCTsKIAl9IGVsc2UgewpAQCAtMTU4OSwxOCArMTMwOCw2IEBACiAJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyB8PSBMQ0RfRGV2aWNlOwogCWlmICh2aWFmYl9MQ0QyX09OID09IDEpCiAJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyB8PSBMQ0QyX0RldmljZTsKLQlpZiAoKHZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9PSAxKSAmJiAodmlhZmJfQ1JUX09OID09IDEpKSB7Ci0JCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9Ci0JCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKLQl9IGVsc2UgaWYgKCh2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPT0gMSkgJiYgKHZpYWZiX0RWSV9PTiA9PSAxKSkgewotCQlzZXR0aW5nX2luZm8tPnZpZGVvX2RldmljZV9zdGF0dXMgPQotCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoOwotCX0gZWxzZSBpZiAoKHZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9PSAxKSAmJiAodmlhZmJfTENEX09OID09IDEpKSB7Ci0JCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9Ci0JCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGg7Ci0JfSBlbHNlIHsKLQkJc2V0dGluZ19pbmZvLT52aWRlb19kZXZpY2Vfc3RhdHVzID0gMDsKLQl9CiAKIAlzZXR0aW5nX2luZm8tPnNhbW1fc3RhdHVzID0gdmlhZmJfU0FNTV9PTjsKIAlzZXR0aW5nX2luZm8tPnByaW1hcnlfZGV2aWNlID0gZ2V0X3ByaW1hcnlfZGV2aWNlKCk7CkBAIC0xNjg3LDI1ICsxMzk0LDYgQEAKIAkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CiAJCXZpYWZiX1NBTU1fT04gPSBTVEFURV9PRkY7CiAJfQotCXZpYXBhcmluZm8tPmR1b3ZpZXcgPSBpc19kdW92aWV3KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX3ZpZGVvX2Rldih2b2lkKQotewotCXZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9IFNUQVRFX09GRjsKLQl2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPSBTVEFURV9PRkY7Ci0JdmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID0gU1RBVEVfT0ZGOwotCi0JaWYgKCFzdHJuY21wKHZpYWZiX3ZpZGVvX2RldiwgIkNSVCIsIDMpKSB7Ci0JCS8qIFZpZGVvIG9uIENSVCAqLwotCQl2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPSBTVEFURV9PTjsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX3ZpZGVvX2RldiwgIkRWSSIsIDMpKSB7Ci0JCS8qIFZpZGVvIG9uIERWSSAqLwotCQl2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPSBTVEFURV9PTjsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX3ZpZGVvX2RldiwgIkxDRCIsIDMpKSB7Ci0JCS8qIFZpZGVvIG9uIExDRCAqLwotCQl2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPSBTVEFURV9PTjsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfcG9ydChjaGFyICpvcHRfc3RyLCBpbnQgKm91dHB1dF9pbnRlcmZhY2UpCkBAIC0xNzU0LDEwICsxNDQyLDggQEAKICAqIERWUDFEcml2aW5nLCBERlBIaWdoLCBERlBMb3cgQ1I5NiwgICBTUjJBWzVdLCBTUjFCWzFdLCBTUjJBWzRdLCBTUjFFWzJdLAogICogQ1I5QiwgICAgU1I2NSwgICAgQ1I5NywgICAgQ1I5OQogICovCi1zdGF0aWMgaW50IHZpYWZiX2R2cDBfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi1pbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCB2aWFmYl9kdnAwX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJdTggZHZwMF9kYXRhX2RyaSA9IDAsIGR2cDBfY2xrX2RyaSA9IDAsIGR2cDAgPSAwOwogCWR2cDBfZGF0YV9kcmkgPQogCSAgICAodmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpICYgQklUNSkgPj4gNCB8CkBAIC0xNzY2LDEzICsxNDUyLDE3IEBACiAJICAgICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgJiBCSVQ0KSA+PiAzIHwKIAkgICAgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKSAmIEJJVDIpID4+IDI7CiAJZHZwMCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjk2KSAmIDB4MGY7Ci0JbGVuICs9Ci0JICAgIHNwcmludGYoYnVmICsgbGVuLCAiJXggJXggJXhcbiIsIGR2cDAsIGR2cDBfZGF0YV9kcmksIGR2cDBfY2xrX2RyaSk7Ci0JKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KLQlyZXR1cm4gbGVuOworCXNlcV9wcmludGYobSwgIiV4ICV4ICV4XG4iLCBkdnAwLCBkdnAwX2RhdGFfZHJpLCBkdnAwX2Nsa19kcmkpOworCXJldHVybiAwOwogfQotc3RhdGljIGludCB2aWFmYl9kdnAwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKKworc3RhdGljIGludCB2aWFmYl9kdnAwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdmlhZmJfZHZwMF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCB2aWFmYl9kdnAwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAljaGFyIGJ1ZlsyMF0sICp2YWx1ZSwgKnBidWY7CiAJdTggcmVnX3ZhbCA9IDA7CkBAIC0xODE2LDIxICsxNTA2LDMzIEBACiAJfQogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBpbnQgdmlhZmJfZHZwMV9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aWFmYl9kdnAwX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmlhZmJfZHZwMF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gdmlhZmJfZHZwMF9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIGludCB2aWFmYl9kdnAxX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJdTggZHZwMSA9IDAsIGR2cDFfZGF0YV9kcmkgPSAwLCBkdnAxX2Nsa19kcmkgPSAwOwogCWR2cDEgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5QikgJiAweDBmOwogCWR2cDFfZGF0YV9kcmkgPSAodmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSNjUpICYgMHgwYykgPj4gMjsKIAlkdnAxX2Nsa19kcmkgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1I2NSkgJiAweDAzOwotCWxlbiArPQotCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4ICV4ICV4XG4iLCBkdnAxLCBkdnAxX2RhdGFfZHJpLCBkdnAxX2Nsa19kcmkpOwotCSplb2YgPSAxOwkJLypJbmZvcm0ga2VybmVsIGVuZCBvZiBkYXRhICovCi0JcmV0dXJuIGxlbjsKKwlzZXFfcHJpbnRmKG0sICIleCAleCAleFxuIiwgZHZwMSwgZHZwMV9kYXRhX2RyaSwgZHZwMV9jbGtfZHJpKTsKKwlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbnQgdmlhZmJfZHZwMV9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCisKK3N0YXRpYyBpbnQgdmlhZmJfZHZwMV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZpYWZiX2R2cDFfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgdmlhZmJfZHZwMV9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBidWZbMjBdLCAqdmFsdWUsICpwYnVmOwogCXU4IHJlZ192YWwgPSAwOwpAQCAtMTg2OSwxOCArMTU3MSwzMCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCB2aWFmYl9kZnBoX3Byb2NfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aWFmYl9kdnAxX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmlhZmJfZHZwMV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gdmlhZmJfZHZwMV9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIGludCB2aWFmYl9kZnBoX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJdTggZGZwX2hpZ2ggPSAwOwogCWRmcF9oaWdoID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTcpICYgMHgwZjsKLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIleFxuIiwgZGZwX2hpZ2gpOwotCSplb2YgPSAxOwkJLypJbmZvcm0ga2VybmVsIGVuZCBvZiBkYXRhICovCi0JcmV0dXJuIGxlbjsKKwlzZXFfcHJpbnRmKG0sICIleFxuIiwgZGZwX2hpZ2gpOworCXJldHVybiAwOwogfQotc3RhdGljIGludCB2aWFmYl9kZnBoX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKKworc3RhdGljIGludCB2aWFmYl9kZnBoX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdmlhZmJfZGZwaF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCB2aWFmYl9kZnBoX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAljaGFyIGJ1ZlsyMF07CiAJdTggcmVnX3ZhbCA9IDA7CkBAIC0xODk1LDE4ICsxNjA5LDMxIEBACiAJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIHJlZ192YWwsIDB4MGYpOwogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBpbnQgdmlhZmJfZGZwbF9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aWFmYl9kZnBoX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmlhZmJfZGZwaF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gdmlhZmJfZGZwaF9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIGludCB2aWFmYl9kZnBsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJdTggZGZwX2xvdyA9IDA7CiAJZGZwX2xvdyA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjk5KSAmIDB4MGY7Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXhcbiIsIGRmcF9sb3cpOwotCSplb2YgPSAxOwkJLypJbmZvcm0ga2VybmVsIGVuZCBvZiBkYXRhICovCi0JcmV0dXJuIGxlbjsKKwlzZXFfcHJpbnRmKG0sICIleFxuIiwgZGZwX2xvdyk7CisJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IHZpYWZiX2RmcGxfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorCitzdGF0aWMgaW50IHZpYWZiX2RmcGxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB2aWFmYl9kZnBsX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpYWZiX2RmcGxfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgYnVmWzIwXTsKIAl1OCByZWdfdmFsID0gMDsKQEAgLTE5MjEsMTAgKzE2NDgsMTggQEAKIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgcmVnX3ZhbCwgMHgwZik7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIGludCB2aWFmYl92dDE2MzZfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LAotCW9mZl90IG9mZnNldCwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlhZmJfZGZwbF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZpYWZiX2RmcGxfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHZpYWZiX2RmcGxfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgdmlhZmJfdnQxNjM2X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJdTggdnQxNjM2XzA4ID0gMCwgdnQxNjM2XzA5ID0gMDsKIAlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpIHsKIAljYXNlIFZUMTYzNl9MVkRTOgpAQCAtMTkzNCw3ICsxNjY5LDcgQEAKIAkJdnQxNjM2XzA5ID0KIAkJICAgIHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKIAkJICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLCAweDA5KSAmIDB4MWY7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4ICV4XG4iLCB2dDE2MzZfMDgsIHZ0MTYzNl8wOSk7CisJCXNlcV9wcmludGYobSwgIiV4ICV4XG4iLCB2dDE2MzZfMDgsIHZ0MTYzNl8wOSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTk0NywxNiArMTY4MiwyMSBAQAogCQl2dDE2MzZfMDkgPQogCQkgICAgdmlhZmJfZ3Bpb19pMmNfcmVhZF9sdmRzKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiwKIAkJCSZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMiwgMHgwOSkgJiAweDFmOwotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgJXggJXhcbiIsIHZ0MTYzNl8wOCwgdnQxNjM2XzA5KTsKKwkJc2VxX3ByaW50ZihtLCAiICV4ICV4XG4iLCB2dDE2MzZfMDgsIHZ0MTYzNl8wOSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IHZpYWZiX3Z0MTYzNl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCisKK3N0YXRpYyBpbnQgdmlhZmJfdnQxNjM2X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdmlhZmJfdnQxNjM2X3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpYWZiX3Z0MTYzNl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBidWZbMzBdLCAqdmFsdWUsICpwYnVmOwogCXN0cnVjdCBJT0RBVEEgcmVnX3ZhbDsKQEAgLTIwNDUsMzkgKzE3ODUsMjcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpYWZiX3Z0MTYzNl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZpYWZiX3Z0MTYzNl9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gdmlhZmJfdnQxNjM2X3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgdm9pZCB2aWFmYl9pbml0X3Byb2Moc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqdmlhZmJfZW50cnkpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAkqdmlhZmJfZW50cnkgPSBwcm9jX21rZGlyKCJ2aWFmYiIsIE5VTEwpOwogCWlmICh2aWFmYl9lbnRyeSkgewotCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkdnAwIiwgMCwgKnZpYWZiX2VudHJ5KTsKLQkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMF9wcm9jX3JlYWQ7Ci0JCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDBfcHJvY193cml0ZTsKLQkJfQotCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkdnAxIiwgMCwgKnZpYWZiX2VudHJ5KTsKLQkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMV9wcm9jX3JlYWQ7Ci0JCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDFfcHJvY193cml0ZTsKLQkJfQotCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZnBoIiwgMCwgKnZpYWZiX2VudHJ5KTsKLQkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZGZwaF9wcm9jX3JlYWQ7Ci0JCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2RmcGhfcHJvY193cml0ZTsKLQkJfQotCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZnBsIiwgMCwgKnZpYWZiX2VudHJ5KTsKLQkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZGZwbF9wcm9jX3JlYWQ7Ci0JCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2RmcGxfcHJvY193cml0ZTsKLQkJfQorCQlwcm9jX2NyZWF0ZSgiZHZwMCIsIDAsICp2aWFmYl9lbnRyeSwgJnZpYWZiX2R2cDBfcHJvY19mb3BzKTsKKwkJcHJvY19jcmVhdGUoImR2cDEiLCAwLCAqdmlhZmJfZW50cnksICZ2aWFmYl9kdnAxX3Byb2NfZm9wcyk7CisJCXByb2NfY3JlYXRlKCJkZnBoIiwgMCwgKnZpYWZiX2VudHJ5LCAmdmlhZmJfZGZwaF9wcm9jX2ZvcHMpOworCQlwcm9jX2NyZWF0ZSgiZGZwbCIsIDAsICp2aWFmYl9lbnRyeSwgJnZpYWZiX2RmcGxfcHJvY19mb3BzKTsKIAkJaWYgKFZUMTYzNl9MVkRTID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uCiAJCQlsdmRzX2NoaXBfbmFtZSB8fCBWVDE2MzZfTFZEUyA9PQogCQkgICAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIubHZkc19jaGlwX25hbWUpIHsKLQkJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInZ0MTYzNiIsIDAsICp2aWFmYl9lbnRyeSk7Ci0JCQlpZiAoZW50cnkpIHsKLQkJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfdnQxNjM2X3Byb2NfcmVhZDsKLQkJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX3Z0MTYzNl9wcm9jX3dyaXRlOwotCQkJfQorCQkJcHJvY19jcmVhdGUoInZ0MTYzNiIsIDAsICp2aWFmYl9lbnRyeSwgJnZpYWZiX3Z0MTYzNl9wcm9jX2ZvcHMpOwogCQl9CiAKIAl9CkBAIC0yMDk0LDUxICsxODIyLDYxIEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoInZpYWZiIiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHZpYV9wY2lfcHJvYmUodm9pZCkKK3N0YXRpYyB2b2lkIHBhcnNlX21vZGUoY29uc3QgY2hhciAqc3RyLCB1MzIgKnhyZXMsIHUzMiAqeXJlcykKIHsKLQl1bnNpZ25lZCBsb25nIGRlZmF1bHRfeHJlcywgZGVmYXVsdF95cmVzOwotCWNoYXIgKnRtcGMsICp0bXBtOwotCWNoYXIgKnRtcGNfc2VjLCAqdG1wbV9zZWM7CisJY2hhciAqcHRyOworCisJKnhyZXMgPSBzaW1wbGVfc3RydG91bChzdHIsICZwdHIsIDEwKTsKKwlpZiAocHRyWzBdICE9ICd4JykKKwkJZ290byBvdXRfZGVmYXVsdDsKKworCSp5cmVzID0gc2ltcGxlX3N0cnRvdWwoJnB0clsxXSwgJnB0ciwgMTApOworCWlmIChwdHJbMF0pCisJCWdvdG8gb3V0X2RlZmF1bHQ7CisKKwlyZXR1cm47CisKK291dF9kZWZhdWx0OgorCXByaW50ayhLRVJOX1dBUk5JTkcgInZpYWZiIHJlY2VpdmVkIGludmFsaWQgbW9kZSBzdHJpbmc6ICVzXG4iLCBzdHIpOworCSp4cmVzID0gNjQwOworCSp5cmVzID0gNDgwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2aWFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJdTMyIGRlZmF1bHRfeHJlcywgZGVmYXVsdF95cmVzOwogCWludCB2bW9kZV9pbmRleDsKLQl1MzIgdG1kc19sZW5ndGgsIGx2ZHNfbGVuZ3RoLCBjcnRfbGVuZ3RoLCBjaGlwX2xlbmd0aCwgdmlhZmJfcGFyX2xlbmd0aDsKKwl1MzIgdmlhZmJfcGFyX2xlbmd0aDsKIAogCURFQlVHX01TRyhLRVJOX0lORk8gIlZJQUZCIFBDSSBQcm9iZSEhXG4iKTsKIAogCXZpYWZiX3Bhcl9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IHZpYWZiX3BhciksIEJJVFNfUEVSX0xPTkcvOCk7Ci0JdG1kc19sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiksCi0JCUJJVFNfUEVSX0xPTkcvOCk7Ci0JbHZkc19sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiksCi0JCUJJVFNfUEVSX0xPTkcvOCk7Ci0JY3J0X2xlbmd0aCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uKSwKLQkJQklUU19QRVJfTE9ORy84KTsKLQljaGlwX2xlbmd0aCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbiksIEJJVFNfUEVSX0xPTkcvOCk7CiAKIAkvKiBBbGxvY2F0ZSBmYl9pbmZvIGFuZCAqKipfcGFyIGhlcmUsIGFsc28gaW5jbHVkaW5nIHNvbWUgb3RoZXIgbmVlZGVkCiAJICogdmFyaWFibGVzCiAJKi8KLQl2aWFmYmluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyh2aWFmYl9wYXJfbGVuZ3RoICsgMiAqIGx2ZHNfbGVuZ3RoICsKLQl0bWRzX2xlbmd0aCArIGNydF9sZW5ndGggKyBjaGlwX2xlbmd0aCwgTlVMTCk7CisJdmlhZmJpbmZvID0gZnJhbWVidWZmZXJfYWxsb2ModmlhZmJfcGFyX2xlbmd0aCArCisJCUFMSUdOKHNpemVvZihzdHJ1Y3QgdmlhZmJfc2hhcmVkKSwgQklUU19QRVJfTE9ORy84KSwKKwkJJnBkZXYtPmRldik7CiAJaWYgKCF2aWFmYmluZm8pIHsKIAkJcHJpbnRrKEtFUk5fRVJSIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZpYWZiX2luZm8uXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJdmlhcGFyaW5mbyA9IChzdHJ1Y3QgdmlhZmJfcGFyICopdmlhZmJpbmZvLT5wYXI7Ci0JdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8gPSAoc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqKQotCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mbyArIHZpYWZiX3Bhcl9sZW5ndGgpOwotCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvID0gKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKikKLQkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvICsgdG1kc19sZW5ndGgpOwotCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiA9IChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICopCi0JCSgodW5zaWduZWQgbG9uZyl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyArIGx2ZHNfbGVuZ3RoKTsKLQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvID0gKHN0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiAqKQotCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yICsgbHZkc19sZW5ndGgpOwotCXZpYXBhcmluZm8tPmNoaXBfaW5mbyA9IChzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbiAqKQotCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mbyArIGNydF9sZW5ndGgpOworCXZpYXBhcmluZm8tPnNoYXJlZCA9IHZpYWZiaW5mby0+cGFyICsgdmlhZmJfcGFyX2xlbmd0aDsKKwl2aWFwYXJpbmZvLT52cmFtX2FkZHIgPSAwOworCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvID0gJnZpYXBhcmluZm8tPnNoYXJlZC0+dG1kc19zZXR0aW5nX2luZm87CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8gPSAmdmlhcGFyaW5mby0+c2hhcmVkLT5sdmRzX3NldHRpbmdfaW5mbzsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIgPQorCQkmdmlhcGFyaW5mby0+c2hhcmVkLT5sdmRzX3NldHRpbmdfaW5mbzI7CisJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mbyA9ICZ2aWFwYXJpbmZvLT5zaGFyZWQtPmNydF9zZXR0aW5nX2luZm87CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvID0gJnZpYXBhcmluZm8tPnNoYXJlZC0+Y2hpcF9pbmZvOwogCiAJaWYgKHZpYWZiX2R1YWxfZmIpCiAJCXZpYWZiX1NBTU1fT04gPSAxOwogCXBhcnNlX2FjdGl2ZV9kZXYoKTsKLQlwYXJzZV92aWRlb19kZXYoKTsKIAlwYXJzZV9sY2RfcG9ydCgpOwogCXBhcnNlX2R2aV9wb3J0KCk7CiAKQEAgLTIxNDksMzIgKzE4ODcsMzIgQEAKIAkvKiBTZXQgdXAgSTJDIGJ1cyBzdHVmZiAqLwogCXZpYWZiX2NyZWF0ZV9pMmNfYnVzKHZpYXBhcmluZm8pOwogCi0JdmlhZmJfaW5pdF9jaGlwX2luZm8oKTsKLQl2aWFmYl9nZXRfZmJfaW5mbygmdmlhcGFyaW5mby0+ZmJtZW0sICZ2aWFwYXJpbmZvLT5tZW1zaXplKTsKKwl2aWFmYl9pbml0X2NoaXBfaW5mbyhwZGV2LCBlbnQpOworCXZpYXBhcmluZm8tPmZibWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCXZpYXBhcmluZm8tPm1lbXNpemUgPSB2aWFmYl9nZXRfZmJfc2l6ZV9mcm9tX3BjaSgpOwogCXZpYXBhcmluZm8tPmZibWVtX2ZyZWUgPSB2aWFwYXJpbmZvLT5tZW1zaXplOwogCXZpYXBhcmluZm8tPmZibWVtX3VzZWQgPSAwOwotCXZpYXBhcmluZm8tPmZibWVtX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUodmlhcGFyaW5mby0+ZmJtZW0sCisJdmlhZmJpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZSh2aWFwYXJpbmZvLT5mYm1lbSwKIAkJdmlhcGFyaW5mby0+bWVtc2l6ZSk7Ci0JdmlhZmJpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyICopdmlhcGFyaW5mby0+ZmJtZW1fdmlydDsKLQotCWlmICghdmlhcGFyaW5mby0+ZmJtZW1fdmlydCkgeworCWlmICghdmlhZmJpbmZvLT5zY3JlZW5fYmFzZSkgewogCQlwcmludGsoS0VSTl9JTkZPICJpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JdmlhZmJfZ2V0X21taW9faW5mbygmdmlhcGFyaW5mby0+bW1pb19iYXNlLCAmdmlhcGFyaW5mby0+bW1pb19sZW4pOwotCXZpYXBhcmluZm8tPmlvX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUodmlhcGFyaW5mby0+bW1pb19iYXNlLAotCQl2aWFwYXJpbmZvLT5tbWlvX2xlbik7Ci0KKwl2aWFmYmluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCXZpYWZiaW5mby0+Zml4Lm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKIAl2aWFmYmluZm8tPm5vZGUgPSAwOwogCXZpYWZiaW5mby0+ZmJvcHMgPSAmdmlhZmJfb3BzOwogCXZpYWZiaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX1lQQU47CiAKIAl2aWFmYmluZm8tPnBzZXVkb19wYWxldHRlID0gcHNldWRvX3BhbDsKLQlpZiAodmlhZmJfYWNjZWwpIHsKLQkJdmlhZmJfaW5pdF9hY2NlbCgpOwotCQl2aWFmYl9pbml0XzJkX2VuZ2luZSgpOwotCQl2aWFmYl9od19jdXJzb3JfaW5pdCgpOworCWlmICh2aWFmYl9hY2NlbCAmJiAhdmlhZmJfaW5pdF9lbmdpbmUodmlhZmJpbmZvKSkgeworCQl2aWFmYmluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwKKwkJCUZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwgIEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVDsKKwkJZGVmYXVsdF92YXIuYWNjZWxfZmxhZ3MgPSBGQl9BQ0NFTEZfVEVYVDsKKwl9IGVsc2UgeworCQl2aWFmYmluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCQlkZWZhdWx0X3Zhci5hY2NlbF9mbGFncyA9IDA7CiAJfQogCiAJaWYgKHZpYWZiX3NlY29uZF9zaXplICYmICh2aWFmYl9zZWNvbmRfc2l6ZSA8IDgpKSB7CkBAIC0yMTg2LDI3ICsxOTI0LDE0IEBACiAJCQl2aWFmYl9zZWNvbmRfc2l6ZSAqIDEwMjQgKiAxMDI0OwogCX0KIAotCXZpYWZiX0ZCX01NID0gdmlhcGFyaW5mby0+ZmJtZW1fdmlydDsKLQl0bXBtID0gdmlhZmJfbW9kZTsKLQl0bXBjID0gc3Ryc2VwKCZ0bXBtLCAieCIpOwotCXN0cmljdF9zdHJ0b3VsKHRtcGMsIDAsICZkZWZhdWx0X3hyZXMpOwotCXN0cmljdF9zdHJ0b3VsKHRtcG0sIDAsICZkZWZhdWx0X3lyZXMpOwotCisJcGFyc2VfbW9kZSh2aWFmYl9tb2RlLCAmZGVmYXVsdF94cmVzLCAmZGVmYXVsdF95cmVzKTsKIAl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KGRlZmF1bHRfeHJlcywgZGVmYXVsdF95cmVzKTsKIAlERUJVR19NU0coS0VSTl9JTkZPICIwLT5pbmRleD0lZFxuIiwgdm1vZGVfaW5kZXgpOwogCiAJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgewotCQlpZiAoc3RyY21wKHZpYWZiX21vZGUsIHZpYWZiX21vZGUxKSkgewotCQkJdG1wbV9zZWMgPSB2aWFmYl9tb2RlMTsKLQkJCXRtcGNfc2VjID0gc3Ryc2VwKCZ0bXBtX3NlYywgIngiKTsKLQkJCXN0cmljdF9zdHJ0b3VsKHRtcGNfc2VjLCAwLAotCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3NlY29uZF94cmVzKTsKLQkJCXN0cmljdF9zdHJ0b3VsKHRtcG1fc2VjLCAwLAotCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3NlY29uZF95cmVzKTsKLQkJfSBlbHNlIHsKLQkJCXZpYWZiX3NlY29uZF94cmVzID0gZGVmYXVsdF94cmVzOwotCQkJdmlhZmJfc2Vjb25kX3lyZXMgPSBkZWZhdWx0X3lyZXM7Ci0JCX0KKwkJcGFyc2VfbW9kZSh2aWFmYl9tb2RlMSwgJnZpYWZiX3NlY29uZF94cmVzLAorCQkJJnZpYWZiX3NlY29uZF95cmVzKTsKKwogCQlpZiAoMCA9PSB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzKSB7CiAJCQlzd2l0Y2ggKHZpYWZiX3NlY29uZF94cmVzKSB7CiAJCQljYXNlIDE0MDA6CkBAIC0yMjU2LDE4ICsxOTgxLDkgQEAKIAlkZWZhdWx0X3Zhci5sb3dlcl9tYXJnaW4gPSA0OwogCWRlZmF1bHRfdmFyLmhzeW5jX2xlbiA9IGRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luOwogCWRlZmF1bHRfdmFyLnZzeW5jX2xlbiA9IDQ7Ci0JZGVmYXVsdF92YXIuYWNjZWxfZmxhZ3MgPSAwOwotCi0JaWYgKHZpYWZiX2FjY2VsKSB7Ci0JCXZpYWZiaW5mby0+ZmxhZ3MgfD0KLQkJICAgIChGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8IEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwKLQkJICAgICBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQpOwotCQlkZWZhdWx0X3Zhci5hY2NlbF9mbGFncyB8PSBGQl9BQ0NFTEZfVEVYVDsKLQl9IGVsc2UKLQkJdmlhZmJpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKIAogCWlmICh2aWFmYl9kdWFsX2ZiKSB7Ci0JCXZpYWZiaW5mbzEgPSBmcmFtZWJ1ZmZlcl9hbGxvYyh2aWFmYl9wYXJfbGVuZ3RoLCBOVUxMKTsKKwkJdmlhZmJpbmZvMSA9IGZyYW1lYnVmZmVyX2FsbG9jKHZpYWZiX3Bhcl9sZW5ndGgsICZwZGV2LT5kZXYpOwogCQlpZiAoIXZpYWZiaW5mbzEpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJImFsbG9jYXRlIHRoZSBzZWNvbmQgZnJhbWVidWZmZXIgc3RydWN0IGVycm9yXG4iKTsKQEAgLTIyNzYsMTEgKzE5OTIsMTAgQEAKIAkJfQogCQl2aWFwYXJpbmZvMSA9IHZpYWZiaW5mbzEtPnBhcjsKIAkJbWVtY3B5KHZpYXBhcmluZm8xLCB2aWFwYXJpbmZvLCB2aWFmYl9wYXJfbGVuZ3RoKTsKKwkJdmlhcGFyaW5mbzEtPnZyYW1fYWRkciA9IHZpYWZiX3NlY29uZF9vZmZzZXQ7CiAJCXZpYXBhcmluZm8xLT5tZW1zaXplID0gdmlhcGFyaW5mby0+bWVtc2l6ZSAtCiAJCQl2aWFmYl9zZWNvbmRfb2Zmc2V0OwogCQl2aWFwYXJpbmZvLT5tZW1zaXplID0gdmlhZmJfc2Vjb25kX29mZnNldDsKLQkJdmlhcGFyaW5mbzEtPmZibWVtX3ZpcnQgPSB2aWFwYXJpbmZvLT5mYm1lbV92aXJ0ICsKLQkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7CiAJCXZpYXBhcmluZm8xLT5mYm1lbSA9IHZpYXBhcmluZm8tPmZibWVtICsgdmlhZmJfc2Vjb25kX29mZnNldDsKIAogCQl2aWFwYXJpbmZvMS0+ZmJtZW1fdXNlZCA9IHZpYXBhcmluZm8tPmZibWVtX3VzZWQ7CkBAIC0yMjg4LDIwICsyMDAzLDEzIEBACiAJCQl2aWFwYXJpbmZvMS0+ZmJtZW1fdXNlZDsKIAkJdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSA9IHZpYXBhcmluZm8tPm1lbXNpemU7CiAJCXZpYXBhcmluZm8tPmZibWVtX3VzZWQgPSAwOwotCQlpZiAodmlhZmJfYWNjZWwpIHsKLQkJCXZpYXBhcmluZm8xLT5jdXJzb3Jfc3RhcnQgPQotCQkJICAgIHZpYXBhcmluZm8tPmN1cnNvcl9zdGFydCAtIHZpYWZiX3NlY29uZF9vZmZzZXQ7Ci0JCQl2aWFwYXJpbmZvMS0+VlFfc3RhcnQgPSB2aWFwYXJpbmZvLT5WUV9zdGFydCAtCi0JCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKLQkJCXZpYXBhcmluZm8xLT5WUV9lbmQgPSB2aWFwYXJpbmZvLT5WUV9lbmQgLQotCQkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7Ci0JCX0KIAorCQl2aWFwYXJpbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCXZpYXBhcmluZm8xLT5pZ2FfcGF0aCA9IElHQTI7CiAJCW1lbWNweSh2aWFmYmluZm8xLCB2aWFmYmluZm8sIHNpemVvZihzdHJ1Y3QgZmJfaW5mbykpOworCQl2aWFmYmluZm8xLT5wYXIgPSB2aWFwYXJpbmZvMTsKIAkJdmlhZmJpbmZvMS0+c2NyZWVuX2Jhc2UgPSB2aWFmYmluZm8tPnNjcmVlbl9iYXNlICsKIAkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7Ci0JCXZpYWZiaW5mbzEtPmZpeC5zbWVtX3N0YXJ0ID0gdmlhcGFyaW5mbzEtPmZibWVtOwotCQl2aWFmYmluZm8xLT5maXguc21lbV9sZW4gPSB2aWFwYXJpbmZvMS0+ZmJtZW1fZnJlZTsKIAogCQlkZWZhdWx0X3Zhci54cmVzID0gdmlhZmJfc2Vjb25kX3hyZXM7CiAJCWRlZmF1bHRfdmFyLnlyZXMgPSB2aWFmYl9zZWNvbmRfeXJlczsKQEAgLTIzMjMsMTUgKzIwMzEsMTcgQEAKIAkJdmlhZmJfc2V0dXBfZml4aW5mbygmdmlhZmJpbmZvMS0+Zml4LCB2aWFwYXJpbmZvMSk7CiAJCXZpYWZiX2NoZWNrX3ZhcigmZGVmYXVsdF92YXIsIHZpYWZiaW5mbzEpOwogCQl2aWFmYmluZm8xLT52YXIgPSBkZWZhdWx0X3ZhcjsKLQkJdmlhZmJfdXBkYXRlX3ZpYWZiX3Bhcih2aWFmYmluZm8pOwotCQl2aWFmYl91cGRhdGVfZml4KCZ2aWFmYmluZm8xLT5maXgsIHZpYWZiaW5mbzEpOworCQl2aWFmYl91cGRhdGVfZml4KHZpYWZiaW5mbzEpOworCQl2aWFwYXJpbmZvMS0+ZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJnZpYWZiaW5mbzEtPnZhciwKKwkJCSZ2aWFmYmluZm8xLT5maXgpOwogCX0KIAogCXZpYWZiX3NldHVwX2ZpeGluZm8oJnZpYWZiaW5mby0+Zml4LCB2aWFwYXJpbmZvKTsKIAl2aWFmYl9jaGVja192YXIoJmRlZmF1bHRfdmFyLCB2aWFmYmluZm8pOwogCXZpYWZiaW5mby0+dmFyID0gZGVmYXVsdF92YXI7Ci0JdmlhZmJfdXBkYXRlX3ZpYWZiX3Bhcih2aWFmYmluZm8pOwotCXZpYWZiX3VwZGF0ZV9maXgoJnZpYWZiaW5mby0+Zml4LCB2aWFmYmluZm8pOworCXZpYWZiX3VwZGF0ZV9maXgodmlhZmJpbmZvKTsKKwl2aWFwYXJpbmZvLT5kZXB0aCA9IGZiX2dldF9jb2xvcl9kZXB0aCgmdmlhZmJpbmZvLT52YXIsCisJCSZ2aWFmYmluZm8tPmZpeCk7CiAJZGVmYXVsdF92YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CiAJZmJfYWxsb2NfY21hcCgmdmlhZmJpbmZvLT5jbWFwLCAyNTYsIDApOwogCkBAIC0yMzUzLDIwICsyMDYzLDIwIEBACiAJCSAgdmlhZmJpbmZvLT5ub2RlLCB2aWFmYmluZm8tPmZpeC5pZCwgZGVmYXVsdF92YXIueHJlcywKIAkJICBkZWZhdWx0X3Zhci55cmVzLCBkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCk7CiAKLQl2aWFmYl9pbml0X3Byb2MoJnZpYXBhcmluZm8tPnByb2NfZW50cnkpOworCXZpYWZiX2luaXRfcHJvYygmdmlhcGFyaW5mby0+c2hhcmVkLT5wcm9jX2VudHJ5KTsKIAl2aWFmYl9pbml0X2RhYyhJR0EyKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IHZpYV9wY2lfcmVtb3ZlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlhX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhX3BjaV9yZW1vdmUhXG4iKTsKIAlmYl9kZWFsbG9jX2NtYXAoJnZpYWZiaW5mby0+Y21hcCk7CiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcih2aWFmYmluZm8pOwogCWlmICh2aWFmYl9kdWFsX2ZiKQogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHZpYWZiaW5mbzEpOwotCWlvdW5tYXAoKHZvaWQgKil2aWFwYXJpbmZvLT5mYm1lbV92aXJ0KTsKLQlpb3VubWFwKHZpYXBhcmluZm8tPmlvX3ZpcnQpOworCWlvdW5tYXAoKHZvaWQgKil2aWFmYmluZm8tPnNjcmVlbl9iYXNlKTsKKwlpb3VubWFwKHZpYXBhcmluZm8tPnNoYXJlZC0+ZW5naW5lX21taW8pOwogCiAJdmlhZmJfZGVsZXRlX2kyY19idXNzKHZpYXBhcmluZm8pOwogCkBAIC0yMzc0LDcgKzIwODQsNyBAQAogCWlmICh2aWFmYl9kdWFsX2ZiKQogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKHZpYWZiaW5mbzEpOwogCi0JdmlhZmJfcmVtb3ZlX3Byb2ModmlhcGFyaW5mby0+cHJvY19lbnRyeSk7CisJdmlhZmJfcmVtb3ZlX3Byb2ModmlhcGFyaW5mby0+c2hhcmVkLT5wcm9jX2VudHJ5KTsKIH0KIAogI2lmbmRlZiBNT0RVTEUKQEAgLTI0NDEsOCArMjE1MSw2IEBACiAJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX21vZGU9IiwgMTUpKQogCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxNSwgMCwKIAkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9sY2RfbW9kZSk7Ci0JCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfdmlkZW9fZGV2PSIsIDE2KSkKLQkJCXZpYWZiX3ZpZGVvX2RldiA9IGtzdHJkdXAodGhpc19vcHQgKyAxNiwgR0ZQX0tFUk5FTCk7CiAJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX3BvcnQ9IiwgMTUpKQogCQkJdmlhZmJfbGNkX3BvcnQgPSBrc3RyZHVwKHRoaXNfb3B0ICsgMTUsIEdGUF9LRVJORUwpOwogCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2R2aV9wb3J0PSIsIDE1KSkKQEAgLTI0NTIsNiArMjE2MCw0MCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2aWFmYl9wY2lfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX0NMRTI2Nl9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX0NMRTI2NiB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX1BNODAwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfUE04MDAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9LNDAwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfSzQwMCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX0s4MDBfRElEKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9LODAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfUDRNODkwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfQ043MDAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9LOE04OTBfRElEKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9LOE04OTAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9DWDcwMF9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX0NYNzAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfUDRNOTAwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfUDRNOTAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfQ043NTBfRElEKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9DTjc1MCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX1ZYODAwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfVlg4MDAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9WWDg1NV9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX1ZYODU1IH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHZpYWZiX3BjaV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2aWFmYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInZpYWZiIiwKKwkuaWRfdGFibGUJPSB2aWFmYl9wY2lfdGFibGUsCisJLnByb2JlCQk9IHZpYV9wY2lfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh2aWFfcGNpX3JlbW92ZSksCit9OworCiBzdGF0aWMgaW50IF9faW5pdCB2aWFmYl9pbml0KHZvaWQpCiB7CiAjaWZuZGVmIE1PRFVMRQpAQCAtMjQ2MywxMyArMjIwNSwxMyBAQAogCXByaW50ayhLRVJOX0lORk8KICAgICAgICAiVklBIEdyYXBoaWNzIEludGVyZ3JhdGlvbiBDaGlwc2V0IGZyYW1lYnVmZmVyICVkLiVkIGluaXRpYWxpemluZ1xuIiwKIAkgICAgICAgVkVSU0lPTl9NQUpPUiwgVkVSU0lPTl9NSU5PUik7Ci0JcmV0dXJuIHZpYV9wY2lfcHJvYmUoKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdmlhZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHZpYWZiX2V4aXQodm9pZCkKIHsKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9leGl0IVxuIik7Ci0JdmlhX3BjaV9yZW1vdmUoKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnZpYWZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHZpYWZiX29wcyA9IHsKQEAgLTI0OTQsODIgKzIyMzYsNzkgQEAKIG1vZHVsZV9leGl0KHZpYWZiX2V4aXQpOwogCiAjaWZkZWYgTU9EVUxFCi1tb2R1bGVfcGFyYW0odmlhZmJfbWVtc2l6ZSwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9tZW1zaXplLCBpbnQsIFNfSVJVU1IpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfbW9kZSwgY2hhcnAsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX21vZGUsIGNoYXJwLCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfbW9kZSwgIlNldCByZXNvbHV0aW9uIChkZWZhdWx0PTY0MHg0ODApIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9tb2RlMSwgY2hhcnAsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX21vZGUxLCBjaGFycCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX21vZGUxLCAiU2V0IHJlc29sdXRpb24gKGRlZmF1bHQ9NjQweDQ4MCkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2JwcCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9icHAsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2JwcCwgIlNldCBjb2xvciBkZXB0aCAoZGVmYXVsdD0zMmJwcCkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2JwcDEsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfYnBwMSwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfYnBwMSwgIlNldCBjb2xvciBkZXB0aCAoZGVmYXVsdD0zMmJwcCkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX3JlZnJlc2gsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfcmVmcmVzaCwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfcmVmcmVzaCwKIAkiU2V0IENSVCB2aWFmYl9yZWZyZXNoIHJhdGUgKGRlZmF1bHQgPSA2MCkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX3JlZnJlc2gxLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX3JlZnJlc2gxLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9yZWZyZXNoMSwKIAkiU2V0IENSVCByZWZyZXNoIHJhdGUgKGRlZmF1bHQgPSA2MCkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9wYW5lbF9pZCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9sY2RfcGFuZWxfaWQsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9wYW5lbF9pZCwKIAkiU2V0IEZsYXQgUGFuZWwgdHlwZShEZWZhdWx0PTEwMjR4NzY4KSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfbGNkX2RzcF9tZXRob2QsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfbGNkX2RzcF9tZXRob2QsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9kc3BfbWV0aG9kLAogCSJTZXQgRmxhdCBQYW5lbCBkaXNwbGF5IHNjYWxpbmcgbWV0aG9kLihEZWZhdWx0PUV4cGFuZHNpb24pIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9TQU1NX09OLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX1NBTU1fT04sIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX1NBTU1fT04sCiAJIlR1cm4gb24vb2ZmIGZsYWcgb2YgU0FNTShEZWZhdWx0PU9GRikiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2FjY2VsLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX2FjY2VsLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9hY2NlbCwKLQkiU2V0IDJEIEhhcmR3YXJlIEFjY2VsZXJhdGlvbi4oRGVmYXVsdCA9IE9GRikiKTsKKwkiU2V0IDJEIEhhcmR3YXJlIEFjY2VsZXJhdGlvbjogMCA9IE9GRiwgMSA9IE9OIChkZWZhdWx0KSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfYWN0aXZlX2RldiwgY2hhcnAsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX2FjdGl2ZV9kZXYsIGNoYXJwLCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfYWN0aXZlX2RldiwgIlNwZWNpZnkgYWN0aXZlIGRldmljZXMuIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCwgaW50LCBTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQsCiAJIkRpc3BsYXkgSGFyZHdhcmUgTGF5b3V0IChMQ0QgT25seSwgRFZJIE9ubHkuLi4sZXRjKSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfc2Vjb25kX3NpemUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfc2Vjb25kX3NpemUsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX3NlY29uZF9zaXplLAogCSJTZXQgc2Vjb25kYXJ5IGRldmljZSBtZW1vcnkgc2l6ZSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfZHVhbF9mYiwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9kdWFsX2ZiLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kdWFsX2ZiLAogCSJUdXJuIG9uL29mZiBmbGFnIG9mIGR1YWwgZnJhbWVidWZmZXIgZGV2aWNlcy4oRGVmYXVsdCA9IE9GRikiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSwKIAkiVHVybiBvbi9vZmYgZmxhZyBvZiBEVkkgZGV2aWNlcyBvbiBFUElBIGJvYXJkLihEZWZhdWx0ID0gT0ZGKSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlLCBpbnQsIFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlLAogCSJUdXJuIG9uL29mZiBmbGFnIG9mIGR1YWwgZWRnZSBwYW5lbC4oRGVmYXVsdCA9IE9GRikiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX2J1c193aWR0aCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2aWFmYl9idXNfd2lkdGgsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2J1c193aWR0aCwKIAkiU2V0IGJ1cyB3aWR0aCBvZiBwYW5lbC4oRGVmYXVsdCA9IDEyKSIpOwogCi1tb2R1bGVfcGFyYW0odmlhZmJfbGNkX21vZGUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmlhZmJfbGNkX21vZGUsIGludCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9tb2RlLAogCSJTZXQgRmxhdCBQYW5lbCBtb2RlKERlZmF1bHQ9T1BFTkxESSkiKTsKIAotbW9kdWxlX3BhcmFtKHZpYWZiX3ZpZGVvX2RldiwgY2hhcnAsIDApOwotTU9EVUxFX1BBUk1fREVTQyh2aWFmYl92aWRlb19kZXYsICJTcGVjaWZ5IHZpZGVvIGRldmljZXMuIik7Ci0KLW1vZHVsZV9wYXJhbSh2aWFmYl9sY2RfcG9ydCwgY2hhcnAsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9wb3J0LCBjaGFycCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9wb3J0LCAiU3BlY2lmeSBMQ0Qgb3V0cHV0IHBvcnQuIik7CiAKLW1vZHVsZV9wYXJhbSh2aWFmYl9kdmlfcG9ydCwgY2hhcnAsIDApOworbW9kdWxlX3BhcmFtKHZpYWZiX2R2aV9wb3J0LCBjaGFycCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2R2aV9wb3J0LCAiU3BlY2lmeSBEVkkgb3V0cHV0IHBvcnQuIik7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCmluZGV4IDIyN2IwMDAuLjBjOTRkMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaApAQCAtMzcsNTEgKzM3LDUwIEBACiAjZGVmaW5lIFZFUlNJT05fT1MgICAgICAgICAgMAkvKiAwOiBmb3IgMzIgYml0cyBPUywgMTogZm9yIDY0IGJpdHMgT1MgKi8KICNkZWZpbmUgVkVSU0lPTl9NSU5PUiAgICAgICA0CiAKLXN0cnVjdCB2aWFmYl9wYXIgewotCWludCBicHA7Ci0JaW50IGhyZXM7Ci0JaW50IHZyZXM7Ci0JaW50IGxpbmVsZW5ndGg7Ci0JdTMyIHhvZmZzZXQ7Ci0JdTMyIHlvZmZzZXQ7Ci0KLQl2b2lkIF9faW9tZW0gKmZibWVtX3ZpcnQ7CS8qZnJhbWVidWZmZXIgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyAqLwotCXZvaWQgX19pb21lbSAqaW9fdmlydDsJLyppb3NwYWNlIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBpbnQgZmJtZW07CS8qZnJhbWVidWZmZXIgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsJLypzaXplIG9mIGZibWVtICovCi0JdW5zaWduZWQgaW50IGlvOwkvKmlvIHNwYWNlIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIG1taW9fYmFzZTsJLyptbWlvIGJhc2UgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgbW1pb19sZW47CS8qbW1pbyBiYXNlIGxlbmd0aCAqLwotCXUzMiBmYm1lbV9mcmVlOwkJLyogRnJlZSBGQiBtZW1vcnkgKi8KLQl1MzIgZmJtZW1fdXNlZDsJCS8qIFVzZSBGQiBtZW1vcnkgc2l6ZSAqLwotCXUzMiBjdXJzb3Jfc3RhcnQ7CS8qIEN1cnNvciBTdGFydCBBZGRyZXNzICovCi0JdTMyIFZRX3N0YXJ0OwkJLyogVmlydHVhbCBRdWV1ZSBTdGFydCBBZGRyZXNzICovCi0JdTMyIFZRX2VuZDsJCS8qIFZpcnR1YWwgUXVldWUgRW5kIEFkZHJlc3MgKi8KLQl1MzIgaWdhX3BhdGg7CitzdHJ1Y3QgdmlhZmJfc2hhcmVkIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7CS8qdmlhZmIgcHJvYyBlbnRyeSAqLwotCXU4IGR1b3ZpZXc7CQkvKklzIHdvcmtpbmcgaW4gZHVvdmlldyBtb2RlPyAqLwogCiAJLyogSTJDIHN0dWZmICovCiAJc3RydWN0IHZpYV9pMmNfc3R1ZmYgaTJjX3N0dWZmOwogCiAJLyogQWxsIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIG5lZWRlZCB0byBzZXQgZW5naW5lICovCisJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB0bWRzX3NldHRpbmdfaW5mbzsKKwlzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gY3J0X3NldHRpbmdfaW5mbzsKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uIGx2ZHNfc2V0dGluZ19pbmZvOworCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gbHZkc19zZXR0aW5nX2luZm8yOworCXN0cnVjdCBjaGlwX2luZm9ybWF0aW9uIGNoaXBfaW5mbzsKKworCS8qIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBzdHVmZiAqLworCXZvaWQgX19pb21lbSAqZW5naW5lX21taW87CisJdTMyIGN1cnNvcl92cmFtX2FkZHI7CisJdTMyIHZxX3ZyYW1fYWRkcjsJLyogdmlydHVhbCBxdWV1ZSBhZGRyZXNzIGluIHZpZGVvIHJhbSAqLworCWludCAoKmh3X2JpdGJsdCkodm9pZCBfX2lvbWVtICplbmdpbmUsIHU4IG9wLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCisJCXU4IGRzdF9icHAsIHUzMiBkc3RfYWRkciwgdTMyIGRzdF9waXRjaCwgdTMyIGRzdF94LCB1MzIgZHN0X3ksCisJCXUzMiAqc3JjX21lbSwgdTMyIHNyY19hZGRyLCB1MzIgc3JjX3BpdGNoLCB1MzIgc3JjX3gsIHUzMiBzcmNfeSwKKwkJdTMyIGZnX2NvbG9yLCB1MzIgYmdfY29sb3IsIHU4IGZpbGxfcm9wKTsKK307CisKK3N0cnVjdCB2aWFmYl9wYXIgeworCXU4IGRlcHRoOworCXUzMiB2cmFtX2FkZHI7CisKKwl1bnNpZ25lZCBpbnQgZmJtZW07CS8qZnJhbWVidWZmZXIgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsJLypzaXplIG9mIGZibWVtICovCisJdTMyIGZibWVtX2ZyZWU7CQkvKiBGcmVlIEZCIG1lbW9yeSAqLworCXUzMiBmYm1lbV91c2VkOwkJLyogVXNlIEZCIG1lbW9yeSBzaXplICovCisJdTMyIGlnYV9wYXRoOworCisJc3RydWN0IHZpYWZiX3NoYXJlZCAqc2hhcmVkOworCisJLyogQWxsIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIG5lZWRlZCB0byBzZXQgZW5naW5lICovCisJLyogZGVwcmVjaWF0ZWQsIHVzZSB0aGUgb25lcyBpbiBzaGFyZWQgZGlyZWN0bHkgKi8KIAlzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uICp0bWRzX3NldHRpbmdfaW5mbzsKIAlzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gKmNydF9zZXR0aW5nX2luZm87CiAJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm87CiAJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm8yOwogCXN0cnVjdCBjaGlwX2luZm9ybWF0aW9uICpjaGlwX2luZm87Ci0KLQkvKiBzb21lIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdmlkZW8gcGxheWluZyAqLwotCWludCB2aWRlb19vbl9jcnQ7Ci0JaW50IHZpZGVvX29uX2R2aTsKLQlpbnQgdmlkZW9fb25fbGNkOwotCiB9Owotc3RydWN0IHZpYWZiX21vZGVpbmZvIHsKLQl1MzIgeHJlczsKLQl1MzIgeXJlczsKLQlpbnQgbW9kZV9pbmRleDsKLX07CisKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX29mZnNldDsKQEAgLTkxLDE0ICs5MCwxMiBAQAogZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOwogZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CiBleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKLWV4dGVybiBpbnQgdmlhZmJfYWNjZWw7CiBleHRlcm4gaW50IHZpYWZiX2hvdHBsdWc7CiBleHRlcm4gaW50IHZpYWZiX21lbXNpemU7CiAKIGV4dGVybiBpbnQgc3RyaWN0X3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLAogCXVuc2lnbmVkIGxvbmcgKnJlcyk7CiAKLXZvaWQgdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHZvaWQgdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCByZWZyZXNoLAogCQkJICBpbnQgbW9kZV9pbmRleCk7CiBpbnQgdmlhZmJfZ2V0X21vZGVfaW5kZXgoaW50IGhyZXMsIGludCB2cmVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYwppbmRleCA2ZGNmNTgzLi5iNzRmOGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jCkBAIC0xMDAsMTIgKzEwMCw4IEBACiB7VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSMzQsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNiwgMHgwOCwgMHgwMH0sCi17VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwote1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KLXtWSUFDUiwgQ1I2NCwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCiB7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKIHtWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCkBAIC0xNTksMTYgKzE1NSwxMiBAQAoge1ZJQVNSLCBDUjMwLCAweEZGLCAweDA0fSwKIHtWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzMsIDB4N0YsIDB4MDB9LAote1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzYsIDB4RkYsIDB4MzF9LAoge1ZJQUNSLCBDUjQxLCAweEZGLCAweDgwfSwKIHtWSUFDUiwgQ1I0MiwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSNTUsIDB4ODAsIDB4MDB9LAoge1ZJQUNSLCBDUjVELCAweDgwLCAweDAwfSwJLypIb3Jpem9udGFsIFJldHJhY2UgU3RhcnQgYml0WzExXSBzaG91bGQgYmUgMCovCi17VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCi17VklBQ1IsIENSNjMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCi17VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCiB7VklBQ1IsIENSNjgsIDB4RkYsIDB4Njd9LAkvKiBEZWZhdWx0IEZJRk8gRm9yIElHQTIgKi8KIHtWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSNkEsIDB4RkQsIDB4NDB9LApAQCAtMjMzLDkgKzIyNSw2IEBACiAJe1ZJQUNSLCBDUjU1LCAweDgwLCAweDAwfSwKIAl7VklBQ1IsIENSNUQsIDB4ODAsIDB4MDB9LAogCXtWSUFDUiwgQ1IzNiwgMHhGRiwgMHgwMX0sCS8qIFBvd2VyIE1hbmdlbWVudCAzICAgICAgICAgICAgICAgICAgKi8KLQl7VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCi0Je1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwotCXtWSUFDUiwgQ1I2NCwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgKi8KIAl7VklBQ1IsIENSNjgsIDB4RkYsIDB4Njd9LAkvKiBEZWZhdWx0IEZJRk8gRm9yIElHQTIgICAgICAgICAgICAgICovCiAJe1ZJQUNSLCBDUjZBLCAweDIwLCAweDIwfSwJLyogRXh0ZW5kZWQgRklGTyBPbiAgICAgICAgICAgICAgICAgICAqLwogCXtWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxICAgICAgICAgICAgKi8KQEAgLTI4NSwxNCArMjc0LDkgQEAKIHtWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjM2LCAweDA4LCAweDAwfSwKIHtWSUFDUiwgQ1I0NywgMHhDOCwgMHgwMH0sCS8qIENsZWFyIFZDSyBQbHVzLiAqLwote1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KLXtWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCi17VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwote1ZJQUNSLCBDUkEzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KIHtWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSNkEsIDB4RkYsIDB4NDB9LAoge1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKQEAgLTMyNSw2OSArMzA5LDYxIEBACiB7VklBQ1IsIENSOTYsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjk3LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I5OSwgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSOUIsIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUkQyLCAweEZGLCAweEZGfQkvKiBUTURTL0xWRFMgY29udHJvbCByZWdpc3Rlci4gICAgICAgICAqLwore1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfQogfTsKIAotLyogRm9yIFZUMzM1MzogQ29tbW9uIFNldHRpbmcgZm9yIFZpZGVvIE1vZGUgKi8KLXN0cnVjdCBpb19yZWcgVlg4MDBfTW9kZVhyZWdzW10gPSB7IHtWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCitzdHJ1Y3QgaW9fcmVnIFZYODU1X01vZGVYcmVnc1tdID0gewore1ZJQVNSLCBTUjEwLCAweEZGLCAweDAxfSwKIHtWSUFTUiwgU1IxNSwgMHgwMiwgMHgwMn0sCiB7VklBU1IsIFNSMTYsIDB4QkYsIDB4MDh9LAoge1ZJQVNSLCBTUjE3LCAweEZGLCAweDFGfSwKIHtWSUFTUiwgU1IxOCwgMHhGRiwgMHg0RX0sCiB7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAoge1ZJQVNSLCBTUjFCLCAweEZGLCAweEYwfSwKLXtWSUFTUiwgU1IxRSwgMHhGRiwgMHgwMX0sCi17VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAore1ZJQVNSLCBTUjFFLCAweDA3LCAweDAxfSwKK3tWSUFTUiwgU1IyQSwgMHhGMCwgMHgwMH0sCit7VklBU1IsIFNSNTgsIDB4RkYsIDB4MDB9LAore1ZJQVNSLCBTUjU5LCAweEZGLCAweDAwfSwKIHtWSUFTUiwgU1IyRCwgMHhGRiwgMHhGRn0sCS8qIFZDSyBhbmQgTENLIFBMTCBwb3dlciBvbi4gICAgICAgICAgICovCit7VklBQ1IsIENSMDksIDB4RkYsIDB4MDB9LAkvKiBJbml0aWFsIENSMDk9MCovCit7VklBQ1IsIENSMTEsIDB4OEYsIDB4MDB9LAkvKiBJR0ExIGluaXRpYWwgIFZlcnRpY2FsIGVuZCAgICAgICAqLwore1ZJQUNSLCBDUjE3LCAweDdGLCAweDAwfSwgCS8qIElHQTEgQ1JUIE1vZGUgY29udHJvbCBpbml0ICAgKi8KIHtWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzMsIDB4N0YsIDB4MDB9LAoge1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNiwgMHgwOCwgMHgwMH0sCi17VklBQ1IsIENSNDcsIDB4QzgsIDB4MDB9LAkvKiBDbGVhciBWQ0sgUGx1cy4gKi8KLXtWSUFDUiwgQ1I2MiwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCi17VklBQ1IsIENSNjMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwote1ZJQUNSLCBDUjY0LCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KLXtWSUFDUiwgQ1JBMywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCiB7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKK3tWSUFDUiwgQ1I2QSwgMHhGRCwgMHg2MH0sCiB7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjZDLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxICAgICAgICAgICAgICovCi17VklBQ1IsIENSN0IsIDB4RkYsIDB4MDJ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMiAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDMgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I3RCwgMHhGRiwgMHgwNH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA0ICAgICAgICAgICAgICovCi17VklBQ1IsIENSN0UsIDB4RkYsIDB4MDd9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNSAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDYgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I4MCwgMHhGRiwgMHgwRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA3ICAgICAgICAgICAgICovCi17VklBQ1IsIENSODEsIDB4RkYsIDB4MTN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOCAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDkgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I4MywgMHhGRiwgMHgxOX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMCAgICAgICAgICAgICovCi17VklBQ1IsIENSODQsIDB4RkYsIDB4MUN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTEgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjg1LCAweEZGLCAweDFEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEyICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I4NiwgMHhGRiwgMHgxRX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMyAgICAgICAgICAgICovCi17VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTQgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUkQ0LCAweEZGLCAweDgxfSwJLyogU2Vjb25kIHBvd2VyIHNlcXVlbmNlIGNvbnRyb2wgICAgICAgKi8KLXtWSUFDUiwgQ1I4QiwgMHhGRiwgMHg1RH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDAgICAgICAgICovCi17VklBQ1IsIENSOEMsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAxICAgICAgICAqLwote1ZJQUNSLCBDUjhELCAweEZGLCAweDZGfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMiAgICAgICAgKi8KLXtWSUFDUiwgQ1I4RSwgMHhGRiwgMHgyQn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDMgICAgICAgICovCi17VklBQ1IsIENSOEYsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA0ICAgICAgICAqLwote1ZJQUNSLCBDUjkwLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNSAgICAgICAgKi8KLXtWSUFDUiwgQ1I5MSwgMHhGRiwgMHg4MH0sCS8qIDI0LzEyIGJpdCBMVkRTIERhdGEgb2ZmICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sICAgICAgICAgIC8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMiAgICAgICAgICAgICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LCAgICAgICAgICAvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwgICAgICAgICAgLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sICAgICAgICAgIC8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LCAgICAgICAgICAvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwgICAgICAgICAgLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1JENCwgMHhGRiwgMHg4MX0sICAgICAgICAgIC8qIFNlY29uZCBwb3dlciBzZXF1ZW5jZSBjb250cm9sICAgICAgICovCit7VklBQ1IsIENSOTEsIDB4RkYsIDB4ODB9LCAgICAgICAgICAvKiAyNC8xMiBiaXQgTFZEUyBEYXRhIG9mZiAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjk2LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I5NywgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSOTksIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1JEMiwgMHhGRiwgMHhGRn0JLyogVE1EUy9MVkRTIGNvbnRyb2wgcmVnaXN0ZXIuICAgICAgICAgKi8KK3tWSUFDUiwgQ1JEMiwgMHhGRiwgMHhGRn0gICAgICAgICAgIC8qIFRNRFMvTFZEUyBjb250cm9sIHJlZ2lzdGVyLiAgICAgICAgICovCiB9OwogCiAvKiBWaWRlbyBNb2RlIFRhYmxlICovCkBAIC00MDEsNyArMzc3LDYgQEAKIHtWSUFTUiwgU1IxQSwgMHhGQiwgMHgwOH0sCiAKIHtWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSMzQsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNiwgMHgwOCwgMHgwMH0sCiB7VklBQ1IsIENSNkEsIDB4RkYsIDB4ODB9LApAQCAtMTA4NCwzICsxMDU5LDE0IEBACiAJe1ZJQV9SRVNfMTI4MFg3MjAsIENFQU0xMjgweDcyMCwgQVJSQVlfU0laRShDRUFNMTI4MHg3MjApfSwKIAl7VklBX1JFU18xOTIwWDEwODAsIENFQU0xOTIweDEwODAsIEFSUkFZX1NJWkUoQ0VBTTE5MjB4MTA4MCl9CiB9OworCitpbnQgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSCA9IEFSUkFZX1NJWkUocmVzX21hcF9yZWZyZXNoX3RibCk7CitpbnQgTlVNX1RPVEFMX0NFQV9NT0RFUyA9IEFSUkFZX1NJWkUoQ0VBX0hETUlfTW9kZXMpOworaW50IE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKENONDAwX01vZGVYcmVncyk7CitpbnQgTlVNX1RPVEFMX0NONzAwX01vZGVYcmVncyA9IEFSUkFZX1NJWkUoQ043MDBfTW9kZVhyZWdzKTsKK2ludCBOVU1fVE9UQUxfS000MDBfTW9kZVhyZWdzID0gQVJSQVlfU0laRShLTTQwMF9Nb2RlWHJlZ3MpOworaW50IE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKENYNzAwX01vZGVYcmVncyk7CitpbnQgTlVNX1RPVEFMX1ZYODU1X01vZGVYcmVncyA9IEFSUkFZX1NJWkUoVlg4NTVfTW9kZVhyZWdzKTsKK2ludCBOVU1fVE9UQUxfQ0xFMjY2X01vZGVYcmVncyA9IEFSUkFZX1NJWkUoQ0xFMjY2X01vZGVYcmVncyk7CitpbnQgTlVNX1RPVEFMX1BBVENIX01PREUgPSBBUlJBWV9TSVpFKHJlc19wYXRjaF90YWJsZSk7CitpbnQgTlVNX1RPVEFMX01PREVUQUJMRSA9IEFSUkFZX1NJWkUoQ0xFMjY2TW9kZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oCmluZGV4IDFhNWRlNTAuLmE5ZDY1NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmgKQEAgLTUwLDEyOCArNTAsMzUgQEAKIAlpbnQgdm1vZGVfcmVmcmVzaDsKIH07CiAKLSNkZWZpbmUgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSCBBUlJBWV9TSVpFKHJlc19tYXBfcmVmcmVzaF90YmwpCi0jZGVmaW5lIE5VTV9UT1RBTF9DRUFfTU9ERVMgIEFSUkFZX1NJWkUoQ0VBX0hETUlfTW9kZXMpCi0jZGVmaW5lIE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDTjQwMF9Nb2RlWHJlZ3MpCi0jZGVmaW5lIE5VTV9UT1RBTF9DTjcwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDTjcwMF9Nb2RlWHJlZ3MpCi0jZGVmaW5lIE5VTV9UT1RBTF9LTTQwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShLTTQwMF9Nb2RlWHJlZ3MpCi0jZGVmaW5lIE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDWDcwMF9Nb2RlWHJlZ3MpCi0jZGVmaW5lIE5VTV9UT1RBTF9WWDgwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShWWDgwMF9Nb2RlWHJlZ3MpCi0jZGVmaW5lIE5VTV9UT1RBTF9DTEUyNjZfTW9kZVhyZWdzIEFSUkFZX1NJWkUoQ0xFMjY2X01vZGVYcmVncykKLSNkZWZpbmUgTlVNX1RPVEFMX1BBVENIX01PREUgQVJSQVlfU0laRShyZXNfcGF0Y2hfdGFibGUpCi0jZGVmaW5lIE5VTV9UT1RBTF9NT0RFVEFCTEUgQVJSQVlfU0laRShDTEUyNjZNb2RlcykKK2V4dGVybiBpbnQgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSDsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX0NFQV9NT0RFUzsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX0NONDAwX01vZGVYcmVnczsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX0NONzAwX01vZGVYcmVnczsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX0tNNDAwX01vZGVYcmVnczsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX0NYNzAwX01vZGVYcmVnczsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX1ZYODU1X01vZGVYcmVnczsKK2V4dGVybiBpbnQgTlVNX1RPVEFMX0NMRTI2Nl9Nb2RlWHJlZ3M7CitleHRlcm4gaW50IE5VTV9UT1RBTF9QQVRDSF9NT0RFOworZXh0ZXJuIGludCBOVU1fVE9UQUxfTU9ERVRBQkxFOwogCiAvKioqKioqKioqKioqKioqKioqKiovCiAvKiBNb2RlIFRhYmxlICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIDQ4MHg2NDAgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTQ4MHg2NDBbMV07Ci0vKiA2NDB4NDgwKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTY0MHg0ODBbNV07Ci0vKjcyMHg0ODAgKEdURikqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNNzIweDQ4MFsxXTsKLS8qNzIweDU3NiAoR1RGKSovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE03MjB4NTc2WzFdOwotLyogODAweDQ4MCAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNODAweDQ4MFsxXTsKLS8qIDgwMHg2MDAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNODAweDYwMFs1XTsKLS8qIDg0OHg0ODAgKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTg0OHg0ODBbMV07Ci0vKjg1Nng0ODAgKEdURikgY29udmVydCB0byA4NTJ4NDgwKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTg1Mng0ODBbMV07Ci0vKjEwMjR4NTEyIChHVEYpKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NTEyWzFdOwotLyogMTAyNHg2MDAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg2MDBbMV07Ci0vKiAxMDI0eDc2OCovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDc2OFs0XTsKLS8qIDExNTJ4ODY0Ki8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTExNTJ4ODY0WzFdOwotLyogMTI4MHg3MjAgKEhETUkgNzIwUCkqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg3MjBbMl07Ci0vKjEyODB4NzY4IChHVEYpKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NzY4WzJdOwotLyogMTI4MHg4MDAgKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4ODAwWzFdOwotLyoxMjgweDk2MCovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDk2MFsxXTsKLS8qIDEyODB4MTAyNCovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDEwMjRbM107Ci0vKiAxMzY4eDc2OCAoR1RGKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2OHg3NjhbMV07Ci0vKjE0NDB4MTA1MCAoR1RGKSovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDQweDEwNTBbMV07Ci0vKiAxNjAweDEyMDAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMjAwWzJdOwotLyogMTY4MHgxMDUwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBbMl07Ci0vKiAxNjgweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBfUkJbMV07Ci0vKiAxOTIweDEwODAgKENWVCkqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMDgwWzFdOwotLyogMTkyMHgxMDgwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEwODBfUkJbMV07Ci0vKiAxOTIweDE0NDAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxNDQwWzJdOwotLyogMTQwMHgxMDUwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDAweDEwNTBbMl07Ci0vKiAxNDAweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDAweDEwNTBfUkJbMV07Ci0vKiA5NjB4NjAwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE05NjB4NjAwWzFdOwotLyogMTAwMHg2MDAgKEdURikgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMDB4NjAwWzFdOwotLyogMTAyNHg1NzYgKEdURikgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NTc2WzFdOwotLyogMTA4OHg2MTIgKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwODh4NjEyWzFdOwotLyogMTE1Mng3MjAgKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTExNTJ4NzIwWzFdOwotLyogMTIwMHg3MjAgKEdURikgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyMDB4NzIwWzFdOwotLyogMTI4MHg2MDAgKEdURikgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NjAwWzFdOwotLyogMTM2MHg3NjggKENWVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjB4NzY4WzFdOwotLyogMTM2MHg3NjggKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzYweDc2OF9SQlsxXTsKLS8qIDEzNjZ4NzY4IChHVEYpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzY2eDc2OFsyXTsKLS8qIDE0NDB4OTAwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDQweDkwMFsyXTsKLS8qIDE0NDB4OTAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHg5MDBfUkJbMV07Ci0vKiAxNjAweDkwMCAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHg5MDBbMV07Ci0vKiAxNjAweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwX1JCWzFdOwotLyogMTYwMHgxMDI0IChHVEYpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjAweDEwMjRbMV07Ci0vKiAxNzkyeDEzNDQgKERNVCkgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE3OTJ4MTM0NFsxXTsKLS8qIDE4NTZ4MTM5MiAoRE1UKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTg1NngxMzkyWzFdOwotLyogMTkyMHgxMjAwIChDVlQpICovCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEyMDBbMV07Ci0vKiAxOTIweDEyMDAgKENWVCB3aXRoIFJlZHVjZSBCbGFua2luZykgKi8KLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTIwMF9SQlsxXTsKLS8qIDIwNDh4MTUzNiAoQ1ZUKSAqLwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMjA0OHgxNTM2WzFdOwotZXh0ZXJuIHN0cnVjdCBWaWRlb01vZGVUYWJsZSBDTEUyNjZNb2Rlc1s0N107Ci1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xMjgweDcyMFsxXTsKLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTE5MjB4MTA4MFsxXTsKLWV4dGVybiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0VBX0hETUlfTW9kZXNbMl07CitleHRlcm4gc3RydWN0IFZpZGVvTW9kZVRhYmxlIENMRTI2Nk1vZGVzW107CitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xMjgweDcyMFtdOworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTkyMHgxMDgwW107CitleHRlcm4gc3RydWN0IFZpZGVvTW9kZVRhYmxlIENFQV9IRE1JX01vZGVzW107CiAKLWV4dGVybiBzdHJ1Y3QgcmVzX21hcF9yZWZyZXNoIHJlc19tYXBfcmVmcmVzaF90YmxbNjFdOwotZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ040MDBfTW9kZVhyZWdzWzUyXTsKLWV4dGVybiBzdHJ1Y3QgaW9fcmVnIENONzAwX01vZGVYcmVnc1s2Nl07Ci1leHRlcm4gc3RydWN0IGlvX3JlZyBLTTQwMF9Nb2RlWHJlZ3NbNTVdOwotZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ1g3MDBfTW9kZVhyZWdzWzU4XTsKLWV4dGVybiBzdHJ1Y3QgaW9fcmVnIFZYODAwX01vZGVYcmVnc1s1OF07Ci1leHRlcm4gc3RydWN0IGlvX3JlZyBDTEUyNjZfTW9kZVhyZWdzWzMyXTsKLWV4dGVybiBzdHJ1Y3QgaW9fcmVnIFBNMTAyNHg3NjhbMl07Ci1leHRlcm4gc3RydWN0IHBhdGNoX3RhYmxlIHJlc19wYXRjaF90YWJsZVsxXTsKK2V4dGVybiBzdHJ1Y3QgcmVzX21hcF9yZWZyZXNoIHJlc19tYXBfcmVmcmVzaF90YmxbXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENONDAwX01vZGVYcmVnc1tdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ043MDBfTW9kZVhyZWdzW107CitleHRlcm4gc3RydWN0IGlvX3JlZyBLTTQwMF9Nb2RlWHJlZ3NbXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENYNzAwX01vZGVYcmVnc1tdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgVlg4MDBfTW9kZVhyZWdzW107CitleHRlcm4gc3RydWN0IGlvX3JlZyBWWDg1NV9Nb2RlWHJlZ3NbXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENMRTI2Nl9Nb2RlWHJlZ3NbXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIFBNMTAyNHg3NjhbXTsKK2V4dGVybiBzdHJ1Y3QgcGF0Y2hfdGFibGUgcmVzX3BhdGNoX3RhYmxlW107CiBleHRlcm4gc3RydWN0IFZQSVRUYWJsZSBWUElUOwogI2VuZGlmIC8qIF9fVklBTU9ERV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jIGIvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmMKaW5kZXggMzIyYTlmOS4uYTZiMzc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmMKQEAgLTI3LDcgKzI3LDcgQEAKIHsKIAl1OCBkYXRhOwogCi0JdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0gcGx2ZHNfY2hpcF9pbmZvLT5pMmNfcG9ydDsKKwl2aWFwYXJpbmZvLT5zaGFyZWQtPmkyY19zdHVmZi5pMmNfcG9ydCA9IHBsdmRzX2NoaXBfaW5mby0+aTJjX3BvcnQ7CiAJdmlhZmJfaTJjX3JlYWRieXRlKHBsdmRzX2NoaXBfaW5mby0+bHZkc19jaGlwX3NsYXZlX2FkZHIsIGluZGV4LCAmZGF0YSk7CiAKIAlyZXR1cm4gZGF0YTsKQEAgLTM5LDcgKzM5LDcgQEAKIHsKIAlpbnQgaW5kZXgsIGRhdGE7CiAKLQl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBwbHZkc19jaGlwX2luZm8tPmkyY19wb3J0OworCXZpYXBhcmluZm8tPnNoYXJlZC0+aTJjX3N0dWZmLmkyY19wb3J0ID0gcGx2ZHNfY2hpcF9pbmZvLT5pMmNfcG9ydDsKIAogCWluZGV4ID0gaW9fZGF0YS5JbmRleDsKIAlkYXRhID0gdmlhZmJfZ3Bpb19pMmNfcmVhZF9sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKaW5kZXggMjZiMjc4Mi4uMjAwYzIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIC8vI2RlZmluZSBERUJVRwogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmFsbG9vbi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CkBAIC04NCw3ICs4NSw3IEBACiAJaW5pdF9jb21wbGV0aW9uKCZ2Yi0+YWNrZWQpOwogCiAJLyogV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFkZCBvbmUgYnVmZmVyIHRvIGFuIGVtcHR5IHF1ZXVlLiAqLwotCWlmICh2cS0+dnFfb3BzLT5hZGRfYnVmKHZxLCAmc2csIDEsIDAsIHZiKSAhPSAwKQorCWlmICh2cS0+dnFfb3BzLT5hZGRfYnVmKHZxLCAmc2csIDEsIDAsIHZiKSA8IDApCiAJCUJVRygpOwogCXZxLT52cV9vcHMtPmtpY2sodnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKaW5kZXggMjQ4ZTAwZS4uNGExZjFlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwpAQCAtODQsNyArODQsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAogCS8qIE1TSS1YIHZlY3RvciAob3Igbm9uZSkgKi8KLQl1bnNpZ25lZCB2ZWN0b3I7CisJdW5zaWduZWQgbXNpeF92ZWN0b3I7CiB9OwogCiAvKiBRdW1yYW5ldCBkb25hdGVkIHRoZWlyIHZlbmRvciBJRCBmb3IgZGV2aWNlcyAweDEwMDAgdGhydSAweDEwRkYuICovCkBAIC0yODAsMjUgKzI4MCwxNCBAQAogCXZwX2Rldi0+bXNpeF9lbnRyaWVzID0gTlVMTDsKIH0KIAotc3RhdGljIGludCB2cF9yZXF1ZXN0X3ZlY3RvcnMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIGludCBudmVjdG9ycywKLQkJCSAgICAgIGJvb2wgcGVyX3ZxX3ZlY3RvcnMpCitzdGF0aWMgaW50IHZwX3JlcXVlc3RfbXNpeF92ZWN0b3JzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBpbnQgbnZlY3RvcnMsCisJCQkJICAgYm9vbCBwZXJfdnFfdmVjdG9ycykKIHsKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2ZGV2KTsKIAljb25zdCBjaGFyICpuYW1lID0gZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpOwogCXVuc2lnbmVkIGksIHY7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlpZiAoIW52ZWN0b3JzKSB7Ci0JCS8qIENhbid0IGFsbG9jYXRlIE1TSS1YIHZlY3RvcnMsIHVzZSByZWd1bGFyIGludGVycnVwdCAqLwotCQl2cF9kZXYtPm1zaXhfdmVjdG9ycyA9IDA7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+cGNpX2Rldi0+aXJxLCB2cF9pbnRlcnJ1cHQsCi0JCQkJICBJUlFGX1NIQVJFRCwgbmFtZSwgdnBfZGV2KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCXZwX2Rldi0+aW50eF9lbmFibGVkID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJdnBfZGV2LT5tc2l4X2VudHJpZXMgPSBrbWFsbG9jKG52ZWN0b3JzICogc2l6ZW9mICp2cF9kZXYtPm1zaXhfZW50cmllcywKIAkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2cF9kZXYtPm1zaXhfZW50cmllcykKQEAgLTMxMSw2ICszMDAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBudmVjdG9yczsgKytpKQogCQl2cF9kZXYtPm1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CiAKKwkvKiBwY2lfZW5hYmxlX21zaXggcmV0dXJucyBwb3NpdGl2ZSBpZiB3ZSBjYW4ndCBnZXQgdGhpcyBtYW55LiAqLwogCWVyciA9IHBjaV9lbmFibGVfbXNpeCh2cF9kZXYtPnBjaV9kZXYsIHZwX2Rldi0+bXNpeF9lbnRyaWVzLCBudmVjdG9ycyk7CiAJaWYgKGVyciA+IDApCiAJCWVyciA9IC1FTk9TUEM7CkBAIC0zNTYsMTAgKzM0NiwyMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICp2cF9maW5kX3ZxKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbmRleCwKLQkJCQkgICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSksCi0JCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHUxNiB2ZWN0b3IpCitzdGF0aWMgaW50IHZwX3JlcXVlc3RfaW50eChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOworCisJZXJyID0gcmVxdWVzdF9pcnEodnBfZGV2LT5wY2lfZGV2LT5pcnEsIHZwX2ludGVycnVwdCwKKwkJCSAgSVJRRl9TSEFSRUQsIGRldl9uYW1lKCZ2ZGV2LT5kZXYpLCB2cF9kZXYpOworCWlmICghZXJyKQorCQl2cF9kZXYtPmludHhfZW5hYmxlZCA9IDE7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKnNldHVwX3ZxKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbmRleCwKKwkJCQkgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqdnEpLAorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgIHUxNiBtc2l4X3ZlYykKIHsKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2ZGV2KTsKIAlzdHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvICppbmZvOwpAQCAtMzg0LDcgKzM4Niw3IEBACiAKIAlpbmZvLT5xdWV1ZV9pbmRleCA9IGluZGV4OwogCWluZm8tPm51bSA9IG51bTsKLQlpbmZvLT52ZWN0b3IgPSB2ZWN0b3I7CisJaW5mby0+bXNpeF92ZWN0b3IgPSBtc2l4X3ZlYzsKIAogCXNpemUgPSBQQUdFX0FMSUdOKHZyaW5nX3NpemUobnVtLCBWSVJUSU9fUENJX1ZSSU5HX0FMSUdOKSk7CiAJaW5mby0+cXVldWUgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pOwpAQCAtNDA4LDEwICs0MTAsMTAgQEAKIAl2cS0+cHJpdiA9IGluZm87CiAJaW5mby0+dnEgPSB2cTsKIAotCSBpZiAodmVjdG9yICE9IFZJUlRJT19NU0lfTk9fVkVDVE9SKSB7Ci0JCWlvd3JpdGUxNih2ZWN0b3IsIHZwX2Rldi0+aW9hZGRyICsgVklSVElPX01TSV9RVUVVRV9WRUNUT1IpOwotCQl2ZWN0b3IgPSBpb3JlYWQxNih2cF9kZXYtPmlvYWRkciArIFZJUlRJT19NU0lfUVVFVUVfVkVDVE9SKTsKLQkJaWYgKHZlY3RvciA9PSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikgeworCWlmIChtc2l4X3ZlYyAhPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikgeworCQlpb3dyaXRlMTYobXNpeF92ZWMsIHZwX2Rldi0+aW9hZGRyICsgVklSVElPX01TSV9RVUVVRV9WRUNUT1IpOworCQltc2l4X3ZlYyA9IGlvcmVhZDE2KHZwX2Rldi0+aW9hZGRyICsgVklSVElPX01TSV9RVUVVRV9WRUNUT1IpOworCQlpZiAobXNpeF92ZWMgPT0gVklSVElPX01TSV9OT19WRUNUT1IpIHsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gb3V0X2Fzc2lnbjsKIAkJfQpAQCAtNDcyLDcgKzQ3NCw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZxLCBuLCAmdmRldi0+dnFzLCBsaXN0KSB7CiAJCWluZm8gPSB2cS0+cHJpdjsKIAkJaWYgKHZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMpCi0JCQlmcmVlX2lycSh2cF9kZXYtPm1zaXhfZW50cmllc1tpbmZvLT52ZWN0b3JdLnZlY3RvciwgdnEpOworCQkJZnJlZV9pcnEodnBfZGV2LT5tc2l4X2VudHJpZXNbaW5mby0+bXNpeF92ZWN0b3JdLnZlY3RvciwKKwkJCQkgdnEpOwogCQl2cF9kZWxfdnEodnEpOwogCX0KIAl2cF9kZXYtPnBlcl92cV92ZWN0b3JzID0gZmFsc2U7CkBAIC00ODQsMzggKzQ4Nyw1OCBAQAogCQkJICAgICAgc3RydWN0IHZpcnRxdWV1ZSAqdnFzW10sCiAJCQkgICAgICB2cV9jYWxsYmFja190ICpjYWxsYmFja3NbXSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWVzW10sCi0JCQkgICAgICBpbnQgbnZlY3RvcnMsCisJCQkgICAgICBib29sIHVzZV9tc2l4LAogCQkJICAgICAgYm9vbCBwZXJfdnFfdmVjdG9ycykKIHsKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2ZGV2KTsKLQl1MTYgdmVjdG9yOwotCWludCBpLCBlcnIsIGFsbG9jYXRlZF92ZWN0b3JzOworCXUxNiBtc2l4X3ZlYzsKKwlpbnQgaSwgZXJyLCBudmVjdG9ycywgYWxsb2NhdGVkX3ZlY3RvcnM7CiAKLQllcnIgPSB2cF9yZXF1ZXN0X3ZlY3RvcnModmRldiwgbnZlY3RvcnMsIHBlcl92cV92ZWN0b3JzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yX3JlcXVlc3Q7CisJaWYgKCF1c2VfbXNpeCkgeworCQkvKiBPbGQgc3R5bGU6IG9uZSBub3JtYWwgaW50ZXJydXB0IGZvciBjaGFuZ2UgYW5kIGFsbCB2cXMuICovCisJCWVyciA9IHZwX3JlcXVlc3RfaW50eCh2ZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3JfcmVxdWVzdDsKKwl9IGVsc2UgeworCQlpZiAocGVyX3ZxX3ZlY3RvcnMpIHsKKwkJCS8qIEJlc3Qgb3B0aW9uOiBvbmUgZm9yIGNoYW5nZSBpbnRlcnJ1cHQsIG9uZSBwZXIgdnEuICovCisJCQludmVjdG9ycyA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnZxczsgKytpKQorCQkJCWlmIChjYWxsYmFja3NbaV0pCisJCQkJCSsrbnZlY3RvcnM7CisJCX0gZWxzZSB7CisJCQkvKiBTZWNvbmQgYmVzdDogb25lIGZvciBjaGFuZ2UsIHNoYXJlZCBmb3IgYWxsIHZxcy4gKi8KKwkJCW52ZWN0b3JzID0gMjsKKwkJfQorCisJCWVyciA9IHZwX3JlcXVlc3RfbXNpeF92ZWN0b3JzKHZkZXYsIG52ZWN0b3JzLCBwZXJfdnFfdmVjdG9ycyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yX3JlcXVlc3Q7CisJfQogCiAJdnBfZGV2LT5wZXJfdnFfdmVjdG9ycyA9IHBlcl92cV92ZWN0b3JzOwogCWFsbG9jYXRlZF92ZWN0b3JzID0gdnBfZGV2LT5tc2l4X3VzZWRfdmVjdG9yczsKIAlmb3IgKGkgPSAwOyBpIDwgbnZxczsgKytpKSB7CiAJCWlmICghY2FsbGJhY2tzW2ldIHx8ICF2cF9kZXYtPm1zaXhfZW5hYmxlZCkKLQkJCXZlY3RvciA9IFZJUlRJT19NU0lfTk9fVkVDVE9SOworCQkJbXNpeF92ZWMgPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUjsKIAkJZWxzZSBpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycykKLQkJCXZlY3RvciA9IGFsbG9jYXRlZF92ZWN0b3JzKys7CisJCQltc2l4X3ZlYyA9IGFsbG9jYXRlZF92ZWN0b3JzKys7CiAJCWVsc2UKLQkJCXZlY3RvciA9IFZQX01TSVhfVlFfVkVDVE9SOwotCQl2cXNbaV0gPSB2cF9maW5kX3ZxKHZkZXYsIGksIGNhbGxiYWNrc1tpXSwgbmFtZXNbaV0sIHZlY3Rvcik7CisJCQltc2l4X3ZlYyA9IFZQX01TSVhfVlFfVkVDVE9SOworCQl2cXNbaV0gPSBzZXR1cF92cSh2ZGV2LCBpLCBjYWxsYmFja3NbaV0sIG5hbWVzW2ldLCBtc2l4X3ZlYyk7CiAJCWlmIChJU19FUlIodnFzW2ldKSkgewogCQkJZXJyID0gUFRSX0VSUih2cXNbaV0pOwogCQkJZ290byBlcnJvcl9maW5kOwogCQl9CiAJCS8qIGFsbG9jYXRlIHBlci12cSBpcnEgaWYgYXZhaWxhYmxlIGFuZCBuZWNlc3NhcnkgKi8KLQkJaWYgKHZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMgJiYgdmVjdG9yICE9IFZJUlRJT19NU0lfTk9fVkVDVE9SKSB7Ci0JCQlzbnByaW50Zih2cF9kZXYtPm1zaXhfbmFtZXNbdmVjdG9yXSwgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCi0JCQkJICIlcy0lcyIsIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOwotCQkJZXJyID0gcmVxdWVzdF9pcnEodnBfZGV2LT5tc2l4X2VudHJpZXNbdmVjdG9yXS52ZWN0b3IsCi0JCQkJCSAgdnJpbmdfaW50ZXJydXB0LCAwLAotCQkJCQkgIHZwX2Rldi0+bXNpeF9uYW1lc1t2ZWN0b3JdLCB2cXNbaV0pOworCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycykgeworCQkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKKwkJCQkgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCisJCQkJICIlcy0lcyIsCisJCQkJIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOworCQkJZXJyID0gcmVxdWVzdF9pcnEobXNpeF92ZWMsIHZyaW5nX2ludGVycnVwdCwgMCwKKwkJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJCQkgIHZxc1tpXSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJdnBfZGVsX3ZxKHZxc1tpXSk7CiAJCQkJZ290byBlcnJvcl9maW5kOwpAQCAtNTM3LDI4ICs1NjAsMjAgQEAKIAkJICAgICAgIHZxX2NhbGxiYWNrX3QgKmNhbGxiYWNrc1tdLAogCQkgICAgICAgY29uc3QgY2hhciAqbmFtZXNbXSkKIHsKLQlpbnQgdmVjdG9ycyA9IDA7Ci0JaW50IGksIHVuaW5pdGlhbGl6ZWRfdmFyKGVycik7CisJaW50IGVycjsKIAotCS8qIEhvdyBtYW55IHZlY3RvcnMgd291bGQgd2UgbGlrZT8gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnZxczsgKytpKQotCQlpZiAoY2FsbGJhY2tzW2ldKQotCQkJKyt2ZWN0b3JzOwotCi0JLyogV2Ugd2FudCBhdCBtb3N0IG9uZSB2ZWN0b3IgcGVyIHF1ZXVlIGFuZCBvbmUgZm9yIGNvbmZpZyBjaGFuZ2VzLiAqLwotCWVyciA9IHZwX3RyeV90b19maW5kX3Zxcyh2ZGV2LCBudnFzLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMsCi0JCQkJIHZlY3RvcnMgKyAxLCB0cnVlKTsKKwkvKiBUcnkgTVNJLVggd2l0aCBvbmUgdmVjdG9yIHBlciBxdWV1ZS4gKi8KKwllcnIgPSB2cF90cnlfdG9fZmluZF92cXModmRldiwgbnZxcywgdnFzLCBjYWxsYmFja3MsIG5hbWVzLCB0cnVlLCB0cnVlKTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIDA7Ci0JLyogRmFsbGJhY2sgdG8gc2VwYXJhdGUgdmVjdG9ycyBmb3IgY29uZmlnIGFuZCBhIHNoYXJlZCBmb3IgcXVldWVzLiAqLworCS8qIEZhbGxiYWNrOiBNU0ktWCB3aXRoIG9uZSB2ZWN0b3IgZm9yIGNvbmZpZywgb25lIHNoYXJlZCBmb3IgcXVldWVzLiAqLwogCWVyciA9IHZwX3RyeV90b19maW5kX3Zxcyh2ZGV2LCBudnFzLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMsCi0JCQkJIDIsIGZhbHNlKTsKKwkJCQkgdHJ1ZSwgZmFsc2UpOwogCWlmICghZXJyKQogCQlyZXR1cm4gMDsKIAkvKiBGaW5hbGx5IGZhbGwgYmFjayB0byByZWd1bGFyIGludGVycnVwdHMuICovCi0JZXJyID0gdnBfdHJ5X3RvX2ZpbmRfdnFzKHZkZXYsIG52cXMsIHZxcywgY2FsbGJhY2tzLCBuYW1lcywKLQkJCQkgMCwgZmFsc2UpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIHZwX3RyeV90b19maW5kX3Zxcyh2ZGV2LCBudnFzLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMsCisJCQkJICBmYWxzZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgc3RydWN0IHZpcnRpb19jb25maWdfb3BzIHZpcnRpb19wY2lfY29uZmlnX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCmluZGV4IGE4ODJmMjYuLmY1MzYwMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwpAQCAtMjA4LDcgKzIwOCwxMSBAQAogCiAJcHJfZGVidWcoIkFkZGVkIGJ1ZmZlciBoZWFkICVpIHRvICVwXG4iLCBoZWFkLCB2cSk7CiAJRU5EX1VTRSh2cSk7Ci0JcmV0dXJuIDA7CisKKwkvKiBJZiB3ZSdyZSBpbmRpcmVjdCwgd2UgY2FuIGZpdCBtYW55IChhc3N1bWluZyBub3QgT09NKS4gKi8KKwlpZiAodnEtPmluZGlyZWN0KQorCQlyZXR1cm4gdnEtPm51bV9mcmVlID8gdnEtPnZyaW5nLm51bSA6IDA7CisJcmV0dXJuIHZxLT5udW1fZnJlZTsKIH0KIAogc3RhdGljIHZvaWQgdnJpbmdfa2ljayhzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZseW5xL3ZseW5xLmMgYi9kcml2ZXJzL3ZseW5xL3ZseW5xLmMKaW5kZXggZjA1ZDJhMy4uYmEzZDcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92bHlucS92bHlucS5jCisrKyBiL2RyaXZlcnMvdmx5bnEvdmx5bnEuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9iYWxsb29uLmMgYi9kcml2ZXJzL3hlbi9iYWxsb29uLmMKaW5kZXggZjViYmQ5ZS4uZDMxNTA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMveGVuL2JhbGxvb24uYwpAQCAtOTYsMTEgKzk2LDcgQEAKIC8qIFdlIGluY3JlYXNlL2RlY3JlYXNlIGluIGJhdGNoZXMgd2hpY2ggZml0IGluIGEgcGFnZSAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJhbWVfbGlzdFtQQUdFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOwogCi0vKiBWTSAvcHJvYyBpbmZvcm1hdGlvbiBmb3IgbWVtb3J5ICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlczsKLQogI2lmZGVmIENPTkZJR19ISUdITUVNCi1leHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2hfcGFnZXM7CiAjZGVmaW5lIGluY190b3RhbGhpZ2hfcGFnZXMoKSAodG90YWxoaWdoX3BhZ2VzKyspCiAjZGVmaW5lIGRlY190b3RhbGhpZ2hfcGFnZXMoKSAodG90YWxoaWdoX3BhZ2VzLS0pCiAjZWxzZQpAQCAtMjE0LDcgKzIxMCw3IEBACiAJcGFnZSA9IGJhbGxvb25fZmlyc3RfcGFnZSgpOwogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CiAJCUJVR19PTihwYWdlID09IE5VTEwpOwotCQlmcmFtZV9saXN0W2ldID0gcGFnZV90b19wZm4ocGFnZSk7OworCQlmcmFtZV9saXN0W2ldID0gcGFnZV90b19wZm4ocGFnZSk7CiAJCXBhZ2UgPSBiYWxsb29uX25leHRfcGFnZShwYWdlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2V2dGNobi5jIGIvZHJpdmVycy94ZW4vZXZ0Y2huLmMKaW5kZXggYWYwMzE5NS4uNzliZWRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZXZ0Y2huLmMKKysrIGIvZHJpdmVycy94ZW4vZXZ0Y2huLmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IGZmZTI2NjMuLjVlYTgwYjEgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC00Niw2ICs0NiwyMiBAQAogCQkJCSAgIGN4Z2IzL2FlbDIwMDVfb3B0X2VkYy5iaW4gXAogCQkJCSAgIGN4Z2IzL2FlbDIwMDVfdHd4X2VkYy5iaW4gXAogCQkJCSAgIGN4Z2IzL2FlbDIwMjBfdHd4X2VkYy5iaW4KK2Z3LXNoaXBwZWQtJChDT05GSUdfRFJNX01HQSkgKz0gbWF0cm94L2cyMDBfd2FycC5mdyBtYXRyb3gvZzQwMF93YXJwLmZ3Citmdy1zaGlwcGVkLSQoQ09ORklHX0RSTV9SMTI4KSArPSByMTI4L3IxMjhfY2NlLmJpbgorZnctc2hpcHBlZC0kKENPTkZJR19EUk1fUkFERU9OKSArPSByYWRlb24vUjEwMF9jcC5iaW4gcmFkZW9uL1IyMDBfY3AuYmluIFwKKwkJCQkgICByYWRlb24vUjMwMF9jcC5iaW4gcmFkZW9uL1I0MjBfY3AuYmluIFwKKwkJCQkgICByYWRlb24vUlM2OTBfY3AuYmluIHJhZGVvbi9SUzYwMF9jcC5iaW4gXAorCQkJCSAgIHJhZGVvbi9SNTIwX2NwLmJpbiBcCisJCQkJICAgcmFkZW9uL1I2MDBfcGZwLmJpbiByYWRlb24vUjYwMF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjYxMF9wZnAuYmluIHJhZGVvbi9SVjYxMF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjYzMF9wZnAuYmluIHJhZGVvbi9SVjYzMF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjYyMF9wZnAuYmluIHJhZGVvbi9SVjYyMF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjYzNV9wZnAuYmluIHJhZGVvbi9SVjYzNV9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjY3MF9wZnAuYmluIHJhZGVvbi9SVjY3MF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SUzc4MF9wZnAuYmluIHJhZGVvbi9SUzc4MF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjc3MF9wZnAuYmluIHJhZGVvbi9SVjc3MF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjczMF9wZnAuYmluIHJhZGVvbi9SVjczMF9tZS5iaW4gXAorCQkJCSAgIHJhZGVvbi9SVjcxMF9wZnAuYmluIHJhZGVvbi9SVjcxMF9tZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRFZCX0FWNzExMCkgKz0gYXY3MTEwL2Jvb3Rjb2RlLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19EVkJfVFRVU0JfQlVER0VUKSArPSB0dHVzYi1idWRnZXQvZHNwYm9vdGNvZGUuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0UxMDApICs9IGUxMDAvZDEwMW1fdWNvZGUuYmluIGUxMDAvZDEwMXNfdWNvZGUuYmluIFwKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCA4MmRiNTI1Li4zZjhjNGY2IDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC03MjcsMyArNzI3LDEyNCBAQAogICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgYnkgUGF1bCBEYXZpcyA8cGJkQG9wLm5ldD4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBtZ2EgLSBNYXRyb3ggRzIwMC9HNDAwL0c1NTAKKworRmlsZTogbWF0cm94L2cyMDBfd2FycC5mdworRmlsZTogbWF0cm94L2c0MDBfd2FycC5mdworCitMaWNlbmNlOgorCitDb3B5cmlnaHQgMTk5OSBNYXRyb3ggR3JhcGhpY3MgSW5jLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCit0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCit0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKK2FuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKK01BVFJPWCBHUkFQSElDUyBJTkMuLCBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUKK09SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHIxMjggLSBBVEkgUmFnZSAxMjgKKworRmlsZTogcjEyOC9yMTI4X2NjZS5iaW4KKworTGljZW5jZToKKworQ29weXJpZ2h0IDIwMDAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogUFJFQ0lTSU9OIElOU0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0ZvdW5kIGluIGRlY2ltYWwgZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IHJhZGVvbiAtIEFUSSBSYWRlb24KKworRmlsZTogcmFkZW9uL1IxMDBfY3AuYmluCitGaWxlOiByYWRlb24vUjIwMF9jcC5iaW4KK0ZpbGU6IHJhZGVvbi9SMzAwX2NwLmJpbgorRmlsZTogcmFkZW9uL1I0MjBfY3AuYmluCitGaWxlOiByYWRlb24vUlM2MDBfY3AuYmluCitGaWxlOiByYWRlb24vUlM2OTBfY3AuYmluCitGaWxlOiByYWRlb24vUjUyMF9jcC5iaW4KK0ZpbGU6IHJhZGVvbi9SNjAwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SNjAwX21lLmJpbgorRmlsZTogcmFkZW9uL1JWNjEwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYxMF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYzMF9wZnAuYmluCitGaWxlOiByYWRlb24vUlY2MzBfbWUuYmluCitGaWxlOiByYWRlb24vUlY2MjBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNjIwX21lLmJpbgorRmlsZTogcmFkZW9uL1JWNjM1X3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjYzNV9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjY3MF9wZnAuYmluCitGaWxlOiByYWRlb24vUlY2NzBfbWUuYmluCitGaWxlOiByYWRlb24vUlM3ODBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JTNzgwX21lLmJpbgorRmlsZTogcmFkZW9uL1JWNzcwX3BmcC5iaW4KK0ZpbGU6IHJhZGVvbi9SVjc3MF9tZS5iaW4KK0ZpbGU6IHJhZGVvbi9SVjczMF9wZnAuYmluCitGaWxlOiByYWRlb24vUlY3MzBfbWUuYmluCitGaWxlOiByYWRlb24vUlY3MTBfcGZwLmJpbgorRmlsZTogcmFkZW9uL1JWNzEwX21lLmJpbgorCitMaWNlbmNlOgorCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9maXJtd2FyZS9paGV4MmZ3LmMgYi9maXJtd2FyZS9paGV4MmZ3LmMKaW5kZXggOGY3ZmRhYS4uNWEwM2JhOCAxMDA2NDQKLS0tIGEvZmlybXdhcmUvaWhleDJmdy5jCisrKyBiL2Zpcm13YXJlL2loZXgyZncuYwpAQCAtNTYsNyArNTYsNyBAQAogc3RhdGljIGludCBzb3J0X3JlY29yZHMgPSAwOwogc3RhdGljIGludCB3aWRlX3JlY29yZHMgPSAwOwogCi1pbnQgdXNhZ2Uodm9pZCkKK3N0YXRpYyBpbnQgdXNhZ2Uodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgImloZXgyZnc6IENvbnZlcnQgaWhleCBmaWxlcyBpbnRvIGJpbmFyeSAiCiAJCSJyZXByZXNlbnRhdGlvbiBmb3IgdXNlIGJ5IExpbnV4IGtlcm5lbFxuIik7CmRpZmYgLS1naXQgYS9maXJtd2FyZS9tYXRyb3gvZzIwMF93YXJwLkgxNiBiL2Zpcm13YXJlL21hdHJveC9nMjAwX3dhcnAuSDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjRiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9tYXRyb3gvZzIwMF93YXJwLkgxNgpAQCAtMCwwICsxLDI4IEBACisvKgorICogV0FSUCBwaXBlcyBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbnMgdGhleSBwZXJmb3JtLCB3aGVyZQorICoKKyAqICAgLSBUIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdGV4dHVyZSBzdGFnZSAwCisgKiAgIC0gVDIgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBib3RoIHRleHR1cmUgc3RhZ2UgMCBhbmQgdGV4dHVyZSBzdGFnZSAxCisgKiAgIC0gRyBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHRyaWFuZ2xlIGludGVuc2l0eSAoR291cmF1ZCBpbnRlcnBvbGF0aW9uKQorICogICAtIFogc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiBaIGJ1ZmZlciBpbnRlcnBvbGF0aW9uCisgKiAgIC0gUyBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHNwZWN1bGFyIGhpZ2hsaWdodAorICogICAtIEEgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB0aGUgYWxwaGEgY2hhbm5lbAorICogICAtIEYgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB2ZXJ0ZXggZm9nIGludGVycG9sYXRpb24KKyAqLworLyogVEdaICovCis6MDRCODAwMDAwMDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA5OEEwRTk0MDQwRDhFQ0ZGODBDMEU5MDA4MDAwRTgxRkQ3MThCRDNGRDcyMkJEODEwNDg5MDQwMTA0MDkwNEM5NDFDMEVDMTEwNDAwRTA0MUNDNDFDRDQ5Q0M0OUNERDE0MUMwRUM1MUNDNTFDRDgwMDQxMDA0MDgwNDAwRTAwMENDQzBDREQxNDlDMEVDOEExRjIwRTk4QjNGMjBFOTQxM0M0MUFENDkzQzQ5QUQxMENDMTBDRDA4Q0MwOENEQjk0MTQ5QkIxRkYwNDFDRDUxM0M1MUFEMDA5ODgwRTk3MjgwMDdFQTI0MUYyMEU5MTU0MTQ5QkQxRDQxNTFCRDJFNDEyQUI4MzQ1M0EwRTgxNTMwMUQzMDU4RTMwMEUwQjU0MDQ4QkQzRDQwNTBCRDI0NDNBMEU4MkM0QkEwRTgxNTcyMDlFMzAwRTAxRDcyMzUzMEI1MzBCRDMwM0QzMDlDOTc1NzlGMDA4MDAwRTg2QzY0QzhFQzk4RTFCNTA1QkQwNTJFMzAzMkMwQTBFODMzQzBBMEU4NzQ2NEM4RUM0MDNDNDBBRDMyNkEyQTMwMjA3MzMzNkEwMEUwMjg3MzFDNzI4M0UyNjA4MDE1RUFCODNEMjhERjMwMzUyMERGNDAzMDAwRTBDQ0UyNjQ3MjI1NDI1MkJGMkQ0MjRBQkYzMDJFMzBERjM4MkUzOERGMTgxRDQ1RTkxRTE1NDVFOTJCNDk1MUJEMDBFMDFGNzMzODM4NDBBRjMwMzA0MEFGMjQxRjI0REYxRDMyMjBFOTJDMUYyQ0RGMUEzMzIwRTlCMDEwMDhFMzQwMTBCODEwMjZGMDMwQ0QyRkYwMzhDRDJCODAyMEU5MkE4MDIwRTlBNjIwODhFMjAwRTBBRjIwMjgyQTI2QUYyMDJBQzBBRjM0MUYzNERGNDYyNDQ2REYyODMwODBCRjIwMzg4MEJGNDcyNDQ3REY0RTJDNEVERjRGMkM0RkRGNTYzNDU2REYyODE1MjhERjIwMUQyMERGNTczNDU3REYwMEUwMUQwNTA0ODAxMEVBODlFMjJCMzAzRkMxMURCRDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEEwNjhCRjI1MDA4MDAwRTgyMEMwMjBBRjI4MDU5Nzc0MDBFMDJBMTAxNkMwMjBFOTA0ODAxMEVBOENFMjk1MDUyOEMxMjhBRDFGQzExNUJEMDA4MDAwRTgwMDgwMDBFOEE4Njc5RjZCMDA4MDAwRTgyOEMwMjhBRDFEMjUyMDA1MjgzMjgwQUQ0MDJBNDBCRDFDODAyMEU5MjAzMzIwQUQyMDczMDBFMEI2NDk1MUJCMjYyRkIwRTgxOTIwMjBFOTM1MjAzNURGM0QyMDNEREYxNTIwMTVERjFEMjAxRERGMjZEMDI2Q0QyOTQ5MkFCODI2NDA4MEJEM0I0ODUwQkQzRTU0NTc5RjAwRTA4MkUxMUVBRjU5OUYwMDgwMDBFODI2MzAyOTMwNDgzQzQ4QUQyQjcyQzJFMTJDQzA0NEMyMDUyNDM0QkYwRDI0MkNCRjJENDY0RUJGMjU0NjU2QkYyMDFENkY4RjMyM0U1RkU5M0U1MDU2OUYwMEUwM0IzMDFFOEY1MTlGMzMxRTVGRTkwNTQ0NTRCMjBENDQ0Q0IyMTlDMEIwRTgzNEMwNDRDNDMzNzMwMEUwM0U2MjU3OUYxRUFGNTk5RjAwRTAwRDIwODQzRTU4RTkyODFENkY4RjA1MjAwMEUwODUxRTU4RTk5QjNCMzNERjIwMjA0MkFGMzA0MjU2OUY4MDNFNTdFOTNGOEY1MTlGMzA4MDVGRTkyODI4MjRBRjgxMUU1N0U5MDU0NzU3QkYwRDQ3NEZCRjg4ODA1OEU5MUIyOTFCREYzMDFENkY4RjNBMzA0RkU5MUMzMDI2REYwOUUzM0IwNTNFNTA1NjlGM0IzRjRGRTkxRThGNTE5RjAwRTBBQzIwMkQ0NDRDQjQyQzFDQzBBRjI1NDQ1NEI0MDBFMEM4MzAzMDQ2MzBBRjFCMUI0OEFGMDBFMDI1MjAzODJDNEZFOTg2ODA1N0U5MzgxRDZGOEYyODc0MDBFMDBENDQ0Q0IwMDU0NDU0QjAyRDIwOUIxMDgyM0U1N0U5MzJGMDFCQ0QxRUJENTk5RjgzMUU1N0U5Mzg0NzM4QUYzNDIwMkEzMDAwRTAwRDIwMzIyMDA1MjA4NzgwNTdFOTFGNTQ1NzlGMTc0MjU2OUYwMEUwM0I2QTNGOEY1MTlGMzcxRTRGRTkzNzMyMkFBRjAwRTAzMjAwMDA4MDAwRTgyN0MwNDRDMDM2MUY0RkU5MUYxRjI2REYzNzFCMzdCRjE3MjYxN0RGM0UxNzRGRTkzRjNGNEZFOTM0MUYzNEFGMkIwNUE3MjAzMzJCMzdERjI3MTdDMEFGMzQ4MDRGRTkwMDgwMDBFODAzODAwQUVBMTdDMTJCQkQwMDgwMDBFODAwODAwMEU4QjM2ODk3MjUwMDgwMDBFODMzQzAzM0FGM0MyNzRGRTk1NzM5MjBFOTI4MTk2MEVDMkIzMjIwRTkxRDNCMjBFOUIzMDUwMEUwMTYyODIwRTkyMzNCMzNBRDFFMkIyMEU5MUM4MDIwRTk1NzM2MjBFOTAwODBBMEU5NDA0MEQ4RUNGRjgwQzBFOTkwRTIwMEUwODVGRjIwRUExOUM4QzFDRDFGRDcxOEJEM0ZENzIyQkQ5RjQxNDlCRDAwODAwMEU4MjU0MTQ5QkQyRDQxNTFCRDBEODAwN0VBMDA4MDAwRTgzNTQwNDhCRDNENDA1MEJEMDA4MDAwRTgyNTMwMkQzMDM1MzBCNTMwQkQzMDNEMzA5Q0E3NUI5RjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODg0RkYwQUVBMDA4MDAwRThDOTQxQzhFQzQyRTEwMEUwODJGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThDODQwQzBFQzAwODAwMEU4N0ZGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg3MQorLyogVEdaRiAqLworOjA1NDgwMDAwMDAwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA5OEEwRTk0MDQwRDhFQ0ZGODBDMEU5MDA4MDAwRTgxRkQ3MThCRDNGRDcyMkJEODEwNDg5MDQwMTA0MDkwNEM5NDFDMEVDMTEwNDAwRTA0MUNDNDFDRDQ5Q0M0OUNERDE0MUMwRUM1MUNDNTFDRDgwMDQxMDA0MDgwNDAwRTAwMENDQzBDREQxNDlDMEVDOEExRjIwRTk4QjNGMjBFOTQxM0M0MUFENDkzQzQ5QUQxMENDMTBDRDA4Q0MwOENEQjk0MTQ5QkIxRkYwNDFDRDUxM0M1MUFEMDA5ODgwRTk3RjgwMDdFQTI0MUYyMEU5MjE0NTgwRTgxQTREODBFODMxNTU4MEU4MDA4MDAwRTgxNTQxNDlCRDFENDE1MUJEMkU0MTJBQjgzNDUzQTBFODE1MzAxRDMwNThFMzAwRTBCNTQwNDhCRDNENDA1MEJEMjQ0M0EwRTgyQzRCQTBFODE1NzIwOUUzMDBFMDFENzIzNTMwQjUzMEJEMzAzRDMwOUM5NzU3OUYwMDgwMDBFODZDNjRDOEVDOThFMUI1MDVCRDA1MkUzMDMyQzBBMEU4MzNDMEEwRTg3NDY0QzhFQzQwM0M0MEFEMzI2QTJBMzAyMDczMzM2QTAwRTAyODczMUM3MjgzRTI2QjgwMTVFQUI4M0QyOERGMzAzNTIwREY0MDMwMDBFMENDRTI2NDcyMjU0MjUyQkYyRDQyNEFCRjMwMkUzMERGMzgyRTM4REYxODFENDVFOTFFMTU0NUU5MkI0OTUxQkQwMEUwMUY3MzM4Mzg0MEFGMzAzMDQwQUYyNDFGMjRERjFEMzIyMEU5MkMxRjJDREYxQTMzMjBFOUIwMTAwOEUzNDAxMEI4MTAyNkYwMzBDRDJGRjAzOENEMkI4MDIwRTkyQTgwMjBFOUE2MjA4OEUyMDBFMEFGMjAyODJBMjZBRjIwMkFDMEFGMzQxRjM0REY0NjI0NDZERjI4MzA4MEJGMjAzODgwQkY0NzI0NDdERjRFMkM0RURGNEYyQzRGREY1NjM0NTZERjI4MTUyOERGMjAxRDIwREY1NzM0NTdERjAwRTAxRDA1MDQ4MDEwRUE4OUUyMkIzMDNGQzExREJEMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4QTA2OEJGMjUwMDgwMDBFODIwQzAyMEFGMjgwNTk3NzQwMEUwMkExMDE2QzAyMEU5MDQ4MDEwRUE4Q0UyOTUwNTI4QzEyOEFEMUZDMTE1QkQwMDgwMDBFODAwODAwMEU4QTg2NzlGNkIwMDgwMDBFODI4QzAyOEFEMUQyNTIwMDUyODMyODBBRDQwMkE0MEJEMUM4MDIwRTkyMDMzMjBBRDIwNzMwMEUwQjY0OTUxQkIyNjJGQjBFODE5MjAyMEU5MzUyMDM1REYzRDIwM0RERjE1MjAxNURGMUQyMDFEREYyNkQwMjZDRDI5NDkyQUI4MjY0MDgwQkQzQjQ4NTBCRDNFNTQ1NzlGMDBFMDgyRTExRUFGNTk5RjAwODAwMEU4MjYzMDI5MzA0ODNDNDhBRDJCNzJDMkUxMkNDMDQ0QzIwNTI0MzRCRjBEMjQyQ0JGMkQ0NjRFQkYyNTQ2NTZCRjIwMUQ2RjhGMzIzRTVGRTkzRTUwNTY5RjAwRTAzQjMwMUU4RjUxOUYzMzFFNUZFOTA1NDQ1NEIyMEQ0NDRDQjIxOUMwQjBFODM0QzA0NEM0MzM3MzAwRTAzRTYyNTc5RjFFQUY1OTlGMDBFMDBEMjA4NDNFNThFOTI4MUQ2RjhGMDUyMDAwRTA4NTFFNThFOTlCM0IzM0RGMjAyMDQyQUYzMDQyNTY5RjgwM0U1N0U5M0Y4RjUxOUYzMDgwNUZFOTI4MjgyNEFGODExRTU3RTkwNTQ3NTdCRjBENDc0RkJGODg4MDU4RTkxQjI5MUJERjMwMUQ2RjhGM0EzMDRGRTkxQzMwMjZERjA5RTMzQjA1M0U1MDU2OUYzQjNGNEZFOTFFOEY1MTlGMDBFMEFDMjAyRDQ0NENCNDJDMUNDMEFGMjU0NDU0QjQwMEUwQzgzMDMwNDYzMEFGMUIxQjQ4QUYwMEUwMjUyMDM4MkM0RkU5ODY4MDU3RTkzODFENkY4RjI4NzQwMEUwMEQ0NDRDQjAwNTQ0NTRCMDJEMjA5QjEwODIzRTU3RTkzMkYwMUJDRDFFQkQ1OTlGODMxRTU3RTkzODQ3MzhBRjM0MjAyQTMwMDBFMDBEMjAzMjIwMDUyMDg3ODA1N0U5MUY1NDU3OUYxNzQyNTY5RjAwRTAzQjZBM0Y4RjUxOUYzNzFFNEZFOTM3MzIyQUFGMDBFMDMyMDAwMDgwMDBFODI3QzA0NEMwMzYxRjRGRTkxRjFGMjZERjM3MUIzN0JGMTcyNjE3REYzRTE3NEZFOTNGM0Y0RkU5MzQxRjM0QUYyQjA1QTcyMDMzMkIzN0RGMjcxN0MwQUYzNDgwNEZFOTAwODAwMEU4MEQyMTFBQjYwNTIxMzFCNjAzODAyQUVBMTdDMTJCQkQwRDIwMDUyMDJGQzAyMUM2QjM2ODk3MjUwMDgwMDBFODMzQzAzM0FGM0MyNzRGRTkxNzUwNTY5RjAwODAwMEU4MzcwRjVDOUYwMEUwMkYyMDAwODAwMEU4MjgxOTYwRUNCMzA1MDBFMDAwODAwMEU4MjMzQjMzQUQwMDgwMDBFODE3MjYxN0RGMzUxNzRGRTkwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgzOTM3NEZFOTJGMkYxN0FGMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MzE4MDRGRTkwMDgwMDBFODAwODAwMEU4NTczOTIwRTkxNjI4MjBFOTFEM0IyMEU5MUUyQjIwRTkyQjMyMjBFOTFDMjMyMEU5NTczNjIwRTkwMDgwQTBFOTQwNDBEOEVDRkY4MEMwRTk5MEUyMDBFMDc4RkYyMEVBMTlDOEMxQ0QxRkQ3MThCRDNGRDcyMkJEOUY0MTQ5QkQwMDgwMDBFODI1NDE0OUJEMkQ0MTUxQkQwRDgwMDdFQTAwODAwMEU4MzU0MDQ4QkQzRDQwNTBCRDAwODAwMEU4MjUzMDJEMzAzNTMwQjUzMEJEMzAzRDMwOUNBNzVCOUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg3N0ZGMEFFQTAwODAwMEU4Qzk0MUM4RUM0MkUxMDBFMDc1RkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4Qzg0MEMwRUMwMDgwMDBFODcyRkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4QkIKKy8qIFRHWkEgKi8KKzowNEU4MDAwMDAwMDA5OEEwRTk0MDQwRDhFQ0ZGODBDMEU5MDA4MDAwRTgxRkQ3MThCRDNGRDcyMkJEODEwNDg5MDQwMTA0MDkwNEM5NDFDMEVDMTEwNDAwRTA0MUNDNDFDRDQ5Q0M0OUNERDE0MUMwRUM1MUNDNTFDRDgwMDQxMDA0MDgwNDAwRTAwMENDQzBDREQxNDlDMEVDOEExRjIwRTk4QjNGMjBFOTQxM0M0MUFENDkzQzQ5QUQxMENDMTBDRDA4Q0MwOENEQjk0MTQ5QkIxRkYwNDFDRDUxM0M1MUFEMDA5ODgwRTk3RDgwMDdFQTI0MUYyMEU5MTU0MTQ5QkQxRDQxNTFCRDJFNDEyQUI4MzQ1M0EwRTgxNTMwMUQzMDU4RTMwMEUwQjU0MDQ4QkQzRDQwNTBCRDI0NDNBMEU4MkM0QkEwRTgxNTcyMDlFMzAwRTAxRDcyMzUzMEI1MzBCRDMwM0QzMDlDOTc1NzlGMDA4MDAwRTg2QzY0QzhFQzk4RTFCNTA1QkQwNTJFMzAzMkMwQTBFODMzQzBBMEU4NzQ2NEM4RUM0MDNDNDBBRDMyNkEyQTMwMjA3MzMzNkEwMEUwMjg3MzFDNzI4M0UyNkI4MDE1RUFCODNEMjhERjMwMzUyMERGNDAzMDAwRTBDQ0UyNjQ3MjI1NDI1MkJGMkQ0MjRBQkYzMDJFMzBERjM4MkUzOERGMTgxRDQ1RTkxRTE1NDVFOTJCNDk1MUJEMDBFMDFGNzMzODM4NDBBRjMwMzA0MEFGMjQxRjI0REYxRDMyMjBFOTJDMUYyQ0RGMUEzMzIwRTlCMDEwMDhFMzQwMTBCODEwMjZGMDMwQ0QyRkYwMzhDRDJCODAyMEU5MkE4MDIwRTlBNjIwODhFMjAwRTBBRjIwMjgyQTI2QUYyMDJBQzBBRjM0MUYzNERGNDYyNDQ2REYyODMwODBCRjIwMzg4MEJGNDcyNDQ3REY0RTJDNEVERjRGMkM0RkRGNTYzNDU2REYyODE1MjhERjIwMUQyMERGNTczNDU3REYwMEUwMUQwNTA0ODAxMEVBODlFMjJCMzAzRkMxMURCRDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEEwNjhCRjI1MDA4MDAwRTgyMEMwMjBBRjI4MDU5Nzc0MDBFMDJBMTAxNkMwMjBFOTA0ODAxMEVBOENFMjk1MDUyOEMxMjhBRDFGQzExNUJEMDA4MDAwRTgwMDgwMDBFOEE4Njc5RjZCMDA4MDAwRTgyOEMwMjhBRDFEMjUyMDA1MjgzMjgwQUQ0MDJBNDBCRDFDODAyMEU5MjAzMzIwQUQyMDczMDBFMEI2NDk1MUJCMjYyRkIwRTgxOTIwMjBFOTM1MjAzNURGM0QyMDNEREYxNTIwMTVERjFEMjAxRERGMjZEMDI2Q0QyOTQ5MkFCODI2NDA4MEJEM0I0ODUwQkQzRTU0NTc5RjAwRTA4MkUxMUVBRjU5OUYwMDgwMDBFODI2MzAyOTMwNDgzQzQ4QUQyQjcyQzJFMTJDQzA0NEMyMDUyNDM0QkYwRDI0MkNCRjJENDY0RUJGMjU0NjU2QkYyMDFENkY4RjMyM0U1RkU5M0U1MDU2OUYwMEUwM0IzMDFFOEY1MTlGMzMxRTVGRTkwNTQ0NTRCMjBENDQ0Q0IyMTlDMEIwRTgzNEMwNDRDNDMzNzMwMEUwM0U2MjU3OUYxRUFGNTk5RjAwRTAwRDIwODQzRTU4RTkyODFENkY4RjA1MjAwMEUwODUxRTU4RTk5QjNCMzNERjIwMjA0MkFGMzA0MjU2OUY4MDNFNTdFOTNGOEY1MTlGMzA4MDVGRTkyODI4MjRBRjgxMUU1N0U5MDU0NzU3QkYwRDQ3NEZCRjg4ODA1OEU5MUIyOTFCREYzMDFENkY4RjNBMzA0RkU5MUMzMDI2REYwOUUzM0IwNTNFNTA1NjlGM0IzRjRGRTkxRThGNTE5RjAwRTBBQzIwMkQ0NDRDQjQyQzFDQzBBRjI1NDQ1NEI0MDBFMEM4MzAzMDQ2MzBBRjFCMUI0OEFGMDBFMDI1MjAzODJDNEZFOTg2ODA1N0U5MzgxRDZGOEYyODc0MDBFMDBENDQ0Q0IwMDU0NDU0QjAyRDIwOUIxMDgyM0U1N0U5MzJGMDFCQ0QxRUJENTk5RjgzMUU1N0U5Mzg0NzM4QUYzNDIwMkEzMDAwRTAwRDIwMzIyMDA1MjA4NzgwNTdFOTFGNTQ1NzlGMTc0MjU2OUYwMEUwM0I2QTNGOEY1MTlGMzcxRTRGRTkzNzMyMkFBRjAwRTAzMjAwMDA4MDAwRTgyN0MwNDRDMDM2MUY0RkU5MUYxRjI2REYzNzFCMzdCRjE3MjYxN0RGM0UxNzRGRTkzRjNGNEZFOTM0MUYzNEFGMkIwNUE3MjAzMzJCMzdERjI3MTdDMEFGMzQ4MDRGRTkwMDgwMDBFODJENDQ0Q0I2MjU0NDU0QjYwMzgwMkFFQTE3QzEyQkJEMkQyMDI1MjAwN0MwNDRDNkIzNjg5NzI1MDA4MDAwRTgzM0MwMzNBRjNDMjc0RkU5MUY2MjU3OUYwMDgwMDBFODNGM0Q1RDlGMDBFMDA3MjAwMDgwMDBFODI4MTk2MEVDQjMwNTAwRTAwMDgwMDBFODIzM0IzM0FEMDA4MDAwRTgxRjI2MUZERjlEMUY0RkU5MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4OUUzRjRGRTkwNzA3MUZBRjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODlDODA0RkU5MDA4MDAwRTgwMDgwMDBFODU3MzkyMEU5MTYyODIwRTkxRDNCMjBFOTFFMkIyMEU5MkIzMjIwRTkxQzIzMjBFOTU3MzYyMEU5MDA4MEEwRTk0MDQwRDhFQ0ZGODBDMEU5OTBFMjAwRTA3QUZGMjBFQTE5QzhDMUNEMUZENzE4QkQzRkQ3MjJCRDlGNDE0OUJEMDA4MDAwRTgyNTQxNDlCRDJENDE1MUJEMEQ4MDA3RUEwMDgwMDBFODM1NDA0OEJEM0Q0MDUwQkQwMDgwMDBFODI1MzAyRDMwMzUzMEI1MzBCRDMwM0QzMDlDQTc1QjlGMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4NzlGRjBBRUEwMDgwMDBFOEM5NDFDOEVDNDJFMTAwRTA3N0ZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEM4NDBDMEVDMDA4MDAwRTg3NEZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEQ5CisvKiBUR1pBRiAqLworOjA1NjgwMDAwMDAwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA5OEEwRTk0MDQwRDhFQ0ZGODBDMEU5MDA4MDAwRTgxRkQ3MThCRDNGRDcyMkJEODEwNDg5MDQwMTA0MDkwNEM5NDFDMEVDMTEwNDAwRTA0MUNDNDFDRDQ5Q0M0OUNERDE0MUMwRUM1MUNDNTFDRDgwMDQxMDA0MDgwNDAwRTAwMENDQzBDREQxNDlDMEVDOEExRjIwRTk4QjNGMjBFOTQxM0M0MUFENDkzQzQ5QUQxMENDMTBDRDA4Q0MwOENEQjk0MTQ5QkIxRkYwNDFDRDUxM0M1MUFEMDA5ODgwRTk4MzgwMDdFQTI0MUYyMEU5MjE0NTgwRTgxQTREODBFODMxNTU4MEU4MDA4MDAwRTgxNTQxNDlCRDFENDE1MUJEMkU0MTJBQjgzNDUzQTBFODE1MzAxRDMwNThFMzAwRTBCNTQwNDhCRDNENDA1MEJEMjQ0M0EwRTgyQzRCQTBFODE1NzIwOUUzMDBFMDFENzIzNTMwQjUzMEJEMzAzRDMwOUM5NzU3OUYwMDgwMDBFODZDNjRDOEVDOThFMUI1MDVCRDA1MkUzMDMyQzBBMEU4MzNDMEEwRTg3NDY0QzhFQzQwM0M0MEFEMzI2QTJBMzAyMDczMzM2QTAwRTAyODczMUM3MjgzRTI2RjgwMTVFQUI4M0QyOERGMzAzNTIwREY0MDMwMDBFMENDRTI2NDcyMjU0MjUyQkYyRDQyNEFCRjMwMkUzMERGMzgyRTM4REYxODFENDVFOTFFMTU0NUU5MkI0OTUxQkQwMEUwMUY3MzM4Mzg0MEFGMzAzMDQwQUYyNDFGMjRERjFEMzIyMEU5MkMxRjJDREYxQTMzMjBFOUIwMTAwOEUzNDAxMEI4MTAyNkYwMzBDRDJGRjAzOENEMkI4MDIwRTkyQTgwMjBFOUE2MjA4OEUyMDBFMEFGMjAyODJBMjZBRjIwMkFDMEFGMzQxRjM0REY0NjI0NDZERjI4MzA4MEJGMjAzODgwQkY0NzI0NDdERjRFMkM0RURGNEYyQzRGREY1NjM0NTZERjI4MTUyOERGMjAxRDIwREY1NzM0NTdERjAwRTAxRDA1MDQ4MDEwRUE4OUUyMkIzMDNGQzExREJEMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4QTA2OEJGMjUwMDgwMDBFODIwQzAyMEFGMjgwNTk3NzQwMEUwMkExMDE2QzAyMEU5MDQ4MDEwRUE4Q0UyOTUwNTI4QzEyOEFEMUZDMTE1QkQwMDgwMDBFODAwODAwMEU4QTg2NzlGNkIwMDgwMDBFODI4QzAyOEFEMUQyNTIwMDUyODMyODBBRDQwMkE0MEJEMUM4MDIwRTkyMDMzMjBBRDIwNzMwMEUwQjY0OTUxQkIyNjJGQjBFODE5MjAyMEU5MzUyMDM1REYzRDIwM0RERjE1MjAxNURGMUQyMDFEREYyNkQwMjZDRDI5NDkyQUI4MjY0MDgwQkQzQjQ4NTBCRDNFNTQ1NzlGMDBFMDgyRTExRUFGNTk5RjAwODAwMEU4MjYzMDI5MzA0ODNDNDhBRDJCNzJDMkUxMkNDMDQ0QzIwNTI0MzRCRjBEMjQyQ0JGMkQ0NjRFQkYyNTQ2NTZCRjIwMUQ2RjhGMzIzRTVGRTkzRTUwNTY5RjAwRTAzQjMwMUU4RjUxOUYzMzFFNUZFOTA1NDQ1NEIyMEQ0NDRDQjIxOUMwQjBFODM0QzA0NEM0MzM3MzAwRTAzRTYyNTc5RjFFQUY1OTlGMDBFMDBEMjA4NDNFNThFOTI4MUQ2RjhGMDUyMDAwRTA4NTFFNThFOTlCM0IzM0RGMjAyMDQyQUYzMDQyNTY5RjgwM0U1N0U5M0Y4RjUxOUYzMDgwNUZFOTI4MjgyNEFGODExRTU3RTkwNTQ3NTdCRjBENDc0RkJGODg4MDU4RTkxQjI5MUJERjMwMUQ2RjhGM0EzMDRGRTkxQzMwMjZERjA5RTMzQjA1M0U1MDU2OUYzQjNGNEZFOTFFOEY1MTlGMDBFMEFDMjAyRDQ0NENCNDJDMUNDMEFGMjU0NDU0QjQwMEUwQzgzMDMwNDYzMEFGMUIxQjQ4QUYwMEUwMjUyMDM4MkM0RkU5ODY4MDU3RTkzODFENkY4RjI4NzQwMEUwMEQ0NDRDQjAwNTQ0NTRCMDJEMjA5QjEwODIzRTU3RTkzMkYwMUJDRDFFQkQ1OTlGODMxRTU3RTkzODQ3MzhBRjM0MjAyQTMwMDBFMDBEMjAzMjIwMDUyMDg3ODA1N0U5MUY1NDU3OUYxNzQyNTY5RjAwRTAzQjZBM0Y4RjUxOUYzNzFFNEZFOTM3MzIyQUFGMDBFMDMyMDAwMDgwMDBFODI3QzA0NEMwMzYxRjRGRTkxRjFGMjZERjM3MUIzN0JGMTcyNjE3REYzRTE3NEZFOTNGM0Y0RkU5MzQxRjM0QUYyQjA1QTcyMDMzMkIzN0RGMjcxN0MwQUYzNDgwNEZFOTAwODAwMEU4MEQyMTFBQjYwNTIxMzFCNjJENDQ0Q0I2MjU0NDU0QjYwMzgwMkFFQTE3QzEyQkJEMEQyMDA1MjAyRkMwMjFDNkIzNjg5NzI1MDA4MDAwRTgzM0MwMzNBRjNDMjc0RkU5MDBFMDI1MjAwN0MwNDRDNjE3NTA1NjlGMDBFMDJEMjAzNzBGNUM5RjAwRTAyRjIwMUY2MjU3OUYwMEUwMDcyMDNGM0Q1RDlGMDA4MDAwRTgwMDgwMDBFODI4MTk2MEVDQjMwNTAwRTAxNzI2MTdERjIzM0IzM0FEMzUxNzRGRTkxRjI2MUZERjlEMUY0RkU5OUUzRjRGRTkzOTM3NEZFOTJGMkYxN0FGMDA4MDAwRTgwNzA3MUZBRjAwODAwMEU4MzE4MDRGRTkwMDgwMDBFODlDODA0RkU5MDA4MDAwRTgwMDgwMDBFODU3MzkyMEU5MTYyODIwRTkxRDNCMjBFOTFFMkIyMEU5MkIzMjIwRTkxQzIzMjBFOTU3MzYyMEU5MDA4MEEwRTk0MDQwRDhFQ0ZGODBDMEU5OTBFMjAwRTA3NEZGMjBFQTE5QzhDMUNEMUZENzE4QkQzRkQ3MjJCRDlGNDE0OUJEMDA4MDAwRTgyNTQxNDlCRDJENDE1MUJEMEQ4MDA3RUEwMDgwMDBFODM1NDA0OEJEM0Q0MDUwQkQwMDgwMDBFODI1MzAyRDMwMzUzMEI1MzBCRDMwM0QzMDlDQTc1QjlGMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4NzNGRjBBRUEwMDgwMDBFOEM5NDFDOEVDNDJFMTAwRTA3MUZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEM4NDBDMEVDMDA4MDAwRTg2RUZGMjBFQTAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODMwCisvKiBUR1pTICovCis6MDVDMDAwMDAwMDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDk4QTBFOTQwNDBEOEVDRkY4MEMwRTkwMDgwMDBFODFGRDcxOEJEM0ZENzIyQkQ4MTA0ODkwNDAxMDQwOTA0Qzk0MUMwRUMxMTA0MDBFMDQxQ0M0MUNENDlDQzQ5Q0REMTQxQzBFQzUxQ0M1MUNEODAwNDEwMDQwODA0MDBFMDAwQ0NDMENERDE0OUMwRUM4QTFGMjBFOThCM0YyMEU5NDEzQzQxQUQ0OTNDNDlBRDEwQ0MxMENEMDhDQzA4Q0RCOTQxNDlCQjFGRjA0MUNENTEzQzUxQUQwMDk4ODBFOThCODAwN0VBMjQxRjIwRTkyMTQ1ODBFODFBNEQ4MEU4MzE1NTgwRTgwMDgwMDBFODE1NDE0OUJEMUQ0MTUxQkQyRTQxMkFCODM0NTNBMEU4MTUzMDFEMzA1OEUzMDBFMEI1NDA0OEJEM0Q0MDUwQkQyNDQzQTBFODJDNEJBMEU4MTU3MjA5RTMwMEUwMUQ3MjM1MzBCNTMwQkQzMDNEMzA5Qzk3NTc5RjAwODAwMEU4NkM2NEM4RUM5OEUxQjUwNUJEMDUyRTMwMzJDMEEwRTgzM0MwQTBFODc0NjRDOEVDNDAzQzQwQUQzMjZBMkEzMDIwNzMzMzZBMDBFMDI4NzMxQzcyODNFMjc3ODAxNUVBQjgzRDI4REYzMDM1MjBERjQwMzAwMEUwQ0NFMjY0NzIyNTQyNTJCRjJENDI0QUJGMzAyRTMwREYzODJFMzhERjE4MUQ0NUU5MUUxNTQ1RTkyQjQ5NTFCRDAwRTAxRjczMzgzODQwQUYzMDMwNDBBRjI0MUYyNERGMUQzMjIwRTkyQzFGMkNERjFBMzMyMEU5QjAxMDA4RTM0MDEwQjgxMDI2RjAzMENEMkZGMDM4Q0QyQjgwMjBFOTJBODAyMEU5QTYyMDg4RTIwMEUwQUYyMDI4MkEyNkFGMjAyQUMwQUYzNDFGMzRERjQ2MjQ0NkRGMjgzMDgwQkYyMDM4ODBCRjQ3MjQ0N0RGNEUyQzRFREY0RjJDNEZERjU2MzQ1NkRGMjgxNTI4REYyMDFEMjBERjU3MzQ1N0RGMDBFMDFEMDUwNDgwMTBFQTg5RTIyQjMwM0ZDMTFEQkQwMDgwMDBFODAwODAwMEU4MDA4MDAwRThBMDY4QkYyNTAwODAwMEU4MjBDMDIwQUYyODA1OTc3NDAwRTAyQTEwMTZDMDIwRTkwNDgwMTBFQThDRTI5NTA1MjhDMTI4QUQxRkMxMTVCRDAwODAwMEU4MDA4MDAwRThBODY3OUY2QjAwODAwMEU4MjhDMDI4QUQxRDI1MjAwNTI4MzI4MEFENDAyQTQwQkQxQzgwMjBFOTIwMzMyMEFEMjA3MzAwRTBCNjQ5NTFCQjI2MkZCMEU4MTkyMDIwRTkzNTIwMzVERjNEMjAzRERGMTUyMDE1REYxRDIwMURERjI2RDAyNkNEMjk0OTJBQjgyNjQwODBCRDNCNDg1MEJEM0U1NDU3OUYwMEUwODJFMTFFQUY1OTlGMDA4MDAwRTgyNjMwMjkzMDQ4M0M0OEFEMkI3MkMyRTEyQ0MwNDRDMjA1MjQzNEJGMEQyNDJDQkYyRDQ2NEVCRjI1NDY1NkJGMjAxRDZGOEYzMjNFNUZFOTNFNTA1NjlGMDBFMDNCMzAxRThGNTE5RjMzMUU1RkU5MDU0NDU0QjIwRDQ0NENCMjE5QzBCMEU4MzRDMDQ0QzQzMzczMDBFMDNFNjI1NzlGMUVBRjU5OUYwMEUwMEQyMDg0M0U1OEU5MjgxRDZGOEYwNTIwMDBFMDg1MUU1OEU5OUIzQjMzREYyMDIwNDJBRjMwNDI1NjlGODAzRTU3RTkzRjhGNTE5RjMwODA1RkU5MjgyODI0QUY4MTFFNTdFOTA1NDc1N0JGMEQ0NzRGQkY4ODgwNThFOTFCMjkxQkRGMzAxRDZGOEYzQTMwNEZFOTFDMzAyNkRGMDlFMzNCMDUzRTUwNTY5RjNCM0Y0RkU5MUU4RjUxOUYwMEUwQUMyMDJENDQ0Q0I0MkMxQ0MwQUYyNTQ0NTRCNDAwRTBDODMwMzA0NjMwQUYxQjFCNDhBRjAwRTAyNTIwMzgyQzRGRTk4NjgwNTdFOTM4MUQ2RjhGMjg3NDAwRTAwRDQ0NENCMDA1NDQ1NEIwMkQyMDlCMTA4MjNFNTdFOTMyRjAxQkNEMUVCRDU5OUY4MzFFNTdFOTM4NDczOEFGMzQyMDJBMzAwMEUwMEQyMDMyMjAwNTIwODc4MDU3RTkxRjU0NTc5RjE3NDI1NjlGMDBFMDNCNkEzRjhGNTE5RjM3MUU0RkU5MzczMjJBQUYwMEUwMzIwMDAwODAwMEU4MjdDMDQ0QzAzNjFGNEZFOTFGMUYyNkRGMzcxQjM3QkYxNzI2MTdERjNFMTc0RkU5M0YzRjRGRTkzNDFGMzRBRjJCMDVBNzIwMzMyQjM3REYyNzE3QzBBRjM0ODA0RkU5MDA4MDAwRTgyRDIxMUFCMDI1MjEzMUIwMEQyMTFBQjIwNTIxMzFCMjAzODAyQUVBMTdDMTJCQkQyRDIwMjUyMDA1MjAwRDIwQjM2ODk3MjUwMDgwMDBFODMzQzAzM0FGMkZDMDIxQzAxNjQyNTY5RjNDMjc0RkU5MUU2MjU3OUYwMDgwMDBFODI1MjEzMUI0MkQyMTFBQjQzRjJGNUQ5RjAwODAwMEU4MzMwNTAwRTAyODE5NjBFQzM3MEY1QzlGMDBFMDJGMjAyMzNCMzNBRDFFMjYxRURGQTcxRTRGRTkxNzI2MTZERjJEMjAwMEUwQTgzRjRGRTkyRjJGMUVBRjI1MjAwMEUwQTQxNjRGRTkwRkMwMjFDMkE2ODA0RkU5MUY2MjU3OUYzRjJGNUQ5RjAwRTA4RjIwQTUzNzRGRTkwRjE3MEZBRjA2QzAyMUM0MDA4MDAwRTgwMDgwMDBFOEEzODA0RkU5MDYyMDAwRTAxRjI2MUZERkExMUY0RkU5QTIzRjRGRTkwMDgwMDBFODAwODAwMEU4MDYwNjFGQUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRThBMDgwNEZFOTAwODAwMEU4MDA4MDAwRTg1NzM5MjBFOTE2MjgyMEU5MUQzQjIwRTkxRTJCMjBFOTJCMzIyMEU5MUMyMzIwRTk1NzM2MjBFOTAwODBBMEU5NDA0MEQ4RUNGRjgwQzBFOTkwRTIwMEUwNkNGRjIwRUExOUM4QzFDRDFGRDcxOEJEM0ZENzIyQkQ5RjQxNDlCRDAwODAwMEU4MjU0MTQ5QkQyRDQxNTFCRDBEODAwN0VBMDA4MDAwRTgzNTQwNDhCRDNENDA1MEJEMDA4MDAwRTgyNTMwMkQzMDM1MzBCNTMwQkQzMDNEMzA5Q0E3NUI5RjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODZCRkYwQUVBMDA4MDAwRThDOTQxQzhFQzQyRTEwMEUwNjlGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThDODQwQzBFQzAwODAwMEU4NjZGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg1QworLyogVEdaU0YgKi8KKzowNUUwMDAwMDAwMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwOThBMEU5NDA0MEQ4RUNGRjgwQzBFOTAwODAwMEU4MUZENzE4QkQzRkQ3MjJCRDgxMDQ4OTA0MDEwNDA5MDRDOTQxQzBFQzExMDQwMEUwNDFDQzQxQ0Q0OUNDNDlDREQxNDFDMEVDNTFDQzUxQ0Q4MDA0MTAwNDA4MDQwMEUwMDBDQ0MwQ0REMTQ5QzBFQzhBMUYyMEU5OEIzRjIwRTk0MTNDNDFBRDQ5M0M0OUFEMTBDQzEwQ0QwOENDMDhDREI5NDE0OUJCMUZGMDQxQ0Q1MTNDNTFBRDAwOTg4MEU5OEY4MDA3RUEyNDFGMjBFOTIxNDU4MEU4MUE0RDgwRTgzMTU1ODBFODAwODAwMEU4MTU0MTQ5QkQxRDQxNTFCRDJFNDEyQUI4MzQ1M0EwRTgxNTMwMUQzMDU4RTMwMEUwQjU0MDQ4QkQzRDQwNTBCRDI0NDNBMEU4MkM0QkEwRTgxNTcyMDlFMzAwRTAxRDcyMzUzMEI1MzBCRDMwM0QzMDlDOTc1NzlGMDA4MDAwRTg2QzY0QzhFQzk4RTFCNTA1QkQwNTJFMzAzMkMwQTBFODMzQzBBMEU4NzQ2NEM4RUM0MDNDNDBBRDMyNkEyQTMwMjA3MzMzNkEwMEUwMjg3MzFDNzI4M0UyN0I4MDE1RUFCODNEMjhERjMwMzUyMERGNDAzMDAwRTBDQ0UyNjQ3MjI1NDI1MkJGMkQ0MjRBQkYzMDJFMzBERjM4MkUzOERGMTgxRDQ1RTkxRTE1NDVFOTJCNDk1MUJEMDBFMDFGNzMzODM4NDBBRjMwMzA0MEFGMjQxRjI0REYxRDMyMjBFOTJDMUYyQ0RGMUEzMzIwRTlCMDEwMDhFMzQwMTBCODEwMjZGMDMwQ0QyRkYwMzhDRDJCODAyMEU5MkE4MDIwRTlBNjIwODhFMjAwRTBBRjIwMjgyQTI2QUYyMDJBQzBBRjM0MUYzNERGNDYyNDQ2REYyODMwODBCRjIwMzg4MEJGNDcyNDQ3REY0RTJDNEVERjRGMkM0RkRGNTYzNDU2REYyODE1MjhERjIwMUQyMERGNTczNDU3REYwMEUwMUQwNTA0ODAxMEVBODlFMjJCMzAzRkMxMURCRDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEEwNjhCRjI1MDA4MDAwRTgyMEMwMjBBRjI4MDU5Nzc0MDBFMDJBMTAxNkMwMjBFOTA0ODAxMEVBOENFMjk1MDUyOEMxMjhBRDFGQzExNUJEMDA4MDAwRTgwMDgwMDBFOEE4Njc5RjZCMDA4MDAwRTgyOEMwMjhBRDFEMjUyMDA1MjgzMjgwQUQ0MDJBNDBCRDFDODAyMEU5MjAzMzIwQUQyMDczMDBFMEI2NDk1MUJCMjYyRkIwRTgxOTIwMjBFOTM1MjAzNURGM0QyMDNEREYxNTIwMTVERjFEMjAxRERGMjZEMDI2Q0QyOTQ5MkFCODI2NDA4MEJEM0I0ODUwQkQzRTU0NTc5RjAwRTA4MkUxMUVBRjU5OUYwMDgwMDBFODI2MzAyOTMwNDgzQzQ4QUQyQjcyQzJFMTJDQzA0NEMyMDUyNDM0QkYwRDI0MkNCRjJENDY0RUJGMjU0NjU2QkYyMDFENkY4RjMyM0U1RkU5M0U1MDU2OUYwMEUwM0IzMDFFOEY1MTlGMzMxRTVGRTkwNTQ0NTRCMjBENDQ0Q0IyMTlDMEIwRTgzNEMwNDRDNDMzNzMwMEUwM0U2MjU3OUYxRUFGNTk5RjAwRTAwRDIwODQzRTU4RTkyODFENkY4RjA1MjAwMEUwODUxRTU4RTk5QjNCMzNERjIwMjA0MkFGMzA0MjU2OUY4MDNFNTdFOTNGOEY1MTlGMzA4MDVGRTkyODI4MjRBRjgxMUU1N0U5MDU0NzU3QkYwRDQ3NEZCRjg4ODA1OEU5MUIyOTFCREYzMDFENkY4RjNBMzA0RkU5MUMzMDI2REYwOUUzM0IwNTNFNTA1NjlGM0IzRjRGRTkxRThGNTE5RjAwRTBBQzIwMkQ0NDRDQjQyQzFDQzBBRjI1NDQ1NEI0MDBFMEM4MzAzMDQ2MzBBRjFCMUI0OEFGMDBFMDI1MjAzODJDNEZFOTg2ODA1N0U5MzgxRDZGOEYyODc0MDBFMDBENDQ0Q0IwMDU0NDU0QjAyRDIwOUIxMDgyM0U1N0U5MzJGMDFCQ0QxRUJENTk5RjgzMUU1N0U5Mzg0NzM4QUYzNDIwMkEzMDAwRTAwRDIwMzIyMDA1MjA4NzgwNTdFOTFGNTQ1NzlGMTc0MjU2OUYwMEUwM0I2QTNGOEY1MTlGMzcxRTRGRTkzNzMyMkFBRjAwRTAzMjAwMDA4MDAwRTgyN0MwNDRDMDM2MUY0RkU5MUYxRjI2REYzNzFCMzdCRjE3MjYxN0RGM0UxNzRGRTkzRjNGNEZFOTM0MUYzNEFGMkIwNUE3MjAzMzJCMzdERjI3MTdDMEFGMzQ4MDRGRTkwMDgwMDBFODJEMjExQUIwMjUyMTMxQjAwRDIxMUFCMjA1MjEzMUIyMDM4MDJBRUExN0MxMkJCRDJEMjAyNTIwMDUyMDBEMjBCMzY4OTcyNTAwODAwMEU4MzNDMDMzQUYyRkMwMjFDMDE2NDI1NjlGM0MyNzRGRTkxRTYyNTc5RjAwODAwMEU4MjUyMTMxQjQyRDIxMUFCNDNGMkY1RDlGMDA4MDAwRTgzMzA1MDBFMDI4MTk2MEVDMEQyMTFBQjYwNTIxMzFCNjM3MEY1QzlGMDBFMDJGMjAyMzNCMzNBRDFFMjYxRURGQTcxRTRGRTkxNzI2MTZERjJEMjAwMEUwQTgzRjRGRTkyRjJGMUVBRjI1MjAwMEUwQTQxNjRGRTkwRkMwMjFDMkE2ODA0RkU5MUY2MjU3OUYwRDIwMDUyMDJGQzAyMUM2M0YyRjVEOUYwMEUwMEYyMDE3NTA1NjlGQTUzNzRGRTkwNkMwMjFDNDBGMTcwRkFGMzcwRjVDOUYwMDgwMDBFODJGMjAwMEUwQTM4MDRGRTkwNjIwMDBFMDFGMjYxRkRGMTcyNjE3REYzNTE3NEZFOUExMUY0RkU5QTIzRjRGRTkwNjA2MUZBRjM5Mzc0RkU5MkYyRjE3QUYwMDgwMDBFOEEwODA0RkU5MDA4MDAwRTgzMTgwNEZFOTAwODAwMEU4MDA4MDAwRTg1NzM5MjBFOTE2MjgyMEU5MUQzQjIwRTkxRTJCMjBFOTJCMzIyMEU5MUMyMzIwRTk1NzM2MjBFOTAwODBBMEU5NDA0MEQ4RUNGRjgwQzBFOTkwRTIwMEUwNjhGRjIwRUExOUM4QzFDRDFGRDcxOEJEM0ZENzIyQkQ5RjQxNDlCRDAwODAwMEU4MjU0MTQ5QkQyRDQxNTFCRDBEODAwN0VBMDA4MDAwRTgzNTQwNDhCRDNENDA1MEJEMDA4MDAwRTgyNTMwMkQzMDM1MzBCNTMwQkQzMDNEMzA5Q0E3NUI5RjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODY3RkYwQUVBMDA4MDAwRThDOTQxQzhFQzQyRTEwMEUwNjVGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThDODQwQzBFQzAwODAwMEU4NjJGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThGOQorLyogVEdaU0EgKi8KKzowNUUwMDAwMDAwMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwOThBMEU5NDA0MEQ4RUNGRjgwQzBFOTAwODAwMEU4MUZENzE4QkQzRkQ3MjJCRDgxMDQ4OTA0MDEwNDA5MDRDOTQxQzBFQzExMDQwMEUwNDFDQzQxQ0Q0OUNDNDlDREQxNDFDMEVDNTFDQzUxQ0Q4MDA0MTAwNDA4MDQwMEUwMDBDQ0MwQ0REMTQ5QzBFQzhBMUYyMEU5OEIzRjIwRTk0MTNDNDFBRDQ5M0M0OUFEMTBDQzEwQ0QwOENDMDhDREI5NDE0OUJCMUZGMDQxQ0Q1MTNDNTFBRDAwOTg4MEU5OEY4MDA3RUEyNDFGMjBFOTIxNDU4MEU4MUE0RDgwRTgzMTU1ODBFODAwODAwMEU4MTU0MTQ5QkQxRDQxNTFCRDJFNDEyQUI4MzQ1M0EwRTgxNTMwMUQzMDU4RTMwMEUwQjU0MDQ4QkQzRDQwNTBCRDI0NDNBMEU4MkM0QkEwRTgxNTcyMDlFMzAwRTAxRDcyMzUzMEI1MzBCRDMwM0QzMDlDOTc1NzlGMDA4MDAwRTg2QzY0QzhFQzk4RTFCNTA1QkQwNTJFMzAzMkMwQTBFODMzQzBBMEU4NzQ2NEM4RUM0MDNDNDBBRDMyNkEyQTMwMjA3MzMzNkEwMEUwMjg3MzFDNzI4M0UyN0I4MDE1RUFCODNEMjhERjMwMzUyMERGNDAzMDAwRTBDQ0UyNjQ3MjI1NDI1MkJGMkQ0MjRBQkYzMDJFMzBERjM4MkUzOERGMTgxRDQ1RTkxRTE1NDVFOTJCNDk1MUJEMDBFMDFGNzMzODM4NDBBRjMwMzA0MEFGMjQxRjI0REYxRDMyMjBFOTJDMUYyQ0RGMUEzMzIwRTlCMDEwMDhFMzQwMTBCODEwMjZGMDMwQ0QyRkYwMzhDRDJCODAyMEU5MkE4MDIwRTlBNjIwODhFMjAwRTBBRjIwMjgyQTI2QUYyMDJBQzBBRjM0MUYzNERGNDYyNDQ2REYyODMwODBCRjIwMzg4MEJGNDcyNDQ3REY0RTJDNEVERjRGMkM0RkRGNTYzNDU2REYyODE1MjhERjIwMUQyMERGNTczNDU3REYwMEUwMUQwNTA0ODAxMEVBODlFMjJCMzAzRkMxMURCRDAwODAwMEU4MDA4MDAwRTgwMDgwMDBFOEEwNjhCRjI1MDA4MDAwRTgyMEMwMjBBRjI4MDU5Nzc0MDBFMDJBMTAxNkMwMjBFOTA0ODAxMEVBOENFMjk1MDUyOEMxMjhBRDFGQzExNUJEMDA4MDAwRTgwMDgwMDBFOEE4Njc5RjZCMDA4MDAwRTgyOEMwMjhBRDFEMjUyMDA1MjgzMjgwQUQ0MDJBNDBCRDFDODAyMEU5MjAzMzIwQUQyMDczMDBFMEI2NDk1MUJCMjYyRkIwRTgxOTIwMjBFOTM1MjAzNURGM0QyMDNEREYxNTIwMTVERjFEMjAxRERGMjZEMDI2Q0QyOTQ5MkFCODI2NDA4MEJEM0I0ODUwQkQzRTU0NTc5RjAwRTA4MkUxMUVBRjU5OUYwMDgwMDBFODI2MzAyOTMwNDgzQzQ4QUQyQjcyQzJFMTJDQzA0NEMyMDUyNDM0QkYwRDI0MkNCRjJENDY0RUJGMjU0NjU2QkYyMDFENkY4RjMyM0U1RkU5M0U1MDU2OUYwMEUwM0IzMDFFOEY1MTlGMzMxRTVGRTkwNTQ0NTRCMjBENDQ0Q0IyMTlDMEIwRTgzNEMwNDRDNDMzNzMwMEUwM0U2MjU3OUYxRUFGNTk5RjAwRTAwRDIwODQzRTU4RTkyODFENkY4RjA1MjAwMEUwODUxRTU4RTk5QjNCMzNERjIwMjA0MkFGMzA0MjU2OUY4MDNFNTdFOTNGOEY1MTlGMzA4MDVGRTkyODI4MjRBRjgxMUU1N0U5MDU0NzU3QkYwRDQ3NEZCRjg4ODA1OEU5MUIyOTFCREYzMDFENkY4RjNBMzA0RkU5MUMzMDI2REYwOUUzM0IwNTNFNTA1NjlGM0IzRjRGRTkxRThGNTE5RjAwRTBBQzIwMkQ0NDRDQjQyQzFDQzBBRjI1NDQ1NEI0MDBFMEM4MzAzMDQ2MzBBRjFCMUI0OEFGMDBFMDI1MjAzODJDNEZFOTg2ODA1N0U5MzgxRDZGOEYyODc0MDBFMDBENDQ0Q0IwMDU0NDU0QjAyRDIwOUIxMDgyM0U1N0U5MzJGMDFCQ0QxRUJENTk5RjgzMUU1N0U5Mzg0NzM4QUYzNDIwMkEzMDAwRTAwRDIwMzIyMDA1MjA4NzgwNTdFOTFGNTQ1NzlGMTc0MjU2OUYwMEUwM0I2QTNGOEY1MTlGMzcxRTRGRTkzNzMyMkFBRjAwRTAzMjAwMDA4MDAwRTgyN0MwNDRDMDM2MUY0RkU5MUYxRjI2REYzNzFCMzdCRjE3MjYxN0RGM0UxNzRGRTkzRjNGNEZFOTM0MUYzNEFGMkIwNUE3MjAzMzJCMzdERjI3MTdDMEFGMzQ4MDRGRTkwMDgwMDBFODJEMjExQUIwMjUyMTMxQjAwRDIxMUFCMjA1MjEzMUIyMDM4MDJBRUExN0MxMkJCRDJEMjAyNTIwMDUyMDBEMjBCMzY4OTcyNTAwODAwMEU4MzNDMDMzQUYyRkMwMjFDMDE2NDI1NjlGM0MyNzRGRTkxRTYyNTc5RjAwODAwMEU4MjUyMTMxQjQyRDIxMUFCNDNGMkY1RDlGMDA4MDAwRTgzMzA1MDBFMDI4MTk2MEVDMEQ0NDRDQjYwNTQ0NTRCNjM3MEY1QzlGMDBFMDJGMjAyMzNCMzNBRDFFMjYxRURGQTcxRTRGRTkxNzI2MTZERjJEMjAwMEUwQTgzRjRGRTkyRjJGMUVBRjI1MjAwMEUwQTQxNjRGRTkwRkMwMjFDMkE2ODA0RkU5MUY2MjU3OUYwRDIwMDUyMDAwODAwMEU4M0YyRjVEOUYwMEUwMEYyMDE3NTA1NjlGQTUzNzRGRTkwNkMwMjFDNDBGMTcwRkFGMzcwRjVDOUYwMDgwMDBFODJGQzA0NEM2QTM4MDRGRTkwNjIwMDBFMDFGMjYxRkRGMTcyNjE3REY5RDE3NEZFOUExMUY0RkU5QTIzRjRGRTkwNjA2MUZBRjAwRTBBRjIwOUUzNzRGRTkyRjE3MkZBRkEwODA0RkU5MDA4MDAwRTgwMDgwMDBFODlDODA0RkU5MDA4MDAwRTg1NzM5MjBFOTE2MjgyMEU5MUQzQjIwRTkxRTJCMjBFOTJCMzIyMEU5MUMyMzIwRTk1NzM2MjBFOTAwODBBMEU5NDA0MEQ4RUNGRjgwQzBFOTkwRTIwMEUwNjhGRjIwRUExOUM4QzFDRDFGRDcxOEJEM0ZENzIyQkQ5RjQxNDlCRDAwODAwMEU4MjU0MTQ5QkQyRDQxNTFCRDBEODAwN0VBMDA4MDAwRTgzNTQwNDhCRDNENDA1MEJEMDA4MDAwRTgyNTMwMkQzMDM1MzBCNTMwQkQzMDNEMzA5Q0E3NUI5RjAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODY3RkYwQUVBMDA4MDAwRThDOTQxQzhFQzQyRTEwMEUwNjVGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRThDODQwQzBFQzAwODAwMEU4NjJGRjIwRUEwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg4MworLyogVEdaQUYgKi8KKzowNUI4MDAwMDAwMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA5OEEwRTk0MDQwRDhFQ0ZGODBDMEU5MDA4MDAwRTgxRkQ3MThCRDNGRDcyMkJEODEwNDg5MDQwMTA0MDkwNEM5NDFDMEVDMTEwNDAwRTA0MUNDNDFDRDQ5Q0M0OUNERDE0MUMwRUM1MUNDNTFDRDgwMDQxMDA0MDgwNDAwRTAwMENDQzBDREQxNDlDMEVDOEExRjIwRTk4QjNGMjBFOTQxM0M0MUFENDkzQzQ5QUQxMENDMTBDRDA4Q0MwOENEQjk0MTQ5QkIxRkYwNDFDRDUxM0M1MUFEMDA5ODgwRTk5NDgwMDdFQTI0MUYyMEU5MjE0NTgwRTgxQTREODBFODMxNTU4MEU4MDA4MDAwRTgxNTQxNDlCRDFENDE1MUJEMkU0MTJBQjgzNDUzQTBFODE1MzAxRDMwNThFMzAwRTBCNTQwNDhCRDNENDA1MEJEMjQ0M0EwRTgyQzRCQTBFODE1NzIwOUUzMDBFMDFENzIzNTMwQjUzMEJEMzAzRDMwOUM5NzU3OUYwMDgwMDBFODZDNjRDOEVDOThFMUI1MDVCRDA1MkUzMDMyQzBBMEU4MzNDMEEwRTg3NDY0QzhFQzQwM0M0MEFEMzI2QTJBMzAyMDczMzM2QTAwRTAyODczMUM3MjgzRTI4MDgwMTVFQUI4M0QyOERGMzAzNTIwREY0MDMwMDBFMENDRTI2NDcyMjU0MjUyQkYyRDQyNEFCRjMwMkUzMERGMzgyRTM4REYxODFENDVFOTFFMTU0NUU5MkI0OTUxQkQwMEUwMUY3MzM4Mzg0MEFGMzAzMDQwQUYyNDFGMjRERjFEMzIyMEU5MkMxRjJDREYxQTMzMjBFOUIwMTAwOEUzNDAxMEI4MTAyNkYwMzBDRDJGRjAzOENEMkI4MDIwRTkyQTgwMjBFOUE2MjA4OEUyMDBFMEFGMjAyODJBMjZBRjIwMkFDMEFGMzQxRjM0REY0NjI0NDZERjI4MzA4MEJGMjAzODgwQkY0NzI0NDdERjRFMkM0RURGNEYyQzRGREY1NjM0NTZERjI4MTUyOERGMjAxRDIwREY1NzM0NTdERjAwRTAxRDA1MDQ4MDEwRUE4OUUyMkIzMDNGQzExREJEMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4QTA2OEJGMjUwMDgwMDBFODIwQzAyMEFGMjgwNTk3NzQwMEUwMkExMDE2QzAyMEU5MDQ4MDEwRUE4Q0UyOTUwNTI4QzEyOEFEMUZDMTE1QkQwMDgwMDBFODAwODAwMEU4QTg2NzlGNkIwMDgwMDBFODI4QzAyOEFEMUQyNTIwMDUyODMyODBBRDQwMkE0MEJEMUM4MDIwRTkyMDMzMjBBRDIwNzMwMEUwQjY0OTUxQkIyNjJGQjBFODE5MjAyMEU5MzUyMDM1REYzRDIwM0RERjE1MjAxNURGMUQyMDFEREYyNkQwMjZDRDI5NDkyQUI4MjY0MDgwQkQzQjQ4NTBCRDNFNTQ1NzlGMDBFMDgyRTExRUFGNTk5RjAwODAwMEU4MjYzMDI5MzA0ODNDNDhBRDJCNzJDMkUxMkNDMDQ0QzIwNTI0MzRCRjBEMjQyQ0JGMkQ0NjRFQkYyNTQ2NTZCRjIwMUQ2RjhGMzIzRTVGRTkzRTUwNTY5RjAwRTAzQjMwMUU4RjUxOUYzMzFFNUZFOTA1NDQ1NEIyMEQ0NDRDQjIxOUMwQjBFODM0QzA0NEM0MzM3MzAwRTAzRTYyNTc5RjFFQUY1OTlGMDBFMDBEMjA4NDNFNThFOTI4MUQ2RjhGMDUyMDAwRTA4NTFFNThFOTlCM0IzM0RGMjAyMDQyQUYzMDQyNTY5RjgwM0U1N0U5M0Y4RjUxOUYzMDgwNUZFOTI4MjgyNEFGODExRTU3RTkwNTQ3NTdCRjBENDc0RkJGODg4MDU4RTkxQjI5MUJERjMwMUQ2RjhGM0EzMDRGRTkxQzMwMjZERjA5RTMzQjA1M0U1MDU2OUYzQjNGNEZFOTFFOEY1MTlGMDBFMEFDMjAyRDQ0NENCNDJDMUNDMEFGMjU0NDU0QjQwMEUwQzgzMDMwNDYzMEFGMUIxQjQ4QUYwMEUwMjUyMDM4MkM0RkU5ODY4MDU3RTkzODFENkY4RjI4NzQwMEUwMEQ0NDRDQjAwNTQ0NTRCMDJEMjA5QjEwODIzRTU3RTkzMkYwMUJDRDFFQkQ1OTlGODMxRTU3RTkzODQ3MzhBRjM0MjAyQTMwMDBFMDBEMjAzMjIwMDUyMDg3ODA1N0U5MUY1NDU3OUYxNzQyNTY5RjAwRTAzQjZBM0Y4RjUxOUYzNzFFNEZFOTM3MzIyQUFGMDBFMDMyMDAwMDgwMDBFODI3QzA0NEMwMzYxRjRGRTkxRjFGMjZERjM3MUIzN0JGMTcyNjE3REYzRTE3NEZFOTNGM0Y0RkU5MzQxRjM0QUYyQjA1QTcyMDMzMkIzN0RGMjcxN0MwQUYzNDgwNEZFOTAwODAwMEU4MkQyMTFBQjAyNTIxMzFCMDBEMjExQUIyMDUyMTMxQjIwMzgwMkFFQTE3QzEyQkJEMkQyMDI1MjAwNTIwMEQyMEIzNjg5NzI1MDA4MDAwRTgzM0MwMzNBRjJGQzAyMUMwMTY0MjU2OUYzQzI3NEZFOTFFNjI1NzlGMDA4MDAwRTgyNTIxMzFCNDJEMjExQUI0M0YyRjVEOUYwMDgwMDBFODMzMDUwMEUwMjgxOTYwRUMwRDIxMUFCNjA1MjEzMUI2MzcwRjVDOUYwMEUwMkYyMDIzM0IzM0FEMUUyNjFFREZBNzFFNEZFOTE3MjYxNkRGMkQyMDAwRTBBODNGNEZFOTJGMkYxRUFGMjUyMDAwRTBBNDE2NEZFOTBGQzAyMUMyQTY4MDRGRTkxRjYyNTc5RjBEMjAwNTIwMkZDMDIxQzYyRDQ0NENCNjI1NDQ1NEI2M0YyRjVEOUYwMEUwMEYyMDJEMjAyNTIwMDdDMDQ0QzYxNzUwNTY5RkE1Mzc0RkU5MDZDMDIxQzQwRjE3MEZBRjM3MEY1QzlGMDA4MDAwRTgxRTYyNTc5RjAwODAwMEU4M0UzRDVEOUYwMEUwMDcyMDJGMjAwMEUwQTMwRjRGRTkwNjIwMDBFMDFGMjYxRkRGMTcyNjE3REZBMTFGNEZFOTFFMjYxRURGOUQxRTRGRTkzNTE3NEZFOUEyM0Y0RkU5MDYwNjFGQUYzOTM3NEZFOTJGMkYxN0FGMDcwNzFFQUZBMDgwNEZFOTlFM0U0RkU5MzE4MDRGRTk5QzgwNEZFOTAwODAwMEU4NTczOTIwRTkxNjI4MjBFOTFEM0IyMEU5MUUyQjIwRTkyQjMyMjBFOTFDMjMyMEU5NTczNjIwRTkwMDgwQTBFOTQwNDBEOEVDRkY4MEMwRTk5MEUyMDBFMDYzRkYyMEVBMTlDOEMxQ0QxRkQ3MThCRDNGRDcyMkJEOUY0MTQ5QkQwMDgwMDBFODI1NDE0OUJEMkQ0MTUxQkQwRDgwMDdFQTAwODAwMEU4MzU0MDQ4QkQzRDQwNTBCRDAwODAwMEU4MjUzMDJEMzAzNTMwQjUzMEJEMzAzRDMwOUNBNzVCOUYwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTg2MkZGMEFFQTAwODAwMEU4Qzk0MUM4RUM0MkUxMDBFMDYwRkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4Qzg0MEMwRUMwMDgwMDBFODVERkYyMEVBMDA4MDAwRTgwMDgwMDBFODAwODAwMEU4RDgKKzowMDAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL21hdHJveC9nNDAwX3dhcnAuSDE2IGIvZmlybXdhcmUvbWF0cm94L2c0MDBfd2FycC5IMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzMmQxMAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL21hdHJveC9nNDAwX3dhcnAuSDE2CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBXQVJQIHBpcGVzIGFyZSBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9ucyB0aGV5IHBlcmZvcm0sIHdoZXJlCisgKgorICogICAtIFQgc3RhbmRzIGZvciBjb21wdXRhdGlvbiBvZiB0ZXh0dXJlIHN0YWdlIDAKKyAqICAgLSBUMiBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIGJvdGggdGV4dHVyZSBzdGFnZSAwIGFuZCB0ZXh0dXJlIHN0YWdlIDEKKyAqICAgLSBHIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2YgdHJpYW5nbGUgaW50ZW5zaXR5IChHb3VyYXVkIGludGVycG9sYXRpb24pCisgKiAgIC0gWiBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIFogYnVmZmVyIGludGVycG9sYXRpb24KKyAqICAgLSBTIHN0YW5kcyBmb3IgY29tcHV0YXRpb24gb2Ygc3BlY3VsYXIgaGlnaGxpZ2h0CisgKiAgIC0gQSBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHRoZSBhbHBoYSBjaGFubmVsCisgKiAgIC0gRiBzdGFuZHMgZm9yIGNvbXB1dGF0aW9uIG9mIHZlcnRleCBmb2cgaW50ZXJwb2xhdGlvbgorICovCisvKiBUR1ogKi8KKzowMzM4MDAwMDAwMDA4ODk4RTkwMDgwMDBFODAwODBBMEU5MDAwMEQ4RUNGRjgwQzBFOTAwODAwMEU4MjI0MDQ4QkYyQTQwNTBCRjMyNDE0OUJGM0E0MTUxQkZDMzZCQ0I2QjAwODg5OEU5NzM3QkM4RUM5NkUyNDEwNDdCNDNBMEU4NzM0QkEwRThBREVFMjk5RjAwRTA0OTA0OTBFMjUxMDQzMTQ2QjFFODQ5NDFDMEVDMzk1N0IxRTgwMDA0NDZFMjczNTNBMEU4NTE0MUMwRUMzMTAwMzkwMDU4ODAxNUVBMDgwNDEwMDQ1MTQ5QzBFQzJGNDE2MEVBMzEyMDM5MjAxRjQyQTBFODJBNDI0QUJGMjc0QUEwRTgxQTQyNTJCRjFFNDk2MEVBNzM3QkM4RUMyNjUxNjBFQTMyNDA0OEJEMjI0MDUwQkQxMjQxNDlCRDNBNDE1MUJEQkYyRjI2QkQwMEUwN0I3MjMyMjAyMjIwMTIyMDNBMjA0NjMxNDZCRjRFMzE0RUJGQjNFMjJEOUYwMDgwMDBFODU2MzE1NkJGNDczOTQ3QkY0RjM5NEZCRjU3Mzk1N0JGNEE4MDA3RUEyNDQxMjBFOTQyNzNGOEVDMDBFMDJENzMzMzcyMENFM0E1MkYxRUJENDM0MzJEREY0QjRCMkRERkFFMUUyNkJENThFMzMzNjY1MzUzMkRERjAwODAwMEU4QjgzODMzQkYwMEUwNTlFMzFFMTI0MUU5MUEyMjQxRTkyQjQwM0RFOTNGNEJBMEU4MkQ3MzMwNzYwNTgwM0RFQTM3NDNBMEU4M0Q1M0EwRTg0ODcwRjhFQzJCNDgzQ0U5MUYyN0JDRTgwMDgwMDBFODAwODAwMEU4MDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE4M0E0MUU5MUQzMjQxRTkyQTQwMjBFOTU2M0Q1NkRGNDYzNzQ2REY0RTNGNEVERjE2MzAyMEU5NEYzRjRGREYzMjMyMkRERjIyMjIyRERGMTIxMjJEREYzQTNBMkRERjQ3Mzc0N0RGNTczRDU3REYzRENGNzRDMDM3Q0Y3NEM0MzE1MzJGOUYzNDgwMjBFOTM5RTUyQzlGM0MzRDIwRTkwQTQ0NENCMDAyNDQ1NEIwMkE0NDRDQjIxQTQ0NTRCMjFEODAzQUVBMEEyMDAyMjAzRENGNzRDMjJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzMTUzMkY5RjAwODAwMEU4MkE0NDRDQjQxQTQ0NTRCNDM5RTUyQzlGMzgzRDIwRTk4ODczNUVFOTJBMjAxQTIwMkE0NjRFQkYxQTQ2NTZCRjMxNTMyRjlGM0UzMDRGRTkzOUU1MkM5RjNGMzg0RkU5MEE0NzRGQkYwMjQ3NTdCRjMxNTMyRjlGM0EzMTRGRTkzOUU1MkM5RjNCMzk0RkU5MkE0MzRCQkYxQTQzNTNCRjMwNTAyRTlGMzYzMTRGRTkzODIxMkM5RjM3Mzk0RkU5MzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkzNzQ4NTBCRDhBMzYyMEU5ODY3NjU3RTk4QjNFMjBFOTgyMzA1N0U5ODc3NzU3RTk4MzM4NTdFOTM1NDk1MUJEODQzMTVFRTkzMDFGNUZFOTg1Mzk1RUU5NTcyNTIwRTkyQjQ4MjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMjY3NzI0NDkyMEU5QUZGRjIwRUExNjI2MjBFOTU3MkVCRkVBMUM0NkEwRTgyMzRFQTBFODJCNTZBMEU4MUQ0N0EwRTgyNDRGQTBFODJDNTdBMEU4MUMwMDIzMDAyQjAwMDBFMDFEMDAyNDAwMkMwMDAwRTAxQzY1MjM2NTJCNjUwMEUwMUQ2NTI0NjUyQzY1MDBFMDFDMjM2MEVDMzZENzM2QUQyQjgwNjBFQzFEMjQ2MEVDM0VENzNFQUQyQzgwNjBFQzFDMkJERUU4MjM4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzFDQkQzQkQ3MjNCRDQ2ODA0NkNGNEY4MDRGQ0Y1NjMzNTZDRjQ3M0I0N0NGRDZGRjIwRUEwMDgwMDBFODRFMzM0RUNGNTczQjU3Q0Y5REZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQzU5CisvKiBUR1pGICovCis6MDM2MDAwMDAwMDAwODg5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODIyNDA0OEJGMkE0MDUwQkYzMjQxNDlCRjNBNDE1MUJGQzM2QkNCNkIwMDg4OThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNEJBMEU4QURFRTI5OUYwMEUwNDkwNDkwRTI1MTA0MzE0NkIxRTg0OTQxQzBFQzM5NTdCMUU4MDAwNDQ2RTI3MzUzQTBFODUxNDFDMEVDMzEwMDM5MDA1RDgwMTVFQTA4MDQxMDA0NTE0OUMwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNEFCRjI3NEFBMEU4MUE0MjUyQkYxRTQ5NjBFQTczN0JDOEVDMjY1MTYwRUEzMjQwNDhCRDIyNDA1MEJEMTI0MTQ5QkQzQTQxNTFCREJGMkYyNkJEMDBFMDdCNzIzMjIwMjIyMDEyMjAzQTIwNDYzMTQ2QkY0RTMxNEVCRkIzRTIyRDlGMDA4MDAwRTg1NjMxNTZCRjQ3Mzk0N0JGNEYzOTRGQkY1NzM5NTdCRjRGODAwN0VBMjQ0MTIwRTk0MjczRjhFQzAwRTAyRDczMzM3MjBDRTNBNTJGMUVCRDQzNDMyRERGNEI0QjJEREZBRTFFMjZCRDU4RTMzMzY2NTM1MzJEREYwMDgwMDBFOEI4MzgzM0JGMDBFMDU5RTMxRTEyNDFFOTFBMjI0MUU5MkI0MDNERTkzRjRCQTBFODJENzMzMDc2MDU4MDNERUEzNzQzQTBFODNENTNBMEU4NDg3MEY4RUMyQjQ4M0NFOTFGMjdCQ0U4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxODNBNDFFOTFEMzI0MUU5MkE0MDIwRTk1NjNENTZERjQ2Mzc0NkRGNEUzRjRFREYxNjMwMjBFOTRGM0Y0RkRGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREY0NzM3NDdERjU3M0Q1N0RGM0RDRjc0QzAzN0NGNzRDNDM5RTUyQzlGMzQ4MDIwRTkzMTUzMkY5RjAwODAwMEU4ODg3MzVFRTkwMDgwMDBFODI3Q0Y3NUM2M0MzRDIwRTkwQTQ0NENCMDAyNDQ1NEIwMkE0NDRDQjIxQTQ0NTRCMjIwODAzQUVBMEEyMDAyMjAzRENGNzRDMjJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzMTUzMkY5RjMxMjcyMEU5MEE0NDRDQjQwMjQ0NTRCNDJBNDU0REI2MUE0NTU1QjYzOUU1MkM5RjM4M0QyMEU5MEEyMDAyMjAyQTIwMUEyMDBBNDc0RkJGMDI0NzU3QkYzMDUwMkU5RjNFMzA0RkU5MzgyMTJDOUYzRjM4NEZFOTJBNDY0RUJGMUE0NjU2QkYzMTUzMkY5RjNBMzE0RkU5MzlFNTJDOUYzQjM5NEZFOTMxNTMyRjlGMzYzMDRGRTkzOUU1MkM5RjM3Mzg0RkU5MkE0MzRCQkYxQTQzNTNCRjMwNTAyRTlGMzUzMTRGRTkzODIxMkM5RjM5Mzk0RkU5MzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkzNzQ4NTBCRDhBMzYyMEU5ODY3NjU3RTk4QjNFMjBFOTgyMzA1N0U5ODc3NzU3RTk4MzM4NTdFOTM1NDk1MUJEODQzMTVFRTkzMDFGNUZFOTg1Mzk1RUU5NTcyNTIwRTkyQjQ4MjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMjY3NzI0NDkyMEU5QUFGRjIwRUExNjI2MjBFOTU3MkVCRkVBMUM0NkEwRTgyMzRFQTBFODJCNTZBMEU4MUQ0N0EwRTgyNDRGQTBFODJDNTdBMEU4MUMwMDIzMDAyQjAwMDBFMDFEMDAyNDAwMkMwMDAwRTAxQzY1MjM2NTJCNjUwMEUwMUQ2NTI0NjUyQzY1MDBFMDFDMjM2MEVDMzZENzM2QUQyQjgwNjBFQzFEMjQ2MEVDM0VENzNFQUQyQzgwNjBFQzFDMkJERUU4MjM4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzFDQkQzQkQ3MjNCRDQ2ODA0NkNGNEY4MDRGQ0Y1NjMzNTZDRjQ3M0I0N0NGRDNGRjIwRUEwMDgwMDBFODRFMzM0RUNGNTczQjU3Q0Y5OEZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQzkwCisvKiBUR1pBICovCis6MDM1ODAwMDAwMDAwODg5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODIyNDA0OEJGMkE0MDUwQkYzMjQxNDlCRjNBNDE1MUJGQzM2QkNCNkIwMDg4OThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNEJBMEU4QURFRTI5OUYwMEUwNDkwNDkwRTI1MTA0MzE0NkIxRTg0OTQxQzBFQzM5NTdCMUU4MDAwNDQ2RTI3MzUzQTBFODUxNDFDMEVDMzEwMDM5MDA1QzgwMTVFQTA4MDQxMDA0NTE0OUMwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNEFCRjI3NEFBMEU4MUE0MjUyQkYxRTQ5NjBFQTczN0JDOEVDMjY1MTYwRUEzMjQwNDhCRDIyNDA1MEJEMTI0MTQ5QkQzQTQxNTFCREJGMkYyNkJEMDBFMDdCNzIzMjIwMjIyMDEyMjAzQTIwNDYzMTQ2QkY0RTMxNEVCRkIzRTIyRDlGMDA4MDAwRTg1NjMxNTZCRjQ3Mzk0N0JGNEYzOTRGQkY1NzM5NTdCRjRFODAwN0VBMjQ0MTIwRTk0MjczRjhFQzAwRTAyRDczMzM3MjBDRTNBNTJGMUVCRDQzNDMyRERGNEI0QjJEREZBRTFFMjZCRDU4RTMzMzY2NTM1MzJEREYwMDgwMDBFOEI4MzgzM0JGMDBFMDU5RTMxRTEyNDFFOTFBMjI0MUU5MkI0MDNERTkzRjRCQTBFODJENzMzMDc2MDU4MDNERUEzNzQzQTBFODNENTNBMEU4NDg3MEY4RUMyQjQ4M0NFOTFGMjdCQ0U4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxODNBNDFFOTFEMzI0MUU5MkE0MDIwRTk1NjNENTZERjQ2Mzc0NkRGNEUzRjRFREYxNjMwMjBFOTRGM0Y0RkRGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREY0NzM3NDdERjU3M0Q1N0RGM0RDRjc0QzAzN0NGNzRDNDMxNTMyRjlGMzQ4MDIwRTkzOUU1MkM5RjNDM0QyMEU5MjdDRjc0QzYzRENGNzRDMjBBNDQ0Q0IwMDI0NDU0QjAyQTQ0NENCMjFBNDQ1NEIyMjA4MDNBRUEwQTIwMDIyMDg4NzM1RUU5MkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTMxNTMyRjlGOUMyNzIwRTkwQTQ0NENCNDAyNDQ1NEI0MkE0NDRDQjYxQTQ0NTRCNjM5RTUyQzlGMzgzRDIwRTkwQTIwMDIyMDJBMjAxQTIwMEE0NzRGQkYwMjQ3NTdCRjMwNTAyRTlGM0UzMDRGRTkzODIxMkM5RjNGMzg0RkU5MkE0NjRFQkYxQTQ2NTZCRjMxNTMyRjlGM0EzMTRGRTkzOUU1MkM5RjNCMzk0RkU5MzE1MzJGOUYzNjMwNEZFOTM5RTUyQzlGMzczODRGRTkyQTQzNEJCRjFBNDM1M0JGMzA1MDJFOUY5RDMxNEZFOTM4MjEyQzlGOUUzOTRGRTkzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTM3NDg1MEJEOEEzNjIwRTk4Njc2NTdFOThCM0UyMEU5ODIzMDU3RTk4Nzc3NTdFOTgzMzg1N0U5MzU0OTUxQkQ4NDMxNUVFOTMwMUY1RkU5ODUzOTVFRTk1NzI1MjBFOTJCNDgyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAyNjc3MjQ0OTIwRTlBQkZGMjBFQTE2MjYyMEU5NTcyRUJGRUExQzQ2QTBFODIzNEVBMEU4MkI1NkEwRTgxRDQ3QTBFODI0NEZBMEU4MkM1N0EwRTgxQzAwMjMwMDJCMDAwMEUwMUQwMDI0MDAyQzAwMDBFMDFDNjUyMzY1MkI2NTAwRTAxRDY1MjQ2NTJDNjUwMEUwMUMyMzYwRUMzNkQ3MzZBRDJCODA2MEVDMUQyNDYwRUMzRUQ3M0VBRDJDODA2MEVDMUMyQkRFRTgyMzgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MUNCRDNCRDcyM0JENDY4MDQ2Q0Y0RjgwNEZDRjU2MzM1NkNGNDczQjQ3Q0ZEM0ZGMjBFQTAwODAwMEU4NEUzMzRFQ0Y1NzNCNTdDRjk5RkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDMzUKKy8qIFRHWkFGICovCis6MDM4MDAwMDAwMDAwODg5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODIyNDA0OEJGMkE0MDUwQkYzMjQxNDlCRjNBNDE1MUJGQzM2QkNCNkIwMDg4OThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNEJBMEU4QURFRTI5OUYwMEUwNDkwNDkwRTI1MTA0MzE0NkIxRTg0OTQxQzBFQzM5NTdCMUU4MDAwNDQ2RTI3MzUzQTBFODUxNDFDMEVDMzEwMDM5MDA2MTgwMTVFQTA4MDQxMDA0NTE0OUMwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNEFCRjI3NEFBMEU4MUE0MjUyQkYxRTQ5NjBFQTczN0JDOEVDMjY1MTYwRUEzMjQwNDhCRDIyNDA1MEJEMTI0MTQ5QkQzQTQxNTFCREJGMkYyNkJEMDBFMDdCNzIzMjIwMjIyMDEyMjAzQTIwNDYzMTQ2QkY0RTMxNEVCRkIzRTIyRDlGMDA4MDAwRTg1NjMxNTZCRjQ3Mzk0N0JGNEYzOTRGQkY1NzM5NTdCRjUzODAwN0VBMjQ0MTIwRTk0MjczRjhFQzAwRTAyRDczMzM3MjBDRTNBNTJGMUVCRDQzNDMyRERGNEI0QjJEREZBRTFFMjZCRDU4RTMzMzY2NTM1MzJEREYwMDgwMDBFOEI4MzgzM0JGMDBFMDU5RTMxRTEyNDFFOTFBMjI0MUU5MkI0MDNERTkzRjRCQTBFODJENzMzMDc2MDU4MDNERUEzNzQzQTBFODNENTNBMEU4NDg3MEY4RUMyQjQ4M0NFOTFGMjdCQ0U4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxODNBNDFFOTFEMzI0MUU5MkE0MDIwRTk1NjNENTZERjQ2Mzc0NkRGNEUzRjRFREYxNjMwMjBFOTRGM0Y0RkRGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREY0NzM3NDdERjU3M0Q1N0RGM0RDRjc0QzAzN0NGNzRDNDBBNDQ0Q0IwMDI0NDU0QjAzMTUzMkY5RjM0MzcyMEU5MzlFNTJDOUYzQzNEMjBFOTJBNDQ0Q0IyMUE0NDU0QjIyNjgwM0FFQTBBMjAwMjIwODg3MzVFRTkyQTIwMUEyMDNEQ0Y3NEMyMjdDRjc0QzYzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTMxNTMyRjlGOUMyNzIwRTkwQTQ0NENCNDAyNDQ1NEI0MkE0NDRDQjYxQTQ0NTRCNjM5RTUyQzlGMzgzRDIwRTkwQTIwMDIyMDJBMjAxQTIwM0RDRjc1QzYwMDgwMDBFODMwNTAyRTlGM0UzMDRGRTkzODIxMkM5RjNGMzg0RkU5MEE0NTREQjYwMjQ1NTVCNjMxNTMyRjlGM0EzMTRGRTkzOUU1MkM5RjNCMzk0RkU5MzEzRDIwRTkwQTIwMDIyMDJBNDY0RUJGMUE0NjU2QkYwQTQ3NEZCRjAyNDc1N0JGMzA1MDJFOUYzNjMwNEZFOTM4MjEyQzlGMzczODRGRTkzMTUzMkY5RjlEMzE0RkU5MzlFNTJDOUY5RTM5NEZFOTJBNDM0QkJGMUE0MzUzQkYzMDUwMkU5RjM1MzA0RkU5MzgyMTJDOUYzOTM4NEZFOTMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5Mzc0ODUwQkQ4QTM2MjBFOTg2NzY1N0U5OEIzRTIwRTk4MjMwNTdFOTg3Nzc1N0U5ODMzODU3RTkzNTQ5NTFCRDg0MzE1RUU5MzAxRjVGRTk4NTM5NUVFOTU3MjUyMEU5MkI0ODIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDI2NzcyNDQ5MjBFOUE2RkYyMEVBMTYyNjIwRTk1NzJFQkZFQTFDNDZBMEU4MjM0RUEwRTgyQjU2QTBFODFENDdBMEU4MjQ0RkEwRTgyQzU3QTBFODFDMDAyMzAwMkIwMDAwRTAxRDAwMjQwMDJDMDAwMEUwMUM2NTIzNjUyQjY1MDBFMDFENjUyNDY1MkM2NTAwRTAxQzIzNjBFQzM2RDczNkFEMkI4MDYwRUMxRDI0NjBFQzNFRDczRUFEMkM4MDYwRUMxQzJCREVFODIzODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcxQ0JEM0JENzIzQkQ0NjgwNDZDRjRGODA0RkNGNTYzMzU2Q0Y0NzNCNDdDRkNERkYyMEVBMDA4MDAwRTg0RTMzNEVDRjU3M0I1N0NGOTRGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUM4OQorLyogVEdaUyAqLworOjAzQTAwMDAwMDAwMDg4OThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgyMjQwNDhCRjJBNDA1MEJGMzI0MTQ5QkYzQTQxNTFCRkMzNkJDQjZCMDA4ODk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzRCQTBFOEFERUUyOTlGMDBFMDQ5MDQ5MEUyNTEwNDMxNDZCMUU4NDk0MUMwRUMzOTU3QjFFODAwMDQ0NkUyNzM1M0EwRTg1MTQxQzBFQzMxMDAzOTAwNjU4MDE1RUEwODA0MTAwNDUxNDlDMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjRBQkYyNzRBQTBFODFBNDI1MkJGMUU0OTYwRUE3MzdCQzhFQzI2NTE2MEVBMzI0MDQ4QkQyMjQwNTBCRDEyNDE0OUJEM0E0MTUxQkRCRjJGMjZCRDAwRTA3QjcyMzIyMDIyMjAxMjIwM0EyMDQ2MzE0NkJGNEUzMTRFQkZCM0UyMkQ5RjAwODAwMEU4NTYzMTU2QkY0NzM5NDdCRjRGMzk0RkJGNTczOTU3QkY1NzgwMDdFQTI0NDEyMEU5NDI3M0Y4RUMwMEUwMkQ3MzMzNzIwQ0UzQTUyRjFFQkQ0MzQzMkRERjRCNEIyRERGQUUxRTI2QkQ1OEUzMzM2NjUzNTMyRERGMDA4MDAwRThCODM4MzNCRjAwRTA1OUUzMUUxMjQxRTkxQTIyNDFFOTJCNDAzREU5M0Y0QkEwRTgyRDczMzA3NjA1ODAzREVBMzc0M0EwRTgzRDUzQTBFODQ4NzBGOEVDMkI0ODNDRTkxRjI3QkNFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTgzQTQxRTkxRDMyNDFFOTJBNDAyMEU5NTYzRDU2REY0NjM3NDZERjRFM0Y0RURGMTYzMDIwRTk0RjNGNEZERjQ3Mzc0N0RGNTczRDU3REYzMjMyMkRERjIyMjIyRERGMTIxMjJEREYzQTNBMkRERjI3Q0Y3NEMyMzdDRjc0QzQwQTQ0NENCMDAyNDQ1NEIwM0RDRjc0QzAzNDM3MjBFOTMxNTMyRjlGMzgyNzIwRTkzOUU1MkM5RjNDM0QyMEU5MkE0NDRDQjIxQTQ0NTRCMjI5ODAzQUVBMEEyMDAyMjAyN0NGNzVDMDJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzRENGNzVDMjM3Q0Y3NUM0MzE1MzJGOUZBNjI3MjBFOTM5RTUyQzlGQTMzRDIwRTkyQTQ0NENCNDFBNDQ1NEI0MEE0NTREQjAwMjQ1NTVCMDg4NzM1RUU5MkEyMDFBMjBBMDM3MjBFOTBBMjAwMjIwMzE1MzJGOUYzRTMwNEZFOTM5RTUyQzlGM0YzODRGRTkzMDUwMkU5RjNBMzE0RkU5MkE0NTREQjIxQTQ1NTVCMjBBNDU0REI0MDI0NTU1QjQzODIxMkM5RjNCMzk0RkU5MEEyMDAyMjAyQTIwMUEyMDJBNDY0RUJGMUE0NjU2QkYzMTUzMkY5RjM2MzE0RkU5MzlFNTJDOUYzNzM5NEZFOTMwNTAyRTlGQTczMDRGRTkzODIxMkM5RkE4Mzg0RkU5MEE0NzRGQkYwMjQ3NTdCRjMxNTMyRjlGQTQzMTRGRTkzOUU1MkM5RkE1Mzk0RkU5MkE0MzRCQkYxQTQzNTNCRjMwNTAyRTlGQTEzMDRGRTkzODIxMkM5RkEyMzg0RkU5MzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkzNzQ4NTBCRDhBMzYyMEU5ODY3NjU3RTk4QjNFMjBFOTgyMzA1N0U5ODc3NzU3RTk4MzM4NTdFOTM1NDk1MUJEODQzMTVFRTkzMDFGNUZFOTg1Mzk1RUU5NTcyNTIwRTkyQjQ4MjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMjY3NzI0NDkyMEU5QTJGRjIwRUExNjI2MjBFOTU3MkVCRkVBMUM0NkEwRTgyMzRFQTBFODJCNTZBMEU4MUQ0N0EwRTgyNDRGQTBFODJDNTdBMEU4MUMwMDIzMDAyQjAwMDBFMDFEMDAyNDAwMkMwMDAwRTAxQzY1MjM2NTJCNjUwMEUwMUQ2NTI0NjUyQzY1MDBFMDFDMjM2MEVDMzZENzM2QUQyQjgwNjBFQzFEMjQ2MEVDM0VENzNFQUQyQzgwNjBFQzFDMkJERUU4MjM4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzFDQkQzQkQ3MjNCRDQ2ODA0NkNGNEY4MDRGQ0Y1NjMzNTZDRjQ3M0I0N0NGQ0FGRjIwRUEwMDgwMDBFODRFMzM0RUNGNTczQjU3Q0Y5MEZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQ0Q4CisvKiBUR1pTRiAqLworOjAzQzgwMDAwMDAwMDg4OThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgyMjQwNDhCRjJBNDA1MEJGMzI0MTQ5QkYzQTQxNTFCRkMzNkJDQjZCMDA4ODk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzRCQTBFOEFERUUyOTlGMDBFMDQ5MDQ5MEUyNTEwNDMxNDZCMUU4NDk0MUMwRUMzOTU3QjFFODAwMDQ0NkUyNzM1M0EwRTg1MTQxQzBFQzMxMDAzOTAwNkE4MDE1RUEwODA0MTAwNDUxNDlDMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjRBQkYyNzRBQTBFODFBNDI1MkJGMUU0OTYwRUE3MzdCQzhFQzI2NTE2MEVBMzI0MDQ4QkQyMjQwNTBCRDEyNDE0OUJEM0E0MTUxQkRCRjJGMjZCRDAwRTA3QjcyMzIyMDIyMjAxMjIwM0EyMDQ2MzE0NkJGNEUzMTRFQkZCM0UyMkQ5RjAwODAwMEU4NTYzMTU2QkY0NzM5NDdCRjRGMzk0RkJGNTczOTU3QkY1QzgwMDdFQTI0NDEyMEU5NDI3M0Y4RUMwMEUwMkQ3MzMzNzIwQ0UzQTUyRjFFQkQ0MzQzMkRERjRCNEIyRERGQUUxRTI2QkQ1OEUzMzM2NjUzNTMyRERGMDA4MDAwRThCODM4MzNCRjAwRTA1OUUzMUUxMjQxRTkxQTIyNDFFOTJCNDAzREU5M0Y0QkEwRTgyRDczMzA3NjA1ODAzREVBMzc0M0EwRTgzRDUzQTBFODQ4NzBGOEVDMkI0ODNDRTkxRjI3QkNFODAwODAwMEU4MDA4MDAwRTgwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTgzQTQxRTkxRDMyNDFFOTJBNDAyMEU5NTYzRDU2REY0NjM3NDZERjRFM0Y0RURGMTYzMDIwRTk0RjNGNEZERjQ3Mzc0N0RGNTczRDU3REYzMjMyMkRERjIyMjIyRERGMTIxMjJEREYzQTNBMkRERjI3Q0Y3NEMyMzdDRjc0QzQwQTQ0NENCMDAyNDQ1NEIwM0RDRjc0QzAzNDM3MjBFOTMxNTMyRjlGMzgyNzIwRTkzOUU1MkM5RjNDM0QyMEU5MkE0NDRDQjIxQTQ0NTRCMjJFODAzQUVBMEEyMDAyMjAyN0NGNzVDMDJBMjAxQTIwMzA1MDJFOUYzMjMxNUZFOTM4MjEyQzlGMzMzOTVGRTkzRENGNzVDMjM3Q0Y3NUM0MzE1MzJGOUZBNjI3MjBFOTM5RTUyQzlGQTMzRDIwRTkyQTQ0NENCNDFBNDQ1NEI0MEE0NTREQjAwMjQ1NTVCMDg4NzM1RUU5MkEyMDFBMjBBMDM3MjBFOTBBMjAwMjIwMzE1MzJGOUYzRTMwNEZFOTM5RTUyQzlGM0YzODRGRTkzMDUwMkU5RjNBMzE0RkU5MzgyMTJDOUYzQjM5NEZFOTJBNDU0REIyMUE0NTU1QjIwQTQ1NERCNDAyNDU1NUI0MjdDRjc1QzYyQTIwMUEyMEE3MzA0RkU5MEEyMDAyMjAzMTUzMkY5RjMxMjcyMEU5MzlFNTJDOUZBODM4NEZFOTJBNDU0REI2MUE0NTU1QjYzMDUwMkU5RjM2MzE0RkU5MzgyMTJDOUYzNzM5NEZFOTAwODAwMEU4MkEyMDFBMjAyQTQ2NEVCRjFBNDY1NkJGMzE1MzJGOUZBNDMxNEZFOTM5RTUyQzlGQTUzOTRGRTkwQTQ3NEZCRjAyNDc1N0JGMzE1MzJGOUZBMTMwNEZFOTM5RTUyQzlGQTIzODRGRTkyQTQzNEJCRjFBNDM1M0JGMzA1MDJFOUYzNTMxNEZFOTM4MjEyQzlGMzkzOTRGRTkzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTM3NDg1MEJEOEEzNjIwRTk4Njc2NTdFOThCM0UyMEU5ODIzMDU3RTk4Nzc3NTdFOTgzMzg1N0U5MzU0OTUxQkQ4NDMxNUVFOTMwMUY1RkU5ODUzOTVFRTk1NzI1MjBFOTJCNDgyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAyNjc3MjQ0OTIwRTk5REZGMjBFQTE2MjYyMEU5NTcyRUJGRUExQzQ2QTBFODIzNEVBMEU4MkI1NkEwRTgxRDQ3QTBFODI0NEZBMEU4MkM1N0EwRTgxQzAwMjMwMDJCMDAwMEUwMUQwMDI0MDAyQzAwMDBFMDFDNjUyMzY1MkI2NTAwRTAxRDY1MjQ2NTJDNjUwMEUwMUMyMzYwRUMzNkQ3MzZBRDJCODA2MEVDMUQyNDYwRUMzRUQ3M0VBRDJDODA2MEVDMUMyQkRFRTgyMzgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MUNCRDNCRDcyM0JENDY4MDQ2Q0Y0RjgwNEZDRjU2MzM1NkNGNDczQjQ3Q0ZDNUZGMjBFQTAwODAwMEU4NEUzMzRFQ0Y1NzNCNTdDRjhCRkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDRDMKKy8qIFRHWlNBICovCis6MDNDODAwMDAwMDAwODg5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODIyNDA0OEJGMkE0MDUwQkYzMjQxNDlCRjNBNDE1MUJGQzM2QkNCNkIwMDg4OThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNEJBMEU4QURFRTI5OUYwMEUwNDkwNDkwRTI1MTA0MzE0NkIxRTg0OTQxQzBFQzM5NTdCMUU4MDAwNDQ2RTI3MzUzQTBFODUxNDFDMEVDMzEwMDM5MDA2QTgwMTVFQTA4MDQxMDA0NTE0OUMwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNEFCRjI3NEFBMEU4MUE0MjUyQkYxRTQ5NjBFQTczN0JDOEVDMjY1MTYwRUEzMjQwNDhCRDIyNDA1MEJEMTI0MTQ5QkQzQTQxNTFCREJGMkYyNkJEMDBFMDdCNzIzMjIwMjIyMDEyMjAzQTIwNDYzMTQ2QkY0RTMxNEVCRkIzRTIyRDlGMDA4MDAwRTg1NjMxNTZCRjQ3Mzk0N0JGNEYzOTRGQkY1NzM5NTdCRjVDODAwN0VBMjQ0MTIwRTk0MjczRjhFQzAwRTAyRDczMzM3MjBDRTNBNTJGMUVCRDQzNDMyRERGNEI0QjJEREZBRTFFMjZCRDU4RTMzMzY2NTM1MzJEREYwMDgwMDBFOEI4MzgzM0JGMDBFMDU5RTMxRTEyNDFFOTFBMjI0MUU5MkI0MDNERTkzRjRCQTBFODJENzMzMDc2MDU4MDNERUEzNzQzQTBFODNENTNBMEU4NDg3MEY4RUMyQjQ4M0NFOTFGMjdCQ0U4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxODNBNDFFOTFEMzI0MUU5MkE0MDIwRTk1NjNENTZERjQ2Mzc0NkRGNEUzRjRFREYxNjMwMjBFOTRGM0Y0RkRGNDczNzQ3REY1NzNENTdERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGMjdDRjc0QzIzN0NGNzRDNDBBNDQ0Q0IwMDI0NDU0QjAzRENGNzRDMDM0MzcyMEU5MzE1MzJGOUYzODI3MjBFOTM5RTUyQzlGM0MzRDIwRTkyQTQ0NENCMjFBNDQ1NEIyMkU4MDNBRUEwQTIwMDIyMDI3Q0Y3NUMwMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTNEQ0Y3NUMyMzdDRjc1QzQzMTUzMkY5RkE2MjcyMEU5MzlFNTJDOUZBMzNEMjBFOTJBNDQ0Q0I0MUE0NDU0QjQwQTQ1NERCMDAyNDU1NUIwODg3MzVFRTkyQTIwMUEyMEEwMzcyMEU5MEEyMDAyMjAzMTUzMkY5RjNFMzA0RkU5MzlFNTJDOUYzRjM4NEZFOTMwNTAyRTlGM0EzMTRGRTkzODIxMkM5RjNCMzk0RkU5MkE0NTREQjIxQTQ1NTVCMjBBNDU0REI0MDI0NTU1QjQyN0NGNzRDNjJBMjAxQTIwQTczMDRGRTkwQTIwMDIyMDMxNTMyRjlGOUMyNzIwRTkzOUU1MkM5RkE4Mzg0RkU5MkE0NDRDQjYxQTQ0NTRCNjMwNTAyRTlGMzYzMTRGRTkzODIxMkM5RjM3Mzk0RkU5MDA4MDAwRTgyQTIwMUEyMDJBNDY0RUJGMUE0NjU2QkYzMTUzMkY5RkE0MzE0RkU5MzlFNTJDOUZBNTM5NEZFOTBBNDc0RkJGMDI0NzU3QkYzMTUzMkY5RkExMzA0RkU5MzlFNTJDOUZBMjM4NEZFOTJBNDM0QkJGMUE0MzUzQkYzMDUwMkU5RjlEMzE0RkU5MzgyMTJDOUY5RTM5NEZFOTMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5Mzc0ODUwQkQ4QTM2MjBFOTg2NzY1N0U5OEIzRTIwRTk4MjMwNTdFOTg3Nzc1N0U5ODMzODU3RTkzNTQ5NTFCRDg0MzE1RUU5MzAxRjVGRTk4NTM5NUVFOTU3MjUyMEU5MkI0ODIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDI2NzcyNDQ5MjBFOTlERkYyMEVBMTYyNjIwRTk1NzJFQkZFQTFDNDZBMEU4MjM0RUEwRTgyQjU2QTBFODFENDdBMEU4MjQ0RkEwRTgyQzU3QTBFODFDMDAyMzAwMkIwMDAwRTAxRDAwMjQwMDJDMDAwMEUwMUM2NTIzNjUyQjY1MDBFMDFENjUyNDY1MkM2NTAwRTAxQzIzNjBFQzM2RDczNkFEMkI4MDYwRUMxRDI0NjBFQzNFRDczRUFEMkM4MDYwRUMxQzJCREVFODIzODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcxQ0JEM0JENzIzQkQ0NjgwNDZDRjRGODA0RkNGNTYzMzU2Q0Y0NzNCNDdDRkM1RkYyMEVBMDA4MDAwRTg0RTMzNEVDRjU3M0I1N0NGOEJGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUNBMAorLyogVEdaU0FGICovCis6MDNFODAwMDAwMDAwODg5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODIyNDA0OEJGMkE0MDUwQkYzMjQxNDlCRjNBNDE1MUJGQzM2QkNCNkIwMDg4OThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNEJBMEU4QURFRTI5OUYwMEUwNDkwNDkwRTI1MTA0MzE0NkIxRTg0OTQxQzBFQzM5NTdCMUU4MDAwNDQ2RTI3MzUzQTBFODUxNDFDMEVDMzEwMDM5MDA2RTgwMTVFQTA4MDQxMDA0NTE0OUMwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNEFCRjI3NEFBMEU4MUE0MjUyQkYxRTQ5NjBFQTczN0JDOEVDMjY1MTYwRUEzMjQwNDhCRDIyNDA1MEJEMTI0MTQ5QkQzQTQxNTFCREJGMkYyNkJEMDBFMDdCNzIzMjIwMjIyMDEyMjAzQTIwNDYzMTQ2QkY0RTMxNEVCRkIzRTIyRDlGMDA4MDAwRTg1NjMxNTZCRjQ3Mzk0N0JGNEYzOTRGQkY1NzM5NTdCRjYwODAwN0VBMjQ0MTIwRTk0MjczRjhFQzAwRTAyRDczMzM3MjBDRTNBNTJGMUVCRDQzNDMyRERGNEI0QjJEREZBRTFFMjZCRDU4RTMzMzY2NTM1MzJEREYwMDgwMDBFOEI4MzgzM0JGMDBFMDU5RTMxRTEyNDFFOTFBMjI0MUU5MkI0MDNERTkzRjRCQTBFODJENzMzMDc2MDU4MDNERUEzNzQzQTBFODNENTNBMEU4NDg3MEY4RUMyQjQ4M0NFOTFGMjdCQ0U4MDA4MDAwRTgwMDgwMDBFODAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxODNBNDFFOTFEMzI0MUU5MkE0MDIwRTk1NjNENTZERjQ2Mzc0NkRGNEUzRjRFREYxNjMwMjBFOTRGM0Y0RkRGNDczNzQ3REY1NzNENTdERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGMjdDRjc0QzIzN0NGNzRDNDBBNDQ0Q0IwMDI0NDU0QjAzRENGNzRDMDM0MzcyMEU5MzE1MzJGOUYzODI3MjBFOTM5RTUyQzlGM0MzRDIwRTkyQTQ0NENCMjFBNDQ1NEIyMzI4MDNBRUEwQTIwMDIyMDI3Q0Y3NUMwMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTNEQ0Y3NUMyMzdDRjc1QzQzMTUzMkY5RkE2MjcyMEU5MzlFNTJDOUZBMzNEMjBFOTJBNDQ0Q0I0MUE0NDU0QjQwQTQ1NERCMDAyNDU1NUIwODg3MzVFRTkyQTIwMUEyMEEwMzcyMEU5MEEyMDAyMjAzMTUzMkY5RjNFMzA0RkU5MzlFNTJDOUYzRjM4NEZFOTMwNTAyRTlGM0EzMTRGRTkzODIxMkM5RjNCMzk0RkU5MkE0NTREQjIxQTQ1NTVCMjBBNDU0REI0MDI0NTU1QjQyN0NGNzRDNjJBMjAxQTIwQTczMDRGRTkwQTIwMDIyMDMxNTMyRjlGOUMyNzIwRTkzOUU1MkM5RkE4Mzg0RkU5MkE0NDRDQjYxQTQ0NTRCNjMwNTAyRTlGMzYzMTRGRTkzODIxMkM5RjM3Mzk0RkU5MEE0NTREQjYwMjQ1NTVCNjNEQ0Y3NUM2MkEyMDFBMjAyQTQ2NEVCRjFBNDY1NkJGMzE1MzJGOUZBNDMxNEZFOTM5RTUyQzlGQTUzOTRGRTkzMTNEMjBFOTBBMjAwMjIwMEE0NzRGQkYwMjQ3NTdCRjMwNTAyRTlGQTEzMDRGRTkzODIxMkM5RkEyMzg0RkU5MzE1MzJGOUY5RDMxNEZFOTM5RTUyQzlGOUUzOTRGRTkyQTQzNEJCRjFBNDM1M0JGMzA1MDJFOUYzNTMwNEZFOTM4MjEyQzlGMzkzODRGRTkzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTM3NDg1MEJEOEEzNjIwRTk4Njc2NTdFOThCM0UyMEU5ODIzMDU3RTk4Nzc3NTdFOTgzMzg1N0U5MzU0OTUxQkQ4NDMxNUVFOTMwMUY1RkU5ODUzOTVFRTk1NzI1MjBFOTJCNDgyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAyNjc3MjQ0OTIwRTk5OUZGMjBFQTE2MjYyMEU5NTcyRUJGRUExQzQ2QTBFODIzNEVBMEU4MkI1NkEwRTgxRDQ3QTBFODI0NEZBMEU4MkM1N0EwRTgxQzAwMjMwMDJCMDAwMEUwMUQwMDI0MDAyQzAwMDBFMDFDNjUyMzY1MkI2NTAwRTAxRDY1MjQ2NTJDNjUwMEUwMUMyMzYwRUMzNkQ3MzZBRDJCODA2MEVDMUQyNDYwRUMzRUQ3M0VBRDJDODA2MEVDMUMyQkRFRTgyMzgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MUNCRDNCRDcyM0JENDY4MDQ2Q0Y0RjgwNEZDRjU2MzM1NkNGNDczQjQ3Q0ZDMUZGMjBFQTAwODAwMEU4NEUzMzRFQ0Y1NzNCNTdDRjg3RkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDODMKKy8qIFQyR1ogKi8KKzowNDM4MDAwMDAwMDA4QTk4RTkwMDgwMDBFODAwODBBMEU5MDAwMEQ4RUNGRjgwQzBFOTAwODAwMEU4MEE0MDUwQkYyQTQwNjBCRjMyNDE1MUJGM0E0MTYxQkZDMzZCRDM2QjAwOEE5OEU5NzM3QkM4RUM5NkUyNDEwNDdCNDNBMEU4NzM1M0EwRThBREVFMjM5RjAwRTA1MTA0OTBFMjYxMDQzMTQ2QjFFODUxNDFFMEVDMzk2N0IxRTgwMDA0NDZFMjczNjNBMEU4NjE0MUUwRUMzMTAwMzkwMDc4ODAxNUVBMTAwNDIwMDQ2MTUxRTBFQzJGNDE2MEVBMzEyMDM5MjAxRjQyQTBFODJBNDI1MkJGMEY1MkEwRTgxQTQyNjJCRjFFNTE2MEVBNzM3QkM4RUMwRTYxNjBFQTMyNDA1MEJEMjI0MDYwQkQxMjQxNTFCRDNBNDE2MUJEQkYyRjBFQkQ5N0UyN0I3MjMyMjAyMjIwMTIyMDNBMjAzNTQ4QjFFODNENTlCMUU4NDYzMTQ2QkY1NjMxNTZCRkIzRTIyRDlGMDA4MDAwRTg2NjMxNjZCRjQ3Mzk0N0JGNTczOTU3QkY2NzM5NjdCRjY5ODAwN0VBMjQ0MTIwRTkzNTAwM0QwMDAwRTAyRDczMzM3MjBDRTM4RDJGMUVCRDQzNzVGOEVDMzUyMDNEMjA0MzQzMkRERjUzNTMyRERGQUUxRTBFQkQ1OEUzMzM2NjQ4MzU0OEJGNTgzNTU4QkY2ODM1NjhCRjQ5M0Q0OUJGNTkzRDU5QkY2OTNENjlCRjYzNjMyRERGNEQ3REY4RUM1OUUzMDBFMEI4MzgzM0JGMkQ3MzMwNzYxODNBNDFFOTNGNTNBMEU4MDU4MDNERUEzNzQzQTBFODNENjNBMEU4NTA3MEY4RUMyQjUwM0NFOTFGMEZCQ0U4MDA4MDAwRTg1OTc4RjhFQzAwODAwMEU4MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxRTEyNDFFOTFBMjI0MUU5NDYzNzQ2REY1NjNGNTZERjJCNDAzREU5NjYzRDY2REYxRDMyNDFFOTY3M0Q2N0RGNDczNzQ3REY1NzNGNTdERjJBNDAyMEU5NTkzRjU5REYxNjMwMjBFOTY5M0Q2OURGNDgzNzQ4REY1ODNGNThERjEyMTIyRERGMjIyMjJEREYzMjMyMkRERjNBM0EyRERGNjgzRDY4REY0OTM3NDlERjNEQ0Y3NEMwMzdDRjc0QzQzMTUzMkY5RjM0ODAyMEU5MzlFNTJDOUYzQzNEMjBFOTBBNDQ1NEIwMDI0NDY0QjAyQTQ0NTRCMjFBNDQ2NEIyMjU4MDNBRUEwQTIwMDIyMDNEQ0Y3NEMyMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTMxNTMyRjlGMDA4MDAwRTgyQTQ0NTRCNDFBNDQ2NEI0MzlFNTJDOUYzODNEMjBFOTg4NzM1RUU5MkEyMDFBMjAyQTQ2NTZCRjFBNDY2NkJGMzE1MzJGOUYzRTMwNEZFOTM5RTUyQzlGM0YzODRGRTkwQTQ3NTdCRjAyNDc2N0JGMzE1MzJGOUYzQTMxNEZFOTM5RTUyQzlGM0IzOTRGRTkyQTQzNTNCRjFBNDM2M0JGMzA1MDJFOUYzNjMxNEZFOTM4MjEyQzlGMzczOTRGRTkwQTQ4NThCRjAyNDg2OEJGMzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkyQTQ5NTlCRjFBNDk2OUJGMzA1MDJFOUY4MjMwNTdFOTM4MjEyQzlGODMzODU3RTkzMTUzMkY5Rjg0MzE1RUU5MzlFNTJDOUY4NTM5NUVFOTg2NzY1N0U5OEEzNjIwRTk4Nzc3NTdFOThCM0VCRkVBODAzMDU3RTk4MTM4NTdFOTgyMzE1N0U5ODY3ODU3RTk4MzM5NTdFOTg3Nzk1N0U5MzAxRjVGRTk4QTM0MjBFOThCM0MyMEU5Mzc1MDYwQkQ1NzBEMjBFOTM1NTE2MUJEMkI1MDIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDBFNzcyNDUxMjBFOTlGRkYyMEVBMTYwRTIwRTk1NzJFQkZFQTBCNDZBMEU4MUI1NkEwRTgyQjY2QTBFODBDNDdBMEU4MUM1N0EwRTgyQzY3QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM2RDczNkFEMkI4MDYwRUMwQzFDNjBFQzNFRDczRUFEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcwQkJEM0JENzFCQkQ0NjgwNDZDRjU3ODA1N0NGNjYzMzY2Q0Y0NzNCNDdDRjU2MzM1NkNGNjczQjY3Q0YwQjQ4QTBFODFCNThBMEU4MkI2OEEwRTgwQzQ5QTBFODFDNTlBMEU4MkM2OUEwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNEQ3MzRBRDJCODA2MEVDMEMxQzYwRUMzQ0Q3M0NBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM0ODAzNEJEM0M4MDNDQkQzM0Q3MEJCRDNCRDcxQkJENDg4MDQ4Q0Y1OTgwNTlDRjY4MzM2OENGNDkzQjQ5Q0ZCRUZGMjBFQTAwODAwMEU4NTgzMzU4Q0Y2OTNCNjlDRjdERkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDQUMKKy8qIFQyR1pGICovCis6MDQ2MDAwMDAwMDAwOEE5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODBBNDA1MEJGMkE0MDYwQkYzMjQxNTFCRjNBNDE2MUJGQzM2QkQzNkIwMDhBOThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNTNBMEU4QURFRTIzOUYwMEUwNTEwNDkwRTI2MTA0MzE0NkIxRTg1MTQxRTBFQzM5NjdCMUU4MDAwNDQ2RTI3MzYzQTBFODYxNDFFMEVDMzEwMDM5MDA3RDgwMTVFQTEwMDQyMDA0NjE1MUUwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNTJCRjBGNTJBMEU4MUE0MjYyQkYxRTUxNjBFQTczN0JDOEVDMEU2MTYwRUEzMjQwNTBCRDIyNDA2MEJEMTI0MTUxQkQzQTQxNjFCREJGMkYwRUJEOTdFMjdCNzIzMjIwMjIyMDEyMjAzQTIwMzU0OEIxRTgzRDU5QjFFODQ2MzE0NkJGNTYzMTU2QkZCM0UyMkQ5RjAwODAwMEU4NjYzMTY2QkY0NzM5NDdCRjU3Mzk1N0JGNjczOTY3QkY2RTgwMDdFQTI0NDEyMEU5MzUwMDNEMDAwMEUwMkQ3MzMzNzIwQ0UzOEQyRjFFQkQ0Mzc1RjhFQzM1MjAzRDIwNDM0MzJEREY1MzUzMkRERkFFMUUwRUJENThFMzMzNjY0ODM1NDhCRjU4MzU1OEJGNjgzNTY4QkY0OTNENDlCRjU5M0Q1OUJGNjkzRDY5QkY2MzYzMkRERjREN0RGOEVDNTlFMzAwRTBCODM4MzNCRjJENzMzMDc2MTgzQTQxRTkzRjUzQTBFODA1ODAzREVBMzc0M0EwRTgzRDYzQTBFODUwNzBGOEVDMkI1MDNDRTkxRjBGQkNFODAwODAwMEU4NTk3OEY4RUMwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MUUxMjQxRTkxQTIyNDFFOTQ2Mzc0NkRGNTYzRjU2REYyQjQwM0RFOTY2M0Q2NkRGMUQzMjQxRTk2NzNENjdERjQ3Mzc0N0RGNTczRjU3REYyQTQwMjBFOTU5M0Y1OURGMTYzMDIwRTk2OTNENjlERjQ4Mzc0OERGNTgzRjU4REYxMjEyMkRERjIyMjIyRERGMzIzMjJEREYzQTNBMkRERjY4M0Q2OERGNDkzNzQ5REYzRENGNzRDMDM3Q0Y3NEM0MzlFNTJDOUYzNDgwMjBFOTMxNTMyRjlGMDA4MDAwRTg4ODczNUVFOTAwODAwMEU4MEZDRjc1QzYzQzNEMjBFOTBBNDQ1NEIwMDI0NDY0QjAyQTQ0NTRCMjFBNDQ2NEIyMjg4MDNBRUEwQTIwMDIyMDNEQ0Y3NEMyMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTMxNTMyRjlGMzEwRjIwRTkwQTQ0NTRCNDAyNDQ2NEI0MkE0NTU1QjYxQTQ1NjVCNjM5RTUyQzlGMzgzRDIwRTkwQTIwMDIyMDJBMjAxQTIwMEE0NzU3QkYwMjQ3NjdCRjMwNTAyRTlGM0UzMDRGRTkzODIxMkM5RjNGMzg0RkU5MkE0NjU2QkYxQTQ2NjZCRjMxNTMyRjlGM0EzMTRGRTkzOUU1MkM5RjNCMzk0RkU5MzE1MzJGOUYzNjMwNEZFOTM5RTUyQzlGMzczODRGRTkyQTQzNTNCRjFBNDM2M0JGMzA1MDJFOUYzNTMxNEZFOTM4MjEyQzlGMzkzOTRGRTkwQTQ4NThCRjAyNDg2OEJGMzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkyQTQ5NTlCRjFBNDk2OUJGMzA1MDJFOUY4MjMwNTdFOTM4MjEyQzlGODMzODU3RTkzMTUzMkY5Rjg0MzE1RUU5MzlFNTJDOUY4NTM5NUVFOTg2NzY1N0U5OEEzNjIwRTk4Nzc3NTdFOThCM0VCRkVBODAzMDU3RTk4MTM4NTdFOTgyMzE1N0U5ODY3ODU3RTk4MzM5NTdFOTg3Nzk1N0U5MzAxRjVGRTk4QTM0MjBFOThCM0MyMEU5Mzc1MDYwQkQ1NzBEMjBFOTM1NTE2MUJEMkI1MDIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDBFNzcyNDUxMjBFOTlBRkYyMEVBMTYwRTIwRTk1NzJFQkZFQTBCNDZBMEU4MUI1NkEwRTgyQjY2QTBFODBDNDdBMEU4MUM1N0EwRTgyQzY3QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM2RDczNkFEMkI4MDYwRUMwQzFDNjBFQzNFRDczRUFEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcwQkJEM0JENzFCQkQ0NjgwNDZDRjU3ODA1N0NGNjYzMzY2Q0Y0NzNCNDdDRjU2MzM1NkNGNjczQjY3Q0YwQjQ4QTBFODFCNThBMEU4MkI2OEEwRTgwQzQ5QTBFODFDNTlBMEU4MkM2OUEwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNEQ3MzRBRDJCODA2MEVDMEMxQzYwRUMzQ0Q3M0NBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM0ODAzNEJEM0M4MDNDQkQzM0Q3MEJCRDNCRDcxQkJENDg4MDQ4Q0Y1OTgwNTlDRjY4MzM2OENGNDkzQjQ5Q0ZCQkZGMjBFQTAwODAwMEU4NTgzMzU4Q0Y2OTNCNjlDRjc4RkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDRkIKKy8qIFQyR1pBICovCis6MDQ1ODAwMDAwMDAwOEE5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODBBNDA1MEJGMkE0MDYwQkYzMjQxNTFCRjNBNDE2MUJGQzM2QkQzNkIwMDhBOThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNTNBMEU4QURFRTIzOUYwMEUwNTEwNDkwRTI2MTA0MzE0NkIxRTg1MTQxRTBFQzM5NjdCMUU4MDAwNDQ2RTI3MzYzQTBFODYxNDFFMEVDMzEwMDM5MDA3QzgwMTVFQTEwMDQyMDA0NjE1MUUwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNTJCRjBGNTJBMEU4MUE0MjYyQkYxRTUxNjBFQTczN0JDOEVDMEU2MTYwRUEzMjQwNTBCRDIyNDA2MEJEMTI0MTUxQkQzQTQxNjFCREJGMkYwRUJEOTdFMjdCNzIzMjIwMjIyMDEyMjAzQTIwMzU0OEIxRTgzRDU5QjFFODQ2MzE0NkJGNTYzMTU2QkZCM0UyMkQ5RjAwODAwMEU4NjYzMTY2QkY0NzM5NDdCRjU3Mzk1N0JGNjczOTY3QkY2RDgwMDdFQTI0NDEyMEU5MzUwMDNEMDAwMEUwMkQ3MzMzNzIwQ0UzOEQyRjFFQkQ0Mzc1RjhFQzM1MjAzRDIwNDM0MzJEREY1MzUzMkRERkFFMUUwRUJENThFMzMzNjY0ODM1NDhCRjU4MzU1OEJGNjgzNTY4QkY0OTNENDlCRjU5M0Q1OUJGNjkzRDY5QkY2MzYzMkRERjREN0RGOEVDNTlFMzAwRTBCODM4MzNCRjJENzMzMDc2MTgzQTQxRTkzRjUzQTBFODA1ODAzREVBMzc0M0EwRTgzRDYzQTBFODUwNzBGOEVDMkI1MDNDRTkxRjBGQkNFODAwODAwMEU4NTk3OEY4RUMwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MUUxMjQxRTkxQTIyNDFFOTQ2Mzc0NkRGNTYzRjU2REYyQjQwM0RFOTY2M0Q2NkRGMUQzMjQxRTk2NzNENjdERjQ3Mzc0N0RGNTczRjU3REYyQTQwMjBFOTU5M0Y1OURGMTYzMDIwRTk2OTNENjlERjQ4Mzc0OERGNTgzRjU4REYxMjEyMkRERjIyMjIyRERGMzIzMjJEREYzQTNBMkRERjY4M0Q2OERGNDkzNzQ5REYzRENGNzRDMDM3Q0Y3NEM0MzE1MzJGOUYzNDgwMjBFOTM5RTUyQzlGM0MzRDIwRTkwQTQ0NTRCMDAyNDQ2NEIwMkE0NDU0QjIxQTQ0NjRCMjI5ODAzQUVBMEEyMDAyMjAwRkNGNzRDNjNEQ0Y3NEMyODg3MzVFRTkyQTIwMUEyMDMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5MzE1MzJGOUY5QzBGMjBFOTBBNDQ1NEI0MDI0NDY0QjQyQTQ0NTRCNjFBNDQ2NEI2MzlFNTJDOUYzODNEMjBFOTBBMjAwMjIwMkEyMDFBMjAwQTQ3NTdCRjAyNDc2N0JGMzA1MDJFOUYzRTMwNEZFOTM4MjEyQzlGM0YzODRGRTkyQTQ2NTZCRjFBNDY2NkJGMzE1MzJGOUYzQTMxNEZFOTM5RTUyQzlGM0IzOTRGRTkzMTUzMkY5RjM2MzA0RkU5MzlFNTJDOUYzNzM4NEZFOTJBNDM1M0JGMUE0MzYzQkYzMDUwMkU5RjlEMzE0RkU5MzgyMTJDOUY5RTM5NEZFOTBBNDg1OEJGMDI0ODY4QkYzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTJBNDk1OUJGMUE0OTY5QkYzMDUwMkU5RjgyMzA1N0U5MzgyMTJDOUY4MzM4NTdFOTMxNTMyRjlGODQzMTVFRTkzOUU1MkM5Rjg1Mzk1RUU5ODY3NjU3RTk4QTM2MjBFOTg3Nzc1N0U5OEIzRUJGRUE4MDMwNTdFOTgxMzg1N0U5ODIzMTU3RTk4Njc4NTdFOTgzMzk1N0U5ODc3OTU3RTkzMDFGNUZFOThBMzQyMEU5OEIzQzIwRTkzNzUwNjBCRDU3MEQyMEU5MzU1MTYxQkQyQjUwMjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMEU3NzI0NTEyMEU5OUJGRjIwRUExNjBFMjBFOTU3MkVCRkVBMEI0NkEwRTgxQjU2QTBFODJCNjZBMEU4MEM0N0EwRTgxQzU3QTBFODJDNjdBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzZENzM2QUQyQjgwNjBFQzBDMUM2MEVDM0VENzNFQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzBCQkQzQkQ3MUJCRDQ2ODA0NkNGNTc4MDU3Q0Y2NjMzNjZDRjQ3M0I0N0NGNTYzMzU2Q0Y2NzNCNjdDRjBCNDhBMEU4MUI1OEEwRTgyQjY4QTBFODBDNDlBMEU4MUM1OUEwRTgyQzY5QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM0RDczNEFEMkI4MDYwRUMwQzFDNjBFQzNDRDczQ0FEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzQ4MDM0QkQzQzgwM0NCRDMzRDcwQkJEM0JENzFCQkQ0ODgwNDhDRjU5ODA1OUNGNjgzMzY4Q0Y0OTNCNDlDRkJBRkYyMEVBMDA4MDAwRTg1ODMzNThDRjY5M0I2OUNGNzlGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUNBMAorLyogVDJHWkFGICovCis6MDQ4MDAwMDAwMDAwOEE5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODBBNDA1MEJGMkE0MDYwQkYzMjQxNTFCRjNBNDE2MUJGQzM2QkQzNkIwMDhBOThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNTNBMEU4QURFRTIzOUYwMEUwNTEwNDkwRTI2MTA0MzE0NkIxRTg1MTQxRTBFQzM5NjdCMUU4MDAwNDQ2RTI3MzYzQTBFODYxNDFFMEVDMzEwMDM5MDA4MTgwMTVFQTEwMDQyMDA0NjE1MUUwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNTJCRjBGNTJBMEU4MUE0MjYyQkYxRTUxNjBFQTczN0JDOEVDMEU2MTYwRUEzMjQwNTBCRDIyNDA2MEJEMTI0MTUxQkQzQTQxNjFCREJGMkYwRUJEOTdFMjdCNzIzMjIwMjIyMDEyMjAzQTIwMzU0OEIxRTgzRDU5QjFFODQ2MzE0NkJGNTYzMTU2QkZCM0UyMkQ5RjAwODAwMEU4NjYzMTY2QkY0NzM5NDdCRjU3Mzk1N0JGNjczOTY3QkY3MjgwMDdFQTI0NDEyMEU5MzUwMDNEMDAwMEUwMkQ3MzMzNzIwQ0UzOEQyRjFFQkQ0Mzc1RjhFQzM1MjAzRDIwNDM0MzJEREY1MzUzMkRERkFFMUUwRUJENThFMzMzNjY0ODM1NDhCRjU4MzU1OEJGNjgzNTY4QkY0OTNENDlCRjU5M0Q1OUJGNjkzRDY5QkY2MzYzMkRERjREN0RGOEVDNTlFMzAwRTBCODM4MzNCRjJENzMzMDc2MTgzQTQxRTkzRjUzQTBFODA1ODAzREVBMzc0M0EwRTgzRDYzQTBFODUwNzBGOEVDMkI1MDNDRTkxRjBGQkNFODAwODAwMEU4NTk3OEY4RUMwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MUUxMjQxRTkxQTIyNDFFOTQ2Mzc0NkRGNTYzRjU2REYyQjQwM0RFOTY2M0Q2NkRGMUQzMjQxRTk2NzNENjdERjQ3Mzc0N0RGNTczRjU3REYyQTQwMjBFOTU5M0Y1OURGMTYzMDIwRTk2OTNENjlERjQ4Mzc0OERGNTgzRjU4REYxMjEyMkRERjIyMjIyRERGMzIzMjJEREYzQTNBMkRERjY4M0Q2OERGNDkzNzQ5REYzRENGNzRDMDM3Q0Y3NEM0MEE0NDU0QjAwMjQ0NjRCMDMxNTMyRjlGMzQzNzIwRTkzOUU1MkM5RjNDM0QyMEU5MkE0NDU0QjIxQTQ0NjRCMjJFODAzQUVBMEEyMDAyMjA4ODczNUVFOTJBMjAxQTIwM0RDRjc0QzIwRkNGNzRDNjMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5MzE1MzJGOUY5QzBGMjBFOTBBNDQ1NEI0MDI0NDY0QjQyQTQ0NTRCNjFBNDQ2NEI2MzlFNTJDOUYzODNEMjBFOTBBMjAwMjIwMkEyMDFBMjAzRENGNzVDNjAwODAwMEU4MzA1MDJFOUYzRTMwNEZFOTM4MjEyQzlGM0YzODRGRTkwQTQ1NTVCNjAyNDU2NUI2MzE1MzJGOUYzQTMxNEZFOTM5RTUyQzlGM0IzOTRGRTkzMTNEMjBFOTBBMjAwMjIwMkE0NjU2QkYxQTQ2NjZCRjBBNDc1N0JGMDI0NzY3QkYzMDUwMkU5RjM2MzA0RkU5MzgyMTJDOUYzNzM4NEZFOTMxNTMyRjlGOUQzMTRGRTkzOUU1MkM5RjlFMzk0RkU5MkE0MzUzQkYxQTQzNjNCRjMwNTAyRTlGMzUzMDRGRTkzODIxMkM5RjM5Mzg0RkU5MEE0ODU4QkYwMjQ4NjhCRjMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5MkE0OTU5QkYxQTQ5NjlCRjMwNTAyRTlGODIzMDU3RTkzODIxMkM5RjgzMzg1N0U5MzE1MzJGOUY4NDMxNUVFOTM5RTUyQzlGODUzOTVFRTk4Njc2NTdFOThBMzYyMEU5ODc3NzU3RTk4QjNFQkZFQTgwMzA1N0U5ODEzODU3RTk4MjMxNTdFOTg2Nzg1N0U5ODMzOTU3RTk4Nzc5NTdFOTMwMUY1RkU5OEEzNDIwRTk4QjNDMjBFOTM3NTA2MEJENTcwRDIwRTkzNTUxNjFCRDJCNTAyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAwRTc3MjQ1MTIwRTk5NkZGMjBFQTE2MEUyMEU5NTcyRUJGRUEwQjQ2QTBFODFCNTZBMEU4MkI2NkEwRTgwQzQ3QTBFODFDNTdBMEU4MkM2N0EwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNkQ3MzZBRDJCODA2MEVDMEMxQzYwRUMzRUQ3M0VBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MEJCRDNCRDcxQkJENDY4MDQ2Q0Y1NzgwNTdDRjY2MzM2NkNGNDczQjQ3Q0Y1NjMzNTZDRjY3M0I2N0NGMEI0OEEwRTgxQjU4QTBFODJCNjhBMEU4MEM0OUEwRTgxQzU5QTBFODJDNjlBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzRENzM0QUQyQjgwNjBFQzBDMUM2MEVDM0NENzNDQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNDgwMzRCRDNDODAzQ0JEMzNENzBCQkQzQkQ3MUJCRDQ4ODA0OENGNTk4MDU5Q0Y2ODMzNjhDRjQ5M0I0OUNGQjVGRjIwRUEwMDgwMDBFODU4MzM1OENGNjkzQjY5Q0Y3NEZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQ0RDCisvKiBUMkdaUyAqLworOjA0QTAwMDAwMDAwMDhBOThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgwQTQwNTBCRjJBNDA2MEJGMzI0MTUxQkYzQTQxNjFCRkMzNkJEMzZCMDA4QTk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzUzQTBFOEFERUUyMzlGMDBFMDUxMDQ5MEUyNjEwNDMxNDZCMUU4NTE0MUUwRUMzOTY3QjFFODAwMDQ0NkUyNzM2M0EwRTg2MTQxRTBFQzMxMDAzOTAwODU4MDE1RUExMDA0MjAwNDYxNTFFMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjUyQkYwRjUyQTBFODFBNDI2MkJGMUU1MTYwRUE3MzdCQzhFQzBFNjE2MEVBMzI0MDUwQkQyMjQwNjBCRDEyNDE1MUJEM0E0MTYxQkRCRjJGMEVCRDk3RTI3QjcyMzIyMDIyMjAxMjIwM0EyMDM1NDhCMUU4M0Q1OUIxRTg0NjMxNDZCRjU2MzE1NkJGQjNFMjJEOUYwMDgwMDBFODY2MzE2NkJGNDczOTQ3QkY1NzM5NTdCRjY3Mzk2N0JGNzY4MDA3RUEyNDQxMjBFOTM1MDAzRDAwMDBFMDJENzMzMzcyMENFMzhEMkYxRUJENDM3NUY4RUMzNTIwM0QyMDQzNDMyRERGNTM1MzJEREZBRTFFMEVCRDU4RTMzMzY2NDgzNTQ4QkY1ODM1NThCRjY4MzU2OEJGNDkzRDQ5QkY1OTNENTlCRjY5M0Q2OUJGNjM2MzJEREY0RDdERjhFQzU5RTMwMEUwQjgzODMzQkYyRDczMzA3NjE4M0E0MUU5M0Y1M0EwRTgwNTgwM0RFQTM3NDNBMEU4M0Q2M0EwRTg1MDcwRjhFQzJCNTAzQ0U5MUYwRkJDRTgwMDgwMDBFODU5NzhGOEVDMDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTFFMTI0MUU5MUEyMjQxRTk0NjM3NDZERjU2M0Y1NkRGMkI0MDNERTk2NjNENjZERjFEMzI0MUU5NjczRDY3REY0NzM3NDdERjU3M0Y1N0RGMkE0MDIwRTk1OTNGNTlERjE2MzAyMEU5NjkzRDY5REY0ODM3NDhERjU4M0Y1OERGNjgzRDY4REY0OTM3NDlERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGMEZDRjc0QzIzN0NGNzRDNDBBNDQ1NEIwMDI0NDY0QjAzRENGNzRDMDM0MzcyMEU5MzE1MzJGOUYzODBGMjBFOTM5RTUyQzlGM0MzRDIwRTkyQTQ0NTRCMjFBNDQ2NEIyMzE4MDNBRUEwQTIwMDIyMDBGQ0Y3NUMwMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTNEQ0Y3NUMyMzdDRjc1QzQzMTUzMkY5RkE2MEYyMEU5MzlFNTJDOUZBMzNEMjBFOTJBNDQ1NEI0MUE0NDY0QjQwQTQ1NTVCMDAyNDU2NUIwODg3MzVFRTkyQTIwMUEyMEEwMzcyMEU5MEEyMDAyMjAzMTUzMkY5RjNFMzA0RkU5MzlFNTJDOUYzRjM4NEZFOTMwNTAyRTlGM0EzMTRGRTkyQTQ1NTVCMjFBNDU2NUIyMEE0NTU1QjQwMjQ1NjVCNDM4MjEyQzlGM0IzOTRGRTkyQTIwMUEyMDBBMjAwMjIwMkE0NjU2QkYxQTQ2NjZCRjMxNTMyRjlGMzYzMTRGRTkzOUU1MkM5RjM3Mzk0RkU5MzA1MDJFOUZBNzMwNEZFOTM4MjEyQzlGQTgzODRGRTkwQTQ3NTdCRjAyNDc2N0JGMzE1MzJGOUZBNDMxNEZFOTM5RTUyQzlGQTUzOTRGRTkyQTQzNTNCRjFBNDM2M0JGMzA1MDJFOUZBMTMwNEZFOTM4MjEyQzlGQTIzODRGRTkwQTQ4NThCRjAyNDg2OEJGMzE1MzJGOUY4MDMxNTdFOTM5RTUyQzlGODEzOTU3RTkyQTQ5NTlCRjFBNDk2OUJGMzA1MDJFOUY4MjMwNTdFOTM4MjEyQzlGODMzODU3RTkzMTUzMkY5Rjg0MzE1RUU5MzlFNTJDOUY4NTM5NUVFOTg2NzY1N0U5OEEzNjIwRTk4Nzc3NTdFOThCM0VCRkVBODAzMDU3RTk4MTM4NTdFOTgyMzE1N0U5ODY3ODU3RTk4MzM5NTdFOTg3Nzk1N0U5MzAxRjVGRTk4QTM0MjBFOThCM0MyMEU5Mzc1MDYwQkQ1NzBEMjBFOTM1NTE2MUJEMkI1MDIwRTkxRDM3RTFFQTFFMzVFMUVBMDBFMDBFNzcyNDUxMjBFOTkyRkYyMEVBMTYwRTIwRTk1NzJFQkZFQTBCNDZBMEU4MUI1NkEwRTgyQjY2QTBFODBDNDdBMEU4MUM1N0EwRTgyQzY3QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM2RDczNkFEMkI4MDYwRUMwQzFDNjBFQzNFRDczRUFEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzY4MDM2QkQzRTgwM0VCRDMzRDcwQkJEM0JENzFCQkQ0NjgwNDZDRjU3ODA1N0NGNjYzMzY2Q0Y0NzNCNDdDRjU2MzM1NkNGNjczQjY3Q0YwQjQ4QTBFODFCNThBMEU4MkI2OEEwRTgwQzQ5QTBFODFDNTlBMEU4MkM2OUEwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNEQ3MzRBRDJCODA2MEVDMEMxQzYwRUMzQ0Q3M0NBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM0ODAzNEJEM0M4MDNDQkQzM0Q3MEJCRDNCRDcxQkJENDg4MDQ4Q0Y1OTgwNTlDRjY4MzM2OENGNDkzQjQ5Q0ZCMkZGMjBFQTAwODAwMEU4NTgzMzU4Q0Y2OTNCNjlDRjcwRkYyMEVBNTdDMEJGRUEwMDgwQTBFOTAwMDBEOEVDNDMKKy8qIFQyR1pTRiAqLworOjA0QzgwMDAwMDAwMDhBOThFOTAwODAwMEU4MDA4MEEwRTkwMDAwRDhFQ0ZGODBDMEU5MDA4MDAwRTgwQTQwNTBCRjJBNDA2MEJGMzI0MTUxQkYzQTQxNjFCRkMzNkJEMzZCMDA4QTk4RTk3MzdCQzhFQzk2RTI0MTA0N0I0M0EwRTg3MzUzQTBFOEFERUUyMzlGMDBFMDUxMDQ5MEUyNjEwNDMxNDZCMUU4NTE0MUUwRUMzOTY3QjFFODAwMDQ0NkUyNzM2M0EwRTg2MTQxRTBFQzMxMDAzOTAwOEE4MDE1RUExMDA0MjAwNDYxNTFFMEVDMkY0MTYwRUEzMTIwMzkyMDFGNDJBMEU4MkE0MjUyQkYwRjUyQTBFODFBNDI2MkJGMUU1MTYwRUE3MzdCQzhFQzBFNjE2MEVBMzI0MDUwQkQyMjQwNjBCRDEyNDE1MUJEM0E0MTYxQkRCRjJGMEVCRDk3RTI3QjcyMzIyMDIyMjAxMjIwM0EyMDM1NDhCMUU4M0Q1OUIxRTg0NjMxNDZCRjU2MzE1NkJGQjNFMjJEOUYwMDgwMDBFODY2MzE2NkJGNDczOTQ3QkY1NzM5NTdCRjY3Mzk2N0JGN0I4MDA3RUEyNDQxMjBFOTM1MDAzRDAwMDBFMDJENzMzMzcyMENFMzhEMkYxRUJENDM3NUY4RUMzNTIwM0QyMDQzNDMyRERGNTM1MzJEREZBRTFFMEVCRDU4RTMzMzY2NDgzNTQ4QkY1ODM1NThCRjY4MzU2OEJGNDkzRDQ5QkY1OTNENTlCRjY5M0Q2OUJGNjM2MzJEREY0RDdERjhFQzU5RTMwMEUwQjgzODMzQkYyRDczMzA3NjE4M0E0MUU5M0Y1M0EwRTgwNTgwM0RFQTM3NDNBMEU4M0Q2M0EwRTg1MDcwRjhFQzJCNTAzQ0U5MUYwRkJDRTgwMDgwMDBFODU5NzhGOEVDMDA4MDAwRTgxNUMwMjBFOTE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTFFMTI0MUU5MUEyMjQxRTk0NjM3NDZERjU2M0Y1NkRGMkI0MDNERTk2NjNENjZERjFEMzI0MUU5NjczRDY3REY0NzM3NDdERjU3M0Y1N0RGMkE0MDIwRTk1OTNGNTlERjE2MzAyMEU5NjkzRDY5REY0ODM3NDhERjU4M0Y1OERGNjgzRDY4REY0OTM3NDlERjMyMzIyRERGMjIyMjJEREYxMjEyMkRERjNBM0EyRERGMEZDRjc0QzIzN0NGNzRDNDBBNDQ1NEIwMDI0NDY0QjAzRENGNzRDMDM0MzcyMEU5MzE1MzJGOUYzODBGMjBFOTM5RTUyQzlGM0MzRDIwRTkyQTQ0NTRCMjFBNDQ2NEIyMzY4MDNBRUEwQTIwMDIyMDBGQ0Y3NUMwMkEyMDFBMjAzMDUwMkU5RjMyMzE1RkU5MzgyMTJDOUYzMzM5NUZFOTNEQ0Y3NUMyMzdDRjc1QzQzMTUzMkY5RkE2MEYyMEU5MzlFNTJDOUZBMzNEMjBFOTJBNDQ1NEI0MUE0NDY0QjQwQTQ1NTVCMDAyNDU2NUIwODg3MzVFRTkyQTIwMUEyMEEwMzcyMEU5MEEyMDAyMjAzMTUzMkY5RjNFMzA0RkU5MzlFNTJDOUYzRjM4NEZFOTMwNTAyRTlGM0EzMTRGRTkzODIxMkM5RjNCMzk0RkU5MkE0NTU1QjIxQTQ1NjVCMjBBNDU1NUI0MDI0NTY1QjQwRkNGNzVDNjJBMjAxQTIwQTczMDRGRTkwQTIwMDIyMDMxNTMyRjlGMzEwRjIwRTkzOUU1MkM5RkE4Mzg0RkU5MkE0NTU1QjYxQTQ1NjVCNjMwNTAyRTlGMzYzMTRGRTkzODIxMkM5RjM3Mzk0RkU5MDA4MDAwRTgyQTIwMUEyMDJBNDY1NkJGMUE0NjY2QkYzMTUzMkY5RkE0MzE0RkU5MzlFNTJDOUZBNTM5NEZFOTBBNDc1N0JGMDI0NzY3QkYzMTUzMkY5RkExMzA0RkU5MzlFNTJDOUZBMjM4NEZFOTJBNDM1M0JGMUE0MzYzQkYzMDUwMkU5RjM1MzE0RkU5MzgyMTJDOUYzOTM5NEZFOTBBNDg1OEJGMDI0ODY4QkYzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTJBNDk1OUJGMUE0OTY5QkYzMDUwMkU5RjgyMzA1N0U5MzgyMTJDOUY4MzM4NTdFOTMxNTMyRjlGODQzMTVFRTkzOUU1MkM5Rjg1Mzk1RUU5ODY3NjU3RTk4QTM2MjBFOTg3Nzc1N0U5OEIzRUJGRUE4MDMwNTdFOTgxMzg1N0U5ODIzMTU3RTk4Njc4NTdFOTgzMzk1N0U5ODc3OTU3RTkzMDFGNUZFOThBMzQyMEU5OEIzQzIwRTkzNzUwNjBCRDU3MEQyMEU5MzU1MTYxQkQyQjUwMjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMEU3NzI0NTEyMEU5OERGRjIwRUExNjBFMjBFOTU3MkVCRkVBMEI0NkEwRTgxQjU2QTBFODJCNjZBMEU4MEM0N0EwRTgxQzU3QTBFODJDNjdBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzZENzM2QUQyQjgwNjBFQzBDMUM2MEVDM0VENzNFQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzBCQkQzQkQ3MUJCRDQ2ODA0NkNGNTc4MDU3Q0Y2NjMzNjZDRjQ3M0I0N0NGNTYzMzU2Q0Y2NzNCNjdDRjBCNDhBMEU4MUI1OEEwRTgyQjY4QTBFODBDNDlBMEU4MUM1OUEwRTgyQzY5QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM0RDczNEFEMkI4MDYwRUMwQzFDNjBFQzNDRDczQ0FEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzQ4MDM0QkQzQzgwM0NCRDMzRDcwQkJEM0JENzFCQkQ0ODgwNDhDRjU5ODA1OUNGNjgzMzY4Q0Y0OTNCNDlDRkFERkYyMEVBMDA4MDAwRTg1ODMzNThDRjY5M0I2OUNGNkJGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUM1NgorLyogVDJHWlNBICovCis6MDRDODAwMDAwMDAwOEE5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODBBNDA1MEJGMkE0MDYwQkYzMjQxNTFCRjNBNDE2MUJGQzM2QkQzNkIwMDhBOThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNTNBMEU4QURFRTIzOUYwMEUwNTEwNDkwRTI2MTA0MzE0NkIxRTg1MTQxRTBFQzM5NjdCMUU4MDAwNDQ2RTI3MzYzQTBFODYxNDFFMEVDMzEwMDM5MDA4QTgwMTVFQTEwMDQyMDA0NjE1MUUwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNTJCRjBGNTJBMEU4MUE0MjYyQkYxRTUxNjBFQTczN0JDOEVDMEU2MTYwRUEzMjQwNTBCRDIyNDA2MEJEMTI0MTUxQkQzQTQxNjFCREJGMkYwRUJEOTdFMjdCNzIzMjIwMjIyMDEyMjAzQTIwMzU0OEIxRTgzRDU5QjFFODQ2MzE0NkJGNTYzMTU2QkZCM0UyMkQ5RjAwODAwMEU4NjYzMTY2QkY0NzM5NDdCRjU3Mzk1N0JGNjczOTY3QkY3QjgwMDdFQTI0NDEyMEU5MzUwMDNEMDAwMEUwMkQ3MzMzNzIwQ0UzOEQyRjFFQkQ0Mzc1RjhFQzM1MjAzRDIwNDM0MzJEREY1MzUzMkRERkFFMUUwRUJENThFMzMzNjY0ODM1NDhCRjU4MzU1OEJGNjgzNTY4QkY0OTNENDlCRjU5M0Q1OUJGNjkzRDY5QkY2MzYzMkRERjREN0RGOEVDNTlFMzAwRTBCODM4MzNCRjJENzMzMDc2MTgzQTQxRTkzRjUzQTBFODA1ODAzREVBMzc0M0EwRTgzRDYzQTBFODUwNzBGOEVDMkI1MDNDRTkxRjBGQkNFODAwODAwMEU4NTk3OEY4RUMwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MUUxMjQxRTkxQTIyNDFFOTQ2Mzc0NkRGNTYzRjU2REYyQjQwM0RFOTY2M0Q2NkRGMUQzMjQxRTk2NzNENjdERjQ3Mzc0N0RGNTczRjU3REYyQTQwMjBFOTU5M0Y1OURGMTYzMDIwRTk2OTNENjlERjQ4Mzc0OERGNTgzRjU4REY2ODNENjhERjQ5Mzc0OURGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREYwRkNGNzRDMjM3Q0Y3NEM0MEE0NDU0QjAwMjQ0NjRCMDNEQ0Y3NEMwMzQzNzIwRTkzMTUzMkY5RjM4MEYyMEU5MzlFNTJDOUYzQzNEMjBFOTJBNDQ1NEIyMUE0NDY0QjIzNjgwM0FFQTBBMjAwMjIwMEZDRjc1QzAyQTIwMUEyMDMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5M0RDRjc1QzIzN0NGNzVDNDMxNTMyRjlGQTYwRjIwRTkzOUU1MkM5RkEzM0QyMEU5MkE0NDU0QjQxQTQ0NjRCNDBBNDU1NUIwMDI0NTY1QjA4ODczNUVFOTJBMjAxQTIwQTAzNzIwRTkwQTIwMDIyMDMxNTMyRjlGM0UzMDRGRTkzOUU1MkM5RjNGMzg0RkU5MzA1MDJFOUYzQTMxNEZFOTM4MjEyQzlGM0IzOTRGRTkyQTQ1NTVCMjFBNDU2NUIyMEE0NTU1QjQwMjQ1NjVCNDBGQ0Y3NEM2MkEyMDFBMjBBNzMwNEZFOTBBMjAwMjIwMzE1MzJGOUY5QzBGMjBFOTM5RTUyQzlGQTgzODRGRTkyQTQ0NTRCNjFBNDQ2NEI2MzA1MDJFOUYzNjMxNEZFOTM4MjEyQzlGMzczOTRGRTkwMDgwMDBFODJBMjAxQTIwMkE0NjU2QkYxQTQ2NjZCRjMxNTMyRjlGQTQzMTRGRTkzOUU1MkM5RkE1Mzk0RkU5MEE0NzU3QkYwMjQ3NjdCRjMxNTMyRjlGQTEzMDRGRTkzOUU1MkM5RkEyMzg0RkU5MkE0MzUzQkYxQTQzNjNCRjMwNTAyRTlGOUQzMTRGRTkzODIxMkM5RjlFMzk0RkU5MEE0ODU4QkYwMjQ4NjhCRjMxNTMyRjlGODAzMTU3RTkzOUU1MkM5RjgxMzk1N0U5MkE0OTU5QkYxQTQ5NjlCRjMwNTAyRTlGODIzMDU3RTkzODIxMkM5RjgzMzg1N0U5MzE1MzJGOUY4NDMxNUVFOTM5RTUyQzlGODUzOTVFRTk4Njc2NTdFOThBMzYyMEU5ODc3NzU3RTk4QjNFQkZFQTgwMzA1N0U5ODEzODU3RTk4MjMxNTdFOTg2Nzg1N0U5ODMzOTU3RTk4Nzc5NTdFOTMwMUY1RkU5OEEzNDIwRTk4QjNDMjBFOTM3NTA2MEJENTcwRDIwRTkzNTUxNjFCRDJCNTAyMEU5MUQzN0UxRUExRTM1RTFFQTAwRTAwRTc3MjQ1MTIwRTk4REZGMjBFQTE2MEUyMEU5NTcyRUJGRUEwQjQ2QTBFODFCNTZBMEU4MkI2NkEwRTgwQzQ3QTBFODFDNTdBMEU4MkM2N0EwRTgwQjAwMUIwMDJCMDAwMEUwMEMwMDFDMDAyQzAwMDBFMDBCNjUxQjY1MkI2NTAwRTAwQzY1MUM2NTJDNjUwMEUwMEIxQjYwRUMzNkQ3MzZBRDJCODA2MEVDMEMxQzYwRUMzRUQ3M0VBRDJDODA2MEVDMEIyQkRFRTgxQjgwREVFODM2ODAzNkJEM0U4MDNFQkQzM0Q3MEJCRDNCRDcxQkJENDY4MDQ2Q0Y1NzgwNTdDRjY2MzM2NkNGNDczQjQ3Q0Y1NjMzNTZDRjY3M0I2N0NGMEI0OEEwRTgxQjU4QTBFODJCNjhBMEU4MEM0OUEwRTgxQzU5QTBFODJDNjlBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzRENzM0QUQyQjgwNjBFQzBDMUM2MEVDM0NENzNDQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNDgwMzRCRDNDODAzQ0JEMzNENzBCQkQzQkQ3MUJCRDQ4ODA0OENGNTk4MDU5Q0Y2ODMzNjhDRjQ5M0I0OUNGQURGRjIwRUEwMDgwMDBFODU4MzM1OENGNjkzQjY5Q0Y2QkZGMjBFQTU3QzBCRkVBMDA4MEEwRTkwMDAwRDhFQzIzCisvKiBUMkdaU0FGICovCis6MDRFODAwMDAwMDAwOEE5OEU5MDA4MDAwRTgwMDgwQTBFOTAwMDBEOEVDRkY4MEMwRTkwMDgwMDBFODBBNDA1MEJGMkE0MDYwQkYzMjQxNTFCRjNBNDE2MUJGQzM2QkQzNkIwMDhBOThFOTczN0JDOEVDOTZFMjQxMDQ3QjQzQTBFODczNTNBMEU4QURFRTIzOUYwMEUwNTEwNDkwRTI2MTA0MzE0NkIxRTg1MTQxRTBFQzM5NjdCMUU4MDAwNDQ2RTI3MzYzQTBFODYxNDFFMEVDMzEwMDM5MDA4RTgwMTVFQTEwMDQyMDA0NjE1MUUwRUMyRjQxNjBFQTMxMjAzOTIwMUY0MkEwRTgyQTQyNTJCRjBGNTJBMEU4MUE0MjYyQkYxRTUxNjBFQTczN0JDOEVDMEU2MTYwRUEzMjQwNTBCRDIyNDA2MEJEMTI0MTUxQkQzQTQxNjFCREJGMkYwRUJEOTdFMjdCNzIzMjIwMjIyMDEyMjAzQTIwMzU0OEIxRTgzRDU5QjFFODQ2MzE0NkJGNTYzMTU2QkZCM0UyMkQ5RjAwODAwMEU4NjYzMTY2QkY0NzM5NDdCRjU3Mzk1N0JGNjczOTY3QkY3RjgwMDdFQTI0NDEyMEU5MzUwMDNEMDAwMEUwMkQ3MzMzNzIwQ0UzOEQyRjFFQkQ0Mzc1RjhFQzM1MjAzRDIwNDM0MzJEREY1MzUzMkRERkFFMUUwRUJENThFMzMzNjY0ODM1NDhCRjU4MzU1OEJGNjgzNTY4QkY0OTNENDlCRjU5M0Q1OUJGNjkzRDY5QkY2MzYzMkRERjREN0RGOEVDNTlFMzAwRTBCODM4MzNCRjJENzMzMDc2MTgzQTQxRTkzRjUzQTBFODA1ODAzREVBMzc0M0EwRTgzRDYzQTBFODUwNzBGOEVDMkI1MDNDRTkxRjBGQkNFODAwODAwMEU4NTk3OEY4RUMwMDgwMDBFODE1QzAyMEU5MTVDMDIwRTkxNUMwMjBFOTE1QzAyMEU5MUUxMjQxRTkxQTIyNDFFOTQ2Mzc0NkRGNTYzRjU2REYyQjQwM0RFOTY2M0Q2NkRGMUQzMjQxRTk2NzNENjdERjQ3Mzc0N0RGNTczRjU3REYyQTQwMjBFOTU5M0Y1OURGMTYzMDIwRTk2OTNENjlERjQ4Mzc0OERGNTgzRjU4REY2ODNENjhERjQ5Mzc0OURGMzIzMjJEREYyMjIyMkRERjEyMTIyRERGM0EzQTJEREYwRkNGNzRDMjM3Q0Y3NEM0MEE0NDU0QjAwMjQ0NjRCMDNEQ0Y3NEMwMzQzNzIwRTkzMTUzMkY5RjM4MEYyMEU5MzlFNTJDOUYzQzNEMjBFOTJBNDQ1NEIyMUE0NDY0QjIzQTgwM0FFQTBBMjAwMjIwMEZDRjc1QzAyQTIwMUEyMDMwNTAyRTlGMzIzMTVGRTkzODIxMkM5RjMzMzk1RkU5M0RDRjc1QzIzN0NGNzVDNDMxNTMyRjlGQTYwRjIwRTkzOUU1MkM5RkEzM0QyMEU5MkE0NDU0QjQxQTQ0NjRCNDBBNDU1NUIwMDI0NTY1QjA4ODczNUVFOTJBMjAxQTIwQTAzNzIwRTkwQTIwMDIyMDMxNTMyRjlGM0UzMDRGRTkzOUU1MkM5RjNGMzg0RkU5MzA1MDJFOUYzQTMxNEZFOTM4MjEyQzlGM0IzOTRGRTkyQTQ1NTVCMjFBNDU2NUIyMEE0NTU1QjQwMjQ1NjVCNDBGQ0Y3NEM2MkEyMDFBMjBBNzMwNEZFOTBBMjAwMjIwMzE1MzJGOUY5QzBGMjBFOTM5RTUyQzlGQTgzODRGRTkyQTQ0NTRCNjFBNDQ2NEI2MzA1MDJFOUYzNjMxNEZFOTM4MjEyQzlGMzczOTRGRTkwQTQ1NTVCNjAyNDU2NUI2M0RDRjc1QzYyQTIwMUEyMDJBNDY1NkJGMUE0NjY2QkYzMTUzMkY5RkE0MzE0RkU5MzlFNTJDOUZBNTM5NEZFOTMxM0QyMEU5MEEyMDAyMjAwQTQ3NTdCRjAyNDc2N0JGMzA1MDJFOUZBMTMwNEZFOTM4MjEyQzlGQTIzODRGRTkzMTUzMkY5RjlEMzE0RkU5MzlFNTJDOUY5RTM5NEZFOTJBNDM1M0JGMUE0MzYzQkYzMDUwMkU5RjM1MzA0RkU5MzgyMTJDOUYzOTM4NEZFOTBBNDg1OEJGMDI0ODY4QkYzMTUzMkY5RjgwMzE1N0U5MzlFNTJDOUY4MTM5NTdFOTJBNDk1OUJGMUE0OTY5QkYzMDUwMkU5RjgyMzA1N0U5MzgyMTJDOUY4MzM4NTdFOTMxNTMyRjlGODQzMTVFRTkzOUU1MkM5Rjg1Mzk1RUU5ODY3NjU3RTk4QTM2MjBFOTg3Nzc1N0U5OEIzRUJGRUE4MDMwNTdFOTgxMzg1N0U5ODIzMTU3RTk4Njc4NTdFOTgzMzk1N0U5ODc3OTU3RTkzMDFGNUZFOThBMzQyMEU5OEIzQzIwRTkzNzUwNjBCRDU3MEQyMEU5MzU1MTYxQkQyQjUwMjBFOTFEMzdFMUVBMUUzNUUxRUEwMEUwMEU3NzI0NTEyMEU5ODlGRjIwRUExNjBFMjBFOTU3MkVCRkVBMEI0NkEwRTgxQjU2QTBFODJCNjZBMEU4MEM0N0EwRTgxQzU3QTBFODJDNjdBMEU4MEIwMDFCMDAyQjAwMDBFMDBDMDAxQzAwMkMwMDAwRTAwQjY1MUI2NTJCNjUwMEUwMEM2NTFDNjUyQzY1MDBFMDBCMUI2MEVDMzZENzM2QUQyQjgwNjBFQzBDMUM2MEVDM0VENzNFQUQyQzgwNjBFQzBCMkJERUU4MUI4MERFRTgzNjgwMzZCRDNFODAzRUJEMzNENzBCQkQzQkQ3MUJCRDQ2ODA0NkNGNTc4MDU3Q0Y2NjMzNjZDRjQ3M0I0N0NGNTYzMzU2Q0Y2NzNCNjdDRjBCNDhBMEU4MUI1OEEwRTgyQjY4QTBFODBDNDlBMEU4MUM1OUEwRTgyQzY5QTBFODBCMDAxQjAwMkIwMDAwRTAwQzAwMUMwMDJDMDAwMEUwMEI2NTFCNjUyQjY1MDBFMDBDNjUxQzY1MkM2NTAwRTAwQjFCNjBFQzM0RDczNEFEMkI4MDYwRUMwQzFDNjBFQzNDRDczQ0FEMkM4MDYwRUMwQjJCREVFODFCODBERUU4MzQ4MDM0QkQzQzgwM0NCRDMzRDcwQkJEM0JENzFCQkQ0ODgwNDhDRjU5ODA1OUNGNjgzMzY4Q0Y0OTNCNDlDRkE5RkYyMEVBMDA4MDAwRTg1ODMzNThDRjY5M0I2OUNGNjdGRjIwRUE1N0MwQkZFQTAwODBBMEU5MDAwMEQ4RUNFRQorOjAwMDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcjEyOC9yMTI4X2NjZS5iaW4uaWhleCBiL2Zpcm13YXJlL3IxMjgvcjEyOF9jY2UuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzMTMxNQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3IxMjgvcjEyOF9jY2UuYmluLmloZXgKQEAgLTAsMCArMSwxMjkgQEAKKzoxMDAwMDAwMDAwMDAwMDAwMTA4MDM4MDAwMDAwMDAwMDEwMDAzODAwRTAKKzoxMDAwMTAwMDAwMDAwMDAyMDAwMDAwOEUwMDAwMDAwMjAwMDAwMDkxQkQKKzoxMDAwMjAwMDAwMDAwMDAwNDAyRTI0MjMwMDAwMDAwMDYwNjIxMjRGRjgKKzoxMDAwMzAwMDAwMDAwMDAwMkUyQjU5NkQwMDAwMDAwMDc2Nzc3NTNFMDEKKzoxMDAwNDAwMDAwMDAwMDAwODk4OTg0ODIwMDAwMDAwMDIzQkM4QjBEMjEKKzoxMDAwNTAwMDAwMDAwMDAwMjMyMzIzMjMwMDAwMDAwMDIzOERBQkI0MDUKKzoxMDAwNjAwMDAwMDAwMDAwMjMyMzIzMjMwMDAwMDAwMTAwQjAyODAwMkIKKzoxMDAwNzAwMDAwMDAwMDAxMDAwMzI4MDAwMDAwMDAwMTAwMDRDMDAwOEYKKzoxMDAwODAwMDAwMDAwMDAxMDAwMzA4MDAwMDAwMDAwMjM2NjAzMDBFOEUKKzoxMDAwOTAwMDAwMDAwMDBCMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDAwQTAwMDAwMDAwMDAxMDIwMDE1MUQwMDAwMDAwMTAwMDAxRDBFRUYKKzoxMDAwQjAwMDAwMDAwMDAxMDAwMDM5RDkwMDAwMDAwMTAwMDAxOUQ3M0MKKzoxMDAwQzAwMDAwMDAwMDBDMDAwMDAwMUMwMDAwMDAwMTAwMDAxOUQ2MTgKKzoxMDAwRDAwMDAwMDAwMDBDMDAwMDAwMUMwMDAwMDAwMjAwMDAwMDE3REYKKzoxMDAwRTAwMDAwMDAwMDBCMDEyMDAwMDAwMDAwMDAwMDAxMDAzNThBMjQKKzoxMDAwRjAwMDAwMDAwMDAxMDAwNjQwMDAwMDAwMDAwOTAwMDAwMDFFOTIKKzoxMDAxMDAwMDAwMDAwMDAxMDhEMDE1QjQwMDAwMDAxMDE5MTAxMDAwMDQKKzoxMDAxMTAwMDAwMDAwMDAzMDAwMDIwMDAwMDAwMDAwMDAwMDAyODAwOTQKKzoxMDAxMjAwMDAwMDAwMDAxMDAwMzA4MDAwMDAwMDAwMTAwMDAzRDBFNzcKKzoxMDAxMzAwMDAwMDAwMDAxMDAwMEM4MDAwMDAwMDAwQTAwMDA4ODJBM0EKKzoxMDAxNDAwMDAwMDAwMDA5MDAwMDAwMkEwMDAwMDAwMTAyMDAxNTBGNTUKKzoxMDAxNTAwMDAwMDAwMDAyMDAwMDI4MjQwMDAwMDAwMTAwMDAzRDY1QUUKKzoxMDAxNjAwMDAwMDAwMDAxMDAwMDNENjYwMDAwMDAwMjAwMDAwMDJCQkUKKzoxMDAxNzAwMDAwMDAwMDAxMDBGMzJEQjQwMDAwMDAwMTIyMDBEOEJGRjAKKzoxMDAxODAwMDAwMDAwMDAxMDBFMDg4QkYwMDAwMDAwQzEzMzMzODM3ODYKKzoxMDAxOTAwMDAwMDAwMDAxMDIwNjE1NjUwMDAwMDAwQzAwMDAwMDM3OTkKKzoxMDAxQTAwMDAwMDAwMDAxMDIwMDE1NjQwMDAwMDAwMTAwMDAzRDY2MkYKKzoxMDAxQjAwMDAwMDAwMDAyMDAwMDAwMkUwMDAwMDAwNDAwMjAwODNBQTkKKzoxMDAxQzAwMDAwMDAwMDAxMDAwODA4MDAwMDAwMDAwMTAwMDZDMEZGNTgKKzoxMDAxRDAwMDAwMDAwMDA0MDA0MDAwM0QwMDAwMDAwMTAwMDdDODAwQ0UKKzoxMDAxRTAwMDAwMDAwMDAxMDAwNzAwRkYwMDAwMDAwMzAwMDAwMDAwMDUKKzoxMDAxRjAwMDAwMDAwMDBDMDAwMDAwNUMwMDAwMDAwMjAwMDAwMDJFNjcKKzoxMDAyMDAwMDAwMDAwMDBDMDAwMDAwQjAwMDAwMDAwMTAwMDAzRDc2N0UKKzoxMDAyMTAwMDAwMDAwMDAxMDAwMzI4MDAwMDAwMDAwMTAwMDA0ODAwNjkKKzoxMDAyMjAwMDAwMDAwMDAxMDAwMjA4MDAwMDAwMDAwMTA2MDAxRDBFOTEKKzoxMDAyMzAwMDAwMDAwMDAxMDAwMjQ4MDAwMDAwMDAwMTAwMDI4ODAwRTgKKzoxMDAyNDAwMDAwMDAwMDAxMDBGM0M1RjgwMDAwMDAwMTAwMTAwMDAwRUMKKzoxMDAyNTAwMDAwMDAwMDA2MDAzMDAwNEUwMDAwMDAwMTAwMDAzRDYzNzkKKzoxMDAyNjAwMDAwMDAwMDEwODAzMDNERjAwMDAwMDAwMjEwMDAzODQzMTQKKzoxMDAyNzAwMDAwMDAwMDAyMDAwMDI4NDMwMDAwMDAwQzAwMDAwMEIwNTUKKzoxMDAyODAwMDAwMDAwMDAxMDAwMDNENzYwMDAwMDAwMTAwMDAzRDc3MDUKKzoxMDAyOTAwMDAwMDAwMDAxMDAwMDNEMEUwMDAwMDAwMTAwMDAzRDBGQzUKKzoxMDAyQTAwMDAwMDAwMDAxMDA1MDI4MDAwMDAwMDAwNjAwMzAwMDUyNEQKKzoxMDAyQjAwMDAwMDAwMDEwODAzMDNERjAwMDAwMDAwMTAwMDAzREY4MUIKKzoxMDAyQzAwMDAwMDAwMDAyMDAwMDAwNTIwMDAwMDAwMTAwMDUzRDBFODkKKzoxMDAyRDAwMDAwMDAwMDAxMDAxMDNEMEYwMDAwMDAwMjAwMzAwMDU1M0EKKzoxMDAyRTAwMDAwMDAwMDAxMDAwMDNENzAwMDAwMDAwMTAwMDAxRTg5QjgKKzoxMDAyRjAwMDAwMDAwMDAxMDAwMDNENzEwMDAwMDAwMzAwMDAzRDcyOUQKKzoxMDAzMDAwMDAwMDAwMDBDMDAwMDAwNUMwMDAwMDAwMjAwMDAwMDYyMjEKKzoxMDAzMTAwMDAwMDAwMDAxMDAwMDNGMjgwMDAwMDAwMTAwMDAzRjI3MEUKKzoxMDAzMjAwMDAwMDAwMDAxMDAwMDNFODIwMDAwMDAwMTAwMDAzRTg4NDUKKzoxMDAzMzAwMDAwMDAwMDAxMDAwMDNFNjYwMDAwMDAwMTAwMDAzRTY3NzIKKzoxMDAzNDAwMDAwMDAwMDAxMDAwMDNFNzYwMDAwMDAwMTAwMDAzRTY4NTEKKzoxMDAzNTAwMDAwMDAwMDAxMDAwMDNFNjkwMDAwMDAwMTAwMDAzRTZDNEEKKzoxMDAzNjAwMDAwMDAwMDAwMDAwMDNFNkQwMDAwMDAwMTAwMDAyODAwQjkKKzoxMDAzNzAwMDAwMDAwMDAxMDA1MDI4MDAwMDAwMDAwMTAwMDAzRDY4NUUKKzoxMDAzODAwMDAwMDAwMDAxMDAwMzA4MDAwMDAwMDAwNjAwMDAwMDZFRUQKKzoxMDAzOTAwMDAwMDAwMDAxMDAwMkMwMDAwMDAwMDAwMTA2MzAzRDYyQzQKKzoxMDAzQTAwMDAwMDAwMDAyMDAwMDAwNzAwMDAwMDAwMjAwMzAwMDZGM0EKKzoxMDAzQjAwMDAwMDAwMDAwMjAwMDM4QzAwMDAwMDAwMTAwMDFDMEMwQTMKKzoxMDAzQzAwMDAwMDAwMDBFMDAwMDAwN0QwMDAwMDAwQzAwMDMyODdGRUMKKzoxMDAzRDAwMDAwMDAwMDAxMDIwMDE1QkIwMDAwMDAwQzAwMDMwODgwQjMKKzoxMDAzRTAwMDAwMDAwMDAwMDIwMDNEQkMwMDAwMDAwMTAwMDAzREJCMTkKKzoxMDAzRjAwMDAwMDAwMDAwMDAwMDNEQkMwMDAwMDAwMzAwMDQ4MDAwN0QKKzoxMDA0MDAwMDAwMDAwMDAxMDAwNDgwMDAwMDAwMDAwMzAwMDZDMDAyOUMKKzoxMDA0MTAwMDAwMDAwMDAxMDBCMDI4MDAwMDAwMDAwMDMwNjAzODAwM0IKKzoxMDA0MjAwMDAwMDAwMDAxMDBDMDI4MDAwMDAwMDAwMTAwQjAwODAwMkEKKzoxMDA0MzAwMDAwMDAwMDAxMDBENjAwMDAwMDAwMDAwNzEyODAxMDg2QjYKKzoxMDA0NDAwMDAwMDAwMDAwMDAwMDI4MDAwMDAwMDAwMTAwMDAzOUNDN0UKKzoxMDA0NTAwMDAwMDAwMDAxMDAwMDM5Q0QwMDAwMDAwMTAwMDAzOUM5OTIKKzoxMDA0NjAwMDAwMDAwMDAxMDAwMDM5Q0EwMDAwMDAwMDAwMDAzOUNCODQKKzoxMDA0NzAwMDAwMDAwMDAxMTAwM0I4MDAwMDAwMDAwMTAwOTAwMDAwMUYKKzoxMDA0ODAwMDAwMDAwMDAxMTAwMDM4MDAwMDAwMDAwMTAwMDMwODAwMTcKKzoxMDA0OTAwMDAwMDAwMDAxMDA5MDNEMUIwMDAwMDAwMTQwMjAzRDBBQ0IKKzoxMDA0QTAwMDAwMDAwMDAxNDAyMDNEMEIwMDAwMDAwMTAwMDg4MDAwMUEKKzoxMDA0QjAwMDAwMDAwMDAxMDAwMUMwQzAwMDAwMDAwRTAwMDAwMDlGMEQKKzoxMDA0QzAwMDAwMDAwMDBDMDAwMzA4ODAwMDAwMDAwMTQyMjAzREJEMzgKKzoxMDA0RDAwMDAwMDAwMDBDMDAwMzA4N0YwMDAwMDAwMTQyMDAzREJCNEIKKzoxMDA0RTAwMDAwMDAwMDBDMDAwMzA4ODAwMDAwMDAwMTQyMjAzREJDMTkKKzoxMDA0RjAwMDAwMDAwMDAyMDAwMDAwQTIwMDAwMDAwMTQwMjAzREJERkQKKzoxMDA1MDAwMDAwMDAwMDAxNDAwMDNEQkIwMDAwMDAwMTQwMjAzREJDNTgKKzoxMDA1MTAwMDAwMDAwMDAxMDAwODQwMDAwMDAwMDAwMTAwQTAwMDAwRjEKKzoxMDA1MjAwMDAwMDAwMDA2MDAzMDAwQTYwMDAwMDAxMDEwNjAzODAwMzcKKzoxMDA1MzAwMDAwMDAwMDA5MDAwMDAwQTgwMDAwMDAwMzAwNDAwMDAwQzcKKzoxMDA1NDAwMDAwMDAwMDAzMDA0MDNEMUQwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDA1NTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwRTAwMDAwMEFFREUKKzoxMDA1NjAwMDAwMDAwMDAxMDAwMUMwQTkwMDAwMDAwMTAyMDAxNUM3NDEKKzoxMDA1NzAwMDAwMDAwMDBDMDAwMDAwQjAwMDAwMDAwMDAwMDAyODAwOTcKKzoxMDA1ODAwMDAwMDAwMDAxMDAwMUMwQUEwMDAwMDAwMTAyMDAxNUQyMTUKKzoxMDA1OTAwMDAwMDAwMDAxMDAwMUMwQTkwMDAwMDAwMzAyMDAxNUM3MEYKKzoxMDA1QTAwMDAwMDAwMDAxMDAwMDNFODgwMDAwMDAwMTAwMDFDMEJBMDgKKzoxMDA1QjAwMDAwMDAwMDAxMDIwMDE3MjgwMDAwMDAwMTAwMDFDMEJCN0MKKzoxMDA1QzAwMDAwMDAwMDAxMDIwMDE2NUEwMDAwMDAwMDAwMDAzRTVCMUYKKzoxMDA1RDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAxMDAwMEEKKzoxMDA1RTAwMDAwMDAwMDAxMDAwNjQwMEIwMDAwMDAwOTAwMDAwMEJDRjQKKzoxMDA1RjAwMDAwMDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMDA2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMDA2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDA2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKKzoxMDA2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMDA2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDA2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMDA2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDA2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDA2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMDA2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKKzoxMDA2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMDA2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMDA2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMDA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDA3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMDA3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDA3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUjEwMF9jcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SMTAwX2NwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTY0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUjEwMF9jcC5iaW4uaWhleApAQCAtMCwwICsxLDEzMCBAQAorOjEwMDAwMDAwMDAwMDAwMDAyMTAwNzAwMDAwMDAwMDAwMjAwMDcwMDBDRgorOjEwMDAxMDAwMDAwMDAwMDQwMDAwMDBCNDAwMDAwMDA0MDAwMDAwQjg2QworOjEwMDAyMDAwMDAwMDAwMDA2RjVCNEQ0QzAwMDAwMDAwNEM0QzQyN0YxNAorOjEwMDAzMDAwMDAwMDAwMDA1QjU2OEE5MjAwMDAwMDAwNENBMDlDNkRGRQorOjEwMDA0MDAwMDAwMDAwMDBBRDRDNEM0QzAwMDAwMDAwNENFMUFGM0QwNgorOjEwMDA1MDAwMDAwMDAwMDBEOEFGQUZBRjAwMDAwMDAwRDY0QzRDREM3MQorOjEwMDA2MDAwMDAwMDAwMDA0Q0QxMEQxMDAwMDAwMDE2MDAwRjAwMDAzMQorOjEwMDA3MDAwMDAwMDAwMDAzNjJGMjQyRDAwMDAwMDA0MDAwMDAwMTJCNAorOjEwMDA4MDAwMDAwMDAwMTYwMDBGMDAwMDAwMDAwMDAwMzYyRjI4MkQ5MQorOjEwMDA5MDAwMDAwMDAwMDIwMDAzODBFNzAwMDAwMDAyMDQwMDJDOTcyQgorOjEwMDBBMDAwMDAwMDAwMTYwMDBGMDAwMTAwMDAwMDAwMzMzQTM3MzA1NgorOjEwMDBCMDAwMDAwMDAwMDIwMDAwNzdFRjAwMDAwMDAyMDAwNjEwMDBDMAorOjEwMDBDMDAwMDAwMDAwMUEwMDAwMDAyMTAwMDAwMDFFMDAwMDQwMDA5NworOjEwMDBEMDAwMDAwMDAwMDIwMDA2MTAwMDAwMDAwMDFBMDAwMDAwMjFDRAorOjEwMDBFMDAwMDAwMDAwMUUwMDAwNDAwMDAwMDAwMDAyMDAwNjEwMDA5QQorOjEwMDBGMDAwMDAwMDAwMUEwMDAwMDAyMTAwMDAwMDFFMDAwMDQwMDA2NworOjEwMDEwMDAwMDAwMDAwMDQwMDAwMDAxNzAwMDAwMDAyMDAwMzgwMkIyNAorOjEwMDExMDAwMDAwMDAwMDIwNDAwNjdFMDAwMDAwMDA0MDAwMDAwMTc3NworOjEwMDEyMDAwMDAwMDAwMDIwMDAwNzdFMDAwMDAwMDAyMDAwNjUwMDAxRQorOjEwMDEzMDAwMDAwMDAwMDIwMDAwMzdFMTAwMDAwMDA2MDQwMDY3RTE1MworOjEwMDE0MDAwMDAwMDAwMDIwMDAwNzdFMDAwMDAwMDAyMDAwMDc3RTFGQworOjEwMDE1MDAwMDAwMDAwMDYwMDAwNzdFMTAwMDAwMDAwRkZGRkZGRkY0NQorOjEwMDE2MDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAyMDAwMzgwMkJDRgorOjEwMDE3MDAwMDAwMDAwMDYwNDAwNjdFMDAwMDAwMDAyMDAwMDc2NzU0MQorOjEwMDE4MDAwMDAwMDAwMDIwMDAwNzY3NjAwMDAwMDAyMDAwMDc2Nzc5MgorOjEwMDE5MDAwMDAwMDAwMDYwMDAwNzY3ODAwMDAwMDAyMDAwMzgwMkNCQQorOjEwMDFBMDAwMDAwMDAwMDIwNDAwMjY3NjAwMDAwMDAyMDAwMDc2NzdCRQorOjEwMDFCMDAwMDAwMDAwMDYwMDAwNzY3ODAwMDAwMDE4MDAwMDAwMkYwNAorOjEwMDFDMDAwMDAwMDAwMTgwMDAwMDAyRjAwMDAwMDA2MDAwMDAwMDBFMgorOjEwMDFEMDAwMDAwMDAwMTgwMDAwMDAzMDAwMDAwMDE4MDAwMDAwMzA4RgorOjEwMDFFMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDAwMDAyMDE2MDUwMDA1NgorOjEwMDFGMDAwMDAwMDAwMDIwMDA2NTAwMDAwMDAwMDAyMDAwOTgwMDAxQworOjEwMDIwMDAwMDAwMDAwMDIwMDA2MTAwMDAwMDAwMDA0NjRDMDYwM0UxMAorOjEwMDIxMDAwMDAwMDAwMDIwMDAzODBFNjAwMDAwMDAyMDQwMDI1QzU4MworOjEwMDIyMDAwMDAwMDAwMTYwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMDIzMDAwMDAwMDAwMDIwNDAwMjUxRDAwMDAwMDAyMDAwMDc1ODA3RgorOjEwMDI0MDAwMDAwMDAwMDIwMDA2NzU4MTAwMDAwMDAyMDQwMDI1ODAwNQorOjEwMDI1MDAwMDAwMDAwMDIwMDA2NzU4MTAwMDAwMDA0MDAwMDAwNDk1MworOjEwMDI2MDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAyMDAwMzgwRTZEMworOjEwMDI3MDAwMDAwMDAwMDIwNDAwMjVDNTAwMDAwMDAyMDAwNjEwMDA3NgorOjEwMDI4MDAwMDAwMDAwMDIwMDAwNzUwRTAwMDAwMDAyMDAwMTkwMDA1NgorOjEwMDI5MDAwMDAwMDAwMTQwMDAxMTA1NTAwMDAwMDEyMDAwMDAwNTU3RAorOjEwMDJBMDAwMDAwMDAwMDIwNDAwMjUwRjAwMDAwMDA0MDAwMDUwNEY3MQorOjEwMDJCMDAwMDAwMDAwMDIwMDAzODBFNjAwMDAwMDAyMDQwMDI1QzVFMworOjEwMDJDMDAwMDAwMDAwMDIwMDAwNzU2NTAwMDAwMDAyMDAwMDc1NjY3NQorOjEwMDJEMDAwMDAwMDAwMDQwMDAwMDA1ODAwMDAwMDAyMDAwMzgwRTY1NworOjEwMDJFMDAwMDAwMDAwMDIwNDAwMjVDNTAwMDAwMDAyMDFFNjU1QjQyQworOjEwMDJGMDAwMDAwMDAwMDI0NDAxQjBFNDAwMDAwMDAyMDFDMTEwRTQ2QgorOjEwMDMwMDAwMDAwMDAwMTgyNjY2NzA2NjAwMDAwMDAyMDQwQzI1NjVENworOjEwMDMxMDAwMDAwMDAwMTgwMDAwMDA2NjAwMDAwMDAyMDQwMDI1NjREMAorOjEwMDMyMDAwMDAwMDAwMDIwMDAwNzU2NjAwMDAwMDA0MDAwMDAwNUQ4RgorOjEwMDMzMDAwMDAwMDAwMDgwMDQwMTA2OTAwMDAwMDAyMDAxMDEwMDBEQQorOjEwMDM0MDAwMDAwMDAwMDIwMDBEODBGRjAwMDAwMDA4MDA4MDAwNkMyQgorOjEwMDM1MDAwMDAwMDAwMDIwMDBGOTAwMDAwMDAwMDAyMDAwRTAwRkZFRAorOjEwMDM2MDAwMDAwMDAwMDYwMDAwMDAwMDAwMDAwMDE4MDAwMDAwOEZFMAorOjEwMDM3MDAwMDAwMDAwMDQwMDAwMDA1QjAwMDAwMDAyMDAwMzgwRTZCMworOjEwMDM4MDAwMDAwMDAwMDIwNDAwMjVDNTAwMDAwMDAyMDAwMDc1NzY5MAorOjEwMDM5MDAwMDAwMDAwMDIwMDA2NTAwMDAwMDAwMDAyMDAwMDkwMDA3MworOjEwMDNBMDAwMDAwMDAwMDIwMDA0MTAwMDAwMDAwMDAyMEMwMDM1MEVFNgorOjEwMDNCMDAwMDAwMDAwMDIwMDA0OTAwMDAwMDAwMDAyMDAwNTEwMDA5MAorOjEwMDNDMDAwMDAwMDAwMDIwMUU3ODVGODAwMDAwMDAyMDAyMDAwMDBBNAorOjEwMDNEMDAwMDAwMDAwMEMwMDYwMDA3RTAwMDAwMDAyMDAwMDc1NjM1OQorOjEwMDNFMDAwMDAwMDAwMjEwMDYwNzVGMDAwMDAwMDA0MjAwMDcwNzMyMAorOjEwMDNGMDAwMDAwMDAwMDQwMDAwNTA3MzAwMDAwMDAyMDAwMzgwRTZDQgorOjEwMDQwMDAwMDAwMDAwMDIwNDAwMjVDNTAwMDAwMDAyMDAwMDc1NzYwRgorOjEwMDQxMDAwMDAwMDAwMDIwMDAwNzU3NzAwMDAwMDAyMDAwMDc1MEU2OQorOjEwMDQyMDAwMDAwMDAwMDIwMDAwNzUwRjAwMDAwMDAyMDBBMDUwMDA1NAorOjEwMDQzMDAwMDAwMDAwMEMwMDYwMDA4MzAwMDAwMDIxMDA2MDc1RjBFNworOjEwMDQ0MDAwMDAwMDAwMDIwMDAwNzVGODAwMDAwMDA0MDAwMDAwODNCNgorOjEwMDQ1MDAwMDAwMDAwMDIwMDBBNzUwRTAwMDAwMDAyMDAwMzgwRTZBMgorOjEwMDQ2MDAwMDAwMDAwMDIwNDAwMjVDNTAwMDAwMDAyMDAyMDc1MEZGNgorOjEwMDQ3MDAwMDAwMDAwMDQwMDYwMDA4NjAwMDAwMDAyMDAwMDc1NzBBQgorOjEwMDQ4MDAwMDAwMDAwMDIwMDAwNzU3MTAwMDAwMDA2MDAwMDc1NzI5NworOjEwMDQ5MDAwMDAwMDAwMDIwMDAzODBFNjAwMDAwMDAyMDQwMDI1QzUwMQorOjEwMDRBMDAwMDAwMDAwMDIwMDAwNTAwMDAwMDAwMDAyMDBBMDUwMDAwOAorOjEwMDRCMDAwMDAwMDAwMDIwMDAwNzU2ODAwMDAwMDAyMDAwNjEwMDA0NQorOjEwMDRDMDAwMDAwMDAwMEMwMDAwMDA5NTAwMDAwMDAyMDAwNTgwMDAwNAorOjEwMDREMDAwMDAwMDAwMDIwQzYwNzU2MjAwMDAwMDA0MDAwMDAwOTczQworOjEwMDRFMDAwMDAwMDAwMDIwMDAzODBFNjAwMDAwMDAyMDQwMDI1QzVCMQorOjEwMDRGMDAwMDAwMDAwMDQwMDYwMDA5NjAwMDAwMDAwNDAwMDcwRTU2RAorOjEwMDUwMDAwMDAwMDAwMDIwMDAzODBFNjAwMDAwMDAyMDQwMDI1QzU5MAorOjEwMDUxMDAwMDAwMDAwMDIwMDAzODBFNTAwMDAwMDFDMDAwMDAwQThBRAorOjEwMDUyMDAwMDAwMDAwMTgwMDA2NTBBQTAwMDAwMDAyMDQwMDI1QkJDRAorOjEwMDUzMDAwMDAwMDAwMTgwMDA2MTBBQjAwMDAwMDAwMDQwMDc1QkNBRAorOjEwMDU0MDAwMDAwMDAwMDIwMDAwNzVCQjAwMDAwMDAwMDAwMDc1QkM0OAorOjEwMDU1MDAwMDAwMDAwMDYwMDA5MDAwMDAwMDAwMDAyMDAwOTAwMDA4MQorOjEwMDU2MDAwMDAwMDAwMDYwMDBEODAwMjAwMDAwMDAyMDAwMDc4MzI0QQorOjEwMDU3MDAwMDAwMDAwMDIwMDAwNTAwMDAwMDAwMDAyMDAwMzgwRTdCRAorOjEwMDU4MDAwMDAwMDAwMDIwNDAwMkM5NzAwMDAwMDAyMDAwMDc4MjAwOAorOjEwMDU5MDAwMDAwMDAwMDIwMDAwNzgyMTAwMDAwMDAwMDAwMDc4MDA0OAorOjEwMDVBMDAwMDAwMDAwMDIwMTIwMDAwMDAwMDAwMDAyMjAwNzcwMDA4RgorOjEwMDVCMDAwMDAwMDAwMDIwMTIwMDAwMDAwMDAwMDAyMjAwMDcwMDA4NgorOjEwMDVDMDAwMDAwMDAwMDIwMDA2MTAwMDAwMDAwMDAyMDEyMDc1MUI2MAorOjEwMDVEMDAwMDAwMDAwMDI4MDQwNzUwQTAwMDAwMDAyODA0MDc1MEI5OAorOjEwMDVFMDAwMDAwMDAwMDIwMDExMDAwMDAwMDAwMDAyMDAwMzgwRTU4RQorOjEwMDVGMDAwMDAwMDAwMUMwMDAwMDBDNjAwMDAwMDE4MDAwNjEwQUI0MAorOjEwMDYwMDAwMDAwMDAwMDI4NDQwNzVCRDAwMDAwMDE4MDAwNjEwQUExQQorOjEwMDYxMDAwMDAwMDAwMDI4NDAwNzVCQjAwMDAwMDE4MDAwNjEwQUI0QgorOjEwMDYyMDAwMDAwMDAwMDI4NDQwNzVCQzAwMDAwMDA0MDAwMDAwQzkwNgorOjEwMDYzMDAwMDAwMDAwMDI4MDQwNzVCRDAwMDAwMDAyODAwMDc1QkIxNAorOjEwMDY0MDAwMDAwMDAwMDI4MDQwNzVCQzAwMDAwMDAyMDAxMDgwMDAyNQorOjEwMDY1MDAwMDAwMDAwMDIwMTQwMDAwMDAwMDAwMDBDMDA2MDAwQ0QxRQorOjEwMDY2MDAwMDAwMDAwMjAyMEMwNzAwMDAwMDAwMDEyMDAwMDAwQ0YzOQorOjEwMDY3MDAwMDAwMDAwMDYwMDgwMDAwMDAwMDAwMDA2MDA4MDc1MUREQworOjEwMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDc3NUM5NQorOjEwMDY5MDAwMDAwMDAwMDIwMEEwNTAwMDAwMDAwMDAyMDA2NjEwMDBGMAorOjEwMDZBMDAwMDAwMDAwMjAwNDYwMjc1RDAwMDAwMDAwMDAwMDQwMDAwMgorOjEwMDZCMDAwMDAwMDAwMDIwMUUwMDgzMDAwMDAwMDAwMjEwMDcwMDA4RQorOjEwMDZDMDAwMDAwMDAwMDA2NDY0NjE0RDAwMDAwMDAwNjk2ODc0MjA0RgorOjEwMDZEMDAwMDAwMDAwMDAwMDAwMDA3MzAwMDAwMDAwMDAwMDAwMDBBNworOjEwMDZFMDAwMDAwMDAwMDIwMDAwNTAwMDAwMDAwMDAyMDAwMzgwRDA2MworOjEwMDZGMDAwMDAwMDAwMDIwNDAwMjVFMDAwMDAwMDAwMDAwMDc1RTE5OQorOjEwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAyMDAwMzgwRTA4MworOjEwMDcxMDAwMDAwMDAwMDIwNDAwMjM5NDAwMDAwMDAwMDAwMDUwMDBDQworOjEwMDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMDczMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDRBRAorOjEwMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwMDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjAwMDAwMDAxRkYKKy8qIHByb2R1Y3Rpb24gcmFkZW9uIHVjb2RlIHIxeHgtcjZ4eCAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1IyMDBfY3AuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUjIwMF9jcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBiZDczCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1IyMDBfY3AuYmluLmloZXgKQEAgLTAsMCArMSwxMzAgQEAKKzoxMDAwMDAwMDAwMDAwMDAwMjEwMDcwMDAwMDAwMDAwMDIwMDA3MDAwQ0YKKzoxMDAwMTAwMDAwMDAwMDA0MDAwMDAwQkYwMDAwMDAwNDAwMDAwMEMzNTYKKzoxMDAwMjAwMDAwMDAwMDAwN0E2ODVFNUQwMDAwMDAwMDVENUQ1NTg4OUMKKzoxMDAwMzAwMDAwMDAwMDAwNjg2NTkxOTcwMDAwMDAwMDVEQTE5Rjc4QjYKKzoxMDAwNDAwMDAwMDAwMDAwNUQ1RDVENUQwMDAwMDAwMDVERUU1RDUwNDQKKzoxMDAwNTAwMDAwMDAwMDAwRjJBQ0FDQUMwMDAwMDAwMEU3NURGOUU5ODQKKzoxMDAwNjAwMDAwMDAwMDAwQjFERDBFMTEwMDAwMDAwMEUyQUZBRkFGRjQKKzoxMDAwNzAwMDAwMDAwMDE2MDAwRjAwMDAwMDAwMDAwMDQ1MkYyMzJEOTcKKzoxMDAwODAwMDAwMDAwMDA0MDAwMDAwMTMwMDAwMDAxNjAwMEYwMDAwMzQKKzoxMDAwOTAwMDAwMDAwMDAwNDUyRjI3MkQwMDAwMDAxNjAwMEYwMDAxNzIKKzoxMDAwQTAwMDAwMDAwMDAwM0U0RDRBMzcwMDAwMDAwMjAwMDA3N0VGREMKKzoxMDAwQjAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAxQTAwMDAwMDIwRUUKKzoxMDAwQzAwMDAwMDAwMDFFMDAwMDQwMDAwMDAwMDAwMjAwMDYxMDAwQkEKKzoxMDAwRDAwMDAwMDAwMDFBMDAwMDAwMjAwMDAwMDAxRTAwMDA0MDAwODgKKzoxMDAwRTAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAxQTAwMDAwMDIwQkUKKzoxMDAwRjAwMDAwMDAwMDFFMDAwMDQwMDAwMDAwMDAwNDAwMDAwMDE2ODgKKzoxMDAxMDAwMDAwMDAwMDAyMDAwMzgwMkEwMDAwMDAwMjA0MDA2N0UwRjMKKzoxMDAxMTAwMDAwMDAwMDA0MDAwMDAwMTYwMDAwMDAwMjAwMDA3N0UwNkMKKzoxMDAxMjAwMDAwMDAwMDAyMDAwNjUwMDAwMDAwMDAwMjAwMDAzN0UxNUQKKzoxMDAxMzAwMDAwMDAwMDA2MDQwMDY3RTEwMDAwMDAwMjAwMDA3N0UwMTQKKzoxMDAxNDAwMDAwMDAwMDAyMDAwMDc3RTEwMDAwMDAwNjAwMDA3N0UxRjcKKzoxMDAxNTAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMDEwMDAwMDAwOTMKKzoxMDAxNjAwMDAwMDAwMDAwMDdGMDA3RjAwMDAwMDAwMjAwMDM4MDJBRjIKKzoxMDAxNzAwMDAwMDAwMDA2MDQwMDY3RTAwMDAwMDAwMjAwMDM4MDJDN0QKKzoxMDAxODAwMDAwMDAwMDAyMDQwMDI3NDEwMDAwMDAwMjA0MDAyNzQxOTMKKzoxMDAxOTAwMDAwMDAwMDAyMDQwMDI3NDMwMDAwMDAwMjAwMDA3Njc1MDIKKzoxMDAxQTAwMDAwMDAwMDAyMDAwMDc2NzYwMDAwMDAwMjAwMDA3Njc3NzIKKzoxMDAxQjAwMDAwMDAwMDA2MDAwMDc2NzgwMDAwMDAwMjAwMDM4MDJDOUEKKzoxMDAxQzAwMDAwMDAwMDAyMDQwMDI3NDEwMDAwMDAwMjA0MDAyNzQxNTMKKzoxMDAxRDAwMDAwMDAwMDAyMDQwMDI3NDMwMDAwMDAwMjAwMDA3Njc2QzEKKzoxMDAxRTAwMDAwMDAwMDAyMDAwMDc2NzcwMDAwMDAwNjAwMDA3Njc4MkMKKzoxMDAxRjAwMDAwMDAwMDAyMDAwMzgwMkIwMDAwMDAwMjA0MDAyNjc2QUQKKzoxMDAyMDAwMDAwMDAwMDAyMDAwMDc2NzcwMDAwMDAwMjAwMDM4MDJDNEUKKzoxMDAyMTAwMDAwMDAwMDAyMDQwMDI3NDEwMDAwMDAwMjA0MDAyNzQzMDAKKzoxMDAyMjAwMDAwMDAwMDA2MDAwMDc2NzgwMDAwMDAwMjAwMDM4MDJDMjkKKzoxMDAyMzAwMDAwMDAwMDAyMDQwMDI3NDEwMDAwMDAwMjA0MDAyNzQxRTIKKzoxMDAyNDAwMDAwMDAwMDAyMDQwMDI3NDMwMDAwMDAwNjAwMDA3Njc4NEEKKzoxMDAyNTAwMDAwMDAwMDE4MDAwMDAwMkYwMDAwMDAxODAwMDAwMDJGMTAKKzoxMDAyNjAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMDAxODAwMDAwMDM3MzkKKzoxMDAyNzAwMDAwMDAwMDE4MDAwMDAwMzcwMDAwMDAwNjAwMDAwMDAwMjkKKzoxMDAyODAwMDAwMDAwMDAyMDE2MDUwMDAwMDAwMDAwMjAwMDY1MDAwNjMKKzoxMDAyOTAwMDAwMDAwMDAyMDAwOTgwMDAwMDAwMDAwMjAwMDYxMDAwQkIKKzoxMDAyQTAwMDAwMDAwMDA0NjRDMDYwNTEwMDAwMDAxNjAwMDgwMDAwNTcKKzoxMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0MDAyNTFERjYKKzoxMDAyQzAwMDAwMDAwMDAyMDAwMDc1ODAwMDAwMDAwMjAwMDY3NTgxMzkKKzoxMDAyRDAwMDAwMDAwMDAyMDQwMDI1ODAwMDAwMDAwMjAwMDY3NTgxNzUKKzoxMDAyRTAwMDAwMDAwMDA0MDAwMDAwNUEwMDAwMDAwMDAwMDA1MDAwNjAKKzoxMDAyRjAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAwMjAwMDA3NTBFNjEKKzoxMDAzMDAwMDAwMDAwMDAyMDAwMTkwMDAwMDAwMDAxNDAwMDExMDY0RDEKKzoxMDAzMTAwMDAwMDAwMDEyMDAwMDAwNjQwMDAwMDAwMjA0MDAyNTBGMkQKKzoxMDAzMjAwMDAwMDAwMDA0MDAwMDUwNUUwMDAwMDAwMjAwMDA3NTY1M0YKKzoxMDAzMzAwMDAwMDAwMDAyMDAwMDc1NjYwMDAwMDAwNDAwMDAwMDY1NzcKKzoxMDAzNDAwMDAwMDAwMDAyMDFFNjU1QjQwMDAwMDAwMjQ0MDFCMEYwRDQKKzoxMDAzNTAwMDAwMDAwMDAyMDFDMTEwRjAwMDAwMDAxODI2NjY3MDcxNTQKKzoxMDAzNjAwMDAwMDAwMDAyMDQwQzI1NjUwMDAwMDAxODAwMDAwMDcxNjgKKzoxMDAzNzAwMDAwMDAwMDAyMDQwMDI1NjQwMDAwMDAwMjAwMDA3NTY2MTEKKzoxMDAzODAwMDAwMDAwMDA0MDAwMDAwNjgwMDAwMDAwODAwNDAxMDc0MzUKKzoxMDAzOTAwMDAwMDAwMDAyMDAxMDEwMDAwMDAwMDAwMjAwMEQ4MEZGQUQKKzoxMDAzQTAwMDAwMDAwMDA4MDA4MDAwNzcwMDAwMDAwMjAwMEY5MDAwQUQKKzoxMDAzQjAwMDAwMDAwMDAyMDAwRTAwRkYwMDAwMDAwNjAwMDAwMDAwMjgKKzoxMDAzQzAwMDAwMDAwMDE4MDAwMDAwOTQwMDAwMDAwNDAwMDAwMDY4MTUKKzoxMDAzRDAwMDAwMDAwMDAyMDAwMDc1NzYwMDAwMDAwMjAwMDY1MDAwRDgKKzoxMDAzRTAwMDAwMDAwMDAyMDAwMDkwMDAwMDAwMDAwMjAwMDQxMDAwNjUKKzoxMDAzRjAwMDAwMDAwMDAyMEMwMDM1MEUwMDAwMDAwMjAwMDQ5MDAwMTYKKzoxMDA0MDAwMDAwMDAwMDAyMDAwNTEwMDAwMDAwMDAwMjAxRTc4NUY4NkUKKzoxMDA0MTAwMDAwMDAwMDAyMDAyMDAwMDAwMDAwMDAwQzAwNjAwMDg3QzcKKzoxMDA0MjAwMDAwMDAwMDAyMDAwMDc1NjMwMDAwMDAyMTAwNjA3NUYwMEMKKzoxMDA0MzAwMDAwMDAwMDA0MjAwMDcwN0MwMDAwMDAwNDAwMDA1MDdDREMKKzoxMDA0NDAwMDAwMDAwMDAyMDAwMDc1NzYwMDAwMDAwMjAwMDA3NTc3RDEKKzoxMDA0NTAwMDAwMDAwMDAyMDAwMDc1MEUwMDAwMDAwMjAwMDA3NTBGOTEKKzoxMDA0NjAwMDAwMDAwMDAyMDBBMDUwMDAwMDAwMDAwQzAwNjAwMDhBQTQKKzoxMDA0NzAwMDAwMDAwMDIxMDA2MDc1RjAwMDAwMDAwMjAwMDA3NUY4MjcKKzoxMDA0ODAwMDAwMDAwMDA0MDAwMDAwOEEwMDAwMDAwMjAwMEE3NTBFNEYKKzoxMDA0OTAwMDAwMDAwMDAyMDAyMDc1MEYwMDAwMDAwNDAwNjAwMDhEQzUKKzoxMDA0QTAwMDAwMDAwMDAyMDAwMDc1NzAwMDAwMDAwMjAwMDA3NTcxN0QKKzoxMDA0QjAwMDAwMDAwMDA2MDAwMDc1NzIwMDAwMDAwMjAwMDA1MDAwRkQKKzoxMDA0QzAwMDAwMDAwMDAyMDBBMDUwMDAwMDAwMDAwMjAwMDA3NTY4NUIKKzoxMDA0RDAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAwQzAwMDAwMDk4NjAKKzoxMDA0RTAwMDAwMDAwMDAyMDAwNTgwMDAwMDAwMDAwMjBDNjA3NTYyNDAKKzoxMDA0RjAwMDAwMDAwMDA0MDAwMDAwOUEwMDAwMDAwNDAwNjAwMDk5NjEKKzoxMDA1MDAwMDAwMDAwMDAwNDAwMDcwRjEwMDAwMDAwMjAwMDM4MEYxRDQKKzoxMDA1MTAwMDAwMDAwMDFDMDAwMDAwQTcwMDAwMDAxODAwMDY1MEE5MDEKKzoxMDA1MjAwMDAwMDAwMDAyMDQwMDI1QkIwMDAwMDAxODAwMDYxMEFBMEQKKzoxMDA1MzAwMDAwMDAwMDAwMDQwMDc1QkMwMDAwMDAwMjAwMDA3NUJCNTQKKzoxMDA1NDAwMDAwMDAwMDAwMDAwMDc1QkMwMDAwMDAwNjAwMDkwMDAwNkIKKzoxMDA1NTAwMDAwMDAwMDAyMDAwOTAwMDAwMDAwMDAwNjAwMEQ4MDAyRkIKKzoxMDA1NjAwMDAwMDAwMDAyMDAwMDUwMDAwMDAwMDAwMjAwMDA3ODIxOUUKKzoxMDA1NzAwMDAwMDAwMDAwMDAwMDc4MDAwMDAwMDAwMjAwMDA3ODIxNjgKKzoxMDA1ODAwMDAwMDAwMDAwMDAwMDc4MDAwMDAwMDAwMjAxNjY1MDAwM0EKKzoxMDA1OTAwMDAwMDAwMDAyMDAwQTAwMDAwMDAwMDAwMjAwMDY3MUNDMEEKKzoxMDA1QTAwMDAwMDAwMDAyMDI4NkYxQ0QwMDAwMDAxMDAwMDAwMEI3M0MKKzoxMDA1QjAwMDAwMDAwMDAwMjEwMDcwMDAwMDAwMDAxQzAwMDAwMEJFRDAKKzoxMDA1QzAwMDAwMDAwMDAyMDAwNjUwMDAwMDAwMDAwMjAwMEEwMDAwQzcKKzoxMDA1RDAwMDAwMDAwMDAyMDAwNjEwMDAwMDAwMDAwMjAwMEIwMDAwRjYKKzoxMDA1RTAwMDAwMDAwMDAyMzgwNjcwMDAwMDAwMDAwNDAwMEEwMEJBOTMKKzoxMDA1RjAwMDAwMDAwMDAwMjAwMDcwMDAwMDAwMDAwMjAxMjAwMDAwNDgKKzoxMDA2MDAwMDAwMDAwMDAyMjAwNzcwMDAwMDAwMDAwMjAxMjAwMDAwMkUKKzoxMDA2MTAwMDAwMDAwMDAwMjAwMDcwMDAwMDAwMDAwMjAwMDYxMDAwMzIKKzoxMDA2MjAwMDAwMDAwMDAyMDEyMDc1MUIwMDAwMDAwMjgwNDA3NTBBRDYKKzoxMDA2MzAwMDAwMDAwMDAyODA0MDc1MEIwMDAwMDAwMjAwMTEwMDAwNjUKKzoxMDA2NDAwMDAwMDAwMDAyMDAwMzgwRjEwMDAwMDAxQzAwMDAwMEQxNDcKKzoxMDA2NTAwMDAwMDAwMDE4MDAwNjEwQUEwMDAwMDAwMjg0NDA3NUJEQ0EKKzoxMDA2NjAwMDAwMDAwMDE4MDAwNjEwQTkwMDAwMDAwMjg0MDA3NUJCRkQKKzoxMDA2NzAwMDAwMDAwMDE4MDAwNjEwQUEwMDAwMDAwMjg0NDA3NUJDQUIKKzoxMDA2ODAwMDAwMDAwMDA0MDAwMDAwRDQwMDAwMDAwMjgwNDA3NUJEOUUKKzoxMDA2OTAwMDAwMDAwMDAyODAwMDc1QkIwMDAwMDAwMjgwNDA3NUJDQjUKKzoxMDA2QTAwMDAwMDAwMDAyMDAxMDgwMDAwMDAwMDAwMjAxNDAwMDAwNzUKKzoxMDA2QjAwMDAwMDAwMDBDMDA2MDAwRDgwMDAwMDAyMDIwQzA3MDAwODYKKzoxMDA2QzAwMDAwMDAwMDEyMDAwMDAwREEwMDAwMDAwNjAwODAwMDAwQjgKKzoxMDA2RDAwMDAwMDAwMDA2MDA4MDc1MUQwMDAwMDAwMjAwMDAyNUJCMjAKKzoxMDA2RTAwMDAwMDAwMDA0MDAwMDQwRDQwMDAwMDAwMjAwMDA3NzVDMUQKKzoxMDA2RjAwMDAwMDAwMDAyMDBBMDUwMDAwMDAwMDAwMjAwNjYxMDAwOTAKKzoxMDA3MDAwMDAwMDAwMDIwMDQ2MDI3NUQwMDAwMDAwMDAwMDA0MDAwQTEKKzoxMDA3MTAwMDAwMDAwMDAyMDAwMDc5OTkwMDAwMDAwMjAwQTA1MDAwRDMKKzoxMDA3MjAwMDAwMDAwMDAyMDA2NjEwMDAwMDAwMDAyMDA0NjAyOTlCMDkKKzoxMDA3MzAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMjAxRTAwODMwNUUKKzoxMDA3NDAwMDAwMDAwMDAwMjEwMDcwMDAwMDAwMDAwMjAwMDA1MDAwQzYKKzoxMDA3NTAwMDAwMDAwMDAyMDAwMzgwNTYwMDAwMDAwMjA0MDAyNUUwQjMKKzoxMDA3NjAwMDAwMDAwMDAwMDAwMDc1RTEwMDAwMDAwMDAwMDAwMDAxMzIKKzoxMDA3NzAwMDAwMDAwMDAyMDAwMzgwRUQwMDAwMDAwMDA0MDA3Mzk0RkMKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAyMDAwMDc4QzQwMDAwMDAwMjAwMDA3OEM1REMKKzoxMDA3QTAwMDAwMDAwMDAyMDAwMDc4QzYwMDAwMDAwMjAwMDA3OTI0NkEKKzoxMDA3QjAwMDAwMDAwMDAyMDAwMDc5MjUwMDAwMDAwMjAwMDA3OTI2RjgKKzoxMDA3QzAwMDAwMDAwMDA0MDAwMDAwRjIwMDAwMDAwMjAwMDA3OTI0OTQKKzoxMDA3RDAwMDAwMDAwMDAyMDAwMDc5MjUwMDAwMDAwMjAwMDA3OTI2RDgKKzoxMDA3RTAwMDAwMDAwMDA0MDAwMDAwRjkwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzowMDAwMDAwMUZGCisvKiBwcm9kdWN0aW9uIHJhZGVvbiB1Y29kZSByMXh4LXI2eHggKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SMzAwX2NwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1IzMDBfY3AuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwN2Q1NgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SMzAwX2NwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTMwIEBACis6MTAwMDAwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMDA0MDAwRTAwMEFFCis6MTAwMDEwMDAwMDAwMDAwODAwMDAwMEFFMDAwMDAwMDgwMDAwMDBCMjcwCis6MTAwMDIwMDAwMDAwMDAwMDY3NTU0QjRBMDAwMDAwMDA0QTRBNDQ3NTMyCis6MTAwMDMwMDAwMDAwMDAwMDU1NTI3RDgzMDAwMDAwMDA0QThDOEI2NTUzCis6MTAwMDQwMDAwMDAwMDAwMDRBRUY0QUY2MDAwMDAwMDA0QUUxNEE0QTc4Cis6MTAwMDUwMDAwMDAwMDAwMEU0OTc5Nzk3MDAwMDAwMDBEQjRBRUJERDBBCis6MTAwMDYwMDAwMDAwMDAwMDlDQ0M0QTRBMDAwMDAwMDBEMTk4OTg5OEZCCis6MTAwMDcwMDAwMDAwMDAwMDRBMEY5QUQ2MDAwMDAwMDQwMDBDQTAwMDA3Cis6MTAwMDgwMDAwMDAwMDAzODAwMEQwMDEyMDAwMDAwMDQwMDAwRThCNDc5Cis6MTAwMDkwMDAwMDAwMDAzODAwMEQwMDE0MDAwMDAwMDQwMDAwRThCNjY1Cis6MTAwMEEwMDAwMDAwMDAzODAwMEQwMDE2MDAwMDAwMDQwMDAwRTg1NEI1Cis6MTAwMEIwMDAwMDAwMDAzODAwMEQwMDE4MDAwMDAwMDQwMDAwRTg1NUEyCis6MTAwMEMwMDAwMDAwMDAzODAwMEQwMDFBMDAwMDAwMDQwMDAwRTg1NjhGCis6MTAwMEQwMDAwMDAwMDAzODAwMEQwMDFDMDAwMDAwMDQwMDAwRTg1NzdDCis6MTAwMEUwMDAwMDAwMDAzODAwMEQwMDFFMDAwMDAwMDQwMDAwRTgyNDlECis6MTAwMEYwMDAwMDAwMDAzODAwMEQwMDIwMDAwMDAwMDQwMDAwRTgyNThBCis6MTAwMTAwMDAwMDAwMDAzODAwMEQwMDIyMDAwMDAwMDQwMDAwRTgzMDZDCis6MTAwMTEwMDAwMDAwMDAzODAwMEQwMDI0MDAwMDAwMDQwMDAwRjBDMEMyCis6MTAwMTIwMDAwMDAwMDAzODAwMEQwMDI2MDAwMDAwMDQwMDAwRjBDMUFGCis6MTAwMTMwMDAwMDAwMDAzODAwMEQwMDI4MDAwMDAwMDQwMDAwRjA0MTFECis6MTAwMTQwMDAwMDAwMDAzODAwMEQwMDJBMDAwMDAwMDQwMDAwRjE4NEM3Cis6MTAwMTUwMDAwMDAwMDAzODAwMEQwMDJDMDAwMDAwMDQwMDAwRjE4NUI0Cis6MTAwMTYwMDAwMDAwMDAzODAwMEQwMDJFMDAwMDAwMDQwMDAwRjE4NkExCis6MTAwMTcwMDAwMDAwMDAzODAwMEQwMDMwMDAwMDAwMDQwMDAwRjE4NzhFCis6MTAwMTgwMDAwMDAwMDAzODAwMEQwMDMyMDAwMDAwMDQwMDAwRjE4MDgzCis6MTAwMTkwMDAwMDAwMDAzODAwMEQwMDM0MDAwMDAwMDQwMDAwRjM5MzVDCis6MTAwMUEwMDAwMDAwMDAzODAwMEQwMDM2MDAwMDAwMDQwMDAwRjM4QTUzCis6MTAwMUIwMDAwMDAwMDAzODAwMEQwMDM4MDAwMDAwMDQwMDAwRjM4RTNECis6MTAwMUMwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDQwMTQwQTAwMDNECis6MTAwMUQwMDAwMDAwMDAxODAwMDAwMDQzMDAwMDAwMDQwMENDRTgwMDBDCis6MTAwMUUwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDlCCis6MTAwMUYwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDhCCis6MTAwMjAwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDdBCis6MTAwMjEwMDAwMDAwMDAwODAwMDAwMDNBMDAwMDAwMDAwMDAwQTAwMEZDCis6MTAwMjIwMDAwMDAwMDAwNDIwMDA0NTFEMDAwMDAwMDQwMDAwRTU4MERGCis6MTAwMjMwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDQwODAwNDU4MDc3Cis6MTAwMjQwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDgwMDAwMDA0N0U5Cis6MTAwMjUwMDAwMDAwMDAwMDAwMDBBMDAwMDAwMDAwMDQwMDBDMjAwMENFCis6MTAwMjYwMDAwMDAwMDAwNDAwMDBFNTBFMDAwMDAwMDQwMDAzMjAwMDcwCis6MTAwMjcwMDAwMDAwMDAyODAwMDIyMDUxMDAwMDAwMjQwMDAwMDA1MTZFCis6MTAwMjgwMDAwMDAwMDAwNDA4MDA0NTBGMDAwMDAwMDgwMDAwQTA0QjFCCis6MTAwMjkwMDAwMDAwMDAwNDAwMDBFNTY1MDAwMDAwMDQwMDAwRTU2NkMxCis6MTAwMkEwMDAwMDAwMDAwODAwMDAwMDUyMDAwMDAwMDQwM0NDQTVCNEM4Cis6MTAwMkIwMDAwMDAwMDAwNDA1NDMyMDAwMDAwMDAwMDQwMDAyMjAwMEFDCis6MTAwMkMwMDAwMDAwMDAzMDRDQ0NFMDVFMDAwMDAwMDQwODI3NDU2NUNCCis6MTAwMkQwMDAwMDAwMDAzMDAwMDAwMDVFMDAwMDAwMDQwODAwNDU2NERCCis6MTAwMkUwMDAwMDAwMDAwNDAwMDBFNTY2MDAwMDAwMDgwMDAwMDA1NTYyCis6MTAwMkYwMDAwMDAwMDAxMDAwODAyMDYxMDAwMDAwMDQwMDIwMjAwMEE5Cis6MTAwMzAwMDAwMDAwMDAwNDAwMUIwMEZGMDAwMDAwMTAwMTAwMDA2NDVBCis6MTAwMzEwMDAwMDAwMDAwNDAwMUYyMDAwMDAwMDAwMDQwMDFDMDBGRjdCCis6MTAwMzIwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMzAwMDAwMDA4MDExCis6MTAwMzMwMDAwMDAwMDAwODAwMDAwMDU1MDAwMDAwMDQwMDAwRTU3NjAxCis6MTAwMzQwMDAwMDAwMDAwNDAwMENBMDAwMDAwMDAwMDQwMDAxMjAwMEQ4Cis6MTAwMzUwMDAwMDAwMDAwNDAwMDgyMDAwMDAwMDAwMDQxODAwNjUwRUUyCis6MTAwMzYwMDAwMDAwMDAwNDAwMDkyMDAwMDAwMDAwMDQwMDBBMjAwMDMyCis6MTAwMzcwMDAwMDAwMDAwNDAwMEYwMDAwMDAwMDAwMDQwMDQwMDAwMDI2Cis6MTAwMzgwMDAwMDAwMDAxODAwMDAwMDc0MDAwMDAwMDQwMDAwRTU2Mzk1Cis6MTAwMzkwMDAwMDAwMDBDMjAwQzBFNUY5MDAwMDAwMDgwMDAwMDA2OThDCis6MTAwM0EwMDAwMDAwMDAwODAwMDBBMDY5MDAwMDAwMDQwMDAwRTU3NkRECis6MTAwM0IwMDAwMDAwMDAwNDAwMDBFNTc3MDAwMDAwMDQwMDAwRTUwRUU2Cis6MTAwM0MwMDAwMDAwMDAwNDAwMDBFNTBGMDAwMDAwMDQwMTQwQTAwMDUwCis6MTAwM0QwMDAwMDAwMDAxODAwMDAwMDc3MDAwMDAwQzIwMEMwRTVGOTJFCis6MTAwM0UwMDAwMDAwMDAwODAwMDAwMDc3MDAwMDAwMDQwMDE0RTUwRTgzCis6MTAwM0YwMDAwMDAwMDAwNDAwNDBFNTBGMDAwMDAwMDgwMEMwMDA3QTgzCis6MTAwNDAwMDAwMDAwMDAwNDAwMDBFNTcwMDAwMDAwMDQwMDAwRTU3MTM5Cis6MTAwNDEwMDAwMDAwMDAwQzAwMDBFNTcyMDAwMDAwMDQwMDAwQTAwMEQ1Cis6MTAwNDIwMDAwMDAwMDAwNDAxNDBBMDAwMDAwMDAwMDQwMDAwRTU2ODk2Cis6MTAwNDMwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMTgwMDAwMDA4NEYwCis6MTAwNDQwMDAwMDAwMDAwNDAwMEIwMDAwMDAwMDAwMDQxOEMwRTU2MjdBCis6MTAwNDUwMDAwMDAwMDAwODAwMDAwMDg2MDAwMDAwMDgwMEMwMDA4NUMxCis6MTAwNDYwMDAwMDAwMDAwNDAwMDcwMEUzMDAwMDAwMzgwMDAwMDA5MkQ0Cis6MTAwNDcwMDAwMDAwMDAzMDAwMENBMDk0MDAwMDAwMDQwODAwNDVCQjAwCis6MTAwNDgwMDAwMDAwMDAzMDAwMEMyMDk1MDAwMDAwMDAwODAwRTVCQ0QyCis6MTAwNDkwMDAwMDAwMDAwNDAwMDBFNUJCMDAwMDAwMDAwMDAwRTVCQzE3Cis6MTAwNEEwMDAwMDAwMDAwQzAwMTIwMDAwMDAwMDAwMDQwMDEyMDAwMDE4Cis6MTAwNEIwMDAwMDAwMDAwQzAwMUIwMDAyMDAwMDAwMDQwMDAwQTAwMDZGCis6MTAwNEMwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDAwMDAwRTgwMDM3Cis6MTAwNEQwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDAwMDAwRTgyRUY5Cis6MTAwNEUwMDAwMDAwMDAwNDAyQ0NBMDAwMDAwMDAwMDQwMDE0MDAwMDgyCis6MTAwNEYwMDAwMDAwMDAwNDAwMENFMUNDMDAwMDAwMDQwNTBERTFDRDdCCis6MTAwNTAwMDAwMDAwMDAwNDAwNDAwMDAwMDAwMDAwMTgwMDAwMDBBNEVCCis6MTAwNTEwMDAwMDAwMDAwNDAwQzBBMDAwMDAwMDAwMDgwMDAwMDBBMUNFCis6MTAwNTIwMDAwMDAwMDAyMDAwMDAwMEE2MDAwMDAwMDA0MjAwRTAwMEUzCis6MTAwNTMwMDAwMDAwMDAzODAwMDAwMEFEMDAwMDAwMDQwMDBDQTAwMDI2Cis6MTAwNTQwMDAwMDAwMDAwNDAwMTQwMDAwMDAwMDAwMDQwMDBDMjAwMDYzCis6MTAwNTUwMDAwMDAwMDAwNDAwMTYwMDAwMDAwMDAwMDQ3MDBDRTAwMDIxCis6MTAwNTYwMDAwMDAwMDAwODAwMTQwMEE5MDAwMDAwMDA0MDAwRTAwMEE2Cis6MTAwNTcwMDAwMDAwMDAwNDAyNDAwMDAwMDAwMDAwMDQ0MDBFRTAwMDAzCis6MTAwNTgwMDAwMDAwMDAwNDAyNDAwMDAwMDAwMDAwMDA0MDAwRTAwMDA1Cis6MTAwNTkwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMDQwMjQwRTUxQkU1Cis6MTAwNUEwMDAwMDAwMDAwNTAwODBFNTBBMDAwMDAwMDUwMDgwRTUwQjYyCis6MTAwNUIwMDAwMDAwMDAwNDAwMjIwMDAwMDAwMDAwMDQwMDA3MDBFMzI3Cis6MTAwNUMwMDAwMDAwMDAzODAwMDAwMEMwMDAwMDAwMzAwMDBDMjA5NTQyCis6MTAwNUQwMDAwMDAwMDAwNTA4ODBFNUJEMDAwMDAwMzAwMDBDMjA5NEZDCis6MTAwNUUwMDAwMDAwMDAwNTA4MDBFNUJCMDAwMDAwMzAwMDBDMjA5NTZECis6MTAwNUYwMDAwMDAwMDAwNTA4ODBFNUJDMDAwMDAwMDgwMDAwMDBDMzAyCis6MTAwNjAwMDAwMDAwMDAwNTAwODBFNUJEMDAwMDAwMDUwMDAwRTVCQjFFCis6MTAwNjEwMDAwMDAwMDAwNTAwODBFNUJDMDAwMDAwMDQwMDIxMDAwMDhGCis6MTAwNjIwMDAwMDAwMDAwNDAyODAwMDAwMDAwMDAwMTgwMEMwMDBDN0E1Cis6MTAwNjMwMDAwMDAwMDA0MDQxODBFMDAwMDAwMDAwMjQwMDAwMDBDOUVDCis6MTAwNjQwMDAwMDAwMDAwQzAxMDAwMDAwMDAwMDAwMEMwMTAwRTUxRDhFCis6MTAwNjUwMDAwMDAwMDAwNDAwMDA0NUJCMDAwMDAwMDgwMDAwODBDMzRCCis6MTAwNjYwMDAwMDAwMDAwNDAwMDBGM0NFMDAwMDAwMDQwMTQwQTAwMEUwCis6MTAwNjcwMDAwMDAwMDAwNDAwQ0MyMDAwMDAwMDAwNDAwOEMwNTNDRjYwCis6MTAwNjgwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDQwMDAwRjNEMjIxCis6MTAwNjkwMDAwMDAwMDAwNDAxNDBBMDAwMDAwMDAwMDQwMENDMjAwMDg1Cis6MTAwNkEwMDAwMDAwMDA0MDA4QzA1M0QzMDAwMDAwMDAwMDAwODAwMDlDCis6MTAwNkIwMDAwMDAwMDAwNDAwMDBGMzlEMDAwMDAwMDQwMTQwQTAwMEMxCis6MTAwNkMwMDAwMDAwMDAwNDAwQ0MyMDAwMDAwMDAwNDAwOEMwNTM5RTQxCis6MTAwNkQwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDQwM0MwMDgzMDlCCis6MTAwNkUwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMDQwMDAwQTAwMDQ0Cis6MTAwNkYwMDAwMDAwMDAwNDIwMDA0NUUwMDAwMDAwMDAwMDAwRTVFMUVCCis6MTAwNzAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDQwMDA3MDBFMEZECis6MTAwNzEwMDAwMDAwMDAwMDA4MDBFMzk0MDAwMDAwMDAwMDAwMDAwMDVBCis6MTAwNzIwMDAwMDAwMDAwNDAwMDBFOEM0MDAwMDAwMDQwMDAwRThDNTY4Cis6MTAwNzMwMDAwMDAwMDAwNDAwMDBFOEM2MDAwMDAwMDQwMDAwRTkyOEYyCis6MTAwNzQwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQTdDCis6MTAwNzUwMDAwMDAwMDAwODAwMDAwMEU0MDAwMDAwMDQwMDAwRTkyODk4Cis6MTAwNzYwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQTVDCis6MTAwNzcwMDAwMDAwMDAwODAwMDAwMEVCMDAwMDAwMDQwMkMwMjAwMEEwCis6MTAwNzgwMDAwMDAwMDAwNDAwMDYwMDAwMDAwMDAwMzQwMDAwMDBGMzM4Cis6MTAwNzkwMDAwMDAwMDAwODAwMDAwMEYwMDAwMDAwMDQwMDAwODAwMERECis6MTAwN0EwMDAwMDAwMDAwMEMwMDBFMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTAwN0IwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMDQwMDFEMDAxOEQwCis6MTAwN0MwMDAwMDAwMDAwNDAwMUEwMDAxMDAwMDAwMzQwMDAwMDBGQkRCCis6MTAwN0QwMDAwMDAwMDAwODAwMDAwMDRBMDAwMDAwMDgwNTAwQTA0QUQwCis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MDAwMDAwMDFGRgorLyogcHJvZHVjdGlvbiByYWRlb24gdWNvZGUgcjF4eC1yNnh4ICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUjQyMF9jcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SNDIwX2NwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MTU4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUjQyMF9jcC5iaW4uaWhleApAQCAtMCwwICsxLDEzMCBAQAorOjEwMDAwMDAwMDAwMDAwMDA0MjAwRTAwMDAwMDAwMDAwNDAwMEUwMDBBRQorOjEwMDAxMDAwMDAwMDAwMDgwMDAwMDA5OTAwMDAwMDA4MDAwMDAwOUQ5QQorOjEwMDAyMDAwMDAwMDAwMDA0QTU1NEI0QTAwMDAwMDAwNEE0QTQ0Njc1RAorOjEwMDAzMDAwMDAwMDAwMDA1NTUyNkY3NTAwMDAwMDAwNEE3RTdENjU4QgorOjEwMDA0MDAwMDAwMDAwMDBEOUQzREZGNjAwMDAwMDAwNEFDNTRBNEE4QworOjEwMDA1MDAwMDAwMDAwMDBDODgyODI4MjAwMDAwMDAwQkY0QUNGQzFCOQorOjEwMDA2MDAwMDAwMDAwMDA4N0IwNEE0QTAwMDAwMDAwQjU4MzgzODM4NworOjEwMDA3MDAwMDAwMDAwMDA0QTBGODVCQTAwMDAwMDA0MDAwQ0EwMDAzOAorOjEwMDA4MDAwMDAwMDAwMzgwMDBEMDAxMjAwMDAwMDA0MDAwMEU4QjQ3OQorOjEwMDA5MDAwMDAwMDAwMzgwMDBEMDAxNDAwMDAwMDA0MDAwMEU4QjY2NQorOjEwMDBBMDAwMDAwMDAwMzgwMDBEMDAxNjAwMDAwMDA0MDAwMEU4NTRCNQorOjEwMDBCMDAwMDAwMDAwMzgwMDBEMDAxODAwMDAwMDA0MDAwMEU4NTVBMgorOjEwMDBDMDAwMDAwMDAwMzgwMDBEMDAxQTAwMDAwMDA0MDAwMEU4NTY4RgorOjEwMDBEMDAwMDAwMDAwMzgwMDBEMDAxQzAwMDAwMDA0MDAwMEU4NTc3QworOjEwMDBFMDAwMDAwMDAwMzgwMDBEMDAxRTAwMDAwMDA0MDAwMEU4MjQ5RAorOjEwMDBGMDAwMDAwMDAwMzgwMDBEMDAyMDAwMDAwMDA0MDAwMEU4MjU4QQorOjEwMDEwMDAwMDAwMDAwMzgwMDBEMDAyMjAwMDAwMDA0MDAwMEU4MzA2QworOjEwMDExMDAwMDAwMDAwMzgwMDBEMDAyNDAwMDAwMDA0MDAwMEYwQzBDMgorOjEwMDEyMDAwMDAwMDAwMzgwMDBEMDAyNjAwMDAwMDA0MDAwMEYwQzFBRgorOjEwMDEzMDAwMDAwMDAwMzgwMDBEMDAyODAwMDAwMDA0MDAwMEYwNDExRAorOjEwMDE0MDAwMDAwMDAwMzgwMDBEMDAyQTAwMDAwMDA0MDAwMEYxODRDNworOjEwMDE1MDAwMDAwMDAwMzgwMDBEMDAyQzAwMDAwMDA0MDAwMEYxODVCNAorOjEwMDE2MDAwMDAwMDAwMzgwMDBEMDAyRTAwMDAwMDA0MDAwMEYxODZBMQorOjEwMDE3MDAwMDAwMDAwMzgwMDBEMDAzMDAwMDAwMDA0MDAwMEYxODc4RQorOjEwMDE4MDAwMDAwMDAwMzgwMDBEMDAzMjAwMDAwMDA0MDAwMEYxODA4MworOjEwMDE5MDAwMDAwMDAwMzgwMDBEMDAzNDAwMDAwMDA0MDAwMEYzOTM1QworOjEwMDFBMDAwMDAwMDAwMzgwMDBEMDAzNjAwMDAwMDA0MDAwMEYzOEE1MworOjEwMDFCMDAwMDAwMDAwMzgwMDBEMDAzODAwMDAwMDA0MDAwMEYzOEUzRAorOjEwMDFDMDAwMDAwMDAwMDQwMDAwRTgyMTAwMDAwMDA0MDE0MEEwMDAzRAorOjEwMDFEMDAwMDAwMDAwMTgwMDAwMDA0MzAwMDAwMDA0MDBDQ0U4MDAwQworOjEwMDFFMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA5QgorOjEwMDFGMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA4QgorOjEwMDIwMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDgwMDQ4MDA3QQorOjEwMDIxMDAwMDAwMDAwMDgwMDAwMDAzQTAwMDAwMDAwMDAwMEEwMDBGQworOjEwMDIyMDAwMDAwMDAwMDQyMDAwNDUxRDAwMDAwMDA0MDAwMEU1ODBERgorOjEwMDIzMDAwMDAwMDAwMDQwMDBDRTU4MTAwMDAwMDA0MDgwMDQ1ODA3NworOjEwMDI0MDAwMDAwMDAwMDQwMDBDRTU4MTAwMDAwMDA4MDAwMDAwNDdFOQorOjEwMDI1MDAwMDAwMDAwMDAwMDAwQTAwMDAwMDAwMDA0MDAwQzIwMDBDRQorOjEwMDI2MDAwMDAwMDAwMDQwMDAwRTUwRTAwMDAwMDA0MDAwMzIwMDA3MAorOjEwMDI3MDAwMDAwMDAwMjgwMDAyMjA1MTAwMDAwMDI0MDAwMDAwNTE2RQorOjEwMDI4MDAwMDAwMDAwMDQwODAwNDUwRjAwMDAwMDA4MDAwMEEwNEIxQgorOjEwMDI5MDAwMDAwMDAwMDQwMDAwRTU2NTAwMDAwMDA0MDAwMEU1NjZDMQorOjEwMDJBMDAwMDAwMDAwMDgwMDAwMDA1MjAwMDAwMDA0MDNDQ0E1QjRDOAorOjEwMDJCMDAwMDAwMDAwMDQwNTQzMjAwMDAwMDAwMDA0MDAwMjIwMDBBQworOjEwMDJDMDAwMDAwMDAwMzA0Q0NDRTA1RTAwMDAwMDA0MDgyNzQ1NjVDQgorOjEwMDJEMDAwMDAwMDAwMzAwMDAwMDA1RTAwMDAwMDA0MDgwMDQ1NjREQgorOjEwMDJFMDAwMDAwMDAwMDQwMDAwRTU2NjAwMDAwMDA4MDAwMDAwNTU2MgorOjEwMDJGMDAwMDAwMDAwMTAwMDgwMjA2MTAwMDAwMDA0MDAyMDIwMDBBOQorOjEwMDMwMDAwMDAwMDAwMDQwMDFCMDBGRjAwMDAwMDEwMDEwMDAwNjQ1QQorOjEwMDMxMDAwMDAwMDAwMDQwMDFGMjAwMDAwMDAwMDA0MDAxQzAwRkY3QgorOjEwMDMyMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDMwMDAwMDAwNzIxRgorOjEwMDMzMDAwMDAwMDAwMDgwMDAwMDA1NTAwMDAwMDA0MDAwMEU1NzYwMQorOjEwMDM0MDAwMDAwMDAwMDQwMDAwRTU3NzAwMDAwMDA0MDAwMEU1MEU1NgorOjEwMDM1MDAwMDAwMDAwMDQwMDAwRTUwRjAwMDAwMDA0MDE0MEEwMDBDMAorOjEwMDM2MDAwMDAwMDAwMTgwMDAwMDA2OTAwMDAwMEMyMDBDMEU1RjlBQworOjEwMDM3MDAwMDAwMDAwMDgwMDAwMDA2OTAwMDAwMDA0MDAxNEU1MEUwMQorOjEwMDM4MDAwMDAwMDAwMDQwMDQwRTUwRjAwMDAwMDA4MDBDMDAwNkMwMQorOjEwMDM5MDAwMDAwMDAwMDQwMDAwRTU3MDAwMDAwMDA0MDAwMEU1NzFBQQorOjEwMDNBMDAwMDAwMDAwMEMwMDAwRTU3MjAwMDAwMDA0MDAwMEEwMDA0NgorOjEwMDNCMDAwMDAwMDAwMDQwMTQwQTAwMDAwMDAwMDA0MDAwMEU1NjgwNworOjEwMDNDMDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDE4MDAwMDAwNzY2RgorOjEwMDNEMDAwMDAwMDAwMDQwMDBCMDAwMDAwMDAwMDA0MThDMEU1NjJFQgorOjEwMDNFMDAwMDAwMDAwMDgwMDAwMDA3ODAwMDAwMDA4MDBDMDAwNzc0RQorOjEwMDNGMDAwMDAwMDAwMDQwMDA3MDBDNzAwMDAwMDM4MDAwMDAwODA3MworOjEwMDQwMDAwMDAwMDAwMDQwMDAwRTVCQjAwMDAwMDAwMDAwMEU1QkNBNworOjEwMDQxMDAwMDAwMDAwMDQwMDAwQTAwMDAwMDAwMDA0MDAwMEU4MjEyQgorOjEwMDQyMDAwMDAwMDAwMDAwMDAwRTgwMDAwMDAwMDA0MDAwMEU4MjFENworOjEwMDQzMDAwMDAwMDAwMDAwMDAwRTgyRTAwMDAwMDA0MDJDQ0EwMDAzNAorOjEwMDQ0MDAwMDAwMDAwMDQwMDE0MDAwMDAwMDAwMDA0MDAwQ0UxQ0NENworOjEwMDQ1MDAwMDAwMDAwMDQwNTBERTFDRDAwMDAwMDA0MDA0MDAwMDA5NAorOjEwMDQ2MDAwMDAwMDAwMTgwMDAwMDA4RjAwMDAwMDA0MDBDMEEwMDA4MQorOjEwMDQ3MDAwMDAwMDAwMDgwMDAwMDA4QzAwMDAwMDIwMDAwMDAwOTEzNworOjEwMDQ4MDAwMDAwMDAwMDA0MjAwRTAwMDAwMDAwMDM4MDAwMDAwOTg3QQorOjEwMDQ5MDAwMDAwMDAwMDQwMDBDQTAwMDAwMDAwMDA0MDAxNDAwMDA5NAorOjEwMDRBMDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDA0MDAxNjAwMDAwMgorOjEwMDRCMDAwMDAwMDAwMDQ3MDBDRTAwMDAwMDAwMDA4MDAxNDAwOTQyQworOjEwMDRDMDAwMDAwMDAwMDA0MDAwRTAwMDAwMDAwMDA0MDI0MDAwMDBDNgorOjEwMDREMDAwMDAwMDAwMDQ0MDBFRTAwMDAwMDAwMDA0MDI0MDAwMDBBNAorOjEwMDRFMDAwMDAwMDAwMDA0MDAwRTAwMDAwMDAwMDA0MDAwQzIwMDBCQworOjEwMDRGMDAwMDAwMDAwMDQwMjQwRTUxQjAwMDAwMDA1MDA4MEU1MEE0MgorOjEwMDUwMDAwMDAwMDAwMDUwMDgwRTUwQjAwMDAwMDA0MDAyMjAwMDA1MAorOjEwMDUxMDAwMDAwMDAwMDQwMDA3MDBDNzAwMDAwMDM4MDAwMDAwQTQyRAorOjEwMDUyMDAwMDAwMDAwMDUwMDgwRTVCRDAwMDAwMDA1MDAwMEU1QkJGRgorOjEwMDUzMDAwMDAwMDAwMDUwMDgwRTVCQzAwMDAwMDA0MDAyMTAwMDA3MAorOjEwMDU0MDAwMDAwMDAwMDQwMjgwMDAwMDAwMDAwMDE4MDBDMDAwQUJBMgorOjEwMDU1MDAwMDAwMDAwNDA0MTgwRTAwMDAwMDAwMDI0MDAwMDAwQURFOQorOjEwMDU2MDAwMDAwMDAwMEMwMTAwMDAwMDAwMDAwMDBDMDEwMEU1MUQ2RgorOjEwMDU3MDAwMDAwMDAwMDQwMDAwNDVCQjAwMDAwMDA4MDAwMDgwQTc0OAorOjEwMDU4MDAwMDAwMDAwMDQwMDAwRjNDRTAwMDAwMDA0MDE0MEEwMDBDMQorOjEwMDU5MDAwMDAwMDAwMDQwMENDMjAwMDAwMDAwMDQwMDhDMDUzQ0Y0MQorOjEwMDVBMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDA0MDAwMEYzRDIwMgorOjEwMDVCMDAwMDAwMDAwMDQwMTQwQTAwMDAwMDAwMDA0MDBDQzIwMDA2NgorOjEwMDVDMDAwMDAwMDAwNDAwOEMwNTNEMzAwMDAwMDAwMDAwMDgwMDA3RAorOjEwMDVEMDAwMDAwMDAwMDQwMDAwRjM5RDAwMDAwMDA0MDE0MEEwMDBBMgorOjEwMDVFMDAwMDAwMDAwMDQwMENDMjAwMDAwMDAwMDQwMDhDMDUzOUUyMgorOjEwMDVGMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDA0MDNDMDA4MzA3QworOjEwMDYwMDAwMDAwMDAwMDA0MjAwRTAwMDAwMDAwMDA0MDAwMEEwMDAyNAorOjEwMDYxMDAwMDAwMDAwMDQyMDAwNDVFMDAwMDAwMDAwMDAwMEU1RTFDQgorOjEwMDYyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDA0MDAwNzAwQzRGQQorOjEwMDYzMDAwMDAwMDAwMDAwODAwRTM5NDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwMDY0MDAwMDAwMDAwMDQwMDAwRThDNDAwMDAwMDA0MDAwMEU4QzU0OQorOjEwMDY1MDAwMDAwMDAwMDQwMDAwRThDNjAwMDAwMDA0MDAwMEU5MjhEMworOjEwMDY2MDAwMDAwMDAwMDQwMDAwRTkyOTAwMDAwMDA0MDAwMEU5MkE1RAorOjEwMDY3MDAwMDAwMDAwMDgwMDAwMDBDODAwMDAwMDA0MDAwMEU5Mjg5NQorOjEwMDY4MDAwMDAwMDAwMDQwMDAwRTkyOTAwMDAwMDA0MDAwMEU5MkEzRAorOjEwMDY5MDAwMDAwMDAwMDgwMDAwMDBDRjAwMDAwMDA0MDJDMDIwMDA5RAorOjEwMDZBMDAwMDAwMDAwMDQwMDA2MDAwMDAwMDAwMDM0MDAwMDAwRDczNQorOjEwMDZCMDAwMDAwMDAwMDgwMDAwMDBENDAwMDAwMDA0MDAwMDgwMDBEQQorOjEwMDZDMDAwMDAwMDAwMDBDMDAwRTAwMDAwMDAwMDA0MDAwMEUxQ0NEOQorOjEwMDZEMDAwMDAwMDAwMDQwNTAwRTFDRDAwMDAwMDA0MDAwQ0EwMDBCMworOjEwMDZFMDAwMDAwMDAwMzQwMDAwMDBERTAwMDAwMDA4MDAwMDAwREExNgorOjEwMDZGMDAwMDAwMDAwMDAwMDAwQTAwMDAwMDAwMDA0MDAxOUUxQ0M5MAorOjEwMDcwMDAwMDAwMDAwMDQwMDFCMDAwMTAwMDAwMDA0MDUwMEEwMDAyMAorOjEwMDcxMDAwMDAwMDAwMDQwODAwNDFDRDAwMDAwMDA0MDAwQ0EwMDAwRgorOjEwMDcyMDAwMDAwMDAwMzQwMDAwMDBGQjAwMDAwMDA4MDAwMDAwNEE0OAorOjEwMDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwMDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDQwMDBDMjAwMDAwMDAwMDA0MDAxRDAwMThEMAorOjEwMDdDMDAwMDAwMDAwMDQwMDFBMDAwMTAwMDAwMDM0MDAwMDAwRkJEQgorOjEwMDdEMDAwMDAwMDAwMDgwMDAwMDA0QTAwMDAwMDA4MDUwMEEwNEFEMAorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjAwMDAwMDAxRkYKKy8qIHByb2R1Y3Rpb24gcmFkZW9uIHVjb2RlIHIxeHgtcjZ4eCAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1I1MjBfY3AuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUjUyMF9jcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzJmZjgyCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1I1MjBfY3AuYmluLmloZXgKQEAgLTAsMCArMSwxMzAgQEAKKzoxMDAwMDAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAwMDQwMDBFMDAwQUUKKzoxMDAwMTAwMDAwMDAwMDA4MDAwMDAwOTkwMDAwMDAwODAwMDAwMDlEOUEKKzoxMDAwMjAwMDAwMDAwMDAwNEE1NTRCNEEwMDAwMDAwMDRBNEE0NDY3NUQKKzoxMDAwMzAwMDAwMDAwMDAwNTU1MjZGNzUwMDAwMDAwMDRBN0U3RDY1OEIKKzoxMDAwNDAwMDAwMDAwMDAwRTBEQUU2RjYwMDAwMDAwMDRBQzU0QTRBNzcKKzoxMDAwNTAwMDAwMDAwMDAwQzg4MjgyODIwMDAwMDAwMEJGNEFDRkMxQjkKKzoxMDAwNjAwMDAwMDAwMDAwODdCMDRBRDUwMDAwMDAwMEI1ODM4MzgzRkMKKzoxMDAwNzAwMDAwMDAwMDAwNEEwRjg1QkEwMDAwMDAwNDAwMENBMDAwMzgKKzoxMDAwODAwMDAwMDAwMDM4MDAwRDAwMTIwMDAwMDAwNDAwMDBFOEI0NzkKKzoxMDAwOTAwMDAwMDAwMDM4MDAwRDAwMTQwMDAwMDAwNDAwMDBFOEI2NjUKKzoxMDAwQTAwMDAwMDAwMDM4MDAwRDAwMTYwMDAwMDAwNDAwMDBFODU0QjUKKzoxMDAwQjAwMDAwMDAwMDM4MDAwRDAwMTgwMDAwMDAwNDAwMDBFODU1QTIKKzoxMDAwQzAwMDAwMDAwMDM4MDAwRDAwMUEwMDAwMDAwNDAwMDBFODU2OEYKKzoxMDAwRDAwMDAwMDAwMDM4MDAwRDAwMUMwMDAwMDAwNDAwMDBFODU3N0MKKzoxMDAwRTAwMDAwMDAwMDM4MDAwRDAwMUUwMDAwMDAwNDAwMDBFODI0OUQKKzoxMDAwRjAwMDAwMDAwMDM4MDAwRDAwMjAwMDAwMDAwNDAwMDBFODI1OEEKKzoxMDAxMDAwMDAwMDAwMDM4MDAwRDAwMjIwMDAwMDAwNDAwMDBFODMwNkMKKzoxMDAxMTAwMDAwMDAwMDM4MDAwRDAwMjQwMDAwMDAwNDAwMDBGMEMwQzIKKzoxMDAxMjAwMDAwMDAwMDM4MDAwRDAwMjYwMDAwMDAwNDAwMDBGMEMxQUYKKzoxMDAxMzAwMDAwMDAwMDM4MDAwRDAwMjgwMDAwMDAwNDAwMDBFMDAwNkUKKzoxMDAxNDAwMDAwMDAwMDM4MDAwRDAwMkEwMDAwMDAwNDAwMDBFMDAwNUMKKzoxMDAxNTAwMDAwMDAwMDM4MDAwRDAwMkMwMDAwMDAwNDAwMDBFMDAwNEEKKzoxMDAxNjAwMDAwMDAwMDM4MDAwRDAwMkUwMDAwMDAwNDAwMDBFMDAwMzgKKzoxMDAxNzAwMDAwMDAwMDM4MDAwRDAwMzAwMDAwMDAwNDAwMDBFMDAwMjYKKzoxMDAxODAwMDAwMDAwMDM4MDAwRDAwMzIwMDAwMDAwNDAwMDBGMTgwODMKKzoxMDAxOTAwMDAwMDAwMDM4MDAwRDAwMzQwMDAwMDAwNDAwMDBGMzkzNUMKKzoxMDAxQTAwMDAwMDAwMDM4MDAwRDAwMzYwMDAwMDAwNDAwMDBGMzhBNTMKKzoxMDAxQjAwMDAwMDAwMDM4MDAwRDAwMzgwMDAwMDAwNDAwMDBGMzhFM0QKKzoxMDAxQzAwMDAwMDAwMDA0MDAwMEU4MjEwMDAwMDAwNDAxNDBBMDAwM0QKKzoxMDAxRDAwMDAwMDAwMDE4MDAwMDAwNDMwMDAwMDAwNDAwQ0NFODAwMEMKKzoxMDAxRTAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwOUIKKzoxMDAxRjAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwOEIKKzoxMDAyMDAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwN0EKKzoxMDAyMTAwMDAwMDAwMDA4MDAwMDAwM0EwMDAwMDAwMDAwMDBBMDAwRkMKKzoxMDAyMjAwMDAwMDAwMDA0MjAwMDQ1MUQwMDAwMDAwNDAwMDBFNTgwREYKKzoxMDAyMzAwMDAwMDAwMDA0MDAwQ0U1ODEwMDAwMDAwNDA4MDA0NTgwNzcKKzoxMDAyNDAwMDAwMDAwMDA0MDAwQ0U1ODEwMDAwMDAwODAwMDAwMDQ3RTkKKzoxMDAyNTAwMDAwMDAwMDAwMDAwMEEwMDAwMDAwMDAwNDAwMEMyMDAwQ0UKKzoxMDAyNjAwMDAwMDAwMDA0MDAwMEU1MEUwMDAwMDAwNDAwMDMyMDAwNzAKKzoxMDAyNzAwMDAwMDAwMDI4MDAwMjIwNTEwMDAwMDAyNDAwMDAwMDUxNkUKKzoxMDAyODAwMDAwMDAwMDA0MDgwMDQ1MEYwMDAwMDAwODAwMDBBMDRCMUIKKzoxMDAyOTAwMDAwMDAwMDA0MDAwMEU1NjUwMDAwMDAwNDAwMDBFNTY2QzEKKzoxMDAyQTAwMDAwMDAwMDA4MDAwMDAwNTIwMDAwMDAwNDAzQ0NBNUI0QzgKKzoxMDAyQjAwMDAwMDAwMDA0MDU0MzIwMDAwMDAwMDAwNDAwMDIyMDAwQUMKKzoxMDAyQzAwMDAwMDAwMDMwNENDQ0UwNUUwMDAwMDAwNDA4Mjc0NTY1Q0IKKzoxMDAyRDAwMDAwMDAwMDMwMDAwMDAwNUUwMDAwMDAwNDA4MDA0NTY0REIKKzoxMDAyRTAwMDAwMDAwMDA0MDAwMEU1NjYwMDAwMDAwODAwMDAwMDU1NjIKKzoxMDAyRjAwMDAwMDAwMDEwMDA4MDIwNjEwMDAwMDAwNDAwMjAyMDAwQTkKKzoxMDAzMDAwMDAwMDAwMDA0MDAxQjAwRkYwMDAwMDAxMDAxMDAwMDY0NUEKKzoxMDAzMTAwMDAwMDAwMDA0MDAxRjIwMDAwMDAwMDAwNDAwMUMwMEZGN0IKKzoxMDAzMjAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAzMDAwMDAwMDcyMUYKKzoxMDAzMzAwMDAwMDAwMDA4MDAwMDAwNTUwMDAwMDAwNDAwMDBFNTc2MDEKKzoxMDAzNDAwMDAwMDAwMDA0MDAwMEU1NzcwMDAwMDAwNDAwMDBFNTBFNTYKKzoxMDAzNTAwMDAwMDAwMDA0MDAwMEU1MEYwMDAwMDAwNDAxNDBBMDAwQzAKKzoxMDAzNjAwMDAwMDAwMDE4MDAwMDAwNjkwMDAwMDBDMjAwQzBFNUY5QUMKKzoxMDAzNzAwMDAwMDAwMDA4MDAwMDAwNjkwMDAwMDAwNDAwMTRFNTBFMDEKKzoxMDAzODAwMDAwMDAwMDA0MDA0MEU1MEYwMDAwMDAwODAwQzAwMDZDMDEKKzoxMDAzOTAwMDAwMDAwMDA0MDAwMEU1NzAwMDAwMDAwNDAwMDBFNTcxQUEKKzoxMDAzQTAwMDAwMDAwMDBDMDAwMEU1NzIwMDAwMDAwNDAwMDBBMDAwNDYKKzoxMDAzQjAwMDAwMDAwMDA0MDE0MEEwMDAwMDAwMDAwNDAwMDBFNTY4MDcKKzoxMDAzQzAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAxODAwMDAwMDc2NkYKKzoxMDAzRDAwMDAwMDAwMDA0MDAwQjAwMDAwMDAwMDAwNDE4QzBFNTYyRUIKKzoxMDAzRTAwMDAwMDAwMDA4MDAwMDAwNzgwMDAwMDAwODAwQzAwMDc3NEUKKzoxMDAzRjAwMDAwMDAwMDA0MDAwNzAwQzcwMDAwMDAzODAwMDAwMDgwNzMKKzoxMDA0MDAwMDAwMDAwMDA0MDAwMEU1QkIwMDAwMDAwMDAwMDBFNUJDQTcKKzoxMDA0MTAwMDAwMDAwMDA0MDAwMEEwMDAwMDAwMDAwNDAwMDBFODIxMkIKKzoxMDA0MjAwMDAwMDAwMDAwMDAwMEU4MDAwMDAwMDAwNDAwMDBFODIxRDcKKzoxMDA0MzAwMDAwMDAwMDAwMDAwMEU4MkUwMDAwMDAwNDAyQ0NBMDAwMzQKKzoxMDA0NDAwMDAwMDAwMDA0MDAxNDAwMDAwMDAwMDAwNDAwMENFMUNDRDcKKzoxMDA0NTAwMDAwMDAwMDA0MDUwREUxQ0QwMDAwMDAwNDAwNDAwMDAwOTQKKzoxMDA0NjAwMDAwMDAwMDE4MDAwMDAwOEYwMDAwMDAwNDAwQzBBMDAwODEKKzoxMDA0NzAwMDAwMDAwMDA4MDAwMDAwOEMwMDAwMDAyMDAwMDAwMDkxMzcKKzoxMDA0ODAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAzODAwMDAwMDk4N0EKKzoxMDA0OTAwMDAwMDAwMDA0MDAwQ0EwMDAwMDAwMDAwNDAwMTQwMDAwOTQKKzoxMDA0QTAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAwNDAwMTYwMDAwMDIKKzoxMDA0QjAwMDAwMDAwMDA0NzAwQ0UwMDAwMDAwMDAwODAwMTQwMDk0MkMKKzoxMDA0QzAwMDAwMDAwMDAwNDAwMEUwMDAwMDAwMDAwNDAyNDAwMDAwQzYKKzoxMDA0RDAwMDAwMDAwMDA0NDAwRUUwMDAwMDAwMDAwNDAyNDAwMDAwQTQKKzoxMDA0RTAwMDAwMDAwMDAwNDAwMEUwMDAwMDAwMDAwNDAwMEMyMDAwQkMKKzoxMDA0RjAwMDAwMDAwMDA0MDI0MEU1MUIwMDAwMDAwNTAwODBFNTBBNDIKKzoxMDA1MDAwMDAwMDAwMDA1MDA4MEU1MEIwMDAwMDAwNDAwMjIwMDAwNTAKKzoxMDA1MTAwMDAwMDAwMDA0MDAwNzAwQzcwMDAwMDAzODAwMDAwMEE0MkQKKzoxMDA1MjAwMDAwMDAwMDA1MDA4MEU1QkQwMDAwMDAwNTAwMDBFNUJCRkYKKzoxMDA1MzAwMDAwMDAwMDA1MDA4MEU1QkMwMDAwMDAwNDAwMjEwMDAwNzAKKzoxMDA1NDAwMDAwMDAwMDA0MDI4MDAwMDAwMDAwMDAxODAwQzAwMEFCQTIKKzoxMDA1NTAwMDAwMDAwMDQwNDE4MEUwMDAwMDAwMDAyNDAwMDAwMEFERTkKKzoxMDA1NjAwMDAwMDAwMDBDMDEwMDAwMDAwMDAwMDAwQzAxMDBFNTFENkYKKzoxMDA1NzAwMDAwMDAwMDA0MDAwMDQ1QkIwMDAwMDAwODAwMDA4MEE3NDgKKzoxMDA1ODAwMDAwMDAwMDA0MDAwMEYzQ0UwMDAwMDAwNDAxNDBBMDAwQzEKKzoxMDA1OTAwMDAwMDAwMDA0MDBDQzIwMDAwMDAwMDA0MDA4QzA1M0NGNDEKKzoxMDA1QTAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwNDAwMDBGM0QyMDIKKzoxMDA1QjAwMDAwMDAwMDA0MDE0MEEwMDAwMDAwMDAwNDAwQ0MyMDAwNjYKKzoxMDA1QzAwMDAwMDAwMDQwMDhDMDUzRDMwMDAwMDAwMDAwMDA4MDAwN0QKKzoxMDA1RDAwMDAwMDAwMDA0MDAwMEYzOUQwMDAwMDAwNDAxNDBBMDAwQTIKKzoxMDA1RTAwMDAwMDAwMDA0MDBDQzIwMDAwMDAwMDA0MDA4QzA1MzlFMjIKKzoxMDA1RjAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwNDAzQzAwODMwN0MKKzoxMDA2MDAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAwNDAwMDBBMDAwMjQKKzoxMDA2MTAwMDAwMDAwMDA0MjAwMDQ1RTAwMDAwMDAwMDAwMDBFNUUxQ0IKKzoxMDA2MjAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwNDAwMDcwMEM0RkEKKzoxMDA2MzAwMDAwMDAwMDAwMDgwMEUzOTQwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMDA2NDAwMDAwMDAwMDA0MDAwMEU4QzQwMDAwMDAwNDAwMDBFOEM1NDkKKzoxMDA2NTAwMDAwMDAwMDA0MDAwMEU4QzYwMDAwMDAwNDAwMDBFOTI4RDMKKzoxMDA2NjAwMDAwMDAwMDA0MDAwMEU5MjkwMDAwMDAwNDAwMDBFOTJBNUQKKzoxMDA2NzAwMDAwMDAwMDA4MDAwMDAwQzgwMDAwMDAwNDAwMDBFOTI4OTUKKzoxMDA2ODAwMDAwMDAwMDA0MDAwMEU5MjkwMDAwMDAwNDAwMDBFOTJBM0QKKzoxMDA2OTAwMDAwMDAwMDA4MDAwMDAwQ0YwMDAwMDAwMERFQURCRUVGNEIKKzoxMDA2QTAwMDAwMDAwMDAwMDAwMDAxMTYwMDAwMDAwNDAwMDcwMEQzNTUKKzoxMDA2QjAwMDAwMDAwMDA0MDgwMDUwRTcwMDAwMDAwNDAwMDcwMEQ0MTgKKzoxMDA2QzAwMDAwMDAwMDA0MDgwMDQwMUMwMDAwMDAwMDAwMDBFMDFEQzUKKzoxMDA2RDAwMDAwMDAwMDA0MDJDMDIwMDAwMDAwMDAwNDAwMDYwMDAwMkEKKzoxMDA2RTAwMDAwMDAwMDM0MDAwMDAwREUwMDAwMDAwODAwMDAwMERCMTUKKzoxMDA2RjAwMDAwMDAwMDA0MDAwMDgwMDAwMDAwMDAwMEMwMDBFMDAwRDYKKzoxMDA3MDAwMDAwMDAwMDA0MDAwMEUxQ0MwMDAwMDAwNDA1MDBFMUNEODEKKzoxMDA3MTAwMDAwMDAwMDA0MDAwQ0EwMDAwMDAwMDAzNDAwMDAwMEU1MTAKKzoxMDA3MjAwMDAwMDAwMDA4MDAwMDAwRTEwMDAwMDAwMDAwMDBBMDAwNDAKKzoxMDA3MzAwMDAwMDAwMDA0MDAxOUUxQ0MwMDAwMDAwNDAwMUIwMDAxQ0YKKzoxMDA3NDAwMDAwMDAwMDA0MDUwMEEwMDAwMDAwMDAwNDA4MDA0MUNERTYKKzoxMDA3NTAwMDAwMDAwMDA0MDAwQ0EwMDAwMDAwMDAzNDAwMDAwMEZCQkEKKzoxMDA3NjAwMDAwMDAwMDA4MDAwMDAwNEEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAwNDAwMUQwMDE4RDAKKzoxMDA3QzAwMDAwMDAwMDA0MDAxQTAwMDEwMDAwMDAzNDAwMDAwMEZCREIKKzoxMDA3RDAwMDAwMDAwMDA4MDAwMDAwNEEwMDAwMDAwODA1MDBBMDRBRDAKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzowMDAwMDAwMUZGCisvKiBwcm9kdWN0aW9uIHJhZGVvbiB1Y29kZSByMXh4LXI2eHggKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SNjAwX21lLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1I2MDBfbWUuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkNGMxNAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SNjAwX21lLmJpbi5paGV4CkBAIC0wLDAgKzEsMTM0NSBAQAorOjEwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMDAxMDAwMDBBMDAwMEEwMDAwMDAwMDAwMDBGRkZGMDAyODQ2MjFBOQorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBBRgorOjEwMDAzMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwMDA0MDAwMDBBMDAwMEEwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAyNgorOjEwMDA1MDAwMDAwMDAwMDAwMDAxMDAwMEMwMjk0NjIwMDAwMDAwMDA1MAorOjEwMDA2MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMDA3MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFGMgorOjEwMDA4MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3QQorOjEwMDA5MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIwMDRCRQorOjEwMDBBMDAwMDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDAwMDA2MDAwMDAyMQorOjEwMDBCMDAwMDAwMDA1QjIwMDAwMDAwMDAwNjAwMDAwMDAwMDA1QzU1RgorOjEwMDBDMDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDBGMDAzOQorOjEwMDBEMDAwMDAyODE2MjIwMDAwMDAwMDAwMDAwMDA4MDAyMTE2MjU1QworOjEwMDBFMDAwMDAwMDAwMDAwMDAwMDAyMDAwMjAzNjI1MDAwMDAwMDA3NQorOjEwMDBGMDAwOEQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDRGQQorOjEwMDEwMDAwMDAyRjAyMjUwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBBRAorOjEwMDExMDAwMDAwMDAwMTgwMDQxMjAwMDAwNDA0ODExMDAwMDAwMTlCNAorOjEwMDEyMDAwMDA0MjIwMDAwMDIwNDgxMTAwMDAwMDAwOEUwMDAwMDA2NgorOjEwMDEzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDMxMDAyMDRBMkQ4MgorOjEwMDE0MDAwMDAwMDAwMDA5MDAwMDAwMDAwMjA0NDExMDAwMDAwMDBBQQorOjEwMDE1MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMEMyNgorOjEwMDE2MDAwMDAyMTE2MjIwMDAwMDAwMDAwMDAwMDAzMDAyODE2MjVEMAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAxOTAwMjExQTIyMDAwMDAwMDAwOQorOjEwMDE4MDAwMDAwMDAwMDQwMDI4MUEyNjAwMDAwMDAwMDAwMDAwMDAwMworOjEwMDE5MDAwMDAyOTE0QzUwMDAwMDAwMDAwMDAwMDIxMDAyMDM2MjVDMQorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0ExNDAyMDAwMDAwMDBGRgorOjEwMDFCMDAwMDAwMDAwMTYwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDNDQQorOjEwMDFDMDAwMDAyODE2MjUwMDAwMDAwMDAwMDAwMDFEMDAyMDBFMkQ1NAorOjEwMDFEMDAwMDAwMDAwMDBGRkZGRkZGQzAwMjgwRTIzMDAwMDAwMDBDRAorOjEwMDFFMDAwMDAwMDAwMDAwMDI5MTRBMzAwMDAwMDAwMDAwMDAwMUQxMgorOjEwMDFGMDAwMDAyMDM2MjUwMDAwMDAwMDAwMDA4MDAwMDAyODBFMjJBQworOjEwMDIwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMjIwRTIzMDAwMDAwMDA5NAorOjEwMDIxMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwMjAwMDAwMDBFRgorOjEwMDIyMDAwMDAyODBFMjIwMDAwMDAwMDAwMDAwMDA2MDAyMTBFMjMxRQorOjEwMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDBFRgorOjEwMDI0MDAwMDAwMDAwMDAwMDIyMDIyMjAwMDAwMDAwMDAwMDAwMDA2OAorOjEwMDI1MDAwMTRFMDAwMDAwMDAwMDAzODAwMDAwMDAwMkVFMDAwMDA2NAorOjEwMDI2MDAwMDAwMDAwMzUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwMzcxNgorOjEwMDI3MDAwMDAwMDAwMDAwMDQwMEUyRDAwMDAwMDM5MDAwMDAwMDhDMgorOjEwMDI4MDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDA5MDA0MDEyMkQ4QgorOjEwMDI5MDAwMDAwMDAwNDYwMDAwMDAwMTAwNDAwRTJEMDAwMDAwMzk2MworOjEwMDJBMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMyOAorOjEwMDJCMDAwMDAyODEyMjMwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQ4NworOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMDAwMDAwMDBBRAorOjEwMDJEMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDNFMDAwMDAwMDhFNAorOjEwMDJFMDAwMDA0MDFDMTEwMDAwMDA0MTAwMDAwMDBEMDAyMDFFMkRFOAorOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjgxRTI3MDAwMDAwMDA4MgorOjEwMDMwMDAwMDAwMDAwMDMwMDIyMUUyNzAwMDAwMDAwN0ZDMDAwMDA0NAorOjEwMDMxMDAwMDAyODFBMjMwMDAwMDAwMDAwMDAwMDE0MDAyMTFBMjYwMworOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMzMxQTI2MDAwMDAwMDA1OQorOjEwMDMzMDAwMDAwMDAwMDgwMDIyMUEyNjAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDM0MDAwMDAyOTBDQzcwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjQwNworOjEwMDM1MDAwMDAwMDAwMDAwMDAwN0YwMDAwMjgxMjIxMDAwMDAwMDBDMworOjEwMDM2MDAwMDAwMDE0MDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMDM3MDAwMENFMDAwMDAwMDAwMDA0QjAwMDAwMDAxMDAyOTBFMjNFQgorOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjAzNjIzMDAwMDAwMDBFNAorOjEwMDM5MDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGODAwMDAxMQorOjEwMDNBMDAwMDAyOTRBMjMwMDAwMDAwMDAwMDAwMDAwMDAzQTJDMDI0RgorOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIwRTJCMDAwMDAwMDBFMAorOjEwMDNDMDAwRkMwMDAwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMTFDNworOjEwMDNEMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjNGMAorOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAzMDAwMjA0QTJEMDAwMDAwMDA0NgorOjEwMDNGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMzI1MgorOjEwMDQwMDAwMDAyMDBFMkQwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjNFOQorOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMDQyMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDE1MgorOjEwMDQzMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA4MworOjEwMDQ0MDAwMDAwMDAwNjEwMDAwMDAwMDJFRTAwMDAwMDAwMDAwNUZERQorOjEwMDQ1MDAwMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDVFMDAwMDAwMDAzMgorOjEwMDQ2MDAwMDA0MDBFMkQwMDAwMDA2MjAwMDAwMDAxMDA0MDBFMkQzMworOjEwMDQ3MDAwMDAwMDAwNjIwMDAwMDAwQTAwMjAwRTJEMDAwMDAwMDBCNQorOjEwMDQ4MDAwMDAwMDAwMEIwMDQwMTIyRDAwMDAwMDZBMDAwMDAwMDA3OAorOjEwMDQ5MDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMDAyODEyMjNEOQorOjEwMDRBMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0MDAwMDAwMDBGMgorOjEwMDRCMDAwN0ZDMDAwMDAwMDI4MTYyMzAwMDAwMDAwMDAwMDAwMTQ4OAorOjEwMDRDMDAwMDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAxMDAzMzE2MjU2MQorOjEwMDREMDAwMDAwMDAwMDA4MDAwMDAwMDAwMjgwRTIzMDAwMDAwMDA0MworOjEwMDRFMDAwMDAwMDAwMDAwMDI5MENBMzAwMDAwMDAwM0ZGRkZDMDBGQQorOjEwMDRGMDAwMDAyOTBFMjMwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMyMQorOjEwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwNkQ4QQorOjEwMDUxMDAwMDAwMDAxMDAwMDQwMUMxMTAwMDAwMDcwMDAwMDAwMERGMAorOjEwMDUyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMEYwMDAyODFFMjcwMworOjEwMDUzMDAwMDAwMDAwMDAwMDAwMDAwNDAwMjIxRTI3MDAwMDAwMDA1MAorOjEwMDU0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMERBOAorOjEwMDU1MDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGMEZGMDAyODFBMzBDMworOjEwMDU2MDAwMDAwMDAwMDAwMDAwQTAyODAwMjA0NDExMDAwMDAwMDA0RQorOjEwMDU3MDAwMDAwMDAwMDAwMDI5NDhFNjAwMDAwMDAwMDAwMEEwMTg2QworOjEwMDU4MDAwMDAyMDQ0MTEwMDAwMDAwMDNGRkZGRkZGMDAyODRBMjMyNQorOjEwMDU5MDAwMDAwMDAwMDAwMDAwQTAxMDAwMjA0NDExMDAwMDAwMDAzNgorOjEwMDVBMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMkRCMgorOjEwMDVCMDAwMDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAwMDAyRjAwQTMwNgorOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAwODBERgorOjEwMDVEMDAwMDAwMDAwMkUwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwMDVFMDAwMDAyRjAwQTQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA2QworOjEwMDVGMDAwMDAwMDAwODEwMDAwMDAwMDAwNDAwMDAwMDAwMDAwODdCMworOjEwMDYwMDAwMDAwMDAwMkQwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMkUxNgorOjEwMDYxMDAwMDAyMDM2MjQwMDAwMDAwMDAwMDAwMDFEMDAyMDFFMkREOAorOjEwMDYyMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3MDAwMDAwMDA3RQorOjEwMDYzMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDg3MDAwMDAwMDAzRgorOjEwMDY0MDAwMDA2MDAwMDAwMDAwMDVFRDAwMDAwMDAwMDA2MDAwMDBGOAorOjEwMDY1MDAwMDAwMDA1RTEwMDAwMDAwMjAwMjEwRTIyMDAwMDAwMDA2MQorOjEwMDY2MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDhBMDAwMDAwMTgxNAorOjEwMDY3MDAwQzA0MDM2MjAwMDAwMDA5MDAwMDAwMDAwMkVFMDAwMDA4NgorOjEwMDY4MDAwMDAwMDAwOEUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwOEQ0MworOjEwMDY5MDAwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDhGMDAwMDAwMDM0QgorOjEwMDZBMDAwMDA0MDBFMkQwMDAwMDA4RjAwMDAwMDBDMDAyMDBFMkREOQorOjEwMDZCMDAwMDAwMDAwMDAwMDAwMDAxODAwMjAzNjIzMDAwMDAwMDBBOQorOjEwMDZDMDAwMDAwMDAwMDMwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDBENgorOjEwMDZEMDAwMTRDMDAwMDAwMDAwMDA5NTAwMDBBMDBDMDAyMDQ0MTE5MAorOjEwMDZFMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBFMgorOjEwMDZGMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDlEMDAwMEEwMEM2OQorOjEwMDcwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFGQgorOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMDJFRTAwMDAwMDAwMDAwOUIzMAorOjEwMDcyMDAwMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDlBMDAwMDAwMDIyMQorOjEwMDczMDAwMDA0MDBFMkQwMDAwMDA5QzAwMDAwMDAzMDA0MDBFMkQyNAorOjEwMDc0MDAwMDAwMDAwOUMwMDAwMDAwQzAwMjAwRTJEMDAwMDAwMDBBNgorOjEwMDc1MDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMDc2MDAwMDAzQTBDMDIwMDAwMDAwMDAwM0YwMDAwMDAyODBFMjNBOQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjEwRTIzMDAwMDAwMDAxNworOjEwMDc4MDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMUVCRgorOjEwMDc5MDAwMDAyMTAyMkIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAzNworOjEwMDdBMDAwMDAwMDAwQTQwMDAwMDAxQ0MwMjAzNjIwMDAwMDAwMDA1MworOjEwMDdCMDAwMDAwMDAwMUYwMDIxMDIyQjAwMDAwMDAwMDAwMDAwMDBDQworOjEwMDdDMDAwMTRDMDAwMDAwMDAwMDBBNzAwMDAwMDFCQzAyMDM2MjA1RAorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAwODAwMjEwRTJCMDAwMDAwMDBCNworOjEwMDdFMDAwMDAwMDAwN0YwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMDdGMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBCOQorOjEwMDgwMDAwMDAwMDAwREIwMDAwMDAwMDI3MDAwMDAwMDAwMDAwMDBFNgorOjEwMDgxMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMjhDODEwMDAwMDA2OQorOjEwMDgyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTFENAorOjEwMDgzMDAwMDAwMDAwMDAwMDAwMDAwQzAwMjIxRTMwMDAwMDAwMDAzQworOjEwMDg0MDAwOTk4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDQxNgorOjEwMDg1MDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDA4MDAyMjEyMjREOQorOjEwMDg2MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjAxODExMDAwMDAwMDAyRgorOjEwMDg3MDAwMDAwMDAwMDAwMDI5MUNFNDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMDg4MDAwMDA2MDQ4MDcwMDAwMDEyODlCMDAwMDAwMDAyMDQ0MTE4MAorOjEwMDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBFRQorOjEwMDhBMDAwOUMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzNworOjEwMDhCMDAwMDAzMzE0NkYwMDAwMDAwMDAwMDAwMDAxMDAzMzNFMjNFRAorOjEwMDhDMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDAwNworOjEwMDhEMDAwMDAwMDAwMDAwMDIwM0MwNTAwMDAwMDAwODEwMDAwMDAzNgorOjEwMDhFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTEwQworOjEwMDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAxMDEwMDAwMDAwMDBCOAorOjEwMDkwMDAwMDAwMEUwMDcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMEY3QworOjEwMDkxMDAwMDAyMTAyMkIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBCNQorOjEwMDkyMDAwMDAwMDAwQzUwMEY4RkYwODAwMjA0ODExMDAwMDAwMDA4QQorOjEwMDkzMDAwOTgwMDAwMDAwMDQwNDgxMTAwMDAwMEQ2MDAwMDAwRjBDMAorOjEwMDk0MDAwMDAyODBFMjIwMDAwMDAwMDAwMDAwMEEwMDAyRjAyMjM1QgorOjEwMDk1MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAwRDRGNworOjEwMDk2MDAwMDAwMDAwMTMwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDExOAorOjEwMDk3MDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAzNworOjEwMDk4MDAwMDAwMDAwQ0YwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDA0MgorOjEwMDk5MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMENFMDAwMDNGMDA1RQorOjEwMDlBMDAwMDA0MDBDMTEwMDAwMDBEMDAwMDAxRjAwMDA0MDBDMTE5RQorOjEwMDlCMDAwMDAwMDAwRDAwMDAwMEYwMDAwMjAwQzExMDAwMDAwMDAxQgorOjEwMDlDMDAwMDAzODAwMDkwMDI5NEEyMzAwMDAwMDAwM0YwMDAwMDAxMQorOjEwMDlEMDAwMDAyODBFMkIwMDAwMDAwMDAwMDAwMDAyMDAyMjBFMjM2MQorOjEwMDlFMDAwMDAwMDAwMDAwMDAwMDAwNzAwNDk0QTIzMDAwMDAwRDY3NAorOjEwMDlGMDAwMDAzODBGMDkwMDIwNDgxMTAwMDAwMDAwNjgwMDAwMDdCRgorOjEwMEEwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA4MDAyMTRBMjdEMworOjEwMEExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA1RAorOjEwMEEyMDAwMDYwQTAyMDAwMDI5NEEyNDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMEEzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFDNAorOjEwMEE0MDAwMDAwMDAwMDAwMDAwQTIwMjAwMjA0NDExMDAwMDAwMDA4RAorOjEwMEE1MDAwMDBGRjAwMDAwMDI4NEEyMjAwMDAwMDAwMDAwMDAwMzBEMworOjEwMEE2MDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDJFMDAyMDEyMkQ5RQorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMDgzMDAwMDAwMDBDNAorOjEwMEE4MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEUzMDAwMDAwMDA5NworOjEwMEE5MDAwMDA2MDAwMDAwMDAwMDVFNzAwMDAwMDAwMDA0MDAwMDBDQQorOjEwMEFBMDAwMDAwMDAwRTQwMDAwMDAwMDAwNjAwMDAwMDAwMDA1RUExMworOjEwMEFCMDAwMDAwMDAwMDcwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDVCQgorOjEwMEFDMDAwMDAyMjBFMjIwMDAwMDAwMDAwMTAwMDAwMDAyODBFMjM2QgorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkyMDY4MDAwMDAwMDA2NQorOjEwMEFFMDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwMDAwMDAwRUZDRgorOjEwMEFGMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTIwNjhFQworOjEwMEIwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjAwRTJEMDAwMDAwMDA2RAorOjEwMEIxMDAwMDAwMDAwMDMwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDA4QworOjEwMEIyMDAwMTRFMDAwMDAwMDAwMDBGMTAwMDAwMDBCMDAyMTAyMjg4QQorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwRjFGMAorOjEwMEI0MDAwMDAwMDA0MDAwMDI5MjIyODAwMDAwMDAwMDAwMDAwMUExNAorOjEwMEI1MDAwMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDFDMDAyMTBFMjJBQQorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwRjZCQgorOjEwMEI3MDAwMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMEI4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDFFMDAyMTBFMjI3RAorOjEwMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAxMDQ3QworOjEwMEJBMDAwMDAwMEEzMEYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTMwQgorOjEwMEJCMDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjM4NQorOjEwMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAwRkQ1QworOjEwMEJEMDAwRkZGRkZGRkYwMDQwNDgxMTAwMDAwMTA0MDAwMDAwMDI3OQorOjEwMEJFMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBFNQorOjEwMEJGMDAwMDAwMDAxMDAwMDAwRkZGRjAwNDA0ODExMDAwMDAxMDQ1OAorOjEwMEMwMDAwMDAwMDAwMDQwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA4QworOjEwMEMxMDAwMENDMDAwMDAwMDAwMDEwMzAwMDAwMEZGMDA0MDQ4MTE2QworOjEwMEMyMDAwMDAwMDAxMDQwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA0NQorOjEwMEMzMDAwMDAwMkM0MDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUY1QQorOjEwMEM0MDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA3RgorOjEwMEM1MDAwMDAwMDAxMEIwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDBFOQorOjEwMEM2MDAwMDAwMDAwMTkwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMThEQQorOjEwMEM3MDAwNDAyMjRBMjAwMDAwMDAwMDAwMDAwMDEwQzA0MjRBMjAyQworOjEwMEM4MDAwMDAwMDAxMEQwMDAwMDAwMDAwMjAwQzExMDAwMDAwMDAxOQorOjEwMEM5MDAwMDAwMDAwMTkwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMENBMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE1MgorOjEwMENCMDAwMDAwMDAwMDAwMDAwMDAwQTAwMjAxMDExMDAwMDAwMDBFOQorOjEwMENDMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMENEMDAwMENFMDAwMDAwMDAwMDExNDAwMDAwMDAwMDAyMDQ4MTE5QQorOjEwMENFMDAwMDAwMDAwMDAwMDAwMDAwMTAwNTMxMjI0MDAwMDAxMTA2OQorOjEwMENGMDAwRkZCRkZGRkYwMDI4M0EyRTAwMDAwMDAwMDAwMDAwMUI4RAorOjEwMEQwMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBDQQorOjEwMEQxMDAwMDAwMDAxMjc4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCNQorOjEwMEQyMDAwMDAwMDAwMEQwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMTgyNQorOjEwMEQzMDAwMDAyMjBFMzAwMDAwMDAwMEZDMDAwMDAwMDAyODBFMjNGRQorOjEwMEQ0MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBBRAorOjEwMEQ1MDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwQworOjEwMEQ2MDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDBFMDAyMDQ0MTFFMAorOjEwMEQ3MDAwMDAwMDAwMDAwN0Y4RkYwODAwMjA0ODExMDAwMDAwMDBGNAorOjEwMEQ4MDAwMDAwMDAwMDAwMDI5NEEyMzAwMDAwMDAwMDAwMDAwMjRBOQorOjEwMEQ5MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA4MDAyMTRBMjc0RQorOjEwMERBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBDQQorOjEwMERCMDAwMDYwQTAyMDAwMDI5NEEyNDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwMERDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEzMQorOjEwMEREMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDA5MworOjEwMERFMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwQworOjEwMERGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTE2OAorOjEwMEUwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMjA0ODExMDAwMDAwMDBFOQorOjEwMEUxMDAwMDAwMDAwMDAwMDIwNDgwNjAwMDAwMDAwMDAwMDAwMDg1QworOjEwMEUyMDAwMDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAxOQorOjEwMEUzMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2MTQzRgorOjEwMEU0MDAwMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMEU1MDAwMTRDMDAwMDAwMDAwMDYxMzAwMDAwMDA0MDA0MDRDMTEwNAorOjEwMEU2MDAwMDAwMDAxMkUwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEJFOAorOjEwMEU3MDAwMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkZFMDAwMDAwMDBGRAorOjEwMEU4MDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTFCNAorOjEwMEU5MDAwMDAwMDAxOUYwMDAwMDAwMDAwNjAwMDAwMDAwMDAxNTEwMAorOjEwMEVBMDAwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTA5RQorOjEwMEVCMDAwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNDAyODA2MjA5MworOjEwMEVDMDAwMDAwMDAwMDAwMDAwMDAxMEMwMjEwQTIwMDAwMDAwMDAwNworOjEwMEVEMDAwMDAwMDAwMDAwMDM0MTQ2MTAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMEVFMDAwMDA3NDE4ODIwMDAwMDJBNDAwMDFBMUZEMDA2MDQ0MTFGQQorOjEwMEVGMDAwMDAwMDAyQzkwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDA4OQorOjEwMEYwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTM4MDAwMDAwMDBEQworOjEwMEYxMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwMDA2MDAwMDA2QworOjEwMEYyMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMDAwMDAyRkU0MQorOjEwMEYzMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDA3QworOjEwMEY0MDAwMDA2MDA4MTEwMDAwMDE5RjAwMDAzRkZGMDAyRjAyMkZFQQorOjEwMEY1MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDBBNQorOjEwMEY2MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTUxMDAwMDAwMTBCRgorOjEwMEY3MDAwNDAyMTBFMjAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjBDQQorOjEwMEY4MDAwMDAwMDAwMDAwMDAwMDAxMDQwMjExNjIwMDAwMDAwMDBCQQorOjEwMEY5MDAwMDAwMEZGRkZDMDY4MUEyMDAwMDAwMkE0MDAwMUExRkRBQworOjEwMEZBMDAwMDA2MDQ0MTEwMDAwMDJDOTAwMDAzRkZGMDAyRjAyMkYyMworOjEwMEZCMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxNDkxQgorOjEwMEZDMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDIyNUM5RQorOjEwMEZEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAzMDBBMkYzMgorOjEwMEZFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjEwQTIyMDAwMDAwMDBCMworOjEwMEZGMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwMDAwMDIyNTZEMgorOjEwMTAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMDAyMDQ4MTFEOAorOjEwMTAxMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDBCRQorOjEwMTAyMDAwMDAwMDAwMDEwMDgwNDgxMTAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMTAzMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDAwMDBFNQorOjEwMTA0MDAwMDAwMDAxN0MwMDAwMDAwMDAwNjAwMDAwMDAwMDAxOEQzNQorOjEwMTA1MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMTA2MDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDJDMDg0MAorOjEwMTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyNDExMDAwMDAwMDAxQgorOjEwMTA4MDAwMDAwMDAwMDAwMDIwMjgxMTAwMDAwMDAwMDAwMDIyNTY4RgorOjEwMTA5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MDAyMDQ4MTE0QworOjEwMTBBMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDA0RAorOjEwMTBCMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwOTM4MDAwMDBBMQorOjEwMTBDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyMDAyMjFFMjk0MAorOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzA0OEVCMDAwMDAxODlFMworOjEwMTBFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkE0MDAwMDAwMDFGOQorOjEwMTBGMDAwNDAzMzA2MjAwMDAwMDAwMDAwMDAwMDAwQzAzMDI0MDkzQQorOjEwMTEwMDAwMDAwMDAwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDA0MQorOjEwMTExMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMTEyMDAwMDA2MDAwMDAwMDAwMDI4Qzk1MDAwMDAwMDAyMDQ0MTFDNworOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDA1RAorOjEwMTE0MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTczMDAwMDAwMDAzRgorOjEwMTE1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxMDA1MzA2MjFFQworOjEwMTE2MDAwMDAwMDAxNkY5MjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwOAorOjEwMTE3MDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwMTg0MDAwMUExRkRFMworOjEwMTE4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDEzMDAyMDA2MkQ4NAorOjEwMTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgwNDJBMDAwMDAyRTRDMworOjEwMTFBMDAwMDAwMDAwMDAwMDIwMjgwOTAwMDAwMDAwMDAwMDNGRkZCMAorOjEwMTFCMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMworOjEwMTFDMDAwMDAwMDAxNjUwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDFCNAorOjEwMTFEMDAwMDAwMDAyMTAwMDYwMDQxMTAwMDAwMkZFMDAwMDNGRkY0QQorOjEwMTFFMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBCMworOjEwMTFGMDAwMDAwMDAxODEwMDAwMDAxQkMwMjAzNjIwMDAwMDAwMDAxQworOjEwMTIwMDAwMDAwMDAwMUNDMDIwMzYyMDAwMDAwMDAwM0Y4MDAwMDBDRAorOjEwMTIxMDAwMDAyMDA0MTEwMDAwMDAwMDQ2MDAwMDAwMDA2MDA4MTFEQQorOjEwMTIyMDAwMDAwMDAxOUYwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDA5RQorOjEwMTIzMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDNGRkY1RQorOjEwMTI0MDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA3MgorOjEwMTI1MDAwMDAwMDAxODgwMDAwMDAwMTAwODA0ODExMDAwMDAwMDAyQgorOjEwMTI2MDAwMDAwMDAwMjEwMDgwNDgxMTAwMDAwMDAwMDAwMEZGRkY4NgorOjEwMTI3MDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwQzAyMTEyMjBCNQorOjEwMTI4MDAwMDAwMDAwMDAwMDAwRkZGRjQwMjgxNjIwMDAwMDAwMDBDMgorOjEwMTI5MDAwMDAwMDAwMTBDMDgxMUEyMDAwMDAwMDAwODEwMDAwMDA0MgorOjEwMTJBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTE0QQorOjEwMTJCMDAwMDAwMDAwMDAwMDAwMDAwODAwMjIxRTMwMDAwMDAwMDBCNgorOjEwMTJDMDAwMDAwMDAwMzIwMDIwMUEyRDAwMDAwMDAwMDAwMEUwMDBBNQorOjEwMTJEMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRkJGRjA5MDAyMDQ4MTExRQorOjEwMTJFMDAwMDAwMDAwMDAwMDAwMDAxMTAwMjAyMjJEMDAwMDAwMDA3RQorOjEwMTJGMDAwMDAwMDFGRkYwMDI5NEEyODAwMDAwMDAwMDAwMDAwMDYyRgorOjEwMTMwMDAwMDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwMDAyOTIwRTgzRAorOjEwMTMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA4MDAwMDAwMDA1RAorOjEwMTMyMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAzMgorOjEwMTMzMDAwMDAyOTRBMjYwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE5QgorOjEwMTM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAyNAorOjEwMTM1MDAwMDAwMDAxMDAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDgzQgorOjEwMTM2MDAwMDA2MjFFMjgwMDAwMDEyODAwMDAwMDA4MDA4MjIyMjhEOAorOjEwMTM3MDAwMDAwMDAwMDAwMDAyQzAwMDAwMjA0NDExMDAwMDAwMDAzNgorOjEwMTM4MDAwMDAwMDAwMUIwMDYwMEUyRDAwMDAwMUFBMDAwMDAwMUNFMAorOjEwMTM5MDAwMDA2MDBFMkQwMDAwMDFBQTAwMDBDMDA4MDAyMDQ0MTFDQQorOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjAwRTJEMDAwMDAwMDBDNQorOjEwMTNCMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMUE2MDAwMDAwMDBCMgorOjEwMTNDMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDE3RgorOjEwMTNEMDAwMDAwMDAwMDAzOTAwMDAwMDAwMjA0ODExMDAwMDAwMDA1QgorOjEwMTNFMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMTNGMDAwMDA4MDQ4MDIwMDAwMDAwMDAwMDAwMDIwMDAyMDJFMkQ4OAorOjEwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IwRDYzMDAwMDAwMDAzMQorOjEwMTQxMDAwMDAwMDAwMDgwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMTAyNQorOjEwMTQyMDAwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDE4MDAyMjRBMjM4NgorOjEwMTQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwODA0ODAzMDAwMDAwMDBFMQorOjEwMTQ0MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDEwMDAyMQorOjEwMTQ1MDAwMDA2MDA0MTEwMDAwMDJGRTAwMDAwMDAwMDAyMDA0MTFFMgorOjEwMTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxOUY2MworOjEwMTQ3MDAwMDAwMDAwMDcwMDIxMDYyRjAwMDAwMDAwMDAwMDAwMTlGNgorOjEwMTQ4MDAwMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAxMDAyMDJDMTFBNworOjEwMTQ5MDAwMDAwMDAwMDAwMDAwRkZGRjQwMjgyMjIwMDAwMDAwMDBBNAorOjEwMTRBMDAwMDAwMDAwMEYwMDI2MjIyODAwMDAwMDAwMDAwMDAwMTBBRAorOjEwMTRCMDAwNDAyMTI2MjAwMDAwMDAwMDAwMDAwMDBGMDAyNjI2MjkwMQorOjEwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyMDAwMDAwMDBEMgorOjEwMTREMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUIwNAorOjEwMTRFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEzMQorOjEwMTRGMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxQ0QzMgorOjEwMTUwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwODE2NworOjEwMTUxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE0MAorOjEwMTUyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA0MQorOjEwMTUzMDAwMDAwMDAwODAwMDIwMUMxMTAwMDAwMDAwMDAwMDAwMDBERQorOjEwMTU0MDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA1NworOjEwMTU1MDAwMDAwMDAxQzkwMDAwMDAwMDAwNjAwMDAwMDAwMDAxRDY4QQorOjEwMTU2MDAwMDAwMDAwMDEwMDUzMUUyNzAwMDAwMUM1MDAwMDAwMDExQgorOjEwMTU3MDAwMDAyMDJDMTEwMDAwMDAwMDAwMDAwMDFGMDAyODBBMjI5QgorOjEwMTU4MDAwMDAwMDAwMDAwMDAwMDAxRjAwMjgyQTJBMDAwMDAwMDBDMAorOjEwMTU5MDAwMDAwMDAwMDEwMDUzMDYyMTAwMDAwMUJFMDAwMDIyNUM5MworOjEwMTVBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyMDAzMDRBMkYxQgorOjEwMTVCMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAxOQorOjEwMTVDMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDFBMAorOjEwMTVEMDAwMDAzMDFFMkYwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjczNgorOjEwMTVFMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwRgorOjEwMTVGMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUQ2MDAwMDAwMDFCMworOjEwMTYwMDAwMDA1MzFFMjcwMDAwMDFEMjAwMDBGRkZGNDAyODBFMjBEQgorOjEwMTYxMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjYwRTIzMDAwMDAwMDA2NAorOjEwMTYyMDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwMDAwMDAwMEY4OAorOjEwMTYzMDAwMDAyNjEyMjQwMDAwMDAwMDAwMDAwMDAwMDAyMDE0MTEwOQorOjEwMTY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAxODExMDAwMDAyQTQ2QgorOjEwMTY1MDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMTY2MDAwMDAyRjAyMkIwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAzMgorOjEwMTY3MDAwMDAwMDAxRTUwMDAwMDAxMDAwMjIxNjI4MDAwMDAwMDAxNAorOjEwMTY4MDAwRkZGRjAwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMEZGRkZGQgorOjEwMTY5MDAwMDAyODFBMjkwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4QzVBOQorOjEwMTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODBBMDAwMDAwMDBDOAorOjEwMTZCMDAwMDAwMDAwMDAwMDIwMkMxMTAwMDAwMDAwMDAwMDAwMTBCRAorOjEwMTZDMDAwMDAyMjE2MjMwMDAwMDAwMEZGRkYwMDAwMDAyODE2MjU1RQorOjEwMTZEMDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgxQTI0MDAwMDAwMDBBNgorOjEwMTZFMDAwMDAwMDAwMDAwMDI5NDhDNTAwMDAwMDAwMDAwMDAwMDBDNAorOjEwMTZGMDAwMDA3MzE1MDMwMDAwMDFGMjAwMDAwMDAwMDAyMDE4MDUyRgorOjEwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMxNTI0MDAwMDAxRjIzQQorOjEwMTcxMDAwMDAwMDAwMDAwMDJEMTRDNTAwMDAwMDAwMDAwMDAwMDBDMworOjEwMTcyMDAwMDAzMDA4QTIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDI3NQorOjEwMTczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyMDAwMDAwMDA1RgorOjEwMTc0MDAwMDAwMDAwMDAwMDIwMjAwMzAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMTc1MDAwMDA4MDI0MDQwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMjU4QQorOjEwMTc2MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2MTM4QworOjEwMTc3MDAwMDAwMDAwMDAwMDJCMTQwNTAwMDAwMDAwMDAwMDAwMDEyNAorOjEwMTc4MDAwMDA5MDE2MjUwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAyRQorOjEwMTc5MDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMDAwMDAyRkVDOQorOjEwMTdBMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMTdCMDAwMDA2MDA4MTEwMDAwMDE5RjAwMDAyMjU2MDAyMDQ0MTEyMworOjEwMTdDMDAwMDAwMDAwMDAwMDAwMDAxQTAwMjk0QTIyMDAwMDAwMDA2QQorOjEwMTdEMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDNGRkZFQgorOjEwMTdFMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBBRAorOjEwMTdGMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwNQorOjEwMTgwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNFMgorOjEwMTgxMDAwMDAzODRBMjEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTExMworOjEwMTgyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAzRQorOjEwMTgzMDAwMDAwMEZGRkY0MDI4MTIyMDAwMDAwMDAwMDAwMDAwMTAwMAorOjEwMTg0MDAwQzAyMTFBMjAwMDAwMDAwMDAwMDBGRkZGNDAyODBFMjBFOQorOjEwMTg1MDAwMDAwMDAwMDAwMDAwMDAxMEMwMjExNjIwMDAwMDAwMDA2MQorOjEwMTg2MDAwMDAwMDAwMDAwMDc0MTQ2NTAwMDAwMkE0MDAwMUExRkQ0NgorOjEwMTg3MDAwMDA2MDQ0MTEwMDAwMDJDOTAwMDAwMDAxMDAzMzA2MjE4RAorOjEwMTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwNgorOjEwMTg5MDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMjA2MDAwMDNGRkYzNgorOjEwMThBMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwQworOjEwMThCMDAwMDAwMDAxRkYwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEyMworOjEwMThDMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUM1MDAwMDAwMDBFRQorOjEwMThEMDAwMDA0MDA0MEYwMDAwMDIwMDAwMDAwMDAwMDA2MDAwMDA1MworOjEwMThFMDAwMDAwMDA1QjIwMDAwMDAwMDAwNjAwMDAwMDAwMDA1QzUxNworOjEwMThGMDAwMDAwMDAyMTAwMDYwMDQxMTAwMDAwMkZFMDAwMDAwMDA2MQorOjEwMTkwMDAwMDA2MDAwMDAwMDAwMDE4RDAwMDAwMDAwMDA2MDAwMDA4OQorOjEwMTkxMDAwMDAwMDAxODkwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTQzNworOjEwMTkyMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMjhDOTM4MDAwMDBCNgorOjEwMTkzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDhDMgorOjEwMTk0MDAwMDAwMDAwMDA5NTAwMDAwMDAwMjA0NDExMDAwMDAwMDA4RAorOjEwMTk1MDAwMDAwMDAwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAyNworOjEwMTk2MDAwMENFMDAwMDAwMDAwMDIxRjAwMDAwMDAwQzA0MDQ4MDAyMgorOjEwMTk3MDAwMDAwMDAyMUM5MjAwMDAwMDAwMjA0NDExMDAwMDAwMDA0MgorOjEwMTk4MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDIyNTZCNworOjEwMTk5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MDAyMDQ4MTE0MworOjEwMTlBMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDA0NAorOjEwMTlCMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwRQorOjEwMTlDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEyOAorOjEwMTlEMDAwMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDBGMworOjEwMTlFMDAwMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkU0MDAwMDAwMDA5QworOjEwMTlGMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwMDA2MDAwMDA4MgorOjEwMUEwMDAwMDAwMDA1QjIwMDAwQTAwQzAwMjA0NDExMDAwMDAwMDBGRQorOjEwMUExMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMUEyMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwRQorOjEwMUEzMDAwMDAwMDAwMEIwMDAwMDAxODQwMjEwQTIwMDAwMDAwMDBGOAorOjEwMUE0MDAwMDAwMDAwMDMwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA0MAorOjEwMUE1MDAwMEFFMDAwMDAwMDAwMDIzNTAwMDAwMDFBMDAyMDIyMkREQworOjEwMUE2MDAwMDAwMDAwMDAwMDA4MDEwMTAwMjkyMjI4MDAwMDAwMDBGOQorOjEwMUE3MDAwMDAwMDAwMUEwMDIwMzYyODAwMDAwMDAwMDAwMEEzMEMxRgorOjEwMUE4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBCOQorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxRQorOjEwMUFBMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMjNBMDAwMDAwMDBCMgorOjEwMUFCMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDEwMDA2MDA0MTEzNgorOjEwMUFDMDAwMDAwMDAyRkUzRjgwMDAwMDAwMjAwNDExMDAwMDAwMDAyMgorOjEwMUFEMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMTlGMDAwMDIyNUM2RgorOjEwMUFFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwNQorOjEwMUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyNjUxRgorOjEwMUIwMDAwMDAwMDAwMUQwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDE0QworOjEwMUIxMDAwMDAyMTFFMjcwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA2QgorOjEwMUIyMDAwMDAwMDAyNTMwMDAwMDAxODAwMjAxRTJEMDAwMDAwMDBERAorOjEwMUIzMDAwMDAwMEZGRkYwMDI4MUUyNzAwMDAwMDAwMDAwMDAwMDAzQQorOjEwMUI0MDAwMDAzNDFDMjcwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDA0QworOjEwMUI1MDAwMDAwMDAyNDgwMDAwMDAwMDAwMjAxQzExMDAwMDAwMDBFRQorOjEwMUI2MDAwMDAwMDAwMDAwMDJGMDBFNTAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMUI3MDAwMDhDMDAwMDAwMDAwMDI0QjAwMDAwMDAwMDAyMDE0MDcxNQorOjEwMUI4MDAwMDAwMDAwMDAwMDAwMDAxODAwMjAxRTJEMDAwMDAwMDBEMgorOjEwMUI5MDAwMDAwMDAwMTAwMDIxMUUyNzAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMUJBMDAwMDAzNDFDNDcwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDBDQworOjEwMUJCMDAwMDAwMDAyNTAwMDAwMDAwMDAwMjAxQzExMDAwMDAwMDA4NgorOjEwMUJDMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMUJEMDAwMDhDMDAwMDAwMDAwMDI1MzAwMDAwMDAwMDAyMDE4MDdBOQorOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQUFFOQorOjEwMUJGMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGOAorOjEwMUMwMDAwMDAzNDIwMjMwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDA4QgorOjEwMUMxMDAwMDAwMDAyNUIwMDAwMDAwMDAwMzQyMDQ0MDAwMDAwMDBDRgorOjEwMUMyMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjVBMDAwMDAwMTY3MAorOjEwMUMzMDAwMDA0MDQ4MTEwMDAwMDI1RjAwMDAwMDE4MDA0MDQ4MTFGOQorOjEwMUM0MDAwMDAwMDAyNUYwMDAwMDAwMDAwMzQyMDQ0MDAwMDAwMDA5QgorOjEwMUM1MDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjVFMDAwMDAwMTczQgorOjEwMUM2MDAwMDA0MDQ4MTEwMDAwMDI1RjAwMDAwMDE5MDAyMDQ4MTFFOAorOjEwMUM3MDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDA1MgorOjEwMUM4MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkQzQgorOjEwMUM5MDAwMDA2MDQ0MTEwMDAwMDJEMjAwMDAzRkZGMDAyRjAyMkYxRAorOjEwMUNBMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAyM0YyNworOjEwMUNCMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMTAwRgorOjEwMUNDMDAwNDAyMTA2MjAwMDAwMDAwMDAwMDBGRkZGQzAyODBBMjA3RAorOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDA2NQorOjEwMUNFMDAwMDAwMEZGRkZDMDI4MTIyMDAwMDAwMDAwMDAwMDAwMTBDQworOjEwMUNGMDAwNDAyMTE2MjAwMDAwMDAwMDAwMDBGRkZGQzA4ODFBMjBDRAorOjEwMUQwMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBERAorOjEwMUQxMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIwMDQyMQorOjEwMUQyMDAwMDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDAwMDA2MDAwMDA4NAorOjEwMUQzMDAwMDAwMDA1QjIwMDAwMDAwMEMwNjAwMDAwMDAwMDAyOEMzRQorOjEwMUQ0MDAwMDAwMDAwMDUwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDgyRgorOjEwMUQ1MDAwMDAyMjBBMjIwMDAwMDAwMDAwMDAwMDM0MDAyMDFBMkQ5QQorOjEwMUQ2MDAwMDAwMDAwMDAwMDAwMDAyNDAwMjAxRTJEMDAwMDAwMDBFNAorOjEwMUQ3MDAwMDAwMDcwMDAwMDI4MUUyNzAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMUQ4MDAwMDAzMTFDRTYwMDAwMDAwMDAwMDAwMDMzMDAyMDFBMkQ4NgorOjEwMUQ5MDAwMDAwMDAwMDAwMDAwMDAwQzAwMjIxQTI2MDAwMDAwMDBENQorOjEwMURBMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMURCMDAwMDZFMDAwMDAwMDAwMDI3QjAwMDAwMDAwMDAyMDFDMTE3MworOjEwMURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwQzExMDAwMDAwMDBENgorOjEwMUREMDAwMDAwMDAwMzQwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMTA0NgorOjEwMURFMDAwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwMDA2OTFDRTI0MworOjEwMURGMDAwMDAwMDAxMjg5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAzMgorOjEwMUUwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwOTUwMDAwMDBDRQorOjEwMUUxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkZFRAorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAyODYzRQorOjEwMUUzMDAwMDAwMDAwMDEwMDMzM0UyRjAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMUU0MDAwRDkwMDQ4MDAwMDAwMDAwMDkyMDAwMDAwMDAyMDQ0MTE2QQorOjEwMUU1MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA1QQorOjEwMUU2MDAwMDAwMDAwMjQwMDQwMzYyNzAwMDAwMDAwMDAwMDAwMENBNQorOjEwMUU3MDAwQzAyMjBBMjAwMDAwMDAwMDAwMDAwMDMyMDAyMDM2MjJBQworOjEwMUU4MDAwMDAwMDAwMDAwMDAwMDAzMUMwNDAzNjIwMDAwMDAwMDBDQgorOjEwMUU5MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDk3RQorOjEwMUVBMDAwMDAyMDQ4MTEwMDAwMDAwMEExMDAwMDAwMDAyMDQ0MTFBMworOjEwMUVCMDAwMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExMDAwMDAwMDA0OAorOjEwMUVDMDAwMDAwMDAwMjkwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMUVEMDAwMDAyQzFDRTMwMDAwMDAwMDAwMDAwMDI5MDAyMDM2MjczMQorOjEwMUVFMDAwMDAwMDAwMDAwMDAwMDAyQTAwMjAxRTJEMDAwMDAwMDA1RAorOjEwMUVGMDAwMDAwMDAwMDAwMDJDMUNFNDAwMDAwMDAwMDAwMDAwMkE4QworOjEwMUYwMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDJCMDAyMDFFMkRCRQorOjEwMUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEEzMDAwMDAwMDBDRAorOjEwMUYyMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwMDAwMDAwMkIzNQorOjEwMUYzMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDJDMDAyMDFFMkQ4RAorOjEwMUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDA3QworOjEwMUY1MDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwMDAwMDAwMkMwNAorOjEwMUY2MDAwMDA4MDM2MjcwMDAwMDAwMDAwMDAwMDI5MDAyMDM2MjNGMgorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAyQTAwMjAzNjI0MDAwMDAwMDBCRAorOjEwMUY4MDAwMDAwMDAwMDAwMDMxMUNBMzAwMDAwMDAwMDAwMDAwMkIzNgorOjEwMUY5MDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQzRCMworOjEwMUZBMDAwMDAwMDAwMDAwMDAwMDAyQzAwODAzNjI3MDAwMDAwMDAyOAorOjEwMUZCMDAwMDAwMDAwMjIwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjM1RgorOjEwMUZDMDAwMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDFEMDAyMDFFMkQwQgorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3MDAwMDAwMDBCNQorOjEwMUZFMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMkM1MDAwMDAwMDA1NgorOjEwMUZGMDAwMDA0MDAwMDAwMDAwMDJDMjAwMDAwMDIyMDAyMDM2MjczRQorOjEwMjAwMDAwMDAwMDAwMDAwMDAwMDAyMzAwMjAzNjI4MDAwMDAwMDAyRgorOjEwMjAxMDAwMDAwMDAwMUQwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIzNgorOjEwMjAyMDAwMDAyMTAyMjcwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA3MgorOjEwMjAzMDAwMDAwMDAyQzIwMDAwMDAwMzAwMjEwMjI3MDAwMDAwMDA4RgorOjEwMjA0MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMkM1MDAwMDAwMkJBQQorOjEwMjA1MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAyRTAwRTEwNgorOjEwMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAyQzAwMDAwMDAwMDAyQzVFNworOjEwMjA3MDAwMDAwMDAwMjkwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDBDQworOjEwMjA4MDAwMDAzMTIwQTEwMDAwMDAwMDAwMDAwMDAwMDAyRTAwRTg0OAorOjEwMjA5MDAwMDAwMDAwMDAwMDAwMDAwMDA2QzAwMDAwMDAwMDAyQzVCMworOjEwMjBBMDAwMDAwMDAwMkMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMjBCMDAwMDAyRTAwRTIwMDAwMDAwMDAwMDAwMDAwMDJDMDAwMDA0RQorOjEwMjBDMDAwMDAwMDAyQzUwMDAwMDAyQTAwMjAxRTJEMDAwMDAwMDBCNAorOjEwMjBEMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMjBFMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwMDZDMDAwMDAxNAorOjEwMjBGMDAwMDAwMDAyQzUwMDAwMDAwMDAwNjAwMDAwMDAwMDA1RURDNworOjEwMjEwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMjlFMDAwMDAwMDBDRgorOjEwMjExMDAwMDA0MDAwMDAwMDAwMDJDNzAwMDAwMDAwMDA2MDAwMDA1NgorOjEwMjEyMDAwMDAwMDAyOUUwMDAwMDAwMDAwNjAwMDAwMDAwMDA1RTRDNgorOjEwMjEzMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkM3MDAwMDAwMDA5NgorOjEwMjE0MDAwMDA2MDAwMDAwMDAwMDI5MDAwMDAwMDAwMDA0MDAwMDA1RAorOjEwMjE1MDAwMDAwMDAyQzcwMDAwMDAyMjAwMjAxRTJEMDAwMDAwMDAyOQorOjEwMjE2MDAwMDAwMDAwMjMwMDgwMjIyRDAwMDAwMDAwMDAwMDAwMTA2RAorOjEwMjE3MDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODcwNAorOjEwMjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzMDAwMDAwMDA1RgorOjEwMjE5MDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDBDOAorOjEwMjFBMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjNDNAorOjEwMjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAwQQorOjEwMjFDMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMjFEMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjNCMworOjEwMjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDBGNworOjEwMjFGMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMjIwMDAwMDAyOTQ4NDcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTMyNgorOjEwMjIxMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDA0NworOjEwMjIyMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMjIzMDAwMDAzMTFDQTEwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjczOQorOjEwMjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODQ3MDAwMDAwMDBENgorOjEwMjI1MDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwQgorOjEwMjI2MDAwMDAzMTIwQzQwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjhFOQorOjEwMjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3MDAwMDAwMDBFNQorOjEwMjI4MDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwMDAwMDAwMDBERAorOjEwMjI5MDAwMDAzMTIwQzIwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjhCQgorOjEwMjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDA1NQorOjEwMjJCMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMjJDMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxMDAyMjBBMjFDOAorOjEwMjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMwOEEyMDAwMDAwMDAyMQorOjEwMjJFMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwMDAwMDAwMTA2QworOjEwMjJGMDAwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDcwMAorOjEwMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzMDAwMDAwMDBERAorOjEwMjMxMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDA0NgorOjEwMjMyMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxMDAyMjBBMjE2NworOjEwMjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwOEEyMDAwMDAwMDBDMworOjEwMjM0MDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwMDAwMDAwMTAwQgorOjEwMjM1MDAwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDc5RgorOjEwMjM2MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDBGQQorOjEwMjM3MDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMDAwMEZGRkY0QQorOjEwMjM4MDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDc2MgorOjEwMjM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgwOEM1MDAwMDAwMDAzOAorOjEwMjNBMDAwMDAwMDAwMDAwMDMwMDg0MTAwMDAwMDAwMDAwMDAwMDFCMworOjEwMjNCMDAwMDAyMjBBMjIwMDAwMDAwMDAwMDAwMDAwMDAzMzA4QTJGMgorOjEwMjNDMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDA5QgorOjEwMjNEMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMjNFMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDFEMDAyMDIyMkQ4OAorOjEwMjNGMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzMDEwNQorOjEwMjQwMDAwRkZGRkZGRUYwMDI4MDYyMTAwMDAwMDAwMDAwMDAwMUE3NworOjEwMjQxMDAwMDAyMDIyMkQwMDAwMDAwMDAwMDBGOEUwMDAyMDQ0MTEwMAorOjEwMjQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTAxMDAwMDAwMDAzOQorOjEwMjQzMDAwMDAwMDAwMDAwMDg5NDkwMTAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMjQ0MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE5QQorOjEwMjQ1MDAwMDAwMDAwMDAwNjBBMDIwMDAwODA0ODExMDAwMDAwMDA5MQorOjEwMjQ2MDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwOTcwMDAwMDBGNQorOjEwMjQ3MDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTFFRQorOjEwMjQ4MDAwMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDA0RAorOjEwMjQ5MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUM0NQorOjEwMjRBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA4RgorOjEwMjRCMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwQQorOjEwMjRDMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMjREMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEE2RQorOjEwMjRFMDAwMDAwMDAwMDA5NzAwMDAwMDAwMjA0NDExMDAwMDAwMDBFMAorOjEwMjRGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDBEOQorOjEwMjUwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFERAorOjEwMjUxMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDBDOAorOjEwMjUyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkNFNgorOjEwMjUzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBGRQorOjEwMjU0MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDBBNworOjEwMjU1MDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwOTcwMDAwMDAzQQorOjEwMjU2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE3RAorOjEwMjU3MDAwMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1QworOjEwMjU4MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUM1NAorOjEwMjU5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA5RQorOjEwMjVBMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAxOQorOjEwMjVCMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMUExRkQ1NAorOjEwMjVDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDA3NQorOjEwMjVEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAxNworOjEwMjVFMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMDIyNTdDOAorOjEwMjVGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzQzA0ODRBMjBGMQorOjEwMjYwMDAwMDAwMDAwMDAwMDAwMjI1RDAwMjA0NDExMDAwMDAwMDBENgorOjEwMjYxMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwMjYyMDAwMDA2MDAwMDAwMDAwMDVDNTAwMDAwMDAwQzAyMDA4MDA5OAorOjEwMjYzMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDBBNworOjEwMjY0MDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwMDAwMEExRkM0NgorOjEwMjY1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBERAorOjEwMjY2MDAwMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDA1NgorOjEwMjY3MDAwMDAwMDAwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwNworOjEwMjY4MDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAyMDQ4MDBCNgorOjEwMjY5MDAwMDAwMDAwMDAwMDAwMDAwMTQwMzA0QTIwMDAwMDAwMDA1RgorOjEwMjZBMDAwMDAwMDAwMDJDMDMwNEEyMDAwMDAwMDAwMDAwMDAwMDFDRAorOjEwMjZCMDAwMDA1MzBBMjIwMDAwMDMzNDAwMDAwMDNGQzAyODBBMjAxMworOjEwMjZDMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAxNAorOjEwMjZEMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjg2NworOjEwMjZFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE3MDAyMDQ4MTFFNQorOjEwMjZGMDAwMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2MTRFRAorOjEwMjcwMDAwMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMjcxMDAwMTRFMDAwMDAwMDAwMDMzRDAwMDAwMDE0MDAyRjAyMjIxRQorOjEwMjcyMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNTE4OQorOjEwMjczMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDA3NAorOjEwMjc0MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTE1NAorOjEwMjc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMAorOjEwMjc2MDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzVFMDAwMDIxMDAxOAorOjEwMjc3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBCQworOjEwMjc4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAyMQorOjEwMjc5MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMjdBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTE0NQorOjEwMjdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBBMAorOjEwMjdDMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwMDAwMDAwMDQ3QgorOjEwMjdEMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBEQQorOjEwMjdFMDAwMDAwMDAzNTUwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDBFQworOjEwMjdGMDAwMDAwMDgwMDAwMDQwNDgxMTAwMDAwMzQ5MDAwMDAwMjg0QworOjEwMjgwMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA4OQorOjEwMjgxMDAwMDAwMDAzNDkwMDAwMjEwNDAwMjA0NDExMDAwMDAwMDBEMgorOjEwMjgyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMjgzMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0OAorOjEwMjg0MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA2MAorOjEwMjg1MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjg2MDAwMDA0MDQ4MDIwMDAwMDAwMDAwMDAwMDM1MDAyMDM2MjYyRAorOjEwMjg3MDAwMDAwMDAwMDAwMDAwMDA0OTAwMjAxODExMDAwMDAwMDBDNgorOjEwMjg4MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDFDRQorOjEwMjg5MDAwMDAzMzFBMjYwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjY2RQorOjEwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNjBGOQorOjEwMjhCMDAwMDAwMDAwMzUwMDgwMUEyRDAwMDAwMDAwMDAwMDAwM0ZERAorOjEwMjhDMDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDE1MDAyRjAyMjI4RQorOjEwMjhEMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzNzY5MworOjEwMjhFMDAwMDAwMDAwMUUwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA3NworOjEwMjhGMDAwMENFMDAwMDAwMDAwMDM4MDAwMDAwMDIwMDAyRjAyMjJGNgorOjEwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzOEM0QworOjEwMjkxMDAwMDAwMDAwMEYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMjkyMDAwMENFMDAwMDAwMDAwMDM5ODAwMDAwMDEwMDAyRjAyMjJCRAorOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzOTgxMAorOjEwMjk0MDAwMDAwMDAwMDYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMjk1MDAwMENFMDAwMDAwMDAwMDM5QTAwMDAwMDE2MDAyRjAyMjI4NQorOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzOUZEOQorOjEwMjk3MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA5QworOjEwMjk4MDAwMDA0MDQ4MDIwMDAwMDAwMDA4MDAwMDAwMDAyOTBBMjI2MAorOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMzQwMjEwRTIwMDAwMDAwMDBBNQorOjEwMjlBMDAwMDAwMDAwMENDMDIxMTIyMDAwMDAwMDAwMDAwODAwMDAwMAorOjEwMjlCMDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDE0QzAyMjE2MjA4RAorOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkxNEE0MDAwMDAwMDAyNgorOjEwMjlEMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzQworOjEwMjlFMDAwMDAyOTQ4QTIwMDAwMDAwMDAwMDBBMUZFMDAyMDQ0MTFDMAorOjEwMjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAzMDAwMDAwMDA0QworOjEwMkEwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFDRgorOjEwMkExMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTFBRgorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAxNTAwMjA0ODExMDAwMDAwMDAxOAorOjEwMkEzMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjE0MDAwMDAwMTU5NAorOjEwMkE0MDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAzRgorOjEwMkE1MDAwMDAwMDAzODIwMDAwMjEwRTAwMjA0NDExMDAwMDAwMDA0RAorOjEwMkE2MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMkE3MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTE3MworOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDBCQworOjEwMkE5MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEzRgorOjEwMkFBMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTExRgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAxNjAwMjA0ODExMDAwMDAwMDA4NworOjEwMkFDMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjE0MDAwMDAwMDMxNgorOjEwMkFEMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDBBRgorOjEwMkFFMDAwMDAwMDAzOEUwMDAwMjEwODAwMjA0NDExMDAwMDAwMDBCNworOjEwMkFGMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMkIwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTFFMgorOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDAyQgorOjEwMkIyMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDA4MAorOjEwMkIzMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAyMDEwMDAyMDQ0MTE1NworOjEwMkI0MDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDA4QworOjEwMkI1MDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMkI2MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA2MDA0MDQ4MTE0RAorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDBCMAorOjEwMkI4MDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUEyQTQwNQorOjEwMkI5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE0NworOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNUVGNQorOjEwMkJCMDAwMDAwMDAwMTYwMDQwNDgxMTAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMkJDMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDBDMDAzMQorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjEwMjIzMDAwMDAwMDA5MgorOjEwMkJFMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwM0I5ODEwMDAwMDBCNAorOjEwMkJGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFNgorOjEwMkMwMDAwMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAzNgorOjEwMkMxMDAwMDAwMDAwMTcwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwNgorOjEwMkMyMDAwMDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDExMDAyMTAyMzA3MQorOjEwMkMzMDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzQUJGMgorOjEwMkM0MDAwMDAwMDIxMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFRQorOjEwMkM1MDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDM5RgorOjEwMkM2MDAwMDAwMDAwMDBCQUJFQ0FGRTAwMjA0ODExMDAwMDAwMDBBQgorOjEwMkM3MDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMDAwMDIwMTA2QgorOjEwMkM4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTFENgorOjEwMkM5MDAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDA3OQorOjEwMkNBMDAwMDAwMDAwMDQwMDQwNDgxMTAwMDAwMDAwMDAwMDIxNzBGNgorOjEwMkNCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIzNQorOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDA5OQorOjEwMkNEMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMEFGNAorOjEwMkNFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTAzQgorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzQkUzRgorOjEwMkQwMDAwOEMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQ0FGRUJBQkU4MgorOjEwMkQxMDAwMDA0MDQ4MTEwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEyNAorOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAyOQorOjEwMkQzMDAwMDAwMDNGRkY0MDI4MEEyMDAwMDAwMDAwODAwMDAwMDA0MworOjEwMkQ0MDAwNDAyODBFMjAwMDAwMDAwMDQwMDAwMDAwQzAyODEyMjA5MworOjEwMkQ1MDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2MTQ4NAorOjEwMkQ2MDAwMDAwMDAwMDAwMDIwMTQxMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMkQ3MDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAzMworOjEwMkQ4MDAwMDAwMDAzQ0MwMDAwMDAwMEMwNDAxODAwMDAwMDAzQ0Y4QQorOjEwMkQ5MDAwMDAwMDNGRkZDMDI4MUEyMDAwMDAwMDAwMDAwNDAwMDBDRgorOjEwMkRBMDAwMDA2OTQ2MjYwMDAwMDYxNDAwMDAwMDAwMDAyMDE4MTBFQworOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDBCRQorOjEwMkRDMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwM0QyMDAwMDAwMDA2MgorOjEwMkREMDAwQzA0MDFDMDAwMDAwMDNENTAwMDAzRkZGQzAyODFFMjA5QgorOjEwMkRFMDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI3MDAwMDA2MTRFRgorOjEwMkRGMDAwMDAwMDAwMDAwMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMkUwMDAwMDAyMDQ0MDIwMDAwMDAwMDAwMDAwMDAwMDAyODIwQzU0RgorOjEwMkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDk0OEU4MDAwMDAwMDAzOQorOjEwMkUyMDAwQTU4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMDIwMDAyNAorOjEwMkUzMDAwMDAyMDBDMTEwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTExRAorOjEwMkU0MDAwMDAwMDAzRkQwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDAxQworOjEwMkU1MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwMkU2MDAwNDAyMDQ4MDAwMDAwMDAwMDAwMDAwMDFGQzAyMTAyMjA5OAorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzRTI5OQorOjEwMkU4MDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAxRAorOjEwMkU5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBGRkZGQzA0ODEyMjA4MQorOjEwMkVBMDAwMDAwMDAzRUFBNzgwMDAwMDAwMjAwODExMDAwMDAwMDBENQorOjEwMkVCMDAwMDAwMEEwMDAwMDIwMEMxMTAwMDAwMDAwODMwMDAwMDBCMgorOjEwMkVDMDAwMDA2MDQ0MTEwMDAwMDNGRDAwMDAwMDAwMDAyMDQ0MDJFNworOjEwMkVEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBDQQorOjEwMkVFMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEZGRkZCQworOjEwMkVGMDAwQzAyODEyMjAwMDAwMDAwMDgzMDAwMDAwMDAyMDQ0MTFDMAorOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0ODgzMDAwMDAwMDBDNgorOjEwMkYxMDAwODQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCOAorOjEwMkYyMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMUQwMDAwMDA1QworOjEwMkYzMDAwMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDAzRkQ1OQorOjEwMkY0MDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxQTk4MDAwMDA1MworOjEwMkY1MDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBDMDAwMDA0MDBDMTExQgorOjEwMkY2MDAwMDAwMDAzRTVBQjgwMDAwMDAwMjAwODExMDAwMDAwMDAxNQorOjEwMkY3MDAwMDAwMEY4RTAwMDQwMEMxMTAwMDAwM0U1QUQ4MDAwMDAwNworOjEwMkY4MDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGODgwMDA0MDBDMTEzMworOjEwMkY5MDAwMDAwMDAzRTVCMzgwMDAwMDAwMjAwODExMDAwMDAwMDBERAorOjEwMkZBMDAwMDAwMEYzRkMwMDQwMEMxMTAwMDAwM0U1QUY4MDAwMDBCRQorOjEwMkZCMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBFMDAwMDA0MDBDMTE5QgorOjEwMkZDMDAwMDAwMDAzRTVCMTgwMDAwMDAwMjAwODExMDAwMDAwMDBBRgorOjEwMkZEMDAwMDAwMEYwMDAwMDQwMEMxMTAwMDAwM0U1ODMwMDAwMDAzOQorOjEwMkZFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAyMTQ4MDAyMDQ4MTE4QQorOjEwMkZGMDAwMDAwMDAwMDA4NDAwMDAwMDAwMjA0NDExMDAwMDAwMDBEOAorOjEwMzAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwMzAxMDAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAxMworOjEwMzAyMDAwMDAwMDAwMDAwMDE4MjAwMEMwMzA0NjIwMDAwMDAwMDAxMgorOjEwMzAzMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMzA0MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFGMgorOjEwMzA1MDAwMDAwMDAwMDAwMDE4QTAwMEMwMzA0NjIwMDAwMDAwMDA2MgorOjEwMzA2MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMzA3MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFDMgorOjEwMzA4MDAwMDAwMDAwMDAwMDE4QzAwMEMwMzA0NjIwMDAwMDAwMDAxMgorOjEwMzA5MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMzBBMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEE5MgorOjEwMzBCMDAwMDAwMDAwMDAwMDE4RjhFMEMwMzA0NjIwMDAwMDAwMDBDQQorOjEwMzBDMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMzBEMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEE2MgorOjEwMzBFMDAwMDAwMDAwMDAwMDE4Rjg4MEMwMzA0NjIwMDAwMDAwMDBGQQorOjEwMzBGMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzEwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEzMQorOjEwMzExMDAwMDAwMDAwMDAwMDE4RTAwMEMwMzA0NjIwMDAwMDAwMDA2MQorOjEwMzEyMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMzEzMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMQorOjEwMzE0MDAwMDAwMDAwMDAwMDE4RjAwMEMwMzA0NjIwMDAwMDAwMDAyMQorOjEwMzE1MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMzE2MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFEMQorOjEwMzE3MDAwMDAwMDAwMDAwMDE4RjNGQ0MwMzA0NjIwMDAwMDAwMDBGMgorOjEwMzE4MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMzE5MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFBMQorOjEwMzFBMDAwMDAwMDAwMDA4NjAwMDAwMDAwMjA0NDExMDAwMDAwMDAyNAorOjEwMzFCMDAwMDAwMDAwMDAwMDQwNDgwMTAwMDAwMDAwODUwMDAwMDAwMQorOjEwMzFDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDEwMQorOjEwMzFEMDAwMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExMDAwMDAwMDBERAorOjEwMzFFMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwMzFGMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA3RgorOjEwMzIwMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBDOAorOjEwMzIxMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAzNAorOjEwMzIyMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDA5RgorOjEwMzIzMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2MTQxQgorOjEwMzI0MDAwMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMzI1MDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDRDMDIwQworOjEwMzI2MDAwMDAwMDA0MkUwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDA0MAorOjEwMzI3MDAwMDAwMDAwMDBDMDIwMTAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMzI4MDAwQzAyMDE0MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE4MDA1MgorOjEwMzI5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxQzAwMDAwMDAwMDAzMgorOjEwMzJBMDAwMDAwMDdGMDAwMDI4MEEyMTAwMDAwMDAwMDAwMDQ1MDAwNworOjEwMzJCMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBDRgorOjEwMzJDMDAwMDAwMDA0M0MwMDAwMDAwMEMwMjAyMDAwMDAwMDAwMDBCRQorOjEwMzJEMDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMTBDNworOjEwMzJFMDAwMDAyODBBMjMwMDAwMDAwMDAwMDAwMDEwMDAyRjAyMjIyNgorOjEwMzJGMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NDQ5QQorOjEwMzMwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFDNgorOjEwMzMxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjQ1RAorOjEwMzMyMDAwMDAwMDA2MTQwMDAwMDAwMDAwNDAwMDAwMDAwMDA0NERGMgorOjEwMzMzMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA5NworOjEwMzM0MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTEwMQorOjEwMzM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMQorOjEwMzM2MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMzM3MDAwMUFDMDAwMDAwMDAwMDQ0OTlFMDAwMDAwMDAyMDQ0MTExMworOjEwMzM4MDAwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDA4NAorOjEwMzM5MDAwMDAwMDAwMDAxQUUwMDAwMDAwMDAwNDRDMDAwMDAwMDBFMworOjEwMzNBMDAwMDAyODI0RjAwMDAwMDAwMDAwMDAwMDA3MDAyODBBMjM4NQorOjEwMzNCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjIyMDAwMDAwMDBCOQorOjEwMzNDMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDU0MDAwMDAwMDBCQgorOjEwMzNEMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwMDRFMDAwMDAxMQorOjEwMzNFMDAwMDAwMDA0NkQwMDAwMDAwMDAwNDAwMDAwMDAwMDA0N0FBRQorOjEwMzNGMDAwMDAwMDAwMDIwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA3OAorOjEwMzQwMDAwMEFFMDAwMDAwMDAwMDQ1OTAwMDAwMDAwMDAyRjAwQzk3RAorOjEwMzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAyRTAwMDAwMDAwMDA0NkQ1OQorOjEwMzQyMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDdBMDAwMDAwMDNEQgorOjEwMzQzMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDA0RgorOjEwMzQ0MDAwMDAwMDA0NUUwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAyMgorOjEwMzQ1MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNDZEMDAwMDAwMDAwRgorOjEwMzQ2MDAwMDA0MDAwMDAwMDAwMDQ3QTAwMDAwMDA0MDAyRjAyMjI0NworOjEwMzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NjNGQgorOjEwMzQ4MDAwMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDA0NAorOjEwMzQ5MDAwMEFFMDAwMDAwMDAwMDQ2RDAwMDAwMDAwMDA0MDAwMDA5MQorOjEwMzRBMDAwMDAwMDA0N0EwMDAwMDAwNTAwMkYwMjIyMDAwMDAwMDA0NgorOjEwMzRCMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDY4MDAwMDAwMDBCNgorOjEwMzRDMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwMDZFMDAwMDAxRQorOjEwMzREMDAwMDAwMDA0NkQwMDAwMDAwMDAwNDAwMDAwMDAwMDA0N0FCRAorOjEwMzRFMDAwMDAwMDAwMDYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA4MworOjEwMzRGMDAwMEFFMDAwMDAwMDAwMDQ2RDAwMDAwMDAwMDAyRjAwQzk3OQorOjEwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RTAwMDAwMDAwMDA0NkQ2MgorOjEwMzUxMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDdBMDAwMDdGMDA2RQorOjEwMzUyMDAwMDAyODBBMjEwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjJCMAorOjEwMzUzMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAwMDBBMQorOjEwMzU0MDAwMDAwMDAwMDgwMDIxMEEyMzAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMzU1MDAwMTRDMDAwMDAwMDAwMDQ3NzAwMDAyMTY5MDAyMDQ0MTExRAorOjEwMzU2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAzMworOjEwMzU3MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMzU4MDAwQzAyMDQ4MDAwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTEzQQorOjEwMzU5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0NDAwMDAwMDAwMDAwNworOjEwMzVBMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwMzVCMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDA3RjAwMDAyODBBMjFGMQorOjEwMzVDMDAwMDAwMDAwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDA2MworOjEwMzVEMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDgwMDAwMDAwMDA3RAorOjEwMzVFMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAxQgorOjEwMzVGMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDAwMDBDQgorOjEwMzYwMDAwMDAwMDAwMDAwMDQwNEMwODAwMDAwNDNDMDAwMDAwMDBFNgorOjEwMzYxMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjAyMworOjEwMzYyMDAwMDAwMDAwMDAwMDAwMDAxMTQwMjExMjIwMDAwMDAwMDBGNgorOjEwMzYzMDAwMDAwMDAwMTI0MDIxMTYyMDAwMDAwMDAwMDAwMDIxNjk1NworOjEwMzY0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDI5QgorOjEwMzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjI1MDAwMDAwMDAyMgorOjEwMzY2MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwNDhBMDAwNDAwMDBENAorOjEwMzY3MDAwQzA0OTRBMjAwMDAwMDQ4QkZGRkJGRkZGQzAyODRBMjBGRQorOjEwMzY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjIzMDAwMDAwMDBGNAorOjEwMzY5MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwNDk3MDAwMDAwMDA5QgorOjEwMzZBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBDQQorOjEwMzZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjI0MDAwMDAwMDBDMworOjEwMzZDMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwODEwMDAwMDBBNQorOjEwMzZEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBDMDAyMDQ4MTFGMAorOjEwMzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDBBQQorOjEwMzZGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNDkzQTAwMDAwMDBCRgorOjEwMzcwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTE2QgorOjEwMzcxMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCMworOjEwMzcyMDAwMDAwMDAwMDQwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkI5MAorOjEwMzczMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTBEQworOjEwMzc0MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA4MworOjEwMzc1MDAwMDAwMDAwMDUwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkM1RQorOjEwMzc2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTBBQworOjEwMzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDBGNAorOjEwMzc4MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMzc5MDAwMDA0MDAwMDAwMDAwMDQ5MTAwMDAwMDAwQzAyMTBBMjA0OQorOjEwMzdBMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0QUU5MworOjEwMzdCMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAxMworOjEwMzdDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTE3RAorOjEwMzdEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBDMQorOjEwMzdFMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwMzdGMDAwMUFDMDAwMDAwMDAwMDRBOTlFMDAwMDAwMDAyMDQ0MTEyRgorOjEwMzgwMDAwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDBGRgorOjEwMzgxMDAwMDAwMDAwMDAxQUUwMDAwMDAwMDAwNEFDMDAwMDAwMDBGRQorOjEwMzgyMDAwMDA0MDAwMDAwMDAwMDRCMjgxMDAwMDAwMDAyMDQ0MTFBQworOjEwMzgzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwRQorOjEwMzg0MDAwMDAwNDAwMDBDMDI5NDYyMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMzg1MDAwQzA2MDAwMDAwMDAwMDYxNDAwMDAwMDAxMDAyMTAyMjJFOAorOjEwMzg2MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0QjlDNworOjEwMzg3MDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMzg4MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFOAorOjEwMzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBCMAorOjEwMzhBMDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMzhCMDAwQzAyMDQ0MDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MTA4QworOjEwMzhDMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMgorOjEwMzhEMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjg1NQorOjEwMzhFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBEMDAyMDQ4MTFERAorOjEwMzhGMDAwMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2MTREQgorOjEwMzkwMDAwMDAwMDAwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMzkxMDAwMTRDMDAwMDAwMDAwMDRCQjAwMDAyMTgwMDAyMDQ0MTFGRQorOjEwMzkyMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA2RgorOjEwMzkzMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwMzk0MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDA2RgorOjEwMzk1MDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAxRgorOjEwMzk2MDAwMDAwMDAwMDMwMDMzM0UyRjAwMDAwMDAwMDAwMDAwMDFCMworOjEwMzk3MDAwMDAyMTAyMjEwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwRgorOjEwMzk4MDAwMDAwMDA0RUIwMDAwMDAzNTAwMjAwQTJEMDAwMDAwMDBCQworOjEwMzk5MDAwMDAwNDAwMDAxOEUwMEMxMTAwMDAwNERBMDAwMDAwMDEyRgorOjEwMzlBMDAwMDAzMzNFMkYwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTE3OAorOjEwMzlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDA5RAorOjEwMzlDMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDg4NAorOjEwMzlEMDAwMDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA2MworOjEwMzlFMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBBRgorOjEwMzlGMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDOAorOjEwM0EwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDNFMQorOjEwM0ExMDAwMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMDAwMDAwMDA0MgorOjEwM0EyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwM0EzMDAwRDhDMDQ4MDAwMDAwMDRDRTAwMDAyMTY5MDAyMDQ0MTFENQorOjEwM0E0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwQworOjEwM0E1MDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDhGMworOjEwM0E2MDAwMDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBEMgorOjEwM0E3MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxRQorOjEwM0E4MDAwMDAwMDAwMzYwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwM0E5MDAwMDAyOTBDODMwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTE2RgorOjEwM0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBBQworOjEwM0FCMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDg5MworOjEwM0FDMDAwMDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA3MgorOjEwM0FEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBCRQorOjEwM0FFMDAwMDAwMDAwMTEwMDIxMDIyNDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwM0FGMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDBCMgorOjEwM0IwMDAwMDAwMDA0OTEwMDAwMDAzNUMwMjAzNjIwMDAwMDAwMDBCNQorOjEwM0IxMDAwMDAwMDAwMzZDMDQwMzYyMDAwMDAwMDAwMDAwMDMwNEE5RgorOjEwM0IyMDAwMDAyMDQ0MTEwMDAwMDAwMEUwMDAwMDAwQzA0ODRBMjBDRQorOjEwM0IzMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjIxMDAwMDAwMDAzMgorOjEwM0I0MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNEYyMDAwMDAwMDBBQgorOjEwM0I1MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwRDkwMDAwMDAyMQorOjEwM0I2MDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDE1MAorOjEwM0I3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDI0RAorOjEwM0I4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMEZGMDAyODBFMzA1NworOjEwM0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDBEMQorOjEwM0JBMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNEY2MDAwMDAwMDA0RgorOjEwM0JCMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA0OQorOjEwM0JDMDAwMDAwMDA1MEIwMDAwMDAwMDAwMjAwQzExMDAwMDAwMDBBOAorOjEwM0JEMDAwMDAwMDAwMjQwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMzQxNAorOjEwM0JFMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDMyMDAyMDM2MjNCMQorOjEwM0JGMDAwMDAwMDAwMDAwMDAwMDAzMTAwMjAzNjIzMDAwMDAwMDAxQgorOjEwM0MwMDAwMDAwMDAwMUQwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMkRGMQorOjEwM0MxMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDJFMDAyMDM2MjM4NAorOjEwM0MyMDAwMDAwMDAwMDAwMDAwMDAxQjAwMjAzNjIzMDAwMDAwMDAwMAorOjEwM0MzMDAwMDAwMDAwMUMwMDIwMzYyMzAwMDAwMDAwRkZGRkUwMDAxMQorOjEwM0M0MDAwMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDI5MDAyMDM2MjM5NQorOjEwM0M1MDAwMDAwMDAwMDAwMDAwMDAyQTAwMjAzNjIzMDAwMDAwMDBDMQorOjEwM0M2MDAwMDAwMDFGRkYwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMkJDRQorOjEwM0M3MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDJDMDAyMDM2MjMyNgorOjEwM0M4MDAwMDAwMDAwMDBGMUZGRkZGRjAwMjgzQTJFMDAwMDAwMDBCNgorOjEwM0M5MDAwMDAwMDAwMUFDMDIyMEUyMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwM0NBMDAwMDAyOTM4NkUwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTE0RgorOjEwM0NCMDAwMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDA4NQorOjEwM0NDMDAwMDAwMDAwMzM0MDIwMzYyMDAwMDAwMDAwODcwMDAwMDA4NAorOjEwM0NEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0NworOjEwM0NFMDAwMDAwMDAwMDAwMDAwQTFGNDAwMjA0NDExMDAwMDAwMDBDQQorOjEwM0NGMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwOUQwMDAwMDBBRgorOjEwM0QwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFGNDAyMTRBMjA1NAorOjEwM0QxMDAwMDAwMDAwMDA5NjAwMDAwMDAwMjA0NDExMDAwMDAwMDA5OAorOjEwM0QyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwM0QzMDAwQzAyMDBDMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDEwMDBBNworOjEwM0Q0MDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExNjI0MDAwMDAwMDBGOQorOjEwM0Q1MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMjU2QQorOjEwM0Q2MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDAzMDAyODFFMjM2RQorOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAwODAwMjIyMjIzMDAwMDAwMDBENAorOjEwM0Q4MDAwRkZGRkYwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDBEMworOjEwM0Q5MDAwMDAyOTIwRTgwMDAwMDAwMDAwMDAwMDI3MDAyMDM2Mjg0RAorOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAxODAwMjExRTIzMDAwMDAwMDA5OQorOjEwM0RCMDAwMDAwMDAwMjgwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMDI1QworOjEwM0RDMDAwMDAyMjE2MjQwMDAwMDAwMDAwMDAwMDAwMDAzMDE0QThBQgorOjEwM0REMDAwMDAwMDAwMDAwMDAwMDAyNjAwMjAzNjI1MDAwMDAwMDA0MgorOjEwM0RFMDAwMDAwMDAwMDMwMDIxMUEyNDAwMDAwMDAwMTAwMDAwMDA2MQorOjEwM0RGMDAwMDAyODFBMjYwMDAwMDAwMEVGRkZGRkZGMDAyODNBMkVERgorOjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkzOENFMDAwMDA2MDI1QgorOjEwM0UxMDAwMDAwMDAwMDE0MDI4MEEyMDAwMDAwMDAwMDAwMDAwMDYwOQorOjEwM0UyMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMzAwQzAyODEyMjBERgorOjEwM0UzMDAwMDAwMDAwMDAwMDAwMDAwODAwMjExMjI0MDAwMDAwMDAyMworOjEwM0U0MDAwMDAwMDAwMDBDMDIwMTYyMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwM0U1MDAwQzAyMDFBMjAwMDAwMDAwMDAwMDAwMDAwMDAyMTAyMjIwMworOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA1NDEzOAorOjEwM0U3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE0QgorOjEwM0U4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU4MDAzMDBBMjRFMQorOjEwM0U5MDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2MTQzMworOjEwM0VBMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAxMworOjEwM0VCMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDIwMDAwMDAyOTRBMjZGQQorOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDA3QQorOjEwM0VEMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDIyNworOjEwM0VFMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBCMgorOjEwM0VGMDAwMDAwMDA1NDkwMDAwMDAwMEMwMjAxQzEwMDAwMDAwMDA2OAorOjEwM0YwMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTVCMDAwMDAwMDI0RgorOjEwM0YxMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA4MQorOjEwM0YyMDAwMDAwMDA1NDk4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA0RAorOjEwM0YzMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTg4RAorOjEwM0Y0MDAwMDAzMDBBMjQwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjIzRQorOjEwM0Y1MDAwMDAwMDA2MTQwMDAwMDAwMEMwMjAxQzEwMDAwMDAwMDAzQgorOjEwM0Y2MDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTVCMDAwMDAwMDBGMQorOjEwM0Y3MDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAyMQorOjEwM0Y4MDAwMDAwMDA1NEQwMDAwMDAwMEMwMjAxQzAwMDAwMDAwMDBFMworOjEwM0Y5MDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTVCMDAwMDAwMDRCRAorOjEwM0ZBMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBGMQorOjEwM0ZCMDAwMDAwMDA1NTk4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBBRAorOjEwM0ZDMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkRFQQorOjEwM0ZEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0NAorOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBBOQorOjEwM0ZGMDAwMDAwMDAwMDAxQUMwMDAwMDAwMDAwNTU0OUUwMDAwMDBGMAorOjEwNDAwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTE4MgorOjEwNDAxMDAwMDAwMDAwMDAwMDAwMDAwMDFBRTAwMDAwMDAwMDA1NTc0QQorOjEwNDAyMDAwMDAwMDAwMDAwMDQwMUMxMDAwMDAwNTVCMDAwMDAwMDBDNAorOjEwNDAzMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDBBMAorOjEwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBFRTAwMDAwMDAwMDA1NUQyMAorOjEwNDA1MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUE0MDAwMDAwMDA1NworOjEwNDA2MDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAyRgorOjEwNDA3MDAwMDAwMDA1NkQwMDAwQTJCNzAwMjA0NDExMDAwMDAwMDAwMAorOjEwNDA4MDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDA0MAorOjEwNDA5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEzMQorOjEwNDBBMDAwMDAwMDAwMDAwMDA0QTJCNjAwNjA0NDExMDAwMDA2MTRFNQorOjEwNDBCMDAwMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDY2RAorOjEwNDBDMDAwMDAyMjI2MzAwMDAwMDAwMDAwMDBBMkM0MDAyMDQ0MTE5RAorOjEwNDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDA3RgorOjEwNDBFMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNTZCMDAwMEEyRDEwRAorOjEwNDBGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDhCQgorOjEwNDEwMDAwMDAwMDAwMDAwMDAwQTJEMTAwMjA0NDExMDAwMDAwMDBDNworOjEwNDExMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwMDAwMDAwMDFEQgorOjEwNDEyMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA2RQorOjEwNDEzMDAwMDAwMDA1N0QwMDAwQTJCQjAwMjA0NDExMDAwMDAwMDAyQgorOjEwNDE0MDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDA3RgorOjEwNDE1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE3MAorOjEwNDE2MDAwMDAwMDAwMDAwMDA0QTJCQTAwNjA0NDExMDAwMDA2MTQyMAorOjEwNDE3MDAwMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDZBQworOjEwNDE4MDAwMDAyMjI2MzAwMDAwMDAwMDAwMDBBMkM1MDAyMDQ0MTFEQgorOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDBCRQorOjEwNDFBMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNTdCMDAwMEEyRDIzQgorOjEwNDFCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDhGQQorOjEwNDFDMDAwMDAwMDAwMDAwMDAwQTJEMjAwMjA0NDExMDAwMDAwMDAwNgorOjEwNDFEMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwMDAwMDAwMDIxQQorOjEwNDFFMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBBRQorOjEwNDFGMDAwMDAwMDA1OEQwMDAwQTJCRjAwMjA0NDExMDAwMDAwMDA1NworOjEwNDIwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDBCRQorOjEwNDIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFBRgorOjEwNDIyMDAwMDAwMDAwMDAwMDA0QTJCRTAwNjA0NDExMDAwMDA2MTQ1QgorOjEwNDIzMDAwMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDZFQgorOjEwNDI0MDAwMDAyMjI2MzAwMDAwMDAwMDAwMDBBMkM2MDAyMDQ0MTExOQorOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDBGRAorOjEwNDI2MDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNThCMDAwMEEyRDM2OQorOjEwNDI3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDgzOQorOjEwNDI4MDAwMDAwMDAwMDAwMDAwQTJEMzAwMjA0NDExMDAwMDAwMDA0NAorOjEwNDI5MDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwMDAwMEEyQzNGNgorOjEwNDJBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcyQQorOjEwNDJCMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwOAorOjEwNDJDMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQzIwQworOjEwNDJEMDAwMDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDFBMDAyMTIyMzA4MgorOjEwNDJFMDAwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDA1MAorOjEwNDJGMDAwMDAwMEEyQzcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNDMwMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDA2QworOjEwNDMxMDAwMDAwMDA1OTkwMDAwQTJENDAwMjA0NDExMDAwMDAwMDAxNAorOjEwNDMyMDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDQ4NworOjEwNDMzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjg0NQorOjEwNDM0MDAwMDAwMDAwMDA4NTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3MworOjEwNDM1MDAwMDAwMDAwMDAwMDIwNDgwMTAwMDAwMDAwMDAwMDMwNEE3QQorOjEwNDM2MDAwMDAyMDQ0MTEwMDAwMDAwMDAxMDAwMDAwMDAyMDQ4MTE1RQorOjEwNDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA1OUY1OQorOjEwNDM4MDAwQTQwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1NAorOjEwNDM5MDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDBCNQorOjEwNDNBMDAwMDAwMDA1QTQwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDE1RgorOjEwNDNCMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0MQorOjEwNDNDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFGQgorOjEwNDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2NAorOjEwNDNFMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDU0RgorOjEwNDNGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUY0MDAyMDQ0MTEzQQorOjEwNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAzMworOjEwNDQxMDAwODgwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE5RQorOjEwNDQyMDAwMDAyMDQ4MTEwMDAwMDAwMEZGMDAwMDAwMDAyMDQ0MTE5RgorOjEwNDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMworOjEwNDQ0MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDJGMAorOjEwNDQ1MDAwMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwMEVFMDAwMDA5NQorOjEwNDQ2MDAwMDAwMDA1QjcwMDAwMTAwMDAwMjAwODExMDAwMDAwMDA0NworOjEwNDQ3MDAwMDAwMDAwMzQwMDIwMzYyMjAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNDQ4MDAwMDA2MDAwMDAwMDAwMDVCQjAwMDAwMDAwMDA2MDAwMDBBQworOjEwNDQ5MDAwMDAwMDA1QTQ5ODAwMDAwMDAwMjA0NDExMDAwMDAwMDA2NgorOjEwNDRBMDAwMDAwMDAwMDAwMDgwNDgxMTAwMDAwMDAwMDAwMDAwMDAzMworOjEwNDRCMDAwQzA2MDAwMDAwMDAwMDVCQjAwMDAwMDAwQzA0MDA0MDAxOAorOjEwNDRDMDAwMDAwMDAwMDEwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAzMAorOjEwNDREMDAwMDAwMDAwMjIwMDIwNDgxMTAwMDAwMDAwODkwMDAwMDBCOAorOjEwNDRFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFERAorOjEwNDRGMDAwMDAwMDAwMDBGRjAwMDAwMDAwMjA0NDExMDAwMDAwMDA0OAorOjEwNDUwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDEzMQorOjEwNDUxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAyMDA4MDQ4MTE0NworOjEwNDUyMDAwMDAwMDAwMDAwMDAwMjE3QUMwMjA0NDExMDAwMDAwMDBCQgorOjEwNDUzMDAwMDAwMDAwMDAwMDQwNDgxMTAwMDAwMDAwOTcwMDAwMDA0QgorOjEwNDU0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE3RAorOjEwNDU1MDAwMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1QworOjEwNDU2MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRkYwMDAwMDBEMworOjEwNDU3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE0RAorOjEwNDU4MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBCMQorOjEwNDU5MDAwMDAwMDAwMDIwMDgwNDgxMTAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNDVBMDAwMDA2MDAwMDAwMDAwMDVFMTAwMDAyMDEwMDAyMDQ0MTEyMAorOjEwNDVCMDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDAwMgorOjEwNDVDMDAwMDAwMUEyQTRDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNDVEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDE2MDA2MDQ4MTE5MworOjEwNDVFMDAwMDAwMDAzNUUwMDAwMDAxNjAwMjA0ODExMDAwMDAwMDBEQgorOjEwNDVGMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMTAwMDAxNQorOjEwNDYwMDAwMDAyMDQ4MTEwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEzQgorOjEwNDYxMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAyMAorOjEwNDYyMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwMDk4MDAwMDBFRgorOjEwNDYzMDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGRkZGMDAyMDQ4MTE4QworOjEwNDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBGMQorOjEwNDY1MDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwMDAwNDIxN0Y5RgorOjEwNDY2MDAwMDA2MDQ0MTEwMDAwMDYxNDAwMDAwMDFGMDAyMTAyMzAwOQorOjEwNDY3MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwMDA2NgorOjEwNDY4MDAwMDAwMDAwMDQwMDQwNEMxMTAwMDAwNURDMDAwMDAwMUQ4QgorOjEwNDY5MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA0MDAyOTFFMjczRAorOjEwNDZBMDAwMDAwMDAwMDAwMDAwMDAxRDAwODAzNjI3MDAwMDAwMDAxMAorOjEwNDZCMDAwMDAwMDAwMUQwMDIwMUUyRDAwMDAwMDAwRkZGRkZGRkI3QQorOjEwNDZDMDAwMDAyODFFMjcwMDAwMDAwMDAwMDAwMDFEMDA4MDM2Mjc4MworOjEwNDZEMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjAxRTJEMDAwMDAwMDA1MgorOjEwNDZFMDAwMDAwMDAwMDgwMDI5MUUyNzAwMDAwMDAwMDAwMDAwMUQzNworOjEwNDZGMDAwMDA4MDM2MjcwMDAwMDAwMDAwMDAwMDFEMDAyMDFFMkQ1NQorOjEwNDcwMDAwMDAwMDAwMDBGRkZGRkZGNzAwMjgxRTI3MDAwMDAwMDA0OAorOjEwNDcxMDAwMDAwMDAwMUQwMDgwMzYyNzAwMDAwMDAwMDAwMDIwMTA2RgorOjEwNDcyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTExQgorOjEwNDczMDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDBCRAorOjEwNDc0MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMTZEQQorOjEwNDc1MDAwMDA2MDQ4MTEwMDAwMDM1RTAwMDAwMDE2MDAyMDQ4MTFCMAorOjEwNDc2MDAwMDAwMDAwMDAwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDBBNAorOjEwNDc3MDAwMDAwMTAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0MyMgorOjEwNDc4MDAwMDAyMDQ0MTEwMDAwMDAwMDAxODAwMDAwMDAyMDQ4MTFCQQorOjEwNDc5MDAwMDAwMDAwMDAwMEZGRkZGRjAwMjA0ODExMDAwMDAwMDBBMworOjEwNDdBMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNDdCMDAwMTcwMDAwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFFQworOjEwNDdDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA2RgorOjEwNDdEMDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjE0MDAwMDAwMDA2NgorOjEwNDdFMDAwMDAyMDAwMTAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBDNQorOjEwNDdGMDAwMDAwMDA2MTMwMDAwMDAxMDAwNDA0QzExMDAwMDA1RjlGNQorOjEwNDgwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwNDgxMDAwMzhDMDAwMDAwMDAwMDAwMDAwMDAwMDI1MDAyMDBBMkQyNAorOjEwNDgyMDAwMDAwMDAwMDAwMDAwMDAyNjAwMjAwRTJEMDAwMDAwMDAwNworOjEwNDgzMDAwMDAwMDAwMjcwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMjhDQQorOjEwNDg0MDAwMDAyMDE2MkQwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwNgorOjEwNDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDBFQworOjEwNDg2MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMDBEQgorOjEwNDg3MDAwMDAyMDQ4MDEwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTExNgorOjEwNDg4MDAwMDAwMDAwMDAwMDAwMDAwNDAwMzAxMjI0MDAwMDAwMDBCRQorOjEwNDg5MDAwMDAwMDAwMDAwMDJGMDA2NDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwNDhBMDAwMENDMDAwMDAwMDAwMDYxMjAwMDAwMDAzMDAyODFBMjJCRAorOjEwNDhCMDAwMDAwMDAwMDAwMDAwMDAwODAwMjIxMjIyMDAwMDAwMDA5QQorOjEwNDhDMDAwRkZGRkYwMDAwMDI4MTIyNDAwMDAwMDAwMDAwMDAwMDA5QworOjEwNDhEMDAwMDAyOTEwQzQwMDAwMDAwMDAwMDAwMDI3MDA0MDM2MjQxQQorOjEwNDhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDA0OAorOjEwNDhGMDAwMDAwMDAwMDAxQUMwMDAwMDAwMDAwNjE0OUYwMDAwMDAyNQorOjEwNDkwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTE3OQorOjEwNDkxMDAwMDAwMDAwMDAwMDAwMDAwMDFBRTAwMDAwMDAwMDA2MTc4MAorOjEwNDkyMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwNDkzMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAxMDAwMDA2MDA0MTE4NworOjEwNDk0MDAwMDAwMDAyRkUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAzMgorOjEwNDk1MDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMTlGMDAwMDIyNUNDMAorOjEwNDk2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTE1NgorOjEwNDk3MDAwMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDA0QQorOjEwNDk4MDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkNGNgorOjEwNDk5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEyOAorOjEwNDlBMDAwMDAwMDAwMDAwMDAxQTFGREMwMjA0NDExMDAwMDAwMDAzMworOjEwNDlCMDAwMDAwMDAwMjkwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMTA1MworOjEwNDlDMDAwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDJDMDAyMDIyMkRFNQorOjEwNDlEMDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDA2NworOjEwNDlFMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNDlGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDJBMDAyMDIyMkRBNQorOjEwNEEwMDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDAzNgorOjEwNEExMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAxRAorOjEwNEEyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDJCMDAyMDFFMkQ3NworOjEwNEEzMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDBGRgorOjEwNEE0MDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDBFRAorOjEwNEE1MDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwNEE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwNEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwNEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwNEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwNEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwNEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwNEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwNEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwNEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwNEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwNEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwNEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwNEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwNEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwNEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwNEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwNEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwNEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwNEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwNEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwNEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwNEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwNEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwNEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwNEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwNEM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwNEM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwNEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwNEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwNEM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwNENBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNENCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNENDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwNENEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwNENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwNENGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwNEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwNEQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwNEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwNEQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwNEQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwNEQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwNEQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwNEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwNEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwNERBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwNERCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNERDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNEREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwNERFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwNERGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwNEUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwNEUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwNEUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwNEU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwNEU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwNEU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwNEU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwNEU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwNEU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwNEVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwNEVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwNEVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNEVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwNEVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwNEYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwNEYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwNEYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwNEY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwNEY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwNEY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwNEY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwNEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwNEY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwNEZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwNEZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwNEZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNEZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwNTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwNTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNTA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNTBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwNTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwNTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwNTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwNTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwNTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNTJCMDAwMDEzMzA0RUYwNTlCMDIzOTAwMDAwMDAwMDFCMDAxNTlFMQorOjEwNTJDMDAwMDQyNTA1OUIwMDAwMDAwMDAyMTIwMUY2MDIzOTAxNDI4QworOjEwNTJEMDAwMDAwMDAwMDAwMjEwMDIyRTAyODkwMjJBMDAwMDAwMDBENQorOjEwNTJFMDAwMDNDMjA1OUIwNTlCMDU5QjAwMDAwMDAwMDVDRDA1Q0U3NAorOjEwNTJGMDAwMDMwODA1OUIwMDAwMDAwMDA1OUIwNUEwMDMwOTAzMjk4NgorOjEwNTMwMDAwMDAwMDAwMDAwMzEzMDI2QjAzMkIwMzFEMDAwMDAwMDBDQworOjEwNTMxMDAwMDU5QjA1OUIwNTlCMDU5QjAwMDAwMDAwMDU5QjA1MkMzQworOjEwNTMyMDAwMDU5QjA1OUIwMDAwMDAwMDAzQTUwNTlCMDRBMjAzMkQxRgorOjEwNTMzMDAwMDAwMDAwMDAwNDgxMDQzMzA0MjMwNTlCMDAwMDAwMDBFQQorOjEwNTM0MDAwMDRCQjA0RUQwNDI3MDRDODAwMDAwMDAwMDQzMzA0RjQ4NworOjEwNTM1MDAwMDMzQTAzNjUwMDAwMDAwMDA1OUIwNTlCMDU5QjA1OUIyOAorOjEwNTM2MDAwMDAwMDAwMDAwNTlCMDU5QjA1OUIwNTlCMDAwMDAwMDBCRAorOjEwNTM3MDAwMDU5QjA1OUIwNUI5MDVBMjAwMDAwMDAwMDU5QjA1OUI0OAorOjEwNTM4MDAwMDAwNzA1OUIwMDAwMDAwMDA1OUIwNTlCMDU5QjA1OUJGNgorOjEwNTM5MDAwMDAwMDAwMDAwNTlCMDU5QjA1OUIwNTlCMDAwMDAwMDA4RAorOjEwNTNBMDAwMDNFMzAzRDgwM0YzMDNGMTAwMDAwMDAwMDNGOTAzRjU1RQorOjEwNTNCMDAwMDNGNzAzRkIwMDAwMDAwMDA0MDcwNDAzMDQwRjA0MEJDMQorOjEwNTNDMDAwMDAwMDAwMDAwNDE3MDQxMzA0MUYwNDFCMDAwMDAwMDA2OQorOjEwNTNEMDAwMDU5QjA1OUIwNTlCMDU5QjAwMDAwMDAwMDU5QjA1OUIwRAorOjEwNTNFMDAwMDU5QjA1OUIwMDAwMDAwMDA1OUIwNTlCMDU5QjA1OUJGRAorOjEwNTNGMDAwMDAwMDAwMDAwMDAyMDYwMDA2MTkwMDA2MDAwMDAwMDA4MAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SNjAwX3BmcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SNjAwX3BmcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjM2MTA4Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1I2MDBfcGZwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTQ1IEBACis6MTAwMDAwMDAwMEQ0MDA3MTAwRDQwMDcyMDBDQTA0MDAwMEEwMDAwMEY3Cis6MTAwMDEwMDAwMDdFODI4QjAwODAwMDAzMDBDQTA0MDAwMEQ0NDAxRUQyCis6MTAwMDIwMDAwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QkNCCis6MTAwMDMwMDAwMEM0MTgzODAwQ0EyNDAwMDBDQTI4MDAwMDk1ODFBODBFCis6MTAwMDQwMDAwMEM0MUMzQTAwQzNDMDAwMDBDQTA4MDAwMENBMEMwMDZCCis6MTAwMDUwMDAwMDdDNzQ0QjAwQzIwMDA1MDA5OUMwMDAwMEM0MUMzQTJCCis6MTAwMDYwMDAwMDdDNzQ0QzAwQzBGRkYwMDAwNDJDMDQwMDMwOTAwMkFGCis6MTAwMDcwMDAwMDdEMjUwMDAwMzUxNDAyMDA3RDM1MEIwMDI1NTQwMzVBCis6MTAwMDgwMDAwMDdDRDU4MDAwMjU5QzAzMDA5NUMwMDQwMEQ1MDAxQjkyCis6MTAwMDkwMDAwMDdFRERDMTAwN0Q5RDgwMDBENjgwMUIwMEQ1ODAxQkM5Cis6MTAwMEEwMDAwMEQ0NDAxRTAwRDU0MDFFMDBENjQwMUUwMEQ2ODAxRTQzCis6MTAwMEIwMDAwMEQ0ODAxRTAwRDRDMDFFMDA5NzgzRDQwMEQ1QzAxRTdCCis6MTAwMEMwMDAwMENBMDgwMDAwODAwMDFCMDBDQTBDMDAwMEU0MDExRUVBCis6MTAwMEQwMDAwMEQ0MDAxRTAwODAwMDBEMDBDNDE4MzgwMEU0MDEzRTZBCis6MTAwMEUwMDAwMEQ0MDAxRTAwODAwMDBEMDBDNDE4MzgwMEQ0NDAxRTRCCis6MTAwMEYwMDAwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QkZCCis6MTAwMTAwMDAwMEU0MDExRTAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRUJDCis6MTAwMTEwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDEzRUMzCis6MTAwMTIwMDAwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMEQxCis6MTAwMTMwMDAwMEEwMDAwMDAwN0U4MjhCMDBDQTE4MDAwMEQ0NDAxRTgwCis6MTAwMTQwMDAwMEQ1ODAxRTAwODAwMDU0MDBENDAwNzMwMEQ0NDAxRUVGCis6MTAwMTUwMDAwMENBMDgwMDAwQ0EwQzAwMDBDQTEwMDAwMEQ0ODAxOUIwCis6MTAwMTYwMDAwMEQ0QzAxODAwRDUwMDE3MDBENDgwMUUwMEQ0QzAxRUQzCis6MTAwMTcwMDAwMEQ1MDAxRTAwRTIwMDFFMDBDQTA0MDAwMEEwMDAwMDFFCis6MTAwMTgwMDAwMDdFODI4QjAwQ0EwODAwMDBENDgwNjAwMEQ0NDAxRTJDCis6MTAwMTkwMDAwMDgwMDAwMjAwRDQ4MDFFMDBDQTA4MDAwMEQ0ODA2MUU0Cis6MTAwMUEwMDAwMEQ0NDAxRTAwODAwMDAyMDBENDgwMUUwMENBMDgwMDU3Cis6MTAwMUIwMDAwMENBMEMwMDAwRDQ0MDFFMDBENDgwMTYwMEQ0QzAxNjIzCis6MTAwMUMwMDAwMEQ0ODAxRTAwODAwMUI5MDBENEMwMUUwMEM2MDgzRUM1Cis6MTAwMUQwMDAwMENBMEMwMDAwQ0ExMDAwMDA5NDgwMDQwMENBMTQwMDc5Cis6MTAwMUUwMDAwMEU0MjBGMzAwRDQyMDEzMDBENTYwNjUwMEQ0RTAxQ0E3Cis6MTAwMUYwMDAwMEQ1MjAxQzAwRDU2MDFDMDA4MDAwMDIwMDA2MjAwMUY0Cis6MTAwMjAwMDAwMEM2MDgzRTAwQ0EwQzAwMDBDQTEwMDAwMDk0ODNGNzI0Cis6MTAwMjEwMDAwMENBMTQwMDAwRTQyMEYzMDA4MDAwN0EwMEQ0MjAxMzA4Cis6MTAwMjIwMDAwMEM2MDgzRTAwQ0EwQzAwMDBDQTEwMDAwMDk4ODNFRjA4Cis6MTAwMjMwMDAwMENBMTQwMDAwRDQwMDY0MDA4MDAwOEUwMDAwMDAwMDlBCis6MTAwMjQwMDAwMEM0MTQzMjAwQzYxODNFMDBDNDA4MkYwMDk1NDAwNUIzCis6MTAwMjUwMDAwMEM0MEMzMDAwRDQ0MDFFMDA4MDAwMDIwMEVFMDAxRURFCis6MTAwMjYwMDAwMDk1ODNGNTAwQzQxMDMxMDBENDQwMzMwMEQ1MjA2NURCCis6MTAwMjcwMDAwMEQ0QTAxQzAwRDRFMDFDMDBENTIwMUMwMEQ0MDA3M0M2Cis6MTAwMjgwMDAwMEU0MDE1RTAwRDQwMDFFMDA4MDAxQjkwMDA2MjAwMUQ4Cis6MTAwMjkwMDAwMDBBMjAwMTAwRDYwMDc0MDBDNDA4MzYwMEM2MTA0MEQxCis6MTAwMkEwMDAwMDk4ODAwNzAwQ0MzODM1MDA5NTAxMEYwMEQ0MDAxRjVFCis6MTAwMkIwMDAwMEQ0NjA2MjAwODAwMDAyMDBENDIwNjIwMENDMTQzM0JECis6MTAwMkMwMDAwMDg0MDFCQzAwRDQwMDcwMDBENTQwMUUwMDgwMDAwMkY0Cis6MTAwMkQwMDAwMEVFMDAxRTAwQ0EwQzAwMDBDQTEwMDAwMEQ0QzAxQUI0Cis6MTAwMkUwMDAwMDg0MDFCQzAwRDUwMDFBMDBDQzA0NDMwMDM1MTAxRjY3Cis6MTAwMkYwMDAwMDJDOTQwMTAwN0QwOThCMDA5ODQwMDUwMDdEMTVDQkYyCis6MTAwMzAwMDAwMEQ0MDAxQTAwODAwMUI5MDBENDAwNkQwMDM0NDQwMTBCCis6MTAwMzEwMDAwMENDMEM0NDAwOTg0MDNBMDBDQzJDNDYwMDk1ODAwNDU4Cis6MTAwMzIwMDAwMENDMDQ0NTAwODAwMUI5MDBENDAwMUEwMEQ0QzAxQUUyCis6MTAwMzMwMDAwMDI4MjgwMTAwODQwMEYzMDBDQzEwMDMwMDk4ODAxQkUzCis6MTAwMzQwMDAwMDA0MzgwQzAwODQwMEYzMDBDQzEwMDMwMDk4ODAxN0UwCis6MTAwMzUwMDAwMDA0MzgwODAwODQwMEYzMDBDQzEwMDMwMDk4ODAxM0Q4Cis6MTAwMzYwMDAwMDA0MzgwNDAwODQwMEYzMDBDQzEwMDMwMDk4ODAxNENCCis6MTAwMzcwMDAwMENDMTA0NzAwOUE4MDA5MDBDQzE0NDgwMDk4NDBEQTVECis6MTAwMzgwMDAwMEQ0MDA2RDAwQ0MxODQ0MDBENTAwMUEwMEQ1NDAxQUU2Cis6MTAwMzkwMDAwMDgwMDBDQzAwRDU4MDFBMDA5NkMwRDMwMEQ0MDA2RDM4Cis6MTAwM0EwMDAwMDgwMDFCOTAwRDQwMDZFMDA5QUMwMDMwMEQ0MDA2RDMzCis6MTAwM0IwMDAwMEQ0MDA2RTAwODAwMDAyMDBFQzAwN0YwMDlBQzBDQUVBCis6MTAwM0MwMDAwMEQ0MDA2RDAwODAwMUI5MDBENDAwNkUwMENDMTQwMzhECis6MTAwM0QwMDAwMENDMTgwMzAwQ0MxQzAzMDA3RDkxMDMwMDdERDU4MzY1Cis6MTAwM0UwMDAwMDdEMTkwQzAwMzVDQzFGMDAzNTcwMUYwMDdDRjBDQjUwCis6MTAwM0YwMDAwMDdDRDA4QjAwODgwMDAwMDA3RThFOEIwMDk1QzAwNEFFCis6MTAwNDAwMDAwMEQ0MDA2RTAwODAwMUI5MDBENDAwMUEwMEQ0QzAxQUQ0Cis6MTAwNDEwMDAwMENDMDgwMzAwQ0MwQzAzMDBDQzEwMDMwMENDMTQwMzY4Cis6MTAwNDIwMDAwMENDMTgwMzAwQ0MxQzAzMDBDQzI0MDMwMENDMjgwMzEwCis6MTAwNDMwMDAwMDM1QzQxRjAwMzZCMDFGMDA3QzcwNEIwMDM0RjAxRjI1Cis6MTAwNDQwMDAwMDdDNzA0QjAwMzU3MDFGMDA3QzcwNEIwMDdEODg4MUY0Cis6MTAwNDUwMDAwMDdEQ0NDMTAwN0U1MTAxMDA3RTk1NDEwMDdDOTA4MkUwCis6MTAwNDYwMDAwMDdDRDRDMjAwN0M4NDhCMDA5QUMwMDMwMDdDOEM4QkZGCis6MTAwNDcwMDAwMDJDODgwMTAwOTg4MDlDMDBENDAwNkQwMDk4NDA5QTYwCis6MTAwNDgwMDAwMEQ0MDA2RTAwQ0MwODQ3MDBDQzBDNDgwMENDMTA0NENGCis6MTAwNDkwMDAwMEQ0ODAxQTAwRDRDMDFBMDA4MDAxMDQwMEQ1MDAxQUNDCis6MTAwNEEwMDAwMENDMDgzMjAwRDQwMDMyMDA5NDgyRDgwMENBMEMwMDdDCis6MTAwNEIwMDAwMEQ0NDAxRTAwODAwMDAyMDBENDAwMUUwMEU0MDExRTkzCis6MTAwNEMwMDAwMEQ0MDAxRTAwQ0EwODAwMDBDQTBDMDAwMENBMTAwMEI4Cis6MTAwNEQwMDAwMEQ0NDAxRTAwQ0ExNDAwMDBENDgwMUUwMEQ0QzAxRUU4Cis6MTAwNEUwMDAwMEQ1MDAxRTAwRDU0MDFFMDBENTQwMzQwMDgwMDAwMjFCCis6MTAwNEYwMDAwMEVFMDAxRTAwMjgwNDA0MDBFMjAwMUEwMEUyMDAxQUM4Cis6MTAwNTAwMDAwMEQ0NDAxQTAwQ0EzODAwMDBDQzA4MDMwMENDMEMwMzA5Cis6MTAwNTEwMDAwMENDMEMwMzAwQ0MwQzAzMDA5ODgyQkMwMDAwMDAwMDRGCis6MTAwNTIwMDAwMDg0MDFCQzAwRDc4MDZGMDA4MDAwMDIwMEVFMDAxRjM1Cis6MTAwNTMwMDAwMENBMDQwMDAwQzJGRjAwMDBDQzA4MzQwMEMxM0ZGRjI1Cis6MTAwNTQwMDAwMDdDNzRDQjAwN0NDOTBCMDA3RDAxMEYwMDk5MDJBRkM5Cis6MTAwNTUwMDAwMDdDNzM4QjAwODQwMUJDMDBENzgwNkYwMDgwMDAwMjk4Cis6MTAwNTYwMDAwMEVFMDAxRjAwQ0EwODAwMDAyODE5MDAwMDdEODk4QkRBCis6MTAwNTcwMDAwMDk1ODAxNDAwMjgxNDA0MDBDQTBDMDAwMENBMTAwMDYyCis6MTAwNTgwMDAwMENBMUMwMDAwQ0EyNDAwMDBFMjAwMUYwMEQ0QzAxQUU4Cis6MTAwNTkwMDAwMEQ1MDAxQTAwRDU0MDFBMDBDQzE4MDMwMENDMkMwMzVCCis6MTAwNUEwMDAwMENDMkMwMzAwQ0MyQzAzMDA3REE1OEIwMDdEOUM0NzQ4Cis6MTAwNUIwMDAwMDk4NDI5NjAwMDAwMDAwMDA4MDAxNjQwMEQ0QzAxQTM4Cis6MTAwNUMwMDAwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDIwMEVFMDAxRUY5Cis6MTAwNUQwMDAwMEU0MDExRTAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRUU4Cis6MTAwNUUwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDEzRUVGCis6MTAwNUYwMDAwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMEZECis6MTAwNjAwMDAwMEEwMDAwMDAwN0U4MjhCMDBDQTA4MDAwMDI0OEMwNjM3Cis6MTAwNjEwMDAwMDBDQ0MwNjAwOThDMDA2MDBDQzEwNDkwMDk5MDAwNERDCis6MTAwNjIwMDAwMEQ0MDA3MTAwRTQwMTFFMDBENDAwMUUwMEQ0NDAxRTVFCis6MTAwNjMwMDAwMEQ0ODAxRTAwODAwMDAyMDBFRTAwMUUwMENBMDgwMEU4Cis6MTAwNjQwMDAwMENBMEMwMDAwMzREMDE4MDAyNTEwMDEwMDk1MDAxRkNFCis6MTAwNjUwMDAwMEMxN0ZGRjAwQ0ExMDAwMDBDQTE0MDAwMENBMTgwMEMxCis6MTAwNjYwMDAwMEQ0ODAxRDAwRDRDMDFEMDA3REIxOEIwMEMxNDIwMkFBCis6MTAwNjcwMDAwMEMyQzAwMTAwRDU4MDFEMDAzNERDMEUwMDdENUQ0QzQxCis6MTAwNjgwMDAwMDdGNzM0QzAwRDc0MDFFMDBENTAwMUUwMEQ1NDAxRUQxCis6MTAwNjkwMDAwMEMxNDIwMDAwQzJDMDAwMDAwOTlDMDEwMDMxREMxMDEyCis6MTAwNkEwMDAwMDdGNUY0QzAwN0Y3MzRDMDA3RDgzODAwMEQ1ODA2RjlFCis6MTAwNkIwMDAwMEQ1ODA2NjAwRDc0MDFFMDBFQzAwNUUwMEM4MjQwMjEyCis6MTAwNkMwMDAwMDgwMDFCOTAwRDYwMDc0MDBENDQwMUUwMEQ0ODAxRTAyCis6MTAwNkQwMDAwMEQ0QzAxRTAwODAwMDAyMDBFRTAwMUUwMDgwMDAwMjU4Cis6MTAwNkUwMDAwMEVFMDAxRjAwRDQwMDFGMDA4MDAwMDIwMEQ0MDAxRjk1Cis6MTAwNkYwMDAwMEQ0MDAxRjAwODgwMDAwMDBENDAwMUYwMDAwMDAwMDhDCis6MTAwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTAwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTAwNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAwN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAwODAwMDAwMDAxMDE3NDAwMDIwMTdCMDAwMzAwOTAwMDA0MDA4MERECis6MTAwODEwMDAwMDA1MDAwNTAwMDYwMDQwMDAwNzAwMzMwMDA4MDEyRjE2Cis6MTAwODIwMDAwMDA5MDA0NzAwMEEwMDM3MDAxMDAxQjcwMDE3MDBBNEI0Cis6MTAwODMwMDAwMDIyMDEzRDAwMjMwMTRDMDAyMDAwQjUwMDI0MDEyOEM2Cis6MTAwODQwMDAwMDI3MDA0RTAwMjgwMDZCMDAyQTAwNjEwMDJCMDA1Mzk3Cis6MTAwODUwMDAwMDJGMDA2NjAwMzIwMDg4MDAzNDAxODIwMDNDMDE1OUZDCis6MTAwODYwMDAwMDNGMDA3MzAwNDEwMThGMDA0NDAxMzEwMDU1MDE3NkMzCis6MTAwODcwMDAwMDU2MDE3RDAwNjAwMDBDMDA2MTAwMzUwMDYyMDAzOTA3Cis6MTAwODgwMDAwMDYzMDAzOTAwNjQwMDM5MDA2NTAwMzkwMDY2MDAzOUYyCis6MTAwODkwMDAwMDY3MDAzOTAwNjgwMDNCMDA2OTAwNDIwMDZBMDA0OUI3Cis6MTAwOEEwMDAwMDZCMDA0OTAwNkMwMDQ5MDA2RDAwNDkwMDZFMDA0OTcyCis6MTAwOEIwMDAwMDZGMDA0OTAwNzMwMUI3MDAwMDAwMDcwMDAwMDAwNzQ3Cis6MTAwOEMwMDAwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDcwMDAwMDAwNzBDCis6MTAwOEQwMDAwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDcwMDAwMDAwN0ZDCis6MTAwOEUwMDAwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDcwMDAwMDAwN0VDCis6MTAwOEYwMDAwMDAwMDAwNzAwMDAwMDA3MDAwMDAwMDcwMDAwMDAwN0RDCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JTNjAwX2NwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JTNjAwX2NwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODk1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlM2MDBfY3AuYmluLmloZXgKQEAgLTAsMCArMSwxMzAgQEAKKzoxMDAwMDAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAwMDQwMDBFMDAwQUUKKzoxMDAwMTAwMDAwMDAwMDA4MDAwMDAwQTAwMDAwMDAwODAwMDAwMEE0OEMKKzoxMDAwMjAwMDAwMDAwMDAwNEE1NTRCNEEwMDAwMDAwMDRBNEE0NDY3NUQKKzoxMDAwMzAwMDAwMDAwMDAwNTU1MjZGNzUwMDAwMDAwMDRBN0U3RDY1OEIKKzoxMDAwNDAwMDAwMDAwMDAwNEFFNzRBRjYwMDAwMDAwMDRBRDM0QTRBOEUKKzoxMDAwNTAwMDAwMDAwMDAwRDY4OTg5ODkwMDAwMDAwMENENEFERENGNkMKKzoxMDAwNjAwMDAwMDAwMDAwOEVCRTRBRTIwMDAwMDAwMEMzOEE4QThBQjcKKzoxMDAwNzAwMDAwMDAwMDAwNEEwRjhDQzgwMDAwMDAwNDAwMENBMDAwMjMKKzoxMDAwODAwMDAwMDAwMDM4MDAwRDAwMTIwMDAwMDAwNDAwMDBFOEI0NzkKKzoxMDAwOTAwMDAwMDAwMDM4MDAwRDAwMTQwMDAwMDAwNDAwMDBFOEI2NjUKKzoxMDAwQTAwMDAwMDAwMDM4MDAwRDAwMTYwMDAwMDAwNDAwMDBFODU0QjUKKzoxMDAwQjAwMDAwMDAwMDM4MDAwRDAwMTgwMDAwMDAwNDAwMDBFODU1QTIKKzoxMDAwQzAwMDAwMDAwMDM4MDAwRDAwMUEwMDAwMDAwNDAwMDBFODU2OEYKKzoxMDAwRDAwMDAwMDAwMDM4MDAwRDAwMUMwMDAwMDAwNDAwMDBFODU3N0MKKzoxMDAwRTAwMDAwMDAwMDM4MDAwRDAwMUUwMDAwMDAwNDAwMDBFODI0OUQKKzoxMDAwRjAwMDAwMDAwMDM4MDAwRDAwMjAwMDAwMDAwNDAwMDBFODI1OEEKKzoxMDAxMDAwMDAwMDAwMDM4MDAwRDAwMjIwMDAwMDAwNDAwMDBFODMwNkMKKzoxMDAxMTAwMDAwMDAwMDM4MDAwRDAwMjQwMDAwMDAwNDAwMDBGMEMwQzIKKzoxMDAxMjAwMDAwMDAwMDM4MDAwRDAwMjYwMDAwMDAwNDAwMDBGMEMxQUYKKzoxMDAxMzAwMDAwMDAwMDM4MDAwRDAwMjgwMDAwMDAwNDAwMDBGMDQxMUQKKzoxMDAxNDAwMDAwMDAwMDM4MDAwRDAwMkEwMDAwMDAwNDAwMDBGMTg0QzcKKzoxMDAxNTAwMDAwMDAwMDM4MDAwRDAwMkMwMDAwMDAwNDAwMDBGMTg1QjQKKzoxMDAxNjAwMDAwMDAwMDM4MDAwRDAwMkUwMDAwMDAwNDAwMDBGMTg2QTEKKzoxMDAxNzAwMDAwMDAwMDM4MDAwRDAwMzAwMDAwMDAwNDAwMDBGMTg3OEUKKzoxMDAxODAwMDAwMDAwMDM4MDAwRDAwMzIwMDAwMDAwNDAwMDBGMTgwODMKKzoxMDAxOTAwMDAwMDAwMDM4MDAwRDAwMzQwMDAwMDAwNDAwMDBGMzkzNUMKKzoxMDAxQTAwMDAwMDAwMDM4MDAwRDAwMzYwMDAwMDAwNDAwMDBGMzhBNTMKKzoxMDAxQjAwMDAwMDAwMDM4MDAwRDAwMzgwMDAwMDAwNDAwMDBGMzhFM0QKKzoxMDAxQzAwMDAwMDAwMDA0MDAwMEU4MjEwMDAwMDAwNDAxNDBBMDAwM0QKKzoxMDAxRDAwMDAwMDAwMDE4MDAwMDAwNDMwMDAwMDAwNDAwQ0NFODAwMEMKKzoxMDAxRTAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwOUIKKzoxMDAxRjAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwOEIKKzoxMDAyMDAwMDAwMDAwMDA0MDAxQjAwMDEwMDAwMDAwNDA4MDA0ODAwN0EKKzoxMDAyMTAwMDAwMDAwMDA4MDAwMDAwM0EwMDAwMDAwMDAwMDBBMDAwRkMKKzoxMDAyMjAwMDAwMDAwMDA0MjAwMDQ1MUQwMDAwMDAwNDAwMDBFNTgwREYKKzoxMDAyMzAwMDAwMDAwMDA0MDAwQ0U1ODEwMDAwMDAwNDA4MDA0NTgwNzcKKzoxMDAyNDAwMDAwMDAwMDA0MDAwQ0U1ODEwMDAwMDAwODAwMDAwMDQ3RTkKKzoxMDAyNTAwMDAwMDAwMDAwMDAwMEEwMDAwMDAwMDAwNDAwMEMyMDAwQ0UKKzoxMDAyNjAwMDAwMDAwMDA0MDAwMEU1MEUwMDAwMDAwNDAwMDMyMDAwNzAKKzoxMDAyNzAwMDAwMDAwMDI4MDAwMjIwNTEwMDAwMDAyNDAwMDAwMDUxNkUKKzoxMDAyODAwMDAwMDAwMDA0MDgwMDQ1MEYwMDAwMDAwODAwMDBBMDRCMUIKKzoxMDAyOTAwMDAwMDAwMDA0MDAwMEU1NjUwMDAwMDAwNDAwMDBFNTY2QzEKKzoxMDAyQTAwMDAwMDAwMDA4MDAwMDAwNTIwMDAwMDAwNDAzQ0NBNUI0QzgKKzoxMDAyQjAwMDAwMDAwMDA0MDU0MzIwMDAwMDAwMDAwNDAwMDIyMDAwQUMKKzoxMDAyQzAwMDAwMDAwMDMwNENDQ0UwNUUwMDAwMDAwNDA4Mjc0NTY1Q0IKKzoxMDAyRDAwMDAwMDAwMDMwMDAwMDAwNUUwMDAwMDAwNDA4MDA0NTY0REIKKzoxMDAyRTAwMDAwMDAwMDA0MDAwMEU1NjYwMDAwMDAwODAwMDAwMDU1NjIKKzoxMDAyRjAwMDAwMDAwMDEwMDA4MDIwNjEwMDAwMDAwNDAwMjAyMDAwQTkKKzoxMDAzMDAwMDAwMDAwMDA0MDAxQjAwRkYwMDAwMDAxMDAxMDAwMDY0NUEKKzoxMDAzMTAwMDAwMDAwMDA0MDAxRjIwMDAwMDAwMDAwNDAwMUMwMEZGN0IKKzoxMDAzMjAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAzMDAwMDAwMDcyMUYKKzoxMDAzMzAwMDAwMDAwMDA4MDAwMDAwNTUwMDAwMDAwNDAwMDBFNTc2MDEKKzoxMDAzNDAwMDAwMDAwMDA0MDAwMEU1NzcwMDAwMDAwNDAwMDBFNTBFNTYKKzoxMDAzNTAwMDAwMDAwMDA0MDAwMEU1MEYwMDAwMDAwNDAxNDBBMDAwQzAKKzoxMDAzNjAwMDAwMDAwMDE4MDAwMDAwNjkwMDAwMDBDMjAwQzBFNUY5QUMKKzoxMDAzNzAwMDAwMDAwMDA4MDAwMDAwNjkwMDAwMDAwNDAwMTRFNTBFMDEKKzoxMDAzODAwMDAwMDAwMDA0MDA0MEU1MEYwMDAwMDAwODAwQzAwMDZDMDEKKzoxMDAzOTAwMDAwMDAwMDA0MDAwMEU1NzAwMDAwMDAwNDAwMDBFNTcxQUEKKzoxMDAzQTAwMDAwMDAwMDBDMDAwMEU1NzIwMDAwMDAwNDAwMDBBMDAwNDYKKzoxMDAzQjAwMDAwMDAwMDA0MDE0MEEwMDAwMDAwMDAwNDAwMDBFNTY4MDcKKzoxMDAzQzAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAxODAwMDAwMDc2NkYKKzoxMDAzRDAwMDAwMDAwMDA0MDAwQjAwMDAwMDAwMDAwNDE4QzBFNTYyRUIKKzoxMDAzRTAwMDAwMDAwMDA4MDAwMDAwNzgwMDAwMDAwODAwQzAwMDc3NEUKKzoxMDAzRjAwMDAwMDAwMDA0MDAwNzAwRDUwMDAwMDAzODAwMDAwMDg0NjEKKzoxMDA0MDAwMDAwMDAwMDMwMDAwQ0EwODYwMDAwMDAwNDA4MDA0NUJCN0UKKzoxMDA0MTAwMDAwMDAwMDMwMDAwQzIwODcwMDAwMDAwMDA4MDBFNUJDNTAKKzoxMDA0MjAwMDAwMDAwMDA0MDAwMEU1QkIwMDAwMDAwMDAwMDBFNUJDODcKKzoxMDA0MzAwMDAwMDAwMDBDMDAxMjAwMDAwMDAwMDAwNDAwMTIwMDAwODgKKzoxMDA0NDAwMDAwMDAwMDBDMDAxQjAwMDIwMDAwMDAwNDAwMDBBMDAwREYKKzoxMDA0NTAwMDAwMDAwMDA0MDAwMEU4MjEwMDAwMDAwMDAwMDBFODAwQTcKKzoxMDA0NjAwMDAwMDAwMDA0MDAwMEU4MjEwMDAwMDAwMDAwMDBFODJFNjkKKzoxMDA0NzAwMDAwMDAwMDA0MDJDQ0EwMDAwMDAwMDAwNDAwMTQwMDAwRjIKKzoxMDA0ODAwMDAwMDAwMDA0MDAwQ0UxQ0MwMDAwMDAwNDA1MERFMUNERUIKKzoxMDA0OTAwMDAwMDAwMDA0MDA0MDAwMDAwMDAwMDAxODAwMDAwMDk2NkEKKzoxMDA0QTAwMDAwMDAwMDA0MDBDMEEwMDAwMDAwMDAwODAwMDAwMDkzNEQKKzoxMDA0QjAwMDAwMDAwMDIwMDAwMDAwOTgwMDAwMDAwMDQyMDBFMDAwNjIKKzoxMDA0QzAwMDAwMDAwMDM4MDAwMDAwOUYwMDAwMDAwNDAwMENBMDAwQTUKKzoxMDA0RDAwMDAwMDAwMDA0MDAxNDAwMDAwMDAwMDAwNDAwMEMyMDAwRDQKKzoxMDA0RTAwMDAwMDAwMDA0MDAxNjAwMDAwMDAwMDAwNDcwMENFMDAwOTIKKzoxMDA0RjAwMDAwMDAwMDA4MDAxNDAwOUIwMDAwMDAwMDQwMDBFMDAwMjUKKzoxMDA1MDAwMDAwMDAwMDA0MDI0MDAwMDAwMDAwMDAwNDQwMEVFMDAwNzMKKzoxMDA1MTAwMDAwMDAwMDA0MDI0MDAwMDAwMDAwMDAwMDQwMDBFMDAwNzUKKzoxMDA1MjAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAwNDAyNDBFNTFCNTUKKzoxMDA1MzAwMDAwMDAwMDA1MDA4MEU1MEEwMDAwMDAwNTAwODBFNTBCRDIKKzoxMDA1NDAwMDAwMDAwMDA0MDAyMjAwMDAwMDAwMDAwNDAwMDcwMEQ1QTUKKzoxMDA1NTAwMDAwMDAwMDM4MDAwMDAwQjIwMDAwMDAzMDAwMEMyMDg3Q0UKKzoxMDA1NjAwMDAwMDAwMDA1MDg4MEU1QkQwMDAwMDAzMDAwMEMyMDg2N0EKKzoxMDA1NzAwMDAwMDAwMDA1MDgwMEU1QkIwMDAwMDAzMDAwMEMyMDg3RUIKKzoxMDA1ODAwMDAwMDAwMDA1MDg4MEU1QkMwMDAwMDAwODAwMDAwMEI1ODAKKzoxMDA1OTAwMDAwMDAwMDA1MDA4MEU1QkQwMDAwMDAwNTAwMDBFNUJCOEYKKzoxMDA1QTAwMDAwMDAwMDA1MDA4MEU1QkMwMDAwMDAwNDAwMjEwMDAwMDAKKzoxMDA1QjAwMDAwMDAwMDA0MDI4MDAwMDAwMDAwMDAxODAwQzAwMEI5MjQKKzoxMDA1QzAwMDAwMDAwMDQwNDE4MEUwMDAwMDAwMDAyNDAwMDAwMEJCNkIKKzoxMDA1RDAwMDAwMDAwMDBDMDEwMDAwMDAwMDAwMDAwQzAxMDBFNTFERkYKKzoxMDA1RTAwMDAwMDAwMDA0MDAwMDQ1QkIwMDAwMDAwODAwMDA4MEI1Q0EKKzoxMDA1RjAwMDAwMDAwMDA0MDAwMEYzQ0UwMDAwMDAwNDAxNDBBMDAwNTEKKzoxMDA2MDAwMDAwMDAwMDA0MDBDQzIwMDAwMDAwMDA0MDA4QzA1M0NGRDAKKzoxMDA2MTAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwNDAwMDBGM0QyOTEKKzoxMDA2MjAwMDAwMDAwMDA0MDE0MEEwMDAwMDAwMDAwNDAwQ0MyMDAwRjUKKzoxMDA2MzAwMDAwMDAwMDQwMDhDMDUzRDMwMDAwMDAwMDAwMDA4MDAwMEMKKzoxMDA2NDAwMDAwMDAwMDA0MDAwMEYzOUQwMDAwMDAwNDAxNDBBMDAwMzEKKzoxMDA2NTAwMDAwMDAwMDA0MDBDQzIwMDAwMDAwMDA0MDA4QzA1MzlFQjEKKzoxMDA2NjAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwNDAzQzAwODMwMEIKKzoxMDA2NzAwMDAwMDAwMDAwNDIwMEUwMDAwMDAwMDAwNDAwMDBBMDAwQjQKKzoxMDA2ODAwMDAwMDAwMDA0MjAwMDQ1RTAwMDAwMDAwMDAwMDBFNUUxNUIKKzoxMDA2OTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwNDAwMDcwMEQyN0MKKzoxMDA2QTAwMDAwMDAwMDAwMDgwMEUzOTQwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDA2QjAwMDAwMDAwMDA0MDAwMEU4QzQwMDAwMDAwNDAwMDBFOEM1RDkKKzoxMDA2QzAwMDAwMDAwMDA0MDAwMEU4QzYwMDAwMDAwNDAwMDBFOTI4NjMKKzoxMDA2RDAwMDAwMDAwMDA0MDAwMEU5MjkwMDAwMDAwNDAwMDBFOTJBRUQKKzoxMDA2RTAwMDAwMDAwMDA4MDAwMDAwRDYwMDAwMDAwNDAwMDBFOTI4MTcKKzoxMDA2RjAwMDAwMDAwMDA0MDAwMEU5MjkwMDAwMDAwNDAwMDBFOTJBQ0QKKzoxMDA3MDAwMDAwMDAwMDA4MDAwMDAwREQwMDAwMDAwMDAwRTAwMTE2MEQKKzoxMDA3MTAwMDAwMDAwMDA0MDAwNzAwRTEwMDAwMDAwNDA4MDA0MDFDODUKKzoxMDA3MjAwMDAwMDAwMDA0MjAwMDUwRTcwMDAwMDAwNDAwMDBFMDFENkQKKzoxMDA3MzAwMDAwMDAwMDA4MDAwMDAwRTQwMDAwMDAwNDAyQzAyMDAwRTcKKzoxMDA3NDAwMDAwMDAwMDA0MDAwNjAwMDAwMDAwMDAzNDAwMDAwMEVCODAKKzoxMDA3NTAwMDAwMDAwMDA4MDAwMDAwRTgwMDAwMDAwNDAwMDA4MDAwMjUKKzoxMDA3NjAwMDAwMDAwMDAwQzAwMEUwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDA0MDAwQzIwMDAwMDAwMDAwNDAwMUQwMDE4RDAKKzoxMDA3QzAwMDAwMDAwMDA0MDAxQTAwMDEwMDAwMDAzNDAwMDAwMEZCREIKKzoxMDA3RDAwMDAwMDAwMDA4MDAwMDAwNEEwMDAwMDAwODA1MDBBMDRBRDAKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzowMDAwMDAwMUZGCisvKiBwcm9kdWN0aW9uIHJhZGVvbiB1Y29kZSByMXh4LXI2eHggKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SUzY5MF9jcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SUzY5MF9jcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODk2Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JTNjkwX2NwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTMwIEBACis6MTAwMDAwMDAwMDAwMDAwODAwMDAwMEREMDAwMDAwMDgwMDAwMDBERjI0Cis6MTAwMDEwMDAwMDAwMDAwODAwMDAwMEEwMDAwMDAwMDgwMDAwMDBBNDhDCis6MTAwMDIwMDAwMDAwMDAwMDRBNTU0QjRBMDAwMDAwMDA0QTRBNDQ2NzVECis6MTAwMDMwMDAwMDAwMDAwMDU1NTI2Rjc1MDAwMDAwMDA0QTdFN0Q2NThCCis6MTAwMDQwMDAwMDAwMDAwMDRBRDc0QUY2MDAwMDAwMDA0QUM5NEE0QUE4Cis6MTAwMDUwMDAwMDAwMDAwMENDODk4OTg5MDAwMDAwMDBDMzRBRDNDNTk0Cis6MTAwMDYwMDAwMDAwMDAwMDhFNEE0QTRBMDAwMDAwMDA0QThBOEE4QTNDCis6MTAwMDcwMDAwMDAwMDAwMDRBMEY4QzRBMDAwMDAwMDQwMDBDQTAwMEExCis6MTAwMDgwMDAwMDAwMDAzODAwMEQwMDEyMDAwMDAwMDQwMDAwRThCNDc5Cis6MTAwMDkwMDAwMDAwMDAzODAwMEQwMDE0MDAwMDAwMDQwMDAwRThCNjY1Cis6MTAwMEEwMDAwMDAwMDAzODAwMEQwMDE2MDAwMDAwMDQwMDAwRTg1NEI1Cis6MTAwMEIwMDAwMDAwMDAzODAwMEQwMDE4MDAwMDAwMDQwMDAwRTg1NUEyCis6MTAwMEMwMDAwMDAwMDAzODAwMEQwMDFBMDAwMDAwMDQwMDAwRTg1NjhGCis6MTAwMEQwMDAwMDAwMDAzODAwMEQwMDFDMDAwMDAwMDQwMDAwRTg1NzdDCis6MTAwMEUwMDAwMDAwMDAzODAwMEQwMDFFMDAwMDAwMDQwMDAwRTgyNDlECis6MTAwMEYwMDAwMDAwMDAzODAwMEQwMDIwMDAwMDAwMDQwMDAwRTgyNThBCis6MTAwMTAwMDAwMDAwMDAzODAwMEQwMDIyMDAwMDAwMDQwMDAwRTgzMDZDCis6MTAwMTEwMDAwMDAwMDAzODAwMEQwMDI0MDAwMDAwMDQwMDAwRjBDMEMyCis6MTAwMTIwMDAwMDAwMDAzODAwMEQwMDI2MDAwMDAwMDQwMDAwRjBDMUFGCis6MTAwMTMwMDAwMDAwMDAzODAwMEQwMDI4MDAwMDAwMDQwMDAwRjA0MTFECis6MTAwMTQwMDAwMDAwMDAzODAwMEQwMDJBMDAwMDAwMDQwMDAwRjE4NEM3Cis6MTAwMTUwMDAwMDAwMDAzODAwMEQwMDJDMDAwMDAwMDQwMDAwRjE4NUI0Cis6MTAwMTYwMDAwMDAwMDAzODAwMEQwMDJFMDAwMDAwMDQwMDAwRjE4NkExCis6MTAwMTcwMDAwMDAwMDAzODAwMEQwMDMwMDAwMDAwMDQwMDAwRjE4NzhFCis6MTAwMTgwMDAwMDAwMDAzODAwMEQwMDMyMDAwMDAwMDQwMDAwRjE4MDgzCis6MTAwMTkwMDAwMDAwMDAzODAwMEQwMDM0MDAwMDAwMDQwMDAwRjM5MzVDCis6MTAwMUEwMDAwMDAwMDAzODAwMEQwMDM2MDAwMDAwMDQwMDAwRjM4QTUzCis6MTAwMUIwMDAwMDAwMDAzODAwMEQwMDM4MDAwMDAwMDQwMDAwRjM4RTNECis6MTAwMUMwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDQwMTQwQTAwMDNECis6MTAwMUQwMDAwMDAwMDAxODAwMDAwMDQzMDAwMDAwMDQwMENDRTgwMDBDCis6MTAwMUUwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDlCCis6MTAwMUYwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDhCCis6MTAwMjAwMDAwMDAwMDAwNDAwMUIwMDAxMDAwMDAwMDQwODAwNDgwMDdBCis6MTAwMjEwMDAwMDAwMDAwODAwMDAwMDNBMDAwMDAwMDAwMDAwQTAwMEZDCis6MTAwMjIwMDAwMDAwMDAwNDIwMDA0NTFEMDAwMDAwMDQwMDAwRTU4MERGCis6MTAwMjMwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDQwODAwNDU4MDc3Cis6MTAwMjQwMDAwMDAwMDAwNDAwMENFNTgxMDAwMDAwMDgwMDAwMDA0N0U5Cis6MTAwMjUwMDAwMDAwMDAwMDAwMDBBMDAwMDAwMDAwMDQwMDBDMjAwMENFCis6MTAwMjYwMDAwMDAwMDAwNDAwMDBFNTBFMDAwMDAwMDQwMDAzMjAwMDcwCis6MTAwMjcwMDAwMDAwMDAyODAwMDIyMDUxMDAwMDAwMjQwMDAwMDA1MTZFCis6MTAwMjgwMDAwMDAwMDAwNDA4MDA0NTBGMDAwMDAwMDgwMDAwQTA0QjFCCis6MTAwMjkwMDAwMDAwMDAwNDAwMDBFNTY1MDAwMDAwMDQwMDAwRTU2NkMxCis6MTAwMkEwMDAwMDAwMDAwODAwMDAwMDUyMDAwMDAwMDQwM0NDQTVCNEM4Cis6MTAwMkIwMDAwMDAwMDAwNDA1NDMyMDAwMDAwMDAwMDQwMDAyMjAwMEFDCis6MTAwMkMwMDAwMDAwMDAzMDRDQ0NFMDVFMDAwMDAwMDQwODI3NDU2NUNCCis6MTAwMkQwMDAwMDAwMDAzMDAwMDAwMDVFMDAwMDAwMDQwODAwNDU2NERCCis6MTAwMkUwMDAwMDAwMDAwNDAwMDBFNTY2MDAwMDAwMDgwMDAwMDA1NTYyCis6MTAwMkYwMDAwMDAwMDAxMDAwODAyMDYxMDAwMDAwMDQwMDIwMjAwMEE5Cis6MTAwMzAwMDAwMDAwMDAwNDAwMUIwMEZGMDAwMDAwMTAwMTAwMDA2NDVBCis6MTAwMzEwMDAwMDAwMDAwNDAwMUYyMDAwMDAwMDAwMDQwMDFDMDBGRjdCCis6MTAwMzIwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMzAwMDAwMDA3MjFGCis6MTAwMzMwMDAwMDAwMDAwODAwMDAwMDU1MDAwMDAwMDQwMDAwRTU3NjAxCis6MTAwMzQwMDAwMDAwMDAwNDAwMDBFNTc3MDAwMDAwMDQwMDAwRTUwRTU2Cis6MTAwMzUwMDAwMDAwMDAwNDAwMDBFNTBGMDAwMDAwMDQwMTQwQTAwMEMwCis6MTAwMzYwMDAwMDAwMDAxODAwMDAwMDY5MDAwMDAwQzIwMEMwRTVGOUFDCis6MTAwMzcwMDAwMDAwMDAwODAwMDAwMDY5MDAwMDAwMDQwMDE0RTUwRTAxCis6MTAwMzgwMDAwMDAwMDAwNDAwNDBFNTBGMDAwMDAwMDgwMEMwMDA2QzAxCis6MTAwMzkwMDAwMDAwMDAwNDAwMDBFNTcwMDAwMDAwMDQwMDAwRTU3MUFBCis6MTAwM0EwMDAwMDAwMDAwQzAwMDBFNTcyMDAwMDAwMDQwMDAwQTAwMDQ2Cis6MTAwM0IwMDAwMDAwMDAwNDAxNDBBMDAwMDAwMDAwMDQwMDAwRTU2ODA3Cis6MTAwM0MwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMTgwMDAwMDA3NjZGCis6MTAwM0QwMDAwMDAwMDAwNDAwMEIwMDAwMDAwMDAwMDQxOEMwRTU2MkVCCis6MTAwM0UwMDAwMDAwMDAwODAwMDAwMDc4MDAwMDAwMDgwMEMwMDA3NzRFCis6MTAwM0YwMDAwMDAwMDAwNDAwMDcwMENCMDAwMDAwMzgwMDAwMDA4NDZCCis6MTAwNDAwMDAwMDAwMDAzMDAwMENBMDg2MDAwMDAwMDQwODAwNDVCQjdFCis6MTAwNDEwMDAwMDAwMDAzMDAwMEMyMDg3MDAwMDAwMDAwODAwRTVCQzUwCis6MTAwNDIwMDAwMDAwMDAwNDAwMDBFNUJCMDAwMDAwMDAwMDAwRTVCQzg3Cis6MTAwNDMwMDAwMDAwMDAwQzAwMTIwMDAwMDAwMDAwMDQwMDEyMDAwMDg4Cis6MTAwNDQwMDAwMDAwMDAwQzAwMUIwMDAyMDAwMDAwMDQwMDAwQTAwMERGCis6MTAwNDUwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDAwMDAwRTgwMEE3Cis6MTAwNDYwMDAwMDAwMDAwNDAwMDBFODIxMDAwMDAwMDAwMDAwRTgyRTY5Cis6MTAwNDcwMDAwMDAwMDAwNDAyQ0NBMDAwMDAwMDAwMDQwMDE0MDAwMEYyCis6MTAwNDgwMDAwMDAwMDAwNDAwMENFMUNDMDAwMDAwMDQwNTBERTFDREVCCis6MTAwNDkwMDAwMDAwMDAwNDAwNDAwMDAwMDAwMDAwMTgwMDAwMDA5NjZBCis6MTAwNEEwMDAwMDAwMDAwNDAwQzBBMDAwMDAwMDAwMDgwMDAwMDA5MzRECis6MTAwNEIwMDAwMDAwMDAyMDAwMDAwMDk4MDAwMDAwMDA0MjAwRTAwMDYyCis6MTAwNEMwMDAwMDAwMDAzODAwMDAwMDlGMDAwMDAwMDQwMDBDQTAwMEE1Cis6MTAwNEQwMDAwMDAwMDAwNDAwMTQwMDAwMDAwMDAwMDQwMDBDMjAwMEQ0Cis6MTAwNEUwMDAwMDAwMDAwNDAwMTYwMDAwMDAwMDAwMDQ3MDBDRTAwMDkyCis6MTAwNEYwMDAwMDAwMDAwODAwMTQwMDlCMDAwMDAwMDA0MDAwRTAwMDI1Cis6MTAwNTAwMDAwMDAwMDAwNDAyNDAwMDAwMDAwMDAwMDQ0MDBFRTAwMDczCis6MTAwNTEwMDAwMDAwMDAwNDAyNDAwMDAwMDAwMDAwMDA0MDAwRTAwMDc1Cis6MTAwNTIwMDAwMDAwMDAyQzAwMTAwMDAwMDAwMDAwMDAwMDAwNDAwMDRGCis6MTAwNTMwMDAwMDAwMDAwNDA4MDA0NUM4MDAwMDAwMDQwMDI0MDAwNTc1Cis6MTAwNTQwMDAwMDAwMDAwNDA4MDA0RDBCMDAwMDAwMDQwMDBDMjAwMDE3Cis6MTAwNTUwMDAwMDAwMDAwNDAyNDBFNTFCMDAwMDAwMDUwMDgwRTUwQUUxCis6MTAwNTYwMDAwMDAwMDAwNTAwODBFNTBCMDAwMDAwMDQwMDIyMDAwMEYwCis6MTAwNTcwMDAwMDAwMDAwNDAwMDcwMENCMDAwMDAwMzgwMDAwMDBCN0I2Cis6MTAwNTgwMDAwMDAwMDAzMDAwMEMyMDg3MDAwMDAwMDUwODgwRTVCRDU5Cis6MTAwNTkwMDAwMDAwMDAzMDAwMEMyMDg2MDAwMDAwMDUwODAwRTVCQkNDCis6MTAwNUEwMDAwMDAwMDAzMDAwMEMyMDg3MDAwMDAwMDUwODgwRTVCQzNBCis6MTAwNUIwMDAwMDAwMDAwODAwMDAwMEJBMDAwMDAwMDUwMDgwRTVCRDUyCis6MTAwNUMwMDAwMDAwMDAwNTAwMDBFNUJCMDAwMDAwMDUwMDgwRTVCQzYwCis6MTAwNUQwMDAwMDAwMDAwNDAwMjEwMDAwMDAwMDAwMDQwMjgwMDAwMDcwCis6MTAwNUUwMDAwMDAwMDAxODAwQzAwMEJFMDAwMDAwNDA0MTgwRTAwMDk0Cis6MTAwNUYwMDAwMDAwMDAyNDAwMDAwMEMwMDAwMDAwMEMwMTAwMDAwMDBBCis6MTAwNjAwMDAwMDAwMDAwQzAxMDBFNTFEMDAwMDAwMDQwMDAwNDVCQkQ3Cis6MTAwNjEwMDAwMDAwMDAwODAwMDA4MEJBMDAwMDAwMDQwM0MwMDgzMDk5Cis6MTAwNjIwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMDQwMDAwQTAwMDA0Cis6MTAwNjMwMDAwMDAwMDAwNDIwMDA0NUUwMDAwMDAwMDAwMDAwRTVFMUFCCis6MTAwNjQwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDQwMDA3MDBDOEQ2Cis6MTAwNjUwMDAwMDAwMDAwMDA4MDBFMzk0MDAwMDAwMDAwMDAwMDAwMDFCCis6MTAwNjYwMDAwMDAwMDAwNDAwMDBFOEM0MDAwMDAwMDQwMDAwRThDNTI5Cis6MTAwNjcwMDAwMDAwMDAwNDAwMDBFOEM2MDAwMDAwMDQwMDAwRTkyOEIzCis6MTAwNjgwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQTNECis6MTAwNjkwMDAwMDAwMDAwODAwMDAwMENDMDAwMDAwMDQwMDAwRTkyODcxCis6MTAwNkEwMDAwMDAwMDAwNDAwMDBFOTI5MDAwMDAwMDQwMDAwRTkyQTFECis6MTAwNkIwMDAwMDAwMDAwODAwMDAwMEQzMDAwMDAwMDQwMkMwMjAwMDc5Cis6MTAwNkMwMDAwMDAwMDAwNDAwMDYwMDAwMDAwMDAwMzQwMDAwMDBEQjExCis6MTAwNkQwMDAwMDAwMDAwODAwMDAwMEQ4MDAwMDAwMDQwMDAwODAwMEI2Cis6MTAwNkUwMDAwMDAwMDAwMEMwMDBFMDAwMDAwMDAwMzAwMDAwMDBFMTU5Cis6MTAwNkYwMDAwMDAwMDAwMDQyMDBFMDAwMDAwMDAwMzAwMDAwMDBFMUM3Cis6MTAwNzAwMDAwMDAwMDAwMDQwMDBFMDAwMDAwMDAwMDQwMDI1MDAxQjg1Cis6MTAwNzEwMDAwMDAwMDAwNDAwMjMwMDAwMDAwMDAwMDQwMDI1MDAwNTg0Cis6MTAwNzIwMDAwMDAwMDAzNDAwMDAwMEU2MDAwMDAwMEMwMDAwMDAwMEEzCis6MTAwNzMwMDAwMDAwMDAwNDAwMjQ0MDAwMDAwMDAwMDQwODAwNDVDODM4Cis6MTAwNzQwMDAwMDAwMDAwNDAwMjQwMDA1MDAwMDAwMEMwODAwNEQwQjEwCis6MTAwNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwNDAwMEMyMDAwMDAwMDAwMDQwMDFEMDAxOEQwCis6MTAwN0MwMDAwMDAwMDAwNDAwMUEwMDAxMDAwMDAwMzQwMDAwMDBGQkRCCis6MTAwN0QwMDAwMDAwMDAwODAwMDAwMDRBMDAwMDAwMDgwNTAwQTA0QUQwCis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MDAwMDAwMDFGRgorLyogcHJvZHVjdGlvbiByYWRlb24gdWNvZGUgcjF4eC1yNnh4ICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlM3ODBfbWUuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlM3ODBfbWUuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3OWMxMAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SUzc4MF9tZS5iaW4uaWhleApAQCAtMCwwICsxLDEzNDUgQEAKKzoxMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDAwMTAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwRkZGRjAwMjg0NjIxQTkKKzoxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwQUYKKzoxMDAwMzAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDAwNDAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMjYKKzoxMDAwNTAwMDAwMDAwMDAwMDAwMTAwMDBDMDI5NDYyMDAwMDAwMDAwNTAKKzoxMDAwNjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDAwNzAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBRjIKKzoxMDAwODAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwN0EKKzoxMDAwOTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0QkUKKzoxMDAwQTAwMDAwNjA0NDExMDAwMDA2MjIwMDAwMDAwMDAwNjAwMDAwMTMKKzoxMDAwQjAwMDAwMDAwNUQxMDAwMDAwMDAwMDYwMDAwMDAwMDAwNURFMjcKKzoxMDAwQzAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwRjAwMzkKKzoxMDAwRDAwMDAwMjgxNjIyMDAwMDAwMDAwMDAwMDAwODAwMjExNjI1NUMKKzoxMDAwRTAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwMzYyNTAwMDAwMDAwN0QKKzoxMDAwRjAwMDhEMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0RkEKKzoxMDAxMDAwMDAwMkYwMjI1MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQUQKKzoxMDAxMTAwMDAwMDAwMDE4MDA0MTIwMDAwMDQwNDgxMTAwMDAwMDE5QjQKKzoxMDAxMjAwMDAwNDIyMDAwMDAyMDQ4MTEwMDAwMDAwMDhFMDAwMDAwNjYKKzoxMDAxMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAyODAwMjA0QTJEOEIKKzoxMDAxNDAwMDAwMDAwMDAwOTAwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUEKKzoxMDAxNTAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDBDMjYKKzoxMDAxNjAwMDAwMjExNjIyMDAwMDAwMDAwMDAwMDAwMzAwMjgxNjI1RDAKKzoxMDAxNzAwMDAwMDAwMDAwMDAwMDAwMTkwMDIxMUEyMjAwMDAwMDAwMDkKKzoxMDAxODAwMDAwMDAwMDA0MDAyODFBMjYwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDAxOTAwMDAwMjkxNEM1MDAwMDAwMDAwMDAwMDAxOTAwMjAzNjI1QzkKKzoxMDAxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMTQwMjAwMDAwMDAwRkYKKzoxMDAxQjAwMDAwMDAwMDE2MDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAzQ0EKKzoxMDAxQzAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENUEKKzoxMDAxRDAwMDAwMDAwMDAwRkZGRkZGRkMwMDI4MEUyMzAwMDAwMDAwQ0QKKzoxMDAxRTAwMDAwMDAwMDAwMDAyOTE0QTMwMDAwMDAwMDAwMDAwMDE3MTgKKzoxMDAxRjAwMDAwMjAzNjI1MDAwMDAwMDAwMDAwODAwMDAwMjgwRTIyQUMKKzoxMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDIyMEUyMzAwMDAwMDAwOTQKKzoxMDAyMTAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDIwMDAwMDAwRUYKKzoxMDAyMjAwMDAwMjgwRTIyMDAwMDAwMDAwMDAwMDAwNjAwMjEwRTIzMUUKKzoxMDAyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwRUYKKzoxMDAyNDAwMDAwMDAwMDAwMDAyMjAyMjIwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDAyNTAwMDE0RTAwMDAwMDAwMDAwMzgwMDAwMDAwMDJFRTAwMDAwNjQKKzoxMDAyNjAwMDAwMDAwMDM1MDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDM3MTYKKzoxMDAyNzAwMDAwMDAwMDAwMDA0MDBFMkQwMDAwMDAzOTAwMDAwMDA4QzIKKzoxMDAyODAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwOTAwNDAxMjJEOEIKKzoxMDAyOTAwMDAwMDAwMDQ2MDAwMDAwMDEwMDQwMEUyRDAwMDAwMDM5NjMKKzoxMDAyQTAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMjgKKzoxMDAyQjAwMDAwMjgxMjIzMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0ODcKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzAwMDAwMDAwQUQKKzoxMDAyRDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDAzRTAwMDAwMDA4RTQKKzoxMDAyRTAwMDAwNDAxQzExMDAwMDAwNDEwMDAwMDAwRDAwMjAxRTJERTgKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMEYwMDI4MUUyNzAwMDAwMDAwODIKKzoxMDAzMDAwMDAwMDAwMDAzMDAyMjFFMjcwMDAwMDAwMDdGQzAwMDAwNDQKKzoxMDAzMTAwMDAwMjgxQTIzMDAwMDAwMDAwMDAwMDAxNDAwMjExQTI2MDMKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDMzMUEyNjAwMDAwMDAwNTkKKzoxMDAzMzAwMDAwMDAwMDA4MDAyMjFBMjYwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDAzNDAwMDAwMjkwQ0M3MDAwMDAwMDAwMDAwMDAyNzAwMjAzNjI0MTAKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MTIyMTAwMDAwMDAwQzMKKzoxMDAzNjAwMDAwMDAxNDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDAzNzAwMDBDRTAwMDAwMDAwMDAwNEIwMDAwMDAwMTAwMjkwRTIzRUIKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwMzYyMzAwMDAwMDAwRTYKKzoxMDAzOTAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRjgwMDAwMTEKKzoxMDAzQTAwMDAwMjk0QTIzMDAwMDAwMDAwMDAwMDAwMDAwM0EyQzAyNEYKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMEUyQjAwMDAwMDAwRTAKKzoxMDAzQzAwMEZDMDAwMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDBGQzkKKzoxMDAzRDAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTIzRjAKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMjcwMDIwNEEyRDAwMDAwMDAwNEYKKzoxMDAzRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDI5NUIKKzoxMDA0MDAwMDAwMjAwRTJEMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTIzRTkKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDA0MjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxNTIKKzoxMDA0MzAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwODMKKzoxMDA0NDAwMDAwMDAwMDYxMDAwMDAwMDAyRUUwMDAwMDAwMDAwMDVGREUKKzoxMDA0NTAwMDAwMDAwMDAwMkNFMDAwMDAwMDAwMDA1RTAwMDAwMDAwMzIKKzoxMDA0NjAwMDAwNDAwRTJEMDAwMDAwNjIwMDAwMDAwMTAwNDAwRTJEMzMKKzoxMDA0NzAwMDAwMDAwMDYyMDAwMDAwMEEwMDIwMEUyRDAwMDAwMDAwQjUKKzoxMDA0ODAwMDAwMDAwMDBCMDA0MDEyMkQwMDAwMDA2QTAwMDAwMDAwNzgKKzoxMDA0OTAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzAwMjgxMjIzRDkKKzoxMDA0QTAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDAwMDAwMDAwRjIKKzoxMDA0QjAwMDdGQzAwMDAwMDAyODE2MjMwMDAwMDAwMDAwMDAwMDE0ODgKKzoxMDA0QzAwMDAwMjExNjI1MDAwMDAwMDAwMDAwMDAwMTAwMzMxNjI1NjEKKzoxMDA0RDAwMDAwMDAwMDAwODAwMDAwMDAwMDI4MEUyMzAwMDAwMDAwNDMKKzoxMDA0RTAwMDAwMDAwMDAwMDAyOTBDQTMwMDAwMDAwMDNGRkZGQzAwRkEKKzoxMDA0RjAwMDAwMjkwRTIzMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMjEKKzoxMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDZEOEEKKzoxMDA1MTAwMDAwMDAwMTAwMDA0MDFDMTEwMDAwMDA3MDAwMDAwMDBERjAKKzoxMDA1MjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDBGMDAwMjgxRTI3MDMKKzoxMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDQwMDIyMUUyNzAwMDAwMDAwNTAKKzoxMDA1NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBEQTgKKzoxMDA1NTAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRjBGRjAwMjgxQTMwQzMKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMEEwMjgwMDIwNDQxMTAwMDAwMDAwNEUKKzoxMDA1NzAwMDAwMDAwMDAwMDAyOTQ4RTYwMDAwMDAwMDAwMDBBMDE4NkMKKzoxMDA1ODAwMDAwMjA0NDExMDAwMDAwMDAzRkZGRkZGRjAwMjg0QTIzMjUKKzoxMDA1OTAwMDAwMDAwMDAwMDAwMEEwMTAwMDIwNDQxMTAwMDAwMDAwMzYKKzoxMDA1QTAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDMwQUYKKzoxMDA1QjAwMDAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMjAwMjkxNjI1NzIKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMzAwMDIwMzYyNTAwMDAwMDAwODAKKzoxMDA1RDAwMDAwMDAwMDI1MDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDA1RTAwMDAwMkYwMEEzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNkQKKzoxMDA1RjAwMDAwMDAwMDgzMDAwMDAwMjYwMDIwMTYyRDAwMDAwMDAwRUYKKzoxMDA2MDAwMDAwMDAwMDAwMDAyRjAwQTQwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDA2MTAwMDBDQzAwMDAwMDAwMDAwODQwMDAwMDAwMDAwNDAwMDAwNEEKKzoxMDA2MjAwMDAwMDAwMDhBMDAwMDAwMjUwMDIwMzYyMzAwMDAwMDAwQTIKKzoxMDA2MzAwMDAwMDAwMDI2MDAyMDM2MjQwMDAwMDAwMDAwMDAwMDE3MDMKKzoxMDA2NDAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3RjMKKzoxMDA2NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDhBMUMKKzoxMDA2NjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVGRjAwMDAwMDAwMjYKKzoxMDA2NzAwMDAwNjAwMDAwMDAwMDA1RjMwMDAwMDAwMjAwMjEwRTIyQ0YKKzoxMDA2ODAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDhEMDkKKzoxMDA2OTAwMDAwMDAwMDEyQzA0MDM2MjAwMDAwMDA5MzAwMDAwMDAwNUYKKzoxMDA2QTAwMDJFRTAwMDAwMDAwMDAwOTEwMDAwMDAwMDJDRTAwMDAwOUYKKzoxMDA2QjAwMDAwMDAwMDkwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDkyOUIKKzoxMDA2QzAwMDAwMDAwMDAzMDA0MDBFMkQwMDAwMDA5MjAwMDAwMDBDMEUKKzoxMDA2RDAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxMjAwMjAzNjIzMzQKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMEUyMjAwMDAwMDAwQjYKKzoxMDA2RjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA5ODAwMDBBMDBDRTIKKzoxMDA3MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNEMKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMEEwRjEKKzoxMDA3MjAwMDAwMDBBMDBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDA3MzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDJFRTAwMDAwMzIKKzoxMDA3NDAwMDAwMDAwMDlFMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDlENjIKKzoxMDA3NTAwMDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDAzN0EKKzoxMDA3NjAwMDAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwQzAwMjAwRTJEMDgKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMEUKKzoxMDA3ODAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDAwM0YwMDAwRTIKKzoxMDA3OTAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAxMDAwMjEwRTIzOUUKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMTEwMDIwMzYyMzAwMDAwMDAwQkYKKzoxMDA3QjAwMDAwMDAwMDFFMDAyMTAyMkIwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA3QzAwMDE0QzAwMDAwMDAwMDAwQTcwMDAwMDAxNkMwMjAzNjIwNjIKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMDIyQjAwMDAwMDAwQUMKKzoxMDA3RTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBBQTAwMDAwMDE1NzYKKzoxMDA3RjAwMEMwMjAzNjIwMDAwMDAwMDAwMDAwMDAwODAwMjEwRTJCNjEKKzoxMDA4MDAwMDAwMDAwMDAwMDAwMDAwN0YwMDI4MEUyMzAwMDAwMDAwMTAKKzoxMDA4MTAwMDAwMDAwMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDA4MjAwMDBDRTAwMDAwMDAwMDAwRTEwMDAwMDAwMDI3MDAwMDAwRDQKKzoxMDA4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzQjMKKzoxMDA4NDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDA4NTAwMDBBRTAwMDAwMDAwMDAwQjMwMDAwMDAwMDAwNjAwMDAwOUIKKzoxMDA4NjAwMDAwMDAwMTNBODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNTcKKzoxMDA4NzAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBDRUQKKzoxMDA4ODAwMDAwMjIxRTMwMDAwMDAwMDA5OTgwMDAwMDAwMjA0NDExNkEKKzoxMDA4OTAwMDAwMDAwMDAwMDAwMDAwMDQwMDIwMTIyRDAwMDAwMDAwRjUKKzoxMDA4QTAwMDAwMDAwMDA4MDAyMjEyMjQwMDAwMDAwMDAwMDAwMDEwRDgKKzoxMDA4QjAwMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDAwMjkxQ0U0QzYKKzoxMDA4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwNzAwMDAwMTJGNDkKKzoxMDA4RDAwMDlCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDA4RTAwMDAwMjA0ODAyMDAwMDAwMDA5QzAwMDAwMDAwMjA0NDExOEQKKzoxMDA4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzMTQ2RjAwMDAwMDAwNDIKKzoxMDA5MDAwMDAwMDAwMDAxMDAzMzNFMjMwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDA5MTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMjAzQzA1NTUKKzoxMDA5MjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDEKKzoxMDA5MzAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDA5NDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwNzAwMjA0NDExMEIKKzoxMDA5NTAwMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyQjAwMDAwMDAwM0EKKzoxMDA5NjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBDQjAwRjhGRjA4RTkKKzoxMDA5NzAwMDAwMjA0ODExMDAwMDAwMDA5ODAwMDAwMDAwNDA0ODExQ0QKKzoxMDA5ODAwMDAwMDAwMERDMDAwMDAwRjAwMDI4MEUyMjAwMDAwMDAwNDMKKzoxMDA5OTAwMDAwMDAwMEEwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDA5QTAwMDBDQzAwMDAwMDAwMDAwREEwMDAwMDAxMTAwMjAwRTJEMzUKKzoxMDA5QjAwMDAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwRTIKKzoxMDA5QzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBENTAwMDAwMDAyNjQKKzoxMDA5RDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDcKKzoxMDA5RTAwMDAwMDAwMEQ0MDAwMDNGMDAwMDQwMEMxMTAwMDAwMEQ2QzEKKzoxMDA5RjAwMDAwMDAxRjAwMDA0MDBDMTEwMDAwMDBENjAwMDAwRjAwOTYKKzoxMDBBMDAwMDAwMjAwQzExMDAwMDAwMDAwMDM4MDAwOTAwMjk0QTIzRDIKKzoxMDBBMTAwMDAwMDAwMDAwM0YwMDAwMDAwMDI4MEUyQjAwMDAwMDAwMzYKKzoxMDBBMjAwMDAwMDAwMDAyMDAyMjBFMjMwMDAwMDAwMDAwMDAwMDA3NkEKKzoxMDBBMzAwMDAwNDk0QTIzMDAwMDAwREMwMDM4MEYwOTAwMjA0ODExNUIKKzoxMDBBNDAwMDAwMDAwMDAwNjgwMDAwMDcwMDIwNDgxMTAwMDAwMDAwQkUKKzoxMDBBNTAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDBBNjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0NjQKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRkQKKzoxMDBBODAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMjAyNDkKKzoxMDBBOTAwMDAwMjA0NDExMDAwMDAwMDAwMEZGMDAwMDAwMjgwRTIyOEEKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwODAwMDI5NEEyMzAwMDAwMDAwMzAKKzoxMDBBQjAwMDAwMDAwMDI3MDAyMDBFMkQwMDAwMDAwMDAwMDAwMDI2OEUKKzoxMDBBQzAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwMDAwMkYwMDgzMTUKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEVBNDAKKzoxMDBBRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVGOTAwMDAwMDAwQTgKKzoxMDBBRjAwMDAwNDAwMDAwMDAwMDAwRUIwMDAwMDAwMDAwNjAwMDAwNkIKKzoxMDBCMDAwMDAwMDAwNUZDMDAwMDAwMDcwMDIwMjIyRDAwMDAwMDAwNkUKKzoxMDBCMTAwMDAwMDAwMDA1MDAyMjBFMjIwMDAwMDAwMDAwMTAwMDAwNkUKKzoxMDBCMjAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjkyMDY4QkIKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwNkQKKzoxMDBCNDAwMDAwMDAwMEVGMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDBCNTAwMDAwMjkyMDY4MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzIKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMDIyMzAwMDAwMDAwM0MKKzoxMDBCNzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDBGODAwMDAwMDBCN0UKKzoxMDBCODAwMDAwMjEwMjI4MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwNDYKKzoxMDBCOTAwMDAwMDAwMEY4MDAwMDA0MDAwMDI5MjIyODAwMDAwMDAwRTYKKzoxMDBCQTAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMDAwMDAwMDFDOTcKKzoxMDBCQjAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMTAKKzoxMDBCQzAwMDAwMDAwMEZEMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDQKKzoxMDBCRDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDFFN0UKKzoxMDBCRTAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwRTAKKzoxMDBCRjAwMDAwMDAwMTBCMDAwMEEzMEYwMDIwNDQxMTAwMDAwMDAwQzIKKzoxMDBDMDAwMDAwMDAwMDExMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDAxNzcKKzoxMDBDMTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwQjQKKzoxMDBDMjAwMDAwMDAwMTA0RkZGRkZGRkYwMDQwNDgxMTAwMDAwMTBCMUUKKzoxMDBDMzAwMDAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDBDNDAwMDBDQzAwMDAwMDAwMDAxMDcwMDAwRkZGRjAwNDA0ODExMzkKKzoxMDBDNTAwMDAwMDAwMTBCMDAwMDAwMDQwMDJGMDIyMzAwMDAwMDAwMzAKKzoxMDBDNjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDEwQTAwMDAwMEZGQUUKKzoxMDBDNzAwMDAwNDA0ODExMDAwMDAxMEIwMDAwMDAwMTAwMjA0ODExNTUKKzoxMDBDODAwMDAwMDAwMDAwMDAwMkM0MDAwMDIwNDQxMTAwMDAwMDAwMjkKKzoxMDBDOTAwMDAwMDAwMDFGMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDBDQTAwMDE0QzAwMDAwMDAwMDAxMTIwMDAwMDAxMDQwMjEwRTIwQkUKKzoxMDBDQjAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwQTgKKzoxMDBDQzAwMDAwMDAwMDE4NDAyMjRBMjAwMDAwMDAwMDAwMDAwMDEwMzAKKzoxMDBDRDAwMEMwNDI0QTIwMDAwMDAxMTQwMDAwMDAwMDAwMjAwQzExNTYKKzoxMDBDRTAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwNzgKKzoxMDBDRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDBEMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQTAwMjAxMDExMUYKKzoxMDBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwN0UKKzoxMDBEMjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDExQjAwMDAwMDAwQkIKKzoxMDBEMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTAwNTMxMjI0QjAKKzoxMDBENDAwMDAwMDAwMTE3RkZCRkZGRkYwMDI4M0EyRTAwMDAwMDAwM0YKKzoxMDBENTAwMDAwMDAwMDFCMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDBENjAwMDE0QzAwMDAwMDAwMDAxMkU4MTAwMDAwMDAwMjA0NDExOEEKKzoxMDBENzAwMDAwMDAwMDAwMDAwMDAwMEQwMDIwNDgxMTAwMDAwMDAwRUQKKzoxMDBEODAwMDAwMDAwMDE4MDAyMjBFMzAwMDAwMDAwMEZDMDAwMDAwRUYKKzoxMDBEOTAwMDAwMjgwRTIzMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDQKKzoxMDBEQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwQkMKKzoxMDBEQjAwMDAwMDAwMDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDBFMDUKKzoxMDBEQzAwMDAwMjA0NDExMDAwMDAwMDAwN0Y4RkYwODAwMjA0ODExMkYKKzoxMDBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NEEyMzAwMDAwMDAwN0QKKzoxMDBERTAwMDAwMDAwMDFDMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA4NzQKKzoxMDBERjAwMDAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRTgKKzoxMDBFMDAwMDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDAwMDAwMDAwMzkKKzoxMDBFMTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDBFMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwQzkKKzoxMDBFMzAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDBFNDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDOEIKKzoxMDBFNTAwMDAwMjA0NDExMDAwMDAwMDAwMDgwMDAwMDAwMjA0ODExMjQKKzoxMDBFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNjAwMDAwMDAwMTQKKzoxMDBFNzAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDBFODAwMDE3MDAwMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExRjIKKzoxMDBFOTAwMDAwMDAwNjIyMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwQjgKKzoxMDBFQTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDYyMTAwMDAwMDA0NDMKKzoxMDBFQjAwMDAwNDA0QzExMDAwMDAxMzU4MTAwMDAwMDAwMjA0NDExNjkKKzoxMDBFQzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQTgKKzoxMDBFRDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFDNjgKKzoxMDBFRTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExQjYKKzoxMDBFRjAwMDAwMDAwNjIyMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwNjYKKzoxMDBGMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDEzQzAwMDAwMDAwQjAKKzoxMDBGMTAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRjEKKzoxMDBGMjAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTAwMDAwMzE1MjkKKzoxMDBGMzAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDBGNDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwNjAwMDAwMTUKKzoxMDBGNTAwMDAwMDAwMTYwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwOUMKKzoxMDBGNjAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNjAKKzoxMDBGNzAwMDQwMjgwNjIwMDAwMDAwMDAwMDAwMDAxMEMwMjEwQTIwQzgKKzoxMDBGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0MTQ2MTAwMDAwMDAwQjgKKzoxMDBGOTAwMDAwMDAwMDAwMDA3NDE4ODIwMDAwMDJCQjAwMDFBMUZERTcKKzoxMDBGQTAwMDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjAwMkYwMjJGMEMKKzoxMDBGQjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTQ3MUQKKzoxMDBGQzAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwMUMKKzoxMDBGRDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMzEKKzoxMDBGRTAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwQjQKKzoxMDBGRjAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAzRkZGODcKKzoxMDEwMDAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwOTQKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTYwMEYKKzoxMDEwMjAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMDAwMDBGRkZGMjMKKzoxMDEwMzAwMEMwMjgxMjIwMDAwMDAwMDAwMDAwMDAxMDQwMjExNjIwRUYKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMEZGRkZDMDY4MUEyMDAwMDAwMkJCODMKKzoxMDEwNTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMUMKKzoxMDEwNjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNTQKKzoxMDEwNzAwMDAwMDAwMTU4MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMTIKKzoxMDEwODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNkMKKzoxMDEwOTAwMDAwMzAwQTJGMDAwMDAwMDAwMDAwMDAwMTAwMjEwQTIyOTkKKzoxMDEwQTAwMDAwMDAwMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwOTkKKzoxMDEwQjAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMjkKKzoxMDEwQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOTUKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMTAwMDAwMDAwMzYKKzoxMDEwRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwOTUKKzoxMDEwRjAwMDAwNjAwMDAwMDAwMDAxOEYwMDAwMDAwMDAwNjAwMDAwQTAKKzoxMDExMDAwMDAwMDAwMUEwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwQTAKKzoxMDExMTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDExMjAwMDAwMjAyQzA4MDAwMDAwMDAwMDAwMDAwMDAwMjAyNDExMTYKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjgxMTAwMDAwMDAwNTYKKzoxMDExNDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2OUMKKzoxMDExNTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMjMKKzoxMDExNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwMDMKKzoxMDExNzAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyRTUKKzoxMDExODAwMDAwMjIxRTI5MDAwMDAwMDAwMDAwMDAwMDAwNzA0OEVCNTMKKzoxMDExOTAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkJCOTUKKzoxMDExQTAwMDAwMDAwMDAxNDAzMzA2MjAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDExQjAwMEMwMzAyNDA5MDAwMDAwMDAwMDAwM0ZGRjAwMkYwMjJGNzQKKzoxMDExQzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMzMKKzoxMDExRDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzAwMDAwMDAwMEEKKzoxMDExRTAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQzMKKzoxMDExRjAwMDAwMDAwMTgxMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBRDIKKzoxMDEyMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDE4Njk1MDAwMDAwODIKKzoxMDEyMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDcKKzoxMDEyMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTg2NEIKKzoxMDEyMzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxODUKKzoxMDEyNDAwMDAwNTMwNjIxMDAwMDAxODI5MjAwMDAwMDAwMjA0NDExOUEKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwMTk3OEUKKzoxMDEyNjAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDExNTkKKzoxMDEyNzAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDAwMDAwNzgwNDJBNzUKKzoxMDEyODAwMDAwMDAwMkZCMDAwMDAwMDAwMDIwMjgwOTAwMDAwMDAwMTAKKzoxMDEyOTAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDEyQTAwMDBDQzAwMDAwMDAwMDAxNzQwMDAwMDAwMEMwNDAwNDAwRjkKKzoxMDEyQjAwMDAwMDAwMDAxMDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1OEUKKzoxMDEyQzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDEyRDAwMDBDRTAwMDAwMDAwMDAxOTQwMDAwMDAxNUMwMjAzNjIwNDIKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMTZDMDIwMzYyMDAwMDAwMDAwQjIKKzoxMDEyRjAwMDNGODAwMDAwMDAyMDA0MTEwMDAwMDAwMDQ2MDAwMDAwQjQKKzoxMDEzMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwODAwMDAwMzEKKzoxMDEzMTAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwQkIKKzoxMDEzMjAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDEzMzAwMDBDQzAwMDAwMDAwMDAxOUIwMDAwMDAwMTAwODA0ODExNkIKKzoxMDEzNDAwMDAwMDAwMDAwMDAwMDAwMjEwMDgwNDgxMTAwMDAwMDAwQTMKKzoxMDEzNTAwMDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwRTkKKzoxMDEzNjAwMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjQwMjgxNjIwQ0UKKzoxMDEzNzAwMDAwMDAwMDAwMDAwMDAwMTBDMDgxMUEyMDAwMDAwMDAwRTIKKzoxMDEzODAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2NjEKKzoxMDEzOTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwODAwMjIxRTMwNUMKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwMjkwMDIwMUEyRDAwMDAwMDAwQUQKKzoxMDEzQjAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRkJGRjA5RDYKKzoxMDEzQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwRjAwMjAyMjJEMjYKKzoxMDEzRDAwMDAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyODAwMDAwMDAwNTQKKzoxMDEzRTAwMDAwMDAwMDA2MDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDEzRjAwMDAwMjkyMEU4MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA4NEMKKzoxMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDE0MTAwMDA2MEEwMjAwMDAyOTRBMjYwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDE0MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExQ0EKKzoxMDE0MzAwMDAwMDAwMDAwMDAwMDAxMDAwMDIwMTgxMTAwMDAwMDAwNjIKKzoxMDE0NDAwMDAwMDAwMDA4MDA2MjFFMjgwMDAwMDEyRjAwMDAwMDA4QjQKKzoxMDE0NTAwMDAwODIyMjI4MDAwMDAwMDAwMDAyQzAwMDAwMjA0NDExODkKKzoxMDE0NjAwMDAwMDAwMDAwMDAwMDAwMTUwMDYwMEUyRDAwMDAwMUJEMEUKKzoxMDE0NzAwMDAwMDAwMDE2MDA2MDBFMkQwMDAwMDFCRDAwMDBDMDA4MzUKKzoxMDE0ODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzUKKzoxMDE0OTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMUI5QkUKKzoxMDE0QTAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDE0QjAwMDAwMjA0ODAxMDAwMDAwMDAzOTAwMDAwMDAwMjA0ODExMTEKKzoxMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQTMKKzoxMDE0RDAwMDAwMDAwMDAwMDA4MDQ4MDIwMDAwMDAwMDAwMDAwMDE4MkEKKzoxMDE0RTAwMDAwMjAyRTJEMDAwMDAwMDAwMDAwMDAwMDAwM0IwRDYzRDYKKzoxMDE0RjAwMDAwMDAwMDAwMDAwMDAwMDgwMDIyNEEyMzAwMDAwMDAwNTUKKzoxMDE1MDAwMDAwMDAwMDEwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDE4MjQKKzoxMDE1MTAwMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAwMDAwODA0ODAzNzEKKzoxMDE1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCNTAKKzoxMDE1MzAwMDAwMDAxMDAwMDA2MDA0MTEwMDAwMDMxNTAwMDAwMDAwMEUKKzoxMDE1NDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExRUQKKzoxMDE1NTAwMDAwMDAwMUIyMDAwMDAwMDcwMDIxMDYyRjAwMDAwMDAwN0IKKzoxMDE1NjAwMDAwMDAwMDEzMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAxMTAKKzoxMDE1NzAwMDAwMjAyQzExMDAwMDAwMDAwMDAwRkZGRjQwMjgyMjIwNjYKKzoxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMEYwMDI2MjIyODAwMDAwMDAwREMKKzoxMDE1OTAwMDAwMDAwMDEwNDAyMTI2MjAwMDAwMDAwMDAwMDAwMDBGODUKKzoxMDE1QTAwMDAwMjYyNjI5MDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyN0MKKzoxMDE1QjAwMDAwMDAwMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwM0UKKzoxMDE1QzAwMDAwMDAwMDFCMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDE1RDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQ0QKKzoxMDE1RTAwMDAwMDAwMUUwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMjcKKzoxMDE1RjAwMDAwMDAwMDgxMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDNTQKKzoxMDE2MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRUIKKzoxMDE2MTAwMDAwMDAwMDAwMDAwMDAwODAwMDIwMUMxMTAwMDAwMDAwRkQKKzoxMDE2MjAwMDAwMDAwMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDE2MzAwMDBDRTAwMDAwMDAwMDAxREMwMDAwMDAwMDAwNjAwMDAwODEKKzoxMDE2NDAwMDAwMDAwMUU5MDAwMDAwMDEwMDUzMUUyNzAwMDAwMUQ4M0UKKzoxMDE2NTAwMDAwMDAwMDAxMDAyMDJDMTEwMDAwMDAwMDAwMDAwMDFGMEQKKzoxMDE2NjAwMDAwMjgwQTIyMDAwMDAwMDAwMDAwMDAxRjAwMjgyQTJBOEIKKzoxMDE2NzAwMDAwMDAwMDAwMDAwMDAwMDEwMDUzMDYyMTAwMDAwMUQxMUQKKzoxMDE2ODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyNjUKKzoxMDE2OTAwMDAwMzA0QTJGMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOEYKKzoxMDE2QTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzAKKzoxMDE2QjAwMDAwMDAwMDAxMDAzMDFFMkYwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE2QzAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDYKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUU5QzAKKzoxMDE2RTAwMDAwMDAwMDAxMDA1MzFFMjcwMDAwMDFFNTAwMDBGRkZGN0QKKzoxMDE2RjAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAwRjAwMjYwRTIzRUUKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwQjYKKzoxMDE3MTAwMDAwMDAwMDBGMDAyNjEyMjQwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDE3MjAwMDAwMjAxNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAxODExRUIKKzoxMDE3MzAwMDAwMDAwMkJCMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwRDgKKzoxMDE3NDAwMDAwMDAwMDAwMDAyRjAyMkIwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDE3NTAwMDBDRTAwMDAwMDAwMDAxRjgwMDAwMDAxMDAwMjIxNjI4MzQKKzoxMDE3NjAwMDAwMDAwMDAwRkZGRjAwMDAwMDI4MTYyNTAwMDAwMDAwMTgKKzoxMDE3NzAwMDAwMDBGRkZGMDAyODFBMjkwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDE3ODAwMDAwMjk0OEM1MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODBBQjEKKzoxMDE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMkMxMTAwMDAwMDAwRUMKKzoxMDE3QTAwMDAwMDAwMDEwMDAyMjE2MjMwMDAwMDAwMEZGRkYwMDAwRDAKKzoxMDE3QjAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwRkZGRjAwMjgxQTI0NjIKKzoxMDE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDhDNTAwMDAwMDAwRTMKKzoxMDE3RDAwMDAwMDAwMDAwMDA3MzE1MDMwMDAwMDIwNTAwMDAwMDAwNzcKKzoxMDE3RTAwMDAwMjAxODA1MDAwMDAwMDAwMDAwMDAwMDAwNzMxNTI0MTAKKzoxMDE3RjAwMDAwMDAwMjA1MDAwMDAwMDAwMDJEMTRDNTAwMDAwMDAwREMKKzoxMDE4MDAwMDAwMDAwMDAwMDAzMDA4QTIwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDE4MTAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyMTQKKzoxMDE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjAwMzAwMDAwMDAwNzUKKzoxMDE4MzAwMDAwMDAwMDAwMDA4MDI0MDQwMDAwMDAwMDAwMDAwMDBGRjEKKzoxMDE4NDAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwN0MKKzoxMDE4NTAwMDAwMDAwNjIxMDAwMDAwMDAwMDJCMTQwNTAwMDAwMDAwMUQKKzoxMDE4NjAwMDAwMDAwMDAxMDA5MDE2MjUwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE4NzAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExODgKKzoxMDE4ODAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMEIKKzoxMDE4OTAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAyMjU2QTQKKzoxMDE4QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTAwMjk0QTIyMTQKKzoxMDE4QjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwNDgKKzoxMDE4QzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDE4RDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzgKKzoxMDE4RTAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDUKKzoxMDE4RjAwMDAwMDAwMDAzMDAzODRBMjEwMDAwMDAwMDAwMDBBMUZDQTUKKzoxMDE5MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRTgKKzoxMDE5MTAwMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTIyMDAwMDAwMDAwMkYKKzoxMDE5MjAwMDAwMDAwMDEwQzAyMTFBMjAwMDAwMDAwMDAwMDBGRkZGOEUKKzoxMDE5MzAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEMwMjExNjIwRUEKKzoxMDE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MTQ2NTAwMDAwMkJCRUQKKzoxMDE5NTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAwMDAxNTAKKzoxMDE5NjAwMDAwMzMwNjIxMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxQ0IKKzoxMDE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMjE5ODAKKzoxMDE5ODAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDE5OTAwMDBDQzAwMDAwMDAwMDAyMTIwMDAwMDAwMEMwNDAwNDAwNjMKKzoxMDE5QTAwMDAwMDAwMDAxMDAwMDAwMDAwMDYwMDAwMDAwMDAwNURFRjMKKzoxMDE5QjAwMDAwMDAwMDAwMDA0MDA0MEYwMDAwMDIxMzAwMDAwMDAwQkYKKzoxMDE5QzAwMDAwNjAwMDAwMDAwMDA1RDEwMDAwMDAwMDAwNjAwMDAwODEKKzoxMDE5RDAwMDAwMDAwNURFMDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1ODUKKzoxMDE5RTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFBMDAwMDAwMDAwRjYKKzoxMDE5RjAwMDAwNjAwMDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwOEEKKzoxMDFBMDAwMDAwMDAwMkJCMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMTQKKzoxMDFBMTAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDFBMjAwMDAwMjA0ODA4MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGRTYKKzoxMDFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjMyODgKKzoxMDFBNDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQTAwMDAwMDAwRkIKKzoxMDFBNTAwMDAwNDAwMDAwMDAwMDAyMzY5NTAwMDAwMDAwMjA0NDExMDQKKzoxMDFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRjAwMDAwMDAwMTYKKzoxMDFBNzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDIzNjAwMDAwMDAwNDIKKzoxMDFBODAwMEMwNDA0ODAwMDAwMDAyMzM5MjAwMDAwMDAwMjA0NDExRDIKKzoxMDFBOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMUUKKzoxMDFBQTAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MzMKKzoxMDFBQjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExQkEKKzoxMDFBQzAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwOUEKKzoxMDFBRDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRjMKKzoxMDFBRTAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExNjkKKzoxMDFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkZCNzQKKzoxMDFCMDAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwRDAKKzoxMDFCMTAwMDAwNjAwMDAwMDAwMDA1RDEwMDAwQTAwQzAwMjA0NDExNkUKKzoxMDFCMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwOEQKKzoxMDFCMzAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDFCNDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxODQwMjEwQTIwODcKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwMDMwMDJGMDIyMjAwMDAwMDAwMkYKKzoxMDFCNjAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDI0QzAwMDAwMDE0MjkKKzoxMDFCNzAwMDAwMjAyMjJEMDAwMDAwMDAwMDA4MDEwMTAwMjkyMjI4NzkKKzoxMDFCODAwMDAwMDAwMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwQzMKKzoxMDFCOTAwMDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDFCQTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTUKKzoxMDFCQjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMjUxOEEKKzoxMDFCQzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDEwOUEKKzoxMDFCRDAwMDAwNjAwNDExMDAwMDAzMTUzRjgwMDAwMDAwMjAwNDExODQKKzoxMDFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyQzkKKzoxMDFCRjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRUYKKzoxMDFDMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRkIKKzoxMDFDMTAwMDAwMDAwMjdDMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQzQKKzoxMDFDMjAwMDAwMDAwMDAxMDAyMTFFMjcwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDFDMzAwMDE0RTAwMDAwMDAwMDAyNkEwMDAwMDAxMjAwMjAxRTJEQzcKKzoxMDFDNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MUUyNzAwMDAwMDAwMjkKKzoxMDFDNTAwMDAwMDAwMDAwMDAzNDFDMjcwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDFDNjAwMDEyQzAwMDAwMDAwMDAyNUYwMDAwMDAwMDAwMjAxQzExRjQKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNTAwMDAwMDAwNTAKKzoxMDFDODAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2MjAwMDAwMDAwMjgKKzoxMDFDOTAwMDAwMjAxNDA3MDAwMDAwMDAwMDAwMDAxMjAwMjAxRTJEOEMKKzoxMDFDQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMUUyNzAwMDAwMDAwQkUKKzoxMDFDQjAwMDAwMDAwMDAwMDAzNDFDNDcwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDFDQzAwMDEyQzAwMDAwMDAwMDAyNjcwMDAwMDAwMDAwMjAxQzExOEMKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwRUYKKzoxMDFDRTAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2QTAwMDAwMDAwQzAKKzoxMDFDRjAwMDAwMjAxODA3MDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwNDUKKzoxMDFEMDAwMDAwMDAwMkMxMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMjMKKzoxMDFEMTAwMDAwMDAwMDAwMDAzNDIwMjMwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDFEMjAwMDEyQzAwMDAwMDAwMDAyNzIwMDAwMDAwMDAwMzQyMDQ0RDUKKzoxMDFEMzAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjcxNUUKKzoxMDFENDAwMDAwMDAwMDE2MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE4NTQKKzoxMDFENTAwMDAwNDA0ODExMDAwMDAyNzYwMDAwMDAwMDAwMzQyMDQ0REEKKzoxMDFENjAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjc1MkEKKzoxMDFENzAwMDAwMDAwMDE3MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE5MjIKKzoxMDFEODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExQzgKKzoxMDFEOTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzkKKzoxMDFEQTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFOTAwMDAzRkZGQjYKKzoxMDFEQjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwRjcKKzoxMDFEQzAwMDAwMDAwMjU2MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxQjYKKzoxMDFERDAwMDAwMDAwMDEwNDAyMTA2MjAwMDAwMDAwMDAwMDBGRkZGNkUKKzoxMDFERTAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwNDIKKzoxMDFERjAwMDAwMDAwMDAwMDAwMEZGRkZDMDI4MTIyMDAwMDAwMDAwQ0IKKzoxMDFFMDAwMDAwMDAwMDEwNDAyMTE2MjAwMDAwMDAwMDAwMDBGRkZGMkQKKzoxMDFFMTAwMEMwODgxQTIwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNEEKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMzgKKzoxMDFFMzAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDYyMjAwMDAwMDAwOUQKKzoxMDFFNDAwMDAwNjAwMDAwMDAwMDA1RDEwMDAwMDAwMEMwNjAwMDAwM0MKKzoxMDFFNTAwMDAwMDAwMkEzMDAwMDAwMDUwMDIwMEEyRDAwMDAwMDAwODEKKzoxMDFFNjAwMDAwMDAwMDA4MDAyMjBBMjIwMDAwMDAwMDAwMDAwMDJCRjEKKzoxMDFFNzAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAxQzAwMjAxRTJENzQKKzoxMDFFODAwMDAwMDAwMDAwMDAwMDcwMDAwMDI4MUUyNzAwMDAwMDAwNzUKKzoxMDFFOTAwMDAwMDAwMDAwMDAzMTFDRTYwMDAwMDAwMDAwMDAwMDJBRTUKKzoxMDFFQTAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAwQzAwMjIxQTI2NUQKKzoxMDFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwMEQKKzoxMDFFQzAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDI5MjAwMDAwMDAwOTgKKzoxMDFFRDAwMDAwMjAxQzExMDAwMDAwMDAwMDAwMDAwMDAwMjAwQzExNzgKKzoxMDFFRTAwMDAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMzAwMDAwMDAwNEUKKzoxMDFFRjAwMDAwMDAwMDEwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDFGMDAwMDAwNjkxQ0UyMDAwMDAxMkY5MzgwMDAwMDAwMjA0NDExQjIKKzoxMDFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwNTIKKzoxMDFGMjAwMDk1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDFGMzAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwNTUKKzoxMDFGNDAwMDAwMDAwMjlEMDAwMDAwMDEwMDMzM0UyRjAwMDAwMDAwNTEKKzoxMDFGNTAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDkyMDAwMDAwQ0UKKzoxMDFGNjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRDQKKzoxMDFGNzAwMDAwMDAwMDAwMDAwMDAwMUMwMDQwMzYyNzAwMDAwMDAwQTgKKzoxMDFGODAwMDAwMDAwMDBDQzAyMjBBMjAwMDAwMDAwMDAwMDAwMDI5MTAKKzoxMDFGOTAwMDAwMjAzNjIyMDAwMDAwMDAwMDAwMDAyOEMwNDAzNjIwNEIKKzoxMDFGQTAwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwNzYKKzoxMDFGQjAwMDAwMDAwMDA5MDAyMDQ4MTEwMDAwMDAwMEExMDAwMDAwRkUKKzoxMDFGQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExQzIKKzoxMDFGRDAwMDAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwNzUKKzoxMDFGRTAwMDAwMDAwMDAwMDAyQzFDRTMwMDAwMDAwMDAwMDAwMDIxQTUKKzoxMDFGRjAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyMjAwMjAxRTJERDcKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDMUNFNDAwMDAwMDAwQTQKKzoxMDIwMTAwMDAwMDAwMDIyMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIzRkUKKzoxMDIwMjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEEzNTEKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwNEYKKzoxMDIwNDAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDI0Q0MKKzoxMDIwNTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAKKzoxMDIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwMUYKKzoxMDIwNzAwMDAwMDAwMDI0MDA4MDM2MjcwMDAwMDAwMDAwMDAwMDIxM0UKKzoxMDIwODAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyMjAwMjAzNjI0M0IKKzoxMDIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzAwMDAwMDAwNTAKKzoxMDIwQTAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIwQjAwMDAwMzExQ0M0MDAwMDAwMDAwMDAwMDAyNDAwODAzNjI3MEUKKzoxMDIwQzAwMDAwMDAwMDAwMDAwMDAwMUEwMDIwMzYyNzAwMDAwMDAwNzkKKzoxMDIwRDAwMDAwMDAwMDFCMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDE3NTAKKzoxMDIwRTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3MzkKKzoxMDIwRjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMkRDMkUKKzoxMDIxMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJEOTAwMDAwMDFBOUEKKzoxMDIxMTAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAxQjAwMjAzNjI4QTkKKzoxMDIxMjAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwMkQKKzoxMDIxMzAwMDAwMDAwMDAyMDAyMTAyMjcwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDIxNDAwMDE0RTAwMDAwMDAwMDAyRDkwMDAwMDAwMzAwMjEwMjI3NzMKKzoxMDIxNTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMkRDQUQKKzoxMDIxNjAwMDAwMDAwMDIzMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDIxNzAwMDAwMkUwMEUxMDAwMDAwMDAwMDAwMDAwMDAyQzAwMDAwOEUKKzoxMDIxODAwMDAwMDAwMkRDMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwRTUKKzoxMDIxOTAwMDAwMDAwMDAwMDAzMTIwQTEwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDIxQTAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMDA2QzAwMDAwNTMKKzoxMDIxQjAwMDAwMDAwMkRDMDAwMDAwMjQwMDIwMUUyRDAwMDAwMDAwQjIKKzoxMDIxQzAwMDAwMDAwMDAwMDAyRTAwRTIwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIxRDAwMDAyQzAwMDAwMDAwMDAyREMwMDAwMDAyMjAwMjAxRTJERDIKKzoxMDIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwREMKKzoxMDIxRjAwMDAwMDAwMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDIyMDAwMDA2QzAwMDAwMDAwMDAyREMwMDAwMDAwMDAwNjAwMDAwQ0EKKzoxMDIyMTAwMDAwMDAwNUZGMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkI1QTMKKzoxMDIyMjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDAwOEUKKzoxMDIyMzAwMDAwNjAwMDAwMDAwMDAyQjUwMDAwMDAwMDAwNjAwMDAwMjcKKzoxMDIyNDAwMDAwMDAwNUY2MDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFNzMKKzoxMDIyNTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBNzAwMDAwMDAwNzUKKzoxMDIyNjAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAxQTAwMjAxRTJEQzkKKzoxMDIyNzAwMDAwMDAwMDAwMDAwMDAwMUIwMDgwMjIyRDAwMDAwMDAwNzQKKzoxMDIyODAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDIyOTAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTYKKzoxMDIyQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwQjcKKzoxMDIyQjAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDEwMTYKKzoxMDIyQzAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0OTYKKzoxMDIyRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwOEUKKzoxMDIyRTAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDUKKzoxMDIyRjAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3ODMKKzoxMDIzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwNUMKKzoxMDIzMTAwMDAwMDAwMDAwMDAyOTQ4NDcwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDIzMjAwMDAwMzExQ0EzMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3NDYKKzoxMDIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwQTUKKzoxMDIzNDAwMDAwMDAwMDAwMDAzMTFDQTEwMDAwMDAwMDAwMDAwMDEwOEYKKzoxMDIzNTAwMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAwMDAwMjk0ODQ3NUUKKzoxMDIzNjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwRkEKKzoxMDIzNzAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDAwMDBGRkZGNEEKKzoxMDIzODAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3NjIKKzoxMDIzOTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwQ0MKKzoxMDIzQTAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMDAwMDBGRkZGMUMKKzoxMDIzQjAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwODk0OTA3RDIKKzoxMDIzQzAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwOUEKKzoxMDIzRDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxMDQKKzoxMDIzRTAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzMwOEEyQzMKKzoxMDIzRjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwNkIKKzoxMDI0MDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDI0MTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTMKKzoxMDI0MjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMzUKKzoxMDI0MzAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxQTMKKzoxMDI0NDAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzAwOEEyNjUKKzoxMDI0NTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwMEEKKzoxMDI0NjAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDI0NzAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzNzAKKzoxMDI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMzcKKzoxMDI0OTAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDI0QTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzgwOEM1QUUKKzoxMDI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDg0MTAwMDAwMDAwQTMKKzoxMDI0QzAwMDAwMDAwMDAxMDAyMjBBMjIwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI0RDAwMDAwMzMwOEEyMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyQUQKKzoxMDI0RTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwNzcKKzoxMDI0RjAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDE3RUMKKzoxMDI1MDAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwODgKKzoxMDI1MTAwMDAwMDAwMzE4RkZGRkZGRUYwMDI4MDYyMTAwMDAwMDAwNjUKKzoxMDI1MjAwMDAwMDAwMDE0MDAyMDIyMkQwMDAwMDAwMDAwMDBGOEUwNTAKKzoxMDI1MzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTAxQjMKKzoxMDI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwMTAwMDAwMDAwQjgKKzoxMDI1NTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDI1NjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwODA0ODExMDcKKzoxMDI1NzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwN0IKKzoxMDI1ODAwMDk3MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDI1OTAwMEMwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDMKKzoxMDI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQjIKKzoxMDI1QjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDI1QzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRDEKKzoxMDI1RDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRDMKKzoxMDI1RTAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDI1RjAwMDAwQTAwMDBBMDAwMDAwMDA5NzAwMDAwMEMwMjA0NDExNjUKKzoxMDI2MDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgxMTAwMDAwMDAwOTEKKzoxMDI2MTAwMDhBMDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDI2MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExM0UKKzoxMDI2MzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNzIKKzoxMDI2NDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDI2NTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNkUKKzoxMDI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQzAKKzoxMDI2NzAwMDk3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDI2ODAwMDAwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExRDIKKzoxMDI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQzEKKzoxMDI2QTAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDI2QjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRTAKKzoxMDI2QzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRTIKKzoxMDI2RDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDI2RTAwMDAwQTAwMDBBMDAwMDAwMDA5NzAwMDAwMDAwMjA0NDExMzQKKzoxMDI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjEKKzoxMDI3MDAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDI3MTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExNEQKKzoxMDI3MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwODEKKzoxMDI3MzAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDI3NDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExNEQKKzoxMDI3NTAwMDAwMDAwMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwNTgKKzoxMDI3NjAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDI3NzAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwMjI1NzAwMjA0NDExQzEKKzoxMDI3ODAwMDAwMDAwMDAwMDAwMDAwMDNDMDQ4NEEyMDAwMDAwMDAwRDQKKzoxMDI3OTAwMDAwMDAyMjVEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDI3QTAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwODEKKzoxMDI3QjAwMDAwMDAwNURFMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwNEUKKzoxMDI3QzAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzMTMKKzoxMDI3RDAwMDAwMzg0QTIyMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExNDMKKzoxMDI3RTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQzEKKzoxMDI3RjAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDI4MDAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwODkKKzoxMDI4MTAwMDAwMDAwMDAwMDAwMDAwMDA0MDIwNDgwMDAwMDAwMDAwMTAKKzoxMDI4MjAwMDAwMDAwMDAxNDAzMDRBMjAwMDAwMDAwMDAwMDAwMDAyQ0IKKzoxMDI4MzAwMEMwMzA0QTIwMDAwMDAwMDAwMDAwMDAwMTAwNTMwQTIyQkUKKzoxMDI4NDAwMDAwMDAwMzU1MDAwMDAwM0ZDMDI4MEEyMDAwMDAwMDAwREYKKzoxMDI4NTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxODEKKzoxMDI4NjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExNjEKKzoxMDI4NzAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwNDgxMTAwMDAwMDAwQzcKKzoxMDI4ODAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDYyMjAwMDAwMDExM0MKKzoxMDI4OTAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwRjEKKzoxMDI4QTAwMDAwMDAwMzVFMDAwMDAwMTQwMDJGMDIyMjAwMDAwMDAwNjAKKzoxMDI4QjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDM2QzAwMDFBMkE0OTYKKzoxMDI4QzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODAyRTkKKzoxMDI4RDAwMDAwMDAwMzc0MDAwMDIxMDAwMDIwNDQxMTAwMDAwMDAwRUIKKzoxMDI4RTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDI4RjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwODgKKzoxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwN0YKKzoxMDI5MTAwMDAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDI5MjAwMDBDQzAwMDAwMDAwMDAzNzAwMDAxQTJBNDAwMjA0NDExQUMKKzoxMDI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMzY3QTMKKzoxMDI5NDAwMDAwMDAwMDI4MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDI5NTAwMDBDQzAwMDAwMDAwMDA1QkEwMDAxQTJBNDAwMjA0NDExMzAKKzoxMDI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMzY3NzMKKzoxMDI5NzAwMDAwMDAwMDJDMDAyMDM2MjYwMDAwMDAwMDAwMDAwMDQ5NjYKKzoxMDI5ODAwMDAwMjAxODExMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExNDYKKzoxMDI5OTAwMDAwMDAwMDAwMDAwMDAwMDEwMDMzMUEyNjAwMDAwMDAwQzMKKzoxMDI5QTAwMDAwMDAwMDAwMDAyRjAyMjYwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDI5QjAwMDBDQzAwMDAwMDAwMDAzNzYwMDAwMDAyQzAwODAxQTJEREYKKzoxMDI5QzAwMDAwMDAwMDAwMDAwMDAwM0ZDMDI4MEEyMDAwMDAwMDAwQjYKKzoxMDI5RDAwMDAwMDAwMDE1MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDI5RTAwMDBDRTAwMDAwMDAwMDAzOEMwMDAwMDAwNjAwMkYwMjIyMTMKKzoxMDI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0I3MzEKKzoxMDJBMDAwMDAwMDAwMDE2MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDJBMTAwMDBDRTAwMDAwMDAwMDAzQjkwMDAwMDAyMDAwMkYwMjIyOUIKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0EyMTUKKzoxMDJBMzAwMDAwMDAwMDBGMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDJBNDAwMDBDRTAwMDAwMDAwMDAzQUUwMDAwMDAxMDAwMkYwMjIyODYKKzoxMDJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0FFRDkKKzoxMDJBNjAwMDAwMDAwMDFFMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDJBNzAwMDBDRTAwMDAwMDAwMDAzOTYwMDAwQTJBNDAwMjA0NDExMTYKKzoxMDJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwQkMKKzoxMDJBOTAwMDA4MDAwMDAwMDAyOTBBMjIwMDAwMDAwMDAwMDAwMDAzRDYKKzoxMDJBQTAwMDQwMjEwRTIwMDAwMDAwMDAwMDAwMDAwQ0MwMjExMjIwNzgKKzoxMDJBQjAwMDAwMDAwMDAwMDAwODAwMDAwMDI4MTIyNDAwMDAwMDAwQjAKKzoxMDJBQzAwMDAwMDAwMDE0QzAyMjE2MjAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMDJBRDAwMDAwMjkxNEE0MDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExNUEKKzoxMDJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDhBMjAwMDAwMDAwRDMKKzoxMDJBRjAwMDAwMDBBMUZFMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDJCMDAwMDAwNDA0ODAzMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNDQKKzoxMDJCMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwM0IKKzoxMDJCMjAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MDEKKzoxMDJCMzAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExNDkKKzoxMDJCNDAwMDAwMDAwNjIyMDAwMDAwMTUwMDIxMDIzMDAwMDAwMDAwRjUKKzoxMDJCNTAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDM5ODAwMDAyMTBFQjcKKzoxMDJCNjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQzgKKzoxMDJCNzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMkQKKzoxMDJCODAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMDJCOTAwMDAwNDA0ODAyMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExQjUKKzoxMDJCQTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQUIKKzoxMDJCQjAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE3NzAKKzoxMDJCQzAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExQjkKKzoxMDJCRDAwMDAwMDAwNjIyMDAwMDAwMDMwMDIxMDIzMDAwMDAwMDAwNzcKKzoxMDJCRTAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDNBNDAwMDAyMTA4MjEKKzoxMDJCRjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMzgKKzoxMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwOUMKKzoxMDJDMTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDJDMjAwMDAwNDA0ODAyMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExNUYKKzoxMDJDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMkEKKzoxMDJDNDAwMDgwMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDJDNTAwMDAwMjA0ODExMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDUKKzoxMDJDNjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIwNDgxMTAwMDAwMDAwREIKKzoxMDJDNzAwMDAwMDAwMDAwMDAyMDAwMTAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDJDODAwMDE0QzAwMDAwMDAwMDAzQjQwMDAwMDAwMDAwNDAwMDAwNzkKKzoxMDJDOTAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwNzgKKzoxMDJDQTAwMDAwMDAwMDA2MDA0MDQ4MTEwMDAwMDAwMDAwMDFBMkE0M0UKKzoxMDJDQjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjAwNjA0ODExRDAKKzoxMDJDQzAwMDAwMDAwMzc0MDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwNEQKKzoxMDJDRDAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDJDRTAwMEMwMjAwQzAwMDAwMDAwMDAwMDAwMDAxRDAwMjEwMjIzOTUKKzoxMDJDRjAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwM0NFMEYKKzoxMDJEMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQ0MKKzoxMDJEMTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExQUMKKzoxMDJEMjAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwNDgxMTAwMDAwMDAwMTIKKzoxMDJEMzAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDYyMjAwMDAwMDExODcKKzoxMDJENDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwM0MKKzoxMDJENTAwMDAwMDAwM0MyMDAwMDIxMDAwMDIwNDQxMTAwMDAwMDAwMTgKKzoxMDJENjAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDJENzAwMDAwMjA0ODAzMDAwMDAwMDBCQUJFQ0FGRTAwMjA0ODExMkYKKzoxMDJEODAwMDAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwOEEKKzoxMDJEOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0NzQKKzoxMDJEQTAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMjE3MDAwMjA0NDExODQKKzoxMDJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwQTkKKzoxMDJEQzAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDgxMDAwMDAwMTcKKzoxMDJERDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwQTAwMjA0ODExRkIKKzoxMDJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwQjMKKzoxMDJERjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNEMzhDMDAwMDAwOUQKKzoxMDJFMDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExNzQKKzoxMDJFMTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDJFMjAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAzRkZGRUEKKzoxMDJFMzAwMDQwMjgwQTIwMDAwMDAwMDA4MDAwMDAwMDQwMjgwRTIwRUEKKzoxMDJFNDAwMDAwMDAwMDAwNDAwMDAwMDBDMDI4MTIyMDAwMDAwMDAwMjgKKzoxMDJFNTAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDYyMjAwMDAwMDAwNzUKKzoxMDJFNjAwMDAwMjAxNDEwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzQ0EKKzoxMDJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwM0UxQTIKKzoxMDJFODAwMDAwMDAwMDAwQzA0MDE4MDAwMDAwMDNFNDAwMDAzRkZGMDUKKzoxMDJFOTAwMEMwMjgxQTIwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI2MzcKKzoxMDJFQTAwMDAwMDAwNjIyMDAwMDAwMDAwMDIwMTgxMDAwMDAwMDAwQjIKKzoxMDJFQjAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDJFQzAwMDBDQzAwMDAwMDAwMDAzRTcwMDAwMDAwMEMwNDAxQzAwMzAKKzoxMDJFRDAwMDAwMDAwM0VBMDAwMDNGRkZDMDI4MUUyMDAwMDAwMDAwQTEKKzoxMDJFRTAwMDAwMDQwMDAwMDA2OTQ2MjcwMDAwMDYyMjAwMDAwMDAwRTAKKzoxMDJFRjAwMDAwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMDAwMjA0NDAyMjAKKzoxMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MjBDNTAwMDAwMDAwQjQKKzoxMDJGMTAwMDAwMDAwMDAwMDA0OTQ4RTgwMDAwMDAwMEE1ODAwMDAwMTMKKzoxMDJGMjAwMDAwMjAwODExMDAwMDAwMDAwMDAwMjAwMDAwMjAwQzExMEIKKzoxMDJGMzAwMDAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDEyNDMKKzoxMDJGNDAwMDAwMDAwMDAwMDAyMDQ0MDIwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDJGNTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDQwMjA0ODAwQTEKKzoxMDJGNjAwMDAwMDAwMDAwMDAwMDAwMUZDMDIxMDIyMDAwMDAwMDAwM0YKKzoxMDJGNzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNGNzAwMDAyMDEwNTMKKzoxMDJGODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDMKKzoxMDJGOTAwMDAwMDAwMDAwMDAwMEZGRkZDMDQ4MTIyMDAwMDAwM0ZGRjcKKzoxMDJGQTAwMEE3ODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBBMDAwMjEKKzoxMDJGQjAwMDAwMjAwQzExMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExOUMKKzoxMDJGQzAwMDAwMDAwNDEyMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwODUKKzoxMDJGRDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDJGRTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwQTEKKzoxMDJGRjAwMDAwMDAwMDAwODMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDkKKzoxMDMwMDAwMDAwMDAwMDAwMDAzMDQ4ODMwMDAwMDAwMDg0MDAwMDAwNDEKKzoxMDMwMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMTMKKzoxMDMwMjAwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMDAwMDAwMDAwMDAwODMKKzoxMDMwMzAwMDgzMDAwMDAwMDA2MDQ0MTEwMDAwMDQxMjAwMDAwMDAwNDIKKzoxMDMwNDAwMEMwNDAwNDAwMDAwMDAwMDFBOTgwMDAwMDAwMjAwODExMTkKKzoxMDMwNTAwMDAwMDAwMDAwMDAwMEMwMDAwMDQwMEMxMTAwMDAwM0ZBNTYKKzoxMDMwNjAwMEFCODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGOEUwMjQKKzoxMDMwNzAwMDAwNDAwQzExMDAwMDAzRkFBRDgwMDAwMDAwMjAwODExOTAKKzoxMDMwODAwMDAwMDAwMDAwMDAwMEY4ODAwMDQwMEMxMTAwMDAwM0ZBNkUKKzoxMDMwOTAwMEIzODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGM0ZDRDUKKzoxMDMwQTAwMDAwNDAwQzExMDAwMDAzRkFBRjgwMDAwMDAwMjAwODExNUUKKzoxMDMwQjAwMDAwMDAwMDAwMDAwMEUwMDAwMDQwMEMxMTAwMDAwM0ZBRDYKKzoxMDMwQzAwMEIxODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGMDAwQTYKKzoxMDMwRDAwMDAwNDAwQzExMDAwMDAzRkE4MzAwMDAwMDAwMjA0NDExOUUKKzoxMDMwRTAwMDAwMDAwMDAwMDAwMDIxNDgwMDIwNDgxMTAwMDAwMDAwRkUKKzoxMDMwRjAwMDg0MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDMxMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwN0EKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMkYKKzoxMDMxMjAwMDAxMTgyMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDMxMzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOEEKKzoxMDMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRDUKKzoxMDMxNTAwMDAyMThBMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDMxNjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNUEKKzoxMDMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQTUKKzoxMDMxODAwMDAzMThDMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDMxOTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMkEKKzoxMDMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNzUKKzoxMDMxQjAwMDA0MThGOEUwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDMxQzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwRkEKKzoxMDMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNDUKKzoxMDMxRTAwMDA1MThGODgwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDMxRjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwQ0EKKzoxMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMTQKKzoxMDMyMTAwMDA2MThFMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDMyMjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOTkKKzoxMDMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRTQKKzoxMDMyNDAwMDA3MThGMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDMyNTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNjkKKzoxMDMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQjQKKzoxMDMyNzAwMDA4MThGM0ZDQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDMyODAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzkKKzoxMDMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwODQKKzoxMDMyQTAwMDAwMDAwMDMzQzAzMDBBMjAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDMyQjAwMEMwNDAzNDQwMDAwMDAwMDAwMDAwMDAzMDAwMjAwQTJEMTMKKzoxMDMyQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDI5MEM0MDAwMDAwMDAwQzkKKzoxMDMyRDAwMDAwMDAwMDMwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDMyRTAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBNTAKKzoxMDMyRjAwMDAwMDAwMDAwODYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDMKKzoxMDMzMDAwMDAwMDAwMDAwMDA0MDQ4MDEwMDAwMDAwMDg1MDAwMDAwQUYKKzoxMDMzMTAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAxRUYKKzoxMDMzMjAwMDAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwOEIKKzoxMDMzMzAwMDAwMDAwMDE4NDAyMTAyMjAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDMzNDAwMDE0QzAwMDAwMDAwMDA0NDcwMDgwMDAwMEMwNDk0QTIwNkIKKzoxMDMzNTAwMDAwMDAwNDQ4MDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRjkKKzoxMDMzNjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDMzNzAwMEMwMjA0ODAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMkYKKzoxMDMzODAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzMKKzoxMDMzOTAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDA0NDEKKzoxMDMzQTAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDA2RTAwMDAwRTQKKzoxMDMzQjAwMDAwMDAwNDUwMDAwMDAwMDQwMDIwMDgxMTAwMDAwMDAwN0MKKzoxMDMzQzAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGNDIKKzoxMDMzRDAwMDAwNjA0NDExMDAwMDA2MjIwMDAwMDAxRjAwMjEwMjMwOUUKKzoxMDMzRTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwMDkKKzoxMDMzRjAwMDAwMDAwMDAwMDA0MDRDMDIwMDAwMDQ1MDAwMDAwMDAwRUIKKzoxMDM0MDAwMEMwMjAwQzAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxMDAwRTAKKzoxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTQwMDAwMDAwMDAwQjgKKzoxMDM0MjAwMDAwMDAwMDAwQzAyMDE4MDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDM0MzAwMEMwMjAxQzAwMDAwMDAwMDAwMDAwN0YwMDAwMjgwQTIxQkUKKzoxMDM0NDAwMDAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwRTQKKzoxMDM0NTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ2MTAwMDAwMDAwMUIKKzoxMDM0NjAwMEMwMjAyMDAwMDAwMDAwMDAwMDAwMDAwNDAwMkYwMjI4RkYKKzoxMDM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwNDYxMDEKKzoxMDM0ODAwMDAwMDAwMDA0MDAyMDIwMTEwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDM0OTAwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjgwQTIzQjAKKzoxMDM0QTAwMDAwMDAwMDAwMDAwMDAwMTAwMDJGMDIyMjAwMDAwMDAwQjkKKzoxMDM0QjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ2OTgxMDAwMDAwMzIKKzoxMDM0QzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMEQKKzoxMDM0RDAwMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNDAwMDAwNjIyRUQKKzoxMDM0RTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ2RTgxMDAwMDAwQTkKKzoxMDM0RjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExREUKKzoxMDM1MDAwMDAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwQjgKKzoxMDM1MTAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDM1MjAwMDAwNjA0ODA1MDAwMDA2MjcwMDAwMDAwMDAwMjgyNEYwODUKKzoxMDM1MzAwMDAwMDAwMDAwMDAwMDAwMDcwMDI4MEEyMzAwMDAwMDAwMkYKKzoxMDM1NDAwMDAwMDAwMDAxMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDM1NTAwMDBBRTAwMDAwMDAwMDA0NzUwMDAwMDAwMDAwMkYwMEM5MTAKKzoxMDM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwNEUwMDAwMDAwMDAwNDhFRTUKKzoxMDM1NzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5QjAwMDAwMDAyNkEKKzoxMDM1ODAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwRkUKKzoxMDM1OTAwMDAwMDAwNDdBMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwQjUKKzoxMDM1QTAwMDAwMDAwMDAwMDJFMDAwMDAwMDAwMDQ4RTAwMDAwMDAwQTcKKzoxMDM1QjAwMDAwNDAwMDAwMDAwMDA0OUIwMDAwMDAwMzAwMkYwMjIyRDYKKzoxMDM1QzAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDdGOEUKKzoxMDM1RDAwMDAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDM1RTAwMDBDRTAwMDAwMDAwMDA0OEUwMDAwMDAwMDAwNDAwMDAwMUQKKzoxMDM1RjAwMDAwMDAwNDlCMDAwMDAwMDQwMDJGMDIyMjAwMDAwMDAwRDUKKzoxMDM2MDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ4NDAwMDAwMDAwNDgKKzoxMDM2MTAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQzgKKzoxMDM2MjAwMDAwMDAwNDhFMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDlCMjkKKzoxMDM2MzAwMDAwMDAwMDA1MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDM2NDAwMDBBRTAwMDAwMDAwMDA0ODkwMDAwMDAwMDAwMkYwMEM5MEIKKzoxMDM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwNDhFRjIKKzoxMDM2NjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5QjAwMDAwMDA2NzUKKzoxMDM2NzAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMEQKKzoxMDM2ODAwMDAwMDAwNDhFMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwQjAKKzoxMDM2OTAwMDAwMDAwMDAwMDhFMDAwMDAwMDAwMDQ4RTAwMDAwMDAwQjAKKzoxMDM2QTAwMDAwNDAwMDAwMDAwMDA0OUIwMDAwN0YwMDAwMjgwQTIxNjkKKzoxMDM2QjAwMDAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwNzIKKzoxMDM2QzAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDgKKzoxMDM2RDAwMDAwMjEwQTIzMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQzgKKzoxMDM2RTAwMDAwMDAwNDk4MDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwM0YKKzoxMDM2RjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDM3MDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNjkKKzoxMDM3MTAwMDAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwRDAKKzoxMDM3MjAwMDAwMDAwMDAwQzAyMDQ0MDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDM3MzAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwNjEKKzoxMDM3NDAwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MEEyMTAwMDAwMDAwQTcKKzoxMDM3NTAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDM3NjAwMDBBRTAwMDAwMDAwMDA0QTEwMDAwMDAwMEMwMjAwMDAwRUEKKzoxMDM3NzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwNjkKKzoxMDM3ODAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDM3OTAwMDAwNDA0QzA4MDAwMDA0NjEwMDAwMDAwMEMwMjAwODAwNDgKKzoxMDM3QTAwMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwN0EKKzoxMDM3QjAwMDAwMDAwMDExNDAyMTEyMjAwMDAwMDAwMDAwMDAwMDEyNTMKKzoxMDM3QzAwMDQwMjExNjIwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExNjMKKzoxMDM3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwN0YKKzoxMDM3RTAwMDAwMDAwMDAwMDAyMTAyMjUwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDM3RjAwMDE0RTAwMDAwMDAwMDA0QUIwMDA0MDAwMEMwNDk0QTIwQUYKKzoxMDM4MDAwMDAwMDAwNEFDRkZGQkZGRkZDMDI4NEEyMDAwMDAwMDAwQkUKKzoxMDM4MTAwMDAwMDAwMDAwMDAyMTAyMjMwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDM4MjAwMDE0RTAwMDAwMDAwMDA0QjgwMDAwMDAwMEMwMjA0ODAwQzAKKzoxMDM4MzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNjAKKzoxMDM4NDAwMDAwMDAwMDAwMDAyMTAyMjQwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDM4NTAwMDE0QzAwMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExOUUKKzoxMDM4NjAwMDAwMDAwMDAwMDAwMDAwMEMwMDIwNDgxMTAwMDAwMDAwRDMKKzoxMDM4NzAwMDAwMDAwMDAwMDAyMDAwMTAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMDM4ODAwMDE0QzAwMDAwMDAwMDA0QjRBMDAwMDAwMDAwMjA0NDExOTcKKzoxMDM4OTAwMDAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwNEYKKzoxMDM4QTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0MUUKKzoxMDM4QjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2QjAwMjA0NDExOEUKKzoxMDM4QzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgxMDAwMDAwMDAwQzAKKzoxMDM4RDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA1RUQKKzoxMDM4RTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2QzAwMjA0NDExNUQKKzoxMDM4RjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgxMDAwMDAwMDAwOTAKKzoxMDM5MDAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDM5MTAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwN0IKKzoxMDM5MjAwMDAwMDAwNEIyMDAwMDAwMDBDMDIxMEEyMDAwMDAwMDAwRDYKKzoxMDM5MzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRDQjgxMDAwMDAwNjMKKzoxMDM5NDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExODkKKzoxMDM5NTAwMDAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwNjQKKzoxMDM5NjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDM5NzAwMEMwNjA0ODAwMDAwMDA2MjcwMDAwMDAwMDAwNDAwMDAwNzIKKzoxMDM5ODAwMDAwMDAwNENGODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNkUKKzoxMDM5OTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQwMDAwQTkKKzoxMDM5QTAwMEMwMjk0NjIwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwQTgKKzoxMDM5QjAwMDAwMDAwNjIyMDAwMDAwMDEwMDIxMDIyMjAwMDAwMDAwOTkKKzoxMDM5QzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRENjAwMDAyMTY5QkYKKzoxMDM5RDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNEEKKzoxMDM5RTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQUYKKzoxMDM5RjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMENBRkVCQUJFMEYKKzoxMDNBMDAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMDAwMEMwMjA0NDAwRjkKKzoxMDNBMTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgxMDAwMDAwMDAwNEUKKzoxMDNBMjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxOUYKKzoxMDNBMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExN0YKKzoxMDNBNDAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwRUYKKzoxMDNBNTAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDYyMjAwMDAwMDAwNkIKKzoxMDNBNjAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMkYKKzoxMDNBNzAwMDAwMDAwNEQ4MDAwMDIxODAwMDIwNDQxMTAwMDAwMDAwNTQKKzoxMDNBODAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDNBOTAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMUUKKzoxMDNBQTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMzYKKzoxMDNBQjAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAzQkIKKzoxMDNBQzAwMDAwMzMzRTJGMDAwMDAwMDAwMDAwMDAwMTAwMjEwMjIxMTEKKzoxMDNBRDAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwNTA4RTUKKzoxMDNBRTAwMDAwMDAwMDJDMDAyMDBBMkQwMDAwMDAwMDAwMDQwMDAwNEYKKzoxMDNBRjAwMDE4RTAwQzExMDAwMDA0RjcwMDAwMDAwMTAwMzMzRTJGMTUKKzoxMDNCMDAwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwQjYKKzoxMDNCMTAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMDNCMjAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyQzYKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNUQKKzoxMDNCNDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAyMTY5QzMKKzoxMDNCNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyODYKKzoxMDNCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwRUEKKzoxMDNCNzAwMDAwMDAwMDA4MDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDNCODAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEQ4QzA0ODAwMkQKKzoxMDNCOTAwMDAwMDAwNEVCMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMzcKKzoxMDNCQTAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDNCQjAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMzYKKzoxMDNCQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwQ0QKKzoxMDNCRDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDJEOTAKKzoxMDNCRTAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwMDAwMjkwQzgzQkUKKzoxMDNCRjAwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwQzYKKzoxMDNDMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMDNDMTAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyRDUKKzoxMDNDMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNkMKKzoxMDNDMzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDExNEIKKzoxMDNDNDAwMDAwMjEwMjI0MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwNTkKKzoxMDNDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNEIyNkUKKzoxMDNDNjAwMDAwMDAwMDJDQzAyMDM2MjAwMDAwMDAwMDAwMDAwMDJEQzUKKzoxMDNDNzAwMEMwNDAzNjIwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjIxOUIKKzoxMDNDODAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNTBENEUKKzoxMDNDOTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwQjkKKzoxMDNDQTAwMEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwNDAwMzcKKzoxMDNDQjAwMDAwMDAwMDAxQjUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDkKKzoxMDNDQzAwMDAwMDAyMDAwMDAyMDQ4MTEwMDAwMDAwMEI2MDAwMDAwQTUKKzoxMDNDRDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwQTAwMDAwMjA0ODExNTYKKzoxMDNDRTAwMDAwMDAwMDAwQjcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQTgKKzoxMDNDRjAwMDAwMDBDMDAwMDAyMDQ4MTEwMDAwMDAwMEI4MDAwMDAwRDMKKzoxMDNEMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjhFMDAwMjA0ODExRUQKKzoxMDNEMTAwMDAwMDAwMDAwQjkwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNzUKKzoxMDNEMjAwMDAwMDBGODgwMDAyMDQ4MTEwMDAwMDAwMEJBMDAwMDAwRTgKKzoxMDNEMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRTAwMDAwMjA0ODExQjUKKzoxMDNENDAwMDAwMDAwMDAwQkIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNDMKKzoxMDNENTAwMDAwMDBGMDAwMDAyMDQ4MTEwMDAwMDAwMEJDMDAwMDAwM0UKKzoxMDNENjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjNGQzAwMjA0ODExNzYKKzoxMDNENzAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNEQKKzoxMDNEODAwMDAwMDAwMDAyMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMEZGQjkKKzoxMDNEOTAwMDAwMjgwRTMwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzNjkKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTIxMjEKKzoxMDNEQjAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDNEQzAwMDE0QzAwMDAwMDAwMDA1MzYwMDAwMDAwMDAwMjAwQzExQTcKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMUMwMDIwMzYyMzAwMDAwMDAwNEUKKzoxMDNERTAwMDAwMDAwMDJCMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI5MDYKKzoxMDNERjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyODAwMjAzNjIzQTkKKzoxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMzYyMzAwMDAwMDAwMjIKKzoxMDNFMTAwMDAwMDAwMDI1MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI2REUKKzoxMDNFMjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAxNTAwMjAzNjIzOEIKKzoxMDNFMzAwMDAwMDAwMDAwMDAwMDAwMTYwMDIwMzYyMzAwMDAwMDAwRjMKKzoxMDNFNDAwMEZGRkZFMDAwMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDIxMzYKKzoxMDNFNTAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyMjAwMjAzNjIzNEUKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMDFGRkYwMDIwMEMxMTAwMDAwMDAwRjcKKzoxMDNFNzAwMDAwMDAwMDIzMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI0ODIKKzoxMDNFODAwMDAwMjAzNjIzMDAwMDAwMDBGMUZGRkZGRjAwMjgzQTJFM0IKKzoxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMUFDMDIyMEUyMDAwMDAwMDAwRjgKKzoxMDNFQTAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDgxMDAwMDAwQzIKKzoxMDNFQjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExMEUKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMkE0MDIwMzYyMDAwMDAwMDAwMTIKKzoxMDNFRDAwMDg3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDNFRTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGNDAwMjA0NDExQTAKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwNEEKKzoxMDNGMDAwMDlEMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFGODAKKzoxMDNGMTAwMDQwMjE0QTIwMDAwMDAwMDA5NjAwMDAwMDAwMjA0NDExQ0IKKzoxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNjkKKzoxMDNGMzAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMDNGNDAwMEMwMjAxMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExNjI0MDcKKzoxMDNGNTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwOEQKKzoxMDNGNjAwMDAwMDAwMDFEMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDAzQjgKKzoxMDNGNzAwMDAwMjgxRTIzMDAwMDAwMDAwMDAwMDAwODAwMjIyMjIzNjkKKzoxMDNGODAwMDAwMDAwMDAwRkZGRkYwMDAwMDI4MjIyODAwMDAwMDAwRDEKKzoxMDNGOTAwMDAwMDAwMDAwMDAyOTIwRTgwMDAwMDAwMDAwMDAwMDFGRDEKKzoxMDNGQTAwMDAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxODAwMjExRTIzMTkKKzoxMDNGQjAwMDAwMDAwMDAwMDAwMDAwMjAwMDIwMzYyNzAwMDAwMDAwNjQKKzoxMDNGQzAwMDAwMDAwMDAyMDAyMjE2MjQwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDNGRDAwMDAwMzAxNEE4MDAwMDAwMDAwMDAwMDAxRTAwMjAzNjI1NUMKKzoxMDNGRTAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMUEyNDAwMDAwMDAwNkYKKzoxMDNGRjAwMDEwMDAwMDAwMDAyODFBMjYwMDAwMDAwMEVGRkZGRkZGNUQKKzoxMDQwMDAwMDAwMjgzQTJFMDAwMDAwMDAwMDAwMDAwMDAwNDkzOENFRDEKKzoxMDQwMTAwMDAwMDAwNjEwMDAwMDAwMDE0MDI4MEEyMDAwMDAwMDAwRjcKKzoxMDQwMjAwMDAwMDAwMDA2NDAyODBFMjAwMDAwMDAwMDAwMDAwMzAwRjEKKzoxMDQwMzAwMEMwMjgxMjIwMDAwMDAwMDAwMDAwMDAwODAwMjExMjI0MDcKKzoxMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTYyMDAwMDAwMDAwNUEKKzoxMDQwNTAwMDAwMDAwMDAwQzAyMDFBMjAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDQwNjAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMzcKKzoxMDQwNzAwMDAwMDAwNTZDODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDkKKzoxMDQwODAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU4M0MKKzoxMDQwOTAwMDAwMzAwQTI0MDAwMDAwMDAwMDA0MDAwMDAwNjk0NjIyRUQKKzoxMDQwQTAwMDAwMDAwNjIyMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwRTkKKzoxMDQwQjAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDIwMDAwOTEKKzoxMDQwQzAwMDAwMjk0QTI2MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwREYKKzoxMDQwRDAwMDAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMjcKKzoxMDQwRTAwMDAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDQwRjAwMDBDQzAwMDAwMDAwMDA1NzQwMDAwMDAwMEMwMjAxQzEwNkYKKzoxMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTgyMjgKKzoxMDQxMTAwMDAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDQxMjAwMDBDQzAwMDAwMDAwMDA1NzQ4MTAwMDAwMDAwMjA0NDExNTQKKzoxMDQxMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDUKKzoxMDQxNDAwMDAwMDAyMjU4MDAzMDBBMjQwMDAwMDAwMDAwMDQwMDAwOTMKKzoxMDQxNTAwMDAwNjk0NjIyMDAwMDA2MjIwMDAwMDAwMEMwMjAxQzEwNUEKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTgyQzgKKzoxMDQxNzAwMDAwMDAwMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMDQxODAwMDBDQzAwMDAwMDAwMDA1NzgwMDAwMDAwMEMwMjAxQzAwRUEKKzoxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwNTgyOTgKKzoxMDQxQTAwMDAwMDAwMDA0MDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMDQxQjAwMDBDQzAwMDAwMDAwMDA1ODA4MTAwMDAwMDAwMjA0NDExQjgKKzoxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNzYKKzoxMDQxRDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDQxRTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwM0YKKzoxMDQxRjAwMDAwMDAwNjI3MDAwMDAwMDAwMDQwMUMxMDAwMDAwNTgyOUYKKzoxMDQyMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDQyMTAwMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRTAwMDAwQjAKKzoxMDQyMjAwMDAwMDAwNTg0MDAwMDAwMDAwMDYwMDAwMDAwMDAwNUMzREQKKzoxMDQyMzAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDQyNDAwMDBDQzAwMDAwMDAwMDA1OTIwMDAwQTJCNzAwMjA0NDExM0QKKzoxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwRUYKKzoxMDQyNjAwMDAwMDAwMDMzMDAyMDI2MkQwMDAwMDAwMDAwMDAwMDFBOEUKKzoxMDQyNzAwMDAwMjEyMjI5MDAwMDAwMDAwMDAwMDAwNjAwMjIyNjI5NUIKKzoxMDQyODAwMDAwMDAwMDAwMDAwMEEyQzQwMDIwNDQxMTAwMDAwMDAwNTMKKzoxMDQyOTAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDQyQTAwMDAwRTAwMDAwMDAwMDA1OTAwMDAwQTJEMTAwMjA0NDExQjEKKzoxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwNkUKKzoxMDQyQzAwMDAwMDBBMkQxMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDUKKzoxMDQyRDAwMDAwNTA0QTI4MDAwMDAwMDAwMDAwMDAwMTAwMkYwMjI0QzYKKzoxMDQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUEwNUQKKzoxMDQyRjAwMDAwMDBBMkJCMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDQzMDAwMDAwMjA0ODA3MDAwMDAwMDAwMDAwMDAzNDAwMjAyNjJEOTcKKzoxMDQzMTAwMDAwMDAwMDAwMDAwMDAwMUEwMDIxMjIyOTAwMDAwMDAwMTcKKzoxMDQzMjAwMDAwMDAwMDA2MDAyMjI2MjkwMDAwMDAwMDAwMDBBMkM1QUYKKzoxMDQzMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5QTcKKzoxMDQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNTlFRUEKKzoxMDQzNTAwMDAwMDBBMkQyMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDQzNjAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJEMjAwMjA0NDExRDQKKzoxMDQzNzAwMDAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwN0EKKzoxMDQzODAwMDAwMDAwMDAyMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDQzOTAwMDBDQzAwMDAwMDAwMDA1QUUwMDAwQTJCRjAwMjA0NDExQzgKKzoxMDQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwOUUKKzoxMDQzQjAwMDAwMDAwMDM1MDAyMDI2MkQwMDAwMDAwMDAwMDAwMDFBM0IKKzoxMDQzQzAwMDAwMjEyMjI5MDAwMDAwMDAwMDAwMDAwNjAwMjIyNjI5MEEKKzoxMDQzRDAwMDAwMDAwMDAwMDAwMEEyQzYwMDIwNDQxMTAwMDAwMDAwMDAKKzoxMDQzRTAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDQzRjAwMDAwRTAwMDAwMDAwMDA1QUMwMDAwQTJEMzAwMjA0NDExNDIKKzoxMDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMUMKKzoxMDQ0MTAwMDAwMDBBMkQzMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQjEKKzoxMDQ0MjAwMDAwNTA0QTI4MDAwMDAwMDAwMDAwQTJDMzAwMjA0NDExRjAKKzoxMDQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwMEQKKzoxMDQ0NDAwMDAwMDAwMDM2MDAyMDI2MkQwMDAwMDAwMDAwMDAwMDFBQTkKKzoxMDQ0NTAwMDAwMjEyMjI5MDAwMDAwMDAwMDAwMDAwNjAwMjIyNjI5NzkKKzoxMDQ0NjAwMDAwMDAwMDAwMDAwMEEyQzcwMDIwNDQxMTAwMDAwMDAwNkUKKzoxMDQ0NzAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDQ0ODAwMDAwRTAwMDAwMDAwMDA1QjgwMDAwQTJENDAwMjA0NDExQTQKKzoxMDQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwOEMKKzoxMDQ0QTAwMDAwMDBBMkQ0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMjAKKzoxMDQ0QjAwMDAwNTA0QTI4MDAwMDAwMDA4NTAwMDAwMDAwMjA0NDExNDAKKzoxMDQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMTAwMDAwMDAwODMKKzoxMDQ0RDAwMDAwMDAzMDRBMDAyMDQ0MTEwMDAwMDAwMDAxMDAwMDAwRUMKKzoxMDQ0RTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMTMKKzoxMDQ0RjAwMDAwMDAwNUJFQTQwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMjAKKzoxMDQ1MDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDQ1MTAwMEMwNjAwMDAwMDAwMDA1QzMwMDAwMDAwMEMwNDAwNDAwQUYKKzoxMDQ1MjAwMDAwMDAwMDAxMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwQ0UKKzoxMDQ1MzAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDNGODQKKzoxMDQ1NDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExM0EKKzoxMDQ1NTAwMDAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwQTMKKzoxMDQ1NjAwMDAwMDAwMDA1MDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUY0MzgKKzoxMDQ1NzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNEQKKzoxMDQ1ODAwMDAwMDAwMDAwODgwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMkUKKzoxMDQ1OTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEZGMDAwMDAwQTIKKzoxMDQ1QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMUQKKzoxMDQ1QjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwODEKKzoxMDQ1QzAwMDAwMDAwMDAyMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDQ1RDAwMDBFRTAwMDAwMDAwMDA1RDYwMDAwMTAwMDAwMjAwODExQzkKKzoxMDQ1RTAwMDAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMjAwMDAwMDAwMjgKKzoxMDQ1RjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVEQTAwMDAwMDAwN0MKKzoxMDQ2MDAwMDAwNjAwMDAwMDAwMDA1QzM5ODAwMDAwMDAwMjA0NDExNzUKKzoxMDQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwNDgxMTAwMDAwMDAwQzEKKzoxMDQ2MjAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDVEQTAwMDAwMDAwOEIKKzoxMDQ2MzAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwQTJBNDAwMjA0NDExQkEKKzoxMDQ2NDAwMDAwMDAwMDAwMDAwMDAwMjIwMDIwNDgxMTAwMDAwMDAwQ0YKKzoxMDQ2NTAwMDg5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNUIKKzoxMDQ2NjAwMDAwNDA0ODExMDAwMDA1Q0Q5NzAwMDAwMDAwMjA0NDExRDMKKzoxMDQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQzEKKzoxMDQ2ODAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMkIKKzoxMDQ2OTAwMDAwNDA0ODExMDAwMDA1Q0QwMDAwMDAwMDAwNjAwMDAwNEYKKzoxMDQ2QTAwMDAwMDAwNUYzMDAwMUEyQTRDMDIwNDQxMTAwMDAwMDAwOTYKKzoxMDQ2QjAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM3NDAwMDAyMDEwODQKKzoxMDQ2QzAwMDAwMjA0NDExMDAwMDAwMDAwMDAxMDAwMDAwMjA0ODExRkIKKzoxMDQ2RDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRTQKKzoxMDQ2RTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDQjMKKzoxMDQ2RjAwMDAwMjA0NDExMDAwMDAwMDAwOTgwMDAwMDAwMjA0ODExNDMKKzoxMDQ3MDAwMDAwMDAwMDAwRkZGRkZGRkYwMDIwNDgxMTAwMDAwMDAwMzQKKzoxMDQ3MTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDQ3MjAwMDE3MDAwMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExMTkKKzoxMDQ3MzAwMDAwMDAwNjIyMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwREYKKzoxMDQ3NDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDA0OTEKKzoxMDQ3NTAwMDAwNDA0QzExMDAwMDA1RUQwMDAwMDAwMDAwNDAwMDAwOEEKKzoxMDQ3NjAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQzcKKzoxMDQ3NzAwMDAwMDAwMDA0MDAyOTFFMjcwMDAwMDAwMDAwMDAwMDE3QjAKKzoxMDQ3ODAwMDAwODAzNjI3MDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEQ0EKKzoxMDQ3OTAwMDAwMDAwMDAwRkZGRkZGRkIwMDI4MUUyNzAwMDAwMDAwQjQKKzoxMDQ3QTAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMDAwMDAwMDE3RkUKKzoxMDQ3QjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwODAwMjkxRTI3MTgKKzoxMDQ3QzAwMDAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwRjUKKzoxMDQ3RDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEZGRkZGRkY3NjMKKzoxMDQ3RTAwMDAwMjgxRTI3MDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3NjgKKzoxMDQ3RjAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwRkQKKzoxMDQ4MDAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM3NDAwMDAyMDEwMzIKKzoxMDQ4MTAwMDAwMjA0NDExMDAwMDAwMDAwMDAxMDAwMDAwMjA0ODExQTkKKzoxMDQ4MjAwMDAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwNzYKKzoxMDQ4MzAwMDAxODAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGRkZGODIKKzoxMDQ4NDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNzYKKzoxMDQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwNDEKKzoxMDQ4NjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNTEKKzoxMDQ4NzAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExNjYKKzoxMDQ4ODAwMDAwMDAwNjIyMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwOEUKKzoxMDQ4OTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDYyMTAwMDAwMDEwMEQKKzoxMDQ4QTAwMDAwNDA0QzExMDAwMDA2MDcwMDAwMDAwMEMwMjAwNDAwN0EKKzoxMDQ4QjAwMDAwMDAwMDAwMDAwMDAwMDAzOEMwMDAwMDAwMDAwMDAwMDAKKzoxMDQ4QzAwMDAwMDAwMDFEMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDFFNTYKKzoxMDQ4RDAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxRjAwMjAxMjJERkYKKzoxMDQ4RTAwMDAwMDAwMDAwMDAwMDAwMjAwMDIwMTYyRDAwMDAwMDAwNDUKKzoxMDQ4RjAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDQ5MDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA1Q0UKKzoxMDQ5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMTAwMDAwMDAwMkUKKzoxMDQ5MjAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA0Q0EKKzoxMDQ5MzAwMDAwMzAxMjI0MDAwMDAwMDAwMDAwMDAwMDAwMkYwMDY0N0UKKzoxMDQ5NDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNjIwNzUKKzoxMDQ5NTAwMDAwMDAwMDAzMDAyODFBMjIwMDAwMDAwMDAwMDAwMDA4RTgKKzoxMDQ5NjAwMDAwMjIxMjIyMDAwMDAwMDBGRkZGRjAwMDAwMjgxMjI0QTUKKzoxMDQ5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MTBDNDAwMDAwMDAwM0EKKzoxMDQ5ODAwMDAwMDAwMDFGMDA0MDM2MjQwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDQ5OTAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBQzAwMDAwQkQKKzoxMDQ5QTAwMDAwMDAwNjIyOUYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQ0IKKzoxMDQ5QjAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDQ5QzAwMDFBRTAwMDAwMDAwMDA2MjUwMDAwMDAwMDAwODAwMDAwNDIKKzoxMDQ5RDAwMDAwMDAwMDAwMDAwMDAwMDAxQUMwMDAwMDAwMDAwNjI3RDAKKzoxMDQ5RTAwMDlFMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFNzQKKzoxMDQ5RjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDFBRTAwMDAwNDQKKzoxMDRBMDAwMDAwMDAwNjJBMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwRjYKKzoxMDRBMTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAxMDAwMUIKKzoxMDRBMjAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExQzQKKzoxMDRBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyNEEKKzoxMDRBNDAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzNzAKKzoxMDRBNTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExRjAKKzoxMDRBNjAwMDAwMDAwMDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwQjIKKzoxMDRBNzAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMjMKKzoxMDRBODAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTFGREMwMjA0NDExRDkKKzoxMDRBOTAwMDAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwOEEKKzoxMDRBQTAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDI0NkIKKzoxMDRBQjAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MTcKKzoxMDRBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwNkQKKzoxMDRBRDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDIyM0IKKzoxMDRBRTAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4RTcKKzoxMDRBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwM0QKKzoxMDRCMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDIzMDkKKzoxMDRCMTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3QjMKKzoxMDRCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwMEMKKzoxMDRCMzAwMDAwMDAwMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDRCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDRCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDRCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDRCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDRCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDRCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDRCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDRCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDRCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMDRCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDRCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDRDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMDRDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDRDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDRDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDRDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDRDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDRDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDRDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDRDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMDRDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDRDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDRDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDRDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDRDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDREMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDREMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDREMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDRENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDRENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDRENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDRENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDREODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDREOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDREQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDREQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDREQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDRERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDRFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDRFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMDRFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDRFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDRFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDRFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDRFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDRFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDRFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDRFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDRFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDRFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDRFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDRFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDRGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDRGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDRGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDRGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDRGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDRGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDRGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDRGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDRGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDRGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDRGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDRGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDRGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDRGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDUwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDUwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDUwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDUwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDUwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDUwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDUwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDUwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDUwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDUwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDUwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDUwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDUxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDUxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDUxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDUxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDUxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDUxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDUxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDUxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDUxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDUxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDUxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDUxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDUyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDUyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDUyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDUyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDUyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDUyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDUyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDUyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDUyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDUyQjAwMDAxNDIwNTBBMDVCQTAyNTAwMDAwMDAwMDAxQzMwMTY4NUUKKzoxMDUyQzAwMDA0NDEwNUJBMDAwMDAwMDAwMjI1MDIwOTAyNTAwMTUxMDQKKzoxMDUyRDAwMDAwMDAwMDAwMDIyMzAyNDUwMkEwMDI0MTAwMDAwMDAwN0QKKzoxMDUyRTAwMDAzRDcwNUJBMDVCQTA1QkEwMDAwMDAwMDA1RTIwNUUzRDgKKzoxMDUyRjAwMDAzMUYwNUJBMDAwMDAwMDAwMzIwMDVCRjAzMjAwMzRBNzYKKzoxMDUzMDAwMDAwMDAwMDAwMDMzNDAyODIwMzRDMDMzRTAwMDAwMDAwNTIKKzoxMDUzMTAwMDA1QkEwNUJBMDVCQTA1QkEwMDAwMDAwMDA1QkEwNTU3NzYKKzoxMDUzMjAwMDA1QkEwMzJBMDAwMDAwMDAwM0JDMDVCQTA0QzMwMzRFRkIKKzoxMDUzMzAwMDAwMDAwMDAwMDRBMjA0NTUwNDNGMDVCQTAwMDAwMDAwNkMKKzoxMDUzNDAwMDA0RDgwNUJBMDQ0MzA0RTUwMDAwMDAwMDA0NTUwNTBGMjUKKzoxMDUzNTAwMDAzNUIwMzdCMDAwMDAwMDAwNUJBMDVCQTA1QkEwNUJBNzUKKzoxMDUzNjAwMDAwMDAwMDAwMDVCQTA1QkEwNUJBMDVCQTAwMDAwMDAwNDEKKzoxMDUzNzAwMDA1QkEwNUJBMDVEODA1QzEwMDAwMDAwMDA1QkEwNUJBOEUKKzoxMDUzODAwMDAwMDcwNUJBMDAwMDAwMDAwNUJBMDVCQTA1QkEwNUJBNUIKKzoxMDUzOTAwMDAwMDAwMDAwMDVCQTA1QkEwNUJBMDVCQTAwMDAwMDAwMTEKKzoxMDUzQTAwMDAzRjgwM0VEMDQwODA0MDYwMDAwMDAwMDA0MEUwNDBBREMKKzoxMDUzQjAwMDA0MEMwNDEwMDAwMDAwMDAwNDFDMDQxODA0MjQwNDIwNDEKKzoxMDUzQzAwMDAwMDAwMDAwMDQyQzA0MjgwNDM0MDQzMDAwMDAwMDAwMTUKKzoxMDUzRDAwMDA1QkEwNUJBMDQzQTA0MzgwMDAwMDAwMDA1QkEwNUJBNTcKKzoxMDUzRTAwMDA1QkEwNUJBMDAwMDAwMDAwNUJBMDVCQTA1QkEwNUJBNDMKKzoxMDUzRjAwMDAwMDAwMDAwMDAwMjA2MEUwNjJDMDAwNjAwMDAwMDAwNUYKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlM3ODBfcGZwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JTNzgwX3BmcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg4MDQxCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JTNzgwX3BmcC5iaW4uaWhleApAQCAtMCwwICsxLDE0NSBAQAorOjEwMDAwMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDA3QzAzOEJFRAorOjEwMDAxMDAwMDA4MDAxREIwMDdDMDM4QjAwRDQ0MDFFMDBFRTAwMUUzQworOjEwMDAyMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBDNDE4MzhDMworOjEwMDAzMDAwMDBDQTI0MDAwMENBMjgwMDAwOTU4MUNCMDBDNDFDM0FFNQorOjEwMDA0MDAwMDBDM0MwMDAwMENBMDgwMDAwQ0EwQzAwMDA3Qzc0NEI0QQorOjEwMDA1MDAwMDBDMjAwMDUwMDk5QzAwMDAwQzQxQzNBMDA3Qzc0NEMyQQorOjEwMDA2MDAwMDBDMEZGRTAwMDA0MkMwODAwMzA5MDAyMDA3RDI1MDA1NQorOjEwMDA3MDAwMDAzNTE0MDIwMDdEMzUwQjAwMjU1NDA3MDA3Q0Q1ODAyNworOjEwMDA4MDAwMDAyNTlDMDcwMDk1QzAwNDAwRDUwMDFCMDA3RUREQzE0MworOjEwMDA5MDAwMDA3RDlEODAwMEQ2ODAxQjAwRDU4MDFCMDBENDQwMUVCMworOjEwMDBBMDAwMDBENTQwMUUwMEQ2NDAxRTAwRDY4MDFFMDBENDgwMUUwMworOjEwMDBCMDAwMDBENEMwMUUwMDk3ODNEMzAwRDVDMDFFMDBDQTA4MDAxQworOjEwMDBDMDAwMDA4MDAwMUEwMENBMEMwMDAwRTQwMTFFMDBENDAwMUVDQgorOjEwMDBEMDAwMDA4MDAwMEMwMEM0MTgzODAwRTQwMTNFMDBENDAwMUU2QgorOjEwMDBFMDAwMDA4MDAwMEMwMEM0MTgzODAwRDQ0MDFFMDBFRTAwMUUzMgorOjEwMDBGMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxMUUwNAorOjEwMDEwMDAwMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDBGMQorOjEwMDExMDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTNFMDBENDAwMUU5RgorOjEwMDEyMDAwMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAyMworOjEwMDEzMDAwMDA3RTgyOEIwMENBMDgwMDAwQ0EwQzAwMDA4MDAxREIzMAorOjEwMDE0MDAwMDBENDgwMjQwMENBMDgwMDAwN0MwMEMwMDBDODE0MjUyOAorOjEwMDE1MDAwMDBDODE4MjQwMDdDOTQ4ODAwN0M5ODgwMDBDMjAwMDNBQQorOjEwMDE2MDAwMDBENDAwNzUwMDdDNzQ0QzAwODAwMDY0MDBENDQwMUVGNAorOjEwMDE3MDAwMDBDQTE4MDAwMEQ0NDAxRTAwRDU4MDFFMDA4MDAwNjIxNgorOjEwMDE4MDAwMDBENDAwNzUwMEQ0NDAxRTAwQ0EwODAwMDBDQTBDMDA0QworOjEwMDE5MDAwMDBDQTEwMDAwMEQ0ODAxOTAwRDRDMDE4MDBENTAwMTc4MAorOjEwMDFBMDAwMDBENDgwMUUwMEQ0QzAxRTAwRDUwMDFFMDBFMjAwMUUzOAorOjEwMDFCMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBENDAwNzVGRAorOjEwMDFDMDAwMDBENDQwMUUwMENBMDgwMDAwQ0EwQzAwMDBDQTEwMDA3QgorOjEwMDFEMDAwMDBENDgwMTkwMEQ0QzAxODAwRDUwMDE3MDBENDgwMUVBOAorOjEwMDFFMDAwMDBENEMwMUUwMEQ1MDAxRTAwRUUwMDFFMDBDQTA0MDA5MAorOjEwMDFGMDAwMDBBMDAwMDAwMDdFODI4QjAwQ0EwODAwMDAyNDhDMDE1MQorOjEwMDIwMDAwMDBENDgwNjAwMDk0QzAwMzAwMDQxMDAxMDAwNDEwMDJCOAorOjEwMDIxMDAwMDBENTAwMjUwMEQ0NDAxRTAwODAwMDAwMDBENDgwMUVDMAorOjEwMDIyMDAwMDBDQTA4MDAwMEQ0ODA2MTAwRDQ0MDFFMDA4MDAwMDA5NQorOjEwMDIzMDAwMDBENDgwMUUwMENBMDgwMDAwQ0EwQzAwMDBENDQwMUU3MgorOjEwMDI0MDAwMDBENDgwMTYwMEQ0QzAxNjAwRDQ4MDFFMDA4MDAxREJDQworOjEwMDI1MDAwMDBENEMwMUUwMEM2MDg0MzAwQ0EwQzAwMDBDQTEwMDAyQgorOjEwMDI2MDAwMDA5NDgwMDQwMENBMTQwMDAwRTQyMEYzMDBENDIwMTM5QQorOjEwMDI3MDAwMDBENTYwNjUwMEQ0RTAxQzAwRDUyMDFDMDBENTYwMUNCMgorOjEwMDI4MDAwMDA4MDAwMDAwMDA2MjAwMTAwQzYwODQzMDBDQTBDMDBFMAorOjEwMDI5MDAwMDBDQTEwMDAwMDk0ODNGNzAwQ0ExNDAwMDBFNDIwRjNBMQorOjEwMDJBMDAwMDA4MDAwOUMwMEQ0MjAxMzAwQzYwODQzMDBDQTBDMDA0NAorOjEwMDJCMDAwMDBDQTEwMDAwMDk4ODNFRjAwQ0ExNDAwMDBENDAwNjQ0NAorOjEwMDJDMDAwMDA4MDAwQjAwMDAwMDAwMDAwQzQxNDMyMDBDNjE4NDNEMworOjEwMDJEMDAwMDBDNDA4MkYwMDk1NDAwNTAwQzQwQzMwMDBENDQwMUUxNworOjEwMDJFMDAwMDA4MDAwMDAwMEVFMDAxRTAwOTU4M0Y1MDBDNDEwMzE3MAorOjEwMDJGMDAwMDBENDQwMzMwMEQ1MjA2NTAwRDRBMDFDMDBENEUwMUNGRAorOjEwMDMwMDAwMDBENTIwMUMwMEU0MDE1RTAwRDQwMDFFMDA4MDAwMDAyNworOjEwMDMxMDAwMDAwNjIwMDEwMENBMTgwMDAwMEEyMDAxMDBENjAwNzY1RAorOjEwMDMyMDAwMDBDNDA4MzYwMDk4ODAwNzAwQzYxMDQ1MDA5NTAxMTBFQgorOjEwMDMzMDAwMDBENDAwMUYwMEQ0NjA2MjAwODAwMDAwMDBENDIwNjI1RQorOjEwMDM0MDAwMDBDQzM4MzUwMENDMTQzMzAwODQwMURFMDBENDAwNzJCOAorOjEwMDM1MDAwMDBENTQwMUUwMDgwMDAwMDAwRUUwMDFFMDBFMjAwMUFFMgorOjEwMDM2MDAwMDA4NDAxREUwMEUyMDAxQTAwQ0MxMDRCMDBDQzA0NDdGMAorOjEwMDM3MDAwMDAyQzk0MDEwMDdEMDk4QjAwOTg0MDA1MDA3RDE1Q0I3MQorOjEwMDM4MDAwMDBENDAwMUEwMDgwMDFEQjAwRDQwMDZEMDAzNDQ0MDE2OQorOjEwMDM5MDAwMDBDQzBDNDgwMDk4NDAzQTAwQ0MyQzRBMDA5NTgwMDREMAorOjEwMDNBMDAwMDBDQzA0NDkwMDgwMDFEQjAwRDQwMDFBMDBENEMwMUEzQworOjEwMDNCMDAwMDAyODI4MDEwMDg0MDExMzAwQ0MxMDAzMDA5ODgwMUI0MgorOjEwMDNDMDAwMDAwNDM4MEMwMDg0MDExMzAwQ0MxMDAzMDA5ODgwMTczRgorOjEwMDNEMDAwMDAwNDM4MDgwMDg0MDExMzAwQ0MxMDAzMDA5ODgwMTMzNworOjEwMDNFMDAwMDAwNDM4MDQwMDg0MDExMzAwQ0MxMDAzMDA5ODgwMTQyQQorOjEwMDNGMDAwMDBDQzEwNEMwMDlBODAwOTAwQ0MxNDREMDA5ODQwRENEMQorOjEwMDQwMDAwMDBENDAwNkQwMENDMTg0ODAwRDUwMDFBMDBENTQwMUE2MQorOjEwMDQxMDAwMDA4MDAwRUMwMEQ1ODAxQTAwOTZDMEQ1MDBENDAwNkQ5NQorOjEwMDQyMDAwMDA4MDAxREIwMEQ0MDA2RTAwOUFDMDAzMDBENDAwNkQ5MAorOjEwMDQzMDAwMDBENDAwNkUwMDgwMDAwMDAwRUMwMDdGMDA5QUMwQ0M2OQorOjEwMDQ0MDAwMDBENDAwNkQwMDgwMDFEQjAwRDQwMDZFMDBDQzE0MDNFQQorOjEwMDQ1MDAwMDBDQzE4MDMwMENDMUMwMzAwN0Q5MTAzMDA3REQ1ODNFNAorOjEwMDQ2MDAwMDA3RDE5MEMwMDM1Q0MxRjAwMzU3MDFGMDA3Q0YwQ0JDRgorOjEwMDQ3MDAwMDA3Q0QwOEIwMDg4MDAwMDAwN0U4RThCMDA5NUMwMDQyRAorOjEwMDQ4MDAwMDBENDAwNkUwMDgwMDFEQjAwRDQwMDFBMDBENEMwMUEzMgorOjEwMDQ5MDAwMDBDQzA4MDMwMENDMEMwMzAwQ0MxMDAzMDBDQzE0MDNFOAorOjEwMDRBMDAwMDBDQzE4MDMwMENDMUMwMzAwQ0MyNDAzMDBDQzI4MDM5MAorOjEwMDRCMDAwMDAzNUM0MUYwMDM2QjAxRjAwN0M3MDRCMDAzNEYwMUZBNQorOjEwMDRDMDAwMDA3QzcwNEIwMDM1NzAxRjAwN0M3MDRCMDA3RDg4ODE3NAorOjEwMDREMDAwMDA3RENDQzEwMDdFNTEwMTAwN0U5NTQxMDA3QzkwODI2MAorOjEwMDRFMDAwMDA3Q0Q0QzIwMDdDODQ4QjAwOUFDMDAzMDA3QzhDOEI3RgorOjEwMDRGMDAwMDAyQzg4MDEwMDk4ODA5RTAwRDQwMDZEMDA5ODQwOUNEQworOjEwMDUwMDAwMDBENDAwNkUwMENDMDg0QzAwQ0MwQzREMDBDQzEwNDg0MAorOjEwMDUxMDAwMDBENDgwMUEwMEQ0QzAxQTAwODAwMTI0MDBENTAwMUEyQgorOjEwMDUyMDAwMDBDQzA4MzIwMEQ0MDAzMjAwOTQ4MkI2MDBDQTBDMDAxRAorOjEwMDUzMDAwMDBENDQwMUUwMDgwMDAwMDAwRDQwMDFFMDBFNDAxMUUxNAorOjEwMDU0MDAwMDBENDAwMUUwMENBMDgwMDAwQ0EwQzAwMDBDQTEwMDAzNworOjEwMDU1MDAwMDBENDQwMUUwMENBMTQwMDAwRDQ4MDFFMDBENEMwMUU2NworOjEwMDU2MDAwMDBENTAwMUUwMEQ1NDAxRTAwRDU0MDM0MDA4MDAwMDA5QworOjEwMDU3MDAwMDBFRTAwMUUwMDI4MDQwNDAwRTIwMDFBMDBFMjAwMUE0NworOjEwMDU4MDAwMDBENDQwMUEwMENBMzgwMDAwQ0MwODAzMDBDQzBDMDM4OQorOjEwMDU5MDAwMDBDQzBDMDMwMENDMEMwMzAwOTg4MjlBMDAwMDAwMDBGMQorOjEwMDVBMDAwMDA4NDAxREUwMEQ3QTA2RjAwODAwMDAwMDBFRTAwMUY3NQorOjEwMDVCMDAwMDBDQTA0MDAwMEMyRkYwMDAwQ0MwODM0MDBDMTNGRkZBNQorOjEwMDVDMDAwMDA3Qzc0Q0IwMDdDQzkwQjAwN0QwMTBGMDA5OTAyOEQ2QgorOjEwMDVEMDAwMDA3QzczOEIwMDg0MDFERTAwRDdBMDZGMDA4MDAwMDBEOAorOjEwMDVFMDAwMDBFRTAwMUYwMENBMDgwMDAwMjgxOTAwMDA3RDg5OEI1QQorOjEwMDVGMDAwMDA5NTgwMTQwMDI4MTQwNDAwQ0EwQzAwMDBDQTEwMDBFMgorOjEwMDYwMDAwMDBDQTFDMDAwMENBMjQwMDAwRTIwMDFGMDBENEMwMUE2NworOjEwMDYxMDAwMDBENTAwMUEwMEQ1NDAxQTAwQ0MxODAzMDBDQzJDMDNEQQorOjEwMDYyMDAwMDBDQzJDMDMwMENDMkMwMzAwN0RBNThCMDA3RDlDNDdDNworOjEwMDYzMDAwMDA5ODQyNzQwMDAwMDAwMDAwODAwMTg0MDBENEMwMUFCOQorOjEwMDY0MDAwMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAwMDBFRTAwMUU3QQorOjEwMDY1MDAwMDBFNDAxMUUwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUU2NworOjEwMDY2MDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxM0U2RQorOjEwMDY3MDAwMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDA3QworOjEwMDY4MDAwMDBBMDAwMDAwMDdFODI4QjAwQ0EwODAwMDAyNDhDMDZCNworOjEwMDY5MDAwMDAwQ0NDMDYwMDk4QzAwNjAwQ0MxMDRFMDA5OTAwMDQ1NworOjEwMDZBMDAwMDBENDAwNzMwMEU0MDExRTAwRDQwMDFFMDBENDQwMUVEQworOjEwMDZCMDAwMDBENDgwMUUwMDgwMDAwMDAwRUUwMDFFMDBDQTA4MDA2QQorOjEwMDZDMDAwMDBDQTBDMDAwMDM0RDAxODAwMjUxMDAxMDA5NTAwMjE0QworOjEwMDZEMDAwMDBDMTdGRkYwMENBMTAwMDAwQ0ExNDAwMDBDQTE4MDA0MQorOjEwMDZFMDAwMDBENDgwMUQwMEQ0QzAxRDAwN0RCMThCMDBDMTQyMDIyQQorOjEwMDZGMDAwMDBDMkMwMDEwMEQ1ODAxRDAwMzREQzBFMDA3RDVENENDMQorOjEwMDcwMDAwMDA3RjczNEMwMEQ3NDAxRTAwRDUwMDFFMDBENTQwMUU1MAorOjEwMDcxMDAwMDBDMTQyMDAwMEMyQzAwMDAwMDk5QzAxMDAzMURDMTA5MQorOjEwMDcyMDAwMDA3RjVGNEMwMDdGNzM0QzAwMDQyODAyMDA3RDgzODBCMworOjEwMDczMDAwMDBENUE4NkYwMEQ1ODA2NjAwRDc0MDFFMDBFQzAwNUU5MworOjEwMDc0MDAwMDBDODI0MDIwMEM4MjQwMjAwODAwMURCMDBENjAwNzYyNQorOjEwMDc1MDAwMDBENDQwMUUwMEQ0ODAxRTAwRDRDMDFFMDA4MDAwMDBDMworOjEwMDc2MDAwMDBFRTAwMUUwMDgwMDAwMDAwRUUwMDFGMDBENDAwMUZGRAorOjEwMDc3MDAwMDA4MDAwMDAwMEQ0MDAxRjAwRDQwMDFGMDA4ODAwMDA4QgorOjEwMDc4MDAwMDBENDAwMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwMDgwMDAwMDAwMTAxOTQwMDAyMDE5QjAwMDMwMEIyMDAwNDAwQTI1OQorOjEwMDgxMDAwMDAwNTAwMDMwMDA2MDAzRjAwMDcwMDMyMDAwODAxNEZGQQorOjEwMDgyMDAwMDAwOTAwNDYwMDBBMDAzNjAwMTAwMUQ5MDAxNzAwQzU3MworOjEwMDgzMDAwMDAyMjAxNUQwMDIzMDE2QzAwMjAwMEQ3MDAyNDAxNDg0NAorOjEwMDg0MDAwMDAyNjAwNEQwMDI3MDA1QzAwMjgwMDhEMDAyOTAwNTE4MworOjEwMDg1MDAwMDAyQTAwN0UwMDJCMDA2MTAwMkYwMDg4MDAzMjAwQUFEMQorOjEwMDg2MDAwMDAzNDAxQTIwMDM2MDA2RjAwM0MwMTc5MDAzRjAwOTU4MgorOjEwMDg3MDAwMDA0MTAxQUYwMDQ0MDE1MTAwNTUwMTk2MDA1NjAxOUQxMQorOjEwMDg4MDAwMDA2MDAwMEIwMDYxMDAzNDAwNjIwMDM4MDA2MzAwMzgzMworOjEwMDg5MDAwMDA2NDAwMzgwMDY1MDAzODAwNjYwMDM4MDA2NzAwMzhFMgorOjEwMDhBMDAwMDA2ODAwM0EwMDY5MDA0MTAwNkEwMDQ4MDA2QjAwNDg5NworOjEwMDhCMDAwMDA2QzAwNDgwMDZEMDA0ODAwNkUwMDQ4MDA2RjAwNDg2MgorOjEwMDhDMDAwMDA3MzAxRDkwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZDOQorOjEwMDhEMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMAorOjEwMDhFMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZGMAorOjEwMDhGMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZFMAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjYxMF9tZS5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjYxMF9tZS5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTE5ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNjEwX21lLmJpbi5paGV4CkBAIC0wLDAgKzEsMTM0NSBAQAorOjEwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMDAxMDAwMDBBMDAwMEEwMDAwMDAwMDAwMDBGRkZGMDAyODQ2MjFBOQorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBBRgorOjEwMDAzMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwMDA0MDAwMDBBMDAwMEEwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAyNgorOjEwMDA1MDAwMDAwMDAwMDAwMDAxMDAwMEMwMjk0NjIwMDAwMDAwMDA1MAorOjEwMDA2MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMDA3MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFGMgorOjEwMDA4MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3QQorOjEwMDA5MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIwMDRCRQorOjEwMDBBMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDAwMDA2MDAwMDBBOAorOjEwMDBCMDAwMDAwMDA2MzEwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDU1RQorOjEwMDBDMDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDBGMDAzOQorOjEwMDBEMDAwMDAyODE2MjIwMDAwMDAwMDAwMDAwMDA4MDAyMTE2MjU1QworOjEwMDBFMDAwMDAwMDAwMDAwMDAwMDAxODAwMjAzNjI1MDAwMDAwMDA3RAorOjEwMDBGMDAwOEQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDRGQQorOjEwMDEwMDAwMDAyRjAyMjUwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBBRAorOjEwMDExMDAwMDAwMDAwMTgwMDQxMjAwMDAwNDA0ODExMDAwMDAwMTlCNAorOjEwMDEyMDAwMDA0MjIwMDAwMDIwNDgxMTAwMDAwMDAwOEUwMDAwMDA2NgorOjEwMDEzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDI4MDAyMDRBMkQ4QgorOjEwMDE0MDAwMDAwMDAwMDA5MDAwMDAwMDAwMjA0NDExMDAwMDAwMDBBQQorOjEwMDE1MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMEMyNgorOjEwMDE2MDAwMDAyMTE2MjIwMDAwMDAwMDAwMDAwMDAzMDAyODE2MjVEMAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAxOTAwMjExQTIyMDAwMDAwMDAwOQorOjEwMDE4MDAwMDAwMDAwMDQwMDI4MUEyNjAwMDAwMDAwMDAwMDAwMDAwMworOjEwMDE5MDAwMDAyOTE0QzUwMDAwMDAwMDAwMDAwMDE5MDAyMDM2MjVDOQorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0ExNDAyMDAwMDAwMDBGRgorOjEwMDFCMDAwMDAwMDAwMTYwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDNDQQorOjEwMDFDMDAwMDAyODE2MjUwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ1QQorOjEwMDFEMDAwMDAwMDAwMDBGRkZGRkZGQzAwMjgwRTIzMDAwMDAwMDBDRAorOjEwMDFFMDAwMDAwMDAwMDAwMDI5MTRBMzAwMDAwMDAwMDAwMDAwMTcxOAorOjEwMDFGMDAwMDAyMDM2MjUwMDAwMDAwMDAwMDA4MDAwMDAyODBFMjJBQworOjEwMDIwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMjIwRTIzMDAwMDAwMDA5NAorOjEwMDIxMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwMjAwMDAwMDBFRgorOjEwMDIyMDAwMDAyODBFMjIwMDAwMDAwMDAwMDAwMDA2MDAyMTBFMjMxRQorOjEwMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDBFRgorOjEwMDI0MDAwMDAwMDAwMDAwMDIyMDIyMjAwMDAwMDAwMDAwMDAwMDA2OAorOjEwMDI1MDAwMTRFMDAwMDAwMDAwMDAzODAwMDAwMDAwMkVFMDAwMDA2NAorOjEwMDI2MDAwMDAwMDAwMzUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwMzcxNgorOjEwMDI3MDAwMDAwMDAwMDAwMDQwMEUyRDAwMDAwMDM5MDAwMDAwMDhDMgorOjEwMDI4MDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDA5MDA0MDEyMkQ4QgorOjEwMDI5MDAwMDAwMDAwNDYwMDAwMDAwMTAwNDAwRTJEMDAwMDAwMzk2MworOjEwMDJBMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMyOAorOjEwMDJCMDAwMDAyODEyMjMwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQ4NworOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMDAwMDAwMDBBRAorOjEwMDJEMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDNFMDAwMDAwMDhFNAorOjEwMDJFMDAwMDA0MDFDMTEwMDAwMDA0MTAwMDAwMDBEMDAyMDFFMkRFOAorOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjgxRTI3MDAwMDAwMDA4MgorOjEwMDMwMDAwMDAwMDAwMDMwMDIyMUUyNzAwMDAwMDAwN0ZDMDAwMDA0NAorOjEwMDMxMDAwMDAyODFBMjMwMDAwMDAwMDAwMDAwMDE0MDAyMTFBMjYwMworOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMzMxQTI2MDAwMDAwMDA1OQorOjEwMDMzMDAwMDAwMDAwMDgwMDIyMUEyNjAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDM0MDAwMDAyOTBDQzcwMDAwMDAwMDAwMDAwMDI3MDAyMDM2MjQxMAorOjEwMDM1MDAwMDAwMDAwMDAwMDAwN0YwMDAwMjgxMjIxMDAwMDAwMDBDMworOjEwMDM2MDAwMDAwMDE0MDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMDM3MDAwMENFMDAwMDAwMDAwMDA0QjAwMDAwMDAxMDAyOTBFMjNFQgorOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwRTAwMjAzNjIzMDAwMDAwMDBFNgorOjEwMDM5MDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGODAwMDAxMQorOjEwMDNBMDAwMDAyOTRBMjMwMDAwMDAwMDAwMDAwMDAwMDAzQTJDMDI0RgorOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIwRTJCMDAwMDAwMDBFMAorOjEwMDNDMDAwRkMwMDAwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMEZDOQorOjEwMDNEMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjNGMAorOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAyNzAwMjA0QTJEMDAwMDAwMDA0RgorOjEwMDNGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMjk1QgorOjEwMDQwMDAwMDAyMDBFMkQwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjNFOQorOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMDQyMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDE1MgorOjEwMDQzMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA4MworOjEwMDQ0MDAwMDAwMDAwNjEwMDAwMDAwMDJFRTAwMDAwMDAwMDAwNUZERQorOjEwMDQ1MDAwMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDVFMDAwMDAwMDAzMgorOjEwMDQ2MDAwMDA0MDBFMkQwMDAwMDA2MjAwMDAwMDAxMDA0MDBFMkQzMworOjEwMDQ3MDAwMDAwMDAwNjIwMDAwMDAwQTAwMjAwRTJEMDAwMDAwMDBCNQorOjEwMDQ4MDAwMDAwMDAwMEIwMDQwMTIyRDAwMDAwMDZBMDAwMDAwMDA3OAorOjEwMDQ5MDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMDAyODEyMjNEOQorOjEwMDRBMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0MDAwMDAwMDBGMgorOjEwMDRCMDAwN0ZDMDAwMDAwMDI4MTYyMzAwMDAwMDAwMDAwMDAwMTQ4OAorOjEwMDRDMDAwMDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAxMDAzMzE2MjU2MQorOjEwMDREMDAwMDAwMDAwMDA4MDAwMDAwMDAwMjgwRTIzMDAwMDAwMDA0MworOjEwMDRFMDAwMDAwMDAwMDAwMDI5MENBMzAwMDAwMDAwM0ZGRkZDMDBGQQorOjEwMDRGMDAwMDAyOTBFMjMwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMyMQorOjEwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwNkQ4QQorOjEwMDUxMDAwMDAwMDAxMDAwMDQwMUMxMTAwMDAwMDcwMDAwMDAwMERGMAorOjEwMDUyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMEYwMDAyODFFMjcwMworOjEwMDUzMDAwMDAwMDAwMDAwMDAwMDAwNDAwMjIxRTI3MDAwMDAwMDA1MAorOjEwMDU0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMERBOAorOjEwMDU1MDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGMEZGMDAyODFBMzBDMworOjEwMDU2MDAwMDAwMDAwMDAwMDAwQTAyODAwMjA0NDExMDAwMDAwMDA0RQorOjEwMDU3MDAwMDAwMDAwMDAwMDI5NDhFNjAwMDAwMDAwMDAwMEEwMTg2QworOjEwMDU4MDAwMDAyMDQ0MTEwMDAwMDAwMDNGRkZGRkZGMDAyODRBMjMyNQorOjEwMDU5MDAwMDAwMDAwMDAwMDAwQTAxMDAwMjA0NDExMDAwMDAwMDAzNgorOjEwMDVBMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMzBBRgorOjEwMDVCMDAwMDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAyMDAyOTE2MjU3MgorOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjI1MDAwMDAwMDA4MAorOjEwMDVEMDAwMDAwMDAwMjUwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMDVFMDAwMDAyRjAwQTMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA2RAorOjEwMDVGMDAwMDAwMDAwODMwMDAwMDAyNjAwMjAxNjJEMDAwMDAwMDBFRgorOjEwMDYwMDAwMDAwMDAwMDAwMDJGMDBBNDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMDYxMDAwMENDMDAwMDAwMDAwMDA4NDAwMDAwMDAwMDA0MDAwMDA0QQorOjEwMDYyMDAwMDAwMDAwOEEwMDAwMDAyNTAwMjAzNjIzMDAwMDAwMDBBMgorOjEwMDYzMDAwMDAwMDAwMjYwMDIwMzYyNDAwMDAwMDAwMDAwMDAwMTcwMworOjEwMDY0MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjdGMworOjEwMDY1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwOEExQworOjEwMDY2MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjY4MDAwMDAwMDBCQworOjEwMDY3MDAwMDA2MDAwMDAwMDAwMDY1QzAwMDAwMDAyMDAyMTBFMjI2NQorOjEwMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOEQwOQorOjEwMDY5MDAwMDAwMDAwMTJDMDQwMzYyMDAwMDAwMDkzMDAwMDAwMDA1RgorOjEwMDZBMDAwMkVFMDAwMDAwMDAwMDA5MTAwMDAwMDAwMkNFMDAwMDA5RgorOjEwMDZCMDAwMDAwMDAwOTAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOTI5QgorOjEwMDZDMDAwMDAwMDAwMDMwMDQwMEUyRDAwMDAwMDkyMDAwMDAwMEMwRQorOjEwMDZEMDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDEyMDAyMDM2MjMzNAorOjEwMDZFMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwRTIyMDAwMDAwMDBCNgorOjEwMDZGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDk4MDAwMEEwMENFMgorOjEwMDcwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0QworOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwQTBGMQorOjEwMDcyMDAwMDAwMEEwMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBOAorOjEwMDczMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMkVFMDAwMDAzMgorOjEwMDc0MDAwMDAwMDAwOUUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwOUQ2MgorOjEwMDc1MDAwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMDM3QQorOjEwMDc2MDAwMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDBDMDAyMDBFMkQwOAorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwRQorOjEwMDc4MDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwMDAzRjAwMDBFMgorOjEwMDc5MDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDEwMDAyMTBFMjM5RQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAxMTAwMjAzNjIzMDAwMDAwMDBCRgorOjEwMDdCMDAwMDAwMDAwMUUwMDIxMDIyQjAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDdDMDAwMTRDMDAwMDAwMDAwMDBBNzAwMDAwMDE2QzAyMDM2MjA2MgorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjEwMjJCMDAwMDAwMDBBQworOjEwMDdFMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMEFBMDAwMDAwMTU3NgorOjEwMDdGMDAwQzAyMDM2MjAwMDAwMDAwMDAwMDAwMDA4MDAyMTBFMkI2MQorOjEwMDgwMDAwMDAwMDAwMDAwMDAwMDA3RjAwMjgwRTIzMDAwMDAwMDAxMAorOjEwMDgxMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMDgyMDAwMENFMDAwMDAwMDAwMDBFMTAwMDAwMDAwMjcwMDAwMDBENAorOjEwMDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTNCMworOjEwMDg0MDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDg1MDAwMEFFMDAwMDAwMDAwMDBCMzAwMDAwMDAwMDA2MDAwMDA5QgorOjEwMDg2MDAwMDAwMDAxM0E4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NworOjEwMDg3MDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMENFRAorOjEwMDg4MDAwMDAyMjFFMzAwMDAwMDAwMDk5ODAwMDAwMDAyMDQ0MTE2QQorOjEwMDg5MDAwMDAwMDAwMDAwMDAwMDAwNDAwMjAxMjJEMDAwMDAwMDBGNQorOjEwMDhBMDAwMDAwMDAwMDgwMDIyMTIyNDAwMDAwMDAwMDAwMDAwMTBEOAorOjEwMDhCMDAwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTFDRTRDNgorOjEwMDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODA3MDAwMDAxMkY0OQorOjEwMDhEMDAwOUIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwOAorOjEwMDhFMDAwMDAyMDQ4MDIwMDAwMDAwMDlDMDAwMDAwMDAyMDQ0MTE4RAorOjEwMDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMxNDZGMDAwMDAwMDA0MgorOjEwMDkwMDAwMDAwMDAwMDEwMDMzM0UyMzAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMDkxMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDNDMDU1NQorOjEwMDkyMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBEMQorOjEwMDkzMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMDk0MDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDA3MDAyMDQ0MTEwQgorOjEwMDk1MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjJCMDAwMDAwMDAzQQorOjEwMDk2MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMENCMDBGOEZGMDhFOQorOjEwMDk3MDAwMDAyMDQ4MTEwMDAwMDAwMDk4MDAwMDAwMDA0MDQ4MTFDRAorOjEwMDk4MDAwMDAwMDAwREMwMDAwMDBGMDAwMjgwRTIyMDAwMDAwMDA0MworOjEwMDk5MDAwMDAwMDAwQTAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA2MworOjEwMDlBMDAwMENDMDAwMDAwMDAwMDBEQTAwMDAwMDExMDAyMDBFMkQzNQorOjEwMDlCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDBFMgorOjEwMDlDMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEQ1MDAwMDAwMDI2NAorOjEwMDlEMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENworOjEwMDlFMDAwMDAwMDAwRDQwMDAwM0YwMDAwNDAwQzExMDAwMDAwRDZDMQorOjEwMDlGMDAwMDAwMDFGMDAwMDQwMEMxMTAwMDAwMEQ2MDAwMDBGMDA5NgorOjEwMEEwMDAwMDAyMDBDMTEwMDAwMDAwMDAwMzgwMDA5MDAyOTRBMjNEMgorOjEwMEExMDAwMDAwMDAwMDAzRjAwMDAwMDAwMjgwRTJCMDAwMDAwMDAzNgorOjEwMEEyMDAwMDAwMDAwMDIwMDIyMEUyMzAwMDAwMDAwMDAwMDAwMDc2QQorOjEwMEEzMDAwMDA0OTRBMjMwMDAwMDBEQzAwMzgwRjA5MDAyMDQ4MTE1QgorOjEwMEE0MDAwMDAwMDAwMDA2ODAwMDAwNzAwMjA0ODExMDAwMDAwMDBCRQorOjEwMEE1MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBGQworOjEwMEE2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQ2NAorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBGRAorOjEwMEE4MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEEyMDI0OQorOjEwMEE5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwRkYwMDAwMDAyODBFMjI4QQorOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjk0QTIzMDAwMDAwMDAzMAorOjEwMEFCMDAwMDAwMDAwMjcwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMjY4RQorOjEwMEFDMDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDAwMDAyRjAwODMxNQorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRUE0MAorOjEwMEFFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjYyMDAwMDAwMDAzRQorOjEwMEFGMDAwMDA0MDAwMDAwMDAwMDBFQjAwMDAwMDAwMDA2MDAwMDA2QgorOjEwMEIwMDAwMDAwMDA2NjUwMDAwMDAwNzAwMjAyMjJEMDAwMDAwMDAwNAorOjEwMEIxMDAwMDAwMDAwMDUwMDIyMEUyMjAwMDAwMDAwMDAxMDAwMDA2RQorOjEwMEIyMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTIwNjhCQgorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDA2RAorOjEwMEI0MDAwMDAwMDAwRUYwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMEI1MDAwMDAyOTIwNjgwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3MgorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwMjIzMDAwMDAwMDAzQworOjEwMEI3MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMEY4MDAwMDAwMEI3RQorOjEwMEI4MDAwMDAyMTAyMjgwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA0NgorOjEwMEI5MDAwMDAwMDAwRjgwMDAwMDQwMDAwMjkyMjI4MDAwMDAwMDBFNgorOjEwMEJBMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwMDAwMDAwMUM5NworOjEwMEJCMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAxMAorOjEwMEJDMDAwMDAwMDAwRkQwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwNAorOjEwMEJEMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMUU3RQorOjEwMEJFMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBFMAorOjEwMEJGMDAwMDAwMDAxMEIwMDAwQTMwRjAwMjA0NDExMDAwMDAwMDBDMgorOjEwMEMwMDAwMDAwMDAwMTEwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDE3NworOjEwMEMxMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBCNAorOjEwMEMyMDAwMDAwMDAxMDRGRkZGRkZGRjAwNDA0ODExMDAwMDAxMEIxRQorOjEwMEMzMDAwMDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMEM0MDAwMENDMDAwMDAwMDAwMDEwNzAwMDBGRkZGMDA0MDQ4MTEzOQorOjEwMEM1MDAwMDAwMDAxMEIwMDAwMDAwNDAwMkYwMjIzMDAwMDAwMDAzMAorOjEwMEM2MDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTBBMDAwMDAwRkZBRQorOjEwMEM3MDAwMDA0MDQ4MTEwMDAwMDEwQjAwMDAwMDAxMDAyMDQ4MTE1NQorOjEwMEM4MDAwMDAwMDAwMDAwMDAyQzQwMDAwMjA0NDExMDAwMDAwMDAyOQorOjEwMEM5MDAwMDAwMDAwMUYwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMENBMDAwMTRDMDAwMDAwMDAwMDExMjAwMDAwMDEwNDAyMTBFMjBCRQorOjEwMENCMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDBBOAorOjEwMENDMDAwMDAwMDAwMTg0MDIyNEEyMDAwMDAwMDAwMDAwMDAwMTAzMAorOjEwMENEMDAwQzA0MjRBMjAwMDAwMDExNDAwMDAwMDAwMDAyMDBDMTE1NgorOjEwMENFMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDA3OAorOjEwMENGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMEQwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBBMDAyMDEwMTExRgorOjEwMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDA3RQorOjEwMEQyMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTFCMDAwMDAwMDBCQgorOjEwMEQzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxMDA1MzEyMjRCMAorOjEwMEQ0MDAwMDAwMDAxMTdGRkJGRkZGRjAwMjgzQTJFMDAwMDAwMDAzRgorOjEwMEQ1MDAwMDAwMDAwMUIwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAzMworOjEwMEQ2MDAwMTRDMDAwMDAwMDAwMDEyRTgxMDAwMDAwMDAyMDQ0MTE4QQorOjEwMEQ3MDAwMDAwMDAwMDAwMDAwMDAwRDAwMjA0ODExMDAwMDAwMDBFRAorOjEwMEQ4MDAwMDAwMDAwMTgwMDIyMEUzMDAwMDAwMDAwRkMwMDAwMDBFRgorOjEwMEQ5MDAwMDAyODBFMjMwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwNAorOjEwMERBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDBCQworOjEwMERCMDAwMDAwMDAwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMEUwNQorOjEwMERDMDAwMDAyMDQ0MTEwMDAwMDAwMDA3RjhGRjA4MDAyMDQ4MTEyRgorOjEwMEREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0QTIzMDAwMDAwMDA3RAorOjEwMERFMDAwMDAwMDAwMUMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDg3NAorOjEwMERGMDAwMDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFFOAorOjEwMEUwMDAwMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0MDAwMDAwMDAzOQorOjEwMEUxMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMEUyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDBDOQorOjEwMEUzMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCQworOjEwMEU0MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0M4QgorOjEwMEU1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwODAwMDAwMDAyMDQ4MTEyNAorOjEwMEU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA2MDAwMDAwMDAxNAorOjEwMEU3MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBEOAorOjEwMEU4MDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGMDA2MDQ0MTFGMgorOjEwMEU5MDAwMDAwMDA2OEQwMDAwMDAxRjAwMjEwMjMwMDAwMDAwMDA0RAorOjEwMEVBMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjhDMDAwMDAwMDREOAorOjEwMEVCMDAwMDA0MDRDMTEwMDAwMDEzNTgxMDAwMDAwMDAyMDQ0MTE2OQorOjEwMEVDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBBOAorOjEwMEVEMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUM2OAorOjEwMEVFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTFCNgorOjEwMEVGMDAwMDAwMDA2OEQwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBGQgorOjEwMEYwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMTNDMDAwMDAwMDBCMAorOjEwMEYxMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGMQorOjEwMEYyMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMDAwMDAzMTUyOQorOjEwMEYzMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDA3QworOjEwMEY0MDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA2MDAwMDAxNQorOjEwMEY1MDAwMDAwMDAxNjAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDA5QworOjEwMEY2MDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY2MAorOjEwMEY3MDAwNDAyODA2MjAwMDAwMDAwMDAwMDAwMDEwQzAyMTBBMjBDOAorOjEwMEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQxNDYxMDAwMDAwMDBCOAorOjEwMEY5MDAwMDAwMDAwMDAwMDc0MTg4MjAwMDAwMkJCMDAwMUExRkRFNworOjEwMEZBMDAwMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMDAyRjAyMkYwQworOjEwMEZCMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxNDcxRAorOjEwMEZDMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDAxQworOjEwMEZEMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEzMQorOjEwMEZFMDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDBCNAorOjEwMEZGMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDNGRkY4NworOjEwMTAwMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA5NAorOjEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxNjAwRgorOjEwMTAyMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwMDAwMEZGRkYyMworOjEwMTAzMDAwQzAyODEyMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTE2MjBFRgorOjEwMTA0MDAwMDAwMDAwMDAwMDAwRkZGRkMwNjgxQTIwMDAwMDAyQkI4MworOjEwMTA1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYxQworOjEwMTA2MDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA1NAorOjEwMTA3MDAwMDAwMDAxNTgwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDExMgorOjEwMTA4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE2QworOjEwMTA5MDAwMDAzMDBBMkYwMDAwMDAwMDAwMDAwMDAxMDAyMTBBMjI5OQorOjEwMTBBMDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDA5OQorOjEwMTBCMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEyOQorOjEwMTBDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE5NQorOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExMDAwMDAwMDAzNgorOjEwMTBFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDA5NQorOjEwMTBGMDAwMDA2MDAwMDAwMDAwMDE4RjAwMDAwMDAwMDA2MDAwMDBBMAorOjEwMTEwMDAwMDAwMDAxQTAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDBBMAorOjEwMTExMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMTEyMDAwMDAyMDJDMDgwMDAwMDAwMDAwMDAwMDAwMDAyMDI0MTExNgorOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyODExMDAwMDAwMDA1NgorOjEwMTE0MDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTY5QworOjEwMTE1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEyMworOjEwMTE2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDAwMworOjEwMTE3MDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDJFNQorOjEwMTE4MDAwMDAyMjFFMjkwMDAwMDAwMDAwMDAwMDAwMDA3MDQ4RUI1MworOjEwMTE5MDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQkI5NQorOjEwMTFBMDAwMDAwMDAwMDE0MDMzMDYyMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMTFCMDAwQzAzMDI0MDkwMDAwMDAwMDAwMDAzRkZGMDAyRjAyMkY3NAorOjEwMTFDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAzMworOjEwMTFEMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMDAwMDAwMDAwQQorOjEwMTFFMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBDMworOjEwMTFGMDAwMDAwMDAxODEwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0FEMgorOjEwMTIwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMTg2OTUwMDAwMDA4MgorOjEwMTIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwNworOjEwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxODY0QgorOjEwMTIzMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDE4NQorOjEwMTI0MDAwMDA1MzA2MjEwMDAwMDE4MjkyMDAwMDAwMDAyMDQ0MTE5QQorOjEwMTI1MDAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwMDAwMDAxOTc4RQorOjEwMTI2MDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTE1OQorOjEwMTI3MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMDAwMDA3ODA0MkE3NQorOjEwMTI4MDAwMDAwMDAyRkIwMDAwMDAwMDAwMjAyODA5MDAwMDAwMDAxMAorOjEwMTI5MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMTJBMDAwMENDMDAwMDAwMDAwMDE3NDAwMDAwMDAwQzA0MDA0MDBGOQorOjEwMTJCMDAwMDAwMDAwMDEwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTU4RQorOjEwMTJDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMTJEMDAwMENFMDAwMDAwMDAwMDE5NDAwMDAwMDE1QzAyMDM2MjA0MgorOjEwMTJFMDAwMDAwMDAwMDAwMDAwMDAxNkMwMjAzNjIwMDAwMDAwMDBCMgorOjEwMTJGMDAwM0Y4MDAwMDAwMDIwMDQxMTAwMDAwMDAwNDYwMDAwMDBCNAorOjEwMTMwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA4MDAwMDAzMQorOjEwMTMxMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDBCQgorOjEwMTMyMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMTMzMDAwMENDMDAwMDAwMDAwMDE5QjAwMDAwMDAxMDA4MDQ4MTE2QgorOjEwMTM0MDAwMDAwMDAwMDAwMDAwMDAyMTAwODA0ODExMDAwMDAwMDBBMworOjEwMTM1MDAwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBFOQorOjEwMTM2MDAwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNDAyODE2MjBDRQorOjEwMTM3MDAwMDAwMDAwMDAwMDAwMDAxMEMwODExQTIwMDAwMDAwMDBFMgorOjEwMTM4MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDY2MQorOjEwMTM5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA4MDAyMjFFMzA1QworOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDAyOTAwMjAxQTJEMDAwMDAwMDBBRAorOjEwMTNCMDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGQkZGMDlENgorOjEwMTNDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBGMDAyMDIyMkQyNgorOjEwMTNEMDAwMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTI4MDAwMDAwMDA1NAorOjEwMTNFMDAwMDAwMDAwMDYwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMTNGMDAwMDAyOTIwRTgwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDg0QworOjEwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMTQxMDAwMDYwQTAyMDAwMDI5NEEyNjAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMTQyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFDQQorOjEwMTQzMDAwMDAwMDAwMDAwMDAwMDEwMDAwMjAxODExMDAwMDAwMDA2MgorOjEwMTQ0MDAwMDAwMDAwMDgwMDYyMUUyODAwMDAwMTJGMDAwMDAwMDhCNAorOjEwMTQ1MDAwMDA4MjIyMjgwMDAwMDAwMDAwMDJDMDAwMDAyMDQ0MTE4OQorOjEwMTQ2MDAwMDAwMDAwMDAwMDAwMDAxNTAwNjAwRTJEMDAwMDAxQkQwRQorOjEwMTQ3MDAwMDAwMDAwMTYwMDYwMEUyRDAwMDAwMUJEMDAwMEMwMDgzNQorOjEwMTQ4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3NQorOjEwMTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAxQjlCRQorOjEwMTRBMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwNworOjEwMTRCMDAwMDAyMDQ4MDEwMDAwMDAwMDM5MDAwMDAwMDAyMDQ4MTExMQorOjEwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBBMworOjEwMTREMDAwMDAwMDAwMDAwMDgwNDgwMjAwMDAwMDAwMDAwMDAwMTgyQQorOjEwMTRFMDAwMDAyMDJFMkQwMDAwMDAwMDAwMDAwMDAwMDAzQjBENjNENgorOjEwMTRGMDAwMDAwMDAwMDAwMDAwMDAwODAwMjI0QTIzMDAwMDAwMDA1NQorOjEwMTUwMDAwMDAwMDAwMTAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMTgyNAorOjEwMTUxMDAwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MDM3MQorOjEwMTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEI1MAorOjEwMTUzMDAwMDAwMDEwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDAwRQorOjEwMTU0MDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTFFRAorOjEwMTU1MDAwMDAwMDAxQjIwMDAwMDAwNzAwMjEwNjJGMDAwMDAwMDA3QgorOjEwMTU2MDAwMDAwMDAwMTMwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDExMAorOjEwMTU3MDAwMDAyMDJDMTEwMDAwMDAwMDAwMDBGRkZGNDAyODIyMjA2NgorOjEwMTU4MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjYyMjI4MDAwMDAwMDBEQworOjEwMTU5MDAwMDAwMDAwMTA0MDIxMjYyMDAwMDAwMDAwMDAwMDAwMEY4NQorOjEwMTVBMDAwMDAyNjI2MjkwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDI3QworOjEwMTVCMDAwMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAzRQorOjEwMTVDMDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA4NworOjEwMTVEMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBDRAorOjEwMTVFMDAwMDAwMDAxRTAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAyNworOjEwMTVGMDAwMDAwMDAwODEwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkM1NAorOjEwMTYwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFQgorOjEwMTYxMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjAxQzExMDAwMDAwMDBGRAorOjEwMTYyMDAwMDAwMDAwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDA2MgorOjEwMTYzMDAwMENFMDAwMDAwMDAwMDFEQzAwMDAwMDAwMDA2MDAwMDA4MQorOjEwMTY0MDAwMDAwMDAxRTkwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRDgzRQorOjEwMTY1MDAwMDAwMDAwMDEwMDIwMkMxMTAwMDAwMDAwMDAwMDAwMUYwRAorOjEwMTY2MDAwMDAyODBBMjIwMDAwMDAwMDAwMDAwMDFGMDAyODJBMkE4QgorOjEwMTY3MDAwMDAwMDAwMDAwMDAwMDAwMTAwNTMwNjIxMDAwMDAxRDExRAorOjEwMTY4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDI2NQorOjEwMTY5MDAwMDAzMDRBMkYwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE4RgorOjEwMTZBMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDMAorOjEwMTZCMDAwMDAwMDAwMDEwMDMwMUUyRjAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTZDMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENgorOjEwMTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxRTlDMAorOjEwMTZFMDAwMDAwMDAwMDEwMDUzMUUyNzAwMDAwMUU1MDAwMEZGRkY3RAorOjEwMTZGMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDBGMDAyNjBFMjNFRQorOjEwMTcwMDAwMDAwMDAwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDBCNgorOjEwMTcxMDAwMDAwMDAwMEYwMDI2MTIyNDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMTcyMDAwMDAyMDE0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDE4MTFFQgorOjEwMTczMDAwMDAwMDAyQkIwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDBEOAorOjEwMTc0MDAwMDAwMDAwMDAwMDJGMDIyQjAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTc1MDAwMENFMDAwMDAwMDAwMDFGODAwMDAwMDEwMDAyMjE2MjgzNAorOjEwMTc2MDAwMDAwMDAwMDBGRkZGMDAwMDAwMjgxNjI1MDAwMDAwMDAxOAorOjEwMTc3MDAwMDAwMEZGRkYwMDI4MUEyOTAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMTc4MDAwMDAyOTQ4QzUwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MEFCMQorOjEwMTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyQzExMDAwMDAwMDBFQworOjEwMTdBMDAwMDAwMDAwMTAwMDIyMTYyMzAwMDAwMDAwRkZGRjAwMDBEMAorOjEwMTdCMDAwMDAyODE2MjUwMDAwMDAwMDAwMDBGRkZGMDAyODFBMjQ2MgorOjEwMTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OEM1MDAwMDAwMDBFMworOjEwMTdEMDAwMDAwMDAwMDAwMDczMTUwMzAwMDAwMjA1MDAwMDAwMDA3NworOjEwMTdFMDAwMDAyMDE4MDUwMDAwMDAwMDAwMDAwMDAwMDA3MzE1MjQxMAorOjEwMTdGMDAwMDAwMDAyMDUwMDAwMDAwMDAwMkQxNEM1MDAwMDAwMDBEQworOjEwMTgwMDAwMDAwMDAwMDAwMDMwMDhBMjAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMTgxMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDIxNAorOjEwMTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyMDAzMDAwMDAwMDA3NQorOjEwMTgzMDAwMDAwMDAwMDAwMDgwMjQwNDAwMDAwMDAwMDAwMDAwMEZGMQorOjEwMTg0MDAwMDAyMTAyMjUwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA3QworOjEwMTg1MDAwMDAwMDA2OEMwMDAwMDAwMDAwMkIxNDA1MDAwMDAwMDBCMgorOjEwMTg2MDAwMDAwMDAwMDEwMDkwMTYyNTAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTg3MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTE4OAorOjEwMTg4MDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwQgorOjEwMTg5MDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDIyNTZBNAorOjEwMThBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMDAyOTRBMjIxNAorOjEwMThCMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA0OAorOjEwMThDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA3QQorOjEwMThEMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAzOAorOjEwMThFMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwNQorOjEwMThGMDAwMDAwMDAwMDMwMDM4NEEyMTAwMDAwMDAwMDAwMEExRkNBNQorOjEwMTkwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFOAorOjEwMTkxMDAwMDAwMDAwMDAwMDAwRkZGRjQwMjgxMjIwMDAwMDAwMDAyRgorOjEwMTkyMDAwMDAwMDAwMTBDMDIxMUEyMDAwMDAwMDAwMDAwMEZGRkY4RQorOjEwMTkzMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwQzAyMTE2MjBFQQorOjEwMTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQxNDY1MDAwMDAyQkJFRAorOjEwMTk1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDAwMDE1MAorOjEwMTk2MDAwMDAzMzA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjFDQgorOjEwMTk3MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAyMTk4MAorOjEwMTk4MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMTk5MDAwMENDMDAwMDAwMDAwMDIxMjAwMDAwMDAwQzA0MDA0MDA2MworOjEwMTlBMDAwMDAwMDAwMDEwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDU4QgorOjEwMTlCMDAwMDAwMDAwMDAwMDQwMDQwRjAwMDAwMjEzMDAwMDAwMDBCRgorOjEwMTlDMDAwMDA2MDAwMDAwMDAwMDYzMTAwMDAwMDAwMDA2MDAwMDAyMAorOjEwMTlEMDAwMDAwMDA2NDUwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTUxRAorOjEwMTlFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUEwMDAwMDAwMDBGNgorOjEwMTlGMDAwMDA2MDAwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDA4QQorOjEwMUEwMDAwMDAwMDAyQkIwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMxNAorOjEwMUExMDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMUEyMDAwMDAyMDQ4MDgwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkZFNgorOjEwMUEzMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyMzI4OAorOjEwMUE0MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBMDAwMDAwMDBGQgorOjEwMUE1MDAwMDA0MDAwMDAwMDAwMDIzNjk1MDAwMDAwMDAyMDQ0MTEwNAorOjEwMUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGMDAwMDAwMDAxNgorOjEwMUE3MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMjM2MDAwMDAwMDA0MgorOjEwMUE4MDAwQzA0MDQ4MDAwMDAwMDIzMzkyMDAwMDAwMDAyMDQ0MTFEMgorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxRQorOjEwMUFBMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYzMworOjEwMUFCMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFCQQorOjEwMUFDMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDA5QQorOjEwMUFEMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFGMworOjEwMUFFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTE2OQorOjEwMUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwNDExMDAwMDAyRkI3NAorOjEwMUIwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDBEMAorOjEwMUIxMDAwMDA2MDAwMDAwMDAwMDYzMTAwMDBBMDBDMDAyMDQ0MTEwRAorOjEwMUIyMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA4RAorOjEwMUIzMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMUI0MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDE4NDAyMTBBMjA4NworOjEwMUI1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMkYwMjIyMDAwMDAwMDAyRgorOjEwMUI2MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjRDMDAwMDAwMTQyOQorOjEwMUI3MDAwMDAyMDIyMkQwMDAwMDAwMDAwMDgwMTAxMDAyOTIyMjg3OQorOjEwMUI4MDAwMDAwMDAwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDBDMworOjEwMUI5MDAwMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMUJBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFNQorOjEwMUJCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAyNTE4QQorOjEwMUJDMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTA5QQorOjEwMUJEMDAwMDA2MDA0MTEwMDAwMDMxNTNGODAwMDAwMDAyMDA0MTE4NAorOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjJDOQorOjEwMUJGMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNFRgorOjEwMUMwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGQgorOjEwMUMxMDAwMDAwMDAyN0MwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBDNAorOjEwMUMyMDAwMDAwMDAwMDEwMDIxMUUyNzAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMUMzMDAwMTRFMDAwMDAwMDAwMDI2QTAwMDAwMDEyMDAyMDFFMkRDNworOjEwMUM0MDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgxRTI3MDAwMDAwMDAyOQorOjEwMUM1MDAwMDAwMDAwMDAwMDM0MUMyNzAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMUM2MDAwMTJDMDAwMDAwMDAwMDI1RjAwMDAwMDAwMDAyMDFDMTFGNAorOjEwMUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU1MDAwMDAwMDA1MAorOjEwMUM4MDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjYyMDAwMDAwMDAyOAorOjEwMUM5MDAwMDAyMDE0MDcwMDAwMDAwMDAwMDAwMDEyMDAyMDFFMkQ4QworOjEwMUNBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjExRTI3MDAwMDAwMDBCRQorOjEwMUNCMDAwMDAwMDAwMDAwMDM0MUM0NzAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMUNDMDAwMTJDMDAwMDAwMDAwMDI2NzAwMDAwMDAwMDAyMDFDMTE4QworOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDBFRgorOjEwMUNFMDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjZBMDAwMDAwMDBDMAorOjEwMUNGMDAwMDAyMDE4MDcwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDA0NQorOjEwMUQwMDAwMDAwMDAyQzEwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAyMworOjEwMUQxMDAwMDAwMDAwMDAwMDM0MjAyMzAwMDAwMDAwMDAwMDAwMDA0QworOjEwMUQyMDAwMTJDMDAwMDAwMDAwMDI3MjAwMDAwMDAwMDAzNDIwNDRENQorOjEwMUQzMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzE1RQorOjEwMUQ0MDAwMDAwMDAwMTYwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTg1NAorOjEwMUQ1MDAwMDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDAwMDAzNDIwNDREQQorOjEwMUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzUyQQorOjEwMUQ3MDAwMDAwMDAwMTcwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTkyMgorOjEwMUQ4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFDOAorOjEwMUQ5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDOQorOjEwMURBMDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkU5MDAwMDNGRkZCNgorOjEwMURCMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBGNworOjEwMURDMDAwMDAwMDAyNTYwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDFCNgorOjEwMUREMDAwMDAwMDAwMTA0MDIxMDYyMDAwMDAwMDAwMDAwMEZGRkY2RQorOjEwMURFMDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjA0MgorOjEwMURGMDAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwMDAwMDAwMDBDQgorOjEwMUUwMDAwMDAwMDAwMTA0MDIxMTYyMDAwMDAwMDAwMDAwMEZGRkYyRAorOjEwMUUxMDAwQzA4ODFBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTE0QQorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAzOAorOjEwMUUzMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMDAzMgorOjEwMUU0MDAwMDA2MDAwMDAwMDAwMDYzMTAwMDAwMDAwQzA2MDAwMDBEQgorOjEwMUU1MDAwMDAwMDAyQTMwMDAwMDAwNTAwMjAwQTJEMDAwMDAwMDA4MQorOjEwMUU2MDAwMDAwMDAwMDgwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMkJGMQorOjEwMUU3MDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDFDMDAyMDFFMkQ3NAorOjEwMUU4MDAwMDAwMDAwMDAwMDAwNzAwMDAwMjgxRTI3MDAwMDAwMDA3NQorOjEwMUU5MDAwMDAwMDAwMDAwMDMxMUNFNjAwMDAwMDAwMDAwMDAwMkFFNQorOjEwMUVBMDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDBDMDAyMjFBMjY1RAorOjEwMUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDAwRAorOjEwMUVDMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwMjkyMDAwMDAwMDA5OAorOjEwMUVEMDAwMDAyMDFDMTEwMDAwMDAwMDAwMDAwMDAwMDAyMDBDMTE3OAorOjEwMUVFMDAwMDAwMDAwMDAwMDAwMDAyQjAwMjAzNjIzMDAwMDAwMDA0RQorOjEwMUVGMDAwMDAwMDAwMTAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMUYwMDAwMDA2OTFDRTIwMDAwMDEyRjkzODAwMDAwMDAyMDQ0MTFCMgorOjEwMUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA1MgorOjEwMUYyMDAwOTUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBNworOjEwMUYzMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA1NQorOjEwMUY0MDAwMDAwMDAyOUQwMDAwMDAwMTAwMzMzRTJGMDAwMDAwMDA1MQorOjEwMUY1MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwOTIwMDAwMDBDRQorOjEwMUY2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBENAorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAxQzAwNDAzNjI3MDAwMDAwMDBBOAorOjEwMUY4MDAwMDAwMDAwMENDMDIyMEEyMDAwMDAwMDAwMDAwMDAwMjkxMAorOjEwMUY5MDAwMDAyMDM2MjIwMDAwMDAwMDAwMDAwMDI4QzA0MDM2MjA0QgorOjEwMUZBMDAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDA3NgorOjEwMUZCMDAwMDAwMDAwMDkwMDIwNDgxMTAwMDAwMDAwQTEwMDAwMDBGRQorOjEwMUZDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTFDMgorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDA3NQorOjEwMUZFMDAwMDAwMDAwMDAwMDJDMUNFMzAwMDAwMDAwMDAwMDAwMjFBNQorOjEwMUZGMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIyMDAyMDFFMkRENworOjEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMxQ0U0MDAwMDAwMDBBNAorOjEwMjAxMDAwMDAwMDAwMjIwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjNGRQorOjEwMjAyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQTM1MQorOjEwMjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDA0RgorOjEwMjA0MDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjRDQworOjEwMjA1MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMAorOjEwMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDAxRgorOjEwMjA3MDAwMDAwMDAwMjQwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMjEzRQorOjEwMjA4MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDIyMDAyMDM2MjQzQgorOjEwMjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzMDAwMDAwMDA1MAorOjEwMjBBMDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMjBCMDAwMDAzMTFDQzQwMDAwMDAwMDAwMDAwMDI0MDA4MDM2MjcwRQorOjEwMjBDMDAwMDAwMDAwMDAwMDAwMDAxQTAwMjAzNjI3MDAwMDAwMDA3OQorOjEwMjBEMDAwMDAwMDAwMUIwMDIwMzYyODAwMDAwMDAwMDAwMDAwMTc1MAorOjEwMjBFMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjczOQorOjEwMjBGMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAyREMyRQorOjEwMjEwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkQ5MDAwMDAwMUE5QQorOjEwMjExMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDFCMDAyMDM2MjhBOQorOjEwMjEyMDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDAyRAorOjEwMjEzMDAwMDAwMDAwMDIwMDIxMDIyNzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMjE0MDAwMTRFMDAwMDAwMDAwMDJEOTAwMDAwMDAzMDAyMTAyMjc3MworOjEwMjE1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAyRENBRAorOjEwMjE2MDAwMDAwMDAwMjMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMjE3MDAwMDAyRTAwRTEwMDAwMDAwMDAwMDAwMDAwMDJDMDAwMDA4RQorOjEwMjE4MDAwMDAwMDAyREMwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDBFNQorOjEwMjE5MDAwMDAwMDAwMDAwMDMxMjBBMTAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjFBMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwMDZDMDAwMDA1MworOjEwMjFCMDAwMDAwMDAyREMwMDAwMDAyNDAwMjAxRTJEMDAwMDAwMDBCMgorOjEwMjFDMDAwMDAwMDAwMDAwMDJFMDBFMjAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjFEMDAwMDJDMDAwMDAwMDAwMDJEQzAwMDAwMDIyMDAyMDFFMkREMgorOjEwMjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDBEQworOjEwMjFGMDAwMDAwMDAwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMjIwMDAwMDZDMDAwMDAwMDAwMDJEQzAwMDAwMDAwMDA2MDAwMDBDQQorOjEwMjIxMDAwMDAwMDA2NjgwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQjUzOQorOjEwMjIyMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMDA4RQorOjEwMjIzMDAwMDA2MDAwMDAwMDAwMDJCNTAwMDAwMDAwMDA2MDAwMDAyNworOjEwMjI0MDAwMDAwMDA2NUYwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUwOQorOjEwMjI1MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkE3MDAwMDAwMDA3NQorOjEwMjI2MDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDFBMDAyMDFFMkRDOQorOjEwMjI3MDAwMDAwMDAwMDAwMDAwMDAxQjAwODAyMjJEMDAwMDAwMDA3NAorOjEwMjI4MDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDBEQgorOjEwMjI5MDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1NgorOjEwMjJBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDBCNworOjEwMjJCMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMTAxNgorOjEwMjJDMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQ5NgorOjEwMjJEMDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDA4RQorOjEwMjJFMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTAwNQorOjEwMjJGMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODc4MworOjEwMjMwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDA1QworOjEwMjMxMDAwMDAwMDAwMDAwMDI5NDg0NzAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMjMyMDAwMDAzMTFDQTMwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjc0NgorOjEwMjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDBBNQorOjEwMjM0MDAwMDAwMDAwMDAwMDMxMUNBMTAwMDAwMDAwMDAwMDAwMTA4RgorOjEwMjM1MDAwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4NDc1RQorOjEwMjM2MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDBGQQorOjEwMjM3MDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMDAwMEZGRkY0QQorOjEwMjM4MDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDc2MgorOjEwMjM5MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDBDQworOjEwMjNBMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwMDAwMEZGRkYxQworOjEwMjNCMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDdEMgorOjEwMjNDMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDA5QQorOjEwMjNEMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDEwNAorOjEwMjNFMDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMzA4QTJDMworOjEwMjNGMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDA2QgorOjEwMjQwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjQxMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1MworOjEwMjQyMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDAzNQorOjEwMjQzMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDFBMworOjEwMjQ0MDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMDA4QTI2NQorOjEwMjQ1MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDAwQQorOjEwMjQ2MDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDBGNworOjEwMjQ3MDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjM3MAorOjEwMjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAzNworOjEwMjQ5MDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDBDQworOjEwMjRBMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzODA4QzVBRQorOjEwMjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwODQxMDAwMDAwMDBBMworOjEwMjRDMDAwMDAwMDAwMDEwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjREMDAwMDAzMzA4QTIwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjJBRAorOjEwMjRFMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDA3NworOjEwMjRGMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTdFQworOjEwMjUwMDAwMDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA4OAorOjEwMjUxMDAwMDAwMDAzMThGRkZGRkZFRjAwMjgwNjIxMDAwMDAwMDA2NQorOjEwMjUyMDAwMDAwMDAwMTQwMDIwMjIyRDAwMDAwMDAwMDAwMEY4RTA1MAorOjEwMjUzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDFCMworOjEwMjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwODk0OTAxMDAwMDAwMDBCOAorOjEwMjU1MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMjU2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDA4MDQ4MTEwNworOjEwMjU3MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA3QgorOjEwMjU4MDAwOTcwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMjU5MDAwQzAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTEwMworOjEwMjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBCMgorOjEwMjVCMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyOAorOjEwMjVDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFEMQorOjEwMjVEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBEMworOjEwMjVFMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMjVGMDAwMDBBMDAwMEEwMDAwMDAwMDk3MDAwMDAwMDAyMDQ0MTEyNQorOjEwMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA1MQorOjEwMjYxMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjYyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEzRQorOjEwMjYzMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA3MgorOjEwMjY0MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3OAorOjEwMjY1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA2RQorOjEwMjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBDMAorOjEwMjY3MDAwOTcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjY4MDAwMDAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTFEMgorOjEwMjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBDMQorOjEwMjZBMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzNworOjEwMjZCMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFFMAorOjEwMjZDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBFMgorOjEwMjZEMDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMjZFMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBFNQorOjEwMjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDAzMAorOjEwMjcwMDAwMDAwMDIyNTcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNEOAorOjEwMjcxMDAwQzA0ODRBMjAwMDAwMDAwMDAwMDAyMjVEMDAyMDQ0MTE1MworOjEwMjcyMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDA2MQorOjEwMjczMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQ1MDAwMDAwMDBFRQorOjEwMjc0MDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFBRQorOjEwMjc1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDBEMgorOjEwMjc2MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjc3MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTExRAorOjEwMjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIyMDAwMDAwMDBGNgorOjEwMjc5MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjdBMDAwNDAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxNDAzMDRBMjBBNgorOjEwMjdCMDAwMDAwMDAwMDAwMDAwMDAwMkMwMzA0QTIwMDAwMDAwMDBCRAorOjEwMjdDMDAwMDAwMDAwMDEwMDUzMEEyMjAwMDAwMzRCMDAwMDAwM0ZGQworOjEwMjdEMDAwQzAyODBBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFGMQorOjEwMjdFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA2RgorOjEwMjdGMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTgzMworOjEwMjgwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTE3QworOjEwMjgxMDAwMDAwMDA2OEQwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBDMQorOjEwMjgyMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMzU0MDAwMDAwMTQ0OQorOjEwMjgzMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA3OQorOjEwMjg0MDAwMDAwMDAzNjQwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDA3QworOjEwMjg1MDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUEyQTQzOAorOjEwMjg2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDI0OQorOjEwMjg3MDAwMDAwMDAzNkUwMDAwMjEwMDAwMjA0NDExMDAwMDAwMDA1MQorOjEwMjg4MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMjg5MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFOAorOjEwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDBFMAorOjEwMjhCMDAwMDAwMDAwMDQwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMjhDMDAwMENDMDAwMDAwMDAwMDM2QTAwMDAyMDEwMDAyMDQ0MTEyQQorOjEwMjhEMDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDBGRgorOjEwMjhFMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQworOjEwMjhGMDAwMDA0MDQ4MDIwMDAwMDM1RjAwMDAwMDI4MDAyRjAyMjI3MQorOjEwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1QzAzNgorOjEwMjkxMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGQgorOjEwMjkyMDAwMDA0MDQ4MDIwMDAwMDM1RjAwMDAwMDJDMDAyMDM2MjYxMworOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDA0OTAwMjAxODExMDAwMDAwMDAwNQorOjEwMjk0MDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDFDRQorOjEwMjk1MDAwMDAzMzFBMjYwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjZBRAorOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNzAyOAorOjEwMjk3MDAwMDAwMDAwMkMwMDgwMUEyRDAwMDAwMDAwMDAwMDAwM0YyNQorOjEwMjk4MDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDE1MDAyRjAyMjJDRAorOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzODZDMgorOjEwMjlBMDAwMDAwMDAwMDYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjlCMDAwMENFMDAwMDAwMDAwMDNCMTAwMDAwMDE2MDAyRjAyMjIwRQorOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQjU2MworOjEwMjlEMDAwMDAwMDAwMjAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMjlFMDAwMENFMDAwMDAwMDAwMDM5QzAwMDAwMDBGMDAyRjAyMjJGQQorOjEwMjlGMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQTg0MAorOjEwMkEwMDAwMDAwMDAwMTAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA2MworOjEwMkExMDAwMENFMDAwMDAwMDAwMDNBODAwMDAwMDFFMDAyRjAyMjJBRQorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzOTAyNworOjEwMkEzMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBEQgorOjEwMkE0MDAwMDA0MDQ4MDIwMDAwMDAwMDA4MDAwMDAwMDAyOTBBMjI5RgorOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMzQwMjEwRTIwMDAwMDAwMDBFNAorOjEwMkE2MDAwMDAwMDAwMENDMDIxMTIyMDAwMDAwMDAwMDAwODAwMDAzRgorOjEwMkE3MDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDE0QzAyMjE2MjBDQworOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkxNEE0MDAwMDAwMDA2NQorOjEwMkE5MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkFBMDAwMDAyOTQ4QTIwMDAwMDAwMDAwMDBBMUZFMDAyMDQ0MTFGRgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAzMDAwMDAwMDA4QgorOjEwMkFDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwRgorOjEwMkFEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTFFRgorOjEwMkFFMDAwMDAwMDAwMDAwMDAwMDAxNjAwMjA0ODExMDAwMDAwMDA1NworOjEwMkFGMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMTU1QgorOjEwMkIwMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA3RQorOjEwMkIxMDAwMDAwMDAzOTIwMDAwMjEwRTAwMjA0NDExMDAwMDAwMDA3QworOjEwMkIyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMkIzMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTFCMgorOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDBGQgorOjEwMkI1MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE3RQorOjEwMkI2MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTE1RQorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAxNzAwMjA0ODExMDAwMDAwMDBDNQorOjEwMkI4MDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMDNEQworOjEwMkI5MDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDBFRQorOjEwMkJBMDAwMDAwMDAzOUUwMDAwMjEwODAwMjA0NDExMDAwMDAwMDBFNgorOjEwMkJCMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMkJDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTEyMgorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDA2QgorOjEwMkJFMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQQorOjEwMkJGMDAwMDAyMDQ4MDIwMDAwMDAwMDgwMDAwMDAwMDAyMDQ0MTE3NgorOjEwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA0QgorOjEwMkMxMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTBBRQorOjEwMkMyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTBGQgorOjEwMkMzMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzQUUwRgorOjEwMkM0MDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDIwMTAxNAorOjEwMkM1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwNgorOjEwMkM2MDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDBBOAorOjEwMkM3MDAwMDAwMDAwMDYwMDQwNDgxMTAwMDAwMDAwMDAwMDIwMTA4NQorOjEwMkM4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTFENgorOjEwMkM5MDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDA3OAorOjEwMkNBMDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzZFMDAwMDAwMDBFNAorOjEwMkNCMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA4MDBFQworOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAxOAorOjEwMkNEMDAwMDAwMDAwMUQwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMkNFMDAwMTRFMDAwMDAwMDAwMDNDRTgxMDAwMDAwMDAyMDQ0MTEyOQorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA1QQorOjEwMkQwMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTgxRAorOjEwMkQxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTE2NworOjEwMkQyMDAwMDAwMDA2OEQwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBBQworOjEwMkQzMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwM0MwMDAwMDIxMDBCQgorOjEwMkQ0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDJBNAorOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwOAorOjEwMkQ2MDAwQkFCRUNBRkUwMDIwNDgxMTAwMDAwMDAwQ0FGRUJBQkU2QQorOjEwMkQ3MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMDEwMDAyMDQ0MTEzNQorOjEwMkQ4MDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDA0QQorOjEwMkQ5MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDQ3NAorOjEwMkRBMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAyMTcwMDAyMDQ0MTE4NAorOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBBOQorOjEwMkRDMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwODEwMDAwMDAxNworOjEwMkREMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBBMDAyMDQ4MTFGQgorOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDBCMworOjEwMkRGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0QzOEMwMDAwMDA5RAorOjEwMkUwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTE3NAorOjEwMkUxMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCQworOjEwMkUyMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDNGRkZFQQorOjEwMkUzMDAwNDAyODBBMjAwMDAwMDAwMDgwMDAwMDAwNDAyODBFMjBFQQorOjEwMkU0MDAwMDAwMDAwMDA0MDAwMDAwMEMwMjgxMjIwMDAwMDAwMDAyOAorOjEwMkU1MDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjhEMDAwMDAwMDAwQQorOjEwMkU2MDAwMDAyMDE0MTAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjNDQQorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzRTFBMgorOjEwMkU4MDAwMDAwMDAwMDBDMDQwMTgwMDAwMDAwM0U0MDAwMDNGRkYwNQorOjEwMkU5MDAwQzAyODFBMjAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjYzNworOjEwMkVBMDAwMDAwMDA2OEQwMDAwMDAwMDAwMjAxODEwMDAwMDAwMDA0NworOjEwMkVCMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMkVDMDAwMENDMDAwMDAwMDAwMDNFNzAwMDAwMDAwQzA0MDFDMDAzMAorOjEwMkVEMDAwMDAwMDAzRUEwMDAwM0ZGRkMwMjgxRTIwMDAwMDAwMDBBMQorOjEwMkVFMDAwMDAwNDAwMDAwMDY5NDYyNzAwMDAwNjhEMDAwMDAwMDA3NQorOjEwMkVGMDAwMDAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ0MDIyMAorOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgyMEM1MDAwMDAwMDBCNAorOjEwMkYxMDAwMDAwMDAwMDAwMDQ5NDhFODAwMDAwMDAwQTU4MDAwMDAxMworOjEwMkYyMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDAyMDAwMDAyMDBDMTEwQgorOjEwMkYzMDAwMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDA0MTI0MworOjEwMkY0MDAwMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwMDAwMDAwMDAxQgorOjEwMkY1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNDAyMDQ4MDBBMQorOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAxRkMwMjEwMjIwMDAwMDAwMDAzRgorOjEwMkY3MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0Y3MDAwMDIwMTA1MworOjEwMkY4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTFEMworOjEwMkY5MDAwMDAwMDAwMDAwMDAwRkZGRkMwNDgxMjIwMDAwMDAzRkZGNworOjEwMkZBMDAwQTc4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEEwMDAyMQorOjEwMkZCMDAwMDAyMDBDMTEwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTE5QworOjEwMkZDMDAwMDAwMDA0MTIwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDA4NQorOjEwMkZEMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMkZFMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjBBMQorOjEwMkZGMDAwMDAwMDAwMDA4MzAwMDAwMDAwMjA0NDExMDAwMDAwMDBEOQorOjEwMzAwMDAwMDAwMDAwMDAwMDMwNDg4MzAwMDAwMDAwODQwMDAwMDA0MQorOjEwMzAxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAxMworOjEwMzAyMDAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwMDAwMDAwMDA4MworOjEwMzAzMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDEyMDAwMDAwMDA0MgorOjEwMzA0MDAwQzA0MDA0MDAwMDAwMDAwMUE5ODAwMDAwMDAyMDA4MTExOQorOjEwMzA1MDAwMDAwMDAwMDAwMDAwQzAwMDAwNDAwQzExMDAwMDAzRkE1NgorOjEwMzA2MDAwQUI4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEY4RTAyNAorOjEwMzA3MDAwMDA0MDBDMTEwMDAwMDNGQUFEODAwMDAwMDAyMDA4MTE5MAorOjEwMzA4MDAwMDAwMDAwMDAwMDAwRjg4MDAwNDAwQzExMDAwMDAzRkE2RQorOjEwMzA5MDAwQjM4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEYzRkNENQorOjEwMzBBMDAwMDA0MDBDMTEwMDAwMDNGQUFGODAwMDAwMDAyMDA4MTE1RQorOjEwMzBCMDAwMDAwMDAwMDAwMDAwRTAwMDAwNDAwQzExMDAwMDAzRkFENgorOjEwMzBDMDAwQjE4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEYwMDBBNgorOjEwMzBEMDAwMDA0MDBDMTEwMDAwMDNGQTgzMDAwMDAwMDAyMDQ0MTE5RQorOjEwMzBFMDAwMDAwMDAwMDAwMDAwMjE0ODAwMjA0ODExMDAwMDAwMDBGRQorOjEwMzBGMDAwODQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBENworOjEwMzEwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMUQwMDAwMDA3QQorOjEwMzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAyRgorOjEwMzEyMDAwMDExODIwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMzEzMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA4QQorOjEwMzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBENQorOjEwMzE1MDAwMDIxOEEwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMzE2MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA1QQorOjEwMzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBBNQorOjEwMzE4MDAwMDMxOEMwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMzE5MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAyQQorOjEwMzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA3NQorOjEwMzFCMDAwMDQxOEY4RTBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMzFDMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBGQQorOjEwMzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA0NQorOjEwMzFFMDAwMDUxOEY4ODBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMzFGMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBDQQorOjEwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDAxNAorOjEwMzIxMDAwMDYxOEUwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMzIyMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA5OQorOjEwMzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBFNAorOjEwMzI0MDAwMDcxOEYwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMzI1MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA2OQorOjEwMzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBCNAorOjEwMzI3MDAwMDgxOEYzRkNDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMzI4MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAzOQorOjEwMzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA4NAorOjEwMzJBMDAwMDAwMDAwMzAwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMzJCMDAwQzAyOTBDNDAwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjMzMAorOjEwMzJDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAxQQorOjEwMzJEMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwODYwMDAwMDBCRQorOjEwMzJFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDFFMAorOjEwMzJGMDAwMDAwMDAwMDA4NTAwMDAwMEMwMjA0NDExMDAwMDAwMDAxNAorOjEwMzMwMDAwMDAwMDAwMDAwMDQwNDgwMTAwMDAwMDAwMDAwMDIxN0M5NworOjEwMzMxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4NDAyMTAyMjA5RAorOjEwMzMyMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0NDU4MAorOjEwMzMzMDAwMDA4MDAwMDBDMDQ5NEEyMDAwMDAwNDQ2MDAwMDAwMDA1MAorOjEwMzM0MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAyRAorOjEwMzM1MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA0NQorOjEwMzM2MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE2NgorOjEwMzM3MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDA4MDBFQworOjEwMzM4MDAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDAyNgorOjEwMzM5MDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMUYyMgorOjEwMzNBMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBGNgorOjEwMzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0QzAyMDAwMDA0NEIzMAorOjEwMzNDMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMzNEMDAwQzAyMDEwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE0MDAwOQorOjEwMzNFMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxODAwMDAwMDAwMDBFNQorOjEwMzNGMDAwMDAwMDAwMDBDMDIwMUMwMDAwMDAwMDAwMDAwMDdGMDA1MgorOjEwMzQwMDAwMDAyODBBMjEwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjJEMQorOjEwMzQxMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NTk2MworOjEwMzQyMDAwMDAwMDAwMDBDMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwMzQzMDAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAyODBBMjMxMAorOjEwMzQ0MDAwMDAwMDAwMDAwMDAwMDAxMDAwMkYwMjIyMDAwMDAwMDAxOQorOjEwMzQ1MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNDYxODEwMDAwMDA5QQorOjEwMzQ2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE2RAorOjEwMzQ3MDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI0MDAwMDA2OERFMgorOjEwMzQ4MDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDY2ODEwMDAwMDAxMQorOjEwMzQ5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEzRQorOjEwMzRBMDAwMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDAxOQorOjEwMzRCMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwMzRDMDAwMDA2MDQ4MDUwMDAwMDY5MjAwMDAwMDAwMDAyODI0RjA3QgorOjEwMzREMDAwMDAwMDAwMDAwMDAwMDAwNzAwMjgwQTIzMDAwMDAwMDA5MAorOjEwMzRFMDAwMDAwMDAwMDEwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMzRGMDAwMEFFMDAwMDAwMDAwMDQ2RDAwMDAwMDAwMDAyRjAwQzk3OQorOjEwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RTAwMDAwMDAwMDA0ODY0RAorOjEwMzUxMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkzMDAwMDAwMDJEMgorOjEwMzUyMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDA1RQorOjEwMzUzMDAwMDAwMDA0NzIwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAxRAorOjEwMzU0MDAwMDAwMDAwMDAwMkUwMDAwMDAwMDAwNDg2MDAwMDAwMDAwRgorOjEwMzU1MDAwMDA0MDAwMDAwMDAwMDQ5MzAwMDAwMDAzMDAyRjAyMjIzRQorOjEwMzU2MDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NzdGNgorOjEwMzU3MDAwMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDA1MworOjEwMzU4MDAwMENFMDAwMDAwMDAwMDQ4NjAwMDAwMDAwMDA0MDAwMDA4NQorOjEwMzU5MDAwMDAwMDA0OTMwMDAwMDAwNDAwMkYwMjIyMDAwMDAwMDAzRAorOjEwMzVBMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDdDMDAwMDAwMDBCMQorOjEwMzVCMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAyOQorOjEwMzVDMDAwMDAwMDA0ODYwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OTM5QQorOjEwMzVEMDAwMDAwMDAwMDUwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA5MworOjEwMzVFMDAwMEFFMDAwMDAwMDAwMDQ4MTAwMDAwMDAwMDAyRjAwQzk3NAorOjEwMzVGMDAwMDAwMDAwMDAwMDAwMDAwMDA2RTAwMDAwMDAwMDA0ODY1QgorOjEwMzYwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkzMDAwMDAwMDZERAorOjEwMzYxMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDA2RAorOjEwMzYyMDAwMDAwMDA0ODYwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAxOAorOjEwMzYzMDAwMDAwMDAwMDAwOEUwMDAwMDAwMDAwNDg2MDAwMDAwMDAxOAorOjEwMzY0MDAwMDA0MDAwMDAwMDAwMDQ5MzAwMDA3RjAwMDAyODBBMjFEMQorOjEwMzY1MDAwMDAwMDAwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDBEMgorOjEwMzY2MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDg2OAorOjEwMzY3MDAwMDAyMTBBMjMwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAyOAorOjEwMzY4MDAwMDAwMDA0OTAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDBBNworOjEwMzY5MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMzZBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBDQQorOjEwMzZCMDAwMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDAzMQorOjEwMzZDMDAwMDAwMDAwMDBDMDIwNDQwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMzZEMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDBDMgorOjEwMzZFMDAwMDAwMDAwMDAwMDAwN0YwMDAwMjgwQTIxMDAwMDAwMDAwOAorOjEwMzZGMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAzMgorOjEwMzcwMDAwMEFFMDAwMDAwMDAwMDQ5OTAwMDAwMDAwQzAyMDAwMDA1MgorOjEwMzcxMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDBDOQorOjEwMzcyMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMzczMDAwMDA0MDRDMDgwMDAwMDQ1OTAwMDAwMDAwQzAyMDA4MDBCMAorOjEwMzc0MDAwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDBEQQorOjEwMzc1MDAwMDAwMDAwMTE0MDIxMTIyMDAwMDAwMDAwMDAwMDAwMTJCMworOjEwMzc2MDAwNDAyMTE2MjAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTFDMworOjEwMzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBERgorOjEwMzc4MDAwMDAwMDAwMDAwMDIxMDIyNTAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMzc5MDAwMTRFMDAwMDAwMDAwMDRBMzAwMDQwMDAwQzA0OTRBMjAxNworOjEwMzdBMDAwMDAwMDA0QTRGRkZCRkZGRkMwMjg0QTIwMDAwMDAwMDAyNworOjEwMzdCMDAwMDAwMDAwMDAwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDBDMworOjEwMzdDMDAwMTRFMDAwMDAwMDAwMDRCMDAwMDAwMDAwQzAyMDQ4MDAyOQorOjEwMzdEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBDMQorOjEwMzdFMDAwMDAwMDAwMDAwMDIxMDIyNDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMzdGMDAwMTRDMDAwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFGRgorOjEwMzgwMDAwMDAwMDAwMDAwMDAwMDAwQzAwMjA0ODExMDAwMDAwMDAzMworOjEwMzgxMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwMzgyMDAwMTRDMDAwMDAwMDAwMDRBQ0EwMDAwMDAwMDAyMDQ0MTFGRgorOjEwMzgzMDAwMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDBBRgorOjEwMzg0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDQ3RQorOjEwMzg1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZCMDAyMDQ0MTFFRQorOjEwMzg2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODEwMDAwMDAwMDAyMAorOjEwMzg3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDU0RAorOjEwMzg4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZDMDAyMDQ0MTFCRAorOjEwMzg5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODEwMDAwMDAwMDBGMAorOjEwMzhBMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBDMworOjEwMzhCMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDBEQworOjEwMzhDMDAwMDAwMDA0QUEwMDAwMDAwMEMwMjEwQTIwMDAwMDAwMDAzRgorOjEwMzhEMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNEMzODEwMDAwMDBDQworOjEwMzhFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFFQQorOjEwMzhGMDAwMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDBDNQorOjEwMzkwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwMzkxMDAwQzA2MDQ4MDAwMDAwMDY5MjAwMDAwMDAwMDA0MDAwMDA2NworOjEwMzkyMDAwMDAwMDA0Qzc4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBENgorOjEwMzkzMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDAwMDAwOQorOjEwMzk0MDAwQzAyOTQ2MjAwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDAwOAorOjEwMzk1MDAwMDAwMDA2OEQwMDAwMDAwMTAwMjEwMjIyMDAwMDAwMDA4RQorOjEwMzk2MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNENFMDAwMDIxNjkyNworOjEwMzk3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBBQQorOjEwMzk4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwRgorOjEwMzk5MDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwQ0FGRUJBQkU2RgorOjEwMzlBMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ0MDA1QQorOjEwMzlCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODEwMDAwMDAwMDBBRgorOjEwMzlDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMAorOjEwMzlEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTFFMAorOjEwMzlFMDAwMDAwMDAwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDA1MAorOjEwMzlGMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMDA2MQorOjEwM0EwMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA4RgorOjEwM0ExMDAwMDAwMDA0RDAwMDAwMjE4MDAwMjA0NDExMDAwMDAwMDBCQworOjEwM0EyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwM0EzMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA3RQorOjEwM0E0MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA5NgorOjEwM0E1MDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDMxQgorOjEwM0E2MDAwMDAzMzNFMkYwMDAwMDAwMDAwMDAwMDAxMDAyMTAyMjE3MQorOjEwM0E3MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDA1MDA0RAorOjEwM0E4MDAwMDAwMDAwMkMwMDIwMEEyRDAwMDAwMDAwMDAwNDAwMDBBRgorOjEwM0E5MDAwMThFMDBDMTEwMDAwMDRFRjAwMDAwMDAxMDAzMzNFMkY3RAorOjEwM0FBMDAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAxNworOjEwM0FCMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDA5QworOjEwM0FDMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIyNworOjEwM0FEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBCRQorOjEwM0FFMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDIxNjkyNAorOjEwM0FGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDJFNworOjEwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDA0QQorOjEwM0IxMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwMDAwMDAwMDA0MQorOjEwM0IyMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRDhDMDQ4MDA4RAorOjEwM0IzMDAwMDAwMDA0RTMwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDA5RgorOjEwM0I0MDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwQgorOjEwM0I1MDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjI5NgorOjEwM0I2MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAyRAorOjEwM0I3MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMkRGMAorOjEwM0I4MDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDAwMDAyOTBDODMxRQorOjEwM0I5MDAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAyNgorOjEwM0JBMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDBBQgorOjEwM0JCMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIzNgorOjEwM0JDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBDRAorOjEwM0JEMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMTFBQworOjEwM0JFMDAwMDAyMTAyMjQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBCQQorOjEwM0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0QUFENworOjEwM0MwMDAwMDAwMDAwMkNDMDIwMzYyMDAwMDAwMDAwMDAwMDAwMkQyNQorOjEwM0MxMDAwQzA0MDM2MjAwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMjFGQgorOjEwM0MyMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA1MDVCNgorOjEwM0MzMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAxOQorOjEwM0M0MDAwRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDA0MDA5NworOjEwM0M1MDAwMDAwMDAwMDFCNTAwMDAwMDAwMjA0NDExMDAwMDAwMDAzOQorOjEwM0M2MDAwMDAwMDIwMDAwMDIwNDgxMTAwMDAwMDAwQjYwMDAwMDAwNQorOjEwM0M3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBBMDAwMDAyMDQ4MTFCNgorOjEwM0M4MDAwMDAwMDAwMDBCNzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwOAorOjEwM0M5MDAwMDAwMEMwMDAwMDIwNDgxMTAwMDAwMDAwQjgwMDAwMDAzMworOjEwM0NBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGOEUwMDAyMDQ4MTE0RQorOjEwM0NCMDAwMDAwMDAwMDBCOTAwMDAwMDAwMjA0NDExMDAwMDAwMDBENgorOjEwM0NDMDAwMDAwMEY4ODAwMDIwNDgxMTAwMDAwMDAwQkEwMDAwMDA0OQorOjEwM0NEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBFMDAwMDAyMDQ4MTExNgorOjEwM0NFMDAwMDAwMDAwMDBCQjAwMDAwMDAwMjA0NDExMDAwMDAwMDBBNAorOjEwM0NGMDAwMDAwMEYwMDAwMDIwNDgxMTAwMDAwMDAwQkMwMDAwMDA5RgorOjEwM0QwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGM0ZDMDAyMDQ4MTFENgorOjEwM0QxMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBBRAorOjEwM0QyMDAwMDAwMDAwMDIwMDIwNDgxMTAwMDAwMDAwMDAwMDAwRkYxOQorOjEwM0QzMDAwMDAyODBFMzAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjNDOQorOjEwM0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1MTk4OQorOjEwM0Q1MDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwM0Q2MDAwMTRDMDAwMDAwMDAwMDUyRTAwMDAwMDAwMDAyMDBDMTEwRgorOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAxQzAwMjAzNjIzMDAwMDAwMDBBRQorOjEwM0Q4MDAwMDAwMDAwMkIwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjk2NgorOjEwM0Q5MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI4MDAyMDM2MjMwOQorOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAzNjIzMDAwMDAwMDA4MworOjEwM0RCMDAwMDAwMDAwMjUwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjYzRgorOjEwM0RDMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDE1MDAyMDM2MjNFQworOjEwM0REMDAwMDAwMDAwMDAwMDAwMDAxNjAwMjAzNjIzMDAwMDAwMDA1NAorOjEwM0RFMDAwRkZGRkUwMDAwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMjE5NworOjEwM0RGMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDIyMDAyMDM2MjNBRgorOjEwM0UwMDAwMDAwMDAwMDAwMDAwMUZGRjAwMjAwQzExMDAwMDAwMDA1NworOjEwM0UxMDAwMDAwMDAwMjMwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjRFMgorOjEwM0UyMDAwMDAyMDM2MjMwMDAwMDAwMEYxRkZGRkZGMDAyODNBMkU5QgorOjEwM0UzMDAwMDAwMDAwMDAwMDAwMDAxQUMwMjIwRTIwMDAwMDAwMDA1OAorOjEwM0U0MDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwODEwMDAwMDAyMgorOjEwM0U1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTE2RQorOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDAyQTQwMjAzNjIwMDAwMDAwMDA3MgorOjEwM0U3MDAwODcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0NgorOjEwM0U4MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUY0MDAyMDQ0MTEwMAorOjEwM0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBBQQorOjEwM0VBMDAwMDAwMDAwMDAwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMzBBNQorOjEwM0VCMDAwMDAyMDM2MjMwMDAwMDAwMDlEMDAwMDAwMDAyMDQ0MTE3NworOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAxRjQwMjE0QTIwMDAwMDAwMDAwOAorOjEwM0VEMDAwOTYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBENworOjEwM0VFMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDBDMDBCRQorOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxMDAwMDAwMDAwMDBEMgorOjEwM0YwMDAwMDAwMDAwMUYwMDIxMTYyNDAwMDAwMDAwMDAwMDAwMDAzNworOjEwM0YxMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDFEMDAyMDM2MjMzNworOjEwM0YyMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjgxRTIzMDAwMDAwMDAyNQorOjEwM0YzMDAwMDAwMDAwMDgwMDIyMjIyMzAwMDAwMDAwRkZGRkYwMDAyNAorOjEwM0Y0MDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTIwRThDRQorOjEwM0Y1MDAwMDAwMDAwMDAwMDAwMDAxRjAwMjAzNjI4MDAwMDAwMDBDNAorOjEwM0Y2MDAwMDAwMDAwMTgwMDIxMUUyMzAwMDAwMDAwMDAwMDAwMjBCNworOjEwM0Y3MDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAyMDAyMjE2MjQ2NgorOjEwM0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAxNEE4MDAwMDAwMDA0NQorOjEwM0Y5MDAwMDAwMDAwMUUwMDIwMzYyNTAwMDAwMDAwMDAwMDAwMDM4NQorOjEwM0ZBMDAwMDAyMTFBMjQwMDAwMDAwMDEwMDAwMDAwMDAyODFBMjYzQQorOjEwM0ZCMDAwMDAwMDAwMDBFRkZGRkZGRjAwMjgzQTJFMDAwMDAwMDA4NQorOjEwM0ZDMDAwMDAwMDAwMDAwMDQ5MzhDRTAwMDAwNjdCMDAwMDAwMDEyMAorOjEwM0ZEMDAwNDAyODBBMjAwMDAwMDAwMDAwMDAwMDA2NDAyODBFMjBCMworOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDMwMEMwMjgxMjIwMDAwMDAwMDBCNAorOjEwM0ZGMDAwMDAwMDAwMDgwMDIxMTIyNDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwNDAwMDAwQzAyMDE2MjAwMDAwMDAwMDAwMDAwMDAwQzAyMDFBMjA4MAorOjEwNDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMjIyMDAwMDAwMDA1QgorOjEwNDAyMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNTY2ODEwMDAwMDBEMAorOjEwNDAzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE5MQorOjEwNDA0MDAwMDAwMDAwMDAwMDAwMjI1ODAwMzAwQTI0MDAwMDAwMDA5OAorOjEwNDA1MDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjhEMDAwMDIxNjk2RQorOjEwNDA2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDU2RQorOjEwNDA3MDAwMDAwMDAwMDAwMDAyMDAwMDAwMjk0QTI2MDAwMDAwMDBBNQorOjEwNDA4MDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwQ0FGRUJBQkU3OAorOjEwNDA5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAyMDAyRjAyMjM1MQorOjEwNDBBMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NkVEMQorOjEwNDBCMDAwMDAwMDAwMDBDMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNDBDMDAwQzA0MDAwMDAwMDAwMDU3QzAwMDAwMDAyMDAyRjAyMjMxOQorOjEwNDBEMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NkVBMQorOjEwNDBFMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFEOQorOjEwNDBGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU4MDAzMDBBMjQ2RgorOjEwNDEwMDAwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2OEQ0NworOjEwNDExMDAwMDAwMDAwMDBDMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwNDEyMDAwQzA0MDAwMDAwMDAwMDU3QzAwMDAwMDAwMDAyRjAyMjNCQQorOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1NzIzQworOjEwNDE0MDAwMDAwMDAwMDBDMDIwMUMwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwNDE1MDAwQzA0MDAwMDAwMDAwMDU3QzAwMDAwMDA0MDAyRjAyMjM4NgorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1N0EwNAorOjEwNDE3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNDE4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTFCMworOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBGNworOjEwNDFBMDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwNjkyMDAwMDAwMDAwRgorOjEwNDFCMDAwMDA0MDFDMTAwMDAwMDU3QzAwMDAwMDAwQzAyMDAwMDAzMgorOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDAwMDBFRgorOjEwNDFEMDAwMDAwMDAwMDAwRUUwMDAwMDAwMDAwNTdFMDAwMDAwMDA2RQorOjEwNDFFMDAwMDA2MDAwMDAwMDAwMDVDOTAwMDAwMDAwMDAyRjAyMjQ0QworOjEwNDFGMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1OEY1RgorOjEwNDIwMDAwMDAwMEEyQjcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNDIxMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEzOQorOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAxNAorOjEwNDIzMDAwMDAwNEEyQjYwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMUFDMAorOjEwNDI0MDAwMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzA3RAorOjEwNDI1MDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OERFRQorOjEwNDI2MDAwMDAwMEEyQzQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3MworOjEwNDI3MDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDBGRAorOjEwNDI4MDAwMDAwMDA1OEQwMDAwQTJEMTAwMjA0NDExMDAwMDAwMDBCNAorOjEwNDI5MDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDExQgorOjEwNDJBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjhENgorOjEwNDJCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjI0MDAwMDAwMDBBOAorOjEwNDJDMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUEwMDAwMEEyQkIyMAorOjEwNDJEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDdGQQorOjEwNDJFMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBEOAorOjEwNDJGMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQkFFNAorOjEwNDMwMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFBMDAyMTIyMzBEOAorOjEwNDMxMDAwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDAxRgorOjEwNDMyMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMEEyQzVCNgorOjEwNDMzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTlBNworOjEwNDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1OUVFQQorOjEwNDM1MDAwMDAwMEEyRDIwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3NAorOjEwNDM2MDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQyMDAyMDQ0MTFENAorOjEwNDM3MDAwMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDA3QQorOjEwNDM4MDAwMDAwMDAwMDIwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBENgorOjEwNDM5MDAwMENDMDAwMDAwMDAwMDVCMTAwMDBBMkJGMDAyMDQ0MTFDNQorOjEwNDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA5RQorOjEwNDNCMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwNgorOjEwNDNDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkJFMDA2MDQ0MTE1QgorOjEwNDNEMDAwMDAwMDA2OEQwMDAwMDAxQTAwMjEyMjMwMDAwMDAwMDBCRAorOjEwNDNFMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwMDAwNDIwMDQyNworOjEwNDNGMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMkM2MDAyMDQ0MTE5OAorOjEwNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDA0QgorOjEwNDQxMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNUFGMDAwMEEyRDM5MworOjEwNDQyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDg4NworOjEwNDQzMDAwMDAwMDAwMDAwMDAwQTJEMzAwMjA0NDExMDAwMDAwMDA5MgorOjEwNDQ0MDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwMDAwMEEyQzM0NAorOjEwNDQ1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDc3OAorOjEwNDQ2MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NgorOjEwNDQ3MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQzI1QQorOjEwNDQ4MDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFBMDAyMTIyMzA1NworOjEwNDQ5MDAwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDA5RQorOjEwNDRBMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMEEyQzczMworOjEwNDRCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTkyNgorOjEwNDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1QkU0OQorOjEwNDREMDAwMDAwMEEyRDQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGMQorOjEwNDRFMDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQ0MDAyMDQ0MTE1MQorOjEwNDRGMDAwMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDBGOQorOjEwNDUwMDAwODUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCMQorOjEwNDUxMDAwMDAyMDQ4MDEwMDAwMDAwMDAwMDAzMDRBMDAyMDQ0MTE0MworOjEwNDUyMDAwMDAwMDAwMDAwMTAwMDAwMDAwMjA0ODExMDAwMDAwMDAxMQorOjEwNDUzMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNUM0QTQwMDAwMDBDRQorOjEwNDU0MDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDBFRQorOjEwNDU1MDAwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA1Qzk2RAorOjEwNDU2MDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMkMxQQorOjEwNDU3MDAwMDAyMDM2MjEwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFDRQorOjEwNDU4MDAwMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDBBQworOjEwNDU5MDAwMDAwMDAwMDAwMDJGMDIzMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwNDVBMDAwMENDMDAwMDAwMDAwMDVEMDAwMDAwMDAwMDAyMDA0MTEzNQorOjEwNDVCMDAwMDAwMDAwMDAwMDAwMDAzMDAwNDAzNjIxMDAwMDA1RTM0QworOjEwNDVDMDAwMDAwMDAwMzAwMDIwMDYyRDAwMDAwMDAwMDAwMDdFMDBFQQorOjEwNDVEMDAwMDAyODA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEzQQorOjEwNDVFMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA1RTNGNworOjEwNDVGMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFDNAorOjEwNDYwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMDkyMDA2MDQ0MTE0NgorOjEwNDYxMDAwMDAwMDA2OEQwMDAwMDAzMTAwMjAzNjMwMDAwMDAwMDA1MAorOjEwNDYyMDAwMDAwNEEwOTMwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMzJEOQorOjEwNDYzMDAwMDAyMDM2MzAwMDAwMDAwMDAwMDRBMkI2MDA2MDQ0MTFFMworOjEwNDY0MDAwMDAwMDA2OEQwMDAwMDAzMzAwMjAzNjMwMDAwMDAwMDAxRQorOjEwNDY1MDAwMDAwNEEyQkEwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMzQ3RQorOjEwNDY2MDAwMDAyMDM2MzAwMDAwMDAwMDAwMDRBMkJFMDA2MDQ0MTFBQgorOjEwNDY3MDAwMDAwMDA2OEQwMDAwMDAzNTAwMjAzNjMwMDAwMDAwMDBFQworOjEwNDY4MDAwMDAwNEEyQzIwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMzY0NAorOjEwNDY5MDAwMDAyMDM2MzAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTFCNworOjEwNDZBMDAwMDAwMDA2OEQwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDBCQgorOjEwNDZCMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwM0YwMworOjEwNDZDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTFCOQorOjEwNDZEMDAwMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAyMgorOjEwNDZFMDAwMDAwMDAwMDUwMDIwNDgxMTAwMDAwMDAwMDAwMEExRjRCNworOjEwNDZGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFDQworOjEwNDcwMDAwMDAwMDAwMDA4ODAwMDAwMDAwMjA0NDExMDAwMDAwMDBBQworOjEwNDcxMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwODEwMDAwMDA5RQorOjEwNDcyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTE5NQorOjEwNDczMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjMwMDAwMDAwMDAxNworOjEwNDc0MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjJDMDAwMDAwMzAxQgorOjEwNDc1MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjFCNAorOjEwNDc2MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MkMyQgorOjEwNDc3MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE0MgorOjEwNDc4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDA3RTAwMDAyODA2MjFFMworOjEwNDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDBDNworOjEwNDdBMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjA1MDAwMEEwOTJFMAorOjEwNDdCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDMxMDAyMDRBMkRCQworOjEwNDdDMDAwMDAwMDAwMDAwMDAwQTA5MzAwMjA0NDExMDAwMDAwMDA0MQorOjEwNDdEMDAwMDAwMDAwMzIwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQjZCOAorOjEwNDdFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDMzMDAyMDRBMkQ4QQorOjEwNDdGMDAwMDAwMDAwMDAwMDAwQTJCQTAwMjA0NDExMDAwMDAwMDBFOAorOjEwNDgwMDAwMDAwMDAwMzQwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQkU3RAorOjEwNDgxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDM1MDAyMDRBMkQ1NworOjEwNDgyMDAwMDAwMDAwMDAwMDAwQTJDMjAwMjA0NDExMDAwMDAwMDBBRgorOjEwNDgzMDAwMDAwMDAwMzYwMDIwNEEyRDAwMDAwMDAwMDAwMDAwMzA3QgorOjEwNDg0MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMUZGMDAyODA2MjFDNgorOjEwNDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwNgorOjEwNDg2MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjJCMDAwMDAwMDAyQgorOjEwNDg3MDAwMDAyMTAyMjEwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAyMAorOjEwNDg4MDAwMDAwMDA2MEUwMDA0QTAwMzAwNjA0NDExMDAwMDA2OEQyNQorOjEwNDg5MDAwMDAwMEEwMDMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNDhBMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDAwMDAxMDAyMTA2MjE0NworOjEwNDhCMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2MTMwQgorOjEwNDhDMDAwMDAwNEEwMTAwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTAzQworOjEwNDhEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTBFQgorOjEwNDhFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjEwNjIxMDAwMDAwMDA3RgorOjEwNDhGMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDA2NgorOjEwNDkwMDAwMENFMDAwMDAwMDAwMDYyQjAwMDRBMDExMDA2MDQ0MTEyMAorOjEwNDkxMDAwMDAwMDA2OEQwMDAwQTAxMTAwMjA0NDExMDAwMDAwMDBERQorOjEwNDkyMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTI1OQorOjEwNDkzMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMDEyMDAyMDQ0MTEwOAorOjEwNDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBFRgorOjEwNDk1MDAwMDAwNEEwMTMwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTNBNQorOjEwNDk2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTA1QQorOjEwNDk3MDAwMDAwMDAwMDAwMDA0QTAxNDAwNjA0NDExMDAwMDA2OEQzNworOjEwNDk4MDAwMDAwMEEwMTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNDk5MDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDE1MDA2MDQ0MTEzMQorOjEwNDlBMDAwMDAwMDA2OEQwMDAwQTAxNTAwMjA0NDExMDAwMDAwMDA0QQorOjEwNDlCMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTZDNQorOjEwNDlDMDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDBBMDE2MDAyMDQ0MTE3NAorOjEwNDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDA1RgorOjEwNDlFMDAwMDAwNEEwMTcwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTcwRAorOjEwNDlGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTBDQQorOjEwNEEwMDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEQzNgorOjEwNEExMDAwMDAwMDAwMkMwMDgwMDYyRDAwMDAwMDAwRkYwMDAwMDBCOAorOjEwNEEyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE5OAorOjEwNEEzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBGQworOjEwNEE0MDAwMDAwMDAwMDIwMDgwNDgxMTAwMDAwMDAwMDAwMDAwMDA4QgorOjEwNEE1MDAwMEVFMDAwMDAwMDAwMDYzRDAwMDAwMDMwMDAyMDA2MkRBMgorOjEwNEE2MDAwMDAwMDAwMDAwMDAwMDAwMjAwMjgwNjIxMDAwMDAwMDBGNQorOjEwNEE3MDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDBFNAorOjEwNEE4MDAwMENFMDAwMDAwMDAwMDYzQjgxMDAwMDAwMDAyMDQ0MTEwMworOjEwNEE5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA5QworOjEwNEFBMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhEMDAwMDEwMDA4NgorOjEwNEFCMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjIxQQorOjEwNEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDEzRgorOjEwNEFEMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNUM5OTgwMDAwMDAxMAorOjEwNEFFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MTE3OAorOjEwNEFGMDAwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA2NDE0RgorOjEwNEIwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMEEyQTQ1QQorOjEwNEIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDIyMDAyMDQ4MTE4NQorOjEwNEIyMDAwMDAwMDAwMDA4OTAwMDAwMDAwMjA0NDExMDAwMDAwMDA4NworOjEwNEIzMDAwMDAwMDAwMDEwMDQwNDgxMTAwMDAwNjJEOTcwMDAwMDAxMQorOjEwNEI0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE3NworOjEwNEI1MDAwMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NgorOjEwNEI2MDAwMDAwMDAwMDAwMDQwNDgxMTAwMDAwNjJEMDAwMDAwMDA3OQorOjEwNEI3MDAwMDA2MDAwMDAwMDAwMDY1QzAwMDAyMDEwMDAyMDQ0MTFDRQorOjEwNEI4MDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDAyQworOjEwNEI5MDAwMDAwMUEyQTRDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTY4MworOjEwNEJBMDAwMDA2MDQ4MTEwMDAwMDM2RTAwMDAyMDEwMDAyMDQ0MTEzNgorOjEwNEJCMDAwMDAwMDAwMDAwMDAxMDAwMDAwMjA0ODExMDAwMDAwMDA3QgorOjEwNEJDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFFRQorOjEwNEJEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTE0QQorOjEwNEJFMDAwMDAwMDAwMDAwOTgwMDAwMDAwMjA0ODExMDAwMDAwMDBDMworOjEwNEJGMDAwRkZGRkZGRkYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNEMwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAxNAorOjEwNEMxMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2OERBOAorOjEwNEMyMDAwMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwNEMzMDAwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDA0MDRDMTFGRgorOjEwNEM0MDAwMDAwMDA2NTYwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDBDOAorOjEwNEM1MDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDRDRQorOjEwNEM2MDAwMDAyOTFFMjcwMDAwMDAwMDAwMDAwMDE3MDA4MDM2MjdFMgorOjEwNEM3MDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBCMgorOjEwNEM4MDAwRkZGRkZGRkIwMDI4MUUyNzAwMDAwMDAwMDAwMDAwMTdBOAorOjEwNEM5MDAwMDA4MDM2MjcwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkRCNQorOjEwNENBMDAwMDAwMDAwMDAwMDAwMDAwODAwMjkxRTI3MDAwMDAwMDA4RQorOjEwNENCMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMTdFOQorOjEwNENDMDAwMDAyMDFFMkQwMDAwMDAwMEZGRkZGRkY3MDAyODFFMjcxOAorOjEwNENEMDAwMDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDBFMAorOjEwNENFMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDA5RgorOjEwNENGMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTE3RgorOjEwNEQwMDAwMDAwMDAwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNkU2MworOjEwNEQxMDAwMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMDAwMTAwMDBFRAorOjEwNEQyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTFGOAorOjEwNEQzMDAwMDAwMDAwMDAwMTgwMDAwMDAwMjA0ODExMDAwMDAwMDA3OQorOjEwNEQ0MDAwRkZGRkZGRkYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBFRQorOjEwNEQ1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDBDMworOjEwNEQ2MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA0RAorOjEwNEQ3MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIxN0YxNQorOjEwNEQ4MDAwMDA2MDQ0MTEwMDAwMDY4RDAwMDAwMDFGMDAyMTAyMzA2OQorOjEwNEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2OENBRAorOjEwNERBMDAwMDAwMDAwMTAwMDQwNEMxMTAwMDAwNjcyMDAwMDAwMDBERQorOjEwNERCMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMzhDMDAwMDAxNworOjEwNERDMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjAwQTJEMDAwMDAwMDA2RgorOjEwNEREMDAwMDAwMDAwMUUwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMUYzQgorOjEwNERFMDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDIwMDAyMDE2MkRFMQorOjEwNERGMDAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDBCNAorOjEwNEUwMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwNEUxMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDFCQworOjEwNEUyMDAwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDBDOQorOjEwNEUzMDAwMDAwMDAwMDQwMDMwMTIyNDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwNEU0MDAwMDAyRjAwNjQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMworOjEwNEU1MDAwMDAwMDA2OEIwMDAwMDAwMzAwMjgxQTIyMDAwMDAwMDA1QQorOjEwNEU2MDAwMDAwMDAwMDgwMDIyMTIyMjAwMDAwMDAwRkZGRkYwMDBGNgorOjEwNEU3MDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDAwMDAyOTEwQzRENworOjEwNEU4MDAwMDAwMDAwMDAwMDAwMDAxRjAwNDAzNjI0MDAwMDAwMDA2OQorOjEwNEU5MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwNEVBMDAwMUFDMDAwMDAwMDAwMDY4RDlGMDAwMDAwMDAyMDQ0MTE4MQorOjEwNEVCMDAwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAzOQorOjEwNEVDMDAwMDAwMDAwMDAxQUUwMDAwMDAwMDAwNjkwMDAwMDAwMDA1MgorOjEwNEVEMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMUFDMDAwMDA3OAorOjEwNEVFMDAwMDAwMDA2OTI5RTAwMDAwMDAwMjA0NDExMDAwMDAwMDAxNworOjEwNEVGMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBGOQorOjEwNEYwMDAwMUFFMDAwMDAwMDAwMDY5NTAwMDAwMDAwMDA4MDAwMDA4QworOjEwNEYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIyNgorOjEwNEYyMDAwMDAwMDEwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDBFNAorOjEwNEYzMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTFDMworOjEwNEY0MDAwMDAwMDAxQjIwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDBCQgorOjEwNEY1MDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTY1RAorOjEwNEY2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFCMDAyMDQ4MTEzOAorOjEwNEY3MDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAxRgorOjEwNEY4MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkQwOAorOjEwNEY5MDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQ1MAorOjEwNEZBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDA4QQorOjEwNEZCMDAwMDAwMDAwMjQwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkY2MAorOjEwNEZDMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDdGNgorOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA1OAorOjEwNEZFMDAwMDAwMDAwMjIwMDIwMjIyRDAwMDAwMDAwMDAwMEZGRkYzMgorOjEwNEZGMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDdDNgorOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAyNworOjEwNTAxMDAwMDAwMDAwMjMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMTBGMgorOjEwNTAyMDAwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDdBMAorOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODExMDAwMDAwMDBENworOjEwNTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNTA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNTBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwNTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwNTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwNTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwNTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwNTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNTJCMDAwMDE0MjA1MDIwNUMwMDI1MDAwMDAwMDAwMDFDMzAxNjg2MAorOjEwNTJDMDAwMDQzRjA1QzAwMDAwMDAwMDAyMjUwMjA5MDI1MDAxNTEwMAorOjEwNTJEMDAwMDAwMDAwMDAwMjIzMDI0NTAyQTAwMjQxMDAwMDAwMDA3RAorOjEwNTJFMDAwMDNENzA1QzAwNUMwMDVDMDAwMDAwMDAwMDY0OTA2NEFGNgorOjEwNTJGMDAwMDMxRjA1QzAwMDAwMDAwMDA1QzAwNUM1MDMyMDAzNDBEMgorOjEwNTMwMDAwMDAwMDAwMDAwMzJBMDI4MjAzNDIwMzM0MDAwMDAwMDA3MAorOjEwNTMxMDAwMDVDMDA1QzAwNUMwMDVDMDAwMDAwMDAwMDVDMDA1NTE1RQorOjEwNTMyMDAwMDVDMDA1QzAwMDAwMDAwMDAzQkEwNUMwMDRCQjAzNDQ2QgorOjEwNTMzMDAwMDAwMDAwMDAwNDlBMDQ1MDA0M0QwNUMwMDAwMDAwMDA3NQorOjEwNTM0MDAwMDREMDA1QzAwNDQxMDRERDAwMDAwMDAwMDQ1MDA1MDczRQorOjEwNTM1MDAwMDM1MTAzNzUwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzA2RAorOjEwNTM2MDAwMDAwMDAwMDAwNUMwMDVDMDA1QzAwNUMwMDAwMDAwMDAyOQorOjEwNTM3MDAwMDVDMDA1QzAwNjNGMDVDNzAwMDAwMDAwMDVDMDA1QzAwOAorOjEwNTM4MDAwMDAwNzA1QzAwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzAzRAorOjEwNTM5MDAwMDAwMDAwMDAwNUMwMDVDMDA1QzAwNUMwMDAwMDAwMDBGOQorOjEwNTNBMDAwMDNGODAzRUQwNDA4MDQwNjAwMDAwMDAwMDQwRTA0MEFEQworOjEwNTNCMDAwMDQwQzA0MTAwMDAwMDAwMDA0MUMwNDE4MDQyNDA0MjA0MQorOjEwNTNDMDAwMDAwMDAwMDAwNDJDMDQyODA0MzQwNDMwMDAwMDAwMDAxNQorOjEwNTNEMDAwMDVDMDA1QzAwNDM4MDVDMDAwMDAwMDAwMDVDMDA1QzBCOAorOjEwNTNFMDAwMDVDMDA1QzAwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzAxRgorOjEwNTNGMDAwMDAwMDAwMDAwMDAyMDY3OTA2OTcwMDA2MDAwMDAwMDA4OQorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjYxMF9wZnAuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY2MTBfcGZwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTI5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY2MTBfcGZwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTQ1IEBACis6MTAwMDAwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMDdDMDM4QkVECis6MTAwMDEwMDAwMDgwMDFCODAwN0MwMzhCMDBENDQwMUUwMEVFMDAxRTVGCis6MTAwMDIwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEM0MTgzOEMzCis6MTAwMDMwMDAwMENBMjQwMDAwQ0EyODAwMDA5NTgxQTgwMEM0MUMzQTA4Cis6MTAwMDQwMDAwMEMzQzAwMDAwQ0EwODAwMDBDQTBDMDAwMDdDNzQ0QjRBCis6MTAwMDUwMDAwMEMyMDAwNTAwOTlDMDAwMDBDNDFDM0EwMDdDNzQ0QzJBCis6MTAwMDYwMDAwMEMwRkZGMDAwMDQyQzA0MDAzMDkwMDIwMDdEMjUwMDQ5Cis6MTAwMDcwMDAwMDM1MTQwMjAwN0QzNTBCMDAyNTU0MDMwMDdDRDU4MDJCCis6MTAwMDgwMDAwMDI1OUMwMzAwOTVDMDA0MDBENTAwMUIwMDdFRERDMTQ3Cis6MTAwMDkwMDAwMDdEOUQ4MDAwRDY4MDFCMDBENTgwMUIwMEQ0NDAxRUIzCis6MTAwMEEwMDAwMEQ1NDAxRTAwRDY0MDFFMDBENjgwMUUwMEQ0ODAxRTAzCis6MTAwMEIwMDAwMEQ0QzAxRTAwOTc4M0QzMDBENUMwMUUwMENBMDgwMDFDCis6MTAwMEMwMDAwMDgwMDAxQTAwQ0EwQzAwMDBFNDAxMUUwMEQ0MDAxRUNCCis6MTAwMEQwMDAwMDgwMDAwQzAwQzQxODM4MDBFNDAxM0UwMEQ0MDAxRTZCCis6MTAwMEUwMDAwMDgwMDAwQzAwQzQxODM4MDBENDQwMUUwMEVFMDAxRTMyCis6MTAwMEYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDExRTA0Cis6MTAwMTAwMDAwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMEYxCis6MTAwMTEwMDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxM0UwMEQ0MDAxRTlGCis6MTAwMTIwMDAwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDAwMEEwMDAwMDIzCis6MTAwMTMwMDAwMDdFODI4QjAwQ0ExODAwMDBENDQwMUUwMEQ1ODAxRUFECis6MTAwMTQwMDAwMDgwMDA1MzAwRDQwMDc1MDBENDQwMUUwMENBMDgwMDhGCis6MTAwMTUwMDAwMENBMEMwMDAwQ0ExMDAwMDBENDgwMTkwMEQ0QzAxOEQ2Cis6MTAwMTYwMDAwMEQ1MDAxNzAwRDQ4MDFFMDBENEMwMUUwMEQ1MDAxRThDCis6MTAwMTcwMDAwMEUyMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4Qjg2Cis6MTAwMTgwMDAwMENBMDgwMDAwRDQ4MDYwMDBENDQwMUUwMDgwMDAwMDM3Cis6MTAwMTkwMDAwMEQ0ODAxRTAwQ0EwODAwMDBENDgwNjEwMEQ0NDAxRTM0Cis6MTAwMUEwMDAwMDgwMDAwMDAwRDQ4MDFFMDBDQTA4MDAwMENBMEMwMEI1Cis6MTAwMUIwMDAwMEQ0NDAxRTAwRDQ4MDE2MDBENEMwMTYwMEQ0ODAxRTg3Cis6MTAwMUMwMDAwMDgwMDFCODAwRDRDMDFFMDBDNjA4NDMwMENBMEMwMDVECis6MTAwMUQwMDAwMENBMTAwMDAwOTQ4MDA0MDBDQTE0MDAwMEU0MjBGMzU4Cis6MTAwMUUwMDAwMEQ0MjAxMzAwRDU2MDY1MDBENEUwMUMwMEQ1MjAxQzhECis6MTAwMUYwMDAwMEQ1NjAxQzAwODAwMDAwMDAwNjIwMDEwMEM2MDg0M0Y2Cis6MTAwMjAwMDAwMENBMEMwMDAwQ0ExMDAwMDA5NDgzRjcwMENBMTQwMDUyCis6MTAwMjEwMDAwMEU0MjBGMzAwODAwMDc5MDBENDIwMTMwMEM2MDg0M0Q2Cis6MTAwMjIwMDAwMENBMEMwMDAwQ0ExMDAwMDA5ODgzRUYwMENBMTQwMDM2Cis6MTAwMjMwMDAwMEQ0MDA2NDAwODAwMDhEMDAwMDAwMDAwMEM0MTQzMjZGCis6MTAwMjQwMDAwMEM2MTg0MzAwQzQwODJGMDA5NTQwMDUwMEM0MEMzMEI4Cis6MTAwMjUwMDAwMEQ0NDAxRTAwODAwMDAwMDBFRTAwMUUwMDk1ODNGNUQzCis6MTAwMjYwMDAwMEM0MTAzMTAwRDQ0MDMzMDBENTIwNjUwMEQ0QTAxQzU4Cis6MTAwMjcwMDAwMEQ0RTAxQzAwRDUyMDFDMDBFNDAxNUUwMEQ0MDAxRTY4Cis6MTAwMjgwMDAwMDgwMDAwMDAwMDYyMDAxMDBDQTE4MDAwMDBBMjAwMUJBCis6MTAwMjkwMDAwMEQ2MDA3NjAwQzQwODM2MDA5ODgwMDcwMEM2MTA0NUQ2Cis6MTAwMkEwMDAwMDk1MDExMDAwRDQwMDFGMDBENDYwNjIwMDgwMDAwMDlGCis6MTAwMkIwMDAwMEQ0MjA2MjAwQ0MzODM1MDBDQzE0MzMwMDg0MDFCQjVDCis6MTAwMkMwMDAwMEQ0MDA3MjAwRDU0MDFFMDA4MDAwMDAwMEVFMDAxRTI5Cis6MTAwMkQwMDAwMEUyMDAxQTAwODQwMUJCMDBFMjAwMUEwMENDMTA0QkJGCis6MTAwMkUwMDAwMENDMDQ0NzAwMkM5NDAxMDA3RDA5OEIwMDk4NDAwNTQ4Cis6MTAwMkYwMDAwMDdEMTVDQjAwRDQwMDFBMDA4MDAxQjgwMEQ0MDA2RDM5Cis6MTAwMzAwMDAwMDM0NDQwMTAwQ0MwQzQ4MDA5ODQwM0EwMENDMkM0QTAwCis6MTAwMzEwMDAwMDk1ODAwNDAwQ0MwNDQ5MDA4MDAxQjgwMEQ0MDAxQTg0Cis6MTAwMzIwMDAwMEQ0QzAxQTAwMjgyODAxMDA4NDAwRjAwMENDMTAwMzdCCis6MTAwMzMwMDAwMDk4ODAxQjAwMDQzODBDMDA4NDAwRjAwMENDMTAwM0VGCis6MTAwMzQwMDAwMDk4ODAxNzAwMDQzODA4MDA4NDAwRjAwMENDMTAwM0U3Cis6MTAwMzUwMDAwMDk4ODAxMzAwMDQzODA0MDA4NDAwRjAwMENDMTAwM0RGCis6MTAwMzYwMDAwMDk4ODAxNDAwQ0MxMDRDMDA5QTgwMDkwMENDMTQ0REU5Cis6MTAwMzcwMDAwMDk4NDBEQzAwRDQwMDZEMDBDQzE4NDgwMEQ1MDAxQTZECis6MTAwMzgwMDAwMEQ1NDAxQTAwODAwMEM5MDBENTgwMUEwMDk2QzBENTVCCis6MTAwMzkwMDAwMEQ0MDA2RDAwODAwMUI4MDBENDAwNkUwMDlBQzAwMzQ0Cis6MTAwM0EwMDAwMEQ0MDA2RDAwRDQwMDZFMDA4MDAwMDAwMEVDMDA3RkRGCis6MTAwM0IwMDAwMDlBQzBDQzAwRDQwMDZEMDA4MDAxQjgwMEQ0MDA2RTVCCis6MTAwM0MwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMDdEOTEwMzY3Cis6MTAwM0QwMDAwMDdERDU4MzAwN0QxOTBDMDAzNUNDMUYwMDM1NzAxRkMyCis6MTAwM0UwMDAwMDdDRjBDQjAwN0NEMDhCMDA4ODAwMDAwMDdFOEU4QkUwCis6MTAwM0YwMDAwMDk1QzAwNDAwRDQwMDZFMDA4MDAxQjgwMEQ0MDAxQTNCCis6MTAwNDAwMDAwMEQ0QzAxQTAwQ0MwODAzMDBDQzBDMDMwMENDMTAwM0FECis6MTAwNDEwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMENDMjQwMzM0Cis6MTAwNDIwMDAwMENDMjgwMzAwMzVDNDFGMDAzNkIwMUYwMDdDNzA0QjgxCis6MTAwNDMwMDAwMDM0RjAxRjAwN0M3MDRCMDAzNTcwMUYwMDdDNzA0QjQ3Cis6MTAwNDQwMDAwMDdEODg4MTAwN0RDQ0MxMDA3RTUxMDEwMDdFOTU0MUY4Cis6MTAwNDUwMDAwMDdDOTA4MjAwN0NENEMyMDA3Qzg0OEIwMDlBQzAwMzE0Cis6MTAwNDYwMDAwMDdDOEM4QjAwMkM4ODAxMDA5ODgwOUUwMEQ0MDA2RDRECis6MTAwNDcwMDAwMDk4NDA5QzAwRDQwMDZFMDBDQzA4NEMwMENDMEM0RDgxCis6MTAwNDgwMDAwMENDMTA0ODAwRDQ4MDFBMDBENEMwMUEwMDgwMDEwMUFBCis6MTAwNDkwMDAwMEQ1MDAxQTAwQ0MwODMyMDBENDAwMzIwMDk0ODJEOTcyCis6MTAwNEEwMDAwMENBMEMwMDAwRDQ0MDFFMDA4MDAwMDAwMEQ0MDAxRUQyCis6MTAwNEIwMDAwMEU0MDExRTAwRDQwMDFFMDBDQTA4MDAwMENBMEMwMDlGCis6MTAwNEMwMDAwMENBMTAwMDAwRDQ0MDFFMDBDQTE0MDAwMEQ0ODAxRUQwCis6MTAwNEQwMDAwMEQ0QzAxRTAwRDUwMDFFMDBENTQwMUUwMEQ1NDAzNEZCCis6MTAwNEUwMDAwMDgwMDAwMDAwRUUwMDFFMDAyODA0MDQwMEUyMDAxQTU0Cis6MTAwNEYwMDAwMEUyMDAxQTAwRDQ0MDFBMDBDQTM4MDAwMENDMDgwM0Y5Cis6MTAwNTAwMDAwMENDMEMwMzAwQ0MwQzAzMDBDQzBDMDMwMDk4ODJCRDgzCis6MTAwNTEwMDAwMDAwMDAwMDAwODQwMUJCMDBEN0EwNkYwMDgwMDAwMDM1Cis6MTAwNTIwMDAwMEVFMDAxRjAwQ0EwNDAwMDBDMkZGMDAwMENDMDgzNDI3Cis6MTAwNTMwMDAwMEMxM0ZGRjAwN0M3NENCMDA3Q0M5MEIwMDdEMDEwRjI0Cis6MTAwNTQwMDAwMDk5MDJCMDAwN0M3MzhCMDA4NDAxQkIwMEQ3QTA2RkMwCis6MTAwNTUwMDAwMDgwMDAwMDAwRUUwMDFGMDBDQTA4MDAwMDI4MTkwMEZCCis6MTAwNTYwMDAwMDdEODk4QjAwOTU4MDE0MDAyODE0MDQwMENBMEMwMEJCCis6MTAwNTcwMDAwMENBMTAwMDAwQ0ExQzAwMDBDQTI0MDAwMEUyMDAxRkNDCis6MTAwNTgwMDAwMEQ0QzAxQTAwRDUwMDFBMDBENTQwMUEwMENDMTgwM0I4Cis6MTAwNTkwMDAwMENDMkMwMzAwQ0MyQzAzMDBDQzJDMDMwMDdEQTU4QkJECis6MTAwNUEwMDAwMDdEOUM0NzAwOTg0Mjk3MDAwMDAwMDAwMDgwMDE2MTk4Cis6MTAwNUIwMDAwMEQ0QzAxQTAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDY5Cis6MTAwNUMwMDAwMEVFMDAxRTAwRTQwMTFFMDBENDAwMUUwMEQ0NDAxRUY4Cis6MTAwNUQwMDAwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjE2Cis6MTAwNUUwMDAwMEU0MDEzRTAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRUI4Cis6MTAwNUYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMENBMDgwMDMwCis6MTAwNjAwMDAwMDI0OEMwNjAwMENDQzA2MDA5OEMwMDYwMENDMTA0RUNFCis6MTAwNjEwMDAwMDk5MDAwNDAwRDQwMDczMDBFNDAxMUUwMEQ0MDAxRTAxCis6MTAwNjIwMDAwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDAwMEVFMDAxRTlBCis6MTAwNjMwMDAwMENBMDgwMDAwQ0EwQzAwMDAzNEQwMTgwMDI1MTAwMUMwCis6MTAwNjQwMDAwMDk1MDAyMTAwQzE3RkZGMDBDQTEwMDAwMENBMTQwMEZECis6MTAwNjUwMDAwMENBMTgwMDAwRDQ4MDFEMDBENEMwMUQwMDdEQjE4QkRECis6MTAwNjYwMDAwMEMxNDIwMjAwQzJDMDAxMDBENTgwMUQwMDM0REMwRTcyCis6MTAwNjcwMDAwMDdENUQ0QzAwN0Y3MzRDMDBENzQwMUUwMEQ1MDAxRUVFCis6MTAwNjgwMDAwMEQ1NDAxRTAwQzE0MjAwMDBDMkMwMDAwMDA5OUMwMTBDCis6MTAwNjkwMDAwMDMxREMxMDAwN0Y1RjRDMDA3RjczNEMwMDA0MjgwMkE3Cis6MTAwNkEwMDAwMDdEODM4MDAwRDVBODZGMDBENTgwNjYwMEQ3NDAxRUVFCis6MTAwNkIwMDAwMEVDMDA1RTAwQzgyNDAyMDBDODI0MDIwMDgwMDFCOERCCis6MTAwNkMwMDAwMEQ2MDA3NjAwRDQ0MDFFMDBENDgwMUUwMEQ0QzAxRTg4Cis6MTAwNkQwMDAwMDgwMDAwMDAwRUUwMDFFMDA4MDAwMDAwMEVFMDAxRjAxCis6MTAwNkUwMDAwMEQ0MDAxRjAwODAwMDAwMDBENDAwMUYwMEQ0MDAxRkIxCis6MTAwNkYwMDAwMDg4MDAwMDAwRDQwMDFGMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTAwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTAwNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAwN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAwODAwMDAwMDAxMDE3MTAwMDIwMTc4MDAwMzAwOEYwMDA0MDA3RkU1Cis6MTAwODEwMDAwMDA1MDAwMzAwMDYwMDNGMDAwNzAwMzIwMDA4MDEyQzFECis6MTAwODIwMDAwMDA5MDA0NjAwMEEwMDM2MDAxMDAxQjYwMDE3MDBBMkI5Cis6MTAwODMwMDAwMDIyMDEzQTAwMjMwMTQ5MDAyMDAwQjQwMDI0MDEyNUQwCis6MTAwODQwMDAwMDI3MDA0RDAwMjgwMDZBMDAyQTAwNjAwMDJCMDA1MjlCCis6MTAwODUwMDAwMDJGMDA2NTAwMzIwMDg3MDAzNDAxN0YwMDNDMDE1NjA0Cis6MTAwODYwMDAwMDNGMDA3MjAwNDEwMThDMDA0NDAxMkUwMDU1MDE3M0NECis6MTAwODcwMDAwMDU2MDE3QTAwNjAwMDBCMDA2MTAwMzQwMDYyMDAzODBECis6MTAwODgwMDAwMDYzMDAzODAwNjQwMDM4MDA2NTAwMzgwMDY2MDAzOEY2Cis6MTAwODkwMDAwMDY3MDAzODAwNjgwMDNBMDA2OTAwNDEwMDZBMDA0OEJCCis6MTAwOEEwMDAwMDZCMDA0ODAwNkMwMDQ4MDA2RDAwNDgwMDZFMDA0ODc2Cis6MTAwOEIwMDAwMDZGMDA0ODAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjZGCis6MTAwOEMwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjEwCis6MTAwOEQwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwCis6MTAwOEUwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkYwCis6MTAwOEYwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkUwCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNjIwX21lLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNjIwX21lLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMTllZDgKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY2MjBfbWUuYmluLmloZXgKQEAgLTAsMCArMSwxMzQ1IEBACis6MTAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAwMDEwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMEZGRkYwMDI4NDYyMUE5Cis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMEFGCis6MTAwMDMwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTAwMDQwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDI2Cis6MTAwMDUwMDAwMDAwMDAwMDAwMDEwMDAwQzAyOTQ2MjAwMDAwMDAwMDUwCis6MTAwMDYwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAwMDcwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQUYyCis6MTAwMDgwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDdBCis6MTAwMDkwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MjAwNEJFCis6MTAwMEEwMDAwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMDAwMDYwMDAwMEE4Cis6MTAwMEIwMDAwMDAwMDYzMTAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0NTVFCis6MTAwMEMwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMEYwMDM5Cis6MTAwMEQwMDAwMDI4MTYyMjAwMDAwMDAwMDAwMDAwMDgwMDIxMTYyNTVDCis6MTAwMEUwMDAwMDAwMDAwMDAwMDAwMDE4MDAyMDM2MjUwMDAwMDAwMDdECis6MTAwMEYwMDA4RDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNEZBCis6MTAwMTAwMDAwMDJGMDIyNTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEFECis6MTAwMTEwMDAwMDAwMDAxODAwNDEyMDAwMDA0MDQ4MTEwMDAwMDAxOUI0Cis6MTAwMTIwMDAwMDQyMjAwMDAwMjA0ODExMDAwMDAwMDA4RTAwMDAwMDY2Cis6MTAwMTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjgwMDIwNEEyRDhCCis6MTAwMTQwMDAwMDAwMDAwMDkwMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEFBCis6MTAwMTUwMDAwMDAwMDAwMDAwMjA0ODA1MDAwMDAwMDAwMDAwMDAwQzI2Cis6MTAwMTYwMDAwMDIxMTYyMjAwMDAwMDAwMDAwMDAwMDMwMDI4MTYyNUQwCis6MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDE5MDAyMTFBMjIwMDAwMDAwMDA5Cis6MTAwMTgwMDAwMDAwMDAwNDAwMjgxQTI2MDAwMDAwMDAwMDAwMDAwMDAzCis6MTAwMTkwMDAwMDI5MTRDNTAwMDAwMDAwMDAwMDAwMTkwMDIwMzYyNUM5Cis6MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTE0MDIwMDAwMDAwMEZGCis6MTAwMUIwMDAwMDAwMDAxNjAwMjExNjI1MDAwMDAwMDAwMDAwMDAwM0NBCis6MTAwMUMwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDVBCis6MTAwMUQwMDAwMDAwMDAwMEZGRkZGRkZDMDAyODBFMjMwMDAwMDAwMENECis6MTAwMUUwMDAwMDAwMDAwMDAwMjkxNEEzMDAwMDAwMDAwMDAwMDAxNzE4Cis6MTAwMUYwMDAwMDIwMzYyNTAwMDAwMDAwMDAwMDgwMDAwMDI4MEUyMkFDCis6MTAwMjAwMDAwMDAwMDAwMDAwMDAwMDA3MDAyMjBFMjMwMDAwMDAwMDk0Cis6MTAwMjEwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDAyMDAwMDAwMEVGCis6MTAwMjIwMDAwMDI4MEUyMjAwMDAwMDAwMDAwMDAwMDYwMDIxMEUyMzFFCis6MTAwMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMEVGCis6MTAwMjQwMDAwMDAwMDAwMDAwMjIwMjIyMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTAwMjUwMDAxNEUwMDAwMDAwMDAwMDM4MDAwMDAwMDAyRUUwMDAwMDY0Cis6MTAwMjYwMDAwMDAwMDAzNTAwMDAwMDAwMkNFMDAwMDAwMDAwMDAzNzE2Cis6MTAwMjcwMDAwMDAwMDAwMDAwNDAwRTJEMDAwMDAwMzkwMDAwMDAwOEMyCis6MTAwMjgwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDkwMDQwMTIyRDhCCis6MTAwMjkwMDAwMDAwMDA0NjAwMDAwMDAxMDA0MDBFMkQwMDAwMDAzOTYzCis6MTAwMkEwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzI4Cis6MTAwMkIwMDAwMDI4MTIyMzAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDg3Cis6MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMwMDAwMDAwMEFECis6MTAwMkQwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwM0UwMDAwMDAwOEU0Cis6MTAwMkUwMDAwMDQwMUMxMTAwMDAwMDQxMDAwMDAwMEQwMDIwMUUyREU4Cis6MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDBGMDAyODFFMjcwMDAwMDAwMDgyCis6MTAwMzAwMDAwMDAwMDAwMzAwMjIxRTI3MDAwMDAwMDA3RkMwMDAwMDQ0Cis6MTAwMzEwMDAwMDI4MUEyMzAwMDAwMDAwMDAwMDAwMTQwMDIxMUEyNjAzCis6MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAxMDAzMzFBMjYwMDAwMDAwMDU5Cis6MTAwMzMwMDAwMDAwMDAwODAwMjIxQTI2MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwMzQwMDAwMDI5MENDNzAwMDAwMDAwMDAwMDAwMjcwMDIwMzYyNDEwCis6MTAwMzUwMDAwMDAwMDAwMDAwMDA3RjAwMDAyODEyMjEwMDAwMDAwMEMzCis6MTAwMzYwMDAwMDAwMTQwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAwMzcwMDAwQ0UwMDAwMDAwMDAwMDRCMDAwMDAwMDEwMDI5MEUyM0VCCis6MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDM2MjMwMDAwMDAwMEU2Cis6MTAwMzkwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkY4MDAwMDExCis6MTAwM0EwMDAwMDI5NEEyMzAwMDAwMDAwMDAwMDAwMDAwMDNBMkMwMjRGCis6MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjBFMkIwMDAwMDAwMEUwCis6MTAwM0MwMDBGQzAwMDAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwRkM5Cis6MTAwM0QwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyM0YwCis6MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDI3MDAyMDRBMkQwMDAwMDAwMDRGCis6MTAwM0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyOTVCCis6MTAwNDAwMDAwMDIwMEUyRDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyM0U5Cis6MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAwNDIwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTUyCis6MTAwNDMwMDAwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDgzCis6MTAwNDQwMDAwMDAwMDA2MTAwMDAwMDAwMkVFMDAwMDAwMDAwMDA1RkRFCis6MTAwNDUwMDAwMDAwMDAwMDJDRTAwMDAwMDAwMDAwNUUwMDAwMDAwMDMyCis6MTAwNDYwMDAwMDQwMEUyRDAwMDAwMDYyMDAwMDAwMDEwMDQwMEUyRDMzCis6MTAwNDcwMDAwMDAwMDA2MjAwMDAwMDBBMDAyMDBFMkQwMDAwMDAwMEI1Cis6MTAwNDgwMDAwMDAwMDAwQjAwNDAxMjJEMDAwMDAwNkEwMDAwMDAwMDc4Cis6MTAwNDkwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMwMDI4MTIyM0Q5Cis6MTAwNEEwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQwMDAwMDAwMEYyCis6MTAwNEIwMDA3RkMwMDAwMDAwMjgxNjIzMDAwMDAwMDAwMDAwMDAxNDg4Cis6MTAwNEMwMDAwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDEwMDMzMTYyNTYxCis6MTAwNEQwMDAwMDAwMDAwMDgwMDAwMDAwMDAyODBFMjMwMDAwMDAwMDQzCis6MTAwNEUwMDAwMDAwMDAwMDAwMjkwQ0EzMDAwMDAwMDAzRkZGRkMwMEZBCis6MTAwNEYwMDAwMDI5MEUyMzAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzIxCis6MTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA2RDhBCis6MTAwNTEwMDAwMDAwMDEwMDAwNDAxQzExMDAwMDAwNzAwMDAwMDAwREYwCis6MTAwNTIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwRjAwMDI4MUUyNzAzCis6MTAwNTMwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMjFFMjcwMDAwMDAwMDUwCis6MTAwNTQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwREE4Cis6MTAwNTUwMDAwMDIwNDgxMTAwMDAwMDAwRkZGRkYwRkYwMDI4MUEzMEMzCis6MTAwNTYwMDAwMDAwMDAwMDAwMDBBMDI4MDAyMDQ0MTEwMDAwMDAwMDRFCis6MTAwNTcwMDAwMDAwMDAwMDAwMjk0OEU2MDAwMDAwMDAwMDAwQTAxODZDCis6MTAwNTgwMDAwMDIwNDQxMTAwMDAwMDAwM0ZGRkZGRkYwMDI4NEEyMzI1Cis6MTAwNTkwMDAwMDAwMDAwMDAwMDBBMDEwMDAyMDQ0MTEwMDAwMDAwMDM2Cis6MTAwNUEwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAzMEFGCis6MTAwNUIwMDAwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDIwMDI5MTYyNTcyCis6MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjUwMDAwMDAwMDgwCis6MTAwNUQwMDAwMDAwMDAyNTAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAwNUUwMDAwMDJGMDBBMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDZECis6MTAwNUYwMDAwMDAwMDA4MzAwMDAwMDI2MDAyMDE2MkQwMDAwMDAwMEVGCis6MTAwNjAwMDAwMDAwMDAwMDAwMkYwMEE0MDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAwNjEwMDAwQ0MwMDAwMDAwMDAwMDg0MDAwMDAwMDAwMDQwMDAwMDRBCis6MTAwNjIwMDAwMDAwMDA4QTAwMDAwMDI1MDAyMDM2MjMwMDAwMDAwMEEyCis6MTAwNjMwMDAwMDAwMDAyNjAwMjAzNjI0MDAwMDAwMDAwMDAwMDAxNzAzCis6MTAwNjQwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyN0YzCis6MTAwNjUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA4QTFDCis6MTAwNjYwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NjgwMDAwMDAwMEJDCis6MTAwNjcwMDAwMDYwMDAwMDAwMDAwNjVDMDAwMDAwMDIwMDIxMEUyMjY1Cis6MTAwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA4RDA5Cis6MTAwNjkwMDAwMDAwMDAxMkMwNDAzNjIwMDAwMDAwOTMwMDAwMDAwMDVGCis6MTAwNkEwMDAyRUUwMDAwMDAwMDAwMDkxMDAwMDAwMDAyQ0UwMDAwMDlGCis6MTAwNkIwMDAwMDAwMDA5MDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5MjlCCis6MTAwNkMwMDAwMDAwMDAwMzAwNDAwRTJEMDAwMDAwOTIwMDAwMDAwQzBFCis6MTAwNkQwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMTIwMDIwMzYyMzM0Cis6MTAwNkUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTBFMjIwMDAwMDAwMEI2Cis6MTAwNkYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOTgwMDAwQTAwQ0UyCis6MTAwNzAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDRDCis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDBBMEYxCis6MTAwNzIwMDAwMDAwQTAwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTAwNzMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAyRUUwMDAwMDMyCis6MTAwNzQwMDAwMDAwMDA5RTAwMDAwMDAwMkNFMDAwMDAwMDAwMDA5RDYyCis6MTAwNzUwMDAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwMzdBCis6MTAwNzYwMDAwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMEMwMDIwMEUyRDA4Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDBFCis6MTAwNzgwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDAwMDNGMDAwMEUyCis6MTAwNzkwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMTAwMDIxMEUyMzlFCis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDExMDAyMDM2MjMwMDAwMDAwMEJGCis6MTAwN0IwMDAwMDAwMDAxRTAwMjEwMjJCMDAwMDAwMDAwMDAwMDAwMENECis6MTAwN0MwMDAxNEMwMDAwMDAwMDAwMEE3MDAwMDAwMTZDMDIwMzYyMDYyCis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTAyMkIwMDAwMDAwMEFDCis6MTAwN0UwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQUEwMDAwMDAxNTc2Cis6MTAwN0YwMDBDMDIwMzYyMDAwMDAwMDAwMDAwMDAwMDgwMDIxMEUyQjYxCis6MTAwODAwMDAwMDAwMDAwMDAwMDAwMDdGMDAyODBFMjMwMDAwMDAwMDEwCis6MTAwODEwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAwODIwMDAwQ0UwMDAwMDAwMDAwMEUxMDAwMDAwMDAyNzAwMDAwMEQ0Cis6MTAwODMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBM0IzCis6MTAwODQwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwODUwMDAwQUUwMDAwMDAwMDAwMEIzMDAwMDAwMDAwMDYwMDAwMDlCCis6MTAwODYwMDAwMDAwMDEzQTgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDU3Cis6MTAwODcwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQ0VECis6MTAwODgwMDAwMDIyMUUzMDAwMDAwMDAwOTk4MDAwMDAwMDIwNDQxMTZBCis6MTAwODkwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMDEyMkQwMDAwMDAwMEY1Cis6MTAwOEEwMDAwMDAwMDAwODAwMjIxMjI0MDAwMDAwMDAwMDAwMDAxMEQ4Cis6MTAwOEIwMDAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDAwMDI5MUNFNEM2Cis6MTAwOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDcwMDAwMDEyRjQ5Cis6MTAwOEQwMDA5QjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTAwOEUwMDAwMDIwNDgwMjAwMDAwMDAwOUMwMDAwMDAwMDIwNDQxMThECis6MTAwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzE0NkYwMDAwMDAwMDQyCis6MTAwOTAwMDAwMDAwMDAwMTAwMzMzRTIzMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAwOTEwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDIwM0MwNTU1Cis6MTAwOTIwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQxCis6MTAwOTMwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAwOTQwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMDcwMDIwNDQxMTBCCis6MTAwOTUwMDAwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMkIwMDAwMDAwMDNBCis6MTAwOTYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQ0IwMEY4RkYwOEU5Cis6MTAwOTcwMDAwMDIwNDgxMTAwMDAwMDAwOTgwMDAwMDAwMDQwNDgxMUNECis6MTAwOTgwMDAwMDAwMDBEQzAwMDAwMEYwMDAyODBFMjIwMDAwMDAwMDQzCis6MTAwOTkwMDAwMDAwMDBBMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAwOUEwMDAwQ0MwMDAwMDAwMDAwMERBMDAwMDAwMTEwMDIwMEUyRDM1Cis6MTAwOUIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMEUyCis6MTAwOUMwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRDUwMDAwMDAwMjY0Cis6MTAwOUQwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ3Cis6MTAwOUUwMDAwMDAwMDBENDAwMDAzRjAwMDA0MDBDMTEwMDAwMDBENkMxCis6MTAwOUYwMDAwMDAwMUYwMDAwNDAwQzExMDAwMDAwRDYwMDAwMEYwMDk2Cis6MTAwQTAwMDAwMDIwMEMxMTAwMDAwMDAwMDAzODAwMDkwMDI5NEEyM0QyCis6MTAwQTEwMDAwMDAwMDAwMDNGMDAwMDAwMDAyODBFMkIwMDAwMDAwMDM2Cis6MTAwQTIwMDAwMDAwMDAwMjAwMjIwRTIzMDAwMDAwMDAwMDAwMDAwNzZBCis6MTAwQTMwMDAwMDQ5NEEyMzAwMDAwMERDMDAzODBGMDkwMDIwNDgxMTVCCis6MTAwQTQwMDAwMDAwMDAwMDY4MDAwMDA3MDAyMDQ4MTEwMDAwMDAwMEJFCis6MTAwQTUwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEZDCis6MTAwQTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDY0Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZECis6MTAwQTgwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTIwMjQ5Cis6MTAwQTkwMDAwMDIwNDQxMTAwMDAwMDAwMDBGRjAwMDAwMDI4MEUyMjhBCis6MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyOTRBMjMwMDAwMDAwMDMwCis6MTAwQUIwMDAwMDAwMDAyNzAwMjAwRTJEMDAwMDAwMDAwMDAwMDAyNjhFCis6MTAwQUMwMDAwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDAwMDJGMDA4MzE1Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBFQTQwCis6MTAwQUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NjIwMDAwMDAwMDNFCis6MTAwQUYwMDAwMDQwMDAwMDAwMDAwMEVCMDAwMDAwMDAwMDYwMDAwMDZCCis6MTAwQjAwMDAwMDAwMDY2NTAwMDAwMDA3MDAyMDIyMkQwMDAwMDAwMDA0Cis6MTAwQjEwMDAwMDAwMDAwNTAwMjIwRTIyMDAwMDAwMDAwMDEwMDAwMDZFCis6MTAwQjIwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5MjA2OEJCCis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDZECis6MTAwQjQwMDAwMDAwMDBFRjAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDVECis6MTAwQjUwMDAwMDI5MjA2ODAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDcyCis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTAyMjMwMDAwMDAwMDNDCis6MTAwQjcwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwRjgwMDAwMDAwQjdFCis6MTAwQjgwMDAwMDIxMDIyODAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDQ2Cis6MTAwQjkwMDAwMDAwMDBGODAwMDAwNDAwMDAyOTIyMjgwMDAwMDAwMEU2Cis6MTAwQkEwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxQzk3Cis6MTAwQkIwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDEwCis6MTAwQkMwMDAwMDAwMDBGRDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDA0Cis6MTAwQkQwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAxRTdFCis6MTAwQkUwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEUwCis6MTAwQkYwMDAwMDAwMDEwQjAwMDBBMzBGMDAyMDQ0MTEwMDAwMDAwMEMyCis6MTAwQzAwMDAwMDAwMDAxMTAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwMTc3Cis6MTAwQzEwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEI0Cis6MTAwQzIwMDAwMDAwMDEwNEZGRkZGRkZGMDA0MDQ4MTEwMDAwMDEwQjFFCis6MTAwQzMwMDAwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAwQzQwMDAwQ0MwMDAwMDAwMDAwMTA3MDAwMEZGRkYwMDQwNDgxMTM5Cis6MTAwQzUwMDAwMDAwMDEwQjAwMDAwMDA0MDAyRjAyMjMwMDAwMDAwMDMwCis6MTAwQzYwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxMEEwMDAwMDBGRkFFCis6MTAwQzcwMDAwMDQwNDgxMTAwMDAwMTBCMDAwMDAwMDEwMDIwNDgxMTU1Cis6MTAwQzgwMDAwMDAwMDAwMDAwMDJDNDAwMDAyMDQ0MTEwMDAwMDAwMDI5Cis6MTAwQzkwMDAwMDAwMDAxRjAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAwQ0EwMDAxNEMwMDAwMDAwMDAwMTEyMDAwMDAwMTA0MDIxMEUyMEJFCis6MTAwQ0IwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMEE4Cis6MTAwQ0MwMDAwMDAwMDAxODQwMjI0QTIwMDAwMDAwMDAwMDAwMDAxMDMwCis6MTAwQ0QwMDBDMDQyNEEyMDAwMDAwMTE0MDAwMDAwMDAwMDIwMEMxMTU2Cis6MTAwQ0UwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMDc4Cis6MTAwQ0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAwRDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEEwMDIwMTAxMTFGCis6MTAwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDdFCis6MTAwRDIwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxMUIwMDAwMDAwMEJCCis6MTAwRDMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDEwMDUzMTIyNEIwCis6MTAwRDQwMDAwMDAwMDExN0ZGQkZGRkZGMDAyODNBMkUwMDAwMDAwMDNGCis6MTAwRDUwMDAwMDAwMDAxQjAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwRDYwMDAxNEMwMDAwMDAwMDAwMTJFODEwMDAwMDAwMDIwNDQxMThBCis6MTAwRDcwMDAwMDAwMDAwMDAwMDAwMDBEMDAyMDQ4MTEwMDAwMDAwMEVECis6MTAwRDgwMDAwMDAwMDAxODAwMjIwRTMwMDAwMDAwMDBGQzAwMDAwMEVGCis6MTAwRDkwMDAwMDI4MEUyMzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTA0Cis6MTAwREEwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMEJDCis6MTAwREIwMDAwMDAwMDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwRTA1Cis6MTAwREMwMDAwMDIwNDQxMTAwMDAwMDAwMDdGOEZGMDgwMDIwNDgxMTJGCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTRBMjMwMDAwMDAwMDdECis6MTAwREUwMDAwMDAwMDAxQzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwODc0Cis6MTAwREYwMDAwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUU4Cis6MTAwRTAwMDAwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQwMDAwMDAwMDM5Cis6MTAwRTEwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwRTIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMEM5Cis6MTAwRTMwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAwRTQwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzhCCis6MTAwRTUwMDAwMDIwNDQxMTAwMDAwMDAwMDA4MDAwMDAwMDIwNDgxMTI0Cis6MTAwRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDYwMDAwMDAwMDE0Cis6MTAwRTcwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAwRTgwMDAxNzAwMDAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMUYyCis6MTAwRTkwMDAwMDAwMDY4RDAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDRECis6MTAwRUEwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2OEMwMDAwMDAwNEQ4Cis6MTAwRUIwMDAwMDQwNEMxMTAwMDAwMTM1ODEwMDAwMDAwMDIwNDQxMTY5Cis6MTAwRUMwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEE4Cis6MTAwRUQwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQzY4Cis6MTAwRUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMUI2Cis6MTAwRUYwMDAwMDAwMDY4RDAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMEZCCis6MTAwRjAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAxM0MwMDAwMDAwMEIwCis6MTAwRjEwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEYxCis6MTAwRjIwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEwMDAwMDMxNTI5Cis6MTAwRjMwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAwRjQwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDYwMDAwMDE1Cis6MTAwRjUwMDAwMDAwMDE2MDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDlDCis6MTAwRjYwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjYwCis6MTAwRjcwMDA0MDI4MDYyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMEEyMEM4Cis6MTAwRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDE0NjEwMDAwMDAwMEI4Cis6MTAwRjkwMDAwMDAwMDAwMDAwNzQxODgyMDAwMDAyQkIwMDAxQTFGREU3Cis6MTAwRkEwMDAwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYwMDJGMDIyRjBDCis6MTAwRkIwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDE0NzFECis6MTAwRkMwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMDFDCis6MTAwRkQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTMxCis6MTAwRkUwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMEI0Cis6MTAwRkYwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwM0ZGRjg3Cis6MTAxMDAwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDk0Cis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDE2MDBGCis6MTAxMDIwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDAwMDAwRkZGRjIzCis6MTAxMDMwMDBDMDI4MTIyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMTYyMEVGCis6MTAxMDQwMDAwMDAwMDAwMDAwMDBGRkZGQzA2ODFBMjAwMDAwMDJCQjgzCis6MTAxMDUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjFDCis6MTAxMDYwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDU0Cis6MTAxMDcwMDAwMDAwMDE1ODAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTEyCis6MTAxMDgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTZDCis6MTAxMDkwMDAwMDMwMEEyRjAwMDAwMDAwMDAwMDAwMDEwMDIxMEEyMjk5Cis6MTAxMEEwMDAwMDAwMDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMDk5Cis6MTAxMEIwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTI5Cis6MTAxMEMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTk1Cis6MTAxMEQwMDAwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTEwMDAwMDAwMDM2Cis6MTAxMEUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDk1Cis6MTAxMEYwMDAwMDYwMDAwMDAwMDAwMThGMDAwMDAwMDAwMDYwMDAwMEEwCis6MTAxMTAwMDAwMDAwMDFBMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMEEwCis6MTAxMTEwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAxMTIwMDAwMDIwMkMwODAwMDAwMDAwMDAwMDAwMDAwMDIwMjQxMTE2Cis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MTEwMDAwMDAwMDU2Cis6MTAxMTQwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjlDCis6MTAxMTUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTIzCis6MTAxMTYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDAzCis6MTAxMTcwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMkU1Cis6MTAxMTgwMDAwMDIyMUUyOTAwMDAwMDAwMDAwMDAwMDAwMDcwNDhFQjUzCis6MTAxMTkwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCQjk1Cis6MTAxMUEwMDAwMDAwMDAwMTQwMzMwNjIwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAxMUIwMDBDMDMwMjQwOTAwMDAwMDAwMDAwMDNGRkYwMDJGMDIyRjc0Cis6MTAxMUMwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDMzCis6MTAxMUQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMwMDAwMDAwMDBBCis6MTAxMUUwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEMzCis6MTAxMUYwMDAwMDAwMDE4MTAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQUQyCis6MTAxMjAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAxODY5NTAwMDAwMDgyCis6MTAxMjEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTA3Cis6MTAxMjIwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDE4NjRCCis6MTAxMjMwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTg1Cis6MTAxMjQwMDAwMDUzMDYyMTAwMDAwMTgyOTIwMDAwMDAwMDIwNDQxMTlBCis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDQ4MDAwMDAwMDE5NzhFCis6MTAxMjYwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMTU5Cis6MTAxMjcwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDAwMDAwMDc4MDQyQTc1Cis6MTAxMjgwMDAwMDAwMDJGQjAwMDAwMDAwMDAyMDI4MDkwMDAwMDAwMDEwCis6MTAxMjkwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAxMkEwMDAwQ0MwMDAwMDAwMDAwMTc0MDAwMDAwMDBDMDQwMDQwMEY5Cis6MTAxMkIwMDAwMDAwMDAwMTAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNThFCis6MTAxMkMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAxMkQwMDAwQ0UwMDAwMDAwMDAwMTk0MDAwMDAwMTVDMDIwMzYyMDQyCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDE2QzAyMDM2MjAwMDAwMDAwMEIyCis6MTAxMkYwMDAzRjgwMDAwMDAwMjAwNDExMDAwMDAwMDA0NjAwMDAwMEI0Cis6MTAxMzAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDgwMDAwMDMxCis6MTAxMzEwMDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMEJCCis6MTAxMzIwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAxMzMwMDAwQ0MwMDAwMDAwMDAwMTlCMDAwMDAwMDEwMDgwNDgxMTZCCis6MTAxMzQwMDAwMDAwMDAwMDAwMDAwMDIxMDA4MDQ4MTEwMDAwMDAwMEEzCis6MTAxMzUwMDAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEU5Cis6MTAxMzYwMDBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTYyMENFCis6MTAxMzcwMDAwMDAwMDAwMDAwMDAwMDEwQzA4MTFBMjAwMDAwMDAwMEUyCis6MTAxMzgwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjYxCis6MTAxMzkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDgwMDIyMUUzMDVDCis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMDI5MDAyMDFBMkQwMDAwMDAwMEFECis6MTAxM0IwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkZCRkYwOUQ2Cis6MTAxM0MwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEYwMDIwMjIyRDI2Cis6MTAxM0QwMDAwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjgwMDAwMDAwMDU0Cis6MTAxM0UwMDAwMDAwMDAwNjAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAxM0YwMDAwMDI5MjBFODAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwODRDCis6MTAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAxNDEwMDAwNjBBMDIwMDAwMjk0QTI2MDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxNDIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUNBCis6MTAxNDMwMDAwMDAwMDAwMDAwMDAwMTAwMDAyMDE4MTEwMDAwMDAwMDYyCis6MTAxNDQwMDAwMDAwMDAwODAwNjIxRTI4MDAwMDAxMkYwMDAwMDAwOEI0Cis6MTAxNDUwMDAwMDgyMjIyODAwMDAwMDAwMDAwMkMwMDAwMDIwNDQxMTg5Cis6MTAxNDYwMDAwMDAwMDAwMDAwMDAwMDE1MDA2MDBFMkQwMDAwMDFCRDBFCis6MTAxNDcwMDAwMDAwMDAxNjAwNjAwRTJEMDAwMDAxQkQwMDAwQzAwODM1Cis6MTAxNDgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDc1Cis6MTAxNDkwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDFCOUJFCis6MTAxNEEwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAxNEIwMDAwMDIwNDgwMTAwMDAwMDAwMzkwMDAwMDAwMDIwNDgxMTExCis6MTAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEEzCis6MTAxNEQwMDAwMDAwMDAwMDAwODA0ODAyMDAwMDAwMDAwMDAwMDAxODJBCis6MTAxNEUwMDAwMDIwMkUyRDAwMDAwMDAwMDAwMDAwMDAwMDNCMEQ2M0Q2Cis6MTAxNEYwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMjRBMjMwMDAwMDAwMDU1Cis6MTAxNTAwMDAwMDAwMDAxMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAxODI0Cis6MTAxNTEwMDAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMDAwMDgwNDgwMzcxCis6MTAxNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjUwCis6MTAxNTMwMDAwMDAwMTAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMDBFCis6MTAxNTQwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMUVECis6MTAxNTUwMDAwMDAwMDFCMjAwMDAwMDA3MDAyMTA2MkYwMDAwMDAwMDdCCis6MTAxNTYwMDAwMDAwMDAxMzAwMjAwQTJEMDAwMDAwMDAwMDAwMDAwMTEwCis6MTAxNTcwMDAwMDIwMkMxMTAwMDAwMDAwMDAwMEZGRkY0MDI4MjIyMDY2Cis6MTAxNTgwMDAwMDAwMDAwMDAwMDAwMDBGMDAyNjIyMjgwMDAwMDAwMERDCis6MTAxNTkwMDAwMDAwMDAxMDQwMjEyNjIwMDAwMDAwMDAwMDAwMDAwRjg1Cis6MTAxNUEwMDAwMDI2MjYyOTAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjdDCis6MTAxNUIwMDAwMDAwMDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDNFCis6MTAxNUMwMDAwMDAwMDAxQjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAxNUQwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMENECis6MTAxNUUwMDAwMDAwMDFFMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDI3Cis6MTAxNUYwMDAwMDAwMDA4MTAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzU0Cis6MTAxNjAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUVCCis6MTAxNjEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyMDFDMTEwMDAwMDAwMEZECis6MTAxNjIwMDAwMDAwMDAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDYyCis6MTAxNjMwMDAwQ0UwMDAwMDAwMDAwMURDMDAwMDAwMDAwMDYwMDAwMDgxCis6MTAxNjQwMDAwMDAwMDFFOTAwMDAwMDAxMDA1MzFFMjcwMDAwMDFEODNFCis6MTAxNjUwMDAwMDAwMDAwMTAwMjAyQzExMDAwMDAwMDAwMDAwMDAxRjBECis6MTAxNjYwMDAwMDI4MEEyMjAwMDAwMDAwMDAwMDAwMUYwMDI4MkEyQThCCis6MTAxNjcwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MzA2MjEwMDAwMDFEMTFECis6MTAxNjgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMjY1Cis6MTAxNjkwMDAwMDMwNEEyRjAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMThGCis6MTAxNkEwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEMwCis6MTAxNkIwMDAwMDAwMDAwMTAwMzAxRTJGMDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxNkMwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ2Cis6MTAxNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFFOUMwCis6MTAxNkUwMDAwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRTUwMDAwRkZGRjdECis6MTAxNkYwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMEYwMDI2MEUyM0VFCis6MTAxNzAwMDAwMDAwMDAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMEI2Cis6MTAxNzEwMDAwMDAwMDAwRjAwMjYxMjI0MDAwMDAwMDAwMDAwMDAwMDVFCis6MTAxNzIwMDAwMDIwMTQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMTgxMUVCCis6MTAxNzMwMDAwMDAwMDJCQjAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMEQ4Cis6MTAxNzQwMDAwMDAwMDAwMDAwMkYwMjJCMDAwMDAwMDAwMDAwMDAwMDNECis6MTAxNzUwMDAwQ0UwMDAwMDAwMDAwMUY4MDAwMDAwMTAwMDIyMTYyODM0Cis6MTAxNzYwMDAwMDAwMDAwMEZGRkYwMDAwMDAyODE2MjUwMDAwMDAwMDE4Cis6MTAxNzcwMDAwMDAwRkZGRjAwMjgxQTI5MDAwMDAwMDAwMDAwMDAwMDAwCis6MTAxNzgwMDAwMDI5NDhDNTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwQUIxCis6MTAxNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDJDMTEwMDAwMDAwMEVDCis6MTAxN0EwMDAwMDAwMDAxMDAwMjIxNjIzMDAwMDAwMDBGRkZGMDAwMEQwCis6MTAxN0IwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMEZGRkYwMDI4MUEyNDYyCis6MTAxN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4QzUwMDAwMDAwMEUzCis6MTAxN0QwMDAwMDAwMDAwMDAwNzMxNTAzMDAwMDAyMDUwMDAwMDAwMDc3Cis6MTAxN0UwMDAwMDIwMTgwNTAwMDAwMDAwMDAwMDAwMDAwMDczMTUyNDEwCis6MTAxN0YwMDAwMDAwMDIwNTAwMDAwMDAwMDAyRDE0QzUwMDAwMDAwMERDCis6MTAxODAwMDAwMDAwMDAwMDAwMzAwOEEyMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAxODEwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjE0Cis6MTAxODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDIwMDMwMDAwMDAwMDc1Cis6MTAxODMwMDAwMDAwMDAwMDAwODAyNDA0MDAwMDAwMDAwMDAwMDAwRkYxCis6MTAxODQwMDAwMDIxMDIyNTAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDdDCis6MTAxODUwMDAwMDAwMDY4QzAwMDAwMDAwMDAyQjE0MDUwMDAwMDAwMEIyCis6MTAxODYwMDAwMDAwMDAwMTAwOTAxNjI1MDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxODcwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTg4Cis6MTAxODgwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDBCCis6MTAxODkwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMjI1NkE0Cis6MTAxOEEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEwMDI5NEEyMjE0Cis6MTAxOEIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDQ4Cis6MTAxOEMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDdBCis6MTAxOEQwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDM4Cis6MTAxOEUwMDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDA1Cis6MTAxOEYwMDAwMDAwMDAwMzAwMzg0QTIxMDAwMDAwMDAwMDAwQTFGQ0E1Cis6MTAxOTAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUU4Cis6MTAxOTEwMDAwMDAwMDAwMDAwMDBGRkZGNDAyODEyMjAwMDAwMDAwMDJGCis6MTAxOTIwMDAwMDAwMDAxMEMwMjExQTIwMDAwMDAwMDAwMDAwRkZGRjhFCis6MTAxOTMwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTYyMEVBCis6MTAxOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NDE0NjUwMDAwMDJCQkVECis6MTAxOTUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwMDAwMTUwCis6MTAxOTYwMDAwMDMzMDYyMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMUNCCis6MTAxOTcwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDIxOTgwCis6MTAxOTgwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAxOTkwMDAwQ0MwMDAwMDAwMDAwMjEyMDAwMDAwMDBDMDQwMDQwMDYzCis6MTAxOUEwMDAwMDAwMDAwMTAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0NThCCis6MTAxOUIwMDAwMDAwMDAwMDAwNDAwNDBGMDAwMDAyMTMwMDAwMDAwMEJGCis6MTAxOUMwMDAwMDYwMDAwMDAwMDAwNjMxMDAwMDAwMDAwMDYwMDAwMDIwCis6MTAxOUQwMDAwMDAwMDY0NTAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNTFECis6MTAxOUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxQTAwMDAwMDAwMEY2Cis6MTAxOUYwMDAwMDYwMDAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDhBCis6MTAxQTAwMDAwMDAwMDJCQjAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzE0Cis6MTAxQTEwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAxQTIwMDAwMDIwNDgwODAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRkU2Cis6MTAxQTMwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDIzMjg4Cis6MTAxQTQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0EwMDAwMDAwMEZCCis6MTAxQTUwMDAwMDQwMDAwMDAwMDAwMjM2OTUwMDAwMDAwMDIwNDQxMTA0Cis6MTAxQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkYwMDAwMDAwMDE2Cis6MTAxQTcwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAyMzYwMDAwMDAwMDQyCis6MTAxQTgwMDBDMDQwNDgwMDAwMDAwMjMzOTIwMDAwMDAwMDIwNDQxMUQyCis6MTAxQTkwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDFFCis6MTAxQUEwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjMzCis6MTAxQUIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMUJBCis6MTAxQUMwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDlBCis6MTAxQUQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUYzCis6MTAxQUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTY5Cis6MTAxQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA0MTEwMDAwMDJGQjc0Cis6MTAxQjAwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMEQwCis6MTAxQjEwMDAwMDYwMDAwMDAwMDAwNjMxMDAwMEEwMEMwMDIwNDQxMTBECis6MTAxQjIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDhECis6MTAxQjMwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAxQjQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTg0MDIxMEEyMDg3Cis6MTAxQjUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyRjAyMjIwMDAwMDAwMDJGCis6MTAxQjYwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyNEMwMDAwMDAxNDI5Cis6MTAxQjcwMDAwMDIwMjIyRDAwMDAwMDAwMDAwODAxMDEwMDI5MjIyODc5Cis6MTAxQjgwMDAwMDAwMDAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMEMzCis6MTAxQjkwMDAwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxQkEwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEU1Cis6MTAxQkIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDI1MThBCis6MTAxQkMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxMDlBCis6MTAxQkQwMDAwMDYwMDQxMTAwMDAwMzE1M0Y4MDAwMDAwMDIwMDQxMTg0Cis6MTAxQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMkM5Cis6MTAxQkYwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0VGCis6MTAxQzAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEZCCis6MTAxQzEwMDAwMDAwMDI3QzAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEM0Cis6MTAxQzIwMDAwMDAwMDAwMTAwMjExRTI3MDAwMDAwMDAwMDAwMDAwMDRECis6MTAxQzMwMDAxNEUwMDAwMDAwMDAwMjZBMDAwMDAwMTIwMDIwMUUyREM3Cis6MTAxQzQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODFFMjcwMDAwMDAwMDI5Cis6MTAxQzUwMDAwMDAwMDAwMDAwMzQxQzI3MDAwMDAwMDAwMDAwMDAwMDBECis6MTAxQzYwMDAxMkMwMDAwMDAwMDAwMjVGMDAwMDAwMDAwMDIwMUMxMUY0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTUwMDAwMDAwMDUwCis6MTAxQzgwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNjIwMDAwMDAwMDI4Cis6MTAxQzkwMDAwMDIwMTQwNzAwMDAwMDAwMDAwMDAwMTIwMDIwMUUyRDhDCis6MTAxQ0EwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTFFMjcwMDAwMDAwMEJFCis6MTAxQ0IwMDAwMDAwMDAwMDAwMzQxQzQ3MDAwMDAwMDAwMDAwMDAwMDhECis6MTAxQ0MwMDAxMkMwMDAwMDAwMDAwMjY3MDAwMDAwMDAwMDIwMUMxMThDCis6MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMEVGCis6MTAxQ0UwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNkEwMDAwMDAwMEMwCis6MTAxQ0YwMDAwMDIwMTgwNzAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDQ1Cis6MTAxRDAwMDAwMDAwMDJDMTAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDIzCis6MTAxRDEwMDAwMDAwMDAwMDAwMzQyMDIzMDAwMDAwMDAwMDAwMDAwMDRDCis6MTAxRDIwMDAxMkMwMDAwMDAwMDAwMjcyMDAwMDAwMDAwMDM0MjA0NEQ1Cis6MTAxRDMwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3MTVFCis6MTAxRDQwMDAwMDAwMDAxNjAwNDA0ODExMDAwMDAyNzYwMDAwMDAxODU0Cis6MTAxRDUwMDAwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMDAwMDM0MjA0NERBCis6MTAxRDYwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3NTJBCis6MTAxRDcwMDAwMDAwMDAxNzAwNDA0ODExMDAwMDAyNzYwMDAwMDAxOTIyCis6MTAxRDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUM4Cis6MTAxRDkwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEM5Cis6MTAxREEwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTkwMDAwM0ZGRkI2Cis6MTAxREIwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEY3Cis6MTAxREMwMDAwMDAwMDI1NjAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMUI2Cis6MTAxREQwMDAwMDAwMDAxMDQwMjEwNjIwMDAwMDAwMDAwMDAwRkZGRjZFCis6MTAxREUwMDBDMDI4MEEyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDQyCis6MTAxREYwMDAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjAwMDAwMDAwMENCCis6MTAxRTAwMDAwMDAwMDAxMDQwMjExNjIwMDAwMDAwMDAwMDAwRkZGRjJECis6MTAxRTEwMDBDMDg4MUEyMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTRBCis6MTAxRTIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDM4Cis6MTAxRTMwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEQwMDAwMDAwMDMyCis6MTAxRTQwMDAwMDYwMDAwMDAwMDAwNjMxMDAwMDAwMDBDMDYwMDAwMERCCis6MTAxRTUwMDAwMDAwMDJBMzAwMDAwMDA1MDAyMDBBMkQwMDAwMDAwMDgxCis6MTAxRTYwMDAwMDAwMDAwODAwMjIwQTIyMDAwMDAwMDAwMDAwMDAyQkYxCis6MTAxRTcwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMUMwMDIwMUUyRDc0Cis6MTAxRTgwMDAwMDAwMDAwMDAwMDA3MDAwMDAyODFFMjcwMDAwMDAwMDc1Cis6MTAxRTkwMDAwMDAwMDAwMDAwMzExQ0U2MDAwMDAwMDAwMDAwMDAyQUU1Cis6MTAxRUEwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMEMwMDIyMUEyNjVECis6MTAxRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMDBECis6MTAxRUMwMDAwMDAwMDAwMDA2RTAwMDAwMDAwMDAyOTIwMDAwMDAwMDk4Cis6MTAxRUQwMDAwMDIwMUMxMTAwMDAwMDAwMDAwMDAwMDAwMDIwMEMxMTc4Cis6MTAxRUUwMDAwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjMwMDAwMDAwMDRFCis6MTAxRUYwMDAwMDAwMDAxMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAxRjAwMDAwMDY5MUNFMjAwMDAwMTJGOTM4MDAwMDAwMDIwNDQxMUIyCis6MTAxRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDUyCis6MTAxRjIwMDA5NTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTAxRjMwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDU1Cis6MTAxRjQwMDAwMDAwMDI5RDAwMDAwMDAxMDAzMzNFMkYwMDAwMDAwMDUxCis6MTAxRjUwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDA5MjAwMDAwMENFCis6MTAxRjYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEQ0Cis6MTAxRjcwMDAwMDAwMDAwMDAwMDAwMDFDMDA0MDM2MjcwMDAwMDAwMEE4Cis6MTAxRjgwMDAwMDAwMDAwQ0MwMjIwQTIwMDAwMDAwMDAwMDAwMDAyOTEwCis6MTAxRjkwMDAwMDIwMzYyMjAwMDAwMDAwMDAwMDAwMjhDMDQwMzYyMDRCCis6MTAxRkEwMDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDc2Cis6MTAxRkIwMDAwMDAwMDAwOTAwMjA0ODExMDAwMDAwMDBBMTAwMDAwMEZFCis6MTAxRkMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMUMyCis6MTAxRkQwMDAwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMDc1Cis6MTAxRkUwMDAwMDAwMDAwMDAwMkMxQ0UzMDAwMDAwMDAwMDAwMDAyMUE1Cis6MTAxRkYwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjIwMDIwMUUyREQ3Cis6MTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQzFDRTQwMDAwMDAwMEE0Cis6MTAyMDEwMDAwMDAwMDAyMjAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyM0ZFCis6MTAyMDIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBBMzUxCis6MTAyMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDRGCis6MTAyMDQwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyNENDCis6MTAyMDUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwCis6MTAyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDFGCis6MTAyMDcwMDAwMDAwMDAyNDAwODAzNjI3MDAwMDAwMDAwMDAwMDAyMTNFCis6MTAyMDgwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyNDNCCis6MTAyMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTMwMDAwMDAwMDUwCis6MTAyMEEwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAwMDkwCis6MTAyMEIwMDAwMDMxMUNDNDAwMDAwMDAwMDAwMDAwMjQwMDgwMzYyNzBFCis6MTAyMEMwMDAwMDAwMDAwMDAwMDAwMDFBMDAyMDM2MjcwMDAwMDAwMDc5Cis6MTAyMEQwMDAwMDAwMDAxQjAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxNzUwCis6MTAyMEUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyNzM5Cis6MTAyMEYwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDJEQzJFCis6MTAyMTAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyRDkwMDAwMDAxQTlBCis6MTAyMTEwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMUIwMDIwMzYyOEE5Cis6MTAyMTIwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMDJECis6MTAyMTMwMDAwMDAwMDAwMjAwMjEwMjI3MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAyMTQwMDAxNEUwMDAwMDAwMDAwMkQ5MDAwMDAwMDMwMDIxMDIyNzczCis6MTAyMTUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDJEQ0FECis6MTAyMTYwMDAwMDAwMDAyMzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAyMTcwMDAwMDJFMDBFMTAwMDAwMDAwMDAwMDAwMDAwMkMwMDAwMDhFCis6MTAyMTgwMDAwMDAwMDJEQzAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMEU1Cis6MTAyMTkwMDAwMDAwMDAwMDAwMzEyMEExMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyMUEwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDAwNkMwMDAwMDUzCis6MTAyMUIwMDAwMDAwMDJEQzAwMDAwMDI0MDAyMDFFMkQwMDAwMDAwMEIyCis6MTAyMUMwMDAwMDAwMDAwMDAwMkUwMEUyMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyMUQwMDAwMkMwMDAwMDAwMDAwMkRDMDAwMDAwMjIwMDIwMUUyREQyCis6MTAyMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMERDCis6MTAyMUYwMDAwMDAwMDAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAyMjAwMDAwNkMwMDAwMDAwMDAwMkRDMDAwMDAwMDAwMDYwMDAwMENBCis6MTAyMjEwMDAwMDAwMDY2ODAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCNTM5Cis6MTAyMjIwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAwMDhFCis6MTAyMjMwMDAwMDYwMDAwMDAwMDAwMkI1MDAwMDAwMDAwMDYwMDAwMDI3Cis6MTAyMjQwMDAwMDAwMDY1RjAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTA5Cis6MTAyMjUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTcwMDAwMDAwMDc1Cis6MTAyMjYwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMUEwMDIwMUUyREM5Cis6MTAyMjcwMDAwMDAwMDAwMDAwMDAwMDFCMDA4MDIyMkQwMDAwMDAwMDc0Cis6MTAyMjgwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMERCCis6MTAyMjkwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzU2Cis6MTAyMkEwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMEI3Cis6MTAyMkIwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAxMDE2Cis6MTAyMkMwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDk2Cis6MTAyMkQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDhFCis6MTAyMkUwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxMDA1Cis6MTAyMkYwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzgzCis6MTAyMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMDVDCis6MTAyMzEwMDAwMDAwMDAwMDAwMjk0ODQ3MDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAyMzIwMDAwMDMxMUNBMzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzQ2Cis6MTAyMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMEE1Cis6MTAyMzQwMDAwMDAwMDAwMDAwMzExQ0ExMDAwMDAwMDAwMDAwMDAxMDhGCis6MTAyMzUwMDAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg0NzVFCis6MTAyMzYwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMEZBCis6MTAyMzcwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAwMDAwRkZGRjRBCis6MTAyMzgwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzYyCis6MTAyMzkwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMENDCis6MTAyM0EwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDAwMDAwRkZGRjFDCis6MTAyM0IwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwN0QyCis6MTAyM0MwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDlBCis6MTAyM0QwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMTA0Cis6MTAyM0UwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMzMDhBMkMzCis6MTAyM0YwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDZCCis6MTAyNDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyNDEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzUzCis6MTAyNDIwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDM1Cis6MTAyNDMwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMUEzCis6MTAyNDQwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMwMDhBMjY1Cis6MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDBBCis6MTAyNDYwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAyNDcwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzcwCis6MTAyNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDM3Cis6MTAyNDkwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMENDCis6MTAyNEEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDM4MDhDNUFFCis6MTAyNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDA4NDEwMDAwMDAwMEEzCis6MTAyNEMwMDAwMDAwMDAwMTAwMjIwQTIyMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNEQwMDAwMDMzMDhBMjAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMkFECis6MTAyNEUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDc3Cis6MTAyNEYwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxN0VDCis6MTAyNTAwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDg4Cis6MTAyNTEwMDAwMDAwMDMxOEZGRkZGRkVGMDAyODA2MjEwMDAwMDAwMDY1Cis6MTAyNTIwMDAwMDAwMDAxNDAwMjAyMjJEMDAwMDAwMDAwMDAwRjhFMDUwCis6MTAyNTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwMUIzCis6MTAyNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDEwMDAwMDAwMEI4Cis6MTAyNTUwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAyNTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDgwNDgxMTA3Cis6MTAyNTcwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDdCCis6MTAyNTgwMDA5NzAwMDAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAyNTkwMDBDMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAzCis6MTAyNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEIyCis6MTAyNUIwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTAyNUMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUQxCis6MTAyNUQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEQzCis6MTAyNUUwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAyNUYwMDAwMEEwMDAwQTAwMDAwMDAwOTcwMDAwMDAwMDIwNDQxMTI1Cis6MTAyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDUxCis6MTAyNjEwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEJCCis6MTAyNjIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTNFCis6MTAyNjMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDcyCis6MTAyNjQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTAyNjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDZFCis6MTAyNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEMwCis6MTAyNjcwMDA5NzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyNjgwMDAwMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMUQyCis6MTAyNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEMxCis6MTAyNkEwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyNkIwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUUwCis6MTAyNkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEUyCis6MTAyNkQwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTAyNkUwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMEU1Cis6MTAyNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDMwCis6MTAyNzAwMDAwMDAwMjI1NzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0Q4Cis6MTAyNzEwMDBDMDQ4NEEyMDAwMDAwMDAwMDAwMDIyNUQwMDIwNDQxMTUzCis6MTAyNzIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDYxCis6MTAyNzMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDUwMDAwMDAwMEVFCis6MTAyNzQwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMUFFCis6MTAyNzUwMDAwMDAwMDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMEQyCis6MTAyNzYwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyNzcwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTFECis6MTAyNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjIwMDAwMDAwMEY2Cis6MTAyNzkwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyN0EwMDA0MDIwNDgwMDAwMDAwMDAwMDAwMDAwMDE0MDMwNEEyMEE2Cis6MTAyN0IwMDAwMDAwMDAwMDAwMDAwMDAyQzAzMDRBMjAwMDAwMDAwMEJECis6MTAyN0MwMDAwMDAwMDAwMTAwNTMwQTIyMDAwMDAzNEIwMDAwMDAzRkZDCis6MTAyN0QwMDBDMDI4MEEyMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUYxCis6MTAyN0UwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDZGCis6MTAyN0YwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxODMzCis6MTAyODAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTdDCis6MTAyODEwMDAwMDAwMDY4RDAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMEMxCis6MTAyODIwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzNTQwMDAwMDAxNDQ5Cis6MTAyODMwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDc5Cis6MTAyODQwMDAwMDAwMDM2NDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDdDCis6MTAyODUwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTJBNDM4Cis6MTAyODYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwMjQ5Cis6MTAyODcwMDAwMDAwMDM2RTAwMDAyMTAwMDAyMDQ0MTEwMDAwMDAwMDUxCis6MTAyODgwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTAyODkwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEU4Cis6MTAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMEUwCis6MTAyOEIwMDAwMDAwMDAwNDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEMxCis6MTAyOEMwMDAwQ0MwMDAwMDAwMDAwMzZBMDAwMDIwMTAwMDIwNDQxMTJBCis6MTAyOEQwMDAwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMEZGCis6MTAyOEUwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDJDCis6MTAyOEYwMDAwMDQwNDgwMjAwMDAwMzVGMDAwMDAwMjgwMDJGMDIyMjcxCis6MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDVDMDM2Cis6MTAyOTEwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEZCCis6MTAyOTIwMDAwMDQwNDgwMjAwMDAwMzVGMDAwMDAwMkMwMDIwMzYyNjEzCis6MTAyOTMwMDAwMDAwMDAwMDAwMDAwMDQ5MDAyMDE4MTEwMDAwMDAwMDA1Cis6MTAyOTQwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMUNFCis6MTAyOTUwMDAwMDMzMUEyNjAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNkFECis6MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDM3MDI4Cis6MTAyOTcwMDAwMDAwMDAyQzAwODAxQTJEMDAwMDAwMDAwMDAwMDAzRjI1Cis6MTAyOTgwMDBDMDI4MEEyMDAwMDAwMDAwMDAwMDAwMTUwMDJGMDIyMkNECis6MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDM4NkMyCis6MTAyOUEwMDAwMDAwMDAwNjAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyOUIwMDAwQ0UwMDAwMDAwMDAwM0IxMDAwMDAwMTYwMDJGMDIyMjBFCis6MTAyOUMwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNCNTYzCis6MTAyOUQwMDAwMDAwMDAyMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAyOUUwMDAwQ0UwMDAwMDAwMDAwMzlDMDAwMDAwMEYwMDJGMDIyMkZBCis6MTAyOUYwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNBODQwCis6MTAyQTAwMDAwMDAwMDAxMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAyQTEwMDAwQ0UwMDAwMDAwMDAwM0E4MDAwMDAwMUUwMDJGMDIyMkFFCis6MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDM5MDI3Cis6MTAyQTMwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMERCCis6MTAyQTQwMDAwMDQwNDgwMjAwMDAwMDAwMDgwMDAwMDAwMDI5MEEyMjlGCis6MTAyQTUwMDAwMDAwMDAwMDAwMDAwMDAzNDAyMTBFMjAwMDAwMDAwMEU0Cis6MTAyQTYwMDAwMDAwMDAwQ0MwMjExMjIwMDAwMDAwMDAwMDA4MDAwMDNGCis6MTAyQTcwMDAwMDI4MTIyNDAwMDAwMDAwMDAwMDAwMTRDMDIyMTYyMENDCis6MTAyQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTE0QTQwMDAwMDAwMDY1Cis6MTAyQTkwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAyQUEwMDAwMDI5NDhBMjAwMDAwMDAwMDAwMEExRkUwMDIwNDQxMUZGCis6MTAyQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDMwMDAwMDAwMDhCCis6MTAyQUMwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTBGCis6MTAyQUQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMUVGCis6MTAyQUUwMDAwMDAwMDAwMDAwMDAwMDE2MDAyMDQ4MTEwMDAwMDAwMDU3Cis6MTAyQUYwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2OEQwMDAwMDAxNTVCCis6MTAyQjAwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDdFCis6MTAyQjEwMDAwMDAwMDM5MjAwMDAyMTBFMDAyMDQ0MTEwMDAwMDAwMDdDCis6MTAyQjIwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyQjMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMUIyCis6MTAyQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMEZCCis6MTAyQjUwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTdFCis6MTAyQjYwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTVFCis6MTAyQjcwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDQ4MTEwMDAwMDAwMEM1Cis6MTAyQjgwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2OEQwMDAwMDAwM0RDCis6MTAyQjkwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMEVFCis6MTAyQkEwMDAwMDAwMDM5RTAwMDAyMTA4MDAyMDQ0MTEwMDAwMDAwMEU2Cis6MTAyQkIwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAyQkMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTIyCis6MTAyQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMDZCCis6MTAyQkUwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDJBCis6MTAyQkYwMDAwMDIwNDgwMjAwMDAwMDAwODAwMDAwMDAwMDIwNDQxMTc2Cis6MTAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDRCCis6MTAyQzEwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMEFFCis6MTAyQzIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMEZCCis6MTAyQzMwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNBRTBGCis6MTAyQzQwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMjAxMDE0Cis6MTAyQzUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTA2Cis6MTAyQzYwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMEE4Cis6MTAyQzcwMDAwMDAwMDAwNjAwNDA0ODExMDAwMDAwMDAwMDAwMjAxMDg1Cis6MTAyQzgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMUQ2Cis6MTAyQzkwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDc4Cis6MTAyQ0EwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNkUwMDAwMDAwMEU0Cis6MTAyQ0IwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDgwMEVDCis6MTAyQ0MwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDE4Cis6MTAyQ0QwMDAwMDAwMDAxRDAwMjEwMjIzMDAwMDAwMDAwMDAwMDAwMDkxCis6MTAyQ0UwMDAxNEUwMDAwMDAwMDAwM0NFODEwMDAwMDAwMDIwNDQxMTI5Cis6MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDVBCis6MTAyRDAwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxODFECis6MTAyRDEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTY3Cis6MTAyRDIwMDAwMDAwMDY4RDAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMEFDCis6MTAyRDMwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzQzAwMDAwMjEwMEJCCis6MTAyRDQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMkE0Cis6MTAyRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDA4Cis6MTAyRDYwMDBCQUJFQ0FGRTAwMjA0ODExMDAwMDAwMDBDQUZFQkFCRTZBCis6MTAyRDcwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIwMTAwMDIwNDQxMTM1Cis6MTAyRDgwMDAwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDRBCis6MTAyRDkwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNDc0Cis6MTAyREEwMDAwMDQwNDgxMTAwMDAwMDAwMDAwMDIxNzAwMDIwNDQxMTg0Cis6MTAyREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMEE5Cis6MTAyREMwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDA4MTAwMDAwMDE3Cis6MTAyREQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMEEwMDIwNDgxMUZCCis6MTAyREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTAwMDAwMDAwMEIzCis6MTAyREYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzRDM4QzAwMDAwMDlECis6MTAyRTAwMDAwMDIwNDQxMTAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMTc0Cis6MTAyRTEwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAyRTIwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwM0ZGRkVBCis6MTAyRTMwMDA0MDI4MEEyMDAwMDAwMDAwODAwMDAwMDA0MDI4MEUyMEVBCis6MTAyRTQwMDAwMDAwMDAwMDQwMDAwMDAwQzAyODEyMjAwMDAwMDAwMDI4Cis6MTAyRTUwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2OEQwMDAwMDAwMDBBCis6MTAyRTYwMDAwMDIwMTQxMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyM0NBCis6MTAyRTcwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDNFMUEyCis6MTAyRTgwMDAwMDAwMDAwMEMwNDAxODAwMDAwMDAzRTQwMDAwM0ZGRjA1Cis6MTAyRTkwMDBDMDI4MUEyMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNjM3Cis6MTAyRUEwMDAwMDAwMDY4RDAwMDAwMDAwMDAyMDE4MTAwMDAwMDAwMDQ3Cis6MTAyRUIwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMEJECis6MTAyRUMwMDAwQ0MwMDAwMDAwMDAwM0U3MDAwMDAwMDBDMDQwMUMwMDMwCis6MTAyRUQwMDAwMDAwMDNFQTAwMDAzRkZGQzAyODFFMjAwMDAwMDAwMEExCis6MTAyRUUwMDAwMDA0MDAwMDAwNjk0NjI3MDAwMDA2OEQwMDAwMDAwMDc1Cis6MTAyRUYwMDAwMDIwMUMxMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDQwMjIwCis6MTAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODIwQzUwMDAwMDAwMEI0Cis6MTAyRjEwMDAwMDAwMDAwMDAwNDk0OEU4MDAwMDAwMDBBNTgwMDAwMDEzCis6MTAyRjIwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMDIwMDAwMDIwMEMxMTBCCis6MTAyRjMwMDAwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTEwMDAwMDQxMjQzCis6MTAyRjQwMDAwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDAwMDAwMDAwMDFCCis6MTAyRjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA0MDIwNDgwMEExCis6MTAyRjYwMDAwMDAwMDAwMDAwMDAwMDFGQzAyMTAyMjAwMDAwMDAwMDNGCis6MTAyRjcwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzRjcwMDAwMjAxMDUzCis6MTAyRjgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMUQzCis6MTAyRjkwMDAwMDAwMDAwMDAwMDBGRkZGQzA0ODEyMjAwMDAwMDNGRkY3Cis6MTAyRkEwMDBBNzgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwQTAwMDIxCis6MTAyRkIwMDAwMDIwMEMxMTAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTlDCis6MTAyRkMwMDAwMDAwMDQxMjAwMDAwMDAwMDAyMDQ0MDIwMDAwMDAwMDg1Cis6MTAyRkQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAyRkUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEZGRkZDMDI4MTIyMEExCis6MTAyRkYwMDAwMDAwMDAwMDgzMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ5Cis6MTAzMDAwMDAwMDAwMDAwMDAwMzA0ODgzMDAwMDAwMDA4NDAwMDAwMDQxCis6MTAzMDEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDEzCis6MTAzMDIwMDAwMDAwMDAwMDAwMDAwMDAwMUQwMDAwMDAwMDAwMDAwMDgzCis6MTAzMDMwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDA0MTIwMDAwMDAwMDQyCis6MTAzMDQwMDBDMDQwMDQwMDAwMDAwMDAxQTk4MDAwMDAwMDIwMDgxMTE5Cis6MTAzMDUwMDAwMDAwMDAwMDAwMDBDMDAwMDA0MDBDMTEwMDAwMDNGQTU2Cis6MTAzMDYwMDBBQjgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjhFMDI0Cis6MTAzMDcwMDAwMDQwMEMxMTAwMDAwM0ZBQUQ4MDAwMDAwMDIwMDgxMTkwCis6MTAzMDgwMDAwMDAwMDAwMDAwMDBGODgwMDA0MDBDMTEwMDAwMDNGQTZFCis6MTAzMDkwMDBCMzgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjNGQ0Q1Cis6MTAzMEEwMDAwMDQwMEMxMTAwMDAwM0ZBQUY4MDAwMDAwMDIwMDgxMTVFCis6MTAzMEIwMDAwMDAwMDAwMDAwMDBFMDAwMDA0MDBDMTEwMDAwMDNGQUQ2Cis6MTAzMEMwMDBCMTgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjAwMEE2Cis6MTAzMEQwMDAwMDQwMEMxMTAwMDAwM0ZBODMwMDAwMDAwMDIwNDQxMTlFCis6MTAzMEUwMDAwMDAwMDAwMDAwMDAyMTQ4MDAyMDQ4MTEwMDAwMDAwMEZFCis6MTAzMEYwMDA4NDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTAzMTAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMDAwMDdBCis6MTAzMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDJGCis6MTAzMTIwMDAwMTE4MjAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAzMTMwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDhBCis6MTAzMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEQ1Cis6MTAzMTUwMDAwMjE4QTAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAzMTYwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDVBCis6MTAzMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEE1Cis6MTAzMTgwMDAwMzE4QzAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAzMTkwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDJBCis6MTAzMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDc1Cis6MTAzMUIwMDAwNDE4RjhFMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAzMUMwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMEZBCis6MTAzMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDQ1Cis6MTAzMUUwMDAwNTE4Rjg4MEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAzMUYwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMENBCis6MTAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDE0Cis6MTAzMjEwMDAwNjE4RTAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTAzMjIwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDk5Cis6MTAzMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEU0Cis6MTAzMjQwMDAwNzE4RjAwMEMwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAzMjUwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDY5Cis6MTAzMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEI0Cis6MTAzMjcwMDAwODE4RjNGQ0MwMzA0NjIwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAzMjgwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDM5Cis6MTAzMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDg0Cis6MTAzMkEwMDAwMDAwMDAzMDAwMjAwQTJEMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAzMkIwMDBDMDI5MEM0MDAwMDAwMDAwMDAwMDAwMzAwMDIwMzYyMzMwCis6MTAzMkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDFBCis6MTAzMkQwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA4NjAwMDAwMEJFCis6MTAzMkUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMUUwCis6MTAzMkYwMDAwMDAwMDAwMDg1MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDE0Cis6MTAzMzAwMDAwMDAwMDAwMDAwNDA0ODAxMDAwMDAwMDAwMDAwMjE3Qzk3Cis6MTAzMzEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTg0MDIxMDIyMDlECis6MTAzMzIwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDQ0NTgwCis6MTAzMzMwMDAwMDgwMDAwMEMwNDk0QTIwMDAwMDA0NDYwMDAwMDAwMDUwCis6MTAzMzQwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDJECis6MTAzMzUwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDQ1Cis6MTAzMzYwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTY2Cis6MTAzMzcwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBDMDIwMDgwMEVDCis6MTAzMzgwMDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDI2Cis6MTAzMzkwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2OEQwMDAwMDAxRjIyCis6MTAzM0EwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEY2Cis6MTAzM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDRDMDIwMDAwMDQ0QjMwCis6MTAzM0MwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAzM0QwMDBDMDIwMTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTQwMDA5Cis6MTAzM0UwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDE4MDAwMDAwMDAwMEU1Cis6MTAzM0YwMDAwMDAwMDAwMEMwMjAxQzAwMDAwMDAwMDAwMDAwN0YwMDUyCis6MTAzNDAwMDAwMDI4MEEyMTAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMkQxCis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ1OTYzCis6MTAzNDIwMDAwMDAwMDAwMEMwMjAyMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTAzNDMwMDAxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDI4MEEyMzEwCis6MTAzNDQwMDAwMDAwMDAwMDAwMDAwMDEwMDAyRjAyMjIwMDAwMDAwMDE5Cis6MTAzNDUwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NjE4MTAwMDAwMDlBCis6MTAzNDYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTZECis6MTAzNDcwMDAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjQwMDAwMDY4REUyCis6MTAzNDgwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0NjY4MTAwMDAwMDExCis6MTAzNDkwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTNFCis6MTAzNEEwMDAwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDE5Cis6MTAzNEIwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMEEwCis6MTAzNEMwMDAwMDYwNDgwNTAwMDAwNjkyMDAwMDAwMDAwMDI4MjRGMDdCCis6MTAzNEQwMDAwMDAwMDAwMDAwMDAwMDA3MDAyODBBMjMwMDAwMDAwMDkwCis6MTAzNEUwMDAwMDAwMDAwMTAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAzNEYwMDAwQUUwMDAwMDAwMDAwNDZEMDAwMDAwMDAwMDJGMDBDOTc5Cis6MTAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFMDAwMDAwMDAwMDQ4NjRECis6MTAzNTEwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OTMwMDAwMDAwMkQyCis6MTAzNTIwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDVFCis6MTAzNTMwMDAwMDAwMDQ3MjAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDFECis6MTAzNTQwMDAwMDAwMDAwMDAyRTAwMDAwMDAwMDA0ODYwMDAwMDAwMDBGCis6MTAzNTUwMDAwMDQwMDAwMDAwMDAwNDkzMDAwMDAwMDMwMDJGMDIyMjNFCis6MTAzNTYwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ3N0Y2Cis6MTAzNTcwMDAwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAzNTgwMDAwQ0UwMDAwMDAwMDAwNDg2MDAwMDAwMDAwMDQwMDAwMDg1Cis6MTAzNTkwMDAwMDAwMDQ5MzAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMDNECis6MTAzNUEwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0N0MwMDAwMDAwMEIxCis6MTAzNUIwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDI5Cis6MTAzNUMwMDAwMDAwMDQ4NjAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5MzlBCis6MTAzNUQwMDAwMDAwMDAwNTAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAzNUUwMDAwQUUwMDAwMDAwMDAwNDgxMDAwMDAwMDAwMDJGMDBDOTc0Cis6MTAzNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDQ4NjVCCis6MTAzNjAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OTMwMDAwMDAwNkRECis6MTAzNjEwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDZECis6MTAzNjIwMDAwMDAwMDQ4NjAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDE4Cis6MTAzNjMwMDAwMDAwMDAwMDA4RTAwMDAwMDAwMDA0ODYwMDAwMDAwMDE4Cis6MTAzNjQwMDAwMDQwMDAwMDAwMDAwNDkzMDAwMDdGMDAwMDI4MEEyMUQxCis6MTAzNjUwMDAwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMEQyCis6MTAzNjYwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwODY4Cis6MTAzNjcwMDAwMDIxMEEyMzAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDI4Cis6MTAzNjgwMDAwMDAwMDQ5MDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMEE3Cis6MTAzNjkwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAzNkEwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMENBCis6MTAzNkIwMDAwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMDMxCis6MTAzNkMwMDAwMDAwMDAwMEMwMjA0NDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTAzNkQwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMEMyCis6MTAzNkUwMDAwMDAwMDAwMDAwMDA3RjAwMDAyODBBMjEwMDAwMDAwMDA4Cis6MTAzNkYwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDMyCis6MTAzNzAwMDAwQUUwMDAwMDAwMDAwNDk5MDAwMDAwMDBDMDIwMDAwMDUyCis6MTAzNzEwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMEM5Cis6MTAzNzIwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAzNzMwMDAwMDQwNEMwODAwMDAwNDU5MDAwMDAwMDBDMDIwMDgwMEIwCis6MTAzNzQwMDAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMERBCis6MTAzNzUwMDAwMDAwMDAxMTQwMjExMjIwMDAwMDAwMDAwMDAwMDAxMkIzCis6MTAzNzYwMDA0MDIxMTYyMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMUMzCis6MTAzNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMERGCis6MTAzNzgwMDAwMDAwMDAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMEYxCis6MTAzNzkwMDAxNEUwMDAwMDAwMDAwNEEzMDAwNDAwMDBDMDQ5NEEyMDE3Cis6MTAzN0EwMDAwMDAwMDRBNEZGRkJGRkZGQzAyODRBMjAwMDAwMDAwMDI3Cis6MTAzN0IwMDAwMDAwMDAwMDAwMjEwMjIzMDAwMDAwMDAwMDAwMDAwMEMzCis6MTAzN0MwMDAxNEUwMDAwMDAwMDAwNEIwMDAwMDAwMDBDMDIwNDgwMDI5Cis6MTAzN0QwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEMxCis6MTAzN0UwMDAwMDAwMDAwMDAwMjEwMjI0MDAwMDAwMDAwMDAwMDAwMDkyCis6MTAzN0YwMDAxNEMwMDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUZGCis6MTAzODAwMDAwMDAwMDAwMDAwMDAwMDBDMDAyMDQ4MTEwMDAwMDAwMDMzCis6MTAzODEwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTAzODIwMDAxNEMwMDAwMDAwMDAwNEFDQTAwMDAwMDAwMDIwNDQxMUZGCis6MTAzODMwMDAwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMEFGCis6MTAzODQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNDdFCis6MTAzODUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkIwMDIwNDQxMUVFCis6MTAzODYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMDIwCis6MTAzODcwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNTRECis6MTAzODgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkMwMDIwNDQxMUJECis6MTAzODkwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMEYwCis6MTAzOEEwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMEMzCis6MTAzOEIwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMERDCis6MTAzOEMwMDAwMDAwMDRBQTAwMDAwMDAwQzAyMTBBMjAwMDAwMDAwMDNGCis6MTAzOEQwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0QzM4MTAwMDAwMENDCis6MTAzOEUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUVBCis6MTAzOEYwMDAwMDAwMDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMEM1Cis6MTAzOTAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTAzOTEwMDBDMDYwNDgwMDAwMDAwNjkyMDAwMDAwMDAwMDQwMDAwMDY3Cis6MTAzOTIwMDAwMDAwMDRDNzgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ2Cis6MTAzOTMwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MDAwMDA5Cis6MTAzOTQwMDBDMDI5NDYyMDAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMDA4Cis6MTAzOTUwMDAwMDAwMDY4RDAwMDAwMDAxMDAyMTAyMjIwMDAwMDAwMDhFCis6MTAzOTYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0Q0UwMDAwMjE2OTI3Cis6MTAzOTcwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEFBCis6MTAzOTgwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDBGCis6MTAzOTkwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBDQUZFQkFCRTZGCis6MTAzOUEwMDAwMDQwNDgxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDQwMDVBCis6MTAzOUIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MTAwMDAwMDAwMEFGCis6MTAzOUMwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwCis6MTAzOUQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMUUwCis6MTAzOUUwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDUwCis6MTAzOUYwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2OEQwMDAwMDAwMDYxCis6MTAzQTAwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDhGCis6MTAzQTEwMDAwMDAwMDREMDAwMDAyMTgwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAzQTIwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAzQTMwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDdFCis6MTAzQTQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDk2Cis6MTAzQTUwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMzFCCis6MTAzQTYwMDAwMDMzM0UyRjAwMDAwMDAwMDAwMDAwMDEwMDIxMDIyMTcxCis6MTAzQTcwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDUwMDRECis6MTAzQTgwMDAwMDAwMDAyQzAwMjAwQTJEMDAwMDAwMDAwMDA0MDAwMEFGCis6MTAzQTkwMDAxOEUwMEMxMTAwMDAwNEVGMDAwMDAwMDEwMDMzM0UyRjdECis6MTAzQUEwMDAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDE3Cis6MTAzQUIwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDlDCis6MTAzQUMwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjI3Cis6MTAzQUQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEJFCis6MTAzQUUwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMjE2OTI0Cis6MTAzQUYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMkU3Cis6MTAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDRBCis6MTAzQjEwMDAwMDAwMDAwODAwMzAwQTIyMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAzQjIwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBEOEMwNDgwMDhECis6MTAzQjMwMDAwMDAwMDRFMzAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDlGCis6MTAzQjQwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDBCCis6MTAzQjUwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjk2Cis6MTAzQjYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDJECis6MTAzQjcwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAyREYwCis6MTAzQjgwMDAwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDAwMDI5MEM4MzFFCis6MTAzQjkwMDAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDI2Cis6MTAzQkEwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAzQkIwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjM2Cis6MTAzQkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMENECis6MTAzQkQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAxMUFDCis6MTAzQkUwMDAwMDIxMDIyNDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEJBCis6MTAzQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDRBQUQ3Cis6MTAzQzAwMDAwMDAwMDAyQ0MwMjAzNjIwMDAwMDAwMDAwMDAwMDAyRDI1Cis6MTAzQzEwMDBDMDQwMzYyMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyMUZCCis6MTAzQzIwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDUwNUI2Cis6MTAzQzMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDE5Cis6MTAzQzQwMDBEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDQwMDk3Cis6MTAzQzUwMDAwMDAwMDAwMUI1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDM5Cis6MTAzQzYwMDAwMDAwMjAwMDAwMjA0ODExMDAwMDAwMDBCNjAwMDAwMDA1Cis6MTAzQzcwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEEwMDAwMDIwNDgxMUI2Cis6MTAzQzgwMDAwMDAwMDAwMEI3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDA4Cis6MTAzQzkwMDAwMDAwQzAwMDAwMjA0ODExMDAwMDAwMDBCODAwMDAwMDMzCis6MTAzQ0EwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEY4RTAwMDIwNDgxMTRFCis6MTAzQ0IwMDAwMDAwMDAwMEI5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ2Cis6MTAzQ0MwMDAwMDAwRjg4MDAwMjA0ODExMDAwMDAwMDBCQTAwMDAwMDQ5Cis6MTAzQ0QwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEUwMDAwMDIwNDgxMTE2Cis6MTAzQ0UwMDAwMDAwMDAwMEJCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEE0Cis6MTAzQ0YwMDAwMDAwRjAwMDAwMjA0ODExMDAwMDAwMDBCQzAwMDAwMDlGCis6MTAzRDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEYzRkMwMDIwNDgxMUQ2Cis6MTAzRDEwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEFECis6MTAzRDIwMDAwMDAwMDAwMjAwMjA0ODExMDAwMDAwMDAwMDAwMDBGRjE5Cis6MTAzRDMwMDAwMDI4MEUzMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyM0M5Cis6MTAzRDQwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDUxOTg5Cis6MTAzRDUwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAzRDYwMDAxNEMwMDAwMDAwMDAwNTJFMDAwMDAwMDAwMDIwMEMxMTBGCis6MTAzRDcwMDAwMDAwMDAwMDAwMDAwMDFDMDAyMDM2MjMwMDAwMDAwMEFFCis6MTAzRDgwMDAwMDAwMDAyQjAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyOTY2Cis6MTAzRDkwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjgwMDIwMzYyMzA5Cis6MTAzREEwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDM2MjMwMDAwMDAwMDgzCis6MTAzREIwMDAwMDAwMDAyNTAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNjNGCis6MTAzREMwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMTUwMDIwMzYyM0VDCis6MTAzREQwMDAwMDAwMDAwMDAwMDAwMDE2MDAyMDM2MjMwMDAwMDAwMDU0Cis6MTAzREUwMDBGRkZGRTAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAyMTk3Cis6MTAzREYwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyM0FGCis6MTAzRTAwMDAwMDAwMDAwMDAwMDAxRkZGMDAyMDBDMTEwMDAwMDAwMDU3Cis6MTAzRTEwMDAwMDAwMDAyMzAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNEUyCis6MTAzRTIwMDAwMDIwMzYyMzAwMDAwMDAwRjFGRkZGRkYwMDI4M0EyRTlCCis6MTAzRTMwMDAwMDAwMDAwMDAwMDAwMDFBQzAyMjBFMjAwMDAwMDAwMDU4Cis6MTAzRTQwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDA4MTAwMDAwMDIyCis6MTAzRTUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTZFCis6MTAzRTYwMDAwMDAwMDAwMDAwMDAwMDJBNDAyMDM2MjAwMDAwMDAwMDcyCis6MTAzRTcwMDA4NzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTAzRTgwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRjQwMDIwNDQxMTAwCis6MTAzRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMEFBCis6MTAzRUEwMDAwMDAwMDAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAzMEE1Cis6MTAzRUIwMDAwMDIwMzYyMzAwMDAwMDAwOUQwMDAwMDAwMDIwNDQxMTc3Cis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDFGNDAyMTRBMjAwMDAwMDAwMDA4Cis6MTAzRUQwMDA5NjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTAzRUUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMEMwMEJFCis6MTAzRUYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDEwMDAwMDAwMDAwMEQyCis6MTAzRjAwMDAwMDAwMDAxRjAwMjExNjI0MDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAzRjEwMDAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMzYyMzM3Cis6MTAzRjIwMDAwMDAwMDAwMDAwMDAwMDAzMDAyODFFMjMwMDAwMDAwMDI1Cis6MTAzRjMwMDAwMDAwMDAwODAwMjIyMjIzMDAwMDAwMDBGRkZGRjAwMDI0Cis6MTAzRjQwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDI5MjBFOENFCis6MTAzRjUwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMDM2MjgwMDAwMDAwMEM0Cis6MTAzRjYwMDAwMDAwMDAxODAwMjExRTIzMDAwMDAwMDAwMDAwMDAyMEI3Cis6MTAzRjcwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMDIwMDIyMTYyNDY2Cis6MTAzRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDE0QTgwMDAwMDAwMDQ1Cis6MTAzRjkwMDAwMDAwMDAxRTAwMjAzNjI1MDAwMDAwMDAwMDAwMDAwMzg1Cis6MTAzRkEwMDAwMDIxMUEyNDAwMDAwMDAwMTAwMDAwMDAwMDI4MUEyNjNBCis6MTAzRkIwMDAwMDAwMDAwMEVGRkZGRkZGMDAyODNBMkUwMDAwMDAwMDg1Cis6MTAzRkMwMDAwMDAwMDAwMDAwNDkzOENFMDAwMDA2N0IwMDAwMDAwMTIwCis6MTAzRkQwMDA0MDI4MEEyMDAwMDAwMDAwMDAwMDAwMDY0MDI4MEUyMEIzCis6MTAzRkUwMDAwMDAwMDAwMDAwMDAwMzAwQzAyODEyMjAwMDAwMDAwMEI0Cis6MTAzRkYwMDAwMDAwMDAwODAwMjExMjI0MDAwMDAwMDAwMDAwMDAwMDYyCis6MTA0MDAwMDBDMDIwMTYyMDAwMDAwMDAwMDAwMDAwMDBDMDIwMUEyMDgwCis6MTA0MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTAyMjIwMDAwMDAwMDVCCis6MTA0MDIwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA1NjY4MTAwMDAwMEQwCis6MTA0MDMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTkxCis6MTA0MDQwMDAwMDAwMDAwMDAwMDAyMjU4MDAzMDBBMjQwMDAwMDAwMDk4Cis6MTA0MDUwMDAwMDA0MDAwMDAwNjk0NjIyMDAwMDA2OEQwMDAwMjE2OTZFCis6MTA0MDYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNTZFCis6MTA0MDcwMDAwMDAwMDAwMDAwMDIwMDAwMDAyOTRBMjYwMDAwMDAwMEE1Cis6MTA0MDgwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBDQUZFQkFCRTc4Cis6MTA0MDkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDIwMDJGMDIyMzUxCis6MTA0MEEwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2RUQxCis6MTA0MEIwMDAwMDAwMDAwMEMwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTA0MEMwMDBDMDQwMDAwMDAwMDAwNTdDMDAwMDAwMDIwMDJGMDIyMzE5Cis6MTA0MEQwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2RUExCis6MTA0MEUwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUQ5Cis6MTA0MEYwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTgwMDMwMEEyNDZGCis6MTA0MTAwMDAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY4RDQ3Cis6MTA0MTEwMDAwMDAwMDAwMEMwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTA0MTIwMDBDMDQwMDAwMDAwMDAwNTdDMDAwMDAwMDAwMDJGMDIyM0JBCis6MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU3MjNDCis6MTA0MTQwMDAwMDAwMDAwMEMwMjAxQzAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTA0MTUwMDBDMDQwMDAwMDAwMDAwNTdDMDAwMDAwMDQwMDJGMDIyMzg2Cis6MTA0MTYwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU3QTA0Cis6MTA0MTcwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0MTgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMUIzCis6MTA0MTkwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEY3Cis6MTA0MUEwMDAwMDAwMDAwMEMwNjA0ODAwMDAwMDA2OTIwMDAwMDAwMDBGCis6MTA0MUIwMDAwMDQwMUMxMDAwMDAwNTdDMDAwMDAwMDBDMDIwMDAwMDMyCis6MTA0MUMwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDAwMEVGCis6MTA0MUQwMDAwMDAwMDAwMDBFRTAwMDAwMDAwMDA1N0UwMDAwMDAwMDZFCis6MTA0MUUwMDAwMDYwMDAwMDAwMDAwNUM5MDAwMDAwMDAwMDJGMDIyNDRDCis6MTA0MUYwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU4RjVGCis6MTA0MjAwMDAwMDAwQTJCNzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA0MjEwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTM5Cis6MTA0MjIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDE0Cis6MTA0MjMwMDAwMDA0QTJCNjAwNjA0NDExMDAwMDA2OEQwMDAwMDAxQUMwCis6MTA0MjQwMDAwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMDdECis6MTA0MjUwMDAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4REVFCis6MTA0MjYwMDAwMDAwQTJDNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDczCis6MTA0MjcwMDAwMDMwNDhFOTAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMEZECis6MTA0MjgwMDAwMDAwMDU4RDAwMDBBMkQxMDAyMDQ0MTEwMDAwMDAwMEI0Cis6MTA0MjkwMDAwMDAwMDAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJEMTFCCis6MTA0MkEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyOEQ2Cis6MTA0MkIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjQwMDAwMDAwMEE4Cis6MTA0MkMwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1QTAwMDAwQTJCQjIwCis6MTA0MkQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwN0ZBCis6MTA0MkUwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQ4Cis6MTA0MkYwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0QTJCQUU0Cis6MTA0MzAwMDAwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMUEwMDIxMjIzMEQ4Cis6MTA0MzEwMDAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDFGCis6MTA0MzIwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEQwMDAwQTJDNUI2Cis6MTA0MzMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOUE3Cis6MTA0MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU5RUVBCis6MTA0MzUwMDAwMDAwQTJEMjAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTA0MzYwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDIwMDIwNDQxMUQ0Cis6MTA0MzcwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDdBCis6MTA0MzgwMDAwMDAwMDAwMjAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTA0MzkwMDAwQ0MwMDAwMDAwMDAwNUIxMDAwMEEyQkYwMDIwNDQxMUM1Cis6MTA0M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDlFCis6MTA0M0IwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTA2Cis6MTA0M0MwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQkUwMDYwNDQxMTVCCis6MTA0M0QwMDAwMDAwMDY4RDAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMEJECis6MTA0M0UwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDAwMDA0MjAwNDI3Cis6MTA0M0YwMDAwMDYwNDQxMTAwMDAwNjhEMDAwMEEyQzYwMDIwNDQxMTk4Cis6MTA0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMDRCCis6MTA0NDEwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1QUYwMDAwQTJEMzkzCis6MTA0NDIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwODg3Cis6MTA0NDMwMDAwMDAwMDAwMDAwMDBBMkQzMDAyMDQ0MTEwMDAwMDAwMDkyCis6MTA0NDQwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDAwMDAwQTJDMzQ0Cis6MTA0NDUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzc4Cis6MTA0NDYwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDU2Cis6MTA0NDcwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0QTJDMjVBCis6MTA0NDgwMDAwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMUEwMDIxMjIzMDU3Cis6MTA0NDkwMDAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDlFCis6MTA0NEEwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEQwMDAwQTJDNzMzCis6MTA0NEIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTI2Cis6MTA0NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDVCRTQ5Cis6MTA0NEQwMDAwMDAwQTJENDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEYxCis6MTA0NEUwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDQwMDIwNDQxMTUxCis6MTA0NEYwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMEY5Cis6MTA0NTAwMDA4NTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEIxCis6MTA0NTEwMDAwMDIwNDgwMTAwMDAwMDAwMDAwMDMwNEEwMDIwNDQxMTQzCis6MTA0NTIwMDAwMDAwMDAwMDAxMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDExCis6MTA0NTMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA1QzRBNDAwMDAwMENFCis6MTA0NTQwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMEVFCis6MTA0NTUwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDVDOTZECis6MTA0NTYwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAyQzFBCis6MTA0NTcwMDAwMDIwMzYyMTAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUNFCis6MTA0NTgwMDAwMDAwMDAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMEFDCis6MTA0NTkwMDAwMDAwMDAwMDAwMkYwMjMwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTA0NUEwMDAwQ0MwMDAwMDAwMDAwNUQwMDAwMDAwMDAwMDIwMDQxMTM1Cis6MTA0NUIwMDAwMDAwMDAwMDAwMDAwMDMwMDA0MDM2MjEwMDAwMDVFMzRDCis6MTA0NUMwMDAwMDAwMDAzMDAwMjAwNjJEMDAwMDAwMDAwMDAwN0UwMEVBCis6MTA0NUQwMDAwMDI4MDYyMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTNBCis6MTA0NUUwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDVFM0Y3Cis6MTA0NUYwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUM0Cis6MTA0NjAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNEEwOTIwMDYwNDQxMTQ2Cis6MTA0NjEwMDAwMDAwMDY4RDAwMDAwMDMxMDAyMDM2MzAwMDAwMDAwMDUwCis6MTA0NjIwMDAwMDA0QTA5MzAwNjA0NDExMDAwMDA2OEQwMDAwMDAzMkQ5Cis6MTA0NjMwMDAwMDIwMzYzMDAwMDAwMDAwMDAwNEEyQjYwMDYwNDQxMUUzCis6MTA0NjQwMDAwMDAwMDY4RDAwMDAwMDMzMDAyMDM2MzAwMDAwMDAwMDFFCis6MTA0NjUwMDAwMDA0QTJCQTAwNjA0NDExMDAwMDA2OEQwMDAwMDAzNDdFCis6MTA0NjYwMDAwMDIwMzYzMDAwMDAwMDAwMDAwNEEyQkUwMDYwNDQxMUFCCis6MTA0NjcwMDAwMDAwMDY4RDAwMDAwMDM1MDAyMDM2MzAwMDAwMDAwMEVDCis6MTA0NjgwMDAwMDA0QTJDMjAwNjA0NDExMDAwMDA2OEQwMDAwMDAzNjQ0Cis6MTA0NjkwMDAwMDIwMzYzMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMUI3Cis6MTA0NkEwMDAwMDAwMDY4RDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMEJCCis6MTA0NkIwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAzRjAzCis6MTA0NkMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMUI5Cis6MTA0NkQwMDAwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDIyCis6MTA0NkUwMDAwMDAwMDAwNTAwMjA0ODExMDAwMDAwMDAwMDAwQTFGNEI3Cis6MTA0NkYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUNDCis6MTA0NzAwMDAwMDAwMDAwMDg4MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEFDCis6MTA0NzEwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA4MTAwMDAwMDlFCis6MTA0NzIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTk1Cis6MTA0NzMwMDAwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMzAwMDAwMDAwMDE3Cis6MTA0NzQwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MkMwMDAwMDAzMDFCCis6MTA0NzUwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMUI0Cis6MTA0NzYwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYyQzJCCis6MTA0NzcwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTQyCis6MTA0NzgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDdFMDAwMDI4MDYyMUUzCis6MTA0NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMEM3Cis6MTA0N0EwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MDUwMDAwQTA5MkUwCis6MTA0N0IwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzEwMDIwNEEyREJDCis6MTA0N0MwMDAwMDAwMDAwMDAwMDBBMDkzMDAyMDQ0MTEwMDAwMDAwMDQxCis6MTA0N0QwMDAwMDAwMDAzMjAwMjA0QTJEMDAwMDAwMDAwMDAwQTJCNkI4Cis6MTA0N0UwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzMwMDIwNEEyRDhBCis6MTA0N0YwMDAwMDAwMDAwMDAwMDBBMkJBMDAyMDQ0MTEwMDAwMDAwMEU4Cis6MTA0ODAwMDAwMDAwMDAzNDAwMjA0QTJEMDAwMDAwMDAwMDAwQTJCRTdECis6MTA0ODEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzUwMDIwNEEyRDU3Cis6MTA0ODIwMDAwMDAwMDAwMDAwMDBBMkMyMDAyMDQ0MTEwMDAwMDAwMEFGCis6MTA0ODMwMDAwMDAwMDAzNjAwMjA0QTJEMDAwMDAwMDAwMDAwMDAzMDdCCis6MTA0ODQwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDAxRkYwMDI4MDYyMUM2Cis6MTA0ODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDA2Cis6MTA0ODYwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MkIwMDAwMDAwMDJCCis6MTA0ODcwMDAwMDIxMDIyMTAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDIwCis6MTA0ODgwMDAwMDAwMDYwRTAwMDRBMDAzMDA2MDQ0MTEwMDAwMDY4RDI1Cis6MTA0ODkwMDAwMDAwQTAwMzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA0OEEwMDAwMDIwNDgxMDAwMDAwMDAwMDAwMDAwMDEwMDIxMDYyMTQ3Cis6MTA0OEIwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDYxMzBCCis6MTA0OEMwMDAwMDA0QTAxMDAwNjA0NDExMDAwMDA2OEQwMDAwQTAxMDNDCis6MTA0OEQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMEVCCis6MTA0OEUwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMTA2MjEwMDAwMDAwMDdGCis6MTA0OEYwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTA0OTAwMDAwQ0UwMDAwMDAwMDAwNjJCMDAwNEEwMTEwMDYwNDQxMTIwCis6MTA0OTEwMDAwMDAwMDY4RDAwMDBBMDExMDAyMDQ0MTEwMDAwMDAwMERFCis6MTA0OTIwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxMjU5Cis6MTA0OTMwMDAwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTIwMDIwNDQxMTA4Cis6MTA0OTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMEVGCis6MTA0OTUwMDAwMDA0QTAxMzAwNjA0NDExMDAwMDA2OEQwMDAwQTAxM0E1Cis6MTA0OTYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDVBCis6MTA0OTcwMDAwMDAwMDAwMDAwMDRBMDE0MDA2MDQ0MTEwMDAwMDY4RDM3Cis6MTA0OTgwMDAwMDAwQTAxNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEZFCis6MTA0OTkwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTUwMDYwNDQxMTMxCis6MTA0OUEwMDAwMDAwMDY4RDAwMDBBMDE1MDAyMDQ0MTEwMDAwMDAwMDRBCis6MTA0OUIwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxNkM1Cis6MTA0OUMwMDAwMDYwNDQxMTAwMDAwNjhEMDAwMEEwMTYwMDIwNDQxMTc0Cis6MTA0OUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDVGCis6MTA0OUUwMDAwMDA0QTAxNzAwNjA0NDExMDAwMDA2OEQwMDAwQTAxNzBECis6MTA0OUYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMENBCis6MTA0QTAwMDAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4RDM2Cis6MTA0QTEwMDAwMDAwMDAyQzAwODAwNjJEMDAwMDAwMDBGRjAwMDAwMEI4Cis6MTA0QTIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTk4Cis6MTA0QTMwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEZDCis6MTA0QTQwMDAwMDAwMDAwMjAwODA0ODExMDAwMDAwMDAwMDAwMDAwMDhCCis6MTA0QTUwMDAwRUUwMDAwMDAwMDAwNjNEMDAwMDAwMzAwMDIwMDYyREEyCis6MTA0QTYwMDAwMDAwMDAwMDAwMDAwMDAyMDAyODA2MjEwMDAwMDAwMEY1Cis6MTA0QTcwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTA0QTgwMDAwQ0UwMDAwMDAwMDAwNjNCODEwMDAwMDAwMDIwNDQxMTAzCis6MTA0QTkwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDlDCis6MTA0QUEwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEQwMDAwMTAwMDg2Cis6MTA0QUIwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMjFBCis6MTA0QUMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0MTNGCis6MTA0QUQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA1Qzk5ODAwMDAwMDEwCis6MTA0QUUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDgwNDgxMTc4Cis6MTA0QUYwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDY0MTRGCis6MTA0QjAwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwQTJBNDVBCis6MTA0QjEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjIwMDIwNDgxMTg1Cis6MTA0QjIwMDAwMDAwMDAwMDg5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDg3Cis6MTA0QjMwMDAwMDAwMDAwMTAwNDA0ODExMDAwMDA2MkQ5NzAwMDAwMDExCis6MTA0QjQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTc3Cis6MTA0QjUwMDAwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDU2Cis6MTA0QjYwMDAwMDAwMDAwMDAwNDA0ODExMDAwMDA2MkQwMDAwMDAwMDc5Cis6MTA0QjcwMDAwMDYwMDAwMDAwMDAwNjVDMDAwMDIwMTAwMDIwNDQxMUNFCis6MTA0QjgwMDAwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDJDCis6MTA0QjkwMDAwMDAxQTJBNEMwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjgzCis6MTA0QkEwMDAwMDYwNDgxMTAwMDAwMzZFMDAwMDIwMTAwMDIwNDQxMTM2Cis6MTA0QkIwMDAwMDAwMDAwMDAwMDEwMDAwMDAyMDQ4MTEwMDAwMDAwMDdCCis6MTA0QkMwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUVFCis6MTA0QkQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTRBCis6MTA0QkUwMDAwMDAwMDAwMDA5ODAwMDAwMDAyMDQ4MTEwMDAwMDAwMEMzCis6MTA0QkYwMDBGRkZGRkZGRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA0QzAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMDE0Cis6MTA0QzEwMDAwMDAwMDAwMDAwMDQyMTdGMDA2MDQ0MTEwMDAwMDY4REE4Cis6MTA0QzIwMDAwMDAwMDAxRjAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTA0QzMwMDAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDQwNEMxMUZGCis6MTA0QzQwMDAwMDAwMDY1NjAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMEM4Cis6MTA0QzUwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwNENFCis6MTA0QzYwMDAwMDI5MUUyNzAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyN0UyCis6MTA0QzcwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEIyCis6MTA0QzgwMDBGRkZGRkZGQjAwMjgxRTI3MDAwMDAwMDAwMDAwMDAxN0E4Cis6MTA0QzkwMDAwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyREI1Cis6MTA0Q0EwMDAwMDAwMDAwMDAwMDAwMDA4MDAyOTFFMjcwMDAwMDAwMDhFCis6MTA0Q0IwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDAwMDAwMDAxN0U5Cis6MTA0Q0MwMDAwMDIwMUUyRDAwMDAwMDAwRkZGRkZGRjcwMDI4MUUyNzE4Cis6MTA0Q0QwMDAwMDAwMDAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMEUwCis6MTA0Q0UwMDAwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDlGCis6MTA0Q0YwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTdGCis6MTA0RDAwMDAwMDAwMDAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM2RTYzCis6MTA0RDEwMDAwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDAwMDAxMDAwMEVECis6MTA0RDIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMUY4Cis6MTA0RDMwMDAwMDAwMDAwMDAxODAwMDAwMDAyMDQ4MTEwMDAwMDAwMDc5Cis6MTA0RDQwMDBGRkZGRkZGRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMEVFCis6MTA0RDUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMEMzCis6MTA0RDYwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDRECis6MTA0RDcwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MjE3RjE1Cis6MTA0RDgwMDAwMDYwNDQxMTAwMDAwNjhEMDAwMDAwMUYwMDIxMDIzMDY5Cis6MTA0RDkwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDY4Q0FECis6MTA0REEwMDAwMDAwMDAxMDAwNDA0QzExMDAwMDA2NzIwMDAwMDAwMERFCis6MTA0REIwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAzOEMwMDAwMDE3Cis6MTA0REMwMDAwMDAwMDAwMDAwMDAwMDFEMDAyMDBBMkQwMDAwMDAwMDZGCis6MTA0REQwMDAwMDAwMDAxRTAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxRjNCCis6MTA0REUwMDAwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMjAwMDIwMTYyREUxCis6MTA0REYwMDAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMEI0Cis6MTA0RTAwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMDM2Cis6MTA0RTEwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMUJDCis6MTA0RTIwMDAwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMEM5Cis6MTA0RTMwMDAwMDAwMDAwNDAwMzAxMjI0MDAwMDAwMDAwMDAwMDAwMDA4Cis6MTA0RTQwMDAwMDJGMDA2NDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAzCis6MTA0RTUwMDAwMDAwMDY4QjAwMDAwMDAzMDAyODFBMjIwMDAwMDAwMDVBCis6MTA0RTYwMDAwMDAwMDAwODAwMjIxMjIyMDAwMDAwMDBGRkZGRjAwMEY2Cis6MTA0RTcwMDAwMDI4MTIyNDAwMDAwMDAwMDAwMDAwMDAwMDI5MTBDNEQ3Cis6MTA0RTgwMDAwMDAwMDAwMDAwMDAwMDFGMDA0MDM2MjQwMDAwMDAwMDY5Cis6MTA0RTkwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTA0RUEwMDAxQUMwMDAwMDAwMDAwNjhEOUYwMDAwMDAwMDIwNDQxMTgxCis6MTA0RUIwMDAwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDM5Cis6MTA0RUMwMDAwMDAwMDAwMDFBRTAwMDAwMDAwMDA2OTAwMDAwMDAwMDUyCis6MTA0RUQwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQUMwMDAwMDc4Cis6MTA0RUUwMDAwMDAwMDY5MjlFMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDE3Cis6MTA0RUYwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTA0RjAwMDAxQUUwMDAwMDAwMDAwNjk1MDAwMDAwMDAwMDgwMDAwMDhDCis6MTA0RjEwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjI2Cis6MTA0RjIwMDAwMDAwMTAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMEU0Cis6MTA0RjMwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMUMzCis6MTA0RjQwMDAwMDAwMDFCMjAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMEJCCis6MTA0RjUwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDAwMDAwMjI1NjVECis6MTA0RjYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUIwMDIwNDgxMTM4Cis6MTA0RjcwMDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDFGCis6MTA0RjgwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAxQTFGRDA4Cis6MTA0RjkwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDUwCis6MTA0RkEwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDhBCis6MTA0RkIwMDAwMDAwMDAyNDAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjYwCis6MTA0RkMwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwN0Y2Cis6MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDU4Cis6MTA0RkUwMDAwMDAwMDAyMjAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjMyCis6MTA0RkYwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwN0M2Cis6MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDI3Cis6MTA1MDEwMDAwMDAwMDAyMzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAxMEYyCis6MTA1MDIwMDAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwN0EwCis6MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MTEwMDAwMDAwMEQ3Cis6MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA1MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTA1MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA1MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA1MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTA1MEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA1MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTA1MTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTA1MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTA1MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTA1MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA1MjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA1MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTA1MkIwMDAwMTQyMDUwMjA1QzAwMjUwMDAwMDAwMDAwMUMzMDE2ODYwCis6MTA1MkMwMDAwNDNGMDVDMDAwMDAwMDAwMDIyNTAyMDkwMjUwMDE1MTAwCis6MTA1MkQwMDAwMDAwMDAwMDAyMjMwMjQ1MDJBMDAyNDEwMDAwMDAwMDdECis6MTA1MkUwMDAwM0Q3MDVDMDA1QzAwNUMwMDAwMDAwMDAwNjQ5MDY0QUY2Cis6MTA1MkYwMDAwMzFGMDVDMDAwMDAwMDAwMDVDMDA1QzUwMzIwMDM0MEQyCis6MTA1MzAwMDAwMDAwMDAwMDAzMkEwMjgyMDM0MjAzMzQwMDAwMDAwMDcwCis6MTA1MzEwMDAwNUMwMDVDMDA1QzAwNUMwMDAwMDAwMDAwNUMwMDU1MTVFCis6MTA1MzIwMDAwNUMwMDVDMDAwMDAwMDAwMDNCQTA1QzAwNEJCMDM0NDZCCis6MTA1MzMwMDAwMDAwMDAwMDA0OUEwNDUwMDQzRDA1QzAwMDAwMDAwMDc1Cis6MTA1MzQwMDAwNEQwMDVDMDA0NDEwNEREMDAwMDAwMDAwNDUwMDUwNzNFCis6MTA1MzUwMDAwMzUxMDM3NTAwMDAwMDAwMDVDMDA1QzAwNUMwMDVDMDZECis6MTA1MzYwMDAwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzAwMDAwMDAwMDI5Cis6MTA1MzcwMDAwNUMwMDVDMDA2M0YwNUM3MDAwMDAwMDAwNUMwMDVDMDA4Cis6MTA1MzgwMDAwMDA3MDVDMDAwMDAwMDAwMDVDMDA1QzAwNUMwMDVDMDNECis6MTA1MzkwMDAwMDAwMDAwMDA1QzAwNUMwMDVDMDA1QzAwMDAwMDAwMEY5Cis6MTA1M0EwMDAwM0Y4MDNFRDA0MDgwNDA2MDAwMDAwMDAwNDBFMDQwQURDCis6MTA1M0IwMDAwNDBDMDQxMDAwMDAwMDAwMDQxQzA0MTgwNDI0MDQyMDQxCis6MTA1M0MwMDAwMDAwMDAwMDA0MkMwNDI4MDQzNDA0MzAwMDAwMDAwMDE1Cis6MTA1M0QwMDAwNUMwMDVDMDA0MzgwNUMwMDAwMDAwMDAwNUMwMDVDMEI4Cis6MTA1M0UwMDAwNUMwMDVDMDAwMDAwMDAwMDVDMDA1QzAwNUMwMDVDMDFGCis6MTA1M0YwMDAwMDAwMDAwMDAwMDIwNjc5MDY5NzAwMDYwMDAwMDAwMDg5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNjIwX3BmcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjYyMF9wZnAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1MjkyYwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjYyMF9wZnAuYmluLmloZXgKQEAgLTAsMCArMSwxNDUgQEAKKzoxMDAwMDAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwN0MwMzhCRUQKKzoxMDAwMTAwMDAwODAwMUI4MDA3QzAzOEIwMEQ0NDAxRTAwRUUwMDFFNUYKKzoxMDAwMjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwQzQxODM4QzMKKzoxMDAwMzAwMDAwQ0EyNDAwMDBDQTI4MDAwMDk1ODFBODAwQzQxQzNBMDgKKzoxMDAwNDAwMDAwQzNDMDAwMDBDQTA4MDAwMENBMEMwMDAwN0M3NDRCNEEKKzoxMDAwNTAwMDAwQzIwMDA1MDA5OUMwMDAwMEM0MUMzQTAwN0M3NDRDMkEKKzoxMDAwNjAwMDAwQzBGRkYwMDAwNDJDMDQwMDMwOTAwMjAwN0QyNTAwNDkKKzoxMDAwNzAwMDAwMzUxNDAyMDA3RDM1MEIwMDI1NTQwMzAwN0NENTgwMkIKKzoxMDAwODAwMDAwMjU5QzAzMDA5NUMwMDQwMEQ1MDAxQjAwN0VEREMxNDcKKzoxMDAwOTAwMDAwN0Q5RDgwMDBENjgwMUIwMEQ1ODAxQjAwRDQ0MDFFQjMKKzoxMDAwQTAwMDAwRDU0MDFFMDBENjQwMUUwMEQ2ODAxRTAwRDQ4MDFFMDMKKzoxMDAwQjAwMDAwRDRDMDFFMDA5NzgzRDMwMEQ1QzAxRTAwQ0EwODAwMUMKKzoxMDAwQzAwMDAwODAwMDFBMDBDQTBDMDAwMEU0MDExRTAwRDQwMDFFQ0IKKzoxMDAwRDAwMDAwODAwMDBDMDBDNDE4MzgwMEU0MDEzRTAwRDQwMDFFNkIKKzoxMDAwRTAwMDAwODAwMDBDMDBDNDE4MzgwMEQ0NDAxRTAwRUUwMDFFMzIKKzoxMDAwRjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTFFMDQKKzoxMDAxMDAwMDAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwRjEKKzoxMDAxMTAwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDEzRTAwRDQwMDFFOUYKKzoxMDAxMjAwMDAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMjMKKzoxMDAxMzAwMDAwN0U4MjhCMDBDQTE4MDAwMEQ0NDAxRTAwRDU4MDFFQUQKKzoxMDAxNDAwMDAwODAwMDUzMDBENDAwNzUwMEQ0NDAxRTAwQ0EwODAwOEYKKzoxMDAxNTAwMDAwQ0EwQzAwMDBDQTEwMDAwMEQ0ODAxOTAwRDRDMDE4RDYKKzoxMDAxNjAwMDAwRDUwMDE3MDBENDgwMUUwMEQ0QzAxRTAwRDUwMDFFOEMKKzoxMDAxNzAwMDAwRTIwMDFFMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCODYKKzoxMDAxODAwMDAwQ0EwODAwMDBENDgwNjAwMEQ0NDAxRTAwODAwMDAwMzcKKzoxMDAxOTAwMDAwRDQ4MDFFMDBDQTA4MDAwMEQ0ODA2MTAwRDQ0MDFFMzQKKzoxMDAxQTAwMDAwODAwMDAwMDBENDgwMUUwMENBMDgwMDAwQ0EwQzAwQjUKKzoxMDAxQjAwMDAwRDQ0MDFFMDBENDgwMTYwMEQ0QzAxNjAwRDQ4MDFFODcKKzoxMDAxQzAwMDAwODAwMUI4MDBENEMwMUUwMEM2MDg0MzAwQ0EwQzAwNUQKKzoxMDAxRDAwMDAwQ0ExMDAwMDA5NDgwMDQwMENBMTQwMDAwRTQyMEYzNTgKKzoxMDAxRTAwMDAwRDQyMDEzMDBENTYwNjUwMEQ0RTAxQzAwRDUyMDFDOEQKKzoxMDAxRjAwMDAwRDU2MDFDMDA4MDAwMDAwMDA2MjAwMTAwQzYwODQzRjYKKzoxMDAyMDAwMDAwQ0EwQzAwMDBDQTEwMDAwMDk0ODNGNzAwQ0ExNDAwNTIKKzoxMDAyMTAwMDAwRTQyMEYzMDA4MDAwNzkwMEQ0MjAxMzAwQzYwODQzRDYKKzoxMDAyMjAwMDAwQ0EwQzAwMDBDQTEwMDAwMDk4ODNFRjAwQ0ExNDAwMzYKKzoxMDAyMzAwMDAwRDQwMDY0MDA4MDAwOEQwMDAwMDAwMDAwQzQxNDMyNkYKKzoxMDAyNDAwMDAwQzYxODQzMDBDNDA4MkYwMDk1NDAwNTAwQzQwQzMwQjgKKzoxMDAyNTAwMDAwRDQ0MDFFMDA4MDAwMDAwMEVFMDAxRTAwOTU4M0Y1RDMKKzoxMDAyNjAwMDAwQzQxMDMxMDBENDQwMzMwMEQ1MjA2NTAwRDRBMDFDNTgKKzoxMDAyNzAwMDAwRDRFMDFDMDBENTIwMUMwMEU0MDE1RTAwRDQwMDFFNjgKKzoxMDAyODAwMDAwODAwMDAwMDAwNjIwMDEwMENBMTgwMDAwMEEyMDAxQkEKKzoxMDAyOTAwMDAwRDYwMDc2MDBDNDA4MzYwMDk4ODAwNzAwQzYxMDQ1RDYKKzoxMDAyQTAwMDAwOTUwMTEwMDBENDAwMUYwMEQ0NjA2MjAwODAwMDAwOUYKKzoxMDAyQjAwMDAwRDQyMDYyMDBDQzM4MzUwMENDMTQzMzAwODQwMUJCNUMKKzoxMDAyQzAwMDAwRDQwMDcyMDBENTQwMUUwMDgwMDAwMDAwRUUwMDFFMjkKKzoxMDAyRDAwMDAwRTIwMDFBMDA4NDAxQkIwMEUyMDAxQTAwQ0MxMDRCQkYKKzoxMDAyRTAwMDAwQ0MwNDQ3MDAyQzk0MDEwMDdEMDk4QjAwOTg0MDA1NDgKKzoxMDAyRjAwMDAwN0QxNUNCMDBENDAwMUEwMDgwMDFCODAwRDQwMDZEMzkKKzoxMDAzMDAwMDAwMzQ0NDAxMDBDQzBDNDgwMDk4NDAzQTAwQ0MyQzRBMDAKKzoxMDAzMTAwMDAwOTU4MDA0MDBDQzA0NDkwMDgwMDFCODAwRDQwMDFBODQKKzoxMDAzMjAwMDAwRDRDMDFBMDAyODI4MDEwMDg0MDBGMDAwQ0MxMDAzN0IKKzoxMDAzMzAwMDAwOTg4MDFCMDAwNDM4MEMwMDg0MDBGMDAwQ0MxMDAzRUYKKzoxMDAzNDAwMDAwOTg4MDE3MDAwNDM4MDgwMDg0MDBGMDAwQ0MxMDAzRTcKKzoxMDAzNTAwMDAwOTg4MDEzMDAwNDM4MDQwMDg0MDBGMDAwQ0MxMDAzREYKKzoxMDAzNjAwMDAwOTg4MDE0MDBDQzEwNEMwMDlBODAwOTAwQ0MxNDRERTkKKzoxMDAzNzAwMDAwOTg0MERDMDBENDAwNkQwMENDMTg0ODAwRDUwMDFBNkQKKzoxMDAzODAwMDAwRDU0MDFBMDA4MDAwQzkwMEQ1ODAxQTAwOTZDMEQ1NUIKKzoxMDAzOTAwMDAwRDQwMDZEMDA4MDAxQjgwMEQ0MDA2RTAwOUFDMDAzNDQKKzoxMDAzQTAwMDAwRDQwMDZEMDBENDAwNkUwMDgwMDAwMDAwRUMwMDdGREYKKzoxMDAzQjAwMDAwOUFDMENDMDBENDAwNkQwMDgwMDFCODAwRDQwMDZFNUIKKzoxMDAzQzAwMDAwQ0MxNDAzMDBDQzE4MDMwMENDMUMwMzAwN0Q5MTAzNjcKKzoxMDAzRDAwMDAwN0RENTgzMDA3RDE5MEMwMDM1Q0MxRjAwMzU3MDFGQzIKKzoxMDAzRTAwMDAwN0NGMENCMDA3Q0QwOEIwMDg4MDAwMDAwN0U4RThCRTAKKzoxMDAzRjAwMDAwOTVDMDA0MDBENDAwNkUwMDgwMDFCODAwRDQwMDFBM0IKKzoxMDA0MDAwMDAwRDRDMDFBMDBDQzA4MDMwMENDMEMwMzAwQ0MxMDAzQUQKKzoxMDA0MTAwMDAwQ0MxNDAzMDBDQzE4MDMwMENDMUMwMzAwQ0MyNDAzMzQKKzoxMDA0MjAwMDAwQ0MyODAzMDAzNUM0MUYwMDM2QjAxRjAwN0M3MDRCODEKKzoxMDA0MzAwMDAwMzRGMDFGMDA3QzcwNEIwMDM1NzAxRjAwN0M3MDRCNDcKKzoxMDA0NDAwMDAwN0Q4ODgxMDA3RENDQzEwMDdFNTEwMTAwN0U5NTQxRjgKKzoxMDA0NTAwMDAwN0M5MDgyMDA3Q0Q0QzIwMDdDODQ4QjAwOUFDMDAzMTQKKzoxMDA0NjAwMDAwN0M4QzhCMDAyQzg4MDEwMDk4ODA5RTAwRDQwMDZENEQKKzoxMDA0NzAwMDAwOTg0MDlDMDBENDAwNkUwMENDMDg0QzAwQ0MwQzREODEKKzoxMDA0ODAwMDAwQ0MxMDQ4MDBENDgwMUEwMEQ0QzAxQTAwODAwMTAxQUEKKzoxMDA0OTAwMDAwRDUwMDFBMDBDQzA4MzIwMEQ0MDAzMjAwOTQ4MkQ5NzIKKzoxMDA0QTAwMDAwQ0EwQzAwMDBENDQwMUUwMDgwMDAwMDAwRDQwMDFFRDIKKzoxMDA0QjAwMDAwRTQwMTFFMDBENDAwMUUwMENBMDgwMDAwQ0EwQzAwOUYKKzoxMDA0QzAwMDAwQ0ExMDAwMDBENDQwMUUwMENBMTQwMDAwRDQ4MDFFRDAKKzoxMDA0RDAwMDAwRDRDMDFFMDBENTAwMUUwMEQ1NDAxRTAwRDU0MDM0RkIKKzoxMDA0RTAwMDAwODAwMDAwMDBFRTAwMUUwMDI4MDQwNDAwRTIwMDFBNTQKKzoxMDA0RjAwMDAwRTIwMDFBMDBENDQwMUEwMENBMzgwMDAwQ0MwODAzRjkKKzoxMDA1MDAwMDAwQ0MwQzAzMDBDQzBDMDMwMENDMEMwMzAwOTg4MkJEODMKKzoxMDA1MTAwMDAwMDAwMDAwMDA4NDAxQkIwMEQ3QTA2RjAwODAwMDAwMzUKKzoxMDA1MjAwMDAwRUUwMDFGMDBDQTA0MDAwMEMyRkYwMDAwQ0MwODM0MjcKKzoxMDA1MzAwMDAwQzEzRkZGMDA3Qzc0Q0IwMDdDQzkwQjAwN0QwMTBGMjQKKzoxMDA1NDAwMDAwOTkwMkIwMDA3QzczOEIwMDg0MDFCQjAwRDdBMDZGQzAKKzoxMDA1NTAwMDAwODAwMDAwMDBFRTAwMUYwMENBMDgwMDAwMjgxOTAwRkIKKzoxMDA1NjAwMDAwN0Q4OThCMDA5NTgwMTQwMDI4MTQwNDAwQ0EwQzAwQkIKKzoxMDA1NzAwMDAwQ0ExMDAwMDBDQTFDMDAwMENBMjQwMDAwRTIwMDFGQ0MKKzoxMDA1ODAwMDAwRDRDMDFBMDBENTAwMUEwMEQ1NDAxQTAwQ0MxODAzQjgKKzoxMDA1OTAwMDAwQ0MyQzAzMDBDQzJDMDMwMENDMkMwMzAwN0RBNThCQkQKKzoxMDA1QTAwMDAwN0Q5QzQ3MDA5ODQyOTcwMDAwMDAwMDAwODAwMTYxOTgKKzoxMDA1QjAwMDAwRDRDMDFBMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAwNjkKKzoxMDA1QzAwMDAwRUUwMDFFMDBFNDAxMUUwMEQ0MDAxRTAwRDQ0MDFFRjgKKzoxMDA1RDAwMDAwRUUwMDFFMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMTYKKzoxMDA1RTAwMDAwRTQwMTNFMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFQjgKKzoxMDA1RjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwQ0EwODAwMzAKKzoxMDA2MDAwMDAwMjQ4QzA2MDAwQ0NDMDYwMDk4QzAwNjAwQ0MxMDRFQ0UKKzoxMDA2MTAwMDAwOTkwMDA0MDBENDAwNzMwMEU0MDExRTAwRDQwMDFFMDEKKzoxMDA2MjAwMDAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDAwRUUwMDFFOUEKKzoxMDA2MzAwMDAwQ0EwODAwMDBDQTBDMDAwMDM0RDAxODAwMjUxMDAxQzAKKzoxMDA2NDAwMDAwOTUwMDIxMDBDMTdGRkYwMENBMTAwMDAwQ0ExNDAwRkQKKzoxMDA2NTAwMDAwQ0ExODAwMDBENDgwMUQwMEQ0QzAxRDAwN0RCMThCREQKKzoxMDA2NjAwMDAwQzE0MjAyMDBDMkMwMDEwMEQ1ODAxRDAwMzREQzBFNzIKKzoxMDA2NzAwMDAwN0Q1RDRDMDA3RjczNEMwMEQ3NDAxRTAwRDUwMDFFRUUKKzoxMDA2ODAwMDAwRDU0MDFFMDBDMTQyMDAwMEMyQzAwMDAwMDk5QzAxMEMKKzoxMDA2OTAwMDAwMzFEQzEwMDA3RjVGNEMwMDdGNzM0QzAwMDQyODAyQTcKKzoxMDA2QTAwMDAwN0Q4MzgwMDBENUE4NkYwMEQ1ODA2NjAwRDc0MDFFRUUKKzoxMDA2QjAwMDAwRUMwMDVFMDBDODI0MDIwMEM4MjQwMjAwODAwMUI4REIKKzoxMDA2QzAwMDAwRDYwMDc2MDBENDQwMUUwMEQ0ODAxRTAwRDRDMDFFODgKKzoxMDA2RDAwMDAwODAwMDAwMDBFRTAwMUUwMDgwMDAwMDAwRUUwMDFGMDEKKzoxMDA2RTAwMDAwRDQwMDFGMDA4MDAwMDAwMEQ0MDAxRjAwRDQwMDFGQjEKKzoxMDA2RjAwMDAwODgwMDAwMDBENDAwMUYwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMDA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDA3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMDA3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDA3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDA4MDAwMDAwMDEwMTcxMDAwMjAxNzgwMDAzMDA4RjAwMDQwMDdGRTUKKzoxMDA4MTAwMDAwMDUwMDAzMDAwNjAwM0YwMDA3MDAzMjAwMDgwMTJDMUQKKzoxMDA4MjAwMDAwMDkwMDQ2MDAwQTAwMzYwMDEwMDFCNjAwMTcwMEEyQjkKKzoxMDA4MzAwMDAwMjIwMTNBMDAyMzAxNDkwMDIwMDBCNDAwMjQwMTI1RDAKKzoxMDA4NDAwMDAwMjcwMDREMDAyODAwNkEwMDJBMDA2MDAwMkIwMDUyOUIKKzoxMDA4NTAwMDAwMkYwMDY1MDAzMjAwODcwMDM0MDE3RjAwM0MwMTU2MDQKKzoxMDA4NjAwMDAwM0YwMDcyMDA0MTAxOEMwMDQ0MDEyRTAwNTUwMTczQ0QKKzoxMDA4NzAwMDAwNTYwMTdBMDA2MDAwMEIwMDYxMDAzNDAwNjIwMDM4MEQKKzoxMDA4ODAwMDAwNjMwMDM4MDA2NDAwMzgwMDY1MDAzODAwNjYwMDM4RjYKKzoxMDA4OTAwMDAwNjcwMDM4MDA2ODAwM0EwMDY5MDA0MTAwNkEwMDQ4QkIKKzoxMDA4QTAwMDAwNkIwMDQ4MDA2QzAwNDgwMDZEMDA0ODAwNkUwMDQ4NzYKKzoxMDA4QjAwMDAwNkYwMDQ4MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2NkYKKzoxMDA4QzAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MTAKKzoxMDA4RDAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAKKzoxMDA4RTAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RjAKKzoxMDA4RjAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RTAKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY2MzBfbWUuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY2MzBfbWUuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzYTdlNgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjYzMF9tZS5iaW4uaWhleApAQCAtMCwwICsxLDEzNDUgQEAKKzoxMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDAwMTAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwRkZGRjAwMjg0NjIxQTkKKzoxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwQUYKKzoxMDAwMzAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDAwNDAwMDAwQTAwMDBBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMjYKKzoxMDAwNTAwMDAwMDAwMDAwMDAwMTAwMDBDMDI5NDYyMDAwMDAwMDAwNTAKKzoxMDAwNjAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDAwNzAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBRjIKKzoxMDAwODAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwN0EKKzoxMDAwOTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0QkUKKzoxMDAwQTAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAwMDAwNjAwMDAwQUIKKzoxMDAwQjAwMDAwMDAwNjJFMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQyNjQKKzoxMDAwQzAwMDAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwRjAwMzkKKzoxMDAwRDAwMDAwMjgxNjIyMDAwMDAwMDAwMDAwMDAwODAwMjExNjI1NUMKKzoxMDAwRTAwMDAwMDAwMDAwMDAwMDAwMTgwMDIwMzYyNTAwMDAwMDAwN0QKKzoxMDAwRjAwMDhEMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0RkEKKzoxMDAxMDAwMDAwMkYwMjI1MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQUQKKzoxMDAxMTAwMDAwMDAwMDE4MDA0MTIwMDAwMDQwNDgxMTAwMDAwMDE5QjQKKzoxMDAxMjAwMDAwNDIyMDAwMDAyMDQ4MTEwMDAwMDAwMDhFMDAwMDAwNjYKKzoxMDAxMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAyODAwMjA0QTJEOEIKKzoxMDAxNDAwMDAwMDAwMDAwOTAwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQUEKKzoxMDAxNTAwMDAwMDAwMDAwMDAyMDQ4MDUwMDAwMDAwMDAwMDAwMDBDMjYKKzoxMDAxNjAwMDAwMjExNjIyMDAwMDAwMDAwMDAwMDAwMzAwMjgxNjI1RDAKKzoxMDAxNzAwMDAwMDAwMDAwMDAwMDAwMTkwMDIxMUEyMjAwMDAwMDAwMDkKKzoxMDAxODAwMDAwMDAwMDA0MDAyODFBMjYwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDAxOTAwMDAwMjkxNEM1MDAwMDAwMDAwMDAwMDAxOTAwMjAzNjI1QzkKKzoxMDAxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMTQwMjAwMDAwMDAwRkYKKzoxMDAxQjAwMDAwMDAwMDE2MDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAzQ0EKKzoxMDAxQzAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENUEKKzoxMDAxRDAwMDAwMDAwMDAwRkZGRkZGRkMwMDI4MEUyMzAwMDAwMDAwQ0QKKzoxMDAxRTAwMDAwMDAwMDAwMDAyOTE0QTMwMDAwMDAwMDAwMDAwMDE3MTgKKzoxMDAxRjAwMDAwMjAzNjI1MDAwMDAwMDAwMDAwODAwMDAwMjgwRTIyQUMKKzoxMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDIyMEUyMzAwMDAwMDAwOTQKKzoxMDAyMTAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDIwMDAwMDAwRUYKKzoxMDAyMjAwMDAwMjgwRTIyMDAwMDAwMDAwMDAwMDAwNjAwMjEwRTIzMUUKKzoxMDAyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwRUYKKzoxMDAyNDAwMDAwMDAwMDAwMDAyMjAyMjIwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDAyNTAwMDE0RTAwMDAwMDAwMDAwMzgwMDAwMDAwMDJFRTAwMDAwNjQKKzoxMDAyNjAwMDAwMDAwMDM1MDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDM3MTYKKzoxMDAyNzAwMDAwMDAwMDAwMDA0MDBFMkQwMDAwMDAzOTAwMDAwMDA4QzIKKzoxMDAyODAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwOTAwNDAxMjJEOEIKKzoxMDAyOTAwMDAwMDAwMDQ2MDAwMDAwMDEwMDQwMEUyRDAwMDAwMDM5NjMKKzoxMDAyQTAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMjgKKzoxMDAyQjAwMDAwMjgxMjIzMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0ODcKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzAwMDAwMDAwQUQKKzoxMDAyRDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDAzRTAwMDAwMDA4RTQKKzoxMDAyRTAwMDAwNDAxQzExMDAwMDAwNDEwMDAwMDAwRDAwMjAxRTJERTgKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMEYwMDI4MUUyNzAwMDAwMDAwODIKKzoxMDAzMDAwMDAwMDAwMDAzMDAyMjFFMjcwMDAwMDAwMDdGQzAwMDAwNDQKKzoxMDAzMTAwMDAwMjgxQTIzMDAwMDAwMDAwMDAwMDAxNDAwMjExQTI2MDMKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDMzMUEyNjAwMDAwMDAwNTkKKzoxMDAzMzAwMDAwMDAwMDA4MDAyMjFBMjYwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDAzNDAwMDAwMjkwQ0M3MDAwMDAwMDAwMDAwMDAyNzAwMjAzNjI0MTAKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MTIyMTAwMDAwMDAwQzMKKzoxMDAzNjAwMDAwMDAxNDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDAzNzAwMDBDRTAwMDAwMDAwMDAwNEIwMDAwMDAwMTAwMjkwRTIzRUIKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwMzYyMzAwMDAwMDAwRTYKKzoxMDAzOTAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRjgwMDAwMTEKKzoxMDAzQTAwMDAwMjk0QTIzMDAwMDAwMDAwMDAwMDAwMDAwM0EyQzAyNEYKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMEUyQjAwMDAwMDAwRTAKKzoxMDAzQzAwMEZDMDAwMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDBGQzkKKzoxMDAzRDAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTIzRjAKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMjcwMDIwNEEyRDAwMDAwMDAwNEYKKzoxMDAzRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDI5NUIKKzoxMDA0MDAwMDAwMjAwRTJEMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTIzRTkKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDA0MjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxNTIKKzoxMDA0MzAwMDAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwODMKKzoxMDA0NDAwMDAwMDAwMDYxMDAwMDAwMDAyRUUwMDAwMDAwMDAwMDVGREUKKzoxMDA0NTAwMDAwMDAwMDAwMkNFMDAwMDAwMDAwMDA1RTAwMDAwMDAwMzIKKzoxMDA0NjAwMDAwNDAwRTJEMDAwMDAwNjIwMDAwMDAwMTAwNDAwRTJEMzMKKzoxMDA0NzAwMDAwMDAwMDYyMDAwMDAwMEEwMDIwMEUyRDAwMDAwMDAwQjUKKzoxMDA0ODAwMDAwMDAwMDBCMDA0MDEyMkQwMDAwMDA2QTAwMDAwMDAwNzgKKzoxMDA0OTAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzAwMjgxMjIzRDkKKzoxMDA0QTAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDAwMDAwMDAwRjIKKzoxMDA0QjAwMDdGQzAwMDAwMDAyODE2MjMwMDAwMDAwMDAwMDAwMDE0ODgKKzoxMDA0QzAwMDAwMjExNjI1MDAwMDAwMDAwMDAwMDAwMTAwMzMxNjI1NjEKKzoxMDA0RDAwMDAwMDAwMDAwODAwMDAwMDAwMDI4MEUyMzAwMDAwMDAwNDMKKzoxMDA0RTAwMDAwMDAwMDAwMDAyOTBDQTMwMDAwMDAwMDNGRkZGQzAwRkEKKzoxMDA0RjAwMDAwMjkwRTIzMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMjEKKzoxMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDZEOEEKKzoxMDA1MTAwMDAwMDAwMTAwMDA0MDFDMTEwMDAwMDA3MDAwMDAwMDBERjAKKzoxMDA1MjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDBGMDAwMjgxRTI3MDMKKzoxMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDQwMDIyMUUyNzAwMDAwMDAwNTAKKzoxMDA1NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBEQTgKKzoxMDA1NTAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRjBGRjAwMjgxQTMwQzMKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMEEwMjgwMDIwNDQxMTAwMDAwMDAwNEUKKzoxMDA1NzAwMDAwMDAwMDAwMDAyOTQ4RTYwMDAwMDAwMDAwMDBBMDE4NkMKKzoxMDA1ODAwMDAwMjA0NDExMDAwMDAwMDAzRkZGRkZGRjAwMjg0QTIzMjUKKzoxMDA1OTAwMDAwMDAwMDAwMDAwMEEwMTAwMDIwNDQxMTAwMDAwMDAwMzYKKzoxMDA1QTAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDMwQUYKKzoxMDA1QjAwMDAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMjAwMjkxNjI1NzIKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMzAwMDIwMzYyNTAwMDAwMDAwODAKKzoxMDA1RDAwMDAwMDAwMDI1MDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDA1RTAwMDAwMkYwMEEzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNkQKKzoxMDA1RjAwMDAwMDAwMDgzMDAwMDAwMjYwMDIwMTYyRDAwMDAwMDAwRUYKKzoxMDA2MDAwMDAwMDAwMDAwMDAyRjAwQTQwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDA2MTAwMDBDQzAwMDAwMDAwMDAwODQwMDAwMDAwMDAwNDAwMDAwNEEKKzoxMDA2MjAwMDAwMDAwMDhBMDAwMDAwMjUwMDIwMzYyMzAwMDAwMDAwQTIKKzoxMDA2MzAwMDAwMDAwMDI2MDAyMDM2MjQwMDAwMDAwMDAwMDAwMDE3MDMKKzoxMDA2NDAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3RjMKKzoxMDA2NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDhBMUMKKzoxMDA2NjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY2NTAwMDAwMDAwQkYKKzoxMDA2NzAwMDAwNjAwMDAwMDAwMDA2NTkwMDAwMDAwMjAwMjEwRTIyNjgKKzoxMDA2ODAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDhEMDkKKzoxMDA2OTAwMDAwMDAwMDEyQzA0MDM2MjAwMDAwMDA5MzAwMDAwMDAwNUYKKzoxMDA2QTAwMDJFRTAwMDAwMDAwMDAwOTEwMDAwMDAwMDJDRTAwMDAwOUYKKzoxMDA2QjAwMDAwMDAwMDkwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDkyOUIKKzoxMDA2QzAwMDAwMDAwMDAzMDA0MDBFMkQwMDAwMDA5MjAwMDAwMDBDMEUKKzoxMDA2RDAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxMjAwMjAzNjIzMzQKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMEUyMjAwMDAwMDAwQjYKKzoxMDA2RjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA5ODAwMDBBMDBDRTIKKzoxMDA3MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNEMKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMEEwRjEKKzoxMDA3MjAwMDAwMDBBMDBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDA3MzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDJFRTAwMDAwMzIKKzoxMDA3NDAwMDAwMDAwMDlFMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDlENjIKKzoxMDA3NTAwMDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDAzN0EKKzoxMDA3NjAwMDAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwQzAwMjAwRTJEMDgKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMEUKKzoxMDA3ODAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDAwM0YwMDAwRTIKKzoxMDA3OTAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAxMDAwMjEwRTIzOUUKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMTEwMDIwMzYyMzAwMDAwMDAwQkYKKzoxMDA3QjAwMDAwMDAwMDFFMDAyMTAyMkIwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA3QzAwMDE0QzAwMDAwMDAwMDAwQTcwMDAwMDAxNkMwMjAzNjIwNjIKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMUYwMDIxMDIyQjAwMDAwMDAwQUMKKzoxMDA3RTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBBQTAwMDAwMDE1NzYKKzoxMDA3RjAwMEMwMjAzNjIwMDAwMDAwMDAwMDAwMDAwODAwMjEwRTJCNjEKKzoxMDA4MDAwMDAwMDAwMDAwMDAwMDAwN0YwMDI4MEUyMzAwMDAwMDAwMTAKKzoxMDA4MTAwMDAwMDAwMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDA4MjAwMDBDRTAwMDAwMDAwMDAwRTEwMDAwMDAwMDI3MDAwMDAwRDQKKzoxMDA4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzQjMKKzoxMDA4NDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDA4NTAwMDBBRTAwMDAwMDAwMDAwQjMwMDAwMDAwMDAwNjAwMDAwOUIKKzoxMDA4NjAwMDAwMDAwMTNBODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNTcKKzoxMDA4NzAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBDRUQKKzoxMDA4ODAwMDAwMjIxRTMwMDAwMDAwMDA5OTgwMDAwMDAwMjA0NDExNkEKKzoxMDA4OTAwMDAwMDAwMDAwMDAwMDAwMDQwMDIwMTIyRDAwMDAwMDAwRjUKKzoxMDA4QTAwMDAwMDAwMDA4MDAyMjEyMjQwMDAwMDAwMDAwMDAwMDEwRDgKKzoxMDA4QjAwMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDAwMjkxQ0U0QzYKKzoxMDA4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwNDgwNzAwMDAwMTJGNDkKKzoxMDA4RDAwMDlCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDA4RTAwMDAwMjA0ODAyMDAwMDAwMDA5QzAwMDAwMDAwMjA0NDExOEQKKzoxMDA4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzMTQ2RjAwMDAwMDAwNDIKKzoxMDA5MDAwMDAwMDAwMDAxMDAzMzNFMjMwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDA5MTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMjAzQzA1NTUKKzoxMDA5MjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDEKKzoxMDA5MzAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDA5NDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwNzAwMjA0NDExMEIKKzoxMDA5NTAwMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyQjAwMDAwMDAwM0EKKzoxMDA5NjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDBDQjAwRjhGRjA4RTkKKzoxMDA5NzAwMDAwMjA0ODExMDAwMDAwMDA5ODAwMDAwMDAwNDA0ODExQ0QKKzoxMDA5ODAwMDAwMDAwMERDMDAwMDAwRjAwMDI4MEUyMjAwMDAwMDAwNDMKKzoxMDA5OTAwMDAwMDAwMEEwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDA5QTAwMDBDQzAwMDAwMDAwMDAwREEwMDAwMDAxMTAwMjAwRTJEMzUKKzoxMDA5QjAwMDAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwRTIKKzoxMDA5QzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBENTAwMDAwMDAyNjQKKzoxMDA5RDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDcKKzoxMDA5RTAwMDAwMDAwMEQ0MDAwMDNGMDAwMDQwMEMxMTAwMDAwMEQ2QzEKKzoxMDA5RjAwMDAwMDAxRjAwMDA0MDBDMTEwMDAwMDBENjAwMDAwRjAwOTYKKzoxMDBBMDAwMDAwMjAwQzExMDAwMDAwMDAwMDM4MDAwOTAwMjk0QTIzRDIKKzoxMDBBMTAwMDAwMDAwMDAwM0YwMDAwMDAwMDI4MEUyQjAwMDAwMDAwMzYKKzoxMDBBMjAwMDAwMDAwMDAyMDAyMjBFMjMwMDAwMDAwMDAwMDAwMDA3NkEKKzoxMDBBMzAwMDAwNDk0QTIzMDAwMDAwREMwMDM4MEYwOTAwMjA0ODExNUIKKzoxMDBBNDAwMDAwMDAwMDAwNjgwMDAwMDcwMDIwNDgxMTAwMDAwMDAwQkUKKzoxMDBBNTAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDBBNjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0NjQKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRkQKKzoxMDBBODAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMjAyNDkKKzoxMDBBOTAwMDAwMjA0NDExMDAwMDAwMDAwMEZGMDAwMDAwMjgwRTIyOEEKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwODAwMDI5NEEyMzAwMDAwMDAwMzAKKzoxMDBBQjAwMDAwMDAwMDI3MDAyMDBFMkQwMDAwMDAwMDAwMDAwMDI2OEUKKzoxMDBBQzAwMDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwMDAwMkYwMDgzMTUKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEVBNDAKKzoxMDBBRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY1RjAwMDAwMDAwNDEKKzoxMDBBRjAwMDAwNDAwMDAwMDAwMDAwRUIwMDAwMDAwMDAwNjAwMDAwNkIKKzoxMDBCMDAwMDAwMDAwNjYyMDAwMDAwMDcwMDIwMjIyRDAwMDAwMDAwMDcKKzoxMDBCMTAwMDAwMDAwMDA1MDAyMjBFMjIwMDAwMDAwMDAwMTAwMDAwNkUKKzoxMDBCMjAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjkyMDY4QkIKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwNkQKKzoxMDBCNDAwMDAwMDAwMEVGMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDBCNTAwMDAwMjkyMDY4MDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzIKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIxMDIyMzAwMDAwMDAwM0MKKzoxMDBCNzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDBGODAwMDAwMDBCN0UKKzoxMDBCODAwMDAwMjEwMjI4MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwNDYKKzoxMDBCOTAwMDAwMDAwMEY4MDAwMDA0MDAwMDI5MjIyODAwMDAwMDAwRTYKKzoxMDBCQTAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMDAwMDAwMDFDOTcKKzoxMDBCQjAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMTAKKzoxMDBCQzAwMDAwMDAwMEZEMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDQKKzoxMDBCRDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDFFN0UKKzoxMDBCRTAwMDAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwRTAKKzoxMDBCRjAwMDAwMDAwMTBCMDAwMEEzMEYwMDIwNDQxMTAwMDAwMDAwQzIKKzoxMDBDMDAwMDAwMDAwMDExMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDAxNzcKKzoxMDBDMTAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwQjQKKzoxMDBDMjAwMDAwMDAwMTA0RkZGRkZGRkYwMDQwNDgxMTAwMDAwMTBCMUUKKzoxMDBDMzAwMDAwMDAwMDAyMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDBDNDAwMDBDQzAwMDAwMDAwMDAxMDcwMDAwRkZGRjAwNDA0ODExMzkKKzoxMDBDNTAwMDAwMDAwMTBCMDAwMDAwMDQwMDJGMDIyMzAwMDAwMDAwMzAKKzoxMDBDNjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDEwQTAwMDAwMEZGQUUKKzoxMDBDNzAwMDAwNDA0ODExMDAwMDAxMEIwMDAwMDAwMTAwMjA0ODExNTUKKzoxMDBDODAwMDAwMDAwMDAwMDAwMkM0MDAwMDIwNDQxMTAwMDAwMDAwMjkKKzoxMDBDOTAwMDAwMDAwMDFGMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDBDQTAwMDE0QzAwMDAwMDAwMDAxMTIwMDAwMDAxMDQwMjEwRTIwQkUKKzoxMDBDQjAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwQTgKKzoxMDBDQzAwMDAwMDAwMDE4NDAyMjRBMjAwMDAwMDAwMDAwMDAwMDEwMzAKKzoxMDBDRDAwMEMwNDI0QTIwMDAwMDAxMTQwMDAwMDAwMDAwMjAwQzExNTYKKzoxMDBDRTAwMDAwMDAwMDAwMDAwMDAwMTMwMDIwMzYyMzAwMDAwMDAwNzgKKzoxMDBDRjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDBEMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQTAwMjAxMDExMUYKKzoxMDBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwN0UKKzoxMDBEMjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDExQjAwMDAwMDAwQkIKKzoxMDBEMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTAwNTMxMjI0QjAKKzoxMDBENDAwMDAwMDAwMTE3RkZCRkZGRkYwMDI4M0EyRTAwMDAwMDAwM0YKKzoxMDBENTAwMDAwMDAwMDFCMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDBENjAwMDE0QzAwMDAwMDAwMDAxMkU4MTAwMDAwMDAwMjA0NDExOEEKKzoxMDBENzAwMDAwMDAwMDAwMDAwMDAwMEQwMDIwNDgxMTAwMDAwMDAwRUQKKzoxMDBEODAwMDAwMDAwMDE4MDAyMjBFMzAwMDAwMDAwMEZDMDAwMDAwRUYKKzoxMDBEOTAwMDAwMjgwRTIzMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDQKKzoxMDBEQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwQkMKKzoxMDBEQjAwMDAwMDAwMDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDBFMDUKKzoxMDBEQzAwMDAwMjA0NDExMDAwMDAwMDAwN0Y4RkYwODAwMjA0ODExMkYKKzoxMDBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NEEyMzAwMDAwMDAwN0QKKzoxMDBERTAwMDAwMDAwMDFDMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA4NzQKKzoxMDBERjAwMDAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRTgKKzoxMDBFMDAwMDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDAwMDAwMDAwMzkKKzoxMDBFMTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDBFMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwQzkKKzoxMDBFMzAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDBFNDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMTdDOEIKKzoxMDBFNTAwMDAwMjA0NDExMDAwMDAwMDAwMDgwMDAwMDAwMjA0ODExMjQKKzoxMDBFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNjAwMDAwMDAwMTQKKzoxMDBFNzAwMDAwMDAwMDA4MDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDBFODAwMDE3MDAwMDAwMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExRjIKKzoxMDBFOTAwMDAwMDAwNjhBMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwNTAKKzoxMDBFQTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDY4OTAwMDAwMDA0REIKKzoxMDBFQjAwMDAwNDA0QzExMDAwMDAxMzU4MTAwMDAwMDAwMjA0NDExNjkKKzoxMDBFQzAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQTgKKzoxMDBFRDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFDNjgKKzoxMDBFRTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExQjYKKzoxMDBFRjAwMDAwMDAwNjhBMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwRkUKKzoxMDBGMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDEzQzAwMDAwMDAwQjAKKzoxMDBGMTAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRjEKKzoxMDBGMjAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTAwMDAwMzE1MjkKKzoxMDBGMzAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDBGNDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwNjAwMDAwMTUKKzoxMDBGNTAwMDAwMDAwMTYwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwOUMKKzoxMDBGNjAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNjAKKzoxMDBGNzAwMDQwMjgwNjIwMDAwMDAwMDAwMDAwMDAxMEMwMjEwQTIwQzgKKzoxMDBGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0MTQ2MTAwMDAwMDAwQjgKKzoxMDBGOTAwMDAwMDAwMDAwMDA3NDE4ODIwMDAwMDJCQjAwMDFBMUZERTcKKzoxMDBGQTAwMDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjAwMkYwMjJGMEMKKzoxMDBGQjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTQ3MUQKKzoxMDBGQzAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwMUMKKzoxMDBGRDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMzEKKzoxMDBGRTAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwQjQKKzoxMDBGRjAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAzRkZGODcKKzoxMDEwMDAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwOTQKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTYwMEYKKzoxMDEwMjAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMDAwMDBGRkZGMjMKKzoxMDEwMzAwMEMwMjgxMjIwMDAwMDAwMDAwMDAwMDAxMDQwMjExNjIwRUYKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMEZGRkZDMDY4MUEyMDAwMDAwMkJCODMKKzoxMDEwNTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMUMKKzoxMDEwNjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNTQKKzoxMDEwNzAwMDAwMDAwMTU4MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMTIKKzoxMDEwODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNkMKKzoxMDEwOTAwMDAwMzAwQTJGMDAwMDAwMDAwMDAwMDAwMTAwMjEwQTIyOTkKKzoxMDEwQTAwMDAwMDAwMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwOTkKKzoxMDEwQjAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMjkKKzoxMDEwQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOTUKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMTAwMDAwMDAwMzYKKzoxMDEwRTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwOTUKKzoxMDEwRjAwMDAwNjAwMDAwMDAwMDAxOEYwMDAwMDAwMDAwNjAwMDAwQTAKKzoxMDExMDAwMDAwMDAwMUEwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwQTAKKzoxMDExMTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDExMjAwMDAwMjAyQzA4MDAwMDAwMDAwMDAwMDAwMDAwMjAyNDExMTYKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjgxMTAwMDAwMDAwNTYKKzoxMDExNDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2OUMKKzoxMDExNTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMjMKKzoxMDExNjAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwMDMKKzoxMDExNzAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyRTUKKzoxMDExODAwMDAwMjIxRTI5MDAwMDAwMDAwMDAwMDAwMDAwNzA0OEVCNTMKKzoxMDExOTAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkJCOTUKKzoxMDExQTAwMDAwMDAwMDAxNDAzMzA2MjAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDExQjAwMEMwMzAyNDA5MDAwMDAwMDAwMDAwM0ZGRjAwMkYwMjJGNzQKKzoxMDExQzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMzMKKzoxMDExRDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzAwMDAwMDAwMEEKKzoxMDExRTAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQzMKKzoxMDExRjAwMDAwMDAwMTgxMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBRDIKKzoxMDEyMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDE4Njk1MDAwMDAwODIKKzoxMDEyMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDcKKzoxMDEyMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTg2NEIKKzoxMDEyMzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxODUKKzoxMDEyNDAwMDAwNTMwNjIxMDAwMDAxODI5MjAwMDAwMDAwMjA0NDExOUEKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwNDgwMDAwMDAwMTk3OEUKKzoxMDEyNjAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDExNTkKKzoxMDEyNzAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDAwMDAwNzgwNDJBNzUKKzoxMDEyODAwMDAwMDAwMkZCMDAwMDAwMDAwMDIwMjgwOTAwMDAwMDAwMTAKKzoxMDEyOTAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDEyQTAwMDBDQzAwMDAwMDAwMDAxNzQwMDAwMDAwMEMwNDAwNDAwRjkKKzoxMDEyQjAwMDAwMDAwMDAxMDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1OEUKKzoxMDEyQzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDEyRDAwMDBDRTAwMDAwMDAwMDAxOTQwMDAwMDAxNUMwMjAzNjIwNDIKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMTZDMDIwMzYyMDAwMDAwMDAwQjIKKzoxMDEyRjAwMDNGODAwMDAwMDAyMDA0MTEwMDAwMDAwMDQ2MDAwMDAwQjQKKzoxMDEzMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMDAwMDAwODAwMDAwMzEKKzoxMDEzMTAwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwQkIKKzoxMDEzMjAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDEzMzAwMDBDQzAwMDAwMDAwMDAxOUIwMDAwMDAwMTAwODA0ODExNkIKKzoxMDEzNDAwMDAwMDAwMDAwMDAwMDAwMjEwMDgwNDgxMTAwMDAwMDAwQTMKKzoxMDEzNTAwMDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwRTkKKzoxMDEzNjAwMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjQwMjgxNjIwQ0UKKzoxMDEzNzAwMDAwMDAwMDAwMDAwMDAwMTBDMDgxMUEyMDAwMDAwMDAwRTIKKzoxMDEzODAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA2NjEKKzoxMDEzOTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwODAwMjIxRTMwNUMKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwMjkwMDIwMUEyRDAwMDAwMDAwQUQKKzoxMDEzQjAwMDAwMDBFMDAwMDAyMDQ0MTEwMDAwMDAwMEZGRkJGRjA5RDYKKzoxMDEzQzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwRjAwMjAyMjJEMjYKKzoxMDEzRDAwMDAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyODAwMDAwMDAwNTQKKzoxMDEzRTAwMDAwMDAwMDA2MDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDEzRjAwMDAwMjkyMEU4MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA4NEMKKzoxMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjMKKzoxMDE0MTAwMDA2MEEwMjAwMDAyOTRBMjYwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDE0MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExQ0EKKzoxMDE0MzAwMDAwMDAwMDAwMDAwMDAxMDAwMDIwMTgxMTAwMDAwMDAwNjIKKzoxMDE0NDAwMDAwMDAwMDA4MDA2MjFFMjgwMDAwMDEyRjAwMDAwMDA4QjQKKzoxMDE0NTAwMDAwODIyMjI4MDAwMDAwMDAwMDAyQzAwMDAwMjA0NDExODkKKzoxMDE0NjAwMDAwMDAwMDAwMDAwMDAwMTUwMDYwMEUyRDAwMDAwMUJEMEUKKzoxMDE0NzAwMDAwMDAwMDE2MDA2MDBFMkQwMDAwMDFCRDAwMDBDMDA4MzUKKzoxMDE0ODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNzAwMjAwRTJENzUKKzoxMDE0OTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMUI5QkUKKzoxMDE0QTAwMDAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDE0QjAwMDAwMjA0ODAxMDAwMDAwMDAzOTAwMDAwMDAwMjA0ODExMTEKKzoxMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQTMKKzoxMDE0RDAwMDAwMDAwMDAwMDA4MDQ4MDIwMDAwMDAwMDAwMDAwMDE4MkEKKzoxMDE0RTAwMDAwMjAyRTJEMDAwMDAwMDAwMDAwMDAwMDAwM0IwRDYzRDYKKzoxMDE0RjAwMDAwMDAwMDAwMDAwMDAwMDgwMDIyNEEyMzAwMDAwMDAwNTUKKzoxMDE1MDAwMDAwMDAwMDEwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDE4MjQKKzoxMDE1MTAwMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAwMDAwODA0ODAzNzEKKzoxMDE1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCNTAKKzoxMDE1MzAwMDAwMDAxMDAwMDA2MDA0MTEwMDAwMDMxNTAwMDAwMDAwMEUKKzoxMDE1NDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExRUQKKzoxMDE1NTAwMDAwMDAwMUIyMDAwMDAwMDcwMDIxMDYyRjAwMDAwMDAwN0IKKzoxMDE1NjAwMDAwMDAwMDEzMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAxMTAKKzoxMDE1NzAwMDAwMjAyQzExMDAwMDAwMDAwMDAwRkZGRjQwMjgyMjIwNjYKKzoxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMEYwMDI2MjIyODAwMDAwMDAwREMKKzoxMDE1OTAwMDAwMDAwMDEwNDAyMTI2MjAwMDAwMDAwMDAwMDAwMDBGODUKKzoxMDE1QTAwMDAwMjYyNjI5MDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyN0MKKzoxMDE1QjAwMDAwMDAwMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwM0UKKzoxMDE1QzAwMDAwMDAwMDFCMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDE1RDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwQ0QKKzoxMDE1RTAwMDAwMDAwMUUwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMjcKKzoxMDE1RjAwMDAwMDAwMDgxMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDNTQKKzoxMDE2MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRUIKKzoxMDE2MTAwMDAwMDAwMDAwMDAwMDAwODAwMDIwMUMxMTAwMDAwMDAwRkQKKzoxMDE2MjAwMDAwMDAwMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDE2MzAwMDBDRTAwMDAwMDAwMDAxREMwMDAwMDAwMDAwNjAwMDAwODEKKzoxMDE2NDAwMDAwMDAwMUU5MDAwMDAwMDEwMDUzMUUyNzAwMDAwMUQ4M0UKKzoxMDE2NTAwMDAwMDAwMDAxMDAyMDJDMTEwMDAwMDAwMDAwMDAwMDFGMEQKKzoxMDE2NjAwMDAwMjgwQTIyMDAwMDAwMDAwMDAwMDAxRjAwMjgyQTJBOEIKKzoxMDE2NzAwMDAwMDAwMDAwMDAwMDAwMDEwMDUzMDYyMTAwMDAwMUQxMUQKKzoxMDE2ODAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyNjUKKzoxMDE2OTAwMDAwMzA0QTJGMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExOEYKKzoxMDE2QTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzAKKzoxMDE2QjAwMDAwMDAwMDAxMDAzMDFFMkYwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE2QzAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRDYKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUU5QzAKKzoxMDE2RTAwMDAwMDAwMDAxMDA1MzFFMjcwMDAwMDFFNTAwMDBGRkZGN0QKKzoxMDE2RjAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAwRjAwMjYwRTIzRUUKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwQjYKKzoxMDE3MTAwMDAwMDAwMDBGMDAyNjEyMjQwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDE3MjAwMDAwMjAxNDExMDAwMDAwMDAwMDAwMDAwMDAwNjAxODExRUIKKzoxMDE3MzAwMDAwMDAwMkJCMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwRDgKKzoxMDE3NDAwMDAwMDAwMDAwMDAyRjAyMkIwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDE3NTAwMDBDRTAwMDAwMDAwMDAxRjgwMDAwMDAxMDAwMjIxNjI4MzQKKzoxMDE3NjAwMDAwMDAwMDAwRkZGRjAwMDAwMDI4MTYyNTAwMDAwMDAwMTgKKzoxMDE3NzAwMDAwMDBGRkZGMDAyODFBMjkwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDE3ODAwMDAwMjk0OEM1MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODBBQjEKKzoxMDE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMkMxMTAwMDAwMDAwRUMKKzoxMDE3QTAwMDAwMDAwMDEwMDAyMjE2MjMwMDAwMDAwMEZGRkYwMDAwRDAKKzoxMDE3QjAwMDAwMjgxNjI1MDAwMDAwMDAwMDAwRkZGRjAwMjgxQTI0NjIKKzoxMDE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDhDNTAwMDAwMDAwRTMKKzoxMDE3RDAwMDAwMDAwMDAwMDA3MzE1MDMwMDAwMDIwNTAwMDAwMDAwNzcKKzoxMDE3RTAwMDAwMjAxODA1MDAwMDAwMDAwMDAwMDAwMDAwNzMxNTI0MTAKKzoxMDE3RjAwMDAwMDAwMjA1MDAwMDAwMDAwMDJEMTRDNTAwMDAwMDAwREMKKzoxMDE4MDAwMDAwMDAwMDAwMDAzMDA4QTIwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDE4MTAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjAyODAyMTQKKzoxMDE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMjAwMzAwMDAwMDAwNzUKKzoxMDE4MzAwMDAwMDAwMDAwMDA4MDI0MDQwMDAwMDAwMDAwMDAwMDBGRjEKKzoxMDE4NDAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwN0MKKzoxMDE4NTAwMDAwMDAwNjg5MDAwMDAwMDAwMDJCMTQwNTAwMDAwMDAwQjUKKzoxMDE4NjAwMDAwMDAwMDAxMDA5MDE2MjUwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDE4NzAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExODgKKzoxMDE4ODAwMDAwMDAwMzE1MDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMEIKKzoxMDE4OTAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAyMjU2QTQKKzoxMDE4QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTAwMjk0QTIyMTQKKzoxMDE4QjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwNDgKKzoxMDE4QzAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDE4RDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzgKKzoxMDE4RTAwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDUKKzoxMDE4RjAwMDAwMDAwMDAzMDAzODRBMjEwMDAwMDAwMDAwMDBBMUZDQTUKKzoxMDE5MDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRTgKKzoxMDE5MTAwMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTIyMDAwMDAwMDAwMkYKKzoxMDE5MjAwMDAwMDAwMDEwQzAyMTFBMjAwMDAwMDAwMDAwMDBGRkZGOEUKKzoxMDE5MzAwMDQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEMwMjExNjIwRUEKKzoxMDE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MTQ2NTAwMDAwMkJCRUQKKzoxMDE5NTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFMDAwMDAwMDAxNTAKKzoxMDE5NjAwMDAwMzMwNjIxMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxQ0IKKzoxMDE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMjE5ODAKKzoxMDE5ODAwMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDE5OTAwMDBDQzAwMDAwMDAwMDAyMTIwMDAwMDAwMEMwNDAwNDAwNjMKKzoxMDE5QTAwMDAwMDAwMDAxMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQyOEUKKzoxMDE5QjAwMDAwMDAwMDAwMDA0MDA0MEYwMDAwMDIxMzAwMDAwMDAwQkYKKzoxMDE5QzAwMDAwNjAwMDAwMDAwMDA2MkUwMDAwMDAwMDAwNjAwMDAwMjMKKzoxMDE5RDAwMDAwMDAwNjQyMDAwMDAyMTAwMDYwMDQxMTAwMDAwMzE1MjAKKzoxMDE5RTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFBMDAwMDAwMDAwRjYKKzoxMDE5RjAwMDAwNjAwMDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwOEEKKzoxMDFBMDAwMDAwMDAwMkJCMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMTQKKzoxMDFBMTAwMDkzODAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDFBMjAwMDAwMjA0ODA4MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGRTYKKzoxMDFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjMyODgKKzoxMDFBNDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQTAwMDAwMDAwRkIKKzoxMDFBNTAwMDAwNDAwMDAwMDAwMDAyMzY5NTAwMDAwMDAwMjA0NDExMDQKKzoxMDFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRjAwMDAwMDAwMTYKKzoxMDFBNzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDIzNjAwMDAwMDAwNDIKKzoxMDFBODAwMEMwNDA0ODAwMDAwMDAyMzM5MjAwMDAwMDAwMjA0NDExRDIKKzoxMDFBOTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMUUKKzoxMDFBQTAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MzMKKzoxMDFBQjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExQkEKKzoxMDFBQzAwMDAwMDAwMDAwMDAwMDAwMDMwMDIwNDgxMTAwMDAwMDAwOUEKKzoxMDFBRDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRjMKKzoxMDFBRTAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExNjkKKzoxMDFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDQxMTAwMDAwMkZCNzQKKzoxMDFCMDAwMDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDAwRDAKKzoxMDFCMTAwMDAwNjAwMDAwMDAwMDA2MkUwMDAwQTAwQzAwMjA0NDExMTAKKzoxMDFCMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwOEQKKzoxMDFCMzAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDFCNDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxODQwMjEwQTIwODcKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwMDMwMDJGMDIyMjAwMDAwMDAwMkYKKzoxMDFCNjAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDI0QzAwMDAwMDE0MjkKKzoxMDFCNzAwMDAwMjAyMjJEMDAwMDAwMDAwMDA4MDEwMTAwMjkyMjI4NzkKKzoxMDFCODAwMDAwMDAwMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwQzMKKzoxMDFCOTAwMDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDFCQTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTUKKzoxMDFCQjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMjUxOEEKKzoxMDFCQzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDEwOUEKKzoxMDFCRDAwMDAwNjAwNDExMDAwMDAzMTUzRjgwMDAwMDAwMjAwNDExODQKKzoxMDFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyQzkKKzoxMDFCRjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRUYKKzoxMDFDMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwRkIKKzoxMDFDMTAwMDAwMDAwMjdDMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQzQKKzoxMDFDMjAwMDAwMDAwMDAxMDAyMTFFMjcwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDFDMzAwMDE0RTAwMDAwMDAwMDAyNkEwMDAwMDAxMjAwMjAxRTJEQzcKKzoxMDFDNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MUUyNzAwMDAwMDAwMjkKKzoxMDFDNTAwMDAwMDAwMDAwMDAzNDFDMjcwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDFDNjAwMDEyQzAwMDAwMDAwMDAyNUYwMDAwMDAwMDAwMjAxQzExRjQKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNTAwMDAwMDAwNTAKKzoxMDFDODAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2MjAwMDAwMDAwMjgKKzoxMDFDOTAwMDAwMjAxNDA3MDAwMDAwMDAwMDAwMDAxMjAwMjAxRTJEOEMKKzoxMDFDQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMUUyNzAwMDAwMDAwQkUKKzoxMDFDQjAwMDAwMDAwMDAwMDAzNDFDNDcwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDFDQzAwMDEyQzAwMDAwMDAwMDAyNjcwMDAwMDAwMDAwMjAxQzExOEMKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwRUYKKzoxMDFDRTAwMDAwMDAwMDAwMDhDMDAwMDAwMDAwMDI2QTAwMDAwMDAwQzAKKzoxMDFDRjAwMDAwMjAxODA3MDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwNDUKKzoxMDFEMDAwMDAwMDAwMkMxMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMjMKKzoxMDFEMTAwMDAwMDAwMDAwMDAzNDIwMjMwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDFEMjAwMDEyQzAwMDAwMDAwMDAyNzIwMDAwMDAwMDAwMzQyMDQ0RDUKKzoxMDFEMzAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjcxNUUKKzoxMDFENDAwMDAwMDAwMDE2MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE4NTQKKzoxMDFENTAwMDAwNDA0ODExMDAwMDAyNzYwMDAwMDAwMDAwMzQyMDQ0REEKKzoxMDFENjAwMDAwMDAwMDAwMDAwMDAwMDAxMkMwMDAwMDAwMDAwMjc1MkEKKzoxMDFENzAwMDAwMDAwMDE3MDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDE5MjIKKzoxMDFEODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExQzgKKzoxMDFEOTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwQzkKKzoxMDFEQTAwMDAwMDFBMUZEMDA2MDQ0MTEwMDAwMDJFOTAwMDAzRkZGQjYKKzoxMDFEQjAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwRjcKKzoxMDFEQzAwMDAwMDAwMjU2MDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxQjYKKzoxMDFERDAwMDAwMDAwMDEwNDAyMTA2MjAwMDAwMDAwMDAwMDBGRkZGNkUKKzoxMDFERTAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxMDQwMjEwRTIwNDIKKzoxMDFERjAwMDAwMDAwMDAwMDAwMEZGRkZDMDI4MTIyMDAwMDAwMDAwQ0IKKzoxMDFFMDAwMDAwMDAwMDEwNDAyMTE2MjAwMDAwMDAwMDAwMDBGRkZGMkQKKzoxMDFFMTAwMEMwODgxQTIwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNEEKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMzgKKzoxMDFFMzAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDAwMzUKKzoxMDFFNDAwMDAwNjAwMDAwMDAwMDA2MkUwMDAwMDAwMEMwNjAwMDAwREUKKzoxMDFFNTAwMDAwMDAwMkEzMDAwMDAwMDUwMDIwMEEyRDAwMDAwMDAwODEKKzoxMDFFNjAwMDAwMDAwMDA4MDAyMjBBMjIwMDAwMDAwMDAwMDAwMDJCRjEKKzoxMDFFNzAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAxQzAwMjAxRTJENzQKKzoxMDFFODAwMDAwMDAwMDAwMDAwMDcwMDAwMDI4MUUyNzAwMDAwMDAwNzUKKzoxMDFFOTAwMDAwMDAwMDAwMDAzMTFDRTYwMDAwMDAwMDAwMDAwMDJBRTUKKzoxMDFFQTAwMDAwMjAxQTJEMDAwMDAwMDAwMDAwMDAwQzAwMjIxQTI2NUQKKzoxMDFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDBFNjAwMDAwMDAwMEQKKzoxMDFFQzAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDI5MjAwMDAwMDAwOTgKKzoxMDFFRDAwMDAwMjAxQzExMDAwMDAwMDAwMDAwMDAwMDAwMjAwQzExNzgKKzoxMDFFRTAwMDAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMzAwMDAwMDAwNEUKKzoxMDFFRjAwMDAwMDAwMDEwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDFGMDAwMDAwNjkxQ0UyMDAwMDAxMkY5MzgwMDAwMDAwMjA0NDExQjIKKzoxMDFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwNTIKKzoxMDFGMjAwMDk1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDFGMzAwMDAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwNTUKKzoxMDFGNDAwMDAwMDAwMjlEMDAwMDAwMDEwMDMzM0UyRjAwMDAwMDAwNTEKKzoxMDFGNTAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDkyMDAwMDAwQ0UKKzoxMDFGNjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRDQKKzoxMDFGNzAwMDAwMDAwMDAwMDAwMDAwMUMwMDQwMzYyNzAwMDAwMDAwQTgKKzoxMDFGODAwMDAwMDAwMDBDQzAyMjBBMjAwMDAwMDAwMDAwMDAwMDI5MTAKKzoxMDFGOTAwMDAwMjAzNjIyMDAwMDAwMDAwMDAwMDAyOEMwNDAzNjIwNEIKKzoxMDFGQTAwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwNzYKKzoxMDFGQjAwMDAwMDAwMDA5MDAyMDQ4MTEwMDAwMDAwMEExMDAwMDAwRkUKKzoxMDFGQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExQzIKKzoxMDFGRDAwMDAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwNzUKKzoxMDFGRTAwMDAwMDAwMDAwMDAyQzFDRTMwMDAwMDAwMDAwMDAwMDIxQTUKKzoxMDFGRjAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyMjAwMjAxRTJERDcKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDMUNFNDAwMDAwMDAwQTQKKzoxMDIwMTAwMDAwMDAwMDIyMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIzRkUKKzoxMDIwMjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEEzNTEKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwNEYKKzoxMDIwNDAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDI0Q0MKKzoxMDIwNTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAKKzoxMDIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJEMUQwNzAwMDAwMDAwMUYKKzoxMDIwNzAwMDAwMDAwMDI0MDA4MDM2MjcwMDAwMDAwMDAwMDAwMDIxM0UKKzoxMDIwODAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyMjAwMjAzNjI0M0IKKzoxMDIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzAwMDAwMDAwNTAKKzoxMDIwQTAwMDAwMDAwMDIzMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIwQjAwMDAwMzExQ0M0MDAwMDAwMDAwMDAwMDAyNDAwODAzNjI3MEUKKzoxMDIwQzAwMDAwMDAwMDAwMDAwMDAwMUEwMDIwMzYyNzAwMDAwMDAwNzkKKzoxMDIwRDAwMDAwMDAwMDFCMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDE3NTAKKzoxMDIwRTAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMjAwMjEwMjI3MzkKKzoxMDIwRjAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMkRDMkUKKzoxMDIxMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJEOTAwMDAwMDFBOUEKKzoxMDIxMTAwMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAxQjAwMjAzNjI4QTkKKzoxMDIxMjAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwMkQKKzoxMDIxMzAwMDAwMDAwMDAyMDAyMTAyMjcwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDIxNDAwMDE0RTAwMDAwMDAwMDAyRDkwMDAwMDAwMzAwMjEwMjI3NzMKKzoxMDIxNTAwMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMkRDQUQKKzoxMDIxNjAwMDAwMDAwMDIzMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDIxNzAwMDAwMkUwMEUxMDAwMDAwMDAwMDAwMDAwMDAyQzAwMDAwOEUKKzoxMDIxODAwMDAwMDAwMkRDMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwRTUKKzoxMDIxOTAwMDAwMDAwMDAwMDAzMTIwQTEwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDIxQTAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMDA2QzAwMDAwNTMKKzoxMDIxQjAwMDAwMDAwMkRDMDAwMDAwMjQwMDIwMUUyRDAwMDAwMDAwQjIKKzoxMDIxQzAwMDAwMDAwMDAwMDAyRTAwRTIwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIxRDAwMDAyQzAwMDAwMDAwMDAyREMwMDAwMDAyMjAwMjAxRTJERDIKKzoxMDIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwREMKKzoxMDIxRjAwMDAwMDAwMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDIyMDAwMDA2QzAwMDAwMDAwMDAyREMwMDAwMDAwMDAwNjAwMDAwQ0EKKzoxMDIyMTAwMDAwMDAwNjY1MDAwMDAwMDAwMDYwMDAwMDAwMDAwMkI1M0MKKzoxMDIyMjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDAwOEUKKzoxMDIyMzAwMDAwNjAwMDAwMDAwMDAyQjUwMDAwMDAwMDAwNjAwMDAwMjcKKzoxMDIyNDAwMDAwMDAwNjVDMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFMEMKKzoxMDIyNTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBNzAwMDAwMDAwNzUKKzoxMDIyNjAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAxQTAwMjAxRTJEQzkKKzoxMDIyNzAwMDAwMDAwMDAwMDAwMDAwMUIwMDgwMjIyRDAwMDAwMDAwNzQKKzoxMDIyODAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDIyOTAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTYKKzoxMDIyQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwQjcKKzoxMDIyQjAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDEwMTYKKzoxMDIyQzAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0OTYKKzoxMDIyRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwOEUKKzoxMDIyRTAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDUKKzoxMDIyRjAwMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3ODMKKzoxMDIzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwNUMKKzoxMDIzMTAwMDAwMDAwMDAwMDAyOTQ4NDcwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDIzMjAwMDAwMzExQ0EzMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3NDYKKzoxMDIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwQTUKKzoxMDIzNDAwMDAwMDAwMDAwMDAzMTFDQTEwMDAwMDAwMDAwMDAwMDEwOEYKKzoxMDIzNTAwMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAwMDAwMjk0ODQ3NUUKKzoxMDIzNjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwRkEKKzoxMDIzNzAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDAwMDBGRkZGNEEKKzoxMDIzODAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3NjIKKzoxMDIzOTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMTAwMDAwMDAwQ0MKKzoxMDIzQTAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMDAwMDBGRkZGMUMKKzoxMDIzQjAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDAwODk0OTA3RDIKKzoxMDIzQzAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwOUEKKzoxMDIzRDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxMDQKKzoxMDIzRTAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzMwOEEyQzMKKzoxMDIzRjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwNkIKKzoxMDI0MDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDI0MTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzNTMKKzoxMDI0MjAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMzUKKzoxMDI0MzAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAxQTMKKzoxMDI0NDAwMDAwMjIwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMzAwOEEyNjUKKzoxMDI0NTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMjAwMDAwMDAwMEEKKzoxMDI0NjAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDI0NzAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzNzAKKzoxMDI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMzcKKzoxMDI0OTAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDI0QTAwMDAwMjk0OTA3MDAwMDAwMDAwMDAwMDAwMDAwMzgwOEM1QUUKKzoxMDI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDg0MTAwMDAwMDAwQTMKKzoxMDI0QzAwMDAwMDAwMDAxMDAyMjBBMjIwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI0RDAwMDAwMzMwOEEyMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyQUQKKzoxMDI0RTAwMDAwMDAwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwNzcKKzoxMDI0RjAwMDAwMDAwMDAwMDA4OTQ5MDcwMDAwMDAwMDAwMDAwMDE3RUMKKzoxMDI1MDAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwODgKKzoxMDI1MTAwMDAwMDAwMzE4RkZGRkZGRUYwMDI4MDYyMTAwMDAwMDAwNjUKKzoxMDI1MjAwMDAwMDAwMDE0MDAyMDIyMkQwMDAwMDAwMDAwMDBGOEUwNTAKKzoxMDI1MzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTAxQjMKKzoxMDI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwMTAwMDAwMDAwQjgKKzoxMDI1NTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDI1NjAwMDAwMjA0ODExMDAwMDAwMDAwNjBBMDIwMDAwODA0ODExMDcKKzoxMDI1NzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwN0IKKzoxMDI1ODAwMDk3MDAwMDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDI1OTAwMEMwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExMDMKKzoxMDI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQjIKKzoxMDI1QjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDI1QzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRDEKKzoxMDI1RDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRDMKKzoxMDI1RTAwMDAwMDAwMDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDI1RjAwMDAwQTAwMDBBMDAwMDAwMDA5NzAwMDAwMDAwMjA0NDExMjUKKzoxMDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNTEKKzoxMDI2MTAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMDI2MjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExM0UKKzoxMDI2MzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNzIKKzoxMDI2NDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDI2NTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNkUKKzoxMDI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQzAKKzoxMDI2NzAwMDk3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDI2ODAwMDAwMjA0ODExMDAwMDAwMDA4QTAwMDAwMDAwMjA0NDExRDIKKzoxMDI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwQzEKKzoxMDI2QTAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDI2QjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExRTAKKzoxMDI2QzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwRTIKKzoxMDI2RDAwMDAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDI2RTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwRTUKKzoxMDI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMzAKKzoxMDI3MDAwMDAwMDAyMjU3MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzRDgKKzoxMDI3MTAwMEMwNDg0QTIwMDAwMDAwMDAwMDAwMjI1RDAwMjA0NDExNTMKKzoxMDI3MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwNjEKKzoxMDI3MzAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDY0MjAwMDAwMDAwRjEKKzoxMDI3NDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExQUUKKzoxMDI3NTAwMDAwMDAwMDAwMDAwMDAwMDMwMDM4NEEyMjAwMDAwMDAwRDIKKzoxMDI3NjAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDI3NzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAxQTFGRDAwMjA0NDExMUQKKzoxMDI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMjAwMDAwMDAwRjYKKzoxMDI3OTAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDI3QTAwMDQwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTQwMzA0QTIwQTYKKzoxMDI3QjAwMDAwMDAwMDAwMDAwMDAwMDJDMDMwNEEyMDAwMDAwMDAwQkQKKzoxMDI3QzAwMDAwMDAwMDAxMDA1MzBBMjIwMDAwMDM0QjAwMDAwMDNGRkMKKzoxMDI3RDAwMEMwMjgwQTIwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExRjEKKzoxMDI3RTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNkYKKzoxMDI3RjAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4MzMKKzoxMDI4MDAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExN0MKKzoxMDI4MTAwMDAwMDAwNjhBMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwQzQKKzoxMDI4MjAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDM1NDAwMDAwMDE0NDkKKzoxMDI4MzAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwNzkKKzoxMDI4NDAwMDAwMDAwMzY0MDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwN0MKKzoxMDI4NTAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MzgKKzoxMDI4NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODAyNDkKKzoxMDI4NzAwMDAwMDAwMzZFMDAwMDIxMDAwMDIwNDQxMTAwMDAwMDAwNTEKKzoxMDI4ODAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDI4OTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRTgKKzoxMDI4QTAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwRTAKKzoxMDI4QjAwMDAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDI4QzAwMDBDQzAwMDAwMDAwMDAzNkEwMDAwMjAxMDAwMjA0NDExMkEKKzoxMDI4RDAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwRkYKKzoxMDI4RTAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDI4RjAwMDAwNDA0ODAyMDAwMDAzNUYwMDAwMDAyODAwMkYwMjIyNzEKKzoxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNUJEMzkKKzoxMDI5MTAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDI5MjAwMDAwNDA0ODAyMDAwMDAzNUYwMDAwMDAyQzAwMjAzNjI2MTMKKzoxMDI5MzAwMDAwMDAwMDAwMDAwMDAwNDkwMDIwMTgxMTAwMDAwMDAwMDUKKzoxMDI5NDAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxQ0UKKzoxMDI5NTAwMDAwMzMxQTI2MDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI2QUQKKzoxMDI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMzcwMjgKKzoxMDI5NzAwMDAwMDAwMDJDMDA4MDFBMkQwMDAwMDAwMDAwMDAwMDNGMjUKKzoxMDI5ODAwMEMwMjgwQTIwMDAwMDAwMDAwMDAwMDAxNTAwMkYwMjIyQ0QKKzoxMDI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzg2QzIKKzoxMDI5QTAwMDAwMDAwMDA2MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDI5QjAwMDBDRTAwMDAwMDAwMDAzQjEwMDAwMDAxNjAwMkYwMjIyMEUKKzoxMDI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0I1NjMKKzoxMDI5RDAwMDAwMDAwMDIwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDI5RTAwMDBDRTAwMDAwMDAwMDAzOUMwMDAwMDAwRjAwMkYwMjIyRkEKKzoxMDI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwM0E4NDAKKzoxMDJBMDAwMDAwMDAwMDEwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDJBMTAwMDBDRTAwMDAwMDAwMDAzQTgwMDAwMDAxRTAwMkYwMjIyQUUKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMzkwMjcKKzoxMDJBMzAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDJBNDAwMDAwNDA0ODAyMDAwMDAwMDAwODAwMDAwMDAwMjkwQTIyOUYKKzoxMDJBNTAwMDAwMDAwMDAwMDAwMDAwMDM0MDIxMEUyMDAwMDAwMDAwRTQKKzoxMDJBNjAwMDAwMDAwMDBDQzAyMTEyMjAwMDAwMDAwMDAwMDgwMDAwM0YKKzoxMDJBNzAwMDAwMjgxMjI0MDAwMDAwMDAwMDAwMDAxNEMwMjIxNjIwQ0MKKzoxMDJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MTRBNDAwMDAwMDAwNjUKKzoxMDJBOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJBQTAwMDAwMjk0OEEyMDAwMDAwMDAwMDAwQTFGRTAwMjA0NDExRkYKKzoxMDJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMzAwMDAwMDAwOEIKKzoxMDJBQzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMEYKKzoxMDJBRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExRUYKKzoxMDJBRTAwMDAwMDAwMDAwMDAwMDAwMTYwMDIwNDgxMTAwMDAwMDAwNTcKKzoxMDJBRjAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDE1NUUKKzoxMDJCMDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwN0UKKzoxMDJCMTAwMDAwMDAwMzkyMDAwMDIxMEUwMDIwNDQxMTAwMDAwMDAwN0MKKzoxMDJCMjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDJCMzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExQjIKKzoxMDJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwRkIKKzoxMDJCNTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxN0UKKzoxMDJCNjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExNUUKKzoxMDJCNzAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwNDgxMTAwMDAwMDAwQzUKKzoxMDJCODAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDAzREYKKzoxMDJCOTAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwRUUKKzoxMDJCQTAwMDAwMDAwMzlFMDAwMDIxMDgwMDIwNDQxMTAwMDAwMDAwRTYKKzoxMDJCQjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDJCQzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMjIKKzoxMDJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMjAwMDAwMDAwNkIKKzoxMDJCRTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMDJCRjAwMDAwMjA0ODAyMDAwMDAwMDA4MDAwMDAwMDAwMjA0NDExNzYKKzoxMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNEIKKzoxMDJDMTAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDEwQUUKKzoxMDJDMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwRkIKKzoxMDJDMzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0FFMEYKKzoxMDJDNDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAyMDEwMTQKKzoxMDJDNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDYKKzoxMDJDNjAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwQTgKKzoxMDJDNzAwMDAwMDAwMDA2MDA0MDQ4MTEwMDAwMDAwMDAwMDAyMDEwODUKKzoxMDJDODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDYKKzoxMDJDOTAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwNzgKKzoxMDJDQTAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM2RTAwMDAwMDAwRTQKKzoxMDJDQjAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwODAwRUMKKzoxMDJDQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMTgKKzoxMDJDRDAwMDAwMDAwMDFEMDAyMTAyMjMwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDJDRTAwMDE0RTAwMDAwMDAwMDAzQ0U4MTAwMDAwMDAwMjA0NDExMjkKKzoxMDJDRjAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwNUEKKzoxMDJEMDAwMDAwMDAyMUY4MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE4MUQKKzoxMDJEMTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjFGOTAwNjA0NDExNjcKKzoxMDJEMjAwMDAwMDAwNjhBMDAwMDAwMTEwMDIxMDIzMDAwMDAwMDAwQUYKKzoxMDJEMzAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDNDMDAwMDAyMTAwQkIKKzoxMDJENDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyQTQKKzoxMDJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDgKKzoxMDJENjAwMEJBQkVDQUZFMDAyMDQ4MTEwMDAwMDAwMENBRkVCQUJFNkEKKzoxMDJENzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjAxMDAwMjA0NDExMzUKKzoxMDJEODAwMDAwMDAwMDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwNEEKKzoxMDJEOTAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0NzQKKzoxMDJEQTAwMDAwNDA0ODExMDAwMDAwMDAwMDAwMjE3MDAwMjA0NDExODQKKzoxMDJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwQTkKKzoxMDJEQzAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDgxMDAwMDAwMTcKKzoxMDJERDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwQTAwMjA0ODExRkIKKzoxMDJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwQjMKKzoxMDJERjAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNEMzhDMDAwMDAwOUQKKzoxMDJFMDAwMDAwMjA0NDExMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExNzQKKzoxMDJFMTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQkMKKzoxMDJFMjAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAzRkZGRUEKKzoxMDJFMzAwMDQwMjgwQTIwMDAwMDAwMDA4MDAwMDAwMDQwMjgwRTIwRUEKKzoxMDJFNDAwMDAwMDAwMDAwNDAwMDAwMDBDMDI4MTIyMDAwMDAwMDAwMjgKKzoxMDJFNTAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY4QTAwMDAwMDAwMEQKKzoxMDJFNjAwMDAwMjAxNDEwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzQ0EKKzoxMDJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwM0UxQTIKKzoxMDJFODAwMDAwMDAwMDAwQzA0MDE4MDAwMDAwMDNFNDAwMDAzRkZGMDUKKzoxMDJFOTAwMEMwMjgxQTIwMDAwMDAwMDAwMDA0MDAwMDAwNjk0NjI2MzcKKzoxMDJFQTAwMDAwMDAwNjhBMDAwMDAwMDAwMDIwMTgxMDAwMDAwMDAwNEEKKzoxMDJFQjAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDJFQzAwMDBDQzAwMDAwMDAwMDAzRTcwMDAwMDAwMEMwNDAxQzAwMzAKKzoxMDJFRDAwMDAwMDAwM0VBMDAwMDNGRkZDMDI4MUUyMDAwMDAwMDAwQTEKKzoxMDJFRTAwMDAwMDQwMDAwMDA2OTQ2MjcwMDAwMDY4QTAwMDAwMDAwNzgKKzoxMDJFRjAwMDAwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMDAwMjA0NDAyMjAKKzoxMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MjBDNTAwMDAwMDAwQjQKKzoxMDJGMTAwMDAwMDAwMDAwMDA0OTQ4RTgwMDAwMDAwMEE1ODAwMDAwMTMKKzoxMDJGMjAwMDAwMjAwODExMDAwMDAwMDAwMDAwMjAwMDAwMjAwQzExMEIKKzoxMDJGMzAwMDAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDEyNDMKKzoxMDJGNDAwMDAwMDAwMDAwMDAyMDQ0MDIwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDJGNTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDQwMjA0ODAwQTEKKzoxMDJGNjAwMDAwMDAwMDAwMDAwMDAwMUZDMDIxMDIyMDAwMDAwMDAwM0YKKzoxMDJGNzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNGNzAwMDAyMDEwNTMKKzoxMDJGODAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExRDMKKzoxMDJGOTAwMDAwMDAwMDAwMDAwMEZGRkZDMDQ4MTIyMDAwMDAwM0ZGRjcKKzoxMDJGQTAwMEE3ODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBBMDAwMjEKKzoxMDJGQjAwMDAwMjAwQzExMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExOUMKKzoxMDJGQzAwMDAwMDAwNDEyMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwODUKKzoxMDJGRDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDJGRTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwQTEKKzoxMDJGRjAwMDAwMDAwMDAwODMwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRDkKKzoxMDMwMDAwMDAwMDAwMDAwMDAzMDQ4ODMwMDAwMDAwMDg0MDAwMDAwNDEKKzoxMDMwMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMTMKKzoxMDMwMjAwMDAwMDAwMDAwMDAwMDAwMDAxRDAwMDAwMDAwMDAwMDAwODMKKzoxMDMwMzAwMDgzMDAwMDAwMDA2MDQ0MTEwMDAwMDQxMjAwMDAwMDAwNDIKKzoxMDMwNDAwMEMwNDAwNDAwMDAwMDAwMDFBOTgwMDAwMDAwMjAwODExMTkKKzoxMDMwNTAwMDAwMDAwMDAwMDAwMEMwMDAwMDQwMEMxMTAwMDAwM0ZBNTYKKzoxMDMwNjAwMEFCODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGOEUwMjQKKzoxMDMwNzAwMDAwNDAwQzExMDAwMDAzRkFBRDgwMDAwMDAwMjAwODExOTAKKzoxMDMwODAwMDAwMDAwMDAwMDAwMEY4ODAwMDQwMEMxMTAwMDAwM0ZBNkUKKzoxMDMwOTAwMEIzODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGM0ZDRDUKKzoxMDMwQTAwMDAwNDAwQzExMDAwMDAzRkFBRjgwMDAwMDAwMjAwODExNUUKKzoxMDMwQjAwMDAwMDAwMDAwMDAwMEUwMDAwMDQwMEMxMTAwMDAwM0ZBRDYKKzoxMDMwQzAwMEIxODAwMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDBGMDAwQTYKKzoxMDMwRDAwMDAwNDAwQzExMDAwMDAzRkE4MzAwMDAwMDAwMjA0NDExOUUKKzoxMDMwRTAwMDAwMDAwMDAwMDAwMDIxNDgwMDIwNDgxMTAwMDAwMDAwRkUKKzoxMDMwRjAwMDg0MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDMxMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwN0EKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMkYKKzoxMDMxMjAwMDAxMTgyMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDMxMzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOEEKKzoxMDMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRDUKKzoxMDMxNTAwMDAyMThBMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDMxNjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNUEKKzoxMDMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQTUKKzoxMDMxODAwMDAzMThDMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDMxOTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMkEKKzoxMDMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNzUKKzoxMDMxQjAwMDA0MThGOEUwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDMxQzAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwRkEKKzoxMDMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwNDUKKzoxMDMxRTAwMDA1MThGODgwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDMxRjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwQ0EKKzoxMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwMTQKKzoxMDMyMTAwMDA2MThFMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDMyMjAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwOTkKKzoxMDMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwRTQKKzoxMDMyNDAwMDA3MThGMDAwQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDMyNTAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwNjkKKzoxMDMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwQjQKKzoxMDMyNzAwMDA4MThGM0ZDQzAzMDQ2MjAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDMyODAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMzkKKzoxMDMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwODQKKzoxMDMyQTAwMDAwMDAwMDMwMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDMyQjAwMEMwMjkwQzQwMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjIzMzAKKzoxMDMyQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMUEKKzoxMDMyRDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDg2MDAwMDAwQkUKKzoxMDMyRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAxRTAKKzoxMDMyRjAwMDAwMDAwMDAwODUwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMTQKKzoxMDMzMDAwMDAwMDAwMDAwMDA0MDQ4MDEwMDAwMDAwMDAwMDAyMTdDOTcKKzoxMDMzMTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMTAKKzoxMDMzMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNzUKKzoxMDMzMzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDgxMDAwMDAwRTQKKzoxMDMzNDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExOEUKKzoxMDMzNTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwODUKKzoxMDMzNjAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGQTIKKzoxMDMzNzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAxRjAwMjEwMjMwOTYKKzoxMDMzODAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwNjkKKzoxMDMzOTAwMDAwMDAwMDAwMDA0MDRDMDIwMDAwMDQ0ODAwMDAwMDAwNTMKKzoxMDMzQTAwMEMwMjAwQzAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxMDAwNDEKKzoxMDMzQjAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTQwMDAwMDAwMDAwMTkKKzoxMDMzQzAwMDAwMDAwMDAwQzAyMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDMzRDAwMEMwMjAxQzAwMDAwMDAwMDAwMDAwN0YwMDAwMjgwQTIxMUYKKzoxMDMzRTAwMDAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwNDUKKzoxMDMzRjAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ1NjAwMDAwMDAwODcKKzoxMDM0MDAwMEMwMjAyMDAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwQTUKKzoxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMTAwMDI4MEEyMzAwMDAwMDAwNDcKKzoxMDM0MjAwMDAwMDAwMDEwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDM0MzAwMDBDRTAwMDAwMDAwMDA0NUU4MTAwMDAwMDAwMjA0NDExNDgKKzoxMDM0NDAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDIKKzoxMDM0NTAwMDAwMDQwMDAwMDA2OTQ2MjQwMDAwMDY4QTAwMDAwMDAwMDUKKzoxMDM0NjAwMDAwNDAwMDAwMDAwMDA0NjM4MTAwMDAwMDAwMjA0NDExQkYKKzoxMDM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwRDMKKzoxMDM0ODAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDM0OTAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMDAwNjA0ODA1MTMKKzoxMDM0QTAwMDAwMDAwNjhGMDAwMDAwMDAwMDI4MjRGMDAwMDAwMDAwNEIKKzoxMDM0QjAwMDAwMDAwMDA3MDAyODBBMjMwMDAwMDAwMDAwMDAwMDAxQUYKKzoxMDM0QzAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQkYKKzoxMDM0RDAwMDAwMDAwNDZBMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwODYKKzoxMDM0RTAwMDAwMDAwMDAwMDRFMDAwMDAwMDAwMDQ4MzAwMDAwMDAwNzEKKzoxMDM0RjAwMDAwNDAwMDAwMDAwMDA0OTAwMDAwMDAwMjAwMkYwMjIyQTMKKzoxMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDZGNUUKKzoxMDM1MTAwMDAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDM1MjAwMDAyRTAwMDAwMDAwMDA0ODMwMDAwMDAwMDAwNDAwMDAwRjIKKzoxMDM1MzAwMDAwMDAwNDkwMDAwMDAwMDMwMDJGMDIyMjAwMDAwMDAwQTEKKzoxMDM1NDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ3NDAwMDAwMDAwMTkKKzoxMDM1NTAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwODcKKzoxMDM1NjAwMDAwMDAwNDgzMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkwMDAKKzoxMDM1NzAwMDAwMDAwMDA0MDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDM1ODAwMDBBRTAwMDAwMDAwMDA0NzkwMDAwMDAwMDAwMkYwMEM5REMKKzoxMDM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDgzQkEKKzoxMDM1QTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ5MDAwMDAwMDA1NDIKKzoxMDM1QjAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQ0UKKzoxMDM1QzAwMDAwMDAwNDdFMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwODEKKzoxMDM1RDAwMDAwMDAwMDAwMDZFMDAwMDAwMDAwMDQ4MzAwMDAwMDAwN0UKKzoxMDM1RTAwMDAwNDAwMDAwMDAwMDA0OTAwMDAwMDAwNjAwMkYwMjIyQUUKKzoxMDM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDgzNUEKKzoxMDM2MDAwMDAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDM2MTAwMDA4RTAwMDAwMDAwMDA0ODMwMDAwMDAwMDAwNDAwMDAwRkIKKzoxMDM2MjAwMDAwMDAwNDkwMDAwMDdGMDAwMDI4MEEyMTAwMDAwMDAwMzQKKzoxMDM2MzAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDM2NDAwMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMjEwQTIzM0EKKzoxMDM2NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNDhEMDUKKzoxMDM2NjAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNUIKKzoxMDM2NzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwRkEKKzoxMDM2ODAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMTIKKzoxMDM2OTAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDM2QTAwMEMwMjA0NDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMTYKKzoxMDM2QjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwQzIKKzoxMDM2QzAwMDAwMDA3RjAwMDAyODBBMjEwMDAwMDAwMDAwMDA0NTAwRTMKKzoxMDM2RDAwMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwQUQKKzoxMDM2RTAwMDAwMDAwNDk2MDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwNjAKKzoxMDM2RjAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMDM3MDAwMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0QzA4MjUKKzoxMDM3MTAwMDAwMDAwNDU2MDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwNjcKKzoxMDM3MjAwMDAwMDAwMDEwNDAyMTBFMjAwMDAwMDAwMDAwMDAwMDExRTkKKzoxMDM3MzAwMDQwMjExMjIwMDAwMDAwMDAwMDAwMDAxMjQwMjExNjIwNEQKKzoxMDM3NDAwMDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwN0EKKzoxMDM3NTAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDM3NjAwMDAwMjEwMjI1MDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMUQKKzoxMDM3NzAwMDAwMDAwNEEwMDAwNDAwMDBDMDQ5NEEyMDAwMDAwNEExODkKKzoxMDM3ODAwMEZGRkJGRkZGQzAyODRBMjAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDM3OTAwMDAwMjEwMjIzMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwRUYKKzoxMDM3QTAwMDAwMDAwNEFEMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwNDAKKzoxMDM3QjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDM3QzAwMDAwMjEwMjI0MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwREUKKzoxMDM3RDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRjMKKzoxMDM3RTAwMDAwMDAwMDBDMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDM3RjAwMDAwMjAwMDEwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQzUKKzoxMDM4MDAwMDAwMDAwNEE5QTAwMDAwMDAwMDIwNDQxMTAwMDAwMDAwRjYKKzoxMDM4MTAwMENBRkVCQUJFMDA0MDQ4MTEwMDAwMDAwMDgxMDAwMDAwNEUKKzoxMDM4MjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNDAwMjA0ODExQTYKKzoxMDM4MzAwMDAwMDAwMDAwMDAwMDIxNkIwMDIwNDQxMTAwMDAwMDAwODcKKzoxMDM4NDAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMDgxMDAwMDAwQkYKKzoxMDM4NTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNTAwMjA0ODExNzUKKzoxMDM4NjAwMDAwMDAwMDAwMDAwMDIxNkMwMDIwNDQxMTAwMDAwMDAwNTYKKzoxMDM4NzAwMDAwMDAwMDAwQzAyMDQ4MTAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDM4ODAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwRjcKKzoxMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNEE3M0QKKzoxMDM4QTAwMDAwMDAwMDAwQzAyMTBBMjAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDM4QjAwMDE0QzAwMDAwMDAwMDA0QzA4MTAwMDAwMDAwMjA0NDExN0EKKzoxMDM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwN0YKKzoxMDM4RDAwMDAwMDAyMTZEMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDM4RTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwNDgKKzoxMDM4RjAwMDAwMDAwNjhGMDAwMDAwMDAwMDQwMDAwMDAwMDAwNEM0MkIKKzoxMDM5MDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQzAKKzoxMDM5MTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MDAwMEMwMjk0NjIwREIKKzoxMDM5MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMDAwMDAwNjhBRTcKKzoxMDM5MzAwMDAwMDAwMDAxMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDM5NDAwMDE0QzAwMDAwMDAwMDA0Q0IwMDAwMjE2OTAwMjA0NDExRDUKKzoxMDM5NTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwM0YKKzoxMDM5NjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDM5NzAwMDAwMjA0ODEwMDAwMDAwMDBDQUZFQkFCRTAwNDA0ODExRjYKKzoxMDM5ODAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDQwMDAwMDAwMDAwMTMKKzoxMDM5OTAwMDAwMDAwMDAwQzA0MDQ4MTAwMDAwMDAwMDgxMDAwMDAwNEUKKzoxMDM5QTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMjgKKzoxMDM5QjAwMDAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwNzkKKzoxMDM5QzAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5NTIKKzoxMDM5RDAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAwMDAwMjEwMjMwNEYKKzoxMDM5RTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNENEMzIKKzoxMDM5RjAwMDAwMDAyMTgwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDNBMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwQUUKKzoxMDNBMTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwN0UKKzoxMDNBMjAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDNBMzAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMzAwMzMzRTJGOUIKKzoxMDNBNDAwMDAwMDAwMDAwMDAwMDAwMDEwMDIxMDIyMTAwMDAwMDAwMzEKKzoxMDNBNTAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDRGRDAwMDAwMDJDNDUKKzoxMDNBNjAwMDAwMjAwQTJEMDAwMDAwMDAwMDA0MDAwMDE4RTAwQzExRTYKKzoxMDNBNzAwMDAwMDAwNEVDMDAwMDAwMDEwMDMzM0UyRjAwMDAwMDAwQjUKKzoxMDNBODAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDNBOTAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzNTEKKzoxMDNBQTAwMDAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwQjIKKzoxMDNBQjAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDNBQzAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExQ0YKKzoxMDNBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwN0MKKzoxMDNBRTAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDAwMDAwMDA4NjMKKzoxMDNBRjAwMDAwMzAwQTIyMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNDIKKzoxMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDBEOEMwNDgwMDAwMDAwNEUwRjEKKzoxMDNCMTAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDNCMjAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzQzAKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwMjEKKzoxMDNCNDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDNCNTAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAyRDAwMjAxMjJEQjEKKzoxMDNCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MEM4MzAwMDAwMDAwOUQKKzoxMDNCNzAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDNCODAwMDAwMjA0ODAyMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzNjAKKzoxMDNCOTAwMDAwMDAwMDAwMDAwMDAwMDgwMDMwMEEyMjAwMDAwMDAwQzEKKzoxMDNCQTAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDNCQjAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAxMTAwMjEwMjI0ODUKKzoxMDNCQzAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDAwMjEKKzoxMDNCRDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDRBNzAwMDAwMDJDQ0UKKzoxMDNCRTAwMEMwMjAzNjIwMDAwMDAwMDAwMDAwMDAyREMwNDAzNjIwMUMKKzoxMDNCRjAwMDAwMDAwMDAwMDAwMDAwMEYwMDIxMDIyMTAwMDAwMDAwNzIKKzoxMDNDMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDUwMjAwMDAwMDAwRDkKKzoxMDNDMTAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMEQ5MDAwMDAwNjAKKzoxMDNDMjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxOEYKKzoxMDNDMzAwMEI1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAyMDAwM0EKKzoxMDNDNDAwMDAwMjA0ODExMDAwMDAwMDBCNjAwMDAwMDAwMjA0NDExRDAKKzoxMDNDNTAwMDAwMDAwMDAwMDAwMEEwMDAwMDIwNDgxMTAwMDAwMDAwNEIKKzoxMDNDNjAwMEI3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBDMDAwNjgKKzoxMDNDNzAwMDAwMjA0ODExMDAwMDAwMDBCODAwMDAwMDAwMjA0NDExOUUKKzoxMDNDODAwMDAwMDAwMDAwMDAwMEY4RTAwMDIwNDgxMTAwMDAwMDAwRTMKKzoxMDNDOTAwMEI5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGODgwN0UKKzoxMDNDQTAwMDAwMjA0ODExMDAwMDAwMDBCQTAwMDAwMDAwMjA0NDExNkMKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMEUwMDAwMDIwNDgxMTAwMDAwMDAwQUIKKzoxMDNDQzAwMEJCMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDBGMDAwRDQKKzoxMDNDRDAwMDAwMjA0ODExMDAwMDAwMDBCQzAwMDAwMDAwMjA0NDExM0EKKzoxMDNDRTAwMDAwMDAwMDAwMDAwMEYzRkMwMDIwNDgxMTAwMDAwMDAwNkMKKzoxMDNDRjAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAyQ0MKKzoxMDNEMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDBGRjAwMjgwRTMwRDUKKzoxMDNEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwNEYKKzoxMDNEMjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDUxNjAwMDAwMDAwQUMKKzoxMDNEMzAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQzcKKzoxMDNENDAwMDAwMDAwNTJCMDAwMDAwMDAwMDIwMEMxMTAwMDAwMDAwMDYKKzoxMDNENTAwMDAwMDAwMDFDMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDJCQTMKKzoxMDNENjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyOTAwMjAzNjIzMzgKKzoxMDNENzAwMDAwMDAwMDAwMDAwMDAwMjgwMDIwMzYyMzAwMDAwMDAwQTIKKzoxMDNEODAwMDAwMDAwMDE3MDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI1N0UKKzoxMDNEOTAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNjAwMjAzNjIzMEIKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMTUwMDIwMzYyMzAwMDAwMDAwODUKKzoxMDNEQjAwMDAwMDAwMDE2MDAyMDM2MjMwMDAwMDAwMEZGRkZFMDAwOTYKKzoxMDNEQzAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAyMTAwMjAzNjIzMUMKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyMzAwMDAwMDAwNDgKKzoxMDNERTAwMDAwMDAxRkZGMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDIzNTUKKzoxMDNERjAwMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyNDAwMjAzNjIzQUQKKzoxMDNFMDAwMDAwMDAwMDAwRjFGRkZGRkYwMDI4M0EyRTAwMDAwMDAwMzQKKzoxMDNFMTAwMDAwMDAwMDFBQzAyMjBFMjAwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDNFMjAwMDAwMjkzODZFMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExQ0QKKzoxMDNFMzAwMDAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMDMKKzoxMDNFNDAwMDAwMDAwMDJBNDAyMDM2MjAwMDAwMDAwMDg3MDAwMDAwMEIKKzoxMDNFNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwQzUKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMEExRjQwMDIwNDQxMTAwMDAwMDAwNDgKKzoxMDNFNzAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDNFODAwMDAwMjAwQzExMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjIzNEMKKzoxMDNFOTAwMDAwMDAwMDAwOUQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMTAKKzoxMDNFQTAwMDAwMDAwMDFGNDAyMTRBMjAwMDAwMDAwMDk2MDAwMDAwOTIKKzoxMDNFQjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwNjUKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDYKKzoxMDNFRDAwMDAwMDAwMDAwQzAyMDEwMDAwMDAwMDAwMDAwMDAwMDFGRDMKKzoxMDNFRTAwMDAwMjExNjI0MDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwQTMKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMzYyMzAwMDAwMDAwMkMKKzoxMDNGMDAwMDAwMDAwMDAzMDAyODFFMjMwMDAwMDAwMDAwMDAwMDA4M0QKKzoxMDNGMTAwMDAwMjIyMjIzMDAwMDAwMDBGRkZGRjAwMDAwMjgyMjI4REEKKzoxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MjBFODAwMDAwMDAwNjAKKzoxMDNGMzAwMDAwMDAwMDFGMDAyMDM2MjgwMDAwMDAwMDAwMDAwMDE4Q0MKKzoxMDNGNDAwMDAwMjExRTIzMDAwMDAwMDAwMDAwMDAyMDAwMjAzNjI3NzIKKzoxMDNGNTAwMDAwMDAwMDAwMDAwMDAwMDIwMDIyMTYyNDAwMDAwMDAwMDMKKzoxMDNGNjAwMDAwMDAwMDAwMDAzMDE0QTgwMDAwMDAwMDAwMDAwMDFFNDcKKzoxMDNGNzAwMDAwMjAzNjI1MDAwMDAwMDAwMDAwMDAwMzAwMjExQTI0NjQKKzoxMDNGODAwMDAwMDAwMDAwMTAwMDAwMDAwMDI4MUEyNjAwMDAwMDAwQjkKKzoxMDNGOTAwMEVGRkZGRkZGMDAyODNBMkUwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDNGQTAwMDAwNDkzOENFMDAwMDA2NzgwMDAwMDAwMTQwMjgwQTIwQjEKKzoxMDNGQjAwMDAwMDAwMDAwMDAwMDAwMDY0MDI4MEUyMDAwMDAwMDAwNjUKKzoxMDNGQzAwMDAwMDAwMzAwQzAyODEyMjAwMDAwMDAwMDAwMDAwMDA4Q0MKKzoxMDNGRDAwMDAwMjExMjI0MDAwMDAwMDAwMDAwMDAwMEMwMjAxNjIwNzQKKzoxMDNGRTAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMUEyMDAwMDAwMDAwQjcKKzoxMDNGRjAwMDAwMDAwMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDQwMDAwMDE0QzAwMDAwMDAwMDA1NjM4MTAwMDAwMDAwMjA0NDExN0UKKzoxMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMjYKKzoxMDQwMjAwMDAwMDAyMjU4MDAzMDBBMjQwMDAwMDAwMDAwMDQwMDAwQjQKKzoxMDQwMzAwMDAwNjk0NjIyMDAwMDA2OEEwMDAwMjE2OTAwMjA0NDExMjAKKzoxMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDMKKzoxMDQwNTAwMDAwMDIwMDAwMDAyOTRBMjYwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDQwNjAwMDAwMjA0ODEwMDAwMDAwMDBDQUZFQkFCRTAwMjA0ODExMUYKKzoxMDQwNzAwMDAwMDAwMDAwMDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwRUEKKzoxMDQwODAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2QjAwMDAwMDAwRjQKKzoxMDQwOTAwMEMwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwMTQKKzoxMDQwQTAwMDAwMDAwNTc5MDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwM0MKKzoxMDQwQjAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2QjgxMDAwMDAwNDMKKzoxMDQwQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDEKKzoxMDQwRDAwMDAwMDAwMDAwMDAwMDIyNTgwMDMwMEEyNDAwMDAwMDAwMDgKKzoxMDQwRTAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY4QTAwMDAwMDAwNkIKKzoxMDQwRjAwMEMwMjAxQzEwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwQjQKKzoxMDQxMDAwMDAwMDAwNTc5MDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwREQKKzoxMDQxMTAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU2RjAwMDAwMDAwNUYKKzoxMDQxMjAwMEMwMjAxQzAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwMDAwOTMKKzoxMDQxMzAwMDAwMDAwNTc5MDAwMDAwMDQwMDJGMDIyMzAwMDAwMDAwQTkKKzoxMDQxNDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU3NzgxMDAwMDAwQTYKKzoxMDQxNTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExNzEKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwNEMKKzoxMDQxNzAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDQxODAwMEMwNjA0ODAwMDAwMDA2OEYwMDAwMDAwMDAwNDAxQzEwQzYKKzoxMDQxOTAwMDAwMDAwNTc5MDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwQzEKKzoxMDQxQTAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDQxQjAwMDBFRTAwMDAwMDAwMDA1N0IwMDAwMDAwMDAwNjAwMDAwMzEKKzoxMDQxQzAwMDAwMDAwNUM2MDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwQ0YKKzoxMDQxRDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU4QzAwMDBBMkI3MjkKKzoxMDQxRTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3RUIKKzoxMDQxRjAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQzkKKzoxMDQyMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkI2RDgKKzoxMDQyMTAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAxQTAwMjEyMjMwQ0MKKzoxMDQyMjAwMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwMTAKKzoxMDQyMzAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4QTAwMDBBMkM0QUIKKzoxMDQyNDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5OTgKKzoxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNThBRUYKKzoxMDQyNjAwMDAwMDBBMkQxMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDQyNzAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJEMTAwMjA0NDExQzYKKzoxMDQyODAwMDAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwNkIKKzoxMDQyOTAwMDAwMDAwMDAxMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMDQyQTAwMDBDQzAwMDAwMDAwMDA1OUQwMDAwQTJCQjAwMjA0NDExQ0UKKzoxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwOEYKKzoxMDQyQzAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxRjcKKzoxMDQyRDAwMDAwMjA0ODExMDAwMDAwMDAwMDA0QTJCQTAwNjA0NDExNTAKKzoxMDQyRTAwMDAwMDAwNjhBMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwQjEKKzoxMDQyRjAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDAwMDQyMDA0MTgKKzoxMDQzMDAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTJDNTAwMjA0NDExOEMKKzoxMDQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwM0MKKzoxMDQzMjAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDU5QjAwMDBBMkQyOTkKKzoxMDQzMzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4NzgKKzoxMDQzNDAwMDAwMDAwMDAwMDAwMEEyRDIwMDIwNDQxMTAwMDAwMDAwODQKKzoxMDQzNTAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDAwMDAwMDAyOTgKKzoxMDQzNjAwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMkMKKzoxMDQzNzAwMDAwMDAwNUFFMDAwMEEyQkYwMDIwNDQxMTAwMDAwMDAwQjQKKzoxMDQzODAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDgxMDAwMDAwM0QKKzoxMDQzOTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMkUKKzoxMDQzQTAwMDAwMDAwMDAwMDAwNEEyQkUwMDYwNDQxMTAwMDAwNjhBNjQKKzoxMDQzQjAwMDAwMDAwMDFBMDAyMTIyMzAwMDAwMDAwMDAwMDAwMDA2NkEKKzoxMDQzQzAwMDAwMjIyNjMwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExOTgKKzoxMDQzRDAwMDAwMDAwNjhBMDAwMEEyQzYwMDIwNDQxMTAwMDAwMDAwNzAKKzoxMDQzRTAwMDAwMDAwMDAwMDAzMDQ4RTkwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDQzRjAwMDAwRTAwMDAwMDAwMDA1QUMwMDAwQTJEMzAwMjA0NDExNDIKKzoxMDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwODAwMDAwMDAwMUMKKzoxMDQ0MTAwMDAwMDBBMkQzMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQjEKKzoxMDQ0MjAwMDAwNTA0QTI4MDAwMDAwMDAwMDAwQTJDMzAwMjA0NDExRjAKKzoxMDQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwMEQKKzoxMDQ0NDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNzUKKzoxMDQ0NTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0QTJDMjAwNjA0NDExQzYKKzoxMDQ0NjAwMDAwMDAwNjhBMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwMkYKKzoxMDQ0NzAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMDAwMDQyMDA0OTYKKzoxMDQ0ODAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTJDNzAwMjA0NDExMDkKKzoxMDQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwQkIKKzoxMDQ0QTAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDVCQjAwMDBBMkQ0RjYKKzoxMDQ0QjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4RjcKKzoxMDQ0QzAwMDAwMDAwMDAwMDAwMEEyRDQwMDIwNDQxMTAwMDAwMDAwMDEKKzoxMDQ0RDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDg1MDAwMDAwOTQKKzoxMDQ0RTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAxRUUKKzoxMDQ0RjAwMDAwMDAwMDAwMDAwMDMwNEEwMDIwNDQxMTAwMDAwMDAwQ0QKKzoxMDQ1MDAwMDAxMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDQ1MTAwMDAwNDAwMDAwMDAwMDA1QzFBNDAwMDAwMEMwMjA0NDExQkMKKzoxMDQ1MjAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwNDMKKzoxMDQ1MzAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDVDNjAwMDAwMDAwOTAKKzoxMDQ1NDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAyQzAwMjAzNjIxQzMKKzoxMDQ1NTAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwNjUKKzoxMDQ1NjAwMDAwMDAwMDA2MDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDQ1NzAwMDAwMkYwMjMwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMEUKKzoxMDQ1ODAwMDAwMDAwNUNEMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMjQKKzoxMDQ1OTAwMDAwMDAwMDMwMDA0MDM2MjEwMDAwMDVFMDAwMDAwMDMwM0YKKzoxMDQ1QTAwMDAwMjAwNjJEMDAwMDAwMDAwMDAwN0UwMDAwMjgwNjIxRUIKKzoxMDQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwQTkKKzoxMDQ1QzAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDVFMDgxMDAwMDAwOTkKKzoxMDQ1RDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExRUMKKzoxMDQ1RTAwMDAwMDAwMDAwMDAwNEEwOTIwMDYwNDQxMTAwMDAwNjhBNTAKKzoxMDQ1RjAwMDAwMDAwMDMxMDAyMDM2MzAwMDAwMDAwMDAwMDRBMDkzQ0QKKzoxMDQ2MDAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAzMjAwMjAzNjMwQUQKKzoxMDQ2MTAwMDAwMDAwMDAwMDAwNEEyQjYwMDYwNDQxMTAwMDAwNjhBRjkKKzoxMDQ2MjAwMDAwMDAwMDMzMDAyMDM2MzAwMDAwMDAwMDAwMDRBMkJBNzEKKzoxMDQ2MzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAzNDAwMjAzNjMwN0IKKzoxMDQ2NDAwMDAwMDAwMDAwMDAwNEEyQkUwMDYwNDQxMTAwMDAwNjhBQzEKKzoxMDQ2NTAwMDAwMDAwMDM1MDAyMDM2MzAwMDAwMDAwMDAwMDRBMkMyMzcKKzoxMDQ2NjAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMDAzNjAwMjAzNjMwNDkKKzoxMDQ2NzAwMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhBQ0QKKzoxMDQ2ODAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDNGMkYKKzoxMDQ2OTAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExRTkKKzoxMDQ2QTAwMDAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwNTIKKzoxMDQ2QjAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA1M0QKKzoxMDQ2QzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTFGNDAwMjA0NDExNjcKKzoxMDQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwNjEKKzoxMDQ2RTAwMDg4MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQ0MKKzoxMDQ2RjAwMDAwMjA0ODExMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExNEIKKzoxMDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMkEKKzoxMDQ3MTAwMDAwMDAwMDAxMDAyRjAyMzAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDQ3MjAwMDBDRTAwMDAwMDAwMDA2MjkwMDAwMDAzMDAwMjAwNjJERUIKKzoxMDQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMjcKKzoxMDQ3NDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYyOTgxMDAwMDAwQ0QKKzoxMDQ3NTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExNkEKKzoxMDQ3NjAwMDAwMDAwMDAwMDAwMDdFMDAwMDI4MDYyMTAwMDAwMDAwN0MKKzoxMDQ3NzAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDQ3ODAwMDBDRTAwMDAwMDAwMDA2MDIwMDAwQTA5MjAwMjA0NDExOEUKKzoxMDQ3OTAwMDAwMDAwMDAwMDAwMDAwMzEwMDIwNEEyRDAwMDAwMDAwNTEKKzoxMDQ3QTAwMDAwMDBBMDkzMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDMyMkYKKzoxMDQ3QjAwMDAwMjA0QTJEMDAwMDAwMDAwMDAwQTJCNjAwMjA0NDExOTUKKzoxMDQ3QzAwMDAwMDAwMDAwMDAwMDAwMzMwMDIwNEEyRDAwMDAwMDAwMUYKKzoxMDQ3RDAwMDAwMDBBMkJBMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDM0RDQKKzoxMDQ3RTAwMDAwMjA0QTJEMDAwMDAwMDAwMDAwQTJCRTAwMjA0NDExNUQKKzoxMDQ3RjAwMDAwMDAwMDAwMDAwMDAwMzUwMDIwNEEyRDAwMDAwMDAwRUQKKzoxMDQ4MDAwMDAwMDBBMkMyMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDM2OTkKKzoxMDQ4MTAwMDAwMjA0QTJEMDAwMDAwMDAwMDAwMDAzMDAwMjAwNjJEN0UKKzoxMDQ4MjAwMDAwMDAwMDAwMDAwMDAxRkYwMDI4MDYyMTAwMDAwMDAwMzkKKzoxMDQ4MzAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDQ4NDAwMDBDRTAwMDAwMDAwMDA2MjgwMDAwMDAwMDAwMjEwMjIxMEEKKzoxMDQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjBCNzMKKzoxMDQ4NjAwMDAwMDRBMDAzMDA2MDQ0MTEwMDAwMDY4QTAwMDBBMDAzQjkKKzoxMDQ4NzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwNEIKKzoxMDQ4ODAwMDAwMDAwMDAwMDAwMDAwMDEwMDIxMDYyMTAwMDAwMDAwREYKKzoxMDQ4OTAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDYxMDAwMDRBMDEwN0EKKzoxMDQ4QTAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTAxMDAwMjA0NDExOUUKKzoxMDQ4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwODAKKzoxMDQ4QzAwMDAwMDAwMDAxMDAyMTA2MjEwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDQ4RDAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwOUEKKzoxMDQ4RTAwMDAwMDAwNjI4MDAwNEEwMTEwMDYwNDQxMTAwMDAwNjhBQTAKKzoxMDQ4RjAwMDAwMDBBMDExMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDQ5MDAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxMjAwNjA0NDExQzQKKzoxMDQ5MTAwMDAwMDAwNjhBMDAwMEEwMTIwMDIwNDQxMTAwMDAwMDAwRTAKKzoxMDQ5MjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDEzNTgKKzoxMDQ5MzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTAxMzAwMjA0NDExMEEKKzoxMDQ5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwRUYKKzoxMDQ5NTAwMDAwMDRBMDE0MDA2MDQ0MTEwMDAwMDY4QTAwMDBBMDE0QTYKKzoxMDQ5NjAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwNUEKKzoxMDQ5NzAwMDAwMDAwMDAwMDAwNEEwMTUwMDYwNDQxMTAwMDAwNjhBMzkKKzoxMDQ5ODAwMDAwMDBBMDE1MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDQ5OTAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxNjAwNjA0NDExMzAKKzoxMDQ5QTAwMDAwMDAwNjhBMDAwMEEwMTYwMDIwNDQxMTAwMDAwMDAwNEMKKzoxMDQ5QjAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDE3QzQKKzoxMDQ5QzAwMDAwNjA0NDExMDAwMDA2OEEwMDAwQTAxNzAwMjA0NDExNzYKKzoxMDQ5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwNUYKKzoxMDQ5RTAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDJDMkUKKzoxMDQ5RjAwMDAwODAwNjJEMDAwMDAwMDBGRjAwMDAwMDAwMjA0NDExOTAKKzoxMDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMkQKKzoxMDRBMTAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAyMUEKKzoxMDRBMjAwMDAwODA0ODExMDAwMDAwMDAwMDAwMDAwMDBFRTAwMDAwQkYKKzoxMDRBMzAwMDAwMDAwNjNBMDAwMDAwMzAwMDIwMDYyRDAwMDAwMDAwQjMKKzoxMDRBNDAwMDAwMDAwMDAyMDAyODA2MjEwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRBNTAwMDAwMkYwMjIxMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMTgKKzoxMDRBNjAwMDAwMDAwNjM4ODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMTIKKzoxMDRBNzAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMDA0OTQKKzoxMDRBODAwMDAwNjA0NDExMDAwMDA2OEEwMDAwMTAwMDAwMjAwODExOTgKKzoxMDRBOTAwMDAwMDAwMDAwMDAwMDAwMkIwMDIwMzYyMjAwMDAwMDAwNzMKKzoxMDRBQTAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDYzRTAwMDAwMDAwNjIKKzoxMDRBQjAwMDAwNjAwMDAwMDAwMDA1QzY5ODAwMDAwMDAwMjA0NDExQkUKKzoxMDRBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwNDgxMTAwMDAwMDAwMEQKKzoxMDRBRDAwMDAwMDAwMDAwQzA2MDAwMDAwMDAwMDYzRTAwMDAwMDAwNzIKKzoxMDRBRTAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwQTJBNDAwMjA0NDExMDYKKzoxMDRBRjAwMDAwMDAwMDAwMDAwMDAwMjIwMDIwNDgxMTAwMDAwMDAwMUIKKzoxMDRCMDAwMDg5MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxQTYKKzoxMDRCMTAwMDAwNDA0ODExMDAwMDA2MkE5NzAwMDAwMDAwMjA0NDExQzAKKzoxMDRCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMEMKKzoxMDRCMzAwMDhBMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDRCNDAwMDAwNDA0ODExMDAwMDA2MkEwMDAwMDAwMDAwNjAwMDAwM0MKKzoxMDRCNTAwMDAwMDAwNjU5MDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwNTEKKzoxMDRCNjAwMDAwMDA4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMkE0MDUKKzoxMDRCNzAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjAwNjA0ODExMzEKKzoxMDRCODAwMDAwMDAwMzZFMDAwMDIwMTAwMDIwNDQxMTAwMDAwMDAwMEYKKzoxMDRCOTAwMDAwMDEwMDAwMDAyMDQ4MTEwMDAwMDAwMDgxMDAwMDAwMUEKKzoxMDRCQTAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMTYKKzoxMDRCQjAwMDAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwRTMKKzoxMDRCQzAwMDA5ODAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGRkZGRTcKKzoxMDRCRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExRTMKKzoxMDRCRTAwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwQUUKKzoxMDRCRjAwMDAwMDQyMTdGMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDFGQUQKKzoxMDRDMDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwN0QKKzoxMDRDMTAwMDAwMDAwMDAwMDAwMDAwMDQwMDQwNEMxMTAwMDAwNjUzOUEKKzoxMDRDMjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDE3MkQKKzoxMDRDMzAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwNDAwMjkxRTI3OTcKKzoxMDRDNDAwMDAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwNzAKKzoxMDRDNTAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEZGRkZGRkZCREEKKzoxMDRDNjAwMDAwMjgxRTI3MDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3RTMKKzoxMDRDNzAwMDAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwQjIKKzoxMDRDODAwMDAwMDAwMDA4MDAyOTFFMjcwMDAwMDAwMDAwMDAwMDE3OTcKKzoxMDRDOTAwMDAwODAzNjI3MDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEQjUKKzoxMDRDQTAwMDAwMDAwMDAwRkZGRkZGRjcwMDI4MUUyNzAwMDAwMDAwQTMKKzoxMDRDQjAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMDAwMDAyMDEwRDAKKzoxMDRDQzAwMDAwMjA0NDExMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExNzYKKzoxMDRDRDAwMDAwMDAwMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMTgKKzoxMDRDRTAwMDAwMDAwMDE2MDA2MDQ4MTEwMDAwMDM2RTAwMDAyMDEwNTQKKzoxMDRDRjAwMDAwMjA0NDExMDAwMDAwMDAwMDAxMDAwMDAwMjA0ODExQzUKKzoxMDREMDAwMDAwMDAwMDAwMDAwMDIxN0MwMDIwNDQxMTAwMDAwMDAwOTEKKzoxMDREMTAwMDAxODAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGRkZGOUQKKzoxMDREMjAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExOTEKKzoxMDREMzAwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwNUMKKzoxMDRENDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxNkMKKzoxMDRENTAwMDAwMjA0ODExMDAwMDAwMDAwMDA0MjE3RjAwNjA0NDExODEKKzoxMDRENjAwMDAwMDAwNjhBMDAwMDAwMUYwMDIxMDIzMDAwMDAwMDAwNDEKKzoxMDRENzAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDY4OTAwMDAwMDEwQzAKKzoxMDREODAwMDAwNDA0QzExMDAwMDA2NkYwMDAwMDAwMEMwMjAwNDAwMkQKKzoxMDREOTAwMDAwMDAwMDAwMDAwMDAwMDAzOEMwMDAwMDAwMDAwMDAwMUIKKzoxMDREQTAwMDAwMDAwMDFEMDAyMDBBMkQwMDAwMDAwMDAwMDAwMDFFNzEKKzoxMDREQjAwMDAwMjAwRTJEMDAwMDAwMDAwMDAwMDAxRjAwMjAxMjJEMUEKKzoxMDREQzAwMDAwMDAwMDAwMDAwMDAwMjAwMDIwMTYyRDAwMDAwMDAwNjAKKzoxMDRERDAwMDAwMDAyMTY5MDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDRERTAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA1RUEKKzoxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMTAwMDAwMDAwNEEKKzoxMDRFMDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA0RTUKKzoxMDRFMTAwMDAwMzAxMjI0MDAwMDAwMDAwMDAwMDAwMDAwMkYwMDY0OTkKKzoxMDRFMjAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNjg4MjgKKzoxMDRFMzAwMDAwMDAwMDAzMDAyODFBMjIwMDAwMDAwMDAwMDAwMDA4MDMKKzoxMDRFNDAwMDAwMjIxMjIyMDAwMDAwMDBGRkZGRjAwMDAwMjgxMjI0QzAKKzoxMDRFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MTBDNDAwMDAwMDAwNTUKKzoxMDRFNjAwMDAwMDAwMDFGMDA0MDM2MjQwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDRFNzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBQzAwMDAwRDgKKzoxMDRFODAwMDAwMDAwNjhBOUYwMDAwMDAwMDIwNDQxMTAwMDAwMDAwN0UKKzoxMDRFOTAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRFQTAwMDFBRTAwMDAwMDAwMDA2OEQwMDAwMDAwMDAwODAwMDAwRjUKKzoxMDRFQjAwMDAwMDAwMDAwMDAwMDAwMDAxQUMwMDAwMDAwMDAwNjhGODMKKzoxMDRFQzAwMDlFMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFOEYKKzoxMDRFRDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDFBRTAwMDAwNUYKKzoxMDRFRTAwMDAwMDAwNjkyMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwQUEKKzoxMDRFRjAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAxMDAwMzcKKzoxMDRGMDAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExREYKKzoxMDRGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyNjUKKzoxMDRGMjAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAzOEIKKzoxMDRGMzAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExMEIKKzoxMDRGNDAwMDAwMDAwMDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwQ0QKKzoxMDRGNTAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxM0UKKzoxMDRGNjAwMDAwMjA0ODExMDAwMDAwMDAwMDAxQTFGREMwMjA0NDExRjQKKzoxMDRGNzAwMDAwMDAwMDAwMDAwMDAwMjEwMDIwMUUyRDAwMDAwMDAwQTUKKzoxMDRGODAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDI0ODYKKzoxMDRGOTAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MzIKKzoxMDRGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwODgKKzoxMDRGQjAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDIyNTYKKzoxMDRGQzAwMDAwMjAyMjJEMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDIKKzoxMDRGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwNTgKKzoxMDRGRTAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDIzMjUKKzoxMDRGRjAwMDAwMjAxRTJEMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3Q0YKKzoxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzAwMDAwMDAwMjcKKzoxMDUwMTAwMDAwMDAwMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDUwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDUwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDUwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDUwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDUwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDUwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDUwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDUwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDUwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDUwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDUwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDUxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDUxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDUxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDUxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDUxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDUxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDUxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDUxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDUxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDUxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDUxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDUxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDUyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDUyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDUyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDUyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDUyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDUyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDUyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDUyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDUyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDUyQjAwMDAxNDIwNEZGMDVCRDAyNTAwMDAwMDAwMDAxQzMwMTY4NjcKKzoxMDUyQzAwMDA0M0YwNUJEMDAwMDAwMDAwMjI1MDIwOTAyNTAwMTUxMDMKKzoxMDUyRDAwMDAwMDAwMDAwMDIyMzAyNDUwMkEwMDI0MTAwMDAwMDAwN0QKKzoxMDUyRTAwMDAzRDcwNUJEMDVCRDA1QkQwMDAwMDAwMDA2NDYwNjQ3MDUKKzoxMDUyRjAwMDAzMUYwNUJEMDAwMDAwMDAwNUJEMDVDMjAzMjAwMzQwREIKKzoxMDUzMDAwMDAwMDAwMDAwMDMyQTAyODIwMzQyMDMzNDAwMDAwMDAwNzAKKzoxMDUzMTAwMDA1QkQwNUJEMDVCRDA1QkQwMDAwMDAwMDA1QkQwNTRFNzAKKzoxMDUzMjAwMDA1QkQwNUJEMDAwMDAwMDAwM0JBMDVCRDA0QjgwMzQ0NzcKKzoxMDUzMzAwMDAwMDAwMDAwMDQ5NzA0NEQwNDNEMDVCRDAwMDAwMDAwN0UKKzoxMDUzNDAwMDA0Q0QwNUJEMDQ0MTA0REEwMDAwMDAwMDA0NEQwNTA0NEQKKzoxMDUzNTAwMDAzNTEwMzc1MDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJENzkKKzoxMDUzNjAwMDAwMDAwMDAwMDVCRDA1QkQwNUJEMDVCRDAwMDAwMDAwMzUKKzoxMDUzNzAwMDA1QkQwNUJEMDYzQzA1QzQwMDAwMDAwMDA1QkQwNUJEMUEKKzoxMDUzODAwMDAwMDcwNUJEMDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJENEMKKzoxMDUzOTAwMDAwMDAwMDAwMDVCRDA1QkQwNUJEMDVCRDAwMDAwMDAwMDUKKzoxMDUzQTAwMDAzRjgwM0VEMDQwODA0MDYwMDAwMDAwMDA0MEUwNDBBREMKKzoxMDUzQjAwMDA0MEMwNDEwMDAwMDAwMDAwNDFDMDQxODA0MjQwNDIwNDEKKzoxMDUzQzAwMDAwMDAwMDAwMDQyQzA0MjgwNDM0MDQzMDAwMDAwMDAwMTUKKzoxMDUzRDAwMDA1QkQwNUJEMDQzODA1QkQwMDAwMDAwMDA1QkQwNUJEQzcKKzoxMDUzRTAwMDA1QkQwNUJEMDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJEMzEKKzoxMDUzRjAwMDAwMDAwMDAwMDAwMjA2NzYwNjk0MDAwNjAwMDAwMDAwOEYKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY2MzBfcGZwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNjMwX3BmcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUyOTJjCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNjMwX3BmcC5iaW4uaWhleApAQCAtMCwwICsxLDE0NSBAQAorOjEwMDAwMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDA3QzAzOEJFRAorOjEwMDAxMDAwMDA4MDAxQjgwMDdDMDM4QjAwRDQ0MDFFMDBFRTAwMUU1RgorOjEwMDAyMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBDNDE4MzhDMworOjEwMDAzMDAwMDBDQTI0MDAwMENBMjgwMDAwOTU4MUE4MDBDNDFDM0EwOAorOjEwMDA0MDAwMDBDM0MwMDAwMENBMDgwMDAwQ0EwQzAwMDA3Qzc0NEI0QQorOjEwMDA1MDAwMDBDMjAwMDUwMDk5QzAwMDAwQzQxQzNBMDA3Qzc0NEMyQQorOjEwMDA2MDAwMDBDMEZGRjAwMDA0MkMwNDAwMzA5MDAyMDA3RDI1MDA0OQorOjEwMDA3MDAwMDAzNTE0MDIwMDdEMzUwQjAwMjU1NDAzMDA3Q0Q1ODAyQgorOjEwMDA4MDAwMDAyNTlDMDMwMDk1QzAwNDAwRDUwMDFCMDA3RUREQzE0NworOjEwMDA5MDAwMDA3RDlEODAwMEQ2ODAxQjAwRDU4MDFCMDBENDQwMUVCMworOjEwMDBBMDAwMDBENTQwMUUwMEQ2NDAxRTAwRDY4MDFFMDBENDgwMUUwMworOjEwMDBCMDAwMDBENEMwMUUwMDk3ODNEMzAwRDVDMDFFMDBDQTA4MDAxQworOjEwMDBDMDAwMDA4MDAwMUEwMENBMEMwMDAwRTQwMTFFMDBENDAwMUVDQgorOjEwMDBEMDAwMDA4MDAwMEMwMEM0MTgzODAwRTQwMTNFMDBENDAwMUU2QgorOjEwMDBFMDAwMDA4MDAwMEMwMEM0MTgzODAwRDQ0MDFFMDBFRTAwMUUzMgorOjEwMDBGMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxMUUwNAorOjEwMDEwMDAwMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDBGMQorOjEwMDExMDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTNFMDBENDAwMUU5RgorOjEwMDEyMDAwMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAyMworOjEwMDEzMDAwMDA3RTgyOEIwMENBMTgwMDAwRDQ0MDFFMDBENTgwMUVBRAorOjEwMDE0MDAwMDA4MDAwNTMwMEQ0MDA3NTAwRDQ0MDFFMDBDQTA4MDA4RgorOjEwMDE1MDAwMDBDQTBDMDAwMENBMTAwMDAwRDQ4MDE5MDBENEMwMThENgorOjEwMDE2MDAwMDBENTAwMTcwMEQ0ODAxRTAwRDRDMDFFMDBENTAwMUU4QworOjEwMDE3MDAwMDBFMjAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEI4NgorOjEwMDE4MDAwMDBDQTA4MDAwMEQ0ODA2MDAwRDQ0MDFFMDA4MDAwMDAzNworOjEwMDE5MDAwMDBENDgwMUUwMENBMDgwMDAwRDQ4MDYxMDBENDQwMUUzNAorOjEwMDFBMDAwMDA4MDAwMDAwMEQ0ODAxRTAwQ0EwODAwMDBDQTBDMDBCNQorOjEwMDFCMDAwMDBENDQwMUUwMEQ0ODAxNjAwRDRDMDE2MDBENDgwMUU4NworOjEwMDFDMDAwMDA4MDAxQjgwMEQ0QzAxRTAwQzYwODQzMDBDQTBDMDA1RAorOjEwMDFEMDAwMDBDQTEwMDAwMDk0ODAwNDAwQ0ExNDAwMDBFNDIwRjM1OAorOjEwMDFFMDAwMDBENDIwMTMwMEQ1NjA2NTAwRDRFMDFDMDBENTIwMUM4RAorOjEwMDFGMDAwMDBENTYwMUMwMDgwMDAwMDAwMDYyMDAxMDBDNjA4NDNGNgorOjEwMDIwMDAwMDBDQTBDMDAwMENBMTAwMDAwOTQ4M0Y3MDBDQTE0MDA1MgorOjEwMDIxMDAwMDBFNDIwRjMwMDgwMDA3OTAwRDQyMDEzMDBDNjA4NDNENgorOjEwMDIyMDAwMDBDQTBDMDAwMENBMTAwMDAwOTg4M0VGMDBDQTE0MDAzNgorOjEwMDIzMDAwMDBENDAwNjQwMDgwMDA4RDAwMDAwMDAwMDBDNDE0MzI2RgorOjEwMDI0MDAwMDBDNjE4NDMwMEM0MDgyRjAwOTU0MDA1MDBDNDBDMzBCOAorOjEwMDI1MDAwMDBENDQwMUUwMDgwMDAwMDAwRUUwMDFFMDA5NTgzRjVEMworOjEwMDI2MDAwMDBDNDEwMzEwMEQ0NDAzMzAwRDUyMDY1MDBENEEwMUM1OAorOjEwMDI3MDAwMDBENEUwMUMwMEQ1MjAxQzAwRTQwMTVFMDBENDAwMUU2OAorOjEwMDI4MDAwMDA4MDAwMDAwMDA2MjAwMTAwQ0ExODAwMDAwQTIwMDFCQQorOjEwMDI5MDAwMDBENjAwNzYwMEM0MDgzNjAwOTg4MDA3MDBDNjEwNDVENgorOjEwMDJBMDAwMDA5NTAxMTAwMEQ0MDAxRjAwRDQ2MDYyMDA4MDAwMDA5RgorOjEwMDJCMDAwMDBENDIwNjIwMENDMzgzNTAwQ0MxNDMzMDA4NDAxQkI1QworOjEwMDJDMDAwMDBENDAwNzIwMEQ1NDAxRTAwODAwMDAwMDBFRTAwMUUyOQorOjEwMDJEMDAwMDBFMjAwMUEwMDg0MDFCQjAwRTIwMDFBMDBDQzEwNEJCRgorOjEwMDJFMDAwMDBDQzA0NDcwMDJDOTQwMTAwN0QwOThCMDA5ODQwMDU0OAorOjEwMDJGMDAwMDA3RDE1Q0IwMEQ0MDAxQTAwODAwMUI4MDBENDAwNkQzOQorOjEwMDMwMDAwMDAzNDQ0MDEwMENDMEM0ODAwOTg0MDNBMDBDQzJDNEEwMAorOjEwMDMxMDAwMDA5NTgwMDQwMENDMDQ0OTAwODAwMUI4MDBENDAwMUE4NAorOjEwMDMyMDAwMDBENEMwMUEwMDI4MjgwMTAwODQwMEYwMDBDQzEwMDM3QgorOjEwMDMzMDAwMDA5ODgwMUIwMDA0MzgwQzAwODQwMEYwMDBDQzEwMDNFRgorOjEwMDM0MDAwMDA5ODgwMTcwMDA0MzgwODAwODQwMEYwMDBDQzEwMDNFNworOjEwMDM1MDAwMDA5ODgwMTMwMDA0MzgwNDAwODQwMEYwMDBDQzEwMDNERgorOjEwMDM2MDAwMDA5ODgwMTQwMENDMTA0QzAwOUE4MDA5MDBDQzE0NERFOQorOjEwMDM3MDAwMDA5ODQwREMwMEQ0MDA2RDAwQ0MxODQ4MDBENTAwMUE2RAorOjEwMDM4MDAwMDBENTQwMUEwMDgwMDBDOTAwRDU4MDFBMDA5NkMwRDU1QgorOjEwMDM5MDAwMDBENDAwNkQwMDgwMDFCODAwRDQwMDZFMDA5QUMwMDM0NAorOjEwMDNBMDAwMDBENDAwNkQwMEQ0MDA2RTAwODAwMDAwMDBFQzAwN0ZERgorOjEwMDNCMDAwMDA5QUMwQ0MwMEQ0MDA2RDAwODAwMUI4MDBENDAwNkU1QgorOjEwMDNDMDAwMDBDQzE0MDMwMENDMTgwMzAwQ0MxQzAzMDA3RDkxMDM2NworOjEwMDNEMDAwMDA3REQ1ODMwMDdEMTkwQzAwMzVDQzFGMDAzNTcwMUZDMgorOjEwMDNFMDAwMDA3Q0YwQ0IwMDdDRDA4QjAwODgwMDAwMDA3RThFOEJFMAorOjEwMDNGMDAwMDA5NUMwMDQwMEQ0MDA2RTAwODAwMUI4MDBENDAwMUEzQgorOjEwMDQwMDAwMDBENEMwMUEwMENDMDgwMzAwQ0MwQzAzMDBDQzEwMDNBRAorOjEwMDQxMDAwMDBDQzE0MDMwMENDMTgwMzAwQ0MxQzAzMDBDQzI0MDMzNAorOjEwMDQyMDAwMDBDQzI4MDMwMDM1QzQxRjAwMzZCMDFGMDA3QzcwNEI4MQorOjEwMDQzMDAwMDAzNEYwMUYwMDdDNzA0QjAwMzU3MDFGMDA3QzcwNEI0NworOjEwMDQ0MDAwMDA3RDg4ODEwMDdEQ0NDMTAwN0U1MTAxMDA3RTk1NDFGOAorOjEwMDQ1MDAwMDA3QzkwODIwMDdDRDRDMjAwN0M4NDhCMDA5QUMwMDMxNAorOjEwMDQ2MDAwMDA3QzhDOEIwMDJDODgwMTAwOTg4MDlFMDBENDAwNkQ0RAorOjEwMDQ3MDAwMDA5ODQwOUMwMEQ0MDA2RTAwQ0MwODRDMDBDQzBDNEQ4MQorOjEwMDQ4MDAwMDBDQzEwNDgwMEQ0ODAxQTAwRDRDMDFBMDA4MDAxMDFBQQorOjEwMDQ5MDAwMDBENTAwMUEwMENDMDgzMjAwRDQwMDMyMDA5NDgyRDk3MgorOjEwMDRBMDAwMDBDQTBDMDAwMEQ0NDAxRTAwODAwMDAwMDBENDAwMUVEMgorOjEwMDRCMDAwMDBFNDAxMUUwMEQ0MDAxRTAwQ0EwODAwMDBDQTBDMDA5RgorOjEwMDRDMDAwMDBDQTEwMDAwMEQ0NDAxRTAwQ0ExNDAwMDBENDgwMUVEMAorOjEwMDREMDAwMDBENEMwMUUwMEQ1MDAxRTAwRDU0MDFFMDBENTQwMzRGQgorOjEwMDRFMDAwMDA4MDAwMDAwMEVFMDAxRTAwMjgwNDA0MDBFMjAwMUE1NAorOjEwMDRGMDAwMDBFMjAwMUEwMEQ0NDAxQTAwQ0EzODAwMDBDQzA4MDNGOQorOjEwMDUwMDAwMDBDQzBDMDMwMENDMEMwMzAwQ0MwQzAzMDA5ODgyQkQ4MworOjEwMDUxMDAwMDAwMDAwMDAwMDg0MDFCQjAwRDdBMDZGMDA4MDAwMDAzNQorOjEwMDUyMDAwMDBFRTAwMUYwMENBMDQwMDAwQzJGRjAwMDBDQzA4MzQyNworOjEwMDUzMDAwMDBDMTNGRkYwMDdDNzRDQjAwN0NDOTBCMDA3RDAxMEYyNAorOjEwMDU0MDAwMDA5OTAyQjAwMDdDNzM4QjAwODQwMUJCMDBEN0EwNkZDMAorOjEwMDU1MDAwMDA4MDAwMDAwMEVFMDAxRjAwQ0EwODAwMDAyODE5MDBGQgorOjEwMDU2MDAwMDA3RDg5OEIwMDk1ODAxNDAwMjgxNDA0MDBDQTBDMDBCQgorOjEwMDU3MDAwMDBDQTEwMDAwMENBMUMwMDAwQ0EyNDAwMDBFMjAwMUZDQworOjEwMDU4MDAwMDBENEMwMUEwMEQ1MDAxQTAwRDU0MDFBMDBDQzE4MDNCOAorOjEwMDU5MDAwMDBDQzJDMDMwMENDMkMwMzAwQ0MyQzAzMDA3REE1OEJCRAorOjEwMDVBMDAwMDA3RDlDNDcwMDk4NDI5NzAwMDAwMDAwMDA4MDAxNjE5OAorOjEwMDVCMDAwMDBENEMwMUEwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDA2OQorOjEwMDVDMDAwMDBFRTAwMUUwMEU0MDExRTAwRDQwMDFFMDBENDQwMUVGOAorOjEwMDVEMDAwMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIxNgorOjEwMDVFMDAwMDBFNDAxM0UwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUVCOAorOjEwMDVGMDAwMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMDBDQTA4MDAzMAorOjEwMDYwMDAwMDAyNDhDMDYwMDBDQ0MwNjAwOThDMDA2MDBDQzEwNEVDRQorOjEwMDYxMDAwMDA5OTAwMDQwMEQ0MDA3MzAwRTQwMTFFMDBENDAwMUUwMQorOjEwMDYyMDAwMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAwMDBFRTAwMUU5QQorOjEwMDYzMDAwMDBDQTA4MDAwMENBMEMwMDAwMzREMDE4MDAyNTEwMDFDMAorOjEwMDY0MDAwMDA5NTAwMjEwMEMxN0ZGRjAwQ0ExMDAwMDBDQTE0MDBGRAorOjEwMDY1MDAwMDBDQTE4MDAwMEQ0ODAxRDAwRDRDMDFEMDA3REIxOEJERAorOjEwMDY2MDAwMDBDMTQyMDIwMEMyQzAwMTAwRDU4MDFEMDAzNERDMEU3MgorOjEwMDY3MDAwMDA3RDVENEMwMDdGNzM0QzAwRDc0MDFFMDBENTAwMUVFRQorOjEwMDY4MDAwMDBENTQwMUUwMEMxNDIwMDAwQzJDMDAwMDAwOTlDMDEwQworOjEwMDY5MDAwMDAzMURDMTAwMDdGNUY0QzAwN0Y3MzRDMDAwNDI4MDJBNworOjEwMDZBMDAwMDA3RDgzODAwMEQ1QTg2RjAwRDU4MDY2MDBENzQwMUVFRQorOjEwMDZCMDAwMDBFQzAwNUUwMEM4MjQwMjAwQzgyNDAyMDA4MDAxQjhEQgorOjEwMDZDMDAwMDBENjAwNzYwMEQ0NDAxRTAwRDQ4MDFFMDBENEMwMUU4OAorOjEwMDZEMDAwMDA4MDAwMDAwMEVFMDAxRTAwODAwMDAwMDBFRTAwMUYwMQorOjEwMDZFMDAwMDBENDAwMUYwMDgwMDAwMDAwRDQwMDFGMDBENDAwMUZCMQorOjEwMDZGMDAwMDA4ODAwMDAwMEQ0MDAxRjAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwMDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwMDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwMDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwMDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwMDgwMDAwMDAwMTAxNzEwMDAyMDE3ODAwMDMwMDhGMDAwNDAwN0ZFNQorOjEwMDgxMDAwMDAwNTAwMDMwMDA2MDAzRjAwMDcwMDMyMDAwODAxMkMxRAorOjEwMDgyMDAwMDAwOTAwNDYwMDBBMDAzNjAwMTAwMUI2MDAxNzAwQTJCOQorOjEwMDgzMDAwMDAyMjAxM0EwMDIzMDE0OTAwMjAwMEI0MDAyNDAxMjVEMAorOjEwMDg0MDAwMDAyNzAwNEQwMDI4MDA2QTAwMkEwMDYwMDAyQjAwNTI5QgorOjEwMDg1MDAwMDAyRjAwNjUwMDMyMDA4NzAwMzQwMTdGMDAzQzAxNTYwNAorOjEwMDg2MDAwMDAzRjAwNzIwMDQxMDE4QzAwNDQwMTJFMDA1NTAxNzNDRAorOjEwMDg3MDAwMDA1NjAxN0EwMDYwMDAwQjAwNjEwMDM0MDA2MjAwMzgwRAorOjEwMDg4MDAwMDA2MzAwMzgwMDY0MDAzODAwNjUwMDM4MDA2NjAwMzhGNgorOjEwMDg5MDAwMDA2NzAwMzgwMDY4MDAzQTAwNjkwMDQxMDA2QTAwNDhCQgorOjEwMDhBMDAwMDA2QjAwNDgwMDZDMDA0ODAwNkQwMDQ4MDA2RTAwNDg3NgorOjEwMDhCMDAwMDA2RjAwNDgwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDY2RgorOjEwMDhDMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYxMAorOjEwMDhEMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMAorOjEwMDhFMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZGMAorOjEwMDhGMDAwMDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDZFMAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjYzNV9tZS5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjYzNV9tZS5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTNhN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNjM1X21lLmJpbi5paGV4CkBAIC0wLDAgKzEsMTM0NSBAQAorOjEwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMDAxMDAwMDBBMDAwMEEwMDAwMDAwMDAwMDBGRkZGMDAyODQ2MjFBOQorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDBBRgorOjEwMDAzMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwMDA0MDAwMDBBMDAwMEEwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAyNgorOjEwMDA1MDAwMDAwMDAwMDAwMDAxMDAwMEMwMjk0NjIwMDAwMDAwMDA1MAorOjEwMDA2MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMDA3MDAwQzAyMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEFGMgorOjEwMDA4MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA3QQorOjEwMDA5MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIwMDRCRQorOjEwMDBBMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDAwMDA2MDAwMDBBQgorOjEwMDBCMDAwMDAwMDA2MkUwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDI2NAorOjEwMDBDMDAwMDAwMDAwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDBGMDAzOQorOjEwMDBEMDAwMDAyODE2MjIwMDAwMDAwMDAwMDAwMDA4MDAyMTE2MjU1QworOjEwMDBFMDAwMDAwMDAwMDAwMDAwMDAxODAwMjAzNjI1MDAwMDAwMDA3RAorOjEwMDBGMDAwOEQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDRGQQorOjEwMDEwMDAwMDAyRjAyMjUwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBBRAorOjEwMDExMDAwMDAwMDAwMTgwMDQxMjAwMDAwNDA0ODExMDAwMDAwMTlCNAorOjEwMDEyMDAwMDA0MjIwMDAwMDIwNDgxMTAwMDAwMDAwOEUwMDAwMDA2NgorOjEwMDEzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDI4MDAyMDRBMkQ4QgorOjEwMDE0MDAwMDAwMDAwMDA5MDAwMDAwMDAwMjA0NDExMDAwMDAwMDBBQQorOjEwMDE1MDAwMDAwMDAwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMDAwMEMyNgorOjEwMDE2MDAwMDAyMTE2MjIwMDAwMDAwMDAwMDAwMDAzMDAyODE2MjVEMAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAxOTAwMjExQTIyMDAwMDAwMDAwOQorOjEwMDE4MDAwMDAwMDAwMDQwMDI4MUEyNjAwMDAwMDAwMDAwMDAwMDAwMworOjEwMDE5MDAwMDAyOTE0QzUwMDAwMDAwMDAwMDAwMDE5MDAyMDM2MjVDOQorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0ExNDAyMDAwMDAwMDBGRgorOjEwMDFCMDAwMDAwMDAwMTYwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDNDQQorOjEwMDFDMDAwMDAyODE2MjUwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ1QQorOjEwMDFEMDAwMDAwMDAwMDBGRkZGRkZGQzAwMjgwRTIzMDAwMDAwMDBDRAorOjEwMDFFMDAwMDAwMDAwMDAwMDI5MTRBMzAwMDAwMDAwMDAwMDAwMTcxOAorOjEwMDFGMDAwMDAyMDM2MjUwMDAwMDAwMDAwMDA4MDAwMDAyODBFMjJBQworOjEwMDIwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMjIwRTIzMDAwMDAwMDA5NAorOjEwMDIxMDAwMDAwMDAwMDAwMDI5Mzg2RTAwMDAwMDAwMjAwMDAwMDBFRgorOjEwMDIyMDAwMDAyODBFMjIwMDAwMDAwMDAwMDAwMDA2MDAyMTBFMjMxRQorOjEwMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDBFRgorOjEwMDI0MDAwMDAwMDAwMDAwMDIyMDIyMjAwMDAwMDAwMDAwMDAwMDA2OAorOjEwMDI1MDAwMTRFMDAwMDAwMDAwMDAzODAwMDAwMDAwMkVFMDAwMDA2NAorOjEwMDI2MDAwMDAwMDAwMzUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwMzcxNgorOjEwMDI3MDAwMDAwMDAwMDAwMDQwMEUyRDAwMDAwMDM5MDAwMDAwMDhDMgorOjEwMDI4MDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDA5MDA0MDEyMkQ4QgorOjEwMDI5MDAwMDAwMDAwNDYwMDAwMDAwMTAwNDAwRTJEMDAwMDAwMzk2MworOjEwMDJBMDAwMDAwMDAwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMyOAorOjEwMDJCMDAwMDAyODEyMjMwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQ4NworOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjExRTIzMDAwMDAwMDBBRAorOjEwMDJEMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMDNFMDAwMDAwMDhFNAorOjEwMDJFMDAwMDA0MDFDMTEwMDAwMDA0MTAwMDAwMDBEMDAyMDFFMkRFOAorOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjgxRTI3MDAwMDAwMDA4MgorOjEwMDMwMDAwMDAwMDAwMDMwMDIyMUUyNzAwMDAwMDAwN0ZDMDAwMDA0NAorOjEwMDMxMDAwMDAyODFBMjMwMDAwMDAwMDAwMDAwMDE0MDAyMTFBMjYwMworOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMzMxQTI2MDAwMDAwMDA1OQorOjEwMDMzMDAwMDAwMDAwMDgwMDIyMUEyNjAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDM0MDAwMDAyOTBDQzcwMDAwMDAwMDAwMDAwMDI3MDAyMDM2MjQxMAorOjEwMDM1MDAwMDAwMDAwMDAwMDAwN0YwMDAwMjgxMjIxMDAwMDAwMDBDMworOjEwMDM2MDAwMDAwMDE0MDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMDM3MDAwMENFMDAwMDAwMDAwMDA0QjAwMDAwMDAxMDAyOTBFMjNFQgorOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwRTAwMjAzNjIzMDAwMDAwMDBFNgorOjEwMDM5MDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGODAwMDAxMQorOjEwMDNBMDAwMDAyOTRBMjMwMDAwMDAwMDAwMDAwMDAwMDAzQTJDMDI0RgorOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIwRTJCMDAwMDAwMDBFMAorOjEwMDNDMDAwRkMwMDAwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMEZDOQorOjEwMDNEMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjNGMAorOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAyNzAwMjA0QTJEMDAwMDAwMDA0RgorOjEwMDNGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMjk1QgorOjEwMDQwMDAwMDAyMDBFMkQwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjNFOQorOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMDQyMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDE1MgorOjEwMDQzMDAwMDAyMTAyMjIwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA4MworOjEwMDQ0MDAwMDAwMDAwNjEwMDAwMDAwMDJFRTAwMDAwMDAwMDAwNUZERQorOjEwMDQ1MDAwMDAwMDAwMDAyQ0UwMDAwMDAwMDAwMDVFMDAwMDAwMDAzMgorOjEwMDQ2MDAwMDA0MDBFMkQwMDAwMDA2MjAwMDAwMDAxMDA0MDBFMkQzMworOjEwMDQ3MDAwMDAwMDAwNjIwMDAwMDAwQTAwMjAwRTJEMDAwMDAwMDBCNQorOjEwMDQ4MDAwMDAwMDAwMEIwMDQwMTIyRDAwMDAwMDZBMDAwMDAwMDA3OAorOjEwMDQ5MDAwQzAyMDBDMDAwMDAwMDAwMDAwM0ZGRkZDMDAyODEyMjNEOQorOjEwMDRBMDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIxMjI0MDAwMDAwMDBGMgorOjEwMDRCMDAwN0ZDMDAwMDAwMDI4MTYyMzAwMDAwMDAwMDAwMDAwMTQ4OAorOjEwMDRDMDAwMDAyMTE2MjUwMDAwMDAwMDAwMDAwMDAxMDAzMzE2MjU2MQorOjEwMDREMDAwMDAwMDAwMDA4MDAwMDAwMDAwMjgwRTIzMDAwMDAwMDA0MworOjEwMDRFMDAwMDAwMDAwMDAwMDI5MENBMzAwMDAwMDAwM0ZGRkZDMDBGQQorOjEwMDRGMDAwMDAyOTBFMjMwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMyMQorOjEwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwNkQ4QQorOjEwMDUxMDAwMDAwMDAxMDAwMDQwMUMxMTAwMDAwMDcwMDAwMDAwMERGMAorOjEwMDUyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMEYwMDAyODFFMjcwMworOjEwMDUzMDAwMDAwMDAwMDAwMDAwMDAwNDAwMjIxRTI3MDAwMDAwMDA1MAorOjEwMDU0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMERBOAorOjEwMDU1MDAwMDAyMDQ4MTEwMDAwMDAwMEZGRkZGMEZGMDAyODFBMzBDMworOjEwMDU2MDAwMDAwMDAwMDAwMDAwQTAyODAwMjA0NDExMDAwMDAwMDA0RQorOjEwMDU3MDAwMDAwMDAwMDAwMDI5NDhFNjAwMDAwMDAwMDAwMEEwMTg2QworOjEwMDU4MDAwMDAyMDQ0MTEwMDAwMDAwMDNGRkZGRkZGMDAyODRBMjMyNQorOjEwMDU5MDAwMDAwMDAwMDAwMDAwQTAxMDAwMjA0NDExMDAwMDAwMDAzNgorOjEwMDVBMDAwMDAwMDAwMDAwMDIwNDgwNDAwMDAwMDAwMDAwMDAwMzBBRgorOjEwMDVCMDAwMDAyMDE2MkQwMDAwMDAwMDAwMDAwMDAyMDAyOTE2MjU3MgorOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAzMDAwMjAzNjI1MDAwMDAwMDA4MAorOjEwMDVEMDAwMDAwMDAwMjUwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMDVFMDAwMDAyRjAwQTMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA2RAorOjEwMDVGMDAwMDAwMDAwODMwMDAwMDAyNjAwMjAxNjJEMDAwMDAwMDBFRgorOjEwMDYwMDAwMDAwMDAwMDAwMDJGMDBBNDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMDYxMDAwMENDMDAwMDAwMDAwMDA4NDAwMDAwMDAwMDA0MDAwMDA0QQorOjEwMDYyMDAwMDAwMDAwOEEwMDAwMDAyNTAwMjAzNjIzMDAwMDAwMDBBMgorOjEwMDYzMDAwMDAwMDAwMjYwMDIwMzYyNDAwMDAwMDAwMDAwMDAwMTcwMworOjEwMDY0MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjdGMworOjEwMDY1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwOEExQworOjEwMDY2MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjY1MDAwMDAwMDBCRgorOjEwMDY3MDAwMDA2MDAwMDAwMDAwMDY1OTAwMDAwMDAyMDAyMTBFMjI2OAorOjEwMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOEQwOQorOjEwMDY5MDAwMDAwMDAwMTJDMDQwMzYyMDAwMDAwMDkzMDAwMDAwMDA1RgorOjEwMDZBMDAwMkVFMDAwMDAwMDAwMDA5MTAwMDAwMDAwMkNFMDAwMDA5RgorOjEwMDZCMDAwMDAwMDAwOTAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOTI5QgorOjEwMDZDMDAwMDAwMDAwMDMwMDQwMEUyRDAwMDAwMDkyMDAwMDAwMEMwRQorOjEwMDZEMDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDEyMDAyMDM2MjMzNAorOjEwMDZFMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwRTIyMDAwMDAwMDBCNgorOjEwMDZGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMDk4MDAwMEEwMENFMgorOjEwMDcwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0QworOjEwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwQTBGMQorOjEwMDcyMDAwMDAwMEEwMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBOAorOjEwMDczMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMkVFMDAwMDAzMgorOjEwMDc0MDAwMDAwMDAwOUUwMDAwMDAwMDJDRTAwMDAwMDAwMDAwOUQ2MgorOjEwMDc1MDAwMDAwMDAwMDIwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMDM3QQorOjEwMDc2MDAwMDA0MDBFMkQwMDAwMDA5RjAwMDAwMDBDMDAyMDBFMkQwOAorOjEwMDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwRQorOjEwMDc4MDAwMDAwMDAwMDAwMDNBMEMwMjAwMDAwMDAwMDAzRjAwMDBFMgorOjEwMDc5MDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDEwMDAyMTBFMjM5RQorOjEwMDdBMDAwMDAwMDAwMDAwMDAwMDAxMTAwMjAzNjIzMDAwMDAwMDBCRgorOjEwMDdCMDAwMDAwMDAwMUUwMDIxMDIyQjAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDdDMDAwMTRDMDAwMDAwMDAwMDBBNzAwMDAwMDE2QzAyMDM2MjA2MgorOjEwMDdEMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjEwMjJCMDAwMDAwMDBBQworOjEwMDdFMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMEFBMDAwMDAwMTU3NgorOjEwMDdGMDAwQzAyMDM2MjAwMDAwMDAwMDAwMDAwMDA4MDAyMTBFMkI2MQorOjEwMDgwMDAwMDAwMDAwMDAwMDAwMDA3RjAwMjgwRTIzMDAwMDAwMDAxMAorOjEwMDgxMDAwMDAwMDAwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMDgyMDAwMENFMDAwMDAwMDAwMDBFMTAwMDAwMDAwMjcwMDAwMDBENAorOjEwMDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTNCMworOjEwMDg0MDAwMDAwMDAwMDEwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMDg1MDAwMEFFMDAwMDAwMDAwMDBCMzAwMDAwMDAwMDA2MDAwMDA5QgorOjEwMDg2MDAwMDAwMDAxM0E4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA1NworOjEwMDg3MDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMENFRAorOjEwMDg4MDAwMDAyMjFFMzAwMDAwMDAwMDk5ODAwMDAwMDAyMDQ0MTE2QQorOjEwMDg5MDAwMDAwMDAwMDAwMDAwMDAwNDAwMjAxMjJEMDAwMDAwMDBGNQorOjEwMDhBMDAwMDAwMDAwMDgwMDIyMTIyNDAwMDAwMDAwMDAwMDAwMTBEOAorOjEwMDhCMDAwMDAyMDE4MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTFDRTRDNgorOjEwMDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjA0ODA3MDAwMDAxMkY0OQorOjEwMDhEMDAwOUIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwOAorOjEwMDhFMDAwMDAyMDQ4MDIwMDAwMDAwMDlDMDAwMDAwMDAyMDQ0MTE4RAorOjEwMDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMxNDZGMDAwMDAwMDA0MgorOjEwMDkwMDAwMDAwMDAwMDEwMDMzM0UyMzAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMDkxMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDNDMDU1NQorOjEwMDkyMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBEMQorOjEwMDkzMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMDk0MDAwMDAyMDEwMTAwMDAwMDAwMDAwMDBFMDA3MDAyMDQ0MTEwQgorOjEwMDk1MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjJCMDAwMDAwMDAzQQorOjEwMDk2MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwMENCMDBGOEZGMDhFOQorOjEwMDk3MDAwMDAyMDQ4MTEwMDAwMDAwMDk4MDAwMDAwMDA0MDQ4MTFDRAorOjEwMDk4MDAwMDAwMDAwREMwMDAwMDBGMDAwMjgwRTIyMDAwMDAwMDA0MworOjEwMDk5MDAwMDAwMDAwQTAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA2MworOjEwMDlBMDAwMENDMDAwMDAwMDAwMDBEQTAwMDAwMDExMDAyMDBFMkQzNQorOjEwMDlCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDBFMgorOjEwMDlDMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMEQ1MDAwMDAwMDI2NAorOjEwMDlEMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENworOjEwMDlFMDAwMDAwMDAwRDQwMDAwM0YwMDAwNDAwQzExMDAwMDAwRDZDMQorOjEwMDlGMDAwMDAwMDFGMDAwMDQwMEMxMTAwMDAwMEQ2MDAwMDBGMDA5NgorOjEwMEEwMDAwMDAyMDBDMTEwMDAwMDAwMDAwMzgwMDA5MDAyOTRBMjNEMgorOjEwMEExMDAwMDAwMDAwMDAzRjAwMDAwMDAwMjgwRTJCMDAwMDAwMDAzNgorOjEwMEEyMDAwMDAwMDAwMDIwMDIyMEUyMzAwMDAwMDAwMDAwMDAwMDc2QQorOjEwMEEzMDAwMDA0OTRBMjMwMDAwMDBEQzAwMzgwRjA5MDAyMDQ4MTE1QgorOjEwMEE0MDAwMDAwMDAwMDA2ODAwMDAwNzAwMjA0ODExMDAwMDAwMDBCRQorOjEwMEE1MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBGQworOjEwMEE2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQ2NAorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBGRAorOjEwMEE4MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEEyMDI0OQorOjEwMEE5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwRkYwMDAwMDAyODBFMjI4QQorOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjk0QTIzMDAwMDAwMDAzMAorOjEwMEFCMDAwMDAwMDAwMjcwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMjY4RQorOjEwMEFDMDAwMDAyMDEyMkQwMDAwMDAwMDAwMDAwMDAwMDAyRjAwODMxNQorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRUE0MAorOjEwMEFFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjVGMDAwMDAwMDA0MQorOjEwMEFGMDAwMDA0MDAwMDAwMDAwMDBFQjAwMDAwMDAwMDA2MDAwMDA2QgorOjEwMEIwMDAwMDAwMDA2NjIwMDAwMDAwNzAwMjAyMjJEMDAwMDAwMDAwNworOjEwMEIxMDAwMDAwMDAwMDUwMDIyMEUyMjAwMDAwMDAwMDAxMDAwMDA2RQorOjEwMEIyMDAwMDAyODBFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTIwNjhCQgorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDA2RAorOjEwMEI0MDAwMDAwMDAwRUYwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMEI1MDAwMDAyOTIwNjgwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3MgorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjEwMjIzMDAwMDAwMDAzQworOjEwMEI3MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMEY4MDAwMDAwMEI3RQorOjEwMEI4MDAwMDAyMTAyMjgwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA0NgorOjEwMEI5MDAwMDAwMDAwRjgwMDAwMDQwMDAwMjkyMjI4MDAwMDAwMDBFNgorOjEwMEJBMDAwMDAwMDAwMTQwMDIwMzYyODAwMDAwMDAwMDAwMDAwMUM5NworOjEwMEJCMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAxMAorOjEwMEJDMDAwMDAwMDAwRkQwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwNAorOjEwMEJEMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMUU3RQorOjEwMEJFMDAwMDAyMTBFMjIwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBFMAorOjEwMEJGMDAwMDAwMDAxMEIwMDAwQTMwRjAwMjA0NDExMDAwMDAwMDBDMgorOjEwMEMwMDAwMDAwMDAwMTEwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDE3NworOjEwMEMxMDAwMDAyRjAyMjMwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBCNAorOjEwMEMyMDAwMDAwMDAxMDRGRkZGRkZGRjAwNDA0ODExMDAwMDAxMEIxRQorOjEwMEMzMDAwMDAwMDAwMDIwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMEM0MDAwMENDMDAwMDAwMDAwMDEwNzAwMDBGRkZGMDA0MDQ4MTEzOQorOjEwMEM1MDAwMDAwMDAxMEIwMDAwMDAwNDAwMkYwMjIzMDAwMDAwMDAzMAorOjEwMEM2MDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwMTBBMDAwMDAwRkZBRQorOjEwMEM3MDAwMDA0MDQ4MTEwMDAwMDEwQjAwMDAwMDAxMDAyMDQ4MTE1NQorOjEwMEM4MDAwMDAwMDAwMDAwMDAyQzQwMDAwMjA0NDExMDAwMDAwMDAyOQorOjEwMEM5MDAwMDAwMDAwMUYwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMENBMDAwMTRDMDAwMDAwMDAwMDExMjAwMDAwMDEwNDAyMTBFMjBCRQorOjEwMENCMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDBBOAorOjEwMENDMDAwMDAwMDAwMTg0MDIyNEEyMDAwMDAwMDAwMDAwMDAwMTAzMAorOjEwMENEMDAwQzA0MjRBMjAwMDAwMDExNDAwMDAwMDAwMDAyMDBDMTE1NgorOjEwMENFMDAwMDAwMDAwMDAwMDAwMDAxMzAwMjAzNjIzMDAwMDAwMDA3OAorOjEwMENGMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMEQwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBBMDAyMDEwMTExRgorOjEwMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDA3RQorOjEwMEQyMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMTFCMDAwMDAwMDBCQgorOjEwMEQzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAxMDA1MzEyMjRCMAorOjEwMEQ0MDAwMDAwMDAxMTdGRkJGRkZGRjAwMjgzQTJFMDAwMDAwMDAzRgorOjEwMEQ1MDAwMDAwMDAwMUIwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAzMworOjEwMEQ2MDAwMTRDMDAwMDAwMDAwMDEyRTgxMDAwMDAwMDAyMDQ0MTE4QQorOjEwMEQ3MDAwMDAwMDAwMDAwMDAwMDAwRDAwMjA0ODExMDAwMDAwMDBFRAorOjEwMEQ4MDAwMDAwMDAwMTgwMDIyMEUzMDAwMDAwMDAwRkMwMDAwMDBFRgorOjEwMEQ5MDAwMDAyODBFMjMwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwNAorOjEwMERBMDAwMDAwMDAwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDBCQworOjEwMERCMDAwMDAwMDAwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMEUwNQorOjEwMERDMDAwMDAyMDQ0MTEwMDAwMDAwMDA3RjhGRjA4MDAyMDQ4MTEyRgorOjEwMEREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0QTIzMDAwMDAwMDA3RAorOjEwMERFMDAwMDAwMDAwMUMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDg3NAorOjEwMERGMDAwMDAyMTRBMjcwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFFOAorOjEwMEUwMDAwMDAwMDAwMDAwNjBBMDIwMDAwMjk0QTI0MDAwMDAwMDAzOQorOjEwMEUxMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMEUyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDBDOQorOjEwMEUzMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCQworOjEwMEU0MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDIxN0M4QgorOjEwMEU1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwODAwMDAwMDAyMDQ4MTEyNAorOjEwMEU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA2MDAwMDAwMDAxNAorOjEwMEU3MDAwMDAwMDAwMDgwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDBEOAorOjEwMEU4MDAwMTcwMDAwMDAwMDAwMDAwMDAwMDQyMTdGMDA2MDQ0MTFGMgorOjEwMEU5MDAwMDAwMDA2OEEwMDAwMDAxRjAwMjEwMjMwMDAwMDAwMDA1MAorOjEwMEVBMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjg5MDAwMDAwMDREQgorOjEwMEVCMDAwMDA0MDRDMTEwMDAwMDEzNTgxMDAwMDAwMDAyMDQ0MTE2OQorOjEwMEVDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBBOAorOjEwMEVEMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUM2OAorOjEwMEVFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTFCNgorOjEwMEVGMDAwMDAwMDA2OEEwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBGRQorOjEwMEYwMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMTNDMDAwMDAwMDBCMAorOjEwMEYxMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGMQorOjEwMEYyMDAwMDAwMDAwMEIwMDAwMDAwMDAwNjAwNDExMDAwMDAzMTUyOQorOjEwMEYzMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDA3QworOjEwMEY0MDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA2MDAwMDAxNQorOjEwMEY1MDAwMDAwMDAxNjAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDA5QworOjEwMEY2MDAwMDAwMDAwMTBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY2MAorOjEwMEY3MDAwNDAyODA2MjAwMDAwMDAwMDAwMDAwMDEwQzAyMTBBMjBDOAorOjEwMEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQxNDYxMDAwMDAwMDBCOAorOjEwMEY5MDAwMDAwMDAwMDAwMDc0MTg4MjAwMDAwMkJCMDAwMUExRkRFNworOjEwMEZBMDAwMDA2MDQ0MTEwMDAwMDJFMDAwMDAzRkZGMDAyRjAyMkYwQworOjEwMEZCMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxNDcxRAorOjEwMEZDMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDAxQworOjEwMEZEMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEzMQorOjEwMEZFMDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDBCNAorOjEwMEZGMDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDNGRkY4NworOjEwMTAwMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA5NAorOjEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxNjAwRgorOjEwMTAyMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwMDAwMEZGRkYyMworOjEwMTAzMDAwQzAyODEyMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTE2MjBFRgorOjEwMTA0MDAwMDAwMDAwMDAwMDAwRkZGRkMwNjgxQTIwMDAwMDAyQkI4MworOjEwMTA1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYxQworOjEwMTA2MDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA1NAorOjEwMTA3MDAwMDAwMDAxNTgwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDExMgorOjEwMTA4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE2QworOjEwMTA5MDAwMDAzMDBBMkYwMDAwMDAwMDAwMDAwMDAxMDAyMTBBMjI5OQorOjEwMTBBMDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDA5OQorOjEwMTBCMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEyOQorOjEwMTBDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE5NQorOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMTAwODA0ODExMDAwMDAwMDAzNgorOjEwMTBFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDA5NQorOjEwMTBGMDAwMDA2MDAwMDAwMDAwMDE4RjAwMDAwMDAwMDA2MDAwMDBBMAorOjEwMTEwMDAwMDAwMDAxQTAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDBBMAorOjEwMTExMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMTEyMDAwMDAyMDJDMDgwMDAwMDAwMDAwMDAwMDAwMDAyMDI0MTExNgorOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyODExMDAwMDAwMDA1NgorOjEwMTE0MDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTY5QworOjEwMTE1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEyMworOjEwMTE2MDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDAwMworOjEwMTE3MDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDJFNQorOjEwMTE4MDAwMDAyMjFFMjkwMDAwMDAwMDAwMDAwMDAwMDA3MDQ4RUI1MworOjEwMTE5MDAwMDAwMDAxOUMwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQkI5NQorOjEwMTFBMDAwMDAwMDAwMDE0MDMzMDYyMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMTFCMDAwQzAzMDI0MDkwMDAwMDAwMDAwMDAzRkZGMDAyRjAyMkY3NAorOjEwMTFDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAzMworOjEwMTFEMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkEzMDAwMDAwMDAwQQorOjEwMTFFMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBDMworOjEwMTFGMDAwMDAwMDAxODEwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0FEMgorOjEwMTIwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMTg2OTUwMDAwMDA4MgorOjEwMTIxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwNworOjEwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxODY0QgorOjEwMTIzMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDE4NQorOjEwMTI0MDAwMDA1MzA2MjEwMDAwMDE4MjkyMDAwMDAwMDAyMDQ0MTE5QQorOjEwMTI1MDAwMDAwMDAwMDAwMDAwMDAwMEMwNjA0ODAwMDAwMDAxOTc4RQorOjEwMTI2MDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTE1OQorOjEwMTI3MDAwMDAyMDA2MkQwMDAwMDAwMDAwMDAwMDAwMDA3ODA0MkE3NQorOjEwMTI4MDAwMDAwMDAyRkIwMDAwMDAwMDAwMjAyODA5MDAwMDAwMDAxMAorOjEwMTI5MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMTJBMDAwMENDMDAwMDAwMDAwMDE3NDAwMDAwMDAwQzA0MDA0MDBGOQorOjEwMTJCMDAwMDAwMDAwMDEwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTU4RQorOjEwMTJDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMTJEMDAwMENFMDAwMDAwMDAwMDE5NDAwMDAwMDE1QzAyMDM2MjA0MgorOjEwMTJFMDAwMDAwMDAwMDAwMDAwMDAxNkMwMjAzNjIwMDAwMDAwMDBCMgorOjEwMTJGMDAwM0Y4MDAwMDAwMDIwMDQxMTAwMDAwMDAwNDYwMDAwMDBCNAorOjEwMTMwMDAwMDA2MDA4MTEwMDAwMDFCMjAwMDAwMDAwMDA4MDAwMDAzMQorOjEwMTMxMDAwMDAwMDAwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDBCQgorOjEwMTMyMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMTMzMDAwMENDMDAwMDAwMDAwMDE5QjAwMDAwMDAxMDA4MDQ4MTE2QgorOjEwMTM0MDAwMDAwMDAwMDAwMDAwMDAyMTAwODA0ODExMDAwMDAwMDBBMworOjEwMTM1MDAwMDAwMEZGRkY0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBFOQorOjEwMTM2MDAwQzAyMTEyMjAwMDAwMDAwMDAwMDBGRkZGNDAyODE2MjBDRQorOjEwMTM3MDAwMDAwMDAwMDAwMDAwMDAxMEMwODExQTIwMDAwMDAwMDBFMgorOjEwMTM4MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDY2MQorOjEwMTM5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDA4MDAyMjFFMzA1QworOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDAyOTAwMjAxQTJEMDAwMDAwMDBBRAorOjEwMTNCMDAwMDAwMEUwMDAwMDIwNDQxMTAwMDAwMDAwRkZGQkZGMDlENgorOjEwMTNDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDBGMDAyMDIyMkQyNgorOjEwMTNEMDAwMDAwMDAwMDAwMDAwMUZGRjAwMjk0QTI4MDAwMDAwMDA1NAorOjEwMTNFMDAwMDAwMDAwMDYwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMTNGMDAwMDAyOTIwRTgwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDg0QworOjEwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MworOjEwMTQxMDAwMDYwQTAyMDAwMDI5NEEyNjAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMTQyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFDQQorOjEwMTQzMDAwMDAwMDAwMDAwMDAwMDEwMDAwMjAxODExMDAwMDAwMDA2MgorOjEwMTQ0MDAwMDAwMDAwMDgwMDYyMUUyODAwMDAwMTJGMDAwMDAwMDhCNAorOjEwMTQ1MDAwMDA4MjIyMjgwMDAwMDAwMDAwMDJDMDAwMDAyMDQ0MTE4OQorOjEwMTQ2MDAwMDAwMDAwMDAwMDAwMDAxNTAwNjAwRTJEMDAwMDAxQkQwRQorOjEwMTQ3MDAwMDAwMDAwMTYwMDYwMEUyRDAwMDAwMUJEMDAwMEMwMDgzNQorOjEwMTQ4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE3MDAyMDBFMkQ3NQorOjEwMTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAxQjlCRQorOjEwMTRBMDAwMDAwMDAwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwNworOjEwMTRCMDAwMDAyMDQ4MDEwMDAwMDAwMDM5MDAwMDAwMDAyMDQ4MTExMQorOjEwMTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBBMworOjEwMTREMDAwMDAwMDAwMDAwMDgwNDgwMjAwMDAwMDAwMDAwMDAwMTgyQQorOjEwMTRFMDAwMDAyMDJFMkQwMDAwMDAwMDAwMDAwMDAwMDAzQjBENjNENgorOjEwMTRGMDAwMDAwMDAwMDAwMDAwMDAwODAwMjI0QTIzMDAwMDAwMDA1NQorOjEwMTUwMDAwMDAwMDAwMTAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMTgyNAorOjEwMTUxMDAwMDAyMjRBMjMwMDAwMDAwMDAwMDAwMDAwMDA4MDQ4MDM3MQorOjEwMTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEI1MAorOjEwMTUzMDAwMDAwMDEwMDAwMDYwMDQxMTAwMDAwMzE1MDAwMDAwMDAwRQorOjEwMTU0MDAwMDAyMDA0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTFFRAorOjEwMTU1MDAwMDAwMDAxQjIwMDAwMDAwNzAwMjEwNjJGMDAwMDAwMDA3QgorOjEwMTU2MDAwMDAwMDAwMTMwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDExMAorOjEwMTU3MDAwMDAyMDJDMTEwMDAwMDAwMDAwMDBGRkZGNDAyODIyMjA2NgorOjEwMTU4MDAwMDAwMDAwMDAwMDAwMDAwRjAwMjYyMjI4MDAwMDAwMDBEQworOjEwMTU5MDAwMDAwMDAwMTA0MDIxMjYyMDAwMDAwMDAwMDAwMDAwMEY4NQorOjEwMTVBMDAwMDAyNjI2MjkwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDI3QworOjEwMTVCMDAwMDAwMDAwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAzRQorOjEwMTVDMDAwMDAwMDAwMUIwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA4NworOjEwMTVEMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBDRAorOjEwMTVFMDAwMDAwMDAxRTAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAyNworOjEwMTVGMDAwMDAwMDAwODEwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkM1NAorOjEwMTYwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFQgorOjEwMTYxMDAwMDAwMDAwMDAwMDAwMDA4MDAwMjAxQzExMDAwMDAwMDBGRAorOjEwMTYyMDAwMDAwMDAwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDA2MgorOjEwMTYzMDAwMENFMDAwMDAwMDAwMDFEQzAwMDAwMDAwMDA2MDAwMDA4MQorOjEwMTY0MDAwMDAwMDAxRTkwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRDgzRQorOjEwMTY1MDAwMDAwMDAwMDEwMDIwMkMxMTAwMDAwMDAwMDAwMDAwMUYwRAorOjEwMTY2MDAwMDAyODBBMjIwMDAwMDAwMDAwMDAwMDFGMDAyODJBMkE4QgorOjEwMTY3MDAwMDAwMDAwMDAwMDAwMDAwMTAwNTMwNjIxMDAwMDAxRDExRAorOjEwMTY4MDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDI2NQorOjEwMTY5MDAwMDAzMDRBMkYwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTE4RgorOjEwMTZBMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDMAorOjEwMTZCMDAwMDAwMDAwMDEwMDMwMUUyRjAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTZDMDAwMDAyRjAyMjcwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBENgorOjEwMTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxRTlDMAorOjEwMTZFMDAwMDAwMDAwMDEwMDUzMUUyNzAwMDAwMUU1MDAwMEZGRkY3RAorOjEwMTZGMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDBGMDAyNjBFMjNFRQorOjEwMTcwMDAwMDAwMDAwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDBCNgorOjEwMTcxMDAwMDAwMDAwMEYwMDI2MTIyNDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMTcyMDAwMDAyMDE0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDE4MTFFQgorOjEwMTczMDAwMDAwMDAyQkIwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDBEOAorOjEwMTc0MDAwMDAwMDAwMDAwMDJGMDIyQjAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTc1MDAwMENFMDAwMDAwMDAwMDFGODAwMDAwMDEwMDAyMjE2MjgzNAorOjEwMTc2MDAwMDAwMDAwMDBGRkZGMDAwMDAwMjgxNjI1MDAwMDAwMDAxOAorOjEwMTc3MDAwMDAwMEZGRkYwMDI4MUEyOTAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMTc4MDAwMDAyOTQ4QzUwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MEFCMQorOjEwMTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyQzExMDAwMDAwMDBFQworOjEwMTdBMDAwMDAwMDAwMTAwMDIyMTYyMzAwMDAwMDAwRkZGRjAwMDBEMAorOjEwMTdCMDAwMDAyODE2MjUwMDAwMDAwMDAwMDBGRkZGMDAyODFBMjQ2MgorOjEwMTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OEM1MDAwMDAwMDBFMworOjEwMTdEMDAwMDAwMDAwMDAwMDczMTUwMzAwMDAwMjA1MDAwMDAwMDA3NworOjEwMTdFMDAwMDAyMDE4MDUwMDAwMDAwMDAwMDAwMDAwMDA3MzE1MjQxMAorOjEwMTdGMDAwMDAwMDAyMDUwMDAwMDAwMDAwMkQxNEM1MDAwMDAwMDBEQworOjEwMTgwMDAwMDAwMDAwMDAwMDMwMDhBMjAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMTgxMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MDIxNAorOjEwMTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyMDAzMDAwMDAwMDA3NQorOjEwMTgzMDAwMDAwMDAwMDAwMDgwMjQwNDAwMDAwMDAwMDAwMDAwMEZGMQorOjEwMTg0MDAwMDAyMTAyMjUwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA3QworOjEwMTg1MDAwMDAwMDA2ODkwMDAwMDAwMDAwMkIxNDA1MDAwMDAwMDBCNQorOjEwMTg2MDAwMDAwMDAwMDEwMDkwMTYyNTAwMDAwMDAwMDAwMDAwMDBBQworOjEwMTg3MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTE4OAorOjEwMTg4MDAwMDAwMDAzMTUwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwQgorOjEwMTg5MDAwMDAwMDAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDIyNTZBNAorOjEwMThBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDFBMDAyOTRBMjIxNAorOjEwMThCMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA0OAorOjEwMThDMDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDA3QQorOjEwMThEMDAwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAzOAorOjEwMThFMDAwMDAwMDAwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwNQorOjEwMThGMDAwMDAwMDAwMDMwMDM4NEEyMTAwMDAwMDAwMDAwMEExRkNBNQorOjEwMTkwMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFOAorOjEwMTkxMDAwMDAwMDAwMDAwMDAwRkZGRjQwMjgxMjIwMDAwMDAwMDAyRgorOjEwMTkyMDAwMDAwMDAwMTBDMDIxMUEyMDAwMDAwMDAwMDAwMEZGRkY4RQorOjEwMTkzMDAwNDAyODBFMjAwMDAwMDAwMDAwMDAwMDEwQzAyMTE2MjBFQQorOjEwMTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQxNDY1MDAwMDAyQkJFRAorOjEwMTk1MDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkUwMDAwMDAwMDE1MAorOjEwMTk2MDAwMDAzMzA2MjEwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjFDQgorOjEwMTk3MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAyMTk4MAorOjEwMTk4MDAwMDAwMDNGRkYwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDBCOQorOjEwMTk5MDAwMENDMDAwMDAwMDAwMDIxMjAwMDAwMDAwQzA0MDA0MDA2MworOjEwMTlBMDAwMDAwMDAwMDEwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NDI4RQorOjEwMTlCMDAwMDAwMDAwMDAwMDQwMDQwRjAwMDAwMjEzMDAwMDAwMDBCRgorOjEwMTlDMDAwMDA2MDAwMDAwMDAwMDYyRTAwMDAwMDAwMDA2MDAwMDAyMworOjEwMTlEMDAwMDAwMDA2NDIwMDAwMDIxMDAwNjAwNDExMDAwMDAzMTUyMAorOjEwMTlFMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMUEwMDAwMDAwMDBGNgorOjEwMTlGMDAwMDA2MDAwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDA4QQorOjEwMUEwMDAwMDAwMDAyQkIwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMxNAorOjEwMUExMDAwOTM4MDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMUEyMDAwMDAyMDQ4MDgwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkZFNgorOjEwMUEzMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyMzI4OAorOjEwMUE0MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMTNBMDAwMDAwMDBGQgorOjEwMUE1MDAwMDA0MDAwMDAwMDAwMDIzNjk1MDAwMDAwMDAyMDQ0MTEwNAorOjEwMUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjJGMDAwMDAwMDAxNgorOjEwMUE3MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMjM2MDAwMDAwMDA0MgorOjEwMUE4MDAwQzA0MDQ4MDAwMDAwMDIzMzkyMDAwMDAwMDAyMDQ0MTFEMgorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxRQorOjEwMUFBMDAwMDAwMDIyNTYwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYzMworOjEwMUFCMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFCQQorOjEwMUFDMDAwMDAwMDAwMDAwMDAwMDAwMzAwMjA0ODExMDAwMDAwMDA5QQorOjEwMUFEMDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFGMworOjEwMUFFMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTE2OQorOjEwMUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwNDExMDAwMDAyRkI3NAorOjEwMUIwMDAwMDAwMDAwMDBDMDQwMDQwMDAwMDAwMDAxMDAwMDAwMDBEMAorOjEwMUIxMDAwMDA2MDAwMDAwMDAwMDYyRTAwMDBBMDBDMDAyMDQ0MTExMAorOjEwMUIyMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA4RAorOjEwMUIzMDAwMDAwMDAwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMUI0MDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDE4NDAyMTBBMjA4NworOjEwMUI1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMkYwMjIyMDAwMDAwMDAyRgorOjEwMUI2MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwMjRDMDAwMDAwMTQyOQorOjEwMUI3MDAwMDAyMDIyMkQwMDAwMDAwMDAwMDgwMTAxMDAyOTIyMjg3OQorOjEwMUI4MDAwMDAwMDAwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDBDMworOjEwMUI5MDAwMDAwMEEzMEMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMUJBMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFNQorOjEwMUJCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAyNTE4QQorOjEwMUJDMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTA5QQorOjEwMUJEMDAwMDA2MDA0MTEwMDAwMDMxNTNGODAwMDAwMDAyMDA0MTE4NAorOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjJDOQorOjEwMUJGMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNFRgorOjEwMUMwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDBGQgorOjEwMUMxMDAwMDAwMDAyN0MwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBDNAorOjEwMUMyMDAwMDAwMDAwMDEwMDIxMUUyNzAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMUMzMDAwMTRFMDAwMDAwMDAwMDI2QTAwMDAwMDEyMDAyMDFFMkRDNworOjEwMUM0MDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgxRTI3MDAwMDAwMDAyOQorOjEwMUM1MDAwMDAwMDAwMDAwMDM0MUMyNzAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMUM2MDAwMTJDMDAwMDAwMDAwMDI1RjAwMDAwMDAwMDAyMDFDMTFGNAorOjEwMUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU1MDAwMDAwMDA1MAorOjEwMUM4MDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjYyMDAwMDAwMDAyOAorOjEwMUM5MDAwMDAyMDE0MDcwMDAwMDAwMDAwMDAwMDEyMDAyMDFFMkQ4QworOjEwMUNBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjExRTI3MDAwMDAwMDBCRQorOjEwMUNCMDAwMDAwMDAwMDAwMDM0MUM0NzAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMUNDMDAwMTJDMDAwMDAwMDAwMDI2NzAwMDAwMDAwMDAyMDFDMTE4QworOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDBFRgorOjEwMUNFMDAwMDAwMDAwMDAwOEMwMDAwMDAwMDAwMjZBMDAwMDAwMDBDMAorOjEwMUNGMDAwMDAyMDE4MDcwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDA0NQorOjEwMUQwMDAwMDAwMDAyQzEwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAyMworOjEwMUQxMDAwMDAwMDAwMDAwMDM0MjAyMzAwMDAwMDAwMDAwMDAwMDA0QworOjEwMUQyMDAwMTJDMDAwMDAwMDAwMDI3MjAwMDAwMDAwMDAzNDIwNDRENQorOjEwMUQzMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzE1RQorOjEwMUQ0MDAwMDAwMDAwMTYwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTg1NAorOjEwMUQ1MDAwMDA0MDQ4MTEwMDAwMDI3NjAwMDAwMDAwMDAzNDIwNDREQQorOjEwMUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDEyQzAwMDAwMDAwMDAyNzUyQQorOjEwMUQ3MDAwMDAwMDAwMTcwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMTkyMgorOjEwMUQ4MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFDOAorOjEwMUQ5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDBDOQorOjEwMURBMDAwMDAwMUExRkQwMDYwNDQxMTAwMDAwMkU5MDAwMDNGRkZCNgorOjEwMURCMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDBGNworOjEwMURDMDAwMDAwMDAyNTYwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDFCNgorOjEwMUREMDAwMDAwMDAwMTA0MDIxMDYyMDAwMDAwMDAwMDAwMEZGRkY2RQorOjEwMURFMDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDEwNDAyMTBFMjA0MgorOjEwMURGMDAwMDAwMDAwMDAwMDAwRkZGRkMwMjgxMjIwMDAwMDAwMDBDQgorOjEwMUUwMDAwMDAwMDAwMTA0MDIxMTYyMDAwMDAwMDAwMDAwMEZGRkYyRAorOjEwMUUxMDAwQzA4ODFBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTE0QQorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAzOAorOjEwMUUzMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMDAzNQorOjEwMUU0MDAwMDA2MDAwMDAwMDAwMDYyRTAwMDAwMDAwQzA2MDAwMDBERQorOjEwMUU1MDAwMDAwMDAyQTMwMDAwMDAwNTAwMjAwQTJEMDAwMDAwMDA4MQorOjEwMUU2MDAwMDAwMDAwMDgwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMkJGMQorOjEwMUU3MDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDFDMDAyMDFFMkQ3NAorOjEwMUU4MDAwMDAwMDAwMDAwMDAwNzAwMDAwMjgxRTI3MDAwMDAwMDA3NQorOjEwMUU5MDAwMDAwMDAwMDAwMDMxMUNFNjAwMDAwMDAwMDAwMDAwMkFFNQorOjEwMUVBMDAwMDAyMDFBMkQwMDAwMDAwMDAwMDAwMDBDMDAyMjFBMjY1RAorOjEwMUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMEU2MDAwMDAwMDAwRAorOjEwMUVDMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwMjkyMDAwMDAwMDA5OAorOjEwMUVEMDAwMDAyMDFDMTEwMDAwMDAwMDAwMDAwMDAwMDAyMDBDMTE3OAorOjEwMUVFMDAwMDAwMDAwMDAwMDAwMDAyQjAwMjAzNjIzMDAwMDAwMDA0RQorOjEwMUVGMDAwMDAwMDAwMTAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDA4OQorOjEwMUYwMDAwMDA2OTFDRTIwMDAwMDEyRjkzODAwMDAwMDAyMDQ0MTFCMgorOjEwMUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA1MgorOjEwMUYyMDAwOTUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBNworOjEwMUYzMDAwMDAyRjAyMkYwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA1NQorOjEwMUY0MDAwMDAwMDAyOUQwMDAwMDAwMTAwMzMzRTJGMDAwMDAwMDA1MQorOjEwMUY1MDAwMDAwMDAwMDBEOTAwNDgwMDAwMDAwMDAwOTIwMDAwMDBDRQorOjEwMUY2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBENAorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAxQzAwNDAzNjI3MDAwMDAwMDBBOAorOjEwMUY4MDAwMDAwMDAwMENDMDIyMEEyMDAwMDAwMDAwMDAwMDAwMjkxMAorOjEwMUY5MDAwMDAyMDM2MjIwMDAwMDAwMDAwMDAwMDI4QzA0MDM2MjA0QgorOjEwMUZBMDAwMDAwMDAwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDA3NgorOjEwMUZCMDAwMDAwMDAwMDkwMDIwNDgxMTAwMDAwMDAwQTEwMDAwMDBGRQorOjEwMUZDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTFDMgorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDA3NQorOjEwMUZFMDAwMDAwMDAwMDAwMDJDMUNFMzAwMDAwMDAwMDAwMDAwMjFBNQorOjEwMUZGMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDIyMDAyMDFFMkRENworOjEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMxQ0U0MDAwMDAwMDBBNAorOjEwMjAxMDAwMDAwMDAwMjIwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjNGRQorOjEwMjAyMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQTM1MQorOjEwMjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDA0RgorOjEwMjA0MDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjRDQworOjEwMjA1MDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMAorOjEwMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQxRDA3MDAwMDAwMDAxRgorOjEwMjA3MDAwMDAwMDAwMjQwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMjEzRQorOjEwMjA4MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDIyMDAyMDM2MjQzQgorOjEwMjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzExQ0EzMDAwMDAwMDA1MAorOjEwMjBBMDAwMDAwMDAwMjMwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMjBCMDAwMDAzMTFDQzQwMDAwMDAwMDAwMDAwMDI0MDA4MDM2MjcwRQorOjEwMjBDMDAwMDAwMDAwMDAwMDAwMDAxQTAwMjAzNjI3MDAwMDAwMDA3OQorOjEwMjBEMDAwMDAwMDAwMUIwMDIwMzYyODAwMDAwMDAwMDAwMDAwMTc1MAorOjEwMjBFMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDAyMDAyMTAyMjczOQorOjEwMjBGMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAyREMyRQorOjEwMjEwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkQ5MDAwMDAwMUE5QQorOjEwMjExMDAwMDAyMDM2MjcwMDAwMDAwMDAwMDAwMDFCMDAyMDM2MjhBOQorOjEwMjEyMDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDAyRAorOjEwMjEzMDAwMDAwMDAwMDIwMDIxMDIyNzAwMDAwMDAwMDAwMDAwMDA1MworOjEwMjE0MDAwMTRFMDAwMDAwMDAwMDJEOTAwMDAwMDAzMDAyMTAyMjc3MworOjEwMjE1MDAwMDAwMDAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAyRENBRAorOjEwMjE2MDAwMDAwMDAwMjMwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMjE3MDAwMDAyRTAwRTEwMDAwMDAwMDAwMDAwMDAwMDJDMDAwMDA4RQorOjEwMjE4MDAwMDAwMDAyREMwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDBFNQorOjEwMjE5MDAwMDAwMDAwMDAwMDMxMjBBMTAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjFBMDAwMDAyRTAwRTgwMDAwMDAwMDAwMDAwMDAwMDZDMDAwMDA1MworOjEwMjFCMDAwMDAwMDAyREMwMDAwMDAyNDAwMjAxRTJEMDAwMDAwMDBCMgorOjEwMjFDMDAwMDAwMDAwMDAwMDJFMDBFMjAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjFEMDAwMDJDMDAwMDAwMDAwMDJEQzAwMDAwMDIyMDAyMDFFMkREMgorOjEwMjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDBEQworOjEwMjFGMDAwMDAwMDAwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMjIwMDAwMDZDMDAwMDAwMDAwMDJEQzAwMDAwMDAwMDA2MDAwMDBDQQorOjEwMjIxMDAwMDAwMDA2NjUwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQjUzQworOjEwMjIyMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMDA4RQorOjEwMjIzMDAwMDA2MDAwMDAwMDAwMDJCNTAwMDAwMDAwMDA2MDAwMDAyNworOjEwMjI0MDAwMDAwMDA2NUMwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUwQworOjEwMjI1MDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMkE3MDAwMDAwMDA3NQorOjEwMjI2MDAwMDA0MDAwMDAwMDAwMDJERTAwMDAwMDFBMDAyMDFFMkRDOQorOjEwMjI3MDAwMDAwMDAwMDAwMDAwMDAxQjAwODAyMjJEMDAwMDAwMDA3NAorOjEwMjI4MDAwMDAwMDAwMTAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDBEQgorOjEwMjI5MDAwMDAyOTQ4ODcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1NgorOjEwMjJBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDBCNworOjEwMjJCMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMTAxNgorOjEwMjJDMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQ5NgorOjEwMjJEMDAwMDAwMDAwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDA4RQorOjEwMjJFMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTAwNQorOjEwMjJGMDAwMDAyMjFFMjMwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODc4MworOjEwMjMwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDA1QworOjEwMjMxMDAwMDAwMDAwMDAwMDI5NDg0NzAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMjMyMDAwMDAzMTFDQTMwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjc0NgorOjEwMjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDBBNQorOjEwMjM0MDAwMDAwMDAwMDAwMDMxMUNBMTAwMDAwMDAwMDAwMDAwMTA4RgorOjEwMjM1MDAwMDAyMjFFMjcwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4NDc1RQorOjEwMjM2MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDBGQQorOjEwMjM3MDAwMDAwMDAwMDAwMDMxMjBDNDAwMDAwMDAwMDAwMEZGRkY0QQorOjEwMjM4MDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDc2MgorOjEwMjM5MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIxMDAwMDAwMDBDQworOjEwMjNBMDAwMDAwMDAwMDAwMDMxMjBDMjAwMDAwMDAwMDAwMEZGRkYxQworOjEwMjNCMDAwMDAyODIyMjgwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDdEMgorOjEwMjNDMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDA5QQorOjEwMjNEMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDEwNAorOjEwMjNFMDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMzA4QTJDMworOjEwMjNGMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDA2QgorOjEwMjQwMDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjQxMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTM1MworOjEwMjQyMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDAzNQorOjEwMjQzMDAwMDAwMDAwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDFBMworOjEwMjQ0MDAwMDAyMjBBMjEwMDAwMDAwMDAwMDAwMDAwMDAzMDA4QTI2NQorOjEwMjQ1MDAwMDAwMDAwMDAwMDAwMDAxMDAwMjIxRTIyMDAwMDAwMDAwQQorOjEwMjQ2MDAwMDAwMDAwMTAwMDIxMjIyMjAwMDAwMDAwMDAwMDAwMDBGNworOjEwMjQ3MDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjM3MAorOjEwMjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAzNworOjEwMjQ5MDAwMDAwMEZGRkYwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDBDQworOjEwMjRBMDAwMDAyOTQ5MDcwMDAwMDAwMDAwMDAwMDAwMDAzODA4QzVBRQorOjEwMjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwODQxMDAwMDAwMDBBMworOjEwMjRDMDAwMDAwMDAwMDEwMDIyMEEyMjAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjREMDAwMDAzMzA4QTIwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjJBRAorOjEwMjRFMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDA3NworOjEwMjRGMDAwMDAwMDAwMDAwMDg5NDkwNzAwMDAwMDAwMDAwMDAwMTdFQworOjEwMjUwMDAwMDAyMDIyMkQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA4OAorOjEwMjUxMDAwMDAwMDAzMThGRkZGRkZFRjAwMjgwNjIxMDAwMDAwMDA2NQorOjEwMjUyMDAwMDAwMDAwMTQwMDIwMjIyRDAwMDAwMDAwMDAwMEY4RTA1MAorOjEwMjUzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyOTQ5MDFCMworOjEwMjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwODk0OTAxMDAwMDAwMDBCOAorOjEwMjU1MDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMjU2MDAwMDAyMDQ4MTEwMDAwMDAwMDA2MEEwMjAwMDA4MDQ4MTEwNworOjEwMjU3MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA3QgorOjEwMjU4MDAwOTcwMDAwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMjU5MDAwQzAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTEwMworOjEwMjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBCMgorOjEwMjVCMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyOAorOjEwMjVDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFEMQorOjEwMjVEMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBEMworOjEwMjVFMDAwMDAwMDAwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMjVGMDAwMDBBMDAwMEEwMDAwMDAwMDk3MDAwMDAwMDAyMDQ0MTEyNQorOjEwMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA1MQorOjEwMjYxMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjYyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEzRQorOjEwMjYzMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA3MgorOjEwMjY0MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3OAorOjEwMjY1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA2RQorOjEwMjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBDMAorOjEwMjY3MDAwOTcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjY4MDAwMDAyMDQ4MTEwMDAwMDAwMDhBMDAwMDAwMDAyMDQ0MTFEMgorOjEwMjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBDMQorOjEwMjZBMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzNworOjEwMjZCMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTFFMAorOjEwMjZDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDBFMgorOjEwMjZEMDAwMDAwMUExRkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMjZFMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBFNQorOjEwMjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDAzMAorOjEwMjcwMDAwMDAwMDIyNTcwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDNEOAorOjEwMjcxMDAwQzA0ODRBMjAwMDAwMDAwMDAwMDAyMjVEMDAyMDQ0MTE1MworOjEwMjcyMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDA2MQorOjEwMjczMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjQyMDAwMDAwMDBGMQorOjEwMjc0MDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTFBRQorOjEwMjc1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMzg0QTIyMDAwMDAwMDBEMgorOjEwMjc2MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjc3MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDFBMUZEMDAyMDQ0MTExRAorOjEwMjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIyMDAwMDAwMDBGNgorOjEwMjc5MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjdBMDAwNDAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAxNDAzMDRBMjBBNgorOjEwMjdCMDAwMDAwMDAwMDAwMDAwMDAwMkMwMzA0QTIwMDAwMDAwMDBCRAorOjEwMjdDMDAwMDAwMDAwMDEwMDUzMEEyMjAwMDAwMzRCMDAwMDAwM0ZGQworOjEwMjdEMDAwQzAyODBBMjAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFGMQorOjEwMjdFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA2RgorOjEwMjdGMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTgzMworOjEwMjgwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTE3QworOjEwMjgxMDAwMDAwMDA2OEEwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBDNAorOjEwMjgyMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwMzU0MDAwMDAwMTQ0OQorOjEwMjgzMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDA3OQorOjEwMjg0MDAwMDAwMDAzNjQwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDA3QworOjEwMjg1MDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUEyQTQzOAorOjEwMjg2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDI0OQorOjEwMjg3MDAwMDAwMDAzNkUwMDAwMjEwMDAwMjA0NDExMDAwMDAwMDA1MQorOjEwMjg4MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMjg5MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBFOAorOjEwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDBFMAorOjEwMjhCMDAwMDAwMDAwMDQwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMjhDMDAwMENDMDAwMDAwMDAwMDM2QTAwMDAyMDEwMDAyMDQ0MTEyQQorOjEwMjhEMDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDBGRgorOjEwMjhFMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQworOjEwMjhGMDAwMDA0MDQ4MDIwMDAwMDM1RjAwMDAwMDI4MDAyRjAyMjI3MQorOjEwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1QkQzOQorOjEwMjkxMDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGQgorOjEwMjkyMDAwMDA0MDQ4MDIwMDAwMDM1RjAwMDAwMDJDMDAyMDM2MjYxMworOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDA0OTAwMjAxODExMDAwMDAwMDAwNQorOjEwMjk0MDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDFDRQorOjEwMjk1MDAwMDAzMzFBMjYwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjZBRAorOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzNzAyOAorOjEwMjk3MDAwMDAwMDAwMkMwMDgwMUEyRDAwMDAwMDAwMDAwMDAwM0YyNQorOjEwMjk4MDAwQzAyODBBMjAwMDAwMDAwMDAwMDAwMDE1MDAyRjAyMjJDRAorOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzODZDMgorOjEwMjlBMDAwMDAwMDAwMDYwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjlCMDAwMENFMDAwMDAwMDAwMDNCMTAwMDAwMDE2MDAyRjAyMjIwRQorOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQjU2MworOjEwMjlEMDAwMDAwMDAwMjAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMjlFMDAwMENFMDAwMDAwMDAwMDM5QzAwMDAwMDBGMDAyRjAyMjJGQQorOjEwMjlGMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzQTg0MAorOjEwMkEwMDAwMDAwMDAwMTAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDA2MworOjEwMkExMDAwMENFMDAwMDAwMDAwMDNBODAwMDAwMDFFMDAyRjAyMjJBRQorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAzOTAyNworOjEwMkEzMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBEQgorOjEwMkE0MDAwMDA0MDQ4MDIwMDAwMDAwMDA4MDAwMDAwMDAyOTBBMjI5RgorOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMzQwMjEwRTIwMDAwMDAwMDBFNAorOjEwMkE2MDAwMDAwMDAwMENDMDIxMTIyMDAwMDAwMDAwMDAwODAwMDAzRgorOjEwMkE3MDAwMDAyODEyMjQwMDAwMDAwMDAwMDAwMDE0QzAyMjE2MjBDQworOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkxNEE0MDAwMDAwMDA2NQorOjEwMkE5MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkFBMDAwMDAyOTQ4QTIwMDAwMDAwMDAwMDBBMUZFMDAyMDQ0MTFGRgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAzMDAwMDAwMDA4QgorOjEwMkFDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwRgorOjEwMkFEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTFFRgorOjEwMkFFMDAwMDAwMDAwMDAwMDAwMDAxNjAwMjA0ODExMDAwMDAwMDA1NworOjEwMkFGMDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMTU1RQorOjEwMkIwMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDA3RQorOjEwMkIxMDAwMDAwMDAzOTIwMDAwMjEwRTAwMjA0NDExMDAwMDAwMDA3QworOjEwMkIyMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMkIzMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTFCMgorOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDBGQgorOjEwMkI1MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE3RQorOjEwMkI2MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMUY4MDAyMDQ0MTE1RQorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAxNzAwMjA0ODExMDAwMDAwMDBDNQorOjEwMkI4MDAwMDAwNDIxRjkwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMDNERgorOjEwMkI5MDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDBFRQorOjEwMkJBMDAwMDAwMDAzOUUwMDAwMjEwODAwMjA0NDExMDAwMDAwMDBFNgorOjEwMkJCMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMkJDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTEyMgorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODAyMDAwMDAwMDA2QgorOjEwMkJFMDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAyQQorOjEwMkJGMDAwMDAyMDQ4MDIwMDAwMDAwMDgwMDAwMDAwMDAyMDQ0MTE3NgorOjEwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA0QgorOjEwMkMxMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTBBRQorOjEwMkMyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTBGQgorOjEwMkMzMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAzQUUwRgorOjEwMkM0MDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDIwMTAxNAorOjEwMkM1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTEwNgorOjEwMkM2MDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDBBOAorOjEwMkM3MDAwMDAwMDAwMDYwMDQwNDgxMTAwMDAwMDAwMDAwMDIwMTA4NQorOjEwMkM4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTFENgorOjEwMkM5MDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDA3OAorOjEwMkNBMDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzZFMDAwMDAwMDBFNAorOjEwMkNCMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA4MDBFQworOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAxOAorOjEwMkNEMDAwMDAwMDAwMUQwMDIxMDIyMzAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMkNFMDAwMTRFMDAwMDAwMDAwMDNDRTgxMDAwMDAwMDAyMDQ0MTEyOQorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDA1QQorOjEwMkQwMDAwMDAwMDIxRjgwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTgxRAorOjEwMkQxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTE2NworOjEwMkQyMDAwMDAwMDA2OEEwMDAwMDAxMTAwMjEwMjMwMDAwMDAwMDBBRgorOjEwMkQzMDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwM0MwMDAwMDIxMDBCQgorOjEwMkQ0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDJBNAorOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwOAorOjEwMkQ2MDAwQkFCRUNBRkUwMDIwNDgxMTAwMDAwMDAwQ0FGRUJBQkU2QQorOjEwMkQ3MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMDEwMDAyMDQ0MTEzNQorOjEwMkQ4MDAwMDAwMDAwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDA0QQorOjEwMkQ5MDAwMDAwMEEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDQ3NAorOjEwMkRBMDAwMDA0MDQ4MTEwMDAwMDAwMDAwMDAyMTcwMDAyMDQ0MTE4NAorOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDBBOQorOjEwMkRDMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwODEwMDAwMDAxNworOjEwMkREMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDBBMDAyMDQ4MTFGQgorOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDEwMDAwMDAwMDBCMworOjEwMkRGMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0QzOEMwMDAwMDA5RAorOjEwMkUwMDAwMDAyMDQ0MTEwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTE3NAorOjEwMkUxMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBCQworOjEwMkUyMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDNGRkZFQQorOjEwMkUzMDAwNDAyODBBMjAwMDAwMDAwMDgwMDAwMDAwNDAyODBFMjBFQQorOjEwMkU0MDAwMDAwMDAwMDA0MDAwMDAwMEMwMjgxMjIwMDAwMDAwMDAyOAorOjEwMkU1MDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjhBMDAwMDAwMDAwRAorOjEwMkU2MDAwMDAyMDE0MTAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjNDQQorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAzRTFBMgorOjEwMkU4MDAwMDAwMDAwMDBDMDQwMTgwMDAwMDAwM0U0MDAwMDNGRkYwNQorOjEwMkU5MDAwQzAyODFBMjAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjYzNworOjEwMkVBMDAwMDAwMDA2OEEwMDAwMDAwMDAwMjAxODEwMDAwMDAwMDA0QQorOjEwMkVCMDAwMDAwMDAwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMkVDMDAwMENDMDAwMDAwMDAwMDNFNzAwMDAwMDAwQzA0MDFDMDAzMAorOjEwMkVEMDAwMDAwMDAzRUEwMDAwM0ZGRkMwMjgxRTIwMDAwMDAwMDBBMQorOjEwMkVFMDAwMDAwNDAwMDAwMDY5NDYyNzAwMDAwNjhBMDAwMDAwMDA3OAorOjEwMkVGMDAwMDAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ0MDIyMAorOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgyMEM1MDAwMDAwMDBCNAorOjEwMkYxMDAwMDAwMDAwMDAwMDQ5NDhFODAwMDAwMDAwQTU4MDAwMDAxMworOjEwMkYyMDAwMDAyMDA4MTEwMDAwMDAwMDAwMDAyMDAwMDAyMDBDMTEwQgorOjEwMkYzMDAwMDAwMDAwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDA0MTI0MworOjEwMkY0MDAwMDAwMDAwMDAwMDIwNDQwMjAwMDAwMDAwMDAwMDAwMDAxQgorOjEwMkY1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwNDAyMDQ4MDBBMQorOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAxRkMwMjEwMjIwMDAwMDAwMDAzRgorOjEwMkY3MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwM0Y3MDAwMDIwMTA1MworOjEwMkY4MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTFEMworOjEwMkY5MDAwMDAwMDAwMDAwMDAwRkZGRkMwNDgxMjIwMDAwMDAzRkZGNworOjEwMkZBMDAwQTc4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEEwMDAyMQorOjEwMkZCMDAwMDAyMDBDMTEwMDAwMDAwMDgzMDAwMDAwMDA2MDQ0MTE5QworOjEwMkZDMDAwMDAwMDA0MTIwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDA4NQorOjEwMkZEMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwMkZFMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjBBMQorOjEwMkZGMDAwMDAwMDAwMDA4MzAwMDAwMDAwMjA0NDExMDAwMDAwMDBEOQorOjEwMzAwMDAwMDAwMDAwMDAwMDMwNDg4MzAwMDAwMDAwODQwMDAwMDA0MQorOjEwMzAxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAxMworOjEwMzAyMDAwMDAwMDAwMDAwMDAwMDAwMDFEMDAwMDAwMDAwMDAwMDA4MworOjEwMzAzMDAwODMwMDAwMDAwMDYwNDQxMTAwMDAwNDEyMDAwMDAwMDA0MgorOjEwMzA0MDAwQzA0MDA0MDAwMDAwMDAwMUE5ODAwMDAwMDAyMDA4MTExOQorOjEwMzA1MDAwMDAwMDAwMDAwMDAwQzAwMDAwNDAwQzExMDAwMDAzRkE1NgorOjEwMzA2MDAwQUI4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEY4RTAyNAorOjEwMzA3MDAwMDA0MDBDMTEwMDAwMDNGQUFEODAwMDAwMDAyMDA4MTE5MAorOjEwMzA4MDAwMDAwMDAwMDAwMDAwRjg4MDAwNDAwQzExMDAwMDAzRkE2RQorOjEwMzA5MDAwQjM4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEYzRkNENQorOjEwMzBBMDAwMDA0MDBDMTEwMDAwMDNGQUFGODAwMDAwMDAyMDA4MTE1RQorOjEwMzBCMDAwMDAwMDAwMDAwMDAwRTAwMDAwNDAwQzExMDAwMDAzRkFENgorOjEwMzBDMDAwQjE4MDAwMDAwMDIwMDgxMTAwMDAwMDAwMDAwMEYwMDBBNgorOjEwMzBEMDAwMDA0MDBDMTEwMDAwMDNGQTgzMDAwMDAwMDAyMDQ0MTE5RQorOjEwMzBFMDAwMDAwMDAwMDAwMDAwMjE0ODAwMjA0ODExMDAwMDAwMDBGRQorOjEwMzBGMDAwODQwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBENworOjEwMzEwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMUQwMDAwMDA3QQorOjEwMzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAyRgorOjEwMzEyMDAwMDExODIwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMzEzMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA4QQorOjEwMzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBENQorOjEwMzE1MDAwMDIxOEEwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMzE2MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA1QQorOjEwMzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBBNQorOjEwMzE4MDAwMDMxOEMwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMzE5MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAyQQorOjEwMzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA3NQorOjEwMzFCMDAwMDQxOEY4RTBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMzFDMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBGQQorOjEwMzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA0NQorOjEwMzFFMDAwMDUxOEY4ODBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMzFGMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDBDQQorOjEwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDAxNAorOjEwMzIxMDAwMDYxOEUwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMzIyMDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA5OQorOjEwMzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBFNAorOjEwMzI0MDAwMDcxOEYwMDBDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwMzI1MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDA2OQorOjEwMzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDBCNAorOjEwMzI3MDAwMDgxOEYzRkNDMDMwNDYyMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMzI4MDAwRDkwMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDA0MDAzOQorOjEwMzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDBBMDAwMDAwMDA4NAorOjEwMzJBMDAwMDAwMDAwMzAwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMzJCMDAwQzAyOTBDNDAwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjMzMAorOjEwMzJDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAxQQorOjEwMzJEMDAwMDAwMDAwMDAwMEEwMDAwQTAwMDAwMDAwODYwMDAwMDBCRQorOjEwMzJFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDFFMAorOjEwMzJGMDAwMDAwMDAwMDA4NTAwMDAwMEMwMjA0NDExMDAwMDAwMDAxNAorOjEwMzMwMDAwMDAwMDAwMDAwMDQwNDgwMTAwMDAwMDAwMDAwMDIxN0M5NworOjEwMzMxMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAxMAorOjEwMzMyMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA3NQorOjEwMzMzMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwODEwMDAwMDBFNAorOjEwMzM0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE4RQorOjEwMzM1MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDA4NQorOjEwMzM2MDAwMDAwMDAwMDAxNzAwMDAwMDAwMDAwMDAwMDAwNDIxN0ZBMgorOjEwMzM3MDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDFGMDAyMTAyMzA5NgorOjEwMzM4MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwMDA2OQorOjEwMzM5MDAwMDAwMDAwMDAwMDQwNEMwMjAwMDAwNDQ4MDAwMDAwMDA1MworOjEwMzNBMDAwQzAyMDBDMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDEwMDA0MQorOjEwMzNCMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxNDAwMDAwMDAwMDAxOQorOjEwMzNDMDAwMDAwMDAwMDBDMDIwMTgwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMzNEMDAwQzAyMDFDMDAwMDAwMDAwMDAwMDA3RjAwMDAyODBBMjExRgorOjEwMzNFMDAwMDAwMDAwMDAwMDAwNDUwMDAwMkYwMjIyMDAwMDAwMDA0NQorOjEwMzNGMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNDU2MDAwMDAwMDA4NworOjEwMzQwMDAwQzAyMDIwMDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDBBNQorOjEwMzQxMDAwMDAwMDAwMDAwMDAwMDAxMDAwMjgwQTIzMDAwMDAwMDA0NworOjEwMzQyMDAwMDAwMDAwMTAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMzQzMDAwMENFMDAwMDAwMDAwMDQ1RTgxMDAwMDAwMDAyMDQ0MTE0OAorOjEwMzQ0MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMgorOjEwMzQ1MDAwMDAwNDAwMDAwMDY5NDYyNDAwMDAwNjhBMDAwMDAwMDAwNQorOjEwMzQ2MDAwMDA0MDAwMDAwMDAwMDQ2MzgxMDAwMDAwMDAyMDQ0MTFCRgorOjEwMzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDBEMworOjEwMzQ4MDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzOQorOjEwMzQ5MDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDUxMworOjEwMzRBMDAwMDAwMDA2OEYwMDAwMDAwMDAwMjgyNEYwMDAwMDAwMDA0QgorOjEwMzRCMDAwMDAwMDAwMDcwMDI4MEEyMzAwMDAwMDAwMDAwMDAwMDFBRgorOjEwMzRDMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBCRgorOjEwMzREMDAwMDAwMDA0NkEwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDA4NgorOjEwMzRFMDAwMDAwMDAwMDAwNEUwMDAwMDAwMDAwNDgzMDAwMDAwMDA3MQorOjEwMzRGMDAwMDA0MDAwMDAwMDAwMDQ5MDAwMDAwMDAyMDAyRjAyMjJBMworOjEwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NkY1RQorOjEwMzUxMDAwMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDBCMworOjEwMzUyMDAwMDJFMDAwMDAwMDAwMDQ4MzAwMDAwMDAwMDA0MDAwMDBGMgorOjEwMzUzMDAwMDAwMDA0OTAwMDAwMDAwMzAwMkYwMjIyMDAwMDAwMDBBMQorOjEwMzU0MDAwMDAwMDAwMDAwQUUwMDAwMDAwMDAwNDc0MDAwMDAwMDAxOQorOjEwMzU1MDAwMDAyRjAwQzkwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA4NworOjEwMzU2MDAwMDAwMDA0ODMwMDAwMDAwMDAwNDAwMDAwMDAwMDA0OTAwMAorOjEwMzU3MDAwMDAwMDAwMDQwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMzU4MDAwMEFFMDAwMDAwMDAwMDQ3OTAwMDAwMDAwMDAyRjAwQzlEQworOjEwMzU5MDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0ODNCQQorOjEwMzVBMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNDkwMDAwMDAwMDU0MgorOjEwMzVCMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBDRQorOjEwMzVDMDAwMDAwMDA0N0UwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDA4MQorOjEwMzVEMDAwMDAwMDAwMDAwNkUwMDAwMDAwMDAwNDgzMDAwMDAwMDA3RQorOjEwMzVFMDAwMDA0MDAwMDAwMDAwMDQ5MDAwMDAwMDA2MDAyRjAyMjJBRQorOjEwMzVGMDAwMDAwMDAwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0ODM1QQorOjEwMzYwMDAwMDAwMDAwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMzYxMDAwMDhFMDAwMDAwMDAwMDQ4MzAwMDAwMDAwMDA0MDAwMDBGQgorOjEwMzYyMDAwMDAwMDA0OTAwMDAwN0YwMDAwMjgwQTIxMDAwMDAwMDAzNAorOjEwMzYzMDAwMDAwMDQ1MDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMzY0MDAwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMTBBMjMzQQorOjEwMzY1MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0OEQwNQorOjEwMzY2MDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA1QgorOjEwMzY3MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBGQQorOjEwMzY4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAxMgorOjEwMzY5MDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMzZBMDAwQzAyMDQ0MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAxNgorOjEwMzZCMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDBDMgorOjEwMzZDMDAwMDAwMDdGMDAwMDI4MEEyMTAwMDAwMDAwMDAwMDQ1MDBFMworOjEwMzZEMDAwMDAyRjAyMjIwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDBBRAorOjEwMzZFMDAwMDAwMDA0OTYwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDA2MAorOjEwMzZGMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwMzcwMDAwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDRDMDgyNQorOjEwMzcxMDAwMDAwMDA0NTYwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDA2NworOjEwMzcyMDAwMDAwMDAwMTA0MDIxMEUyMDAwMDAwMDAwMDAwMDAwMTFFOQorOjEwMzczMDAwNDAyMTEyMjAwMDAwMDAwMDAwMDAwMDEyNDAyMTE2MjA0RAorOjEwMzc0MDAwMDAwMDAwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDA3QQorOjEwMzc1MDAwMDAwMDAwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMzc2MDAwMDAyMTAyMjUwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAxRAorOjEwMzc3MDAwMDAwMDA0QTAwMDA0MDAwMEMwNDk0QTIwMDAwMDA0QTE4OQorOjEwMzc4MDAwRkZGQkZGRkZDMDI4NEEyMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMzc5MDAwMDAyMTAyMjMwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDBFRgorOjEwMzdBMDAwMDAwMDA0QUQwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA0MAorOjEwMzdCMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMzdDMDAwMDAyMTAyMjQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBERQorOjEwMzdEMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBGMworOjEwMzdFMDAwMDAwMDAwMEMwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA1NAorOjEwMzdGMDAwMDAyMDAwMTAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBDNQorOjEwMzgwMDAwMDAwMDA0QTlBMDAwMDAwMDAwMjA0NDExMDAwMDAwMDBGNgorOjEwMzgxMDAwQ0FGRUJBQkUwMDQwNDgxMTAwMDAwMDAwODEwMDAwMDA0RQorOjEwMzgyMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA0MDAyMDQ4MTFBNgorOjEwMzgzMDAwMDAwMDAwMDAwMDAwMjE2QjAwMjA0NDExMDAwMDAwMDA4NworOjEwMzg0MDAwMDAwMDAwMDBDMDIwNDgxMDAwMDAwMDAwODEwMDAwMDBCRgorOjEwMzg1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDA1MDAyMDQ4MTE3NQorOjEwMzg2MDAwMDAwMDAwMDAwMDAwMjE2QzAwMjA0NDExMDAwMDAwMDA1NgorOjEwMzg3MDAwMDAwMDAwMDBDMDIwNDgxMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMzg4MDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDBGNworOjEwMzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0QTczRAorOjEwMzhBMDAwMDAwMDAwMDBDMDIxMEEyMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMzhCMDAwMTRDMDAwMDAwMDAwMDRDMDgxMDAwMDAwMDAyMDQ0MTE3QQorOjEwMzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA3RgorOjEwMzhEMDAwMDAwMDIxNkQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMzhFMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzA2MDQ4MDA0OAorOjEwMzhGMDAwMDAwMDA2OEYwMDAwMDAwMDAwNDAwMDAwMDAwMDA0QzQyQgorOjEwMzkwMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFDMAorOjEwMzkxMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQwMDAwQzAyOTQ2MjBEQgorOjEwMzkyMDAwMDAwMDAwMDAwMDAwMDAwMEMwNjAwMDAwMDAwMDA2OEFFNworOjEwMzkzMDAwMDAwMDAwMDEwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMzk0MDAwMTRDMDAwMDAwMDAwMDRDQjAwMDAyMTY5MDAyMDQ0MTFENQorOjEwMzk1MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAzRgorOjEwMzk2MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMzk3MDAwMDAyMDQ4MTAwMDAwMDAwMENBRkVCQUJFMDA0MDQ4MTFGNgorOjEwMzk4MDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0NDAwMDAwMDAwMDAxMworOjEwMzk5MDAwMDAwMDAwMDBDMDQwNDgxMDAwMDAwMDAwODEwMDAwMDA0RQorOjEwMzlBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEyOAorOjEwMzlCMDAwMDAwMDAwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDA3OQorOjEwMzlDMDAwMDAwMDAwMEUwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjk1MgorOjEwMzlEMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDAwMDAyMTAyMzA0RgorOjEwMzlFMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0Q0QzMgorOjEwMzlGMDAwMDAwMDIxODAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBCMQorOjEwM0EwMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDBBRQorOjEwM0ExMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDA3RQorOjEwM0EyMDAwMDAwMDAwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwM0EzMDAwQzA0MDQ4MDAwMDAwMDAwMDAwMDAwMDAzMDAzMzNFMkY5QgorOjEwM0E0MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjEwMjIxMDAwMDAwMDAzMQorOjEwM0E1MDAwMDAwMDAwMDAxNEUwMDAwMDAwMDAwNEZEMDAwMDAwMkM0NQorOjEwM0E2MDAwMDAyMDBBMkQwMDAwMDAwMDAwMDQwMDAwMThFMDBDMTFFNgorOjEwM0E3MDAwMDAwMDA0RUMwMDAwMDAwMTAwMzMzRTJGMDAwMDAwMDBCNQorOjEwM0E4MDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAzNworOjEwM0E5MDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDM1MQorOjEwM0FBMDAwMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMDAwMDAwMDBCMgorOjEwM0FCMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwM0FDMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAyMTY5MDAyMDQ0MTFDRgorOjEwM0FEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAyMDAwMDAwMDA3QworOjEwM0FFMDAwMDAwMDAwMDAwMDIwNDgwMzAwMDAwMDAwMDAwMDAwMDg2MworOjEwM0FGMDAwMDAzMDBBMjIwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA0MgorOjEwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4QzA0ODAwMDAwMDA0RTBGMQorOjEwM0IxMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBBNgorOjEwM0IyMDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDNDMAorOjEwM0IzMDAwMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMDAwMDAwMDAyMQorOjEwM0I0MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwM0I1MDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDJEMDAyMDEyMkRCMQorOjEwM0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkwQzgzMDAwMDAwMDA5RAorOjEwM0I3MDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA0NgorOjEwM0I4MDAwMDAyMDQ4MDIwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDM2MAorOjEwM0I5MDAwMDAwMDAwMDAwMDAwMDAwODAwMzAwQTIyMDAwMDAwMDBDMQorOjEwM0JBMDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwM0JCMDAwQzAyMDQ4MDAwMDAwMDAwMDAwMDAwMDExMDAyMTAyMjQ4NQorOjEwM0JDMDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwMDAyMQorOjEwM0JEMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwNEE3MDAwMDAwMkNDRQorOjEwM0JFMDAwQzAyMDM2MjAwMDAwMDAwMDAwMDAwMDJEQzA0MDM2MjAxQworOjEwM0JGMDAwMDAwMDAwMDAwMDAwMDAwRjAwMjEwMjIxMDAwMDAwMDA3MgorOjEwM0MwMDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNTAyMDAwMDAwMDBEOQorOjEwM0MxMDAwMDA2MDAwMDAwMDAwMDAwQjAwMDAwMDAwRDkwMDAwMDA2MAorOjEwM0MyMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDE4RgorOjEwM0MzMDAwQjUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDIwMDAzQQorOjEwM0M0MDAwMDAyMDQ4MTEwMDAwMDAwMEI2MDAwMDAwMDAyMDQ0MTFEMAorOjEwM0M1MDAwMDAwMDAwMDAwMDAwQTAwMDAwMjA0ODExMDAwMDAwMDA0QgorOjEwM0M2MDAwQjcwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEMwMDA2OAorOjEwM0M3MDAwMDAyMDQ4MTEwMDAwMDAwMEI4MDAwMDAwMDAyMDQ0MTE5RQorOjEwM0M4MDAwMDAwMDAwMDAwMDAwRjhFMDAwMjA0ODExMDAwMDAwMDBFMworOjEwM0M5MDAwQjkwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEY4ODA3RQorOjEwM0NBMDAwMDAyMDQ4MTEwMDAwMDAwMEJBMDAwMDAwMDAyMDQ0MTE2QworOjEwM0NCMDAwMDAwMDAwMDAwMDAwRTAwMDAwMjA0ODExMDAwMDAwMDBBQgorOjEwM0NDMDAwQkIwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMEYwMDBENAorOjEwM0NEMDAwMDAyMDQ4MTEwMDAwMDAwMEJDMDAwMDAwMDAyMDQ0MTEzQQorOjEwM0NFMDAwMDAwMDAwMDAwMDAwRjNGQzAwMjA0ODExMDAwMDAwMDA2QworOjEwM0NGMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDJDQworOjEwM0QwMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMEZGMDAyODBFMzBENQorOjEwM0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDA0RgorOjEwM0QyMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTE2MDAwMDAwMDBBQworOjEwM0QzMDAwQzAyMDA4MDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBDNworOjEwM0Q0MDAwMDAwMDA1MkIwMDAwMDAwMDAwMjAwQzExMDAwMDAwMDAwNgorOjEwM0Q1MDAwMDAwMDAwMUMwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMkJBMworOjEwM0Q2MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI5MDAyMDM2MjMzOAorOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAyODAwMjAzNjIzMDAwMDAwMDBBMgorOjEwM0Q4MDAwMDAwMDAwMTcwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjU3RQorOjEwM0Q5MDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI2MDAyMDM2MjMwQgorOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAxNTAwMjAzNjIzMDAwMDAwMDA4NQorOjEwM0RCMDAwMDAwMDAwMTYwMDIwMzYyMzAwMDAwMDAwRkZGRkUwMDA5NgorOjEwM0RDMDAwMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDIxMDAyMDM2MjMxQworOjEwM0REMDAwMDAwMDAwMDAwMDAwMDAyMjAwMjAzNjIzMDAwMDAwMDA0OAorOjEwM0RFMDAwMDAwMDFGRkYwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMjM1NQorOjEwM0RGMDAwMDAyMDM2MjMwMDAwMDAwMDAwMDAwMDI0MDAyMDM2MjNBRAorOjEwM0UwMDAwMDAwMDAwMDBGMUZGRkZGRjAwMjgzQTJFMDAwMDAwMDAzNAorOjEwM0UxMDAwMDAwMDAwMUFDMDIyMEUyMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwM0UyMDAwMDAyOTM4NkUwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTFDRAorOjEwM0UzMDAwMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDAwMworOjEwM0U0MDAwMDAwMDAwMkE0MDIwMzYyMDAwMDAwMDAwODcwMDAwMDAwQgorOjEwM0U1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDBDNQorOjEwM0U2MDAwMDAwMDAwMDAwMDAwQTFGNDAwMjA0NDExMDAwMDAwMDA0OAorOjEwM0U3MDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwM0U4MDAwMDAyMDBDMTEwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjM0QworOjEwM0U5MDAwMDAwMDAwMDA5RDAwMDAwMDAwMjA0NDExMDAwMDAwMDAxMAorOjEwM0VBMDAwMDAwMDAwMUY0MDIxNEEyMDAwMDAwMDAwOTYwMDAwMDA5MgorOjEwM0VCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDA2NQorOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAwNgorOjEwM0VEMDAwMDAwMDAwMDBDMDIwMTAwMDAwMDAwMDAwMDAwMDAwMUZEMworOjEwM0VFMDAwMDAyMTE2MjQwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDBBMworOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAxRDAwMjAzNjIzMDAwMDAwMDAyQworOjEwM0YwMDAwMDAwMDAwMDMwMDI4MUUyMzAwMDAwMDAwMDAwMDAwMDgzRAorOjEwM0YxMDAwMDAyMjIyMjMwMDAwMDAwMEZGRkZGMDAwMDAyODIyMjhEQQorOjEwM0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkyMEU4MDAwMDAwMDA2MAorOjEwM0YzMDAwMDAwMDAwMUYwMDIwMzYyODAwMDAwMDAwMDAwMDAwMThDQworOjEwM0Y0MDAwMDAyMTFFMjMwMDAwMDAwMDAwMDAwMDIwMDAyMDM2Mjc3MgorOjEwM0Y1MDAwMDAwMDAwMDAwMDAwMDAwMjAwMjIxNjI0MDAwMDAwMDAwMworOjEwM0Y2MDAwMDAwMDAwMDAwMDMwMTRBODAwMDAwMDAwMDAwMDAwMUU0NworOjEwM0Y3MDAwMDAyMDM2MjUwMDAwMDAwMDAwMDAwMDAzMDAyMTFBMjQ2NAorOjEwM0Y4MDAwMDAwMDAwMDAxMDAwMDAwMDAwMjgxQTI2MDAwMDAwMDBCOQorOjEwM0Y5MDAwRUZGRkZGRkYwMDI4M0EyRTAwMDAwMDAwMDAwMDAwMDBBNQorOjEwM0ZBMDAwMDA0OTM4Q0UwMDAwMDY3ODAwMDAwMDAxNDAyODBBMjBCMQorOjEwM0ZCMDAwMDAwMDAwMDAwMDAwMDAwNjQwMjgwRTIwMDAwMDAwMDA2NQorOjEwM0ZDMDAwMDAwMDAzMDBDMDI4MTIyMDAwMDAwMDAwMDAwMDAwMDhDQworOjEwM0ZEMDAwMDAyMTEyMjQwMDAwMDAwMDAwMDAwMDAwQzAyMDE2MjA3NAorOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMEMwMjAxQTIwMDAwMDAwMDBCNworOjEwM0ZGMDAwMDAwMDAwMDAwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDA3QworOjEwNDAwMDAwMTRDMDAwMDAwMDAwMDU2MzgxMDAwMDAwMDAyMDQ0MTE3RQorOjEwNDAxMDAwMDAwMDAwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAyNgorOjEwNDAyMDAwMDAwMDIyNTgwMDMwMEEyNDAwMDAwMDAwMDAwNDAwMDBCNAorOjEwNDAzMDAwMDA2OTQ2MjIwMDAwMDY4QTAwMDAyMTY5MDAyMDQ0MTEyMAorOjEwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA1MDAwMDAwMDAwMworOjEwNDA1MDAwMDAwMjAwMDAwMDI5NEEyNjAwMDAwMDAwMDAwMDAwMDBDNQorOjEwNDA2MDAwMDAyMDQ4MTAwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTExRgorOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDBFQQorOjEwNDA4MDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTZCMDAwMDAwMDBGNAorOjEwNDA5MDAwQzAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDAxNAorOjEwNDBBMDAwMDAwMDA1NzkwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDAzQworOjEwNDBCMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTZCODEwMDAwMDA0MworOjEwNDBDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMQorOjEwNDBEMDAwMDAwMDAwMDAwMDAwMjI1ODAwMzAwQTI0MDAwMDAwMDAwOAorOjEwNDBFMDAwMDAwNDAwMDAwMDY5NDYyMjAwMDAwNjhBMDAwMDAwMDA2QgorOjEwNDBGMDAwQzAyMDFDMTAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDBCNAorOjEwNDEwMDAwMDAwMDA1NzkwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDBERAorOjEwNDExMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTZGMDAwMDAwMDA1RgorOjEwNDEyMDAwQzAyMDFDMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDA5MworOjEwNDEzMDAwMDAwMDA1NzkwMDAwMDAwNDAwMkYwMjIzMDAwMDAwMDBBOQorOjEwNDE0MDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNTc3ODEwMDAwMDBBNgorOjEwNDE1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE3MQorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMjE2RDAwMjA0NDExMDAwMDAwMDA0QworOjEwNDE3MDAwMDAwMDAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwNDE4MDAwQzA2MDQ4MDAwMDAwMDY4RjAwMDAwMDAwMDA0MDFDMTBDNgorOjEwNDE5MDAwMDAwMDA1NzkwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDBDMQorOjEwNDFBMDAwMDAwMDAwMDBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNDFCMDAwMEVFMDAwMDAwMDAwMDU3QjAwMDAwMDAwMDA2MDAwMDAzMQorOjEwNDFDMDAwMDAwMDA1QzYwMDAwMDAwMDAwMkYwMjI0MDAwMDAwMDBDRgorOjEwNDFEMDAwMDAwMDAwMDAwQ0MwMDAwMDAwMDAwNThDMDAwMEEyQjcyOQorOjEwNDFFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDdFQgorOjEwNDFGMDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDBDOQorOjEwNDIwMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNEEyQjZEOAorOjEwNDIxMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDFBMDAyMTIyMzBDQworOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwNjAwMjIyNjMwMDAwMDAwMDAxMAorOjEwNDIzMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhBMDAwMEEyQzRBQgorOjEwNDI0MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAzMDQ4RTk5OAorOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDA1OEFFRgorOjEwNDI2MDAwMDAwMEEyRDEwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA2NgorOjEwNDI3MDAwMDA0MDQ4MDgwMDAwMDAwMDAwMDBBMkQxMDAyMDQ0MTFDNgorOjEwNDI4MDAwMDAwMDAwMDAwMDAwMDAwMTAwNTA0QTI4MDAwMDAwMDA2QgorOjEwNDI5MDAwMDAwMDAwMDEwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwNDJBMDAwMENDMDAwMDAwMDAwMDU5RDAwMDBBMkJCMDAyMDQ0MTFDRQorOjEwNDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA4RgorOjEwNDJDMDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFGNworOjEwNDJEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkJBMDA2MDQ0MTE1MAorOjEwNDJFMDAwMDAwMDA2OEEwMDAwMDAxQTAwMjEyMjMwMDAwMDAwMDBCMQorOjEwNDJGMDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwMDAwNDIwMDQxOAorOjEwNDMwMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDBBMkM1MDAyMDQ0MTE4QworOjEwNDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDAzQworOjEwNDMyMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNTlCMDAwMEEyRDI5OQorOjEwNDMzMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDg3OAorOjEwNDM0MDAwMDAwMDAwMDAwMDAwQTJEMjAwMjA0NDExMDAwMDAwMDA4NAorOjEwNDM1MDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwMDAwMDAwMDI5OAorOjEwNDM2MDAwMDAyRjAyMjQwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAyQworOjEwNDM3MDAwMDAwMDA1QUUwMDAwQTJCRjAwMjA0NDExMDAwMDAwMDBCNAorOjEwNDM4MDAwMDAwMDAwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDAzRAorOjEwNDM5MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEyRQorOjEwNDNBMDAwMDAwMDAwMDAwMDA0QTJCRTAwNjA0NDExMDAwMDA2OEE2NAorOjEwNDNCMDAwMDAwMDAwMUEwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDY2QQorOjEwNDNDMDAwMDAyMjI2MzAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTE5OAorOjEwNDNEMDAwMDAwMDA2OEEwMDAwQTJDNjAwMjA0NDExMDAwMDAwMDA3MAorOjEwNDNFMDAwMDAwMDAwMDAwMDMwNDhFOTAwMDAwMDAwMDAwMDAwMDA2QworOjEwNDNGMDAwMDBFMDAwMDAwMDAwMDVBQzAwMDBBMkQzMDAyMDQ0MTE0MgorOjEwNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0ODA4MDAwMDAwMDAxQworOjEwNDQxMDAwMDAwMEEyRDMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFCMQorOjEwNDQyMDAwMDA1MDRBMjgwMDAwMDAwMDAwMDBBMkMzMDAyMDQ0MTFGMAorOjEwNDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDAwRAorOjEwNDQ0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE3NQorOjEwNDQ1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDRBMkMyMDA2MDQ0MTFDNgorOjEwNDQ2MDAwMDAwMDA2OEEwMDAwMDAxQTAwMjEyMjMwMDAwMDAwMDAyRgorOjEwNDQ3MDAwMDAwMDAwMDYwMDIyMjYzMDAwMDAwMDAwMDAwNDIwMDQ5NgorOjEwNDQ4MDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDBBMkM3MDAyMDQ0MTEwOQorOjEwNDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDBCQgorOjEwNDRBMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDAwNUJCMDAwMEEyRDRGNgorOjEwNDRCMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDhGNworOjEwNDRDMDAwMDAwMDAwMDAwMDAwQTJENDAwMjA0NDExMDAwMDAwMDAwMQorOjEwNDREMDAwMDAwMDAwMDEwMDUwNEEyODAwMDAwMDAwODUwMDAwMDA5NAorOjEwNDRFMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDFFRQorOjEwNDRGMDAwMDAwMDAwMDAwMDAwMzA0QTAwMjA0NDExMDAwMDAwMDBDRAorOjEwNDUwMDAwMDEwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAzMQorOjEwNDUxMDAwMDA0MDAwMDAwMDAwMDVDMUE0MDAwMDAwQzAyMDQ0MTFCQworOjEwNDUyMDAwMDAwMDAwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDA0MworOjEwNDUzMDAwMDAwMDAwMDBDMDYwMDAwMDAwMDAwNUM2MDAwMDAwMDA5MAorOjEwNDU0MDAwQzA0MDA0MDAwMDAwMDAwMTAwMDAwMDJDMDAyMDM2MjFDMworOjEwNDU1MDAwMDAwMDAwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDA2NQorOjEwNDU2MDAwMDAwMDAwMDYwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDBDQworOjEwNDU3MDAwMDAyRjAyMzAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwRQorOjEwNDU4MDAwMDAwMDA1Q0QwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAyNAorOjEwNDU5MDAwMDAwMDAwMzAwMDQwMzYyMTAwMDAwNUUwMDAwMDAwMzAzRgorOjEwNDVBMDAwMDAyMDA2MkQwMDAwMDAwMDAwMDA3RTAwMDAyODA2MjFFQgorOjEwNDVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDBBOQorOjEwNDVDMDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNUUwODEwMDAwMDA5OQorOjEwNDVEMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTFFQworOjEwNDVFMDAwMDAwMDAwMDAwMDA0QTA5MjAwNjA0NDExMDAwMDA2OEE1MAorOjEwNDVGMDAwMDAwMDAwMzEwMDIwMzYzMDAwMDAwMDAwMDAwNEEwOTNDRAorOjEwNDYwMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDMyMDAyMDM2MzBBRAorOjEwNDYxMDAwMDAwMDAwMDAwMDA0QTJCNjAwNjA0NDExMDAwMDA2OEFGOQorOjEwNDYyMDAwMDAwMDAwMzMwMDIwMzYzMDAwMDAwMDAwMDAwNEEyQkE3MQorOjEwNDYzMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDM0MDAyMDM2MzA3QgorOjEwNDY0MDAwMDAwMDAwMDAwMDA0QTJCRTAwNjA0NDExMDAwMDA2OEFDMQorOjEwNDY1MDAwMDAwMDAwMzUwMDIwMzYzMDAwMDAwMDAwMDAwNEEyQzIzNworOjEwNDY2MDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAwMDM2MDAyMDM2MzA0OQorOjEwNDY3MDAwMDAwMDAwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2OEFDRAorOjEwNDY4MDAwMDAwMUEyQTQwMDIwNDQxMTAwMDAwMDAwMDAwMDAwM0YyRgorOjEwNDY5MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTFFOQorOjEwNDZBMDAwMDAwMDAwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDA1MgorOjEwNDZCMDAwMDAwMDAwM0YwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDUzRAorOjEwNDZDMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDBBMUY0MDAyMDQ0MTE2NworOjEwNDZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDA2MQorOjEwNDZFMDAwODgwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFDQworOjEwNDZGMDAwMDAyMDQ4MTEwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTE0QgorOjEwNDcwMDAwMDAwMDAwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDAyQQorOjEwNDcxMDAwMDAwMDAwMDEwMDJGMDIzMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNDcyMDAwMENFMDAwMDAwMDAwMDYyOTAwMDAwMDMwMDAyMDA2MkRFQgorOjEwNDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYwMjIxMDAwMDAwMDAyNworOjEwNDc0MDAwMDAwMDAwMDAwQ0UwMDAwMDAwMDAwNjI5ODEwMDAwMDBDRAorOjEwNDc1MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTE2QQorOjEwNDc2MDAwMDAwMDAwMDAwMDAwN0UwMDAwMjgwNjIxMDAwMDAwMDA3QworOjEwNDc3MDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDBFNworOjEwNDc4MDAwMENFMDAwMDAwMDAwMDYwMjAwMDBBMDkyMDAyMDQ0MTE4RQorOjEwNDc5MDAwMDAwMDAwMDAwMDAwMDAzMTAwMjA0QTJEMDAwMDAwMDA1MQorOjEwNDdBMDAwMDAwMEEwOTMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzIyRgorOjEwNDdCMDAwMDAyMDRBMkQwMDAwMDAwMDAwMDBBMkI2MDAyMDQ0MTE5NQorOjEwNDdDMDAwMDAwMDAwMDAwMDAwMDAzMzAwMjA0QTJEMDAwMDAwMDAxRgorOjEwNDdEMDAwMDAwMEEyQkEwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzRENAorOjEwNDdFMDAwMDAyMDRBMkQwMDAwMDAwMDAwMDBBMkJFMDAyMDQ0MTE1RAorOjEwNDdGMDAwMDAwMDAwMDAwMDAwMDAzNTAwMjA0QTJEMDAwMDAwMDBFRAorOjEwNDgwMDAwMDAwMEEyQzIwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMzY5OQorOjEwNDgxMDAwMDAyMDRBMkQwMDAwMDAwMDAwMDAwMDMwMDAyMDA2MkQ3RQorOjEwNDgyMDAwMDAwMDAwMDAwMDAwMDFGRjAwMjgwNjIxMDAwMDAwMDAzOQorOjEwNDgzMDAwMDAwMDAwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNDg0MDAwMENFMDAwMDAwMDAwMDYyODAwMDAwMDAwMDAyMTAyMjEwQQorOjEwNDg1MDAwMDAwMDAwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2MEI3MworOjEwNDg2MDAwMDAwNEEwMDMwMDYwNDQxMTAwMDAwNjhBMDAwMEEwMDNCOQorOjEwNDg3MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTA0QgorOjEwNDg4MDAwMDAwMDAwMDAwMDAwMDAwMTAwMjEwNjIxMDAwMDAwMDBERgorOjEwNDg5MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjEwMDAwNEEwMTA3QQorOjEwNDhBMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDBBMDEwMDAyMDQ0MTE5RQorOjEwNDhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDA4MAorOjEwNDhDMDAwMDAwMDAwMDEwMDIxMDYyMTAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNDhEMDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDA5QQorOjEwNDhFMDAwMDAwMDA2MjgwMDA0QTAxMTAwNjA0NDExMDAwMDA2OEFBMAorOjEwNDhGMDAwMDAwMEEwMTEwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA5MgorOjEwNDkwMDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDEyMDA2MDQ0MTFDNAorOjEwNDkxMDAwMDAwMDA2OEEwMDAwQTAxMjAwMjA0NDExMDAwMDAwMDBFMAorOjEwNDkyMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTM1OAorOjEwNDkzMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDBBMDEzMDAyMDQ0MTEwQQorOjEwNDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDBFRgorOjEwNDk1MDAwMDAwNEEwMTQwMDYwNDQxMTAwMDAwNjhBMDAwMEEwMTRBNgorOjEwNDk2MDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTA1QQorOjEwNDk3MDAwMDAwMDAwMDAwMDA0QTAxNTAwNjA0NDExMDAwMDA2OEEzOQorOjEwNDk4MDAwMDAwMEEwMTUwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBGRAorOjEwNDk5MDAwMDAyMDQ4MTAwMDAwMDAwMDAwMDRBMDE2MDA2MDQ0MTEzMAorOjEwNDlBMDAwMDAwMDA2OEEwMDAwQTAxNjAwMjA0NDExMDAwMDAwMDA0QworOjEwNDlCMDAwMDAwMDAwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTdDNAorOjEwNDlDMDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDBBMDE3MDAyMDQ0MTE3NgorOjEwNDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDA1RgorOjEwNDlFMDAwMDAwNDIwMDQwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMkMyRQorOjEwNDlGMDAwMDA4MDA2MkQwMDAwMDAwMEZGMDAwMDAwMDAyMDQ0MTE5MAorOjEwNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAyRAorOjEwNEExMDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDIxQQorOjEwNEEyMDAwMDA4MDQ4MTEwMDAwMDAwMDAwMDAwMDAwMEVFMDAwMDBCRgorOjEwNEEzMDAwMDAwMDA2M0EwMDAwMDAzMDAwMjAwNjJEMDAwMDAwMDBCMworOjEwNEE0MDAwMDAwMDAwMDIwMDI4MDYyMTAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEE1MDAwMDAyRjAyMjEwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAxOAorOjEwNEE2MDAwMDAwMDA2Mzg4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAxMgorOjEwNEE3MDAwMDAwMDAwMDEwMDIwNDgxMTAwMDAwMDAwMDAwNDIwMDQ5NAorOjEwNEE4MDAwMDA2MDQ0MTEwMDAwMDY4QTAwMDAxMDAwMDAyMDA4MTE5OAorOjEwNEE5MDAwMDAwMDAwMDAwMDAwMDAyQjAwMjAzNjIyMDAwMDAwMDA3MworOjEwNEFBMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwNjNFMDAwMDAwMDA2MgorOjEwNEFCMDAwMDA2MDAwMDAwMDAwMDVDNjk4MDAwMDAwMDAyMDQ0MTFCRQorOjEwNEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwODA0ODExMDAwMDAwMDAwRAorOjEwNEFEMDAwMDAwMDAwMDBDMDYwMDAwMDAwMDAwNjNFMDAwMDAwMDA3MgorOjEwNEFFMDAwQzA0MDA0MDAwMDAwMDAwMTAwMDBBMkE0MDAyMDQ0MTEwNgorOjEwNEFGMDAwMDAwMDAwMDAwMDAwMDAyMjAwMjA0ODExMDAwMDAwMDAxQgorOjEwNEIwMDAwODkwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDFBNgorOjEwNEIxMDAwMDA0MDQ4MTEwMDAwMDYyQTk3MDAwMDAwMDAyMDQ0MTFDMAorOjEwNEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwQworOjEwNEIzMDAwOEEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDA3NgorOjEwNEI0MDAwMDA0MDQ4MTEwMDAwMDYyQTAwMDAwMDAwMDA2MDAwMDAzQworOjEwNEI1MDAwMDAwMDA2NTkwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDA1MQorOjEwNEI2MDAwMDAwMDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUEyQTQwNQorOjEwNEI3MDAwQzAyMDQ0MTEwMDAwMDAwMDAwMDAwMDE2MDA2MDQ4MTEzMQorOjEwNEI4MDAwMDAwMDAzNkUwMDAwMjAxMDAwMjA0NDExMDAwMDAwMDAwRgorOjEwNEI5MDAwMDAwMTAwMDAwMDIwNDgxMTAwMDAwMDAwODEwMDAwMDAxQQorOjEwNEJBMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTExNgorOjEwNEJCMDAwMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExMDAwMDAwMDBFMworOjEwNEJDMDAwMDk4MDAwMDAwMDIwNDgxMTAwMDAwMDAwRkZGRkZGRkZFNworOjEwNEJEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTFFMworOjEwNEJFMDAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDBBRQorOjEwNEJGMDAwMDAwNDIxN0YwMDYwNDQxMTAwMDAwNjhBMDAwMDAwMUZBRAorOjEwNEMwMDAwMDAyMTAyMzAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDA3RAorOjEwNEMxMDAwMDAwMDAwMDAwMDAwMDAwNDAwNDA0QzExMDAwMDA2NTM5QQorOjEwNEMyMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMTcyRAorOjEwNEMzMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDA0MDAyOTFFMjc5NworOjEwNEM0MDAwMDAwMDAwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDA3MAorOjEwNEM1MDAwMDAwMDAwMTcwMDIwMUUyRDAwMDAwMDAwRkZGRkZGRkJEQQorOjEwNEM2MDAwMDAyODFFMjcwMDAwMDAwMDAwMDAwMDE3MDA4MDM2MjdFMworOjEwNEM3MDAwMDAwMDAwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBCMgorOjEwNEM4MDAwMDAwMDAwMDgwMDI5MUUyNzAwMDAwMDAwMDAwMDAwMTc5NworOjEwNEM5MDAwMDA4MDM2MjcwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkRCNQorOjEwNENBMDAwMDAwMDAwMDBGRkZGRkZGNzAwMjgxRTI3MDAwMDAwMDBBMworOjEwNENCMDAwMDAwMDAwMTcwMDgwMzYyNzAwMDAwMDAwMDAwMDIwMTBEMAorOjEwNENDMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDA4MDAwMDAyMDQ4MTE3NgorOjEwNENEMDAwMDAwMDAwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAxOAorOjEwNENFMDAwMDAwMDAwMTYwMDYwNDgxMTAwMDAwMzZFMDAwMDIwMTA1NAorOjEwNENGMDAwMDAyMDQ0MTEwMDAwMDAwMDAwMDEwMDAwMDAyMDQ4MTFDNQorOjEwNEQwMDAwMDAwMDAwMDAwMDAwMjE3QzAwMjA0NDExMDAwMDAwMDA5MQorOjEwNEQxMDAwMDE4MDAwMDAwMDIwNDgxMTAwMDAwMDAwRkZGRkZGRkY5RAorOjEwNEQyMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTE5MQorOjEwNEQzMDAwMDAwMDAwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDA1QworOjEwNEQ0MDAwODEwMDAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDE2QworOjEwNEQ1MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDQyMTdGMDA2MDQ0MTE4MQorOjEwNEQ2MDAwMDAwMDA2OEEwMDAwMDAxRjAwMjEwMjMwMDAwMDAwMDA0MQorOjEwNEQ3MDAwMDAwMDAwMDAxNEMwMDAwMDAwMDAwNjg5MDAwMDAwMTBDMAorOjEwNEQ4MDAwMDA0MDRDMTEwMDAwMDY2RjAwMDAwMDAwQzAyMDA0MDAyRAorOjEwNEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDM4QzAwMDAwMDAwMDAwMDAxQgorOjEwNERBMDAwMDAwMDAwMUQwMDIwMEEyRDAwMDAwMDAwMDAwMDAwMUU3MQorOjEwNERCMDAwMDAyMDBFMkQwMDAwMDAwMDAwMDAwMDFGMDAyMDEyMkQxQQorOjEwNERDMDAwMDAwMDAwMDAwMDAwMDAyMDAwMjAxNjJEMDAwMDAwMDA2MAorOjEwNEREMDAwMDAwMDIxNjkwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBENAorOjEwNERFMDAwMDAyMDQ4MDQwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDVFQQorOjEwNERGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA0ODAxMDAwMDAwMDA0QQorOjEwNEUwMDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDRFNQorOjEwNEUxMDAwMDAzMDEyMjQwMDAwMDAwMDAwMDAwMDAwMDAyRjAwNjQ5OQorOjEwNEUyMDAwMDAwMDAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA2ODgyOAorOjEwNEUzMDAwMDAwMDAwMDMwMDI4MUEyMjAwMDAwMDAwMDAwMDAwMDgwMworOjEwNEU0MDAwMDAyMjEyMjIwMDAwMDAwMEZGRkZGMDAwMDAyODEyMjRDMAorOjEwNEU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkxMEM0MDAwMDAwMDA1NQorOjEwNEU2MDAwMDAwMDAwMUYwMDQwMzYyNDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwNEU3MDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMUFDMDAwMDBEOAorOjEwNEU4MDAwMDAwMDA2OEE5RjAwMDAwMDAwMjA0NDExMDAwMDAwMDA3RQorOjEwNEU5MDAwQ0FGRUJBQkUwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEVBMDAwMUFFMDAwMDAwMDAwMDY4RDAwMDAwMDAwMDA4MDAwMDBGNQorOjEwNEVCMDAwMDAwMDAwMDAwMDAwMDAwMDFBQzAwMDAwMDAwMDA2OEY4MworOjEwNEVDMDAwOUUwMDAwMDAwMDIwNDQxMTAwMDAwMDAwQ0FGRUJBQkU4RgorOjEwNEVEMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAwMDAwMUFFMDAwMDA1RgorOjEwNEVFMDAwMDAwMDA2OTIwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDBBQQorOjEwNEVGMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDEwMDAzNworOjEwNEYwMDAwMDA2MDA0MTEwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTFERgorOjEwNEYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjI2NQorOjEwNEYyMDAwMDAwMDIyNUMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDM4QgorOjEwNEYzMDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDAyMjU2MDAyMDQ0MTEwQgorOjEwNEY0MDAwMDAwMDAwMDAwMDAwMDAxQjAwMjA0ODExMDAwMDAwMDBDRAorOjEwNEY1MDAwMDAwMEExRkMwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEzRQorOjEwNEY2MDAwMDAyMDQ4MTEwMDAwMDAwMDAwMDFBMUZEQzAyMDQ0MTFGNAorOjEwNEY3MDAwMDAwMDAwMDAwMDAwMDAyMTAwMjAxRTJEMDAwMDAwMDBBNQorOjEwNEY4MDAwMDAwMDAwMTAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMjQ4NgorOjEwNEY5MDAwMDAyMDIyMkQwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjgzMgorOjEwNEZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3MDAwMDAwMDA4OAorOjEwNEZCMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMjI1NgorOjEwNEZDMDAwMDAyMDIyMkQwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjgwMgorOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3MDAwMDAwMDA1OAorOjEwNEZFMDAwMDAwMDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMjMyNQorOjEwNEZGMDAwMDAyMDFFMkQwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjdDRgorOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk0OTA3MDAwMDAwMDAyNworOjEwNTAxMDAwMDAwMDAwMDAwMDQwNDgxMTAwMDAwMDAwMDAwMDAwMDBGNworOjEwNTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwNTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNTA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNTBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwNTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwNTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwNTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwNTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwNTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNTJCMDAwMDE0MjA0RkYwNUJEMDI1MDAwMDAwMDAwMDFDMzAxNjg2NworOjEwNTJDMDAwMDQzRjA1QkQwMDAwMDAwMDAyMjUwMjA5MDI1MDAxNTEwMworOjEwNTJEMDAwMDAwMDAwMDAwMjIzMDI0NTAyQTAwMjQxMDAwMDAwMDA3RAorOjEwNTJFMDAwMDNENzA1QkQwNUJEMDVCRDAwMDAwMDAwMDY0NjA2NDcwNQorOjEwNTJGMDAwMDMxRjA1QkQwMDAwMDAwMDA1QkQwNUMyMDMyMDAzNDBEQgorOjEwNTMwMDAwMDAwMDAwMDAwMzJBMDI4MjAzNDIwMzM0MDAwMDAwMDA3MAorOjEwNTMxMDAwMDVCRDA1QkQwNUJEMDVCRDAwMDAwMDAwMDVCRDA1NEU3MAorOjEwNTMyMDAwMDVCRDA1QkQwMDAwMDAwMDAzQkEwNUJEMDRCODAzNDQ3NworOjEwNTMzMDAwMDAwMDAwMDAwNDk3MDQ0RDA0M0QwNUJEMDAwMDAwMDA3RQorOjEwNTM0MDAwMDRDRDA1QkQwNDQxMDREQTAwMDAwMDAwMDQ0RDA1MDQ0RAorOjEwNTM1MDAwMDM1MTAzNzUwMDAwMDAwMDA1QkQwNUJEMDVCRDA1QkQ3OQorOjEwNTM2MDAwMDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJEMDAwMDAwMDAzNQorOjEwNTM3MDAwMDVCRDA1QkQwNjNDMDVDNDAwMDAwMDAwMDVCRDA1QkQxQQorOjEwNTM4MDAwMDAwNzA1QkQwMDAwMDAwMDA1QkQwNUJEMDVCRDA1QkQ0QworOjEwNTM5MDAwMDAwMDAwMDAwNUJEMDVCRDA1QkQwNUJEMDAwMDAwMDAwNQorOjEwNTNBMDAwMDNGODAzRUQwNDA4MDQwNjAwMDAwMDAwMDQwRTA0MEFEQworOjEwNTNCMDAwMDQwQzA0MTAwMDAwMDAwMDA0MUMwNDE4MDQyNDA0MjA0MQorOjEwNTNDMDAwMDAwMDAwMDAwNDJDMDQyODA0MzQwNDMwMDAwMDAwMDAxNQorOjEwNTNEMDAwMDVCRDA1QkQwNDM4MDVCRDAwMDAwMDAwMDVCRDA1QkRDNworOjEwNTNFMDAwMDVCRDA1QkQwMDAwMDAwMDA1QkQwNUJEMDVCRDA1QkQzMQorOjEwNTNGMDAwMDAwMDAwMDAwMDAyMDY3NjA2OTQwMDA2MDAwMDAwMDA4RgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjYzNV9wZnAuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY2MzVfcGZwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTI5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY2MzVfcGZwLmJpbi5paGV4CkBAIC0wLDAgKzEsMTQ1IEBACis6MTAwMDAwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMDdDMDM4QkVECis6MTAwMDEwMDAwMDgwMDFCODAwN0MwMzhCMDBENDQwMUUwMEVFMDAxRTVGCis6MTAwMDIwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEM0MTgzOEMzCis6MTAwMDMwMDAwMENBMjQwMDAwQ0EyODAwMDA5NTgxQTgwMEM0MUMzQTA4Cis6MTAwMDQwMDAwMEMzQzAwMDAwQ0EwODAwMDBDQTBDMDAwMDdDNzQ0QjRBCis6MTAwMDUwMDAwMEMyMDAwNTAwOTlDMDAwMDBDNDFDM0EwMDdDNzQ0QzJBCis6MTAwMDYwMDAwMEMwRkZGMDAwMDQyQzA0MDAzMDkwMDIwMDdEMjUwMDQ5Cis6MTAwMDcwMDAwMDM1MTQwMjAwN0QzNTBCMDAyNTU0MDMwMDdDRDU4MDJCCis6MTAwMDgwMDAwMDI1OUMwMzAwOTVDMDA0MDBENTAwMUIwMDdFRERDMTQ3Cis6MTAwMDkwMDAwMDdEOUQ4MDAwRDY4MDFCMDBENTgwMUIwMEQ0NDAxRUIzCis6MTAwMEEwMDAwMEQ1NDAxRTAwRDY0MDFFMDBENjgwMUUwMEQ0ODAxRTAzCis6MTAwMEIwMDAwMEQ0QzAxRTAwOTc4M0QzMDBENUMwMUUwMENBMDgwMDFDCis6MTAwMEMwMDAwMDgwMDAxQTAwQ0EwQzAwMDBFNDAxMUUwMEQ0MDAxRUNCCis6MTAwMEQwMDAwMDgwMDAwQzAwQzQxODM4MDBFNDAxM0UwMEQ0MDAxRTZCCis6MTAwMEUwMDAwMDgwMDAwQzAwQzQxODM4MDBENDQwMUUwMEVFMDAxRTMyCis6MTAwMEYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDExRTA0Cis6MTAwMTAwMDAwMEQ0MDAxRTAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMEYxCis6MTAwMTEwMDAwMEEwMDAwMDAwN0U4MjhCMDBFNDAxM0UwMEQ0MDAxRTlGCis6MTAwMTIwMDAwMEQ0NDAxRTAwRUUwMDFFMDBDQTA0MDAwMEEwMDAwMDIzCis6MTAwMTMwMDAwMDdFODI4QjAwQ0ExODAwMDBENDQwMUUwMEQ1ODAxRUFECis6MTAwMTQwMDAwMDgwMDA1MzAwRDQwMDc1MDBENDQwMUUwMENBMDgwMDhGCis6MTAwMTUwMDAwMENBMEMwMDAwQ0ExMDAwMDBENDgwMTkwMEQ0QzAxOEQ2Cis6MTAwMTYwMDAwMEQ1MDAxNzAwRDQ4MDFFMDBENEMwMUUwMEQ1MDAxRThDCis6MTAwMTcwMDAwMEUyMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4Qjg2Cis6MTAwMTgwMDAwMENBMDgwMDAwRDQ4MDYwMDBENDQwMUUwMDgwMDAwMDM3Cis6MTAwMTkwMDAwMEQ0ODAxRTAwQ0EwODAwMDBENDgwNjEwMEQ0NDAxRTM0Cis6MTAwMUEwMDAwMDgwMDAwMDAwRDQ4MDFFMDBDQTA4MDAwMENBMEMwMEI1Cis6MTAwMUIwMDAwMEQ0NDAxRTAwRDQ4MDE2MDBENEMwMTYwMEQ0ODAxRTg3Cis6MTAwMUMwMDAwMDgwMDFCODAwRDRDMDFFMDBDNjA4NDMwMENBMEMwMDVECis6MTAwMUQwMDAwMENBMTAwMDAwOTQ4MDA0MDBDQTE0MDAwMEU0MjBGMzU4Cis6MTAwMUUwMDAwMEQ0MjAxMzAwRDU2MDY1MDBENEUwMUMwMEQ1MjAxQzhECis6MTAwMUYwMDAwMEQ1NjAxQzAwODAwMDAwMDAwNjIwMDEwMEM2MDg0M0Y2Cis6MTAwMjAwMDAwMENBMEMwMDAwQ0ExMDAwMDA5NDgzRjcwMENBMTQwMDUyCis6MTAwMjEwMDAwMEU0MjBGMzAwODAwMDc5MDBENDIwMTMwMEM2MDg0M0Q2Cis6MTAwMjIwMDAwMENBMEMwMDAwQ0ExMDAwMDA5ODgzRUYwMENBMTQwMDM2Cis6MTAwMjMwMDAwMEQ0MDA2NDAwODAwMDhEMDAwMDAwMDAwMEM0MTQzMjZGCis6MTAwMjQwMDAwMEM2MTg0MzAwQzQwODJGMDA5NTQwMDUwMEM0MEMzMEI4Cis6MTAwMjUwMDAwMEQ0NDAxRTAwODAwMDAwMDBFRTAwMUUwMDk1ODNGNUQzCis6MTAwMjYwMDAwMEM0MTAzMTAwRDQ0MDMzMDBENTIwNjUwMEQ0QTAxQzU4Cis6MTAwMjcwMDAwMEQ0RTAxQzAwRDUyMDFDMDBFNDAxNUUwMEQ0MDAxRTY4Cis6MTAwMjgwMDAwMDgwMDAwMDAwMDYyMDAxMDBDQTE4MDAwMDBBMjAwMUJBCis6MTAwMjkwMDAwMEQ2MDA3NjAwQzQwODM2MDA5ODgwMDcwMEM2MTA0NUQ2Cis6MTAwMkEwMDAwMDk1MDExMDAwRDQwMDFGMDBENDYwNjIwMDgwMDAwMDlGCis6MTAwMkIwMDAwMEQ0MjA2MjAwQ0MzODM1MDBDQzE0MzMwMDg0MDFCQjVDCis6MTAwMkMwMDAwMEQ0MDA3MjAwRDU0MDFFMDA4MDAwMDAwMEVFMDAxRTI5Cis6MTAwMkQwMDAwMEUyMDAxQTAwODQwMUJCMDBFMjAwMUEwMENDMTA0QkJGCis6MTAwMkUwMDAwMENDMDQ0NzAwMkM5NDAxMDA3RDA5OEIwMDk4NDAwNTQ4Cis6MTAwMkYwMDAwMDdEMTVDQjAwRDQwMDFBMDA4MDAxQjgwMEQ0MDA2RDM5Cis6MTAwMzAwMDAwMDM0NDQwMTAwQ0MwQzQ4MDA5ODQwM0EwMENDMkM0QTAwCis6MTAwMzEwMDAwMDk1ODAwNDAwQ0MwNDQ5MDA4MDAxQjgwMEQ0MDAxQTg0Cis6MTAwMzIwMDAwMEQ0QzAxQTAwMjgyODAxMDA4NDAwRjAwMENDMTAwMzdCCis6MTAwMzMwMDAwMDk4ODAxQjAwMDQzODBDMDA4NDAwRjAwMENDMTAwM0VGCis6MTAwMzQwMDAwMDk4ODAxNzAwMDQzODA4MDA4NDAwRjAwMENDMTAwM0U3Cis6MTAwMzUwMDAwMDk4ODAxMzAwMDQzODA0MDA4NDAwRjAwMENDMTAwM0RGCis6MTAwMzYwMDAwMDk4ODAxNDAwQ0MxMDRDMDA5QTgwMDkwMENDMTQ0REU5Cis6MTAwMzcwMDAwMDk4NDBEQzAwRDQwMDZEMDBDQzE4NDgwMEQ1MDAxQTZECis6MTAwMzgwMDAwMEQ1NDAxQTAwODAwMEM5MDBENTgwMUEwMDk2QzBENTVCCis6MTAwMzkwMDAwMEQ0MDA2RDAwODAwMUI4MDBENDAwNkUwMDlBQzAwMzQ0Cis6MTAwM0EwMDAwMEQ0MDA2RDAwRDQwMDZFMDA4MDAwMDAwMEVDMDA3RkRGCis6MTAwM0IwMDAwMDlBQzBDQzAwRDQwMDZEMDA4MDAxQjgwMEQ0MDA2RTVCCis6MTAwM0MwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMDdEOTEwMzY3Cis6MTAwM0QwMDAwMDdERDU4MzAwN0QxOTBDMDAzNUNDMUYwMDM1NzAxRkMyCis6MTAwM0UwMDAwMDdDRjBDQjAwN0NEMDhCMDA4ODAwMDAwMDdFOEU4QkUwCis6MTAwM0YwMDAwMDk1QzAwNDAwRDQwMDZFMDA4MDAxQjgwMEQ0MDAxQTNCCis6MTAwNDAwMDAwMEQ0QzAxQTAwQ0MwODAzMDBDQzBDMDMwMENDMTAwM0FECis6MTAwNDEwMDAwMENDMTQwMzAwQ0MxODAzMDBDQzFDMDMwMENDMjQwMzM0Cis6MTAwNDIwMDAwMENDMjgwMzAwMzVDNDFGMDAzNkIwMUYwMDdDNzA0QjgxCis6MTAwNDMwMDAwMDM0RjAxRjAwN0M3MDRCMDAzNTcwMUYwMDdDNzA0QjQ3Cis6MTAwNDQwMDAwMDdEODg4MTAwN0RDQ0MxMDA3RTUxMDEwMDdFOTU0MUY4Cis6MTAwNDUwMDAwMDdDOTA4MjAwN0NENEMyMDA3Qzg0OEIwMDlBQzAwMzE0Cis6MTAwNDYwMDAwMDdDOEM4QjAwMkM4ODAxMDA5ODgwOUUwMEQ0MDA2RDRECis6MTAwNDcwMDAwMDk4NDA5QzAwRDQwMDZFMDBDQzA4NEMwMENDMEM0RDgxCis6MTAwNDgwMDAwMENDMTA0ODAwRDQ4MDFBMDBENEMwMUEwMDgwMDEwMUFBCis6MTAwNDkwMDAwMEQ1MDAxQTAwQ0MwODMyMDBENDAwMzIwMDk0ODJEOTcyCis6MTAwNEEwMDAwMENBMEMwMDAwRDQ0MDFFMDA4MDAwMDAwMEQ0MDAxRUQyCis6MTAwNEIwMDAwMEU0MDExRTAwRDQwMDFFMDBDQTA4MDAwMENBMEMwMDlGCis6MTAwNEMwMDAwMENBMTAwMDAwRDQ0MDFFMDBDQTE0MDAwMEQ0ODAxRUQwCis6MTAwNEQwMDAwMEQ0QzAxRTAwRDUwMDFFMDBENTQwMUUwMEQ1NDAzNEZCCis6MTAwNEUwMDAwMDgwMDAwMDAwRUUwMDFFMDAyODA0MDQwMEUyMDAxQTU0Cis6MTAwNEYwMDAwMEUyMDAxQTAwRDQ0MDFBMDBDQTM4MDAwMENDMDgwM0Y5Cis6MTAwNTAwMDAwMENDMEMwMzAwQ0MwQzAzMDBDQzBDMDMwMDk4ODJCRDgzCis6MTAwNTEwMDAwMDAwMDAwMDAwODQwMUJCMDBEN0EwNkYwMDgwMDAwMDM1Cis6MTAwNTIwMDAwMEVFMDAxRjAwQ0EwNDAwMDBDMkZGMDAwMENDMDgzNDI3Cis6MTAwNTMwMDAwMEMxM0ZGRjAwN0M3NENCMDA3Q0M5MEIwMDdEMDEwRjI0Cis6MTAwNTQwMDAwMDk5MDJCMDAwN0M3MzhCMDA4NDAxQkIwMEQ3QTA2RkMwCis6MTAwNTUwMDAwMDgwMDAwMDAwRUUwMDFGMDBDQTA4MDAwMDI4MTkwMEZCCis6MTAwNTYwMDAwMDdEODk4QjAwOTU4MDE0MDAyODE0MDQwMENBMEMwMEJCCis6MTAwNTcwMDAwMENBMTAwMDAwQ0ExQzAwMDBDQTI0MDAwMEUyMDAxRkNDCis6MTAwNTgwMDAwMEQ0QzAxQTAwRDUwMDFBMDBENTQwMUEwMENDMTgwM0I4Cis6MTAwNTkwMDAwMENDMkMwMzAwQ0MyQzAzMDBDQzJDMDMwMDdEQTU4QkJECis6MTAwNUEwMDAwMDdEOUM0NzAwOTg0Mjk3MDAwMDAwMDAwMDgwMDE2MTk4Cis6MTAwNUIwMDAwMEQ0QzAxQTAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDY5Cis6MTAwNUMwMDAwMEVFMDAxRTAwRTQwMTFFMDBENDAwMUUwMEQ0NDAxRUY4Cis6MTAwNUQwMDAwMEVFMDAxRTAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjE2Cis6MTAwNUUwMDAwMEU0MDEzRTAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRUI4Cis6MTAwNUYwMDAwMENBMDQwMDAwQTAwMDAwMDA3RTgyOEIwMENBMDgwMDMwCis6MTAwNjAwMDAwMDI0OEMwNjAwMENDQzA2MDA5OEMwMDYwMENDMTA0RUNFCis6MTAwNjEwMDAwMDk5MDAwNDAwRDQwMDczMDBFNDAxMUUwMEQ0MDAxRTAxCis6MTAwNjIwMDAwMEQ0NDAxRTAwRDQ4MDFFMDA4MDAwMDAwMEVFMDAxRTlBCis6MTAwNjMwMDAwMENBMDgwMDAwQ0EwQzAwMDAzNEQwMTgwMDI1MTAwMUMwCis6MTAwNjQwMDAwMDk1MDAyMTAwQzE3RkZGMDBDQTEwMDAwMENBMTQwMEZECis6MTAwNjUwMDAwMENBMTgwMDAwRDQ4MDFEMDBENEMwMUQwMDdEQjE4QkRECis6MTAwNjYwMDAwMEMxNDIwMjAwQzJDMDAxMDBENTgwMUQwMDM0REMwRTcyCis6MTAwNjcwMDAwMDdENUQ0QzAwN0Y3MzRDMDBENzQwMUUwMEQ1MDAxRUVFCis6MTAwNjgwMDAwMEQ1NDAxRTAwQzE0MjAwMDBDMkMwMDAwMDA5OUMwMTBDCis6MTAwNjkwMDAwMDMxREMxMDAwN0Y1RjRDMDA3RjczNEMwMDA0MjgwMkE3Cis6MTAwNkEwMDAwMDdEODM4MDAwRDVBODZGMDBENTgwNjYwMEQ3NDAxRUVFCis6MTAwNkIwMDAwMEVDMDA1RTAwQzgyNDAyMDBDODI0MDIwMDgwMDFCOERCCis6MTAwNkMwMDAwMEQ2MDA3NjAwRDQ0MDFFMDBENDgwMUUwMEQ0QzAxRTg4Cis6MTAwNkQwMDAwMDgwMDAwMDAwRUUwMDFFMDA4MDAwMDAwMEVFMDAxRjAxCis6MTAwNkUwMDAwMEQ0MDAxRjAwODAwMDAwMDBENDAwMUYwMEQ0MDAxRkIxCis6MTAwNkYwMDAwMDg4MDAwMDAwRDQwMDFGMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTAwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTAwNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTAwNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTAwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAwN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTAwN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAwN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTAwN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAwODAwMDAwMDAxMDE3MTAwMDIwMTc4MDAwMzAwOEYwMDA0MDA3RkU1Cis6MTAwODEwMDAwMDA1MDAwMzAwMDYwMDNGMDAwNzAwMzIwMDA4MDEyQzFECis6MTAwODIwMDAwMDA5MDA0NjAwMEEwMDM2MDAxMDAxQjYwMDE3MDBBMkI5Cis6MTAwODMwMDAwMDIyMDEzQTAwMjMwMTQ5MDAyMDAwQjQwMDI0MDEyNUQwCis6MTAwODQwMDAwMDI3MDA0RDAwMjgwMDZBMDAyQTAwNjAwMDJCMDA1MjlCCis6MTAwODUwMDAwMDJGMDA2NTAwMzIwMDg3MDAzNDAxN0YwMDNDMDE1NjA0Cis6MTAwODYwMDAwMDNGMDA3MjAwNDEwMThDMDA0NDAxMkUwMDU1MDE3M0NECis6MTAwODcwMDAwMDU2MDE3QTAwNjAwMDBCMDA2MTAwMzQwMDYyMDAzODBECis6MTAwODgwMDAwMDYzMDAzODAwNjQwMDM4MDA2NTAwMzgwMDY2MDAzOEY2Cis6MTAwODkwMDAwMDY3MDAzODAwNjgwMDNBMDA2OTAwNDEwMDZBMDA0OEJCCis6MTAwOEEwMDAwMDZCMDA0ODAwNkMwMDQ4MDA2RDAwNDgwMDZFMDA0ODc2Cis6MTAwOEIwMDAwMDZGMDA0ODAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjZGCis6MTAwOEMwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjEwCis6MTAwOEQwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwCis6MTAwOEUwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkYwCis6MTAwOEYwMDAwMDAwMDAwNjAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNkUwCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNjcwX21lLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNjcwX21lLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmZjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY2NzBfbWUuYmluLmloZXgKQEAgLTAsMCArMSwxMzQ1IEBACis6MTAwMDAwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAwMDEwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMEZGRkYwMDI4NDYyMUE5Cis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMEFGCis6MTAwMDMwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTAwMDQwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDI2Cis6MTAwMDUwMDAwMDAwMDAwMDAwMDEwMDAwQzAyOTQ2MjAwMDAwMDAwMDUwCis6MTAwMDYwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAwMDcwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQUYyCis6MTAwMDgwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDdBCis6MTAwMDkwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0MjAwNEJFCis6MTAwMEEwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMDAwMDYwMDAwMEI5Cis6MTAwMEIwMDAwMDAwMDYyNDAwMDAwMDAwMDA2MDAwMDAwMDAwMDYzODc4Cis6MTAwMEMwMDAwMDAwMDAwMEMwMjAwODAwMDAwMDAwMDAwMDAwMEYwMDM5Cis6MTAwMEQwMDAwMDI4MTYyMjAwMDAwMDAwMDAwMDAwMDgwMDIxMTYyNTVDCis6MTAwMEUwMDAwMDAwMDAwMDAwMDAwMDE4MDAyMDM2MjUwMDAwMDAwMDdECis6MTAwMEYwMDA4RDAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNEZBCis6MTAwMTAwMDAwMDJGMDIyNTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEFECis6MTAwMTEwMDAwMDAwMDAxODAwNDEyMDAwMDA0MDQ4MTEwMDAwMDAxOUI0Cis6MTAwMTIwMDAwMDQyMjAwMDAwMjA0ODExMDAwMDAwMDA4RTAwMDAwMDY2Cis6MTAwMTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMjgwMDIwNEEyRDhCCis6MTAwMTQwMDAwMDAwMDAwMDkwMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEFBCis6MTAwMTUwMDAwMDAwMDAwMDAwMjA0ODA1MDAwMDAwMDAwMDAwMDAwQzI2Cis6MTAwMTYwMDAwMDIxMTYyMjAwMDAwMDAwMDAwMDAwMDMwMDI4MTYyNUQwCis6MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDE5MDAyMTFBMjIwMDAwMDAwMDA5Cis6MTAwMTgwMDAwMDAwMDAwNDAwMjgxQTI2MDAwMDAwMDAwMDAwMDAwMDAzCis6MTAwMTkwMDAwMDI5MTRDNTAwMDAwMDAwMDAwMDAwMTkwMDIwMzYyNUM5Cis6MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTE0MDIwMDAwMDAwMEZGCis6MTAwMUIwMDAwMDAwMDAxNjAwMjExNjI1MDAwMDAwMDAwMDAwMDAwM0NBCis6MTAwMUMwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDVBCis6MTAwMUQwMDAwMDAwMDAwMEZGRkZGRkZDMDAyODBFMjMwMDAwMDAwMENECis6MTAwMUUwMDAwMDAwMDAwMDAwMjkxNEEzMDAwMDAwMDAwMDAwMDAxNzE4Cis6MTAwMUYwMDAwMDIwMzYyNTAwMDAwMDAwMDAwMDgwMDAwMDI4MEUyMkFDCis6MTAwMjAwMDAwMDAwMDAwMDAwMDAwMDA3MDAyMjBFMjMwMDAwMDAwMDk0Cis6MTAwMjEwMDAwMDAwMDAwMDAwMjkzODZFMDAwMDAwMDAyMDAwMDAwMEVGCis6MTAwMjIwMDAwMDI4MEUyMjAwMDAwMDAwMDAwMDAwMDYwMDIxMEUyMzFFCis6MTAwMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMEVGCis6MTAwMjQwMDAwMDAwMDAwMDAwMjIwMjIyMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTAwMjUwMDAxNEUwMDAwMDAwMDAwMDM4MDAwMDAwMDAyRUUwMDAwMDY0Cis6MTAwMjYwMDAwMDAwMDAzNTAwMDAwMDAwMkNFMDAwMDAwMDAwMDAzNzE2Cis6MTAwMjcwMDAwMDAwMDAwMDAwNDAwRTJEMDAwMDAwMzkwMDAwMDAwOEMyCis6MTAwMjgwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMDkwMDQwMTIyRDhCCis6MTAwMjkwMDAwMDAwMDA0NjAwMDAwMDAxMDA0MDBFMkQwMDAwMDAzOTYzCis6MTAwMkEwMDAwMDAwMDAwMEMwMjAwQzAwMDAwMDAwMDAwMDNGRkZGQzI4Cis6MTAwMkIwMDAwMDI4MTIyMzAwMDAwMDAwMDAwMDAwMDIwMDIyMTIyNDg3Cis6MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTFFMjMwMDAwMDAwMEFECis6MTAwMkQwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwM0UwMDAwMDAwOEU0Cis6MTAwMkUwMDAwMDQwMUMxMTAwMDAwMDQxMDAwMDAwMEQwMDIwMUUyREU4Cis6MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDBGMDAyODFFMjcwMDAwMDAwMDgyCis6MTAwMzAwMDAwMDAwMDAwMzAwMjIxRTI3MDAwMDAwMDA3RkMwMDAwMDQ0Cis6MTAwMzEwMDAwMDI4MUEyMzAwMDAwMDAwMDAwMDAwMTQwMDIxMUEyNjAzCis6MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAxMDAzMzFBMjYwMDAwMDAwMDU5Cis6MTAwMzMwMDAwMDAwMDAwODAwMjIxQTI2MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwMzQwMDAwMDI5MENDNzAwMDAwMDAwMDAwMDAwMjcwMDIwMzYyNDEwCis6MTAwMzUwMDAwMDAwMDAwMDAwMDA3RjAwMDAyODEyMjEwMDAwMDAwMEMzCis6MTAwMzYwMDAwMDAwMTQwMDAwMkYwMjI0MDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAwMzcwMDAwQ0UwMDAwMDAwMDAwMDRCMDAwMDAwMDEwMDI5MEUyM0VCCis6MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDM2MjMwMDAwMDAwMEU2Cis6MTAwMzkwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkY4MDAwMDExCis6MTAwM0EwMDAwMDI5NEEyMzAwMDAwMDAwMDAwMDAwMDAwMDNBMkMwMjRGCis6MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjBFMkIwMDAwMDAwMEUwCis6MTAwM0MwMDBGQzAwMDAwMDAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwRkM5Cis6MTAwM0QwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDFGRkYwMDI5NEEyM0YwCis6MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDI3MDAyMDRBMkQwMDAwMDAwMDRGCis6MTAwM0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAyOTVCCis6MTAwNDAwMDAwMDIwMEUyRDAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyM0U5Cis6MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAwNDIwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMTUyCis6MTAwNDMwMDAwMDIxMDIyMjAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDgzCis6MTAwNDQwMDAwMDAwMDA2MTAwMDAwMDAwMkVFMDAwMDAwMDAwMDA1RkRFCis6MTAwNDUwMDAwMDAwMDAwMDJDRTAwMDAwMDAwMDAwNUUwMDAwMDAwMDMyCis6MTAwNDYwMDAwMDQwMEUyRDAwMDAwMDYyMDAwMDAwMDEwMDQwMEUyRDMzCis6MTAwNDcwMDAwMDAwMDA2MjAwMDAwMDBBMDAyMDBFMkQwMDAwMDAwMEI1Cis6MTAwNDgwMDAwMDAwMDAwQjAwNDAxMjJEMDAwMDAwNkEwMDAwMDAwMDc4Cis6MTAwNDkwMDBDMDIwMEMwMDAwMDAwMDAwMDAzRkZGRkMwMDI4MTIyM0Q5Cis6MTAwNEEwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMjEyMjQwMDAwMDAwMEYyCis6MTAwNEIwMDA3RkMwMDAwMDAwMjgxNjIzMDAwMDAwMDAwMDAwMDAxNDg4Cis6MTAwNEMwMDAwMDIxMTYyNTAwMDAwMDAwMDAwMDAwMDEwMDMzMTYyNTYxCis6MTAwNEQwMDAwMDAwMDAwMDgwMDAwMDAwMDAyODBFMjMwMDAwMDAwMDQzCis6MTAwNEUwMDAwMDAwMDAwMDAwMjkwQ0EzMDAwMDAwMDAzRkZGRkMwMEZBCis6MTAwNEYwMDAwMDI5MEUyMzAwMDAwMDAwMDAwMDAwMUYwMDIxMUUyMzIxCis6MTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA2RDhBCis6MTAwNTEwMDAwMDAwMDEwMDAwNDAxQzExMDAwMDAwNzAwMDAwMDAwREYwCis6MTAwNTIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwRjAwMDI4MUUyNzAzCis6MTAwNTMwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMjFFMjcwMDAwMDAwMDUwCis6MTAwNTQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwREE4Cis6MTAwNTUwMDAwMDIwNDgxMTAwMDAwMDAwRkZGRkYwRkYwMDI4MUEzMEMzCis6MTAwNTYwMDAwMDAwMDAwMDAwMDBBMDI4MDAyMDQ0MTEwMDAwMDAwMDRFCis6MTAwNTcwMDAwMDAwMDAwMDAwMjk0OEU2MDAwMDAwMDAwMDAwQTAxODZDCis6MTAwNTgwMDAwMDIwNDQxMTAwMDAwMDAwM0ZGRkZGRkYwMDI4NEEyMzI1Cis6MTAwNTkwMDAwMDAwMDAwMDAwMDBBMDEwMDAyMDQ0MTEwMDAwMDAwMDM2Cis6MTAwNUEwMDAwMDAwMDAwMDAwMjA0ODA0MDAwMDAwMDAwMDAwMDAzMEFGCis6MTAwNUIwMDAwMDIwMTYyRDAwMDAwMDAwMDAwMDAwMDIwMDI5MTYyNTcyCis6MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDMwMDAyMDM2MjUwMDAwMDAwMDgwCis6MTAwNUQwMDAwMDAwMDAyNTAwMjAxNjJEMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAwNUUwMDAwMDJGMDBBMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDZECis6MTAwNUYwMDAwMDAwMDA4MzAwMDAwMDI2MDAyMDE2MkQwMDAwMDAwMEVGCis6MTAwNjAwMDAwMDAwMDAwMDAwMkYwMEE0MDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAwNjEwMDAwQ0MwMDAwMDAwMDAwMDg0MDAwMDAwMDAwMDQwMDAwMDRBCis6MTAwNjIwMDAwMDAwMDA4QTAwMDAwMDI1MDAyMDM2MjMwMDAwMDAwMEEyCis6MTAwNjMwMDAwMDAwMDAyNjAwMjAzNjI0MDAwMDAwMDAwMDAwMDAxNzAzCis6MTAwNjQwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyN0YzCis6MTAwNjUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDA4QTFDCis6MTAwNjYwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NTkwMDAwMDAwMENCCis6MTAwNjcwMDAwMDYwMDAwMDAwMDAwNjREMDAwMDAwMDIwMDIxMEUyMjc0Cis6MTAwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDA4RDA5Cis6MTAwNjkwMDAwMDAwMDAxMkMwNDAzNjIwMDAwMDAwOTMwMDAwMDAwMDVGCis6MTAwNkEwMDAyRUUwMDAwMDAwMDAwMDkxMDAwMDAwMDAyQ0UwMDAwMDlGCis6MTAwNkIwMDAwMDAwMDA5MDAwMDAwMDAyMDA0MDBFMkQwMDAwMDA5MjlCCis6MTAwNkMwMDAwMDAwMDAwMzAwNDAwRTJEMDAwMDAwOTIwMDAwMDAwQzBFCis6MTAwNkQwMDAwMDIwMEUyRDAwMDAwMDAwMDAwMDAwMTIwMDIwMzYyMzM0Cis6MTAwNkUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTBFMjIwMDAwMDAwMEI2Cis6MTAwNkYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwOTgwMDAwQTAwQ0UyCis6MTAwNzAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDRDCis6MTAwNzEwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDBBMEYxCis6MTAwNzIwMDAwMDAwQTAwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTAwNzMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAyRUUwMDAwMDMyCis6MTAwNzQwMDAwMDAwMDA5RTAwMDAwMDAwMkNFMDAwMDAwMDAwMDA5RDYyCis6MTAwNzUwMDAwMDAwMDAwMjAwNDAwRTJEMDAwMDAwOUYwMDAwMDAwMzdBCis6MTAwNzYwMDAwMDQwMEUyRDAwMDAwMDlGMDAwMDAwMEMwMDIwMEUyRDA4Cis6MTAwNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDBFCis6MTAwNzgwMDAwMDAwMDAwMDAwM0EwQzAyMDAwMDAwMDAwMDNGMDAwMEUyCis6MTAwNzkwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMTAwMDIxMEUyMzlFCis6MTAwN0EwMDAwMDAwMDAwMDAwMDAwMDExMDAyMDM2MjMwMDAwMDAwMEJGCis6MTAwN0IwMDAwMDAwMDAxRTAwMjEwMjJCMDAwMDAwMDAwMDAwMDAwMENECis6MTAwN0MwMDAxNEMwMDAwMDAwMDAwMEE3MDAwMDAwMTZDMDIwMzYyMDYyCis6MTAwN0QwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTAyMkIwMDAwMDAwMEFDCis6MTAwN0UwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQUEwMDAwMDAxNTc2Cis6MTAwN0YwMDBDMDIwMzYyMDAwMDAwMDAwMDAwMDAwMDgwMDIxMEUyQjYxCis6MTAwODAwMDAwMDAwMDAwMDAwMDAwMDdGMDAyODBFMjMwMDAwMDAwMDEwCis6MTAwODEwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAwODIwMDAwQ0UwMDAwMDAwMDAwMEUxMDAwMDAwMDAyNzAwMDAwMEQ0Cis6MTAwODMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBM0IzCis6MTAwODQwMDAwMDAwMDAwMTAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAwODUwMDAwQUUwMDAwMDAwMDAwMEIzMDAwMDAwMDAwMDYwMDAwMDlCCis6MTAwODYwMDAwMDAwMDEzQTgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDU3Cis6MTAwODcwMDAwMDAwMDAwNjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwQ0VECis6MTAwODgwMDAwMDIyMUUzMDAwMDAwMDAwOTk4MDAwMDAwMDIwNDQxMTZBCis6MTAwODkwMDAwMDAwMDAwMDAwMDAwMDA0MDAyMDEyMkQwMDAwMDAwMEY1Cis6MTAwOEEwMDAwMDAwMDAwODAwMjIxMjI0MDAwMDAwMDAwMDAwMDAxMEQ4Cis6MTAwOEIwMDAwMDIwMTgxMTAwMDAwMDAwMDAwMDAwMDAwMDI5MUNFNEM2Cis6MTAwOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDQ4MDcwMDAwMDEyRjQ5Cis6MTAwOEQwMDA5QjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTAwOEUwMDAwMDIwNDgwMjAwMDAwMDAwOUMwMDAwMDAwMDIwNDQxMThECis6MTAwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzE0NkYwMDAwMDAwMDQyCis6MTAwOTAwMDAwMDAwMDAwMTAwMzMzRTIzMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAwOTEwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDIwM0MwNTU1Cis6MTAwOTIwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEQxCis6MTAwOTMwMDAwMDAwMDAwRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAwOTQwMDAwMDIwMTAxMDAwMDAwMDAwMDAwMEUwMDcwMDIwNDQxMTBCCis6MTAwOTUwMDAwMDAwMDAwMDAwMDAwMDBGMDAyMTAyMkIwMDAwMDAwMDNBCis6MTAwOTYwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwQ0IwMEY4RkYwOEU5Cis6MTAwOTcwMDAwMDIwNDgxMTAwMDAwMDAwOTgwMDAwMDAwMDQwNDgxMUNECis6MTAwOTgwMDAwMDAwMDBEQzAwMDAwMEYwMDAyODBFMjIwMDAwMDAwMDQzCis6MTAwOTkwMDAwMDAwMDBBMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAwOUEwMDAwQ0MwMDAwMDAwMDAwMERBMDAwMDAwMTEwMDIwMEUyRDM1Cis6MTAwOUIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjMwMDAwMDAwMEUyCis6MTAwOUMwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwRDUwMDAwMDAwMjY0Cis6MTAwOUQwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ3Cis6MTAwOUUwMDAwMDAwMDBENDAwMDAzRjAwMDA0MDBDMTEwMDAwMDBENkMxCis6MTAwOUYwMDAwMDAwMUYwMDAwNDAwQzExMDAwMDAwRDYwMDAwMEYwMDk2Cis6MTAwQTAwMDAwMDIwMEMxMTAwMDAwMDAwMDAzODAwMDkwMDI5NEEyM0QyCis6MTAwQTEwMDAwMDAwMDAwMDNGMDAwMDAwMDAyODBFMkIwMDAwMDAwMDM2Cis6MTAwQTIwMDAwMDAwMDAwMjAwMjIwRTIzMDAwMDAwMDAwMDAwMDAwNzZBCis6MTAwQTMwMDAwMDQ5NEEyMzAwMDAwMERDMDAzODBGMDkwMDIwNDgxMTVCCis6MTAwQTQwMDAwMDAwMDAwMDY4MDAwMDA3MDAyMDQ4MTEwMDAwMDAwMEJFCis6MTAwQTUwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEZDCis6MTAwQTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDI5NEEyNDY0Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEZECis6MTAwQTgwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwQTIwMjQ5Cis6MTAwQTkwMDAwMDIwNDQxMTAwMDAwMDAwMDBGRjAwMDAwMDI4MEUyMjhBCis6MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyOTRBMjMwMDAwMDAwMDMwCis6MTAwQUIwMDAwMDAwMDAyNzAwMjAwRTJEMDAwMDAwMDAwMDAwMDAyNjhFCis6MTAwQUMwMDAwMDIwMTIyRDAwMDAwMDAwMDAwMDAwMDAwMDJGMDA4MzE1Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDBFQTQwCis6MTAwQUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NTMwMDAwMDAwMDRECis6MTAwQUYwMDAwMDQwMDAwMDAwMDAwMEVCMDAwMDAwMDAwMDYwMDAwMDZCCis6MTAwQjAwMDAwMDAwMDY1NjAwMDAwMDA3MDAyMDIyMkQwMDAwMDAwMDEzCis6MTAwQjEwMDAwMDAwMDAwNTAwMjIwRTIyMDAwMDAwMDAwMDEwMDAwMDZFCis6MTAwQjIwMDAwMDI4MEUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5MjA2OEJCCis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTBDMDIwMDAwMDAwMDZECis6MTAwQjQwMDAwMDAwMDBFRjAwMjgwRTIzMDAwMDAwMDAwMDAwMDAwMDVECis6MTAwQjUwMDAwMDI5MjA2ODAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDcyCis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMTAyMjMwMDAwMDAwMDNDCis6MTAwQjcwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAwRjgwMDAwMDAwQjdFCis6MTAwQjgwMDAwMDIxMDIyODAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDQ2Cis6MTAwQjkwMDAwMDAwMDBGODAwMDAwNDAwMDAyOTIyMjgwMDAwMDAwMEU2Cis6MTAwQkEwMDAwMDAwMDAxNDAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxQzk3Cis6MTAwQkIwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDEwCis6MTAwQkMwMDAwMDAwMDBGRDAwMDBBMzBDMDAyMDQ0MTEwMDAwMDAwMDA0Cis6MTAwQkQwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAxRTdFCis6MTAwQkUwMDAwMDIxMEUyMjAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEUwCis6MTAwQkYwMDAwMDAwMDEwQjAwMDBBMzBGMDAyMDQ0MTEwMDAwMDAwMEMyCis6MTAwQzAwMDAwMDAwMDAxMTAwMjAwRTJEMDAwMDAwMDAwMDAwMDAwMTc3Cis6MTAwQzEwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEI0Cis6MTAwQzIwMDAwMDAwMDEwNEZGRkZGRkZGMDA0MDQ4MTEwMDAwMDEwQjFFCis6MTAwQzMwMDAwMDAwMDAwMjAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAwQzQwMDAwQ0MwMDAwMDAwMDAwMTA3MDAwMEZGRkYwMDQwNDgxMTM5Cis6MTAwQzUwMDAwMDAwMDEwQjAwMDAwMDA0MDAyRjAyMjMwMDAwMDAwMDMwCis6MTAwQzYwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDAxMEEwMDAwMDBGRkFFCis6MTAwQzcwMDAwMDQwNDgxMTAwMDAwMTBCMDAwMDAwMDEwMDIwNDgxMTU1Cis6MTAwQzgwMDAwMDAwMDAwMDAwMDJDNDAwMDAyMDQ0MTEwMDAwMDAwMDI5Cis6MTAwQzkwMDAwMDAwMDAxRjAwMjEwRTIyMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAwQ0EwMDAxNEMwMDAwMDAwMDAwMTEyMDAwMDAwMTA0MDIxMEUyMEJFCis6MTAwQ0IwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMEE4Cis6MTAwQ0MwMDAwMDAwMDAxODQwMjI0QTIwMDAwMDAwMDAwMDAwMDAxMDMwCis6MTAwQ0QwMDBDMDQyNEEyMDAwMDAwMTE0MDAwMDAwMDAwMDIwMEMxMTU2Cis6MTAwQ0UwMDAwMDAwMDAwMDAwMDAwMDEzMDAyMDM2MjMwMDAwMDAwMDc4Cis6MTAwQ0YwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAwRDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEEwMDIwMTAxMTFGCis6MTAwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDdFCis6MTAwRDIwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAxMUIwMDAwMDAwMEJCCis6MTAwRDMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDEwMDUzMTIyNEIwCis6MTAwRDQwMDAwMDAwMDExN0ZGQkZGRkZGMDAyODNBMkUwMDAwMDAwMDNGCis6MTAwRDUwMDAwMDAwMDAxQjAwMjEwMjIyMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAwRDYwMDAxNEMwMDAwMDAwMDAwMTJFODEwMDAwMDAwMDIwNDQxMThBCis6MTAwRDcwMDAwMDAwMDAwMDAwMDAwMDBEMDAyMDQ4MTEwMDAwMDAwMEVECis6MTAwRDgwMDAwMDAwMDAxODAwMjIwRTMwMDAwMDAwMDBGQzAwMDAwMEVGCis6MTAwRDkwMDAwMDI4MEUyMzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTA0Cis6MTAwREEwMDAwMDAwMDAwMDAwMDAwMDBFMDAyMDQ4MTEwMDAwMDAwMEJDCis6MTAwREIwMDAwMDAwMDAwMDAwMjAxMDEwMDAwMDAwMDAwMDAwRTAwRTA1Cis6MTAwREMwMDAwMDIwNDQxMTAwMDAwMDAwMDdGOEZGMDgwMDIwNDgxMTJGCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTRBMjMwMDAwMDAwMDdECis6MTAwREUwMDAwMDAwMDAxQzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwODc0Cis6MTAwREYwMDAwMDIxNEEyNzAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUU4Cis6MTAwRTAwMDAwMDAwMDAwMDA2MEEwMjAwMDAyOTRBMjQwMDAwMDAwMDM5Cis6MTAwRTEwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTAwRTIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMEM5Cis6MTAwRTMwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJDCis6MTAwRTQwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzhCCis6MTAwRTUwMDAwMDIwNDQxMTAwMDAwMDAwMDA4MDAwMDAwMDIwNDgxMTI0Cis6MTAwRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDYwMDAwMDAwMDE0Cis6MTAwRTcwMDAwMDAwMDAwODAwMjE0QTI3MDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAwRTgwMDAxNzAwMDAwMDAwMDAwMDAwMDAwNDIxN0YwMDYwNDQxMUYyCis6MTAwRTkwMDAwMDAwMDY3QzAwMDAwMDFGMDAyMTAyMzAwMDAwMDAwMDVFCis6MTAwRUEwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA2N0IwMDAwMDAwNEU5Cis6MTAwRUIwMDAwMDQwNEMxMTAwMDAwMTM1ODEwMDAwMDAwMDIwNDQxMTY5Cis6MTAwRUMwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEE4Cis6MTAwRUQwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQzY4Cis6MTAwRUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMUI2Cis6MTAwRUYwMDAwMDAwMDY3QzAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMDBDCis6MTAwRjAwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAxM0MwMDAwMDAwMEIwCis6MTAwRjEwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEYxCis6MTAwRjIwMDAwMDAwMDAwQjAwMDAwMDAwMDA2MDA0MTEwMDAwMDMxNTI5Cis6MTAwRjMwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAwRjQwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDYwMDAwMDE1Cis6MTAwRjUwMDAwMDAwMDE2MDAwMDBGRkZGNDAyODBFMjAwMDAwMDAwMDlDCis6MTAwRjYwMDAwMDAwMDAxMEMwMjExMjIwMDAwMDAwMDAwMDAwRkZGRjYwCis6MTAwRjcwMDA0MDI4MDYyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMEEyMEM4Cis6MTAwRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDE0NjEwMDAwMDAwMEI4Cis6MTAwRjkwMDAwMDAwMDAwMDAwNzQxODgyMDAwMDAyQkIwMDAxQTFGREU3Cis6MTAwRkEwMDAwMDYwNDQxMTAwMDAwMkUwMDAwMDNGRkYwMDJGMDIyRjBDCis6MTAwRkIwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDE0NzFECis6MTAwRkMwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMDFDCis6MTAwRkQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTMxCis6MTAwRkUwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMEI0Cis6MTAwRkYwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwM0ZGRjg3Cis6MTAxMDAwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDk0Cis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDE2MDBGCis6MTAxMDIwMDAwMDAwMDAxMDQwMjEwRTIwMDAwMDAwMDAwMDAwRkZGRjIzCis6MTAxMDMwMDBDMDI4MTIyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMTYyMEVGCis6MTAxMDQwMDAwMDAwMDAwMDAwMDBGRkZGQzA2ODFBMjAwMDAwMDJCQjgzCis6MTAxMDUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwM0ZGRjFDCis6MTAxMDYwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDU0Cis6MTAxMDcwMDAwMDAwMDE1ODAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTEyCis6MTAxMDgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTZDCis6MTAxMDkwMDAwMDMwMEEyRjAwMDAwMDAwMDAwMDAwMDEwMDIxMEEyMjk5Cis6MTAxMEEwMDAwMDAwMDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMDk5Cis6MTAxMEIwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQTI5Cis6MTAxMEMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTk1Cis6MTAxMEQwMDAwMDAwMDAwMDAwMDAwMDAxMDA4MDQ4MTEwMDAwMDAwMDM2Cis6MTAxMEUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAwMDk1Cis6MTAxMEYwMDAwMDYwMDAwMDAwMDAwMThGMDAwMDAwMDAwMDYwMDAwMEEwCis6MTAxMTAwMDAwMDAwMDFBMDAwMDAzRkZGMDAyRjAyMkYwMDAwMDAwMEEwCis6MTAxMTEwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAxMTIwMDAwMDIwMkMwODAwMDAwMDAwMDAwMDAwMDAwMDIwMjQxMTE2Cis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDI4MTEwMDAwMDAwMDU2Cis6MTAxMTQwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjlDCis6MTAxMTUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTIzCis6MTAxMTYwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDAzCis6MTAxMTcwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMkU1Cis6MTAxMTgwMDAwMDIyMUUyOTAwMDAwMDAwMDAwMDAwMDAwMDcwNDhFQjUzCis6MTAxMTkwMDAwMDAwMDE5QzAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCQjk1Cis6MTAxMUEwMDAwMDAwMDAwMTQwMzMwNjIwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAxMUIwMDBDMDMwMjQwOTAwMDAwMDAwMDAwMDNGRkYwMDJGMDIyRjc0Cis6MTAxMUMwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDAwMDMzCis6MTAxMUQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTMwMDAwMDAwMDBBCis6MTAxMUUwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEMzCis6MTAxMUYwMDAwMDAwMDE4MTAwMDAwMDAwMDA2MDAwMDAwMDAwMDEzQUQyCis6MTAxMjAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAxODY5NTAwMDAwMDgyCis6MTAxMjEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTA3Cis6MTAxMjIwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDE4NjRCCis6MTAxMjMwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMTg1Cis6MTAxMjQwMDAwMDUzMDYyMTAwMDAwMTgyOTIwMDAwMDAwMDIwNDQxMTlBCis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDQ4MDAwMDAwMDE5NzhFCis6MTAxMjYwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMTU5Cis6MTAxMjcwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDAwMDAwMDc4MDQyQTc1Cis6MTAxMjgwMDAwMDAwMDJGQjAwMDAwMDAwMDAyMDI4MDkwMDAwMDAwMDEwCis6MTAxMjkwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAxMkEwMDAwQ0MwMDAwMDAwMDAwMTc0MDAwMDAwMDBDMDQwMDQwMEY5Cis6MTAxMkIwMDAwMDAwMDAwMTAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNThFCis6MTAxMkMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAxMkQwMDAwQ0UwMDAwMDAwMDAwMTk0MDAwMDAwMTVDMDIwMzYyMDQyCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDE2QzAyMDM2MjAwMDAwMDAwMEIyCis6MTAxMkYwMDAzRjgwMDAwMDAwMjAwNDExMDAwMDAwMDA0NjAwMDAwMEI0Cis6MTAxMzAwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDAwMDAwMDgwMDAwMDMxCis6MTAxMzEwMDAwMDAwMDAwMDAwMDBBMUZDMDAyMDQ0MTEwMDAwMDAwMEJCCis6MTAxMzIwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAxMzMwMDAwQ0MwMDAwMDAwMDAwMTlCMDAwMDAwMDEwMDgwNDgxMTZCCis6MTAxMzQwMDAwMDAwMDAwMDAwMDAwMDIxMDA4MDQ4MTEwMDAwMDAwMEEzCis6MTAxMzUwMDAwMDAwRkZGRjQwMjgwRTIwMDAwMDAwMDAwMDAwMDAxMEU5Cis6MTAxMzYwMDBDMDIxMTIyMDAwMDAwMDAwMDAwMEZGRkY0MDI4MTYyMENFCis6MTAxMzcwMDAwMDAwMDAwMDAwMDAwMDEwQzA4MTFBMjAwMDAwMDAwMEUyCis6MTAxMzgwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjYxCis6MTAxMzkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDgwMDIyMUUzMDVDCis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMDI5MDAyMDFBMkQwMDAwMDAwMEFECis6MTAxM0IwMDAwMDAwRTAwMDAwMjA0NDExMDAwMDAwMDBGRkZCRkYwOUQ2Cis6MTAxM0MwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMEYwMDIwMjIyRDI2Cis6MTAxM0QwMDAwMDAwMDAwMDAwMDAxRkZGMDAyOTRBMjgwMDAwMDAwMDU0Cis6MTAxM0UwMDAwMDAwMDAwNjAwMjAyMjJEMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAxM0YwMDAwMDI5MjBFODAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwODRDCis6MTAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTAxNDEwMDAwNjBBMDIwMDAwMjk0QTI2MDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxNDIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUNBCis6MTAxNDMwMDAwMDAwMDAwMDAwMDAwMTAwMDAyMDE4MTEwMDAwMDAwMDYyCis6MTAxNDQwMDAwMDAwMDAwODAwNjIxRTI4MDAwMDAxMkYwMDAwMDAwOEI0Cis6MTAxNDUwMDAwMDgyMjIyODAwMDAwMDAwMDAwMkMwMDAwMDIwNDQxMTg5Cis6MTAxNDYwMDAwMDAwMDAwMDAwMDAwMDE1MDA2MDBFMkQwMDAwMDFCRDBFCis6MTAxNDcwMDAwMDAwMDAxNjAwNjAwRTJEMDAwMDAxQkQwMDAwQzAwODM1Cis6MTAxNDgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTcwMDIwMEUyRDc1Cis6MTAxNDkwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDFCOUJFCis6MTAxNEEwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAxNEIwMDAwMDIwNDgwMTAwMDAwMDAwMzkwMDAwMDAwMDIwNDgxMTExCis6MTAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEEzCis6MTAxNEQwMDAwMDAwMDAwMDAwODA0ODAyMDAwMDAwMDAwMDAwMDAxODJBCis6MTAxNEUwMDAwMDIwMkUyRDAwMDAwMDAwMDAwMDAwMDAwMDNCMEQ2M0Q2Cis6MTAxNEYwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMjRBMjMwMDAwMDAwMDU1Cis6MTAxNTAwMDAwMDAwMDAxMDAwMjI0QTIzMDAwMDAwMDAwMDAwMDAxODI0Cis6MTAxNTEwMDAwMDIyNEEyMzAwMDAwMDAwMDAwMDAwMDAwMDgwNDgwMzcxCis6MTAxNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQjUwCis6MTAxNTMwMDAwMDAwMTAwMDAwNjAwNDExMDAwMDAzMTUwMDAwMDAwMDBFCis6MTAxNTQwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDgxMUVECis6MTAxNTUwMDAwMDAwMDFCMjAwMDAwMDA3MDAyMTA2MkYwMDAwMDAwMDdCCis6MTAxNTYwMDAwMDAwMDAxMzAwMjAwQTJEMDAwMDAwMDAwMDAwMDAwMTEwCis6MTAxNTcwMDAwMDIwMkMxMTAwMDAwMDAwMDAwMEZGRkY0MDI4MjIyMDY2Cis6MTAxNTgwMDAwMDAwMDAwMDAwMDAwMDBGMDAyNjIyMjgwMDAwMDAwMERDCis6MTAxNTkwMDAwMDAwMDAxMDQwMjEyNjIwMDAwMDAwMDAwMDAwMDAwRjg1Cis6MTAxNUEwMDAwMDI2MjYyOTAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjdDCis6MTAxNUIwMDAwMDAwMDAwMDAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDNFCis6MTAxNUMwMDAwMDAwMDAxQjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAxNUQwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMENECis6MTAxNUUwMDAwMDAwMDFFMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDI3Cis6MTAxNUYwMDAwMDAwMDA4MTAwMjA0ODExMDAwMDAwMDAwMDAwQTFGQzU0Cis6MTAxNjAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUVCCis6MTAxNjEwMDAwMDAwMDAwMDAwMDAwMDgwMDAyMDFDMTEwMDAwMDAwMEZECis6MTAxNjIwMDAwMDAwMDAwMDAwMkYwMjI3MDAwMDAwMDAwMDAwMDAwMDYyCis6MTAxNjMwMDAwQ0UwMDAwMDAwMDAwMURDMDAwMDAwMDAwMDYwMDAwMDgxCis6MTAxNjQwMDAwMDAwMDFFOTAwMDAwMDAxMDA1MzFFMjcwMDAwMDFEODNFCis6MTAxNjUwMDAwMDAwMDAwMTAwMjAyQzExMDAwMDAwMDAwMDAwMDAxRjBECis6MTAxNjYwMDAwMDI4MEEyMjAwMDAwMDAwMDAwMDAwMUYwMDI4MkEyQThCCis6MTAxNjcwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MzA2MjEwMDAwMDFEMTFECis6MTAxNjgwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMjY1Cis6MTAxNjkwMDAwMDMwNEEyRjAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMThGCis6MTAxNkEwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEMwCis6MTAxNkIwMDAwMDAwMDAwMTAwMzAxRTJGMDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxNkMwMDAwMDJGMDIyNzAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEQ2Cis6MTAxNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwMDAwMDAwMDFFOUMwCis6MTAxNkUwMDAwMDAwMDAwMTAwNTMxRTI3MDAwMDAxRTUwMDAwRkZGRjdECis6MTAxNkYwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMEYwMDI2MEUyM0VFCis6MTAxNzAwMDAwMDAwMDAwMDAwMDAwMDEwQzAyMTEyMjAwMDAwMDAwMEI2Cis6MTAxNzEwMDAwMDAwMDAwRjAwMjYxMjI0MDAwMDAwMDAwMDAwMDAwMDVFCis6MTAxNzIwMDAwMDIwMTQxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMTgxMUVCCis6MTAxNzMwMDAwMDAwMDJCQjAwMDFBMUZEMDAyMDQ0MTEwMDAwMDAwMEQ4Cis6MTAxNzQwMDAwMDAwMDAwMDAwMkYwMjJCMDAwMDAwMDAwMDAwMDAwMDNECis6MTAxNzUwMDAwQ0UwMDAwMDAwMDAwMUY4MDAwMDAwMTAwMDIyMTYyODM0Cis6MTAxNzYwMDAwMDAwMDAwMEZGRkYwMDAwMDAyODE2MjUwMDAwMDAwMDE4Cis6MTAxNzcwMDAwMDAwRkZGRjAwMjgxQTI5MDAwMDAwMDAwMDAwMDAwMDAwCis6MTAxNzgwMDAwMDI5NDhDNTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwQUIxCis6MTAxNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDJDMTEwMDAwMDAwMEVDCis6MTAxN0EwMDAwMDAwMDAxMDAwMjIxNjIzMDAwMDAwMDBGRkZGMDAwMEQwCis6MTAxN0IwMDAwMDI4MTYyNTAwMDAwMDAwMDAwMEZGRkYwMDI4MUEyNDYyCis6MTAxN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4QzUwMDAwMDAwMEUzCis6MTAxN0QwMDAwMDAwMDAwMDAwNzMxNTAzMDAwMDAyMDUwMDAwMDAwMDc3Cis6MTAxN0UwMDAwMDIwMTgwNTAwMDAwMDAwMDAwMDAwMDAwMDczMTUyNDEwCis6MTAxN0YwMDAwMDAwMDIwNTAwMDAwMDAwMDAyRDE0QzUwMDAwMDAwMERDCis6MTAxODAwMDAwMDAwMDAwMDAwMzAwOEEyMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAxODEwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwMjgwMjE0Cis6MTAxODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDIwMDMwMDAwMDAwMDc1Cis6MTAxODMwMDAwMDAwMDAwMDAwODAyNDA0MDAwMDAwMDAwMDAwMDAwRkYxCis6MTAxODQwMDAwMDIxMDIyNTAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDdDCis6MTAxODUwMDAwMDAwMDY3QjAwMDAwMDAwMDAyQjE0MDUwMDAwMDAwMEMzCis6MTAxODYwMDAwMDAwMDAwMTAwOTAxNjI1MDAwMDAwMDAwMDAwMDAwMEFDCis6MTAxODcwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMDAwMDYwMDQxMTg4Cis6MTAxODgwMDAwMDAwMDMxNTAwMDAwMDAwMDAyMDA0MTEwMDAwMDAwMDBCCis6MTAxODkwMDAwMDAwMDAwMDAwNjAwODExMDAwMDAxQjIwMDAwMjI1NkE0Cis6MTAxOEEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUEwMDI5NEEyMjE0Cis6MTAxOEIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDQ4Cis6MTAxOEMwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMDdBCis6MTAxOEQwMDAwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDM4Cis6MTAxOEUwMDAwMDAwMDAwMDAwMDAyMjVDMDAyMDQ0MTEwMDAwMDAwMDA1Cis6MTAxOEYwMDAwMDAwMDAwMzAwMzg0QTIxMDAwMDAwMDAwMDAwQTFGQ0E1Cis6MTAxOTAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUU4Cis6MTAxOTEwMDAwMDAwMDAwMDAwMDBGRkZGNDAyODEyMjAwMDAwMDAwMDJGCis6MTAxOTIwMDAwMDAwMDAxMEMwMjExQTIwMDAwMDAwMDAwMDAwRkZGRjhFCis6MTAxOTMwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAwMTBDMDIxMTYyMEVBCis6MTAxOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NDE0NjUwMDAwMDJCQkVECis6MTAxOTUwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTAwMDAwMDAwMTUwCis6MTAxOTYwMDAwMDMzMDYyMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMUNCCis6MTAxOTcwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDIxOTgwCis6MTAxOTgwMDAwMDAwM0ZGRjAwMkYwMjJGMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTAxOTkwMDAwQ0MwMDAwMDAwMDAwMjEyMDAwMDAwMDBDMDQwMDQwMDYzCis6MTAxOUEwMDAwMDAwMDAwMTAwMDAwMDAwMDA2MDAwMDAwMDAwMDYzODk4Cis6MTAxOUIwMDAwMDAwMDAwMDAwNDAwNDBGMDAwMDAyMTMwMDAwMDAwMEJGCis6MTAxOUMwMDAwMDYwMDAwMDAwMDAwNjI0MDAwMDAwMDAwMDYwMDAwMDJECis6MTAxOUQwMDAwMDAwMDYzODAwMDAwMjEwMDA2MDA0MTEwMDAwMDMxNTJBCis6MTAxOUUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxQTAwMDAwMDAwMEY2Cis6MTAxOUYwMDAwMDYwMDAwMDAwMDAwMTlDMDAwMDAwMDAwMDYwMDAwMDhBCis6MTAxQTAwMDAwMDAwMDJCQjAwMDAwMDAwMDA2MDAwMDAwMDAwMDJBMzE0Cis6MTAxQTEwMDA5MzgwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAxQTIwMDAwMDIwNDgwODAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyRkU2Cis6MTAxQTMwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDIzMjg4Cis6MTAxQTQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAxM0EwMDAwMDAwMEZCCis6MTAxQTUwMDAwMDQwMDAwMDAwMDAwMjM2OTUwMDAwMDAwMDIwNDQxMTA0Cis6MTAxQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMkYwMDAwMDAwMDE2Cis6MTAxQTcwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAyMzYwMDAwMDAwMDQyCis6MTAxQTgwMDBDMDQwNDgwMDAwMDAwMjMzOTIwMDAwMDAwMDIwNDQxMUQyCis6MTAxQTkwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDFFCis6MTAxQUEwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxNjMzCis6MTAxQUIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMUJBCis6MTAxQUMwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMDlBCis6MTAxQUQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUYzCis6MTAxQUUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTY5Cis6MTAxQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA0MTEwMDAwMDJGQjc0Cis6MTAxQjAwMDAwMDAwMDAwMEMwNDAwNDAwMDAwMDAwMDEwMDAwMDAwMEQwCis6MTAxQjEwMDAwMDYwMDAwMDAwMDAwNjI0MDAwMEEwMEMwMDIwNDQxMTFBCis6MTAxQjIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDhECis6MTAxQjMwMDAwMDAwMDAwMEMwNDA0ODAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAxQjQwMDAwMDYwMDAwMDAwMDAwMDBCMDAwMDAwMTg0MDIxMEEyMDg3Cis6MTAxQjUwMDAwMDAwMDAwMDAwMDAwMDAzMDAyRjAyMjIwMDAwMDAwMDJGCis6MTAxQjYwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDAyNEMwMDAwMDAxNDI5Cis6MTAxQjcwMDAwMDIwMjIyRDAwMDAwMDAwMDAwODAxMDEwMDI5MjIyODc5Cis6MTAxQjgwMDAwMDAwMDAwMDAwMDAwMDE0MDAyMDM2MjgwMDAwMDAwMEMzCis6MTAxQjkwMDAwMDAwQTMwQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAxQkEwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEU1Cis6MTAxQkIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDI1MThBCis6MTAxQkMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMEIwMDAwMDAxMDlBCis6MTAxQkQwMDAwMDYwMDQxMTAwMDAwMzE1M0Y4MDAwMDAwMDIwMDQxMTg0Cis6MTAxQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDA4MTEwMDAwMDFCMkM5Cis6MTAxQkYwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0VGCis6MTAxQzAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEZCCis6MTAxQzEwMDAwMDAwMDI3QzAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMEM0Cis6MTAxQzIwMDAwMDAwMDAwMTAwMjExRTI3MDAwMDAwMDAwMDAwMDAwMDRECis6MTAxQzMwMDAxNEUwMDAwMDAwMDAwMjZBMDAwMDAwMTIwMDIwMUUyREM3Cis6MTAxQzQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODFFMjcwMDAwMDAwMDI5Cis6MTAxQzUwMDAwMDAwMDAwMDAwMzQxQzI3MDAwMDAwMDAwMDAwMDAwMDBECis6MTAxQzYwMDAxMkMwMDAwMDAwMDAwMjVGMDAwMDAwMDAwMDIwMUMxMUY0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTUwMDAwMDAwMDUwCis6MTAxQzgwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNjIwMDAwMDAwMDI4Cis6MTAxQzkwMDAwMDIwMTQwNzAwMDAwMDAwMDAwMDAwMTIwMDIwMUUyRDhDCis6MTAxQ0EwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTFFMjcwMDAwMDAwMEJFCis6MTAxQ0IwMDAwMDAwMDAwMDAwMzQxQzQ3MDAwMDAwMDAwMDAwMDAwMDhECis6MTAxQ0MwMDAxMkMwMDAwMDAwMDAwMjY3MDAwMDAwMDAwMDIwMUMxMThDCis6MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMEVGCis6MTAxQ0UwMDAwMDAwMDAwMDA4QzAwMDAwMDAwMDAyNkEwMDAwMDAwMEMwCis6MTAxQ0YwMDAwMDIwMTgwNzAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDQ1Cis6MTAxRDAwMDAwMDAwMDJDMTAwMDAyMjU2MDAyMDQ0MTEwMDAwMDAwMDIzCis6MTAxRDEwMDAwMDAwMDAwMDAwMzQyMDIzMDAwMDAwMDAwMDAwMDAwMDRDCis6MTAxRDIwMDAxMkMwMDAwMDAwMDAwMjcyMDAwMDAwMDAwMDM0MjA0NEQ1Cis6MTAxRDMwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3MTVFCis6MTAxRDQwMDAwMDAwMDAxNjAwNDA0ODExMDAwMDAyNzYwMDAwMDAxODU0Cis6MTAxRDUwMDAwMDQwNDgxMTAwMDAwMjc2MDAwMDAwMDAwMDM0MjA0NERBCis6MTAxRDYwMDAwMDAwMDAwMDAwMDAwMDAwMTJDMDAwMDAwMDAwMDI3NTJBCis6MTAxRDcwMDAwMDAwMDAxNzAwNDA0ODExMDAwMDAyNzYwMDAwMDAxOTIyCis6MTAxRDgwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUM4Cis6MTAxRDkwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEM5Cis6MTAxREEwMDAwMDAxQTFGRDAwNjA0NDExMDAwMDAyRTkwMDAwM0ZGRkI2Cis6MTAxREIwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEY3Cis6MTAxREMwMDAwMDAwMDI1NjAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMUI2Cis6MTAxREQwMDAwMDAwMDAxMDQwMjEwNjIwMDAwMDAwMDAwMDAwRkZGRjZFCis6MTAxREUwMDBDMDI4MEEyMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDQyCis6MTAxREYwMDAwMDAwMDAwMDAwMDBGRkZGQzAyODEyMjAwMDAwMDAwMENCCis6MTAxRTAwMDAwMDAwMDAxMDQwMjExNjIwMDAwMDAwMDAwMDAwRkZGRjJECis6MTAxRTEwMDBDMDg4MUEyMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTRBCis6MTAxRTIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDM4Cis6MTAxRTMwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2N0MwMDAwMDAwMDQzCis6MTAxRTQwMDAwMDYwMDAwMDAwMDAwNjI0MDAwMDAwMDBDMDYwMDAwMEU4Cis6MTAxRTUwMDAwMDAwMDJBMzAwMDAwMDA1MDAyMDBBMkQwMDAwMDAwMDgxCis6MTAxRTYwMDAwMDAwMDAwODAwMjIwQTIyMDAwMDAwMDAwMDAwMDAyQkYxCis6MTAxRTcwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMUMwMDIwMUUyRDc0Cis6MTAxRTgwMDAwMDAwMDAwMDAwMDA3MDAwMDAyODFFMjcwMDAwMDAwMDc1Cis6MTAxRTkwMDAwMDAwMDAwMDAwMzExQ0U2MDAwMDAwMDAwMDAwMDAyQUU1Cis6MTAxRUEwMDAwMDIwMUEyRDAwMDAwMDAwMDAwMDAwMEMwMDIyMUEyNjVECis6MTAxRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAwRTYwMDAwMDAwMDBECis6MTAxRUMwMDAwMDAwMDAwMDA2RTAwMDAwMDAwMDAyOTIwMDAwMDAwMDk4Cis6MTAxRUQwMDAwMDIwMUMxMTAwMDAwMDAwMDAwMDAwMDAwMDIwMEMxMTc4Cis6MTAxRUUwMDAwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjMwMDAwMDAwMDRFCis6MTAxRUYwMDAwMDAwMDAxMDAwMjAxODExMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTAxRjAwMDAwMDY5MUNFMjAwMDAwMTJGOTM4MDAwMDAwMDIwNDQxMUIyCis6MTAxRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDcwMDAwMDAwMDUyCis6MTAxRjIwMDA5NTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTAxRjMwMDAwMDJGMDIyRjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDU1Cis6MTAxRjQwMDAwMDAwMDI5RDAwMDAwMDAxMDAzMzNFMkYwMDAwMDAwMDUxCis6MTAxRjUwMDAwMDAwMDAwMEQ5MDA0ODAwMDAwMDAwMDA5MjAwMDAwMENFCis6MTAxRjYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEQ0Cis6MTAxRjcwMDAwMDAwMDAwMDAwMDAwMDFDMDA0MDM2MjcwMDAwMDAwMEE4Cis6MTAxRjgwMDAwMDAwMDAwQ0MwMjIwQTIwMDAwMDAwMDAwMDAwMDAyOTEwCis6MTAxRjkwMDAwMDIwMzYyMjAwMDAwMDAwMDAwMDAwMjhDMDQwMzYyMDRCCis6MTAxRkEwMDAwMDAwMDAwMDAwMDBBMkE0MDAyMDQ0MTEwMDAwMDAwMDc2Cis6MTAxRkIwMDAwMDAwMDAwOTAwMjA0ODExMDAwMDAwMDBBMTAwMDAwMEZFCis6MTAxRkMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDgwNDgxMUMyCis6MTAxRkQwMDAwMDAwMDAwMDAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMDc1Cis6MTAxRkUwMDAwMDAwMDAwMDAwMkMxQ0UzMDAwMDAwMDAwMDAwMDAyMUE1Cis6MTAxRkYwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMjIwMDIwMUUyREQ3Cis6MTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQzFDRTQwMDAwMDAwMEE0Cis6MTAyMDEwMDAwMDAwMDAyMjAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyM0ZFCis6MTAyMDIwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBBMzUxCis6MTAyMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDRGCis6MTAyMDQwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAyNENDCis6MTAyMDUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDAwCis6MTAyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRDFEMDcwMDAwMDAwMDFGCis6MTAyMDcwMDAwMDAwMDAyNDAwODAzNjI3MDAwMDAwMDAwMDAwMDAyMTNFCis6MTAyMDgwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMjIwMDIwMzYyNDNCCis6MTAyMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTFDQTMwMDAwMDAwMDUwCis6MTAyMEEwMDAwMDAwMDAyMzAwMjAzNjI3MDAwMDAwMDAwMDAwMDAwMDkwCis6MTAyMEIwMDAwMDMxMUNDNDAwMDAwMDAwMDAwMDAwMjQwMDgwMzYyNzBFCis6MTAyMEMwMDAwMDAwMDAwMDAwMDAwMDFBMDAyMDM2MjcwMDAwMDAwMDc5Cis6MTAyMEQwMDAwMDAwMDAxQjAwMjAzNjI4MDAwMDAwMDAwMDAwMDAxNzUwCis6MTAyMEUwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDIwMDIxMDIyNzM5Cis6MTAyMEYwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDJEQzJFCis6MTAyMTAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyRDkwMDAwMDAxQTlBCis6MTAyMTEwMDAwMDIwMzYyNzAwMDAwMDAwMDAwMDAwMUIwMDIwMzYyOEE5Cis6MTAyMTIwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMDJECis6MTAyMTMwMDAwMDAwMDAwMjAwMjEwMjI3MDAwMDAwMDAwMDAwMDAwMDUzCis6MTAyMTQwMDAxNEUwMDAwMDAwMDAwMkQ5MDAwMDAwMDMwMDIxMDIyNzczCis6MTAyMTUwMDAwMDAwMDAwMDAwMDAwMDAwMTRFMDAwMDAwMDAwMDJEQ0FECis6MTAyMTYwMDAwMDAwMDAyMzAwMjAxRTJEMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAyMTcwMDAwMDJFMDBFMTAwMDAwMDAwMDAwMDAwMDAwMkMwMDAwMDhFCis6MTAyMTgwMDAwMDAwMDJEQzAwMDAwMDIxMDAyMDFFMkQwMDAwMDAwMEU1Cis6MTAyMTkwMDAwMDAwMDAwMDAwMzEyMEExMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyMUEwMDAwMDJFMDBFODAwMDAwMDAwMDAwMDAwMDAwNkMwMDAwMDUzCis6MTAyMUIwMDAwMDAwMDJEQzAwMDAwMDI0MDAyMDFFMkQwMDAwMDAwMEIyCis6MTAyMUMwMDAwMDAwMDAwMDAwMkUwMEUyMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyMUQwMDAwMkMwMDAwMDAwMDAwMkRDMDAwMDAwMjIwMDIwMUUyREQyCis6MTAyMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzIwMDAwMDAwMERDCis6MTAyMUYwMDAwMDAwMDAwMDAwMkUwMEU4MDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAyMjAwMDAwNkMwMDAwMDAwMDAwMkRDMDAwMDAwMDAwMDYwMDAwMENBCis6MTAyMjEwMDAwMDAwMDY1OTAwMDAwMDAwMDA2MDAwMDAwMDAwMDJCNTQ4Cis6MTAyMjIwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAyREUwMDAwMDAwMDhFCis6MTAyMjMwMDAwMDYwMDAwMDAwMDAwMkI1MDAwMDAwMDAwMDYwMDAwMDI3Cis6MTAyMjQwMDAwMDAwMDY1MDAwMDAwMDAwMDA0MDAwMDAwMDAwMDJERTE4Cis6MTAyMjUwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDAyQTcwMDAwMDAwMDc1Cis6MTAyMjYwMDAwMDQwMDAwMDAwMDAwMkRFMDAwMDAwMUEwMDIwMUUyREM5Cis6MTAyMjcwMDAwMDAwMDAwMDAwMDAwMDFCMDA4MDIyMkQwMDAwMDAwMDc0Cis6MTAyMjgwMDAwMDAwMDAxMDAwMjIxRTIzMDAwMDAwMDAwMDAwMDAwMERCCis6MTAyMjkwMDAwMDI5NDg4NzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzU2Cis6MTAyMkEwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMEI3Cis6MTAyMkIwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAxMDE2Cis6MTAyMkMwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDMxMjBDNDk2Cis6MTAyMkQwMDAwMDAwMDAwMDAwMDBGRkZGMDAyODIyMjgwMDAwMDAwMDhFCis6MTAyMkUwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxMDA1Cis6MTAyMkYwMDAwMDIyMUUyMzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg4NzgzCis6MTAyMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMDVDCis6MTAyMzEwMDAwMDAwMDAwMDAwMjk0ODQ3MDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAyMzIwMDAwMDMxMUNBMzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyNzQ2Cis6MTAyMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTQ4ODcwMDAwMDAwMEE1Cis6MTAyMzQwMDAwMDAwMDAwMDAwMzExQ0ExMDAwMDAwMDAwMDAwMDAxMDhGCis6MTAyMzUwMDAwMDIyMUUyNzAwMDAwMDAwMDAwMDAwMDAwMDI5NDg0NzVFCis6MTAyMzYwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMEZBCis6MTAyMzcwMDAwMDAwMDAwMDAwMzEyMEM0MDAwMDAwMDAwMDAwRkZGRjRBCis6MTAyMzgwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwNzYyCis6MTAyMzkwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjEwMDAwMDAwMENDCis6MTAyM0EwMDAwMDAwMDAwMDAwMzEyMEMyMDAwMDAwMDAwMDAwRkZGRjFDCis6MTAyM0IwMDAwMDI4MjIyODAwMDAwMDAwMDAwMDAwMDAwMDg5NDkwN0QyCis6MTAyM0MwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjMwMDAwMDAwMDlBCis6MTAyM0QwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMTA0Cis6MTAyM0UwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMzMDhBMkMzCis6MTAyM0YwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDZCCis6MTAyNDAwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyNDEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDMxMUNBMzUzCis6MTAyNDIwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjcwMDAwMDAwMDM1Cis6MTAyNDMwMDAwMDAwMDAwMDAwMjk0ODg3MDAwMDAwMDAwMDAwMDAwMUEzCis6MTAyNDQwMDAwMDIyMEEyMTAwMDAwMDAwMDAwMDAwMDAwMDMwMDhBMjY1Cis6MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMjFFMjIwMDAwMDAwMDBBCis6MTAyNDYwMDAwMDAwMDAxMDAwMjEyMjIyMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAyNDcwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMzcwCis6MTAyNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQzQwMDAwMDAwMDM3Cis6MTAyNDkwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMENDCis6MTAyNEEwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDM4MDhDNUFFCis6MTAyNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDA4NDEwMDAwMDAwMEEzCis6MTAyNEMwMDAwMDAwMDAwMTAwMjIwQTIyMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNEQwMDAwMDMzMDhBMjAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyMkFECis6MTAyNEUwMDAwMDAwMDAwMDAwMDAwMDEwMDAyMTIyMjIwMDAwMDAwMDc3Cis6MTAyNEYwMDAwMDAwMDAwMDAwODk0OTA3MDAwMDAwMDAwMDAwMDAxN0VDCis6MTAyNTAwMDAwMDIwMjIyRDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDg4Cis6MTAyNTEwMDAwMDAwMDMxOEZGRkZGRkVGMDAyODA2MjEwMDAwMDAwMDY1Cis6MTAyNTIwMDAwMDAwMDAxNDAwMjAyMjJEMDAwMDAwMDAwMDAwRjhFMDUwCis6MTAyNTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDI5NDkwMUIzCis6MTAyNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ5MDEwMDAwMDAwMEI4Cis6MTAyNTUwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAyNTYwMDAwMDIwNDgxMTAwMDAwMDAwMDYwQTAyMDAwMDgwNDgxMTA3Cis6MTAyNTcwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDAwMDAwMDAwMDAwMDdCCis6MTAyNTgwMDA5NzAwMDAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAyNTkwMDBDMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTAzCis6MTAyNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEIyCis6MTAyNUIwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTAyNUMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUQxCis6MTAyNUQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEQzCis6MTAyNUUwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAyNUYwMDAwMEEwMDAwQTAwMDAwMDAwOTcwMDAwMDAwMDIwNDQxMTI1Cis6MTAyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDUxCis6MTAyNjEwMDA4QTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEJCCis6MTAyNjIwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMTNFCis6MTAyNjMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDcyCis6MTAyNjQwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTAyNjUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMDZFCis6MTAyNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMEMwCis6MTAyNjcwMDA5NzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyNjgwMDAwMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMUQyCis6MTAyNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMEMxCis6MTAyNkEwMDAwMDAwMjI1QzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyNkIwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMUUwCis6MTAyNkMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEUyCis6MTAyNkQwMDAwMDAxQTFGRDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTAyNkUwMDBEOTAwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDQwMEU1Cis6MTAyNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMEEwMDAwMDAwMDMwCis6MTAyNzAwMDAwMDAwMjI1NzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwM0Q4Cis6MTAyNzEwMDBDMDQ4NEEyMDAwMDAwMDAwMDAwMDIyNUQwMDIwNDQxMTUzCis6MTAyNzIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMDYxCis6MTAyNzMwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2MzgwMDAwMDAwMEZCCis6MTAyNzQwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDIyNUMwMDIwNDQxMUFFCis6MTAyNzUwMDAwMDAwMDAwMDAwMDAwMDAzMDAzODRBMjIwMDAwMDAwMEQyCis6MTAyNzYwMDAwMDAwQTFGQzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyNzcwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMUExRkQwMDIwNDQxMTFECis6MTAyNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjIwMDAwMDAwMEY2Cis6MTAyNzkwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyN0EwMDA0MDIwNDgwMDAwMDAwMDAwMDAwMDAwMDE0MDMwNEEyMEE2Cis6MTAyN0IwMDAwMDAwMDAwMDAwMDAwMDAyQzAzMDRBMjAwMDAwMDAwMEJECis6MTAyN0MwMDAwMDAwMDAwMTAwNTMwQTIyMDAwMDAzNEIwMDAwMDAzRkZDCis6MTAyN0QwMDBDMDI4MEEyMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUYxCis6MTAyN0UwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDZGCis6MTAyN0YwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxODMzCis6MTAyODAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMTdDCis6MTAyODEwMDAwMDAwMDY3QzAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMEQyCis6MTAyODIwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzNTQwMDAwMDAxNDQ5Cis6MTAyODMwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDc5Cis6MTAyODQwMDAwMDAwMDM2MjAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMDY3Cis6MTAyODUwMDAwMDAwMDAwMDAwNjA0ODAyMDAwMDAzNkEwMDAwMjEwMDQwCis6MTAyODYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMENCCis6MTAyODcwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDMwCis6MTAyODgwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTAyODkwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDQwMDJGMDIyMjk5Cis6MTAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDM2NkYzCis6MTAyOEIwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDVDCis6MTAyOEMwMDAwMDQwNDgwMjAwMDAwMzVEMDAwMDAwMjgwMDJGMDIyMkEzCis6MTAyOEQwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDVCMzc0Cis6MTAyOEUwMDAwMDAxQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDJDCis6MTAyOEYwMDAwMDQwNDgwMjAwMDAwMzVEMDAwMDAwMkMwMDIwMzYyNjQ2Cis6MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDQ5MDAyMDE4MTEwMDAwMDAwMDM1Cis6MTAyOTEwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMUZFCis6MTAyOTIwMDAwMDMzMUEyNjAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNkRECis6MTAyOTMwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDM2QzVDCis6MTAyOTQwMDAwMDAwMDAyQzAwODAxQTJEMDAwMDAwMDAwMDAwMDAzRjU1Cis6MTAyOTUwMDBDMDI4MEEyMDAwMDAwMDAwMDAwMDAwMTUwMDJGMDIyMkZECis6MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDM4MkY2Cis6MTAyOTcwMDAwMDAwMDAwNjAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAyOTgwMDAwQ0UwMDAwMDAwMDAwM0FEMDAwMDAwMTYwMDJGMDIyMjQyCis6MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNBRjk5Cis6MTAyOUEwMDAwMDAwMDAyMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTAyOUIwMDAwQ0UwMDAwMDAwMDAwMzk4MDAwMDAwMEYwMDJGMDIyMjJFCis6MTAyOUMwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDNBNDc0Cis6MTAyOUQwMDAwMDAwMDAxMDAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTAyOUUwMDAwQ0UwMDAwMDAwMDAwM0E0MDAwMDAwMUUwMDJGMDIyMkUzCis6MTAyOUYwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDM4QzVDCis6MTAyQTAwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDBCCis6MTAyQTEwMDAwMDQwNDgwMjAwMDAwMDAwMDgwMDAwMDAwMDI5MEEyMkNGCis6MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAzNDAyMTBFMjAwMDAwMDAwMDE0Cis6MTAyQTMwMDAwMDAwMDAwQ0MwMjExMjIwMDAwMDAwMDAwMDA4MDAwMDZGCis6MTAyQTQwMDAwMDI4MTIyNDAwMDAwMDAwMDAwMDAwMTRDMDIyMTYyMEZDCis6MTAyQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTE0QTQwMDAwMDAwMDk1Cis6MTAyQTYwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEFCCis6MTAyQTcwMDAwMDI5NDhBMjAwMDAwMDAwMDAwMEExRkUwMDIwNDQxMTJGCis6MTAyQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDMwMDAwMDAwMEJCCis6MTAyQTkwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTNGCis6MTAyQUEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMTFGCis6MTAyQUIwMDAwMDAwMDAwMDAwMDAwMDE2MDAyMDQ4MTEwMDAwMDAwMDg3Cis6MTAyQUMwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2N0MwMDAwMDAxNTlDCis6MTAyQUQwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMEFGCis6MTAyQUUwMDAwMDAwMDM4RTAwMDAyMTBFMDAyMDQ0MTEwMDAwMDAwMEIxCis6MTAyQUYwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAyQjAwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMUUyCis6MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMDJCCis6MTAyQjIwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUFFCis6MTAyQjMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxRjgwMDIwNDQxMThFCis6MTAyQjQwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDQ4MTEwMDAwMDAwMEY1Cis6MTAyQjUwMDAwMDA0MjFGOTAwNjA0NDExMDAwMDA2N0MwMDAwMDAwMzFECis6MTAyQjYwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMDFFCis6MTAyQjcwMDAwMDAwMDM5QTAwMDAyMTA4MDAyMDQ0MTEwMDAwMDAwMDFBCis6MTAyQjgwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAyQjkwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTUyCis6MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDIwMDAwMDAwMDlCCis6MTAyQkIwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDVBCis6MTAyQkMwMDAwMDIwNDgwMjAwMDAwMDAwODAwMDAwMDAwMDIwNDQxMUE2Cis6MTAyQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTEwMDAwMDAwMDdDCis6MTAyQkUwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAxMERGCis6MTAyQkYwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMDJDCis6MTAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDNBQTQzCis6MTAyQzEwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAxQTJBNDJECis6MTAyQzIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDYwMDQwNDgxMTkwCis6MTAyQzMwMDAwMDAwMDAwMDAwMDFBMkE0MDAyMDQ0MTEwMDAwMDAwMEQ4Cis6MTAyQzQwMDAwMDAwMDAxNjAwNjA0ODExMDAwMDAzNkEwMDAwMDAwMDQ4Cis6MTAyQzUwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDgwMDRDCis6MTAyQzYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDc4Cis6MTAyQzcwMDAwMDAwMDAxRDAwMjEwMjIzMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAyQzgwMDAxNEUwMDAwMDAwMDAwM0M0ODEwMDAwMDAwMDIwNDQxMTkzCis6MTAyQzkwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEJBCis6MTAyQ0EwMDAwMDAwMjFGODAwMjA0NDExMDAwMDAwMDAwMDAwMDAxODdFCis6MTAyQ0IwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDIxRjkwMDYwNDQxMUM4Cis6MTAyQ0MwMDAwMDAwMDY3QzAwMDAwMDExMDAyMTAyMzAwMDAwMDAwMDFFCis6MTAyQ0QwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDAzQjgwMDAwMjEwMDI0Cis6MTAyQ0UwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjA1Cis6MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDMwMDAwMDAwMDY5Cis6MTAyRDAwMDBCQUJFQ0FGRTAwMjA0ODExMDAwMDAwMDBDQUZFQkFCRUNBCis6MTAyRDEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEEyQTQwMDIwNDQxMTdGCis6MTAyRDIwMDAwMDAwMDAwMDAwMDAwMDA0MDA0MDQ4MTEwMDAwMDAwMDA2Cis6MTAyRDMwMDAwMDAwMjE3MDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyRDQwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwM0FFCis6MTAyRDUwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDdECis6MTAyRDYwMDAwMDAwMDAwQTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAyRDcwMDAwMDIwMDAxMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDRGCis6MTAyRDgwMDAwMDAwMDNDOThDMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDc2Cis6MTAyRDkwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDA4MTAwMDAwMEQ5Cis6MTAyREEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTM0Cis6MTAyREIwMDAwMDAwMDAwMDAwMDAzRkZGNDAyODBBMjAwMDAwMDAwMDQzCis6MTAyREMwMDA4MDAwMDAwMDQwMjgwRTIwMDAwMDAwMDA0MDAwMDAwMEFECis6MTAyREQwMDBDMDI4MTIyMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyMjA0Cis6MTAyREUwMDAwMDAwMDY3QzAwMDAwMDAwMDAyMDE0MTAwMDAwMDAwMDFECis6MTAyREYwMDAwMDAwMDAwMDAwMkYwMjIzMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAyRTAwMDAwQ0MwMDAwMDAwMDAwM0Q3MDAwMDAwMDBDMDQwMTgwMDA0Cis6MTAyRTEwMDAwMDAwMDNEQTAwMDAzRkZGQzAyODFBMjAwMDAwMDAwMDc1Cis6MTAyRTIwMDAwMDA0MDAwMDAwNjk0NjI2MDAwMDA2N0MwMDAwMDAwMDQ3Cis6MTAyRTMwMDAwMDIwMTgxMDAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyNEY1Cis6MTAyRTQwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDNEREQ2Cis6MTAyRTUwMDAwMDAwMDAwMEMwNDAxQzAwMDAwMDAzRTAwMDAwM0ZGRjM1Cis6MTAyRTYwMDBDMDI4MUUyMDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNzYyCis6MTAyRTcwMDAwMDAwMDY3QzAwMDAwMDAwMDAyMDFDMTAwMDAwMDAwMDg0Cis6MTAyRTgwMDAwMDAwMDAwMDAwMjA0NDAyMDAwMDAwMDAwMDAwMDAwMERDCis6MTAyRTkwMDAwMDI4MjBDNTAwMDAwMDAwMDAwMDAwMDAwMDQ5NDhFOEFDCis6MTAyRUEwMDAwMDAwMDAwMEE1ODAwMDAwMDAyMDA4MTEwMDAwMDAwMEM0Cis6MTAyRUIwMDAwMDAwMjAwMDAwMjAwQzExMDAwMDAwMDA4MzAwMDAwMDMyCis6MTAyRUMwMDAwMDYwNDQxMTAwMDAwNDA4MDAwMDAwMDAwMDIwNDQwMkRCCis6MTAyRUQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMENBCis6MTAyRUUwMDAwMDAwMDAwMDQwMjA0ODAwMDAwMDAwMDAwMDAwMDAxRjFCCis6MTAyRUYwMDBDMDIxMDIyMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEZCCis6MTAyRjAwMDAwMDAwMDNFRDAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDJDCis6MTAyRjEwMDAwMDAwODAwMDAwMjA0ODExMDAwMDAwMDAwMDAwRkZGRkJBCis6MTAyRjIwMDBDMDQ4MTIyMDAwMDAwM0Y1QTc4MDAwMDAwMDIwMDgxMTBGCis6MTAyRjMwMDAwMDAwMDAwMDAwMDBBMDAwMDAyMDBDMTEwMDAwMDAwMEI0Cis6MTAyRjQwMDA4MzAwMDAwMDAwNjA0NDExMDAwMDA0MDgwMDAwMDAwMDNECis6MTAyRjUwMDAwMDIwNDQwMjAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEUzCis6MTAyRjYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDM5Cis6MTAyRjcwMDAwMDAwRkZGRkMwMjgxMjIwMDAwMDAwMDA4MzAwMDAwMEI2Cis6MTAyRjgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDMwNDg4M0QxCis6MTAyRjkwMDAwMDAwMDAwMDg0MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDM4Cis6MTAyRkEwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAyRkIwMDAxRDAwMDAwMDAwMDAwMDAwODMwMDAwMDAwMDYwNDQxMUJDCis6MTAyRkMwMDAwMDAwMDQwODAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMUYwCis6MTAyRkQwMDBBOTgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwQzAwMENGCis6MTAyRkUwMDAwMDQwMEMxMTAwMDAwM0YwQUI4MDAwMDAwMDIwMDgxMTJECis6MTAyRkYwMDAwMDAwMDAwMDAwMDBGOEUwMDA0MDBDMTEwMDAwMDNGMEE5Cis6MTAzMDAwMDBBRDgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRjg4MEUyCis6MTAzMDEwMDAwMDQwMEMxMTAwMDAwM0YwQjM4MDAwMDAwMDIwMDgxMUY0Cis6MTAzMDIwMDAwMDAwMDAwMDAwMDBGM0ZDMDA0MDBDMTEwMDAwMDNGMDYxCis6MTAzMDMwMDBBRjgwMDAwMDAwMjAwODExMDAwMDAwMDAwMDAwRTAwMDQ4Cis6MTAzMDQwMDAwMDQwMEMxMTAwMDAwM0YwQjE4MDAwMDAwMDIwMDgxMUM2Cis6MTAzMDUwMDAwMDAwMDAwMDAwMDBGMDAwMDA0MDBDMTEwMDAwMDNGMDMwCis6MTAzMDYwMDA4MzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMjE0OEZGCis6MTAzMDcwMDAwMDIwNDgxMTAwMDAwMDAwODQwMDAwMDAwMDIwNDQxMURFCis6MTAzMDgwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDE4Cis6MTAzMDkwMDAwMDAwMDAwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTAzMEEwMDAwMDgwMDAwMDAwMDAwMDAwMDExODIwMDBDMDMwNDYyMDExCis6MTAzMEIwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMEVGCis6MTAzMEMwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTAzMEQwMDAwMEEwMDAwQTAwMDAwMDAwMDIxOEEwMDBDMDMwNDYyMDM2Cis6MTAzMEUwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMEJGCis6MTAzMEYwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTAzMTAwMDAwMEEwMDAwQTAwMDAwMDAwMDMxOEMwMDBDMDMwNDYyMEU0Cis6MTAzMTEwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDhFCis6MTAzMTIwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTAzMTMwMDAwMEEwMDAwQTAwMDAwMDAwMDQxOEY4RTBDMDMwNDYyMDlCCis6MTAzMTQwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDVFCis6MTAzMTUwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTAzMTYwMDAwMEEwMDAwQTAwMDAwMDAwMDUxOEY4ODBDMDMwNDYyMENBCis6MTAzMTcwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDJFCis6MTAzMTgwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTAzMTkwMDAwMEEwMDAwQTAwMDAwMDAwMDYxOEUwMDBDMDMwNDYyMDMxCis6MTAzMUEwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMEZFCis6MTAzMUIwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTAzMUMwMDAwMEEwMDAwQTAwMDAwMDAwMDcxOEYwMDBDMDMwNDYyMEYwCis6MTAzMUQwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMENFCis6MTAzMUUwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTAzMUYwMDAwMEEwMDAwQTAwMDAwMDAwMDgxOEYzRkNDMDMwNDYyMEMwCis6MTAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwRDkwMDQ4MDAwMDAwMDAwMDlECis6MTAzMjEwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTAzMjIwMDAwMEEwMDAwQTAwMDAwMDAwMDAwMDAwMzAwMDIwMEEyRDZECis6MTAzMjMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyOTBDNDAwMDAwMDAwMDU5Cis6MTAzMjQwMDAwMDAwMDAzMDAwMjAzNjIzMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTAzMjUwMDBDMDIwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDAwQUUwCis6MTAzMjYwMDAwMDAwMDAwMDg2MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDYzCis6MTAzMjcwMDAwMDAwMDAwMDAwNDA0ODAxMDAwMDAwMDA4NTAwMDAwMDQwCis6MTAzMjgwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDQwNDgwMTgwCis6MTAzMjkwMDAwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTEwMDAwMDAwMDFDCis6MTAzMkEwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTAzMkIwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMEJFCis6MTAzMkMwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDA4Cis6MTAzMkQwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTAzMkUwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDAwMDAxNzAwMDAwMERGCis6MTAzMkYwMDAwMDAwMDAwMDAwMDQyMTdGMDA2MDQ0MTEwMDAwMDY3Q0YzCis6MTAzMzAwMDAwMDAwMDAxRjAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTAzMzEwMDAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwNEMwMjRCCis6MTAzMzIwMDAwMDAwMDQzRTAwMDAwMDAwQzAyMDBDMDAwMDAwMDAwMDZGCis6MTAzMzMwMDAwMDAwMDAwMEMwMjAxMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAzMzQwMDBDMDIwMTQwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTgwMDkxCis6MTAzMzUwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDFDMDAwMDAwMDAwMDcxCis6MTAzMzYwMDAwMDAwN0YwMDAwMjgwQTIxMDAwMDAwMDAwMDAwNDUwMDQ2Cis6MTAzMzcwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDBFCis6MTAzMzgwMDAwMDAwMDQ0QzAwMDAwMDAwQzAyMDIwMDAwMDAwMDAwMEVECis6MTAzMzkwMDAwMDAwMDAwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAxMDA2Cis6MTAzM0EwMDAwMDI4MEEyMzAwMDAwMDAwMDAwMDAwMTAwMDJGMDIyMjY1Cis6MTAzM0IwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDQ1NEM5Cis6MTAzM0MwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTA2Cis6MTAzM0QwMDAwMDIwNDgxMTAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyNDlECis6MTAzM0UwMDAwMDAwMDY3QzAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ1OUJFCis6MTAzM0YwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTAzNDAwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMTQwCis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDQwCis6MTAzNDIwMDAwMDAwMDAwMDAwNjA0ODA1MDAwMDA2ODEwMDAwMDAwMDY4Cis6MTAzNDMwMDAwMDI4MjRGMDAwMDAwMDAwMDAwMDAwMDcwMDI4MEEyM0Y0Cis6MTAzNDQwMDAwMDAwMDAwMDAwMDAwMDAxMDAyRjAyMjIwMDAwMDAwMDI4Cis6MTAzNDUwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NjAwMDAwMDAwMDFFCis6MTAzNDYwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDAwNEUwMDAwMDgwCis6MTAzNDcwMDAwMDAwMDQ3OTAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ4NjA1Cis6MTAzNDgwMDAwMDAwMDAwMjAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTAzNDkwMDAwQUUwMDAwMDAwMDAwNDY1MDAwMDAwMDAwMDJGMDBDOUUxCis6MTAzNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDJFMDAwMDAwMDAwMDQ3OUJECis6MTAzNEIwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0ODYwMDAwMDAwMzNGCis6MTAzNEMwMDAwMDJGMDIyMjAwMDAwMDAwMDAwMDAwMDAwQUUwMDAwMEJGCis6MTAzNEQwMDAwMDAwMDQ2QTAwMDAwMDAwMDAyRjAwQzkwMDAwMDAwMDg2Cis6MTAzNEUwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA0NzkwMDAwMDAwMDczCis6MTAzNEYwMDAwMDQwMDAwMDAwMDAwNDg2MDAwMDAwMDQwMDJGMDIyMkFCCis6MTAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDQ2RjVFCis6MTAzNTEwMDAwMDAwMDAwMDAwMkYwMEM5MDAwMDAwMDAwMDAwMDAwMEIzCis6MTAzNTIwMDAwQUUwMDAwMDAwMDAwNDc5MDAwMDAwMDAwMDQwMDAwMEY0Cis6MTAzNTMwMDAwMDAwMDQ4NjAwMDAwMDA1MDAyRjAyMjIwMDAwMDAwMEE5Cis6MTAzNTQwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0NzQwMDAwMDAwMDE5Cis6MTAzNTUwMDAwMDJGMDBDOTAwMDAwMDAwMDAwMDAwMDAwNkUwMDAwMDhECis6MTAzNTYwMDAwMDAwMDQ3OTAwMDAwMDAwMDA0MDAwMDAwMDAwMDQ4NjE0Cis6MTAzNTcwMDAwMDAwMDAwNjAwMkYwMjIyMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAzNTgwMDAwQUUwMDAwMDAwMDAwNDc5MDAwMDAwMDAwMDJGMDBDOURDCis6MTAzNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDhFMDAwMDAwMDAwMDQ3OUM2Cis6MTAzNUEwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDA0ODYwMDAwN0YwMEQyCis6MTAzNUIwMDAwMDI4MEEyMTAwMDAwMDAwMDAwMDQ1MDAwMDJGMDIyMjIwCis6MTAzNUMwMDAwMDAwMDAwMDAwMDAwMDAwMEFFMDAwMDAwMDAwMDAwMDExCis6MTAzNUQwMDAwMDAwMDAwODAwMjEwQTIzMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTAzNUUwMDAxNEMwMDAwMDAwMDAwNDgzMDAwMDIxNjkwMDIwNDQxMTgxCis6MTAzNUYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEEzCis6MTAzNjAwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTAzNjEwMDBDMDIwNDgwMDAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMUE5Cis6MTAzNjIwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ0MDAwMDAwMDAwMDc2Cis6MTAzNjMwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTAzNjQwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDdGMDAwMDI4MEEyMTYwCis6MTAzNjUwMDAwMDAwMDAwMDAwMDA0NTAwMDAyRjAyMjIwMDAwMDAwMEQyCis6MTAzNjYwMDAwMDAwMDAwMDBBRTAwMDAwMDAwMDA0OEMwMDAwMDAwMEUwCis6MTAzNjcwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDhBCis6MTAzNjgwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDAwMDAwMDAwMDAwMDNBCis6MTAzNjkwMDAwMDAwMDAwMDAwNDA0QzA4MDAwMDA0NEMwMDAwMDAwMDQ2Cis6MTAzNkEwMDBDMDIwMDgwMDAwMDAwMDAwMDAwMDAwMTA0MDIxMEUyMDkzCis6MTAzNkIwMDAwMDAwMDAwMDAwMDAwMDExNDAyMTEyMjAwMDAwMDAwMDY2Cis6MTAzNkMwMDAwMDAwMDAxMjQwMjExNjIwMDAwMDAwMDAwMDAwMjE2OUM3Cis6MTAzNkQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMjBCCis6MTAzNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTAyMjUwMDAwMDAwMDkyCis6MTAzNkYwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDA0OTYwMDA0MDAwMDM4Cis6MTAzNzAwMDBDMDQ5NEEyMDAwMDAwNDk3RkZGQkZGRkZDMDI4NEEyMDYxCis6MTAzNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTAyMjMwMDAwMDAwMDYzCis6MTAzNzIwMDAwMDAwMDAwMDE0RTAwMDAwMDAwMDA0QTMwMDAwMDAwMEZFCis6MTAzNzMwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDM5Cis6MTAzNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTAyMjQwMDAwMDAwMDMyCis6MTAzNzUwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwMDA4MTAwMDAwMDE0Cis6MTAzNzYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMEMwMDIwNDgxMTVGCis6MTAzNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMTAwMDAwMDAwMDE5Cis6MTAzNzgwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA0OUZBMDAwMDAwMDIyCis6MTAzNzkwMDAwMDIwNDQxMTAwMDAwMDAwQ0FGRUJBQkUwMDQwNDgxMURCCis6MTAzN0EwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDIzCis6MTAzN0IwMDAwMDAwMDAwNDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2QjAwCis6MTAzN0MwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgxMDRDCis6MTAzN0QwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEYzCis6MTAzN0UwMDAwMDAwMDAwNTAwMjA0ODExMDAwMDAwMDAwMDAwMjE2Q0NFCis6MTAzN0YwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgxMDFDCis6MTAzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjQwMDAwMDAwMDYzCis6MTAzODEwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAzODIwMDAwMDQwMDAwMDAwMDAwNDlEMDAwMDAwMDBDMDIxMEEyMEFDCis6MTAzODMwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRCNkZBCis6MTAzODQwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDgyCis6MTAzODUwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIxNkQwMDIwNDQxMUVDCis6MTAzODYwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDMwCis6MTAzODcwMDAwMDAwMDAwMEMwNjA0ODAwMDAwMDA2ODEwMDAwMDAwMDU5Cis6MTAzODgwMDAwMDQwMDAwMDAwMDAwNEJBODEwMDAwMDAwMDIwNDQxMTQ0Cis6MTAzODkwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEFFCis6MTAzOEEwMDAwMDA0MDAwMEMwMjk0NjIwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAzOEIwMDBDMDYwMDAwMDAwMDAwNjdDMDAwMDAwMDEwMDIxMDIyMjIwCis6MTAzOEMwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDRDMTVGCis6MTAzOEQwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAzOEUwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDg4Cis6MTAzOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDUwCis6MTAzOTAwMDBDQUZFQkFCRTAwNDA0ODExMDAwMDAwMDAwMDAwMDAwMERFCis6MTAzOTEwMDBDMDIwNDQwMDAwMDAwMDAwMDAwMDAwMDBDMDQwNDgxMDJCCis6MTAzOTIwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEExCis6MTAzOTMwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjFGOEY0Cis6MTAzOTQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMEUwMDIwNDgxMTdCCis6MTAzOTUwMDAwMDAwMDAwMDAwMDQyMUY5MDA2MDQ0MTEwMDAwMDY3QzEyCis6MTAzOTYwMDAwMDAwMDAwMDAwMjEwMjMwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzOTcwMDAxNEMwMDAwMDAwMDAwNEMzMDAwMDIxODAwMDIwNDQxMTk2Cis6MTAzOTgwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDBGCis6MTAzOTkwMDAwMDAwMDAwMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAzOUEwMDBDMDIwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMDAwMDBGCis6MTAzOUIwMDAwMDAwMDAwMDAwMDAwMDAwQzA0MDQ4MDAwMDAwMDAwMEJGCis6MTAzOUMwMDAwMDAwMDAwMzAwMzMzRTJGMDAwMDAwMDAwMDAwMDAwMTUzCis6MTAzOUQwMDAwMDIxMDIyMTAwMDAwMDAwMDAwMDAwMDAxNEUwMDAwMEFGCis6MTAzOUUwMDAwMDAwMDRGMzAwMDAwMDJDMDAyMDBBMkQwMDAwMDAwMDVECis6MTAzOUYwMDAwMDA0MDAwMDE4RTAwQzExMDAwMDA0RTIwMDAwMDAwMUM3Cis6MTAzQTAwMDAwMDMzM0UyRjAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTE3Cis6MTAzQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDNDCis6MTAzQTIwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODIzCis6MTAzQTMwMDAwMDMwMEEyMjAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDAyCis6MTAzQTQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDRFCis6MTAzQTUwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTAzQTYwMDAwMDIwNDgwMjAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwMzgxCis6MTAzQTcwMDAwMDAwMDAwMDAwMDAwMDA4MDAzMDBBMjIwMDAwMDAwMEUyCis6MTAzQTgwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAzQTkwMDBEOEMwNDgwMDAwMDAwNEQ2MDAwMDIxNjkwMDIwNDQxMTZECis6MTAzQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMEFDCis6MTAzQUIwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODkzCis6MTAzQUMwMDAwMDMwMEEyMjAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDcyCis6MTAzQUQwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMEJFCis6MTAzQUUwMDAwMDAwMDAyRDAwMjAxMjJEMDAwMDAwMDAwMDAwMDAwMDRBCis6MTAzQUYwMDAwMDI5MEM4MzAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTBGCis6MTAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDIwMDAwMDAwMDRCCis6MTAzQjEwMDAwMDAwMDAwMDAwMjA0ODAzMDAwMDAwMDAwMDAwMDAwODMyCis6MTAzQjIwMDAwMDMwMEEyMjAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDExCis6MTAzQjMwMDAwMDAwMDAwMDAwMDAwMDAwQzAyMDQ4MDAwMDAwMDAwMDVECis6MTAzQjQwMDAwMDAwMDAxMTAwMjEwMjI0MDAwMDAwMDAwMDAwMDAwMDFECis6MTAzQjUwMDAxNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDUxCis6MTAzQjYwMDAwMDAwMDQ5RDAwMDAwMDJDQzAyMDM2MjAwMDAwMDAwMDUyCis6MTAzQjcwMDAwMDAwMDAyREMwNDAzNjIwMDAwMDAwMDAwMDAwMDAwRkIzCis6MTAzQjgwMDAwMDIxMDIyMTAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDFECis6MTAzQjkwMDAwMDAwMDRGODAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwQkJFCis6MTAzQkEwMDAwMDAwMDAwMEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTAzQkIwMDBDMDQwMDQwMDAwMDAwMDAxQjUwMDAwMDAwMDIwNDQxMUQ2Cis6MTAzQkMwMDAwMDAwMDAwMDAwMDAyMDAwMDAyMDQ4MTEwMDAwMDAwMDVDCis6MTAzQkQwMDBCNjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwQTAwMDFBCis6MTAzQkUwMDAwMDIwNDgxMTAwMDAwMDAwQjcwMDAwMDAwMDIwNDQxMTMwCis6MTAzQkYwMDAwMDAwMDAwMDAwMDBDMDAwMDAyMDQ4MTEwMDAwMDAwMDhDCis6MTAzQzAwMDBCODAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjhFMEFGCis6MTAzQzEwMDAwMDIwNDgxMTAwMDAwMDAwQjkwMDAwMDAwMDIwNDQxMUZECis6MTAzQzIwMDAwMDAwMDAwMDAwMDBGODgwMDAyMDQ4MTEwMDAwMDAwMEEzCis6MTAzQzMwMDBCQTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRTAwMDc1Cis6MTAzQzQwMDAwMDIwNDgxMTAwMDAwMDAwQkIwMDAwMDAwMDIwNDQxMUNCCis6MTAzQzUwMDAwMDAwMDAwMDAwMDBGMDAwMDAyMDQ4MTEwMDAwMDAwMEZCCis6MTAzQzYwMDBCQzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwRjNGQzM0Cis6MTAzQzcwMDAwMDIwNDgxMTAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMUQ1Cis6MTAzQzgwMDAwMDAwMDAwMDAwMDAwMDAyMDAyMDQ4MTEwMDAwMDAwMEI5Cis6MTAzQzkwMDAwMDAwMDBGRjAwMjgwRTMwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAzQ0EwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEY0Cis6MTAzQ0IwMDAwMDAwMDUwQzAwMDAwMDAwQzAyMDA4MDAwMDAwMDAwMDBCCis6MTAzQ0MwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDA1MjEwMDAwMDAwMEZBCis6MTAzQ0QwMDAwMDIwMEMxMTAwMDAwMDAwMDAwMDAwMUMwMDIwMzYyMzEyCis6MTAzQ0UwMDAwMDAwMDAwMDAwMDAwMDJCMDAyMDM2MjMwMDAwMDAwMDMwCis6MTAzQ0YwMDAwMDAwMDAyOTAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyOEZBCis6MTAzRDAwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMTcwMDIwMzYyM0FBCis6MTAzRDEwMDAwMDAwMDAwMDAwMDAwMDI1MDAyMDM2MjMwMDAwMDAwMDA1Cis6MTAzRDIwMDAwMDAwMDAyNjAwMjAzNjIzMDAwMDAwMDAwMDAwMDAxNURGCis6MTAzRDMwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMTYwMDIwMzYyMzdCCis6MTAzRDQwMDAwMDAwMDAwMEZGRkZFMDAwMDAyMDBDMTEwMDAwMDAwMDU4Cis6MTAzRDUwMDAwMDAwMDAyMTAwMjAzNjIzMDAwMDAwMDAwMDAwMDAyMkE3Cis6MTAzRDYwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDFGRkYwMDIwMEMxMTdGCis6MTAzRDcwMDAwMDAwMDAwMDAwMDAwMDIzMDAyMDM2MjMwMDAwMDAwMEE3Cis6MTAzRDgwMDAwMDAwMDAyNDAwMjAzNjIzMDAwMDAwMDBGMUZGRkZGRkE4Cis6MTAzRDkwMDAwMDI4M0EyRTAwMDAwMDAwMDAwMDAwMUFDMDIyMEUyMDY5Cis6MTAzREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTM4NkUwMDAwMDAwMDQ0Cis6MTAzREIwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjA3Cis6MTAzREMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMkE0MDIwMzYyMDlBCis6MTAzREQwMDAwMDAwMDAwMDg3MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEU3Cis6MTAzREUwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwQTFGNDE2Cis6MTAzREYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMEQ2Cis6MTAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDBDMTEwMDAwMDAwMDc1Cis6MTAzRTEwMDAwMDAwMDAzMDAwMjAzNjIzMDAwMDAwMDA5RDAwMDAwMDVDCis6MTAzRTIwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMUY0MDIxNEEyMDMzCis6MTAzRTMwMDAwMDAwMDAwMDk2MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDc3Cis6MTAzRTQwMDAwMDAwMDAwMEMwMjA0ODAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTAzRTUwMDBDMDIwMEMwMDAwMDAwMDAwMDAwMDAwMDBDMDIwMTAwMDg2Cis6MTAzRTYwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMTE2MjQwMDAwMDAwMEQ4Cis6MTAzRTcwMDAwMDAwMDAwMDE0QzAwMDAwMDAwMDAwMDAwMDAwMDAxRDUxCis6MTAzRTgwMDAwMDIwMzYyMzAwMDAwMDAwMDAwMDAwMDMwMDI4MUUyMzRECis6MTAzRTkwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMjIyMjMwMDAwMDAwMEIzCis6MTAzRUEwMDBGRkZGRjAwMDAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMEIyCis6MTAzRUIwMDAwMDI5MjBFODAwMDAwMDAwMDAwMDAwMUYwMDIwMzYyODM0Cis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDE4MDAyMTFFMjMwMDAwMDAwMDc4Cis6MTAzRUQwMDAwMDAwMDAyMDAwMjAzNjI3MDAwMDAwMDAwMDAwMDAwMjQzCis6MTAzRUUwMDAwMDIyMTYyNDAwMDAwMDAwMDAwMDAwMDAwMDMwMTRBODhBCis6MTAzRUYwMDAwMDAwMDAwMDAwMDAwMDFFMDAyMDM2MjUwMDAwMDAwMDI5Cis6MTAzRjAwMDAwMDAwMDAwMzAwMjExQTI0MDAwMDAwMDAxMDAwMDAwMDNGCis6MTAzRjEwMDAwMDI4MUEyNjAwMDAwMDAwRUZGRkZGRkYwMDI4M0EyRUJECis6MTAzRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OTM4Q0UwMDAwMDY2QUQyCis6MTAzRjMwMDAwMDAwMDAwMTQwMjgwQTIwMDAwMDAwMDAwMDAwMDAwNkU4Cis6MTAzRjQwMDA0MDI4MEUyMDAwMDAwMDAwMDAwMDAzMDBDMDI4MTIyMEJFCis6MTAzRjUwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMTEyMjQwMDAwMDAwMDAyCis6MTAzRjYwMDAwMDAwMDAwMEMwMjAxNjIwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTAzRjcwMDBDMDIwMUEyMDAwMDAwMDAwMDAwMDAwMDAwMDIxMDIyMkUyCis6MTAzRjgwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDAwMDAwMDAwMDU1OUZGCis6MTAzRjkwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMTJBCis6MTAzRkEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDIyNTgwMDMwMEEyNEMwCis6MTAzRkIwMDAwMDAwMDAwMDAwMDQwMDAwMDA2OTQ2MjIwMDAwMDY3Q0FBCis6MTAzRkMwMDAwMDAwMjE2OTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAzRkQwMDAwMDIwNDgwNTAwMDAwMDAwMDAwMjAwMDAwMDI5NEEyNkQ5Cis6MTAzRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDU5Cis6MTAzRkYwMDBDQUZFQkFCRTAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMjA2Cis6MTA0MDAwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDkwCis6MTA0MDEwMDAwMDAwMDU2MTAwMDAwMDAwQzAyMDFDMTAwMDAwMDAwMDJFCis6MTA0MDIwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDA1NkYwMDAwMDAwMjFBCis6MTA0MDMwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDYwCis6MTA0MDQwMDAwMDAwMDU2MTgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDE0Cis6MTA0MDUwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwMjI1ODZDCis6MTA0MDYwMDAwMDMwMEEyNDAwMDAwMDAwMDAwNDAwMDAwMDY5NDYyMjFECis6MTA0MDcwMDAwMDAwMDY3QzAwMDAwMDAwQzAyMDFDMTAwMDAwMDAwMEIyCis6MTA0MDgwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDA1NkYwMDAwMDAwMEJDCis6MTA0MDkwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDAwCis6MTA0MEEwMDAwMDAwMDU2NTAwMDAwMDAwQzAyMDFDMDAwMDAwMDAwMEFBCis6MTA0MEIwMDAwMDAwMDAwMEMwNDAwMDAwMDAwMDA1NkYwMDAwMDAwNDg4Cis6MTA0MEMwMDAwMDJGMDIyMzAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMEQwCis6MTA0MEQwMDAwMDAwMDU2RDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDc4Cis6MTA0MEUwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE2REM5Cis6MTA0MEYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDBDMDIwNDgwMDIzCis6MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwQzA2MDQ4MDAwMDAwMDY4MUMwCis6MTA0MTEwMDAwMDAwMDAwMDAwNDAxQzEwMDAwMDA1NkYwMDAwMDAwMEJGCis6MTA0MTIwMDBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMDQwMDAwMEFGCis6MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMEVFMDAwMDAwMDAwMDU3MTFCCis6MTA0MTQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA1QkMwMDAwMDAwMDRFCis6MTA0MTUwMDAwMDJGMDIyNDAwMDAwMDAwMDAwMDAwMDAwQ0MwMDAwMDNFCis6MTA0MTYwMDAwMDAwMDU4MjAwMDBBMkI3MDAyMDQ0MTEwMDAwMDAwMEZBCis6MTA0MTcwMDAwMDAwMDAwMDAwMjA0ODA3MDAwMDAwMDA4MTAwMDAwMDRGCis6MTA0MTgwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTQwCis6MTA0MTkwMDAwMDAwMDAwMDAwMDRBMkI2MDA2MDQ0MTEwMDAwMDY3QzhDCis6MTA0MUEwMDAwMDAwMDAxQTAwMjEyMjMwMDAwMDAwMDAwMDAwMDAwNjdDCis6MTA0MUIwMDAwMDIyMjYzMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMUFBCis6MTA0MUMwMDAwMDAwMDY3QzAwMDBBMkM0MDAyMDQ0MTEwMDAwMDAwMDkyCis6MTA0MUQwMDAwMDAwMDAwMDAwMzA0OEU5MDAwMDAwMDAwMDAwMDAwMDdFCis6MTA0MUUwMDAwMEUwMDAwMDAwMDAwNTgwMDAwMEEyRDEwMDIwNDQxMTgyCis6MTA0MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MDgwMDAwMDAwMDJGCis6MTA0MjAwMDAwMDAwQTJEMTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMUM1Cis6MTA0MjEwMDAwMDUwNEEyODAwMDAwMDAwMDAwMDAwMDEwMDJGMDIyNDg2Cis6MTA0MjIwMDAwMDAwMDAwMDAwMDAwMDAwMENDMDAwMDAwMDAwMDU5MzJBCis6MTA0MjMwMDAwMDAwQTJCQjAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEFDCis6MTA0MjQwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTA5Cis6MTA0MjUwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEU0Cis6MTA0MjYwMDAwMDA0QTJCQTAwNjA0NDExMDAwMDA2N0MwMDAwMDAxQTlECis6MTA0MjcwMDAwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMDRECis6MTA0MjgwMDAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY3Q0NGCis6MTA0MjkwMDAwMDAwQTJDNTAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDQyCis6MTA0MkEwMDAwMDMwNDhFOTAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMENECis6MTA0MkIwMDAwMDAwMDU5MTAwMDBBMkQyMDAyMDQ0MTEwMDAwMDAwMDdGCis6MTA0MkMwMDAwMDAwMDAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJEMkVBCis6MTA0MkQwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyOEE2Cis6MTA0MkUwMDAwMDAwMDAwMDAwMDAwMDAyMDAyRjAyMjQwMDAwMDAwMDc3Cis6MTA0MkYwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1QTQwMDAwQTJCRkU4Cis6MTA0MzAwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgwN0M5Cis6MTA0MzEwMDAwMDAwMDAwMDgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEE3Cis6MTA0MzIwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0QTJCRUFGCis6MTA0MzMwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMUEwMDIxMjIzMEI5Cis6MTA0MzQwMDAwMDAwMDAwMDAwMDAwMDA2MDAyMjI2MzAwMDAwMDAwMEVGCis6MTA0MzUwMDAwMDA0MjAwNDAwNjA0NDExMDAwMDA2N0MwMDAwQTJDNjk2Cis6MTA0MzYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDMwNDhFOTc3Cis6MTA0MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDVBMkI2Cis6MTA0MzgwMDAwMDAwQTJEMzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDQzCis6MTA0MzkwMDAwMDQwNDgwODAwMDAwMDAwMDAwMEEyRDMwMDIwNDQxMUEzCis6MTA0M0EwMDAwMDAwMDAwMDAwMDAwMDAxMDA1MDRBMjgwMDAwMDAwMDRBCis6MTA0M0IwMDAwMDAwQTJDMzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDIzCis6MTA0M0MwMDAwMDIwNDgwNzAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTg4Cis6MTA0M0QwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDYzCis6MTA0M0UwMDAwMDA0QTJDMjAwNjA0NDExMDAwMDA2N0MwMDAwMDAxQTE0Cis6MTA0M0YwMDAwMDIxMjIzMDAwMDAwMDAwMDAwMDAwMDYwMDIyMjYzMENDCis6MTA0NDAwMDAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY3QzRECis6MTA0NDEwMDAwMDAwQTJDNzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEJFCis6MTA0NDIwMDAwMDMwNDhFOTAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDRCCis6MTA0NDMwMDAwMDAwMDVCMTAwMDBBMkQ0MDAyMDQ0MTEwMDAwMDAwMERCCis6MTA0NDQwMDAwMDAwMDAwMDAwNDA0ODA4MDAwMDAwMDAwMDAwQTJENDY2Cis6MTA0NDUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDUwNEEyODI0Cis6MTA0NDYwMDAwMDAwMDAwMDg1MDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDUyCis6MTA0NDcwMDAwMDAwMDAwMDAwMjA0ODAxMDAwMDAwMDAwMDAwMzA0QTU5Cis6MTA0NDgwMDAwMDIwNDQxMTAwMDAwMDAwMDEwMDAwMDAwMDIwNDgxMTNECis6MTA0NDkwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDVCNzIwCis6MTA0NEEwMDBBNDAwMDAwMEMwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDMzCis6MTA0NEIwMDBDMDQwNDgwMDAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMDk0Cis6MTA0NEMwMDAwMDAwMDVCQzAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTI2Cis6MTA0NEQwMDAwMDAwMDAyQzAwMjAzNjIxMDAwMDAwMDA4MTAwMDAwMEI4Cis6MTA0NEUwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDYwMDIwNDgxMUQ4Cis6MTA0NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMzAwMDAwMDAwMDVCCis6MTA0NTAwMDAwMDAwMDAwMDBDQzAwMDAwMDAwMDA1QzMwMDAwMDAwMDE3Cis6MTA0NTEwMDAwMDIwMDQxMTAwMDAwMDAwMDAwMDAwMzAwMDQwMzYyMTlGCis6MTA0NTIwMDAwMDAwMDVENjAwMDAwMDMwMDAyMDA2MkQwMDAwMDAwMDJECis6MTA0NTMwMDAwMDAwN0UwMDAwMjgwNjIxMDAwMDAwMDAwMDAwMDAwMEFFCis6MTA0NTQwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMDJECis6MTA0NTUwMDAwMDAwMDVENjgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMDhBCis6MTA0NTYwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDA0QTA5MjlCCis6MTA0NTcwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMzEwMDIwMzYzMDRECis6MTA0NTgwMDAwMDAwMDAwMDAwMDRBMDkzMDA2MDQ0MTEwMDAwMDY3Q0JECis6MTA0NTkwMDAwMDAwMDAzMjAwMjAzNjMwMDAwMDAwMDAwMDA0QTJCNjA3Cis6MTA0NUEwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMzMwMDIwMzYzMDFCCis6MTA0NUIwMDAwMDAwMDAwMDAwMDRBMkJBMDA2MDQ0MTEwMDAwMDY3QzY0Cis6MTA0NUMwMDAwMDAwMDAzNDAwMjAzNjMwMDAwMDAwMDAwMDA0QTJCRUNECis6MTA0NUQwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMDAwMzUwMDIwMzYzMEU5Cis6MTA0NUUwMDAwMDAwMDAwMDAwMDRBMkMyMDA2MDQ0MTEwMDAwMDY3QzJDCis6MTA0NUYwMDAwMDAwMDAzNjAwMjAzNjMwMDAwMDAwMDAwMDA0MjAwNEQ3Cis6MTA0NjAwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMUEyQTQwMDIwNDQxMUI3Cis6MTA0NjEwMDAwMDAwMDAwMDAwMDAwMDNGMDAyMDQ4MTEwMDAwMDAwMEUyCis6MTA0NjIwMDAwMDAwMDAzRjAwMjA0ODExMDAwMDAwMDAwMDAwMDAzRjkzCis6MTA0NjMwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwM0YwMDIwNDgxMTQ5Cis6MTA0NjQwMDAwMDAwMDAwMDAwMDAwMDA1MDAyMDQ4MTEwMDAwMDAwMEVDCis6MTA0NjUwMDAwMDAwQTFGNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDUwCis6MTA0NjYwMDAwMDIwNDgxMTAwMDAwMDAwODgwMDAwMDAwMDIwNDQxMUQ0Cis6MTA0NjcwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMEMwCis6MTA0NjgwMDA4MTAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwNjJFCis6MTA0NjkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDEwMDJGMDIzMDNGCis6MTA0NkEwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYxRkY5Cis6MTA0NkIwMDAwMDAwMDAzMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA0NkMwMDAwMDJGMDIyMTAwMDAwMDAwMDAwMDAwMDAwQ0UwMDAwMEFDCis6MTA0NkQwMDAwMDAwMDYxRjgxMDAwMDAwMDAyMDQ0MTEwMDAwMDAwMEJGCis6MTA0NkUwMDAwMDAwMDAwMTAwMjA0ODExMDAwMDAwMDAwMDAwN0UwMEQyCis6MTA0NkYwMDAwMDI4MDYyMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTE5Cis6MTA0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDVGOEMwCis6MTA0NzEwMDAwMDAwQTA5MjAwMjA0NDExMDAwMDAwMDAwMDAwMDAzMUMxCis6MTA0NzIwMDAwMDIwNEEyRDAwMDAwMDAwMDAwMEEwOTMwMDIwNDQxMTRBCis6MTA0NzMwMDAwMDAwMDAwMDAwMDAwMDMyMDAyMDRBMkQwMDAwMDAwMEIwCis6MTA0NzQwMDAwMDAwQTJCNjAwMjA0NDExMDAwMDAwMDAwMDAwMDAzMzY5Cis6MTA0NzUwMDAwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQkEwMDIwNDQxMUYxCis6MTA0NzYwMDAwMDAwMDAwMDAwMDAwMDM0MDAyMDRBMkQwMDAwMDAwMDdFCis6MTA0NzcwMDAwMDAwQTJCRTAwMjA0NDExMDAwMDAwMDAwMDAwMDAzNTJGCis6MTA0NzgwMDAwMDIwNEEyRDAwMDAwMDAwMDAwMEEyQzIwMDIwNDQxMUI5Cis6MTA0NzkwMDAwMDAwMDAwMDAwMDAwMDM2MDAyMDRBMkQwMDAwMDAwMDRDCis6MTA0N0EwMDAwMDAwMDAzMDAwMjAwNjJEMDAwMDAwMDAwMDAwMDFGRjg2Cis6MTA0N0IwMDAwMDI4MDYyMTAwMDAwMDAwMDAwMDAwMDAwMDJGMDIyMTU4Cis6MTA0N0MwMDAwMDAwMDAwMDAwMDAwMDAwMENFMDAwMDAwMDAwMDYxRUQ5Cis6MTA0N0QwMDAwMDAwMDAwMDAwMjEwMjIxMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTA0N0UwMDAxNEMwMDAwMDAwMDAwNjAxMDAwNEEwMDMwMDYwNDQxMTkyCis6MTA0N0YwMDAwMDAwMDY3QzAwMDBBMDAzMDAyMDQ0MTEwMDAwMDAwMDFGCis6MTA0ODAwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAwMDAwMDAwMTJGCis6MTA0ODEwMDAwMDIxMDYyMTAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDdDCis6MTA0ODIwMDAwMDAwMDYwNjAwMDRBMDEwMDA2MDQ0MTEwMDAwMDY3QzkxCis6MTA0ODMwMDAwMDAwQTAxMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDUzCis6MTA0ODQwMDAwMDIwNDgxMDAwMDAwMDAwMDAwMDAwMDEwMDIxMDYyMUE3Cis6MTA0ODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDA2Cis6MTA0ODYwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MUUwMDA0QTAxMTgzCis6MTA0ODcwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMEEwMTEwMDIwNDQxMURCCis6MTA0ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMEIwCis6MTA0ODkwMDAwMDA0QTAxMjAwNjA0NDExMDAwMDA2N0MwMDAwQTAxMjc5Cis6MTA0OEEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDFCCis6MTA0OEIwMDAwMDAwMDAwMDAwMDRBMDEzMDA2MDQ0MTEwMDAwMDY3QzBBCis6MTA0OEMwMDAwMDAwQTAxMzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0OEQwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNEEwMTQwMDYwNDQxMUYzCis6MTA0OEUwMDAwMDAwMDY3QzAwMDBBMDE0MDAyMDQ0MTEwMDAwMDAwMDFECis6MTA0OEYwMDAwMDAwMDAwMDAwMjA0ODEwMDAwMDAwMDAwMDA0QTAxNTg3Cis6MTA0OTAwMDAwMDYwNDQxMTAwMDAwNjdDMDAwMEEwMTUwMDIwNDQxMTQ2Cis6MTA0OTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MTAwMDAwMDAwMDFGCis6MTA0OTIwMDAwMDA0QTAxNjAwNjA0NDExMDAwMDA2N0MwMDAwQTAxNkUwCis6MTA0OTMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMDhBCis6MTA0OTQwMDAwMDAwMDAwMDAwMDRBMDE3MDA2MDQ0MTEwMDAwMDY3Qzc1Cis6MTA0OTUwMDAwMDAwQTAxNzAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDJCCis6MTA0OTYwMDAwMDIwNDgxMDAwMDAwMDAwMDAwNDIwMDQwMDYwNDQxMUYyCis6MTA0OTcwMDAwMDAwMDY3QzAwMDAwMDJDMDA4MDA2MkQwMDAwMDAwMEQ2Cis6MTA0OTgwMDBGRjAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEIzCis6MTA0OTkwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMTI0Cis6MTA0OUEwMDAwMDAwMDAwMDAwMDAwMDAyMDA4MDQ4MTEwMDAwMDAwMDJDCis6MTA0OUIwMDAwMDAwMDAwMDBFRTAwMDAwMDAwMDA2MzAwMDAwMDAzMEEzCis6MTA0OUMwMDAwMDIwMDYyRDAwMDAwMDAwMDAwMDAwMDIwMDI4MDYyMTQzCis6MTA0OUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjAyMjEwMDAwMDAwMDg1Cis6MTA0OUUwMDAwMDAwMDAwMDBDRTAwMDAwMDAwMDA2MkU4MTAwMDAwMDI2Cis6MTA0OUYwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUM4Cis6MTA0QTAwMDAwMDAwMDAwMDAwMDQyMDA0MDA2MDQ0MTEwMDAwMDY3QzQ3Cis6MTA0QTEwMDAwMDAwMTAwMDAwMjAwODExMDAwMDAwMDAwMDAwMDAyQjIyCis6MTA0QTIwMDAwMDIwMzYyMjAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMEFFCis6MTA0QTMwMDAwMDAwMDYzNDAwMDAwMDAwMDA2MDAwMDAwMDAwMDVCQzFCCis6MTA0QTQwMDA5ODAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTA0QTUwMDAwMDgwNDgxMTAwMDAwMDAwMDAwMDAwMDBDMDYwMDAwMDVECis6MTA0QTYwMDAwMDAwMDYzNDAwMDAwMDAwQzA0MDA0MDAwMDAwMDAwMTA3Cis6MTA0QTcwMDAwMDAwQTJBNDAwMjA0NDExMDAwMDAwMDAwMDAwMDAyMjU5Cis6MTA0QTgwMDAwMDIwNDgxMTAwMDAwMDAwODkwMDAwMDAwMDIwNDQxMUFGCis6MTA0QTkwMDAwMDAwMDAwMDAwMDAwMDAxMDA0MDQ4MTEwMDAwMDYyMDU2Cis6MTA0QUEwMDA5NzAwMDAwMDAwMjA0NDExMDAwMDAwMDAwMDAwMDAwMEZBCis6MTA0QUIwMDAwMDIwNDgxMTAwMDAwMDAwOEEwMDAwMDAwMDIwNDQxMTdFCis6MTA0QUMwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQ4MTEwMDAwMDYyMDI3Cis6MTA0QUQwMDAwMDAwMDAwMDAwNjAwMDAwMDAwMDA2NEQwMDAxQTJBNERDCis6MTA0QUUwMDBDMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYwMDYwNDgxMUMyCis6MTA0QUYwMDAwMDAwMDM2QTAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMEE0Cis6MTA0QjAwMDAwMDAxMDAwMDAwMjA0ODExMDAwMDAwMDA4MTAwMDAwMEFBCis6MTA0QjEwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMDEwMDIwNDgxMUE2Cis6MTA0QjIwMDAwMDAwMDAwMDAwMDAyMTdDMDAyMDQ0MTEwMDAwMDAwMDczCis6MTA0QjMwMDAwOTgwMDAwMDAwMjA0ODExMDAwMDAwMDBGRkZGRkZGRjc3Cis6MTA0QjQwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTczCis6MTA0QjUwMDAwMDAwMDAwMDAwMDAwMDAwMTcwMDAwMDAwMDAwMDAwMDNFCis6MTA0QjYwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2N0MwMDAwMDAxRjRCCis6MTA0QjcwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMDBFCis6MTA0QjgwMDAwMDAwMDAwMDAwMDAwMDA0MDA0MDRDMTEwMDAwMDY0NzM3Cis6MTA0QjkwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAxN0JFCis6MTA0QkEwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMDQwMDI5MUUyNzI4Cis6MTA0QkIwMDAwMDAwMDAwMDAwMDAwMDE3MDA4MDM2MjcwMDAwMDAwMDAxCis6MTA0QkMwMDAwMDAwMDAxNzAwMjAxRTJEMDAwMDAwMDBGRkZGRkZGQjZCCis6MTA0QkQwMDAwMDI4MUUyNzAwMDAwMDAwMDAwMDAwMTcwMDgwMzYyNzc0Cis6MTA0QkUwMDAwMDAwMDAwMDAwMDAwMDE3MDAyMDFFMkQwMDAwMDAwMDQzCis6MTA0QkYwMDAwMDAwMDAwODAwMjkxRTI3MDAwMDAwMDAwMDAwMDAxNzI4Cis6MTA0QzAwMDAwMDgwMzYyNzAwMDAwMDAwMDAwMDAwMTcwMDIwMUUyRDQ1Cis6MTA0QzEwMDAwMDAwMDAwMEZGRkZGRkY3MDAyODFFMjcwMDAwMDAwMDMzCis6MTA0QzIwMDAwMDAwMDAxNzAwODAzNjI3MDAwMDAwMDAwMDAxQTJBNDQ5Cis6MTA0QzMwMDAwMDIwNDQxMTAwMDAwMDAwMDAwMDAwMTYwMDYwNDgxMTMwCis6MTA0QzQwMDAwMDAwMDM2QTAwMDAyMDEwMDAyMDQ0MTEwMDAwMDAwMDUyCis6MTA0QzUwMDAwMDAxMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMjE3QzNECis6MTA0QzYwMDAwMDIwNDQxMTAwMDAwMDAwMDE4MDAwMDAwMDIwNDgxMUQ1Cis6MTA0QzcwMDAwMDAwMDAwMEZGRkZGRkZGMDAyMDQ4MTEwMDAwMDAwMEJGCis6MTA0QzgwMDAwMDAwMDAwMDAwMjA0ODExMDAwMDAwMDAwMDAwMDAwMEFCCis6MTA0QzkwMDAxNzAwMDAwMDAwMDAwMDAwODEwMDAwMDAwMDIwNDQxMTA3Cis6MTA0Q0EwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDhBCis6MTA0Q0IwMDAwMDA0MjE3RjAwNjA0NDExMDAwMDA2N0MwMDAwMDAxRkZBCis6MTA0Q0MwMDAwMDIxMDIzMDAwMDAwMDAwMDAwMDAwMDAxNEMwMDAwMEJECis6MTA0Q0QwMDAwMDAwMDY3QjAwMDAwMDEwMDA0MDRDMTEwMDAwMDY2MTNGCis6MTA0Q0UwMDAwMDAwMDAwMEMwMjAwNDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA0Q0YwMDAzOEMwMDAwMDAwMDAwMDAwMDAwMDAwMUQwMDIwMEEyRDQ4Cis6MTA0RDAwMDAwMDAwMDAwMDAwMDAwMDFFMDAyMDBFMkQwMDAwMDAwMDJBCis6MTA0RDEwMDAwMDAwMDAxRjAwMjAxMjJEMDAwMDAwMDAwMDAwMDAyMEY1Cis6MTA0RDIwMDAwMDIwMTYyRDAwMDAwMDAwMDAwMDIxNjkwMDIwNDQxMTIxCis6MTA0RDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDQ4MDQwMDAwMDAwMDA3Cis6MTA0RDQwMDAwMDAwMDAwMDAwMjA0ODA1MDAwMDAwMDAwMDAwMDAwMEY2Cis6MTA0RDUwMDAwMDIwNDgwMTAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTMxCis6MTA0RDYwMDAwMDAwMDAwMDAwMDAwMDA0MDAzMDEyMjQwMDAwMDAwMEQ5Cis6MTA0RDcwMDAwMDAwMDAwMDAwMkYwMDY0MDAwMDAwMDAwMDAwMDAwMEEwCis6MTA0RDgwMDAwQ0MwMDAwMDAwMDAwNjdBMDAwMDAwMDMwMDI4MUEyMjcwCis6MTA0RDkwMDAwMDAwMDAwMDAwMDAwMDA4MDAyMjEyMjIwMDAwMDAwMEI1Cis6MTA0REEwMDBGRkZGRjAwMDAwMjgxMjI0MDAwMDAwMDAwMDAwMDAwMEI3Cis6MTA0REIwMDAwMDI5MTBDNDAwMDAwMDAwMDAwMDAwMUYwMDQwMzYyNDNECis6MTA0REMwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDYzCis6MTA0REQwMDAwMDAwMDAwMDFBQzAwMDAwMDAwMDA2N0M5RjAwMDAwMEQ4Cis6MTA0REUwMDAwMDIwNDQxMTAwMDAwMDAwQ0FGRUJBQkUwMDIwNDgxMTk1Cis6MTA0REYwMDAwMDAwMDAwMDAwMDAwMDAwMUFFMDAwMDAwMDAwMDY3RjM0Cis6MTA0RTAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTA0RTEwMDAxQUMwMDAwMDAwMDAwNjgxOUUwMDAwMDAwMDIwNDQxMTFFCis6MTA0RTIwMDAwMDAwMDAwMENBRkVCQUJFMDAyMDQ4MTEwMDAwMDAwMEM5Cis6MTA0RTMwMDAwMDAwMDAwMDFBRTAwMDAwMDAwMDA2ODQwMDAwMDAwMEVFCis6MTA0RTQwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDgyCis6MTA0RTUwMDAwMDAwMDAwQjAwMDAxMDAwMDA2MDA0MTEwMDAwMDMxNUFBCis6MTA0RTYwMDAwMDAwMDAwMDAwMjAwNDExMDAwMDAwMDAwMDAwMDAwMDBECis6MTA0RTcwMDAwMDYwMDgxMTAwMDAwMUIyMDAwMDIyNUMwMDIwNDQxMTEzCis6MTA0RTgwMDAwMDAwMDAwMDAwMDAwMDAzMDAyMDQ4MTEwMDAwMDAwMEE2Cis6MTA0RTkwMDAwMDAwMjI1NjAwMjA0NDExMDAwMDAwMDAwMDAwMDAxQjBBCis6MTA0RUEwMDAwMDIwNDgxMTAwMDAwMDAwMDAwMEExRkMwMDIwNDQxMTc3Cis6MTA0RUIwMDAwMDAwMDAwMDAwMDAwMDAxMDAyMDQ4MTEwMDAwMDAwMDc4Cis6MTA0RUMwMDAwMDAxQTFGREMwMjA0NDExMDAwMDAwMDAwMDAwMDAyMUVECis6MTA0RUQwMDAwMDIwMUUyRDAwMDAwMDAwMDAwMDAwMTAwMDIyMUUyN0YwCis6MTA0RUUwMDAwMDAwMDAwMDAwMDAwMDI0MDAyMDIyMkQwMDAwMDAwMDJGCis6MTA0RUYwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDQyCis6MTA0RjAwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMUFGCis6MTA0RjEwMDAwMDAwMDAwMDAwMDAwMDIyMDAyMDIyMkQwMDAwMDAwMDAwCis6MTA0RjIwMDAwMDAwRkZGRjAwMjgyMjI4MDAwMDAwMDAwMDAwMDAwMDExCis6MTA0RjMwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDIwNDgxMTdGCis6MTA0RjQwMDAwMDAwMDAwMDAwMDAwMDIzMDAyMDFFMkQwMDAwMDAwMEQzCis6MTA0RjUwMDAwMDAwMDAxMDAwMjIxRTI3MDAwMDAwMDAwMDAwMDAwMERBCis6MTA0RjYwMDAwMDI5NDkwNzAwMDAwMDAwMDAwMDAwMDAwMDQwNDgxMTJGCis6MTA0RjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTA0RjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTA0RjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTA0RkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTA0RkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTA1MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA1MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTA1MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA1MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA1MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTA1MEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA1MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTA1MTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTA1MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTA1MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTA1MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA1MjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA1MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTA1MkIwMDAwMTQyMDRGNTA1QjMwMjUwMDAwMDAwMDAwMUMzMDE2ODdCCis6MTA1MkMwMDAwNDM1MDVCMzAwMDAwMDAwMDIyNTAyMDkwMjUwMDE1MTE3Cis6MTA1MkQwMDAwMDAwMDAwMDAyMjMwMjQ1MDJBMDAyNDEwMDAwMDAwMDdECis6MTA1MkUwMDAwM0NEMDVCMzA1QjMwNUIzMDAwMDAwMDAwNjNDMDYzRDQxCis6MTA1MkYwMDAwMzFGMDVCMzAwMDAwMDAwMDVCMzA1QjgwMzIwMDM0MEY5Cis6MTA1MzAwMDAwMDAwMDAwMDAzMkEwMjgyMDM0MjAzMzQwMDAwMDAwMDcwCis6MTA1MzEwMDAwNUIzMDVCMzA1QjMwNUIzMDAwMDAwMDAwNUIzMDU0NEFDCis6MTA1MzIwMDAwNUIzMDVCMzAwMDAwMDAwMDNCMjA1QjMwNEFFMDM0NEE3Cis6MTA1MzMwMDAwMDAwMDAwMDA0OEQwNDQzMDQzMzA1QjMwMDAwMDAwMEE2Cis6MTA1MzQwMDAwNEMzMDVCMzA0MzcwNEQwMDAwMDAwMDAwNDQzMDRGQThBCis6MTA1MzUwMDAwMzUxMDM3MTAwMDAwMDAwMDVCMzA1QjMwNUIzMDVCM0E1Cis6MTA1MzYwMDAwMDAwMDAwMDA1QjMwNUIzMDVCMzA1QjMwMDAwMDAwMDVECis6MTA1MzcwMDAwNUIzMDVCMzA2MzIwNUJBMDAwMDAwMDAwNUIzMDVCMzU2Cis6MTA1MzgwMDAwMDA3MDVCMzAwMDAwMDAwMDVCMzA1QjMwNUIzMDVCMzdFCis6MTA1MzkwMDAwMDAwMDAwMDA1QjMwNUIzMDVCMzA1QjMwMDAwMDAwMDJECis6MTA1M0EwMDAwM0VFMDNFMzAzRkUwM0ZDMDAwMDAwMDAwNDA0MDQwMDFBCis6MTA1M0IwMDAwNDAyMDQwNjAwMDAwMDAwMDQxMjA0MEUwNDFBMDQxNjdECis6MTA1M0MwMDAwMDAwMDAwMDA0MjIwNDFFMDQyQTA0MjYwMDAwMDAwMDNECis6MTA1M0QwMDAwNUIzMDVCMzA0MkUwNUIzMDAwMDAwMDAwNUIzMDVCMzAzCis6MTA1M0UwMDAwNUIzMDVCMzAwMDAwMDAwMDVCMzA1QjMwNUIzMDVCMzZECis6MTA1M0YwMDAwMDAwMDAwMDAwMDIwNjY4MDY4NjAwMDYwMDAwMDAwMEFCCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNjcwX3BmcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjY3MF9wZnAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1MjkyYwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjY3MF9wZnAuYmluLmloZXgKQEAgLTAsMCArMSwxNDUgQEAKKzoxMDAwMDAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwN0MwMzhCRUQKKzoxMDAwMTAwMDAwODAwMUI4MDA3QzAzOEIwMEQ0NDAxRTAwRUUwMDFFNUYKKzoxMDAwMjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwQzQxODM4QzMKKzoxMDAwMzAwMDAwQ0EyNDAwMDBDQTI4MDAwMDk1ODFBODAwQzQxQzNBMDgKKzoxMDAwNDAwMDAwQzNDMDAwMDBDQTA4MDAwMENBMEMwMDAwN0M3NDRCNEEKKzoxMDAwNTAwMDAwQzIwMDA1MDA5OUMwMDAwMEM0MUMzQTAwN0M3NDRDMkEKKzoxMDAwNjAwMDAwQzBGRkYwMDAwNDJDMDQwMDMwOTAwMjAwN0QyNTAwNDkKKzoxMDAwNzAwMDAwMzUxNDAyMDA3RDM1MEIwMDI1NTQwMzAwN0NENTgwMkIKKzoxMDAwODAwMDAwMjU5QzAzMDA5NUMwMDQwMEQ1MDAxQjAwN0VEREMxNDcKKzoxMDAwOTAwMDAwN0Q5RDgwMDBENjgwMUIwMEQ1ODAxQjAwRDQ0MDFFQjMKKzoxMDAwQTAwMDAwRDU0MDFFMDBENjQwMUUwMEQ2ODAxRTAwRDQ4MDFFMDMKKzoxMDAwQjAwMDAwRDRDMDFFMDA5NzgzRDMwMEQ1QzAxRTAwQ0EwODAwMUMKKzoxMDAwQzAwMDAwODAwMDFBMDBDQTBDMDAwMEU0MDExRTAwRDQwMDFFQ0IKKzoxMDAwRDAwMDAwODAwMDBDMDBDNDE4MzgwMEU0MDEzRTAwRDQwMDFFNkIKKzoxMDAwRTAwMDAwODAwMDBDMDBDNDE4MzgwMEQ0NDAxRTAwRUUwMDFFMzIKKzoxMDAwRjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwRTQwMTFFMDQKKzoxMDAxMDAwMDAwRDQwMDFFMDBENDQwMUUwMEVFMDAxRTAwQ0EwNDAwRjEKKzoxMDAxMTAwMDAwQTAwMDAwMDA3RTgyOEIwMEU0MDEzRTAwRDQwMDFFOUYKKzoxMDAxMjAwMDAwRDQ0MDFFMDBFRTAwMUUwMENBMDQwMDAwQTAwMDAwMjMKKzoxMDAxMzAwMDAwN0U4MjhCMDBDQTE4MDAwMEQ0NDAxRTAwRDU4MDFFQUQKKzoxMDAxNDAwMDAwODAwMDUzMDBENDAwNzUwMEQ0NDAxRTAwQ0EwODAwOEYKKzoxMDAxNTAwMDAwQ0EwQzAwMDBDQTEwMDAwMEQ0ODAxOTAwRDRDMDE4RDYKKzoxMDAxNjAwMDAwRDUwMDE3MDBENDgwMUUwMEQ0QzAxRTAwRDUwMDFFOEMKKzoxMDAxNzAwMDAwRTIwMDFFMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCODYKKzoxMDAxODAwMDAwQ0EwODAwMDBENDgwNjAwMEQ0NDAxRTAwODAwMDAwMzcKKzoxMDAxOTAwMDAwRDQ4MDFFMDBDQTA4MDAwMEQ0ODA2MTAwRDQ0MDFFMzQKKzoxMDAxQTAwMDAwODAwMDAwMDBENDgwMUUwMENBMDgwMDAwQ0EwQzAwQjUKKzoxMDAxQjAwMDAwRDQ0MDFFMDBENDgwMTYwMEQ0QzAxNjAwRDQ4MDFFODcKKzoxMDAxQzAwMDAwODAwMUI4MDBENEMwMUUwMEM2MDg0MzAwQ0EwQzAwNUQKKzoxMDAxRDAwMDAwQ0ExMDAwMDA5NDgwMDQwMENBMTQwMDAwRTQyMEYzNTgKKzoxMDAxRTAwMDAwRDQyMDEzMDBENTYwNjUwMEQ0RTAxQzAwRDUyMDFDOEQKKzoxMDAxRjAwMDAwRDU2MDFDMDA4MDAwMDAwMDA2MjAwMTAwQzYwODQzRjYKKzoxMDAyMDAwMDAwQ0EwQzAwMDBDQTEwMDAwMDk0ODNGNzAwQ0ExNDAwNTIKKzoxMDAyMTAwMDAwRTQyMEYzMDA4MDAwNzkwMEQ0MjAxMzAwQzYwODQzRDYKKzoxMDAyMjAwMDAwQ0EwQzAwMDBDQTEwMDAwMDk4ODNFRjAwQ0ExNDAwMzYKKzoxMDAyMzAwMDAwRDQwMDY0MDA4MDAwOEQwMDAwMDAwMDAwQzQxNDMyNkYKKzoxMDAyNDAwMDAwQzYxODQzMDBDNDA4MkYwMDk1NDAwNTAwQzQwQzMwQjgKKzoxMDAyNTAwMDAwRDQ0MDFFMDA4MDAwMDAwMEVFMDAxRTAwOTU4M0Y1RDMKKzoxMDAyNjAwMDAwQzQxMDMxMDBENDQwMzMwMEQ1MjA2NTAwRDRBMDFDNTgKKzoxMDAyNzAwMDAwRDRFMDFDMDBENTIwMUMwMEU0MDE1RTAwRDQwMDFFNjgKKzoxMDAyODAwMDAwODAwMDAwMDAwNjIwMDEwMENBMTgwMDAwMEEyMDAxQkEKKzoxMDAyOTAwMDAwRDYwMDc2MDBDNDA4MzYwMDk4ODAwNzAwQzYxMDQ1RDYKKzoxMDAyQTAwMDAwOTUwMTEwMDBENDAwMUYwMEQ0NjA2MjAwODAwMDAwOUYKKzoxMDAyQjAwMDAwRDQyMDYyMDBDQzM4MzUwMENDMTQzMzAwODQwMUJCNUMKKzoxMDAyQzAwMDAwRDQwMDcyMDBENTQwMUUwMDgwMDAwMDAwRUUwMDFFMjkKKzoxMDAyRDAwMDAwRTIwMDFBMDA4NDAxQkIwMEUyMDAxQTAwQ0MxMDRCQkYKKzoxMDAyRTAwMDAwQ0MwNDQ3MDAyQzk0MDEwMDdEMDk4QjAwOTg0MDA1NDgKKzoxMDAyRjAwMDAwN0QxNUNCMDBENDAwMUEwMDgwMDFCODAwRDQwMDZEMzkKKzoxMDAzMDAwMDAwMzQ0NDAxMDBDQzBDNDgwMDk4NDAzQTAwQ0MyQzRBMDAKKzoxMDAzMTAwMDAwOTU4MDA0MDBDQzA0NDkwMDgwMDFCODAwRDQwMDFBODQKKzoxMDAzMjAwMDAwRDRDMDFBMDAyODI4MDEwMDg0MDBGMDAwQ0MxMDAzN0IKKzoxMDAzMzAwMDAwOTg4MDFCMDAwNDM4MEMwMDg0MDBGMDAwQ0MxMDAzRUYKKzoxMDAzNDAwMDAwOTg4MDE3MDAwNDM4MDgwMDg0MDBGMDAwQ0MxMDAzRTcKKzoxMDAzNTAwMDAwOTg4MDEzMDAwNDM4MDQwMDg0MDBGMDAwQ0MxMDAzREYKKzoxMDAzNjAwMDAwOTg4MDE0MDBDQzEwNEMwMDlBODAwOTAwQ0MxNDRERTkKKzoxMDAzNzAwMDAwOTg0MERDMDBENDAwNkQwMENDMTg0ODAwRDUwMDFBNkQKKzoxMDAzODAwMDAwRDU0MDFBMDA4MDAwQzkwMEQ1ODAxQTAwOTZDMEQ1NUIKKzoxMDAzOTAwMDAwRDQwMDZEMDA4MDAxQjgwMEQ0MDA2RTAwOUFDMDAzNDQKKzoxMDAzQTAwMDAwRDQwMDZEMDBENDAwNkUwMDgwMDAwMDAwRUMwMDdGREYKKzoxMDAzQjAwMDAwOUFDMENDMDBENDAwNkQwMDgwMDFCODAwRDQwMDZFNUIKKzoxMDAzQzAwMDAwQ0MxNDAzMDBDQzE4MDMwMENDMUMwMzAwN0Q5MTAzNjcKKzoxMDAzRDAwMDAwN0RENTgzMDA3RDE5MEMwMDM1Q0MxRjAwMzU3MDFGQzIKKzoxMDAzRTAwMDAwN0NGMENCMDA3Q0QwOEIwMDg4MDAwMDAwN0U4RThCRTAKKzoxMDAzRjAwMDAwOTVDMDA0MDBENDAwNkUwMDgwMDFCODAwRDQwMDFBM0IKKzoxMDA0MDAwMDAwRDRDMDFBMDBDQzA4MDMwMENDMEMwMzAwQ0MxMDAzQUQKKzoxMDA0MTAwMDAwQ0MxNDAzMDBDQzE4MDMwMENDMUMwMzAwQ0MyNDAzMzQKKzoxMDA0MjAwMDAwQ0MyODAzMDAzNUM0MUYwMDM2QjAxRjAwN0M3MDRCODEKKzoxMDA0MzAwMDAwMzRGMDFGMDA3QzcwNEIwMDM1NzAxRjAwN0M3MDRCNDcKKzoxMDA0NDAwMDAwN0Q4ODgxMDA3RENDQzEwMDdFNTEwMTAwN0U5NTQxRjgKKzoxMDA0NTAwMDAwN0M5MDgyMDA3Q0Q0QzIwMDdDODQ4QjAwOUFDMDAzMTQKKzoxMDA0NjAwMDAwN0M4QzhCMDAyQzg4MDEwMDk4ODA5RTAwRDQwMDZENEQKKzoxMDA0NzAwMDAwOTg0MDlDMDBENDAwNkUwMENDMDg0QzAwQ0MwQzREODEKKzoxMDA0ODAwMDAwQ0MxMDQ4MDBENDgwMUEwMEQ0QzAxQTAwODAwMTAxQUEKKzoxMDA0OTAwMDAwRDUwMDFBMDBDQzA4MzIwMEQ0MDAzMjAwOTQ4MkQ5NzIKKzoxMDA0QTAwMDAwQ0EwQzAwMDBENDQwMUUwMDgwMDAwMDAwRDQwMDFFRDIKKzoxMDA0QjAwMDAwRTQwMTFFMDBENDAwMUUwMENBMDgwMDAwQ0EwQzAwOUYKKzoxMDA0QzAwMDAwQ0ExMDAwMDBENDQwMUUwMENBMTQwMDAwRDQ4MDFFRDAKKzoxMDA0RDAwMDAwRDRDMDFFMDBENTAwMUUwMEQ1NDAxRTAwRDU0MDM0RkIKKzoxMDA0RTAwMDAwODAwMDAwMDBFRTAwMUUwMDI4MDQwNDAwRTIwMDFBNTQKKzoxMDA0RjAwMDAwRTIwMDFBMDBENDQwMUEwMENBMzgwMDAwQ0MwODAzRjkKKzoxMDA1MDAwMDAwQ0MwQzAzMDBDQzBDMDMwMENDMEMwMzAwOTg4MkJEODMKKzoxMDA1MTAwMDAwMDAwMDAwMDA4NDAxQkIwMEQ3QTA2RjAwODAwMDAwMzUKKzoxMDA1MjAwMDAwRUUwMDFGMDBDQTA0MDAwMEMyRkYwMDAwQ0MwODM0MjcKKzoxMDA1MzAwMDAwQzEzRkZGMDA3Qzc0Q0IwMDdDQzkwQjAwN0QwMTBGMjQKKzoxMDA1NDAwMDAwOTkwMkIwMDA3QzczOEIwMDg0MDFCQjAwRDdBMDZGQzAKKzoxMDA1NTAwMDAwODAwMDAwMDBFRTAwMUYwMENBMDgwMDAwMjgxOTAwRkIKKzoxMDA1NjAwMDAwN0Q4OThCMDA5NTgwMTQwMDI4MTQwNDAwQ0EwQzAwQkIKKzoxMDA1NzAwMDAwQ0ExMDAwMDBDQTFDMDAwMENBMjQwMDAwRTIwMDFGQ0MKKzoxMDA1ODAwMDAwRDRDMDFBMDBENTAwMUEwMEQ1NDAxQTAwQ0MxODAzQjgKKzoxMDA1OTAwMDAwQ0MyQzAzMDBDQzJDMDMwMENDMkMwMzAwN0RBNThCQkQKKzoxMDA1QTAwMDAwN0Q5QzQ3MDA5ODQyOTcwMDAwMDAwMDAwODAwMTYxOTgKKzoxMDA1QjAwMDAwRDRDMDFBMDBENDQwMUUwMEQ0ODAxRTAwODAwMDAwNjkKKzoxMDA1QzAwMDAwRUUwMDFFMDBFNDAxMUUwMEQ0MDAxRTAwRDQ0MDFFRjgKKzoxMDA1RDAwMDAwRUUwMDFFMDBDQTA0MDAwMEEwMDAwMDAwN0U4MjhCMTYKKzoxMDA1RTAwMDAwRTQwMTNFMDBENDAwMUUwMEQ0NDAxRTAwRUUwMDFFQjgKKzoxMDA1RjAwMDAwQ0EwNDAwMDBBMDAwMDAwMDdFODI4QjAwQ0EwODAwMzAKKzoxMDA2MDAwMDAwMjQ4QzA2MDAwQ0NDMDYwMDk4QzAwNjAwQ0MxMDRFQ0UKKzoxMDA2MTAwMDAwOTkwMDA0MDBENDAwNzMwMEU0MDExRTAwRDQwMDFFMDEKKzoxMDA2MjAwMDAwRDQ0MDFFMDBENDgwMUUwMDgwMDAwMDAwRUUwMDFFOUEKKzoxMDA2MzAwMDAwQ0EwODAwMDBDQTBDMDAwMDM0RDAxODAwMjUxMDAxQzAKKzoxMDA2NDAwMDAwOTUwMDIxMDBDMTdGRkYwMENBMTAwMDAwQ0ExNDAwRkQKKzoxMDA2NTAwMDAwQ0ExODAwMDBENDgwMUQwMEQ0QzAxRDAwN0RCMThCREQKKzoxMDA2NjAwMDAwQzE0MjAyMDBDMkMwMDEwMEQ1ODAxRDAwMzREQzBFNzIKKzoxMDA2NzAwMDAwN0Q1RDRDMDA3RjczNEMwMEQ3NDAxRTAwRDUwMDFFRUUKKzoxMDA2ODAwMDAwRDU0MDFFMDBDMTQyMDAwMEMyQzAwMDAwMDk5QzAxMEMKKzoxMDA2OTAwMDAwMzFEQzEwMDA3RjVGNEMwMDdGNzM0QzAwMDQyODAyQTcKKzoxMDA2QTAwMDAwN0Q4MzgwMDBENUE4NkYwMEQ1ODA2NjAwRDc0MDFFRUUKKzoxMDA2QjAwMDAwRUMwMDVFMDBDODI0MDIwMEM4MjQwMjAwODAwMUI4REIKKzoxMDA2QzAwMDAwRDYwMDc2MDBENDQwMUUwMEQ0ODAxRTAwRDRDMDFFODgKKzoxMDA2RDAwMDAwODAwMDAwMDBFRTAwMUUwMDgwMDAwMDAwRUUwMDFGMDEKKzoxMDA2RTAwMDAwRDQwMDFGMDA4MDAwMDAwMEQ0MDAxRjAwRDQwMDFGQjEKKzoxMDA2RjAwMDAwODgwMDAwMDBENDAwMUYwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMDA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDA3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMDA3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDA3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDA3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDA3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDA3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDA3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDA3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDA4MDAwMDAwMDEwMTcxMDAwMjAxNzgwMDAzMDA4RjAwMDQwMDdGRTUKKzoxMDA4MTAwMDAwMDUwMDAzMDAwNjAwM0YwMDA3MDAzMjAwMDgwMTJDMUQKKzoxMDA4MjAwMDAwMDkwMDQ2MDAwQTAwMzYwMDEwMDFCNjAwMTcwMEEyQjkKKzoxMDA4MzAwMDAwMjIwMTNBMDAyMzAxNDkwMDIwMDBCNDAwMjQwMTI1RDAKKzoxMDA4NDAwMDAwMjcwMDREMDAyODAwNkEwMDJBMDA2MDAwMkIwMDUyOUIKKzoxMDA4NTAwMDAwMkYwMDY1MDAzMjAwODcwMDM0MDE3RjAwM0MwMTU2MDQKKzoxMDA4NjAwMDAwM0YwMDcyMDA0MTAxOEMwMDQ0MDEyRTAwNTUwMTczQ0QKKzoxMDA4NzAwMDAwNTYwMTdBMDA2MDAwMEIwMDYxMDAzNDAwNjIwMDM4MEQKKzoxMDA4ODAwMDAwNjMwMDM4MDA2NDAwMzgwMDY1MDAzODAwNjYwMDM4RjYKKzoxMDA4OTAwMDAwNjcwMDM4MDA2ODAwM0EwMDY5MDA0MTAwNkEwMDQ4QkIKKzoxMDA4QTAwMDAwNkIwMDQ4MDA2QzAwNDgwMDZEMDA0ODAwNkUwMDQ4NzYKKzoxMDA4QjAwMDAwNkYwMDQ4MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2NkYKKzoxMDA4QzAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MTAKKzoxMDA4RDAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2MDAKKzoxMDA4RTAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RjAKKzoxMDA4RjAwMDAwMDAwMDA2MDAwMDAwMDYwMDAwMDAwNjAwMDAwMDA2RTAKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY3MTBfbWUuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY3MTBfbWUuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkZmUzMAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjcxMF9tZS5iaW4uaWhleApAQCAtMCwwICsxLDM0MSBAQAorOjEwMDAwMDAwQ0MwMDAzRUEwNDA4MDAwM0NDODAwMDQzN0M0MDgwMDA1RAorOjEwMDAxMDAwQTAwMDAwMDBDQzgwMDA2MjgwMDAwMDAzRDA0MDAwN0Y4MAorOjEwMDAyMDAwODAwMDAwMDNDQzQwMDA0MTdDNDBDMDAwQzAxNjAwMDRBQQorOjEwMDAzMDAwMzBEMDNGRkY3RDE1MDAwQ0NDMTEwMDAwMjhEODAwMUVFOQorOjEwMDA0MDAwMzE5ODAwMDEyOERDMDAxRkM4MjAwMDA0OTVDMDAwMDY3QworOjEwMDA1MDAwN0M0MjQwMDBDQzAwMDA2MjdFNTY4MDBDQ0MyOTAwMDAxRgorOjEwMDA2MDAwQzgyNDAwMDQ3RTI2MDAwQjk1ODAwMDA2N0M0MkMwMDA1OAorOjEwMDA3MDAwQ0MwMDAwNjI3RUQ3MDAwQ0NDMzEwMDAwQzgyQzAwMDRGQworOjEwMDA4MDAwN0UyRTAwMENDQzAwMDA2MjMxMTAzRkZGODAwMDAwMDM4OAorOjEwMDA5MDAwQ0UxMTAwMDA3QzQwQzAwMDgwMDAwMDAzQ0M0MDAwNDAzNgorOjEwMDBBMDAwODAwMDAwMDNDQzQxMjI1NzdDNDE4MDAwQ0M0MDAwNDVCOQorOjEwMDBCMDAwQ0M0MDAwNDhDQzQxMjI1Q0NDNDFBMUZDN0M0MDgwMDA3QgorOjEwMDBDMDAwQTAwMDAwMDBDQzgwMDA2MkNDNDAwMDQ1Q0M0MDAwNDgzRAorOjEwMDBEMDAwN0M0MEMwMDBDQzQxMjI1Q0NDNDFBMUZDN0M0MDgwMDAzMworOjEwMDBFMDAwQTAwMDAwMDBDQzgwMDA2MkNDMDAwMDQ1Q0MwMDAwNDg5RAorOjEwMDBGMDAwQ0M0MTIyNUNDQzQxQTFGQzdDNDA4MDAwQTAwMDAwMDBFRgorOjEwMDEwMDAwQ0M4MDAwNjIwNDBDQTFGREMwMTIwMDAxQ0MwMDAwNDVBRgorOjEwMDExMDAwQ0MwMDAwNDg3Q0QwQzAwQ0NDNDEyMjVDQ0M0MUExRkM3RQorOjEwMDEyMDAwRDA0RDAwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIyOAorOjEwMDEzMDAwODAwMDAwMDNDQzQxMjI1RDdDNDA4MDAwN0M0MEMwMDBGOAorOjEwMDE0MDAwQzAyQTAwMDI3QzQxMDAwMDdEMjkwMDBDMzA5NDAwMDE4RgorOjEwMDE1MDAwMzA5ODAwMDYzMDlDMDMwMDI5REMwMDA4N0M0MjAwMDAzNworOjEwMDE2MDAwN0M0MjQwMDA5NTQwMDAwRkMwMkUwMDA0MDVGMDIyNTg0QworOjEwMDE3MDAwN0YyRjAwMENDQzMxMDAwMEM4MjgwMDA0Q0NDMTIxNjlCRAorOjEwMDE4MDAwQ0QwMTIxNkFDRTgxMjE2QjBEQjQwMDAyQ0MwMTIxNkMxRQorOjEwMDE5MDAwOTc0MDAwMEUwREI0MDAwMDgwMDAwMDdEQzgzNDAwMEFCNgorOjEwMDFBMDAwMERCNDAwMDI5NzQwMDAwOTBEQjQwMDAwQzAyRTAwMDRGOQorOjEwMDFCMDAwMDVGMDIyNTg3RjJGMDAwQ0NDMzEwMDAwQzgyODAwMDQyNQorOjEwMDFDMDAwODAwMDAwN0RDODM0MDAwQTk3NDAwMDA0N0UwMjgwMDA1MQorOjEwMDFEMDAwODAwMDAwN0RDODM0MDAwQTBEQjQwMDA0OTc0MEZGOENGNQorOjEwMDFFMDAwMDAwMDAwMDBDRTAxMjE2RENFNDEyMTZFQzgyODAwMDMyMQorOjEwMDFGMDAwQzgzNDAwMEE5QjQwMDAwNDA0M0MwMDA1ODQwMDAyNkRFMgorOjEwMDIwMDAwQ0MwMDAwNjIwREY0MDAwMDk3NDAwMDBCQzgyQzAzRTYwMAorOjEwMDIxMDAwQ0U4MUEyQjdDMDMwMDAwNjdFRjM0MDI4QzAzMDAwMjA1NworOjEwMDIyMDAwN0Y2QjgwMjA3RkIzQzAyOUNGODFBMkM0ODAwMDAwMDNGMAorOjEwMDIzMDAwQ0ZDMUEyRDEwREY0MDAwMTk3NDAwMDBCQzgyQzAzRTdGOQorOjEwMDI0MDAwQ0U4MUEyQkJDMDMwMDAwNjdFRjM0MDI4QzAzMDAwMjAyMworOjEwMDI1MDAwN0Y2QjgwMjA3RkIzQzAyOUNGODFBMkM1ODAwMDAwMDNCRgorOjEwMDI2MDAwQ0ZDMUEyRDIwREY0MDAwMjk3NDAwMDBCQzgyQzAzRThDNgorOjEwMDI3MDAwQ0U4MUEyQkZDMDMwMDAwNjdFRjM0MDI4QzAzMDAwMjBFRgorOjEwMDI4MDAwN0Y2QjgwMjA3RkIzQzAyOUNGODFBMkM2ODAwMDAwMDM4RQorOjEwMDI5MDAwQ0ZDMUEyRDNDODJDMDNFOUNFODFBMkMzQzAzMDAwMDZDRgorOjEwMDJBMDAwN0VGMzQwMjhDMDMwMDAyMDdGNkI4MDIwN0ZCM0MwMjlDMAorOjEwMDJCMDAwQ0Y4MUEyQzc4MDAwMDAwM0NGQzFBMkQ0ODAwMDAwMDM3OQorOjEwMDJDMDAwQ0M0MDAwNDI3QzQwQzAwMDdDNDEwMDAwMjkxNDAwMUQ0RAorOjEwMDJEMDAwMzE1NDAwMDE5OTQwMDAwQzMxMTgxMDAwQzgxQzAwMTE2NQorOjEwMDJFMDAwOTVDMDAwMDBDODFDMDAxMUNDQzEyMTAwQ0QwMTIxMDEyNgorOjEwMDJGMDAwQ0NDMTIxMDJDRDAxMjEwMzA0MTgwMDA0ODAwMDAzN0UzQgorOjEwMDMwMDAwQ0Q4MUEyQTRDMDJBMDAwNDk1ODAwMDA4MzZBODIxQTNBQworOjEwMDMxMDAwQ0MyOTAwMDBDODI4MDAwNEM4MUMwMDExMERFNDAwNDBDRQorOjEwMDMyMDAwOTY0MEZGRkZDODFDMDAxMUNDQzEyMTcwQ0QwMTIxNzE4NgorOjEwMDMzMDAwQzgyMDAwMTI5NjAwMDAwMEM4MjAwMDEyODAwMDAzN0UzMgorOjEwMDM0MDAwQ0MwMDAwNjQ3QzQwQzAwMDdDNDEwMDAwQ0MwMDAwNDUzMworOjEwMDM1MDAwQ0MwMDAwNDg0MEQ0MDAwM0NENDEyMjVDQ0QwMUExRkM3QgorOjEwMDM2MDAwQzAxQTAwMDEwNDFDQTFGRDdERDlDMDBDN0M0MjAwMDAxNAorOjEwMDM3MDAwMDhDQzAwMDEwNjI0MDAwMTA2MjgwMDAyQ0UxRDAwMDA2MgorOjEwMDM4MDAwQ0U1RDAwMDA5OEMwRkZGQUNFOUQwMDAwN0M0MDgwMDA0QQorOjEwMDM5MDAwQTAwMDAwMDBDQzgwMDA2MjdDNDBDMDAwMzBEMDAwMDE5MgorOjEwMDNBMDAwMjhDQzAwMDE3QzQxNDAwMDk1MDAwMDA2N0M0MTgwMDA4MworOjEwMDNCMDAwQ0Q0MTIxNkRDRDgxMjE2RTgwMDAwMEY0QzgxQzAwMDM2OQorOjEwMDNDMDAwQzAyMjAwMDQ3RTE2MDAwQ0NDMjEwMDAwQzgxQzAwMDREMgorOjEwMDNEMDAwN0M0MjQwMDA5OEMwMDAwNDdDNDI4MDAwODAwMDAwMDMwMgorOjEwMDNFMDAwQ0RFNTAwMDBDRTQxMjE2OUNFODEyMTZBQ0RDMTIxNkJDRQorOjEwMDNGMDAwODAwMDAwMDNDQzAxMjE2QzdDNDBDMDAwN0M0MTAwMDBFNworOjEwMDQwMDAwN0M0MTQwMDA3QzQxODAwMDdDNDFDMDAwMjhBNDAwMDg2MQorOjEwMDQxMDAwMzI2NDAwRkYwRTY4MDAzQzk2ODAwMDBBN0MwMjAwMDBGNworOjEwMDQyMDAwN0M0MjAwMDAxRTMwMDAwM0NDMDAwMDZBOUIwMDAwMDNFOQorOjEwMDQzMDAwNDIyMDAwMDUwNDIwMDA0MDgwMDAwMTExN0MwMjQwMDBBMQorOjEwMDQ0MDAwN0UwMjQwMDA5QTQwMDAwMDBBNjQwMDAxMzBFQzAwMTA3NworOjEwMDQ1MDAwOUFDMDAwMEFDQzAwMDA2MkMwMkEwMDA0QzgyQzAwMjEwNworOjEwMDQ2MDAwN0U5MjgwMENDQzAwMDA0MUNDMjkwMDAwQ0VDMDAwMjEzRgorOjEwMDQ3MDAwODAwMDAxMjFDODMwMDAwNENEMDEyMTZEQ0Q0MTIxNkVFNQorOjEwMDQ4MDAwQzgzMDAwMDM3RjFGMDAwQjMwRjQwMDA3Mjc3ODAwMDFGRAorOjEwMDQ5MDAwOTc0MDAwMkEwN0I4MDEyNjlGODAwMDAwMDAwMDAwMDA1NgorOjEwMDRBMDAwODAwMDAxMzY3RjFCODAwNDgwMDAwMTNBN0YxQjgwMDU5RAorOjEwMDRCMDAwODAwMDAxM0U3RjFCODAwMjgwMDAwMTQyN0YxQjgwMDM4MQorOjEwMDRDMDAwODAwMDAxNDY3RjFCODAwNzgwMDAwMTRBN0YxQjgwMDY1OQorOjEwMDREMDAwODAwMDAxNEYyOEE0MDAwODlCODAwMDE5MjhBNDAwMDg3MAorOjEwMDRFMDAwODAwMDAxNUYzMjY0MDBGRjlCODAwMDE1MjhBNDAwMDg5MworOjEwMDRGMDAwODAwMDAxNUYzMjY0MDBGRjlCODAwMDExMjhBNDAwMDg4NworOjEwMDUwMDAwODAwMDAxNUYzMjY0MDBGRjlCODAwMDBEMjhBNDAwMDg3QQorOjEwMDUxMDAwODAwMDAxNUYzMjY0MDBGRjlCODAwMDA5MjhBNDAwMDg2RQorOjEwMDUyMDAwODAwMDAxNUYzMjY0MDBGRjlCODAwMDA1MjhBNDAwMDg2MgorOjEwMDUzMDAwODAwMDAxNUYzMjY0MDBGRjI4QTQwMDA4MzI2NDAwRkZERAorOjEwMDU0MDAwMEU2ODAwM0M5QTgwRkVCMjI4RUMwMDA4N0M0MzQwMDAxNAorOjEwMDU1MDAwN0M0MzgwMDA3QzQzQzAwMDk2QzAwMDA3Q0MwMDAwNjI1MgorOjEwMDU2MDAwQ0Y0MTIxNjlDRjgxMjE2QUNGQzEyMTZCODAwMDAwMDM3NworOjEwMDU3MDAwQ0MwMTIxNkM4MDAwMDAwM0NGRjUwMDAwQ0MwMDAwNkJBMworOjEwMDU4MDAwODQwMDAzODEwRTY4MDAzQzlBODAwMDA0QzgyODAwMTU4RQorOjEwMDU5MDAwODAwMDAwMDNEMDQwMDA3Rjk2ODBGRkFCN0UwMjQwMDBDOQorOjEwMDVBMDAwODQwMDAyM0JDMDBFMDAwMkNDMDAwMDQxODAwMDAyMzlGMgorOjEwMDVCMDAwQ0NDMTMwNEE3QzQwQzAwMDdDNDEwMDAwQzAxRTAwMDExQworOjEwMDVDMDAwMjkyNDAwMTJDMDIyMDAwMjk2NDAwMDA1QzAyNjAwMDQyMworOjEwMDVEMDAwQzAyN0ZGRkI3RDI1MDAwQkMwMjYwMDAwN0REMjgwMEJDRAorOjEwMDVFMDAwN0UxMkMwMEI3RDI1MDAwQzdDNDE0MDAwN0M0MTgwMDBDOAorOjEwMDVGMDAwQ0NDMTIxNjk5QTgwMDAwQUNEMDEyMTZBQ0Q0MTIxNkJDRAorOjEwMDYwMDAwOTZDMEZFODNDRDgxMjE2Q0M4MzAwMDE4OTcwMDAwMDA5MQorOjEwMDYxMDAwQzgzMDAwMTg4MDAwMDAwM0NDMDAwMDE4ODQwMDAzODE1QgorOjEwMDYyMDAwQ0MwMDAwN0ZDODE0MDAxM0M4MTgwMDE0Q0Q0MTIxNkIwMgorOjEwMDYzMDAwOTZDMEZFNzdDRDgxMjE2QzgwMDAwMTgzQzgzMDAwMTgwMAorOjEwMDY0MDAwQzgwQzAwMDg5OEMwMDAwMEM4MEMwMDA4N0M0MTAwMDBERAorOjEwMDY1MDAwOTUwMDAwMDIwMDAwMDAwMDdDNDE0MDAwQzgyMDAwMDkxNQorOjEwMDY2MDAwQ0M0MDAwNDNDRTAxQTFGNENDNDAwMDQ0QzAwRTgwMDAzOQorOjEwMDY3MDAwN0M0MjQwMDA3QzQyODAwMDJBQUMwMDFGOTZDMEZFNjQ5MQorOjEwMDY4MDAwQzAzNUYwMDBDRTQwMDNFMjMyNzgwMDAzMjY3QzAwMDgzQgorOjEwMDY5MDAwN0ZGN0MwMEI3RkZCQzAwQzJBNzgwMDE4Q0ZDMDAzRTNBNAorOjEwMDZBMDAwQ0Y4MDAzRTQyNkIwMDAwMjdGM0YwMDAwQ0YwMDAzRTVDNworOjEwMDZCMDAwODAwMDAzMUY3QzgwQzAwMDdDNDBDMDAwMjhEMDAwMDg2MAorOjEwMDZDMDAwMzExMDAwMEY5NTAwMDAwRjI1MjgwMDAxMDZBODAxQjQ4NQorOjEwMDZEMDAwOUU4MDAwMDAwMDAwMDAwMDgwMDAwMUQ1QzAxMjA4MDBDQworOjEwMDZFMDAwODAwMDAxRTNDODE0MDAwRjgwMDAwMUVBQzgxNDAwMTA2NAorOjEwMDZGMDAwODAwMDAxRjFDQ0MxQTJBNDgwMDAwMUZBQzgxNDAwMTE0RAorOjEwMDcwMDAwMzBEMDAwM0YwRDI4MDAxNTlBODAwMDEyMEQyODAwMUVFMQorOjEwMDcxMDAwOUE4MDAwMUUwRDI4MDAyMDlBODAwMDIzMEQyNDAwMEZDRgorOjEwMDcyMDAwMEQyODAwMTA3RTZBODAwQzlBODAwMDI2MEQyMDAwMDQ5RgorOjEwMDczMDAwMEQyNDAwMTQwRDI4MDAyODdFNjI0MDBDN0VBNjgwMEMzQgorOjEwMDc0MDAwOUE4MDAwMkFDODE0MDAxMTgwMDAwMDAzQ0NDMUEyQTQyMgorOjEwMDc1MDAwQzAxMjA4MDA3QzQxNDAwMDdEMENDMDBDQzAxMjAwMDg5MworOjEwMDc2MDAwMjk1ODAwMDMyOTVDMDAwQzdDNDIwMDAwN0REMUMwMEI5RAorOjEwMDc3MDAwMjYyMDAwMTQ3RTFFNDAwQzdFNEU4MDBDQ0U4MUEyQTQ0QQorOjEwMDc4MDAwODAwMDAwMDNDRDgxQTFGRUM4MTQwMDBGMDQxMDIxMEVDQgorOjEwMDc5MDAwOTU0MDAwMDBDODE0MDAwRkQwNTEwMDAwODAwMDAwMDNGNQorOjEwMDdBMDAwQ0NDMUEyQTRDODE0MDAxMDA0MTAyMTA4OTU0MDAwMDA3OAorOjEwMDdCMDAwQzgxNDAwMTBEMDUxMDAwMDgwMDAwMDAzQ0NDMUEyQTRENgorOjEwMDdDMDAwQ0NDMUEyQTQwNDEwMDAwMUNEMDAwMDE5ODQwMDAzODE1MworOjEwMDdEMDAwQ0MwMDAwN0ZDODEwMDAxOTk5MDAwMDAwQzgxMDAwMTk1MworOjEwMDdFMDAwODAwMDAwMDQ3QzQwODAwMDA0MTAyMTAwOTU0MDAwMDAzRgorOjEwMDdGMDAwQzgxNDAwMTFEMDUxMDAwMDgwMDAwMzdFQ0NDMUEyQTQxNworOjEwMDgwMDAwN0M0MEMwMDBDQzQwMDAwRDk0QzBGRTAxQ0M0MDAwMEVFNgorOjEwMDgxMDAwN0M0MTAwMDA5NTAwMDAwNTA4Q0MwMDAxQzgxNDAwMDVDQgorOjEwMDgyMDAwOTk0MDAwMTQwMDAwMDAwMDk4QzBGRkZCN0M0MTAwMDBDQworOjEwMDgzMDAwODAwMDAwMDQ3RDAwODAwMEM4MTQwMDA1N0M0MEMwMDBEQQorOjEwMDg0MDAwOTk0MDAwMENDODE4MDAwQzdDNDEwMDAwOTU4MEZERjAxOAorOjEwMDg1MDAwQzgyMDAwMEVDODFDMDAwRDY2MjAwMDIwN0UxRTAwMkM0MworOjEwMDg2MDAwMjUyNDAwMDI3RTYyNDAyMDgwMDAwMDAzQ0NFNjAwMDBDOAorOjEwMDg3MDAwN0M0MTAwMDBDQzAwMDA2Q0NDMDAwMDZEQzgxODAwMUY0QgorOjEwMDg4MDAwQzgxQzAwMUU2NTk4MDAyMDdERDlDMDJDN0NENEMwMENFQgorOjEwMDg5MDAwQ0NERTAwMDA0NURDMDAwNEM4MjgwMDE3OTY4MDAwMEY1RAorOjEwMDhBMDAwQzAwRTAwMDEyODY4MDAwODJBQUMwMDE2MzJBODAwRkYxQworOjEwMDhCMDAwMEVCMDAwNDk3RjJGMDAwQjk3MDAwMDA2MDAwMDAwMDBEQgorOjEwMDhDMDAwQzgxNDAwMDU3QzQwQzAwMDgwMDAwMjIzN0M0MTAwMDA2OQorOjEwMDhEMDAwODAwMDAyMjZEMDQwMDA3Rjg0MDAwMjNCQ0MwMDAwNDExMworOjEwMDhFMDAwQ0NDMTMwNEE5NDAwMDAwMEM4M0MwMDFBMDQzQzAwMDUwQQorOjEwMDhGMDAwQ0ZDMUEyQTRDMDM2MUY5MEMwMzg3RkZGN0MwM0MwMTBCOAorOjEwMDkwMDAwN0Y3QjQwMENDRjQxMjE3Q0NGQzEyMTdEQ0MwMTIxN0U1QQorOjEwMDkxMDAwQzAzQTAwMDQwNDM0MjE3RjdGN0I0MDBDQ0MzNTAwMDBCQQorOjEwMDkyMDAwQzgzQzAwMDQyQkZDMDAxRjA0MzgwMDIwOTdDMDAwMDVDMQorOjEwMDkzMDAwQ0MwMDAwNjI5QjgwMDAwMDBCQjgwMDAxODAwMDAyNDdFMQorOjEwMDk0MDAwQ0MwMDAwNzFDQzAxQTFGNDA0MzgwMDE2QzAzNjAwMDJCRQorOjEwMDk1MDAwQ0Y4MUEyQTQ4ODAwMDAwMENGNDEyMDEwN0M0MEMwMDBCRAorOjEwMDk2MDAwMjhEMDAwMUM5NTAwMDAwNTA0RDQwMDAxQ0Q0MDAwNjU4RQorOjEwMDk3MDAwODAwMDAwMDNDRDQwMDA2ODA5NTQwMDAyODAwMDAwMDM5RAorOjEwMDk4MDAwQ0Q0MDAwNjY4NDAwMDI2Q0M4MTgwM0VBN0M0MEMwMDBCOQorOjEwMDk5MDAwOTk4MEZEOUZDODE0MDAxNjA4RDAwMDAxOTk0MDAwMkJEMworOjEwMDlBMDAwQ0QwMDAwNjg3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI4OAorOjEwMDlCMDAwMDQzQzAwMDVDRkMxQTJBNENDMDFBMUY0ODQwMDAzODFCMgorOjEwMDlDMDAwQ0MwMDAwNDY4ODAwMDAwMENDMDAwMDdGODQwMDAyN0UzRQorOjEwMDlEMDAwQzgxODAzRUE3QzQwQzAwMDk5ODBGRDhEQzgxNDAwMTYzOQorOjEwMDlFMDAwMDhEMDAwMDE5OTQwMDAxOUNEMDAwMDY4N0M0MDgwMDBDQgorOjEwMDlGMDAwQTAwMDAwMDBDQzgwMDA2MjA0M0MwMDIyQ0ZDMUEyQTQ3MQorOjEwMEEwMDAwODQwMDAzODFDQzAwMDA0Nzg4MDAwMDAwQ0MwMDAwN0ZGOAorOjEwMEExMDAwQzgxMDAwMTY5OTAwMDAwRENDNDAwMDY3ODAwMDAwMDQ0QgorOjEwMEEyMDAwN0M0MDgwMDBDODE4MDNFQTk5ODBGRDc5N0M0MEMwMDBCMgorOjEwMEEzMDAwOTRDMDAwMDNDODEwMDAxNjk5MDAwMDA0Q0NDMDAwNjhFMAorOjEwMEE0MDAwODAwMDAwMDQ3QzQwODAwMDg0MDAwMjNCQzAxNDgwMDBEMQorOjEwMEE1MDAwQ0MwMDAwNDFDRDQxMzA0QUMwMTQ4MDAwOTkwMDAwMDAxNAorOjEwMEE2MDAwQzgxMDAwMTY4MDAwMDAwNDdDNDA4MDAwQzAxMjAwMDEwNQorOjEwMEE3MDAwN0M1MTQwMEM4MDAwMDAwM0QwNTUwMDAwN0M0MEMwMDAzOQorOjEwMEE4MDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwMjkxQzAwMUYwQgorOjEwMEE5MDAwQ0NDMDAwNEFDRDAwMDA0Qjk1QzAwMDAzQzAxQzgwMDBCNAorOjEwMEFBMDAwQ0RDMTIwMTBERDgzMDAwMDA1NUMyMDAwQ0MwMDAwNjI3OQorOjEwMEFCMDAwODAwMDAwMDNEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDA0MgorOjEwMEFDMDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDRDQ0QwMDAwNERGQQorOjEwMEFEMDAwREQ4MzAwMDAwNTVDQTAwMDgwMDAwMDAzRDgxRjQxMDBGQQorOjEwMEFFMDAwN0M0MEMwMDA3QzQxMDAwMDdDNDE0MDAwN0M0MTgwMDA5MworOjEwMEFGMDAwQ0NDMDAwNEVDRDAwMDA0RkREODMwMDAwMDU1Q0MwMDA3RgorOjEwMEIwMDAwODAwMDAwMDNEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDBGMQorOjEwMEIxMDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDUwQ0QwMDAwNTFBMQorOjEwMEIyMDAwREQ4MzAwMDAwNTVDRjhFMDgwMDAwMDAzRDgxRjQxMDA3MQorOjEwMEIzMDAwN0M0MEMwMDA3QzQxMDAwMDdDNDE0MDAwN0M0MTgwMDA0MgorOjEwMEI0MDAwQ0NDMDAwNTJDRDAwMDA1M0REODMwMDAwMDU1Q0Y4ODA2RQorOjEwMEI1MDAwODAwMDAwMDNEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDBBMQorOjEwMEI2MDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDU0Q0QwMDAwNTU0OQorOjEwMEI3MDAwREQ4MzAwMDAwNTVDRTAwMDgwMDAwMDAzRDgxRjQxMDAxOQorOjEwMEI4MDAwN0M0MEMwMDA3QzQxMDAwMDdDNDE0MDAwN0M0MTgwMDBGMgorOjEwMEI5MDAwQ0NDMDAwNTZDRDAwMDA1N0REODMwMDAwMDU1Q0YwMDA5RQorOjEwMEJBMDAwODAwMDAwMDNEODFGNDEwMDdDNDBDMDAwN0M0MTAwMDA1MQorOjEwMEJCMDAwN0M0MTQwMDA3QzQxODAwMENDQzAwMDU4Q0QwMDAwNTlGMQorOjEwMEJDMDAwREQ4MzAwMDAwNTVDRjNGQzgwMDAwMDAzRDgxRjQxMDBCQQorOjEwMEJEMDAwRDA0MzIwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI1OAorOjEwMEJFMDAwRDA0M0EwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjJDOAorOjEwMEJGMDAwRDA0M0MwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI5OAorOjEwMEMwMDAwRDA0M0Y4RTA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI2RgorOjEwMEMxMDAwRDA0M0Y4ODA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjJCRgorOjEwMEMyMDAwRDA0M0UwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI0NworOjEwMEMzMDAwRDA0M0YwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIyNworOjEwMEM0MDAwRDA0M0YzRkM3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIxOAorOjEwMEM1MDAwQzgxNDAzRTBDQzQzMDAwMENDNDMwMDAwQ0M0MzAwMDBBOAorOjEwMEM2MDAwN0Q0NUMwMDBDREMzMDAwMEQwNDMwMDAwN0M0MDgwMDAyMworOjEwMEM3MDAwQTAwMDAwMDBDQzgwMDA2MjdDNDBDMDAwQzgxMDAzRTJFRAorOjEwMEM4MDAwQzgxNDAzRTVDODE4MDNFM0M4MUMwM0U0Q0Q4MTIxNjkzNworOjEwMEM5MDAwQ0RDMTIxNkFDQ0MxMjE2QkNDMDEyMTZDMDQyMDAwMDRBMAorOjEwMENBMDAwN0RBMTgwMDA3RDk2NDAwMjk2NDBGQ0Q5Q0Q4MDAzRTM3MworOjEwMENCMDAwMzEyODAwMDNDMDJERjAwMDI1MTgwMDA4N0RBRDgwMEIwMQorOjEwMENDMDAwN0RBOTgwMEM4MDAwMDAwM0NEODAwM0UzMzA4Q0ZGRkYwMgorOjEwMENEMDAwRDA0RDAwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjI2RAorOjEwMENFMDAwQzgxNDAwMjAxNTU4MDAwMjk1ODBGRkZGQzgxNDAwMjA4QQorOjEwMENGMDAwQ0MwMDAwNkVDQzQxMjE4MDdDNDBDMDAwQ0NDMTIxOEQ1NQorOjEwMEQwMDAwQ0M0MTIxODEyOEQwMDAxRjM0NTg4MDAwQ0Q4MTIxOEMxNgorOjEwMEQxMDAwOTUwMEZDQkZDQzQxMjE4MkM4MTQwMDIwOTk0MEZGRkYwMAorOjEwMEQyMDAwQzgxNDAwMjA4MDAwMDAwNDdDNDA4MDAwN0M0MEMwMDA4QgorOjEwMEQzMDAwMjhEMDAwMTgzMTEwMDAwMUMwMTYwMDgwOTUwMDAwMDM3MworOjEwMEQ0MDAwQzAyQTAwMDQ3Q0Q0QzAwQ0NDQzEyMTdDQ0M0MTIxN0RDNAorOjEwMEQ1MDAwQ0M0MTIxN0U3QzQxODAwMDFEQjAwMDAzMzZBMDIxN0Y2NAorOjEwMEQ2MDAwOUIwMDAwMDM0MTlDMDAwNTA0MUMwMDQwOTlDMDAwMDA0QQorOjEwMEQ3MDAwMDlEQzAwMDFDQzIxMDAwMEM4MjQwMDA0MkE2QzAwMUZGQgorOjEwMEQ4MDAwNDE5QzAwMDU5QUMwRkZGQUNDODAwMDYyODAwMDAwMDRGQworOjEwMEQ5MDAwN0M0MDgwMDA3QzQwQzAwMDA0RDQwM0U2ODAwMDAwMDM1NworOjEwMERBMDAwQ0M1NDAwMDA4MDAwMDM3RUNDNDAwM0VBQzAxQzgwMDBDRAorOjEwMERCMDAwMDQ0Q0EwMDBDREMxMjAxMDdDNDEwMDAwQzgxNDAwMDlFMworOjEwMERDMDAwMDQxODAwMDAwNDFDMDAwOENEODAwMDcxMDlEQzAwMDEzQgorOjEwMEREMDAwMDU5ODAwMDFDRDBEMDAwMDk5QzBGRkZDQ0M4MDAwNjI5OQorOjEwMERFMDAwODAwMDAzN0VDRDQwMDA3MUMwMEUwMTAwQ0MwMDAwNDFBOAorOjEwMERGMDAwQ0NDMTMwNEFDODNDMDA3RkNDMDAwMDdGODAwMDAwMDM5QgorOjEwMEUwMDAwQ0MwMDAwN0ZDQzAwMDA3Rjg4MDAwMDAwQ0MwMDAwN0Y3OQorOjEwMEUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwMEUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMEUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwMEU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwMEU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMEU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwMEU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwMEU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwMEU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMEVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMEVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwMEVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMEVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwMEVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwMEVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMEYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMEYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMEYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwMEY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwMEY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMEY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMEY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMEY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMEY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMEZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMEZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMEZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMEZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMEZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwMTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMTA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwMTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwMTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwMTBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwMTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwMTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMTJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMTJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMTJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMTJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMTJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMTMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMTMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMTMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMTM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMTM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMTM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMTM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMTM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMTM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMTNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMTNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMTNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMTQwMDAwMDAwMTAzMzMwMDEwMDAwNjAwMTcwMDA4MDAyMTAwMEE0NQorOjEwMTQxMDAwMDAyNzAwMkEwMDI4MDAyNTAwMjkwMDJCMDAyQTAwMjg4OAorOjEwMTQyMDAwMDAyQjAwMkIwMDJEMDAzQTAwMkUwMDQxMDAyRjAwNEMxNQorOjEwMTQzMDAwMDAzNDAwNEUwMDM2MDAzMjAwMzkwMEIxMDAzQTAwRDFDRAorOjEwMTQ0MDAwMDAzQjAwRTYwMDNDMDBGRTAwM0QwMTZEMDAzRjAwQUZBOAorOjEwMTQ1MDAwMDA0MTAzMzgwMDQzMDM0QjAwNDQwMTkwMDA0NTAwRkU2NworOjEwMTQ2MDAwMDA0NjAxQUUwMDQ3MDFBRTAwNDgwMjAwMDA0OTAyMEVFRQorOjEwMTQ3MDAwMDA0QTAyNTcwMDRCMDI4NDAwNTIwMjYxMDA1MzAyNzM3QgorOjEwMTQ4MDAwMDA1NDAyODkwMDU3MDI5QjAwNjAwMjlGMDA2MTAyQUU3NworOjEwMTQ5MDAwMDA2MjAyQjgwMDYzMDJDMjAwNjQwMkNDMDA2NTAyRDY5QQorOjEwMTRBMDAwMDA2NjAyRTAwMDY3MDJFQTAwNjgwMkY0MDA2OTAyRjhFMAorOjEwMTRCMDAwMDA2QTAyRkMwMDZCMDMwMDAwNkMwMzA0MDA2RDAzMDg2QgorOjEwMTRDMDAwMDA2RTAzMEMwMDZGMDMxMDAwNzAwMzE0MDA3MjAzNjVCQworOjEwMTREMDAwMDA3NDAzNkIwMDc5MDM2OTAwN0MwMzFFMDAwRjAzN0ExQworOjEwMTRFMDAwMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBMDAwRjAzN0FDQworOjEwMTRGMDAwMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBMDAwRjAzN0FCQworOjEwMTUwMDAwMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBMDAwRjAzN0FBQgorOjEwMTUxMDAwMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBMDAwRjAzN0E5QgorOjEwMTUyMDAwMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBMDAwRjAzN0E4QgorOjEwMTUzMDAwMDAwRjAzN0EwMDBGMDM3QTAwMEYwMzdBMDAwRjAzN0E3QgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjcxMF9wZnAuYmluLmloZXggYi9maXJtd2FyZS9yYWRlb24vUlY3MTBfcGZwLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODExZmYKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY3MTBfcGZwLmJpbi5paGV4CkBAIC0wLDAgKzEsMjEzIEBACis6MTAwMDAwMDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI4MDAwMDAwMDA5Cis6MTAwMDEwMDBEQzAzMDAwMENDODAwMDQwRDA0MDAwNDA3QzQwODAwMEU5Cis6MTAwMDIwMDBBMDAwMDAwMDdFODI4MDBCQzgxODAwMEUzMTk4MDAwMUVECis6MTAwMDMwMDA3QzQyNDAwMDk1ODAwMjNBN0M0MjgwMDBDODFDMDAxQzMzCis6MTAwMDQwMDBDMDM3QzAwMDdDNDBDMDAwN0M0MTAwMDA3Q0I0ODAwQjA1Cis6MTAwMDUwMDBDMDM2MDAwMzk5QzAwMDAwQzgxQzAwMUM3Q0I0ODAwQzkyCis6MTAwMDYwMDAyNEQ0MDAwMjdENjU0MDAwQ0Q0MDAwNDNDRTgwMDA0MzkzCis6MTAwMDcwMDBDRDAwMDA0M0NDODAwMDQwQ0U0MDAwNDBDRTgwMDA0MDA4Cis6MTAwMDgwMDBDQ0MwMDA0MERDM0EwMDAwOTc4MEZGREVDRDAwMDA0MDhECis6MTAwMDkwMDA3QzQwQzAwMDgwMDAwMDE4N0M0MTAwMDBENDAwMDM0MDc4Cis6MTAwMEEwMDBENDAwMEZDMEQ0MDAwRkEyQzgxODAwMEU4MDAwMDAwQ0FFCis6MTAwMEIwMDAzMTk4MDAwMkQ0MDAwM0MwRDQwMDBGQzBENDAwMEZBMkI2Cis6MTAwMEMwMDBDODE4MDAwRTI4OEMwMDA4MzBDQzAwMEYzNDEwMDAwMTM2Cis6MTAwMEQwMDA3RDBEMDAwODgwMDAwMDBDN0Q5MTgwMEJDQzgwMDA0MERECis6MTAwMEUwMDBEMDQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjU5Cis6MTAwMEYwMDBENDAwMDM0MEQ0MDAwRkMwRDQwMDBGQTJDQzgwMDA0MDM1Cis6MTAwMTAwMDBEMDQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjM4Cis6MTAwMTEwMDBENDAwMDNDMEQ0MDAwRkMwRDQwMDBGQTJDQzgwMDA0MDk0Cis6MTAwMTIwMDBEMDQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjE4Cis6MTAwMTMwMDBDQzQwMDNGOTgwMDAwMjQ5Q0M0MDAzRjhDMDM3RkZGRkYwCis6MTAwMTQwMDA3QzQxNDAwMENGNDFBMjlFQzgyMDAzRjhDODFDMDNGOTlGCis6MTAwMTUwMDA2NjIwMDAyMEM4MTgwM0ZCN0RFMUMwMkM3RDU4QzAwODM0Cis6MTAwMTYwMDA3Q0RDQzAyMDY5MTAwMDIwQzAzNjAwMDNDQzAwMDA1NEE1Cis6MTAwMTcwMDA3Q0I0ODAwQzgwMDAwMDY5Q0M4MDAwNDA3QzQxODAwMDExCis6MTAwMTgwMDBDRDgxQTI5RUNDODAwMDQwODAwMDAwNjdDRDgwMDA0MEUxCis6MTAwMTkwMDBDMDE5RkZGRkNDODAwMDQwQ0Q4MUEyOUU3QzQwQzAwMEYyCis6MTAwMUEwMDA3QzQxMDAwMDdDNDE0MDAwQ0NDMUExRkFDRDAxQTFGOTA1Cis6MTAwMUIwMDBDRDQxQTI5RENDQzAwMDQwQ0QwMDAwNDBDRDQwMDA0MENDCis6MTAwMUMwMDBDQzQwMDA0MDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjdDCis6MTAwMUQwMDBDQzAwMDA1NENDODAwMDQwN0M0MEMwMDA3QzQxMDAwMDNBCis6MTAwMUUwMDA3QzQxNDAwMENDQzFBMUZBQ0QwMUExRjlDRDQxQTI5RDM1Cis6MTAwMUYwMDBDQ0MwMDA0MENEMDAwMDQwQ0Q0MDAwNDBEMDQwMDA0MDg5Cis6MTAwMjAwMDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI3QzQwQzAwMDBCCis6MTAwMjEwMDAzMEQwMDAwMUNDQzFBMjlGOTUwMDAwMDMwNDE0MDAwMTVFCis6MTAwMjIwMDAwNDE0MDAwMkNENDAwM0ZCQ0M4MDAwNDA4MDAwMDAwMDlECis6MTAwMjMwMDBDQ0MwMDA0MDdDNDBDMDAwQ0M4MDAwNDBDQ0MxQTJBMjE5Cis6MTAwMjQwMDA4MDAwMDAwMENDQzAwMDQwN0M0MEMwMDAyOEQ0MDAxRkNCCis6MTAwMjUwMDBDQzgwMDA0MDk1NDAwMDAzN0M0MTAwMDBDQ0MwMDA1NzlBCis6MTAwMjYwMDAyOTE4MDAxRkNDQzAwMDQwOTU4MDAwMDNDRDAwMDA0MDNECis6MTAwMjcwMDBDRDAwMDA1ODgwMDAwMjQ5Q0MwMDAwN0ZDODIwMDAxNzQ0Cis6MTAwMjgwMDBDODMwMDAyMjlBMDAwMDA2MEUyODAwMDFDODI0MDAxRTczCis6MTAwMjkwMDAwQTY0MDAwMUQ0MDAxMjQwQ0U0MDAwNDBDMDM2QzAwMEM1Cis6MTAwMkEwMDA5NjgwMDAwNzM3NzQ3OTAwMDQxQzAwMDFDRjQwMDA0MDlECis6MTAwMkIwMDBDREMwMDA0MENGMDAwM0ZBN0MwMzAwMDBDQTBDMDAxMDQwCis6MTAwMkMwMDA3QzQxMDAwMDk0QzAwMDA0N0M0MTQwMDBENDIwMDJDNDYyCis6MTAwMkQwMDBDREUwMDA0NDlCMDAwMDBCN0M0MTgwMDBDQzAwMDA0QjMzCis6MTAwMkUwMDBDREEwMDA0OUNEMjAwMDQxQ0Q2MDAwNDFDREEwMDA0MTBFCis6MTAwMkYwMDAwNjIwMDAwMUNFMDAwMDU2ODAwMDAyNDlDQzAwMDA3RjlECis6MTAwMzAwMDBDODI4MDAyMEM4MkMwMDIxQ0MwMDAwNjM3RUVBNDAwMUYwCis6MTAwMzEwMDA2NTc0MDAyMDdGNTM0MDJDMjY5QzAwMDI3REY1QzAyMDkwCis6MTAwMzIwMDA2OUY4MDAyMENFODAwMDRCQ0U2MDAwNDlDREUwMDA0MTRFCis6MTAwMzMwMDBDRkEwMDA0MUNFNjAwMDQxMjcxQzAwMDI3REY1QzAyMDA3Cis6MTAwMzQwMDA2OUY4MDAyMDdEQjI0MDAxQ0YwMDAwNEJDRTYwMDA0OTJCCis6MTAwMzUwMDBDREUwMDA0MUNGQTAwMDQxODAwMDAwQkNDRTYwMDA0MTU0Cis6MTAwMzYwMDBDODIwMDAxN0M4MzAwMDIyOUEwMDAwMDYwRTI4MDAwMTlECis6MTAwMzcwMDBDODI0MDAxRTBBNjQwMDAxRDQwMDEyNDBDRTQwMDA0MDkwCis6MTAwMzgwMDBDQTBDMDAxMDdDNDEwMDAwOTRDMDAwMEJDMDM2QzAwMEI1Cis6MTAwMzkwMDA5NjgwMDAwNzM3NzQ3OTAwMDQxQzAwMDFDRjQwMDA0MEFDCis6MTAwM0EwMDBDREMwMDA0MENGMDAwM0ZBN0MwMzAwMDA4MDAwMDBCNTAwCis6MTAwM0IwMDA3QzQxNDAwMENDMDAwMDQ4ODAwMDAwRUUwMDAwMDAwMEJFCis6MTAwM0MwMDBDODIwMDAxN0M4MUMwMDIzMEUyNDAwMDI5OUMwMDAxNTg1Cis6MTAwM0QwMDA3QzQxODAwMDBBMjAwMDAxQ0UwMDAwNTZENDAwMDQ0MDc5Cis6MTAwM0UwMDBDQzAwMDA0MEMwMzZDMDAwQ0ExNDAwMTM5NjQwMDAwNzdECis6MTAwM0YwMDAzNzc0NzkwMENGNDAwMDQwQ0MwMDAwNDBDODMwMDNGQTg5Cis6MTAwNDAwMDA4MDAwMDEwM0NGMDAwMDIyQ0MwMDAwMjI5NTQwMDE0NjZECis6MTAwNDEwMDBDQzAwMDA3RkNDQTAwMDQ2ODAwMDAwMDBDQzIwMDA0NjJECis6MTAwNDIwMDA4MDAwMDI0OUNDMDAwMDY0QzgyMDAwMTdDODEwMDAxRkRCCis6MTAwNDMwMDA5NjAwMDAwNTA5MTAwMDAxRDQwMDA0NDBDRDAwMDA0MEUyCis6MTAwNDQwMDBDRDAwMDAyMkNDODAwMDQwRDA0MDAwNDBDODBDMDAyNUU4Cis6MTAwNDUwMDA5NEMwRkVFQ0M4MTAwMDA4Q0QwMDAwNDBENDAwMEZDMENFCis6MTAwNDYwMDA4MDAwMDAwMEQ0MDAwRkEyN0M0MEMwMDA3QzQxMDAwMDRFCis6MTAwNDcwMDBDQ0MwMDNGRENEMDAwM0ZDQ0NDMDAwNDJDRDAwMDA0MjQ3Cis6MTAwNDgwMDAyOTE0MDAxRjI5MTgwMDEwMzE5ODAwMDczQjVDMDAwMTU3Cis6MTAwNDkwMDA3RDc2MDAwQjk5ODAwMDA1N0Q1RTQwMEJDQzAwMDA0MjBDCis6MTAwNEEwMDA4MDAwMDI0OUNDMDAwMDREMjk5ODAwMDEyOTJDMDAwODQ5Cis6MTAwNEIwMDA5OTgwMDAzRDMyRUMwMDAxOTYwMDAwMDQyOTMwMDAwQ0M4Cis6MTAwNEMwMDA4MDAwMDI0OUNDMDAwMDQyMDQxNDAwMTBDRDQwMDA0MkRDCis6MTAwNEQwMDAzMzMwMDAwMTM0MjgwMDAxODQwMDAxNURDODE0MDAwMzlBCis6MTAwNEUwMDA5QjQwMDAxQjA0MzgwMDBDODQwMDAxNURDODE0MDAwMzBECis6MTAwNEYwMDA5QjQwMDAxNzA0MzgwMDA4ODQwMDAxNURDODE0MDAwMzA1Cis6MTAwNTAwMDA5QjQwMDAxMzA0MzgwMDA0ODQwMDAxNURDODE0MDAwM0ZDCis6MTAwNTEwMDA5QjQwMDAxNUM4MEMwM0ZEOUE4MDAwMDlDODEwMDNGQzFECis6MTAwNTIwMDA5QjAwMDEwMUNDMDAwMDREMDQxNDAwMTBDQ0MwMDA0MjFGCis6MTAwNTMwMDBDRDAwMDA0MjgwMDAwMTM1Q0Q0MDAwNDI5NkMwMDBGQTU3Cis6MTAwNTQwMDBDQzAwMDA0RDgwMDAwMjQ5Q0MwMDAwNEU5QUMwMDAwMzUwCis6MTAwNTUwMDBDQzAwMDA0RENDMDAwMDRFREY4MzAwMDA4MDAwMDAwMDg2Cis6MTAwNTYwMDBEODAzMDFGRjlBQzAwMEYwQ0MwMDAwNEQ4MDAwMDI0OTgyCis6MTAwNTcwMDBDQzAwMDA0RUM4MTgwMDAzQzgxQzAwMDNDODIwMDAwM0FDCis6MTAwNTgwMDA3RDVENDAwMzdEQTFDMDAzN0Q1RDQwMEMyQTEwMDAxRkVFCis6MTAwNTkwMDAyOTlDMDAxRjdEMUQwMDBCN0QxNzQwMEI4ODAwMDAwMDZCCis6MTAwNUEwMDA3RTkyODAwQjk2NDAwMDA0Q0MwMDAwNEU4MDAwMDI0OUYxCis6MTAwNUIwMDBDQzAwMDA0MjA0MzgwMDA4Q0Y4MDAwNDJDODA4MDAwMzg1Cis6MTAwNUMwMDBDODBDMDAwM0M4MTAwMDAzQzgxNDAwMDNDODE4MDAwM0I3Cis6MTAwNUQwMDBDODFDMDAwM0M4MjQwMDAzQzgyODAwMDMyOUZDMDAxRjBFCis6MTAwNUUwMDAyQUIwMDAxRjdGRjNDMDBCMjhGMDAwMUY3RkYzQzAwQjYxCis6MTAwNUYwMDAyOTcwMDAxRjdGRjNDMDBCN0Q4ODgwMDE3RENDQzAwMTc2Cis6MTAwNjAwMDA3RTUxMDAwMTdFOTU0MDAxN0M5MDgwMDI3Q0Q0QzAwMjI2Cis6MTAwNjEwMDA3Q0JDODAwQjlBQzAwMDAzN0M4RjQwMEIzOEI0MDAwMTc3Cis6MTAwNjIwMDA5QjQwMDBDMUNDMDAwMDREOUJDMDAwQkZDQzAwMDA0RUUxCis6MTAwNjMwMDBDODBDMDNGREM4MTAwM0ZDQ0NDMDAwNDI4MDAwMDE2RTUyCis6MTAwNjQwMDBDRDAwMDA0MkQ0MDAwMzQwRDQwMDBGQzBENDAwMEZBMjVDCis6MTAwNjUwMDBDQzgwMDA0MENDNDAwMDQwQ0M0MDAwNDBDQzQwMDA0MDJBCis6MTAwNjYwMDA3QzQwQzAwMENDQzAwMDQwQ0NDMDAwMEQ4MDAwMDAwMDI5Cis6MTAwNjcwMDBEMDQwMDA0MDdDNDBDMDAwN0M0MTAwMDA2NTE0MDAyMDU4Cis6MTAwNjgwMDA3RDRENDAyQzI0NTgwMDAyN0Q1OTgwMjA3QzQxQzAwMEMzCis6MTAwNjkwMDBDRDgwMDA0MjY5OTgwMDIwQ0Q4MDAwNDJDREMwMDA0MjRDCis6MTAwNkEwMDBDMDIzQzAwMDA1RTQwMDAyN0NBMDgwMEIyNjY0MDAxMDdCCis6MTAwNkIwMDA3Q0E0ODAwQ0NDODAwMDQwQ0RDMDAwNDBDQ0MwMDA0MDY5Cis6MTAwNkMwMDA5NUMwMDAwRUNEMDAwMDQwMDlEQzAwMDFDODI4MDAwM0UxCis6MTAwNkQwMDA5NjgwMDAwOENFODAwMDQwQzgzNDAwMUQ5NzQwMDAwMDdFCis6MTAwNkUwMDBDODM0MDAxRDI2QTgwMDA4ODQwMDAyNENDQzJCMDAwMDUyCis6MTAwNkYwMDA5OUMwRkZGNzA5REMwMDAxREMzQTAwMDA5NzgwMDAwNDk0Cis6MTAwNzAwMDA3QzQxODAwMDgwMDAwMUEyMjU5ODAwMDJBMDAwMDAwMDJBCis6MTAwNzEwMDA3RDgwODAwMEM4MTgwMDFEN0M0MEMwMDA2NEQwMDAwOEE3Cis6MTAwNzIwMDA5NTgwMDAwMEM4MTgwMDFEQ0MxMzAwMDBDQzgwMDA0MDRDCis6MTAwNzMwMDBDQ0MwMDA0MDgwMDAwMDAwQ0M0MDAwNDBDODEwMDAxRjJBCis6MTAwNzQwMDA3QzQwQzAwMENDODAwMDQwN0NEMTQwMENDRDQwMDA0MEJCCis6MTAwNzUwMDAwNTE4MDAwMTgwMDAwMDAwQ0Q4MDAwMjI3QzQwQzAwMDEwCis6MTAwNzYwMDA2NDUwMDAyMDg0MDAwMjRDQ0MwMDAwNjE3Q0QwQzAyQzdFCis6MTAwNzcwMDBDODIwMDAxN0M4RDYwMDAwOTk0MDAwMDg3QzQzODAwMEJDCis6MTAwNzgwMDBERjgzMDAwMENGQTAwMDRGODQwMDAyNENDQzAwMDA2MjQ5Cis6MTAwNzkwMDA4MDAwMDAwMEQwNDAwMDdGODAwMDAyNDlDQzAwMDA2MjUxCis6MTAwN0EwMDA4NDAwMDI0Q0NDMDAwMDYxQzgyMDAwMTc3QzQwQzAwMENGCis6MTAwN0IwMDBDMDM2RkYwMEM4MTAwMDBEQzAzMDNGRkY3Q0Y1NDAwQjc1Cis6MTAwN0MwMDA3RDUxODAwQjdEODE4MDBGOTk4MDAwMDg3Q0YzODAwQjI4Cis6MTAwN0QwMDBERjgzMDAwMENGQTAwMDRGODQwMDAyNENDQzAwMDA2MkY5Cis6MTAwN0UwMDA4MDAwMDAwMEQwNDAwMDdGODAwMDAyNDlDQzAwMDA2MjAxCis6MTAwN0YwMDA4NDAwMDI0QzdDNDBDMDAwMjhEQzAwMDg5NUMwMDAxOTMxCis6MTAwODAwMDAzMERDMDAxMDdDNDEwMDAwOTlDMDAwMDQ2NDU0MDAyMERBCis6MTAwODEwMDA4MDAwMDIwOEM5MUQwMDAwN0QxNTAwMkNDOTFFMDAwMEMzCis6MTAwODIwMDA3QzQyMDAwMDdDNDI0MDAwN0M0MTgwMDA3REU1QzAwQkEyCis6MTAwODMwMDA3REUyODAwNzlBODAwMDBFNDFBQzAwMDU5QUMwMDAwMDVFCis6MTAwODQwMDAwQUVDMDAwMTMwREMwMDEwOTlDMDAwMDQwMDAwMDAwMDM4Cis6MTAwODUwMDA4MDAwMDIwQkM5MUQwMDAwODAwMDAyMEJDOTFFMDAwMEIxCis6MTAwODYwMDBDQzgwMDA0MENDQzAwMDQwRDA0MDAwNDBDODBDMDAyNUU3Cis6MTAwODcwMDA5NEMwRkRFNEM4MTAwMDA4Q0QwMDAwNDBENDAwMEZDMEIzCis6MTAwODgwMDA4MDAwMDAwMEQ0MDAwRkEyRDQwMDAzNDBENDAwMEZDMEE5Cis6MTAwODkwMDBENDAwMEZBMkNDODAwMDQwRDA0MDAwNDA3QzQwODAwMEJCCis6MTAwOEEwMDBBMDAwMDAwMDdFODI4MDBCRDQwMDAzQzBENDAwMEZDMEUzCis6MTAwOEIwMDBENDAwMEZBMkNDODAwMDQwRDA0MDAwNDA3QzQwODAwMDlCCis6MTAwOEMwMDBBMDAwMDAwMDdFODI4MDBCN0M0MEMwMDAzMEQwMDAwNjdCCis6MTAwOEQwMDAwRDEwMDAwNjk5MDAwMDA3QzgxNDAwMTU5OTQwMDAwNTg2Cis6MTAwOEUwMDBDQzAwMDA1MkQ0MDAwMzQwRDQwMDBGQzBENDAwMEZBMkFCCis6MTAwOEYwMDBDQzgwMDA0MENDQzAwMDQwODAwMDAwMDBEMDQwMDA0MEQwCis6MTAwOTAwMDA3QzQwQzAwMENDNEQwMDAwREMzQTAwMDA5NzgwRkRCRDZCCis6MTAwOTEwMDAwNENDMDAwMTgwMDAwMjQyQ0M0RDAwMDA4MDAwMDAwMEE5Cis6MTAwOTIwMDBEMDQwMDA3RkNDMDAwMDdGODAwMDAwMDBDQzAwMDA3RjIyCis6MTAwOTMwMDBDQzAwMDA3Rjg4MDAwMDAwQ0MwMDAwN0YwMDAwMDAwMDk5Cis6MTAwOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTAwOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAwOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAwOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAwOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTAwOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAwOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAwOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAwOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAwOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAwOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAwOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTAwQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTAwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTAwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTAwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTAwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTAwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTAwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTAwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTAwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTAwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTAwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTAwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTAwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTAwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTAwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAwQzAwMDAwMDAzMDIyMjAwMDQwMjJBMDAwNTAwOUYwMDAyMDAwM0U0Cis6MTAwQzEwMDAwMDA2MDAzQzAwMDcwMDI3MDAwODAxOTEwMDA5MDA0NDdECis6MTAwQzIwMDAwMDBBMDAyRDAwMTAwMjQ3MDAxNzAwRjAwMDIyMDFENzMzCis6MTAwQzMwMDAwMDIzMDFFODAwMjYwMDRDMDAyNzAwNUYwMDIwMDExQTc1Cis6MTAwQzQwMDAwMDI4MDA5MjAwMjkwMDRGMDAyQTAwODMwMDJCMDA2NDM2Cis6MTAwQzUwMDAwMDJGMDA4RDAwMzIwMEQ4MDAzNDAyMzIwMDM2MDA3NEJDCis6MTAwQzYwMDAwMDM5MDEwQTAwM0MwMUZDMDAzRjAwOUYwMDQxMDAwNUUzCis6MTAwQzcwMDAwMDQ0MDE5NDAwNDgwMTlEMDA0OTAxQzUwMDRBMDFDRjhDCis6MTAwQzgwMDAwMDU1MDIyNTAwNTYwMjJEMDA2MDAwMEEwMDYxMDAyQTZFCis6MTAwQzkwMDAwMDYyMDAzMDAwNjMwMDMwMDA2NDAwMzAwMDY1MDAzMDA2Cis6MTAwQ0EwMDAwMDY2MDAzMDAwNjcwMDMwMDA2ODAwMzcwMDY5MDAzRkQwCis6MTAwQ0IwMDAwMDZBMDA0NzAwNkIwMDQ3MDA2QzAwNDcwMDZEMDA0NzZBCis6MTAwQ0MwMDAwMDZFMDA0NzAwNkYwMDQ3MDA3MDAwNDcwMDczMDI0NzQ2Cis6MTAwQ0QwMDAwMDdCMDI0MDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTQ4Cis6MTAwQ0UwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUYwCis6MTAwQ0YwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUUwCis6MTAwRDAwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUNGCis6MTAwRDEwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUJGCis6MTAwRDIwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNUFGCis6MTAwRDMwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTlGCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNzMwX21lLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNzMwX21lLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGMxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9yYWRlb24vUlY3MzBfbWUuYmluLmloZXgKQEAgLTAsMCArMSwzNDEgQEAKKzoxMDAwMDAwMENDMDAwM0VBN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyQUQKKzoxMDAwMTAwMDgwMDAwMDAxRDA0MDAwN0Y4MDAwMDAwMUNDNDAwMDQxMDIKKzoxMDAwMjAwMDdDNDBDMDAwQzAxNjAwMDQzMEQwM0ZGRjdEMTUwMDBDOUUKKzoxMDAwMzAwMENDMTEwMDAwMjhEODAwMUUzMTk4MDAwMTI4REMwMDFGRDgKKzoxMDAwNDAwMEM4MjAwMDA0OTVDMDAwMDY3QzQyNDAwMENDMDAwMDYyM0QKKzoxMDAwNTAwMDdFNTY4MDBDQ0MyOTAwMDBDODI0MDAwNDdFMjYwMDBCQUMKKzoxMDAwNjAwMDk1ODAwMDA2N0M0MkMwMDBDQzAwMDA2MjdFRDcwMDBDNjgKKzoxMDAwNzAwMENDMzEwMDAwQzgyQzAwMDQ3RTJFMDAwQ0NDMDAwMDYyQTUKKzoxMDAwODAwMDMxMTAzRkZGODAwMDAwMDFDRTExMDAwMDdDNDBDMDAwMTUKKzoxMDAwOTAwMDgwMDAwMDAxQ0M0MDAwNDA4MDAwMDAwMUNDNDEyMjU3OEMKKzoxMDAwQTAwMDdDNDE4MDAwQ0M0MDAwNDVDQzQwMDA0OENDNDEyMjVDRTMKKzoxMDAwQjAwMENDNDFBMUZDN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyMEMKKzoxMDAwQzAwMENDNDAwMDQ1Q0M0MDAwNDg3QzQwQzAwMENDNDEyMjVDODQKKzoxMDAwRDAwMENDNDFBMUZDN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyRUMKKzoxMDAwRTAwMENDMDAwMDQ1Q0MwMDAwNDhDQzQxMjI1Q0NDNDFBMUZDQjYKKzoxMDAwRjAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjA0MENBMUZEQzgKKzoxMDAxMDAwMEMwMTIwMDAxQ0MwMDAwNDVDQzAwMDA0ODdDRDBDMDBDREYKKzoxMDAxMTAwMENDNDEyMjVDQ0M0MUExRkNEMDREMDAwMDdDNDA4MDAwNTEKKzoxMDAxMjAwMEEwMDAwMDAwQ0M4MDAwNjI4MDAwMDAwMUNDNDEyMjVENzQKKzoxMDAxMzAwMDdDNDA4MDAwN0M0MEMwMDBDMDJBMDAwMjdDNDEwMDAwNUUKKzoxMDAxNDAwMDdEMjkwMDBDMzA5NDAwMDEzMDk4MDAwNjMwOUMwMzAwOUIKKzoxMDAxNTAwMDI5REMwMDA4N0M0MjAwMDA3QzQyNDAwMDk1NDAwMDBGRjIKKzoxMDAxNjAwMEMwMkUwMDA0MDVGMDIyNTg3RjJGMDAwQ0NDMzEwMDAwNzcKKzoxMDAxNzAwMEM4MjgwMDA0Q0NDMTIxNjlDRDAxMjE2QUNFODEyMTZCNDAKKzoxMDAxODAwMDBEQjQwMDAyQ0MwMTIxNkM5NzQwMDAwRTBEQjQwMDAwQUMKKzoxMDAxOTAwMDgwMDAwMDdCQzgzNDAwMEEwREI0MDAwMjk3NDAwMDA5QkIKKzoxMDAxQTAwMDBEQjQwMDAwQzAyRTAwMDQwNUYwMjI1ODdGMkYwMDBDNzMKKzoxMDAxQjAwMENDMzEwMDAwQzgyODAwMDQ4MDAwMDA3QkM4MzQwMDBBNEQKKzoxMDAxQzAwMDk3NDAwMDA0N0UwMjgwMDA4MDAwMDA3QkM4MzQwMDBBNTMKKzoxMDAxRDAwMDBEQjQwMDA0OTc0MEZGOEMwMDAwMDAwMENFMDEyMTZEOUIKKzoxMDAxRTAwMENFNDEyMTZFQzgyODAwMDNDODM0MDAwQTlCNDAwMDA0OTkKKzoxMDAxRjAwMDA0M0MwMDA1ODQwMDAyNkJDQzAwMDA2MjBERjQwMDAwOUEKKzoxMDAyMDAwMDk3NDAwMDBCQzgyQzAzRTZDRTgxQTJCN0MwMzAwMDA2OTEKKzoxMDAyMTAwMDdFRjM0MDI4QzAzMDAwMjA3RjZCODAyMDdGQjNDMDI5NTAKKzoxMDAyMjAwMENGODFBMkM0ODAwMDAwMDFDRkMxQTJEMTBERjQwMDAxOTIKKzoxMDAyMzAwMDk3NDAwMDBCQzgyQzAzRTdDRTgxQTJCQkMwMzAwMDA2NUMKKzoxMDAyNDAwMDdFRjM0MDI4QzAzMDAwMjA3RjZCODAyMDdGQjNDMDI5MjAKKzoxMDAyNTAwMENGODFBMkM1ODAwMDAwMDFDRkMxQTJEMjBERjQwMDAyNUYKKzoxMDAyNjAwMDk3NDAwMDBCQzgyQzAzRThDRTgxQTJCRkMwMzAwMDA2MjcKKzoxMDAyNzAwMDdFRjM0MDI4QzAzMDAwMjA3RjZCODAyMDdGQjNDMDI5RjAKKzoxMDAyODAwMENGODFBMkM2ODAwMDAwMDFDRkMxQTJEM0M4MkMwM0U5NTAKKzoxMDAyOTAwMENFODFBMkMzQzAzMDAwMDY3RUYzNDAyOEMwMzAwMDIwQ0IKKzoxMDAyQTAwMDdGNkI4MDIwN0ZCM0MwMjlDRjgxQTJDNzgwMDAwMDAxNkYKKzoxMDAyQjAwMENGQzFBMkQ0ODAwMDAwMDFDQzQwMDA0MjdDNDBDMDAwRUQKKzoxMDAyQzAwMDdDNDEwMDAwMjkxNDAwMUQzMTU0MDAwMTk5NDAwMDBDQUMKKzoxMDAyRDAwMDMxMTgxMDAwQzgxQzAwMTE5NUMwMDAwMEM4MUMwMDExODYKKzoxMDAyRTAwMENDQzEyMTAwQ0QwMTIxMDFDQ0MxMjEwMkNEMDEyMTAzQ0UKKzoxMDAyRjAwMDA0MTgwMDA0ODAwMDAzN0NDRDgxQTJBNEMwMkEwMDA0NUQKKzoxMDAzMDAwMDk1ODAwMDA4MzZBODIxQTNDQzI5MDAwMEM4MjgwMDA0NDUKKzoxMDAzMTAwMEM4MUMwMDExMERFNDAwNDA5NjQwRkZGRkM4MUMwMDExRUUKKzoxMDAzMjAwMENDQzEyMTcwQ0QwMTIxNzFDODIwMDAxMjk2MDAwMDAwQkYKKzoxMDAzMzAwMEM4MjAwMDEyODAwMDAzN0NDQzAwMDA2NDdDNDBDMDAwMTgKKzoxMDAzNDAwMDdDNDEwMDAwQ0MwMDAwNDVDQzAwMDA0ODQwRDQwMDAzQjQKKzoxMDAzNTAwMENENDEyMjVDQ0QwMUExRkNDMDFBMDAwMTA0MUNBMUZEMEQKKzoxMDAzNjAwMDdERDlDMDBDN0M0MjAwMDAwOENDMDAwMTA2MjQwMDAxQUQKKzoxMDAzNzAwMDA2MjgwMDAyQ0UxRDAwMDBDRTVEMDAwMDk4QzBGRkZBRTYKKzoxMDAzODAwMENFOUQwMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyNzgKKzoxMDAzOTAwMDdDNDBDMDAwMzBEMDAwMDEyOENDMDAwMTdDNDE0MDAwRUUKKzoxMDAzQTAwMDk1MDAwMDA2N0M0MTgwMDBDRDQxMjE2RENEODEyMTZFRkMKKzoxMDAzQjAwMDgwMDAwMEYyQzgxQzAwMDNDMDIyMDAwNDdFMTYwMDBDNUUKKzoxMDAzQzAwMENDMjEwMDAwQzgxQzAwMDQ3QzQyNDAwMDk4QzAwMDA0RkUKKzoxMDAzRDAwMDdDNDI4MDAwODAwMDAwMDFDREU1MDAwMENFNDEyMTY5MTMKKzoxMDAzRTAwMENFODEyMTZBQ0RDMTIxNkI4MDAwMDAwMUNDMDEyMTZDM0UKKzoxMDAzRjAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwOEEKKzoxMDA0MDAwMDdDNDFDMDAwMjhBNDAwMDgzMjY0MDBGRjBFNjgwMDNDNTQKKzoxMDA0MTAwMDk2ODAwMDBBN0MwMjAwMDA3QzQyMDAwMDFFMzAwMDAzMkYKKzoxMDA0MjAwMENDMDAwMDZBOUIwMDAwMDM0MjIwMDAwNTA0MjAwMDQwMkQKKzoxMDA0MzAwMDgwMDAwMTBGN0MwMjQwMDA3RTAyNDAwMDlBNDAwMDAwRDQKKzoxMDA0NDAwMDBBNjQwMDAxMzBFQzAwMTA5QUMwMDAwQUNDMDAwMDYyN0YKKzoxMDA0NTAwMEMwMkEwMDA0QzgyQzAwMjE3RTkyODAwQ0NDMDAwMDQxRjAKKzoxMDA0NjAwMENDMjkwMDAwQ0VDMDAwMjE4MDAwMDExRkM4MzAwMDA0NEMKKzoxMDA0NzAwMENEMDEyMTZEQ0Q0MTIxNkVDODMwMDAwMzdGMUYwMDBCREYKKzoxMDA0ODAwMDMwRjQwMDA3Mjc3ODAwMDE5NzQwMDAyQTA3QjgwMTI0QkMKKzoxMDA0OTAwMDlGODAwMDAwMDAwMDAwMDA4MDAwMDEzNDdGMUI4MDA0NkEKKzoxMDA0QTAwMDgwMDAwMTM4N0YxQjgwMDU4MDAwMDEzQzdGMUI4MDAyOUIKKzoxMDA0QjAwMDgwMDAwMTQwN0YxQjgwMDM4MDAwMDE0NDdGMUI4MDA3NzgKKzoxMDA0QzAwMDgwMDAwMTQ4N0YxQjgwMDY4MDAwMDE0RDI4QTQwMDA4QTEKKzoxMDA0RDAwMDlCODAwMDE5MjhBNDAwMDg4MDAwMDE1RDMyNjQwMEZGQTEKKzoxMDA0RTAwMDlCODAwMDE1MjhBNDAwMDg4MDAwMDE1RDMyNjQwMEZGOTUKKzoxMDA0RjAwMDlCODAwMDExMjhBNDAwMDg4MDAwMDE1RDMyNjQwMEZGODkKKzoxMDA1MDAwMDlCODAwMDBEMjhBNDAwMDg4MDAwMDE1RDMyNjQwMEZGN0MKKzoxMDA1MTAwMDlCODAwMDA5MjhBNDAwMDg4MDAwMDE1RDMyNjQwMEZGNzAKKzoxMDA1MjAwMDlCODAwMDA1MjhBNDAwMDg4MDAwMDE1RDMyNjQwMEZGNjQKKzoxMDA1MzAwMDI4QTQwMDA4MzI2NDAwRkYwRTY4MDAzQzlBODBGRUIyRDYKKzoxMDA1NDAwMDI4RUMwMDA4N0M0MzQwMDA3QzQzODAwMDdDNDNDMDAwRDIKKzoxMDA1NTAwMDk2QzAwMDA3Q0MwMDAwNjJDRjQxMjE2OUNGODEyMTZBOUIKKzoxMDA1NjAwMENGQzEyMTZCODAwMDAwMDFDQzAxMjE2QzgwMDAwMDAxMTMKKzoxMDA1NzAwMENGRjUwMDAwQ0MwMDAwNkI4NDAwMDM3RjBFNjgwMDNDQzgKKzoxMDA1ODAwMDlBODAwMDA0QzgyODAwMTU4MDAwMDAwMUQwNDAwMDdGMzgKKzoxMDA1OTAwMDk2ODBGRkFCN0UwMjQwMDA4NDAwMDIzOUMwMEUwMDAyNEMKKzoxMDA1QTAwMENDMDAwMDQxODAwMDAyMzdDQ0MxMzA0QTdDNDBDMDAwMDIKKzoxMDA1QjAwMDdDNDEwMDAwQzAxRTAwMDEyOTI0MDAxMkMwMjIwMDAyNUMKKzoxMDA1QzAwMDk2NDAwMDA1QzAyNjAwMDRDMDI3RkZGQjdEMjUwMDBCRDgKKzoxMDA1RDAwMEMwMjYwMDAwN0REMjgwMEI3RTEyQzAwQjdEMjUwMDBDNTIKKzoxMDA1RTAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MxMjE2OTlBODAwMDBBOTYKKzoxMDA1RjAwMENEMDEyMTZBQ0Q0MTIxNkI5NkMwRkU4M0NEODEyMTZDNTYKKzoxMDA2MDAwMEM4MzAwMDE4OTcwMDAwMDBDODMwMDAxODgwMDAwMDAxQjIKKzoxMDA2MTAwMENDMDAwMDE4ODQwMDAzN0ZDQzAwMDA3RkM4MTQwMDEzQjYKKzoxMDA2MjAwMEM4MTgwMDE0Q0Q0MTIxNkI5NkMwRkU3N0NEODEyMTZDOTYKKzoxMDA2MzAwMDgwMDAwMTgxQzgzMDAwMThDODBDMDAwODk4QzAwMDAwNzQKKzoxMDA2NDAwMEM4MEMwMDA4N0M0MTAwMDA5NTAwMDAwMjAwMDAwMDAwN0EKKzoxMDA2NTAwMDdDNDE0MDAwQzgyMDAwMDlDQzQwMDA0M0NFMDFBMUY0RjkKKzoxMDA2NjAwMENDNDAwMDQ0QzAwRTgwMDA3QzQyNDAwMDdDNDI4MDAwQjAKKzoxMDA2NzAwMDJBQUMwMDFGOTZDMEZFNjRDMDM1RjAwMENFNDAwM0UyRjUKKzoxMDA2ODAwMDMyNzgwMDAzMjY3QzAwMDg3RkY3QzAwQjdGRkJDMDBDOEMKKzoxMDA2OTAwMDJBNzgwMDE4Q0ZDMDAzRTNDRjgwMDNFNDI2QjAwMDAyMUQKKzoxMDA2QTAwMDdGM0YwMDAwQ0YwMDAzRTU4MDAwMDMxRDdDODBDMDAwNzkKKzoxMDA2QjAwMDdDNDBDMDAwMjhEMDAwMDgzMTEwMDAwRjk1MDAwMDBGQ0EKKzoxMDA2QzAwMDI1MjgwMDAxMDZBODAxQjI5RTgwMDAwMDAwMDAwMDAwNUQKKzoxMDA2RDAwMDgwMDAwMUQzQzAxMjA4MDA4MDAwMDFFMUM4MTQwMDBGOUYKKzoxMDA2RTAwMDgwMDAwMUU4QzgxNDAwMTA4MDAwMDFFRkNDQzFBMkE0NzIKKzoxMDA2RjAwMDgwMDAwMUY4QzgxNDAwMTEzMEQwMDAzRjBEMjgwMDE1MEIKKzoxMDA3MDAwMDlBODAwMDEyMEQyODAwMUU5QTgwMDAxRTBEMjgwMDIwREQKKzoxMDA3MTAwMDlBODAwMDIzMEQyNDAwMEYwRDI4MDAxMDdFNkE4MDBDQTMKKzoxMDA3MjAwMDlBODAwMDI2MEQyMDAwMDQwRDI0MDAxNDBEMjgwMDI4QjYKKzoxMDA3MzAwMDdFNjI0MDBDN0VBNjgwMEM5QTgwMDAyQUM4MTQwMDExQUMKKzoxMDA3NDAwMDgwMDAwMDAxQ0NDMUEyQTRDMDEyMDgwMDdDNDE0MDAwN0UKKzoxMDA3NTAwMDdEMENDMDBDQzAxMjAwMDgyOTU4MDAwMzI5NUMwMDBDNTUKKzoxMDA3NjAwMDdDNDIwMDAwN0REMUMwMEIyNjIwMDAxNDdFMUU0MDBDNzAKKzoxMDA3NzAwMDdFNEU4MDBDQ0U4MUEyQTQ4MDAwMDAwMUNEODFBMUZFMUUKKzoxMDA3ODAwMEM4MTQwMDBGMDQxMDIxMEU5NTQwMDAwMEM4MTQwMDBGN0IKKzoxMDA3OTAwMEQwNTEwMDAwODAwMDAwMDFDQ0MxQTJBNEM4MTQwMDEwRjgKKzoxMDA3QTAwMDA0MTAyMTA4OTU0MDAwMDBDODE0MDAxMEQwNTEwMDAwMkEKKzoxMDA3QjAwMDgwMDAwMDAxQ0NDMUEyQTRDQ0MxQTJBNDA0MTAwMDAxRkQKKzoxMDA3QzAwMENEMDAwMDE5ODQwMDAzN0ZDQzAwMDA3RkM4MTAwMDE5MDEKKzoxMDA3RDAwMDk5MDAwMDAwQzgxMDAwMTk4MDAwMDAwMjdDNDA4MDAwRDEKKzoxMDA3RTAwMDA0MTAyMTAwOTU0MDAwMDBDODE0MDAxMUQwNTEwMDAwRjEKKzoxMDA3RjAwMDgwMDAwMzdDQ0NDMUEyQTQ3QzQwQzAwMENDNDAwMDBEOTIKKzoxMDA4MDAwMDk0QzBGRTAxQ0M0MDAwMEU3QzQxMDAwMDk1MDAwMDA1MjQKKzoxMDA4MTAwMDA4Q0MwMDAxQzgxNDAwMDU5OTQwMDAxNDAwMDAwMDAwMzUKKzoxMDA4MjAwMDk4QzBGRkZCN0M0MTAwMDA4MDAwMDAwMjdEMDA4MDAwM0EKKzoxMDA4MzAwMEM4MTQwMDA1N0M0MEMwMDA5OTQwMDAwQ0M4MTgwMDBDOEEKKzoxMDA4NDAwMDdDNDEwMDAwOTU4MEZERjBDODIwMDAwRUM4MUMwMDBEMDIKKzoxMDA4NTAwMDY2MjAwMDIwN0UxRTAwMkMyNTI0MDAwMjdFNjI0MDIwOUYKKzoxMDA4NjAwMDgwMDAwMDAxQ0NFNjAwMDA3QzQxMDAwMENDMDAwMDZDNjAKKzoxMDA4NzAwMENDMDAwMDZEQzgxODAwMUZDODFDMDAxRTY1OTgwMDIwMjEKKzoxMDA4ODAwMDdERDlDMDJDN0NENEMwMENDQ0RFMDAwMDQ1REMwMDA0M0IKKzoxMDA4OTAwMEM4MjgwMDE3OTY4MDAwMEZDMDBFMDAwMTI4NjgwMDA4QzUKKzoxMDA4QTAwMDJBQUMwMDE2MzJBODAwRkYwRUIwMDA0OTdGMkYwMDBCQzMKKzoxMDA4QjAwMDk3MDAwMDA2MDAwMDAwMDBDODE0MDAwNTdDNDBDMDAwM0UKKzoxMDA4QzAwMDgwMDAwMjIxN0M0MTAwMDA4MDAwMDIyNEQwNDAwMDdGOTMKKzoxMDA4RDAwMDg0MDAwMjM5Q0MwMDAwNDFDQ0MxMzA0QTk0MDAwMDAwQjEKKzoxMDA4RTAwMEM4M0MwMDFBMDQzQzAwMDVDRkMxQTJBNEMwMzYxRjkwMkEKKzoxMDA4RjAwMEMwMzg3RkZGN0MwM0MwMTA3RjdCNDAwQ0NGNDEyMTdDNDAKKzoxMDA5MDAwMENGQzEyMTdEQ0MwMTIxN0VDMDNBMDAwNDA0MzQyMTdGNzcKKzoxMDA5MTAwMDdGN0I0MDBDQ0MzNTAwMDBDODNDMDAwNDJCRkMwMDFGNDIKKzoxMDA5MjAwMDA0MzgwMDIwOTdDMDAwMDVDQzAwMDA2MjlCODAwMDAwQzYKKzoxMDA5MzAwMDBCQjgwMDAxODAwMDAyNDVDQzAwMDA3MUNDMDFBMUY0OEQKKzoxMDA5NDAwMDA0MzgwMDE2QzAzNjAwMDJDRjgxQTJBNDg4MDAwMDAwM0YKKzoxMDA5NTAwMENGNDEyMDEwN0M0MEMwMDAyOEQwMDAxQzk1MDAwMDA1MkQKKzoxMDA5NjAwMDA0RDQwMDAxQ0Q0MDAwNjU4MDAwMDAwMUNENDAwMDY4NDYKKzoxMDA5NzAwMDA5NTQwMDAyODAwMDAwMDFDRDQwMDA2Njg0MDAwMjZBMzQKKzoxMDA5ODAwMEM4MTgwM0VBN0M0MEMwMDA5OTgwRkQ5RkM4MTQwMDE2NzcKKzoxMDA5OTAwMDA4RDAwMDAxOTk0MDAwMkJDRDAwMDA2ODdDNDA4MDAwMDkKKzoxMDA5QTAwMEEwMDAwMDAwQ0M4MDAwNjIwNDNDMDAwNUNGQzFBMkE0REUKKzoxMDA5QjAwMENDMDFBMUY0ODQwMDAzN0ZDQzAwMDA0Njg4MDAwMDAwMzUKKzoxMDA5QzAwMENDMDAwMDdGODQwMDAyN0NDODE4MDNFQTdDNDBDMDAwOTEKKzoxMDA5RDAwMDk5ODBGRDhEQzgxNDAwMTYwOEQwMDAwMTk5NDAwMDE5QjcKKzoxMDA5RTAwMENEMDAwMDY4N0M0MDgwMDBBMDAwMDAwMENDODAwMDYyNDgKKzoxMDA5RjAwMDA0M0MwMDIyQ0ZDMUEyQTQ4NDAwMDM3RkNDMDAwMDQ3QTYKKzoxMDBBMDAwMDg4MDAwMDAwQ0MwMDAwN0ZDODEwMDAxNjk5MDAwMDBEN0YKKzoxMDBBMTAwMENDNDAwMDY3ODAwMDAwMDI3QzQwODAwMEM4MTgwM0VBRDgKKzoxMDBBMjAwMDk5ODBGRDc5N0M0MEMwMDA5NEMwMDAwM0M4MTAwMDE2NzYKKzoxMDBBMzAwMDk5MDAwMDA0Q0NDMDAwNjg4MDAwMDAwMjdDNDA4MDAwNjcKKzoxMDBBNDAwMDg0MDAwMjM5QzAxNDgwMDBDQzAwMDA0MUNENDEzMDRBRkUKKzoxMDBBNTAwMEMwMTQ4MDAwOTkwMDAwMDBDODEwMDAxNjgwMDAwMDAyMzkKKzoxMDBBNjAwMDdDNDA4MDAwQzAxMjAwMDE3QzUxNDAwQzgwMDAwMDAxREQKKzoxMDBBNzAwMEQwNTUwMDAwN0M0MEMwMDA3QzQxMDAwMDdDNDE0MDAwMUIKKzoxMDBBODAwMDdDNDE4MDAwMjkxQzAwMUZDQ0MwMDA0QUNEMDAwMDRCRDcKKzoxMDBBOTAwMDk1QzAwMDAzQzAxQzgwMDBDREMxMjAxMEREODMwMDAwODQKKzoxMDBBQTAwMDA1NUMyMDAwQ0MwMDAwNjI4MDAwMDAwMUQ4MUY0MTAwREUKKzoxMDBBQjAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwQzMKKzoxMDBBQzAwMENDQzAwMDRDQ0QwMDAwNERERDgzMDAwMDA1NUNBMDAwRDMKKzoxMDBBRDAwMDgwMDAwMDAxRDgxRjQxMDA3QzQwQzAwMDdDNDEwMDAwMjQKKzoxMDBBRTAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MwMDA0RUNEMDAwMDRGRDYKKzoxMDBBRjAwMEREODMwMDAwMDU1Q0MwMDA4MDAwMDAwMUQ4MUY0MTAwQkMKKzoxMDBCMDAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwNzIKKzoxMDBCMTAwMENDQzAwMDUwQ0QwMDAwNTFERDgzMDAwMDA1NUNGOEUwNDIKKzoxMDBCMjAwMDgwMDAwMDAxRDgxRjQxMDA3QzQwQzAwMDdDNDEwMDAwRDMKKzoxMDBCMzAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MwMDA1MkNEMDAwMDUzN0QKKzoxMDBCNDAwMEREODMwMDAwMDU1Q0Y4ODA4MDAwMDAwMUQ4MUY0MTAwQjMKKzoxMDBCNTAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwMjIKKzoxMDBCNjAwMENDQzAwMDU0Q0QwMDAwNTVERDgzMDAwMDA1NUNFMDAwRTIKKzoxMDBCNzAwMDgwMDAwMDAxRDgxRjQxMDA3QzQwQzAwMDdDNDEwMDAwODMKKzoxMDBCODAwMDdDNDE0MDAwN0M0MTgwMDBDQ0MwMDA1NkNEMDAwMDU3MjUKKzoxMDBCOTAwMEREODMwMDAwMDU1Q0YwMDA4MDAwMDAwMUQ4MUY0MTAwRUIKKzoxMDBCQTAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDdDNDE4MDAwRDIKKzoxMDBCQjAwMENDQzAwMDU4Q0QwMDAwNTlERDgzMDAwMDA1NUNGM0ZDN0IKKzoxMDBCQzAwMDgwMDAwMDAxRDgxRjQxMDBEMDQzMjAwMDdDNDA4MDAwRkQKKzoxMDBCRDAwMEEwMDAwMDAwQ0M4MDAwNjJEMDQzQTAwMDdDNDA4MDAwRDgKKzoxMDBCRTAwMEEwMDAwMDAwQ0M4MDAwNjJEMDQzQzAwMDdDNDA4MDAwQTgKKzoxMDBCRjAwMEEwMDAwMDAwQ0M4MDAwNjJEMDQzRjhFMDdDNDA4MDAwODAKKzoxMDBDMDAwMEEwMDAwMDAwQ0M4MDAwNjJEMDQzRjg4MDdDNDA4MDAwQ0YKKzoxMDBDMTAwMEEwMDAwMDAwQ0M4MDAwNjJEMDQzRTAwMDdDNDA4MDAwNTcKKzoxMDBDMjAwMEEwMDAwMDAwQ0M4MDAwNjJEMDQzRjAwMDdDNDA4MDAwMzcKKzoxMDBDMzAwMEEwMDAwMDAwQ0M4MDAwNjJEMDQzRjNGQzdDNDA4MDAwMjgKKzoxMDBDNDAwMEEwMDAwMDAwQ0M4MDAwNjJDODE0MDNFMENDNDMwMDAwODgKKzoxMDBDNTAwMENDNDMwMDAwQ0M0MzAwMDA3RDQ1QzAwMENEQzMwMDAwNjQKKzoxMDBDNjAwMEQwNDMwMDAwN0M0MDgwMDBBMDAwMDAwMENDODAwMDYyRTcKKzoxMDBDNzAwMDdDNDBDMDAwQzgxMDAzRTJDODE0MDNFNUM4MTgwM0UzQjEKKzoxMDBDODAwMEM4MUMwM0U0Q0Q4MTIxNjlDREMxMjE2QUNDQzEyMTZCOEYKKzoxMDBDOTAwMENDMDEyMTZDMDQyMDAwMDQ3REExODAwMDdEOTY0MDAyREYKKzoxMDBDQTAwMDk2NDBGQ0Q5Q0Q4MDAzRTMzMTI4MDAwM0MwMkRGMDAwMkQKKzoxMDBDQjAwMDI1MTgwMDA4N0RBRDgwMEI3REE5ODAwQzgwMDAwMDAxMDcKKzoxMDBDQzAwMENEODAwM0UzMzA4Q0ZGRkZEMDREMDAwMDdDNDA4MDAwREUKKzoxMDBDRDAwMEEwMDAwMDAwQ0M4MDAwNjJDODE0MDAyMDE1NTgwMDAyNUIKKzoxMDBDRTAwMDk1ODBGRkZGQzgxNDAwMjBDQzAwMDA2RUNDNDEyMTgwMEQKKzoxMDBDRjAwMDdDNDBDMDAwQ0NDMTIxOERDQzQxMjE4MTI4RDAwMDFGNzcKKzoxMDBEMDAwMDM0NTg4MDAwQ0Q4MTIxOEM5NTAwRkNCRkNDNDEyMTgyREMKKzoxMDBEMTAwMEM4MTQwMDIwOTk0MEZGRkZDODE0MDAyMDgwMDAwMDAyODIKKzoxMDBEMjAwMDdDNDA4MDAwN0M0MEMwMDAyOEQwMDAxODMxMTAwMDAxQjkKKzoxMDBEMzAwMEMwMTYwMDgwOTUwMDAwMDNDMDJBMDAwNDdDRDRDMDBDQkIKKzoxMDBENDAwMENDQzEyMTdDQ0M0MTIxN0RDQzQxMjE3RTdDNDE4MDAwRTUKKzoxMDBENTAwMDFEQjAwMDAzMzZBMDIxN0Y5QjAwMDAwMzQxOUMwMDA1Q0QKKzoxMDBENjAwMDA0MUMwMDQwOTlDMDAwMDAwOURDMDAwMUNDMjEwMDAwRjcKKzoxMDBENzAwMEM4MjQwMDA0MkE2QzAwMUY0MTlDMDAwNTlBQzBGRkZBOTkKKzoxMDBEODAwMENDODAwMDYyODAwMDAwMDI3QzQwODAwMDdDNDBDMDAwN0IKKzoxMDBEOTAwMDA0RDQwM0U2ODAwMDAwMDFDQzU0MDAwMDgwMDAwMzdDRjIKKzoxMDBEQTAwMENDNDAwM0VBQzAxQzgwMDAwNDRDQTAwMENEQzEyMDEwNDAKKzoxMDBEQjAwMDdDNDEwMDAwQzgxNDAwMDkwNDE4MDAwMDA0MUMwMDA4NEQKKzoxMDBEQzAwMENEODAwMDcxMDlEQzAwMDEwNTk4MDAwMUNEMEQwMDAwMDcKKzoxMDBERDAwMDk5QzBGRkZDQ0M4MDAwNjI4MDAwMDM3Q0NENDAwMDcxOTQKKzoxMDBERTAwMEMwMEUwMTAwQ0MwMDAwNDFDQ0MxMzA0QUM4M0MwMDdGOUQKKzoxMDBERjAwMENDMDAwMDdGODAwMDAwMDFDQzAwMDA3RkNDMDAwMDdGOTEKKzoxMDBFMDAwMDg4MDAwMDAwQ0MwMDAwN0YwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDBFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDBFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDBFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDBFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDBFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDBFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMDBFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDBFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDBFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDBFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDBFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDBFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDBFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDBFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDBFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDBGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDBGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDBGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDBGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDBGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDBGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDBGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDBGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDBGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDBGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDBGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDBGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDBGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDBGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDEwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDEwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDEwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDEwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDEwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDEwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDEwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDEwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDExMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDExMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDExNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDExNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDExNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDExNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDExODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDExOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDExQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDExQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDExQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDExRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDExRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDExRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDEyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDEyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDEyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDEyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDEyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDEyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDEyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDEyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDEyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDEyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDEyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDEyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDEyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDEzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDEzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDEzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDEzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDEzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDEzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDEzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDEzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDEzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDEzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDEzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDEzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDEzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDEzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDE0MDAwMDAwMDEwMzMxMDAxMDAwMDQwMDE3MDAwNjAwMjEwMDA4NEQKKzoxMDE0MTAwMDAwMjcwMDI4MDAyODAwMjMwMDI5MDAyOTAwMkEwMDI2OTAKKzoxMDE0MjAwMDAwMkIwMDI5MDAyRDAwMzgwMDJFMDAzRjAwMkYwMDRBMUQKKzoxMDE0MzAwMDAwMzQwMDRDMDAzNjAwMzAwMDM5MDBBRjAwM0EwMENGRDUKKzoxMDE0NDAwMDAwM0IwMEU0MDAzQzAwRkMwMDNEMDE2QjAwM0YwMEFEQjAKKzoxMDE0NTAwMDAwNDEwMzM2MDA0MzAzNDkwMDQ0MDE4RTAwNDUwMEZDNkYKKzoxMDE0NjAwMDAwNDYwMUFDMDA0NzAxQUMwMDQ4MDFGRTAwNDkwMjBDRjcKKzoxMDE0NzAwMDAwNEEwMjU1MDA0QjAyODIwMDUyMDI1RjAwNTMwMjcxODMKKzoxMDE0ODAwMDAwNTQwMjg3MDA1NzAyOTkwMDYwMDI5RDAwNjEwMkFDN0YKKzoxMDE0OTAwMDAwNjIwMkI2MDA2MzAyQzAwMDY0MDJDQTAwNjUwMkQ0QTIKKzoxMDE0QTAwMDAwNjYwMkRFMDA2NzAyRTgwMDY4MDJGMjAwNjkwMkY2RTgKKzoxMDE0QjAwMDAwNkEwMkZBMDA2QjAyRkUwMDZDMDMwMjAwNkQwMzA2NzQKKzoxMDE0QzAwMDAwNkUwMzBBMDA2RjAzMEUwMDcwMDMxMjAwNzIwMzYzQzQKKzoxMDE0RDAwMDAwNzQwMzY5MDA3OTAzNjcwMDdDMDMxQzAwMEYwMzc4MjQKKzoxMDE0RTAwMDAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODAwMEYwMzc4RDQKKzoxMDE0RjAwMDAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODAwMEYwMzc4QzQKKzoxMDE1MDAwMDAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODAwMEYwMzc4QjMKKzoxMDE1MTAwMDAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODAwMEYwMzc4QTMKKzoxMDE1MjAwMDAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODAwMEYwMzc4OTMKKzoxMDE1MzAwMDAwMEYwMzc4MDAwRjAzNzgwMDBGMDM3ODAwMEYwMzc4ODMKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9yYWRlb24vUlY3MzBfcGZwLmJpbi5paGV4IGIvZmlybXdhcmUvcmFkZW9uL1JWNzMwX3BmcC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDgxMWZmCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNzMwX3BmcC5iaW4uaWhleApAQCAtMCwwICsxLDIxMyBAQAorOjEwMDAwMDAwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCODAwMDAwMDAwOQorOjEwMDAxMDAwREMwMzAwMDBDQzgwMDA0MEQwNDAwMDQwN0M0MDgwMDBFOQorOjEwMDAyMDAwQTAwMDAwMDA3RTgyODAwQkM4MTgwMDBFMzE5ODAwMDFFRAorOjEwMDAzMDAwN0M0MjQwMDA5NTgwMDIzQTdDNDI4MDAwQzgxQzAwMUMzMworOjEwMDA0MDAwQzAzN0MwMDA3QzQwQzAwMDdDNDEwMDAwN0NCNDgwMEIwNQorOjEwMDA1MDAwQzAzNjAwMDM5OUMwMDAwMEM4MUMwMDFDN0NCNDgwMEM5MgorOjEwMDA2MDAwMjRENDAwMDI3RDY1NDAwMENENDAwMDQzQ0U4MDAwNDM5MworOjEwMDA3MDAwQ0QwMDAwNDNDQzgwMDA0MENFNDAwMDQwQ0U4MDAwNDAwOAorOjEwMDA4MDAwQ0NDMDAwNDBEQzNBMDAwMDk3ODBGRkRFQ0QwMDAwNDA4RAorOjEwMDA5MDAwN0M0MEMwMDA4MDAwMDAxODdDNDEwMDAwRDQwMDAzNDA3OAorOjEwMDBBMDAwRDQwMDBGQzBENDAwMEZBMkM4MTgwMDBFODAwMDAwMENBRQorOjEwMDBCMDAwMzE5ODAwMDJENDAwMDNDMEQ0MDAwRkMwRDQwMDBGQTJCNgorOjEwMDBDMDAwQzgxODAwMEUyODhDMDAwODMwQ0MwMDBGMzQxMDAwMDEzNgorOjEwMDBEMDAwN0QwRDAwMDg4MDAwMDAwQzdEOTE4MDBCQ0M4MDAwNDBERAorOjEwMDBFMDAwRDA0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI1OQorOjEwMDBGMDAwRDQwMDAzNDBENDAwMEZDMEQ0MDAwRkEyQ0M4MDAwNDAzNQorOjEwMDEwMDAwRDA0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEIzOAorOjEwMDExMDAwRDQwMDAzQzBENDAwMEZDMEQ0MDAwRkEyQ0M4MDAwNDA5NAorOjEwMDEyMDAwRDA0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEIxOAorOjEwMDEzMDAwQ0M0MDAzRjk4MDAwMDI0OUNDNDAwM0Y4QzAzN0ZGRkZGMAorOjEwMDE0MDAwN0M0MTQwMDBDRjQxQTI5RUM4MjAwM0Y4QzgxQzAzRjk5RgorOjEwMDE1MDAwNjYyMDAwMjBDODE4MDNGQjdERTFDMDJDN0Q1OEMwMDgzNAorOjEwMDE2MDAwN0NEQ0MwMjA2OTEwMDAyMEMwMzYwMDAzQ0MwMDAwNTRBNQorOjEwMDE3MDAwN0NCNDgwMEM4MDAwMDA2OUNDODAwMDQwN0M0MTgwMDAxMQorOjEwMDE4MDAwQ0Q4MUEyOUVDQzgwMDA0MDgwMDAwMDY3Q0Q4MDAwNDBFMQorOjEwMDE5MDAwQzAxOUZGRkZDQzgwMDA0MENEODFBMjlFN0M0MEMwMDBGMgorOjEwMDFBMDAwN0M0MTAwMDA3QzQxNDAwMENDQzFBMUZBQ0QwMUExRjkwNQorOjEwMDFCMDAwQ0Q0MUEyOURDQ0MwMDA0MENEMDAwMDQwQ0Q0MDAwNDBDQworOjEwMDFDMDAwQ0M0MDAwNDA3QzQwODAwMEEwMDAwMDAwN0U4MjgwMEI3QworOjEwMDFEMDAwQ0MwMDAwNTRDQzgwMDA0MDdDNDBDMDAwN0M0MTAwMDAzQQorOjEwMDFFMDAwN0M0MTQwMDBDQ0MxQTFGQUNEMDFBMUY5Q0Q0MUEyOUQzNQorOjEwMDFGMDAwQ0NDMDAwNDBDRDAwMDA0MENENDAwMDQwRDA0MDAwNDA4OQorOjEwMDIwMDAwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCN0M0MEMwMDAwQgorOjEwMDIxMDAwMzBEMDAwMDFDQ0MxQTI5Rjk1MDAwMDAzMDQxNDAwMDE1RQorOjEwMDIyMDAwMDQxNDAwMDJDRDQwMDNGQkNDODAwMDQwODAwMDAwMDA5RAorOjEwMDIzMDAwQ0NDMDAwNDA3QzQwQzAwMENDODAwMDQwQ0NDMUEyQTIxOQorOjEwMDI0MDAwODAwMDAwMDBDQ0MwMDA0MDdDNDBDMDAwMjhENDAwMUZDQgorOjEwMDI1MDAwQ0M4MDAwNDA5NTQwMDAwMzdDNDEwMDAwQ0NDMDAwNTc5QQorOjEwMDI2MDAwMjkxODAwMUZDQ0MwMDA0MDk1ODAwMDAzQ0QwMDAwNDAzRAorOjEwMDI3MDAwQ0QwMDAwNTg4MDAwMDI0OUNDMDAwMDdGQzgyMDAwMTc0NAorOjEwMDI4MDAwQzgzMDAwMjI5QTAwMDAwNjBFMjgwMDAxQzgyNDAwMUU3MworOjEwMDI5MDAwMEE2NDAwMDFENDAwMTI0MENFNDAwMDQwQzAzNkMwMDBDNQorOjEwMDJBMDAwOTY4MDAwMDczNzc0NzkwMDA0MUMwMDAxQ0Y0MDAwNDA5RAorOjEwMDJCMDAwQ0RDMDAwNDBDRjAwMDNGQTdDMDMwMDAwQ0EwQzAwMTA0MAorOjEwMDJDMDAwN0M0MTAwMDA5NEMwMDAwNDdDNDE0MDAwRDQyMDAyQzQ2MgorOjEwMDJEMDAwQ0RFMDAwNDQ5QjAwMDAwQjdDNDE4MDAwQ0MwMDAwNEIzMworOjEwMDJFMDAwQ0RBMDAwNDlDRDIwMDA0MUNENjAwMDQxQ0RBMDAwNDEwRQorOjEwMDJGMDAwMDYyMDAwMDFDRTAwMDA1NjgwMDAwMjQ5Q0MwMDAwN0Y5RAorOjEwMDMwMDAwQzgyODAwMjBDODJDMDAyMUNDMDAwMDYzN0VFQTQwMDFGMAorOjEwMDMxMDAwNjU3NDAwMjA3RjUzNDAyQzI2OUMwMDAyN0RGNUMwMjA5MAorOjEwMDMyMDAwNjlGODAwMjBDRTgwMDA0QkNFNjAwMDQ5Q0RFMDAwNDE0RQorOjEwMDMzMDAwQ0ZBMDAwNDFDRTYwMDA0MTI3MUMwMDAyN0RGNUMwMjAwNworOjEwMDM0MDAwNjlGODAwMjA3REIyNDAwMUNGMDAwMDRCQ0U2MDAwNDkyQgorOjEwMDM1MDAwQ0RFMDAwNDFDRkEwMDA0MTgwMDAwMEJDQ0U2MDAwNDE1NAorOjEwMDM2MDAwQzgyMDAwMTdDODMwMDAyMjlBMDAwMDA2MEUyODAwMDE5RAorOjEwMDM3MDAwQzgyNDAwMUUwQTY0MDAwMUQ0MDAxMjQwQ0U0MDAwNDA5MAorOjEwMDM4MDAwQ0EwQzAwMTA3QzQxMDAwMDk0QzAwMDBCQzAzNkMwMDBCNQorOjEwMDM5MDAwOTY4MDAwMDczNzc0NzkwMDA0MUMwMDAxQ0Y0MDAwNDBBQworOjEwMDNBMDAwQ0RDMDAwNDBDRjAwMDNGQTdDMDMwMDAwODAwMDAwQjUwMAorOjEwMDNCMDAwN0M0MTQwMDBDQzAwMDA0ODgwMDAwMEVFMDAwMDAwMDBCRQorOjEwMDNDMDAwQzgyMDAwMTdDODFDMDAyMzBFMjQwMDAyOTlDMDAwMTU4NQorOjEwMDNEMDAwN0M0MTgwMDAwQTIwMDAwMUNFMDAwMDU2RDQwMDA0NDA3OQorOjEwMDNFMDAwQ0MwMDAwNDBDMDM2QzAwMENBMTQwMDEzOTY0MDAwMDc3RAorOjEwMDNGMDAwMzc3NDc5MDBDRjQwMDA0MENDMDAwMDQwQzgzMDAzRkE4OQorOjEwMDQwMDAwODAwMDAxMDNDRjAwMDAyMkNDMDAwMDIyOTU0MDAxNDY2RAorOjEwMDQxMDAwQ0MwMDAwN0ZDQ0EwMDA0NjgwMDAwMDAwQ0MyMDAwNDYyRAorOjEwMDQyMDAwODAwMDAyNDlDQzAwMDA2NEM4MjAwMDE3QzgxMDAwMUZEQgorOjEwMDQzMDAwOTYwMDAwMDUwOTEwMDAwMUQ0MDAwNDQwQ0QwMDAwNDBFMgorOjEwMDQ0MDAwQ0QwMDAwMjJDQzgwMDA0MEQwNDAwMDQwQzgwQzAwMjVFOAorOjEwMDQ1MDAwOTRDMEZFRUNDODEwMDAwOENEMDAwMDQwRDQwMDBGQzBDRQorOjEwMDQ2MDAwODAwMDAwMDBENDAwMEZBMjdDNDBDMDAwN0M0MTAwMDA0RQorOjEwMDQ3MDAwQ0NDMDAzRkRDRDAwMDNGQ0NDQzAwMDQyQ0QwMDAwNDI0NworOjEwMDQ4MDAwMjkxNDAwMUYyOTE4MDAxMDMxOTgwMDA3M0I1QzAwMDE1NworOjEwMDQ5MDAwN0Q3NjAwMEI5OTgwMDAwNTdENUU0MDBCQ0MwMDAwNDIwQworOjEwMDRBMDAwODAwMDAyNDlDQzAwMDA0RDI5OTgwMDAxMjkyQzAwMDg0OQorOjEwMDRCMDAwOTk4MDAwM0QzMkVDMDAwMTk2MDAwMDA0MjkzMDAwMENDOAorOjEwMDRDMDAwODAwMDAyNDlDQzAwMDA0MjA0MTQwMDEwQ0Q0MDAwNDJEQworOjEwMDREMDAwMzMzMDAwMDEzNDI4MDAwMTg0MDAwMTVEQzgxNDAwMDM5QQorOjEwMDRFMDAwOUI0MDAwMUIwNDM4MDAwQzg0MDAwMTVEQzgxNDAwMDMwRAorOjEwMDRGMDAwOUI0MDAwMTcwNDM4MDAwODg0MDAwMTVEQzgxNDAwMDMwNQorOjEwMDUwMDAwOUI0MDAwMTMwNDM4MDAwNDg0MDAwMTVEQzgxNDAwMDNGQworOjEwMDUxMDAwOUI0MDAwMTVDODBDMDNGRDlBODAwMDA5QzgxMDAzRkMxRAorOjEwMDUyMDAwOUIwMDAxMDFDQzAwMDA0RDA0MTQwMDEwQ0NDMDAwNDIxRgorOjEwMDUzMDAwQ0QwMDAwNDI4MDAwMDEzNUNENDAwMDQyOTZDMDAwRkE1NworOjEwMDU0MDAwQ0MwMDAwNEQ4MDAwMDI0OUNDMDAwMDRFOUFDMDAwMDM1MAorOjEwMDU1MDAwQ0MwMDAwNERDQzAwMDA0RURGODMwMDAwODAwMDAwMDA4NgorOjEwMDU2MDAwRDgwMzAxRkY5QUMwMDBGMENDMDAwMDREODAwMDAyNDk4MgorOjEwMDU3MDAwQ0MwMDAwNEVDODE4MDAwM0M4MUMwMDAzQzgyMDAwMDNBQworOjEwMDU4MDAwN0Q1RDQwMDM3REExQzAwMzdENUQ0MDBDMkExMDAwMUZFRQorOjEwMDU5MDAwMjk5QzAwMUY3RDFEMDAwQjdEMTc0MDBCODgwMDAwMDA2QgorOjEwMDVBMDAwN0U5MjgwMEI5NjQwMDAwNENDMDAwMDRFODAwMDAyNDlGMQorOjEwMDVCMDAwQ0MwMDAwNDIwNDM4MDAwOENGODAwMDQyQzgwODAwMDM4NQorOjEwMDVDMDAwQzgwQzAwMDNDODEwMDAwM0M4MTQwMDAzQzgxODAwMDNCNworOjEwMDVEMDAwQzgxQzAwMDNDODI0MDAwM0M4MjgwMDAzMjlGQzAwMUYwRQorOjEwMDVFMDAwMkFCMDAwMUY3RkYzQzAwQjI4RjAwMDFGN0ZGM0MwMEI2MQorOjEwMDVGMDAwMjk3MDAwMUY3RkYzQzAwQjdEODg4MDAxN0RDQ0MwMDE3NgorOjEwMDYwMDAwN0U1MTAwMDE3RTk1NDAwMTdDOTA4MDAyN0NENEMwMDIyNgorOjEwMDYxMDAwN0NCQzgwMEI5QUMwMDAwMzdDOEY0MDBCMzhCNDAwMDE3NworOjEwMDYyMDAwOUI0MDAwQzFDQzAwMDA0RDlCQzAwMEJGQ0MwMDAwNEVFMQorOjEwMDYzMDAwQzgwQzAzRkRDODEwMDNGQ0NDQzAwMDQyODAwMDAxNkU1MgorOjEwMDY0MDAwQ0QwMDAwNDJENDAwMDM0MEQ0MDAwRkMwRDQwMDBGQTI1QworOjEwMDY1MDAwQ0M4MDAwNDBDQzQwMDA0MENDNDAwMDQwQ0M0MDAwNDAyQQorOjEwMDY2MDAwN0M0MEMwMDBDQ0MwMDA0MENDQzAwMDBEODAwMDAwMDAyOQorOjEwMDY3MDAwRDA0MDAwNDA3QzQwQzAwMDdDNDEwMDAwNjUxNDAwMjA1OAorOjEwMDY4MDAwN0Q0RDQwMkMyNDU4MDAwMjdENTk4MDIwN0M0MUMwMDBDMworOjEwMDY5MDAwQ0Q4MDAwNDI2OTk4MDAyMENEODAwMDQyQ0RDMDAwNDI0QworOjEwMDZBMDAwQzAyM0MwMDAwNUU0MDAwMjdDQTA4MDBCMjY2NDAwMTA3QgorOjEwMDZCMDAwN0NBNDgwMENDQzgwMDA0MENEQzAwMDQwQ0NDMDAwNDA2OQorOjEwMDZDMDAwOTVDMDAwMEVDRDAwMDA0MDA5REMwMDAxQzgyODAwMDNFMQorOjEwMDZEMDAwOTY4MDAwMDhDRTgwMDA0MEM4MzQwMDFEOTc0MDAwMDA3RQorOjEwMDZFMDAwQzgzNDAwMUQyNkE4MDAwODg0MDAwMjRDQ0MyQjAwMDA1MgorOjEwMDZGMDAwOTlDMEZGRjcwOURDMDAwMURDM0EwMDAwOTc4MDAwMDQ5NAorOjEwMDcwMDAwN0M0MTgwMDA4MDAwMDFBMjI1OTgwMDAyQTAwMDAwMDAyQQorOjEwMDcxMDAwN0Q4MDgwMDBDODE4MDAxRDdDNDBDMDAwNjREMDAwMDhBNworOjEwMDcyMDAwOTU4MDAwMDBDODE4MDAxRENDMTMwMDAwQ0M4MDAwNDA0QworOjEwMDczMDAwQ0NDMDAwNDA4MDAwMDAwMENDNDAwMDQwQzgxMDAwMUYyQQorOjEwMDc0MDAwN0M0MEMwMDBDQzgwMDA0MDdDRDE0MDBDQ0Q0MDAwNDBCQgorOjEwMDc1MDAwMDUxODAwMDE4MDAwMDAwMENEODAwMDIyN0M0MEMwMDAxMAorOjEwMDc2MDAwNjQ1MDAwMjA4NDAwMDI0Q0NDMDAwMDYxN0NEMEMwMkM3RQorOjEwMDc3MDAwQzgyMDAwMTdDOEQ2MDAwMDk5NDAwMDA4N0M0MzgwMDBCQworOjEwMDc4MDAwREY4MzAwMDBDRkEwMDA0Rjg0MDAwMjRDQ0MwMDAwNjI0OQorOjEwMDc5MDAwODAwMDAwMDBEMDQwMDA3RjgwMDAwMjQ5Q0MwMDAwNjI1MQorOjEwMDdBMDAwODQwMDAyNENDQzAwMDA2MUM4MjAwMDE3N0M0MEMwMDBDRgorOjEwMDdCMDAwQzAzNkZGMDBDODEwMDAwREMwMzAzRkZGN0NGNTQwMEI3NQorOjEwMDdDMDAwN0Q1MTgwMEI3RDgxODAwRjk5ODAwMDA4N0NGMzgwMEIyOAorOjEwMDdEMDAwREY4MzAwMDBDRkEwMDA0Rjg0MDAwMjRDQ0MwMDAwNjJGOQorOjEwMDdFMDAwODAwMDAwMDBEMDQwMDA3RjgwMDAwMjQ5Q0MwMDAwNjIwMQorOjEwMDdGMDAwODQwMDAyNEM3QzQwQzAwMDI4REMwMDA4OTVDMDAwMTkzMQorOjEwMDgwMDAwMzBEQzAwMTA3QzQxMDAwMDk5QzAwMDA0NjQ1NDAwMjBEQQorOjEwMDgxMDAwODAwMDAyMDhDOTFEMDAwMDdEMTUwMDJDQzkxRTAwMDBDMworOjEwMDgyMDAwN0M0MjAwMDA3QzQyNDAwMDdDNDE4MDAwN0RFNUMwMEJBMgorOjEwMDgzMDAwN0RFMjgwMDc5QTgwMDAwRTQxQUMwMDA1OUFDMDAwMDA1RQorOjEwMDg0MDAwMEFFQzAwMDEzMERDMDAxMDk5QzAwMDA0MDAwMDAwMDAzOAorOjEwMDg1MDAwODAwMDAyMEJDOTFEMDAwMDgwMDAwMjBCQzkxRTAwMDBCMQorOjEwMDg2MDAwQ0M4MDAwNDBDQ0MwMDA0MEQwNDAwMDQwQzgwQzAwMjVFNworOjEwMDg3MDAwOTRDMEZERTRDODEwMDAwOENEMDAwMDQwRDQwMDBGQzBCMworOjEwMDg4MDAwODAwMDAwMDBENDAwMEZBMkQ0MDAwMzQwRDQwMDBGQzBBOQorOjEwMDg5MDAwRDQwMDBGQTJDQzgwMDA0MEQwNDAwMDQwN0M0MDgwMDBCQgorOjEwMDhBMDAwQTAwMDAwMDA3RTgyODAwQkQ0MDAwM0MwRDQwMDBGQzBFMworOjEwMDhCMDAwRDQwMDBGQTJDQzgwMDA0MEQwNDAwMDQwN0M0MDgwMDA5QgorOjEwMDhDMDAwQTAwMDAwMDA3RTgyODAwQjdDNDBDMDAwMzBEMDAwMDY3QgorOjEwMDhEMDAwMEQxMDAwMDY5OTAwMDAwN0M4MTQwMDE1OTk0MDAwMDU4NgorOjEwMDhFMDAwQ0MwMDAwNTJENDAwMDM0MEQ0MDAwRkMwRDQwMDBGQTJBQgorOjEwMDhGMDAwQ0M4MDAwNDBDQ0MwMDA0MDgwMDAwMDAwRDA0MDAwNDBEMAorOjEwMDkwMDAwN0M0MEMwMDBDQzREMDAwMERDM0EwMDAwOTc4MEZEQkQ2QgorOjEwMDkxMDAwMDRDQzAwMDE4MDAwMDI0MkNDNEQwMDAwODAwMDAwMDBBOQorOjEwMDkyMDAwRDA0MDAwN0ZDQzAwMDA3RjgwMDAwMDAwQ0MwMDAwN0YyMgorOjEwMDkzMDAwQ0MwMDAwN0Y4ODAwMDAwMENDMDAwMDdGMDAwMDAwMDA5OQorOjEwMDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwMDk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMDk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwMDk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwMDlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMDlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMDlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMDlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMDlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMEExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMEEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwMEEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMEE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwMEE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwMEE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMEMwMDAwMDAwMzAyMjIwMDA0MDIyQTAwMDUwMDlGMDAwMjAwMDNFNAorOjEwMEMxMDAwMDAwNjAwM0MwMDA3MDAyNzAwMDgwMTkxMDAwOTAwNDQ3RAorOjEwMEMyMDAwMDAwQTAwMkQwMDEwMDI0NzAwMTcwMEYwMDAyMjAxRDczMworOjEwMEMzMDAwMDAyMzAxRTgwMDI2MDA0QzAwMjcwMDVGMDAyMDAxMUE3NQorOjEwMEM0MDAwMDAyODAwOTIwMDI5MDA0RjAwMkEwMDgzMDAyQjAwNjQzNgorOjEwMEM1MDAwMDAyRjAwOEQwMDMyMDBEODAwMzQwMjMyMDAzNjAwNzRCQworOjEwMEM2MDAwMDAzOTAxMEEwMDNDMDFGQzAwM0YwMDlGMDA0MTAwMDVFMworOjEwMEM3MDAwMDA0NDAxOTQwMDQ4MDE5RDAwNDkwMUM1MDA0QTAxQ0Y4QworOjEwMEM4MDAwMDA1NTAyMjUwMDU2MDIyRDAwNjAwMDBBMDA2MTAwMkE2RQorOjEwMEM5MDAwMDA2MjAwMzAwMDYzMDAzMDAwNjQwMDMwMDA2NTAwMzAwNgorOjEwMENBMDAwMDA2NjAwMzAwMDY3MDAzMDAwNjgwMDM3MDA2OTAwM0ZEMAorOjEwMENCMDAwMDA2QTAwNDcwMDZCMDA0NzAwNkMwMDQ3MDA2RDAwNDc2QQorOjEwMENDMDAwMDA2RTAwNDcwMDZGMDA0NzAwNzAwMDQ3MDA3MzAyNDc0NgorOjEwMENEMDAwMDA3QjAyNDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDU0OAorOjEwMENFMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVGMAorOjEwMENGMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVFMAorOjEwMEQwMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVDRgorOjEwMEQxMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVCRgorOjEwMEQyMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDVBRgorOjEwMEQzMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDU5RgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3JhZGVvbi9SVjc3MF9tZS5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjc3MF9tZS5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGUxNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvcmFkZW9uL1JWNzcwX21lLmJpbi5paGV4CkBAIC0wLDAgKzEsMzQxIEBACis6MTAwMDAwMDBDQzAwMDNFQTdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MkFECis6MTAwMDEwMDA4MDAwMDAwMUQwNDAwMDdGODAwMDAwMDFDQzQwMDA0MTAyCis6MTAwMDIwMDA3QzQwQzAwMEMwMTYwMDA0MzBEMDNGRkY3RDE1MDAwQzlFCis6MTAwMDMwMDBDQzExMDAwMDI4RDgwMDFFMzE5ODAwMDEyOERDMDAxRkQ4Cis6MTAwMDQwMDBDODIwMDAwNDk1QzAwMDA2N0M0MjQwMDBDQzAwMDA2MjNECis6MTAwMDUwMDA3RTU2ODAwQ0NDMjkwMDAwQzgyNDAwMDQ3RTI2MDAwQkFDCis6MTAwMDYwMDA5NTgwMDAwNjdDNDJDMDAwQ0MwMDAwNjI3RUQ3MDAwQzY4Cis6MTAwMDcwMDBDQzMxMDAwMEM4MkMwMDA0N0UyRTAwMENDQzAwMDA2MkE1Cis6MTAwMDgwMDAzMTEwM0ZGRjgwMDAwMDAxQ0UxMTAwMDA3QzQwQzAwMDE1Cis6MTAwMDkwMDA4MDAwMDAwMUNDNDAwMDQwODAwMDAwMDFDQzQxMjI1NzhDCis6MTAwMEEwMDA3QzQxODAwMENDNDAwMDQ1Q0M0MDAwNDhDQzQxMjI1Q0UzCis6MTAwMEIwMDBDQzQxQTFGQzdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjBDCis6MTAwMEMwMDBDQzQwMDA0NUNDNDAwMDQ4N0M0MEMwMDBDQzQxMjI1Qzg0Cis6MTAwMEQwMDBDQzQxQTFGQzdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MkVDCis6MTAwMEUwMDBDQzAwMDA0NUNDMDAwMDQ4Q0M0MTIyNUNDQzQxQTFGQ0I2Cis6MTAwMEYwMDA3QzQwODAwMEEwMDAwMDAwQ0M4MDAwNjIwNDBDQTFGREM4Cis6MTAwMTAwMDBDMDEyMDAwMUNDMDAwMDQ1Q0MwMDAwNDg3Q0QwQzAwQ0RGCis6MTAwMTEwMDBDQzQxMjI1Q0NDNDFBMUZDRDA0RDAwMDA3QzQwODAwMDUxCis6MTAwMTIwMDBBMDAwMDAwMENDODAwMDYyODAwMDAwMDFDQzQxMjI1RDc0Cis6MTAwMTMwMDA3QzQwODAwMDdDNDBDMDAwQzAyQTAwMDI3QzQxMDAwMDVFCis6MTAwMTQwMDA3RDI5MDAwQzMwOTQwMDAxMzA5ODAwMDYzMDlDMDMwMDlCCis6MTAwMTUwMDAyOURDMDAwODdDNDIwMDAwN0M0MjQwMDA5NTQwMDAwRkYyCis6MTAwMTYwMDBDMDJFMDAwNDA1RjAyMjU4N0YyRjAwMENDQzMxMDAwMDc3Cis6MTAwMTcwMDBDODI4MDAwNENDQzEyMTY5Q0QwMTIxNkFDRTgxMjE2QjQwCis6MTAwMTgwMDAwREI0MDAwMkNDMDEyMTZDOTc0MDAwMEUwREI0MDAwMEFDCis6MTAwMTkwMDA4MDAwMDA3QkM4MzQwMDBBMERCNDAwMDI5NzQwMDAwOUJCCis6MTAwMUEwMDAwREI0MDAwMEMwMkUwMDA0MDVGMDIyNTg3RjJGMDAwQzczCis6MTAwMUIwMDBDQzMxMDAwMEM4MjgwMDA0ODAwMDAwN0JDODM0MDAwQTRECis6MTAwMUMwMDA5NzQwMDAwNDdFMDI4MDAwODAwMDAwN0JDODM0MDAwQTUzCis6MTAwMUQwMDAwREI0MDAwNDk3NDBGRjhDMDAwMDAwMDBDRTAxMjE2RDlCCis6MTAwMUUwMDBDRTQxMjE2RUM4MjgwMDAzQzgzNDAwMEE5QjQwMDAwNDk5Cis6MTAwMUYwMDAwNDNDMDAwNTg0MDAwMjZEQ0MwMDAwNjIwREY0MDAwMDk4Cis6MTAwMjAwMDA5NzQwMDAwQkM4MkMwM0U2Q0U4MUEyQjdDMDMwMDAwNjkxCis6MTAwMjEwMDA3RUYzNDAyOEMwMzAwMDIwN0Y2QjgwMjA3RkIzQzAyOTUwCis6MTAwMjIwMDBDRjgxQTJDNDgwMDAwMDAxQ0ZDMUEyRDEwREY0MDAwMTkyCis6MTAwMjMwMDA5NzQwMDAwQkM4MkMwM0U3Q0U4MUEyQkJDMDMwMDAwNjVDCis6MTAwMjQwMDA3RUYzNDAyOEMwMzAwMDIwN0Y2QjgwMjA3RkIzQzAyOTIwCis6MTAwMjUwMDBDRjgxQTJDNTgwMDAwMDAxQ0ZDMUEyRDIwREY0MDAwMjVGCis6MTAwMjYwMDA5NzQwMDAwQkM4MkMwM0U4Q0U4MUEyQkZDMDMwMDAwNjI3Cis6MTAwMjcwMDA3RUYzNDAyOEMwMzAwMDIwN0Y2QjgwMjA3RkIzQzAyOUYwCis6MTAwMjgwMDBDRjgxQTJDNjgwMDAwMDAxQ0ZDMUEyRDNDODJDMDNFOTUwCis6MTAwMjkwMDBDRTgxQTJDM0MwMzAwMDA2N0VGMzQwMjhDMDMwMDAyMENCCis6MTAwMkEwMDA3RjZCODAyMDdGQjNDMDI5Q0Y4MUEyQzc4MDAwMDAwMTZGCis6MTAwMkIwMDBDRkMxQTJENDgwMDAwMDAxQ0M0MDAwNDI3QzQwQzAwMEVECis6MTAwMkMwMDA3QzQxMDAwMDI5MTQwMDFEMzE1NDAwMDE5OTQwMDAwREFCCis6MTAwMkQwMDAzMTE4MTAwMEM4MUMwMDExMDlEQzAwMDE5NUMwRkZGRjk3Cis6MTAwMkUwMDBDODFDMDAxMUNDQzEyMTAwQ0QwMTIxMDFDQ0MxMjEwMkNCCis6MTAwMkYwMDBDRDAxMjEwMzA0MTgwMDA0ODAwMDAzOUZDRDgxQTJBNDM2Cis6MTAwMzAwMDBDMDJBMDAwNDk1ODAwMDA4MzZBODIxQTNDQzI5MDAwMDRCCis6MTAwMzEwMDBDODI4MDAwNEM4MUMwMDExMERFNDAwNDA5NjQwRkZGRkVGCis6MTAwMzIwMDBDODFDMDAxMUNDQzEyMTcwQ0QwMTIxNzFDODIwMDAxMjYwCis6MTAwMzMwMDA5NjAwMDAwMEM4MjAwMDEyODAwMDAzOUZDQzAwMDA2NERCCis6MTAwMzQwMDA3QzQwQzAwMDdDNDEwMDAwQ0MwMDAwNDVDQzAwMDA0ODRGCis6MTAwMzUwMDA0MEQ0MDAwM0NENDEyMjVDQ0QwMUExRkNDMDFBMDAwMUI0Cis6MTAwMzYwMDAwNDFDQTFGRDdERDlDMDBDN0M0MjAwMDAwOENDMDAwMTFBCis6MTAwMzcwMDAwNjI0MDAwMTA2MjgwMDAyQ0UxRDAwMDBDRTVEMDAwMDBDCis6MTAwMzgwMDA5OEMwRkZGQUNFOUQwMDAwN0M0MDgwMDBBMDAwMDAwMEQ1Cis6MTAwMzkwMDBDQzgwMDA2MjdDNDBDMDAwMzBEMDAwMDEyOENDMDAwMTNECis6MTAwM0EwMDA3QzQxNDAwMDk1MDAwMDA2N0M0MTgwMDBDRDQxMjE2RERDCis6MTAwM0IwMDBDRDgxMjE2RTgwMDAwMEYzQzgxQzAwMDNDMDIyMDAwNDIwCis6MTAwM0MwMDA3RTE2MDAwQ0NDMjEwMDAwQzgxQzAwMDQ3QzQyNDAwMEJBCis6MTAwM0QwMDA5OEMwMDAwNDdDNDI4MDAwODAwMDAwMDFDREU1MDAwMDUwCis6MTAwM0UwMDBDRTQxMjE2OUNFODEyMTZBQ0RDMTIxNkI4MDAwMDAwMUZGCis6MTAwM0YwMDBDQzAxMjE2QzdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMDZECis6MTAwNDAwMDA3QzQxODAwMDdDNDFDMDAwMjhBNDAwMDgzMjY0MDBGRkM5Cis6MTAwNDEwMDAwRTY4MDAzQzk2ODAwMDBBN0MwMjAwMDA3QzQyMDAwMENFCis6MTAwNDIwMDAxRTMwMDAwM0NDMDAwMDZBOUIwMDAwMDM0MjIwMDAwNTQwCis6MTAwNDMwMDAwNDIwMDA0MDgwMDAwMTEwN0MwMjQwMDA3RTAyNDAwMDQ5Cis6MTAwNDQwMDA5QTQwMDAwMDBBNjQwMDAxMzBFQzAwMTA5QUMwMDAwQUQzCis6MTAwNDUwMDBDQzAwMDA2MkMwMkEwMDA0QzgyQzAwMjE3RTkyODAwQ0NGCis6MTAwNDYwMDBDQzAwMDA0MUNDMjkwMDAwQ0VDMDAwMjE4MDAwMDEyMDNBCis6MTAwNDcwMDBDODMwMDAwNENEMDEyMTZEQ0Q0MTIxNkVDODMwMDAwMzhDCis6MTAwNDgwMDA3RjFGMDAwQjMwRjQwMDA3Mjc3ODAwMDE5NzQwMDAyQUY3Cis6MTAwNDkwMDAwN0I4MDEyNTlGODAwMDAwMDAwMDAwMDA4MDAwMDEzNUEyCis6MTAwNEEwMDA3RjFCODAwNDgwMDAwMTM5N0YxQjgwMDU4MDAwMDEzRDk3Cis6MTAwNEIwMDA3RjFCODAwMjgwMDAwMTQxN0YxQjgwMDM4MDAwMDE0NTdCCis6MTAwNEMwMDA3RjFCODAwNzgwMDAwMTQ5N0YxQjgwMDY4MDAwMDE0RTUyCis6MTAwNEQwMDAyOEE0MDAwODlCODAwMDE5MjhBNDAwMDg4MDAwMDE1RTYxCis6MTAwNEUwMDAzMjY0MDBGRjlCODAwMDE1MjhBNDAwMDg4MDAwMDE1RTk0Cis6MTAwNEYwMDAzMjY0MDBGRjlCODAwMDExMjhBNDAwMDg4MDAwMDE1RTg4Cis6MTAwNTAwMDAzMjY0MDBGRjlCODAwMDBEMjhBNDAwMDg4MDAwMDE1RTdCCis6MTAwNTEwMDAzMjY0MDBGRjlCODAwMDA5MjhBNDAwMDg4MDAwMDE1RTZGCis6MTAwNTIwMDAzMjY0MDBGRjlCODAwMDA1MjhBNDAwMDg4MDAwMDE1RTYzCis6MTAwNTMwMDAzMjY0MDBGRjI4QTQwMDA4MzI2NDAwRkYwRTY4MDAzQzBCCis6MTAwNTQwMDA5QTgwRkVCMTI4RUMwMDA4N0M0MzQwMDA3QzQzODAwMDg4Cis6MTAwNTUwMDA3QzQzQzAwMDk2QzAwMDA3Q0MwMDAwNjJDRjQxMjE2OUY3Cis6MTAwNTYwMDBDRjgxMjE2QUNGQzEyMTZCODAwMDAwMDFDQzAxMjE2Q0I5Cis6MTAwNTcwMDA4MDAwMDAwMUNGRjUwMDAwQ0MwMDAwNkI4NDAwMDNBMkQ2Cis6MTAwNTgwMDAwRTY4MDAzQzlBODAwMDA0QzgyODAwMTU4MDAwMDAwMTE1Cis6MTAwNTkwMDBEMDQwMDA3Rjk2ODBGRkFCN0UwMjQwMDA4NDAwMDIzQjhCCis6MTAwNUEwMDBDMDBFMDAwMkNDMDAwMDQxODAwMDAyMzlDQ0MxMzA0QUFDCis6MTAwNUIwMDA3QzQwQzAwMDdDNDEwMDAwQzAxRTAwMDEyOTI0MDAxMkM0Cis6MTAwNUMwMDBDMDIyMDAwMjk2NDAwMDA1QzAyNjAwMDRDMDI3RkZGQkExCis6MTAwNUQwMDA3RDI1MDAwQkMwMjYwMDAwN0REMjgwMEI3RTEyQzAwQjUzCis6MTAwNUUwMDA3RDI1MDAwQzdDNDE0MDAwN0M0MTgwMDBDQ0MxMjE2OTBDCis6MTAwNUYwMDA5QTgwMDAwQUNEMDEyMTZBQ0Q0MTIxNkI5NkMwRkU4MjBFCis6MTAwNjAwMDBDRDgxMjE2Q0M4MzAwMDE4OTcwMDAwMDBDODMwMDAxODU4Cis6MTAwNjEwMDA4MDAwMDAwMUNDMDAwMDE4ODQwMDAzQTJDQzAwMDA3RjAxCis6MTAwNjIwMDBDODE0MDAxM0M4MTgwMDE0Q0Q0MTIxNkI5NkMwRkU3NjgzCis6MTAwNjMwMDBDRDgxMjE2QzgwMDAwMTgyQzgzMDAwMThDODBDMDAwOEYwCis6MTAwNjQwMDA5OEMwMDAwMEM4MEMwMDA4N0M0MTAwMDA5NTAwMDAwMjIyCis6MTAwNjUwMDAwMDAwMDAwMDdDNDE0MDAwQzgyMDAwMDlDQzQwMDA0MzVECis6MTAwNjYwMDBDRTAxQTFGNENDNDAwMDQ0QzAwRTgwMDA3QzQyNDAwMDhBCis6MTAwNjcwMDA3QzQyODAwMDJBQUMwMDFGOTZDMEZFNjNDMDM1RjAwMEFCCis6MTAwNjgwMDBDRTQwMDNFMjMyNzgwMDAzMjY3QzAwMDg3RkY3QzAwQkRGCis6MTAwNjkwMDA3RkZCQzAwQzJBNzgwMDE4Q0ZDMDAzRTNDRjgwMDNFNEFGCis6MTAwNkEwMDAyNkIwMDAwMjdGM0YwMDAwQ0YwMDAzRTU4MDAwMDMxRjVCCis6MTAwNkIwMDA3QzgwQzAwMDdDNDBDMDAwMjhEMDAwMDgzMTEwMDAwRkIyCis6MTAwNkMwMDA5NTAwMDAwRjI1MjgwMDAxMDZBODAxQjM5RTgwMDAwMEI4Cis6MTAwNkQwMDAwMDAwMDAwMDgwMDAwMUQ0QzAxMjA4MDA4MDAwMDFFMjg4Cis6MTAwNkUwMDBDODE0MDAwRjgwMDAwMUU5QzgxNDAwMTA4MDAwMDFGMDU4Cis6MTAwNkYwMDBDQ0MxQTJBNDgwMDAwMUY5QzgxNDAwMTEzMEQwMDAzRjgxCis6MTAwNzAwMDAwRDI4MDAxNTlBODAwMDEyMEQyODAwMUU5QTgwMDAxRUU4Cis6MTAwNzEwMDAwRDI4MDAyMDlBODAwMDIzMEQyNDAwMEYwRDI4MDAxMEMyCis6MTAwNzIwMDA3RTZBODAwQzlBODAwMDI2MEQyMDAwMDQwRDI0MDAxNDlGCis6MTAwNzMwMDAwRDI4MDAyODdFNjI0MDBDN0VBNjgwMEM5QTgwMDAyQTNDCis6MTAwNzQwMDBDODE0MDAxMTgwMDAwMDAxQ0NDMUEyQTRDMDEyMDgwMDhFCis6MTAwNzUwMDA3QzQxNDAwMDdEMENDMDBDQzAxMjAwMDgyOTU4MDAwM0U5Cis6MTAwNzYwMDAyOTVDMDAwQzdDNDIwMDAwN0REMUMwMEIyNjIwMDAxNEM3Cis6MTAwNzcwMDA3RTFFNDAwQzdFNEU4MDBDQ0U4MUEyQTQ4MDAwMDAwMTIzCis6MTAwNzgwMDBDRDgxQTFGRUM4MTQwMDBGMDQxMDIxMEU5NTQwMDAwMDc5Cis6MTAwNzkwMDBDODE0MDAwRkQwNTEwMDAwODAwMDAwMDFDQ0MxQTJBNEY5Cis6MTAwN0EwMDBDODE0MDAxMDA0MTAyMTA4OTU0MDAwMDBDODE0MDAxMDVGCis6MTAwN0IwMDBEMDUxMDAwMDgwMDAwMDAxQ0NDMUEyQTRDQ0MxQTJBNEYxCis6MTAwN0MwMDAwNDEwMDAwMUNEMDAwMDE5ODQwMDAzQTJDQzAwMDA3RkJBCis6MTAwN0QwMDBDODEwMDAxOTk5MDAwMDAwQzgxMDAwMTk4MDAwMDAwMjFDCis6MTAwN0UwMDA3QzQwODAwMDA0MTAyMTAwMDk1NDAwMDE5NTQwRkZGRjY3Cis6MTAwN0YwMDBDODE0MDAxMUQwNTEwMDAwODAwMDAzOUZDQ0MxQTJBNEY2Cis6MTAwODAwMDA3QzQwQzAwMENDNDAwMDBEOTRDMEZERkZDQzQwMDAwRUU5Cis6MTAwODEwMDA3QzQxMDAwMDk1MDAwMDA1MDhDQzAwMDFDODE0MDAwNUNCCis6MTAwODIwMDA5OTQwMDAxNDAwMDAwMDAwOThDMEZGRkI3QzQxMDAwMENDCis6MTAwODMwMDA4MDAwMDAwMjdEMDA4MDAwQzgxNDAwMDU3QzQwQzAwMERDCis6MTAwODQwMDA5OTQwMDAwQ0M4MTgwMDBDN0M0MTAwMDA5NTgwRkRFRTFBCis6MTAwODUwMDBDODIwMDAwRUM4MUMwMDBENjYyMDAwMjA3RTFFMDAyQzQzCis6MTAwODYwMDAyNTI0MDAwMjdFNjI0MDIwODAwMDAwMDFDQ0U2MDAwMENBCis6MTAwODcwMDA3QzQxMDAwMENDMDAwMDZDQ0MwMDAwNkRDODE4MDAxRjRCCis6MTAwODgwMDBDODFDMDAxRTY1OTgwMDIwN0REOUMwMkM3Q0Q0QzAwQ0VCCis6MTAwODkwMDBDQ0RFMDAwMDQ1REMwMDA0QzgyODAwMTc5NjgwMDAwRjVECis6MTAwOEEwMDBDMDBFMDAwMTI4NjgwMDA4MkFBQzAwMTYzMkE4MDBGRjFDCis6MTAwOEIwMDAwRUIwMDA0OTdGMkYwMDBCOTcwMDAwMDYwMDAwMDAwMERCCis6MTAwOEMwMDBDODE0MDAwNTdDNDBDMDAwODAwMDAyMjM3QzQxMDAwMDY5Cis6MTAwOEQwMDA4MDAwMDIyNkQwNDAwMDdGODQwMDAyM0JDQzAwMDA0MTEzCis6MTAwOEUwMDBDQ0MxMzA0QTk0MDAwMDAwQzgzQzAwMUEwNDNDMDAwNTBBCis6MTAwOEYwMDBDRkMxQTJBNEMwMzYxRjkwQzAzODdGRkY3QzAzQzAxMEI4Cis6MTAwOTAwMDA3RjdCNDAwQ0NGNDEyMTdDQ0ZDMTIxN0RDQzAxMjE3RTVBCis6MTAwOTEwMDBDMDNBMDAwNDA0MzQyMTdGN0Y3QjQwMENDQzM1MDAwMEJBCis6MTAwOTIwMDBDODNDMDAwNDJCRkMwMDFGMDQzODAwMjA5N0MwMDAwNUMxCis6MTAwOTMwMDBDQzAwMDA2MjlCODAwMDAwMEJCODAwMDE4MDAwMDI0N0UxCis6MTAwOTQwMDBDQzAwMDA3MUNDMDFBMUY0MDQzODAwMTZDMDM2MDAwMkJFCis6MTAwOTUwMDBDRjgxQTJBNDg4MDAwMDAwQ0Y0MTIwMTA3QzQwQzAwMEJECis6MTAwOTYwMDAyOEQwMDAxQzk1MDAwMDA1MDRENDAwMDFDRDQwMDA2NThFCis6MTAwOTcwMDA4MDAwMDAwMUNENDAwMDY4MDk1NDAwMDI4MDAwMDAwMUExCis6MTAwOTgwMDBDRDQwMDA2Njg0MDAwMjZDQzgxODAzRUE3QzQwQzAwMEI5Cis6MTAwOTkwMDA5OTgwRkQ5REM4MTQwMDE2MDhEMDAwMDE5OTQwMDAyQkQ1Cis6MTAwOUEwMDBDRDAwMDA2ODdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2Mjg4Cis6MTAwOUIwMDAwNDNDMDAwNUNGQzFBMkE0Q0MwMUExRjQ4NDAwMDNBMjkxCis6MTAwOUMwMDBDQzAwMDA0Njg4MDAwMDAwQ0MwMDAwN0Y4NDAwMDI3RTNFCis6MTAwOUQwMDBDODE4MDNFQTdDNDBDMDAwOTk4MEZEOEJDODE0MDAxNjNCCis6MTAwOUUwMDAwOEQwMDAwMTk5NDAwMDE5Q0QwMDAwNjg3QzQwODAwMENCCis6MTAwOUYwMDBBMDAwMDAwMENDODAwMDYyMDQzQzAwMjJDRkMxQTJBNDcxCis6MTAwQTAwMDA4NDAwMDNBMkNDMDAwMDQ3ODgwMDAwMDBDQzAwMDA3RkQ3Cis6MTAwQTEwMDBDODEwMDAxNjk5MDAwMDBEQ0M0MDAwNjc4MDAwMDAwMjRECis6MTAwQTIwMDA3QzQwODAwMEM4MTgwM0VBOTk4MEZENzc3QzQwQzAwMEI0Cis6MTAwQTMwMDA5NEMwMDAwM0M4MTAwMDE2OTkwMDAwMDRDQ0MwMDA2OEUwCis6MTAwQTQwMDA4MDAwMDAwMjdDNDA4MDAwODQwMDAyM0JDMDE0ODAwMEQzCis6MTAwQTUwMDBDQzAwMDA0MUNENDEzMDRBQzAxNDgwMDA5OTAwMDAwMDE0Cis6MTAwQTYwMDBDODEwMDAxNjgwMDAwMDAyN0M0MDgwMDBDMDEyMDAwMTA3Cis6MTAwQTcwMDA3QzUxNDAwQzgwMDAwMDAxRDA1NTAwMDA3QzQwQzAwMDNCCis6MTAwQTgwMDA3QzQxMDAwMDdDNDE0MDAwN0M0MTgwMDAyOTFDMDAxRjBCCis6MTAwQTkwMDBDQ0MwMDA0QUNEMDAwMDRCOTVDMDAwMDNDMDFDODAwMEI0Cis6MTAwQUEwMDBDREMxMjAxMEREODMwMDAwMDU1QzIwMDBDQzAwMDA2Mjc5Cis6MTAwQUIwMDA4MDAwMDAwMUQ4MUY0MTAwN0M0MEMwMDA3QzQxMDAwMDQ0Cis6MTAwQUMwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMDAwNENDRDAwMDA0REZBCis6MTAwQUQwMDBERDgzMDAwMDA1NUNBMDAwODAwMDAwMDFEODFGNDEwMEZDCis6MTAwQUUwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMDkzCis6MTAwQUYwMDBDQ0MwMDA0RUNEMDAwMDRGREQ4MzAwMDAwNTVDQzAwMDdGCis6MTAwQjAwMDA4MDAwMDAwMUQ4MUY0MTAwN0M0MEMwMDA3QzQxMDAwMEYzCis6MTAwQjEwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMDAwNTBDRDAwMDA1MUExCis6MTAwQjIwMDBERDgzMDAwMDA1NUNGOEUwODAwMDAwMDFEODFGNDEwMDczCis6MTAwQjMwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMDQyCis6MTAwQjQwMDBDQ0MwMDA1MkNEMDAwMDUzREQ4MzAwMDAwNTVDRjg4MDZFCis6MTAwQjUwMDA4MDAwMDAwMUQ4MUY0MTAwN0M0MEMwMDA3QzQxMDAwMEEzCis6MTAwQjYwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMDAwNTRDRDAwMDA1NTQ5Cis6MTAwQjcwMDBERDgzMDAwMDA1NUNFMDAwODAwMDAwMDFEODFGNDEwMDFCCis6MTAwQjgwMDA3QzQwQzAwMDdDNDEwMDAwN0M0MTQwMDA3QzQxODAwMEYyCis6MTAwQjkwMDBDQ0MwMDA1NkNEMDAwMDU3REQ4MzAwMDAwNTVDRjAwMDlFCis6MTAwQkEwMDA4MDAwMDAwMUQ4MUY0MTAwN0M0MEMwMDA3QzQxMDAwMDUzCis6MTAwQkIwMDA3QzQxNDAwMDdDNDE4MDAwQ0NDMDAwNThDRDAwMDA1OUYxCis6MTAwQkMwMDBERDgzMDAwMDA1NUNGM0ZDODAwMDAwMDFEODFGNDEwMEJDCis6MTAwQkQwMDBEMDQzMjAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjU4Cis6MTAwQkUwMDBEMDQzQTAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MkM4Cis6MTAwQkYwMDBEMDQzQzAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2Mjk4Cis6MTAwQzAwMDBEMDQzRjhFMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjZGCis6MTAwQzEwMDBEMDQzRjg4MDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MkJGCis6MTAwQzIwMDBEMDQzRTAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjQ3Cis6MTAwQzMwMDBEMDQzRjAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjI3Cis6MTAwQzQwMDBEMDQzRjNGQzdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjE4Cis6MTAwQzUwMDBDODE0MDNFMENDNDMwMDAwQ0M0MzAwMDBDQzQzMDAwMEE4Cis6MTAwQzYwMDA3RDQ1QzAwMENEQzMwMDAwRDA0MzAwMDA3QzQwODAwMDIzCis6MTAwQzcwMDBBMDAwMDAwMENDODAwMDYyN0M0MEMwMDBDODEwMDNFMkVECis6MTAwQzgwMDBDODE0MDNFNUM4MTgwM0UzQzgxQzAzRTRDRDgxMjE2OTM3Cis6MTAwQzkwMDBDREMxMjE2QUNDQzEyMTZCQ0MwMTIxNkMwNDIwMDAwNEEwCis6MTAwQ0EwMDA3REExODAwMDdEOTY0MDAyOTY0MEZDRDdDRDgwMDNFMzc1Cis6MTAwQ0IwMDAzMTI4MDAwM0MwMkRGMDAwMjUxODAwMDg3REFEODAwQjAxCis6MTAwQ0MwMDA3REE5ODAwQzgwMDAwMDAxQ0Q4MDAzRTMzMDhDRkZGRjA0Cis6MTAwQ0QwMDBEMDREMDAwMDdDNDA4MDAwQTAwMDAwMDBDQzgwMDA2MjZECis6MTAwQ0UwMDA3QzQwQzAwMDdDNDEwMDAwMjkyNDAwMTgzMjY0MDAwMUNGCis6MTAwQ0YwMDA5QTQwMDAxM0M4MTQwMDIwMTU1ODAwMDI5NTgwRkZGRjg5Cis6MTAwRDAwMDBDODE0MDAyMENDMDAwMDZFQ0NDMTIxODBDRDAxMjE4RDAzCis6MTAwRDEwMDBDQzQxMjE4MTI5MTQwMDFGMzQ1ODgwMDBDRDgxMjE4Q0MxCis6MTAwRDIwMDA5NTQwRkNCOUNDNDEyMTgyQzgxNDAwMjA5OTQwRkZGRkI2Cis6MTAwRDMwMDBDODE0MDAyMDgwMDAwMDAyN0M0MDgwMDA3QzQxNDAwMEZDCis6MTAwRDQwMDA3QzQxODAwMDdDNDFDMDAwNjVCNDAwMjA3RjU3NDAyQzZFCis6MTAwRDUwMDBENDM3ODEwMDQ3NzQwMDA0RDQzNzgxMDA0Nzc0MDAwNEZECis6MTAwRDYwMDBENDM3ODEwMDQ3NzQwMDA0MDlEQzAwMDRENDM3ODEwMEMzCis6MTAwRDcwMDA5OUMwRkZGODQ3NzQwMDA0MjkyNDAwMUZDMDM4MDAxOUU3Cis6MTAwRDgwMDA5NjQwRkNBMUMwM0UwMDA0Q0Y4MTIxRjgzN0UwMjFGOTU0Cis6MTAwRDkwMDBDQzIxMDAwMEM4MjAwMDA0MkEyMDAwMTgzMjIwMDAwMUM1Cis6MTAwREEwMDA5QTAwRkZGQkNGODEyMUY4ODAwMDAwMDI3QzQwODAwMDg4Cis6MTAwREIwMDA3QzQwQzAwMDI4RDAwMDE4MzExMDAwMDFDMDE2MDA4MDBGCis6MTAwREMwMDA5NTAwMDAwM0MwMkEwMDA0N0NENEMwMENDQ0MxMjE3QzU3Cis6MTAwREQwMDBDQzQxMjE3RENDNDEyMTdFN0M0MTgwMDAxREIwMDAwM0FGCis6MTAwREUwMDAzNkEwMjE3RjlCMDAwMDAzNDE5QzAwMDUwNDFDMDA0MEFECis6MTAwREYwMDA5OUMwMDAwMDA5REMwMDAxQ0MyMTAwMDBDODI0MDAwNEQ3Cis6MTAwRTAwMDAyQTZDMDAxRjQxOUMwMDA1OUFDMEZGRkFDQzgwMDA2MjRBCis6MTAwRTEwMDA4MDAwMDAwMjdDNDA4MDAwN0M0MEMwMDAwNEQ0MDNFNkQ3Cis6MTAwRTIwMDA4MDAwMDAwMUNDNTQwMDAwODAwMDAzOUZDQzQwMDNFQTA2Cis6MTAwRTMwMDBDMDFDODAwMDA0NENBMDAwQ0RDMTIwMTA3QzQxMDAwMEVCCis6MTAwRTQwMDBDODE0MDAwOTA0MTgwMDAwMDQxQzAwMDhDRDgwMDA3MUJCCis6MTAwRTUwMDAwOURDMDAwMTA1OTgwMDAxQ0QwRDAwMDA5OUMwRkZGQ0UwCis6MTAwRTYwMDBDQzgwMDA2MjgwMDAwMzlGQ0Q0MDAwNzFDMDBFMDEwMDY1Cis6MTAwRTcwMDBDQzAwMDA0MUNDQzEzMDRBQzgzQzAwN0ZDQzAwMDA3RjkwCis6MTAwRTgwMDA4MDAwMDAwMUNDMDAwMDdGQ0MwMDAwN0Y4ODAwMDAwMEMzCis6MTAwRTkwMDBDQzAwMDA3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAwRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTAwRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTAwRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAwRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTAwRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAwRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAwRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAwRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTAwRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTAwRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTAwRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTAwRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTAwRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAwRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTAwRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTAwRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAwRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTAwRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTAwRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAwRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAxMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAxMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTAxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTAxMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAxMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTAxMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAxMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTAxMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTAxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTAxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTAxMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTAxMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTAxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAxMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTAxMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAxMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTAxMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTAxMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAxMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTAxMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAxMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAxMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAxMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAxMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAxMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAxMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAxMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAxMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAxMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAxMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAxMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAxMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAxMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAxMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAxMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAxMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAxMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAxMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAxMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAxMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTAxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAxMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAxMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAxMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAxMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAxMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAxMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAxMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAxMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAxMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAxM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAxM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAxM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAxM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAxM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAxNDAwMDAwMDAxMDMzMzAwMTAwMDA0MDAxNzAwMDYwMDIxMDAwODRCCis6MTAxNDEwMDAwMDI3MDAyODAwMjgwMDIzMDAyOTAwMjkwMDJBMDAyNjkwCis6MTAxNDIwMDAwMDJCMDAyOTAwMkQwMDM4MDAyRTAwM0YwMDJGMDA0QTFECis6MTAxNDMwMDAwMDM0MDA0QzAwMzYwMDMwMDAzOTAwQUYwMDNBMDBEMEQ0Cis6MTAxNDQwMDAwMDNCMDBFNTAwM0MwMEZEMDAzRDAxNkMwMDNGMDBBREFECis6MTAxNDUwMDAwMDQxMDMzODAwNDMwMzZDMDA0NDAxOEYwMDQ1MDBGRDQ4Cis6MTAxNDYwMDAwMDQ2MDFBRDAwNDcwMUFEMDA0ODAyMDAwMDQ5MDIwRUYwCis6MTAxNDcwMDAwMDRBMDI1NzAwNEIwMjg0MDA1MjAyNjEwMDUzMDI3MzdCCis6MTAxNDgwMDAwMDU0MDI4OTAwNTcwMjlCMDA2MDAyOUYwMDYxMDJBRTc3Cis6MTAxNDkwMDAwMDYyMDJCODAwNjMwMkMyMDA2NDAyQ0MwMDY1MDJENjlBCis6MTAxNEEwMDAwMDY2MDJFMDAwNjcwMkVBMDA2ODAyRjQwMDY5MDJGOEUwCis6MTAxNEIwMDAwMDZBMDJGQzAwNkIwMzAwMDA2QzAzMDQwMDZEMDMwODZCCis6MTAxNEMwMDAwMDZFMDMwQzAwNkYwMzEwMDA3MDAzMTQwMDcyMDM4NjlCCis6MTAxNEQwMDAwMDc0MDM4QzAwNzkwMzhBMDA3QzAzMUUwMDBGMDM5QkI5Cis6MTAxNEUwMDAwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIwMDBGMDM5QjQ4Cis6MTAxNEYwMDAwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIwMDBGMDM5QjM4Cis6MTAxNTAwMDAwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIwMDBGMDM5QjI3Cis6MTAxNTEwMDAwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIwMDBGMDM5QjE3Cis6MTAxNTIwMDAwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIwMDBGMDM5QjA3Cis6MTAxNTMwMDAwMDBGMDM5QjAwMEYwMzlCMDAwRjAzOUIwMDBGMDM5QkY3Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvcmFkZW9uL1JWNzcwX3BmcC5iaW4uaWhleCBiL2Zpcm13YXJlL3JhZGVvbi9SVjc3MF9wZnAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkMTYxOQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3JhZGVvbi9SVjc3MF9wZnAuYmluLmloZXgKQEAgLTAsMCArMSwyMTMgQEAKKzoxMDAwMDAwMDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjgwMDAwMDAwMDkKKzoxMDAwMTAwMERDMDMwMDAwQ0M4MDAwNDBEMDQwMDA0MDdDNDA4MDAwRTkKKzoxMDAwMjAwMEEwMDAwMDAwN0U4MjgwMEJDODE4MDAwRTMxOTgwMDAxRUQKKzoxMDAwMzAwMDdDNDI0MDAwOTU4MDAyNTI3QzQyODAwMEM4MUMwMDFDMUIKKzoxMDAwNDAwMEMwMzdDMDAwN0M0MEMwMDA3QzQxMDAwMDdDQjQ4MDBCMDUKKzoxMDAwNTAwMEMwMzYwMDAzOTlDMDAwMDBDODFDMDAxQzdDQjQ4MDBDOTIKKzoxMDAwNjAwMDI0RDQwMDAyN0Q2NTQwMDBDRDQwMDA0M0NFODAwMDQzOTMKKzoxMDAwNzAwMENEMDAwMDQzQ0M4MDAwNDBDRTQwMDA0MENFODAwMDQwMDgKKzoxMDAwODAwMENDQzAwMDQwREMzQTAwMDA5NzgwRkZERUNEMDAwMDQwOEQKKzoxMDAwOTAwMDdDNDBDMDAwODAwMDAwMTg3QzQxMDAwMEQ0MDAwMzQwNzgKKzoxMDAwQTAwMEQ0MDAwRkMwRDQwMDBGQTJDODE4MDAwRTgwMDAwMDBDQUUKKzoxMDAwQjAwMDMxOTgwMDAyRDQwMDAzQzBENDAwMEZDMEQ0MDAwRkEyQjYKKzoxMDAwQzAwMEM4MTgwMDBFMjg4QzAwMDgzMENDMDAwRjM0MTAwMDAxMzYKKzoxMDAwRDAwMDdEMEQwMDA4ODAwMDAwMEM3RDkxODAwQkNDODAwMDQwREQKKzoxMDAwRTAwMEQwNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCNTkKKzoxMDAwRjAwMEQ0MDAwMzQwRDQwMDBGQzBENDAwMEZBMkNDODAwMDQwMzUKKzoxMDAxMDAwMEQwNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCMzgKKzoxMDAxMTAwMEQ0MDAwM0MwRDQwMDBGQzBENDAwMEZBMkNDODAwMDQwOTQKKzoxMDAxMjAwMEQwNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCMTgKKzoxMDAxMzAwMENDNDAwM0Y5ODAwMDAyNjFDQzQwMDNGOEM4MjAwM0Y4RUEKKzoxMDAxNDAwMEM4MUMwM0Y5QzgxODAzRkJDMDM3RkZGRjdDNDE0MDAwRkYKKzoxMDAxNTAwMENGNDFBMjlFNjYyMDAwMjA3REUxQzAyQzdENThDMDA4QzIKKzoxMDAxNjAwMDdDRENDMDIwNjhEMDAwMjBDMDM2MDAwM0NDMDAwMDU0RTYKKzoxMDAxNzAwMDdDQjQ4MDBDODAwMDAwNkFDQzgwMDA0MDdDNDE4MDAwMTAKKzoxMDAxODAwMENEODFBMjlFQ0M4MDAwNDBDRDgwMDA0MDgwMDAwMDY4RTAKKzoxMDAxOTAwMENDMDAwMDU0QzAxOUZGRkZDQzgwMDA0MENEODFBMjlFNEUKKzoxMDAxQTAwMDdDNDBDMDAwN0M0MTAwMDA3QzQxNDAwMENDQzFBMUZBRjEKKzoxMDAxQjAwMENEMDFBMUY5Q0Q0MUEyOURDQ0MwMDA0MENEMDAwMDQwQjEKKzoxMDAxQzAwMENENDAwMDQwQ0M0MDAwNDA3QzQwODAwMEEwMDAwMDAwQkEKKzoxMDAxRDAwMDdFODI4MDBCQ0MwMDAwNTRDQzgwMDA0MDdDNDBDMDAwNkMKKzoxMDAxRTAwMDdDNDEwMDAwN0M0MTQwMDBDQ0MxQTFGQUNEMDFBMUY5QzUKKzoxMDAxRjAwMENENDFBMjlEQ0NDMDAwNDBDRDAwMDA0MENENDAwMDQwOEMKKzoxMDAyMDAwMEQwNDAwMDQwN0M0MDgwMDBBMDAwMDAwMDdFODI4MDBCMzcKKzoxMDAyMTAwMDdDNDBDMDAwMzBEMDAwMDFDQ0MxQTI5Rjk1MDAwMDAzRkIKKzoxMDAyMjAwMDA0MTQwMDAxMDQxNDAwMDJDRDQwMDNGQkNDODAwMDQwMDQKKzoxMDAyMzAwMDgwMDAwMDAwQ0NDMDAwNDA3QzQwQzAwMENDODAwMDQwNkEKKzoxMDAyNDAwMENDQzFBMkEyODAwMDAwMDBDQ0MwMDA0MDdDNDBDMDAwMTUKKzoxMDAyNTAwMDI4RDQwMDFGQ0M4MDAwNDA5NTQwMDAwMzdDNDEwMDAwNjIKKzoxMDAyNjAwMENDQzAwMDU3MjkxODAwMUZDQ0MwMDA0MDk1ODAwMDAzNjcKKzoxMDAyNzAwMENEMDAwMDQwQ0QwMDAwNTg4MDAwMDI2MUNDMDAwMDdGMUUKKzoxMDAyODAwMEM4MjAwMDE3QzgzMDAwMjI5QTAwMDAwNjBFMjgwMDAxN0UKKzoxMDAyOTAwMEM4MjQwMDFFMEE2NDAwMDFENDAwMTI0MENFNDAwMDQwNzEKKzoxMDAyQTAwMEMwMzZDMDAwOTY4MDAwMDczNzc0NzkwMDA0MUMwMDAxMzYKKzoxMDAyQjAwMENGNDAwMDQwQ0RDMDAwNDBDRjAwMDNGQTdDMDMwMDAwRDcKKzoxMDAyQzAwMENBMEMwMDEwN0M0MTAwMDA5NEMwMDAwNDdDNDE0MDAwMzYKKzoxMDAyRDAwMEQ0MjAwMkM0Q0RFMDAwNDQ5QjAwMDAwQjdDNDE4MDAwOTAKKzoxMDAyRTAwMENDMDAwMDRCQ0RBMDAwNDlDRDIwMDA0MUNENjAwMDQxQTUKKzoxMDAyRjAwMENEQTAwMDQxMDYyMDAwMDFDRTAwMDA1NjgwMDAwMjYxMjIKKzoxMDAzMDAwMENDMDAwMDdGQzgyODAwMjBDODJDMDAyMUNDMDAwMDYzNEUKKzoxMDAzMTAwMDdFRUE0MDAxNjU3NDAwMjA3RjUzNDAyQzI2OUMwMDAyMzkKKzoxMDAzMjAwMDdERjVDMDIwNjlGODAwMjBDRTgwMDA0QkNFNjAwMDQ5RUEKKzoxMDAzMzAwMENERTAwMDQxQ0ZBMDAwNDFDRTYwMDA0MTI3MUMwMDAyNkIKKzoxMDAzNDAwMDdERjVDMDIwNjlGODAwMjA3REIyNDAwMUNGMDAwMDRCNTAKKzoxMDAzNTAwMENFNjAwMDQ5Q0RFMDAwNDFDRkEwMDA0MTgwMDAwMEJENEIKKzoxMDAzNjAwMENFNjAwMDQxQzgyMDAwMTdDODMwMDAyMjlBMDAwMDA2NjUKKzoxMDAzNzAwMDBFMjgwMDAxQzgyNDAwMUUwQTY0MDAwMUQ0MDAxMjQwQTcKKzoxMDAzODAwMENFNDAwMDQwQ0EwQzAwMTA3QzQxMDAwMDk0QzAwMDBCMUQKKzoxMDAzOTAwMEMwMzZDMDAwOTY4MDAwMDczNzc0NzkwMDA0MUMwMDAxNDUKKzoxMDAzQTAwMENGNDAwMDQwQ0RDMDAwNDBDRjAwMDNGQTdDMDMwMDAwRTYKKzoxMDAzQjAwMDgwMDAwMEI2N0M0MTQwMDBDQzAwMDA0ODgwMDAwMEVGODcKKzoxMDAzQzAwMDAwMDAwMDAwQzgyMDAwMTdDODFDMDAyMzBFMjQwMDAyRjMKKzoxMDAzRDAwMDk5QzAwMDE1N0M0MTgwMDAwQTIwMDAwMUNFMDAwMDU2MjMKKzoxMDAzRTAwMEQ0MDAwNDQwQ0MwMDAwNDBDMDM2QzAwMENBMTQwMDEzNDIKKzoxMDAzRjAwMDk2NDAwMDA3Mzc3NDc5MDBDRjQwMDA0MENDMDAwMDQwQTEKKzoxMDA0MDAwMEM4MzAwM0ZBODAwMDAxMDRDRjAwMDAyMkNDMDAwMDIyOTMKKzoxMDA0MTAwMDk1NDAwMTVEQ0MwMDAwN0ZDQ0EwMDA0NjgwMDAwMDAwMkMKKzoxMDA0MjAwMENDMjAwMDQ2ODAwMDAyNjFDQzAwMDA2NEM4MjAwMDE3ODgKKzoxMDA0MzAwMEM4MTAwMDFGOTYwMDAwMDUwOTEwMDAwMUQ0MDAwNDQwRjgKKzoxMDA0NDAwMENEMDAwMDQwQ0QwMDAwMjJDQzgwMDA0MEQwNDAwMDQwRDQKKzoxMDA0NTAwMEM4MEMwMDI1OTRDMEZFRUJDODEwMDAwOENEMDAwMDQwNzkKKzoxMDA0NjAwMEQ0MDAwRkMwODAwMDAwMDBENDAwMEZBMjdDNDBDMDAwNjgKKzoxMDA0NzAwMDdDNDEwMDAwQ0NDMDAzRkRDRDAwMDNGQ0NDQzAwMDQyOTkKKzoxMDA0ODAwMENEMDAwMDQyMjkxNDAwMUYyOTE4MDAxMDMxOTgwMDA3RTAKKzoxMDA0OTAwMDNCNUMwMDAxN0Q3NjAwMEI5OTgwMDAwNTdENUU0MDBCODIKKzoxMDA0QTAwMENDMDAwMDQyODAwMDAyNjFDQzAwMDA0RDI5OTgwMDAxODAKKzoxMDA0QjAwMDI5MkMwMDA4OTk4MDAwM0QzMkVDMDAwMTk2MDAwMDA0RDAKKzoxMDA0QzAwMDI5MzAwMDBDODAwMDAyNjFDQzAwMDA0MjA0MTQwMDEwQUUKKzoxMDA0RDAwMENENDAwMDQyMzMzMDAwMDEzNDI4MDAwMTg0MDAwMTVFMjkKKzoxMDA0RTAwMEM4MTQwMDAzOUI0MDAwMUIwNDM4MDAwQzg0MDAwMTVFMEMKKzoxMDA0RjAwMEM4MTQwMDAzOUI0MDAwMTcwNDM4MDAwODg0MDAwMTVFMDQKKzoxMDA1MDAwMEM4MTQwMDAzOUI0MDAwMTMwNDM4MDAwNDg0MDAwMTVFRkIKKzoxMDA1MTAwMEM4MTQwMDAzOUI0MDAwMTVDODBDMDNGRDlBODAwMDA5MTUKKzoxMDA1MjAwMEM4MTAwM0ZDOUIwMDAxMThDQzAwMDA0RDA0MTQwMDEwRkYKKzoxMDA1MzAwMENDQzAwMDQyQ0QwMDAwNDI4MDAwMDEzNkNENDAwMDQyRDgKKzoxMDA1NDAwMDk2QzAwMTExQ0MwMDAwNEQ4MDAwMDI2MUNDMDAwMDRFMkQKKzoxMDA1NTAwMDlBQzAwMDAzQ0MwMDAwNERDQzAwMDA0RURGODMwMDAwQTkKKzoxMDA1NjAwMDgwMDAwMDAwRDgwMzAxRkY5QUMwMDEwN0NDMDAwMDREQjUKKzoxMDA1NzAwMDgwMDAwMjYxQ0MwMDAwNEVDODE4MDAwM0M4MUMwMDAzQjQKKzoxMDA1ODAwMEM4MjAwMDAzN0Q1RDQwMDM3REExQzAwMzdENUQ0MDBDNUMKKzoxMDA1OTAwMDJBMTAwMDFGMjk5QzAwMUY3RDFEMDAwQjdEMTc0MDBCOUEKKzoxMDA1QTAwMDg4MDAwMDAwN0U5MjgwMEI5NjQwMDAwNENDMDAwMDRFMzQKKzoxMDA1QjAwMDgwMDAwMjYxQ0MwMDAwNDIwNDM4MDAwOENGODAwMDQyNzUKKzoxMDA1QzAwMEM4MDgwMDAzQzgwQzAwMDNDODEwMDAwM0M4MTQwMDAzQzcKKzoxMDA1RDAwMEM4MTgwMDAzQzgxQzAwMDNDODI0MDAwM0M4MjgwMDAzNkYKKzoxMDA1RTAwMDI5RkMwMDFGMkFCMDAwMUY3RkYzQzAwQjI4RjAwMDFGNUEKKzoxMDA1RjAwMDdGRjNDMDBCMjk3MDAwMUY3RkYzQzAwQjdEODg4MDAxNDMKKzoxMDA2MDAwMDdEQ0NDMDAxN0U1MTAwMDE3RTk1NDAwMTdDOTA4MDAyMkUKKzoxMDA2MTAwMDdDRDRDMDAyN0NCQzgwMEI5QUMwMDAwMzdDOEY0MDBCNTIKKzoxMDA2MjAwMDM4QjQwMDAxOUI0MDAwRDhDQzAwMDA0RDlCQzAwMEQ2RTAKKzoxMDA2MzAwMENDMDAwMDRFQzgwQzAzRkRDODEwMDNGQ0NDQzAwMDQyMjcKKzoxMDA2NDAwMDgwMDAwMTZGQ0QwMDAwNDJENDAwMDM0MEQ0MDAwRkMwRjEKKzoxMDA2NTAwMEQ0MDAwRkEyQ0M4MDAwNDBDQzQwMDA0MENDNDAwMDQwRjEKKzoxMDA2NjAwMENDNDAwMDQwN0M0MEMwMDBDQ0MwMDA0MENDQzAwMDBENUQKKzoxMDA2NzAwMDgwMDAwMDAwRDA0MDAwNDA3QzQwQzAwMDdDNDEwMDAwNzEKKzoxMDA2ODAwMDY1MTQwMDIwN0Q0RDQwMkMyNDU4MDAwMjdENTk4MDIwQTcKKzoxMDA2OTAwMDdDNDFDMDAwQ0Q4MDAwNDI2OTk4MDAyMENEODAwMDQyOUUKKzoxMDA2QTAwMENEQzAwMDQyQzAyM0MwMDAwNUU0MDAwMjdDQTA4MDBCNDYKKzoxMDA2QjAwMDI2NjQwMDEwN0NBNDgwMENDQzgwMDA0MENEQzAwMDQwOUIKKzoxMDA2QzAwMENDQzAwMDQwOTVDMDAwMEVDRDAwMDA0MDA5REMwMDAxMDgKKzoxMDA2RDAwMEM4MjgwMDAzOTY4MDAwMDhDRTgwMDA0MEM4MzQwMDFENjIKKzoxMDA2RTAwMDk3NDAwMDAwQzgzNDAwMUQyNkE4MDAwODg0MDAwMjY0NUEKKzoxMDA2RjAwMENDMkIwMDAwOTlDMEZGRjcwOURDMDAwMURDM0EwMDAwQjgKKzoxMDA3MDAwMDk3ODAwMDA0N0M0MTgwMDA4MDAwMDFBMzI1OTgwMDAyQUUKKzoxMDA3MTAwMEEwMDAwMDAwN0Q4MDgwMDBDODE4MDAxRDdDNDBDMDAwNDMKKzoxMDA3MjAwMDY0RDAwMDA4OTU4MDAwMDBDODE4MDAxRENDMTMwMDAwOUMKKzoxMDA3MzAwMENDODAwMDQwQ0NDMDAwNDA4MDAwMDAwMENDNDAwMDQwOTUKKzoxMDA3NDAwMEM4MTAwMDFGN0M0MEMwMDBDQzgwMDA0MDdDRDE0MDBDMTEKKzoxMDA3NTAwMENENDAwMDQwMDUxODAwMDE4MDAwMDAwMENEODAwMDIyM0YKKzoxMDA3NjAwMDdDNDBDMDAwNjQ1MDAwMjA4NDAwMDI2NENDMDAwMDYxMjIKKzoxMDA3NzAwMDdDRDBDMDJDQzgyMDAwMTdDOEQ2MDAwMDk5NDAwMDA4QzMKKzoxMDA3ODAwMDdDNDM4MDAwREY4MzAwMDBDRkEwMDA0Rjg0MDAwMjY0MjAKKzoxMDA3OTAwMENDMDAwMDYyODAwMDAwMDBEMDQwMDA3RjgwMDAwMjYxMzkKKzoxMDA3QTAwMENDMDAwMDYyODQwMDAyNjRDQzAwMDA2MUM4MjAwMDE3MDUKKzoxMDA3QjAwMDdDNDBDMDAwQzAzNkZGMDBDODEwMDAwREMwMzAzRkZGQjUKKzoxMDA3QzAwMDdDRjU0MDBCN0Q1MTgwMEI3RDgxODAwRjk5ODAwMDA4NjYKKzoxMDA3RDAwMDdDRjM4MDBCREY4MzAwMDBDRkEwMDA0Rjg0MDAwMjY0MTUKKzoxMDA3RTAwMENDMDAwMDYyODAwMDAwMDBEMDQwMDA3RjgwMDAwMjYxRTkKKzoxMDA3RjAwMENDMDAwMDYyODQwMDAyNjQ3QzQwQzAwMDI4REMwMDA4NTkKKzoxMDA4MDAwMDk1QzAwMDE5MzBEQzAwMTA3QzQxMDAwMDk5QzAwMDA0NDQKKzoxMDA4MTAwMDY0NTQwMDIwODAwMDAyMDlDOTFEMDAwMDdEMTUwMDJDRDEKKzoxMDA4MjAwMEM5MUUwMDAwN0M0MjAwMDA3QzQyNDAwMDdDNDE4MDAwRTgKKzoxMDA4MzAwMDdERTVDMDBCN0RFMjgwMDc5QTgwMDAwRTQxQUMwMDA1OEIKKzoxMDA4NDAwMDlBQzAwMDAwMEFFQzAwMDEzMERDMDAxMDk5QzAwMDA0REUKKzoxMDA4NTAwMDAwMDAwMDAwODAwMDAyMENDOTFEMDAwMDgwMDAwMjBDOTYKKzoxMDA4NjAwMEM5MUUwMDAwQ0M4MDAwNDBDQ0MwMDA0MEQwNDAwMDQwRjkKKzoxMDA4NzAwMEM4MEMwMDI1OTRDMEZERTNDODEwMDAwOENEMDAwMDQwNUUKKzoxMDA4ODAwMEQ0MDAwRkMwODAwMDAwMDBENDAwMEZBMkQ0MDAwMzQwQTkKKzoxMDA4OTAwMEQ0MDAwRkMwRDQwMDBGQTJDQzgwMDA0MEQwNDAwMDQwNTQKKzoxMDA4QTAwMDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQkQ0MDAwM0MwNEEKKzoxMDA4QjAwMEQ0MDAwRkMwRDQwMDBGQTJDQzgwMDA0MEQwNDAwMDQwMzQKKzoxMDA4QzAwMDdDNDA4MDAwQTAwMDAwMDA3RTgyODAwQjdDNDBDMDAwNDUKKzoxMDA4RDAwMDMwRDAwMDA2MEQxMDAwMDY5OTAwMDAwN0M4MTQwMDE1NUUKKzoxMDA4RTAwMDk5NDAwMDA1Q0MwMDAwNTJENDAwMDM0MEQ0MDAwRkMwNTIKKzoxMDA4RjAwMEQ0MDAwRkEyQ0M4MDAwNDBDQ0MwMDA0MDgwMDAwMDAwOUIKKzoxMDA5MDAwMEQwNDAwMDQwN0M0MEMwMDBDQzREMDAwMERDM0EwMDAwRUMKKzoxMDA5MTAwMDk3ODBGREJDMDRDQzAwMDE4MDAwMDI0M0NDNEQwMDAwNTgKKzoxMDA5MjAwMDdDNDBDMDAwN0M0MTAwMDAyOTI0MDAxODMyNjQwMDAxOTIKKzoxMDA5MzAwMDk2NDAwMDBGQ0M4MDAwNDA3QzQxNDAwMDdDNDE4MDAwMEMKKzoxMDA5NDAwMDdDNDFDMDAwQ0NDMDAwNDNDRDAwMDA0MzMxREM3RkZGQzAKKzoxMDA5NTAwMENEQzAwMDQzQ0NDMDAwNDBDRDAwMDA0MENENDAwMDQwQTEKKzoxMDA5NjAwMENEODAwMDQwODAwMDAwMDBDREMwMDA0MENDQzAwMDQwRTEKKzoxMDA5NzAwMENEMDAwMDQwODAwMDAwMDBEMDQwMDA0MDgwMDAwMDAwMUEKKzoxMDA5ODAwMEQwNDAwMDdGQ0MwMDAwN0Y4MDAwMDAwMENDMDAwMDdGQzIKKzoxMDA5OTAwMENDMDAwMDdGODgwMDAwMDBDQzAwMDA3RjAwMDAwMDAwMzkKKzoxMDA5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMDA5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDA5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDA5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDA5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDA5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDBBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMDBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMDBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDBDMDAwMDAwMDMwMjIzMDAwNDAyMkIwMDA1MDBBMDAwMDIwMDAzRTEKKzoxMDBDMTAwMDAwMDYwMDNDMDAwNzAwMjcwMDA4MDE5MjAwMDkwMDQ0N0MKKzoxMDBDMjAwMDAwMEEwMDJEMDAxMDAyNUYwMDE3MDBGMTAwMjIwMUQ4MTkKKzoxMDBDMzAwMDAwMjMwMUU5MDAyNjAwNEMwMDI3MDA1RjAwMjAwMTFCNzMKKzoxMDBDNDAwMDAwMjgwMDkzMDAyOTAwNEYwMDJBMDA4NDAwMkIwMDY1MzMKKzoxMDBDNTAwMDAwMkYwMDhFMDAzMjAwRDkwMDM0MDIzMzAwMzYwMDc1QjgKKzoxMDBDNjAwMDAwMzkwMTBCMDAzQzAxRkQwMDNGMDBBMDAwNDEwMjQ4OUIKKzoxMDBDNzAwMDAwNDQwMTk1MDA0ODAxOUUwMDQ5MDFDNjAwNEEwMUQwODgKKzoxMDBDODAwMDAwNTUwMjI2MDA1NjAyMkUwMDYwMDAwQTAwNjEwMDJBNkMKKzoxMDBDOTAwMDAwNjIwMDMwMDA2MzAwMzAwMDY0MDAzMDAwNjUwMDMwMDYKKzoxMDBDQTAwMDAwNjYwMDMwMDA2NzAwMzAwMDY4MDAzNzAwNjkwMDNGRDAKKzoxMDBDQjAwMDAwNkEwMDQ3MDA2QjAwNDcwMDZDMDA0NzAwNkQwMDQ3NkEKKzoxMDBDQzAwMDAwNkUwMDQ3MDA2RjAwNDcwMDcwMDA0NzAwNzMwMjVGMkUKKzoxMDBDRDAwMDAwN0IwMjQxMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1NDcKKzoxMDBDRTAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1RjAKKzoxMDBDRjAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1RTAKKzoxMDBEMDAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1Q0YKKzoxMDBEMTAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1QkYKKzoxMDBEMjAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1QUYKKzoxMDBEMzAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA1OUYKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA0NTVhYTIwLi5kNGJmOGNhIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTEwOSw2ICsxMDksNyBAQAogCiBjb25maWcgVE1QRlMKIAlib29sICJWaXJ0dWFsIG1lbW9yeSBmaWxlIHN5c3RlbSBzdXBwb3J0IChmb3JtZXIgc2htIGZzKSIKKwlkZXBlbmRzIG9uIFNITUVNCiAJaGVscAogCSAgVG1wZnMgaXMgYSBmaWxlIHN5c3RlbSB3aGljaCBrZWVwcyBhbGwgZmlsZXMgaW4gdmlydHVhbCBtZW1vcnkuCiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mbG9jay5jIGIvZnMvYWZzL2Zsb2NrLmMKaW5kZXggM2ZmOGJkZC4uMDkzMWJjMSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Zsb2NrLmMKKysrIGIvZnMvYWZzL2Zsb2NrLmMKQEAgLTIxLDcgKzIxLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYWZzX2xvY2tfbWFuYWdlcjsKIHN0YXRpYyBERUZJTkVfTVVURVgoYWZzX2xvY2tfbWFuYWdlcl9tdXRleCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrX29wZXJhdGlvbnMgYWZzX2xvY2tfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX2xvY2tfb3BlcmF0aW9ucyBhZnNfbG9ja19vcHMgPSB7CiAJLmZsX2NvcHlfbG9jawkJPSBhZnNfZmxfY29weV9sb2NrLAogCS5mbF9yZWxlYXNlX3ByaXZhdGUJPSBhZnNfZmxfcmVsZWFzZV9wcml2YXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9wcm9jLmMgYi9mcy9hZnMvcHJvYy5jCmluZGV4IDg2MzA2MTUuLjg1MjczOWQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9wcm9jLmMKKysrIGIvZnMvYWZzL3Byb2MuYwpAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIHNzaXplX3QgYWZzX3Byb2NfY2VsbHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgIHNpemVfdCBzaXplLCBsb2ZmX3QgKl9wb3MpOwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYWZzX3Byb2NfY2VsbHNfb3BzID0gewogCS5zdGFydAk9IGFmc19wcm9jX2NlbGxzX3N0YXJ0LAogCS5uZXh0CT0gYWZzX3Byb2NfY2VsbHNfbmV4dCwKIAkuc3RvcAk9IGFmc19wcm9jX2NlbGxzX3N0b3AsCkBAIC03MCw3ICs3MCw3IEBACiBzdGF0aWMgdm9pZCBhZnNfcHJvY19jZWxsX3ZvbHVtZXNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpOwogc3RhdGljIGludCBhZnNfcHJvY19jZWxsX3ZvbHVtZXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpOwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxfdm9sdW1lc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxfdm9sdW1lc19vcHMgPSB7CiAJLnN0YXJ0CT0gYWZzX3Byb2NfY2VsbF92b2x1bWVzX3N0YXJ0LAogCS5uZXh0CT0gYWZzX3Byb2NfY2VsbF92b2x1bWVzX25leHQsCiAJLnN0b3AJPSBhZnNfcHJvY19jZWxsX3ZvbHVtZXNfc3RvcCwKQEAgLTk1LDcgKzk1LDcgQEAKIHN0YXRpYyB2b2lkIGFmc19wcm9jX2NlbGxfdmxzZXJ2ZXJzX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgYWZzX3Byb2NfY2VsbF92bHNlcnZlcnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpOwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGFmc19wcm9jX2NlbGxfdmxzZXJ2ZXJzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYWZzX3Byb2NfY2VsbF92bHNlcnZlcnNfb3BzID0gewogCS5zdGFydAk9IGFmc19wcm9jX2NlbGxfdmxzZXJ2ZXJzX3N0YXJ0LAogCS5uZXh0CT0gYWZzX3Byb2NfY2VsbF92bHNlcnZlcnNfbmV4dCwKIAkuc3RvcAk9IGFmc19wcm9jX2NlbGxfdmxzZXJ2ZXJzX3N0b3AsCkBAIC0xMTksNyArMTE5LDcgQEAKIHN0YXRpYyB2b2lkIGFmc19wcm9jX2NlbGxfc2VydmVyc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiBzdGF0aWMgaW50IGFmc19wcm9jX2NlbGxfc2VydmVyc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYWZzX3Byb2NfY2VsbF9zZXJ2ZXJzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYWZzX3Byb2NfY2VsbF9zZXJ2ZXJzX29wcyA9IHsKIAkuc3RhcnQJPSBhZnNfcHJvY19jZWxsX3NlcnZlcnNfc3RhcnQsCiAJLm5leHQJPSBhZnNfcHJvY19jZWxsX3NlcnZlcnNfbmV4dCwKIAkuc3RvcAk9IGFmc19wcm9jX2NlbGxfc2VydmVyc19zdG9wLApkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBkMDY1YjJjLi4wMmEyYzkzIDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgpAQCAtMzQsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCiAjaWYgREVCVUcgPiAxCiAjZGVmaW5lIGRwcmludGsJCXByaW50awpAQCAtNzgsNiArNzgsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitfX2luaXRjYWxsKGFpb19zZXR1cCk7CiAKIHN0YXRpYyB2b2lkIGFpb19mcmVlX3Jpbmcoc3RydWN0IGtpb2N0eCAqY3R4KQogewpAQCAtMzgwLDYgKzM4MSw3IEBACiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJldHVybiBpb2NiLT5raV91c2VyX2RhdGE7CiB9CitFWFBPUlRfU1lNQk9MKHdhaXRfb25fc3luY19raW9jYik7CiAKIC8qIGV4aXRfYWlvOiBjYWxsZWQgd2hlbiB0aGUgbGFzdCB1c2VyIG9mIG1tIGdvZXMgYXdheS4gIEF0IHRoaXMgcG9pbnQsIAogICogdGhlcmUgaXMgbm8gd2F5IGZvciBhbnkgbmV3IHJlcXVlc3RzIHRvIGJlIHN1Ym1pdGVkIG9yIGFueSBvZiB0aGUgCkBAIC01NzMsNiArNTc1LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGFpb19wdXRfcmVxKTsKIAogc3RhdGljIHN0cnVjdCBraW9jdHggKmxvb2t1cF9pb2N0eCh1bnNpZ25lZCBsb25nIGN0eF9pZCkKIHsKQEAgLTU5NSw1MSArNTk4LDYgQEAKIH0KIAogLyoKLSAqIHVzZV9tbQotICoJTWFrZXMgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZCB0YWtlIG9uIHRoZSBzcGVjaWZpZWQKLSAqCW1tIGNvbnRleHQuCi0gKglDYWxsZWQgYnkgdGhlIHJldHJ5IHRocmVhZCBleGVjdXRlIHJldHJpZXMgd2l0aGluIHRoZQotICoJaW9jYiBpc3N1ZXIncyBtbSBjb250ZXh0LCBzbyB0aGF0IGNvcHlfZnJvbS90b191c2VyCi0gKglvcGVyYXRpb25zIHdvcmsgc2VhbWxlc3NseSBmb3IgYWlvLgotICoJKE5vdGU6IHRoaXMgcm91dGluZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seQotICoJZnJvbSBhIGtlcm5lbCB0aHJlYWQgY29udGV4dCkKLSAqLwotc3RhdGljIHZvaWQgdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0KLQl0YXNrX2xvY2sodHNrKTsKLQlhY3RpdmVfbW0gPSB0c2stPmFjdGl2ZV9tbTsKLQlhdG9taWNfaW5jKCZtbS0+bW1fY291bnQpOwotCXRzay0+bW0gPSBtbTsKLQl0c2stPmFjdGl2ZV9tbSA9IG1tOwotCXN3aXRjaF9tbShhY3RpdmVfbW0sIG1tLCB0c2spOwotCXRhc2tfdW5sb2NrKHRzayk7Ci0KLQltbWRyb3AoYWN0aXZlX21tKTsKLX0KLQotLyoKLSAqIHVudXNlX21tCi0gKglSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzZV9tbSwgaS5lLiByZWxlYXNlcyB0aGUKLSAqCXNwZWNpZmllZCBtbSBjb250ZXh0IHdoaWNoIHdhcyBlYXJsaWVyIHRha2VuIG9uCi0gKglieSB0aGUgY2FsbGluZyBrZXJuZWwgdGhyZWFkCi0gKgkoTm90ZTogdGhpcyByb3V0aW5lIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbmx5Ci0gKglmcm9tIGEga2VybmVsIHRocmVhZCBjb250ZXh0KQotICovCi1zdGF0aWMgdm9pZCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0KLQl0YXNrX2xvY2sodHNrKTsKLQl0c2stPm1tID0gTlVMTDsKLQkvKiBhY3RpdmVfbW0gaXMgc3RpbGwgJ21tJyAqLwotCWVudGVyX2xhenlfdGxiKG1tLCB0c2spOwotCXRhc2tfdW5sb2NrKHRzayk7Ci19Ci0KLS8qCiAgKiBRdWV1ZSB1cCBhIGtpb2NiIHRvIGJlIHJldHJpZWQuIEFzc3VtZXMgdGhhdCB0aGUga2lvY2IKICAqIGhhcyBhbHJlYWR5IGJlZW4gbWFya2VkIGFzIGtpY2tlZCwgYW5kIHBsYWNlcyBpdCBvbgogICogdGhlIHJldHJ5IHJ1biBsaXN0IGZvciB0aGUgY29ycmVzcG9uZGluZyBpb2N0eCwgaWYgaXQKQEAgLTEwMzcsNiArOTk1LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmN0eF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woYWlvX2NvbXBsZXRlKTsKIAogLyogYWlvX3JlYWRfZXZ0CiAgKglQdWxsIGFuIGV2ZW50IG9mZiBvZiB0aGUgaW9jdHgncyBldmVudCByaW5nLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIApAQCAtMTgyNSw5ICsxNzg0LDMgQEAKIAlhc21saW5rYWdlX3Byb3RlY3QoNSwgcmV0LCBjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgdGltZW91dCk7CiAJcmV0dXJuIHJldDsKIH0KLQotX19pbml0Y2FsbChhaW9fc2V0dXApOwotCi1FWFBPUlRfU1lNQk9MKGFpb19jb21wbGV0ZSk7Ci1FWFBPUlRfU1lNQk9MKGFpb19wdXRfcmVxKTsKLUVYUE9SVF9TWU1CT0wod2FpdF9vbl9zeW5jX2tpb2NiKTsKZGlmZiAtLWdpdCBhL2ZzL2Fub25faW5vZGVzLmMgYi9mcy9hbm9uX2lub2Rlcy5jCmluZGV4IDQ3ZDRhMDEuLmQxMWM1MWYgMTAwNjQ0Ci0tLSBhL2ZzL2Fub25faW5vZGVzLmMKKysrIGIvZnMvYW5vbl9pbm9kZXMuYwpAQCAtNzcsMjggKzc3LDI0IEBACiAgKgogICogQ3JlYXRlcyBhIG5ldyBmaWxlIGJ5IGhvb2tpbmcgaXQgb24gYSBzaW5nbGUgaW5vZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBmaWxlcwogICogdGhhdCBkbyBub3QgbmVlZCB0byBoYXZlIGEgZnVsbC1mbGVkZ2VkIGlub2RlIGluIG9yZGVyIHRvIG9wZXJhdGUgY29ycmVjdGx5LgotICogQWxsIHRoZSBmaWxlcyBjcmVhdGVkIHdpdGggYW5vbl9pbm9kZV9nZXRmZCgpIHdpbGwgc2hhcmUgYSBzaW5nbGUgaW5vZGUsCisgKiBBbGwgdGhlIGZpbGVzIGNyZWF0ZWQgd2l0aCBhbm9uX2lub2RlX2dldGZpbGUoKSB3aWxsIHNoYXJlIGEgc2luZ2xlIGlub2RlLAogICogaGVuY2Ugc2F2aW5nIG1lbW9yeSBhbmQgYXZvaWRpbmcgY29kZSBkdXBsaWNhdGlvbiBmb3IgdGhlIGZpbGUvaW5vZGUvZGVudHJ5Ci0gKiBzZXR1cC4gIFJldHVybnMgbmV3IGRlc2NyaXB0b3Igb3IgLWVycm9yLgorICogc2V0dXAuICBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUqIG9yIGFuIGVycm9yIHBvaW50ZXIuCiAgKi8KLWludCBhbm9uX2lub2RlX2dldGZkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCi0JCSAgICAgdm9pZCAqcHJpdiwgaW50IGZsYWdzKQorc3RydWN0IGZpbGUgKmFub25faW5vZGVfZ2V0ZmlsZShjb25zdCBjaGFyICpuYW1lLAorCQkJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCQkJdm9pZCAqcHJpdiwgaW50IGZsYWdzKQogewogCXN0cnVjdCBxc3RyIHRoaXM7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCXN0cnVjdCBmaWxlICpmaWxlOwotCWludCBlcnJvciwgZmQ7CisJaW50IGVycm9yOwogCiAJaWYgKElTX0VSUihhbm9uX2lub2RlX2lub2RlKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCiAJaWYgKGZvcHMtPm93bmVyICYmICF0cnlfbW9kdWxlX2dldChmb3BzLT5vd25lcikpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JZXJyb3IgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKGZsYWdzKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIGVycl9tb2R1bGU7Ci0JZmQgPSBlcnJvcjsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKIAkvKgogCSAqIExpbmsgdGhlIGlub2RlIHRvIGEgZGlyZWN0b3J5IGVudHJ5IGJ5IGNyZWF0aW5nIGEgdW5pcXVlIG5hbWUKQEAgLTExMCw3ICsxMDYsNyBAQAogCXRoaXMuaGFzaCA9IDA7CiAJZGVudHJ5ID0gZF9hbGxvYyhhbm9uX2lub2RlX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKIAlpZiAoIWRlbnRyeSkKLQkJZ290byBlcnJfcHV0X3VudXNlZF9mZDsKKwkJZ290byBlcnJfbW9kdWxlOwogCiAJLyoKIAkgKiBXZSBrbm93IHRoZSBhbm9uX2lub2RlIGlub2RlIGNvdW50IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gemVybywKQEAgLTEzNiwxNiArMTMyLDU0IEBACiAJZmlsZS0+Zl92ZXJzaW9uID0gMDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCisJcmV0dXJuIGZpbGU7CisKK2Vycl9kcHV0OgorCWRwdXQoZGVudHJ5KTsKK2Vycl9tb2R1bGU6CisJbW9kdWxlX3B1dChmb3BzLT5vd25lcik7CisJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYW5vbl9pbm9kZV9nZXRmaWxlKTsKKworLyoqCisgKiBhbm9uX2lub2RlX2dldGZkIC0gY3JlYXRlcyBhIG5ldyBmaWxlIGluc3RhbmNlIGJ5IGhvb2tpbmcgaXQgdXAgdG8gYW4KKyAqICAgICAgICAgICAgICAgICAgICBhbm9ueW1vdXMgaW5vZGUsIGFuZCBhIGRlbnRyeSB0aGF0IGRlc2NyaWJlIHRoZSAiY2xhc3MiCisgKiAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZpbGUKKyAqCisgKiBAbmFtZTogICAgW2luXSAgICBuYW1lIG9mIHRoZSAiY2xhc3MiIG9mIHRoZSBuZXcgZmlsZQorICogQGZvcHM6ICAgIFtpbl0gICAgZmlsZSBvcGVyYXRpb25zIGZvciB0aGUgbmV3IGZpbGUKKyAqIEBwcml2OiAgICBbaW5dICAgIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5ldyBmaWxlICh3aWxsIGJlIGZpbGUncyBwcml2YXRlX2RhdGEpCisgKiBAZmxhZ3M6ICAgW2luXSAgICBmbGFncworICoKKyAqIENyZWF0ZXMgYSBuZXcgZmlsZSBieSBob29raW5nIGl0IG9uIGEgc2luZ2xlIGlub2RlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZmlsZXMKKyAqIHRoYXQgZG8gbm90IG5lZWQgdG8gaGF2ZSBhIGZ1bGwtZmxlZGdlZCBpbm9kZSBpbiBvcmRlciB0byBvcGVyYXRlIGNvcnJlY3RseS4KKyAqIEFsbCB0aGUgZmlsZXMgY3JlYXRlZCB3aXRoIGFub25faW5vZGVfZ2V0ZmQoKSB3aWxsIHNoYXJlIGEgc2luZ2xlIGlub2RlLAorICogaGVuY2Ugc2F2aW5nIG1lbW9yeSBhbmQgYXZvaWRpbmcgY29kZSBkdXBsaWNhdGlvbiBmb3IgdGhlIGZpbGUvaW5vZGUvZGVudHJ5CisgKiBzZXR1cC4gIFJldHVybnMgbmV3IGRlc2NyaXB0b3Igb3IgYW4gZXJyb3IgY29kZS4KKyAqLworaW50IGFub25faW5vZGVfZ2V0ZmQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJICAgICB2b2lkICpwcml2LCBpbnQgZmxhZ3MpCit7CisJaW50IGVycm9yLCBmZDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKworCWVycm9yID0gZ2V0X3VudXNlZF9mZF9mbGFncyhmbGFncyk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCWZkID0gZXJyb3I7CisKKwlmaWxlID0gYW5vbl9pbm9kZV9nZXRmaWxlKG5hbWUsIGZvcHMsIHByaXYsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGZpbGUpKSB7CisJCWVycm9yID0gUFRSX0VSUihmaWxlKTsKKwkJZ290byBlcnJfcHV0X3VudXNlZF9mZDsKKwl9CiAJZmRfaW5zdGFsbChmZCwgZmlsZSk7CiAKIAlyZXR1cm4gZmQ7CiAKLWVycl9kcHV0OgotCWRwdXQoZGVudHJ5KTsKIGVycl9wdXRfdW51c2VkX2ZkOgogCXB1dF91bnVzZWRfZmQoZmQpOwotZXJyX21vZHVsZToKLQltb2R1bGVfcHV0KGZvcHMtPm93bmVyKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhbm9uX2lub2RlX2dldGZkKTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mcy9kaXJoYXNoLmMgYi9mcy9hdXRvZnMvZGlyaGFzaC5jCmluZGV4IDIzMTZlOTQuLmU5NDc5MTUgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mcy9kaXJoYXNoLmMKKysrIGIvZnMvYXV0b2ZzL2Rpcmhhc2guYwpAQCAtOTAsNyArOTAsNyBAQAogCQkJRFBSSU5USygoImF1dG9mczogbm90IGV4cGlyYWJsZSAobm90IGEgbW91bnRlZCBkaXJlY3RvcnkpOiAlc1xuIiwgZW50LT5uYW1lKSk7CiAJCQljb250aW51ZTsKIAkJfQotCQl3aGlsZSAoZF9tb3VudHBvaW50KHBhdGguZGVudHJ5KSAmJiBmb2xsb3dfZG93bigmcGF0aCkpOworCQl3aGlsZSAoZF9tb3VudHBvaW50KHBhdGguZGVudHJ5KSAmJiBmb2xsb3dfZG93bigmcGF0aCkpCiAJCQk7CiAJCXVtb3VudF9vayA9IG1heV91bW91bnQocGF0aC5tbnQpOwogCQlwYXRoX3B1dCgmcGF0aCk7CmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggNjE1ZDU0OS4uZGQzNzZjMSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtODQyLDcgKzg0Miw3IEBACiAJc2ItPnNfbWFnaWMgPSBCRUZTX1NVUEVSX01BR0lDOwogCS8qIFNldCByZWFsIGJsb2Nrc2l6ZSBvZiBmcyAqLwogCXNiX3NldF9ibG9ja3NpemUoc2IsICh1bG9uZykgYmVmc19zYi0+YmxvY2tfc2l6ZSk7Ci0Jc2ItPnNfb3AgPSAoc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgKikgJmJlZnNfc29wczsKKwlzYi0+c19vcCA9ICZiZWZzX3NvcHM7CiAJcm9vdCA9IGJlZnNfaWdldChzYiwgaWFkZHIyYmxvY2tubyhzYiwgJihiZWZzX3NiLT5yb290X2RpcikpKTsKIAlpZiAoSVNfRVJSKHJvb3QpKSB7CiAJCXJldCA9IFBUUl9FUlIocm9vdCk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggN2MxZTY1ZC4uNDQyZDk0ZiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMTI4MCw5ICsxMjgwLDYgQEAKICNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJXAogCWlmICgoc2l6ZSArPSAobnIpKSA+IGxpbWl0IHx8ICFkdW1wX3dyaXRlKGZpbGUsIChhZGRyKSwgKG5yKSkpIFwKIAkJZ290byBlbmRfY29yZWR1bXA7Ci0jZGVmaW5lIERVTVBfU0VFSyhvZmYpCVwKLQlpZiAoIWR1bXBfc2VlayhmaWxlLCAob2ZmKSkpIFwKLQkJZ290byBlbmRfY29yZWR1bXA7CiAKIHN0YXRpYyB2b2lkIGZpbGxfZWxmX2hlYWRlcihzdHJ1Y3QgZWxmaGRyICplbGYsIGludCBzZWdzLAogCQkJICAgIHUxNiBtYWNoaW5lLCB1MzIgZmxhZ3MsIHU4IG9zYWJpKQpAQCAtMjAxNiw3ICsyMDEzLDggQEAKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKIAkvKiBBbGlnbiB0byBwYWdlICovCi0JRFVNUF9TRUVLKGRhdGFvZmYgLSBmb2Zmc2V0KTsKKwlpZiAoIWR1bXBfc2VlayhmaWxlLCBkYXRhb2ZmIC0gZm9mZnNldCkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJZm9yICh2bWEgPSBmaXJzdF92bWEoY3VycmVudCwgZ2F0ZV92bWEpOyB2bWEgIT0gTlVMTDsKIAkJCXZtYSA9IG5leHRfdm1hKHZtYSwgZ2F0ZV92bWEpKSB7CkBAIC0yMDI3LDMzICsyMDI1LDE5IEBACiAKIAkJZm9yIChhZGRyID0gdm1hLT52bV9zdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp0bXBfdm1hOworCQkJaW50IHN0b3A7CiAKLQkJCWlmIChnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgMSwgMCwgMSwKLQkJCQkJCSZwYWdlLCAmdG1wX3ZtYSkgPD0gMCkgewotCQkJCURVTVBfU0VFSyhQQUdFX1NJWkUpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocGFnZSA9PSBaRVJPX1BBR0UoMCkpIHsKLQkJCQkJaWYgKCFkdW1wX3NlZWsoZmlsZSwgUEFHRV9TSVpFKSkgewotCQkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJCQkJZ290byBlbmRfY29yZWR1bXA7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQl2b2lkICprYWRkcjsKLQkJCQkJZmx1c2hfY2FjaGVfcGFnZSh0bXBfdm1hLCBhZGRyLAotCQkJCQkJCSBwYWdlX3RvX3BmbihwYWdlKSk7Ci0JCQkJCWthZGRyID0ga21hcChwYWdlKTsKLQkJCQkJaWYgKChzaXplICs9IFBBR0VfU0laRSkgPiBsaW1pdCB8fAotCQkJCQkgICAgIWR1bXBfd3JpdGUoZmlsZSwga2FkZHIsCi0JCQkJCSAgICBQQUdFX1NJWkUpKSB7Ci0JCQkJCQlrdW5tYXAocGFnZSk7Ci0JCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQkJCQlnb3RvIGVuZF9jb3JlZHVtcDsKLQkJCQkJfQotCQkJCQlrdW5tYXAocGFnZSk7Ci0JCQkJfQorCQkJcGFnZSA9IGdldF9kdW1wX3BhZ2UoYWRkcik7CisJCQlpZiAocGFnZSkgeworCQkJCXZvaWQgKmthZGRyID0ga21hcChwYWdlKTsKKwkJCQlzdG9wID0gKChzaXplICs9IFBBR0VfU0laRSkgPiBsaW1pdCkgfHwKKwkJCQkJIWR1bXBfd3JpdGUoZmlsZSwga2FkZHIsIFBBR0VfU0laRSk7CisJCQkJa3VubWFwKHBhZ2UpOwogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCX0KKwkJCX0gZWxzZQorCQkJCXN0b3AgPSAhZHVtcF9zZWVrKGZpbGUsIFBBR0VfU0laRSk7CisJCQlpZiAoc3RvcCkKKwkJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZl9mZHBpYy5jIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCmluZGV4IDIwZmJlY2UuLjc2Mjg1NDcgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYworKysgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKQEAgLTEzMjUsOSArMTMyNSw2IEBACiAjZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIpCVwKIAlpZiAoKHNpemUgKz0gKG5yKSkgPiBsaW1pdCB8fCAhZHVtcF93cml0ZShmaWxlLCAoYWRkciksIChucikpKSBcCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwotI2RlZmluZSBEVU1QX1NFRUsob2ZmKQlcCi0JaWYgKCFkdW1wX3NlZWsoZmlsZSwgKG9mZikpKSBcCi0JCWdvdG8gZW5kX2NvcmVkdW1wOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9lbGZfZmRwaWNfaGVhZGVyKHN0cnVjdCBlbGZoZHIgKmVsZiwgaW50IHNlZ3MpCiB7CkBAIC0xNTE4LDYgKzE1MTUsNyBAQAogCQkJICAgdW5zaWduZWQgbG9uZyAqbGltaXQsIHVuc2lnbmVkIGxvbmcgbW1fZmxhZ3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJaW50IGVyciA9IDA7CiAKIAlmb3IgKHZtYSA9IGN1cnJlbnQtPm1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewogCQl1bnNpZ25lZCBsb25nIGFkZHI7CkBAIC0xNTI1LDQzICsxNTIzLDI2IEBACiAJCWlmICghbWF5ZHVtcCh2bWEsIG1tX2ZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7Ci0JCSAgICAgYWRkciA8IHZtYS0+dm1fZW5kOwotCQkgICAgIGFkZHIgKz0gUEFHRV9TSVpFCi0JCSAgICAgKSB7Ci0JCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQkJCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCQlpZiAoZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIDEsIDAsIDEsCi0JCQkJCSAgICZwYWdlLCAmdm1hKSA8PSAwKSB7Ci0JCQkJRFVNUF9TRUVLKGZpbGUtPmZfcG9zICsgUEFHRV9TSVpFKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBhZ2UgPT0gWkVST19QQUdFKDApKSB7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJCURVTVBfU0VFSyhmaWxlLT5mX3BvcyArIFBBR0VfU0laRSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQl2b2lkICprYWRkcjsKLQotCQkJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7Ci0JCQkJa2FkZHIgPSBrbWFwKHBhZ2UpOwotCQkJCWlmICgoKnNpemUgKz0gUEFHRV9TSVpFKSA+ICpsaW1pdCB8fAotCQkJCSAgICAhZHVtcF93cml0ZShmaWxlLCBrYWRkciwgUEFHRV9TSVpFKQotCQkJCSAgICApIHsKLQkJCQkJa3VubWFwKHBhZ2UpOwotCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQkJCXJldHVybiAtRUlPOwotCQkJCX0KKwkJZm9yIChhZGRyID0gdm1hLT52bV9zdGFydDsgYWRkciA8IHZtYS0+dm1fZW5kOworCQkJCQkJCWFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdldF9kdW1wX3BhZ2UoYWRkcik7CisJCQlpZiAocGFnZSkgeworCQkJCXZvaWQgKmthZGRyID0ga21hcChwYWdlKTsKKwkJCQkqc2l6ZSArPSBQQUdFX1NJWkU7CisJCQkJaWYgKCpzaXplID4gKmxpbWl0KQorCQkJCQllcnIgPSAtRUZCSUc7CisJCQkJZWxzZSBpZiAoIWR1bXBfd3JpdGUoZmlsZSwga2FkZHIsIFBBR0VfU0laRSkpCisJCQkJCWVyciA9IC1FSU87CiAJCQkJa3VubWFwKHBhZ2UpOwogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCX0KKwkJCX0gZWxzZSBpZiAoIWR1bXBfc2VlayhmaWxlLCBmaWxlLT5mX3BvcyArIFBBR0VfU0laRSkpCisJCQkJZXJyID0gLUVGQklHOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKIAkJfQogCX0KLQotCXJldHVybiAwOwotCi1lbmRfY29yZWR1bXA6Ci0JcmV0dXJuIC1FRkJJRzsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTE4MDIsNyArMTc4Myw4IEBACiAJCQkJZ290byBlbmRfY29yZWR1bXA7CiAJfQogCi0JRFVNUF9TRUVLKGRhdGFvZmYpOworCWlmICghZHVtcF9zZWVrKGZpbGUsIGRhdGFvZmYpKQorCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogCWlmIChlbGZfZmRwaWNfZHVtcF9zZWdtZW50cyhmaWxlLCAmc2l6ZSwgJmxpbWl0LCBtbV9mbGFncykgPCAwKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggNzFlN2UwMy4uNWQxZWQ1MCAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTExMTQsNyArMTExNCw3IEBACiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICogYmRvcHMgPSBkaXNrLT5mb3BzOworCWNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqYmRvcHMgPSBkaXNrLT5mb3BzOwogCiAJaWYgKCFiZG9wcy0+bWVkaWFfY2hhbmdlZCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggOGI4MTkyNy4uNmM0MTczMSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtNzcyLDcgKzc3Miw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJlZV9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZWVfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBidHJlZV9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gYnRyZWVfd3JpdGVwYWdlLAogCS53cml0ZXBhZ2VzCT0gYnRyZWVfd3JpdGVwYWdlcywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IDU5Y2JhMTguLjkwOTZmZDAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtNTUsMTMgKzU1LDEzIEBACiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3Q7CiB9OwogCi1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9yb19pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19hb3BzOwotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfc3ltbGlua19hb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19kaXJfcm9faW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfYW9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfYW9wczsKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IGV4dGVudF9pb19vcHMgYnRyZnNfZXh0ZW50X2lvX29wczsKIApAQCAtNTIwMSw3ICs1MjAxLDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBidHJmc19jaGVja19hY2wpOwogfQogCi1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmdldGF0dHIJPSBidHJmc19nZXRhdHRyLAogCS5sb29rdXAJCT0gYnRyZnNfbG9va3VwLAogCS5jcmVhdGUJCT0gYnRyZnNfY3JlYXRlLApAQCAtNTIxOSw3ICs1MjE5LDcgQEAKIAkucmVtb3ZleGF0dHIJPSBidHJmc19yZW1vdmV4YXR0ciwKIAkucGVybWlzc2lvbgk9IGJ0cmZzX3Blcm1pc3Npb24sCiB9Owotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9yb19pbm9kZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9yb19pbm9kZV9vcGVyYXRpb25zID0gewogCS5sb29rdXAJCT0gYnRyZnNfbG9va3VwLAogCS5wZXJtaXNzaW9uCT0gYnRyZnNfcGVybWlzc2lvbiwKIH07CkBAIC01MjU5LDcgKzUyNTksNyBAQAogICoKICAqIEZvciBub3cgd2UncmUgYXZvaWRpbmcgdGhpcyBieSBkcm9wcGluZyBibWFwLgogICovCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBidHJmc19yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gYnRyZnNfd3JpdGVwYWdlLAogCS53cml0ZXBhZ2VzCT0gYnRyZnNfd3JpdGVwYWdlcywKQEAgLTUyNzEsMTQgKzUyNzEsMTQgQEAKIAkuc2V0X3BhZ2VfZGlydHkJPSBidHJmc19zZXRfcGFnZV9kaXJ0eSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBidHJmc19yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gYnRyZnNfd3JpdGVwYWdlLAogCS5pbnZhbGlkYXRlcGFnZSA9IGJ0cmZzX2ludmFsaWRhdGVwYWdlLAogCS5yZWxlYXNlcGFnZQk9IGJ0cmZzX3JlbGVhc2VwYWdlLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnRydW5jYXRlCT0gYnRyZnNfdHJ1bmNhdGUsCiAJLmdldGF0dHIJPSBidHJmc19nZXRhdHRyLAogCS5zZXRhdHRyCT0gYnRyZnNfc2V0YXR0ciwKQEAgLTUyOTAsNyArNTI5MCw3IEBACiAJLmZhbGxvY2F0ZQk9IGJ0cmZzX2ZhbGxvY2F0ZSwKIAkuZmllbWFwCQk9IGJ0cmZzX2ZpZW1hcCwKIH07Ci1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuZ2V0YXR0cgk9IGJ0cmZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBidHJmc19zZXRhdHRyLAogCS5wZXJtaXNzaW9uCT0gYnRyZnNfcGVybWlzc2lvbiwKQEAgLTUyOTksNyArNTI5OSw3IEBACiAJLmxpc3R4YXR0cgk9IGJ0cmZzX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBidHJmc19yZW1vdmV4YXR0ciwKIH07Ci1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZGxpbmsJPSBnZW5lcmljX3JlYWRsaW5rLAogCS5mb2xsb3dfbGluawk9IHBhZ2VfZm9sbG93X2xpbmtfbGlnaHQsCiAJLnB1dF9saW5rCT0gcGFnZV9wdXRfbGluaywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDZkNmQwNmMuLjJkYjE3Y2QgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgImV4cG9ydC5oIgogI2luY2x1ZGUgImNvbXByZXNzaW9uLmgiCiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYnRyZnNfc3VwZXJfb3BzOwogCiBzdGF0aWMgdm9pZCBidHJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKQEAgLTY3NSw3ICs2NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYnRyZnNfc3VwZXJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJ0cmZzX3N1cGVyX29wcyA9IHsKIAkuZGVsZXRlX2lub2RlCT0gYnRyZnNfZGVsZXRlX2lub2RlLAogCS5wdXRfc3VwZXIJPSBidHJmc19wdXRfc3VwZXIsCiAJLnN5bmNfZnMJPSBidHJmc19zeW5jX2ZzLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggZDkxYjBkZS4uMzBjMGQ0NSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0yNjA1LDcgKzI2MDUsNyBAQAogCQkJCQkJCQlleHRlbnQpOwogCQkJCWNzID0gYnRyZnNfZmlsZV9leHRlbnRfb2Zmc2V0KHNyYywgZXh0ZW50KTsKIAkJCQljbCA9IGJ0cmZzX2ZpbGVfZXh0ZW50X251bV9ieXRlcyhzcmMsCi0JCQkJCQkJCWV4dGVudCk7OworCQkJCQkJCQlleHRlbnQpOwogCQkJCWlmIChidHJmc19maWxlX2V4dGVudF9jb21wcmVzc2lvbihzcmMsCiAJCQkJCQkJCSAgZXh0ZW50KSkgewogCQkJCQljcyA9IDA7CmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDkwYTk4ODYuLjIwOWY3ZjEgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC01Miw2ICs1Miw3IEBACiAJYmgtPmJfZW5kX2lvID0gaGFuZGxlcjsKIAliaC0+Yl9wcml2YXRlID0gcHJpdmF0ZTsKIH0KK0VYUE9SVF9TWU1CT0woaW5pdF9idWZmZXIpOwogCiBzdGF0aWMgaW50IHN5bmNfYnVmZmVyKHZvaWQgKndvcmQpCiB7CkBAIC04MCw2ICs4MSw3IEBACiAJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAl3YWtlX3VwX2JpdCgmYmgtPmJfc3RhdGUsIEJIX0xvY2spOwogfQorRVhQT1JUX1NZTUJPTCh1bmxvY2tfYnVmZmVyKTsKIAogLyoKICAqIEJsb2NrIHVudGlsIGEgYnVmZmVyIGNvbWVzIHVubG9ja2VkLiAgVGhpcyBkb2Vzbid0IHN0b3AgaXQKQEAgLTkwLDYgKzkyLDcgQEAKIHsKIAl3YWl0X29uX2JpdCgmYmgtPmJfc3RhdGUsIEJIX0xvY2ssIHN5bmNfYnVmZmVyLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiB9CitFWFBPUlRfU1lNQk9MKF9fd2FpdF9vbl9idWZmZXIpOwogCiBzdGF0aWMgdm9pZAogX19jbGVhcl9wYWdlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UpCkBAIC0xNDQsNiArMTQ3LDcgQEAKIAlfX2VuZF9idWZmZXJfcmVhZF9ub3RvdWNoKGJoLCB1cHRvZGF0ZSk7CiAJcHV0X2JoKGJoKTsKIH0KK0VYUE9SVF9TWU1CT0woZW5kX2J1ZmZlcl9yZWFkX3N5bmMpOwogCiB2b2lkIGVuZF9idWZmZXJfd3JpdGVfc3luYyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpCiB7CkBAIC0xNjQsNiArMTY4LDcgQEAKIAl1bmxvY2tfYnVmZmVyKGJoKTsKIAlwdXRfYmgoYmgpOwogfQorRVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX3dyaXRlX3N5bmMpOwogCiAvKgogICogVmFyaW91cyBmaWxlc3lzdGVtcyBhcHBlYXIgdG8gd2FudCBfX2ZpbmRfZ2V0X2Jsb2NrIHRvIGJlIG5vbi1ibG9ja2luZy4KQEAgLTI3Miw2ICsyNzcsNyBAQAogCWludmFsaWRhdGVfYmhfbHJ1cygpOwogCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhtYXBwaW5nLCAwLCAtMSk7CiB9CitFWFBPUlRfU1lNQk9MKGludmFsaWRhdGVfYmRldik7CiAKIC8qCiAgKiBLaWNrIHBkZmx1c2ggdGhlbiB0cnkgdG8gZnJlZSB1cCBzb21lIFpPTkVfTk9STUFMIG1lbW9yeS4KQEAgLTQxMCw2ICs0MTYsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm47CiB9CitFWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfYXN5bmNfd3JpdGUpOwogCiAvKgogICogSWYgYSBwYWdlJ3MgYnVmZmVycyBhcmUgdW5kZXIgYXN5bmMgcmVhZGluIChlbmRfYnVmZmVyX2FzeW5jX3JlYWQKQEAgLTQzOCw4ICs0NDUsOCBAQAogCXNldF9idWZmZXJfYXN5bmNfcmVhZChiaCk7CiB9CiAKLXZvaWQgbWFya19idWZmZXJfYXN5bmNfd3JpdGVfZW5kaW8oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCQkgICBiaF9lbmRfaW9fdCAqaGFuZGxlcikKK3N0YXRpYyB2b2lkIG1hcmtfYnVmZmVyX2FzeW5jX3dyaXRlX2VuZGlvKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJCSAgYmhfZW5kX2lvX3QgKmhhbmRsZXIpCiB7CiAJYmgtPmJfZW5kX2lvID0gaGFuZGxlcjsKIAlzZXRfYnVmZmVyX2FzeW5jX3dyaXRlKGJoKTsKQEAgLTU1Myw3ICs1NjAsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgZG9fdGhhd19hbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgZG9fdGhhd19hbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwpAQCAtMTE3Miw2ICsxMTc5LDcgQEAKIAkJfQogCX0KIH0KK0VYUE9SVF9TWU1CT0wobWFya19idWZmZXJfZGlydHkpOwogCiAvKgogICogRGVjcmVtZW50IGEgYnVmZmVyX2hlYWQncyByZWZlcmVuY2UgY291bnQuICBJZiBhbGwgYnVmZmVycyBhZ2FpbnN0IGEgcGFnZQpAQCAtMTE4OCw2ICsxMTk2LDcgQEAKIAl9CiAJV0FSTigxLCBLRVJOX0VSUiAiVkZTOiBicmVsc2U6IFRyeWluZyB0byBmcmVlIGZyZWUgYnVmZmVyXG4iKTsKIH0KK0VYUE9SVF9TWU1CT0woX19icmVsc2UpOwogCiAvKgogICogYmZvcmdldCgpIGlzIGxpa2UgYnJlbHNlKCksIGV4Y2VwdCBpdCBkaXNjYXJkcyBhbnkKQEAgLTEyMDYsNiArMTIxNSw3IEBACiAJfQogCV9fYnJlbHNlKGJoKTsKIH0KK0VYUE9SVF9TWU1CT0woX19iZm9yZ2V0KTsKIAogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX19icmVhZF9zbG93KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CkBAIC0yMjE4LDYgKzIyMjgsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woYmxvY2tfcmVhZF9mdWxsX3BhZ2UpOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtcyB0aGF0IG5lZWQgdG8gZG8gd29yayBvbiBleHBhbmRpbmcKICAqIHRydW5jYXRlcy4gIFVzZXMgZmlsZXN5c3RlbSBwYWdlY2FjaGUgd3JpdGVzIHRvIGFsbG93IHRoZSBmaWxlc3lzdGVtIHRvCkBAIC0yMjUyLDYgKzIyNjMsNyBAQAogb3V0OgogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKTsKIAogc3RhdGljIGludCBjb250X2V4cGFuZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCSAgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgKmJ5dGVzKQpAQCAtMjM1Miw2ICsyMzY0LDcgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChjb250X3dyaXRlX2JlZ2luKTsKIAogaW50IGJsb2NrX3ByZXBhcmVfd3JpdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLAogCQkJZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKQEAgLTIzNjIsNiArMjM3NSw3IEBACiAJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKGJsb2NrX3ByZXBhcmVfd3JpdGUpOwogCiBpbnQgYmxvY2tfY29tbWl0X3dyaXRlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKQEAgLTIzNjksNiArMjM4Myw3IEBACiAJX19ibG9ja19jb21taXRfd3JpdGUoaW5vZGUscGFnZSxmcm9tLHRvKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woYmxvY2tfY29tbWl0X3dyaXRlKTsKIAogLyoKICAqIGJsb2NrX3BhZ2VfbWt3cml0ZSgpIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgZmlsZSBzaXplIGFzIGl0IGdldHMKQEAgLTI0MjYsNiArMjQ0MSw3IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woYmxvY2tfcGFnZV9ta3dyaXRlKTsKIAogLyoKICAqIG5vYmhfd3JpdGVfYmVnaW4oKSdzIHByZXJlYWRzIGFyZSBzcGVjaWFsOiB0aGUgYnVmZmVyX2hlYWRzIGFyZSBmcmVlZApAQCAtMjg0OSw2ICsyODY1LDcgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChibG9ja190cnVuY2F0ZV9wYWdlKTsKIAogLyoKICAqIFRoZSBnZW5lcmljIC0+d3JpdGVwYWdlIGZ1bmN0aW9uIGZvciBidWZmZXItYmFja2VkIGFkZHJlc3Nfc3BhY2VzCkBAIC0yODkwLDYgKzI5MDcsNyBAQAogCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIG9mZnNldCwgUEFHRV9DQUNIRV9TSVpFKTsKIAlyZXR1cm4gX19ibG9ja193cml0ZV9mdWxsX3BhZ2UoaW5vZGUsIHBhZ2UsIGdldF9ibG9jaywgd2JjLCBoYW5kbGVyKTsKIH0KK0VYUE9SVF9TWU1CT0woYmxvY2tfd3JpdGVfZnVsbF9wYWdlX2VuZGlvKTsKIAogLyoKICAqIFRoZSBnZW5lcmljIC0+d3JpdGVwYWdlIGZ1bmN0aW9uIGZvciBidWZmZXItYmFja2VkIGFkZHJlc3Nfc3BhY2VzCkBAIC0yOTAwLDcgKzI5MTgsNyBAQAogCXJldHVybiBibG9ja193cml0ZV9mdWxsX3BhZ2VfZW5kaW8ocGFnZSwgZ2V0X2Jsb2NrLCB3YmMsCiAJCQkJCSAgIGVuZF9idWZmZXJfYXN5bmNfd3JpdGUpOwogfQotCitFWFBPUlRfU1lNQk9MKGJsb2NrX3dyaXRlX2Z1bGxfcGFnZSk7CiAKIHNlY3Rvcl90IGdlbmVyaWNfYmxvY2tfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2ssCiAJCQkgICAgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKQEAgLTI5MTMsNiArMjkzMSw3IEBACiAJZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgJnRtcCwgMCk7CiAJcmV0dXJuIHRtcC5iX2Jsb2NrbnI7CiB9CitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfYmxvY2tfYm1hcCk7CiAKIHN0YXRpYyB2b2lkIGVuZF9iaW9fYmhfaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCiB7CkBAIC0yOTgyLDYgKzMwMDEsNyBAQAogCWJpb19wdXQoYmlvKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChzdWJtaXRfYmgpOwogCiAvKioKICAqIGxsX3J3X2Jsb2NrOiBsb3ctbGV2ZWwgYWNjZXNzIHRvIGJsb2NrIGRldmljZXMgKERFUFJFQ0FURUQpCkBAIC0zMDQzLDYgKzMwNjMsNyBAQAogCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGxsX3J3X2Jsb2NrKTsKIAogLyoKICAqIEZvciBhIGRhdGEtaW50ZWdyaXR5IHdyaXRlb3V0LCB3ZSBuZWVkIHRvIHdhaXQgdXBvbiBhbnkgaW4tcHJvZ3Jlc3MgSS9PCkBAIC0zMDcxLDYgKzMwOTIsNyBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChzeW5jX2RpcnR5X2J1ZmZlcik7CiAKIC8qCiAgKiB0cnlfdG9fZnJlZV9idWZmZXJzKCkgY2hlY2tzIGlmIGFsbCB0aGUgYnVmZmVycyBvbiB0aGlzIHBhcnRpY3VsYXIgcGFnZQpAQCAtMzE4NSw2ICszMjA3LDcgQEAKIAlpZiAobWFwcGluZykKIAkJYmxrX3J1bl9iYWNraW5nX2RldihtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLCBwYWdlKTsKIH0KK0VYUE9SVF9TWU1CT0woYmxvY2tfc3luY19wYWdlKTsKIAogLyoKICAqIFRoZXJlIGFyZSBubyBiZGZsdXNoIHR1bmFibGVzIGxlZnQuICBCdXQgZGlzdHJpYnV0aW9ucyBhcmUKQEAgLTMzNjEsMjkgKzMzODQsMyBAQAogCW1heF9idWZmZXJfaGVhZHMgPSBucnBhZ2VzICogKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQpKTsKIAlob3RjcHVfbm90aWZpZXIoYnVmZmVyX2NwdV9ub3RpZnksIDApOwogfQotCi1FWFBPUlRfU1lNQk9MKF9fYmZvcmdldCk7Ci1FWFBPUlRfU1lNQk9MKF9fYnJlbHNlKTsKLUVYUE9SVF9TWU1CT0woX193YWl0X29uX2J1ZmZlcik7Ci1FWFBPUlRfU1lNQk9MKGJsb2NrX2NvbW1pdF93cml0ZSk7Ci1FWFBPUlRfU1lNQk9MKGJsb2NrX3ByZXBhcmVfd3JpdGUpOwotRVhQT1JUX1NZTUJPTChibG9ja19wYWdlX21rd3JpdGUpOwotRVhQT1JUX1NZTUJPTChibG9ja19yZWFkX2Z1bGxfcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKGJsb2NrX3N5bmNfcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKGJsb2NrX3RydW5jYXRlX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChibG9ja193cml0ZV9mdWxsX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChibG9ja193cml0ZV9mdWxsX3BhZ2VfZW5kaW8pOwotRVhQT1JUX1NZTUJPTChjb250X3dyaXRlX2JlZ2luKTsKLUVYUE9SVF9TWU1CT0woZW5kX2J1ZmZlcl9yZWFkX3N5bmMpOwotRVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX3dyaXRlX3N5bmMpOwotRVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX2FzeW5jX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woZmlsZV9mc3luYyk7Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfYmxvY2tfYm1hcCk7Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKTsKLUVYUE9SVF9TWU1CT0woaW5pdF9idWZmZXIpOwotRVhQT1JUX1NZTUJPTChpbnZhbGlkYXRlX2JkZXYpOwotRVhQT1JUX1NZTUJPTChsbF9yd19ibG9jayk7Ci1FWFBPUlRfU1lNQk9MKG1hcmtfYnVmZmVyX2RpcnR5KTsKLUVYUE9SVF9TWU1CT0woc3VibWl0X2JoKTsKLUVYUE9SVF9TWU1CT0woc3luY19kaXJ0eV9idWZmZXIpOwotRVhQT1JUX1NZTUJPTCh1bmxvY2tfYnVmZmVyKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCmluZGV4IDYwNjkxMmQuLmZlYTllODkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKKysrIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJcmMgPSBkbnNfcmVzb2x2ZV9zZXJ2ZXJfbmFtZV90b19pcCgqZGV2bmFtZSwgJnNydklQKTsKIAlpZiAocmMgIT0gMCkgewogCQljRVJST1IoMSwgKCIlczogRmFpbGVkIHRvIHJlc29sdmUgc2VydmVyIHBhcnQgb2YgJXMgdG8gSVA6ICVkIiwKLQkJCSAgX19mdW5jX18sICpkZXZuYW1lLCByYykpOzsKKwkJCSAgX19mdW5jX18sICpkZXZuYW1lLCByYykpOwogCQlnb3RvIGNvbXBvc2VfbW91bnRfb3B0aW9uc19lcnI7CiAJfQogCS8qIG1kX2xlbiA9IHN0cmxlbiguLi4pICsgMTIgZm9yICdzZXArcHJlZml4cGF0aD0nCkBAIC0zODUsNyArMzg1LDcgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kZnNfcmVmZXJyYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGZzX3JlZmVycmFsX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmZvbGxvd19saW5rID0gY2lmc19kZnNfZm9sbG93X21vdW50cG9pbnQsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCAzNjEwZTk5Li5kNzljZTJlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTUwLDcgKzUwLDcgQEAKICNkZWZpbmUgQ0lGU19NQUdJQ19OVU1CRVIgMHhGRjUzNEQ0MgkvKiB0aGUgZmlyc3QgZm91ciBieXRlcyBvZiBTTUIgUERVcyAqLwogCiAjaWZkZWYgQ09ORklHX0NJRlNfUVVPVEEKLXN0YXRpYyBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGNpZnNfcXVvdGFjdGxfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgY2lmc19xdW90YWN0bF9vcHM7CiAjZW5kaWYgLyogUVVPVEEgKi8KIAogaW50IGNpZnNGWUkgPSAwOwpAQCAtNTE3LDcgKzUxNyw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyBjaWZzX3F1b3RhY3RsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGNpZnNfcXVvdGFjdGxfb3BzID0gewogCS5zZXRfeHF1b3RhCT0gY2lmc194cXVvdGFfc2V0LAogCS5nZXRfeHF1b3RhCT0gY2lmc194cXVvdGFfZ2V0LAogCS5zZXRfeHN0YXRlCT0gY2lmc194c3RhdGVfc2V0LApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggMDk0MzI1ZS4uYWMyYjI0YyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC02Nyw3ICs2Nyw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2ZpbGVfaW5vZGVfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfc3ltbGlua19pbm9kZV9vcHM7Ci1leHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kZnNfcmVmZXJyYWxfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rmc19yZWZlcnJhbF9pbm9kZV9vcGVyYXRpb25zOwogCiAKIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGZpbGVzIGFuZCBkaXJlY3RvcmllcyAqLwpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA2ZDZmOThmLi4zYWE0ODgzIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTAwLDEzICsxMDAsNiBAQAogCQkgICAgZ2V0X2NvbXBhdF90aW1lc3BlYygmdHZbMV0sICZ0WzFdKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmICgodHZbMF0udHZfbnNlYyA9PSBVVElNRV9PTUlUIHx8IHR2WzBdLnR2X25zZWMgPT0gVVRJTUVfTk9XKQotCQkgICAgJiYgdHZbMF0udHZfc2VjICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCh0dlsxXS50dl9uc2VjID09IFVUSU1FX09NSVQgfHwgdHZbMV0udHZfbnNlYyA9PSBVVElNRV9OT1cpCi0JCSAgICAmJiB0dlsxXS50dl9zZWMgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCiAJCWlmICh0dlswXS50dl9uc2VjID09IFVUSU1FX09NSVQgJiYgdHZbMV0udHZfbnNlYyA9PSBVVElNRV9PTUlUKQogCQkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuYwppbmRleCA3NWVmYjAyLi5kNWY4Yzk2IDEwMDY0NAotLS0gYS9mcy9kZXZwdHMvaW5vZGUuYworKysgYi9mcy9kZXZwdHMvaW5vZGUuYwpAQCAtMTgsMTQgKzE4LDEzIEBACiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2cHRzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCi0jZGVmaW5lIERFVlBUU19TVVBFUl9NQUdJQyAweDFjZDEKLQogI2RlZmluZSBERVZQVFNfREVGQVVMVF9NT0RFIDA2MDAKIC8qCiAgKiBwdG14IGlzIGEgbmV3IG5vZGUgaW4gL2Rldi9wdHMgYW5kIHdpbGwgYmUgdW51c2VkIGluIGxlZ2FjeSAoc2luZ2xlLQpkaWZmIC0tZ2l0IGEvZnMvZGxtL2RlYnVnX2ZzLmMgYi9mcy9kbG0vZGVidWdfZnMuYwppbmRleCAxZDFkMjc0Li4xYzhiYjhjIDEwMDY0NAotLS0gYS9mcy9kbG0vZGVidWdfZnMuYworKysgYi9mcy9kbG0vZGVidWdfZnMuYwpAQCAtMzg2LDkgKzM4Niw5IEBACiAJcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDFfc2VxX29wczsKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0Ml9zZXFfb3BzOwotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQzX3NlcV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDFfc2VxX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0Ml9zZXFfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQzX3NlcV9vcHM7CiAKIHN0YXRpYyB2b2lkICp0YWJsZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewpAQCAtNTM0LDIxICs1MzQsMjEgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0MV9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQxX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gdGFibGVfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IHRhYmxlX3NlcV9uZXh0LAogCS5zdG9wICA9IHRhYmxlX3NlcV9zdG9wLAogCS5zaG93ICA9IHRhYmxlX3NlcV9zaG93LAogfTsKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmb3JtYXQyX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDJfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSB0YWJsZV9zZXFfc3RhcnQsCiAJLm5leHQgID0gdGFibGVfc2VxX25leHQsCiAJLnN0b3AgID0gdGFibGVfc2VxX3N0b3AsCiAJLnNob3cgID0gdGFibGVfc2VxX3Nob3csCiB9OwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZvcm1hdDNfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0M19zZXFfb3BzID0gewogCS5zdGFydCA9IHRhYmxlX3NlcV9zdGFydCwKIAkubmV4dCAgPSB0YWJsZV9zZXFfbmV4dCwKIAkuc3RvcCAgPSB0YWJsZV9zZXFfc3RvcCwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKaW5kZXggMDBiMzBhMi4uNTQyZjYyNSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKKysrIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKQEAgLTU4Miw3ICs1ODIsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVjcnlwdGZzX3N5bWxpbmtfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBlY3J5cHRmc19zb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBlY3J5cHRmc19kb3BzOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWNyeXB0ZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVjcnlwdGZzX2FvcHM7CiBleHRlcm4gaW50IGVjcnlwdGZzX3ZlcmJvc2l0eTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZWNyeXB0ZnNfbWVzc2FnZV9idWZfbGVuOwogZXh0ZXJuIHNpZ25lZCBsb25nIGVjcnlwdGZzX21lc3NhZ2Vfd2FpdF90aW1lb3V0OwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbW1hcC5jIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCmluZGV4IDVjNmJhYjkuLjA1NzcyYWUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21tYXAuYworKysgYi9mcy9lY3J5cHRmcy9tbWFwLmMKQEAgLTU0NSw3ICs1NDUsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlY3J5cHRmc19hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlY3J5cHRmc19hb3BzID0gewogCS53cml0ZXBhZ2UgPSBlY3J5cHRmc193cml0ZXBhZ2UsCiAJLnJlYWRwYWdlID0gZWNyeXB0ZnNfcmVhZHBhZ2UsCiAJLndyaXRlX2JlZ2luID0gZWNyeXB0ZnNfd3JpdGVfYmVnaW4sCmRpZmYgLS1naXQgYS9mcy9ldmVudGZkLmMgYi9mcy9ldmVudGZkLmMKaW5kZXggMzFkMTJkZS4uOGI0N2U0MiAxMDA2NDQKLS0tIGEvZnMvZXZlbnRmZC5jCisrKyBiL2ZzL2V2ZW50ZmQuYwpAQCAtNjgsMTEgKzY4LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChldmVudGZkX3NpZ25hbCk7CiAKK3N0YXRpYyB2b2lkIGV2ZW50ZmRfZnJlZV9jdHgoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgpCit7CisJa2ZyZWUoY3R4KTsKK30KKwogc3RhdGljIHZvaWQgZXZlbnRmZF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBldmVudGZkX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBldmVudGZkX2N0eCwga3JlZik7CiAKLQlrZnJlZShjdHgpOworCWV2ZW50ZmRfZnJlZV9jdHgoY3R4KTsKIH0KIAogLyoqCkBAIC0yOTgsOSArMzAzLDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChldmVudGZkX2N0eF9maWxlZ2V0KTsKIAotU1lTQ0FMTF9ERUZJTkUyKGV2ZW50ZmQyLCB1bnNpZ25lZCBpbnQsIGNvdW50LCBpbnQsIGZsYWdzKQorLyoqCisgKiBldmVudGZkX2ZpbGVfY3JlYXRlIC0gQ3JlYXRlcyBhbiBldmVudGZkIGZpbGUgcG9pbnRlci4KKyAqIEBjb3VudDogSW5pdGlhbCBldmVudGZkIGNvdW50ZXIgdmFsdWUuCisgKiBAZmxhZ3M6IEZsYWdzIGZvciB0aGUgZXZlbnRmZCBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBldmVudGZkIGZpbGUgcG9pbnRlciwgdy9vdXQgaW5zdGFsbGluZyBpdCBpbnRvCisgKiB0aGUgZmQgdGFibGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIGV2ZW50ZmQgZmlsZSBpcyB1c2VkIGR1cmluZyB0aGUKKyAqIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyB0aGF0IHJlcXVpcmUgZXh0cmEgc2V0dXAgYWZ0ZXIgdGhlIGV2ZW50ZmQKKyAqIGNyZWF0aW9uLiBTbyB0aGUgZXZlbnRmZCBjcmVhdGlvbiBpcyBzcGxpdCBpbnRvIHRoZSBmaWxlIHBvaW50ZXIgY3JlYXRpb24KKyAqIHBoYXNlLCBhbmQgdGhlIGZpbGUgZGVzY3JpcHRvciBpbnN0YWxsYXRpb24gcGhhc2UuCisgKiBJbiB0aGlzIHdheSByYWNlcyB3aXRoIHVzZXJzcGFjZSBjbG9zaW5nIHRoZSBuZXdseSBpbnN0YWxsZWQgZmlsZSBkZXNjcmlwdG9yCisgKiBjYW4gYmUgYXZvaWRlZC4KKyAqIFJldHVybnMgYW4gZXZlbnRmZCBmaWxlIHBvaW50ZXIsIG9yIGEgcHJvcGVyIGVycm9yIHBvaW50ZXIuCisgKi8KK3N0cnVjdCBmaWxlICpldmVudGZkX2ZpbGVfY3JlYXRlKHVuc2lnbmVkIGludCBjb3VudCwgaW50IGZsYWdzKQogewotCWludCBmZDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDsKIAogCS8qIENoZWNrIHRoZSBFRkRfKiBjb25zdGFudHMgZm9yIGNvbnNpc3RlbmN5LiAgKi8KQEAgLTMwOCwyNiArMzI3LDQ4IEBACiAJQlVJTERfQlVHX09OKEVGRF9OT05CTE9DSyAhPSBPX05PTkJMT0NLKTsKIAogCWlmIChmbGFncyAmIH5FRkRfRkxBR1NfU0VUKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAljdHggPSBrbWFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHgpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWtyZWZfaW5pdCgmY3R4LT5rcmVmKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdHgtPndxaCk7CiAJY3R4LT5jb3VudCA9IGNvdW50OwogCWN0eC0+ZmxhZ3MgPSBmbGFnczsKIAotCS8qCi0JICogV2hlbiB3ZSBjYWxsIHRoaXMsIHRoZSBpbml0aWFsaXphdGlvbiBtdXN0IGJlIGNvbXBsZXRlLCBzaW5jZQotCSAqIGFub25faW5vZGVfZ2V0ZmQoKSB3aWxsIGluc3RhbGwgdGhlIGZkLgotCSAqLwotCWZkID0gYW5vbl9pbm9kZV9nZXRmZCgiW2V2ZW50ZmRdIiwgJmV2ZW50ZmRfZm9wcywgY3R4LAotCQkJICAgICAgZmxhZ3MgJiBFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKTsKLQlpZiAoZmQgPCAwKQotCQlrZnJlZShjdHgpOworCWZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoIltldmVudGZkXSIsICZldmVudGZkX2ZvcHMsIGN0eCwKKwkJCQkgIGZsYWdzICYgRUZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJaWYgKElTX0VSUihmaWxlKSkKKwkJZXZlbnRmZF9mcmVlX2N0eChjdHgpOworCisJcmV0dXJuIGZpbGU7Cit9CisKK1NZU0NBTExfREVGSU5FMihldmVudGZkMiwgdW5zaWduZWQgaW50LCBjb3VudCwgaW50LCBmbGFncykKK3sKKwlpbnQgZmQsIGVycm9yOworCXN0cnVjdCBmaWxlICpmaWxlOworCisJZXJyb3IgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKGZsYWdzICYgRUZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCWZkID0gZXJyb3I7CisKKwlmaWxlID0gZXZlbnRmZF9maWxlX2NyZWF0ZShjb3VudCwgZmxhZ3MpOworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGZpbGUpOworCQlnb3RvIGVycl9wdXRfdW51c2VkX2ZkOworCX0KKwlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKKwogCXJldHVybiBmZDsKKworZXJyX3B1dF91bnVzZWRfZmQ6CisJcHV0X3VudXNlZF9mZChmZCk7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIFNZU0NBTExfREVGSU5FMShldmVudGZkLCB1bnNpZ25lZCBpbnQsIGNvdW50KQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDE3MmNlYjYuLjVjODMzYzEgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KQEAgLTg0NSw2ICs4NDUsOSBAQAogCXNpZy0+bm90aWZ5X2NvdW50ID0gMDsKIAogbm9fdGhyZWFkX2dyb3VwOgorCWlmIChjdXJyZW50LT5tbSkKKwkJc2V0bWF4X21tX2hpd2F0ZXJfcnNzKCZzaWctPm1heHJzcywgY3VycmVudC0+bW0pOworCiAJZXhpdF9pdGltZXJzKHNpZyk7CiAJZmx1c2hfaXRpbWVyX3NpZ25hbHMoKTsKIApAQCAtOTIzLDcgKzkyNiw3IEBACiAJdGFza19sb2NrKHRzayk7CiAJc3RybGNweSh0c2stPmNvbW0sIGJ1Ziwgc2l6ZW9mKHRzay0+Y29tbSkpOwogCXRhc2tfdW5sb2NrKHRzayk7Ci0JcGVyZl9jb3VudGVyX2NvbW0odHNrKTsKKwlwZXJmX2V2ZW50X2NvbW0odHNrKTsKIH0KIAogaW50IGZsdXNoX29sZF9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKQpAQCAtOTk3LDcgKzEwMDAsNyBAQAogCSAqIHNlY3VyaXR5IGRvbWFpbjoKIAkgKi8KIAlpZiAoIWdldF9kdW1wYWJsZShjdXJyZW50LT5tbSkpCi0JCXBlcmZfY291bnRlcl9leGl0X3Rhc2soY3VycmVudCk7CisJCXBlcmZfZXZlbnRfZXhpdF90YXNrKGN1cnJlbnQpOwogCiAJLyogQW4gZXhlYyBjaGFuZ2VzIG91ciBkb21haW4uIFdlIGFyZSBubyBsb25nZXIgcGFydCBvZiB0aGUgdGhyZWFkCiAJICAgZ3JvdXAgKi8KQEAgLTEzNTQsNiArMTM1Nyw4IEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0OwogCisJY3VycmVudC0+c3RhY2tfc3RhcnQgPSBjdXJyZW50LT5tbS0+c3RhcnRfc3RhY2s7CisKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCiAJY3VycmVudC0+ZnMtPmluX2V4ZWMgPSAwOwogCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CmRpZmYgLS1naXQgYS9mcy9leHQyL25hbWVpLmMgYi9mcy9leHQyL25hbWVpLmMKaW5kZXggMjM3MDFmMi4uZGQ3MTc1YyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9uYW1laS5jCisrKyBiL2ZzL2V4dDIvbmFtZWkuYwpAQCAtNzAsNyArNzAsNyBAQAogCQkJaWYgKFBUUl9FUlIoaW5vZGUpID09IC1FU1RBTEUpIHsKIAkJCQlleHQyX2Vycm9yKGRpci0+aV9zYiwgX19mdW5jX18sCiAJCQkJCQkiZGVsZXRlZCBpbm9kZSByZWZlcmVuY2VkOiAlbHUiLAotCQkJCQkJaW5vKTsKKwkJCQkJCSh1bnNpZ25lZCBsb25nKSBpbm8pOwogCQkJCXJldHVybiBFUlJfUFRSKC1FSU8pOwogCQkJfSBlbHNlIHsKIAkJCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94aXAuYyBiL2ZzL2V4dDIveGlwLmMKaW5kZXggYjcyYjg1OC4uYzE4ZmJmMyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi94aXAuYworKysgYi9mcy9leHQyL3hpcC5jCkBAIC0yMCw3ICsyMCw3IEBACiAJCSAgICAgIHZvaWQgKiprYWRkciwgdW5zaWduZWQgbG9uZyAqcGZuKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9zYi0+c19iZGV2OwotCXN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqb3BzID0gYmRldi0+YmRfZGlzay0+Zm9wczsKKwljb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKm9wcyA9IGJkZXYtPmJkX2Rpc2stPmZvcHM7CiAJc2VjdG9yX3Qgc2VjdG9yOwogCiAJc2VjdG9yID0gYmxvY2sgKiAoUEFHRV9TSVpFIC8gNTEyKTsgLyogZXh0MiBibG9jayB0byBiZGV2IHNlY3RvciAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IGE4ZDgwYTcuLjcyNzQzZDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTcyMCw3ICs3MjAsNyBAQAogc3RhdGljIHNzaXplX3QgZXh0M19xdW90YV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwKIAkJCQljb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTsKIAotc3RhdGljIHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGV4dDNfcXVvdGFfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQzX3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAogCS5kcm9wCQk9IGRxdW90X2Ryb3AsCiAJLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCkBAIC03MzcsNyArNzM3LDcgQEAKIAkuZGVzdHJveV9kcXVvdAk9IGRxdW90X2Rlc3Ryb3ksCiB9OwogCi1zdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyBleHQzX3FjdGxfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGV4dDNfcWN0bF9vcGVyYXRpb25zID0gewogCS5xdW90YV9vbgk9IGV4dDNfcXVvdGFfb24sCiAJLnF1b3RhX29mZgk9IHZmc19xdW90YV9vZmYsCiAJLnF1b3RhX3N5bmMJPSB2ZnNfcXVvdGFfc3luYywKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCA0YWJkNjgzLi4zYTc5ODczIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0yMzM3LDcgKzIzMzcsNyBAQAogCQkvKgogCQkgKiBSZXN0IG9mIHRoZSBwYWdlIGluIHRoZSBwYWdlX3ZlYwogCQkgKiByZWRpcnR5IHRoZW4gYW5kIHNraXAgdGhlbi4gV2Ugd2lsbAotCQkgKiB0cnkgdG8gdG8gd3JpdGUgdGhlbSBhZ2FpbiBhZnRlcgorCQkgKiB0cnkgdG8gd3JpdGUgdGhlbSBhZ2FpbiBhZnRlcgogCQkgKiBzdGFydGluZyBhIG5ldyB0cmFuc2FjdGlvbgogCQkgKi8KIAkJcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uod2JjLCBwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCBhNmIxYWI3Li5kZjUzOWJhIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC05NjQsNyArOTY0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsCiAJCQkJY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7CiAKLXN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQ0X3F1b3RhX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZXh0NF9xdW90YV9vcGVyYXRpb25zID0gewogCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKIAkuZHJvcAkJPSBkcXVvdF9kcm9wLAogCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLApAQCAtOTg1LDcgKzk4NSw3IEBACiAJLmRlc3Ryb3lfZHF1b3QJPSBkcXVvdF9kZXN0cm95LAogfTsKIAotc3RhdGljIHN0cnVjdCBxdW90YWN0bF9vcHMgZXh0NF9xY3RsX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBleHQ0X3FjdGxfb3BlcmF0aW9ucyA9IHsKIAkucXVvdGFfb24JPSBleHQ0X3F1b3RhX29uLAogCS5xdW90YV9vZmYJPSB2ZnNfcXVvdGFfb2ZmLAogCS5xdW90YV9zeW5jCT0gdmZzX3F1b3RhX3N5bmMsCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuYyBiL2ZzL2dmczIvcmdycC5jCmluZGV4IDI4YzU5MGIuLjhmMWNmYjAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5jCisrKyBiL2ZzL2dmczIvcmdycC5jCkBAIC0xNzksNyArMTc5LDcgQEAKICAqIGFsd2F5cyBhbGlnbmVkIHRvIGEgNjQgYml0IGJvdW5kYXJ5LgogICoKICAqIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgaW4gYnl0ZXMsIGJ1dCBpcyBpdCBhc3N1bWVkIHRoYXQgaXQgaXMKLSAqIGFsd2F5cyBvayB0byB0byByZWFkIGEgY29tcGxldGUgbXVsdGlwbGUgb2YgNjQgYml0cyBhdCB0aGUgZW5kCisgKiBhbHdheXMgb2sgdG8gcmVhZCBhIGNvbXBsZXRlIG11bHRpcGxlIG9mIDY0IGJpdHMgYXQgdGhlIGVuZAogICogb2YgdGhlIGJsb2NrIGluIGNhc2UgdGhlIGVuZCBpcyBubyBhbGlnbmVkIHRvIGEgbmF0dXJhbCBib3VuZGFyeS4KICAqCiAgKiBSZXR1cm46IHRoZSBibG9jayBudW1iZXIgKGJpdG1hcCBidWZmZXIgc2NvcGUpIHRoYXQgd2FzIGZvdW5kCmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IGE5M2I4ODUuLmViYTZkNTUgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC0zMSwxMiArMzEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0vKiBzb21lIHJhbmRvbSBudW1iZXIgKi8KLSNkZWZpbmUgSFVHRVRMQkZTX01BR0lDCTB4OTU4NDU4ZjYKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh1Z2V0bGJmc19vcHM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wczsKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uczsKQEAgLTUwNyw2ICs1MDUsMTMgQEAKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfbWFwcGluZy0+cHJpdmF0ZV9saXN0KTsKIAkJaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTsKKwkJLyoKKwkJICogVGhlIHBvbGljeSBpcyBpbml0aWFsaXplZCBoZXJlIGV2ZW4gaWYgd2UgYXJlIGNyZWF0aW5nIGEKKwkJICogcHJpdmF0ZSBpbm9kZSBiZWNhdXNlIGluaXRpYWxpemF0aW9uIHNpbXBseSBjcmVhdGVzIGFuCisJCSAqIGFuIGVtcHR5IHJiIHRyZWUgYW5kIGNhbGxzIHNwaW5fbG9ja19pbml0KCksIGxhdGVyIHdoZW4gd2UKKwkJICogY2FsbCBtcG9sX2ZyZWVfc2hhcmVkX3BvbGljeSgpIGl0IHdpbGwganVzdCByZXR1cm4gYmVjYXVzZQorCQkgKiB0aGUgcmIgdHJlZSB3aWxsIHN0aWxsIGJlIGVtcHR5LgorCQkgKi8KIAkJbXBvbF9zaGFyZWRfcG9saWN5X2luaXQoJmluZm8tPnBvbGljeSwgTlVMTCk7CiAJCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgewogCQlkZWZhdWx0OgpAQCAtOTMxLDEzICs5MzYsMTkgQEAKIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqaHVnZXRsYmZzX3Zmc21vdW50OwogCi1zdGF0aWMgaW50IGNhbl9kb19odWdldGxiX3NobSh2b2lkKQorc3RhdGljIGludCBjYW5fZG9faHVnZXRsYl9zaG0oaW50IGNyZWF0X2ZsYWdzKQogewotCXJldHVybiBjYXBhYmxlKENBUF9JUENfTE9DSykgfHwgaW5fZ3JvdXBfcChzeXNjdGxfaHVnZXRsYl9zaG1fZ3JvdXApOworCWlmIChjcmVhdF9mbGFncyAhPSBIVUdFVExCX1NITUZTX0lOT0RFKQorCQlyZXR1cm4gMDsKKwlpZiAoY2FwYWJsZShDQVBfSVBDX0xPQ0spKQorCQlyZXR1cm4gMTsKKwlpZiAoaW5fZ3JvdXBfcChzeXNjdGxfaHVnZXRsYl9zaG1fZ3JvdXApKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgaW50IGFjY3RmbGFnLAotCQkJCQkJc3RydWN0IHVzZXJfc3RydWN0ICoqdXNlcikKKwkJCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKip1c2VyLCBpbnQgY3JlYXRfZmxhZ3MpCiB7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKQEAgLTk0OSw3ICs5NjAsNyBAQAogCWlmICghaHVnZXRsYmZzX3Zmc21vdW50KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAotCWlmICghY2FuX2RvX2h1Z2V0bGJfc2htKCkpIHsKKwlpZiAoIWNhbl9kb19odWdldGxiX3NobShjcmVhdF9mbGFncykpIHsKIAkJKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKIAkJaWYgKHVzZXJfc2htX2xvY2soc2l6ZSwgKnVzZXIpKSB7CiAJCQlXQVJOX09OQ0UoMSwKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IGIyYmE4M2QuLjc2NTgyYjAgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpAQCAtODcsMTQgKzg4LDE4IEBACiBERUZJTkVfU1BJTkxPQ0soaW5vZGVfbG9jayk7CiAKIC8qCi0gKiBpcHJ1bmVfbXV0ZXggcHJvdmlkZXMgZXhjbHVzaW9uIGJldHdlZW4gdGhlIGtzd2FwZCBvciB0cnlfdG9fZnJlZV9wYWdlcworICogaXBydW5lX3NlbSBwcm92aWRlcyBleGNsdXNpb24gYmV0d2VlbiB0aGUga3N3YXBkIG9yIHRyeV90b19mcmVlX3BhZ2VzCiAgKiBpY2FjaGUgc2hyaW5raW5nIHBhdGgsIGFuZCB0aGUgdW1vdW50IHBhdGguICBXaXRob3V0IHRoaXMgZXhjbHVzaW9uLAogICogYnkgdGhlIHRpbWUgcHJ1bmVfaWNhY2hlIGNhbGxzIGlwdXQgZm9yIHRoZSBpbm9kZSB3aG9zZSBwYWdlcyBpdCBoYXMKICAqIGJlZW4gaW52YWxpZGF0aW5nLCBvciBieSB0aGUgdGltZSBpdCBjYWxscyBjbGVhcl9pbm9kZSAmIGRlc3Ryb3lfaW5vZGUKICAqIGZyb20gaXRzIGZpbmFsIGRpc3Bvc2VfbGlzdCwgdGhlIHN0cnVjdCBzdXBlcl9ibG9jayB0aGV5IHJlZmVyIHRvCiAgKiAoZm9yIGlub2RlLT5pX3NiLT5zX29wKSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZnJlZWQgYW5kIHJldXNlZC4KKyAqCisgKiBXZSBtYWtlIHRoaXMgYW4gcndzZW0gYmVjYXVzZSB0aGUgZmFzdHBhdGggaXMgaWNhY2hlIHNocmlua2luZy4gSW4KKyAqIHNvbWUgY2FzZXMgYSBmaWxlc3lzdGVtIG1heSBiZSBkb2luZyBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB3b3JrIGluCisgKiBpdHMgaW5vZGUgcmVjbGFpbSBjb2RlLCBzbyB0aGlzIHNob3VsZCBpbXByb3ZlIHBhcmFsbGVsaXNtLgogICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGlwcnVuZV9tdXRleCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTShpcHJ1bmVfc2VtKTsKIAogLyoKICAqIFN0YXRpc3RpY3MgZ2F0aGVyaW5nLi4KQEAgLTEyMyw3ICsxMjgsNyBAQAogaW50IGlub2RlX2luaXRfYWx3YXlzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZW1wdHlfYW9wczsKLQlzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZW1wdHlfaW9wczsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZW1wdHlfaW9wczsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlbXB0eV9mb3BzOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpjb25zdCBtYXBwaW5nID0gJmlub2RlLT5pX2RhdGE7CiAKQEAgLTM4MSw3ICszODYsNyBAQAogCQkvKgogCQkgKiBXZSBjYW4gcmVzY2hlZHVsZSBoZXJlIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgdGhlIGxpc3QncwogCQkgKiBjb25zaXN0ZW5jeSBiZWNhdXNlIHRoZSBwZXItc2IgbGlzdCBvZiBpbm9kZXMgbXVzdCBub3QKLQkJICogY2hhbmdlIGR1cmluZyB1bW91bnQgYW55bW9yZSwgYW5kIGJlY2F1c2UgaXBydW5lX211dGV4IGtlZXBzCisJCSAqIGNoYW5nZSBkdXJpbmcgdW1vdW50IGFueW1vcmUsIGFuZCBiZWNhdXNlIGlwcnVuZV9zZW0ga2VlcHMKIAkJICogc2hyaW5rX2ljYWNoZV9tZW1vcnkoKSBhd2F5LgogCQkgKi8KIAkJY29uZF9yZXNjaGVkX2xvY2soJmlub2RlX2xvY2spOwpAQCAtNDIwLDcgKzQyNSw3IEBACiAJaW50IGJ1c3k7CiAJTElTVF9IRUFEKHRocm93X2F3YXkpOwogCi0JbXV0ZXhfbG9jaygmaXBydW5lX211dGV4KTsKKwlkb3duX3dyaXRlKCZpcHJ1bmVfc2VtKTsKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCWlub3RpZnlfdW5tb3VudF9pbm9kZXMoJnNiLT5zX2lub2Rlcyk7CiAJZnNub3RpZnlfdW5tb3VudF9pbm9kZXMoJnNiLT5zX2lub2Rlcyk7CkBAIC00MjgsNyArNDMzLDcgQEAKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKIAlkaXNwb3NlX2xpc3QoJnRocm93X2F3YXkpOwotCW11dGV4X3VubG9jaygmaXBydW5lX211dGV4KTsKKwl1cF93cml0ZSgmaXBydW5lX3NlbSk7CiAKIAlyZXR1cm4gYnVzeTsKIH0KQEAgLTQ2Nyw3ICs0NzIsNyBAQAogCWludCBucl9zY2FubmVkOwogCXVuc2lnbmVkIGxvbmcgcmVhcCA9IDA7CiAKLQltdXRleF9sb2NrKCZpcHJ1bmVfbXV0ZXgpOworCWRvd25fcmVhZCgmaXBydW5lX3NlbSk7CiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlmb3IgKG5yX3NjYW5uZWQgPSAwOyBucl9zY2FubmVkIDwgbnJfdG9fc2NhbjsgbnJfc2Nhbm5lZCsrKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CkBAIC01MDksNyArNTE0LDcgQEAKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKIAlkaXNwb3NlX2xpc3QoJmZyZWVhYmxlKTsKLQltdXRleF91bmxvY2soJmlwcnVuZV9tdXRleCk7CisJdXBfcmVhZCgmaXBydW5lX3NlbSk7CiB9CiAKIC8qCkBAIC02OTUsMTMgKzcwMCwxNSBAQAogCX0KICNlbmRpZgogCS8qCi0JICogVGhpcyBpcyBzcGVjaWFsISAgV2UgZG8gbm90IG5lZWQgdGhlIHNwaW5sb2NrCi0JICogd2hlbiBjbGVhcmluZyBJX0xPQ0ssIGJlY2F1c2Ugd2UncmUgZ3VhcmFudGVlZAotCSAqIHRoYXQgbm9ib2R5IGVsc2UgdHJpZXMgdG8gZG8gYW55dGhpbmcgYWJvdXQgdGhlCi0JICogc3RhdGUgb2YgdGhlIGlub2RlIHdoZW4gaXQgaXMgbG9ja2VkLCBhcyB3ZQotCSAqIGp1c3QgY3JlYXRlZCBpdCAoc28gdGhlcmUgY2FuIGJlIG5vIG9sZCBob2xkZXJzCi0JICogdGhhdCBoYXZlbid0IHRlc3RlZCBJX0xPQ0spLgorCSAqIFRoaXMgaXMgc3BlY2lhbCEgIFdlIGRvIG5vdCBuZWVkIHRoZSBzcGlubG9jayB3aGVuIGNsZWFyaW5nIElfTE9DSywKKwkgKiBiZWNhdXNlIHdlJ3JlIGd1YXJhbnRlZWQgdGhhdCBub2JvZHkgZWxzZSB0cmllcyB0byBkbyBhbnl0aGluZyBhYm91dAorCSAqIHRoZSBzdGF0ZSBvZiB0aGUgaW5vZGUgd2hlbiBpdCBpcyBsb2NrZWQsIGFzIHdlIGp1c3QgY3JlYXRlZCBpdCAoc28KKwkgKiB0aGVyZSBjYW4gYmUgbm8gb2xkIGhvbGRlcnMgdGhhdCBoYXZlbid0IHRlc3RlZCBJX0xPQ0spLgorCSAqIEhvd2V2ZXIgd2UgbXVzdCBlbWl0IHRoZSBtZW1vcnkgYmFycmllciBzbyB0aGF0IG90aGVyIENQVXMgcmVsaWFibHkKKwkgKiBzZWUgdGhlIGNsZWFyaW5nIG9mIElfTE9DSyBhZnRlciB0aGUgb3RoZXIgaW5vZGUgaW5pdGlhbGlzYXRpb24gaGFzCisJICogY29tcGxldGVkLgogCSAqLworCXNtcF9tYigpOwogCVdBUk5fT04oKGlub2RlLT5pX3N0YXRlICYgKElfTE9DS3xJX05FVykpICE9IChJX0xPQ0t8SV9ORVcpKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+KElfTE9DS3xJX05FVyk7CiAJd2FrZV91cF9pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2pvdXJuYWwuYyBiL2ZzL2piZDIvam91cm5hbC5jCmluZGV4IGE4YTM1OGIuLjUzYjg2ZTEgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC03NjgsNyArNzY4LDcgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBqYmQyX3NlcV9oaXN0b3J5X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgamJkMl9zZXFfaGlzdG9yeV9vcHMgPSB7CiAJLnN0YXJ0ICA9IGpiZDJfc2VxX2hpc3Rvcnlfc3RhcnQsCiAJLm5leHQgICA9IGpiZDJfc2VxX2hpc3RvcnlfbmV4dCwKIAkuc3RvcCAgID0gamJkMl9zZXFfaGlzdG9yeV9zdG9wLApAQCAtODcyLDcgKzg3Miw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgamJkMl9zZXFfaW5mb19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fb3BzID0gewogCS5zdGFydCAgPSBqYmQyX3NlcV9pbmZvX3N0YXJ0LAogCS5uZXh0ICAgPSBqYmQyX3NlcV9pbmZvX25leHQsCiAJLnN0b3AgICA9IGpiZDJfc2VxX2luZm9fc3RvcCwKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3N1cGVyLmMgYi9mcy9qZmZzMi9zdXBlci5jCmluZGV4IDAwMzVjMDIuLjlhODBlOGUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3N1cGVyLmMKKysrIGIvZnMvamZmczIvc3VwZXIuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmZnMyX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsIHBpbm8pKTsKIH0KIAotc3RhdGljIHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBqZmZzMl9leHBvcnRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBqZmZzMl9leHBvcnRfb3BzID0gewogCS5nZXRfcGFyZW50ID0gamZmczJfZ2V0X3BhcmVudCwKIAkuZmhfdG9fZGVudHJ5ID0gamZmczJfZmhfdG9fZGVudHJ5LAogCS5maF90b19wYXJlbnQgPSBqZmZzMl9maF90b19wYXJlbnQsCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9jbG50bG9jay5jIGIvZnMvbG9ja2QvY2xudGxvY2suYwppbmRleCAxZjNiMGZjLi5mYzkwMzJkIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9jbG50bG9jay5jCisrKyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQkgKi8KIAkJaWYgKGZsX2Jsb2NrZWQtPmZsX3UubmZzX2ZsLm93bmVyLT5waWQgIT0gbG9jay0+c3ZpZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIW5sbV9jbXBfYWRkcihubG1fYWRkcihibG9jay0+Yl9ob3N0KSwgYWRkcikpCisJCWlmICghcnBjX2NtcF9hZGRyKG5sbV9hZGRyKGJsb2NrLT5iX2hvc3QpLCBhZGRyKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobmZzX2NvbXBhcmVfZmgoTkZTX0ZIKGZsX2Jsb2NrZWQtPmZsX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICxmaCkgIT0gMCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudHByb2MuYyBiL2ZzL2xvY2tkL2NsbnRwcm9jLmMKaW5kZXggNDMzNmFkYi4uYzgxMjQ5ZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudHByb2MuYworKysgYi9mcy9sb2NrZC9jbG50cHJvYy5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAlubG1fcHV0X2xvY2tvd25lcihmbC0+ZmxfdS5uZnNfZmwub3duZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfbG9ja19vcGVyYXRpb25zIG5sbWNsbnRfbG9ja19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfbG9ja19vcGVyYXRpb25zIG5sbWNsbnRfbG9ja19vcHMgPSB7CiAJLmZsX2NvcHlfbG9jayA9IG5sbWNsbnRfbG9ja3NfY29weV9sb2NrLAogCS5mbF9yZWxlYXNlX3ByaXZhdGUgPSBubG1jbG50X2xvY2tzX3JlbGVhc2VfcHJpdmF0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9ob3N0LmMgYi9mcy9sb2NrZC9ob3N0LmMKaW5kZXggN2NiMDc2YS4uNDYwMGMyMCAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvaG9zdC5jCisrKyBiL2ZzL2xvY2tkL2hvc3QuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJICovCiAJY2hhaW4gPSAmbmxtX2hvc3RzW25sbV9oYXNoX2FkZHJlc3MobmktPnNhcCldOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvc3QsIHBvcywgY2hhaW4sIGhfaGFzaCkgewotCQlpZiAoIW5sbV9jbXBfYWRkcihubG1fYWRkcihob3N0KSwgbmktPnNhcCkpCisJCWlmICghcnBjX2NtcF9hZGRyKG5sbV9hZGRyKGhvc3QpLCBuaS0+c2FwKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIFNlZSBpZiB3ZSBoYXZlIGFuIE5TTSBoYW5kbGUgZm9yIHRoaXMgY2xpZW50ICovCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJaWYgKGhvc3QtPmhfc2VydmVyICE9IG5pLT5zZXJ2ZXIpCiAJCQljb250aW51ZTsKIAkJaWYgKG5pLT5zZXJ2ZXIgJiYKLQkJICAgICFubG1fY21wX2FkZHIobmxtX3NyY2FkZHIoaG9zdCksIG5pLT5zcmNfc2FwKSkKKwkJICAgICFycGNfY21wX2FkZHIobmxtX3NyY2FkZHIoaG9zdCksIG5pLT5zcmNfc2FwKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIE1vdmUgdG8gaGVhZCBvZiBoYXNoIGNoYWluLiAqLwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvbW9uLmMgYi9mcy9sb2NrZC9tb24uYwppbmRleCAzMGM5MzMxLi5mOTU2NjUxIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9tb24uYworKysgYi9mcy9sb2NrZC9tb24uYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJc3RydWN0IG5zbV9oYW5kbGUgKm5zbTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobnNtLCAmbnNtX2hhbmRsZXMsIHNtX2xpbmspCi0JCWlmIChubG1fY21wX2FkZHIobnNtX2FkZHIobnNtKSwgc2FwKSkKKwkJaWYgKHJwY19jbXBfYWRkcihuc21fYWRkcihuc20pLCBzYXApKQogCQkJcmV0dXJuIG5zbTsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y2xvY2suYyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwppbmRleCBlNTc3YTc4Li5kMTAwMTc5IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNsb2NrLmMKKysrIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCkBAIC03MDUsNyArNzA1LDcgQEAKIAlyZXR1cm4gZmwxLT5mbF9vd25lciA9PSBmbDItPmZsX293bmVyICYmIGZsMS0+ZmxfcGlkID09IGZsMi0+ZmxfcGlkOwogfQogCi1zdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbmxtc3ZjX2xvY2tfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBsb2NrX21hbmFnZXJfb3BlcmF0aW9ucyBubG1zdmNfbG9ja19vcGVyYXRpb25zID0gewogCS5mbF9jb21wYXJlX293bmVyID0gbmxtc3ZjX3NhbWVfb3duZXIsCiAJLmZsX25vdGlmeSA9IG5sbXN2Y19ub3RpZnlfYmxvY2tlZCwKIAkuZmxfZ3JhbnQgPSBubG1zdmNfZ3JhbnRfZGVmZXJyZWQsCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNzdWJzLmMgYi9mcy9sb2NrZC9zdmNzdWJzLmMKaW5kZXggOWU0ZDZhYWIuLmFkNDc4ZGEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3N1YnMuYworKysgYi9mcy9sb2NrZC9zdmNzdWJzLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogc3RhdGljIGludAogbmxtc3ZjX21hdGNoX2lwKHZvaWQgKmRhdGFwLCBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QpCiB7Ci0JcmV0dXJuIG5sbV9jbXBfYWRkcihubG1fc3JjYWRkcihob3N0KSwgZGF0YXApOworCXJldHVybiBycGNfY21wX2FkZHIobmxtX3NyY2FkZHIoaG9zdCksIGRhdGFwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCAxOWVlMThhLi5hODc5NGYyIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTQzNCw3ICs0MzQsNyBAQAogCXJldHVybiBmbC0+ZmxfZmlsZSA9PSB0cnktPmZsX2ZpbGU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbGVhc2VfbWFuYWdlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIGxlYXNlX21hbmFnZXJfb3BzID0gewogCS5mbF9icmVhayA9IGxlYXNlX2JyZWFrX2NhbGxiYWNrLAogCS5mbF9yZWxlYXNlX3ByaXZhdGUgPSBsZWFzZV9yZWxlYXNlX3ByaXZhdGVfY2FsbGJhY2ssCiAJLmZsX215bGVhc2UgPSBsZWFzZV9teWxlYXNlX2NhbGxiYWNrLApkaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuYwppbmRleCBkNDA3ZTdhLi42MTk4NzMxIDEwMDY0NAotLS0gYS9mcy9taW5peC9kaXIuYworKysgYi9mcy9taW5peC9kaXIuYwpAQCAtMzA4LDE0ICszMDgsMTggQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gKHN0cnVjdCBpbm9kZSopbWFwcGluZy0+aG9zdDsKIAljaGFyICprYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAlsb2ZmX3QgcG9zID0gcGFnZV9vZmZzZXQocGFnZSkgKyAoY2hhciopZGUgLSBrYWRkcjsKLQl1bnNpZ25lZCBsZW4gPSBtaW5peF9zYihpbm9kZS0+aV9zYiktPnNfZGlyc2l6ZTsKKwlzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpID0gbWluaXhfc2IoaW5vZGUtPmlfc2IpOworCXVuc2lnbmVkIGxlbiA9IHNiaS0+c19kaXJzaXplOwogCWludCBlcnI7CiAKIAlsb2NrX3BhZ2UocGFnZSk7CiAJZXJyID0gX19taW5peF93cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBwb3MsIGxlbiwKIAkJCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwgTlVMTCk7CiAJaWYgKGVyciA9PSAwKSB7Ci0JCWRlLT5pbm9kZSA9IDA7CisJCWlmIChzYmktPnNfdmVyc2lvbiA9PSBNSU5JWF9WMykKKwkJCSgobWluaXgzX2RpcmVudCAqKSBkZSktPmlub2RlID0gMDsKKwkJZWxzZQorCQkJZGUtPmlub2RlID0gMDsKIAkJZXJyID0gZGlyX2NvbW1pdF9jaHVuayhwYWdlLCBwb3MsIGxlbik7CiAJfSBlbHNlIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC00NDAsNyArNDQ0LDEwIEBACiAJZXJyID0gX19taW5peF93cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBwb3MsIHNiaS0+c19kaXJzaXplLAogCQkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKIAlpZiAoZXJyID09IDApIHsKLQkJZGUtPmlub2RlID0gaW5vZGUtPmlfaW5vOworCQlpZiAoc2JpLT5zX3ZlcnNpb24gPT0gTUlOSVhfVjMpCisJCQkoKG1pbml4M19kaXJlbnQgKikgZGUpLT5pbm9kZSA9IGlub2RlLT5pX2lubzsKKwkJZWxzZQorCQkJZGUtPmlub2RlID0gaW5vZGUtPmlfaW5vOwogCQllcnIgPSBkaXJfY29tbWl0X2NodW5rKHBhZ2UsIHBvcywgc2JpLT5zX2RpcnNpemUpOwogCX0gZWxzZSB7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwpAQCAtNDcwLDcgKzQ3NywxNCBAQAogCWlub190IHJlcyA9IDA7CiAKIAlpZiAoZGUpIHsKLQkJcmVzID0gZGUtPmlub2RlOworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCQlzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpID0gbWluaXhfc2IoaW5vZGUtPmlfc2IpOworCisJCWlmIChzYmktPnNfdmVyc2lvbiA9PSBNSU5JWF9WMykKKwkJCXJlcyA9ICgobWluaXgzX2RpcmVudCAqKSBkZSktPmlub2RlOworCQllbHNlCisJCQlyZXMgPSBkZS0+aW5vZGU7CiAJCWRpcl9wdXRfcGFnZShwYWdlKTsKIAl9CiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2Rpci5jIGIvZnMvbmNwZnMvZGlyLmMKaW5kZXggOWM1OTA3Mi4uYjhiNWIzMCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvZGlyLmMKKysrIGIvZnMvbmNwZnMvZGlyLmMKQEAgLTEyNDEsNyArMTI0MSw3IEBACiAJCW1vbnRoID0gMjsKIAl9IGVsc2UgewogCQlubF9kYXkgPSAoeWVhciAmIDMpIHx8IGRheSA8PSA1OSA/IGRheSA6IGRheSAtIDE7Ci0JCWZvciAobW9udGggPSAwOyBtb250aCA8IDEyOyBtb250aCsrKQorCQlmb3IgKG1vbnRoID0gMTsgbW9udGggPCAxMjsgbW9udGgrKykKIAkJCWlmIChkYXlfblttb250aF0gPiBubF9kYXkpCiAJCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW9jdGwuYyBiL2ZzL25jcGZzL2lvY3RsLmMKaW5kZXggZmEwMzhkZi4uNTNhN2VkNyAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW9jdGwuYworKysgYi9mcy9uY3Bmcy9pb2N0bC5jCkBAIC00NDIsNyArNDQyLDcgQEAKIAkJCWlmIChkZW50cnkpIHsKIAkJCQlzdHJ1Y3QgaW5vZGUqIHNfaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJCQkJCi0JCQkJaWYgKGlub2RlKSB7CisJCQkJaWYgKHNfaW5vZGUpIHsKIAkJCQkJTkNQX0ZJTkZPKHNfaW5vZGUpLT52b2xOdW1iZXIgPSB2bnVtOwogCQkJCQlOQ1BfRklORk8oc19pbm9kZSktPmRpckVudE51bSA9IGRlOwogCQkJCQlOQ1BfRklORk8oc19pbm9kZSktPkRvc0Rpck51bSA9IGRvc2RlOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCmluZGV4IGU1YTJkYWMuLjc2YjBhYTAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFja194ZHIuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAJcCA9IHJlYWRfYnVmKHhkciwgbGVuKTsKIAlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKLQkJcmV0dXJuIGh0b25sKE5GUzRFUlJfUkVTT1VSQ0UpOzsKKwkJcmV0dXJuIGh0b25sKE5GUzRFUlJfUkVTT1VSQ0UpOwogCiAJbWVtY3B5KHNpZC0+ZGF0YSwgcCwgbGVuKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCBlMzUwYmQ2Li4xNTIwMjUzIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC05MzMsMTAgKzkzMyw2IEBACiAJCWdvdG8gb3V0X2Vycm9yOwogCiAJbmZzX3NlcnZlcl9zZXRfZnNpbmZvKHNlcnZlciwgJmZzaW5mbyk7Ci0JZXJyb3IgPSBiZGlfaW5pdCgmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2Vycm9yOwotCiAKIAkvKiBHZXQgc29tZSBnZW5lcmFsIGZpbGUgc3lzdGVtIGluZm8gKi8KIAlpZiAoc2VydmVyLT5uYW1lbGVuID09IDApIHsKQEAgLTk5NSw2ICs5OTEsMTIgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGJkaV9pbml0KCZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8pKSB7CisJCW5mc19mcmVlX2lvc3RhdHMoc2VydmVyLT5pb19zdGF0cyk7CisJCWtmcmVlKHNlcnZlcik7CisJCXJldHVybiBOVUxMOworCX0KKwogCXJldHVybiBzZXJ2ZXI7CiB9CiAKQEAgLTE1MjksNyArMTUzMSw3IEBACiBzdGF0aWMgdm9pZCBuZnNfc2VydmVyX2xpc3Rfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpOwogc3RhdGljIGludCBuZnNfc2VydmVyX2xpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpOwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mc19zZXJ2ZXJfbGlzdF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mc19zZXJ2ZXJfbGlzdF9vcHMgPSB7CiAJLnN0YXJ0CT0gbmZzX3NlcnZlcl9saXN0X3N0YXJ0LAogCS5uZXh0CT0gbmZzX3NlcnZlcl9saXN0X25leHQsCiAJLnN0b3AJPSBuZnNfc2VydmVyX2xpc3Rfc3RvcCwKQEAgLTE1NTAsNyArMTU1Miw3IEBACiBzdGF0aWMgdm9pZCBuZnNfdm9sdW1lX2xpc3Rfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpOwogc3RhdGljIGludCBuZnNfdm9sdW1lX2xpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpOwogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mc192b2x1bWVfbGlzdF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mc192b2x1bWVfbGlzdF9vcHMgPSB7CiAJLnN0YXJ0CT0gbmZzX3ZvbHVtZV9saXN0X3N0YXJ0LAogCS5uZXh0CT0gbmZzX3ZvbHVtZV9saXN0X25leHQsCiAJLnN0b3AJPSBuZnNfdm9sdW1lX2xpc3Rfc3RvcCwKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAxNDM0MDgwLi4yZWY0ZmVjIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC02MzgsNyArNjM4LDcgQEAKIAluZnM0X3B1dF9sb2NrX3N0YXRlKGZsLT5mbF91Lm5mczRfZmwub3duZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfbG9ja19vcGVyYXRpb25zIG5mczRfZmxfbG9ja19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfbG9ja19vcGVyYXRpb25zIG5mczRfZmxfbG9ja19vcHMgPSB7CiAJLmZsX2NvcHlfbG9jayA9IG5mczRfZmxfY29weV9sb2NrLAogCS5mbF9yZWxlYXNlX3ByaXZhdGUgPSBuZnM0X2ZsX3JlbGVhc2VfbG9jaywKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IGRlOTM1NjkuLmYxY2MwNTggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC0yMTkwLDggKzIxOTAsOCBAQAogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Iocyk7CiAKLQliZGlfdW5yZWdpc3Rlcigmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsKIAlraWxsX2Fub25fc3VwZXIocyk7CisJYmRpX3VucmVnaXN0ZXIoJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbyk7CiAJbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUocyk7CiAJbmZzX2ZyZWVfc2VydmVyKHNlcnZlcik7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL2V4cG9ydC5jIGIvZnMvbmZzZC9leHBvcnQuYwppbmRleCBkOTQ2MjY0Li5jMWM5ZTAzIDEwMDY0NAotLS0gYS9mcy9uZnNkL2V4cG9ydC5jCisrKyBiL2ZzL25mc2QvZXhwb3J0LmMKQEAgLTEzNDEsNiArMTM0MSw4IEBACiAJaWYgKHJ2KQogCQlnb3RvIG91dDsKIAlydiA9IGNoZWNrX25mc2RfYWNjZXNzKGV4cCwgcnFzdHApOworCWlmIChydikKKwkJZmhfcHV0KGZocCk7CiBvdXQ6CiAJZXhwX3B1dChleHApOwogCXJldHVybiBydjsKQEAgLTE1MTUsNyArMTUxNyw3IEBACiAJcmV0dXJuIHN2Y19leHBvcnRfc2hvdyhtLCAmc3ZjX2V4cG9ydF9jYWNoZSwgY3ApOwogfQogCi1zdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX2V4cG9ydHNfb3AgPSB7Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX2V4cG9ydHNfb3AgPSB7CiAJLnN0YXJ0CT0gZV9zdGFydCwKIAkubmV4dAk9IGVfbmV4dCwKIAkuc3RvcAk9IGVfc3RvcCwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3hkci5jIGIvZnMvbmZzZC9uZnMzeGRyLmMKaW5kZXggMDFkNGVjMS4uZWRmOTI2ZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzeGRyLmMKKysrIGIvZnMvbmZzZC9uZnMzeGRyLmMKQEAgLTgxNCwxNyArODE0LDYgQEAKIAlyZXR1cm4gcDsKIH0KIAotc3RhdGljIF9fYmUzMiAqCi1lbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2Uoc3RydWN0IG5mc2QzX3JlYWRkaXJyZXMgKmNkLCBfX2JlMzIgKnAsCi0JCXN0cnVjdCBzdmNfZmggKmZocCkKLXsKLQlwID0gZW5jb2RlX3Bvc3Rfb3BfYXR0cihjZC0+cnFzdHAsIHAsIGZocCk7Ci0JKnArKyA9IHhkcl9vbmU7CQkJLyogeWVzLCBhIGZpbGUgaGFuZGxlIGZvbGxvd3MgKi8KLQlwID0gZW5jb2RlX2ZoKHAsIGZocCk7Ci0JZmhfcHV0KGZocCk7Ci0JcmV0dXJuIHA7Ci19Ci0KIHN0YXRpYyBpbnQKIGNvbXBvc2VfZW50cnlfZmgoc3RydWN0IG5mc2QzX3JlYWRkaXJyZXMgKmNkLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsCiAJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4pCkBAIC04MzYsMjkgKzgyNSw1NCBAQAogCWRwYXJlbnQgPSBjZC0+ZmguZmhfZGVudHJ5OwogCWV4cCAgPSBjZC0+ZmguZmhfZXhwb3J0OwogCi0JZmhfaW5pdChmaHAsIE5GUzNfRkhTSVpFKTsKIAlpZiAoaXNkb3RlbnQobmFtZSwgbmFtbGVuKSkgewogCQlpZiAobmFtbGVuID09IDIpIHsKIAkJCWRjaGlsZCA9IGRnZXRfcGFyZW50KGRwYXJlbnQpOwogCQkJaWYgKGRjaGlsZCA9PSBkcGFyZW50KSB7CiAJCQkJLyogZmlsZXN5c3RlbSByb290IC0gY2Fubm90IHJldHVybiBmaWxlaGFuZGxlIGZvciAiLi4iICovCiAJCQkJZHB1dChkY2hpbGQpOwotCQkJCXJldHVybiAxOworCQkJCXJldHVybiAtRU5PRU5UOwogCQkJfQogCQl9IGVsc2UKIAkJCWRjaGlsZCA9IGRnZXQoZHBhcmVudCk7CiAJfSBlbHNlCiAJCWRjaGlsZCA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIGRwYXJlbnQsIG5hbWxlbik7CiAJaWYgKElTX0VSUihkY2hpbGQpKQotCQlyZXR1cm4gMTsKLQlpZiAoZF9tb3VudHBvaW50KGRjaGlsZCkgfHwKLQkgICAgZmhfY29tcG9zZShmaHAsIGV4cCwgZGNoaWxkLCAmY2QtPmZoKSAhPSAwIHx8Ci0JICAgICFkY2hpbGQtPmRfaW5vZGUpCi0JCXJ2ID0gMTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcnYgPSAtRU5PRU5UOworCWlmIChkX21vdW50cG9pbnQoZGNoaWxkKSkKKwkJZ290byBvdXQ7CisJcnYgPSBmaF9jb21wb3NlKGZocCwgZXhwLCBkY2hpbGQsICZjZC0+ZmgpOworCWlmIChydikKKwkJZ290byBvdXQ7CisJaWYgKCFkY2hpbGQtPmRfaW5vZGUpCisJCWdvdG8gb3V0OworCXJ2ID0gMDsKK291dDoKIAlkcHV0KGRjaGlsZCk7CiAJcmV0dXJuIHJ2OwogfQogCitfX2JlMzIgKmVuY29kZV9lbnRyeXBsdXNfYmFnZ2FnZShzdHJ1Y3QgbmZzZDNfcmVhZGRpcnJlcyAqY2QsIF9fYmUzMiAqcCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWxlbikKK3sKKwlzdHJ1Y3Qgc3ZjX2ZoCWZoOworCWludCBlcnI7CisKKwlmaF9pbml0KCZmaCwgTkZTM19GSFNJWkUpOworCWVyciA9IGNvbXBvc2VfZW50cnlfZmgoY2QsICZmaCwgbmFtZSwgbmFtbGVuKTsKKwlpZiAoZXJyKSB7CisJCSpwKysgPSAwOworCQkqcCsrID0gMDsKKwkJZ290byBvdXQ7CisJfQorCXAgPSBlbmNvZGVfcG9zdF9vcF9hdHRyKGNkLT5ycXN0cCwgcCwgJmZoKTsKKwkqcCsrID0geGRyX29uZTsJCQkvKiB5ZXMsIGEgZmlsZSBoYW5kbGUgZm9sbG93cyAqLworCXAgPSBlbmNvZGVfZmgocCwgJmZoKTsKK291dDoKKwlmaF9wdXQoJmZoKTsKKwlyZXR1cm4gcDsKK30KKwogLyoKICAqIEVuY29kZSBhIGRpcmVjdG9yeSBlbnRyeS4gVGhpcyBvbmUgd29ya3MgZm9yIGJvdGggbm9ybWFsIHJlYWRkaXIKICAqIGFuZCByZWFkZGlycGx1cy4KQEAgLTkyOSwxNiArOTQzLDggQEAKIAogCQlwID0gZW5jb2RlX2VudHJ5X2JhZ2dhZ2UoY2QsIHAsIG5hbWUsIG5hbWxlbiwgaW5vKTsKIAotCQkvKiB0aHJvdyBpbiByZWFkZGlycGx1cyBiYWdnYWdlICovCi0JCWlmIChwbHVzKSB7Ci0JCQlzdHJ1Y3Qgc3ZjX2ZoCWZoOwotCi0JCQlpZiAoY29tcG9zZV9lbnRyeV9maChjZCwgJmZoLCBuYW1lLCBuYW1sZW4pID4gMCkgewotCQkJCSpwKysgPSAwOwotCQkJCSpwKysgPSAwOwotCQkJfSBlbHNlCi0JCQkJcCA9IGVuY29kZV9lbnRyeXBsdXNfYmFnZ2FnZShjZCwgcCwgJmZoKTsKLQkJfQorCQlpZiAocGx1cykKKwkJCXAgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAsIG5hbWUsIG5hbWxlbik7CiAJCW51bV9lbnRyeV93b3JkcyA9IHAgLSBjZC0+YnVmZmVyOwogCX0gZWxzZSBpZiAoY2QtPnJxc3RwLT5ycV9yZXNwYWdlc1twbisxXSAhPSBOVUxMKSB7CiAJCS8qIHRlbXBvcmFyaWx5IGVuY29kZSBlbnRyeSBpbnRvIG5leHQgcGFnZSwgdGhlbiBtb3ZlIGJhY2sgdG8KQEAgLTk1MSwxNyArOTU3LDggQEAKIAogCQlwMSA9IGVuY29kZV9lbnRyeV9iYWdnYWdlKGNkLCBwMSwgbmFtZSwgbmFtbGVuLCBpbm8pOwogCi0JCS8qIHRocm93IGluIHJlYWRkaXJwbHVzIGJhZ2dhZ2UgKi8KLQkJaWYgKHBsdXMpIHsKLQkJCXN0cnVjdCBzdmNfZmgJZmg7Ci0KLQkJCWlmIChjb21wb3NlX2VudHJ5X2ZoKGNkLCAmZmgsIG5hbWUsIG5hbWxlbikgPiAwKSB7Ci0JCQkJLyogemVybyBvdXQgdGhlIGZpbGVoYW5kbGUgKi8KLQkJCQkqcDErKyA9IDA7Ci0JCQkJKnAxKysgPSAwOwotCQkJfSBlbHNlCi0JCQkJcDEgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCAmZmgpOwotCQl9CisJCWlmIChwbHVzKQorCQkJcCA9IGVuY29kZV9lbnRyeXBsdXNfYmFnZ2FnZShjZCwgcDEsIG5hbWUsIG5hbWxlbik7CiAKIAkJLyogZGV0ZXJtaW5lIGVudHJ5IHdvcmQgbGVuZ3RoIGFuZCBsZW5ndGhzIHRvIGdvIGluIHBhZ2VzICovCiAJCW51bV9lbnRyeV93b3JkcyA9IHAxIC0gdG1wOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0YWNsLmMgYi9mcy9uZnNkL25mczRhY2wuYwppbmRleCA1NGI4YjQxLi43MjVkMDJmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRhY2wuYworKysgYi9mcy9uZnNkL25mczRhY2wuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJZGVueSA9IH5wYXMuZ3JvdXAgJiBwYXMub3RoZXI7CiAJaWYgKGRlbnkpIHsKIAkJYWNlLT50eXBlID0gTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRTsKLQkJYWNlLT5mbGFnID0gZWZsYWcgfCBORlM0X0FDRV9JREVOVElGSUVSX0dST1VQOworCQlhY2UtPmZsYWcgPSBlZmxhZzsKIAkJYWNlLT5hY2Nlc3NfbWFzayA9IGRlbnlfbWFza19mcm9tX3Bvc2l4KGRlbnksIGZsYWdzKTsKIAkJYWNlLT53aG90eXBlID0gTkZTNF9BQ0xfV0hPX0dST1VQOwogCQlhY2UrKzsKQEAgLTMzNSw3ICszMzUsNyBAQAogCQlpZiAoZGVueSkgewogCQkJYWNlLT50eXBlID0gTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRTsKIAkJCWFjZS0+ZmxhZyA9IGVmbGFnIHwgTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUDsKLQkJCWFjZS0+YWNjZXNzX21hc2sgPSBtYXNrX2Zyb21fcG9zaXgoZGVueSwgZmxhZ3MpOworCQkJYWNlLT5hY2Nlc3NfbWFzayA9IGRlbnlfbWFza19mcm9tX3Bvc2l4KGRlbnksIGZsYWdzKTsKIAkJCWFjZS0+d2hvdHlwZSA9IE5GUzRfQUNMX1dIT19OQU1FRDsKIAkJCWFjZS0+d2hvID0gcGEtPmVfaWQ7CiAJCQlhY2UrKzsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCmluZGV4IDNmZDIzZjcuLjI0ZThkNzggMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKKysrIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwpAQCAtNDMsMjUgKzQzLDMwIEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzZC9zdGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydHNvY2suaD4KIAogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZICAgICAgICAgICAgICAgIE5GU0REQkdfUFJPQwogCiAjZGVmaW5lIE5GU1BST0M0X0NCX05VTEwgMAogI2RlZmluZSBORlNQUk9DNF9DQl9DT01QT1VORCAxCisjZGVmaW5lIE5GUzRfU1RBVEVJRF9TSVpFIDE2CiAKIC8qIEluZGV4IG9mIHByZWRlZmluZWQgTGludXggY2FsbGJhY2sgY2xpZW50IG9wZXJhdGlvbnMgKi8KIAogZW51bSB7Ci0gICAgICAgIE5GU1BST0M0X0NMTlRfQ0JfTlVMTCA9IDAsCisJTkZTUFJPQzRfQ0xOVF9DQl9OVUxMID0gMCwKIAlORlNQUk9DNF9DTE5UX0NCX1JFQ0FMTCwKKwlORlNQUk9DNF9DTE5UX0NCX1NFUVVFTkNFLAogfTsKIAogZW51bSBuZnNfY2Jfb3BudW00IHsKIAlPUF9DQl9SRUNBTEwgICAgICAgICAgICA9IDQsCisJT1BfQ0JfU0VRVUVOQ0UgICAgICAgICAgPSAxMSwKIH07CiAKICNkZWZpbmUgTkZTNF9NQVhUQUdMRU4JCTIwCkBAIC03MCwxNyArNzUsMjkgQEAKICNkZWZpbmUgTkZTNF9kZWNfY2JfbnVsbF9zegkJMAogI2RlZmluZSBjYl9jb21wb3VuZF9lbmNfaGRyX3N6CQk0CiAjZGVmaW5lIGNiX2NvbXBvdW5kX2RlY19oZHJfc3oJCSgzICsgKE5GUzRfTUFYVEFHTEVOID4+IDIpKQorI2RlZmluZSBzZXNzaW9uaWRfc3oJCQkoTkZTNF9NQVhfU0VTU0lPTklEX0xFTiA+PiAyKQorI2RlZmluZSBjYl9zZXF1ZW5jZV9lbmNfc3oJCShzZXNzaW9uaWRfc3ogKyA0ICsgICAgICAgICAgICAgXAorCQkJCQkxIC8qIG5vIHJlZmVycmluZyBjYWxscyBsaXN0IHlldCAqLykKKyNkZWZpbmUgY2Jfc2VxdWVuY2VfZGVjX3N6CQkob3BfZGVjX3N6ICsgc2Vzc2lvbmlkX3N6ICsgNCkKKwogI2RlZmluZSBvcF9lbmNfc3oJCQkxCiAjZGVmaW5lIG9wX2RlY19zegkJCTIKICNkZWZpbmUgZW5jX25mczRfZmhfc3oJCQkoMSArIChORlM0X0ZIU0laRSA+PiAyKSkKICNkZWZpbmUgZW5jX3N0YXRlaWRfc3oJCQkoTkZTNF9TVEFURUlEX1NJWkUgPj4gMikKICNkZWZpbmUgTkZTNF9lbmNfY2JfcmVjYWxsX3N6CQkoY2JfY29tcG91bmRfZW5jX2hkcl9zeiArICAgICAgIFwKKwkJCQkJY2Jfc2VxdWVuY2VfZW5jX3N6ICsgICAgICAgICAgICBcCiAJCQkJCTEgKyBlbmNfc3RhdGVpZF9zeiArICAgICAgICAgICAgXAogCQkJCQllbmNfbmZzNF9maF9zeikKIAogI2RlZmluZSBORlM0X2RlY19jYl9yZWNhbGxfc3oJCShjYl9jb21wb3VuZF9kZWNfaGRyX3N6ICArICAgICAgXAorCQkJCQljYl9zZXF1ZW5jZV9kZWNfc3ogKyAgICAgICAgICAgIFwKIAkJCQkJb3BfZGVjX3N6KQogCitzdHJ1Y3QgbmZzNF9ycGNfYXJncyB7CisJdm9pZAkJCQkqYXJnc19vcDsKKwlzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UJYXJnc19zZXE7Cit9OworCiAvKgogKiBHZW5lcmljIGVuY29kZSByb3V0aW5lcyBmcm9tIGZzL25mcy9uZnM0eGRyLmMKICovCkBAIC0xMzcsMTEgKzE1NCwxMyBAQAogfSB3aGlsZSAoMCkKIAogc3RydWN0IG5mczRfY2JfY29tcG91bmRfaGRyIHsKLQlpbnQJCXN0YXR1czsKLQl1MzIJCWlkZW50OworCS8qIGFyZ3MgKi8KKwl1MzIJCWlkZW50OwkvKiBtaW5vcnZlcnNpb24gMCBvbmx5ICovCiAJdTMyCQlub3BzOwogCV9fYmUzMgkJKm5vcHNfcDsKIAl1MzIJCW1pbm9ydmVyc2lvbjsKKwkvKiByZXMgKi8KKwlpbnQJCXN0YXR1czsKIAl1MzIJCXRhZ2xlbjsKIAljaGFyCQkqdGFnOwogfTsKQEAgLTIzOCw2ICsyNTcsMjcgQEAKIAloZHItPm5vcHMrKzsKIH0KIAorc3RhdGljIHZvaWQKK2VuY29kZV9jYl9zZXF1ZW5jZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgKmFyZ3MsCisJCSAgIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKQoreworCV9fYmUzMiAqcDsKKworCWlmIChoZHItPm1pbm9ydmVyc2lvbiA9PSAwKQorCQlyZXR1cm47CisKKwlSRVNFUlZFX1NQQUNFKDEgKyBORlM0X01BWF9TRVNTSU9OSURfTEVOICsgMjApOworCisJV1JJVEUzMihPUF9DQl9TRVFVRU5DRSk7CisJV1JJVEVNRU0oYXJncy0+Y2JzX2NscC0+Y2xfc2Vzc2lvbmlkLmRhdGEsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pOworCVdSSVRFMzIoYXJncy0+Y2JzX2NscC0+Y2xfY2Jfc2VxX25yKTsKKwlXUklURTMyKDApOwkJLyogc2xvdGlkLCBhbHdheXMgMCAqLworCVdSSVRFMzIoMCk7CQkvKiBoaWdoZXN0IHNsb3RpZCBhbHdheXMgMCAqLworCVdSSVRFMzIoMCk7CQkvKiBjYWNoZXRoaXMgYWx3YXlzIDAgKi8KKwlXUklURTMyKDApOyAvKiBGSVhNRTogc3VwcG9ydCByZWZlcnJpbmdfY2FsbF9saXN0cyAqLworCWhkci0+bm9wcysrOworfQorCiBzdGF0aWMgaW50CiBuZnM0X3hkcl9lbmNfY2JfbnVsbChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwKQogewpAQCAtMjQ5LDE1ICsyODksMTkgQEAKIH0KIAogc3RhdGljIGludAotbmZzNF94ZHJfZW5jX2NiX3JlY2FsbChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICphcmdzKQorbmZzNF94ZHJfZW5jX2NiX3JlY2FsbChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAorCQlzdHJ1Y3QgbmZzNF9ycGNfYXJncyAqcnBjX2FyZ3MpCiB7CiAJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmFyZ3MgPSBycGNfYXJncy0+YXJnc19vcDsKIAlzdHJ1Y3QgbmZzNF9jYl9jb21wb3VuZF9oZHIgaGRyID0gewogCQkuaWRlbnQgPSBhcmdzLT5kbF9pZGVudCwKKwkJLm1pbm9ydmVyc2lvbiA9IHJwY19hcmdzLT5hcmdzX3NlcS5jYnNfbWlub3J2ZXJzaW9uLAogCX07CiAKIAl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7CiAJZW5jb2RlX2NiX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwllbmNvZGVfY2Jfc2VxdWVuY2UoJnhkciwgJnJwY19hcmdzLT5hcmdzX3NlcSwgJmhkcik7CiAJZW5jb2RlX2NiX3JlY2FsbCgmeGRyLCBhcmdzLCAmaGRyKTsKIAllbmNvZGVfY2Jfbm9wcygmaGRyKTsKIAlyZXR1cm4gMDsKQEAgLTI5OSw2ICszNDMsNTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIE91ciBjdXJyZW50IGJhY2sgY2hhbm5lbCBpbXBsbWVudGF0aW9uIHN1cHBvcnRzIGEgc2luZ2xlIGJhY2tjaGFubmVsCisgKiB3aXRoIGEgc2luZ2xlIHNsb3QuCisgKi8KK3N0YXRpYyBpbnQKK2RlY29kZV9jYl9zZXF1ZW5jZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgKnJlcywKKwkJICAgc3RydWN0IHJwY19ycXN0ICpycXN0cCkKK3sKKwlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgaWQ7CisJaW50IHN0YXR1czsKKwl1MzIgZHVtbXk7CisJX19iZTMyICpwOworCisJaWYgKHJlcy0+Y2JzX21pbm9ydmVyc2lvbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IGRlY29kZV9jYl9vcF9oZHIoeGRyLCBPUF9DQl9TRVFVRU5DRSk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qCisJICogSWYgdGhlIHNlcnZlciByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHNlc3Npb25JRCwgc2xvdElEIG9yCisJICogc2VxdWVuY2UgbnVtYmVyLCB0aGUgc2VydmVyIGlzIGxvb25leSB0dW5lcy4KKwkgKi8KKwlzdGF0dXMgPSAtRVNFUlZFUkZBVUxUOworCisJUkVBRF9CVUYoTkZTNF9NQVhfU0VTU0lPTklEX0xFTiArIDE2KTsKKwltZW1jcHkoaWQuZGF0YSwgcCwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7CisJcCArPSBYRFJfUVVBRExFTihORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKKwlpZiAobWVtY21wKGlkLmRhdGEsIHJlcy0+Y2JzX2NscC0+Y2xfc2Vzc2lvbmlkLmRhdGEsCisJCSAgIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKSB7CisJCWRwcmludGsoIiVzIEludmFsaWQgc2Vzc2lvbiBpZFxuIiwgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJUkVBRDMyKGR1bW15KTsKKwlpZiAoZHVtbXkgIT0gcmVzLT5jYnNfY2xwLT5jbF9jYl9zZXFfbnIpIHsKKwkJZHByaW50aygiJXMgSW52YWxpZCBzZXF1ZW5jZSBudW1iZXJcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCVJFQUQzMihkdW1teSk7IAkvKiBzbG90aWQgbXVzdCBiZSAwICovCisJaWYgKGR1bW15ICE9IDApIHsKKwkJZHByaW50aygiJXMgSW52YWxpZCBzbG90aWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIEZJWE1FOiBwcm9jZXNzIGhpZ2hlc3Qgc2xvdGlkIGFuZCB0YXJnZXQgaGlnaGVzdCBzbG90aWQgKi8KKwlzdGF0dXMgPSAwOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKwogc3RhdGljIGludAogbmZzNF94ZHJfZGVjX2NiX251bGwoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCkKIHsKQEAgLTMwNiw3ICs0MDEsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1uZnM0X3hkcl9kZWNfY2JfcmVjYWxsKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCkKK25mczRfeGRyX2RlY19jYl9yZWNhbGwoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLAorCQlzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgKnNlcSkKIHsKIAlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IG5mczRfY2JfY29tcG91bmRfaGRyIGhkcjsKQEAgLTMxNiw2ICs0MTIsMTEgQEAKIAlzdGF0dXMgPSBkZWNvZGVfY2JfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OworCWlmIChzZXEpIHsKKwkJc3RhdHVzID0gZGVjb2RlX2NiX3NlcXVlbmNlKCZ4ZHIsIHNlcSwgcnFzdHApOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBvdXQ7CisJfQogCXN0YXR1cyA9IGRlY29kZV9jYl9vcF9oZHIoJnhkciwgT1BfQ0JfUkVDQUxMKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzc3LDE2ICs0NzgsMTUgQEAKIAogaW50IHNldHVwX2NhbGxiYWNrX2NsaWVudChzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4JYWRkcjsKIAlzdHJ1Y3QgbmZzNF9jYl9jb25uICpjYiA9ICZjbHAtPmNsX2NiX2Nvbm47CiAJc3RydWN0IHJwY190aW1lb3V0CXRpbWVwYXJtcyA9IHsKIAkJLnRvX2luaXR2YWwJPSBtYXhfY2JfdGltZSgpLAogCQkudG9fcmV0cmllcwk9IDAsCiAJfTsKIAlzdHJ1Y3QgcnBjX2NyZWF0ZV9hcmdzIGFyZ3MgPSB7Ci0JCS5wcm90b2NvbAk9IElQUFJPVE9fVENQLAotCQkuYWRkcmVzcwk9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKLQkJLmFkZHJzaXplCT0gc2l6ZW9mKGFkZHIpLAorCQkucHJvdG9jb2wJPSBYUFJUX1RSQU5TUE9SVF9UQ1AsCisJCS5hZGRyZXNzCT0gKHN0cnVjdCBzb2NrYWRkciAqKSAmY2ItPmNiX2FkZHIsCisJCS5hZGRyc2l6ZQk9IGNiLT5jYl9hZGRybGVuLAogCQkudGltZW91dAk9ICZ0aW1lcGFybXMsCiAJCS5wcm9ncmFtCT0gJmNiX3Byb2dyYW0sCiAJCS5wcm9nbnVtYmVyCT0gY2ItPmNiX3Byb2csCkBAIC0zOTksMTMgKzQ5OSwxMCBAQAogCiAJaWYgKCFjbHAtPmNsX3ByaW5jaXBhbCAmJiAoY2xwLT5jbF9mbGF2b3IgPj0gUlBDX0FVVEhfR1NTX0tSQjUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEluaXRpYWxpemUgYWRkcmVzcyAqLwotCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKLQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWFkZHIuc2luX3BvcnQgPSBodG9ucyhjYi0+Y2JfcG9ydCk7Ci0JYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChjYi0+Y2JfYWRkcik7Ci0KKwlpZiAoY2ItPmNiX21pbm9ydmVyc2lvbikgeworCQlhcmdzLmJjX3hwcnQgPSBjbHAtPmNsX2NiX3hwcnQ7CisJCWFyZ3MucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9CQ19UQ1A7CisJfQogCS8qIENyZWF0ZSBSUEMgY2xpZW50ICovCiAJY2xpZW50ID0gcnBjX2NyZWF0ZSgmYXJncyk7CiAJaWYgKElTX0VSUihjbGllbnQpKSB7CkBAIC00MzksNDIgKzUzNiwyOSBAQAogCS5ycGNfY2FsbF9kb25lID0gbmZzZDRfY2JfcHJvYmVfZG9uZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX2NyZWQgKmxvb2t1cF9jYl9jcmVkKHN0cnVjdCBuZnM0X2NiX2Nvbm4gKmNiKQotewotCXN0cnVjdCBhdXRoX2NyZWQgYWNyZWQgPSB7Ci0JCS5tYWNoaW5lX2NyZWQgPSAxCi0JfTsKK3N0YXRpYyBzdHJ1Y3QgcnBjX2NyZWQgKmNhbGxiYWNrX2NyZWQ7CiAKLQkvKgotCSAqIE5vdGUgaW4gdGhlIGdzcyBjYXNlIHRoaXMgZG9lc24ndCBhY3R1YWxseSBoYXZlIHRvIHdhaXQgZm9yIGEKLQkgKiBnc3MgdXBjYWxsIChvciBhbnkgY2FsbHMgdG8gdGhlIGNsaWVudCk7IHRoaXMganVzdCBjcmVhdGVzIGEKLQkgKiBub24tdXB0b2RhdGUgY3JlZCB3aGljaCB0aGUgcnBjIHN0YXRlIG1hY2hpbmUgd2lsbCBmaWxsIGluIHdpdGgKLQkgKiBhIHJlZnJlc2hfdXBjYWxsIGxhdGVyLgotCSAqLwotCXJldHVybiBycGNhdXRoX2xvb2t1cF9jcmVkY2FjaGUoY2ItPmNiX2NsaWVudC0+Y2xfYXV0aCwgJmFjcmVkLAotCQkJCQkJCVJQQ0FVVEhfTE9PS1VQX05FVyk7CitpbnQgc2V0X2NhbGxiYWNrX2NyZWQodm9pZCkKK3sKKwljYWxsYmFja19jcmVkID0gcnBjX2xvb2t1cF9tYWNoaW5lX2NyZWQoKTsKKwlpZiAoIWNhbGxiYWNrX2NyZWQpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOwogfQogCisKIHZvaWQgZG9fcHJvYmVfY2FsbGJhY2soc3RydWN0IG5mczRfY2xpZW50ICpjbHApCiB7CiAJc3RydWN0IG5mczRfY2JfY29ubiAqY2IgPSAmY2xwLT5jbF9jYl9jb25uOwogCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CiAJCS5ycGNfcHJvYyAgICAgICA9ICZuZnM0X2NiX3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9DQl9OVUxMXSwKIAkJLnJwY19hcmdwICAgICAgID0gY2xwLAorCQkucnBjX2NyZWQJPSBjYWxsYmFja19jcmVkCiAJfTsKLQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CiAJaW50IHN0YXR1czsKIAotCWNyZWQgPSBsb29rdXBfY2JfY3JlZChjYik7Ci0JaWYgKElTX0VSUihjcmVkKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKGNyZWQpOwotCQlnb3RvIG91dDsKLQl9Ci0JY2ItPmNiX2NyZWQgPSBjcmVkOwotCW1zZy5ycGNfY3JlZCA9IGNiLT5jYl9jcmVkOwogCXN0YXR1cyA9IHJwY19jYWxsX2FzeW5jKGNiLT5jYl9jbGllbnQsICZtc2csIFJQQ19UQVNLX1NPRlQsCiAJCQkJJm5mc2Q0X2NiX3Byb2JlX29wcywgKHZvaWQgKiljbHApOwotb3V0OgogCWlmIChzdGF0dXMpIHsKIAkJd2Fybl9ub19jYWxsYmFja19wYXRoKGNscCwgc3RhdHVzKTsKIAkJcHV0X25mczRfY2xpZW50KGNscCk7CkBAIC01MDMsMTEgKzU4Nyw5NSBAQAogCWRvX3Byb2JlX2NhbGxiYWNrKGNscCk7CiB9CiAKKy8qCisgKiBUaGVyZSdzIGN1cnJlbnRseSBhIHNpbmdsZSBjYWxsYmFjayBjaGFubmVsIHNsb3QuCisgKiBJZiB0aGUgc2xvdCBpcyBhdmFpbGFibGUsIHRoZW4gbWFyayBpdCBidXN5LiAgT3RoZXJ3aXNlLCBzZXQgdGhlCisgKiB0aHJlYWQgZm9yIHNsZWVwaW5nIG9uIHRoZSBjYWxsYmFjayBSUEMgd2FpdCBxdWV1ZS4KKyAqLworc3RhdGljIGludCBuZnNkNDFfY2Jfc2V0dXBfc2VxdWVuY2Uoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsCisJCXN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgbmZzNF9ycGNfYXJncyAqYXJncyA9IHRhc2stPnRrX21zZy5ycGNfYXJncDsKKwl1MzIgKnB0ciA9ICh1MzIgKiljbHAtPmNsX3Nlc3Npb25pZC5kYXRhOworCWludCBzdGF0dXMgPSAwOworCisJZHByaW50aygiJXM6ICV1OiV1OiV1OiV1XG4iLCBfX2Z1bmNfXywKKwkJcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdKTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZjbHAtPmNsX2NiX3Nsb3RfYnVzeSkgIT0gMCkgeworCQlycGNfc2xlZXBfb24oJmNscC0+Y2xfY2Jfd2FpdHEsIHRhc2ssIE5VTEwpOworCQlkcHJpbnRrKCIlcyBzbG90IGlzIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBXZSdsbCBuZWVkIHRoZSBjbHAgZHVyaW5nIFhEUiBlbmNvZGluZyBhbmQgZGVjb2RpbmcsCisJICogYW5kIHRoZSBzZXF1ZW5jZSBkdXJpbmcgZGVjb2RpbmcgdG8gdmVyaWZ5IHRoZSByZXBseQorCSAqLworCWFyZ3MtPmFyZ3Nfc2VxLmNic19jbHAgPSBjbHA7CisJdGFzay0+dGtfbXNnLnJwY19yZXNwID0gJmFyZ3MtPmFyZ3Nfc2VxOworCitvdXQ6CisJZHByaW50aygiJXMgc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogVE9ETzogY2Jfc2VxdWVuY2Ugc2hvdWxkIHN1cHBvcnQgcmVmZXJyaW5nIGNhbGwgbGlzdHMsIGNhY2hldGhpcywgbXVsdGlwbGUKKyAqIHNsb3RzLCBhbmQgbWFyayBjYWxsYmFjayBjaGFubmVsIGRvd24gb24gY29tbXVuaWNhdGlvbiBlcnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkIG5mc2Q0X2NiX3ByZXBhcmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpjYWxsZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IGNhbGxkYXRhOworCXN0cnVjdCBuZnM0X2NsaWVudCAqY2xwID0gZHAtPmRsX2NsaWVudDsKKwlzdHJ1Y3QgbmZzNF9ycGNfYXJncyAqYXJncyA9IHRhc2stPnRrX21zZy5ycGNfYXJncDsKKwl1MzIgbWlub3J2ZXJzaW9uID0gY2xwLT5jbF9jYl9jb25uLmNiX21pbm9ydmVyc2lvbjsKKwlpbnQgc3RhdHVzID0gMDsKKworCWFyZ3MtPmFyZ3Nfc2VxLmNic19taW5vcnZlcnNpb24gPSBtaW5vcnZlcnNpb247CisJaWYgKG1pbm9ydmVyc2lvbikgeworCQlzdGF0dXMgPSBuZnNkNDFfY2Jfc2V0dXBfc2VxdWVuY2UoY2xwLCB0YXNrKTsKKwkJaWYgKHN0YXR1cykgeworCQkJaWYgKHN0YXR1cyAhPSAtRUFHQUlOKSB7CisJCQkJLyogdGVybWluYXRlIHJwYyB0YXNrICovCisJCQkJdGFzay0+dGtfc3RhdHVzID0gc3RhdHVzOworCQkJCXRhc2stPnRrX2FjdGlvbiA9IE5VTEw7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9CisJcnBjX2NhbGxfc3RhcnQodGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG5mc2Q0X2NiX2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpjYWxsZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IGNhbGxkYXRhOworCXN0cnVjdCBuZnM0X2NsaWVudCAqY2xwID0gZHAtPmRsX2NsaWVudDsKKworCWRwcmludGsoIiVzOiBtaW5vcnZlcnNpb249JWRcbiIsIF9fZnVuY19fLAorCQljbHAtPmNsX2NiX2Nvbm4uY2JfbWlub3J2ZXJzaW9uKTsKKworCWlmIChjbHAtPmNsX2NiX2Nvbm4uY2JfbWlub3J2ZXJzaW9uKSB7CisJCS8qIE5vIG5lZWQgZm9yIGxvY2ssIGFjY2VzcyBzZXJpYWxpemVkIGluIG5mc2Q0X2NiX3ByZXBhcmUgKi8KKwkJKytjbHAtPmNsX2NiX3NlcV9ucjsKKwkJY2xlYXJfYml0KDAsICZjbHAtPmNsX2NiX3Nsb3RfYnVzeSk7CisJCXJwY193YWtlX3VwX25leHQoJmNscC0+Y2xfY2Jfd2FpdHEpOworCQlkcHJpbnRrKCIlczogZnJlZWQgc2xvdCwgbmV3IHNlcWlkPSVkXG4iLCBfX2Z1bmNfXywKKwkJCWNscC0+Y2xfY2Jfc2VxX25yKTsKKworCQkvKiBXZSdyZSBkb25lIGxvb2tpbmcgaW50byB0aGUgc2VxdWVuY2UgaW5mb3JtYXRpb24gKi8KKwkJdGFzay0+dGtfbXNnLnJwY19yZXNwID0gTlVMTDsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG5mc2Q0X2NiX3JlY2FsbF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCiB7CiAJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAgPSBjYWxsZGF0YTsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCA9IGRwLT5kbF9jbGllbnQ7CiAKKwluZnNkNF9jYl9kb25lKHRhc2ssIGNhbGxkYXRhKTsKKwogCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7CiAJY2FzZSAtRUlPOgogCQkvKiBOZXR3b3JrIHBhcnRpdGlvbj8gKi8KQEAgLTUyMCwxNiArNjg4LDE5IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHN1Y2Nlc3MsIG9yIGVycm9yIHdlIGNhbid0IGhhbmRsZSAqLwotCQlyZXR1cm47CisJCWdvdG8gZG9uZTsKIAl9CiAJaWYgKGRwLT5kbF9yZXRyaWVzLS0pIHsKIAkJcnBjX2RlbGF5KHRhc2ssIDIqSFopOwogCQl0YXNrLT50a19zdGF0dXMgPSAwOwogCQlycGNfcmVzdGFydF9jYWxsKHRhc2spOworCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJYXRvbWljX3NldCgmY2xwLT5jbF9jYl9jb25uLmNiX3NldCwgMCk7CiAJCXdhcm5fbm9fY2FsbGJhY2tfcGF0aChjbHAsIHRhc2stPnRrX3N0YXR1cyk7CiAJfQorZG9uZToKKwlrZnJlZSh0YXNrLT50a19tc2cucnBjX2FyZ3ApOwogfQogCiBzdGF0aWMgdm9pZCBuZnNkNF9jYl9yZWNhbGxfcmVsZWFzZSh2b2lkICpjYWxsZGF0YSkKQEAgLTU0Miw2ICs3MTMsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnNkNF9jYl9yZWNhbGxfb3BzID0geworCS5ycGNfY2FsbF9wcmVwYXJlID0gbmZzZDRfY2JfcHJlcGFyZSwKIAkucnBjX2NhbGxfZG9uZSA9IG5mc2Q0X2NiX3JlY2FsbF9kb25lLAogCS5ycGNfcmVsZWFzZSA9IG5mc2Q0X2NiX3JlY2FsbF9yZWxlYXNlLAogfTsKQEAgLTU1NCwxNyArNzI2LDI0IEBACiB7CiAJc3RydWN0IG5mczRfY2xpZW50ICpjbHAgPSBkcC0+ZGxfY2xpZW50OwogCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGNscC0+Y2xfY2JfY29ubi5jYl9jbGllbnQ7CisJc3RydWN0IG5mczRfcnBjX2FyZ3MgKmFyZ3M7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jID0gJm5mczRfY2JfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX0NCX1JFQ0FMTF0sCi0JCS5ycGNfYXJncCA9IGRwLAotCQkucnBjX2NyZWQgPSBjbHAtPmNsX2NiX2Nvbm4uY2JfY3JlZAorCQkucnBjX2NyZWQgPSBjYWxsYmFja19jcmVkCiAJfTsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSAtRU5PTUVNOwogCisJYXJncyA9IGt6YWxsb2Moc2l6ZW9mKCphcmdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmdzKQorCQlnb3RvIG91dDsKKwlhcmdzLT5hcmdzX29wID0gZHA7CisJbXNnLnJwY19hcmdwID0gYXJnczsKIAlkcC0+ZGxfcmV0cmllcyA9IDE7CiAJc3RhdHVzID0gcnBjX2NhbGxfYXN5bmMoY2xudCwgJm1zZywgUlBDX1RBU0tfU09GVCwKIAkJCQkmbmZzZDRfY2JfcmVjYWxsX29wcywgZHApOworb3V0OgogCWlmIChzdGF0dXMpIHsKKwkJa2ZyZWUoYXJncyk7CiAJCXB1dF9uZnM0X2NsaWVudChjbHApOwogCQluZnM0X3B1dF9kZWxlZ2F0aW9uKGRwKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRwcm9jLmMgYi9mcy9uZnNkL25mczRwcm9jLmMKaW5kZXggN2M4ODAxNy4uYmViYzBjMiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzNHByb2MuYwpAQCAtNjgsNyArNjgsNiBAQAogCQkgICB1MzIgKmJtdmFsLCB1MzIgKndyaXRhYmxlKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGNzdGF0ZS0+Y3VycmVudF9maC5maF9kZW50cnk7Ci0Jc3RydWN0IHN2Y19leHBvcnQgKmV4cCA9IGNzdGF0ZS0+Y3VycmVudF9maC5maF9leHBvcnQ7CiAKIAkvKgogCSAqIENoZWNrIGFib3V0IGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgTkZTdjQgc2VydmVyIG9yIG5vdC4KQEAgLTgwLDE3ICs3OSwxMyBAQAogCQlyZXR1cm4gbmZzZXJyX2F0dHJub3RzdXBwOwogCiAJLyoKLQkgKiBDaGVjayBGQVRUUjRfV09SRDBfQUNMICYgRkFUVFI0X1dPUkQwX0ZTX0xPQ0FUSU9OUyBjYW4gYmUgc3VwcG9ydGVkCisJICogQ2hlY2sgRkFUVFI0X1dPUkQwX0FDTCBjYW4gYmUgc3VwcG9ydGVkCiAJICogaW4gY3VycmVudCBlbnZpcm9ubWVudCBvciBub3QuCiAJICovCiAJaWYgKGJtdmFsWzBdICYgRkFUVFI0X1dPUkQwX0FDTCkgewogCQlpZiAoIUlTX1BPU0lYQUNMKGRlbnRyeS0+ZF9pbm9kZSkpCiAJCQlyZXR1cm4gbmZzZXJyX2F0dHJub3RzdXBwOwogCX0KLQlpZiAoYm12YWxbMF0gJiBGQVRUUjRfV09SRDBfRlNfTE9DQVRJT05TKSB7Ci0JCWlmIChleHAtPmV4X2ZzbG9jcy5sb2NhdGlvbnMgPT0gTlVMTCkKLQkJCXJldHVybiBuZnNlcnJfYXR0cm5vdHN1cHA7Ci0JfQogCiAJLyoKIAkgKiBBY2NvcmRpbmcgdG8gc3BlYywgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgcmV0dXJuIEVSUl9JTlZBTC4KQEAgLTEyMyw2ICsxMTgsMzUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50Citpc19jcmVhdGVfd2l0aF9hdHRycyhzdHJ1Y3QgbmZzZDRfb3BlbiAqb3BlbikKK3sKKwlyZXR1cm4gb3Blbi0+b3BfY3JlYXRlID09IE5GUzRfT1BFTl9DUkVBVEUKKwkJJiYgKG9wZW4tPm9wX2NyZWF0ZW1vZGUgPT0gTkZTNF9DUkVBVEVfVU5DSEVDS0VECisJCSAgICB8fCBvcGVuLT5vcF9jcmVhdGVtb2RlID09IE5GUzRfQ1JFQVRFX0dVQVJERUQKKwkJICAgIHx8IG9wZW4tPm9wX2NyZWF0ZW1vZGUgPT0gTkZTNF9DUkVBVEVfRVhDTFVTSVZFNF8xKTsKK30KKworLyoKKyAqIGlmIGVycm9yIG9jY3VycyB3aGVuIHNldHRpbmcgdGhlIGFjbCwganVzdCBjbGVhciB0aGUgYWNsIGJpdAorICogaW4gdGhlIHJldHVybmVkIGF0dHIgYml0bWFwLgorICovCitzdGF0aWMgdm9pZAorZG9fc2V0X25mczRfYWNsKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCwKKwkJc3RydWN0IG5mczRfYWNsICphY2wsIHUzMiAqYm12YWwpCit7CisJX19iZTMyIHN0YXR1czsKKworCXN0YXR1cyA9IG5mc2Q0X3NldF9uZnM0X2FjbChycXN0cCwgZmhwLCBhY2wpOworCWlmIChzdGF0dXMpCisJCS8qCisJCSAqIFdlIHNob3VsZCBwcm9iYWJseSBmYWlsIHRoZSB3aG9sZSBvcGVuIGF0IHRoaXMgcG9pbnQsCisJCSAqIGJ1dCB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIGZpbGUsIHNvIGl0J3MgdG9vIGxhdGU7CisJCSAqIFNvIHRoaXMgc2VlbXMgdGhlIGxlYXN0IG9mIGV2aWxzOgorCQkgKi8KKwkJYm12YWxbMF0gJj0gfkZBVFRSNF9XT1JEMF9BQ0w7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogZmhfZHVwMihzdHJ1Y3Qgc3ZjX2ZoICpkc3QsIHN0cnVjdCBzdmNfZmggKnNyYykKIHsKQEAgLTIwNiw2ICsyMzAsOSBAQAogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwogCisJaWYgKGlzX2NyZWF0ZV93aXRoX2F0dHJzKG9wZW4pICYmIG9wZW4tPm9wX2FjbCAhPSBOVUxMKQorCQlkb19zZXRfbmZzNF9hY2wocnFzdHAsICZyZXNmaCwgb3Blbi0+b3BfYWNsLCBvcGVuLT5vcF9ibXZhbCk7CisKIAlzZXRfY2hhbmdlX2luZm8oJm9wZW4tPm9wX2NpbmZvLCBjdXJyZW50X2ZoKTsKIAlmaF9kdXAyKGN1cnJlbnRfZmgsICZyZXNmaCk7CiAKQEAgLTUzNiwxMiArNTYzLDE3IEBACiAJCXN0YXR1cyA9IG5mc2Vycl9iYWR0eXBlOwogCX0KIAotCWlmICghc3RhdHVzKSB7Ci0JCWZoX3VubG9jaygmY3N0YXRlLT5jdXJyZW50X2ZoKTsKLQkJc2V0X2NoYW5nZV9pbmZvKCZjcmVhdGUtPmNyX2NpbmZvLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKLQkJZmhfZHVwMigmY3N0YXRlLT5jdXJyZW50X2ZoLCAmcmVzZmgpOwotCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKIAorCWlmIChjcmVhdGUtPmNyX2FjbCAhPSBOVUxMKQorCQlkb19zZXRfbmZzNF9hY2wocnFzdHAsICZyZXNmaCwgY3JlYXRlLT5jcl9hY2wsCisJCQkJY3JlYXRlLT5jcl9ibXZhbCk7CisKKwlmaF91bmxvY2soJmNzdGF0ZS0+Y3VycmVudF9maCk7CisJc2V0X2NoYW5nZV9pbmZvKCZjcmVhdGUtPmNyX2NpbmZvLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKKwlmaF9kdXAyKCZjc3RhdGUtPmN1cnJlbnRfZmgsICZyZXNmaCk7CitvdXQ6CiAJZmhfcHV0KCZyZXNmaCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTk0NywzNCArOTc5LDYgQEAKIHN0YXRpYyBjb25zdCBjaGFyICpuZnNkNF9vcF9uYW1lKHVuc2lnbmVkIG9wbnVtKTsKIAogLyoKLSAqIFRoaXMgaXMgYSByZXBsYXkgb2YgYSBjb21wb3VuZCBmb3Igd2hpY2ggbm8gY2FjaGUgZW50cnkgcGFnZXMKLSAqIHdlcmUgdXNlZC4gRW5jb2RlIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb24sIGFuZCBpZiBjYWNoZXRoaXMgaXMgRkFMU0UKLSAqIGVuY29kZSB0aGUgdW5jYWNoZSByZXAgZXJyb3Igb24gdGhlIG5leHQgb3BlcmF0aW9uLgotICovCi1zdGF0aWMgX19iZTMyCi1uZnNkNF9lbmNfdW5jYWNoZWRfcmVwbGF5KHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3MsCi0JCQkgc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwKQotewotCXN0cnVjdCBuZnNkNF9vcCAqb3A7Ci0KLQlkcHJpbnRrKCItLT4gJXMgcmVzcC0+b3BjbnQgJWQgY2VfY2FjaGV0aGlzICV1IFxuIiwgX19mdW5jX18sCi0JCXJlc3AtPm9wY250LCByZXNwLT5jc3RhdGUuc2xvdC0+c2xfY2FjaGVfZW50cnkuY2VfY2FjaGV0aGlzKTsKLQotCS8qIEVuY29kZSB0aGUgcmVwbGF5ZWQgc2VxdWVuY2Ugb3BlcmF0aW9uICovCi0JQlVHX09OKHJlc3AtPm9wY250ICE9IDEpOwotCW9wID0gJmFyZ3MtPm9wc1tyZXNwLT5vcGNudCAtIDFdOwotCW5mc2Q0X2VuY29kZV9vcGVyYXRpb24ocmVzcCwgb3ApOwotCi0JLypyZXR1cm4gbmZzZXJyX3JldHJ5X3VuY2FjaGVkX3JlcCBpbiBuZXh0IG9wZXJhdGlvbi4gKi8KLQlpZiAocmVzcC0+Y3N0YXRlLnNsb3QtPnNsX2NhY2hlX2VudHJ5LmNlX2NhY2hldGhpcyA9PSAwKSB7Ci0JCW9wID0gJmFyZ3MtPm9wc1tyZXNwLT5vcGNudCsrXTsKLQkJb3AtPnN0YXR1cyA9IG5mc2Vycl9yZXRyeV91bmNhY2hlZF9yZXA7Ci0JCW5mc2Q0X2VuY29kZV9vcGVyYXRpb24ocmVzcCwgb3ApOwotCX0KLQlyZXR1cm4gb3AtPnN0YXR1czsKLX0KLQotLyoKICAqIEVuZm9yY2UgTkZTdjQuMSBDT01QT1VORCBvcmRlcmluZyBydWxlcy4KICAqCiAgKiBUT0RPOgpAQCAtMTA4MywxMyArMTA4NywxMCBAQAogCQkJQlVHX09OKG9wLT5zdGF0dXMgPT0gbmZzX29rKTsKIAogZW5jb2RlX29wOgotCQkvKiBPbmx5IGZyb20gU0VRVUVOQ0Ugb3IgQ1JFQVRFX1NFU1NJT04gKi8KKwkJLyogT25seSBmcm9tIFNFUVVFTkNFICovCiAJCWlmIChyZXNwLT5jc3RhdGUuc3RhdHVzID09IG5mc2Vycl9yZXBsYXlfY2FjaGUpIHsKIAkJCWRwcmludGsoIiVzIE5GUzQuMSByZXBsYXkgZnJvbSBjYWNoZVxuIiwgX19mdW5jX18pOwotCQkJaWYgKG5mc2Q0X25vdF9jYWNoZWQocmVzcCkpCi0JCQkJc3RhdHVzID0gbmZzZDRfZW5jX3VuY2FjaGVkX3JlcGxheShhcmdzLCByZXNwKTsKLQkJCWVsc2UKLQkJCQlzdGF0dXMgPSBvcC0+c3RhdHVzOworCQkJc3RhdHVzID0gb3AtPnN0YXR1czsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWlmIChvcC0+c3RhdHVzID09IG5mc2Vycl9yZXBsYXlfbWUpIHsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDk4MGEyMTYuLjIxNTNmOWIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjYXV0aF9nc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogCiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkgICAgICAgICAgICAgICAgTkZTRERCR19QUk9DCiAKQEAgLTQxMywzNiArNDE0LDY1IEBACiB9CiAKIC8qCi0gKiBHaXZlIHRoZSBjbGllbnQgdGhlIG51bWJlciBvZiBzbG90cyBpdCByZXF1ZXN0cyBib3VuZCBieQotICogTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04gYW5kIGJ5IHN2X2RyY19tYXhfcGFnZXMuCi0gKgotICogSWYgd2UgcnVuIG91dCBvZiBwYWdlcyAoc3ZfZHJjX3BhZ2VzX3VzZWQgPT0gc3ZfZHJjX21heF9wYWdlcykgd2UKLSAqIHNob3VsZCAodXAgdG8gYSBwb2ludCkgcmUtbmVnb3RpYXRlIGFjdGl2ZSBzZXNzaW9ucyBhbmQgcmVkdWNlIHRoZWlyCi0gKiBzbG90IHVzYWdlIHRvIG1ha2Ugcm9vb20gZm9yIG5ldyBjb25uZWN0aW9ucy4gRm9yIG5vdyB3ZSBqdXN0IGZhaWwgdGhlCi0gKiBjcmVhdGUgc2Vzc2lvbi4KKyAqIFRoZSBwcm90b2NvbCBkZWZpbmVzIGNhX21heHJlc3BvbnNzaXplX2NhY2hlZCB0byBpbmNsdWRlIHRoZSBzaXplIG9mCisgKiB0aGUgcnBjIGhlYWRlciwgYnV0IGFsbCB3ZSBuZWVkIHRvIGNhY2hlIGlzIHRoZSBkYXRhIHN0YXJ0aW5nIGFmdGVyCisgKiB0aGUgZW5kIG9mIHRoZSBpbml0aWFsIFNFUVVFTkNFIG9wZXJhdGlvbi0tdGhlIHJlc3Qgd2UgcmVnZW5lcmF0ZQorICogZWFjaCB0aW1lLiAgVGhlcmVmb3JlIHdlIGNhbiBhZHZlcnRpc2UgYSBjYV9tYXhyZXNwb25zc2l6ZV9jYWNoZWQKKyAqIHZhbHVlIHRoYXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiBvdXIgY2FjaGUgcGx1cyBhIGZldyBhZGRpdGlvbmFsCisgKiBieXRlcy4gIEluIG9yZGVyIHRvIHN0YXkgb24gdGhlIHNhZmUgc2lkZSwgYW5kIG5vdCBwcm9taXNlIG1vcmUgdGhhbgorICogd2UgY2FuIGNhY2hlLCB0aG9zZSBhZGRpdGlvbmFsIGJ5dGVzIG11c3QgYmUgdGhlIG1pbmltdW0gcG9zc2libGU6IDI0CisgKiBieXRlcyBvZiBycGMgaGVhZGVyICh4aWQgdGhyb3VnaCBhY2NlcHQgc3RhdGUsIHdpdGggQVVUSF9OVUxMCisgKiB2ZXJpZmllciksIDEyIGZvciB0aGUgY29tcG91bmQgaGVhZGVyICh3aXRoIHplcm8tbGVuZ3RoIHRhZyksIGFuZCA0NAorICogZm9yIHRoZSBTRVFVRU5DRSBvcCByZXNwb25zZToKICAqLwotc3RhdGljIGludCBzZXRfZm9yZWNoYW5uZWxfbWF4cmVxcyhzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyAqZmNoYW4pCisjZGVmaW5lIE5GU0RfTUlOX0hEUl9TRVFfU1ogICgyNCArIDEyICsgNDQpCisKKy8qCisgKiBHaXZlIHRoZSBjbGllbnQgdGhlIG51bWJlciBvZiBjYV9tYXhyZXNwb25zZXNpemVfY2FjaGVkIHNsb3RzIGl0CisgKiByZXF1ZXN0cywgb2Ygc2l6ZSBib3VuZGVkIGJ5IE5GU0RfU0xPVF9DQUNIRV9TSVpFLAorICogTkZTRF9NQVhfTUVNX1BFUl9TRVNTSU9OLCBhbmQgbmZzZF9kcmNfbWF4X21lbS4gRG8gbm90IGFsbG93IG1vcmUKKyAqIHRoYW4gTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04uCisgKgorICogSWYgd2UgcnVuIG91dCBvZiByZXNlcnZlZCBEUkMgbWVtb3J5IHdlIHNob3VsZCAodXAgdG8gYSBwb2ludCkKKyAqIHJlLW5lZ290aWF0ZSBhY3RpdmUgc2Vzc2lvbnMgYW5kIHJlZHVjZSB0aGVpciBzbG90IHVzYWdlIHRvIG1ha2UKKyAqIHJvb29tIGZvciBuZXcgY29ubmVjdGlvbnMuIEZvciBub3cgd2UganVzdCBmYWlsIHRoZSBjcmVhdGUgc2Vzc2lvbi4KKyAqLworc3RhdGljIGludCBzZXRfZm9yZWNoYW5uZWxfZHJjX3NpemUoc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMgKmZjaGFuKQogewotCWludCBzdGF0dXMgPSAwLCBucCA9IGZjaGFuLT5tYXhyZXFzICogTkZTRF9QQUdFU19QRVJfU0xPVDsKKwlpbnQgbWVtLCBzaXplID0gZmNoYW4tPm1heHJlc3BfY2FjaGVkOwogCiAJaWYgKGZjaGFuLT5tYXhyZXFzIDwgMSkKIAkJcmV0dXJuIG5mc2Vycl9pbnZhbDsKLQllbHNlIGlmIChmY2hhbi0+bWF4cmVxcyA+IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OKQotCQlmY2hhbi0+bWF4cmVxcyA9IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OOwogCi0Jc3Bpbl9sb2NrKCZuZnNkX3NlcnYtPnN2X2xvY2spOwotCWlmIChucCArIG5mc2Rfc2Vydi0+c3ZfZHJjX3BhZ2VzX3VzZWQgPiBuZnNkX3NlcnYtPnN2X2RyY19tYXhfcGFnZXMpCi0JCW5wID0gbmZzZF9zZXJ2LT5zdl9kcmNfbWF4X3BhZ2VzIC0gbmZzZF9zZXJ2LT5zdl9kcmNfcGFnZXNfdXNlZDsKLQluZnNkX3NlcnYtPnN2X2RyY19wYWdlc191c2VkICs9IG5wOwotCXNwaW5fdW5sb2NrKCZuZnNkX3NlcnYtPnN2X2xvY2spOworCWlmIChzaXplIDwgTkZTRF9NSU5fSERSX1NFUV9TWikKKwkJc2l6ZSA9IE5GU0RfTUlOX0hEUl9TRVFfU1o7CisJc2l6ZSAtPSBORlNEX01JTl9IRFJfU0VRX1NaOworCWlmIChzaXplID4gTkZTRF9TTE9UX0NBQ0hFX1NJWkUpCisJCXNpemUgPSBORlNEX1NMT1RfQ0FDSEVfU0laRTsKIAotCWlmIChucCA8PSAwKSB7Ci0JCXN0YXR1cyA9IG5mc2Vycl9yZXNvdXJjZTsKLQkJZmNoYW4tPm1heHJlcXMgPSAwOwotCX0gZWxzZQotCQlmY2hhbi0+bWF4cmVxcyA9IG5wIC8gTkZTRF9QQUdFU19QRVJfU0xPVDsKKwkvKiBib3VuZCB0aGUgbWF4cmVxcyBieSBORlNEX01BWF9NRU1fUEVSX1NFU1NJT04gKi8KKwltZW0gPSBmY2hhbi0+bWF4cmVxcyAqIHNpemU7CisJaWYgKG1lbSA+IE5GU0RfTUFYX01FTV9QRVJfU0VTU0lPTikgeworCQlmY2hhbi0+bWF4cmVxcyA9IE5GU0RfTUFYX01FTV9QRVJfU0VTU0lPTiAvIHNpemU7CisJCWlmIChmY2hhbi0+bWF4cmVxcyA+IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OKQorCQkJZmNoYW4tPm1heHJlcXMgPSBORlNEX01BWF9TTE9UU19QRVJfU0VTU0lPTjsKKwkJbWVtID0gZmNoYW4tPm1heHJlcXMgKiBzaXplOworCX0KIAotCXJldHVybiBzdGF0dXM7CisJc3Bpbl9sb2NrKCZuZnNkX2RyY19sb2NrKTsKKwkvKiBib3VuZCB0aGUgdG90YWwgc2Vzc2lvbiBkcmMgbWVtb3J5IHVzc2FnZSAqLworCWlmIChtZW0gKyBuZnNkX2RyY19tZW1fdXNlZCA+IG5mc2RfZHJjX21heF9tZW0pIHsKKwkJZmNoYW4tPm1heHJlcXMgPSAobmZzZF9kcmNfbWF4X21lbSAtIG5mc2RfZHJjX21lbV91c2VkKSAvIHNpemU7CisJCW1lbSA9IGZjaGFuLT5tYXhyZXFzICogc2l6ZTsKKwl9CisJbmZzZF9kcmNfbWVtX3VzZWQgKz0gbWVtOworCXNwaW5fdW5sb2NrKCZuZnNkX2RyY19sb2NrKTsKKworCWlmIChmY2hhbi0+bWF4cmVxcyA9PSAwKQorCQlyZXR1cm4gbmZzZXJyX3NlcnZlcmZhdWx0OworCisJZmNoYW4tPm1heHJlc3BfY2FjaGVkID0gc2l6ZSArIE5GU0RfTUlOX0hEUl9TRVFfU1o7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00NjYsMzYgKzQ5Niw0MSBAQAogCQlmY2hhbi0+bWF4cmVzcF9zeiA9IG1heGNvdW50OwogCXNlc3Npb25fZmNoYW4tPm1heHJlc3Bfc3ogPSBmY2hhbi0+bWF4cmVzcF9zejsKIAotCS8qIFNldCB0aGUgbWF4IHJlc3BvbnNlIGNhY2hlZCBzaXplIG91ciBkZWZhdWx0IHdoaWNoIGlzCi0JICogYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgYW5kIHNtYWxsICovCi0Jc2Vzc2lvbl9mY2hhbi0+bWF4cmVzcF9jYWNoZWQgPSBORlNEX1BBR0VTX1BFUl9TTE9UICogUEFHRV9TSVpFOwotCWZjaGFuLT5tYXhyZXNwX2NhY2hlZCA9IHNlc3Npb25fZmNoYW4tPm1heHJlc3BfY2FjaGVkOwotCiAJLyogVXNlIHRoZSBjbGllbnQncyBtYXhvcHMgaWYgcG9zc2libGUgKi8KIAlpZiAoZmNoYW4tPm1heG9wcyA+IE5GU0RfTUFYX09QU19QRVJfQ09NUE9VTkQpCiAJCWZjaGFuLT5tYXhvcHMgPSBORlNEX01BWF9PUFNfUEVSX0NPTVBPVU5EOwogCXNlc3Npb25fZmNoYW4tPm1heG9wcyA9IGZjaGFuLT5tYXhvcHM7CiAKLQkvKiB0cnkgdG8gdXNlIHRoZSBjbGllbnQgcmVxdWVzdGVkIG51bWJlciBvZiBzbG90cyAqLwotCWlmIChmY2hhbi0+bWF4cmVxcyA+IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OKQotCQlmY2hhbi0+bWF4cmVxcyA9IE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OOwotCiAJLyogRklYTUU6IEVycm9yIG1lYW5zIG5vIG1vcmUgRFJDIHBhZ2VzIHNvIHRoZSBzZXJ2ZXIgc2hvdWxkCiAJICogcmVjb3ZlciBwYWdlcyBmcm9tIGV4aXN0aW5nIHNlc3Npb25zLiBGb3Igbm93IGZhaWwgc2Vzc2lvbgogCSAqIGNyZWF0aW9uLgogCSAqLwotCXN0YXR1cyA9IHNldF9mb3JlY2hhbm5lbF9tYXhyZXFzKGZjaGFuKTsKKwlzdGF0dXMgPSBzZXRfZm9yZWNoYW5uZWxfZHJjX3NpemUoZmNoYW4pOwogCisJc2Vzc2lvbl9mY2hhbi0+bWF4cmVzcF9jYWNoZWQgPSBmY2hhbi0+bWF4cmVzcF9jYWNoZWQ7CiAJc2Vzc2lvbl9mY2hhbi0+bWF4cmVxcyA9IGZjaGFuLT5tYXhyZXFzOworCisJZHByaW50aygiJXMgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgdm9pZAorZnJlZV9zZXNzaW9uX3Nsb3RzKHN0cnVjdCBuZnNkNF9zZXNzaW9uICpzZXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VzLT5zZV9mY2hhbm5lbC5tYXhyZXFzOyBpKyspCisJCWtmcmVlKHNlcy0+c2Vfc2xvdHNbaV0pOworfQorCiBzdGF0aWMgaW50CiBhbGxvY19pbml0X3Nlc3Npb24oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mczRfY2xpZW50ICpjbHAsCiAJCSAgIHN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbiAqY3NlcykKIHsKIAlzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiAqbmV3LCB0bXA7Ci0JaW50IGlkeCwgc3RhdHVzID0gbmZzZXJyX3Jlc291cmNlLCBzbG90c2l6ZTsKKwlzdHJ1Y3QgbmZzZDRfc2xvdCAqc3A7CisJaW50IGlkeCwgc2xvdHNpemUsIGNhY2hlc2l6ZSwgaTsKKwlpbnQgc3RhdHVzOwogCiAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKIApAQCAtNTA2LDE0ICs1NDEsMjcgQEAKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIAotCS8qIGFsbG9jYXRlIHN0cnVjdCBuZnNkNF9zZXNzaW9uIGFuZCBzbG90IHRhYmxlIGluIG9uZSBwaWVjZSAqLwotCXNsb3RzaXplID0gdG1wLnNlX2ZjaGFubmVsLm1heHJlcXMgKiBzaXplb2Yoc3RydWN0IG5mc2Q0X3Nsb3QpOworCUJVSUxEX0JVR19PTihORlNEX01BWF9TTE9UU19QRVJfU0VTU0lPTiAqIHNpemVvZihzdHJ1Y3QgbmZzZDRfc2xvdCkKKwkJICAgICArIHNpemVvZihzdHJ1Y3QgbmZzZDRfc2Vzc2lvbikgPiBQQUdFX1NJWkUpOworCisJc3RhdHVzID0gbmZzZXJyX3NlcnZlcmZhdWx0OworCS8qIGFsbG9jYXRlIHN0cnVjdCBuZnNkNF9zZXNzaW9uIGFuZCBzbG90IHRhYmxlIHBvaW50ZXJzIGluIG9uZSBwaWVjZSAqLworCXNsb3RzaXplID0gdG1wLnNlX2ZjaGFubmVsLm1heHJlcXMgKiBzaXplb2Yoc3RydWN0IG5mc2Q0X3Nsb3QgKik7CiAJbmV3ID0ga3phbGxvYyhzaXplb2YoKm5ldykgKyBzbG90c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXcpCiAJCWdvdG8gb3V0OwogCiAJbWVtY3B5KG5ldywgJnRtcCwgc2l6ZW9mKCpuZXcpKTsKIAorCS8qIGFsbG9jYXRlIGVhY2ggc3RydWN0IG5mc2Q0X3Nsb3QgYW5kIGRhdGEgY2FjaGUgaW4gb25lIHBpZWNlICovCisJY2FjaGVzaXplID0gbmV3LT5zZV9mY2hhbm5lbC5tYXhyZXNwX2NhY2hlZCAtIE5GU0RfTUlOX0hEUl9TRVFfU1o7CisJZm9yIChpID0gMDsgaSA8IG5ldy0+c2VfZmNoYW5uZWwubWF4cmVxczsgaSsrKSB7CisJCXNwID0ga3phbGxvYyhzaXplb2YoKnNwKSArIGNhY2hlc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3ApCisJCQlnb3RvIG91dF9mcmVlOworCQluZXctPnNlX3Nsb3RzW2ldID0gc3A7CisJfQorCiAJbmV3LT5zZV9jbGllbnQgPSBjbHA7CiAJZ2VuX3Nlc3Npb25pZChuZXcpOwogCWlkeCA9IGhhc2hfc2Vzc2lvbmlkKCZuZXctPnNlX3Nlc3Npb25pZCk7CkBAIC01MzAsNiArNTc4LDEwIEBACiAJc3RhdHVzID0gbmZzX29rOwogb3V0OgogCXJldHVybiBzdGF0dXM7CitvdXRfZnJlZToKKwlmcmVlX3Nlc3Npb25fc2xvdHMobmV3KTsKKwlrZnJlZShuZXcpOworCWdvdG8gb3V0OwogfQogCiAvKiBjYWxsZXIgbXVzdCBob2xkIHNlc3Npb25pZF9sb2NrICovCkBAIC01NzIsMTkgKzYyNCwxNiBAQAogCW5mc2Q0X3B1dF9zZXNzaW9uKHNlcyk7CiB9CiAKLXN0YXRpYyB2b2lkIG5mc2Q0X3JlbGVhc2VfcmVzcGFnZXMoc3RydWN0IHBhZ2UgKipyZXNwYWdlcywgc2hvcnQgcmVzdXNlZCk7Ci0KIHZvaWQKIGZyZWVfc2Vzc2lvbihzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiAqc2VzOwotCWludCBpOwogCiAJc2VzID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBuZnNkNF9zZXNzaW9uLCBzZV9yZWYpOwotCWZvciAoaSA9IDA7IGkgPCBzZXMtPnNlX2ZjaGFubmVsLm1heHJlcXM7IGkrKykgewotCQlzdHJ1Y3QgbmZzZDRfY2FjaGVfZW50cnkgKmUgPSAmc2VzLT5zZV9zbG90c1tpXS5zbF9jYWNoZV9lbnRyeTsKLQkJbmZzZDRfcmVsZWFzZV9yZXNwYWdlcyhlLT5jZV9yZXNwYWdlcywgZS0+Y2VfcmVzdXNlZCk7Ci0JfQorCXNwaW5fbG9jaygmbmZzZF9kcmNfbG9jayk7CisJbmZzZF9kcmNfbWVtX3VzZWQgLT0gc2VzLT5zZV9mY2hhbm5lbC5tYXhyZXFzICogTkZTRF9TTE9UX0NBQ0hFX1NJWkU7CisJc3Bpbl91bmxvY2soJm5mc2RfZHJjX2xvY2spOworCWZyZWVfc2Vzc2lvbl9zbG90cyhzZXMpOwogCWtmcmVlKHNlcyk7CiB9CiAKQEAgLTY0NywxOCArNjk2LDE0IEBACiAJCWNscC0+Y2xfY2JfY29ubi5jYl9jbGllbnQgPSBOVUxMOwogCQlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOwogCX0KLQlpZiAoY2xwLT5jbF9jYl9jb25uLmNiX2NyZWQpIHsKLQkJcHV0X3JwY2NyZWQoY2xwLT5jbF9jYl9jb25uLmNiX2NyZWQpOwotCQljbHAtPmNsX2NiX2Nvbm4uY2JfY3JlZCA9IE5VTEw7Ci0JfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGZyZWVfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKQogewogCXNodXRkb3duX2NhbGxiYWNrX2NsaWVudChjbHApOwotCW5mc2Q0X3JlbGVhc2VfcmVzcGFnZXMoY2xwLT5jbF9zbG90LnNsX2NhY2hlX2VudHJ5LmNlX3Jlc3BhZ2VzLAotCQkJICAgICBjbHAtPmNsX3Nsb3Quc2xfY2FjaGVfZW50cnkuY2VfcmVzdXNlZCk7CisJaWYgKGNscC0+Y2xfY2JfeHBydCkKKwkJc3ZjX3hwcnRfcHV0KGNscC0+Y2xfY2JfeHBydCk7CiAJaWYgKGNscC0+Y2xfY3JlZC5jcl9ncm91cF9pbmZvKQogCQlwdXRfZ3JvdXBfaW5mbyhjbHAtPmNsX2NyZWQuY3JfZ3JvdXBfaW5mbyk7CiAJa2ZyZWUoY2xwLT5jbF9wcmluY2lwYWwpOwpAQCAtNzE0LDI1ICs3NTksNiBAQAogCXB1dF9uZnM0X2NsaWVudChjbHApOwogfQogCi1zdGF0aWMgc3RydWN0IG5mczRfY2xpZW50ICpjcmVhdGVfY2xpZW50KHN0cnVjdCB4ZHJfbmV0b2JqIG5hbWUsIGNoYXIgKnJlY2RpcikKLXsKLQlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscDsKLQotCWNscCA9IGFsbG9jX2NsaWVudChuYW1lKTsKLQlpZiAoY2xwID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCW1lbWNweShjbHAtPmNsX3JlY2RpciwgcmVjZGlyLCBIRVhESVJfTEVOKTsKLQlhdG9taWNfc2V0KCZjbHAtPmNsX2NvdW50LCAxKTsKLQlhdG9taWNfc2V0KCZjbHAtPmNsX2NiX2Nvbm4uY2Jfc2V0LCAwKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9pZGhhc2gpOwotCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX3N0cmhhc2gpOwotCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX29wZW5vd25lcnMpOwotCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX2RlbGVnYXRpb25zKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9zZXNzaW9ucyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNscC0+Y2xfbHJ1KTsKLQlyZXR1cm4gY2xwOwotfQotCiBzdGF0aWMgdm9pZCBjb3B5X3ZlcmYoc3RydWN0IG5mczRfY2xpZW50ICp0YXJnZXQsIG5mczRfdmVyaWZpZXIgKnNvdXJjZSkKIHsKIAltZW1jcHkodGFyZ2V0LT5jbF92ZXJpZmllci5kYXRhLCBzb3VyY2UtPmRhdGEsCkBAIC03OTUsNiArODIxLDQ2IEBACiAJKnArKyA9IGkrKzsKIH0KIAorc3RhdGljIHN0cnVjdCBuZnM0X2NsaWVudCAqY3JlYXRlX2NsaWVudChzdHJ1Y3QgeGRyX25ldG9iaiBuYW1lLCBjaGFyICpyZWNkaXIsCisJCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIG5mczRfdmVyaWZpZXIgKnZlcmYpCit7CisJc3RydWN0IG5mczRfY2xpZW50ICpjbHA7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IHN2Y19hZGRyKHJxc3RwKTsKKwljaGFyICpwcmluYzsKKworCWNscCA9IGFsbG9jX2NsaWVudChuYW1lKTsKKwlpZiAoY2xwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcHJpbmMgPSBzdmNfZ3NzX3ByaW5jaXBhbChycXN0cCk7CisJaWYgKHByaW5jKSB7CisJCWNscC0+Y2xfcHJpbmNpcGFsID0ga3N0cmR1cChwcmluYywgR0ZQX0tFUk5FTCk7CisJCWlmIChjbHAtPmNsX3ByaW5jaXBhbCA9PSBOVUxMKSB7CisJCQlmcmVlX2NsaWVudChjbHApOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwltZW1jcHkoY2xwLT5jbF9yZWNkaXIsIHJlY2RpciwgSEVYRElSX0xFTik7CisJYXRvbWljX3NldCgmY2xwLT5jbF9jb3VudCwgMSk7CisJYXRvbWljX3NldCgmY2xwLT5jbF9jYl9jb25uLmNiX3NldCwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJmNscC0+Y2xfaWRoYXNoKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9zdHJoYXNoKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9vcGVub3duZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xwLT5jbF9kZWxlZ2F0aW9ucyk7CisJSU5JVF9MSVNUX0hFQUQoJmNscC0+Y2xfc2Vzc2lvbnMpOworCUlOSVRfTElTVF9IRUFEKCZjbHAtPmNsX2xydSk7CisJY2xlYXJfYml0KDAsICZjbHAtPmNsX2NiX3Nsb3RfYnVzeSk7CisJcnBjX2luaXRfd2FpdF9xdWV1ZSgmY2xwLT5jbF9jYl93YWl0cSwgIkJhY2tjaGFubmVsIHNsb3QgdGFibGUiKTsKKwljb3B5X3ZlcmYoY2xwLCB2ZXJmKTsKKwlycGNfY29weV9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNscC0+Y2xfYWRkciwgc2EpOworCWNscC0+Y2xfZmxhdm9yID0gcnFzdHAtPnJxX2ZsYXZvcjsKKwljb3B5X2NyZWQoJmNscC0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKTsKKwlnZW5fY29uZmlybShjbHApOworCisJcmV0dXJuIGNscDsKK30KKwogc3RhdGljIGludCBjaGVja19uYW1lKHN0cnVjdCB4ZHJfbmV0b2JqIG5hbWUpCiB7CiAJaWYgKG5hbWUubGVuID09IDApIApAQCAtOTAyLDkzICs5NjgsNDAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2NhbGxiYWNrICovCi1zdGF0aWMgaW50Ci1wYXJzZV9vY3RldCh1bnNpZ25lZCBpbnQgKmxlbnAsIGNoYXIgKiphZGRycCkKLXsKLQl1bnNpZ25lZCBpbnQgbGVuID0gKmxlbnA7Ci0JY2hhciAqcCA9ICphZGRycDsKLQlpbnQgbiA9IC0xOwotCWNoYXIgYzsKLQotCWZvciAoOzspIHsKLQkJaWYgKCFsZW4pCi0JCQlicmVhazsKLQkJbGVuLS07Ci0JCWMgPSAqcCsrOwotCQlpZiAoYyA9PSAnLicpCi0JCQlicmVhazsKLQkJaWYgKChjIDwgJzAnKSB8fCAoYyA+ICc5JykpIHsKLQkJCW4gPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChuIDwgMCkKLQkJCW4gPSAwOwotCQluID0gKG4gKiAxMCkgKyAoYyAtICcwJyk7Ci0JCWlmIChuID4gMjU1KSB7Ci0JCQluID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQkqbGVucCA9IGxlbjsKLQkqYWRkcnAgPSBwOwotCXJldHVybiBuOwotfQotCi0vKiBwYXJzZSBhbmQgc2V0IHRoZSBzZXRjbGllbnRpZCBpcHY0IGNhbGxiYWNrIGFkZHJlc3MgKi8KLXN0YXRpYyBpbnQKLXBhcnNlX2lwdjQodW5zaWduZWQgaW50IGFkZHJfbGVuLCBjaGFyICphZGRyX3ZhbCwgdW5zaWduZWQgaW50ICpjYmFkZHJwLCB1bnNpZ25lZCBzaG9ydCAqY2Jwb3J0cCkKLXsKLQlpbnQgdGVtcCA9IDA7Ci0JdTMyIGNiYWRkciA9IDA7Ci0JdTE2IGNicG9ydCA9IDA7Ci0JdTMyIGFkZHJsZW4gPSBhZGRyX2xlbjsKLQljaGFyICphZGRyID0gYWRkcl92YWw7Ci0JaW50IGksIHNoaWZ0OwotCi0JLyogaXBhZGRyZXNzICovCi0Jc2hpZnQgPSAyNDsKLQlmb3IoaSA9IDQ7IGkgPiAwICA7IGktLSkgewotCQlpZiAoKHRlbXAgPSBwYXJzZV9vY3RldCgmYWRkcmxlbiwgJmFkZHIpKSA8IDApIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNiYWRkciB8PSAodGVtcCA8PCBzaGlmdCk7Ci0JCWlmIChzaGlmdCA+IDApCi0JCXNoaWZ0IC09IDg7Ci0JfQotCSpjYmFkZHJwID0gY2JhZGRyOwotCi0JLyogcG9ydCAqLwotCXNoaWZ0ID0gODsKLQlmb3IoaSA9IDI7IGkgPiAwICA7IGktLSkgewotCQlpZiAoKHRlbXAgPSBwYXJzZV9vY3RldCgmYWRkcmxlbiwgJmFkZHIpKSA8IDApIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNicG9ydCB8PSAodGVtcCA8PCBzaGlmdCk7Ci0JCWlmIChzaGlmdCA+IDApCi0JCQlzaGlmdCAtPSA4OwotCX0KLQkqY2Jwb3J0cCA9IGNicG9ydDsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQKLWdlbl9jYWxsYmFjayhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzZSkKK2dlbl9jYWxsYmFjayhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzZSwgdTMyIHNjb3BlaWQpCiB7CiAJc3RydWN0IG5mczRfY2JfY29ubiAqY2IgPSAmY2xwLT5jbF9jYl9jb25uOworCXVuc2lnbmVkIHNob3J0IGV4cGVjdGVkX2ZhbWlseTsKIAotCS8qIEN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IHRjcCBmb3IgdGhlIGNhbGxiYWNrIGNoYW5uZWwgKi8KLQlpZiAoKHNlLT5zZV9jYWxsYmFja19uZXRpZF9sZW4gIT0gMykgfHwgbWVtY21wKChjaGFyICopc2UtPnNlX2NhbGxiYWNrX25ldGlkX3ZhbCwgInRjcCIsIDMpKQorCS8qIEN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IHRjcCBhbmQgdGNwNiBmb3IgdGhlIGNhbGxiYWNrIGNoYW5uZWwgKi8KKwlpZiAoc2UtPnNlX2NhbGxiYWNrX25ldGlkX2xlbiA9PSAzICYmCisJICAgICFtZW1jbXAoc2UtPnNlX2NhbGxiYWNrX25ldGlkX3ZhbCwgInRjcCIsIDMpKQorCQlleHBlY3RlZF9mYW1pbHkgPSBBRl9JTkVUOworCWVsc2UgaWYgKHNlLT5zZV9jYWxsYmFja19uZXRpZF9sZW4gPT0gNCAmJgorCQkgIW1lbWNtcChzZS0+c2VfY2FsbGJhY2tfbmV0aWRfdmFsLCAidGNwNiIsIDQpKQorCQlleHBlY3RlZF9mYW1pbHkgPSBBRl9JTkVUNjsKKwllbHNlCiAJCWdvdG8gb3V0X2VycjsKIAotCWlmICggIShwYXJzZV9pcHY0KHNlLT5zZV9jYWxsYmFja19hZGRyX2xlbiwgc2UtPnNlX2NhbGxiYWNrX2FkZHJfdmFsLAotCSAgICAgICAgICAgICAgICAgJmNiLT5jYl9hZGRyLCAmY2ItPmNiX3BvcnQpKSkKKwljYi0+Y2JfYWRkcmxlbiA9IHJwY191YWRkcjJzb2NrYWRkcihzZS0+c2VfY2FsbGJhY2tfYWRkcl92YWwsCisJCQkJCSAgICBzZS0+c2VfY2FsbGJhY2tfYWRkcl9sZW4sCisJCQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopICZjYi0+Y2JfYWRkciwKKwkJCQkJICAgIHNpemVvZihjYi0+Y2JfYWRkcikpOworCisJaWYgKCFjYi0+Y2JfYWRkcmxlbiB8fCBjYi0+Y2JfYWRkci5zc19mYW1pbHkgIT0gZXhwZWN0ZWRfZmFtaWx5KQogCQlnb3RvIG91dF9lcnI7CisKKwlpZiAoY2ItPmNiX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KQorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJmNiLT5jYl9hZGRyKS0+c2luNl9zY29wZV9pZCA9IHNjb3BlaWQ7CisKIAljYi0+Y2JfbWlub3J2ZXJzaW9uID0gMDsKIAljYi0+Y2JfcHJvZyA9IHNlLT5zZV9jYWxsYmFja19wcm9nOwogCWNiLT5jYl9pZGVudCA9IHNlLT5zZV9jYWxsYmFja19pZGVudDsKIAlyZXR1cm47CiBvdXRfZXJyOgorCWNiLT5jYl9hZGRyLnNzX2ZhbWlseSA9IEFGX1VOU1BFQzsKKwljYi0+Y2JfYWRkcmxlbiA9IDA7CiAJZHByaW50ayhLRVJOX0lORk8gIk5GU0Q6IHRoaXMgY2xpZW50IChjbGllbnRpZCAlMDh4LyUwOHgpICIKIAkJIndpbGwgbm90IHJlY2VpdmUgZGVsZWdhdGlvbnNcbiIsCiAJCWNscC0+Y2xfY2xpZW50aWQuY2xfYm9vdCwgY2xwLT5jbF9jbGllbnRpZC5jbF9pZCk7CkBAIC05OTYsMTc1ICsxMDA5LDg3IEBACiAJcmV0dXJuOwogfQogCi12b2lkCi1uZnNkNF9zZXRfc3RhdHAoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpzdGF0cCkKLXsKLQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AgPSBycXN0cC0+cnFfcmVzcDsKLQotCXJlc3AtPmNzdGF0ZS5zdGF0cCA9IHN0YXRwOwotfQotCiAvKgotICogRGVyZWZlcmVuY2UgdGhlIHJlc3VsdCBwYWdlcy4KLSAqLwotc3RhdGljIHZvaWQKLW5mc2Q0X3JlbGVhc2VfcmVzcGFnZXMoc3RydWN0IHBhZ2UgKipyZXNwYWdlcywgc2hvcnQgcmVzdXNlZCkKLXsKLQlpbnQgaTsKLQotCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwotCWZvciAoaSA9IDA7IGkgPCByZXN1c2VkOyBpKyspIHsKLQkJaWYgKCFyZXNwYWdlc1tpXSkKLQkJCWNvbnRpbnVlOwotCQlwdXRfcGFnZShyZXNwYWdlc1tpXSk7Ci0JCXJlc3BhZ2VzW2ldID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1uZnNkNF9jb3B5X3BhZ2VzKHN0cnVjdCBwYWdlICoqdG9wYWdlcywgc3RydWN0IHBhZ2UgKipmcm9tcGFnZXMsIHNob3J0IGNvdW50KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJdG9wYWdlc1tpXSA9IGZyb21wYWdlc1tpXTsKLQkJaWYgKCF0b3BhZ2VzW2ldKQotCQkJY29udGludWU7Ci0JCWdldF9wYWdlKHRvcGFnZXNbaV0pOwotCX0KLX0KLQotLyoKLSAqIENhY2hlIHRoZSByZXBseSBwYWdlcyB1cCB0byBORlNEX1BBR0VTX1BFUl9TTE9UICsgMSwgY2xlYXJpbmcgdGhlIHByZXZpb3VzCi0gKiBwYWdlcy4gV2UgYWRkIGEgcGFnZSB0byBORlNEX1BBR0VTX1BFUl9TTE9UIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdG90YWwKLSAqIGxlbmd0aCBvZiB0aGUgWERSIHJlc3BvbnNlIGlzIGxlc3MgdGhhbiBzZV9mbWF4cmVzcF9jYWNoZWQKLSAqIChORlNEX1BBR0VTX1BFUl9TTE9UICogUEFHRV9TSVpFKSBidXQgdGhlIHhkcl9idWYgcGFnZXMgaXMgdXNlZCBmb3IgYQotICogb2YgdGhlIHJlcGx5IChlLmcuIHJlYWRkaXIpLgotICoKLSAqIFN0b3JlIHRoZSBiYXNlIGFuZCBsZW5ndGggb2YgdGhlIHJxX3JlcS5oZWFkWzBdIHBhZ2UKLSAqIG9mIHRoZSBORlN2NC4xIGRhdGEsIGp1c3QgcGFzdCB0aGUgcnBjIGhlYWRlci4KKyAqIENhY2hlIGEgcmVwbHkuIG5mc2Q0X2NoZWNrX2RyY19saW1pdCgpIGhhcyBib3VuZGVkIHRoZSBjYWNoZSBzaXplLgogICovCiB2b2lkCiBuZnNkNF9zdG9yZV9jYWNoZV9lbnRyeShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3ApCiB7Ci0Jc3RydWN0IG5mc2Q0X2NhY2hlX2VudHJ5ICplbnRyeSA9ICZyZXNwLT5jc3RhdGUuc2xvdC0+c2xfY2FjaGVfZW50cnk7Ci0Jc3RydWN0IHN2Y19ycXN0ICpycXN0cCA9IHJlc3AtPnJxc3RwOwotCXN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3MgPSBycXN0cC0+cnFfYXJncDsKLQlzdHJ1Y3QgbmZzZDRfb3AgKm9wID0gJmFyZ3MtPm9wc1tyZXNwLT5vcGNudF07Ci0Jc3RydWN0IGt2ZWMgKnJlc3YgPSAmcnFzdHAtPnJxX3Jlcy5oZWFkWzBdOworCXN0cnVjdCBuZnNkNF9zbG90ICpzbG90ID0gcmVzcC0+Y3N0YXRlLnNsb3Q7CisJdW5zaWduZWQgaW50IGJhc2U7CiAKLQlkcHJpbnRrKCItLT4gJXMgZW50cnkgJXBcbiIsIF9fZnVuY19fLCBlbnRyeSk7CisJZHByaW50aygiLS0+ICVzIHNsb3QgJXBcbiIsIF9fZnVuY19fLCBzbG90KTsKIAotCS8qIERvbid0IGNhY2hlIGEgZmFpbGVkIE9QX1NFUVVFTkNFLiAqLwotCWlmIChyZXNwLT5vcGNudCA9PSAxICYmIG9wLT5vcG51bSA9PSBPUF9TRVFVRU5DRSAmJiByZXNwLT5jc3RhdGUuc3RhdHVzKQotCQlyZXR1cm47Ci0KLQluZnNkNF9yZWxlYXNlX3Jlc3BhZ2VzKGVudHJ5LT5jZV9yZXNwYWdlcywgZW50cnktPmNlX3Jlc3VzZWQpOwotCWVudHJ5LT5jZV9vcGNudCA9IHJlc3AtPm9wY250OwotCWVudHJ5LT5jZV9zdGF0dXMgPSByZXNwLT5jc3RhdGUuc3RhdHVzOwotCi0JLyoKLQkgKiBEb24ndCBuZWVkIGEgcGFnZSB0byBjYWNoZSBqdXN0IHRoZSBzZXF1ZW5jZSBvcGVyYXRpb24gLSB0aGUgc2xvdAotCSAqIGRvZXMgdGhpcyBmb3IgdXMhCi0JICovCisJc2xvdC0+c2xfb3BjbnQgPSByZXNwLT5vcGNudDsKKwlzbG90LT5zbF9zdGF0dXMgPSByZXNwLT5jc3RhdGUuc3RhdHVzOwogCiAJaWYgKG5mc2Q0X25vdF9jYWNoZWQocmVzcCkpIHsKLQkJZW50cnktPmNlX3Jlc3VzZWQgPSAwOwotCQllbnRyeS0+Y2VfcnBjaGRybGVuID0gMDsKLQkJZHByaW50aygiJXMgSnVzdCBjYWNoZSBTRVFVRU5DRS4gY2VfY2FjaGV0aGlzICVkXG4iLCBfX2Z1bmNfXywKLQkJCXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZV9lbnRyeS5jZV9jYWNoZXRoaXMpOworCQlzbG90LT5zbF9kYXRhbGVuID0gMDsKIAkJcmV0dXJuOwogCX0KLQllbnRyeS0+Y2VfcmVzdXNlZCA9IHJxc3RwLT5ycV9yZXN1c2VkOwotCWlmIChlbnRyeS0+Y2VfcmVzdXNlZCA+IE5GU0RfUEFHRVNfUEVSX1NMT1QgKyAxKQotCQllbnRyeS0+Y2VfcmVzdXNlZCA9IE5GU0RfUEFHRVNfUEVSX1NMT1QgKyAxOwotCW5mc2Q0X2NvcHlfcGFnZXMoZW50cnktPmNlX3Jlc3BhZ2VzLCBycXN0cC0+cnFfcmVzcGFnZXMsCi0JCQkgZW50cnktPmNlX3Jlc3VzZWQpOwotCWVudHJ5LT5jZV9kYXRhdi5pb3ZfYmFzZSA9IHJlc3AtPmNzdGF0ZS5zdGF0cDsKLQllbnRyeS0+Y2VfZGF0YXYuaW92X2xlbiA9IHJlc3YtPmlvdl9sZW4gLSAoKGNoYXIgKilyZXNwLT5jc3RhdGUuc3RhdHAgLQotCQkJCShjaGFyICopcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9yZXNwYWdlc1swXSkpOwotCS8qIEN1cnJlbnQgcmVxdWVzdCBycGMgaGVhZGVyIGxlbmd0aCovCi0JZW50cnktPmNlX3JwY2hkcmxlbiA9IChjaGFyICopcmVzcC0+Y3N0YXRlLnN0YXRwIC0KLQkJCQkoY2hhciAqKXBhZ2VfYWRkcmVzcyhycXN0cC0+cnFfcmVzcGFnZXNbMF0pOworCXNsb3QtPnNsX2RhdGFsZW4gPSAoY2hhciAqKXJlc3AtPnAgLSAoY2hhciAqKXJlc3AtPmNzdGF0ZS5kYXRhcDsKKwliYXNlID0gKGNoYXIgKilyZXNwLT5jc3RhdGUuZGF0YXAgLQorCQkJCQkoY2hhciAqKXJlc3AtPnhidWYtPmhlYWRbMF0uaW92X2Jhc2U7CisJaWYgKHJlYWRfYnl0ZXNfZnJvbV94ZHJfYnVmKHJlc3AtPnhidWYsIGJhc2UsIHNsb3QtPnNsX2RhdGEsCisJCQkJICAgIHNsb3QtPnNsX2RhdGFsZW4pKQorCQlXQVJOKCIlczogc2Vzc2lvbnMgRFJDIGNvdWxkIG5vdCBjYWNoZSBjb21wb3VuZFxuIiwgX19mdW5jX18pOworCXJldHVybjsKIH0KIAogLyoKLSAqIFdlIGtlZXAgdGhlIHJwYyBoZWFkZXIsIGJ1dCB0YWtlIHRoZSBuZnMgcmVwbHkgZnJvbSB0aGUgcmVwbHljYWNoZS4KKyAqIEVuY29kZSB0aGUgcmVwbGF5IHNlcXVlbmNlIG9wZXJhdGlvbiBmcm9tIHRoZSBzbG90IHZhbHVlcy4KKyAqIElmIGNhY2hldGhpcyBpcyBGQUxTRSBlbmNvZGUgdGhlIHVuY2FjaGVkIHJlcCBlcnJvciBvbiB0aGUgbmV4dAorICogb3BlcmF0aW9uIHdoaWNoIHNldHMgcmVzcC0+cCBhbmQgaW5jcmVtZW50cyByZXNwLT5vcGNudCBmb3IKKyAqIG5mczRzdmNfZW5jb2RlX2NvbXBvdW5kcmVzLgorICoKICAqLwotc3RhdGljIGludAotbmZzZDQxX2NvcHlfcmVwbGF5X2RhdGEoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLAotCQkJc3RydWN0IG5mc2Q0X2NhY2hlX2VudHJ5ICplbnRyeSkKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X2VuY19zZXF1ZW5jZV9yZXBsYXkoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncywKKwkJCSAgc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwKQogewotCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSByZXNwLT5ycXN0cDsKLQlzdHJ1Y3Qga3ZlYyAqcmVzdiA9ICZyZXNwLT5ycXN0cC0+cnFfcmVzLmhlYWRbMF07Ci0JaW50IGxlbjsKKwlzdHJ1Y3QgbmZzZDRfb3AgKm9wOworCXN0cnVjdCBuZnNkNF9zbG90ICpzbG90ID0gcmVzcC0+Y3N0YXRlLnNsb3Q7CiAKLQkvKiBDdXJyZW50IHJlcXVlc3QgcnBjIGhlYWRlciBsZW5ndGgqLwotCWxlbiA9IChjaGFyICopcmVzcC0+Y3N0YXRlLnN0YXRwIC0KLQkJCShjaGFyICopcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9yZXNwYWdlc1swXSk7Ci0JaWYgKGVudHJ5LT5jZV9kYXRhdi5pb3ZfbGVuICsgbGVuID4gUEFHRV9TSVpFKSB7Ci0JCWRwcmludGsoIiVzIHY0MSBjYWNoZWQgcmVwbHkgdG9vIGxhcmdlICglWmQpLlxuIiwgX19mdW5jX18sCi0JCQllbnRyeS0+Y2VfZGF0YXYuaW92X2xlbik7Ci0JCXJldHVybiAwOworCWRwcmludGsoIi0tPiAlcyByZXNwLT5vcGNudCAlZCBjYWNoZXRoaXMgJXUgXG4iLCBfX2Z1bmNfXywKKwkJcmVzcC0+b3BjbnQsIHJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZXRoaXMpOworCisJLyogRW5jb2RlIHRoZSByZXBsYXllZCBzZXF1ZW5jZSBvcGVyYXRpb24gKi8KKwlvcCA9ICZhcmdzLT5vcHNbcmVzcC0+b3BjbnQgLSAxXTsKKwluZnNkNF9lbmNvZGVfb3BlcmF0aW9uKHJlc3AsIG9wKTsKKworCS8qIFJldHVybiBuZnNlcnJfcmV0cnlfdW5jYWNoZWRfcmVwIGluIG5leHQgb3BlcmF0aW9uLiAqLworCWlmIChhcmdzLT5vcGNudCA+IDEgJiYgc2xvdC0+c2xfY2FjaGV0aGlzID09IDApIHsKKwkJb3AgPSAmYXJncy0+b3BzW3Jlc3AtPm9wY250KytdOworCQlvcC0+c3RhdHVzID0gbmZzZXJyX3JldHJ5X3VuY2FjaGVkX3JlcDsKKwkJbmZzZDRfZW5jb2RlX29wZXJhdGlvbihyZXNwLCBvcCk7CiAJfQotCS8qIGNvcHkgdGhlIGNhY2hlZCByZXBseSBuZnNkIGRhdGEgcGFzdCB0aGUgY3VycmVudCBycGMgaGVhZGVyICovCi0JbWVtY3B5KChjaGFyICopcmVzdi0+aW92X2Jhc2UgKyBsZW4sIGVudHJ5LT5jZV9kYXRhdi5pb3ZfYmFzZSwKLQkJZW50cnktPmNlX2RhdGF2Lmlvdl9sZW4pOwotCXJlc3YtPmlvdl9sZW4gPSBsZW4gKyBlbnRyeS0+Y2VfZGF0YXYuaW92X2xlbjsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gb3AtPnN0YXR1czsKIH0KIAogLyoKLSAqIEtlZXAgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHJlcGxheS4gQ29weSB0aGUgTkZTdjQuMSBkYXRhIGZyb20gdGhlIGZpcnN0Ci0gKiBjYWNoZWQgcGFnZS4gIFJlcGxhY2UgYW55IGZ1dGhlciByZXBsYXkgcGFnZXMgZnJvbSB0aGUgY2FjaGUuCisgKiBUaGUgc2VxdWVuY2Ugb3BlcmF0aW9uIGlzIG5vdCBjYWNoZWQgYmVjYXVzZSB3ZSBjYW4gdXNlIHRoZSBzbG90IGFuZAorICogc2Vzc2lvbiB2YWx1ZXMuCiAgKi8KIF9fYmUzMgogbmZzZDRfcmVwbGF5X2NhY2hlX2VudHJ5KHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwKIAkJCSBzdHJ1Y3QgbmZzZDRfc2VxdWVuY2UgKnNlcSkKIHsKLQlzdHJ1Y3QgbmZzZDRfY2FjaGVfZW50cnkgKmVudHJ5ID0gJnJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZV9lbnRyeTsKKwlzdHJ1Y3QgbmZzZDRfc2xvdCAqc2xvdCA9IHJlc3AtPmNzdGF0ZS5zbG90OwogCV9fYmUzMiBzdGF0dXM7CiAKLQlkcHJpbnRrKCItLT4gJXMgZW50cnkgJXBcbiIsIF9fZnVuY19fLCBlbnRyeSk7CisJZHByaW50aygiLS0+ICVzIHNsb3QgJXBcbiIsIF9fZnVuY19fLCBzbG90KTsKIAotCS8qCi0JICogSWYgdGhpcyBpcyBqdXN0IHRoZSBzZXF1ZW5jZSBvcGVyYXRpb24sIHdlIGRpZCBub3Qga2VlcAotCSAqIGEgcGFnZSBpbiB0aGUgY2FjaGUgZW50cnkgYmVjYXVzZSB3ZSBjYW4ganVzdCB1c2UgdGhlCi0JICogc2xvdCBpbmZvIHN0b3JlZCBpbiBzdHJ1Y3QgbmZzZDRfc2VxdWVuY2UgdGhhdCB3YXMgY2hlY2tlZAotCSAqIGFnYWluc3QgdGhlIHNsb3QgaW4gbmZzZDRfc2VxdWVuY2UoKS4KLQkgKgotCSAqIFRoaXMgb2NjdXJzIHdoZW4gc2VxLT5jYWNoZXRoaXMgaXMgRkFMU0UsIG9yIHdoZW4gdGhlIGNsaWVudAotCSAqIHNlc3Npb24gaW5hY3Rpdml0eSB0aW1lciBmaXJlcyBhbmQgYSBzb2xvIHNlcXVlbmNlIG9wZXJhdGlvbgotCSAqIGlzIHNlbnQgKGxlYXNlIHJlbmV3YWwpLgotCSAqLwotCWlmIChzZXEgJiYgbmZzZDRfbm90X2NhY2hlZChyZXNwKSkgewotCQlzZXEtPm1heHNsb3RzID0gcmVzcC0+Y3N0YXRlLnNlc3Npb24tPnNlX2ZjaGFubmVsLm1heHJlcXM7Ci0JCXJldHVybiBuZnNfb2s7Ci0JfQorCS8qIEVpdGhlciByZXR1cm5zIDAgb3IgbmZzZXJyX3JldHJ5X3VuY2FjaGVkICovCisJc3RhdHVzID0gbmZzZDRfZW5jX3NlcXVlbmNlX3JlcGxheShyZXNwLT5ycXN0cC0+cnFfYXJncCwgcmVzcCk7CisJaWYgKHN0YXR1cyA9PSBuZnNlcnJfcmV0cnlfdW5jYWNoZWRfcmVwKQorCQlyZXR1cm4gc3RhdHVzOwogCi0JaWYgKCFuZnNkNDFfY29weV9yZXBsYXlfZGF0YShyZXNwLCBlbnRyeSkpIHsKLQkJLyoKLQkJICogTm90IGVub3VnaCByb29tIHRvIHVzZSB0aGUgcmVwbGF5IHJwYyBoZWFkZXIsIHNlbmQgdGhlCi0JCSAqIGNhY2hlZCBoZWFkZXIuIFJlbGVhc2UgYWxsIHRoZSBhbGxvY2F0ZWQgcmVzdWx0IHBhZ2VzLgotCQkgKi8KLQkJc3ZjX2ZyZWVfcmVzX3BhZ2VzKHJlc3AtPnJxc3RwKTsKLQkJbmZzZDRfY29weV9wYWdlcyhyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXMsIGVudHJ5LT5jZV9yZXNwYWdlcywKLQkJCWVudHJ5LT5jZV9yZXN1c2VkKTsKLQl9IGVsc2UgewotCQkvKiBSZWxlYXNlIGFsbCBidXQgdGhlIGZpcnN0IGFsbG9jYXRlZCByZXN1bHQgcGFnZSAqLworCS8qIFRoZSBzZXF1ZW5jZSBvcGVyYXRpb24gaGFzIGJlZW4gZW5jb2RlZCwgY3N0YXRlLT5kYXRhcCBzZXQuICovCisJbWVtY3B5KHJlc3AtPmNzdGF0ZS5kYXRhcCwgc2xvdC0+c2xfZGF0YSwgc2xvdC0+c2xfZGF0YWxlbik7CiAKLQkJcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQtLTsKLQkJc3ZjX2ZyZWVfcmVzX3BhZ2VzKHJlc3AtPnJxc3RwKTsKLQotCQluZnNkNF9jb3B5X3BhZ2VzKCZyZXNwLT5ycXN0cC0+cnFfcmVzcGFnZXNbMV0sCi0JCQkJICZlbnRyeS0+Y2VfcmVzcGFnZXNbMV0sCi0JCQkJIGVudHJ5LT5jZV9yZXN1c2VkIC0gMSk7Ci0JfQotCi0JcmVzcC0+cnFzdHAtPnJxX3Jlc3VzZWQgPSBlbnRyeS0+Y2VfcmVzdXNlZDsKLQlyZXNwLT5vcGNudCA9IGVudHJ5LT5jZV9vcGNudDsKLQlyZXNwLT5jc3RhdGUuaW92bGVuID0gZW50cnktPmNlX2RhdGF2Lmlvdl9sZW4gKyBlbnRyeS0+Y2VfcnBjaGRybGVuOwotCXN0YXR1cyA9IGVudHJ5LT5jZV9zdGF0dXM7CisJcmVzcC0+b3BjbnQgPSBzbG90LT5zbF9vcGNudDsKKwlyZXNwLT5wID0gcmVzcC0+Y3N0YXRlLmRhdGFwICsgWERSX1FVQURMRU4oc2xvdC0+c2xfZGF0YWxlbik7CisJc3RhdHVzID0gc2xvdC0+c2xfc3RhdHVzOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTExOTQsMTMgKzExMTksMTUgQEAKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludAkJc3RyaGFzaHZhbDsKIAljaGFyCQkJZG5hbWVbSEVYRElSX0xFTl07CisJY2hhcgkJCWFkZHJfc3RyW0lORVQ2X0FERFJTVFJMRU5dOwogCW5mczRfdmVyaWZpZXIJCXZlcmYgPSBleGlkLT52ZXJpZmllcjsKLQl1MzIJCQlpcF9hZGRyID0gc3ZjX2FkZHJfaW4ocnFzdHApLT5zaW5fYWRkci5zX2FkZHI7CisJc3RydWN0IHNvY2thZGRyCQkqc2EgPSBzdmNfYWRkcihycXN0cCk7CiAKKwlycGNfbnRvcChzYSwgYWRkcl9zdHIsIHNpemVvZihhZGRyX3N0cikpOwogCWRwcmludGsoIiVzIHJxc3RwPSVwIGV4aWQ9JXAgY2xuYW1lLmxlbj0ldSBjbG5hbWUuZGF0YT0lcCAiCi0JCSIgaXBfYWRkcj0ldSBmbGFncyAleCwgc3BhX2hvdyAlZFxuIiwKKwkJImlwX2FkZHI9JXMgZmxhZ3MgJXgsIHNwYV9ob3cgJWRcbiIsCiAJCV9fZnVuY19fLCBycXN0cCwgZXhpZCwgZXhpZC0+Y2xuYW1lLmxlbiwgZXhpZC0+Y2xuYW1lLmRhdGEsCi0JCWlwX2FkZHIsIGV4aWQtPmZsYWdzLCBleGlkLT5zcGFfaG93KTsKKwkJYWRkcl9zdHIsIGV4aWQtPmZsYWdzLCBleGlkLT5zcGFfaG93KTsKIAogCWlmICghY2hlY2tfbmFtZShleGlkLT5jbG5hbWUpIHx8IChleGlkLT5mbGFncyAmIH5FWENIR0lENF9GTEFHX01BU0tfQSkpCiAJCXJldHVybiBuZnNlcnJfaW52YWw7CkBAIC0xMjgxLDI4ICsxMjA4LDIzIEBACiAKIG91dF9uZXc6CiAJLyogTm9ybWFsIGNhc2UgKi8KLQluZXcgPSBjcmVhdGVfY2xpZW50KGV4aWQtPmNsbmFtZSwgZG5hbWUpOworCW5ldyA9IGNyZWF0ZV9jbGllbnQoZXhpZC0+Y2xuYW1lLCBkbmFtZSwgcnFzdHAsICZ2ZXJmKTsKIAlpZiAobmV3ID09IE5VTEwpIHsKLQkJc3RhdHVzID0gbmZzZXJyX3Jlc291cmNlOworCQlzdGF0dXMgPSBuZnNlcnJfc2VydmVyZmF1bHQ7CiAJCWdvdG8gb3V0OwogCX0KIAotCWNvcHlfdmVyZihuZXcsICZ2ZXJmKTsKLQljb3B5X2NyZWQoJm5ldy0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKTsKLQluZXctPmNsX2FkZHIgPSBpcF9hZGRyOwogCWdlbl9jbGlkKG5ldyk7Ci0JZ2VuX2NvbmZpcm0obmV3KTsKIAlhZGRfdG9fdW5jb25maXJtZWQobmV3LCBzdHJoYXNodmFsKTsKIG91dF9jb3B5OgogCWV4aWQtPmNsaWVudGlkLmNsX2Jvb3QgPSBuZXctPmNsX2NsaWVudGlkLmNsX2Jvb3Q7CiAJZXhpZC0+Y2xpZW50aWQuY2xfaWQgPSBuZXctPmNsX2NsaWVudGlkLmNsX2lkOwogCi0JbmV3LT5jbF9zbG90LnNsX3NlcWlkID0gMDsKIAlleGlkLT5zZXFpZCA9IDE7CiAJbmZzZDRfc2V0X2V4X2ZsYWdzKG5ldywgZXhpZCk7CiAKIAlkcHJpbnRrKCJuZnNkNF9leGNoYW5nZV9pZCBzZXFpZCAlZCBmbGFncyAleFxuIiwKLQkJbmV3LT5jbF9zbG90LnNsX3NlcWlkLCBuZXctPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKKwkJbmV3LT5jbF9jc19zbG90LnNsX3NlcWlkLCBuZXctPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKIAlzdGF0dXMgPSBuZnNfb2s7CiAKIG91dDoKQEAgLTEzMTMsNDAgKzEyMzUsNjAgQEAKIH0KIAogc3RhdGljIGludAotY2hlY2tfc2xvdF9zZXFpZCh1MzIgc2VxaWQsIHN0cnVjdCBuZnNkNF9zbG90ICpzbG90KQorY2hlY2tfc2xvdF9zZXFpZCh1MzIgc2VxaWQsIHUzMiBzbG90X3NlcWlkLCBpbnQgc2xvdF9pbnVzZSkKIHsKLQlkcHJpbnRrKCIlcyBlbnRlci4gc2VxaWQgJWQgc2xvdC0+c2xfc2VxaWQgJWRcbiIsIF9fZnVuY19fLCBzZXFpZCwKLQkJc2xvdC0+c2xfc2VxaWQpOworCWRwcmludGsoIiVzIGVudGVyLiBzZXFpZCAlZCBzbG90X3NlcWlkICVkXG4iLCBfX2Z1bmNfXywgc2VxaWQsCisJCXNsb3Rfc2VxaWQpOwogCiAJLyogVGhlIHNsb3QgaXMgaW4gdXNlLCBhbmQgbm8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudC4gKi8KLQlpZiAoc2xvdC0+c2xfaW51c2UpIHsKLQkJaWYgKHNlcWlkID09IHNsb3QtPnNsX3NlcWlkKQorCWlmIChzbG90X2ludXNlKSB7CisJCWlmIChzZXFpZCA9PSBzbG90X3NlcWlkKQogCQkJcmV0dXJuIG5mc2Vycl9qdWtlYm94OwogCQllbHNlCiAJCQlyZXR1cm4gbmZzZXJyX3NlcV9taXNvcmRlcmVkOwogCX0KIAkvKiBOb3JtYWwgKi8KLQlpZiAobGlrZWx5KHNlcWlkID09IHNsb3QtPnNsX3NlcWlkICsgMSkpCisJaWYgKGxpa2VseShzZXFpZCA9PSBzbG90X3NlcWlkICsgMSkpCiAJCXJldHVybiBuZnNfb2s7CiAJLyogUmVwbGF5ICovCi0JaWYgKHNlcWlkID09IHNsb3QtPnNsX3NlcWlkKQorCWlmIChzZXFpZCA9PSBzbG90X3NlcWlkKQogCQlyZXR1cm4gbmZzZXJyX3JlcGxheV9jYWNoZTsKIAkvKiBXcmFwYXJvdW5kICovCi0JaWYgKHNlcWlkID09IDEgJiYgKHNsb3QtPnNsX3NlcWlkICsgMSkgPT0gMCkKKwlpZiAoc2VxaWQgPT0gMSAmJiAoc2xvdF9zZXFpZCArIDEpID09IDApCiAJCXJldHVybiBuZnNfb2s7CiAJLyogTWlzb3JkZXJlZCByZXBsYXkgb3IgbWlzb3JkZXJlZCBuZXcgcmVxdWVzdCAqLwogCXJldHVybiBuZnNlcnJfc2VxX21pc29yZGVyZWQ7CiB9CiAKKy8qCisgKiBDYWNoZSB0aGUgY3JlYXRlIHNlc3Npb24gcmVzdWx0IGludG8gdGhlIGNyZWF0ZSBzZXNzaW9uIHNpbmdsZSBEUkMKKyAqIHNsb3QgY2FjaGUgYnkgc2F2aW5nIHRoZSB4ZHIgc3RydWN0dXJlLiBzbF9zZXFpZCBoYXMgYmVlbiBzZXQuCisgKiBEbyB0aGlzIGZvciBzb2xvIG9yIGVtYmVkZGVkIGNyZWF0ZSBzZXNzaW9uIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCituZnNkNF9jYWNoZV9jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24gKmNyX3NlcywKKwkJCSAgIHN0cnVjdCBuZnNkNF9jbGlkX3Nsb3QgKnNsb3QsIGludCBuZnNlcnIpCit7CisJc2xvdC0+c2xfc3RhdHVzID0gbmZzZXJyOworCW1lbWNweSgmc2xvdC0+c2xfY3Jfc2VzLCBjcl9zZXMsIHNpemVvZigqY3Jfc2VzKSk7Cit9CisKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X3JlcGxheV9jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24gKmNyX3NlcywKKwkJCSAgICBzdHJ1Y3QgbmZzZDRfY2xpZF9zbG90ICpzbG90KQoreworCW1lbWNweShjcl9zZXMsICZzbG90LT5zbF9jcl9zZXMsIHNpemVvZigqY3Jfc2VzKSk7CisJcmV0dXJuIHNsb3QtPnNsX3N0YXR1czsKK30KKwogX19iZTMyCiBuZnNkNF9jcmVhdGVfc2Vzc2lvbihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAogCQkgICAgIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAogCQkgICAgIHN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbiAqY3Jfc2VzKQogewotCXUzMiBpcF9hZGRyID0gc3ZjX2FkZHJfaW4ocnFzdHApLT5zaW5fYWRkci5zX2FkZHI7Ci0Jc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwID0gcnFzdHAtPnJxX3Jlc3A7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IHN2Y19hZGRyKHJxc3RwKTsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNvbmYsICp1bmNvbmY7Ci0Jc3RydWN0IG5mc2Q0X3Nsb3QgKnNsb3QgPSBOVUxMOworCXN0cnVjdCBuZnNkNF9jbGlkX3Nsb3QgKmNzX3Nsb3QgPSBOVUxMOwogCWludCBzdGF0dXMgPSAwOwogCiAJbmZzNF9sb2NrX3N0YXRlKCk7CkBAIC0xMzU0LDQwICsxMjk2LDM4IEBACiAJY29uZiA9IGZpbmRfY29uZmlybWVkX2NsaWVudCgmY3Jfc2VzLT5jbGllbnRpZCk7CiAKIAlpZiAoY29uZikgewotCQlzbG90ID0gJmNvbmYtPmNsX3Nsb3Q7Ci0JCXN0YXR1cyA9IGNoZWNrX3Nsb3Rfc2VxaWQoY3Jfc2VzLT5zZXFpZCwgc2xvdCk7CisJCWNzX3Nsb3QgPSAmY29uZi0+Y2xfY3Nfc2xvdDsKKwkJc3RhdHVzID0gY2hlY2tfc2xvdF9zZXFpZChjcl9zZXMtPnNlcWlkLCBjc19zbG90LT5zbF9zZXFpZCwgMCk7CiAJCWlmIChzdGF0dXMgPT0gbmZzZXJyX3JlcGxheV9jYWNoZSkgewogCQkJZHByaW50aygiR290IGEgY3JlYXRlX3Nlc3Npb24gcmVwbGF5ISBzZXFpZD0gJWRcbiIsCi0JCQkJc2xvdC0+c2xfc2VxaWQpOwotCQkJY3N0YXRlLT5zbG90ID0gc2xvdDsKLQkJCWNzdGF0ZS0+c3RhdHVzID0gc3RhdHVzOworCQkJCWNzX3Nsb3QtPnNsX3NlcWlkKTsKIAkJCS8qIFJldHVybiB0aGUgY2FjaGVkIHJlcGx5IHN0YXR1cyAqLwotCQkJc3RhdHVzID0gbmZzZDRfcmVwbGF5X2NhY2hlX2VudHJ5KHJlc3AsIE5VTEwpOworCQkJc3RhdHVzID0gbmZzZDRfcmVwbGF5X2NyZWF0ZV9zZXNzaW9uKGNyX3NlcywgY3Nfc2xvdCk7CiAJCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmIChjcl9zZXMtPnNlcWlkICE9IGNvbmYtPmNsX3Nsb3Quc2xfc2VxaWQgKyAxKSB7CisJCX0gZWxzZSBpZiAoY3Jfc2VzLT5zZXFpZCAhPSBjc19zbG90LT5zbF9zZXFpZCArIDEpIHsKIAkJCXN0YXR1cyA9IG5mc2Vycl9zZXFfbWlzb3JkZXJlZDsKIAkJCWRwcmludGsoIlNlcXVlbmNlIG1pc29yZGVyZWQhXG4iKTsKIAkJCWRwcmludGsoIkV4cGVjdGVkIHNlcWlkPSAlZCBidXQgZ290IHNlcWlkPSAlZFxuIiwKLQkJCQlzbG90LT5zbF9zZXFpZCwgY3Jfc2VzLT5zZXFpZCk7CisJCQkJY3Nfc2xvdC0+c2xfc2VxaWQsIGNyX3Nlcy0+c2VxaWQpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJY29uZi0+Y2xfc2xvdC5zbF9zZXFpZCsrOworCQljc19zbG90LT5zbF9zZXFpZCsrOwogCX0gZWxzZSBpZiAodW5jb25mKSB7CiAJCWlmICghc2FtZV9jcmVkcygmdW5jb25mLT5jbF9jcmVkLCAmcnFzdHAtPnJxX2NyZWQpIHx8Ci0JCSAgICAoaXBfYWRkciAhPSB1bmNvbmYtPmNsX2FkZHIpKSB7CisJCSAgICAhcnBjX2NtcF9hZGRyKHNhLCAoc3RydWN0IHNvY2thZGRyICopICZ1bmNvbmYtPmNsX2FkZHIpKSB7CiAJCQlzdGF0dXMgPSBuZnNlcnJfY2xpZF9pbnVzZTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc2xvdCA9ICZ1bmNvbmYtPmNsX3Nsb3Q7Ci0JCXN0YXR1cyA9IGNoZWNrX3Nsb3Rfc2VxaWQoY3Jfc2VzLT5zZXFpZCwgc2xvdCk7CisJCWNzX3Nsb3QgPSAmdW5jb25mLT5jbF9jc19zbG90OworCQlzdGF0dXMgPSBjaGVja19zbG90X3NlcWlkKGNyX3Nlcy0+c2VxaWQsIGNzX3Nsb3QtPnNsX3NlcWlkLCAwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJLyogYW4gdW5jb25maXJtZWQgcmVwbGF5IHJldHVybnMgbWlzb3JkZXJlZCAqLwogCQkJc3RhdHVzID0gbmZzZXJyX3NlcV9taXNvcmRlcmVkOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9jYWNoZTsKIAkJfQogCi0JCXNsb3QtPnNsX3NlcWlkKys7IC8qIGZyb20gMCB0byAxICovCisJCWNzX3Nsb3QtPnNsX3NlcWlkKys7IC8qIGZyb20gMCB0byAxICovCiAJCW1vdmVfdG9fY29uZmlybWVkKHVuY29uZik7CiAKIAkJLyoKQEAgLTEzOTYsNiArMTMzNiwxOSBAQAogCQljcl9zZXMtPmZsYWdzICY9IH5TRVNTSU9ONF9QRVJTSVNUOwogCQljcl9zZXMtPmZsYWdzICY9IH5TRVNTSU9ONF9SRE1BOwogCisJCWlmIChjcl9zZXMtPmZsYWdzICYgU0VTU0lPTjRfQkFDS19DSEFOKSB7CisJCQl1bmNvbmYtPmNsX2NiX3hwcnQgPSBycXN0cC0+cnFfeHBydDsKKwkJCXN2Y194cHJ0X2dldCh1bmNvbmYtPmNsX2NiX3hwcnQpOworCQkJcnBjX2NvcHlfYWRkcigKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJnVuY29uZi0+Y2xfY2JfY29ubi5jYl9hZGRyLAorCQkJCXNhKTsKKwkJCXVuY29uZi0+Y2xfY2JfY29ubi5jYl9hZGRybGVuID0gc3ZjX2FkZHJfbGVuKHNhKTsKKwkJCXVuY29uZi0+Y2xfY2JfY29ubi5jYl9taW5vcnZlcnNpb24gPQorCQkJCWNzdGF0ZS0+bWlub3J2ZXJzaW9uOworCQkJdW5jb25mLT5jbF9jYl9jb25uLmNiX3Byb2cgPSBjcl9zZXMtPmNhbGxiYWNrX3Byb2c7CisJCQl1bmNvbmYtPmNsX2NiX3NlcV9uciA9IDE7CisJCQluZnNkNF9wcm9iZV9jYWxsYmFjayh1bmNvbmYpOworCQl9CiAJCWNvbmYgPSB1bmNvbmY7CiAJfSBlbHNlIHsKIAkJc3RhdHVzID0gbmZzZXJyX3N0YWxlX2NsaWVudGlkOwpAQCAtMTQwOCwxMiArMTM2MSwxMSBAQAogCiAJbWVtY3B5KGNyX3Nlcy0+c2Vzc2lvbmlkLmRhdGEsIGNvbmYtPmNsX3Nlc3Npb25pZC5kYXRhLAogCSAgICAgICBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQljcl9zZXMtPnNlcWlkID0gc2xvdC0+c2xfc2VxaWQ7CisJY3Jfc2VzLT5zZXFpZCA9IGNzX3Nsb3QtPnNsX3NlcWlkOwogCi0Jc2xvdC0+c2xfaW51c2UgPSB0cnVlOwotCWNzdGF0ZS0+c2xvdCA9IHNsb3Q7Ci0JLyogRW5zdXJlIGEgcGFnZSBpcyB1c2VkIGZvciB0aGUgY2FjaGUgKi8KLQlzbG90LT5zbF9jYWNoZV9lbnRyeS5jZV9jYWNoZXRoaXMgPSAxOworb3V0X2NhY2hlOgorCS8qIGNhY2hlIHNvbG8gYW5kIGVtYmVkZGVkIGNyZWF0ZSBzZXNzaW9ucyB1bmRlciB0aGUgc3RhdGUgbG9jayAqLworCW5mc2Q0X2NhY2hlX2NyZWF0ZV9zZXNzaW9uKGNyX3NlcywgY3Nfc2xvdCwgc3RhdHVzKTsKIG91dDoKIAluZnM0X3VubG9ja19zdGF0ZSgpOwogCWRwcmludGsoIiVzIHJldHVybnMgJWRcbiIsIF9fZnVuY19fLCBudG9obChzdGF0dXMpKTsKQEAgLTE0NzgsMTggKzE0MzAsMjMgQEAKIAlpZiAoc2VxLT5zbG90aWQgPj0gc2Vzc2lvbi0+c2VfZmNoYW5uZWwubWF4cmVxcykKIAkJZ290byBvdXQ7CiAKLQlzbG90ID0gJnNlc3Npb24tPnNlX3Nsb3RzW3NlcS0+c2xvdGlkXTsKKwlzbG90ID0gc2Vzc2lvbi0+c2Vfc2xvdHNbc2VxLT5zbG90aWRdOwogCWRwcmludGsoIiVzOiBzbG90aWQgJWRcbiIsIF9fZnVuY19fLCBzZXEtPnNsb3RpZCk7CiAKLQlzdGF0dXMgPSBjaGVja19zbG90X3NlcWlkKHNlcS0+c2VxaWQsIHNsb3QpOworCS8qIFdlIGRvIG5vdCBuZWdvdGlhdGUgdGhlIG51bWJlciBvZiBzbG90cyB5ZXQsIHNvIHNldCB0aGUKKwkgKiBtYXhzbG90cyB0byB0aGUgc2Vzc2lvbiBtYXhyZXFzIHdoaWNoIGlzIHVzZWQgdG8gZW5jb2RlCisJICogc3JfaGlnaGVzdF9zbG90aWQgYW5kIHRoZSBzcl90YXJnZXRfc2xvdCBpZCB0byBtYXhzbG90cyAqLworCXNlcS0+bWF4c2xvdHMgPSBzZXNzaW9uLT5zZV9mY2hhbm5lbC5tYXhyZXFzOworCisJc3RhdHVzID0gY2hlY2tfc2xvdF9zZXFpZChzZXEtPnNlcWlkLCBzbG90LT5zbF9zZXFpZCwgc2xvdC0+c2xfaW51c2UpOwogCWlmIChzdGF0dXMgPT0gbmZzZXJyX3JlcGxheV9jYWNoZSkgewogCQljc3RhdGUtPnNsb3QgPSBzbG90OwogCQljc3RhdGUtPnNlc3Npb24gPSBzZXNzaW9uOwogCQkvKiBSZXR1cm4gdGhlIGNhY2hlZCByZXBseSBzdGF0dXMgYW5kIHNldCBjc3RhdGUtPnN0YXR1cwotCQkgKiBmb3IgbmZzZDRfc3ZjX2VuY29kZV9jb21wb3VuZHJlcyBwcm9jZXNzaW5nICovCisJCSAqIGZvciBuZnNkNF9wcm9jX2NvbXBvdW5kIHByb2Nlc3NpbmcgKi8KIAkJc3RhdHVzID0gbmZzZDRfcmVwbGF5X2NhY2hlX2VudHJ5KHJlc3AsIHNlcSk7CiAJCWNzdGF0ZS0+c3RhdHVzID0gbmZzZXJyX3JlcGxheV9jYWNoZTsKLQkJZ290byByZXBsYXlfY2FjaGU7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKQEAgLTE0OTcsMjMgKzE0NTQsMjMgQEAKIAkvKiBTdWNjZXNzISBidW1wIHNsb3Qgc2VxaWQgKi8KIAlzbG90LT5zbF9pbnVzZSA9IHRydWU7CiAJc2xvdC0+c2xfc2VxaWQgPSBzZXEtPnNlcWlkOwotCXNsb3QtPnNsX2NhY2hlX2VudHJ5LmNlX2NhY2hldGhpcyA9IHNlcS0+Y2FjaGV0aGlzOwotCS8qIEFsd2F5cyBzZXQgdGhlIGNhY2hlIGVudHJ5IGNhY2hldGhpcyBmb3Igc29sbyBzZXF1ZW5jZSAqLwotCWlmIChuZnNkNF9pc19zb2xvX3NlcXVlbmNlKHJlc3ApKQotCQlzbG90LT5zbF9jYWNoZV9lbnRyeS5jZV9jYWNoZXRoaXMgPSAxOworCXNsb3QtPnNsX2NhY2hldGhpcyA9IHNlcS0+Y2FjaGV0aGlzOwogCiAJY3N0YXRlLT5zbG90ID0gc2xvdDsKIAljc3RhdGUtPnNlc3Npb24gPSBzZXNzaW9uOwogCi1yZXBsYXlfY2FjaGU6Ci0JLyogUmVuZXcgdGhlIGNsaWVudGlkIG9uIHN1Y2Nlc3MgYW5kIG9uIHJlcGxheS4KLQkgKiBIb2xkIGEgc2Vzc2lvbiByZWZlcmVuY2UgdW50aWwgZG9uZSBwcm9jZXNzaW5nIHRoZSBjb21wb3VuZDoKKwkvKiBIb2xkIGEgc2Vzc2lvbiByZWZlcmVuY2UgdW50aWwgZG9uZSBwcm9jZXNzaW5nIHRoZSBjb21wb3VuZDoKIAkgKiBuZnNkNF9wdXRfc2Vzc2lvbiBjYWxsZWQgb25seSBpZiB0aGUgY3N0YXRlIHNsb3QgaXMgc2V0LgogCSAqLwotCXJlbmV3X2NsaWVudChzZXNzaW9uLT5zZV9jbGllbnQpOwogCW5mc2Q0X2dldF9zZXNzaW9uKHNlc3Npb24pOwogb3V0OgogCXNwaW5fdW5sb2NrKCZzZXNzaW9uaWRfbG9jayk7CisJLyogUmVuZXcgdGhlIGNsaWVudGlkIG9uIHN1Y2Nlc3MgYW5kIG9uIHJlcGxheSAqLworCWlmIChjc3RhdGUtPnNlc3Npb24pIHsKKwkJbmZzNF9sb2NrX3N0YXRlKCk7CisJCXJlbmV3X2NsaWVudChzZXNzaW9uLT5zZV9jbGllbnQpOworCQluZnM0X3VubG9ja19zdGF0ZSgpOworCX0KIAlkcHJpbnRrKCIlczogcmV0dXJuICVkXG4iLCBfX2Z1bmNfXywgbnRvaGwoc3RhdHVzKSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTE1MjIsNyArMTQ3OSw3IEBACiBuZnNkNF9zZXRjbGllbnRpZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKIAkJICBzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWQgKnNldGNsaWQpCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luCSpzaW4gPSBzdmNfYWRkcl9pbihycXN0cCk7CisJc3RydWN0IHNvY2thZGRyCQkqc2EgPSBzdmNfYWRkcihycXN0cCk7CiAJc3RydWN0IHhkcl9uZXRvYmogCWNsbmFtZSA9IHsgCiAJCS5sZW4gPSBzZXRjbGlkLT5zZV9uYW1lbGVuLAogCQkuZGF0YSA9IHNldGNsaWQtPnNlX25hbWUsCkBAIC0xNTMxLDcgKzE0ODgsNiBAQAogCXVuc2lnbmVkIGludCAJCXN0cmhhc2h2YWw7CiAJc3RydWN0IG5mczRfY2xpZW50CSpjb25mLCAqdW5jb25mLCAqbmV3OwogCV9fYmUzMiAJCQlzdGF0dXM7Ci0JY2hhcgkJCSpwcmluYzsKIAljaGFyICAgICAgICAgICAgICAgICAgICBkbmFtZVtIRVhESVJfTEVOXTsKIAkKIAlpZiAoIWNoZWNrX25hbWUoY2xuYW1lKSkKQEAgLTE1NTQsOCArMTUxMCwxMSBAQAogCQkvKiBSRkMgMzUzMCAxNC4yLjMzIENBU0UgMDogKi8KIAkJc3RhdHVzID0gbmZzZXJyX2NsaWRfaW51c2U7CiAJCWlmICghc2FtZV9jcmVkcygmY29uZi0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKSkgewotCQkJZHByaW50aygiTkZTRDogc2V0Y2xpZW50aWQ6IHN0cmluZyBpbiB1c2UgYnkgY2xpZW50IgotCQkJCSIgYXQgJXBJNFxuIiwgJmNvbmYtPmNsX2FkZHIpOworCQkJY2hhciBhZGRyX3N0cltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCXJwY19udG9wKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbmYtPmNsX2FkZHIsIGFkZHJfc3RyLAorCQkJCSBzaXplb2YoYWRkcl9zdHIpKTsKKwkJCWRwcmludGsoIk5GU0Q6IHNldGNsaWVudGlkOiBzdHJpbmcgaW4gdXNlIGJ5IGNsaWVudCAiCisJCQkJImF0ICVzXG4iLCBhZGRyX3N0cik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTE1NzMsNyArMTUzMiw3IEBACiAJCSAqLwogCQlpZiAodW5jb25mKQogCQkJZXhwaXJlX2NsaWVudCh1bmNvbmYpOwotCQluZXcgPSBjcmVhdGVfY2xpZW50KGNsbmFtZSwgZG5hbWUpOworCQluZXcgPSBjcmVhdGVfY2xpZW50KGNsbmFtZSwgZG5hbWUsIHJxc3RwLCAmY2x2ZXJpZmllcik7CiAJCWlmIChuZXcgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCQlnZW5fY2xpZChuZXcpOwpAQCAtMTU5MCw3ICsxNTQ5LDcgQEAKIAkJCSAqLwogCQkJZXhwaXJlX2NsaWVudCh1bmNvbmYpOwogCQl9Ci0JCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSk7CisJCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSwgcnFzdHAsICZjbHZlcmlmaWVyKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJCWNvcHlfY2xpZChuZXcsIGNvbmYpOwpAQCAtMTYwMCw3ICsxNTU5LDcgQEAKIAkJICogcHJvYmFibGUgY2xpZW50IHJlYm9vdDsgc3RhdGUgd2lsbCBiZSByZW1vdmVkIGlmCiAJCSAqIGNvbmZpcm1lZC4KIAkJICovCi0JCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSk7CisJCW5ldyA9IGNyZWF0ZV9jbGllbnQoY2xuYW1lLCBkbmFtZSwgcnFzdHAsICZjbHZlcmlmaWVyKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJCWdlbl9jbGlkKG5ldyk7CkBAIC0xNjExLDI1ICsxNTcwLDEyIEBACiAJCSAqIGNvbmZpcm1lZC4KIAkJICovCiAJCWV4cGlyZV9jbGllbnQodW5jb25mKTsKLQkJbmV3ID0gY3JlYXRlX2NsaWVudChjbG5hbWUsIGRuYW1lKTsKKwkJbmV3ID0gY3JlYXRlX2NsaWVudChjbG5hbWUsIGRuYW1lLCBycXN0cCwgJmNsdmVyaWZpZXIpOwogCQlpZiAobmV3ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIAkJZ2VuX2NsaWQobmV3KTsKIAl9Ci0JY29weV92ZXJmKG5ldywgJmNsdmVyaWZpZXIpOwotCW5ldy0+Y2xfYWRkciA9IHNpbi0+c2luX2FkZHIuc19hZGRyOwotCW5ldy0+Y2xfZmxhdm9yID0gcnFzdHAtPnJxX2ZsYXZvcjsKLQlwcmluYyA9IHN2Y19nc3NfcHJpbmNpcGFsKHJxc3RwKTsKLQlpZiAocHJpbmMpIHsKLQkJbmV3LT5jbF9wcmluY2lwYWwgPSBrc3RyZHVwKHByaW5jLCBHRlBfS0VSTkVMKTsKLQkJaWYgKG5ldy0+Y2xfcHJpbmNpcGFsID09IE5VTEwpIHsKLQkJCWZyZWVfY2xpZW50KG5ldyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQljb3B5X2NyZWQoJm5ldy0+Y2xfY3JlZCwgJnJxc3RwLT5ycV9jcmVkKTsKLQlnZW5fY29uZmlybShuZXcpOwotCWdlbl9jYWxsYmFjayhuZXcsIHNldGNsaWQpOworCWdlbl9jYWxsYmFjayhuZXcsIHNldGNsaWQsIHJwY19nZXRfc2NvcGVfaWQoc2EpKTsKIAlhZGRfdG9fdW5jb25maXJtZWQobmV3LCBzdHJoYXNodmFsKTsKIAlzZXRjbGlkLT5zZV9jbGllbnRpZC5jbF9ib290ID0gbmV3LT5jbF9jbGllbnRpZC5jbF9ib290OwogCXNldGNsaWQtPnNlX2NsaWVudGlkLmNsX2lkID0gbmV3LT5jbF9jbGllbnRpZC5jbF9pZDsKQEAgLTE2NTEsNyArMTU5Nyw3IEBACiAJCQkgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCiAJCQkgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0gKnNldGNsaWVudGlkX2NvbmZpcm0pCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBzdmNfYWRkcl9pbihycXN0cCk7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IHN2Y19hZGRyKHJxc3RwKTsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNvbmYsICp1bmNvbmY7CiAJbmZzNF92ZXJpZmllciBjb25maXJtID0gc2V0Y2xpZW50aWRfY29uZmlybS0+c2NfY29uZmlybTsgCiAJY2xpZW50aWRfdCAqIGNsaWQgPSAmc2V0Y2xpZW50aWRfY29uZmlybS0+c2NfY2xpZW50aWQ7CkBAIC0xNjcwLDkgKzE2MTYsOSBAQAogCXVuY29uZiA9IGZpbmRfdW5jb25maXJtZWRfY2xpZW50KGNsaWQpOwogCiAJc3RhdHVzID0gbmZzZXJyX2NsaWRfaW51c2U7Ci0JaWYgKGNvbmYgJiYgY29uZi0+Y2xfYWRkciAhPSBzaW4tPnNpbl9hZGRyLnNfYWRkcikKKwlpZiAoY29uZiAmJiAhcnBjX2NtcF9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbmYtPmNsX2FkZHIsIHNhKSkKIAkJZ290byBvdXQ7Ci0JaWYgKHVuY29uZiAmJiB1bmNvbmYtPmNsX2FkZHIgIT0gc2luLT5zaW5fYWRkci5zX2FkZHIpCisJaWYgKHVuY29uZiAmJiAhcnBjX2NtcF9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnVuY29uZi0+Y2xfYWRkciwgc2EpKQogCQlnb3RvIG91dDsKIAogCS8qCkBAIC0yMTYzLDcgKzIxMDksNyBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIH0KIAotc3RhdGljIHN0cnVjdCBsb2NrX21hbmFnZXJfb3BlcmF0aW9ucyBuZnNkX2xlYXNlX21uZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5mc2RfbGVhc2VfbW5nX29wcyA9IHsKIAkuZmxfYnJlYWsgPSBuZnNkX2JyZWFrX2RlbGVnX2NiLAogCS5mbF9yZWxlYXNlX3ByaXZhdGUgPSBuZnNkX3JlbGVhc2VfZGVsZWdfY2IsCiAJLmZsX2NvcHlfbG9jayA9IG5mc2RfY29weV9sb2NrX2RlbGVnX2NiLApAQCAtMzM2OCw3ICszMzE0LDcgQEAKIAogLyogSGFjayE6IEZvciBub3csIHdlJ3JlIGRlZmluaW5nIHRoaXMganVzdCBzbyB3ZSBjYW4gdXNlIGEgcG9pbnRlciB0byBpdAogICogYXMgYSB1bmlxdWUgY29va2llIHRvIGlkZW50aWZ5IG91ciAoTkZTdjQncykgcG9zaXggbG9ja3MuICovCi1zdGF0aWMgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5mc2RfcG9zaXhfbW5nX29wcyAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIG5mc2RfcG9zaXhfbW5nX29wcyAgPSB7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTQwNzIsNyArNDAxOCw3IEBACiAKIC8qIGluaXRpYWxpemF0aW9uIHRvIHBlcmZvcm0gd2hlbiB0aGUgbmZzZCBzZXJ2aWNlIGlzIHN0YXJ0ZWQ6ICovCiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBfX25mczRfc3RhdGVfc3RhcnQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGdyYWNlX3RpbWU7CkBAIC00MDg0LDE5ICs0MDMwLDI2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiTkZTRDogc3RhcnRpbmcgJWxkLXNlY29uZCBncmFjZSBwZXJpb2RcbiIsCiAJICAgICAgIGdyYWNlX3RpbWUvSFopOwogCWxhdW5kcnlfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibmZzZDQiKTsKKwlpZiAobGF1bmRyeV93cSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAlxdWV1ZV9kZWxheWVkX3dvcmsobGF1bmRyeV93cSwgJmxhdW5kcm9tYXRfd29yaywgZ3JhY2VfdGltZSk7CiAJc2V0X21heF9kZWxlZ2F0aW9ucygpOworCXJldHVybiBzZXRfY2FsbGJhY2tfY3JlZCgpOwogfQogCi12b2lkCitpbnQKIG5mczRfc3RhdGVfc3RhcnQodm9pZCkKIHsKKwlpbnQgcmV0OworCiAJaWYgKG5mczRfaW5pdCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAluZnNkNF9sb2FkX3JlYm9vdF9yZWNvdmVyeV9kYXRhKCk7Ci0JX19uZnM0X3N0YXRlX3N0YXJ0KCk7CisJcmV0ID0gX19uZnM0X3N0YXRlX3N0YXJ0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAluZnM0X2luaXQgPSAxOwotCXJldHVybjsKKwlyZXR1cm4gMDsKIH0KIAogdGltZV90CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDJkY2M3ZmUuLjBmYmQ1MGMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0xNTk5LDcgKzE1OTksOCBAQAogc3RhdGljIGNoYXIgKm5mc2Q0X3BhdGgoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCwgX19iZTMyICpzdGF0KQogewogCXN0cnVjdCBzdmNfZmggdG1wX2ZoOwotCWNoYXIgKnBhdGgsICpyb290cGF0aDsKKwljaGFyICpwYXRoID0gTlVMTCwgKnJvb3RwYXRoOworCXNpemVfdCByb290bGVuOwogCiAJZmhfaW5pdCgmdG1wX2ZoLCBORlM0X0ZIU0laRSk7CiAJKnN0YXQgPSBleHBfcHNldWRvcm9vdChycXN0cCwgJnRtcF9maCk7CkBAIC0xNjA5LDE0ICsxNjEwLDE4IEBACiAKIAlwYXRoID0gZXhwLT5leF9wYXRobmFtZTsKIAotCWlmIChzdHJuY21wKHBhdGgsIHJvb3RwYXRoLCBzdHJsZW4ocm9vdHBhdGgpKSkgeworCXJvb3RsZW4gPSBzdHJsZW4ocm9vdHBhdGgpOworCWlmIChzdHJuY21wKHBhdGgsIHJvb3RwYXRoLCByb290bGVuKSkgewogCQlkcHJpbnRrKCJuZnNkOiBmc19sb2NhdGlvbnMgZmFpbGVkOyIKIAkJCSIlcyBpcyBub3QgY29udGFpbmVkIGluICVzXG4iLCBwYXRoLCByb290cGF0aCk7CiAJCSpzdGF0ID0gbmZzZXJyX25vdHN1cHA7Ci0JCXJldHVybiBOVUxMOworCQlwYXRoID0gTlVMTDsKKwkJZ290byBvdXQ7CiAJfQotCi0JcmV0dXJuIHBhdGggKyBzdHJsZW4ocm9vdHBhdGgpOworCXBhdGggKz0gcm9vdGxlbjsKK291dDoKKwlmaF9wdXQoJnRtcF9maCk7CisJcmV0dXJuIHBhdGg7CiB9CiAKIC8qCkBAIC0xNzkzLDExICsxNzk4LDYgQEAKIAkJCQlnb3RvIG91dF9uZnNlcnI7CiAJCX0KIAl9Ci0JaWYgKGJtdmFsMCAmIEZBVFRSNF9XT1JEMF9GU19MT0NBVElPTlMpIHsKLQkJaWYgKGV4cC0+ZXhfZnNsb2NzLmxvY2F0aW9ucyA9PSBOVUxMKSB7Ci0JCQlibXZhbDAgJj0gfkZBVFRSNF9XT1JEMF9GU19MT0NBVElPTlM7Ci0JCX0KLQl9CiAJaWYgKChidWZsZW4gLT0gMTYpIDwgMCkKIAkJZ290byBvdXRfcmVzb3VyY2U7CiAKQEAgLTE4MjUsOCArMTgyNSw2IEBACiAJCQlnb3RvIG91dF9yZXNvdXJjZTsKIAkJaWYgKCFhY2xzdXBwb3J0KQogCQkJd29yZDAgJj0gfkZBVFRSNF9XT1JEMF9BQ0w7Ci0JCWlmICghZXhwLT5leF9mc2xvY3MubG9jYXRpb25zKQotCQkJd29yZDAgJj0gfkZBVFRSNF9XT1JEMF9GU19MT0NBVElPTlM7CiAJCWlmICghd29yZDIpIHsKIAkJCVdSSVRFMzIoMik7CiAJCQlXUklURTMyKHdvcmQwKTsKQEAgLTMwNjQsNiArMzA2Miw3IEBACiAJV1JJVEUzMigwKTsKIAogCUFESlVTVF9BUkdTKCk7CisJcmVzcC0+Y3N0YXRlLmRhdGFwID0gcDsgLyogRFJDIGNhY2hlIGRhdGEgcG9pbnRlciAqLwogCXJldHVybiAwOwogfQogCkBAIC0zMTY2LDcgKzMxNjUsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJc2Vzc2lvbiA9IHJlc3AtPmNzdGF0ZS5zZXNzaW9uOwotCWlmIChzZXNzaW9uID09IE5VTEwgfHwgc2xvdC0+c2xfY2FjaGVfZW50cnkuY2VfY2FjaGV0aGlzID09IDApCisJaWYgKHNlc3Npb24gPT0gTlVMTCB8fCBzbG90LT5zbF9jYWNoZXRoaXMgPT0gMCkKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChyZXNwLT5vcGNudCA+PSBhcmdzLT5vcGNudCkKQEAgLTMyOTEsNiArMzI5MCw3IEBACiAJLyoKIAkgKiBBbGwgdGhhdCByZW1haW5zIGlzIHRvIHdyaXRlIHRoZSB0YWcgYW5kIG9wZXJhdGlvbiBjb3VudC4uLgogCSAqLworCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3MgPSAmcmVzcC0+Y3N0YXRlOwogCXN0cnVjdCBrdmVjICppb3Y7CiAJcCA9IHJlc3AtPnRhZ3A7CiAJKnArKyA9IGh0b25sKHJlc3AtPnRhZ2xlbik7CkBAIC0zMzA0LDE3ICszMzA0LDExIEBACiAJCWlvdiA9ICZycXN0cC0+cnFfcmVzLmhlYWRbMF07CiAJaW92LT5pb3ZfbGVuID0gKChjaGFyKilyZXNwLT5wKSAtIChjaGFyKilpb3YtPmlvdl9iYXNlOwogCUJVR19PTihpb3YtPmlvdl9sZW4gPiBQQUdFX1NJWkUpOwotCWlmIChuZnNkNF9oYXNfc2Vzc2lvbigmcmVzcC0+Y3N0YXRlKSkgewotCQlpZiAocmVzcC0+Y3N0YXRlLnN0YXR1cyA9PSBuZnNlcnJfcmVwbGF5X2NhY2hlICYmCi0JCQkJIW5mc2Q0X25vdF9jYWNoZWQocmVzcCkpIHsKLQkJCWlvdi0+aW92X2xlbiA9IHJlc3AtPmNzdGF0ZS5pb3ZsZW47Ci0JCX0gZWxzZSB7Ci0JCQluZnNkNF9zdG9yZV9jYWNoZV9lbnRyeShyZXNwKTsKLQkJCWRwcmludGsoIiVzOiBTRVQgU0xPVCBTVEFURSBUTyBBVkFJTEFCTEVcbiIsIF9fZnVuY19fKTsKLQkJCXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9pbnVzZSA9IDA7Ci0JCX0KLQkJaWYgKHJlc3AtPmNzdGF0ZS5zZXNzaW9uKQotCQkJbmZzZDRfcHV0X3Nlc3Npb24ocmVzcC0+Y3N0YXRlLnNlc3Npb24pOworCWlmIChuZnNkNF9oYXNfc2Vzc2lvbihjcykgJiYgY3MtPnN0YXR1cyAhPSBuZnNlcnJfcmVwbGF5X2NhY2hlKSB7CisJCW5mc2Q0X3N0b3JlX2NhY2hlX2VudHJ5KHJlc3ApOworCQlkcHJpbnRrKCIlczogU0VUIFNMT1QgU1RBVEUgVE8gQVZBSUxBQkxFXG4iLCBfX2Z1bmNfXyk7CisJCXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9pbnVzZSA9IGZhbHNlOworCQluZnNkNF9wdXRfc2Vzc2lvbihyZXNwLT5jc3RhdGUuc2Vzc2lvbik7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggN2U5MDZjNS4uMDAzODhkMiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC0xNzQsMTIgKzE3NCwxMyBAQAogfTsKIAogZXh0ZXJuIGludCBuZnNkX3Bvb2xfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitleHRlcm4gaW50IG5mc2RfcG9vbF9zdGF0c19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9vbF9zdGF0c19vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IG5mc2RfcG9vbF9zdGF0c19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBuZnNkX3Bvb2xfc3RhdHNfcmVsZWFzZSwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCkBAIC03NzYsMTAgKzc3Nyw3IEBACiAJCXNpemUgLT0gbGVuOwogCQltZXNnICs9IGxlbjsKIAl9Ci0KLQltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOwotCXJldHVybiAobWVzZy1idWYpOwotCisJcnYgPSBtZXNnIC0gYnVmOwogb3V0X2ZyZWU6CiAJa2ZyZWUobnRocmVhZHMpOwogCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2ZoLmMgYi9mcy9uZnNkL25mc2ZoLmMKaW5kZXggODg0N2YzZi4uMDE5NjViMiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNmaC5jCisrKyBiL2ZzL25mc2QvbmZzZmguYwpAQCAtMzk3LDQ0ICszOTcsNTEgQEAKIAkJZmgtPm9maF9kaXJpbm8gPSAwOwogfQogCi1fX2JlMzIKLWZoX2NvbXBvc2Uoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JICAgc3RydWN0IHN2Y19maCAqcmVmX2ZoKQorc3RhdGljIGJvb2wgaXNfcm9vdF9leHBvcnQoc3RydWN0IHN2Y19leHBvcnQgKmV4cCkKIHsKLQkvKiByZWZfZmggaXMgYSByZWZlcmVuY2UgZmlsZSBoYW5kbGUuCi0JICogaWYgaXQgaXMgbm9uLW51bGwgYW5kIGZvciB0aGUgc2FtZSBmaWxlc3lzdGVtLCB0aGVuIHdlIHNob3VsZCBjb21wb3NlCi0JICogYSBmaWxlaGFuZGxlIHdoaWNoIGlzIG9mIHRoZSBzYW1lIHZlcnNpb24sIHdoZXJlIHBvc3NpYmxlLgotCSAqIEN1cnJlbnRseSwgdGhhdCBtZWFucyB0aGF0IGlmIHJlZl9maC0+ZmhfaGFuZGxlLmZoX3ZlcnNpb24gPT0gMHhjYQotCSAqIFRoZW4gY3JlYXRlIGEgMzJieXRlIGZpbGVoYW5kbGUgdXNpbmcgbmZzX2ZoYmFzZV9vbGQKLQkgKgotCSAqLworCXJldHVybiBleHAtPmV4X3BhdGguZGVudHJ5ID09IGV4cC0+ZXhfcGF0aC5kZW50cnktPmRfc2ItPnNfcm9vdDsKK30KIAorc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqZXhwX3NiKHN0cnVjdCBzdmNfZXhwb3J0ICpleHApCit7CisJcmV0dXJuIGV4cC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2I7Cit9CisKK3N0YXRpYyBib29sIGZzaWRfdHlwZV9va19mb3JfZXhwKHU4IGZzaWRfdHlwZSwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCkKK3sKKwlzd2l0Y2ggKGZzaWRfdHlwZSkgeworCWNhc2UgRlNJRF9ERVY6CisJCWlmICghb2xkX3ZhbGlkX2RldihleHBfc2IoZXhwKS0+c19kZXYpKQorCQkJcmV0dXJuIDA7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgRlNJRF9NQUpPUl9NSU5PUjoKKwljYXNlIEZTSURfRU5DT0RFX0RFVjoKKwkJcmV0dXJuIGV4cF9zYihleHApLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfUkVRVUlSRVNfREVWOworCWNhc2UgRlNJRF9OVU06CisJCXJldHVybiBleHAtPmV4X2ZsYWdzICYgTkZTRVhQX0ZTSUQ7CisJY2FzZSBGU0lEX1VVSUQ4OgorCWNhc2UgRlNJRF9VVUlEMTY6CisJCWlmICghaXNfcm9vdF9leHBvcnQoZXhwKSkKKwkJCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEZTSURfVVVJRDRfSU5VTToKKwljYXNlIEZTSURfVVVJRDE2X0lOVU06CisJCXJldHVybiBleHAtPmV4X3V1aWQgIT0gTlVMTDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3ZlcnNpb25fYW5kX2ZzaWRfdHlwZShzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBzdmNfZXhwb3J0ICpleHAsIHN0cnVjdCBzdmNfZmggKnJlZl9maCkKK3sKIAl1OCB2ZXJzaW9uOwotCXU4IGZzaWRfdHlwZSA9IDA7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQlfX3UzMiAqZGF0YXA7Ci0JZGV2X3QgZXhfZGV2ID0gZXhwLT5leF9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19kZXY7Ci0JaW50IHJvb3RfZXhwb3J0ID0gKGV4cC0+ZXhfcGF0aC5kZW50cnkgPT0gZXhwLT5leF9wYXRoLmRlbnRyeS0+ZF9zYi0+c19yb290KTsKLQotCWRwcmludGsoIm5mc2Q6IGZoX2NvbXBvc2UoZXhwICUwMng6JTAyeC8lbGQgJXMvJXMsIGlubz0lbGQpXG4iLAotCQlNQUpPUihleF9kZXYpLCBNSU5PUihleF9kZXYpLAotCQkobG9uZykgZXhwLT5leF9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCi0JCXBhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCShpbm9kZSA/IGlub2RlLT5pX2lubyA6IDApKTsKLQotCS8qIENob29zZSBmaWxlaGFuZGxlIHZlcnNpb24gYW5kIGZzaWQgdHlwZSBiYXNlZCBvbgotCSAqIHRoZSByZWZlcmVuY2UgZmlsZWhhbmRsZSAoaWYgaXQgaXMgaW4gdGhlIHNhbWUgZXhwb3J0KQotCSAqIG9yIHRoZSBleHBvcnQgb3B0aW9ucy4KLQkgKi8KLSByZXRyeToKKwl1OCBmc2lkX3R5cGU7CityZXRyeToKIAl2ZXJzaW9uID0gMTsKIAlpZiAocmVmX2ZoICYmIHJlZl9maC0+ZmhfZXhwb3J0ID09IGV4cCkgewogCQl2ZXJzaW9uID0gcmVmX2ZoLT5maF9oYW5kbGUuZmhfdmVyc2lvbjsKIAkJZnNpZF90eXBlID0gcmVmX2ZoLT5maF9oYW5kbGUuZmhfZnNpZF90eXBlOwogCi0JCWlmIChyZWZfZmggPT0gZmhwKQotCQkJZmhfcHV0KHJlZl9maCk7CiAJCXJlZl9maCA9IE5VTEw7CiAKIAkJc3dpdGNoICh2ZXJzaW9uKSB7CkBAIC00NDcsNTggKzQ1NCw2NiBAQAogCQkJZ290byByZXRyeTsKIAkJfQogCi0JCS8qIE5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIHR5cGUgd29ya3MgZm9yIHRoaXMKLQkJICogZXhwb3J0IHBvaW50LiAgQXMgdGhlIGZzaWQgLT4gZmlsZXN5c3RlbSBtYXBwaW5nCi0JCSAqIHdhcyBndWlkZWQgYnkgdXNlci1zcGFjZSwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlCi0JCSAqIHRoYXQgdGhlIGZpbGVzeXN0ZW0gYWN0dWFsbHkgc3VwcG9ydHMgdGhhdCBmc2lkCi0JCSAqIHR5cGUuIElmIGl0IGRvZXNuJ3Qgd2UgbG9vcCBhcm91bmQgYWdhaW4gd2l0aG91dAotCQkgKiByZWZfZmggc2V0LgorCQkvKgorCQkgKiBBcyB0aGUgZnNpZCAtPiBmaWxlc3lzdGVtIG1hcHBpbmcgd2FzIGd1aWRlZCBieQorCQkgKiB1c2VyLXNwYWNlLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgZmlsZXN5c3RlbQorCQkgKiBhY3R1YWxseSBzdXBwb3J0cyB0aGF0IGZzaWQgdHlwZS4gSWYgaXQgZG9lc24ndCB3ZQorCQkgKiBsb29wIGFyb3VuZCBhZ2FpbiB3aXRob3V0IHJlZl9maCBzZXQuCiAJCSAqLwotCQlzd2l0Y2goZnNpZF90eXBlKSB7Ci0JCWNhc2UgRlNJRF9ERVY6Ci0JCQlpZiAoIW9sZF92YWxpZF9kZXYoZXhfZGV2KSkKLQkJCQlnb3RvIHJldHJ5OwotCQkJLyogRkFMTCBUSFJPVUdIICovCi0JCWNhc2UgRlNJRF9NQUpPUl9NSU5PUjoKLQkJY2FzZSBGU0lEX0VOQ09ERV9ERVY6Ci0JCQlpZiAoIShleHAtPmV4X3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX3R5cGUtPmZzX2ZsYWdzCi0JCQkgICAgICAmIEZTX1JFUVVJUkVTX0RFVikpCi0JCQkJZ290byByZXRyeTsKLQkJCWJyZWFrOwotCQljYXNlIEZTSURfTlVNOgotCQkJaWYgKCEgKGV4cC0+ZXhfZmxhZ3MgJiBORlNFWFBfRlNJRCkpCi0JCQkJZ290byByZXRyeTsKLQkJCWJyZWFrOwotCQljYXNlIEZTSURfVVVJRDg6Ci0JCWNhc2UgRlNJRF9VVUlEMTY6Ci0JCQlpZiAoIXJvb3RfZXhwb3J0KQotCQkJCWdvdG8gcmV0cnk7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBGU0lEX1VVSUQ0X0lOVU06Ci0JCWNhc2UgRlNJRF9VVUlEMTZfSU5VTToKLQkJCWlmIChleHAtPmV4X3V1aWQgPT0gTlVMTCkKLQkJCQlnb3RvIHJldHJ5OwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKCFmc2lkX3R5cGVfb2tfZm9yX2V4cChmc2lkX3R5cGUsIGV4cCkpCisJCQlnb3RvIHJldHJ5OwogCX0gZWxzZSBpZiAoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9GU0lEKSB7CiAJCWZzaWRfdHlwZSA9IEZTSURfTlVNOwogCX0gZWxzZSBpZiAoZXhwLT5leF91dWlkKSB7CiAJCWlmIChmaHAtPmZoX21heHNpemUgPj0gNjQpIHsKLQkJCWlmIChyb290X2V4cG9ydCkKKwkJCWlmIChpc19yb290X2V4cG9ydChleHApKQogCQkJCWZzaWRfdHlwZSA9IEZTSURfVVVJRDE2OwogCQkJZWxzZQogCQkJCWZzaWRfdHlwZSA9IEZTSURfVVVJRDE2X0lOVU07CiAJCX0gZWxzZSB7Ci0JCQlpZiAocm9vdF9leHBvcnQpCisJCQlpZiAoaXNfcm9vdF9leHBvcnQoZXhwKSkKIAkJCQlmc2lkX3R5cGUgPSBGU0lEX1VVSUQ4OwogCQkJZWxzZQogCQkJCWZzaWRfdHlwZSA9IEZTSURfVVVJRDRfSU5VTTsKIAkJfQotCX0gZWxzZSBpZiAoIW9sZF92YWxpZF9kZXYoZXhfZGV2KSkKKwl9IGVsc2UgaWYgKCFvbGRfdmFsaWRfZGV2KGV4cF9zYihleHApLT5zX2RldikpCiAJCS8qIGZvciBuZXdlciBkZXZpY2UgbnVtYmVycywgd2UgbXVzdCB1c2UgYSBuZXdlciBmc2lkIGZvcm1hdCAqLwogCQlmc2lkX3R5cGUgPSBGU0lEX0VOQ09ERV9ERVY7CiAJZWxzZQogCQlmc2lkX3R5cGUgPSBGU0lEX0RFVjsKKwlmaHAtPmZoX2hhbmRsZS5maF92ZXJzaW9uID0gdmVyc2lvbjsKKwlpZiAodmVyc2lvbikKKwkJZmhwLT5maF9oYW5kbGUuZmhfZnNpZF90eXBlID0gZnNpZF90eXBlOworfQorCitfX2JlMzIKK2ZoX2NvbXBvc2Uoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJICAgc3RydWN0IHN2Y19maCAqcmVmX2ZoKQoreworCS8qIHJlZl9maCBpcyBhIHJlZmVyZW5jZSBmaWxlIGhhbmRsZS4KKwkgKiBpZiBpdCBpcyBub24tbnVsbCBhbmQgZm9yIHRoZSBzYW1lIGZpbGVzeXN0ZW0sIHRoZW4gd2Ugc2hvdWxkIGNvbXBvc2UKKwkgKiBhIGZpbGVoYW5kbGUgd2hpY2ggaXMgb2YgdGhlIHNhbWUgdmVyc2lvbiwgd2hlcmUgcG9zc2libGUuCisJICogQ3VycmVudGx5LCB0aGF0IG1lYW5zIHRoYXQgaWYgcmVmX2ZoLT5maF9oYW5kbGUuZmhfdmVyc2lvbiA9PSAweGNhCisJICogVGhlbiBjcmVhdGUgYSAzMmJ5dGUgZmlsZWhhbmRsZSB1c2luZyBuZnNfZmhiYXNlX29sZAorCSAqCisJICovCisKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCV9fdTMyICpkYXRhcDsKKwlkZXZfdCBleF9kZXYgPSBleHBfc2IoZXhwKS0+c19kZXY7CisKKwlkcHJpbnRrKCJuZnNkOiBmaF9jb21wb3NlKGV4cCAlMDJ4OiUwMngvJWxkICVzLyVzLCBpbm89JWxkKVxuIiwKKwkJTUFKT1IoZXhfZGV2KSwgTUlOT1IoZXhfZGV2KSwKKwkJKGxvbmcpIGV4cC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vLAorCQlwYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkoaW5vZGUgPyBpbm9kZS0+aV9pbm8gOiAwKSk7CisKKwkvKiBDaG9vc2UgZmlsZWhhbmRsZSB2ZXJzaW9uIGFuZCBmc2lkIHR5cGUgYmFzZWQgb24KKwkgKiB0aGUgcmVmZXJlbmNlIGZpbGVoYW5kbGUgKGlmIGl0IGlzIGluIHRoZSBzYW1lIGV4cG9ydCkKKwkgKiBvciB0aGUgZXhwb3J0IG9wdGlvbnMuCisJICovCisJIHNldF92ZXJzaW9uX2FuZF9mc2lkX3R5cGUoZmhwLCBleHAsIHJlZl9maCk7CiAKIAlpZiAocmVmX2ZoID09IGZocCkKIAkJZmhfcHV0KHJlZl9maCk7CkBAIC01MTYsNyArNTMxLDcgQEAKIAlmaHAtPmZoX2V4cG9ydCA9IGV4cDsKIAljYWNoZV9nZXQoJmV4cC0+aCk7CiAKLQlpZiAodmVyc2lvbiA9PSAweGNhKSB7CisJaWYgKGZocC0+ZmhfaGFuZGxlLmZoX3ZlcnNpb24gPT0gMHhjYSkgewogCQkvKiBvbGQgc3R5bGUgZmlsZWhhbmRsZSBwbGVhc2UgKi8KIAkJbWVtc2V0KCZmaHAtPmZoX2hhbmRsZS5maF9iYXNlLCAwLCBORlNfRkhTSVpFKTsKIAkJZmhwLT5maF9oYW5kbGUuZmhfc2l6ZSA9IE5GU19GSFNJWkU7CkBAIC01MzAsMjIgKzU0NSwyMiBAQAogCQkJX2ZoX3VwZGF0ZV9vbGQoZGVudHJ5LCBleHAsICZmaHAtPmZoX2hhbmRsZSk7CiAJfSBlbHNlIHsKIAkJaW50IGxlbjsKLQkJZmhwLT5maF9oYW5kbGUuZmhfdmVyc2lvbiA9IDE7CiAJCWZocC0+ZmhfaGFuZGxlLmZoX2F1dGhfdHlwZSA9IDA7CiAJCWRhdGFwID0gZmhwLT5maF9oYW5kbGUuZmhfYXV0aCswOwotCQlmaHAtPmZoX2hhbmRsZS5maF9mc2lkX3R5cGUgPSBmc2lkX3R5cGU7Ci0JCW1rX2ZzaWQoZnNpZF90eXBlLCBkYXRhcCwgZXhfZGV2LAorCQlta19mc2lkKGZocC0+ZmhfaGFuZGxlLmZoX2ZzaWRfdHlwZSwgZGF0YXAsIGV4X2RldiwKIAkJCWV4cC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vLAogCQkJZXhwLT5leF9mc2lkLCBleHAtPmV4X3V1aWQpOwogCi0JCWxlbiA9IGtleV9sZW4oZnNpZF90eXBlKTsKKwkJbGVuID0ga2V5X2xlbihmaHAtPmZoX2hhbmRsZS5maF9mc2lkX3R5cGUpOwogCQlkYXRhcCArPSBsZW4vNDsKIAkJZmhwLT5maF9oYW5kbGUuZmhfc2l6ZSA9IDQgKyBsZW47CiAKIAkJaWYgKGlub2RlKQogCQkJX2ZoX3VwZGF0ZShmaHAsIGV4cCwgZGVudHJ5KTsKLQkJaWYgKGZocC0+ZmhfaGFuZGxlLmZoX2ZpbGVpZF90eXBlID09IDI1NSkKKwkJaWYgKGZocC0+ZmhfaGFuZGxlLmZoX2ZpbGVpZF90eXBlID09IDI1NSkgeworCQkJZmhfcHV0KGZocCk7CiAJCQlyZXR1cm4gbmZzZXJyX29wbm90c3VwcDsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNjM5LDggKzY1NCw3IEBACiAJY2FzZSBGU0lEX0RFVjoKIAljYXNlIEZTSURfRU5DT0RFX0RFVjoKIAljYXNlIEZTSURfTUFKT1JfTUlOT1I6Ci0JCWlmIChmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfdHlwZS0+ZnNfZmxhZ3MKLQkJICAgICYgRlNfUkVRVUlSRVNfREVWKQorCQlpZiAoZXhwX3NiKGZocC0+ZmhfZXhwb3J0KS0+c190eXBlLT5mc19mbGFncyAmIEZTX1JFUVVJUkVTX0RFVikKIAkJCXJldHVybiBGU0lEU09VUkNFX0RFVjsKIAkJYnJlYWs7CiAJY2FzZSBGU0lEX05VTToKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IDI0ZDU4YWQuLjY3ZWE4M2UgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3lzY2FsbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNhY2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkJTkZTRERCR19TVkMKIApAQCAtNjYsNiArNjcsMTYgQEAKIERFRklORV9NVVRFWChuZnNkX211dGV4KTsKIHN0cnVjdCBzdmNfc2VydiAJCSpuZnNkX3NlcnY7CiAKKy8qCisgKiBuZnNkX2RyY19sb2NrIHByb3RlY3RzIG5mc2RfZHJjX21heF9wYWdlcyBhbmQgbmZzZF9kcmNfcGFnZXNfdXNlZC4KKyAqIG5mc2RfZHJjX21heF9wYWdlcyBsaW1pdHMgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIGZvcgorICogdmVyc2lvbiA0LjEgRFJDIGNhY2hlcy4KKyAqIG5mc2RfZHJjX3BhZ2VzX3VzZWQgdHJhY2tzIHRoZSBjdXJyZW50IHZlcnNpb24gNC4xIERSQyBtZW1vcnkgdXNhZ2UuCisgKi8KK3NwaW5sb2NrX3QJbmZzZF9kcmNfbG9jazsKK3Vuc2lnbmVkIGludAluZnNkX2RyY19tYXhfbWVtOwordW5zaWduZWQgaW50CW5mc2RfZHJjX21lbV91c2VkOworCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTRF9WMl9BQ0wpIHx8IGRlZmluZWQoQ09ORklHX05GU0RfVjNfQUNMKQogc3RhdGljIHN0cnVjdCBzdmNfc3RhdAluZnNkX2FjbF9zdmNzdGF0czsKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3ZlcnNpb24gKgluZnNkX2FjbF92ZXJzaW9uW10gPSB7CkBAIC0yMzUsMTMgKzI0NiwxMiBAQAogICovCiBzdGF0aWMgdm9pZCBzZXRfbWF4X2RyYyh2b2lkKQogewotCS8qIFRoZSBwZXJjZW50IG9mIG5yX2ZyZWVfYnVmZmVyX3BhZ2VzIHVzZWQgYnkgdGhlIFY0LjEgc2VydmVyIERSQyAqLwotCSNkZWZpbmUgTkZTRF9EUkNfU0laRV9TSElGVAk3Ci0JbmZzZF9zZXJ2LT5zdl9kcmNfbWF4X3BhZ2VzID0gbnJfZnJlZV9idWZmZXJfcGFnZXMoKQotCQkJCQkJPj4gTkZTRF9EUkNfU0laRV9TSElGVDsKLQluZnNkX3NlcnYtPnN2X2RyY19wYWdlc191c2VkID0gMDsKLQlkcHJpbnRrKCIlcyBzdmNfZHJjX21heF9wYWdlcyAldVxuIiwgX19mdW5jX18sCi0JCW5mc2Rfc2Vydi0+c3ZfZHJjX21heF9wYWdlcyk7CisJI2RlZmluZSBORlNEX0RSQ19TSVpFX1NISUZUCTEwCisJbmZzZF9kcmNfbWF4X21lbSA9IChucl9mcmVlX2J1ZmZlcl9wYWdlcygpCisJCQkJCT4+IE5GU0RfRFJDX1NJWkVfU0hJRlQpICogUEFHRV9TSVpFOworCW5mc2RfZHJjX21lbV91c2VkID0gMDsKKwlzcGluX2xvY2tfaW5pdCgmbmZzZF9kcmNfbG9jayk7CisJZHByaW50aygiJXMgbmZzZF9kcmNfbWF4X21lbSAldSBcbiIsIF9fZnVuY19fLCBuZnNkX2RyY19tYXhfbWVtKTsKIH0KIAogaW50IG5mc2RfY3JlYXRlX3NlcnYodm9pZCkKQEAgLTQwMSw3ICs0MTEsOSBAQAogCWVycm9yID0JbmZzZF9yYWNhY2hlX2luaXQoMipucnNlcnZzKTsKIAlpZiAoZXJyb3I8MCkKIAkJZ290byBvdXQ7Ci0JbmZzNF9zdGF0ZV9zdGFydCgpOworCWVycm9yID0gbmZzNF9zdGF0ZV9zdGFydCgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CiAKIAluZnNkX3Jlc2V0X3ZlcnNpb25zKCk7CiAKQEAgLTU2OSwxMCArNTgxLDYgQEAKIAkJKyBycXN0cC0+cnFfcmVzLmhlYWRbMF0uaW92X2xlbjsKIAlycXN0cC0+cnFfcmVzLmhlYWRbMF0uaW92X2xlbiArPSBzaXplb2YoX19iZTMyKTsKIAotCS8qIE5GU3Y0LjEgRFJDIHJlcXVpcmVzIHN0YXRwICovCi0JaWYgKHJxc3RwLT5ycV92ZXJzID09IDQpCi0JCW5mc2Q0X3NldF9zdGF0cChycXN0cCwgc3RhdHApOwotCiAJLyogTm93IGNhbGwgdGhlIHByb2NlZHVyZSBoYW5kbGVyLCBhbmQgZW5jb2RlIE5GUyBzdGF0dXMuICovCiAJbmZzZXJyID0gcHJvYy0+cGNfZnVuYyhycXN0cCwgcnFzdHAtPnJxX2FyZ3AsIHJxc3RwLT5ycV9yZXNwKTsKIAluZnNlcnIgPSBtYXBfbmV3X2Vycm9ycyhycXN0cC0+cnFfdmVycywgbmZzZXJyKTsKQEAgLTYwNyw3ICs2MTUsMjUgQEAKIAogaW50IG5mc2RfcG9vbF9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWlmIChuZnNkX3NlcnYgPT0gTlVMTCkKKwlpbnQgcmV0OworCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOworCWlmIChuZnNkX3NlcnYgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gc3ZjX3Bvb2xfc3RhdHNfb3BlbihuZnNkX3NlcnYsIGZpbGUpOworCX0KKwkvKiBidW1wIHVwIHRoZSBwc3VkbyByZWZjb3VudCB3aGlsZSB0cmF2ZXJzaW5nICovCisJc3ZjX2dldChuZnNkX3NlcnYpOworCXJldCA9IHN2Y19wb29sX3N0YXRzX29wZW4obmZzZF9zZXJ2LCBmaWxlKTsKKwltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBuZnNkX3Bvb2xfc3RhdHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0ID0gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOworCS8qIHRoaXMgZnVuY3Rpb24gcmVhbGx5LCByZWFsbHkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgc3ZjX3B1dCgpICovCisJc3ZjX2Rlc3Ryb3kobmZzZF9zZXJ2KTsKKwltdXRleF91bmxvY2soJm5mc2RfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCA4ZmEwOWJmLi5hMjkzZjAyIDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTg5LDYgKzg5LDEyIEBACiAjZGVmaW5lIFJBUEFSTV9IQVNIX01BU0sJKFJBUEFSTV9IQVNIX1NJWkUtMSkKIHN0YXRpYyBzdHJ1Y3QgcmFwYXJtX2hidWNrZXQJcmFwYXJtX2hhc2hbUkFQQVJNX0hBU0hfU0laRV07CiAKK3N0YXRpYyBpbmxpbmUgaW50CituZnNkX3Y0Y2xpZW50KHN0cnVjdCBzdmNfcnFzdCAqcnEpCit7CisgICAgcmV0dXJuIHJxLT5ycV9wcm9nID09IE5GU19QUk9HUkFNICYmIHJxLT5ycV92ZXJzID09IDQ7Cit9CisKIC8qIAogICogQ2FsbGVkIGZyb20gbmZzZF9sb29rdXAgYW5kIGVuY29kZV9kaXJlbnQuIENoZWNrIGlmIHdlIGhhdmUgY3Jvc3NlZCAKICAqIGEgbW91bnQgcG9pbnQuCkBAIC0xMTUsNyArMTIxLDggQEAKIAkJcGF0aF9wdXQoJnBhdGgpOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKChleHAtPmV4X2ZsYWdzICYgTkZTRVhQX0NST1NTTU9VTlQpIHx8IEVYX05PSElERShleHAyKSkgeworCWlmIChuZnNkX3Y0Y2xpZW50KHJxc3RwKSB8fAorCQkoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9DUk9TU01PVU5UKSB8fCBFWF9OT0hJREUoZXhwMikpIHsKIAkJLyogc3VjY2Vzc2Z1bGx5IGNyb3NzZWQgbW91bnQgcG9pbnQgKi8KIAkJLyoKIAkJICogVGhpcyBpcyBzdWJ0bGU6IHBhdGguZGVudHJ5IGlzICpub3QqIG9uIHBhdGgubW50CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggYzY2OGJjYS4uNmEyNzExZiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtNDYsNyArNDYsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZidG5jLT5pX21tYXBfbm9ubGluZWFyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0gewogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2ZpbGUuYyBiL2ZzL25pbGZzMi9maWxlLmMKaW5kZXggNmJkODRhMC4uZmM4Mjc4YyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2ZpbGUuYworKysgYi9mcy9uaWxmczIvZmlsZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnRydW5jYXRlCT0gbmlsZnNfdHJ1bmNhdGUsCiAJLnNldGF0dHIJPSBuaWxmc19zZXRhdHRyLAogCS5wZXJtaXNzaW9uICAgICA9IG5pbGZzX3Blcm1pc3Npb24sCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZ2Npbm9kZS5jIGIvZnMvbmlsZnMyL2djaW5vZGUuYwppbmRleCAxYjNjMmJiLi5lNmRlMGEyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZ2Npbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9nY2lub2RlLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJkYXQuaCIKICNpbmNsdWRlICJpZmlsZS5oIgogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBkZWZfZ2Npbm9kZV9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2djaW5vZGVfYW9wcyA9IHsKIAkuc3luY19wYWdlCQk9IGJsb2NrX3N5bmNfcGFnZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pbm9kZS5jIGIvZnMvbmlsZnMyL2lub2RlLmMKaW5kZXggODA3ZTU4NC4uMmQyYzUwMSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lub2RlLmMKKysrIGIvZnMvbmlsZnMyL2lub2RlLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCXJldHVybiBzaXplOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5pbGZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5pbGZzX2FvcHMgPSB7CiAJLndyaXRlcGFnZQkJPSBuaWxmc193cml0ZXBhZ2UsCiAJLnJlYWRwYWdlCQk9IG5pbGZzX3JlYWRwYWdlLAogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5jIGIvZnMvbmlsZnMyL21kdC5jCmluZGV4IDE1NmJmNjAuLmIxOGM0OTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9tZHQuYworKysgYi9mcy9uaWxmczIvbWR0LmMKQEAgLTQyNywxMiArNDI3LDEyIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX21kdF9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX21kdF9hb3BzID0gewogCS53cml0ZXBhZ2UJCT0gbmlsZnNfbWR0X3dyaXRlX3BhZ2UsCiAJLnN5bmNfcGFnZQkJPSBibG9ja19zeW5jX3BhZ2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGVmX21kdF9pb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRlZl9tZHRfaW9wczsKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9tZHRfZm9wczsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9uYW1laS5jIGIvZnMvbmlsZnMyL25hbWVpLmMKaW5kZXggZGY3MGRhZC4uZWQwMmU4OCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL25hbWVpLmMKKysrIGIvZnMvbmlsZnMyL25hbWVpLmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmNyZWF0ZQkJPSBuaWxmc19jcmVhdGUsCiAJLmxvb2t1cAkJPSBuaWxmc19sb29rdXAsCiAJLmxpbmsJCT0gbmlsZnNfbGluaywKQEAgLTQ2MiwxMiArNDYyLDEyIEBACiAJLnBlcm1pc3Npb24JPSBuaWxmc19wZXJtaXNzaW9uLAogfTsKIAotc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gbmlsZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IG5pbGZzX3Blcm1pc3Npb24sCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKIAkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAogCS5wdXRfbGluawk9IHBhZ2VfcHV0X2xpbmssCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmlsZnMuaCBiL2ZzL25pbGZzMi9uaWxmcy5oCmluZGV4IDcyNGM2MzcuLmJhZDczNjggMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi9uaWxmcy5oCkBAIC0yOTUsMTIgKzI5NSwxMiBAQAogICogSW5vZGVzIGFuZCBmaWxlcyBvcGVyYXRpb25zCiAgKi8KIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuaWxmc19hb3BzOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuaWxmc19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAKIC8qCiAgKiBmaWxlc3lzdGVtIHR5cGUKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zdXBlci5jIGIvZnMvbmlsZnMyL3N1cGVyLmMKaW5kZXggNTVmM2Q2Yi4uNjQ0ZTY2NyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3N1cGVyLmMKKysrIGIvZnMvbmlsZnMyL3N1cGVyLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbmlsZnNfc29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuaWxmc19zb3BzID0gewogCS5hbGxvY19pbm9kZSAgICA9IG5pbGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlICA9IG5pbGZzX2Rlc3Ryb3lfaW5vZGUsCiAJLmRpcnR5X2lub2RlICAgID0gbmlsZnNfZGlydHlfaW5vZGUsCkBAIC01NjAsNyArNTYwLDcgQEAKIAkJCQkgICAgbmlsZnNfbmZzX2dldF9pbm9kZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgbmlsZnNfZXhwb3J0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgbmlsZnNfZXhwb3J0X29wcyA9IHsKIAkuZmhfdG9fZGVudHJ5ID0gbmlsZnNfZmhfdG9fZGVudHJ5LAogCS5maF90b19wYXJlbnQgPSBuaWxmc19maF90b19wYXJlbnQsCiAJLmdldF9wYXJlbnQgPSBuaWxmc19nZXRfcGFyZW50LApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCA0MzUwZDQ5Li42NjNjMGUzIDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYworKysgYi9mcy9udGZzL2ZpbGUuYwpAQCAtMjE0Niw0NiArMjE0Niw2IEBACiB9CiAKIC8qKgotICogbnRmc19maWxlX3dyaXRldiAtCi0gKgotICogQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGdlbmVyaWNfZmlsZV93cml0ZXYoKSBleGNlcHQgdGhhdCBpdCBlbmRzIHVwIGNhbGxpbmcKLSAqIG50ZnNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKCkgaW5zdGVhZCBvZiBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKCkuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZXYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQlzdHJ1Y3Qga2lvY2Iga2lvY2I7Ci0Jc3NpemVfdCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlsZSk7Ci0JcmV0ID0gbnRmc19maWxlX2Fpb193cml0ZV9ub2xvY2soJmtpb2NiLCBpb3YsIG5yX3NlZ3MsIHBwb3MpOwotCWlmIChyZXQgPT0gLUVJT0NCUVVFVUVEKQotCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmtpb2NiKTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAocmV0ID4gMCkgewotCQlpbnQgZXJyID0gZ2VuZXJpY193cml0ZV9zeW5jKGZpbGUsICpwcG9zIC0gcmV0LCByZXQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldCA9IGVycjsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBudGZzX2ZpbGVfd3JpdGUgLSBzaW1wbGUgd3JhcHBlciBmb3IgbnRmc19maWxlX3dyaXRldigpCi0gKi8KLXN0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGlvdmVjIGxvY2FsX2lvdiA9IHsgLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYnVmLAotCQkJCSAgIC5pb3ZfbGVuID0gY291bnQgfTsKLQotCXJldHVybiBudGZzX2ZpbGVfd3JpdGV2KGZpbGUsICZsb2NhbF9pb3YsIDEsIHBwb3MpOwotfQotCi0vKioKICAqIG50ZnNfZmlsZV9mc3luYyAtIHN5bmMgYSBmaWxlIHRvIGRpc2sKICAqIEBmaWxwOglmaWxlIHRvIGJlIHN5bmNlZAogICogQGRlbnRyeToJZGVudHJ5IGRlc2NyaWJpbmcgdGhlIGZpbGUgdG8gc3luYwpAQCAtMjI0Nyw3ICsyMjA3LDcgQEAKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCQkgLyogUmVhZCBmcm9tIGZpbGUuICovCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLCAvKiBBc3luYyByZWFkIGZyb20gZmlsZS4gKi8KICNpZmRlZiBOVEZTX1JXCi0JLndyaXRlCQk9IG50ZnNfZmlsZV93cml0ZSwJIC8qIFdyaXRlIHRvIGZpbGUuICovCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCSAvKiBXcml0ZSB0byBmaWxlLiAqLwogCS5haW9fd3JpdGUJPSBudGZzX2ZpbGVfYWlvX3dyaXRlLAkgLyogQXN5bmMgd3JpdGUgdG8gZmlsZS4gKi8KIAkvKi5yZWxlYXNlCT0gLCovCQkJIC8qIExhc3QgZmlsZSBpcyBjbG9zZWQuICBTZWUKIAkJCQkJCSAgICBmcy9leHQyL2ZpbGUuYzo6CmRpZmYgLS1naXQgYS9mcy9udGZzL2xheW91dC5oIGIvZnMvbnRmcy9sYXlvdXQuaAppbmRleCA1MDkzMWIxLi44YjI1NDlmIDEwMDY0NAotLS0gYS9mcy9udGZzL2xheW91dC5oCisrKyBiL2ZzL250ZnMvbGF5b3V0LmgKQEAgLTgyOSw3ICs4MjksNyBAQAogCS8qIE5vdGUsIEZJTEVfQVRUUl9WQUxJRF9TRVRfRkxBR1MgbWFza3Mgb3V0IHRoZSBvbGQgRE9TIFZvbElkLCB0aGUKIAkgICBGX0FfREVWSUNFLCBGX0FfRElSRUNUT1JZLCBGX0FfU1BBUlNFX0ZJTEUsIEZfQV9SRVBBUlNFX1BPSU5ULAogCSAgIEZfQV9DT01QUkVTU0VELCBhbmQgRl9BX0VOQ1JZUFRFRCBhbmQgcHJlc2VydmVzIHRoZSByZXN0LiAgVGhpcyBtYXNrCi0JICAgaXMgdXNlZCB0byB0byBvYnRhaW4gYWxsIGZsYWdzIHRoYXQgYXJlIHZhbGlkIGZvciBzZXR0aW5nLiAqLworCSAgIGlzIHVzZWQgdG8gb2J0YWluIGFsbCBmbGFncyB0aGF0IGFyZSB2YWxpZCBmb3Igc2V0dGluZy4gKi8KIAkvKgogCSAqIFRoZSBmbGFnIEZJTEVfQVRUUl9EVVBfRklMRU5BTUVfSU5ERVhfUFJFU0VOVCBpcyBwcmVzZW50IGluIGFsbAogCSAqIEZJTEVOQU1FX0FUVFIgYXR0cmlidXRlcyBidXQgbm90IGluIHRoZSBTVEFOREFSRF9JTkZPUk1BVElPTgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9tYWxsb2MuaCBiL2ZzL250ZnMvbWFsbG9jLmgKaW5kZXggY2QwYmUzZi4uYTQ0YjE0YyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9tYWxsb2MuaAorKysgYi9mcy9udGZzL21hbGxvYy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAJCXJldHVybiBrbWFsbG9jKFBBR0VfU0laRSwgZ2ZwX21hc2sgJiB+X19HRlBfSElHSE1FTSk7CiAJCS8qIHJldHVybiAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzayk7ICovCiAJfQotCWlmIChsaWtlbHkoc2l6ZSA+PiBQQUdFX1NISUZUIDwgbnVtX3BoeXNwYWdlcykpCisJaWYgKGxpa2VseSgoc2l6ZSA+PiBQQUdFX1NISUZUKSA8IHRvdGFscmFtX3BhZ2VzKSkKIAkJcmV0dXJuIF9fdm1hbGxvYyhzaXplLCBnZnBfbWFzaywgUEFHRV9LRVJORUwpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvTWFrZWZpbGUgYi9mcy9vY2ZzMi9NYWtlZmlsZQppbmRleCAwMTU5NjA3Li4zMWYyNWNlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogCWxvY2tzLm8JCQlcCiAJbW1hcC5vIAkJCVwKIAluYW1laS5vIAkJXAorCXJlZmNvdW50dHJlZS5vCQlcCiAJcmVzaXplLm8JCVwKIAlzbG90X21hcC5vIAkJXAogCXN1YmFsbG9jLm8gCQlcCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCBhYjUxM2RkLi4zOGE0MmY1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTQ5LDEwICs0OSwyMSBAQAogI2luY2x1ZGUgInN1cGVyLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgorI2luY2x1ZGUgInJlZmNvdW50dHJlZS5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIAorZW51bSBvY2ZzMl9jb250aWdfdHlwZSB7CisJQ09OVElHX05PTkUgPSAwLAorCUNPTlRJR19MRUZULAorCUNPTlRJR19SSUdIVCwKKwlDT05USUdfTEVGVFJJR0hULAorfTsKIAorc3RhdGljIGVudW0gb2NmczJfY29udGlnX3R5cGUKKwlvY2ZzMl9leHRlbnRfcmVjX2NvbnRpZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpleHQsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpOwogLyoKICAqIE9wZXJhdGlvbnMgZm9yIGEgc3BlY2lmaWMgZXh0ZW50IHRyZWUgdHlwZS4KICAqCkBAIC03OSwxOCArOTAsMzAgQEAKIAkgKiB0aGF0IHZhbHVlLiAgbmV3X2NsdXN0ZXJzIGlzIHRoZSBkZWx0YSwgYW5kIG11c3QgYmUKIAkgKiBhZGRlZCB0byB0aGUgdG90YWwuICBSZXF1aXJlZC4KIAkgKi8KLQl2b2lkICgqZW9fdXBkYXRlX2NsdXN0ZXJzKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJdm9pZCAoKmVvX3VwZGF0ZV9jbHVzdGVycykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICB1MzIgbmV3X2NsdXN0ZXJzKTsKIAogCS8qCisJICogSWYgdGhpcyBleHRlbnQgdHJlZSBpcyBzdXBwb3J0ZWQgYnkgYW4gZXh0ZW50IG1hcCwgaW5zZXJ0CisJICogYSByZWNvcmQgaW50byB0aGUgbWFwLgorCSAqLworCXZvaWQgKCplb19leHRlbnRfbWFwX2luc2VydCkoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOworCisJLyoKKwkgKiBJZiB0aGlzIGV4dGVudCB0cmVlIGlzIHN1cHBvcnRlZCBieSBhbiBleHRlbnQgbWFwLCB0cnVuY2F0ZSB0aGUKKwkgKiBtYXAgdG8gY2x1c3RlcnMsCisJICovCisJdm9pZCAoKmVvX2V4dGVudF9tYXBfdHJ1bmNhdGUpKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICAgIHUzMiBjbHVzdGVycyk7CisKKwkvKgogCSAqIElmIC0+ZW9faW5zZXJ0X2NoZWNrKCkgZXhpc3RzLCBpdCBpcyBjYWxsZWQgYmVmb3JlIHJlYyBpcwogCSAqIGluc2VydGVkIGludG8gdGhlIGV4dGVudCB0cmVlLiAgSXQgaXMgb3B0aW9uYWwuCiAJICovCi0JaW50ICgqZW9faW5zZXJ0X2NoZWNrKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJaW50ICgqZW9faW5zZXJ0X2NoZWNrKShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOwotCWludCAoKmVvX3Nhbml0eV9jaGVjaykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisJaW50ICgqZW9fc2FuaXR5X2NoZWNrKShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKIAogCS8qCiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwOSw4ICsxMzIsMTcgQEAKIAkgKiBpdCBleGlzdHMuICBJZiBpdCBkb2VzIG5vdCwgZXQtPmV0X21heF9sZWFmX2NsdXN0ZXJzIGlzIHNldAogCSAqIHRvIDAgKHVubGltaXRlZCkuICBPcHRpb25hbC4KIAkgKi8KLQl2b2lkICgqZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycykoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKKwl2b2lkICgqZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisKKwkvKgorCSAqIC0+ZW9fZXh0ZW50X2NvbnRpZyB0ZXN0IHdoZXRoZXIgdGhlIDIgb2NmczJfZXh0ZW50X3JlYworCSAqIGFyZSBjb250aWd1b3VzIG9yIG5vdC4gT3B0aW9uYWwuIERvbid0IG5lZWQgdG8gc2V0IGl0IGlmIHVzZQorCSAqIG9jZnMyX2V4dGVudF9yZWMgYXMgdGhlIHRyZWUgbGVhZi4KKwkgKi8KKwllbnVtIG9jZnMyX2NvbnRpZ190eXBlCisJCSgqZW9fZXh0ZW50X2NvbnRpZykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmV4dCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpOwogfTsKIAogCkBAIC0xMjEsMTkgKzE1MywyMiBAQAogc3RhdGljIHU2NCBvY2ZzMl9kaW5vZGVfZ2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOwogc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX3NldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCQkgdTY0IGJsa25vKTsKLXN0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSB1MzIgY2x1c3RlcnMpOwotc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfaW5zZXJ0KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgICB1MzIgY2x1c3RlcnMpOworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKTsKLXN0YXRpYyBpbnQgb2NmczJfZGlub2RlX3Nhbml0eV9jaGVjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CitzdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CiBzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOwogc3RhdGljIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIG9jZnMyX2Rpbm9kZV9ldF9vcHMgPSB7CiAJLmVvX3NldF9sYXN0X2ViX2Jsawk9IG9jZnMyX2Rpbm9kZV9zZXRfbGFzdF9lYl9ibGssCiAJLmVvX2dldF9sYXN0X2ViX2Jsawk9IG9jZnMyX2Rpbm9kZV9nZXRfbGFzdF9lYl9ibGssCiAJLmVvX3VwZGF0ZV9jbHVzdGVycwk9IG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMsCisJLmVvX2V4dGVudF9tYXBfaW5zZXJ0CT0gb2NmczJfZGlub2RlX2V4dGVudF9tYXBfaW5zZXJ0LAorCS5lb19leHRlbnRfbWFwX3RydW5jYXRlCT0gb2NmczJfZGlub2RlX2V4dGVudF9tYXBfdHJ1bmNhdGUsCiAJLmVvX2luc2VydF9jaGVjawk9IG9jZnMyX2Rpbm9kZV9pbnNlcnRfY2hlY2ssCiAJLmVvX3Nhbml0eV9jaGVjawk9IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2ssCiAJLmVvX2ZpbGxfcm9vdF9lbAk9IG9jZnMyX2Rpbm9kZV9maWxsX3Jvb3RfZWwsCkBAIC0xNTYsNDAgKzE5MSw1MyBAQAogCXJldHVybiBsZTY0X3RvX2NwdShkaS0+aV9sYXN0X2ViX2Jsayk7CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSB1MzIgY2x1c3RlcnMpCiB7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gY2FjaGVfaW5mb190b19pbm9kZShldC0+ZXRfY2kpOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gZXQtPmV0X29iamVjdDsKIAogCWxlMzJfYWRkX2NwdSgmZGktPmlfY2x1c3RlcnMsIGNsdXN0ZXJzKTsKLQlzcGluX2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKLQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShkaS0+aV9jbHVzdGVycyk7Ci0Jc3Bpbl91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShkaS0+aV9jbHVzdGVycyk7CisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfaW5zZXJ0KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZjYWNoZV9pbmZvX3RvX2lub2RlKGV0LT5ldF9jaSktPnZmc19pbm9kZTsKKworCW9jZnMyX2V4dGVudF9tYXBfaW5zZXJ0X3JlYyhpbm9kZSwgcmVjKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2V4dGVudF9tYXBfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgICB1MzIgY2x1c3RlcnMpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZjYWNoZV9pbmZvX3RvX2lub2RlKGV0LT5ldF9jaSktPnZmc19pbm9kZTsKKworCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIGNsdXN0ZXJzKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKQogewotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IGNhY2hlX2luZm9fdG9faW5vZGUoZXQtPmV0X2NpKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKG9pLT52ZnNfaW5vZGUuaV9zYik7CiAKLQlCVUdfT04oT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKTsKKwlCVUdfT04ob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKTsKIAltbG9nX2J1Z19vbl9tc2coIW9jZnMyX3NwYXJzZV9hbGxvYyhvc2IpICYmCi0JCQkoT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzICE9Ci0JCQkgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpKSwKKwkJCShvaS0+aXBfY2x1c3RlcnMgIT0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpKSwKIAkJCSJEZXZpY2UgJXMsIGFza2luZyBmb3Igc3BhcnNlIGFsbG9jYXRpb246IGlub2RlICVsbHUsICIKIAkJCSJjcG9zICV1LCBjbHVzdGVycyAldVxuIiwKIAkJCW9zYi0+ZGV2X3N0ciwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJcmVjLT5lX2Nwb3MsCi0JCQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpOworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJCQlyZWMtPmVfY3Bvcywgb2ktPmlwX2NsdXN0ZXJzKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCitzdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IGV0LT5ldF9vYmplY3Q7CiAKQEAgLTIyOSw4ICsyNzcsNyBAQAogCXJldHVybiBsZTY0X3RvX2NwdSh2Yi0+dmJfeHYtPnhyX2xhc3RfZWJfYmxrKTsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdmFsdWVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl92YWx1ZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJICAgICAgdTMyIGNsdXN0ZXJzKQogewogCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiID0gZXQtPmV0X29iamVjdDsKQEAgLTI1MiwxMiArMjk5LDExIEBACiAJZXQtPmV0X3Jvb3RfZWwgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3QueHRfbGlzdDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV9maWxsX21heF9sZWFmX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3RyZWVfZmlsbF9tYXhfbGVhZl9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogeworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAlldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgPQotCQlvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoaW5vZGUtPmlfc2IsCi0JCQkJCSBPQ0ZTMl9NQVhfWEFUVFJfVFJFRV9MRUFGX1NJWkUpOworCQlvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc2IsIE9DRlMyX01BWF9YQVRUUl9UUkVFX0xFQUZfU0laRSk7CiB9CiAKIHN0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3RyZWVfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCkBAIC0yNzcsOCArMzIzLDcgQEAKIAlyZXR1cm4gbGU2NF90b19jcHUoeHQtPnh0X2xhc3RfZWJfYmxrKTsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJICAgICB1MzIgY2x1c3RlcnMpCiB7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9IGV0LT5ldF9vYmplY3Q7CkBAIC0zMDksOCArMzU0LDcgQEAKIAlyZXR1cm4gbGU2NF90b19jcHUoZHhfcm9vdC0+ZHJfbGFzdF9lYl9ibGspOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9keF9yb290X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9yb290X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCQkgIHUzMiBjbHVzdGVycykKIHsKIAlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCA9IGV0LT5ldF9vYmplY3Q7CkBAIC0zMTgsOCArMzYyLDcgQEAKIAlsZTMyX2FkZF9jcHUoJmR4X3Jvb3QtPmRyX2NsdXN0ZXJzLCBjbHVzdGVycyk7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZHhfcm9vdF9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQorc3RhdGljIGludCBvY2ZzMl9keF9yb290X3Nhbml0eV9jaGVjayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290ID0gZXQtPmV0X29iamVjdDsKIApAQCAtMzQzLDggKzM4Niw1NCBAQAogCS5lb19maWxsX3Jvb3RfZWwJPSBvY2ZzMl9keF9yb290X2ZpbGxfcm9vdF9lbCwKIH07CiAKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X3RyZWVfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9IGV0LT5ldF9vYmplY3Q7CisKKwlldC0+ZXRfcm9vdF9lbCA9ICZyYi0+cmZfbGlzdDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfcmVmY291bnRfdHJlZV9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJCXU2NCBibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0gZXQtPmV0X29iamVjdDsKKworCXJiLT5yZl9sYXN0X2ViX2JsayA9IGNwdV90b19sZTY0KGJsa25vKTsKK30KKworc3RhdGljIHU2NCBvY2ZzMl9yZWZjb3VudF90cmVlX2dldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPSBldC0+ZXRfb2JqZWN0OworCisJcmV0dXJuIGxlNjRfdG9fY3B1KHJiLT5yZl9sYXN0X2ViX2Jsayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X3RyZWVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCQl1MzIgY2x1c3RlcnMpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9IGV0LT5ldF9vYmplY3Q7CisKKwlsZTMyX2FkZF9jcHUoJnJiLT5yZl9jbHVzdGVycywgY2x1c3RlcnMpOworfQorCitzdGF0aWMgZW51bSBvY2ZzMl9jb250aWdfdHlwZQorb2NmczJfcmVmY291bnRfdHJlZV9leHRlbnRfY29udGlnKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqZXh0LAorCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpCit7CisJcmV0dXJuIENPTlRJR19OT05FOworfQorCitzdGF0aWMgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgb2NmczJfcmVmY291bnRfdHJlZV9ldF9vcHMgPSB7CisJLmVvX3NldF9sYXN0X2ViX2Jsawk9IG9jZnMyX3JlZmNvdW50X3RyZWVfc2V0X2xhc3RfZWJfYmxrLAorCS5lb19nZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl9yZWZjb3VudF90cmVlX2dldF9sYXN0X2ViX2JsaywKKwkuZW9fdXBkYXRlX2NsdXN0ZXJzCT0gb2NmczJfcmVmY291bnRfdHJlZV91cGRhdGVfY2x1c3RlcnMsCisJLmVvX2ZpbGxfcm9vdF9lbAk9IG9jZnMyX3JlZmNvdW50X3RyZWVfZmlsbF9yb290X2VsLAorCS5lb19leHRlbnRfY29udGlnCT0gb2NmczJfcmVmY291bnRfdHJlZV9leHRlbnRfY29udGlnLAorfTsKKwogc3RhdGljIHZvaWQgX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgICAgb2NmczJfam91cm5hbF9hY2Nlc3NfZnVuYyBhY2Nlc3MsCiAJCQkJICAgICB2b2lkICpvYmosCkBAIC0zNTIsNiArNDQxLDcgQEAKIHsKIAlldC0+ZXRfb3BzID0gb3BzOwogCWV0LT5ldF9yb290X2JoID0gYmg7CisJZXQtPmV0X2NpID0gY2k7CiAJZXQtPmV0X3Jvb3Rfam91cm5hbF9hY2Nlc3MgPSBhY2Nlc3M7CiAJaWYgKCFvYmopCiAJCW9iaiA9ICh2b2lkICopYmgtPmJfZGF0YTsKQEAgLTM2MSw0MSArNDUxLDQ5IEBACiAJaWYgKCFldC0+ZXRfb3BzLT5lb19maWxsX21heF9sZWFmX2NsdXN0ZXJzKQogCQlldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgPSAwOwogCWVsc2UKLQkJZXQtPmV0X29wcy0+ZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycyhpbm9kZSwgZXQpOworCQlldC0+ZXRfb3BzLT5lb19maWxsX21heF9sZWFmX2NsdXN0ZXJzKGV0KTsKIH0KIAogdm9pZCBvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGlub2RlLCBiaCwgb2NmczJfam91cm5hbF9hY2Nlc3NfZGksCisJX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBjaSwgYmgsIG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpLAogCQkJCSBOVUxMLCAmb2NmczJfZGlub2RlX2V0X29wcyk7CiB9CiAKIHZvaWQgb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgaW5vZGUsIGJoLCBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YiwKKwlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGNpLCBiaCwgb2NmczJfam91cm5hbF9hY2Nlc3NfeGIsCiAJCQkJIE5VTEwsICZvY2ZzMl94YXR0cl90cmVlX2V0X29wcyk7CiB9CiAKIHZvaWQgb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIpCiB7Ci0JX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBpbm9kZSwgdmItPnZiX2JoLCB2Yi0+dmJfYWNjZXNzLCB2YiwKKwlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGNpLCB2Yi0+dmJfYmgsIHZiLT52Yl9hY2Nlc3MsIHZiLAogCQkJCSAmb2NmczJfeGF0dHJfdmFsdWVfZXRfb3BzKTsKIH0KIAogdm9pZCBvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKLQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBpbm9kZSwgYmgsIG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyLAorCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgY2ksIGJoLCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kciwKIAkJCQkgTlVMTCwgJm9jZnMyX2R4X3Jvb3RfZXRfb3BzKTsKIH0KIAordm9pZCBvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBjaSwgYmgsIG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiLAorCQkJCSBOVUxMLCAmb2NmczJfcmVmY291bnRfdHJlZV9ldF9vcHMpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfZXRfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgICB1NjQgbmV3X2xhc3RfZWJfYmxrKQogewpAQCAtNDA3LDc4ICs1MDUsNzEgQEAKIAlyZXR1cm4gZXQtPmV0X29wcy0+ZW9fZ2V0X2xhc3RfZWJfYmxrKGV0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2V0X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJICAgIHUzMiBjbHVzdGVycykKIHsKLQlldC0+ZXRfb3BzLT5lb191cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LCBjbHVzdGVycyk7CisJZXQtPmV0X29wcy0+ZW9fdXBkYXRlX2NsdXN0ZXJzKGV0LCBjbHVzdGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF9leHRlbnRfbWFwX2luc2VydChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKQoreworCWlmIChldC0+ZXRfb3BzLT5lb19leHRlbnRfbWFwX2luc2VydCkKKwkJZXQtPmV0X29wcy0+ZW9fZXh0ZW50X21hcF9pbnNlcnQoZXQsIHJlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF9leHRlbnRfbWFwX3RydW5jYXRlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCQl1MzIgY2x1c3RlcnMpCit7CisJaWYgKGV0LT5ldF9vcHMtPmVvX2V4dGVudF9tYXBfdHJ1bmNhdGUpCisJCWV0LT5ldF9vcHMtPmVvX2V4dGVudF9tYXBfdHJ1bmNhdGUoZXQsIGNsdXN0ZXJzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgICAgICBpbnQgdHlwZSkKIHsKLQlyZXR1cm4gZXQtPmV0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQtPmV0X3Jvb3RfYmgsCisJcmV0dXJuIGV0LT5ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCBldC0+ZXRfcm9vdF9iaCwKIAkJCQkJICB0eXBlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgaW5saW5lIGVudW0gb2NmczJfY29udGlnX3R5cGUKKwlvY2ZzMl9ldF9leHRlbnRfY29udGlnKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYywKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYykKK3sKKwlpZiAoZXQtPmV0X29wcy0+ZW9fZXh0ZW50X2NvbnRpZykKKwkJcmV0dXJuIGV0LT5ldF9vcHMtPmVvX2V4dGVudF9jb250aWcoZXQsIHJlYywgaW5zZXJ0X3JlYyk7CisKKwlyZXR1cm4gb2NmczJfZXh0ZW50X3JlY19jb250aWcoCisJCQkJb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJcmVjLCBpbnNlcnRfcmVjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfaW5zZXJ0X2NoZWNrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZXQtPmV0X29wcy0+ZW9faW5zZXJ0X2NoZWNrKQotCQlyZXQgPSBldC0+ZXRfb3BzLT5lb19pbnNlcnRfY2hlY2soaW5vZGUsIGV0LCByZWMpOworCQlyZXQgPSBldC0+ZXRfb3BzLT5lb19pbnNlcnRfY2hlY2soZXQsIHJlYyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfc2FuaXR5X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9ldF9zYW5pdHlfY2hlY2soc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChldC0+ZXRfb3BzLT5lb19zYW5pdHlfY2hlY2spCi0JCXJldCA9IGV0LT5ldF9vcHMtPmVvX3Nhbml0eV9jaGVjayhpbm9kZSwgZXQpOworCQlyZXQgPSBldC0+ZXRfb3BzLT5lb19zYW5pdHlfY2hlY2soZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG9jZnMyX2ZyZWVfdHJ1bmNhdGVfY29udGV4dChzdHJ1Y3Qgb2NmczJfdHJ1bmNhdGVfY29udGV4dCAqdGMpOwogc3RhdGljIGludCBvY2ZzMl9jYWNoZV9leHRlbnRfYmxvY2tfZnJlZShzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqY3R4dCwKIAkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViKTsKLQotLyoKLSAqIFN0cnVjdHVyZXMgd2hpY2ggZGVzY3JpYmUgYSBwYXRoIHRocm91Z2ggYSBidHJlZSwgYW5kIGZ1bmN0aW9ucyB0bwotICogbWFuaXB1bGF0ZSB0aGVtLgotICoKLSAqIFRoZSBpZGVhIGhlcmUgaXMgdG8gYmUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZSB3aXRoIHRoZSB0cmVlCi0gKiBtYW5pcHVsYXRpb24gY29kZS4KLSAqLwotc3RydWN0IG9jZnMyX3BhdGhfaXRlbSB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkCQkqYmg7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9saXN0CSplbDsKLX07Ci0KLSNkZWZpbmUgT0NGUzJfTUFYX1BBVEhfREVQVEgJNQotCi1zdHJ1Y3Qgb2NmczJfcGF0aCB7Ci0JaW50CQkJCXBfdHJlZV9kZXB0aDsKLQlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jCXBfcm9vdF9hY2Nlc3M7Ci0Jc3RydWN0IG9jZnMyX3BhdGhfaXRlbQkJcF9ub2RlW09DRlMyX01BWF9QQVRIX0RFUFRIXTsKLX07Ci0KLSNkZWZpbmUgcGF0aF9yb290X2JoKF9wYXRoKSAoKF9wYXRoKS0+cF9ub2RlWzBdLmJoKQotI2RlZmluZSBwYXRoX3Jvb3RfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbMF0uZWwpCi0jZGVmaW5lIHBhdGhfcm9vdF9hY2Nlc3MoX3BhdGgpKChfcGF0aCktPnBfcm9vdF9hY2Nlc3MpCi0jZGVmaW5lIHBhdGhfbGVhZl9iaChfcGF0aCkgKChfcGF0aCktPnBfbm9kZVsoX3BhdGgpLT5wX3RyZWVfZGVwdGhdLmJoKQotI2RlZmluZSBwYXRoX2xlYWZfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbKF9wYXRoKS0+cF90cmVlX2RlcHRoXS5lbCkKLSNkZWZpbmUgcGF0aF9udW1faXRlbXMoX3BhdGgpICgoX3BhdGgpLT5wX3RyZWVfZGVwdGggKyAxKQotCi1zdGF0aWMgaW50IG9jZnMyX2ZpbmRfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCSAgIHUzMiBjcG9zKTsKLXN0YXRpYyB2b2lkIG9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIHZvaWQgb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYyk7CiAvKgpAQCAtNDg2LDcgKzU3Nyw3IEBACiAgKiB0byBidWlsZCBhbm90aGVyIHBhdGguIEdlbmVyYWxseSwgdGhpcyBpbnZvbHZlcyBmcmVlaW5nIHRoZSBidWZmZXIKICAqIGhlYWRzLgogICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9yZWluaXRfcGF0aChzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgaW50IGtlZXBfcm9vdCkKK3ZvaWQgb2NmczJfcmVpbml0X3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIGludCBrZWVwX3Jvb3QpCiB7CiAJaW50IGksIHN0YXJ0ID0gMCwgZGVwdGggPSAwOwogCXN0cnVjdCBvY2ZzMl9wYXRoX2l0ZW0gKm5vZGU7CkBAIC01MTUsNyArNjA2LDcgQEAKIAlwYXRoLT5wX3RyZWVfZGVwdGggPSBkZXB0aDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfZnJlZV9wYXRoKHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKQordm9pZCBvY2ZzMl9mcmVlX3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpCiB7CiAJaWYgKHBhdGgpIHsKIAkJb2NmczJfcmVpbml0X3BhdGgocGF0aCwgMCk7CkBAIC02MTMsMTMgKzcwNCwxMyBAQAogCXJldHVybiBwYXRoOwogfQogCi1zdGF0aWMgc3RydWN0IG9jZnMyX3BhdGggKm9jZnMyX25ld19wYXRoX2Zyb21fcGF0aChzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKK3N0cnVjdCBvY2ZzMl9wYXRoICpvY2ZzMl9uZXdfcGF0aF9mcm9tX3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpCiB7CiAJcmV0dXJuIG9jZnMyX25ld19wYXRoKHBhdGhfcm9vdF9iaChwYXRoKSwgcGF0aF9yb290X2VsKHBhdGgpLAogCQkJICAgICAgcGF0aF9yb290X2FjY2VzcyhwYXRoKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2NmczJfcGF0aCAqb2NmczJfbmV3X3BhdGhfZnJvbV9ldChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQorc3RydWN0IG9jZnMyX3BhdGggKm9jZnMyX25ld19wYXRoX2Zyb21fZXQoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlyZXR1cm4gb2NmczJfbmV3X3BhdGgoZXQtPmV0X3Jvb3RfYmgsIGV0LT5ldF9yb290X2VsLAogCQkJICAgICAgZXQtPmV0X3Jvb3Rfam91cm5hbF9hY2Nlc3MpOwpAQCAtNjMyLDEwICs3MjMsMTAgQEAKICAqIEkgZG9uJ3QgbGlrZSB0aGUgd2F5IHRoaXMgZnVuY3Rpb24ncyBuYW1lIGxvb2tzIG5leHQgdG8KICAqIG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoKSwgYnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBvbmUuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkJaW50IGlkeCkKK2ludCBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJCQkgaW50IGlkeCkKIHsKIAlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jIGFjY2VzcyA9IHBhdGhfcm9vdF9hY2Nlc3MocGF0aCk7CiAKQEAgLTY0NSwxNSArNzM2LDE2IEBACiAJaWYgKGlkeCkKIAkJYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWI7CiAKLQlyZXR1cm4gYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGgtPnBfbm9kZVtpZHhdLmJoLAorCXJldHVybiBhY2Nlc3MoaGFuZGxlLCBjaSwgcGF0aC0+cF9ub2RlW2lkeF0uYmgsCiAJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIH0KIAogLyoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGpvdXJuYWwgYWxsIGNvbXBvbmVudHMgaW4gYSBwYXRoLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKQoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpCiB7CiAJaW50IGksIHJldCA9IDA7CiAKQEAgLTY2MSw3ICs3NTMsNyBAQAogCQlnb3RvIG91dDsKIAogCWZvcihpID0gMDsgaSA8IHBhdGhfbnVtX2l0ZW1zKHBhdGgpOyBpKyspIHsKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoLCBpKTsKKwkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBwYXRoLCBpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNzAyLDE3ICs3OTQsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWVudW0gb2NmczJfY29udGlnX3R5cGUgewotCUNPTlRJR19OT05FID0gMCwKLQlDT05USUdfTEVGVCwKLQlDT05USUdfUklHSFQsCi0JQ09OVElHX0xFRlRSSUdIVCwKLX07Ci0KLQogLyoKICAqIE5PVEU6IG9jZnMyX2Jsb2NrX2V4dGVudF9jb250aWcoKSwgb2NmczJfZXh0ZW50c19hZGphY2VudCgpIGFuZAotICogb2NmczJfZXh0ZW50X2NvbnRpZyBvbmx5IHdvcmsgcHJvcGVybHkgYWdhaW5zdCBsZWFmIG5vZGVzIQorICogb2NmczJfZXh0ZW50X3JlY19jb250aWcgb25seSB3b3JrIHByb3Blcmx5IGFnYWluc3QgbGVhZiBub2RlcyEKICAqLwogc3RhdGljIGludCBvY2ZzMl9ibG9ja19leHRlbnRfY29udGlnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqZXh0LApAQCAtNzM4LDkgKzgyMiw5IEBACiB9CiAKIHN0YXRpYyBlbnVtIG9jZnMyX2NvbnRpZ190eXBlCi0Jb2NmczJfZXh0ZW50X2NvbnRpZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpleHQsCi0JCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpCisJb2NmczJfZXh0ZW50X3JlY19jb250aWcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqZXh0LAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjKQogewogCXU2NCBibGtubyA9IGxlNjRfdG9fY3B1KGluc2VydF9yZWMtPmVfYmxrbm8pOwogCkBAIC03NTMsMTIgKzgzNywxMiBAQAogCQlyZXR1cm4gQ09OVElHX05PTkU7CiAKIAlpZiAob2NmczJfZXh0ZW50c19hZGphY2VudChleHQsIGluc2VydF9yZWMpICYmCi0JICAgIG9jZnMyX2Jsb2NrX2V4dGVudF9jb250aWcoaW5vZGUtPmlfc2IsIGV4dCwgYmxrbm8pKQorCSAgICBvY2ZzMl9ibG9ja19leHRlbnRfY29udGlnKHNiLCBleHQsIGJsa25vKSkKIAkJCXJldHVybiBDT05USUdfUklHSFQ7CiAKIAlibGtubyA9IGxlNjRfdG9fY3B1KGV4dC0+ZV9ibGtubyk7CiAJaWYgKG9jZnMyX2V4dGVudHNfYWRqYWNlbnQoaW5zZXJ0X3JlYywgZXh0KSAmJgotCSAgICBvY2ZzMl9ibG9ja19leHRlbnRfY29udGlnKGlub2RlLT5pX3NiLCBpbnNlcnRfcmVjLCBibGtubykpCisJICAgIG9jZnMyX2Jsb2NrX2V4dGVudF9jb250aWcoc2IsIGluc2VydF9yZWMsIGJsa25vKSkKIAkJcmV0dXJuIENPTlRJR19MRUZUOwogCiAJcmV0dXJuIENPTlRJR19OT05FOwpAQCAtODUzLDEzICs5MzcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBlYl9ibGtubywKK2ludCBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGViX2Jsa25vLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQogewogCWludCByYzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpiaDsKIAotCXJjID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgZWJfYmxrbm8sICZ0bXAsCisJcmMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGNpLCBlYl9ibGtubywgJnRtcCwKIAkJCSAgICAgIG9jZnMyX3ZhbGlkYXRlX2V4dGVudF9ibG9jayk7CiAKIAkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLwpAQCAtODc0LDcgKzk1OCw2IEBACiAgKiBIb3cgbWFueSBmcmVlIGV4dGVudHMgaGF2ZSB3ZSBnb3QgYmVmb3JlIHdlIG5lZWQgbW9yZSBtZXRhIGRhdGE/CiAgKi8KIGludCBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCiB7CiAJaW50IHJldHZhbDsKQEAgLTg4OSw3ICs5NzIsOCBAQAogCWxhc3RfZWJfYmxrID0gb2NmczJfZXRfZ2V0X2xhc3RfZWJfYmxrKGV0KTsKIAogCWlmIChsYXN0X2ViX2JsaykgewotCQlyZXR2YWwgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhpbm9kZSwgbGFzdF9lYl9ibGssICZlYl9iaCk7CisJCXJldHZhbCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGV0LT5ldF9jaSwgbGFzdF9lYl9ibGssCisJCQkJCQkgJmViX2JoKTsKIAkJaWYgKHJldHZhbCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0dmFsKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTkxMyw5ICs5OTcsOCBAQAogICogc2V0cyBoX3NpZ25hdHVyZSwgaF9ibGtubywgaF9zdWJhbGxvY19iaXQsIGhfc3ViYWxsb2Nfc2xvdCwgYW5kCiAgKiBsX2NvdW50IGZvciB5b3UKICAqLwotc3RhdGljIGludCBvY2ZzMl9jcmVhdGVfbmV3X21ldGFfYmhzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJCSAgICAgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9uZXdfbWV0YV9iaHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBpbnQgd2FudGVkLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdKQpAQCAtOTI0LDYgKzEwMDcsOCBAQAogCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CiAJdTMyIG51bV9nb3Q7CiAJdTY0IGZpcnN0X2Jsa25vOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0KKwkJT0NGUzJfU0Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSkpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CkBAIC05NDksOSArMTAzNCwxMCBAQAogCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9Ci0JCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmhzW2ldKTsKKwkJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGV0LT5ldF9jaSwgYmhzW2ldKTsKIAotCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgYmhzW2ldLAorCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBldC0+ZXRfY2ksCisJCQkJCQkJIGJoc1tpXSwKIAkJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAkJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTAyMyw3ICsxMTA5LDYgQEAKICAqIGV4dGVudCBibG9jaydzIHJpZ2h0bW9zdCByZWNvcmQuCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9icmFuY2goaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCWludCBzdGF0dXM7CkBAIC0xMDM3LDcgKzExMjIsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgVUlOVF9NQVgpOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIHBhdGgsIFVJTlRfTUFYKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0OwpAQCAtMTA1MCw3ICsxMTM1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBwYXRoKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCBwYXRoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0OwpAQCAtMTA1OSw3ICsxMTQ0LDcgQEAKIAllbCA9IHBhdGhfbGVhZl9lbChwYXRoKTsKIAlyZWMgPSAmZWwtPmxfcmVjc1tsZTMyX3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDFdOwogCi0Jb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGlub2RlLCBoYW5kbGUsIHBhdGgsIHJlYyk7CisJb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZSwgZXQsIHBhdGgsIHJlYyk7CiAKIG91dDoKIAlvY2ZzMl9mcmVlX3BhdGgocGF0aCk7CkBAIC0xMDY4LDcgKzExNTMsNyBAQAogCiAvKgogICogQWRkIGFuIGVudGlyZSB0cmVlIGJyYW5jaCB0byBvdXIgaW5vZGUuIGViX2JoIGlzIHRoZSBleHRlbnQgYmxvY2sKLSAqIHRvIHN0YXJ0IGF0LCBpZiB3ZSBkb24ndCB3YW50IHRvIHN0YXJ0IHRoZSBicmFuY2ggYXQgdGhlIGRpbm9kZQorICogdG8gc3RhcnQgYXQsIGlmIHdlIGRvbid0IHdhbnQgdG8gc3RhcnQgdGhlIGJyYW5jaCBhdCB0aGUgcm9vdAogICogc3RydWN0dXJlLgogICoKICAqIGxhc3RfZWJfYmggaXMgcmVxdWlyZWQgYXMgd2UgaGF2ZSB0byB1cGRhdGUgaXQncyBuZXh0X2xlYWYgcG9pbnRlcgpAQCAtMTA3Nyw5ICsxMTYyLDcgQEAKICAqIHRoZSBuZXcgYnJhbmNoIHdpbGwgYmUgJ2VtcHR5JyBpbiB0aGUgc2Vuc2UgdGhhdCBldmVyeSBibG9jayB3aWxsCiAgKiBjb250YWluIGEgc2luZ2xlIHJlY29yZCB3aXRoIGNsdXN0ZXIgY291bnQgPT0gMC4KICAqLwotc3RhdGljIGludCBvY2ZzMl9hZGRfYnJhbmNoKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKK3N0YXRpYyBpbnQgb2NmczJfYWRkX2JyYW5jaChoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLApAQCAtMTEyMyw3ICsxMjA2LDcgQEAKIAlpZiAocm9vdF9lbmQgPiBuZXdfY3BvcykgewogCQltbG9nKDAsICJhZGp1c3QgdGhlIGNsdXN0ZXIgZW5kIGZyb20gJXUgdG8gJXVcbiIsCiAJCSAgICAgcm9vdF9lbmQsIG5ld19jcG9zKTsKLQkJc3RhdHVzID0gb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9icmFuY2goaGFuZGxlLCBpbm9kZSwgZXQpOworCQlzdGF0dXMgPSBvY2ZzMl9hZGp1c3RfcmlnaHRtb3N0X2JyYW5jaChoYW5kbGUsIGV0KTsKIAkJaWYgKHN0YXR1cykgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTEzOSw3ICsxMjIyLDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2NyZWF0ZV9uZXdfbWV0YV9iaHMob3NiLCBoYW5kbGUsIGlub2RlLCBuZXdfYmxvY2tzLAorCXN0YXR1cyA9IG9jZnMyX2NyZWF0ZV9uZXdfbWV0YV9iaHMoaGFuZGxlLCBldCwgbmV3X2Jsb2NrcywKIAkJCQkJICAgbWV0YV9hYywgbmV3X2ViX2Jocyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTE2MSw3ICsxMjQ0LDcgQEAKIAkJQlVHX09OKCFPQ0ZTMl9JU19WQUxJRF9FWFRFTlRfQkxPQ0soZWIpKTsKIAkJZWJfZWwgPSAmZWItPmhfbGlzdDsKIAotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGlub2RlLCBiaCwKKwkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBldC0+ZXRfY2ksIGJoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMjAxLDIwICsxMjg0LDIwIEBACiAJICogam91cm5hbF9kaXJ0eSBlcnJvcmluZyBhcyBpdCB3b24ndCB1bmxlc3Mgd2UndmUgYWJvcnRlZCB0aGUKIAkgKiBoYW5kbGUgKGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgbmV2ZXIgYmUgaGVyZSkgc28gcmVzZXJ2aW5nCiAJICogdGhlIHdyaXRlIHdpdGggam91cm5hbF9hY2Nlc3MgaXMgYWxsIHdlIG5lZWQgdG8gZG8uICovCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgKmxhc3RfZWJfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBldC0+ZXRfY2ksICpsYXN0X2ViX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KLQlzdGF0dXMgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXN0YXR1cyA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KIAlpZiAoZWJfYmgpIHsKLQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgZWJfYmgsCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZSwgZXQtPmV0X2NpLCBlYl9iaCwKIAkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMjc0LDkgKzEzNTcsNyBAQAogICogcmV0dXJucyBiYWNrIHRoZSBuZXcgZXh0ZW50IGJsb2NrIHNvIHlvdSBjYW4gYWRkIGEgYnJhbmNoIHRvIGl0CiAgKiBhZnRlciB0aGlzIGNhbGwuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfc2hpZnRfdHJlZV9kZXB0aChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQkgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfbmV3X2ViX2JoKQpAQCAtMTI5MCw3ICsxMzcxLDcgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0Jc3RhdHVzID0gb2NmczJfY3JlYXRlX25ld19tZXRhX2Jocyhvc2IsIGhhbmRsZSwgaW5vZGUsIDEsIG1ldGFfYWMsCisJc3RhdHVzID0gb2NmczJfY3JlYXRlX25ld19tZXRhX2JocyhoYW5kbGUsIGV0LCAxLCBtZXRhX2FjLAogCQkJCQkgICAmbmV3X2ViX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMzA0LDcgKzEzODUsNyBAQAogCWViX2VsID0gJmViLT5oX2xpc3Q7CiAJcm9vdF9lbCA9IGV0LT5ldF9yb290X2VsOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZWIoaGFuZGxlLCBpbm9kZSwgbmV3X2ViX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZSwgZXQtPmV0X2NpLCBuZXdfZWJfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEzMjMsNyArMTQwNCw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXN0YXR1cyA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEzNzksOSArMTQ2MCw3IEBACiAgKgogICogcmV0dXJuIHN0YXR1cyA8IDAgaW5kaWNhdGVzIGFuIGVycm9yLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKK3N0YXRpYyBpbnQgb2NmczJfZmluZF9icmFuY2hfdGFyZ2V0KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnRhcmdldF9iaCkKIHsKIAlpbnQgc3RhdHVzID0gMCwgaTsKQEAgLTEzOTksMTkgKzE0NzgsMjEgQEAKIAogCXdoaWxlKGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpID4gMSkgewogCQlpZiAobGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMCkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsICJEaW5vZGUgJWxsdSBoYXMgZW1wdHkgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1IGhhcyBlbXB0eSAiCiAJCQkJICAgICJleHRlbnQgbGlzdCAobmV4dF9mcmVlX3JlYyA9PSAwKSIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpKTsKIAkJCXN0YXR1cyA9IC1FSU87CiAJCQlnb3RvIGJhaWw7CiAJCX0KIAkJaSA9IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMTsKIAkJYmxrbm8gPSBsZTY0X3RvX2NwdShlbC0+bF9yZWNzW2ldLmVfYmxrbm8pOwogCQlpZiAoIWJsa25vKSB7Ci0JCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIkRpbm9kZSAlbGx1IGhhcyBleHRlbnQgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1IGhhcyBleHRlbnQgIgogCQkJCSAgICAibGlzdCB3aGVyZSBleHRlbnQgIyAlZCBoYXMgbm8gcGh5c2ljYWwgIgogCQkJCSAgICAiYmxvY2sgc3RhcnQiLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgaSk7CisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwgaSk7CiAJCQlzdGF0dXMgPSAtRUlPOwogCQkJZ290byBiYWlsOwogCQl9CkBAIC0xNDE5LDcgKzE1MDAsNyBAQAogCQlicmVsc2UoYmgpOwogCQliaCA9IE5VTEw7CiAKLQkJc3RhdHVzID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soaW5vZGUsIGJsa25vLCAmYmgpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhldC0+ZXRfY2ksIGJsa25vLCAmYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTQ2MCwyMCArMTU0MSwxOCBAQAogICoKICAqICpsYXN0X2ViX2JoIHdpbGwgYmUgdXBkYXRlZCBieSBvY2ZzMl9hZGRfYnJhbmNoKCkuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZ3Jvd190cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LCBpbnQgKmZpbmFsX2RlcHRoLAotCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbGFzdF9lYl9iaCwKK3N0YXRpYyBpbnQgb2NmczJfZ3Jvd190cmVlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICBpbnQgKmZpbmFsX2RlcHRoLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CiAJaW50IHJldCwgc2hpZnQ7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9IGV0LT5ldF9yb290X2VsOwogCWludCBkZXB0aCA9IGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpOwotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCiAJQlVHX09OKG1ldGFfYWMgPT0gTlVMTCk7CiAKLQlzaGlmdCA9IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChvc2IsIGlub2RlLCBldCwgJmJoKTsKKwlzaGlmdCA9IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChldCwgJmJoKTsKIAlpZiAoc2hpZnQgPCAwKSB7CiAJCXJldCA9IHNoaWZ0OwogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xNDkwLDggKzE1NjksNyBAQAogCQkvKiBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoIHdpbGwgcmV0dXJuIHVzIGEgYnVmZmVyIHdpdGgKIAkJICogdGhlIG5ldyBleHRlbnQgYmxvY2sgKHNvIHdlIGNhbiBwYXNzIHRoYXQgdG8KIAkJICogb2NmczJfYWRkX2JyYW5jaCkuICovCi0JCXJldCA9IG9jZnMyX3NoaWZ0X3RyZWVfZGVwdGgob3NiLCBoYW5kbGUsIGlub2RlLCBldCwKLQkJCQkJICAgICBtZXRhX2FjLCAmYmgpOworCQlyZXQgPSBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoKGhhbmRsZSwgZXQsIG1ldGFfYWMsICZiaCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTE1MTcsNyArMTU5NSw3IEBACiAJLyogY2FsbCBvY2ZzMl9hZGRfYnJhbmNoIHRvIGFkZCB0aGUgZmluYWwgcGFydCBvZiB0aGUgdHJlZSB3aXRoCiAJICogdGhlIG5ldyBkYXRhLiAqLwogCW1sb2coMCwgImFkZCBicmFuY2guIGJoID0gJXBcbiIsIGJoKTsKLQlyZXQgPSBvY2ZzMl9hZGRfYnJhbmNoKG9zYiwgaGFuZGxlLCBpbm9kZSwgZXQsIGJoLCBsYXN0X2ViX2JoLAorCXJldCA9IG9jZnMyX2FkZF9icmFuY2goaGFuZGxlLCBldCwgYmgsIGxhc3RfZWJfYmgsCiAJCQkgICAgICAgbWV0YV9hYyk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTY4Nyw3ICsxNzY1LDcgQEAKICAqCiAgKiBUaGUgYXJyYXkgaW5kZXggb2YgdGhlIHN1YnRyZWUgcm9vdCBpcyBwYXNzZWQgYmFjay4KICAqLwotc3RhdGljIGludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0LAogCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodCkKIHsKQEAgLTE3MDUsMTAgKzE3ODMsMTAgQEAKIAkJICogVGhlIGNhbGxlciBkaWRuJ3QgcGFzcyB0d28gYWRqYWNlbnQgcGF0aHMuCiAJCSAqLwogCQltbG9nX2J1Z19vbl9tc2coaSA+IGxlZnQtPnBfdHJlZV9kZXB0aCwKLQkJCQkiSW5vZGUgJWx1LCBsZWZ0IGRlcHRoICV1LCByaWdodCBkZXB0aCAldVxuIgorCQkJCSJPd25lciAlbGx1LCBsZWZ0IGRlcHRoICV1LCByaWdodCBkZXB0aCAldVxuIgogCQkJCSJsZWZ0IGxlYWYgYmxrICVsbHUsIHJpZ2h0IGxlYWYgYmxrICVsbHVcbiIsCi0JCQkJaW5vZGUtPmlfaW5vLCBsZWZ0LT5wX3RyZWVfZGVwdGgsCi0JCQkJcmlnaHQtPnBfdHJlZV9kZXB0aCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCisJCQkJbGVmdC0+cF90cmVlX2RlcHRoLCByaWdodC0+cF90cmVlX2RlcHRoLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGF0aF9sZWFmX2JoKGxlZnQpLT5iX2Jsb2NrbnIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwYXRoX2xlYWZfYmgocmlnaHQpLT5iX2Jsb2NrbnIpOwogCX0gd2hpbGUgKGxlZnQtPnBfbm9kZVtpXS5iaC0+Yl9ibG9ja25yID09CkBAIC0xNzI1LDcgKzE4MDMsNyBAQAogICogVGhpcyBjb2RlIGNhbiBiZSBjYWxsZWQgd2l0aCBhIGNwb3MgbGFyZ2VyIHRoYW4gdGhlIHRyZWUsIGluIHdoaWNoCiAgKiBjYXNlIGl0IHdpbGwgcmV0dXJuIHRoZSByaWdodG1vc3QgcGF0aC4KICAqLwotc3RhdGljIGludCBfX29jZnMyX2ZpbmRfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBfX29jZnMyX2ZpbmRfcGF0aChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyb290X2VsLCB1MzIgY3BvcywKIAkJCSAgICAgcGF0aF9pbnNlcnRfdCAqZnVuYywgdm9pZCAqZGF0YSkKIHsKQEAgLTE3MzYsMTUgKzE4MTQsMTQgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7Ci0Jc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAKIAllbCA9IHJvb3RfZWw7CiAJd2hpbGUgKGVsLT5sX3RyZWVfZGVwdGgpIHsKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IDApIHsKLQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgICAiSW5vZGUgJWxsdSBoYXMgZW1wdHkgZXh0ZW50IGxpc3QgYXQgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGVtcHR5IGV4dGVudCBsaXN0IGF0ICIKIAkJCQkgICAgImRlcHRoICV1XG4iLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCiAJCQkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpKTsKIAkJCXJldCA9IC1FUk9GUzsKIAkJCWdvdG8gb3V0OwpAQCAtMTc2NywxMCArMTg0NCwxMCBAQAogCiAJCWJsa25vID0gbGU2NF90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Jsa25vKTsKIAkJaWYgKGJsa25vID09IDApIHsKLQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgICAiSW5vZGUgJWxsdSBoYXMgYmFkIGJsa25vIGluIGV4dGVudCBsaXN0ICIKKwkJCW9jZnMyX2Vycm9yKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSksCisJCQkJICAgICJPd25lciAlbGx1IGhhcyBiYWQgYmxrbm8gaW4gZXh0ZW50IGxpc3QgIgogCQkJCSAgICAiYXQgZGVwdGggJXUgKGluZGV4ICVkKVxuIiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAogCQkJCSAgICBsZTE2X3RvX2NwdShlbC0+bF90cmVlX2RlcHRoKSwgaSk7CiAJCQlyZXQgPSAtRVJPRlM7CiAJCQlnb3RvIG91dDsKQEAgLTE3NzgsNyArMTg1NSw3IEBACiAKIAkJYnJlbHNlKGJoKTsKIAkJYmggPSBOVUxMOwotCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhpbm9kZSwgYmxrbm8sICZiaCk7CisJCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGNpLCBibGtubywgJmJoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0xNzg5LDEwICsxODY2LDEwIEBACiAKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID4KIAkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJJbm9kZSAlbGx1IGhhcyBiYWQgY291bnQgaW4gZXh0ZW50IGxpc3QgIgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGJhZCBjb3VudCBpbiBleHRlbnQgbGlzdCAiCiAJCQkJICAgICJhdCBibG9jayAlbGx1IChuZXh0IGZyZWU9JXUsIGNvdW50PSV1KVxuIiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCiAJCQkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpLAogCQkJCSAgICBsZTE2X3RvX2NwdShlbC0+bF9jb3VudCkpOwpAQCAtMTgzNiwxNCArMTkxMywxNCBAQAogCW9jZnMyX3BhdGhfaW5zZXJ0X2ViKGZwLT5wYXRoLCBmcC0+aW5kZXgsIGJoKTsKIAlmcC0+aW5kZXgrKzsKIH0KLXN0YXRpYyBpbnQgb2NmczJfZmluZF9wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAotCQkJICAgdTMyIGNwb3MpCitpbnQgb2NmczJfZmluZF9wYXRoKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIHUzMiBjcG9zKQogewogCXN0cnVjdCBmaW5kX3BhdGhfZGF0YSBkYXRhOwogCiAJZGF0YS5pbmRleCA9IDE7CiAJZGF0YS5wYXRoID0gcGF0aDsKLQlyZXR1cm4gX19vY2ZzMl9maW5kX3BhdGgoaW5vZGUsIHBhdGhfcm9vdF9lbChwYXRoKSwgY3BvcywKKwlyZXR1cm4gX19vY2ZzMl9maW5kX3BhdGgoY2ksIHBhdGhfcm9vdF9lbChwYXRoKSwgY3BvcywKIAkJCQkgZmluZF9wYXRoX2lucywgJmRhdGEpOwogfQogCkBAIC0xODY4LDEzICsxOTQ1LDE0IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhbmRsZSBub24gYnRyZWUgZXh0ZW50IGxpc3RzLgogICovCi1pbnQgb2NmczJfZmluZF9sZWFmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcm9vdF9lbCwKLQkJICAgIHUzMiBjcG9zLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsZWFmX2JoKQoraW50IG9jZnMyX2ZpbmRfbGVhZihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcm9vdF9lbCwgdTMyIGNwb3MsCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsZWFmX2JoKQogewogCWludCByZXQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAKLQlyZXQgPSBfX29jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcm9vdF9lbCwgY3BvcywgZmluZF9sZWFmX2lucywgJmJoKTsKKwlyZXQgPSBfX29jZnMyX2ZpbmRfcGF0aChjaSwgcm9vdF9lbCwgY3BvcywgZmluZF9sZWFmX2lucywgJmJoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0xOTgwLDcgKzIwNTgsNyBAQAogICogICAtIFdoZW4gd2UndmUgYWRqdXN0ZWQgdGhlIGxhc3QgZXh0ZW50IHJlY29yZCBpbiB0aGUgbGVmdCBwYXRoIGxlYWYgYW5kIHRoZQogICogICAgIDFzdCBleHRlbnQgcmVjb3JkIGluIHRoZSByaWdodCBwYXRoIGxlYWYgZHVyaW5nIGNyb3NzIGV4dGVudCBibG9jayBtZXJnZS4KICAqLwotc3RhdGljIHZvaWQgb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyB2b2lkIG9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGgsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCSAgICAgICBpbnQgc3VidHJlZV9pbmRleCkKQEAgLTIwNTgsOCArMjEzNiw4IEBACiAJCW1sb2dfZXJybm8ocmV0KTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfc3VidHJlZV9yaWdodChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX3JpZ2h0KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAogCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCSAgICAgIGludCBzdWJ0cmVlX2luZGV4KQpAQCAtMjA3NSwxMCArMjE1MywxMCBAQAogCWxlZnRfZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKIAogCWlmIChsZWZ0X2VsLT5sX25leHRfZnJlZV9yZWMgIT0gbGVmdF9lbC0+bF9jb3VudCkgewotCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCiAJCQkgICAgIklub2RlICVsbHUgaGFzIG5vbi1mdWxsIGludGVyaW9yIGxlYWYgbm9kZSAlbGx1IgogCQkJICAgICIobmV4dCBmcmVlID0gJXUpIiwKLQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWZ0X2xlYWZfYmgtPmJfYmxvY2tuciwKIAkJCSAgICBsZTE2X3RvX2NwdShsZWZ0X2VsLT5sX25leHRfZnJlZV9yZWMpKTsKIAkJcmV0dXJuIC1FUk9GUzsKQEAgLTIwOTQsNyArMjE3Miw3IEBACiAJcm9vdF9iaCA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfaW5kZXhdLmJoOwogCUJVR19PTihyb290X2JoICE9IHJpZ2h0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX2luZGV4XS5iaCk7CiAKLQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHJpZ2h0X3BhdGgsCisJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwgcmlnaHRfcGF0aCwKIAkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yMTAyLDE0ICsyMTgwLDE0IEBACiAJfQogCiAJZm9yKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsgaSA8IHBhdGhfbnVtX2l0ZW1zKHJpZ2h0X3BhdGgpOyBpKyspIHsKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLAogCQkJCQkJICAgcmlnaHRfcGF0aCwgaSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLAogCQkJCQkJICAgbGVmdF9wYXRoLCBpKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjEyMyw3ICsyMjAxLDcgQEAKIAkvKiBUaGlzIGlzIGEgY29kZSBlcnJvciwgbm90IGEgZGlzayBjb3JydXB0aW9uLiAqLwogCW1sb2dfYnVnX29uX21zZyghcmlnaHRfZWwtPmxfbmV4dF9mcmVlX3JlYywgIklub2RlICVsbHU6IFJvdGF0ZSBmYWlscyAiCiAJCQkiYmVjYXVzZSByaWdodG1vc3QgbGVhZiBibG9jayAlbGx1IGlzIGVtcHR5XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQkodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJpZ2h0X2xlYWZfYmgtPmJfYmxvY2tucik7CiAKIAlvY2ZzMl9jcmVhdGVfZW1wdHlfZXh0ZW50KHJpZ2h0X2VsKTsKQEAgLTIxNTcsOCArMjIzNSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKLQkJCQlzdWJ0cmVlX2luZGV4KTsKKwlvY2ZzMl9jb21wbGV0ZV9lZGdlX2luc2VydChoYW5kbGUsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKKwkJCQkgICBzdWJ0cmVlX2luZGV4KTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC0yMjQ4LDEwICsyMzI2LDE4IEBACiAJCQkJCSAgIGludCBvcF9jcmVkaXRzLAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKIHsKKwlpbnQgcmV0OwogCWludCBjcmVkaXRzID0gKHBhdGgtPnBfdHJlZV9kZXB0aCAtIHN1YnRyZWVfZGVwdGgpICogMiArIDEgKyBvcF9jcmVkaXRzOwogCi0JaWYgKGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyA8IGNyZWRpdHMpCi0JCXJldHVybiBvY2ZzMl9leHRlbmRfdHJhbnMoaGFuZGxlLCBjcmVkaXRzKTsKKwlpZiAoaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzIDwgY3JlZGl0cykgeworCQlyZXQgPSBvY2ZzMl9leHRlbmRfdHJhbnMoaGFuZGxlLAorCQkJCQkgY3JlZGl0cyAtIGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmICh1bmxpa2VseShoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMgPCBjcmVkaXRzKSkKKwkJCXJldHVybiBvY2ZzMl9leHRlbmRfdHJhbnMoaGFuZGxlLCBjcmVkaXRzKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMjEsOCArMjQwNyw4IEBACiAgKiAgICpyZXRfbGVmdF9wYXRoIHdpbGwgY29udGFpbiBhIHZhbGlkIHBhdGggd2hpY2ggY2FuIGJlIHBhc3NlZCB0bwogICogICBvY2ZzMl9pbnNlcnRfcGF0aCgpLgogICovCi1zdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV90cmVlX3JpZ2h0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfcm90YXRlX3RyZWVfcmlnaHQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgIGVudW0gb2NmczJfc3BsaXRfdHlwZSBzcGxpdCwKIAkJCQkgICB1MzIgaW5zZXJ0X2Nwb3MsCiAJCQkJICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCkBAIC0yMzMxLDYgKzI0MTcsNyBAQAogCWludCByZXQsIHN0YXJ0LCBvcmlnX2NyZWRpdHMgPSBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHM7CiAJdTMyIGNwb3M7CiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpOwogCiAJKnJldF9sZWZ0X3BhdGggPSBOVUxMOwogCkBAIC0yMzQxLDcgKzI0MjgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcmlnaHRfcGF0aCwgJmNwb3MpOworCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKHNiLCByaWdodF9wYXRoLCAmY3Bvcyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjM3OSw3ICsyNDY2LDcgQEAKIAkJbWxvZygwLCAiUm90YXRpbmcgYSB0cmVlOiBpbnMuIGNwb3M6ICV1LCBsZWZ0IHBhdGggY3BvczogJXVcbiIsCiAJCSAgICAgaW5zZXJ0X2Nwb3MsIGNwb3MpOwogCi0JCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBjcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgbGVmdF9wYXRoLCBjcG9zKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0yMzg3LDEwICsyNDc0LDExIEBACiAKIAkJbWxvZ19idWdfb25fbXNnKHBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpID09CiAJCQkJcGF0aF9sZWFmX2JoKHJpZ2h0X3BhdGgpLAotCQkJCSJJbm9kZSAlbHU6IGVycm9yIGR1cmluZyBpbnNlcnQgb2YgJXUgIgorCQkJCSJPd25lciAlbGx1OiBlcnJvciBkdXJpbmcgaW5zZXJ0IG9mICV1ICIKIAkJCQkiKGxlZnQgcGF0aCBjcG9zICV1KSByZXN1bHRzIGluIHR3byBpZGVudGljYWwgIgogCQkJCSJwYXRocyBlbmRpbmcgYXQgJWxsdVxuIiwKLQkJCQlpbm9kZS0+aV9pbm8sIGluc2VydF9jcG9zLCBjcG9zLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKKwkJCQlpbnNlcnRfY3BvcywgY3BvcywKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKQogCQkJCXBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpLT5iX2Jsb2NrbnIpOwogCkBAIC0yNDE2LDcgKzI1MDQsNyBAQAogCQkJZ290byBvdXRfcmV0X3BhdGg7CiAJCX0KIAotCQlzdGFydCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGlub2RlLCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgpOworCQlzdGFydCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgpOwogCiAJCW1sb2coMCwgIlN1YnRyZWUgcm9vdCBhdCBpbmRleCAlZCAoYmxrICVsbHUsIGRlcHRoICVkKVxuIiwKIAkJICAgICBzdGFydCwKQEAgLTI0MzAsNyArMjUxOCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX3JpZ2h0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwKKwkJcmV0ID0gb2NmczJfcm90YXRlX3N1YnRyZWVfcmlnaHQoaGFuZGxlLCBldCwgbGVmdF9wYXRoLAogCQkJCQkJIHJpZ2h0X3BhdGgsIHN0YXJ0KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjQ2Miw4ICsyNTUwLDcgQEAKIAkJICovCiAJCW9jZnMyX212X3BhdGgocmlnaHRfcGF0aCwgbGVmdF9wYXRoKTsKIAotCQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcmlnaHRfcGF0aCwKLQkJCQkJCSAgICAmY3Bvcyk7CisJCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKHNiLCByaWdodF9wYXRoLCAmY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtMjQ3Nyw3ICsyNTY0LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3VwZGF0ZV9lZGdlX2xlbmd0aHMoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfdXBkYXRlX2VkZ2VfbGVuZ3RocyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgIGludCBzdWJ0cmVlX2luZGV4LCBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKIHsKIAlpbnQgaSwgaWR4LCByZXQ7CkBAIC0yNTAyLDcgKzI1OTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGlub2RlLCBoYW5kbGUsIHBhdGgpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoZXQtPmV0X2NpLCBoYW5kbGUsIHBhdGgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTI1MzIsNyArMjYyMCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfdW5saW5rX3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyB2b2lkIG9jZnMyX3VubGlua19wYXRoKGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgaW50IHVubGlua19zdGFydCkKIHsKQEAgLTI1NTQsMTIgKzI2NDMsMTIgQEAKIAkJCW1sb2coTUxfRVJST1IsCiAJCQkgICAgICJJbm9kZSAlbGx1LCBhdHRlbXB0ZWQgdG8gcmVtb3ZlIGV4dGVudCBibG9jayAiCiAJCQkgICAgICIlbGx1IHdpdGggJXUgcmVjb3Jkc1xuIiwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShlYi0+aF9ibGtubyksCiAJCQkgICAgIGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpKTsKIAogCQkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoKTsKLQkJCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKGlub2RlLCBiaCk7CisJCQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShldC0+ZXRfY2ksIGJoKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTI1NzIsMTEgKzI2NjEsMTIgQEAKIAkJaWYgKHJldCkKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAotCQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShpbm9kZSwgYmgpOworCQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShldC0+ZXRfY2ksIGJoKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX3VubGlua19zdWJ0cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgdm9pZCBvY2ZzMl91bmxpbmtfc3VidHJlZShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAogCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCwKIAkJCQkgaW50IHN1YnRyZWVfaW5kZXgsCkBAIC0yNjA3LDE3ICsyNjk3LDE3IEBACiAJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHJvb3RfYmgpOwogCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBwYXRoX2xlYWZfYmgobGVmdF9wYXRoKSk7CiAKLQlvY2ZzMl91bmxpbmtfcGF0aChpbm9kZSwgaGFuZGxlLCBkZWFsbG9jLCByaWdodF9wYXRoLAorCW9jZnMyX3VubGlua19wYXRoKGhhbmRsZSwgZXQsIGRlYWxsb2MsIHJpZ2h0X3BhdGgsCiAJCQkgIHN1YnRyZWVfaW5kZXggKyAxKTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfc3VidHJlZV9sZWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX2xlZnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCiAJCQkJICAgICBpbnQgc3VidHJlZV9pbmRleCwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgICAgaW50ICpkZWxldGVkLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKKwkJCQkgICAgIGludCAqZGVsZXRlZCkKIHsKIAlpbnQgcmV0LCBpLCBkZWxfcmlnaHRfc3VidHJlZSA9IDAsIHJpZ2h0X2hhc19lbXB0eSA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLCAqZXRfcm9vdF9iaCA9IHBhdGhfcm9vdF9iaChyaWdodF9wYXRoKTsKQEAgLTI2NTMsNyArMjc0Myw3IEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlpZiAobGUxNl90b19jcHUocmlnaHRfbGVhZl9lbC0+bF9uZXh0X2ZyZWVfcmVjKSA+IDEpIHsKLQkJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZSwgaW5vZGUsCisJCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCSAgICAgIHBhdGhfbGVhZl9iaChyaWdodF9wYXRoKSwKIAkJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJCWlmIChyZXQpIHsKQEAgLTI2NzIsNyArMjc2Miw3IEBACiAJCSAqIFdlIGhhdmUgdG8gdXBkYXRlIGlfbGFzdF9lYl9ibGsgZHVyaW5nIHRoZSBtZXRhCiAJCSAqIGRhdGEgZGVsZXRlLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBldCwKKwkJcmV0ID0gb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LAogCQkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNjg4LDcgKzI3NzgsNyBAQAogCSAqLwogCUJVR19PTihyaWdodF9oYXNfZW1wdHkgJiYgIWRlbF9yaWdodF9zdWJ0cmVlKTsKIAotCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcmlnaHRfcGF0aCwKKwlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCByaWdodF9wYXRoLAogCQkJCQkgICBzdWJ0cmVlX2luZGV4KTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI2OTYsMTQgKzI3ODYsMTQgQEAKIAl9CiAKIAlmb3IoaSA9IHN1YnRyZWVfaW5kZXggKyAxOyBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgewotCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsCisJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkgICByaWdodF9wYXRoLCBpKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsCisJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkgICBsZWZ0X3BhdGgsIGkpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNzQwLDkgKzI4MzAsOSBAQAogCQltbG9nX2Vycm5vKHJldCk7CiAKIAlpZiAoZGVsX3JpZ2h0X3N1YnRyZWUpIHsKLQkJb2NmczJfdW5saW5rX3N1YnRyZWUoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQlvY2ZzMl91bmxpbmtfc3VidHJlZShoYW5kbGUsIGV0LCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgsCiAJCQkJICAgICBzdWJ0cmVlX2luZGV4LCBkZWFsbG9jKTsKLQkJcmV0ID0gb2NmczJfdXBkYXRlX2VkZ2VfbGVuZ3Rocyhpbm9kZSwgaGFuZGxlLCBzdWJ0cmVlX2luZGV4LAorCQlyZXQgPSBvY2ZzMl91cGRhdGVfZWRnZV9sZW5ndGhzKGhhbmRsZSwgZXQsIHN1YnRyZWVfaW5kZXgsCiAJCQkJCQlsZWZ0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNzY2LDcgKzI4NTYsNyBAQAogCiAJCSpkZWxldGVkID0gMTsKIAl9IGVsc2UKLQkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQlvY2ZzMl9jb21wbGV0ZV9lZGdlX2luc2VydChoYW5kbGUsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKIAkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAKIG91dDoKQEAgLTI4NTIsOCArMjk0Miw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfcmlnaHRtb3N0X2xlYWZfbGVmdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfcm90YXRlX3JpZ2h0bW9zdF9sZWFmX2xlZnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCkKIHsKIAlpbnQgcmV0OwpAQCAtMjg2Myw3ICsyOTUzLDcgQEAKIAlpZiAoIW9jZnMyX2lzX2VtcHR5X2V4dGVudCgmZWwtPmxfcmVjc1swXSkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoLAorCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksIHBhdGgsCiAJCQkJCSAgIHBhdGhfbnVtX2l0ZW1zKHBhdGgpIC0gMSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yODgwLDI0ICsyOTcwLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX29jZnMyX3JvdGF0ZV90cmVlX2xlZnQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwgaW50IG9yaWdfY3JlZGl0cywKK3N0YXRpYyBpbnQgX19vY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgIGludCBvcmlnX2NyZWRpdHMsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKLQkJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKiplbXB0eV9leHRlbnRfcGF0aCwKLQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKKwkJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKiplbXB0eV9leHRlbnRfcGF0aCkKIHsKIAlpbnQgcmV0LCBzdWJ0cmVlX3Jvb3QsIGRlbGV0ZWQ7CiAJdTMyIHJpZ2h0X2Nwb3M7CiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGggPSBOVUxMOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAogCUJVR19PTighb2NmczJfaXNfZW1wdHlfZXh0ZW50KCYocGF0aF9sZWFmX2VsKHBhdGgpLT5sX3JlY3NbMF0pKSk7CiAKIAkqZW1wdHlfZXh0ZW50X3BhdGggPSBOVUxMOwogCi0JcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKGlub2RlLT5pX3NiLCBwYXRoLAotCQkJCQkgICAgICZyaWdodF9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc2IsIHBhdGgsICZyaWdodF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0yOTIwLDEzICszMDEwLDEzIEBACiAJfQogCiAJd2hpbGUgKHJpZ2h0X2Nwb3MpIHsKLQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcmlnaHRfcGF0aCwgcmlnaHRfY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc3VidHJlZV9yb290ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsIGxlZnRfcGF0aCwKKwkJc3VidHJlZV9yb290ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoZXQsIGxlZnRfcGF0aCwKIAkJCQkJCSAgICAgICByaWdodF9wYXRoKTsKIAogCQltbG9nKDAsICJTdWJ0cmVlIHJvb3QgYXQgaW5kZXggJWQgKGJsayAlbGx1LCBkZXB0aCAlZClcbiIsCkBAIC0yOTQ2LDE2ICszMDM2LDE2IEBACiAJCSAqIENhbGxlciBtaWdodCBzdGlsbCB3YW50IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUKIAkJICogdHJlZSByb290LCBzbyByZS1hZGQgaXQgdG8gdGhlIGpvdXJuYWwgaGVyZS4KIAkJICovCi0JCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCSAgIGxlZnRfcGF0aCwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gb2NmczJfcm90YXRlX3N1YnRyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgsCisJCXJldCA9IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX2xlZnQoaGFuZGxlLCBldCwgbGVmdF9wYXRoLAogCQkJCQkJcmlnaHRfcGF0aCwgc3VidHJlZV9yb290LAotCQkJCQkJZGVhbGxvYywgJmRlbGV0ZWQsIGV0KTsKKwkJCQkJCWRlYWxsb2MsICZkZWxldGVkKTsKIAkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CiAJCQkvKgogCQkJICogVGhlIHJvdGF0aW9uIGhhcyB0byB0ZW1wb3JhcmlseSBzdG9wIGR1ZSB0bwpAQCAtMjk4Miw3ICszMDcyLDcgQEAKIAogCQlvY2ZzMl9tdl9wYXRoKGxlZnRfcGF0aCwgcmlnaHRfcGF0aCk7CiAKLQkJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKGlub2RlLT5pX3NiLCBsZWZ0X3BhdGgsCisJCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzYiwgbGVmdF9wYXRoLAogCQkJCQkJICAgICAmcmlnaHRfY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI5OTcsMTAgKzMwODcsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3JlbW92ZV9yaWdodG1vc3RfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfcmlnaHRtb3N0X3BhdGgoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCXN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAotCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCiB7CiAJaW50IHJldCwgc3VidHJlZV9pbmRleDsKIAl1MzIgY3BvczsKQEAgLTMwMDksNyArMzA5OSw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAogCi0JcmV0ID0gb2NmczJfZXRfc2FuaXR5X2NoZWNrKGlub2RlLCBldCk7CisJcmV0ID0gb2NmczJfZXRfc2FuaXR5X2NoZWNrKGV0KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAkvKgpAQCAtMzAyNCwxMyArMzExNCwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGlub2RlLCBoYW5kbGUsIHBhdGgpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoZXQtPmV0X2NpLCBoYW5kbGUsIHBhdGgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcGF0aCwgJmNwb3MpOworCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpLAorCQkJCQkgICAgcGF0aCwgJmNwb3MpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMwNDgsMjMgKzMxMzksMjMgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGNwb3MpOworCQlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBsZWZ0X3BhdGgsIGNwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoKTsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChldC0+ZXRfY2ksIGhhbmRsZSwgbGVmdF9wYXRoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsIGxlZnRfcGF0aCwgcGF0aCk7CisJCXN1YnRyZWVfaW5kZXggPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChldCwgbGVmdF9wYXRoLCBwYXRoKTsKIAotCQlvY2ZzMl91bmxpbmtfc3VidHJlZShpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgsIHBhdGgsCisJCW9jZnMyX3VubGlua19zdWJ0cmVlKGhhbmRsZSwgZXQsIGxlZnRfcGF0aCwgcGF0aCwKIAkJCQkgICAgIHN1YnRyZWVfaW5kZXgsIGRlYWxsb2MpOwotCQlyZXQgPSBvY2ZzMl91cGRhdGVfZWRnZV9sZW5ndGhzKGlub2RlLCBoYW5kbGUsIHN1YnRyZWVfaW5kZXgsCisJCXJldCA9IG9jZnMyX3VwZGF0ZV9lZGdlX2xlbmd0aHMoaGFuZGxlLCBldCwgc3VidHJlZV9pbmRleCwKIAkJCQkJCWxlZnRfcGF0aCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMwNzgsMTAgKzMxNjksMTAgQEAKIAkJICogJ3BhdGgnIGlzIGFsc28gdGhlIGxlZnRtb3N0IHBhdGggd2hpY2gKIAkJICogbWVhbnMgaXQgbXVzdCBiZSB0aGUgb25seSBvbmUuIFRoaXMgZ2V0cwogCQkgKiBoYW5kbGVkIGRpZmZlcmVudGx5IGJlY2F1c2Ugd2Ugd2FudCB0bwotCQkgKiByZXZlcnQgdGhlIGlub2RlIGJhY2sgdG8gaGF2aW5nIGV4dGVudHMKKwkJICogcmV2ZXJ0IHRoZSByb290IGJhY2sgdG8gaGF2aW5nIGV4dGVudHMKIAkJICogaW4tbGluZS4KIAkJICovCi0JCW9jZnMyX3VubGlua19wYXRoKGlub2RlLCBoYW5kbGUsIGRlYWxsb2MsIHBhdGgsIDEpOworCQlvY2ZzMl91bmxpbmtfcGF0aChoYW5kbGUsIGV0LCBkZWFsbG9jLCBwYXRoLCAxKTsKIAogCQllbCA9IGV0LT5ldF9yb290X2VsOwogCQllbC0+bF90cmVlX2RlcHRoID0gMDsKQEAgLTMxMTQsMTAgKzMyMDUsMTAgQEAKICAqIHRoZSByaWdodG1vc3QgdHJlZSBsZWFmIHJlY29yZCBpcyByZW1vdmVkIHNvIHRoZSBjYWxsZXIgaXMKICAqIHJlc3BvbnNpYmxlIGZvciBkZXRlY3RpbmcgYW5kIGNvcnJlY3RpbmcgdGhhdC4KICAqLwotc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKKwkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQogewogCWludCByZXQsIG9yaWdfY3JlZGl0cyA9IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqdG1wX3BhdGggPSBOVUxMLCAqcmVzdGFydF9wYXRoID0gTlVMTDsKQEAgLTMxMzQsOCArMzIyNSw3IEBACiAJCSAqIElubGluZSBleHRlbnRzLiBUaGlzIGlzIHRyaXZpYWxseSBoYW5kbGVkLCBzbyBkbwogCQkgKiBpdCB1cCBmcm9udC4KIAkJICovCi0JCXJldCA9IG9jZnMyX3JvdGF0ZV9yaWdodG1vc3RfbGVhZl9sZWZ0KGlub2RlLCBoYW5kbGUsCi0JCQkJCQkgICAgICAgcGF0aCk7CisJCXJldCA9IG9jZnMyX3JvdGF0ZV9yaWdodG1vc3RfbGVhZl9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMxNTEsNyArMzI0MSw3IEBACiAJICoKIAkgKiAgMSkgaXMgaGFuZGxlZCB2aWEgb2NmczJfcm90YXRlX3JpZ2h0bW9zdF9sZWFmX2xlZnQoKQogCSAqICAyYSkgd2UgbmVlZCB0aGUgbGVmdCBicmFuY2ggc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGl0IHdpdGggdGhlIHVubGluawotCSAqICAyYikgd2UgbmVlZCB0byBicmluZyB0aGUgaW5vZGUgYmFjayB0byBpbmxpbmUgZXh0ZW50cy4KKwkgKiAgMmIpIHdlIG5lZWQgdG8gYnJpbmcgdGhlIHJvb3QgYmFjayB0byBpbmxpbmUgZXh0ZW50cy4KIAkgKi8KIAogCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKilwYXRoX2xlYWZfYmgocGF0aCktPmJfZGF0YTsKQEAgLTMxNjcsOSArMzI1Nyw5IEBACiAKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IDApIHsKIAkJCXJldCA9IC1FSU87Ci0JCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCQkgICAgIklub2RlICVsbHUgaGFzIGVtcHR5IGV4dGVudCBibG9jayBhdCAlbGx1IiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQlvY2ZzMl9lcnJvcihvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGVtcHR5IGV4dGVudCBibG9jayBhdCAlbGx1IiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGViLT5oX2Jsa25vKSk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzE4Myw4ICszMjczLDggQEAKIAkJICogbm9uZW1wdHkgbGlzdC4KIAkJICovCiAKLQkJcmV0ID0gb2NmczJfcmVtb3ZlX3JpZ2h0bW9zdF9wYXRoKGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCQkgIGRlYWxsb2MsIGV0KTsKKwkJcmV0ID0gb2NmczJfcmVtb3ZlX3JpZ2h0bW9zdF9wYXRoKGhhbmRsZSwgZXQsIHBhdGgsCisJCQkJCQkgIGRlYWxsb2MpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMxOTUsOCArMzI4NSw4IEBACiAJICogYW5kIHJlc3RhcnRpbmcgZnJvbSB0aGVyZS4KIAkgKi8KIHRyeV9yb3RhdGU6Ci0JcmV0ID0gX19vY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIG9yaWdfY3JlZGl0cywgcGF0aCwKLQkJCQkgICAgICAgZGVhbGxvYywgJnJlc3RhcnRfcGF0aCwgZXQpOworCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChoYW5kbGUsIGV0LCBvcmlnX2NyZWRpdHMsIHBhdGgsCisJCQkJICAgICAgIGRlYWxsb2MsICZyZXN0YXJ0X3BhdGgpOwogCWlmIChyZXQgJiYgcmV0ICE9IC1FQUdBSU4pIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMyMDYsOSArMzI5Niw5IEBACiAJCXRtcF9wYXRoID0gcmVzdGFydF9wYXRoOwogCQlyZXN0YXJ0X3BhdGggPSBOVUxMOwogCi0JCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBvcmlnX2NyZWRpdHMsCisJCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChoYW5kbGUsIGV0LCBvcmlnX2NyZWRpdHMsCiAJCQkJCSAgICAgICB0bXBfcGF0aCwgZGVhbGxvYywKLQkJCQkJICAgICAgICZyZXN0YXJ0X3BhdGgsIGV0KTsKKwkJCQkJICAgICAgICZyZXN0YXJ0X3BhdGgpOwogCQlpZiAocmV0ICYmIHJldCAhPSAtRUFHQUlOKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTMyNTksNyArMzM0OSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG9jZnMyX2dldF9yaWdodF9wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IG9jZnMyX2dldF9yaWdodF9wYXRoKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCwKIAkJCQlzdHJ1Y3Qgb2NmczJfcGF0aCAqKnJldF9yaWdodF9wYXRoKQogewpAQCAtMzI3Niw4ICszMzY2LDggQEAKIAlsZWZ0X2VsID0gcGF0aF9sZWFmX2VsKGxlZnRfcGF0aCk7CiAJQlVHX09OKGxlZnRfZWwtPmxfbmV4dF9mcmVlX3JlYyAhPSBsZWZ0X2VsLT5sX2NvdW50KTsKIAotCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihpbm9kZS0+aV9zYiwgbGVmdF9wYXRoLAotCQkJCQkgICAgICZyaWdodF9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJCSAgICAgbGVmdF9wYXRoLCAmcmlnaHRfY3Bvcyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMzI5Myw3ICszMzgzLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0zMzEzLDkgKzM0MDMsOSBAQAogICogRm9yIGluZGV4ID09IGxfY291bnQgLSAxLCB0aGUgIm5leHQiIG1lYW5zIHRoZSAxc3QgZXh0ZW50IHJlYyBvZiB0aGUKICAqIG5leHQgZXh0ZW50IGJsb2NrLgogICovCi1zdGF0aWMgaW50IG9jZnMyX21lcmdlX3JlY19yaWdodChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAorc3RhdGljIGludCBvY2ZzMl9tZXJnZV9yZWNfcmlnaHQoc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCwKIAkJCQkgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKIAkJCQkgaW50IGluZGV4KQogewpAQCAtMzMzNiw3ICszNDI2LDcgQEAKIAlpZiAoaW5kZXggPT0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxICYmCiAJICAgIGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IGxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSkgewogCQkvKiB3ZSBtZWV0IHdpdGggYSBjcm9zcyBleHRlbnQgYmxvY2sgbWVyZ2UuICovCi0JCXJldCA9IG9jZnMyX2dldF9yaWdodF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsICZyaWdodF9wYXRoKTsKKwkJcmV0ID0gb2NmczJfZ2V0X3JpZ2h0X3BhdGgoZXQsIGxlZnRfcGF0aCwgJnJpZ2h0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTMzNTUsOCArMzQ0NSw4IEBACiAJCSAgICAgICBsZTE2X3RvX2NwdShsZWZ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSAhPQogCQkgICAgICAgbGUzMl90b19jcHUocmlnaHRfcmVjLT5lX2Nwb3MpKTsKIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsCi0JCQkJCQkJbGVmdF9wYXRoLCByaWdodF9wYXRoKTsKKwkJc3VidHJlZV9pbmRleCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsCisJCQkJCQkJcmlnaHRfcGF0aCk7CiAKIAkJcmV0ID0gb2NmczJfZXh0ZW5kX3JvdGF0ZV90cmFuc2FjdGlvbihoYW5kbGUsIHN1YnRyZWVfaW5kZXgsCiAJCQkJCQkgICAgICBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMsCkBAIC0zMzY5LDcgKzM0NTksNyBAQAogCQlyb290X2JoID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9pbmRleF0uYmg7CiAJCUJVR19PTihyb290X2JoICE9IHJpZ2h0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX2luZGV4XS5iaCk7CiAKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCByaWdodF9wYXRoLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCByaWdodF9wYXRoLAogCQkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMzNzgsMTQgKzM0NjgsMTQgQEAKIAogCQlmb3IgKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsKIAkJICAgICBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgewotCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCQkgICByaWdodF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkJICAgbGVmdF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zMzk4LDcgKzM0ODgsNyBAQAogCQlyaWdodF9yZWMgPSAmZWwtPmxfcmVjc1tpbmRleCArIDFdOwogCX0KIAotCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgbGVmdF9wYXRoLAorCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksIGxlZnRfcGF0aCwKIAkJCQkJICAgcGF0aF9udW1faXRlbXMobGVmdF9wYXRoKSAtIDEpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzQwOSw3ICszNDk5LDggQEAKIAogCWxlMzJfYWRkX2NwdSgmcmlnaHRfcmVjLT5lX2Nwb3MsIC1zcGxpdF9jbHVzdGVycyk7CiAJbGU2NF9hZGRfY3B1KCZyaWdodF9yZWMtPmVfYmxrbm8sCi0JCSAgICAgLW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgc3BsaXRfY2x1c3RlcnMpKTsKKwkJICAgICAtb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpLAorCQkJCQkgICAgICAgc3BsaXRfY2x1c3RlcnMpKTsKIAlsZTE2X2FkZF9jcHUoJnJpZ2h0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzLCBzcGxpdF9jbHVzdGVycyk7CiAKIAlvY2ZzMl9jbGVhbnVwX21lcmdlKGVsLCBpbmRleCk7CkBAIC0zNDIzLDggKzM1MTQsOCBAQAogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCi0JCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwKLQkJCQkJICAgcmlnaHRfcGF0aCwgc3VidHJlZV9pbmRleCk7CisJCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQkJCQkgICBzdWJ0cmVlX2luZGV4KTsKIAl9CiBvdXQ6CiAJaWYgKHJpZ2h0X3BhdGgpCkBAIC0zNDMyLDcgKzM1MjMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZ2V0X2xlZnRfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl9nZXRfbGVmdF9wYXRoKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKipyZXRfbGVmdF9wYXRoKQogewpAQCAtMzQ0NSw3ICszNTM2LDcgQEAKIAkvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIG5vbi10cmVlcy4gKi8KIAlCVUdfT04ocmlnaHRfcGF0aC0+cF90cmVlX2RlcHRoID09IDApOwogCi0JcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoaW5vZGUtPmlfc2IsCisJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCiAJCQkJCSAgICByaWdodF9wYXRoLCAmbGVmdF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTM0NjIsNyArMzU1Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBsZWZ0X2Nwb3MpOworCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIGxlZnRfcGF0aCwgbGVmdF9jcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0zNDg1LDEyICszNTc2LDExIEBACiAgKiByZW1vdmUgdGhlIHJpZ2h0bW9zdCBsZWFmIGV4dGVudCBibG9jayBpbiB0aGUgcmlnaHRfcGF0aCBhbmQgY2hhbmdlCiAgKiB0aGUgcmlnaHQgcGF0aCB0byBpbmRpY2F0ZSB0aGUgbmV3IHJpZ2h0bW9zdCBwYXRoLgogICovCi1zdGF0aWMgaW50IG9jZnMyX21lcmdlX3JlY19sZWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGgsCitzdGF0aWMgaW50IG9jZnMyX21lcmdlX3JlY19sZWZ0KHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCWhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAogCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJaW50IGluZGV4KQogewogCWludCByZXQsIGksIHN1YnRyZWVfaW5kZXggPSAwLCBoYXNfZW1wdHlfZXh0ZW50ID0gMDsKQEAgLTM1MDgsNyArMzU5OCw3IEBACiAJcmlnaHRfcmVjID0gJmVsLT5sX3JlY3NbaW5kZXhdOwogCWlmIChpbmRleCA9PSAwKSB7CiAJCS8qIHdlIG1lZXQgd2l0aCBhIGNyb3NzIGV4dGVudCBibG9jayBtZXJnZS4gKi8KLQkJcmV0ID0gb2NmczJfZ2V0X2xlZnRfcGF0aChpbm9kZSwgcmlnaHRfcGF0aCwgJmxlZnRfcGF0aCk7CisJCXJldCA9IG9jZnMyX2dldF9sZWZ0X3BhdGgoZXQsIHJpZ2h0X3BhdGgsICZsZWZ0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTM1MjQsOCArMzYxNCw4IEBACiAJCSAgICAgICBsZTE2X3RvX2NwdShsZWZ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSAhPQogCQkgICAgICAgbGUzMl90b19jcHUoc3BsaXRfcmVjLT5lX2Nwb3MpKTsKIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsCi0JCQkJCQkJbGVmdF9wYXRoLCByaWdodF9wYXRoKTsKKwkJc3VidHJlZV9pbmRleCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsCisJCQkJCQkJcmlnaHRfcGF0aCk7CiAKIAkJcmV0ID0gb2NmczJfZXh0ZW5kX3JvdGF0ZV90cmFuc2FjdGlvbihoYW5kbGUsIHN1YnRyZWVfaW5kZXgsCiAJCQkJCQkgICAgICBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMsCkBAIC0zNTM4LDcgKzM2MjgsNyBAQAogCQlyb290X2JoID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9pbmRleF0uYmg7CiAJCUJVR19PTihyb290X2JoICE9IHJpZ2h0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX2luZGV4XS5iaCk7CiAKLQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCByaWdodF9wYXRoLAorCQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQtPmV0X2NpLCByaWdodF9wYXRoLAogCQkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTM1NDcsMTQgKzM2MzcsMTQgQEAKIAogCQlmb3IgKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsKIAkJICAgICBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgewotCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLAorCQkJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwKIAkJCQkJCQkgICByaWdodF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksCiAJCQkJCQkJICAgbGVmdF9wYXRoLCBpKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNTY3LDcgKzM2NTcsNyBAQAogCQkJaGFzX2VtcHR5X2V4dGVudCA9IDE7CiAJfQogCi0JcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCByaWdodF9wYXRoLAorCXJldCA9IG9jZnMyX3BhdGhfYmhfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldC0+ZXRfY2ksIHJpZ2h0X3BhdGgsCiAJCQkJCSAgIHBhdGhfbnVtX2l0ZW1zKHJpZ2h0X3BhdGgpIC0gMSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNTg2LDcgKzM2NzYsOCBAQAogCiAJbGUzMl9hZGRfY3B1KCZyaWdodF9yZWMtPmVfY3Bvcywgc3BsaXRfY2x1c3RlcnMpOwogCWxlNjRfYWRkX2NwdSgmcmlnaHRfcmVjLT5lX2Jsa25vLAotCQkgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgc3BsaXRfY2x1c3RlcnMpKTsKKwkJICAgICBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJCSAgICAgIHNwbGl0X2NsdXN0ZXJzKSk7CiAJbGUxNl9hZGRfY3B1KCZyaWdodF9yZWMtPmVfbGVhZl9jbHVzdGVycywgLXNwbGl0X2NsdXN0ZXJzKTsKIAogCW9jZnMyX2NsZWFudXBfbWVyZ2UoZWwsIGluZGV4KTsKQEAgLTM2MDgsOSArMzY5OSw5IEBACiAJCWlmIChsZTE2X3RvX2NwdShyaWdodF9yZWMtPmVfbGVhZl9jbHVzdGVycykgPT0gMCAmJgogCQkgICAgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMSkgewogCi0JCQlyZXQgPSBvY2ZzMl9yZW1vdmVfcmlnaHRtb3N0X3BhdGgoaW5vZGUsIGhhbmRsZSwKKwkJCXJldCA9IG9jZnMyX3JlbW92ZV9yaWdodG1vc3RfcGF0aChoYW5kbGUsIGV0LAogCQkJCQkJCSAgcmlnaHRfcGF0aCwKLQkJCQkJCQkgIGRlYWxsb2MsIGV0KTsKKwkJCQkJCQkgIGRlYWxsb2MpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCQlnb3RvIG91dDsKQEAgLTM2MjIsNyArMzcxMyw3IEBACiAJCQlvY2ZzMl9tdl9wYXRoKHJpZ2h0X3BhdGgsIGxlZnRfcGF0aCk7CiAJCQlsZWZ0X3BhdGggPSBOVUxMOwogCQl9IGVsc2UKLQkJCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwKKwkJCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGhhbmRsZSwgbGVmdF9wYXRoLAogCQkJCQkJICAgcmlnaHRfcGF0aCwgc3VidHJlZV9pbmRleCk7CiAJfQogb3V0OgpAQCAtMzYzMSwxNSArMzcyMiwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICAgaW50IHNwbGl0X2luZGV4LAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX21lcmdlX2N0eHQgKmN0eHQsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQotCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfbWVyZ2VfY3R4dCAqY3R4dCkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwpAQCAtMzY1NSw4ICszNzQ0LDcgQEAKIAkJICogZXh0ZW50cyAtIGhhdmluZyBtb3JlIHRoYW4gb25lIGluIGEgbGVhZiBpcwogCQkgKiBpbGxlZ2FsLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLAotCQkJCQkgICAgIGRlYWxsb2MsIGV0KTsKKwkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChoYW5kbGUsIGV0LCBwYXRoLCBkZWFsbG9jKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0zNjg1LDggKzM3NzMsNyBAQAogCQkgKiBwcmV2b2l1cyBleHRlbnQgYmxvY2suIEl0IGlzIG1vcmUgZWZmaWNpZW50IGFuZCBlYXNpZXIKIAkJICogaWYgd2UgZG8gbWVyZ2VfcmlnaHQgZmlyc3QgYW5kIG1lcmdlX2xlZnQgbGF0ZXIuCiAJCSAqLwotCQlyZXQgPSBvY2ZzMl9tZXJnZV9yZWNfcmlnaHQoaW5vZGUsIHBhdGgsCi0JCQkJCSAgICBoYW5kbGUsIHNwbGl0X3JlYywKKwkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX3JpZ2h0KHBhdGgsIGhhbmRsZSwgZXQsIHNwbGl0X3JlYywKIAkJCQkJICAgIHNwbGl0X2luZGV4KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzY5OSw4ICszNzg2LDcgQEAKIAkJQlVHX09OKCFvY2ZzMl9pc19lbXB0eV9leHRlbnQoJmVsLT5sX3JlY3NbMF0pKTsKIAogCQkvKiBUaGUgbWVyZ2UgbGVmdCB1cyB3aXRoIGFuIGVtcHR5IGV4dGVudCwgcmVtb3ZlIGl0LiAqLwotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCSAgICAgZGVhbGxvYywgZXQpOworCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgsIGRlYWxsb2MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTM3MTIsMTggKzM3OTgsMTUgQEAKIAkJICogTm90ZSB0aGF0IHdlIGRvbid0IHBhc3Mgc3BsaXRfcmVjIGhlcmUgb24gcHVycG9zZSAtCiAJCSAqIHdlJ3ZlIG1lcmdlZCBpdCBpbnRvIHRoZSByZWMgYWxyZWFkeS4KIAkJICovCi0JCXJldCA9IG9jZnMyX21lcmdlX3JlY19sZWZ0KGlub2RlLCBwYXRoLAotCQkJCQkgICBoYW5kbGUsIHJlYywKLQkJCQkJICAgZGVhbGxvYywgZXQsCi0JCQkJCSAgIHNwbGl0X2luZGV4KTsKKwkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX2xlZnQocGF0aCwgaGFuZGxlLCBldCwgcmVjLAorCQkJCQkgICBkZWFsbG9jLCBzcGxpdF9pbmRleCk7CiAKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCSAgICAgZGVhbGxvYywgZXQpOworCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgsIGRlYWxsb2MpOwogCQkvKgogCQkgKiBFcnJvciBmcm9tIHRoaXMgbGFzdCByb3RhdGUgaXMgbm90IGNyaXRpY2FsLCBzbwogCQkgKiBwcmludCBidXQgZG9uJ3QgYnViYmxlIGl0IHVwLgpAQCAtMzc0MCwxOSArMzgyMywxNiBAQAogCQkgKiB0aGUgcmVjb3JkIG9uIHRoZSBsZWZ0IChoZW5jZSB0aGUgbGVmdCBtZXJnZSkuCiAJCSAqLwogCQlpZiAoY3R4dC0+Y19jb250aWdfdHlwZSA9PSBDT05USUdfUklHSFQpIHsKLQkJCXJldCA9IG9jZnMyX21lcmdlX3JlY19sZWZ0KGlub2RlLAotCQkJCQkJICAgcGF0aCwKLQkJCQkJCSAgIGhhbmRsZSwgc3BsaXRfcmVjLAotCQkJCQkJICAgZGVhbGxvYywgZXQsCisJCQlyZXQgPSBvY2ZzMl9tZXJnZV9yZWNfbGVmdChwYXRoLCBoYW5kbGUsIGV0LAorCQkJCQkJICAgc3BsaXRfcmVjLCBkZWFsbG9jLAogCQkJCQkJICAgc3BsaXRfaW5kZXgpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXJldCA9IG9jZnMyX21lcmdlX3JlY19yaWdodChpbm9kZSwKLQkJCQkJCSAgICBwYXRoLAotCQkJCQkJICAgIGhhbmRsZSwgc3BsaXRfcmVjLAorCQkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX3JpZ2h0KHBhdGgsIGhhbmRsZSwKKwkJCQkJCSAgICBldCwgc3BsaXRfcmVjLAogCQkJCQkJICAgIHNwbGl0X2luZGV4KTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNzY1LDggKzM4NDUsOCBAQAogCQkJICogVGhlIG1lcmdlIG1heSBoYXZlIGxlZnQgYW4gZW1wdHkgZXh0ZW50IGluCiAJCQkgKiBvdXIgbGVhZi4gVHJ5IHRvIHJvdGF0ZSBpdCBhd2F5LgogCQkJICovCi0JCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCQkgICAgIGRlYWxsb2MsIGV0KTsKKwkJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaGFuZGxlLCBldCwgcGF0aCwKKwkJCQkJCSAgICAgZGVhbGxvYyk7CiAJCQlpZiAocmV0KQogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCXJldCA9IDA7CkBAIC0zODEyLDEwICszODkyLDEwIEBACiAgKiBsaXN0LiBJZiB0aGlzIGxlYWYgaXMgcGFydCBvZiBhbiBhbGxvY2F0aW9uIHRyZWUsIGl0IGlzIGFzc3VtZWQKICAqIHRoYXQgdGhlIHRyZWUgYWJvdmUgaGFzIGJlZW4gcHJlcGFyZWQuCiAgKi8KLXN0YXRpYyB2b2lkIG9jZnMyX2luc2VydF9hdF9sZWFmKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjLAorc3RhdGljIHZvaWQgb2NmczJfaW5zZXJ0X2F0X2xlYWYoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCiAJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCi0JCQkJIHN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSAqaW5zZXJ0LAotCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorCQkJCSBzdHJ1Y3Qgb2NmczJfaW5zZXJ0X3R5cGUgKmluc2VydCkKIHsKIAlpbnQgaSA9IGluc2VydC0+aW5zX2NvbnRpZ19pbmRleDsKIAl1bnNpZ25lZCBpbnQgcmFuZ2U7CkBAIC0zODI3LDcgKzM5MDcsOCBAQAogCQlpID0gb2NmczJfc2VhcmNoX2V4dGVudF9saXN0KGVsLCBsZTMyX3RvX2NwdShpbnNlcnRfcmVjLT5lX2Nwb3MpKTsKIAkJQlVHX09OKGkgPT0gLTEpOwogCQlyZWMgPSAmZWwtPmxfcmVjc1tpXTsKLQkJb2NmczJfc3VidHJhY3RfZnJvbV9yZWMoaW5vZGUtPmlfc2IsIGluc2VydC0+aW5zX3NwbGl0LCByZWMsCisJCW9jZnMyX3N1YnRyYWN0X2Zyb21fcmVjKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpLAorCQkJCQlpbnNlcnQtPmluc19zcGxpdCwgcmVjLAogCQkJCQlpbnNlcnRfcmVjKTsKIAkJZ290byByb3RhdGU7CiAJfQpAQCAtMzg2OSwxMCArMzk1MCwxMCBAQAogCiAJCW1sb2dfYnVnX29uX21zZyhsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA+PQogCQkJCWxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSwKLQkJCQkiaW5vZGUgJWx1LCBkZXB0aCAldSwgY291bnQgJXUsIG5leHQgZnJlZSAldSwgIgorCQkJCSJvd25lciAlbGx1LCBkZXB0aCAldSwgY291bnQgJXUsIG5leHQgZnJlZSAldSwgIgogCQkJCSJyZWMuY3BvcyAldSwgcmVjLmNsdXN0ZXJzICV1LCAiCiAJCQkJImluc2VydC5jcG9zICV1LCBpbnNlcnQuY2x1c3RlcnMgJXVcbiIsCi0JCQkJaW5vZGUtPmlfaW5vLAorCQkJCW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkJbGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCksCiAJCQkJbGUxNl90b19jcHUoZWwtPmxfY291bnQpLAogCQkJCWxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpLApAQCAtMzkwMCw4ICszOTgxLDggQEAKIAlvY2ZzMl9yb3RhdGVfbGVhZihlbCwgaW5zZXJ0X3JlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIHZvaWQgb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYykKIHsKQEAgLTM5MTksOSArNDAwMCw5IEBACiAKIAkJbmV4dF9mcmVlID0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYyk7CiAJCWlmIChuZXh0X2ZyZWUgPT0gMCkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJEaW5vZGUgJWxsdSBoYXMgYSBiYWQgZXh0ZW50IGxpc3QiLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisJCQlvY2ZzMl9lcnJvcihvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKSwKKwkJCQkgICAgIk93bmVyICVsbHUgaGFzIGEgYmFkIGV4dGVudCBsaXN0IiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpKTsKIAkJCXJldCA9IC1FSU87CiAJCQlyZXR1cm47CiAJCX0KQEAgLTM5NDEsNyArNDAyMiw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG9jZnMyX2FwcGVuZF9yZWNfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIGludCBvY2ZzMl9hcHBlbmRfcmVjX3RvX3BhdGgoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqKnJldF9sZWZ0X3BhdGgpCkBAIC0zOTY5LDggKzQwNTEsOCBAQAogCSAgICAobmV4dF9mcmVlID09IDEgJiYgb2NmczJfaXNfZW1wdHlfZXh0ZW50KCZlbC0+bF9yZWNzWzBdKSkpIHsKIAkJdTMyIGxlZnRfY3BvczsKIAotCQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcmlnaHRfcGF0aCwKLQkJCQkJCSAgICAmbGVmdF9jcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJCQkgICAgcmlnaHRfcGF0aCwgJmxlZnRfY3Bvcyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtMzk5Miw3ICs0MDc0LDggQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGxlZnRfY3Bvcyk7CisJCQlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBsZWZ0X3BhdGgsCisJCQkJCSAgICAgIGxlZnRfY3Bvcyk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJCWdvdG8gb3V0OwpAQCAtNDAwNSwxMyArNDA4OCwxMyBAQAogCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCByaWdodF9wYXRoKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCByaWdodF9wYXRoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGlub2RlLCBoYW5kbGUsIHJpZ2h0X3BhdGgsIGluc2VydF9yZWMpOworCW9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhoYW5kbGUsIGV0LCByaWdodF9wYXRoLCBpbnNlcnRfcmVjKTsKIAogCSpyZXRfbGVmdF9wYXRoID0gbGVmdF9wYXRoOwogCXJldCA9IDA7CkBAIC00MDIyLDcgKzQxMDUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9jZnMyX3NwbGl0X3JlY29yZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIHZvaWQgb2NmczJfc3BsaXRfcmVjb3JkKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCwKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCwKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLApAQCAtNDA5NSw3ICs0MTc4LDggQEAKIAl9CiAKIAlyZWMgPSAmZWwtPmxfcmVjc1tpbmRleF07Ci0Jb2NmczJfc3VidHJhY3RfZnJvbV9yZWMoaW5vZGUtPmlfc2IsIHNwbGl0LCByZWMsIHNwbGl0X3JlYyk7CisJb2NmczJfc3VidHJhY3RfZnJvbV9yZWMob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJc3BsaXQsIHJlYywgc3BsaXRfcmVjKTsKIAlvY2ZzMl9yb3RhdGVfbGVhZihpbnNlcnRfZWwsIHNwbGl0X3JlYyk7CiB9CiAKQEAgLTQxMDcsOCArNDE5MSw4IEBACiAgKiBpbi4gbGVmdF9wYXRoIHNob3VsZCBvbmx5IGJlIHBhc3NlZCBpbiBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGF0CiAgKiBwb3J0aW9uIG9mIHRoZSB0cmVlIGFmdGVyIGFuIGVkZ2UgaW5zZXJ0LgogICovCi1zdGF0aWMgaW50IG9jZnMyX2luc2VydF9wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgIGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IG9jZnMyX2luc2VydF9wYXRoKGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGgsCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYywKQEAgLTQxMzQsNyArNDIxOCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoKTsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChldC0+ZXRfY2ksIGhhbmRsZSwgbGVmdF9wYXRoKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNDE0NSw3ICs0MjI5LDcgQEAKIAkgKiBQYXNzIGJvdGggcGF0aHMgdG8gdGhlIGpvdXJuYWwuIFRoZSBtYWpvcml0eSBvZiBpbnNlcnRzCiAJICogd2lsbCBiZSB0b3VjaGluZyBhbGwgY29tcG9uZW50cyBhbnl3YXkuCiAJICovCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCByaWdodF9wYXRoKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCByaWdodF9wYXRoKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNDE1Nyw3ICs0MjQxLDcgQEAKIAkJICogb2Ygc3BsaXRzLCBidXQgaXQncyBlYXNpZXIgdG8ganVzdCBsZXQgb25lIHNlcGFyYXRlCiAJCSAqIGZ1bmN0aW9uIHNvcnQgaXQgYWxsIG91dC4KIAkJICovCi0JCW9jZnMyX3NwbGl0X3JlY29yZChpbm9kZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCQlvY2ZzMl9zcGxpdF9yZWNvcmQoZXQsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKIAkJCQkgICBpbnNlcnRfcmVjLCBpbnNlcnQtPmluc19zcGxpdCk7CiAKIAkJLyoKQEAgLTQxNzEsOCArNDI1NSw4IEBACiAJCQlpZiAocmV0KQogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAl9IGVsc2UKLQkJb2NmczJfaW5zZXJ0X2F0X2xlYWYoaW5zZXJ0X3JlYywgcGF0aF9sZWFmX2VsKHJpZ2h0X3BhdGgpLAotCQkJCSAgICAgaW5zZXJ0LCBpbm9kZSk7CisJCW9jZnMyX2luc2VydF9hdF9sZWFmKGV0LCBpbnNlcnRfcmVjLCBwYXRoX2xlYWZfZWwocmlnaHRfcGF0aCksCisJCQkJICAgICBpbnNlcnQpOwogCiAJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGxlYWZfYmgpOwogCWlmIChyZXQpCkBAIC00MTg1LDEwICs0MjY5LDEwIEBACiAJCSAqCiAJCSAqIFhYWDogU2hvdWxkIHdlIGV4dGVuZCB0aGUgdHJhbnNhY3Rpb24gaGVyZT8KIAkJICovCi0JCXN1YnRyZWVfaW5kZXggPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChpbm9kZSwgbGVmdF9wYXRoLAorCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoZXQsIGxlZnRfcGF0aCwKIAkJCQkJCQlyaWdodF9wYXRoKTsKLQkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLAotCQkJCQkgICByaWdodF9wYXRoLCBzdWJ0cmVlX2luZGV4KTsKKwkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaGFuZGxlLCBsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgsCisJCQkJCSAgIHN1YnRyZWVfaW5kZXgpOwogCX0KIAogCXJldCA9IDA7CkBAIC00MTk2LDggKzQyODAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZG9faW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjLAogCQkJCSAgc3RydWN0IG9jZnMyX2luc2VydF90eXBlICp0eXBlKQpAQCAtNDIxMCw3ICs0MjkzLDcgQEAKIAogCWVsID0gZXQtPmV0X3Jvb3RfZWw7CiAKLQlyZXQgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDIxOCw3ICs0MzAxLDcgQEAKIAl9CiAKIAlpZiAobGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCkgPT0gMCkgewotCQlvY2ZzMl9pbnNlcnRfYXRfbGVhZihpbnNlcnRfcmVjLCBlbCwgdHlwZSwgaW5vZGUpOworCQlvY2ZzMl9pbnNlcnRfYXRfbGVhZihldCwgaW5zZXJ0X3JlYywgZWwsIHR5cGUpOwogCQlnb3RvIG91dF91cGRhdGVfY2x1c3RlcnM7CiAJfQogCkBAIC00MjQxLDcgKzQzMjQsNyBAQAogCQljcG9zID0gVUlOVF9NQVg7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCBjcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCByaWdodF9wYXRoLCBjcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC00MjYwLDcgKzQzNDMsNyBAQAogCSAqIGNhbiB3aW5kIHVwIHNraXBwaW5nIGJvdGggb2YgdGhlc2UgdHdvIHNwZWNpYWwgY2FzZXMuLi4KIAkgKi8KIAlpZiAocm90YXRlKSB7Ci0JCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX3JpZ2h0KGlub2RlLCBoYW5kbGUsIHR5cGUtPmluc19zcGxpdCwKKwkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfcmlnaHQoaGFuZGxlLCBldCwgdHlwZS0+aW5zX3NwbGl0LAogCQkJCQkgICAgICBsZTMyX3RvX2NwdShpbnNlcnRfcmVjLT5lX2Nwb3MpLAogCQkJCQkgICAgICByaWdodF9wYXRoLCAmbGVmdF9wYXRoKTsKIAkJaWYgKHJldCkgewpAQCAtNDI3Miw3ICs0MzU1LDcgQEAKIAkJICogb2NmczJfcm90YXRlX3RyZWVfcmlnaHQoKSBtaWdodCBoYXZlIGV4dGVuZGVkIHRoZQogCQkgKiB0cmFuc2FjdGlvbiB3aXRob3V0IHJlLWpvdXJuYWxpbmcgb3VyIHRyZWUgcm9vdC4KIAkJICovCi0JCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQsCisJCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDI4MCw3ICs0MzYzLDcgQEAKIAkJfQogCX0gZWxzZSBpZiAodHlwZS0+aW5zX2FwcGVuZGluZyA9PSBBUFBFTkRfVEFJTAogCQkgICAmJiB0eXBlLT5pbnNfY29udGlnICE9IENPTlRJR19MRUZUKSB7Ci0JCXJldCA9IG9jZnMyX2FwcGVuZF9yZWNfdG9fcGF0aChpbm9kZSwgaGFuZGxlLCBpbnNlcnRfcmVjLAorCQlyZXQgPSBvY2ZzMl9hcHBlbmRfcmVjX3RvX3BhdGgoaGFuZGxlLCBldCwgaW5zZXJ0X3JlYywKIAkJCQkJICAgICAgIHJpZ2h0X3BhdGgsICZsZWZ0X3BhdGgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC00Mjg4LDcgKzQzNzEsNyBAQAogCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfaW5zZXJ0X3BhdGgoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLCByaWdodF9wYXRoLAorCXJldCA9IG9jZnMyX2luc2VydF9wYXRoKGhhbmRsZSwgZXQsIGxlZnRfcGF0aCwgcmlnaHRfcGF0aCwKIAkJCQlpbnNlcnRfcmVjLCB0eXBlKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQyOTcsNyArNDM4MCw3IEBACiAKIG91dF91cGRhdGVfY2x1c3RlcnM6CiAJaWYgKHR5cGUtPmluc19zcGxpdCA9PSBTUExJVF9OT05FKQotCQlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LAorCQlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoZXQsCiAJCQkJCSBsZTE2X3RvX2NwdShpbnNlcnRfcmVjLT5lX2xlYWZfY2x1c3RlcnMpKTsKIAogCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBldC0+ZXRfcm9vdF9iaCk7CkBAIC00MzEyLDcgKzQzOTUsOCBAQAogfQogCiBzdGF0aWMgZW51bSBvY2ZzMl9jb250aWdfdHlwZQotb2NmczJfZmlndXJlX21lcmdlX2NvbnRpZ190eXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAorb2NmczJfZmlndXJlX21lcmdlX2NvbnRpZ190eXBlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwgaW50IGluZGV4LAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpzcGxpdF9yZWMpCiB7CkBAIC00MzI0LDEyICs0NDA4LDEyIEBACiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEwsICpyaWdodF9wYXRoID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAogCWlmIChpbmRleCA+IDApIHsKIAkJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXggLSAxXTsKIAl9IGVsc2UgaWYgKHBhdGgtPnBfdHJlZV9kZXB0aCA+IDApIHsKLQkJc3RhdHVzID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoaW5vZGUtPmlfc2IsCi0JCQkJCQkgICAgICAgcGF0aCwgJmxlZnRfY3Bvcyk7CisJCXN0YXR1cyA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKHNiLCBwYXRoLCAmbGVmdF9jcG9zKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0OwogCkBAIC00MzM4LDcgKzQ0MjIsOCBAQAogCQkJaWYgKCFsZWZ0X3BhdGgpCiAJCQkJZ290byBvdXQ7CiAKLQkJCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBsZWZ0X2Nwb3MpOworCQkJc3RhdHVzID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgbGVmdF9wYXRoLAorCQkJCQkJIGxlZnRfY3Bvcyk7CiAJCQlpZiAoc3RhdHVzKQogCQkJCWdvdG8gb3V0OwogCkBAIC00MzQ4LDcgKzQ0MzMsNyBAQAogCQkJICAgIGxlMTZfdG9fY3B1KG5ld19lbC0+bF9jb3VudCkpIHsKIAkJCQliaCA9IHBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpOwogCQkJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKiliaC0+Yl9kYXRhOwotCQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCW9jZnMyX2Vycm9yKHNiLAogCQkJCQkgICAgIkV4dGVudCBibG9jayAjJWxsdSBoYXMgYW4gIgogCQkJCQkgICAgImludmFsaWQgbF9uZXh0X2ZyZWVfcmVjIG9mICIKIAkJCQkJICAgICIlZC4gIEl0IHNob3VsZCBoYXZlICIKQEAgLTQzNzMsNyArNDQ1OCw3IEBACiAJCQlpZiAoc3BsaXRfcmVjLT5lX2Nwb3MgPT0gZWwtPmxfcmVjc1tpbmRleF0uZV9jcG9zKQogCQkJCXJldCA9IENPTlRJR19SSUdIVDsKIAkJfSBlbHNlIHsKLQkJCXJldCA9IG9jZnMyX2V4dGVudF9jb250aWcoaW5vZGUsIHJlYywgc3BsaXRfcmVjKTsKKwkJCXJldCA9IG9jZnMyX2V0X2V4dGVudF9jb250aWcoZXQsIHJlYywgc3BsaXRfcmVjKTsKIAkJfQogCX0KIApAQCAtNDM4Miw4ICs0NDY3LDcgQEAKIAkJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXggKyAxXTsKIAllbHNlIGlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSBsZTE2X3RvX2NwdShlbC0+bF9jb3VudCkgJiYKIAkJIHBhdGgtPnBfdHJlZV9kZXB0aCA+IDApIHsKLQkJc3RhdHVzID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKGlub2RlLT5pX3NiLAotCQkJCQkJCXBhdGgsICZyaWdodF9jcG9zKTsKKwkJc3RhdHVzID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKHNiLCBwYXRoLCAmcmlnaHRfY3Bvcyk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKIApAQCAtNDM5NCw3ICs0NDc4LDcgQEAKIAkJaWYgKCFyaWdodF9wYXRoKQogCQkJZ290byBvdXQ7CiAKLQkJc3RhdHVzID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCByaWdodF9wYXRoLCByaWdodF9jcG9zKTsKKwkJc3RhdHVzID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcmlnaHRfcGF0aCwgcmlnaHRfY3Bvcyk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dDsKIApAQCAtNDQwNCw3ICs0NDg4LDcgQEAKIAkJCWlmIChsZTE2X3RvX2NwdShuZXdfZWwtPmxfbmV4dF9mcmVlX3JlYykgPD0gMSkgewogCQkJCWJoID0gcGF0aF9sZWFmX2JoKHJpZ2h0X3BhdGgpOwogCQkJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKiliaC0+Yl9kYXRhOwotCQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCW9jZnMyX2Vycm9yKHNiLAogCQkJCQkgICAgIkV4dGVudCBibG9jayAjJWxsdSBoYXMgYW4gIgogCQkJCQkgICAgImludmFsaWQgbF9uZXh0X2ZyZWVfcmVjIG9mICVkIiwKIAkJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZWItPmhfYmxrbm8pLApAQCAtNDQxOSw3ICs0NTAzLDcgQEAKIAlpZiAocmVjKSB7CiAJCWVudW0gb2NmczJfY29udGlnX3R5cGUgY29udGlnX3R5cGU7CiAKLQkJY29udGlnX3R5cGUgPSBvY2ZzMl9leHRlbnRfY29udGlnKGlub2RlLCByZWMsIHNwbGl0X3JlYyk7CisJCWNvbnRpZ190eXBlID0gb2NmczJfZXRfZXh0ZW50X2NvbnRpZyhldCwgcmVjLCBzcGxpdF9yZWMpOwogCiAJCWlmIChjb250aWdfdHlwZSA9PSBDT05USUdfTEVGVCAmJiByZXQgPT0gQ09OVElHX1JJR0hUKQogCQkJcmV0ID0gQ09OVElHX0xFRlRSSUdIVDsKQEAgLTQ0MzYsMTEgKzQ1MjAsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9maWd1cmVfY29udGlnX3R5cGUoc3RydWN0IGlub2RlICppbm9kZSwKK3N0YXRpYyB2b2lkIG9jZnMyX2ZpZ3VyZV9jb250aWdfdHlwZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2luc2VydF90eXBlICppbnNlcnQsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMpCiB7CiAJaW50IGk7CiAJZW51bSBvY2ZzMl9jb250aWdfdHlwZSBjb250aWdfdHlwZSA9IENPTlRJR19OT05FOwpAQCAtNDQ0OCw4ICs0NTMxLDggQEAKIAlCVUdfT04obGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCkgIT0gMCk7CiAKIAlmb3IoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKSB7Ci0JCWNvbnRpZ190eXBlID0gb2NmczJfZXh0ZW50X2NvbnRpZyhpbm9kZSwgJmVsLT5sX3JlY3NbaV0sCi0JCQkJCQkgIGluc2VydF9yZWMpOworCQljb250aWdfdHlwZSA9IG9jZnMyX2V0X2V4dGVudF9jb250aWcoZXQsICZlbC0+bF9yZWNzW2ldLAorCQkJCQkJICAgICBpbnNlcnRfcmVjKTsKIAkJaWYgKGNvbnRpZ190eXBlICE9IENPTlRJR19OT05FKSB7CiAJCQlpbnNlcnQtPmluc19jb250aWdfaW5kZXggPSBpOwogCQkJYnJlYWs7CkBAIC00NTMwLDggKzQ2MTMsNyBAQAogICogQWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgb24gdGhlIG9jZnMyX2luc2VydF90eXBlCiAgKiBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZmlndXJlX2luc2VydF90eXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCitzdGF0aWMgaW50IG9jZnMyX2ZpZ3VyZV9pbnNlcnRfdHlwZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYywKIAkJCQkgICAgaW50ICpmcmVlX3JlY29yZHMsCkBAIC00NTU1LDcgKzQ2MzcsNyBAQAogCQkgKiBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoKSBhbmQgb2NmczJfYWRkX2JyYW5jaCgpCiAJCSAqIG1heSB3YW50IGl0IGxhdGVyLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soaW5vZGUsCisJCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGV0LT5ldF9jaSwKIAkJCQkJICAgICAgb2NmczJfZXRfZ2V0X2xhc3RfZWJfYmxrKGV0KSwKIAkJCQkJICAgICAgJmJoKTsKIAkJaWYgKHJldCkgewpAQCAtNDU3OCw3ICs0NjYwLDcgQEAKIAkJbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYyk7CiAKIAlpZiAoIWluc2VydC0+aW5zX3RyZWVfZGVwdGgpIHsKLQkJb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjLCBldCk7CisJCW9jZnMyX2ZpZ3VyZV9jb250aWdfdHlwZShldCwgaW5zZXJ0LCBlbCwgaW5zZXJ0X3JlYyk7CiAJCW9jZnMyX2ZpZ3VyZV9hcHBlbmRpbmdfdHlwZShpbnNlcnQsIGVsLCBpbnNlcnRfcmVjKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDU5Niw3ICs0Njc4LDcgQEAKIAkgKiB1cyB0aGUgcmlnaHRtb3N0IHRyZWUgcGF0aC4gVGhpcyBpcyBhY2NvdW50ZWQgZm9yIGJlbG93IGluCiAJICogdGhlIGFwcGVuZGluZyBjb2RlLgogCSAqLwotCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgbGUzMl90b19jcHUoaW5zZXJ0X3JlYy0+ZV9jcG9zKSk7CisJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcGF0aCwgbGUzMl90b19jcHUoaW5zZXJ0X3JlYy0+ZV9jcG9zKSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNDYxMiw3ICs0Njk0LDcgQEAKICAgICAgICAgICogICAgIGludG8gdHdvIHR5cGVzIG9mIGFwcGVuZHM6IHNpbXBsZSByZWNvcmQgYXBwZW5kLCBvciBhCiAgICAgICAgICAqICAgICByb3RhdGUgaW5zaWRlIHRoZSB0YWlsIGxlYWYuCiAJICovCi0Jb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjLCBldCk7CisJb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGV0LCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjKTsKIAogCS8qCiAJICogVGhlIGluc2VydCBjb2RlIGlzbid0IHF1aXRlIHJlYWR5IHRvIGRlYWwgd2l0aCBhbGwgY2FzZXMgb2YKQEAgLTQ2NTcsMTMgKzQ3MzksMTEgQEAKIH0KIAogLyoKLSAqIEluc2VydCBhbiBleHRlbnQgaW50byBhbiBpbm9kZSBidHJlZS4KKyAqIEluc2VydCBhbiBleHRlbnQgaW50byBhIGJ0cmVlLgogICoKLSAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gdXBkYXRlIGZlLT5pX2NsdXN0ZXJzCisgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHVwZGF0ZSB0aGUgb3duaW5nIGJ0cmVlJ3MgY2x1c3RlciBjb3VudC4KICAqLwotaW50IG9jZnMyX2luc2VydF9leHRlbnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQloYW5kbGVfdCAqaGFuZGxlLAotCQkJc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsCiAJCQl1NjQgc3RhcnRfYmxrLApAQCAtNDY3NywyMSArNDc1NywyMiBAQAogCXN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSBpbnNlcnQgPSB7MCwgfTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyByZWM7CiAKLQltbG9nKDAsICJhZGQgJXUgY2x1c3RlcnMgYXQgcG9zaXRpb24gJXUgdG8gaW5vZGUgJWxsdVxuIiwKLQkgICAgIG5ld19jbHVzdGVycywgY3BvcywgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOworCW1sb2coMCwgImFkZCAldSBjbHVzdGVycyBhdCBwb3NpdGlvbiAldSB0byBvd25lciAlbGx1XG4iLAorCSAgICAgbmV3X2NsdXN0ZXJzLCBjcG9zLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpKTsKIAogCW1lbXNldCgmcmVjLCAwLCBzaXplb2YocmVjKSk7CiAJcmVjLmVfY3BvcyA9IGNwdV90b19sZTMyKGNwb3MpOwogCXJlYy5lX2Jsa25vID0gY3B1X3RvX2xlNjQoc3RhcnRfYmxrKTsKIAlyZWMuZV9sZWFmX2NsdXN0ZXJzID0gY3B1X3RvX2xlMTYobmV3X2NsdXN0ZXJzKTsKIAlyZWMuZV9mbGFncyA9IGZsYWdzOwotCXN0YXR1cyA9IG9jZnMyX2V0X2luc2VydF9jaGVjayhpbm9kZSwgZXQsICZyZWMpOworCXN0YXR1cyA9IG9jZnMyX2V0X2luc2VydF9jaGVjayhldCwgJnJlYyk7CiAJaWYgKHN0YXR1cykgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoaW5vZGUsIGV0LCAmbGFzdF9lYl9iaCwgJnJlYywKKwlzdGF0dXMgPSBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoZXQsICZsYXN0X2ViX2JoLCAmcmVjLAogCQkJCQkgICZmcmVlX3JlY29yZHMsICZpbnNlcnQpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTQ3MDUsNyArNDc4Niw3IEBACiAJICAgICBmcmVlX3JlY29yZHMsIGluc2VydC5pbnNfdHJlZV9kZXB0aCk7CiAKIAlpZiAoaW5zZXJ0Lmluc19jb250aWcgPT0gQ09OVElHX05PTkUgJiYgZnJlZV9yZWNvcmRzID09IDApIHsKLQkJc3RhdHVzID0gb2NmczJfZ3Jvd190cmVlKGlub2RlLCBoYW5kbGUsIGV0LAorCQlzdGF0dXMgPSBvY2ZzMl9ncm93X3RyZWUoaGFuZGxlLCBldCwKIAkJCQkJICZpbnNlcnQuaW5zX3RyZWVfZGVwdGgsICZsYXN0X2ViX2JoLAogCQkJCQkgbWV0YV9hYyk7CiAJCWlmIChzdGF0dXMpIHsKQEAgLTQ3MTUsMTEgKzQ3OTYsMTEgQEAKIAl9CiAKIAkvKiBGaW5hbGx5LCB3ZSBjYW4gYWRkIGNsdXN0ZXJzLiBUaGlzIG1pZ2h0IHJvdGF0ZSB0aGUgdHJlZSBmb3IgdXMuICovCi0Jc3RhdHVzID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnJlYywgJmluc2VydCk7CisJc3RhdHVzID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCAmcmVjLCAmaW5zZXJ0KTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwotCWVsc2UgaWYgKGV0LT5ldF9vcHMgPT0gJm9jZnMyX2Rpbm9kZV9ldF9vcHMpCi0JCW9jZnMyX2V4dGVudF9tYXBfaW5zZXJ0X3JlYyhpbm9kZSwgJnJlYyk7CisJZWxzZQorCQlvY2ZzMl9ldF9leHRlbnRfbWFwX2luc2VydChldCwgJnJlYyk7CiAKIGJhaWw6CiAJYnJlbHNlKGxhc3RfZWJfYmgpOwpAQCAtNDczNSwxMyArNDgxNiwxMSBAQAogICogaXQgaXMgbm90IGxpbWl0ZWQgdG8gdGhlIGZpbGUgc3RvcmFnZS4gQW55IGV4dGVudCB0cmVlIGNhbiB1c2UgdGhpcwogICogZnVuY3Rpb24gaWYgaXQgaW1wbGVtZW50cyB0aGUgcHJvcGVyIG9jZnMyX2V4dGVudF90cmVlLgogICovCi1pbnQgb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQl1MzIgKmxvZ2ljYWxfb2Zmc2V0LAogCQkJCXUzMiBjbHVzdGVyc190b19hZGQsCiAJCQkJaW50IG1hcmtfdW53cml0dGVuLAotCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKIAkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCQllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCAqcmVhc29uX3JldCkKQEAgLTQ3NTIsMTMgKzQ4MzEsMTUgQEAKIAl1MzIgYml0X29mZiwgbnVtX2JpdHM7CiAJdTY0IGJsb2NrOwogCXU4IGZsYWdzID0gMDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9CisJCU9DRlMyX1NCKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihldC0+ZXRfY2kpKTsKIAogCUJVR19PTighY2x1c3RlcnNfdG9fYWRkKTsKIAogCWlmIChtYXJrX3Vud3JpdHRlbikKIAkJZmxhZ3MgPSBPQ0ZTMl9FWFRfVU5XUklUVEVOOwogCi0JZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGlub2RlLCBldCk7CisJZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGV0KTsKIAlpZiAoZnJlZV9leHRlbnRzIDwgMCkgewogCQlzdGF0dXMgPSBmcmVlX2V4dGVudHM7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTQ3OTUsNyArNDg3Niw3IEBACiAJQlVHX09OKG51bV9iaXRzID4gY2x1c3RlcnNfdG9fYWRkKTsKIAogCS8qIHJlc2VydmUgb3VyIHdyaXRlIGVhcmx5IC0tIGluc2VydF9leHRlbnQgbWF5IHVwZGF0ZSB0aGUgdHJlZSByb290ICovCi0Jc3RhdHVzID0gb2NmczJfZXRfcm9vdF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBldCwKKwlzdGF0dXMgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgZXQsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00ODAzLDEwICs0ODg0LDEwIEBACiAJfQogCiAJYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob3NiLT5zYiwgYml0X29mZik7Ci0JbWxvZygwLCAiQWxsb2NhdGluZyAldSBjbHVzdGVycyBhdCBibG9jayAldSBmb3IgaW5vZGUgJWxsdVxuIiwKLQkgICAgIG51bV9iaXRzLCBiaXRfb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7Ci0Jc3RhdHVzID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsIGV0LAotCQkJCSAgICAgKmxvZ2ljYWxfb2Zmc2V0LCBibG9jaywKKwltbG9nKDAsICJBbGxvY2F0aW5nICV1IGNsdXN0ZXJzIGF0IGJsb2NrICV1IGZvciBvd25lciAlbGx1XG4iLAorCSAgICAgbnVtX2JpdHMsIGJpdF9vZmYsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSkpOworCXN0YXR1cyA9IG9jZnMyX2luc2VydF9leHRlbnQoaGFuZGxlLCBldCwgKmxvZ2ljYWxfb2Zmc2V0LCBibG9jaywKIAkJCQkgICAgIG51bV9iaXRzLCBmbGFncywgbWV0YV9hYyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNDg1NiwxMCArNDkzNyw5IEBACiAJc3BsaXRfcmVjLT5lX2ZsYWdzID0gcmVjLT5lX2ZsYWdzOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3NwbGl0X2FuZF9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKK3N0YXRpYyBpbnQgb2NmczJfc3BsaXRfYW5kX2luc2VydChoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbGFzdF9lYl9iaCwKIAkJCQkgIGludCBzcGxpdF9pbmRleCwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpvcmlnX3NwbGl0X3JlYywKQEAgLTQ4OTIsNyArNDk3Miw3IEBACiAKIAlpZiAobGUxNl90b19jcHUocmlnaHRtb3N0X2VsLT5sX25leHRfZnJlZV9yZWMpID09CiAJICAgIGxlMTZfdG9fY3B1KHJpZ2h0bW9zdF9lbC0+bF9jb3VudCkpIHsKLQkJcmV0ID0gb2NmczJfZ3Jvd190cmVlKGlub2RlLCBoYW5kbGUsIGV0LAorCQlyZXQgPSBvY2ZzMl9ncm93X3RyZWUoaGFuZGxlLCBldCwKIAkJCQkgICAgICAmZGVwdGgsIGxhc3RfZWJfYmgsIG1ldGFfYWMpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC00OTIxLDggKzUwMDEsOCBAQAogCQkgKi8KIAkJaW5zZXJ0Lmluc19zcGxpdCA9IFNQTElUX1JJR0hUOwogCi0JCW9jZnMyX21ha2VfcmlnaHRfc3BsaXRfcmVjKGlub2RlLT5pX3NiLCAmdG1wcmVjLCBpbnNlcnRfcmFuZ2UsCi0JCQkJCSAgICZyZWMpOworCQlvY2ZzMl9tYWtlX3JpZ2h0X3NwbGl0X3JlYyhvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKSwKKwkJCQkJICAgJnRtcHJlYywgaW5zZXJ0X3JhbmdlLCAmcmVjKTsKIAogCQlzcGxpdF9yZWMgPSB0bXByZWM7CiAKQEAgLTQ5MzAsNyArNTAxMCw3IEBACiAJCWRvX2xlZnRyaWdodCA9IDE7CiAJfQogCi0JcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnNwbGl0X3JlYywgJmluc2VydCk7CisJcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCAmc3BsaXRfcmVjLCAmaW5zZXJ0KTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC00OTQ2LDcgKzUwMjYsNyBAQAogCQlvY2ZzMl9yZWluaXRfcGF0aChwYXRoLCAxKTsKIAogCQljcG9zID0gbGUzMl90b19jcHUoc3BsaXRfcmVjLmVfY3Bvcyk7Ci0JCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgY3Bvcyk7CisJCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIHBhdGgsIGNwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTQ5NjEsOCArNTA0MSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yZXBsYWNlX2V4dGVudF9yZWMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKK3N0YXRpYyBpbnQgb2NmczJfcmVwbGFjZV9leHRlbnRfcmVjKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAogCQkJCSAgICBpbnQgc3BsaXRfaW5kZXgsCkBAIC00OTcwLDcgKzUwNTAsNyBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSBvY2ZzMl9wYXRoX2JoX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGgsCisJcmV0ID0gb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGV0LT5ldF9jaSwgcGF0aCwKIAkJCQkJICAgcGF0aF9udW1faXRlbXMocGF0aCkgLSAxKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQ5ODUsOSArNTA2NSw4IEBACiB9CiAKIC8qCi0gKiBNYXJrIHBhcnQgb3IgYWxsIG9mIHRoZSBleHRlbnQgcmVjb3JkIGF0IHNwbGl0X2luZGV4IGluIHRoZSBsZWFmCi0gKiBwb2ludGVkIHRvIGJ5IHBhdGggYXMgd3JpdHRlbi4gVGhpcyByZW1vdmVzIHRoZSB1bndyaXR0ZW4KLSAqIGV4dGVudCBmbGFnLgorICogU3BsaXQgcGFydCBvciBhbGwgb2YgdGhlIGV4dGVudCByZWNvcmQgYXQgc3BsaXRfaW5kZXggaW4gdGhlIGxlYWYKKyAqIHBvaW50ZWQgdG8gYnkgcGF0aC4gTWVyZ2Ugd2l0aCB0aGUgY29udGlndW91cyBleHRlbnQgcmVjb3JkIGlmIG5lZWRlZC4KICAqCiAgKiBDYXJlIGlzIHRha2VuIHRvIGhhbmRsZSBjb250aWd1b3VzbmVzcyBzbyBhcyB0byBub3QgZ3JvdyB0aGUgdHJlZS4KICAqCkBAIC01MDA0LDE0ICs1MDgzLDEzIEBACiAgKiBoYXZlIGJlZW4gYnJvdWdodCBpbnRvIGNhY2hlIChhbmQgcGlubmVkIHZpYSB0aGUgam91cm5hbCksIHNvIHRoZQogICogZXh0cmEgb3ZlcmhlYWQgaXMgbm90IGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBkaXNrIHJlYWRzLgogICovCi1zdGF0aWMgaW50IF9fb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkgICAgICAgaW50IHNwbGl0X2luZGV4LAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKLQkJCQkgICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCitpbnQgb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCisJCSAgICAgICBpbnQgc3BsaXRfaW5kZXgsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwpAQCAtNTAyMCwxMiArNTA5OCw2IEBACiAJc3RydWN0IG9jZnMyX21lcmdlX2N0eHQgY3R4dDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnJpZ2h0bW9zdF9lbDsKIAotCWlmICghKHJlYy0+ZV9mbGFncyAmIE9DRlMyX0VYVF9VTldSSVRURU4pKSB7Ci0JCXJldCA9IC1FSU87Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSA+IGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+ZV9jcG9zKSB8fAogCSAgICAoKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSArIGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSkgPAogCSAgICAgKGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+ZV9jcG9zKSArIGxlMTZfdG9fY3B1KHNwbGl0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSkpKSB7CkBAIC01MDM0LDE5ICs1MTA2LDE5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWN0eHQuY19jb250aWdfdHlwZSA9IG9jZnMyX2ZpZ3VyZV9tZXJnZV9jb250aWdfdHlwZShpbm9kZSwgcGF0aCwgZWwsCisJY3R4dC5jX2NvbnRpZ190eXBlID0gb2NmczJfZmlndXJlX21lcmdlX2NvbnRpZ190eXBlKGV0LCBwYXRoLCBlbCwKIAkJCQkJCQkgICAgc3BsaXRfaW5kZXgsCiAJCQkJCQkJICAgIHNwbGl0X3JlYyk7CiAKIAkvKgogCSAqIFRoZSBjb3JlIG1lcmdlIC8gc3BsaXQgY29kZSB3YW50cyB0byBrbm93IGhvdyBtdWNoIHJvb20gaXMKLQkgKiBsZWZ0IGluIHRoaXMgaW5vZGVzIGFsbG9jYXRpb24gdHJlZSwgc28gd2UgcGFzcyB0aGUKKwkgKiBsZWZ0IGluIHRoaXMgYWxsb2NhdGlvbiB0cmVlLCBzbyB3ZSBwYXNzIHRoZQogCSAqIHJpZ2h0bW9zdCBleHRlbnQgbGlzdC4KIAkgKi8KIAlpZiAocGF0aC0+cF90cmVlX2RlcHRoKSB7CiAJCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCi0JCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGlub2RlLAorCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhldC0+ZXRfY2ksCiAJCQkJCSAgICAgIG9jZnMyX2V0X2dldF9sYXN0X2ViX2JsayhldCksCiAJCQkJCSAgICAgICZsYXN0X2ViX2JoKTsKIAkJaWYgKHJldCkgewpAQCAtNTA3MywxOSArNTE0NSwxOCBAQAogCiAJaWYgKGN0eHQuY19jb250aWdfdHlwZSA9PSBDT05USUdfTk9ORSkgewogCQlpZiAoY3R4dC5jX3NwbGl0X2NvdmVyc19yZWMpCi0JCQlyZXQgPSBvY2ZzMl9yZXBsYWNlX2V4dGVudF9yZWMoaW5vZGUsIGhhbmRsZSwKLQkJCQkJCSAgICAgICBwYXRoLCBlbCwKKwkJCXJldCA9IG9jZnMyX3JlcGxhY2VfZXh0ZW50X3JlYyhoYW5kbGUsIGV0LCBwYXRoLCBlbCwKIAkJCQkJCSAgICAgICBzcGxpdF9pbmRleCwgc3BsaXRfcmVjKTsKIAkJZWxzZQotCQkJcmV0ID0gb2NmczJfc3BsaXRfYW5kX2luc2VydChpbm9kZSwgaGFuZGxlLCBwYXRoLCBldCwKKwkJCXJldCA9IG9jZnMyX3NwbGl0X2FuZF9pbnNlcnQoaGFuZGxlLCBldCwgcGF0aCwKIAkJCQkJCSAgICAgJmxhc3RfZWJfYmgsIHNwbGl0X2luZGV4LAogCQkJCQkJICAgICBzcGxpdF9yZWMsIG1ldGFfYWMpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCX0gZWxzZSB7Ci0JCXJldCA9IG9jZnMyX3RyeV90b19tZXJnZV9leHRlbnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwKKwkJcmV0ID0gb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChoYW5kbGUsIGV0LCBwYXRoLAogCQkJCQkJc3BsaXRfaW5kZXgsIHNwbGl0X3JlYywKLQkJCQkJCWRlYWxsb2MsICZjdHh0LCBldCk7CisJCQkJCQlkZWFsbG9jLCAmY3R4dCk7CiAJCWlmIChyZXQpCiAJCQltbG9nX2Vycm5vKHJldCk7CiAJfQpAQCAtNTA5Niw3ICs1MTY3LDEwMCBAQAogfQogCiAvKgorICogQ2hhbmdlIHRoZSBmbGFncyBvZiB0aGUgYWxyZWFkeS1leGlzdGluZyBleHRlbnQgYXQgY3BvcyBmb3IgbGVuIGNsdXN0ZXJzLgorICoKKyAqIG5ld19mbGFnczogdGhlIGZsYWdzIHdlIHdhbnQgdG8gc2V0LgorICogY2xlYXJfZmxhZ3M6IHRoZSBmbGFncyB3ZSB3YW50IHRvIGNsZWFyLgorICogcGh5czogdGhlIG5ldyBwaHlzaWNhbCBvZmZzZXQgd2Ugd2FudCB0aGlzIG5ldyBleHRlbnQgc3RhcnRzIGZyb20uCisgKgorICogSWYgdGhlIGV4aXN0aW5nIGV4dGVudCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdCwgaW5pdGlhdGUgYQorICogc3BsaXQuIEFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGF0IG1lcmdpbmcgd2l0aCBhZGphY2VudCBleHRlbnRzLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgZG93biBtZXRhX2FjIGlmIHdlJ2xsIG5lZWQgaXQuCisgKi8KK2ludCBvY2ZzMl9jaGFuZ2VfZXh0ZW50X2ZsYWcoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICAgdTMyIGNwb3MsIHUzMiBsZW4sIHUzMiBwaHlzLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgIGludCBuZXdfZmxhZ3MsIGludCBjbGVhcl9mbGFncykKK3sKKwlpbnQgcmV0LCBpbmRleDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSk7CisJdTY0IHN0YXJ0X2Jsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCBwaHlzKTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyBzcGxpdF9yZWM7CisJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjOworCisJbGVmdF9wYXRoID0gb2NmczJfbmV3X3BhdGhfZnJvbV9ldChldCk7CisJaWYgKCFsZWZ0X3BhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBsZWZ0X3BhdGgsIGNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKKworCWluZGV4ID0gb2NmczJfc2VhcmNoX2V4dGVudF9saXN0KGVsLCBjcG9zKTsKKwlpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPj0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykpIHsKKwkJb2NmczJfZXJyb3Ioc2IsCisJCQkgICAgIk93bmVyICVsbHUgaGFzIGFuIGV4dGVudCBhdCBjcG9zICV1IHdoaWNoIGNhbiBubyAiCisJCQkgICAgImxvbmdlciBiZSBmb3VuZC5cbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgIG9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksIGNwb3MpOworCQlyZXQgPSAtRVJPRlM7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IC1FSU87CisJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXhdOworCWlmIChuZXdfZmxhZ3MgJiYgKHJlYy0+ZV9mbGFncyAmIG5ld19mbGFncykpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIk93bmVyICVsbHUgdHJpZWQgdG8gc2V0ICVkIGZsYWdzIG9uIGFuICIKKwkJICAgICAiZXh0ZW50IHRoYXQgYWxyZWFkeSBoYWQgdGhlbSIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpLAorCQkgICAgIG5ld19mbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjbGVhcl9mbGFncyAmJiAhKHJlYy0+ZV9mbGFncyAmIGNsZWFyX2ZsYWdzKSkgeworCQltbG9nKE1MX0VSUk9SLCAiT3duZXIgJWxsdSB0cmllZCB0byBjbGVhciAlZCBmbGFncyBvbiBhbiAiCisJCSAgICAgImV4dGVudCB0aGF0IGRpZG4ndCBoYXZlIHRoZW0iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKKwkJICAgICBjbGVhcl9mbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldCgmc3BsaXRfcmVjLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpKTsKKwlzcGxpdF9yZWMuZV9jcG9zID0gY3B1X3RvX2xlMzIoY3Bvcyk7CisJc3BsaXRfcmVjLmVfbGVhZl9jbHVzdGVycyA9IGNwdV90b19sZTE2KGxlbik7CisJc3BsaXRfcmVjLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChzdGFydF9ibGtubyk7CisJc3BsaXRfcmVjLmVfZmxhZ3MgPSByZWMtPmVfZmxhZ3M7CisJaWYgKG5ld19mbGFncykKKwkJc3BsaXRfcmVjLmVfZmxhZ3MgfD0gbmV3X2ZsYWdzOworCWlmIChjbGVhcl9mbGFncykKKwkJc3BsaXRfcmVjLmVfZmxhZ3MgJj0gfmNsZWFyX2ZsYWdzOworCisJcmV0ID0gb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZSwgZXQsIGxlZnRfcGF0aCwKKwkJCQkgaW5kZXgsICZzcGxpdF9yZWMsIG1ldGFfYWMsCisJCQkJIGRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOworCXJldHVybiByZXQ7CisKK30KKworLyoKICAqIE1hcmsgdGhlIGFscmVhZHktZXhpc3RpbmcgZXh0ZW50IGF0IGNwb3MgYXMgd3JpdHRlbiBmb3IgbGVuIGNsdXN0ZXJzLgorICogVGhpcyByZW1vdmVzIHRoZSB1bndyaXR0ZW4gZXh0ZW50IGZsYWcuCiAgKgogICogSWYgdGhlIGV4aXN0aW5nIGV4dGVudCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdCwgaW5pdGlhdGUgYQogICogc3BsaXQuIEFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGF0IG1lcmdpbmcgd2l0aCBhZGphY2VudCBleHRlbnRzLgpAQCAtNTEwOSwxNCArNTI3MywxMCBAQAogCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKIHsKLQlpbnQgcmV0LCBpbmRleDsKLQl1NjQgc3RhcnRfYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBoeXMpOwotCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjIHNwbGl0X3JlYzsKLQlzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOworCWludCByZXQ7CiAKLQltbG9nKDAsICJJbm9kZSAlbHUgY3BvcyAldSwgbGVuICV1LCBwaHlzICV1ICglbGx1KVxuIiwKLQkgICAgIGlub2RlLT5pX2lubywgY3BvcywgbGVuLCBwaHlzLCAodW5zaWduZWQgbG9uZyBsb25nKXN0YXJ0X2Jsa25vKTsKKwltbG9nKDAsICJJbm9kZSAlbHUgY3BvcyAldSwgbGVuICV1LCBwaHlzIGNsdXN0ZXJzICV1XG4iLAorCSAgICAgaW5vZGUtPmlfaW5vLCBjcG9zLCBsZW4sIHBoeXMpOwogCiAJaWYgKCFvY2ZzMl93cml0ZXNfdW53cml0dGVuX2V4dGVudHMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkgewogCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsbHUgaGFzIHVud3JpdHRlbiBleHRlbnRzICIKQEAgLTUxMzAsNTcgKzUyOTAsMjEgQEAKIAkvKgogCSAqIFhYWDogVGhpcyBzaG91bGQgYmUgZml4ZWQgdXAgc28gdGhhdCB3ZSBqdXN0IHJlLWluc2VydCB0aGUKIAkgKiBuZXh0IGV4dGVudCByZWNvcmRzLgotCSAqCi0JICogWFhYOiBUaGlzIGlzIGEgaGFjayBvbiB0aGUgZXh0ZW50IHRyZWUsIG1heWJlIGl0IHNob3VsZCBiZQotCSAqIGFuIG9wPwogCSAqLwotCWlmIChldC0+ZXRfb3BzID09ICZvY2ZzMl9kaW5vZGVfZXRfb3BzKQotCQlvY2ZzMl9leHRlbnRfbWFwX3RydW5jKGlub2RlLCAwKTsKKwlvY2ZzMl9ldF9leHRlbnRfbWFwX3RydW5jYXRlKGV0LCAwKTsKIAotCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoZXQpOwotCWlmICghbGVmdF9wYXRoKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGNwb3MpOwotCWlmIChyZXQpIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0JZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKLQotCWluZGV4ID0gb2NmczJfc2VhcmNoX2V4dGVudF9saXN0KGVsLCBjcG9zKTsKLQlpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPj0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykpIHsKLQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkgICAgIklub2RlICVsbHUgaGFzIGFuIGV4dGVudCBhdCBjcG9zICV1IHdoaWNoIGNhbiBubyAiCi0JCQkgICAgImxvbmdlciBiZSBmb3VuZC5cbiIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIGNwb3MpOwotCQlyZXQgPSAtRVJPRlM7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbXNldCgmc3BsaXRfcmVjLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpKTsKLQlzcGxpdF9yZWMuZV9jcG9zID0gY3B1X3RvX2xlMzIoY3Bvcyk7Ci0Jc3BsaXRfcmVjLmVfbGVhZl9jbHVzdGVycyA9IGNwdV90b19sZTE2KGxlbik7Ci0Jc3BsaXRfcmVjLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChzdGFydF9ibGtubyk7Ci0Jc3BsaXRfcmVjLmVfZmxhZ3MgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKS0+bF9yZWNzW2luZGV4XS5lX2ZsYWdzOwotCXNwbGl0X3JlYy5lX2ZsYWdzICY9IH5PQ0ZTMl9FWFRfVU5XUklUVEVOOwotCi0JcmV0ID0gX19vY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKGlub2RlLCBldCwgaGFuZGxlLCBsZWZ0X3BhdGgsCi0JCQkJCSAgaW5kZXgsICZzcGxpdF9yZWMsIG1ldGFfYWMsCi0JCQkJCSAgZGVhbGxvYyk7CisJcmV0ID0gb2NmczJfY2hhbmdlX2V4dGVudF9mbGFnKGhhbmRsZSwgZXQsIGNwb3MsCisJCQkJICAgICAgIGxlbiwgcGh5cywgbWV0YV9hYywgZGVhbGxvYywKKwkJCQkgICAgICAgMCwgT0NGUzJfRVhUX1VOV1JJVFRFTik7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiBvdXQ6Ci0Jb2NmczJfZnJlZV9wYXRoKGxlZnRfcGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9zcGxpdF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCitzdGF0aWMgaW50IG9jZnMyX3NwbGl0X3RyZWUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKIAkJCSAgICBpbnQgaW5kZXgsIHUzMiBuZXdfcmFuZ2UsCiAJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CkBAIC01MTk3LDExICs1MzIxLDEyIEBACiAJICovCiAJZWwgPSBwYXRoX2xlYWZfZWwocGF0aCk7CiAJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXhdOwotCW9jZnMyX21ha2VfcmlnaHRfc3BsaXRfcmVjKGlub2RlLT5pX3NiLCAmc3BsaXRfcmVjLCBuZXdfcmFuZ2UsIHJlYyk7CisJb2NmczJfbWFrZV9yaWdodF9zcGxpdF9yZWMob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgJnNwbGl0X3JlYywgbmV3X3JhbmdlLCByZWMpOwogCiAJZGVwdGggPSBwYXRoLT5wX3RyZWVfZGVwdGg7CiAJaWYgKGRlcHRoID4gMCkgewotCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhpbm9kZSwKKwkJcmV0ID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soZXQtPmV0X2NpLAogCQkJCQkgICAgICBvY2ZzMl9ldF9nZXRfbGFzdF9lYl9ibGsoZXQpLAogCQkJCQkgICAgICAmbGFzdF9lYl9iaCk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC01MjI0LDcgKzUzNDksNyBAQAogCiAJaWYgKGxlMTZfdG9fY3B1KHJpZ2h0bW9zdF9lbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PQogCSAgICBsZTE2X3RvX2NwdShyaWdodG1vc3RfZWwtPmxfY291bnQpKSB7Ci0JCXJldCA9IG9jZnMyX2dyb3dfdHJlZShpbm9kZSwgaGFuZGxlLCBldCwgJmRlcHRoLCAmbGFzdF9lYl9iaCwKKwkJcmV0ID0gb2NmczJfZ3Jvd190cmVlKGhhbmRsZSwgZXQsICZkZXB0aCwgJmxhc3RfZWJfYmgsCiAJCQkJICAgICAgbWV0YV9hYyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTUyMzgsNyArNTM2Myw3IEBACiAJaW5zZXJ0Lmluc19zcGxpdCA9IFNQTElUX1JJR0hUOwogCWluc2VydC5pbnNfdHJlZV9kZXB0aCA9IGRlcHRoOwogCi0JcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnNwbGl0X3JlYywgJmluc2VydCk7CisJcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCAmc3BsaXRfcmVjLCAmaW5zZXJ0KTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKQEAgLTUyNDcsMjMgKzUzNzIsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3RydW5jYXRlX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAorc3RhdGljIGludCBvY2ZzMl90cnVuY2F0ZV9yZWMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgaW50IGluZGV4LAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCi0JCQkgICAgICB1MzIgY3BvcywgdTMyIGxlbiwKLQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCisJCQkgICAgICB1MzIgY3BvcywgdTMyIGxlbikKIHsKIAlpbnQgcmV0OwogCXUzMiBsZWZ0X2Nwb3MsIHJlY19yYW5nZSwgdHJ1bmNfcmFuZ2U7CiAJaW50IHdhbnRzX3JvdGF0ZSA9IDAsIGlzX3JpZ2h0bW9zdF90cmVlX3JlYyA9IDA7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoZXQtPmV0X2NpKTsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAKIAlpZiAob2NmczJfaXNfZW1wdHlfZXh0ZW50KCZlbC0+bF9yZWNzWzBdKSAmJiBpbmRleCA+IDApIHsKLQkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLCBkZWFsbG9jLCBldCk7CisJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaGFuZGxlLCBldCwgcGF0aCwgZGVhbGxvYyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNTI5NSwxNCArNTQyMCwxMyBAQAogCQkgKiBieSB0aGlzIGxlYWYgYW5kIHRoZSBvbmUgdG8gaXQncyBsZWZ0LgogCQkgKgogCQkgKiBUaGVyZSBhcmUgdHdvIGNhc2VzIHdlIGNhbiBza2lwOgotCQkgKiAgIDEpIFBhdGggaXMgdGhlIGxlZnRtb3N0IG9uZSBpbiBvdXIgaW5vZGUgdHJlZS4KKwkJICogICAxKSBQYXRoIGlzIHRoZSBsZWZ0bW9zdCBvbmUgaW4gb3VyIGJ0cmVlLgogCQkgKiAgIDIpIFRoZSBsZWFmIGlzIHJpZ2h0bW9zdCBhbmQgd2lsbCBiZSBlbXB0eSBhZnRlcgogCQkgKiAgICAgIHdlIHJlbW92ZSB0aGUgZXh0ZW50IHJlY29yZCAtIHRoZSByb3RhdGUgY29kZQogCQkgKiAgICAgIGtub3dzIGhvdyB0byB1cGRhdGUgdGhlIG5ld2x5IGZvcm1lZCBlZGdlLgogCQkgKi8KIAotCQlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZihpbm9kZS0+aV9zYiwgcGF0aCwKLQkJCQkJCSAgICAmbGVmdF9jcG9zKTsKKwkJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoc2IsIHBhdGgsICZsZWZ0X2Nwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTUzMTYsNyArNTQ0MCw4IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCBsZWZ0X2Nwb3MpOworCQkJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgbGVmdF9wYXRoLAorCQkJCQkgICAgICBsZWZ0X2Nwb3MpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCQlnb3RvIG91dDsKQEAgLTUzMzIsMTMgKzU0NTcsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBwYXRoKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKGV0LT5ldF9jaSwgaGFuZGxlLCBwYXRoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoZXQtPmV0X2NpLCBoYW5kbGUsIGxlZnRfcGF0aCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNTM2MSw3ICs1NDg2LDcgQEAKIAkJCSAqIGJlIGRlbGV0ZWQgYnkgdGhlIHJvdGF0ZSBjb2RlLgogCQkJICovCiAJCQlyZWMgPSAmZWwtPmxfcmVjc1tuZXh0X2ZyZWUgLSAxXTsKLQkJCW9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3Jkcyhpbm9kZSwgaGFuZGxlLCBwYXRoLAorCQkJb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKGhhbmRsZSwgZXQsIHBhdGgsCiAJCQkJCQkgICAgICAgcmVjKTsKIAkJfQogCX0gZWxzZSBpZiAobGUzMl90b19jcHUocmVjLT5lX2Nwb3MpID09IGNwb3MpIHsKQEAgLTUzNzMsMTEgKzU0OTgsMTIgQEAKIAkJLyogUmVtb3ZlIHJpZ2h0bW9zdCBwb3J0aW9uIG9mIHRoZSByZWNvcmQgKi8KIAkJbGUxNl9hZGRfY3B1KCZyZWMtPmVfbGVhZl9jbHVzdGVycywgLWxlbik7CiAJCWlmIChpc19yaWdodG1vc3RfdHJlZV9yZWMpCi0JCQlvY2ZzMl9hZGp1c3RfcmlnaHRtb3N0X3JlY29yZHMoaW5vZGUsIGhhbmRsZSwgcGF0aCwgcmVjKTsKKwkJCW9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhoYW5kbGUsIGV0LCBwYXRoLCByZWMpOwogCX0gZWxzZSB7CiAJCS8qIENhbGxlciBzaG91bGQgaGF2ZSB0cmFwcGVkIHRoaXMuICovCi0JCW1sb2coTUxfRVJST1IsICJJbm9kZSAlbGx1OiBJbnZhbGlkIHJlY29yZCB0cnVuY2F0ZTogKCV1LCAldSkgIgotCQkgICAgICIoJXUsICV1KVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCW1sb2coTUxfRVJST1IsICJPd25lciAlbGx1OiBJbnZhbGlkIHJlY29yZCB0cnVuY2F0ZTogKCV1LCAldSkgIgorCQkgICAgICIoJXUsICV1KVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCSAgICAgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpLAogCQkgICAgIGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSwgY3BvcywgbGVuKTsKIAkJQlVHKCk7CkBAIC01Mzg2LDE0ICs1NTEyLDE0IEBACiAJaWYgKGxlZnRfcGF0aCkgewogCQlpbnQgc3VidHJlZV9pbmRleDsKIAotCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsIGxlZnRfcGF0aCwgcGF0aCk7Ci0JCW9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwgcGF0aCwKKwkJc3VidHJlZV9pbmRleCA9IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KGV0LCBsZWZ0X3BhdGgsIHBhdGgpOworCQlvY2ZzMl9jb21wbGV0ZV9lZGdlX2luc2VydChoYW5kbGUsIGxlZnRfcGF0aCwgcGF0aCwKIAkJCQkJICAgc3VidHJlZV9pbmRleCk7CiAJfQogCiAJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHBhdGhfbGVhZl9iaChwYXRoKSk7CiAKLQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGRlYWxsb2MsIGV0KTsKKwlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGhhbmRsZSwgZXQsIHBhdGgsIGRlYWxsb2MpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTU0MDQsOSArNTUzMCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG9jZnMyX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9yZW1vdmVfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJdTMyIGNwb3MsIHUzMiBsZW4sIGhhbmRsZV90ICpoYW5kbGUsCisJCQl1MzIgY3BvcywgdTMyIGxlbiwKIAkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCiB7CkBAIC01NDE2LDcgKzU1NDIsMTEgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOwogCXN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoID0gTlVMTDsKIAotCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIDApOworCS8qCisJICogWFhYOiBXaHkgYXJlIHdlIHRydW5jYXRpbmcgdG8gMCBpbnN0ZWFkIG9mIHdoZXJldmVyIHRoaXMKKwkgKiBhZmZlY3RzIHVzPworCSAqLworCW9jZnMyX2V0X2V4dGVudF9tYXBfdHJ1bmNhdGUoZXQsIDApOwogCiAJcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoZXQpOwogCWlmICghcGF0aCkgewpAQCAtNTQyNSw3ICs1NTU1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBwYXRoLCBjcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoZXQtPmV0X2NpLCBwYXRoLCBjcG9zKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC01NDM0LDEwICs1NTY0LDExIEBACiAJZWwgPSBwYXRoX2xlYWZfZWwocGF0aCk7CiAJaW5kZXggPSBvY2ZzMl9zZWFyY2hfZXh0ZW50X2xpc3QoZWwsIGNwb3MpOwogCWlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSkgewotCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCSAgICAiSW5vZGUgJWxsdSBoYXMgYW4gZXh0ZW50IGF0IGNwb3MgJXUgd2hpY2ggY2FuIG5vICIKKwkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkgICAgIk93bmVyICVsbHUgaGFzIGFuIGV4dGVudCBhdCBjcG9zICV1IHdoaWNoIGNhbiBubyAiCiAJCQkgICAgImxvbmdlciBiZSBmb3VuZC5cbiIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIGNwb3MpOworCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKKwkJCSAgICBjcG9zKTsKIAkJcmV0ID0gLUVST0ZTOwogCQlnb3RvIG91dDsKIAl9CkBAIC01NDY0LDIwICs1NTk1LDIxIEBACiAKIAlCVUdfT04oY3BvcyA8IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSB8fCB0cnVuY19yYW5nZSA+IHJlY19yYW5nZSk7CiAKLQltbG9nKDAsICJJbm9kZSAlbGx1LCByZW1vdmUgKGNwb3MgJXUsIGxlbiAldSkuIEV4aXN0aW5nIGluZGV4ICVkICIKKwltbG9nKDAsICJPd25lciAlbGx1LCByZW1vdmUgKGNwb3MgJXUsIGxlbiAldSkuIEV4aXN0aW5nIGluZGV4ICVkICIKIAkgICAgICIoY3BvcyAldSwgbGVuICV1KVxuIiwKLQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBjcG9zLCBsZW4sIGluZGV4LAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihldC0+ZXRfY2kpLAorCSAgICAgY3BvcywgbGVuLCBpbmRleCwKIAkgICAgIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSwgb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCByZWMpKTsKIAogCWlmIChsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykgPT0gY3BvcyB8fCByZWNfcmFuZ2UgPT0gdHJ1bmNfcmFuZ2UpIHsKLQkJcmV0ID0gb2NmczJfdHJ1bmNhdGVfcmVjKGlub2RlLCBoYW5kbGUsIHBhdGgsIGluZGV4LCBkZWFsbG9jLAotCQkJCQkgY3BvcywgbGVuLCBldCk7CisJCXJldCA9IG9jZnMyX3RydW5jYXRlX3JlYyhoYW5kbGUsIGV0LCBwYXRoLCBpbmRleCwgZGVhbGxvYywKKwkJCQkJIGNwb3MsIGxlbik7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0ID0gb2NmczJfc3BsaXRfdHJlZShpbm9kZSwgZXQsIGhhbmRsZSwgcGF0aCwgaW5kZXgsCisJCXJldCA9IG9jZnMyX3NwbGl0X3RyZWUoaGFuZGxlLCBldCwgcGF0aCwgaW5kZXgsCiAJCQkJICAgICAgIHRydW5jX3JhbmdlLCBtZXRhX2FjKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNTQ5MCw3ICs1NjIyLDcgQEAKIAkJICovCiAJCW9jZnMyX3JlaW5pdF9wYXRoKHBhdGgsIDEpOwogCi0JCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgY3Bvcyk7CisJCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChldC0+ZXRfY2ksIHBhdGgsIGNwb3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTU0OTksOSArNTYzMSw5IEBACiAJCWVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOwogCQlpbmRleCA9IG9jZnMyX3NlYXJjaF9leHRlbnRfbGlzdChlbCwgY3Bvcyk7CiAJCWlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJJbm9kZSAlbGx1OiBzcGxpdCBhdCBjcG9zICV1IGxvc3QgcmVjb3JkLiIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1OiBzcGxpdCBhdCBjcG9zICV1IGxvc3QgcmVjb3JkLiIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoZXQtPmV0X2NpKSwKIAkJCQkgICAgY3Bvcyk7CiAJCQlyZXQgPSAtRVJPRlM7CiAJCQlnb3RvIG91dDsKQEAgLTU1MTUsMTggKzU2NDcsMTggQEAKIAkJcmVjX3JhbmdlID0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpICsKIAkJCW9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKTsKIAkJaWYgKHJlY19yYW5nZSAhPSB0cnVuY19yYW5nZSkgewotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJJbm9kZSAlbGx1OiBlcnJvciBhZnRlciBzcGxpdCBhdCBjcG9zICV1IgorCQkJb2NmczJfZXJyb3Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSksCisJCQkJICAgICJPd25lciAlbGx1OiBlcnJvciBhZnRlciBzcGxpdCBhdCBjcG9zICV1IgogCQkJCSAgICAidHJ1bmMgbGVuICV1LCBleGlzdGluZyByZWNvcmQgaXMgKCV1LCV1KSIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSksCiAJCQkJICAgIGNwb3MsIGxlbiwgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpLAogCQkJCSAgICBvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsIHJlYykpOwogCQkJcmV0ID0gLUVST0ZTOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl90cnVuY2F0ZV9yZWMoaW5vZGUsIGhhbmRsZSwgcGF0aCwgaW5kZXgsIGRlYWxsb2MsCi0JCQkJCSBjcG9zLCBsZW4sIGV0KTsKKwkJcmV0ID0gb2NmczJfdHJ1bmNhdGVfcmVjKGhhbmRsZSwgZXQsIHBhdGgsIGluZGV4LCBkZWFsbG9jLAorCQkJCQkgY3BvcywgbGVuKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC01NTczLDcgKzU3MDUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9ldF9yb290X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LAorCXJldCA9IG9jZnMyX2V0X3Jvb3Rfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBldCwKIAkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNTU4MywxNCArNTcxNSwxMyBAQAogCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsCiAJCQkJICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhpbm9kZS0+aV9zYiwgbGVuKSk7CiAKLQlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGlub2RlLCBldCwgY3BvcywgbGVuLCBoYW5kbGUsIG1ldGFfYWMsCi0JCQkJICBkZWFsbG9jKTsKKwlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGhhbmRsZSwgZXQsIGNwb3MsIGxlbiwgbWV0YV9hYywgZGVhbGxvYyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LCAtbGVuKTsKKwlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoZXQsIC1sZW4pOwogCiAJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGV0LT5ldF9yb290X2JoKTsKIAlpZiAocmV0KSB7CkBAIC01NjkwLDcgKzU4MjEsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCB0bF9pbm9kZSwgdGxfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRSh0bF9pbm9kZSksIHRsX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTU3NTIsNyArNTg4Myw3IEBACiAJd2hpbGUgKGkgPj0gMCkgewogCQkvKiBDYWxsZXIgaGFzIGdpdmVuIHVzIGF0IGxlYXN0IGVub3VnaCBjcmVkaXRzIHRvCiAJCSAqIHVwZGF0ZSB0aGUgdHJ1bmNhdGUgbG9nIGRpbm9kZSAqLwotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIHRsX2lub2RlLCB0bF9iaCwKKwkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRSh0bF9pbm9kZSksIHRsX2JoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTYwMTAsNyArNjE0MSw3IEBACiAJCXRsLT50bF91c2VkID0gMDsKIAogCQlvY2ZzMl9jb21wdXRlX21ldGFfZWNjKG9zYi0+c2IsIHRsX2JoLT5iX2RhdGEsICZkaS0+aV9jaGVjayk7Ci0JCXN0YXR1cyA9IG9jZnMyX3dyaXRlX2Jsb2NrKG9zYiwgdGxfYmgsIHRsX2lub2RlKTsKKwkJc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCB0bF9iaCwgSU5PREVfQ0FDSEUodGxfaW5vZGUpKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTY0MDAsOSArNjUzMSw5IEBACiAJcmV0dXJuIGZsOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2NhY2hlX2Jsb2NrX2RlYWxsb2Moc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmN0eHQsCi0JCQkJICAgICBpbnQgdHlwZSwgaW50IHNsb3QsIHU2NCBibGtubywKLQkJCQkgICAgIHVuc2lnbmVkIGludCBiaXQpCitpbnQgb2NmczJfY2FjaGVfYmxvY2tfZGVhbGxvYyhzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqY3R4dCwKKwkJCSAgICAgIGludCB0eXBlLCBpbnQgc2xvdCwgdTY0IGJsa25vLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJpdCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBvY2ZzMl9wZXJfc2xvdF9mcmVlX2xpc3QgKmZsOwpAQCAtNjUxOCw3ICs2NjQ5LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfZmluZF9sZWFmKGlub2RlLCBwYXRoX3Jvb3RfZWwocGF0aCksIGNwb3MsICZiaCk7CisJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgcGF0aF9yb290X2VsKHBhdGgpLCBjcG9zLCAmYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTY1NTEsNyArNjY4Miw3IEBACiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfdHJpbV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3RydW5jYXRlX2NvbnRleHQgKnRjLAotCQkJICAgdTMyIGNsdXN0ZXJzX3RvX2RlbCwgdTY0ICpkZWxldGVfc3RhcnQpCisJCQkgICB1MzIgY2x1c3RlcnNfdG9fZGVsLCB1NjQgKmRlbGV0ZV9zdGFydCwgdTggKmZsYWdzKQogewogCWludCByZXQsIGksIGluZGV4ID0gcGF0aC0+cF90cmVlX2RlcHRoOwogCXUzMiBuZXdfZWRnZSA9IDA7CkBAIC02NTYxLDYgKzY2OTIsNyBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7CiAKIAkqZGVsZXRlX3N0YXJ0ID0gMDsKKwkqZmxhZ3MgPSAwOwogCiAJd2hpbGUgKGluZGV4ID49IDApIHsKIAkJYmggPSBwYXRoLT5wX25vZGVbaW5kZXhdLmJoOwpAQCAtNjY0OCw2ICs2NzgwLDcgQEAKIAkJCSpkZWxldGVfc3RhcnQgPSBsZTY0X3RvX2NwdShyZWMtPmVfYmxrbm8pCiAJCQkJKyBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsCiAJCQkJCWxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSk7CisJCQkqZmxhZ3MgPSByZWMtPmVfZmxhZ3M7CiAKIAkJCS8qCiAJCQkgKiBJZiBpdCdzIG5vdyBlbXB0eSwgcmVtb3ZlIHRoaXMgcmVjb3JkLgpAQCAtNjcxOSw3ICs2ODUyLDcgQEAKIAogCQkJbWxvZygwLCAiZGVsZXRpbmcgdGhpcyBleHRlbnQgYmxvY2suXG4iKTsKIAotCQkJb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoaW5vZGUsIGJoKTsKKwkJCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKElOT0RFX0NBQ0hFKGlub2RlKSwgYmgpOwogCiAJCQlCVUdfT04ob2NmczJfcmVjX2NsdXN0ZXJzKGVsLCAmZWwtPmxfcmVjc1swXSkpOwogCQkJQlVHX09OKGxlMzJfdG9fY3B1KGVsLT5sX3JlY3NbMF0uZV9jcG9zKSk7CkBAIC02NzQ3LDcgKzY4ODAsOCBAQAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAogCQkJICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfdHJ1bmNhdGVfY29udGV4dCAqdGMsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKQorCQkJICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZTsKQEAgLTY3NTUsNiArNjg4OSw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxhc3RfZWJfYmggPSBOVUxMOwogCXU2NCBkZWxldGVfYmxrID0gMDsKKwl1OCByZWNfZmxhZ3M7CiAKIAlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7CiAKQEAgLTY3NjksMTQgKzY5MDQsMTQgQEAKIAkgKiBFYWNoIGNvbXBvbmVudCB3aWxsIGJlIHRvdWNoZWQsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgam91cm5hbAogCSAqIGhlcmUgdG8gYXZvaWQgaGF2aW5nIHRvIGhhbmRsZSBlcnJvcnMgbGF0ZXIuCiAJICovCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcGF0aChpbm9kZSwgaGFuZGxlLCBwYXRoKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKElOT0RFX0NBQ0hFKGlub2RlKSwgaGFuZGxlLCBwYXRoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKIAlpZiAobGFzdF9lYl9iaCkgewotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGlub2RlLCBsYXN0X2ViX2JoLAorCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgbGFzdF9lYl9iaCwKIAkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02ODEwLDcgKzY5NDUsNyBAQAogCWlub2RlLT5pX2Jsb2NrcyA9IG9jZnMyX2lub2RlX3NlY3Rvcl9jb3VudChpbm9kZSk7CiAKIAlzdGF0dXMgPSBvY2ZzMl90cmltX3RyZWUoaW5vZGUsIHBhdGgsIGhhbmRsZSwgdGMsCi0JCQkJIGNsdXN0ZXJzX3RvX2RlbCwgJmRlbGV0ZV9ibGspOworCQkJCSBjbHVzdGVyc190b19kZWwsICZkZWxldGVfYmxrLCAmcmVjX2ZsYWdzKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtNjg0Miw4ICs2OTc3LDE2IEBACiAJfQogCiAJaWYgKGRlbGV0ZV9ibGspIHsKLQkJc3RhdHVzID0gb2NmczJfdHJ1bmNhdGVfbG9nX2FwcGVuZChvc2IsIGhhbmRsZSwgZGVsZXRlX2JsaywKLQkJCQkJCSAgIGNsdXN0ZXJzX3RvX2RlbCk7CisJCWlmIChyZWNfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkKKwkJCXN0YXR1cyA9IG9jZnMyX2RlY3JlYXNlX3JlZmNvdW50KGlub2RlLCBoYW5kbGUsCisJCQkJCW9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhvc2ItPnNiLAorCQkJCQkJCQkgZGVsZXRlX2JsayksCisJCQkJCWNsdXN0ZXJzX3RvX2RlbCwgbWV0YV9hYywKKwkJCQkJJnRjLT50Y19kZWFsbG9jLCAxKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gb2NmczJfdHJ1bmNhdGVfbG9nX2FwcGVuZChvc2IsIGhhbmRsZSwKKwkJCQkJCQkgICBkZWxldGVfYmxrLAorCQkJCQkJCSAgIGNsdXN0ZXJzX3RvX2RlbCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CkBAIC02ODYzLDkgKzcwMDYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9tYXBfYW5kX2RpcnR5X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8sCi0JCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHplcm8sIHU2NCAqcGh5cykKK3ZvaWQgb2NmczJfbWFwX2FuZF9kaXJ0eV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvLAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB6ZXJvLCB1NjQgKnBoeXMpCiB7CiAJaW50IHJldCwgcGFydGlhbCA9IDA7CiAKQEAgLTY5MzMsMjAgKzcwNzYsMTYgQEAKIAkJb2NmczJfdW5sb2NrX2FuZF9mcmVlX3BhZ2VzKHBhZ2VzLCBudW1wYWdlcyk7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZ3JhYl9lb2ZfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAotCQkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnVtKQoraW50IG9jZnMyX2dyYWJfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAorCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnVtKQogewogCWludCBudW1wYWdlcywgcmV0ID0gMDsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJbG9mZl90IGxhc3RfcGFnZV9ieXRlczsKIAogCUJVR19PTihzdGFydCA+IGVuZCk7CiAKLQlCVUdfT04oc3RhcnQgPj4gT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMgIT0KLQkgICAgICAgKGVuZCAtIDEpID4+IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzKTsKLQogCW51bXBhZ2VzID0gMDsKIAlsYXN0X3BhZ2VfYnl0ZXMgPSBQQUdFX0FMSUdOKGVuZCk7CiAJaW5kZXggPSBzdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtNjk3NCw2ICs3MTEzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBvY2ZzMl9ncmFiX2VvZl9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCisJCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpudW0pCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCisJQlVHX09OKHN0YXJ0ID4+IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzICE9CisJICAgICAgIChlbmQgLSAxKSA+PiBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0cyk7CisKKwlyZXR1cm4gb2NmczJfZ3JhYl9wYWdlcyhpbm9kZSwgc3RhcnQsIGVuZCwgcGFnZXMsIG51bSk7Cit9CisKIC8qCiAgKiBaZXJvIHRoZSBhcmVhIHBhc3QgaV9zaXplIGJ1dCBzdGlsbCB3aXRoaW4gYW4gYWxsb2NhdGVkCiAgKiBjbHVzdGVyLiBUaGlzIGF2b2lkcyBleHBvc2luZyBub256ZXJvIGRhdGEgb24gc3Vic2VxdWVudCBmaWxlCkBAIC03MTM4LDcgKzcyODgsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTcyMTgsOSArNzM2OCw4IEBACiAJCSAqIHRoaXMgcHJvdmVzIHRvIGJlIGZhbHNlLCB3ZSBjb3VsZCBhbHdheXMgcmUtYnVpbGQKIAkJICogdGhlIGluLWlub2RlIGRhdGEgZnJvbSBvdXIgcGFnZXMuCiAJCSAqLwotCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCBkaV9iaCk7Ci0JCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGlub2RlLCAmZXQsCi0JCQkJCSAgMCwgYmxvY2ssIDEsIDAsIE5VTEwpOworCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOworCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgJmV0LCAwLCBibG9jaywgMSwgMCwgTlVMTCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0X2NvbW1pdDsKQEAgLTcyNjIsMTEgKzc0MTEsMTQgQEAKIHsKIAlpbnQgc3RhdHVzLCBpLCBjcmVkaXRzLCB0bF9zZW0gPSAwOwogCXUzMiBjbHVzdGVyc190b19kZWwsIG5ld19oaWdoZXN0X2Nwb3MsIHJhbmdlOworCXU2NCBibGtubyA9IDA7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKnRsX2lub2RlID0gb3NiLT5vc2JfdGxfaW5vZGU7CiAJc3RydWN0IG9jZnMyX3BhdGggKnBhdGggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilmZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWUgPSBOVUxMOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTcyOTIsMTAgKzc0NDQsMTIgQEAKIAkJZ290byBiYWlsOwogCX0KIAorCWNyZWRpdHMgPSAwOworCiAJLyoKIAkgKiBUcnVuY2F0ZSBhbHdheXMgd29ya3MgYWdhaW5zdCB0aGUgcmlnaHRtb3N0IHRyZWUgYnJhbmNoLgogCSAqLwotCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcGF0aCwgVUlOVF9NQVgpOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfcGF0aChJTk9ERV9DQUNIRShpbm9kZSksIHBhdGgsIFVJTlRfTUFYKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtNzMzMiwxMCArNzQ4NiwxNSBAQAogCQljbHVzdGVyc190b19kZWwgPSAwOwogCX0gZWxzZSBpZiAobGUzMl90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Nwb3MpID49IG5ld19oaWdoZXN0X2Nwb3MpIHsKIAkJY2x1c3RlcnNfdG9fZGVsID0gb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCAmZWwtPmxfcmVjc1tpXSk7CisJCWJsa25vID0gbGU2NF90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Jsa25vKTsKIAl9IGVsc2UgaWYgKHJhbmdlID4gbmV3X2hpZ2hlc3RfY3BvcykgewogCQljbHVzdGVyc190b19kZWwgPSAob2NmczJfcmVjX2NsdXN0ZXJzKGVsLCAmZWwtPmxfcmVjc1tpXSkgKwogCQkJCSAgIGxlMzJfdG9fY3B1KGVsLT5sX3JlY3NbaV0uZV9jcG9zKSkgLQogCQkJCSAgbmV3X2hpZ2hlc3RfY3BvczsKKwkJYmxrbm8gPSBsZTY0X3RvX2NwdShlbC0+bF9yZWNzW2ldLmVfYmxrbm8pICsKKwkJCW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwKKwkJCQlvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsICZlbC0+bF9yZWNzW2ldKSAtCisJCQkJY2x1c3RlcnNfdG9fZGVsKTsKIAl9IGVsc2UgewogCQlzdGF0dXMgPSAwOwogCQlnb3RvIGJhaWw7CkBAIC03MzQ0LDYgKzc1MDMsMjkgQEAKIAltbG9nKDAsICJjbHVzdGVyc190b19kZWwgPSAldSBpbiB0aGlzIHBhc3MsIHRhaWwgYmxrPSVsbHVcbiIsCiAJICAgICBjbHVzdGVyc190b19kZWwsICh1bnNpZ25lZCBsb25nIGxvbmcpcGF0aF9sZWFmX2JoKHBhdGgpLT5iX2Jsb2NrbnIpOwogCisJaWYgKGVsLT5sX3JlY3NbaV0uZV9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEICYmIGNsdXN0ZXJzX3RvX2RlbCkgeworCQlCVUdfT04oIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYKKwkJCSBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpKTsKKworCQlzdGF0dXMgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLAorCQkJCQkJbGU2NF90b19jcHUoZGktPmlfcmVmY291bnRfbG9jKSwKKwkJCQkJCTEsICZyZWZfdHJlZSwgTlVMTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfcmVmY291bnRfY2hhbmdlX2Zvcl9kZWwoaW5vZGUsIGZlX2JoLAorCQkJCQkJCSAgICAgICBibGtubywKKwkJCQkJCQkgICAgICAgY2x1c3RlcnNfdG9fZGVsLAorCQkJCQkJCSAgICAgICAmY3JlZGl0cywKKwkJCQkJCQkgICAgICAgJm1ldGFfYWMpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJZ290byBiYWlsOworCQl9CisJfQorCiAJbXV0ZXhfbG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCXRsX3NlbSA9IDE7CiAJLyogb2NmczJfdHJ1bmNhdGVfbG9nX25lZWRzX2ZsdXNoIGd1YXJhbnRlZXMgdXMgYXQgbGVhc3Qgb25lCkBAIC03MzU3LDcgKzc1MzksNyBAQAogCQl9CiAJfQogCi0JY3JlZGl0cyA9IG9jZnMyX2NhbGNfdHJlZV90cnVuY19jcmVkaXRzKG9zYi0+c2IsIGNsdXN0ZXJzX3RvX2RlbCwKKwljcmVkaXRzICs9IG9jZnMyX2NhbGNfdHJlZV90cnVuY19jcmVkaXRzKG9zYi0+c2IsIGNsdXN0ZXJzX3RvX2RlbCwKIAkJCQkJCShzdHJ1Y3Qgb2NmczJfZGlub2RlICopZmVfYmgtPmJfZGF0YSwKIAkJCQkJCWVsKTsKIAloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOwpAQCAtNzM2OSw3ICs3NTUxLDcgQEAKIAl9CiAKIAlzdGF0dXMgPSBvY2ZzMl9kb190cnVuY2F0ZShvc2IsIGNsdXN0ZXJzX3RvX2RlbCwgaW5vZGUsIGZlX2JoLCBoYW5kbGUsCi0JCQkJICAgdGMsIHBhdGgpOworCQkJCSAgIHRjLCBwYXRoLCBtZXRhX2FjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTczODMsNiArNzU2NSwxNiBAQAogCiAJb2NmczJfcmVpbml0X3BhdGgocGF0aCwgMSk7CiAKKwlpZiAobWV0YV9hYykgeworCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisJCW1ldGFfYWMgPSBOVUxMOworCX0KKworCWlmIChyZWZfdHJlZSkgeworCQlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwkJcmVmX3RyZWUgPSBOVUxMOworCX0KKwogCS8qCiAJICogVGhlIGNoZWNrIGFib3ZlIHdpbGwgY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgd2UndmUgdHJ1bmNhdGVkCiAJICogYXdheSBhbGwgYWxsb2NhdGlvbi4KQEAgLTczOTksNiArNzU5MSwxMiBAQAogCWlmIChoYW5kbGUpCiAJCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CiAKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCisJaWYgKHJlZl90cmVlKQorCQlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwogCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZ0Yy0+dGNfZGVhbGxvYyk7CiAKIAlvY2ZzMl9mcmVlX3BhdGgocGF0aCk7CkBAIC03NDQ1LDcgKzc2NDMsNyBAQAogCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCYoKnRjKS0+dGNfZGVhbGxvYyk7CiAKIAlpZiAoZmUtPmlkMi5pX2xpc3QubF90cmVlX2RlcHRoKSB7Ci0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGlub2RlLAorCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksCiAJCQkJCQkgbGU2NF90b19jcHUoZmUtPmlfbGFzdF9lYl9ibGspLAogCQkJCQkJICZsYXN0X2ViX2JoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTc1MDcsNyArNzcwNSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5oIGIvZnMvb2NmczIvYWxsb2MuaAppbmRleCAzNTMyNTRiLi45YzEyMmQ1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5oCisrKyBiL2ZzL29jZnMyL2FsbG9jLmgKQEAgLTQ1LDcgKzQ1LDggQEAKICAqCiAgKiBvY2ZzMl9leHRlbnRfdHJlZSBjb250YWlucyBpbmZvIGZvciB0aGUgcm9vdCBvZiB0aGUgYi10cmVlLCBpdCBtdXN0IGhhdmUgYQogICogcm9vdCBvY2ZzMl9leHRlbnRfbGlzdCBhbmQgYSByb290X2JoIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiB0aGUgYi10cmVlCi0gKiBmdW5jdGlvbnMuICBXaXRoIG1ldGFkYXRhIGVjYywgd2Ugbm93IGNhbGwgZGlmZmVyZW50IGpvdXJuYWxfYWNjZXNzCisgKiBmdW5jdGlvbnMuICBJdCBuZWVkcyB0aGUgb2NmczJfY2FjaGluZ19pbmZvIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGgKKyAqIEkvTyBvbiB0aGUgdHJlZS4gIFdpdGggbWV0YWRhdGEgZWNjLCB3ZSBub3cgY2FsbCBkaWZmZXJlbnQgam91cm5hbF9hY2Nlc3MKICAqIGZ1bmN0aW9ucyBmb3IgZWFjaCB0eXBlIG9mIG1ldGFkYXRhLCBzbyBpdCBtdXN0IGhhdmUgdGhlCiAgKiByb290X2pvdXJuYWxfYWNjZXNzIGZ1bmN0aW9uLgogICogb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyBhYnN0cmFjdCB0aGUgbm9ybWFsIG9wZXJhdGlvbnMgd2UgZG8gZm9yCkBAIC01Niw2ICs1Nyw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMJKmV0X29wczsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJCQkqZXRfcm9vdF9iaDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QJCSpldF9yb290X2VsOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8JCSpldF9jaTsKIAlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jCQlldF9yb290X2pvdXJuYWxfYWNjZXNzOwogCXZvaWQJCQkJCSpldF9vYmplY3Q7CiAJdW5zaWduZWQgaW50CQkJCWV0X21heF9sZWFmX2NsdXN0ZXJzOwpAQCAtNjYsMzEgKzY4LDMyIEBACiAgKiBzcGVjaWZpZWQgb2JqZWN0IGJ1ZmZlci4KICAqLwogdm9pZCBvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiB2b2lkIG9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmOwogdm9pZCBvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2Yik7CiB2b2lkIG9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Cit2b2lkIG9jZnMyX2luaXRfcmVmY291bnRfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKIC8qCiAgKiBSZWFkIGFuIGV4dGVudCBibG9jayBpbnRvICpiaC4gIElmICpiaCBpcyBOVUxMLCBhIGJoIHdpbGwgYmUKICAqIGFsbG9jYXRlZC4gIFRoaXMgaXMgYSBjYWNoZWQgcmVhZC4gIFRoZSBleHRlbnQgYmxvY2sgd2lsbCBiZSB2YWxpZGF0ZWQKICAqIHdpdGggb2NmczJfdmFsaWRhdGVfZXh0ZW50X2Jsb2NrKCkuCiAgKi8KLWludCBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZWJfYmxrbm8sCitpbnQgb2NmczJfcmVhZF9leHRlbnRfYmxvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksIHU2NCBlYl9ibGtubywKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCk7CiAKIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0OwotaW50IG9jZnMyX2luc2VydF9leHRlbnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQloYW5kbGVfdCAqaGFuZGxlLAotCQkJc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsCiAJCQl1NjQgc3RhcnRfYmxrLApAQCAtMTAzLDI1ICsxMDYsMzYgQEAKIAlSRVNUQVJUX1RSQU5TLAogCVJFU1RBUlRfTUVUQQogfTsKLWludCBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkJc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCXUzMiAqbG9naWNhbF9vZmZzZXQsCiAJCQkJdTMyIGNsdXN0ZXJzX3RvX2FkZCwKIAkJCQlpbnQgbWFya191bndyaXR0ZW4sCi0JCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKLQkJCQloYW5kbGVfdCAqaGFuZGxlLAogCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAogCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJCWVudW0gb2NmczJfYWxsb2NfcmVzdGFydGVkICpyZWFzb25fcmV0KTsKIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0Oworc3RydWN0IG9jZnMyX3BhdGg7CitpbnQgb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkgICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCisJCSAgICAgICBpbnQgc3BsaXRfaW5kZXgsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7CiBpbnQgb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCSAgICAgIGhhbmRsZV90ICpoYW5kbGUsIHUzMiBjcG9zLCB1MzIgbGVuLCB1MzIgcGh5cywKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpOwotaW50IG9jZnMyX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCi0JCQl1MzIgY3BvcywgdTMyIGxlbiwgaGFuZGxlX3QgKmhhbmRsZSwKK2ludCBvY2ZzMl9jaGFuZ2VfZXh0ZW50X2ZsYWcoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICAgdTMyIGNwb3MsIHUzMiBsZW4sIHUzMiBwaHlzLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgIGludCBuZXdfZmxhZ3MsIGludCBjbGVhcl9mbGFncyk7CitpbnQgb2NmczJfcmVtb3ZlX2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJdTMyIGNwb3MsIHUzMiBsZW4sCiAJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTsKIGludCBvY2ZzMl9yZW1vdmVfYnRyZWVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKQEAgLTEzMCw3ICsxNDQsNiBAQAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7CiAKIGludCBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOwogCiAvKgpAQCAtMTk1LDYgKzIwOCw5IEBACiB9CiBpbnQgb2NmczJfY2FjaGVfY2x1c3Rlcl9kZWFsbG9jKHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpjdHh0LAogCQkJCXU2NCBibGtubywgdW5zaWduZWQgaW50IGJpdCk7CitpbnQgb2NmczJfY2FjaGVfYmxvY2tfZGVhbGxvYyhzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqY3R4dCwKKwkJCSAgICAgIGludCB0eXBlLCBpbnQgc2xvdCwgdTY0IGJsa25vLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJpdCk7CiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9kZWFsbG9jX2hhc19jbHVzdGVyKHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpjKQogewogCXJldHVybiBjLT5jX2dsb2JhbF9hbGxvY2F0b3IgIT0gTlVMTDsKQEAgLTIyMiw4ICsyMzgsOSBAQAogaW50IG9jZnMyX3RydW5jYXRlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAogCQkJICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQsIGludCB0cnVuYyk7CiAKLWludCBvY2ZzMl9maW5kX2xlYWYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyb290X2VsLAotCQkgICAgdTMyIGNwb3MsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmxlYWZfYmgpOworaW50IG9jZnMyX2ZpbmRfbGVhZihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcm9vdF9lbCwgdTMyIGNwb3MsCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsZWFmX2JoKTsKIGludCBvY2ZzMl9zZWFyY2hfZXh0ZW50X2xpc3Qoc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwgdTMyIHZfY2x1c3Rlcik7CiAKIC8qCkBAIC0yNTQsNCArMjcxLDUwIEBACiAJcmV0dXJuICFyZWMtPmVfbGVhZl9jbHVzdGVyczsKIH0KIAoraW50IG9jZnMyX2dyYWJfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAorCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnVtKTsKK3ZvaWQgb2NmczJfbWFwX2FuZF9kaXJ0eV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvLAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB6ZXJvLCB1NjQgKnBoeXMpOworLyoKKyAqIFN0cnVjdHVyZXMgd2hpY2ggZGVzY3JpYmUgYSBwYXRoIHRocm91Z2ggYSBidHJlZSwgYW5kIGZ1bmN0aW9ucyB0bworICogbWFuaXB1bGF0ZSB0aGVtLgorICoKKyAqIFRoZSBpZGVhIGhlcmUgaXMgdG8gYmUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZSB3aXRoIHRoZSB0cmVlCisgKiBtYW5pcHVsYXRpb24gY29kZS4KKyAqLworc3RydWN0IG9jZnMyX3BhdGhfaXRlbSB7CisJc3RydWN0IGJ1ZmZlcl9oZWFkCQkqYmg7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0CSplbDsKK307CisKKyNkZWZpbmUgT0NGUzJfTUFYX1BBVEhfREVQVEgJNQorCitzdHJ1Y3Qgb2NmczJfcGF0aCB7CisJaW50CQkJCXBfdHJlZV9kZXB0aDsKKwlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jCXBfcm9vdF9hY2Nlc3M7CisJc3RydWN0IG9jZnMyX3BhdGhfaXRlbQkJcF9ub2RlW09DRlMyX01BWF9QQVRIX0RFUFRIXTsKK307CisKKyNkZWZpbmUgcGF0aF9yb290X2JoKF9wYXRoKSAoKF9wYXRoKS0+cF9ub2RlWzBdLmJoKQorI2RlZmluZSBwYXRoX3Jvb3RfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbMF0uZWwpCisjZGVmaW5lIHBhdGhfcm9vdF9hY2Nlc3MoX3BhdGgpKChfcGF0aCktPnBfcm9vdF9hY2Nlc3MpCisjZGVmaW5lIHBhdGhfbGVhZl9iaChfcGF0aCkgKChfcGF0aCktPnBfbm9kZVsoX3BhdGgpLT5wX3RyZWVfZGVwdGhdLmJoKQorI2RlZmluZSBwYXRoX2xlYWZfZWwoX3BhdGgpICgoX3BhdGgpLT5wX25vZGVbKF9wYXRoKS0+cF90cmVlX2RlcHRoXS5lbCkKKyNkZWZpbmUgcGF0aF9udW1faXRlbXMoX3BhdGgpICgoX3BhdGgpLT5wX3RyZWVfZGVwdGggKyAxKQorCit2b2lkIG9jZnMyX3JlaW5pdF9wYXRoKHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCBpbnQga2VlcF9yb290KTsKK3ZvaWQgb2NmczJfZnJlZV9wYXRoKHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKTsKK2ludCBvY2ZzMl9maW5kX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJICAgIHUzMiBjcG9zKTsKK3N0cnVjdCBvY2ZzMl9wYXRoICpvY2ZzMl9uZXdfcGF0aF9mcm9tX3BhdGgoc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpOworc3RydWN0IG9jZnMyX3BhdGggKm9jZnMyX25ld19wYXRoX2Zyb21fZXQoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CitpbnQgb2NmczJfcGF0aF9iaF9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCisJCQkJIGludCBpZHgpOworaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpOwogI2VuZGlmIC8qIE9DRlMyX0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCA4YTFlNjE1Li43MmU3NjA2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAic3ViYWxsb2MuaCIKICNpbmNsdWRlICJzdXBlci5oIgogI2luY2x1ZGUgInN5bWxpbmsuaCIKKyNpbmNsdWRlICJyZWZjb3VudHRyZWUuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTEyNiw4ICsxMjcsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKLQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoraW50IG9jZnMyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzOwpAQCAtNTkwLDYgKzU5MSw4IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwkvKiBXZSBzaG91bGQgYWxyZWFkeSBDb1cgdGhlIHJlZmNvdW50ZWQgZXh0ZW50LiAqLworCUJVR19PTihleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCk7CiAJLyoKIAkgKiBnZXRfbW9yZV9ibG9ja3MoKSBleHBlY3RzIHVzIHRvIGRlc2NyaWJlIGEgaG9sZSBieSBjbGVhcmluZwogCSAqIHRoZSBtYXBwZWQgYml0IG9uIGJoX3Jlc3VsdCgpLgpAQCAtNjg3LDYgKzY5MCwxMCBAQAogCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCiAJCXJldHVybiAwOwogCisJLyogRmFsbGJhY2sgdG8gYnVmZmVyZWQgSS9PIGlmIHdlIGFyZSBhcHBlbmRpbmcuICovCisJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA8PSBvZmZzZXQpCisJCXJldHVybiAwOworCiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX25vX2xvY2tpbmcocncsIGlvY2IsIGlub2RlLAogCQkJCQkgICAgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LCBvZmZzZXQsCiAJCQkJCSAgICBucl9zZWdzLCAKQEAgLTEyNTksNyArMTI2Niw4IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSBpZiAodW53cml0dGVuKSB7Ci0JCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIHdjLT53X2RpX2JoKTsKKwkJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSAgICAgIHdjLT53X2RpX2JoKTsKIAkJcmV0ID0gb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihpbm9kZSwgJmV0LAogCQkJCQkJd2MtPndfaGFuZGxlLCBjcG9zLCAxLCBwaHlzLAogCQkJCQkJbWV0YV9hYywgJndjLT53X2RlYWxsb2MpOwpAQCAtMTQ0OCw2ICsxNDU2LDkgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAorCQkJLyogV2Ugc2hvdWxkIGFscmVhZHkgQ29XIHRoZSByZWZjb3VudGQgZXh0ZW50LiAqLworCQkJQlVHX09OKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKTsKKwogCQkJLyoKIAkJCSAqIEFzc3VtZSB3b3JzdCBjYXNlIC0gdGhhdCB3ZSdyZSB3cml0aW5nIGluCiAJCQkgKiB0aGUgbWlkZGxlIG9mIHRoZSBleHRlbnQuCkBAIC0xNTI4LDcgKzE1MzksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCB3Yy0+d19kaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgd2MtPndfZGlfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKQEAgLTE2OTksNiArMTcxMCwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlyZXQgPSBvY2ZzMl9jaGVja19yYW5nZV9mb3JfcmVmY291bnQoaW5vZGUsIHBvcywgbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocmV0ID09IDEpIHsKKwkJcmV0ID0gb2NmczJfcmVmY291bnRfY293KGlub2RlLCBkaV9iaCwKKwkJCQkJIHdjLT53X2Nwb3MsIHdjLT53X2NsZW4sIFVJTlRfTUFYKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKIAlyZXQgPSBvY2ZzMl9wb3B1bGF0ZV93cml0ZV9kZXNjKGlub2RlLCB3YywgJmNsdXN0ZXJzX3RvX2FsbG9jLAogCQkJCQkmZXh0ZW50c190b19zcGxpdCk7CiAJaWYgKHJldCkgewpAQCAtMTcyNiw3ICsxNzUwLDggQEAKIAkJICAgICAobG9uZyBsb25nKWlfc2l6ZV9yZWFkKGlub2RlKSwgbGUzMl90b19jcHUoZGktPmlfY2x1c3RlcnMpLAogCQkgICAgIGNsdXN0ZXJzX3RvX2FsbG9jLCBleHRlbnRzX3RvX3NwbGl0KTsKIAotCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCB3Yy0+d19kaV9iaCk7CisJCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoaW5vZGUpLAorCQkJCQkgICAgICB3Yy0+d19kaV9iaCk7CiAJCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LAogCQkJCQkgICAgY2x1c3RlcnNfdG9fYWxsb2MsIGV4dGVudHNfdG9fc3BsaXQsCiAJCQkJCSAgICAmZGF0YV9hYywgJm1ldGFfYWMpOwpAQCAtMTc3Myw3ICsxNzk4LDcgQEAKIAkgKiBXZSBkb24ndCB3YW50IHRoaXMgdG8gZmFpbCBpbiBvY2ZzMl93cml0ZV9lbmQoKSwgc28gZG8gaXQKIAkgKiBoZXJlLgogCSAqLwotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIHdjLT53X2RpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB3Yy0+d19kaV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmggYi9mcy9vY2ZzMi9hb3BzLmgKaW5kZXggNTAzZTQ5Mi4uYzQ4ZTkzZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5oCisrKyBiL2ZzL29jZnMyL2FvcHMuaApAQCAtNTcsNiArNTcsOCBAQAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCk7CiBpbnQgb2NmczJfc2l6ZV9maXRzX2lubGluZV9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsIHU2NCBuZXdfc2l6ZSk7CiAKK2ludCBvY2ZzMl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAorCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpOwogLyogYWxsIG9jZnMyX2Rpb19lbmRfaW8oKSdzIGZhdWx0ICovCiAjZGVmaW5lIG9jZnMyX2lvY2JfaXNfcndfbG9ja2VkKGlvY2IpIFwKIAl0ZXN0X2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKSZpb2NiLT5wcml2YXRlKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKaW5kZXggMTVjOGU2ZC4uZDQzZDM0YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYworKysgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCkBAIC01MiwxMiArNTIsMTIgQEAKIEJVRkZFUl9GTlMoTmVlZHNWYWxpZGF0ZSwgbmVlZHNfdmFsaWRhdGUpOwogCiBpbnQgb2NmczJfd3JpdGVfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJCSAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQogewogCWludCByZXQgPSAwOwogCi0JbWxvZ19lbnRyeSgiKGJoLT5iX2Jsb2NrbnIgPSAlbGx1LCBpbm9kZT0lcClcbiIsCi0JCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwgaW5vZGUpOworCW1sb2dfZW50cnkoIihiaC0+Yl9ibG9ja25yID0gJWxsdSwgY2k9JXApXG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsIGNpKTsKIAogCUJVR19PTihiaC0+Yl9ibG9ja25yIDwgT0NGUzJfU1VQRVJfQkxPQ0tfQkxLTk8pOwogCUJVR19PTihidWZmZXJfamJkKGJoKSk7CkBAIC03MCw3ICs3MCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhjaSk7CiAKIAlsb2NrX2J1ZmZlcihiaCk7CiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CkBAIC04NSw3ICs4NSw3IEBACiAJd2FpdF9vbl9idWZmZXIoYmgpOwogCiAJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKLQkJb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpOworCQlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCk7CiAJfSBlbHNlIHsKIAkJLyogV2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgdGhlIGNsdXN0ZXJlZCB1cHRvZGF0ZQogCQkgKiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBiaCBhcyBpdCdzIG5vdCBtYXJrZWQgbG9jYWxseQpAQCAtOTQsNyArOTQsNyBAQAogCQlwdXRfYmgoYmgpOwogCX0KIAotCW11dGV4X3VubG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2lvX211dGV4KTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pb191bmxvY2soY2kpOwogb3V0OgogCW1sb2dfZXhpdChyZXQpOwogCXJldHVybiByZXQ7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgb2NmczJfcmVhZF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJsb2NrLCBpbnQgbnIsCitpbnQgb2NmczJfcmVhZF9ibG9ja3Moc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksIHU2NCBibG9jaywgaW50IG5yLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdLCBpbnQgZmxhZ3MsCiAJCSAgICAgIGludCAoKnZhbGlkYXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpKQpAQCAtMTg1LDExICsxODUsMTIgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaSwgaWdub3JlX2NhY2hlID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOwogCi0JbWxvZ19lbnRyeSgiKGlub2RlPSVwLCBibG9jaz0oJWxsdSksIG5yPSglZCksIGZsYWdzPSVkKVxuIiwKLQkJICAgaW5vZGUsICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIG5yLCBmbGFncyk7CisJbWxvZ19lbnRyeSgiKGNpPSVwLCBibG9jaz0oJWxsdSksIG5yPSglZCksIGZsYWdzPSVkKVxuIiwKKwkJICAgY2ksICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIG5yLCBmbGFncyk7CiAKLQlCVUdfT04oIWlub2RlKTsKKwlCVUdfT04oIWNpKTsKIAlCVUdfT04oKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKSAmJgogCSAgICAgICAoZmxhZ3MgJiBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpKTsKIApAQCAtMjEyLDEyICsyMTMsMTIgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhjaSk7CiAJZm9yIChpID0gMCA7IGkgPCBuciA7IGkrKykgewogCQlpZiAoYmhzW2ldID09IE5VTEwpIHsKLQkJCWJoc1tpXSA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmxvY2srKyk7CisJCQliaHNbaV0gPSBzYl9nZXRibGsoc2IsIGJsb2NrKyspOwogCQkJaWYgKGJoc1tpXSA9PSBOVUxMKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCQkJCW9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhjaSk7CiAJCQkJc3RhdHVzID0gLUVJTzsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMjUwLDExICsyNTEsMTEgQEAKIAkJICogICAgYmVmb3JlIG91ciBpcy1pdC1pbi1mbGlnaHQgY2hlY2suCiAJCSAqLwogCi0JCWlmICghaWdub3JlX2NhY2hlICYmICFvY2ZzMl9idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoKSkgeworCQlpZiAoIWlnbm9yZV9jYWNoZSAmJiAhb2NmczJfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCkpIHsKIAkJCW1sb2coTUxfVVBUT0RBVEUsCi0JCQkgICAgICJiaCAoJWxsdSksIGlub2RlICVsbHUgbm90IHVwdG9kYXRlXG4iLAorCQkJICAgICAiYmggKCVsbHUpLCBvd25lciAlbGx1IG5vdCB1cHRvZGF0ZVxuIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAotCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpKTsKIAkJCS8qIFdlJ3JlIHVzaW5nIGlnbm9yZV9jYWNoZSBoZXJlIHRvIHNheQogCQkJICogImdvIHRvIGRpc2siICovCiAJCQlpZ25vcmVfY2FjaGUgPSAxOwpAQCAtMjgzLDcgKzI4NCw3IEBACiAJCQkgKiBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0IHRoYW4gd2UgYXJlCiAJCQkgKiBkb25lIGhlcmUuICovCiAJCQlpZiAoKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKQotCQkJICAgICYmIG9jZnMyX2J1ZmZlcl9yZWFkX2FoZWFkKGlub2RlLCBiaCkpCisJCQkgICAgJiYgb2NmczJfYnVmZmVyX3JlYWRfYWhlYWQoY2ksIGJoKSkKIAkJCQljb250aW51ZTsKIAogCQkJbG9ja19idWZmZXIoYmgpOwpAQCAtMzA1LDcgKzMwNiw3IEBACiAJCQkgKiBidWZmZXIgbG9jay4gKi8KIAkJCWlmICghKGZsYWdzICYgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKQogCQkJICAgICYmICEoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpCi0JCQkgICAgJiYgb2NmczJfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCkpIHsKKwkJCSAgICAmJiBvY2ZzMl9idWZmZXJfdXB0b2RhdGUoY2ksIGJoKSkgewogCQkJCXVubG9ja19idWZmZXIoYmgpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMzI3LDcgKzMyOCw3IEBACiAKIAkJaWYgKCEoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpKSB7CiAJCQkvKiBXZSBrbm93IHRoaXMgY2FuJ3QgaGF2ZSBjaGFuZ2VkIGFzIHdlIGhvbGQgdGhlCi0JCQkgKiBpbm9kZSBzZW0uIEF2b2lkIGRvaW5nIGFueSB3b3JrIG9uIHRoZSBiaCBpZiB0aGUKKwkJCSAqIG93bmVyIHNlbS4gQXZvaWQgZG9pbmcgYW55IHdvcmsgb24gdGhlIGJoIGlmIHRoZQogCQkJICogam91cm5hbCBoYXMgaXQuICovCiAJCQlpZiAoIWJ1ZmZlcl9qYmQoYmgpKQogCQkJCXdhaXRfb25fYnVmZmVyKGJoKTsKQEAgLTM1MSw3ICszNTIsNyBAQAogCQkJCSAqIHRoYXQgYmV0dGVyIG5vdCBoYXZlIGNoYW5nZWQgKi8KIAkJCQlCVUdfT04oYnVmZmVyX2piZChiaCkpOwogCQkJCWNsZWFyX2J1ZmZlcl9uZWVkc192YWxpZGF0ZShiaCk7Ci0JCQkJc3RhdHVzID0gdmFsaWRhdGUoaW5vZGUtPmlfc2IsIGJoKTsKKwkJCQlzdGF0dXMgPSB2YWxpZGF0ZShzYiwgYmgpOwogCQkJCWlmIChzdGF0dXMpIHsKIAkJCQkJcHV0X2JoKGJoKTsKIAkJCQkJYmhzW2ldID0gTlVMTDsKQEAgLTM2Myw5ICszNjQsOSBAQAogCQkvKiBBbHdheXMgc2V0IHRoZSBidWZmZXIgaW4gdGhlIGNhY2hlLCBldmVuIGlmIGl0IHdhcwogCQkgKiBhIGZvcmNlZCByZWFkLCBvciByZWFkLWFoZWFkIHdoaWNoIGhhc24ndCB5ZXQKIAkJICogY29tcGxldGVkLiAqLwotCQlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCk7CisJCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoY2ksIGJoKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhjaSk7CiAKIAltbG9nKE1MX0JIX0lPLCAiYmxvY2s9KCVsbHUpLCBucj0oJWQpLCBjYWNoZWQ9JXMsIGZsYWdzPTB4JXhcbiIsIAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgbnIsCkBAIC0zOTksNyArNDAwLDcgQEAKIAogLyoKICAqIFdyaXRlIHN1cGVyIGJsb2NrIGFuZCBiYWNrdXBzIGRvZXNuJ3QgbmVlZCB0byBjb2xsYWJvcmF0ZSB3aXRoIGpvdXJuYWwsCi0gKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgaXBfaW9fbXV0ZXggYW5kIGlub2RlIGRvZXNuJ3QgbmVlZCB0byBiZWEgcGFzc2VkCisgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgaXBfaW9fbXV0ZXggYW5kIGNpIGRvZXNuJ3QgbmVlZCB0byBiZWEgcGFzc2VkCiAgKiBpbnRvIHRoaXMgZnVuY3Rpb24uCiAgKi8KIGludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uaAppbmRleCBjNzVkNjgyLi5iOTdiY2M2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oCisrKyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAgICAgICAgICAqb3NiLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgICpiaCwKLQkJICAgICAgc3RydWN0IGlub2RlICAgICAgICAqaW5vZGUpOworCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICAgKmNpKTsKIGludCBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxvY2ssCiAJCQkgICB1bnNpZ25lZCBpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10pOwogCkBAIC00NCw3ICs0NCw3IEBACiAgKiBiZSBzZXQgZXZlbiBmb3IgYSBSRUFEQUhFQUQgY2FsbCwgYXMgaXQgbWFya3MgdGhlIGJ1ZmZlciBmb3IgbGF0ZXIKICAqIHZhbGlkYXRpb24uCiAgKi8KLWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYmxvY2ssIGludCBuciwKK2ludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IGJsb2NrLCBpbnQgbnIsCiAJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sIGludCBmbGFncywKIAkJICAgICAgaW50ICgqdmFsaWRhdGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkpOwpAQCAtNTUsNyArNTUsNyBAQAogI2RlZmluZSBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUgICAgICAxCiAjZGVmaW5lIE9DRlMyX0JIX1JFQURBSEVBRCAgICAgICAgIDgKIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2ZmLAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwgdTY0IG9mZiwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKIAkJCQkgICBpbnQgKCp2YWxpZGF0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpKQpAQCAtNjgsNyArNjgsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIG9mZiwgMSwgYmgsIDAsIHZhbGlkYXRlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhjaSwgb2ZmLCAxLCBiaCwgMCwgdmFsaWRhdGUpOwogCiBiYWlsOgogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCmluZGV4IDk2ZGY1NDEuLjFjZDI5MzQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCkBAIC0xMTEsNiArMTExLDcgQEAKIAlkZWZpbmVfbWFzayhFWFBPUlQpLAogCWRlZmluZV9tYXNrKFhBVFRSKSwKIAlkZWZpbmVfbWFzayhRVU9UQSksCisJZGVmaW5lX21hc2soUkVGQ09VTlQpLAogCWRlZmluZV9tYXNrKEVSUk9SKSwKIAlkZWZpbmVfbWFzayhOT1RJQ0UpLAogCWRlZmluZV9tYXNrKEtUSFJFQUQpLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCA2OTZjMzJlLi45YjRkMTE3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMTEzLDYgKzExMyw3IEBACiAjZGVmaW5lIE1MX0VYUE9SVAkweDAwMDAwMDAwMTAwMDAwMDBVTEwgLyogb2NmczIgZXhwb3J0IG9wZXJhdGlvbnMgKi8KICNkZWZpbmUgTUxfWEFUVFIJMHgwMDAwMDAwMDIwMDAwMDAwVUxMIC8qIG9jZnMyIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgTUxfUVVPVEEJMHgwMDAwMDAwMDQwMDAwMDAwVUxMIC8qIG9jZnMyIHF1b3RhIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTUxfUkVGQ09VTlQJMHgwMDAwMDAwMDgwMDAwMDAwVUxMIC8qIHJlZmNvdW50IHRyZWUgb3BlcmF0aW9ucyAqLwogLyogYml0cyB0aGF0IGFyZSBpbmZyZXF1ZW50bHkgZ2l2ZW4gYW5kIGZyZXF1ZW50bHkgbWF0Y2hlZCBpbiB0aGUgaGlnaCB3b3JkICovCiAjZGVmaW5lIE1MX0VSUk9SCTB4MDAwMDAwMDEwMDAwMDAwMFVMTCAvKiBzZW50IHRvIEtFUk5fRVJSICovCiAjZGVmaW5lIE1MX05PVElDRQkweDAwMDAwMDAyMDAwMDAwMDBVTEwgLyogc2V0biB0byBLRVJOX05PVElDRSAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jIGIvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCmluZGV4IGY4NDI0ODcuLmNmYjJiZTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5zdF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuc3Rfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBuc3Rfc2VxX3N0YXJ0LAogCS5uZXh0ID0gbnN0X3NlcV9uZXh0LAogCS5zdG9wID0gbnN0X3NlcV9zdG9wLApAQCAtMzQ0LDcgKzM0NCw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2Nfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2Nfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBzY19zZXFfc3RhcnQsCiAJLm5leHQgPSBzY19zZXFfbmV4dCwKIAkuc3RvcCA9IHNjX3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGlyLmMgYi9mcy9vY2ZzMi9kaXIuYwppbmRleCBiMzU4ZjNiLi4yOGMzZWMyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kaXIuYworKysgYi9mcy9vY2ZzMi9kaXIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CiAJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGR4X3Jvb3RfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBJTk9ERV9DQUNIRShkaXIpLCBkeF9yb290X2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTU2NCw3ICs1NjQsOCBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgcGh5cywgJnRtcCwgb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKElOT0RFX0NBQ0hFKGRpciksIHBoeXMsICZ0bXAsCisJCQkgICAgICAgb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC02MjIsNyArNjIzLDggQEAKIAl1NjQgYmxrbm8gPSBsZTY0X3RvX2NwdShkaS0+aV9keF9yb290KTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpkeF9yb290X2JoOwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhkaXIsIGJsa25vLCAmdG1wLCBvY2ZzMl92YWxpZGF0ZV9keF9yb290KTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKElOT0RFX0NBQ0hFKGRpciksIGJsa25vLCAmdG1wLAorCQkJICAgICAgIG9jZnMyX3ZhbGlkYXRlX2R4X3Jvb3QpOwogCiAJLyogSWYgb2NmczJfcmVhZF9ibG9jaygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KIAlpZiAoIXJldCAmJiAhKmR4X3Jvb3RfYmgpCkBAIC02NjIsNyArNjY0LDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmR4X2xlYWZfYmg7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgYmxrbm8sICZ0bXAsIG9jZnMyX3ZhbGlkYXRlX2R4X2xlYWYpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoZGlyKSwgYmxrbm8sICZ0bXAsCisJCQkgICAgICAgb2NmczJfdmFsaWRhdGVfZHhfbGVhZik7CiAKIAkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLwogCWlmICghcmV0ICYmICEqZHhfbGVhZl9iaCkKQEAgLTY4MCw3ICs2ODMsNyBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhkaXIsIHN0YXJ0LCBudW0sIGR4X2xlYWZfYmhzLCAwLAorCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGRpciksIHN0YXJ0LCBudW0sIGR4X2xlYWZfYmhzLCAwLAogCQkJCW9jZnMyX3ZhbGlkYXRlX2R4X2xlYWYpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTgwMiw3ICs4MDUsOCBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMgPSBOVUxMOwogCiAJaWYgKGVsLT5sX3RyZWVfZGVwdGgpIHsKLQkJcmV0ID0gb2NmczJfZmluZF9sZWFmKGlub2RlLCBlbCwgbWFqb3JfaGFzaCwgJmViX2JoKTsKKwkJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgZWwsIG1ham9yX2hhc2gsCisJCQkJICAgICAgJmViX2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0xMTMzLDcgKzExMzcsOCBAQAogCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKQogCQlhY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaTsKIAotCXJldCA9IGFjY2VzcyhoYW5kbGUsIGRpciwgZGVfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlyZXQgPSBhY2Nlc3MoaGFuZGxlLCBJTk9ERV9DQUNIRShkaXIpLCBkZV9iaCwKKwkJICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMTE3Niw3ICsxMTgxLDcgQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCQlpZiAoZGUgPT0gZGVfZGVsKSAgewotCQkJc3RhdHVzID0gYWNjZXNzKGhhbmRsZSwgZGlyLCBiaCwKKwkJCXN0YXR1cyA9IGFjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGJoLAogCQkJCQlPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJCXN0YXR1cyA9IC1FSU87CkBAIC0xMzI2LDcgKzEzMzEsNyBAQAogCSAqIHRoZSBlbnRyeSBjb3VudCBuZWVkcyB0byBiZSB1cGRhdGVkLiBBbHNvLCB3ZSBtaWdodCBiZQogCSAqIGFkZGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIGZyZWUgbGlzdC4KIAkgKi8KLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGR4X3Jvb3RfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTMzNCw3ICsxMzM5LDcgQEAKIAl9CiAKIAlpZiAoIW9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKSB7Ci0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLAorCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksCiAJCQkJCSAgICAgIGxvb2t1cC0+ZGxfZHhfbGVhZl9iaCwKIAkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAocmV0KSB7CkBAIC0xNDkzLDcgKzE0OTgsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWY7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgZHhfbGVhZl9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGR4X2xlYWZfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTUyMyw3ICsxNTI4LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGR4X3Jvb3RfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTY0NSwxMSArMTY1MCwxMyBAQAogCQkgKi8KIAkJaWYgKG9jZnMyX2ZyZWVfbGlzdF9hdF9yb290KGxvb2t1cCkpIHsKIAkJCWJoID0gbG9va3VwLT5kbF9keF9yb290X2JoOwotCQkJcmV0dmFsID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGJoLAorCQkJcmV0dmFsID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLAorCQkJCQkJIElOT0RFX0NBQ0hFKGRpciksIGJoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJfSBlbHNlIHsKIAkJCWJoID0gbG9va3VwLT5kbF9wcmV2X2xlYWZfYmg7Ci0JCQlyZXR2YWwgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIGRpciwgYmgsCisJCQlyZXR2YWwgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsCisJCQkJCQkgSU5PREVfQ0FDSEUoZGlyKSwgYmgsCiAJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQl9CiAJCWlmIChyZXR2YWwpIHsKQEAgLTE3MDAsMTEgKzE3MDcsMTMgQEAKIAkJCX0KIAogCQkJaWYgKGluc2VydF9iaCA9PSBwYXJlbnRfZmVfYmgpCi0JCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBkaXIsCisJCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkJCQkgSU5PREVfQ0FDSEUoZGlyKSwKIAkJCQkJCQkJIGluc2VydF9iaCwKIAkJCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJCWVsc2UgewotCQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgZGlyLAorCQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwKKwkJCQkJCQkJIElOT0RFX0NBQ0hFKGRpciksCiAJCQkJCQkJCSBpbnNlcnRfYmgsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIApAQCAtMjI4MCw3ICsyMjg5LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfaW5saW5lX2RhdGEgKmRhdGEgPSAmZGktPmlkMi5pX2RhdGE7CiAJdW5zaWduZWQgaW50IHNpemUgPSBsZTE2X3RvX2NwdShkYXRhLT5pZF9jb3VudCk7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCBkaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjMzMiw5ICsyMzQxLDkgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBuZXdfYmgpOworCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGlub2RlKSwgbmV3X2JoKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgbmV3X2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0yNDE4LDkgKzI0MjcsOSBAQAogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9Ci0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBkeF9yb290X2JoKTsKKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShkaXIpLCBkeF9yb290X2JoKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI0NTQsNyArMjQ2Myw3IEBACiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBkaXIsIGRpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZGlfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTI0OTUsOSArMjUwNCw5IEBACiAJCX0KIAkJZHhfbGVhdmVzW2ldID0gYmg7CiAKLQkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBiaCk7CisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGRpciksIGJoKTsKIAotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgYmgsCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgYmgsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yNTgyLDcgKzI1OTEsNiBAQAogewogCWludCByZXQ7CiAJdTY0IHBoeXNfYmxrbm87Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOwogCiAJcmV0ID0gX19vY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoZGlyLCBjcG9zLCBoYW5kbGUsIGRhdGFfYWMsIGR4X2xlYXZlcywKIAkJCQkJIG51bV9keF9sZWF2ZXMsICZwaHlzX2Jsa25vKTsKQEAgLTI1OTEsNyArMjU5OSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgZXQsIGNwb3MsIHBoeXNfYmxrbm8sIDEsIDAsCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCBjcG9zLCBwaHlzX2Jsa25vLCAxLCAwLAogCQkJCSAgbWV0YV9hYyk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjg5NSw3ICsyOTAzLDcgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZHhfZXQ7CiAJaW50IGRpZF9xdW90YSA9IDAsIGJ5dGVzX2FsbG9jYXRlZCA9IDA7CiAKLQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGRpciwgZGlfYmgpOworCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoZGlyKSwgZGlfYmgpOwogCiAJYWxsb2MgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc2IsIGJ5dGVzKTsKIAlkeF9hbGxvYyA9IDA7CkBAIC0zMDA1LDkgKzMwMTMsOSBAQAogCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCi0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBkaXJkYXRhX2JoKTsKKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShkaXIpLCBkaXJkYXRhX2JoKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgZGlyLCBkaXJkYXRhX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZGlyZGF0YV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzA2MCw3ICszMDY4LDcgQEAKIAkgKiBXZSBsZXQgdGhlIGxhdGVyIGRpcmVudCBpbnNlcnQgbW9kaWZ5IGMvbXRpbWUgLSB0byB0aGUgdXNlcgogCSAqIHRoZSBkYXRhIGhhc24ndCBjaGFuZ2VkLgogCSAqLwotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBkaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zMDg1LDcgKzMwOTMsNyBAQAogCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgYXMgb3VyIGV4dGVudCBsaXN0IGlzIGVtcHR5IGFuZCBhbGwKIAkgKiByZWxhdGVkIGJsb2NrcyBoYXZlIGJlZW4gam91cm5hbGVkIGFscmVhZHkuCiAJICovCi0JcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgZGlyLCAmZXQsIDAsIGJsa25vLCBsZW4sCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZldCwgMCwgYmxrbm8sIGxlbiwKIAkJCQkgIDAsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzExNyw4ICszMTI1LDEwIEBACiAJCQlvY2ZzMl9keF9kaXJfaW5kZXhfcm9vdF9ibG9jayhkaXIsIGR4X3Jvb3RfYmgsCiAJCQkJCQkgICAgICBkaXJkYXRhX2JoKTsKIAkJfSBlbHNlIHsKLQkJCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZHhfZXQsIGRpciwgZHhfcm9vdF9iaCk7Ci0JCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsICZkeF9ldCwgMCwKKwkJCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZHhfZXQsCisJCQkJCQkgICAgICAgSU5PREVfQ0FDSEUoZGlyKSwKKwkJCQkJCSAgICAgICBkeF9yb290X2JoKTsKKwkJCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQoaGFuZGxlLCAmZHhfZXQsIDAsCiAJCQkJCQkgIGR4X2luc2VydF9ibGtubywgMSwgMCwgTlVMTCk7CiAJCQlpZiAocmV0KQogCQkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMxMzgsNyArMzE0OCw3IEBACiAJCX0KIAkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLT5pX3NiLCBiaXRfb2ZmKTsKIAotCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsICZldCwgMSwKKwkJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZldCwgMSwKIAkJCQkJICBibGtubywgbGVuLCAwLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzMzNyw4ICszMzQ3LDkgQEAKIAlzcGluX2xvY2soJk9DRlMyX0koZGlyKS0+aXBfbG9jayk7CiAJaWYgKGRpcl9pX3NpemUgPT0gb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoc2IsIE9DRlMyX0koZGlyKS0+aXBfY2x1c3RlcnMpKSB7CiAJCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGRpciktPmlwX2xvY2spOwotCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGRpciwgcGFyZW50X2ZlX2JoKTsKLQkJbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBkaXIsICZldCk7CisJCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoZGlyKSwKKwkJCQkJICAgICAgcGFyZW50X2ZlX2JoKTsKKwkJbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCAmZXQpOwogCQlpZiAobnVtX2ZyZWVfZXh0ZW50cyA8IDApIHsKIAkJCXN0YXR1cyA9IG51bV9mcmVlX2V4dGVudHM7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0zMzg3LDkgKzMzOTgsOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBuZXdfYmgpOworCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGRpciksIG5ld19iaCk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIGRpciwgbmV3X2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgbmV3X2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0zODI5LDcgKzM4NDAsNyBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWFmX2Jsa25vLCBpbnNlcnRfaGFzaCk7CiAKLQlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGR4X3Jvb3RfYmgpOworCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGRpciksIGR4X3Jvb3RfYmgpOwogCiAJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKIAkvKgpAQCAtMzg4NSw3ICszODk2LDcgQEAKIAl9CiAJZGlkX3F1b3RhID0gMTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLCBkeF9sZWFmX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfbGVhZl9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zOTQ5LDcgKzM5NjAsOCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspIHsKLQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlLCBkaXIsIG9yaWdfZHhfbGVhdmVzW2ldLAorCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksCisJCQkJCSAgICAgIG9yaWdfZHhfbGVhdmVzW2ldLAogCQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQxNjUsNyArNDE3Nyw3IEBACiAJICogZmFpbHVyZSB0byBhZGQgdGhlIGR4X3Jvb3RfYmggdG8gdGhlIGpvdXJuYWwgd29uJ3QgcmVzdWx0CiAJICogdXMgbG9zaW5nIGNsdXN0ZXJzLgogCSAqLwotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC00MjA3LDkgKzQyMTksOCBAQAogCiAJLyogVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCBjb25zaWRlcmluZyB3ZSBzdGFydCB3aXRoIGFuIGVtcHR5CiAJICogZHhfcm9vdC4gKi8KLQlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGR4X3Jvb3RfYmgpOwotCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgJmV0LCAwLAotCQkJCSAgaW5zZXJ0X2Jsa25vLCAxLCAwLCBOVUxMKTsKKwlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShkaXIpLCBkeF9yb290X2JoKTsKKwlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgJmV0LCAwLCBpbnNlcnRfYmxrbm8sIDEsIDAsIE5VTEwpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKIAlkaWRfcXVvdGEgPSAwOwpAQCAtNDQ2OSw3ICs0NDgwLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBkaV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGRpciksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQ1MzIsNyArNDU0Myw3IEBACiAJaWYgKG9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKQogCQlnb3RvIHJlbW92ZV9pbmRleDsKIAotCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZXQsIGRpciwgZHhfcm9vdF9iaCk7CisJb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCk7CiAKIAkvKiBYWFg6IFdoYXQgaWYgZHJfY2x1c3RlcnMgaXMgdG9vIGxhcmdlPyAqLwogCXdoaWxlIChsZTMyX3RvX2NwdShkeF9yb290LT5kcl9jbHVzdGVycykpIHsKQEAgLTQ1NjUsNyArNDU3Niw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKGRpciwgZHhfcm9vdF9iaCk7CisJb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoSU5PREVfQ0FDSEUoZGlyKSwgZHhfcm9vdF9iaCk7CiBvdXQ6CiAJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMSk7CiAJb2NmczJfcnVuX2RlYWxsb2NzKG9zYiwgJmRlYWxsb2MpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwppbmRleCBkZjUyZjcwLi5jNWM4ODEyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwpAQCAtNjgzLDcgKzY4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGVidWdfbG9ja3Jlc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRlYnVnX2xvY2tyZXNfb3BzID0gewogCS5zdGFydCA9CWxvY2tyZXNfc2VxX3N0YXJ0LAogCS5zdG9wID0JCWxvY2tyZXNfc2VxX3N0b3AsCiAJLm5leHQgPQkJbG9ja3Jlc19zZXFfbmV4dCwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYyBiL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYwppbmRleCBkNDkwYjY2Li45ODU2OWU4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCkBAIC0yMTIsMTQgKzIxMiwxOCBAQAogCQlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCX0KIAorCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZyZXMtPnB1cmdlKSkgewogCQltbG9nKDAsICJyZW1vdmluZyBsb2NrcmVzICUuKnM6JXAgZnJvbSBwdXJnZWxpc3QsICIKIAkJICAgICAibWFzdGVyID0gJWRcbiIsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCiAJCSAgICAgcmVzLCBtYXN0ZXIpOwogCQlsaXN0X2RlbF9pbml0KCZyZXMtPnB1cmdlKTsKKwkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKIAkJZGxtLT5wdXJnZV9jb3VudC0tOwotCX0KKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOworCiAJX19kbG1fdW5oYXNoX2xvY2tyZXMocmVzKTsKIAogCS8qIGxvY2tyZXMgaXMgbm90IGluIHRoZSBoYXNoIG5vdy4gIGRyb3AgdGhlIGZsYWcgYW5kIHdha2UgdXAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuYyBiL2ZzL29jZnMyL2RsbWdsdWUuYwppbmRleCAxMTBiYjU3Li4wZDM4ZDY3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmMKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJ1cHRvZGF0ZS5oIgogI2luY2x1ZGUgInF1b3RhLmgiCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC0xMTAsNiArMTExLDExIEBACiAKIHN0YXRpYyB2b2lkIG9jZnMyX3NldF9xaW5mb19sdmIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKTsKIAorc3RhdGljIGludCBvY2ZzMl9jaGVja19yZWZjb3VudF9kb3duY29udmVydChzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJCSAgICBpbnQgbmV3X2xldmVsKTsKK3N0YXRpYyBpbnQgb2NmczJfcmVmY291bnRfY29udmVydF93b3JrZXIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQkgaW50IGJsb2NraW5nKTsKKwogI2RlZmluZSBtbG9nX21ldGFfbHZiKF9fbGV2ZWwsIF9fbG9ja3Jlcykgb2NmczJfZHVtcF9tZXRhX2x2Yl9pbmZvKF9fbGV2ZWwsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX2xvY2tyZXMpCiAKIC8qIFRoaXMgYWlkcyBpbiBkZWJ1Z2dpbmcgc2l0dWF0aW9ucyB3aGVyZSBhIGJhZCBMVkIgbWlnaHQgYmUgaW52b2x2ZWQuICovCkBAIC0yNzgsNiArMjg0LDEyIEBACiAJLmZsYWdzCQk9IExPQ0tfVFlQRV9SRVFVSVJFU19SRUZSRVNIIHwgTE9DS19UWVBFX1VTRVNfTFZCLAogfTsKIAorc3RhdGljIHN0cnVjdCBvY2ZzMl9sb2NrX3Jlc19vcHMgb2NmczJfcmVmY291bnRfYmxvY2tfbG9wcyA9IHsKKwkuY2hlY2tfZG93bmNvbnZlcnQgPSBvY2ZzMl9jaGVja19yZWZjb3VudF9kb3duY29udmVydCwKKwkuZG93bmNvbnZlcnRfd29ya2VyID0gb2NmczJfcmVmY291bnRfY29udmVydF93b3JrZXIsCisJLmZsYWdzCQk9IDAsCit9OworCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pc19pbm9kZV9sb2NrKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKIHsKIAlyZXR1cm4gbG9ja3Jlcy0+bF90eXBlID09IE9DRlMyX0xPQ0tfVFlQRV9NRVRBIHx8CkBAIC0zMDYsNiArMzE4LDEyIEBACiAJcmV0dXJuIChzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqKWxvY2tyZXMtPmxfcHJpdjsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqCitvY2ZzMl9sb2NrX3Jlc19yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqcmVzKQoreworCXJldHVybiBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSwgcmZfbG9ja3Jlcyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9jZnMyX3N1cGVyICpvY2ZzMl9nZXRfbG9ja3Jlc19vc2Ioc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewogCWlmIChsb2NrcmVzLT5sX29wcy0+Z2V0X29zYikKQEAgLTY5Myw2ICs3MTEsMTcgQEAKIAkJCQkgICBpbmZvKTsKIH0KIAordm9pZCBvY2ZzMl9yZWZjb3VudF9sb2NrX3Jlc19pbml0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkgIHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgcmVmX2Jsa25vLAorCQkJCSAgdW5zaWduZWQgaW50IGdlbmVyYXRpb24pCit7CisJb2NmczJfbG9ja19yZXNfaW5pdF9vbmNlKGxvY2tyZXMpOworCW9jZnMyX2J1aWxkX2xvY2tfbmFtZShPQ0ZTMl9MT0NLX1RZUEVfUkVGQ09VTlQsIHJlZl9ibGtubywKKwkJCSAgICAgIGdlbmVyYXRpb24sIGxvY2tyZXMtPmxfbmFtZSk7CisJb2NmczJfbG9ja19yZXNfaW5pdF9jb21tb24ob3NiLCBsb2NrcmVzLCBPQ0ZTMl9MT0NLX1RZUEVfUkVGQ09VTlQsCisJCQkJICAgJm9jZnMyX3JlZmNvdW50X2Jsb2NrX2xvcHMsIG9zYik7Cit9CisKIHZvaWQgb2NmczJfbG9ja19yZXNfZnJlZShzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKnJlcykKIHsKIAltbG9nX2VudHJ5X3ZvaWQoKTsKQEAgLTE1NDgsOCArMTU3NywxMCBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCiAJICAgICB3cml0ZSA/ICJFWE1PREUiIDogIlBSTU9ERSIpOwogCi0JaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpIHsKKwkJbWxvZ19leGl0KDApOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9yd19sb2NrcmVzOwogCkBAIC0yMTI3LDcgKzIxNTgsNyBAQAogCiAJLyogVGhpcyB3aWxsIGRpc2NhcmQgYW55IGNhY2hpbmcgaW5mb3JtYXRpb24gd2UgbWlnaHQgaGF2ZSBoYWQKIAkgKiBmb3IgdGhlIGlub2RlIG1ldGFkYXRhLiAqLwotCW9jZnMyX21ldGFkYXRhX2NhY2hlX3B1cmdlKGlub2RlKTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShJTk9ERV9DQUNIRShpbm9kZSkpOwogCiAJb2NmczJfZXh0ZW50X21hcF90cnVuYyhpbm9kZSwgMCk7CiAKQEAgLTMwMDksNiArMzA0MCw3IEBACiAJCSAgICAgInVubG9ja19hY3Rpb24gJWRcbiIsIGVycm9yLCBsb2NrcmVzLT5sX25hbWUsCiAJCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJCW1sb2dfZXhpdF92b2lkKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM0OTUsMTEgKzM1MjcsMTEgQEAKIAlyZXR1cm4gVU5CTE9DS19DT05USU5VRTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9jaGVja19tZXRhX2Rvd25jb252ZXJ0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCQkJaW50IG5ld19sZXZlbCkKK3N0YXRpYyBpbnQgb2NmczJfY2lfY2hlY2twb2ludGVkKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJIGludCBuZXdfbGV2ZWwpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG9jZnMyX2xvY2tfcmVzX2lub2RlKGxvY2tyZXMpOwotCWludCBjaGVja3BvaW50ZWQgPSBvY2ZzMl9pbm9kZV9mdWxseV9jaGVja3BvaW50ZWQoaW5vZGUpOworCWludCBjaGVja3BvaW50ZWQgPSBvY2ZzMl9jaV9mdWxseV9jaGVja3BvaW50ZWQoY2kpOwogCiAJQlVHX09OKG5ld19sZXZlbCAhPSBETE1fTE9DS19OTCAmJiBuZXdfbGV2ZWwgIT0gRExNX0xPQ0tfUFIpOwogCUJVR19PTihsb2NrcmVzLT5sX2xldmVsICE9IERMTV9MT0NLX0VYICYmICFjaGVja3BvaW50ZWQpOwpAQCAtMzUwNywxMCArMzUzOSwxOCBAQAogCWlmIChjaGVja3BvaW50ZWQpCiAJCXJldHVybiAxOwogCi0Jb2NmczJfc3RhcnRfY2hlY2twb2ludChPQ0ZTMl9TQihpbm9kZS0+aV9zYikpOworCW9jZnMyX3N0YXJ0X2NoZWNrcG9pbnQoT0NGUzJfU0Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSkpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9jZnMyX2NoZWNrX21ldGFfZG93bmNvbnZlcnQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQlpbnQgbmV3X2xldmVsKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvY2ZzMl9sb2NrX3Jlc19pbm9kZShsb2NrcmVzKTsKKworCXJldHVybiBvY2ZzMl9jaV9jaGVja3BvaW50ZWQoSU5PREVfQ0FDSEUoaW5vZGUpLCBsb2NrcmVzLCBuZXdfbGV2ZWwpOworfQorCiBzdGF0aWMgdm9pZCBvY2ZzMl9zZXRfbWV0YV9sdmIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvY2ZzMl9sb2NrX3Jlc19pbm9kZShsb2NrcmVzKTsKQEAgLTM2NDAsNiArMzY4MCwyNiBAQAogCXJldHVybiBVTkJMT0NLX0NPTlRJTlVFX1BPU1Q7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfY2hlY2tfcmVmY291bnRfZG93bmNvbnZlcnQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQkgICAgaW50IG5ld19sZXZlbCkKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSA9CisJCQkJb2NmczJfbG9ja19yZXNfcmVmY291bnRfdHJlZShsb2NrcmVzKTsKKworCXJldHVybiBvY2ZzMl9jaV9jaGVja3BvaW50ZWQoJnRyZWUtPnJmX2NpLCBsb2NrcmVzLCBuZXdfbGV2ZWwpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X2NvbnZlcnRfd29ya2VyKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkJIGludCBibG9ja2luZykKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSA9CisJCQkJb2NmczJfbG9ja19yZXNfcmVmY291bnRfdHJlZShsb2NrcmVzKTsKKworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3B1cmdlKCZ0cmVlLT5yZl9jaSk7CisKKwlyZXR1cm4gVU5CTE9DS19DT05USU5VRTsKK30KKwogc3RhdGljIHZvaWQgb2NmczJfc2V0X3FpbmZvX2x2YihzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMpCiB7CiAJc3RydWN0IG9jZnMyX3FpbmZvX2x2YiAqbHZiOwpAQCAtMzc1Miw2ICszODEyLDM3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAoraW50IG9jZnMyX3JlZmNvdW50X2xvY2soc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlLCBpbnQgZXgpCit7CisJaW50IHN0YXR1czsKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJnJlZl90cmVlLT5yZl9sb2NrcmVzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gbG9ja3Jlcy0+bF9wcml2OworCisKKwlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpKQorCQlyZXR1cm4gLUVST0ZTOworCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCXJldHVybiAwOworCisJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9sb2NrKG9zYiwgbG9ja3JlcywgbGV2ZWwsIDAsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQltbG9nX2Vycm5vKHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIG9jZnMyX3JlZmNvdW50X3VubG9jayhzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWUsIGludCBleCkKK3sKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJnJlZl90cmVlLT5yZl9sb2NrcmVzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gbG9ja3Jlcy0+bF9wcml2OworCisJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsIGxldmVsKTsKK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBwcm90b2NvbC4gIEl0IHByb3ZpZGVzIHRoZSBsb2NrIGhhbmRsaW5nCiAgKiBob29rcyBmb3IgdGhlIHVuZGVybHlpbmcgRExNLiAgSXQgaGFzIGEgbWF4aW11bSB2ZXJzaW9uIG51bWJlci4KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuaCBiL2ZzL29jZnMyL2RsbWdsdWUuaAppbmRleCA3NTUzODM2Li5kMWNlNDhlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmgKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5oCkBAIC0xMDEsNiArMTAxLDkgQEAKIHN0cnVjdCBvY2ZzMl9tZW1fZHFpbmZvOwogdm9pZCBvY2ZzMl9xaW5mb19sb2NrX3Jlc19pbml0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqaW5mbyk7Cit2b2lkIG9jZnMyX3JlZmNvdW50X2xvY2tfcmVzX2luaXQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCSAgc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCByZWZfYmxrbm8sCisJCQkJICB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbik7CiB2b2lkIG9jZnMyX2xvY2tfcmVzX2ZyZWUoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpyZXMpOwogaW50IG9jZnMyX2NyZWF0ZV9uZXdfaW5vZGVfbG9ja3Moc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgb2NmczJfZHJvcF9pbm9kZV9sb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTE0OCw2ICsxNTEsOSBAQAogdm9pZCBvY2ZzMl9maWxlX3VubG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgb2NmczJfcWluZm9fbG9jayhzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqb2luZm8sIGludCBleCk7CiB2b2lkIG9jZnMyX3FpbmZvX3VubG9jayhzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyAqb2luZm8sIGludCBleCk7CitzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZTsKK2ludCBvY2ZzMl9yZWZjb3VudF9sb2NrKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSwgaW50IGV4KTsKK3ZvaWQgb2NmczJfcmVmY291bnRfdW5sb2NrKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSwgaW50IGV4KTsKIAogCiB2b2lkIG9jZnMyX21hcmtfbG9ja3Jlc19mcmVlaW5nKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3Jlcyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmMgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKaW5kZXggZjJiYjFhMC4uODQzZGI2NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZXh0ZW50X21hcC5jCisrKyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAotCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGlub2RlLCBsYXN0X2ViX2JsaywgJmViX2JoKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksIGxhc3RfZWJfYmxrLCAmZWJfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTM1MywxMSArMzUzLDExIEBACiAgKiBlYl9iaCBpcyBOVUxMLiBPdGhlcndpc2UsIGViX2JoIHNob3VsZCBwb2ludCB0byB0aGUgZXh0ZW50IGJsb2NrCiAgKiBjb250YWluaW5nIGVsLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2ZpZ3VyZV9ob2xlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKLQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoLAotCQkJCSAgICAgIHUzMiB2X2NsdXN0ZXIsCi0JCQkJICAgICAgdTMyICpudW1fY2x1c3RlcnMpCitpbnQgb2NmczJfZmlndXJlX2hvbGVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoLAorCQkJICAgICAgIHUzMiB2X2NsdXN0ZXIsCisJCQkgICAgICAgdTMyICpudW1fY2x1c3RlcnMpCiB7CiAJaW50IHJldCwgaTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5leHRfZWJfYmggPSBOVUxMOwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJCWlmIChsZTY0X3RvX2NwdShlYi0+aF9uZXh0X2xlYWZfYmxrKSA9PSAwVUxMKQogCQkJZ290byBub19tb3JlX2V4dGVudHM7CiAKLQkJcmV0ID0gb2NmczJfcmVhZF9leHRlbnRfYmxvY2soaW5vZGUsCisJCXJldCA9IG9jZnMyX3JlYWRfZXh0ZW50X2Jsb2NrKGNpLAogCQkJCQkgICAgICBsZTY0X3RvX2NwdShlYi0+aF9uZXh0X2xlYWZfYmxrKSwKIAkJCQkJICAgICAgJm5leHRfZWJfYmgpOwogCQlpZiAocmV0KSB7CkBAIC00MjgsNyArNDI4LDggQEAKIAl0cmVlX2hlaWdodCA9IGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpOwogCiAJaWYgKHRyZWVfaGVpZ2h0ID4gMCkgewotCQlyZXQgPSBvY2ZzMl9maW5kX2xlYWYoaW5vZGUsIGVsLCB2X2NsdXN0ZXIsICZlYl9iaCk7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihJTk9ERV9DQUNIRShpbm9kZSksIGVsLCB2X2NsdXN0ZXIsCisJCQkJICAgICAgJmViX2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC00NTUsNyArNDU2LDggQEAKIAkJICogZmllbGQuCiAJCSAqLwogCQlpZiAoaG9sZV9sZW4pIHsKLQkJCXJldCA9IG9jZnMyX2ZpZ3VyZV9ob2xlX2NsdXN0ZXJzKGlub2RlLCBlbCwgZWJfYmgsCisJCQlyZXQgPSBvY2ZzMl9maWd1cmVfaG9sZV9jbHVzdGVycyhJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCQkJIGVsLCBlYl9iaCwKIAkJCQkJCQkgdl9jbHVzdGVyLCAmbGVuKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC01MzksNyArNTQxLDggQEAKIAogaW50IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgdl9jbHVzdGVyLAogCQkJICAgICB1MzIgKnBfY2x1c3RlciwgdTMyICpudW1fY2x1c3RlcnMsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwpCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCisJCQkgICAgIHVuc2lnbmVkIGludCAqZXh0ZW50X2ZsYWdzKQogewogCWludCByZXQgPSAwLCBpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOwpAQCAtNTQ4LDcgKzU1MSw4IEBACiAJdTMyIGNvZmY7CiAKIAlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgewotCQlyZXQgPSBvY2ZzMl9maW5kX2xlYWYoaW5vZGUsIGVsLCB2X2NsdXN0ZXIsICZlYl9iaCk7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihJTk9ERV9DQUNIRShpbm9kZSksIGVsLCB2X2NsdXN0ZXIsCisJCQkJICAgICAgJmViX2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC01OTAsNiArNTk0LDkgQEAKIAkJKnBfY2x1c3RlciA9ICpwX2NsdXN0ZXIgKyBjb2ZmOwogCQlpZiAobnVtX2NsdXN0ZXJzKQogCQkJKm51bV9jbHVzdGVycyA9IG9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKSAtIGNvZmY7CisKKwkJaWYgKGV4dGVudF9mbGFncykKKwkJCSpleHRlbnRfZmxhZ3MgPSByZWMtPmVfZmxhZ3M7CiAJfQogb3V0OgogCWlmIChlYl9iaCkKQEAgLTg2Miw4ICs4NjksOCBAQAogCQkJQlVHX09OKGJoc1tkb25lICsgaV0tPmJfYmxvY2tuciAhPSAocF9ibG9jayArIGkpKTsKIAkJfQogCi0JCXJjID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIHBfYmxvY2ssIGNvdW50LCBiaHMgKyBkb25lLAotCQkJCSAgICAgICBmbGFncywgdmFsaWRhdGUpOworCQlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGlub2RlKSwgcF9ibG9jaywgY291bnQsCisJCQkJICAgICAgIGJocyArIGRvbmUsIGZsYWdzLCB2YWxpZGF0ZSk7CiAJCWlmIChyYykgewogCQkJbWxvZ19lcnJubyhyYyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4dGVudF9tYXAuaCBiL2ZzL29jZnMyL2V4dGVudF9tYXAuaAppbmRleCBiN2RkOTczLi5lNzlkNDFjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmgKKysrIGIvZnMvb2NmczIvZXh0ZW50X21hcC5oCkBAIC01NSwxMiArNTUsMTggQEAKIAogaW50IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgdl9jbHVzdGVyLAogCQkJICAgICB1MzIgKnBfY2x1c3RlciwgdTMyICpudW1fY2x1c3RlcnMsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwpOworCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKmV4dGVudF9mbGFncyk7CiAKIGludCBvY2ZzMl9yZWFkX3ZpcnRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2X2Jsb2NrLCBpbnQgbnIsCiAJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdLCBpbnQgZmxhZ3MsCiAJCQkgICBpbnQgKCp2YWxpZGF0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkpOworaW50IG9jZnMyX2ZpZ3VyZV9ob2xlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCisJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCwKKwkJCSAgICAgICB1MzIgdl9jbHVzdGVyLAorCQkJICAgICAgIHUzMiAqbnVtX2NsdXN0ZXJzKTsKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlYWRfdmlydF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgdl9ibG9jaywKIAkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsCiAJCQkJCWludCAoKnZhbGlkYXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IDIyMWM1ZTkuLjg5ZmM4ZWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJ4YXR0ci5oIgogI2luY2x1ZGUgImFjbC5oIgogI2luY2x1ZGUgInF1b3RhLmgiCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC0yNTksNyArMjYwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGJoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMzNCw2ICszMzUsMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG9jZnMyX2Nvd19maWxlX3BvcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCSAgICAgIHU2NCBvZmZzZXQpCit7CisJaW50IHN0YXR1czsKKwl1MzIgcGh5cywgY3BvcyA9IG9mZnNldCA+PiBPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPnNfY2x1c3RlcnNpemVfYml0czsKKwl1bnNpZ25lZCBpbnQgbnVtX2NsdXN0ZXJzID0gMDsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzID0gMDsKKworCS8qCisJICogSWYgdGhlIG5ldyBvZmZzZXQgaXMgYWxpZ25lZCB0byB0aGUgcmFuZ2Ugb2YgdGhlIGNsdXN0ZXIsIHRoZXJlIGlzCisJICogbm8gc3BhY2UgZm9yIG9jZnMyX3plcm9fcmFuZ2VfZm9yX3RydW5jYXRlIHRvIGZpbGwsIHNvIG5vIG5lZWQgdG8KKwkgKiBDb1cgZWl0aGVyLgorCSAqLworCWlmICgob2Zmc2V0ICYgKE9DRlMyX1NCKGlub2RlLT5pX3NiKS0+c19jbHVzdGVyc2l6ZSAtIDEpKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IG9jZnMyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBoeXMsCisJCQkJICAgICZudW1fY2x1c3RlcnMsICZleHRfZmxhZ3MpOworCWlmIChzdGF0dXMpIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpCisJCWdvdG8gb3V0OworCisJcmV0dXJuIG9jZnMyX3JlZmNvdW50X2Nvdyhpbm9kZSwgZmVfYmgsIGNwb3MsIDEsIGNwb3MrMSk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgaW50IG9jZnMyX29ycGhhbl9mb3JfdHJ1bmNhdGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKQEAgLTM0Niw2ICszODAsMTcgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCisJLyoKKwkgKiBXZSBuZWVkIHRvIENvVyB0aGUgY2x1c3RlciBjb250YWlucyB0aGUgb2Zmc2V0IGlmIGl0IGlzIHJlZmxpbmtlZAorCSAqIHNpbmNlIHdlIHdpbGwgY2FsbCBvY2ZzMl96ZXJvX3JhbmdlX2Zvcl90cnVuY2F0ZSBsYXRlciB3aGljaCB3aWxsCisJICogd3JpdGUgIjAiIGZyb20gb2Zmc2V0IHRvIHRoZSBlbmQgb2YgdGhlIGNsdXN0ZXIuCisJICovCisJc3RhdHVzID0gb2NmczJfY293X2ZpbGVfcG9zKGlub2RlLCBmZV9iaCwgbmV3X2lfc2l6ZSk7CisJaWYgKHN0YXR1cykgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCiAJLyogVE9ETzogVGhpcyBuZWVkcyB0byBhY3R1YWxseSBvcnBoYW4gdGhlIGlub2RlIGluIHRoaXMKIAkgKiB0cmFuc2FjdGlvbi4gKi8KIApAQCAtMzU2LDcgKzQwMSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGZlX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBmZV9iaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00ODYsNiArNTMxLDggQEAKIAl1cF93cml0ZSgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7CiAKIGJhaWw6CisJaWYgKCFzdGF0dXMgJiYgT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzID09IDApCisJCXN0YXR1cyA9IG9jZnMyX3RyeV9yZW1vdmVfcmVmY291bnRfdHJlZShpbm9kZSwgZGlfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTUxNSwxMSArNTYyLDEwIEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CiAKLQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCBmZV9iaCk7Ci0JcmV0ID0gb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKG9zYiwgaW5vZGUsIGxvZ2ljYWxfb2Zmc2V0LAotCQkJCQkgICBjbHVzdGVyc190b19hZGQsIG1hcmtfdW53cml0dGVuLAotCQkJCQkgICAmZXQsIGhhbmRsZSwKLQkJCQkJICAgZGF0YV9hYywgbWV0YV9hYywgcmVhc29uX3JldCk7CisJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksIGZlX2JoKTsKKwlyZXQgPSBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoaGFuZGxlLCAmZXQsIGxvZ2ljYWxfb2Zmc2V0LAorCQkJCQkgIGNsdXN0ZXJzX3RvX2FkZCwgbWFya191bndyaXR0ZW4sCisJCQkJCSAgZGF0YV9hYywgbWV0YV9hYywgcmVhc29uX3JldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTY0LDcgKzYxMCw3IEBACiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKIAkgICAgIChsb25nIGxvbmcpaV9zaXplX3JlYWQoaW5vZGUpLCBsZTMyX3RvX2NwdShmZS0+aV9jbHVzdGVycyksCiAJICAgICBjbHVzdGVyc190b19hZGQpOwotCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIGJoKTsKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgYmgpOwogCXN0YXR1cyA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LCBjbHVzdGVyc190b19hZGQsIDAsCiAJCQkJICAgICAgICZkYXRhX2FjLCAmbWV0YV9hYyk7CiAJaWYgKHN0YXR1cykgewpAQCAtNTkzLDcgKzYzOSw3IEBACiAJLyogcmVzZXJ2ZSBhIHdyaXRlIHRvIHRoZSBmaWxlIGVudHJ5IGVhcmx5IG9uIC0gdGhhdCB3ZSBpZiB3ZQogCSAqIHJ1biBvdXQgb2YgY3JlZGl0cyBpbiB0aGUgYWxsb2NhdGlvbiBwYXRoLCB3ZSBjYW4gc3RpbGwKIAkgKiB1cGRhdGUgaV9zaXplLiAqLwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGJoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBiaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMTMxLDcgKzExNzcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCBiaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTEzOTUsNyArMTQ0MSw3IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAotCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIGRpX2JoKTsKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOwogCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZkZWFsbG9jKTsKIAogCWlmIChieXRlX2xlbiA9PSAwKQpAQCAtMTY1Nyw2ICsxNzAzLDcwIEBACiAJCQkJCSBPQ0ZTMl9JT0NfUkVTVlNQNjQsICZzciwgY2hhbmdlX3NpemUpOwogfQogCitpbnQgb2NmczJfY2hlY2tfcmFuZ2VfZm9yX3JlZmNvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsCisJCQkJICAgc2l6ZV90IGNvdW50KQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBleHRlbnRfZmxhZ3M7CisJdTMyIGNwb3MsIGNsdXN0ZXJzLCBleHRlbnRfbGVuLCBwaHlzX2Nwb3M7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCisJaWYgKCFvY2ZzMl9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkgfHwKKwkgICAgIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSkKKwkJcmV0dXJuIDA7CisKKwljcG9zID0gcG9zID4+IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzOworCWNsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKHNiLCBwb3MgKyBjb3VudCkgLSBjcG9zOworCisJd2hpbGUgKGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBoeXNfY3BvcywgJmV4dGVudF9sZW4sCisJCQkJCSAmZXh0ZW50X2ZsYWdzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHBoeXNfY3BvcyAmJiAoZXh0ZW50X2ZsYWdzICYgT0NGUzJfRVhUX1JFRkNPVU5URUQpKSB7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXh0ZW50X2xlbiA+IGNsdXN0ZXJzKQorCQkJZXh0ZW50X2xlbiA9IGNsdXN0ZXJzOworCisJCWNsdXN0ZXJzIC09IGV4dGVudF9sZW47CisJCWNwb3MgKz0gZXh0ZW50X2xlbjsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX2lub2RlX2Zvcl9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50LAorCQkJCQkgICAgaW50ICptZXRhX2xldmVsKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJdTMyIGNwb3MgPSBwb3MgPj4gT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHM7CisJdTMyIGNsdXN0ZXJzID0KKwkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGlub2RlLT5pX3NiLCBwb3MgKyBjb3VudCkgLSBjcG9zOworCisJcmV0ID0gb2NmczJfaW5vZGVfbG9jayhpbm9kZSwgJmRpX2JoLCAxKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJKm1ldGFfbGV2ZWwgPSAxOworCisJcmV0ID0gb2NmczJfcmVmY291bnRfY293KGlub2RlLCBkaV9iaCwgY3BvcywgY2x1c3RlcnMsIFVJTlRfTUFYKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CitvdXQ6CisJYnJlbHNlKGRpX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG9jZnMyX3ByZXBhcmVfaW5vZGVfZm9yX3dyaXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkJIGxvZmZfdCAqcHBvcywKIAkJCQkJIHNpemVfdCBjb3VudCwKQEAgLTE3MTMsNiArMTgyMywyMiBAQAogCiAJCWVuZCA9IHNhdmVkX3BvcyArIGNvdW50OwogCisJCXJldCA9IG9jZnMyX2NoZWNrX3JhbmdlX2Zvcl9yZWZjb3VudChpbm9kZSwgc2F2ZWRfcG9zLCBjb3VudCk7CisJCWlmIChyZXQgPT0gMSkgeworCQkJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCBtZXRhX2xldmVsKTsKKwkJCW1ldGFfbGV2ZWwgPSAtMTsKKworCQkJcmV0ID0gb2NmczJfcHJlcGFyZV9pbm9kZV9mb3JfcmVmY291bnQoaW5vZGUsCisJCQkJCQkJICAgICAgIHNhdmVkX3BvcywKKwkJCQkJCQkgICAgICAgY291bnQsCisJCQkJCQkJICAgICAgICZtZXRhX2xldmVsKTsKKwkJfQorCisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwogCQkvKgogCQkgKiBTa2lwIHRoZSBPX0RJUkVDVCBjaGVja3MgaWYgd2UgZG9uJ3QgbmVlZAogCQkgKiB0aGVtLgpAQCAtMTc1OSw3ICsxODg1LDggQEAKIAkJKnBwb3MgPSBzYXZlZF9wb3M7CiAKIG91dF91bmxvY2s6Ci0Jb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCBtZXRhX2xldmVsKTsKKwlpZiAobWV0YV9sZXZlbCA+PSAwKQorCQlvY2ZzMl9pbm9kZV91bmxvY2soaW5vZGUsIG1ldGFfbGV2ZWwpOwogCiBvdXQ6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuaCBiL2ZzL29jZnMyL2ZpbGUuaAppbmRleCAxNzJmOWZiLi5kNjZjZjRmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmgKKysrIGIvZnMvb2NmczIvZmlsZS5oCkBAIC02OSw0ICs2OSw2IEBACiBpbnQgb2NmczJfY2hhbmdlX2ZpbGVfc3BhY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YgKnNyKTsKIAoraW50IG9jZnMyX2NoZWNrX3JhbmdlX2Zvcl9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAorCQkJCSAgIHNpemVfdCBjb3VudCk7CiAjZW5kaWYgLyogT0NGUzJfRklMRV9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5jIGIvZnMvb2NmczIvaW5vZGUuYwppbmRleCA0ZGM4ODkwLi4wMjk3ZmI4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5jCisrKyBiL2ZzL29jZnMyL2lub2RlLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgorI2luY2x1ZGUgInJlZmNvdW50dHJlZS5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIApAQCAtNTYyLDcgKzU2Myw4IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGZlX2JoLAorCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwKKwkJCQkJCSBmZV9iaCwKIAkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NDYsNyArNjQ4LDcgQEAKIAl9CiAKIAkvKiBzZXQgdGhlIGlub2RlcyBkdGltZSAqLwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NjIsNyArNjY0LDcgQEAKIAkJZ290byBiYWlsX2NvbW1pdDsKIAl9CiAKLQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShpbm9kZSwgZGlfYmgpOworCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOwogCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKIAogCXN0YXR1cyA9IG9jZnMyX2ZyZWVfZGlub2RlKGhhbmRsZSwgaW5vZGVfYWxsb2NfaW5vZGUsCkBAIC03ODEsNiArNzgzLDEyIEBACiAJCWdvdG8gYmFpbF91bmxvY2tfZGlyOwogCX0KIAorCXN0YXR1cyA9IG9jZnMyX3JlbW92ZV9yZWZjb3VudF90cmVlKGlub2RlLCBkaV9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGJhaWxfdW5sb2NrX2RpcjsKKwl9CisKIAlzdGF0dXMgPSBvY2ZzMl9yZW1vdmVfaW5vZGUoaW5vZGUsIGRpX2JoLCBvcnBoYW5fZGlyX2lub2RlLAogCQkJCSAgICBvcnBoYW5fZGlyX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkKQEAgLTExMTIsMTMgKzExMjAsMTQgQEAKIAlvY2ZzMl9sb2NrX3Jlc19mcmVlKCZvaS0+aXBfaW5vZGVfbG9ja3Jlcyk7CiAJb2NmczJfbG9ja19yZXNfZnJlZSgmb2ktPmlwX29wZW5fbG9ja3Jlcyk7CiAKLQlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShpbm9kZSk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfZXhpdChJTk9ERV9DQUNIRShpbm9kZSkpOwogCi0JbWxvZ19idWdfb25fbXNnKG9pLT5pcF9tZXRhZGF0YV9jYWNoZS5jaV9udW1fY2FjaGVkLAorCW1sb2dfYnVnX29uX21zZyhJTk9ERV9DQUNIRShpbm9kZSktPmNpX251bV9jYWNoZWQsCiAJCQkiQ2xlYXIgaW5vZGUgb2YgJWxsdSwgaW5vZGUgaGFzICV1IGNhY2hlIGl0ZW1zXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sIG9pLT5pcF9tZXRhZGF0YV9jYWNoZS5jaV9udW1fY2FjaGVkKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2ktPmlwX2Jsa25vLAorCQkJSU5PREVfQ0FDSEUoaW5vZGUpLT5jaV9udW1fY2FjaGVkKTsKIAotCW1sb2dfYnVnX29uX21zZyghKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSksCisJbWxvZ19idWdfb25fbXNnKCEoSU5PREVfQ0FDSEUoaW5vZGUpLT5jaV9mbGFncyAmIE9DRlMyX0NBQ0hFX0ZMX0lOTElORSksCiAJCQkiQ2xlYXIgaW5vZGUgb2YgJWxsdSwgaW5vZGUgaGFzIGEgYmFkIGZsYWdcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubyk7CiAKQEAgLTExNDUsOSArMTE1NCw3IEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywgb2ktPmlwX29wZW5fY291bnQpOwogCiAJLyogQ2xlYXIgYWxsIG90aGVyIGZsYWdzLiAqLwotCW9pLT5pcF9mbGFncyA9IE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORTsKLQlvaS0+aXBfY3JlYXRlZF90cmFucyA9IDA7Ci0Jb2ktPmlwX2xhc3RfdHJhbnMgPSAwOworCW9pLT5pcF9mbGFncyA9IDA7CiAJb2ktPmlwX2Rpcl9zdGFydF9sb29rdXAgPSAwOwogCW9pLT5pcF9ibGtubyA9IDBVTEw7CiAKQEAgLTEyMzksNyArMTI0Niw3IEBACiAJbWxvZ19lbnRyeSgiKGlub2RlICVsbHUpXG4iLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCBiaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTM4MCw4ICsxMzg3LDggQEAKIAlpbnQgcmM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7CiAKLQlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIDEsICZ0bXAsCi0JCQkgICAgICAgZmxhZ3MsIG9jZnMyX3ZhbGlkYXRlX2lub2RlX2Jsb2NrKTsKKwlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGlub2RlKSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJICAgICAgIDEsICZ0bXAsIGZsYWdzLCBvY2ZzMl92YWxpZGF0ZV9pbm9kZV9ibG9jayk7CiAKIAkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrcygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KIAlpZiAoIXJjICYmICEqYmgpCkBAIC0xMzk0LDMgKzE0MDEsNTYgQEAKIHsKIAlyZXR1cm4gb2NmczJfcmVhZF9pbm9kZV9ibG9ja19mdWxsKGlub2RlLCBiaCwgMCk7CiB9CisKKworc3RhdGljIHU2NCBvY2ZzMl9pbm9kZV9jYWNoZV9vd25lcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCXJldHVybiBvaS0+aXBfYmxrbm87Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9jZnMyX2lub2RlX2NhY2hlX2dldF9zdXBlcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCXJldHVybiBvaS0+dmZzX2lub2RlLmlfc2I7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2lub2RlX2NhY2hlX2xvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gY2FjaGVfaW5mb190b19pbm9kZShjaSk7CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfaW5vZGVfY2FjaGVfdW5sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IGNhY2hlX2luZm9fdG9faW5vZGUoY2kpOworCisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfaW5vZGVfY2FjaGVfaW9fbG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCW11dGV4X2xvY2soJm9pLT5pcF9pb19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2lub2RlX2NhY2hlX2lvX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBjYWNoZV9pbmZvX3RvX2lub2RlKGNpKTsKKworCW11dGV4X3VubG9jaygmb2ktPmlwX2lvX211dGV4KTsKK30KKworY29uc3Qgc3RydWN0IG9jZnMyX2NhY2hpbmdfb3BlcmF0aW9ucyBvY2ZzMl9pbm9kZV9jYWNoaW5nX29wcyA9IHsKKwkuY29fb3duZXIJCT0gb2NmczJfaW5vZGVfY2FjaGVfb3duZXIsCisJLmNvX2dldF9zdXBlcgkJPSBvY2ZzMl9pbm9kZV9jYWNoZV9nZXRfc3VwZXIsCisJLmNvX2NhY2hlX2xvY2sJCT0gb2NmczJfaW5vZGVfY2FjaGVfbG9jaywKKwkuY29fY2FjaGVfdW5sb2NrCT0gb2NmczJfaW5vZGVfY2FjaGVfdW5sb2NrLAorCS5jb19pb19sb2NrCQk9IG9jZnMyX2lub2RlX2NhY2hlX2lvX2xvY2ssCisJLmNvX2lvX3VubG9jawkJPSBvY2ZzMl9pbm9kZV9jYWNoZV9pb191bmxvY2ssCit9OworCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5oIGIvZnMvb2NmczIvaW5vZGUuaAppbmRleCBlYTcxNTI1Li5iYTRmZTA3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5oCisrKyBiL2ZzL29jZnMyL2lub2RlLmgKQEAgLTYwLDEyICs2MCw2IEBACiAKIAl1MzIJCQkJaXBfZGlyX3N0YXJ0X2xvb2t1cDsKIAotCS8qIG5leHQgdHdvIGFyZSBwcm90ZWN0ZWQgYnkgdHJhbnNfaW5jX2xvY2sgKi8KLQkvKiB3aGljaCB0cmFuc2FjdGlvbiB3ZXJlIHdlIGNyZWF0ZWQgb24/IFplcm8gaWYgbm9uZS4gKi8KLQl1bnNpZ25lZCBsb25nCQkJaXBfY3JlYXRlZF90cmFuczsKLQkvKiBsYXN0IHRyYW5zYWN0aW9uIHdlIHdlcmUgYSBwYXJ0IG9mLiAqLwotCXVuc2lnbmVkIGxvbmcJCQlpcF9sYXN0X3RyYW5zOwotCiAJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbwlpcF9tZXRhZGF0YV9jYWNoZTsKIAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbWFwCQlpcF9leHRlbnRfbWFwOwpAQCAtMTA2LDggKzEwMCw2IEBACiAjZGVmaW5lIE9DRlMyX0lOT0RFX01BWUJFX09SUEhBTkVECTB4MDAwMDAwMjAKIC8qIERvZXMgc29tZW9uZSBoYXZlIHRoZSBmaWxlIG9wZW4gT19ESVJFQ1QgKi8KICNkZWZpbmUgT0NGUzJfSU5PREVfT1BFTl9ESVJFQ1QJCTB4MDAwMDAwNDAKLS8qIEluZGljYXRlcyB0aGF0IHRoZSBtZXRhZGF0YSBjYWNoZSBzaG91bGQgYmUgdXNlZCBhcyBhbiBhcnJheS4gKi8KLSNkZWZpbmUgT0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FCTB4MDAwMDAwODAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqT0NGUzJfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMTIwLDYgKzExMiwxMiBAQAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpvY2ZzMl9pbm9kZV9jYWNoZTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zIG9jZnMyX2lub2RlX2NhY2hpbmdfb3BzOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKklOT0RFX0NBQ0hFKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuICZPQ0ZTMl9JKGlub2RlKS0+aXBfbWV0YWRhdGFfY2FjaGU7Cit9CiAKIHZvaWQgb2NmczJfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG9jZnMyX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTE3Miw0ICsxNzAsMTAgQEAKIC8qIFRoZSBzYW1lLCBidXQgY2FuIGJlIHBhc3NlZCBPQ0ZTMl9CSF8qIGZsYWdzICovCiBpbnQgb2NmczJfcmVhZF9pbm9kZV9ibG9ja19mdWxsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAogCQkJCWludCBmbGFncyk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKmNhY2hlX2luZm9fdG9faW5vZGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaSwgc3RydWN0IG9jZnMyX2lub2RlX2luZm8sIGlwX21ldGFkYXRhX2NhY2hlKTsKK30KKwogI2VuZGlmIC8qIE9DRlMyX0lOT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lvY3RsLmMgYi9mcy9vY2ZzMi9pb2N0bC5jCmluZGV4IDQ2N2I0MTMuLjMxZmJiMDYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lvY3RsLmMKKysrIGIvZnMvb2NmczIvaW9jdGwuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIm9jZnMyX2ZzLmgiCiAjaW5jbHVkZSAiaW9jdGwuaCIKICNpbmNsdWRlICJyZXNpemUuaCIKKyNpbmNsdWRlICJyZWZjb3VudHRyZWUuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KIApAQCAtMTE1LDYgKzExNiw5IEBACiAJaW50IHN0YXR1czsKIAlzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdiBzcjsKIAlzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0IGlucHV0OworCXN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cyBhcmdzOworCWNvbnN0IGNoYXIgKm9sZF9wYXRoLCAqbmV3X3BhdGg7CisJYm9vbCBwcmVzZXJ2ZTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBPQ0ZTMl9JT0NfR0VURkxBR1M6CkBAIC0xNjAsNiArMTY0LDE1IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZXR1cm4gb2NmczJfZ3JvdXBfYWRkKGlub2RlLCAmaW5wdXQpOworCWNhc2UgT0NGUzJfSU9DX1JFRkxJTks6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgKHN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cyAqKWFyZywKKwkJCQkgICBzaXplb2YoYXJncykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCW9sZF9wYXRoID0gKGNvbnN0IGNoYXIgKikodW5zaWduZWQgbG9uZylhcmdzLm9sZF9wYXRoOworCQluZXdfcGF0aCA9IChjb25zdCBjaGFyICopKHVuc2lnbmVkIGxvbmcpYXJncy5uZXdfcGF0aDsKKwkJcHJlc2VydmUgPSAoYXJncy5wcmVzZXJ2ZSAhPSAwKTsKKworCQlyZXR1cm4gb2NmczJfcmVmbGlua19pb2N0bChpbm9kZSwgb2xkX3BhdGgsIG5ld19wYXRoLCBwcmVzZXJ2ZSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpAQCAtMTgyLDYgKzE5NSw3IEBACiAJY2FzZSBPQ0ZTMl9JT0NfR1JPVVBfRVhURU5EOgogCWNhc2UgT0NGUzJfSU9DX0dST1VQX0FERDoKIAljYXNlIE9DRlMyX0lPQ19HUk9VUF9BREQ2NDoKKwljYXNlIE9DRlMyX0lPQ19SRUZMSU5LOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGM0OGI5M2EuLjU0YzE2YjYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJzbG90X21hcC5oIgogI2luY2x1ZGUgInN1cGVyLmgiCiAjaW5jbHVkZSAic3lzZmlsZS5oIgorI2luY2x1ZGUgInVwdG9kYXRlLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCkBAIC01NTQsNiArNTU1LDE0IEBACiAJLm90X29mZnNldAk9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2ssIGhfY2hlY2spLAogfTsKIAorc3RhdGljIHN0cnVjdCBvY2ZzMl90cmlnZ2VycyByYl90cmlnZ2VycyA9IHsKKwkub3RfdHJpZ2dlcnMgPSB7CisJCS50X2NvbW1pdCA9IG9jZnMyX2NvbW1pdF90cmlnZ2VyLAorCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCisJfSwKKwkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9jaGVjayksCit9OworCiBzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGdkX3RyaWdnZXJzID0gewogCS5vdF90cmlnZ2VycyA9IHsKIAkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCkBAIC02MDEsMTQgKzYxMCwxNiBAQAogfTsKIAogc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgc3RydWN0IG9jZnMyX3RyaWdnZXJzICp0cmlnZ2VycywKIAkJCQkgIGludCB0eXBlKQogewogCWludCBzdGF0dXM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPQorCQlPQ0ZTMl9TQihvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpKTsKIAotCUJVR19PTighaW5vZGUpOworCUJVR19PTighY2kgfHwgIWNpLT5jaV9vcHMpOwogCUJVR19PTighaGFuZGxlKTsKIAlCVUdfT04oIWJoKTsKIApAQCAtNjI3LDE1ICs2MzgsMTUgQEAKIAkJQlVHKCk7CiAJfQogCi0JLyogU2V0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGluZm9ybWF0aW9uIG9uIHRoZSBpbm9kZSBzbworCS8qIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBvbiB0aGUgY2kgc28KIAkgKiB0aGF0IHRoZSBsb2NraW5nIGNvZGUga25vd3Mgd2hldGhlciBpdCBjYW4gZHJvcCBpdCdzIGxvY2tzCi0JICogb24gdGhpcyBpbm9kZSBvciBub3QuIFdlJ3JlIHByb3RlY3RlZCBmcm9tIHRoZSBjb21taXQKKwkgKiBvbiB0aGlzIGNpIG9yIG5vdC4gV2UncmUgcHJvdGVjdGVkIGZyb20gdGhlIGNvbW1pdAogCSAqIHRocmVhZCB1cGRhdGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpZCB1bnRpbAogCSAqIG9jZnMyX2NvbW1pdF90cmFucygpIGJlY2F1c2Ugb2NmczJfc3RhcnRfdHJhbnMoKSB0b29rCiAJICogal90cmFuc19iYXJyaWVyIGZvciB1cy4gKi8KLQlvY2ZzMl9zZXRfaW5vZGVfbG9ja190cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPmpvdXJuYWwsIGlub2RlKTsKKwlvY2ZzMl9zZXRfY2lfbG9ja190cmFucyhvc2ItPmpvdXJuYWwsIGNpKTsKIAotCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhjaSk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEU6CiAJY2FzZSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURToKQEAgLTY1MCw5ICs2NjEsOSBAQAogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQltbG9nKE1MX0VSUk9SLCAiVWtub3duIGFjY2VzcyB0eXBlIVxuIik7CiAJfQotCWlmICghc3RhdHVzICYmIG9jZnMyX21ldGFfZWNjKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkgJiYgdHJpZ2dlcnMpCisJaWYgKCFzdGF0dXMgJiYgb2NmczJfbWV0YV9lY2Mob3NiKSAmJiB0cmlnZ2VycykKIAkJamJkMl9qb3VybmFsX3NldF90cmlnZ2VycyhiaCwgJnRyaWdnZXJzLT5vdF90cmlnZ2Vycyk7Ci0JbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhjaSk7CiAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZyhNTF9FUlJPUiwgIkVycm9yICVkIGdldHRpbmcgJWQgYWNjZXNzIHRvIGJ1ZmZlciFcbiIsCkBAIC02NjIsNjYgKzY3Myw2NSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQotewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZGlfdHJpZ2dlcnMsCi0JCQkJICAgICAgdHlwZSk7Ci19Ci0KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZWJfdHJpZ2dlcnMsCi0JCQkJICAgICAgdHlwZSk7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZkaV90cmlnZ2VycywgdHlwZSk7CiB9CiAKLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZ2RfdHJpZ2dlcnMsCi0JCQkJICAgICAgdHlwZSk7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZlYl90cmlnZ2VycywgdHlwZSk7CiB9CiAKLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZGJfdHJpZ2dlcnMsCisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZyYl90cmlnZ2VycywKIAkJCQkgICAgICB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZ4Yl90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmdkX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkcV90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmRiX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkcl90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJnhiX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7Ci0JcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkbF90cmlnZ2VycywKLQkJCQkgICAgICB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmRxX3RyaWdnZXJzLCB0eXBlKTsKIH0KIAotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCit7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBjaSwgYmgsICZkcl90cmlnZ2VycywgdHlwZSk7Cit9CisKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgJmRsX3RyaWdnZXJzLCB0eXBlKTsKK30KKworaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewotCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCBOVUxMLCB0eXBlKTsKKwlyZXR1cm4gX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGNpLCBiaCwgTlVMTCwgdHlwZSk7CiB9CiAKIGludCBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZV90ICpoYW5kbGUsCkBAIC04OTgsNyArOTA4LDcgQEAKIAkJb2NmczJfYnVtcF9yZWNvdmVyeV9nZW5lcmF0aW9uKGZlKTsKIAogCW9jZnMyX2NvbXB1dGVfbWV0YV9lY2Mob3NiLT5zYiwgYmgtPmJfZGF0YSwgJmZlLT5pX2NoZWNrKTsKLQlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGJoLCBqb3VybmFsLT5qX2lub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGJoLCBJTk9ERV9DQUNIRShqb3VybmFsLT5qX2lub2RlKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIApAQCAtMTY0Miw3ICsxNjUyLDcgQEAKIAkJCQkJb2NmczJfZ2V0X3JlY292ZXJ5X2dlbmVyYXRpb24oZmUpOwogCiAJb2NmczJfY29tcHV0ZV9tZXRhX2VjYyhvc2ItPnNiLCBiaC0+Yl9kYXRhLCAmZmUtPmlfY2hlY2spOwotCXN0YXR1cyA9IG9jZnMyX3dyaXRlX2Jsb2NrKG9zYiwgYmgsIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGJoLCBJTk9ERV9DQUNIRShpbm9kZSkpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCAyYzMyMjJhLi4zZjc0ZTA5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC05MCw1NiArOTAsNjYgQEAKIAlyZXR1cm4gb2xkX2lkOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2V0X2lub2RlX2xvY2tfdHJhbnMoc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwsCi0JCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2V0X2NpX2xvY2tfdHJhbnMoc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQogewogCXNwaW5fbG9jaygmdHJhbnNfaW5jX2xvY2spOwotCU9DRlMyX0koaW5vZGUpLT5pcF9sYXN0X3RyYW5zID0gam91cm5hbC0+al90cmFuc19pZDsKKwljaS0+Y2lfbGFzdF90cmFucyA9IGpvdXJuYWwtPmpfdHJhbnNfaWQ7CiAJc3Bpbl91bmxvY2soJnRyYW5zX2luY19sb2NrKTsKIH0KIAogLyogVXNlZCB0byBmaWd1cmUgb3V0IHdoZXRoZXIgaXQncyBzYWZlIHRvIGRyb3AgYSBtZXRhZGF0YSBsb2NrIG9uIGFuCi0gKiBpbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFsbCB0aGUgaW5vZGVzIGNoYW5nZXMgaGF2ZSBiZWVuCisgKiBjYWNoZWQgb2JqZWN0LiBSZXR1cm5zIHRydWUgaWYgYWxsIHRoZSBvYmplY3QncyBjaGFuZ2VzIGhhdmUgYmVlbgogICogY2hlY2twb2ludGVkIHRvIGRpc2suIFlvdSBzaG91bGQgYmUgaG9sZGluZyB0aGUgc3BpbmxvY2sgb24gdGhlCiAgKiBtZXRhZGF0YSBsb2NrIHdoaWxlIGNhbGxpbmcgdGhpcyB0byBiZSBzdXJlIHRoYXQgbm9ib2R5IGNhbiB0YWtlCiAgKiB0aGUgbG9jayBhbmQgcHV0IGl0IG9uIGFub3RoZXIgdHJhbnNhY3Rpb24uICovCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pbm9kZV9mdWxseV9jaGVja3BvaW50ZWQoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NpX2Z1bGx5X2NoZWNrcG9pbnRlZChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBvY2ZzMl9qb3VybmFsICpqb3VybmFsID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5qb3VybmFsOworCXN0cnVjdCBvY2ZzMl9qb3VybmFsICpqb3VybmFsID0KKwkJT0NGUzJfU0Iob2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKSktPmpvdXJuYWw7CiAKIAlzcGluX2xvY2soJnRyYW5zX2luY19sb2NrKTsKLQlyZXQgPSB0aW1lX2FmdGVyKGpvdXJuYWwtPmpfdHJhbnNfaWQsIE9DRlMyX0koaW5vZGUpLT5pcF9sYXN0X3RyYW5zKTsKKwlyZXQgPSB0aW1lX2FmdGVyKGpvdXJuYWwtPmpfdHJhbnNfaWQsIGNpLT5jaV9sYXN0X3RyYW5zKTsKIAlzcGluX3VubG9jaygmdHJhbnNfaW5jX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKLS8qIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFuIGlub2RlIGlzIHN0aWxsIG5ldyAoaGFzIG5ldmVyCi0gKiBoaXQgZGlzaykgV2lsbCBkbyB5b3UgYSBmYXZvciBhbmQgc2V0IGNyZWF0ZWRfdHJhbnMgPSAwIHdoZW4geW91J3ZlCi0gKiBiZWVuIGNoZWNrcG9pbnRlZC4gIHJldHVybnMgJzEnIGlmIHRoZSBpbm9kZSBpcyBzdGlsbCBuZXcuICovCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pbm9kZV9pc19uZXcoc3RydWN0IGlub2RlICppbm9kZSkKKy8qIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBiYWNrZWQgYnkgc3RydWN0CisgKiBvY2ZzMl9jYWNoaW5nX2luZm8gIGlzIHN0aWxsIG5ldyAoaGFzIG5ldmVyIGhpdCBkaXNrKSBXaWxsIGRvIHlvdSBhCisgKiBmYXZvciBhbmQgc2V0IGNyZWF0ZWRfdHJhbnMgPSAwIHdoZW4geW91J3ZlCisgKiBiZWVuIGNoZWNrcG9pbnRlZC4gIHJldHVybnMgJzEnIGlmIHRoZSBjaSBpcyBzdGlsbCBuZXcuICovCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jaV9pc19uZXcoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfam91cm5hbCAqam91cm5hbCA9CisJCU9DRlMyX1NCKG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSkpLT5qb3VybmFsOwogCisJc3Bpbl9sb2NrKCZ0cmFuc19pbmNfbG9jayk7CisJcmV0ID0gISh0aW1lX2FmdGVyKGpvdXJuYWwtPmpfdHJhbnNfaWQsIGNpLT5jaV9jcmVhdGVkX3RyYW5zKSk7CisJaWYgKCFyZXQpCisJCWNpLT5jaV9jcmVhdGVkX3RyYW5zID0gMDsKKwlzcGluX3VubG9jaygmdHJhbnNfaW5jX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qIFdyYXBwZXIgZm9yIGlub2RlcyBzbyB3ZSBjYW4gY2hlY2sgc3lzdGVtIGZpbGVzICovCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pbm9kZV9pc19uZXcoc3RydWN0IGlub2RlICppbm9kZSkKK3sKIAkvKiBTeXN0ZW0gZmlsZXMgYXJlIG5ldmVyICJuZXciIGFzIHRoZXkncmUgd3JpdHRlbiBvdXQgYnkKIAkgKiBta2ZzLiBUaGlzIGhlbHBzIHVzIGVhcmx5IGR1cmluZyBtb3VudCwgYmVmb3JlIHdlIGhhdmUgdGhlCiAJICogam91cm5hbCBvcGVuIGFuZCBqX3RyYW5zX2lkIGNvdWxkIGJlIGp1bmsuICovCiAJaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX1NZU1RFTV9GSUxFKQogCQlyZXR1cm4gMDsKLQlzcGluX2xvY2soJnRyYW5zX2luY19sb2NrKTsKLQlyZXQgPSAhKHRpbWVfYWZ0ZXIoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5qb3VybmFsLT5qX3RyYW5zX2lkLAotCQkJICAgT0NGUzJfSShpbm9kZSktPmlwX2NyZWF0ZWRfdHJhbnMpKTsKLQlpZiAoIXJldCkKLQkJT0NGUzJfSShpbm9kZSktPmlwX2NyZWF0ZWRfdHJhbnMgPSAwOwotCXNwaW5fdW5sb2NrKCZ0cmFuc19pbmNfbG9jayk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiBvY2ZzMl9jaV9pc19uZXcoSU5PREVfQ0FDSEUoaW5vZGUpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2lub2RlX3NldF9uZXcoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfY2lfc2V0X25ldyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCiB7CiAJc3Bpbl9sb2NrKCZ0cmFuc19pbmNfbG9jayk7Ci0JT0NGUzJfSShpbm9kZSktPmlwX2NyZWF0ZWRfdHJhbnMgPSBvc2ItPmpvdXJuYWwtPmpfdHJhbnNfaWQ7CisJY2ktPmNpX2NyZWF0ZWRfdHJhbnMgPSBvc2ItPmpvdXJuYWwtPmpfdHJhbnNfaWQ7CiAJc3Bpbl91bmxvY2soJnRyYW5zX2luY19sb2NrKTsKIH0KIApAQCAtMjAwLDcgKzIxMCw3IEBACiAJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCiAJCXJldHVybjsKIAotCWlmICghb2NmczJfaW5vZGVfZnVsbHlfY2hlY2twb2ludGVkKGlub2RlKSkgeworCWlmICghb2NmczJfY2lfZnVsbHlfY2hlY2twb2ludGVkKElOT0RFX0NBQ0hFKGlub2RlKSkpIHsKIAkJLyogV0FSTklORzogVGhpcyBvbmx5IGtpY2tzIG9mZiBhIHNpbmdsZQogCQkgKiBjaGVja3BvaW50LiBJZiBzb21lb25lIHJhY2VzIHlvdSBhbmQgYWRkcyBtb3JlCiAJCSAqIG1ldGFkYXRhIHRvIHRoZSBqb3VybmFsLCB5b3Ugd29uJ3Qga25vdywgYW5kIHdpbGwKQEAgLTIxMCw3ICsyMjAsNyBAQAogCQlvY2ZzMl9zdGFydF9jaGVja3BvaW50KG9zYik7CiAKIAkJd2FpdF9ldmVudChvc2ItPmpvdXJuYWwtPmpfY2hlY2twb2ludGVkLAotCQkJICAgb2NmczJfaW5vZGVfZnVsbHlfY2hlY2twb2ludGVkKGlub2RlKSk7CisJCQkgICBvY2ZzMl9jaV9mdWxseV9jaGVja3BvaW50ZWQoSU5PREVfQ0FDSEUoaW5vZGUpKSk7CiAJfQogfQogCkBAIC0yNjYsMzEgKzI3NiwzNCBAQAogCiAKIC8qIG9jZnMyX2lub2RlICovCi1pbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdHlwZSk7CiAvKiBvY2ZzMl9leHRlbnRfYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2ViKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKKy8qIG9jZnMyX3JlZmNvdW50X2Jsb2NrICovCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogLyogb2NmczJfZ3JvdXBfZGVzYyAqLwotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2dkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogLyogb2NmczJfeGF0dHJfYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIHF1b3RhIGJsb2NrcyAqLwotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogLyogZGlyYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIG9jZnMyX2R4X3Jvb3RfYmxvY2sgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIG9jZnMyX2R4X2xlYWYgKi8KLWludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIEFueXRoaW5nIHRoYXQgaGFzIG5vIGVjYyAqLwotaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogCiAvKgpAQCAtNDc3LDYgKzQ5MCwyMyBAQAogCXJldHVybiBjcmVkaXRzOwogfQogCisvKiBpbm9kZSB1cGRhdGUsIG5ldyByZWZjb3VudCBibG9jayBhbmQgaXRzIGFsbG9jYXRpb24gY3JlZGl0cy4gKi8KKyNkZWZpbmUgT0NGUzJfUkVGQ09VTlRfVFJFRV9DUkVBVEVfQ1JFRElUUyAoT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAxIFwKKwkJCQkJICAgICsgT0NGUzJfU1VCQUxMT0NfQUxMT0MpCisKKy8qIGlub2RlIGFuZCB0aGUgcmVmY291bnQgYmxvY2sgdXBkYXRlLiAqLworI2RlZmluZSBPQ0ZTMl9SRUZDT1VOVF9UUkVFX1NFVF9DUkVESVRTIChPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDEpCisKKy8qCisgKiBpbm9kZSBhbmQgdGhlIHJlZmNvdW50IGJsb2NrIHVwZGF0ZS4KKyAqIEl0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgY3JlZGl0cyBmb3Igc3ViIGFsbG9jIGNoYW5nZS4KKyAqIFNvIGlmIHdlIG5lZWQgdG8gZnJlZSB0aGUgYml0LCBPQ0ZTMl9TVUJBTExPQ19GUkVFIG5lZWRzIHRvIGJlIGFkZGVkLgorICovCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX1RSRUVfUkVNT1ZFX0NSRURJVFMgKE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMSkKKworLyogMiBtZXRhZGF0YSBhbGxvYywgMiBuZXcgYmxvY2tzIGFuZCByb290IHJlZmNvdW50IGJsb2NrICovCisjZGVmaW5lIE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFMgKE9DRlMyX1NVQkFMTE9DX0FMTE9DICogMiArIDMpCisKIC8qCiAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCByb290X2VsIGlzIHRoZSByb290CiAgKiBvZiBleHRlbnQgdHJlZS4gU28gZm9yIGFuIGlub2RlLCBpdCBzaG91bGQgYmUgJmZlLT5pZDIuaV9saXN0LiBPdGhlcndpc2UKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwppbmRleCBiYWM3ZTZhLi5hYzEwZjgzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKKysrIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCkBAIC0yOTcsOCArMjk3LDggQEAKIAl9CiAJbWVtY3B5KGFsbG9jX2NvcHksIGFsbG9jLCBiaC0+Yl9zaXplKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgbG9jYWxfYWxsb2NfaW5vZGUsIGJoLAotCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUobG9jYWxfYWxsb2NfaW5vZGUpLAorCQkJCQkgYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKQEAgLTM5Miw3ICszOTIsNyBAQAogCW9jZnMyX2NsZWFyX2xvY2FsX2FsbG9jKGFsbG9jKTsKIAogCW9jZnMyX2NvbXB1dGVfbWV0YV9lY2Mob3NiLT5zYiwgYWxsb2NfYmgtPmJfZGF0YSwgJmFsbG9jLT5pX2NoZWNrKTsKLQlzdGF0dXMgPSBvY2ZzMl93cml0ZV9ibG9jayhvc2IsIGFsbG9jX2JoLCBpbm9kZSk7CisJc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCBhbGxvY19iaCwgSU5PREVfQ0FDSEUoaW5vZGUpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCkBAIC02NzgsNyArNjc4LDggQEAKIAkgKiBkZWxldGUgYml0cyBmcm9tIGl0ISAqLwogCSpudW1fYml0cyA9IGJpdHNfd2FudGVkOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBsb2NhbF9hbGxvY19pbm9kZSwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsCisJCQkJCSBJTk9ERV9DQUNIRShsb2NhbF9hbGxvY19pbm9kZSksCiAJCQkJCSBvc2ItPmxvY2FsX2FsbG9jX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xMTU2LDcgKzExNTcsOCBAQAogCX0KIAltZW1jcHkoYWxsb2NfY29weSwgYWxsb2MsIG9zYi0+bG9jYWxfYWxsb2NfYmgtPmJfc2l6ZSk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGxvY2FsX2FsbG9jX2lub2RlLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwKKwkJCQkJIElOT0RFX0NBQ0hFKGxvY2FsX2FsbG9jX2lub2RlKSwKIAkJCQkJIG9zYi0+bG9jYWxfYWxsb2NfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDg2MDFmOTMuLmYwMTBiMjIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtNjksNyArNjksNiBAQAogc3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgICBkZXZfdCBkZXYsCiAJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfZmVfYmgsCiAJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKQEAgLTc4LDcgKzc3LDcgQEAKIAogc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqKnJldF9vcnBoYW5fZGlyLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICB1NjQgYmxrbm8sCiAJCQkJICAgIGNoYXIgKm5hbWUsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKTsKIApAQCAtMzU4LDggKzM1NywxMiBAQAogCX0KIAlkaWRfcXVvdGFfaW5vZGUgPSAxOwogCisJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICVkLCAlbHUsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAorCQkgICBpbm9kZS0+aV9tb2RlLCAodW5zaWduZWQgbG9uZylkZXYsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkJICAgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKIAkvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi8KLQlzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLCBkZW50cnksIGRldiwKKwlzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLCBkZXYsCiAJCQkJICAgICZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLAogCQkJCSAgICBpbm9kZV9hYyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTM3NSw3ICszNzgsOCBAQAogCQkJZ290byBsZWF2ZTsKIAkJfQogCi0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBwYXJlbnRfZmVfYmgsCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwKKwkJCQkJCSBwYXJlbnRfZmVfYmgsCiAJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNDY1LDcgKzQ2OSw2IEBACiBzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgIGRldl90IGRldiwKIAkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19mZV9iaCwKIAkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLApAQCAtNDc5LDEwICs0ODIsNiBAQAogCXUxNiBzdWJhbGxvY19iaXQ7CiAJdTE2IGZlYXQ7CiAKLQltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJWQsICVsdSwgJyUuKnMnKVxuIiwgZGlyLCBkZW50cnksCi0JCSAgIGlub2RlLT5pX21vZGUsICh1bnNpZ25lZCBsb25nKWRldiwgZGVudHJ5LT5kX25hbWUubGVuLAotCQkgICBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQogCSpuZXdfZmVfYmggPSBOVUxMOwogCiAJc3RhdHVzID0gb2NmczJfY2xhaW1fbmV3X2lub2RlKG9zYiwgaGFuZGxlLCBkaXIsIHBhcmVudF9mZV9iaCwKQEAgLTUwNyw5ICs1MDYsMTAgQEAKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwogCX0KLQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgKm5ld19mZV9iaCk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUoaW5vZGUpLCAqbmV3X2ZlX2JoKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsICpuZXdfZmVfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSAqbmV3X2ZlX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC01NjUsNyArNTY1LDcgQEAKIAl9CiAKIAlvY2ZzMl9wb3B1bGF0ZV9pbm9kZShpbm9kZSwgZmUsIDEpOwotCW9jZnMyX2lub2RlX3NldF9uZXcob3NiLCBpbm9kZSk7CisJb2NmczJfY2lfc2V0X25ldyhvc2IsIElOT0RFX0NBQ0hFKGlub2RlKSk7CiAJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKSB7CiAJCXN0YXR1cyA9IG9jZnMyX2NyZWF0ZV9uZXdfaW5vZGVfbG9ja3MoaW5vZGUpOwogCQlpZiAoc3RhdHVzIDwgMCkKQEAgLTY4Miw3ICs2ODIsNyBAQAogCQlnb3RvIG91dF91bmxvY2tfaW5vZGU7CiAJfQogCi0JZXJyID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZmVfYmgsCisJZXJyID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGZlX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoZXJyIDwgMCkgewogCQltbG9nX2Vycm5vKGVycik7CkBAIC04NTAsNyArODUwLDggQEAKIAl9CiAKIAlpZiAoaW5vZGVfaXNfdW5saW5rYWJsZShpbm9kZSkpIHsKLQkJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9vcnBoYW5fZGlyKG9zYiwgJm9ycGhhbl9kaXIsIGlub2RlLAorCQlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIob3NiLCAmb3JwaGFuX2RpciwKKwkJCQkJCSAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAogCQkJCQkJICBvcnBoYW5fbmFtZSwgJm9ycGhhbl9pbnNlcnQpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtODY2LDcgKzg2Nyw3IEBACiAJCWdvdG8gbGVhdmU7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZmVfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGZlX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEyNDEsOSArMTI0Miw4IEBACiAKIAkJaWYgKFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpIHx8IChuZXdfaW5vZGUtPmlfbmxpbmsgPT0gMSkpIHsKIAkJCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfb3JwaGFuX2Rpcihvc2IsICZvcnBoYW5fZGlyLAotCQkJCQkJCSAgbmV3X2lub2RlLAotCQkJCQkJCSAgb3JwaGFuX25hbWUsCi0JCQkJCQkJICAmb3JwaGFuX2luc2VydCk7CisJCQkJCQlPQ0ZTMl9JKG5ld19pbm9kZSktPmlwX2Jsa25vLAorCQkJCQkJb3JwaGFuX25hbWUsICZvcnBoYW5faW5zZXJ0KTsKIAkJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJCWdvdG8gYmFpbDsKQEAgLTEyODQsNyArMTI4NCw4IEBACiAJCQkJZ290byBiYWlsOwogCQkJfQogCQl9Ci0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgbmV3X2lub2RlLCBuZXdmZV9iaCwKKwkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShuZXdfaW5vZGUpLAorCQkJCQkJIG5ld2ZlX2JoLAogCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEzMzEsNyArMTMzMiw4IEBACiAJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgb2xkX2lub2RlLCBvbGRfaW5vZGVfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShvbGRfaW5vZGUpLAorCQkJCQkgb2xkX2lub2RlX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPj0gMCkgewogCQlvbGRfZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvbGRfaW5vZGVfYmgtPmJfZGF0YTsKQEAgLTE0MDcsOSArMTQwOSwxMCBAQAogCQkJICAgICAoaW50KW9sZF9kaXJfbmxpbmssIG9sZF9kaXItPmlfbmxpbmspOwogCQl9IGVsc2UgewogCQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmU7Ci0JCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIG9sZF9kaXIsCi0JCQkJCQkgICAgICBvbGRfZGlyX2JoLAotCQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkJCSBJTk9ERV9DQUNIRShvbGRfZGlyKSwKKwkJCQkJCQkgb2xkX2Rpcl9iaCwKKwkJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvbGRfZGlyX2JoLT5iX2RhdGE7CiAJCQlvY2ZzMl9zZXRfbGlua3NfY291bnQoZmUsIG9sZF9kaXItPmlfbmxpbmspOwogCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG9sZF9kaXJfYmgpOwpAQCAtMTUyNyw5ICsxNTMwLDExIEBACiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CiAJCX0KLQkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoc1t2aXJ0dWFsXSk7CisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGlub2RlKSwKKwkJCQkJICAgICAgYmhzW3ZpcnR1YWxdKTsKIAotCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBiaHNbdmlydHVhbF0sCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLAorCQkJCQkgICAgICBiaHNbdmlydHVhbF0sCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xNjkyLDcgKzE2OTcsMTEgQEAKIAl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAotCXN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRlbnRyeSwKKwltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJWQsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAorCQkgICBpbm9kZS0+aV9tb2RlLCBkZW50cnktPmRfbmFtZS5sZW4sCisJCSAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCisJc3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwKIAkJCQkgICAgMCwgJm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsCiAJCQkJICAgIGlub2RlX2FjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMTg0Miw3ICsxODUxLDcgQEAKIAogc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqKnJldF9vcnBoYW5fZGlyLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICB1NjQgYmxrbm8sCiAJCQkJICAgIGNoYXIgKm5hbWUsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewpAQCAtMTg1MCw3ICsxODU5LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9ycGhhbl9kaXJfYmggPSBOVUxMOwogCWludCBzdGF0dXMgPSAwOwogCi0Jc3RhdHVzID0gb2NmczJfYmxrbm9fc3RyaW5naWZ5KE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgbmFtZSk7CisJc3RhdHVzID0gb2NmczJfYmxrbm9fc3RyaW5naWZ5KGJsa25vLCBuYW1lKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CkBAIC0xOTE3LDcgKzE5MjYsOSBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgb3JwaGFuX2Rpcl9pbm9kZSwgb3JwaGFuX2Rpcl9iaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsCisJCQkJCSBJTk9ERV9DQUNIRShvcnBoYW5fZGlyX2lub2RlKSwKKwkJCQkJIG9ycGhhbl9kaXJfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMjAwMiw3ICsyMDEzLDkgQEAKIAkJZ290byBsZWF2ZTsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsb3JwaGFuX2Rpcl9pbm9kZSwgIG9ycGhhbl9kaXJfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkgSU5PREVfQ0FDSEUob3JwaGFuX2Rpcl9pbm9kZSksCisJCQkJCSBvcnBoYW5fZGlyX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTIwMjgsNiArMjA0MSwyNzQgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgaW50IG1vZGUsCisJCQkJIHN0cnVjdCBpbm9kZSAqKm5ld19pbm9kZSkKK3sKKwlpbnQgc3RhdHVzLCBkaWRfcXVvdGFfaW5vZGUgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqb3JwaGFuX2RpciA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gTlVMTDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwljaGFyIG9ycGhhbl9uYW1lW09DRlMyX09SUEhBTl9OQU1FTEVOICsgMV07CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZGlfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2RpX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqaW5vZGVfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBvcnBoYW5faW5zZXJ0ID0geyBOVUxMLCB9OworCisJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhkaXIsICZwYXJlbnRfZGlfYmgsIDEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKgorCSAqIFdlIGdpdmUgdGhlIG9ycGhhbiBkaXIgdGhlIHJvb3QgYmxrbm8gdG8gZmFrZSBhbiBvcnBoYW4gbmFtZSwKKwkgKiBhbmQgYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBvdXIgaW5zZXJ0aW9uLgorCSAqLworCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfb3JwaGFuX2Rpcihvc2IsICZvcnBoYW5fZGlyLAorCQkJCQkgIG9zYi0+cm9vdF9ibGtubywKKwkJCQkJICBvcnBoYW5fbmFtZSwgJm9ycGhhbl9pbnNlcnQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiByZXNlcnZlIGFuIGlub2RlIHNwb3QgKi8KKwlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX25ld19pbm9kZShvc2IsICZpbm9kZV9hYyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCWlub2RlID0gb2NmczJfZ2V0X2luaXRfaW5vZGUoZGlyLCBtb2RlKTsKKwlpZiAoIWlub2RlKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLT5zYiwgMCwgMCkpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiBXZSBkb24ndCB1c2Ugc3RhbmRhcmQgVkZTIHdyYXBwZXIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHZmc19kcV9pbml0CisJICogdG8gYmUgY2FsbGVkLiAqLworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKG9zYi0+c2IpICYmCisJICAgIG9zYi0+c2ItPmRxX29wLT5hbGxvY19pbm9kZShpbm9kZSwgMSkgPT0gTk9fUVVPVEEpIHsKKwkJc3RhdHVzID0gLUVEUVVPVDsKKwkJZ290byBsZWF2ZTsKKwl9CisJZGlkX3F1b3RhX2lub2RlID0gMTsKKworCS8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqLworCXN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsCisJCQkJICAgIDAsICZuZXdfZGlfYmgsIHBhcmVudF9kaV9iaCwgaGFuZGxlLAorCQkJCSAgICBpbm9kZV9hYyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCXN0YXR1cyA9IG9jZnMyX2Jsa25vX3N0cmluZ2lmeShPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIG9ycGhhbl9uYW1lKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKW5ld19kaV9iaC0+Yl9kYXRhOworCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9hZGQob3NiLCBoYW5kbGUsIGlub2RlLCBkaSwgb3JwaGFuX25hbWUsCisJCQkJICAmb3JwaGFuX2luc2VydCwgb3JwaGFuX2Rpcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qIGdldCBvcGVuIGxvY2sgc28gdGhhdCBvbmx5IG5vZGVzIGNhbid0IHJlbW92ZSBpdCBmcm9tIG9ycGhhbiBkaXIuICovCisJc3RhdHVzID0gb2NmczJfb3Blbl9sb2NrKGlub2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCitsZWF2ZToKKwlpZiAoc3RhdHVzIDwgMCAmJiBkaWRfcXVvdGFfaW5vZGUpCisJCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwlpZiAoaGFuZGxlKQorCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCisJaWYgKG9ycGhhbl9kaXIpIHsKKwkJLyogVGhpcyB3YXMgbG9ja2VkIGZvciB1cyBpbiBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIoKSAqLworCQlvY2ZzMl9pbm9kZV91bmxvY2sob3JwaGFuX2RpciwgMSk7CisJCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpci0+aV9tdXRleCk7CisJCWlwdXQob3JwaGFuX2Rpcik7CisJfQorCisJaWYgKHN0YXR1cyA9PSAtRU5PU1BDKQorCQltbG9nKDAsICJEaXNrIGlzIGZ1bGxcbiIpOworCisJaWYgKChzdGF0dXMgPCAwKSAmJiBpbm9kZSkgeworCQljbGVhcl9ubGluayhpbm9kZSk7CisJCWlwdXQoaW5vZGUpOworCX0KKworCWlmIChpbm9kZV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGlub2RlX2FjKTsKKworCWJyZWxzZShuZXdfZGlfYmgpOworCisJaWYgKCFzdGF0dXMpCisJCSpuZXdfaW5vZGUgPSBpbm9kZTsKKworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9ycGhhbl9pbnNlcnQpOworCisJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMSk7CisJYnJlbHNlKHBhcmVudF9kaV9iaCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IG9jZnMyX212X29ycGhhbmVkX2lub2RlX3RvX25ldyhzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9kaV9iaCA9IE5VTEw7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpcl9kaSwgKmRpOworCXN0cnVjdCBpbm9kZSAqb3JwaGFuX2Rpcl9pbm9kZSA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpvcnBoYW5fZGlyX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgbG9va3VwID0geyBOVUxMLCB9OworCisJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICUuKnMnKVxuIiwgZGlyLCBkZW50cnksCisJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKKwlzdGF0dXMgPSBvY2ZzMl9pbm9kZV9sb2NrKGRpciwgJnBhcmVudF9kaV9iaCwgMSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXR1cyAhPSAtRU5PRU5UKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWRpcl9kaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9kaV9iaC0+Yl9kYXRhOworCWlmICghZGlyX2RpLT5pX2xpbmtzX2NvdW50KSB7CisJCS8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovCisJCXN0YXR1cyA9IC1FTk9FTlQ7CisJCWdvdG8gbGVhdmU7CisJfQorCisJc3RhdHVzID0gb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbik7CisJaWYgKHN0YXR1cykKKwkJZ290byBsZWF2ZTsKKworCS8qIGdldCBhIHNwb3QgaW5zaWRlIHRoZSBkaXIuICovCisJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIGRpciwgcGFyZW50X2RpX2JoLAorCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5sZW4sICZsb29rdXApOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlvcnBoYW5fZGlyX2lub2RlID0gb2NmczJfZ2V0X3N5c3RlbV9maWxlX2lub2RlKG9zYiwKKwkJCQkJCSAgICAgICBPUlBIQU5fRElSX1NZU1RFTV9JTk9ERSwKKwkJCQkJCSAgICAgICBvc2ItPnNsb3RfbnVtKTsKKwlpZiAoIW9ycGhhbl9kaXJfaW5vZGUpIHsKKwkJc3RhdHVzID0gLUVFWElTVDsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCW11dGV4X2xvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOworCisJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhvcnBoYW5fZGlyX2lub2RlLCAmb3JwaGFuX2Rpcl9iaCwgMSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQltdXRleF91bmxvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOworCQlpcHV0KG9ycGhhbl9kaXJfaW5vZGUpOworCQlnb3RvIGxlYXZlOworCX0KKworCXN0YXR1cyA9IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soaW5vZGUsICZkaV9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG9ycGhhbl91bmxvY2s7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9yZW5hbWVfY3JlZGl0cyhvc2ItPnNiKSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG9ycGhhbl91bmxvY2s7CisJfQorCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSBkaV9iaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9kZWwob3NiLCBoYW5kbGUsIG9ycGhhbl9kaXJfaW5vZGUsIGlub2RlLAorCQkJCSAgb3JwaGFuX2Rpcl9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJbGUzMl9hZGRfY3B1KCZkaS0+aV9mbGFncywgLU9DRlMyX09SUEhBTkVEX0ZMKTsKKwlkaS0+aV9vcnBoYW5lZF9zbG90ID0gMDsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOworCisJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKKwkJCQkgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBwYXJlbnRfZGlfYmgsCisJCQkJICZsb29rdXApOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXN0YXR1cyA9IG9jZnMyX2RlbnRyeV9hdHRhY2hfbG9jayhkZW50cnksIGlub2RlLAorCQkJCQkgIE9DRlMyX0koZGlyKS0+aXBfYmxrbm8pOworCWlmIChzdGF0dXMpIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOworCWRlbnRyeS0+ZF9vcCA9ICZvY2ZzMl9kZW50cnlfb3BzOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJc3RhdHVzID0gMDsKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK29ycGhhbl91bmxvY2s6CisJb2NmczJfaW5vZGVfdW5sb2NrKG9ycGhhbl9kaXJfaW5vZGUsIDEpOworCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CisJaXB1dChvcnBoYW5fZGlyX2lub2RlKTsKK2xlYXZlOgorCisJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMSk7CisKKwlicmVsc2UoZGlfYmgpOworCWJyZWxzZShwYXJlbnRfZGlfYmgpOworCWJyZWxzZShvcnBoYW5fZGlyX2JoKTsKKworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CisKKwltbG9nX2V4aXQoc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0gewogCS5jcmVhdGUJCT0gb2NmczJfY3JlYXRlLAogCS5sb29rdXAJCT0gb2NmczJfbG9va3VwLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuaCBiL2ZzL29jZnMyL25hbWVpLmgKaW5kZXggNjg4YWVmNi4uZTVkMDU5ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuaAorKysgYi9mcy9vY2ZzMi9uYW1laS5oCkBAIC0zNSw1ICszNSwxMSBAQAogCQkgICAgIHN0cnVjdCBpbm9kZSAqb3JwaGFuX2Rpcl9pbm9kZSwKIAkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqb3JwaGFuX2Rpcl9iaCk7CitpbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgaW50IG1vZGUsCisJCQkJIHN0cnVjdCBpbm9kZSAqKm5ld19pbm9kZSk7CitpbnQgb2NmczJfbXZfb3JwaGFuZWRfaW5vZGVfdG9fbmV3KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgIHN0cnVjdCBpbm9kZSAqbmV3X2lub2RlLAorCQkJCSAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwogCiAjZW5kaWYgLyogT0NGUzJfTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggMzllMWQ1YS4uZWFlNDA0NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC01MSwyMCArNTEsNTEgQEAKIC8qIEZvciBzdHJ1Y3Qgb2NmczJfYmxvY2tjaGVja19zdGF0cyAqLwogI2luY2x1ZGUgImJsb2NrY2hlY2suaCIKIAorCisvKiBDYWNoaW5nIG9mIG1ldGFkYXRhIGJ1ZmZlcnMgKi8KKwogLyogTW9zdCB1c2VyIHZpc2libGUgT0NGUzIgaW5vZGVzIHdpbGwgaGF2ZSB2ZXJ5IGZldyBwaWVjZXMgb2YKICAqIG1ldGFkYXRhLCBidXQgbGFyZ2VyIGZpbGVzIChpbmNsdWRpbmcgYml0bWFwcywgZXRjKSBtdXN0IGJlIHRha2VuCiAgKiBpbnRvIGFjY291bnQgd2hlbiBkZXNpZ25pbmcgYW4gYWNjZXNzIHNjaGVtZS4gV2UgYWxsb3cgYSBzbWFsbAogICogYW1vdW50IG9mIGlubGluZWQgYmxvY2tzIHRvIGJlIHN0b3JlZCBvbiBhbiBhcnJheSBhbmQgZ3JvdyB0aGUKICAqIHN0cnVjdHVyZSBpbnRvIGEgcmIgdHJlZSB3aGVuIG5lY2Vzc2FyeS4gKi8KLSNkZWZpbmUgT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZIDIKKyNkZWZpbmUgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkgMgogCisvKiBGbGFncyBmb3Igb2NmczJfY2FjaGluZ19pbmZvICovCisKK2VudW0gb2NmczJfY2FjaGluZ19pbmZvX2ZsYWdzIHsKKwkvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgdXNpbmcgdGhlIGlubGluZSBhcnJheSAqLworCU9DRlMyX0NBQ0hFX0ZMX0lOTElORQk9IDE8PDEsCit9OworCitzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zOwogc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyB7CisJLyoKKwkgKiBUaGUgcGFyZW50IHN0cnVjdHVyZSBwcm92aWRlcyB0aGUgbG9ja3MsIGJ1dCBiZWNhdXNlIHRoZQorCSAqIHBhcmVudCBzdHJ1Y3R1cmUgY2FuIGRpZmZlciwgaXQgcHJvdmlkZXMgbG9ja2luZyBvcGVyYXRpb25zCisJICogdG8gc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mby4KKwkgKi8KKwljb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zICpjaV9vcHM7CisKKwkvKiBuZXh0IHR3byBhcmUgcHJvdGVjdGVkIGJ5IHRyYW5zX2luY19sb2NrICovCisJLyogd2hpY2ggdHJhbnNhY3Rpb24gd2VyZSB3ZSBjcmVhdGVkIG9uPyBaZXJvIGlmIG5vbmUuICovCisJdW5zaWduZWQgbG9uZwkJY2lfY3JlYXRlZF90cmFuczsKKwkvKiBsYXN0IHRyYW5zYWN0aW9uIHdlIHdlcmUgYSBwYXJ0IG9mLiAqLworCXVuc2lnbmVkIGxvbmcJCWNpX2xhc3RfdHJhbnM7CisKKwkvKiBDYWNoZSBzdHJ1Y3R1cmVzICovCisJdW5zaWduZWQgaW50CQljaV9mbGFnczsKIAl1bnNpZ25lZCBpbnQJCWNpX251bV9jYWNoZWQ7CiAJdW5pb24gewotCQlzZWN0b3JfdAljaV9hcnJheVtPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVldOworCXNlY3Rvcl90CWNpX2FycmF5W09DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZXTsKIAkJc3RydWN0IHJiX3Jvb3QJY2lfdHJlZTsKIAl9IGNpX2NhY2hlOwogfTsKKy8qCisgKiBOZWVkIHRoaXMgcHJvdG90eXBlIGhlcmUgaW5zdGVhZCBvZiBpbiB1cHRvZGF0ZS5oIGJlY2F1c2Ugam91cm5hbC5oCisgKiB1c2VzIGl0LgorICovCitzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSk7CiAKIC8qIHRoaXMgbGltaXRzIHVzIHRvIDI1NiBub2RlcwogICogaWYgd2UgbmVlZCBtb3JlLCB3ZSBjYW4gZG8gYSBrbWFsbG9jIGZvciB0aGUgbWFwICovCkBAIC0zNzcsMTIgKzQwOCwxNyBAQAogCiAJLyogdGhlIGdyb3VwIHdlIHVzZWQgdG8gYWxsb2NhdGUgaW5vZGVzLiAqLwogCXU2NAkJCQlvc2JfaW5vZGVfYWxsb2NfZ3JvdXA7CisKKwkvKiByYiB0cmVlIHJvb3QgZm9yIHJlZmNvdW50IGxvY2suICovCisJc3RydWN0IHJiX3Jvb3QJb3NiX3JmX2xvY2tfdHJlZTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqb3NiX3JlZl90cmVlX2xydTsKIH07CiAKICNkZWZpbmUgT0NGUzJfU0Ioc2IpCSAgICAoKHN0cnVjdCBvY2ZzMl9zdXBlciAqKShzYiktPnNfZnNfaW5mbykKIAogLyogVXNlZnVsIHR5cGVkZWYgZm9yIHBhc3NpbmcgYXJvdW5kIGpvdXJuYWwgYWNjZXNzIGZ1bmN0aW9ucyAqLwotdHlwZWRlZiBpbnQgKCpvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jKShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAordHlwZWRlZiBpbnQgKCpvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jKShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC00ODAsNiArNTE2LDEzIEBACiAJb2NmczJfc2V0X2xpbmtzX2NvdW50KGRpLCBsaW5rcyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJaWYgKG9zYi0+c19mZWF0dXJlX2luY29tcGF0ICYgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9SRUZDT1VOVF9UUkVFKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogLyogc2V0IC8gY2xlYXIgZnVuY3Rpb25zIGJlY2F1c2UgY2x1c3RlciBldmVudHMgY2FuIG1ha2UgdGhlc2UgaGFwcGVuCiAgKiBpbiBwYXJhbGxlbCBzbyB3ZSB3YW50IHRoZSB0cmFuc2l0aW9ucyB0byBiZSBhdG9taWMuIHRoaXMgYWxzbwogICogbWVhbnMgdGhhdCBhbnkgZnV0dXJlIGZsYWdzIG9zYl9mbGFncyBtdXN0IGJlIHByb3RlY3RlZCBieSBzcGlubG9jawpAQCAtNTc4LDYgKzYyMSw5IEBACiAjZGVmaW5lIE9DRlMyX0lTX1ZBTElEX0RYX0xFQUYocHRyKQkJCQkJXAogCSghc3RyY21wKChwdHIpLT5kbF9zaWduYXR1cmUsIE9DRlMyX0RYX0xFQUZfU0lHTkFUVVJFKSkKIAorI2RlZmluZSBPQ0ZTMl9JU19WQUxJRF9SRUZDT1VOVF9CTE9DSyhwdHIpCQkJCVwKKwkoIXN0cmNtcCgocHRyKS0+cmZfc2lnbmF0dXJlLCBPQ0ZTMl9SRUZDT1VOVF9CTE9DS19TSUdOQVRVUkUpKQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW5vX2Zyb21fYmxrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgdTY0IGJsa25vKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggN2FiNmU5ZS4uZTk0MzFlNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC02OCw2ICs2OCw3IEBACiAjZGVmaW5lIE9DRlMyX0RJUl9UUkFJTEVSX1NJR05BVFVSRQkiRElSVFJMMSIKICNkZWZpbmUgT0NGUzJfRFhfUk9PVF9TSUdOQVRVUkUJCSJEWERJUjAxIgogI2RlZmluZSBPQ0ZTMl9EWF9MRUFGX1NJR05BVFVSRQkJIkRYTEVBRjEiCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX0JMT0NLX1NJR05BVFVSRQkiUkVGQ05UMSIKIAogLyogQ29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBPQ0ZTMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCkBAIC05OCw3ICs5OSw4IEBACiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfVVNFUlNQQUNFX1NUQUNLIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUiBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9FQ0MgXAotCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0lOREVYRURfRElSUykKKwkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9JTkRFWEVEX0RJUlMgXAorCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1JFRkNPVU5UX1RSRUUpCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJKE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VOV1JJVFRFTiBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VTUlFVT1RBIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfR1JQUVVPVEEpCkBAIC0xNjAsNiArMTYyLDkgQEAKIC8qIE1ldGFkYXRhIGNoZWNrc3VtIGFuZCBlcnJvciBjb3JyZWN0aW9uICovCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9FQ0MJCTB4MDgwMAogCisvKiBSZWZjb3VudCB0cmVlIHN1cHBvcnQgKi8KKyNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9SRUZDT1VOVF9UUkVFCTB4MTAwMAorCiAvKgogICogYmFja3VwIHN1cGVyYmxvY2sgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhpcyB2b2x1bWUKICAqIGhhcyBiYWNrdXAgc3VwZXJibG9ja3MuCkBAIC0yMjMsNiArMjI4LDcgQEAKICNkZWZpbmUgT0NGUzJfSEFTX1hBVFRSX0ZMCSgweDAwMDIpCiAjZGVmaW5lIE9DRlMyX0lOTElORV9YQVRUUl9GTAkoMHgwMDA0KQogI2RlZmluZSBPQ0ZTMl9JTkRFWEVEX0RJUl9GTAkoMHgwMDA4KQorI2RlZmluZSBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwgICAoMHgwMDEwKQogCiAvKiBJbm9kZSBhdHRyaWJ1dGVzLCBrZWVwIGluIHN5bmMgd2l0aCBFWFQyICovCiAjZGVmaW5lIE9DRlMyX1NFQ1JNX0ZMCQkoMHgwMDAwMDAwMSkJLyogU2VjdXJlIGRlbGV0aW9uICovCkBAIC0yNDEsOCArMjQ3LDExIEBACiAvKgogICogRXh0ZW50IHJlY29yZCBmbGFncyAoZV9ub2RlLmxlYWYuZmxhZ3MpCiAgKi8KLSNkZWZpbmUgT0NGUzJfRVhUX1VOV1JJVFRFTgkoMHgwMSkJLyogRXh0ZW50IGlzIGFsbG9jYXRlZCBidXQKLQkJCQkJICogdW53cml0dGVuICovCisjZGVmaW5lIE9DRlMyX0VYVF9VTldSSVRURU4JCSgweDAxKQkvKiBFeHRlbnQgaXMgYWxsb2NhdGVkIGJ1dAorCQkJCQkJICogdW53cml0dGVuICovCisjZGVmaW5lIE9DRlMyX0VYVF9SRUZDT1VOVEVECQkoMHgwMikgIC8qIEV4dGVudCBpcyByZWZlcmVuY2UKKwkJCQkJCSAqIGNvdW50ZWQgaW4gYW4gYXNzb2NpYXRlZAorCQkJCQkJICogcmVmY291bnQgdHJlZSAqLwogCiAvKgogICogaW9jdGwgY29tbWFuZHMKQEAgLTI5Miw2ICszMDEsMTUgQEAKICNkZWZpbmUgT0NGUzJfSU9DX0dST1VQX0FERAlfSU9XKCdvJywgMixzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0KQogI2RlZmluZSBPQ0ZTMl9JT0NfR1JPVVBfQURENjQJX0lPVygnbycsIDMsc3RydWN0IG9jZnMyX25ld19ncm91cF9pbnB1dCkKIAorLyogVXNlZCB0byBwYXNzIDIgZmlsZSBuYW1lcyB0byByZWZsaW5rLiAqLworc3RydWN0IHJlZmxpbmtfYXJndW1lbnRzIHsKKwlfX3U2NCBvbGRfcGF0aDsKKwlfX3U2NCBuZXdfcGF0aDsKKwlfX3U2NCBwcmVzZXJ2ZTsKK307CisjZGVmaW5lIE9DRlMyX0lPQ19SRUZMSU5LCV9JT1coJ28nLCA0LCBzdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMpCisKKwogLyoKICAqIEpvdXJuYWwgRmxhZ3MgKG9jZnMyX2Rpbm9kZS5pZDEuam91cm5hbDEuaV9mbGFncykKICAqLwpAQCAtNzE3LDcgKzczNSw4IEBACiAJX19sZTY0IGlfeGF0dHJfbG9jOwogLyo4MCovCXN0cnVjdCBvY2ZzMl9ibG9ja19jaGVjayBpX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLwogLyo4OCovCV9fbGU2NCBpX2R4X3Jvb3Q7CQkvKiBQb2ludGVyIHRvIGRpciBpbmRleCByb290IGJsb2NrICovCi0JX19sZTY0IGlfcmVzZXJ2ZWQyWzVdOworLyo5MCovCV9fbGU2NCBpX3JlZmNvdW50X2xvYzsKKwlfX2xlNjQgaV9yZXNlcnZlZDJbNF07CiAvKkI4Ki8JdW5pb24gewogCQlfX2xlNjQgaV9wYWQxOwkJLyogR2VuZXJpYyB3YXkgdG8gcmVmZXIgdG8gdGhpcwogCQkJCQkgICA2NGJpdCB1bmlvbiAqLwpAQCAtOTAxLDYgKzkyMCw2MCBAQAogLyo0MCovCV9fdTggICAgYmdfYml0bWFwWzBdOwogfTsKIAorc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyB7CisvKjAwKi8JX19sZTY0IHJfY3BvczsJCS8qIFBoeXNpY2FsIG9mZnNldCwgaW4gY2x1c3RlcnMgKi8KKwlfX2xlMzIgcl9jbHVzdGVyczsJLyogQ2x1c3RlcnMgY292ZXJlZCBieSB0aGlzIGV4dGVudCAqLworCV9fbGUzMiByX3JlZmNvdW50OwkvKiBSZWZlcmVuY2UgY291bnQgb2YgdGhpcyBleHRlbnQgKi8KKy8qMTAqLworfTsKKyNkZWZpbmUgT0NGUzJfMzJCSVRfUE9TX01BU0sJCSgweGZmZmZmZmZmVUxMKQorCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX0xFQUZfRkwgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwgICAgICAgICAgKDB4MDAwMDAwMDIpCisKK3N0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0IHsKKy8qMDAqLwlfX2xlMTYgcmxfY291bnQ7CS8qIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgcG9zc2libGUKKwkJCQkgICBpbiBybF9yZWNvcmRzICovCisJX19sZTE2IHJsX3VzZWQ7CQkvKiBDdXJyZW50IG51bWJlciBvZiB1c2VkIHJlY29yZHMgKi8KKwlfX2xlMzIgcmxfcmVzZXJ2ZWQyOworCV9fbGU2NCBybF9yZXNlcnZlZDE7CS8qIFBhZCB0byBzaXplb2Yob2NmczJfcmVmY291bnRfcmVjb3JkKSAqLworLyoxMCovCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgcmxfcmVjc1swXTsJLyogUmVmY291bnQgcmVjb3JkcyAqLworfTsKKworCitzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgeworLyowMCovCV9fdTggcmZfc2lnbmF0dXJlWzhdOwkJLyogU2lnbmF0dXJlIGZvciB2ZXJpZmljYXRpb24gKi8KKwlfX2xlMTYgcmZfc3ViYWxsb2Nfc2xvdDsJLyogU2xvdCBzdWJhbGxvY2F0b3IgdGhpcyBibG9jaworCQkJCQkgICBiZWxvbmdzIHRvICovCisJX19sZTE2IHJmX3N1YmFsbG9jX2JpdDsJCS8qIEJpdCBvZmZzZXQgaW4gc3ViYWxsb2NhdG9yCisJCQkJCSAgIGJsb2NrIGdyb3VwICovCisJX19sZTMyIHJmX2ZzX2dlbmVyYXRpb247CS8qIE11c3QgbWF0Y2ggc3VwZXJibG9jayAqLworLyoxMCovCV9fbGU2NCByZl9ibGtubzsJCS8qIE9mZnNldCBvbiBkaXNrLCBpbiBibG9ja3MgKi8KKwlfX2xlNjQgcmZfcGFyZW50OwkJLyogUGFyZW50IGJsb2NrLCBvbmx5IHZhbGlkIGlmCisJCQkJCSAgIE9DRlMyX1JFRkNPVU5UX0xFQUZfRkwgaXMgc2V0IGluCisJCQkJCSAgIHJmX2ZsYWdzICovCisvKjIwKi8Jc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrIHJmX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLworCV9fbGU2NCByZl9sYXN0X2ViX2JsazsJCS8qIFBvaW50ZXIgdG8gbGFzdCBleHRlbnQgYmxvY2sgKi8KKy8qMzAqLwlfX2xlMzIgcmZfY291bnQ7CQkvKiBOdW1iZXIgb2YgaW5vZGVzIHNoYXJpbmcgdGhpcworCQkJCQkgICByZWZjb3VudCB0cmVlICovCisJX19sZTMyIHJmX2ZsYWdzOwkJLyogU2VlIHRoZSBmbGFncyBhYm92ZSAqLworCV9fbGUzMiByZl9jbHVzdGVyczsJCS8qIGNsdXN0ZXJzIGNvdmVyZWQgYnkgcmVmY291bnQgdHJlZS4gKi8KKwlfX2xlMzIgcmZfY3BvczsJCQkvKiBjbHVzdGVyIG9mZnNldCBpbiByZWZjb3VudCB0cmVlLiovCisvKjQwKi8JX19sZTMyIHJmX2dlbmVyYXRpb247CQkvKiBnZW5lcmF0aW9uIG51bWJlci4gYWxsIGJlIHRoZSBzYW1lCisJCQkJCSAqIGZvciB0aGUgc2FtZSByZWZjb3VudCB0cmVlLiAqLworCV9fbGUzMiByZl9yZXNlcnZlZDA7CisJX19sZTY0IHJmX3Jlc2VydmVkMVs3XTsKKy8qODAqLwl1bmlvbiB7CisJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0IHJmX3JlY29yZHM7ICAvKiBMaXN0IG9mIHJlZmNvdW50CisJCQkJCQkJICByZWNvcmRzICovCisJCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCByZl9saXN0OwkvKiBFeHRlbnQgcmVjb3JkIGxpc3QsCisJCQkJCQkJb25seSB2YWxpZCBpZgorCQkJCQkJCU9DRlMyX1JFRkNPVU5UX1RSRUVfRkwKKwkJCQkJCQlpcyBzZXQgaW4gcmZfZmxhZ3MgKi8KKwl9OworLyogQWN0dWFsIG9uLWRpc2sgc2l6ZSBpcyBvbmUgYmxvY2sgKi8KK307CisKIC8qCiAgKiBPbiBkaXNrIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIE9DRlMyLgogICovCkBAIC0xMzEyLDYgKzEzODUsMzIgQEAKIAogCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKIH0KKworc3RhdGljIGlubGluZSB1MTYgb2NmczJfZXh0ZW50X3JlY3NfcGVyX3JiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9saXN0LmxfcmVjcyk7CisKKwlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG9jZnMyX3JlZmNvdW50X3JlY3NfcGVyX3JiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9yZWNvcmRzLnJsX3JlY3MpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCitvY2ZzMl9nZXRfcmVmX3JlY19sb3dfY3Bvcyhjb25zdCBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICpyZWMpCit7CisJcmV0dXJuIGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSAmIE9DRlMyXzMyQklUX1BPU19NQVNLOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhpbnQgYmxvY2tzaXplKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfbG9ja2lkLmggYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAppbmRleCBjMjEyY2Y1Li5kMjc3YWFiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaApAQCAtNDksNiArNDksNyBAQAogCU9DRlMyX0xPQ0tfVFlQRV9RSU5GTywKIAlPQ0ZTMl9MT0NLX1RZUEVfTkZTX1NZTkMsCiAJT0NGUzJfTE9DS19UWVBFX09SUEhBTl9TQ0FOLAorCU9DRlMyX0xPQ0tfVFlQRV9SRUZDT1VOVCwKIAlPQ0ZTMl9OVU1fTE9DS19UWVBFUwogfTsKIApAQCAtODksNiArOTAsOSBAQAogCQljYXNlIE9DRlMyX0xPQ0tfVFlQRV9PUlBIQU5fU0NBTjoKIAkJCWMgPSAnUCc7CiAJCQlicmVhazsKKwkJY2FzZSBPQ0ZTMl9MT0NLX1RZUEVfUkVGQ09VTlQ6CisJCQljID0gJ1QnOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQljID0gJ1wwJzsKIAl9CkBAIC0xMTAsNiArMTE0LDcgQEAKIAlbT0NGUzJfTE9DS19UWVBFX1FJTkZPXSA9ICJRdW90YSIsCiAJW09DRlMyX0xPQ0tfVFlQRV9ORlNfU1lOQ10gPSAiTkZTU3luYyIsCiAJW09DRlMyX0xPQ0tfVFlQRV9PUlBIQU5fU0NBTl0gPSAiT3JwaGFuU2NhbiIsCisJW09DRlMyX0xPQ0tfVFlQRV9SRUZDT1VOVF0gPSAiUmVmY291bnQiLAogfTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpvY2ZzMl9sb2NrX3R5cGVfc3RyaW5nKGVudW0gb2NmczJfbG9ja190eXBlIHR5cGUpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YS5oIGIvZnMvb2NmczIvcXVvdGEuaAppbmRleCAzZmI5NmZjZC4uZTVkZjlkMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcXVvdGEuaAorKysgYi9mcy9vY2ZzMi9xdW90YS5oCkBAIC0xMDksNyArMTA5LDcgQEAKIGludCBvY2ZzMl9yZWFkX3F1b3RhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2X2Jsb2NrLAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpOwogCi1leHRlcm4gc3RydWN0IGRxdW90X29wZXJhdGlvbnMgb2NmczJfcXVvdGFfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBvY2ZzMl9xdW90YV9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSBvY2ZzMl9xdW90YV9mb3JtYXQ7CiAKIGludCBvY2ZzMl9xdW90YV9zZXR1cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jIGIvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKaW5kZXggNDRmMmE1ZS4uYjQzN2RjMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKKysrIGIvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQllcnIgPSAtRUlPOwogCQltbG9nX2Vycm5vKGVycik7CiAJfQotCXJldHVybiBlcnI7OworCXJldHVybiBlcnI7CiB9CiAKIC8qIFJlYWQgZGF0YSBmcm9tIGdsb2JhbCBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QKQEAgLTI1Myw4ICsyNTMsOSBAQAogCWZsdXNoX2RjYWNoZV9wYWdlKGJoLT5iX3BhZ2UpOwogCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCXVubG9ja19idWZmZXIoYmgpOwotCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoZ3Fpbm9kZSwgYmgpOwotCWVyciA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgZ3Fpbm9kZSwgYmgsIGphX3R5cGUpOworCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUoZ3Fpbm9kZSksIGJoKTsKKwllcnIgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIElOT0RFX0NBQ0hFKGdxaW5vZGUpLCBiaCwKKwkJCQkgICAgICBqYV90eXBlKTsKIAlpZiAoZXJyIDwgMCkgewogCQlicmVsc2UoYmgpOwogCQlnb3RvIG91dDsKQEAgLTg0OSw3ICs4NTAsNyBAQAogCWttZW1fY2FjaGVfZnJlZShvY2ZzMl9kcXVvdF9jYWNoZXAsIGRxdW90KTsKIH0KIAotc3RydWN0IGRxdW90X29wZXJhdGlvbnMgb2NmczJfcXVvdGFfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIG9jZnMyX3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAogCS5kcm9wCQk9IGRxdW90X2Ryb3AsCiAJLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jIGIvZnMvb2NmczIvcXVvdGFfbG9jYWwuYwppbmRleCBiZGIwOWNiLi4xYTJjNTBhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jCisrKyBiL2ZzL29jZnMyL3F1b3RhX2xvY2FsLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgaW5vZGUsIGJoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBiaCwKIAkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC01MTAsNyArNTEwLDggQEAKIAkJCQlnb3RvIG91dF9jb21taXQ7CiAJCQl9CiAJCQkvKiBSZWxlYXNlIGxvY2FsIHF1b3RhIGZpbGUgZW50cnkgKi8KLQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgbHFpbm9kZSwKKwkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwKKwkJCQkJSU5PREVfQ0FDSEUobHFpbm9kZSksCiAJCQkJCXFiaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02MTksNyArNjIwLDggQEAKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gb3V0X2JoOwogCQl9Ci0JCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgbHFpbm9kZSwgYmgsCisJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgSU5PREVfQ0FDSEUobHFpbm9kZSksCisJCQkJCQkgYmgsCiAJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtOTkzLDggKzk5NSw4IEBACiAJCWdvdG8gb3V0X3RyYW5zOwogCX0KIAlkY2h1bmsgPSAoc3RydWN0IG9jZnMyX2xvY2FsX2Rpc2tfY2h1bmsgKiliaC0+Yl9kYXRhOwotCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGxxaW5vZGUsIGJoKTsKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIGxxaW5vZGUsIGJoLAorCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGxxaW5vZGUpLCBiaCk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBJTk9ERV9DQUNIRShscWlub2RlKSwgYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEwMjcsOCArMTAyOSw4IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBvdXRfdHJhbnM7CiAJfQotCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGxxaW5vZGUsIGRiaCk7Ci0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBscWlub2RlLCBkYmgsCisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUobHFpbm9kZSksIGRiaCk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBJTk9ERV9DQUNIRShscWlub2RlKSwgZGJoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMTMxLDcgKzExMzMsNyBAQAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0OwogCX0KLQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShscWlub2RlLCBiaCk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUobHFpbm9kZSksIGJoKTsKIAogCS8qIExvY2FsIHF1b3RhIGluZm8sIGNodW5rIGhlYWRlciBhbmQgdGhlIG5ldyBibG9jayB3ZSBpbml0aWFsaXplICovCiAJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMoT0NGUzJfU0Ioc2IpLApAQCAtMTE0Myw3ICsxMTQ1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCS8qIFplcm8gY3JlYXRlZCBibG9jayAqLwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwgbHFpbm9kZSwgYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBJTk9ERV9DQUNIRShscWlub2RlKSwgYmgsCiAJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTE1OCw3ICsxMTYwLDggQEAKIAkJZ290byBvdXRfdHJhbnM7CiAJfQogCS8qIFVwZGF0ZSBjaHVuayBoZWFkZXIgKi8KLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIGxxaW5vZGUsIGNodW5rLT5xY19oZWFkZXJiaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcShoYW5kbGUsIElOT0RFX0NBQ0hFKGxxaW5vZGUpLAorCQkJCQkgY2h1bmstPnFjX2hlYWRlcmJoLAogCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTI5Miw3ICsxMjk1LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHEoaGFuZGxlLCBzYl9kcW9wdChzYiktPmZpbGVzW3R5cGVdLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RxKGhhbmRsZSwKKwkJCUlOT0RFX0NBQ0hFKHNiX2Rxb3B0KHNiKS0+ZmlsZXNbdHlwZV0pLAogCQkJb2QtPmRxX2NodW5rLT5xY19oZWFkZXJiaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyODdmYwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCkBAIC0wLDAgKzEsNDMxMyBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHJlZmNvdW50dHJlZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfUkVGQ09VTlQKKyNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KKyNpbmNsdWRlICJvY2ZzMi5oIgorI2luY2x1ZGUgImlub2RlLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJzdWJhbGxvYy5oIgorI2luY2x1ZGUgImpvdXJuYWwuaCIKKyNpbmNsdWRlICJ1cHRvZGF0ZS5oIgorI2luY2x1ZGUgInN1cGVyLmgiCisjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKKyNpbmNsdWRlICJibG9ja2NoZWNrLmgiCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCisjaW5jbHVkZSAic3lzZmlsZS5oIgorI2luY2x1ZGUgImRsbWdsdWUuaCIKKyNpbmNsdWRlICJleHRlbnRfbWFwLmgiCisjaW5jbHVkZSAiYW9wcy5oIgorI2luY2x1ZGUgInhhdHRyLmgiCisjaW5jbHVkZSAibmFtZWkuaCIKKworI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKworc3RydWN0IG9jZnMyX2Nvd19jb250ZXh0IHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXUzMiBjb3dfc3RhcnQ7CisJdTMyIGNvd19sZW47CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGRhdGFfZXQ7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmg7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWM7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWM7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwl2b2lkICpjb3dfb2JqZWN0OworCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpwb3N0X3JlZmNvdW50OworCWludCBleHRyYV9jcmVkaXRzOworCWludCAoKmdldF9jbHVzdGVycykoc3RydWN0IG9jZnMyX2Nvd19jb250ZXh0ICpjb250ZXh0LAorCQkJICAgIHUzMiB2X2NsdXN0ZXIsIHUzMiAqcF9jbHVzdGVyLAorCQkJICAgIHUzMiAqbnVtX2NsdXN0ZXJzLAorCQkJICAgIHVuc2lnbmVkIGludCAqZXh0ZW50X2ZsYWdzKTsKKwlpbnQgKCpjb3dfZHVwbGljYXRlX2NsdXN0ZXJzKShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkgICAgICB1MzIgY3BvcywgdTMyIG9sZF9jbHVzdGVyLAorCQkJCSAgICAgIHUzMiBuZXdfY2x1c3RlciwgdTMyIG5ld19sZW4pOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqCitjYWNoZV9pbmZvX3RvX3JlZmNvdW50KHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2ksIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlLCByZl9jaSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfdmFsaWRhdGVfcmVmY291bnRfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJaW50IHJjOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopYmgtPmJfZGF0YTsKKworCW1sb2coMCwgIlZhbGlkYXRpbmcgcmVmY291bnQgYmxvY2sgJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisKKwlCVUdfT04oIWJ1ZmZlcl91cHRvZGF0ZShiaCkpOworCisJLyoKKwkgKiBJZiB0aGUgZWNjIGZhaWxzLCB3ZSByZXR1cm4gdGhlIGVycm9yIGJ1dCBvdGhlcndpc2UKKwkgKiBsZWF2ZSB0aGUgZmlsZXN5c3RlbSBydW5uaW5nLiAgV2Uga25vdyBhbnkgZXJyb3IgaXMKKwkgKiBsb2NhbCB0byB0aGlzIGJsb2NrLgorCSAqLworCXJjID0gb2NmczJfdmFsaWRhdGVfbWV0YV9lY2Moc2IsIGJoLT5iX2RhdGEsICZyYi0+cmZfY2hlY2spOworCWlmIChyYykgeworCQltbG9nKE1MX0VSUk9SLCAiQ2hlY2tzdW0gZmFpbGVkIGZvciByZWZjb3VudCBibG9jayAlbGx1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCXJldHVybiByYzsKKwl9CisKKworCWlmICghT0NGUzJfSVNfVkFMSURfUkVGQ09VTlRfQkxPQ0socmIpKSB7CisJCW9jZnMyX2Vycm9yKHNiLAorCQkJICAgICJSZWZjb3VudCBibG9jayAjJWxsdSBoYXMgYmFkIHNpZ25hdHVyZSAlLipzIiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsIDcsCisJCQkgICAgcmItPnJmX3NpZ25hdHVyZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsZTY0X3RvX2NwdShyYi0+cmZfYmxrbm8pICE9IGJoLT5iX2Jsb2NrbnIpIHsKKwkJb2NmczJfZXJyb3Ioc2IsCisJCQkgICAgIlJlZmNvdW50IGJsb2NrICMlbGx1IGhhcyBhbiBpbnZhbGlkIHJmX2Jsa25vICIKKwkJCSAgICAib2YgJWxsdSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmItPnJmX2Jsa25vKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsZTMyX3RvX2NwdShyYi0+cmZfZnNfZ2VuZXJhdGlvbikgIT0gT0NGUzJfU0Ioc2IpLT5mc19nZW5lcmF0aW9uKSB7CisJCW9jZnMyX2Vycm9yKHNiLAorCQkJICAgICJSZWZjb3VudCBibG9jayAjJWxsdSBoYXMgYW4gaW52YWxpZCAiCisJCQkgICAgInJmX2ZzX2dlbmVyYXRpb24gb2YgIyV1IiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCisJCQkgICAgbGUzMl90b19jcHUocmItPnJmX2ZzX2dlbmVyYXRpb24pKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHU2NCByYl9ibGtubywKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQoreworCWludCByYzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpiaDsKKworCXJjID0gb2NmczJfcmVhZF9ibG9jayhjaSwgcmJfYmxrbm8sICZ0bXAsCisJCQkgICAgICBvY2ZzMl92YWxpZGF0ZV9yZWZjb3VudF9ibG9jayk7CisKKwkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLworCWlmICghcmMgJiYgISpiaCkKKwkJKmJoID0gdG1wOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdTY0IG9jZnMyX3JlZmNvdW50X2NhY2hlX293bmVyKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZiA9IGNhY2hlX2luZm9fdG9fcmVmY291bnQoY2kpOworCisJcmV0dXJuIHJmLT5yZl9ibGtubzsKK30KKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqCitvY2ZzMl9yZWZjb3VudF9jYWNoZV9nZXRfc3VwZXIoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJmID0gY2FjaGVfaW5mb190b19yZWZjb3VudChjaSk7CisKKwlyZXR1cm4gcmYtPnJmX3NiOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9yZWZjb3VudF9jYWNoZV9sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZiA9IGNhY2hlX2luZm9fdG9fcmVmY291bnQoY2kpOworCisJc3Bpbl9sb2NrKCZyZi0+cmZfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X2NhY2hlX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmYgPSBjYWNoZV9pbmZvX3RvX3JlZmNvdW50KGNpKTsKKworCXNwaW5fdW5sb2NrKCZyZi0+cmZfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X2NhY2hlX2lvX2xvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJmID0gY2FjaGVfaW5mb190b19yZWZjb3VudChjaSk7CisKKwltdXRleF9sb2NrKCZyZi0+cmZfaW9fbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9yZWZjb3VudF9jYWNoZV9pb191bmxvY2soc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJmID0gY2FjaGVfaW5mb190b19yZWZjb3VudChjaSk7CisKKwltdXRleF91bmxvY2soJnJmLT5yZl9pb19tdXRleCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zIG9jZnMyX3JlZmNvdW50X2NhY2hpbmdfb3BzID0geworCS5jb19vd25lcgkJPSBvY2ZzMl9yZWZjb3VudF9jYWNoZV9vd25lciwKKwkuY29fZ2V0X3N1cGVyCQk9IG9jZnMyX3JlZmNvdW50X2NhY2hlX2dldF9zdXBlciwKKwkuY29fY2FjaGVfbG9jawkJPSBvY2ZzMl9yZWZjb3VudF9jYWNoZV9sb2NrLAorCS5jb19jYWNoZV91bmxvY2sJPSBvY2ZzMl9yZWZjb3VudF9jYWNoZV91bmxvY2ssCisJLmNvX2lvX2xvY2sJCT0gb2NmczJfcmVmY291bnRfY2FjaGVfaW9fbG9jaywKKwkuY29faW9fdW5sb2NrCQk9IG9jZnMyX3JlZmNvdW50X2NhY2hlX2lvX3VubG9jaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqCitvY2ZzMl9maW5kX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCBibGtubykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IG9zYi0+b3NiX3JmX2xvY2tfdHJlZS5yYl9ub2RlOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlID0gTlVMTDsKKworCXdoaWxlIChuKSB7CisJCXRyZWUgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSwgcmZfbm9kZSk7CisKKwkJaWYgKGJsa25vIDwgdHJlZS0+cmZfYmxrbm8pCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoYmxrbm8gPiB0cmVlLT5yZl9ibGtubykKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHRyZWU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIG9zYl9sb2NrIGlzIGFscmVhZHkgbG9ja2VkLiAqLworc3RhdGljIHZvaWQgb2NmczJfaW5zZXJ0X3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpuZXcpCit7CisJdTY0IHJmX2Jsa25vID0gbmV3LT5yZl9ibGtubzsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmb3NiLT5vc2JfcmZfbG9ja190cmVlLnJiX25vZGU7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRtcDsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKworCQl0bXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlLAorCQkJICAgICAgIHJmX25vZGUpOworCisJCWlmIChyZl9ibGtubyA8IHRtcC0+cmZfYmxrbm8pCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJmX2Jsa25vID4gdG1wLT5yZl9ibGtubykKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuISAqLworCQkJbWxvZyhNTF9FUlJPUiwgIkR1cGxpY2F0ZSByZWZjb3VudCBibG9jayAlbGx1IGZvdW5kIVxuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZl9ibGtubyk7CisJCQlCVUcoKTsKKwkJfQorCX0KKworCXJiX2xpbmtfbm9kZSgmbmV3LT5yZl9ub2RlLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmbmV3LT5yZl9ub2RlLCAmb3NiLT5vc2JfcmZfbG9ja190cmVlKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZnJlZV9yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlKQoreworCW9jZnMyX21ldGFkYXRhX2NhY2hlX2V4aXQoJnRyZWUtPnJmX2NpKTsKKwlvY2ZzMl9zaW1wbGVfZHJvcF9sb2NrcmVzKE9DRlMyX1NCKHRyZWUtPnJmX3NiKSwgJnRyZWUtPnJmX2xvY2tyZXMpOworCW9jZnMyX2xvY2tfcmVzX2ZyZWUoJnRyZWUtPnJmX2xvY2tyZXMpOworCWtmcmVlKHRyZWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK29jZnMyX2VyYXNlX3JlZmNvdW50X3RyZWVfZnJvbV9saXN0X25vX2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlKQoreworCXJiX2VyYXNlKCZ0cmVlLT5yZl9ub2RlLCAmb3NiLT5vc2JfcmZfbG9ja190cmVlKTsKKwlpZiAob3NiLT5vc2JfcmVmX3RyZWVfbHJ1ICYmIG9zYi0+b3NiX3JlZl90cmVlX2xydSA9PSB0cmVlKQorCQlvc2ItPm9zYl9yZWZfdHJlZV9scnUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9lcmFzZV9yZWZjb3VudF90cmVlX2Zyb21fbGlzdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUpCit7CisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlvY2ZzMl9lcmFzZV9yZWZjb3VudF90cmVlX2Zyb21fbGlzdF9ub19sb2NrKG9zYiwgdHJlZSk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworfQorCit2b2lkIG9jZnMyX2tyZWZfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUgPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUsIHJmX2dldGNudCk7CisKKwlvY2ZzMl9mcmVlX3JlZmNvdW50X3RyZWUodHJlZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb2NmczJfcmVmY291bnRfdHJlZV9nZXQoc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUpCit7CisJa3JlZl9nZXQoJnRyZWUtPnJmX2dldGNudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb2NmczJfcmVmY291bnRfdHJlZV9wdXQoc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUpCit7CisJa3JlZl9wdXQoJnRyZWUtPnJmX2dldGNudCwgb2NmczJfa3JlZl9yZW1vdmVfcmVmY291bnRfdHJlZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9pbml0X3JlZmNvdW50X3RyZWVfY2koc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKm5ldywKKwkJCQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdCgmbmV3LT5yZl9jaSwgJm9jZnMyX3JlZmNvdW50X2NhY2hpbmdfb3BzKTsKKwltdXRleF9pbml0KCZuZXctPnJmX2lvX211dGV4KTsKKwluZXctPnJmX3NiID0gc2I7CisJc3Bpbl9sb2NrX2luaXQoJm5ldy0+cmZfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9pbml0X3JlZmNvdW50X3RyZWVfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKm5ldywKKwkJCQkJdTY0IHJmX2Jsa25vLCB1MzIgZ2VuZXJhdGlvbikKK3sKKwlpbml0X3J3c2VtKCZuZXctPnJmX3NlbSk7CisJb2NmczJfcmVmY291bnRfbG9ja19yZXNfaW5pdCgmbmV3LT5yZl9sb2NrcmVzLCBvc2IsCisJCQkJICAgICByZl9ibGtubywgZ2VuZXJhdGlvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSoKK29jZnMyX2FsbG9jYXRlX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCByZl9ibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqbmV3OworCisJbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUpLCBHRlBfTk9GUyk7CisJaWYgKCFuZXcpCisJCXJldHVybiBOVUxMOworCisJbmV3LT5yZl9ibGtubyA9IHJmX2Jsa25vOworCWtyZWZfaW5pdCgmbmV3LT5yZl9nZXRjbnQpOworCW9jZnMyX2luaXRfcmVmY291bnRfdHJlZV9jaShuZXcsIG9zYi0+c2IpOworCisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIGludCBvY2ZzMl9nZXRfcmVmY291bnRfdHJlZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IHJmX2Jsa25vLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmV0X3RyZWUpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUsICpuZXcgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmVmX3JiOworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlpZiAob3NiLT5vc2JfcmVmX3RyZWVfbHJ1ICYmCisJICAgIG9zYi0+b3NiX3JlZl90cmVlX2xydS0+cmZfYmxrbm8gPT0gcmZfYmxrbm8pCisJCXRyZWUgPSBvc2ItPm9zYl9yZWZfdHJlZV9scnU7CisJZWxzZQorCQl0cmVlID0gb2NmczJfZmluZF9yZWZjb3VudF90cmVlKG9zYiwgcmZfYmxrbm8pOworCWlmICh0cmVlKQorCQlnb3RvIG91dDsKKworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKworCW5ldyA9IG9jZnMyX2FsbG9jYXRlX3JlZmNvdW50X3RyZWUob3NiLCByZl9ibGtubyk7CisJaWYgKCFuZXcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIFdlIG5lZWQgdGhlIGdlbmVyYXRpb24gdG8gY3JlYXRlIHRoZSByZWZjb3VudCB0cmVlIGxvY2sgYW5kIHNpbmNlCisJICogaXQgaXNuJ3QgY2hhbmdlZCBkdXJpbmcgdGhlIHRyZWUgbW9kaWZpY2F0aW9uLCB3ZSBhcmUgc2FmZSBoZXJlIHRvCisJICogcmVhZCB3aXRob3V0IHByb3RlY3Rpb24uCisJICogV2UgYWxzbyBoYXZlIHRvIHB1cmdlIHRoZSBjYWNoZSBhZnRlciB3ZSBjcmVhdGUgdGhlIGxvY2sgc2luY2UgdGhlCisJICogcmVmY291bnQgYmxvY2sgbWF5IGhhdmUgdGhlIHN0YWxlIGRhdGEuIEl0IGNhbiBvbmx5IGJlIHRydXN0ZWQgd2hlbgorCSAqIHdlIGhvbGQgdGhlIHJlZmNvdW50IGxvY2suCisJICovCisJcmV0ID0gb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jaygmbmV3LT5yZl9jaSwgcmZfYmxrbm8sICZyZWZfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCW9jZnMyX21ldGFkYXRhX2NhY2hlX2V4aXQoJm5ldy0+cmZfY2kpOworCQlrZnJlZShuZXcpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9yYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCW5ldy0+cmZfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KHJlZl9yYi0+cmZfZ2VuZXJhdGlvbik7CisJb2NmczJfaW5pdF9yZWZjb3VudF90cmVlX2xvY2sob3NiLCBuZXcsIHJmX2Jsa25vLAorCQkJCSAgICAgIG5ldy0+cmZfZ2VuZXJhdGlvbik7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfcHVyZ2UoJm5ldy0+cmZfY2kpOworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwl0cmVlID0gb2NmczJfZmluZF9yZWZjb3VudF90cmVlKG9zYiwgcmZfYmxrbm8pOworCWlmICh0cmVlKQorCQlnb3RvIG91dDsKKworCW9jZnMyX2luc2VydF9yZWZjb3VudF90cmVlKG9zYiwgbmV3KTsKKworCXRyZWUgPSBuZXc7CisJbmV3ID0gTlVMTDsKKworb3V0OgorCSpyZXRfdHJlZSA9IHRyZWU7CisKKwlvc2ItPm9zYl9yZWZfdHJlZV9scnUgPSB0cmVlOworCisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJaWYgKG5ldykKKwkJb2NmczJfZnJlZV9yZWZjb3VudF90cmVlKG5ldyk7CisKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmNvdW50X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCAqcmVmX2Jsa25vKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2lub2RlX2Jsb2NrKGlub2RlLCAmZGlfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlCVUdfT04oIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSk7CisKKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwkqcmVmX2Jsa25vID0gbGU2NF90b19jcHUoZGktPmlfcmVmY291bnRfbG9jKTsKKwlicmVsc2UoZGlfYmgpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19vY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUsIGludCBydykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gb2NmczJfcmVmY291bnRfbG9jayh0cmVlLCBydyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChydykKKwkJZG93bl93cml0ZSgmdHJlZS0+cmZfc2VtKTsKKwllbHNlCisJCWRvd25fcmVhZCgmdHJlZS0+cmZfc2VtKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBMb2NrIHRoZSByZWZjb3VudCB0cmVlIHBvaW50ZWQgYnkgcmVmX2Jsa25vIGFuZCByZXR1cm4gdGhlIHRyZWUuCisgKiBJbiBtb3N0IGNhc2UsIHdlIGxvY2sgdGhlIHRyZWUgYW5kIHJlYWQgdGhlIHJlZmNvdW50IGJsb2NrLgorICogU28gcmVhZCBpdCBoZXJlIGlmIHRoZSBjYWxsZXIgcmVhbGx5IG5lZWRzIGl0LgorICoKKyAqIElmIHRoZSB0cmVlIGhhcyBiZWVuIHJlLWNyZWF0ZWQgYnkgb3RoZXIgbm9kZSwgaXQgd2lsbCBmcmVlIHRoZQorICogb2xkIG9uZSBhbmQgcmUtY3JlYXRlIGl0LgorICovCitpbnQgb2NmczJfbG9ja19yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJICAgICB1NjQgcmVmX2Jsa25vLCBpbnQgcncsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmV0X3RyZWUsCisJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJlZl9iaCkKK3sKKwlpbnQgcmV0LCBkZWxldGVfdHJlZSA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisKK2FnYWluOgorCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF90cmVlKG9zYiwgcmVmX2Jsa25vLCAmdHJlZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb2NmczJfcmVmY291bnRfdHJlZV9nZXQodHJlZSk7CisKKwlyZXQgPSBfX29jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIHRyZWUsIHJ3KTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJb2NmczJfcmVmY291bnRfdHJlZV9wdXQodHJlZSk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfcmVmY291bnRfYmxvY2soJnRyZWUtPnJmX2NpLCB0cmVlLT5yZl9ibGtubywKKwkJCQkJJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCB0cmVlLCBydyk7CisJCW9jZnMyX3JlZmNvdW50X3RyZWVfcHV0KHRyZWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCS8qCisJICogSWYgdGhlIHJlZmNvdW50IGJsb2NrIGhhcyBiZWVuIGZyZWVkIGFuZCByZS1jcmVhdGVkLCB3ZSBtYXkgbmVlZAorCSAqIHRvIHJlY3JlYXRlIHRoZSByZWZjb3VudCB0cmVlIGFsc28uCisJICoKKwkgKiBIZXJlIHdlIGp1c3QgcmVtb3ZlIHRoZSB0cmVlIGZyb20gdGhlIHJiLXRyZWUsIGFuZCB0aGUgbGFzdAorCSAqIGtyZWYgaG9sZGVyIHdpbGwgdW5sb2NrIGFuZCBkZWxldGUgdGhpcyByZWZjb3VudF90cmVlLgorCSAqIFRoZW4gd2UgZ290byAiYWdhaW4iIGFuZCBvY2ZzMl9nZXRfcmVmY291bnRfdHJlZSB3aWxsIGNyZWF0ZQorCSAqIHRoZSBuZXcgcmVmY291bnQgdHJlZSBmb3IgdXMuCisJICovCisJaWYgKHRyZWUtPnJmX2dlbmVyYXRpb24gIT0gbGUzMl90b19jcHUocmItPnJmX2dlbmVyYXRpb24pKSB7CisJCWlmICghdHJlZS0+cmZfcmVtb3ZlZCkgeworCQkJb2NmczJfZXJhc2VfcmVmY291bnRfdHJlZV9mcm9tX2xpc3Qob3NiLCB0cmVlKTsKKwkJCXRyZWUtPnJmX3JlbW92ZWQgPSAxOworCQkJZGVsZXRlX3RyZWUgPSAxOworCQl9CisKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCB0cmVlLCBydyk7CisJCS8qCisJCSAqIFdlIGdldCBhbiBleHRyYSByZWZlcmVuY2Ugd2hlbiB3ZSBjcmVhdGUgdGhlIHJlZmNvdW50CisJCSAqIHRyZWUsIHNvIGFub3RoZXIgcHV0IHdpbGwgZGVzdHJveSBpdC4KKwkJICovCisJCWlmIChkZWxldGVfdHJlZSkKKwkJCW9jZnMyX3JlZmNvdW50X3RyZWVfcHV0KHRyZWUpOworCQlicmVsc2UocmVmX3Jvb3RfYmgpOworCQlyZWZfcm9vdF9iaCA9IE5VTEw7CisJCWdvdG8gYWdhaW47CisJfQorCisJKnJldF90cmVlID0gdHJlZTsKKwlpZiAocmVmX2JoKSB7CisJCSpyZWZfYmggPSByZWZfcm9vdF9iaDsKKwkJcmVmX3Jvb3RfYmggPSBOVUxMOworCX0KK291dDoKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWVfYnlfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJ3LAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmV0X3RyZWUsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmVmX2JoKQoreworCWludCByZXQ7CisJdTY0IHJlZl9ibGtubzsKKworCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9ibG9jayhpbm9kZSwgJnJlZl9ibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIHJlZl9ibGtubywKKwkJCQkJcncsIHJldF90cmVlLCByZWZfYmgpOworfQorCit2b2lkIG9jZnMyX3VubG9ja19yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlLCBpbnQgcncpCit7CisJaWYgKHJ3KQorCQl1cF93cml0ZSgmdHJlZS0+cmZfc2VtKTsKKwllbHNlCisJCXVwX3JlYWQoJnRyZWUtPnJmX3NlbSk7CisKKwlvY2ZzMl9yZWZjb3VudF91bmxvY2sodHJlZSwgcncpOworCW9jZnMyX3JlZmNvdW50X3RyZWVfcHV0KHRyZWUpOworfQorCit2b2lkIG9jZnMyX3B1cmdlX3JlZmNvdW50X3RyZWVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlOworCXN0cnVjdCByYl9yb290ICpyb290ID0gJm9zYi0+b3NiX3JmX2xvY2tfdHJlZTsKKworCXdoaWxlICgobm9kZSA9IHJiX2xhc3Qocm9vdCkpICE9IE5VTEwpIHsKKwkJdHJlZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlLCByZl9ub2RlKTsKKworCQltbG9nKDAsICJQdXJnZSB0cmVlICVsbHVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHJlZS0+cmZfYmxrbm8pOworCisJCXJiX2VyYXNlKCZ0cmVlLT5yZl9ub2RlLCByb290KTsKKwkJb2NmczJfZnJlZV9yZWZjb3VudF90cmVlKHRyZWUpOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIHJlZmNvdW50IHRyZWUgZm9yIGFuIGlub2RlLgorICogV2UgdGFrZSBmb3IgZ3JhbnRlZCB0aGF0IHRoZSBpbm9kZSBpcyBhbHJlYWR5IGxvY2tlZC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jcmVhdGVfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKm5ld190cmVlID0gTlVMTCwgKnRyZWUgPSBOVUxMOworCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CisJdTMyIG51bV9nb3Q7CisJdTY0IGZpcnN0X2Jsa25vOworCisJQlVHX09OKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpOworCisJbWxvZygwLCAiY3JlYXRlIHRyZWUgZm9yIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKKworCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIDEsICZtZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9SRUZDT1VOVF9UUkVFX0NSRUFURV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShvc2IsIGhhbmRsZSwgbWV0YV9hYywgMSwKKwkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKKwkJCQkgICAmZmlyc3RfYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X3RyZWUgPSBvY2ZzMl9hbGxvY2F0ZV9yZWZjb3VudF90cmVlKG9zYiwgZmlyc3RfYmxrbm8pOworCWlmICghbmV3X3RyZWUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBmaXJzdF9ibGtubyk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoJm5ld190cmVlLT5yZl9jaSwgbmV3X2JoKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgJm5ld190cmVlLT5yZl9jaSwgbmV3X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwkvKiBJbml0aWFsaXplIG9jZnMyX3JlZmNvdW50X2Jsb2NrLiAqLworCXJiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKW5ld19iaC0+Yl9kYXRhOworCW1lbXNldChyYiwgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwlzdHJjcHkoKHZvaWQgKilyYiwgT0NGUzJfUkVGQ09VTlRfQkxPQ0tfU0lHTkFUVVJFKTsKKwlyYi0+cmZfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KG9zYi0+c2xvdF9udW0pOworCXJiLT5yZl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOworCXJiLT5yZl9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIob3NiLT5mc19nZW5lcmF0aW9uKTsKKwlyYi0+cmZfYmxrbm8gPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7CisJcmItPnJmX2NvdW50ID0gY3B1X3RvX2xlMzIoMSk7CisJcmItPnJmX3JlY29yZHMucmxfY291bnQgPQorCQkJY3B1X3RvX2xlMTYob2NmczJfcmVmY291bnRfcmVjc19wZXJfcmIob3NiLT5zYikpOworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJcmItPnJmX2dlbmVyYXRpb24gPSBvc2ItPnNfbmV4dF9nZW5lcmF0aW9uKys7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0hBU19SRUZDT1VOVF9GTDsKKwlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihvaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlkaS0+aV9yZWZjb3VudF9sb2MgPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7CisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKKworCW1sb2coMCwgImNyZWF0ZWQgdHJlZSBmb3IgaW5vZGUgJWx1LCByZWZibG9jayAlbGx1XG4iLAorCSAgICAgaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9uZyBsb25nKWZpcnN0X2Jsa25vKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gaW5pdCB0aGUgdHJlZSBsb2NrIGhlcmUgc2luY2UgaXQgd2lsbCB1c2UKKwkgKiB0aGUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gY3JlYXRlIGl0LgorCSAqLworCW5ld190cmVlLT5yZl9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUocmItPnJmX2dlbmVyYXRpb24pOworCW9jZnMyX2luaXRfcmVmY291bnRfdHJlZV9sb2NrKG9zYiwgbmV3X3RyZWUsIGZpcnN0X2Jsa25vLAorCQkJCSAgICAgIG5ld190cmVlLT5yZl9nZW5lcmF0aW9uKTsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJdHJlZSA9IG9jZnMyX2ZpbmRfcmVmY291bnRfdHJlZShvc2IsIGZpcnN0X2Jsa25vKTsKKworCS8qCisJICogV2UndmUganVzdCBjcmVhdGVkIGEgbmV3IHJlZmNvdW50IHRyZWUgaW4gdGhpcyBibG9jay4gIElmCisJICogd2UgZm91bmQgYSByZWZjb3VudCB0cmVlIG9uIHRoZSBvY2ZzMl9zdXBlciwgaXQgbXVzdCBiZQorCSAqIG9uZSB3ZSBqdXN0IGRlbGV0ZWQuICBXZSBmcmVlIHRoZSBvbGQgdHJlZSBiZWZvcmUKKwkgKiBpbnNlcnRpbmcgdGhlIG5ldyB0cmVlLgorCSAqLworCUJVR19PTih0cmVlICYmIHRyZWUtPnJmX2dlbmVyYXRpb24gPT0gbmV3X3RyZWUtPnJmX2dlbmVyYXRpb24pOworCWlmICh0cmVlKQorCQlvY2ZzMl9lcmFzZV9yZWZjb3VudF90cmVlX2Zyb21fbGlzdF9ub19sb2NrKG9zYiwgdHJlZSk7CisJb2NmczJfaW5zZXJ0X3JlZmNvdW50X3RyZWUob3NiLCBuZXdfdHJlZSk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCW5ld190cmVlID0gTlVMTDsKKwlpZiAodHJlZSkKKwkJb2NmczJfcmVmY291bnRfdHJlZV9wdXQodHJlZSk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKworb3V0OgorCWlmIChuZXdfdHJlZSkgeworCQlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9leGl0KCZuZXdfdHJlZS0+cmZfY2kpOworCQlrZnJlZShuZXdfdHJlZSk7CisJfQorCisJYnJlbHNlKG5ld19iaCk7CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfc2V0X3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgIHU2NCByZWZjb3VudF9sb2MpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZTsKKworCUJVR19PTihvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKTsKKworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZmNvdW50X2xvYywgMSwKKwkJCQkgICAgICAgJnJlZl90cmVlLCAmcmVmX3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfUkVGQ09VTlRfVFJFRV9TRVRfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlLCAmcmVmX3RyZWUtPnJmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCWxlMzJfYWRkX2NwdSgmcmItPnJmX2NvdW50LCAxKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfcm9vdF9iaCk7CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0hBU19SRUZDT1VOVF9GTDsKKwlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihvaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlkaS0+aV9yZWZjb3VudF9sb2MgPSBjcHVfdG9fbGU2NChyZWZjb3VudF9sb2MpOworCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGRpX2JoKTsKKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0OgorCW9jZnMyX3VubG9ja19yZWZjb3VudF90cmVlKG9zYiwgcmVmX3RyZWUsIDEpOworCWJyZWxzZShyZWZfcm9vdF9iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgb2NmczJfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgcmV0LCBkZWxldGVfdHJlZSA9IDA7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYjsKKwlzdHJ1Y3QgaW5vZGUgKmFsbG9jX2lub2RlID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmFsbG9jX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlOworCWludCBjcmVkaXRzID0gT0NGUzJfUkVGQ09VTlRfVFJFRV9SRU1PVkVfQ1JFRElUUzsKKwl1NjQgYmxrID0gMCwgYmdfYmxrbm8gPSAwLCByZWZfYmxrbm8gPSBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpOworCXUxNiBiaXQgPSAwOworCisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCkpCisJCXJldHVybiAwOworCisJQlVHX09OKCFyZWZfYmxrbm8pOworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl9ibGtubywgMSwgJnJlZl90cmVlLCAmYmxrX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilibGtfYmgtPmJfZGF0YTsKKworCS8qCisJICogSWYgd2UgYXJlIHRoZSBsYXN0IHVzZXIsIHdlIG5lZWQgdG8gZnJlZSB0aGUgYmxvY2suCisJICogU28gbG9jayB0aGUgYWxsb2NhdG9yIGFoZWFkLgorCSAqLworCWlmIChsZTMyX3RvX2NwdShyYi0+cmZfY291bnQpID09IDEpIHsKKwkJYmxrID0gbGU2NF90b19jcHUocmItPnJmX2Jsa25vKTsKKwkJYml0ID0gbGUxNl90b19jcHUocmItPnJmX3N1YmFsbG9jX2JpdCk7CisJCWJnX2Jsa25vID0gb2NmczJfd2hpY2hfc3ViYWxsb2NfZ3JvdXAoYmxrLCBiaXQpOworCisJCWFsbG9jX2lub2RlID0gb2NmczJfZ2V0X3N5c3RlbV9maWxlX2lub2RlKG9zYiwKKwkJCQkJRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQkJbGUxNl90b19jcHUocmItPnJmX3N1YmFsbG9jX3Nsb3QpKTsKKwkJaWYgKCFhbGxvY19pbm9kZSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW11dGV4X2xvY2soJmFsbG9jX2lub2RlLT5pX211dGV4KTsKKworCQlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKGFsbG9jX2lub2RlLCAmYWxsb2NfYmgsIDEpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9tdXRleDsKKwkJfQorCisJCWNyZWRpdHMgKz0gT0NGUzJfU1VCQUxMT0NfRlJFRTsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsICZyZWZfdHJlZS0+cmZfY2ksIGJsa19iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzICY9IH5PQ0ZTMl9IQVNfUkVGQ09VTlRfRkw7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYob2ktPmlwX2R5bl9mZWF0dXJlcyk7CisJZGktPmlfcmVmY291bnRfbG9jID0gMDsKKwlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisKKwlsZTMyX2FkZF9jcHUoJnJiLT5yZl9jb3VudCAsIC0xKTsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYmxrX2JoKTsKKworCWlmICghcmItPnJmX2NvdW50KSB7CisJCWRlbGV0ZV90cmVlID0gMTsKKwkJb2NmczJfZXJhc2VfcmVmY291bnRfdHJlZV9mcm9tX2xpc3Qob3NiLCByZWZfdHJlZSk7CisJCXJldCA9IG9jZnMyX2ZyZWVfc3ViYWxsb2NfYml0cyhoYW5kbGUsIGFsbG9jX2lub2RlLAorCQkJCQkgICAgICAgYWxsb2NfYmgsIGJpdCwgYmdfYmxrbm8sIDEpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0X3VubG9jazoKKwlpZiAoYWxsb2NfaW5vZGUpIHsKKwkJb2NmczJfaW5vZGVfdW5sb2NrKGFsbG9jX2lub2RlLCAxKTsKKwkJYnJlbHNlKGFsbG9jX2JoKTsKKwl9CitvdXRfbXV0ZXg6CisJaWYgKGFsbG9jX2lub2RlKSB7CisJCW11dGV4X3VubG9jaygmYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOworCQlpcHV0KGFsbG9jX2lub2RlKTsKKwl9CitvdXQ6CisJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCByZWZfdHJlZSwgMSk7CisJaWYgKGRlbGV0ZV90cmVlKQorCQlvY2ZzMl9yZWZjb3VudF90cmVlX3B1dChyZWZfdHJlZSk7CisJYnJlbHNlKGJsa19iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9maW5kX3JlZmNvdW50X3JlY19pbl9ybChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCQkgIHU2NCBjcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKnJldF9yZWMsCisJCQkJCSAgaW50ICppbmRleCkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKnJlYyA9IE5VTEw7CisKKwlmb3IgKDsgaSA8IGxlMTZfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpOyBpKyspIHsKKwkJcmVjID0gJnJiLT5yZl9yZWNvcmRzLnJsX3JlY3NbaV07CisKKwkJaWYgKGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSArCisJCSAgICBsZTMyX3RvX2NwdShyZWMtPnJfY2x1c3RlcnMpIDw9IGNwb3MpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAobGU2NF90b19jcHUocmVjLT5yX2Nwb3MpID4gY3BvcykKKwkJCWJyZWFrOworCisJCS8qIG9rLCBjcG9zIGZhaWwgaW4gdGhpcyByZWMuIEp1c3QgcmV0dXJuLiAqLworCQlpZiAocmV0X3JlYykKKwkJCSpyZXRfcmVjID0gKnJlYzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJldF9yZWMpIHsKKwkJLyogV2UgbWVldCB3aXRoIGEgaG9sZSBoZXJlLCBzbyBmYWtlIHRoZSByZWMuICovCisJCXJldF9yZWMtPnJfY3BvcyA9IGNwdV90b19sZTY0KGNwb3MpOworCQlyZXRfcmVjLT5yX3JlZmNvdW50ID0gMDsKKwkJaWYgKGkgPCBsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSAmJgorCQkgICAgbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpIDwgY3BvcyArIGxlbikKKwkJCXJldF9yZWMtPnJfY2x1c3RlcnMgPQorCQkJCWNwdV90b19sZTMyKGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSAtIGNwb3MpOworCQllbHNlCisJCQlyZXRfcmVjLT5yX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIobGVuKTsKKwl9CisKK291dDoKKwkqaW5kZXggPSBpOworfQorCisvKgorICogVHJ5IHRvIHJlbW92ZSByZWZjb3VudCB0cmVlLiBUaGUgbWVjaGFuaXNtIGlzOgorICogMSkgQ2hlY2sgd2hldGhlciBpX2NsdXN0ZXJzID09IDAsIGlmIG5vLCBleGl0LgorICogMikgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGlfeGF0dHJfbG9jIGluIGRpbm9kZS4gaWYgeWVzLCBleGl0LgorICogMykgQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGlubGluZSB4YXR0ciBzdG9yZWQgb3V0c2lkZSwgaWYgeWVzLCBleGl0LgorICogNCkgUmVtb3ZlIHRoZSB0cmVlLgorICovCitpbnQgb2NmczJfdHJ5X3JlbW92ZV9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCisJZG93bl93cml0ZSgmb2ktPmlwX3hhdHRyX3NlbSk7CisJZG93bl93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7CisKKwlpZiAob2ktPmlwX2NsdXN0ZXJzKQorCQlnb3RvIG91dDsKKworCWlmICgob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkgJiYgZGktPmlfeGF0dHJfbG9jKQorCQlnb3RvIG91dDsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMICYmCisJICAgIG9jZnMyX2hhc19pbmxpbmVfeGF0dHJfdmFsdWVfb3V0c2lkZShpbm9kZSwgZGkpKQorCQlnb3RvIG91dDsKKworCXJldCA9IG9jZnMyX3JlbW92ZV9yZWZjb3VudF90cmVlKGlub2RlLCBkaV9iaCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworb3V0OgorCXVwX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKKwl1cF93cml0ZSgmb2ktPmlwX3hhdHRyX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHaXZlbiBhIGNwb3MgYW5kIGxlbiwgdHJ5IHRvIGZpbmQgdGhlIHJlZmNvdW50IHJlY29yZCB3aGljaCBjb250YWlucyBjcG9zLgorICogMS4gSWYgY3BvcyBjYW4gYmUgZm91bmQgaW4gb25lIHJlZmNvdW50IHJlY29yZCwgcmV0dXJuIHRoZSByZWNvcmQuCisgKiAyLiBJZiBjcG9zIGNhbid0IGJlIGZvdW5kLCByZXR1cm4gYSBmYWtlIHJlY29yZCB3aGljaCBzdGFydCBmcm9tIGNwb3MKKyAqICAgIGFuZCBlbmQgYXQgYSBzbWFsbCB2YWx1ZSBiZXR3ZWVuIGNwb3MrbGVuIGFuZCBzdGFydCBvZiB0aGUgbmV4dCByZWNvcmQuCisgKiAgICBUaGlzIGZha2UgcmVjb3JkIGhhcyByX3JlZmNvdW50ID0gMC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgIHU2NCBjcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqcmV0X3JlYywKKwkJCQkgIGludCAqaW5kZXgsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfYmgpCit7CisJaW50IHJldCA9IDAsIGksIGZvdW5kOworCXUzMiBsb3dfY3BvczsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICp0bXAsICpyZWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMLCAqcmVmX2xlYWZfYmggPSBOVUxMOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisKKwlpZiAoIShsZTMyX3RvX2NwdShyYi0+cmZfZmxhZ3MpICYgT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCkpIHsKKwkJb2NmczJfZmluZF9yZWZjb3VudF9yZWNfaW5fcmwoY2ksIHJlZl9yb290X2JoLCBjcG9zLCBsZW4sCisJCQkJCSAgICAgIHJldF9yZWMsIGluZGV4KTsKKwkJKnJldF9iaCA9IHJlZl9yb290X2JoOworCQlnZXRfYmgocmVmX3Jvb3RfYmgpOworCQlyZXR1cm4gMDsKKwl9CisKKwllbCA9ICZyYi0+cmZfbGlzdDsKKwlsb3dfY3BvcyA9IGNwb3MgJiBPQ0ZTMl8zMkJJVF9QT1NfTUFTSzsKKworCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihjaSwgZWwsIGxvd19jcG9zLCAmZWJfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKikgZWJfYmgtPmJfZGF0YTsKKwkJZWwgPSAmZWItPmhfbGlzdDsKKworCQlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgeworCQkJb2NmczJfZXJyb3Ioc2IsCisJCQkicmVmY291bnQgdHJlZSAlbGx1IGhhcyBub24gemVybyB0cmVlICIKKwkJCSJkZXB0aCBpbiBsZWFmIGJ0cmVlIHRyZWUgYmxvY2sgJWxsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyllYl9iaC0+Yl9ibG9ja25yKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZm91bmQgPSAwOworCWZvciAoaSA9IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcmVjID0gJmVsLT5sX3JlY3NbaV07CisKKwkJaWYgKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSA8PSBsb3dfY3BvcykgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBhZGp1c3QgbGVuIHdoZW4gd2UgaGF2ZSBvY2ZzMl9leHRlbnRfcmVjIGFmdGVyIGl0LiAqLworCWlmIChmb3VuZCAmJiBpIDwgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxKSB7CisJCXRtcCA9ICZlbC0+bF9yZWNzW2krMV07CisKKwkJaWYgKGxlMzJfdG9fY3B1KHRtcC0+ZV9jcG9zKSA8IGNwb3MgKyBsZW4pCisJCQlsZW4gPSBsZTMyX3RvX2NwdSh0bXAtPmVfY3BvcykgLSBjcG9zOworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfcmVmY291bnRfYmxvY2soY2ksIGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyksCisJCQkJCSZyZWZfbGVhZl9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW9jZnMyX2ZpbmRfcmVmY291bnRfcmVjX2luX3JsKGNpLCByZWZfbGVhZl9iaCwgY3BvcywgbGVuLAorCQkJCSAgICAgIHJldF9yZWMsIGluZGV4KTsKKwkqcmV0X2JoID0gcmVmX2xlYWZfYmg7CitvdXQ6CisJYnJlbHNlKGViX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitlbnVtIG9jZnMyX3JlZl9yZWNfY29udGlnIHsKKwlSRUZfQ09OVElHX05PTkUgPSAwLAorCVJFRl9DT05USUdfTEVGVCwKKwlSRUZfQ09OVElHX1JJR0hULAorCVJFRl9DT05USUdfTEVGVFJJR0hULAorfTsKKworc3RhdGljIGVudW0gb2NmczJfcmVmX3JlY19jb250aWcKKwlvY2ZzMl9yZWZjb3VudF9yZWNfYWRqYWNlbnQoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiwKKwkJCQkgICAgaW50IGluZGV4KQoreworCWlmICgocmItPnJmX3JlY29yZHMucmxfcmVjc1tpbmRleF0ucl9yZWZjb3VudCA9PQorCSAgICByYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4ICsgMV0ucl9yZWZjb3VudCkgJiYKKwkgICAgKGxlNjRfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3JlY3NbaW5kZXhdLnJfY3BvcykgKworCSAgICBsZTMyX3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4XS5yX2NsdXN0ZXJzKSA9PQorCSAgICBsZTY0X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4ICsgMV0ucl9jcG9zKSkpCisJCXJldHVybiBSRUZfQ09OVElHX1JJR0hUOworCisJcmV0dXJuIFJFRl9DT05USUdfTk9ORTsKK30KKworc3RhdGljIGVudW0gb2NmczJfcmVmX3JlY19jb250aWcKKwlvY2ZzMl9yZWZjb3VudF9yZWNfY29udGlnKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIsCisJCQkJICBpbnQgaW5kZXgpCit7CisJZW51bSBvY2ZzMl9yZWZfcmVjX2NvbnRpZyByZXQgPSBSRUZfQ09OVElHX05PTkU7CisKKwlpZiAoaW5kZXggPCBsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSAtIDEpCisJCXJldCA9IG9jZnMyX3JlZmNvdW50X3JlY19hZGphY2VudChyYiwgaW5kZXgpOworCisJaWYgKGluZGV4ID4gMCkgeworCQllbnVtIG9jZnMyX3JlZl9yZWNfY29udGlnIHRtcDsKKworCQl0bXAgPSBvY2ZzMl9yZWZjb3VudF9yZWNfYWRqYWNlbnQocmIsIGluZGV4IC0gMSk7CisKKwkJaWYgKHRtcCA9PSBSRUZfQ09OVElHX1JJR0hUKSB7CisJCQlpZiAocmV0ID09IFJFRl9DT05USUdfUklHSFQpCisJCQkJcmV0ID0gUkVGX0NPTlRJR19MRUZUUklHSFQ7CisJCQllbHNlCisJCQkJcmV0ID0gUkVGX0NPTlRJR19MRUZUOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfcm90YXRlX3JlZmNvdW50X3JlY19sZWZ0KHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIsCisJCQkJCSAgIGludCBpbmRleCkKK3sKKwlCVUdfT04ocmItPnJmX3JlY29yZHMucmxfcmVjc1tpbmRleF0ucl9yZWZjb3VudCAhPQorCSAgICAgICByYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4KzFdLnJfcmVmY291bnQpOworCisJbGUzMl9hZGRfY3B1KCZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4XS5yX2NsdXN0ZXJzLAorCQkgICAgIGxlMzJfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3JlY3NbaW5kZXgrMV0ucl9jbHVzdGVycykpOworCisJaWYgKGluZGV4IDwgbGUxNl90b19jcHUocmItPnJmX3JlY29yZHMucmxfdXNlZCkgLSAyKQorCQltZW1tb3ZlKCZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4ICsgMV0sCisJCQkmcmItPnJmX3JlY29yZHMucmxfcmVjc1tpbmRleCArIDJdLAorCQkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpICoKKwkJCShsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSAtIGluZGV4IC0gMikpOworCisJbWVtc2V0KCZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2xlMTZfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpIC0gMV0sCisJICAgICAgIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJbGUxNl9hZGRfY3B1KCZyYi0+cmZfcmVjb3Jkcy5ybF91c2VkLCAtMSk7Cit9CisKKy8qCisgKiBNZXJnZSB0aGUgcmVmY291bnQgcmVjIGlmIHdlIGFyZSBjb250aWd1b3VzIHdpdGggdGhlIGFkamFjZW50IHJlY3MuCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3JlZmNvdW50X3JlY19tZXJnZShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiLAorCQkJCSAgICAgaW50IGluZGV4KQoreworCWVudW0gb2NmczJfcmVmX3JlY19jb250aWcgY29udGlnID0KKwkJCQlvY2ZzMl9yZWZjb3VudF9yZWNfY29udGlnKHJiLCBpbmRleCk7CisKKwlpZiAoY29udGlnID09IFJFRl9DT05USUdfTk9ORSkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRpZyA9PSBSRUZfQ09OVElHX0xFRlQgfHwgY29udGlnID09IFJFRl9DT05USUdfTEVGVFJJR0hUKSB7CisJCUJVR19PTihpbmRleCA9PSAwKTsKKwkJaW5kZXgtLTsKKwl9CisKKwlvY2ZzMl9yb3RhdGVfcmVmY291bnRfcmVjX2xlZnQocmIsIGluZGV4KTsKKworCWlmIChjb250aWcgPT0gUkVGX0NPTlRJR19MRUZUUklHSFQpCisJCW9jZnMyX3JvdGF0ZV9yZWZjb3VudF9yZWNfbGVmdChyYiwgaW5kZXgpOworfQorCisvKgorICogQ2hhbmdlIHRoZSByZWZjb3VudCBpbmRleGVkIGJ5ICJpbmRleCIgaW4gcmVmX2JoLgorICogSWYgcmVmY291bnQgcmVhY2hlcyAwLCByZW1vdmUgaXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfY2hhbmdlX3JlZmNvdW50X3JlYyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCSAgICAgaW50IGluZGV4LCBpbnQgbWVyZ2UsIGludCBjaGFuZ2UpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0KKwkJCShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0ICpybCA9ICZyYi0+cmZfcmVjb3JkczsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICpyZWMgPSAmcmwtPnJsX3JlY3NbaW5kZXhdOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlLCBjaSwgcmVmX2xlYWZfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwltbG9nKDAsICJjaGFuZ2UgaW5kZXggJWQsIG9sZCBjb3VudCAldSwgY2hhbmdlICVkXG4iLCBpbmRleCwKKwkgICAgIGxlMzJfdG9fY3B1KHJlYy0+cl9yZWZjb3VudCksIGNoYW5nZSk7CisJbGUzMl9hZGRfY3B1KCZyZWMtPnJfcmVmY291bnQsIGNoYW5nZSk7CisKKwlpZiAoIXJlYy0+cl9yZWZjb3VudCkgeworCQlpZiAoaW5kZXggIT0gbGUxNl90b19jcHUocmwtPnJsX3VzZWQpIC0gMSkgeworCQkJbWVtbW92ZShyZWMsIHJlYyArIDEsCisJCQkJKGxlMTZfdG9fY3B1KHJsLT5ybF91c2VkKSAtIGluZGV4IC0gMSkgKgorCQkJCXNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJCQltZW1zZXQoJnJsLT5ybF9yZWNzW2xlMTZfdG9fY3B1KHJsLT5ybF91c2VkKSAtIDFdLAorCQkJICAgICAgIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJCX0KKworCQlsZTE2X2FkZF9jcHUoJnJsLT5ybF91c2VkLCAtMSk7CisJfSBlbHNlIGlmIChtZXJnZSkKKwkJb2NmczJfcmVmY291bnRfcmVjX21lcmdlKHJiLCBpbmRleCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcmVmX2xlYWZfYmgpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2V4cGFuZF9pbmxpbmVfcmVmX3Jvb3QoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKnJlZl9sZWFmX2JoLAorCQkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYykKK3sKKwlpbnQgcmV0OworCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CisJdTMyIG51bV9nb3Q7CisJdTY0IGJsa25vOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKm5ld19yYjsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJvb3RfcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2NsYWltX21ldGFkYXRhKE9DRlMyX1NCKHNiKSwgaGFuZGxlLCBtZXRhX2FjLCAxLAorCQkJCSAgICZzdWJhbGxvY19iaXRfc3RhcnQsICZudW1fZ290LAorCQkJCSAgICZibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW5ld19iaCA9IHNiX2dldGJsayhzYiwgYmxrbm8pOworCWlmIChuZXdfYmggPT0gTlVMTCkgeworCQlyZXQgPSAtRUlPOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShjaSwgbmV3X2JoKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgY2ksIG5ld19iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgb2NmczJfcmVmY291bnRfYmxvY2suCisJICogSXQgc2hvdWxkIGNvbnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIG9sZCByb290LgorCSAqIHNvIGp1c3QgbWVtY3B5IGl0IGFuZCBjaGFuZ2UgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQuCisJICovCisJbWVtY3B5KG5ld19iaC0+Yl9kYXRhLCByZWZfcm9vdF9iaC0+Yl9kYXRhLCBzYi0+c19ibG9ja3NpemUpOworCisJbmV3X3JiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKW5ld19iaC0+Yl9kYXRhOworCW5ld19yYi0+cmZfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KE9DRlMyX1NCKHNiKS0+c2xvdF9udW0pOworCW5ld19yYi0+cmZfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0X3N0YXJ0KTsKKwluZXdfcmItPnJmX2Jsa25vID0gY3B1X3RvX2xlNjQoYmxrbm8pOworCW5ld19yYi0+cmZfY3BvcyA9IGNwdV90b19sZTMyKDApOworCW5ld19yYi0+cmZfcGFyZW50ID0gY3B1X3RvX2xlNjQocmVmX3Jvb3RfYmgtPmJfYmxvY2tucik7CisJbmV3X3JiLT5yZl9mbGFncyA9IGNwdV90b19sZTMyKE9DRlMyX1JFRkNPVU5UX0xFQUZfRkwpOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfYmgpOworCisJLyogTm93IGNoYW5nZSB0aGUgcm9vdC4gKi8KKwltZW1zZXQoJnJvb3RfcmItPnJmX2xpc3QsIDAsIHNiLT5zX2Jsb2Nrc2l6ZSAtCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jaywgcmZfbGlzdCkpOworCXJvb3RfcmItPnJmX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KG9jZnMyX2V4dGVudF9yZWNzX3Blcl9yYihzYikpOworCXJvb3RfcmItPnJmX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIoMSk7CisJcm9vdF9yYi0+cmZfbGlzdC5sX25leHRfZnJlZV9yZWMgPSBjcHVfdG9fbGUxNigxKTsKKwlyb290X3JiLT5yZl9saXN0LmxfcmVjc1swXS5lX2Jsa25vID0gY3B1X3RvX2xlNjQoYmxrbm8pOworCXJvb3RfcmItPnJmX2xpc3QubF9yZWNzWzBdLmVfbGVhZl9jbHVzdGVycyA9IGNwdV90b19sZTE2KDEpOworCXJvb3RfcmItPnJmX2ZsYWdzID0gY3B1X3RvX2xlMzIoT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcmVmX3Jvb3RfYmgpOworCisJbWxvZygwLCAibmV3IGxlYWYgYmxvY2sgJWxsdSwgdXNlZCAldVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubywKKwkgICAgIGxlMTZfdG9fY3B1KG5ld19yYi0+cmZfcmVjb3Jkcy5ybF91c2VkKSk7CisKKwkqcmVmX2xlYWZfYmggPSBuZXdfYmg7CisJbmV3X2JoID0gTlVMTDsKK291dDoKKwlicmVsc2UobmV3X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X3JlY19ub19pbnRlcnNlY3Qoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqcHJldiwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqbmV4dCkKK3sKKwlpZiAob2NmczJfZ2V0X3JlZl9yZWNfbG93X2Nwb3MocHJldikgKyBsZTMyX3RvX2NwdShwcmV2LT5yX2NsdXN0ZXJzKSA8PQorCQlvY2ZzMl9nZXRfcmVmX3JlY19sb3dfY3BvcyhuZXh0KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbXBfcmVmY291bnRfcmVjX2J5X2xvd19jcG9zKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqbCA9IGEsICpyID0gYjsKKwl1MzIgbF9jcG9zID0gb2NmczJfZ2V0X3JlZl9yZWNfbG93X2Nwb3MobCk7CisJdTMyIHJfY3BvcyA9IG9jZnMyX2dldF9yZWZfcmVjX2xvd19jcG9zKHIpOworCisJaWYgKGxfY3BvcyA+IHJfY3BvcykKKwkJcmV0dXJuIDE7CisJaWYgKGxfY3BvcyA8IHJfY3BvcykKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtcF9yZWZjb3VudF9yZWNfYnlfY3Bvcyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKmwgPSBhLCAqciA9IGI7CisJdTY0IGxfY3BvcyA9IGxlNjRfdG9fY3B1KGwtPnJfY3Bvcyk7CisJdTY0IHJfY3BvcyA9IGxlNjRfdG9fY3B1KHItPnJfY3Bvcyk7CisKKwlpZiAobF9jcG9zID4gcl9jcG9zKQorCQlyZXR1cm4gMTsKKwlpZiAobF9jcG9zIDwgcl9jcG9zKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN3YXBfcmVmY291bnRfcmVjKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplKQoreworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKmwgPSBhLCAqciA9IGIsIHRtcDsKKworCXRtcCA9ICooc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqKWw7CisJKihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICopbCA9CisJCQkqKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKilyOworCSooc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqKXIgPSB0bXA7Cit9CisKKy8qCisgKiBUaGUgcmVmY291bnQgY3BvcyBhcmUgb3JkZXJlZCBieSB0aGVpciA2NGJpdCBjcG9zLAorICogQnV0IHdlIHdpbGwgdXNlIHRoZSBsb3cgMzIgYml0IHRvIGJlIHRoZSBlX2Nwb3MgaW4gdGhlIGItdHJlZS4KKyAqIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBwb3MgaXNuJ3QgaW50ZXJzZWN0ZWQgd2l0aCBvdGhlcnMuCisgKgorICogTm90ZTogVGhlIHJlZmNvdW50IGJsb2NrIGlzIGFscmVhZHkgc29ydGVkIGJ5IHRoZWlyIGxvdyAzMiBiaXQgY3BvcywKKyAqICAgICAgIFNvIGp1c3QgdHJ5IHRoZSBtaWRkbGUgcG9zIGZpcnN0LCBhbmQgd2Ugd2lsbCBleGl0IHdoZW4gd2UgZmluZAorICogICAgICAgdGhlIGdvb2QgcG9zaXRpb24uCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZmluZF9yZWZjb3VudF9zcGxpdF9wb3Moc3RydWN0IG9jZnMyX3JlZmNvdW50X2xpc3QgKnJsLAorCQkJCQkgdTMyICpzcGxpdF9wb3MsIGludCAqc3BsaXRfaW5kZXgpCit7CisJaW50IG51bV91c2VkID0gbGUxNl90b19jcHUocmwtPnJsX3VzZWQpOworCWludCBkZWx0YSwgbWlkZGxlID0gbnVtX3VzZWQgLyAyOworCisJZm9yIChkZWx0YSA9IDA7IGRlbHRhIDwgbWlkZGxlOyBkZWx0YSsrKSB7CisJCS8qIExldCdzIGNoZWNrIGRlbHRhIGVhcmxpZXIgdGhhbiBtaWRkbGUgKi8KKwkJaWYgKG9jZnMyX3JlZmNvdW50X3JlY19ub19pbnRlcnNlY3QoCisJCQkJCSZybC0+cmxfcmVjc1ttaWRkbGUgLSBkZWx0YSAtIDFdLAorCQkJCQkmcmwtPnJsX3JlY3NbbWlkZGxlIC0gZGVsdGFdKSkgeworCQkJKnNwbGl0X2luZGV4ID0gbWlkZGxlIC0gZGVsdGE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZvciBldmVuIGNvdW50cywgZG9uJ3Qgd2FsayBvZmYgdGhlIGVuZCAqLworCQlpZiAoKG1pZGRsZSArIGRlbHRhICsgMSkgPT0gbnVtX3VzZWQpCisJCQljb250aW51ZTsKKworCQkvKiBOb3cgdHJ5IGRlbHRhIHBhc3QgbWlkZGxlICovCisJCWlmIChvY2ZzMl9yZWZjb3VudF9yZWNfbm9faW50ZXJzZWN0KAorCQkJCQkmcmwtPnJsX3JlY3NbbWlkZGxlICsgZGVsdGFdLAorCQkJCQkmcmwtPnJsX3JlY3NbbWlkZGxlICsgZGVsdGEgKyAxXSkpIHsKKwkJCSpzcGxpdF9pbmRleCA9IG1pZGRsZSArIGRlbHRhICsgMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGRlbHRhID49IG1pZGRsZSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwkqc3BsaXRfcG9zID0gb2NmczJfZ2V0X3JlZl9yZWNfbG93X2Nwb3MoJnJsLT5ybF9yZWNzWypzcGxpdF9pbmRleF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX2RpdmlkZV9sZWFmX3JlZmNvdW50X2Jsb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmgsCisJCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCwKKwkJCQkJICAgIHUzMiAqc3BsaXRfY3BvcykKK3sKKwlpbnQgc3BsaXRfaW5kZXggPSAwLCBudW1fbW92ZWQsIHJldDsKKwl1MzIgY3BvcyA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfbGlzdCAqcmwgPSAmcmItPnJmX3JlY29yZHM7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpuZXdfcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKW5ld19iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9saXN0ICpuZXdfcmwgPSAmbmV3X3JiLT5yZl9yZWNvcmRzOworCisJbWxvZygwLCAic3BsaXQgb2xkIGxlYWYgcmVmY291bnQgYmxvY2sgJWxsdSwgY291bnQgPSAldSwgdXNlZCA9ICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWZfbGVhZl9iaC0+Yl9ibG9ja25yLAorCSAgICAgbGUzMl90b19jcHUocmwtPnJsX2NvdW50KSwgbGUzMl90b19jcHUocmwtPnJsX3VzZWQpKTsKKworCS8qCisJICogWFhYOiBJbXByb3ZlbWVudCBsYXRlci4KKwkgKiBJZiB3ZSBrbm93IGFsbCB0aGUgaGlnaCAzMiBiaXQgY3BvcyBpcyB0aGUgc2FtZSwgbm8gbmVlZCB0byBzb3J0LgorCSAqCisJICogSW4gb3JkZXIgdG8gbWFrZSB0aGUgd2hvbGUgcHJvY2VzcyBzYWZlLCB3ZSBkbzoKKwkgKiAxLiBzb3J0IHRoZSBlbnRyaWVzIGJ5IHRoZWlyIGxvdyAzMiBiaXQgY3BvcyBmaXJzdCBzbyB0aGF0IHdlIGNhbgorCSAqICAgIGZpbmQgdGhlIHNwbGl0IGNwb3MgZWFzaWx5LgorCSAqIDIuIGNhbGwgb2NmczJfaW5zZXJ0X2V4dGVudCB0byBpbnNlcnQgdGhlIG5ldyByZWZjb3VudCBibG9jay4KKwkgKiAzLiBtb3ZlIHRoZSByZWZjb3VudCByZWMgdG8gdGhlIG5ldyBibG9jay4KKwkgKiA0LiBzb3J0IHRoZSBlbnRyaWVzIGJ5IHRoZWlyIDY0IGJpdCBjcG9zLgorCSAqIDUuIGRpcnR5IHRoZSBuZXdfcmIgYW5kIHJiLgorCSAqLworCXNvcnQoJnJsLT5ybF9yZWNzLCBsZTE2X3RvX2NwdShybC0+cmxfdXNlZCksCisJICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyksCisJICAgICBjbXBfcmVmY291bnRfcmVjX2J5X2xvd19jcG9zLCBzd2FwX3JlZmNvdW50X3JlYyk7CisKKwlyZXQgPSBvY2ZzMl9maW5kX3JlZmNvdW50X3NwbGl0X3BvcyhybCwgJmNwb3MsICZzcGxpdF9pbmRleCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbmV3X3JiLT5yZl9jcG9zID0gY3B1X3RvX2xlMzIoY3Bvcyk7CisKKwkvKiBtb3ZlIHJlZmNvdW50IHJlY29yZHMgc3RhcnRpbmcgZnJvbSBzcGxpdF9pbmRleCB0byB0aGUgbmV3IGJsb2NrLiAqLworCW51bV9tb3ZlZCA9IGxlMTZfdG9fY3B1KHJsLT5ybF91c2VkKSAtIHNwbGl0X2luZGV4OworCW1lbWNweShuZXdfcmwtPnJsX3JlY3MsICZybC0+cmxfcmVjc1tzcGxpdF9pbmRleF0sCisJICAgICAgIG51bV9tb3ZlZCAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisKKwkvKm9rLCByZW1vdmUgdGhlIGVudHJpZXMgd2UganVzdCBtb3ZlZCBvdmVyIHRvIHRoZSBvdGhlciBibG9jay4gKi8KKwltZW1zZXQoJnJsLT5ybF9yZWNzW3NwbGl0X2luZGV4XSwgMCwKKwkgICAgICAgbnVtX21vdmVkICogc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpKTsKKworCS8qIGNoYW5nZSBvbGQgYW5kIG5ldyBybF91c2VkIGFjY29yZGluZ2x5LiAqLworCWxlMTZfYWRkX2NwdSgmcmwtPnJsX3VzZWQsIC1udW1fbW92ZWQpOworCW5ld19ybC0+cmxfdXNlZCA9IGNwdV90b19sZTMyKG51bV9tb3ZlZCk7CisKKwlzb3J0KCZybC0+cmxfcmVjcywgbGUxNl90b19jcHUocmwtPnJsX3VzZWQpLAorCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpLAorCSAgICAgY21wX3JlZmNvdW50X3JlY19ieV9jcG9zLCBzd2FwX3JlZmNvdW50X3JlYyk7CisKKwlzb3J0KCZuZXdfcmwtPnJsX3JlY3MsIGxlMTZfdG9fY3B1KG5ld19ybC0+cmxfdXNlZCksCisJICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyksCisJICAgICBjbXBfcmVmY291bnRfcmVjX2J5X2Nwb3MsIHN3YXBfcmVmY291bnRfcmVjKTsKKworCSpzcGxpdF9jcG9zID0gY3BvczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl9uZXdfbGVhZl9yZWZjb3VudF9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfbGVhZl9iaCwKKwkJCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQoreworCWludCByZXQ7CisJdTE2IHN1YmFsbG9jX2JpdF9zdGFydDsKKwl1MzIgbnVtX2dvdCwgbmV3X2Nwb3M7CisJdTY0IGJsa25vOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcm9vdF9yYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpuZXdfcmI7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIHJlZl9ldDsKKworCUJVR19PTighKGxlMzJfdG9fY3B1KHJvb3RfcmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfcmIoaGFuZGxlLCBjaSwgcmVmX2xlYWZfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShPQ0ZTMl9TQihzYiksIGhhbmRsZSwgbWV0YV9hYywgMSwKKwkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKKwkJCQkgICAmYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwluZXdfYmggPSBzYl9nZXRibGsoc2IsIGJsa25vKTsKKwlpZiAobmV3X2JoID09IE5VTEwpIHsKKwkJcmV0ID0gLUVJTzsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoY2ksIG5ld19iaCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCBuZXdfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSBvY2ZzMl9yZWZjb3VudF9ibG9jay4gKi8KKwluZXdfcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7CisJbWVtc2V0KG5ld19yYiwgMCwgc2ItPnNfYmxvY2tzaXplKTsKKwlzdHJjcHkoKHZvaWQgKiluZXdfcmIsIE9DRlMyX1JFRkNPVU5UX0JMT0NLX1NJR05BVFVSRSk7CisJbmV3X3JiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYoT0NGUzJfU0Ioc2IpLT5zbG90X251bSk7CisJbmV3X3JiLT5yZl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOworCW5ld19yYi0+cmZfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKE9DRlMyX1NCKHNiKS0+ZnNfZ2VuZXJhdGlvbik7CisJbmV3X3JiLT5yZl9ibGtubyA9IGNwdV90b19sZTY0KGJsa25vKTsKKwluZXdfcmItPnJmX3BhcmVudCA9IGNwdV90b19sZTY0KHJlZl9yb290X2JoLT5iX2Jsb2NrbnIpOworCW5ld19yYi0+cmZfZmxhZ3MgPSBjcHVfdG9fbGUzMihPQ0ZTMl9SRUZDT1VOVF9MRUFGX0ZMKTsKKwluZXdfcmItPnJmX3JlY29yZHMucmxfY291bnQgPQorCQkJCWNwdV90b19sZTE2KG9jZnMyX3JlZmNvdW50X3JlY3NfcGVyX3JiKHNiKSk7CisJbmV3X3JiLT5yZl9nZW5lcmF0aW9uID0gcm9vdF9yYi0+cmZfZ2VuZXJhdGlvbjsKKworCXJldCA9IG9jZnMyX2RpdmlkZV9sZWFmX3JlZmNvdW50X2Jsb2NrKHJlZl9sZWFmX2JoLCBuZXdfYmgsICZuZXdfY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfbGVhZl9iaCk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CisKKwlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZyZWZfZXQsIGNpLCByZWZfcm9vdF9iaCk7CisKKwltbG9nKDAsICJpbnNlcnQgbmV3IGxlYWYgYmxvY2sgJWxsdSBhdCAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X2JoLT5iX2Jsb2NrbnIsIG5ld19jcG9zKTsKKworCS8qIEluc2VydCB0aGUgbmV3IGxlYWYgYmxvY2sgd2l0aCB0aGUgc3BlY2lmaWMgb2Zmc2V0IGNwb3MuICovCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZyZWZfZXQsIG5ld19jcG9zLCBuZXdfYmgtPmJfYmxvY2tuciwKKwkJCQkgIDEsIDAsIG1ldGFfYWMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCWJyZWxzZShuZXdfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZXhwYW5kX3JlZmNvdW50X3RyZWUoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmgsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4cGFuZF9iaCA9IE5VTEw7CisKKwlpZiAocmVmX3Jvb3RfYmggPT0gcmVmX2xlYWZfYmgpIHsKKwkJLyoKKwkJICogdGhlIG9sZCByb290IGJoIGhhc24ndCBiZWVuIGV4cGFuZGVkIHRvIGEgYi10cmVlLAorCQkgKiBzbyBleHBhbmQgaXQgZmlyc3QuCisJCSAqLworCQlyZXQgPSBvY2ZzMl9leHBhbmRfaW5saW5lX3JlZl9yb290KGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkJICAgJmV4cGFuZF9iaCwgbWV0YV9hYyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJZXhwYW5kX2JoID0gcmVmX2xlYWZfYmg7CisJCWdldF9iaChleHBhbmRfYmgpOworCX0KKworCisJLyogTm93IGFkZCBhIG5ldyByZWZjb3VudCBibG9jayBpbnRvIHRoZSB0cmVlLiovCisJcmV0ID0gb2NmczJfbmV3X2xlYWZfcmVmY291bnRfYmxvY2soaGFuZGxlLCBjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgICBleHBhbmRfYmgsIG1ldGFfYWMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlicmVsc2UoZXhwYW5kX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQWRqdXN0IHRoZSBleHRlbnQgcmVjIGluIGItdHJlZSByZXByZXNlbnRpbmcgcmVmX2xlYWZfYmguCisgKgorICogT25seSBjYWxsZWQgd2hlbiB3ZSBoYXZlIGluc2VydGVkIGEgbmV3IHJlZmNvdW50IHJlYyBhdCBpbmRleCAwCisgKiB3aGljaCBtZWFucyBvY2ZzMl9leHRlbnRfcmVjLmVfY3BvcyBtYXkgbmVlZCBzb21lIGNoYW5nZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl9hZGp1c3RfcmVmY291bnRfcmVjKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqcmVjKQoreworCWludCByZXQgPSAwLCBpOworCXUzMiBuZXdfY3Bvcywgb2xkX2Nwb3M7CisJc3RydWN0IG9jZnMyX3BhdGggKnBhdGggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0KKwkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKKworCWlmICghKGxlMzJfdG9fY3B1KHJiLT5yZl9mbGFncykgJiBPQ0ZTMl9SRUZDT1VOVF9UUkVFX0ZMKSkKKwkJZ290byBvdXQ7CisKKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCW9sZF9jcG9zID0gbGUzMl90b19jcHUocmItPnJmX2Nwb3MpOworCW5ld19jcG9zID0gbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpICYgT0NGUzJfMzJCSVRfUE9TX01BU0s7CisJaWYgKG9sZF9jcG9zIDw9IG5ld19jcG9zKQorCQlnb3RvIG91dDsKKworCW9jZnMyX2luaXRfcmVmY291bnRfZXh0ZW50X3RyZWUoJmV0LCBjaSwgcmVmX3Jvb3RfYmgpOworCisJcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoJmV0KTsKKwlpZiAoIXBhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIHBhdGgsIG9sZF9jcG9zKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAyIG1vcmUgY3JlZGl0cywgb25lIGZvciB0aGUgbGVhZiByZWZjb3VudCBibG9jaywgb25lIGZvcgorCSAqIHRoZSBleHRlbnQgYmxvY2sgY29udGFpbnMgdGhlIGV4dGVudCByZWMuCisJICovCisJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzICsgMik7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19lYihoYW5kbGUsIGNpLCBwYXRoX2xlYWZfYmgocGF0aCksCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hhbmdlIHRoZSBsZWFmIGV4dGVudCBibG9jayBmaXJzdC4gKi8KKwllbCA9IHBhdGhfbGVhZl9lbChwYXRoKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKQorCQlpZiAobGUzMl90b19jcHUoZWwtPmxfcmVjc1tpXS5lX2Nwb3MpID09IG9sZF9jcG9zKQorCQkJYnJlYWs7CisKKwlCVUdfT04oaSA9PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSk7CisKKwllbC0+bF9yZWNzW2ldLmVfY3BvcyA9IGNwdV90b19sZTMyKG5ld19jcG9zKTsKKworCS8qIGNoYW5nZSB0aGUgcl9jcG9zIGluIHRoZSBsZWFmIGJsb2NrLiAqLworCXJiLT5yZl9jcG9zID0gY3B1X3RvX2xlMzIobmV3X2Nwb3MpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHBhdGhfbGVhZl9iaChwYXRoKSk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHJlZl9sZWFmX2JoKTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2luc2VydF9yZWZjb3VudF9yZWMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmgsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjICpyZWMsCisJCQkJICAgICBpbnQgaW5kZXgsIGludCBtZXJnZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfbGlzdCAqcmZfbGlzdCA9ICZyYi0+cmZfcmVjb3JkczsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CisKKwlCVUdfT04obGUzMl90b19jcHUocmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpOworCisJaWYgKHJmX2xpc3QtPnJsX3VzZWQgPT0gcmZfbGlzdC0+cmxfY291bnQpIHsKKwkJdTY0IGNwb3MgPSBsZTY0X3RvX2NwdShyZWMtPnJfY3Bvcyk7CisJCXUzMiBsZW4gPSBsZTMyX3RvX2NwdShyZWMtPnJfY2x1c3RlcnMpOworCisJCXJldCA9IG9jZnMyX2V4cGFuZF9yZWZjb3VudF90cmVlKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkJIHJlZl9sZWFmX2JoLCBtZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKGNpLCByZWZfcm9vdF9iaCwKKwkJCQkJICAgICBjcG9zLCBsZW4sIE5VTEwsICZpbmRleCwKKwkJCQkJICAgICAmbmV3X2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZWZfbGVhZl9iaCA9IG5ld19iaDsKKwkJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwkJcmZfbGlzdCA9ICZyYi0+cmZfcmVjb3JkczsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpbmRleCA8IGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpKQorCQltZW1tb3ZlKCZyZl9saXN0LT5ybF9yZWNzW2luZGV4ICsgMV0sCisJCQkmcmZfbGlzdC0+cmxfcmVjc1tpbmRleF0sCisJCQkobGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgLSBpbmRleCkgKgorCQkJIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisKKwltbG9nKDAsICJpbnNlcnQgcmVmY291bnQgcmVjb3JkIHN0YXJ0ICVsbHUsIGxlbiAldSwgY291bnQgJXUgIgorCSAgICAgInRvIGxlYWYgYmxvY2sgJWxsdSBhdCBpbmRleCAlZFxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpLAorCSAgICAgbGUzMl90b19jcHUocmVjLT5yX2NsdXN0ZXJzKSwgbGUzMl90b19jcHUocmVjLT5yX3JlZmNvdW50KSwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVmX2xlYWZfYmgtPmJfYmxvY2tuciwgaW5kZXgpOworCisJcmZfbGlzdC0+cmxfcmVjc1tpbmRleF0gPSAqcmVjOworCisJbGUxNl9hZGRfY3B1KCZyZl9saXN0LT5ybF91c2VkLCAxKTsKKworCWlmIChtZXJnZSkKKwkJb2NmczJfcmVmY291bnRfcmVjX21lcmdlKHJiLCBpbmRleCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcmVmX2xlYWZfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5kZXggPT0gMCkgeworCQlyZXQgPSBvY2ZzMl9hZGp1c3RfcmVmY291bnRfcmVjKGhhbmRsZSwgY2ksCisJCQkJCQlyZWZfcm9vdF9iaCwKKwkJCQkJCXJlZl9sZWFmX2JoLCByZWMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KK291dDoKKwlicmVsc2UobmV3X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU3BsaXQgdGhlIHJlZmNvdW50X3JlYyBpbmRleGVkIGJ5ICJpbmRleCIgaW4gcmVmX2xlYWZfYmguCisgKiBUaGlzIGlzIG11Y2ggc2ltcGxlIHRoYW4gb3VyIGItdHJlZSBjb2RlLgorICogc3BsaXRfcmVjIGlzIHRoZSBuZXcgcmVmY291bnQgcmVjIHdlIHdhbnQgdG8gaW5zZXJ0LgorICogSWYgc3BsaXRfcmVjLT5yX3JlZmNvdW50ID4gMCwgd2UgYXJlIGNoYW5naW5nIHRoZSByZWZjb3VudChpbiBjYXNlIHdlCisgKiBpbmNyZWFzZSByZWZjb3VudCBvciBkZWNyZWFzZSBhIHJlZmNvdW50IHRvIG5vbi16ZXJvKS4KKyAqIElmIHNwbGl0X3JlYy0+cl9yZWZjb3VudCA9PSAwLCB3ZSBhcmUgcHVuY2hpbmcgYSBob2xlIGluIGN1cnJlbnQgcmVmY291bnQKKyAqIHJlYyggaW4gY2FzZSB3ZSBkZWNyZWFzZSBhIHJlZmNvdW50IHRvIHplcm8pLgorICovCitzdGF0aWMgaW50IG9jZnMyX3NwbGl0X3JlZmNvdW50X3JlYyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfbGVhZl9iaCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqc3BsaXRfcmVjLAorCQkJCSAgICBpbnQgaW5kZXgsIGludCBtZXJnZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCWludCByZXQsIHJlY3NfbmVlZDsKKwl1MzIgbGVuOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9sZWFmX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2xpc3QgKnJmX2xpc3QgPSAmcmItPnJmX3JlY29yZHM7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqb3JpZ19yZWMgPSAmcmZfbGlzdC0+cmxfcmVjc1tpbmRleF07CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyAqdGFpbF9yZWMgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKKworCUJVR19PTihsZTMyX3RvX2NwdShyYi0+cmZfZmxhZ3MpICYgT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCk7CisKKwltbG9nKDAsICJvcmlnaW5hbCByX3BvcyAlbGx1LCBjbHVzdGVyICV1LCBzcGxpdCAlbGx1LCBjbHVzdGVyICV1XG4iLAorCSAgICAgbGU2NF90b19jcHUob3JpZ19yZWMtPnJfY3BvcyksIGxlMzJfdG9fY3B1KG9yaWdfcmVjLT5yX2NsdXN0ZXJzKSwKKwkgICAgIGxlNjRfdG9fY3B1KHNwbGl0X3JlYy0+cl9jcG9zKSwKKwkgICAgIGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+cl9jbHVzdGVycykpOworCisJLyoKKwkgKiBJZiB3ZSBqdXN0IG5lZWQgdG8gc3BsaXQgdGhlIGhlYWRlciBvciB0YWlsIGNsdXN0ZXJzLAorCSAqIG5vIG1vcmUgcmVjcyBhcmUgbmVlZGVkLCBqdXN0IHNwbGl0IGlzIE9LLgorCSAqIE90aGVyd2lzZSB3ZSBhdCBsZWFzdCBuZWVkIG9uZSBuZXcgcmVjcy4KKwkgKi8KKwlpZiAoIXNwbGl0X3JlYy0+cl9yZWZjb3VudCAmJgorCSAgICAoc3BsaXRfcmVjLT5yX2Nwb3MgPT0gb3JpZ19yZWMtPnJfY3BvcyB8fAorCSAgICAgbGU2NF90b19jcHUoc3BsaXRfcmVjLT5yX2Nwb3MpICsKKwkgICAgIGxlMzJfdG9fY3B1KHNwbGl0X3JlYy0+cl9jbHVzdGVycykgPT0KKwkgICAgIGxlNjRfdG9fY3B1KG9yaWdfcmVjLT5yX2Nwb3MpICsgbGUzMl90b19jcHUob3JpZ19yZWMtPnJfY2x1c3RlcnMpKSkKKwkJcmVjc19uZWVkID0gMDsKKwllbHNlCisJCXJlY3NfbmVlZCA9IDE7CisKKwkvKgorCSAqIFdlIG5lZWQgb25lIG1vcmUgcmVjIGlmIHdlIHNwbGl0IGluIHRoZSBtaWRkbGUgYW5kIHRoZSBuZXcgcmVjIGhhdmUKKwkgKiBzb21lIHJlZmNvdW50IGluIGl0LgorCSAqLworCWlmIChzcGxpdF9yZWMtPnJfcmVmY291bnQgJiYKKwkgICAgKHNwbGl0X3JlYy0+cl9jcG9zICE9IG9yaWdfcmVjLT5yX2Nwb3MgJiYKKwkgICAgIGxlNjRfdG9fY3B1KHNwbGl0X3JlYy0+cl9jcG9zKSArCisJICAgICBsZTMyX3RvX2NwdShzcGxpdF9yZWMtPnJfY2x1c3RlcnMpICE9CisJICAgICBsZTY0X3RvX2NwdShvcmlnX3JlYy0+cl9jcG9zKSArIGxlMzJfdG9fY3B1KG9yaWdfcmVjLT5yX2NsdXN0ZXJzKSkpCisJCXJlY3NfbmVlZCsrOworCisJLyogSWYgdGhlIGxlYWYgYmxvY2sgZG9uJ3QgaGF2ZSBlbm91Z2ggcmVjb3JkLCBleHBhbmQgaXQuICovCisJaWYgKGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpICsgcmVjc19uZWVkID4gcmZfbGlzdC0+cmxfY291bnQpIHsKKwkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyB0bXBfcmVjOworCQl1NjQgY3BvcyA9IGxlNjRfdG9fY3B1KG9yaWdfcmVjLT5yX2Nwb3MpOworCQlsZW4gPSBsZTMyX3RvX2NwdShvcmlnX3JlYy0+cl9jbHVzdGVycyk7CisJCXJldCA9IG9jZnMyX2V4cGFuZF9yZWZjb3VudF90cmVlKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkJIHJlZl9sZWFmX2JoLCBtZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBXZSBoYXZlIHRvIHJlLWdldCBpdCBzaW5jZSBub3cgY3BvcyBtYXkgYmUgbW92ZWQgdG8KKwkJICogYW5vdGhlciBsZWFmIGJsb2NrLgorCQkgKi8KKwkJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3JlYyhjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgICAgY3BvcywgbGVuLCAmdG1wX3JlYywgJmluZGV4LAorCQkJCQkgICAgICZuZXdfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJlZl9sZWFmX2JoID0gbmV3X2JoOworCQlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCQlyZl9saXN0ID0gJnJiLT5yZl9yZWNvcmRzOworCQlvcmlnX3JlYyA9ICZyZl9saXN0LT5ybF9yZWNzW2luZGV4XTsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19yYihoYW5kbGUsIGNpLCByZWZfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgaGF2ZSBjYWxjdWxhdGVkIG91dCBob3cgbWFueSBuZXcgcmVjb3JkcyB3ZSBuZWVkIGFuZCBzdG9yZQorCSAqIGluIHJlY3NfbmVlZCwgc28gc3BhcmUgZW5vdWdoIHNwYWNlIGZpcnN0IGJ5IG1vdmluZyB0aGUgcmVjb3JkcworCSAqIGFmdGVyICJpbmRleCIgdG8gdGhlIGVuZC4KKwkgKi8KKwlpZiAoaW5kZXggIT0gbGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgLSAxKQorCQltZW1tb3ZlKCZyZl9saXN0LT5ybF9yZWNzW2luZGV4ICsgMSArIHJlY3NfbmVlZF0sCisJCQkmcmZfbGlzdC0+cmxfcmVjc1tpbmRleCArIDFdLAorCQkJKGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpIC0gaW5kZXggLSAxKSAqCisJCQkgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpKTsKKworCWxlbiA9IChsZTY0X3RvX2NwdShvcmlnX3JlYy0+cl9jcG9zKSArCisJICAgICAgbGUzMl90b19jcHUob3JpZ19yZWMtPnJfY2x1c3RlcnMpKSAtCisJICAgICAgKGxlNjRfdG9fY3B1KHNwbGl0X3JlYy0+cl9jcG9zKSArCisJICAgICAgbGUzMl90b19jcHUoc3BsaXRfcmVjLT5yX2NsdXN0ZXJzKSk7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgImxlbiIsIHRoZSB3ZSB3aWxsIHNwbGl0IGluIHRoZSB0YWlsIGFuZCBtb3ZlIGl0CisJICogdG8gdGhlIGVuZCBvZiB0aGUgc3BhY2Ugd2UgaGF2ZSBqdXN0IHNwYXJlZC4KKwkgKi8KKwlpZiAobGVuKSB7CisJCXRhaWxfcmVjID0gJnJmX2xpc3QtPnJsX3JlY3NbaW5kZXggKyByZWNzX25lZWRdOworCisJCW1lbWNweSh0YWlsX3JlYywgb3JpZ19yZWMsIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSk7CisJCWxlNjRfYWRkX2NwdSgmdGFpbF9yZWMtPnJfY3BvcywKKwkJCSAgICAgbGUzMl90b19jcHUodGFpbF9yZWMtPnJfY2x1c3RlcnMpIC0gbGVuKTsKKwkJdGFpbF9yZWMtPnJfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShsZW4pOworCX0KKworCS8qCisJICogSWYgdGhlIHNwbGl0IHBvcyBpc24ndCB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgb25lLCB3ZSBuZWVkIHRvCisJICogc3BsaXQgaW4gdGhlIGhlYWQuCisJICoKKwkgKiBOb3RlOiBXZSBoYXZlIHRoZSBjaGFuY2UgdGhhdCBzcGxpdF9yZWMucl9yZWZjb3VudCA9IDAsCisJICogcmVjc19uZWVkID0gMCBhbmQgbGVuID4gMCwgd2hpY2ggbWVhbnMgd2UganVzdCBjdXQgdGhlIGhlYWQgZnJvbQorCSAqIHRoZSBvcmlnX3JlYyBhbmQgaW4gdGhhdCBjYXNlIHdlIGhhdmUgZG9uZSBzb21lIG1vZGlmaWNhdGlvbiBpbgorCSAqIG9yaWdfcmVjIGFib3ZlLCBzbyB0aGUgY2hlY2sgZm9yIHJfY3BvcyBpcyBmYWtlZC4KKwkgKi8KKwlpZiAoc3BsaXRfcmVjLT5yX2Nwb3MgIT0gb3JpZ19yZWMtPnJfY3BvcyAmJiB0YWlsX3JlYyAhPSBvcmlnX3JlYykgeworCQlsZW4gPSBsZTY0X3RvX2NwdShzcGxpdF9yZWMtPnJfY3BvcykgLQorCQkgICAgICBsZTY0X3RvX2NwdShvcmlnX3JlYy0+cl9jcG9zKTsKKwkJb3JpZ19yZWMtPnJfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMihsZW4pOworCQlpbmRleCsrOworCX0KKworCWxlMTZfYWRkX2NwdSgmcmZfbGlzdC0+cmxfdXNlZCwgcmVjc19uZWVkKTsKKworCWlmIChzcGxpdF9yZWMtPnJfcmVmY291bnQpIHsKKwkJcmZfbGlzdC0+cmxfcmVjc1tpbmRleF0gPSAqc3BsaXRfcmVjOworCQltbG9nKDAsICJpbnNlcnQgcmVmY291bnQgcmVjb3JkIHN0YXJ0ICVsbHUsIGxlbiAldSwgY291bnQgJXUgIgorCQkgICAgICJ0byBsZWFmIGJsb2NrICVsbHUgYXQgaW5kZXggJWRcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShzcGxpdF9yZWMtPnJfY3BvcyksCisJCSAgICAgbGUzMl90b19jcHUoc3BsaXRfcmVjLT5yX2NsdXN0ZXJzKSwKKwkJICAgICBsZTMyX3RvX2NwdShzcGxpdF9yZWMtPnJfcmVmY291bnQpLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVmX2xlYWZfYmgtPmJfYmxvY2tuciwgaW5kZXgpOworCisJCWlmIChtZXJnZSkKKwkJCW9jZnMyX3JlZmNvdW50X3JlY19tZXJnZShyYiwgaW5kZXgpOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfbGVhZl9iaCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJYnJlbHNlKG5ld19iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX29jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICB1NjQgY3BvcywgdTMyIGxlbiwgaW50IG1lcmdlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlpbnQgcmV0ID0gMCwgaW5kZXg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfbGVhZl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyByZWM7CisJdW5zaWduZWQgaW50IHNldF9sZW4gPSAwOworCisJbWxvZygwLCAiVHJlZSBvd25lciAlbGx1LCBhZGQgcmVmY291bnQgc3RhcnQgJWxsdSwgbGVuICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIGxlbik7CisKKwl3aGlsZSAobGVuKSB7CisJCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9yZWMoY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgIGNwb3MsIGxlbiwgJnJlYywgJmluZGV4LAorCQkJCQkgICAgICZyZWZfbGVhZl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJc2V0X2xlbiA9IGxlMzJfdG9fY3B1KHJlYy5yX2NsdXN0ZXJzKTsKKworCQkvKgorCQkgKiBIZXJlIHdlIG1heSBtZWV0IHdpdGggMyBzaXR1YXRpb25zOgorCQkgKgorCQkgKiAxLiBJZiB3ZSBmaW5kIGFuIGFscmVhZHkgZXhpc3RpbmcgcmVjb3JkLCBhbmQgdGhlIGxlbmd0aAorCQkgKiAgICBpcyB0aGUgc2FtZSwgY29vbCwgd2UganVzdCBuZWVkIHRvIGluY3JlYXNlIHRoZSByX3JlZmNvdW50CisJCSAqICAgIGFuZCBpdCBpcyBPSy4KKwkJICogMi4gSWYgd2UgZmluZCBhIGhvbGUsIGp1c3QgaW5zZXJ0IGl0IHdpdGggcl9yZWZjb3VudCA9IDEuCisJCSAqIDMuIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIG9uZSBleHRlbnQgcmVjb3JkLCBzcGxpdAorCQkgKiAgICBpdC4KKwkJICovCisJCWlmIChyZWMucl9yZWZjb3VudCAmJiBsZTY0X3RvX2NwdShyZWMucl9jcG9zKSA9PSBjcG9zICYmCisJCSAgICBzZXRfbGVuIDw9IGxlbikgeworCQkJbWxvZygwLCAiaW5jcmVhc2UgcmVmY291bnQgcmVjLCBzdGFydCAlbGx1LCBsZW4gJXUsICIKKwkJCSAgICAgImNvdW50ICV1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIHNldF9sZW4sCisJCQkgICAgIGxlMzJfdG9fY3B1KHJlYy5yX3JlZmNvdW50KSk7CisJCQlyZXQgPSBvY2ZzMl9jaGFuZ2VfcmVmY291bnRfcmVjKGhhbmRsZSwgY2ksCisJCQkJCQkJcmVmX2xlYWZfYmgsIGluZGV4LAorCQkJCQkJCW1lcmdlLCAxKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSBpZiAoIXJlYy5yX3JlZmNvdW50KSB7CisJCQlyZWMucl9yZWZjb3VudCA9IGNwdV90b19sZTMyKDEpOworCisJCQltbG9nKDAsICJpbnNlcnQgcmVmY291bnQgcmVjLCBzdGFydCAlbGx1LCBsZW4gJXVcbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLnJfY3BvcyksCisJCQkgICAgIHNldF9sZW4pOworCQkJcmV0ID0gb2NmczJfaW5zZXJ0X3JlZmNvdW50X3JlYyhoYW5kbGUsIGNpLCByZWZfcm9vdF9iaCwKKwkJCQkJCQlyZWZfbGVhZl9iaCwKKwkJCQkJCQkmcmVjLCBpbmRleCwKKwkJCQkJCQltZXJnZSwgbWV0YV9hYyk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgIHsKKwkJCXNldF9sZW4gPSBtaW4oKHU2NCkoY3BvcyArIGxlbiksCisJCQkJICAgICAgbGU2NF90b19jcHUocmVjLnJfY3BvcykgKyBzZXRfbGVuKSAtIGNwb3M7CisJCQlyZWMucl9jcG9zID0gY3B1X3RvX2xlNjQoY3Bvcyk7CisJCQlyZWMucl9jbHVzdGVycyA9IGNwdV90b19sZTMyKHNldF9sZW4pOworCQkJbGUzMl9hZGRfY3B1KCZyZWMucl9yZWZjb3VudCwgMSk7CisKKwkJCW1sb2coMCwgInNwbGl0IHJlZmNvdW50IHJlYywgc3RhcnQgJWxsdSwgIgorCQkJICAgICAibGVuICV1LCBjb3VudCAldVxuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShyZWMucl9jcG9zKSwKKwkJCSAgICAgc2V0X2xlbiwgbGUzMl90b19jcHUocmVjLnJfcmVmY291bnQpKTsKKwkJCXJldCA9IG9jZnMyX3NwbGl0X3JlZmNvdW50X3JlYyhoYW5kbGUsIGNpLAorCQkJCQkJICAgICAgIHJlZl9yb290X2JoLCByZWZfbGVhZl9iaCwKKwkJCQkJCSAgICAgICAmcmVjLCBpbmRleCwgbWVyZ2UsCisJCQkJCQkgICAgICAgbWV0YV9hYywgZGVhbGxvYyk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJY3BvcyArPSBzZXRfbGVuOworCQlsZW4gLT0gc2V0X2xlbjsKKwkJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwkJcmVmX2xlYWZfYmggPSBOVUxMOworCX0KKworb3V0OgorCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfcmVmY291bnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCWludCByZXQ7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihjaSk7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYiA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisKKwlCVUdfT04ocmItPnJmX3JlY29yZHMucmxfdXNlZCk7CisKKwlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZldCwgY2ksIHJlZl9yb290X2JoKTsKKwlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGhhbmRsZSwgJmV0LCBsZTMyX3RvX2NwdShyYi0+cmZfY3BvcyksCisJCQkJICAxLCBtZXRhX2FjLCBkZWFsbG9jKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoY2ksIHJlZl9sZWFmX2JoKTsKKworCS8qCisJICogYWRkIHRoZSBmcmVlZCBibG9jayB0byB0aGUgZGVhbGxvYyBzbyB0aGF0IGl0IHdpbGwgYmUgZnJlZWQKKwkgKiB3aGVuIHdlIHJ1biBkZWFsbG9jLgorCSAqLworCXJldCA9IG9jZnMyX2NhY2hlX2Jsb2NrX2RlYWxsb2MoZGVhbGxvYywgRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQkJbGUxNl90b19jcHUocmItPnJmX3N1YmFsbG9jX3Nsb3QpLAorCQkJCQlsZTY0X3RvX2NwdShyYi0+cmZfYmxrbm8pLAorCQkJCQlsZTE2X3RvX2NwdShyYi0+cmZfc3ViYWxsb2NfYml0KSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3JiKGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKworCWxlMzJfYWRkX2NwdSgmcmItPnJmX2NsdXN0ZXJzLCAtMSk7CisKKwkvKgorCSAqIGNoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byByZXN0b3JlIHRoZSByb290IHJlZmNvdW50IGJsb2NrIGlmCisJICogdGhlcmUgaXMgbm8gbGVhZiBleHRlbnQgYmxvY2sgYXQgYXRsbC4KKwkgKi8KKwlpZiAoIXJiLT5yZl9saXN0LmxfbmV4dF9mcmVlX3JlYykgeworCQlCVUdfT04ocmItPnJmX2NsdXN0ZXJzKTsKKworCQltbG9nKDAsICJyZXNldCByZWZjb3VudCB0cmVlIHJvb3QgJWxsdSB0byBiZSBhIHJlY29yZCBibG9jay5cbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWZfcm9vdF9iaC0+Yl9ibG9ja25yKTsKKworCQlyYi0+cmZfZmxhZ3MgPSAwOworCQlyYi0+cmZfcGFyZW50ID0gMDsKKwkJcmItPnJmX2Nwb3MgPSAwOworCQltZW1zZXQoJnJiLT5yZl9yZWNvcmRzLCAwLCBzYi0+c19ibG9ja3NpemUgLQorCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrLCByZl9yZWNvcmRzKSk7CisJCXJiLT5yZl9yZWNvcmRzLnJsX2NvdW50ID0KKwkJCQljcHVfdG9fbGUxNihvY2ZzMl9yZWZjb3VudF9yZWNzX3Blcl9yYihzYikpOworCX0KKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByZWZfcm9vdF9iaCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgb2NmczJfaW5jcmVhc2VfcmVmY291bnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJICAgIHU2NCBjcG9zLCB1MzIgbGVuLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCXJldHVybiBfX29jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZSwgY2ksIHJlZl9yb290X2JoLAorCQkJCQkgY3BvcywgbGVuLCAxLAorCQkJCQkgbWV0YV9hYywgZGVhbGxvYyk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGVjcmVhc2VfcmVmY291bnRfcmVjKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoLAorCQkJCWludCBpbmRleCwgdTY0IGNwb3MsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0KKwkJCShzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfbGVhZl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgKnJlYyA9ICZyYi0+cmZfcmVjb3Jkcy5ybF9yZWNzW2luZGV4XTsKKworCUJVR19PTihjcG9zIDwgbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpKTsKKwlCVUdfT04oY3BvcyArIGxlbiA+CisJICAgICAgIGxlNjRfdG9fY3B1KHJlYy0+cl9jcG9zKSArIGxlMzJfdG9fY3B1KHJlYy0+cl9jbHVzdGVycykpOworCisJaWYgKGNwb3MgPT0gbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpICYmCisJICAgIGxlbiA9PSBsZTMyX3RvX2NwdShyZWMtPnJfY2x1c3RlcnMpKQorCQlyZXQgPSBvY2ZzMl9jaGFuZ2VfcmVmY291bnRfcmVjKGhhbmRsZSwgY2ksCisJCQkJCQlyZWZfbGVhZl9iaCwgaW5kZXgsIDEsIC0xKTsKKwllbHNlIHsKKwkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyBzcGxpdCA9ICpyZWM7CisJCXNwbGl0LnJfY3BvcyA9IGNwdV90b19sZTY0KGNwb3MpOworCQlzcGxpdC5yX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIobGVuKTsKKworCQlsZTMyX2FkZF9jcHUoJnNwbGl0LnJfcmVmY291bnQsIC0xKTsKKworCQltbG9nKDAsICJzcGxpdCByZWZjb3VudCByZWMsIHN0YXJ0ICVsbHUsICIKKwkJICAgICAibGVuICV1LCBjb3VudCAldSwgb3JpZ2luYWwgc3RhcnQgJWxsdSwgbGVuICV1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoc3BsaXQucl9jcG9zKSwKKwkJICAgICBsZW4sIGxlMzJfdG9fY3B1KHNwbGl0LnJfcmVmY291bnQpLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLT5yX2Nwb3MpLAorCQkgICAgIGxlMzJfdG9fY3B1KHJlYy0+cl9jbHVzdGVycykpOworCQlyZXQgPSBvY2ZzMl9zcGxpdF9yZWZjb3VudF9yZWMoaGFuZGxlLCBjaSwKKwkJCQkJICAgICAgIHJlZl9yb290X2JoLCByZWZfbGVhZl9iaCwKKwkJCQkJICAgICAgICZzcGxpdCwgaW5kZXgsIDEsCisJCQkJCSAgICAgICBtZXRhX2FjLCBkZWFsbG9jKTsKKwl9CisKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUmVtb3ZlIHRoZSBsZWFmIHJlZmNvdW50IGJsb2NrIGlmIGl0IGNvbnRhaW5zIG5vIHJlZmNvdW50IHJlY29yZC4gKi8KKwlpZiAoIXJiLT5yZl9yZWNvcmRzLnJsX3VzZWQgJiYgcmVmX2xlYWZfYmggIT0gcmVmX3Jvb3RfYmgpIHsKKwkJcmV0ID0gb2NmczJfcmVtb3ZlX3JlZmNvdW50X2V4dGVudChoYW5kbGUsIGNpLCByZWZfcm9vdF9iaCwKKwkJCQkJCSAgIHJlZl9sZWFmX2JoLCBtZXRhX2FjLAorCQkJCQkJICAgZGVhbGxvYyk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX29jZnMyX2RlY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICB1NjQgY3BvcywgdTMyIGxlbiwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkJICAgICBpbnQgZGVsZXRlKQoreworCWludCByZXQgPSAwLCBpbmRleCA9IDA7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyByZWM7CisJdW5zaWduZWQgaW50IHJfY291bnQgPSAwLCByX2xlbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoID0gTlVMTDsKKworCW1sb2coMCwgIlRyZWUgb3duZXIgJWxsdSwgZGVjcmVhc2UgcmVmY291bnQgc3RhcnQgJWxsdSwgIgorCSAgICAgImxlbiAldSwgZGVsZXRlICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIGxlbiwgZGVsZXRlKTsKKworCXdoaWxlIChsZW4pIHsKKwkJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3JlYyhjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgICAgY3BvcywgbGVuLCAmcmVjLCAmaW5kZXgsCisJCQkJCSAgICAgJnJlZl9sZWFmX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyX2NvdW50ID0gbGUzMl90b19jcHUocmVjLnJfcmVmY291bnQpOworCQlCVUdfT04ocl9jb3VudCA9PSAwKTsKKwkJaWYgKCFkZWxldGUpCisJCQlCVUdfT04ocl9jb3VudCA+IDEpOworCisJCXJfbGVuID0gbWluKCh1NjQpKGNwb3MgKyBsZW4pLCBsZTY0X3RvX2NwdShyZWMucl9jcG9zKSArCisJCQkgICAgICBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpIC0gY3BvczsKKworCQlyZXQgPSBvY2ZzMl9kZWNyZWFzZV9yZWZjb3VudF9yZWMoaGFuZGxlLCBjaSwgcmVmX3Jvb3RfYmgsCisJCQkJCQkgIHJlZl9sZWFmX2JoLCBpbmRleCwKKwkJCQkJCSAgY3Bvcywgcl9sZW4sCisJCQkJCQkgIG1ldGFfYWMsIGRlYWxsb2MpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChsZTMyX3RvX2NwdShyZWMucl9yZWZjb3VudCkgPT0gMSAmJiBkZWxldGUpIHsKKwkJCXJldCA9IG9jZnMyX2NhY2hlX2NsdXN0ZXJfZGVhbGxvYyhkZWFsbG9jLAorCQkJCQkgIG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhzYiwgY3BvcyksCisJCQkJCQkJICByX2xlbik7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJY3BvcyArPSByX2xlbjsKKwkJbGVuIC09IHJfbGVuOworCQlicmVsc2UocmVmX2xlYWZfYmgpOworCQlyZWZfbGVhZl9iaCA9IE5VTEw7CisJfQorCitvdXQ6CisJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxsZXIgbXVzdCBob2xkIHJlZmNvdW50IHRyZWUgbG9jay4gKi8KK2ludCBvY2ZzMl9kZWNyZWFzZV9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsIHUzMiBjcG9zLCB1MzIgbGVuLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAorCQkJICAgIGludCBkZWxldGUpCit7CisJaW50IHJldDsKKwl1NjQgcmVmX2Jsa25vOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlOworCisJQlVHX09OKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCkpOworCisJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X2Jsb2NrKGlub2RlLCAmcmVmX2Jsa25vKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCByZWZfYmxrbm8sICZ0cmVlKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jaygmdHJlZS0+cmZfY2ksIHRyZWUtPnJmX2Jsa25vLAorCQkJCQkmcmVmX3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBfX29jZnMyX2RlY3JlYXNlX3JlZmNvdW50KGhhbmRsZSwgJnRyZWUtPnJmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJY3BvcywgbGVuLCBtZXRhX2FjLCBkZWFsbG9jLCBkZWxldGUpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBNYXJrIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGV4dGVudCBhdCBjcG9zIGFzIHJlZmNvdW50ZWQgZm9yIGxlbiBjbHVzdGVycy4KKyAqIFRoaXMgYWRkcyB0aGUgcmVmY291bnQgZXh0ZW50IGZsYWcuCisgKgorICogSWYgdGhlIGV4aXN0aW5nIGV4dGVudCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdCwgaW5pdGlhdGUgYQorICogc3BsaXQuIEFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIGF0IG1lcmdpbmcgd2l0aCBhZGphY2VudCBleHRlbnRzLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBhc3NpbmcgZG93biBtZXRhX2FjIGlmIHdlJ2xsIG5lZWQgaXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfbWFya19leHRlbnRfcmVmY291bnRlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJaGFuZGxlX3QgKmhhbmRsZSwgdTMyIGNwb3MsCisJCQkJdTMyIGxlbiwgdTMyIHBoeXMsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldDsKKworCW1sb2coMCwgIklub2RlICVsdSByZWZjb3VudCB0cmVlIGNwb3MgJXUsIGxlbiAldSwgcGh5cyBjbHVzdGVyICV1XG4iLAorCSAgICAgaW5vZGUtPmlfaW5vLCBjcG9zLCBsZW4sIHBoeXMpOworCisJaWYgKCFvY2ZzMl9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpIHsKKwkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsICJJbm9kZSAlbHUgd2FudCB0byB1c2UgcmVmY291bnQgIgorCQkJICAgICJ0cmVlLCBidXQgdGhlIGZlYXR1cmUgYml0IGlzIG5vdCBzZXQgaW4gdGhlICIKKwkJCSAgICAic3VwZXIgYmxvY2suIiwgaW5vZGUtPmlfaW5vKTsKKwkJcmV0ID0gLUVST0ZTOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jaGFuZ2VfZXh0ZW50X2ZsYWcoaGFuZGxlLCBldCwgY3BvcywKKwkJCQkgICAgICAgbGVuLCBwaHlzLCBtZXRhX2FjLCBkZWFsbG9jLAorCQkJCSAgICAgICBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCwgMCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdpdmVuIHNvbWUgY29udGlndW91cyBwaHlzaWNhbCBjbHVzdGVycywgY2FsY3VsYXRlIHdoYXQgd2UgbmVlZAorICogZm9yIG1vZGlmeWluZyB0aGVpciByZWZjb3VudC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jYWxjX3JlZmNvdW50X21ldGFfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCQkgICAgdTY0IHN0YXJ0X2Nwb3MsCisJCQkJCSAgICB1MzIgY2x1c3RlcnMsCisJCQkJCSAgICBpbnQgKm1ldGFfYWRkLAorCQkJCQkgICAgaW50ICpjcmVkaXRzKQoreworCWludCByZXQgPSAwLCBpbmRleCwgcmVmX2Jsb2NrcyA9IDAsIHJlY3NfYWRkID0gMDsKKwl1NjQgY3BvcyA9IHN0YXJ0X2Nwb3M7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYjsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjIHJlYzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoID0gTlVMTCwgKnByZXZfYmggPSBOVUxMOworCXUzMiBsZW47CisKKwltbG9nKDAsICJzdGFydF9jcG9zICVsbHUsIGNsdXN0ZXJzICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9jcG9zLCBjbHVzdGVycyk7CisJd2hpbGUgKGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9yZWMoY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgIGNwb3MsIGNsdXN0ZXJzLCAmcmVjLAorCQkJCQkgICAgICZpbmRleCwgJnJlZl9sZWFmX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAocmVmX2xlYWZfYmggIT0gcHJldl9iaCkgeworCQkJLyoKKwkJCSAqIE5vdyB3ZSBlbmNvdW50ZXIgYSBuZXcgbGVhZiBibG9jaywgc28gY2FsY3VsYXRlCisJCQkgKiB3aGV0aGVyIHdlIG5lZWQgdG8gZXh0ZW5kIHRoZSBvbGQgbGVhZi4KKwkJCSAqLworCQkJaWYgKHByZXZfYmgpIHsKKwkJCQlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKikKKwkJCQkJCQlwcmV2X2JoLT5iX2RhdGE7CisKKwkJCQlpZiAobGU2NF90b19jcHUocmItPnJmX3JlY29yZHMucmxfdXNlZCkgKworCQkJCSAgICByZWNzX2FkZCA+CisJCQkJICAgIGxlMTZfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX2NvdW50KSkKKwkJCQkJcmVmX2Jsb2NrcysrOworCQkJfQorCisJCQlyZWNzX2FkZCA9IDA7CisJCQkqY3JlZGl0cyArPSAxOworCQkJYnJlbHNlKHByZXZfYmgpOworCQkJcHJldl9iaCA9IHJlZl9sZWFmX2JoOworCQkJZ2V0X2JoKHByZXZfYmgpOworCQl9CisKKwkJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX2xlYWZfYmgtPmJfZGF0YTsKKworCQltbG9nKDAsICJyZWNzX2FkZCAlZCxjcG9zICVsbHUsIGNsdXN0ZXJzICV1LCByZWMtPnJfY3BvcyAlbGx1LCIKKwkJICAgICAicmVjLT5yX2NsdXN0ZXJzICV1LCByZWMtPnJfcmVmY291bnQgJXUsIGluZGV4ICVkXG4iLAorCQkgICAgIHJlY3NfYWRkLCAodW5zaWduZWQgbG9uZyBsb25nKWNwb3MsIGNsdXN0ZXJzLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUocmVjLnJfY3BvcyksCisJCSAgICAgbGUzMl90b19jcHUocmVjLnJfY2x1c3RlcnMpLAorCQkgICAgIGxlMzJfdG9fY3B1KHJlYy5yX3JlZmNvdW50KSwgaW5kZXgpOworCisJCWxlbiA9IG1pbigodTY0KWNwb3MgKyBjbHVzdGVycywgbGU2NF90b19jcHUocmVjLnJfY3BvcykgKworCQkJICBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpIC0gY3BvczsKKwkJLyoKKwkJICogSWYgdGhlIHJlZmNvdW50IHJlYyBhbHJlYWR5IGV4aXN0LCBjb29sLiBXZSBqdXN0IG5lZWQKKwkJICogdG8gY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIHNwbGl0LiBPdGhlcndpc2Ugd2UganVzdCBuZWVkCisJCSAqIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudC4KKwkJICogSWYgd2Ugd2lsbCBpbnNlcnQgb25lLCBpbmNyZWFzZXMgcmVjc19hZGQuCisJCSAqCisJCSAqIFdlIHJlY29yZCBhbGwgdGhlIHJlY29yZHMgd2hpY2ggd2lsbCBiZSBpbnNlcnRlZCB0byB0aGUKKwkJICogc2FtZSByZWZjb3VudCBibG9jaywgc28gdGhhdCB3ZSBjYW4gdGVsbCBleGFjdGx5IHdoZXRoZXIKKwkJICogd2UgbmVlZCBhIG5ldyByZWZjb3VudCBibG9jayBvciBub3QuCisJCSAqLworCQlpZiAocmVjLnJfcmVmY291bnQpIHsKKwkJCS8qIENoZWNrIHdoZXRoZXIgd2UgbmVlZCBhIHNwbGl0IGF0IHRoZSBiZWdpbm5pbmcuICovCisJCQlpZiAoY3BvcyA9PSBzdGFydF9jcG9zICYmCisJCQkgICAgY3BvcyAhPSBsZTY0X3RvX2NwdShyZWMucl9jcG9zKSkKKwkJCQlyZWNzX2FkZCsrOworCisJCQkvKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgYSBzcGxpdCBpbiB0aGUgZW5kLiAqLworCQkJaWYgKGNwb3MgKyBjbHVzdGVycyA8IGxlNjRfdG9fY3B1KHJlYy5yX2Nwb3MpICsKKwkJCSAgICBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpCisJCQkJcmVjc19hZGQrKzsKKwkJfSBlbHNlCisJCQlyZWNzX2FkZCsrOworCisJCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJCXJlZl9sZWFmX2JoID0gTlVMTDsKKwkJY2x1c3RlcnMgLT0gbGVuOworCQljcG9zICs9IGxlbjsKKwl9CisKKwlpZiAocHJldl9iaCkgeworCQlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilwcmV2X2JoLT5iX2RhdGE7CisKKwkJaWYgKGxlNjRfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpICsgcmVjc19hZGQgPgorCQkgICAgbGUxNl90b19jcHUocmItPnJmX3JlY29yZHMucmxfY291bnQpKQorCQkJcmVmX2Jsb2NrcysrOworCisJCSpjcmVkaXRzICs9IDE7CisJfQorCisJaWYgKCFyZWZfYmxvY2tzKQorCQlnb3RvIG91dDsKKworCW1sb2coMCwgIndlIG5lZWQgcmVmX2Jsb2NrcyAlZFxuIiwgcmVmX2Jsb2Nrcyk7CisJKm1ldGFfYWRkICs9IHJlZl9ibG9ja3M7CisJKmNyZWRpdHMgKz0gcmVmX2Jsb2NrczsKKworCS8qCisJICogU28gd2UgbWF5IG5lZWQgcmVmX2Jsb2NrcyB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4KKwkgKiBUaGF0IGFsc28gbWVhbnMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGItdHJlZSBhbmQgYWRkIHRoYXQgbnVtYmVyCisJICogb2YgcmVjb3JkcyBzaW5jZSB3ZSBuZXZlciBtZXJnZSB0aGVtLgorCSAqIFdlIG5lZWQgb25lIG1vcmUgYmxvY2sgZm9yIGV4cGFuc2lvbiBzaW5jZSB0aGUgbmV3IGNyZWF0ZWQgbGVhZgorCSAqIGJsb2NrIGlzIGFsc28gZnVsbCBhbmQgbmVlZHMgc3BsaXQuCisJICovCisJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKwlpZiAobGUzMl90b19jcHUocmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpIHsKKwkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJCW9jZnMyX2luaXRfcmVmY291bnRfZXh0ZW50X3RyZWUoJmV0LCBjaSwgcmVmX3Jvb3RfYmgpOworCQkqbWV0YV9hZGQgKz0gb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKGV0LmV0X3Jvb3RfZWwpOworCQkqY3JlZGl0cyArPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKHNiLAorCQkJCQkJICAgICAgZXQuZXRfcm9vdF9lbCwKKwkJCQkJCSAgICAgIHJlZl9ibG9ja3MpOworCX0gZWxzZSB7CisJCSpjcmVkaXRzICs9IE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFM7CisJCSptZXRhX2FkZCArPSAxOworCX0KKworb3V0OgorCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJYnJlbHNlKHByZXZfYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgcmVmY291bnQgdHJlZSwgd2Ugd2lsbCBkZWNyZWFzZSBzb21lIGNvbnRpZ3VvdXMgY2x1c3RlcnMKKyAqIHJlZmNvdW50IGNvdW50LCBzbyBqdXN0IGdvIHRocm91Z2ggaXQgdG8gc2VlIGhvdyBtYW55IGJsb2NrcworICogd2UgZ29ubmEgdG91Y2ggYW5kIHdoZXRoZXIgd2UgbmVlZCB0byBjcmVhdGUgbmV3IGJsb2Nrcy4KKyAqCisgKiBOb3JtYWxseSB0aGUgcmVmY291bnQgYmxvY2tzIHN0b3JlIHRoZXNlIHJlZmNvdW50IHNob3VsZCBiZQorICogY29udGluZ3VvdXMgYWxzbywgc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBudW1iZXIgZWFzaWx5LgorICogQXMgZm9yIG1ldGFfYWMsIHdlIHdpbGwgYXQgbW9zdCBhZGQgc3BsaXQgMiByZWZjb3VudCByZWNvcmQgYW5kCisgKiAyIG1vcmUgcmVmY291bnQgYmxvY2ssIHNvIGp1c3QgY2hlY2sgaXQgaW4gYSByb3VnaCB3YXkuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCByZWZjb3VudCB0cmVlIGxvY2suCisgKi8KK2ludCBvY2ZzMl9wcmVwYXJlX3JlZmNvdW50X2NoYW5nZV9mb3JfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkJICB1NjQgcGh5c19ibGtubywKKwkJCQkJICB1MzIgY2x1c3RlcnMsCisJCQkJCSAgaW50ICpjcmVkaXRzLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYykKK3sKKwlpbnQgcmV0LCByZWZfYmxvY2tzID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZTsKKwl1NjQgc3RhcnRfY3BvcyA9IG9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhpbm9kZS0+aV9zYiwgcGh5c19ibGtubyk7CisKKwlpZiAoIW9jZnMyX3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkgeworCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsdSB3YW50IHRvIHVzZSByZWZjb3VudCAiCisJCQkgICAgInRyZWUsIGJ1dCB0aGUgZmVhdHVyZSBiaXQgaXMgbm90IHNldCBpbiB0aGUgIgorCQkJICAgICJzdXBlciBibG9jay4iLCBpbm9kZS0+aV9pbm8pOworCQlyZXQgPSAtRVJPRlM7CisJCWdvdG8gb3V0OworCX0KKworCUJVR19PTighKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpKTsKKworCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJCQkgICAgICBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLCAmdHJlZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfcmVmY291bnRfYmxvY2soJnRyZWUtPnJmX2NpLAorCQkJCQlsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLAorCQkJCQkmcmVmX3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jYWxjX3JlZmNvdW50X21ldGFfY3JlZGl0cyhpbm9kZS0+aV9zYiwKKwkJCQkJICAgICAgICZ0cmVlLT5yZl9jaSwKKwkJCQkJICAgICAgIHJlZl9yb290X2JoLAorCQkJCQkgICAgICAgc3RhcnRfY3BvcywgY2x1c3RlcnMsCisJCQkJCSAgICAgICAmcmVmX2Jsb2NrcywgY3JlZGl0cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgInJlc2VydmUgbmV3IG1ldGFkYXRhICVkLCBjcmVkaXRzID0gJWRcbiIsCisJICAgICByZWZfYmxvY2tzLCAqY3JlZGl0cyk7CisKKwlpZiAocmVmX2Jsb2NrcykgeworCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAorCQkJCQkJCXJlZl9ibG9ja3MsIG1ldGFfYWMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KKworb3V0OgorCWJyZWxzZShyZWZfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZQlNQVhfQ09OVElHX0JZVEVTCTEwNDg1NzYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfY293X2NvbnRpZ19jbHVzdGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc2IsIE1BWF9DT05USUdfQllURVMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9jb3dfY29udGlnX21hc2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gfihvY2ZzMl9jb3dfY29udGlnX2NsdXN0ZXJzKHNiKSAtIDEpOworfQorCisvKgorICogR2l2ZW4gYW4gZXh0ZW50IHRoYXQgc3RhcnRzIGF0ICdzdGFydCcgYW5kIGFuIEkvTyB0aGF0IHN0YXJ0cyBhdCAnY3BvcycsCisgKiBmaW5kIGFuIG9mZnNldCAoc3RhcnQgKyAobiAqIGNvbnRpZ19jbHVzdGVycykpIHRoYXQgaXMgY2xvc2VzdCB0byBjcG9zCisgKiB3aGlsZSBzdGlsbCBiZWluZyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gaXQuCisgKgorICogVGhlIGdvYWwgaXMgdG8gYnJlYWsgdGhlIGV4dGVudCBhdCBhIG11bHRpcGxlIG9mIGNvbnRpZ19jbHVzdGVycy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfY293X2FsaWduX3N0YXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCQkgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJCQkJIHVuc2lnbmVkIGludCBjcG9zKQoreworCUJVR19PTihzdGFydCA+IGNwb3MpOworCisJcmV0dXJuIHN0YXJ0ICsgKChjcG9zIC0gc3RhcnQpICYgb2NmczJfY293X2NvbnRpZ19tYXNrKHNiKSk7Cit9CisKKy8qCisgKiBHaXZlbiBhIGNsdXN0ZXIgY291bnQgb2YgbGVuLCBwYWQgaXQgb3V0IHNvIHRoYXQgaXQgaXMgYSBtdWx0aXBsZQorICogb2YgY29udGlnX2NsdXN0ZXJzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9jb3dfYWxpZ25fbGVuZ3RoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCQkgIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHBhZGRlZCA9CisJCShsZW4gKyAob2NmczJfY293X2NvbnRpZ19jbHVzdGVycyhzYikgLSAxKSkgJgorCQlvY2ZzMl9jb3dfY29udGlnX21hc2soc2IpOworCisJLyogRGlkIHdlIHdyYXA/ICovCisJaWYgKHBhZGRlZCA8IGxlbikKKwkJcGFkZGVkID0gVUlOVF9NQVg7CisKKwlyZXR1cm4gcGFkZGVkOworfQorCisvKgorICogQ2FsY3VsYXRlIG91dCB0aGUgc3RhcnQgYW5kIG51bWJlciBvZiB2aXJ0dWFsIGNsdXN0ZXJzIHdlIG5lZWQgdG8gdG8gQ29XLgorICoKKyAqIGNwb3MgaXMgdml0dWFsIHN0YXJ0IGNsdXN0ZXIgcG9zaXRpb24gd2Ugd2FudCB0byBkbyBDb1cgaW4gYQorICogZmlsZSBhbmQgd3JpdGVfbGVuIGlzIHRoZSBjbHVzdGVyIGxlbmd0aC4KKyAqIG1heF9jcG9zIGlzIHRoZSBwbGFjZSB3aGVyZSB3ZSB3YW50IHRvIHN0b3AgQ29XIGludGVudGlvbmFsbHkuCisgKgorICogTm9ybWFsIHdlIHdpbGwgc3RhcnQgQ29XIGZyb20gdGhlIGJlZ2lubmluZyBvZiBleHRlbnQgcmVjb3JkIGNvdGFpbmluZyBjcG9zLgorICogV2UgdHJ5IHRvIGJyZWFrIHVwIGV4dGVudHMgb24gYm91bmRhcmllcyBvZiBNQVhfQ09OVElHX0JZVEVTIHNvIHRoYXQgd2UKKyAqIGdldCBnb29kIEkvTyBmcm9tIHRoZSByZXN1bHRpbmcgZXh0ZW50IHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVmY291bnRfY2FsX2Nvd19jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAorCQkJCQkgICB1MzIgY3BvcywKKwkJCQkJICAgdTMyIHdyaXRlX2xlbiwKKwkJCQkJICAgdTMyIG1heF9jcG9zLAorCQkJCQkgICB1MzIgKmNvd19zdGFydCwKKwkJCQkJICAgdTMyICpjb3dfbGVuKQoreworCWludCByZXQgPSAwOworCWludCB0cmVlX2hlaWdodCA9IGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpLCBpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjOworCXVuc2lnbmVkIGludCB3YW50X2NsdXN0ZXJzLCByZWNfZW5kID0gMDsKKwlpbnQgY29udGlnX2NsdXN0ZXJzID0gb2NmczJfY293X2NvbnRpZ19jbHVzdGVycyhpbm9kZS0+aV9zYik7CisJaW50IGxlYWZfY2x1c3RlcnM7CisKKwlCVUdfT04oY3BvcyArIHdyaXRlX2xlbiA+IG1heF9jcG9zKTsKKworCWlmICh0cmVlX2hlaWdodCA+IDApIHsKKwkJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgZWwsIGNwb3MsICZlYl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSBlYl9iaC0+Yl9kYXRhOworCQllbCA9ICZlYi0+aF9saXN0OworCisJCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkgICAgIklub2RlICVsdSBoYXMgbm9uIHplcm8gdHJlZSBkZXB0aCBpbiAiCisJCQkJICAgICJsZWFmIGJsb2NrICVsbHVcbiIsIGlub2RlLT5pX2lubywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllYl9iaC0+Yl9ibG9ja25yKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJKmNvd19sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKSB7CisJCXJlYyA9ICZlbC0+bF9yZWNzW2ldOworCisJCWlmIChvY2ZzMl9pc19lbXB0eV9leHRlbnQocmVjKSkgeworCQkJbWxvZ19idWdfb25fbXNnKGkgIT0gMCwgIklub2RlICVsdSBoYXMgZW1wdHkgcmVjb3JkIGluICIKKwkJCQkJImluZGV4ICVkXG4iLCBpbm9kZS0+aV9pbm8sIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAobGUzMl90b19jcHUocmVjLT5lX2Nwb3MpICsKKwkJICAgIGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSA8PSBjcG9zKQorCQkJY29udGludWU7CisKKwkJaWYgKCpjb3dfbGVuID09IDApIHsKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgZmluZCBhIHJlZmNvdW50ZWQgcmVjb3JkIGluIHRoZQorCQkJICogZmlyc3QgcGFzcy4KKwkJCSAqLworCQkJQlVHX09OKCEocmVjLT5lX2ZsYWdzICYgT0NGUzJfRVhUX1JFRkNPVU5URUQpKTsKKwkJCSpjb3dfc3RhcnQgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBlbmNvdW50ZXIgYSBob2xlLCBhIG5vbi1yZWZjb3VudGVkIHJlY29yZCBvcgorCQkgKiBwYXNzIHRoZSBtYXhfY3Bvcywgc3RvcCB0aGUgc2VhcmNoLgorCQkgKi8KKwkJaWYgKCghKHJlYy0+ZV9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSkgfHwKKwkJICAgICgqY293X2xlbiAmJiByZWNfZW5kICE9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSkgfHwKKwkJICAgIChtYXhfY3BvcyA8PSBsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykpKQorCQkJYnJlYWs7CisKKwkJbGVhZl9jbHVzdGVycyA9IGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKTsKKwkJcmVjX2VuZCA9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSArIGxlYWZfY2x1c3RlcnM7CisJCWlmIChyZWNfZW5kID4gbWF4X2Nwb3MpIHsKKwkJCXJlY19lbmQgPSBtYXhfY3BvczsKKwkJCWxlYWZfY2x1c3RlcnMgPSByZWNfZW5kIC0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpOworCQl9CisKKwkJLyoKKwkJICogSG93IG1hbnkgY2x1c3RlcnMgZG8gd2UgYWN0dWFsbHkgbmVlZCBmcm9tCisJCSAqIHRoaXMgZXh0ZW50PyAgRmlyc3Qgd2Ugc2VlIGhvdyBtYW55IHdlIGFjdHVhbGx5CisJCSAqIG5lZWQgdG8gY29tcGxldGUgdGhlIHdyaXRlLiAgSWYgdGhhdCdzIHNtYWxsZXIKKwkJICogdGhhbiBjb250aWdfY2x1c3RlcnMsIHdlIHRyeSBmb3IgY29udGlnX2NsdXN0ZXJzLgorCQkgKi8KKwkJaWYgKCEqY293X2xlbikKKwkJCXdhbnRfY2x1c3RlcnMgPSB3cml0ZV9sZW47CisJCWVsc2UKKwkJCXdhbnRfY2x1c3RlcnMgPSAoY3BvcyArIHdyaXRlX2xlbikgLQorCQkJCSgqY293X3N0YXJ0ICsgKmNvd19sZW4pOworCQlpZiAod2FudF9jbHVzdGVycyA8IGNvbnRpZ19jbHVzdGVycykKKwkJCXdhbnRfY2x1c3RlcnMgPSBjb250aWdfY2x1c3RlcnM7CisKKwkJLyoKKwkJICogSWYgdGhlIHdyaXRlIGRvZXMgbm90IGNvdmVyIHRoZSB3aG9sZSBleHRlbnQsIHdlCisJCSAqIG5lZWQgdG8gY2FsY3VsYXRlIGhvdyB3ZSdyZSBnb2luZyB0byBzcGxpdCB0aGUgZXh0ZW50LgorCQkgKiBXZSB0cnkgdG8gZG8gaXQgb24gY29udGlnX2NsdXN0ZXJzIGJvdW5kYXJpZXMuCisJCSAqCisJCSAqIEFueSBleHRlbnQgc21hbGxlciB0aGFuIGNvbnRpZ19jbHVzdGVycyB3aWxsIGJlCisJCSAqIENvV2VkIGluIGl0cyBlbnRpcmV0eS4KKwkJICovCisJCWlmIChsZWFmX2NsdXN0ZXJzIDw9IGNvbnRpZ19jbHVzdGVycykKKwkJCSpjb3dfbGVuICs9IGxlYWZfY2x1c3RlcnM7CisJCWVsc2UgaWYgKCpjb3dfbGVuIHx8ICgqY293X3N0YXJ0ID09IGNwb3MpKSB7CisJCQkvKgorCQkJICogVGhpcyBleHRlbnQgbmVlZHMgdG8gYmUgQ29XJ2QgZnJvbSBpdHMKKwkJCSAqIGJlZ2lubmluZywgc28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgY29tcHV0ZQorCQkJICogaG93IG1hbnkgY2x1c3RlcnMgdG8gZ3JhYi4gIFdlIGFsaWduCisJCQkgKiB3YW50X2NsdXN0ZXJzIHRvIHRoZSBlZGdlIG9mIGNvbnRpZ19jbHVzdGVycworCQkJICogdG8gZ2V0IGJldHRlciBJL08uCisJCQkgKi8KKwkJCXdhbnRfY2x1c3RlcnMgPSBvY2ZzMl9jb3dfYWxpZ25fbGVuZ3RoKGlub2RlLT5pX3NiLAorCQkJCQkJCSAgICAgICB3YW50X2NsdXN0ZXJzKTsKKworCQkJaWYgKGxlYWZfY2x1c3RlcnMgPCB3YW50X2NsdXN0ZXJzKQorCQkJCSpjb3dfbGVuICs9IGxlYWZfY2x1c3RlcnM7CisJCQllbHNlCisJCQkJKmNvd19sZW4gKz0gd2FudF9jbHVzdGVyczsKKwkJfSBlbHNlIGlmICgoKmNvd19zdGFydCArIGNvbnRpZ19jbHVzdGVycykgPj0KKwkJCSAgIChjcG9zICsgd3JpdGVfbGVuKSkgeworCQkJLyoKKwkJCSAqIEJyZWFraW5nIG9mZiBjb250aWdfY2x1c3RlcnMgYXQgdGhlIGZyb250CisJCQkgKiBvZiB0aGUgZXh0ZW50IHdpbGwgY292ZXIgb3VyIHdyaXRlLiAgVGhhdCdzCisJCQkgKiBlYXN5LgorCQkJICovCisJCQkqY293X2xlbiA9IGNvbnRpZ19jbHVzdGVyczsKKwkJfSBlbHNlIGlmICgocmVjX2VuZCAtIGNwb3MpIDw9IGNvbnRpZ19jbHVzdGVycykgeworCQkJLyoKKwkJCSAqIEJyZWFraW5nIG9mZiBjb250aWdfY2x1c3RlcnMgYXQgdGhlIHRhaWwgb2YKKwkJCSAqIHRoaXMgZXh0ZW50IHdpbGwgY292ZXIgY3Bvcy4KKwkJCSAqLworCQkJKmNvd19zdGFydCA9IHJlY19lbmQgLSBjb250aWdfY2x1c3RlcnM7CisJCQkqY293X2xlbiA9IGNvbnRpZ19jbHVzdGVyczsKKwkJfSBlbHNlIGlmICgocmVjX2VuZCAtIGNwb3MpIDw9IHdhbnRfY2x1c3RlcnMpIHsKKwkJCS8qCisJCQkgKiBXaGlsZSB3ZSBjYW4ndCBmaXQgdGhlIGVudGlyZSB3cml0ZSBpbiB0aGlzCisJCQkgKiBleHRlbnQsIHdlIGtub3cgdGhhdCB0aGUgd3JpdGUgZ29lcyBmcm9tIGNwb3MKKwkJCSAqIHRvIHRoZSBlbmQgb2YgdGhlIGV4dGVudC4gIEJyZWFrIHRoYXQgb2ZmLgorCQkJICogV2UgdHJ5IHRvIGJyZWFrIGl0IGF0IHNvbWUgbXVsdGlwbGUgb2YKKwkJCSAqIGNvbnRpZ19jbHVzdGVycyBmcm9tIHRoZSBmcm9udCBvZiB0aGUgZXh0ZW50LgorCQkJICogRmFpbGluZyB0aGF0IChpZSwgY3BvcyBpcyB3aXRoaW4KKwkJCSAqIGNvbnRpZ19jbHVzdGVycyBvZiB0aGUgZnJvbnQpLCB3ZSdsbCBDb1cgdGhlCisJCQkgKiBlbnRpcmUgZXh0ZW50LgorCQkJICovCisJCQkqY293X3N0YXJ0ID0gb2NmczJfY293X2FsaWduX3N0YXJ0KGlub2RlLT5pX3NiLAorCQkJCQkJCSAgICpjb3dfc3RhcnQsIGNwb3MpOworCQkJKmNvd19sZW4gPSByZWNfZW5kIC0gKmNvd19zdGFydDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBPaywgdGhlIGVudGlyZSB3cml0ZSBsaXZlcyBpbiB0aGUgbWlkZGxlIG9mCisJCQkgKiB0aGlzIGV4dGVudC4gIExldCdzIHRyeSB0byBzbGljZSB0aGUgZXh0ZW50IHVwCisJCQkgKiBuaWNlbHkuICBPcHRpbWFsbHksIG91ciBDb1cgcmVnaW9uIHN0YXJ0cyBhdAorCQkJICogbSpjb250aWdfY2x1c3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQorCQkJICogZXh0ZW50IGFuZCBnb2VzIGZvciBuKmNvbnRpZ19jbHVzdGVycywKKwkJCSAqIGNvdmVyaW5nIHRoZSBlbnRpcmUgd3JpdGUuCisJCQkgKi8KKwkJCSpjb3dfc3RhcnQgPSBvY2ZzMl9jb3dfYWxpZ25fc3RhcnQoaW5vZGUtPmlfc2IsCisJCQkJCQkJICAgKmNvd19zdGFydCwgY3Bvcyk7CisKKwkJCXdhbnRfY2x1c3RlcnMgPSAoY3BvcyArIHdyaXRlX2xlbikgLSAqY293X3N0YXJ0OworCQkJd2FudF9jbHVzdGVycyA9IG9jZnMyX2Nvd19hbGlnbl9sZW5ndGgoaW5vZGUtPmlfc2IsCisJCQkJCQkJICAgICAgIHdhbnRfY2x1c3RlcnMpOworCQkJaWYgKCpjb3dfc3RhcnQgKyB3YW50X2NsdXN0ZXJzIDw9IHJlY19lbmQpCisJCQkJKmNvd19sZW4gPSB3YW50X2NsdXN0ZXJzOworCQkJZWxzZQorCQkJCSpjb3dfbGVuID0gcmVjX2VuZCAtICpjb3dfc3RhcnQ7CisJCX0KKworCQkvKiBIYXZlIHdlIGNvdmVyZWQgb3VyIGVudGlyZSB3cml0ZSB5ZXQ/ICovCisJCWlmICgoKmNvd19zdGFydCArICpjb3dfbGVuKSA+PSAoY3BvcyArIHdyaXRlX2xlbikpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBleHRlbnQgYmxvY2sgYW5kIGRvbid0IGdldCBlbm91Z2gKKwkJICogY2x1c3RlcnMsIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgZXh0ZW50IGJsb2NrIGlmIHBvc3NpYmxlLgorCQkgKi8KKwkJaWYgKGkgKyAxID09IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpICYmCisJCSAgICBlYiAmJiBlYi0+aF9uZXh0X2xlYWZfYmxrKSB7CisJCQlicmVsc2UoZWJfYmgpOworCQkJZWJfYmggPSBOVUxMOworCisJCQlyZXQgPSBvY2ZzMl9yZWFkX2V4dGVudF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCSAgICAgICBsZTY0X3RvX2NwdShlYi0+aF9uZXh0X2xlYWZfYmxrKSwKKwkJCQkJICAgICAgICZlYl9iaCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopIGViX2JoLT5iX2RhdGE7CisJCQllbCA9ICZlYi0+aF9saXN0OworCQkJaSA9IC0xOworCQl9CisJfQorCitvdXQ6CisJYnJlbHNlKGViX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJlcGFyZSBtZXRhX2FjLCBkYXRhX2FjIGFuZCBjYWxjdWxhdGUgY3JlZGl0cyB3aGVuIHdlIHdhbnQgdG8gYWRkIHNvbWUKKyAqIG51bV9jbHVzdGVycyBpbiBkYXRhX3RyZWUgImV0IiBhbmQgY2hhbmdlIHRoZSByZWZjb3VudCBmb3IgdGhlIG9sZAorICogY2x1c3RlcnMoc3RhcnRpbmcgZm9ybSBwX2NsdXN0ZXIpIGluIHRoZSByZWZjb3VudCB0cmVlLgorICoKKyAqIE5vdGU6CisgKiAxLiBzaW5jZSB3ZSBtYXkgc3BsaXQgdGhlIG9sZCB0cmVlLCBzbyB3ZSBhdCBtb3N0IHdpbGwgbmVlZCBudW1fY2x1c3RlcnMgKyAyCisgKiAgICBtb3JlIG5ldyBsZWFmIHJlY29yZHMuCisgKiAyLiBJbiBzb21lIGNhc2UsIHdlIG1heSBub3QgbmVlZCB0byByZXNlcnZlIG5ldyBjbHVzdGVycyhlLmcsIHJlZmxpbmspLCBzbworICogICAganVzdCBnaXZlIGRhdGFfYWMgPSBOVUxMLgorICovCitzdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmY291bnRfYWxsb2NhdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQl1MzIgcF9jbHVzdGVyLCB1MzIgbnVtX2NsdXN0ZXJzLAorCQkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYywKKwkJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKipkYXRhX2FjLAorCQkJCQlpbnQgKmNyZWRpdHMpCit7CisJaW50IHJldCA9IDAsIG1ldGFfYWRkID0gMDsKKwlpbnQgbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMoT0NGUzJfU0Ioc2IpLCBldCk7CisKKwlpZiAobnVtX2ZyZWVfZXh0ZW50cyA8IDApIHsKKwkJcmV0ID0gbnVtX2ZyZWVfZXh0ZW50czsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobnVtX2ZyZWVfZXh0ZW50cyA8IG51bV9jbHVzdGVycyArIDIpCisJCW1ldGFfYWRkID0KKwkJCW9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChldC0+ZXRfcm9vdF9lbCk7CisKKwkqY3JlZGl0cyArPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKHNiLCBldC0+ZXRfcm9vdF9lbCwKKwkJCQkJICAgICAgbnVtX2NsdXN0ZXJzICsgMik7CisKKwlyZXQgPSBvY2ZzMl9jYWxjX3JlZmNvdW50X21ldGFfY3JlZGl0cyhzYiwgcmVmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJICAgICAgIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLAorCQkJCQkgICAgICAgJm1ldGFfYWRkLCBjcmVkaXRzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbWxvZygwLCAicmVzZXJ2ZSBuZXcgbWV0YWRhdGEgJWQsIGNsdXN0ZXJzICV1LCBjcmVkaXRzID0gJWRcbiIsCisJICAgICBtZXRhX2FkZCwgbnVtX2NsdXN0ZXJzLCAqY3JlZGl0cyk7CisJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKE9DRlMyX1NCKHNiKSwgbWV0YV9hZGQsCisJCQkJCQltZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRhdGFfYWMpIHsKKwkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhPQ0ZTMl9TQihzYiksIG51bV9jbHVzdGVycywKKwkJCQkJICAgICBkYXRhX2FjKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dDoKKwlpZiAocmV0KSB7CisJCWlmICgqbWV0YV9hYykgeworCQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KCptZXRhX2FjKTsKKwkJCSptZXRhX2FjID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY2xlYXJfY293X2J1ZmZlcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCUJVR19PTihidWZmZXJfZGlydHkoYmgpKTsKKworCWNsZWFyX2J1ZmZlcl9tYXBwZWQoYmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHVwbGljYXRlX2NsdXN0ZXJzX2J5X3BhZ2UoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkJICAgIHUzMiBjcG9zLCB1MzIgb2xkX2NsdXN0ZXIsCisJCQkJCSAgICB1MzIgbmV3X2NsdXN0ZXIsIHUzMiBuZXdfbGVuKQoreworCWludCByZXQgPSAwLCBwYXJ0aWFsOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpID0gY29udGV4dC0+ZGF0YV9ldC5ldF9jaTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKKwl1NjQgbmV3X2Jsb2NrID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCBuZXdfY2x1c3Rlcik7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdvZmZfdCBwYWdlX2luZGV4OworCXVuc2lnbmVkIGludCBmcm9tLCB0bzsKKwlsb2ZmX3Qgb2Zmc2V0LCBlbmQsIG1hcF9lbmQ7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBjb250ZXh0LT5pbm9kZS0+aV9tYXBwaW5nOworCisJbWxvZygwLCAib2xkX2NsdXN0ZXIgJXUsIG5ldyAldSwgbGVuICV1IGF0IG9mZnNldCAldVxuIiwgb2xkX2NsdXN0ZXIsCisJICAgICBuZXdfY2x1c3RlciwgbmV3X2xlbiwgY3Bvcyk7CisKKwlvZmZzZXQgPSAoKGxvZmZfdCljcG9zKSA8PCBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0czsKKwllbmQgPSBvZmZzZXQgKyAobmV3X2xlbiA8PCBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0cyk7CisKKwl3aGlsZSAob2Zmc2V0IDwgZW5kKSB7CisJCXBhZ2VfaW5kZXggPSBvZmZzZXQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJbWFwX2VuZCA9IChwYWdlX2luZGV4ICsgMSkgPDwgUEFHRV9DQUNIRV9TSElGVDsKKwkJaWYgKG1hcF9lbmQgPiBlbmQpCisJCQltYXBfZW5kID0gZW5kOworCisJCS8qIGZyb20sIHRvIGlzIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBwYWdlLiAqLworCQlmcm9tID0gb2Zmc2V0ICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCQl0byA9IFBBR0VfQ0FDSEVfU0laRTsKKwkJaWYgKG1hcF9lbmQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpCisJCQl0byA9IG1hcF9lbmQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisKKwkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlX2luZGV4KTsKKworCQkvKiBUaGlzIHBhZ2UgY2FuJ3QgYmUgZGlydGllZCBiZWZvcmUgd2UgQ29XIGl0IG91dC4gKi8KKwkJQlVHX09OKFBhZ2VEaXJ0eShwYWdlKSk7CisKKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCXJldCA9IGJsb2NrX3JlYWRfZnVsbF9wYWdlKHBhZ2UsIG9jZnMyX2dldF9ibG9jayk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQorCQkJbG9ja19wYWdlKHBhZ2UpOworCQl9CisKKwkJaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKKwkJCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLAorCQkJCQkJZnJvbSwgdG8sICZwYXJ0aWFsLAorCQkJCQkJb2NmczJfY2xlYXJfY293X2J1ZmZlcik7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQorCQl9CisKKwkJb2NmczJfbWFwX2FuZF9kaXJ0eV9wYWdlKGNvbnRleHQtPmlub2RlLAorCQkJCQkgaGFuZGxlLCBmcm9tLCB0bywKKwkJCQkJIHBhZ2UsIDAsICZuZXdfYmxvY2spOworCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7Cit1bmxvY2s6CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCXBhZ2UgPSBOVUxMOworCQlvZmZzZXQgPSBtYXBfZW5kOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9kdXBsaWNhdGVfY2x1c3RlcnNfYnlfamJkKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkJICAgdTMyIGNwb3MsIHUzMiBvbGRfY2x1c3RlciwKKwkJCQkJICAgdTMyIG5ld19jbHVzdGVyLCB1MzIgbmV3X2xlbikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gY29udGV4dC0+aW5vZGUtPmlfc2I7CisJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kgPSBjb250ZXh0LT5kYXRhX2V0LmV0X2NpOworCWludCBpLCBibG9ja3MgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIG5ld19sZW4pOworCXU2NCBvbGRfYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIG9sZF9jbHVzdGVyKTsKKwl1NjQgbmV3X2Jsb2NrID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCBuZXdfY2x1c3Rlcik7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihzYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKKworCW1sb2coMCwgIm9sZF9jbHVzdGVyICV1LCBuZXcgJXUsIGxlbiAldVxuIiwgb2xkX2NsdXN0ZXIsCisJICAgICBuZXdfY2x1c3RlciwgbmV3X2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxvY2tzOyBpKyssIG9sZF9ibG9jaysrLCBuZXdfYmxvY2srKykgeworCQluZXdfYmggPSBzYl9nZXRibGsob3NiLT5zYiwgbmV3X2Jsb2NrKTsKKwkJaWYgKG5ld19iaCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShjaSwgbmV3X2JoKTsKKworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGNpLCBvbGRfYmxvY2ssICZvbGRfYmgsIE5VTEwpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgY2ksIG5ld19iaCwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQltZW1jcHkobmV3X2JoLT5iX2RhdGEsIG9sZF9iaC0+Yl9kYXRhLCBzYi0+c19ibG9ja3NpemUpOworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlicmVsc2UobmV3X2JoKTsKKwkJYnJlbHNlKG9sZF9iaCk7CisJCW5ld19iaCA9IE5VTEw7CisJCW9sZF9iaCA9IE5VTEw7CisJfQorCisJYnJlbHNlKG5ld19iaCk7CisJYnJlbHNlKG9sZF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9jbGVhcl9leHRfcmVmY291bnQoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsIHUzMiBsZW4sCisJCQkJICAgIHVuc2lnbmVkIGludCBleHRfZmxhZ3MsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlpbnQgcmV0LCBpbmRleDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyByZXBsYWNlX3JlYzsKKwlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGV0LT5ldF9jaSk7CisJdTY0IGlubyA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGV0LT5ldF9jaSk7CisKKwltbG9nKDAsICJpbm9kZSAlbGx1IGNwb3MgJXUsIGxlbiAldSwgcF9jbHVzdGVyICV1LCBleHRfZmxhZ3MgJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlubywgY3BvcywgbGVuLCBwX2NsdXN0ZXIsIGV4dF9mbGFncyk7CisKKwltZW1zZXQoJnJlcGxhY2VfcmVjLCAwLCBzaXplb2YocmVwbGFjZV9yZWMpKTsKKwlyZXBsYWNlX3JlYy5lX2Nwb3MgPSBjcHVfdG9fbGUzMihjcG9zKTsKKwlyZXBsYWNlX3JlYy5lX2xlYWZfY2x1c3RlcnMgPSBjcHVfdG9fbGUxNihsZW4pOworCXJlcGxhY2VfcmVjLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsCisJCQkJCQkJCSAgIHBfY2x1c3RlcikpOworCXJlcGxhY2VfcmVjLmVfZmxhZ3MgPSBleHRfZmxhZ3M7CisJcmVwbGFjZV9yZWMuZV9mbGFncyAmPSB+T0NGUzJfRVhUX1JFRkNPVU5URUQ7CisKKwlwYXRoID0gb2NmczJfbmV3X3BhdGhfZnJvbV9ldChldCk7CisJaWYgKCFwYXRoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZmluZF9wYXRoKGV0LT5ldF9jaSwgcGF0aCwgY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWVsID0gcGF0aF9sZWFmX2VsKHBhdGgpOworCisJaW5kZXggPSBvY2ZzMl9zZWFyY2hfZXh0ZW50X2xpc3QoZWwsIGNwb3MpOworCWlmIChpbmRleCA9PSAtMSB8fCBpbmRleCA+PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSkgeworCQlvY2ZzMl9lcnJvcihzYiwKKwkJCSAgICAiSW5vZGUgJWxsdSBoYXMgYW4gZXh0ZW50IGF0IGNwb3MgJXUgd2hpY2ggY2FuIG5vICIKKwkJCSAgICAibG9uZ2VyIGJlIGZvdW5kLlxuIiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWlubywgY3Bvcyk7CisJCXJldCA9IC1FUk9GUzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfc3BsaXRfZXh0ZW50KGhhbmRsZSwgZXQsIHBhdGgsIGluZGV4LAorCQkJCSAmcmVwbGFjZV9yZWMsIG1ldGFfYWMsIGRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlcGxhY2VfY2x1c3RlcnMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkgIHUzMiBjcG9zLCB1MzIgb2xkLAorCQkJCSAgdTMyIG5ldywgdTMyIGxlbiwKKwkJCQkgIHVuc2lnbmVkIGludCBleHRfZmxhZ3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9IGNvbnRleHQtPmRhdGFfZXQuZXRfY2k7CisJdTY0IGlubyA9IG9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKTsKKworCW1sb2coMCwgImlub2RlICVsbHUsIGNwb3MgJXUsIG9sZCAldSwgbmV3ICV1LCBsZW4gJXUsIGV4dF9mbGFncyAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5vLCBjcG9zLCBvbGQsIG5ldywgbGVuLCBleHRfZmxhZ3MpOworCisJLypJZiB0aGUgb2xkIGNsdXN0ZXJzIGlzIHVud3JpdHRlbiwgbm8gbmVlZCB0byBkdXBsaWNhdGUuICovCisJaWYgKCEoZXh0X2ZsYWdzICYgT0NGUzJfRVhUX1VOV1JJVFRFTikpIHsKKwkJcmV0ID0gY29udGV4dC0+Y293X2R1cGxpY2F0ZV9jbHVzdGVycyhoYW5kbGUsIGNvbnRleHQsIGNwb3MsCisJCQkJCQkgICAgICBvbGQsIG5ldywgbGVuKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGVhcl9leHRfcmVmY291bnQoaGFuZGxlLCAmY29udGV4dC0+ZGF0YV9ldCwKKwkJCQkgICAgICAgY3BvcywgbmV3LCBsZW4sIGV4dF9mbGFncywKKwkJCQkgICAgICAgY29udGV4dC0+bWV0YV9hYywgJmNvbnRleHQtPmRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2Nvd19zeW5jX3dyaXRlYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQgKmNvbnRleHQsCisJCQkJICAgIHUzMiBjcG9zLCB1MzIgbnVtX2NsdXN0ZXJzKQoreworCWludCByZXQgPSAwOworCWxvZmZfdCBvZmZzZXQsIGVuZCwgbWFwX2VuZDsKKwlwZ29mZl90IHBhZ2VfaW5kZXg7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoY29udGV4dC0+aW5vZGUpKQorCQlyZXR1cm4gMDsKKworCW9mZnNldCA9ICgobG9mZl90KWNwb3MpIDw8IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzOworCWVuZCA9IG9mZnNldCArIChudW1fY2x1c3RlcnMgPDwgT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMpOworCisJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGNvbnRleHQtPmlub2RlLT5pX21hcHBpbmcsCisJCQkJICAgICAgIG9mZnNldCwgZW5kIC0gMSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdoaWxlIChvZmZzZXQgPCBlbmQpIHsKKwkJcGFnZV9pbmRleCA9IG9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQltYXBfZW5kID0gKHBhZ2VfaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOworCQlpZiAobWFwX2VuZCA+IGVuZCkKKwkJCW1hcF9lbmQgPSBlbmQ7CisKKwkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShjb250ZXh0LT5pbm9kZS0+aV9tYXBwaW5nLCBwYWdlX2luZGV4KTsKKwkJQlVHX09OKCFwYWdlKTsKKworCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCQlpZiAoUGFnZUVycm9yKHBhZ2UpKSB7CisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQl9IGVsc2UKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlwYWdlID0gTlVMTDsKKwkJb2Zmc2V0ID0gbWFwX2VuZDsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGlfZ2V0X2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkgdTMyIHZfY2x1c3RlciwgdTMyICpwX2NsdXN0ZXIsCisJCQkJIHUzMiAqbnVtX2NsdXN0ZXJzLAorCQkJCSB1bnNpZ25lZCBpbnQgKmV4dGVudF9mbGFncykKK3sKKwlyZXR1cm4gb2NmczJfZ2V0X2NsdXN0ZXJzKGNvbnRleHQtPmlub2RlLCB2X2NsdXN0ZXIsIHBfY2x1c3RlciwKKwkJCQkgIG51bV9jbHVzdGVycywgZXh0ZW50X2ZsYWdzKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9tYWtlX2NsdXN0ZXJzX3dyaXRhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCXN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCwKKwkJCQkJdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsCisJCQkJCXUzMiBudW1fY2x1c3RlcnMsIHVuc2lnbmVkIGludCBlX2ZsYWdzKQoreworCWludCByZXQsIGRlbGV0ZSwgaW5kZXgsIGNyZWRpdHMgPSAgMDsKKwl1MzIgbmV3X2JpdCwgbmV3X2xlbjsKKwl1bnNpZ25lZCBpbnQgc2V0X2xlbjsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKHNiKTsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX2xlYWZfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSA9ICZjb250ZXh0LT5yZWZfdHJlZS0+cmZfY2k7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyByZWM7CisKKwltbG9nKDAsICJjcG9zICV1LCBwX2NsdXN0ZXIgJXUsIG51bV9jbHVzdGVycyAldSwgZV9mbGFncyAldVxuIiwKKwkgICAgIGNwb3MsIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLCBlX2ZsYWdzKTsKKworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfYWxsb2NhdG9ycyhzYiwgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgJmNvbnRleHQtPmRhdGFfZXQsCisJCQkJCSAgICAgcmVmX2NpLAorCQkJCQkgICAgIGNvbnRleHQtPnJlZl9yb290X2JoLAorCQkJCQkgICAgICZjb250ZXh0LT5tZXRhX2FjLAorCQkJCQkgICAgICZjb250ZXh0LT5kYXRhX2FjLCAmY3JlZGl0cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGNvbnRleHQtPnBvc3RfcmVmY291bnQpCisJCWNyZWRpdHMgKz0gY29udGV4dC0+cG9zdF9yZWZjb3VudC0+Y3JlZGl0czsKKworCWNyZWRpdHMgKz0gY29udGV4dC0+ZXh0cmFfY3JlZGl0czsKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKG51bV9jbHVzdGVycykgeworCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKHJlZl9jaSwgY29udGV4dC0+cmVmX3Jvb3RfYmgsCisJCQkJCSAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgJnJlYywgJmluZGV4LCAmcmVmX2xlYWZfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKworCQlCVUdfT04oIXJlYy5yX3JlZmNvdW50KTsKKwkJc2V0X2xlbiA9IG1pbigodTY0KXBfY2x1c3RlciArIG51bV9jbHVzdGVycywKKwkJCSAgICAgIGxlNjRfdG9fY3B1KHJlYy5yX2Nwb3MpICsKKwkJCSAgICAgIGxlMzJfdG9fY3B1KHJlYy5yX2NsdXN0ZXJzKSkgLSBwX2NsdXN0ZXI7CisKKwkJLyoKKwkJICogVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IHNpdHVhdGlvbiBoZXJlLgorCQkgKiAxLiBJZiByZWZjb3VudCA9PSAxLCByZW1vdmUgdGhlIGZsYWcgYW5kIGRvbid0IENPVy4KKwkJICogMi4gSWYgcmVmY291bnQgPiAxLCBhbGxvY2F0ZSBjbHVzdGVycy4KKwkJICogICAgSGVyZSB3ZSBtYXkgbm90IGFsbG9jYXRlIHJfbGVuIG9uY2UgYXQgYSB0aW1lLCBzbyBjb250aW51ZQorCQkgKiAgICB1bnRpbCB3ZSByZWFjaCBudW1fY2x1c3RlcnMuCisJCSAqLworCQlpZiAobGUzMl90b19jcHUocmVjLnJfcmVmY291bnQpID09IDEpIHsKKwkJCWRlbGV0ZSA9IDA7CisJCQlyZXQgPSBvY2ZzMl9jbGVhcl9leHRfcmVmY291bnQoaGFuZGxlLAorCQkJCQkJICAgICAgICZjb250ZXh0LT5kYXRhX2V0LAorCQkJCQkJICAgICAgIGNwb3MsIHBfY2x1c3RlciwKKwkJCQkJCSAgICAgICBzZXRfbGVuLCBlX2ZsYWdzLAorCQkJCQkJICAgICAgIGNvbnRleHQtPm1ldGFfYWMsCisJCQkJCQkgICAgICAgJmNvbnRleHQtPmRlYWxsb2MpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dF9jb21taXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZWxldGUgPSAxOworCisJCQlyZXQgPSBfX29jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLAorCQkJCQkJICAgICBjb250ZXh0LT5kYXRhX2FjLAorCQkJCQkJICAgICAxLCBzZXRfbGVuLAorCQkJCQkJICAgICAmbmV3X2JpdCwgJm5ld19sZW4pOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dF9jb21taXQ7CisJCQl9CisKKwkJCXJldCA9IG9jZnMyX3JlcGxhY2VfY2x1c3RlcnMoaGFuZGxlLCBjb250ZXh0LAorCQkJCQkJICAgICBjcG9zLCBwX2NsdXN0ZXIsIG5ld19iaXQsCisJCQkJCQkgICAgIG5ld19sZW4sIGVfZmxhZ3MpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dF9jb21taXQ7CisJCQl9CisJCQlzZXRfbGVuID0gbmV3X2xlbjsKKwkJfQorCisJCXJldCA9IF9fb2NmczJfZGVjcmVhc2VfcmVmY291bnQoaGFuZGxlLCByZWZfY2ksCisJCQkJCQljb250ZXh0LT5yZWZfcm9vdF9iaCwKKwkJCQkJCXBfY2x1c3Rlciwgc2V0X2xlbiwKKwkJCQkJCWNvbnRleHQtPm1ldGFfYWMsCisJCQkJCQkmY29udGV4dC0+ZGVhbGxvYywgZGVsZXRlKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisKKwkJY3BvcyArPSBzZXRfbGVuOworCQlwX2NsdXN0ZXIgKz0gc2V0X2xlbjsKKwkJbnVtX2NsdXN0ZXJzIC09IHNldF9sZW47CisJCWJyZWxzZShyZWZfbGVhZl9iaCk7CisJCXJlZl9sZWFmX2JoID0gTlVMTDsKKwl9CisKKwkvKiBoYW5kbGUgYW55IHBvc3RfY293IGFjdGlvbi4gKi8KKwlpZiAoY29udGV4dC0+cG9zdF9yZWZjb3VudCAmJiBjb250ZXh0LT5wb3N0X3JlZmNvdW50LT5mdW5jKSB7CisJCXJldCA9IGNvbnRleHQtPnBvc3RfcmVmY291bnQtPmZ1bmMoY29udGV4dC0+aW5vZGUsIGhhbmRsZSwKKwkJCQkJCWNvbnRleHQtPnBvc3RfcmVmY291bnQtPnBhcmEpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEhlcmUgd2Ugc2hvdWxkIHdyaXRlIHRoZSBuZXcgcGFnZSBvdXQgZmlyc3QgaWYgd2UgYXJlCisJICogaW4gd3JpdGUtYmFjayBtb2RlLgorCSAqLworCWlmIChjb250ZXh0LT5nZXRfY2x1c3RlcnMgPT0gb2NmczJfZGlfZ2V0X2NsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2Nvd19zeW5jX3dyaXRlYmFjayhzYiwgY29udGV4dCwgY3BvcywgbnVtX2NsdXN0ZXJzKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKworb3V0OgorCWlmIChjb250ZXh0LT5kYXRhX2FjKSB7CisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjb250ZXh0LT5kYXRhX2FjKTsKKwkJY29udGV4dC0+ZGF0YV9hYyA9IE5VTEw7CisJfQorCWlmIChjb250ZXh0LT5tZXRhX2FjKSB7CisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjb250ZXh0LT5tZXRhX2FjKTsKKwkJY29udGV4dC0+bWV0YV9hYyA9IE5VTEw7CisJfQorCWJyZWxzZShyZWZfbGVhZl9iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlcGxhY2VfY293KHN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGV4dC0+aW5vZGU7CisJdTMyIGNvd19zdGFydCA9IGNvbnRleHQtPmNvd19zdGFydCwgY293X2xlbiA9IGNvbnRleHQtPmNvd19sZW47CisJdTMyIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisKKwlpZiAoIW9jZnMyX3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkgeworCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsdSB3YW50IHRvIHVzZSByZWZjb3VudCAiCisJCQkgICAgInRyZWUsIGJ1dCB0aGUgZmVhdHVyZSBiaXQgaXMgbm90IHNldCBpbiB0aGUgIgorCQkJICAgICJzdXBlciBibG9jay4iLCBpbm9kZS0+aV9pbm8pOworCQlyZXR1cm4gLUVST0ZTOworCX0KKworCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZjb250ZXh0LT5kZWFsbG9jKTsKKworCXdoaWxlIChjb3dfbGVuKSB7CisJCXJldCA9IGNvbnRleHQtPmdldF9jbHVzdGVycyhjb250ZXh0LCBjb3dfc3RhcnQsICZwX2NsdXN0ZXIsCisJCQkJCSAgICAmbnVtX2NsdXN0ZXJzLCAmZXh0X2ZsYWdzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlCVUdfT04oIShleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpOworCisJCWlmIChjb3dfbGVuIDwgbnVtX2NsdXN0ZXJzKQorCQkJbnVtX2NsdXN0ZXJzID0gY293X2xlbjsKKworCQlyZXQgPSBvY2ZzMl9tYWtlX2NsdXN0ZXJzX3dyaXRhYmxlKGlub2RlLT5pX3NiLCBjb250ZXh0LAorCQkJCQkJICAgY293X3N0YXJ0LCBwX2NsdXN0ZXIsCisJCQkJCQkgICBudW1fY2x1c3RlcnMsIGV4dF9mbGFncyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJY293X2xlbiAtPSBudW1fY2x1c3RlcnM7CisJCWNvd19zdGFydCArPSBudW1fY2x1c3RlcnM7CisJfQorCisJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmNvbnRleHQtPmRlYWxsb2MpKSB7CisJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOworCQlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmY29udGV4dC0+ZGVhbGxvYyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0YXJ0aW5nIGF0IGNwb3MsIHRyeSB0byBDb1cgd3JpdGVfbGVuIGNsdXN0ZXJzLiAgRG9uJ3QgQ29XCisgKiBwYXN0IG1heF9jcG9zLiAgVGhpcyB3aWxsIHN0b3Agd2hlbiBpdCBydW5zIGludG8gYSBob2xlIG9yIGFuCisgKiB1bnJlZmNvdW50ZWQgZXh0ZW50LgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X2Nvd19odW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgICB1MzIgY3BvcywgdTMyIHdyaXRlX2xlbiwgdTMyIG1heF9jcG9zKQoreworCWludCByZXQ7CisJdTMyIGNvd19zdGFydCA9IDAsIGNvd19sZW4gPSAwOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZTsKKwlzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQgKmNvbnRleHQgPSBOVUxMOworCisJQlVHX09OKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCkpOworCisJcmV0ID0gb2NmczJfcmVmY291bnRfY2FsX2Nvd19jbHVzdGVycyhpbm9kZSwgJmRpLT5pZDIuaV9saXN0LAorCQkJCQkgICAgICBjcG9zLCB3cml0ZV9sZW4sIG1heF9jcG9zLAorCQkJCQkgICAgICAmY293X3N0YXJ0LCAmY293X2xlbik7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgIkNvVyBpbm9kZSAlbHUsIGNwb3MgJXUsIHdyaXRlX2xlbiAldSwgY293X3N0YXJ0ICV1LCAiCisJICAgICAiY293X2xlbiAldVxuIiwgaW5vZGUtPmlfaW5vLAorCSAgICAgY3Bvcywgd3JpdGVfbGVuLCBjb3dfc3RhcnQsIGNvd19sZW4pOworCisJQlVHX09OKGNvd19sZW4gPT0gMCk7CisKKwljb250ZXh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2Nvd19jb250ZXh0KSwgR0ZQX05PRlMpOworCWlmICghY29udGV4dCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShvc2IsIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYyksCisJCQkJICAgICAgIDEsICZyZWZfdHJlZSwgJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJY29udGV4dC0+aW5vZGUgPSBpbm9kZTsKKwljb250ZXh0LT5jb3dfc3RhcnQgPSBjb3dfc3RhcnQ7CisJY29udGV4dC0+Y293X2xlbiA9IGNvd19sZW47CisJY29udGV4dC0+cmVmX3RyZWUgPSByZWZfdHJlZTsKKwljb250ZXh0LT5yZWZfcm9vdF9iaCA9IHJlZl9yb290X2JoOworCWNvbnRleHQtPmNvd19kdXBsaWNhdGVfY2x1c3RlcnMgPSBvY2ZzMl9kdXBsaWNhdGVfY2x1c3RlcnNfYnlfcGFnZTsKKwljb250ZXh0LT5nZXRfY2x1c3RlcnMgPSBvY2ZzMl9kaV9nZXRfY2x1c3RlcnM7CisKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmY29udGV4dC0+ZGF0YV9ldCwKKwkJCQkgICAgICBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoKTsKKworCXJldCA9IG9jZnMyX3JlcGxhY2VfY293KGNvbnRleHQpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCS8qCisJICogdHJ1bmNhdGUgdGhlIGV4dGVudCBtYXAgaGVyZSBzaW5jZSBubyBtYXR0ZXIgd2hldGhlciB3ZSBtZWV0IHdpdGgKKwkgKiBhbnkgZXJyb3IgZHVyaW5nIHRoZSBhY3Rpb24sIHdlIHNob3VsZG4ndCB0cnVzdCBjYWNoZWQgZXh0ZW50IG1hcAorCSAqIGFueSBtb3JlLgorCSAqLworCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIGNvd19zdGFydCk7CisKKwlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworb3V0OgorCWtmcmVlKGNvbnRleHQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDb1cgYW55IGFuZCBhbGwgY2x1c3RlcnMgYmV0d2VlbiBjcG9zIGFuZCBjcG9zK3dyaXRlX2xlbi4KKyAqIERvbid0IENvVyBwYXN0IG1heF9jcG9zLiAgSWYgdGhpcyByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgYWxsCisgKiBjbHVzdGVycyBiZXR3ZWVuIGNwb3MgYW5kIGNwb3Mrd3JpdGVfbGVuIGFyZSBzYWZlIHRvIG1vZGlmeS4KKyAqLworaW50IG9jZnMyX3JlZmNvdW50X2NvdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJICAgICAgIHUzMiBjcG9zLCB1MzIgd3JpdGVfbGVuLCB1MzIgbWF4X2Nwb3MpCit7CisJaW50IHJldCA9IDA7CisJdTMyIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisKKwl3aGlsZSAod3JpdGVfbGVuKSB7CisJCXJldCA9IG9jZnMyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBfY2x1c3RlciwKKwkJCQkJICZudW1fY2x1c3RlcnMsICZleHRfZmxhZ3MpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3cml0ZV9sZW4gPCBudW1fY2x1c3RlcnMpCisJCQludW1fY2x1c3RlcnMgPSB3cml0ZV9sZW47CisKKwkJaWYgKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSB7CisJCQlyZXQgPSBvY2ZzMl9yZWZjb3VudF9jb3dfaHVuayhpbm9kZSwgZGlfYmgsIGNwb3MsCisJCQkJCQkgICAgICBudW1fY2x1c3RlcnMsIG1heF9jcG9zKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl3cml0ZV9sZW4gLT0gbnVtX2NsdXN0ZXJzOworCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3ZhbHVlX2dldF9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCSAgdTMyIHZfY2x1c3RlciwgdTMyICpwX2NsdXN0ZXIsCisJCQkJCSAgdTMyICpudW1fY2x1c3RlcnMsCisJCQkJCSAgdW5zaWduZWQgaW50ICpleHRlbnRfZmxhZ3MpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRleHQtPmlub2RlOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diA9IGNvbnRleHQtPmNvd19vYmplY3Q7CisKKwlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCB2X2NsdXN0ZXIsIHBfY2x1c3RlciwKKwkJCQkJbnVtX2NsdXN0ZXJzLCAmeHYtPnhyX2xpc3QsCisJCQkJCWV4dGVudF9mbGFncyk7Cit9CisKKy8qCisgKiBHaXZlbiBhIHhhdHRyIHZhbHVlIHJvb3QsIGNhbGN1bGF0ZSB0aGUgbW9zdCBtZXRhL2NyZWRpdHMgd2UgbmVlZCBmb3IKKyAqIHJlZmNvdW50IHRyZWUgY2hhbmdlIGlmIHdlIHRydW5jYXRlIGl0IHRvIDAuCisgKi8KK2ludCBvY2ZzMl9yZWZjb3VudGVkX3hhdHRyX2RlbGV0ZV9uZWVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2LAorCQkJCSAgICAgICBpbnQgKm1ldGFfYWRkLCBpbnQgKmNyZWRpdHMpCit7CisJaW50IHJldCA9IDAsIGluZGV4LCByZWZfYmxvY2tzID0gMDsKKwl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnM7CisJdTMyIGNwb3MgPSAwLCBjbHVzdGVycyA9IGxlMzJfdG9fY3B1KHh2LT54cl9jbHVzdGVycyk7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICpyYjsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjIHJlYzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9sZWFmX2JoID0gTlVMTDsKKworCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgJnh2LT54cl9saXN0LAorCQkJCQkgICAgICAgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJY3BvcyArPSBudW1fY2x1c3RlcnM7CisKKwkJd2hpbGUgKG51bV9jbHVzdGVycykgeworCQkJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X3JlYyhyZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkJICAgICBwX2NsdXN0ZXIsIG51bV9jbHVzdGVycywKKwkJCQkJCSAgICAgJnJlYywgJmluZGV4LAorCQkJCQkJICAgICAmcmVmX2xlYWZfYmgpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJQlVHX09OKCFyZWMucl9yZWZjb3VudCk7CisKKwkJCXJiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9sZWFmX2JoLT5iX2RhdGE7CisKKwkJCS8qCisJCQkgKiBXZSByZWFsbHkgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBvdGhlciBjbHVzdGVycyBpcyBpbgorCQkJICogdGhpcyByZWZjb3VudCBibG9jayBvciBub3QsIHNvIGp1c3QgdGFrZSB0aGUgd29yc3QKKwkJCSAqIGNhc2UgdGhhdCBhbGwgdGhlIGNsdXN0ZXJzIGFyZSBpbiB0aGlzIGJsb2NrIGFuZCBlYWNoCisJCQkgKiBvbmUgd2lsbCBzcGxpdCBhIHJlZmNvdW50IHJlYywgc28gdG90YWxseSB3ZSBuZWVkCisJCQkgKiBjbHVzdGVycyAqIDIgbmV3IHJlZmNvdW50IHJlYy4KKwkJCSAqLworCQkJaWYgKGxlNjRfdG9fY3B1KHJiLT5yZl9yZWNvcmRzLnJsX3VzZWQpICsgY2x1c3RlcnMgKiAyID4KKwkJCSAgICBsZTE2X3RvX2NwdShyYi0+cmZfcmVjb3Jkcy5ybF9jb3VudCkpCisJCQkJcmVmX2Jsb2NrcysrOworCisJCQkqY3JlZGl0cyArPSAxOworCQkJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwkJCXJlZl9sZWFmX2JoID0gTlVMTDsKKworCQkJaWYgKG51bV9jbHVzdGVycyA8PSBsZTMyX3RvX2NwdShyZWMucl9jbHVzdGVycykpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJbnVtX2NsdXN0ZXJzIC09IGxlMzJfdG9fY3B1KHJlYy5yX2NsdXN0ZXJzKTsKKwkJCXBfY2x1c3RlciArPSBudW1fY2x1c3RlcnM7CisJCX0KKwl9CisKKwkqbWV0YV9hZGQgKz0gcmVmX2Jsb2NrczsKKwlpZiAoIXJlZl9ibG9ja3MpCisJCWdvdG8gb3V0OworCisJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopcmVmX3Jvb3RfYmgtPmJfZGF0YTsKKwlpZiAobGUzMl90b19jcHUocmItPnJmX2ZsYWdzKSAmIE9DRlMyX1JFRkNPVU5UX1RSRUVfRkwpCisJCSpjcmVkaXRzICs9IE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFM7CisJZWxzZSB7CisJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCQlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZldCwgcmVmX2NpLCByZWZfcm9vdF9iaCk7CisJCSpjcmVkaXRzICs9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMoaW5vZGUtPmlfc2IsCisJCQkJCQkgICAgICBldC5ldF9yb290X2VsLAorCQkJCQkJICAgICAgcmVmX2Jsb2Nrcyk7CisJfQorCitvdXQ6CisJYnJlbHNlKHJlZl9sZWFmX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRG8gQ29XIGZvciB4YXR0ci4KKyAqLworaW50IG9jZnMyX3JlZmNvdW50X2Nvd194YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCSAgICAgdTMyIGNwb3MsIHUzMiB3cml0ZV9sZW4sCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpwb3N0KQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2ID0gdmItPnZiX3h2OworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9jb3dfY29udGV4dCAqY29udGV4dCA9IE5VTEw7CisJdTMyIGNvd19zdGFydCwgY293X2xlbjsKKworCUJVR19PTighKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpKTsKKworCXJldCA9IG9jZnMyX3JlZmNvdW50X2NhbF9jb3dfY2x1c3RlcnMoaW5vZGUsICZ4di0+eHJfbGlzdCwKKwkJCQkJICAgICAgY3Bvcywgd3JpdGVfbGVuLCBVSU5UX01BWCwKKwkJCQkJICAgICAgJmNvd19zdGFydCwgJmNvd19sZW4pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlCVUdfT04oY293X2xlbiA9PSAwKTsKKworCWNvbnRleHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfY293X2NvbnRleHQpLCBHRlBfTk9GUyk7CisJaWYgKCFjb250ZXh0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJY29udGV4dC0+aW5vZGUgPSBpbm9kZTsKKwljb250ZXh0LT5jb3dfc3RhcnQgPSBjb3dfc3RhcnQ7CisJY29udGV4dC0+Y293X2xlbiA9IGNvd19sZW47CisJY29udGV4dC0+cmVmX3RyZWUgPSByZWZfdHJlZTsKKwljb250ZXh0LT5yZWZfcm9vdF9iaCA9IHJlZl9yb290X2JoOzsKKwljb250ZXh0LT5jb3dfb2JqZWN0ID0geHY7CisKKwljb250ZXh0LT5jb3dfZHVwbGljYXRlX2NsdXN0ZXJzID0gb2NmczJfZHVwbGljYXRlX2NsdXN0ZXJzX2J5X2piZDsKKwkvKiBXZSBuZWVkIHRoZSBleHRyYSBjcmVkaXRzIGZvciBkdXBsaWNhdGVfY2x1c3RlcnMgYnkgamJkLiAqLworCWNvbnRleHQtPmV4dHJhX2NyZWRpdHMgPQorCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpICogY293X2xlbjsKKwljb250ZXh0LT5nZXRfY2x1c3RlcnMgPSBvY2ZzMl94YXR0cl92YWx1ZV9nZXRfY2x1c3RlcnM7CisJY29udGV4dC0+cG9zdF9yZWZjb3VudCA9IHBvc3Q7CisKKwlvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKCZjb250ZXh0LT5kYXRhX2V0LAorCQkJCQkgICBJTk9ERV9DQUNIRShpbm9kZSksIHZiKTsKKworCXJldCA9IG9jZnMyX3JlcGxhY2VfY293KGNvbnRleHQpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCWtmcmVlKGNvbnRleHQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZXh0ZW50IGludG8gcmVmY291bnQgdHJlZSBhbmQgbWFyayBhIGV4dGVudCByZWMKKyAqIGFzIHJlZmNvdW50ZWQgaW4gdGhlIGRpbm9kZSB0cmVlLgorICovCitpbnQgb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmRhdGFfZXQsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkgICAgdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsIHUzMiBudW1fY2x1c3RlcnMsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgc3RydWN0IG9jZnMyX3Bvc3RfcmVmY291bnQgKnBvc3QpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCWludCBjcmVkaXRzID0gMSwgcmVmX2Jsb2NrcyA9IDA7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOworCisJcmV0ID0gb2NmczJfY2FsY19yZWZjb3VudF9tZXRhX2NyZWRpdHMoaW5vZGUtPmlfc2IsCisJCQkJCSAgICAgICByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgICAmcmVmX2Jsb2NrcywgJmNyZWRpdHMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwltbG9nKDAsICJyZXNlcnZlIG5ldyBtZXRhZGF0YSAlZCwgY3JlZGl0cyA9ICVkXG4iLAorCSAgICAgcmVmX2Jsb2NrcywgY3JlZGl0cyk7CisKKwlpZiAocmVmX2Jsb2NrcykgeworCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3MoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAorCQkJCQkJCXJlZl9ibG9ja3MsICZtZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAocG9zdCkKKwkJY3JlZGl0cyArPSBwb3N0LT5jcmVkaXRzOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX21hcmtfZXh0ZW50X3JlZmNvdW50ZWQoaW5vZGUsIGRhdGFfZXQsIGhhbmRsZSwKKwkJCQkJICAgY3BvcywgbnVtX2NsdXN0ZXJzLCBwX2NsdXN0ZXIsCisJCQkJCSAgIG1ldGFfYWMsIGRlYWxsb2MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gX19vY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGUsIHJlZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJCXBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLCAwLAorCQkJCQltZXRhX2FjLCBkZWFsbG9jKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCWlmIChwb3N0ICYmIHBvc3QtPmZ1bmMpIHsKKwkJcmV0ID0gcG9zdC0+ZnVuYyhpbm9kZSwgaGFuZGxlLCBwb3N0LT5wYXJhKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY2hhbmdlX2N0aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQoreworCWludCByZXQ7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJCQkgICBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJZGktPmlfY3RpbWUgPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9jdGltZS50dl9zZWMpOworCWRpLT5pX2N0aW1lX25zZWMgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9jdGltZS50dl9uc2VjKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2F0dGFjaF9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgcmV0LCBkYXRhX2NoYW5nZWQgPSAwOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZTsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzOworCWxvZmZfdCBzaXplOworCXUzMiBjcG9zLCBudW1fY2x1c3RlcnMsIGNsdXN0ZXJzLCBwX2NsdXN0ZXI7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZGlfZXQ7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmZGVhbGxvYyk7CisKKwlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSkgeworCQlyZXQgPSBvY2ZzMl9jcmVhdGVfcmVmY291bnRfdHJlZShpbm9kZSwgZGlfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCUJVR19PTighZGktPmlfcmVmY291bnRfbG9jKTsKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLAorCQkJCSAgICAgICBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLCAxLAorCQkJCSAgICAgICAmcmVmX3RyZWUsICZyZWZfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZkaV9ldCwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCk7CisKKwlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWNsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGlub2RlLT5pX3NiLCBzaXplKTsKKworCWNwb3MgPSAwOworCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJcmV0ID0gb2NmczJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgJm51bV9jbHVzdGVycywgJmV4dF9mbGFncyk7CisKKwkJaWYgKHBfY2x1c3RlciAmJiAhKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSkgeworCQkJcmV0ID0gb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoaW5vZGUsICZkaV9ldCwKKwkJCQkJCSAgICAgICZyZWZfdHJlZS0+cmZfY2ksCisJCQkJCQkgICAgICByZWZfcm9vdF9iaCwgY3BvcywKKwkJCQkJCSAgICAgIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLAorCQkJCQkJICAgICAgJmRlYWxsb2MsIE5VTEwpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIHVubG9jazsKKwkJCX0KKworCQkJZGF0YV9jaGFuZ2VkID0gMTsKKwkJfQorCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CisKKwlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShpbm9kZSwgZGlfYmgsCisJCQkJCQkgICAgICAgJnJlZl90cmVlLT5yZl9jaSwKKwkJCQkJCSAgICAgICByZWZfcm9vdF9iaCwKKwkJCQkJCSAgICAgICAmZGVhbGxvYyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJfQorCisJaWYgKGRhdGFfY2hhbmdlZCkgeworCQlyZXQgPSBvY2ZzMl9jaGFuZ2VfY3RpbWUoaW5vZGUsIGRpX2JoKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CisKK3VubG9jazoKKwlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShvc2IsIHJlZl90cmVlLCAxKTsKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCisJaWYgKCFyZXQgJiYgb2NmczJfZGVhbGxvY19oYXNfY2x1c3RlcigmZGVhbGxvYykpIHsKKwkJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMSk7CisJCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZkZWFsbG9jKTsKKwl9CitvdXQ6CisJLyoKKwkgKiBFbXB0eSB0aGUgZXh0ZW50IG1hcCBzbyB0aGF0IHdlIG1heSBnZXQgdGhlIHJpZ2h0IGV4dGVudAorCSAqIHJlY29yZCBmcm9tIHRoZSBkaXNrLgorCSAqLworCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9hZGRfcmVmY291bnRlZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgIHUzMiBjcG9zLCB1MzIgcF9jbHVzdGVyLCB1MzIgbnVtX2NsdXN0ZXJzLAorCQkJCSAgIHVuc2lnbmVkIGludCBleHRfZmxhZ3MsCisJCQkJICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCWludCBjcmVkaXRzID0gMDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X2FsbG9jYXRvcnMoaW5vZGUtPmlfc2IsCisJCQkJCSAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJCSAgICAgZXQsIHJlZl9jaSwKKwkJCQkJICAgICByZWZfcm9vdF9iaCwgJm1ldGFfYWMsCisJCQkJCSAgICAgTlVMTCwgJmNyZWRpdHMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGV0LCBjcG9zLAorCQkJY3B1X3RvX2xlNjQob2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLAorCQkJCQkJCSAgICAgcF9jbHVzdGVyKSksCisJCQludW1fY2x1c3RlcnMsIGV4dF9mbGFncywgbWV0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGUsIHJlZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJICAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCisJCQkJICAgICAgbWV0YV9hYywgZGVhbGxvYyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CitvdXQ6CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2R1cGxpY2F0ZV9leHRlbnRfbGlzdChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsCisJCQkJc3RydWN0IGlub2RlICp0X2lub2RlLAorCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsIGNsdXN0ZXJzLCBjcG9zOworCWxvZmZfdCBzaXplOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRSh0X2lub2RlKSwgdF9iaCk7CisKKwlzaXplID0gaV9zaXplX3JlYWQoc19pbm9kZSk7CisJY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc19pbm9kZS0+aV9zYiwgc2l6ZSk7CisKKwljcG9zID0gMDsKKwl3aGlsZSAoY3BvcyA8IGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX2dldF9jbHVzdGVycyhzX2lub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgJm51bV9jbHVzdGVycywgJmV4dF9mbGFncyk7CisKKwkJaWYgKHBfY2x1c3RlcikgeworCQkJcmV0ID0gb2NmczJfYWRkX3JlZmNvdW50ZWRfZXh0ZW50KHRfaW5vZGUsICZldCwKKwkJCQkJCQkgIHJlZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJCQkJICBjcG9zLCBwX2NsdXN0ZXIsCisJCQkJCQkJICBudW1fY2x1c3RlcnMsCisJCQkJCQkJICBleHRfZmxhZ3MsCisJCQkJCQkJICBkZWFsbG9jKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogY2hhbmdlIHRoZSBuZXcgZmlsZSdzIGF0dHJpYnV0ZXMgdG8gdGhlIHNyYy4KKyAqCisgKiByZWZsaW5rIGNyZWF0ZXMgYSBzbmFwc2hvdCBvZiBhIGZpbGUsIHRoYXQgbWVhbnMgdGhlIGF0dHJpYnV0ZXMKKyAqIG11c3QgYmUgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhyZWUgZXhjZXB0aW9ucyAtIG5saW5rLCBpbm8sIGFuZCBjdGltZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jb21wbGV0ZV9yZWZsaW5rKHN0cnVjdCBpbm9kZSAqc19pbm9kZSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCwKKwkJCQkgIHN0cnVjdCBpbm9kZSAqdF9pbm9kZSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCwKKwkJCQkgIGJvb2wgcHJlc2VydmUpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKnNfZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXNfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopdF9iaC0+Yl9kYXRhOworCWxvZmZfdCBzaXplID0gaV9zaXplX3JlYWQoc19pbm9kZSk7CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhPQ0ZTMl9TQih0X2lub2RlLT5pX3NiKSwKKwkJCQkgICBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUodF9pbm9kZSksIHRfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJc3Bpbl9sb2NrKCZPQ0ZTMl9JKHRfaW5vZGUpLT5pcF9sb2NrKTsKKwlPQ0ZTMl9JKHRfaW5vZGUpLT5pcF9jbHVzdGVycyA9IE9DRlMyX0koc19pbm9kZSktPmlwX2NsdXN0ZXJzOworCU9DRlMyX0kodF9pbm9kZSktPmlwX2F0dHIgPSBPQ0ZTMl9JKHNfaW5vZGUpLT5pcF9hdHRyOworCU9DRlMyX0kodF9pbm9kZSktPmlwX2R5bl9mZWF0dXJlcyA9IE9DRlMyX0koc19pbm9kZSktPmlwX2R5bl9mZWF0dXJlczsKKwlzcGluX3VubG9jaygmT0NGUzJfSSh0X2lub2RlKS0+aXBfbG9jayk7CisJaV9zaXplX3dyaXRlKHRfaW5vZGUsIHNpemUpOworCisJZGktPmlfeGF0dHJfaW5saW5lX3NpemUgPSBzX2RpLT5pX3hhdHRyX2lubGluZV9zaXplOworCWRpLT5pX2NsdXN0ZXJzID0gc19kaS0+aV9jbHVzdGVyczsKKwlkaS0+aV9zaXplID0gc19kaS0+aV9zaXplOworCWRpLT5pX2R5bl9mZWF0dXJlcyA9IHNfZGktPmlfZHluX2ZlYXR1cmVzOworCWRpLT5pX2F0dHIgPSBzX2RpLT5pX2F0dHI7CisKKwlpZiAocHJlc2VydmUpIHsKKwkJZGktPmlfdWlkID0gc19kaS0+aV91aWQ7CisJCWRpLT5pX2dpZCA9IHNfZGktPmlfZ2lkOworCQlkaS0+aV9tb2RlID0gc19kaS0+aV9tb2RlOworCisJCS8qCisJCSAqIHVwZGF0ZSB0aW1lLgorCQkgKiB3ZSB3YW50IG10aW1lIHRvIGFwcGVhciBpZGVudGljYWwgdG8gdGhlIHNvdXJjZSBhbmQKKwkJICogdXBkYXRlIGN0aW1lLgorCQkgKi8KKwkJdF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKworCQlkaS0+aV9jdGltZSA9IGNwdV90b19sZTY0KHRfaW5vZGUtPmlfY3RpbWUudHZfc2VjKTsKKwkJZGktPmlfY3RpbWVfbnNlYyA9IGNwdV90b19sZTMyKHRfaW5vZGUtPmlfY3RpbWUudHZfbnNlYyk7CisKKwkJdF9pbm9kZS0+aV9tdGltZSA9IHNfaW5vZGUtPmlfbXRpbWU7CisJCWRpLT5pX210aW1lID0gc19kaS0+aV9tdGltZTsKKwkJZGktPmlfbXRpbWVfbnNlYyA9IHNfZGktPmlfbXRpbWVfbnNlYzsKKwl9CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdF9iaCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKHRfaW5vZGUtPmlfc2IpLCBoYW5kbGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3JlZmxpbmtfbm9kZShzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKnRfaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRfYmgsCisJCQkJICAgICBib29sIHByZXNlcnZlKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKHNfaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXNfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWU7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmZGVhbGxvYyk7CisKKwlyZXQgPSBvY2ZzMl9zZXRfcmVmY291bnRfdHJlZSh0X2lub2RlLCB0X2JoLAorCQkJCSAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYykpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLCBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLAorCQkJCSAgICAgICAxLCAmcmVmX3RyZWUsICZyZWZfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlyYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKilyZWZfcm9vdF9iaC0+Yl9kYXRhOworCisJcmV0ID0gb2NmczJfZHVwbGljYXRlX2V4dGVudF9saXN0KHNfaW5vZGUsIHRfaW5vZGUsIHRfYmgsCisJCQkJCSAgJnJlZl90cmVlLT5yZl9jaSwgcmVmX3Jvb3RfYmgsCisJCQkJCSAgJmRlYWxsb2MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF91bmxvY2tfcmVmY291bnQ7CisJfQorCisJcmV0ID0gb2NmczJfY29tcGxldGVfcmVmbGluayhzX2lub2RlLCBzX2JoLCB0X2lub2RlLCB0X2JoLCBwcmVzZXJ2ZSk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfdW5sb2NrX3JlZmNvdW50OgorCW9jZnMyX3VubG9ja19yZWZjb3VudF90cmVlKG9zYiwgcmVmX3RyZWUsIDEpOworCWJyZWxzZShyZWZfcm9vdF9iaCk7CitvdXQ6CisJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmRlYWxsb2MpKSB7CisJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOworCQlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmZGVhbGxvYyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX29jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJICAgc3RydWN0IGlub2RlICpuZXdfaW5vZGUsCisJCQkgICBib29sIHByZXNlcnZlKQoreworCWludCByZXQ7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmggPSBOVUxMOworCisJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9hdHRhY2hfcmVmY291bnRfdHJlZShpbm9kZSwgb2xkX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbXV0ZXhfbG9jaygmbmV3X2lub2RlLT5pX211dGV4KTsKKwlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKG5ld19pbm9kZSwgJm5ld19iaCwgMSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jcmVhdGVfcmVmbGlua19ub2RlKGlub2RlLCBvbGRfYmgsCisJCQkJCW5ld19pbm9kZSwgbmV3X2JoLCBwcmVzZXJ2ZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gaW5vZGVfdW5sb2NrOworCX0KKworCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJzKGlub2RlLCBvbGRfYmgsCisJCQkJCSAgIG5ld19pbm9kZSwgbmV3X2JoLAorCQkJCQkgICBwcmVzZXJ2ZSk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJfQoraW5vZGVfdW5sb2NrOgorCW9jZnMyX2lub2RlX3VubG9jayhuZXdfaW5vZGUsIDEpOworCWJyZWxzZShuZXdfYmgpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJm5ld19pbm9kZS0+aV9tdXRleCk7CitvdXQ6CisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBib29sIHByZXNlcnZlKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCA9IE5VTEw7CisJc3RydWN0IGlub2RlICpuZXdfb3JwaGFuX2lub2RlID0gTlVMTDsKKworCWlmICghb2NmczJfcmVmY291bnRfdHJlZShPQ0ZTMl9TQihpbm9kZS0+aV9zYikpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnJvciA9IG9jZnMyX2NyZWF0ZV9pbm9kZV9pbl9vcnBoYW4oZGlyLCBpbm9kZS0+aV9tb2RlLAorCQkJCQkgICAgICZuZXdfb3JwaGFuX2lub2RlKTsKKwlpZiAoZXJyb3IpIHsKKwkJbWxvZ19lcnJubyhlcnJvcik7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gb2NmczJfaW5vZGVfbG9jayhpbm9kZSwgJm9sZF9iaCwgMSk7CisJaWYgKGVycm9yKSB7CisJCW1sb2dfZXJybm8oZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfeGF0dHJfc2VtKTsKKwlkb3duX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwllcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsCisJCQkJbmV3X29ycGhhbl9pbm9kZSwgcHJlc2VydmUpOworCXVwX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwl1cF93cml0ZSgmT0NGUzJfSShpbm9kZSktPmlwX3hhdHRyX3NlbSk7CisKKwlvY2ZzMl9pbm9kZV91bmxvY2soaW5vZGUsIDEpOworCWJyZWxzZShvbGRfYmgpOworCisJaWYgKGVycm9yKSB7CisJCW1sb2dfZXJybm8oZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJZiB0aGUgc2VjdXJpdHkgaXNuJ3QgcHJlc2VydmVkLCB3ZSBuZWVkIHRvIHJlLWluaXRpYWxpemUgdGhlbS4gKi8KKwlpZiAoIXByZXNlcnZlKSB7CisJCWVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSk7CisJCWlmIChlcnJvcikKKwkJCW1sb2dfZXJybm8oZXJyb3IpOworCX0KK291dDoKKwlpZiAoIWVycm9yKSB7CisJCWVycm9yID0gb2NmczJfbXZfb3JwaGFuZWRfaW5vZGVfdG9fbmV3KGRpciwgbmV3X29ycGhhbl9pbm9kZSwKKwkJCQkJCSAgICAgICBuZXdfZGVudHJ5KTsKKwkJaWYgKGVycm9yKQorCQkJbWxvZ19lcnJubyhlcnJvcik7CisJfQorCisJaWYgKG5ld19vcnBoYW5faW5vZGUpIHsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBvcGVuX3VubG9jayB0aGUgaW5vZGUgbm8gbWF0dGVyIHdoZXRoZXIgd2UKKwkJICogc3VjY2VlZCBvciBub3QsIHNvIHRoYXQgb3RoZXIgbm9kZXMgY2FuIGRlbGV0ZSBpdCBsYXRlci4KKwkJICovCisJCW9jZnMyX29wZW5fdW5sb2NrKG5ld19vcnBoYW5faW5vZGUpOworCQlpZiAoZXJyb3IpCisJCQlpcHV0KG5ld19vcnBoYW5faW5vZGUpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIEJlbG93IGhlcmUgYXJlIHRoZSBiaXRzIHVzZWQgYnkgT0NGUzJfSU9DX1JFRkxJTksoKSB0byBmYWtlCisgKiBzeXNfcmVmbGluaygpLiAgVGhpcyB3aWxsIGdvIGF3YXkgd2hlbiB2ZnNfcmVmbGluaygpIGV4aXN0cyBpbgorICogZnMvbmFtZWkuYy4KKyAqLworCisvKiBjb3BpZWQgZnJvbSBtYXlfY3JlYXRlIGluIFZGUy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21heV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmNoaWxkKQoreworCWlmIChjaGlsZC0+ZF9pbm9kZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisJaWYgKElTX0RFQURESVIoZGlyKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGlub2RlX3Blcm1pc3Npb24oZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7Cit9CisKKy8qIGNvcGllZCBmcm9tIHVzZXJfcGF0aF9wYXJlbnQuICovCitzdGF0aWMgaW50IG9jZnMyX3VzZXJfcGF0aF9wYXJlbnQoY29uc3QgY2hhciBfX3VzZXIgKnBhdGgsCisJCQkJICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY2hhciAqKm5hbWUpCit7CisJY2hhciAqcyA9IGdldG5hbWUocGF0aCk7CisJaW50IGVycm9yOworCisJaWYgKElTX0VSUihzKSkKKwkJcmV0dXJuIFBUUl9FUlIocyk7CisKKwllcnJvciA9IHBhdGhfbG9va3VwKHMsIExPT0tVUF9QQVJFTlQsIG5kKTsKKwlpZiAoZXJyb3IpCisJCXB1dG5hbWUocyk7CisJZWxzZQorCQkqbmFtZSA9IHM7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogb2NmczJfdmZzX3JlZmxpbmsgLSBDcmVhdGUgYSByZWZlcmVuY2UtY291bnRlZCBsaW5rCisgKgorICogQG9sZF9kZW50cnk6ICAgICAgICBzb3VyY2UgZGVudHJ5ICsgaW5vZGUKKyAqIEBkaXI6ICAgICAgIGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHRhcmdldAorICogQG5ld19kZW50cnk6ICAgICAgICB0YXJnZXQgZGVudHJ5CisgKiBAcHJlc2VydmU6ICBpZiB0cnVlLCBwcmVzZXJ2ZSBhbGwgZmlsZSBhdHRyaWJ1dGVzCisgKi8KK2ludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWVycm9yID0gb2NmczJfbWF5X2NyZWF0ZShkaXIsIG5ld19kZW50cnkpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGRpci0+aV9zYiAhPSBpbm9kZS0+aV9zYikKKwkJcmV0dXJuIC1FWERFVjsKKworCS8qCisJICogQSByZWZsaW5rIHRvIGFuIGFwcGVuZC1vbmx5IG9yIGltbXV0YWJsZSBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkLgorCSAqLworCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBPbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGJlIHJlZmxpbmtlZC4gKi8KKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAtRVBFUk07CisKKwkvKgorCSAqIElmIHRoZSBjYWxsZXIgd2FudHMgdG8gcHJlc2VydmUgb3duZXJzaGlwLCB0aGV5IHJlcXVpcmUgdGhlCisJICogcmlnaHRzIHRvIGRvIHNvLgorCSAqLworCWlmIChwcmVzZXJ2ZSkgeworCQlpZiAoKGN1cnJlbnRfZnN1aWQoKSAhPSBpbm9kZS0+aV91aWQpICYmICFjYXBhYmxlKENBUF9DSE9XTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlpZiAoIWluX2dyb3VwX3AoaW5vZGUtPmlfZ2lkKSAmJiAhY2FwYWJsZShDQVBfQ0hPV04pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBjYWxsZXIgaXMgbW9kaWZ5aW5nIGFueSBhc3BlY3Qgb2YgdGhlIGF0dHJpYnV0ZXMsIHRoZXkKKwkgKiBhcmUgbm90IGNyZWF0aW5nIGEgc25hcHNob3QuICBUaGV5IG5lZWQgcmVhZCBwZXJtaXNzaW9uIG9uIHRoZQorCSAqIGZpbGUuCisJICovCisJaWYgKCFwcmVzZXJ2ZSkgeworCQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9SRUFEKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwl2ZnNfZHFfaW5pdChkaXIpOworCWVycm9yID0gb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnksIHByZXNlcnZlKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAoIWVycm9yKQorCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBuZXdfZGVudHJ5KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisvKgorICogTW9zdCBjb2RlcyBhcmUgY29waWVkIGZyb20gc3lzX2xpbmthdC4KKyAqLworaW50IG9jZnMyX3JlZmxpbmtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCWNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLAorCQkJY29uc3QgY2hhciBfX3VzZXIgKm5ld25hbWUsCisJCQlib29sIHByZXNlcnZlKQoreworCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnk7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBvbGRfcGF0aDsKKwlpbnQgZXJyb3I7CisJY2hhciAqdG8gPSBOVUxMOworCisJaWYgKCFvY2ZzMl9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVycm9yID0gdXNlcl9wYXRoX2F0KEFUX0ZEQ1dELCBvbGRuYW1lLCAwLCAmb2xkX3BhdGgpOworCWlmIChlcnJvcikgeworCQltbG9nX2Vycm5vKGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gb2NmczJfdXNlcl9wYXRoX3BhcmVudChuZXduYW1lLCAmbmQsICZ0byk7CisJaWYgKGVycm9yKSB7CisJCW1sb2dfZXJybm8oZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnJvciA9IC1FWERFVjsKKwlpZiAob2xkX3BhdGgubW50ICE9IG5kLnBhdGgubW50KQorCQlnb3RvIG91dF9yZWxlYXNlOworCW5ld19kZW50cnkgPSBsb29rdXBfY3JlYXRlKCZuZCwgMCk7CisJZXJyb3IgPSBQVFJfRVJSKG5ld19kZW50cnkpOworCWlmIChJU19FUlIobmV3X2RlbnRyeSkpIHsKKwkJbWxvZ19lcnJubyhlcnJvcik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoZXJyb3IpIHsKKwkJbWxvZ19lcnJubyhlcnJvcik7CisJCWdvdG8gb3V0X2RwdXQ7CisJfQorCisJZXJyb3IgPSBvY2ZzMl92ZnNfcmVmbGluayhvbGRfcGF0aC5kZW50cnksCisJCQkJICBuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKKwkJCQkgIG5ld19kZW50cnksIHByZXNlcnZlKTsKKwltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CitvdXRfZHB1dDoKKwlkcHV0KG5ld19kZW50cnkpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJm5kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKK291dF9yZWxlYXNlOgorCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlwdXRuYW1lKHRvKTsKK291dDoKKwlwYXRoX3B1dCgmb2xkX3BhdGgpOworCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmggYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQxOWIxCi0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiByZWZjb3VudHRyZWUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBPQ0ZTMl9SRUZDT1VOVFRSRUVfSAorI2RlZmluZSBPQ0ZTMl9SRUZDT1VOVFRSRUVfSAorCitzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSB7CisJc3RydWN0IHJiX25vZGUgcmZfbm9kZTsKKwl1NjQgcmZfYmxrbm87CisJdTMyIHJmX2dlbmVyYXRpb247CisJc3RydWN0IHJ3X3NlbWFwaG9yZSByZl9zZW07CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzIHJmX2xvY2tyZXM7CisJc3RydWN0IGtyZWYgcmZfZ2V0Y250OworCWludCByZl9yZW1vdmVkOworCisJLyogdGhlIGZvbGxvd2luZyA0IGZpZWxkcyBhcmUgdXNlZCBieSBjYWNoaW5nX2luZm8uICovCisJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyByZl9jaTsKKwlzcGlubG9ja190IHJmX2xvY2s7CisJc3RydWN0IG11dGV4IHJmX2lvX211dGV4OworCXN0cnVjdCBzdXBlcl9ibG9jayAqcmZfc2I7Cit9OworCit2b2lkIG9jZnMyX3B1cmdlX3JlZmNvdW50X3RyZWVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKK2ludCBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCByZWZfYmxrbm8sIGludCBydywKKwkJCSAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKip0cmVlLAorCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZWZfYmgpOwordm9pZCBvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqdHJlZSwKKwkJCQlpbnQgcncpOworCitpbnQgb2NmczJfZGVjcmVhc2VfcmVmY291bnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBoYW5kbGVfdCAqaGFuZGxlLCB1MzIgY3BvcywgdTMyIGxlbiwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKKwkJCSAgICBpbnQgZGVsZXRlKTsKK2ludCBvY2ZzMl9wcmVwYXJlX3JlZmNvdW50X2NoYW5nZV9mb3JfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkJICB1NjQgcGh5c19ibGtubywKKwkJCQkJICB1MzIgY2x1c3RlcnMsCisJCQkJCSAgaW50ICpjcmVkaXRzLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYyk7CitpbnQgb2NmczJfcmVmY291bnRfY293KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCSAgICAgICB1MzIgY3BvcywgdTMyIHdyaXRlX2xlbiwgdTMyIG1heF9jcG9zKTsKKwordHlwZWRlZiBpbnQgKG9jZnMyX3Bvc3RfcmVmY291bnRfZnVuYykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICAgdm9pZCAqcGFyYSk7CisvKgorICogU29tZSByZWZjb3VudCBjYWxsZXIgbmVlZCB0byBkbyBtb3JlIHdvcmsgYWZ0ZXIgd2UgbW9kaWZ5IHRoZSBkYXRhIGItdHJlZQorICogZHVyaW5nIHJlZmNvdW50IG9wZXJhdGlvbihpbmNsdWRpbmcgQ29XIGFuZCBhZGQgcmVmY291bnQgZmxhZyksIGFuZCBtYWtlIHRoZQorICogdHJhbnNhY3Rpb24gY29tcGxldGUuIFNvIGl0IG11c3QgZ2l2ZSB1cyB0aGlzIHN0cnVjdHVyZSBzbyB0aGF0IHdlIGNhbiBkbyBpdAorICogd2l0aGluIG91ciB0cmFuc2FjdGlvbi4KKyAqCisgKi8KK3N0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50IHsKKwlpbnQgY3JlZGl0czsJCQkvKiBjcmVkaXRzIGl0IG5lZWQgZm9yIGpvdXJuYWwuICovCisJb2NmczJfcG9zdF9yZWZjb3VudF9mdW5jICpmdW5jOwkvKiByZWFsIGZ1bmN0aW9uLiAqLworCXZvaWQgKnBhcmE7Cit9OworCitpbnQgb2NmczJfcmVmY291bnRlZF94YXR0cl9kZWxldGVfbmVlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkgICAgICAgaW50ICptZXRhX2FkZCwgaW50ICpjcmVkaXRzKTsKK2ludCBvY2ZzMl9yZWZjb3VudF9jb3dfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWUsCisJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkgICAgIHUzMiBjcG9zLCB1MzIgd3JpdGVfbGVuLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfcG9zdF9yZWZjb3VudCAqcG9zdCk7CitpbnQgb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmRhdGFfZXQsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkgICAgdTMyIGNwb3MsIHUzMiBwX2NsdXN0ZXIsIHUzMiBudW1fY2x1c3RlcnMsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkgICAgc3RydWN0IG9jZnMyX3Bvc3RfcmVmY291bnQgKnBvc3QpOworaW50IG9jZnMyX3JlbW92ZV9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpOworaW50IG9jZnMyX3RyeV9yZW1vdmVfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpOworaW50IG9jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCSAgICB1NjQgY3BvcywgdTMyIGxlbiwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7CitpbnQgb2NmczJfcmVmbGlua19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJY29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsCisJCQljb25zdCBjaGFyIF9fdXNlciAqbmV3bmFtZSwKKwkJCWJvb2wgcHJlc2VydmUpOworI2VuZGlmIC8qIE9DRlMyX1JFRkNPVU5UVFJFRV9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZXNpemUuYyBiL2ZzL29jZnMyL3Jlc2l6ZS5jCmluZGV4IDQyNGFkYWEuLjNjM2Q2NzMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3Jlc2l6ZS5jCisrKyBiL2ZzL29jZnMyL3Jlc2l6ZS5jCkBAIC0xMDYsOCArMTA2LDggQEAKIAltbG9nX2VudHJ5KCIobmV3X2NsdXN0ZXJzPSVkLCBmaXJzdF9uZXdfY2x1c3RlciA9ICV1KVxuIiwKIAkJICAgbmV3X2NsdXN0ZXJzLCBmaXJzdF9uZXdfY2x1c3Rlcik7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIGJtX2lub2RlLCBncm91cF9iaCwKLQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBJTk9ERV9DQUNIRShibV9pbm9kZSksCisJCQkJICAgICAgZ3JvdXBfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJfQogCiAJLyogdXBkYXRlIHRoZSBpbm9kZSBhY2NvcmRpbmdseS4gKi8KLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGJtX2lub2RlLCBibV9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGJtX2lub2RlKSwgYm1fYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTUxNCw3ICs1MTQsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGdyb3VwX2JoKTsKKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShpbm9kZSksIGdyb3VwX2JoKTsKIAogCXJldCA9IG9jZnMyX3ZlcmlmeV9ncm91cF9hbmRfaW5wdXQobWFpbl9ibV9pbm9kZSwgZmUsIGlucHV0LCBncm91cF9iaCk7CiAJaWYgKHJldCkgewpAQCAtNTM2LDggKzUzNiw4IEBACiAJY2wgPSAmZmUtPmlkMi5pX2NoYWluOwogCWNyID0gJmNsLT5jbF9yZWNzW2lucHV0LT5jaGFpbl07CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIG1haW5fYm1faW5vZGUsIGdyb3VwX2JoLAotCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIElOT0RFX0NBQ0hFKG1haW5fYm1faW5vZGUpLAorCQkJCSAgICAgIGdyb3VwX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dF9jb21taXQ7CkBAIC01NTIsOCArNTUyLDggQEAKIAkJZ290byBvdXRfY29tbWl0OwogCX0KIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgbWFpbl9ibV9pbm9kZSwgbWFpbl9ibV9iaCwKLQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShtYWluX2JtX2lub2RlKSwKKwkJCQkgICAgICBtYWluX2JtX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dF9jb21taXQ7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zbG90X21hcC5jIGIvZnMvb2NmczIvc2xvdF9tYXAuYwppbmRleCA0MDY2MWU3Li5iZmJkN2U5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zbG90X21hcC5jCisrKyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmMKQEAgLTE1MCw4ICsxNTAsOCBAQAogCSAqIGJlICFOVUxMLiAgVGh1cywgb2NmczJfcmVhZF9ibG9ja3MoKSB3aWxsIGlnbm9yZSBibG9ja25yLiAgSWYKIAkgKiB0aGlzIGlzIG5vdCB0cnVlLCB0aGUgcmVhZCBvZiAtMSAoVUlOVDY0X01BWCkgd2lsbCBmYWlsLgogCSAqLwotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKHNpLT5zaV9pbm9kZSwgLTEsIHNpLT5zaV9ibG9ja3MsIHNpLT5zaV9iaCwKLQkJCQlPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUsIE5VTEwpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKHNpLT5zaV9pbm9kZSksIC0xLCBzaS0+c2lfYmxvY2tzLAorCQkJCXNpLT5zaV9iaCwgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFLCBOVUxMKTsKIAlpZiAocmV0ID09IDApIHsKIAkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAkJb2NmczJfdXBkYXRlX3Nsb3RfaW5mbyhzaSk7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJb2NmczJfdXBkYXRlX2Rpc2tfc2xvdF9vbGQoc2ksIHNsb3RfbnVtLCAmYmgpOwogCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAotCXN0YXR1cyA9IG9jZnMyX3dyaXRlX2Jsb2NrKG9zYiwgYmgsIHNpLT5zaV9pbm9kZSk7CisJc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCBiaCwgSU5PREVfQ0FDSEUoc2ktPnNpX2lub2RlKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIApAQCAtNDA0LDggKzQwNCw4IEBACiAJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubyk7CiAKIAkJYmggPSBOVUxMOyAgLyogQWNxdWlyZSBhIGZyZXNoIGJoICovCi0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKHNpLT5zaV9pbm9kZSwgYmxrbm8sIDEsICZiaCwKLQkJCQkJICAgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFLCBOVUxMKTsKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoSU5PREVfQ0FDSEUoc2ktPnNpX2lub2RlKSwgYmxrbm8sCisJCQkJCSAgIDEsICZiaCwgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFLCBOVUxMKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1YmFsbG9jLmMgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCmluZGV4IDczYTE2ZDQuLmMzMGI2NDQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1YmFsbG9jLmMKKysrIGIvZnMvb2NmczIvc3ViYWxsb2MuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJaW50IHJjOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmJoOwogCi0JcmMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBnZF9ibGtubywgJnRtcCwKKwlyYyA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoaW5vZGUpLCBnZF9ibGtubywgJnRtcCwKIAkJCSAgICAgIG9jZnMyX3ZhbGlkYXRlX2dyb3VwX2Rlc2NyaXB0b3IpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CkBAIC0zNTIsNyArMzUyLDcgQEAKIAl9CiAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsCi0JCQkJCSBhbGxvY19pbm9kZSwKKwkJCQkJIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKIAkJCQkJIGJnX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KLQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShhbGxvY19pbm9kZSwgYmdfYmgpOworCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwgYmdfYmgpOwogCiAJc3RhdHVzID0gb2NmczJfYmxvY2tfZ3JvdXBfZmlsbChoYW5kbGUsCiAJCQkJCWFsbG9jX2lub2RlLApAQCAtNDkxLDcgKzQ5MSw3IEBACiAKIAliZyA9IChzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqKSBiZ19iaC0+Yl9kYXRhOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBhbGxvY19pbm9kZSwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKIAkJCQkJIGJoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTAzMyw3ICsxMDMzLDcgQEAKIAkJam91cm5hbF90eXBlID0gT0NGUzJfSk9VUk5BTF9BQ0NFU1NfVU5ETzsKIAogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2dkKGhhbmRsZSwKLQkJCQkJIGFsbG9jX2lub2RlLAorCQkJCQkgSU5PREVfQ0FDSEUoYWxsb2NfaW5vZGUpLAogCQkJCQkgZ3JvdXBfYmgsCiAJCQkJCSBqb3VybmFsX3R5cGUpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xMTA2LDcgKzExMDYsOCBAQAogCWJnX3B0ciA9IGxlNjRfdG9fY3B1KGJnLT5iZ19uZXh0X2dyb3VwKTsKIAlwcmV2X2JnX3B0ciA9IGxlNjRfdG9fY3B1KHByZXZfYmctPmJnX25leHRfZ3JvdXApOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBhbGxvY19pbm9kZSwgcHJldl9iZ19iaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKKwkJCQkJIHByZXZfYmdfYmgsCiAJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTEyMSw4ICsxMTIyLDggQEAKIAkJZ290byBvdXRfcm9sbGJhY2s7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBhbGxvY19pbm9kZSwgYmdfYmgsCi0JCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBJTk9ERV9DQUNIRShhbGxvY19pbm9kZSksCisJCQkJCSBiZ19iaCwgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBvdXRfcm9sbGJhY2s7CkBAIC0xMTM2LDggKzExMzcsOCBAQAogCQlnb3RvIG91dF9yb2xsYmFjazsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGFsbG9jX2lub2RlLCBmZV9iaCwKLQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKKwkJCQkJIGZlX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIG91dF9yb2xsYmFjazsKQEAgLTEyODgsNyArMTI4OSw3IEBACiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBkaV9iaC0+Yl9kYXRhOwogCXN0cnVjdCBvY2ZzMl9jaGFpbl9saXN0ICpjbCA9IChzdHJ1Y3Qgb2NmczJfY2hhaW5fbGlzdCAqKSAmZGktPmlkMi5pX2NoYWluOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xNDYxLDcgKzE0NjIsNyBAQAogCS8qIE9rLCBjbGFpbSBvdXIgYml0cyBub3c6IHNldCB0aGUgaW5mbyBvbiBkaW5vZGUsIGNoYWlubGlzdAogCSAqIGFuZCB0aGVuIHRoZSBncm91cCAqLwogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwKLQkJCQkJIGFsbG9jX2lub2RlLAorCQkJCQkgSU5PREVfQ0FDSEUoYWxsb2NfaW5vZGUpLAogCQkJCQkgYWMtPmFjX2JoLAogCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xOTA3LDggKzE5MDgsOCBAQAogCWlmIChvY2ZzMl9pc19jbHVzdGVyX2JpdG1hcChhbGxvY19pbm9kZSkpCiAJCWpvdXJuYWxfdHlwZSA9IE9DRlMyX0pPVVJOQUxfQUNDRVNTX1VORE87CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19nZChoYW5kbGUsIGFsbG9jX2lub2RlLCBncm91cF9iaCwKLQkJCQkJIGpvdXJuYWxfdHlwZSk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZ2QoaGFuZGxlLCBJTk9ERV9DQUNIRShhbGxvY19pbm9kZSksCisJCQkJCSBncm91cF9iaCwgam91cm5hbF90eXBlKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTE5OTMsOCArMTk5NCw4IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGFsbG9jX2lub2RlLCBhbGxvY19iaCwKLQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKGFsbG9jX2lub2RlKSwKKwkJCQkJIGFsbG9jX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0yMTUxLDcgKzIxNTIsNyBAQAogCiAJQlVHX09OKGNsdXN0ZXJzX3RvX2FkZCAhPSAwICYmIGRhdGFfYWMgPT0gTlVMTCk7CiAKLQludW1fZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGlub2RlLCBldCk7CisJbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBldCk7CiAJaWYgKG51bV9mcmVlX2V4dGVudHMgPCAwKSB7CiAJCXJldCA9IG51bV9mcmVlX2V4dGVudHM7CiAJCW1sb2dfZXJybm8ocmV0KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IGEzZjg4NzEuLjI0ZmViNDQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgInZlci5oIgogI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKKyNpbmNsdWRlICJyZWZjb3VudHRyZWUuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTk2NSw3ICs5NjYsNyBAQAogCXJldHVybiB2ZnNfcXVvdGFfZGlzYWJsZShzYiwgdHlwZSwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwogfQogCi1zdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyBvY2ZzMl9xdW90YWN0bF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBvY2ZzMl9xdW90YWN0bF9vcHMgPSB7CiAJLnF1b3RhX29uCT0gb2NmczJfcXVvdGFfb24sCiAJLnF1b3RhX29mZgk9IG9jZnMyX3F1b3RhX29mZiwKIAkucXVvdGFfc3luYwk9IHZmc19xdW90YV9zeW5jLApAQCAtMTY2OCw4ICsxNjY5LDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmb2ktPmlwX2xvY2spOwogCW9jZnMyX2V4dGVudF9tYXBfaW5pdCgmb2ktPnZmc19pbm9kZSk7CiAJSU5JVF9MSVNUX0hFQUQoJm9pLT5pcF9pb19tYXJrZXJzKTsKLQlvaS0+aXBfY3JlYXRlZF90cmFucyA9IDA7Ci0Jb2ktPmlwX2xhc3RfdHJhbnMgPSAwOwogCW9pLT5pcF9kaXJfc3RhcnRfbG9va3VwID0gMDsKIAogCWluaXRfcndzZW0oJm9pLT5pcF9hbGxvY19zZW0pOwpAQCAtMTY4Myw3ICsxNjgyLDggQEAKIAlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UoJm9pLT5pcF9pbm9kZV9sb2NrcmVzKTsKIAlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UoJm9pLT5pcF9vcGVuX2xvY2tyZXMpOwogCi0Jb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdCgmb2ktPnZmc19pbm9kZSk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdChJTk9ERV9DQUNIRSgmb2ktPnZmc19pbm9kZSksCisJCQkJICAmb2NmczJfaW5vZGVfY2FjaGluZ19vcHMpOwogCiAJaW5vZGVfaW5pdF9vbmNlKCZvaS0+dmZzX2lub2RlKTsKIH0KQEAgLTE4NTksNiArMTg1OSw4IEBACiAKIAlvY2ZzMl9zeW5jX2Jsb2NrZGV2KHNiKTsKIAorCW9jZnMyX3B1cmdlX3JlZmNvdW50X3RyZWVzKG9zYik7CisKIAkvKiBObyBjbHVzdGVyIGNvbm5lY3Rpb24gbWVhbnMgd2UndmUgZmFpbGVkIGR1cmluZyBtb3VudCwgc28gc2tpcAogCSAqIGFsbCB0aGUgc3RlcHMgd2hpY2ggZGVwZW5kZWQgb24gdGhhdCB0byBjb21wbGV0ZS4gKi8KIAlpZiAob3NiLT5jY29ubikgewpAQCAtMjA2NSw2ICsyMDY3LDggQEAKIAkJZ290byBiYWlsOwogCX0KIAorCW9zYi0+b3NiX3JmX2xvY2tfdHJlZSA9IFJCX1JPT1Q7CisKIAlvc2ItPnNfZmVhdHVyZV9jb21wYXQgPQogCQlsZTMyX3RvX2NwdShPQ0ZTMl9SQVdfU0IoZGkpLT5zX2ZlYXR1cmVfY29tcGF0KTsKIAlvc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgPQpAQCAtMjQ5MCw3ICsyNDk0LDggQEAKIAkvKiBGb3JjZSBhIHBhbmljKCkuIFRoaXMgc3RpbmtzLCBidXQgaXQncyBiZXR0ZXIgdGhhbiBsZXR0aW5nCiAJICogdGhpbmdzIGNvbnRpbnVlIHdpdGhvdXQgaGF2aW5nIGEgcHJvcGVyIGhhcmQgcmVhZG9ubHkKIAkgKiBoZXJlLiAqLwotCU9DRlMyX1NCKHNiKS0+c19tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfRVJST1JTX1BBTklDOworCWlmICghb2NmczJfbW91bnRfbG9jYWwoT0NGUzJfU0Ioc2IpKSkKKwkJT0NGUzJfU0Ioc2IpLT5zX21vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9FUlJPUlNfUEFOSUM7CiAJb2NmczJfaGFuZGxlX2Vycm9yKHNiKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvdXB0b2RhdGUuYyBiL2ZzL29jZnMyL3VwdG9kYXRlLmMKaW5kZXggMTg3Yjk5Zi4uYjYyODRmMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvdXB0b2RhdGUuYworKysgYi9mcy9vY2ZzMi91cHRvZGF0ZS5jCkBAIC03NSwxNSArNzUsNzcgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpvY2ZzMl91cHRvZGF0ZV9jYWNoZXAgPSBOVUxMOwogCi12b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX2luaXQoc3RydWN0IGlub2RlICppbm9kZSkKK3U2NCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKIHsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CisJQlVHX09OKCFjaSB8fCAhY2ktPmNpX29wcyk7CiAKLQlvaS0+aXBfZmxhZ3MgfD0gT0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FOwotCWNpLT5jaV9udW1fY2FjaGVkID0gMDsKKwlyZXR1cm4gY2ktPmNpX29wcy0+Y29fb3duZXIoY2kpOwogfQogCitzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9jZnMyX21ldGFkYXRhX2NhY2hlX2dldF9zdXBlcihzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCXJldHVybiBjaS0+Y2lfb3BzLT5jb19nZXRfc3VwZXIoY2kpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQoreworCUJVR19PTighY2kgfHwgIWNpLT5jaV9vcHMpOworCisJY2ktPmNpX29wcy0+Y29fY2FjaGVfbG9jayhjaSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCWNpLT5jaV9vcHMtPmNvX2NhY2hlX3VubG9jayhjaSk7Cit9CisKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fbG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCWNpLT5jaV9vcHMtPmNvX2lvX2xvY2soY2kpOworfQorCit2b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX2lvX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlCVUdfT04oIWNpIHx8ICFjaS0+Y2lfb3BzKTsKKworCWNpLT5jaV9vcHMtPmNvX2lvX3VubG9jayhjaSk7Cit9CisKKworc3RhdGljIHZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfcmVzZXQoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCisJCQkJICAgICAgIGludCBjbGVhcikKK3sKKwljaS0+Y2lfZmxhZ3MgfD0gT0NGUzJfQ0FDSEVfRkxfSU5MSU5FOworCWNpLT5jaV9udW1fY2FjaGVkID0gMDsKKworCWlmIChjbGVhcikgeworCQljaS0+Y2lfY3JlYXRlZF90cmFucyA9IDA7CisJCWNpLT5jaV9sYXN0X3RyYW5zID0gMDsKKwl9Cit9CisKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zICpvcHMpCit7CisJQlVHX09OKCFvcHMpOworCisJY2ktPmNpX29wcyA9IG9wczsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9yZXNldChjaSwgMSk7Cit9CisKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfZXhpdChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKK3sKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShjaSk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfcmVzZXQoY2ksIDEpOworfQorCisKIC8qIE5vIGxvY2sgdGFrZW4gaGVyZSBhcyAncm9vdCcgaXMgbm90IGV4cGVjdGVkIHRvIGJlIHZpc2libGUgdG8gb3RoZXIKICAqIHByb2Nlc3Nlcy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2NmczJfcHVyZ2VfY29waWVkX21ldGFkYXRhX3RyZWUoc3RydWN0IHJiX3Jvb3QgKnJvb3QpCkBAIC0xMTIsMTkgKzE3NCwyMCBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBhIGZldyBtb3JlIGxpbmVzIGxvbmdlciB0aGFuIG5lY2Vzc2FyeSBkdWUgdG8gc29tZQogICogYWNjb3VudGluZyBkb25lIGhlcmUsIGJ1dCBJIHRoaW5rIGl0J3Mgd29ydGggdHJhY2tpbmcgZG93biB0aG9zZQogICogYnVncyBzb29uZXIgLS0gTWFyayAqLwotdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQordm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKIHsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKIAl1bnNpZ25lZCBpbnQgdHJlZSwgdG9fcHVyZ2UsIHB1cmdlZDsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CiAJc3RydWN0IHJiX3Jvb3Qgcm9vdCA9IFJCX1JPT1Q7CiAKLQlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKLQl0cmVlID0gIShvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpOworCUJVR19PTighY2kgfHwgIWNpLT5jaV9vcHMpOworCisJb2NmczJfbWV0YWRhdGFfY2FjaGVfbG9jayhjaSk7CisJdHJlZSA9ICEoY2ktPmNpX2ZsYWdzICYgT0NGUzJfQ0FDSEVfRkxfSU5MSU5FKTsKIAl0b19wdXJnZSA9IGNpLT5jaV9udW1fY2FjaGVkOwogCi0JbWxvZygwLCAiUHVyZ2UgJXUgJXMgaXRlbXMgZnJvbSBJbm9kZSAlbGx1XG4iLCB0b19wdXJnZSwKLQkgICAgIHRyZWUgPyAiYXJyYXkiIDogInRyZWUiLCAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubyk7CisJbWxvZygwLCAiUHVyZ2UgJXUgJXMgaXRlbXMgZnJvbSBPd25lciAlbGx1XG4iLCB0b19wdXJnZSwKKwkgICAgIHRyZWUgPyAiYXJyYXkiIDogInRyZWUiLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSkpOwogCiAJLyogSWYgd2UncmUgYSB0cmVlLCBzYXZlIG9mZiB0aGUgcm9vdCBzbyB0aGF0IHdlIGNhbiBzYWZlbHkKIAkgKiBpbml0aWFsaXplIHRoZSBjYWNoZS4gV2UgZG8gdGhlIHdvcmsgdG8gZnJlZSB0cmVlIG1lbWJlcnMKQEAgLTEzMiwxNiArMTk1LDE3IEBACiAJaWYgKHRyZWUpCiAJCXJvb3QgPSBjaS0+Y2lfY2FjaGUuY2lfdHJlZTsKIAotCW9jZnMyX21ldGFkYXRhX2NhY2hlX2luaXQoaW5vZGUpOwotCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfcmVzZXQoY2ksIDApOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAKIAlwdXJnZWQgPSBvY2ZzMl9wdXJnZV9jb3BpZWRfbWV0YWRhdGFfdHJlZSgmcm9vdCk7CiAJLyogSWYgcG9zc2libGUsIHRyYWNrIHRoZSBudW1iZXIgd2lwZWQgc28gdGhhdCB3ZSBjYW4gbW9yZQogCSAqIGVhc2lseSBkZXRlY3QgY291bnRpbmcgZXJyb3JzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG9ubHkKIAkgKiBtZWFuaW5nZnVsIGZvciB0cmVlcy4gKi8KIAlpZiAodHJlZSAmJiBwdXJnZWQgIT0gdG9fcHVyZ2UpCi0JCW1sb2coTUxfRVJST1IsICJJbm9kZSAlbGx1LCBjb3VudCA9ICV1LCBwdXJnZWQgPSAldVxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywgdG9fcHVyZ2UsIHB1cmdlZCk7CisJCW1sb2coTUxfRVJST1IsICJPd25lciAlbGx1LCBjb3VudCA9ICV1LCBwdXJnZWQgPSAldVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKKwkJICAgICB0b19wdXJnZSwgcHVyZ2VkKTsKIH0KIAogLyogUmV0dXJucyB0aGUgaW5kZXggaW4gdGhlIGNhY2hlIGFycmF5LCAtMSBpZiBub3QgZm91bmQuCkBAIC0xODIsMjcgKzI0NiwyNSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2J1ZmZlcl9jYWNoZWQoc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pLAorc3RhdGljIGludCBvY2ZzMl9idWZmZXJfY2FjaGVkKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJaW50IGluZGV4ID0gLTE7CiAJc3RydWN0IG9jZnMyX21ldGFfY2FjaGVfaXRlbSAqaXRlbSA9IE5VTEw7CiAKLQlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKGNpKTsKIAotCW1sb2coMCwgIklub2RlICVsbHUsIHF1ZXJ5IGJsb2NrICVsbHUgKGlubGluZSA9ICV1KVxuIiwKLQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2ktPmlwX2Jsa25vLAorCW1sb2coMCwgIk93bmVyICVsbHUsIHF1ZXJ5IGJsb2NrICVsbHUgKGlubGluZSA9ICV1KVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmgtPmJfYmxvY2tuciwKLQkgICAgICEhKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSkpOworCSAgICAgISEoY2ktPmNpX2ZsYWdzICYgT0NGUzJfQ0FDSEVfRkxfSU5MSU5FKSk7CiAKLQlpZiAob2ktPmlwX2ZsYWdzICYgT0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FKQotCQlpbmRleCA9IG9jZnMyX3NlYXJjaF9jYWNoZV9hcnJheSgmb2ktPmlwX21ldGFkYXRhX2NhY2hlLAotCQkJCQkJIGJoLT5iX2Jsb2NrbnIpOworCWlmIChjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpCisJCWluZGV4ID0gb2NmczJfc2VhcmNoX2NhY2hlX2FycmF5KGNpLCBiaC0+Yl9ibG9ja25yKTsKIAllbHNlCi0JCWl0ZW0gPSBvY2ZzMl9zZWFyY2hfY2FjaGVfdHJlZSgmb2ktPmlwX21ldGFkYXRhX2NhY2hlLAotCQkJCQkgICAgICAgYmgtPmJfYmxvY2tucik7CisJCWl0ZW0gPSBvY2ZzMl9zZWFyY2hfY2FjaGVfdHJlZShjaSwgYmgtPmJfYmxvY2tucik7CiAKLQlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAKIAltbG9nKDAsICJpbmRleCA9ICVkLCBpdGVtID0gJXBcbiIsIGluZGV4LCBpdGVtKTsKIApAQCAtMjE0LDcgKzI3Niw3IEBACiAgKiAKICAqIFRoaXMgY2FuIGJlIGNhbGxlZCB1bmRlciBsb2NrX2J1ZmZlcigpCiAgKi8KLWludCBvY2ZzMl9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJLyogRG9lc24ndCBtYXR0ZXIgaWYgdGhlIGJoIGlzIGluIG91ciBjYWNoZSBvciBub3QgLS0gaWYgaXQncwpAQCAtMjMwLDI0ICsyOTIsMjQgQEAKIAogCS8qIE9rLCBsb2NhbGx5IHRoZSBidWZmZXIgaXMgbWFya2VkIGFzIHVwIHRvIGRhdGUsIG5vdyBzZWFyY2gKIAkgKiBvdXIgY2FjaGUgdG8gc2VlIGlmIHdlIGNhbiB0cnVzdCB0aGF0LiAqLwotCXJldHVybiBvY2ZzMl9idWZmZXJfY2FjaGVkKE9DRlMyX0koaW5vZGUpLCBiaCk7CisJcmV0dXJuIG9jZnMyX2J1ZmZlcl9jYWNoZWQoY2ksIGJoKTsKIH0KIAotLyogCisvKgogICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBidWZmZXIgaXMgY3VycmVudGx5IG91dCBvbiBhIHJlYWQtYWhlYWQgcmVxdWVzdC4KLSAqIGlwX2lvX3NlbSBzaG91bGQgYmUgaGVsZCB0byBzZXJpYWxpemUgc3VibWl0dGVycyB3aXRoIHRoZSBsb2dpYyBoZXJlLgorICogY2lfaW9fc2VtIHNob3VsZCBiZSBoZWxkIHRvIHNlcmlhbGl6ZSBzdWJtaXR0ZXJzIHdpdGggdGhlIGxvZ2ljIGhlcmUuCiAgKi8KLWludCBvY2ZzMl9idWZmZXJfcmVhZF9haGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IG9jZnMyX2J1ZmZlcl9yZWFkX2FoZWFkKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JcmV0dXJuIGJ1ZmZlcl9sb2NrZWQoYmgpICYmIG9jZnMyX2J1ZmZlcl9jYWNoZWQoT0NGUzJfSShpbm9kZSksIGJoKTsKKwlyZXR1cm4gYnVmZmVyX2xvY2tlZChiaCkgJiYgb2NmczJfYnVmZmVyX2NhY2hlZChjaSwgYmgpOwogfQogCiAvKiBSZXF1aXJlcyBpcF9sb2NrICovCiBzdGF0aWMgdm9pZCBvY2ZzMl9hcHBlbmRfY2FjaGVfYXJyYXkoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgICBzZWN0b3JfdCBibG9jaykKIHsKLQlCVUdfT04oY2ktPmNpX251bV9jYWNoZWQgPj0gT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZKTsKKwlCVUdfT04oY2ktPmNpX251bV9jYWNoZWQgPj0gT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkpOwogCiAJbWxvZygwLCAiYmxvY2sgJWxsdSB0YWtlcyBwb3NpdGlvbiAldVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxvY2ssCiAJICAgICBjaS0+Y2lfbnVtX2NhY2hlZCk7CkBAIC0yOTIsNjYgKzM1NCw2NCBAQAogCWNpLT5jaV9udW1fY2FjaGVkKys7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KHN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSwKLQkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSkKKy8qIGNvX2NhY2hlX2xvY2soKSBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKQogewotCWFzc2VydF9zcGluX2xvY2tlZCgmb2ktPmlwX2xvY2spOwotCi0JcmV0dXJuIChvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpICYmCi0JCShjaS0+Y2lfbnVtX2NhY2hlZCA8IE9DRlMyX0lOT0RFX01BWF9DQUNIRV9BUlJBWSk7CisJcmV0dXJuIChjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpICYmCisJCShjaS0+Y2lfbnVtX2NhY2hlZCA8IE9DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZKTsKIH0KIAotLyogdHJlZSBzaG91bGQgYmUgZXhhY3RseSBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVkgd2lkZS4gTlVMTCB0aGUKKy8qIHRyZWUgc2hvdWxkIGJlIGV4YWN0bHkgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkgd2lkZS4gTlVMTCB0aGUKICAqIHBvaW50ZXJzIGluIHRyZWUgYWZ0ZXIgd2UgdXNlIHRoZW0gLSB0aGlzIGFsbG93cyBjYWxsZXIgdG8gZGV0ZWN0Ci0gKiB3aGVuIHRvIGZyZWUgaW4gY2FzZSBvZiBlcnJvci4gKi8KLXN0YXRpYyB2b2lkIG9jZnMyX2V4cGFuZF9jYWNoZShzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2ksCisgKiB3aGVuIHRvIGZyZWUgaW4gY2FzZSBvZiBlcnJvci4KKyAqCisgKiBUaGUgY29fY2FjaGVfbG9jaygpIG11c3QgYmUgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIG9jZnMyX2V4cGFuZF9jYWNoZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfbWV0YV9jYWNoZV9pdGVtICoqdHJlZSkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CiAKLQltbG9nX2J1Z19vbl9tc2coY2ktPmNpX251bV9jYWNoZWQgIT0gT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZLAotCQkJIklub2RlICVsbHUsIG51bSBjYWNoZWQgPSAldSwgc2hvdWxkIGJlICV1XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sIGNpLT5jaV9udW1fY2FjaGVkLAotCQkJT0NGUzJfSU5PREVfTUFYX0NBQ0hFX0FSUkFZKTsKLQltbG9nX2J1Z19vbl9tc2coIShvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpLAotCQkJIklub2RlICVsbHUgbm90IG1hcmtlZCBhcyBpbmxpbmUgYW55bW9yZSFcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubyk7Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZvaS0+aXBfbG9jayk7CisJbWxvZ19idWdfb25fbXNnKGNpLT5jaV9udW1fY2FjaGVkICE9IE9DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZLAorCQkJIk93bmVyICVsbHUsIG51bSBjYWNoZWQgPSAldSwgc2hvdWxkIGJlICV1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvY2ZzMl9tZXRhZGF0YV9jYWNoZV9vd25lcihjaSksCisJCQljaS0+Y2lfbnVtX2NhY2hlZCwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkpOworCW1sb2dfYnVnX29uX21zZyghKGNpLT5jaV9mbGFncyAmIE9DRlMyX0NBQ0hFX0ZMX0lOTElORSksCisJCQkiT3duZXIgJWxsdSBub3QgbWFya2VkIGFzIGlubGluZSBhbnltb3JlIVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoY2kpKTsKIAogCS8qIEJlIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZSBtZW1iZXJzICpmaXJzdCogYmVjYXVzZQogCSAqIG9uY2UgdGhlIGNpX3RyZWUgaXMgdXNlZCwgdGhlIGFycmF5IGlzIGp1bmsuLi4gKi8KLQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVk7IGkrKykKIAkJdHJlZVtpXS0+Y19ibG9jayA9IGNpLT5jaV9jYWNoZS5jaV9hcnJheVtpXTsKIAotCW9pLT5pcF9mbGFncyAmPSB+T0NGUzJfSU5PREVfQ0FDSEVfSU5MSU5FOworCWNpLT5jaV9mbGFncyAmPSB+T0NGUzJfQ0FDSEVfRkxfSU5MSU5FOwogCWNpLT5jaV9jYWNoZS5jaV90cmVlID0gUkJfUk9PVDsKIAkvKiB0aGlzIHdpbGwgYmUgc2V0IGFnYWluIGJ5IF9fb2NmczJfaW5zZXJ0X2NhY2hlX3RyZWUgKi8KIAljaS0+Y2lfbnVtX2NhY2hlZCA9IDA7CiAKLQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBPQ0ZTMl9DQUNIRV9JTkZPX01BWF9BUlJBWTsgaSsrKSB7CiAJCV9fb2NmczJfaW5zZXJ0X2NhY2hlX3RyZWUoY2ksIHRyZWVbaV0pOwogCQl0cmVlW2ldID0gTlVMTDsKIAl9CiAKIAltbG9nKDAsICJFeHBhbmRlZCAlbGx1IHRvIGEgdHJlZSBjYWNoZTogZmxhZ3MgMHgleCwgbnVtID0gJXVcbiIsCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9pLT5pcF9ibGtubywgb2ktPmlwX2ZsYWdzLCBjaS0+Y2lfbnVtX2NhY2hlZCk7CisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKKwkgICAgIGNpLT5jaV9mbGFncywgY2ktPmNpX251bV9jYWNoZWQpOwogfQogCiAvKiBTbG93IHBhdGggZnVuY3Rpb24gLSBtZW1vcnkgYWxsb2NhdGlvbiBpcyBuZWNlc3NhcnkuIFNlZSB0aGUKICAqIGNvbW1lbnQgYWJvdmUgb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gKi8KLXN0YXRpYyB2b2lkIF9fb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2ksCitzdGF0aWMgdm9pZCBfX29jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCXNlY3Rvcl90IGJsb2NrLAogCQkJCQlpbnQgZXhwYW5kX3RyZWUpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kgPSAmb2ktPmlwX21ldGFkYXRhX2NhY2hlOwogCXN0cnVjdCBvY2ZzMl9tZXRhX2NhY2hlX2l0ZW0gKm5ldyA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX21ldGFfY2FjaGVfaXRlbSAqdHJlZVtPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVldID0KKwlzdHJ1Y3Qgb2NmczJfbWV0YV9jYWNoZV9pdGVtICp0cmVlW09DRlMyX0NBQ0hFX0lORk9fTUFYX0FSUkFZXSA9CiAJCXsgTlVMTCwgfTsKIAotCW1sb2coMCwgIklub2RlICVsbHUsIGJsb2NrICVsbHUsIGV4cGFuZCA9ICVkXG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJbWxvZygwLCAiT3duZXIgJWxsdSwgYmxvY2sgJWxsdSwgZXhwYW5kID0gJWRcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIGV4cGFuZF90cmVlKTsKIAogCW5ldyA9IGttZW1fY2FjaGVfYWxsb2Mob2NmczJfdXB0b2RhdGVfY2FjaGVwLCBHRlBfTk9GUyk7CkBAIC0zNjQsNyArNDI0LDcgQEAKIAlpZiAoZXhwYW5kX3RyZWUpIHsKIAkJLyogRG8gKm5vdCogYWxsb2NhdGUgYW4gYXJyYXkgaGVyZSAtIHRoZSByZW1vdmFsIGNvZGUKIAkJICogaGFzIG5vIHdheSBvZiB0cmFja2luZyB0aGF0LiAqLwotCQlmb3IoaSA9IDA7IGkgPCBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVk7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVk7IGkrKykgewogCQkJdHJlZVtpXSA9IGttZW1fY2FjaGVfYWxsb2Mob2NmczJfdXB0b2RhdGVfY2FjaGVwLAogCQkJCQkJICAgR0ZQX05PRlMpOwogCQkJaWYgKCF0cmVlW2ldKSB7CkBAIC0zNzYsMjEgKzQzNiwyMSBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrKCZvaS0+aXBfbG9jayk7Ci0JaWYgKG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KG9pLCBjaSkpIHsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKGNpKTsKKwlpZiAob2NmczJfaW5zZXJ0X2Nhbl91c2VfYXJyYXkoY2kpKSB7CiAJCW1sb2coMCwgIlNvbWVvbmUgY2xlYXJlZCB0aGUgdHJlZSB1bmRlcm5lYXRoIHVzXG4iKTsKIAkJLyogT2ssIGl0ZW1zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBpbiBiZXR3ZWVuCiAJCSAqIGxvY2tzLiBEZXRlY3QgdGhpcyBhbmQgcmV2ZXJ0IGJhY2sgdG8gdGhlIGZhc3QgcGF0aCAqLwogCQlvY2ZzMl9hcHBlbmRfY2FjaGVfYXJyYXkoY2ksIGJsb2NrKTsKLQkJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKKwkJb2NmczJfbWV0YWRhdGFfY2FjaGVfdW5sb2NrKGNpKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKIAlpZiAoZXhwYW5kX3RyZWUpCi0JCW9jZnMyX2V4cGFuZF9jYWNoZShvaSwgdHJlZSk7CisJCW9jZnMyX2V4cGFuZF9jYWNoZShjaSwgdHJlZSk7CiAKIAlfX29jZnMyX2luc2VydF9jYWNoZV90cmVlKGNpLCBuZXcpOwotCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfdW5sb2NrKGNpKTsKIAogCW5ldyA9IE5VTEw7CiBvdXRfZnJlZToKQEAgLTQwMCwxNCArNDYwLDE0IEBACiAJLyogSWYgdGhlc2Ugd2VyZSB1c2VkLCB0aGVuIG9jZnMyX2V4cGFuZF9jYWNoZSByZS1zZXQgdGhlbSB0bwogCSAqIE5VTEwgZm9yIHVzLiAqLwogCWlmICh0cmVlWzBdKSB7Ci0JCWZvcihpID0gMDsgaSA8IE9DRlMyX0lOT0RFX01BWF9DQUNIRV9BUlJBWTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVk7IGkrKykKIAkJCWlmICh0cmVlW2ldKQogCQkJCWttZW1fY2FjaGVfZnJlZShvY2ZzMl91cHRvZGF0ZV9jYWNoZXAsCiAJCQkJCQl0cmVlW2ldKTsKIAl9CiB9CiAKLS8qIEl0ZW0gaW5zZXJ0aW9uIGlzIGd1YXJkZWQgYnkgaXBfaW9fbXV0ZXgsIHNvIHRoZSBpbnNlcnRpb24gcGF0aCB0YWtlcworLyogSXRlbSBpbnNlcnRpb24gaXMgZ3VhcmRlZCBieSBjb19pb19sb2NrKCksIHNvIHRoZSBpbnNlcnRpb24gcGF0aCB0YWtlcwogICogYWR2YW50YWdlIG9mIHRoaXMgYnkgbm90IHJlY2hlY2tpbmcgZm9yIGEgZHVwbGljYXRlIGluc2VydCBkdXJpbmcKICAqIHRoZSBzbG93IGNhc2UuIEFkZGl0aW9uYWxseSwgaWYgdGhlIGNhY2hlIG5lZWRzIHRvIGJlIGJ1bXBlZCB1cCB0bwogICogYSB0cmVlLCB0aGUgY29kZSB3aWxsIG5vdCByZWNoZWNrIGFmdGVyIGFjcXVpcmluZyB0aGUgbG9jayAtLQpAQCAtNDI1LDU5ICs0ODUsNTUgQEAKICAqIFJlYWRhaGVhZCBidWZmZXJzIGNhbiBiZSBwYXNzZWQgaW4gaGVyZSBiZWZvcmUgdGhlIEkvTyByZXF1ZXN0IGlzCiAgKiBjb21wbGV0ZWQuCiAgKi8KLXZvaWQgb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAordm9pZCBvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJaW50IGV4cGFuZDsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CiAKIAkvKiBUaGUgYmxvY2sgbWF5IHZlcnkgd2VsbCBleGlzdCBpbiBvdXIgY2FjaGUgYWxyZWFkeSwgc28gYXZvaWQKIAkgKiBkb2luZyBhbnkgbW9yZSB3b3JrIGluIHRoYXQgY2FzZS4gKi8KLQlpZiAob2NmczJfYnVmZmVyX2NhY2hlZChvaSwgYmgpKQorCWlmIChvY2ZzMl9idWZmZXJfY2FjaGVkKGNpLCBiaCkpCiAJCXJldHVybjsKIAotCW1sb2coMCwgIklub2RlICVsbHUsIGluc2VydGluZyBibG9jayAlbGx1XG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJbWxvZygwLCAiT3duZXIgJWxsdSwgaW5zZXJ0aW5nIGJsb2NrICVsbHVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CiAKIAkvKiBObyBuZWVkIHRvIHJlY2hlY2sgdW5kZXIgc3BpbmxvY2sgLSBpbnNlcnRpb24gaXMgZ3VhcmRlZCBieQotCSAqIGlwX2lvX211dGV4ICovCi0Jc3Bpbl9sb2NrKCZvaS0+aXBfbG9jayk7Ci0JaWYgKG9jZnMyX2luc2VydF9jYW5fdXNlX2FycmF5KG9pLCBjaSkpIHsKKwkgKiBjb19pb19sb2NrKCkgKi8KKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9sb2NrKGNpKTsKKwlpZiAob2NmczJfaW5zZXJ0X2Nhbl91c2VfYXJyYXkoY2kpKSB7CiAJCS8qIEZhc3QgY2FzZSAtIGl0J3MgYW4gYXJyYXkgYW5kIHRoZXJlJ3MgYSBmcmVlCiAJCSAqIHNwb3QuICovCiAJCW9jZnMyX2FwcGVuZF9jYWNoZV9hcnJheShjaSwgYmgtPmJfYmxvY2tucik7Ci0JCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAJCXJldHVybjsKIAl9CiAKIAlleHBhbmQgPSAwOwotCWlmIChvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9DQUNIRV9JTkxJTkUpIHsKKwlpZiAoY2ktPmNpX2ZsYWdzICYgT0NGUzJfQ0FDSEVfRkxfSU5MSU5FKSB7CiAJCS8qIFdlIG5lZWQgdG8gYnVtcCB0aGluZ3MgdXAgdG8gYSB0cmVlLiAqLwogCQlleHBhbmQgPSAxOwogCX0KLQlzcGluX3VubG9jaygmb2ktPmlwX2xvY2spOworCW9jZnMyX21ldGFkYXRhX2NhY2hlX3VubG9jayhjaSk7CiAKLQlfX29jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUob2ksIGJoLT5iX2Jsb2NrbnIsIGV4cGFuZCk7CisJX19vY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaC0+Yl9ibG9ja25yLCBleHBhbmQpOwogfQogCiAvKiBDYWxsZWQgYWdhaW5zdCBhIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIuIE1vc3QgbGlrZWx5IG5vYm9keSBzaG91bGQKICAqIGJlIGFibGUgdG8gcmVhZCB0aGlzIHNvcnQgb2YgbWV0YWRhdGEgd2hpbGUgaXQncyBzdGlsbCBiZWluZwotICogYWxsb2NhdGVkLCBidXQgdGhpcyBpcyBjYXJlZnVsIHRvIHRha2UgaXBfaW9fbXV0ZXggYW55d2F5LiAqLwotdm9pZCBvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorICogYWxsb2NhdGVkLCBidXQgdGhpcyBpcyBjYXJlZnVsIHRvIHRha2UgY29faW9fbG9jaygpIGFueXdheS4gKi8KK3ZvaWQgb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKLQogCS8qIFRoaXMgc2hvdWxkIGRlZmluaXRlbHkgKm5vdCogZXhpc3QgaW4gb3VyIGNhY2hlICovCi0JQlVHX09OKG9jZnMyX2J1ZmZlcl9jYWNoZWQob2ksIGJoKSk7CisJQlVHX09OKG9jZnMyX2J1ZmZlcl9jYWNoZWQoY2ksIGJoKSk7CiAKIAlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAotCW11dGV4X2xvY2soJm9pLT5pcF9pb19tdXRleCk7Ci0Jb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpOwotCW11dGV4X3VubG9jaygmb2ktPmlwX2lvX211dGV4KTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pb19sb2NrKGNpKTsKKwlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGNpLCBiaCk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fdW5sb2NrKGNpKTsKIH0KIAogLyogUmVxdWlyZXMgaXBfbG9jay4gKi8KQEAgLTQ4Nyw3ICs1NDMsNyBAQAogCXNlY3Rvcl90ICphcnJheSA9IGNpLT5jaV9jYWNoZS5jaV9hcnJheTsKIAlpbnQgYnl0ZXM7CiAKLQlCVUdfT04oaW5kZXggPCAwIHx8IGluZGV4ID49IE9DRlMyX0lOT0RFX01BWF9DQUNIRV9BUlJBWSk7CisJQlVHX09OKGluZGV4IDwgMCB8fCBpbmRleCA+PSBPQ0ZTMl9DQUNIRV9JTkZPX01BWF9BUlJBWSk7CiAJQlVHX09OKGluZGV4ID49IGNpLT5jaV9udW1fY2FjaGVkKTsKIAlCVUdfT04oIWNpLT5jaV9udW1fY2FjaGVkKTsKIApAQCAtNTE1LDIxICs1NzEsMTkgQEAKIAljaS0+Y2lfbnVtX2NhY2hlZC0tOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIHZvaWQgb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCSAgc2VjdG9yX3QgYmxvY2spCiB7CiAJaW50IGluZGV4OwogCXN0cnVjdCBvY2ZzMl9tZXRhX2NhY2hlX2l0ZW0gKml0ZW0gPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwotCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpID0gJm9pLT5pcF9tZXRhZGF0YV9jYWNoZTsKIAotCXNwaW5fbG9jaygmb2ktPmlwX2xvY2spOwotCW1sb2coMCwgIklub2RlICVsbHUsIHJlbW92ZSAlbGx1LCBpdGVtcyA9ICV1LCBhcnJheSA9ICV1XG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sCisJb2NmczJfbWV0YWRhdGFfY2FjaGVfbG9jayhjaSk7CisJbWxvZygwLCAiT3duZXIgJWxsdSwgcmVtb3ZlICVsbHUsIGl0ZW1zID0gJXUsIGFycmF5ID0gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9jZnMyX21ldGFkYXRhX2NhY2hlX293bmVyKGNpKSwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrLCBjaS0+Y2lfbnVtX2NhY2hlZCwKLQkgICAgIG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSk7CisJICAgICBjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpOwogCi0JaWYgKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX0NBQ0hFX0lOTElORSkgeworCWlmIChjaS0+Y2lfZmxhZ3MgJiBPQ0ZTMl9DQUNIRV9GTF9JTkxJTkUpIHsKIAkJaW5kZXggPSBvY2ZzMl9zZWFyY2hfY2FjaGVfYXJyYXkoY2ksIGJsb2NrKTsKIAkJaWYgKGluZGV4ICE9IC0xKQogCQkJb2NmczJfcmVtb3ZlX21ldGFkYXRhX2FycmF5KGNpLCBpbmRleCk7CkBAIC01MzgsNyArNTkyLDcgQEAKIAkJaWYgKGl0ZW0pCiAJCQlvY2ZzMl9yZW1vdmVfbWV0YWRhdGFfdHJlZShjaSwgaXRlbSk7CiAJfQotCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJb2NmczJfbWV0YWRhdGFfY2FjaGVfdW5sb2NrKGNpKTsKIAogCWlmIChpdGVtKQogCQlrbWVtX2NhY2hlX2ZyZWUob2NmczJfdXB0b2RhdGVfY2FjaGVwLCBpdGVtKTsKQEAgLTU0OSwyMyArNjAzLDI0IEBACiAgKiBib3RoZXIgcmV2ZXJ0aW5nIHRoaW5ncyB0byBhbiBpbmxpbmVkIGFycmF5IGluIHRoZSBjYXNlIG9mIGEgcmVtb3ZlCiAgKiB3aGljaCBtb3ZlcyB1cyBiYWNrIHVuZGVyIHRoZSBsaW1pdC4KICAqLwotdm9pZCBvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAordm9pZCBvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlzZWN0b3JfdCBibG9jayA9IGJoLT5iX2Jsb2NrbnI7CiAKLQlvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9jYWNoZShpbm9kZSwgYmxvY2spOworCW9jZnMyX3JlbW92ZV9ibG9ja19mcm9tX2NhY2hlKGNpLCBibG9jayk7CiB9CiAKIC8qIENhbGxlZCB3aGVuIHdlIHJlbW92ZSB4YXR0ciBjbHVzdGVycyBmcm9tIGFuIGlub2RlLiAqLwotdm9pZCBvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAordm9pZCBvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkJICAgIHNlY3Rvcl90IGJsb2NrLAogCQkJCQkgICAgdTMyIGNfbGVuKQogewotCXVuc2lnbmVkIGludCBpLCBiX2xlbiA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgMSkgKiBjX2xlbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKKwl1bnNpZ25lZCBpbnQgaSwgYl9sZW4gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIDEpICogY19sZW47CiAKIAlmb3IgKGkgPSAwOyBpIDwgYl9sZW47IGkrKywgYmxvY2srKykKLQkJb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoaW5vZGUsIGJsb2NrKTsKKwkJb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoY2ksIGJsb2NrKTsKIH0KIAogaW50IF9faW5pdCBpbml0X29jZnMyX3VwdG9kYXRlX2NhY2hlKHZvaWQpCkBAIC01NzcsNyArNjMyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltbG9nKDAsICIldSBpbmxpbmVkIGNhY2hlIGl0ZW1zIHBlciBpbm9kZS5cbiIsCi0JICAgICBPQ0ZTMl9JTk9ERV9NQVhfQ0FDSEVfQVJSQVkpOworCSAgICAgT0NGUzJfQ0FDSEVfSU5GT19NQVhfQVJSQVkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi91cHRvZGF0ZS5oIGIvZnMvb2NmczIvdXB0b2RhdGUuaAppbmRleCA1MzFiNGIzLi4wZDgyNmZlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi91cHRvZGF0ZS5oCisrKyBiL2ZzL29jZnMyL3VwdG9kYXRlLmgKQEAgLTI2LDI0ICsyNiw1OSBAQAogI2lmbmRlZiBPQ0ZTMl9VUFRPREFURV9ICiAjZGVmaW5lIE9DRlMyX1VQVE9EQVRFX0gKIAorLyoKKyAqIFRoZSBjYWNoaW5nIGNvZGUgcmVsaWVzIG9uIGxvY2tpbmcgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb2YKKyAqIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8uICBUaGVzZSBvcGVyYXRpb25zIGNvbm5lY3QgdGhhdCB1cC4KKyAqLworc3RydWN0IG9jZnMyX2NhY2hpbmdfb3BlcmF0aW9ucyB7CisJLyoKKwkgKiBBIHU2NCByZXByZXNlbnRpbmcgdGhlIG93bmluZyBzdHJ1Y3R1cmUuICBVc3VhbGx5IHRoaXMKKwkgKiBpcyB0aGUgYmxvY2sgbnVtYmVyIChpX2Jsa25vIG9yIHdoYXRub3QpLiAgVGhpcyBpcyB1c2VkIHNvCisJICogdGhhdCBjYWNoaW5nIGxvZyBtZXNzYWdlcyBjYW4gaWRlbnRpZnkgdGhlIG93bmluZyBzdHJ1Y3R1cmUuCisJICovCisJdTY0CSgqY29fb3duZXIpKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKworCS8qIFRoZSBzdXBlcmJsb2NrIGlzIG5lZWRlZCBkdXJpbmcgSS9PLiAqLworCXN0cnVjdCBzdXBlcl9ibG9jayAqKCpjb19nZXRfc3VwZXIpKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKwkvKgorCSAqIExvY2sgYW5kIHVubG9jayB0aGUgY2FjaGluZyBkYXRhLiAgVGhlc2Ugd2lsbCBub3Qgc2xlZXAsIGFuZAorCSAqIHNob3VsZCBwcm9iYWJseSBiZSBzcGlubG9ja3MuCisJICovCisJdm9pZAkoKmNvX2NhY2hlX2xvY2spKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKwl2b2lkCSgqY29fY2FjaGVfdW5sb2NrKShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSk7CisKKwkvKgorCSAqIExvY2sgYW5kIHVubG9jayBmb3IgZGlzayBJL08uICBUaGVzZSB3aWxsIHNsZWVwLCBhbmQgc2hvdWxkCisJICogYmUgbXV0ZXhlcy4KKwkgKi8KKwl2b2lkCSgqY29faW9fbG9jaykoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpOworCXZvaWQJKCpjb19pb191bmxvY2spKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKK307CisKIGludCBfX2luaXQgaW5pdF9vY2ZzMl91cHRvZGF0ZV9jYWNoZSh2b2lkKTsKIHZvaWQgZXhpdF9vY2ZzMl91cHRvZGF0ZV9jYWNoZSh2b2lkKTsKIAotdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotdm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW5pdChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19vcGVyYXRpb25zICpvcHMpOwordm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9wdXJnZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSk7Cit2b2lkIG9jZnMyX21ldGFkYXRhX2NhY2hlX2V4aXQoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpOwogCi1pbnQgb2NmczJfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCit1NjQgb2NmczJfbWV0YWRhdGFfY2FjaGVfb3duZXIoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2kpOwordm9pZCBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pb19sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKK3ZvaWQgb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fdW5sb2NrKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpKTsKKworaW50IG9jZnMyX2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Ci12b2lkIG9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLXZvaWQgb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Ci12b2lkIG9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCit2b2lkIG9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLXZvaWQgb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkJCSAgICBzZWN0b3JfdCBibG9jaywKIAkJCQkJICAgIHUzMiBjX2xlbik7Ci1pbnQgb2NmczJfYnVmZmVyX3JlYWRfYWhlYWQoc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBvY2ZzMl9idWZmZXJfcmVhZF9haGVhZChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIAogI2VuZGlmIC8qIE9DRlMyX1VQVE9EQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IGQxYTI3Y2QuLmZlMzQxOTAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKKysrIGIvZnMvb2NmczIveGF0dHIuYwpAQCAtNTUsNyArNTUsOCBAQAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgotCisjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCisjaW5jbHVkZSAiYWNsLmgiCiAKIHN0cnVjdCBvY2ZzMl94YXR0cl9kZWZfdmFsdWVfcm9vdCB7CiAJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QJeHY7CkBAIC0xNDAsNyArMTQxLDcgQEAKIAlpbnQgbm90X2ZvdW5kOwogfTsKIAotc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoc3RydWN0IGlub2RlICppbm9kZSwKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsCiAJCQkJCSAgICAgaW50IGluZGV4LAogCQkJCQkgICAgIGludCAqYmxvY2tfb2ZmLApAQCAtMTU3LDcgKzE1OCw3IEBACiAJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKTsKIAogc3RhdGljIGludCBvY2ZzMl94YXR0cl90cmVlX2xpc3RfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoLAogCQkJCQljaGFyICpidWZmZXIsCiAJCQkJCXNpemVfdCBidWZmZXJfc2l6ZSk7CiAKQEAgLTE3MCwxMiArMTcxLDQyIEBACiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KTsKIAotc3RhdGljIGludCBvY2ZzMl9kZWxldGVfeGF0dHJfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2JoKTsKK3R5cGVkZWYgaW50ICh4YXR0cl90cmVlX3JlY19mdW5jKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgdTY0IGJsa25vLCB1MzIgY3BvcywgdTMyIGxlbiwgdm9pZCAqcGFyYSk7CitzdGF0aWMgaW50IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCQkgICB4YXR0cl90cmVlX3JlY19mdW5jICpyZWNfZnVuYywKKwkJCQkJICAgdm9pZCAqcGFyYSk7CitzdGF0aWMgaW50IG9jZnMyX2RlbGV0ZV94YXR0cl9pbl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAorCQkJCQl2b2lkICpwYXJhKTsKK3N0YXRpYyBpbnQgb2NmczJfcm1feGF0dHJfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgdTY0IGJsa25vLAorCQkJCSAgdTMyIGNwb3MsCisJCQkJICB1MzIgbGVuLAorCQkJCSAgdm9pZCAqcGFyYSk7CisKIHN0YXRpYyBpbnQgb2NmczJfbXZfeGF0dHJfYnVja2V0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgdTY0IHNyY19ibGssIHU2NCBsYXN0X2JsaywgdTY0IHRvX2JsaywKIAkJCQkgIHVuc2lnbmVkIGludCBzdGFydF9idWNrZXQsCiAJCQkJICB1MzIgKmZpcnN0X2hhc2gpOworc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX3JlZmNvdW50X3hhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhpcywKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGJzLAorCQkJCQlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqKnJlZl90cmVlLAorCQkJCQlpbnQgKm1ldGFfbmVlZCwKKwkJCQkJaW50ICpjcmVkaXRzKTsKK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3RyZWVfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJCSAgIGludCBvZmZzZXQsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKTsKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIAogc3RhdGljIGlubGluZSB1MTYgb2NmczJfeGF0dHJfYnVja2V0c19wZXJfY2x1c3RlcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKIHsKQEAgLTI1NCw5ICsyODUsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIW9jZnMyX2J1ZmZlcl91cHRvZGF0ZShidWNrZXQtPmJ1X2lub2RlLAorCQlpZiAoIW9jZnMyX2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShidWNrZXQtPmJ1X2lub2RlKSwKIAkJCQkJICAgYnVja2V0LT5idV9iaHNbaV0pKQotCQkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoYnVja2V0LT5idV9pbm9kZSwKKwkJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKElOT0RFX0NBQ0hFKGJ1Y2tldC0+YnVfaW5vZGUpLAogCQkJCQkJICAgICAgYnVja2V0LT5idV9iaHNbaV0pOwogCX0KIApAQCAtMjcxLDcgKzMwMiw3IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhidWNrZXQtPmJ1X2lub2RlLCB4Yl9ibGtubywKKwlyYyA9IG9jZnMyX3JlYWRfYmxvY2tzKElOT0RFX0NBQ0hFKGJ1Y2tldC0+YnVfaW5vZGUpLCB4Yl9ibGtubywKIAkJCSAgICAgICBidWNrZXQtPmJ1X2Jsb2NrcywgYnVja2V0LT5idV9iaHMsIDAsCiAJCQkgICAgICAgTlVMTCk7CiAJaWYgKCFyYykgewpAQCAtMjk3LDcgKzMyOCw4IEBACiAJaW50IGksIHJjID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBidWNrZXQtPmJ1X2Jsb2NrczsgaSsrKSB7Ci0JCXJjID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBidWNrZXQtPmJ1X2lub2RlLAorCQlyYyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwKKwkJCQkJICBJTk9ERV9DQUNIRShidWNrZXQtPmJ1X2lub2RlKSwKIAkJCQkJICBidWNrZXQtPmJ1X2Joc1tpXSwgdHlwZSk7CiAJCWlmIChyYykgewogCQkJbWxvZ19lcnJubyhyYyk7CkBAIC0zOTksNyArNDMxLDcgQEAKIAlpbnQgcmM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7CiAKLQlyYyA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIHhiX2Jsa25vLCAmdG1wLAorCXJjID0gb2NmczJfcmVhZF9ibG9jayhJTk9ERV9DQUNIRShpbm9kZSksIHhiX2Jsa25vLCAmdG1wLAogCQkJICAgICAgb2NmczJfdmFsaWRhdGVfeGF0dHJfYmxvY2spOwogCiAJLyogSWYgb2NmczJfcmVhZF9ibG9jaygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KQEAgLTU5NiwxNSArNjI4LDE0IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IGN0eHQtPmhhbmRsZTsKIAllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCB3aHk7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAJdTMyIHByZXZfY2x1c3RlcnMsIGxvZ2ljYWxfc3RhcnQgPSBsZTMyX3RvX2NwdSh2Yi0+dmJfeHYtPnhyX2NsdXN0ZXJzKTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CiAKIAltbG9nKDAsICIoY2x1c3RlcnNfdG9fYWRkIGZvciB4YXR0cj0gJXUpXG4iLCBjbHVzdGVyc190b19hZGQpOwogCi0Jb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCB2Yik7CisJb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZSgmZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmIpOwogCi0Jc3RhdHVzID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB2Yi0+dmJfYmgsCisJc3RhdHVzID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmItPnZiX2JoLAogCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTYxMiwxMyArNjQzLDExIEBACiAJfQogCiAJcHJldl9jbHVzdGVycyA9IGxlMzJfdG9fY3B1KHZiLT52Yl94di0+eHJfY2x1c3RlcnMpOwotCXN0YXR1cyA9IG9jZnMyX2FkZF9jbHVzdGVyc19pbl9idHJlZShvc2IsCi0JCQkJCSAgICAgaW5vZGUsCisJc3RhdHVzID0gb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKGhhbmRsZSwKKwkJCQkJICAgICAmZXQsCiAJCQkJCSAgICAgJmxvZ2ljYWxfc3RhcnQsCiAJCQkJCSAgICAgY2x1c3RlcnNfdG9fYWRkLAogCQkJCQkgICAgIDAsCi0JCQkJCSAgICAgJmV0LAotCQkJCQkgICAgIGhhbmRsZSwKIAkJCQkJICAgICBjdHh0LT5kYXRhX2FjLAogCQkJCQkgICAgIGN0eHQtPm1ldGFfYWMsCiAJCQkJCSAgICAgJndoeSk7CkBAIC02NDksNiArNjc4LDcgQEAKIHN0YXRpYyBpbnQgX19vY2ZzMl9yZW1vdmVfeGF0dHJfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YiwKIAkJCQkgICAgICB1MzIgY3BvcywgdTMyIHBoeXNfY3BvcywgdTMyIGxlbiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzLAogCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKIHsKIAlpbnQgcmV0OwpAQCAtNjU2LDE2ICs2ODYsMTYgQEAKIAloYW5kbGVfdCAqaGFuZGxlID0gY3R4dC0+aGFuZGxlOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAotCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgdmIpOworCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksIHZiKTsKIAotCXJldCA9IHZiLT52Yl9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgdmItPnZiX2JoLAorCXJldCA9IHZiLT52Yl9hY2Nlc3MoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHZiLT52Yl9iaCwKIAkJCSAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX3JlbW92ZV9leHRlbnQoaW5vZGUsICZldCwgY3BvcywgbGVuLCBoYW5kbGUsIGN0eHQtPm1ldGFfYWMsCisJcmV0ID0gb2NmczJfcmVtb3ZlX2V4dGVudChoYW5kbGUsICZldCwgY3BvcywgbGVuLCBjdHh0LT5tZXRhX2FjLAogCQkJCSAgJmN0eHQtPmRlYWxsb2MpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNjgwLDcgKzcxMCwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9jYWNoZV9jbHVzdGVyX2RlYWxsb2MoJmN0eHQtPmRlYWxsb2MsIHBoeXNfYmxrbm8sIGxlbik7CisJaWYgKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKQorCQlyZXQgPSBvY2ZzMl9kZWNyZWFzZV9yZWZjb3VudChpbm9kZSwgaGFuZGxlLAorCQkJCQlvY2ZzMl9ibG9ja3NfdG9fY2x1c3RlcnMoaW5vZGUtPmlfc2IsCisJCQkJCQkJCSBwaHlzX2Jsa25vKSwKKwkJCQkJbGVuLCBjdHh0LT5tZXRhX2FjLCAmY3R4dC0+ZGVhbGxvYywgMSk7CisJZWxzZQorCQlyZXQgPSBvY2ZzMl9jYWNoZV9jbHVzdGVyX2RlYWxsb2MoJmN0eHQtPmRlYWxsb2MsCisJCQkJCQkgIHBoeXNfYmxrbm8sIGxlbik7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCkBAIC02OTUsNiArNzMyLDcgQEAKIAkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCiB7CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGV4dF9mbGFnczsKIAl1MzIgdHJ1bmNfbGVuLCBjcG9zLCBwaHlzX2Nwb3MsIGFsbG9jX3NpemU7CiAJdTY0IGJsb2NrOwogCkBAIC03MDYsNyArNzQ0LDcgQEAKIAl3aGlsZSAodHJ1bmNfbGVuKSB7CiAJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBoeXNfY3BvcywKIAkJCQkJICAgICAgICZhbGxvY19zaXplLAotCQkJCQkgICAgICAgJnZiLT52Yl94di0+eHJfbGlzdCk7CisJCQkJCSAgICAgICAmdmItPnZiX3h2LT54cl9saXN0LCAmZXh0X2ZsYWdzKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC03MTcsMTUgKzc1NSwxNSBAQAogCiAJCXJldCA9IF9fb2NmczJfcmVtb3ZlX3hhdHRyX3JhbmdlKGlub2RlLCB2YiwgY3BvcywKIAkJCQkJCSBwaHlzX2Nwb3MsIGFsbG9jX3NpemUsCi0JCQkJCQkgY3R4dCk7CisJCQkJCQkgZXh0X2ZsYWdzLCBjdHh0KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAogCQlibG9jayA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgcGh5c19jcG9zKTsKLQkJb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoaW5vZGUsIGJsb2NrLAotCQkJCQkJICAgICAgIGFsbG9jX3NpemUpOworCQlvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJCQkgICAgICAgYmxvY2ssIGFsbG9jX3NpemUpOwogCQljcG9zICs9IGFsbG9jX3NpemU7CiAJCXRydW5jX2xlbiAtPSBhbGxvY19zaXplOwogCX0KQEAgLTgxMCw2ICs4NDgsMjMgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitpbnQgb2NmczJfaGFzX2lubGluZV94YXR0cl92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKKwlpbnQgaTsKKworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJICgodm9pZCAqKWRpICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KKwkJIGxlMTZfdG9fY3B1KGRpLT5pX3hhdHRyX2lubGluZV9zaXplKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKQorCQlpZiAoIW9jZnMyX3hhdHRyX2lzX2xvY2FsKCZ4aC0+eGhfZW50cmllc1tpXSkpCisJCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2lib2R5X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAogCQkJCSAgY2hhciAqYnVmZmVyLApAQCAtODU1LDExICs5MTAsOSBAQAogCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSAmeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKIAkJcmV0ID0gb2NmczJfeGF0dHJfbGlzdF9lbnRyaWVzKGlub2RlLCBoZWFkZXIsCiAJCQkJCSAgICAgICBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290ICp4dCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdDsKLQkJcmV0ID0gb2NmczJfeGF0dHJfdHJlZV9saXN0X2luZGV4X2Jsb2NrKGlub2RlLCB4dCwKKwl9IGVsc2UKKwkJcmV0ID0gb2NmczJfeGF0dHJfdHJlZV9saXN0X2luZGV4X2Jsb2NrKGlub2RlLCBibGtfYmgsCiAJCQkJCQkgICBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLQl9CiAKIAlicmVsc2UoYmxrX2JoKTsKIApAQCAtOTYxLDcgKzEwMTQsNyBAQAogCWNwb3MgPSAwOwogCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKIAkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAotCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgZWwpOworCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgZWwsIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTk3MCw3ICsxMDIzLDggQEAKIAkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3Rlcik7CiAJCS8qIENvcHkgb2NmczJfeGF0dHJfdmFsdWUgKi8KIAkJZm9yIChpID0gMDsgaSA8IG51bV9jbHVzdGVycyAqIGJwYzsgaSsrLCBibGtubysrKSB7Ci0JCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoLCBOVUxMKTsKKwkJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoaW5vZGUpLCBibGtubywKKwkJCQkJICAgICAgICZiaCwgTlVMTCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJCWdvdG8gb3V0OwpAQCAtMTA4NSw3ICsxMTM5LDcgQEAKIAkJaSA9IHhzLT5oZXJlIC0geHMtPmhlYWRlci0+eGhfZW50cmllczsKIAogCQlpZiAobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpIHsKLQkJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZSwKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZS0+aV9zYiwKIAkJCQkJCQkJYnVja2V0X3hoKHhzLT5idWNrZXQpLAogCQkJCQkJCQlpLAogCQkJCQkJCQkmYmxvY2tfb2ZmLApAQCAtMTE4Myw3ICsxMjM3LDcgQEAKIAogc3RhdGljIGludCBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCiAJCQkJCSAgIGNvbnN0IHZvaWQgKnZhbHVlLAogCQkJCQkgICBpbnQgdmFsdWVfbGVuKQogewpAQCAtMTE5NCwyOCArMTI0OCwzNCBAQAogCXUzMiBjbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwgdmFsdWVfbGVuKTsKIAl1NjQgYmxrbm87CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGV4dF9mbGFnczsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYgPSB2Yi0+dmJfeHY7CiAKIAlCVUdfT04oY2x1c3RlcnMgPiBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpKTsKIAogCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKIAkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAotCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgJnh2LT54cl9saXN0KTsKKwkJCQkJICAgICAgICZudW1fY2x1c3RlcnMsICZ4di0+eHJfbGlzdCwKKwkJCQkJICAgICAgICZleHRfZmxhZ3MpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCisJCUJVR19PTihleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCk7CisKIAkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3Rlcik7CiAKIAkJZm9yIChpID0gMDsgaSA8IG51bV9jbHVzdGVycyAqIGJwYzsgaSsrLCBibGtubysrKSB7Ci0JCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoLCBOVUxMKTsKKwkJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soSU5PREVfQ0FDSEUoaW5vZGUpLCBibGtubywKKwkJCQkJICAgICAgICZiaCwgTlVMTCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCiAJCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsCi0JCQkJCQkgICBpbm9kZSwKKwkJCQkJCSAgIElOT0RFX0NBQ0hFKGlub2RlKSwKIAkJCQkJCSAgIGJoLAogCQkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJaWYgKHJldCA8IDApIHsKQEAgLTEyNjYsNyArMTMyNiw3IEBACiAJdm9pZCAqdmFsID0geHMtPmJhc2UgKyBvZmZzOwogCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CiAKLQlyZXQgPSB2Yi0+dmJfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHZiLT52Yl9iaCwKKwlyZXQgPSB2Yi0+dmJfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yi0+dmJfYmgsCiAJCQkgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTI5NCw3ICsxMzU0LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB2Yi0+dmJfYmgsCisJcmV0ID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmItPnZiX2JoLAogCQkJICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTEzNTUsNyArMTQxNSw3IEBACiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgY3R4dC0+aGFuZGxlLCB2Yi0+dmJfeHYsCisJcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgY3R4dC0+aGFuZGxlLCB2YiwKIAkJCQkJICAgICAgeGktPnZhbHVlLCB4aS0+dmFsdWVfbGVuKTsKIAlpZiAocmV0IDwgMCkKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTU5NCw3ICsxNjU0LDcgQEAKIAogCQkJCXJldCA9IF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsCiAJCQkJCQkJCWhhbmRsZSwKLQkJCQkJCQkJdmIudmJfeHYsCisJCQkJCQkJCSZ2YiwKIAkJCQkJCQkJeGktPnZhbHVlLAogCQkJCQkJCQl4aS0+dmFsdWVfbGVuKTsKIAkJCQlpZiAocmV0IDwgMCkKQEAgLTE2MTUsNyArMTY3NSw3IEBACiAJCX0KIAl9CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGlub2RlLCB4cy0+aW5vZGVfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHhzLT5pbm9kZV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xNjIzLDcgKzE2ODMsNyBAQAogCX0KIAogCWlmICghKGZsYWcgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7Ci0JCXJldCA9IHZiLnZiX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB2Yi52Yl9iaCwKKwkJcmV0ID0gdmIudmJfYWNjZXNzKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB2Yi52Yl9iaCwKIAkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTE3MDAsNTEgKzE3NjAsMTEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUqaW5vZGUsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyKQorLyoKKyAqIEluIHhhdHRyIHJlbW92ZSwgaWYgaXQgaXMgc3RvcmVkIG91dHNpZGUgYW5kIHJlZmNvdW50ZWQsIHdlIG1heSBoYXZlCisgKiB0aGUgY2hhbmNlIHRvIHNwbGl0IHRoZSByZWZjb3VudCB0cmVlLiBTbyBuZWVkIHRoZSBhbGxvY2F0b3JzLgorICovCitzdGF0aWMgaW50IG9jZnMyX2xvY2tfeGF0dHJfcmVtb3ZlX2FsbG9jYXRvcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2LAorCQkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYywKKwkJCQkJaW50ICpyZWZfY3JlZGl0cykKIHsKLQlpbnQgcmV0ID0gMCwgaTsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgY3R4dCA9IHsgTlVMTCwgTlVMTCwgfTsKKwlpbnQgcmV0LCBtZXRhX2FkZCA9IDA7CisJdTMyIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzOworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CiAKLQlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmY3R4dC5kZWFsbG9jKTsKLQotCWN0eHQuaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLAotCQkJCQlvY2ZzMl9yZW1vdmVfZXh0ZW50X2NyZWRpdHMob3NiLT5zYikpOwotCWlmIChJU19FUlIoY3R4dC5oYW5kbGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoY3R4dC5oYW5kbGUpOworCSpyZWZfY3JlZGl0cyA9IDA7CisJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCAwLCAmcF9jbHVzdGVyLAorCQkJCSAgICAgICAmbnVtX2NsdXN0ZXJzLAorCQkJCSAgICAgICAmeHYtPnhyX2xpc3QsCisJCQkJICAgICAgICZleHRfZmxhZ3MpOworCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoaGVhZGVyLT54aF9jb3VudCk7IGkrKykgewotCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5ID0gJmhlYWRlci0+eGhfZW50cmllc1tpXTsKKwlpZiAoIShleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpCisJCWdvdG8gb3V0OwogCi0JCWlmICghb2NmczJfeGF0dHJfaXNfbG9jYWwoZW50cnkpKSB7Ci0JCQl2b2lkICp2YWw7Ci0KLQkJCXZhbCA9ICh2b2lkICopaGVhZGVyICsKLQkJCQlsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOwotCQkJdmItPnZiX3h2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCi0JCQkJKHZhbCArIE9DRlMyX1hBVFRSX1NJWkUoZW50cnktPnhlX25hbWVfbGVuKSk7Ci0JCQlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwgdmIsIDAsICZjdHh0KTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJcmV0ID0gb2NmczJfcmVmY291bnRlZF94YXR0cl9kZWxldGVfbmVlZChpbm9kZSwgcmVmX2NpLAorCQkJCQkJIHJlZl9yb290X2JoLCB4diwKKwkJCQkJCSAmbWV0YV9hZGQsIHJlZl9jcmVkaXRzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CiAJfQogCi0Jb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgY3R4dC5oYW5kbGUpOwotCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOwotCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZjdHh0LmRlYWxsb2MpOworCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2NrcyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCisJCQkJCQltZXRhX2FkZCwgbWV0YV9hYyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoKQoreworCWludCByZXQgPSAwLCBpLCByZWZfY3JlZGl0czsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgY3R4dCA9IHsgTlVMTCwgTlVMTCwgfTsKKwl2b2lkICp2YWw7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmY3R4dC5kZWFsbG9jKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShoZWFkZXItPnhoX2NvdW50KTsgaSsrKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkgPSAmaGVhZGVyLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbChlbnRyeSkpCisJCQljb250aW51ZTsKKworCQl2YWwgPSAodm9pZCAqKWhlYWRlciArCisJCQlsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCQl2Yi0+dmJfeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKKwkJCSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKGVudHJ5LT54ZV9uYW1lX2xlbikpOworCisJCXJldCA9IG9jZnMyX2xvY2tfeGF0dHJfcmVtb3ZlX2FsbG9jYXRvcnMoaW5vZGUsIHZiLT52Yl94diwKKwkJCQkJCQkgcmVmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJCQkgJmN0eHQubWV0YV9hYywKKwkJCQkJCQkgJnJlZl9jcmVkaXRzKTsKKworCQljdHh0LmhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgcmVmX2NyZWRpdHMgKworCQkJCQlvY2ZzMl9yZW1vdmVfZXh0ZW50X2NyZWRpdHMob3NiLT5zYikpOworCQlpZiAoSVNfRVJSKGN0eHQuaGFuZGxlKSkgeworCQkJcmV0ID0gUFRSX0VSUihjdHh0LmhhbmRsZSk7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLCB2YiwgMCwgJmN0eHQpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBjdHh0LmhhbmRsZSk7CisJCWlmIChjdHh0Lm1ldGFfYWMpIHsKKwkJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjdHh0Lm1ldGFfYWMpOworCQkJY3R4dC5tZXRhX2FjID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChjdHh0Lm1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChjdHh0Lm1ldGFfYWMpOworCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOworCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZjdHh0LmRlYWxsb2MpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfaWJvZHlfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCkKIHsKIAogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwpAQCAtMTc1OSwxMyArMTg4MCwyMSBAQAogCQkgKCh2b2lkICopZGkgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQogCQkgbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpKTsKIAotCXJldCA9IG9jZnMyX3JlbW92ZV92YWx1ZV9vdXRzaWRlKGlub2RlLCAmdmIsIGhlYWRlcik7CisJcmV0ID0gb2NmczJfcmVtb3ZlX3ZhbHVlX291dHNpZGUoaW5vZGUsICZ2YiwgaGVhZGVyLAorCQkJCQkgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3Qgb2NmczJfcm1feGF0dHJfYnVja2V0X3BhcmEgeworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoOworfTsKKwogc3RhdGljIGludCBvY2ZzMl94YXR0cl9ibG9ja19yZW1vdmUoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgpCiB7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YjsKIAlpbnQgcmV0ID0gMDsKQEAgLTE3NzMsMTkgKzE5MDIsMjkgQEAKIAkJLnZiX2JoID0gYmxrX2JoLAogCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIsCiAJfTsKKwlzdHJ1Y3Qgb2NmczJfcm1feGF0dHJfYnVja2V0X3BhcmEgYXJncyA9IHsKKwkJLnJlZl9jaSA9IHJlZl9jaSwKKwkJLnJlZl9yb290X2JoID0gcmVmX3Jvb3RfYmgsCisJfTsKIAogCXhiID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOwogCWlmICghKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSkgewogCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSAmKHhiLT54Yl9hdHRycy54Yl9oZWFkZXIpOwotCQlyZXQgPSBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShpbm9kZSwgJnZiLCBoZWFkZXIpOworCQlyZXQgPSBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShpbm9kZSwgJnZiLCBoZWFkZXIsCisJCQkJCQkgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAJfSBlbHNlCi0JCXJldCA9IG9jZnMyX2RlbGV0ZV94YXR0cl9pbmRleF9ibG9jayhpbm9kZSwgYmxrX2JoKTsKKwkJcmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhpbm9kZSwKKwkJCQkJCWJsa19iaCwKKwkJCQkJCW9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIsCisJCQkJCQkmYXJncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgIHU2NCBibG9jaykKKwkJCQkgIHU2NCBibG9jaywKKwkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgpCiB7CiAJc3RydWN0IGlub2RlICp4Yl9hbGxvY19pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2FsbG9jX2JoID0gTlVMTDsKQEAgLTE4MDMsNyArMTk0Miw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX3JlbW92ZShpbm9kZSwgYmxrX2JoKTsKKwlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19yZW1vdmUoaW5vZGUsIGJsa19iaCwgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTE4NjMsNiArMjAwMiw5IEBACiB7CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2kgPSBOVUxMOwogCWhhbmRsZV90ICpoYW5kbGU7CiAJaW50IHJldDsKIApAQCAtMTg3Miw4ICsyMDE0LDIxIEBACiAJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkpCiAJCXJldHVybiAwOwogCisJaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfUkVGQ09VTlRfRkwpIHsKKwkJcmV0ID0gb2NmczJfbG9ja19yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJCQkJICAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYyksCisJCQkJCSAgICAgICAxLCAmcmVmX3RyZWUsICZyZWZfcm9vdF9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlZl9jaSA9ICZyZWZfdHJlZS0+cmZfY2k7CisKKwl9CisKIAlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkgewotCQlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9yZW1vdmUoaW5vZGUsIGRpX2JoKTsKKwkJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfcmVtb3ZlKGlub2RlLCBkaV9iaCwKKwkJCQkJICAgICAgIHJlZl9jaSwgcmVmX3Jvb3RfYmgpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0xODgyLDcgKzIwMzcsOCBAQAogCiAJaWYgKGRpLT5pX3hhdHRyX2xvYykgewogCQlyZXQgPSBvY2ZzMl94YXR0cl9mcmVlX2Jsb2NrKGlub2RlLAotCQkJCQkgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3hhdHRyX2xvYykpOworCQkJCQkgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3hhdHRyX2xvYyksCisJCQkJCSAgICAgcmVmX2NpLCByZWZfcm9vdF9iaCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTE4OTYsNyArMjA1Miw3IEBACiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xOTE2LDYgKzIwNzIsOSBAQAogb3V0X2NvbW1pdDoKIAlvY2ZzMl9jb21taXRfdHJhbnMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBoYW5kbGUpOwogb3V0OgorCWlmIChyZWZfdHJlZSkKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCByZWZfdHJlZSwgMSk7CisJYnJlbHNlKHJlZl9yb290X2JoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDgzLDYgKzIyNDIsODQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2JoLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCSAgICBpbnQgaW5kZXhlZCkKK3sKKwlpbnQgcmV0OworCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CisJdTMyIG51bV9nb3Q7CisJdTY0IGZpcnN0X2Jsa25vOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gIChzdHJ1Y3Qgb2NmczJfZGlub2RlICopaW5vZGVfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YmxrOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGlub2RlX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGVuZDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShvc2IsIGhhbmRsZSwgbWV0YV9hYywgMSwKKwkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKKwkJCQkgICAmZmlyc3RfYmxrbm8pOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBlbmQ7CisJfQorCisJbmV3X2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBmaXJzdF9ibGtubyk7CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoSU5PREVfQ0FDSEUoaW5vZGUpLCBuZXdfYmgpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCisJCQkJICAgICAgbmV3X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBJbml0aWFsaXplIG9jZnMyX3hhdHRyX2Jsb2NrICovCisJeGJsayA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKiluZXdfYmgtPmJfZGF0YTsKKwltZW1zZXQoeGJsaywgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwlzdHJjcHkoKHZvaWQgKil4YmxrLCBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUpOworCXhibGstPnhiX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihvc2ItPnNsb3RfbnVtKTsKKwl4YmxrLT54Yl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOworCXhibGstPnhiX2ZzX2dlbmVyYXRpb24gPSBjcHVfdG9fbGUzMihvc2ItPmZzX2dlbmVyYXRpb24pOworCXhibGstPnhiX2Jsa25vID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOworCisJaWYgKGluZGV4ZWQpIHsKKwkJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHIgPSAmeGJsay0+eGJfYXR0cnMueGJfcm9vdDsKKwkJeHItPnh0X2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIoMSk7CisJCXhyLT54dF9sYXN0X2ViX2JsayA9IDA7CisJCXhyLT54dF9saXN0LmxfdHJlZV9kZXB0aCA9IDA7CisJCXhyLT54dF9saXN0LmxfY291bnQgPSBjcHVfdG9fbGUxNigKKwkJCQkJb2NmczJfeGF0dHJfcmVjc19wZXJfeGIoaW5vZGUtPmlfc2IpKTsKKwkJeHItPnh0X2xpc3QubF9uZXh0X2ZyZWVfcmVjID0gY3B1X3RvX2xlMTYoMSk7CisJCXhibGstPnhiX2ZsYWdzID0gY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfSU5ERVhFRCk7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGVuZDsKKwl9CisJZGktPmlfeGF0dHJfbG9jID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBpbm9kZV9iaCk7CisKKwkqcmV0X2JoID0gbmV3X2JoOworCW5ld19iaCA9IE5VTEw7CisKK2VuZDoKKwlicmVsc2UobmV3X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogb2NmczJfeGF0dHJfYmxvY2tfc2V0KCkKICAqCkBAIC0yMDk1LDYzICsyMzMyLDI0IEBACiAJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAgKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKIAloYW5kbGVfdCAqaGFuZGxlID0gY3R4dC0+aGFuZGxlOwogCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGJsayA9IE5VTEw7Ci0JdTE2IHN1YmFsbG9jX2JpdF9zdGFydDsKLQl1MzIgbnVtX2dvdDsKLQl1NjQgZmlyc3RfYmxrbm87CiAJaW50IHJldDsKIAogCWlmICgheHMtPnhhdHRyX2JoKSB7Ci0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgaW5vZGUsIHhzLT5pbm9kZV9iaCwKLQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKLQkJaWYgKHJldCA8IDApIHsKKwkJcmV0ID0gb2NmczJfY3JlYXRlX3hhdHRyX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIHhzLT5pbm9kZV9iaCwKKwkJCQkJICAgICAgIGN0eHQtPm1ldGFfYWMsICZuZXdfYmgsIDApOworCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIGVuZDsKIAkJfQogCi0JCXJldCA9IG9jZnMyX2NsYWltX21ldGFkYXRhKG9zYiwgaGFuZGxlLCBjdHh0LT5tZXRhX2FjLCAxLAotCQkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKLQkJCQkJICAgJmZpcnN0X2Jsa25vKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0KLQkJbmV3X2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBmaXJzdF9ibGtubyk7Ci0JCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBuZXdfYmgpOwotCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKLQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0KLQkJLyogSW5pdGlhbGl6ZSBvY2ZzMl94YXR0cl9ibG9jayAqLwogCQl4cy0+eGF0dHJfYmggPSBuZXdfYmg7Ci0JCXhibGsgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7Ci0JCW1lbXNldCh4YmxrLCAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwotCQlzdHJjcHkoKHZvaWQgKil4YmxrLCBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUpOwotCQl4YmxrLT54Yl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7Ci0JCXhibGstPnhiX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KHN1YmFsbG9jX2JpdF9zdGFydCk7Ci0JCXhibGstPnhiX2ZzX2dlbmVyYXRpb24gPSBjcHVfdG9fbGUzMihvc2ItPmZzX2dlbmVyYXRpb24pOwotCQl4YmxrLT54Yl9ibGtubyA9IGNwdV90b19sZTY0KGZpcnN0X2Jsa25vKTsKLQorCQl4YmxrID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhzLT54YXR0cl9iaC0+Yl9kYXRhOwogCQl4cy0+aGVhZGVyID0gJnhibGstPnhiX2F0dHJzLnhiX2hlYWRlcjsKIAkJeHMtPmJhc2UgPSAodm9pZCAqKXhzLT5oZWFkZXI7CiAJCXhzLT5lbmQgPSAodm9pZCAqKXhibGsgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJCXhzLT5oZXJlID0geHMtPmhlYWRlci0+eGhfZW50cmllczsKLQotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCWRpLT5pX3hhdHRyX2xvYyA9IGNwdV90b19sZTY0KGZpcnN0X2Jsa25vKTsKLQkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT5pbm9kZV9iaCk7CiAJfSBlbHNlCiAJCXhibGsgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeHMtPnhhdHRyX2JoLT5iX2RhdGE7CiAKQEAgLTIyNzMsNyArMjQ3MSw3IEBACiAJCW9sZF9pbl94YiA9IDE7CiAKIAkJaWYgKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSB7Ci0JCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsCisJCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUtPmlfc2IsCiAJCQkJCQkJYnVja2V0X3hoKHhicy0+YnVja2V0KSwKIAkJCQkJCQlpLCAmYmxvY2tfb2ZmLAogCQkJCQkJCSZuYW1lX29mZnNldCk7CkBAIC0yNDI4LDYgKzI2MjYsNyBAQAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGlzLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGJzLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0LAorCQkJCSAgICAgaW50IGV4dHJhX21ldGEsCiAJCQkJICAgICBpbnQgKmNyZWRpdHMpCiB7CiAJaW50IGNsdXN0ZXJzX2FkZCwgbWV0YV9hZGQsIHJldDsKQEAgLTI0NDQsNiArMjY0Myw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJbWV0YV9hZGQgKz0gZXh0cmFfbWV0YTsKIAltbG9nKDAsICJTZXQgeGF0dHIgJXMsIHJlc2VydmUgbWV0YSBibG9ja3MgPSAlZCwgY2x1c3RlcnMgPSAlZCwgIgogCSAgICAgImNyZWRpdHMgPSAlZFxuIiwgeGktPm5hbWUsIG1ldGFfYWRkLCBjbHVzdGVyc19hZGQsICpjcmVkaXRzKTsKIApAQCAtMjU5OCw3ICsyNzk4LDcgQEAKIAogCWlmICghcmV0KSB7CiAJCS8qIFVwZGF0ZSBpbm9kZSBjdGltZS4gKi8KLQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoY3R4dC0+aGFuZGxlLCBpbm9kZSwKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoY3R4dC0+aGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksCiAJCQkJCSAgICAgIHhpcy0+aW5vZGVfYmgsCiAJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHJldCkgewpAQCAtMjcxMSwxMCArMjkxMSwxMSBAQAogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOwotCWludCByZXQsIGNyZWRpdHM7CisJaW50IHJldCwgY3JlZGl0cywgcmVmX21ldGEgPSAwLCByZWZfY3JlZGl0cyA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IGlub2RlICp0bF9pbm9kZSA9IG9zYi0+b3NiX3RsX2lub2RlOwogCXN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCBjdHh0ID0geyBOVUxMLCBOVUxMLCB9OworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICpyZWZfdHJlZSA9IE5VTEw7CiAKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyB4aSA9IHsKIAkJLm5hbWVfaW5kZXggPSBuYW1lX2luZGV4LApAQCAtMjc3OSw2ICsyOTgwLDE3IEBACiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCisJLyogQ2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaXMgcmVmY291bnRlZCBhbmQgZG8gc29tZSBwcmVwYXJ0aW9uLiAqLworCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMICYmCisJICAgICgheGlzLm5vdF9mb3VuZCB8fCAheGJzLm5vdF9mb3VuZCkpIHsKKwkJcmV0ID0gb2NmczJfcHJlcGFyZV9yZWZjb3VudF94YXR0cihpbm9kZSwgZGksICZ4aSwKKwkJCQkJCSAgICZ4aXMsICZ4YnMsICZyZWZfdHJlZSwKKwkJCQkJCSAgICZyZWZfbWV0YSwgJnJlZl9jcmVkaXRzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQogCiAJbXV0ZXhfbG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCkBAIC0yNzkzLDcgKzMwMDUsNyBAQAogCW11dGV4X3VubG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOwogCiAJcmV0ID0gb2NmczJfaW5pdF94YXR0cl9zZXRfY3R4dChpbm9kZSwgZGksICZ4aSwgJnhpcywKLQkJCQkJJnhicywgJmN0eHQsICZjcmVkaXRzKTsKKwkJCQkJJnhicywgJmN0eHQsIHJlZl9tZXRhLCAmY3JlZGl0cyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gY2xlYW51cDsKQEAgLTI4MDEsNyArMzAxMyw3IEBACiAKIAkvKiB3ZSBuZWVkIHRvIHVwZGF0ZSBpbm9kZSdzIGN0aW1lIGZpZWxkLCBzbyBhZGQgY3JlZGl0IGZvciBpdC4gKi8KIAljcmVkaXRzICs9IE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTOwotCWN0eHQuaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwljdHh0LmhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyArIHJlZl9jcmVkaXRzKTsKIAlpZiAoSVNfRVJSKGN0eHQuaGFuZGxlKSkgewogCQlyZXQgPSBQVFJfRVJSKGN0eHQuaGFuZGxlKTsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjgxOSw4ICszMDMxLDE2IEBACiAJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmN0eHQuZGVhbGxvYykpCiAJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOwogCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZjdHh0LmRlYWxsb2MpOworCiBjbGVhbnVwOgorCWlmIChyZWZfdHJlZSkKKwkJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCByZWZfdHJlZSwgMSk7CiAJdXBfd3JpdGUoJk9DRlMyX0koaW5vZGUpLT5pcF94YXR0cl9zZW0pOworCWlmICghdmFsdWUgJiYgIXJldCkgeworCQlyZXQgPSBvY2ZzMl90cnlfcmVtb3ZlX3JlZmNvdW50X3RyZWUoaW5vZGUsIGRpX2JoKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwl9CiAJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCAxKTsKIGNsZWFudXBfbm9sb2NrOgogCWJyZWxzZShkaV9iaCk7CkBAIC0yODQ5LDcgKzMwNjksOCBAQAogCXU2NCBlX2Jsa25vID0gMDsKIAogCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7Ci0JCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihpbm9kZSwgZWwsIG5hbWVfaGFzaCwgJmViX2JoKTsKKwkJcmV0ID0gb2NmczJfZmluZF9sZWFmKElOT0RFX0NBQ0hFKGlub2RlKSwgZWwsIG5hbWVfaGFzaCwKKwkJCQkgICAgICAmZWJfYmgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTI5MzEsNyArMzE1Miw3IEBACiAJCWlmIChjbXApCiAJCQljb250aW51ZTsKIAotCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsCisJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZS0+aV9zYiwKIAkJCQkJCQl4aCwKIAkJCQkJCQlpLAogCQkJCQkJCSZibG9ja19vZmYsCkBAIC0zMTc1LDcgKzMzOTYsNyBAQAogCXNpemVfdCByZXN1bHQ7CiB9OwogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKIAkJCQkJICAgICBpbnQgaW5kZXgsCiAJCQkJCSAgICAgaW50ICpibG9ja19vZmYsCkBAIC0zMTg4LDggKzM0MDksOCBAQAogCiAJbmFtZV9vZmZzZXQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZW50cmllc1tpbmRleF0ueGVfbmFtZV9vZmZzZXQpOwogCi0JKmJsb2NrX29mZiA9IG5hbWVfb2Zmc2V0ID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCSpuZXdfb2Zmc2V0ID0gbmFtZV9vZmZzZXQgJSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJKmJsb2NrX29mZiA9IG5hbWVfb2Zmc2V0ID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCSpuZXdfb2Zmc2V0ID0gbmFtZV9vZmZzZXQgJSBzYi0+c19ibG9ja3NpemU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMDksNyArMzQzMCw3IEBACiAJCXByZWZpeCA9IG9jZnMyX3hhdHRyX3ByZWZpeCh0eXBlKTsKIAogCQlpZiAocHJlZml4KSB7Ci0JCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsCisJCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUtPmlfc2IsCiAJCQkJCQkJCWJ1Y2tldF94aChidWNrZXQpLAogCQkJCQkJCQlpLAogCQkJCQkJCQkmYmxvY2tfb2ZmLApAQCAtMzIzMiwyMiArMzQ1MywxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfdHJlZV9saXN0X2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQsCi0JCQkJCSAgICAgY2hhciAqYnVmZmVyLAotCQkJCQkgICAgIHNpemVfdCBidWZmZXJfc2l6ZSkKK3N0YXRpYyBpbnQgb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCwKKwkJCQkJICAgeGF0dHJfdHJlZV9yZWNfZnVuYyAqcmVjX2Z1bmMsCisJCQkJCSAgIHZvaWQgKnBhcmEpCiB7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZ4dC0+eHRfbGlzdDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKilibGtfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnhiLT54Yl9hdHRycy54Yl9yb290Lnh0X2xpc3Q7CiAJaW50IHJldCA9IDA7CiAJdTMyIG5hbWVfaGFzaCA9IFVJTlRfTUFYLCBlX2Nwb3MgPSAwLCBudW1fY2x1c3RlcnMgPSAwOwogCXU2NCBwX2Jsa25vID0gMDsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9saXN0IHhsID0gewotCQkuYnVmZmVyID0gYnVmZmVyLAotCQkuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZSwKLQkJLnJlc3VsdCA9IDAsCi0JfTsKIAotCWlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSAwKQorCWlmICghZWwtPmxfbmV4dF9mcmVlX3JlYyB8fCAhcmVjX2Z1bmMpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKG5hbWVfaGFzaCA+IDApIHsKQEAgLTMyNTUsMTYgKzM0NzMsMTUgQEAKIAkJCQkJICAmZV9jcG9zLCAmbnVtX2NsdXN0ZXJzLCBlbCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIHBfYmxrbm8sIG51bV9jbHVzdGVycywKLQkJCQkJCSAgb2NmczJfbGlzdF94YXR0cl9idWNrZXQsCi0JCQkJCQkgICZ4bCk7CisJCXJldCA9IHJlY19mdW5jKGlub2RlLCBibGtfYmgsIHBfYmxrbm8sIGVfY3BvcywKKwkJCSAgICAgICBudW1fY2x1c3RlcnMsIHBhcmEpOwogCQlpZiAocmV0KSB7CiAJCQlpZiAocmV0ICE9IC1FUkFOR0UpCiAJCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQogCiAJCWlmIChlX2Nwb3MgPT0gMCkKQEAgLTMyNzMsNiArMzQ5MCwzNyBAQAogCQluYW1lX2hhc2ggPSBlX2Nwb3MgLSAxOwogCX0KIAorCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIGludCBvY2ZzMl9saXN0X3hhdHRyX3RyZWVfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgICB1NjQgYmxrbm8sIHUzMiBjcG9zLCB1MzIgbGVuLCB2b2lkICpwYXJhKQoreworCXJldHVybiBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgIG9jZnMyX2xpc3RfeGF0dHJfYnVja2V0LCBwYXJhKTsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl90cmVlX2xpc3RfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCwKKwkJCQkJICAgICBjaGFyICpidWZmZXIsCisJCQkJCSAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfbGlzdCB4bCA9IHsKKwkJLmJ1ZmZlciA9IGJ1ZmZlciwKKwkJLmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUsCisJCS5yZXN1bHQgPSAwLAorCX07CisKKwlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2luZGV4X2Jsb2NrKGlub2RlLCBibGtfYmgsCisJCQkJCSAgICAgIG9jZnMyX2xpc3RfeGF0dHJfdHJlZV9yZWMsICZ4bCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwogCXJldCA9IHhsLnJlc3VsdDsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMzQyNiw3ICszNjc0LDcgQEAKIAkgKi8KIAlkb3duX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgaW5vZGUsIHhiX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB4Yl9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC00MjYzLDkgKzQ1MTEsOSBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCiAJICAgICBwcmV2X2Nwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0X2Jsa25vKGZpcnN0KSk7CiAKLQlvY2ZzMl9pbml0X3hhdHRyX3RyZWVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgcm9vdF9iaCk7CisJb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoaW5vZGUpLCByb290X2JoKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiKGhhbmRsZSwgaW5vZGUsIHJvb3RfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHJvb3RfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQzMTksNyArNDU2Nyw3IEBACiAKIAltbG9nKDAsICJJbnNlcnQgJXUgY2x1c3RlcnMgYXQgYmxvY2sgJWxsdSBmb3IgeGF0dHIgYXQgJXVcbiIsCiAJICAgICBudW1fYml0cywgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgdl9zdGFydCk7Ci0JcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsICZldCwgdl9zdGFydCwgYmxvY2ssCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsICZldCwgdl9zdGFydCwgYmxvY2ssCiAJCQkJICBudW1fYml0cywgMCwgY3R4dC0+bWV0YV9hYyk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDc5OCwxMCArNTA0NiwxMyBAQAogCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSB4cy0+aGVyZTsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGJ1Y2tldF94aCh4cy0+YnVja2V0KTsKIAl2b2lkICpiYXNlOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7CisJCS52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcywKKwl9OwogCiAJQlVHX09OKCF4cy0+YmFzZSB8fCAheGUgfHwgb2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKTsKIAotCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZSwgeGgsCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKGlub2RlLT5pX3NiLCB4aCwKIAkJCQkJCXhlIC0geGgtPnhoX2VudHJpZXMsCiAJCQkJCQkmYmxvY2tfb2ZmLAogCQkJCQkJJm9mZnNldCk7CkBAIC00ODE0LDggKzUwNjUsMTAgQEAKIAl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKShiYXNlICsgb2Zmc2V0ICsKIAkJIE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSk7CiAKKwl2Yi52Yl94diA9IHh2OworCXZiLnZiX2JoID0geHMtPmJ1Y2tldC0+YnVfYmhzW2Jsb2NrX29mZl07CiAJcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgaGFuZGxlLAotCQkJCQkgICAgICB4diwgdmFsLCB2YWx1ZV9sZW4pOworCQkJCQkgICAgICAmdmIsIHZhbCwgdmFsdWVfbGVuKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiBvdXQ6CkBAIC00ODI2LDcgKzUwNzksOCBAQAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAogCQkJCSAgdTY0IGJsa25vLAogCQkJCSAgdTMyIGNwb3MsCi0JCQkJICB1MzIgbGVuKQorCQkJCSAgdTMyIGxlbiwKKwkJCQkgIHZvaWQgKnBhcmEpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKQEAgLTQ4MzgsMTQgKzUwOTIsMjIgQEAKIAlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCBkZWFsbG9jOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAotCW9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCByb290X2JoKTsKKwlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgb2NmczJfZGVsZXRlX3hhdHRyX2luX2J1Y2tldCwgcGFyYSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKCZldCwgSU5PREVfQ0FDSEUoaW5vZGUpLCByb290X2JoKTsKIAogCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZkZWFsbG9jKTsKIAogCW1sb2coMCwgInJtIHhhdHRyIGV4dGVudCByZWMgYXQgJXUgbGVuID0gJXUsIHN0YXJ0IGZyb20gJWxsdVxuIiwKIAkgICAgIGNwb3MsIGxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubyk7CiAKLQlvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShpbm9kZSwgYmxrbm8sIGxlbik7CisJb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoSU5PREVfQ0FDSEUoaW5vZGUpLCBibGtubywKKwkJCQkJICAgICAgIGxlbik7CiAKIAlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwgMCwgMSwgTlVMTCwgJm1ldGFfYWMpOwogCWlmIChyZXQpIHsKQEAgLTQ4NzAsMTQgKzUxMzIsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBpbm9kZSwgcm9vdF9iaCwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgcm9vdF9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGlub2RlLCAmZXQsIGNwb3MsIGxlbiwgaGFuZGxlLCBtZXRhX2FjLAorCXJldCA9IG9jZnMyX3JlbW92ZV9leHRlbnQoaGFuZGxlLCAmZXQsIGNwb3MsIGxlbiwgbWV0YV9hYywKIAkJCQkgICZkZWFsbG9jKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTUyMjAsNyArNTQ4Miw3IEBACiAJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCwKIAkJCQkJdm9pZCAqcGFyYSkKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMCwgcmVmX2NyZWRpdHM7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBidWNrZXRfeGgoYnVja2V0KTsKIAl1MTYgaTsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlOwpAQCAtNTIyOCw3ICs1NDkwLDkgQEAKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgY3R4dCA9IHtOVUxMLCBOVUxMLH07CiAJaW50IGNyZWRpdHMgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50X2NyZWRpdHMob3NiLT5zYikgKwogCQlvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7Ci0KKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJc3RydWN0IG9jZnMyX3JtX3hhdHRyX2J1Y2tldF9wYXJhICphcmdzID0KKwkJCShzdHJ1Y3Qgb2NmczJfcm1feGF0dHJfYnVja2V0X3BhcmEgKilwYXJhOwogCiAJb2NmczJfaW5pdF9kZWFsbG9jX2N0eHQoJmN0eHQuZGVhbGxvYyk7CiAKQEAgLTUyMzcsNyArNTUwMSwxNiBAQAogCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQogCQkJY29udGludWU7CiAKLQkJY3R4dC5oYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCQlyZXQgPSBvY2ZzMl9nZXRfeGF0dHJfdHJlZV92YWx1ZV9yb290KGlub2RlLT5pX3NiLCBidWNrZXQsCisJCQkJCQkgICAgICBpLCAmeHYsIE5VTEwpOworCisJCXJldCA9IG9jZnMyX2xvY2tfeGF0dHJfcmVtb3ZlX2FsbG9jYXRvcnMoaW5vZGUsIHh2LAorCQkJCQkJCSBhcmdzLT5yZWZfY2ksCisJCQkJCQkJIGFyZ3MtPnJlZl9yb290X2JoLAorCQkJCQkJCSAmY3R4dC5tZXRhX2FjLAorCQkJCQkJCSAmcmVmX2NyZWRpdHMpOworCisJCWN0eHQuaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzICsgcmVmX2NyZWRpdHMpOwogCQlpZiAoSVNfRVJSKGN0eHQuaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihjdHh0LmhhbmRsZSk7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC01MjQ4LDYzICs1NTIxLDE0OTAgQEAKIAkJCQkJCQlpLCAwLCAmY3R4dCk7CiAKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgY3R4dC5oYW5kbGUpOworCQlpZiAoY3R4dC5tZXRhX2FjKSB7CisJCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoY3R4dC5tZXRhX2FjKTsKKwkJCWN0eHQubWV0YV9hYyA9IE5VTEw7CisJCX0KIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKKwlpZiAoY3R4dC5tZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoY3R4dC5tZXRhX2FjKTsKIAlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAxKTsKIAlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmY3R4dC5kZWFsbG9jKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2RlbGV0ZV94YXR0cl9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqeGJfYmgpCisvKgorICogV2hlbmV2ZXIgd2UgbW9kaWZ5IGEgeGF0dHIgdmFsdWUgcm9vdCBpbiB0aGUgYnVja2V0KGUuZywgQ29XCisgKiBvciBjaGFuZ2UgdGhlIGV4dGVudCByZWNvcmQgZmxhZyksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUKKyAqIHRoZSBtZXRhZWNjIGZvciB0aGUgd2hvbGUgYnVja2V0LiBTbyBpdCBpcyBkb25lIGhlcmUuCisgKgorICogTm90ZToKKyAqIFdlIGhhdmUgdG8gZ2l2ZSB0aGUgZXh0cmEgY3JlZGl0cyBmb3IgdGhlIGNhbGxlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfcG9zdF9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgIHZvaWQgKnBhcmEpCiB7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9Ci0JCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeGJfYmgtPmJfZGF0YTsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnhiLT54Yl9hdHRycy54Yl9yb290Lnh0X2xpc3Q7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKilwYXJhOworCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgYnVja2V0LAorCQkJCQkJT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYnVja2V0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogU3BlY2lhbCBhY3Rpb24gd2UgbmVlZCBpZiB0aGUgeGF0dHIgdmFsdWUgaXMgcmVmY291bnRlZC4KKyAqCisgKiAxLiBJZiB0aGUgeGF0dHIgaXMgcmVmY291bnRlZCwgbG9jayB0aGUgdHJlZS4KKyAqIDIuIENvVyB0aGUgeGF0dHIgaWYgd2UgYXJlIHNldHRpbmcgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIHZhbHVlCisgKiAgICB3aWxsIGJlIHN0b3JlZCBvdXRzaWRlLgorICogMy4gSW4gb3RoZXIgY2FzZSwgZGVjcmVhc2VfcmVmY291bnQgd2lsbCB3b3JrIGZvciB1cywgc28ganVzdAorICogICAgbG9jayB0aGUgcmVmY291bnQgdHJlZSwgY2FsY3VsYXRlIHRoZSBtZXRhIGFuZCBjcmVkaXRzIGlzIE9LLgorICoKKyAqIFdlIGhhdmUgdG8gZG8gQ29XIGJlZm9yZSBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0IHNpbmNlCisgKiBjdXJyZW50bHkgQ29XIGlzIGEgY29tcGxldGVkIHRyYW5zYWN0aW9uLCB3aGlsZSB0aGlzIGZ1bmN0aW9uCisgKiB3aWxsIGFsc28gbG9jayB0aGUgYWxsb2NhdG9ycyBhbmQgbGV0IHVzIGRlYWRsb2NrLiBTbyB3ZSB3aWxsCisgKiBDb1cgdGhlIHdob2xlIHhhdHRyIHZhbHVlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3ByZXBhcmVfcmVmY291bnRfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeGlzLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4YnMsCisJCQkJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmVmX3RyZWUsCisJCQkJCWludCAqbWV0YV9hZGQsCisJCQkJCWludCAqY3JlZGl0cykKK3sKIAlpbnQgcmV0ID0gMDsKLQl1MzIgbmFtZV9oYXNoID0gVUlOVF9NQVgsIGVfY3BvcywgbnVtX2NsdXN0ZXJzOwotCXU2NCBwX2Jsa25vOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGI7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwljaGFyICpiYXNlOworCXUzMiBwX2NsdXN0ZXIsIG51bV9jbHVzdGVyczsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzOworCWludCBuYW1lX29mZnNldCwgbmFtZV9sZW47CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiB2YjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50IHJlZmNvdW50OworCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpwID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoID0gTlVMTDsKIAotCWlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSAwKQotCQlyZXR1cm4gMDsKKwlpZiAoIXhpcy0+bm90X2ZvdW5kKSB7CisJCXhlID0geGlzLT5oZXJlOworCQluYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CisJCW5hbWVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOworCQliYXNlID0geGlzLT5iYXNlOworCQl2Yi52Yl9iaCA9IHhpcy0+aW5vZGVfYmg7CisJCXZiLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpOworCX0gZWxzZSB7CisJCWludCBpLCBibG9ja19vZmYgPSAwOworCQl4YiA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKil4YnMtPnhhdHRyX2JoLT5iX2RhdGE7CisJCXhlID0geGJzLT5oZXJlOworCQluYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CisJCW5hbWVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOworCQlpID0geGJzLT5oZXJlIC0geGJzLT5oZWFkZXItPnhoX2VudHJpZXM7CiAKLQl3aGlsZSAobmFtZV9oYXNoID4gMCkgewotCQlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfcmVjKGlub2RlLCBuYW1lX2hhc2gsICZwX2Jsa25vLAotCQkJCQkgICZlX2Nwb3MsICZudW1fY2x1c3RlcnMsIGVsKTsKKwkJaWYgKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSB7CisJCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUtPmlfc2IsCisJCQkJCQkJYnVja2V0X3hoKHhicy0+YnVja2V0KSwKKwkJCQkJCQlpLCAmYmxvY2tfb2ZmLAorCQkJCQkJCSZuYW1lX29mZnNldCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJYmFzZSA9IGJ1Y2tldF9ibG9jayh4YnMtPmJ1Y2tldCwgYmxvY2tfb2ZmKTsKKwkJCXZiLnZiX2JoID0geGJzLT5idWNrZXQtPmJ1X2Joc1tibG9ja19vZmZdOworCQkJdmIudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3M7CisKKwkJCWlmIChvY2ZzMl9tZXRhX2VjYyhvc2IpKSB7CisJCQkJLypjcmVhdGUgcGFyYW1ldGVycyBmb3Igb2NmczJfcG9zdF9yZWZjb3VudC4gKi8KKwkJCQlidWNrZXQgPSB4YnMtPmJ1Y2tldDsKKwkJCQlyZWZjb3VudC5jcmVkaXRzID0gYnVja2V0LT5idV9ibG9ja3M7CisJCQkJcmVmY291bnQucGFyYSA9IGJ1Y2tldDsKKwkJCQlyZWZjb3VudC5mdW5jID0KKwkJCQkJb2NmczJfeGF0dHJfYnVja2V0X3Bvc3RfcmVmY291bnQ7CisJCQkJcCA9ICZyZWZjb3VudDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWJhc2UgPSB4YnMtPmJhc2U7CisJCQl2Yi52Yl9iaCA9IHhicy0+eGF0dHJfYmg7CisJCQl2Yi52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YjsKKwkJfQorCX0KKworCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCWdvdG8gb3V0OworCisJdmIudmJfeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKKwkJCQkoYmFzZSArIG5hbWVfb2Zmc2V0ICsgbmFtZV9sZW4pOworCisJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCAwLCAmcF9jbHVzdGVyLAorCQkJCSAgICAgICAmbnVtX2NsdXN0ZXJzLCAmdmIudmJfeHYtPnhyX2xpc3QsCisJCQkJICAgICAgICZleHRfZmxhZ3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFdlIGp1c3QgbmVlZCB0byBjaGVjayB0aGUgMXN0IGV4dGVudCByZWNvcmQsIHNpbmNlIHdlIGFsd2F5cworCSAqIENvVyB0aGUgd2hvbGUgeGF0dHIuIFNvIHRoZXJlIHNob3VsZG4ndCBiZSBhIHhhdHRyIHdpdGgKKwkgKiBzb21lIFJFRkNPVU5UIGV4dGVudCByZWNzIGFmdGVyIHRoZSAxc3Qgb25lLgorCSAqLworCWlmICghKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9SRUZDT1VOVEVEKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLCBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLAorCQkJCSAgICAgICAxLCByZWZfdHJlZSwgJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgZGVsZXRpbmcgdGhlIHhhdHRyIG9yIHRoZSBuZXcgc2l6ZSB3aWxsIGJlIHN0b3JlZCBpbnNpZGUsCisJICogY29vbCwgbGVhdmUgaXQgdGhlcmUsIHRoZSB4YXR0ciB0cnVuY2F0ZSBwcm9jZXNzIHdpbGwgcmVtb3ZlIHRoZW0KKwkgKiBmb3IgdXMoaXQgc3RpbGwgbmVlZHMgdGhlIHJlZmNvdW50IHRyZWUgbG9jayBhbmQgdGhlIG1ldGEsIGNyZWRpdHMpLgorCSAqIEFuZCB0aGUgd29yc2UgY2FzZSBpcyB0aGF0IGV2ZXJ5IGNsdXN0ZXIgdHJ1bmNhdGUgd2lsbCBzcGxpdCB0aGUKKwkgKiByZWZjb3VudCB0cmVlLCBhbmQgbWFrZSB0aGUgb3JpZ2luYWwgZXh0ZW50IGJlY29tZSAzLiBTbyB3ZSB3aWxsIG5lZWQKKwkgKiAyICogY2x1c3RlciBtb3JlIGV4dGVudCByZWNzIGF0IG1vc3QuCisJICovCisJaWYgKCF4aS0+dmFsdWUgfHwgeGktPnZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgeworCisJCXJldCA9IG9jZnMyX3JlZmNvdW50ZWRfeGF0dHJfZGVsZXRlX25lZWQoaW5vZGUsCisJCQkJCQkJICYoKnJlZl90cmVlKS0+cmZfY2ksCisJCQkJCQkJIHJlZl9yb290X2JoLCB2Yi52Yl94diwKKwkJCQkJCQkgbWV0YV9hZGQsIGNyZWRpdHMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9yZWZjb3VudF9jb3dfeGF0dHIoaW5vZGUsIGRpLCAmdmIsCisJCQkJICAgICAgICpyZWZfdHJlZSwgcmVmX3Jvb3RfYmgsIDAsCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KHZiLnZiX3h2LT54cl9jbHVzdGVycyksIHApOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCWJyZWxzZShyZWZfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFkZCB0aGUgUkVGQ09VTlRFRCBmbGFncyBmb3IgYWxsIHRoZSBleHRlbnQgcmVjIGluIG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QuCisgKiBUaGUgcGh5c2ljYWwgY2x1c3RlcnMgd2lsbCBiZSBhZGRlZCB0byByZWZjb3VudCB0cmVlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3ZhbHVlX2F0dGFjaF9yZWZjb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnZhbHVlX2V0LAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAorCQkJCXN0cnVjdCBvY2ZzMl9wb3N0X3JlZmNvdW50ICpyZWZjb3VudCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgY2x1c3RlcnMgPSBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpOworCXUzMiBjcG9zLCBwX2NsdXN0ZXIsIG51bV9jbHVzdGVyczsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnh2LT54cl9saXN0OworCXVuc2lnbmVkIGludCBleHRfZmxhZ3M7CisKKwljcG9zID0gMDsKKwl3aGlsZSAoY3BvcyA8IGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBfY2x1c3RlciwKKwkJCQkJICAgICAgICZudW1fY2x1c3RlcnMsIGVsLCAmZXh0X2ZsYWdzKTsKKworCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwkJaWYgKChleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkpCisJCQljb250aW51ZTsKKworCQlCVUdfT04oIXBfY2x1c3Rlcik7CisKKwkJcmV0ID0gb2NmczJfYWRkX3JlZmNvdW50X2ZsYWcoaW5vZGUsIHZhbHVlX2V0LAorCQkJCQkgICAgICByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkgICAgICBjcG9zIC0gbnVtX2NsdXN0ZXJzLAorCQkJCQkgICAgICBwX2NsdXN0ZXIsIG51bV9jbHVzdGVycywKKwkJCQkJICAgICAgZGVhbGxvYywgcmVmY291bnQpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7Ci0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQl9CisJfQogCi0JCXJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfYnVja2V0cyhpbm9kZSwgcF9ibGtubywgbnVtX2NsdXN0ZXJzLAotCQkJCQkJICBvY2ZzMl9kZWxldGVfeGF0dHJfaW5fYnVja2V0LAotCQkJCQkJICBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2l2ZW4gYSBub3JtYWwgb2NmczJfeGF0dHJfaGVhZGVyLCByZWZjb3VudCBhbGwgdGhlIGVudHJpZXMgd2hpY2gKKyAqIGhhdmUgdmFsdWUgc3RvcmVkIG91dHNpZGUuCisgKiBVc2VkIGZvciB4YXR0cnMgc3RvcmVkIGluIGlub2RlIGFuZCBvY2ZzMl94YXR0cl9ibG9jay4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfbm9ybWFsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaSwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCWludCBpLCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGhlYWRlci0+eGhfY291bnQpOyBpKyspIHsKKwkJeGUgPSAmaGVhZGVyLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQljb250aW51ZTsKKworCQl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKSgodm9pZCAqKWhlYWRlciArCisJCQlsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsKKwkJCU9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSk7CisKKwkJdmItPnZiX3h2ID0geHY7CisJCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LCBJTk9ERV9DQUNIRShpbm9kZSksIHZiKTsKKworCQlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV9hdHRhY2hfcmVmY291bnQoaW5vZGUsIHh2LCAmZXQsCisJCQkJCQkJcmVmX2NpLCByZWZfcm9vdF9iaCwKKwkJCQkJCQlkZWFsbG9jLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQorCX0KIAotCQlyZXQgPSBvY2ZzMl9ybV94YXR0cl9jbHVzdGVyKGlub2RlLCB4Yl9iaCwKLQkJCQkJICAgICBwX2Jsa25vLCBlX2Nwb3MsIG51bV9jbHVzdGVycyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9pbmxpbmVfYXR0YWNoX3JlZmNvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZmVfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKQorCQkJCShmZV9iaC0+Yl9kYXRhICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KKwkJCQlsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSkpOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7CisJCS52Yl9iaCA9IGZlX2JoLAorCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGksCisJfTsKKworCXJldHVybiBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfbm9ybWFsKGlub2RlLCAmdmIsIGhlYWRlciwKKwkJCQkJCSAgcmVmX2NpLCByZWZfcm9vdF9iaCwgZGVhbGxvYyk7Cit9CisKK3N0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3ZhbHVlX3JlZmNvdW50X3BhcmEgeworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoOworCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jOworfTsKKworc3RhdGljIGludCBvY2ZzMl9nZXRfeGF0dHJfdHJlZV92YWx1ZV9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCwKKwkJCQkJICAgaW50IG9mZnNldCwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKip4diwKKwkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpCit7CisJaW50IHJldCwgYmxvY2tfb2ZmLCBuYW1lX29mZnNldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGJ1Y2tldF94aChidWNrZXQpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSAmeGgtPnhoX2VudHJpZXNbb2Zmc2V0XTsKKwl2b2lkICpiYXNlOworCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKHNiLAorCQkJCQkJYnVja2V0X3hoKGJ1Y2tldCksCisJCQkJCQlvZmZzZXQsCisJCQkJCQkmYmxvY2tfb2ZmLAorCQkJCQkJJm5hbWVfb2Zmc2V0KTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJYmFzZSA9IGJ1Y2tldF9ibG9jayhidWNrZXQsIGJsb2NrX29mZik7CisKKwkqeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikoYmFzZSArIG5hbWVfb2Zmc2V0ICsKKwkJCSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbikpOworCisJaWYgKGJoKQorCQkqYmggPSBidWNrZXQtPmJ1X2Joc1tibG9ja19vZmZdOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgYSBnaXZlbiB4YXR0ciBidWNrZXQsIHJlZmNvdW50IGFsbCB0aGUgZW50cmllcyB3aGljaAorICogaGF2ZSB2YWx1ZSBzdG9yZWQgb3V0c2lkZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJCSAgICAgdm9pZCAqcGFyYSkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfdmFsdWVfcmVmY291bnRfcGFyYSAqcmVmID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV92YWx1ZV9yZWZjb3VudF9wYXJhICopcGFyYTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWJ1Y2tldC0+YnVfYmhzWzBdLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0geworCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3MsCisJfTsKKwlzdHJ1Y3Qgb2NmczJfcG9zdF9yZWZjb3VudCByZWZjb3VudCA9IHsKKwkJLmNyZWRpdHMgPSBidWNrZXQtPmJ1X2Jsb2NrcywKKwkJLnBhcmEgPSBidWNrZXQsCisJCS5mdW5jID0gb2NmczJfeGF0dHJfYnVja2V0X3Bvc3RfcmVmY291bnQsCisJfTsKKwlzdHJ1Y3Qgb2NmczJfcG9zdF9yZWZjb3VudCAqcCA9IE5VTEw7CisKKwkvKiBXZSBvbmx5IG5lZWQgcG9zdF9yZWZjb3VudCBpZiB3ZSBzdXBwb3J0IG1ldGFlY2MuICovCisJaWYgKG9jZnMyX21ldGFfZWNjKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpCisJCXAgPSAmcmVmY291bnQ7CisKKwltbG9nKDAsICJyZWZjb3VudCBidWNrZXQgJWxsdSwgY291bnQgPSAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0X2Jsa25vKGJ1Y2tldCksCisJICAgICBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBvY2ZzMl9nZXRfeGF0dHJfdHJlZV92YWx1ZV9yb290KGlub2RlLT5pX3NiLCBidWNrZXQsIGksCisJCQkJCQkgICAgICAmdmIudmJfeHYsICZ2Yi52Yl9iaCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGVfY3BvcyA9PSAwKQotCQkJYnJlYWs7CisJCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LAorCQkJCQkJICAgSU5PREVfQ0FDSEUoaW5vZGUpLCAmdmIpOwogCi0JCW5hbWVfaGFzaCA9IGVfY3BvcyAtIDE7CisJCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX2F0dGFjaF9yZWZjb3VudChpbm9kZSwgdmIudmJfeHYsCisJCQkJCQkJJmV0LCByZWYtPnJlZl9jaSwKKwkJCQkJCQlyZWYtPnJlZl9yb290X2JoLAorCQkJCQkJCXJlZi0+ZGVhbGxvYywgcCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmNvdW50X3hhdHRyX3RyZWVfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgICB1NjQgYmxrbm8sIHUzMiBjcG9zLCB1MzIgbGVuLCB2b2lkICpwYXJhKQoreworCXJldHVybiBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgIG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV9yZWZjb3VudCwKKwkJCQkJICAgcGFyYSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYmxvY2tfYXR0YWNoX3JlZmNvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9CisJCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCisJaWYgKCEobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmhlYWRlciA9ICZ4Yi0+eGJfYXR0cnMueGJfaGVhZGVyOworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0geworCQkJLnZiX2JoID0gYmxrX2JoLAorCQkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiLAorCQl9OworCisJCXJldCA9IG9jZnMyX3hhdHRyX2F0dGFjaF9yZWZjb3VudF9ub3JtYWwoaW5vZGUsICZ2YiwgaGVhZGVyLAorCQkJCQkJCSByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkJCSBkZWFsbG9jKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV92YWx1ZV9yZWZjb3VudF9wYXJhIHBhcmEgPSB7CisJCQkucmVmX2NpID0gcmVmX2NpLAorCQkJLnJlZl9yb290X2JoID0gcmVmX3Jvb3RfYmgsCisJCQkuZGVhbGxvYyA9IGRlYWxsb2MsCisJCX07CisKKwkJcmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhpbm9kZSwgYmxrX2JoLAorCQkJCQkJb2NmczJfcmVmY291bnRfeGF0dHJfdHJlZV9yZWMsCisJCQkJCQkmcGFyYSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IG9jZnMyX3hhdHRyX2F0dGFjaF9yZWZjb3VudF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqcmVmX2NpLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilmZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoID0gTlVMTDsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2lubGluZV9hdHRhY2hfcmVmY291bnQoaW5vZGUsIGZlX2JoLAorCQkJCQkJCSByZWZfY2ksIHJlZl9yb290X2JoLAorCQkJCQkJCSBkZWFsbG9jKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoIWRpLT5pX3hhdHRyX2xvYykKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX3hhdHRyX2Jsb2NrKGlub2RlLCBsZTY0X3RvX2NwdShkaS0+aV94YXR0cl9sb2MpLAorCQkJCSAgICAgJmJsa19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19hdHRhY2hfcmVmY291bnQoaW5vZGUsIGJsa19iaCwgcmVmX2NpLAorCQkJCQkJcmVmX3Jvb3RfYmgsIGRlYWxsb2MpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCWJyZWxzZShibGtfYmgpOworb3V0OgorCisJcmV0dXJuIHJldDsKK30KKwordHlwZWRlZiBpbnQgKHNob3VsZF94YXR0cl9yZWZsaW5rZWQpKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpOworLyoKKyAqIFN0b3JlIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGluIHhhdHRyIHJlZmxpbmsuCisgKiBvbGRfYmggYW5kIG5ld19iaCBhcmUgaW5vZGUgYmggZm9yIHRoZSBvbGQgYW5kIG5ldyBpbm9kZS4KKyAqLworc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgeworCXN0cnVjdCBpbm9kZSAqb2xkX2lub2RlOworCXN0cnVjdCBpbm9kZSAqbmV3X2lub2RlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoOworCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKnJlZl9jaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoOworCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jOworCXNob3VsZF94YXR0cl9yZWZsaW5rZWQgKnhhdHRyX3JlZmxpbmtlZDsKK307CisKKy8qCisgKiBHaXZlbiBhIHhhdHRyIGhlYWRlciBhbmQgeGUgb2Zmc2V0LAorICogcmV0dXJuIHRoZSBwcm9wZXIgeHYgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJoLgorICogeGF0dHIgaW4gaW5vZGUsIGJsb2NrIGFuZCB4YXR0ciB0cmVlIGhhdmUgZGlmZmVyZW50IGltcGxlbWVudGFpb25zLgorICovCit0eXBlZGVmIGludCAoZ2V0X3hhdHRyX3ZhbHVlX3Jvb3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkgICBpbnQgb2Zmc2V0LAorCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCSAgIHZvaWQgKnBhcmEpOworCisvKgorICogQ2FsY3VsYXRlIGFsbCB0aGUgeGF0dHIgdmFsdWUgcm9vdCBtZXRhZGF0YSBzdG9yZWQgaW4gdGhpcyB4YXR0ciBoZWFkZXIgYW5kCisgKiBjcmVkaXRzIHdlIG5lZWQgaWYgd2UgY3JlYXRlIHRoZW0gZnJvbSB0aGUgc2NyYXRjaC4KKyAqIFdlIHVzZSBnZXRfeGF0dHJfdmFsdWVfcm9vdCBzbyB0aGF0IGFsbCB0eXBlcyBvZiB4YXR0ciBjb250YWluZXIgY2FuIHVzZSBpdC4KKyAqLworc3RhdGljIGludCBvY2ZzMl92YWx1ZV9tZXRhc19pbl94YXR0cl9oZWFkZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLAorCQkJCQkgICAgIGludCAqbWV0YXMsIGludCAqY3JlZGl0cywKKwkJCQkJICAgICBpbnQgKm51bV9yZWNzLAorCQkJCQkgICAgIGdldF94YXR0cl92YWx1ZV9yb290ICpmdW5jLAorCQkJCQkgICAgIHZvaWQgKnBhcmEpCit7CisJaW50IGksIHJldCA9IDA7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2OworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZnVuYyhzYiwgYmgsIHhoLCBpLCAmeHYsIE5VTEwsIHBhcmEpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCSptZXRhcyArPSBsZTE2X3RvX2NwdSh4di0+eHJfbGlzdC5sX3RyZWVfZGVwdGgpICoKKwkJCSAgbGUxNl90b19jcHUoeHYtPnhyX2xpc3QubF9uZXh0X2ZyZWVfcmVjKTsKKworCQkqY3JlZGl0cyArPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKHNiLAorCQkJCQkJJmRlZl94di54di54cl9saXN0LAorCQkJCQkJbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKSk7CisKKwkJLyoKKwkJICogSWYgdGhlIHZhbHVlIGlzIGEgdHJlZSB3aXRoIGRlcHRoID4gMSwgV2UgZG9uJ3QgZ28gZGVlcAorCQkgKiB0byB0aGUgZXh0ZW50IGJsb2NrLCBzbyBqdXN0IGNhbGN1bGF0ZSBhIG1heGltdW0gcmVjb3JkIG51bS4KKwkJICovCisJCWlmICgheHYtPnhyX2xpc3QubF90cmVlX2RlcHRoKQorCQkJKm51bV9yZWNzICs9IHh2LT54cl9saXN0LmxfbmV4dF9mcmVlX3JlYzsKKwkJZWxzZQorCQkJKm51bV9yZWNzICs9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhzYiwKKwkJCQkJCQkgICAgICBYQVRUUl9TSVpFX01BWCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogVXNlZCBieSB4YXR0ciBpbm9kZSBhbmQgYmxvY2sgdG8gcmV0dXJuIHRoZSByaWdodCB4diBhbmQgYnVmZmVyX2hlYWQuICovCitzdGF0aWMgaW50IG9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkgICAgICBpbnQgb2Zmc2V0LAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCSAgICAgIHZvaWQgKnBhcmEpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSA9ICZ4aC0+eGhfZW50cmllc1tvZmZzZXRdOworCisJKnh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopKCh2b2lkICopeGggKworCQlsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsKKwkJT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pKTsKKworCWlmIChyZXRfYmgpCisJCSpyZXRfYmggPSBiaDsKKworCXJldHVybiAwOworfQorCisvKgorICogTG9jayB0aGUgbWV0YV9hYyBhbmQgY2FjdWxhdGUgaG93IG11Y2ggY3JlZGl0cyB3ZSBuZWVkIGZvciByZWZsaW5rIHhhdHRycy4KKyAqIEl0IGlzIG9ubHkgdXNlZCBmb3IgaW5saW5lIHhhdHRyIGFuZCB4YXR0ciBibG9jay4KKyAqLworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmgsCisJCQkJCWludCAqY3JlZGl0cywKKwkJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiptZXRhX2FjKQoreworCWludCByZXQsIG1ldGFfYWRkID0gMCwgbnVtX3JlY3MgPSAwOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9yb290X2JoLT5iX2RhdGE7CisKKwkqY3JlZGl0cyA9IDA7CisKKwlyZXQgPSBvY2ZzMl92YWx1ZV9tZXRhc19pbl94YXR0cl9oZWFkZXIob3NiLT5zYiwgTlVMTCwgeGgsCisJCQkJCQkmbWV0YV9hZGQsIGNyZWRpdHMsICZudW1fcmVjcywKKwkJCQkJCW9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290LAorCQkJCQkJTlVMTCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgbmVlZCB0byBhZGQvbW9kaWZ5IG51bV9yZWNzIGluIHJlZmNvdW50IHRyZWUsIHNvIGp1c3QgY2FsY3VsYXRlCisJICogYW4gYXBwcm94aW1hdGUgbnVtYmVyIHdlIG5lZWQgZm9yIHJlZmNvdW50IHRyZWUgY2hhbmdlLgorCSAqIFNvbWV0aW1lcyB3ZSBuZWVkIHRvIHNwbGl0IHRoZSB0cmVlLCBhbmQgYWZ0ZXIgc3BsaXQsICBoYWxmIHJlY3MKKwkgKiB3aWxsIGJlIG1vdmVkIHRvIHRoZSBuZXcgYmxvY2ssIGFuZCBhIG5ldyBibG9jayBjYW4gb25seSBwcm92aWRlCisJICogaGFsZiBudW1iZXIgb2YgcmVjcy4gU28gd2UgbXVsdGlwbGUgbmV3IGJsb2NrcyBieSAyLgorCSAqLworCW51bV9yZWNzID0gbnVtX3JlY3MgLyBvY2ZzMl9yZWZjb3VudF9yZWNzX3Blcl9yYihvc2ItPnNiKSAqIDI7CisJbWV0YV9hZGQgKz0gbnVtX3JlY3M7CisJKmNyZWRpdHMgKz0gbnVtX3JlY3MgKyBudW1fcmVjcyAqIE9DRlMyX0VYUEFORF9SRUZDT1VOVF9UUkVFX0NSRURJVFM7CisJaWYgKGxlMzJfdG9fY3B1KHJiLT5yZl9mbGFncykgJiBPQ0ZTMl9SRUZDT1VOVF9UUkVFX0ZMKQorCQkqY3JlZGl0cyArPSBsZTE2X3RvX2NwdShyYi0+cmZfbGlzdC5sX3RyZWVfZGVwdGgpICoKKwkJCSAgICBsZTE2X3RvX2NwdShyYi0+cmZfbGlzdC5sX25leHRfZnJlZV9yZWMpICsgMTsKKwllbHNlCisJCSpjcmVkaXRzICs9IDE7CisKKwlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Mob3NiLCBtZXRhX2FkZCwgbWV0YV9hYyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdpdmVuIGEgeGF0dHIgaGVhZGVyLCByZWZsaW5rIGFsbCB0aGUgeGF0dHJzIGluIHRoaXMgY29udGFpbmVyLgorICogSXQgY2FuIGJlIHVzZWQgZm9yIGlub2RlLCBibG9jayBhbmQgYnVja2V0LgorICoKKyAqIE5PVEU6CisgKiBCZWZvcmUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uLCB0aGUgY2FsbGVyIGhhcyBtZW1jcHkgdGhlIHhhdHRyIGluCisgKiBvbGRfeGggdG8gdGhlIG5ld194aC4KKyAqCisgKiBJZiBhcmdzLnhhdHRyX3JlZmxpbmtlZCBpcyBzZXQsIGNhbGwgaXQgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHhlIHNob3VsZAorICogYmUgcmVmbGlua2VkIG9yIG5vdC4gSWYgbm90LCByZW1vdmUgaXQgZnJvbSB0aGUgbmV3IHhhdHRyIGhlYWRlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKm5ld194aCwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YiwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQkgICAgICBnZXRfeGF0dHJfdmFsdWVfcm9vdCAqZnVuYywKKwkJCQkgICAgICB2b2lkICpwYXJhKQoreworCWludCByZXQgPSAwLCBpLCBqOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhcmdzLT5vbGRfaW5vZGUtPmlfc2I7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp2YWx1ZV9iaDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlLCAqbGFzdDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYsICpuZXdfeHY7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGRhdGFfZXQ7CisJdTMyIGNsdXN0ZXJzLCBjcG9zLCBwX2NsdXN0ZXIsIG51bV9jbHVzdGVyczsKKwl1bnNpZ25lZCBpbnQgZXh0X2ZsYWdzID0gMDsKKworCW1sb2coMCwgInJlZmxpbmsgeGF0dHIgaW4gY29udGFpbmVyICVsbHUsIGNvdW50ID0gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9sZF9iaC0+Yl9ibG9ja25yLCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpKTsKKworCWxhc3QgPSAmbmV3X3hoLT54aF9lbnRyaWVzW2xlMTZfdG9fY3B1KG5ld194aC0+eGhfY291bnQpXTsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7IGkrKywgaisrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCisJCWlmIChhcmdzLT54YXR0cl9yZWZsaW5rZWQgJiYgIWFyZ3MtPnhhdHRyX3JlZmxpbmtlZCh4ZSkpIHsKKwkJCXhlID0gJm5ld194aC0+eGhfZW50cmllc1tqXTsKKworCQkJbGUxNl9hZGRfY3B1KCZuZXdfeGgtPnhoX2NvdW50LCAtMSk7CisJCQlpZiAobmV3X3hoLT54aF9jb3VudCkgeworCQkJCW1lbW1vdmUoeGUsIHhlICsgMSwKKwkJCQkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4ZSk7CisJCQkJbWVtc2V0KGxhc3QsIDAsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHdhbnQgaiB0byBpbmNyZWFzZSBpbiB0aGUgbmV4dCByb3VuZCBzaW5jZQorCQkJICogaXQgaXMgYWxyZWFkeSBtb3ZlZCBhaGVhZC4KKwkJCSAqLworCQkJai0tOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZnVuYyhzYiwgb2xkX2JoLCB4aCwgaSwgJnh2LCBOVUxMLCBwYXJhKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBmdW5jKHNiLCBuZXdfYmgsIG5ld194aCwgaiwgJm5ld194diwgJnZhbHVlX2JoLCBwYXJhKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBGb3IgdGhlIHhhdHRyIHdoaWNoIGhhcyBsX3RyZWVfZGVwdGggPSAwLCBhbGwgdGhlIGV4dGVudAorCQkgKiByZWNzIGhhdmUgYWxyZWFkeSBiZSBjb3BpZWQgdG8gdGhlIG5ldyB4aCB3aXRoIHRoZQorCQkgKiBwcm9wcmlhdGUgT0NGUzJfRVhUX1JFRkNPVU5URUQgZmxhZyB3ZSBqdXN0IG5lZWQgdG8KKwkJICogaW5jcmVhc2UgdGhlIHJlZm91bnQgY291bnQgaW50IHRoZSByZWZjb3VudCB0cmVlLgorCQkgKgorCQkgKiBGb3IgdGhlIHhhdHRyIHdoaWNoIGhhcyBsX3RyZWVfZGVwdGggPiAwLCB3ZSBuZWVkCisJCSAqIHRvIGluaXRpYWxpemUgaXQgdG8gdGhlIGVtcHR5IGRlZmF1bHQgdmFsdWUgcm9vdCwKKwkJICogYW5kIHRoZW4gaW5zZXJ0IHRoZSBleHRlbnRzIG9uZSBieSBvbmUuCisJCSAqLworCQlpZiAoeHYtPnhyX2xpc3QubF90cmVlX2RlcHRoKSB7CisJCQltZW1jcHkobmV3X3h2LCAmZGVmX3h2LCBzaXplb2YoZGVmX3h2KSk7CisJCQl2Yi0+dmJfeHYgPSBuZXdfeHY7CisJCQl2Yi0+dmJfYmggPSB2YWx1ZV9iaDsKKwkJCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmRhdGFfZXQsCisJCQkJCUlOT0RFX0NBQ0hFKGFyZ3MtPm5ld19pbm9kZSksIHZiKTsKKwkJfQorCisJCWNsdXN0ZXJzID0gbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKTsKKwkJY3BvcyA9IDA7CisJCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhhcmdzLT5vbGRfaW5vZGUsCisJCQkJCQkgICAgICAgY3BvcywKKwkJCQkJCSAgICAgICAmcF9jbHVzdGVyLAorCQkJCQkJICAgICAgICZudW1fY2x1c3RlcnMsCisJCQkJCQkgICAgICAgJnh2LT54cl9saXN0LAorCQkJCQkJICAgICAgICZleHRfZmxhZ3MpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJQlVHX09OKCFwX2NsdXN0ZXIpOworCisJCQlpZiAoeHYtPnhyX2xpc3QubF90cmVlX2RlcHRoKSB7CisJCQkJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChoYW5kbGUsCisJCQkJCQkmZGF0YV9ldCwgY3BvcywKKwkJCQkJCW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcygKKwkJCQkJCQlhcmdzLT5vbGRfaW5vZGUtPmlfc2IsCisJCQkJCQkJcF9jbHVzdGVyKSwKKwkJCQkJCW51bV9jbHVzdGVycywgZXh0X2ZsYWdzLAorCQkJCQkJbWV0YV9hYyk7CisJCQkJaWYgKHJldCkgeworCQkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKworCQkJcmV0ID0gb2NmczJfaW5jcmVhc2VfcmVmY291bnQoaGFuZGxlLCBhcmdzLT5yZWZfY2ksCisJCQkJCQkgICAgICBhcmdzLT5yZWZfcm9vdF9iaCwKKwkJCQkJCSAgICAgIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLAorCQkJCQkJICAgICAgbWV0YV9hYywgYXJncy0+ZGVhbGxvYyk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwkJfQogCX0KIAogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MpCit7CisJaW50IHJldCA9IDAsIGNyZWRpdHMgPSAwOworCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihhcmdzLT5vbGRfaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilhcmdzLT5vbGRfYmgtPmJfZGF0YTsKKwlpbnQgaW5saW5lX3NpemUgPSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSk7CisJaW50IGhlYWRlcl9vZmYgPSBvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSAtIGlubGluZV9zaXplOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJCQkJKGFyZ3MtPm9sZF9iaC0+Yl9kYXRhICsgaGVhZGVyX29mZik7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqbmV3X3hoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJCQkJKGFyZ3MtPm5ld19iaC0+Yl9kYXRhICsgaGVhZGVyX29mZik7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpuZXdfb2k7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqbmV3X2RpOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmIgPSB7CisJCS52Yl9iaCA9IGFyZ3MtPm5ld19iaCwKKwkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpLAorCX07CisKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLT5yZWZfcm9vdF9iaCwKKwkJCQkJCSAgJmNyZWRpdHMsICZtZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoYXJncy0+bmV3X2lub2RlKSwKKwkJCQkgICAgICBhcmdzLT5uZXdfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW1lbWNweShhcmdzLT5uZXdfYmgtPmJfZGF0YSArIGhlYWRlcl9vZmYsCisJICAgICAgIGFyZ3MtPm9sZF9iaC0+Yl9kYXRhICsgaGVhZGVyX29mZiwgaW5saW5lX3NpemUpOworCisJbmV3X2RpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilhcmdzLT5uZXdfYmgtPmJfZGF0YTsKKwluZXdfZGktPmlfeGF0dHJfaW5saW5lX3NpemUgPSBjcHVfdG9fbGUxNihpbmxpbmVfc2l6ZSk7CisKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtPm9sZF9iaCwgeGgsCisJCQkJCSBhcmdzLT5uZXdfYmgsIG5ld194aCwgJnZiLCBtZXRhX2FjLAorCQkJCQkgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3QsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X29pID0gT0NGUzJfSShhcmdzLT5uZXdfaW5vZGUpOworCXNwaW5fbG9jaygmbmV3X29pLT5pcF9sb2NrKTsKKwluZXdfb2ktPmlwX2R5bl9mZWF0dXJlcyB8PSBPQ0ZTMl9IQVNfWEFUVFJfRkwgfCBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkw7CisJbmV3X2RpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KG5ld19vaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlzcGluX3VubG9jaygmbmV3X29pLT5pcF9sb2NrKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBhcmdzLT5uZXdfYmgpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dDoKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfYmgsCisJCQkJCSAgaW50IGluZGV4ZWQpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCisJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgMSwgJm1ldGFfYWMpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIE9DRlMyX1hBVFRSX0JMT0NLX0NSRUFURV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgImNyZWF0ZSBuZXcgeGF0dHIgYmxvY2sgZm9yIGlub2RlICVsbHUsIGluZGV4ID0gJWRcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZlX2JoLT5iX2Jsb2NrbnIsIGluZGV4ZWQpOworCXJldCA9IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhoYW5kbGUsIGlub2RlLCBmZV9iaCwKKwkJCQkgICAgICAgbWV0YV9hYywgcmV0X2JoLCBpbmRleGVkKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0OgorCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYmxvY2soc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2Jsa19iaCkKK3sKKwlpbnQgcmV0ID0gMCwgY3JlZGl0cyA9IDA7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqbmV3X29pID0gT0NGUzJfSShhcmdzLT5uZXdfaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKm5ld19kaTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGFyZ3MtPm5ld19pbm9kZS0+aV9zYik7CisJaW50IGhlYWRlcl9vZmYgPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssIHhiX2F0dHJzLnhiX2hlYWRlcik7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopYmxrX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSAmeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKm5ld194YiA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopbmV3X2Jsa19iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKm5ld194aCA9ICZuZXdfeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYzsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0geworCQkudmJfYmggPSBuZXdfYmxrX2JoLAorCQkudmJfYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIsCisJfTsKKworCXJldCA9IG9jZnMyX3JlZmxpbmtfbG9ja194YXR0cl9hbGxvY2F0b3JzKG9zYiwgeGgsIGFyZ3MtPnJlZl9yb290X2JoLAorCQkJCQkJICAmY3JlZGl0cywgJm1ldGFfYWMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE9uZSBtb3JlIGNyZWRpdHMgaW4gY2FzZSB3ZSBuZWVkIHRvIGFkZCB4YXR0ciBmbGFncyBpbiBuZXcgaW5vZGUuICovCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzICsgMSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShuZXdfb2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkpIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLAorCQkJCQkgICAgICBJTk9ERV9DQUNIRShhcmdzLT5uZXdfaW5vZGUpLAorCQkJCQkgICAgICBhcmdzLT5uZXdfYmgsCisJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfeGIoaGFuZGxlLCBJTk9ERV9DQUNIRShhcmdzLT5uZXdfaW5vZGUpLAorCQkJCSAgICAgIG5ld19ibGtfYmgsIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW1lbWNweShuZXdfYmxrX2JoLT5iX2RhdGEgKyBoZWFkZXJfb2ZmLCBibGtfYmgtPmJfZGF0YSArIGhlYWRlcl9vZmYsCisJICAgICAgIG9zYi0+c2ItPnNfYmxvY2tzaXplIC0gaGVhZGVyX29mZik7CisKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGJsa19iaCwgeGgsCisJCQkJCSBuZXdfYmxrX2JoLCBuZXdfeGgsICZ2YiwgbWV0YV9hYywKKwkJCQkJIG9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290LCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfYmxrX2JoKTsKKworCWlmICghKG5ld19vaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSkgeworCQluZXdfZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWFyZ3MtPm5ld19iaC0+Yl9kYXRhOworCQlzcGluX2xvY2soJm5ld19vaS0+aXBfbG9jayk7CisJCW5ld19vaS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0hBU19YQVRUUl9GTDsKKwkJbmV3X2RpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KG5ld19vaS0+aXBfZHluX2ZlYXR1cmVzKTsKKwkJc3Bpbl91bmxvY2soJm5ld19vaS0+aXBfbG9jayk7CisKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGFyZ3MtPm5ld19iaCk7CisJfQorCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dDoKKwlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqcmVmbGluazsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9ibGtfYmg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmxrX2JoOworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKm9sZF9idWNrZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqbmV3X2J1Y2tldDsKK307CisKKy8qCisgKiBOT1RFOgorICogV2UgaGF2ZSB0byBoYW5kbGUgdGhlIGNhc2UgdGhhdCBib3RoIG9sZCBidWNrZXQgYW5kIG5ldyBidWNrZXQKKyAqIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgcmlnaHQgcmV0X2JoLgorICogU28gVGhlIGNhbGxlciBtdXN0IGdpdmUgdXMgdGhlIHJpZ2h0IGJoLgorICovCitzdGF0aWMgaW50IG9jZnMyX2dldF9yZWZsaW5rX3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsCisJCQkJCWludCBvZmZzZXQsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICoqeHYsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9iaCwKKwkJCQkJdm9pZCAqcGFyYSkKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPQorCQkJKHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqKXBhcmE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0OworCisJaWYgKGJoID09IGFyZ3MtPm9sZF9idWNrZXQtPmJ1X2Joc1swXSkKKwkJYnVja2V0ID0gYXJncy0+b2xkX2J1Y2tldDsKKwllbHNlCisJCWJ1Y2tldCA9IGFyZ3MtPm5ld19idWNrZXQ7CisKKwlyZXR1cm4gb2NmczJfZ2V0X3hhdHRyX3RyZWVfdmFsdWVfcm9vdChzYiwgYnVja2V0LCBvZmZzZXQsCisJCQkJCSAgICAgICB4diwgcmV0X2JoKTsKK30KKworc3RydWN0IG9jZnMyX3ZhbHVlX3RyZWVfbWV0YXMgeworCWludCBudW1fbWV0YXM7CisJaW50IGNyZWRpdHM7CisJaW50IG51bV9yZWNzOworfTsKKworc3RhdGljIGludCBvY2ZzMl92YWx1ZV90cmVlX21ldGFzX2luX2J1Y2tldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkJaW50IG9mZnNldCwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKip4diwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2JoLAorCQkJCQl2b2lkICpwYXJhKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCA9CisJCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKilwYXJhOworCisJcmV0dXJuIG9jZnMyX2dldF94YXR0cl90cmVlX3ZhbHVlX3Jvb3Qoc2IsIGJ1Y2tldCwgb2Zmc2V0LAorCQkJCQkgICAgICAgeHYsIHJldF9iaCk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY2FsY192YWx1ZV90cmVlX21ldGFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAorCQkJCSAgICAgIHZvaWQgKnBhcmEpCit7CisJc3RydWN0IG9jZnMyX3ZhbHVlX3RyZWVfbWV0YXMgKm1ldGFzID0KKwkJCShzdHJ1Y3Qgb2NmczJfdmFsdWVfdHJlZV9tZXRhcyAqKXBhcmE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilidWNrZXQtPmJ1X2Joc1swXS0+Yl9kYXRhOworCisJLyogQWRkIHRoZSBjcmVkaXRzIGZvciB0aGlzIGJ1Y2tldCBmaXJzdC4gKi8KKwltZXRhcy0+Y3JlZGl0cyArPSBidWNrZXQtPmJ1X2Jsb2NrczsKKwlyZXR1cm4gb2NmczJfdmFsdWVfbWV0YXNfaW5feGF0dHJfaGVhZGVyKGlub2RlLT5pX3NiLCBidWNrZXQtPmJ1X2Joc1swXSwKKwkJCQkJeGgsICZtZXRhcy0+bnVtX21ldGFzLAorCQkJCQkmbWV0YXMtPmNyZWRpdHMsICZtZXRhcy0+bnVtX3JlY3MsCisJCQkJCW9jZnMyX3ZhbHVlX3RyZWVfbWV0YXNfaW5fYnVja2V0LAorCQkJCQlidWNrZXQpOworfQorCisvKgorICogR2l2ZW4gYSB4YXR0ciBleHRlbnQgcmVjIHN0YXJ0aW5nIGZyb20gYmxrbm8gYW5kIGhhdmluZyBsZW4gY2x1c3RlcnMsCisgKiBpdGVyYXRlIGFsbCB0aGUgYnVja2V0cyBjYWxjdWxhdGUgaG93IG11Y2ggbWV0YWRhdGEgd2UgbmVlZCBmb3IgcmVmbGlua2luZworICogYWxsIHRoZSBvY2ZzMl94YXR0cl92YWx1ZV9yb290IGFuZCBsb2NrIHRoZSBhbGxvY2F0b3JzIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycygKKwkJCQlzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICp4dF9ldCwKKwkJCQl1NjQgYmxrbm8sIHUzMiBsZW4sIGludCAqY3JlZGl0cywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKm1ldGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKipkYXRhX2FjKQoreworCWludCByZXQsIG51bV9mcmVlX2V4dGVudHM7CisJc3RydWN0IG9jZnMyX3ZhbHVlX3RyZWVfbWV0YXMgbWV0YXM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihhcmdzLT5yZWZsaW5rLT5vbGRfaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmI7CisKKwltZW1zZXQoJm1ldGFzLCAwLCBzaXplb2YobWV0YXMpKTsKKworCXJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfYnVja2V0cyhhcmdzLT5yZWZsaW5rLT5vbGRfaW5vZGUsIGJsa25vLCBsZW4sCisJCQkJCSAgb2NmczJfY2FsY192YWx1ZV90cmVlX21ldGFzLCAmbWV0YXMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkqY3JlZGl0cyA9IG1ldGFzLmNyZWRpdHM7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB3ZSBuZWVkIGZvciByZWZjb3VudCB0cmVlIGNoYW5nZS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gYWRkL21vZGlmeSBudW1fcmVjcyBpbiByZWZjb3VudCB0cmVlLCBzbyBqdXN0IGNhbGN1bGF0ZQorCSAqIGFuIGFwcHJveGltYXRlIG51bWJlciB3ZSBuZWVkIGZvciByZWZjb3VudCB0cmVlIGNoYW5nZS4KKwkgKiBTb21ldGltZXMgd2UgbmVlZCB0byBzcGxpdCB0aGUgdHJlZSwgYW5kIGFmdGVyIHNwbGl0LCAgaGFsZiByZWNzCisJICogd2lsbCBiZSBtb3ZlZCB0byB0aGUgbmV3IGJsb2NrLCBhbmQgYSBuZXcgYmxvY2sgY2FuIG9ubHkgcHJvdmlkZQorCSAqIGhhbGYgbnVtYmVyIG9mIHJlY3MuIFNvIHdlIG11bHRpcGxlIG5ldyBibG9ja3MgYnkgMi4KKwkgKiBJbiB0aGUgZW5kLCB3ZSBoYXZlIHRvIGFkZCBjcmVkaXRzIGZvciBtb2RpZnlpbmcgdGhlIGFscmVhZHkKKwkgKiBleGlzdGVkIHJlZmNvdW50IGJsb2NrLgorCSAqLworCXJiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKWFyZ3MtPnJlZmxpbmstPnJlZl9yb290X2JoLT5iX2RhdGE7CisJbWV0YXMubnVtX3JlY3MgPQorCQkobWV0YXMubnVtX3JlY3MgKyBvY2ZzMl9yZWZjb3VudF9yZWNzX3Blcl9yYihvc2ItPnNiKSAtIDEpIC8KKwkJIG9jZnMyX3JlZmNvdW50X3JlY3NfcGVyX3JiKG9zYi0+c2IpICogMjsKKwltZXRhcy5udW1fbWV0YXMgKz0gbWV0YXMubnVtX3JlY3M7CisJKmNyZWRpdHMgKz0gbWV0YXMubnVtX3JlY3MgKworCQkgICAgbWV0YXMubnVtX3JlY3MgKiBPQ0ZTMl9FWFBBTkRfUkVGQ09VTlRfVFJFRV9DUkVESVRTOworCWlmIChsZTMyX3RvX2NwdShyYi0+cmZfZmxhZ3MpICYgT0NGUzJfUkVGQ09VTlRfVFJFRV9GTCkKKwkJKmNyZWRpdHMgKz0gbGUxNl90b19jcHUocmItPnJmX2xpc3QubF90cmVlX2RlcHRoKSAqCisJCQkgICAgbGUxNl90b19jcHUocmItPnJmX2xpc3QubF9uZXh0X2ZyZWVfcmVjKSArIDE7CisJZWxzZQorCQkqY3JlZGl0cyArPSAxOworCisJLyogY291bnQgaW4gdGhlIHhhdHRyIHRyZWUgY2hhbmdlLiAqLworCW51bV9mcmVlX2V4dGVudHMgPSBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKG9zYiwgeHRfZXQpOworCWlmIChudW1fZnJlZV9leHRlbnRzIDwgMCkgeworCQlyZXQgPSBudW1fZnJlZV9leHRlbnRzOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChudW1fZnJlZV9leHRlbnRzIDwgbGVuKQorCQltZXRhcy5udW1fbWV0YXMgKz0gb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKHh0X2V0LT5ldF9yb290X2VsKTsKKworCSpjcmVkaXRzICs9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwKKwkJCQkJICAgICAgeHRfZXQtPmV0X3Jvb3RfZWwsIGxlbik7CisKKwlpZiAobWV0YXMubnVtX21ldGFzKSB7CisJCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIG1ldGFzLm51bV9tZXRhcywKKwkJCQkJCQltZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAobGVuKSB7CisJCXJldCA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCBsZW4sIGRhdGFfYWMpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KK291dDoKKwlpZiAocmV0KSB7CisJCWlmICgqbWV0YV9hYykgeworCQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KCptZXRhX2FjKTsKKwkJCW1ldGFfYWMgPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQl1NjQgYmxrbm8sIHU2NCBuZXdfYmxrbm8sIHUzMiBjbHVzdGVycywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQlzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MpCit7CisJaW50IGksIGosIHJldCA9IDA7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGFyZ3MtPnJlZmxpbmstPm9sZF9pbm9kZS0+aV9zYjsKKwl1MzIgYnBjID0gb2NmczJfeGF0dHJfYnVja2V0c19wZXJfY2x1c3RlcihPQ0ZTMl9TQihzYikpOworCXUzMiBudW1fYnVja2V0cyA9IGNsdXN0ZXJzICogYnBjOworCWludCBicGIgPSBhcmdzLT5vbGRfYnVja2V0LT5idV9ibG9ja3M7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiB2YiA9IHsKKwkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzLAorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKywgYmxrbm8gKz0gYnBiLCBuZXdfYmxrbm8gKz0gYnBiKSB7CisJCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KGFyZ3MtPm9sZF9idWNrZXQsIGJsa25vKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9pbml0X3hhdHRyX2J1Y2tldChhcmdzLT5uZXdfYnVja2V0LCBuZXdfYmxrbm8pOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFRoZSByZWFsIGJ1Y2tldCBudW0gaW4gdGhpcyBzZXJpZXMgb2YgYmxvY2tzIGlzIHN0b3JlZAorCQkgKiBpbiB0aGUgMXN0IGJ1Y2tldC4KKwkJICovCisJCWlmIChpID09IDApCisJCQludW1fYnVja2V0cyA9IGxlMTZfdG9fY3B1KAorCQkJCWJ1Y2tldF94aChhcmdzLT5vbGRfYnVja2V0KS0+eGhfbnVtX2J1Y2tldHMpOworCisJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsCisJCQkJCQlhcmdzLT5uZXdfYnVja2V0LAorCQkJCQkJT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgYnBiOyBqKyspCisJCQltZW1jcHkoYnVja2V0X2Jsb2NrKGFyZ3MtPm5ld19idWNrZXQsIGopLAorCQkJICAgICAgIGJ1Y2tldF9ibG9jayhhcmdzLT5vbGRfYnVja2V0LCBqKSwKKwkJCSAgICAgICBzYi0+c19ibG9ja3NpemUpOworCisJCW9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYXJncy0+bmV3X2J1Y2tldCk7CisKKwkJcmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLT5yZWZsaW5rLAorCQkJCQlhcmdzLT5vbGRfYnVja2V0LT5idV9iaHNbMF0sCisJCQkJCWJ1Y2tldF94aChhcmdzLT5vbGRfYnVja2V0KSwKKwkJCQkJYXJncy0+bmV3X2J1Y2tldC0+YnVfYmhzWzBdLAorCQkJCQlidWNrZXRfeGgoYXJncy0+bmV3X2J1Y2tldCksCisJCQkJCSZ2YiwgbWV0YV9hYywKKwkJCQkJb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdCwKKwkJCQkJYXJncyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogUmUtYWNjZXNzIGFuZCBkaXJ0eSB0aGUgYnVja2V0IHRvIGNhbGN1bGF0ZSBtZXRhZWNjLgorCQkgKiBCZWNhdXNlIHdlIG1heSBleHRlbmQgdGhlIHRyYW5zYWN0aW9uIGluIHJlZmxpbmtfeGF0dHJfaGVhZGVyCisJCSAqIHdoaWNoIHdpbGwgbGV0IHRoZSBhbHJlYWR5IGFjY2Vzc2VkIGJsb2NrIGdvbmUuCisJCSAqLworCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9hY2Nlc3MoaGFuZGxlLAorCQkJCQkJYXJncy0+bmV3X2J1Y2tldCwKKwkJCQkJCU9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9kaXJ0eShoYW5kbGUsIGFyZ3MtPm5ld19idWNrZXQpOworCQlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoYXJncy0+b2xkX2J1Y2tldCk7CisJCW9jZnMyX3hhdHRyX2J1Y2tldF9yZWxzZShhcmdzLT5uZXdfYnVja2V0KTsKKwl9CisKKwlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoYXJncy0+b2xkX2J1Y2tldCk7CisJb2NmczJfeGF0dHJfYnVja2V0X3JlbHNlKGFyZ3MtPm5ld19idWNrZXQpOworCXJldHVybiByZXQ7Cit9CisvKgorICogQ3JlYXRlIHRoZSBzYW1lIHhhdHRyIGV4dGVudCByZWNvcmQgaW4gdGhlIG5ldyBpbm9kZSdzIHhhdHRyIHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9yZWMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgdTY0IGJsa25vLAorCQkJCSAgIHUzMiBjcG9zLAorCQkJCSAgIHUzMiBsZW4sCisJCQkJICAgdm9pZCAqcGFyYSkKK3sKKwlpbnQgcmV0LCBjcmVkaXRzID0gMDsKKwl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnM7CisJdTY0IG5ld19ibGtubzsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyA9CisJCQkoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCW9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZSgmZXQsCisJCQkJCSAgSU5PREVfQ0FDSEUoYXJncy0+cmVmbGluay0+bmV3X2lub2RlKSwKKwkJCQkJICBhcmdzLT5uZXdfYmxrX2JoKTsKKworCXJldCA9IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhhcmdzLCAmZXQsIGJsa25vLAorCQkJCQkJICAgICAgbGVuLCAmY3JlZGl0cywKKwkJCQkJCSAgICAgICZtZXRhX2FjLCAmZGF0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9jbHVzdGVycyhvc2IsIGhhbmRsZSwgZGF0YV9hYywKKwkJCQkgICBsZW4sICZwX2NsdXN0ZXIsICZudW1fY2x1c3RlcnMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbmV3X2Jsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9zYi0+c2IsIHBfY2x1c3Rlcik7CisKKwltbG9nKDAsICJyZWZsaW5rIHhhdHRyIGJ1Y2tldHMgJWxsdSB0byAlbGx1LCBsZW4gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vLCAodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubywgbGVuKTsKKwlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBibGtubywgbmV3X2Jsa25vLCBsZW4sCisJCQkJCSAgbWV0YV9hYywgZGF0YV9hYywgYXJncyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwltbG9nKDAsICJpbnNlcnQgbmV3IHhhdHRyIGV4dGVudCByZWMgc3RhcnQgJWxsdSBsZW4gJXUgdG8gJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubywgbGVuLCBjcG9zKTsKKwlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgJmV0LCBjcG9zLCBuZXdfYmxrbm8sCisJCQkJICBsZW4sIDAsIG1ldGFfYWMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCitvdXQ6CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwlpZiAoZGF0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDcmVhdGUgcmVmbGlua2VkIHhhdHRyIGJ1Y2tldHMuCisgKiBXZSB3aWxsIGFkZCBidWNrZXQgb25lIGJ5IG9uZSwgYW5kIHJlZmNvdW50IGFsbCB0aGUgeGF0dHJzIGluIHRoZSBidWNrZXQKKyAqIGlmIHRoZXkgYXJlIHN0b3JlZCBvdXRzaWRlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncywKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2Jsa19iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyBwYXJhOworCisJbWVtc2V0KCZwYXJhLCAwLCBzaXplb2YocGFyYSkpOworCXBhcmEucmVmbGluayA9IGFyZ3M7CisJcGFyYS5vbGRfYmxrX2JoID0gYmxrX2JoOworCXBhcmEubmV3X2Jsa19iaCA9IG5ld19ibGtfYmg7CisKKwlwYXJhLm9sZF9idWNrZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfbmV3KGFyZ3MtPm9sZF9pbm9kZSk7CisJaWYgKCFwYXJhLm9sZF9idWNrZXQpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGFyYS5uZXdfYnVja2V0ID0gb2NmczJfeGF0dHJfYnVja2V0X25ldyhhcmdzLT5uZXdfaW5vZGUpOworCWlmICghcGFyYS5uZXdfYnVja2V0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhhcmdzLT5vbGRfaW5vZGUsIGJsa19iaCwKKwkJCQkJICAgICAgb2NmczJfcmVmbGlua194YXR0cl9yZWMsCisJCQkJCSAgICAgICZwYXJhKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dDoKKwlvY2ZzMl94YXR0cl9idWNrZXRfZnJlZShwYXJhLm9sZF9idWNrZXQpOworCW9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHBhcmEubmV3X2J1Y2tldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2luX2Jsb2NrKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLAorCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCkKK3sKKwlpbnQgcmV0LCBpbmRleGVkID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19ibGtfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCisKKwlpZiAobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpCisJCWluZGV4ZWQgPSAxOworCisJcmV0ID0gb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKGFyZ3MtPm5ld19pbm9kZSwgYXJncy0+bmV3X2JoLAorCQkJCQkgICAgICZuZXdfYmxrX2JoLCBpbmRleGVkKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCEobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpKQorCQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7CisJZWxzZQorCQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWUoYXJncywgYmxrX2JoLCBuZXdfYmxrX2JoKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dDoKKwlicmVsc2UobmV3X2Jsa19iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpCit7CisJaW50IHR5cGUgPSBvY2ZzMl94YXR0cl9nZXRfdHlwZSh4ZSk7CisKKwlyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSAmJgorCSAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MgJiYKKwkgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDsKK30KKworaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJIHN0cnVjdCBpbm9kZSAqbmV3X2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCQkJIGJvb2wgcHJlc2VydmVfc2VjdXJpdHkpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayBhcmdzOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0kob2xkX2lub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopb2xkX2JoLT5iX2RhdGE7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0IGRlYWxsb2M7CisJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnJlZl90cmVlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVmX3Jvb3RfYmggPSBOVUxMOworCisJcmV0ID0gb2NmczJfbG9ja19yZWZjb3VudF90cmVlKE9DRlMyX1NCKG9sZF9pbm9kZS0+aV9zYiksCisJCQkJICAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3JlZmNvdW50X2xvYyksCisJCQkJICAgICAgIDEsICZyZWZfdHJlZSwgJnJlZl9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJb2NmczJfaW5pdF9kZWFsbG9jX2N0eHQoJmRlYWxsb2MpOworCisJYXJncy5vbGRfaW5vZGUgPSBvbGRfaW5vZGU7CisJYXJncy5uZXdfaW5vZGUgPSBuZXdfaW5vZGU7CisJYXJncy5vbGRfYmggPSBvbGRfYmg7CisJYXJncy5uZXdfYmggPSBuZXdfYmg7CisJYXJncy5yZWZfY2kgPSAmcmVmX3RyZWUtPnJmX2NpOworCWFyZ3MucmVmX3Jvb3RfYmggPSByZWZfcm9vdF9iaDsKKwlhcmdzLmRlYWxsb2MgPSAmZGVhbGxvYzsKKwlpZiAocHJlc2VydmVfc2VjdXJpdHkpCisJCWFyZ3MueGF0dHJfcmVmbGlua2VkID0gTlVMTDsKKwllbHNlCisJCWFyZ3MueGF0dHJfcmVmbGlua2VkID0gb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eTsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5saW5lKCZhcmdzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorCisJaWYgKCFkaS0+aV94YXR0cl9sb2MpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYmxvY2sob2xkX2lub2RlLCBsZTY0X3RvX2NwdShkaS0+aV94YXR0cl9sb2MpLAorCQkJCSAgICAgJmJsa19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJcmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jaygmYXJncywgYmxrX2JoKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlicmVsc2UoYmxrX2JoKTsKKworb3V0X3VubG9jazoKKwlvY2ZzMl91bmxvY2tfcmVmY291bnRfdHJlZShPQ0ZTMl9TQihvbGRfaW5vZGUtPmlfc2IpLAorCQkJCSAgIHJlZl90cmVlLCAxKTsKKwlicmVsc2UocmVmX3Jvb3RfYmgpOworCisJaWYgKG9jZnMyX2RlYWxsb2NfaGFzX2NsdXN0ZXIoJmRlYWxsb2MpKSB7CisJCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChPQ0ZTMl9TQihvbGRfaW5vZGUtPmlfc2IpLCAxKTsKKwkJb2NmczJfcnVuX2RlYWxsb2NzKE9DRlMyX1NCKG9sZF9pbm9kZS0+aV9zYiksICZkZWFsbG9jKTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSW5pdGlhbGl6ZSBzZWN1cml0eSBhbmQgYWNsIGZvciBhIGFscmVhZHkgY3JlYXRlZCBpbm9kZS4KKyAqIFVzZWQgZm9yIHJlZmxpbmsgYSBub24tcHJlc2VydmUtc2VjdXJpdHkgZmlsZS4KKyAqCisgKiBJdCB1c2VzIGNvbW1vbiBhcGkgbGlrZSBvY2ZzMl94YXR0cl9zZXQsIHNvIHRoZSBjYWxsZXIKKyAqIG11c3Qgbm90IGhvbGQgYW55IGxvY2sgZXhwZWN0IGlfbXV0ZXguCisgKi8KK2ludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gc2kgPSB7CisJCS5lbmFibGUgPSAxLAorCX07CisKKwlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCAmc2kpOworCWlmICghcmV0KSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX3NlY3VyaXR5X3NldChpbm9kZSwgc2kubmFtZSwKKwkJCQkJICAgICAgIHNpLnZhbHVlLCBzaS52YWx1ZV9sZW4sCisJCQkJCSAgICAgICBYQVRUUl9DUkVBVEUpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIGxlYXZlOworCQl9CisJfSBlbHNlIGlmIChyZXQgIT0gLUVPUE5PVFNVUFApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGxlYXZlOworCX0KKworCXJldCA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCAmZGlyX2JoLCAwKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOworCWJyZWxzZShkaXJfYmgpOworbGVhdmU6CisJcmV0dXJuIHJldDsKK30KIC8qCiAgKiAnc2VjdXJpdHknIGF0dHJpYnV0ZXMgc3VwcG9ydAogICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCAxY2E3ZTlhLi4wOGUzNjM4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5oCisrKyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTU1LDYgKzU1LDggQEAKIAkJCSAgIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50LAogCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOworaW50IG9jZnMyX2hhc19pbmxpbmVfeGF0dHJfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpOwogaW50IG9jZnMyX3hhdHRyX3JlbW92ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKIAkJCSAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqKTsKQEAgLTgzLDUgKzg1LDE2IEBACiAJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QJKnZiX3h2OwogfTsKIAotCitpbnQgb2NmczJfeGF0dHJfYXR0YWNoX3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpyZWZfY2ksCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpOworaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAorCQkJIHN0cnVjdCBpbm9kZSAqbmV3X2lub2RlLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCQkJIGJvb2wgcHJlc2VydmVfc2VjdXJpdHkpOworaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKICNlbmRpZiAvKiBPQ0ZTMl9YQVRUUl9IICovCmRpZmYgLS1naXQgYS9mcy9vbWZzL2Rpci5jIGIvZnMvb21mcy9kaXIuYwppbmRleCBjNzI3NWNmLi4zNjgwYmFlIDEwMDY0NAotLS0gYS9mcy9vbWZzL2Rpci5jCisrKyBiL2ZzL29tZnMvZGlyLmMKQEAgLTQ4OSw3ICs0ODksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9tZnNfZGlyX2lub3BzID0geworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb21mc19kaXJfaW5vcHMgPSB7CiAJLmxvb2t1cCA9IG9tZnNfbG9va3VwLAogCS5ta2RpciA9IG9tZnNfbWtkaXIsCiAJLnJlbmFtZSA9IG9tZnNfcmVuYW1lLApkaWZmIC0tZ2l0IGEvZnMvb21mcy9maWxlLmMgYi9mcy9vbWZzL2ZpbGUuYwppbmRleCBkMTdlNzc0Li40ODQ1ZmJiIDEwMDY0NAotLS0gYS9mcy9vbWZzL2ZpbGUuYworKysgYi9mcy9vbWZzL2ZpbGUuYwpAQCAtMzMzLDExICszMzMsMTEgQEAKIAkuc3BsaWNlX3JlYWQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHMgPSB7Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHMgPSB7CiAJLnRydW5jYXRlID0gb21mc190cnVuY2F0ZQogfTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvbWZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9tZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UgPSBvbWZzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMgPSBvbWZzX3JlYWRwYWdlcywKIAkud3JpdGVwYWdlID0gb21mc193cml0ZXBhZ2UsCmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmMKaW5kZXggMzc5YWU1Zi4uZjNiN2MxNSAxMDA2NDQKLS0tIGEvZnMvb21mcy9pbm9kZS5jCisrKyBiL2ZzL29tZnMvaW5vZGUuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvbWZzX3NvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb21mc19zb3BzID0gewogCS53cml0ZV9pbm9kZQk9IG9tZnNfd3JpdGVfaW5vZGUsCiAJLmRlbGV0ZV9pbm9kZQk9IG9tZnNfZGVsZXRlX2lub2RlLAogCS5wdXRfc3VwZXIJPSBvbWZzX3B1dF9zdXBlciwKZGlmZiAtLWdpdCBhL2ZzL29tZnMvb21mcy5oIGIvZnMvb21mcy9vbWZzLmgKaW5kZXggMmJjMGYwNi4uZGY3MTAzOSAxMDA2NDQKLS0tIGEvZnMvb21mcy9vbWZzLmgKKysrIGIvZnMvb21mcy9vbWZzLmgKQEAgLTQ1LDE1ICs0NSwxNSBAQAogCiAvKiBkaXIuYyAqLwogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9pbm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9pbm9wczsKIGV4dGVybiBpbnQgb21mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGludCBvbWZzX2lzX2JhZChzdHJ1Y3Qgb21mc19zYl9pbmZvICpzYmksIHN0cnVjdCBvbWZzX2hlYWRlciAqaGVhZGVyLAogCQkJdTY0IGZzYmxvY2spOwogCiAvKiBmaWxlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9pbm9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9tZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvbWZzX2FvcHM7CiBleHRlcm4gdm9pZCBvbWZzX21ha2VfZW1wdHlfdGFibGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZnNldCk7CiBleHRlcm4gaW50IG9tZnNfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggMzExOTFiZi4uNGYwMWUwNiAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtMjkwLDEwICsyOTAsOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotU1lTQ0FMTF9ERUZJTkUyKHRydW5jYXRlLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRoLCB1bnNpZ25lZCBsb25nLCBsZW5ndGgpCitTWVNDQUxMX0RFRklORTIodHJ1bmNhdGUsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGgsIGxvbmcsIGxlbmd0aCkKIHsKLQkvKiBvbiAzMi1iaXQgYm94ZW4gaXQgd2lsbCBjdXQgdGhlIHJhbmdlIDJeMzEtLTJeMzItMSBvZmYgKi8KLQlyZXR1cm4gZG9fc3lzX3RydW5jYXRlKHBhdGgsIChsb25nKWxlbmd0aCk7CisJcmV0dXJuIGRvX3N5c190cnVuY2F0ZShwYXRoLCBsZW5ndGgpOwogfQogCiBzdGF0aWMgbG9uZyBkb19zeXNfZnRydW5jYXRlKHVuc2lnbmVkIGludCBmZCwgbG9mZl90IGxlbmd0aCwgaW50IHNtYWxsKQpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IGZiZWFkZGYuLjdiNjg1ZTEgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogCQl9CiAKIAkJaWYgKGZyb20gKyBzaXplID4gZ2V0X2NhcGFjaXR5KGRpc2spKSB7Ci0JCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKmJkb3BzID0gZGlzay0+Zm9wczsKKwkJCWNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqYmRvcHMgPSBkaXNrLT5mb3BzOwogCQkJdW5zaWduZWQgbG9uZyBsb25nIGNhcGFjaXR5OwogCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNzI1YTY1MC4uMGM2YmM2MCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtODIsNiArODIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTMyMSw2ICszMjIsODcgQEAKIAkJCXAtPm5pdmNzdyk7CiB9CiAKK3N0cnVjdCBzdGFja19zdGF0cyB7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZwlzdGFydHBhZ2U7CisJdW5zaWduZWQgbG9uZwl1c2FnZTsKK307CisKK3N0YXRpYyBpbnQgc3RhY2tfdXNhZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQl1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJc3RydWN0IHN0YWNrX3N0YXRzICpzcyA9IHdhbGstPnByaXZhdGU7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBzcy0+dm1hOworCXB0ZV90ICpwdGUsIHB0ZW50OworCXNwaW5sb2NrX3QgKnB0bDsKKwlpbnQgcmV0ID0gMDsKKworCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkgeworCQlwdGVudCA9ICpwdGU7CisKKyNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUAorCQlpZiAocHRlX3ByZXNlbnQocHRlbnQpIHx8IGlzX3N3YXBfcHRlKHB0ZW50KSkKKwkJCXNzLT51c2FnZSA9IGFkZHIgLSBzcy0+c3RhcnRwYWdlICsgUEFHRV9TSVpFOworI2Vsc2UKKwkJaWYgKHB0ZV9wcmVzZW50KHB0ZW50KSB8fCBpc19zd2FwX3B0ZShwdGVudCkpIHsKKwkJCXNzLT51c2FnZSA9IHNzLT5zdGFydHBhZ2UgLSBhZGRyICsgUEFHRV9TSVpFOworCQkJcHRlKys7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7CisJY29uZF9yZXNjaGVkKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9zdGFja191c2FnZV9pbl9ieXRlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHN0YWNrX3N0YXRzIHNzOworCXN0cnVjdCBtbV93YWxrIHN0YWNrX3dhbGsgPSB7CisJCS5wbWRfZW50cnkgPSBzdGFja191c2FnZV9wdGVfcmFuZ2UsCisJCS5tbSA9IHZtYS0+dm1fbW0sCisJCS5wcml2YXRlID0gJnNzLAorCX07CisKKwlpZiAoIXZtYS0+dm1fbW0gfHwgaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCisJCXJldHVybiAwOworCisJc3Mudm1hID0gdm1hOworCXNzLnN0YXJ0cGFnZSA9IHRhc2stPnN0YWNrX3N0YXJ0ICYgUEFHRV9NQVNLOworCXNzLnVzYWdlID0gMDsKKworI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCisJd2Fsa19wYWdlX3JhbmdlKEtTVEtfRVNQKHRhc2spICYgUEFHRV9NQVNLLCB2bWEtPnZtX2VuZCwKKwkJJnN0YWNrX3dhbGspOworI2Vsc2UKKwl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgKEtTVEtfRVNQKHRhc2spICYgUEFHRV9NQVNLKSArIFBBR0VfU0laRSwKKwkJJnN0YWNrX3dhbGspOworI2VuZGlmCisJcmV0dXJuIHNzLnVzYWdlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19zaG93X3N0YWNrX3VzYWdlKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKnZtYTsKKwlzdHJ1Y3QgbW1fc3RydWN0CSptbSA9IGdldF90YXNrX21tKHRhc2spOworCisJaWYgKG1tKSB7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJdm1hID0gZmluZF92bWEobW0sIHRhc2stPnN0YWNrX3N0YXJ0KTsKKwkJaWYgKHZtYSkKKwkJCXNlcV9wcmludGYobSwgIlN0YWNrIHVzYWdlOlx0JWx1IGtCXG4iLAorCQkJCWdldF9zdGFja191c2FnZV9pbl9ieXRlcyh2bWEsIHRhc2spID4+IDEwKTsKKworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQltbXB1dChtbSk7CisJfQorfQorCiBpbnQgcHJvY19waWRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLAogCQkJc3RydWN0IHBpZCAqcGlkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CkBAIC0zNDAsNiArNDIyLDcgQEAKIAl0YXNrX3Nob3dfcmVncyhtLCB0YXNrKTsKICNlbmRpZgogCXRhc2tfY29udGV4dF9zd2l0Y2hfY291bnRzKG0sIHRhc2spOworCXRhc2tfc2hvd19zdGFja191c2FnZShtLCB0YXNrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgxLDcgKzU2NCw3IEBACiAJCXJzc2xpbSwKIAkJbW0gPyBtbS0+c3RhcnRfY29kZSA6IDAsCiAJCW1tID8gbW0tPmVuZF9jb2RlIDogMCwKLQkJKHBlcm1pdHRlZCAmJiBtbSkgPyBtbS0+c3RhcnRfc3RhY2sgOiAwLAorCQkocGVybWl0dGVkKSA/IHRhc2stPnN0YWNrX3N0YXJ0IDogMCwKIAkJZXNwLAogCQllaXAsCiAJCS8qIFRoZSBzaWduYWwgaW5mb3JtYXRpb24gaGVyZSBpcyBvYnNvbGV0ZS4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNmY3NDJmNi4uODM3NDY5YSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCiAJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlwb2ludHMgPSBiYWRuZXNzKHRhc2ssIHVwdGltZS50dl9zZWMpOworCXBvaW50cyA9IGJhZG5lc3ModGFzay0+Z3JvdXBfbGVhZGVyLCB1cHRpbWUudHZfc2VjKTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWx1XG4iLCBwb2ludHMpOwogfQpAQCAtNDU4LDcgKzQ1OCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGxpbWl0X25hbWVzIGxuYW1lc1tSTElNX05MSU1JVFNdID0gewotCVtSTElNSVRfQ1BVXSA9IHsiTWF4IGNwdSB0aW1lIiwgIm1zIn0sCisJW1JMSU1JVF9DUFVdID0geyJNYXggY3B1IHRpbWUiLCAic2Vjb25kcyJ9LAogCVtSTElNSVRfRlNJWkVdID0geyJNYXggZmlsZSBzaXplIiwgImJ5dGVzIn0sCiAJW1JMSU1JVF9EQVRBXSA9IHsiTWF4IGRhdGEgc2l6ZSIsICJieXRlcyJ9LAogCVtSTElNSVRfU1RBQ0tdID0geyJNYXggc3RhY2sgc2l6ZSIsICJieXRlcyJ9LApAQCAtOTk5LDExICs5OTksMTcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWNoYXIgYnVmZmVyW1BST0NfTlVNQlVGXTsKIAlzaXplX3QgbGVuOwotCWludCBvb21fYWRqdXN0OworCWludCBvb21fYWRqdXN0ID0gT09NX0RJU0FCTEU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghdGFzaykKIAkJcmV0dXJuIC1FU1JDSDsKLQlvb21fYWRqdXN0ID0gdGFzay0+b29ta2lsbGFkajsKKworCWlmIChsb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpKSB7CisJCW9vbV9hZGp1c3QgPSB0YXNrLT5zaWduYWwtPm9vbV9hZGo7CisJCXVubG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKTsKKwl9CisKIAlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAKIAlsZW4gPSBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWlcbiIsIG9vbV9hZGp1c3QpOwpAQCAtMTAxNSwzMiArMTAyMSw0NCBAQAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl0sICplbmQ7Ci0JaW50IG9vbV9hZGp1c3Q7CisJY2hhciBidWZmZXJbUFJPQ19OVU1CVUZdOworCWxvbmcgb29tX2FkanVzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CiAKIAltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CiAJaWYgKGNvdW50ID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQogCQljb3VudCA9IHNpemVvZihidWZmZXIpIC0gMTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0Jb29tX2FkanVzdCA9IHNpbXBsZV9zdHJ0b2woYnVmZmVyLCAmZW5kLCAwKTsKKworCWVyciA9IHN0cmljdF9zdHJ0b2woc3Ryc3RyaXAoYnVmZmVyKSwgMCwgJm9vbV9hZGp1c3QpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOwogCWlmICgob29tX2FkanVzdCA8IE9PTV9BREpVU1RfTUlOIHx8IG9vbV9hZGp1c3QgPiBPT01fQURKVVNUX01BWCkgJiYKIAkgICAgIG9vbV9hZGp1c3QgIT0gT09NX0RJU0FCTEUpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgqZW5kID09ICdcbicpCi0JCWVuZCsrOworCiAJdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCF0YXNrKQogCQlyZXR1cm4gLUVTUkNIOwotCWlmIChvb21fYWRqdXN0IDwgdGFzay0+b29ta2lsbGFkaiAmJiAhY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkgeworCWlmICghbG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKSkgeworCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCisJaWYgKG9vbV9hZGp1c3QgPCB0YXNrLT5zaWduYWwtPm9vbV9hZGogJiYgIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpIHsKKwkJdW5sb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpOwogCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KLQl0YXNrLT5vb21raWxsYWRqID0gb29tX2FkanVzdDsKKworCXRhc2stPnNpZ25hbC0+b29tX2FkaiA9IG9vbV9hZGp1c3Q7CisKKwl1bmxvY2tfdGFza19zaWdoYW5kKHRhc2ssICZmbGFncyk7CiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwotCWlmIChlbmQgLSBidWZmZXIgPT0gMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIGVuZCAtIGJ1ZmZlcjsKKworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vb21fYWRqdXN0X29wZXJhdGlvbnMgPSB7CkBAIC0xMTY5LDE3ICsxMTg3LDE2IEBACiAJCWNvdW50ID0gc2l6ZW9mKGJ1ZmZlcikgLSAxOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQltYWtlX2l0X2ZhaWwgPSBzaW1wbGVfc3RydG9sKGJ1ZmZlciwgJmVuZCwgMCk7Ci0JaWYgKCplbmQgPT0gJ1xuJykKLQkJZW5kKys7CisJbWFrZV9pdF9mYWlsID0gc2ltcGxlX3N0cnRvbChzdHJzdHJpcChidWZmZXIpLCAmZW5kLCAwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCWlmICghdGFzaykKIAkJcmV0dXJuIC1FU1JDSDsKIAl0YXNrLT5tYWtlX2l0X2ZhaWwgPSBtYWtlX2l0X2ZhaWw7CiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwotCWlmIChlbmQgLSBidWZmZXIgPT0gMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIGVuZCAtIGJ1ZmZlcjsKKworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19mYXVsdF9pbmplY3Rfb3BlcmF0aW9ucyA9IHsKQEAgLTI1ODYsOSArMjYwMyw2IEBACiAJCWRwdXQoZGVudHJ5KTsKIAl9CiAKLQlpZiAodGdpZCA9PSAwKQotCQlnb3RvIG91dDsKLQogCW5hbWUubmFtZSA9IGJ1ZjsKIAluYW1lLmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHRnaWQpOwogCWxlYWRlciA9IGRfaGFzaF9hbmRfbG9va3VwKG1udC0+bW50X3Jvb3QsICZuYW1lKTsKQEAgLTI2NDUsMTcgKzI2NTksMTYgQEAKIHZvaWQgcHJvY19mbHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgcGlkICpwaWQsICp0Z2lkID0gTlVMTDsKKwlzdHJ1Y3QgcGlkICpwaWQsICp0Z2lkOwogCXN0cnVjdCB1cGlkICp1cGlkOwogCiAJcGlkID0gdGFza19waWQodGFzayk7Ci0JaWYgKHRocmVhZF9ncm91cF9sZWFkZXIodGFzaykpCi0JCXRnaWQgPSB0YXNrX3RnaWQodGFzayk7CisJdGdpZCA9IHRhc2tfdGdpZCh0YXNrKTsKIAogCWZvciAoaSA9IDA7IGkgPD0gcGlkLT5sZXZlbDsgaSsrKSB7CiAJCXVwaWQgPSAmcGlkLT5udW1iZXJzW2ldOwogCQlwcm9jX2ZsdXNoX3Rhc2tfbW50KHVwaWQtPm5zLT5wcm9jX21udCwgdXBpZC0+bnIsCi0JCQl0Z2lkID8gdGdpZC0+bnVtYmVyc1tpXS5uciA6IDApOworCQkJCQl0Z2lkLT5udW1iZXJzW2ldLm5yKTsKIAl9CiAKIAl1cGlkID0gJnBpZC0+bnVtYmVyc1twaWQtPmxldmVsXTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mva2NvcmUuYyBiL2ZzL3Byb2Mva2NvcmUuYwppbmRleCA1OWI0M2EwLi41NjAxMzM3IDEwMDY0NAotLS0gYS9mcy9wcm9jL2tjb3JlLmMKKysrIGIvZnMvcHJvYy9rY29yZS5jCkBAIC0xNyw5ICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogI2RlZmluZSBDT1JFX1NUUiAiQ09SRSIKIApAQCAtMjksMTcgKzM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290X2tjb3JlOwogCi1zdGF0aWMgaW50IG9wZW5fa2NvcmUoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQlyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JBV0lPKSA/IDAgOiAtRVBFUk07Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlYWRfa2NvcmUoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfa2NvcmVfb3BlcmF0aW9ucyA9IHsKLQkucmVhZAkJPSByZWFkX2tjb3JlLAotCS5vcGVuCQk9IG9wZW5fa2NvcmUsCi19OwogCiAjaWZuZGVmIGtjX3ZhZGRyX3RvX29mZnNldAogI2RlZmluZQlrY192YWRkcl90b19vZmZzZXQodikgKCh2KSAtIFBBR0VfT0ZGU0VUKQpAQCAtNTcsMTggKzUyLDE5IEBACiAJdm9pZCAqZGF0YTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qga2NvcmVfbGlzdCAqa2NsaXN0Oworc3RhdGljIExJU1RfSEVBRChrY2xpc3RfaGVhZCk7CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhrY2xpc3RfbG9jayk7CitzdGF0aWMgaW50IGtjb3JlX25lZWRfdXBkYXRlID0gMTsKIAogdm9pZAota2NsaXN0X2FkZChzdHJ1Y3Qga2NvcmVfbGlzdCAqbmV3LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKK2tjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKm5ldywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogCW5ldy0+YWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiAJbmV3LT5zaXplID0gc2l6ZTsKKwluZXctPnR5cGUgPSB0eXBlOwogCiAJd3JpdGVfbG9jaygma2NsaXN0X2xvY2spOwotCW5ldy0+bmV4dCA9IGtjbGlzdDsKLQlrY2xpc3QgPSBuZXc7CisJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCAma2NsaXN0X2hlYWQpOwogCXdyaXRlX3VubG9jaygma2NsaXN0X2xvY2spOwogfQogCkBAIC04MCw3ICs3Niw3IEBACiAJKm5waGRyID0gMTsgLyogUFRfTk9URSAqLwogCXNpemUgPSAwOwogCi0JZm9yIChtPWtjbGlzdDsgbTsgbT1tLT5uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAma2NsaXN0X2hlYWQsIGxpc3QpIHsKIAkJdHJ5ID0ga2NfdmFkZHJfdG9fb2Zmc2V0KChzaXplX3QpbS0+YWRkciArIG0tPnNpemUpOwogCQlpZiAodHJ5ID4gc2l6ZSkKIAkJCXNpemUgPSB0cnk7CkBAIC05Nyw2ICs5MywxNzcgQEAKIAlyZXR1cm4gc2l6ZSArICplbGZfYnVmbGVuOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX2tjbGlzdF9lbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGtjb3JlX2xpc3QgKnRtcCwgKnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgaGVhZCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcG9zLT5saXN0KTsKKwkJa2ZyZWUocG9zKTsKKwl9Cit9CisvKgorICogUmVwbGFjZSBhbGwgS0NPUkVfUkFNL0tDT1JFX1ZNRU1NQVAgaW5mb3JtYXRpb24gd2l0aCBwYXNzZWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgX19rY29yZV91cGRhdGVfcmFtKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJaW50IG5waGRyOworCXNpemVfdCBzaXplOworCXN0cnVjdCBrY29yZV9saXN0ICp0bXAsICpwb3M7CisJTElTVF9IRUFEKGdhcmJhZ2UpOworCisJd3JpdGVfbG9jaygma2NsaXN0X2xvY2spOworCWlmIChrY29yZV9uZWVkX3VwZGF0ZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZrY2xpc3RfaGVhZCwgbGlzdCkgeworCQkJaWYgKHBvcy0+dHlwZSA9PSBLQ09SRV9SQU0KKwkJCQl8fCBwb3MtPnR5cGUgPT0gS0NPUkVfVk1FTU1BUCkKKwkJCQlsaXN0X21vdmUoJnBvcy0+bGlzdCwgJmdhcmJhZ2UpOworCQl9CisJCWxpc3Rfc3BsaWNlX3RhaWwobGlzdCwgJmtjbGlzdF9oZWFkKTsKKwl9IGVsc2UKKwkJbGlzdF9zcGxpY2UobGlzdCwgJmdhcmJhZ2UpOworCWtjb3JlX25lZWRfdXBkYXRlID0gMDsKKwlwcm9jX3Jvb3Rfa2NvcmUtPnNpemUgPSBnZXRfa2NvcmVfc2l6ZSgmbnBoZHIsICZzaXplKTsKKwl3cml0ZV91bmxvY2soJmtjbGlzdF9sb2NrKTsKKworCWZyZWVfa2NsaXN0X2VudHMoJmdhcmJhZ2UpOworfQorCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorLyoKKyAqIElmIG5vIGhpZ2htZW0sIHdlIGNhbiBhc3N1bWUgWzAuLi5tYXhfbG93X3BmbikgY29udGludW91cyByYW5nZSBvZiBtZW1vcnkKKyAqIGJlY2F1c2UgbWVtb3J5IGhvbGUgaXMgbm90IGFzIGJpZyBhcyAhSElHSE1FTSBjYXNlLgorICogKEhJR0hNRU0gaXMgc3BlY2lhbCBiZWNhdXNlIHBhcnQgb2YgbWVtb3J5IGlzIF9pbnZpc2libGVfIGZyb20gdGhlIGtlcm5lbC4pCisgKi8KK3N0YXRpYyBpbnQga2NvcmVfdXBkYXRlX3JhbSh2b2lkKQoreworCUxJU1RfSEVBRChoZWFkKTsKKwlzdHJ1Y3Qga2NvcmVfbGlzdCAqZW50OworCWludCByZXQgPSAwOworCisJZW50ID0ga21hbGxvYyhzaXplb2YoKmVudCksIEdGUF9LRVJORUwpOworCWlmICghZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKwllbnQtPmFkZHIgPSAodW5zaWduZWQgbG9uZylfX3ZhKDApOworCWVudC0+c2l6ZSA9IG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQ7CisJZW50LT50eXBlID0gS0NPUkVfUkFNOworCWxpc3RfYWRkKCZlbnQtPmxpc3QsICZoZWFkKTsKKwlfX2tjb3JlX3VwZGF0ZV9yYW0oJmhlYWQpOworCXJldHVybiByZXQ7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfSElHSE1FTSAqLworCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQCisvKiBjYWxjdWxhdGUgdm1lbW1hcCdzIGFkZHJlc3MgZnJvbSBnaXZlbiBzeXN0ZW0gcmFtIHBmbiBhbmQgcmVnaXN0ZXIgaXQgKi8KK2ludCBnZXRfc3BhcnNlbWVtX3ZtZW1tYXBfaW5mbyhzdHJ1Y3Qga2NvcmVfbGlzdCAqZW50LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gX19wYShlbnQtPmFkZHIpID4+IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGVudC0+c2l6ZSA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwlzdHJ1Y3Qga2NvcmVfbGlzdCAqdm1tLCAqdG1wOworCisKKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylwZm5fdG9fcGFnZShwZm4pKSAmIFBBR0VfTUFTSzsKKwllbmQgPSAoKHVuc2lnbmVkIGxvbmcpcGZuX3RvX3BhZ2UocGZuICsgbnJfcGFnZXMpKSAtIDE7CisJZW5kID0gQUxJR04oZW5kLCBQQUdFX1NJWkUpOworCS8qIG92ZXJsYXAgY2hlY2sgKGJlY2F1c2Ugd2UgaGF2ZSB0byBhbGlnbiBwYWdlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIGhlYWQsIGxpc3QpIHsKKwkJaWYgKHRtcC0+dHlwZSAhPSBLQ09SRV9WTUVNTUFQKQorCQkJY29udGludWU7CisJCWlmIChzdGFydCA8IHRtcC0+YWRkciArIHRtcC0+c2l6ZSkKKwkJCWlmIChlbmQgPiB0bXAtPmFkZHIpCisJCQkJZW5kID0gdG1wLT5hZGRyOworCX0KKwlpZiAoc3RhcnQgPCBlbmQpIHsKKwkJdm1tID0ga21hbGxvYyhzaXplb2YoKnZtbSksIEdGUF9LRVJORUwpOworCQlpZiAoIXZtbSkKKwkJCXJldHVybiAwOworCQl2bW0tPmFkZHIgPSBzdGFydDsKKwkJdm1tLT5zaXplID0gZW5kIC0gc3RhcnQ7CisJCXZtbS0+dHlwZSA9IEtDT1JFX1ZNRU1NQVA7CisJCWxpc3RfYWRkX3RhaWwoJnZtbS0+bGlzdCwgaGVhZCk7CisJfQorCXJldHVybiAxOworCit9CisjZWxzZQoraW50IGdldF9zcGFyc2VtZW1fdm1lbW1hcF9pbmZvKHN0cnVjdCBrY29yZV9saXN0ICplbnQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50CitrY2xpc3RfYWRkX3ByaXZhdGUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gKHN0cnVjdCBsaXN0X2hlYWQgKilhcmc7CisJc3RydWN0IGtjb3JlX2xpc3QgKmVudDsKKworCWVudCA9IGttYWxsb2Moc2l6ZW9mKCplbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZW50LT5hZGRyID0gKHVuc2lnbmVkIGxvbmcpX192YSgocGZuIDw8IFBBR0VfU0hJRlQpKTsKKwllbnQtPnNpemUgPSBucl9wYWdlcyA8PCBQQUdFX1NISUZUOworCisJLyogU2FuaXR5IGNoZWNrOiBDYW4gaGFwcGVuIGluIDMyYml0IGFyY2guLi5tYXliZSAqLworCWlmIChlbnQtPmFkZHIgPCAodW5zaWduZWQgbG9uZykgX192YSgwKSkKKwkJZ290byBmcmVlX291dDsKKworCS8qIGN1dCBub3QtbWFwcGVkIGFyZWEuIC4uLi5mcm9tIHBwYy0zMiBjb2RlLiAqLworCWlmIChVTE9OR19NQVggLSBlbnQtPmFkZHIgPCBlbnQtPnNpemUpCisJCWVudC0+c2l6ZSA9IFVMT05HX01BWCAtIGVudC0+YWRkcjsKKworCS8qIGN1dCB3aGVuIHZtYWxsb2MoKSBhcmVhIGlzIGhpZ2hlciB0aGFuIGRpcmVjdC1tYXAgYXJlYSAqLworCWlmIChWTUFMTE9DX1NUQVJUID4gKHVuc2lnbmVkIGxvbmcpX192YSgwKSkgeworCQlpZiAoZW50LT5hZGRyID4gVk1BTExPQ19TVEFSVCkKKwkJCWdvdG8gZnJlZV9vdXQ7CisJCWlmIChWTUFMTE9DX1NUQVJUIC0gZW50LT5hZGRyIDwgZW50LT5zaXplKQorCQkJZW50LT5zaXplID0gVk1BTExPQ19TVEFSVCAtIGVudC0+YWRkcjsKKwl9CisKKwllbnQtPnR5cGUgPSBLQ09SRV9SQU07CisJbGlzdF9hZGRfdGFpbCgmZW50LT5saXN0LCBoZWFkKTsKKworCWlmICghZ2V0X3NwYXJzZW1lbV92bWVtbWFwX2luZm8oZW50LCBoZWFkKSkgeworCQlsaXN0X2RlbCgmZW50LT5saXN0KTsKKwkJZ290byBmcmVlX291dDsKKwl9CisKKwlyZXR1cm4gMDsKK2ZyZWVfb3V0OgorCWtmcmVlKGVudCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQga2NvcmVfdXBkYXRlX3JhbSh2b2lkKQoreworCWludCBuaWQsIHJldDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm47CisJTElTVF9IRUFEKGhlYWQpOworCisJLyogTm90IGluaWFsaXplZC4uLi51cGRhdGUgbm93ICovCisJLyogZmluZCBvdXQgIm1heCBwZm4iICovCisJZW5kX3BmbiA9IDA7CisJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fSElHSF9NRU1PUlkpIHsKKwkJdW5zaWduZWQgbG9uZyBub2RlX2VuZDsKKwkJbm9kZV9lbmQgID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsKKwkJCU5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXM7CisJCWlmIChlbmRfcGZuIDwgbm9kZV9lbmQpCisJCQllbmRfcGZuID0gbm9kZV9lbmQ7CisJfQorCS8qIHNjYW4gMCB0byBtYXhfcGZuICovCisJcmV0ID0gd2Fsa19zeXN0ZW1fcmFtX3JhbmdlKDAsIGVuZF9wZm4sICZoZWFkLCBrY2xpc3RfYWRkX3ByaXZhdGUpOworCWlmIChyZXQpIHsKKwkJZnJlZV9rY2xpc3RfZW50cygmaGVhZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlfX2tjb3JlX3VwZGF0ZV9yYW0oJmhlYWQpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKQEAgLTE5Miw3ICszNTksNyBAQAogCW5oZHItPnBfYWxpZ24JPSAwOwogCiAJLyogc2V0dXAgRUxGIFBUX0xPQUQgcHJvZ3JhbSBoZWFkZXIgZm9yIGV2ZXJ5IGFyZWEgKi8KLQlmb3IgKG09a2NsaXN0OyBtOyBtPW0tPm5leHQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZrY2xpc3RfaGVhZCwgbGlzdCkgewogCQlwaGRyID0gKHN0cnVjdCBlbGZfcGhkciAqKSBidWZwOwogCQlidWZwICs9IHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwogCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7CkBAIC0yNjUsNyArNDMyLDggQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCiAJcmVhZF9sb2NrKCZrY2xpc3RfbG9jayk7Ci0JcHJvY19yb290X2tjb3JlLT5zaXplID0gc2l6ZSA9IGdldF9rY29yZV9zaXplKCZucGhkciwgJmVsZl9idWZsZW4pOworCXNpemUgPSBnZXRfa2NvcmVfc2l6ZSgmbnBoZHIsICZlbGZfYnVmbGVuKTsKKwogCWlmIChidWZsZW4gPT0gMCB8fCAqZnBvcyA+PSBzaXplKSB7CiAJCXJlYWRfdW5sb2NrKCZrY2xpc3RfbG9jayk7CiAJCXJldHVybiAwOwpAQCAtMzE3LDcgKzQ4NSw3IEBACiAJCXN0cnVjdCBrY29yZV9saXN0ICptOwogCiAJCXJlYWRfbG9jaygma2NsaXN0X2xvY2spOwotCQlmb3IgKG09a2NsaXN0OyBtOyBtPW0tPm5leHQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAma2NsaXN0X2hlYWQsIGxpc3QpIHsKIAkJCWlmIChzdGFydCA+PSBtLT5hZGRyICYmIHN0YXJ0IDwgKG0tPmFkZHIrbS0+c2l6ZSkpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTMyNiw0NSArNDk0LDE0IEBACiAJCWlmIChtID09IE5VTEwpIHsKIAkJCWlmIChjbGVhcl91c2VyKGJ1ZmZlciwgdHN6KSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfSBlbHNlIGlmIChpc192bWFsbG9jX2FkZHIoKHZvaWQgKilzdGFydCkpIHsKKwkJfSBlbHNlIGlmIChpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKCh2b2lkICopc3RhcnQpKSB7CiAJCQljaGFyICogZWxmX2J1ZjsKLQkJCXN0cnVjdCB2bV9zdHJ1Y3QgKm07Ci0JCQl1bnNpZ25lZCBsb25nIGN1cnN0YXJ0ID0gc3RhcnQ7Ci0JCQl1bnNpZ25lZCBsb25nIGN1cnNpemUgPSB0c3o7CiAKIAkJCWVsZl9idWYgPSBremFsbG9jKHRzeiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWVsZl9idWYpCiAJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCXJlYWRfbG9jaygmdm1saXN0X2xvY2spOwotCQkJZm9yIChtPXZtbGlzdDsgbSAmJiBjdXJzaXplOyBtPW0tPm5leHQpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHZtc3RhcnQ7Ci0JCQkJdW5zaWduZWQgbG9uZyB2bXNpemU7Ci0JCQkJdW5zaWduZWQgbG9uZyBtc2l6ZSA9IG0tPnNpemUgLSBQQUdFX1NJWkU7Ci0KLQkJCQlpZiAoKCh1bnNpZ25lZCBsb25nKW0tPmFkZHIgKyBtc2l6ZSkgPCAKLQkJCQkJCQkJY3Vyc3RhcnQpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICgodW5zaWduZWQgbG9uZyltLT5hZGRyID4gKGN1cnN0YXJ0ICsgCi0JCQkJCQkJCWN1cnNpemUpKQotCQkJCQlicmVhazsKLQkJCQl2bXN0YXJ0ID0gKGN1cnN0YXJ0IDwgKHVuc2lnbmVkIGxvbmcpbS0+YWRkciA/IAotCQkJCQkodW5zaWduZWQgbG9uZyltLT5hZGRyIDogY3Vyc3RhcnQpOwotCQkJCWlmICgoKHVuc2lnbmVkIGxvbmcpbS0+YWRkciArIG1zaXplKSA+IAotCQkJCQkJCShjdXJzdGFydCArIGN1cnNpemUpKQotCQkJCQl2bXNpemUgPSBjdXJzdGFydCArIGN1cnNpemUgLSB2bXN0YXJ0OwotCQkJCWVsc2UKLQkJCQkJdm1zaXplID0gKHVuc2lnbmVkIGxvbmcpbS0+YWRkciArIAotCQkJCQkJCW1zaXplIC0gdm1zdGFydDsKLQkJCQljdXJzdGFydCA9IHZtc3RhcnQgKyB2bXNpemU7Ci0JCQkJY3Vyc2l6ZSAtPSB2bXNpemU7Ci0JCQkJLyogZG9uJ3QgZHVtcCBpb3JlbWFwJ2Qgc3R1ZmYhIChUQSkgKi8KLQkJCQlpZiAobS0+ZmxhZ3MgJiBWTV9JT1JFTUFQKQotCQkJCQljb250aW51ZTsKLQkJCQltZW1jcHkoZWxmX2J1ZiArICh2bXN0YXJ0IC0gc3RhcnQpLAotCQkJCQkoY2hhciAqKXZtc3RhcnQsIHZtc2l6ZSk7Ci0JCQl9Ci0JCQlyZWFkX3VubG9jaygmdm1saXN0X2xvY2spOworCQkJdnJlYWQoZWxmX2J1ZiwgKGNoYXIgKilzdGFydCwgdHN6KTsKKwkJCS8qIHdlIGhhdmUgdG8gemVyby1maWxsIHVzZXIgYnVmZmVyIGV2ZW4gaWYgbm8gcmVhZCAqLwogCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGVsZl9idWYsIHRzeikpIHsKIAkJCQlrZnJlZShlbGZfYnVmKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQwMiwxMiArNTM5LDk2IEBACiAJcmV0dXJuIGFjYzsKIH0KIAorCitzdGF0aWMgaW50IG9wZW5fa2NvcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChrY29yZV9uZWVkX3VwZGF0ZSkKKwkJa2NvcmVfdXBkYXRlX3JhbSgpOworCWlmIChpX3NpemVfcmVhZChpbm9kZSkgIT0gcHJvY19yb290X2tjb3JlLT5zaXplKSB7CisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBwcm9jX3Jvb3Rfa2NvcmUtPnNpemUpOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zID0geworCS5yZWFkCQk9IHJlYWRfa2NvcmUsCisJLm9wZW4JCT0gb3Blbl9rY29yZSwKK307CisKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKKy8qIGp1c3QgcmVtZW1iZXIgdGhhdCB3ZSBoYXZlIHRvIHVwZGF0ZSBrY29yZSAqLworc3RhdGljIGludCBfX21lbWluaXQga2NvcmVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX09GRkxJTkU6CisJCXdyaXRlX2xvY2soJmtjbGlzdF9sb2NrKTsKKwkJa2NvcmVfbmVlZF91cGRhdGUgPSAxOworCQl3cml0ZV91bmxvY2soJmtjbGlzdF9sb2NrKTsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKyNlbmRpZgorCisKK3N0YXRpYyBzdHJ1Y3Qga2NvcmVfbGlzdCBrY29yZV92bWFsbG9jOworCisjaWZkZWYgQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUCitzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfdGV4dDsKKy8qCisgKiBJZiBkZWZpbmVkLCBzcGVjaWFsIHNlZ21lbnQgaXMgdXNlZCBmb3IgbWFwcGluZyBrZXJuZWwgdGV4dCBpbnN0ZWFkIG9mCisgKiBkaXJlY3QtbWFwIGFyZWEuIFdlIG5lZWQgdG8gY3JlYXRlIHNwZWNpYWwgVEVYVCBzZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcHJvY19rY29yZV90ZXh0X2luaXQodm9pZCkKK3sKKwlrY2xpc3RfYWRkKCZrY29yZV90ZXh0LCBfc3RleHQsIF9lbmQgLSBfc3RleHQsIEtDT1JFX1RFWFQpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBwcm9jX2tjb3JlX3RleHRfaW5pdCh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSAmJiBkZWZpbmVkKE1PRFVMRVNfVkFERFIpCisvKgorICogTU9EVUxFU19WQUREUiBoYXMgbm8gaW50ZXJzZWN0aW9uIHdpdGggVk1BTExPQ19BRERSLgorICovCitzdHJ1Y3Qga2NvcmVfbGlzdCBrY29yZV9tb2R1bGVzOworc3RhdGljIHZvaWQgX19pbml0IGFkZF9tb2R1bGVzX3JhbmdlKHZvaWQpCit7CisJa2NsaXN0X2FkZCgma2NvcmVfbW9kdWxlcywgKHZvaWQgKilNT0RVTEVTX1ZBRERSLAorCQkJTU9EVUxFU19FTkQgLSBNT0RVTEVTX1ZBRERSLCBLQ09SRV9WTUFMTE9DKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYWRkX21vZHVsZXNfcmFuZ2Uodm9pZCkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBwcm9jX2tjb3JlX2luaXQodm9pZCkKIHsKLQlwcm9jX3Jvb3Rfa2NvcmUgPSBwcm9jX2NyZWF0ZSgia2NvcmUiLCBTX0lSVVNSLCBOVUxMLCAmcHJvY19rY29yZV9vcGVyYXRpb25zKTsKLQlpZiAocHJvY19yb290X2tjb3JlKQotCQlwcm9jX3Jvb3Rfa2NvcmUtPnNpemUgPQotCQkJCShzaXplX3QpaGlnaF9tZW1vcnkgLSBQQUdFX09GRlNFVCArIFBBR0VfU0laRTsKKwlwcm9jX3Jvb3Rfa2NvcmUgPSBwcm9jX2NyZWF0ZSgia2NvcmUiLCBTX0lSVVNSLCBOVUxMLAorCQkJCSAgICAgICZwcm9jX2tjb3JlX29wZXJhdGlvbnMpOworCWlmICghcHJvY19yb290X2tjb3JlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY291bGRuJ3QgY3JlYXRlIC9wcm9jL2tjb3JlXG4iKTsKKwkJcmV0dXJuIDA7IC8qIEFsd2F5cyByZXR1cm5zIDAuICovCisJfQorCS8qIFN0b3JlIHRleHQgYXJlYSBpZiBpdCdzIHNwZWNpYWwgKi8KKwlwcm9jX2tjb3JlX3RleHRfaW5pdCgpOworCS8qIFN0b3JlIHZtYWxsb2MgYXJlYSAqLworCWtjbGlzdF9hZGQoJmtjb3JlX3ZtYWxsb2MsICh2b2lkICopVk1BTExPQ19TVEFSVCwKKwkJVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJULCBLQ09SRV9WTUFMTE9DKTsKKwlhZGRfbW9kdWxlc19yYW5nZSgpOworCS8qIFN0b3JlIGRpcmVjdC1tYXAgYXJlYSBmcm9tIHBoeXNpY2FsIG1lbW9yeSBtYXAgKi8KKwlrY29yZV91cGRhdGVfcmFtKCk7CisJaG90cGx1Z19tZW1vcnlfbm90aWZpZXIoa2NvcmVfY2FsbGJhY2ssIDApOworCiAJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdChwcm9jX2tjb3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9tZW1pbmZvLmMgYi9mcy9wcm9jL21lbWluZm8uYwppbmRleCBkNWM0MTBkLi4xNzFlMDUyIDEwMDY0NAotLS0gYS9mcy9wcm9jL21lbWluZm8uYworKysgYi9mcy9wcm9jL21lbWluZm8uYwpAQCAtODEsOSArODEsMTEgQEAKIAkJIldyaXRlYmFjazogICAgICAlOGx1IGtCXG4iCiAJCSJBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgogCQkiTWFwcGVkOiAgICAgICAgICU4bHUga0JcbiIKKwkJIlNobWVtOiAgICAgICAgICAlOGx1IGtCXG4iCiAJCSJTbGFiOiAgICAgICAgICAgJThsdSBrQlxuIgogCQkiU1JlY2xhaW1hYmxlOiAgICU4bHUga0JcbiIKIAkJIlNVbnJlY2xhaW06ICAgICAlOGx1IGtCXG4iCisJCSJLZXJuZWxTdGFjazogICAgJThsdSBrQlxuIgogCQkiUGFnZVRhYmxlczogICAgICU4bHUga0JcbiIKICNpZmRlZiBDT05GSUdfUVVJQ0tMSVNUCiAJCSJRdWlja2xpc3RzOiAgICAgJThsdSBrQlxuIgpAQCAtMTI0LDEwICsxMjYsMTIgQEAKIAkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spKSwKIAkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9BTk9OX1BBR0VTKSksCiAJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9NQVBQRUQpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9TSE1FTSkpLAogCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpICsKIAkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpKSwKIAkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSksCiAJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0tFUk5FTF9TVEFDSykgKiBUSFJFQURfU0laRSAvIDEwMjQsCiAJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfUEFHRVRBQkxFKSksCiAjaWZkZWYgQ09ORklHX1FVSUNLTElTVAogCQlLKHF1aWNrbGlzdF90b3RhbF9zaXplKCkpLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9ub21tdS5jIGIvZnMvcHJvYy9ub21tdS5jCmluZGV4IDdlMTRkMWEuLjlmZTdkN2UgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvbm9tbXUuYworKysgYi9mcy9wcm9jL25vbW11LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJldHVybiByYl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX25vbW11X3JlZ2lvbl9saXN0X3NlcW9wID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX25vbW11X3JlZ2lvbl9saXN0X3NlcW9wID0gewogCS5zdGFydAk9IG5vbW11X3JlZ2lvbl9saXN0X3N0YXJ0LAogCS5uZXh0CT0gbm9tbXVfcmVnaW9uX2xpc3RfbmV4dCwKIAkuc3RvcAk9IG5vbW11X3JlZ2lvbl9saXN0X3N0b3AsCmRpZmYgLS1naXQgYS9mcy9wcm9jL3BhZ2UuYyBiL2ZzL3Byb2MvcGFnZS5jCmluZGV4IDI3MDdjNmMuLjIyODFjMmMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcGFnZS5jCisrKyBiL2ZzL3Byb2MvcGFnZS5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC05NSw2ICs5Niw4IEBACiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKICNkZWZpbmUgS1BGX05PUEFHRQkJMjAKIAorI2RlZmluZSBLUEZfS1NNCQkJMjEKKwogLyoga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMKICAqIFdBUk5JTkc6IHN1YmplY3QgdG8gY2hhbmdlLCBuZXZlciByZWx5IG9uIHRoZW0hCiAgKi8KQEAgLTEzNyw2ICsxNDAsOCBAQAogCQl1IHw9IDEgPDwgS1BGX01NQVA7CiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQogCQl1IHw9IDEgPDwgS1BGX0FOT047CisJaWYgKFBhZ2VLc20ocGFnZSkpCisJCXUgfD0gMSA8PCBLUEZfS1NNOwogCiAJLyoKIAkgKiBjb21wb3VuZCBwYWdlczogZXhwb3J0IGJvdGggaGVhZC90YWlsIGluZm8KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA5YmQ4YmUxLi4yYTFiZWY5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0yNDMsNiArMjQzLDI1IEBACiAJCQkJfSBlbHNlIGlmICh2bWEtPnZtX3N0YXJ0IDw9IG1tLT5zdGFydF9zdGFjayAmJgogCQkJCQkgICB2bWEtPnZtX2VuZCA+PSBtbS0+c3RhcnRfc3RhY2spIHsKIAkJCQkJbmFtZSA9ICJbc3RhY2tdIjsKKwkJCQl9IGVsc2UgeworCQkJCQl1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0OworCQkJCQlzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnBtcDsKKworCQkJCQlwbXAgPSBtLT5wcml2YXRlOworCQkJCQlzdGFja19zdGFydCA9IHBtcC0+dGFzay0+c3RhY2tfc3RhcnQ7CisKKwkJCQkJaWYgKHZtYS0+dm1fc3RhcnQgPD0gc3RhY2tfc3RhcnQgJiYKKwkJCQkJICAgIHZtYS0+dm1fZW5kID49IHN0YWNrX3N0YXJ0KSB7CisJCQkJCQlwYWRfbGVuX3NwYWNlcyhtLCBsZW4pOworCQkJCQkJc2VxX3ByaW50ZihtLAorCQkJCQkJICJbdGhyZWFkc3RhY2s6JTA4bHhdIiwKKyNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUAorCQkJCQkJIHZtYS0+dm1fZW5kIC0gc3RhY2tfc3RhcnQKKyNlbHNlCisJCQkJCQkgc3RhY2tfc3RhcnQgLSB2bWEtPnZtX3N0YXJ0CisjZW5kaWYKKwkJCQkJCSk7CisJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCW5hbWUgPSAiW3Zkc29dIjsKQEAgLTQ2NSwyMyArNDg0LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQ0xFQVJfUkVGU19BTEwgMQorI2RlZmluZSBDTEVBUl9SRUZTX0FOT04gMgorI2RlZmluZSBDTEVBUl9SRUZTX01BUFBFRCAzCisKIHN0YXRpYyBzc2l6ZV90IGNsZWFyX3JlZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCWNoYXIgYnVmZmVyW1BST0NfTlVNQlVGXSwgKmVuZDsKKwljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl07CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJbG9uZyB0eXBlOwogCiAJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwogCWlmIChjb3VudCA+IHNpemVvZihidWZmZXIpIC0gMSkKIAkJY291bnQgPSBzaXplb2YoYnVmZmVyKSAtIDE7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgYnVmLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICghc2ltcGxlX3N0cnRvbChidWZmZXIsICZlbmQsIDApKQorCWlmIChzdHJpY3Rfc3RydG9sKHN0cnN0cmlwKGJ1ZmZlciksIDEwLCAmdHlwZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgqZW5kID09ICdcbicpCi0JCWVuZCsrOworCWlmICh0eXBlIDwgQ0xFQVJfUkVGU19BTEwgfHwgdHlwZSA+IENMRUFSX1JFRlNfTUFQUEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKIAl0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAoIXRhc2spCiAJCXJldHVybiAtRVNSQ0g7CkBAIC00OTQsMTggKzUxOCwzMSBAQAogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CiAJCQljbGVhcl9yZWZzX3dhbGsucHJpdmF0ZSA9IHZtYTsKLQkJCWlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCi0JCQkJd2Fsa19wYWdlX3JhbmdlKHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAotCQkJCQkJJmNsZWFyX3JlZnNfd2Fsayk7CisJCQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogV3JpdGluZyAxIHRvIC9wcm9jL3BpZC9jbGVhcl9yZWZzIGFmZmVjdHMgYWxsIHBhZ2VzLgorCQkJICoKKwkJCSAqIFdyaXRpbmcgMiB0byAvcHJvYy9waWQvY2xlYXJfcmVmcyBvbmx5IGFmZmVjdHMKKwkJCSAqIEFub255bW91cyBwYWdlcy4KKwkJCSAqCisJCQkgKiBXcml0aW5nIDMgdG8gL3Byb2MvcGlkL2NsZWFyX3JlZnMgb25seSBhZmZlY3RzIGZpbGUKKwkJCSAqIG1hcHBlZCBwYWdlcy4KKwkJCSAqLworCQkJaWYgKHR5cGUgPT0gQ0xFQVJfUkVGU19BTk9OICYmIHZtYS0+dm1fZmlsZSkKKwkJCQljb250aW51ZTsKKwkJCWlmICh0eXBlID09IENMRUFSX1JFRlNfTUFQUEVEICYmICF2bWEtPnZtX2ZpbGUpCisJCQkJY29udGludWU7CisJCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkJCSZjbGVhcl9yZWZzX3dhbGspOwogCQl9CiAJCWZsdXNoX3RsYl9tbShtbSk7CiAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCW1tcHV0KG1tKTsKIAl9CiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwotCWlmIChlbmQgLSBidWZmZXIgPT0gMCkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIGVuZCAtIGJ1ZmZlcjsKKworCXJldHVybiBjb3VudDsKIH0KIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NsZWFyX3JlZnNfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3FueDQvS2NvbmZpZyBiL2ZzL3FueDQvS2NvbmZpZwppbmRleCBiZThlMGUxLi41ZjYwODk5IDEwMDY0NAotLS0gYS9mcy9xbng0L0tjb25maWcKKysrIGIvZnMvcW54NC9LY29uZmlnCkBAIC02LDIwICs2LDkgQEAKIAkgIFFOWCA0IGFuZCBRTlggNiAodGhlIGxhdHRlciBpcyBhbHNvIGNhbGxlZCBRTlggUlRQKS4KIAkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IDxodHRwOi8vd3d3LnFueC5jb20vPi4KIAkgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gbW91bnQgUU5YIGhhcmQgZGlza3Mgb3IgZmxvcHBpZXMuCi0JICBVbmxlc3MgeW91IHNheSBZIHRvICJRTlg0RlMgcmVhZC13cml0ZSBzdXBwb3J0IiBiZWxvdywgeW91IHdpbGwKLQkgIG9ubHkgYmUgYWJsZSB0byByZWFkIHRoZXNlIGZpbGUgc3lzdGVtcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHFueDQuCiAKIAkgIElmIHlvdSBkb24ndCBrbm93IHdoZXRoZXIgeW91IG5lZWQgaXQsIHRoZW4geW91IGRvbid0IG5lZWQgaXQ6CiAJICBhbnN3ZXIgTi4KLQotY29uZmlnIFFOWDRGU19SVwotCWJvb2wgIlFOWDRGUyB3cml0ZSBzdXBwb3J0IChEQU5HRVJPVVMpIgotCWRlcGVuZHMgb24gUU5YNEZTX0ZTICYmIEVYUEVSSU1FTlRBTCAmJiBCUk9LRU4KLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byB0ZXN0IHdyaXRlIHN1cHBvcnQgZm9yIFFOWDQgZmlsZSBzeXN0ZW1zLgotCi0JICBJdCdzIGN1cnJlbnRseSBicm9rZW4sIHNvIGZvciBub3c6Ci0JICBhbnN3ZXIgTi4KZGlmZiAtLWdpdCBhL2ZzL3FueDQvTWFrZWZpbGUgYi9mcy9xbng0L01ha2VmaWxlCmluZGV4IGU0ZDQwOGMuLjRhMjgzYjMgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvTWFrZWZpbGUKKysrIGIvZnMvcW54NC9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogb2JqLSQoQ09ORklHX1FOWDRGU19GUykgKz0gcW54NC5vCiAKLXFueDQtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gZmlsZS5vIGJpdG1hcC5vIHRydW5jYXRlLm8KK3FueDQtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gYml0bWFwLm8KZGlmZiAtLWdpdCBhL2ZzL3FueDQvYml0bWFwLmMgYi9mcy9xbng0L2JpdG1hcC5jCmluZGV4IGUxY2QwNjEuLjBhZmJhMDYgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvYml0bWFwLmMKKysrIGIvZnMvcW54NC9iaXRtYXAuYwpAQCAtNzgsODQgKzc4LDMgQEAKIAogCXJldHVybiB0b3RhbF9mcmVlOwogfQotCi0jaWZkZWYgQ09ORklHX1FOWDRGU19SVwotCi1pbnQgcW54NF9pc19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2spCi17Ci0JaW50IHN0YXJ0ID0gbGUzMl90b19jcHUocW54NF9zYihzYiktPkJpdE1hcC0+ZGlfZmlyc3RfeHRudC54dG50X2JsaykgLSAxOwotCWludCBzaXplID0gbGUzMl90b19jcHUocW54NF9zYihzYiktPkJpdE1hcC0+ZGlfc2l6ZSk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQljb25zdCBjaGFyICpnOwotCWludCByZXQgPSAtRUlPOwotCi0Jc3RhcnQgKz0gYmxvY2sgLyAoUU5YNF9CTE9DS19TSVpFICogOCk7Ci0JUU5YNERFQlVHKCgicW54NDogaXNfZnJlZSByZXF1ZXN0aW5nIGJsb2NrIFslbHVdLCBiaXRtYXAgaW4gYmxvY2sgWyVsdV1cbiIsCi0JCSAgICh1bnNpZ25lZCBsb25nKSBibG9jaywgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0KSk7Ci0JKHZvaWQpIHNpemU7CQkvKiBDSEVDS01FICovCi0JYmggPSBzYl9icmVhZChzYiwgc3RhcnQpOwotCWlmIChiaCA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlnID0gYmgtPmJfZGF0YSArIChibG9jayAlIFFOWDRfQkxPQ0tfU0laRSk7Ci0JaWYgKCgoKmcpICYgKDEgPDwgKGJsb2NrICUgOCkpKSA9PSAwKSB7Ci0JCVFOWDRERUJVRygoInFueDQ6IGlzX2ZyZWUgLT4gYmxvY2sgaXMgZnJlZVxuIikpOwotCQlyZXQgPSAxOwotCX0gZWxzZSB7Ci0JCVFOWDRERUJVRygoInFueDQ6IGlzX2ZyZWUgLT4gYmxvY2sgaXMgYnVzeVxuIikpOwotCQlyZXQgPSAwOwotCX0KLQlicmVsc2UoYmgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHFueDRfc2V0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrLCBpbnQgYnVzeSkKLXsKLQlpbnQgc3RhcnQgPSBsZTMyX3RvX2NwdShxbng0X3NiKHNiKS0+Qml0TWFwLT5kaV9maXJzdF94dG50Lnh0bnRfYmxrKSAtIDE7Ci0JaW50IHNpemUgPSBsZTMyX3RvX2NwdShxbng0X3NiKHNiKS0+Qml0TWFwLT5kaV9zaXplKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCWNoYXIgKmc7Ci0KLQlzdGFydCArPSBibG9jayAvIChRTlg0X0JMT0NLX1NJWkUgKiA4KTsKLQlRTlg0REVCVUcoKCJxbng0OiBzZXRfYml0bWFwIHJlcXVlc3RpbmcgYmxvY2sgWyVsdV0sIGJpdG1hcCBpbiBibG9jayBbJWx1XVxuIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLCAodW5zaWduZWQgbG9uZykgc3RhcnQpKTsKLQkodm9pZCkgc2l6ZTsJCS8qIENIRUNLTUUgKi8KLQliaCA9IHNiX2JyZWFkKHNiLCBzdGFydCk7Ci0JaWYgKGJoID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWcgPSBiaC0+Yl9kYXRhICsgKGJsb2NrICUgUU5YNF9CTE9DS19TSVpFKTsKLQlpZiAoYnVzeSA9PSAwKSB7Ci0JCSgqZykgJj0gfigxIDw8IChibG9jayAlIDgpKTsKLQl9IGVsc2UgewotCQkoKmcpIHw9ICgxIDw8IChibG9jayAlIDgpKTsKLQl9Ci0JbWFya19idWZmZXJfZGlydHkoYmgpOwotCWJyZWxzZShiaCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcW54NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpxbng0X2lubyA9IHFueDRfcmF3X2lub2RlKGlub2RlKTsKLQkvKiBXaGF0IGZvcj8gKi8KLQltZW1zZXQocW54NF9pbm8tPmRpX2ZuYW1lLCAwLCBzaXplb2YgcW54NF9pbm8tPmRpX2ZuYW1lKTsKLQlxbng0X2luby0+ZGlfc2l6ZSA9IDA7Ci0JcW54NF9pbm8tPmRpX251bV94dG50cyA9IDA7Ci0JcW54NF9pbm8tPmRpX21vZGUgPSAwOwotCXFueDRfaW5vLT5kaV9zdGF0dXMgPSAwOwotfQotCi12b2lkIHFueDRfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmIChpbm9kZS0+aV9pbm8gPCAxKSB7Ci0JCXByaW50aygiZnJlZV9pbm9kZTogaW5vZGUgMCBvciBub25leGlzdGVudCBpbm9kZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JcW54NF9jbGVhcl9pbm9kZShpbm9kZSk7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3FueDQvZGlyLmMgYi9mcy9xbng0L2Rpci5jCmluZGV4IDAwM2M2OGYuLjg2Y2MzOWMgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvZGlyLmMKKysrIGIvZnMvcW54NC9kaXIuYwpAQCAtODUsOSArODUsNCBAQAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcW54NF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9CiB7CiAJLmxvb2t1cAkJPSBxbng0X2xvb2t1cCwKLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi0JLmNyZWF0ZQkJPSBxbng0X2NyZWF0ZSwKLQkudW5saW5rCQk9IHFueDRfdW5saW5rLAotCS5ybWRpcgkJPSBxbng0X3JtZGlyLAotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcW54NC9maWxlLmMgYi9mcy9xbng0L2ZpbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliMTcwYS4uMDAwMDAwMAotLS0gYS9mcy9xbng0L2ZpbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBRTlg0IGZpbGUgc3lzdGVtLCBMaW51eCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBWZXJzaW9uIDogMC4yLjEKLSAqCi0gKiBVc2luZyBwYXJ0cyBvZiB0aGUgeGlhZnMgZmlsZXN5c3RlbS4KLSAqCi0gKiBIaXN0b3J5IDoKLSAqCi0gKiAyNS0wNS0xOTk4IGJ5IFJpY2hhcmQgRnJvd2lqbiA6IGZpcnN0IHJlbGVhc2UuCi0gKiAyMS0wNi0xOTk4IGJ5IEZyYW5rIERlbmlzIDogd3JvdGUgcW54NF9yZWFkcGFnZSB0byB1c2UgZ2VuZXJpY19maWxlX3JlYWQuCi0gKiAyNy0wNi0xOTk4IGJ5IEZyYW5rIERlbmlzIDogZmlsZSBvdmVyd3JpdGluZy4KLSAqLwotCi0jaW5jbHVkZSAicW54NC5oIgotCi0vKgotICogV2UgaGF2ZSBtb3N0bHkgTlVMTCdzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBvayBmb3IKLSAqIHRoZSBxbng0IGZpbGVzeXN0ZW0uCi0gKi8KLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcW54NF9maWxlX29wZXJhdGlvbnMgPQotewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZAkJPSBkb19zeW5jX3JlYWQsCi0JLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAotCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAotCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi0JLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCi0JLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCi0JLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKLSNlbmRpZgotfTsKLQotY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcW54NF9maWxlX2lub2RlX29wZXJhdGlvbnMgPQotewotI2lmZGVmIENPTkZJR19RTlg0RlNfUlcKLQkudHJ1bmNhdGUJPSBxbng0X3RydW5jYXRlLAotI2VuZGlmCi19OwpkaWZmIC0tZ2l0IGEvZnMvcW54NC9pbm9kZS5jIGIvZnMvcW54NC9pbm9kZS5jCmluZGV4IDY4MWRmNWYuLmQyY2QxNzkgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvaW5vZGUuYworKysgYi9mcy9xbng0L2lub2RlLmMKQEAgLTI4LDczICsyOCw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBxbng0X3NvcHM7CiAKLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi0KLXN0YXRpYyB2b2lkIHFueDRfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JUU5YNERFQlVHKCgicW54NDogZGVsZXRpbmcgaW5vZGUgWyVsdV1cbiIsICh1bnNpZ25lZCBsb25nKSBpbm9kZS0+aV9pbm8pKTsKLQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7Ci0JaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JcW54NF90cnVuY2F0ZShpbm9kZSk7Ci0JbG9ja19rZXJuZWwoKTsKLQlxbng0X2ZyZWVfaW5vZGUoaW5vZGUpOwotCXVubG9ja19rZXJuZWwoKTsKLX0KLQotc3RhdGljIGludCBxbng0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQotewotCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpyYXdfaW5vZGU7Ci0JaW50IGJsb2NrLCBpbm87Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbm8gPSBpbm9kZS0+aV9pbm87Ci0KLQlRTlg0REVCVUcoKCJxbng0OiB3cml0ZSBpbm9kZSAxLlxuIikpOwotCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoIWlubykgewotCQlwcmludGsoInFueDQ6IGJhZCBpbm9kZSBudW1iZXIgb24gZGV2ICVzOiAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsCi0JCSAgICAgICBpbm9kZS0+aV9zYi0+c19pZCwgaW5vKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCVFOWDRERUJVRygoInFueDQ6IHdyaXRlIGlub2RlIDIuXG4iKSk7Ci0JYmxvY2sgPSBpbm8gLyBRTlg0X0lOT0RFU19QRVJfQkxPQ0s7Ci0JbG9ja19rZXJuZWwoKTsKLQlpZiAoIShiaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBibG9jaykpKSB7Ci0JCXByaW50aygicW54NDogbWFqb3IgcHJvYmxlbTogdW5hYmxlIHRvIHJlYWQgaW5vZGUgZnJvbSBkZXYgIgotCQkgICAgICAgIiVzXG4iLCBpbm9kZS0+aV9zYi0+c19pZCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJhd19pbm9kZSA9ICgoc3RydWN0IHFueDRfaW5vZGVfZW50cnkgKikgYmgtPmJfZGF0YSkgKwotCSAgICAoaW5vICUgUU5YNF9JTk9ERVNfUEVSX0JMT0NLKTsKLQlyYXdfaW5vZGUtPmRpX21vZGUgID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbW9kZSk7Ci0JcmF3X2lub2RlLT5kaV91aWQgICA9IGNwdV90b19sZTE2KGZzX2hpZ2gybG93dWlkKGlub2RlLT5pX3VpZCkpOwotCXJhd19pbm9kZS0+ZGlfZ2lkICAgPSBjcHVfdG9fbGUxNihmc19oaWdoMmxvd2dpZChpbm9kZS0+aV9naWQpKTsKLQlyYXdfaW5vZGUtPmRpX25saW5rID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOwotCXJhd19pbm9kZS0+ZGlfc2l6ZSAgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9zaXplKTsKLQlyYXdfaW5vZGUtPmRpX210aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfbXRpbWUudHZfc2VjKTsKLQlyYXdfaW5vZGUtPmRpX2F0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfYXRpbWUudHZfc2VjKTsKLQlyYXdfaW5vZGUtPmRpX2N0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfY3RpbWUudHZfc2VjKTsKLQlyYXdfaW5vZGUtPmRpX2ZpcnN0X3h0bnQueHRudF9zaXplID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfYmxvY2tzKTsKLQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JaWYgKGRvX3N5bmMpIHsKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJiYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKLQkJCXByaW50aygicW54NDogSU8gZXJyb3Igc3luY2luZyBpbm9kZSBbJXM6JTA4eF1cbiIsCi0JCQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm8pOwotCQkJYnJlbHNlKGJoKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCWJyZWxzZShiaCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgcW54NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBzdGF0aWMgc3RydWN0IGlub2RlICpxbng0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIHZvaWQgcW54NF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtMTA4LDEwICs0MSw2IEBACiAJLnB1dF9zdXBlcgk9IHFueDRfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gcW54NF9zdGF0ZnMsCiAJLnJlbW91bnRfZnMJPSBxbng0X3JlbW91bnQsCi0jaWZkZWYgQ09ORklHX1FOWDRGU19SVwotCS53cml0ZV9pbm9kZQk9IHFueDRfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IHFueDRfZGVsZXRlX2lub2RlLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IHFueDRfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQpAQCAtMTIwLDE1ICs0OSw3IEBACiAKIAlxcyA9IHFueDRfc2Ioc2IpOwogCXFzLT5WZXJzaW9uID0gUU5YNF9WRVJTSU9OOwotI2lmbmRlZiBDT05GSUdfUU5YNEZTX1JXCiAJKmZsYWdzIHw9IE1TX1JET05MWTsKLSNlbmRpZgotCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWFya19idWZmZXJfZGlydHkocXMtPnNiX2J1Zik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzU0LDkgKzI3NSw3IEBACiAJfQogCXMtPnNfb3AgPSAmcW54NF9zb3BzOwogCXMtPnNfbWFnaWMgPSBRTlg0X1NVUEVSX01BR0lDOwotI2lmbmRlZiBDT05GSUdfUU5YNEZTX1JXCiAJcy0+c19mbGFncyB8PSBNU19SRE9OTFk7CS8qIFl1cCwgcmVhZC1vbmx5IHlldCAqLwotI2VuZGlmCiAJcW54NF9zYihzKS0+c2JfYnVmID0gYmg7CiAJcW54NF9zYihzKS0+c2IgPSAoc3RydWN0IHFueDRfc3VwZXJfYmxvY2sgKikgYmgtPmJfZGF0YTsKIApAQCAtNDg5LDggKzQwOCw3IEBACiAKIAltZW1jcHkocW54NF9pbm9kZSwgcmF3X2lub2RlLCBRTlg0X0RJUl9FTlRSWV9TSVpFKTsKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQlpbm9kZS0+aV9vcCA9ICZxbng0X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfZm9wID0gJnFueDRfZmlsZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmZ2VuZXJpY19yb19mb3BzOwogCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZxbng0X2FvcHM7CiAJCXFueDRfaShpbm9kZSktPm1tdV9wcml2YXRlID0gaW5vZGUtPmlfc2l6ZTsKIAl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3FueDQvbmFtZWkuYyBiL2ZzL3FueDQvbmFtZWkuYwppbmRleCA1OTcyZWQyLi5hZTFlN2VkIDEwMDY0NAotLS0gYS9mcy9xbng0L25hbWVpLmMKKysrIGIvZnMvcW54NC9uYW1laS5jCkBAIC0xMzQsMTA4ICsxMzQsMyBAQAogCiAJcmV0dXJuIE5VTEw7CiB9Ci0KLSNpZmRlZiBDT05GSUdfUU5YNEZTX1JXCi1pbnQgcW54NF9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCi0JCXN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCVFOWDRERUJVRygoInFueDQ6IHFueDRfY3JlYXRlXG4iKSk7Ci0JaWYgKGRpciA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotaW50IHFueDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpkZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWludCByZXR2YWw7Ci0JaW50IGlubzsKLQotCVFOWDRERUJVRygoInFueDQ6IHFueDRfcm1kaXIgWyVzXVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSkpOwotCWxvY2tfa2VybmVsKCk7Ci0JYmggPSBxbng0X2ZpbmRfZW50cnkoZGVudHJ5LT5kX25hbWUubGVuLCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkgICAgICZkZSwgJmlubyk7Ci0JaWYgKGJoID09IE5VTEwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaWYgKGlub2RlLT5pX2lubyAhPSBpbm8pIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlbmRfcm1kaXI7Ci0JfQotI2lmIDAKLQlpZiAoIWVtcHR5X2Rpcihpbm9kZSkpIHsKLQkJcmV0dmFsID0gLUVOT1RFTVBUWTsKLQkJZ290byBlbmRfcm1kaXI7Ci0JfQotI2VuZGlmCi0JaWYgKGlub2RlLT5pX25saW5rICE9IDIpIHsKLQkJUU5YNERFQlVHKCgiZW1wdHkgZGlyZWN0b3J5IGhhcyBubGluayE9MiAoJWQpXG4iLCBpbm9kZS0+aV9ubGluaykpOwotCX0KLQlRTlg0REVCVUcoKCJxbng0OiBkZWxldGluZyBkaXJlY3RvcnlcbiIpKTsKLQlkZS0+ZGlfc3RhdHVzID0gMDsKLQltZW1zZXQoZGUtPmRpX2ZuYW1lLCAwLCBzaXplb2YgZGUtPmRpX2ZuYW1lKTsKLQlkZS0+ZGlfbW9kZSA9IDA7Ci0JbWFya19idWZmZXJfZGlydHlfaW5vZGUoYmgsIGRpcik7Ci0JY2xlYXJfbmxpbmsoaW5vZGUpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOwotCXJldHZhbCA9IDA7Ci0KLSAgICAgIGVuZF9ybWRpcjoKLQlicmVsc2UoYmgpOwotCi0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCBxbng0X3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IHFueDRfaW5vZGVfZW50cnkgKmRlOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IHJldHZhbDsKLQlpbnQgaW5vOwotCi0JUU5YNERFQlVHKCgicW54NDogcW54NF91bmxpbmsgWyVzXVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSkpOwotCWxvY2tfa2VybmVsKCk7Ci0JYmggPSBxbng0X2ZpbmRfZW50cnkoZGVudHJ5LT5kX25hbWUubGVuLCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkgICAgICZkZSwgJmlubyk7Ci0JaWYgKGJoID09IE5VTEwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaWYgKGlub2RlLT5pX2lubyAhPSBpbm8pIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlbmRfdW5saW5rOwotCX0KLQlyZXR2YWwgPSAtRVBFUk07Ci0JaWYgKCFpbm9kZS0+aV9ubGluaykgewotCQlRTlg0REVCVUcoKCJEZWxldGluZyBub25leGlzdGVudCBmaWxlICglczolbHUpLCAlZFxuIiwKLQkJCSAgIGlub2RlLT5pX3NiLT5zX2lkLAotCQkJICAgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9ubGluaykpOwotCQlpbm9kZS0+aV9ubGluayA9IDE7Ci0JfQotCWRlLT5kaV9zdGF0dXMgPSAwOwotCW1lbXNldChkZS0+ZGlfZm5hbWUsIDAsIHNpemVvZiBkZS0+ZGlfZm5hbWUpOwotCWRlLT5kaV9tb2RlID0gMDsKLQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgZGlyKTsKLQlkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKLQlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZTsKLQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7Ci0JcmV0dmFsID0gMDsKLQotZW5kX3VubGluazoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JYnJlbHNlKGJoKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3FueDQvcW54NC5oIGIvZnMvcW54NC9xbng0LmgKaW5kZXggOWVmYzA4OS4uMzNhNjA4NSAxMDA2NDQKLS0tIGEvZnMvcW54NC9xbng0LmgKKysrIGIvZnMvcW54NC9xbng0LmgKQEAgLTI5LDE3ICsyOSw5IEBACiAKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnFueDRfYnJlYWQoc3RydWN0IGlub2RlICosIGludCwgaW50KTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFueDRfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFueDRfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxbng0X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFueDRfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gaW50IHFueDRfaXNfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrKTsKLWV4dGVybiBpbnQgcW54NF9zZXRfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2ssIGludCBidXN5KTsKLWV4dGVybiBpbnQgcW54NF9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpOwotZXh0ZXJuIHZvaWQgcW54NF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWV4dGVybiB2b2lkIHFueDRfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWV4dGVybiBpbnQgcW54NF91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1leHRlcm4gaW50IHFueDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHFueDRfc2JfaW5mbyAqcW54NF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpkaWZmIC0tZ2l0IGEvZnMvcW54NC90cnVuY2F0ZS5jIGIvZnMvcW54NC90cnVuY2F0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTRkOWVlLi4wMDAwMDAwCi0tLSBhL2ZzL3FueDQvdHJ1bmNhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qIAotICogUU5YNCBmaWxlIHN5c3RlbSwgTGludXggaW1wbGVtZW50YXRpb24uCi0gKiAKLSAqIFZlcnNpb24gOiAwLjEKLSAqIAotICogVXNpbmcgcGFydHMgb2YgdGhlIHhpYWZzIGZpbGVzeXN0ZW0uCi0gKiAKLSAqIEhpc3RvcnkgOgotICogCi0gKiAzMC0wNi0xOTk4IGJ5IEZyYW5rIERFTklTIDogdWdseSBmaWxsZXIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSAicW54NC5oIgotCi0jaWZkZWYgQ09ORklHX1FOWDRGU19SVwotCi12b2lkIHFueDRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpZiAoIShTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwKLQkgICAgICBTX0lTTE5LKGlub2RlLT5pX21vZGUpKSkgewotCQlyZXR1cm47Ci0JfQotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCEoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkpIHsKLQkJLyogVE9ETyAqLwotCX0KLQlRTlg0REVCVUcoKCJxbng0OiBxbng0X3RydW5jYXRlIGNhbGxlZFxuIikpOwotCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCXVubG9ja19rZXJuZWwoKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCAzOGY3YmQ1Li4zOWI0OWM0IDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTE4MzksNyArMTgzOSw3IEBACiAvKgogICogRGVmaW5pdGlvbnMgb2YgZGlza3F1b3RhIG9wZXJhdGlvbnMuCiAgKi8KLXN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGRxdW90X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBkcXVvdF9vcGVyYXRpb25zID0gewogCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKIAkuZHJvcAkJPSBkcXVvdF9kcm9wLAogCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLApAQCAtMjQ2MSw3ICsyNDYxLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodmZzX3NldF9kcWluZm8pOwogCi1zdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHMgPSB7CiAJLnF1b3RhX29uCT0gdmZzX3F1b3RhX29uLAogCS5xdW90YV9vZmYJPSB2ZnNfcXVvdGFfb2ZmLAogCS5xdW90YV9zeW5jCT0gdmZzX3F1b3RhX3N5bmMsCmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBhN2YwMTEwLi5hNjA5MGFhIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTM0LDEyICszNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogc29tZSByYW5kb20gbnVtYmVyICovCi0jZGVmaW5lIFJBTUZTX01BR0lDCTB4ODU4NDU4ZjYKLQogI2RlZmluZSBSQU1GU19ERUZBVUxUX01PREUJMDc1NQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcmFtZnNfb3BzOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggN2FkZWE3NC4uZjBhZDA1ZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC02MTIsNyArNjEyLDcgQEAKIHN0YXRpYyBpbnQgcmVpc2VyZnNfd3JpdGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBjaGFyICosIGludCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyByZWlzZXJmc19xdW90YV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIHJlaXNlcmZzX3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLmluaXRpYWxpemUgPSBkcXVvdF9pbml0aWFsaXplLAogCS5kcm9wID0gZHF1b3RfZHJvcCwKIAkuYWxsb2Nfc3BhY2UgPSBkcXVvdF9hbGxvY19zcGFjZSwKQEAgLTYyOSw3ICs2MjksNyBAQAogCS5kZXN0cm95X2RxdW90CT0gZHF1b3RfZGVzdHJveSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHJlaXNlcmZzX3FjdGxfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHJlaXNlcmZzX3FjdGxfb3BlcmF0aW9ucyA9IHsKIAkucXVvdGFfb24gPSByZWlzZXJmc19xdW90YV9vbiwKIAkucXVvdGFfb2ZmID0gdmZzX3F1b3RhX29mZiwKIAkucXVvdGFfc3luYyA9IHZmc19xdW90YV9zeW5jLApkaWZmIC0tZ2l0IGEvZnMvcm9tZnMvc3VwZXIuYyBiL2ZzL3JvbWZzL3N1cGVyLmMKaW5kZXggNGFiM2MwMy4uNDdmMTMyZCAxMDA2NDQKLS0tIGEvZnMvcm9tZnMvc3VwZXIuYworKysgYi9mcy9yb21mcy9zdXBlci5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAkucmVhZGRpcgk9IHJvbWZzX3JlYWRkaXIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcm9tZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcm9tZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmxvb2t1cAkJPSByb21mc19sb29rdXAsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IDgwODQ4MzQuLmEyMDFmYzMgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC00MSwyMiArNDEsMjggQEAKICAqIGJldHRlciBzb2x1dGlvbnMuLgogICovCiAKKyNkZWZpbmUgTUFYX1NMQUNLCSgxMDAgKiBOU0VDX1BFUl9NU0VDKQorCiBzdGF0aWMgbG9uZyBfX2VzdGltYXRlX2FjY3VyYWN5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCiB7CiAJbG9uZyBzbGFjazsKIAlpbnQgZGl2ZmFjdG9yID0gMTAwMDsKIAorCWlmICh0di0+dHZfc2VjIDwgMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAodGFza19uaWNlKGN1cnJlbnQpID4gMCkKIAkJZGl2ZmFjdG9yID0gZGl2ZmFjdG9yIC8gNTsKIAorCWlmICh0di0+dHZfc2VjID4gTUFYX1NMQUNLIC8gKE5TRUNfUEVSX1NFQy9kaXZmYWN0b3IpKQorCQlyZXR1cm4gTUFYX1NMQUNLOworCiAJc2xhY2sgPSB0di0+dHZfbnNlYyAvIGRpdmZhY3RvcjsKIAlzbGFjayArPSB0di0+dHZfc2VjICogKE5TRUNfUEVSX1NFQy9kaXZmYWN0b3IpOwogCi0JaWYgKHNsYWNrID4gMTAwICogTlNFQ19QRVJfTVNFQykKLQkJc2xhY2sgPSAgMTAwICogTlNFQ19QRVJfTVNFQzsKKwlpZiAoc2xhY2sgPiBNQVhfU0xBQ0spCisJCXJldHVybiBNQVhfU0xBQ0s7CiAKLQlpZiAoc2xhY2sgPCAwKQotCQlzbGFjayA9IDA7CiAJcmV0dXJuIHNsYWNrOwogfQogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9wcm9jLmMgYi9mcy9zbWJmcy9wcm9jLmMKaW5kZXggOTQ2ODE2OC4uNzFjMjliNiAxMDA2NDQKLS0tIGEvZnMvc21iZnMvcHJvYy5jCisrKyBiL2ZzL3NtYmZzL3Byb2MuYwpAQCAtNTA5LDcgKzUwOSw3IEBACiAJCW1vbnRoID0gMjsKIAl9IGVsc2UgewogCQlubF9kYXkgPSAoeWVhciAmIDMpIHx8IGRheSA8PSA1OSA/IGRheSA6IGRheSAtIDE7Ci0JCWZvciAobW9udGggPSAwOyBtb250aCA8IDEyOyBtb250aCsrKQorCQlmb3IgKG1vbnRoID0gMTsgbW9udGggPCAxMjsgbW9udGgrKykKIAkJCWlmIChkYXlfblttb250aF0gPiBubF9kYXkpCiAJCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvc3VwZXIuYyBiL2ZzL3NxdWFzaGZzL3N1cGVyLmMKaW5kZXggY2I1ZmM1Ny4uNmMxOTdlZiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvc3VwZXIuYworKysgYi9mcy9zcXVhc2hmcy9zdXBlci5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAic3F1YXNoZnMuaCIKIAogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHNxdWFzaGZzX2ZzX3R5cGU7Ci1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3F1YXNoZnNfc3VwZXJfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNxdWFzaGZzX3N1cGVyX29wczsKIAogc3RhdGljIGludCBzdXBwb3J0ZWRfc3F1YXNoZnNfZmlsZXN5c3RlbShzaG9ydCBtYWpvciwgc2hvcnQgbWlub3IsIHNob3J0IGNvbXApCiB7CkBAIC00NDQsNyArNDQ0LDcgQEAKIAkuZnNfZmxhZ3MgPSBGU19SRVFVSVJFU19ERVYKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzcXVhc2hmc19zdXBlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3F1YXNoZnNfc3VwZXJfb3BzID0gewogCS5hbGxvY19pbm9kZSA9IHNxdWFzaGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID0gc3F1YXNoZnNfZGVzdHJveV9pbm9kZSwKIAkuc3RhdGZzID0gc3F1YXNoZnNfc3RhdGZzLApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggYjAzZmVhOC4uMGU3MjA3YiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3VwZXJfYmxvY2spLCAgR0ZQX1VTRVIpOwotCXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkZWZhdWx0X29wOworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkZWZhdWx0X29wOwogCiAJaWYgKHMpIHsKIAkJaWYgKHNlY3VyaXR5X3NiX2FsbG9jKHMpKSB7CmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggYzA4NDY3YS4uZDEwNDU5MSAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAJCXJldCA9IGVycjsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChmaWxlX2ZzeW5jKTsKIAogLyoqCiAgKiB2ZnNfZnN5bmNfcmFuZ2UgLSBoZWxwZXIgdG8gc3luYyBhIHJhbmdlIG9mIGRhdGEgJiBtZXRhZGF0YSB0byBkaXNrCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9idWRnZXQuYyBiL2ZzL3ViaWZzL2J1ZGdldC5jCmluZGV4IGVlMWNlNjguLjA3NmNhNTAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2J1ZGdldC5jCisrKyBiL2ZzL3ViaWZzL2J1ZGdldC5jCkBAIC03MTUsNyArNzE1LDcgQEAKICAqIHViaWZzX2dldF9mcmVlX3NwYWNlIC0gcmV0dXJuIGFtb3VudCBvZiBmcmVlIHNwYWNlLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbmQgcmV0dW5zIGFtb3VudCBvZiBmcmVlIHNwYWNlIHRvIHJlcG9ydCB0bworICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIGFtb3VudCBvZiBmcmVlIHNwYWNlIHRvIHJlcG9ydCB0bwogICogdXNlci1zcGFjZS4KICAqLwogbG9uZyBsb25nIHViaWZzX2dldF9mcmVlX3NwYWNlKHN0cnVjdCB1Ymlmc19pbmZvICpjKQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvY29tbWl0LmMgYi9mcy91Ymlmcy9jb21taXQuYwppbmRleCBmM2E3OTQ1Li40Nzc1YWY0IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9jb21taXQuYworKysgYi9mcy91Ymlmcy9jb21taXQuYwpAQCAtNTEwLDcgKzUxMCw3IEBACiAJaW50IGxudW0sIG9mZnMsIGxlbiwgZXJyID0gMCwgdW5pbml0aWFsaXplZF92YXIobGFzdF9sZXZlbCksIGNoaWxkX2NudDsKIAlpbnQgZmlyc3QgPSAxLCBpaXA7CiAJc3RydWN0IHViaWZzX2RlYnVnX2luZm8gKmQgPSBjLT5kYmc7Ci0JdW5pb24gdWJpZnNfa2V5IGxvd2VyX2tleSwgdXBwZXJfa2V5LCBsX2tleSwgdV9rZXk7CisJdW5pb24gdWJpZnNfa2V5IHVuaW5pdGlhbGl6ZWRfdmFyKGxvd2VyX2tleSksIHVwcGVyX2tleSwgbF9rZXksIHVfa2V5OwogCXVuc2lnbmVkIGxvbmcgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihsYXN0X3NxbnVtKTsKIAlzdHJ1Y3QgdWJpZnNfaWR4X25vZGUgKmlkeDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5jIGIvZnMvdWJpZnMvZGVidWcuYwppbmRleCBjZTJjZDgzLi5kYmMwOTNhIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5jCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmMKQEAgLTIxMCw2ICsyMTAsMjAgQEAKIAl9CiB9CiAKK2NvbnN0IGNoYXIgKmRiZ19qaGVhZChpbnQgamhlYWQpCit7CisJc3dpdGNoIChqaGVhZCkgeworCWNhc2UgR0NIRDoKKwkJcmV0dXJuICIwIChHQykiOworCWNhc2UgQkFTRUhEOgorCQlyZXR1cm4gIjEgKGJhc2UpIjsKKwljYXNlIERBVEFIRDoKKwkJcmV0dXJuICIyIChkYXRhKSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIGpvdXJuYWwgaGVhZCI7CisJfQorfQorCiBzdGF0aWMgdm9pZCBkdW1wX2NoKGNvbnN0IHN0cnVjdCB1Ymlmc19jaCAqY2gpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIlx0bWFnaWMgICAgICAgICAgJSN4XG4iLCBsZTMyX3RvX2NwdShjaC0+bWFnaWMpKTsKQEAgLTYyMyw4ICs2MzcsOSBAQAogCS8qIElmIHdlIGFyZSBpbiBSL08gbW9kZSwgam91cm5hbCBoZWFkcyBkbyBub3QgZXhpc3QgKi8KIAlpZiAoYy0+amhlYWRzKQogCQlmb3IgKGkgPSAwOyBpIDwgYy0+amhlYWRfY250OyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiXHRqaGVhZCAlZFx0IExFQiAlZFxuIiwKLQkJCSAgICAgICBjLT5qaGVhZHNbaV0ud2J1Zi5qaGVhZCwgYy0+amhlYWRzW2ldLndidWYubG51bSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiXHRqaGVhZCAlc1x0IExFQiAlZFxuIiwKKwkJCSAgICAgICBkYmdfamhlYWQoYy0+amhlYWRzW2ldLndidWYuamhlYWQpLAorCQkJICAgICAgIGMtPmpoZWFkc1tpXS53YnVmLmxudW0pOwogCWZvciAocmIgPSByYl9maXJzdCgmYy0+YnVkcyk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7CiAJCWJ1ZCA9IHJiX2VudHJ5KHJiLCBzdHJ1Y3QgdWJpZnNfYnVkLCByYik7CiAJCXByaW50ayhLRVJOX0RFQlVHICJcdGJ1ZCBMRUIgJWRcbiIsIGJ1ZC0+bG51bSk7CkBAIC02NDgsOSArNjYzLDkwIEBACiAKIHZvaWQgZGJnX2R1bXBfbHByb3AoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwKQogewotCXByaW50ayhLRVJOX0RFQlVHICJMRUIgJWQgbHByb3BzOiBmcmVlICVkLCBkaXJ0eSAlZCAodXNlZCAlZCksICIKLQkgICAgICAgImZsYWdzICUjeFxuIiwgbHAtPmxudW0sIGxwLT5mcmVlLCBscC0+ZGlydHksCi0JICAgICAgIGMtPmxlYl9zaXplIC0gbHAtPmZyZWUgLSBscC0+ZGlydHksIGxwLT5mbGFncyk7CisJaW50IGksIHNwYywgZGFyayA9IDAsIGRlYWQgPSAwOworCXN0cnVjdCByYl9ub2RlICpyYjsKKwlzdHJ1Y3QgdWJpZnNfYnVkICpidWQ7CisKKwlzcGMgPSBscC0+ZnJlZSArIGxwLT5kaXJ0eTsKKwlpZiAoc3BjIDwgYy0+ZGVhZF93bSkKKwkJZGVhZCA9IHNwYzsKKwllbHNlCisJCWRhcmsgPSB1Ymlmc19jYWxjX2RhcmsoYywgc3BjKTsKKworCWlmIChscC0+ZmxhZ3MgJiBMUFJPUFNfSU5ERVgpCisJCXByaW50ayhLRVJOX0RFQlVHICJMRUIgJS03ZCBmcmVlICUtOGQgZGlydHkgJS04ZCB1c2VkICUtOGQgIgorCQkgICAgICAgImZyZWUgKyBkaXJ0eSAlLThkIGZsYWdzICUjeCAoIiwgbHAtPmxudW0sIGxwLT5mcmVlLAorCQkgICAgICAgbHAtPmRpcnR5LCBjLT5sZWJfc2l6ZSAtIHNwYywgc3BjLCBscC0+ZmxhZ3MpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkxFQiAlLTdkIGZyZWUgJS04ZCBkaXJ0eSAlLThkIHVzZWQgJS04ZCAiCisJCSAgICAgICAiZnJlZSArIGRpcnR5ICUtOGQgZGFyayAlLTRkIGRlYWQgJS00ZCBub2RlcyBmaXQgJS0zZCAiCisJCSAgICAgICAiZmxhZ3MgJSMtNHggKCIsIGxwLT5sbnVtLCBscC0+ZnJlZSwgbHAtPmRpcnR5LAorCQkgICAgICAgYy0+bGViX3NpemUgLSBzcGMsIHNwYywgZGFyaywgZGVhZCwKKwkJICAgICAgIChpbnQpKHNwYyAvIFVCSUZTX01BWF9OT0RFX1NaKSwgbHAtPmZsYWdzKTsKKworCWlmIChscC0+ZmxhZ3MgJiBMUFJPUFNfVEFLRU4pIHsKKwkJaWYgKGxwLT5mbGFncyAmIExQUk9QU19JTkRFWCkKKwkJCXByaW50ayhLRVJOX0NPTlQgImluZGV4LCB0YWtlbiIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9DT05UICJ0YWtlbiIpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnM7CisKKwkJaWYgKGxwLT5mbGFncyAmIExQUk9QU19JTkRFWCkgeworCQkJc3dpdGNoIChscC0+ZmxhZ3MgJiBMUFJPUFNfQ0FUX01BU0spIHsKKwkJCWNhc2UgTFBST1BTX0RJUlRZX0lEWDoKKwkJCQlzID0gImRpcnR5IGluZGV4IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTFBST1BTX0ZSRElfSURYOgorCQkJCXMgPSAiZnJlZWFibGUgaW5kZXgiOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzID0gImluZGV4IjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAobHAtPmZsYWdzICYgTFBST1BTX0NBVF9NQVNLKSB7CisJCQljYXNlIExQUk9QU19VTkNBVDoKKwkJCQlzID0gIm5vdCBjYXRlZ29yaXplZCI7CisJCQkJYnJlYWs7CisJCQljYXNlIExQUk9QU19ESVJUWToKKwkJCQlzID0gImRpcnR5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTFBST1BTX0ZSRUU6CisJCQkJcyA9ICJmcmVlIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTFBST1BTX0VNUFRZOgorCQkJCXMgPSAiZW1wdHkiOworCQkJCWJyZWFrOworCQkJY2FzZSBMUFJPUFNfRlJFRUFCTEU6CisJCQkJcyA9ICJmcmVlYWJsZSI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXMgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgcyk7CisJfQorCisJZm9yIChyYiA9IHJiX2ZpcnN0KChzdHJ1Y3QgcmJfcm9vdCAqKSZjLT5idWRzKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKKwkJYnVkID0gcmJfZW50cnkocmIsIHN0cnVjdCB1Ymlmc19idWQsIHJiKTsKKwkJaWYgKGJ1ZC0+bG51bSA9PSBscC0+bG51bSkgeworCQkJaW50IGhlYWQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IGMtPmpoZWFkX2NudDsgaSsrKSB7CisJCQkJaWYgKGxwLT5sbnVtID09IGMtPmpoZWFkc1tpXS53YnVmLmxudW0pIHsKKwkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiLCBqaGVhZCAlcyIsCisJCQkJCSAgICAgICBkYmdfamhlYWQoaSkpOworCQkJCQloZWFkID0gMTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWhlYWQpCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiLCBidWQgb2YgamhlYWQgJXMiLAorCQkJCSAgICAgICBkYmdfamhlYWQoYnVkLT5qaGVhZCkpOworCQl9CisJfQorCWlmIChscC0+bG51bSA9PSBjLT5nY19sbnVtKQorCQlwcmludGsoS0VSTl9DT05UICIsIEdDIExFQiIpOworCXByaW50ayhLRVJOX0NPTlQgIilcbiIpOwogfQogCiB2b2lkIGRiZ19kdW1wX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKQEAgLTcyNCw3ICs4MjAsNyBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIihwaWQgJWQpIHN0YXJ0IGR1bXBpbmcgTEVCICVkXG4iLAogCSAgICAgICBjdXJyZW50LT5waWQsIGxudW0pOwotCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGMtPmRiZy0+YnVmKTsKKwlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5kYmctPmJ1ZiwgMCk7CiAJaWYgKElTX0VSUihzbGViKSkgewogCQl1Ymlmc19lcnIoInNjYW4gZXJyb3IgJWQiLCAoaW50KVBUUl9FUlIoc2xlYikpOwogCQlyZXR1cm47CkBAIC05MDksOCArMTAwNSwxMCBAQAogCXViaWZzX21zZygic2F2ZWQgbHByb3BzIHN0YXRpc3RpY3MgZHVtcCIpOwogCWRiZ19kdW1wX2xzdGF0cygmZC0+c2F2ZWRfbHN0KTsKIAl1Ymlmc19nZXRfbHBfc3RhdHMoYywgJmxzdCk7CisKIAl1Ymlmc19tc2coImN1cnJlbnQgbHByb3BzIHN0YXRpc3RpY3MgZHVtcCIpOwotCWRiZ19kdW1wX2xzdGF0cygmZC0+c2F2ZWRfbHN0KTsKKwlkYmdfZHVtcF9sc3RhdHMoJmxzdCk7CisKIAlzcGluX2xvY2soJmMtPnNwYWNlX2xvY2spOwogCWRiZ19kdW1wX2J1ZGcoYyk7CiAJc3Bpbl91bmxvY2soJmMtPnNwYWNlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZGVidWcuaCBiL2ZzL3ViaWZzL2RlYnVnLmgKaW5kZXggYzFjZDczYi4uMjlkOTYwMSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGVidWcuaAorKysgYi9mcy91Ymlmcy9kZWJ1Zy5oCkBAIC0yNzEsNiArMjcxLDcgQEAKIC8qIER1bXAgZnVuY3Rpb25zICovCiBjb25zdCBjaGFyICpkYmdfbnR5cGUoaW50IHR5cGUpOwogY29uc3QgY2hhciAqZGJnX2NzdGF0ZShpbnQgY210X3N0YXRlKTsKK2NvbnN0IGNoYXIgKmRiZ19qaGVhZChpbnQgamhlYWQpOwogY29uc3QgY2hhciAqZGJnX2dldF9rZXlfZHVtcChjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKIAkJCSAgICAgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkpOwogdm9pZCBkYmdfZHVtcF9pbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CkBAIC0zMjEsNiArMzIyLDggQEAKIGludCBkYmdfY2hlY2tfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGludCBkYmdfY2hlY2tfbHB0X25vZGVzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfY25vZGUgKmNub2RlLAogCQkJaW50IHJvdywgaW50IGNvbCk7CitpbnQgZGJnX2NoZWNrX2lub2RlX3NpemUoc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgbG9mZl90IHNpemUpOwogCiAvKiBGb3JjZSB0aGUgdXNlIG9mIGluLXRoZS1nYXBzIG1ldGhvZCBmb3IgdGVzdGluZyAqLwogCkBAIC00MjUsNiArNDI4LDcgQEAKIAogI2RlZmluZSBkYmdfbnR5cGUodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAiIgogI2RlZmluZSBkYmdfY3N0YXRlKGNtdF9zdGF0ZSkgICAgICAgICAgICAgICAgICAiIgorI2RlZmluZSBkYmdfamhlYWQoamhlYWQpICAgICAgICAgICAgICAgICAgICAgICAiIgogI2RlZmluZSBkYmdfZ2V0X2tleV9kdW1wKGMsIGtleSkgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2lub2RlKGMsIGlub2RlKSAgICAgICAgICAgICAgICh7fSkKICNkZWZpbmUgZGJnX2R1bXBfbm9kZShjLCBub2RlKSAgICAgICAgICAgICAgICAgKHt9KQpAQCAtNDYwLDYgKzQ2NCw3IEBACiAjZGVmaW5lIGRiZ19jaGVja19oZWFwKGMsIGhlYXAsIGNhdCwgYWRkX3BvcykgICAgICAoe30pCiAjZGVmaW5lIGRiZ19jaGVja19scHJvcHMoYykgICAgICAgICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19jaGVja19scHRfbm9kZXMoYywgY25vZGUsIHJvdywgY29sKSAgICAwCisjZGVmaW5lIGRiZ19jaGVja19pbm9kZV9zaXplKGMsIGlub2RlLCBzaXplKSAgICAgICAwCiAjZGVmaW5lIGRiZ19mb3JjZV9pbl90aGVfZ2Fwc19lbmFibGVkICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19mb3JjZV9pbl90aGVfZ2FwcygpICAgICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19mYWlsdXJlX21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maWxlLmMgYi9mcy91Ymlmcy9maWxlLmMKaW5kZXggNmQzNGRjNy4uMmU2NDgxYSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmlsZS5jCisrKyBiL2ZzL3ViaWZzL2ZpbGUuYwpAQCAtMjEsMzQgKzIxLDMyIEBACiAgKi8KIAogLyoKLSAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIFZGUyBmaWxlIGFuZCBpbm9kZSBvcGVyYXRpb25zIG9mIHJlZ3VsYXIgZmlsZXMsIGRldmljZQorICogVGhpcyBmaWxlIGltcGxlbWVudHMgVkZTIGZpbGUgYW5kIGlub2RlIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMsIGRldmljZQogICogbm9kZXMgYW5kIHN5bWxpbmtzIGFzIHdlbGwgYXMgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLgogICoKLSAqIFVCSUZTIHVzZXMgMiBwYWdlIGZsYWdzOiBQR19wcml2YXRlIGFuZCBQR19jaGVja2VkLiBQR19wcml2YXRlIGlzIHNldCBpZiB0aGUKLSAqIHBhZ2UgaXMgZGlydHkgYW5kIGlzIHVzZWQgZm9yIGJ1ZGdldGluZyBwdXJwb3NlcyAtIGRpcnR5IHBhZ2VzIHNob3VsZCBub3QgYmUKLSAqIGJ1ZGdldGVkLiBUaGUgUEdfY2hlY2tlZCBmbGFnIGlzIHNldCBpZiBmdWxsIGJ1ZGdldGluZyBpcyByZXF1aXJlZCBmb3IgdGhlCi0gKiBwYWdlIGUuZy4sIHdoZW4gaXQgY29ycmVzcG9uZHMgdG8gYSBmaWxlIGhvbGUgb3IgaXQgaXMganVzdCBiZXlvbmQgdGhlIGZpbGUKLSAqIHNpemUuIFRoZSBidWRnZXRpbmcgaXMgZG9uZSBpbiAndWJpZnNfd3JpdGVfYmVnaW4oKScsIGJlY2F1c2UgaXQgaXMgT0sgdG8KLSAqIGZhaWwgaW4gdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBidWRnZXQgaXMgcmVsZWFzZWQgaW4gJ3ViaWZzX3dyaXRlX2VuZCgpJy4gU28KLSAqIHRoZSBQR19wcml2YXRlIGFuZCBQR19jaGVja2VkIGZsYWdzIGNhcnJ5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHBhZ2UKLSAqIHdhcyBidWRnZXRlZCwgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byByZWxlYXNlIHRoZSBidWRnZXQgcHJvcGVybHkuCisgKiBVQklGUyB1c2VzIDIgcGFnZSBmbGFnczogQFBHX3ByaXZhdGUgYW5kIEBQR19jaGVja2VkLiBAUEdfcHJpdmF0ZSBpcyBzZXQgaWYKKyAqIHRoZSBwYWdlIGlzIGRpcnR5IGFuZCBpcyB1c2VkIGZvciBvcHRpbWl6YXRpb24gcHVycG9zZXMgLSBkaXJ0eSBwYWdlcyBhcmUKKyAqIG5vdCBidWRnZXRlZCBzbyB0aGUgZmxhZyBzaG93cyB0aGF0ICd1Ymlmc193cml0ZV9lbmQoKScgc2hvdWxkIG5vdCByZWxlYXNlCisgKiB0aGUgYnVkZ2V0IGZvciB0aGlzIHBhZ2UuIFRoZSBAUEdfY2hlY2tlZCBmbGFnIGlzIHNldCBpZiBmdWxsIGJ1ZGdldGluZyBpcworICogcmVxdWlyZWQgZm9yIHRoZSBwYWdlIGUuZy4sIHdoZW4gaXQgY29ycmVzcG9uZHMgdG8gYSBmaWxlIGhvbGUgb3IgaXQgaXMKKyAqIGJleW9uZCB0aGUgZmlsZSBzaXplLiBUaGUgYnVkZ2V0aW5nIGlzIGRvbmUgaW4gJ3ViaWZzX3dyaXRlX2JlZ2luKCknLCBiZWNhdXNlCisgKiBpdCBpcyBPSyB0byBmYWlsIGluIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgYnVkZ2V0IGlzIHJlbGVhc2VkIGluCisgKiAndWJpZnNfd3JpdGVfZW5kKCknLiBTbyB0aGUgQFBHX3ByaXZhdGUgYW5kIEBQR19jaGVja2VkIGZsYWdzIGNhcnJ5CisgKiBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHBhZ2Ugd2FzIGJ1ZGdldGVkLCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlbGVhc2UKKyAqIHRoZSBidWRnZXQgcHJvcGVybHkuCiAgKgotICogQSB0aGluZyB0byBrZWVwIGluIG1pbmQ6IGlub2RlJ3MgJ2lfbXV0ZXgnIGlzIGxvY2tlZCBpbiBtb3N0IFZGUyBvcGVyYXRpb25zCi0gKiB3ZSBpbXBsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHRydWUgZm9yICctPndyaXRlcGFnZSgpJywgd2hpY2ggbWlnaHQgYmUKLSAqIGNhbGxlZCB3aXRoICdpX211dGV4JyB1bmxvY2tlZC4gRm9yIGV4YW1wbGUsIHdoZW4gcGRmbHVzaCBpcyBwZXJmb3JtaW5nCi0gKiB3cml0ZS1iYWNrLCBpdCBjYWxscyAnd3JpdGVwYWdlKCknIHdpdGggdW5sb2NrZWQgJ2lfbXV0ZXgnLCBhbHRob3VnaCB0aGUKLSAqIGlub2RlIGhhcyAnSV9MT0NLJyBmbGFnIGluIHRoaXMgY2FzZS4gQXQgIm5vcm1hbCIgd29yay1wYXRocyAnaV9tdXRleCcgaXMKLSAqIGxvY2tlZCBpbiAnLT53cml0ZXBhZ2UnLCBlLmcuIGluICJzeXNfd3JpdGUgLT4gYWxsb2NfcGFnZXMgLT4gZGlyZWN0IHJlY2xhaW0KLSAqIHBhdGgnLiBTbywgaW4gJy0+d3JpdGVwYWdlKCknIHdlIGFyZSBvbmx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgcGFnZSBpcwotICogbG9ja2VkLgorICogQSB0aGluZyB0byBrZWVwIGluIG1pbmQ6IGlub2RlIEBpX211dGV4IGlzIGxvY2tlZCBpbiBtb3N0IFZGUyBvcGVyYXRpb25zIHdlCisgKiBpbXBsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHRydWUgZm9yICd1Ymlmc193cml0ZXBhZ2UoKScsIHdoaWNoIG1heSBiZQorICogY2FsbGVkIHdpdGggQGlfbXV0ZXggdW5sb2NrZWQuIEZvciBleGFtcGxlLCB3aGVuIHBkZmx1c2ggaXMgZG9pbmcgYmFja2dyb3VuZAorICogd3JpdGUtYmFjaywgaXQgY2FsbHMgJ3ViaWZzX3dyaXRlcGFnZSgpJyB3aXRoIHVubG9ja2VkIEBpX211dGV4LiBBdCAibm9ybWFsIgorICogd29yay1wYXRocyB0aGUgQGlfbXV0ZXggaXMgbG9ja2VkIGluICd1Ymlmc193cml0ZXBhZ2UoKScsIGUuZy4gaW4gdGhlCisgKiAic3lzX3dyaXRlIC0+IGFsbG9jX3BhZ2VzIC0+IGRpcmVjdCByZWNsYWltIHBhdGgiLiBTbywgaW4gJ3ViaWZzX3dyaXRlcGFnZSgpJworICogd2UgYXJlIG9ubHkgZ3VhcmFudGVlZCB0aGF0IHRoZSBwYWdlIGlzIGxvY2tlZC4KICAqCi0gKiBTaW1pbGFybHksICdpX211dGV4JyBkb2VzIG5vdCBoYXZlIHRvIGJlIGxvY2tlZCBpbiByZWFkcGFnZSgpLCBlLmcuLAotICogcmVhZGFoZWFkIHBhdGggZG9lcyBub3QgaGF2ZSBpdCBsb2NrZWQgKCJzeXNfcmVhZCAtPiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQKLSAqIC0+IG9uZGVtYW5kX3JlYWRhaGVhZCAtPiByZWFkcGFnZSIpLiBJbiBjYXNlIG9mIHJlYWRhaGVhZCwgJ0lfTE9DSycgZmxhZyBpcwotICogbm90IHNldCBhcyB3ZWxsLiBIb3dldmVyLCBVQklGUyBkaXNhYmxlcyByZWFkYWhlYWQuCi0gKgotICogVGhpcywgZm9yIGV4YW1wbGUgbWVhbnMgdGhhdCB0aGVyZSBtaWdodCBiZSAyIGNvbmN1cnJlbnQgJy0+d3JpdGVwYWdlKCknCi0gKiBjYWxscyBmb3IgdGhlIHNhbWUgaW5vZGUsIGJ1dCBkaWZmZXJlbnQgaW5vZGUgZGlydHkgcGFnZXMuCisgKiBTaW1pbGFybHksIEBpX211dGV4IGlzIG5vdCBhbHdheXMgbG9ja2VkIGluICd1Ymlmc19yZWFkcGFnZSgpJywgZS5nLiwgdGhlCisgKiByZWFkLWFoZWFkIHBhdGggZG9lcyBub3QgbG9jayBpdCAoInN5c19yZWFkIC0+IGdlbmVyaWNfZmlsZV9haW9fcmVhZCAtPgorICogb25kZW1hbmRfcmVhZGFoZWFkIC0+IHJlYWRwYWdlIikuIEluIGNhc2Ugb2YgcmVhZGFoZWFkLCBASV9MT0NLIGZsYWcgaXMgbm90CisgKiBzZXQgYXMgd2VsbC4gSG93ZXZlciwgVUJJRlMgZGlzYWJsZXMgcmVhZGFoZWFkLgogICovCiAKICNpbmNsdWRlICJ1Ymlmcy5oIgpAQCAtNDQ5LDkgKzQ0Nyw5IEBACiAJCQkvKgogCQkJICogV2UgY2hhbmdlIHdob2xlIHBhZ2Ugc28gbm8gbmVlZCB0byBsb2FkIGl0LiBCdXQgd2UKIAkJCSAqIGhhdmUgdG8gc2V0IHRoZSBAUEdfY2hlY2tlZCBmbGFnIHRvIG1ha2UgdGhlIGZ1cnRoZXIKLQkJCSAqIGNvZGUgdGhlIHBhZ2UgaXMgbmV3LiBUaGlzIG1pZ2h0IGJlIG5vdCB0cnVlLCBidXQgaXQKLQkJCSAqIGlzIGJldHRlciB0byBidWRnZXQgbW9yZSB0aGF0IHRvIHJlYWQgdGhlIHBhZ2UgZnJvbQotCQkJICogdGhlIG1lZGlhLgorCQkJICogY29kZSBrbm93IHRoYXQgdGhlIHBhZ2UgaXMgbmV3LiBUaGlzIG1pZ2h0IGJlIG5vdAorCQkJICogdHJ1ZSwgYnV0IGl0IGlzIGJldHRlciB0byBidWRnZXQgbW9yZSB0aGFuIHRvIHJlYWQKKwkJCSAqIHRoZSBwYWdlIGZyb20gdGhlIG1lZGlhLgogCQkJICovCiAJCQlTZXRQYWdlQ2hlY2tlZChwYWdlKTsKIAkJCXNraXBwZWRfcmVhZCA9IDE7CkBAIC00OTcsOCArNDk1LDggQEAKIAl9CiAKIAkvKgotCSAqIFdoZWUsIHdlIGFxdWlyZWQgYnVkZ2V0aW5nIHF1aWNrbHkgLSB3aXRob3V0IGludm9sdmluZwotCSAqIGdhcmJhZ2UtY29sbGVjdGlvbiwgY29tbWl0dGluZyBvciBmb3JjZWluZyB3cml0ZS1iYWNrLiBXZSByZXR1cm4KKwkgKiBXaGVlLCB3ZSBhY3F1aXJlZCBidWRnZXRpbmcgcXVpY2tseSAtIHdpdGhvdXQgaW52b2x2aW5nCisJICogZ2FyYmFnZS1jb2xsZWN0aW9uLCBjb21taXR0aW5nIG9yIGZvcmNpbmcgd3JpdGUtYmFjay4gV2UgcmV0dXJuCiAJICogd2l0aCBAdWktPnVpX211dGV4IGxvY2tlZCBpZiB3ZSBhcmUgYXBwZW5kaW5nIHBhZ2VzLCBhbmQgdW5sb2NrZWQKIAkgKiBvdGhlcndpc2UuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIChzbGlnaHRseSBoYWNreSB0aG91Z2gpLgogCSAqLwpAQCAtNTYyLDcgKzU2MCw3IEBACiAKIAkJLyoKIAkJICogUmV0dXJuIDAgdG8gZm9yY2UgVkZTIHRvIHJlcGVhdCB0aGUgd2hvbGUgb3BlcmF0aW9uLCBvciB0aGUKLQkJICogZXJyb3IgY29kZSBpZiAnZG9fcmVhZHBhZ2UoKScgZmFpbGVzLgorCQkgKiBlcnJvciBjb2RlIGlmICdkb19yZWFkcGFnZSgpJyBmYWlscy4KIAkJICovCiAJCWNvcGllZCA9IGRvX3JlYWRwYWdlKHBhZ2UpOwogCQlnb3RvIG91dDsKQEAgLTExNzUsMTEgKzExNzMsMTEgQEAKIAl1aS0+dWlfc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJLyogVHJ1bmNhdGlvbiBjaGFuZ2VzIGlub2RlIFttY110aW1lICovCiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHViaWZzX2N1cnJlbnRfdGltZShpbm9kZSk7Ci0JLyogVGhlIG90aGVyIGF0dHJpYnV0ZXMgbWF5IGJlIGNoYW5nZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZWxsICovCisJLyogT3RoZXIgYXR0cmlidXRlcyBtYXkgYmUgY2hhbmdlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlbGwgKi8KIAlkb19hdHRyX2NoYW5nZXMoaW5vZGUsIGF0dHIpOwotCiAJZXJyID0gdWJpZnNfam5sX3RydW5jYXRlKGMsIGlub2RlLCBvbGRfc2l6ZSwgbmV3X3NpemUpOwogCW11dGV4X3VubG9jaygmdWktPnVpX211dGV4KTsKKwogb3V0X2J1ZGc6CiAJaWYgKGJ1ZGdldGVkKQogCQl1Ymlmc19yZWxlYXNlX2J1ZGdldChjLCAmcmVxKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2djLmMgYi9mcy91Ymlmcy9nYy5jCmluZGV4IGYwZjVmMTUuLjYxOGMyNzAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2djLmMKKysrIGIvZnMvdWJpZnMvZ2MuYwpAQCAtNTI5LDcgKzUyOSw3IEBACiAJICogV2Ugc2NhbiB0aGUgZW50aXJlIExFQiBldmVuIHRob3VnaCB3ZSBvbmx5IHJlYWxseSBuZWVkIHRvIHNjYW4gdXAgdG8KIAkgKiAoYy0+bGViX3NpemUgLSBscC0+ZnJlZSkuCiAJICovCi0Jc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMCk7CiAJaWYgKElTX0VSUihzbGViKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2xlYik7CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2lvLmMgYi9mcy91Ymlmcy9pby5jCmluZGV4IDc2MmE3ZDYuLmU1ODlmZWQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2lvLmMKKysrIGIvZnMvdWJpZnMvaW8uYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiB7CiAJc3RydWN0IHViaWZzX3didWYgKndidWYgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB1Ymlmc193YnVmLCB0aW1lcik7CiAKLQlkYmdfaW8oImpoZWFkICVkIiwgd2J1Zi0+amhlYWQpOworCWRiZ19pbygiamhlYWQgJXMiLCBkYmdfamhlYWQod2J1Zi0+amhlYWQpKTsKIAl3YnVmLT5uZWVkX3N5bmMgPSAxOwogCXdidWYtPmMtPm5lZWRfd2J1Zl9zeW5jID0gMTsKIAl1Ymlmc193YWtlX3VwX2JndCh3YnVmLT5jKTsKQEAgLTMxNCw3ICszMTQsOCBAQAogCiAJaWYgKHdidWYtPm5vX3RpbWVyKQogCQlyZXR1cm47Ci0JZGJnX2lvKCJzZXQgdGltZXIgZm9yIGpoZWFkICVkLCAlbGx1LSVsbHUgbWlsbGlzZWNzIiwgd2J1Zi0+amhlYWQsCisJZGJnX2lvKCJzZXQgdGltZXIgZm9yIGpoZWFkICVzLCAlbGx1LSVsbHUgbWlsbGlzZWNzIiwKKwkgICAgICAgZGJnX2poZWFkKHdidWYtPmpoZWFkKSwKIAkgICAgICAgZGl2X3U2NChrdGltZV90b19ucyh3YnVmLT5zb2Z0bGltaXQpLCBVU0VDX1BFUl9TRUMpLAogCSAgICAgICBkaXZfdTY0KGt0aW1lX3RvX25zKHdidWYtPnNvZnRsaW1pdCkgKyB3YnVmLT5kZWx0YSwKIAkJICAgICAgIFVTRUNfUEVSX1NFQykpOwpAQCAtMzUxLDggKzM1Miw4IEBACiAJCS8qIFdyaXRlLWJ1ZmZlciBpcyBlbXB0eSBvciBub3Qgc2Vla2VkICovCiAJCXJldHVybiAwOwogCi0JZGJnX2lvKCJMRUIgJWQ6JWQsICVkIGJ5dGVzLCBqaGVhZCAlZCIsCi0JICAgICAgIHdidWYtPmxudW0sIHdidWYtPm9mZnMsIHdidWYtPnVzZWQsIHdidWYtPmpoZWFkKTsKKwlkYmdfaW8oIkxFQiAlZDolZCwgJWQgYnl0ZXMsIGpoZWFkICVzIiwKKwkgICAgICAgd2J1Zi0+bG51bSwgd2J1Zi0+b2Zmcywgd2J1Zi0+dXNlZCwgZGJnX2poZWFkKHdidWYtPmpoZWFkKSk7CiAJdWJpZnNfYXNzZXJ0KCEoYy0+dmZzX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSk7CiAJdWJpZnNfYXNzZXJ0KCEod2J1Zi0+YXZhaWwgJiA3KSk7CiAJdWJpZnNfYXNzZXJ0KHdidWYtPm9mZnMgKyBjLT5taW5faW9fc2l6ZSA8PSBjLT5sZWJfc2l6ZSk7CkBAIC00MDEsNyArNDAyLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IHdidWYtPmM7CiAKLQlkYmdfaW8oIkxFQiAlZDolZCwgamhlYWQgJWQiLCBsbnVtLCBvZmZzLCB3YnVmLT5qaGVhZCk7CisJZGJnX2lvKCJMRUIgJWQ6JWQsIGpoZWFkICVzIiwgbG51bSwgb2ZmcywgZGJnX2poZWFkKHdidWYtPmpoZWFkKSk7CiAJdWJpZnNfYXNzZXJ0KGxudW0gPj0gMCAmJiBsbnVtIDwgYy0+bGViX2NudCk7CiAJdWJpZnNfYXNzZXJ0KG9mZnMgPj0gMCAmJiBvZmZzIDw9IGMtPmxlYl9zaXplKTsKIAl1Ymlmc19hc3NlcnQob2ZmcyAlIGMtPm1pbl9pb19zaXplID09IDAgJiYgIShvZmZzICYgNykpOwpAQCAtNTA4LDkgKzUwOSw5IEBACiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSB3YnVmLT5jOwogCWludCBlcnIsIHdyaXR0ZW4sIG4sIGFsaWduZWRfbGVuID0gQUxJR04obGVuLCA4KSwgb2ZmczsKIAotCWRiZ19pbygiJWQgYnl0ZXMgKCVzKSB0byBqaGVhZCAlZCB3YnVmIGF0IExFQiAlZDolZCIsIGxlbiwKLQkgICAgICAgZGJnX250eXBlKCgoc3RydWN0IHViaWZzX2NoICopYnVmKS0+bm9kZV90eXBlKSwgd2J1Zi0+amhlYWQsCi0JICAgICAgIHdidWYtPmxudW0sIHdidWYtPm9mZnMgKyB3YnVmLT51c2VkKTsKKwlkYmdfaW8oIiVkIGJ5dGVzICglcykgdG8gamhlYWQgJXMgd2J1ZiBhdCBMRUIgJWQ6JWQiLCBsZW4sCisJICAgICAgIGRiZ19udHlwZSgoKHN0cnVjdCB1Ymlmc19jaCAqKWJ1ZiktPm5vZGVfdHlwZSksCisJICAgICAgIGRiZ19qaGVhZCh3YnVmLT5qaGVhZCksIHdidWYtPmxudW0sIHdidWYtPm9mZnMgKyB3YnVmLT51c2VkKTsKIAl1Ymlmc19hc3NlcnQobGVuID4gMCAmJiB3YnVmLT5sbnVtID49IDAgJiYgd2J1Zi0+bG51bSA8IGMtPmxlYl9jbnQpOwogCXViaWZzX2Fzc2VydCh3YnVmLT5vZmZzID49IDAgJiYgd2J1Zi0+b2ZmcyAlIGMtPm1pbl9pb19zaXplID09IDApOwogCXViaWZzX2Fzc2VydCghKHdidWYtPm9mZnMgJiA3KSAmJiB3YnVmLT5vZmZzIDw9IGMtPmxlYl9zaXplKTsKQEAgLTUzNSw4ICs1MzYsOCBAQAogCQltZW1jcHkod2J1Zi0+YnVmICsgd2J1Zi0+dXNlZCwgYnVmLCBsZW4pOwogCiAJCWlmIChhbGlnbmVkX2xlbiA9PSB3YnVmLT5hdmFpbCkgewotCQkJZGJnX2lvKCJmbHVzaCBqaGVhZCAlZCB3YnVmIHRvIExFQiAlZDolZCIsCi0JCQkgICAgICAgd2J1Zi0+amhlYWQsIHdidWYtPmxudW0sIHdidWYtPm9mZnMpOworCQkJZGJnX2lvKCJmbHVzaCBqaGVhZCAlcyB3YnVmIHRvIExFQiAlZDolZCIsCisJCQkgICAgICAgZGJnX2poZWFkKHdidWYtPmpoZWFkKSwgd2J1Zi0+bG51bSwgd2J1Zi0+b2Zmcyk7CiAJCQllcnIgPSB1YmlfbGViX3dyaXRlKGMtPnViaSwgd2J1Zi0+bG51bSwgd2J1Zi0+YnVmLAogCQkJCQkgICAgd2J1Zi0+b2ZmcywgYy0+bWluX2lvX3NpemUsCiAJCQkJCSAgICB3YnVmLT5kdHlwZSk7CkBAIC01NjQsOCArNTY1LDggQEAKIAkgKiBtaW5pbWFsIEkvTyB1bml0LiBXZSBoYXZlIHRvIGZpbGwgYW5kIGZsdXNoIHdyaXRlLWJ1ZmZlciBhbmQgc3dpdGNoCiAJICogdG8gdGhlIG5leHQgbWluLiBJL08gdW5pdC4KIAkgKi8KLQlkYmdfaW8oImZsdXNoIGpoZWFkICVkIHdidWYgdG8gTEVCICVkOiVkIiwKLQkgICAgICAgd2J1Zi0+amhlYWQsIHdidWYtPmxudW0sIHdidWYtPm9mZnMpOworCWRiZ19pbygiZmx1c2ggamhlYWQgJXMgd2J1ZiB0byBMRUIgJWQ6JWQiLAorCSAgICAgICBkYmdfamhlYWQod2J1Zi0+amhlYWQpLCB3YnVmLT5sbnVtLCB3YnVmLT5vZmZzKTsKIAltZW1jcHkod2J1Zi0+YnVmICsgd2J1Zi0+dXNlZCwgYnVmLCB3YnVmLT5hdmFpbCk7CiAJZXJyID0gdWJpX2xlYl93cml0ZShjLT51YmksIHdidWYtPmxudW0sIHdidWYtPmJ1Ziwgd2J1Zi0+b2ZmcywKIAkJCSAgICBjLT5taW5faW9fc2l6ZSwgd2J1Zi0+ZHR5cGUpOwpAQCAtNjk4LDggKzY5OSw4IEBACiAJaW50IGVyciwgcmxlbiwgb3ZlcmxhcDsKIAlzdHJ1Y3QgdWJpZnNfY2ggKmNoID0gYnVmOwogCi0JZGJnX2lvKCJMRUIgJWQ6JWQsICVzLCBsZW5ndGggJWQsIGpoZWFkICVkIiwgbG51bSwgb2ZmcywKLQkgICAgICAgZGJnX250eXBlKHR5cGUpLCBsZW4sIHdidWYtPmpoZWFkKTsKKwlkYmdfaW8oIkxFQiAlZDolZCwgJXMsIGxlbmd0aCAlZCwgamhlYWQgJXMiLCBsbnVtLCBvZmZzLAorCSAgICAgICBkYmdfbnR5cGUodHlwZSksIGxlbiwgZGJnX2poZWFkKHdidWYtPmpoZWFkKSk7CiAJdWJpZnNfYXNzZXJ0KHdidWYgJiYgbG51bSA+PSAwICYmIGxudW0gPCBjLT5sZWJfY250ICYmIG9mZnMgPj0gMCk7CiAJdWJpZnNfYXNzZXJ0KCEob2ZmcyAmIDcpICYmIG9mZnMgPCBjLT5sZWJfc2l6ZSk7CiAJdWJpZnNfYXNzZXJ0KHR5cGUgPj0gMCAmJiB0eXBlIDwgVUJJRlNfTk9ERV9UWVBFU19DTlQpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvam91cm5hbC5jIGIvZnMvdWJpZnMvam91cm5hbC5jCmluZGV4IDY0YjVmM2EuLmQzMjFiYWUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2pvdXJuYWwuYworKysgYi9mcy91Ymlmcy9qb3VybmFsLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCSAqIHNvbWUuIEJ1dCB0aGUgd3JpdGUtYnVmZmVyIG11dGV4IGhhcyB0byBiZSB1bmxvY2tlZCBiZWNhdXNlCiAJICogR0MgYWxzbyB0YWtlcyBpdC4KIAkgKi8KLQlkYmdfam5sKCJubyBmcmVlIHNwYWNlICBqaGVhZCAlZCwgcnVuIEdDIiwgamhlYWQpOworCWRiZ19qbmwoIm5vIGZyZWUgc3BhY2UgaW4gamhlYWQgJXMsIHJ1biBHQyIsIGRiZ19qaGVhZChqaGVhZCkpOwogCW11dGV4X3VubG9jaygmd2J1Zi0+aW9fbXV0ZXgpOwogCiAJbG51bSA9IHViaWZzX2dhcmJhZ2VfY29sbGVjdChjLCAwKTsKQEAgLTE3Myw3ICsxNzMsOCBAQAogCQkgKiBiZWNhdXNlIHdlIGRyb3BwZWQgQHdidWYtPmlvX211dGV4LCBzbyB0cnkgb25jZQogCQkgKiBhZ2Fpbi4KIAkJICovCi0JCWRiZ19qbmwoIkdDIGNvdWxkbid0IG1ha2UgYSBmcmVlIExFQiBmb3IgamhlYWQgJWQiLCBqaGVhZCk7CisJCWRiZ19qbmwoIkdDIGNvdWxkbid0IG1ha2UgYSBmcmVlIExFQiBmb3IgamhlYWQgJXMiLAorCQkJZGJnX2poZWFkKGpoZWFkKSk7CiAJCWlmIChyZXRyaWVzKysgPCAyKSB7CiAJCQlkYmdfam5sKCJyZXRyeSAoJWQpIiwgcmV0cmllcyk7CiAJCQlnb3RvIGFnYWluOwpAQCAtMTg0LDcgKzE4NSw3IEBACiAJfQogCiAJbXV0ZXhfbG9ja19uZXN0ZWQoJndidWYtPmlvX211dGV4LCB3YnVmLT5qaGVhZCk7Ci0JZGJnX2pubCgiZ290IExFQiAlZCBmb3IgamhlYWQgJWQiLCBsbnVtLCBqaGVhZCk7CisJZGJnX2pubCgiZ290IExFQiAlZCBmb3IgamhlYWQgJXMiLCBsbnVtLCBkYmdfamhlYWQoamhlYWQpKTsKIAlhdmFpbCA9IGMtPmxlYl9zaXplIC0gd2J1Zi0+b2ZmcyAtIHdidWYtPnVzZWQ7CiAKIAlpZiAod2J1Zi0+bG51bSAhPSAtMSAmJiBhdmFpbCA+PSBsZW4pIHsKQEAgLTI1NSw3ICsyNTYsOCBAQAogCSpsbnVtID0gYy0+amhlYWRzW2poZWFkXS53YnVmLmxudW07CiAJKm9mZnMgPSBjLT5qaGVhZHNbamhlYWRdLndidWYub2ZmcyArIGMtPmpoZWFkc1tqaGVhZF0ud2J1Zi51c2VkOwogCi0JZGJnX2pubCgiamhlYWQgJWQsIExFQiAlZDolZCwgbGVuICVkIiwgamhlYWQsICpsbnVtLCAqb2ZmcywgbGVuKTsKKwlkYmdfam5sKCJqaGVhZCAlcywgTEVCICVkOiVkLCBsZW4gJWQiLAorCQlkYmdfamhlYWQoamhlYWQpLCAqbG51bSwgKm9mZnMsIGxlbik7CiAJdWJpZnNfcHJlcGFyZV9ub2RlKGMsIG5vZGUsIGxlbiwgMCk7CiAKIAlyZXR1cm4gdWJpZnNfd2J1Zl93cml0ZV9ub2xvY2sod2J1Ziwgbm9kZSwgbGVuKTsKQEAgLTI4NSw3ICsyODcsOCBAQAogCiAJKmxudW0gPSBjLT5qaGVhZHNbamhlYWRdLndidWYubG51bTsKIAkqb2ZmcyA9IGMtPmpoZWFkc1tqaGVhZF0ud2J1Zi5vZmZzICsgYy0+amhlYWRzW2poZWFkXS53YnVmLnVzZWQ7Ci0JZGJnX2pubCgiamhlYWQgJWQsIExFQiAlZDolZCwgbGVuICVkIiwgamhlYWQsICpsbnVtLCAqb2ZmcywgbGVuKTsKKwlkYmdfam5sKCJqaGVhZCAlcywgTEVCICVkOiVkLCBsZW4gJWQiLAorCQlkYmdfamhlYWQoamhlYWQpLCAqbG51bSwgKm9mZnMsIGxlbik7CiAKIAllcnIgPSB1Ymlmc193YnVmX3dyaXRlX25vbG9jayh3YnVmLCBidWYsIGxlbik7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2tleS5oIGIvZnMvdWJpZnMva2V5LmgKaW5kZXggNWZhMjdlYS4uMGY1MzBjNiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMva2V5LmgKKysrIGIvZnMvdWJpZnMva2V5LmgKQEAgLTIyOSwyMyArMjI5LDYgQEAKIH0KIAogLyoqCi0gKiB4ZW50X2tleV9pbml0X2hhc2ggLSBpbml0aWFsaXplIGV4dGVuZGVkIGF0dHJpYnV0ZSBlbnRyeSBrZXkgd2l0aG91dAotICogICAgICAgICAgICAgICAgICAgICAgcmUtY2FsY3VsYXRpbmcgaGFzaCBmdW5jdGlvbi4KLSAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqIEBrZXk6IGtleSB0byBpbml0aWFsaXplCi0gKiBAaW51bTogaG9zdCBpbm9kZSBudW1iZXIKLSAqIEBoYXNoOiBleHRlbmRlZCBhdHRyaWJ1dGUgZW50cnkgbmFtZSBoYXNoCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZW50X2tleV9pbml0X2hhc2goY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCi0JCQkJICAgICAgdW5pb24gdWJpZnNfa2V5ICprZXksIGlub190IGludW0sCi0JCQkJICAgICAgdWludDMyX3QgaGFzaCkKLXsKLQl1Ymlmc19hc3NlcnQoIShoYXNoICYgflVCSUZTX1NfS0VZX0hBU0hfTUFTSykpOwotCWtleS0+dTMyWzBdID0gaW51bTsKLQlrZXktPnUzMlsxXSA9IGhhc2ggfCAoVUJJRlNfWEVOVF9LRVkgPDwgVUJJRlNfU19LRVlfSEFTSF9CSVRTKTsKLX0KLQotLyoqCiAgKiB4ZW50X2tleV9pbml0X2ZsYXNoIC0gaW5pdGlhbGl6ZSBvbi1mbGFzaCBleHRlbmRlZCBhdHRyaWJ1dGUgZW50cnkga2V5LgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGs6IGtleSB0byBpbml0aWFsaXplCkBAIC0yOTUsMjIgKzI3OCwxNSBAQAogfQogCiAvKioKLSAqIGRhdGFfa2V5X2luaXRfZmxhc2ggLSBpbml0aWFsaXplIG9uLWZsYXNoIGRhdGEga2V5LgorICogaGlnaGVzdF9kYXRhX2tleSAtIGdldCB0aGUgaGlnaGVzdCBwb3NzaWJsZSBkYXRhIGtleSBmb3IgYW4gaW5vZGUuCiAgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0Ci0gKiBAazoga2V5IHRvIGluaXRpYWxpemUKKyAqIEBrZXk6IGtleSB0byBpbml0aWFsaXplCiAgKiBAaW51bTogaW5vZGUgbnVtYmVyCi0gKiBAYmxvY2s6IGJsb2NrIG51bWJlcgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZGF0YV9rZXlfaW5pdF9mbGFzaChjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqaywKLQkJCQkgICAgICAgaW5vX3QgaW51bSwgdW5zaWduZWQgaW50IGJsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGhpZ2hlc3RfZGF0YV9rZXkoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICAgdW5pb24gdWJpZnNfa2V5ICprZXksIGlub190IGludW0pCiB7Ci0JdW5pb24gdWJpZnNfa2V5ICprZXkgPSBrOwotCi0JdWJpZnNfYXNzZXJ0KCEoYmxvY2sgJiB+VUJJRlNfU19LRVlfQkxPQ0tfTUFTSykpOwotCWtleS0+ajMyWzBdID0gY3B1X3RvX2xlMzIoaW51bSk7Ci0Ja2V5LT5qMzJbMV0gPSBjcHVfdG9fbGUzMihibG9jayB8Ci0JCQkJICAoVUJJRlNfREFUQV9LRVkgPDwgVUJJRlNfU19LRVlfQkxPQ0tfQklUUykpOwotCW1lbXNldChrICsgOCwgMCwgVUJJRlNfTUFYX0tFWV9MRU4gLSA4KTsKKwlkYXRhX2tleV9pbml0KGMsIGtleSwgaW51bSwgVUJJRlNfU19LRVlfQkxPQ0tfTUFTSyk7CiB9CiAKIC8qKgpAQCAtNTU0LDQgKzUzMCw1IEBACiAJCXJldHVybiAwOwogCX0KIH0KKwogI2VuZGlmIC8qICFfX1VCSUZTX0tFWV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xvZy5jIGIvZnMvdWJpZnMvbG9nLmMKaW5kZXggNTZlMzM3Ny4uYzM0NWUxMiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbG9nLmMKKysrIGIvZnMvdWJpZnMvbG9nLmMKQEAgLTE2OSw4ICsxNjksOCBAQAogCSAqLwogCWMtPmJ1ZF9ieXRlcyArPSBjLT5sZWJfc2l6ZSAtIGJ1ZC0+c3RhcnQ7CiAKLQlkYmdfbG9nKCJMRUIgJWQ6JWQsIGpoZWFkICVkLCBidWRfYnl0ZXMgJWxsZCIsIGJ1ZC0+bG51bSwKLQkJYnVkLT5zdGFydCwgYnVkLT5qaGVhZCwgYy0+YnVkX2J5dGVzKTsKKwlkYmdfbG9nKCJMRUIgJWQ6JWQsIGpoZWFkICVzLCBidWRfYnl0ZXMgJWxsZCIsIGJ1ZC0+bG51bSwKKwkJYnVkLT5zdGFydCwgZGJnX2poZWFkKGJ1ZC0+amhlYWQpLCBjLT5idWRfYnl0ZXMpOwogCXNwaW5fdW5sb2NrKCZjLT5idWRzX2xvY2spOwogfQogCkBAIC0zNTUsMTYgKzM1NSwxNiBAQAogCQkJICogaGVhZHMgKG5vbi1jbG9zZWQgYnVkcykuCiAJCQkgKi8KIAkJCWMtPmNtdF9idWRfYnl0ZXMgKz0gd2J1Zi0+b2ZmcyAtIGJ1ZC0+c3RhcnQ7Ci0JCQlkYmdfbG9nKCJwcmVzZXJ2ZSAlZDolZCwgamhlYWQgJWQsIGJ1ZCBieXRlcyAlZCwgIgorCQkJZGJnX2xvZygicHJlc2VydmUgJWQ6JWQsIGpoZWFkICVzLCBidWQgYnl0ZXMgJWQsICIKIAkJCQkiY210X2J1ZF9ieXRlcyAlbGxkIiwgYnVkLT5sbnVtLCBidWQtPnN0YXJ0LAotCQkJCWJ1ZC0+amhlYWQsIHdidWYtPm9mZnMgLSBidWQtPnN0YXJ0LAorCQkJCWRiZ19qaGVhZChidWQtPmpoZWFkKSwgd2J1Zi0+b2ZmcyAtIGJ1ZC0+c3RhcnQsCiAJCQkJYy0+Y210X2J1ZF9ieXRlcyk7CiAJCQlidWQtPnN0YXJ0ID0gd2J1Zi0+b2ZmczsKIAkJfSBlbHNlIHsKIAkJCWMtPmNtdF9idWRfYnl0ZXMgKz0gYy0+bGViX3NpemUgLSBidWQtPnN0YXJ0OwotCQkJZGJnX2xvZygicmVtb3ZlICVkOiVkLCBqaGVhZCAlZCwgYnVkIGJ5dGVzICVkLCAiCisJCQlkYmdfbG9nKCJyZW1vdmUgJWQ6JWQsIGpoZWFkICVzLCBidWQgYnl0ZXMgJWQsICIKIAkJCQkiY210X2J1ZF9ieXRlcyAlbGxkIiwgYnVkLT5sbnVtLCBidWQtPnN0YXJ0LAotCQkJCWJ1ZC0+amhlYWQsIGMtPmxlYl9zaXplIC0gYnVkLT5zdGFydCwKKwkJCQlkYmdfamhlYWQoYnVkLT5qaGVhZCksIGMtPmxlYl9zaXplIC0gYnVkLT5zdGFydCwKIAkJCQljLT5jbXRfYnVkX2J5dGVzKTsKIAkJCXJiX2VyYXNlKHAxLCAmYy0+YnVkcyk7CiAJCQkvKgpAQCAtNDI5LDcgKzQyOSw4IEBACiAJCWlmIChsbnVtID09IC0xIHx8IG9mZnMgPT0gYy0+bGViX3NpemUpCiAJCQljb250aW51ZTsKIAotCQlkYmdfbG9nKCJhZGQgcmVmIHRvIExFQiAlZDolZCBmb3IgamhlYWQgJWQiLCBsbnVtLCBvZmZzLCBpKTsKKwkJZGJnX2xvZygiYWRkIHJlZiB0byBMRUIgJWQ6JWQgZm9yIGpoZWFkICVzIiwKKwkJCWxudW0sIG9mZnMsIGRiZ19qaGVhZChpKSk7CiAJCXJlZiA9IGJ1ZiArIGxlbjsKIAkJcmVmLT5jaC5ub2RlX3R5cGUgPSBVQklGU19SRUZfTk9ERTsKIAkJcmVmLT5sbnVtID0gY3B1X3RvX2xlMzIobG51bSk7CkBAIC02OTUsNyArNjk2LDcgQEAKIAlsbnVtID0gYy0+bHRhaWxfbG51bTsKIAl3cml0ZV9sbnVtID0gbG51bTsKIAl3aGlsZSAoMSkgewotCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5zYnVmKTsKKwkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMCk7CiAJCWlmIChJU19FUlIoc2xlYikpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2xlYik7CiAJCQlnb3RvIG91dF9mcmVlOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbHByb3BzLmMgYi9mcy91Ymlmcy9scHJvcHMuYwppbmRleCA0Y2RkMjg0Li40ZDRjYTM4IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9scHJvcHMuYworKysgYi9mcy91Ymlmcy9scHJvcHMuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJY2FzZSBMUFJPUFNfRlJFRToKIAkJaWYgKGFkZF90b19scHRfaGVhcChjLCBscHJvcHMsIGNhdCkpCiAJCQlicmVhazsKLQkJLyogTm8gbW9yZSByb29tIG9uIGhlYXAgc28gbWFrZSBpdCB1bmNhdGVnb3JpemVkICovCisJCS8qIE5vIG1vcmUgcm9vbSBvbiBoZWFwIHNvIG1ha2UgaXQgdW4tY2F0ZWdvcml6ZWQgKi8KIAkJY2F0ID0gTFBST1BTX1VOQ0FUOwogCQkvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIExQUk9QU19VTkNBVDoKQEAgLTM3NSw4ICszNzUsOCBAQAogICogQGxwcm9wczogTEVCIHByb3BlcnRpZXMKICAqCiAgKiBBIExFQiBtYXkgaGF2ZSBmYWxsZW4gb2ZmIG9mIHRoZSBib3R0b20gb2YgYSBoZWFwLCBhbmQgZW5kZWQgdXAgYXMKLSAqIHVuY2F0ZWdvcml6ZWQgZXZlbiB0aG91Z2ggaXQgaGFzIGVub3VnaCBzcGFjZSBmb3IgdXMgbm93LiBJZiB0aGF0IGlzIHRoZSBjYXNlCi0gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHV0IHRoZSBMRUIgYmFjayBvbnRvIGEgaGVhcC4KKyAqIHVuLWNhdGVnb3JpemVkIGV2ZW4gdGhvdWdoIGl0IGhhcyBlbm91Z2ggc3BhY2UgZm9yIHVzIG5vdy4gSWYgdGhhdCBpcyB0aGUKKyAqIGNhc2UgdGhpcyBmdW5jdGlvbiB3aWxsIHB1dCB0aGUgTEVCIGJhY2sgb250byBhIGhlYXAuCiAgKi8KIHZvaWQgdWJpZnNfZW5zdXJlX2NhdChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2xwcm9wcyAqbHByb3BzKQogewpAQCAtNDM2LDEwICs0MzYsMTAgQEAKIC8qKgogICogY2hhbmdlX2NhdGVnb3J5IC0gY2hhbmdlIExFQiBwcm9wZXJ0aWVzIGNhdGVnb3J5LgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAotICogQGxwcm9wczogTEVCIHByb3BlcnRpZXMgdG8gcmVjYXRlZ29yaXplCisgKiBAbHByb3BzOiBMRUIgcHJvcGVydGllcyB0byByZS1jYXRlZ29yaXplCiAgKgogICogTEVCIHByb3BlcnRpZXMgYXJlIGNhdGVnb3JpemVkIHRvIGVuYWJsZSBmYXN0IGZpbmQgb3BlcmF0aW9ucy4gV2hlbiB0aGUgTEVCCi0gKiBwcm9wZXJ0aWVzIGNoYW5nZSB0aGV5IG11c3QgYmUgcmVjYXRlZ29yaXplZC4KKyAqIHByb3BlcnRpZXMgY2hhbmdlIHRoZXkgbXVzdCBiZSByZS1jYXRlZ29yaXplZC4KICAqLwogc3RhdGljIHZvaWQgY2hhbmdlX2NhdGVnb3J5KHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfbHByb3BzICpscHJvcHMpCiB7CkBAIC00NjEsMjEgKzQ2MSwxOCBAQAogfQogCiAvKioKLSAqIGNhbGNfZGFyayAtIGNhbGN1bGF0ZSBMRUIgZGFyayBzcGFjZSBzaXplLgorICogdWJpZnNfY2FsY19kYXJrIC0gY2FsY3VsYXRlIExFQiBkYXJrIHNwYWNlIHNpemUuCiAgKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHNwYzogYW1vdW50IG9mIGZyZWUgYW5kIGRpcnR5IHNwYWNlIGluIHRoZSBMRUIKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW1vdW50IG9mIGRhcmsgc3BhY2UgaW4gYW4gTEVCIHdoaWNoIGhhcyBAc3BjIGJ5dGVzCi0gKiBvZiBmcmVlIGFuZCBkaXJ0eSBzcGFjZS4gUmV0dXJucyB0aGUgY2FsY3VsYXRpb25zIHJlc3VsdC4KKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhbW91bnQgb2YgZGFyayBzcGFjZSBpbiBhbiBMRUIgd2hpY2gKKyAqIGhhcyBAc3BjIGJ5dGVzIG9mIGZyZWUgYW5kIGRpcnR5IHNwYWNlLgogICoKLSAqIERhcmsgc3BhY2UgaXMgdGhlIHNwYWNlIHdoaWNoIGlzIG5vdCBhbHdheXMgdXNhYmxlIC0gaXQgZGVwZW5kcyBvbiB3aGljaAotICogbm9kZXMgYXJlIHdyaXR0ZW4gaW4gd2hpY2ggb3JkZXIuIEUuZy4sIGlmIGFuIExFQiBoYXMgb25seSA1MTIgZnJlZSBieXRlcywKLSAqIGl0IGlzIGRhcmsgc3BhY2UsIGJlY2F1c2UgaXQgY2Fubm90IGZpdCBhIGxhcmdlIGRhdGEgbm9kZS4gU28gVUJJRlMgY2Fubm90Ci0gKiBjb3VudCBvbiB0aGlzIExFQiBhbmQgdHJlYXQgdGhlc2UgNTEyIGJ5dGVzIGFzIHVzYWJsZSBiZWNhdXNlIGl0IGlzIG5vdCB0cnVlCi0gKiBpZiwgZm9yIGV4YW1wbGUsIG9ubHkgYmlnIGNodW5rcyBvZiB1bmNvbXByZXNzaWJsZSBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0bwotICogdGhlIEZTLgorICogVUJJRlMgaXMgdHJ5aW5nIHRvIGFjY291bnQgdGhlIHNwYWNlIHdoaWNoIG1pZ2h0IG5vdCBiZSB1c2FibGUsIGFuZCB0aGlzCisgKiBzcGFjZSBpcyBjYWxsZWQgImRhcmsgc3BhY2UiLiBGb3IgZXhhbXBsZSwgaWYgYW4gTEVCIGhhcyBvbmx5ICU1MTIgZnJlZQorICogYnl0ZXMsIGl0IGlzIGRhcmsgc3BhY2UsIGJlY2F1c2UgaXQgY2Fubm90IGZpdCBhIGxhcmdlIGRhdGEgbm9kZS4KICAqLwotc3RhdGljIGludCBjYWxjX2Rhcmsoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBzcGMpCitpbnQgdWJpZnNfY2FsY19kYXJrKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgc3BjKQogewogCXViaWZzX2Fzc2VydCghKHNwYyAmIDcpKTsKIApAQCAtNTE4LDcgKzUxNSw3IEBACiAgKiBAZnJlZTogbmV3IGZyZWUgc3BhY2UgYW1vdW50CiAgKiBAZGlydHk6IG5ldyBkaXJ0eSBzcGFjZSBhbW91bnQKICAqIEBmbGFnczogbmV3IGZsYWdzCi0gKiBAaWR4X2djX2NudDogY2hhbmdlIHRvIHRoZSBjb3VudCBvZiBpZHhfZ2MgbGlzdAorICogQGlkeF9nY19jbnQ6IGNoYW5nZSB0byB0aGUgY291bnQgb2YgQGlkeF9nYyBsaXN0CiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIExFQiBwcm9wZXJ0aWVzIChAZnJlZSwgQGRpcnR5IG9yIEBmbGFnKS4gSG93ZXZlciwgdGhlCiAgKiBwcm9wZXJ0eSB3aGljaCBoYXMgdGhlICVMUFJPUFNfTkMgdmFsdWUgaXMgbm90IGNoYW5nZWQuIFJldHVybnMgYSBwb2ludGVyIHRvCkBAIC01MzUsNyArNTMyLDcgQEAKIHsKIAkvKgogCSAqIFRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGNoYW5nZSBscHJvcHMsIHNvIHdlCi0JICogZGlzY2FyZCB0aGUgY29uc3QgcXVhbGlmaWVyLgorCSAqIGRpc2NhcmQgdGhlICJjb25zdCIgcXVhbGlmaWVyLgogCSAqLwogCXN0cnVjdCB1Ymlmc19scHJvcHMgKmxwcm9wcyA9IChzdHJ1Y3QgdWJpZnNfbHByb3BzICopbHA7CiAKQEAgLTU3NSw3ICs1NzIsNyBAQAogCQlpZiAob2xkX3NwYyA8IGMtPmRlYWRfd20pCiAJCQljLT5sc3QudG90YWxfZGVhZCAtPSBvbGRfc3BjOwogCQllbHNlCi0JCQljLT5sc3QudG90YWxfZGFyayAtPSBjYWxjX2RhcmsoYywgb2xkX3NwYyk7CisJCQljLT5sc3QudG90YWxfZGFyayAtPSB1Ymlmc19jYWxjX2RhcmsoYywgb2xkX3NwYyk7CiAKIAkJYy0+bHN0LnRvdGFsX3VzZWQgLT0gYy0+bGViX3NpemUgLSBvbGRfc3BjOwogCX0KQEAgLTYxNiw3ICs2MTMsNyBAQAogCQlpZiAobmV3X3NwYyA8IGMtPmRlYWRfd20pCiAJCQljLT5sc3QudG90YWxfZGVhZCArPSBuZXdfc3BjOwogCQllbHNlCi0JCQljLT5sc3QudG90YWxfZGFyayArPSBjYWxjX2RhcmsoYywgbmV3X3NwYyk7CisJCQljLT5sc3QudG90YWxfZGFyayArPSB1Ymlmc19jYWxjX2RhcmsoYywgbmV3X3NwYyk7CiAKIAkJYy0+bHN0LnRvdGFsX3VzZWQgKz0gYy0+bGViX3NpemUgLSBuZXdfc3BjOwogCX0KQEAgLTEwOTYsNyArMTA5Myw3IEBACiAJCX0KIAl9CiAKLQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5kYmctPmJ1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+ZGJnLT5idWYsIDApOwogCWlmIChJU19FUlIoc2xlYikpIHsKIAkJLyoKIAkJICogQWZ0ZXIgYW4gdW5jbGVhbiB1bm1vdW50LCBlbXB0eSBhbmQgZnJlZWFibGUgTEVCcwpAQCAtMTEwNyw3ICsxMTA0LDcgQEAKIAkJCQkgICItIGNvbnRpbnVpbmcgY2hlY2tpbmciKTsKIAkJCWxzdC0+ZW1wdHlfbGVicyArPSAxOwogCQkJbHN0LT50b3RhbF9mcmVlICs9IGMtPmxlYl9zaXplOwotCQkJbHN0LT50b3RhbF9kYXJrICs9IGNhbGNfZGFyayhjLCBjLT5sZWJfc2l6ZSk7CisJCQlsc3QtPnRvdGFsX2RhcmsgKz0gdWJpZnNfY2FsY19kYXJrKGMsIGMtPmxlYl9zaXplKTsKIAkJCXJldHVybiBMUFRfU0NBTl9DT05USU5VRTsKIAkJfQogCkBAIC0xMTE3LDcgKzExMTQsNyBAQAogCQkJCSAgIi0gY29udGludWluZyBjaGVja2luZyIpOwogCQkJbHN0LT50b3RhbF9mcmVlICArPSBscC0+ZnJlZTsKIAkJCWxzdC0+dG90YWxfZGlydHkgKz0gbHAtPmRpcnR5OwotCQkJbHN0LT50b3RhbF9kYXJrICArPSAgY2FsY19kYXJrKGMsIGMtPmxlYl9zaXplKTsKKwkJCWxzdC0+dG90YWxfZGFyayAgKz0gIHViaWZzX2NhbGNfZGFyayhjLCBjLT5sZWJfc2l6ZSk7CiAJCQlyZXR1cm4gTFBUX1NDQU5fQ09OVElOVUU7CiAJCX0KIAkJZGF0YS0+ZXJyID0gUFRSX0VSUihzbGViKTsKQEAgLTEyMzUsNyArMTIzMiw3IEBACiAJCWlmIChzcGMgPCBjLT5kZWFkX3dtKQogCQkJbHN0LT50b3RhbF9kZWFkICs9IHNwYzsKIAkJZWxzZQotCQkJbHN0LT50b3RhbF9kYXJrICs9IGNhbGNfZGFyayhjLCBzcGMpOworCQkJbHN0LT50b3RhbF9kYXJrICs9IHViaWZzX2NhbGNfZGFyayhjLCBzcGMpOwogCX0KIAogCXViaWZzX3NjYW5fZGVzdHJveShzbGViKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL21hc3Rlci5jIGIvZnMvdWJpZnMvbWFzdGVyLmMKaW5kZXggYTg4ZjMzOC4uMjhiZWFlZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbWFzdGVyLmMKKysrIGIvZnMvdWJpZnMvbWFzdGVyLmMKQEAgLTI5LDcgKzI5LDggQEAKICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRoZSBtYXN0ZXIgbm9kZSBMRUJzIGFuZCBzZWFyY2ggZm9yIHRoZSBsYXRlc3QgbWFzdGVyCi0gKiBub2RlLiBSZXR1cm5zIHplcm8gaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaW4gY2FzZSBvZgorICogbm9kZS4gUmV0dXJucyB6ZXJvIGluIGNhc2Ugb2Ygc3VjY2VzcywgJS1FVUNMRUFOIGlmIHRoZXJlIG1hc3RlciBhcmVhIGlzCisgKiBjb3JydXB0ZWQgYW5kIHJlcXVpcmVzIHJlY292ZXJ5LCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YKICAqIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgc2Nhbl9mb3JfbWFzdGVyKHN0cnVjdCB1Ymlmc19pbmZvICpjKQpAQCAtNDAsNyArNDEsNyBAQAogCiAJbG51bSA9IFVCSUZTX01TVF9MTlVNOwogCi0Jc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMSk7CiAJaWYgKElTX0VSUihzbGViKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2xlYik7CiAJbm9kZXNfY250ID0gc2xlYi0+bm9kZXNfY250OwpAQCAtNDgsNyArNDksNyBAQAogCQlzbm9kID0gbGlzdF9lbnRyeShzbGViLT5ub2Rlcy5wcmV2LCBzdHJ1Y3QgdWJpZnNfc2Nhbl9ub2RlLAogCQkJCSAgbGlzdCk7CiAJCWlmIChzbm9kLT50eXBlICE9IFVCSUZTX01TVF9OT0RFKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9kdW1wOwogCQltZW1jcHkoYy0+bXN0X25vZGUsIHNub2QtPm5vZGUsIHNub2QtPmxlbik7CiAJCW9mZnMgPSBzbm9kLT5vZmZzOwogCX0KQEAgLTU2LDcgKzU3LDcgQEAKIAogCWxudW0gKz0gMTsKIAotCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGMtPnNidWYpOworCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIDAsIGMtPnNidWYsIDEpOwogCWlmIChJU19FUlIoc2xlYikpCiAJCXJldHVybiBQVFJfRVJSKHNsZWIpOwogCWlmIChzbGViLT5ub2Rlc19jbnQgIT0gbm9kZXNfY250KQpAQCAtNjUsNyArNjYsNyBAQAogCQlnb3RvIG91dDsKIAlzbm9kID0gbGlzdF9lbnRyeShzbGViLT5ub2Rlcy5wcmV2LCBzdHJ1Y3QgdWJpZnNfc2Nhbl9ub2RlLCBsaXN0KTsKIAlpZiAoc25vZC0+dHlwZSAhPSBVQklGU19NU1RfTk9ERSkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2R1bXA7CiAJaWYgKHNub2QtPm9mZnMgIT0gb2ZmcykKIAkJZ290byBvdXQ7CiAJaWYgKG1lbWNtcCgodm9pZCAqKWMtPm1zdF9ub2RlICsgVUJJRlNfQ0hfU1osCkBAIC03OCw2ICs3OSwxMiBAQAogCiBvdXQ6CiAJdWJpZnNfc2Nhbl9kZXN0cm95KHNsZWIpOworCXJldHVybiAtRVVDTEVBTjsKKworb3V0X2R1bXA6CisJdWJpZnNfZXJyKCJ1bmV4cGVjdGVkIG5vZGUgdHlwZSAlZCBtYXN0ZXIgTEVCICVkOiVkIiwKKwkJICBzbm9kLT50eXBlLCBsbnVtLCBzbm9kLT5vZmZzKTsKKwl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTI1Niw3ICsyNjMsOCBAQAogCiAJZXJyID0gc2Nhbl9mb3JfbWFzdGVyKGMpOwogCWlmIChlcnIpIHsKLQkJZXJyID0gdWJpZnNfcmVjb3Zlcl9tYXN0ZXJfbm9kZShjKTsKKwkJaWYgKGVyciA9PSAtRVVDTEVBTikKKwkJCWVyciA9IHViaWZzX3JlY292ZXJfbWFzdGVyX25vZGUoYyk7CiAJCWlmIChlcnIpCiAJCQkvKgogCQkJICogTm90ZSwgd2UgZG8gbm90IGZyZWUgJ2MtPm1zdF9ub2RlJyBoZXJlIGJlY2F1c2UgdGhlCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9vcnBoYW4uYyBiL2ZzL3ViaWZzL29ycGhhbi5jCmluZGV4IDE1MmE3YjMuLjgyMDA5YzcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL29ycGhhbi5jCisrKyBiL2ZzL3ViaWZzL29ycGhhbi5jCkBAIC02NzAsOSArNjcwLDEwIEBACiAJCXN0cnVjdCB1Ymlmc19zY2FuX2xlYiAqc2xlYjsKIAogCQlkYmdfcmN2cnkoIkxFQiAlZCIsIGxudW0pOwotCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5zYnVmKTsKKwkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+c2J1ZiwgMSk7CiAJCWlmIChJU19FUlIoc2xlYikpIHsKLQkJCXNsZWIgPSB1Ymlmc19yZWNvdmVyX2xlYihjLCBsbnVtLCAwLCBjLT5zYnVmLCAwKTsKKwkJCWlmIChQVFJfRVJSKHNsZWIpID09IC1FVUNMRUFOKQorCQkJCXNsZWIgPSB1Ymlmc19yZWNvdmVyX2xlYihjLCBsbnVtLCAwLCBjLT5zYnVmLCAwKTsKIAkJCWlmIChJU19FUlIoc2xlYikpIHsKIAkJCQllcnIgPSBQVFJfRVJSKHNsZWIpOwogCQkJCWJyZWFrOwpAQCAtODk5LDcgKzkwMCw3IEBACiAJZm9yIChsbnVtID0gYy0+b3JwaF9maXJzdDsgbG51bSA8PSBjLT5vcnBoX2xhc3Q7IGxudW0rKykgewogCQlzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWI7CiAKLQkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+ZGJnLT5idWYpOworCQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5kYmctPmJ1ZiwgMCk7CiAJCWlmIChJU19FUlIoc2xlYikpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2xlYik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMgYi9mcy91Ymlmcy9yZWNvdmVyeS5jCmluZGV4IGU1ZjZjZjguLmY5NGRkZjcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMKKysrIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJCW1zdCA9IG1zdDI7CiAJfQogCi0JZGJnX3JjdnJ5KCJyZWNvdmVyZWQgbWFzdGVyIG5vZGUgZnJvbSBMRUIgJWQiLAorCXViaWZzX21zZygicmVjb3ZlcmVkIG1hc3RlciBub2RlIGZyb20gTEVCICVkIiwKIAkJICAobXN0ID09IG1zdDEgPyBVQklGU19NU1RfTE5VTSA6IFVCSUZTX01TVF9MTlVNICsgMSkpOwogCiAJbWVtY3B5KGMtPm1zdF9ub2RlLCBtc3QsIFVCSUZTX01TVF9OT0RFX1NaKTsKQEAgLTc5MCw3ICs3OTAsNyBAQAogCQkgKiBXZSBjYW4gb25seSByZWNvdmVyIGF0IHRoZSBlbmQgb2YgdGhlIGxvZywgc28gY2hlY2sgdGhhdCB0aGUKIAkJICogbmV4dCBsb2cgTEVCIGlzIGVtcHR5IG9yIG91dCBvZiBkYXRlLgogCQkgKi8KLQkJc2xlYiA9IHViaWZzX3NjYW4oYywgbmV4dF9sbnVtLCAwLCBzYnVmKTsKKwkJc2xlYiA9IHViaWZzX3NjYW4oYywgbmV4dF9sbnVtLCAwLCBzYnVmLCAwKTsKIAkJaWYgKElTX0VSUihzbGViKSkKIAkJCXJldHVybiBzbGViOwogCQlpZiAoc2xlYi0+bm9kZXNfY250KSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9yZXBsYXkuYyBiL2ZzL3ViaWZzL3JlcGxheS5jCmluZGV4IDI5NzA1MDAuLjVjMmQ2ZDcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlcGxheS5jCisrKyBiL2ZzL3ViaWZzL3JlcGxheS5jCkBAIC01MDYsNyArNTA2LDcgQEAKIAlpZiAoYy0+bmVlZF9yZWNvdmVyeSkKIAkJc2xlYiA9IHViaWZzX3JlY292ZXJfbGViKGMsIGxudW0sIG9mZnMsIGMtPnNidWYsIGpoZWFkICE9IEdDSEQpOwogCWVsc2UKLQkJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgb2ZmcywgYy0+c2J1Zik7CisJCXNsZWIgPSB1Ymlmc19zY2FuKGMsIGxudW0sIG9mZnMsIGMtPnNidWYsIDApOwogCWlmIChJU19FUlIoc2xlYikpCiAJCXJldHVybiBQVFJfRVJSKHNsZWIpOwogCkBAIC04MzYsOCArODM2LDggQEAKIAljb25zdCBzdHJ1Y3QgdWJpZnNfY3Nfbm9kZSAqbm9kZTsKIAogCWRiZ19tbnQoInJlcGxheSBsb2cgTEVCICVkOiVkIiwgbG51bSwgb2Zmcyk7Ci0Jc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgb2Zmcywgc2J1Zik7Ci0JaWYgKElTX0VSUihzbGViKSApIHsKKwlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCBvZmZzLCBzYnVmLCBjLT5uZWVkX3JlY292ZXJ5KTsKKwlpZiAoSVNfRVJSKHNsZWIpKSB7CiAJCWlmIChQVFJfRVJSKHNsZWIpICE9IC1FVUNMRUFOIHx8ICFjLT5uZWVkX3JlY292ZXJ5KQogCQkJcmV0dXJuIFBUUl9FUlIoc2xlYik7CiAJCXNsZWIgPSB1Ymlmc19yZWNvdmVyX2xvZ19sZWIoYywgbG51bSwgb2Zmcywgc2J1Zik7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zY2FuLmMgYi9mcy91Ymlmcy9zY2FuLmMKaW5kZXggODkyZWJmZS4uOTZjNTI1MyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc2Nhbi5jCisrKyBiL2ZzL3ViaWZzL3NjYW4uYwpAQCAtMTA4LDEwICsxMDgsOSBAQAogCiAJCS8qIE1ha2UgdGhlIG5vZGUgcGFkcyB0byA4LWJ5dGUgYm91bmRhcnkgKi8KIAkJaWYgKChub2RlX2xlbiArIHBhZF9sZW4pICYgNykgewotCQkJaWYgKCFxdWlldCkgeworCQkJaWYgKCFxdWlldCkKIAkJCQlkYmdfZXJyKCJiYWQgcGFkZGluZyBsZW5ndGggJWQgLSAlZCIsCiAJCQkJCW9mZnMsIG9mZnMgKyBub2RlX2xlbiArIHBhZF9sZW4pOwotCQkJfQogCQkJcmV0dXJuIFNDQU5ORURfQV9CQURfUEFEX05PREU7CiAJCX0KIApAQCAtMjUzLDE1ICsyNTIsMTkgQEAKICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBsbnVtOiBsb2dpY2FsIGVyYXNlYmxvY2sgbnVtYmVyCiAgKiBAb2Zmczogb2Zmc2V0IHRvIHN0YXJ0IGF0ICh1c3VhbGx5IHplcm8pCi0gKiBAc2J1Zjogc2NhbiBidWZmZXIgKG11c3QgYmUgYy0+bGViX3NpemUpCisgKiBAc2J1Zjogc2NhbiBidWZmZXIgKG11c3QgYmUgb2YgQGMtPmxlYl9zaXplIGJ5dGVzIGluIHNpemUpCisgKiBAcXVpZXQ6IHByaW50IG5vIG1lc3NhZ2VzCiAgKgogICogVGhpcyBmdW5jdGlvbiBzY2FucyBMRUIgbnVtYmVyIEBsbnVtIGFuZCByZXR1cm5zIGNvbXBsZXRlIGluZm9ybWF0aW9uIGFib3V0CiAgKiBpdHMgY29udGVudHMuIFJldHVybnMgdGhlIHNjYW5lZCBpbmZvcm1hdGlvbiBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kLAogICogJS1FVUNMRUFOIGlmIHRoZSBMRUIgbmVhZHMgcmVjb3ZlcnksIGFuZCBvdGhlciBuZWdhdGl2ZSBlcnJvciBjb2RlcyBpbiBjYXNlCiAgKiBvZiBmYWlsdXJlLgorICoKKyAqIElmIEBxdWlldCBpcyBub24temVybywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmludCBsYXJnZSBhbmQgc2NhcnkKKyAqIGVycm9yIG1lc3NhZ2VzIGFuZCBmbGFzaCBkdW1wcyBpbiBjYXNlIG9mIGVycm9ycy4KICAqLwogc3RydWN0IHViaWZzX3NjYW5fbGViICp1Ymlmc19zY2FuKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSwKLQkJCQkgIGludCBvZmZzLCB2b2lkICpzYnVmKQorCQkJCSAgaW50IG9mZnMsIHZvaWQgKnNidWYsIGludCBxdWlldCkKIHsKIAl2b2lkICpidWYgPSBzYnVmICsgb2ZmczsKIAlpbnQgZXJyLCBsZW4gPSBjLT5sZWJfc2l6ZSAtIG9mZnM7CkBAIC0yODAsNyArMjgzLDcgQEAKIAogCQljb25kX3Jlc2NoZWQoKTsKIAotCQlyZXQgPSB1Ymlmc19zY2FuX2Ffbm9kZShjLCBidWYsIGxlbiwgbG51bSwgb2ZmcywgMCk7CisJCXJldCA9IHViaWZzX3NjYW5fYV9ub2RlKGMsIGJ1ZiwgbGVuLCBsbnVtLCBvZmZzLCBxdWlldCk7CiAJCWlmIChyZXQgPiAwKSB7CiAJCQkvKiBQYWRkaW5nIGJ5dGVzIG9yIGEgdmFsaWQgcGFkZGluZyBub2RlICovCiAJCQlvZmZzICs9IHJldDsKQEAgLTMyMCw3ICszMjMsOSBAQAogCX0KIAogCWlmIChvZmZzICUgYy0+bWluX2lvX3NpemUpIHsKLQkJdWJpZnNfZXJyKCJlbXB0eSBzcGFjZSBzdGFydHMgYXQgbm9uLWFsaWduZWQgb2Zmc2V0ICVkIiwgb2Zmcyk7CisJCWlmICghcXVpZXQpCisJCQl1Ymlmc19lcnIoImVtcHR5IHNwYWNlIHN0YXJ0cyBhdCBub24tYWxpZ25lZCBvZmZzZXQgJWQiLAorCQkJCSAgb2Zmcyk7CiAJCWdvdG8gY29ycnVwdGVkOzsKIAl9CiAKQEAgLTMzMSwxOCArMzM2LDI1IEBACiAJCQlicmVhazsKIAlmb3IgKDsgbGVuOyBvZmZzKyssIGJ1ZisrLCBsZW4tLSkKIAkJaWYgKCoodWludDhfdCAqKWJ1ZiAhPSAweGZmKSB7Ci0JCQl1Ymlmc19lcnIoImNvcnJ1cHQgZW1wdHkgc3BhY2UgYXQgTEVCICVkOiVkIiwKLQkJCQkgIGxudW0sIG9mZnMpOworCQkJaWYgKCFxdWlldCkKKwkJCQl1Ymlmc19lcnIoImNvcnJ1cHQgZW1wdHkgc3BhY2UgYXQgTEVCICVkOiVkIiwKKwkJCQkJICBsbnVtLCBvZmZzKTsKIAkJCWdvdG8gY29ycnVwdGVkOwogCQl9CiAKIAlyZXR1cm4gc2xlYjsKIAogY29ycnVwdGVkOgotCXViaWZzX3NjYW5uZWRfY29ycnVwdGlvbihjLCBsbnVtLCBvZmZzLCBidWYpOworCWlmICghcXVpZXQpIHsKKwkJdWJpZnNfc2Nhbm5lZF9jb3JydXB0aW9uKGMsIGxudW0sIG9mZnMsIGJ1Zik7CisJCXViaWZzX2VycigiTEVCICVkIHNjYW5uaW5nIGZhaWxlZCIsIGxudW0pOworCX0KIAllcnIgPSAtRVVDTEVBTjsKKwl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwogZXJyb3I6Ci0JdWJpZnNfZXJyKCJMRUIgJWQgc2Nhbm5pbmcgZmFpbGVkIiwgbG51bSk7CisJdWJpZnNfZXJyKCJMRUIgJWQgc2Nhbm5pbmcgZmFpbGVkLCBlcnJvciAlZCIsIGxudW0sIGVycik7CiAJdWJpZnNfc2Nhbl9kZXN0cm95KHNsZWIpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCBjNGFmMDY5Li4zMzNlMTgxIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSAidWJpZnMuaCIKIAogLyoKQEAgLTMxOCw2ICszMTcsOCBAQAogCQlpZiAoZXJyKQogCQkJdWJpZnNfZXJyKCJjYW4ndCB3cml0ZSBpbm9kZSAlbHUsIGVycm9yICVkIiwKIAkJCQkgIGlub2RlLT5pX2lubywgZXJyKTsKKwkJZWxzZQorCQkJZXJyID0gZGJnX2NoZWNrX2lub2RlX3NpemUoYywgaW5vZGUsIHVpLT51aV9zaXplKTsKIAl9CiAKIAl1aS0+ZGlydHkgPSAwOwpAQCAtNDQ4LDE3ICs0NDksNiBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogVkZTIGNhbGxzICctPnN5bmNfZnMoKScgYmVmb3JlIHN5bmNocm9uaXppbmcgYWxsIGRpcnR5IGlub2RlcyBhbmQKLQkgKiBwYWdlcywgc28gc3luY2hyb25pemUgdGhlbSBmaXJzdCwgdGhlbiBjb21taXQgdGhlIGpvdXJuYWwuIFN0cmljdGx5Ci0JICogc3BlYWtpbmcsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tbWl0IHRoZSBqb3VybmFsIGhlcmUsCi0JICogc3luY2hyb25pemluZyB3cml0ZS1idWZmZXJzIHdvdWxkIGJlIGVub3VnaC4gQnV0IGNvbW1pdHRpbmcgbWFrZXMKLQkgKiBVQklGUyBmcmVlIHNwYWNlIHByZWRpY3Rpb25zIG11Y2ggbW9yZSBhY2N1cmF0ZSwgc28gd2Ugd2FudCB0byBsZXQKLQkgKiB0aGUgdXNlciBiZSBhYmxlIHRvIGdldCBtb3JlIGFjY3VyYXRlIHJlc3VsdHMgb2YgJ3N0YXRmcygpJyBhZnRlcgotCSAqIHRoZXkgc3luY2hyb25pemUgdGhlIGZpbGUgc3lzdGVtLgotCSAqLwotCXN5bmNfaW5vZGVzX3NiKHNiKTsKLQotCS8qCiAJICogU3luY2hyb25pemUgd3JpdGUgYnVmZmVycywgYmVjYXVzZSAndWJpZnNfcnVuX2NvbW1pdCgpJyBkb2VzIG5vdAogCSAqIGRvIHRoaXMgaWYgaXQgd2FpdHMgZm9yIGFuIGFscmVhZHkgcnVubmluZyBjb21taXQuCiAJICovCkBAIC00NjgsNiArNDU4LDEzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qCisJICogU3RyaWN0bHkgc3BlYWtpbmcsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tbWl0IHRoZSBqb3VybmFsIGhlcmUsCisJICogc3luY2hyb25pemluZyB3cml0ZS1idWZmZXJzIHdvdWxkIGJlIGVub3VnaC4gQnV0IGNvbW1pdHRpbmcgbWFrZXMKKwkgKiBVQklGUyBmcmVlIHNwYWNlIHByZWRpY3Rpb25zIG11Y2ggbW9yZSBhY2N1cmF0ZSwgc28gd2Ugd2FudCB0byBsZXQKKwkgKiB0aGUgdXNlciBiZSBhYmxlIHRvIGdldCBtb3JlIGFjY3VyYXRlIHJlc3VsdHMgb2YgJ3N0YXRmcygpJyBhZnRlcgorCSAqIHRoZXkgc3luY2hyb25pemUgdGhlIGZpbGUgc3lzdGVtLgorCSAqLwogCWVyciA9IHViaWZzX3J1bl9jb21taXQoYyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTE3MjAsOCArMTcxNyw2IEBACiAJdWJpZnNfbXNnKCJ1bi1tb3VudCBVQkkgZGV2aWNlICVkLCB2b2x1bWUgJWQiLCBjLT52aS51YmlfbnVtLAogCQkgIGMtPnZpLnZvbF9pZCk7CiAKLQlsb2NrX2tlcm5lbCgpOwotCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGFzc2VydHMgYXJlIG9ubHkgdmFsaWQgaWYgdGhlcmUgaGFzIG5vdCBiZWVuIGEgZmFpbHVyZQogCSAqIG9mIHRoZSBtZWRpYS4gRm9yIGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgZGlydHkgaW5vZGVzIGlmIHdlIGZhaWxlZApAQCAtMTc4Niw4ICsxNzgxLDYgQEAKIAl1YmlfY2xvc2Vfdm9sdW1lKGMtPnViaSk7CiAJbXV0ZXhfdW5sb2NrKCZjLT51bW91bnRfbXV0ZXgpOwogCWtmcmVlKGMpOwotCi0JdW5sb2NrX2tlcm5lbCgpOwogfQogCiBzdGF0aWMgaW50IHViaWZzX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKQEAgLTE4MDMsMjIgKzE3OTYsMTcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlmICgoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpICYmICEoKmZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlpZiAoYy0+cm9fbWVkaWEpIHsKIAkJCXViaWZzX21zZygiY2Fubm90IHJlLW1vdW50IGR1ZSB0byBwcmlvciBlcnJvcnMiKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAtRVJPRlM7CiAJCX0KIAkJZXJyID0gdWJpZnNfcmVtb3VudF9ydyhjKTsKLQkJaWYgKGVycikgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJfQogCX0gZWxzZSBpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkgJiYgKCpmbGFncyAmIE1TX1JET05MWSkpIHsKIAkJaWYgKGMtPnJvX21lZGlhKSB7CiAJCQl1Ymlmc19tc2coImNhbm5vdCByZS1tb3VudCBkdWUgdG8gcHJpb3IgZXJyb3JzIik7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVST0ZTOwogCQl9CiAJCXViaWZzX3JlbW91bnRfcm8oYyk7CkBAIC0xODMzLDcgKzE4MjEsNiBAQAogCX0KIAogCXViaWZzX2Fzc2VydChjLT5sc3QudGFrZW5fZW1wdHlfbGVicyA+IDApOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdG5jLmMgYi9mcy91Ymlmcy90bmMuYwppbmRleCBmMjQ5ZjdiLi5lNWIxYTdkIDEwMDY0NAotLS0gYS9mcy91Ymlmcy90bmMuYworKysgYi9mcy91Ymlmcy90bmMuYwpAQCAtMTE1OSw4ICsxMTU5LDggQEAKICAqICAgbyBleGFjdCBtYXRjaCwgaS5lLiB0aGUgZm91bmQgemVyby1sZXZlbCB6bm9kZSBjb250YWlucyBrZXkgQGtleSwgdGhlbiAlMQogICogICAgIGlzIHJldHVybmVkIGFuZCBzbG90IG51bWJlciBvZiB0aGUgbWF0Y2hlZCBicmFuY2ggaXMgc3RvcmVkIGluIEBuOwogICogICBvIG5vdCBleGFjdCBtYXRjaCwgd2hpY2ggbWVhbnMgdGhhdCB6ZXJvLWxldmVsIHpub2RlIGRvZXMgbm90IGNvbnRhaW4KLSAqICAgICBAa2V5LCB0aGVuICUwIGlzIHJldHVybmVkIGFuZCBzbG90IG51bWJlciBvZiB0aGUgY2xvc2VkIGJyYW5jaCBpcyBzdG9yZWQKLSAqICAgICBpbiAgQG47CisgKiAgICAgQGtleSwgdGhlbiAlMCBpcyByZXR1cm5lZCBhbmQgc2xvdCBudW1iZXIgb2YgdGhlIGNsb3Nlc3QgYnJhbmNoIGlzIHN0b3JlZAorICogICAgIGluIEBuOwogICogICBvIEBrZXkgaXMgc28gc21hbGwgdGhhdCBpdCBpcyBldmVuIGxlc3MgdGhhbiB0aGUgbG93ZXN0IGtleSBvZiB0aGUKICAqICAgICBsZWZ0bW9zdCB6ZXJvLWxldmVsIG5vZGUsIHRoZW4gJTAgaXMgcmV0dXJuZWQgYW5kICUwIGlzIHN0b3JlZCBpbiBAbi4KICAqCkBAIC0xNDMzLDcgKzE0MzMsNyBAQAogICogQGxudW06IExFQiBudW1iZXIgaXMgcmV0dXJuZWQgaGVyZQogICogQG9mZnM6IG9mZnNldCBpcyByZXR1cm5lZCBoZXJlCiAgKgotICogVGhpcyBmdW5jdGlvbiBsb29rIHVwIGFuZCByZWFkcyBub2RlIHdpdGgga2V5IEBrZXkuIFRoZSBjYWxsZXIgaGFzIHRvIG1ha2UKKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgdXAgYW5kIHJlYWRzIG5vZGUgd2l0aCBrZXkgQGtleS4gVGhlIGNhbGxlciBoYXMgdG8gbWFrZQogICogc3VyZSB0aGUgQG5vZGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBmaXQgdGhlIG5vZGUuIFJldHVybnMgemVybyBpbiBjYXNlCiAgKiBvZiBzdWNjZXNzLCAlLUVOT0VOVCBpZiB0aGUgbm9kZSB3YXMgbm90IGZvdW5kLCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluCiAgKiBjYXNlIG9mIGZhaWx1cmUuIFRoZSBub2RlIGxvY2F0aW9uIGNhbiBiZSByZXR1cm5lZCBpbiBAbG51bSBhbmQgQG9mZnMuCkBAIC0zMjY4LDMgKzMyNjgsNzMgQEAKIAltdXRleF91bmxvY2soJmMtPnRuY19tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KKworI2lmZGVmIENPTkZJR19VQklGU19GU19ERUJVRworCisvKioKKyAqIGRiZ19jaGVja19pbm9kZV9zaXplIC0gY2hlY2sgaWYgaW5vZGUgc2l6ZSBpcyBjb3JyZWN0LgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGludW06IGlub2RlIG51bWJlcgorICogQHNpemU6IGlub2RlIHNpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB0aGUgaW5vZGUgc2l6ZSAoQHNpemUpIGlzIGNvcnJlY3QgYW5kIGl0IGRvZXMKKyAqIG5vdCBoYXZlIGFueSBwYWdlcyBiZXlvbmQgQHNpemUuIFJldHVybnMgemVybyBpZiB0aGUgaW5vZGUgaXMgT0ssICUtRUlOVkFMCisgKiBpZiBpdCBoYXMgYSBkYXRhIHBhZ2UgYmV5b25kIEBzaXplLCBhbmQgb3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mCisgKiBvdGhlciBlcnJvcnMuCisgKi8KK2ludCBkYmdfY2hlY2tfaW5vZGVfc2l6ZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSBsb2ZmX3Qgc2l6ZSkKK3sKKwlpbnQgZXJyLCBuOworCXVuaW9uIHViaWZzX2tleSBmcm9tX2tleSwgdG9fa2V5LCAqa2V5OworCXN0cnVjdCB1Ymlmc196bm9kZSAqem5vZGU7CisJdW5zaWduZWQgaW50IGJsb2NrOworCisJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAoISh1Ymlmc19jaGtfZmxhZ3MgJiBVQklGU19DSEtfR0VOKSkKKwkJcmV0dXJuIDA7CisKKwlibG9jayA9IChzaXplICsgVUJJRlNfQkxPQ0tfU0laRSAtIDEpID4+IFVCSUZTX0JMT0NLX1NISUZUOworCWRhdGFfa2V5X2luaXQoYywgJmZyb21fa2V5LCBpbm9kZS0+aV9pbm8sIGJsb2NrKTsKKwloaWdoZXN0X2RhdGFfa2V5KGMsICZ0b19rZXksIGlub2RlLT5pX2lubyk7CisKKwltdXRleF9sb2NrKCZjLT50bmNfbXV0ZXgpOworCWVyciA9IHViaWZzX2xvb2t1cF9sZXZlbDAoYywgJmZyb21fa2V5LCAmem5vZGUsICZuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJaWYgKGVycikgeworCQllcnIgPSAtRUlOVkFMOworCQlrZXkgPSAmZnJvbV9rZXk7CisJCWdvdG8gb3V0X2R1bXA7CisJfQorCisJZXJyID0gdG5jX25leHQoYywgJnpub2RlLCAmbik7CisJaWYgKGVyciA9PSAtRU5PRU5UKSB7CisJCWVyciA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X3VubG9jazsKKworCXViaWZzX2Fzc2VydChlcnIgPT0gMCk7CisJa2V5ID0gJnpub2RlLT56YnJhbmNoW25dLmtleTsKKwlpZiAoIWtleV9pbl9yYW5nZShjLCBrZXksICZmcm9tX2tleSwgJnRvX2tleSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworb3V0X2R1bXA6CisJYmxvY2sgPSBrZXlfYmxvY2soYywga2V5KTsKKwl1Ymlmc19lcnIoImlub2RlICVsdSBoYXMgc2l6ZSAlbGxkLCBidXQgdGhlcmUgYXJlIGRhdGEgYXQgb2Zmc2V0ICVsbGQgIgorCQkgICIoZGF0YSBrZXkgJXMpIiwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtPmlfaW5vLCBzaXplLAorCQkgICgobG9mZl90KWJsb2NrKSA8PCBVQklGU19CTE9DS19TSElGVCwgREJHS0VZKGtleSkpOworCWRiZ19kdW1wX2lub2RlKGMsIGlub2RlKTsKKwlkYmdfZHVtcF9zdGFjaygpOworCWVyciA9IC1FSU5WQUw7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjLT50bmNfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfVUJJRlNfRlNfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3RuY19jb21taXQuYyBiL2ZzL3ViaWZzL3RuY19jb21taXQuYwppbmRleCBmZGU4ZDEyLi41MzI4OGU1IDEwMDY0NAotLS0gYS9mcy91Ymlmcy90bmNfY29tbWl0LmMKKysrIGIvZnMvdWJpZnMvdG5jX2NvbW1pdC5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgKiBpdCBpcyBtb3JlIGNvbXByZWhlbnNpdmUgYW5kIGxlc3MgZWZmaWNpZW50IHRoYW4gaXMgbmVlZGVkIGZvciB0aGlzCiAJICogcHVycG9zZS4KIAkgKi8KLQlzbGViID0gdWJpZnNfc2NhbihjLCBsbnVtLCAwLCBjLT5pbGViX2J1Zik7CisJc2xlYiA9IHViaWZzX3NjYW4oYywgbG51bSwgMCwgYy0+aWxlYl9idWYsIDApOwogCWMtPmlsZWJfbGVuID0gMDsKIAlpZiAoSVNfRVJSKHNsZWIpKQogCQlyZXR1cm4gUFRSX0VSUihzbGViKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmggYi9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oCmluZGV4IDNlZWUwN2UuLjE5MWNhNzggMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMtbWVkaWEuaApAQCAtMTM1LDYgKzEzNSwxMyBAQAogLyogVGhlIGtleSBpcyBhbHdheXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4gYWxsIGtleWVkIG5vZGVzICovCiAjZGVmaW5lIFVCSUZTX0tFWV9PRkZTRVQgb2Zmc2V0b2Yoc3RydWN0IHViaWZzX2lub19ub2RlLCBrZXkpCiAKKy8qIEdhcmJhZ2UgY29sbGVjdG9yIGpvdXJuYWwgaGVhZCBudW1iZXIgKi8KKyNkZWZpbmUgVUJJRlNfR0NfSEVBRCAgIDAKKy8qIEJhc2Ugam91cm5hbCBoZWFkIG51bWJlciAqLworI2RlZmluZSBVQklGU19CQVNFX0hFQUQgMQorLyogRGF0YSBqb3VybmFsIGhlYWQgbnVtYmVyICovCisjZGVmaW5lIFVCSUZTX0RBVEFfSEVBRCAyCisKIC8qCiAgKiBMRUIgUHJvcGVydGllcyBUcmVlIG5vZGUgdHlwZXMuCiAgKgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdWJpZnMuaCBiL2ZzL3ViaWZzL3ViaWZzLmgKaW5kZXggYTI5MzQ5MC4uYjJkOTc2MyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvdWJpZnMuaAorKysgYi9mcy91Ymlmcy91Ymlmcy5oCkBAIC0xMDUsMTIgKzEwNSwxMCBAQAogLyogTnVtYmVyIG9mIG5vbi1kYXRhIGpvdXJuYWwgaGVhZHMgKi8KICNkZWZpbmUgTk9OREFUQV9KSEVBRFNfQ05UIDIKIAotLyogR2FyYmFnZSBjb2xsZWN0b3IgaGVhZCAqLwotI2RlZmluZSBHQ0hEICAgMAotLyogQmFzZSBqb3VybmFsIGhlYWQgbnVtYmVyICovCi0jZGVmaW5lIEJBU0VIRCAxCi0vKiBGaXJzdCAiZ2VuZXJhbCBwdXJwb3NlIiBqb3VybmFsIGhlYWQgKi8KLSNkZWZpbmUgREFUQUhEIDIKKy8qIFNob3J0ZXIgbmFtZXMgZm9yIGpvdXJuYWwgaGVhZCBudW1iZXJzIGZvciBpbnRlcm5hbCB1c2FnZSAqLworI2RlZmluZSBHQ0hEICAgVUJJRlNfR0NfSEVBRAorI2RlZmluZSBCQVNFSEQgVUJJRlNfQkFTRV9IRUFECisjZGVmaW5lIERBVEFIRCBVQklGU19EQVRBX0hFQUQKIAogLyogJ05vIGNoYW5nZScgdmFsdWUgZm9yICd1Ymlmc19jaGFuZ2VfbHAoKScgKi8KICNkZWZpbmUgTFBST1BTX05DIDB4ODAwMDAwMDEKQEAgLTE0NTEsNyArMTQ0OSw3IEBACiAKIC8qIHNjYW4uYyAqLwogc3RydWN0IHViaWZzX3NjYW5fbGViICp1Ymlmc19zY2FuKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSwKLQkJCQkgIGludCBvZmZzLCB2b2lkICpzYnVmKTsKKwkJCQkgIGludCBvZmZzLCB2b2lkICpzYnVmLCBpbnQgcXVpZXQpOwogdm9pZCB1Ymlmc19zY2FuX2Rlc3Ryb3koc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViKTsKIGludCB1Ymlmc19zY2FuX2Ffbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgbG51bSwKIAkJICAgICAgaW50IG9mZnMsIGludCBxdWlldCk7CkBAIC0xNjc2LDYgKzE2NzQsNyBAQAogY29uc3Qgc3RydWN0IHViaWZzX2xwcm9wcyAqdWJpZnNfZmFzdF9maW5kX2VtcHR5KHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKnViaWZzX2Zhc3RfZmluZF9mcmVlYWJsZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiBjb25zdCBzdHJ1Y3QgdWJpZnNfbHByb3BzICp1Ymlmc19mYXN0X2ZpbmRfZnJkaV9pZHgoc3RydWN0IHViaWZzX2luZm8gKmMpOworaW50IHViaWZzX2NhbGNfZGFyayhjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IHNwYyk7CiAKIC8qIGZpbGUuYyAqLwogaW50IHViaWZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYyk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy94YXR0ci5jIGIvZnMvdWJpZnMveGF0dHIuYwppbmRleCBhZGFmY2Y1Li4xOTU4MzBmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy94YXR0ci5jCisrKyBiL2ZzL3ViaWZzL3hhdHRyLmMKQEAgLTc4LDkgKzc4LDkgQEAKIAlTRUNVUklUWV9YQVRUUiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBub25lX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBub25lX2FkZHJlc3Nfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5vbmVfZmlsZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5vbmVfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5vbmVfYWRkcmVzc19vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbm9uZV9maWxlX29wZXJhdGlvbnM7CiAKIC8qKgogICogY3JlYXRlX3hhdHRyIC0gY3JlYXRlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCmluZGV4IGNiNmUyY2MuLjllNDFmOTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJcmV0dXJuIC14ZnNfcW1fc2NhbGxfc2V0cWxpbShtcCwgaWQsIHhmc19xdW90YV90eXBlKHR5cGUpLCBmZHEpOwogfQogCi1zdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyB4ZnNfcXVvdGFjdGxfb3BlcmF0aW9ucyA9IHsKIAkucXVvdGFfc3luYwkJPSB4ZnNfZnNfcXVvdGFfc3luYywKIAkuZ2V0X3hzdGF0ZQkJPSB4ZnNfZnNfZ2V0X3hzdGF0ZSwKIAkuc2V0X3hzdGF0ZQkJPSB4ZnNfZnNfc2V0X3hzdGF0ZSwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDVkN2M2MGEuLmJkZDQxYzggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtNjcsNyArNjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHhmc19zdXBlcl9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHhmc19zdXBlcl9vcGVyYXRpb25zOwogc3RhdGljIGttZW1fem9uZV90ICp4ZnNfaW9lbmRfem9uZTsKIG1lbXBvb2xfdCAqeGZzX2lvZW5kX3Bvb2w7CiAKQEAgLTE1MzYsNyArMTUzNiw3IEBACiAJCQkgICBtbnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeGZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeGZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CiAJLmFsbG9jX2lub2RlCQk9IHhmc19mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQkJPSB4ZnNfZnNfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJCT0geGZzX2ZzX3dyaXRlX2lub2RlLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKaW5kZXggNWEyZWEzYS4uMTgxNzVlYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCkBAIC05Myw3ICs5Myw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgeGZzX2V4cG9ydF9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyICp4ZnNfeGF0dHJfaGFuZGxlcnNbXTsKLWV4dGVybiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnM7CiAKICNkZWZpbmUgWEZTX00oc2IpCQkoKHN0cnVjdCB4ZnNfbW91bnQgKikoKHNiKS0+c19mc19pbmZvKSkKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mcy5oIGIvZnMveGZzL3hmc19mcy5oCmluZGV4IGM0ZWE1MWIuLmY1MmFjMjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnMuaAorKysgYi9mcy94ZnMveGZzX2ZzLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogI2RlZmluZSBCTVZfSUZfVkFMSUQJXAogCShCTVZfSUZfQVRUUkZPUkt8Qk1WX0lGX05PX0RNQVBJX1JFQUR8Qk1WX0lGX1BSRUFMTE9DfEJNVl9JRl9ERUxBTExPQykKIAotLyoJYm12X29mbGFncyB2YWx1ZXMgLSByZXR1cm5lZCBmb3IgZm9yIGVhY2ggbm9uLWhlYWRlciBzZWdtZW50ICovCisvKglibXZfb2ZsYWdzIHZhbHVlcyAtIHJldHVybmVkIGZvciBlYWNoIG5vbi1oZWFkZXIgc2VnbWVudCAqLwogI2RlZmluZSBCTVZfT0ZfUFJFQUxMT0MJCTB4MQkvKiBzZWdtZW50ID0gdW53cml0dGVuIHByZS1hbGxvY2F0aW9uICovCiAjZGVmaW5lIEJNVl9PRl9ERUxBTExPQwkJMHgyCS8qIHNlZ21lbnQgPSBkZWxheWVkIGFsbG9jYXRpb24gKi8KICNkZWZpbmUgQk1WX09GX0xBU1QJCTB4NAkvKiBzZWdtZW50IGlzIHRoZSBsYXN0IGluIHRoZSBmaWxlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCmluZGV4IDFmYTNmZmIuLjFjZWYxMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KIAotI2RlZmluZSBQUkVGSVgJCQkiQUNQSTogIgotCiAvKiBUQkQ6IE1ha2UgZHluYW1pYyAqLwogI2RlZmluZSBBQ1BJX01BWF9IQU5ETEVTCTEwCiBzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCB7CkBAIC04OSw3ICs4Nyw2IEBACiB0eXBlZGVmIGludCAoKmFjcGlfb3BfYWRkKSAoc3RydWN0IGFjcGlfZGV2aWNlICogZGV2aWNlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9yZW1vdmUpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIGludCB0eXBlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9zdGFydCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSk7Ci10eXBlZGVmIGludCAoKmFjcGlfb3Bfc3RvcCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSwgaW50IHR5cGUpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3N1c3BlbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsCiAJCQkJcG1fbWVzc2FnZV90IHN0YXRlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9yZXN1bWUpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwpAQCAtMTA2LDcgKzEwMyw2IEBACiAJYWNwaV9vcF9hZGQgYWRkOwogCWFjcGlfb3BfcmVtb3ZlIHJlbW92ZTsKIAlhY3BpX29wX3N0YXJ0IHN0YXJ0OwotCWFjcGlfb3Bfc3RvcCBzdG9wOwogCWFjcGlfb3Bfc3VzcGVuZCBzdXNwZW5kOwogCWFjcGlfb3BfcmVzdW1lIHJlc3VtZTsKIAlhY3BpX29wX2JpbmQgYmluZDsKQEAgLTE3MywxNyArMTY5LDE1IEBACiAKIHR5cGVkZWYgY2hhciBhY3BpX2J1c19pZFs4XTsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBhY3BpX2J1c19hZGRyZXNzOwotdHlwZWRlZiBjaGFyIGFjcGlfaGFyZHdhcmVfaWRbMTVdOwotdHlwZWRlZiBjaGFyIGFjcGlfdW5pcXVlX2lkWzldOwogdHlwZWRlZiBjaGFyIGFjcGlfZGV2aWNlX25hbWVbNDBdOwogdHlwZWRlZiBjaGFyIGFjcGlfZGV2aWNlX2NsYXNzWzIwXTsKIAogc3RydWN0IGFjcGlfZGV2aWNlX3BucCB7CiAJYWNwaV9idXNfaWQgYnVzX2lkOwkvKiBPYmplY3QgbmFtZSAqLwogCWFjcGlfYnVzX2FkZHJlc3MgYnVzX2FkZHJlc3M7CS8qIF9BRFIgKi8KLQlhY3BpX2hhcmR3YXJlX2lkIGhhcmR3YXJlX2lkOwkvKiBfSElEICovCi0Jc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdDsJLyogX0NJRHMgKi8KLQlhY3BpX3VuaXF1ZV9pZCB1bmlxdWVfaWQ7CS8qIF9VSUQgKi8KKwljaGFyICpoYXJkd2FyZV9pZDsJLyogX0hJRCAqLworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwkvKiBfQ0lEcyAqLworCWNoYXIgKnVuaXF1ZV9pZDsJLyogX1VJRCAqLwogCWFjcGlfZGV2aWNlX25hbWUgZGV2aWNlX25hbWU7CS8qIERyaXZlci1kZXRlcm1pbmVkICovCiAJYWNwaV9kZXZpY2VfY2xhc3MgZGV2aWNlX2NsYXNzOwkvKiAgICAgICAgIiAgICAgICAgICAqLwogfTsKQEAgLTMxNCw3ICszMDgsNyBAQAogCiBleHRlcm4gc3RydWN0IGtvYmplY3QgKmFjcGlfa29iajsKIGV4dGVybiBpbnQgYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHU4LCBpbnQpOwotdm9pZCBhY3BpX2J1c19wcml2YXRlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSwgdTMyLCB2b2lkICopOwordm9pZCBhY3BpX2J1c19wcml2YXRlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSwgdm9pZCAqKTsKIGludCBhY3BpX2J1c19nZXRfcHJpdmF0ZV9kYXRhKGFjcGlfaGFuZGxlLCB2b2lkICoqKTsKIGV4dGVybiBpbnQgYWNwaV9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBhY3BpX2RldmljZSAqLCB1MzIsIHUzMik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FjcGlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwpAQCAtMzI3LDcgKzMyMSw3IEBACiAgKi8KIAogaW50IGFjcGlfYnVzX2dldF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipkZXZpY2UpOwotdm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZnVuY3Rpb24sIHZvaWQgKmNvbnRleHQpOwordm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB2b2lkICpjb250ZXh0KTsKIGludCBhY3BpX2J1c19nZXRfc3RhdHVzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIGludCBhY3BpX2J1c19nZXRfcG93ZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnN0YXRlKTsKIGludCBhY3BpX2J1c19zZXRfcG93ZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgc3RhdGUpOwpAQCAtMzU2LDcgKzM1MCw2IEBACiAvKgogICogQmluZCBwaHlzaWNhbCBkZXZpY2VzIHdpdGggQUNQSSBkZXZpY2VzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIHN0cnVjdCBhY3BpX2J1c190eXBlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGJ1c190eXBlICpidXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IGFiMGI4NWMuLmViMGU3MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCkBAIC0yNDUsNiArMjQ1LDkgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX29zX3ZhbGlkYXRlX2FkZHJlc3ModTggc3BhY2VfaWQsIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJIGFjcGlfc2l6ZSBsZW5ndGgsIGNoYXIgKm5hbWUpOworYWNwaV9zdGF0dXMKK2FjcGlfb3NfaW52YWxpZGF0ZV9hZGRyZXNzKHU4IHNwYWNlX2lkLCBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKKwkJCSBhY3BpX3NpemUgbGVuZ3RoKTsKIAogdTY0IGFjcGlfb3NfZ2V0X3RpbWVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggODJlYzZhMy4uZTcyM2IwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBDdXJyZW50IEFDUElDQSBzdWJzeXN0ZW0gdmVyc2lvbiBpbiBZWVlZTU1ERCBmb3JtYXQgKi8KIAotI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAwOTA1MjEKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDkwOTAzCiAKICNpbmNsdWRlICJhY3R5cGVzLmgiCiAjaW5jbHVkZSAiYWN0YmwuaCIKQEAgLTY0LDYgKzY0LDcgQEAKIGV4dGVybiB1OCBhY3BpX2dibF9hbGxfbWV0aG9kc19zZXJpYWxpemVkOwogZXh0ZXJuIHU4IGFjcGlfZ2JsX2NyZWF0ZV9vc2lfbWV0aG9kOwogZXh0ZXJuIHU4IGFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZDsKK2V4dGVybiB1OCBhY3BpX2dibF91c2VfZGVmYXVsdF9yZWdpc3Rlcl93aWR0aHM7CiBleHRlcm4gYWNwaV9uYW1lIGFjcGlfZ2JsX3RyYWNlX21ldGhvZF9uYW1lOwogZXh0ZXJuIHUzMiBhY3BpX2dibF90cmFjZV9mbGFnczsKIApAQCAtMTk5LDcgKzIwMCw4IEBACiAJCQkgICBhY3BpX29iamVjdF90eXBlIHJldHVybl90eXBlKTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfZ2V0X29iamVjdF9pbmZvKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfYnVmZmVyICpyZXR1cm5fYnVmZmVyKTsKK2FjcGlfZ2V0X29iamVjdF9pbmZvKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqKnJldHVybl9idWZmZXIpOwogCiBhY3BpX3N0YXR1cyBhY3BpX2luc3RhbGxfbWV0aG9kKHU4ICpidWZmZXIpOwogCkBAIC0zNTksOSArMzYxLDkgQEAKIGFjcGlfc3RhdHVzIGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3I2NCh1NjQgcGh5c2ljYWxfYWRkcmVzcyk7CiAjZW5kaWYKIAotYWNwaV9zdGF0dXMgYWNwaV9yZWFkKHUzMiAqdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKTsKK2FjcGlfc3RhdHVzIGFjcGlfcmVhZCh1NjQgKnZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZyk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfd3JpdGUodTMyIHZhbHVlLCBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKnJlZyk7CithY3BpX3N0YXR1cyBhY3BpX3dyaXRlKHU2NCB2YWx1ZSwgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWcpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfc2xlZXBfdHlwZV9kYXRhKHU4IHNsZWVwX3N0YXRlLCB1OCAqIHNscF90eXBfYSwgdTggKiBzbHBfdHlwX2IpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCAyMjI3MzNkLi4xYjY1ODc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtNDQsOSArNDQsMjMgQEAKICNpZm5kZWYgX19BQ1RCTF9IX18KICNkZWZpbmUgX19BQ1RCTF9IX18KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGdW5kYW1lbnRhbCBBQ1BJIHRhYmxlcworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIEFDUEkgdGFibGVzIHRoYXQgYXJlIGRpcmVjdGx5IGNvbnN1bWVkCisgKiBieSBBQ1BJQ0EuIEFsbCBvdGhlciB0YWJsZXMgYXJlIGNvbnN1bWVkIGJ5IHRoZSBPUy1kZXBlbmRlbnQgQUNQSS1yZWxhdGVkCisgKiBkZXZpY2UgZHJpdmVycyBhbmQgb3RoZXIgT1Mgc3VwcG9ydCBjb2RlLgorICoKKyAqIFRoZSBSU0RQIGFuZCBGQUNTIGRvIG5vdCB1c2UgdGhlIGNvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlci4gQWxsIG90aGVyIEFDUEkKKyAqIHRhYmxlcyB1c2UgdGhlIGhlYWRlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKgotICogVmFsdWVzIGZvciBkZXNjcmlwdGlvbiB0YWJsZSBoZWFkZXIgc2lnbmF0dXJlcy4gVXNlZnVsIGJlY2F1c2UgdGhleSBtYWtlCi0gKiBpdCBtb3JlIGRpZmZpY3VsdCB0byBpbmFkdmVydGVudGx5IHR5cGUgaW4gdGhlIHdyb25nIHNpZ25hdHVyZS4KKyAqIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMgZm9yIHRhYmxlcyBkZWZpbmVkIGluIHRoaXMKKyAqIGZpbGUuIFVzZWZ1bCBiZWNhdXNlIHRoZXkgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBpbmFkdmVydGVudGx5IHR5cGUgaW4KKyAqIHRoZSB3cm9uZyBzaWduYXR1cmUuCiAgKi8KICNkZWZpbmUgQUNQSV9TSUdfRFNEVCAgICAgICAgICAgIkRTRFQiCS8qIERpZmZlcmVudGlhdGVkIFN5c3RlbSBEZXNjcmlwdGlvbiBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19GQURUICAgICAgICAgICAiRkFDUCIJLyogRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAqLwpAQCAtNjUsMTEgKzc5LDYgQEAKICNwcmFnbWEgcGFjaygxKQogCiAvKgotICogVGhlc2UgYXJlIHRoZSBBQ1BJIHRhYmxlcyB0aGF0IGFyZSBkaXJlY3RseSBjb25zdW1lZCBieSB0aGUgc3Vic3lzdGVtLgotICoKLSAqIFRoZSBSU0RQIGFuZCBGQUNTIGRvIG5vdCB1c2UgdGhlIGNvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlci4gQWxsIG90aGVyIEFDUEkKLSAqIHRhYmxlcyB1c2UgdGhlIGhlYWRlci4KLSAqCiAgKiBOb3RlIGFib3V0IGJpdGZpZWxkczogVGhlIHU4IHR5cGUgaXMgdXNlZCBmb3IgYml0ZmllbGRzIGluIEFDUEkgdGFibGVzLgogICogVGhpcyBpcyB0aGUgb25seSB0eXBlIHRoYXQgaXMgZXZlbiByZW1vdGVseSBwb3J0YWJsZS4gQW55dGhpbmcgZWxzZSBpcyBub3QKICAqIHBvcnRhYmxlLCBzbyBkbyBub3QgdXNlIGFueSBvdGhlciBiaXRmaWVsZCB0eXBlcy4KQEAgLTc3LDkgKzg2LDggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBBQ1BJIFRhYmxlIEhlYWRlci4gVGhpcyBjb21tb24gaGVhZGVyIGlzIHVzZWQgYnkgYWxsIHRhYmxlcyBleGNlcHQgdGhlCi0gKiBSU0RQIGFuZCBGQUNTLiBUaGUgZGVmaW5lIGlzIHVzZWQgZm9yIGRpcmVjdCBpbmNsdXNpb24gb2YgaGVhZGVyIGludG8KLSAqIG90aGVyIEFDUEkgdGFibGVzCisgKiBNYXN0ZXIgQUNQSSBUYWJsZSBIZWFkZXIuIFRoaXMgY29tbW9uIGhlYWRlciBpcyB1c2VkIGJ5IGFsbCBBQ1BJIHRhYmxlcworICogZXhjZXB0IHRoZSBSU0RQIGFuZCBGQUNTLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTk1LDEzICsxMDMsMTYgQEAKIAl1MzIgYXNsX2NvbXBpbGVyX3JldmlzaW9uOwkvKiBBU0wgY29tcGlsZXIgdmVyc2lvbiAqLwogfTsKIAotLyoKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogR0FTIC0gR2VuZXJpYyBBZGRyZXNzIFN0cnVjdHVyZSAoQUNQSSAyLjArKQogICoKICAqIE5vdGU6IFNpbmNlIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4gdGhlIEFDUEkgdGFibGVzLCBpdCBpcyBieXRlIGFsaWduZWQuCi0gKiBJZiBtaXNhbGlnbm1lbnQgaXMgbm90IHN1cHBvcnRlZCwgYWNjZXNzIHRvIHRoZSBBZGRyZXNzIGZpZWxkIG11c3QgYmUKLSAqIHBlcmZvcm1lZCB3aXRoIGNhcmUuCi0gKi8KKyAqIElmIG1pc2FsaWdlZCBhY2Nlc3MgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUsIGFjY2Vzc2VzIHRvIHRoZQorICogNjQtYml0IEFkZHJlc3MgZmllbGQgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCBjYXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB7CiAJdTggc3BhY2VfaWQ7CQkvKiBBZGRyZXNzIHNwYWNlIHdoZXJlIHN0cnVjdCBvciByZWdpc3RlciBleGlzdHMgKi8KIAl1OCBiaXRfd2lkdGg7CQkvKiBTaXplIGluIGJpdHMgb2YgZ2l2ZW4gcmVnaXN0ZXIgKi8KQEAgLTExMyw2ICsxMjQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBSU0RQIC0gUm9vdCBTeXN0ZW0gRGVzY3JpcHRpb24gUG9pbnRlciAoU2lnbmF0dXJlIGlzICJSU0QgUFRSICIpCisgKiAgICAgICAgVmVyc2lvbiAyCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTMzLDYgKzE0NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFJTRFQvWFNEVCAtIFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFRhYmxlcworICogICAgICAgICAgICAgVmVyc2lvbiAxIChib3RoKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE2MSwyMSArMTc0LDI5IEBACiAJdTMyIGZsYWdzOwogCXU2NCB4ZmlybXdhcmVfd2FraW5nX3ZlY3RvcjsJLyogNjQtYml0IHZlcnNpb24gb2YgdGhlIEZpcm13YXJlIFdha2luZyBWZWN0b3IgKEFDUEkgMi4wKykgKi8KIAl1OCB2ZXJzaW9uOwkJLyogVmVyc2lvbiBvZiB0aGlzIHRhYmxlIChBQ1BJIDIuMCspICovCi0JdTggcmVzZXJ2ZWRbMzFdOwkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTggcmVzZXJ2ZWRbM107CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCisJdTMyIG9zcG1fZmxhZ3M7CQkvKiBGbGFncyB0byBiZSBzZXQgYnkgT1NQTSAoQUNQSSA0LjApICovCisJdTggcmVzZXJ2ZWQxWzI0XTsJLyogUmVzZXJ2ZWQsIG11c3QgYmUgemVybyAqLwogfTsKIAotLyogRmxhZyBtYWNyb3MgKi8KKy8qIE1hc2tzIGZvciBnbG9iYWxfbG9jayBmbGFnIGZpZWxkIGFib3ZlICovCiAKLSNkZWZpbmUgQUNQSV9GQUNTX1M0X0JJT1NfUFJFU0VOVCAoMSkJLyogMDA6IFM0QklPUyBzdXBwb3J0IGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgQUNQSV9HTE9DS19QRU5ESU5HICAgICAgICAgICgxKQkvKiAwMDogUGVuZGluZyBnbG9iYWwgbG9jayBvd25lcnNoaXAgKi8KKyNkZWZpbmUgQUNQSV9HTE9DS19PV05FRCAgICAgICAgICAgICgxPDwxKQkvKiAwMTogR2xvYmFsIGxvY2sgaXMgb3duZWQgKi8KIAotLyogR2xvYmFsIGxvY2sgZmxhZ3MgKi8KKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAgKi8KIAotI2RlZmluZSBBQ1BJX0dMT0NLX1BFTkRJTkcgICAgICAweDAxCS8qIDAwOiBQZW5kaW5nIGdsb2JhbCBsb2NrIG93bmVyc2hpcCAqLwotI2RlZmluZSBBQ1BJX0dMT0NLX09XTkVEICAgICAgICAweDAyCS8qIDAxOiBHbG9iYWwgbG9jayBpcyBvd25lZCAqLworI2RlZmluZSBBQ1BJX0ZBQ1NfUzRfQklPU19QUkVTRU5UICAgKDEpCS8qIDAwOiBTNEJJT1Mgc3VwcG9ydCBpcyBwcmVzZW50ICovCisjZGVmaW5lIEFDUElfRkFDU182NEJJVF9XQUtFICAgICAgICAoMTw8MSkJLyogMDE6IDY0LWJpdCB3YWtlIHZlY3RvciBzdXBwb3J0ZWQgKEFDUEkgNC4wKSAqLworCisvKiBNYXNrcyBmb3Igb3NwbV9mbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfRkFDU182NEJJVF9FTlZJUk9OTUVOVCAoMSkJLyogMDA6IDY0LWJpdCB3YWtlIGVudmlyb25tZW50IGlzIHJlcXVpcmVkIChBQ1BJIDQuMCkgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGQURUIC0gRml4ZWQgQUNQSSBEZXNjcmlwdGlvbiBUYWJsZSAoU2lnbmF0dXJlICJGQUNQIikKKyAqICAgICAgICBWZXJzaW9uIDQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yMzYsNyArMjU3LDcgQEAKIAlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgeGdwZTFfYmxvY2s7CS8qIDY0LWJpdCBFeHRlbmRlZCBHZW5lcmFsIFB1cnBvc2UgRXZlbnQgMSBSZWcgQmxrIGFkZHJlc3MgKi8KIH07CiAKLS8qIEZBRFQgQm9vdCBBcmNoaXRlY3R1cmUgRmxhZ3MgKGJvb3RfZmxhZ3MpICovCisvKiBNYXNrcyBmb3IgRkFEVCBCb290IEFyY2hpdGVjdHVyZSBGbGFncyAoYm9vdF9mbGFncykgKi8KIAogI2RlZmluZSBBQ1BJX0ZBRFRfTEVHQUNZX0RFVklDRVMgICAgKDEpICAJLyogMDA6IFtWMl0gU3lzdGVtIGhhcyBMUEMgb3IgSVNBIGJ1cyBkZXZpY2VzICovCiAjZGVmaW5lIEFDUElfRkFEVF84MDQyICAgICAgICAgICAgICAoMTw8MSkJLyogMDE6IFtWM10gU3lzdGVtIGhhcyBhbiA4MDQyIGNvbnRyb2xsZXIgb24gcG9ydCA2MC82NCAqLwpAQCAtMjQ2LDcgKzI2Nyw3IEBACiAKICNkZWZpbmUgRkFEVDJfUkVWSVNJT05fSUQgICAgICAgICAgICAgICAzCiAKLS8qIEZBRFQgZmxhZ3MgKi8KKy8qIE1hc2tzIGZvciBGQURUIGZsYWdzICovCiAKICNkZWZpbmUgQUNQSV9GQURUX1dCSU5WRCAgICAgICAgICAgICgxKQkvKiAwMDogW1YxXSBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCiAjZGVmaW5lIEFDUElfRkFEVF9XQklOVkRfRkxVU0ggICAgICAoMTw8MSkJLyogMDE6IFtWMV0gd2JpbnZkIGZsdXNoZXMgYnV0IGRvZXMgbm90IGludmFsaWRhdGUgY2FjaGVzICovCkBAIC0yNjksNyArMjkwLDcgQEAKICNkZWZpbmUgQUNQSV9GQURUX0FQSUNfQ0xVU1RFUiAgICAgICgxPDwxOCkJLyogMTg6IFtWNF0gQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKEFDUEkgMy4wKSAqLwogI2RlZmluZSBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCAgICAgKDE8PDE5KQkvKiAxOTogW1Y0XSBBbGwgbG9jYWwgeF9hUElDcyBtdXN0IHVzZSBwaHlzaWNhbCBkZXN0IG1vZGUgKEFDUEkgMy4wKSAqLwogCi0vKiBGQURUIFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMgKi8KKy8qIFZhbHVlcyBmb3IgcHJlZmVycmVkX3Byb2ZpbGUgKFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMpICovCiAKIGVudW0gYWNwaV9wcmVmZXJlZF9wbV9wcm9maWxlcyB7CiAJUE1fVU5TUEVDSUZJRUQgPSAwLApAQCAtMjg3LDE0ICszMDgsMTYgQEAKIAogI2RlZmluZSBBQ1BJX0ZBRFRfT0ZGU0VUKGYpICAgICAgICAgICAgICh1OCkgQUNQSV9PRkZTRVQgKHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQsIGYpCiAKKy8qCisgKiBJbnRlcm5hbCB0YWJsZS1yZWxhdGVkIHN0cnVjdHVyZXMKKyAqLwogdW5pb24gYWNwaV9uYW1lX3VuaW9uIHsKIAl1MzIgaW50ZWdlcjsKIAljaGFyIGFzY2lpWzRdOwogfTsKIAotLyoKLSAqIEludGVybmFsIEFDUEkgVGFibGUgRGVzY3JpcHRvci4gT25lIHBlciBBQ1BJIHRhYmxlCi0gKi8KKy8qIEludGVybmFsIEFDUEkgVGFibGUgRGVzY3JpcHRvci4gT25lIHBlciBBQ1BJIHRhYmxlLiAqLworCiBzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjIHsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnBvaW50ZXI7CkBAIC0zMDQsNyArMzI3LDcgQEAKIAl1OCBmbGFnczsKIH07CiAKLS8qIEZsYWdzIGZvciBhYm92ZSAqLworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCiAKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fVU5LTk9XTiAgICAgICAoMCkKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFQUEVEICAgICAgICAoMSkKQEAgLTMxOCw1ICszNDEsNiBAQAogICovCiAKICNpbmNsdWRlIDxhY3BpL2FjdGJsMS5oPgorI2luY2x1ZGUgPGFjcGkvYWN0YmwyLmg+CiAKICNlbmRpZgkJCQkvKiBfX0FDVEJMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsMS5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCmluZGV4IDU5YWRlMDcuLjBiOWI0MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKQEAgLTQ2LDQxICs0NiwzMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEFkZGl0aW9uYWwgQUNQSSBUYWJsZXMKKyAqIEFkZGl0aW9uYWwgQUNQSSBUYWJsZXMgKDEpCiAgKgogICogVGhlc2UgdGFibGVzIGFyZSBub3QgY29uc3VtZWQgZGlyZWN0bHkgYnkgdGhlIEFDUElDQSBzdWJzeXN0ZW0sIGJ1dCBhcmUKICAqIGluY2x1ZGVkIGhlcmUgdG8gc3VwcG9ydCBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIEFNTCBkaXNhc3NlbWJsZXIuCiAgKgorICogVGhlIHRhYmxlcyBpbiB0aGlzIGZpbGUgYXJlIGZ1bGx5IGRlZmluZWQgd2l0aGluIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMuIFVzZWZ1bCBiZWNhdXNlIHRoZXkgbWFrZQotICogaXQgbW9yZSBkaWZmaWN1bHQgdG8gaW5hZHZlcnRlbnRseSB0eXBlIGluIHRoZSB3cm9uZyBzaWduYXR1cmUuCisgKiBWYWx1ZXMgZm9yIGRlc2NyaXB0aW9uIHRhYmxlIGhlYWRlciBzaWduYXR1cmVzIGZvciB0YWJsZXMgZGVmaW5lZCBpbiB0aGlzCisgKiBmaWxlLiBVc2VmdWwgYmVjYXVzZSB0aGV5IG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gaW5hZHZlcnRlbnRseSB0eXBlIGluCisgKiB0aGUgd3Jvbmcgc2lnbmF0dXJlLgogICovCi0jZGVmaW5lIEFDUElfU0lHX0FTRiAgICAgICAgICAgICJBU0YhIgkvKiBBbGVydCBTdGFuZGFyZCBGb3JtYXQgdGFibGUgKi8KICNkZWZpbmUgQUNQSV9TSUdfQkVSVCAgICAgICAgICAgIkJFUlQiCS8qIEJvb3QgRXJyb3IgUmVjb3JkIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX0JPT1QgICAgICAgICAgICJCT09UIgkvKiBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX0NQRVAgICAgICAgICAgICJDUEVQIgkvKiBDb3JyZWN0ZWQgUGxhdGZvcm0gRXJyb3IgUG9sbGluZyB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19EQkdQICAgICAgICAgICAiREJHUCIJLyogRGVidWcgUG9ydCB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19ETUFSICAgICAgICAgICAiRE1BUiIJLyogRE1BIFJlbWFwcGluZyB0YWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19FQ0RUICAgICAgICAgICAiRUNEVCIJLyogRW1iZWRkZWQgQ29udHJvbGxlciBCb290IFJlc291cmNlcyBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19FSU5KICAgICAgICAgICAiRUlOSiIJLyogRXJyb3IgSW5qZWN0aW9uIHRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX0VSU1QgICAgICAgICAgICJFUlNUIgkvKiBFcnJvciBSZWNvcmQgU2VyaWFsaXphdGlvbiBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19IRVNUICAgICAgICAgICAiSEVTVCIJLyogSGFyZHdhcmUgRXJyb3IgU291cmNlIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX0hQRVQgICAgICAgICAgICJIUEVUIgkvKiBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19JQkZUICAgICAgICAgICAiSUJGVCIJLyogaV9zQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgKi8KICNkZWZpbmUgQUNQSV9TSUdfTUFEVCAgICAgICAgICAgIkFQSUMiCS8qIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUgKi8KLSNkZWZpbmUgQUNQSV9TSUdfTUNGRyAgICAgICAgICAgIk1DRkciCS8qIFBDSSBNZW1vcnkgTWFwcGVkIENvbmZpZ3VyYXRpb24gdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfTVNDVCAgICAgICAgICAgIk1TQ1QiCS8qIE1heGltdW0gU3lzdGVtIENoYXJhY3RlcmlzdGljcyBUYWJsZSAqLwogI2RlZmluZSBBQ1BJX1NJR19TQlNUICAgICAgICAgICAiU0JTVCIJLyogU21hcnQgQmF0dGVyeSBTcGVjaWZpY2F0aW9uIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX1NMSUMgICAgICAgICAgICJTTElDIgkvKiBTb2Z0d2FyZSBMaWNlbnNpbmcgRGVzY3JpcHRpb24gVGFibGUgKi8KICNkZWZpbmUgQUNQSV9TSUdfU0xJVCAgICAgICAgICAgIlNMSVQiCS8qIFN5c3RlbSBMb2NhbGl0eSBEaXN0YW5jZSBJbmZvcm1hdGlvbiBUYWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19TUENSICAgICAgICAgICAiU1BDUiIJLyogU2VyaWFsIFBvcnQgQ29uc29sZSBSZWRpcmVjdGlvbiB0YWJsZSAqLwotI2RlZmluZSBBQ1BJX1NJR19TUE1JICAgICAgICAgICAiU1BNSSIJLyogU2VydmVyIFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJmYWNlIHRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX1NSQVQgICAgICAgICAgICJTUkFUIgkvKiBTeXN0ZW0gUmVzb3VyY2UgQWZmaW5pdHkgVGFibGUgKi8KLSNkZWZpbmUgQUNQSV9TSUdfVENQQSAgICAgICAgICAgIlRDUEEiCS8qIFRydXN0ZWQgQ29tcHV0aW5nIFBsYXRmb3JtIEFsbGlhbmNlIHRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX1VFRkkgICAgICAgICAgICJVRUZJIgkvKiBVZWZpIEJvb3QgT3B0aW1pemF0aW9uIFRhYmxlICovCi0jZGVmaW5lIEFDUElfU0lHX1dEQVQgICAgICAgICAgICJXREFUIgkvKiBXYXRjaGRvZyBBY3Rpb24gVGFibGUgKi8KLSNkZWZpbmUgQUNQSV9TSUdfV0RSVCAgICAgICAgICAgIldEUlQiCS8qIFdhdGNoZG9nIFJlc291cmNlIFRhYmxlICovCiAKIC8qCiAgKiBBbGwgdGFibGVzIG11c3QgYmUgYnl0ZS1wYWNrZWQgdG8gbWF0Y2ggdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiwgc2luY2UKQEAgLTk0LDE0ICs4NCwyMCBAQAogICogcG9ydGFibGUsIHNvIGRvIG5vdCB1c2UgYW55IG90aGVyIGJpdGZpZWxkIHR5cGVzLgogICovCiAKLS8qIENvbW1vbiBTdWJ0YWJsZSBoZWFkZXIgKHVzZWQgaW4gTUFEVCwgU1JBVCwgZXRjLikgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29tbW9uIHN1YnRhYmxlIGhlYWRlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBHZW5lcmljIHN1YnRhYmxlIGhlYWRlciAodXNlZCBpbiBNQURULCBTUkFULCBldGMuKSAqLwogCiBzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgewogCXU4IHR5cGU7CiAJdTggbGVuZ3RoOwogfTsKIAotLyogQ29tbW9uIFN1YnRhYmxlIGhlYWRlciBmb3IgV0hFQSB0YWJsZXMgKEVJTkosIEVSU1QsIFdEQVQpICovCisvKiBTdWJ0YWJsZSBoZWFkZXIgZm9yIFdIRUEgdGFibGVzIChFSU5KLCBFUlNULCBXREFUKSAqLwogCiBzdHJ1Y3QgYWNwaV93aGVhX2hlYWRlciB7CiAJdTggYWN0aW9uOwpAQCAtMTE1LDExNiArMTExLDggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBBU0YgLSBBbGVydCBTdGFuZGFyZCBGb3JtYXQgdGFibGUgKFNpZ25hdHVyZSAiQVNGISIpCi0gKgotICogQ29uZm9ybXMgdG8gdGhlIEFsZXJ0IFN0YW5kYXJkIEZvcm1hdCBTcGVjaWZpY2F0aW9uIFYyLjAsIDIzIEFwcmlsIDIwMDMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9hc2YgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotfTsKLQotLyogQVNGIHN1YnRhYmxlIGhlYWRlciAqLwotCi1zdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIHsKLQl1OCB0eXBlOwotCXU4IHJlc2VydmVkOwotCXUxNiBsZW5ndGg7Ci19OwotCi0vKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KLQotZW51bSBhY3BpX2FzZl90eXBlIHsKLQlBQ1BJX0FTRl9UWVBFX0lORk8gPSAwLAotCUFDUElfQVNGX1RZUEVfQUxFUlQgPSAxLAotCUFDUElfQVNGX1RZUEVfQ09OVFJPTCA9IDIsCi0JQUNQSV9BU0ZfVFlQRV9CT09UID0gMywKLQlBQ1BJX0FTRl9UWVBFX0FERFJFU1MgPSA0LAotCUFDUElfQVNGX1RZUEVfUkVTRVJWRUQgPSA1Ci19OwotCi0vKgotICogQVNGIHN1YnRhYmxlcwotICovCi0KLS8qIDA6IEFTRiBJbmZvcm1hdGlvbiAqLwotCi1zdHJ1Y3QgYWNwaV9hc2ZfaW5mbyB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggbWluX3Jlc2V0X3ZhbHVlOwotCXU4IG1pbl9wb2xsX2ludGVydmFsOwotCXUxNiBzeXN0ZW1faWQ7Ci0JdTMyIG1mZ19pZDsKLQl1OCBmbGFnczsKLQl1OCByZXNlcnZlZDJbM107Ci19OwotCi0vKiAxOiBBU0YgQWxlcnRzICovCi0KLXN0cnVjdCBhY3BpX2FzZl9hbGVydCB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggYXNzZXJ0X21hc2s7Ci0JdTggZGVhc3NlcnRfbWFzazsKLQl1OCBhbGVydHM7Ci0JdTggZGF0YV9sZW5ndGg7Ci19OwotCi1zdHJ1Y3QgYWNwaV9hc2ZfYWxlcnRfZGF0YSB7Ci0JdTggYWRkcmVzczsKLQl1OCBjb21tYW5kOwotCXU4IG1hc2s7Ci0JdTggdmFsdWU7Ci0JdTggc2Vuc29yX3R5cGU7Ci0JdTggdHlwZTsKLQl1OCBvZmZzZXQ7Ci0JdTggc291cmNlX3R5cGU7Ci0JdTggc2V2ZXJpdHk7Ci0JdTggc2Vuc29yX251bWJlcjsKLQl1OCBlbnRpdHk7Ci0JdTggaW5zdGFuY2U7Ci19OwotCi0vKiAyOiBBU0YgUmVtb3RlIENvbnRyb2wgKi8KLQotc3RydWN0IGFjcGlfYXNmX3JlbW90ZSB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggY29udHJvbHM7Ci0JdTggZGF0YV9sZW5ndGg7Ci0JdTE2IHJlc2VydmVkMjsKLX07Ci0KLXN0cnVjdCBhY3BpX2FzZl9jb250cm9sX2RhdGEgewotCXU4IGZ1bmN0aW9uOwotCXU4IGFkZHJlc3M7Ci0JdTggY29tbWFuZDsKLQl1OCB2YWx1ZTsKLX07Ci0KLS8qIDM6IEFTRiBSTUNQIEJvb3QgT3B0aW9ucyAqLwotCi1zdHJ1Y3QgYWNwaV9hc2Zfcm1jcCB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggY2FwYWJpbGl0aWVzWzddOwotCXU4IGNvbXBsZXRpb25fY29kZTsKLQl1MzIgZW50ZXJwcmlzZV9pZDsKLQl1OCBjb21tYW5kOwotCXUxNiBwYXJhbWV0ZXI7Ci0JdTE2IGJvb3Rfb3B0aW9uczsKLQl1MTYgb2VtX3BhcmFtZXRlcnM7Ci19OwotCi0vKiA0OiBBU0YgQWRkcmVzcyAqLwotCi1zdHJ1Y3QgYWNwaV9hc2ZfYWRkcmVzcyB7Ci0Jc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7Ci0JdTggZXByb21fYWRkcmVzczsKLQl1OCBkZXZpY2VzOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBCRVJUIC0gQm9vdCBFcnJvciBSZWNvcmQgVGFibGUKKyAqIEJFUlQgLSBCb290IEVycm9yIFJlY29yZCBUYWJsZSAoQUNQSSA0LjApCisgKiAgICAgICAgVmVyc2lvbiAxCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjM0LDM4ICsxMjIsNDMgQEAKIAl1NjQgYWRkcmVzczsJCS8qIFBoeXNpY2FsIGFkZHJlc3NzIG9mIHRoZSBlcnJvciByZWdpb24gKi8KIH07CiAKLS8qIEJvb3QgRXJyb3IgUmVnaW9uICovCisvKiBCb290IEVycm9yIFJlZ2lvbiAobm90IGEgc3VidGFibGUsIHBvaW50ZWQgdG8gYnkgQWRkcmVzcyBmaWVsZCBhYm92ZSkgKi8KIAogc3RydWN0IGFjcGlfYmVydF9yZWdpb24gewotCXUzMiBibG9ja19zdGF0dXM7Ci0JdTMyIHJhd19kYXRhX29mZnNldDsKLQl1MzIgcmF3X2RhdGFfbGVuZ3RoOwotCXUzMiBkYXRhX2xlbmd0aDsKLQl1MzIgZXJyb3Jfc2V2ZXJpdHk7CisJdTMyIGJsb2NrX3N0YXR1czsJLyogVHlwZSBvZiBlcnJvciBpbmZvcm1hdGlvbiAqLworCXUzMiByYXdfZGF0YV9vZmZzZXQ7CS8qIE9mZnNldCB0byByYXcgZXJyb3IgZGF0YSAqLworCXUzMiByYXdfZGF0YV9sZW5ndGg7CS8qIExlbmd0aCBvZiByYXcgZXJyb3IgZGF0YSAqLworCXUzMiBkYXRhX2xlbmd0aDsJLyogTGVuZ3RoIG9mIGdlbmVyaWMgZXJyb3IgZGF0YSAqLworCXUzMiBlcnJvcl9zZXZlcml0eTsJLyogU2V2ZXJpdHkgY29kZSAqLwogfTsKIAotLyogYmxvY2tfc3RhdHVzIEZsYWdzICovCisvKiBWYWx1ZXMgZm9yIGJsb2NrX3N0YXR1cyBmbGFncyBhYm92ZSAqLwogCiAjZGVmaW5lIEFDUElfQkVSVF9VTkNPUlJFQ1RBQkxFICAgICAgICAgICAgICgxKQotI2RlZmluZSBBQ1BJX0JFUlRfQ09SUkVDVEFCTEUgICAgICAgICAgICAgICAoMikKLSNkZWZpbmUgQUNQSV9CRVJUX01VTFRJUExFX1VOQ09SUkVDVEFCTEUgICAgKDQpCi0jZGVmaW5lIEFDUElfQkVSVF9NVUxUSVBMRV9DT1JSRUNUQUJMRSAgICAgICg4KQorI2RlZmluZSBBQ1BJX0JFUlRfQ09SUkVDVEFCTEUgICAgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQUNQSV9CRVJUX01VTFRJUExFX1VOQ09SUkVDVEFCTEUgICAgKDE8PDIpCisjZGVmaW5lIEFDUElfQkVSVF9NVUxUSVBMRV9DT1JSRUNUQUJMRSAgICAgICgxPDwzKQorI2RlZmluZSBBQ1BJX0JFUlRfRVJST1JfRU5UUllfQ09VTlQgICAgICAgICAoMHhGRjw8NCkJLyogOCBiaXRzLCBlcnJvciBjb3VudCAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEJPT1QgLSBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFZhbHVlcyBmb3IgZXJyb3Jfc2V2ZXJpdHkgYWJvdmUgKi8KIAotc3RydWN0IGFjcGlfdGFibGVfYm9vdCB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTggY21vc19pbmRleDsJCS8qIEluZGV4IGluIENNT1MgUkFNIGZvciB0aGUgYm9vdCByZWdpc3RlciAqLwotCXU4IHJlc2VydmVkWzNdOworZW51bSBhY3BpX2JlcnRfZXJyb3Jfc2V2ZXJpdHkgeworCUFDUElfQkVSVF9FUlJPUl9DT1JSRUNUQUJMRSA9IDAsCisJQUNQSV9CRVJUX0VSUk9SX0ZBVEFMID0gMSwKKwlBQ1BJX0JFUlRfRVJST1JfQ09SUkVDVEVEID0gMiwKKwlBQ1BJX0JFUlRfRVJST1JfTk9ORSA9IDMsCisJQUNQSV9CRVJUX0VSUk9SX1JFU0VSVkVEID0gNAkvKiA0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwogfTsKIAorLyoKKyAqIE5vdGU6IFRoZSBnZW5lcmljIGVycm9yIGRhdGEgdGhhdCBmb2xsb3dzIHRoZSBlcnJvcl9zZXZlcml0eSBmaWVsZCBhYm92ZQorICogdXNlcyB0aGUgc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX2RhdGEgZGVmaW5lZCB1bmRlciB0aGUgSEVTVCB0YWJsZSBiZWxvdworICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ1BFUCAtIENvcnJlY3RlZCBQbGF0Zm9ybSBFcnJvciBQb2xsaW5nIHRhYmxlCisgKiBDUEVQIC0gQ29ycmVjdGVkIFBsYXRmb3JtIEVycm9yIFBvbGxpbmcgdGFibGUgKEFDUEkgNC4wKQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTI3Nyw4ICsxNzAsNyBAQAogLyogU3VidGFibGUgKi8KIAogc3RydWN0IGFjcGlfY3BlcF9wb2xsaW5nIHsKLQl1OCB0eXBlOwotCXU4IGxlbmd0aDsKKwlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgaGVhZGVyOwogCXU4IGlkOwkJCS8qIFByb2Nlc3NvciBJRCAqLwogCXU4IGVpZDsJCQkvKiBQcm9jZXNzb3IgRUlEICovCiAJdTMyIGludGVydmFsOwkJLyogUG9sbGluZyBpbnRlcnZhbCAobXNlYykgKi8KQEAgLTI4NiwxMjQgKzE3OCw4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogREJHUCAtIERlYnVnIFBvcnQgdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9kYmdwIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1OCB0eXBlOwkJLyogMD1mdWxsIDE2NTUwLCAxPXN1YnNldCBvZiAxNjU1MCAqLwotCXU4IHJlc2VydmVkWzNdOwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBkZWJ1Z19wb3J0OwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBETUFSIC0gRE1BIFJlbWFwcGluZyB0YWJsZQotICoJICBGcm9tICJJbnRlbCBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2d5IGZvciBEaXJlY3RlZCBJL08iLCBTZXB0LiAyMDA3Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGFjcGlfdGFibGVfZG1hciB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTggd2lkdGg7CQkvKiBIb3N0IEFkZHJlc3MgV2lkdGggKi8KLQl1OCBmbGFnczsKLQl1OCByZXNlcnZlZFsxMF07Ci19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfRE1BUl9JTlRSX1JFTUFQCSAgICAoMSkKLQotLyogRE1BUiBzdWJ0YWJsZSBoZWFkZXIgKi8KLQotc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgewotCXUxNiB0eXBlOwotCXUxNiBsZW5ndGg7Ci19OwotCi0vKiBWYWx1ZXMgZm9yIHN1YnRhYmxlIHR5cGUgaW4gc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKi8KLQotZW51bSBhY3BpX2RtYXJfdHlwZSB7Ci0JQUNQSV9ETUFSX1RZUEVfSEFSRFdBUkVfVU5JVCA9IDAsCi0JQUNQSV9ETUFSX1RZUEVfUkVTRVJWRURfTUVNT1JZID0gMSwKLQlBQ1BJX0RNQVJfVFlQRV9BVFNSID0gMiwKLQlBQ1BJX0RNQVJfVFlQRV9SRVNFUlZFRCA9IDMJLyogMyBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KLX07Ci0KLXN0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlIHsKLQl1OCBlbnRyeV90eXBlOwotCXU4IGxlbmd0aDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTggZW51bWVyYXRpb25faWQ7Ci0JdTggYnVzOwotfTsKLQotLyogVmFsdWVzIGZvciBlbnRyeV90eXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlICovCi0KLWVudW0gYWNwaV9kbWFyX3Njb3BlX3R5cGUgewotCUFDUElfRE1BUl9TQ09QRV9UWVBFX05PVF9VU0VEID0gMCwKLQlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9FTkRQT0lOVCA9IDEsCi0JQUNQSV9ETUFSX1NDT1BFX1RZUEVfQlJJREdFID0gMiwKLQlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9JT0FQSUMgPSAzLAotCUFDUElfRE1BUl9TQ09QRV9UWVBFX0hQRVQgPSA0LAotCUFDUElfRE1BUl9TQ09QRV9UWVBFX1JFU0VSVkVEID0gNQkvKiA1IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwotfTsKLQotc3RydWN0IGFjcGlfZG1hcl9wY2lfcGF0aCB7Ci0JdTggZGV2OwotCXU4IGZuOwotfTsKLQotLyoKLSAqIERNQVIgU3ViLXRhYmxlcywgY29ycmVzcG9uZCB0byBUeXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyCi0gKi8KLQotLyogMDogSGFyZHdhcmUgVW5pdCBEZWZpbml0aW9uICovCi0KLXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCB7Ci0Jc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOwotCXU4IGZsYWdzOwotCXU4IHJlc2VydmVkOwotCXUxNiBzZWdtZW50OwotCXU2NCBhZGRyZXNzOwkJLyogUmVnaXN0ZXIgQmFzZSBBZGRyZXNzICovCi19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfRE1BUl9JTkNMVURFX0FMTCAgICAgICAoMSkKLQotLyogMTogUmVzZXJ2ZWQgTWVtb3J5IERlZmluaW5pdGlvbiAqLwotCi1zdHJ1Y3QgYWNwaV9kbWFyX3Jlc2VydmVkX21lbW9yeSB7Ci0Jc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOwotCXUxNiByZXNlcnZlZDsKLQl1MTYgc2VnbWVudDsKLQl1NjQgYmFzZV9hZGRyZXNzOwkJLyogNF9rIGFsaWduZWQgYmFzZSBhZGRyZXNzICovCi0JdTY0IGVuZF9hZGRyZXNzOwkvKiA0X2sgYWxpZ25lZCBsaW1pdCBhZGRyZXNzICovCi19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfRE1BUl9BTExPV19BTEwgICAgICAgICAoMSkKLQotCi0vKiAyOiBSb290IFBvcnQgQVRTIENhcGFiaWxpdHkgUmVwb3J0aW5nIFN0cnVjdHVyZSAqLwotCi1zdHJ1Y3QgYWNwaV9kbWFyX2F0c3IgewotICAgICAgIHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyIGhlYWRlcjsKLSAgICAgICB1OCBmbGFnczsKLSAgICAgICB1OCByZXNlcnZlZDsKLSAgICAgICB1MTYgc2VnbWVudDsKLX07Ci0KLS8qIEZsYWdzICovCi0KLSNkZWZpbmUgQUNQSV9ETUFSX0FMTF9QT1JUUwkgICAgKDEpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRUNEVCAtIEVtYmVkZGVkIENvbnRyb2xsZXIgQm9vdCBSZXNvdXJjZXMgVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00MTgsMTQgKzE5NCwxNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEVJTkogLSBFcnJvciBJbmplY3Rpb24gVGFibGUKKyAqIEVJTkogLSBFcnJvciBJbmplY3Rpb24gVGFibGUgKEFDUEkgNC4wKQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0cnVjdCBhY3BpX3RhYmxlX2VpbmogewogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwogCXUzMiBoZWFkZXJfbGVuZ3RoOwotCXUzMiByZXNlcnZlZDsKKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZFszXTsKIAl1MzIgZW50cmllczsKIH07CiAKQEAgLTQzNSw2ICsyMTMsMTAgQEAKIAlzdHJ1Y3QgYWNwaV93aGVhX2hlYWRlciB3aGVhX2hlYWRlcjsJLyogQ29tbW9uIGhlYWRlciBmb3IgV0hFQSB0YWJsZXMgKi8KIH07CiAKKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfRUlOSl9QUkVTRVJWRSAgICAgICAgICAoMSkKKwogLyogVmFsdWVzIGZvciBBY3Rpb24gZmllbGQgYWJvdmUgKi8KIAogZW51bSBhY3BpX2VpbmpfYWN0aW9ucyB7CkBAIC00NzAsOSArMjUyLDM0IEBACiAJdTMyIGVudHJ5X2NvdW50OwogfTsKIAorLyogQ29tbWFuZCBzdGF0dXMgcmV0dXJuIHZhbHVlcyAqLworCitlbnVtIGFjcGlfZWlual9jb21tYW5kX3N0YXR1cyB7CisJQUNQSV9FSU5KX1NVQ0NFU1MgPSAwLAorCUFDUElfRUlOSl9GQUlMVVJFID0gMSwKKwlBQ1BJX0VJTkpfSU5WQUxJRF9BQ0NFU1MgPSAyLAorCUFDUElfRUlOSl9TVEFUVVNfUkVTRVJWRUQgPSAzCS8qIDMgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCit9OworCisvKiBFcnJvciB0eXBlcyByZXR1cm5lZCBmcm9tIEFDUElfRUlOSl9HRVRfRVJST1JfVFlQRSAoYml0ZmllbGQpICovCisKKyNkZWZpbmUgQUNQSV9FSU5KX1BST0NFU1NPUl9DT1JSRUNUQUJMRSAgICAgKDEpCisjZGVmaW5lIEFDUElfRUlOSl9QUk9DRVNTT1JfVU5DT1JSRUNUQUJMRSAgICgxPDwxKQorI2RlZmluZSBBQ1BJX0VJTkpfUFJPQ0VTU09SX0ZBVEFMICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgQUNQSV9FSU5KX01FTU9SWV9DT1JSRUNUQUJMRSAgICAgICAgKDE8PDMpCisjZGVmaW5lIEFDUElfRUlOSl9NRU1PUllfVU5DT1JSRUNUQUJMRSAgICAgICgxPDw0KQorI2RlZmluZSBBQ1BJX0VJTkpfTUVNT1JZX0ZBVEFMICAgICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgQUNQSV9FSU5KX1BDSVhfQ09SUkVDVEFCTEUgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIEFDUElfRUlOSl9QQ0lYX1VOQ09SUkVDVEFCTEUgICAgICAgICgxPDw3KQorI2RlZmluZSBBQ1BJX0VJTkpfUENJWF9GQVRBTCAgICAgICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgQUNQSV9FSU5KX1BMQVRGT1JNX0NPUlJFQ1RBQkxFICAgICAgKDE8PDkpCisjZGVmaW5lIEFDUElfRUlOSl9QTEFURk9STV9VTkNPUlJFQ1RBQkxFICAgICgxPDwxMCkKKyNkZWZpbmUgQUNQSV9FSU5KX1BMQVRGT1JNX0ZBVEFMICAgICAgICAgICAgKDE8PDExKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEVSU1QgLSBFcnJvciBSZWNvcmQgU2VyaWFsaXphdGlvbiBUYWJsZQorICogRVJTVCAtIEVycm9yIFJlY29yZCBTZXJpYWxpemF0aW9uIFRhYmxlIChBQ1BJIDQuMCkKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00ODksMTkgKzI5NiwyMyBAQAogCXN0cnVjdCBhY3BpX3doZWFfaGVhZGVyIHdoZWFfaGVhZGVyOwkvKiBDb21tb24gaGVhZGVyIGZvciBXSEVBIHRhYmxlcyAqLwogfTsKIAorLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9FUlNUX1BSRVNFUlZFICAgICAgICAgICgxKQorCiAvKiBWYWx1ZXMgZm9yIEFjdGlvbiBmaWVsZCBhYm92ZSAqLwogCiBlbnVtIGFjcGlfZXJzdF9hY3Rpb25zIHsKLQlBQ1BJX0VSU1RfQkVHSU5fV1JJVEVfT1BFUkFUSU9OID0gMCwKLQlBQ1BJX0VSU1RfQkVHSU5fUkVBRF9PUEVSQVRJT04gPSAxLAotCUFDUElfRVJTVF9CRVRHSU5fQ0xFQVJfT1BFUkFUSU9OID0gMiwKLQlBQ1BJX0VSU1RfRU5EX09QRVJBVElPTiA9IDMsCisJQUNQSV9FUlNUX0JFR0lOX1dSSVRFID0gMCwKKwlBQ1BJX0VSU1RfQkVHSU5fUkVBRCA9IDEsCisJQUNQSV9FUlNUX0JFR0lOX0NMRUFSID0gMiwKKwlBQ1BJX0VSU1RfRU5EID0gMywKIAlBQ1BJX0VSU1RfU0VUX1JFQ09SRF9PRkZTRVQgPSA0LAogCUFDUElfRVJTVF9FWEVDVVRFX09QRVJBVElPTiA9IDUsCiAJQUNQSV9FUlNUX0NIRUNLX0JVU1lfU1RBVFVTID0gNiwKIAlBQ1BJX0VSU1RfR0VUX0NPTU1BTkRfU1RBVFVTID0gNywKLQlBQ1BJX0VSU1RfR0VUX1JFQ09SRF9JREVOVElGSUVSID0gOCwKLQlBQ1BJX0VSU1RfU0VUX1JFQ09SRF9JREVOVElGSUVSID0gOSwKKwlBQ1BJX0VSU1RfR0VUX1JFQ09SRF9JRCA9IDgsCisJQUNQSV9FUlNUX1NFVF9SRUNPUkRfSUQgPSA5LAogCUFDUElfRVJTVF9HRVRfUkVDT1JEX0NPVU5UID0gMTAsCiAJQUNQSV9FUlNUX0JFR0lOX0RVTU1ZX1dSSUlURSA9IDExLAogCUFDUElfRVJTVF9OT1RfVVNFRCA9IDEyLApAQCAtNTM2LDkgKzM0NywyOSBAQAogCUFDUElfRVJTVF9JTlNUUlVDVElPTl9SRVNFUlZFRCA9IDE5CS8qIDE5IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwogfTsKIAorLyogQ29tbWFuZCBzdGF0dXMgcmV0dXJuIHZhbHVlcyAqLworCitlbnVtIGFjcGlfZXJzdF9jb21tYW5kX3N0YXR1cyB7CisJQUNQSV9FUlNUX1NVQ0VTUyA9IDAsCisJQUNQSV9FUlNUX05PX1NQQUNFID0gMSwKKwlBQ1BJX0VSU1RfTk9UX0FWQUlMQUJMRSA9IDIsCisJQUNQSV9FUlNUX0ZBSUxVUkUgPSAzLAorCUFDUElfRVJTVF9SRUNPUkRfRU1QVFkgPSA0LAorCUFDUElfRVJTVF9OT1RfRk9VTkQgPSA1LAorCUFDUElfRVJTVF9TVEFUVVNfUkVTRVJWRUQgPSA2CS8qIDYgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCit9OworCisvKiBFcnJvciBSZWNvcmQgU2VyaWFsaXphdGlvbiBJbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgYWNwaV9lcnN0X2luZm8geworCXUxNiBzaWduYXR1cmU7CQkvKiBTaG91bGQgYmUgIkVSIiAqLworCXU4IGRhdGFbNDhdOworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBIRVNUIC0gSGFyZHdhcmUgRXJyb3IgU291cmNlIFRhYmxlCisgKiBIRVNUIC0gSGFyZHdhcmUgRXJyb3IgU291cmNlIFRhYmxlIChBQ1BJIDQuMCkKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC01NTEsODUgKzM4Miw2OSBAQAogCiBzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciB7CiAJdTE2IHR5cGU7CisJdTE2IHNvdXJjZV9pZDsKIH07CiAKIC8qIFZhbHVlcyBmb3IgVHlwZSBmaWVsZCBhYm92ZSBmb3Igc3VidGFibGVzICovCiAKIGVudW0gYWNwaV9oZXN0X3R5cGVzIHsKLQlBQ1BJX0hFU1RfVFlQRV9YUEZfTUFDSElORV9DSEVDSyA9IDAsCi0JQUNQSV9IRVNUX1RZUEVfWFBGX0NPUlJFQ1RFRF9NQUNISU5FX0NIRUNLID0gMSwKLQlBQ1BJX0hFU1RfVFlQRV9YUEZfVU5VU0VEID0gMiwKLQlBQ1BJX0hFU1RfVFlQRV9YUEZfTk9OX01BU0tBQkxFX0lOVEVSUlVQVCA9IDMsCi0JQUNQSV9IRVNUX1RZUEVfSVBGX0NPUlJFQ1RFRF9NQUNISU5FX0NIRUNLID0gNCwKLQlBQ1BJX0hFU1RfVFlQRV9JUEZfQ09SUkVDVEVEX1BMQVRGT1JNX0VSUk9SID0gNSwKKwlBQ1BJX0hFU1RfVFlQRV9JQTMyX0NIRUNLID0gMCwKKwlBQ1BJX0hFU1RfVFlQRV9JQTMyX0NPUlJFQ1RFRF9DSEVDSyA9IDEsCisJQUNQSV9IRVNUX1RZUEVfSUEzMl9OTUkgPSAyLAorCUFDUElfSEVTVF9UWVBFX05PVF9VU0VEMyA9IDMsCisJQUNQSV9IRVNUX1RZUEVfTk9UX1VTRUQ0ID0gNCwKKwlBQ1BJX0hFU1RfVFlQRV9OT1RfVVNFRDUgPSA1LAogCUFDUElfSEVTVF9UWVBFX0FFUl9ST09UX1BPUlQgPSA2LAogCUFDUElfSEVTVF9UWVBFX0FFUl9FTkRQT0lOVCA9IDcsCiAJQUNQSV9IRVNUX1RZUEVfQUVSX0JSSURHRSA9IDgsCi0JQUNQSV9IRVNUX1RZUEVfR0VORVJJQ19IQVJEV0FSRV9FUlJPUl9TT1VSQ0UgPSA5LAorCUFDUElfSEVTVF9UWVBFX0dFTkVSSUNfRVJST1IgPSA5LAogCUFDUElfSEVTVF9UWVBFX1JFU0VSVkVEID0gMTAJLyogMTAgYW5kIGdyZWF0ZXIgYXJlIHJlc2VydmVkICovCiB9OwogCiAvKgotICogSEVTVCBTdWItc3VidGFibGVzCisgKiBIRVNUIHN1YnN0cnVjdHVyZXMgY29udGFpbmVkIGluIHN1YnRhYmxlcwogICovCiAKLS8qIFhQRiBNYWNoaW5lIENoZWNrIEVycm9yIEJhbmsgKi8KLQotc3RydWN0IGFjcGlfaGVzdF94cGZfZXJyb3JfYmFuayB7CisvKgorICogSUEzMiBFcnJvciBCYW5rKHMpIC0gRm9sbG93cyB0aGUgc3RydWN0IGFjcGlfaGVzdF9pYV9tYWNoaW5lX2NoZWNrIGFuZAorICogc3RydWN0IGFjcGlfaGVzdF9pYV9jb3JyZWN0ZWQgc3RydWN0dXJlcy4KKyAqLworc3RydWN0IGFjcGlfaGVzdF9pYV9lcnJvcl9iYW5rIHsKIAl1OCBiYW5rX251bWJlcjsKIAl1OCBjbGVhcl9zdGF0dXNfb25faW5pdDsKIAl1OCBzdGF0dXNfZm9ybWF0OwotCXU4IGNvbmZpZ193cml0ZV9lbmFibGU7CisJdTggcmVzZXJ2ZWQ7CiAJdTMyIGNvbnRyb2xfcmVnaXN0ZXI7Ci0JdTY0IGNvbnRyb2xfaW5pdF9kYXRhOworCXU2NCBjb250cm9sX2RhdGE7CiAJdTMyIHN0YXR1c19yZWdpc3RlcjsKIAl1MzIgYWRkcmVzc19yZWdpc3RlcjsKIAl1MzIgbWlzY19yZWdpc3RlcjsKIH07CiAKLS8qIEdlbmVyaWMgRXJyb3IgU3RhdHVzICovCi0KLXN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgewotCXUzMiBibG9ja19zdGF0dXM7Ci0JdTMyIHJhd19kYXRhX29mZnNldDsKLQl1MzIgcmF3X2RhdGFfbGVuZ3RoOwotCXUzMiBkYXRhX2xlbmd0aDsKLQl1MzIgZXJyb3Jfc2V2ZXJpdHk7Ci19OwotCi0vKiBHZW5lcmljIEVycm9yIERhdGEgKi8KLQotc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX2RhdGEgewotCXU4IHNlY3Rpb25fdHlwZVsxNl07Ci0JdTMyIGVycm9yX3NldmVyaXR5OwotCXUxNiByZXZpc2lvbjsKLQl1OCB2YWxpZGF0aW9uX2JpdHM7Ci0JdTggZmxhZ3M7Ci0JdTMyIGVycm9yX2RhdGFfbGVuZ3RoOwotCXU4IGZydV9pZFsxNl07Ci0JdTggZnJ1X3RleHRbMjBdOwotfTsKLQotLyogQ29tbW9uIEhFU1Qgc3RydWN0dXJlIGZvciBQQ0kvQUVSIHR5cGVzIGJlbG93ICg2LDcsOCkgKi8KKy8qIENvbW1vbiBIRVNUIHN1Yi1zdHJ1Y3R1cmUgZm9yIFBDSS9BRVIgc3RydWN0dXJlcyBiZWxvdyAoNiw3LDgpICovCiAKIHN0cnVjdCBhY3BpX2hlc3RfYWVyX2NvbW1vbiB7Ci0JdTE2IHNvdXJjZV9pZDsKLQl1MTYgY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1MTYgcmVzZXJ2ZWQxOwogCXU4IGZsYWdzOwogCXU4IGVuYWJsZWQ7Ci0JdTMyIHJlY29yZHNfdG9fcHJlX2FsbG9jYXRlOworCXUzMiByZWNvcmRzX3RvX3ByZWFsbG9jYXRlOwogCXUzMiBtYXhfc2VjdGlvbnNfcGVyX3JlY29yZDsKIAl1MzIgYnVzOwogCXUxNiBkZXZpY2U7CiAJdTE2IGZ1bmN0aW9uOwogCXUxNiBkZXZpY2VfY29udHJvbDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTMyIHVuY29ycmVjdGFibGVfZXJyb3JfbWFzazsKLQl1MzIgdW5jb3JyZWN0YWJsZV9lcnJvcl9zZXZlcml0eTsKLQl1MzIgY29ycmVjdGFibGVfZXJyb3JfbWFzazsKLQl1MzIgYWR2YW5jZWRfZXJyb3JfY2FwYWJpbGl0aWVzOworCXUxNiByZXNlcnZlZDI7CisJdTMyIHVuY29ycmVjdGFibGVfbWFzazsKKwl1MzIgdW5jb3JyZWN0YWJsZV9zZXZlcml0eTsKKwl1MzIgY29ycmVjdGFibGVfbWFzazsKKwl1MzIgYWR2YW5jZWRfY2FwYWJpbGl0aWVzOwogfTsKIAorLyogTWFza3MgZm9yIEhFU1QgRmxhZ3MgZmllbGRzICovCisKKyNkZWZpbmUgQUNQSV9IRVNUX0ZJUk1XQVJFX0ZJUlNUICAgICAgICAoMSkKKyNkZWZpbmUgQUNQSV9IRVNUX0dMT0JBTCAgICAgICAgICAgICAgICAoMTw8MSkKKwogLyogSGFyZHdhcmUgRXJyb3IgTm90aWZpY2F0aW9uICovCiAKIHN0cnVjdCBhY3BpX2hlc3Rfbm90aWZ5IHsKQEAgLTY1NSw3MSArNDcwLDU5IEBACiAJQUNQSV9IRVNUX05PVElGWV9SRVNFUlZFRCA9IDUJLyogNSBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KIH07CiAKKy8qIFZhbHVlcyBmb3IgY29uZmlnX3dyaXRlX2VuYWJsZSBiaXRmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfSEVTVF9UWVBFICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIEFDUElfSEVTVF9QT0xMX0lOVEVSVkFMICAgICAgICAgKDE8PDEpCisjZGVmaW5lIEFDUElfSEVTVF9QT0xMX1RIUkVTSE9MRF9WQUxVRSAgKDE8PDIpCisjZGVmaW5lIEFDUElfSEVTVF9QT0xMX1RIUkVTSE9MRF9XSU5ET1cgKDE8PDMpCisjZGVmaW5lIEFDUElfSEVTVF9FUlJfVEhSRVNIT0xEX1ZBTFVFICAgKDE8PDQpCisjZGVmaW5lIEFDUElfSEVTVF9FUlJfVEhSRVNIT0xEX1dJTkRPVyAgKDE8PDUpCisKIC8qCiAgKiBIRVNUIHN1YnRhYmxlcwotICoKLSAqIEZyb20gV0hFQSBEZXNpZ24gRG9jdW1lbnQsIDE2IE1heSAyMDA3LgotICogTm90ZTogVGhlcmUgaXMgbm8gc3VidGFibGUgdHlwZSAyIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQsCi0gKiBhbmQgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgc3VidGFibGUgdHlwZSAzcy4KICAqLwogCi0gLyogMDogWFBGIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uICovCisvKiAwOiBJQTMyIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uICovCiAKLXN0cnVjdCBhY3BpX2hlc3RfeHBmX21hY2hpbmVfY2hlY2sgeworc3RydWN0IGFjcGlfaGVzdF9pYV9tYWNoaW5lX2NoZWNrIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKLQl1MTYgY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1MTYgcmVzZXJ2ZWQxOwogCXU4IGZsYWdzOwotCXU4IHJlc2VydmVkMTsKLQl1MzIgcmVjb3Jkc190b19wcmVfYWxsb2NhdGU7CisJdTggZW5hYmxlZDsKKwl1MzIgcmVjb3Jkc190b19wcmVhbGxvY2F0ZTsKIAl1MzIgbWF4X3NlY3Rpb25zX3Blcl9yZWNvcmQ7CiAJdTY0IGdsb2JhbF9jYXBhYmlsaXR5X2RhdGE7CiAJdTY0IGdsb2JhbF9jb250cm9sX2RhdGE7CiAJdTggbnVtX2hhcmR3YXJlX2JhbmtzOwotCXU4IHJlc2VydmVkMls3XTsKKwl1OCByZXNlcnZlZDNbN107CiB9OwogCi0vKiAxOiBYUEYgQ29ycmVjdGVkIE1hY2hpbmUgQ2hlY2sgKi8KKy8qIDE6IElBMzIgQ29ycmVjdGVkIE1hY2hpbmUgQ2hlY2sgKi8KIAotc3RydWN0IGFjcGlfdGFibGVfaGVzdF94cGZfY29ycmVjdGVkIHsKK3N0cnVjdCBhY3BpX2hlc3RfaWFfY29ycmVjdGVkIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKLQl1MTYgY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1MTYgcmVzZXJ2ZWQxOwogCXU4IGZsYWdzOwogCXU4IGVuYWJsZWQ7Ci0JdTMyIHJlY29yZHNfdG9fcHJlX2FsbG9jYXRlOworCXUzMiByZWNvcmRzX3RvX3ByZWFsbG9jYXRlOwogCXUzMiBtYXhfc2VjdGlvbnNfcGVyX3JlY29yZDsKIAlzdHJ1Y3QgYWNwaV9oZXN0X25vdGlmeSBub3RpZnk7CiAJdTggbnVtX2hhcmR3YXJlX2JhbmtzOwotCXU4IHJlc2VydmVkWzNdOworCXU4IHJlc2VydmVkMlszXTsKIH07CiAKLS8qIDM6IFhQRiBOb24tTWFza2FibGUgSW50ZXJydXB0ICovCisvKiAyOiBJQTMyIE5vbi1NYXNrYWJsZSBJbnRlcnJ1cHQgKi8KIAotc3RydWN0IGFjcGlfaGVzdF94cGZfbm1pIHsKK3N0cnVjdCBhY3BpX2hlc3RfaWFfbm1pIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKIAl1MzIgcmVzZXJ2ZWQ7Ci0JdTMyIHJlY29yZHNfdG9fcHJlX2FsbG9jYXRlOworCXUzMiByZWNvcmRzX3RvX3ByZWFsbG9jYXRlOwogCXUzMiBtYXhfc2VjdGlvbnNfcGVyX3JlY29yZDsKIAl1MzIgbWF4X3Jhd19kYXRhX2xlbmd0aDsKIH07CiAKLS8qIDQ6IElQRiBDb3JyZWN0ZWQgTWFjaGluZSBDaGVjayAqLwotCi1zdHJ1Y3QgYWNwaV9oZXN0X2lwZl9jb3JyZWN0ZWQgewotCXN0cnVjdCBhY3BpX2hlc3RfaGVhZGVyIGhlYWRlcjsKLQl1OCBlbmFibGVkOwotCXU4IHJlc2VydmVkOwotfTsKLQotLyogNTogSVBGIENvcnJlY3RlZCBQbGF0Zm9ybSBFcnJvciAqLwotCi1zdHJ1Y3QgYWNwaV9oZXN0X2lwZl9jb3JyZWN0ZWRfcGxhdGZvcm0gewotCXN0cnVjdCBhY3BpX2hlc3RfaGVhZGVyIGhlYWRlcjsKLQl1OCBlbmFibGVkOwotCXU4IHJlc2VydmVkOwotfTsKKy8qIDMsNCw1OiBOb3QgdXNlZCAqLwogCiAvKiA2OiBQQ0kgRXhwcmVzcyBSb290IFBvcnQgQUVSICovCiAKQEAgLTc0MSwxNDMgKzU0NCw2MSBAQAogc3RydWN0IGFjcGlfaGVzdF9hZXJfYnJpZGdlIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7CiAJc3RydWN0IGFjcGlfaGVzdF9hZXJfY29tbW9uIGFlcjsKLQl1MzIgc2Vjb25kYXJ5X3VuY29ycmVjdGFibGVfZXJyb3JfbWFzazsKLQl1MzIgc2Vjb25kYXJ5X3VuY29ycmVjdGFibGVfZXJyb3Jfc2V2ZXJpdHk7Ci0JdTMyIHNlY29uZGFyeV9hZHZhbmNlZF9jYXBhYmlsaXRpZXM7CisJdTMyIHVuY29ycmVjdGFibGVfbWFzazI7CisJdTMyIHVuY29ycmVjdGFibGVfc2V2ZXJpdHkyOworCXUzMiBhZHZhbmNlZF9jYXBhYmlsaXRpZXMyOwogfTsKIAogLyogOTogR2VuZXJpYyBIYXJkd2FyZSBFcnJvciBTb3VyY2UgKi8KIAogc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IHNvdXJjZV9pZDsKIAl1MTYgcmVsYXRlZF9zb3VyY2VfaWQ7Ci0JdTggY29uZmlnX3dyaXRlX2VuYWJsZTsKKwl1OCByZXNlcnZlZDsKIAl1OCBlbmFibGVkOwotCXUzMiByZWNvcmRzX3RvX3ByZV9hbGxvY2F0ZTsKKwl1MzIgcmVjb3Jkc190b19wcmVhbGxvY2F0ZTsKIAl1MzIgbWF4X3NlY3Rpb25zX3Blcl9yZWNvcmQ7CiAJdTMyIG1heF9yYXdfZGF0YV9sZW5ndGg7CiAJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGVycm9yX3N0YXR1c19hZGRyZXNzOwogCXN0cnVjdCBhY3BpX2hlc3Rfbm90aWZ5IG5vdGlmeTsKLQl1MzIgZXJyb3Jfc3RhdHVzX2Jsb2NrX2xlbmd0aDsKKwl1MzIgZXJyb3JfYmxvY2tfbGVuZ3RoOwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBIUEVUIC0gSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogR2VuZXJpYyBFcnJvciBTdGF0dXMgYmxvY2sgKi8KIAotc3RydWN0IGFjcGlfdGFibGVfaHBldCB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTMyIGlkOwkJCS8qIEhhcmR3YXJlIElEIG9mIGV2ZW50IHRpbWVyIGJsb2NrICovCi0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGFkZHJlc3M7CS8qIEFkZHJlc3Mgb2YgZXZlbnQgdGltZXIgYmxvY2sgKi8KLQl1OCBzZXF1ZW5jZTsJCS8qIEhQRVQgc2VxdWVuY2UgbnVtYmVyICovCi0JdTE2IG1pbmltdW1fdGljazsJLyogTWFpbiBjb3VudGVyIG1pbiB0aWNrLCBwZXJpb2RpYyBtb2RlICovCitzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzIHsKKwl1MzIgYmxvY2tfc3RhdHVzOworCXUzMiByYXdfZGF0YV9vZmZzZXQ7CisJdTMyIHJhd19kYXRhX2xlbmd0aDsKKwl1MzIgZGF0YV9sZW5ndGg7CisJdTMyIGVycm9yX3NldmVyaXR5OworfTsKKworLyogVmFsdWVzIGZvciBibG9ja19zdGF0dXMgZmxhZ3MgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0hFU1RfVU5DT1JSRUNUQUJMRSAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgQUNQSV9IRVNUX0NPUlJFQ1RBQkxFICAgICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIEFDUElfSEVTVF9NVUxUSVBMRV9VTkNPUlJFQ1RBQkxFICAgICgxPDwyKQorI2RlZmluZSBBQ1BJX0hFU1RfTVVMVElQTEVfQ09SUkVDVEFCTEUgICAgICAoMTw8MykKKyNkZWZpbmUgQUNQSV9IRVNUX0VSUk9SX0VOVFJZX0NPVU5UICAgICAgICAgKDB4RkY8PDQpCS8qIDggYml0cywgZXJyb3IgY291bnQgKi8KKworLyogR2VuZXJpYyBFcnJvciBEYXRhIGVudHJ5ICovCisKK3N0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19kYXRhIHsKKwl1OCBzZWN0aW9uX3R5cGVbMTZdOworCXUzMiBlcnJvcl9zZXZlcml0eTsKKwl1MTYgcmV2aXNpb247CisJdTggdmFsaWRhdGlvbl9iaXRzOwogCXU4IGZsYWdzOwotfTsKLQotLyohIEZsYWdzICovCi0KLSNkZWZpbmUgQUNQSV9IUEVUX1BBR0VfUFJPVEVDVCAgICAgICgxKQkvKiAwMDogTm8gcGFnZSBwcm90ZWN0aW9uICovCi0jZGVmaW5lIEFDUElfSFBFVF9QQUdFX1BST1RFQ1RfNCAgICAoMTw8MSkJLyogMDE6IDRLQiBwYWdlIHByb3RlY3RlZCAqLwotI2RlZmluZSBBQ1BJX0hQRVRfUEFHRV9QUk9URUNUXzY0ICAgKDE8PDIpCS8qIDAyOiA2NEtCIHBhZ2UgcHJvdGVjdGVkICovCi0KLS8qISBbRW5kXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAhKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBJQkZUIC0gQm9vdCBGaXJtd2FyZSBUYWJsZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBhY3BpX3RhYmxlX2liZnQgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXU4IHJlc2VydmVkWzEyXTsKLX07Ci0KLS8qIElCRlQgY29tbW9uIHN1YnRhYmxlIGhlYWRlciAqLwotCi1zdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciB7Ci0JdTggdHlwZTsKLQl1OCB2ZXJzaW9uOwotCXUxNiBsZW5ndGg7Ci0JdTggaW5kZXg7Ci0JdTggZmxhZ3M7Ci19OwotCi0vKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KLQotZW51bSBhY3BpX2liZnRfdHlwZSB7Ci0JQUNQSV9JQkZUX1RZUEVfTk9UX1VTRUQgPSAwLAotCUFDUElfSUJGVF9UWVBFX0NPTlRST0wgPSAxLAotCUFDUElfSUJGVF9UWVBFX0lOSVRJQVRPUiA9IDIsCi0JQUNQSV9JQkZUX1RZUEVfTklDID0gMywKLQlBQ1BJX0lCRlRfVFlQRV9UQVJHRVQgPSA0LAotCUFDUElfSUJGVF9UWVBFX0VYVEVOU0lPTlMgPSA1LAotCUFDUElfSUJGVF9UWVBFX1JFU0VSVkVEID0gNgkvKiA2IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwotfTsKLQotLyogSUJGVCBzdWJ0YWJsZXMgKi8KLQotc3RydWN0IGFjcGlfaWJmdF9jb250cm9sIHsKLQlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7Ci0JdTE2IGV4dGVuc2lvbnM7Ci0JdTE2IGluaXRpYXRvcl9vZmZzZXQ7Ci0JdTE2IG5pYzBfb2Zmc2V0OwotCXUxNiB0YXJnZXQwX29mZnNldDsKLQl1MTYgbmljMV9vZmZzZXQ7Ci0JdTE2IHRhcmdldDFfb2Zmc2V0OwotfTsKLQotc3RydWN0IGFjcGlfaWJmdF9pbml0aWF0b3IgewotCXN0cnVjdCBhY3BpX2liZnRfaGVhZGVyIGhlYWRlcjsKLQl1OCBzbnNfc2VydmVyWzE2XTsKLQl1OCBzbHBfc2VydmVyWzE2XTsKLQl1OCBwcmltYXJ5X3NlcnZlclsxNl07Ci0JdTggc2Vjb25kYXJ5X3NlcnZlclsxNl07Ci0JdTE2IG5hbWVfbGVuZ3RoOwotCXUxNiBuYW1lX29mZnNldDsKLX07Ci0KLXN0cnVjdCBhY3BpX2liZnRfbmljIHsKLQlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7Ci0JdTggaXBfYWRkcmVzc1sxNl07Ci0JdTggc3VibmV0X21hc2tfcHJlZml4OwotCXU4IG9yaWdpbjsKLQl1OCBnYXRld2F5WzE2XTsKLQl1OCBwcmltYXJ5X2Ruc1sxNl07Ci0JdTggc2Vjb25kYXJ5X2Ruc1sxNl07Ci0JdTggZGhjcFsxNl07Ci0JdTE2IHZsYW47Ci0JdTggbWFjX2FkZHJlc3NbNl07Ci0JdTE2IHBjaV9hZGRyZXNzOwotCXUxNiBuYW1lX2xlbmd0aDsKLQl1MTYgbmFtZV9vZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgYWNwaV9pYmZ0X3RhcmdldCB7Ci0Jc3RydWN0IGFjcGlfaWJmdF9oZWFkZXIgaGVhZGVyOwotCXU4IHRhcmdldF9pcF9hZGRyZXNzWzE2XTsKLQl1MTYgdGFyZ2V0X2lwX3NvY2tldDsKLQl1OCB0YXJnZXRfYm9vdF9sdW5bOF07Ci0JdTggY2hhcF90eXBlOwotCXU4IG5pY19hc3NvY2lhdGlvbjsKLQl1MTYgdGFyZ2V0X25hbWVfbGVuZ3RoOwotCXUxNiB0YXJnZXRfbmFtZV9vZmZzZXQ7Ci0JdTE2IGNoYXBfbmFtZV9sZW5ndGg7Ci0JdTE2IGNoYXBfbmFtZV9vZmZzZXQ7Ci0JdTE2IGNoYXBfc2VjcmV0X2xlbmd0aDsKLQl1MTYgY2hhcF9zZWNyZXRfb2Zmc2V0OwotCXUxNiByZXZlcnNlX2NoYXBfbmFtZV9sZW5ndGg7Ci0JdTE2IHJldmVyc2VfY2hhcF9uYW1lX29mZnNldDsKLQl1MTYgcmV2ZXJzZV9jaGFwX3NlY3JldF9sZW5ndGg7Ci0JdTE2IHJldmVyc2VfY2hhcF9zZWNyZXRfb2Zmc2V0OworCXUzMiBlcnJvcl9kYXRhX2xlbmd0aDsKKwl1OCBmcnVfaWRbMTZdOworCXU4IGZydV90ZXh0WzIwXTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogTUFEVCAtIE11bHRpcGxlIEFQSUMgRGVzY3JpcHRpb24gVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC04ODcsMTYgKzYwOCwxNiBAQAogCXUzMiBmbGFnczsKIH07CiAKLS8qIEZsYWdzICovCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KIAotI2RlZmluZSBBQ1BJX01BRFRfUENBVF9DT01QQVQgICAgICAgKDEpCS8qIDAwOiAgICBTeXN0ZW0gYWxzbyBoYXMgZHVhbCA4MjU5cyAqLworI2RlZmluZSBBQ1BJX01BRFRfUENBVF9DT01QQVQgICAgICAgKDEpCS8qIDAwOiBTeXN0ZW0gYWxzbyBoYXMgZHVhbCA4MjU5cyAqLwogCiAvKiBWYWx1ZXMgZm9yIFBDQVRDb21wYXQgZmxhZyAqLwogCiAjZGVmaW5lIEFDUElfTUFEVF9EVUFMX1BJQyAgICAgICAgICAwCiAjZGVmaW5lIEFDUElfTUFEVF9NVUxUSVBMRV9BUElDICAgICAxCiAKLS8qIFZhbHVlcyBmb3Igc3VidGFibGUgdHlwZSBpbiBzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKi8KKy8qIFZhbHVlcyBmb3IgTUFEVCBzdWJ0YWJsZSB0eXBlIGluIHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqLwogCiBlbnVtIGFjcGlfbWFkdF90eXBlIHsKIAlBQ1BJX01BRFRfVFlQRV9MT0NBTF9BUElDID0gMCwKQEAgLTEwMDcsMTEgKzcyOCwxMSBAQAogCXUzMiBmbGFnczsJCS8qIEludGVycnVwdCBTb3VyY2UgRmxhZ3MgKi8KIH07CiAKLS8qIEZsYWdzIGZpZWxkIGFib3ZlICovCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KIAogI2RlZmluZSBBQ1BJX01BRFRfQ1BFSV9PVkVSUklERSAgICAgKDEpCiAKLS8qIDk6IFByb2Nlc3NvciBMb2NhbCBYMl9BUElDICgwNy8yMDA4KSAqLworLyogOTogUHJvY2Vzc29yIExvY2FsIFgyQVBJQyAoQUNQSSA0LjApICovCiAKIHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljIHsKIAlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgaGVhZGVyOwpAQCAtMTAyMSw3ICs3NDIsNyBAQAogCXUzMiB1aWQ7CQkvKiBBQ1BJIHByb2Nlc3NvciBVSUQgKi8KIH07CiAKLS8qIDEwOiBMb2NhbCBYMkFQSUMgTk1JICgwNy8yMDA4KSAqLworLyogMTA6IExvY2FsIFgyQVBJQyBOTUkgKEFDUEkgNC4wKSAqLwogCiBzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgewogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CkBAIC0xMDU4LDI4ICs3NzksMzQgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBNQ0ZHIC0gUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSBhbmQgc3ViLXRhYmxlCisgKiBNU0NUIC0gTWF4aW11bSBTeXN0ZW0gQ2hhcmFjdGVyaXN0aWNzIFRhYmxlIChBQ1BJIDQuMCkKKyAqICAgICAgICBWZXJzaW9uIDEKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdHJ1Y3QgYWNwaV90YWJsZV9tY2ZnIHsKK3N0cnVjdCBhY3BpX3RhYmxlX21zY3QgewogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXU4IHJlc2VydmVkWzhdOworCXUzMiBwcm94aW1pdHlfb2Zmc2V0OwkvKiBMb2NhdGlvbiBvZiBwcm94aW1pdHkgaW5mbyBzdHJ1Y3QocykgKi8KKwl1MzIgbWF4X3Byb3hpbWl0eV9kb21haW5zOwkvKiBNYXggbnVtYmVyIG9mIHByb3hpbWl0eSBkb21haW5zICovCisJdTMyIG1heF9jbG9ja19kb21haW5zOwkvKiBNYXggbnVtYmVyIG9mIGNsb2NrIGRvbWFpbnMgKi8KKwl1NjQgbWF4X2FkZHJlc3M7CS8qIE1heCBwaHlzaWNhbCBhZGRyZXNzIGluIHN5c3RlbSAqLwogfTsKIAotLyogU3VidGFibGUgKi8KKy8qIFN1YnRhYmxlIC0gTWF4aW11bSBQcm94aW1pdHkgRG9tYWluIEluZm9ybWF0aW9uLiBWZXJzaW9uIDEgKi8KIAotc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uIHsKLQl1NjQgYWRkcmVzczsJCS8qIEJhc2UgYWRkcmVzcywgcHJvY2Vzc29yLXJlbGF0aXZlICovCi0JdTE2IHBjaV9zZWdtZW50OwkvKiBQQ0kgc2VnbWVudCBncm91cCBudW1iZXIgKi8KLQl1OCBzdGFydF9idXNfbnVtYmVyOwkvKiBTdGFydGluZyBQQ0kgQnVzIG51bWJlciAqLwotCXU4IGVuZF9idXNfbnVtYmVyOwkvKiBGaW5hbCBQQ0kgQnVzIG51bWJlciAqLwotCXUzMiByZXNlcnZlZDsKK3N0cnVjdCBhY3BpX21zY3RfcHJveGltaXR5IHsKKwl1OCByZXZpc2lvbjsKKwl1OCBsZW5ndGg7CisJdTMyIHJhbmdlX3N0YXJ0OwkvKiBTdGFydCBvZiBkb21haW4gcmFuZ2UgKi8KKwl1MzIgcmFuZ2VfZW5kOwkJLyogRW5kIG9mIGRvbWFpbiByYW5nZSAqLworCXUzMiBwcm9jZXNzb3JfY2FwYWNpdHk7CisJdTY0IG1lbW9yeV9jYXBhY2l0eTsJLyogSW4gYnl0ZXMgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0JTVCAtIFNtYXJ0IEJhdHRlcnkgU3BlY2lmaWNhdGlvbiBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEwOTMsNiArODIwLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0xJVCAtIFN5c3RlbSBMb2NhbGl0eSBEaXN0YW5jZSBJbmZvcm1hdGlvbiBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTExMDQsNjAgKzgzMiw4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogU1BDUiAtIFNlcmlhbCBQb3J0IENvbnNvbGUgUmVkaXJlY3Rpb24gdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9zcGNyIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1OCBpbnRlcmZhY2VfdHlwZTsJLyogMD1mdWxsIDE2NTUwLCAxPXN1YnNldCBvZiAxNjU1MCAqLwotCXU4IHJlc2VydmVkWzNdOwotCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBzZXJpYWxfcG9ydDsKLQl1OCBpbnRlcnJ1cHRfdHlwZTsKLQl1OCBwY19pbnRlcnJ1cHQ7Ci0JdTMyIGludGVycnVwdDsKLQl1OCBiYXVkX3JhdGU7Ci0JdTggcGFyaXR5OwotCXU4IHN0b3BfYml0czsKLQl1OCBmbG93X2NvbnRyb2w7Ci0JdTggdGVybWluYWxfdHlwZTsKLQl1OCByZXNlcnZlZDE7Ci0JdTE2IHBjaV9kZXZpY2VfaWQ7Ci0JdTE2IHBjaV92ZW5kb3JfaWQ7Ci0JdTggcGNpX2J1czsKLQl1OCBwY2lfZGV2aWNlOwotCXU4IHBjaV9mdW5jdGlvbjsKLQl1MzIgcGNpX2ZsYWdzOwotCXU4IHBjaV9zZWdtZW50OwotCXUzMiByZXNlcnZlZDI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFNQTUkgLSBTZXJ2ZXIgUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcmZhY2UgdGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV9zcG1pIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1OCByZXNlcnZlZDsKLQl1OCBpbnRlcmZhY2VfdHlwZTsKLQl1MTYgc3BlY19yZXZpc2lvbjsJLyogVmVyc2lvbiBvZiBJUE1JICovCi0JdTggaW50ZXJydXB0X3R5cGU7Ci0JdTggZ3BlX251bWJlcjsJCS8qIEdQRSBhc3NpZ25lZCAqLwotCXU4IHJlc2VydmVkMTsKLQl1OCBwY2lfZGV2aWNlX2ZsYWc7Ci0JdTMyIGludGVycnVwdDsKLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgaXBtaV9yZWdpc3RlcjsKLQl1OCBwY2lfc2VnbWVudDsKLQl1OCBwY2lfYnVzOwotCXU4IHBjaV9kZXZpY2U7Ci0JdTggcGNpX2Z1bmN0aW9uOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBTUkFUIC0gU3lzdGVtIFJlc291cmNlIEFmZmluaXR5IFRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAzCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTE5Miw2ICs4NjgsMTAgQEAKIAl1MzIgcmVzZXJ2ZWQ7CQkvKiBSZXNlcnZlZCwgbXVzdCBiZSB6ZXJvICovCiB9OwogCisvKiBGbGFncyAqLworCisjZGVmaW5lIEFDUElfU1JBVF9DUFVfVVNFX0FGRklOSVRZICAoMSkJLyogMDA6IFVzZSBhZmZpbml0eSBzdHJ1Y3R1cmUgKi8KKwogLyogMTogTWVtb3J5IEFmZmluaXR5ICovCiAKIHN0cnVjdCBhY3BpX3NyYXRfbWVtX2FmZmluaXR5IHsKQEAgLTEyMTEsNyArODkxLDcgQEAKICNkZWZpbmUgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFICgxPDwxKQkvKiAwMTogTWVtb3J5IHJlZ2lvbiBpcyBob3QgcGx1Z2dhYmxlICovCiAjZGVmaW5lIEFDUElfU1JBVF9NRU1fTk9OX1ZPTEFUSUxFICAoMTw8MikJLyogMDI6IE1lbW9yeSByZWdpb24gaXMgbm9uLXZvbGF0aWxlICovCiAKLS8qIDI6IFByb2Nlc3NvciBMb2NhbCBYMl9BUElDIEFmZmluaXR5ICgwNy8yMDA4KSAqLworLyogMjogUHJvY2Vzc29yIExvY2FsIFgyX0FQSUMgQWZmaW5pdHkgKEFDUEkgNC4wKSAqLwogCiBzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgewogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CkBAIC0xMjE5LDEyMiArODk5LDE0IEBACiAJdTMyIHByb3hpbWl0eV9kb21haW47CiAJdTMyIGFwaWNfaWQ7CiAJdTMyIGZsYWdzOworCXUzMiBjbG9ja19kb21haW47CisJdTMyIHJlc2VydmVkMjsKIH07CiAKIC8qIEZsYWdzIGZvciBzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSBhbmQgc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICovCiAKICNkZWZpbmUgQUNQSV9TUkFUX0NQVV9FTkFCTEVEICAgICAgICgxKQkvKiAwMDogVXNlIGFmZmluaXR5IHN0cnVjdHVyZSAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRDUEEgLSBUcnVzdGVkIENvbXB1dGluZyBQbGF0Zm9ybSBBbGxpYW5jZSB0YWJsZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBhY3BpX3RhYmxlX3RjcGEgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXUxNiByZXNlcnZlZDsKLQl1MzIgbWF4X2xvZ19sZW5ndGg7CS8qIE1heGltdW0gbGVuZ3RoIGZvciB0aGUgZXZlbnQgbG9nIGFyZWEgKi8KLQl1NjQgbG9nX2FkZHJlc3M7CS8qIEFkZHJlc3Mgb2YgdGhlIGV2ZW50IGxvZyBhcmVhICovCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFVFRkkgLSBVRUZJIEJvb3Qgb3B0aW1pemF0aW9uIFRhYmxlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGFjcGlfdGFibGVfdWVmaSB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCi0JdTggaWRlbnRpZmllclsxNl07CS8qIFVVSUQgaWRlbnRpZmllciAqLwotCXUxNiBkYXRhX29mZnNldDsJLyogT2Zmc2V0IG9mIHJlbWFpbmluZyBkYXRhIGluIHRhYmxlICovCi0JdTggZGF0YTsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogV0RBVCAtIFdhdGNoZG9nIEFjdGlvbiBUYWJsZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBhY3BpX3RhYmxlX3dkYXQgewotCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLwotCXUzMiBoZWFkZXJfbGVuZ3RoOwkvKiBXYXRjaGRvZyBIZWFkZXIgTGVuZ3RoICovCi0JdTE2IHBjaV9zZWdtZW50OwkvKiBQQ0kgU2VnbWVudCBudW1iZXIgKi8KLQl1OCBwY2lfYnVzOwkJLyogUENJIEJ1cyBudW1iZXIgKi8KLQl1OCBwY2lfZGV2aWNlOwkJLyogUENJIERldmljZSBudW1iZXIgKi8KLQl1OCBwY2lfZnVuY3Rpb247CS8qIFBDSSBGdW5jdGlvbiBudW1iZXIgKi8KLQl1OCByZXNlcnZlZFszXTsKLQl1MzIgdGltZXJfcGVyaW9kOwkvKiBQZXJpb2Qgb2Ygb25lIHRpbWVyIGNvdW50IChtc2VjKSAqLwotCXUzMiBtYXhfY291bnQ7CQkvKiBNYXhpbXVtIGNvdW50ZXIgdmFsdWUgc3VwcG9ydGVkICovCi0JdTMyIG1pbl9jb3VudDsJCS8qIE1pbmltdW0gY291bnRlciB2YWx1ZSAqLwotCXU4IGZsYWdzOwotCXU4IHJlc2VydmVkMlszXTsKLQl1MzIgZW50cmllczsJCS8qIE51bWJlciBvZiB3YXRjaGRvZyBlbnRyaWVzIHRoYXQgZm9sbG93ICovCi19OwotCi0vKiBXREFUIEluc3RydWN0aW9uIEVudHJpZXMgKGFjdGlvbnMpICovCi0KLXN0cnVjdCBhY3BpX3dkYXRfZW50cnkgewotCXN0cnVjdCBhY3BpX3doZWFfaGVhZGVyIHdoZWFfaGVhZGVyOwkvKiBDb21tb24gaGVhZGVyIGZvciBXSEVBIHRhYmxlcyAqLwotfTsKLQotLyogVmFsdWVzIGZvciBBY3Rpb24gZmllbGQgYWJvdmUgKi8KLQotZW51bSBhY3BpX3dkYXRfYWN0aW9ucyB7Ci0JQUNQSV9XREFUX1JFU0VUID0gMSwKLQlBQ1BJX1dEQVRfR0VUX0NVUlJFTlRfQ09VTlRET1dOID0gNCwKLQlBQ1BJX1dEQVRfR0VUX0NPVU5URE9XTiA9IDUsCi0JQUNQSV9XREFUX1NFVF9DT1VOVERPV04gPSA2LAotCUFDUElfV0RBVF9HRVRfUlVOTklOR19TVEFURSA9IDgsCi0JQUNQSV9XREFUX1NFVF9SVU5OSU5HX1NUQVRFID0gOSwKLQlBQ1BJX1dEQVRfR0VUX1NUT1BQRURfU1RBVEUgPSAxMCwKLQlBQ1BJX1dEQVRfU0VUX1NUT1BQRURfU1RBVEUgPSAxMSwKLQlBQ1BJX1dEQVRfR0VUX1JFQk9PVCA9IDE2LAotCUFDUElfV0RBVF9TRVRfUkVCT09UID0gMTcsCi0JQUNQSV9XREFUX0dFVF9TSFVURE9XTiA9IDE4LAotCUFDUElfV0RBVF9TRVRfU0hVVERPV04gPSAxOSwKLQlBQ1BJX1dEQVRfR0VUX1NUQVRVUyA9IDMyLAotCUFDUElfV0RBVF9TRVRfU1RBVFVTID0gMzMsCi0JQUNQSV9XREFUX0FDVElPTl9SRVNFUlZFRCA9IDM0CS8qIDM0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLwotfTsKLQotLyogVmFsdWVzIGZvciBJbnN0cnVjdGlvbiBmaWVsZCBhYm92ZSAqLwotCi1lbnVtIGFjcGlfd2RhdF9pbnN0cnVjdGlvbnMgewotCUFDUElfV0RBVF9SRUFEX1ZBTFVFID0gMCwKLQlBQ1BJX1dEQVRfUkVBRF9DT1VOVERPV04gPSAxLAotCUFDUElfV0RBVF9XUklURV9WQUxVRSA9IDIsCi0JQUNQSV9XREFUX1dSSVRFX0NPVU5URE9XTiA9IDMsCi0JQUNQSV9XREFUX0lOU1RSVUNUSU9OX1JFU0VSVkVEID0gNCwJLyogNCBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KLQlBQ1BJX1dEQVRfUFJFU0VSVkVfUkVHSVNURVIgPSAweDgwCS8qIEV4Y2VwdCBmb3IgdGhpcyB2YWx1ZSAqLwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBXRFJUIC0gV2F0Y2hkb2cgUmVzb3VyY2UgVGFibGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV90YWJsZV93ZHJ0IHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KLQl1MzIgaGVhZGVyX2xlbmd0aDsJLyogV2F0Y2hkb2cgSGVhZGVyIExlbmd0aCAqLwotCXU4IHBjaV9zZWdtZW50OwkJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCi0JdTggcGNpX2J1czsJCS8qIFBDSSBCdXMgbnVtYmVyICovCi0JdTggcGNpX2RldmljZTsJCS8qIFBDSSBEZXZpY2UgbnVtYmVyICovCi0JdTggcGNpX2Z1bmN0aW9uOwkvKiBQQ0kgRnVuY3Rpb24gbnVtYmVyICovCi0JdTMyIHRpbWVyX3BlcmlvZDsJLyogUGVyaW9kIG9mIG9uZSB0aW1lciBjb3VudCAobXNlYykgKi8KLQl1MzIgbWF4X2NvdW50OwkJLyogTWF4aW11bSBjb3VudGVyIHZhbHVlIHN1cHBvcnRlZCAqLwotCXUzMiBtaW5fY291bnQ7CQkvKiBNaW5pbXVtIGNvdW50ZXIgdmFsdWUgKi8KLQl1OCBmbGFnczsKLQl1OCByZXNlcnZlZFszXTsKLQl1MzIgZW50cmllczsJCS8qIE51bWJlciBvZiB3YXRjaGRvZyBlbnRyaWVzIHRoYXQgZm9sbG93ICovCi19OwotCi0vKiBGbGFncyAqLwotCi0jZGVmaW5lIEFDUElfV0RSVF9USU1FUl9FTkFCTEVEICAgICAoMSkJLyogMDA6IFRpbWVyIGVuYWJsZWQgKi8KLQogLyogUmVzZXQgdG8gZGVmYXVsdCBwYWNraW5nICovCiAKICNwcmFnbWEgcGFjaygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZGNlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaApAQCAtMCwwICsxLDg2OCBAQAorI2lmbmRlZiBfX0FDVEJMMl9IX18KKyNkZWZpbmUgX19BQ1RCTDJfSF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQWRkaXRpb25hbCBBQ1BJIFRhYmxlcyAoMikKKyAqCisgKiBUaGVzZSB0YWJsZXMgYXJlIG5vdCBjb25zdW1lZCBkaXJlY3RseSBieSB0aGUgQUNQSUNBIHN1YnN5c3RlbSwgYnV0IGFyZQorICogaW5jbHVkZWQgaGVyZSB0byBzdXBwb3J0IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgQU1MIGRpc2Fzc2VtYmxlci4KKyAqCisgKiBUaGUgdGFibGVzIGluIHRoaXMgZmlsZSBhcmUgZGVmaW5lZCBieSB0aGlyZC1wYXJ0eSBzcGVjaWZpY2F0aW9ucywgYW5kIGFyZQorICogbm90IGRlZmluZWQgZGlyZWN0bHkgYnkgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiBpdHNlbGYuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgZGVzY3JpcHRpb24gdGFibGUgaGVhZGVyIHNpZ25hdHVyZXMgZm9yIHRhYmxlcyBkZWZpbmVkIGluIHRoaXMKKyAqIGZpbGUuIFVzZWZ1bCBiZWNhdXNlIHRoZXkgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBpbmFkdmVydGVudGx5IHR5cGUgaW4KKyAqIHRoZSB3cm9uZyBzaWduYXR1cmUuCisgKi8KKyNkZWZpbmUgQUNQSV9TSUdfQVNGICAgICAgICAgICAgIkFTRiEiCS8qIEFsZXJ0IFN0YW5kYXJkIEZvcm1hdCB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19CT09UICAgICAgICAgICAiQk9PVCIJLyogU2ltcGxlIEJvb3QgRmxhZyBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19EQkdQICAgICAgICAgICAiREJHUCIJLyogRGVidWcgUG9ydCB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19ETUFSICAgICAgICAgICAiRE1BUiIJLyogRE1BIFJlbWFwcGluZyB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19IUEVUICAgICAgICAgICAiSFBFVCIJLyogSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfSUJGVCAgICAgICAgICAgIklCRlQiCS8qIGlfc0NTSSBCb290IEZpcm13YXJlIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0lWUlMgICAgICAgICAgICJJVlJTIgkvKiBJL08gVmlydHVhbGl6YXRpb24gUmVwb3J0aW5nIFN0cnVjdHVyZSAqLworI2RlZmluZSBBQ1BJX1NJR19NQ0ZHICAgICAgICAgICAiTUNGRyIJLyogUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19TTElDICAgICAgICAgICAiU0xJQyIJLyogU29mdHdhcmUgTGljZW5zaW5nIERlc2NyaXB0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1NQQ1IgICAgICAgICAgICJTUENSIgkvKiBTZXJpYWwgUG9ydCBDb25zb2xlIFJlZGlyZWN0aW9uIHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1NQTUkgICAgICAgICAgICJTUE1JIgkvKiBTZXJ2ZXIgUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcmZhY2UgdGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfVENQQSAgICAgICAgICAgIlRDUEEiCS8qIFRydXN0ZWQgQ29tcHV0aW5nIFBsYXRmb3JtIEFsbGlhbmNlIHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1VFRkkgICAgICAgICAgICJVRUZJIgkvKiBVZWZpIEJvb3QgT3B0aW1pemF0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1dBRVQgICAgICAgICAgICJXQUVUIgkvKiBXaW5kb3dzIEFDUEkgRW11bGF0ZWQgZGV2aWNlcyBUYWJsZSAqLworI2RlZmluZSBBQ1BJX1NJR19XREFUICAgICAgICAgICAiV0RBVCIJLyogV2F0Y2hkb2cgQWN0aW9uIFRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX1dEUlQgICAgICAgICAgICJXRFJUIgkvKiBXYXRjaGRvZyBSZXNvdXJjZSBUYWJsZSAqLworCisvKgorICogQWxsIHRhYmxlcyBtdXN0IGJlIGJ5dGUtcGFja2VkIHRvIG1hdGNoIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24sIHNpbmNlCisgKiB0aGUgdGFibGVzIGFyZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtIEJJT1MuCisgKi8KKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogTm90ZSBhYm91dCBiaXRmaWVsZHM6IFRoZSB1OCB0eXBlIGlzIHVzZWQgZm9yIGJpdGZpZWxkcyBpbiBBQ1BJIHRhYmxlcy4KKyAqIFRoaXMgaXMgdGhlIG9ubHkgdHlwZSB0aGF0IGlzIGV2ZW4gcmVtb3RlbHkgcG9ydGFibGUuIEFueXRoaW5nIGVsc2UgaXMgbm90CisgKiBwb3J0YWJsZSwgc28gZG8gbm90IHVzZSBhbnkgb3RoZXIgYml0ZmllbGQgdHlwZXMuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBBU0YgLSBBbGVydCBTdGFuZGFyZCBGb3JtYXQgdGFibGUgKFNpZ25hdHVyZSAiQVNGISIpCisgKiAgICAgICBSZXZpc2lvbiAweDEwCisgKgorICogQ29uZm9ybXMgdG8gdGhlIEFsZXJ0IFN0YW5kYXJkIEZvcm1hdCBTcGVjaWZpY2F0aW9uIFYyLjAsIDIzIEFwcmlsIDIwMDMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9hc2YgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworfTsKKworLyogQVNGIHN1YnRhYmxlIGhlYWRlciAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIHsKKwl1OCB0eXBlOworCXU4IHJlc2VydmVkOworCXUxNiBsZW5ndGg7Cit9OworCisvKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KKworZW51bSBhY3BpX2FzZl90eXBlIHsKKwlBQ1BJX0FTRl9UWVBFX0lORk8gPSAwLAorCUFDUElfQVNGX1RZUEVfQUxFUlQgPSAxLAorCUFDUElfQVNGX1RZUEVfQ09OVFJPTCA9IDIsCisJQUNQSV9BU0ZfVFlQRV9CT09UID0gMywKKwlBQ1BJX0FTRl9UWVBFX0FERFJFU1MgPSA0LAorCUFDUElfQVNGX1RZUEVfUkVTRVJWRUQgPSA1Cit9OworCisvKgorICogQVNGIHN1YnRhYmxlcworICovCisKKy8qIDA6IEFTRiBJbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfaW5mbyB7CisJc3RydWN0IGFjcGlfYXNmX2hlYWRlciBoZWFkZXI7CisJdTggbWluX3Jlc2V0X3ZhbHVlOworCXU4IG1pbl9wb2xsX2ludGVydmFsOworCXUxNiBzeXN0ZW1faWQ7CisJdTMyIG1mZ19pZDsKKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZDJbM107Cit9OworCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0FTRl9TTUJVU19QUk9UT0NPTFMgICAgKDEpCisKKy8qIDE6IEFTRiBBbGVydHMgKi8KKworc3RydWN0IGFjcGlfYXNmX2FsZXJ0IHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBhc3NlcnRfbWFzazsKKwl1OCBkZWFzc2VydF9tYXNrOworCXU4IGFsZXJ0czsKKwl1OCBkYXRhX2xlbmd0aDsKK307CisKK3N0cnVjdCBhY3BpX2FzZl9hbGVydF9kYXRhIHsKKwl1OCBhZGRyZXNzOworCXU4IGNvbW1hbmQ7CisJdTggbWFzazsKKwl1OCB2YWx1ZTsKKwl1OCBzZW5zb3JfdHlwZTsKKwl1OCB0eXBlOworCXU4IG9mZnNldDsKKwl1OCBzb3VyY2VfdHlwZTsKKwl1OCBzZXZlcml0eTsKKwl1OCBzZW5zb3JfbnVtYmVyOworCXU4IGVudGl0eTsKKwl1OCBpbnN0YW5jZTsKK307CisKKy8qIDI6IEFTRiBSZW1vdGUgQ29udHJvbCAqLworCitzdHJ1Y3QgYWNwaV9hc2ZfcmVtb3RlIHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBjb250cm9sczsKKwl1OCBkYXRhX2xlbmd0aDsKKwl1MTYgcmVzZXJ2ZWQyOworfTsKKworc3RydWN0IGFjcGlfYXNmX2NvbnRyb2xfZGF0YSB7CisJdTggZnVuY3Rpb247CisJdTggYWRkcmVzczsKKwl1OCBjb21tYW5kOworCXU4IHZhbHVlOworfTsKKworLyogMzogQVNGIFJNQ1AgQm9vdCBPcHRpb25zICovCisKK3N0cnVjdCBhY3BpX2FzZl9ybWNwIHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBjYXBhYmlsaXRpZXNbN107CisJdTggY29tcGxldGlvbl9jb2RlOworCXUzMiBlbnRlcnByaXNlX2lkOworCXU4IGNvbW1hbmQ7CisJdTE2IHBhcmFtZXRlcjsKKwl1MTYgYm9vdF9vcHRpb25zOworCXUxNiBvZW1fcGFyYW1ldGVyczsKK307CisKKy8qIDQ6IEFTRiBBZGRyZXNzICovCisKK3N0cnVjdCBhY3BpX2FzZl9hZGRyZXNzIHsKKwlzdHJ1Y3QgYWNwaV9hc2ZfaGVhZGVyIGhlYWRlcjsKKwl1OCBlcHJvbV9hZGRyZXNzOworCXU4IGRldmljZXM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEJPT1QgLSBTaW1wbGUgQm9vdCBGbGFnIFRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gdGhlICJTaW1wbGUgQm9vdCBGbGFnIFNwZWNpZmljYXRpb24iLCBWZXJzaW9uIDIuMQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2Jvb3QgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXU4IGNtb3NfaW5kZXg7CQkvKiBJbmRleCBpbiBDTU9TIFJBTSBmb3IgdGhlIGJvb3QgcmVnaXN0ZXIgKi8KKwl1OCByZXNlcnZlZFszXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREJHUCAtIERlYnVnIFBvcnQgdGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byB0aGUgIkRlYnVnIFBvcnQgU3BlY2lmaWNhdGlvbiIsIFZlcnNpb24gMS4wMCwgMi85LzIwMDAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9kYmdwIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1OCB0eXBlOwkJLyogMD1mdWxsIDE2NTUwLCAxPXN1YnNldCBvZiAxNjU1MCAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBkZWJ1Z19wb3J0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBETUFSIC0gRE1BIFJlbWFwcGluZyB0YWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJJbnRlbCBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2d5IGZvciBEaXJlY3RlZCBJL08iLAorICogVmVyc2lvbiAxLjIsIFNlcHQuIDIwMDgKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1OCB3aWR0aDsJCS8qIEhvc3QgQWRkcmVzcyBXaWR0aCAqLworCXU4IGZsYWdzOworCXU4IHJlc2VydmVkWzEwXTsKK307CisKKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfRE1BUl9JTlRSX1JFTUFQICAgICAgICAoMSkKKworLyogRE1BUiBzdWJ0YWJsZSBoZWFkZXIgKi8KKworc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgeworCXUxNiB0eXBlOworCXUxNiBsZW5ndGg7Cit9OworCisvKiBWYWx1ZXMgZm9yIHN1YnRhYmxlIHR5cGUgaW4gc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKi8KKworZW51bSBhY3BpX2RtYXJfdHlwZSB7CisJQUNQSV9ETUFSX1RZUEVfSEFSRFdBUkVfVU5JVCA9IDAsCisJQUNQSV9ETUFSX1RZUEVfUkVTRVJWRURfTUVNT1JZID0gMSwKKwlBQ1BJX0RNQVJfVFlQRV9BVFNSID0gMiwKKwlBQ1BJX0RNQVJfSEFSRFdBUkVfQUZGSU5JVFkgPSAzLAorCUFDUElfRE1BUl9UWVBFX1JFU0VSVkVEID0gNAkvKiA0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworLyogRE1BUiBEZXZpY2UgU2NvcGUgc3RydWN0dXJlICovCisKK3N0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlIHsKKwl1OCBlbnRyeV90eXBlOworCXU4IGxlbmd0aDsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTggZW51bWVyYXRpb25faWQ7CisJdTggYnVzOworfTsKKworLyogVmFsdWVzIGZvciBlbnRyeV90eXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfZGV2aWNlX3Njb3BlICovCisKK2VudW0gYWNwaV9kbWFyX3Njb3BlX3R5cGUgeworCUFDUElfRE1BUl9TQ09QRV9UWVBFX05PVF9VU0VEID0gMCwKKwlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9FTkRQT0lOVCA9IDEsCisJQUNQSV9ETUFSX1NDT1BFX1RZUEVfQlJJREdFID0gMiwKKwlBQ1BJX0RNQVJfU0NPUEVfVFlQRV9JT0FQSUMgPSAzLAorCUFDUElfRE1BUl9TQ09QRV9UWVBFX0hQRVQgPSA0LAorCUFDUElfRE1BUl9TQ09QRV9UWVBFX1JFU0VSVkVEID0gNQkvKiA1IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworc3RydWN0IGFjcGlfZG1hcl9wY2lfcGF0aCB7CisJdTggZGV2OworCXU4IGZuOworfTsKKworLyoKKyAqIERNQVIgU3ViLXRhYmxlcywgY29ycmVzcG9uZCB0byBUeXBlIGluIHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyCisgKi8KKworLyogMDogSGFyZHdhcmUgVW5pdCBEZWZpbml0aW9uICovCisKK3N0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCB7CisJc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOworCXU4IGZsYWdzOworCXU4IHJlc2VydmVkOworCXUxNiBzZWdtZW50OworCXU2NCBhZGRyZXNzOwkJLyogUmVnaXN0ZXIgQmFzZSBBZGRyZXNzICovCit9OworCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0RNQVJfSU5DTFVERV9BTEwgICAgICAgKDEpCisKKy8qIDE6IFJlc2VydmVkIE1lbW9yeSBEZWZpbmluaXRpb24gKi8KKworc3RydWN0IGFjcGlfZG1hcl9yZXNlcnZlZF9tZW1vcnkgeworCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyIGhlYWRlcjsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTE2IHNlZ21lbnQ7CisJdTY0IGJhc2VfYWRkcmVzczsJLyogNF9rIGFsaWduZWQgYmFzZSBhZGRyZXNzICovCisJdTY0IGVuZF9hZGRyZXNzOwkvKiA0X2sgYWxpZ25lZCBsaW1pdCBhZGRyZXNzICovCit9OworCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0RNQVJfQUxMT1dfQUxMICAgICAgICAgKDEpCisKKy8qIDI6IFJvb3QgUG9ydCBBVFMgQ2FwYWJpbGl0eSBSZXBvcnRpbmcgU3RydWN0dXJlICovCisKK3N0cnVjdCBhY3BpX2RtYXJfYXRzciB7CisJc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgaGVhZGVyOworCXU4IGZsYWdzOworCXU4IHJlc2VydmVkOworCXUxNiBzZWdtZW50OworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9ETUFSX0FMTF9QT1JUUyAgICAgICAgICgxKQorCisvKiAzOiBSZW1hcHBpbmcgSGFyZHdhcmUgU3RhdGljIEFmZmluaXR5IFN0cnVjdHVyZSAqLworCitzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EgeworCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyIGhlYWRlcjsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTY0IGJhc2VfYWRkcmVzczsKKwl1MzIgcHJveGltaXR5X2RvbWFpbjsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSFBFVCAtIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIHRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gIklBLVBDIEhQRVQgKEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVycykgU3BlY2lmaWNhdGlvbiIsCisgKiBWZXJzaW9uIDEuMGEsIE9jdG9iZXIgMjAwNAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2hwZXQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXUzMiBpZDsJCQkvKiBIYXJkd2FyZSBJRCBvZiBldmVudCB0aW1lciBibG9jayAqLworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBhZGRyZXNzOwkvKiBBZGRyZXNzIG9mIGV2ZW50IHRpbWVyIGJsb2NrICovCisJdTggc2VxdWVuY2U7CQkvKiBIUEVUIHNlcXVlbmNlIG51bWJlciAqLworCXUxNiBtaW5pbXVtX3RpY2s7CS8qIE1haW4gY291bnRlciBtaW4gdGljaywgcGVyaW9kaWMgbW9kZSAqLworCXU4IGZsYWdzOworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9IUEVUX1BBR0VfUFJPVEVDVF9NQVNLICgzKQorCisvKiBWYWx1ZXMgZm9yIFBhZ2UgUHJvdGVjdCBmbGFncyAqLworCitlbnVtIGFjcGlfaHBldF9wYWdlX3Byb3RlY3QgeworCUFDUElfSFBFVF9OT19QQUdFX1BST1RFQ1QgPSAwLAorCUFDUElfSFBFVF9QQUdFX1BST1RFQ1Q0ID0gMSwKKwlBQ1BJX0hQRVRfUEFHRV9QUk9URUNUNjQgPSAyCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElCRlQgLSBCb290IEZpcm13YXJlIFRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gImlTQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgKGlCRlQpIGFzIERlZmluZWQgaW4gQUNQSSAzLjBiCisgKiBTcGVjaWZpY2F0aW9uIiwgVmVyc2lvbiAxLjAxLCBNYXJjaCAxLCAyMDA3CisgKgorICogTm90ZTogSXQgYXBwZWFycyB0aGF0IHRoaXMgdGFibGUgaXMgbm90IGludGVuZGVkIHRvIGFwcGVhciBpbiB0aGUgUlNEVC9YU0RULgorICogVGhlcmVmb3JlLCBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgZGlzYXNzZW1ibGVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2liZnQgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXU4IHJlc2VydmVkWzEyXTsKK307CisKKy8qIElCRlQgY29tbW9uIHN1YnRhYmxlIGhlYWRlciAqLworCitzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciB7CisJdTggdHlwZTsKKwl1OCB2ZXJzaW9uOworCXUxNiBsZW5ndGg7CisJdTggaW5kZXg7CisJdTggZmxhZ3M7Cit9OworCisvKiBWYWx1ZXMgZm9yIFR5cGUgZmllbGQgYWJvdmUgKi8KKworZW51bSBhY3BpX2liZnRfdHlwZSB7CisJQUNQSV9JQkZUX1RZUEVfTk9UX1VTRUQgPSAwLAorCUFDUElfSUJGVF9UWVBFX0NPTlRST0wgPSAxLAorCUFDUElfSUJGVF9UWVBFX0lOSVRJQVRPUiA9IDIsCisJQUNQSV9JQkZUX1RZUEVfTklDID0gMywKKwlBQ1BJX0lCRlRfVFlQRV9UQVJHRVQgPSA0LAorCUFDUElfSUJGVF9UWVBFX0VYVEVOU0lPTlMgPSA1LAorCUFDUElfSUJGVF9UWVBFX1JFU0VSVkVEID0gNgkvKiA2IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworLyogSUJGVCBzdWJ0YWJsZXMgKi8KKworc3RydWN0IGFjcGlfaWJmdF9jb250cm9sIHsKKwlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7CisJdTE2IGV4dGVuc2lvbnM7CisJdTE2IGluaXRpYXRvcl9vZmZzZXQ7CisJdTE2IG5pYzBfb2Zmc2V0OworCXUxNiB0YXJnZXQwX29mZnNldDsKKwl1MTYgbmljMV9vZmZzZXQ7CisJdTE2IHRhcmdldDFfb2Zmc2V0OworfTsKKworc3RydWN0IGFjcGlfaWJmdF9pbml0aWF0b3IgeworCXN0cnVjdCBhY3BpX2liZnRfaGVhZGVyIGhlYWRlcjsKKwl1OCBzbnNfc2VydmVyWzE2XTsKKwl1OCBzbHBfc2VydmVyWzE2XTsKKwl1OCBwcmltYXJ5X3NlcnZlclsxNl07CisJdTggc2Vjb25kYXJ5X3NlcnZlclsxNl07CisJdTE2IG5hbWVfbGVuZ3RoOworCXUxNiBuYW1lX29mZnNldDsKK307CisKK3N0cnVjdCBhY3BpX2liZnRfbmljIHsKKwlzdHJ1Y3QgYWNwaV9pYmZ0X2hlYWRlciBoZWFkZXI7CisJdTggaXBfYWRkcmVzc1sxNl07CisJdTggc3VibmV0X21hc2tfcHJlZml4OworCXU4IG9yaWdpbjsKKwl1OCBnYXRld2F5WzE2XTsKKwl1OCBwcmltYXJ5X2Ruc1sxNl07CisJdTggc2Vjb25kYXJ5X2Ruc1sxNl07CisJdTggZGhjcFsxNl07CisJdTE2IHZsYW47CisJdTggbWFjX2FkZHJlc3NbNl07CisJdTE2IHBjaV9hZGRyZXNzOworCXUxNiBuYW1lX2xlbmd0aDsKKwl1MTYgbmFtZV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgYWNwaV9pYmZ0X3RhcmdldCB7CisJc3RydWN0IGFjcGlfaWJmdF9oZWFkZXIgaGVhZGVyOworCXU4IHRhcmdldF9pcF9hZGRyZXNzWzE2XTsKKwl1MTYgdGFyZ2V0X2lwX3NvY2tldDsKKwl1OCB0YXJnZXRfYm9vdF9sdW5bOF07CisJdTggY2hhcF90eXBlOworCXU4IG5pY19hc3NvY2lhdGlvbjsKKwl1MTYgdGFyZ2V0X25hbWVfbGVuZ3RoOworCXUxNiB0YXJnZXRfbmFtZV9vZmZzZXQ7CisJdTE2IGNoYXBfbmFtZV9sZW5ndGg7CisJdTE2IGNoYXBfbmFtZV9vZmZzZXQ7CisJdTE2IGNoYXBfc2VjcmV0X2xlbmd0aDsKKwl1MTYgY2hhcF9zZWNyZXRfb2Zmc2V0OworCXUxNiByZXZlcnNlX2NoYXBfbmFtZV9sZW5ndGg7CisJdTE2IHJldmVyc2VfY2hhcF9uYW1lX29mZnNldDsKKwl1MTYgcmV2ZXJzZV9jaGFwX3NlY3JldF9sZW5ndGg7CisJdTE2IHJldmVyc2VfY2hhcF9zZWNyZXRfb2Zmc2V0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJVlJTIC0gSS9PIFZpcnR1YWxpemF0aW9uIFJlcG9ydGluZyBTdHJ1Y3R1cmUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byAiQU1EIEkvTyBWaXJ0dWFsaXphdGlvbiBUZWNobm9sb2d5IChJT01NVSkgU3BlY2lmaWNhdGlvbiIsCisgKiBSZXZpc2lvbiAxLjI2LCBGZWJydWFyeSAyMDA5LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX2l2cnMgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXUzMiBpbmZvOwkJLyogQ29tbW9uIHZpcnR1YWxpemF0aW9uIGluZm8gKi8KKwl1NjQgcmVzZXJ2ZWQ7Cit9OworCisvKiBWYWx1ZXMgZm9yIEluZm8gZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0lWUlNfUEhZU0lDQUxfU0laRSAgICAgMHgwMDAwN0YwMAkvKiA3IGJpdHMsIHBoeXNpY2FsIGFkZHJlc3Mgc2l6ZSAqLworI2RlZmluZSBBQ1BJX0lWUlNfVklSVFVBTF9TSVpFICAgICAgMHgwMDNGODAwMAkvKiA3IGJpdHMsIHZpcnR1YWwgYWRkcmVzcyBzaXplICovCisjZGVmaW5lIEFDUElfSVZSU19BVFNfUkVTRVJWRUQgICAgICAweDAwNDAwMDAwCS8qIEFUUyBhZGRyZXNzIHRyYW5zbGF0aW9uIHJhbmdlIHJlc2VydmVkICovCisKKy8qIElWUlMgc3VidGFibGUgaGVhZGVyICovCisKK3N0cnVjdCBhY3BpX2l2cnNfaGVhZGVyIHsKKwl1OCB0eXBlOwkJLyogU3VidGFibGUgdHlwZSAqLworCXU4IGZsYWdzOworCXUxNiBsZW5ndGg7CQkvKiBTdWJ0YWJsZSBsZW5ndGggKi8KKwl1MTYgZGV2aWNlX2lkOwkJLyogSUQgb2YgSU9NTVUgKi8KK307CisKKy8qIFZhbHVlcyBmb3Igc3VidGFibGUgVHlwZSBhYm92ZSAqLworCitlbnVtIGFjcGlfaXZyc190eXBlIHsKKwlBQ1BJX0lWUlNfVFlQRV9IQVJEV0FSRSA9IDB4MTAsCisJQUNQSV9JVlJTX1RZUEVfTUVNT1JZMSA9IDB4MjAsCisJQUNQSV9JVlJTX1RZUEVfTUVNT1JZMiA9IDB4MjEsCisJQUNQSV9JVlJTX1RZUEVfTUVNT1JZMyA9IDB4MjIKK307CisKKy8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSBmb3IgSVZIRCBzdWJ0YWJsZSAqLworCisjZGVmaW5lIEFDUElfSVZIRF9UVF9FTkFCTEUgICAgICAgICAoMSkKKyNkZWZpbmUgQUNQSV9JVkhEX1BBU1NfUFcgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBBQ1BJX0lWSERfUkVTX1BBU1NfUFcgICAgICAgKDE8PDIpCisjZGVmaW5lIEFDUElfSVZIRF9JU09DICAgICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgQUNQSV9JVkhEX0lPVExCICAgICAgICAgICAgICgxPDw0KQorCisvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgZm9yIElWTUQgc3VidGFibGUgKi8KKworI2RlZmluZSBBQ1BJX0lWTURfVU5JVFkgICAgICAgICAgICAgKDEpCisjZGVmaW5lIEFDUElfSVZNRF9SRUFEICAgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQUNQSV9JVk1EX1dSSVRFICAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBBQ1BJX0lWTURfRVhDTFVTSU9OX1JBTkdFICAgKDE8PDMpCisKKy8qCisgKiBJVlJTIHN1YnRhYmxlcywgY29ycmVzcG9uZCB0byBUeXBlIGluIHN0cnVjdCBhY3BpX2l2cnNfaGVhZGVyCisgKi8KKworLyogMHgxMDogSS9PIFZpcnR1YWxpemF0aW9uIEhhcmR3YXJlIERlZmluaXRpb24gQmxvY2sgKElWSEQpICovCisKK3N0cnVjdCBhY3BpX2l2cnNfaGFyZHdhcmUgeworCXN0cnVjdCBhY3BpX2l2cnNfaGVhZGVyIGhlYWRlcjsKKwl1MTYgY2FwYWJpbGl0eV9vZmZzZXQ7CS8qIE9mZnNldCBmb3IgSU9NTVUgY29udHJvbCBmaWVsZHMgKi8KKwl1NjQgYmFzZV9hZGRyZXNzOwkvKiBJT01NVSBjb250cm9sIHJlZ2lzdGVycyAqLworCXUxNiBwY2lfc2VnbWVudF9ncm91cDsKKwl1MTYgaW5mbzsJCS8qIE1TSSBudW1iZXIgYW5kIHVuaXQgSUQgKi8KKwl1MzIgcmVzZXJ2ZWQ7Cit9OworCisvKiBNYXNrcyBmb3IgSW5mbyBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfSVZIRF9NU0lfTlVNQkVSX01BU0sgICAweDAwMUYJLyogNSBiaXRzLCBNU0kgbWVzc2FnZSBudW1iZXIgKi8KKyNkZWZpbmUgQUNQSV9JVkhEX1VOSVRfSURfTUFTSyAgICAgIDB4MUYwMAkvKiA1IGJpdHMsIHVuaXRfaUQgKi8KKworLyoKKyAqIERldmljZSBFbnRyaWVzIGZvciBJVkhEIHN1YnRhYmxlLCBhcHBlYXIgYWZ0ZXIgc3RydWN0IGFjcGlfaXZyc19oYXJkd2FyZSBzdHJ1Y3R1cmUuCisgKiBVcHBlciB0d28gYml0cyBvZiB0aGUgVHlwZSBmaWVsZCBhcmUgdGhlIChlbmNvZGVkKSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZS4KKyAqIEN1cnJlbnRseSwgb25seSA0IGFuZCA4IGJ5dGUgZW50cmllcyBhcmUgZGVmaW5lZC4gMTYgYW5kIDMyIGJ5dGUgZW50cmllcworICogYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGJ1dCBub3QgZGVmaW5lZC4KKyAqLworc3RydWN0IGFjcGlfaXZyc19kZV9oZWFkZXIgeworCXU4IHR5cGU7CisJdTE2IGlkOworCXU4IGRhdGFfc2V0dGluZzsKK307CisKKy8qIExlbmd0aCBvZiBkZXZpY2UgZW50cnkgaXMgaW4gdGhlIHRvcCB0d28gYml0cyBvZiBUeXBlIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9JVkhEX0VOVFJZX0xFTkdUSCAgICAgIDB4QzAKKworLyogVmFsdWVzIGZvciBkZXZpY2UgZW50cnkgVHlwZSBmaWVsZCBhYm92ZSAqLworCitlbnVtIGFjcGlfaXZyc19kZXZpY2VfZW50cnlfdHlwZSB7CisJLyogNC1ieXRlIGRldmljZSBlbnRyaWVzLCBhbGwgdXNlIHN0cnVjdCBhY3BpX2l2cnNfZGV2aWNlNCAqLworCisJQUNQSV9JVlJTX1RZUEVfUEFENCA9IDAsCisJQUNQSV9JVlJTX1RZUEVfQUxMID0gMSwKKwlBQ1BJX0lWUlNfVFlQRV9TRUxFQ1QgPSAyLAorCUFDUElfSVZSU19UWVBFX1NUQVJUID0gMywKKwlBQ1BJX0lWUlNfVFlQRV9FTkQgPSA0LAorCisJLyogOC1ieXRlIGRldmljZSBlbnRyaWVzICovCisKKwlBQ1BJX0lWUlNfVFlQRV9QQUQ4ID0gNjQsCisJQUNQSV9JVlJTX1RZUEVfTk9UX1VTRUQgPSA2NSwKKwlBQ1BJX0lWUlNfVFlQRV9BTElBU19TRUxFQ1QgPSA2NiwJLyogVXNlcyBzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThhICovCisJQUNQSV9JVlJTX1RZUEVfQUxJQVNfU1RBUlQgPSA2NywJLyogVXNlcyBzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThhICovCisJQUNQSV9JVlJTX1RZUEVfRVhUX1NFTEVDVCA9IDcwLAkvKiBVc2VzIHN0cnVjdCBhY3BpX2l2cnNfZGV2aWNlOGIgKi8KKwlBQ1BJX0lWUlNfVFlQRV9FWFRfU1RBUlQgPSA3MSwJLyogVXNlcyBzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThiICovCisJQUNQSV9JVlJTX1RZUEVfU1BFQ0lBTCA9IDcyCS8qIFVzZXMgc3RydWN0IGFjcGlfaXZyc19kZXZpY2U4YyAqLworfTsKKworLyogVmFsdWVzIGZvciBEYXRhIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9JVkhEX0lOSVRfUEFTUyAgICAgICAgICgxKQorI2RlZmluZSBBQ1BJX0lWSERfRUlOVF9QQVNTICAgICAgICAgKDE8PDEpCisjZGVmaW5lIEFDUElfSVZIRF9OTUlfUEFTUyAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgQUNQSV9JVkhEX1NZU1RFTV9NR01UICAgICAgICgzPDw0KQorI2RlZmluZSBBQ1BJX0lWSERfTElOVDBfUEFTUyAgICAgICAgKDE8PDYpCisjZGVmaW5lIEFDUElfSVZIRF9MSU5UMV9QQVNTICAgICAgICAoMTw8NykKKworLyogVHlwZXMgMC00OiA0LWJ5dGUgZGV2aWNlIGVudHJ5ICovCisKK3N0cnVjdCBhY3BpX2l2cnNfZGV2aWNlNCB7CisJc3RydWN0IGFjcGlfaXZyc19kZV9oZWFkZXIgaGVhZGVyOworfTsKKworLyogVHlwZXMgNjYtNjc6IDgtYnl0ZSBkZXZpY2UgZW50cnkgKi8KKworc3RydWN0IGFjcGlfaXZyc19kZXZpY2U4YSB7CisJc3RydWN0IGFjcGlfaXZyc19kZV9oZWFkZXIgaGVhZGVyOworCXU4IHJlc2VydmVkMTsKKwl1MTYgdXNlZF9pZDsKKwl1OCByZXNlcnZlZDI7Cit9OworCisvKiBUeXBlcyA3MC03MTogOC1ieXRlIGRldmljZSBlbnRyeSAqLworCitzdHJ1Y3QgYWNwaV9pdnJzX2RldmljZThiIHsKKwlzdHJ1Y3QgYWNwaV9pdnJzX2RlX2hlYWRlciBoZWFkZXI7CisJdTMyIGV4dGVuZGVkX2RhdGE7Cit9OworCisvKiBWYWx1ZXMgZm9yIGV4dGVuZGVkX2RhdGEgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX0lWSERfQVRTX0RJU0FCTEVEICAgICAgKDE8PDMxKQorCisvKiBUeXBlIDcyOiA4LWJ5dGUgZGV2aWNlIGVudHJ5ICovCisKK3N0cnVjdCBhY3BpX2l2cnNfZGV2aWNlOGMgeworCXN0cnVjdCBhY3BpX2l2cnNfZGVfaGVhZGVyIGhlYWRlcjsKKwl1OCBoYW5kbGU7CisJdTE2IHVzZWRfaWQ7CisJdTggdmFyaWV0eTsKK307CisKKy8qIFZhbHVlcyBmb3IgVmFyaWV0eSBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfSVZIRF9JT0FQSUMgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfSVZIRF9IUEVUICAgICAgICAgICAgICAyCisKKy8qIDB4MjAsIDB4MjEsIDB4MjI6IEkvTyBWaXJ0dWFsaXphdGlvbiBNZW1vcnkgRGVmaW5pdGlvbiBCbG9jayAoSVZNRCkgKi8KKworc3RydWN0IGFjcGlfaXZyc19tZW1vcnkgeworCXN0cnVjdCBhY3BpX2l2cnNfaGVhZGVyIGhlYWRlcjsKKwl1MTYgYXV4X2RhdGE7CisJdTY0IHJlc2VydmVkOworCXU2NCBzdGFydF9hZGRyZXNzOworCXU2NCBtZW1vcnlfbGVuZ3RoOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNQ0ZHIC0gUENJIE1lbW9yeSBNYXBwZWQgQ29uZmlndXJhdGlvbiB0YWJsZSBhbmQgc3ViLXRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gIlBDSSBGaXJtd2FyZSBTcGVjaWZpY2F0aW9uIiwgUmV2aXNpb24gMy4wLCBKdW5lIDIwLCAyMDA1CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfbWNmZyB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJdTggcmVzZXJ2ZWRbOF07Cit9OworCisvKiBTdWJ0YWJsZSAqLworCitzdHJ1Y3QgYWNwaV9tY2ZnX2FsbG9jYXRpb24geworCXU2NCBhZGRyZXNzOwkJLyogQmFzZSBhZGRyZXNzLCBwcm9jZXNzb3ItcmVsYXRpdmUgKi8KKwl1MTYgcGNpX3NlZ21lbnQ7CS8qIFBDSSBzZWdtZW50IGdyb3VwIG51bWJlciAqLworCXU4IHN0YXJ0X2J1c19udW1iZXI7CS8qIFN0YXJ0aW5nIFBDSSBCdXMgbnVtYmVyICovCisJdTggZW5kX2J1c19udW1iZXI7CS8qIEZpbmFsIFBDSSBCdXMgbnVtYmVyICovCisJdTMyIHJlc2VydmVkOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTUENSIC0gU2VyaWFsIFBvcnQgQ29uc29sZSBSZWRpcmVjdGlvbiB0YWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJTZXJpYWwgUG9ydCBDb25zb2xlIFJlZGlyZWN0aW9uIFRhYmxlIiwKKyAqIFZlcnNpb24gMS4wMCwgSmFudWFyeSAxMSwgMjAwMgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhY3BpX3RhYmxlX3NwY3IgeworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciBoZWFkZXI7CS8qIENvbW1vbiBBQ1BJIHRhYmxlIGhlYWRlciAqLworCXU4IGludGVyZmFjZV90eXBlOwkvKiAwPWZ1bGwgMTY1NTAsIDE9c3Vic2V0IG9mIDE2NTUwICovCisJdTggcmVzZXJ2ZWRbM107CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHNlcmlhbF9wb3J0OworCXU4IGludGVycnVwdF90eXBlOworCXU4IHBjX2ludGVycnVwdDsKKwl1MzIgaW50ZXJydXB0OworCXU4IGJhdWRfcmF0ZTsKKwl1OCBwYXJpdHk7CisJdTggc3RvcF9iaXRzOworCXU4IGZsb3dfY29udHJvbDsKKwl1OCB0ZXJtaW5hbF90eXBlOworCXU4IHJlc2VydmVkMTsKKwl1MTYgcGNpX2RldmljZV9pZDsKKwl1MTYgcGNpX3ZlbmRvcl9pZDsKKwl1OCBwY2lfYnVzOworCXU4IHBjaV9kZXZpY2U7CisJdTggcGNpX2Z1bmN0aW9uOworCXUzMiBwY2lfZmxhZ3M7CisJdTggcGNpX3NlZ21lbnQ7CisJdTMyIHJlc2VydmVkMjsKK307CisKKy8qIE1hc2tzIGZvciBwY2lfZmxhZ3MgZmllbGQgYWJvdmUgKi8KKworI2RlZmluZSBBQ1BJX1NQQ1JfRE9fTk9UX0RJU0FCTEUgICAgKDEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU1BNSSAtIFNlcnZlciBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSB0YWJsZQorICogICAgICAgIFZlcnNpb24gNQorICoKKyAqIENvbmZvcm1zIHRvICJJbnRlbGxpZ2VudCBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSBTcGVjaWZpY2F0aW9uCisgKiBTZWNvbmQgR2VuZXJhdGlvbiB2Mi4wIiwgRG9jdW1lbnQgUmV2aXNpb24gMS4wLCBGZWJydWFyeSAxMiwgMjAwNCB3aXRoCisgKiBKdW5lIDEyLCAyMDA5IG1hcmt1cC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV9zcG1pIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1OCBpbnRlcmZhY2VfdHlwZTsKKwl1OCByZXNlcnZlZDsJCS8qIE11c3QgYmUgMSAqLworCXUxNiBzcGVjX3JldmlzaW9uOwkvKiBWZXJzaW9uIG9mIElQTUkgKi8KKwl1OCBpbnRlcnJ1cHRfdHlwZTsKKwl1OCBncGVfbnVtYmVyOwkJLyogR1BFIGFzc2lnbmVkICovCisJdTggcmVzZXJ2ZWQxOworCXU4IHBjaV9kZXZpY2VfZmxhZzsKKwl1MzIgaW50ZXJydXB0OworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBpcG1pX3JlZ2lzdGVyOworCXU4IHBjaV9zZWdtZW50OworCXU4IHBjaV9idXM7CisJdTggcGNpX2RldmljZTsKKwl1OCBwY2lfZnVuY3Rpb247CisJdTggcmVzZXJ2ZWQyOworfTsKKworLyogVmFsdWVzIGZvciBpbnRlcmZhY2VfdHlwZSBhYm92ZSAqLworCitlbnVtIGFjcGlfc3BtaV9pbnRlcmZhY2VfdHlwZXMgeworCUFDUElfU1BNSV9OT1RfVVNFRCA9IDAsCisJQUNQSV9TUE1JX0tFWUJPQVJEID0gMSwKKwlBQ1BJX1NQTUlfU01JID0gMiwKKwlBQ1BJX1NQTUlfQkxPQ0tfVFJBTlNGRVIgPSAzLAorCUFDUElfU1BNSV9TTUJVUyA9IDQsCisJQUNQSV9TUE1JX1JFU0VSVkVEID0gNQkvKiA1IGFuZCBhYm92ZSBhcmUgcmVzZXJ2ZWQgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVENQQSAtIFRydXN0ZWQgQ29tcHV0aW5nIFBsYXRmb3JtIEFsbGlhbmNlIHRhYmxlCisgKiAgICAgICAgVmVyc2lvbiAxCisgKgorICogQ29uZm9ybXMgdG8gIlRDRyBQQyBTcGVjaWZpYyBJbXBsZW1lbnRhdGlvbiBTcGVjaWZpY2F0aW9uIiwKKyAqIFZlcnNpb24gMS4xLCBBdWd1c3QgMTgsIDIwMDMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV90Y3BhIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1MTYgcmVzZXJ2ZWQ7CisJdTMyIG1heF9sb2dfbGVuZ3RoOwkvKiBNYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGV2ZW50IGxvZyBhcmVhICovCisJdTY0IGxvZ19hZGRyZXNzOwkvKiBBZGRyZXNzIG9mIHRoZSBldmVudCBsb2cgYXJlYSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBVRUZJIC0gVUVGSSBCb290IG9wdGltaXphdGlvbiBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJVbmlmaWVkIEV4dGVuc2libGUgRmlybXdhcmUgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24iLAorICogVmVyc2lvbiAyLjMsIE1heSA4LCAyMDA5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfdWVmaSB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJdTggaWRlbnRpZmllclsxNl07CS8qIFVVSUQgaWRlbnRpZmllciAqLworCXUxNiBkYXRhX29mZnNldDsJLyogT2Zmc2V0IG9mIHJlbWFpbmluZyBkYXRhIGluIHRhYmxlICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFdBRVQgLSBXaW5kb3dzIEFDUEkgRW11bGF0ZWQgZGV2aWNlcyBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJXaW5kb3dzIEFDUEkgRW11bGF0ZWQgRGV2aWNlcyBUYWJsZSIsIHZlcnNpb24gMS4wLCBBcHJpbCA2LCAyMDA5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfd2FldCB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJdTMyIGZsYWdzOworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9XQUVUX1JUQ19OT19BQ0sgICAgICAgICgxKQkvKiBSVEMgcmVxdWlyZXMgbm8gaW50IGFja25vd2xlZGdlICovCisjZGVmaW5lIEFDUElfV0FFVF9USU1FUl9PTkVfUkVBRCAgICAoMTw8MSkJLyogUE0gdGltZXIgcmVxdWlyZXMgb25seSBvbmUgcmVhZCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFdEQVQgLSBXYXRjaGRvZyBBY3Rpb24gVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byAiSGFyZHdhcmUgV2F0Y2hkb2cgVGltZXJzIERlc2lnbiBTcGVjaWZpY2F0aW9uIiwKKyAqIENvcHlyaWdodCAyMDA2IE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV93ZGF0IHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1MzIgaGVhZGVyX2xlbmd0aDsJLyogV2F0Y2hkb2cgSGVhZGVyIExlbmd0aCAqLworCXUxNiBwY2lfc2VnbWVudDsJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCisJdTggcGNpX2J1czsJCS8qIFBDSSBCdXMgbnVtYmVyICovCisJdTggcGNpX2RldmljZTsJCS8qIFBDSSBEZXZpY2UgbnVtYmVyICovCisJdTggcGNpX2Z1bmN0aW9uOwkvKiBQQ0kgRnVuY3Rpb24gbnVtYmVyICovCisJdTggcmVzZXJ2ZWRbM107CisJdTMyIHRpbWVyX3BlcmlvZDsJLyogUGVyaW9kIG9mIG9uZSB0aW1lciBjb3VudCAobXNlYykgKi8KKwl1MzIgbWF4X2NvdW50OwkJLyogTWF4aW11bSBjb3VudGVyIHZhbHVlIHN1cHBvcnRlZCAqLworCXUzMiBtaW5fY291bnQ7CQkvKiBNaW5pbXVtIGNvdW50ZXIgdmFsdWUgKi8KKwl1OCBmbGFnczsKKwl1OCByZXNlcnZlZDJbM107CisJdTMyIGVudHJpZXM7CQkvKiBOdW1iZXIgb2Ygd2F0Y2hkb2cgZW50cmllcyB0aGF0IGZvbGxvdyAqLworfTsKKworLyogTWFza3MgZm9yIEZsYWdzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9XREFUX0VOQUJMRUQgICAgICAgICAgICgxKQorI2RlZmluZSBBQ1BJX1dEQVRfU1RPUFBFRCAgICAgICAgICAgMHg4MAorCisvKiBXREFUIEluc3RydWN0aW9uIEVudHJpZXMgKGFjdGlvbnMpICovCisKK3N0cnVjdCBhY3BpX3dkYXRfZW50cnkgeworCXU4IGFjdGlvbjsKKwl1OCBpbnN0cnVjdGlvbjsKKwl1MTYgcmVzZXJ2ZWQ7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIHJlZ2lzdGVyX3JlZ2lvbjsKKwl1MzIgdmFsdWU7CQkvKiBWYWx1ZSB1c2VkIHdpdGggUmVhZC9Xcml0ZSByZWdpc3RlciAqLworCXUzMiBtYXNrOwkJLyogQml0bWFzayByZXF1aXJlZCBmb3IgdGhpcyByZWdpc3RlciBpbnN0cnVjdGlvbiAqLworfTsKKworLyogVmFsdWVzIGZvciBBY3Rpb24gZmllbGQgYWJvdmUgKi8KKworZW51bSBhY3BpX3dkYXRfYWN0aW9ucyB7CisJQUNQSV9XREFUX1JFU0VUID0gMSwKKwlBQ1BJX1dEQVRfR0VUX0NVUlJFTlRfQ09VTlRET1dOID0gNCwKKwlBQ1BJX1dEQVRfR0VUX0NPVU5URE9XTiA9IDUsCisJQUNQSV9XREFUX1NFVF9DT1VOVERPV04gPSA2LAorCUFDUElfV0RBVF9HRVRfUlVOTklOR19TVEFURSA9IDgsCisJQUNQSV9XREFUX1NFVF9SVU5OSU5HX1NUQVRFID0gOSwKKwlBQ1BJX1dEQVRfR0VUX1NUT1BQRURfU1RBVEUgPSAxMCwKKwlBQ1BJX1dEQVRfU0VUX1NUT1BQRURfU1RBVEUgPSAxMSwKKwlBQ1BJX1dEQVRfR0VUX1JFQk9PVCA9IDE2LAorCUFDUElfV0RBVF9TRVRfUkVCT09UID0gMTcsCisJQUNQSV9XREFUX0dFVF9TSFVURE9XTiA9IDE4LAorCUFDUElfV0RBVF9TRVRfU0hVVERPV04gPSAxOSwKKwlBQ1BJX1dEQVRfR0VUX1NUQVRVUyA9IDMyLAorCUFDUElfV0RBVF9TRVRfU1RBVFVTID0gMzMsCisJQUNQSV9XREFUX0FDVElPTl9SRVNFUlZFRCA9IDM0CS8qIDM0IGFuZCBncmVhdGVyIGFyZSByZXNlcnZlZCAqLworfTsKKworLyogVmFsdWVzIGZvciBJbnN0cnVjdGlvbiBmaWVsZCBhYm92ZSAqLworCitlbnVtIGFjcGlfd2RhdF9pbnN0cnVjdGlvbnMgeworCUFDUElfV0RBVF9SRUFEX1ZBTFVFID0gMCwKKwlBQ1BJX1dEQVRfUkVBRF9DT1VOVERPV04gPSAxLAorCUFDUElfV0RBVF9XUklURV9WQUxVRSA9IDIsCisJQUNQSV9XREFUX1dSSVRFX0NPVU5URE9XTiA9IDMsCisJQUNQSV9XREFUX0lOU1RSVUNUSU9OX1JFU0VSVkVEID0gNCwJLyogNCBhbmQgZ3JlYXRlciBhcmUgcmVzZXJ2ZWQgKi8KKwlBQ1BJX1dEQVRfUFJFU0VSVkVfUkVHSVNURVIgPSAweDgwCS8qIEV4Y2VwdCBmb3IgdGhpcyB2YWx1ZSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBXRFJUIC0gV2F0Y2hkb2cgUmVzb3VyY2UgVGFibGUKKyAqICAgICAgICBWZXJzaW9uIDEKKyAqCisgKiBDb25mb3JtcyB0byAiV2F0Y2hkb2cgVGltZXIgSGFyZHdhcmUgUmVxdWlyZW1lbnRzIGZvciBXaW5kb3dzIFNlcnZlciAyMDAzIiwKKyAqIFZlcnNpb24gMS4wMSwgQXVndXN0IDI4LCAyMDA2CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGFjcGlfdGFibGVfd2RydCB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsJLyogQ29tbW9uIEFDUEkgdGFibGUgaGVhZGVyICovCisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGNvbnRyb2xfcmVnaXN0ZXI7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGNvdW50X3JlZ2lzdGVyOworCXUxNiBwY2lfZGV2aWNlX2lkOworCXUxNiBwY2lfdmVuZG9yX2lkOworCXU4IHBjaV9idXM7CQkvKiBQQ0kgQnVzIG51bWJlciAqLworCXU4IHBjaV9kZXZpY2U7CQkvKiBQQ0kgRGV2aWNlIG51bWJlciAqLworCXU4IHBjaV9mdW5jdGlvbjsJLyogUENJIEZ1bmN0aW9uIG51bWJlciAqLworCXU4IHBjaV9zZWdtZW50OwkJLyogUENJIFNlZ21lbnQgbnVtYmVyICovCisJdTE2IG1heF9jb3VudDsJCS8qIE1heGltdW0gY291bnRlciB2YWx1ZSBzdXBwb3J0ZWQgKi8KKwl1OCB1bml0czsKK307CisKKy8qIFJlc2V0IHRvIGRlZmF1bHQgcGFja2luZyAqLworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYJCQkJLyogX19BQ1RCTDJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCAzN2JhNTc2Li4xNTNmMTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogLyoKICAqIFNvbWUgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0IHVudXNlZCB2YXJpYWJsZXMuIFNvbWV0aW1lcyB3ZSBkb24ndCB3YW50IHRvCiAgKiB1c2UgYWxsIHRoZSB2YXJpYWJsZXMgKGZvciBleGFtcGxlLCBfYWNwaV9tb2R1bGVfbmFtZSkuIFRoaXMgYWxsb3dzIHVzCi0gKiB0byB0byB0ZWxsIHRoZSBjb21waWxlciBpbiBhIHBlci12YXJpYWJsZSBtYW5uZXIgdGhhdCBhIHZhcmlhYmxlCisgKiB0byB0ZWxsIHRoZSBjb21waWxlciBpbiBhIHBlci12YXJpYWJsZSBtYW5uZXIgdGhhdCBhIHZhcmlhYmxlCiAgKiBpcyB1bnVzZWQKICAqLwogI2lmbmRlZiBBQ1BJX1VOVVNFRF9WQVIKQEAgLTMzOCw3ICszMzgsNyBAQAogCiAvKiBQTSBUaW1lciB0aWNrcyBwZXIgc2Vjb25kIChIWikgKi8KIAotI2RlZmluZSBQTV9USU1FUl9GUkVRVUVOQ1kgIDM1Nzk1NDUKKyNkZWZpbmUgUE1fVElNRVJfRlJFUVVFTkNZICAgICAgICAgICAgICAzNTc5NTQ1CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNzMyLDcgKzczMiw4IEBACiAjZGVmaW5lIEFDUElfQURSX1NQQUNFX1NNQlVTICAgICAgICAgICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDQKICNkZWZpbmUgQUNQSV9BRFJfU1BBQ0VfQ01PUyAgICAgICAgICAgICAoYWNwaV9hZHJfc3BhY2VfdHlwZSkgNQogI2RlZmluZSBBQ1BJX0FEUl9TUEFDRV9QQ0lfQkFSX1RBUkdFVCAgIChhY3BpX2Fkcl9zcGFjZV90eXBlKSA2Ci0jZGVmaW5lIEFDUElfQURSX1NQQUNFX0RBVEFfVEFCTEUgICAgICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDcKKyNkZWZpbmUgQUNQSV9BRFJfU1BBQ0VfSVBNSSAgICAgICAgICAgICAoYWNwaV9hZHJfc3BhY2VfdHlwZSkgNworI2RlZmluZSBBQ1BJX0FEUl9TUEFDRV9EQVRBX1RBQkxFICAgICAgIChhY3BpX2Fkcl9zcGFjZV90eXBlKSA4CiAjZGVmaW5lIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFICAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpIDEyNwogCiAvKgpAQCAtOTIxLDcgKzkyMiw3IEBACiB2b2lkICgqYWNwaV9ub3RpZnlfaGFuZGxlcikgKGFjcGlfaGFuZGxlIGRldmljZSwgdTMyIHZhbHVlLCB2b2lkICpjb250ZXh0KTsKIAogdHlwZWRlZgotdm9pZCAoKmFjcGlfb2JqZWN0X2hhbmRsZXIpIChhY3BpX2hhbmRsZSBvYmplY3QsIHUzMiBmdW5jdGlvbiwgdm9pZCAqZGF0YSk7Cit2b2lkICgqYWNwaV9vYmplY3RfaGFuZGxlcikgKGFjcGlfaGFuZGxlIG9iamVjdCwgdm9pZCAqZGF0YSk7CiAKIHR5cGVkZWYgYWNwaV9zdGF0dXMoKmFjcGlfaW5pdF9oYW5kbGVyKSAoYWNwaV9oYW5kbGUgb2JqZWN0LCB1MzIgZnVuY3Rpb24pOwogCkBAIC05NjksMzggKzk3MCw2MCBAQAogI2RlZmluZSBBQ1BJX0lOVEVSUlVQVF9OT1RfSEFORExFRCAgICAgIDB4MDAKICNkZWZpbmUgQUNQSV9JTlRFUlJVUFRfSEFORExFRCAgICAgICAgICAweDAxCiAKLS8qIExlbmd0aCBvZiBfSElELCBfVUlELCBfQ0lELCBhbmQgVVVJRCB2YWx1ZXMgKi8KKy8qIExlbmd0aCBvZiAzMi1iaXQgRUlTQUlEIHZhbHVlcyB3aGVuIGNvbnZlcnRlZCBiYWNrIHRvIGEgc3RyaW5nICovCiAKLSNkZWZpbmUgQUNQSV9ERVZJQ0VfSURfTEVOR1RIICAgICAgICAgICAweDA5Ci0jZGVmaW5lIEFDUElfTUFYX0NJRF9MRU5HVEggICAgICAgICAgICAgNDgKKyNkZWZpbmUgQUNQSV9FSVNBSURfU1RSSU5HX1NJWkUgICAgICAgICA4CS8qIEluY2x1ZGVzIG51bGwgdGVybWluYXRvciAqLworCisvKiBMZW5ndGggb2YgVVVJRCAoc3RyaW5nKSB2YWx1ZXMgKi8KKwogI2RlZmluZSBBQ1BJX1VVSURfTEVOR1RIICAgICAgICAgICAgICAgIDE2CiAKLS8qIENvbW1vbiBzdHJpbmcgdmVyc2lvbiBvZiBkZXZpY2UgSElEcyBhbmQgVUlEcyAqLworLyogU3RydWN0dXJlcyB1c2VkIGZvciBkZXZpY2UvcHJvY2Vzc29yIEhJRCwgVUlELCBDSUQgKi8KIAogc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgewotCWNoYXIgdmFsdWVbQUNQSV9ERVZJQ0VfSURfTEVOR1RIXTsKKwl1MzIgbGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHN0cmluZyArIG51bGwgKi8KKwljaGFyICpzdHJpbmc7CiB9OwogCi0vKiBDb21tb24gc3RyaW5nIHZlcnNpb24gb2YgZGV2aWNlIENJRHMgKi8KLQotc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCB7Ci0JY2hhciB2YWx1ZVtBQ1BJX01BWF9DSURfTEVOR1RIXTsKK3N0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgeworCXUzMiBjb3VudDsJCS8qIE51bWJlciBvZiBJRHMgaW4gSWRzIGFycmF5ICovCisJdTMyIGxpc3Rfc2l6ZTsJCS8qIFNpemUgb2YgbGlzdCwgaW5jbHVkaW5nIElEIHN0cmluZ3MgKi8KKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBpZHNbMV07CS8qIElEIGFycmF5ICovCiB9OwogCi1zdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgewotCXUzMiBjb3VudDsKLQl1MzIgc2l6ZTsKLQlzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkIGlkWzFdOworLyoKKyAqIFN0cnVjdHVyZSByZXR1cm5lZCBmcm9tIGFjcGlfZ2V0X29iamVjdF9pbmZvLgorICogT3B0aW1pemVkIGZvciBib3RoIDMyLSBhbmQgNjQtYml0IGJ1aWxkcworICovCitzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyB7CisJdTMyIGluZm9fc2l6ZTsJCS8qIFNpemUgb2YgaW5mbywgaW5jbHVkaW5nIElEIHN0cmluZ3MgKi8KKwl1MzIgbmFtZTsJCS8qIEFDUEkgb2JqZWN0IE5hbWUgKi8KKwlhY3BpX29iamVjdF90eXBlIHR5cGU7CS8qIEFDUEkgb2JqZWN0IFR5cGUgKi8KKwl1OCBwYXJhbV9jb3VudDsJCS8qIElmIGEgbWV0aG9kLCByZXF1aXJlZCBwYXJhbWV0ZXIgY291bnQgKi8KKwl1OCB2YWxpZDsJCS8qIEluZGljYXRlcyB3aGljaCBvcHRpb25hbCBmaWVsZHMgYXJlIHZhbGlkICovCisJdTggZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIGluZm8gKi8KKwl1OCBoaWdoZXN0X2RzdGF0ZXNbNF07CS8qIF9zeF9kIHZhbHVlczogMHhGRiBpbmRpY2F0ZXMgbm90IHZhbGlkICovCisJdTggbG93ZXN0X2RzdGF0ZXNbNV07CS8qIF9zeF93IHZhbHVlczogMHhGRiBpbmRpY2F0ZXMgbm90IHZhbGlkICovCisJdTMyIGN1cnJlbnRfc3RhdHVzOwkvKiBfU1RBIHZhbHVlICovCisJYWNwaV9pbnRlZ2VyIGFkZHJlc3M7CS8qIF9BRFIgdmFsdWUgKi8KKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBoYXJkd2FyZV9pZDsJLyogX0hJRCB2YWx1ZSAqLworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIHVuaXF1ZV9pZDsJLyogX1VJRCB2YWx1ZSAqLworCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgY29tcGF0aWJsZV9pZF9saXN0OwkvKiBfQ0lEIGxpc3QgPG11c3QgYmUgbGFzdD4gKi8KIH07CiAKLS8qIFN0cnVjdHVyZSBhbmQgZmxhZ3MgZm9yIGFjcGlfZ2V0X29iamVjdF9pbmZvICovCisvKiBWYWx1ZXMgZm9yIEZsYWdzIGZpZWxkIGFib3ZlIChhY3BpX2dldF9vYmplY3RfaW5mbykgKi8KIAotI2RlZmluZSBBQ1BJX1ZBTElEX1NUQSAgICAgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBBQ1BJX1ZBTElEX0FEUiAgICAgICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBBQ1BJX1ZBTElEX0hJRCAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBBQ1BJX1ZBTElEX1VJRCAgICAgICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBBQ1BJX1ZBTElEX0NJRCAgICAgICAgICAgICAgICAgIDB4MDAxMAotI2RlZmluZSBBQ1BJX1ZBTElEX1NYRFMgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBBQ1BJX1BDSV9ST09UX0JSSURHRSAgICAgICAgICAgIDB4MDEKKworLyogRmxhZ3MgZm9yIFZhbGlkIGZpZWxkIGFib3ZlIChhY3BpX2dldF9vYmplY3RfaW5mbykgKi8KKworI2RlZmluZSBBQ1BJX1ZBTElEX1NUQSAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQUNQSV9WQUxJRF9BRFIgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFDUElfVkFMSURfSElEICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBQ1BJX1ZBTElEX1VJRCAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQUNQSV9WQUxJRF9DSUQgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFDUElfVkFMSURfU1hEUyAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBBQ1BJX1ZBTElEX1NYV1MgICAgICAgICAgICAgICAgIDB4NDAKIAogLyogRmxhZ3MgZm9yIF9TVEEgbWV0aG9kICovCiAKQEAgLTEwMTEsMjkgKzEwMzQsNiBAQAogI2RlZmluZSBBQ1BJX1NUQV9ERVZJQ0VfT0sgICAgICAgICAgICAgIDB4MDgJLyogU3lub255bSAqLwogI2RlZmluZSBBQ1BJX1NUQV9CQVRURVJZX1BSRVNFTlQgICAgICAgIDB4MTAKIAotI2RlZmluZSBBQ1BJX0NPTU1PTl9PQkpfSU5GTyBcCi0JYWNwaV9vYmplY3RfdHlwZSAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogQUNQSSBvYmplY3QgdHlwZSAqLyBcCi0JYWNwaV9uYW1lICAgICAgICAgICAgICAgICAgICAgICBuYW1lCS8qIEFDUEkgb2JqZWN0IE5hbWUgKi8KLQotc3RydWN0IGFjcGlfb2JqX2luZm9faGVhZGVyIHsKLQlBQ1BJX0NPTU1PTl9PQkpfSU5GTzsKLX07Ci0KLS8qIFN0cnVjdHVyZSByZXR1cm5lZCBmcm9tIEdldCBPYmplY3QgSW5mbyAqLwotCi1zdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyB7Ci0JQUNQSV9DT01NT05fT0JKX0lORk87Ci0KLQl1MzIgcGFyYW1fY291bnQ7CS8qIElmIGEgbWV0aG9kLCByZXF1aXJlZCBwYXJhbWV0ZXIgY291bnQgKi8KLQl1MzIgdmFsaWQ7CQkvKiBJbmRpY2F0ZXMgd2hpY2ggZmllbGRzIGJlbG93IGFyZSB2YWxpZCAqLwotCXUzMiBjdXJyZW50X3N0YXR1czsJLyogX1NUQSB2YWx1ZSAqLwotCWFjcGlfaW50ZWdlciBhZGRyZXNzOwkvKiBfQURSIHZhbHVlIGlmIGFueSAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIGhhcmR3YXJlX2lkOwkvKiBfSElEIHZhbHVlIGlmIGFueSAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIHVuaXF1ZV9pZDsJLyogX1VJRCB2YWx1ZSBpZiBhbnkgKi8KLQl1OCBoaWdoZXN0X2RzdGF0ZXNbNF07CS8qIF9zeF9kIHZhbHVlczogMHhGRiBpbmRpY2F0ZXMgbm90IHZhbGlkICovCi0Jc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0IGNvbXBhdGliaWxpdHlfaWQ7CS8qIExpc3Qgb2YgX0NJRHMgaWYgYW55ICovCi19OwotCiAvKiBDb250ZXh0IHN0cnVjdHMgZm9yIGFkZHJlc3Mgc3BhY2UgaGFuZGxlcnMgKi8KIAogc3RydWN0IGFjcGlfcGNpX2lkIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKaW5kZXggOTM1YzVkNy4uNmFhZGJmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKQEAgLTU3LDcgKzU3LDcgQEAKIC8qCiAgKiBTb21lIGNvbXBpbGVycyBjb21wbGFpbiBhYm91dCB1bnVzZWQgdmFyaWFibGVzLiBTb21ldGltZXMgd2UgZG9uJ3Qgd2FudCB0bwogICogdXNlIGFsbCB0aGUgdmFyaWFibGVzIChmb3IgZXhhbXBsZSwgX2FjcGlfbW9kdWxlX25hbWUpLiBUaGlzIGFsbG93cyB1cwotICogdG8gdG8gdGVsbCB0aGUgY29tcGlsZXIgd2FybmluZyBpbiBhIHBlci12YXJpYWJsZSBtYW5uZXIgdGhhdCBhIHZhcmlhYmxlCisgKiB0byB0ZWxsIHRoZSBjb21waWxlciB3YXJuaW5nIGluIGEgcGVyLXZhcmlhYmxlIG1hbm5lciB0aGF0IGEgdmFyaWFibGUKICAqIGlzIHVudXNlZC4KICAqLwogI2RlZmluZSBBQ1BJX1VOVVNFRF9WQVIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAppbmRleCBmY2I4ZTRiLi45ZDdmZWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKQEAgLTE0OSwxMCArMTQ5LDEwIEBACiAjZGVmaW5lIEFDUElfRlJFRShhKSAgICAgICAgICAgIGtmcmVlKGEpCiAKIC8qIFVzZWQgd2l0aGluIEFDUElDQSB0byBzaG93IHdoZXJlIGl0IGlzIHNhZmUgdG8gcHJlZW1wdCBleGVjdXRpb24gKi8KLQorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNkZWZpbmUgQUNQSV9QUkVFTVBUSU9OX1BPSU5UKCkgXAogCWRvIHsgXAotCQlpZiAoIWlycXNfZGlzYWJsZWQoKSkgXAorCQlpZiAoIWluX2F0b21pY19wcmVlbXB0X29mZigpKSBcCiAJCQljb25kX3Jlc2NoZWQoKTsgXAogCX0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKaW5kZXggMWMxZmE0Mi4uY2EwZjIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKQEAgLTcsNiArNyw3IEBACiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3B1dGltZV90OwogCiAjZGVmaW5lIGNwdXRpbWVfemVybwkJCSgwVUwpCisjZGVmaW5lIGNwdXRpbWVfb25lX2ppZmZ5CQlqaWZmaWVzX3RvX2NwdXRpbWUoMSkKICNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4wVUwgPj4gMSkgLSAxKQogI2RlZmluZSBjcHV0aW1lX2FkZChfX2EsIF9fYikJCSgoX19hKSArICAoX19iKSkKICNkZWZpbmUgY3B1dGltZV9zdWIoX19hLCBfX2IpCQkoKF9fYSkgLSAgKF9fYikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IGQ2YzM3OWQuLjljY2EzNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0xNDEsNiArMTQxLDggQEAKICAqIGJ1dCBtb3JlIHR5cGljYWxseSBpcyBjb25maWd1cmVkIGVudGlyZWx5IGZyb20gdXNlcnNwYWNlLgogICovCiBleHRlcm4gaW50IGdwaW9fZXhwb3J0KHVuc2lnbmVkIGdwaW8sIGJvb2wgZGlyZWN0aW9uX21heV9jaGFuZ2UpOworZXh0ZXJuIGludCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCXVuc2lnbmVkIGdwaW8pOwogZXh0ZXJuIHZvaWQgZ3Bpb191bmV4cG9ydCh1bnNpZ25lZCBncGlvKTsKIAogI2VuZGlmCS8qIENPTkZJR19HUElPX1NZU0ZTICovCkBAIC0xODUsNiArMTg3LDEyIEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCXVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3VuZXhwb3J0KHVuc2lnbmVkIGdwaW8pCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva21hcF90eXBlcy5oCmluZGV4IGVkZGJjZTAuLmU1ZjIzNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva21hcF90eXBlcy5oCkBAIC0yLDM0ICsyLDM1IEBACiAjZGVmaW5lIF9BU01fR0VORVJJQ19LTUFQX1RZUEVTX0gKIAogI2lmZGVmIF9fV0lUSF9LTV9GRU5DRQotIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCisjIGRlZmluZSBLTUFQX0QobikgX19LTV9GRU5DRV8jI24gLAogI2Vsc2UKLSMgZGVmaW5lIEQobikKKyMgZGVmaW5lIEtNQVBfRChuKQogI2VuZGlmCiAKIGVudW0ga21fdHlwZSB7Ci1EKDApCUtNX0JPVU5DRV9SRUFELAotRCgxKQlLTV9TS0JfU1VOUlBDX0RBVEEsCi1EKDIpCUtNX1NLQl9EQVRBX1NPRlRJUlEsCi1EKDMpCUtNX1VTRVIwLAotRCg0KQlLTV9VU0VSMSwKLUQoNSkJS01fQklPX1NSQ19JUlEsCi1EKDYpCUtNX0JJT19EU1RfSVJRLAotRCg3KQlLTV9QVEUwLAotRCg4KQlLTV9QVEUxLAotRCg5KQlLTV9JUlEwLAotRCgxMCkJS01fSVJRMSwKLUQoMTEpCUtNX1NPRlRJUlEwLAotRCgxMikJS01fU09GVElSUTEsCi1EKDEzKQlLTV9TWU5DX0lDQUNIRSwKLUQoMTQpCUtNX1NZTkNfRENBQ0hFLAotRCgxNSkJS01fVU1MX1VTRVJDT1BZLCAvKiBVTUwgc3BlY2lmaWMsIGZvciBjb3B5XypfdXNlciAtIHVzZWQgaW4gZG9fb3Bfb25lX3BhZ2UgKi8KLUQoMTYpCUtNX0lSUV9QVEUsCi1EKDE3KQlLTV9OTUksCi1EKDE4KQlLTV9OTUlfUFRFLAotRCgxOSkJS01fVFlQRV9OUgorS01BUF9EKDApCUtNX0JPVU5DRV9SRUFELAorS01BUF9EKDEpCUtNX1NLQl9TVU5SUENfREFUQSwKK0tNQVBfRCgyKQlLTV9TS0JfREFUQV9TT0ZUSVJRLAorS01BUF9EKDMpCUtNX1VTRVIwLAorS01BUF9EKDQpCUtNX1VTRVIxLAorS01BUF9EKDUpCUtNX0JJT19TUkNfSVJRLAorS01BUF9EKDYpCUtNX0JJT19EU1RfSVJRLAorS01BUF9EKDcpCUtNX1BURTAsCitLTUFQX0QoOCkJS01fUFRFMSwKK0tNQVBfRCg5KQlLTV9JUlEwLAorS01BUF9EKDEwKQlLTV9JUlExLAorS01BUF9EKDExKQlLTV9TT0ZUSVJRMCwKK0tNQVBfRCgxMikJS01fU09GVElSUTEsCitLTUFQX0QoMTMpCUtNX1NZTkNfSUNBQ0hFLAorS01BUF9EKDE0KQlLTV9TWU5DX0RDQUNIRSwKKy8qIFVNTCBzcGVjaWZpYywgZm9yIGNvcHlfKl91c2VyIC0gdXNlZCBpbiBkb19vcF9vbmVfcGFnZSAqLworS01BUF9EKDE1KQlLTV9VTUxfVVNFUkNPUFksCitLTUFQX0QoMTYpCUtNX0lSUV9QVEUsCitLTUFQX0QoMTcpCUtNX05NSSwKK0tNQVBfRCgxOCkJS01fTk1JX1BURSwKK0tNQVBfRCgxOSkJS01fVFlQRV9OUgogfTsKIAotI3VuZGVmIEQKKyN1bmRlZiBLTUFQX0QKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgKaW5kZXggM2I2OWFkMy4uZGQ2M2JkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaApAQCAtMzUsNiArMzUsOSBAQAogI2RlZmluZSBNQURWX0RPTlRGT1JLCTEwCQkvKiBkb24ndCBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAjZGVmaW5lIE1BRFZfRE9GT1JLCTExCQkvKiBkbyBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAKKyNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICAxMgkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxMwkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCisKIC8qIGNvbXBhdGliaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgTUFQX0ZJTEUJMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi5oCmluZGV4IDdjYWI0ZGUuLjMyYzhiZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCiAjZGVmaW5lIE1BUF9TVEFDSwkweDIwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLworI2RlZmluZSBNQVBfSFVHRVRMQgkweDQwMDAwCQkvKiBjcmVhdGUgYSBodWdlIHBhZ2UgbWFwcGluZyAqLwogCiAjZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KICNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaAppbmRleCBkMDgzNTYxLi5iM2JmYWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCkBAIC0yMyw0ICsyMywyMCBAQAogI2RlZmluZSBkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHApIChwKQogI2VuZGlmCiAKKy8qIHJhbmRvbSBleHRyYSBzZWN0aW9ucyAoaWYgYW55KS4gIE92ZXJyaWRlCisgKiBpbiBhc20vc2VjdGlvbnMuaCAqLworI2lmbmRlZiBhcmNoX2lzX2tlcm5lbF90ZXh0CitzdGF0aWMgaW5saW5lIGludCBhcmNoX2lzX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZuZGVmIGFyY2hfaXNfa2VybmVsX2RhdGEKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXNfa2VybmVsX2RhdGEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfU0VDVElPTlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3lzY2FsbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zeXNjYWxsLmgKaW5kZXggZWE4MDg3Yi4uNWMxMjJhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zeXNjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zeXNjYWxsLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogQWNjZXNzIHRvIHVzZXIgc3lzdGVtIGNhbGwgcGFyYW1ldGVycyBhbmQgcmVzdWx0cwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0zMiw5ICszMiwxMyBAQAogICogSWYgQHRhc2sgaXMgbm90IGV4ZWN1dGluZyBhIHN5c3RlbSBjYWxsLCBpLmUuIGl0J3MgYmxvY2tlZAogICogaW5zaWRlIHRoZSBrZXJuZWwgZm9yIGEgZmF1bHQgb3Igc2lnbmFsLCByZXR1cm5zIC0xLgogICoKKyAqIE5vdGUgdGhpcyByZXR1cm5zIGludCBldmVuIG9uIDY0LWJpdCBtYWNoaW5lcy4gIE9ubHkgMzIgYml0cyBvZgorICogc3lzdGVtIGNhbGwgbnVtYmVyIGNhbiBiZSBtZWFuaW5nZnVsLiAgSWYgdGhlIGFjdHVhbCBhcmNoIHZhbHVlCisgKiBpcyA2NCBiaXRzLCB0aGlzIHRydW5jYXRlcyB0byAzMiBiaXRzIHNvIDB4ZmZmZmZmZmYgbWVhbnMgLTEuCisgKgogICogSXQncyBvbmx5IHZhbGlkIHRvIGNhbGwgdGhpcyB3aGVuIEB0YXNrIGlzIGtub3duIHRvIGJlIGJsb2NrZWQuCiAgKi8KLWxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIC8qKgogICogc3lzY2FsbF9yb2xsYmFjayAtIHJvbGwgYmFjayByZWdpc3RlcnMgYWZ0ZXIgYW4gYWJvcnRlZCBzeXN0ZW0gY2FsbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmgKaW5kZXggMTEyNWU1YS4uZDc2YjY2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCkBAIC02MjAsOCArNjIwLDggQEAKIAogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIDI0MAogX19TWVNDQUxMKF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbykKLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbiAyNDEKLV9fU1lTQ0FMTChfX05SX3BlcmZfY291bnRlcl9vcGVuLCBzeXNfcGVyZl9jb3VudGVyX29wZW4pCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuIDI0MQorX19TWVNDQUxMKF9fTlJfcGVyZl9ldmVudF9vcGVuLCBzeXNfcGVyZl9ldmVudF9vcGVuKQogCiAjdW5kZWYgX19OUl9zeXNjYWxscwogI2RlZmluZSBfX05SX3N5c2NhbGxzIDI0MgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IDQ1YjY3ZDkuLmM4ZTY0YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTg4LDcgKzg4LDM3IEBACiAjZGVmaW5lIERSTV9VVF9DT1JFIAkJMHgwMQogI2RlZmluZSBEUk1fVVRfRFJJVkVSCQkweDAyCiAjZGVmaW5lIERSTV9VVF9LTVMJCTB4MDQKLSNkZWZpbmUgRFJNX1VUX01PREUJCTB4MDgKKy8qCisgKiBUaHJlZSBkZWJ1ZyBsZXZlbHMgYXJlIGRlZmluZWQuCisgKiBkcm1fY29yZSwgZHJtX2RyaXZlciwgZHJtX2ttcworICogZHJtX2NvcmUgbGV2ZWwgY2FuIGJlIHVzZWQgaW4gdGhlIGdlbmVyaWMgZHJtIGNvZGUuIEZvciBleGFtcGxlOgorICogCWRybV9pb2N0bCwgZHJtX21tLCBkcm1fbWVtb3J5CisgKiBUaGUgbWFjcm8gZGVmaW5pdG9uIG9mIERSTV9ERUJVRyBpcyB1c2VkLgorICogCURSTV9ERUJVRyhmbXQsIGFyZ3MuLi4pCisgKiAJVGhlIGRlYnVnIGluZm8gYnkgdXNpbmcgdGhlIERSTV9ERUJVRyBjYW4gYmUgb2J0YWluZWQgYnkgYWRkaW5nCisgKiAJdGhlIGJvb3Qgb3B0aW9uIG9mICJkcm0uZGVidWc9MSIuCisgKgorICogZHJtX2RyaXZlciBsZXZlbCBjYW4gYmUgdXNlZCBpbiB0aGUgc3BlY2lmaWMgZHJtIGRyaXZlci4gSXQgaXMgdXNlZAorICogdG8gYWRkIHRoZSBkZWJ1ZyBpbmZvIHJlbGF0ZWQgd2l0aCB0aGUgZHJtIGRyaXZlci4gRm9yIGV4YW1wbGU6CisgKiBpOTE1X2RydiwgaTkxNV9kbWEsIGk5MTVfZ2VtLCByYWRlb25fZHJ2LAorICogCVRoZSBtYWNybyBkZWZpbml0aW9uIG9mIERSTV9ERUJVR19EUklWRVIgY2FuIGJlIHVzZWQuCisgKiAJRFJNX0RFQlVHX0RSSVZFUihmbXQsIGFyZ3MuLi4pCisgKiAJVGhlIGRlYnVnIGluZm8gYnkgdXNpbmcgdGhlIERSTV9ERUJVR19EUklWRVIgY2FuIGJlIG9idGFpbmVkIGJ5CisgKiAJYWRkaW5nIHRoZSBib290IG9wdGlvbiBvZiAiZHJtLmRlYnVnPTB4MDIiCisgKgorICogZHJtX2ttcyBsZXZlbCBjYW4gYmUgdXNlZCBpbiB0aGUgS01TIGNvZGUgcmVsYXRlZCB3aXRoIHNwZWNpZmljIGRybSBkcml2ZXIuCisgKiBJdCBpcyB1c2VkIHRvIGFkZCB0aGUgZGVidWcgaW5mbyByZWxhdGVkIHdpdGggS01TIG1vZGUuIEZvciBleGFtcGxlOgorICogdGhlIGNvbm5lY3Rvci9jcnRjICwKKyAqIAlUaGUgbWFjcm8gZGVmaW5pdGlvbiBvZiBEUk1fREVCVUdfS01TIGNhbiBiZSB1c2VkLgorICogCURSTV9ERUJVR19LTVMoZm10LCBhcmdzLi4uKQorICogCVRoZSBkZWJ1ZyBpbmZvIGJ5IHVzaW5nIHRoZSBEUk1fREVCVUdfS01TIGNhbiBiZSBvYnRhaW5lZCBieQorICogCWFkZGluZyB0aGUgYm9vdCBvcHRpb24gb2YgImRybS5kZWJ1Zz0weDA0IgorICoKKyAqIElmIHdlIGFkZCB0aGUgYm9vdCBvcHRpb24gb2YgImRybS5kZWJ1Zz0weDA2Iiwgd2UgY2FuIGdldCB0aGUgZGVidWcgaW5mbyBieQorICogdXNpbmcgdGhlIERSTV9ERUJVR19LTVMgYW5kIERSTV9ERUJVR19EUklWRVIuCisgKiBJZiB3ZSBhZGQgdGhlIGJvb3Qgb3B0aW9uIG9mICJkcm0uZGVidWc9MHgwNSIsIHdlIGNhbiBnZXQgdGhlIGRlYnVnIGluZm8gYnkKKyAqIHVzaW5nIHRoZSBEUk1fREVCVUdfS01TIGFuZCBEUk1fREVCVUcuCisgKi8KIAogZXh0ZXJuIHZvaWQgZHJtX3V0X2RlYnVnX3ByaW50ayh1bnNpZ25lZCBpbnQgcmVxdWVzdF9sZXZlbCwKIAkJCQljb25zdCBjaGFyICpwcmVmaXgsCkBAIC0xNzQsMTkgKzIwNCwxNCBAQAogCQkJCQlfX2Z1bmNfXywgZm10LCAjI2FyZ3MpOwkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgRFJNX0RFQlVHX0RSSVZFUihwcmVmaXgsIGZtdCwgYXJncy4uLikJCQkJXAorI2RlZmluZSBEUk1fREVCVUdfRFJJVkVSKGZtdCwgYXJncy4uLikJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWRybV91dF9kZWJ1Z19wcmludGsoRFJNX1VUX0RSSVZFUiwgcHJlZml4LAkJXAorCQlkcm1fdXRfZGVidWdfcHJpbnRrKERSTV9VVF9EUklWRVIsIERSTV9OQU1FLAkJXAogCQkJCQlfX2Z1bmNfXywgZm10LCAjI2FyZ3MpOwkJXAogCX0gd2hpbGUgKDApCi0jZGVmaW5lIERSTV9ERUJVR19LTVMocHJlZml4LCBmbXQsIGFyZ3MuLi4pCQkJCVwKKyNkZWZpbmUgRFJNX0RFQlVHX0tNUyhmbXQsIGFyZ3MuLi4pCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWRybV91dF9kZWJ1Z19wcmludGsoRFJNX1VUX0tNUywgcHJlZml4LCAJCVwKLQkJCQkJIF9fZnVuY19fLCBmbXQsICMjYXJncyk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBEUk1fREVCVUdfTU9ERShwcmVmaXgsIGZtdCwgYXJncy4uLikJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJZHJtX3V0X2RlYnVnX3ByaW50ayhEUk1fVVRfTU9ERSwgcHJlZml4LCAJCVwKKwkJZHJtX3V0X2RlYnVnX3ByaW50ayhEUk1fVVRfS01TLCBEUk1fTkFNRSwgCQlcCiAJCQkJCSBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpOwlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgRFJNX0xPRyhmbXQsIGFyZ3MuLi4pCQkJCQkJXApAQCAtMjEwLDkgKzIzNSw4IEBACiAJCQkJCU5VTEwsIGZtdCwgIyNhcmdzKTsJCVwKIAl9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgRFJNX0RFQlVHX0RSSVZFUihwcmVmaXgsIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBEUk1fREVCVUdfS01TKHByZWZpeCwgZm10LCBhcmdzLi4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIERSTV9ERUJVR19NT0RFKHByZWZpeCwgZm10LCBhcmdzLi4uKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERSTV9ERUJVR19EUklWRVIoZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERSTV9ERUJVR19LTVMoZm10LCBhcmdzLi4uKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIERSTV9ERUJVRyhmbXQsIGFyZy4uLikJCSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIERSTV9MT0coZm10LCBhcmcuLi4pCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIERSTV9MT0dfS01TKGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQpAQCAtNzg2LDYgKzgxMCw5IEBACiAJaW50ICgqZ2VtX2luaXRfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCXZvaWQgKCpnZW1fZnJlZV9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiAKKwkvKiB2Z2EgYXJiIGlycSBoYW5kbGVyICovCisJdm9pZCAoKnZnYWFyYl9pcnEpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgc3RhdGUpOworCiAJLyogRHJpdmVyIHByaXZhdGUgb3BzIGZvciB0aGlzIG9iamVjdCAqLwogCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqZ2VtX3ZtX29wczsKIApAQCAtMTQxNyw3ICsxNDQ0LDcgQEAKIAogaW50IGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgIGludCAqaGFuZGxlcCk7CisJCQkgIHUzMiAqaGFuZGxlcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKQEAgLTE0NDMsNyArMTQ3MCw3IEBACiAKIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxwLAotCQkJCQkgICAgIGludCBoYW5kbGUpOworCQkJCQkgICAgIHUzMiBoYW5kbGUpOwogaW50IGRybV9nZW1fY2xvc2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCBkcm1fZ2VtX2ZsaW5rX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY2FjaGUuaCBiL2luY2x1ZGUvZHJtL2RybV9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZmIwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fY2FjaGUuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBSZWQgSGF0IEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQXV0aG9yczoKKyAqIERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisgKi8KKworI2lmbmRlZiBfRFJNX0NBQ0hFX0hfCisjZGVmaW5lIF9EUk1fQ0FDSEVfSF8KKwordm9pZCBkcm1fY2xmbHVzaF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZXNbXSwgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IDczMDBmYjguLmFlMWU5ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtMjU5LDYgKzI1OSw4IEBACiAJdm9pZCAqZmJkZXY7CiAJdTMyIHBzZXVkb19wYWxldHRlWzE3XTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpbHBfaGVhZDsKKwkvKiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBoZWxwZXIgKi8KKwl2b2lkICpoZWxwZXJfcHJpdmF0ZTsKIH07CiAKIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiB7CkBAIC01NzIsNiArNTc0LDEyIEBACiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5OwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X3RvcF9tYXJnaW5fcHJvcGVydHk7CiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9icmlnaHRuZXNzX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X2NvbnRyYXN0X3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X292ZXJzY2FuX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X3NhdHVyYXRpb25fcHJvcGVydHk7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfaHVlX3Byb3BlcnR5OwogCiAJLyogT3B0aW9uYWwgcHJvcGVydGllcyAqLwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKnNjYWxpbmdfbW9kZV9wcm9wZXJ0eTsKQEAgLTczNiw0ICs3NDQsMTIgQEAKIGV4dGVybiBpbnQgZHJtX21vZGVfZ2FtbWFfc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBib29sIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHN0cnVjdCBlZGlkICplZGlkKTsKK2V4dGVybiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2N2dF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJaW50IGhkaXNwbGF5LCBpbnQgdmRpc3BsYXksIGludCB2cmVmcmVzaCwKKwkJCQlib29sIHJlZHVjZWQsIGJvb2wgaW50ZXJsYWNlZCk7CitleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9ndGZfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCisJCQkJYm9vbCBpbnRlcmxhY2VkLCBpbnQgbWFyZ2lucyk7CitleHRlcm4gaW50IGRybV9hZGRfbW9kZXNfbm9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJaW50IGhkaXNwbGF5LCBpbnQgdmRpc3BsYXkpOwogI2VuZGlmIC8qIF9fRFJNX0NSVENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCmluZGV4IDY3NjlmZjYuLjRjOGRhY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCkBAIC03OSw2ICs3OSw4IEBACiAJLyogZGV0ZWN0IGZvciBEQUMgc3R5bGUgZW5jb2RlcnMgKi8KIAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzICgqZGV0ZWN0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwkvKiBkaXNhYmxlIGVuY29kZXIgd2hlbiBub3QgaW4gdXNlIC0gbW9yZSBleHBsaWNpdCB0aGFuIGRwbXMgb2ZmICovCisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiB9OwogCiBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgewpAQCAtOTgsNiArMTAwLDcgQEAKIAkJCQkgICAgIGludCB4LCBpbnQgeSwKIAkJCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYik7CiBleHRlcm4gYm9vbCBkcm1faGVscGVyX2NydGNfaW5fdXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitleHRlcm4gYm9vbCBkcm1faGVscGVyX2VuY29kZXJfaW5fdXNlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CiAKIGV4dGVybiB2b2lkIGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IG1vZGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZW5jb2Rlcl9zbGF2ZS5oIGIvaW5jbHVkZS9kcm0vZHJtX2VuY29kZXJfc2xhdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY1NjMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2VuY29kZXJfc2xhdmUuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBGcmFuY2lzY28gSmVyZXouCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fRFJNX0VOQ09ERVJfU0xBVkVfSF9fCisjZGVmaW5lIF9fRFJNX0VOQ09ERVJfU0xBVkVfSF9fCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtX2NydGMuaCIKKworLyoqCisgKiBzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmVfZnVuY3MgLSBFbnRyeSBwb2ludHMgZXhwb3NlZCBieSBhIHNsYXZlIGVuY29kZXIgZHJpdmVyCisgKiBAc2V0X2NvbmZpZzoJSW5pdGlhbGl6ZSBhbnkgZW5jb2Rlci1zcGVjaWZpYyBtb2Rlc2V0dGluZyBwYXJhbWV0ZXJzLgorICoJCVRoZSBtZWFuaW5nIG9mIHRoZSBAcGFyYW1zIHBhcmFtZXRlciBpcyBpbXBsZW1lbnRhdGlvbgorICoJCWRlcGVuZGVudC4gSXQgd2lsbCB1c3VhbGx5IGJlIGEgc3RydWN0dXJlIHdpdGggRFZPIHBvcnQKKyAqCQlkYXRhIGZvcm1hdCBzZXR0aW5ncyBvciB0aW1pbmdzLiBJdCdzIG5vdCByZXF1aXJlZCBmb3IKKyAqCQl0aGUgbmV3IHBhcmFtZXRlcnMgdG8gdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgbW9kZQorICoJCWlzIHNldC4KKyAqCisgKiBNb3N0IG9mIGl0cyBtZW1iZXJzIGFyZSBhbmFsb2dvdXMgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGluCisgKiAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGFuZCB0aGV5IGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8KKyAqIGluaXRpYWxpemUgdGhlIGxhdHRlci4gQ29ubmVjdG9yLWxpa2UgbWV0aG9kcyAoZS5nLiBAZ2V0X21vZGVzIGFuZAorICogQHNldF9wcm9wZXJ0eSkgd2lsbCB0eXBpY2FsbHkgYmUgd3JhcHBlZCBhcm91bmQgYW5kIG9ubHkgYmUgY2FsbGVkCisgKiBpZiB0aGUgZW5jb2RlciBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZSBmb3IgdGhlIGNvbm5lY3Rvci4KKyAqLworc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlX2Z1bmNzIHsKKwl2b2lkICgqc2V0X2NvbmZpZykoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgdm9pZCAqcGFyYW1zKTsKKworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCXZvaWQgKCpkcG1zKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKTsKKwl2b2lkICgqc2F2ZSkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKKwl2b2lkICgqcmVzdG9yZSkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKKwlib29sICgqbW9kZV9maXh1cCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CisJaW50ICgqbW9kZV92YWxpZCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CisJdm9pZCAoKm1vZGVfc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOworCisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJaW50ICgqZ2V0X21vZGVzKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJaW50ICgqY3JlYXRlX3Jlc291cmNlcykoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwlpbnQgKCpzZXRfcHJvcGVydHkpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJICAgIHVpbnQ2NF90IHZhbCk7CisKK307CisKKy8qKgorICogc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlIC0gU2xhdmUgZW5jb2RlciBzdHJ1Y3QKKyAqIEBiYXNlOiBEUk0gZW5jb2RlciBvYmplY3QuCisgKiBAc2xhdmVfZnVuY3M6IFNsYXZlIGVuY29kZXIgY2FsbGJhY2tzLgorICogQHNsYXZlX3ByaXY6IFNsYXZlIGVuY29kZXIgcHJpdmF0ZSBkYXRhLgorICogQGJ1c19wcml2OiBCdXMgc3BlY2lmaWMgZGF0YS4KKyAqCisgKiBBICZkcm1fZW5jb2Rlcl9zbGF2ZSBoYXMgdHdvIHNldHMgb2YgY2FsbGJhY2tzLCBAc2xhdmVfZnVuY3MgYW5kIHRoZQorICogb25lcyBpbiBAYmFzZS4gVGhlIGZvcm1lciBhcmUgbmV2ZXIgYWN0dWFsbHkgY2FsbGVkIGJ5IHRoZSBjb21tb24KKyAqIENSVEMgY29kZSwgaXQncyBqdXN0IGEgY29udmVuaWVuY2UgZm9yIHNwbGl0dGluZyB0aGUgZW5jb2RlcgorICogZnVuY3Rpb25zIGluIGFuIHVwcGVyLCBHUFUtc3BlY2lmaWMgbGF5ZXIgYW5kIGEgKGhvcGVmdWxseSkKKyAqIEdQVS1hZ25vc3RpYyBsb3dlciBsYXllcjogSXQncyB0aGUgR1BVIGRyaXZlciByZXNwb25zaWJpbGl0eSB0bworICogY2FsbCB0aGUgc2xhdmUgbWV0aG9kcyB3aGVuIGFwcHJvcHJpYXRlLgorICoKKyAqIGRybV9pMmNfZW5jb2Rlcl9pbml0KCkgcHJvdmlkZXMgYSB3YXkgdG8gZ2V0IGFuIGltcGxlbWVudGF0aW9uIG9mCisgKiB0aGlzLgorICovCitzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmUgeworCXN0cnVjdCBkcm1fZW5jb2RlciBiYXNlOworCisJc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlX2Z1bmNzICpzbGF2ZV9mdW5jczsKKwl2b2lkICpzbGF2ZV9wcml2OworCXZvaWQgKmJ1c19wcml2OworfTsKKyNkZWZpbmUgdG9fZW5jb2Rlcl9zbGF2ZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmUsIGJhc2UpCisKK2ludCBkcm1faTJjX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZSAqZW5jb2RlciwKKwkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkgY29uc3Qgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKKworCisvKioKKyAqIHN0cnVjdCBkcm1faTJjX2VuY29kZXJfZHJpdmVyCisgKgorICogRGVzY3JpYmVzIGEgZGV2aWNlIGRyaXZlciBmb3IgYW4gZW5jb2RlciBjb25uZWN0ZWQgdG8gdGhlIEdQVQorICogdGhyb3VnaCBhbiBJMkMgYnVzLiBJbiBhZGRpdGlvbiB0byB0aGUgZW50cnkgcG9pbnRzIGluIEBpMmNfZHJpdmVyCisgKiBhbiBAZW5jb2Rlcl9pbml0IGZ1bmN0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gSXQgd2lsbCBiZSBjYWxsZWQgdG8KKyAqIGdpdmUgdGhlIGRyaXZlciBhbiBvcHBvcnR1bml0eSB0byBhbGxvY2F0ZSBhbnkgcGVyLWVuY29kZXIgZGF0YQorICogc3RydWN0dXJlcyBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgQHNsYXZlX2Z1bmNzIGFuZCAob3B0aW9uYWxseSkKKyAqIEBzbGF2ZV9wcml2IG1lbWJlcnMgb2YgQGVuY29kZXIuCisgKi8KK3N0cnVjdCBkcm1faTJjX2VuY29kZXJfZHJpdmVyIHsKKwlzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyOworCisJaW50ICgqZW5jb2Rlcl9pbml0KShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlICplbmNvZGVyKTsKKworfTsKKyNkZWZpbmUgdG9fZHJtX2kyY19lbmNvZGVyX2RyaXZlcih4KSBjb250YWluZXJfb2YoKHgpLAkJCVwKKwkJCQkJCSAgc3RydWN0IGRybV9pMmNfZW5jb2Rlcl9kcml2ZXIsIFwKKwkJCQkJCSAgaTJjX2RyaXZlcikKKworLyoqCisgKiBkcm1faTJjX2VuY29kZXJfZ2V0X2NsaWVudCAtIEdldCB0aGUgSTJDIGNsaWVudCBjb3JyZXNwb25kaW5nIHRvIGFuIGVuY29kZXIKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaTJjX2NsaWVudCAqZHJtX2kyY19lbmNvZGVyX2dldF9jbGllbnQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXJldHVybiAoc3RydWN0IGkyY19jbGllbnQgKil0b19lbmNvZGVyX3NsYXZlKGVuY29kZXIpLT5idXNfcHJpdjsKK30KKworLyoqCisgKiBkcm1faTJjX2VuY29kZXJfcmVnaXN0ZXIgLSBSZWdpc3RlciBhbiBJMkMgZW5jb2RlciBkcml2ZXIKKyAqIEBvd25lcjoJTW9kdWxlIGNvbnRhaW5pbmcgdGhlIGRyaXZlci4KKyAqIEBkcml2ZXI6CURyaXZlciB0byBiZSByZWdpc3RlcmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBkcm1faTJjX2VuY29kZXJfcmVnaXN0ZXIoc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJCSAgIHN0cnVjdCBkcm1faTJjX2VuY29kZXJfZHJpdmVyICpkcml2ZXIpCit7CisJcmV0dXJuIGkyY19yZWdpc3Rlcl9kcml2ZXIob3duZXIsICZkcml2ZXItPmkyY19kcml2ZXIpOworfQorCisvKioKKyAqIGRybV9pMmNfZW5jb2Rlcl91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciBhbiBJMkMgZW5jb2RlciBkcml2ZXIKKyAqIEBkcml2ZXI6CURyaXZlciB0byBiZSB1bnJlZ2lzdGVyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm1faTJjX2VuY29kZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2kyY19lbmNvZGVyX2RyaXZlciAqZHJpdmVyKQoreworCWkyY19kZWxfZHJpdmVyKCZkcml2ZXItPmkyY19kcml2ZXIpOworfQorCit2b2lkIGRybV9pMmNfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZmZmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNyBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqCisgKiBEUk0gZnJhbWVidWZmZXIgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKKyAqIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKKyAqIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworICogRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKKyAqIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgICAgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+CisgKiAgICAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqLworI2lmbmRlZiBEUk1fRkJfSEVMUEVSX0gKKyNkZWZpbmUgRFJNX0ZCX0hFTFBFUl9ICisKK3N0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgeworCXVpbnQzMl90IGNydGNfaWQ7CisJc3RydWN0IGRybV9tb2RlX3NldCBtb2RlX3NldDsKK307CisKK3N0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHsKKwl2b2lkICgqZ2FtbWFfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKKwkJCSAgdTE2IGJsdWUsIGludCByZWdubyk7Cit9OworCitzdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgY3J0Y19jb3VudDsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICpjcnRjX2luZm87CisJc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgKmZ1bmNzOworCWludCBjb25uX2xpbWl0OworCXN0cnVjdCBsaXN0X2hlYWQga2VybmVsX2ZiX2xpc3Q7Cit9OworCitpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmZiX2NyZWF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHVpbnQzMl90IGZiX3dpZHRoLAorCQkJCQkJICAgdWludDMyX3QgZmJfaGVpZ2h0LAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV93aWR0aCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3B0cikpOworaW50IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsIGludCBjcnRjX2NvdW50LAorCQkJCSAgaW50IG1heF9jb25uKTsKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9mcmVlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIpOworaW50IGRybV9mYl9oZWxwZXJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitpbnQgZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2ludCBkcm1fZmJfaGVscGVyX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pOworaW50IGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2ludCBkcm1fZmJfaGVscGVyX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywKKwkJCSAgICB1bnNpZ25lZCByZWQsCisJCQkgICAgdW5zaWduZWQgZ3JlZW4sCisJCQkgICAgdW5zaWduZWQgYmx1ZSwKKwkJCSAgICB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOworCit2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZSh2b2lkKTsKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7Cit2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbWVtb3J5LmggYi9pbmNsdWRlL2RybS9kcm1fbWVtb3J5LmgKaW5kZXggNjNlNDI1Yi4uMTVhZjliMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21lbW9yeS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tZW1vcnkuaApAQCAtNDQsOCArNDQsNiBAQAogCiAjaWYgX19PU19IQVNfQUdQCiAKLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KICNpZmRlZiBIQVZFX1BBR0VfQUdQCiAjaW5jbHVkZSA8YXNtL2FncC5oPgogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tbS5oIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKaW5kZXggZjgzMzIwNy4uNjIzMjlmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21tLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKQEAgLTM3LDYgKzM3LDkgQEAKICAqIEdlbmVyaWMgcmFuZ2UgbWFuYWdlciBzdHJ1Y3RzCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNlbmRpZgogCiBzdHJ1Y3QgZHJtX21tX25vZGUgewogCXN0cnVjdCBsaXN0X2hlYWQgZmxfZW50cnk7CkBAIC05Niw0ICs5OSw4IEBACiAJcmV0dXJuIGJsb2NrLT5tbTsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworaW50IGRybV9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9tbSAqbW0pOworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggYWUzMDRjYy4uMWY5MDg0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC02OCwxMCArNjgsMTEgQEAKICNkZWZpbmUgRFJNX01PREVfRFBNU19PRkYJMwogCiAvKiBTY2FsaW5nIG1vZGUgb3B0aW9ucyAqLwotI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9OT05fR1BVCQkwCi0jZGVmaW5lIERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4JMQotI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRQkJMgotI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1QJCTMKKyNkZWZpbmUgRFJNX01PREVfU0NBTEVfTk9ORQkJMCAvKiBVbm1vZGlmaWVkIHRpbWluZyAoZGlzcGxheSBvcgorCQkJCQkgICAgIHNvZnR3YXJlIGNhbiBzdGlsbCBzY2FsZSkgKi8KKyNkZWZpbmUgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTgkxIC8qIEZ1bGwgc2NyZWVuLCBpZ25vcmUgYXNwZWN0ICovCisjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0NFTlRFUgkJMiAvKiBDZW50ZXJlZCwgbm8gc2NhbGluZyAqLworI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1QJCTMgLyogRnVsbCBzY3JlZW4sIHByZXNlcnZlIGFzcGVjdCAqLwogCiAvKiBEaXRoZXJpbmcgbW9kZSBvcHRpb25zICovCiAjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19PRkYJMApAQCAtMTQxLDYgKzE0Miw3IEBACiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUJNQogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPCTYKICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvbmVudAk4CisjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TQ0FSVAk5CiAKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24JMAogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBCQkxCkBAIC0xNTUsNiArMTU3LDcgQEAKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0CTEwCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQQkxMQogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIJMTIKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1RWCQkxMwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvciB7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9zeXNmcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4ZTAzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2RybV9zeXNmcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0RSTV9TWVNGU19IXworI2RlZmluZSBfRFJNX1NZU0ZTX0hfCisKKy8qKgorICogVGhpcyBtaW5pbWFsaXN0aWMgaW5jbHVkZSBmaWxlIGlzIGludGVuZGVkIGZvciB1c2VycyAocmVhZCBUVE0pIHRoYXQKKyAqIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgZnVsbCBkcm1QLmggZmlsZS4KKyAqLworCitleHRlcm4gaW50IGRybV9jbGFzc19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9jbGFzc19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCAyYmE2MWUxLi4zYjk5MzJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC04MDIsMTEgKzgwMiwxMiBAQAogCXVpbnQzMl90CWZsYWdzOwogfTsKIAotI2RlZmluZSBSQURFT05fVElMSU5HX01BQ1JPIDB4MQotI2RlZmluZSBSQURFT05fVElMSU5HX01JQ1JPIDB4MgotI2RlZmluZSBSQURFT05fVElMSU5HX1NXQVAgIDB4NAotI2RlZmluZSBSQURFT05fVElMSU5HX1NVUkZBQ0UgIDB4OCAvKiB0aGlzIG9iamVjdCByZXF1aXJlcyBhIHN1cmZhY2UKLQkJCQkgICAgKiB3aGVuIG1hcHBlZCAtIGkuZS4gZnJvbnQgYnVmZmVyICovCisjZGVmaW5lIFJBREVPTl9USUxJTkdfTUFDUk8gICAgICAgMHgxCisjZGVmaW5lIFJBREVPTl9USUxJTkdfTUlDUk8gICAgICAgMHgyCisjZGVmaW5lIFJBREVPTl9USUxJTkdfU1dBUF8xNkJJVCAgMHg0CisjZGVmaW5lIFJBREVPTl9USUxJTkdfU1dBUF8zMkJJVCAgMHg4CisjZGVmaW5lIFJBREVPTl9USUxJTkdfU1VSRkFDRSAgICAgMHgxMCAvKiB0aGlzIG9iamVjdCByZXF1aXJlcyBhIHN1cmZhY2UKKwkJCQkJKiB3aGVuIG1hcHBlZCAtIGkuZS4gZnJvbnQgYnVmZmVyICovCiAKIHN0cnVjdCBkcm1fcmFkZW9uX2dlbV9zZXRfdGlsaW5nIHsKIAl1aW50MzJfdAloYW5kbGU7CkBAIC04OTksNiArOTAwLDcgQEAKICNkZWZpbmUgUkFERU9OX0lORk9fREVWSUNFX0lECQkweDAwCiAjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9HQl9QSVBFUwkweDAxCiAjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9aX1BJUEVTIAkweDAyCisjZGVmaW5lIFJBREVPTl9JTkZPX0FDQ0VMX1dPUktJTkcJMHgwMwogCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKIAl1aW50MzJfdAkJcmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCmluZGV4IGNkMjJhYjQuLjQ5MTE0NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaApAQCAtMTU1LDYgKzE1NSw3IEBACiAJICogTWVtYmVycyBjb25zdGFudCBhdCBpbml0LgogCSAqLwogCisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2I7CiAJc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXY7CiAJdW5zaWduZWQgbG9uZyBidWZmZXJfc3RhcnQ7CiAJZW51bSB0dG1fYm9fdHlwZSB0eXBlOwpAQCAtMjQ1LDE0ICsyNDYsMTUgQEAKICAqIHByZW1hcHBlZCByZWdpb24uCiAgKi8KIAorI2RlZmluZSBUVE1fQk9fTUFQX0lPTUVNX01BU0sgMHg4MAogc3RydWN0IHR0bV9ib19rbWFwX29iaiB7CiAJdm9pZCAqdmlydHVhbDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAllbnVtIHsKLQkJdHRtX2JvX21hcF9pb21hcCwKLQkJdHRtX2JvX21hcF92bWFwLAotCQl0dG1fYm9fbWFwX2ttYXAsCi0JCXR0bV9ib19tYXBfcHJlbWFwcGVkLAorCQl0dG1fYm9fbWFwX2lvbWFwICAgICAgICA9IDEgfCBUVE1fQk9fTUFQX0lPTUVNX01BU0ssCisJCXR0bV9ib19tYXBfdm1hcCAgICAgICAgID0gMiwKKwkJdHRtX2JvX21hcF9rbWFwICAgICAgICAgPSAzLAorCQl0dG1fYm9fbWFwX3ByZW1hcHBlZCAgICA9IDQgfCBUVE1fQk9fTUFQX0lPTUVNX01BU0ssCiAJfSBib19rbWFwX3R5cGU7CiB9OwogCkBAIC01MjIsOCArNTI0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqdHRtX2ttYXBfb2JqX3ZpcnR1YWwoc3RydWN0IHR0bV9ib19rbWFwX29iaiAqbWFwLAogCQkJCQkgYm9vbCAqaXNfaW9tZW0pCiB7Ci0JKmlzX2lvbWVtID0gKG1hcC0+Ym9fa21hcF90eXBlID09IHR0bV9ib19tYXBfaW9tYXAgfHwKLQkJICAgICBtYXAtPmJvX2ttYXBfdHlwZSA9PSB0dG1fYm9fbWFwX3ByZW1hcHBlZCk7CisJKmlzX2lvbWVtID0gISEobWFwLT5ib19rbWFwX3R5cGUgJiBUVE1fQk9fTUFQX0lPTUVNX01BU0spOwogCXJldHVybiBtYXAtPnZpcnR1YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCmluZGV4IGE2ODgyOWQuLmU4Y2Q2ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaApAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAidHRtL3R0bV9ib19hcGkuaCIKICNpbmNsdWRlICJ0dG0vdHRtX21lbW9yeS5oIgorI2luY2x1ZGUgInR0bS90dG1fbW9kdWxlLmgiCiAjaW5jbHVkZSAiZHJtX21tLmgiCiAjaW5jbHVkZSAibGludXgvd29ya3F1ZXVlLmgiCiAjaW5jbHVkZSAibGludXgvZnMuaCIKQEAgLTE2MSw3ICsxNjIsNyBAQAogCWxvbmcgbGFzdF9sb21lbV9wYWdlOwogCXVpbnQzMl90IHBhZ2VfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7Ci0Jc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXY7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2I7CiAJc3RydWN0IHR0bV9iYWNrZW5kICpiZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwpAQCAtMzY0LDYgKzM2NSw2NCBAQAogCXZvaWQgKCpmYXVsdF9yZXNlcnZlX25vdGlmeSkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0dG1fYm9fZ2xvYmFsX3JlZiAtIEFyZ3VtZW50IHRvIGluaXRpYWxpemUgYSBzdHJ1Y3QgdHRtX2JvX2dsb2JhbC4KKyAqLworCitzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYgeworCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSByZWY7CisJc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYjsKK307CisKKy8qKgorICogc3RydWN0IHR0bV9ib19nbG9iYWwgLSBCdWZmZXIgb2JqZWN0IGRyaXZlciBnbG9iYWwgZGF0YS4KKyAqCisgKiBAbWVtX2dsb2I6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgb2JqZWN0IGZvciBhY2NvdW50aW5nLgorICogQGR1bW15X3JlYWRfcGFnZTogUG9pbnRlciB0byBhIGR1bW15IHBhZ2UgdXNlZCBmb3IgbWFwcGluZyByZXF1ZXN0cworICogb2YgdW5wb3B1bGF0ZWQgcGFnZXMuCisgKiBAc2hyaW5rOiBBIHNocmluayBjYWxsYmFjayBvYmplY3QgdXNlZCBmb3IgYnVmZmVyIG9iamVjdCBzd2FwLgorICogQHR0bV9ib19leHRyYV9zaXplOiBFeHRyYSBzaXplIChzaXplb2Yoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0KSBleGNsdWRlZCkKKyAqIHVzZWQgYnkgYSBidWZmZXIgb2JqZWN0LiBUaGlzIGlzIGV4Y2x1ZGluZyBwYWdlIGFycmF5cyBhbmQgYmFja2luZyBwYWdlcy4KKyAqIEB0dG1fYm9fc2l6ZTogVGhpcyBpcyBAdHRtX2JvX2V4dHJhX3NpemUgKyBzaXplb2Yoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0KS4KKyAqIEBkZXZpY2VfbGlzdF9tdXRleDogTXV0ZXggcHJvdGVjdGluZyB0aGUgZGV2aWNlIGxpc3QuCisgKiBUaGlzIG11dGV4IGlzIGhlbGQgd2hpbGUgdHJhdmVyc2luZyB0aGUgZGV2aWNlIGxpc3QgZm9yIHBtIG9wdGlvbnMuCisgKiBAbHJ1X2xvY2s6IFNwaW5sb2NrIHByb3RlY3RpbmcgdGhlIGJvIHN1YnN5c3RlbSBscnUgbGlzdHMuCisgKiBAZGV2aWNlX2xpc3Q6IExpc3Qgb2YgYnVmZmVyIG9iamVjdCBkZXZpY2VzLgorICogQHN3YXBfbHJ1OiBMcnUgbGlzdCBvZiBidWZmZXIgb2JqZWN0cyB1c2VkIGZvciBzd2FwcGluZy4KKyAqLworCitzdHJ1Y3QgdHRtX2JvX2dsb2JhbCB7CisKKwkvKioKKwkgKiBDb25zdGFudCBhZnRlciBpbml0LgorCSAqLworCisJc3RydWN0IGtvYmplY3Qga29iajsKKwlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iOworCXN0cnVjdCBwYWdlICpkdW1teV9yZWFkX3BhZ2U7CisJc3RydWN0IHR0bV9tZW1fc2hyaW5rIHNocmluazsKKwlzaXplX3QgdHRtX2JvX2V4dHJhX3NpemU7CisJc2l6ZV90IHR0bV9ib19zaXplOworCXN0cnVjdCBtdXRleCBkZXZpY2VfbGlzdF9tdXRleDsKKwlzcGlubG9ja190IGxydV9sb2NrOworCisJLyoqCisJICogUHJvdGVjdGVkIGJ5IGRldmljZV9saXN0X211dGV4LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3Q7CisKKwkvKioKKwkgKiBQcm90ZWN0ZWQgYnkgdGhlIGxydV9sb2NrLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgc3dhcF9scnU7CisKKwkvKioKKwkgKiBJbnRlcm5hbCBwcm90ZWN0aW9uLgorCSAqLworCWF0b21pY190IGJvX2NvdW50OworfTsKKworCiAjZGVmaW5lIFRUTV9OVU1fTUVNX1RZUEVTIDgKIAogI2RlZmluZSBUVE1fQk9fUFJJVl9GTEFHX01PVklORyAgMAkvKiBCdWZmZXIgb2JqZWN0IGlzIG1vdmluZyBhbmQgbmVlZHMKQEAgLTM3MiwxNiArNDMxLDcgQEAKIC8qKgogICogc3RydWN0IHR0bV9ib19kZXZpY2UgLSBCdWZmZXIgb2JqZWN0IGRyaXZlciBkZXZpY2Utc3BlY2lmaWMgZGF0YS4KICAqCi0gKiBAbWVtX2dsb2I6IFBvaW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgb2JqZWN0IGZvciBhY2NvdW50aW5nLgogICogQGRyaXZlcjogUG9pbnRlciB0byBhIHN0cnVjdCB0dG1fYm9fZHJpdmVyIHN0cnVjdCBzZXR1cCBieSB0aGUgZHJpdmVyLgotICogQGNvdW50OiBDdXJyZW50IG51bWJlciBvZiBidWZmZXIgb2JqZWN0LgotICogQHBhZ2VzOiBDdXJyZW50IG51bWJlciBvZiBwaW5uZWQgcGFnZXMuCi0gKiBAZHVtbXlfcmVhZF9wYWdlOiBQb2ludGVyIHRvIGEgZHVtbXkgcGFnZSB1c2VkIGZvciBtYXBwaW5nIHJlcXVlc3RzCi0gKiBvZiB1bnBvcHVsYXRlZCBwYWdlcy4KLSAqIEBzaHJpbms6IEEgc2hyaW5rIGNhbGxiYWNrIG9iamVjdCB1c2VkIGZvciBidWZmcmUgb2JqZWN0IHN3YXAuCi0gKiBAdHRtX2JvX2V4dHJhX3NpemU6IEV4dHJhIHNpemUgKHNpemVvZihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QpIGV4Y2x1ZGVkKQotICogdXNlZCBieSBhIGJ1ZmZlciBvYmplY3QuIFRoaXMgaXMgZXhjbHVkaW5nIHBhZ2UgYXJyYXlzIGFuZCBiYWNraW5nIHBhZ2VzLgotICogQHR0bV9ib19zaXplOiBUaGlzIGlzIEB0dG1fYm9fZXh0cmFfc2l6ZSArIHNpemVvZihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QpLgogICogQG1hbjogQW4gYXJyYXkgb2YgbWVtX3R5cGVfbWFuYWdlcnMuCiAgKiBAYWRkcl9zcGFjZV9tbTogUmFuZ2UgbWFuYWdlciBmb3IgdGhlIGRldmljZSBhZGRyZXNzIHNwYWNlLgogICogbHJ1X2xvY2s6IFNwaW5sb2NrIHRoYXQgcHJvdGVjdHMgdGhlIGJ1ZmZlcitkZXZpY2UgbHJ1IGxpc3RzIGFuZApAQCAtMzk5LDMyICs0NDksMjEgQEAKIAkvKgogCSAqIENvbnN0YW50IGFmdGVyIGJvIGRldmljZSBpbml0IC8gYXRvbWljLgogCSAqLwotCi0Jc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZV9saXN0OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iOwogCXN0cnVjdCB0dG1fYm9fZHJpdmVyICpkcml2ZXI7Ci0Jc3RydWN0IHBhZ2UgKmR1bW15X3JlYWRfcGFnZTsKLQlzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgc2hyaW5rOwotCi0Jc2l6ZV90IHR0bV9ib19leHRyYV9zaXplOwotCXNpemVfdCB0dG1fYm9fc2l6ZTsKLQogCXJ3bG9ja190IHZtX2xvY2s7CisJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyIG1hbltUVE1fTlVNX01FTV9UWVBFU107CiAJLyoKIAkgKiBQcm90ZWN0ZWQgYnkgdGhlIHZtIGxvY2suCiAJICovCi0Jc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyIG1hbltUVE1fTlVNX01FTV9UWVBFU107CiAJc3RydWN0IHJiX3Jvb3QgYWRkcl9zcGFjZV9yYjsKIAlzdHJ1Y3QgZHJtX21tIGFkZHJfc3BhY2VfbW07CiAKIAkvKgotCSAqIE1pZ2h0IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gb25lIGxvY2sgcGVyIG1hbmFnZXIuCi0JICovCi0Jc3BpbmxvY2tfdCBscnVfbG9jazsKLQkvKgotCSAqIFByb3RlY3RlZCBieSB0aGUgbHJ1IGxvY2suCisJICogUHJvdGVjdGVkIGJ5IHRoZSBnbG9iYWw6bHJ1IGxvY2suCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBkZGVzdHJveTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHN3YXBfbHJ1OwogCiAJLyoKIAkgKiBQcm90ZWN0ZWQgYnkgbG9hZCAvIGZpcnN0b3BlbiAvIGxhc3RjbG9zZSAvdW5sb2FkIHN5bmMuCkBAIC02NDAsNiArNjc5LDkgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyAqYnVzX29mZnNldCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyAqYnVzX3NpemUpOwogCitleHRlcm4gdm9pZCB0dG1fYm9fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpOworZXh0ZXJuIGludCB0dG1fYm9fZ2xvYmFsX2luaXQoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpOworCiBleHRlcm4gaW50IHR0bV9ib19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldik7CiAKIC8qKgpAQCAtNjU3LDcgKzY5OSw3IEBACiAgKiAhMDogRmFpbHVyZS4KICAqLwogZXh0ZXJuIGludCB0dG1fYm9fZGV2aWNlX2luaXQoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCi0JCQkgICAgICBzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iLAorCQkJICAgICAgc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsCiAJCQkgICAgICBzdHJ1Y3QgdHRtX2JvX2RyaXZlciAqZHJpdmVyLAogCQkJICAgICAgdWludDY0X3QgZmlsZV9wYWdlX29mZnNldCwgYm9vbCBuZWVkX2RtYTMyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tZW1vcnkuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fbWVtb3J5LmgKaW5kZXggZDhiOGYwNC4uNjk4M2E3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX21lbW9yeS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAKIC8qKgogICogc3RydWN0IHR0bV9tZW1fc2hyaW5rIC0gY2FsbGJhY2sgdG8gc2hyaW5rIFRUTSBtZW1vcnkgdXNhZ2UuCkBAIC02MCwzNCArNjEsMzMgQEAKICAqIEBxdWV1ZTogV2FpdCBxdWV1ZSBmb3IgcHJvY2Vzc2VzIHN1c3BlbmRlZCB3YWl0aW5nIGZvciBtZW1vcnkuCiAgKiBAbG9jazogTG9jayB0byBwcm90ZWN0IHRoZSBAc2hyaW5rIC0gYW5kIHRoZSBtZW1vcnkgYWNjb3VudGluZyBtZW1iZXJzLAogICogdGhhdCBpcywgZXNzZW50aWFsbHkgdGhlIHdob2xlIHN0cnVjdHVyZSB3aXRoIHNvbWUgZXhjZXB0aW9ucy4KLSAqIEBlbWVyX21lbW9yeTogTG93bWVtIG1lbW9yeSBsaW1pdCBhdmFpbGFibGUgZm9yIHJvb3QuCi0gKiBAbWF4X21lbW9yeTogTG93bWVtIG1lbW9yeSBsaW1pdCBhdmFpbGFibGUgZm9yIG5vbi1yb290LgotICogQHN3YXBfbGltaXQ6IExvd21lbSBtZW1vcnkgbGltaXQgd2hlcmUgdGhlIHNocmluayB3b3JrcXVldWUga2lja3MgaW4uCi0gKiBAdXNlZF9tZW1vcnk6IEN1cnJlbnRseSB1c2VkIGxvd21lbSBtZW1vcnkuCi0gKiBAdXNlZF90b3RhbF9tZW1vcnk6IEN1cnJlbnRseSB1c2VkIHRvdGFsIChsb3dtZW0gKyBoaWdobWVtKSBtZW1vcnkuCi0gKiBAdG90YWxfbWVtb3J5X3N3YXBfbGltaXQ6IFRvdGFsIG1lbW9yeSBsaW1pdCB3aGVyZSB0aGUgc2hyaW5rIHdvcmtxdWV1ZQotICoga2lja3MgaW4uCi0gKiBAbWF4X3RvdGFsX21lbW9yeTogVG90YWwgbWVtb3J5IGF2YWlsYWJsZSB0byBub24tcm9vdCBwcm9jZXNzZXMuCi0gKiBAZW1lcl90b3RhbF9tZW1vcnk6IFRvdGFsIG1lbW9yeSBhdmFpbGFibGUgdG8gcm9vdCBwcm9jZXNzZXMuCisgKiBAem9uZXM6IEFycmF5IG9mIHBvaW50ZXJzIHRvIGFjY291bnRpbmcgem9uZXMuCisgKiBAbnVtX3pvbmVzOiBOdW1iZXIgb2YgcG9wdWxhdGVkIGVudHJpZXMgaW4gdGhlIEB6b25lcyBhcnJheS4KKyAqIEB6b25lX2tlcm5lbDogUG9pbnRlciB0byB0aGUga2VybmVsIHpvbmUuCisgKiBAem9uZV9oaWdobWVtOiBQb2ludGVyIHRvIHRoZSBoaWdobWVtIHpvbmUgaWYgdGhlcmUgaXMgb25lLgorICogQHpvbmVfZG1hMzI6IFBvaW50ZXIgdG8gdGhlIGRtYTMyIHpvbmUgaWYgdGhlcmUgaXMgb25lLgogICoKICAqIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcyBub3QgcGVyIGRldmljZS4gSXQgc2hvdWxkIGJlIGdsb2JhbCBmb3IgYWxsCiAgKiBncmFwaGljcyBkZXZpY2VzLgogICovCiAKKyNkZWZpbmUgVFRNX01FTV9NQVhfWk9ORVMgMgorc3RydWN0IHR0bV9tZW1fem9uZTsKIHN0cnVjdCB0dG1fbWVtX2dsb2JhbCB7CisJc3RydWN0IGtvYmplY3Qga29iajsKIAlzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgKnNocmluazsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3dhcF9xdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKIAlzcGlubG9ja190IGxvY2s7Ci0JdWludDY0X3QgZW1lcl9tZW1vcnk7Ci0JdWludDY0X3QgbWF4X21lbW9yeTsKLQl1aW50NjRfdCBzd2FwX2xpbWl0OwotCXVpbnQ2NF90IHVzZWRfbWVtb3J5OwotCXVpbnQ2NF90IHVzZWRfdG90YWxfbWVtb3J5OwotCXVpbnQ2NF90IHRvdGFsX21lbW9yeV9zd2FwX2xpbWl0OwotCXVpbnQ2NF90IG1heF90b3RhbF9tZW1vcnk7Ci0JdWludDY0X3QgZW1lcl90b3RhbF9tZW1vcnk7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZXNbVFRNX01FTV9NQVhfWk9ORVNdOworCXVuc2lnbmVkIGludCBudW1fem9uZXM7CisJc3RydWN0IHR0bV9tZW1fem9uZSAqem9uZV9rZXJuZWw7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlzdHJ1Y3QgdHRtX21lbV96b25lICp6b25lX2hpZ2htZW07CisjZWxzZQorCXN0cnVjdCB0dG1fbWVtX3pvbmUgKnpvbmVfZG1hMzI7CisjZW5kaWYKIH07CiAKIC8qKgpAQCAtMTQ2LDggKzE0NiwxMyBAQAogZXh0ZXJuIGludCB0dG1fbWVtX2dsb2JhbF9pbml0KHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYik7CiBleHRlcm4gdm9pZCB0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYik7CiBleHRlcm4gaW50IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwgdWludDY0X3QgbWVtb3J5LAotCQkJCWJvb2wgbm9fd2FpdCwgYm9vbCBpbnRlcnJ1cHRpYmxlLCBib29sIGhpbWVtKTsKKwkJCQlib29sIG5vX3dhaXQsIGJvb2wgaW50ZXJydXB0aWJsZSk7CiBleHRlcm4gdm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiwKLQkJCQl1aW50NjRfdCBhbW91bnQsIGJvb2wgaGltZW0pOworCQkJCXVpbnQ2NF90IGFtb3VudCk7CitleHRlcm4gaW50IHR0bV9tZW1fZ2xvYmFsX2FsbG9jX3BhZ2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICBib29sIG5vX3dhaXQsIGJvb2wgaW50ZXJydXB0aWJsZSk7CitleHRlcm4gdm9pZCB0dG1fbWVtX2dsb2JhbF9mcmVlX3BhZ2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHNpemVfdCB0dG1fcm91bmRfcG90KHNpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tb2R1bGUuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fbW9kdWxlLmgKaW5kZXggZDFkNDMzOC4uY2Y0MTZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX21vZHVsZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIF9UVE1fTU9EVUxFX0hfCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KK3N0cnVjdCBrb2JqZWN0OwogCiAjZGVmaW5lIFRUTV9QRlggIltUVE1dICIKIApAQCAtNTQsNSArNTUsNiBAQAogZXh0ZXJuIHZvaWQgdHRtX2dsb2JhbF9yZWxlYXNlKHZvaWQpOwogZXh0ZXJuIGludCB0dG1fZ2xvYmFsX2l0ZW1fcmVmKHN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKTsKIGV4dGVybiB2b2lkIHR0bV9nbG9iYWxfaXRlbV91bnJlZihzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZik7CitleHRlcm4gc3RydWN0IGtvYmplY3QgKnR0bV9nZXRfa29iaih2b2lkKTsKIAogI2VuZGlmIC8qIF9UVE1fTU9EVUxFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IDM0MzIxY2YuLmRmY2Q5MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC00MSw4ICs0MSw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0KIAogZW51bSBhY3BpX2lycV9tb2RlbF9pZCB7CiAJQUNQSV9JUlFfTU9ERUxfUElDID0gMCwKQEAgLTIxOSwxMCArMjE3LDggQEAKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19BQ1BJX1ZJREVPKSB8fCBkZWZpbmVkKENPTkZJR19BQ1BJX1ZJREVPX01PRFVMRSkgKi8KIAogZXh0ZXJuIGludCBhY3BpX2JsYWNrbGlzdGVkKHZvaWQpOwotI2lmZGVmIENPTkZJR19ETUkKIGV4dGVybiB2b2lkIGFjcGlfZG1pX29zaV9saW51eChpbnQgZW5hYmxlLCBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCk7CiBleHRlcm4gaW50IGFjcGlfb3NpX3NldHVwKGNoYXIgKnN0cik7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKIGludCBhY3BpX2dldF9weG0oYWNwaV9oYW5kbGUgaGFuZGxlKTsKQEAgLTI5Miw3ICsyODgsMTAgQEAKIGV4dGVybiBhY3BpX3N0YXR1cyBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgYWNwaV9lYXJseV9pbml0KHZvaWQpOwogCi0jZWxzZQkvKiBDT05GSUdfQUNQSSAqLworI2Vsc2UJLyogIUNPTkZJR19BQ1BJICovCisKKyNkZWZpbmUgYWNwaV9kaXNhYmxlZCAxCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2Vhcmx5X2luaXQodm9pZCkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2FjcGlfYm9vdF9pbml0KHZvaWQpCkBAIC0zMzEsNSArMzMwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcjsKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfdGFibGVfcGFyc2UoY2hhciAqaWQsCisJCQkJaW50ICgqaGFuZGxlcikoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopKQoreworCXJldHVybiAtMTsKK30KICNlbmRpZgkvKiAhQ09ORklHX0FDUEkgKi8KICNlbmRpZgkvKl9MSU5VWF9BQ1BJX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9haW8uaCBiL2luY2x1ZGUvbGludXgvYWlvLmgKaW5kZXggNDdmN2Q5My4uYWVhMjE5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Fpby5oCkBAIC0yMjUsOCArMjI1LDYgQEAKIAogI2RlZmluZSBpb193YWl0X3RvX2tpb2NiKHdhaXQpIGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3Qga2lvY2IsIGtpX3dhaXQpCiAKLSNpbmNsdWRlIDxsaW51eC9haW9fYWJpLmg+Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGtpb2NiICpsaXN0X2tpb2NiKHN0cnVjdCBsaXN0X2hlYWQgKmgpCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkoaCwgc3RydWN0IGtpb2NiLCBraV9saXN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW5vbl9pbm9kZXMuaCBiL2luY2x1ZGUvbGludXgvYW5vbl9pbm9kZXMuaAppbmRleCBlMGEwY2RjLi42OWEyMWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fub25faW5vZGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbm9uX2lub2Rlcy5oCkBAIC04LDYgKzgsOSBAQAogI2lmbmRlZiBfTElOVVhfQU5PTl9JTk9ERVNfSAogI2RlZmluZSBfTElOVVhfQU5PTl9JTk9ERVNfSAogCitzdHJ1Y3QgZmlsZSAqYW5vbl9pbm9kZV9nZXRmaWxlKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJCQl2b2lkICpwcml2LCBpbnQgZmxhZ3MpOwogaW50IGFub25faW5vZGVfZ2V0ZmQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKIAkJICAgICB2b2lkICpwcml2LCBpbnQgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IGJjM2FiNzAuLmRkOTdmYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0xMzIsOSArMTMyLDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX0FMTE9DX1JFTUFQICovCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgbnJfa2VybmVsX3BhZ2VzOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBucl9hbGxfcGFnZXM7Ci0KIGV4dGVybiB2b2lkICphbGxvY19sYXJnZV9zeXN0ZW1faGFzaChjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGJ1Y2tldHNpemUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIG51bWVudHJpZXMsCkBAIC0xNDUsNiArMTQyLDggQEAKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpOwogCiAjZGVmaW5lIEhBU0hfRUFSTFkJMHgwMDAwMDAwMQkvKiBBbGxvY2F0aW5nIGR1cmluZyBlYXJseSBib290PyAqLworI2RlZmluZSBIQVNIX1NNQUxMCTB4MDAwMDAwMDIJLyogc3ViLXBhZ2UgYWxsb2NhdGlvbiBhbGxvd2VkLCBtaW4KKwkJCQkJICogc2hpZnQgcGFzc2VkIHZpYSAqX2hhc2hfc2hpZnQgKi8KIAogLyogT25seSBOVU1BIG5lZWRzIGhhc2ggZGlzdHJpYnV0aW9uLiA2NGJpdCBOVU1BIGFyY2hpdGVjdHVyZXMgaGF2ZQogICogc3VmZmljaWVudCB2bWFsbG9jIHNwYWNlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCBjMzAyMTEwLi5jOGYyYTVmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTcsNyArNyw3IEBACiAgKgogICogU2VlIGhlcmUgZm9yIHRoZSBsaWJjYXAgbGlicmFyeSAoIlBPU0lYIGRyYWZ0IiBjb21wbGlhbmNlKToKICAqCi0gKiBmdHA6Ly9saW51eC5rZXJuZWwub3JnL3B1Yi9saW51eC9saWJzL3NlY3VyaXR5L2xpbnV4LXByaXZzL2tlcm5lbC0yLjYvCisgKiBmdHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvbGlicy9zZWN1cml0eS9saW51eC1wcml2cy9rZXJuZWwtMi42LwogICovCiAKICNpZm5kZWYgX0xJTlVYX0NBUEFCSUxJVFlfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbl9wcm9jLmggYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAppbmRleCBiODEyNWIyLi40N2RhYzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApAQCAtNTIsNiArNTIsNyBAQAogCQlQUk9DX0VWRU5UX0VYRUMgPSAweDAwMDAwMDAyLAogCQlQUk9DX0VWRU5UX1VJRCAgPSAweDAwMDAwMDA0LAogCQlQUk9DX0VWRU5UX0dJRCAgPSAweDAwMDAwMDQwLAorCQlQUk9DX0VWRU5UX1NJRCAgPSAweDAwMDAwMDgwLAogCQkvKiAibmV4dCIgc2hvdWxkIGJlIDB4MDAwMDA0MDAgKi8KIAkJLyogImxhc3QiIGlzIHRoZSBsYXN0IHByb2Nlc3MgZXZlbnQ6IGV4aXQgKi8KIAkJUFJPQ19FVkVOVF9FWElUID0gMHg4MDAwMDAwMApAQCAtODksNiArOTAsMTEgQEAKIAkJCX0gZTsKIAkJfSBpZDsKIAorCQlzdHJ1Y3Qgc2lkX3Byb2NfZXZlbnQgeworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CisJCX0gc2lkOworCiAJCXN0cnVjdCBleGl0X3Byb2NfZXZlbnQgewogCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CiAJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CkBAIC0xMDIsNiArMTA4LDcgQEAKIHZvaWQgcHJvY19mb3JrX2Nvbm5lY3RvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogdm9pZCBwcm9jX2V4ZWNfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiB2b2lkIHByb2NfaWRfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHdoaWNoX2lkKTsKK3ZvaWQgcHJvY19zaWRfY29ubmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiB2b2lkIHByb2NfZXhpdF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19mb3JrX2Nvbm5lY3RvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC0xMTQsNiArMTIxLDkgQEAKIAkJCQkgICAgIGludCB3aGljaF9pZCkKIHt9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX3NpZF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQore30KKwogc3RhdGljIGlubGluZSB2b2lkIHByb2NfZXhpdF9jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoge30KICNlbmRpZgkvKiBDT05GSUdfUFJPQ19FVkVOVFMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKaW5kZXggNzk2ZGYxMi4uOWIxZDQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKQEAgLTcxNSw2ICs3MTUsMTggQEAKIH0KIAogLyoqCisgKiBjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdSAtIGF0b21pY2FsbHkgdGVzdCBhbmQgY2xlYXIgYSBjcHUgaW4gYSBjcHVtYXNrCisgKiBAY3B1OiBjcHUgbnVtYmVyICg8IG5yX2NwdV9pZHMpCisgKiBAY3B1bWFzazogdGhlIGNwdW1hc2sgcG9pbnRlcgorICoKKyAqIHRlc3RfYW5kX2NsZWFyX2JpdCB3cmFwcGVyIGZvciBjcHVtYXNrcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCit7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChjcHVtYXNrX2NoZWNrKGNwdSksIGNwdW1hc2tfYml0cyhjcHVtYXNrKSk7Cit9CisKKy8qKgogICogY3B1bWFza19zZXRhbGwgLSBzZXQgYWxsIGNwdXMgKDwgbnJfY3B1X2lkcykgaW4gYSBjcHVtYXNrCiAgKiBAZHN0cDogdGhlIGNwdW1hc2sgcG9pbnRlcgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmggYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKaW5kZXggMWZiZGVhNC4uYTUwNDllYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaApAQCAtNDk5LDYgKzQ5OSw3IEBACiAJCXZvaWQgX19pb21lbSAqcDkwNTA7CiAJCXN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqcDkwNjA7CiAJfSBjdGxfYWRkcjsKKwlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwkvKiBjeXogc3BlY2lmaWMgKi8KIAlpbnQgaXJxOwogCXVuc2lnbmVkIGludCBudW1fY2hpcHM7CS8qIDAgaWYgY2FyZCBhYnNlbnQsIC0xIGlmIFovUENJLCBlbHNlIFkgKi8KIAl1bnNpZ25lZCBpbnQgZmlyc3RfbGluZTsJLyogbWlub3IgbnVtYmVyIG9mIGZpcnN0IGNoYW5uZWwgb24gY2FyZCAqLwpAQCAtNTQxLDYgKzU0MiwxNSBAQAogCWludCAgICAgICAgICAgICAgICAgICAgIG1hZ2ljOwogCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZAkqY2FyZDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwkJfSBjeXk7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtCSpjaF9jdHJsOworCQkJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0JKmJ1Zl9jdHJsOworCQl9IGN5ejsKKwl9IHU7CiAJaW50CQkJbGluZTsKIAlpbnQJCQlmbGFnczsgCQkvKiBkZWZpbmVkIGluIHR0eS5oICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgdHlwZTsJCS8qIFVBUlQgdHlwZSAqLwpAQCAtNTY4LDcgKzU3OCw2IEBACiAJc3RydWN0IGN5Y2xhZGVzX2lkbGVfc3RhdHMJaWRsZV9zdGF0czsKIAlzdHJ1Y3QgY3ljbGFkZXNfaWNvdW50CWljb3VudDsKIAlzdHJ1Y3QgY29tcGxldGlvbiAgICAgICBzaHV0ZG93bl93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIGRlbHRhX21zcl93YWl0OwogCWludCB0aHJvdHRsZTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDg0N2I3NjMuLmFjYTMxYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTkzLDcgKzE5Myw3IEBACiAJc3RydWN0IGtvYmplY3QJCQkqZGV2X2tvYmo7CiAKIAlpbnQgKCpkZXZfdWV2ZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7Ci0JY2hhciAqKCpub2RlbmFtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwljaGFyICooKmRldm5vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKTsKIAogCXZvaWQgKCpjbGFzc19yZWxlYXNlKShzdHJ1Y3QgY2xhc3MgKmNsYXNzKTsKIAl2b2lkICgqZGV2X3JlbGVhc2UpKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0yOTgsNyArMjk4LDcgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHM7CiAJaW50ICgqdWV2ZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7Ci0JY2hhciAqKCpub2RlbmFtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwljaGFyICooKmRldm5vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKTsKIAl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAogCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKQEAgLTQ4Nyw3ICs0ODcsOCBAQAogZXh0ZXJuIGludCBkZXZpY2VfcmVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqbmV3X25hbWUpOwogZXh0ZXJuIGludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQsCiAJCSAgICAgICBlbnVtIGRwbV9vcmRlciBkcG1fb3JkZXIpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmRldmljZV9nZXRfbm9kZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICoqdG1wKTsKK2V4dGVybiBjb25zdCBjaGFyICpkZXZpY2VfZ2V0X2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIG1vZGVfdCAqbW9kZSwgY29uc3QgY2hhciAqKnRtcCk7CiBleHRlcm4gdm9pZCAqZGV2X2dldF9kcnZkYXRhKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkZXZfc2V0X2RydmRhdGEoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaCBiL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKaW5kZXggNTFjOGQyZC4uYjZjYjU0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCkBAIC0xNzMsNyArMTczLDggQEAKIHR5cGVkZWYgZW51bSBmZV90cmFuc21pdF9tb2RlIHsKIAlUUkFOU01JU1NJT05fTU9ERV8ySywKIAlUUkFOU01JU1NJT05fTU9ERV84SywKLQlUUkFOU01JU1NJT05fTU9ERV9BVVRPCisJVFJBTlNNSVNTSU9OX01PREVfQVVUTywKKwlUUkFOU01JU1NJT05fTU9ERV80SwogfSBmZV90cmFuc21pdF9tb2RlX3Q7CiAKIHR5cGVkZWYgZW51bSBmZV9iYW5kd2lkdGggewpAQCAtMjY4LDE1ICsyNjksNDIgQEAKICNkZWZpbmUgRFRWX0ZFX0NBUEFCSUxJVFkJMTYKICNkZWZpbmUgRFRWX0RFTElWRVJZX1NZU1RFTQkxNwogCi0jZGVmaW5lIERUVl9BUElfVkVSU0lPTgkJCQkzNQotI2RlZmluZSBEVFZfQVBJX1ZFUlNJT04JCQkJMzUKLSNkZWZpbmUgRFRWX0NPREVfUkFURV9IUAkJCTM2Ci0jZGVmaW5lIERUVl9DT0RFX1JBVEVfTFAJCQkzNwotI2RlZmluZSBEVFZfR1VBUkRfSU5URVJWQUwJCQkzOAotI2RlZmluZSBEVFZfVFJBTlNNSVNTSU9OX01PREUJCQkzOQotI2RlZmluZSBEVFZfSElFUkFSQ0hZCQkJCTQwCisvKiBJU0RCLVQgYW5kIElTREItVHNiICovCisjZGVmaW5lIERUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTgkxOAorI2RlZmluZSBEVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HCTE5CiAKLSNkZWZpbmUgRFRWX01BWF9DT01NQU5ECQkJCURUVl9ISUVSQVJDSFkKKyNkZWZpbmUgRFRWX0lTREJUX1NCX1NVQkNIQU5ORUxfSUQJMjAKKyNkZWZpbmUgRFRWX0lTREJUX1NCX1NFR01FTlRfSURYCTIxCisjZGVmaW5lIERUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UCTIyCisKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQV9GRUMJCQkyMworI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJBX01PRFVMQVRJT04JCTI0CisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfU0VHTUVOVF9DT1VOVAkJMjUKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQV9USU1FX0lOVEVSTEVBVklORwkyNgorCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkJfRkVDCQkJMjcKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQl9NT0RVTEFUSU9OCQkyOAorI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJCX1NFR01FTlRfQ09VTlQJCTI5CisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkJfVElNRV9JTlRFUkxFQVZJTkcJMzAKKworI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJDX0ZFQwkJCTMxCisjZGVmaW5lIERUVl9JU0RCVF9MQVlFUkNfTU9EVUxBVElPTgkJMzIKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQ19TRUdNRU5UX0NPVU5UCQkzMworI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJDX1RJTUVfSU5URVJMRUFWSU5HCTM0CisKKyNkZWZpbmUgRFRWX0FQSV9WRVJTSU9OCQkzNQorCisjZGVmaW5lIERUVl9DT0RFX1JBVEVfSFAJMzYKKyNkZWZpbmUgRFRWX0NPREVfUkFURV9MUAkzNworI2RlZmluZSBEVFZfR1VBUkRfSU5URVJWQUwJMzgKKyNkZWZpbmUgRFRWX1RSQU5TTUlTU0lPTl9NT0RFCTM5CisjZGVmaW5lIERUVl9ISUVSQVJDSFkJCTQwCisKKyNkZWZpbmUgRFRWX0lTREJUX0xBWUVSX0VOQUJMRUQJNDEKKworI2RlZmluZSBEVFZfSVNEQlNfVFNfSUQJCTQyCisKKyNkZWZpbmUgRFRWX01BWF9DT01NQU5ECQkJCURUVl9JU0RCU19UU19JRAogCiB0eXBlZGVmIGVudW0gZmVfcGlsb3QgewogCVBJTE9UX09OLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oIGIvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oCmluZGV4IDI1YjgyM2IuLjU0MGIwNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL3ZlcnNpb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmgKQEAgLTI0LDYgKzI0LDYgQEAKICNkZWZpbmUgX0RWQlZFUlNJT05fSF8KIAogI2RlZmluZSBEVkJfQVBJX1ZFUlNJT04gNQotI2RlZmluZSBEVkJfQVBJX1ZFUlNJT05fTUlOT1IgMAorI2RlZmluZSBEVkJfQVBJX1ZFUlNJT05fTUlOT1IgMQogCiAjZW5kaWYgLypfRFZCVkVSU0lPTl9IXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaCBiL2luY2x1ZGUvbGludXgvZXZlbnRmZC5oCmluZGV4IDNiODViYTYuLjk0ZGQxMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXZlbnRmZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXZlbnRmZC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZmRlZiBDT05GSUdfRVZFTlRGRAogCitzdHJ1Y3QgZmlsZSAqZXZlbnRmZF9maWxlX2NyZWF0ZSh1bnNpZ25lZCBpbnQgY291bnQsIGludCBmbGFncyk7CiBzdHJ1Y3QgZXZlbnRmZF9jdHggKmV2ZW50ZmRfY3R4X2dldChzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCk7CiB2b2lkIGV2ZW50ZmRfY3R4X3B1dChzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCk7CiBzdHJ1Y3QgZmlsZSAqZXZlbnRmZF9mZ2V0KGludCBmZCk7CkBAIC00MCw2ICs0MSwxMSBAQAogICogVWdseSB1Z2x5IHVnbHkgZXJyb3IgbGF5ZXIgdG8gc3VwcG9ydCBtb2R1bGVzIHRoYXQgdXNlcyBldmVudGZkIGJ1dAogICogcHJldGVuZCB0byB3b3JrIGluICFDT05GSUdfRVZFTlRGRCBjb25maWd1cmF0aW9ucy4gTmFtZWx5LCBBSU8uCiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKmV2ZW50ZmRfZmlsZV9jcmVhdGUodW5zaWduZWQgaW50IGNvdW50LCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50ZmRfY3R4ICpldmVudGZkX2N0eF9mZGdldChpbnQgZmQpCiB7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKaW5kZXggMTkyZDFlNDMuLjdlMWQ0ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKQEAgLTEzNCwyMCArMTM0LDYgQEAKIAl1MzIgdG9wb2xvZ3lfbWFwWyhDU1JfVE9QT0xPR1lfTUFQX0VORCAtIENTUl9UT1BPTE9HWV9NQVApIC8gNF07CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmd19jYXJkICpmd19jYXJkX2dldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKLXsKLQlrcmVmX2dldCgmY2FyZC0+a3JlZik7Ci0KLQlyZXR1cm4gY2FyZDsKLX0KLQotdm9pZCBmd19jYXJkX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZndfY2FyZF9wdXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCi17Ci0Ja3JlZl9wdXQoJmNhcmQtPmtyZWYsIGZ3X2NhcmRfcmVsZWFzZSk7Ci19Ci0KIHN0cnVjdCBmd19hdHRyaWJ1dGVfZ3JvdXAgewogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdyb3Vwc1syXTsKIAlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGdyb3VwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmggYi9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaAppbmRleCA0NWZmMTg0Li4xZDc0N2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaApAQCAtMzEsMTAgKzMxLDMyIEBACiAJfTsKIH07CiAKLSNkZWZpbmUgRkxFWF9BUlJBWV9JTklUKHNpemUsIHRvdGFsKSB7IHsge1wKLQkuZWxlbWVudF9zaXplID0gKHNpemUpLAkJXAotCS50b3RhbF9ucl9lbGVtZW50cyA9ICh0b3RhbCksCVwKLX0gfSB9CisvKiBOdW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBiYXNlIHN0cnVjdCBmbGV4X2FycmF5LCBleGNsdWRpbmcgbWV0YWRhdGEgKi8KKyNkZWZpbmUgRkxFWF9BUlJBWV9CQVNFX0JZVEVTX0xFRlQJCQkJCVwKKwkoRkxFWF9BUlJBWV9CQVNFX1NJWkUgLSBvZmZzZXRvZihzdHJ1Y3QgZmxleF9hcnJheSwgcGFydHMpKQorCisvKiBOdW1iZXIgb2YgcG9pbnRlcnMgaW4gYmFzZSB0byBzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0IHBhZ2VzICovCisjZGVmaW5lIEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTCQkJCQkJXAorCShGTEVYX0FSUkFZX0JBU0VfQllURVNfTEVGVCAvIHNpemVvZihzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0ICopKQorCisvKiBOdW1iZXIgb2YgZWxlbWVudHMgb2Ygc2l6ZSB0aGF0IGZpdCBpbiBzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0ICovCisjZGVmaW5lIEZMRVhfQVJSQVlfRUxFTUVOVFNfUEVSX1BBUlQoc2l6ZSkJCQkJXAorCShGTEVYX0FSUkFZX1BBUlRfU0laRSAvIHNpemUpCisKKy8qCisgKiBEZWZpbmVzIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgZmxleCBhcnJheSBhbmQgZW5zdXJlcyBpdHMgcGFyYW1ldGVycyBhcmUKKyAqIHZhbGlkLgorICovCisjZGVmaW5lIERFRklORV9GTEVYX0FSUkFZKF9fYXJyYXluYW1lLCBfX2VsZW1lbnRfc2l6ZSwgX190b3RhbCkJCVwKKwlzdHJ1Y3QgZmxleF9hcnJheSBfX2FycmF5bmFtZSA9IHsgeyB7CQkJCVwKKwkJLmVsZW1lbnRfc2l6ZSA9IChfX2VsZW1lbnRfc2l6ZSksCQkJXAorCQkudG90YWxfbnJfZWxlbWVudHMgPSAoX190b3RhbCksCQkJCVwKKwl9IH0gfTsJCQkJCQkJCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgX19hcnJheW5hbWUjI19pbnZhbGlkX3BhcmFtZXRlcih2b2lkKQlcCisJewkJCQkJCQkJXAorCQlCVUlMRF9CVUdfT04oKF9fdG90YWwpID4gRkxFWF9BUlJBWV9OUl9CQVNFX1BUUlMgKglcCisJCQlGTEVYX0FSUkFZX0VMRU1FTlRTX1BFUl9QQVJUKF9fZWxlbWVudF9zaXplKSk7CVwKKwl9CiAKIHN0cnVjdCBmbGV4X2FycmF5ICpmbGV4X2FycmF5X2FsbG9jKGludCBlbGVtZW50X3NpemUsIHVuc2lnbmVkIGludCB0b3RhbCwKIAkJZ2ZwX3QgZmxhZ3MpOwpAQCAtNDQsNiArNjYsOCBAQAogdm9pZCBmbGV4X2FycmF5X2ZyZWVfcGFydHMoc3RydWN0IGZsZXhfYXJyYXkgKmZhKTsKIGludCBmbGV4X2FycmF5X3B1dChzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBlbGVtZW50X25yLCB2b2lkICpzcmMsCiAJCWdmcF90IGZsYWdzKTsKK2ludCBmbGV4X2FycmF5X2NsZWFyKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpOwogdm9pZCAqZmxleF9hcnJheV9nZXQoc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgZWxlbWVudF9ucik7CitpbnQgZmxleF9hcnJheV9zaHJpbmsoc3RydWN0IGZsZXhfYXJyYXkgKmZhKTsKIAogI2VuZGlmIC8qIF9GTEVYX0FSUkFZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA5MDE2MmZiLi41MTgwMzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xMDY2LDggKzEwNjYsOCBAQAogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICoJZmxfZmFzeW5jOyAvKiBmb3IgbGVhc2UgYnJlYWsgbm90aWZpY2F0aW9ucyAqLwogCXVuc2lnbmVkIGxvbmcgZmxfYnJlYWtfdGltZTsJLyogZm9yIG5vbmJsb2NraW5nIGxlYXNlIGJyZWFrcyAqLwogCi0Jc3RydWN0IGZpbGVfbG9ja19vcGVyYXRpb25zICpmbF9vcHM7CS8qIENhbGxiYWNrcyBmb3IgZmlsZXN5c3RlbXMgKi8KLQlzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgKmZsX2xtb3BzOwkvKiBDYWxsYmFja3MgZm9yIGxvY2ttYW5hZ2VycyAqLworCWNvbnN0IHN0cnVjdCBmaWxlX2xvY2tfb3BlcmF0aW9ucyAqZmxfb3BzOwkvKiBDYWxsYmFja3MgZm9yIGZpbGVzeXN0ZW1zICovCisJY29uc3Qgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zICpmbF9sbW9wczsJLyogQ2FsbGJhY2tzIGZvciBsb2NrbWFuYWdlcnMgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCBuZnNfbG9ja19pbmZvCW5mc19mbDsKIAkJc3RydWN0IG5mczRfbG9ja19pbmZvCW5mczRfZmw7CkBAIC0xMzE4LDggKzEzMTgsOCBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZwlzX21heGJ5dGVzOwkvKiBNYXggZmlsZSBzaXplICovCiAJc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUJKnNfdHlwZTsKIAljb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucwkqc19vcDsKLQlzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucwkqZHFfb3A7Ci0gCXN0cnVjdCBxdW90YWN0bF9vcHMJKnNfcWNvcDsKKwljb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucwkqZHFfb3A7CisJY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcwkqc19xY29wOwogCWNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyAqc19leHBvcnRfb3A7CiAJdW5zaWduZWQgbG9uZwkJc19mbGFnczsKIAl1bnNpZ25lZCBsb25nCQlzX21hZ2ljOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKaW5kZXggZGMzYjEzMi4uM2MwOTI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCkBAIC00NDYsNyArNDQ2LDYgQEAKICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCiAKICNpZmRlZiBDT05GSUdfVFJBQ0lORwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qIGZsYWdzIGZvciBjdXJyZW50LT50cmFjZSAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCBiZDA5OWJhLi40ZWM1ZTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKIHN0cnVjdCB0cmFjZV9hcnJheTsKIHN0cnVjdCB0cmFjZXI7CkBAIC0xMzAsMTAgKzEzMSwxNSBAQAogCXZvaWQJCQkqZGF0YTsKIAogCWF0b21pY190CQlwcm9maWxlX2NvdW50OwotCWludAkJCSgqcHJvZmlsZV9lbmFibGUpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKLQl2b2lkCQkJKCpwcm9maWxlX2Rpc2FibGUpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKKwlpbnQJCQkoKnByb2ZpbGVfZW5hYmxlKSh2b2lkKTsKKwl2b2lkCQkJKCpwcm9maWxlX2Rpc2FibGUpKHZvaWQpOwogfTsKIAorI2RlZmluZSBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRQkyMDQ4CisKK2V4dGVybiBjaGFyCQkJKnRyYWNlX3Byb2ZpbGVfYnVmOworZXh0ZXJuIGNoYXIJCQkqdHJhY2VfcHJvZmlsZV9idWZfbm1pOworCiAjZGVmaW5lIE1BWF9GSUxURVJfUFJFRAkJMzIKICNkZWZpbmUgTUFYX0ZJTFRFUl9TVFJfVkFMCTI1NgkvKiBTaG91bGQgaGFuZGxlIEtTWU1fU1lNQk9MX0xFTiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggNDQyNjNjYi4uMjk3ZGY0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGlza3MgdGhhdCBjYW4ndCBiZSBwYXJ0aXRpb25lZC4gKi8KIAogCWNoYXIgZGlza19uYW1lW0RJU0tfTkFNRV9MRU5dOwkvKiBuYW1lIG9mIG1ham9yIGRyaXZlciAqLwotCWNoYXIgKigqbm9kZW5hbWUpKHN0cnVjdCBnZW5kaXNrICpnZCk7CisJY2hhciAqKCpkZXZub2RlKShzdHJ1Y3QgZ2VuZGlzayAqZ2QsIG1vZGVfdCAqbW9kZSk7CiAJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gcGFydGl0aW9ucyBpbmRleGVkIGJ5IHBhcnRuby4KIAkgKiBQcm90ZWN0ZWQgd2l0aCBtYXRjaGluZyBiZGV2IGxvY2sgYnV0IHN0YXQgYW5kIG90aGVyCiAJICogbm9uLWNyaXRpY2FsIGFjY2Vzc2VzIHVzZSBSQ1UuICBBbHdheXMgYWNjZXNzIHRocm91Z2gKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXN0cnVjdCBkaXNrX3BhcnRfdGJsICpwYXJ0X3RibDsKIAlzdHJ1Y3QgaGRfc3RydWN0IHBhcnQwOwogCi0Jc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICpmb3BzOworCWNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqZm9wczsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA3Yzc3N2EwLi41NTdiZGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQkJCQkgKCgxIDw8IFpPTkVTX1NISUZUKSAtIDEpOwogCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGJpdCkpCi0JCUJVSUxEX0JVR19PTigoR0ZQX1pPTkVfQkFEID4+IGJpdCkgJiAxKTsKKwkJTUFZQkVfQlVJTERfQlVHX09OKChHRlBfWk9ORV9CQUQgPj4gYml0KSAmIDEpOwogCWVsc2UgewogI2lmZGVmIENPTkZJR19ERUJVR19WTQogCQlCVUdfT04oKEdGUF9aT05FX0JBRCA+PiBiaXQpICYgMSk7CkBAIC0zMjYsNyArMzI2LDYgQEAKIGV4dGVybiB2b2lkIF9fZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKIGV4dGVybiB2b2lkIGZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgZnJlZV9ob3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci1leHRlcm4gdm9pZCBmcmVlX2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKICNkZWZpbmUgX19mcmVlX3BhZ2UocGFnZSkgX19mcmVlX3BhZ2VzKChwYWdlKSwgMCkKICNkZWZpbmUgZnJlZV9wYWdlKGFkZHIpIGZyZWVfcGFnZXMoKGFkZHIpLDApCkBAIC0zMzYsMTggKzMzNSw2IEBACiB2b2lkIGRyYWluX2FsbF9wYWdlcyh2b2lkKTsKIHZvaWQgZHJhaW5fbG9jYWxfcGFnZXModm9pZCAqZHVtbXkpOwogCi1leHRlcm4gYm9vbCBvb21fa2lsbGVyX2Rpc2FibGVkOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgb29tX2tpbGxlcl9kaXNhYmxlKHZvaWQpCi17Ci0Jb29tX2tpbGxlcl9kaXNhYmxlZCA9IHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvb21fa2lsbGVyX2VuYWJsZSh2b2lkKQotewotCW9vbV9raWxsZXJfZGlzYWJsZWQgPSBmYWxzZTsKLX0KLQogZXh0ZXJuIGdmcF90IGdmcF9hbGxvd2VkX21hc2s7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZ2ZwX2FsbG93ZWRfbWFzayhnZnBfdCBtYXNrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2dwaW8uaAppbmRleCBlMTBjNDlhLi4wNTliZDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW8uaApAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAorc3RydWN0IGRldmljZTsKKwogLyoKICAqIFNvbWUgcGxhdGZvcm1zIGRvbid0IHN1cHBvcnQgdGhlIEdQSU8gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLgogICoKQEAgLTg5LDYgKzkxLDE1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCXVuc2lnbmVkIGdwaW8pCit7CisJLyogR1BJTyBjYW4gbmV2ZXIgaGF2ZSBiZWVuIGV4cG9ydGVkICovCisJV0FSTl9PTigxKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb191bmV4cG9ydCh1bnNpZ25lZCBncGlvKQogewogCS8qIEdQSU8gY2FuIG5ldmVyIGhhdmUgYmVlbiBleHBvcnRlZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXllc2VzcC5oIGIvaW5jbHVkZS9saW51eC9oYXllc2VzcC5oCmluZGV4IDk0MGFlYjUuLjkyYjA4Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGF5ZXNlc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hheWVzZXNwLmgKQEAgLTk2LDcgKzk2LDYgQEAKIAlpbnQJCQl4bWl0X2hlYWQ7CiAJaW50CQkJeG1pdF90YWlsOwogCWludAkJCXhtaXRfY250OwotCXdhaXRfcXVldWVfaGVhZF90CWRlbHRhX21zcl93YWl0OwogCXdhaXRfcXVldWVfaGVhZF90CWJyZWFrX3dhaXQ7CiAJc3RydWN0IGFzeW5jX2ljb3VudAlpY291bnQ7CS8qIGtlcm5lbCBjb3VudGVycyBmb3IgdGhlIDQgaW5wdXQgaW50ZXJydXB0cyAqLwogCXN0cnVjdCBoYXllc19lc3BfY29uZmlnIGNvbmZpZzsgLyogcG9ydCBjb25maWd1cmF0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCBhMGViZGFjLi4xMGY2Mjg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTQ5NCw2ICs0OTQsNyBAQAogCiAJLyogaGlkZGV2IGV2ZW50IGhhbmRsZXIgKi8KIAlpbnQgKCpoaWRkZXZfY29ubmVjdCkoc3RydWN0IGhpZF9kZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKKwl2b2lkICgqaGlkZGV2X2Rpc2Nvbm5lY3QpKHN0cnVjdCBoaWRfZGV2aWNlICopOwogCXZvaWQgKCpoaWRkZXZfaGlkX2V2ZW50KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCiAJCQkJICBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKIAl2b2lkICgqaGlkZGV2X3JlcG9ydF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICopOwpAQCAtNjkxLDYgKzY5Miw3IEBACiBpbnQgaGlkX3BhcnNlX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSk7CiBpbnQgaGlkX2NoZWNrX2tleXNfcHJlc3NlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKIGludCBoaWRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrKTsKK3ZvaWQgaGlkX2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiAKIC8qKgogICogaGlkX21hcF91c2FnZSAtIG1hcCB1c2FnZSBpbnB1dCBiaXRzCkBAIC04MDAsNiArODAyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGhpZF9od19zdG9wKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQogeworCWhpZF9kaXNjb25uZWN0KGhkZXYpOwogCWhkZXYtPmxsX2RyaXZlci0+c3RvcChoZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCA1Y2JjNjIwLi4xNzZlN2VlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMjQsNyArMjQsOSBAQAogaW50IGh1Z2V0bGJfb3ZlcmNvbW1pdF9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLCB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwogaW50IGh1Z2V0bGJfdHJlYXRfbW92YWJsZV9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLCB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwogaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7Ci1pbnQgZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3QgcGFnZSAqKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqLCB1bnNpZ25lZCBsb25nICosIGludCAqLCBpbnQsIGludCk7CitpbnQgZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAorCQkJc3RydWN0IHBhZ2UgKiosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKiwKKwkJCXVuc2lnbmVkIGxvbmcgKiwgaW50ICosIGludCwgdW5zaWduZWQgaW50IGZsYWdzKTsKIHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosCiAJCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcGFnZSAqKTsKIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwKQEAgLTExMCw2ICsxMTIsMjEgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovCiAKKyNkZWZpbmUgSFVHRVRMQl9BTk9OX0ZJTEUgImFub25faHVnZXBhZ2UiCisKK2VudW0geworCS8qCisJICogVGhlIGZpbGUgd2lsbCBiZSB1c2VkIGFzIGFuIHNobSBmaWxlIHNvIHNobWZzIGFjY291bnRpbmcgcnVsZXMKKwkgKiBhcHBseQorCSAqLworCUhVR0VUTEJfU0hNRlNfSU5PREUgICAgID0gMSwKKwkvKgorCSAqIFRoZSBmaWxlIGlzIGJlaW5nIGNyZWF0ZWQgb24gdGhlIGludGVybmFsIHZmcyBtb3VudCBhbmQgc2htZnMKKwkgKiBhY2NvdW50aW5nIHJ1bGVzIGRvIG5vdCBhcHBseQorCSAqLworCUhVR0VUTEJfQU5PTkhVR0VfSU5PREUgID0gMiwKK307CisKICNpZmRlZiBDT05GSUdfSFVHRVRMQkZTCiBzdHJ1Y3QgaHVnZXRsYmZzX2NvbmZpZyB7CiAJdWlkX3QgICB1aWQ7CkBAIC0xNDgsNyArMTY1LDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGh1Z2V0bGJfdm1fb3BzOwogc3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgaW50IGFjY3QsCi0JCQkJCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKip1c2VyKTsKKwkJCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKip1c2VyLCBpbnQgY3JlYXRfZmxhZ3MpOwogaW50IGh1Z2V0bGJfZ2V0X3F1b3RhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb25nIGRlbHRhKTsKIHZvaWQgaHVnZXRsYl9wdXRfcXVvdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvbmcgZGVsdGEpOwogCkBAIC0xNzAsNyArMTg3LDcgQEAKIAogI2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKQkJCTAKICNkZWZpbmUgc2V0X2ZpbGVfaHVnZXBhZ2VzKGZpbGUpCQlCVUcoKQotI2RlZmluZSBodWdldGxiX2ZpbGVfc2V0dXAobmFtZSxzaXplLGFjY3QsdXNlcikJRVJSX1BUUigtRU5PU1lTKQorI2RlZmluZSBodWdldGxiX2ZpbGVfc2V0dXAobmFtZSxzaXplLGFjY3QsdXNlcixjcmVhdCkJRVJSX1BUUigtRU5PU1lTKQogCiAjZW5kaWYgLyogIUNPTkZJR19IVUdFVExCRlMgKi8KIApAQCAtMTg1LDcgKzIwMiw4IEBACiAjZGVmaW5lIEhTVEFURV9OQU1FX0xFTiAzMgogLyogRGVmaW5lcyBvbmUgaHVnZXRsYiBwYWdlIHNpemUgKi8KIHN0cnVjdCBoc3RhdGUgewotCWludCBodWdldGxiX25leHRfbmlkOworCWludCBuZXh0X25pZF90b19hbGxvYzsKKwlpbnQgbmV4dF9uaWRfdG9fZnJlZTsKIAl1bnNpZ25lZCBpbnQgb3JkZXI7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCXVuc2lnbmVkIGxvbmcgbWF4X2h1Z2VfcGFnZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCBjOTA4N2RlLi5lODQ0YTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTI4LDE3ICsyOCw2IEBACiAgICBpZGVudGlmeSBhIGxlZ2FjeSBjbGllbnQuIElmIHlvdSBkb24ndCBuZWVkIHRoZW0sIGp1c3QgZG9uJ3Qgc2V0IHRoZW0uICovCiAKIC8qCi0gKiAtLS0tIERyaXZlciB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNkZWZpbmUgSTJDX0RSSVZFUklEX01TUDM0MDAJIDEKLSNkZWZpbmUgSTJDX0RSSVZFUklEX1RVTkVSCSAyCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9UREE3NDMyCTI3CS8qIFN0ZXJlbyBzb3VuZCBwcm9jZXNzb3IJKi8KLSNkZWZpbmUgSTJDX0RSSVZFUklEX1RWQVVESU8gICAgMjkgICAgICAvKiBHZW5lcmljIFRWIHNvdW5kIGRyaXZlciAgICAgICovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTFYCTczCS8qIHNhYTcxMXggdmlkZW8gZW5jb2RlcnMJKi8KLSNkZWZpbmUgSTJDX0RSSVZFUklEX0lORlJBUkVECTc1CS8qIEkyQyBJbmZyYVJlZCBvbiBWaWRlbyBib2FyZHMgKi8KLQotLyoKICAqIC0tLS0gQWRhcHRlciB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggZjQ3ODRjMC4uNTdkNDFiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC05OCw3ICs5OCw2IEBACiAKIC8qKgogICogc3RydWN0IGkyY19kcml2ZXIgLSByZXByZXNlbnQgYW4gSTJDIGRldmljZSBkcml2ZXIKLSAqIEBpZDogVW5pcXVlIGRyaXZlciBJRCAob3B0aW9uYWwpCiAgKiBAY2xhc3M6IFdoYXQga2luZCBvZiBpMmMgZGV2aWNlIHdlIGluc3RhbnRpYXRlIChmb3IgZGV0ZWN0KQogICogQGF0dGFjaF9hZGFwdGVyOiBDYWxsYmFjayBmb3IgYnVzIGFkZGl0aW9uIChmb3IgbGVnYWN5IGRyaXZlcnMpCiAgKiBAZGV0YWNoX2FkYXB0ZXI6IENhbGxiYWNrIGZvciBidXMgcmVtb3ZhbCAoZm9yIGxlZ2FjeSBkcml2ZXJzKQpAQCAtMTM1LDcgKzEzNCw2IEBACiAgKiBub3QgYWxsb3dlZC4KICAqLwogc3RydWN0IGkyY19kcml2ZXIgewotCWludCBpZDsKIAl1bnNpZ25lZCBpbnQgY2xhc3M7CiAKIAkvKiBOb3RpZmllcyB0aGUgZHJpdmVyIHRoYXQgYSBuZXcgYnVzIGhhcyBhcHBlYXJlZCBvciBpcyBhYm91dCB0byBiZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggOWU3ZjJlOC4uMjFhNmY1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0xMDYsMTMgKzEwNiwxMyBAQAogCiBleHRlcm4gc3RydWN0IGNyZWQgaW5pdF9jcmVkOwogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLSMgZGVmaW5lIElOSVRfUEVSRl9DT1VOVEVSUyh0c2spCQkJCQlcCi0JLnBlcmZfY291bnRlcl9tdXRleCA9IAkJCQkJCVwKLQkJIF9fTVVURVhfSU5JVElBTElaRVIodHNrLnBlcmZfY291bnRlcl9tdXRleCksCQlcCi0JLnBlcmZfY291bnRlcl9saXN0ID0gTElTVF9IRUFEX0lOSVQodHNrLnBlcmZfY291bnRlcl9saXN0KSwKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKyMgZGVmaW5lIElOSVRfUEVSRl9FVkVOVFModHNrKQkJCQkJXAorCS5wZXJmX2V2ZW50X211dGV4ID0gCQkJCQkJXAorCQkgX19NVVRFWF9JTklUSUFMSVpFUih0c2sucGVyZl9ldmVudF9tdXRleCksCQlcCisJLnBlcmZfZXZlbnRfbGlzdCA9IExJU1RfSEVBRF9JTklUKHRzay5wZXJmX2V2ZW50X2xpc3QpLAogI2Vsc2UKLSMgZGVmaW5lIElOSVRfUEVSRl9DT1VOVEVSUyh0c2spCisjIGRlZmluZSBJTklUX1BFUkZfRVZFTlRTKHRzaykKICNlbmRpZgogCiAvKgpAQCAtMTc4LDcgKzE3OCw3IEBACiAJfSwJCQkJCQkJCVwKIAkuZGlydGllcyA9IElOSVRfUFJPUF9MT0NBTF9TSU5HTEUoZGlydGllcyksCQkJXAogCUlOSVRfSURTCQkJCQkJCVwKLQlJTklUX1BFUkZfQ09VTlRFUlModHNrKQkJCQkJCVwKKwlJTklUX1BFUkZfRVZFTlRTKHRzaykJCQkJCQlcCiAJSU5JVF9UUkFDRV9JUlFGTEFHUwkJCQkJCVwKIAlJTklUX0xPQ0tERVAJCQkJCQkJXAogCUlOSVRfRlRSQUNFX0dSQVBICQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCmluZGV4IDQ4MmRjOTEuLjRmMGE3MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKQEAgLTM2MCw0ICszNjAsNiBAQAogCiBleHRlcm4gaW50IHFpX3N1Ym1pdF9zeW5jKHN0cnVjdCBxaV9kZXNjICpkZXNjLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIAorZXh0ZXJuIGludCBkbWFyX2lyX3N1cHBvcnQodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaCBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKaW5kZXggNzg2ZTdiOC4uODNhYTgxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCkBAIC0xODQsNSArMTg0LDkgQEAKIGV4dGVybiBpbnQgaW9tZW1fbWFwX3Nhbml0eV9jaGVjayhyZXNvdXJjZV9zaXplX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiBpbnQgaW9tZW1faXNfZXhjbHVzaXZlKHU2NCBhZGRyKTsKIAorZXh0ZXJuIGludAord2Fsa19zeXN0ZW1fcmFtX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQl2b2lkICphcmcsIGludCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKikpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYJLyogX0xJTlVYX0lPUE9SVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvdmEuaCBiL2luY2x1ZGUvbGludXgvaW92YS5oCmluZGV4IDIyOGY2YzkuLjc2YTA3NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW92YS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW92YS5oCkBAIC0yOCw3ICsyOCw2IEBACiAKIC8qIGhvbGRzIGFsbCB0aGUgaW92YSB0cmFuc2xhdGlvbnMgZm9yIGEgZG9tYWluICovCiBzdHJ1Y3QgaW92YV9kb21haW4gewotCXNwaW5sb2NrX3QJaW92YV9hbGxvY19sb2NrOy8qIExvY2sgdG8gcHJvdGVjdCBpb3ZhICBhbGxvY2F0aW9uICovCiAJc3BpbmxvY2tfdAlpb3ZhX3JidHJlZV9sb2NrOyAvKiBMb2NrIHRvIHByb3RlY3QgdXBkYXRlIG9mIHJidHJlZSAqLwogCXN0cnVjdCByYl9yb290CXJicm9vdDsJCS8qIGlvdmEgZG9tYWluIHJidHJlZSByb290ICovCiAJc3RydWN0IHJiX25vZGUJKmNhY2hlZDMyX25vZGU7IC8qIFNhdmUgbGFzdCBhbGxvY2VkIG5vZGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkLmggYi9pbmNsdWRlL2xpbnV4L2piZC5oCmluZGV4IGExMTg3YTAuLjMzMTUzMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQuaApAQCAtNTU2LDcgKzU1Niw3IEBACiAJICogVGhpcyB0cmFuc2FjdGlvbiBpcyBiZWluZyBmb3JjZWQgYW5kIHNvbWUgcHJvY2VzcyBpcwogCSAqIHdhaXRpbmcgZm9yIGl0IHRvIGZpbmlzaC4KIAkgKi8KLQlpbnQgdF9zeW5jaHJvbm91c19jb21taXQ6MTsKKwl1bnNpZ25lZCBpbnQgdF9zeW5jaHJvbm91c19jb21taXQ6MTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggMmI1YjFlMC4uZDNjZDIzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xNDYsNyArMTQ2LDcgQEAKICNkZWZpbmUgbWlnaHRfc2xlZXBfaWYoY29uZCkgZG8geyBpZiAoY29uZCkgbWlnaHRfc2xlZXAoKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBhYnMoeCkgKHsJCQkJXAotCQlpbnQgX194ID0gKHgpOwkJCVwKKwkJbG9uZyBfX3ggPSAoeCk7CQkJXAogCQkoX194IDwgMCkgPyAtX194IDogX194OwkJXAogCX0pCiAKQEAgLTI0NiwxNCArMjQ2LDE2IEBACiBleHRlcm4gYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLAogCQkJCSAgIHVuc2lnbmVkIGludCBpbnRlcnZhbF9tc2VjKTsKIAorZXh0ZXJuIGludCBwcmludGtfZGVsYXlfbXNlYzsKKwogLyoKICAqIFByaW50IGEgb25lLXRpbWUgbWVzc2FnZSAoYW5hbG9nb3VzIHRvIFdBUk5fT05DRSgpIGV0IGFsKToKICAqLwogI2RlZmluZSBwcmludGtfb25jZSh4Li4uKSAoewkJCVwKLQlzdGF0aWMgaW50IF9fcHJpbnRfb25jZSA9IDE7CQlcCisJc3RhdGljIGJvb2wgX19wcmludF9vbmNlID0gdHJ1ZTsJXAogCQkJCQkJXAogCWlmIChfX3ByaW50X29uY2UpIHsJCQlcCi0JCV9fcHJpbnRfb25jZSA9IDA7CQlcCisJCV9fcHJpbnRfb25jZSA9IGZhbHNlOwkJXAogCQlwcmludGsoeCk7CQkJXAogCX0JCQkJCVwKIH0pCkBAIC02NzYsMTMgKzY3OCwxNyBAQAogfTsKIAogLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBjb25kaXRpb24gaXMgdHJ1ZSAqLwotI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKQorI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpQlVJTERfQlVHX09OX1pFUk8oY29uZGl0aW9uKSkKKworLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBjb25kaXRpb24gaXMgY29uc3RhbnQgYW5kIHRydWUgKi8KKyNkZWZpbmUgTUFZQkVfQlVJTERfQlVHX09OKGNvbmQpICgodm9pZClzaXplb2YoY2hhclsxIC0gMiAqICEhKGNvbmQpXSkpCiAKIC8qIEZvcmNlIGEgY29tcGlsYXRpb24gZXJyb3IgaWYgY29uZGl0aW9uIGlzIHRydWUsIGJ1dCBhbHNvIHByb2R1Y2UgYQogICAgcmVzdWx0IChvZiB2YWx1ZSAwIGFuZCB0eXBlIHNpemVfdCksIHNvIHRoZSBleHByZXNzaW9uIGNhbiBiZSB1c2VkCiAgICBlLmcuIGluIGEgc3RydWN0dXJlIGluaXRpYWxpemVyIChvciB3aGVyZS1ldmVyIGVsc2UgY29tbWEgZXhwcmVzc2lvbnMKICAgIGFyZW4ndCBwZXJtaXR0ZWQpLiAqLwotI2RlZmluZSBCVUlMRF9CVUdfT05fWkVSTyhlKSAoc2l6ZW9mKGNoYXJbMSAtIDIgKiAhIShlKV0pIC0gMSkKKyNkZWZpbmUgQlVJTERfQlVHX09OX1pFUk8oZSkgKHNpemVvZihzdHJ1Y3QgeyBpbnQ6LSEhKGUpOyB9KSkKKyNkZWZpbmUgQlVJTERfQlVHX09OX05VTEwoZSkgKCh2b2lkICopc2l6ZW9mKHN0cnVjdCB7IGludDotISEoZSk7IH0pKQogCiAvKiBUcmFwIHBhc3RlcnMgb2YgX19GVU5DVElPTl9fIGF0IGNvbXBpbGUtdGltZSAqLwogI2RlZmluZSBfX0ZVTkNUSU9OX18gKF9fZnVuY19fKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZmlmby5oIGIvaW5jbHVkZS9saW51eC9rZmlmby5oCmluZGV4IDI5ZjYyZTEuLmFkNmJkZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2ZpZm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKQEAgLTM4LDcgKzM4LDcgQEAKIAkJCQkgc3BpbmxvY2tfdCAqbG9jayk7CiBleHRlcm4gdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbyk7CiBleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fcHV0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbik7CiBleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fZ2V0KHN0cnVjdCBrZmlmbyAqZmlmbywKIAkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pOwogCkBAIC03Nyw3ICs3Nyw3IEBACiAgKiBieXRlcyBjb3BpZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmggYi9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCmluZGV4IGRjMmZkNTQuLmU4ODBkNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaApAQCAtMTQ0LDEwICsxNDQsMTUgQEAKIAlpbnQgbmFtZSMjX2VuZFswXTsKIAogI2RlZmluZSBrbWVtY2hlY2tfYW5ub3RhdGVfYml0ZmllbGQocHRyLCBuYW1lKQkJCQlcCi0JZG8gaWYgKHB0cikgewkJCQkJCQlcCi0JCWludCBfbiA9IChsb25nKSAmKChwdHIpLT5uYW1lIyNfZW5kKQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBfbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCQlpZiAoIXB0cikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCQkJCQkJCQlcCisJCV9uID0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19lbmQpCQkJXAogCQkJLSAobG9uZykgJigocHRyKS0+bmFtZSMjX2JlZ2luKTsJCVwKLQkJQlVJTERfQlVHX09OKF9uIDwgMCk7CQkJCQlcCisJCU1BWUJFX0JVSUxEX0JVR19PTihfbiA8IDApOwkJCQlcCiAJCQkJCQkJCQlcCiAJCWttZW1jaGVja19tYXJrX2luaXRpYWxpemVkKCYoKHB0ciktPm5hbWUjI19iZWdpbiksIF9uKTsJXAogCX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tzbS5oIGIvaW5jbHVkZS9saW51eC9rc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg1YzE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9rc20uaApAQCAtMCwwICsxLDc5IEBACisjaWZuZGVmIF9fTElOVVhfS1NNX0gKKyNkZWZpbmUgX19MSU5VWF9LU01fSAorLyoKKyAqIE1lbW9yeSBtZXJnaW5nIHN1cHBvcnQuCisgKgorICogVGhpcyBjb2RlIGVuYWJsZXMgZHluYW1pYyBzaGFyaW5nIG9mIGlkZW50aWNhbCBwYWdlcyBmb3VuZCBpbiBkaWZmZXJlbnQKKyAqIG1lbW9yeSBhcmVhcywgZXZlbiBpZiB0aGV5IGFyZSBub3Qgc2hhcmVkIGJ5IGZvcmsoKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorCisjaWZkZWYgQ09ORklHX0tTTQoraW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpOworaW50IF9fa3NtX2VudGVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK3ZvaWQgX19rc21fZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGtzbV9mb3JrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKK3sKKwlpZiAodGVzdF9iaXQoTU1GX1ZNX01FUkdFQUJMRSwgJm9sZG1tLT5mbGFncykpCisJCXJldHVybiBfX2tzbV9lbnRlcihtbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrc21fZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAodGVzdF9iaXQoTU1GX1ZNX01FUkdFQUJMRSwgJm1tLT5mbGFncykpCisJCV9fa3NtX2V4aXQobW0pOworfQorCisvKgorICogQSBLU00gcGFnZSBpcyBvbmUgb2YgdGhvc2Ugd3JpdGUtcHJvdGVjdGVkICJzaGFyZWQgcGFnZXMiIG9yICJtZXJnZWQgcGFnZXMiCisgKiB3aGljaCBLU00gbWFwcyBpbnRvIG11bHRpcGxlIG1tcywgd2hlcmV2ZXIgaWRlbnRpY2FsIGFub255bW91cyBwYWdlIGNvbnRlbnQKKyAqIGlzIGZvdW5kIGluIFZNX01FUkdFQUJMRSB2bWFzLiAgSXQncyBhIFBhZ2VBbm9uIHBhZ2UsIHdpdGggTlVMTCBhbm9uX3ZtYS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgUGFnZUtzbShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKXBhZ2UtPm1hcHBpbmcgPT0gUEFHRV9NQVBQSU5HX0FOT04pOworfQorCisvKgorICogQnV0IHdlIGhhdmUgdG8gYXZvaWQgdGhlIGNoZWNraW5nIHdoaWNoIHBhZ2VfYWRkX2Fub25fcm1hcCgpIHBlcmZvcm1zLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9hZGRfa3NtX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKGF0b21pY19pbmNfYW5kX3Rlc3QoJnBhZ2UtPl9tYXBjb3VudCkpIHsKKwkJcGFnZS0+bWFwcGluZyA9ICh2b2lkICopIFBBR0VfTUFQUElOR19BTk9OOworCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfQU5PTl9QQUdFUyk7CisJfQorfQorI2Vsc2UgIC8qICFDT05GSUdfS1NNICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGtzbV9mb3JrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGtzbV9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBQYWdlS3NtKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAwOworfQorCisvKiBObyBzdHViIHJlcXVpcmVkIGZvciBwYWdlX2FkZF9rc21fcm1hcChwYWdlKSAqLworI2VuZGlmIC8qICFDT05GSUdfS1NNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDRhZjU2MDMuLmI3YmJiNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgotI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXMzbHYwMmQuaCBiL2luY2x1ZGUvbGludXgvbGlzM2x2MDJkLmgKaW5kZXggYWQ2NTFmNC4uM2NjMmYyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXMzbHYwMmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpczNsdjAyZC5oCkBAIC0zMiw4ICszMiwxNyBAQAogI2RlZmluZSBMSVMzX0lSUTJfREFUQV9SRUFEWQkoNCA8PCAzKQogI2RlZmluZSBMSVMzX0lSUTJfQ0xJQ0sJCSg3IDw8IDMpCiAjZGVmaW5lIExJUzNfSVJRX09QRU5fRFJBSU4JKDEgPDwgNikKLSNkZWZpbmUgTElTM19JUlFfQUNUSVZFX0hJR0gJKDEgPDwgNykKKyNkZWZpbmUgTElTM19JUlFfQUNUSVZFX0xPVwkoMSA8PCA3KQogCXVuc2lnbmVkIGNoYXIgaXJxX2NmZzsKKworI2RlZmluZSBMSVMzX1dBS0VVUF9YX0xPCSgxIDw8IDApCisjZGVmaW5lIExJUzNfV0FLRVVQX1hfSEkJKDEgPDwgMSkKKyNkZWZpbmUgTElTM19XQUtFVVBfWV9MTwkoMSA8PCAyKQorI2RlZmluZSBMSVMzX1dBS0VVUF9ZX0hJCSgxIDw8IDMpCisjZGVmaW5lIExJUzNfV0FLRVVQX1pfTE8JKDEgPDwgNCkKKyNkZWZpbmUgTElTM19XQUtFVVBfWl9ISQkoMSA8PCA1KQorCXVuc2lnbmVkIGNoYXIgd2FrZXVwX2ZsYWdzOworCXVuc2lnbmVkIGNoYXIgd2FrZXVwX3RocmVzaDsKIH07CiAKICNlbmRpZiAvKiBfX0xJUzNMVjAyRF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCmluZGV4IGMzMjViMTguLmEzNGRlYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKQEAgLTMzOCw0OSArMzM4LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fbmxtX2NtcF9hZGRyNChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCi0JCQkJICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCi17Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDE7Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4yID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDI7Ci0JcmV0dXJuIHNpbjEtPnNpbl9hZGRyLnNfYWRkciA9PSBzaW4yLT5zaW5fYWRkci5zX2FkZHI7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLXN0YXRpYyBpbmxpbmUgaW50IF9fbmxtX2NtcF9hZGRyNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCi0JCQkJICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCi17Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwMTsKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4yID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXAyOwotCXJldHVybiBpcHY2X2FkZHJfZXF1YWwoJnNpbjEtPnNpbjZfYWRkciwgJnNpbjItPnNpbjZfYWRkcik7Ci19Ci0jZWxzZQkvKiAhKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fbmxtX2NtcF9hZGRyNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCi0JCQkJICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCi0KLS8qCi0gKiBDb21wYXJlIHR3byBob3N0IGFkZHJlc3NlcwotICoKLSAqIFJldHVybiBUUlVFIGlmIHRoZSBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lOyBvdGhlcndpc2UgRkFMU0UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5sbV9jbXBfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQotewotCWlmIChzYXAxLT5zYV9mYW1pbHkgPT0gc2FwMi0+c2FfZmFtaWx5KSB7Ci0JCXN3aXRjaCAoc2FwMS0+c2FfZmFtaWx5KSB7Ci0JCWNhc2UgQUZfSU5FVDoKLQkJCXJldHVybiBfX25sbV9jbXBfYWRkcjQoc2FwMSwgc2FwMik7Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCQlyZXR1cm4gX19ubG1fY21wX2FkZHI2KHNhcDEsIHNhcDIpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogQ29tcGFyZSB0d28gTkxNIGxvY2tzLgogICogV2hlbiB0aGUgc2Vjb25kIGxvY2sgaXMgb2YgdHlwZSBGX1VOTENLLCB0aGlzIGFjdHMgbGlrZSBhIHdpbGRjYXJkLgpAQCAtMzk1LDcgKzM1Miw3IEBACiAJICAgICAmJihmbDEtPmZsX3R5cGUgID09IGZsMi0+ZmxfdHlwZSB8fCBmbDItPmZsX3R5cGUgPT0gRl9VTkxDSyk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbmxtc3ZjX2xvY2tfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbmxtc3ZjX2xvY2tfb3BlcmF0aW9uczsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tSVNETmlmLmggYi9pbmNsdWRlL2xpbnV4L21JU0ROaWYuaAppbmRleCA1MzZjYTEyLi43OGMzYmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21JU0ROaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L21JU0ROaWYuaApAQCAtMTA0LDcgKzEwNCw3IEBACiAjZGVmaW5lIERMX1VOSVREQVRBX0lORAkJMHgzMTA4CiAjZGVmaW5lIERMX0lORk9STUFUSU9OX0lORAkweDAwMDgKIAotLyogaW50ZXJuIGxheWVyIDIgbWFuYWdtZW50ICovCisvKiBpbnRlcm4gbGF5ZXIgMiBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIE1ETF9BU1NJR05fUkVRCQkweDE4MDQKICNkZWZpbmUgTURMX0FTU0lHTl9JTkQJCTB4MTkwNAogI2RlZmluZSBNRExfUkVNT1ZFX1JFUQkJMHgxQTA0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hZ2ljLmggYi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKaW5kZXggMTkyMzMyNy4uNzYyODVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYWdpYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFnaWMuaApAQCAtMTIsNyArMTIsOSBAQAogI2RlZmluZSBTWVNGU19NQUdJQwkJMHg2MjY1NjU3MgogI2RlZmluZSBTRUNVUklUWUZTX01BR0lDCTB4NzM2MzY2NzMKICNkZWZpbmUgU0VMSU5VWF9NQUdJQwkJMHhmOTdjZmY4YworI2RlZmluZSBSQU1GU19NQUdJQwkJMHg4NTg0NThmNgkvKiBzb21lIHJhbmRvbSBudW1iZXIgKi8KICNkZWZpbmUgVE1QRlNfTUFHSUMJCTB4MDEwMjE5OTQKKyNkZWZpbmUgSFVHRVRMQkZTX01BR0lDIAkweDk1ODQ1OGY2CS8qIHNvbWUgcmFuZG9tIG51bWJlciAqLwogI2RlZmluZSBTUVVBU0hGU19NQUdJQwkJMHg3MzcxNzM2OAogI2RlZmluZSBFRlNfU1VQRVJfTUFHSUMJCTB4NDE0QTUzCiAjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMJMHhFRjUzCkBAIC01Myw0ICs1NSw4IEBACiAjZGVmaW5lIElOT1RJRllGU19TVVBFUl9NQUdJQwkweDJCQUQxREVBCiAKICNkZWZpbmUgU1RBQ0tfRU5EX01BR0lDCQkweDU3QUM2RTlECisKKyNkZWZpbmUgREVWUFRTX1NVUEVSX01BR0lDCTB4MWNkMQorI2RlZmluZSBTT0NLRlNfTUFHSUMJCTB4NTM0RjQzNEIKKwogI2VuZGlmIC8qIF9fTElOVVhfTUFHSUNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcmtlci5oIGIvaW5jbHVkZS9saW51eC9tYXJrZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg1ZTc0Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L21hcmtlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX01BUktFUl9ICi0jZGVmaW5lIF9MSU5VWF9NQVJLRVJfSAotCi0vKgotICogQ29kZSBtYXJrdXAgZm9yIGR5bmFtaWMgYW5kIHN0YXRpYyB0cmFjaW5nLgotICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL21hcmtlci50eHQuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDA2IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgotICoKLSAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCi0gKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3QgbW9kdWxlOwotc3RydWN0IG1hcmtlcjsKLQotLyoqCi0gKiBtYXJrZXJfcHJvYmVfZnVuYyAtIFR5cGUgb2YgYSBtYXJrZXIgcHJvYmUgZnVuY3Rpb24KLSAqIEBwcm9iZV9wcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKLSAqIEBjYWxsX3ByaXZhdGU6IGNhbGwgc2l0ZSBwcml2YXRlIGRhdGEKLSAqIEBmbXQ6IGZvcm1hdCBzdHJpbmcKLSAqIEBhcmdzOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0IHBvaW50ZXIuIFVzZSBhIHBvaW50ZXIgdG8gb3ZlcmNvbWUgQydzCi0gKiAgICAgICAgaW5hYmlsaXR5IHRvIHBhc3MgdGhpcyBhcm91bmQgYXMgYSBwb2ludGVyIGluIGEgcG9ydGFibGUgbWFubmVyIGluCi0gKiAgICAgICAgdGhlIGNhbGxlZSBvdGhlcndpc2UuCi0gKgotICogVHlwZSBvZiBtYXJrZXIgcHJvYmUgZnVuY3Rpb25zLiBUaGV5IHJlY2VpdmUgdGhlIG1kYXRhIGFuZCBuZWVkIHRvIHBhcnNlIHRoZQotICogZm9ybWF0IHN0cmluZyB0byByZWNvdmVyIHRoZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LgotICovCi10eXBlZGVmIHZvaWQgbWFya2VyX3Byb2JlX2Z1bmModm9pZCAqcHJvYmVfcHJpdmF0ZSwgdm9pZCAqY2FsbF9wcml2YXRlLAotCQljb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgKmFyZ3MpOwotCi1zdHJ1Y3QgbWFya2VyX3Byb2JlX2Nsb3N1cmUgewotCW1hcmtlcl9wcm9iZV9mdW5jICpmdW5jOwkvKiBDYWxsYmFjayAqLwotCXZvaWQgKnByb2JlX3ByaXZhdGU7CQkvKiBQcml2YXRlIHByb2JlIGRhdGEgKi8KLX07Ci0KLXN0cnVjdCBtYXJrZXIgewotCWNvbnN0IGNoYXIgKm5hbWU7CS8qIE1hcmtlciBuYW1lICovCi0JY29uc3QgY2hhciAqZm9ybWF0OwkvKiBNYXJrZXIgZm9ybWF0IHN0cmluZywgZGVzY3JpYmluZyB0aGUKLQkJCQkgKiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LgotCQkJCSAqLwotCWNoYXIgc3RhdGU7CQkvKiBNYXJrZXIgc3RhdGUuICovCi0JY2hhciBwdHlwZTsJCS8qIHByb2JlIHR5cGUgOiAwIDogc2luZ2xlLCAxIDogbXVsdGkgKi8KLQkJCQkvKiBQcm9iZSB3cmFwcGVyICovCi0Jdm9pZCAoKmNhbGwpKGNvbnN0IHN0cnVjdCBtYXJrZXIgKm1kYXRhLCB2b2lkICpjYWxsX3ByaXZhdGUsIC4uLik7Ci0Jc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlIHNpbmdsZTsKLQlzdHJ1Y3QgbWFya2VyX3Byb2JlX2Nsb3N1cmUgKm11bHRpOwotCWNvbnN0IGNoYXIgKnRwX25hbWU7CS8qIE9wdGlvbmFsIHRyYWNlcG9pbnQgbmFtZSAqLwotCXZvaWQgKnRwX2NiOwkJLyogT3B0aW9uYWwgdHJhY2Vwb2ludCBjYWxsYmFjayAqLwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Ci0KLSNpZmRlZiBDT05GSUdfTUFSS0VSUwotCi0jZGVmaW5lIF9ERUZJTkVfTUFSS0VSKG5hbWUsIHRwX25hbWVfc3RyLCB0cF9jYiwgZm9ybWF0KQkJXAotCQlzdGF0aWMgY29uc3QgY2hhciBfX21zdHJ0YWJfIyNuYW1lW10JCQlcCi0JCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fbWFya2Vyc19zdHJpbmdzIikpKQkJXAotCQk9ICNuYW1lICJcMCIgZm9ybWF0OwkJCQkJXAotCQlzdGF0aWMgc3RydWN0IG1hcmtlciBfX21hcmtfIyNuYW1lCQkJXAotCQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX21hcmtlcnMiKSwgYWxpZ25lZCg4KSkpID0JXAotCQl7IF9fbXN0cnRhYl8jI25hbWUsICZfX21zdHJ0YWJfIyNuYW1lW3NpemVvZigjbmFtZSldLAlcCi0JCSAgMCwgMCwgbWFya2VyX3Byb2JlX2NiLCB7IF9fbWFya19lbXB0eV9mdW5jdGlvbiwgTlVMTH0sXAotCQkgIE5VTEwsIHRwX25hbWVfc3RyLCB0cF9jYiB9Ci0KLSNkZWZpbmUgREVGSU5FX01BUktFUihuYW1lLCBmb3JtYXQpCQkJCQlcCi0JCV9ERUZJTkVfTUFSS0VSKG5hbWUsIE5VTEwsIE5VTEwsIGZvcm1hdCkKLQotI2RlZmluZSBERUZJTkVfTUFSS0VSX1RQKG5hbWUsIHRwX25hbWUsIHRwX2NiLCBmb3JtYXQpCQkJXAotCQlfREVGSU5FX01BUktFUihuYW1lLCAjdHBfbmFtZSwgdHBfY2IsIGZvcm1hdCkKLQotLyoKLSAqIE5vdGUgOiB0aGUgZW1wdHkgYXNtIHZvbGF0aWxlIHdpdGggcmVhZCBjb25zdHJhaW50IGlzIHVzZWQgaGVyZSBpbnN0ZWFkIG9mIGEKLSAqICJ1c2VkIiBhdHRyaWJ1dGUgdG8gZml4IGEgZ2NjIDQuMS54IGJ1Zy4KLSAqIE1ha2Ugc3VyZSB0aGUgYWxpZ25tZW50IG9mIHRoZSBzdHJ1Y3R1cmUgaW4gdGhlIF9fbWFya2VycyBzZWN0aW9uIHdpbGwKLSAqIG5vdCBhZGQgdW53YW50ZWQgcGFkZGluZyBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY3Rpb24gYW5kIHRoZQotICogc3RydWN0dXJlLiBGb3JjZSBhbGlnbm1lbnQgdG8gdGhlIHNhbWUgYWxpZ25tZW50IGFzIHRoZSBzZWN0aW9uIHN0YXJ0LgotICoKLSAqIFRoZSAiZ2VuZXJpYyIgYXJndW1lbnQgY29udHJvbHMgd2hpY2ggbWFya2VyIGVuYWJsaW5nIG1lY2hhbmlzbSBtdXN0IGJlIHVzZWQuCi0gKiBJZiBnZW5lcmljIGlzIHRydWUsIGEgdmFyaWFibGUgcmVhZCBpcyB1c2VkLgotICogSWYgZ2VuZXJpYyBpcyBmYWxzZSwgaW1tZWRpYXRlIHZhbHVlcyBhcmUgdXNlZC4KLSAqLwotI2RlZmluZSBfX3RyYWNlX21hcmsoZ2VuZXJpYywgbmFtZSwgY2FsbF9wcml2YXRlLCBmb3JtYXQsIGFyZ3MuLi4pCVwKLQlkbyB7CQkJCQkJCQlcCi0JCURFRklORV9NQVJLRVIobmFtZSwgZm9ybWF0KTsJCQkJXAotCQlfX21hcmtfY2hlY2tfZm9ybWF0KGZvcm1hdCwgIyMgYXJncyk7CQkJXAotCQlpZiAodW5saWtlbHkoX19tYXJrXyMjbmFtZS5zdGF0ZSkpIHsJCQlcCi0JCQkoKl9fbWFya18jI25hbWUuY2FsbCkJCQkJXAotCQkJCSgmX19tYXJrXyMjbmFtZSwgY2FsbF9wcml2YXRlLCAjIyBhcmdzKTtcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX190cmFjZV9tYXJrX3RwKG5hbWUsIGNhbGxfcHJpdmF0ZSwgdHBfbmFtZSwgdHBfY2IsIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsJCQkJCQkJCVwKLQkJdm9pZCBfX2NoZWNrX3RwX3R5cGUodm9pZCkJCQkJXAotCQl7CQkJCQkJCVwKLQkJCXJlZ2lzdGVyX3RyYWNlXyMjdHBfbmFtZSh0cF9jYik7CQlcCi0JCX0JCQkJCQkJXAotCQlERUZJTkVfTUFSS0VSX1RQKG5hbWUsIHRwX25hbWUsIHRwX2NiLCBmb3JtYXQpOwkJXAotCQlfX21hcmtfY2hlY2tfZm9ybWF0KGZvcm1hdCwgIyMgYXJncyk7CQkJXAotCQkoKl9fbWFya18jI25hbWUuY2FsbCkoJl9fbWFya18jI25hbWUsIGNhbGxfcHJpdmF0ZSwJXAotCQkJCQkjIyBhcmdzKTsJCQlcCi0JfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgbWFya2VyX3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgbWFya2VyICpiZWdpbiwKLQlzdHJ1Y3QgbWFya2VyICplbmQpOwotCi0jZGVmaW5lIEdFVF9NQVJLRVIobmFtZSkJKF9fbWFya18jI25hbWUpCi0KLSNlbHNlIC8qICFDT05GSUdfTUFSS0VSUyAqLwotI2RlZmluZSBERUZJTkVfTUFSS0VSKG5hbWUsIHRwX25hbWUsIHRwX2NiLCBmb3JtYXQpCi0jZGVmaW5lIF9fdHJhY2VfbWFyayhnZW5lcmljLCBuYW1lLCBjYWxsX3ByaXZhdGUsIGZvcm1hdCwgYXJncy4uLikgXAotCQlfX21hcmtfY2hlY2tfZm9ybWF0KGZvcm1hdCwgIyMgYXJncykKLSNkZWZpbmUgX190cmFjZV9tYXJrX3RwKG5hbWUsIGNhbGxfcHJpdmF0ZSwgdHBfbmFtZSwgdHBfY2IsIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsJCQkJCQkJCVwKLQkJdm9pZCBfX2NoZWNrX3RwX3R5cGUodm9pZCkJCQkJXAotCQl7CQkJCQkJCVwKLQkJCXJlZ2lzdGVyX3RyYWNlXyMjdHBfbmFtZSh0cF9jYik7CQlcCi0JCX0JCQkJCQkJXAotCQlfX21hcmtfY2hlY2tfZm9ybWF0KGZvcm1hdCwgIyMgYXJncyk7CQkJXAotCX0gd2hpbGUgKDApCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya2VyX3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgbWFya2VyICpiZWdpbiwKLQlzdHJ1Y3QgbWFya2VyICplbmQpCi17IH0KLSNkZWZpbmUgR0VUX01BUktFUihuYW1lKQotI2VuZGlmIC8qIENPTkZJR19NQVJLRVJTICovCi0KLS8qKgotICogdHJhY2VfbWFyayAtIE1hcmtlciB1c2luZyBjb2RlIHBhdGNoaW5nCi0gKiBAbmFtZTogbWFya2VyIG5hbWUsIG5vdCBxdW90ZWQuCi0gKiBAZm9ybWF0OiBmb3JtYXQgc3RyaW5nCi0gKiBAYXJncy4uLjogdmFyaWFibGUgYXJndW1lbnQgbGlzdAotICoKLSAqIFBsYWNlcyBhIG1hcmtlciB1c2luZyBvcHRpbWl6ZWQgY29kZSBwYXRjaGluZyB0ZWNobmlxdWUgKGltdl9yZWFkKCkpCi0gKiB0byBiZSBlbmFibGVkIHdoZW4gaW1tZWRpYXRlIHZhbHVlcyBhcmUgcHJlc2VudC4KLSAqLwotI2RlZmluZSB0cmFjZV9tYXJrKG5hbWUsIGZvcm1hdCwgYXJncy4uLikgXAotCV9fdHJhY2VfbWFyaygwLCBuYW1lLCBOVUxMLCBmb3JtYXQsICMjIGFyZ3MpCi0KLS8qKgotICogX3RyYWNlX21hcmsgLSBNYXJrZXIgdXNpbmcgdmFyaWFibGUgcmVhZAotICogQG5hbWU6IG1hcmtlciBuYW1lLCBub3QgcXVvdGVkLgotICogQGZvcm1hdDogZm9ybWF0IHN0cmluZwotICogQGFyZ3MuLi46IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKLSAqCi0gKiBQbGFjZXMgYSBtYXJrZXIgdXNpbmcgYSBzdGFuZGFyZCBtZW1vcnkgcmVhZCAoX2ltdl9yZWFkKCkpIHRvIGJlCi0gKiBlbmFibGVkLiBTaG91bGQgYmUgdXNlZCBmb3IgbWFya2VycyBpbiBjb2RlIHBhdGhzIHdoZXJlIGluc3RydWN0aW9uCi0gKiBtb2RpZmljYXRpb24gYmFzZWQgZW5hYmxpbmcgaXMgbm90IHdlbGNvbWUuIChfX2luaXQgYW5kIF9fZXhpdCBmdW5jdGlvbnMsCi0gKiBsb2NrZGVwLCBzb21lIHRyYXBzLCBwcmludGspLgotICovCi0jZGVmaW5lIF90cmFjZV9tYXJrKG5hbWUsIGZvcm1hdCwgYXJncy4uLikgXAotCV9fdHJhY2VfbWFyaygxLCBuYW1lLCBOVUxMLCBmb3JtYXQsICMjIGFyZ3MpCi0KLS8qKgotICogdHJhY2VfbWFya190cCAtIE1hcmtlciBpbiBhIHRyYWNlcG9pbnQgY2FsbGJhY2sKLSAqIEBuYW1lOiBtYXJrZXIgbmFtZSwgbm90IHF1b3RlZC4KLSAqIEB0cF9uYW1lOiB0cmFjZXBvaW50IG5hbWUsIG5vdCBxdW90ZWQuCi0gKiBAdHBfY2I6IHRyYWNlcG9pbnQgY2FsbGJhY2suIFNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgZ2xvYmFsIHN5bWJvbCBzbyBpdAotICogICAgICAgICBpcyBub3Qgb3B0aW1pemVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyIChzaG91bGQgbm90IGJlIHN0YXRpYykuCi0gKiBAZm9ybWF0OiBmb3JtYXQgc3RyaW5nCi0gKiBAYXJncy4uLjogdmFyaWFibGUgYXJndW1lbnQgbGlzdAotICoKLSAqIFBsYWNlcyBhIG1hcmtlciBpbiBhIHRyYWNlcG9pbnQgY2FsbGJhY2suCi0gKi8KLSNkZWZpbmUgdHJhY2VfbWFya190cChuYW1lLCB0cF9uYW1lLCB0cF9jYiwgZm9ybWF0LCBhcmdzLi4uKQlcCi0JX190cmFjZV9tYXJrX3RwKG5hbWUsIE5VTEwsIHRwX25hbWUsIHRwX2NiLCBmb3JtYXQsICMjIGFyZ3MpCi0KLS8qKgotICogTUFSS19OT0FSR1MgLSBGb3JtYXQgc3RyaW5nIGZvciBhIG1hcmtlciB3aXRoIG5vIGFyZ3VtZW50LgotICovCi0jZGVmaW5lIE1BUktfTk9BUkdTICIgIgotCi0vKiBUbyBiZSB1c2VkIGZvciBzdHJpbmcgZm9ybWF0IHZhbGlkaXR5IGNoZWNraW5nIHdpdGggZ2NjICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wcmludGYoMSwgMikgX19fbWFya19jaGVja19mb3JtYXQoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci0KLSNkZWZpbmUgX19tYXJrX2NoZWNrX2Zvcm1hdChmb3JtYXQsIGFyZ3MuLi4pCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICgwKQkJCQkJCQlcCi0JCQlfX19tYXJrX2NoZWNrX2Zvcm1hdChmb3JtYXQsICMjIGFyZ3MpOwkJXAotCX0gd2hpbGUgKDApCi0KLWV4dGVybiBtYXJrZXJfcHJvYmVfZnVuYyBfX21hcmtfZW1wdHlfZnVuY3Rpb247Ci0KLWV4dGVybiB2b2lkIG1hcmtlcl9wcm9iZV9jYihjb25zdCBzdHJ1Y3QgbWFya2VyICptZGF0YSwKLQl2b2lkICpjYWxsX3ByaXZhdGUsIC4uLik7Ci0KLS8qCi0gKiBDb25uZWN0IGEgcHJvYmUgdG8gYSBtYXJrZXIuCi0gKiBwcml2YXRlIGRhdGEgcG9pbnRlciBtdXN0IGJlIGEgdmFsaWQgYWxsb2NhdGVkIG1lbW9yeSBhZGRyZXNzLCBvciBOVUxMLgotICovCi1leHRlcm4gaW50IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsCi0JCQkJbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLCB2b2lkICpwcm9iZV9wcml2YXRlKTsKLQotLyoKLSAqIFJldHVybnMgdGhlIHByaXZhdGUgZGF0YSBnaXZlbiB0byBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIuCi0gKi8KLWV4dGVybiBpbnQgbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKLQltYXJrZXJfcHJvYmVfZnVuYyAqcHJvYmUsIHZvaWQgKnByb2JlX3ByaXZhdGUpOwotLyoKLSAqIFVucmVnaXN0ZXIgYSBtYXJrZXIgYnkgcHJvdmlkaW5nIHRoZSByZWdpc3RlcmVkIHByaXZhdGUgZGF0YS4KLSAqLwotZXh0ZXJuIGludCBtYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcl9wcml2YXRlX2RhdGEobWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLAotCXZvaWQgKnByb2JlX3ByaXZhdGUpOwotCi1leHRlcm4gdm9pZCAqbWFya2VyX2dldF9wcml2YXRlX2RhdGEoY29uc3QgY2hhciAqbmFtZSwgbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLAotCWludCBudW0pOwotCi0vKgotICogbWFya2VyX3N5bmNocm9uaXplX3VucmVnaXN0ZXIgbXVzdCBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbGFzdCBtYXJrZXIgcHJvYmUKLSAqIHVucmVnaXN0cmF0aW9uIGFuZCB0aGUgZmlyc3Qgb25lIG9mCi0gKiAtIHRoZSBlbmQgb2YgbW9kdWxlIGV4aXQgZnVuY3Rpb24KLSAqIC0gdGhlIGZyZWUgb2YgYW55IHJlc291cmNlIHVzZWQgYnkgdGhlIHByb2JlcwotICogdG8gZW5zdXJlIHRoZSBjb2RlIGFuZCBkYXRhIGFyZSB2YWxpZCBmb3IgYW55IHBvc3NpYmx5IHJ1bm5pbmcgcHJvYmVzLgotICovCi0jZGVmaW5lIG1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCkgc3luY2hyb25pemVfc2NoZWQoKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaAppbmRleCBkOTVmNzJlLi5mZWQ5NjkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC0xOTEsMTQgKzE5MSw2IEBACiAKICNlbmRpZiAvKiAhIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogCi0vKgotICogV2FsayB0aHJvdWdoIGFsbCBtZW1vcnkgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyByZXNvdXJjZS4KLSAqIGFyZyBpcyAoc3RhcnRfcGZuLCBucl9wYWdlcywgcHJpdmF0ZV9hcmdfcG9pbnRlcikKLSAqLwotZXh0ZXJuIGludCB3YWxrX21lbW9yeV9yZXNvdXJjZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZywKLQkJCWludCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKikpOwotCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKIAogZXh0ZXJuIGludCBpc19tZW1fc2VjdGlvbl9yZW1vdmFibGUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmggYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaAppbmRleCA5YmU0ODRkLi43YzA4MDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaApAQCAtNDcsMjIgKzQ3LDE2IEBACiB9CiAKIC8qCi0gKiAyIG1lbXBvb2xfYWxsb2NfdCdzIGFuZCBhIG1lbXBvb2xfZnJlZV90IHRvIGttYWxsb2Mva3phbGxvYyBhbmQga2ZyZWUKLSAqIHRoZSBhbW91bnQgb2YgbWVtb3J5IHNwZWNpZmllZCBieSBwb29sX2RhdGEKKyAqIGEgbWVtcG9vbF9hbGxvY190IGFuZCBhIG1lbXBvb2xfZnJlZV90IHRvIGttYWxsb2MgYW5kIGtmcmVlIHRoZQorICogYW1vdW50IG9mIG1lbW9yeSBzcGVjaWZpZWQgYnkgcG9vbF9kYXRhCiAgKi8KIHZvaWQgKm1lbXBvb2xfa21hbGxvYyhnZnBfdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9kYXRhKTsKLXZvaWQgKm1lbXBvb2xfa3phbGxvYyhnZnBfdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9kYXRhKTsKIHZvaWQgbWVtcG9vbF9rZnJlZSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpOwogc3RhdGljIGlubGluZSBtZW1wb29sX3QgKm1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChpbnQgbWluX25yLCBzaXplX3Qgc2l6ZSkKIHsKIAlyZXR1cm4gbWVtcG9vbF9jcmVhdGUobWluX25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsCiAJCQkgICAgICAodm9pZCAqKSBzaXplKTsKIH0KLXN0YXRpYyBpbmxpbmUgbWVtcG9vbF90ICptZW1wb29sX2NyZWF0ZV9remFsbG9jX3Bvb2woaW50IG1pbl9uciwgc2l6ZV90IHNpemUpCi17Ci0JcmV0dXJuIG1lbXBvb2xfY3JlYXRlKG1pbl9uciwgbWVtcG9vbF9remFsbG9jLCBtZW1wb29sX2tmcmVlLAotCQkJICAgICAgKHZvaWQgKikgc2l6ZSk7Ci19CiAKIC8qCiAgKiBBIG1lbXBvb2xfYWxsb2NfdCBhbmQgbWVtcG9vbF9mcmVlX3QgZm9yIGEgc2ltcGxlIHBhZ2UgYWxsb2NhdG9yIHRoYXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oIGIvaW5jbHVkZS9saW51eC9tZmQvZGE5MDN4LmgKaW5kZXggMTE1ZGJlOS4uYzYzYjY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvZGE5MDN4LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvZGE5MDN4LmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fTElOVVhfUE1JQ19EQTkwM1hfSAogI2RlZmluZSBfX0xJTlVYX1BNSUNfREE5MDNYX0gKIAotLyogVW5pZmllZCBzdWIgZGV2aWNlIElEcyBmb3IgREE5MDMwL0RBOTAzNCAqLworLyogVW5pZmllZCBzdWIgZGV2aWNlIElEcyBmb3IgREE5MDMwL0RBOTAzNC9EQTkwMzUgKi8KIGVudW0gewogCURBOTAzMF9JRF9MRURfMSwKIAlEQTkwMzBfSURfTEVEXzIsCkBAIC01Nyw2ICs1Nyw4IEBACiAJREE5MDM0X0lEX0xETzEzLAogCURBOTAzNF9JRF9MRE8xNCwKIAlEQTkwMzRfSURfTERPMTUsCisKKwlEQTkwMzVfSURfQlVDSzMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAppbmRleCAwNTIxMTc3Li5hZGFmM2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaApAQCAtNDEsNyArNDEsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CiAJc3RydWN0IGRldmljZSAqdGhpc19kZXZpY2U7Ci0JY29uc3QgY2hhciAqZGV2bm9kZTsKKwljb25zdCBjaGFyICpub2RlbmFtZTsKKwltb2RlX3QgbW9kZTsKIH07CiAKIGV4dGVybiBpbnQgbWlzY19yZWdpc3RlcihzdHJ1Y3QgbWlzY2RldmljZSAqIG1pc2MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDlhNzJjYzcuLmI2ZWFlNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBudW1fcGh5c3BhZ2VzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyYW1fcGFnZXM7CiBleHRlcm4gdm9pZCAqIGhpZ2hfbWVtb3J5OwogZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7CiAKQEAgLTEwMyw2ICsxMDQsNyBAQAogI2RlZmluZSBWTV9NSVhFRE1BUAkweDEwMDAwMDAwCS8qIENhbiBjb250YWluICJzdHJ1Y3QgcGFnZSIgYW5kIHB1cmUgUEZOIHBhZ2VzICovCiAjZGVmaW5lIFZNX1NBTwkJMHgyMDAwMDAwMAkvKiBTdHJvbmcgQWNjZXNzIE9yZGVyaW5nIChwb3dlcnBjKSAqLwogI2RlZmluZSBWTV9QRk5fQVRfTU1BUAkweDQwMDAwMDAwCS8qIFBGTk1BUCB2bWEgdGhhdCBpcyBmdWxseSBtYXBwZWQgYXQgbW1hcCB0aW1lICovCisjZGVmaW5lIFZNX01FUkdFQUJMRQkweDgwMDAwMDAwCS8qIEtTTSBtYXkgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCiAKICNpZm5kZWYgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUwkJLyogYXJjaCBjYW4gb3ZlcnJpZGUgdGhpcyAqLwogI2RlZmluZSBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTIFZNX0RBVEFfREVGQVVMVF9GTEFHUwpAQCAtMjgzLDYgKzI4NSwxNCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpOworI2Vsc2UKK3N0YXRpYyBpbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmNvbXBvdW5kX2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC03MDAsMTcgKzcxMCw4IEBACiAKIGV4dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhcyh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19TSE1FTQotZXh0ZXJuIGludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywKLQkJCSAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKK2ludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKIHN0cnVjdCBmaWxlICpzaG1lbV9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQogaW50IHNobWVtX3plcm9fc2V0dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCiAjaWZuZGVmIENPTkZJR19NTVUKQEAgLTgxNSw2ICs4MTYsNyBAQAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7CiBpbnQgZ2V0X3VzZXJfcGFnZXNfZmFzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIGludCB3cml0ZSwKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXMpOworc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKTsKIAogZXh0ZXJuIGludCB0cnlfdG9fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICogcGFnZSwgZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIHZvaWQgZG9faW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKQEAgLTEwNTgsNiArMTA2MCw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcGVyX2NwdV9wYWdlc2V0KHZvaWQpIHt9CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgem9uZV9wY3BfdXBkYXRlKHN0cnVjdCB6b25lICp6b25lKTsKKwogLyogbm9tbXUuYyAqLwogZXh0ZXJuIGF0b21pY19sb25nX3QgbW1hcF9wYWdlc19hbGxvY2F0ZWQ7CiAKQEAgLTEyMjYsNyArMTIzMCw4IEBACiAjZGVmaW5lIEZPTExfV1JJVEUJMHgwMQkvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi8KICNkZWZpbmUgRk9MTF9UT1VDSAkweDAyCS8qIG1hcmsgcGFnZSBhY2Nlc3NlZCAqLwogI2RlZmluZSBGT0xMX0dFVAkweDA0CS8qIGRvIGdldF9wYWdlIG9uIHBhZ2UgKi8KLSNkZWZpbmUgRk9MTF9BTk9OCTB4MDgJLyogZ2l2ZSBaRVJPX1BBR0UgaWYgbm8gcGd0YWJsZSAqLworI2RlZmluZSBGT0xMX0RVTVAJMHgwOAkvKiBnaXZlIGVycm9yIG9uIGhvbGUgaWYgaXQgd291bGQgYmUgemVybyAqLworI2RlZmluZSBGT0xMX0ZPUkNFCTB4MTAJLyogZ2V0X3VzZXJfcGFnZXMgcmVhZC93cml0ZSB3L28gcGVybWlzc2lvbiAqLwogCiB0eXBlZGVmIGludCAoKnB0ZV9mbl90KShwdGVfdCAqcHRlLCBwZ3RhYmxlX3QgdG9rZW4sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCXZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggN2ZiYjk3Mi4uODgzNWI4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC01LDcgKzUsNyBAQAogICogcGFnZV9pc19maWxlX2NhY2hlIC0gc2hvdWxkIHRoZSBwYWdlIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAogICoKLSAqIFJldHVybnMgTFJVX0ZJTEUgaWYgQHBhZ2UgaXMgcGFnZSBjYWNoZSBwYWdlIGJhY2tlZCBieSBhIHJlZ3VsYXIgZmlsZXN5c3RlbSwKKyAqIFJldHVybnMgMSBpZiBAcGFnZSBpcyBwYWdlIGNhY2hlIHBhZ2UgYmFja2VkIGJ5IGEgcmVndWxhciBmaWxlc3lzdGVtLAogICogb3IgMCBpZiBAcGFnZSBpcyBhbm9ueW1vdXMsIHRtcGZzIG9yIG90aGVyd2lzZSByYW0gb3Igc3dhcCBiYWNrZWQuCiAgKiBVc2VkIGJ5IGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgdGhlIExSVSBsaXN0cywgdG8gc29ydCBhIHBhZ2UKICAqIG9udG8gdGhlIHJpZ2h0IExSVSBsaXN0LgpAQCAtMTYsMTEgKzE2LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgcGFnZV9pc19maWxlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBUaGUgcGFnZSBpcyBwYWdlIGNhY2hlIGJhY2tlZCBieSBhIG5vcm1hbCBmaWxlc3lzdGVtLiAqLwotCXJldHVybiBMUlVfRklMRTsKKwlyZXR1cm4gIVBhZ2VTd2FwQmFja2VkKHBhZ2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTM5LDIxICszNSwzNiBAQAogCW1lbV9jZ3JvdXBfZGVsX2xydV9saXN0KHBhZ2UsIGwpOwogfQogCisvKioKKyAqIHBhZ2VfbHJ1X2Jhc2VfdHlwZSAtIHdoaWNoIExSVSBsaXN0IHR5cGUgc2hvdWxkIGEgcGFnZSBiZSBvbj8KKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB0ZXN0CisgKgorICogVXNlZCBmb3IgTFJVIGxpc3QgaW5kZXggYXJpdGhtZXRpYy4KKyAqCisgKiBSZXR1cm5zIHRoZSBiYXNlIExSVSB0eXBlIC0gZmlsZSBvciBhbm9uIC0gQHBhZ2Ugc2hvdWxkIGJlIG9uLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnVfYmFzZV90eXBlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCisJCXJldHVybiBMUlVfSU5BQ1RJVkVfRklMRTsKKwlyZXR1cm4gTFJVX0lOQUNUSVZFX0FOT047Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogZGVsX3BhZ2VfZnJvbV9scnUoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQogewotCWVudW0gbHJ1X2xpc3QgbCA9IExSVV9CQVNFOworCWVudW0gbHJ1X2xpc3QgbDsKIAogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKIAkJX19DbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKIAkJbCA9IExSVV9VTkVWSUNUQUJMRTsKIAl9IGVsc2UgeworCQlsID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewogCQkJX19DbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAJCQlsICs9IExSVV9BQ1RJVkU7CiAJCX0KLQkJbCArPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CiAJfQogCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIAltZW1fY2dyb3VwX2RlbF9scnVfbGlzdChwYWdlLCBsKTsKQEAgLTY4LDE0ICs3OSwxNCBAQAogICovCiBzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JZW51bSBscnVfbGlzdCBscnUgPSBMUlVfQkFTRTsKKwllbnVtIGxydV9saXN0IGxydTsKIAogCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCiAJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKIAllbHNlIHsKKwkJbHJ1ID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKIAkJCWxydSArPSBMUlVfQUNUSVZFOwotCQlscnUgKz0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCX0KIAogCXJldHVybiBscnU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKaW5kZXggNDAzYWE1MC4uMmVlMjJlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaApAQCAtNDAsNiArNDAsOCBAQAogfTsKIAogc3RydWN0IG1tY19leHRfY3NkIHsKKwl1OAkJCXJldjsKKwl1bnNpZ25lZCBpbnQJCXNhX3RpbWVvdXQ7CQkvKiBVbml0czogMTAwbnMgKi8KIAl1bnNpZ25lZCBpbnQJCWhzX21heF9kdHI7CiAJdW5zaWduZWQgaW50CQlzZWN0b3JzOwogfTsKQEAgLTYyLDcgKzY0LDggQEAKIAkJCQlsb3dfc3BlZWQ6MSwKIAkJCQl3aWRlX2J1czoxLAogCQkJCWhpZ2hfcG93ZXI6MSwKLQkJCQloaWdoX3NwZWVkOjE7CisJCQkJaGlnaF9zcGVlZDoxLAorCQkJCWRpc2FibGVfY2Q6MTsKIH07CiAKIHN0cnVjdCBzZGlvX2NpcyB7CkBAIC05NCw2ICs5Nyw4IEBACiAjZGVmaW5lIE1NQ19TVEFURV9SRUFET05MWQkoMTw8MSkJCS8qIGNhcmQgaXMgcmVhZC1vbmx5ICovCiAjZGVmaW5lIE1NQ19TVEFURV9ISUdIU1BFRUQJKDE8PDIpCQkvKiBjYXJkIGlzIGluIGhpZ2ggc3BlZWQgbW9kZSAqLwogI2RlZmluZSBNTUNfU1RBVEVfQkxPQ0tBRERSCSgxPDwzKQkJLyogY2FyZCB1c2VzIGJsb2NrLWFkZHJlc3NpbmcgKi8KKwl1bnNpZ25lZCBpbnQJCXF1aXJrczsgCS8qIGNhcmQgcXVpcmtzICovCisjZGVmaW5lIE1NQ19RVUlSS19MRU5JRU5UX0ZOMAkoMTw8MCkJCS8qIGFsbG93IFNESU8gRk4wIHdyaXRlcyBvdXRzaWRlIG9mIHRoZSBWUyBDQ0NSIHJhbmdlICovCiAKIAl1MzIJCQlyYXdfY2lkWzRdOwkvKiByYXcgY2FyZCBDSUQgKi8KIAl1MzIJCQlyYXdfY3NkWzRdOwkvKiByYXcgY2FyZCBDU0QgKi8KQEAgLTEyOSw2ICsxMzQsMTEgQEAKICNkZWZpbmUgbW1jX2NhcmRfc2V0X2hpZ2hzcGVlZChjKSAoKGMpLT5zdGF0ZSB8PSBNTUNfU1RBVEVfSElHSFNQRUVEKQogI2RlZmluZSBtbWNfY2FyZF9zZXRfYmxvY2thZGRyKGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9CTE9DS0FERFIpCiAKK3N0YXRpYyBpbmxpbmUgaW50IG1tY19jYXJkX2xlbmllbnRfZm4wKGNvbnN0IHN0cnVjdCBtbWNfY2FyZCAqYykKK3sKKwlyZXR1cm4gYy0+cXVpcmtzICYgTU1DX1FVSVJLX0xFTklFTlRfRk4wOworfQorCiAjZGVmaW5lIG1tY19jYXJkX25hbWUoYykJKChjKS0+Y2lkLnByb2RfbmFtZSkKICNkZWZpbmUgbW1jX2NhcmRfaWQoYykJCShkZXZfbmFtZSgmKGMpLT5kZXYpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKaW5kZXggN2FjOGI1MC4uZTQ4OThlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaApAQCAtMTM5LDYgKzEzOSw3IEBACiAKIGV4dGVybiBpbnQgX19tbWNfY2xhaW1faG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGF0b21pY190ICphYm9ydCk7CiBleHRlcm4gdm9pZCBtbWNfcmVsZWFzZV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CitleHRlcm4gaW50IG1tY190cnlfY2xhaW1faG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCiAvKioKICAqCW1tY19jbGFpbV9ob3N0IC0gZXhjbHVzaXZlbHkgY2xhaW0gYSBob3N0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggM2U3NjE1ZS4uODFiYjQyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtNTEsNiArNTEsMzUgQEAKIH07CiAKIHN0cnVjdCBtbWNfaG9zdF9vcHMgeworCS8qCisJICogSG9zdHMgdGhhdCBzdXBwb3J0IHBvd2VyIHNhdmluZyBjYW4gdXNlIHRoZSAnZW5hYmxlJyBhbmQgJ2Rpc2FibGUnCisJICogbWV0aG9kcyB0byBleGl0IGFuZCBlbnRlciBwb3dlciBzYXZpbmcgc3RhdGVzLiAnZW5hYmxlJyBpcyBjYWxsZWQKKwkgKiB3aGVuIHRoZSBob3N0IGlzIGNsYWltZWQgYW5kICdkaXNhYmxlJyBpcyBjYWxsZWQgKG9yIHNjaGVkdWxlZCB3aXRoCisJICogYSBkZWxheSkgd2hlbiB0aGUgaG9zdCBpcyByZWxlYXNlZC4gVGhlICdkaXNhYmxlJyBpcyBzY2hlZHVsZWQgaWYKKwkgKiB0aGUgZGlzYWJsZSBkZWxheSBzZXQgYnkgJ21tY19zZXRfZGlzYWJsZV9kZWxheSgpJyBpcyBub24temVybywKKwkgKiBvdGhlcndpc2UgJ2Rpc2FibGUnIGlzIGNhbGxlZCBpbW1lZGlhdGVseS4gJ2Rpc2FibGUnIG1heSBiZQorCSAqIHNjaGVkdWxlZCByZXBlYXRlZGx5LCB0byBwZXJtaXQgZXZlciBncmVhdGVyIHBvd2VyIHNhdmluZyBhdCB0aGUKKwkgKiBleHBlbnNlIG9mIGV2ZXIgZ3JlYXRlciBsYXRlbmN5IHRvIHJlLWVuYWJsZS4gUmVzY2hlZHVsaW5nIGlzCisJICogZGV0ZXJtaW5lZCBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSAnZGlzYWJsZScgbWV0aG9kLiBBIHBvc2l0aXZlCisJICogdmFsdWUgZ2l2ZXMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4KKwkgKgorCSAqIEluIHRoZSBjYXNlIHdoZXJlIGEgaG9zdCBmdW5jdGlvbiAobGlrZSBzZXRfaW9zKSBtYXkgYmUgY2FsbGVkCisJICogd2l0aCBvciB3aXRob3V0IHRoZSBob3N0IGNsYWltZWQsIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgY2FuIGJlCisJICogZG9uZSBkaXJlY3RseSBhbmQgd2lsbCBuZXN0IGNvcnJlY3RseS4gQ2FsbCAnbW1jX2hvc3RfZW5hYmxlKCknIGFuZAorCSAqICdtbWNfaG9zdF9sYXp5X2Rpc2FibGUoKScgZm9yIHRoaXMgcHVycG9zZSwgYnV0IG5vdGUgdGhhdCB0aGVzZQorCSAqIGZ1bmN0aW9ucyBtdXN0IGJlIHBhaXJlZC4KKwkgKgorCSAqIEFsdGVybmF0aXZlbHksICdtbWNfaG9zdF9lbmFibGUoKScgbWF5IGJlIHBhaXJlZCB3aXRoCisJICogJ21tY19ob3N0X2Rpc2FibGUoKScgd2hpY2ggY2FsbHMgJ2Rpc2FibGUnIGltbWVkaWF0ZWx5LiAgSW4gdGhpcworCSAqIGNhc2UgdGhlICdkaXNhYmxlJyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCAnbGF6eScgc2V0IHRvIDAuCisJICogVGhpcyBpcyBtYWlubHkgdXNlZnVsIGZvciBlcnJvciBwYXRocy4KKwkgKgorCSAqIEJlY2F1c2UgbGF6eSBkaXNhYmxlIG1heSBiZSBjYWxsZWQgZnJvbSBhIHdvcmsgcXVldWUsIHRoZSAnZGlzYWJsZScKKwkgKiBtZXRob2QgbXVzdCBjbGFpbSB0aGUgaG9zdCB3aGVuICdsYXp5JyAhPSAwLCB3aGljaCB3aWxsIHdvcmsKKwkgKiBjb3JyZWN0bHkgYmVjYXVzZSByZWN1cnNpb24gaXMgZGV0ZWN0ZWQgYW5kIGhhbmRsZWQuCisJICovCisJaW50ICgqZW5hYmxlKShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCWludCAoKmRpc2FibGUpKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IGxhenkpOwogCXZvaWQJKCpyZXF1ZXN0KShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKTsKIAkvKgogCSAqIEF2b2lkIGNhbGxpbmcgdGhlc2UgdGhyZWUgZnVuY3Rpb25zIHRvbyBvZnRlbiBvciBpbiBhICJmYXN0IHBhdGgiLApAQCAtMTE4LDYgKzE0Nyw5IEBACiAjZGVmaW5lIE1NQ19DQVBfU1BJCQkoMSA8PCA0KQkvKiBUYWxrcyBvbmx5IFNQSSBwcm90b2NvbHMgKi8KICNkZWZpbmUgTU1DX0NBUF9ORUVEU19QT0xMCSgxIDw8IDUpCS8qIE5lZWRzIHBvbGxpbmcgZm9yIGNhcmQtZGV0ZWN0aW9uICovCiAjZGVmaW5lIE1NQ19DQVBfOF9CSVRfREFUQQkoMSA8PCA2KQkvKiBDYW4gdGhlIGhvc3QgZG8gOCBiaXQgdHJhbnNmZXJzICovCisjZGVmaW5lIE1NQ19DQVBfRElTQUJMRQkJKDEgPDwgNykJLyogQ2FuIHRoZSBob3N0IGJlIGRpc2FibGVkICovCisjZGVmaW5lIE1NQ19DQVBfTk9OUkVNT1ZBQkxFCSgxIDw8IDgpCS8qIE5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KKyNkZWZpbmUgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1kJKDEgPDwgOSkJLyogV2FpdHMgd2hpbGUgY2FyZCBpcyBidXN5ICovCiAKIAkvKiBob3N0IHNwZWNpZmljIGJsb2NrIGRhdGEgKi8KIAl1bnNpZ25lZCBpbnQJCW1heF9zZWdfc2l6ZTsJLyogc2VlIGJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplICovCkBAIC0xNDIsOSArMTc0LDE4IEBACiAJdW5zaWduZWQgaW50CQlyZW1vdmVkOjE7CS8qIGhvc3QgaXMgYmVpbmcgcmVtb3ZlZCAqLwogI2VuZGlmCiAKKwkvKiBPbmx5IHVzZWQgd2l0aCBNTUNfQ0FQX0RJU0FCTEUgKi8KKwlpbnQJCQllbmFibGVkOwkvKiBob3N0IGlzIGVuYWJsZWQgKi8KKwlpbnQJCQluZXN0aW5nX2NudDsJLyogImVuYWJsZSIgbmVzdGluZyBjb3VudCAqLworCWludAkJCWVuX2Rpc19yZWN1cnM7CS8qIGRldGVjdCByZWN1cnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWRpc2FibGVfZGVsYXk7CS8qIGRpc2FibGUgZGVsYXkgaW4gbXNlY3MgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWRpc2FibGU7CS8qIGRpc2FibGluZyB3b3JrICovCisKIAlzdHJ1Y3QgbW1jX2NhcmQJCSpjYXJkOwkJLyogZGV2aWNlIGF0dGFjaGVkIHRvIHRoaXMgaG9zdCAqLwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7CisJc3RydWN0IHRhc2tfc3RydWN0CSpjbGFpbWVyOwkvKiB0YXNrIHRoYXQgaGFzIGhvc3QgY2xhaW1lZCAqLworCWludAkJCWNsYWltX2NudDsJLyogImNsYWltIiBuZXN0aW5nIGNvdW50ICovCiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWRldGVjdDsKIApAQCAtMTgzLDYgKzIyNCw5IEBACiBleHRlcm4gaW50IG1tY19zdXNwZW5kX2hvc3Qoc3RydWN0IG1tY19ob3N0ICosIHBtX21lc3NhZ2VfdCk7CiBleHRlcm4gaW50IG1tY19yZXN1bWVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKik7CiAKK2V4dGVybiB2b2lkIG1tY19wb3dlcl9zYXZlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK2V4dGVybiB2b2lkIG1tY19wb3dlcl9yZXN0b3JlX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKKwogZXh0ZXJuIHZvaWQgbW1jX2RldGVjdF9jaGFuZ2Uoc3RydWN0IG1tY19ob3N0ICosIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwogZXh0ZXJuIHZvaWQgbW1jX3JlcXVlc3RfZG9uZShzdHJ1Y3QgbW1jX2hvc3QgKiwgc3RydWN0IG1tY19yZXF1ZXN0ICopOwogCkBAIC0xOTcsNSArMjQxLDE5IEBACiBpbnQgbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHkpOwogaW50IG1tY19yZWd1bGF0b3Jfc2V0X29jcihzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHksIHVuc2lnbmVkIHNob3J0IHZkZF9iaXQpOwogCitpbnQgbW1jX2NhcmRfYXdha2Uoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK2ludCBtbWNfY2FyZF9zbGVlcChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworaW50IG1tY19jYXJkX2Nhbl9zbGVlcChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCitpbnQgbW1jX2hvc3RfZW5hYmxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CitpbnQgbW1jX2hvc3RfZGlzYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworaW50IG1tY19ob3N0X2xhenlfZGlzYWJsZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX3NldF9kaXNhYmxlX2RlbGF5KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwKKwkJCQkJIHVuc2lnbmVkIGludCBkaXNhYmxlX2RlbGF5KQoreworCWhvc3QtPmRpc2FibGVfZGVsYXkgPSBkaXNhYmxlX2RlbGF5OworfQorCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAppbmRleCAxNGI4MWYzLi5jMDJjOGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaApAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBNTUNfQUxMX1NFTkRfQ0lEICAgICAgICAgIDIgICAvKiBiY3IgICAgICAgICAgICAgICAgICAgICBSMiAgKi8KICNkZWZpbmUgTU1DX1NFVF9SRUxBVElWRV9BRERSICAgICAzICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjEgICovCiAjZGVmaW5lIE1NQ19TRVRfRFNSICAgICAgICAgICAgICAgNCAgIC8qIGJjICAgWzMxOjE2XSBSQ0EgICAgICAgICAgICAqLworI2RlZmluZSBNTUNfU0xFRVBfQVdBS0UJCSAgNSAgIC8qIGFjICAgWzMxOjE2XSBSQ0EgMTU6ZmxnIFIxYiAqLwogI2RlZmluZSBNTUNfU1dJVENIICAgICAgICAgICAgICAgIDYgICAvKiBhYyAgIFszMTowXSBTZWUgYmVsb3cgICBSMWIgKi8KICNkZWZpbmUgTU1DX1NFTEVDVF9DQVJEICAgICAgICAgICA3ICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjEgICovCiAjZGVmaW5lIE1NQ19TRU5EX0VYVF9DU0QgICAgICAgICAgOCAgIC8qIGFkdGMgICAgICAgICAgICAgICAgICAgIFIxICAqLwpAQCAtMTI3LDYgKzEyOCw3IEBACiAjZGVmaW5lIFIxX1NUQVRVUyh4KSAgICAgICAgICAgICh4ICYgMHhGRkZGRTAwMCkKICNkZWZpbmUgUjFfQ1VSUkVOVF9TVEFURSh4KQkoKHggJiAweDAwMDAxRTAwKSA+PiA5KQkvKiBzeCwgYiAoNCBiaXRzKSAqLwogI2RlZmluZSBSMV9SRUFEWV9GT1JfREFUQQkoMSA8PCA4KQkvKiBzeCwgYSAqLworI2RlZmluZSBSMV9TV0lUQ0hfRVJST1IJCSgxIDw8IDcpCS8qIHN4LCBjICovCiAjZGVmaW5lIFIxX0FQUF9DTUQJCSgxIDw8IDUpCS8qIHNyLCBjICovCiAKIC8qCkBAIC0yNTQsNiArMjU2LDcgQEAKICNkZWZpbmUgRVhUX0NTRF9DQVJEX1RZUEUJMTk2CS8qIFJPICovCiAjZGVmaW5lIEVYVF9DU0RfUkVWCQkxOTIJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9TRUNfQ05UCQkyMTIJLyogUk8sIDQgYnl0ZXMgKi8KKyNkZWZpbmUgRVhUX0NTRF9TX0FfVElNRU9VVAkyMTcKIAogLyoKICAqIEVYVF9DU0QgZmllbGQgZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKaW5kZXggNDUxYmRmYy4uYWMzYWI2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgKQEAgLTY3LDYgKzY3LDcgQEAKIAogI2RlZmluZSBzZGlvX2dldF9kcnZkYXRhKGYpCWRldl9nZXRfZHJ2ZGF0YSgmKGYpLT5kZXYpCiAjZGVmaW5lIHNkaW9fc2V0X2RydmRhdGEoZixkKQlkZXZfc2V0X2RydmRhdGEoJihmKS0+ZGV2LCBkKQorI2RlZmluZSBkZXZfdG9fc2Rpb19mdW5jKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19mdW5jLCBkZXYpCiAKIC8qCiAgKiBTRElPIGZ1bmN0aW9uIGRldmljZSBkcml2ZXIKQEAgLTgxLDYgKzgyLDggQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcnY7CiB9OwogCisjZGVmaW5lIHRvX3NkaW9fZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19kcml2ZXIsIGRydikKKwogLyoqCiAgKiBTRElPX0RFVklDRSAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyBTRElPIGRldmljZQogICogQHZlbmQ6IHRoZSAxNiBiaXQgbWFudWZhY3R1cmVyIGNvZGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZmZmViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfTElOVVhfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfTElOVVhfTU1VX0NPTlRFWFRfSAorCitzdHJ1Y3QgbW1fc3RydWN0OworCit2b2lkIHVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cit2b2lkIHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAppbmRleCBiNzc0ODZkLi40ZTAyZWUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oCisrKyBiL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmgKQEAgLTYyLDYgKzYyLDE1IEBACiAJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIAkvKgorCSAqIGNoYW5nZV9wdGUgaXMgY2FsbGVkIGluIGNhc2VzIHRoYXQgcHRlIG1hcHBpbmcgdG8gcGFnZSBpcyBjaGFuZ2VkOgorCSAqIGZvciBleGFtcGxlLCB3aGVuIGtzbSByZW1hcHMgcHRlIHRvIHBvaW50IHRvIGEgbmV3IHNoYXJlZCBwYWdlLgorCSAqLworCXZvaWQgKCpjaGFuZ2VfcHRlKShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwKKwkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgcHRlX3QgcHRlKTsKKworCS8qCiAJICogQmVmb3JlIHRoaXMgaXMgaW52b2tlZCBhbnkgc2Vjb25kYXJ5IE1NVSBpcyBzdGlsbCBvayB0bwogCSAqIHJlYWQvd3JpdGUgdG8gdGhlIHBhZ2UgcHJldmlvdXNseSBwb2ludGVkIHRvIGJ5IHRoZSBMaW51eAogCSAqIHB0ZSBiZWNhdXNlIHRoZSBwYWdlIGhhc24ndCBiZWVuIGZyZWVkIHlldCBhbmQgaXQgd29uJ3QgYmUKQEAgLTE1NCw2ICsxNjMsOCBAQAogZXh0ZXJuIHZvaWQgX19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gaW50IF9fbW11X25vdGlmaWVyX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBfX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKTsKIGV4dGVybiB2b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKQEAgLTE3NSw2ICsxODYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG1tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3sKKwlpZiAobW1faGFzX25vdGlmaWVycyhtbSkpCisJCV9fbW11X25vdGlmaWVyX2NoYW5nZV9wdGUobW0sIGFkZHJlc3MsIHB0ZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTIzNiw2ICsyNTQsMTYgQEAKIAlfX3lvdW5nOwkJCQkJCQlcCiB9KQogCisjZGVmaW5lIHNldF9wdGVfYXRfbm90aWZ5KF9fbW0sIF9fYWRkcmVzcywgX19wdGVwLCBfX3B0ZSkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBtbV9zdHJ1Y3QgKl9fX21tID0gX19tbTsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fX2FkZHJlc3MgPSBfX2FkZHJlc3M7CQkJCVwKKwlwdGVfdCBfX19wdGUgPSBfX3B0ZTsJCQkJCQlcCisJCQkJCQkJCQlcCisJc2V0X3B0ZV9hdChfX19tbSwgX19fYWRkcmVzcywgX19wdGVwLCBfX19wdGUpOwkJCVwKKwltbXVfbm90aWZpZXJfY2hhbmdlX3B0ZShfX19tbSwgX19fYWRkcmVzcywgX19fcHRlKTsJCVwKK30pCisKICNlbHNlIC8qIENPTkZJR19NTVVfTk9USUZJRVIgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIG1tdV9ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpAQCAtMjQ4LDYgKzI3NiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbW11X25vdGlmaWVyX2NoYW5nZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0yNzMsNiArMzA2LDcgQEAKIAogI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nCiAjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2hfbm90aWZ5IHB0ZXBfY2xlYXJfZmx1c2gKKyNkZWZpbmUgc2V0X3B0ZV9hdF9ub3RpZnkgc2V0X3B0ZV9hdAogCiAjZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA4ODk1OTg1Li42NTJlZjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgTUlHUkFURV9VTk1PVkFCTEUgICAgIDAKICNkZWZpbmUgTUlHUkFURV9SRUNMQUlNQUJMRSAgIDEKICNkZWZpbmUgTUlHUkFURV9NT1ZBQkxFICAgICAgIDIKKyNkZWZpbmUgTUlHUkFURV9QQ1BUWVBFUyAgICAgIDMgLyogdGhlIG51bWJlciBvZiB0eXBlcyBvbiB0aGUgcGNwIGxpc3RzICovCiAjZGVmaW5lIE1JR1JBVEVfUkVTRVJWRSAgICAgICAzCiAjZGVmaW5lIE1JR1JBVEVfSVNPTEFURSAgICAgICA0IC8qIGNhbid0IGFsbG9jYXRlIGZyb20gaGVyZSAqLwogI2RlZmluZSBNSUdSQVRFX1RZUEVTICAgICAgICAgNQpAQCAtOTQsMTEgKzk1LDE1IEBACiAJTlJfU0xBQl9SRUNMQUlNQUJMRSwKIAlOUl9TTEFCX1VOUkVDTEFJTUFCTEUsCiAJTlJfUEFHRVRBQkxFLAkJLyogdXNlZCBmb3IgcGFnZXRhYmxlcyAqLworCU5SX0tFUk5FTF9TVEFDSywKKwkvKiBTZWNvbmQgMTI4IGJ5dGUgY2FjaGVsaW5lICovCiAJTlJfVU5TVEFCTEVfTkZTLAkvKiBORlMgdW5zdGFibGUgcGFnZXMgKi8KIAlOUl9CT1VOQ0UsCiAJTlJfVk1TQ0FOX1dSSVRFLAotCS8qIFNlY29uZCAxMjggYnl0ZSBjYWNoZWxpbmUgKi8KIAlOUl9XUklURUJBQ0tfVEVNUCwJLyogV3JpdGViYWNrIHVzaW5nIHRlbXBvcmFyeSBidWZmZXJzICovCisJTlJfSVNPTEFURURfQU5PTiwJLyogVGVtcG9yYXJ5IGlzb2xhdGVkIHBhZ2VzIGZyb20gYW5vbiBscnUgKi8KKwlOUl9JU09MQVRFRF9GSUxFLAkvKiBUZW1wb3JhcnkgaXNvbGF0ZWQgcGFnZXMgZnJvbSBmaWxlIGxydSAqLworCU5SX1NITUVNLAkJLyogc2htZW0gcGFnZXMgKGluY2x1ZGVkIHRtcGZzL0dFTSBwYWdlcykgKi8KICNpZmRlZiBDT05GSUdfTlVNQQogCU5VTUFfSElULAkJLyogYWxsb2NhdGVkIGluIGludGVuZGVkIG5vZGUgKi8KIAlOVU1BX01JU1MsCQkvKiBhbGxvY2F0ZWQgaW4gbm9uIGludGVuZGVkIG5vZGUgKi8KQEAgLTE2NSw3ICsxNzAsOSBAQAogCWludCBjb3VudDsJCS8qIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgbGlzdCAqLwogCWludCBoaWdoOwkJLyogaGlnaCB3YXRlcm1hcmssIGVtcHR5aW5nIG5lZWRlZCAqLwogCWludCBiYXRjaDsJCS8qIGNodW5rIHNpemUgZm9yIGJ1ZGR5IGFkZC9yZW1vdmUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIHRoZSBsaXN0IG9mIHBhZ2VzICovCisKKwkvKiBMaXN0cyBvZiBwYWdlcywgb25lIHBlciBtaWdyYXRlIHR5cGUgc3RvcmVkIG9uIHRoZSBwY3AtbGlzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RzW01JR1JBVEVfUENQVFlQRVNdOwogfTsKIAogc3RydWN0IHBlcl9jcHVfcGFnZXNldCB7CkBAIC0yNjksNiArMjc2LDExIEBACiAJICovCiAJdW5zaWduZWQgbG9uZwkJcmVjZW50X3JvdGF0ZWRbMl07CiAJdW5zaWduZWQgbG9uZwkJcmVjZW50X3NjYW5uZWRbMl07CisKKwkvKgorCSAqIGFjY3VtdWxhdGVkIGZvciBiYXRjaGluZworCSAqLworCXVuc2lnbmVkIGxvbmcJCW5yX3NhdmVkX3NjYW5bTlJfTFJVX0xJU1RTXTsKIH07CiAKIHN0cnVjdCB6b25lIHsKQEAgLTMyMyw3ICszMzUsNiBAQAogCXNwaW5sb2NrX3QJCWxydV9sb2NrOwkKIAlzdHJ1Y3Qgem9uZV9scnUgewogCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfc2F2ZWRfc2NhbjsJLyogYWNjdW11bGF0ZWQgZm9yIGJhdGNoaW5nICovCiAJfSBscnVbTlJfTFJVX0xJU1RTXTsKIAogCXN0cnVjdCB6b25lX3JlY2xhaW1fc3RhdCByZWNsYWltX3N0YXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCAxYmY1OTAwLi5mNThlOWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTM5OSw2ICszOTksMTcgQEAKIAkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKIH07CiAKKy8qIHNwaSAqLworCisjZGVmaW5lIFNQSV9OQU1FX1NJWkUJMzIKKyNkZWZpbmUgU1BJX01PRFVMRV9QUkVGSVggInNwaToiCisKK3N0cnVjdCBzcGlfZGV2aWNlX2lkIHsKKwljaGFyIG5hbWVbU1BJX05BTUVfU0laRV07CisJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGEJLyogRGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgKi8KKwkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKK307CisKIC8qIGRtaSAqLwogZW51bSBkbWlfZmllbGQgewogCURNSV9OT05FLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggZjhmOTJkMC4uMWM3NTViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiAjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CkBAIC0zMjcsMTAgKzMyNiw2IEBACiAJLyogVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKG1heSBiZSBtYW5nbGVkKS4gIFBlb3BsZSBsaWtlCiAJICAga2VlcGluZyBwb2ludGVycyB0byB0aGlzIHN0dWZmICovCiAJY2hhciAqYXJnczsKLSNpZmRlZiBDT05GSUdfTUFSS0VSUwotCXN0cnVjdCBtYXJrZXIgKm1hcmtlcnM7Ci0JdW5zaWduZWQgaW50IG51bV9tYXJrZXJzOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiAJc3RydWN0IHRyYWNlcG9pbnQgKnRyYWNlcG9pbnRzOwogCXVuc2lnbmVkIGludCBudW1fdHJhY2Vwb2ludHM7CkBAIC01MzUsOCArNTMwLDYgQEAKIAogZXh0ZXJuIHZvaWQgcHJpbnRfbW9kdWxlcyh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgbW9kdWxlX3VwZGF0ZV9tYXJrZXJzKHZvaWQpOwotCiBleHRlcm4gdm9pZCBtb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKHZvaWQpOwogZXh0ZXJuIGludCBtb2R1bGVfZ2V0X2l0ZXJfdHJhY2Vwb2ludHMoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiAKQEAgLTY1MSwxMCArNjQ0LDYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV91cGRhdGVfbWFya2Vycyh2b2lkKQotewotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbW9kdWxlX3VwZGF0ZV90cmFjZXBvaW50cyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCmluZGV4IGQ4NzBhZTIuLmVjMGY2MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKQEAgLTQwLDcgKzQwLDcgQEAKICAqICAtIGZvbGxvdyBsaW5rcyBhdCB0aGUgZW5kCiAgKiAgLSByZXF1aXJlIGEgZGlyZWN0b3J5CiAgKiAgLSBlbmRpbmcgc2xhc2hlcyBvayBldmVuIGZvciBub25leGlzdGVudCBmaWxlcwotICogIC0gaW50ZXJuYWwgInRoZXJlIGFyZSBtb3JlIHBhdGggY29tcG5lbnRzIiBmbGFnCisgKiAgLSBpbnRlcm5hbCAidGhlcmUgYXJlIG1vcmUgcGF0aCBjb21wb25lbnRzIiBmbGFnCiAgKiAgLSBsb2NrZWQgd2hlbiBsb29rdXAgZG9uZSB3aXRoIGRjYWNoZV9sb2NrIGhlbGQKICAqICAtIGRlbnRyeSBjYWNoZSBpcyB1bnRydXN0ZWQ7IGZvcmNlIGEgcmVhbCBsb29rdXAKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnM0LmggYi9pbmNsdWRlL2xpbnV4L25mczQuaAppbmRleCAzM2IyODM2Li5jNGMwNjAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mczQuaApAQCAtMjM0LDcgKzIzNCw3IEBACiBOZWVkcyB0byBiZSB1cGRhdGVkIGlmIG1vcmUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiBmdXR1cmUuKi8KIAogI2RlZmluZSBGSVJTVF9ORlM0X09QCU9QX0FDQ0VTUwotI2RlZmluZSBMQVNUX05GUzRfT1AgCU9QX1JFTEVBU0VfTE9DS09XTkVSCisjZGVmaW5lIExBU1RfTkZTNF9PUCAJT1BfUkVDTEFJTV9DT01QTEVURQogCiBlbnVtIG5mc3N0YXQ0IHsKIAlORlM0X09LID0gMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCmluZGV4IDJiNDlkNjcuLjUxMGZmZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaApAQCAtNTYsOCArNTYsMTEgQEAKIGV4dGVybiB1MzIJCQluZnNkX3N1cHBvcnRlZF9taW5vcnZlcnNpb247CiBleHRlcm4gc3RydWN0IG11dGV4CQluZnNkX211dGV4OwogZXh0ZXJuIHN0cnVjdCBzdmNfc2VydgkJKm5mc2Rfc2VydjsKK2V4dGVybiBzcGlubG9ja190CQluZnNkX2RyY19sb2NrOworZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kcmNfbWF4X21lbTsKK2V4dGVybiB1bnNpZ25lZCBpbnQJCW5mc2RfZHJjX21lbV91c2VkOwogCi1leHRlcm4gc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mc19leHBvcnRzX29wOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZnNfZXhwb3J0c19vcDsKIAogLyoKICAqIEZ1bmN0aW9uIHByb3RvdHlwZXMuCkBAIC0xNjMsNyArMTY2LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbWF4X2RlbGVnYXRpb25zOwogaW50IG5mczRfc3RhdGVfaW5pdCh2b2lkKTsKIHZvaWQgbmZzZDRfZnJlZV9zbGFicyh2b2lkKTsKLXZvaWQgbmZzNF9zdGF0ZV9zdGFydCh2b2lkKTsKK2ludCBuZnM0X3N0YXRlX3N0YXJ0KHZvaWQpOwogdm9pZCBuZnM0X3N0YXRlX3NodXRkb3duKHZvaWQpOwogdGltZV90IG5mczRfbGVhc2VfdGltZSh2b2lkKTsKIHZvaWQgbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKTsKQEAgLTE3MSw3ICsxNzQsNyBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG5mczRfc3RhdGVfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzZDRfZnJlZV9zbGFicyh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZnM0X3N0YXRlX3N0YXJ0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgbmZzNF9zdGF0ZV9zdGFydCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9zdGF0ZV9zaHV0ZG93bih2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdGltZV90IG5mczRfbGVhc2VfdGltZSh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKSB7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oIGIvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmgKaW5kZXggNTdhYjJlZC4uYjM4ZDExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmgKQEAgLTYwLDYgKzYwLDEyIEBACiAjZGVmaW5lIHNpX3N0YXRlb3duZXJpZCAgIHNpX29wYXF1ZS5zb19zdGF0ZW93bmVyaWQKICNkZWZpbmUgc2lfZmlsZWlkICAgICAgICAgc2lfb3BhcXVlLnNvX2ZpbGVpZAogCitzdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgeworCS8qIGFyZ3MvcmVzICovCisJdTMyCQkJY2JzX21pbm9ydmVyc2lvbjsKKwlzdHJ1Y3QgbmZzNF9jbGllbnQJKmNic19jbHA7Cit9OworCiBzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWRsX3BlcmZpbGU7CiAJc3RydWN0IGxpc3RfaGVhZAlkbF9wZXJjbG50OwpAQCAtODEsMzggKzg3LDM1IEBACiAvKiBjbGllbnQgZGVsZWdhdGlvbiBjYWxsYmFjayBpbmZvICovCiBzdHJ1Y3QgbmZzNF9jYl9jb25uIHsKIAkvKiBTRVRDTElFTlRJRCBpbmZvICovCi0JdTMyICAgICAgICAgICAgICAgICAgICAgY2JfYWRkcjsKLQl1bnNpZ25lZCBzaG9ydCAgICAgICAgICBjYl9wb3J0OworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCWNiX2FkZHI7CisJc2l6ZV90CQkJY2JfYWRkcmxlbjsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBjYl9wcm9nOwogCXUzMgkJCWNiX21pbm9ydmVyc2lvbjsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBjYl9pZGVudDsJLyogbWlub3J2ZXJzaW9uIDAgb25seSAqLwogCS8qIFJQQyBjbGllbnQgaW5mbyAqLwogCWF0b21pY190CQljYl9zZXQ7ICAgICAvKiBzdWNjZXNzZnVsIENCX05VTEwgY2FsbCAqLwogCXN0cnVjdCBycGNfY2xudCAqICAgICAgIGNiX2NsaWVudDsKLQlzdHJ1Y3QgcnBjX2NyZWQJKgljYl9jcmVkOwogfTsKIAotLyogTWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgcGVyIHNlc3Npb24uIDEyOCBpcyB1c2VmdWwgZm9yIGxvbmcgaGF1bCBUQ1AgKi8KLSNkZWZpbmUgTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04JMTI4Ci0vKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBwZXIgc2xvdCBjYWNoZSBlbnRyeSAqLwotI2RlZmluZSBORlNEX1BBR0VTX1BFUl9TTE9UCTEKKy8qIE1heGltdW0gbnVtYmVyIG9mIHNsb3RzIHBlciBzZXNzaW9uLiAxNjAgaXMgdXNlZnVsIGZvciBsb25nIGhhdWwgVENQICovCisjZGVmaW5lIE5GU0RfTUFYX1NMT1RTX1BFUl9TRVNTSU9OICAgICAxNjAKIC8qIE1heGltdW0gbnVtYmVyIG9mIG9wZXJhdGlvbnMgcGVyIHNlc3Npb24gY29tcG91bmQgKi8KICNkZWZpbmUgTkZTRF9NQVhfT1BTX1BFUl9DT01QT1VORAkxNgotCi1zdHJ1Y3QgbmZzZDRfY2FjaGVfZW50cnkgewotCV9fYmUzMgkJY2Vfc3RhdHVzOwotCXN0cnVjdCBrdmVjCWNlX2RhdGF2OyAvKiBlbmNvZGVkIE5GU3Y0LjEgZGF0YSBpbiBycV9yZXMuaGVhZFswXSAqLwotCXN0cnVjdCBwYWdlCSpjZV9yZXNwYWdlc1tORlNEX1BBR0VTX1BFUl9TTE9UICsgMV07Ci0JaW50CQljZV9jYWNoZXRoaXM7Ci0Jc2hvcnQJCWNlX3Jlc3VzZWQ7Ci0JaW50CQljZV9vcGNudDsKLQlpbnQJCWNlX3JwY2hkcmxlbjsKLX07CisvKiBNYXhpbXVtICBzZXNzaW9uIHBlciBzbG90IGNhY2hlIHNpemUgKi8KKyNkZWZpbmUgTkZTRF9TTE9UX0NBQ0hFX1NJWkUJCTEwMjQKKy8qIE1heGltdW0gbnVtYmVyIG9mIE5GU0RfU0xPVF9DQUNIRV9TSVpFIHNsb3RzIHBlciBzZXNzaW9uICovCisjZGVmaW5lIE5GU0RfQ0FDSEVfU0laRV9TTE9UU19QRVJfU0VTU0lPTgkzMgorI2RlZmluZSBORlNEX01BWF9NRU1fUEVSX1NFU1NJT04gIFwKKwkJKE5GU0RfQ0FDSEVfU0laRV9TTE9UU19QRVJfU0VTU0lPTiAqIE5GU0RfU0xPVF9DQUNIRV9TSVpFKQogCiBzdHJ1Y3QgbmZzZDRfc2xvdCB7Ci0JYm9vbAkJCQlzbF9pbnVzZTsKLQl1MzIJCQkJc2xfc2VxaWQ7Ci0Jc3RydWN0IG5mc2Q0X2NhY2hlX2VudHJ5CXNsX2NhY2hlX2VudHJ5OworCWJvb2wJc2xfaW51c2U7CisJYm9vbAlzbF9jYWNoZXRoaXM7CisJdTE2CXNsX29wY250OworCXUzMglzbF9zZXFpZDsKKwlfX2JlMzIJc2xfc3RhdHVzOworCXUzMglzbF9kYXRhbGVuOworCWNoYXIJc2xfZGF0YVtdOwogfTsKIAogc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMgewpAQCAtMTI2LDYgKzEyOSwyNSBAQAogCXUzMgkJcmRtYV9hdHRyczsKIH07CiAKK3N0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbiB7CisJY2xpZW50aWRfdAkJCWNsaWVudGlkOworCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAkJc2Vzc2lvbmlkOworCXUzMgkJCQlzZXFpZDsKKwl1MzIJCQkJZmxhZ3M7CisJc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMJZm9yZV9jaGFubmVsOworCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzCWJhY2tfY2hhbm5lbDsKKwl1MzIJCQkJY2FsbGJhY2tfcHJvZzsKKwl1MzIJCQkJdWlkOworCXUzMgkJCQlnaWQ7Cit9OworCisvKiBUaGUgc2luZ2xlIHNsb3QgY2xpZW50aWQgY2FjaGUgc3RydWN0dXJlICovCitzdHJ1Y3QgbmZzZDRfY2xpZF9zbG90IHsKKwl1MzIJCQkJc2xfc2VxaWQ7CisJX19iZTMyCQkJCXNsX3N0YXR1czsKKwlzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24Jc2xfY3Jfc2VzOworfTsKKwogc3RydWN0IG5mc2Q0X3Nlc3Npb24gewogCXN0cnVjdCBrcmVmCQlzZV9yZWY7CiAJc3RydWN0IGxpc3RfaGVhZAlzZV9oYXNoOwkvKiBoYXNoIGJ5IHNlc3Npb25pZCAqLwpAQCAtMTM1LDcgKzE1Nyw3IEBACiAJc3RydWN0IG5mczRfc2Vzc2lvbmlkCXNlX3Nlc3Npb25pZDsKIAlzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyBzZV9mY2hhbm5lbDsKIAlzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyBzZV9iY2hhbm5lbDsKLQlzdHJ1Y3QgbmZzZDRfc2xvdAlzZV9zbG90c1tdOwkvKiBmb3J3YXJkIGNoYW5uZWwgc2xvdHMgKi8KKwlzdHJ1Y3QgbmZzZDRfc2xvdAkqc2Vfc2xvdHNbXTsJLyogZm9yd2FyZCBjaGFubmVsIHNsb3RzICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTE4MCw3ICsyMDIsNyBAQAogCWNoYXIgICAgICAgICAgICAgICAgICAgIGNsX3JlY2RpcltIRVhESVJfTEVOXTsgLyogcmVjb3ZlcnkgZGlyICovCiAJbmZzNF92ZXJpZmllcgkJY2xfdmVyaWZpZXI7IAkvKiBnZW5lcmF0ZWQgYnkgY2xpZW50ICovCiAJdGltZV90ICAgICAgICAgICAgICAgICAgY2xfdGltZTsgICAgICAgIC8qIHRpbWUgb2YgbGFzdCBsZWFzZSByZW5ld2FsICovCi0JX19iZTMyCQkJY2xfYWRkcjsgCS8qIGNsaWVudCBpcGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQljbF9hZGRyOyAJLyogY2xpZW50IGlwYWRkcmVzcyAqLwogCXUzMgkJCWNsX2ZsYXZvcjsJLyogc2V0Y2xpZW50aWQgcHNldWRvZmxhdm9yICovCiAJY2hhcgkJCSpjbF9wcmluY2lwYWw7CS8qIHNldGNsaWVudGlkIHByaW5jaXBhbCBuYW1lICovCiAJc3RydWN0IHN2Y19jcmVkCQljbF9jcmVkOyAJLyogc2V0Y2xpZW50aWQgcHJpbmNpcGFsICovCkBAIC0xOTIsOSArMjE0LDE3IEBACiAKIAkvKiBmb3IgbmZzNDEgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWNsX3Nlc3Npb25zOwotCXN0cnVjdCBuZnNkNF9zbG90CWNsX3Nsb3Q7CS8qIGNyZWF0ZV9zZXNzaW9uIHNsb3QgKi8KKwlzdHJ1Y3QgbmZzZDRfY2xpZF9zbG90CWNsX2NzX3Nsb3Q7CS8qIGNyZWF0ZV9zZXNzaW9uIHNsb3QgKi8KIAl1MzIJCQljbF9leGNoYW5nZV9mbGFnczsKIAlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJY2xfc2Vzc2lvbmlkOworCisJLyogZm9yIG5mczQxIGNhbGxiYWNrcyAqLworCS8qIFdlIGN1cnJlbnRseSBzdXBwb3J0IGEgc2luZ2xlIGJhY2sgY2hhbm5lbCB3aXRoIGEgc2luZ2xlIHNsb3QgKi8KKwl1bnNpZ25lZCBsb25nCQljbF9jYl9zbG90X2J1c3k7CisJdTMyCQkJY2xfY2Jfc2VxX25yOworCXN0cnVjdCBzdmNfeHBydAkJKmNsX2NiX3hwcnQ7CS8qIDQuMSBjYWxsYmFjayB0cmFuc3BvcnQgKi8KKwlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJY2xfY2Jfd2FpdHE7CS8qIGJhY2tjaGFubmVsIGNhbGxlcnMgbWF5ICovCisJCQkJCQkvKiB3YWl0IGhlcmUgZm9yIHNsb3RzICovCiB9OwogCiAvKiBzdHJ1Y3QgbmZzNF9jbGllbnRfcmVzZXQKQEAgLTM0NSw2ICszNzUsNyBAQAogZXh0ZXJuIF9fYmUzMiBuZnM0X2NoZWNrX29wZW5fcmVjbGFpbShjbGllbnRpZF90ICpjbGlkKTsKIGV4dGVybiB2b2lkIHB1dF9uZnM0X2NsaWVudChzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCk7CiBleHRlcm4gdm9pZCBuZnM0X2ZyZWVfc3RhdGVvd25lcihzdHJ1Y3Qga3JlZiAqa3JlZik7CitleHRlcm4gaW50IHNldF9jYWxsYmFja19jcmVkKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZzZDRfcHJvYmVfY2FsbGJhY2soc3RydWN0IG5mczRfY2xpZW50ICpjbHApOwogZXh0ZXJuIHZvaWQgbmZzZDRfY2JfcmVjYWxsKHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwKTsKIGV4dGVybiB2b2lkIG5mczRfcHV0X2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaCBiL2luY2x1ZGUvbGludXgvbmZzZC94ZHI0LmgKaW5kZXggMmJhY2Y3NS4uNzMxNjRjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyNC5oCkBAIC01MSw3ICs1MSw3IEBACiAJLyogRm9yIHNlc3Npb25zIERSQyAqLwogCXN0cnVjdCBuZnNkNF9zZXNzaW9uCSpzZXNzaW9uOwogCXN0cnVjdCBuZnNkNF9zbG90CSpzbG90OwotCV9fYmUzMgkJCSpzdGF0cDsKKwlfX2JlMzIJCQkqZGF0YXA7CiAJc2l6ZV90CQkJaW92bGVuOwogCXUzMgkJCW1pbm9ydmVyc2lvbjsKIAl1MzIJCQlzdGF0dXM7CkBAIC0zNjYsMTggKzM2Niw2IEBACiAJaW50CQlzcGFfaG93OwogfTsKIAotc3RydWN0IG5mc2Q0X2NyZWF0ZV9zZXNzaW9uIHsKLQljbGllbnRpZF90CQljbGllbnRpZDsKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJc2Vzc2lvbmlkOwotCXUzMgkJCXNlcWlkOwotCXUzMgkJCWZsYWdzOwotCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzIGZvcmVfY2hhbm5lbDsKLQlzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyBiYWNrX2NoYW5uZWw7Ci0JdTMyCQkJY2FsbGJhY2tfcHJvZzsKLQl1MzIJCQl1aWQ7Ci0JdTMyCQkJZ2lkOwotfTsKLQogc3RydWN0IG5mc2Q0X3NlcXVlbmNlIHsKIAlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJc2Vzc2lvbmlkOwkJLyogcmVxdWVzdC9yZXNwb25zZSAqLwogCXUzMgkJCXNlcWlkOwkJCS8qIHJlcXVlc3QvcmVzcG9uc2UgKi8KQEAgLTQ3OSwxMyArNDY3LDEyIEBACiBzdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfaXNfc29sb19zZXF1ZW5jZShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3ApCiB7CiAJc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncyA9IHJlc3AtPnJxc3RwLT5ycV9hcmdwOwotCXJldHVybiBhcmdzLT5vcGNudCA9PSAxOworCXJldHVybiByZXNwLT5vcGNudCA9PSAxICYmIGFyZ3MtPm9wc1swXS5vcG51bSA9PSBPUF9TRVFVRU5DRTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIG5mc2Q0X25vdF9jYWNoZWQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwKQogewotCXJldHVybiAhcmVzcC0+Y3N0YXRlLnNsb3QtPnNsX2NhY2hlX2VudHJ5LmNlX2NhY2hldGhpcyB8fAotCQkJbmZzZDRfaXNfc29sb19zZXF1ZW5jZShyZXNwKTsKKwlyZXR1cm4gIXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZXRoaXMgfHwgbmZzZDRfaXNfc29sb19zZXF1ZW5jZShyZXNwKTsKIH0KIAogI2RlZmluZSBORlM0X1NWQ19YRFJTSVpFCQlzaXplb2Yoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb29tLmggYi9pbmNsdWRlL2xpbnV4L29vbS5oCmluZGV4IGE3OTc5YmEuLjZhYWM1ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb29tLmgKKysrIGIvaW5jbHVkZS9saW51eC9vb20uaApAQCAtMzAsNSArMzAsMTYgQEAKIGV4dGVybiBpbnQgcmVnaXN0ZXJfb29tX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX29vbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIAorZXh0ZXJuIGJvb2wgb29tX2tpbGxlcl9kaXNhYmxlZDsKKworc3RhdGljIGlubGluZSB2b2lkIG9vbV9raWxsZXJfZGlzYWJsZSh2b2lkKQoreworCW9vbV9raWxsZXJfZGlzYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb29tX2tpbGxlcl9lbmFibGUodm9pZCkKK3sKKwlvb21fa2lsbGVyX2Rpc2FibGVkID0gZmFsc2U7Cit9CiAjZW5kaWYgLyogX19LRVJORUxfXyovCiAjZW5kaWYgLyogX0lOQ0xVREVfTElOVVhfT09NX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggMmI4N2FjZi4uMTNkZTc4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTE1OCw2ICsxNTgsOSBAQAogc3RhdGljIGlubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpCQlcCiAJCXsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI2xuYW1lLCAmcGFnZS0+ZmxhZ3MpOyB9CiAKKyNkZWZpbmUgX19URVNUQ0xFQVJGTEFHKHVuYW1lLCBsbmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgaW50IF9fVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpCQlcCisJCXsgcmV0dXJuIF9fdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbG5hbWUsICZwYWdlLT5mbGFncyk7IH0KIAogI2RlZmluZSBQQUdFRkxBRyh1bmFtZSwgbG5hbWUpIFRFU1RQQUdFRkxBRyh1bmFtZSwgbG5hbWUpCQlcCiAJU0VUUEFHRUZMQUcodW5hbWUsIGxuYW1lKSBDTEVBUlBBR0VGTEFHKHVuYW1lLCBsbmFtZSkKQEAgLTE4NCw2ICsxODcsOSBAQAogI2RlZmluZSBURVNUQ0xFQVJGTEFHX0ZBTFNFKHVuYW1lKQkJCQkJXAogc3RhdGljIGlubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIDA7IH0KIAorI2RlZmluZSBfX1RFU1RDTEVBUkZMQUdfRkFMU0UodW5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIGludCBfX1Rlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7IHJldHVybiAwOyB9CisKIHN0cnVjdCBwYWdlOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKIFRFU1RQQUdFRkxBRyhMb2NrZWQsIGxvY2tlZCkgVEVTVFNFVEZMQUcoTG9ja2VkLCBsb2NrZWQpCkBAIC0yNTAsMTEgKzI1NiwxMSBAQAogI2lmZGVmIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQKICNkZWZpbmUgTUxPQ0tfUEFHRVMgMQogUEFHRUZMQUcoTWxvY2tlZCwgbWxvY2tlZCkgX19DTEVBUlBBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCi0JVEVTVFNDRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQorCVRFU1RTQ0ZMQUcoTWxvY2tlZCwgbWxvY2tlZCkgX19URVNUQ0xFQVJGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCiAjZWxzZQogI2RlZmluZSBNTE9DS19QQUdFUyAwCi1QQUdFRkxBR19GQUxTRShNbG9ja2VkKQotCVNFVFBBR0VGTEFHX05PT1AoTWxvY2tlZCkgVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKQorUEFHRUZMQUdfRkFMU0UoTWxvY2tlZCkgU0VUUEFHRUZMQUdfTk9PUChNbG9ja2VkKQorCVRFU1RDTEVBUkZMQUdfRkFMU0UoTWxvY2tlZCkgX19URVNUQ0xFQVJGTEFHX0ZBTFNFKE1sb2NrZWQpCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX1VTRVNfUEdfVU5DQUNIRUQKQEAgLTM5Niw4ICs0MDIsOCBAQAogICovCiAjZGVmaW5lIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUAkoKDEgPDwgTlJfUEFHRUZMQUdTKSAtIDEpCiAKLSNlbmRpZiAvKiAhX19HRU5FUkFUSU5HX0JPVU5EU19IICovCi0KKyNkZWZpbmUgUEFHRV9GTEFHU19QUklWQVRFCQkJCVwKKwkoMSA8PCBQR19wcml2YXRlIHwgMSA8PCBQR19wcml2YXRlXzIpCiAvKioKICAqIHBhZ2VfaGFzX3ByaXZhdGUgLSBEZXRlcm1pbmUgaWYgcGFnZSBoYXMgcHJpdmF0ZSBzdHVmZgogICogQHBhZ2U6IFRoZSBwYWdlIHRvIGJlIGNoZWNrZWQKQEAgLTQwNSw4ICs0MTEsMTEgQEAKICAqIERldGVybWluZSBpZiBhIHBhZ2UgaGFzIHByaXZhdGUgc3R1ZmYsIGluZGljYXRpbmcgdGhhdCByZWxlYXNlIHJvdXRpbmVzCiAgKiBzaG91bGQgYmUgaW52b2tlZCB1cG9uIGl0LgogICovCi0jZGVmaW5lIHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkJCQlcCi0JKChwYWdlKS0+ZmxhZ3MgJiAoKDEgPDwgUEdfcHJpdmF0ZSkgfAlcCi0JCQkgICgxIDw8IFBHX3ByaXZhdGVfMikpKQorc3RhdGljIGlubGluZSBpbnQgcGFnZV9oYXNfcHJpdmF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gISEocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX1BSSVZBVEUpOworfQorCisjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFNfSCAqLwogCiAjZW5kaWYJLyogUEFHRV9GTEFHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKaW5kZXggMTNmMTI2Yy4uYWRhNzc5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaApAQCAtMTA1LDE0ICsxMDUsMTQgQEAKIAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorCisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUAogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkKTsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXAoc3dwX2VudHJ5X3QgZW50KTsKIGV4dGVybiBpbnQgc3dhcF9jZ3JvdXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyk7CiBleHRlcm4gdm9pZCBzd2FwX2Nncm91cF9zd2Fwb2ZmKGludCB0eXBlKTsKICNlbHNlCi0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiBzdGF0aWMgaW5saW5lCiB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggM2I2Yjc4OC4uNzgwMzU2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTU0Myw2ICs1NDMsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRQkweDc0NTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDCTB4NzQ1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMyX0JSSURHRQkweDc0NTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU01CVVMJMHg3ODBiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNV9JREUgICAgMHgyMDhGCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EgICAgMHgyMDkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9GTEFTSCAgMHgyMDkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAppbmRleCA5NzJmOTBkLi4zNjhiZDcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKQEAgLTEsNSArMSw5IEBACiAvKgotICogIFBlcmZvcm1hbmNlIGNvdW50ZXJzOgorICogIE5PVEU6IHRoaXMgZmlsZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUga2VybmVsIHJlbGVhc2UsIGl0IGlzCisgKiAgcHJvdmlkZWQgYXMgYSBjb3VydGVzeSBjb3B5IG9mIHVzZXItc3BhY2UgY29kZSB0aGF0IHJlbGllcyBvbiB0aGUKKyAqICBvbGQgKHByZS1yZW5hbWUpIHN5bWJvbHMgYW5kIGNvbnN0YW50cy4KKyAqCisgKiAgUGVyZm9ybWFuY2UgZXZlbnRzOgogICoKICAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgpAQCAtMTMxLDE5ICsxMzUsMTkgQEAKICAqIGFzIHNwZWNpZmllZCBieSBhdHRyLnJlYWRfZm9ybWF0OgogICoKICAqIHN0cnVjdCByZWFkX2Zvcm1hdCB7Ci0gKiAJeyB1NjQJCXZhbHVlOwotICogCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9FTkFCTEVECi0gKiAJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKLSAqIAkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKLSAqIAl9ICYmICFQRVJGX0ZPUk1BVF9HUk9VUAorICoJeyB1NjQJCXZhbHVlOworICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKKyAqCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCiAgKgotICogCXsgdTY0CQlucjsKLSAqIAkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAotICogCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCi0gKiAJICB7IHU2NAkJdmFsdWU7Ci0gKiAJICAgIHsgdTY0CWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAotICogCSAgfQkJY250cltucl07Ci0gKiAJfSAmJiBQRVJGX0ZPUk1BVF9HUk9VUAorICoJeyB1NjQJCW5yOworICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl2YWx1ZTsKKyAqCSAgICB7IHU2NAlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKKyAqCSAgfQkJY250cltucl07CisgKgl9ICYmIFBFUkZfRk9STUFUX0dST1VQCiAgKiB9OwogICovCiBlbnVtIHBlcmZfY291bnRlcl9yZWFkX2Zvcm1hdCB7CkBAIC0xOTksMTAgKzIwMywxNCBAQAogCQkJCWluaGVyaXRfc3RhdCAgIDogIDEsIC8qIHBlciB0YXNrIGNvdW50cyAgICAgICAqLwogCQkJCWVuYWJsZV9vbl9leGVjIDogIDEsIC8qIG5leHQgZXhlYyBlbmFibGVzICAgICAqLwogCQkJCXRhc2sgICAgICAgICAgIDogIDEsIC8qIHRyYWNlIGZvcmsvZXhpdCAgICAgICAqLworCQkJCXdhdGVybWFyayAgICAgIDogIDEsIC8qIHdha2V1cF93YXRlcm1hcmsgICAgICAqLwogCi0JCQkJX19yZXNlcnZlZF8xICAgOiA1MDsKKwkJCQlfX3Jlc2VydmVkXzEgICA6IDQ5OwogCi0JX191MzIJCQl3YWtldXBfZXZlbnRzOwkvKiB3YWtldXAgZXZlcnkgbiBldmVudHMgKi8KKwl1bmlvbiB7CisJCV9fdTMyCQl3YWtldXBfZXZlbnRzOwkgIC8qIHdha2V1cCBldmVyeSBuIGV2ZW50cyAqLworCQlfX3UzMgkJd2FrZXVwX3dhdGVybWFyazsgLyogYnl0ZXMgYmVmb3JlIHdha2V1cCAgICovCisJfTsKIAlfX3UzMgkJCV9fcmVzZXJ2ZWRfMjsKIAogCV9fdTY0CQkJX19yZXNlcnZlZF8zOwpAQCAtMzEwLDkgKzMxOCw5IEBACiAKIAkvKgogCSAqIHN0cnVjdCB7Ci0JICogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICogCXU2NAkJCQlpZDsKLQkgKiAJdTY0CQkJCWxvc3Q7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1NjQJCQkJaWQ7CisJICoJdTY0CQkJCWxvc3Q7CiAJICogfTsKIAkgKi8KIAlQRVJGX0VWRU5UX0xPU1QJCQk9IDIsCkBAIC0zMzIsNiArMzQwLDcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKKwkgKgl1NjQJCQkJdGltZTsKIAkgKiB9OwogCSAqLwogCVBFUkZfRVZFTlRfRVhJVAkJCT0gNCwKQEAgLTM1MiwxNiArMzYxLDE3IEBACiAJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKIAkgKgl1MzIJCQkJcGlkLCBwcGlkOwogCSAqCXUzMgkJCQl0aWQsIHB0aWQ7CisJICoJeyB1NjQJCQkJdGltZTsgICAgIH0gJiYgUEVSRl9TQU1QTEVfVElNRQogCSAqIH07CiAJICovCiAJUEVSRl9FVkVOVF9GT1JLCQkJPSA3LAogCiAJLyoKIAkgKiBzdHJ1Y3QgewotCSAqIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqIAl1MzIJCQkJcGlkLCB0aWQ7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1MzIJCQkJcGlkLCB0aWQ7CiAJICoKLQkgKiAJc3RydWN0IHJlYWRfZm9ybWF0CQl2YWx1ZXM7CisJICoJc3RydWN0IHJlYWRfZm9ybWF0CQl2YWx1ZXM7CiAJICogfTsKIAkgKi8KIAlQRVJGX0VWRU5UX1JFQUQJCQk9IDgsCkBAIC0zNzcsMjMgKzM4NywyMyBAQAogCSAqCXsgdTY0CQkJaWQ7CSAgfSAmJiBQRVJGX1NBTVBMRV9JRAogCSAqCXsgdTY0CQkJc3RyZWFtX2lkO30gJiYgUEVSRl9TQU1QTEVfU1RSRUFNX0lECiAJICoJeyB1MzIJCQljcHUsIHJlczsgfSAmJiBQRVJGX1NBTVBMRV9DUFUKLQkgKiAJeyB1NjQJCQlwZXJpb2Q7ICAgfSAmJiBQRVJGX1NBTVBMRV9QRVJJT0QKKwkgKgl7IHU2NAkJCXBlcmlvZDsgICB9ICYmIFBFUkZfU0FNUExFX1BFUklPRAogCSAqCiAJICoJeyBzdHJ1Y3QgcmVhZF9mb3JtYXQJdmFsdWVzOwkgIH0gJiYgUEVSRl9TQU1QTEVfUkVBRAogCSAqCiAJICoJeyB1NjQJCQluciwKIAkgKgkgIHU2NAkJCWlwc1tucl07ICB9ICYmIFBFUkZfU0FNUExFX0NBTExDSEFJTgogCSAqCi0JICogCSMKLQkgKiAJIyBUaGUgUkFXIHJlY29yZCBiZWxvdyBpcyBvcGFxdWUgZGF0YSB3cnQgdGhlIEFCSQotCSAqIAkjCi0JICogCSMgVGhhdCBpcywgdGhlIEFCSSBkb2Vzbid0IG1ha2UgYW55IHByb21pc2VzIHdydCB0bwotCSAqIAkjIHRoZSBzdGFiaWxpdHkgb2YgaXRzIGNvbnRlbnQsIGl0IG1heSB2YXJ5IGRlcGVuZGluZwotCSAqIAkjIG9uIGV2ZW50LCBoYXJkd2FyZSwga2VybmVsIHZlcnNpb24gYW5kIHBoYXNlIG9mCi0JICogCSMgdGhlIG1vb24uCi0JICogCSMKLQkgKiAJIyBJbiBvdGhlciB3b3JkcywgUEVSRl9TQU1QTEVfUkFXIGNvbnRlbnRzIGFyZSBub3QgYW4gQUJJLgotCSAqIAkjCisJICoJIworCSAqCSMgVGhlIFJBVyByZWNvcmQgYmVsb3cgaXMgb3BhcXVlIGRhdGEgd3J0IHRoZSBBQkkKKwkgKgkjCisJICoJIyBUaGF0IGlzLCB0aGUgQUJJIGRvZXNuJ3QgbWFrZSBhbnkgcHJvbWlzZXMgd3J0IHRvCisJICoJIyB0aGUgc3RhYmlsaXR5IG9mIGl0cyBjb250ZW50LCBpdCBtYXkgdmFyeSBkZXBlbmRpbmcKKwkgKgkjIG9uIGV2ZW50LCBoYXJkd2FyZSwga2VybmVsIHZlcnNpb24gYW5kIHBoYXNlIG9mCisJICoJIyB0aGUgbW9vbi4KKwkgKgkjCisJICoJIyBJbiBvdGhlciB3b3JkcywgUEVSRl9TQU1QTEVfUkFXIGNvbnRlbnRzIGFyZSBub3QgYW4gQUJJLgorCSAqCSMKIAkgKgogCSAqCXsgdTMyCQkJc2l6ZTsKIAkgKgkgIGNoYXIgICAgICAgICAgICAgICAgICBkYXRhW3NpemVdO30mJiBQRVJGX1NBTVBMRV9SQVcKQEAgLTQxNiwzOTIgKzQyNiwxNiBAQAogCVBFUkZfQ09OVEVYVF9NQVgJCT0gKF9fdTY0KS00MDk1LAogfTsKIAotI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAJKDFVIDw8IDApCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQJKDFVIDw8IDEpCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKgotICogS2VybmVsLWludGVybmFsIGRhdGEgdHlwZXMgYW5kIGRlZmluaXRpb25zOgotICovCi0KLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUwotIyBpbmNsdWRlIDxhc20vcGVyZl9jb3VudGVyLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotI2RlZmluZSBQRVJGX01BWF9TVEFDS19ERVBUSAkJMjU1Ci0KLXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSB7Ci0JX191NjQJCQkJbnI7Ci0JX191NjQJCQkJaXBbUEVSRl9NQVhfU1RBQ0tfREVQVEhdOwotfTsKLQotc3RydWN0IHBlcmZfcmF3X3JlY29yZCB7Ci0JdTMyCQkJCXNpemU7Ci0Jdm9pZAkJCQkqZGF0YTsKLX07Ci0KLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQotLyoqCi0gKiBzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyIC0gcGVyZm9ybWFuY2UgY291bnRlciBoYXJkd2FyZSBkZXRhaWxzOgotICovCi1zdHJ1Y3QgaHdfcGVyZl9jb3VudGVyIHsKLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUwotCXVuaW9uIHsKLQkJc3RydWN0IHsgLyogaGFyZHdhcmUgKi8KLQkJCXU2NAkJY29uZmlnOwotCQkJdW5zaWduZWQgbG9uZwljb25maWdfYmFzZTsKLQkJCXVuc2lnbmVkIGxvbmcJY291bnRlcl9iYXNlOwotCQkJaW50CQlpZHg7Ci0JCX07Ci0JCXVuaW9uIHsgLyogc29mdHdhcmUgKi8KLQkJCWF0b21pYzY0X3QJY291bnQ7Ci0JCQlzdHJ1Y3QgaHJ0aW1lcglocnRpbWVyOwotCQl9OwotCX07Ci0JYXRvbWljNjRfdAkJCXByZXZfY291bnQ7Ci0JdTY0CQkJCXNhbXBsZV9wZXJpb2Q7Ci0JdTY0CQkJCWxhc3RfcGVyaW9kOwotCWF0b21pYzY0X3QJCQlwZXJpb2RfbGVmdDsKLQl1NjQJCQkJaW50ZXJydXB0czsKLQotCXU2NAkJCQlmcmVxX2NvdW50OwotCXU2NAkJCQlmcmVxX2ludGVycnVwdHM7Ci0JdTY0CQkJCWZyZXFfc3RhbXA7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBwZXJmX2NvdW50ZXI7Ci0KLS8qKgotICogc3RydWN0IHBtdSAtIGdlbmVyaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0Ci0gKi8KLXN0cnVjdCBwbXUgewotCWludCAoKmVuYWJsZSkJCQkoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcik7Ci0Jdm9pZCAoKmRpc2FibGUpCQkJKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpOwotCXZvaWQgKCpyZWFkKQkJCShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKTsKLQl2b2lkICgqdW50aHJvdHRsZSkJCShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKTsKLX07Ci0KLS8qKgotICogZW51bSBwZXJmX2NvdW50ZXJfYWN0aXZlX3N0YXRlIC0gdGhlIHN0YXRlcyBvZiBhIGNvdW50ZXIKLSAqLwotZW51bSBwZXJmX2NvdW50ZXJfYWN0aXZlX3N0YXRlIHsKLQlQRVJGX0NPVU5URVJfU1RBVEVfRVJST1IJPSAtMiwKLQlQRVJGX0NPVU5URVJfU1RBVEVfT0ZGCQk9IC0xLAotCVBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRQk9ICAwLAotCVBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkUJPSAgMSwKLX07Ci0KLXN0cnVjdCBmaWxlOwotCi1zdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgewotCXN0cnVjdCByY3VfaGVhZAkJCXJjdV9oZWFkOwotCWludAkJCQlucl9wYWdlczsJLyogbnIgb2YgZGF0YSBwYWdlcyAgKi8KLQlpbnQJCQkJd3JpdGFibGU7CS8qIGFyZSB3ZSB3cml0YWJsZSAgICovCi0JaW50CQkJCW5yX2xvY2tlZDsJLyogbnIgcGFnZXMgbWxvY2tlZCAgKi8KLQotCWF0b21pY190CQkJcG9sbDsJCS8qIFBPTExfIGZvciB3YWtldXBzICovCi0JYXRvbWljX3QJCQlldmVudHM7CQkvKiBldmVudCBsaW1pdCAgICAgICAqLwotCi0JYXRvbWljX2xvbmdfdAkJCWhlYWQ7CQkvKiB3cml0ZSBwb3NpdGlvbiAgICAqLwotCWF0b21pY19sb25nX3QJCQlkb25lX2hlYWQ7CS8qIGNvbXBsZXRlZCBoZWFkICAgICovCi0KLQlhdG9taWNfdAkJCWxvY2s7CQkvKiBjb25jdXJyZW50IHdyaXRlcyAqLwotCWF0b21pY190CQkJd2FrZXVwOwkJLyogbmVlZHMgYSB3YWtldXAgICAgKi8KLQlhdG9taWNfdAkJCWxvc3Q7CQkvKiBuciByZWNvcmRzIGxvc3QgICAqLwotCi0Jc3RydWN0IHBlcmZfY291bnRlcl9tbWFwX3BhZ2UgICAqdXNlcl9wYWdlOwotCXZvaWQJCQkJKmRhdGFfcGFnZXNbMF07Ci19OwotCi1zdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5IHsKLQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICpuZXh0OwotCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgcGVyZl9jb3VudGVyIC0gcGVyZm9ybWFuY2UgY291bnRlciBrZXJuZWwgcmVwcmVzZW50YXRpb246Ci0gKi8KLXN0cnVjdCBwZXJmX2NvdW50ZXIgewotI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCi0Jc3RydWN0IGxpc3RfaGVhZAkJbGlzdF9lbnRyeTsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlldmVudF9lbnRyeTsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWJsaW5nX2xpc3Q7Ci0JaW50CQkJCW5yX3NpYmxpbmdzOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIJCSpncm91cF9sZWFkZXI7Ci0Jc3RydWN0IHBlcmZfY291bnRlcgkJKm91dHB1dDsKLQljb25zdCBzdHJ1Y3QgcG11CQkqcG11OwotCi0JZW51bSBwZXJmX2NvdW50ZXJfYWN0aXZlX3N0YXRlCXN0YXRlOwotCWF0b21pYzY0X3QJCQljb3VudDsKLQotCS8qCi0JICogVGhlc2UgYXJlIHRoZSB0b3RhbCB0aW1lIGluIG5hbm9zZWNvbmRzIHRoYXQgdGhlIGNvdW50ZXIKLQkgKiBoYXMgYmVlbiBlbmFibGVkIChpLmUuIGVsaWdpYmxlIHRvIHJ1biwgYW5kIHRoZSB0YXNrIGhhcwotCSAqIGJlZW4gc2NoZWR1bGVkIGluLCBpZiB0aGlzIGlzIGEgcGVyLXRhc2sgY291bnRlcikKLQkgKiBhbmQgcnVubmluZyAoc2NoZWR1bGVkIG9udG8gdGhlIENQVSksIHJlc3BlY3RpdmVseS4KLQkgKgotCSAqIFRoZXkgYXJlIGNvbXB1dGVkIGZyb20gdHN0YW1wX2VuYWJsZWQsIHRzdGFtcF9ydW5uaW5nIGFuZAotCSAqIHRzdGFtcF9zdG9wcGVkIHdoZW4gdGhlIGNvdW50ZXIgaXMgaW4gSU5BQ1RJVkUgb3IgQUNUSVZFIHN0YXRlLgotCSAqLwotCXU2NAkJCQl0b3RhbF90aW1lX2VuYWJsZWQ7Ci0JdTY0CQkJCXRvdGFsX3RpbWVfcnVubmluZzsKLQotCS8qCi0JICogVGhlc2UgYXJlIHRpbWVzdGFtcHMgdXNlZCBmb3IgY29tcHV0aW5nIHRvdGFsX3RpbWVfZW5hYmxlZAotCSAqIGFuZCB0b3RhbF90aW1lX3J1bm5pbmcgd2hlbiB0aGUgY291bnRlciBpcyBpbiBJTkFDVElWRSBvcgotCSAqIEFDVElWRSBzdGF0ZSwgbWVhc3VyZWQgaW4gbmFub3NlY29uZHMgZnJvbSBhbiBhcmJpdHJhcnkgcG9pbnQKLQkgKiBpbiB0aW1lLgotCSAqIHRzdGFtcF9lbmFibGVkOiB0aGUgbm90aW9uYWwgdGltZSB3aGVuIHRoZSBjb3VudGVyIHdhcyBlbmFibGVkCi0JICogdHN0YW1wX3J1bm5pbmc6IHRoZSBub3Rpb25hbCB0aW1lIHdoZW4gdGhlIGNvdW50ZXIgd2FzIHNjaGVkdWxlZCBvbgotCSAqIHRzdGFtcF9zdG9wcGVkOiBpbiBJTkFDVElWRSBzdGF0ZSwgdGhlIG5vdGlvbmFsIHRpbWUgd2hlbiB0aGUKLQkgKgljb3VudGVyIHdhcyBzY2hlZHVsZWQgb2ZmLgotCSAqLwotCXU2NAkJCQl0c3RhbXBfZW5hYmxlZDsKLQl1NjQJCQkJdHN0YW1wX3J1bm5pbmc7Ci0JdTY0CQkJCXRzdGFtcF9zdG9wcGVkOwotCi0Jc3RydWN0IHBlcmZfY291bnRlcl9hdHRyCWF0dHI7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlcgkJaHc7Ci0KLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQJKmN0eDsKLQlzdHJ1Y3QgZmlsZQkJCSpmaWxwOwotCi0JLyoKLQkgKiBUaGVzZSBhY2N1bXVsYXRlIHRvdGFsIHRpbWUgKGluIG5hbm9zZWNvbmRzKSB0aGF0IGNoaWxkcmVuCi0JICogY291bnRlcnMgaGF2ZSBiZWVuIGVuYWJsZWQgYW5kIHJ1bm5pbmcsIHJlc3BlY3RpdmVseS4KLQkgKi8KLQlhdG9taWM2NF90CQkJY2hpbGRfdG90YWxfdGltZV9lbmFibGVkOwotCWF0b21pYzY0X3QJCQljaGlsZF90b3RhbF90aW1lX3J1bm5pbmc7Ci0KLQkvKgotCSAqIFByb3RlY3QgYXR0YWNoL2RldGFjaCBhbmQgY2hpbGRfbGlzdDoKLQkgKi8KLQlzdHJ1Y3QgbXV0ZXgJCQljaGlsZF9tdXRleDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQljaGlsZF9saXN0OwotCXN0cnVjdCBwZXJmX2NvdW50ZXIJCSpwYXJlbnQ7Ci0KLQlpbnQJCQkJb25jcHU7Ci0JaW50CQkJCWNwdTsKLQotCXN0cnVjdCBsaXN0X2hlYWQJCW93bmVyX2VudHJ5OwotCXN0cnVjdCB0YXNrX3N0cnVjdAkJKm93bmVyOwotCi0JLyogbW1hcCBiaXRzICovCi0Jc3RydWN0IG11dGV4CQkJbW1hcF9tdXRleDsKLQlhdG9taWNfdAkJCW1tYXBfY291bnQ7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhCQkqZGF0YTsKLQotCS8qIHBvbGwgcmVsYXRlZCAqLwotCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0cTsKLQlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkJKmZhc3luYzsKLQotCS8qIGRlbGF5ZWQgd29yayBmb3IgTk1JcyBhbmQgc3VjaCAqLwotCWludAkJCQlwZW5kaW5nX3dha2V1cDsKLQlpbnQJCQkJcGVuZGluZ19raWxsOwotCWludAkJCQlwZW5kaW5nX2Rpc2FibGU7Ci0Jc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeQlwZW5kaW5nOwotCi0JYXRvbWljX3QJCQlldmVudF9saW1pdDsKLQotCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgcGVyZl9jb3VudGVyICopOwotCXN0cnVjdCByY3VfaGVhZAkJCXJjdV9oZWFkOwotCi0Jc3RydWN0IHBpZF9uYW1lc3BhY2UJCSpuczsKLQl1NjQJCQkJaWQ7Ci0jZW5kaWYKLX07Ci0KLS8qKgotICogc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0IC0gY291bnRlciBjb250ZXh0IHN0cnVjdHVyZQotICoKLSAqIFVzZWQgYXMgYSBjb250YWluZXIgZm9yIHRhc2sgY291bnRlcnMgYW5kIENQVSBjb3VudGVycyBhcyB3ZWxsOgotICovCi1zdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgewotCS8qCi0JICogUHJvdGVjdCB0aGUgc3RhdGVzIG9mIHRoZSBjb3VudGVycyBpbiB0aGUgbGlzdCwKLQkgKiBucl9hY3RpdmUsIGFuZCB0aGUgbGlzdDoKLQkgKi8KLQlzcGlubG9ja190CQkJbG9jazsKLQkvKgotCSAqIFByb3RlY3QgdGhlIGxpc3Qgb2YgY291bnRlcnMuICBMb2NraW5nIGVpdGhlciBtdXRleCBvciBsb2NrCi0JICogaXMgc3VmZmljaWVudCB0byBlbnN1cmUgdGhlIGxpc3QgZG9lc24ndCBjaGFuZ2U7IHRvIGNoYW5nZQotCSAqIHRoZSBsaXN0IHlvdSBuZWVkIHRvIGxvY2sgYm90aCB0aGUgbXV0ZXggYW5kIHRoZSBzcGlubG9jay4KLQkgKi8KLQlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKLQotCXN0cnVjdCBsaXN0X2hlYWQJCWNvdW50ZXJfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlldmVudF9saXN0OwotCWludAkJCQlucl9jb3VudGVyczsKLQlpbnQJCQkJbnJfYWN0aXZlOwotCWludAkJCQlpc19hY3RpdmU7Ci0JaW50CQkJCW5yX3N0YXQ7Ci0JYXRvbWljX3QJCQlyZWZjb3VudDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSp0YXNrOwotCi0JLyoKLQkgKiBDb250ZXh0IGNsb2NrLCBydW5zIHdoZW4gY29udGV4dCBlbmFibGVkLgotCSAqLwotCXU2NAkJCQl0aW1lOwotCXU2NAkJCQl0aW1lc3RhbXA7Ci0KLQkvKgotCSAqIFRoZXNlIGZpZWxkcyBsZXQgdXMgZGV0ZWN0IHdoZW4gdHdvIGNvbnRleHRzIGhhdmUgYm90aAotCSAqIGJlZW4gY2xvbmVkIChpbmhlcml0ZWQpIGZyb20gYSBjb21tb24gYW5jZXN0b3IuCi0JICovCi0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0CSpwYXJlbnRfY3R4OwotCXU2NAkJCQlwYXJlbnRfZ2VuOwotCXU2NAkJCQlnZW5lcmF0aW9uOwotCWludAkJCQlwaW5fY291bnQ7Ci0Jc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBwZXJmX2NvdW50ZXJfY3B1X2NvbnRleHQgLSBwZXIgY3B1IGNvdW50ZXIgY29udGV4dCBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dAljdHg7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0CSp0YXNrX2N0eDsKLQlpbnQJCQkJYWN0aXZlX29uY3B1OwotCWludAkJCQltYXhfcGVydGFzazsKLQlpbnQJCQkJZXhjbHVzaXZlOwotCi0JLyoKLQkgKiBSZWN1cnNpb24gYXZvaWRhbmNlOgotCSAqCi0JICogdGFzaywgc29mdGlycSwgaXJxLCBubWkgY29udGV4dAotCSAqLwotCWludAkJCQlyZWN1cnNpb25bNF07Ci19OwotCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX05PX0dST1VQCQkoMVUgPDwgMCkKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkJKDFVIDw8IDEpCiAKIC8qCi0gKiBTZXQgYnkgYXJjaGl0ZWN0dXJlIGNvZGU6CisgKiBJbiBjYXNlIHNvbWUgYXBwIHN0aWxsIHJlZmVyZW5jZXMgdGhlIG9sZCBzeW1ib2xzOgogICovCi1leHRlcm4gaW50IHBlcmZfbWF4X2NvdW50ZXJzOwogCi1leHRlcm4gY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcik7CisjZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JCV9fTlJfcGVyZl9ldmVudF9vcGVuCiAKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOwotZXh0ZXJuIGludCBwZXJmX2NvdW50ZXJfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLWV4dGVybiB2b2lkIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl9kb19wZW5kaW5nKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGVyZl9jb3VudGVyX3ByaW50X2RlYnVnKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19wZXJmX2Rpc2FibGUodm9pZCk7Ci1leHRlcm4gYm9vbCBfX3BlcmZfZW5hYmxlKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGVyZl9kaXNhYmxlKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGVyZl9lbmFibGUodm9pZCk7Ci1leHRlcm4gaW50IHBlcmZfY291bnRlcl90YXNrX2Rpc2FibGUodm9pZCk7Ci1leHRlcm4gaW50IHBlcmZfY291bnRlcl90YXNrX2VuYWJsZSh2b2lkKTsKLWV4dGVybiBpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cF9sZWFkZXIsCi0JICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2Uoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcik7CisjZGVmaW5lIFBSX1RBU0tfUEVSRl9DT1VOVEVSU19ESVNBQkxFCVBSX1RBU0tfUEVSRl9FVkVOVFNfRElTQUJMRQorI2RlZmluZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRU5BQkxFCVBSX1RBU0tfUEVSRl9FVkVOVFNfRU5BQkxFCiAKLXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIHsKLQlzdHJ1Y3QgcHRfcmVncwkJCSpyZWdzOwotCXU2NAkJCQlhZGRyOwotCXU2NAkJCQlwZXJpb2Q7Ci0Jc3RydWN0IHBlcmZfcmF3X3JlY29yZAkJKnJhdzsKLX07Ci0KLWV4dGVybiBpbnQgcGVyZl9jb3VudGVyX292ZXJmbG93KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBubWksCi0JCQkJIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKTsKLWV4dGVybiB2b2lkIHBlcmZfY291bnRlcl9vdXRwdXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IG5taSwKLQkJCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSk7Ci0KLS8qCi0gKiBSZXR1cm4gMSBmb3IgYSBzb2Z0d2FyZSBjb3VudGVyLCAwIGZvciBhIGhhcmR3YXJlIGNvdW50ZXIKLSAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfc29mdHdhcmVfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXJldHVybiAoY291bnRlci0+YXR0ci50eXBlICE9IFBFUkZfVFlQRV9SQVcpICYmCi0JCShjb3VudGVyLT5hdHRyLnR5cGUgIT0gUEVSRl9UWVBFX0hBUkRXQVJFKSAmJgotCQkoY291bnRlci0+YXR0ci50eXBlICE9IFBFUkZfVFlQRV9IV19DQUNIRSk7Ci19Ci0KLWV4dGVybiBhdG9taWNfdCBwZXJmX3N3Y291bnRlcl9lbmFibGVkW1BFUkZfQ09VTlRfU1dfTUFYXTsKLQotZXh0ZXJuIHZvaWQgX19wZXJmX3N3Y291bnRlcl9ldmVudCh1MzIsIHU2NCwgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCB1NjQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfc3djb3VudGVyX2V2ZW50KHUzMiBldmVudCwgdTY0IG5yLCBpbnQgbm1pLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IGFkZHIpCi17Ci0JaWYgKGF0b21pY19yZWFkKCZwZXJmX3N3Y291bnRlcl9lbmFibGVkW2V2ZW50XSkpCi0JCV9fcGVyZl9zd2NvdW50ZXJfZXZlbnQoZXZlbnQsIG5yLCBubWksIHJlZ3MsIGFkZHIpOwotfQotCi1leHRlcm4gdm9pZCBfX3BlcmZfY291bnRlcl9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKLQkJX19wZXJmX2NvdW50ZXJfbW1hcCh2bWEpOwotfQotCi1leHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7Ci1leHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7Ci0KLWV4dGVybiBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnBlcmZfY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotZXh0ZXJuIGludCBzeXNjdGxfcGVyZl9jb3VudGVyX3BhcmFub2lkOwotZXh0ZXJuIGludCBzeXNjdGxfcGVyZl9jb3VudGVyX21sb2NrOwotZXh0ZXJuIGludCBzeXNjdGxfcGVyZl9jb3VudGVyX3NhbXBsZV9yYXRlOwotCi1leHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHBlcmZfdHBjb3VudGVyX2V2ZW50KGludCBldmVudF9pZCwgdTY0IGFkZHIsIHU2NCBjb3VudCwKLQkJCQkgdm9pZCAqcmVjb3JkLCBpbnQgZW50cnlfc2l6ZSk7Ci0KLSNpZm5kZWYgcGVyZl9taXNjX2ZsYWdzCi0jZGVmaW5lIHBlcmZfbWlzY19mbGFncyhyZWdzKQkodXNlcl9tb2RlKHJlZ3MpID8gUEVSRl9FVkVOVF9NSVNDX1VTRVIgOiBcCi0JCQkJIFBFUkZfRVZFTlRfTUlTQ19LRVJORUwpCi0jZGVmaW5lIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQlpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCi0jZW5kaWYKLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfY291bnRlcl90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfY291bnRlcl90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJeyB9Ci1zdGF0aWMgaW5saW5lIGludCBwZXJmX2NvdW50ZXJfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NvdW50ZXJfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgfQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NvdW50ZXJfZG9fcGVuZGluZyh2b2lkKQkJCXsgfQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9wcmludF9kZWJ1Zyh2b2lkKQkJCXsgfQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZGlzYWJsZSh2b2lkKQkJCQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9lbmFibGUodm9pZCkJCQkJCXsgfQotc3RhdGljIGlubGluZSBpbnQgcGVyZl9jb3VudGVyX3Rhc2tfZGlzYWJsZSh2b2lkKQl7IHJldHVybiAtRUlOVkFMOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwZXJmX2NvdW50ZXJfdGFza19lbmFibGUodm9pZCkJeyByZXR1cm4gLUVJTlZBTDsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfc3djb3VudGVyX2V2ZW50KHUzMiBldmVudCwgdTY0IG5yLCBpbnQgbm1pLAotCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikJCQl7IH0KLQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NvdW50ZXJfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJCXsgfQotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY291bnRlcl9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX2luaXQodm9pZCkJCQkJeyB9Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfUEVSRl9DT1VOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZmFmNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0wLDAgKzEsODU4IEBACisvKgorICogUGVyZm9ybWFuY2UgZXZlbnRzOgorICoKKyAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCisgKgorICogRGF0YSB0eXBlIGRlZmluaXRpb25zLCBkZWNsYXJhdGlvbnMsIHByb3RvdHlwZXMuCisgKgorICogICAgU3RhcnRlZCBieTogVGhvbWFzIEdsZWl4bmVyIGFuZCBJbmdvIE1vbG5hcgorICoKKyAqIEZvciBsaWNlbmNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORworICovCisjaWZuZGVmIF9MSU5VWF9QRVJGX0VWRU5UX0gKKyNkZWZpbmUgX0xJTlVYX1BFUkZfRVZFTlRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIFVzZXItc3BhY2UgQUJJIGJpdHM6CisgKi8KKworLyoKKyAqIGF0dHIudHlwZQorICovCitlbnVtIHBlcmZfdHlwZV9pZCB7CisJUEVSRl9UWVBFX0hBUkRXQVJFCQkJPSAwLAorCVBFUkZfVFlQRV9TT0ZUV0FSRQkJCT0gMSwKKwlQRVJGX1RZUEVfVFJBQ0VQT0lOVAkJCT0gMiwKKwlQRVJGX1RZUEVfSFdfQ0FDSEUJCQk9IDMsCisJUEVSRl9UWVBFX1JBVwkJCQk9IDQsCisKKwlQRVJGX1RZUEVfTUFYLAkJCQkvKiBub24tQUJJICovCit9OworCisvKgorICogR2VuZXJhbGl6ZWQgcGVyZm9ybWFuY2UgZXZlbnQgZXZlbnRfaWQgdHlwZXMsIHVzZWQgYnkgdGhlCisgKiBhdHRyLmV2ZW50X2lkIHBhcmFtZXRlciBvZiB0aGUgc3lzX3BlcmZfZXZlbnRfb3BlbigpCisgKiBzeXNjYWxsOgorICovCitlbnVtIHBlcmZfaHdfaWQgeworCS8qCisJICogQ29tbW9uIGhhcmR3YXJlIGV2ZW50cywgZ2VuZXJhbGl6ZWQgYnkgdGhlIGtlcm5lbDoKKwkgKi8KKwlQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJCT0gMCwKKwlQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUwkJPSAxLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwkJPSAyLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTCQk9IDMsCisJUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TCT0gNCwKKwlQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVMJCT0gNSwKKwlQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVMJCT0gNiwKKworCVBFUkZfQ09VTlRfSFdfTUFYLAkJCS8qIG5vbi1BQkkgKi8KK307CisKKy8qCisgKiBHZW5lcmFsaXplZCBoYXJkd2FyZSBjYWNoZSBldmVudHM6CisgKgorICogICAgICAgeyBMMS1ELCBMMS1JLCBMTEMsIElUTEIsIERUTEIsIEJQVSB9IHgKKyAqICAgICAgIHsgcmVhZCwgd3JpdGUsIHByZWZldGNoIH0geAorICogICAgICAgeyBhY2Nlc3NlcywgbWlzc2VzIH0KKyAqLworZW51bSBwZXJmX2h3X2NhY2hlX2lkIHsKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX0wxRAkJCT0gMCwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX0wxSQkJCT0gMSwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX0xMCQkJPSAyLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfRFRMQgkJPSAzLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfSVRMQgkJPSA0LAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfQlBVCQkJPSA1LAorCisJUEVSRl9DT1VOVF9IV19DQUNIRV9NQVgsCQkvKiBub24tQUJJICovCit9OworCitlbnVtIHBlcmZfaHdfY2FjaGVfb3BfaWQgeworCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPSAwLAorCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfV1JJVEUJCT0gMSwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1BSRUZFVENICQk9IDIsCisKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCwJCS8qIG5vbi1BQkkgKi8KK307CisKK2VudW0gcGVyZl9od19jYWNoZV9vcF9yZXN1bHRfaWQgeworCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUwk9IDAsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUwkJPSAxLAorCisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYLAkJLyogbm9uLUFCSSAqLworfTsKKworLyoKKyAqIFNwZWNpYWwgInNvZnR3YXJlIiBldmVudHMgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbCwgZXZlbiBpZiB0aGUgaGFyZHdhcmUKKyAqIGRvZXMgbm90IHN1cHBvcnQgcGVyZm9ybWFuY2UgZXZlbnRzLiBUaGVzZSBldmVudHMgbWVhc3VyZSB2YXJpb3VzCisgKiBwaHlzaWNhbCBhbmQgc3cgZXZlbnRzIG9mIHRoZSBrZXJuZWwgKGFuZCBhbGxvdyB0aGUgcHJvZmlsaW5nIG9mIHRoZW0gYXMKKyAqIHdlbGwpOgorICovCitlbnVtIHBlcmZfc3dfaWRzIHsKKwlQRVJGX0NPVU5UX1NXX0NQVV9DTE9DSwkJCT0gMCwKKwlQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJCT0gMSwKKwlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCQk9IDIsCisJUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTCQk9IDMsCisJUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUwkJPSA0LAorCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUlOCQk9IDUsCisJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUoJCT0gNiwKKworCVBFUkZfQ09VTlRfU1dfTUFYLAkJCS8qIG5vbi1BQkkgKi8KK307CisKKy8qCisgKiBCaXRzIHRoYXQgY2FuIGJlIHNldCBpbiBhdHRyLnNhbXBsZV90eXBlIHRvIHJlcXVlc3QgaW5mb3JtYXRpb24KKyAqIGluIHRoZSBvdmVyZmxvdyBwYWNrZXRzLgorICovCitlbnVtIHBlcmZfZXZlbnRfc2FtcGxlX2Zvcm1hdCB7CisJUEVSRl9TQU1QTEVfSVAJCQkJPSAxVSA8PCAwLAorCVBFUkZfU0FNUExFX1RJRAkJCQk9IDFVIDw8IDEsCisJUEVSRl9TQU1QTEVfVElNRQkJCT0gMVUgPDwgMiwKKwlQRVJGX1NBTVBMRV9BRERSCQkJPSAxVSA8PCAzLAorCVBFUkZfU0FNUExFX1JFQUQJCQk9IDFVIDw8IDQsCisJUEVSRl9TQU1QTEVfQ0FMTENIQUlOCQkJPSAxVSA8PCA1LAorCVBFUkZfU0FNUExFX0lECQkJCT0gMVUgPDwgNiwKKwlQRVJGX1NBTVBMRV9DUFUJCQkJPSAxVSA8PCA3LAorCVBFUkZfU0FNUExFX1BFUklPRAkJCT0gMVUgPDwgOCwKKwlQRVJGX1NBTVBMRV9TVFJFQU1fSUQJCQk9IDFVIDw8IDksCisJUEVSRl9TQU1QTEVfUkFXCQkJCT0gMVUgPDwgMTAsCisKKwlQRVJGX1NBTVBMRV9NQVggPSAxVSA8PCAxMSwJCS8qIG5vbi1BQkkgKi8KK307CisKKy8qCisgKiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRhIHJldHVybmVkIGJ5IHJlYWQoKSBvbiBhIHBlcmYgZXZlbnQgZmQsCisgKiBhcyBzcGVjaWZpZWQgYnkgYXR0ci5yZWFkX2Zvcm1hdDoKKyAqCisgKiBzdHJ1Y3QgcmVhZF9mb3JtYXQgeworICoJeyB1NjQJCXZhbHVlOworICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKKyAqCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCisgKgorICoJeyB1NjQJCW5yOworICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl2YWx1ZTsKKyAqCSAgICB7IHU2NAlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKKyAqCSAgfQkJY250cltucl07CisgKgl9ICYmIFBFUkZfRk9STUFUX0dST1VQCisgKiB9OworICovCitlbnVtIHBlcmZfZXZlbnRfcmVhZF9mb3JtYXQgeworCVBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRAkJPSAxVSA8PCAwLAorCVBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORwkJPSAxVSA8PCAxLAorCVBFUkZfRk9STUFUX0lECQkJCT0gMVUgPDwgMiwKKwlQRVJGX0ZPUk1BVF9HUk9VUAkJCT0gMVUgPDwgMywKKworCVBFUkZfRk9STUFUX01BWCA9IDFVIDw8IDQsCQkvKiBub24tQUJJICovCit9OworCisjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjAJNjQJLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi8KKworLyoKKyAqIEhhcmR3YXJlIGV2ZW50X2lkIHRvIG1vbml0b3IgdmlhIGEgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBldmVudDoKKyAqLworc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB7CisKKwkvKgorCSAqIE1ham9yIHR5cGU6IGhhcmR3YXJlL3NvZnR3YXJlL3RyYWNlcG9pbnQvZXRjLgorCSAqLworCV9fdTMyCQkJdHlwZTsKKworCS8qCisJICogU2l6ZSBvZiB0aGUgYXR0ciBzdHJ1Y3R1cmUsIGZvciBmd2QvYndkIGNvbXBhdC4KKwkgKi8KKwlfX3UzMgkJCXNpemU7CisKKwkvKgorCSAqIFR5cGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKwkgKi8KKwlfX3U2NAkJCWNvbmZpZzsKKworCXVuaW9uIHsKKwkJX191NjQJCXNhbXBsZV9wZXJpb2Q7CisJCV9fdTY0CQlzYW1wbGVfZnJlcTsKKwl9OworCisJX191NjQJCQlzYW1wbGVfdHlwZTsKKwlfX3U2NAkJCXJlYWRfZm9ybWF0OworCisJX191NjQJCQlkaXNhYmxlZCAgICAgICA6ICAxLCAvKiBvZmYgYnkgZGVmYXVsdCAgICAgICAgKi8KKwkJCQlpbmhlcml0CSAgICAgICA6ICAxLCAvKiBjaGlsZHJlbiBpbmhlcml0IGl0ICAgKi8KKwkJCQlwaW5uZWQJICAgICAgIDogIDEsIC8qIG11c3QgYWx3YXlzIGJlIG9uIFBNVSAqLworCQkJCWV4Y2x1c2l2ZSAgICAgIDogIDEsIC8qIG9ubHkgZ3JvdXAgb24gUE1VICAgICAqLworCQkJCWV4Y2x1ZGVfdXNlciAgIDogIDEsIC8qIGRvbid0IGNvdW50IHVzZXIgICAgICAqLworCQkJCWV4Y2x1ZGVfa2VybmVsIDogIDEsIC8qIGRpdHRvIGtlcm5lbCAgICAgICAgICAqLworCQkJCWV4Y2x1ZGVfaHYgICAgIDogIDEsIC8qIGRpdHRvIGh5cGVydmlzb3IgICAgICAqLworCQkJCWV4Y2x1ZGVfaWRsZSAgIDogIDEsIC8qIGRvbid0IGNvdW50IHdoZW4gaWRsZSAqLworCQkJCW1tYXAgICAgICAgICAgIDogIDEsIC8qIGluY2x1ZGUgbW1hcCBkYXRhICAgICAqLworCQkJCWNvbW0JICAgICAgIDogIDEsIC8qIGluY2x1ZGUgY29tbSBkYXRhICAgICAqLworCQkJCWZyZXEgICAgICAgICAgIDogIDEsIC8qIHVzZSBmcmVxLCBub3QgcGVyaW9kICAqLworCQkJCWluaGVyaXRfc3RhdCAgIDogIDEsIC8qIHBlciB0YXNrIGNvdW50cyAgICAgICAqLworCQkJCWVuYWJsZV9vbl9leGVjIDogIDEsIC8qIG5leHQgZXhlYyBlbmFibGVzICAgICAqLworCQkJCXRhc2sgICAgICAgICAgIDogIDEsIC8qIHRyYWNlIGZvcmsvZXhpdCAgICAgICAqLworCQkJCXdhdGVybWFyayAgICAgIDogIDEsIC8qIHdha2V1cF93YXRlcm1hcmsgICAgICAqLworCisJCQkJX19yZXNlcnZlZF8xICAgOiA0OTsKKworCXVuaW9uIHsKKwkJX191MzIJCXdha2V1cF9ldmVudHM7CSAgLyogd2FrZXVwIGV2ZXJ5IG4gZXZlbnRzICovCisJCV9fdTMyCQl3YWtldXBfd2F0ZXJtYXJrOyAvKiBieXRlcyBiZWZvcmUgd2FrZXVwICAgKi8KKwl9OworCV9fdTMyCQkJX19yZXNlcnZlZF8yOworCisJX191NjQJCQlfX3Jlc2VydmVkXzM7Cit9OworCisvKgorICogSW9jdGxzIHRoYXQgY2FuIGJlIGRvbmUgb24gYSBwZXJmIGV2ZW50IGZkOgorICovCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX0VOQUJMRQkJX0lPICgnJCcsIDApCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX0RJU0FCTEUJCV9JTyAoJyQnLCAxKQorI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19SRUZSRVNICQlfSU8gKCckJywgMikKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUkVTRVQJCV9JTyAoJyQnLCAzKQorI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19QRVJJT0QJCV9JT1coJyQnLCA0LCB1NjQpCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQJX0lPICgnJCcsIDUpCisKK2VudW0gcGVyZl9ldmVudF9pb2NfZmxhZ3MgeworCVBFUkZfSU9DX0ZMQUdfR1JPVVAJCT0gMVUgPDwgMCwKK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgdGhlIHBhZ2UgdGhhdCBjYW4gYmUgbWFwcGVkIHZpYSBtbWFwCisgKi8KK3N0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSB7CisJX191MzIJdmVyc2lvbjsJCS8qIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgc3RydWN0dXJlICovCisJX191MzIJY29tcGF0X3ZlcnNpb247CQkvKiBsb3dlc3QgdmVyc2lvbiB0aGlzIGlzIGNvbXBhdCB3aXRoICovCisKKwkvKgorCSAqIEJpdHMgbmVlZGVkIHRvIHJlYWQgdGhlIGh3IGV2ZW50cyBpbiB1c2VyLXNwYWNlLgorCSAqCisJICogICB1MzIgc2VxOworCSAqICAgczY0IGNvdW50OworCSAqCisJICogICBkbyB7CisJICogICAgIHNlcSA9IHBjLT5sb2NrOworCSAqCisJICogICAgIGJhcnJpZXIoKQorCSAqICAgICBpZiAocGMtPmluZGV4KSB7CisJICogICAgICAgY291bnQgPSBwbWNfcmVhZChwYy0+aW5kZXggLSAxKTsKKwkgKiAgICAgICBjb3VudCArPSBwYy0+b2Zmc2V0OworCSAqICAgICB9IGVsc2UKKwkgKiAgICAgICBnb3RvIHJlZ3VsYXJfcmVhZDsKKwkgKgorCSAqICAgICBiYXJyaWVyKCk7CisJICogICB9IHdoaWxlIChwYy0+bG9jayAhPSBzZXEpOworCSAqCisJICogTk9URTogZm9yIG9idmlvdXMgcmVhc29uIHRoaXMgb25seSB3b3JrcyBvbiBzZWxmLW1vbml0b3JpbmcKKwkgKiAgICAgICBwcm9jZXNzZXMuCisJICovCisJX191MzIJbG9jazsJCQkvKiBzZXFsb2NrIGZvciBzeW5jaHJvbml6YXRpb24gKi8KKwlfX3UzMglpbmRleDsJCQkvKiBoYXJkd2FyZSBldmVudCBpZGVudGlmaWVyICovCisJX19zNjQJb2Zmc2V0OwkJCS8qIGFkZCB0byBoYXJkd2FyZSBldmVudCB2YWx1ZSAqLworCV9fdTY0CXRpbWVfZW5hYmxlZDsJCS8qIHRpbWUgZXZlbnQgYWN0aXZlICovCisJX191NjQJdGltZV9ydW5uaW5nOwkJLyogdGltZSBldmVudCBvbiBjcHUgKi8KKworCQkvKgorCQkgKiBIb2xlIGZvciBleHRlbnNpb24gb2YgdGhlIHNlbGYgbW9uaXRvciBjYXBhYmlsaXRpZXMKKwkJICovCisKKwlfX3U2NAlfX3Jlc2VydmVkWzEyM107CS8qIGFsaWduIHRvIDFrICovCisKKwkvKgorCSAqIENvbnRyb2wgZGF0YSBmb3IgdGhlIG1tYXAoKSBkYXRhIGJ1ZmZlci4KKwkgKgorCSAqIFVzZXItc3BhY2UgcmVhZGluZyB0aGUgQGRhdGFfaGVhZCB2YWx1ZSBzaG91bGQgaXNzdWUgYW4gcm1iKCksIG9uCisJICogU01QIGNhcGFibGUgcGxhdGZvcm1zLCBhZnRlciByZWFkaW5nIHRoaXMgdmFsdWUgLS0gc2VlCisJICogcGVyZl9ldmVudF93YWtldXAoKS4KKwkgKgorCSAqIFdoZW4gdGhlIG1hcHBpbmcgaXMgUFJPVF9XUklURSB0aGUgQGRhdGFfdGFpbCB2YWx1ZSBzaG91bGQgYmUKKwkgKiB3cml0dGVuIGJ5IHVzZXJzcGFjZSB0byByZWZsZWN0IHRoZSBsYXN0IHJlYWQgZGF0YS4gSW4gdGhpcyBjYXNlCisJICogdGhlIGtlcm5lbCB3aWxsIG5vdCBvdmVyLXdyaXRlIHVucmVhZCBkYXRhLgorCSAqLworCV9fdTY0ICAgZGF0YV9oZWFkOwkJLyogaGVhZCBpbiB0aGUgZGF0YSBzZWN0aW9uICovCisJX191NjQJZGF0YV90YWlsOwkJLyogdXNlci1zcGFjZSB3cml0dGVuIHRhaWwgKi8KK307CisKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0sJCSgzIDw8IDApCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9VTktOT1dOCQkoMCA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTAkJCSgxIDw8IDApCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfVVNFUgkJCSgyIDw8IDApCisjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUgkJKDMgPDwgMCkKKworc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIHsKKwlfX3UzMgl0eXBlOworCV9fdTE2CW1pc2M7CisJX191MTYJc2l6ZTsKK307CisKK2VudW0gcGVyZl9ldmVudF90eXBlIHsKKworCS8qCisJICogVGhlIE1NQVAgZXZlbnRzIHJlY29yZCB0aGUgUFJPVF9FWEVDIG1hcHBpbmdzIHNvIHRoYXQgd2UgY2FuCisJICogY29ycmVsYXRlIHVzZXJzcGFjZSBJUHMgdG8gY29kZS4gVGhleSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorCSAqCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCisJICoJdTMyCQkJCXBpZCwgdGlkOworCSAqCXU2NAkJCQlhZGRyOworCSAqCXU2NAkJCQlsZW47CisJICoJdTY0CQkJCXBnb2ZmOworCSAqCWNoYXIJCQkJZmlsZW5hbWVbXTsKKwkgKiB9OworCSAqLworCVBFUkZfUkVDT1JEX01NQVAJCQk9IDEsCisKKwkvKgorCSAqIHN0cnVjdCB7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1NjQJCQkJaWQ7CisJICoJdTY0CQkJCWxvc3Q7CisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9MT1NUCQkJPSAyLAorCisJLyoKKwkgKiBzdHJ1Y3QgeworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoKKwkgKgl1MzIJCQkJcGlkLCB0aWQ7CisJICoJY2hhcgkJCQljb21tW107CisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9DT01NCQkJPSAzLAorCisJLyoKKwkgKiBzdHJ1Y3QgeworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoJdTMyCQkJCXBpZCwgcHBpZDsKKwkgKgl1MzIJCQkJdGlkLCBwdGlkOworCSAqCXU2NAkJCQl0aW1lOworCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfRVhJVAkJCT0gNCwKKworCS8qCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXU2NAkJCQl0aW1lOworCSAqCXU2NAkJCQlpZDsKKwkgKgl1NjQJCQkJc3RyZWFtX2lkOworCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfVEhST1RUTEUJCT0gNSwKKwlQRVJGX1JFQ09SRF9VTlRIUk9UVExFCQk9IDYsCisKKwkvKgorCSAqIHN0cnVjdCB7CisJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKgl1MzIJCQkJcGlkLCBwcGlkOworCSAqCXUzMgkJCQl0aWQsIHB0aWQ7CisJICoJeyB1NjQJCQkJdGltZTsgICAgIH0gJiYgUEVSRl9TQU1QTEVfVElNRQorCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfRk9SSwkJCT0gNywKKworCS8qCisJICogc3RydWN0IHsKKwkgKiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKwkgKiAJdTMyCQkJCXBpZCwgdGlkOworCSAqCisJICogCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOworCSAqIH07CisJICovCisJUEVSRl9SRUNPUkRfUkVBRAkJCT0gOCwKKworCS8qCisJICogc3RydWN0IHsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCisJICoJeyB1NjQJCQlpcDsJICB9ICYmIFBFUkZfU0FNUExFX0lQCisJICoJeyB1MzIJCQlwaWQsIHRpZDsgfSAmJiBQRVJGX1NBTVBMRV9USUQKKwkgKgl7IHU2NAkJCXRpbWU7ICAgICB9ICYmIFBFUkZfU0FNUExFX1RJTUUKKwkgKgl7IHU2NAkJCWFkZHI7ICAgICB9ICYmIFBFUkZfU0FNUExFX0FERFIKKwkgKgl7IHU2NAkJCWlkOwkgIH0gJiYgUEVSRl9TQU1QTEVfSUQKKwkgKgl7IHU2NAkJCXN0cmVhbV9pZDt9ICYmIFBFUkZfU0FNUExFX1NUUkVBTV9JRAorCSAqCXsgdTMyCQkJY3B1LCByZXM7IH0gJiYgUEVSRl9TQU1QTEVfQ1BVCisJICoJeyB1NjQJCQlwZXJpb2Q7ICAgfSAmJiBQRVJGX1NBTVBMRV9QRVJJT0QKKwkgKgorCSAqCXsgc3RydWN0IHJlYWRfZm9ybWF0CXZhbHVlczsJICB9ICYmIFBFUkZfU0FNUExFX1JFQUQKKwkgKgorCSAqCXsgdTY0CQkJbnIsCisJICoJICB1NjQJCQlpcHNbbnJdOyAgfSAmJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4KKwkgKgorCSAqCSMKKwkgKgkjIFRoZSBSQVcgcmVjb3JkIGJlbG93IGlzIG9wYXF1ZSBkYXRhIHdydCB0aGUgQUJJCisJICoJIworCSAqCSMgVGhhdCBpcywgdGhlIEFCSSBkb2Vzbid0IG1ha2UgYW55IHByb21pc2VzIHdydCB0bworCSAqCSMgdGhlIHN0YWJpbGl0eSBvZiBpdHMgY29udGVudCwgaXQgbWF5IHZhcnkgZGVwZW5kaW5nCisJICoJIyBvbiBldmVudCwgaGFyZHdhcmUsIGtlcm5lbCB2ZXJzaW9uIGFuZCBwaGFzZSBvZgorCSAqCSMgdGhlIG1vb24uCisJICoJIworCSAqCSMgSW4gb3RoZXIgd29yZHMsIFBFUkZfU0FNUExFX1JBVyBjb250ZW50cyBhcmUgbm90IGFuIEFCSS4KKwkgKgkjCisJICoKKwkgKgl7IHUzMgkJCXNpemU7CisJICoJICBjaGFyICAgICAgICAgICAgICAgICAgZGF0YVtzaXplXTt9JiYgUEVSRl9TQU1QTEVfUkFXCisJICogfTsKKwkgKi8KKwlQRVJGX1JFQ09SRF9TQU1QTEUJCT0gOSwKKworCVBFUkZfUkVDT1JEX01BWCwJCQkvKiBub24tQUJJICovCit9OworCitlbnVtIHBlcmZfY2FsbGNoYWluX2NvbnRleHQgeworCVBFUkZfQ09OVEVYVF9IVgkJCT0gKF9fdTY0KS0zMiwKKwlQRVJGX0NPTlRFWFRfS0VSTkVMCQk9IChfX3U2NCktMTI4LAorCVBFUkZfQ09OVEVYVF9VU0VSCQk9IChfX3U2NCktNTEyLAorCisJUEVSRl9DT05URVhUX0dVRVNUCQk9IChfX3U2NCktMjA0OCwKKwlQRVJGX0NPTlRFWFRfR1VFU1RfS0VSTkVMCT0gKF9fdTY0KS0yMTc2LAorCVBFUkZfQ09OVEVYVF9HVUVTVF9VU0VSCQk9IChfX3U2NCktMjU2MCwKKworCVBFUkZfQ09OVEVYVF9NQVgJCT0gKF9fdTY0KS00MDk1LAorfTsKKworI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAJKDFVIDw8IDApCisjZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQJKDFVIDw8IDEpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogS2VybmVsLWludGVybmFsIGRhdGEgdHlwZXMgYW5kIGRlZmluaXRpb25zOgorICovCisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKyMgaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjZGVmaW5lIFBFUkZfTUFYX1NUQUNLX0RFUFRICQkyNTUKKworc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5IHsKKwlfX3U2NAkJCQlucjsKKwlfX3U2NAkJCQlpcFtQRVJGX01BWF9TVEFDS19ERVBUSF07Cit9OworCitzdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkIHsKKwl1MzIJCQkJc2l6ZTsKKwl2b2lkCQkJCSpkYXRhOworfTsKKworc3RydWN0IHRhc2tfc3RydWN0OworCisvKioKKyAqIHN0cnVjdCBod19wZXJmX2V2ZW50IC0gcGVyZm9ybWFuY2UgZXZlbnQgaGFyZHdhcmUgZGV0YWlsczoKKyAqLworc3RydWN0IGh3X3BlcmZfZXZlbnQgeworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworCXVuaW9uIHsKKwkJc3RydWN0IHsgLyogaGFyZHdhcmUgKi8KKwkJCXU2NAkJY29uZmlnOworCQkJdW5zaWduZWQgbG9uZwljb25maWdfYmFzZTsKKwkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKKwkJCWludAkJaWR4OworCQl9OworCQl1bmlvbiB7IC8qIHNvZnR3YXJlICovCisJCQlhdG9taWM2NF90CWNvdW50OworCQkJc3RydWN0IGhydGltZXIJaHJ0aW1lcjsKKwkJfTsKKwl9OworCWF0b21pYzY0X3QJCQlwcmV2X2NvdW50OworCXU2NAkJCQlzYW1wbGVfcGVyaW9kOworCXU2NAkJCQlsYXN0X3BlcmlvZDsKKwlhdG9taWM2NF90CQkJcGVyaW9kX2xlZnQ7CisJdTY0CQkJCWludGVycnVwdHM7CisKKwl1NjQJCQkJZnJlcV9jb3VudDsKKwl1NjQJCQkJZnJlcV9pbnRlcnJ1cHRzOworCXU2NAkJCQlmcmVxX3N0YW1wOworI2VuZGlmCit9OworCitzdHJ1Y3QgcGVyZl9ldmVudDsKKworLyoqCisgKiBzdHJ1Y3QgcG11IC0gZ2VuZXJpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKKyAqLworc3RydWN0IHBtdSB7CisJaW50ICgqZW5hYmxlKQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCXZvaWQgKCpkaXNhYmxlKQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCXZvaWQgKCpyZWFkKQkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCXZvaWQgKCp1bnRocm90dGxlKQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7Cit9OworCisvKioKKyAqIGVudW0gcGVyZl9ldmVudF9hY3RpdmVfc3RhdGUgLSB0aGUgc3RhdGVzIG9mIGEgZXZlbnQKKyAqLworZW51bSBwZXJmX2V2ZW50X2FjdGl2ZV9zdGF0ZSB7CisJUEVSRl9FVkVOVF9TVEFURV9FUlJPUgkJPSAtMiwKKwlQRVJGX0VWRU5UX1NUQVRFX09GRgkJPSAtMSwKKwlQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFCT0gIDAsCisJUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUJCT0gIDEsCit9OworCitzdHJ1Y3QgZmlsZTsKKworc3RydWN0IHBlcmZfbW1hcF9kYXRhIHsKKwlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKKwlpbnQJCQkJbnJfcGFnZXM7CS8qIG5yIG9mIGRhdGEgcGFnZXMgICovCisJaW50CQkJCXdyaXRhYmxlOwkvKiBhcmUgd2Ugd3JpdGFibGUgICAqLworCWludAkJCQlucl9sb2NrZWQ7CS8qIG5yIHBhZ2VzIG1sb2NrZWQgICovCisKKwlhdG9taWNfdAkJCXBvbGw7CQkvKiBQT0xMXyBmb3Igd2FrZXVwcyAqLworCWF0b21pY190CQkJZXZlbnRzOwkJLyogZXZlbnRfaWQgbGltaXQgICAgICAgKi8KKworCWF0b21pY19sb25nX3QJCQloZWFkOwkJLyogd3JpdGUgcG9zaXRpb24gICAgKi8KKwlhdG9taWNfbG9uZ190CQkJZG9uZV9oZWFkOwkvKiBjb21wbGV0ZWQgaGVhZCAgICAqLworCisJYXRvbWljX3QJCQlsb2NrOwkJLyogY29uY3VycmVudCB3cml0ZXMgKi8KKwlhdG9taWNfdAkJCXdha2V1cDsJCS8qIG5lZWRzIGEgd2FrZXVwICAgICovCisJYXRvbWljX3QJCQlsb3N0OwkJLyogbnIgcmVjb3JkcyBsb3N0ICAgKi8KKworCWxvbmcJCQkJd2F0ZXJtYXJrOwkvKiB3YWtldXAgd2F0ZXJtYXJrICAqLworCisJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlCSp1c2VyX3BhZ2U7CisJdm9pZAkJCQkqZGF0YV9wYWdlc1swXTsKK307CisKK3N0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgeworCXN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKm5leHQ7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKik7Cit9OworCisvKioKKyAqIHN0cnVjdCBwZXJmX2V2ZW50IC0gcGVyZm9ybWFuY2UgZXZlbnQga2VybmVsIHJlcHJlc2VudGF0aW9uOgorICovCitzdHJ1Y3QgcGVyZl9ldmVudCB7CisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJc3RydWN0IGxpc3RfaGVhZAkJZ3JvdXBfZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZAkJZXZlbnRfZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZAkJc2libGluZ19saXN0OworCWludAkJCQlucl9zaWJsaW5nczsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkJKmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkJKm91dHB1dDsKKwljb25zdCBzdHJ1Y3QgcG11CQkqcG11OworCisJZW51bSBwZXJmX2V2ZW50X2FjdGl2ZV9zdGF0ZQlzdGF0ZTsKKwlhdG9taWM2NF90CQkJY291bnQ7CisKKwkvKgorCSAqIFRoZXNlIGFyZSB0aGUgdG90YWwgdGltZSBpbiBuYW5vc2Vjb25kcyB0aGF0IHRoZSBldmVudAorCSAqIGhhcyBiZWVuIGVuYWJsZWQgKGkuZS4gZWxpZ2libGUgdG8gcnVuLCBhbmQgdGhlIHRhc2sgaGFzCisJICogYmVlbiBzY2hlZHVsZWQgaW4sIGlmIHRoaXMgaXMgYSBwZXItdGFzayBldmVudCkKKwkgKiBhbmQgcnVubmluZyAoc2NoZWR1bGVkIG9udG8gdGhlIENQVSksIHJlc3BlY3RpdmVseS4KKwkgKgorCSAqIFRoZXkgYXJlIGNvbXB1dGVkIGZyb20gdHN0YW1wX2VuYWJsZWQsIHRzdGFtcF9ydW5uaW5nIGFuZAorCSAqIHRzdGFtcF9zdG9wcGVkIHdoZW4gdGhlIGV2ZW50IGlzIGluIElOQUNUSVZFIG9yIEFDVElWRSBzdGF0ZS4KKwkgKi8KKwl1NjQJCQkJdG90YWxfdGltZV9lbmFibGVkOworCXU2NAkJCQl0b3RhbF90aW1lX3J1bm5pbmc7CisKKwkvKgorCSAqIFRoZXNlIGFyZSB0aW1lc3RhbXBzIHVzZWQgZm9yIGNvbXB1dGluZyB0b3RhbF90aW1lX2VuYWJsZWQKKwkgKiBhbmQgdG90YWxfdGltZV9ydW5uaW5nIHdoZW4gdGhlIGV2ZW50IGlzIGluIElOQUNUSVZFIG9yCisJICogQUNUSVZFIHN0YXRlLCBtZWFzdXJlZCBpbiBuYW5vc2Vjb25kcyBmcm9tIGFuIGFyYml0cmFyeSBwb2ludAorCSAqIGluIHRpbWUuCisJICogdHN0YW1wX2VuYWJsZWQ6IHRoZSBub3Rpb25hbCB0aW1lIHdoZW4gdGhlIGV2ZW50IHdhcyBlbmFibGVkCisJICogdHN0YW1wX3J1bm5pbmc6IHRoZSBub3Rpb25hbCB0aW1lIHdoZW4gdGhlIGV2ZW50IHdhcyBzY2hlZHVsZWQgb24KKwkgKiB0c3RhbXBfc3RvcHBlZDogaW4gSU5BQ1RJVkUgc3RhdGUsIHRoZSBub3Rpb25hbCB0aW1lIHdoZW4gdGhlCisJICoJZXZlbnQgd2FzIHNjaGVkdWxlZCBvZmYuCisJICovCisJdTY0CQkJCXRzdGFtcF9lbmFibGVkOworCXU2NAkJCQl0c3RhbXBfcnVubmluZzsKKwl1NjQJCQkJdHN0YW1wX3N0b3BwZWQ7CisKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyCWF0dHI7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQJCWh3OworCisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dAkqY3R4OworCXN0cnVjdCBmaWxlCQkJKmZpbHA7CisKKwkvKgorCSAqIFRoZXNlIGFjY3VtdWxhdGUgdG90YWwgdGltZSAoaW4gbmFub3NlY29uZHMpIHRoYXQgY2hpbGRyZW4KKwkgKiBldmVudHMgaGF2ZSBiZWVuIGVuYWJsZWQgYW5kIHJ1bm5pbmcsIHJlc3BlY3RpdmVseS4KKwkgKi8KKwlhdG9taWM2NF90CQkJY2hpbGRfdG90YWxfdGltZV9lbmFibGVkOworCWF0b21pYzY0X3QJCQljaGlsZF90b3RhbF90aW1lX3J1bm5pbmc7CisKKwkvKgorCSAqIFByb3RlY3QgYXR0YWNoL2RldGFjaCBhbmQgY2hpbGRfbGlzdDoKKwkgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQljaGlsZF9tdXRleDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQljaGlsZF9saXN0OworCXN0cnVjdCBwZXJmX2V2ZW50CQkqcGFyZW50OworCisJaW50CQkJCW9uY3B1OworCWludAkJCQljcHU7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlvd25lcl9lbnRyeTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSpvd25lcjsKKworCS8qIG1tYXAgYml0cyAqLworCXN0cnVjdCBtdXRleAkJCW1tYXBfbXV0ZXg7CisJYXRvbWljX3QJCQltbWFwX2NvdW50OworCXN0cnVjdCBwZXJmX21tYXBfZGF0YQkJKmRhdGE7CisKKwkvKiBwb2xsIHJlbGF0ZWQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAkJd2FpdHE7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QJCSpmYXN5bmM7CisKKwkvKiBkZWxheWVkIHdvcmsgZm9yIE5NSXMgYW5kIHN1Y2ggKi8KKwlpbnQJCQkJcGVuZGluZ193YWtldXA7CisJaW50CQkJCXBlbmRpbmdfa2lsbDsKKwlpbnQJCQkJcGVuZGluZ19kaXNhYmxlOworCXN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkJcGVuZGluZzsKKworCWF0b21pY190CQkJZXZlbnRfbGltaXQ7CisKKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IHBlcmZfZXZlbnQgKik7CisJc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7CisKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZQkJKm5zOworCXU2NAkJCQlpZDsKKyNlbmRpZgorfTsKKworLyoqCisgKiBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0IC0gZXZlbnQgY29udGV4dCBzdHJ1Y3R1cmUKKyAqCisgKiBVc2VkIGFzIGEgY29udGFpbmVyIGZvciB0YXNrIGV2ZW50cyBhbmQgQ1BVIGV2ZW50cyBhcyB3ZWxsOgorICovCitzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0IHsKKwkvKgorCSAqIFByb3RlY3QgdGhlIHN0YXRlcyBvZiB0aGUgZXZlbnRzIGluIHRoZSBsaXN0LAorCSAqIG5yX2FjdGl2ZSwgYW5kIHRoZSBsaXN0OgorCSAqLworCXNwaW5sb2NrX3QJCQlsb2NrOworCS8qCisJICogUHJvdGVjdCB0aGUgbGlzdCBvZiBldmVudHMuICBMb2NraW5nIGVpdGhlciBtdXRleCBvciBsb2NrCisJICogaXMgc3VmZmljaWVudCB0byBlbnN1cmUgdGhlIGxpc3QgZG9lc24ndCBjaGFuZ2U7IHRvIGNoYW5nZQorCSAqIHRoZSBsaXN0IHlvdSBuZWVkIHRvIGxvY2sgYm90aCB0aGUgbXV0ZXggYW5kIHRoZSBzcGlubG9jay4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKKworCXN0cnVjdCBsaXN0X2hlYWQJCWdyb3VwX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAkJZXZlbnRfbGlzdDsKKwlpbnQJCQkJbnJfZXZlbnRzOworCWludAkJCQlucl9hY3RpdmU7CisJaW50CQkJCWlzX2FjdGl2ZTsKKwlpbnQJCQkJbnJfc3RhdDsKKwlhdG9taWNfdAkJCXJlZmNvdW50OworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRhc2s7CisKKwkvKgorCSAqIENvbnRleHQgY2xvY2ssIHJ1bnMgd2hlbiBjb250ZXh0IGVuYWJsZWQuCisJICovCisJdTY0CQkJCXRpbWU7CisJdTY0CQkJCXRpbWVzdGFtcDsKKworCS8qCisJICogVGhlc2UgZmllbGRzIGxldCB1cyBkZXRlY3Qgd2hlbiB0d28gY29udGV4dHMgaGF2ZSBib3RoCisJICogYmVlbiBjbG9uZWQgKGluaGVyaXRlZCkgZnJvbSBhIGNvbW1vbiBhbmNlc3Rvci4KKwkgKi8KKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0CSpwYXJlbnRfY3R4OworCXU2NAkJCQlwYXJlbnRfZ2VuOworCXU2NAkJCQlnZW5lcmF0aW9uOworCWludAkJCQlwaW5fY291bnQ7CisJc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBwZXJmX2V2ZW50X2NwdV9jb250ZXh0IC0gcGVyIGNwdSBldmVudCBjb250ZXh0IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCB7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dAljdHg7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dAkqdGFza19jdHg7CisJaW50CQkJCWFjdGl2ZV9vbmNwdTsKKwlpbnQJCQkJbWF4X3BlcnRhc2s7CisJaW50CQkJCWV4Y2x1c2l2ZTsKKworCS8qCisJICogUmVjdXJzaW9uIGF2b2lkYW5jZToKKwkgKgorCSAqIHRhc2ssIHNvZnRpcnEsIGlycSwgbm1pIGNvbnRleHQKKwkgKi8KKwlpbnQJCQkJcmVjdXJzaW9uWzRdOworfTsKKworc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSB7CisJc3RydWN0IHBlcmZfZXZlbnQJCSpldmVudDsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEJCSpkYXRhOworCXVuc2lnbmVkIGxvbmcJCQloZWFkOworCXVuc2lnbmVkIGxvbmcJCQlvZmZzZXQ7CisJaW50CQkJCW5taTsKKwlpbnQJCQkJc2FtcGxlOworCWludAkJCQlsb2NrZWQ7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworfTsKKworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworCisvKgorICogU2V0IGJ5IGFyY2hpdGVjdHVyZSBjb2RlOgorICovCitleHRlcm4gaW50IHBlcmZfbWF4X2V2ZW50czsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgcGVyZl9ldmVudF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9kb19wZW5kaW5nKHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9wcmludF9kZWJ1Zyh2b2lkKTsKK2V4dGVybiB2b2lkIF9fcGVyZl9kaXNhYmxlKHZvaWQpOworZXh0ZXJuIGJvb2wgX19wZXJmX2VuYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBlcmZfZGlzYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBlcmZfZW5hYmxlKHZvaWQpOworZXh0ZXJuIGludCBwZXJmX2V2ZW50X3Rhc2tfZGlzYWJsZSh2b2lkKTsKK2V4dGVybiBpbnQgcGVyZl9ldmVudF90YXNrX2VuYWJsZSh2b2lkKTsKK2V4dGVybiBpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAorCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKworc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgeworCXU2NAkJCQl0eXBlOworCisJdTY0CQkJCWlwOworCXN0cnVjdCB7CisJCXUzMglwaWQ7CisJCXUzMgl0aWQ7CisJfQkJCQl0aWRfZW50cnk7CisJdTY0CQkJCXRpbWU7CisJdTY0CQkJCWFkZHI7CisJdTY0CQkJCWlkOworCXU2NAkJCQlzdHJlYW1faWQ7CisJc3RydWN0IHsKKwkJdTMyCWNwdTsKKwkJdTMyCXJlc2VydmVkOworCX0JCQkJY3B1X2VudHJ5OworCXU2NAkJCQlwZXJpb2Q7CisJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5CSpjYWxsY2hhaW47CisJc3RydWN0IHBlcmZfcmF3X3JlY29yZAkJKnJhdzsKK307CisKK2V4dGVybiB2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsCisJCQkgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCisJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKK2V4dGVybiB2b2lkIHBlcmZfcHJlcGFyZV9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsCisJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCisJCQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJuIGludCBwZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5taSwKKwkJCQkgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCisJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyoKKyAqIFJldHVybiAxIGZvciBhIHNvZnR3YXJlIGV2ZW50LCAwIGZvciBhIGhhcmR3YXJlIGV2ZW50CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3NvZnR3YXJlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gKGV2ZW50LT5hdHRyLnR5cGUgIT0gUEVSRl9UWVBFX1JBVykgJiYKKwkJKGV2ZW50LT5hdHRyLnR5cGUgIT0gUEVSRl9UWVBFX0hBUkRXQVJFKSAmJgorCQkoZXZlbnQtPmF0dHIudHlwZSAhPSBQRVJGX1RZUEVfSFdfQ0FDSEUpOworfQorCitleHRlcm4gYXRvbWljX3QgcGVyZl9zd2V2ZW50X2VuYWJsZWRbUEVSRl9DT1VOVF9TV19NQVhdOworCitleHRlcm4gdm9pZCBfX3BlcmZfc3dfZXZlbnQodTMyLCB1NjQsIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgdTY0KTsKKworc3RhdGljIGlubGluZSB2b2lkCitwZXJmX3N3X2V2ZW50KHUzMiBldmVudF9pZCwgdTY0IG5yLCBpbnQgbm1pLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IGFkZHIpCit7CisJaWYgKGF0b21pY19yZWFkKCZwZXJmX3N3ZXZlbnRfZW5hYmxlZFtldmVudF9pZF0pKQorCQlfX3BlcmZfc3dfZXZlbnQoZXZlbnRfaWQsIG5yLCBubWksIHJlZ3MsIGFkZHIpOworfQorCitleHRlcm4gdm9pZCBfX3BlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQorCQlfX3BlcmZfZXZlbnRfbW1hcCh2bWEpOworfQorCitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2NvbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworZXh0ZXJuIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqcGVyZl9jYWxsY2hhaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitleHRlcm4gaW50IHN5c2N0bF9wZXJmX2V2ZW50X3BhcmFub2lkOworZXh0ZXJuIGludCBzeXNjdGxfcGVyZl9ldmVudF9tbG9jazsKK2V4dGVybiBpbnQgc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGU7CisKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LAorCQkJCSB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKKworI2lmbmRlZiBwZXJmX21pc2NfZmxhZ3MKKyNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCSh1c2VyX21vZGUocmVncykgPyBQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOiBcCisJCQkJIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKQorI2RlZmluZSBwZXJmX2luc3RydWN0aW9uX3BvaW50ZXIocmVncykJaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorI2VuZGlmCisKK2V4dGVybiBpbnQgcGVyZl9vdXRwdXRfYmVnaW4oc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkJICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgICBpbnQgbm1pLCBpbnQgc2FtcGxlKTsKK2V4dGVybiB2b2lkIHBlcmZfb3V0cHV0X2VuZChzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpOworZXh0ZXJuIHZvaWQgcGVyZl9vdXRwdXRfY29weShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQkgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkCitwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSkJCXsgfQorc3RhdGljIGlubGluZSB2b2lkCitwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQkJeyB9CitzdGF0aWMgaW5saW5lIGludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2RvX3BlbmRpbmcodm9pZCkJCQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9wcmludF9kZWJ1Zyh2b2lkKQkJCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2Rpc2FibGUodm9pZCkJCQkJCXsgfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZW5hYmxlKHZvaWQpCQkJCQl7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZlbnRfdGFza19kaXNhYmxlKHZvaWQpCQkJCXsgcmV0dXJuIC1FSU5WQUw7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZlbnRfdGFza19lbmFibGUodm9pZCkJCQkJeyByZXR1cm4gLUVJTlZBTDsgfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCisJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQkJCXsgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQkJeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9pbml0KHZvaWQpCQkJCXsgfQorCisjZW5kaWYKKworI2RlZmluZSBwZXJmX291dHB1dF9wdXQoaGFuZGxlLCB4KSBcCisJcGVyZl9vdXRwdXRfY29weSgoaGFuZGxlKSwgJih4KSwgc2l6ZW9mKHgpKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9QRVJGX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG5wLmggYi9pbmNsdWRlL2xpbnV4L3BucC5oCmluZGV4IGIwNjNjNzMuLmZkZGZhZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG5wLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbnAuaApAQCAtMzYwLDYgKzM2MCw3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCWludCAoKnByb2JlKSAoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCk7CiAJdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBwbnBfZGV2ICpkZXYpOworCXZvaWQgKCpzaHV0ZG93bikgKHN0cnVjdCBwbnBfZGV2ICpkZXYpOwogCWludCAoKnN1c3BlbmQpIChzdHJ1Y3QgcG5wX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkgKHN0cnVjdCBwbnBfZGV2ICpkZXYpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9pc29uLmggYi9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCmluZGV4IDY3MjlmN2QuLjdmYzE5NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9pc29uLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb2lzb24uaApAQCAtNjUsNiArNjUsOSBAQAogI2RlZmluZSBNVVRFWF9ERUJVR19JTklUCTB4MTEKICNkZWZpbmUgTVVURVhfREVCVUdfRlJFRQkweDIyCiAKKy8qKioqKioqKioqIGxpYi9mbGV4X2FycmF5LmMgKioqKioqKioqKi8KKyNkZWZpbmUgRkxFWF9BUlJBWV9GUkVFCTB4NmMJLyogZm9yIHVzZS1hZnRlci1mcmVlIHBvaXNvbmluZyAqLworCiAvKioqKioqKioqKiBzZWN1cml0eS8gKioqKioqKioqKi8KICNkZWZpbmUgS0VZX0RFU1RST1kJCTB4YmQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmN0bC5oIGIvaW5jbHVkZS9saW51eC9wcmN0bC5oCmluZGV4IGIwMGRmNGMuLjA3YmZmNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKQEAgLTg1LDcgKzg1LDcgQEAKICNkZWZpbmUgUFJfU0VUX1RJTUVSU0xBQ0sgMjkKICNkZWZpbmUgUFJfR0VUX1RJTUVSU0xBQ0sgMzAKIAotI2RlZmluZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRElTQUJMRQkJMzEKLSNkZWZpbmUgUFJfVEFTS19QRVJGX0NPVU5URVJTX0VOQUJMRQkJMzIKKyNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQorI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IGU2ZTc3ZDMuLjM3OWVhZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC03OCwxMCArNzgsMTkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBkZV9vcGVuZXJzOwkvKiB3aG8gZGlkIC0+b3BlbiwgYnV0IG5vdCAtPnJlbGVhc2UgKi8KIH07CiAKK2VudW0ga2NvcmVfdHlwZSB7CisJS0NPUkVfVEVYVCwKKwlLQ09SRV9WTUFMTE9DLAorCUtDT1JFX1JBTSwKKwlLQ09SRV9WTUVNTUFQLAorCUtDT1JFX09USEVSLAorfTsKKwogc3RydWN0IGtjb3JlX2xpc3QgewotCXN0cnVjdCBrY29yZV9saXN0ICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJc2l6ZV90IHNpemU7CisJaW50IHR5cGU7CiB9OwogCiBzdHJ1Y3Qgdm1jb3JlIHsKQEAgLTIzMywxMSArMjQyLDEyIEBACiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogI2lmICFkZWZpbmVkKENPTkZJR19QUk9DX0tDT1JFKQotc3RhdGljIGlubGluZSB2b2lkIGtjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKm5ldywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQKK2tjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKm5ldywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogfQogI2Vsc2UKLWV4dGVybiB2b2lkIGtjbGlzdF9hZGQoc3RydWN0IGtjb3JlX2xpc3QgKiwgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQga2NsaXN0X2FkZChzdHJ1Y3Qga2NvcmVfbGlzdCAqLCB2b2lkICosIHNpemVfdCwgaW50IHR5cGUpOwogI2VuZGlmCiAKIHVuaW9uIHByb2Nfb3AgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IDI2MzYxYzQuLjNlYmIyMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKQEAgLTEzNSw4ICsxMzUsOCBAQAogLyoKICAqIE9wZXJhdGlvbnMgc3VwcG9ydGVkIGZvciBkaXNrcXVvdGFzLgogICovCi1leHRlcm4gc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZHF1b3Rfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZHF1b3Rfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHZmc19xdW90YWN0bF9vcHM7CiAKICNkZWZpbmUgc2JfZHF1b3Rfb3BzICgmZHF1b3Rfb3BlcmF0aW9ucykKICNkZWZpbmUgc2JfcXVvdGFjdGxfb3BzICgmdmZzX3F1b3RhY3RsX29wcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdF9udWxscy5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKaW5kZXggZjlkZGQwMy4uNTg5YTQwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKQEAgLTEwMiw3ICsxMDIsNyBAQAogICovCiAjZGVmaW5lIGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikgXAogCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+Zmlyc3QpOwkJCSBcCi0JCSghaXNfYV9udWxscyhwb3MpKSAmJiAJCQlcCisJCSghaXNfYV9udWxscyhwb3MpKSAmJgkJCVwKIAkJKHsgdHBvcyA9IGhsaXN0X251bGxzX2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKIAkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA5NWUwNjE1Li42ZmUwMzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uIAorICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE4LDcgKzE4LDcgQEAKICAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDEKICAqCiAgKiBBdXRob3I6IERpcGFua2FyIFNhcm1hIDxkaXBhbmthckBpbi5pYm0uY29tPgotICogCisgKgogICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIHdvcmsgYnkgUGF1bCBNY0tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgogICogYW5kIGlucHV0cyBmcm9tIFJ1c3R5IFJ1c3NlbGwsIEFuZHJlYSBBcmNhbmdlbGkgYW5kIEFuZGkgS2xlZW4uCiAgKiBQYXBlcnM6CkBAIC0yNiw3ICsyNiw3IEBACiAgKiBodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMuc2MucGRmIChPTFMyMDAxKQogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKKyAqCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKICAqCiAgKi8KIApAQCAtNTIsOCArNTIsMTMgQEAKIH07CiAKIC8qIEV4cG9ydGVkIGNvbW1vbiBpbnRlcmZhY2VzICovCisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdSh2b2lkKTsKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworI2RlZmluZSBzeW5jaHJvbml6ZV9yY3Ugc3luY2hyb25pemVfc2NoZWQKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9iaCh2b2lkKTsKK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3NjaGVkKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X2JhcnJpZXIodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfYmFycmllcl9iaCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpOwpAQCAtMjYyLDI0ICsyNjcsNiBAQAogZXh0ZXJuIHZvaWQgd2FrZW1lX2FmdGVyX3JjdShzdHJ1Y3QgcmN1X2hlYWQgICpoZWFkKTsKIAogLyoqCi0gKiBzeW5jaHJvbml6ZV9zY2hlZCAtIGJsb2NrIHVudGlsIGFsbCBDUFVzIGhhdmUgZXhpdGVkIGFueSBub24tcHJlZW1wdGl2ZQotICoga2VybmVsIGNvZGUgc2VxdWVuY2VzLgotICoKLSAqIFRoaXMgbWVhbnMgdGhhdCBhbGwgcHJlZW1wdF9kaXNhYmxlIGNvZGUgc2VxdWVuY2VzLCBpbmNsdWRpbmcgTk1JIGFuZAotICogaGFyZHdhcmUtaW50ZXJydXB0IGhhbmRsZXJzLCBpbiBwcm9ncmVzcyBvbiBlbnRyeSB3aWxsIGhhdmUgY29tcGxldGVkCi0gKiBiZWZvcmUgdGhpcyBwcmltaXRpdmUgcmV0dXJucy4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQKLSAqIHNvZnRpcnEgaGFuZGxlcnMgd2lsbCBoYXZlIGNvbXBsZXRlZCwgc2luY2UgaW4gc29tZSBrZXJuZWxzLCB0aGVzZQotICogaGFuZGxlcnMgY2FuIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQsIGFuZCBjYW4gYmxvY2suCi0gKgotICogVGhpcyBwcmltaXRpdmUgcHJvdmlkZXMgdGhlIGd1YXJhbnRlZXMgbWFkZSBieSB0aGUgKG5vdyByZW1vdmVkKQotICogc3luY2hyb25pemVfa2VybmVsKCkgQVBJLiAgSW4gY29udHJhc3QsIHN5bmNocm9uaXplX3JjdSgpIG9ubHkKLSAqIGd1YXJhbnRlZXMgdGhhdCByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbnMgd2lsbCBoYXZlIGNvbXBsZXRlZC4KLSAqIEluICJjbGFzc2ljIFJDVSIsIHRoZXNlIHR3byBndWFyYW50ZWVzIGhhcHBlbiB0byBiZSBvbmUgYW5kCi0gKiB0aGUgc2FtZSwgYnV0IGNhbiBkaWZmZXIgaW4gcmVhbHRpbWUgUkNVIGltcGxlbWVudGF0aW9ucy4KLSAqLwotI2RlZmluZSBzeW5jaHJvbml6ZV9zY2hlZCgpIF9fc3luY2hyb25pemVfc2NoZWQoKQotCi0vKioKICAqIGNhbGxfcmN1IC0gUXVldWUgYW4gUkNVIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgogICogQGhlYWQ6IHN0cnVjdHVyZSB0byBiZSB1c2VkIGZvciBxdWV1ZWluZyB0aGUgUkNVIHVwZGF0ZXMuCiAgKiBAZnVuYzogYWN0dWFsIHVwZGF0ZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBncmFjZSBwZXJpb2QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggYTg5MzA3Ny4uMzc2ODI3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCURvY3VtZW50YXRpb24vUkNVCisgKglEb2N1bWVudGF0aW9uL1JDVQogICovCiAKICNpZm5kZWYgX19MSU5VWF9SQ1VUUkVFX0gKQEAgLTUzLDYgKzUzLDggQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCisjZGVmaW5lIF9fc3luY2hyb25pemVfc2NoZWQoKSBzeW5jaHJvbml6ZV9yY3UoKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF9yY3Uodm9pZCkKIHsKIH0KQEAgLTY4LDggKzcwLDYgQEAKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAotI2RlZmluZSBfX3N5bmNocm9uaXplX3NjaGVkKCkgc3luY2hyb25pemVfcmN1KCkKLQogZXh0ZXJuIHZvaWQgY2FsbF9yY3Vfc2NoZWQoc3RydWN0IHJjdV9oZWFkICpoZWFkLAogCQkJICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IDI3N2Y0YjkuLjQ5MGM1YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMTI1LDYgKzEyNSw4IEBACiAvKiByZWd1bGF0b3IgZ2V0IGFuZCBwdXQgKi8KIHN0cnVjdCByZWd1bGF0b3IgKl9fbXVzdF9jaGVjayByZWd1bGF0b3JfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgICBjb25zdCBjaGFyICppZCk7CitzdHJ1Y3QgcmVndWxhdG9yICpfX211c3RfY2hlY2sgcmVndWxhdG9yX2dldF9leGNsdXNpdmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmlkKTsKIHZvaWQgcmVndWxhdG9yX3B1dChzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpOwogCiAvKiByZWd1bGF0b3Igb3V0cHV0IGNvbnRyb2wgYW5kIHN0YXR1cyAqLwpAQCAtMTQ0LDYgKzE0Niw4IEBACiAKIGludCByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKTsKIGludCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgdW5zaWduZWQgc2VsZWN0b3IpOworaW50IHJlZ3VsYXRvcl9pc19zdXBwb3J0ZWRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiBpbnQgcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiBpbnQgcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcik7CiBpbnQgcmVndWxhdG9yX3NldF9jdXJyZW50X2xpbWl0KHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKaW5kZXggY2UxYmU3MC4uMzFmMjA1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKQEAgLTM3LDcgKzM3LDggQEAKICAqCiAgKiBAZW5hYmxlOiBDb25maWd1cmUgdGhlIHJlZ3VsYXRvciBhcyBlbmFibGVkLgogICogQGRpc2FibGU6IENvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIGFzIGRpc2FibGVkLgotICogQGlzX2VuYWJsZWQ6IFJldHVybiAxIGlmIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCwgMCBvdGhlcndpc2UuCisgKiBAaXNfZW5hYmxlZDogUmV0dXJuIDEgaWYgdGhlIHJlZ3VsYXRvciBpcyBlbmFibGVkLCAwIGlmIG5vdC4KKyAqCQlNYXkgYWxzbyByZXR1cm4gbmVnYXRpdmUgZXJybm8uCiAgKgogICogQHNldF92b2x0YWdlOiBTZXQgdGhlIHZvbHRhZ2UgZm9yIHRoZSByZWd1bGF0b3Igd2l0aGluIHRoZSByYW5nZSBzcGVjaWZpZWQuCiAgKiAgICAgICAgICAgICAgIFRoZSBkcml2ZXIgc2hvdWxkIHNlbGVjdCB0aGUgdm9sdGFnZSBjbG9zZXN0IHRvIG1pbl91Vi4KQEAgLTE2Miw2ICsxNjMsOCBAQAogc3RydWN0IHJlZ3VsYXRvcl9kZXYgewogCXN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYzsKIAlpbnQgdXNlX2NvdW50OworCWludCBvcGVuX2NvdW50OworCWludCBleGNsdXNpdmU7CiAKIAkvKiBsaXN0cyB3ZSBiZWxvbmcgdG8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ3VsYXRvcnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oCmluZGV4IDkxYjRkYTMuLmU5NGE0YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZml4ZWQuaApAQCAtNSw2ICs1LDkgQEAKICAqCiAgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgogICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogUm9nZXIgUXVhZHJvcyA8ZXh0LXJvZ2VyLnF1YWRyb3NAbm9raWEuY29tPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKQEAgLTE2LDkgKzE5LDMwIEBACiAKIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhOwogCisvKioKKyAqIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyAtIGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHN0cnVjdHVyZQorICogQHN1cHBseV9uYW1lOglOYW1lIG9mIHRoZSByZWd1bGF0b3Igc3VwcGx5CisgKiBAbWljcm92b2x0czoJCU91dHB1dCB2b2x0YWdlIG9mIHJlZ3VsYXRvcgorICogQGdwaW86CQlHUElPIHRvIHVzZSBmb3IgZW5hYmxlIGNvbnRyb2wKKyAqIAkJCXNldCB0byAtRUlOVkFMIGlmIG5vdCB1c2VkCisgKiBAZW5hYmxlX2hpZ2g6CVBvbGFyaXR5IG9mIGVuYWJsZSBHUElPCisgKgkJCTEgPSBBY3RpdmUgaGlnaCwgMCA9IEFjdGl2ZSBsb3cKKyAqIEBlbmFibGVkX2F0X2Jvb3Q6CVdoZXRoZXIgcmVndWxhdG9yIGhhcyBiZWVuIGVuYWJsZWQgYXQKKyAqIAkJCWJvb3Qgb3Igbm90LiAxID0gWWVzLCAwID0gTm8KKyAqIAkJCVRoaXMgaXMgdXNlZCB0byBrZWVwIHRoZSByZWd1bGF0b3IgYXQKKyAqIAkJCXRoZSBkZWZhdWx0IHN0YXRlCisgKiBAaW5pdF9kYXRhOgkJcmVndWxhdG9yX2luaXRfZGF0YQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGZpeGVkIHZvbHRhZ2UgcmVndWxhdG9yIGNvbmZpZ3VyYXRpb24KKyAqIGluZm9ybWF0aW9uIHRoYXQgbXVzdCBiZSBwYXNzZWQgYnkgcGxhdGZvcm0gY29kZSB0byB0aGUgZml4ZWQKKyAqIHZvbHRhZ2UgcmVndWxhdG9yIGRyaXZlci4KKyAqLwogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHsKIAljb25zdCBjaGFyICpzdXBwbHlfbmFtZTsKIAlpbnQgbWljcm92b2x0czsKKwlpbnQgZ3BpbzsKKwl1bnNpZ25lZCBlbmFibGVfaGlnaDoxOworCXVuc2lnbmVkIGVuYWJsZWRfYXRfYm9vdDoxOwogCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKaW5kZXggYmFjNjRmYS4uODdmNWYxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBSRUdVTEFUT1JfQ0hBTkdFX0RSTVMJCTB4MTAKIAogLyoqCi0gKiBzdHJ1Y3QgcmVndWxhdG9yX3N0YXRlIC0gcmVndWxhdG9yIHN0YXRlIGR1cmluZyBsb3cgcG93ZXIgc3lhdGVtIHN0YXRlcworICogc3RydWN0IHJlZ3VsYXRvcl9zdGF0ZSAtIHJlZ3VsYXRvciBzdGF0ZSBkdXJpbmcgbG93IHBvd2VyIHN5c3RlbSBzdGF0ZXMKICAqCiAgKiBUaGlzIGRlc2NyaWJlcyBhIHJlZ3VsYXRvcnMgc3RhdGUgZHVyaW5nIGEgc3lzdGVtIHdpZGUgbG93IHBvd2VyIHN0YXRlLgogICoKQEAgLTExNywyNSArMTE3LDM3IEBACiAJLyogbW9kZSB0byBzZXQgb24gc3RhcnR1cCAqLwogCXVuc2lnbmVkIGludCBpbml0aWFsX21vZGU7CiAKLQkvKiBjb25zdHJpYW50IGZsYWdzICovCisJLyogY29uc3RyYWludCBmbGFncyAqLwogCXVuc2lnbmVkIGFsd2F5c19vbjoxOwkvKiByZWd1bGF0b3IgbmV2ZXIgb2ZmIHdoZW4gc3lzdGVtIGlzIG9uICovCiAJdW5zaWduZWQgYm9vdF9vbjoxOwkvKiBib290bG9hZGVyL2Zpcm13YXJlIGVuYWJsZWQgcmVndWxhdG9yICovCi0JdW5zaWduZWQgYXBwbHlfdVY6MTsJLyogYXBwbHkgdVYgY29uc3RyYWludCBpZmYgbWluID09IG1heCAqLworCXVuc2lnbmVkIGFwcGx5X3VWOjE7CS8qIGFwcGx5IHVWIGNvbnN0cmFpbnQgaWYgbWluID09IG1heCAqLwogfTsKIAogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSAtIHN1cHBseSAtPiBkZXZpY2UgbWFwcGluZwogICoKLSAqIFRoaXMgbWFwcyBhIHN1cHBseSBuYW1lIHRvIGEgZGV2aWNlLgorICogVGhpcyBtYXBzIGEgc3VwcGx5IG5hbWUgdG8gYSBkZXZpY2UuICBPbmx5IG9uZSBvZiBkZXYgb3IgZGV2X25hbWUKKyAqIGNhbiBiZSBzcGVjaWZpZWQuICBVc2Ugb2YgZGV2X25hbWUgYWxsb3dzIHN1cHBvcnQgZm9yIGJ1c2VzIHdoaWNoCisgKiBtYWtlIHN0cnVjdCBkZXZpY2UgYXZhaWxhYmxlIGxhdGUgc3VjaCBhcyBJMkMgYW5kIGlzIHRoZSBwcmVmZXJyZWQKKyAqIGZvcm0uCiAgKgogICogQGRldjogRGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGNvbnN1bWVyLgorICogQGRldl9uYW1lOiBSZXN1bHQgb2YgZGV2X25hbWUoKSBmb3IgdGhlIGNvbnN1bWVyLgogICogQHN1cHBseTogTmFtZSBmb3IgdGhlIHN1cHBseS4KICAqLwogc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgewogCXN0cnVjdCBkZXZpY2UgKmRldjsJLyogY29uc3VtZXIgKi8KKwljb25zdCBjaGFyICpkZXZfbmFtZTsgICAvKiBkZXZfbmFtZSgpIGZvciBjb25zdW1lciAqLwogCWNvbnN0IGNoYXIgKnN1cHBseTsJLyogY29uc3VtZXIgc3VwcGx5IC0gZS5nLiAidmNjIiAqLwogfTsKIAorLyogSW5pdGlhbGl6ZSBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSAqLworI2RlZmluZSBSRUdVTEFUT1JfU1VQUExZKF9uYW1lLCBfZGV2X25hbWUpCQkJXAorewkJCQkJCQkJXAorCS5zdXBwbHkJCT0gX25hbWUsCQkJCVwKKwkuZGV2X25hbWUJPSBfZGV2X25hbWUsCQkJCVwKK30KKwogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAtIHJlZ3VsYXRvciBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBkYXRhLgogICoKQEAgLTE2Niw2ICsxNzgsMTIgQEAKIAogaW50IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIAorI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIHZvaWQgcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHModm9pZCkKK3sKK30KKyNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21heDE1ODYuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21heDE1ODYuaAppbmRleCA0NDU2MzE5Li5kZTlhN2ZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYXgxNTg2LmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWF4MTU4Ni5oCkBAIC0zNiw3ICszNiw3IEBACiAgKiBtYXgxNTg2X3N1YmRldl9kYXRhIC0gcmVndWxhdG9yIGRhdGEKICAqIEBpZDogcmVndWxhdG9yIElkIChlaXRoZXIgTUFYMTU4Nl9WMyBvciBNQVgxNTg2X1Y2KQogICogQG5hbWU6IHJlZ3VsYXRvciBjdXRlIG5hbWUgKGV4YW1wbGUgZm9yIFYzOiAidmNjX2NvcmUiKQotICogQHBsYXRmb3JtX2RhdGE6IHJlZ3VsYXRvciBpbml0IGRhdGEgKGNvbnRyYWludHMsIHN1cHBsaWVzLCAuLi4pCisgKiBAcGxhdGZvcm1fZGF0YTogcmVndWxhdG9yIGluaXQgZGF0YSAoY29uc3RyYWludHMsIHN1cHBsaWVzLCAuLi4pCiAgKi8KIHN0cnVjdCBtYXgxNTg2X3N1YmRldl9kYXRhIHsKIAlpbnQJCQkJaWQ7CkBAIC00Niw3ICs0Niw3IEBACiAKIC8qKgogICogbWF4MTU4Nl9wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gZGF0YSBmb3IgbWF4MTU4NgotICogQG51bV9zdWJkZXZzOiBudW1iZXIgb2YgcmVndWx0b3JzIHVzZWQgKG1heSBiZSAxIG9yIDIpCisgKiBAbnVtX3N1YmRldnM6IG51bWJlciBvZiByZWd1bGF0b3JzIHVzZWQgKG1heSBiZSAxIG9yIDIpCiAgKiBAc3ViZGV2czogcmVndWxhdG9yIHVzZWQKICAqICAgICAgICAgICBBdCBtb3N0LCB0aGVyZSB3aWxsIGJlIGEgcmVndWxhdG9yIGZvciBWMyBhbmQgb25lIGZvciBWNiB2b2x0YWdlcy4KICAqIEB2M19nYWluOiBnYWluIG9uIHRoZSBWMyB2b2x0YWdlIG91dHB1dCBtdWx0aXBsaWVkIGJ5IDFlNi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggYmYxMTZkMC4uNDc3ODQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTcxLDE0ICs3MSwxMCBAQAogdm9pZCBwYWdlX2FkZF9maWxlX3JtYXAoc3RydWN0IHBhZ2UgKik7CiB2b2lkIHBhZ2VfcmVtb3ZlX3JtYXAoc3RydWN0IHBhZ2UgKik7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfVk0KLXZvaWQgcGFnZV9kdXBfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZHVwX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9kdXBfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlhdG9taWNfaW5jKCZwYWdlLT5fbWFwY291bnQpOwogfQotI2VuZGlmCiAKIC8qCiAgKiBDYWxsZWQgZnJvbSBtbS92bXNjYW4uYyB0byBoYW5kbGUgcGFnaW5nIG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhhZjNkMjQuLmNiZjJhM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogc3RydWN0IGJpbzsKIHN0cnVjdCBmc19zdHJ1Y3Q7CiBzdHJ1Y3QgYnRzX2NvbnRleHQ7Ci1zdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQ7CitzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0OwogCiAvKgogICogTGlzdCBvZiBmbGFncyB3ZSB3YW50IHRvIHNoYXJlIGZvciBrZXJuZWwgdGhyZWFkcywKQEAgLTE0MCw2ICsxNDAsMTAgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5yX3J1bm5pbmcodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl91bmludGVycnVwdGlibGUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl9pb3dhaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBucl9pb3dhaXRfY3B1KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhpc19jcHVfbG9hZCh2b2lkKTsKKworCiBleHRlcm4gdm9pZCBjYWxjX2dsb2JhbF9sb2FkKHZvaWQpOwogZXh0ZXJuIHU2NCBjcHVfbnJfbWlncmF0aW9ucyhpbnQgY3B1KTsKIApAQCAtMjU3LDcgKzI2MSw3IEBACiBleHRlcm4gdm9pZCBpbml0X2lkbGUoc3RydWN0IHRhc2tfc3RydWN0ICppZGxlLCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGluaXRfaWRsZV9ib290dXBfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpOwogCi1leHRlcm4gaW50IHJ1bnF1ZXVlX2lzX2xvY2tlZCh2b2lkKTsKK2V4dGVybiBpbnQgcnVucXVldWVfaXNfbG9ja2VkKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgdGFza19ycV91bmxvY2tfd2FpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiBleHRlcm4gY3B1bWFza192YXJfdCBub2h6X2NwdV9tYXNrOwpAQCAtNDIyLDYgKzQyNiwxNSBAQAogCXJldHVybiBtYXgobW0tPmhpd2F0ZXJfcnNzLCBnZXRfbW1fcnNzKG1tKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRtYXhfbW1faGl3YXRlcl9yc3ModW5zaWduZWQgbG9uZyAqbWF4cnNzLAorCQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzcyA9IGdldF9tbV9oaXdhdGVyX3JzcyhtbSk7CisKKwlpZiAoKm1heHJzcyA8IGhpd2F0ZXJfcnNzKQorCQkqbWF4cnNzID0gaGl3YXRlcl9yc3M7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbW1faGl3YXRlcl92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3ZtLCBtbS0+dG90YWxfdm0pOwpAQCAtNDM0LDcgKzQ0Nyw5IEBACiAvKiBkdW1wYWJsZSBiaXRzICovCiAjZGVmaW5lIE1NRl9EVU1QQUJMRSAgICAgIDAgIC8qIGNvcmUgZHVtcCBpcyBwZXJtaXR0ZWQgKi8KICNkZWZpbmUgTU1GX0RVTVBfU0VDVVJFTFkgMSAgLyogY29yZSBmaWxlIGlzIHJlYWRhYmxlIG9ubHkgYnkgcm9vdCAqLworCiAjZGVmaW5lIE1NRl9EVU1QQUJMRV9CSVRTIDIKKyNkZWZpbmUgTU1GX0RVTVBBQkxFX01BU0sgKCgxIDw8IE1NRl9EVU1QQUJMRV9CSVRTKSAtIDEpCiAKIC8qIGNvcmVkdW1wIGZpbHRlciBiaXRzICovCiAjZGVmaW5lIE1NRl9EVU1QX0FOT05fUFJJVkFURQkyCkBAIC00NDQsNiArNDU5LDcgQEAKICNkZWZpbmUgTU1GX0RVTVBfRUxGX0hFQURFUlMJNgogI2RlZmluZSBNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUgNwogI2RlZmluZSBNTUZfRFVNUF9IVUdFVExCX1NIQVJFRCAgOAorCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVAlNTUZfRFVNUEFCTEVfQklUUwogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk3CiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFwKQEAgLTQ1Nyw2ICs0NzMsMTAgQEAKICNlbHNlCiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGCTAKICNlbmRpZgorCQkJCQkvKiBsZWF2ZSByb29tIGZvciBtb3JlIGR1bXAgZmxhZ3MgKi8KKyNkZWZpbmUgTU1GX1ZNX01FUkdFQUJMRQkxNgkvKiBLU00gbWF5IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLworCisjZGVmaW5lIE1NRl9JTklUX01BU0sJCShNTUZfRFVNUEFCTEVfTUFTSyB8IE1NRl9EVU1QX0ZJTFRFUl9NQVNLKQogCiBzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgewogCWF0b21pY190CQljb3VudDsKQEAgLTQ3Myw2ICs0OTMsMTMgQEAKIAl1bnNpZ25lZCBsb25nCQlhY19taW5mbHQsIGFjX21hamZsdDsKIH07CiAKK3N0cnVjdCBjcHVfaXRpbWVyIHsKKwljcHV0aW1lX3QgZXhwaXJlczsKKwljcHV0aW1lX3QgaW5jcjsKKwl1MzIgZXJyb3I7CisJdTMyIGluY3JfZXJyb3I7Cit9OworCiAvKioKICAqIHN0cnVjdCB0YXNrX2NwdXRpbWUgLSBjb2xsZWN0ZWQgQ1BVIHRpbWUgY291bnRzCiAgKiBAdXRpbWU6CQl0aW1lIHNwZW50IGluIHVzZXIgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cwpAQCAtNTY3LDkgKzU5NCwxMiBAQAogCXN0cnVjdCBwaWQgKmxlYWRlcl9waWQ7CiAJa3RpbWVfdCBpdF9yZWFsX2luY3I7CiAKLQkvKiBJVElNRVJfUFJPRiBhbmQgSVRJTUVSX1ZJUlRVQUwgdGltZXJzIGZvciB0aGUgcHJvY2VzcyAqLwotCWNwdXRpbWVfdCBpdF9wcm9mX2V4cGlyZXMsIGl0X3ZpcnRfZXhwaXJlczsKLQljcHV0aW1lX3QgaXRfcHJvZl9pbmNyLCBpdF92aXJ0X2luY3I7CisJLyoKKwkgKiBJVElNRVJfUFJPRiBhbmQgSVRJTUVSX1ZJUlRVQUwgdGltZXJzIGZvciB0aGUgcHJvY2Vzcywgd2UgdXNlCisJICogQ1BVQ0xPQ0tfUFJPRiBhbmQgQ1BVQ0xPQ0tfVklSVCBmb3IgaW5kZXhpbmcgYXJyYXkgYXMgdGhlc2UKKwkgKiB2YWx1ZXMgYXJlIGRlZmluZWQgdG8gMCBhbmQgMSByZXNwZWN0aXZlbHkKKwkgKi8KKwlzdHJ1Y3QgY3B1X2l0aW1lciBpdFsyXTsKIAogCS8qCiAJICogVGhyZWFkIGdyb3VwIHRvdGFscyBmb3IgcHJvY2VzcyBDUFUgdGltZXJzLgpAQCAtNjAxLDYgKzYzMSw3IEBACiAJdW5zaWduZWQgbG9uZyBudmNzdywgbml2Y3N3LCBjbnZjc3csIGNuaXZjc3c7CiAJdW5zaWduZWQgbG9uZyBtaW5fZmx0LCBtYWpfZmx0LCBjbWluX2ZsdCwgY21hal9mbHQ7CiAJdW5zaWduZWQgbG9uZyBpbmJsb2NrLCBvdWJsb2NrLCBjaW5ibG9jaywgY291YmxvY2s7CisJdW5zaWduZWQgbG9uZyBtYXhyc3MsIGNtYXhyc3M7CiAJc3RydWN0IHRhc2tfaW9fYWNjb3VudGluZyBpb2FjOwogCiAJLyoKQEAgLTYzMiw2ICs2NjMsOCBAQAogCXVuc2lnbmVkIGF1ZGl0X3R0eTsKIAlzdHJ1Y3QgdHR5X2F1ZGl0X2J1ZiAqdHR5X2F1ZGl0X2J1ZjsKICNlbmRpZgorCisJaW50IG9vbV9hZGo7CS8qIE9PTSBraWxsIHNjb3JlIGFkanVzdG1lbnQgKGJpdCBzaGlmdCkgKi8KIH07CiAKIC8qIENvbnRleHQgc3dpdGNoIG11c3QgYmUgdW5sb2NrZWQgaWYgaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZCAqLwpAQCAtNzAxLDcgKzczNCw3IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlhdG9taWNfbG9uZ190IGxvY2tlZF92bTsKICNlbmRpZgogfTsKQEAgLTEwNzUsNiArMTEwOCw4IEBACiAJdm9pZCAoKnByaW9fY2hhbmdlZCkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJICAgICBpbnQgb2xkcHJpbywgaW50IHJ1bm5pbmcpOwogCisJdW5zaWduZWQgaW50ICgqZ2V0X3JyX2ludGVydmFsKSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJdm9pZCAoKm1vdmVkX2dyb3VwKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKICNlbmRpZgpAQCAtMTIxMiw3ICsxMjQ3LDYgQEAKIAkgKiBhIHNob3J0IHRpbWUKIAkgKi8KIAl1bnNpZ25lZCBjaGFyIGZwdV9jb3VudGVyOwotCXM4IG9vbWtpbGxhZGo7IC8qIE9PTSBraWxsIHNjb3JlIGFkanVzdG1lbnQgKGJpdCBzaGlmdCkuICovCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UKIAl1bnNpZ25lZCBpbnQgYnRyYWNlX3NlcTsKICNlbmRpZgpAQCAtMTQ0OSwxMCArMTQ4MywxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcGlfc3RhdGVfbGlzdDsKIAlzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKnBpX3N0YXRlX2NhY2hlOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKnBlcmZfY291bnRlcl9jdHhwOwotCXN0cnVjdCBtdXRleCBwZXJmX2NvdW50ZXJfbXV0ZXg7Ci0Jc3RydWN0IGxpc3RfaGVhZCBwZXJmX2NvdW50ZXJfbGlzdDsKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwZXJmX2V2ZW50X2N0eHA7CisJc3RydWN0IG11dGV4IHBlcmZfZXZlbnRfbXV0ZXg7CisJc3RydWN0IGxpc3RfaGVhZCBwZXJmX2V2ZW50X2xpc3Q7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTlVNQQogCXN0cnVjdCBtZW1wb2xpY3kgKm1lbXBvbGljeTsJLyogUHJvdGVjdGVkIGJ5IGFsbG9jX2xvY2sgKi8KQEAgLTE1MDUsNiArMTUzOSw3IEBACiAJLyogYml0bWFzayBvZiB0cmFjZSByZWN1cnNpb24gKi8KIAl1bnNpZ25lZCBsb25nIHRyYWNlX3JlY3Vyc2lvbjsKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLworCXVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQ7CiB9OwogCiAvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLwpAQCAtMTcxMSw3ICsxNzQ2LDcgQEAKICNkZWZpbmUgUEZfRlJPWkVOCTB4MDAwMTAwMDAJLyogZnJvemVuIGZvciBzeXN0ZW0gc3VzcGVuZCAqLwogI2RlZmluZSBQRl9GU1RSQU5TCTB4MDAwMjAwMDAJLyogaW5zaWRlIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiAqLwogI2RlZmluZSBQRl9LU1dBUEQJMHgwMDA0MDAwMAkvKiBJIGFtIGtzd2FwZCAqLwotI2RlZmluZSBQRl9TV0FQT0ZGCTB4MDAwODAwMDAJLyogSSBhbSBpbiBzd2Fwb2ZmICovCisjZGVmaW5lIFBGX09PTV9PUklHSU4JMHgwMDA4MDAwMAkvKiBBbGxvY2F0aW5nIG11Y2ggbWVtb3J5IHRvIG90aGVycyAqLwogI2RlZmluZSBQRl9MRVNTX1RIUk9UVExFIDB4MDAxMDAwMDAJLyogVGhyb3R0bGUgbWUgbGVzczogSSBjbGVhbiBtZW1vcnkgKi8KICNkZWZpbmUgUEZfS1RIUkVBRAkweDAwMjAwMDAwCS8qIEkgYW0gYSBrZXJuZWwgdGhyZWFkICovCiAjZGVmaW5lIFBGX1JBTkRPTUlaRQkweDAwNDAwMDAwCS8qIHJhbmRvbWl6ZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKi8KQEAgLTE3NTMsNyArMTc4OCw2IEBACiAKICNkZWZpbmUgUkNVX1JFQURfVU5MT0NLX0JMT0NLRUQgKDEgPDwgMCkgLyogYmxvY2tlZCB3aGlsZSBpbiBSQ1UgcmVhZC1zaWRlLiAqLwogI2RlZmluZSBSQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUyAoMSA8PCAxKSAvKiBSQ1UgY29yZSBuZWVkcyBDUFUgcmVzcG9uc2UuICovCi0jZGVmaW5lIFJDVV9SRUFEX1VOTE9DS19HT1RfUVMgICgxIDw8IDIpIC8qIENQVSBoYXMgcmVzcG9uZGVkIHRvIFJDVSBjb3JlLiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2NvcHlfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWwuaAppbmRleCBlNWJiNzVhLi5jODYxM2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsLmgKQEAgLTEyMiw2ICsxMjIsNyBAQAogCiAvKiBJbnRlcm5hbCBmbGFncyB1c2VkIG9ubHkgYnkga2VybmVsICovCiAjZGVmaW5lIEFTWU5DQl9JTklUSUFMSVpFRAkzMSAvKiBTZXJpYWwgcG9ydCB3YXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQVNZTkNCX1NVU1BFTkRFRAkzMCAvKiBTZXJpYWwgcG9ydCBpcyBzdXNwZW5kZWQgKi8KICNkZWZpbmUgQVNZTkNCX05PUk1BTF9BQ1RJVkUJMjkgLyogTm9ybWFsIGRldmljZSBpcyBhY3RpdmUgKi8KICNkZWZpbmUgQVNZTkNCX0JPT1RfQVVUT0NPTkYJMjggLyogQXV0b2NvbmZpZ3VyZSBwb3J0IG9uIGJvb3R1cCAqLwogI2RlZmluZSBBU1lOQ0JfQ0xPU0lORwkJMjcgLyogU2VyaWFsIHBvcnQgaXMgY2xvc2luZyAqLwpAQCAtMTMzLDYgKzEzNCw3IEBACiAjZGVmaW5lIEFTWU5DQl9GSVJTVF9LRVJORUwJMjIKIAogI2RlZmluZSBBU1lOQ19IVVBfTk9USUZZCSgxVSA8PCBBU1lOQ0JfSFVQX05PVElGWSkKKyNkZWZpbmUgQVNZTkNfU1VTUEVOREVECQkoMVUgPDwgQVNZTkNCX1NVU1BFTkRFRCkKICNkZWZpbmUgQVNZTkNfRk9VUlBPUlQJCSgxVSA8PCBBU1lOQ0JfRk9VUlBPUlQpCiAjZGVmaW5lIEFTWU5DX1NBSwkJKDFVIDw8IEFTWU5DQl9TQUspCiAjZGVmaW5lIEFTWU5DX1NQTElUX1RFUk1JT1MJKDFVIDw8IEFTWU5DQl9TUExJVF9URVJNSU9TKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oCmluZGV4IGQ0ZDJhNzguLmZiNDZhYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsXzgyNTAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF84MjUwLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAl2b2lkIF9faW9tZW0JKm1lbWJhc2U7CS8qIGlvcmVtYXAgY29va2llIG9yIE5VTEwgKi8KIAlyZXNvdXJjZV9zaXplX3QJbWFwYmFzZTsJLyogcmVzb3VyY2UgYmFzZSAqLwogCXVuc2lnbmVkIGludAlpcnE7CQkvKiBpbnRlcnJ1cHQgbnVtYmVyICovCisJdW5zaWduZWQgbG9uZwlpcnFmbGFnczsJLyogcmVxdWVzdF9pcnEgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQJdWFydGNsazsJLyogVUFSVCBjbG9jayByYXRlICovCiAJdm9pZCAgICAgICAgICAgICpwcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhcglyZWdzaGlmdDsJLyogcmVnaXN0ZXIgc2hpZnQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCAyM2QyZmIwLi5kNThlNDYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0yMCw2ICsyMCw4IEBACiAjaWZuZGVmIExJTlVYX1NFUklBTF9DT1JFX0gKICNkZWZpbmUgTElOVVhfU0VSSUFMX0NPUkVfSAogCisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisKIC8qCiAgKiBUaGUgdHlwZSBkZWZpbml0aW9ucy4gIFRoZXNlIGFyZSBmcm9tIFRlZCBUcydvJ3Mgc2VyaWFsLmgKICAqLwpAQCAtMTg2LDcgKzE4OCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KIAogc3RydWN0IHVhcnRfcG9ydDsKLXN0cnVjdCB1YXJ0X2luZm87CiBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdDsKIHN0cnVjdCBkZXZpY2U7CiAKQEAgLTI2NSw2ICsyNjYsNyBAQAogCXVuc2lnbmVkIGludAkJKCpzZXJpYWxfaW4pKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50KTsKIAl2b2lkCQkJKCpzZXJpYWxfb3V0KShzdHJ1Y3QgdWFydF9wb3J0ICosIGludCwgaW50KTsKIAl1bnNpZ25lZCBpbnQJCWlycTsJCQkvKiBpcnEgbnVtYmVyICovCisJdW5zaWduZWQgbG9uZwkJaXJxZmxhZ3M7CQkvKiBpcnEgZmxhZ3MgICovCiAJdW5zaWduZWQgaW50CQl1YXJ0Y2xrOwkJLyogYmFzZSB1YXJ0IGNsb2NrICovCiAJdW5zaWduZWQgaW50CQlmaWZvc2l6ZTsJCS8qIHR4IGZpZm8gc2l6ZSAqLwogCXVuc2lnbmVkIGNoYXIJCXhfY2hhcjsJCQkvKiB4b24veG9mZiBjaGFyICovCkBAIC0yODMsNyArMjg1LDcgQEAKIAogCXVuc2lnbmVkIGludAkJcmVhZF9zdGF0dXNfbWFzazsJLyogZHJpdmVyIHNwZWNpZmljICovCiAJdW5zaWduZWQgaW50CQlpZ25vcmVfc3RhdHVzX21hc2s7CS8qIGRyaXZlciBzcGVjaWZpYyAqLwotCXN0cnVjdCB1YXJ0X2luZm8JKmluZm87CQkJLyogcG9pbnRlciB0byBwYXJlbnQgaW5mbyAqLworCXN0cnVjdCB1YXJ0X3N0YXRlCSpzdGF0ZTsJCQkvKiBwb2ludGVyIHRvIHBhcmVudCBzdGF0ZSAqLwogCXN0cnVjdCB1YXJ0X2ljb3VudAlpY291bnQ7CQkJLyogc3RhdGlzdGljcyAqLwogCiAJc3RydWN0IGNvbnNvbGUJCSpjb25zOwkJCS8qIHN0cnVjdCBjb25zb2xlLCBpZiBhbnkgKi8KQEAgLTMzNSw1MiArMzM3LDE2IEBACiB9OwogCiAvKgotICogVGhpcyBpcyB0aGUgc3RhdGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgb25seSB2YWxpZCB3aGVuIHRoZSBwb3J0Ci0gKiBpcyBvcGVuOyBpdCBtYXkgYmUgY2xlYXJlZCB0aGUgY29yZSBkcml2ZXIgb25jZSB0aGUgZGV2aWNlIGhhcwotICogYmVlbiBjbG9zZWQuICBFaXRoZXIgdGhlIGxvdyBsZXZlbCBkcml2ZXIgb3IgdGhlIGNvcmUgY2FuIG1vZGlmeQotICogc3R1ZmYgaGVyZS4KLSAqLwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlX18gdWlmX3Q7Ci0KLXN0cnVjdCB1YXJ0X2luZm8gewotCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKLQlzdHJ1Y3QgY2lyY19idWYJCXhtaXQ7Ci0JdWlmX3QJCQlmbGFnczsKLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBpbmZvLT5mbGFncy4gIFRoZXNlIGFyZSBfcHJpdmF0ZV8gdG8gc2VyaWFsX2NvcmUsIGFuZAotICogYXJlIHNwZWNpZmljIHRvIHRoaXMgc3RydWN0dXJlLiAgVGhleSBtYXkgYmUgcXVlcmllZCBieSBsb3cgbGV2ZWwgZHJpdmVycy4KLSAqCi0gKiBGSVhNRTogdXNlIHRoZSBBU1lfIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgVUlGX0NIRUNLX0NECQkoKF9fZm9yY2UgdWlmX3QpICgxIDw8IDI1KSkKLSNkZWZpbmUgVUlGX0NUU19GTE9XCQkoKF9fZm9yY2UgdWlmX3QpICgxIDw8IDI2KSkKLSNkZWZpbmUgVUlGX05PUk1BTF9BQ1RJVkUJKChfX2ZvcmNlIHVpZl90KSAoMSA8PCAyOSkpCi0jZGVmaW5lIFVJRl9JTklUSUFMSVpFRAkJKChfX2ZvcmNlIHVpZl90KSAoMSA8PCAzMSkpCi0jZGVmaW5lIFVJRl9TVVNQRU5ERUQJCSgoX19mb3JjZSB1aWZfdCkgKDEgPDwgMzApKQotCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXRsZXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7Ci19OwotCi0vKgogICogVGhpcyBpcyB0aGUgc3RhdGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgcGVyc2lzdGVudCBhY3Jvc3Mgb3BlbnMuCi0gKiBUaGUgbG93IGxldmVsIGRyaXZlciBtdXN0IG5vdCB0byB0b3VjaCBhbnkgZWxlbWVudHMgY29udGFpbmVkCi0gKiB3aXRoaW4uCiAgKi8KIHN0cnVjdCB1YXJ0X3N0YXRlIHsKLQl1bnNpZ25lZCBpbnQJCWNsb3NlX2RlbGF5OwkJLyogbXNlYyAqLwotCXVuc2lnbmVkIGludAkJY2xvc2luZ193YWl0OwkJLyogbXNlYyAqLworCXN0cnVjdCB0dHlfcG9ydAkJcG9ydDsKIAotI2RlZmluZSBVU0ZfQ0xPU0lOR19XQUlUX0lORgkoMCkKLSNkZWZpbmUgVVNGX0NMT1NJTkdfV0FJVF9OT05FCSh+MFUpCi0KLQlpbnQJCQljb3VudDsKIAlpbnQJCQlwbV9zdGF0ZTsKLQlzdHJ1Y3QgdWFydF9pbmZvCWluZm87Ci0Jc3RydWN0IHVhcnRfcG9ydAkqcG9ydDsKKwlzdHJ1Y3QgY2lyY19idWYJCXhtaXQ7CiAKLQlzdHJ1Y3QgbXV0ZXgJCW11dGV4OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0bGV0OworCXN0cnVjdCB1YXJ0X3BvcnQJKnVhcnRfcG9ydDsKIH07CiAKICNkZWZpbmUgVUFSVF9YTUlUX1NJWkUJUEFHRV9TSVpFCkBAIC00NjEsNyArNDI3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdWFydF90eF9zdG9wcGVkKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJaWYodHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC00NzYsNyArNDQyLDcgQEAKICNpZmRlZiBTVVBQT1JUX1NZU1JRCiAJaWYgKHBvcnQtPnN5c3JxKSB7CiAJCWlmIChjaCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBwb3J0LT5zeXNycSkpIHsKLQkJCWhhbmRsZV9zeXNycShjaCwgcG9ydC0+aW5mby0+cG9ydC50dHkpOworCQkJaGFuZGxlX3N5c3JxKGNoLCBwb3J0LT5zdGF0ZS0+cG9ydC50dHkpOwogCQkJcG9ydC0+c3lzcnEgPSAwOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTQ5NCw3ICs0NjAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCB1YXJ0X2hhbmRsZV9icmVhayhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSBwb3J0LT5pbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHBvcnQtPnN0YXRlOwogI2lmZGVmIFNVUFBPUlRfU1lTUlEKIAlpZiAocG9ydC0+Y29ucyAmJiBwb3J0LT5jb25zLT5pbmRleCA9PSBwb3J0LT5saW5lKSB7CiAJCWlmICghcG9ydC0+c3lzcnEpIHsKQEAgLTUwNSw3ICs0NzEsNyBAQAogCX0KICNlbmRpZgogCWlmIChwb3J0LT5mbGFncyAmIFVQRl9TQUspCi0JCWRvX1NBSyhpbmZvLT5wb3J0LnR0eSk7CisJCWRvX1NBSyhzdGF0ZS0+cG9ydC50dHkpOwogCXJldHVybiAwOwogfQogCkBAIC01MTUsMjIgKzQ4MSwyMyBAQAogICoJQHN0YXR1czogbmV3IGNhcnJpZXIgZGV0ZWN0IHN0YXR1cywgbm9uemVybyBpZiBhY3RpdmUKICAqLwogc3RhdGljIGlubGluZSB2b2lkCi11YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBzdGF0dXMpCit1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQogewotCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSBwb3J0LT5pbmZvOworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHVwb3J0LT5zdGF0ZTsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAKLQlwb3J0LT5pY291bnQuZGNkKys7CisJdXBvcnQtPmljb3VudC5kY2QrKzsKIAogI2lmZGVmIENPTkZJR19IQVJEX1BQUwotCWlmICgocG9ydC0+ZmxhZ3MgJiBVUEZfSEFSRFBQU19DRCkgJiYgc3RhdHVzKQorCWlmICgodXBvcnQtPmZsYWdzICYgVVBGX0hBUkRQUFNfQ0QpICYmIHN0YXR1cykKIAkJaGFyZHBwcygpOwogI2VuZGlmCiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBVSUZfQ0hFQ0tfQ0QpIHsKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgewogCQlpZiAoc3RhdHVzKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7Ci0JCWVsc2UgaWYgKGluZm8tPnBvcnQudHR5KQotCQkJdHR5X2hhbmd1cChpbmZvLT5wb3J0LnR0eSk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CisJCWVsc2UgaWYgKHBvcnQtPnR0eSkKKwkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKIAl9CiB9CiAKQEAgLTU0MCwyNCArNTA3LDI0IEBACiAgKglAc3RhdHVzOiBuZXcgY2xlYXIgdG8gc2VuZCBzdGF0dXMsIG5vbnplcm8gaWYgYWN0aXZlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdWFydF9oYW5kbGVfY3RzX2NoYW5nZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQordWFydF9oYW5kbGVfY3RzX2NoYW5nZShzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCwgdW5zaWduZWQgaW50IHN0YXR1cykKIHsKLQlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gcG9ydC0+aW5mbzsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnVwb3J0LT5zdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwogCi0JcG9ydC0+aWNvdW50LmN0cysrOworCXVwb3J0LT5pY291bnQuY3RzKys7CiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBVSUZfQ1RTX0ZMT1cpIHsKKwlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgewogCQlpZiAodHR5LT5od19zdG9wcGVkKSB7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJdHR5LT5od19zdG9wcGVkID0gMDsKLQkJCQlwb3J0LT5vcHMtPnN0YXJ0X3R4KHBvcnQpOwotCQkJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCQkJCXVwb3J0LT5vcHMtPnN0YXJ0X3R4KHVwb3J0KTsKKwkJCQl1YXJ0X3dyaXRlX3dha2V1cCh1cG9ydCk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIXN0YXR1cykgewogCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7Ci0JCQkJcG9ydC0+b3BzLT5zdG9wX3R4KHBvcnQpOworCQkJCXVwb3J0LT5vcHMtPnN0b3BfdHgodXBvcnQpOwogCQkJfQogCQl9CiAJfQpAQCAtNTY5LDcgKzUzNiw3IEBACiB1YXJ0X2luc2VydF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBzdGF0dXMsCiAJCSB1bnNpZ25lZCBpbnQgb3ZlcnJ1biwgdW5zaWduZWQgaW50IGNoLCB1bnNpZ25lZCBpbnQgZmxhZykKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKIAogCWlmICgoc3RhdHVzICYgcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICYgfm92ZXJydW4pID09IDApCiAJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsYWcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZmkuaCBiL2luY2x1ZGUvbGludXgvc2ZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2Zjc2MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2ZpLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qIHNmaS5oIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgKi8KKworLyoKKworICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisKKyAgR1BMIExJQ0VOU0UgU1VNTUFSWQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorCisgIEJTRCBMSUNFTlNFCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIF9MSU5VWF9TRklfSAorI2RlZmluZSBfTElOVVhfU0ZJX0gKKworLyogVGFibGUgc2lnbmF0dXJlcyByZXNlcnZlZCBieSB0aGUgU0ZJIHNwZWNpZmljYXRpb24gKi8KKyNkZWZpbmUgU0ZJX1NJR19TWVNUCQkiU1lTVCIKKyNkZWZpbmUgU0ZJX1NJR19GUkVRCQkiRlJFUSIKKyNkZWZpbmUgU0ZJX1NJR19JRExFCQkiSURMRSIKKyNkZWZpbmUgU0ZJX1NJR19DUFVTCQkiQ1BVUyIKKyNkZWZpbmUgU0ZJX1NJR19NVE1SCQkiTVRNUiIKKyNkZWZpbmUgU0ZJX1NJR19NUlRDCQkiTVJUQyIKKyNkZWZpbmUgU0ZJX1NJR19NTUFQCQkiTU1BUCIKKyNkZWZpbmUgU0ZJX1NJR19BUElDCQkiQVBJQyIKKyNkZWZpbmUgU0ZJX1NJR19YU0RUCQkiWFNEVCIKKyNkZWZpbmUgU0ZJX1NJR19XQUtFCQkiV0FLRSIKKyNkZWZpbmUgU0ZJX1NJR19TUElCCQkiU1BJQiIKKyNkZWZpbmUgU0ZJX1NJR19JMkNCCQkiSTJDQiIKKyNkZWZpbmUgU0ZJX1NJR19HUEVNCQkiR1BFTSIKKworI2RlZmluZSBTRklfU0lHTkFUVVJFX1NJWkUJNAorI2RlZmluZSBTRklfT0VNX0lEX1NJWkUJCTYKKyNkZWZpbmUgU0ZJX09FTV9UQUJMRV9JRF9TSVpFCTgKKworI2RlZmluZSBTRklfU1lTVF9TRUFSQ0hfQkVHSU4JCTB4MDAwRTAwMDAKKyNkZWZpbmUgU0ZJX1NZU1RfU0VBUkNIX0VORAkJMHgwMDBGRkZGRgorCisjZGVmaW5lIFNGSV9HRVRfTlVNX0VOVFJJRVMocHRhYmxlLCBlbnRyeV90eXBlKSBcCisJKChwdGFibGUtPmhlYWRlci5sZW4gLSBzaXplb2Yoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIpKSAvIFwKKwkoc2l6ZW9mKGVudHJ5X3R5cGUpKSkKKy8qCisgKiBUYWJsZSBzdHJ1Y3R1cmVzIG11c3QgYmUgYnl0ZS1wYWNrZWQgdG8gbWF0Y2ggdGhlIFNGSSBzcGVjaWZpY2F0aW9uLAorICogYXMgdGhleSBhcmUgcHJvdmlkZWQgYnkgdGhlIEJJT1MuCisgKi8KK3N0cnVjdCBzZmlfdGFibGVfaGVhZGVyIHsKKwljaGFyCXNpZ1tTRklfU0lHTkFUVVJFX1NJWkVdOworCXUzMglsZW47CisJdTgJcmV2OworCXU4CWNzdW07CisJY2hhcglvZW1faWRbU0ZJX09FTV9JRF9TSVpFXTsKKwljaGFyCW9lbV90YWJsZV9pZFtTRklfT0VNX1RBQkxFX0lEX1NJWkVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV90YWJsZV9zaW1wbGUgeworCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyCQloZWFkZXI7CisJdTY0CQkJCXBlbnRyeVsxXTsKK30gX19wYWNrZWQ7CisKKy8qIENvbXBseSB3aXRoIFVFRkkgc3BlYyAyLjEgKi8KK3N0cnVjdCBzZmlfbWVtX2VudHJ5IHsKKwl1MzIJdHlwZTsKKwl1NjQJcGh5c19zdGFydDsKKwl1NjQJdmlydF9zdGFydDsKKwl1NjQJcGFnZXM7CisJdTY0CWF0dHJpYjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzZmlfY3B1X3RhYmxlX2VudHJ5IHsKKwl1MzIJYXBpY19pZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzZmlfY3N0YXRlX3RhYmxlX2VudHJ5IHsKKwl1MzIJaGludDsJCS8qIE1XQUlUIGhpbnQgKi8KKwl1MzIJbGF0ZW5jeTsJLyogbGF0ZW5jeSBpbiBtcyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV9hcGljX3RhYmxlX2VudHJ5IHsKKwl1NjQJcGh5c19hZGRyOwkvKiBwaHkgYmFzZSBhZGRyIGZvciBBUElDIHJlZyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV9mcmVxX3RhYmxlX2VudHJ5IHsKKwl1MzIJZnJlcV9taHo7CS8qIGluIE1IWiAqLworCXUzMglsYXRlbmN5OwkvKiB0cmFuc2l0aW9uIGxhdGVuY3kgaW4gbXMgKi8KKwl1MzIJY3RybF92YWw7CS8qIHZhbHVlIHRvIHdyaXRlIHRvIFBFUkZfQ1RMICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX3dha2VfdGFibGVfZW50cnkgeworCXU2NAlwaHlzX2FkZHI7CS8qIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHdha2UgdmVjdG9yIGxvY2F0ZXMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgeworCXU2NAlwaHlzX2FkZHI7CS8qIHBoeSBiYXNlIGFkZHIgZm9yIHRoZSB0aW1lciAqLworCXUzMglmcmVxX2h6OwkvKiBpbiBIWiAqLworCXUzMglpcnE7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSB7CisJdTY0CXBoeXNfYWRkcjsJLyogcGh5IGJhc2UgYWRkciBmb3IgdGhlIFJUQyAqLworCXUzMglpcnE7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX3NwaV90YWJsZV9lbnRyeSB7CisJdTE2CWhvc3RfbnVtOwkvKiBhdHRhY2hlZCB0byBob3N0IDAsIDEuLi4qLworCXUxNgljczsJCS8qIGNoaXAgc2VsZWN0ICovCisJdTE2CWlycV9pbmZvOworCWNoYXIJbmFtZVsxNl07CisJdTgJZGV2X2luZm9bMTBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHNmaV9pMmNfdGFibGVfZW50cnkgeworCXUxNglob3N0X251bTsKKwl1MTYJYWRkcjsJCS8qIHNsYXZlIGFkZHIgKi8KKwl1MTYJaXJxX2luZm87CisJY2hhcgluYW1lWzE2XTsKKwl1OAlkZXZfaW5mb1sxMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2ZpX2dwZV90YWJsZV9lbnRyeSB7CisJdTE2CWxvZ2ljYWxfaWQ7CS8qIGxvZ2ljYWwgaWQgKi8KKwl1MTYJcGh5c19pZDsJLyogcGh5c2ljYWwgR1BFIGlkICovCit9IF9fcGFja2VkOworCisKK3R5cGVkZWYgaW50ICgqc2ZpX3RhYmxlX2hhbmRsZXIpIChzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCisjaWZkZWYgQ09ORklHX1NGSQorZXh0ZXJuIHZvaWQgX19pbml0IHNmaV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgc2ZpX3BsYXRmb3JtX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgc2ZpX2luaXRfbGF0ZSh2b2lkKTsKK2V4dGVybiBpbnQgc2ZpX3RhYmxlX3BhcnNlKGNoYXIgKnNpZ25hdHVyZSwgY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQsCisJCQkJc2ZpX3RhYmxlX2hhbmRsZXIgaGFuZGxlcik7CisKK2V4dGVybiBpbnQgc2ZpX2Rpc2FibGVkOworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfc2ZpKHZvaWQpCit7CisJc2ZpX2Rpc2FibGVkID0gMTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19TRkkgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNmaV9pbml0KHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZmlfaW5pdF9sYXRlKHZvaWQpCit7Cit9CisKKyNkZWZpbmUgc2ZpX2Rpc2FibGVkCTAKKworc3RhdGljIGlubGluZSBpbnQgc2ZpX3RhYmxlX3BhcnNlKGNoYXIgKnNpZ25hdHVyZSwgY2hhciAqb2VtX2lkLAorCQkJCQljaGFyICpvZW1fdGFibGVfaWQsCisJCQkJCXNmaV90YWJsZV9oYW5kbGVyIGhhbmRsZXIpCit7CisJcmV0dXJuIC0xOworfQorCisjZW5kaWYgLyogIUNPTkZJR19TRkkgKi8KKworI2VuZGlmIC8qX0xJTlVYX1NGSV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2ZpX2FjcGkuaCBiL2luY2x1ZGUvbGludXgvc2ZpX2FjcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE1YThjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZmlfYWNwaS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIHNmaS5oIFNpbXBsZSBGaXJtd2FyZSBJbnRlcmZhY2UgKi8KKworLyoKKworICBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisKKyAgR1BMIExJQ0VOU0UgU1VNTUFSWQorCisgIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorCisgIEJTRCBMSUNFTlNFCisKKyAgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaWZuZGVmIF9MSU5VWF9TRklfQUNQSV9ICisjZGVmaW5lIF9MSU5VWF9TRklfQUNQSV9ICisKKyNpZmRlZiBDT05GSUdfU0ZJCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CQkvKiBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKi8KKworZXh0ZXJuIGludCBzZmlfYWNwaV90YWJsZV9wYXJzZShjaGFyICpzaWduYXR1cmUsIGNoYXIgKm9lbV9pZCwKKwkJCQljaGFyICpvZW1fdGFibGVfaWQsCisJCQkJaW50ICgqaGFuZGxlcikoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopKTsKKworc3RhdGljIGlubGluZSBpbnQgYWNwaV9zZmlfdGFibGVfcGFyc2UoY2hhciAqc2lnbmF0dXJlLAorCQkJCWludCAoKmhhbmRsZXIpKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKSkKK3sKKwlpZiAoIWFjcGlfdGFibGVfcGFyc2Uoc2lnbmF0dXJlLCBoYW5kbGVyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2ZpX2FjcGlfdGFibGVfcGFyc2Uoc2lnbmF0dXJlLCBOVUxMLCBOVUxMLCBoYW5kbGVyKTsKK30KKyNlbHNlIC8qICFDT05GSUdfU0ZJICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNmaV9hY3BpX3RhYmxlX3BhcnNlKGNoYXIgKnNpZ25hdHVyZSwgY2hhciAqb2VtX2lkLAorCQkJCWNoYXIgKm9lbV90YWJsZV9pZCwKKwkJCQlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKikpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBhY3BpX3NmaV90YWJsZV9wYXJzZShjaGFyICpzaWduYXR1cmUsCisJCQkJaW50ICgqaGFuZGxlcikoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopKQoreworCXJldHVybiBhY3BpX3RhYmxlX3BhcnNlKHNpZ25hdHVyZSwgaGFuZGxlcik7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TRkkgKi8KKworI2VuZGlmIC8qX0xJTlVYX1NGSV9BQ1BJX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbWMzMzg4MC5oIGIvaW5jbHVkZS9saW51eC9zcGkvbWMzMzg4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmZjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9tYzMzODgwLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBMSU5VWF9TUElfTUMzMzg4MF9ICisjZGVmaW5lIExJTlVYX1NQSV9NQzMzODgwX0gKKworc3RydWN0IG1jMzM4ODBfcGxhdGZvcm1fZGF0YSB7CisJLyogbnVtYmVyIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBHUElPICovCisJdW5zaWduZWQJYmFzZTsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCmluZGV4IGM0N2M0YjQuLjk3YjYwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCkBAIC0yMCw2ICsyMCw3IEBACiAjZGVmaW5lIF9fTElOVVhfU1BJX0gKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiAvKgogICogSU5URVJGQUNFUyBiZXR3ZWVuIFNQSSBtYXN0ZXItc2lkZSBkcml2ZXJzIGFuZCBTUEkgaW5mcmFzdHJ1Y3R1cmUuCkBAIC04Niw3ICs4Nyw3IEBACiAJaW50CQkJaXJxOwogCXZvaWQJCQkqY29udHJvbGxlcl9zdGF0ZTsKIAl2b2lkCQkJKmNvbnRyb2xsZXJfZGF0YTsKLQljaGFyCQkJbW9kYWxpYXNbMzJdOworCWNoYXIJCQltb2RhbGlhc1tTUElfTkFNRV9TSVpFXTsKIAogCS8qCiAJICogbGlrZWx5IG5lZWQgbW9yZSBob29rcyBmb3IgbW9yZSBwcm90b2NvbCBvcHRpb25zIGFmZmVjdGluZyBob3cKQEAgLTE0NSw2ICsxNDYsNyBAQAogCiAvKioKICAqIHN0cnVjdCBzcGlfZHJpdmVyIC0gSG9zdCBzaWRlICJwcm90b2NvbCIgZHJpdmVyCisgKiBAaWRfdGFibGU6IExpc3Qgb2YgU1BJIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCiAgKiBAcHJvYmU6IEJpbmRzIHRoaXMgZHJpdmVyIHRvIHRoZSBzcGkgZGV2aWNlLiAgRHJpdmVycyBjYW4gdmVyaWZ5CiAgKgl0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgcHJlc2VudCwgYW5kIG1heSBuZWVkIHRvIGNvbmZpZ3VyZQogICoJY2hhcmFjdGVyaXN0aWNzIChzdWNoIGFzIGJpdHNfcGVyX3dvcmQpIHdoaWNoIHdlcmVuJ3QgbmVlZGVkIGZvcgpAQCAtMTcwLDYgKzE3Miw3IEBACiAgKiBNTUMsIFJUQywgZmlsZXN5c3RlbSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGVzLCBhbmQgaGFyZHdhcmUgbW9uaXRvcmluZy4KICAqLwogc3RydWN0IHNwaV9kcml2ZXIgeworCWNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkICppZF90YWJsZTsKIAlpbnQJCQkoKnByb2JlKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKIAlpbnQJCQkoKnJlbW92ZSkoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSk7CiAJdm9pZAkJCSgqc2h1dGRvd24pKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOwpAQCAtMjA3LDYgKzIxMCw4IEBACiAgKgllYWNoIHNsYXZlIGhhcyBhIGNoaXBzZWxlY3Qgc2lnbmFsLCBidXQgaXQncyBjb21tb24gdGhhdCBub3QKICAqCWV2ZXJ5IGNoaXBzZWxlY3QgaXMgY29ubmVjdGVkIHRvIGEgc2xhdmUuCiAgKiBAZG1hX2FsaWdubWVudDogU1BJIGNvbnRyb2xsZXIgY29uc3RyYWludCBvbiBETUEgYnVmZmVycyBhbGlnbm1lbnQuCisgKiBAbW9kZV9iaXRzOiBmbGFncyB1bmRlcnN0b29kIGJ5IHRoaXMgY29udHJvbGxlciBkcml2ZXIKKyAqIEBmbGFnczogb3RoZXIgY29uc3RyYWludHMgcmVsZXZhbnQgdG8gdGhpcyBkcml2ZXIKICAqIEBzZXR1cDogdXBkYXRlcyB0aGUgZGV2aWNlIG1vZGUgYW5kIGNsb2NraW5nIHJlY29yZHMgdXNlZCBieSBhCiAgKglkZXZpY2UncyBTUEkgY29udHJvbGxlcjsgcHJvdG9jb2wgY29kZSBtYXkgY2FsbCB0aGlzLiAgVGhpcwogICoJbXVzdCBmYWlsIGlmIGFuIHVucmVjb2duaXplZCBvciB1bnN1cHBvcnRlZCBtb2RlIGlzIHJlcXVlc3RlZC4KQEAgLTI1Myw2ICsyNTgsOCBAQAogCS8qIG90aGVyIGNvbnN0cmFpbnRzIHJlbGV2YW50IHRvIHRoaXMgZHJpdmVyICovCiAJdTE2CQkJZmxhZ3M7CiAjZGVmaW5lIFNQSV9NQVNURVJfSEFMRl9EVVBMRVgJQklUKDApCQkvKiBjYW4ndCBkbyBmdWxsIGR1cGxleCAqLworI2RlZmluZSBTUElfTUFTVEVSX05PX1JYCUJJVCgxKQkJLyogY2FuJ3QgZG8gYnVmZmVyIHJlYWQgKi8KKyNkZWZpbmUgU1BJX01BU1RFUl9OT19UWAlCSVQoMikJCS8qIGNhbid0IGRvIGJ1ZmZlciB3cml0ZSAqLwogCiAJLyogU2V0dXAgbW9kZSBhbmQgY2xvY2ssIGV0YyAoc3BpIGRyaXZlciBtYXkgY2FsbCBtYW55IHRpbWVzKS4KIAkgKgpAQCAtNTMzLDQyICs1NDAsNyBAQAogfQogCiBleHRlcm4gaW50IHNwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKLQotLyoqCi0gKiBzcGlfYXN5bmMgLSBhc3luY2hyb25vdXMgU1BJIHRyYW5zZmVyCi0gKiBAc3BpOiBkZXZpY2Ugd2l0aCB3aGljaCBkYXRhIHdpbGwgYmUgZXhjaGFuZ2VkCi0gKiBAbWVzc2FnZTogZGVzY3JpYmVzIHRoZSBkYXRhIHRyYW5zZmVycywgaW5jbHVkaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sKLSAqIENvbnRleHQ6IGFueSAoaXJxcyBtYXkgYmUgYmxvY2tlZCwgZXRjKQotICoKLSAqIFRoaXMgY2FsbCBtYXkgYmUgdXNlZCBpbl9pcnEgYW5kIG90aGVyIGNvbnRleHRzIHdoaWNoIGNhbid0IHNsZWVwLAotICogYXMgd2VsbCBhcyBmcm9tIHRhc2sgY29udGV4dHMgd2hpY2ggY2FuIHNsZWVwLgotICoKLSAqIFRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGludm9rZWQgaW4gYSBjb250ZXh0IHdoaWNoIGNhbid0IHNsZWVwLgotICogQmVmb3JlIHRoYXQgaW52b2NhdGlvbiwgdGhlIHZhbHVlIG9mIG1lc3NhZ2UtPnN0YXR1cyBpcyB1bmRlZmluZWQuCi0gKiBXaGVuIHRoZSBjYWxsYmFjayBpcyBpc3N1ZWQsIG1lc3NhZ2UtPnN0YXR1cyBob2xkcyBlaXRoZXIgemVybyAodG8KLSAqIGluZGljYXRlIGNvbXBsZXRlIHN1Y2Nlc3MpIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4gIEFmdGVyIHRoYXQKLSAqIGNhbGxiYWNrIHJldHVybnMsIHRoZSBkcml2ZXIgd2hpY2ggaXNzdWVkIHRoZSB0cmFuc2ZlciByZXF1ZXN0IG1heQotICogZGVhbGxvY2F0ZSB0aGUgYXNzb2NpYXRlZCBtZW1vcnk7IGl0J3Mgbm8gbG9uZ2VyIGluIHVzZSBieSBhbnkgU1BJCi0gKiBjb3JlIG9yIGNvbnRyb2xsZXIgZHJpdmVyIGNvZGUuCi0gKgotICogTm90ZSB0aGF0IGFsdGhvdWdoIGFsbCBtZXNzYWdlcyB0byBhIHNwaV9kZXZpY2UgYXJlIGhhbmRsZWQgaW4KLSAqIEZJRk8gb3JkZXIsIG1lc3NhZ2VzIG1heSBnbyB0byBkaWZmZXJlbnQgZGV2aWNlcyBpbiBvdGhlciBvcmRlcnMuCi0gKiBTb21lIGRldmljZSBtaWdodCBiZSBoaWdoZXIgcHJpb3JpdHksIG9yIGhhdmUgdmFyaW91cyAiaGFyZCIgYWNjZXNzCi0gKiB0aW1lIHJlcXVpcmVtZW50cywgZm9yIGV4YW1wbGUuCi0gKgotICogT24gZGV0ZWN0aW9uIG9mIGFueSBmYXVsdCBkdXJpbmcgdGhlIHRyYW5zZmVyLCBwcm9jZXNzaW5nIG9mCi0gKiB0aGUgZW50aXJlIG1lc3NhZ2UgaXMgYWJvcnRlZCwgYW5kIHRoZSBkZXZpY2UgaXMgZGVzZWxlY3RlZC4KLSAqIFVudGlsIHJldHVybmluZyBmcm9tIHRoZSBhc3NvY2lhdGVkIG1lc3NhZ2UgY29tcGxldGlvbiBjYWxsYmFjaywKLSAqIG5vIG90aGVyIHNwaV9tZXNzYWdlIHF1ZXVlZCB0byB0aGF0IGRldmljZSB3aWxsIGJlIHByb2Nlc3NlZC4KLSAqIChUaGlzIHJ1bGUgYXBwbGllcyBlcXVhbGx5IHRvIGFsbCB0aGUgc3luY2hyb25vdXMgdHJhbnNmZXIgY2FsbHMsCi0gKiB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIHRoaXMgY29yZSBhc3luY2hyb25vdXMgcHJpbWl0aXZlLikKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXNwaV9hc3luYyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1lc3NhZ2UpCi17Ci0JbWVzc2FnZS0+c3BpID0gc3BpOwotCXJldHVybiBzcGktPm1hc3Rlci0+dHJhbnNmZXIoc3BpLCBtZXNzYWdlKTsKLX0KK2V4dGVybiBpbnQgc3BpX2FzeW5jKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNzMyLDcgKzcwNCw3IEBACiAJICogY29udHJvbGxlcl9kYXRhIGdvZXMgdG8gc3BpX2RldmljZS5jb250cm9sbGVyX2RhdGEsCiAJICogaXJxIGlzIGNvcGllZCB0b28KIAkgKi8KLQljaGFyCQltb2RhbGlhc1szMl07CisJY2hhcgkJbW9kYWxpYXNbU1BJX05BTUVfU0laRV07CiAJY29uc3Qgdm9pZAkqcGxhdGZvcm1fZGF0YTsKIAl2b2lkCQkqY29udHJvbGxlcl9kYXRhOwogCWludAkJaXJxOwpAQCAtODAwLDQgKzc3Miw3IEBACiAJCWRldmljZV91bnJlZ2lzdGVyKCZzcGktPmRldik7CiB9CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqCitzcGlfZ2V0X2RldmljZV9pZChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc2Rldik7CisKICNlbmRpZiAvKiBfX0xJTlVYX1NQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggM2Y2MzIxOC4uOTk2ZGY0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtMTExLDcgKzExMSw3IEBACiAJdm9pZAkJCSgqY3JkZXN0cm95KShzdHJ1Y3QgcnBjX2NyZWQgKik7CiAKIAlpbnQJCQkoKmNybWF0Y2gpKHN0cnVjdCBhdXRoX2NyZWQgKiwgc3RydWN0IHJwY19jcmVkICosIGludCk7Ci0Jdm9pZAkJCSgqY3JiaW5kKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IHJwY19jcmVkICopOworCXZvaWQJCQkoKmNyYmluZCkoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOwogCV9fYmUzMiAqCQkoKmNybWFyc2hhbCkoc3RydWN0IHJwY190YXNrICosIF9fYmUzMiAqKTsKIAlpbnQJCQkoKmNycmVmcmVzaCkoc3RydWN0IHJwY190YXNrICopOwogCV9fYmUzMiAqCQkoKmNydmFsaWRhdGUpKHN0cnVjdCBycGNfdGFzayAqLCBfX2JlMzIgKik7CkBAIC0xNDAsNyArMTQwLDcgQEAKIHZvaWQJCQlycGNhdXRoX2luaXRfY3JlZChzdHJ1Y3QgcnBjX2NyZWQgKiwgY29uc3Qgc3RydWN0IGF1dGhfY3JlZCAqLCBzdHJ1Y3QgcnBjX2F1dGggKiwgY29uc3Qgc3RydWN0IHJwY19jcmVkb3BzICopOwogc3RydWN0IHJwY19jcmVkICoJcnBjYXV0aF9sb29rdXBjcmVkKHN0cnVjdCBycGNfYXV0aCAqLCBpbnQpOwogdm9pZAkJCXJwY2F1dGhfYmluZGNyZWQoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOwotdm9pZAkJCXJwY2F1dGhfZ2VuZXJpY19iaW5kX2NyZWQoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqKTsKK3ZvaWQJCQlycGNhdXRoX2dlbmVyaWNfYmluZF9jcmVkKHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgcnBjX2NyZWQgKiwgaW50KTsKIHZvaWQJCQlwdXRfcnBjY3JlZChzdHJ1Y3QgcnBjX2NyZWQgKik7CiB2b2lkCQkJcnBjYXV0aF91bmJpbmRjcmVkKHN0cnVjdCBycGNfdGFzayAqKTsKIF9fYmUzMiAqCQlycGNhdXRoX21hcnNoY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKiwgX19iZTMyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCmluZGV4IGFiM2Y2ZTkuLjhlZDk2NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAKIHN0cnVjdCBycGNfaW5vZGU7CiAKQEAgLTExMyw2ICsxMTQsNyBAQAogCXJwY19hdXRoZmxhdm9yX3QJYXV0aGZsYXZvcjsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAljaGFyCQkJKmNsaWVudF9uYW1lOworCXN0cnVjdCBzdmNfeHBydAkJKmJjX3hwcnQ7CS8qIE5GU3Y0LjEgYmFja2NoYW5uZWwgKi8KIH07CiAKIC8qIFZhbHVlcyBmb3IgImZsYWdzIiBmaWVsZCAqLwpAQCAtMTg4LDUgKzE5MCwxMTcgQEAKICNkZWZpbmUgSVBWNl9TQ09QRV9ERUxJTUlURVIJCSclJwogI2RlZmluZSBJUFY2X1NDT1BFX0lEX0xFTgkJc2l6ZW9mKCIlbm5ubm5ubm5ubiIpCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jbXBfYWRkcjQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwMjsKKworCXJldHVybiBzaW4xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2luMi0+c2luX2FkZHIuc19hZGRyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgX19ycGNfY29weV9hZGRyNChzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzcmMpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzcmM7CisJc3RydWN0IHNvY2thZGRyX2luICpkc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBkc3Q7CisKKwlkc2luLT5zaW5fZmFtaWx5ID0gc3Npbi0+c2luX2ZhbWlseTsKKwlkc2luLT5zaW5fYWRkci5zX2FkZHIgPSBzc2luLT5zaW5fYWRkci5zX2FkZHI7CisJcmV0dXJuIHRydWU7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXAxOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDI7CisJcmV0dXJuIGlwdjZfYWRkcl9lcXVhbCgmc2luMS0+c2luNl9hZGRyLCAmc2luMi0+c2luNl9hZGRyKTsKK30KKworc3RhdGljIGlubGluZSBib29sIF9fcnBjX2NvcHlfYWRkcjYoc3RydWN0IHNvY2thZGRyICpkc3QsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc3JjKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNzaW42ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc3JjOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmRzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0OworCisJZHNpbjYtPnNpbjZfZmFtaWx5ID0gc3NpbjYtPnNpbjZfZmFtaWx5OworCWlwdjZfYWRkcl9jb3B5KCZkc2luNi0+c2luNl9hZGRyLCAmc3NpbjYtPnNpbjZfYWRkcik7CisJcmV0dXJuIHRydWU7Cit9CisjZWxzZQkvKiAhKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JwY19jb3B5X2FkZHI2KHN0cnVjdCBzb2NrYWRkciAqZHN0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNyYykKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCisKKy8qKgorICogcnBjX2NtcF9hZGRyIC0gY29tcGFyZSB0aGUgYWRkcmVzcyBwb3J0aW9uIG9mIHR3byBzb2NrYWRkcnMuCisgKiBAc2FwMTogZmlyc3Qgc29ja2FkZHIKKyAqIEBzYXAyOiBzZWNvbmQgc29ja2FkZHIKKyAqCisgKiBKdXN0IGNvbXBhcmVzIHRoZSBmYW1pbHkgYW5kIGFkZHJlc3MgcG9ydGlvbi4gSWdub3JlcyBwb3J0LCBzY29wZSwgZXRjLgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBhZGRycyBhcmUgZXF1YWwsIGZhbHNlIGlmIHRoZXkgYXJlbid0LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcnBjX2NtcF9hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMSwKKwkJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCit7CisJaWYgKHNhcDEtPnNhX2ZhbWlseSA9PSBzYXAyLT5zYV9mYW1pbHkpIHsKKwkJc3dpdGNoIChzYXAxLT5zYV9mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQkJcmV0dXJuIF9fcnBjX2NtcF9hZGRyNChzYXAxLCBzYXAyKTsKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCXJldHVybiBfX3JwY19jbXBfYWRkcjYoc2FwMSwgc2FwMik7CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHJwY19jb3B5X2FkZHIgLSBjb3B5IHRoZSBhZGRyZXNzIHBvcnRpb24gb2Ygb25lIHNvY2thZGRyIHRvIGFub3RoZXIKKyAqIEBkc3Q6IGRlc3RpbmF0aW9uIHNvY2thZGRyCisgKiBAc3JjOiBzb3VyY2Ugc29ja2FkZHIKKyAqCisgKiBKdXN0IGNvcGllcyB0aGUgYWRkcmVzcyBwb3J0aW9uIGFuZCBmYW1pbHkuIElnbm9yZXMgcG9ydCwgc2NvcGUsIGV0Yy4KKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIGNlcnRhaW4gdGhhdCBkc3QgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQKKyAqIHRoZSBhZGRyZXNzIGluIHNyYy4gUmV0dXJucyB0cnVlIGlmIGFkZHJlc3MgZmFtaWx5IGlzIHN1cHBvcnRlZC4gUmV0dXJucworICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcnBjX2NvcHlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKwkJCQkgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzcmMpCit7CisJc3dpdGNoIChzcmMtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIF9fcnBjX2NvcHlfYWRkcjQoZHN0LCBzcmMpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBfX3JwY19jb3B5X2FkZHI2KGRzdCwgc3JjKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHJwY19nZXRfc2NvcGVfaWQgLSByZXR1cm4gc2NvcGVpZCBmb3IgYSBnaXZlbiBzb2NrYWRkcgorICogQHNhOiBzb2NrYWRkciB0byBnZXQgc2NvcGVpZCBmcm9tCisgKgorICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNpbjZfc2NvcGVfaWQgZm9yIEFGX0lORVQ2IGFkZHJzLCBvciAwIGlmCisgKiBub3QgYW4gQUZfSU5FVDYgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgcnBjX2dldF9zY29wZV9pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCWlmIChzYS0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2KQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc2EpLT5zaW42X3Njb3BlX2lkOworfQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQ0xOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCmluZGV4IGVhODAwOTYuLjUyZThjYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCkBAIC05NCw4ICs5NCw2IEBACiAJc3RydWN0IG1vZHVsZSAqCQlzdl9tb2R1bGU7CS8qIG9wdGlvbmFsIG1vZHVsZSB0byBjb3VudCB3aGVuCiAJCQkJCQkgKiBhZGRpbmcgdGhyZWFkcyAqLwogCXN2Y190aHJlYWRfZm4JCXN2X2Z1bmN0aW9uOwkvKiBtYWluIGZ1bmN0aW9uIGZvciB0aHJlYWRzICovCi0JdW5zaWduZWQgaW50CQlzdl9kcmNfbWF4X3BhZ2VzOyAvKiBUb3RhbCBwYWdlcyBmb3IgRFJDICovCi0JdW5zaWduZWQgaW50CQlzdl9kcmNfcGFnZXNfdXNlZDsvKiBEUkMgcGFnZXMgdXNlZCAqLwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCXN0cnVjdCBsaXN0X2hlYWQJc3ZfY2JfbGlzdDsJLyogcXVldWUgZm9yIGNhbGxiYWNrIHJlcXVlc3RzCiAJCQkJCQkgKiB0aGF0IGFycml2ZSBvdmVyIHRoZSBzYW1lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAppbmRleCAyMjIzYWUwLi41ZjRlMThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKQEAgLTY1LDYgKzY1LDcgQEAKIAlzaXplX3QJCQl4cHRfbG9jYWxsZW47CS8qIGxlbmd0aCBvZiBhZGRyZXNzICovCiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJeHB0X3JlbW90ZTsJLyogcmVtb3RlIHBlZXIncyBhZGRyZXNzICovCiAJc2l6ZV90CQkJeHB0X3JlbW90ZWxlbjsJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJeHB0X2JjX3BlbmRpbmc7CS8qIGJhY2tjaGFubmVsIHdhaXQgcXVldWUgKi8KIH07CiAKIGludAlzdmNfcmVnX3hwcnRfY2xhc3Moc3RydWN0IHN2Y194cHJ0X2NsYXNzICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oCmluZGV4IDA0ZGJhMjMuLjFiMzUzYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAkvKiBwcml2YXRlIFRDUCBwYXJ0ICovCiAJdTMyCQkJc2tfcmVjbGVuOwkvKiBsZW5ndGggb2YgcmVjb3JkICovCiAJdTMyCQkJc2tfdGNwbGVuOwkvKiBjdXJyZW50IHJlYWQgbGVuZ3RoICovCisJc3RydWN0IHJwY194cHJ0CQkqc2tfYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCB4cHJ0ICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCmluZGV4IGMwOTBkZjQuLjZmOTQ1N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKQEAgLTEyNCw2ICsxMjQsMjMgQEAKIAl2b2lkCQkoKnByaW50X3N0YXRzKShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKTsKIH07CiAKKy8qCisgKiBSUEMgdHJhbnNwb3J0IGlkZW50aWZpZXJzCisgKgorICogVG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBoaXN0b3JpY2FsIHVzZSBvZiByYXcgSVAgcHJvdG9jb2wKKyAqIGlkJ3MgZm9yIHRyYW5zcG9ydCBzZWxlY3Rpb24sIFVEUCBhbmQgVENQIGlkZW50aWZpZXJzIGFyZSBzcGVjaWZpZWQKKyAqIHdpdGggdGhlIHByZXZpb3VzIHZhbHVlcy4gTm8gc3VjaCByZXN0cmljdGlvbiBleGlzdHMgZm9yIG5ldyB0cmFuc3BvcnRzLAorICogZXhjZXB0IHRoYXQgdGhleSBtYXkgbm90IGNvbGxpZGUgd2l0aCB0aGVzZSB2YWx1ZXMgKDE3IGFuZCA2LAorICogcmVzcGVjdGl2ZWx5KS4KKyAqLworI2RlZmluZSBYUFJUX1RSQU5TUE9SVF9CQyAgICAgICAoMSA8PCAzMSkKK2VudW0geHBydF90cmFuc3BvcnRzIHsKKwlYUFJUX1RSQU5TUE9SVF9VRFAJPSBJUFBST1RPX1VEUCwKKwlYUFJUX1RSQU5TUE9SVF9UQ1AJPSBJUFBST1RPX1RDUCwKKwlYUFJUX1RSQU5TUE9SVF9CQ19UQ1AJPSBJUFBST1RPX1RDUCB8IFhQUlRfVFJBTlNQT1JUX0JDLAorCVhQUlRfVFJBTlNQT1JUX1JETUEJPSAyNTYKK307CisKIHN0cnVjdCBycGNfeHBydCB7CiAJc3RydWN0IGtyZWYJCWtyZWY7CQkvKiBSZWZlcmVuY2UgY291bnQgKi8KIAlzdHJ1Y3QgcnBjX3hwcnRfb3BzICoJb3BzOwkJLyogdHJhbnNwb3J0IG1ldGhvZHMgKi8KQEAgLTE3OSw2ICsxOTYsNyBAQAogCXNwaW5sb2NrX3QJCXJlc2VydmVfbG9jazsJLyogbG9jayBzbG90IHRhYmxlICovCiAJdTMyCQkJeGlkOwkJLyogTmV4dCBYSUQgdmFsdWUgdG8gdXNlICovCiAJc3RydWN0IHJwY190YXNrICoJc25kX3Rhc2s7CS8qIFRhc2sgYmxvY2tlZCBpbiBzZW5kICovCisJc3RydWN0IHN2Y194cHJ0CQkqYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCAqLwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCXN0cnVjdCBzdmNfc2VydgkJKmJjX3NlcnY7ICAgICAgIC8qIFRoZSBSUEMgc2VydmljZSB3aGljaCB3aWxsICovCiAJCQkJCQkvKiBwcm9jZXNzIHRoZSBjYWxsYmFjayAqLwpAQCAtMjMxLDYgKzI0OSw3IEBACiAJc3RydWN0IHNvY2thZGRyICoJc3JjYWRkcjsJLyogb3B0aW9uYWwgbG9jYWwgYWRkcmVzcyAqLwogCXN0cnVjdCBzb2NrYWRkciAqCWRzdGFkZHI7CS8qIHJlbW90ZSBwZWVyIGFkZHJlc3MgKi8KIAlzaXplX3QJCQlhZGRybGVuOworCXN0cnVjdCBzdmNfeHBydAkJKmJjX3hwcnQ7CS8qIE5GU3Y0LjEgYmFja2NoYW5uZWwgKi8KIH07CiAKIHN0cnVjdCB4cHJ0X2NsYXNzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRyZG1hLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0cmRtYS5oCmluZGV4IDU0YTM3OWMuLmMyZjA0ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRyZG1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaApAQCAtNDEsMTEgKzQxLDYgQEAKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19YUFJUUkRNQV9ICiAKIC8qCi0gKiBSUEMgdHJhbnNwb3J0IGlkZW50aWZpZXIgZm9yIFJETUEKLSAqLwotI2RlZmluZSBYUFJUX1RSQU5TUE9SVF9SRE1BCTI1NgotCi0vKgogICogcnBjYmluZCAodjMrKSBSRE1BIG5ldGlkLgogICovCiAjZGVmaW5lIFJQQ0JJTkRfTkVUSURfUkRNQQkicmRtYSIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRzb2NrLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oCmluZGV4IGMyYTQ2YzQuLjNmMTRhMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRzb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHNvY2suaApAQCAtMTMsMTcgKzEzLDYgQEAKIHZvaWQJCWNsZWFudXBfc29ja2V0X3hwcnQodm9pZCk7CiAKIC8qCi0gKiBSUEMgdHJhbnNwb3J0IGlkZW50aWZpZXJzIGZvciBVRFAsIFRDUAotICoKLSAqIFRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgaGlzdG9yaWNhbCB1c2Ugb2YgcmF3IElQIHByb3RvY29sCi0gKiBpZCdzIGZvciB0cmFuc3BvcnQgc2VsZWN0aW9uLCB0aGVzZSBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIHByZXZpb3VzCi0gKiB2YWx1ZXMuIE5vIHN1Y2ggcmVzdHJpY3Rpb24gZXhpc3RzIGZvciBuZXcgdHJhbnNwb3J0cywgZXhjZXB0IHRoYXQKLSAqIHRoZXkgbWF5IG5vdCBjb2xsaWRlIHdpdGggdGhlc2UgdmFsdWVzICgxNyBhbmQgNiwgcmVzcGVjdGl2ZWx5KS4KLSAqLwotI2RlZmluZSBYUFJUX1RSQU5TUE9SVF9VRFAJSVBQUk9UT19VRFAKLSNkZWZpbmUgWFBSVF9UUkFOU1BPUlRfVENQCUlQUFJPVE9fVENQCi0KLS8qCiAgKiBSUEMgc2xvdCB0YWJsZSBzaXplcyBmb3IgVURQLCBUQ1AgdHJhbnNwb3J0cwogICovCiBleHRlcm4gdW5zaWduZWQgaW50IHhwcnRfdWRwX3Nsb3RfdGFibGVfZW50cmllczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggN2MxNTMzNC4uNmM5OTBlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTQxOSwxMCArNDE5LDIyIEBACiB9CiAKIC8qIGxpbnV4L21tL3RocmFzaC5jICovCi0jZGVmaW5lIHB1dF9zd2FwX3Rva2VuKG1tKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGdyYWJfc3dhcF90b2tlbihtbSkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBoYXNfc3dhcF90b2tlbihtbSkJMAotI2RlZmluZSBkaXNhYmxlX3N3YXBfdG9rZW4oKQlkbyB7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFiX3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhc19zd2FwX3Rva2VuKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9zd2FwX3Rva2VuKHZvaWQpCit7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN3cF9lbnRyeV90IGVudCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCBhOGUzNzgyLi5hOTkwYWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC01NSw3ICs1NSw3IEBACiBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZDsKIHN0cnVjdCBnZXRjcHVfY2FjaGU7CiBzdHJ1Y3Qgb2xkX2xpbnV4X2RpcmVudDsKLXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0cjsKK3N0cnVjdCBwZXJmX2V2ZW50X2F0dHI7CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Fpb19hYmkuaD4KQEAgLTEwMCwzMyArMTAwLDI1IEBACiAKICNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRShzbmFtZSkJCQkJCSAgICAgICBcCi1zdGF0aWMgaW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKSAgXAorc3RhdGljIGludCBwcm9mX3N5c2VudGVyX2VuYWJsZV8jI3NuYW1lKHZvaWQpCQkJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJICAgICAgIFwKLQlpZiAoIWF0b21pY19pbmNfcmV0dXJuKCZldmVudF9lbnRlcl8jI3NuYW1lLnByb2ZpbGVfY291bnQpKQkgICAgICAgXAotCQlyZXQgPSByZWdfcHJvZl9zeXNjYWxsX2VudGVyKCJzeXMiI3NuYW1lKTsJCSAgICAgICBcCi0JcmV0dXJuIHJldDsJCQkJCQkJICAgICAgIFwKKwlyZXR1cm4gcmVnX3Byb2Zfc3lzY2FsbF9lbnRlcigic3lzIiNzbmFtZSk7CQkJICAgICAgIFwKIH0JCQkJCQkJCQkgICAgICAgXAogCQkJCQkJCQkJICAgICAgIFwKLXN0YXRpYyB2b2lkIHByb2Zfc3lzZW50ZXJfZGlzYWJsZV8jI3NuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbClcCitzdGF0aWMgdm9pZCBwcm9mX3N5c2VudGVyX2Rpc2FibGVfIyNzbmFtZSh2b2lkKQkJCQkgICAgICAgXAogewkJCQkJCQkJCSAgICAgICBcCi0JaWYgKGF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZldmVudF9lbnRlcl8jI3NuYW1lLnByb2ZpbGVfY291bnQpKSAgICAgICBcCi0JCXVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcigic3lzIiNzbmFtZSk7CQkJICAgICAgIFwKKwl1bnJlZ19wcm9mX3N5c2NhbGxfZW50ZXIoInN5cyIjc25hbWUpOwkJCQkgICAgICAgXAogfQogCiAjZGVmaW5lIFRSQUNFX1NZU19FWElUX1BST0ZJTEUoc25hbWUpCQkJCQkgICAgICAgXAotc3RhdGljIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKSAgIFwKK3N0YXRpYyBpbnQgcHJvZl9zeXNleGl0X2VuYWJsZV8jI3NuYW1lKHZvaWQpCQkJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJICAgICAgIFwKLQlpZiAoIWF0b21pY19pbmNfcmV0dXJuKCZldmVudF9leGl0XyMjc25hbWUucHJvZmlsZV9jb3VudCkpCSAgICAgICBcCi0JCXJldCA9IHJlZ19wcm9mX3N5c2NhbGxfZXhpdCgic3lzIiNzbmFtZSk7CQkgICAgICAgXAotCXJldHVybiByZXQ7CQkJCQkJCSAgICAgICBcCisJcmV0dXJuIHJlZ19wcm9mX3N5c2NhbGxfZXhpdCgic3lzIiNzbmFtZSk7CQkJICAgICAgIFwKIH0JCQkJCQkJCQkgICAgICAgXAogCQkJCQkJCQkJICAgICAgIFwKLXN0YXRpYyB2b2lkIHByb2Zfc3lzZXhpdF9kaXNhYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKSBcCitzdGF0aWMgdm9pZCBwcm9mX3N5c2V4aXRfZGlzYWJsZV8jI3NuYW1lKHZvaWQpCQkJCSAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCAmZXZlbnRfZXhpdF8jI3NuYW1lLnByb2ZpbGVfY291bnQpKQkgICAgICAgXAotCQl1bnJlZ19wcm9mX3N5c2NhbGxfZXhpdCgic3lzIiNzbmFtZSk7CQkJICAgICAgIFwKKwl1bnJlZ19wcm9mX3N5c2NhbGxfZXhpdCgic3lzIiNzbmFtZSk7CQkJCSAgICAgICBcCiB9CiAKICNkZWZpbmUgVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEVfSU5JVChzbmFtZSkJCQkJICAgICAgIFwKQEAgLTQ2OCw4ICs0NjAsNyBAQAogCQkJCXZvaWQgX191c2VyICpkYXRhKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdW1vdW50KGNoYXIgX191c2VyICpuYW1lLCBpbnQgZmxhZ3MpOwogYXNtbGlua2FnZSBsb25nIHN5c19vbGR1bW91bnQoY2hhciBfX3VzZXIgKm5hbWUpOwotYXNtbGlua2FnZSBsb25nIHN5c190cnVuY2F0ZShjb25zdCBjaGFyIF9fdXNlciAqcGF0aCwKLQkJCQl1bnNpZ25lZCBsb25nIGxlbmd0aCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3RydW5jYXRlKGNvbnN0IGNoYXIgX191c2VyICpwYXRoLCBsb25nIGxlbmd0aCk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2Z0cnVuY2F0ZSh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc3RhdChjaGFyIF9fdXNlciAqZmlsZW5hbWUsCiAJCQlzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgX191c2VyICpzdGF0YnVmKTsKQEAgLTg4NSw3ICs4NzYsNyBAQAogaW50IGtlcm5lbF9leGVjdmUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKTsKIAogCi1hc21saW5rYWdlIGxvbmcgc3lzX3BlcmZfY291bnRlcl9vcGVuKAotCQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgX191c2VyICphdHRyX3VwdHIsCithc21saW5rYWdlIGxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbigKKwkJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBfX3VzZXIgKmF0dHJfdXB0ciwKIAkJcGlkX3QgcGlkLCBpbnQgY3B1LCBpbnQgZ3JvdXBfZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCBhOTE2YTMxLi5mMGY0M2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5LmgKQEAgLTE4Nyw3ICsxODcsMTIgQEAKIHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIHsKIAkvKiBSZXR1cm4gMSBpZiB0aGUgY2FycmllciBpcyByYWlzZWQgKi8KIAlpbnQgKCpjYXJyaWVyX3JhaXNlZCkoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKKwkvKiBDb250cm9sIHRoZSBEVFIgbGluZSAqLwogCXZvaWQgKCpkdHJfcnRzKShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIGludCByYWlzZSk7CisJLyogQ2FsbGVkIHdoZW4gdGhlIGxhc3QgY2xvc2UgY29tcGxldGVzIG9yIGEgaGFuZ3VwIGZpbmlzaGVzCisJICAgSUZGIHRoZSBwb3J0IHdhcyBpbml0aWFsaXplZC4gRG8gbm90IHVzZSB0byBmcmVlIHJlc291cmNlcyAqLworCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKKwl2b2lkICgqZHJvcCkoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKIH07CiAJCiBzdHJ1Y3QgdHR5X3BvcnQgewpAQCAtMTk4LDExICsyMDMsMTIgQEAKIAlpbnQJCQljb3VudDsJCS8qIFVzYWdlIGNvdW50ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OwkvKiBPcGVuIHdhaXRlcnMgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwkvKiBDbG9zZSB3YWl0ZXJzICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7CS8qIE1vZGVtIHN0YXR1cyBjaGFuZ2UgKi8KIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIFRUWSBmbGFncyBBU1lfKi8KIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwkJLyogTG9ja2luZyAqLwogCXVuc2lnbmVkIGNoYXIJCSp4bWl0X2J1ZjsJLyogT3B0aW9uYWwgYnVmZmVyICovCi0JaW50CQkJY2xvc2VfZGVsYXk7CS8qIENsb3NlIHBvcnQgZGVsYXkgKi8KLQlpbnQJCQljbG9zaW5nX3dhaXQ7CS8qIERlbGF5IGZvciBvdXRwdXQgKi8KKwl1bnNpZ25lZCBpbnQJCWNsb3NlX2RlbGF5OwkvKiBDbG9zZSBwb3J0IGRlbGF5ICovCisJdW5zaWduZWQgaW50CQljbG9zaW5nX3dhaXQ7CS8qIERlbGF5IGZvciBvdXRwdXQgKi8KIAlpbnQJCQlkcmFpbl9kZWxheTsJLyogU2V0IHRvIHplcm8gaWYgbm8gcHVyZSB0aW1lCiAJCQkJCQkgICBiYXNlZCBkcmFpbiBpcyBuZWVkZWQgZWxzZQogCQkJCQkJICAgc2V0IHRvIHNpemUgb2YgZmlmbyAqLwpAQCAtNDU5LDYgKzQ2NSwxMiBAQAogZXh0ZXJuIGludCB0dHlfcG9ydF9jbG9zZV9zdGFydChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsCiAJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogZXh0ZXJuIHZvaWQgdHR5X3BvcnRfY2xvc2VfZW5kKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gdm9pZCB0dHlfcG9ydF9jbG9zZShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIGlubGluZSBpbnQgdHR5X3BvcnRfdXNlcnMoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQoreworCXJldHVybiBwb3J0LT5jb3VudCArIHBvcnQtPmJsb2NrZWRfb3BlbjsKK30KIAogZXh0ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2Nfb3BzICpuZXdfbGRpc2MpOwogZXh0ZXJuIGludCB0dHlfdW5yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYyk7CkBAIC01MjQsNSArNTM2LDggQEAKIGV4dGVybiBpbnQgdnRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKK2V4dGVybiBsb25nIHZ0X2NvbXBhdF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VjYjE0MDAuaCBiL2luY2x1ZGUvbGludXgvdWNiMTQwMC5oCmluZGV4IGFlNzc5YmIuLmFkYjQ0MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWNiMTQwMC5oCisrKyBiL2luY2x1ZGUvbGludXgvdWNiMTQwMC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAvKgogICogVUNCMTQwMCBBQy1saW5rIHJlZ2lzdGVycwpAQCAtODIsNiArODMsMTcgQEAKICNkZWZpbmUgVUNCX0lECQkJMHg3ZQogI2RlZmluZSBVQ0JfSURfMTQwMCAgICAgICAgICAgICAweDQzMDQKIAorc3RydWN0IHVjYjE0MDBfZ3Bpb19kYXRhIHsKKwlpbnQgZ3Bpb19vZmZzZXQ7CisJaW50ICgqZ3Bpb19zZXR1cCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbmdwaW8pOworCWludCAoKmdwaW9fdGVhcmRvd24pKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG5ncGlvKTsKK307CisKK3N0cnVjdCB1Y2IxNDAwX2dwaW8geworCXN0cnVjdCBncGlvX2NoaXAJZ2M7CisJc3RydWN0IHNuZF9hYzk3CQkqYWM5NzsKK307CisKIHN0cnVjdCB1Y2IxNDAwX3RzIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSp0c19pZGV2OwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqdHNfdGFzazsKQEAgLTk1LDYgKzEwNyw3IEBACiAKIHN0cnVjdCB1Y2IxNDAwIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSp1Y2IxNDAwX3RzOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnVjYjE0MDBfZ3BpbzsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdTE2IHVjYjE0MDBfcmVnX3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1MTYgcmVnKQpAQCAtMTQ3LDQgKzE2MCwxMCBAQAogdW5zaWduZWQgaW50IHVjYjE0MDBfYWRjX3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1MTYgYWRjX2NoYW5uZWwsCiAJCQkgICAgICBpbnQgYWRjc3luYyk7CiAKKyNpZmRlZiBDT05GSUdfR1BJT19VQ0IxNDAwCit2b2lkIF9faW5pdCB1Y2IxNDAwX2dwaW9fc2V0X2RhdGEoc3RydWN0IHVjYjE0MDBfZ3Bpb19kYXRhICpkYXRhKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdWNiMTQwMF9ncGlvX3NldF9kYXRhKHN0cnVjdCB1Y2IxNDAwX2dwaW9fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IGIxZTNjMmYuLmEzNGZhODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtMTk1LDcgKzE5NSw3IEBACiAKIAlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIGludGVyZmFjZSBzcGVjaWZpYyBkZXZpY2UgaW5mbyAqLwogCXN0cnVjdCBkZXZpY2UgKnVzYl9kZXY7Ci0JaW50IHBtX3VzYWdlX2NudDsJCS8qIHVzYWdlIGNvdW50ZXIgZm9yIGF1dG9zdXNwZW5kICovCisJYXRvbWljX3QgcG1fdXNhZ2VfY250OwkJLyogdXNhZ2UgY291bnRlciBmb3IgYXV0b3N1c3BlbmQgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd3M7CS8qIGZvciByZXNldHMgaW4gYXRvbWljIGNvbnRleHQgKi8KIH07CiAjZGVmaW5lCXRvX3VzYl9pbnRlcmZhY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2JfaW50ZXJmYWNlLCBkZXYpCkBAIC01NTEsMTMgKzU1MSwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXNiX2F1dG9wbV9lbmFibGUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0JaW50Zi0+cG1fdXNhZ2VfY250ID0gMDsKKwlhdG9taWNfc2V0KCZpbnRmLT5wbV91c2FnZV9jbnQsIDApOwogCXVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZShpbnRmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVzYl9hdXRvcG1fZGlzYWJsZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlpbnRmLT5wbV91c2FnZV9jbnQgPSAxOworCWF0b21pY19zZXQoJmludGYtPnBtX3VzYWdlX2NudCwgMSk7CiAJdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKGludGYpOwogfQogCkBAIC05MjIsNyArOTIyLDcgQEAKIC8qKgogICogc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgLSBpZGVudGlmaWVzIGEgVVNCIGRyaXZlciB0aGF0IHdhbnRzIHRvIHVzZSB0aGUgVVNCIG1ham9yIG51bWJlcgogICogQG5hbWU6IHRoZSB1c2IgY2xhc3MgZGV2aWNlIG5hbWUgZm9yIHRoaXMgZHJpdmVyLiAgV2lsbCBzaG93IHVwIGluIHN5c2ZzLgotICogQG5vZGVuYW1lOiBDYWxsYmFjayB0byBwcm92aWRlIGEgbmFtaW5nIGhpbnQgZm9yIGEgcG9zc2libGUKKyAqIEBkZXZub2RlOiBDYWxsYmFjayB0byBwcm92aWRlIGEgbmFtaW5nIGhpbnQgZm9yIGEgcG9zc2libGUKICAqCWRldmljZSBub2RlIHRvIGNyZWF0ZS4KICAqIEBmb3BzOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9mIHRoaXMgZHJpdmVyLgogICogQG1pbm9yX2Jhc2U6IHRoZSBzdGFydCBvZiB0aGUgbWlub3IgcmFuZ2UgZm9yIHRoaXMgZHJpdmVyLgpAQCAtOTMzLDcgKzkzMyw3IEBACiAgKi8KIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHsKIAljaGFyICpuYW1lOwotCWNoYXIgKigqbm9kZW5hbWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJY2hhciAqKCpkZXZub2RlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSk7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKIAlpbnQgbWlub3JfYmFzZTsKIH07CkBAIC0xMDM2LDkgKzEwMzYsMTAgQEAKICAqIEB0cmFuc2Zlcl9mbGFnczogQSB2YXJpZXR5IG9mIGZsYWdzIG1heSBiZSB1c2VkIHRvIGFmZmVjdCBob3cgVVJCCiAgKglzdWJtaXNzaW9uLCB1bmxpbmtpbmcsIG9yIG9wZXJhdGlvbiBhcmUgaGFuZGxlZC4gIERpZmZlcmVudAogICoJa2luZHMgb2YgVVJCIGNhbiB1c2UgZGlmZmVyZW50IGZsYWdzLgotICogQHRyYW5zZmVyX2J1ZmZlcjogIFRoaXMgaWRlbnRpZmllcyB0aGUgYnVmZmVyIHRvIChvciBmcm9tKSB3aGljaAotICogCXRoZSBJL08gcmVxdWVzdCB3aWxsIGJlIHBlcmZvcm1lZCAodW5sZXNzIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCi0gKglpcyBzZXQpLiAgVGhpcyBidWZmZXIgbXVzdCBiZSBzdWl0YWJsZSBmb3IgRE1BOyBhbGxvY2F0ZSBpdCB3aXRoCisgKiBAdHJhbnNmZXJfYnVmZmVyOiAgVGhpcyBpZGVudGlmaWVzIHRoZSBidWZmZXIgdG8gKG9yIGZyb20pIHdoaWNoIHRoZSBJL08KKyAqCXJlcXVlc3Qgd2lsbCBiZSBwZXJmb3JtZWQgdW5sZXNzIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIGlzIHNldAorICoJKGhvd2V2ZXIsIGRvIG5vdCBsZWF2ZSBnYXJiYWdlIGluIHRyYW5zZmVyX2J1ZmZlciBldmVuIHRoZW4pLgorICoJVGhpcyBidWZmZXIgbXVzdCBiZSBzdWl0YWJsZSBmb3IgRE1BOyBhbGxvY2F0ZSBpdCB3aXRoCiAgKglrbWFsbG9jKCkgb3IgZXF1aXZhbGVudC4gIEZvciB0cmFuc2ZlcnMgdG8gImluIiBlbmRwb2ludHMsIGNvbnRlbnRzCiAgKglvZiB0aGlzIGJ1ZmZlciB3aWxsIGJlIG1vZGlmaWVkLiAgVGhpcyBidWZmZXIgaXMgdXNlZCBmb3IgdGhlIGRhdGEKICAqCXN0YWdlIG9mIGNvbnRyb2wgdHJhbnNmZXJzLgpAQCAtMTA3MSw3ICsxMDcyLDcgQEAKICAqIEBzdGFydF9mcmFtZTogUmV0dXJucyB0aGUgaW5pdGlhbCBmcmFtZSBmb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzLgogICogQG51bWJlcl9vZl9wYWNrZXRzOiBMaXN0cyB0aGUgbnVtYmVyIG9mIElTTyB0cmFuc2ZlciBidWZmZXJzLgogICogQGludGVydmFsOiBTcGVjaWZpZXMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIGludGVycnVwdCBvciBpc29jaHJvbm91cwotICoJdHJhbnNmZXJzLiAgVGhlIHVuaXRzIGFyZSBmcmFtZXMgKG1pbGxpc2Vjb25kcykgZm9yIGZvciBmdWxsIGFuZCBsb3cKKyAqCXRyYW5zZmVycy4gIFRoZSB1bml0cyBhcmUgZnJhbWVzIChtaWxsaXNlY29uZHMpIGZvciBmdWxsIGFuZCBsb3cKICAqCXNwZWVkIGRldmljZXMsIGFuZCBtaWNyb2ZyYW1lcyAoMS84IG1pbGxpc2Vjb25kKSBmb3IgaGlnaHNwZWVkIG9uZXMuCiAgKiBAZXJyb3JfY291bnQ6IFJldHVybnMgdGhlIG51bWJlciBvZiBJU08gdHJhbnNmZXJzIHRoYXQgcmVwb3J0ZWQgZXJyb3JzLgogICogQGNvbnRleHQ6IEZvciB1c2UgaW4gY29tcGxldGlvbiBmdW5jdGlvbnMuICBUaGlzIG5vcm1hbGx5IHBvaW50cyB0bwpAQCAtMTEwNCw5ICsxMTA1LDE1IEBACiAgKiBhbGxvY2F0ZSBhIERNQSBidWZmZXIgd2l0aCB1c2JfYnVmZmVyX2FsbG9jKCkgb3IgY2FsbCB1c2JfYnVmZmVyX21hcCgpLgogICogV2hlbiB0aGVzZSB0cmFuc2ZlciBmbGFncyBhcmUgcHJvdmlkZWQsIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIHdpbGwKICAqIGF0dGVtcHQgdG8gdXNlIHRoZSBkbWEgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSB0cmFuc2Zlcl9kbWEgYW5kL29yCi0gKiBzZXR1cF9kbWEgZmllbGRzIHJhdGhlciB0aGFuIGRldGVybWluaW5nIGEgZG1hIGFkZHJlc3MgdGhlbXNlbHZlcy4gIChOb3RlCi0gKiB0aGF0IHRyYW5zZmVyX2J1ZmZlciBhbmQgc2V0dXBfcGFja2V0IG11c3Qgc3RpbGwgYmUgc2V0IGJlY2F1c2Ugbm90IGFsbAotICogaG9zdCBjb250cm9sbGVycyB1c2UgRE1BLCBub3IgZG8gdmlydHVhbCByb290IGh1YnMpLgorICogc2V0dXBfZG1hIGZpZWxkcyByYXRoZXIgdGhhbiBkZXRlcm1pbmluZyBhIGRtYSBhZGRyZXNzIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZSB0aGF0IHRyYW5zZmVyX2J1ZmZlciBtdXN0IHN0aWxsIGJlIHNldCBpZiB0aGUgY29udHJvbGxlcgorICogZG9lcyBub3Qgc3VwcG9ydCBETUEgKGFzIGluZGljYXRlZCBieSBidXMudXNlc19kbWEpIGFuZCB3aGVuIHRhbGtpbmcKKyAqIHRvIHJvb3QgaHViLiBJZiB5b3UgaGF2ZSB0byB0cmFzZmVyIGJldHdlZW4gaGlnaG1lbSB6b25lIGFuZCB0aGUgZGV2aWNlCisgKiBvbiBzdWNoIGNvbnRyb2xsZXIsIGNyZWF0ZSBhIGJvdW5jZSBidWZmZXIgb3IgYmFpbCBvdXQgd2l0aCBhbiBlcnJvci4KKyAqIElmIHRyYW5zZmVyX2J1ZmZlciBjYW5ub3QgYmUgc2V0IChpcyBpbiBoaWdobWVtKSBhbmQgdGhlIGNvbnRyb2xsZXIgaXMgRE1BCisgKiBjYXBhYmxlLCBhc3NpZ24gTlVMTCB0byBpdCwgc28gdGhhdCB1c2Jtb24ga25vd3Mgbm90IHRvIHVzZSB0aGUgdmFsdWUuCisgKiBUaGUgc2V0dXBfcGFja2V0IG11c3QgYWx3YXlzIGJlIHNldCwgc28gaXQgY2Fubm90IGJlIGxvY2F0ZWQgaW4gaGlnaG1lbS4KICAqCiAgKiBJbml0aWFsaXphdGlvbjoKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAppbmRleCBiNTc0NGJjLi5lYWY5ZGZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKQEAgLTI0LDg4ICsyNCw3OCBAQAogI2RlZmluZSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCTB4MDEKICNkZWZpbmUgVVNCX1NVQkNMQVNTX0FVRElPU1RSRUFNSU5HCTB4MDIKICNkZWZpbmUgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcJMHgwMwotI2RlZmluZSBVU0JfU1VCQ0xBU1NfVkVORE9SX1NQRUMJMHhmZgogCi0vKiBBLjUgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQUMgaW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMqLwotI2RlZmluZSBIRUFERVIJCQkJMHgwMQotI2RlZmluZSBJTlBVVF9URVJNSU5BTAkJCTB4MDIKLSNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMCQkJMHgwMwotI2RlZmluZSBNSVhFUl9VTklUCQkJMHgwNAotI2RlZmluZSBTRUxFQ1RPUl9VTklUCQkJMHgwNQotI2RlZmluZSBGRUFUVVJFX1VOSVQJCQkweDA2Ci0jZGVmaW5lIFBST0NFU1NJTkdfVU5JVAkJCTB4MDcKLSNkZWZpbmUgRVhURU5TSU9OX1VOSVQJCQkweDA4CisvKiBBLjUgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVUFDX0hFQURFUgkJCTB4MDEKKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMCQkweDAyCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUwJCTB4MDMKKyNkZWZpbmUgVUFDX01JWEVSX1VOSVQJCQkweDA0CisjZGVmaW5lIFVBQ19TRUxFQ1RPUl9VTklUCQkweDA1CisjZGVmaW5lIFVBQ19GRUFUVVJFX1VOSVQJCTB4MDYKKyNkZWZpbmUgVUFDX1BST0NFU1NJTkdfVU5JVAkJMHgwNworI2RlZmluZSBVQUNfRVhURU5TSU9OX1VOSVQJCTB4MDgKIAotI2RlZmluZSBBU19HRU5FUkFMCQkJMHgwMQotI2RlZmluZSBGT1JNQVRfVFlQRQkJCTB4MDIKLSNkZWZpbmUgRk9STUFUX1NQRUNJRklDCQkJMHgwMworLyogQS42IEF1ZGlvIENsYXNzLVNwZWNpZmljIEFTIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICovCisjZGVmaW5lIFVBQ19BU19HRU5FUkFMCQkJMHgwMQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEUJCQkweDAyCisjZGVmaW5lIFVBQ19GT1JNQVRfU1BFQ0lGSUMJCTB4MDMKIAotI2RlZmluZSBFUF9HRU5FUkFMCQkJMHgwMQorLyogQS44IEF1ZGlvIENsYXNzLVNwZWNpZmljIEVuZHBvaW50IERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVUFDX0VQX0dFTkVSQUwJCQkweDAxCiAKLSNkZWZpbmUgTVNfR0VORVJBTAkJCTB4MDEKLSNkZWZpbmUgTUlESV9JTl9KQUNLCQkJMHgwMgotI2RlZmluZSBNSURJX09VVF9KQUNLCQkJMHgwMworLyogQS45IEF1ZGlvIENsYXNzLVNwZWNpZmljIFJlcXVlc3QgQ29kZXMgKi8KKyNkZWZpbmUgVUFDX1NFVF8JCQkweDAwCisjZGVmaW5lIFVBQ19HRVRfCQkJMHg4MAogCi0vKiBlbmRwb2ludCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEVQX0FUVFJfTUFTSwkJCTB4MGMKLSNkZWZpbmUgRVBfQVRUUl9BU1lOQwkJCTB4MDQKLSNkZWZpbmUgRVBfQVRUUl9BREFQVElWRQkJMHgwOAotI2RlZmluZSBFUF9BVFRSX1NZTkMJCQkweDBjCisjZGVmaW5lIFVBQ19fQ1VSCQkJMHgxCisjZGVmaW5lIFVBQ19fTUlOCQkJMHgyCisjZGVmaW5lIFVBQ19fTUFYCQkJMHgzCisjZGVmaW5lIFVBQ19fUkVTCQkJMHg0CisjZGVmaW5lIFVBQ19fTUVNCQkJMHg1CiAKLS8qIGNzIGVuZHBvaW50IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgRVBfQ1NfQVRUUl9TQU1QTEVfUkFURQkJMHgwMQotI2RlZmluZSBFUF9DU19BVFRSX1BJVENIX0NPTlRST0wJMHgwMgotI2RlZmluZSBFUF9DU19BVFRSX0ZJTExfTUFYCQkweDgwCisjZGVmaW5lIFVBQ19TRVRfQ1VSCQkJKFVBQ19TRVRfIHwgVUFDX19DVVIpCisjZGVmaW5lIFVBQ19HRVRfQ1VSCQkJKFVBQ19HRVRfIHwgVUFDX19DVVIpCisjZGVmaW5lIFVBQ19TRVRfTUlOCQkJKFVBQ19TRVRfIHwgVUFDX19NSU4pCisjZGVmaW5lIFVBQ19HRVRfTUlOCQkJKFVBQ19HRVRfIHwgVUFDX19NSU4pCisjZGVmaW5lIFVBQ19TRVRfTUFYCQkJKFVBQ19TRVRfIHwgVUFDX19NQVgpCisjZGVmaW5lIFVBQ19HRVRfTUFYCQkJKFVBQ19HRVRfIHwgVUFDX19NQVgpCisjZGVmaW5lIFVBQ19TRVRfUkVTCQkJKFVBQ19TRVRfIHwgVUFDX19SRVMpCisjZGVmaW5lIFVBQ19HRVRfUkVTCQkJKFVBQ19HRVRfIHwgVUFDX19SRVMpCisjZGVmaW5lIFVBQ19TRVRfTUVNCQkJKFVBQ19TRVRfIHwgVUFDX19NRU0pCisjZGVmaW5lIFVBQ19HRVRfTUVNCQkJKFVBQ19HRVRfIHwgVUFDX19NRU0pCiAKLS8qIEF1ZGlvIENsYXNzIHNwZWNpZmljIFJlcXVlc3QgQ29kZXMgKi8KLSNkZWZpbmUgVVNCX0FVRElPX1NFVF9JTlRGCQkweDIxCi0jZGVmaW5lIFVTQl9BVURJT19TRVRfRU5EUE9JTlQJCTB4MjIKLSNkZWZpbmUgVVNCX0FVRElPX0dFVF9JTlRGCQkweGExCi0jZGVmaW5lIFVTQl9BVURJT19HRVRfRU5EUE9JTlQJCTB4YTIKKyNkZWZpbmUgVUFDX0dFVF9TVEFUCQkJMHhmZgogCi0jZGVmaW5lIFNFVF8JMHgwMAotI2RlZmluZSBHRVRfCTB4ODAKKy8qIE1JREkgLSBBLjEgTVMgQ2xhc3MtU3BlY2lmaWMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVUFDX01TX0hFQURFUgkJCTB4MDEKKyNkZWZpbmUgVUFDX01JRElfSU5fSkFDSwkJMHgwMgorI2RlZmluZSBVQUNfTUlESV9PVVRfSkFDSwkJMHgwMwogCi0jZGVmaW5lIF9DVVIJMHgxCi0jZGVmaW5lIF9NSU4JMHgyCi0jZGVmaW5lIF9NQVgJMHgzCi0jZGVmaW5lIF9SRVMJMHg0Ci0jZGVmaW5lIF9NRU0JMHg1CisvKiBNSURJIC0gQS4xIE1TIENsYXNzLVNwZWNpZmljIEVuZHBvaW50IERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVUFDX01TX0dFTkVSQUwJCQkweDAxCiAKLSNkZWZpbmUgU0VUX0NVUgkJKFNFVF8gfCBfQ1VSKQotI2RlZmluZSBHRVRfQ1VSCQkoR0VUXyB8IF9DVVIpCi0jZGVmaW5lIFNFVF9NSU4JCShTRVRfIHwgX01JTikKLSNkZWZpbmUgR0VUX01JTgkJKEdFVF8gfCBfTUlOKQotI2RlZmluZSBTRVRfTUFYCQkoU0VUXyB8IF9NQVgpCi0jZGVmaW5lIEdFVF9NQVgJCShHRVRfIHwgX01BWCkKLSNkZWZpbmUgU0VUX1JFUwkJKFNFVF8gfCBfUkVTKQotI2RlZmluZSBHRVRfUkVTCQkoR0VUXyB8IF9SRVMpCi0jZGVmaW5lIFNFVF9NRU0JCShTRVRfIHwgX01FTSkKLSNkZWZpbmUgR0VUX01FTQkJKEdFVF8gfCBfTUVNKQotCi0jZGVmaW5lIEdFVF9TVEFUCTB4ZmYKLQotI2RlZmluZSBVU0JfQUNfVEVSTUlOQUxfVU5ERUZJTkVECTB4MTAwCi0jZGVmaW5lIFVTQl9BQ19URVJNSU5BTF9TVFJFQU1JTkcJMHgxMDEKLSNkZWZpbmUgVVNCX0FDX1RFUk1JTkFMX1ZFTkRPUl9TUEVDCTB4MUZGCisvKiBUZXJtaW5hbHMgLSAyLjEgVVNCIFRlcm1pbmFsIFR5cGVzICovCisjZGVmaW5lIFVBQ19URVJNSU5BTF9VTkRFRklORUQJCTB4MTAwCisjZGVmaW5lIFVBQ19URVJNSU5BTF9TVFJFQU1JTkcJCTB4MTAxCisjZGVmaW5lIFVBQ19URVJNSU5BTF9WRU5ET1JfU1BFQwkweDFGRgogCiAvKiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLwogLyogNC4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgdXNiX2FjX2hlYWRlcl9kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogOCArIG4gKi8KIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfSU5URVJGQUNFICovCi0JX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBVU0JfTVNfSEVBREVSICovCisJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBVQUNfTVNfSEVBREVSICovCiAJX19sZTE2IGJjZEFEQzsJCQkvKiAweDAxMDAgKi8KIAlfX2xlMTYgd1RvdGFsTGVuZ3RoOwkJLyogaW5jbHVkZXMgVW5pdCBhbmQgVGVybWluYWwgZGVzYy4gKi8KIAlfX3U4ICBiSW5Db2xsZWN0aW9uOwkJLyogbiAqLwogCV9fdTggIGJhSW50ZXJmYWNlTnJbXTsJCS8qIFtuXSAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgVVNCX0RUX0FDX0hFQURFUl9TSVpFKG4pCSg4ICsgKG4pKQorI2RlZmluZSBVQUNfRFRfQUNfSEVBREVSX1NJWkUobikJKDggKyAobikpCiAKIC8qIEFzIGFib3ZlLCBidXQgbW9yZSB1c2VmdWwgZm9yIGRlZmluaW5nIHlvdXIgb3duIGRlc2NyaXB0b3JzOiAqLwotI2RlZmluZSBERUNMQVJFX1VTQl9BQ19IRUFERVJfREVTQ1JJUFRPUihuKSAJCQlcCi1zdHJ1Y3QgdXNiX2FjX2hlYWRlcl9kZXNjcmlwdG9yXyMjbiB7CQkJCVwKKyNkZWZpbmUgREVDTEFSRV9VQUNfQUNfSEVBREVSX0RFU0NSSVBUT1IobikgCQkJXAorc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8jI24gewkJCQlcCiAJX191OCAgYkxlbmd0aDsJCQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQkJXAogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJCQkJXApAQCAtMTE2LDcgKzEwNiw3IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQogCiAvKiA0LjMuMi4xIElucHV0IFRlcm1pbmFsIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1c2JfaW5wdXRfdGVybWluYWxfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX2lucHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDEyICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogQ1NfSU5URVJGQUNFIGRlc2NyaXB0b3IgdHlwZSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogSU5QVVRfVEVSTUlOQUwgZGVzY3JpcHRvciBzdWJ0eXBlICovCkBAIC0xMjksMTggKzExOSwxOSBAQAogCV9fdTggIGlUZXJtaW5hbDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIFVTQl9EVF9BQ19JTlBVVF9URVJNSU5BTF9TSVpFCQkJMTIKKyNkZWZpbmUgVUFDX0RUX0lOUFVUX1RFUk1JTkFMX1NJWkUJCQkxMgogCi0jZGVmaW5lIFVTQl9BQ19JTlBVVF9URVJNSU5BTF9VTkRFRklORUQJCQkweDIwMAotI2RlZmluZSBVU0JfQUNfSU5QVVRfVEVSTUlOQUxfTUlDUk9QSE9ORQkJMHgyMDEKLSNkZWZpbmUgVVNCX0FDX0lOUFVUX1RFUk1JTkFMX0RFU0tUT1BfTUlDUk9QSE9ORQkweDIwMgotI2RlZmluZSBVU0JfQUNfSU5QVVRfVEVSTUlOQUxfUEVSU09OQUxfTUlDUk9QSE9ORQkweDIwMwotI2RlZmluZSBVU0JfQUNfSU5QVVRfVEVSTUlOQUxfT01OSV9ESVJfTUlDUk9QSE9ORQkweDIwNAotI2RlZmluZSBVU0JfQUNfSU5QVVRfVEVSTUlOQUxfTUlDUk9QSE9ORV9BUlJBWQkJMHgyMDUKLSNkZWZpbmUgVVNCX0FDX0lOUFVUX1RFUk1JTkFMX1BST0NfTUlDUk9QSE9ORV9BUlJBWQkweDIwNgorLyogVGVybWluYWxzIC0gMi4yIElucHV0IFRlcm1pbmFsIFR5cGVzICovCisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9VTkRFRklORUQJCQkweDIwMAorI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfTUlDUk9QSE9ORQkJCTB4MjAxCisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9ERVNLVE9QX01JQ1JPUEhPTkUJCTB4MjAyCisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9QRVJTT05BTF9NSUNST1BIT05FCQkweDIwMworI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfT01OSV9ESVJfTUlDUk9QSE9ORQkJMHgyMDQKKyNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX01JQ1JPUEhPTkVfQVJSQVkJCTB4MjA1CisjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9QUk9DX01JQ1JPUEhPTkVfQVJSQVkJMHgyMDYKIAogLyogNC4zLjIuMiBPdXRwdXQgVGVybWluYWwgRGVzY3JpcHRvciAqLwotc3RydWN0IHVzYl9vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA5ICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogQ1NfSU5URVJGQUNFIGRlc2NyaXB0b3IgdHlwZSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogT1VUUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3Igc3VidHlwZSAqLwpAQCAtMTUxLDIzICsxNDIsMjQgQEAKIAlfX3U4ICBpVGVybWluYWw7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBVU0JfRFRfQUNfT1VUUFVUX1RFUk1JTkFMX1NJWkUJCQkJOQorI2RlZmluZSBVQUNfRFRfT1VUUFVUX1RFUk1JTkFMX1NJWkUJCQk5CiAKLSNkZWZpbmUgVVNCX0FDX09VVFBVVF9URVJNSU5BTF9VTkRFRklORUQJCQkweDMwMAotI2RlZmluZSBVU0JfQUNfT1VUUFVUX1RFUk1JTkFMX1NQRUFLRVIJCQkJMHgzMDEKLSNkZWZpbmUgVVNCX0FDX09VVFBVVF9URVJNSU5BTF9IRUFEUEhPTkVTCQkJMHgzMDIKLSNkZWZpbmUgVVNCX0FDX09VVFBVVF9URVJNSU5BTF9IRUFEX01PVU5URURfRElTUExBWV9BVURJTwkweDMwMwotI2RlZmluZSBVU0JfQUNfT1VUUFVUX1RFUk1JTkFMX0RFU0tUT1BfU1BFQUtFUgkJCTB4MzA0Ci0jZGVmaW5lIFVTQl9BQ19PVVRQVVRfVEVSTUlOQUxfUk9PTV9TUEVBS0VSCQkJMHgzMDUKLSNkZWZpbmUgVVNCX0FDX09VVFBVVF9URVJNSU5BTF9DT01NVU5JQ0FUSU9OX1NQRUFLRVIJCTB4MzA2Ci0jZGVmaW5lIFVTQl9BQ19PVVRQVVRfVEVSTUlOQUxfTE9XX0ZSRVFfRUZGRUNUU19TUEVBS0VSCQkweDMwNworLyogVGVybWluYWxzIC0gMi4zIE91dHB1dCBUZXJtaW5hbCBUeXBlcyAqLworI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMX1VOREVGSU5FRAkJCTB4MzAwCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfU1BFQUtFUgkJCTB4MzAxCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfSEVBRFBIT05FUwkJCTB4MzAyCisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfSEVBRF9NT1VOVEVEX0RJU1BMQVlfQVVESU8JMHgzMDMKKyNkZWZpbmUgVUFDX09VVFBVVF9URVJNSU5BTF9ERVNLVE9QX1NQRUFLRVIJCTB4MzA0CisjZGVmaW5lIFVBQ19PVVRQVVRfVEVSTUlOQUxfUk9PTV9TUEVBS0VSCQkweDMwNQorI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMX0NPTU1VTklDQVRJT05fU1BFQUtFUgkweDMwNgorI2RlZmluZSBVQUNfT1VUUFVUX1RFUk1JTkFMX0xPV19GUkVRX0VGRkVDVFNfU1BFQUtFUgkweDMwNwogCiAvKiBTZXQgYkNvbnRyb2xTaXplID0gMiBhcyBkZWZhdWx0IHNldHRpbmcgKi8KLSNkZWZpbmUgVVNCX0RUX0FDX0ZFQVRVUkVfVU5JVF9TSVpFKGNoKQkJKDcgKyAoKGNoKSArIDEpICogMikKKyNkZWZpbmUgVUFDX0RUX0ZFQVRVUkVfVU5JVF9TSVpFKGNoKQkJKDcgKyAoKGNoKSArIDEpICogMikKIAogLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCi0jZGVmaW5lIERFQ0xBUkVfVVNCX0FDX0ZFQVRVUkVfVU5JVF9ERVNDUklQVE9SKGNoKSAJCVwKLXN0cnVjdCB1c2JfYWNfZmVhdHVyZV91bml0X2Rlc2NyaXB0b3JfIyNjaCB7CQkJXAorI2RlZmluZSBERUNMQVJFX1VBQ19GRUFUVVJFX1VOSVRfREVTQ1JJUFRPUihjaCkgCQlcCitzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yXyMjY2ggewkJCVwKIAlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkJCQlcCkBAIC0xNzksNyArMTcxLDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCiAKIC8qIDQuNS4yIENsYXNzLVNwZWNpZmljIEFTIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgdXNiX2FzX2hlYWRlcl9kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDcgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfSU5URVJGQUNFICovCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBBU19HRU5FUkFMICovCkBAIC0xODgsMTYgKzE4MCwxNyBAQAogCV9fbGUxNiB3Rm9ybWF0VGFnOwkJLyogVGhlIEF1ZGlvIERhdGEgRm9ybWF0ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBVU0JfRFRfQVNfSEVBREVSX1NJWkUJCTcKKyNkZWZpbmUgVUFDX0RUX0FTX0hFQURFUl9TSVpFCQk3CiAKLSNkZWZpbmUgVVNCX0FTX0FVRElPX0ZPUk1BVF9UWVBFX0lfVU5ERUZJTkVECTB4MAotI2RlZmluZSBVU0JfQVNfQVVESU9fRk9STUFUX1RZUEVfSV9QQ00JCTB4MQotI2RlZmluZSBVU0JfQVNfQVVESU9fRk9STUFUX1RZUEVfSV9QQ004CQkweDIKLSNkZWZpbmUgVVNCX0FTX0FVRElPX0ZPUk1BVF9UWVBFX0lfSUVFRV9GTE9BVAkweDMKLSNkZWZpbmUgVVNCX0FTX0FVRElPX0ZPUk1BVF9UWVBFX0lfQUxBVwkJMHg0Ci0jZGVmaW5lIFVTQl9BU19BVURJT19GT1JNQVRfVFlQRV9JX01VTEFXCTB4NQorLyogRm9ybWF0cyAtIEEuMS4xIEF1ZGlvIERhdGEgRm9ybWF0IFR5cGUgSSBDb2RlcyAqLworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9VTkRFRklORUQJMHgwCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JX1BDTQkJMHgxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JX1BDTTgJCTB4MgorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9JRUVFX0ZMT0FUCTB4MworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9BTEFXCQkweDQKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfTVVMQVcJCTB4NQogCi1zdHJ1Y3QgdXNiX2FzX2Zvcm1hdF90eXBlX2lfY29udGludW91c19kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9jb250aW51b3VzX2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDggKyAobnMgKiAzKSAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEZPUk1BVF9UWVBFICovCkBAIC0yMTAsOSArMjAzLDkgQEAKIAlfX3U4ICB0VXBwZXJTYW1GcmVxWzNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgVVNCX0FTX0ZPUk1BVF9UWVBFX0lfQ09OVElOVU9VU19ERVNDX1NJWkUJMTQKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfQ09OVElOVU9VU19ERVNDX1NJWkUJMTQKIAotc3RydWN0IHVzYl9hc19mb3JtYXRlX3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA4ICsgKG5zICogMykgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfSU5URVJGQUNFICovCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBGT1JNQVRfVFlQRSAqLwpAQCAtMjI0LDggKzIxNyw4IEBACiAJX191OCAgdFNhbUZyZXFbXVszXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIERFQ0xBUkVfVVNCX0FTX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQyhuKSAJCVwKLXN0cnVjdCB1c2JfYXNfZm9ybWF0ZV90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvcl8jI24gewkJXAorI2RlZmluZSBERUNMQVJFX1VBQ19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0MobikgCQlcCitzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvcl8jI24gewkJXAogCV9fdTggIGJMZW5ndGg7CQkJCQkJXAogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKQEAgLTIzNywxOCArMjMwLDE1IEBACiAJX191OCAgdFNhbUZyZXFbbl1bM107CQkJCQlcCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQogCi0jZGVmaW5lIFVTQl9BU19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0NfU0laRShuKQkoOCArIChuICogMykpCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0NfU0laRShuKQkoOCArIChuICogMykpCiAKLSNkZWZpbmUgVVNCX0FTX0ZPUk1BVF9UWVBFX1VOREVGSU5FRAkweDAKLSNkZWZpbmUgVVNCX0FTX0ZPUk1BVF9UWVBFX0kJCTB4MQotI2RlZmluZSBVU0JfQVNfRk9STUFUX1RZUEVfSUkJCTB4MgotI2RlZmluZSBVU0JfQVNfRk9STUFUX1RZUEVfSUlJCQkweDMKKy8qIEZvcm1hdHMgLSBBLjIgRm9ybWF0IFR5cGUgQ29kZXMgKi8KKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX1VOREVGSU5FRAkweDAKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0kJCTB4MQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUkJCTB4MgorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJCQkweDMKIAotI2RlZmluZSBVU0JfQVNfRU5EUE9JTlRfQVNZTkMJCSgxIDw8IDIpCi0jZGVmaW5lIFVTQl9BU19FTkRQT0lOVF9BREFQVElWRQkoMiA8PCAyKQotI2RlZmluZSBVU0JfQVNfRU5EUE9JTlRfU1lOQwkJKDMgPDwgMikKLQotc3RydWN0IHVzYl9hc19pc29fZW5kcG9pbnRfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX2lzb19lbmRwb2ludF9kZXNjcmlwdG9yIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA3ICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0VORFBPSU5UICovCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBFUF9HRU5FUkFMICovCkBAIC0yNTYsMzAgKzI0NiwzNyBAQAogCV9fdTggIGJMb2NrRGVsYXlVbml0czsKIAlfX2xlMTYgd0xvY2tEZWxheTsKIH07Ci0jZGVmaW5lIFVTQl9BU19JU09fRU5EUE9JTlRfREVTQ19TSVpFCTcKKyNkZWZpbmUgVUFDX0lTT19FTkRQT0lOVF9ERVNDX1NJWkUJNwogCi0jZGVmaW5lIEZVX0NPTlRST0xfVU5ERUZJTkVECQkweDAwCi0jZGVmaW5lIE1VVEVfQ09OVFJPTAkJCTB4MDEKLSNkZWZpbmUgVk9MVU1FX0NPTlRST0wJCQkweDAyCi0jZGVmaW5lIEJBU1NfQ09OVFJPTAkJCTB4MDMKLSNkZWZpbmUgTUlEX0NPTlRST0wJCQkweDA0Ci0jZGVmaW5lIFRSRUJMRV9DT05UUk9MCQkJMHgwNQotI2RlZmluZSBHUkFQSElDX0VRVUFMSVpFUl9DT05UUk9MCTB4MDYKLSNkZWZpbmUgQVVUT01BVElDX0dBSU5fQ09OVFJPTAkJMHgwNwotI2RlZmluZSBERUxBWV9DT05UUk9MCQkJMHgwOAotI2RlZmluZSBCQVNTX0JPT1NUX0NPTlRST0wJCTB4MDkKLSNkZWZpbmUgTE9VRE5FU1NfQ09OVFJPTAkJMHgwYQorI2RlZmluZSBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURQkweDAxCisjZGVmaW5lIFVBQ19FUF9DU19BVFRSX1BJVENIX0NPTlRST0wJMHgwMgorI2RlZmluZSBVQUNfRVBfQ1NfQVRUUl9GSUxMX01BWAkJMHg4MAogCi0jZGVmaW5lIEZVX01VVEUJCSgxIDw8IChNVVRFX0NPTlRST0wgLSAxKSkKLSNkZWZpbmUgRlVfVk9MVU1FCSgxIDw8IChWT0xVTUVfQ09OVFJPTCAtIDEpKQotI2RlZmluZSBGVV9CQVNTCQkoMSA8PCAoQkFTU19DT05UUk9MIC0gMSkpCi0jZGVmaW5lIEZVX01JRAkJKDEgPDwgKE1JRF9DT05UUk9MIC0gMSkpCi0jZGVmaW5lIEZVX1RSRUJMRQkoMSA8PCAoVFJFQkxFX0NPTlRST0wgLSAxKSkKLSNkZWZpbmUgRlVfR1JBUEhJQ19FUQkoMSA8PCAoR1JBUEhJQ19FUVVBTElaRVJfQ09OVFJPTCAtIDEpKQotI2RlZmluZSBGVV9BVVRPX0dBSU4JKDEgPDwgKEFVVE9NQVRJQ19HQUlOX0NPTlRST0wgLSAxKSkKLSNkZWZpbmUgRlVfREVMQVkJKDEgPDwgKERFTEFZX0NPTlRST0wgLSAxKSkKLSNkZWZpbmUgRlVfQkFTU19CT09TVAkoMSA8PCAoQkFTU19CT09TVF9DT05UUk9MIC0gMSkpCi0jZGVmaW5lIEZVX0xPVURORVNTCSgxIDw8IChMT1VETkVTU19DT05UUk9MIC0gMSkpCisvKiBBLjEwLjIgRmVhdHVyZSBVbml0IENvbnRyb2wgU2VsZWN0b3JzICovCisjZGVmaW5lIFVBQ19GVV9DT05UUk9MX1VOREVGSU5FRAkweDAwCisjZGVmaW5lIFVBQ19NVVRFX0NPTlRST0wJCTB4MDEKKyNkZWZpbmUgVUFDX1ZPTFVNRV9DT05UUk9MCQkweDAyCisjZGVmaW5lIFVBQ19CQVNTX0NPTlRST0wJCTB4MDMKKyNkZWZpbmUgVUFDX01JRF9DT05UUk9MCQkJMHgwNAorI2RlZmluZSBVQUNfVFJFQkxFX0NPTlRST0wJCTB4MDUKKyNkZWZpbmUgVUFDX0dSQVBISUNfRVFVQUxJWkVSX0NPTlRST0wJMHgwNgorI2RlZmluZSBVQUNfQVVUT01BVElDX0dBSU5fQ09OVFJPTAkweDA3CisjZGVmaW5lIFVBQ19ERUxBWV9DT05UUk9MCQkweDA4CisjZGVmaW5lIFVBQ19CQVNTX0JPT1NUX0NPTlRST0wJCTB4MDkKKyNkZWZpbmUgVUFDX0xPVURORVNTX0NPTlRST0wJCTB4MGEKKworI2RlZmluZSBVQUNfRlVfTVVURQkJKDEgPDwgKFVBQ19NVVRFX0NPTlRST0wgLSAxKSkKKyNkZWZpbmUgVUFDX0ZVX1ZPTFVNRQkJKDEgPDwgKFVBQ19WT0xVTUVfQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfQkFTUwkJKDEgPDwgKFVBQ19CQVNTX0NPTlRST0wgLSAxKSkKKyNkZWZpbmUgVUFDX0ZVX01JRAkJKDEgPDwgKFVBQ19NSURfQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfVFJFQkxFCQkoMSA8PCAoVUFDX1RSRUJMRV9DT05UUk9MIC0gMSkpCisjZGVmaW5lIFVBQ19GVV9HUkFQSElDX0VRCSgxIDw8IChVQUNfR1JBUEhJQ19FUVVBTElaRVJfQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfQVVUT19HQUlOCSgxIDw8IChVQUNfQVVUT01BVElDX0dBSU5fQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfREVMQVkJCSgxIDw8IChVQUNfREVMQVlfQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfQkFTU19CT09TVAkoMSA8PCAoVUFDX0JBU1NfQk9PU1RfQ09OVFJPTCAtIDEpKQorI2RlZmluZSBVQUNfRlVfTE9VRE5FU1MJCSgxIDw8IChVQUNfTE9VRE5FU1NfQ09OVFJPTCAtIDEpKQorCisjaWZkZWYgX19LRVJORUxfXwogCiBzdHJ1Y3QgdXNiX2F1ZGlvX2NvbnRyb2wgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTI5MCwxOCArMjg3LDYgQEAKIAlpbnQgKCpnZXQpKHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCAqY29uLCB1OCBjbWQpOwogfTsKIAotc3RhdGljIGlubGluZSBpbnQgZ2VuZXJpY19zZXRfY21kKHN0cnVjdCB1c2JfYXVkaW9fY29udHJvbCAqY29uLCB1OCBjbWQsIGludCB2YWx1ZSkKLXsKLQljb24tPmRhdGFbY21kXSA9IHZhbHVlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfZ2V0X2NtZChzdHJ1Y3QgdXNiX2F1ZGlvX2NvbnRyb2wgKmNvbiwgdTggY21kKQotewotCXJldHVybiBjb24tPmRhdGFbY21kXTsKLX0KLQogc3RydWN0IHVzYl9hdWRpb19jb250cm9sX3NlbGVjdG9yIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBjb250cm9sOwpAQCAtMzExLDQgKzI5Niw2IEBACiAJc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZGVzYzsKIH07CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZiAvKiBfX0xJTlVYX1VTQl9BVURJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCmluZGV4IDkzMjIzNjMuLjk0MDEyZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oCkBAIC0yNTgsNiArMjU4LDggQEAKICNkZWZpbmUgVVNCX0NMQVNTX0FQUF9TUEVDCQkweGZlCiAjZGVmaW5lIFVTQl9DTEFTU19WRU5ET1JfU1BFQwkJMHhmZgogCisjZGVmaW5lIFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQwkweGZmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIFVTQl9EVF9DT05GSUc6IENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBpbmZvcm1hdGlvbi4KQEAgLTM0OCw2ICszNTAsMTIgQEAKICNkZWZpbmUgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLCTB4MGYJLyogaW4gYkVuZHBvaW50QWRkcmVzcyAqLwogI2RlZmluZSBVU0JfRU5EUE9JTlRfRElSX01BU0sJCTB4ODAKIAorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ1RZUEUJCTB4MGMKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NZTkNfTk9ORQkJKDAgPDwgMikKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NZTkNfQVNZTkMJCSgxIDw8IDIpCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFCSgyIDw8IDIpCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DX1NZTkMJCSgzIDw8IDIpCisKICNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0sJMHgwMwkvKiBpbiBibUF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTAkwCiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oCmluZGV4IDViODhlMzYuLmFmNGI4NmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaApAQCAtMTA1LDYgKzEwNSw3IEBACiAjZGVmaW5lIFBPUlRfV0tESVNDX0UJKDE8PDIxKQkJLyogd2FrZSBvbiBkaXNjb25uZWN0IChlbmFibGUpICovCiAjZGVmaW5lIFBPUlRfV0tDT05OX0UJKDE8PDIwKQkJLyogd2FrZSBvbiBjb25uZWN0IChlbmFibGUpICovCiAvKiAxOToxNiBmb3IgcG9ydCB0ZXN0aW5nICovCisjZGVmaW5lIFBPUlRfVEVTVF9QS1QJKDB4NDw8MTYpCS8qIFBvcnQgVGVzdCBDb250cm9sIC0gcGFja2V0IHRlc3QgKi8KICNkZWZpbmUgUE9SVF9MRURfT0ZGCSgwPDwxNCkKICNkZWZpbmUgUE9SVF9MRURfQU1CRVIJKDE8PDE0KQogI2RlZmluZSBQT1JUX0xFRF9HUkVFTgkoMjw8MTQpCkBAIC0xMzIsNiArMTMzLDE5IEBACiAjZGVmaW5lIFVTQk1PREVfQ01fSEMJKDM8PDApCQkvKiBob3N0IGNvbnRyb2xsZXIgbW9kZSAqLwogI2RlZmluZSBVU0JNT0RFX0NNX0lETEUJKDA8PDApCQkvKiBpZGxlIHN0YXRlICovCiAKKy8qIE1vb3Jlc3Rvd24gaGFzIHNvbWUgbm9uLXN0YW5kYXJkIHJlZ2lzdGVycywgcGFydGlhbGx5IGR1ZSB0byB0aGUgZmFjdCB0aGF0CisgKiBpdHMgRUhDSSBjb250cm9sbGVyIGhhcyBib3RoIFRUIGFuZCBMUE0gc3VwcG9ydC4gSE9TVFBDeCBhcmUgZXh0ZW50aW9ucyB0bworICogUE9SVFNDeAorICovCisjZGVmaW5lIEhPU1RQQzAJCTB4ODQJCS8qIEhPU1RQQyBleHRlbnNpb24gKi8KKyNkZWZpbmUgSE9TVFBDX1BIQ0QJKDE8PDIyKQkJLyogUGh5IGNsb2NrIGRpc2FibGUgKi8KKyNkZWZpbmUgSE9TVFBDX1BTUEQJKDM8PDI1KQkJLyogUG9ydCBzcGVlZCBkZXRlY3Rpb24gKi8KKyNkZWZpbmUgVVNCTU9ERV9FWAkweGM4CQkvKiBVU0IgRGV2aWNlIG1vZGUgZXh0ZW5zaW9uICovCisjZGVmaW5lIFVTQk1PREVfRVhfVkJQUwkoMTw8NSkJCS8qIFZCdXMgUG93ZXIgU2VsZWN0IE9uICovCisjZGVmaW5lIFVTQk1PREVfRVhfSEMJKDM8PDApCQkvKiBob3N0IGNvbnRyb2xsZXIgbW9kZSAqLworI2RlZmluZSBUWEZJTExUVU5JTkcJMHgyNAkJLyogVFggRklGTyBUdW5pbmcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFhGSUZPX0RFRkFVTFQJKDg8PDE2KQkJLyogRklGTyBidXJzdCB0aHJlc2hvbGQgOCAqLworCiAvKiBBcHBlbmRpeCBDLCBEZWJ1ZyBwb3J0IC4uLiBpbnRlbmRlZCBmb3IgdXNlIHdpdGggc3BlY2lhbCAiZGVidWcgZGV2aWNlcyIKICAqIHRoYXQgY2FuIGhlbHAgaWYgdGhlcmUncyBubyBzZXJpYWwgY29uc29sZS4gIChub25zdGFuZGFyZCBlbnVtZXJhdGlvbi4pCiAgKi8KQEAgLTE1Nyw0ICsxNzEsMjUgQEAKICNkZWZpbmUgREJHUF9FUEFERFIoZGV2LCBlcCkJKCgoZGV2KTw8OCl8KGVwKSkKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorZXh0ZXJuIGludCBfX2luaXQgZWFybHlfZGJncF9pbml0KGNoYXIgKnMpOworZXh0ZXJuIHN0cnVjdCBjb25zb2xlIGVhcmx5X2RiZ3BfY29uc29sZTsKKyNlbmRpZiAvKiBDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1AgKi8KKworI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEtfREJHUAorLyogQ2FsbCBiYWNrcyBmcm9tIGVoY2kgaG9zdCBkcml2ZXIgdG8gZWhjaSBkZWJ1ZyBkcml2ZXIgKi8KK2V4dGVybiBpbnQgZGJncF9leHRlcm5hbF9zdGFydHVwKHZvaWQpOworZXh0ZXJuIGludCBkYmdwX3Jlc2V0X3ByZXAodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZGJncF9yZXNldF9wcmVwKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CitzdGF0aWMgaW5saW5lIGludCBkYmdwX2V4dGVybmFsX3N0YXJ0dXAodm9pZCkKK3sKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9fTElOVVhfVVNCX0VIQ0lfREVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2lzcDEzNjIuaCBiL2luY2x1ZGUvbGludXgvdXNiL2lzcDEzNjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDI2ODRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvaXNwMTM2Mi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBib2FyZCBpbml0aWFsaXphdGlvbiBjb2RlIHNob3VsZCBwdXQgb25lIG9mIHRoZXNlIGludG8gZGV2LT5wbGF0Zm9ybV9kYXRhCisgKiBhbmQgcGxhY2UgdGhlIGlzcDEzNjIgb250byBwbGF0Zm9ybV9idXMuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9JU1AxMzYyX0hfXworI2RlZmluZSBfX0xJTlVYX1VTQl9JU1AxMzYyX0hfXworCitzdHJ1Y3QgaXNwMTM2Ml9wbGF0Zm9ybV9kYXRhIHsKKwkvKiBFbmFibGUgaW50ZXJuYWwgcHVsbGRvd24gcmVzaXN0b3JzIG9uIGRvd25zdHJlYW0gcG9ydHMgKi8KKwl1bnNpZ25lZCBzZWwxNUtyZXM6MTsKKwkvKiBDbG9jayBjYW5ub3QgYmUgc3RvcHBlZCAqLworCXVuc2lnbmVkIGNsa25vdHN0b3A6MTsKKwkvKiBPbi1jaGlwIG92ZXJjdXJyZW50IHByb3RlY3Rpb24gKi8KKwl1bnNpZ25lZCBvY19lbmFibGU6MTsKKwkvKiBJTlQgb3V0cHV0IHBvbGFyaXR5ICovCisJdW5zaWduZWQgaW50X2FjdF9oaWdoOjE7CisJLyogSU5UIGVkZ2Ugb3IgbGV2ZWwgdHJpZ2dlcmVkICovCisJdW5zaWduZWQgaW50X2VkZ2VfdHJpZ2dlcmVkOjE7CisJLyogRFJFUSBvdXRwdXQgcG9sYXJpdHkgKi8KKwl1bnNpZ25lZCBkcmVxX2FjdF9oaWdoOjE7CisJLyogREFDSyBpbnB1dCBwb2xhcml0eSAqLworCXVuc2lnbmVkIGRhY2tfYWN0X2hpZ2g6MTsKKwkvKiBjaGlwIGNhbiBiZSByZXN1bWVkIHZpYSBIX1dBS0VVUCBwaW4gKi8KKwl1bnNpZ25lZCByZW1vdGVfd2FrZXVwX2Nvbm5lY3RlZDoxOworCS8qIFN3aXRjaCBvciBub3QgdG8gc3dpdGNoIChrZWVwIGFsd2F5cyBwb3dlcmVkKSAqLworCXVuc2lnbmVkIG5vX3Bvd2VyX3N3aXRjaGluZzoxOworCS8qIEdhbmdlZCBwb3J0IHBvd2VyIHN3aXRjaGluZyAoMCkgb3IgaW5kaXZpZHVhbCBwb3J0IHBvd2VyIHN3aXRjaGluZyAoMSkgKi8KKwl1bnNpZ25lZCBwb3dlcl9zd2l0Y2hpbmdfbW9kZToxOworCS8qIEdpdmVuIHBvcnRfcG93ZXIsIG1zZWMvMiBhZnRlciBwb3dlciBvbiB0aWxsIHBvd2VyIGdvb2QgKi8KKwl1OCBwb3RwZzsKKwkvKiBIYXJkd2FyZSByZXNldCBzZXQvY2xlYXIgKi8KKwl2b2lkICgqcmVzZXQpIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzZXQpOworCS8qIENsb2NrIHN0YXJ0L3N0b3AgKi8KKwl2b2lkICgqY2xvY2spIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGFydCk7CisJLyogSW50ZXItaW8gZGVsYXkgKG5zKS4gVGhlIGNoaXAgaXMgcGlja3kgYWJvdXQgYWNjZXNzIHRpbWluZ3M7IGl0CisJICogZXhwZWN0cyBhdCBsZWFzdDoKKwkgKiAxMTBucyBkZWxheSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGFjY2Vzc2VzIHRvIERBVEFfUkVHLAorCSAqIDMwMG5zIGRlbGF5IGJldHdlZW4gYWNjZXNzIHRvIEFERFJfUkVHIGFuZCBEQVRBX1JFRyAocmVnaXN0ZXJzKQorCSAqIDQ2Mm5zIGRlbGF5IGJldHdlZW4gYWNjZXNzIHRvIEFERFJfUkVHIGFuZCBEQVRBX1JFRyAoYnVmZmVyIG1lbW9yeSkKKwkgKiBXRSBNVVNUIE5PVCBiZSBhY3RpdmF0ZWQgZHVyaW5nIHRoZXNlIGludGVydmFscyAoZXZlbiB3aXRob3V0IENTISkKKwkgKi8KKwl2b2lkICgqZGVsYXkpIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkZWxheSk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2lzcDE3NjAuaCBiL2luY2x1ZGUvbGludXgvdXNiL2lzcDE3NjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdkZTUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvaXNwMTc2MC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBib2FyZCBpbml0aWFsaXphdGlvbiBzaG91bGQgcHV0IG9uZSBvZiB0aGVzZSBpbnRvIGRldi0+cGxhdGZvcm1fZGF0YQorICogYW5kIHBsYWNlIHRoZSBpc3AxNzYwIG9udG8gcGxhdGZvcm1fYnVzIG5hbWVkICJpc3AxNzYwLWhjZCIuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9JU1AxNzYwX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfSVNQMTc2MF9ICisKK3N0cnVjdCBpc3AxNzYwX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGlzX2lzcDE3NjE6MTsJCQkvKiBDaGlwIGlzIElTUDE3NjEgKi8KKwl1bnNpZ25lZCBidXNfd2lkdGhfMTY6MTsJCS8qIDE2LzMyLWJpdCBkYXRhIGJ1cyB3aWR0aCAqLworCXVuc2lnbmVkIHBvcnQxX290ZzoxOwkJCS8qIFBvcnQgMSBzdXBwb3J0cyBPVEcgKi8KKwl1bnNpZ25lZCBhbmFsb2dfb2M6MTsJCQkvKiBBbmFsb2cgb3ZlcmN1cnJlbnQgKi8KKwl1bnNpZ25lZCBkYWNrX3BvbGFyaXR5X2hpZ2g6MTsJCS8qIERBQ0sgYWN0aXZlIGhpZ2ggKi8KKwl1bnNpZ25lZCBkcmVxX3BvbGFyaXR5X2hpZ2g6MTsJCS8qIERSRVEgYWN0aXZlIGhpZ2ggKi8KK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9JU1AxNzYwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggMGVjNTBiYS4uYzE3ZWI2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTU5LDYgKzU5LDcgQEAKICAqIEBidWxrX291dF9idWZmZXI6IHBvaW50ZXIgdG8gdGhlIGJ1bGsgb3V0IGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgogICogQGJ1bGtfb3V0X3NpemU6IHRoZSBzaXplIG9mIHRoZSBidWxrX291dF9idWZmZXIsIGluIGJ5dGVzLgogICogQHdyaXRlX3VyYjogcG9pbnRlciB0byB0aGUgYnVsayBvdXQgc3RydWN0IHVyYiBmb3IgdGhpcyBwb3J0LgorICogQHdyaXRlX2ZpZm86IGtmaWZvIHVzZWQgdG8gYnVmZmVyIG91dGdvaW5nIGRhdGEKICAqIEB3cml0ZV91cmJfYnVzeTogcG9ydGBzIHdyaXRpbmcgc3RhdHVzCiAgKiBAYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOiBlbmRwb2ludCBhZGRyZXNzIGZvciB0aGUgYnVsayBvdXQgcGlwZSBmb3IgdGhpcwogICoJcG9ydC4KQEAgLTk2LDYgKzk3LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQkqYnVsa19vdXRfYnVmZmVyOwogCWludAkJCWJ1bGtfb3V0X3NpemU7CiAJc3RydWN0IHVyYgkJKndyaXRlX3VyYjsKKwlzdHJ1Y3Qga2ZpZm8JCSp3cml0ZV9maWZvOwogCWludAkJCXdyaXRlX3VyYl9idXN5OwogCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHJlc3M7CiAKQEAgLTIzOCw5ICsyNDAsOCBAQAogCWludCAoKnJlc3VtZSkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiAKIAkvKiBzZXJpYWwgZnVuY3Rpb24gY2FsbHMgKi8KLQkvKiBDYWxsZWQgYnkgY29uc29sZSB3aXRoIHR0eSA9IE5VTEwgYW5kIGJ5IHR0eSAqLwotCWludCAgKCpvcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworCS8qIENhbGxlZCBieSBjb25zb2xlIGFuZCBieSB0aGUgdHR5IGxheWVyICovCisJaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogCXZvaWQgKCpjbG9zZSkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiAJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtMjYxLDYgKzI2Miw5IEBACiAJICAgYmUgYW4gYXR0YWNoZWQgdHR5IGF0IHRoaXMgcG9pbnQgKi8KIAl2b2lkICgqZHRyX3J0cykoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IG9uKTsKIAlpbnQgICgqY2Fycmllcl9yYWlzZWQpKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCS8qIENhbGxlZCBieSB0aGUgdXNiIHNlcmlhbCBob29rcyB0byBhbGxvdyB0aGUgdXNlciB0byByZXdvcmsgdGhlCisJICAgdGVybWlvcyBzdGF0ZSAqLworCXZvaWQgKCppbml0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCS8qIFVTQiBldmVudHMgKi8KIAl2b2lkICgqcmVhZF9pbnRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYik7CiAJdm9pZCAoKndyaXRlX2ludF9jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiKTsKQEAgLTMwMCw3ICszMDQsNyBAQAogZXh0ZXJuIHN0cnVjdCB1c2Jfc2VyaWFsICp1c2Jfc2VyaWFsX2dldF9ieV9pbmRleCh1bnNpZ25lZCBpbnQgbWlub3IpOwogZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9wdXQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBleHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0JCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaCBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKaW5kZXggMDA0NGQ5Yi4uYjJhN2Q4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCkBAIC03Nyw2ICs3Nyw3IEBACiAKICNkZWZpbmUgVVNCREVWRlNfVVJCX1NIT1JUX05PVF9PSwkweDAxCiAjZGVmaW5lIFVTQkRFVkZTX1VSQl9JU09fQVNBUAkJMHgwMgorI2RlZmluZSBVU0JERVZGU19VUkJfQlVMS19DT05USU5VQVRJT04JMHgwNAogI2RlZmluZSBVU0JERVZGU19VUkJfTk9fRlNCUgkJMHgyMAogI2RlZmluZSBVU0JERVZGU19VUkJfWkVST19QQUNLRVQJMHg0MAogI2RlZmluZSBVU0JERVZGU19VUkJfTk9fSU5URVJSVVBUCTB4ODAKQEAgLTE3NSw0ICsxNzYsNiBAQAogI2RlZmluZSBVU0JERVZGU19DTEVBUl9IQUxUICAgICAgICBfSU9SKCdVJywgMjEsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVVNCREVWRlNfRElTQ09OTkVDVCAgICAgICAgX0lPKCdVJywgMjIpCiAjZGVmaW5lIFVTQkRFVkZTX0NPTk5FQ1QgICAgICAgICAgIF9JTygnVScsIDIzKQorI2RlZmluZSBVU0JERVZGU19DTEFJTV9QT1JUICAgICAgICBfSU9SKCdVJywgMjQsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVVNCREVWRlNfUkVMRUFTRV9QT1JUICAgICAgX0lPUignVScsIDI1LCB1bnNpZ25lZCBpbnQpCiAjZW5kaWYgLyogX0xJTlVYX1VTQkRFVklDRV9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZnYWFyYi5oIGIvaW5jbHVkZS9saW51eC92Z2FhcmIuaAppbmRleCBlODFjNjRhLi45MjNmOTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZnYWFyYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmdhYXJiLmgKQEAgLTQxLDcgKzQxLDcgQEAKICAqICAgICBpbnRlcnJ1cHRzIGF0IGFueSB0aW1lLgogICovCiBleHRlcm4gdm9pZCB2Z2Ffc2V0X2xlZ2FjeV9kZWNvZGluZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJCQkJCXVuc2lnbmVkIGludCBkZWNvZGVzKTsKKwkJCQkgICAgdW5zaWduZWQgaW50IGRlY29kZXMpOwogCiAvKioKICAqICAgICB2Z2FfZ2V0ICAgICAgICAgLSBhY3F1aXJlICYgbG9ja3MgVkdBIHJlc291cmNlcwpAQCAtMTkzLDggKzE5MywxNyBAQAogICogVGhleSBkcml2ZXIgd2lsbCBnZXQgYSBjYWxsYmFjayB3aGVuIFZHQSBhcmJpdHJhdGlvbiBpcyBmaXJzdCB1c2VkCiAgKiBieSB1c2Vyc3BhY2Ugc2luY2Ugd2Ugc29tZSBvbGRlciBYIHNlcnZlcnMgaGF2ZSBpc3N1ZXMuCiAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19WR0FfQVJCKQogaW50IHZnYV9jbGllbnRfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmNvb2tpZSwKIAkJCXZvaWQgKCppcnFfc2V0X3N0YXRlKSh2b2lkICpjb29raWUsIGJvb2wgc3RhdGUpLAogCQkJdW5zaWduZWQgaW50ICgqc2V0X3ZnYV9kZWNvZGUpKHZvaWQgKmNvb2tpZSwgYm9vbCBzdGF0ZSkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHZnYV9jbGllbnRfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmNvb2tpZSwKKwkJCQkgICAgICB2b2lkICgqaXJxX3NldF9zdGF0ZSkodm9pZCAqY29va2llLCBib29sIHN0YXRlKSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKCpzZXRfdmdhX2RlY29kZSkodm9pZCAqY29va2llLCBib29sIHN0YXRlKSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogTElOVVhfVkdBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IDM2ODlkN2QuLmI1OWU3OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtOTEwLDkgKzkxMCwxMCBAQAogCVY0TDJfQ09MT1JGWF9TRVBJQQk9IDIsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9BVVRPQlJJR0hUTkVTUwkJCShWNEwyX0NJRF9CQVNFKzMyKQorI2RlZmluZSBWNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSCQkoVjRMMl9DSURfQkFTRSszMykKIAogLyogbGFzdCBDSUQgKyAxICovCi0jZGVmaW5lIFY0TDJfQ0lEX0xBU1RQMSAgICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMykKKyNkZWZpbmUgVjRMMl9DSURfTEFTVFAxICAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzM0KQogCiAvKiAgTVBFRy1jbGFzcyBjb250cm9sIElEcyBkZWZpbmVkIGJ5IFY0TDIgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19CQVNFIAkJCShWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4OTAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKaW5kZXggNGZjYTRmNS4uMDU3YTJlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCkBAIC0zNCw3ICszNCw3IEBACiAgKglvdXRfbnVtOiB0aGUgbnVtYmVyIG9mIHNnIHJlYWRhYmxlIGJ5IG90aGVyIHNpZGUKICAqCWluX251bTogdGhlIG51bWJlciBvZiBzZyB3aGljaCBhcmUgd3JpdGFibGUgKGFmdGVyIHJlYWRhYmxlIG9uZXMpCiAgKglkYXRhOiB0aGUgdG9rZW4gaWRlbnRpZnlpbmcgdGhlIGJ1ZmZlci4KLSAqICAgICAgUmV0dXJucyAwIG9yIGFuIGVycm9yLgorICogICAgICBSZXR1cm5zIHJlbWFpbmluZyBjYXBhY2l0eSBvZiBxdWV1ZSAoc2cgc2VnbWVudHMpIG9yIGEgbmVnYXRpdmUgZXJyb3IuCiAgKiBAa2ljazogdXBkYXRlIGFmdGVyIGFkZF9idWYKICAqCXZxOiB0aGUgc3RydWN0IHZpcnRxdWV1ZQogICoJQWZ0ZXIgb25lIG9yIG1vcmUgYWRkX2J1ZiBjYWxscywgaW52b2tlIHRoaXMgdG8ga2ljayB0aGUgb3RoZXIgc2lkZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCmluZGV4IGIzYzRhNjAuLmVhNzIyNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaApAQCAtNCw4ICs0LDYgQEAKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAotLyogVGhlIElEIGZvciB2aXJ0aW8gY29uc29sZSAqLwotI2RlZmluZSBWSVJUSU9fSURfOVAJOQogLyogTWF4aW11bSBudW1iZXIgb2YgdmlydGlvIGNoYW5uZWxzIHBlciBwYXJ0aXRpb24gKDEgZm9yIG5vdykgKi8KICNkZWZpbmUgTUFYXzlQX0NIQU4JMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggODcyNmZmNy4uMDlkNzMwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtNCw5ICs0LDYgQEAKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAotLyogVGhlIElEIGZvciB2aXJ0aW9fYmFsbG9vbiAqLwotI2RlZmluZSBWSVJUSU9fSURfQkFMTE9PTgk1Ci0KIC8qIFRoZSBmZWF0dXJlIGJpdG1hcCBmb3IgdmlydGlvIGJhbGxvb24gKi8KICNkZWZpbmUgVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVAkwIC8qIFRlbGwgYmVmb3JlIHJlY2xhaW1pbmcgcGFnZXMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaAppbmRleCA4ZGFiOWYyLi4xNWNiNjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaApAQCAtNSw5ICs1LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAotLyogVGhlIElEIGZvciB2aXJ0aW9fYmxvY2sgKi8KLSNkZWZpbmUgVklSVElPX0lEX0JMT0NLCTIKLQogLyogRmVhdHVyZSBiaXRzICovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9CQVJSSUVSCTAJLyogRG9lcyBob3N0IHN1cHBvcnQgYmFycmllcnM/ICovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TSVpFX01BWAkxCS8qIEluZGljYXRlcyBtYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLwpAQCAtMTcsNiArMTQsNyBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUJNgkvKiBCbG9jayBzaXplIG9mIGRpc2sgaXMgYXZhaWxhYmxlKi8KICNkZWZpbmUgVklSVElPX0JMS19GX1NDU0kJNwkvKiBTdXBwb3J0cyBzY3NpIGNvbW1hbmQgcGFzc3RocnUgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0lERU5USUZZCTgJLyogQVRBIElERU5USUZZIHN1cHBvcnRlZCAqLworI2RlZmluZSBWSVJUSU9fQkxLX0ZfRkxVU0gJOQkvKiBDYWNoZSBmbHVzaCBjb21tYW5kIHN1cHBvcnQgKi8KIAogI2RlZmluZSBWSVJUSU9fQkxLX0lEX0JZVEVTCShzaXplb2YoX191MTZbMjU2XSkpCS8qIElERU5USUZZIERBVEEgKi8KIApAQCAtMzgsNiArMzYsMTcgQEAKIAlfX3U4IGlkZW50aWZ5W1ZJUlRJT19CTEtfSURfQllURVNdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorLyoKKyAqIENvbW1hbmQgdHlwZXMKKyAqCisgKiBVc2FnZSBpcyBhIGJpdCB0cmlja3kgYXMgc29tZSBiaXRzIGFyZSB1c2VkIGFzIGZsYWdzIGFuZCBzb21lIGFyZSBub3QuCisgKgorICogUnVsZXM6CisgKiAgIFZJUlRJT19CTEtfVF9PVVQgbWF5IGJlIGNvbWJpbmVkIHdpdGggVklSVElPX0JMS19UX1NDU0lfQ01EIG9yCisgKiAgIFZJUlRJT19CTEtfVF9CQVJSSUVSLiAgVklSVElPX0JMS19UX0ZMVVNIIGlzIGEgY29tbWFuZCBvZiBpdHMgb3duCisgKiAgIGFuZCBtYXkgbm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG9mIHRoZSBvdGhlciBmbGFncy4KKyAqLworCiAvKiBUaGVzZSB0d28gZGVmaW5lIGRpcmVjdGlvbi4gKi8KICNkZWZpbmUgVklSVElPX0JMS19UX0lOCQkwCiAjZGVmaW5lIFZJUlRJT19CTEtfVF9PVVQJMQpAQCAtNDUsNiArNTQsOSBAQAogLyogVGhpcyBiaXQgc2F5cyBpdCdzIGEgc2NzaSBjb21tYW5kLCBub3QgYW4gYWN0dWFsIHJlYWQgb3Igd3JpdGUuICovCiAjZGVmaW5lIFZJUlRJT19CTEtfVF9TQ1NJX0NNRAkyCiAKKy8qIENhY2hlIGZsdXNoIGNvbW1hbmQgKi8KKyNkZWZpbmUgVklSVElPX0JMS19UX0ZMVVNICTQKKwogLyogQmFycmllciBiZWZvcmUgdGhpcyBvcC4gKi8KICNkZWZpbmUgVklSVElPX0JMS19UX0JBUlJJRVIJMHg4MDAwMDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCmluZGV4IGU1NDdlM2MuLjAwOTNkZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC0xMDksOCArMTA5LDcgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmJpdCkKIHsKIAkvKiBEaWQgeW91IGZvcmdldCB0byBmaXggYXNzdW1wdGlvbnMgb24gbWF4IGZlYXR1cmVzPyAqLwotCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmYml0KSkKLQkJQlVJTERfQlVHX09OKGZiaXQgPj0gMzIpOworCU1BWUJFX0JVSUxEX0JVR19PTihmYml0ID49IDMyKTsKIAogCWlmIChmYml0IDwgVklSVElPX1RSQU5TUE9SVF9GX1NUQVJUKQogCQl2aXJ0aW9fY2hlY2tfZHJpdmVyX29mZmVyZWRfZmVhdHVyZSh2ZGV2LCBmYml0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAppbmRleCBkYzE2MTExLi5iNWY1MTk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCkBAIC01LDkgKzUsNiBAQAogLyogVGhpcyBoZWFkZXIsIGV4Y2x1ZGluZyB0aGUgI2lmZGVmIF9fS0VSTkVMX18gcGFydCwgaXMgQlNEIGxpY2Vuc2VkIHNvCiAgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogCi0vKiBUaGUgSUQgZm9yIHZpcnRpbyBjb25zb2xlICovCi0jZGVmaW5lIFZJUlRJT19JRF9DT05TT0xFCTMKLQogLyogRmVhdHVyZSBiaXRzICovCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX0ZfU0laRQkwCS8qIERvZXMgaG9zdCBwcm92aWRlIGNvbnNvbGUgc2l6ZT8gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjY2MGMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9faWRzLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfTElOVVhfVklSVElPX0lEU19ICisjZGVmaW5lIF9MSU5VWF9WSVJUSU9fSURTX0gKKy8qCisgKiBWaXJ0aW8gSURzCisgKgorICogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKKyAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgorICovCisKKyNkZWZpbmUgVklSVElPX0lEX05FVAkJMSAvKiB2aXJ0aW8gbmV0ICovCisjZGVmaW5lIFZJUlRJT19JRF9CTE9DSwkJMiAvKiB2aXJ0aW8gYmxvY2sgKi8KKyNkZWZpbmUgVklSVElPX0lEX0NPTlNPTEUJMyAvKiB2aXJ0aW8gY29uc29sZSAqLworI2RlZmluZSBWSVJUSU9fSURfUk5HCQk0IC8qIHZpcnRpbyByaW5nICovCisjZGVmaW5lIFZJUlRJT19JRF9CQUxMT09OCTUgLyogdmlydGlvIGJhbGxvb24gKi8KKyNkZWZpbmUgVklSVElPX0lEXzlQCQk5IC8qIDlwIHZpcnRpbyBjb25zb2xlICovCisKKyNlbmRpZiAvKiBfTElOVVhfVklSVElPX0lEU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IGQ4ZGQ1MzkuLjFmNDE3MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC02LDkgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCi0vKiBUaGUgSUQgZm9yIHZpcnRpb19uZXQgKi8KLSNkZWZpbmUgVklSVElPX0lEX05FVAkxCi0KIC8qIFRoZSBmZWF0dXJlIGJpdG1hcCBmb3IgdmlydGlvIG5ldCAqLwogI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1NVTQkwCS8qIEhvc3QgaGFuZGxlcyBwa3RzIHcvIHBhcnRpYWwgY3N1bSAqLwogI2RlZmluZSBWSVJUSU9fTkVUX0ZfR1VFU1RfQ1NVTQkxCS8qIEd1ZXN0IGhhbmRsZXMgcGt0cyB3LyBwYXJ0aWFsIGNzdW0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKaW5kZXggMWE4NWRhYi4uNDgxMjFjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKQEAgLTQsNyArNCw0IEBACiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKLS8qIFRoZSBJRCBmb3IgdmlydGlvX3JuZyAqLwotI2RlZmluZSBWSVJUSU9fSURfUk5HCTQKLQogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fUk5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDgxYTk3Y2YuLjJkMGYyMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaApAQCAtMTY2LDE1ICsxNjYsOCBAQAogCXJldHVybiB4OwogfQogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBnbG9iYWxfbHJ1X3BhZ2VzKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgem9uZV9scnVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0JcmV0dXJuICh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pCi0JCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9GSUxFKQotCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKQotCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9GSUxFKSk7Ci19CitleHRlcm4gdW5zaWduZWQgbG9uZyBnbG9iYWxfcmVjbGFpbWFibGVfcGFnZXModm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiAvKgpAQCAtMjEwLDExICsyMDMsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KIAotI2RlZmluZSBfX2FkZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkJXAotCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkKLSNkZWZpbmUgX19zdWJfem9uZV9wYWdlX3N0YXRlKF9feiwgX19pLCBfX2QpCVwKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKF9feiwgX19pLC0oX19kKSkKLQogI2RlZmluZSBhZGRfem9uZV9wYWdlX3N0YXRlKF9feiwgX19pLCBfX2QpIG1vZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkKICNkZWZpbmUgc3ViX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgX19kKSBtb2Rfem9uZV9wYWdlX3N0YXRlKF9feiwgX19pLCAtKF9fZCkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnQuaCBiL2luY2x1ZGUvbGludXgvdnQuaAppbmRleCAwMmMxYzAyLi43YWZjYTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0LmgKKysrIGIvaW5jbHVkZS9saW51eC92dC5oCkBAIC0xLDE3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX1ZUX0gKICNkZWZpbmUgX0xJTlVYX1ZUX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLXN0cnVjdCBub3RpZmllcl9ibG9jazsKLQotc3RydWN0IHZ0X25vdGlmaWVyX3BhcmFtIHsKLQlzdHJ1Y3QgdmNfZGF0YSAqdmM7CS8qIFZDIG9uIHdoaWNoIHRoZSB1cGRhdGUgaGFwcGVuZWQgKi8KLQl1bnNpZ25lZCBpbnQgYzsJCS8qIFByaW50ZWQgY2hhciAqLwotfTsKLQotZXh0ZXJuIGludCByZWdpc3Rlcl92dF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl92dF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKLSNlbmRpZgogCiAvKgogICogVGhlc2UgY29uc3RhbnRzIGFyZSBhbHNvIHVzZWZ1bCBmb3IgdXNlci1sZXZlbCBhcHBzIChlLmcuLCBWQwpAQCAtNzQsNCArNjMsMjUgQEAKICNkZWZpbmUgVlRfVU5MT0NLU1dJVENIIDB4NTYwQyAgLyogYWxsb3cgdnQgc3dpdGNoaW5nICovCiAjZGVmaW5lIFZUX0dFVEhJRk9OVE1BU0sgMHg1NjBEICAvKiByZXR1cm4gaGkgZm9udCBtYXNrICovCiAKK3N0cnVjdCB2dF9ldmVudCB7CisJdW5zaWduZWQgaW50IGV2ZW50OworI2RlZmluZSBWVF9FVkVOVF9TV0lUQ0gJCTB4MDAwMQkvKiBDb25zb2xlIHN3aXRjaCAqLworI2RlZmluZSBWVF9FVkVOVF9CTEFOSwkJMHgwMDAyCS8qIFNjcmVlbiBibGFuayAqLworI2RlZmluZSBWVF9FVkVOVF9VTkJMQU5LCTB4MDAwNAkvKiBTY3JlZW4gdW5ibGFuayAqLworI2RlZmluZSBWVF9FVkVOVF9SRVNJWkUJCTB4MDAwOAkvKiBSZXNpemUgZGlzcGxheSAqLworI2RlZmluZSBWVF9NQVhfRVZFTlQJCTB4MDAwRgorCXVuc2lnbmVkIGludCBvbGQ7CQkvKiBPbGQgY29uc29sZSAqLworCXVuc2lnbmVkIGludCBuZXc7CQkvKiBOZXcgY29uc29sZSAoaWYgY2hhbmdpbmcpICovCisJdW5zaWduZWQgaW50IHBhZFs0XTsJCS8qIFBhZGRpbmcgZm9yIGV4cGFuc2lvbiAqLworfTsKKworI2RlZmluZSBWVF9XQUlURVZFTlQJMHg1NjBFCS8qIFdhaXQgZm9yIGFuIGV2ZW50ICovCisKK3N0cnVjdCB2dF9zZXRhY3RpdmF0ZSB7CisJdW5zaWduZWQgaW50IGNvbnNvbGU7CisJc3RydWN0IHZ0X21vZGUgbW9kZTsKK307CisKKyNkZWZpbmUgVlRfU0VUQUNUSVZBVEUJMHg1NjBGCS8qIEFjdGl2YXRlIGFuZCBzZXQgdGhlIG1vZGUgb2YgYSBjb25zb2xlICovCisKICNlbmRpZiAvKiBfTElOVVhfVlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAppbmRleCAyZjExMTM0Li5jMGM0ZTExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGVfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogLyoKICAqIFByZXNlbnRseSwgYSBsb3Qgb2YgZ3JhcGhpY3MgcHJvZ3JhbXMgZG8gbm90IHJlc3RvcmUgdGhlIGNvbnRlbnRzIG9mCkBAIC05MSw3ICs5Miw4IEBACiAjZW5kaWYKIAogLyogdnQuYyAqLwotaW50IHZ0X3dhaXRhY3RpdmUoaW50IHZ0KTsKK3ZvaWQgdnRfZXZlbnRfcG9zdCh1bnNpZ25lZCBpbnQgZXZlbnQsIHVuc2lnbmVkIGludCBvbGQsIHVuc2lnbmVkIGludCBuZXcpOworaW50IHZ0X3dhaXRhY3RpdmUoaW50IG4pOwogdm9pZCBjaGFuZ2VfY29uc29sZShzdHJ1Y3QgdmNfZGF0YSAqbmV3X3ZjKTsKIHZvaWQgcmVzZXRfdmMoc3RydWN0IHZjX2RhdGEgKnZjKTsKIGV4dGVybiBpbnQgdW5iaW5kX2Nvbl9kcml2ZXIoY29uc3Qgc3RydWN0IGNvbnN3ICpjc3csIGludCBmaXJzdCwgaW50IGxhc3QsCkBAIC0xMTYsNCArMTE4LDE2IEBACiB9OwogZXh0ZXJuIHN0cnVjdCB2dF9zcGF3bl9jb25zb2xlIHZ0X3NwYXduX2NvbjsKIAorZXh0ZXJuIGludCB2dF9tb3ZlX3RvX2NvbnNvbGUodW5zaWduZWQgaW50IHZ0LCBpbnQgYWxsb2MpOworCisvKiBJbnRlcmZhY2VzIGZvciBWQyBub3RpZmljYXRpb24gb2YgY2hhcmFjdGVyIGV2ZW50cyAoZm9yIGFjY2Vzc2liaWxpdHkgZXRjKSAqLworCitzdHJ1Y3QgdnRfbm90aWZpZXJfcGFyYW0geworCXN0cnVjdCB2Y19kYXRhICp2YzsJLyogVkMgb24gd2hpY2ggdGhlIHVwZGF0ZSBoYXBwZW5lZCAqLworCXVuc2lnbmVkIGludCBjOwkJLyogUHJpbnRlZCBjaGFyICovCit9OworCitleHRlcm4gaW50IHJlZ2lzdGVyX3Z0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX3Z0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworCiAjZW5kaWYgLyogX1ZUX0tFUk5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaCBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKaW5kZXggNjI3M2ZhOS4uN2VmMGM3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCkBAIC05NCw3ICs5NCw3IEBACiAvKgogICogaW5pdGlhbGl6ZSBhbGwgb2YgYSB3b3JrIGl0ZW0gaW4gb25lIGdvCiAgKgotICogTk9URSEgTm8gcG9pbnQgaW4gdXNpbmcgImF0b21pY19sb25nX3NldCgpIjogdXNlaW5nIGEgZGlyZWN0CisgKiBOT1RFISBObyBwb2ludCBpbiB1c2luZyAiYXRvbWljX2xvbmdfc2V0KCkiOiB1c2luZyBhIGRpcmVjdAogICogYXNzaWdubWVudCBvZiB0aGUgd29yayBkYXRhIGluaXRpYWxpemVyIGFsbG93cyB0aGUgY29tcGlsZXIKICAqIHRvIGdlbmVyYXRlIGJldHRlciBjb2RlLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvY2NkY190eXBlcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2NjZGNfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzczODc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2NjZGNfdHlwZXMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQ0NEQ19UWVBFU19ICisjZGVmaW5lIF9DQ0RDX1RZUEVTX0gKK2VudW0gY2NkY19waXhmbXQgeworCUNDRENfUElYRk1UX1JBVywKKwlDQ0RDX1BJWEZNVF9ZQ0JDUl8xNkJJVCwKKwlDQ0RDX1BJWEZNVF9ZQ0JDUl84QklUCit9OworCitlbnVtIGNjZGNfZnJtZm10IHsKKwlDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwlDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VECit9OworCisvKiBQSVhFTCBPUkRFUiBJTiBNRU1PUlkgZnJvbSBMU0IgdG8gTVNCICovCisvKiBvbmx5IGFwcGxpY2FibGUgZm9yIDgtYml0IGlucHV0IG1vZGUgICovCitlbnVtIGNjZGNfcGl4b3JkZXIgeworCUNDRENfUElYT1JERVJfWUNCWUNSLAorCUNDRENfUElYT1JERVJfQ0JZQ1JZLAorfTsKKworZW51bSBjY2RjX2J1ZnR5cGUgeworCUNDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQsCisJQ0NEQ19CVUZUWVBFX0ZMRF9TRVBBUkFURUQKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9kbTM1NV9jY2RjLmggYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOGE3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9ETTM1NV9DQ0RDX0gKKyNkZWZpbmUgX0RNMzU1X0NDRENfSAorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvY2NkY190eXBlcy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBmZV90eXBlcy5oPgorCisvKiBlbnVtIGZvciBObyBvZiBwaXhlbCBwZXIgbGluZSB0byBiZSBhdmcuIGluIEJsYWNrIENsYW1waW5nICovCitlbnVtIGNjZGNfc2FtcGxlX2xlbmd0aCB7CisJQ0NEQ19TQU1QTEVfMVBJWEVMUywKKwlDQ0RDX1NBTVBMRV8yUElYRUxTLAorCUNDRENfU0FNUExFXzRQSVhFTFMsCisJQ0NEQ19TQU1QTEVfOFBJWEVMUywKKwlDQ0RDX1NBTVBMRV8xNlBJWEVMUworfTsKKworLyogZW51bSBmb3IgTm8gb2YgbGluZXMgaW4gQmxhY2sgQ2xhbXBpbmcgKi8KK2VudW0gY2NkY19zYW1wbGVfbGluZSB7CisJQ0NEQ19TQU1QTEVfMUxJTkVTLAorCUNDRENfU0FNUExFXzJMSU5FUywKKwlDQ0RDX1NBTVBMRV80TElORVMsCisJQ0NEQ19TQU1QTEVfOExJTkVTLAorCUNDRENfU0FNUExFXzE2TElORVMKK307CisKKy8qIGVudW0gZm9yIEFsYXcgZ2FtYSB3aWR0aCAqLworZW51bSBjY2RjX2dhbW1hX3dpZHRoIHsKKwlDQ0RDX0dBTU1BX0JJVFNfMTNfNCwKKwlDQ0RDX0dBTU1BX0JJVFNfMTJfMywKKwlDQ0RDX0dBTU1BX0JJVFNfMTFfMiwKKwlDQ0RDX0dBTU1BX0JJVFNfMTBfMSwKKwlDQ0RDX0dBTU1BX0JJVFNfMDlfMAorfTsKKworZW51bSBjY2RjX2NvbHBhdHMgeworCUNDRENfUkVELAorCUNDRENfR1JFRU5fUkVELAorCUNDRENfR1JFRU5fQkxVRSwKKwlDQ0RDX0JMVUUKK307CisKK3N0cnVjdCBjY2RjX2NvbF9wYXQgeworCWVudW0gY2NkY19jb2xwYXRzIG9sb3A7CisJZW51bSBjY2RjX2NvbHBhdHMgb2xlcDsKKwllbnVtIGNjZGNfY29scGF0cyBlbG9wOworCWVudW0gY2NkY19jb2xwYXRzIGVsZXA7Cit9OworCitlbnVtIGNjZGNfZGF0YXNmdCB7CisJQ0NEQ19EQVRBX05PX1NISUZULAorCUNDRENfREFUQV9TSElGVF8xQklULAorCUNDRENfREFUQV9TSElGVF8yQklULAorCUNDRENfREFUQV9TSElGVF8zQklULAorCUNDRENfREFUQV9TSElGVF80QklULAorCUNDRENfREFUQV9TSElGVF81QklULAorCUNDRENfREFUQV9TSElGVF82QklUCit9OworCitlbnVtIGNjZGNfZGF0YV9zaXplIHsKKwlDQ0RDX0RBVEFfMTZCSVRTLAorCUNDRENfREFUQV8xNUJJVFMsCisJQ0NEQ19EQVRBXzE0QklUUywKKwlDQ0RDX0RBVEFfMTNCSVRTLAorCUNDRENfREFUQV8xMkJJVFMsCisJQ0NEQ19EQVRBXzExQklUUywKKwlDQ0RDX0RBVEFfMTBCSVRTLAorCUNDRENfREFUQV84QklUUworfTsKK2VudW0gY2NkY19tZmlsdDEgeworCUNDRENfTk9fTUVESUFOX0ZJTFRFUjEsCisJQ0NEQ19BVkVSQUdFX0ZJTFRFUjEsCisJQ0NEQ19NRURJQU5fRklMVEVSMQorfTsKKworZW51bSBjY2RjX21maWx0MiB7CisJQ0NEQ19OT19NRURJQU5fRklMVEVSMiwKKwlDQ0RDX0FWRVJBR0VfRklMVEVSMiwKKwlDQ0RDX01FRElBTl9GSUxURVIyCit9OworCisvKiBzdHJ1Y3R1cmUgZm9yIEFMYXcgKi8KK3N0cnVjdCBjY2RjX2FfbGF3IHsKKwkvKiBFbmFibGUvZGlzYWJsZSBBLUxhdyAqLworCXVuc2lnbmVkIGNoYXIgZW5hYmxlOworCS8qIEdhbWEgV2lkdGggSW5wdXQgKi8KKwllbnVtIGNjZGNfZ2FtbWFfd2lkdGggZ2FtYV93ZDsKK307CisKKy8qIHN0cnVjdHVyZSBmb3IgQmxhY2sgQ2xhbXBpbmcgKi8KK3N0cnVjdCBjY2RjX2JsYWNrX2NsYW1wIHsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBUUlVFICovCisJdW5zaWduZWQgY2hhciBiX2NsYW1wX2VuYWJsZTsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBUUlVFICovCisJZW51bSBjY2RjX3NhbXBsZV9sZW5ndGggc2FtcGxlX3BpeGVsOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwllbnVtIGNjZGNfc2FtcGxlX2xpbmUgc2FtcGxlX2xuOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdGFydF9waXhlbDsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBGQUxTRSAqLworCXVuc2lnbmVkIHNob3J0IHNnYWluOworCXVuc2lnbmVkIHNob3J0IGRjX3N1YjsKK307CisKKy8qIHN0cnVjdHVyZSBmb3IgQmxhY2sgTGV2ZWwgQ29tcGVuc2F0aW9uICovCitzdHJ1Y3QgY2NkY19ibGFja19jb21wZW5zYXRpb24geworCS8qIENvbnN0YW50IHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gUmVkIGNvbXBvbmVudCAqLworCXVuc2lnbmVkIGNoYXIgcjsKKwkvKiBDb25zdGFudCB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIEdyIGNvbXBvbmVudCAqLworCXVuc2lnbmVkIGNoYXIgZ3I7CisJLyogQ29uc3RhbnQgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBCbHVlIGNvbXBvbmVudCAqLworCXVuc2lnbmVkIGNoYXIgYjsKKwkvKiBDb25zdGFudCB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIEdiIGNvbXBvbmVudCAqLworCXVuc2lnbmVkIGNoYXIgZ2I7Cit9OworCitzdHJ1Y3QgY2NkY19mbG9hdCB7CisJaW50IGludGVnZXI7CisJdW5zaWduZWQgaW50IGRlY2ltYWw7Cit9OworCisjZGVmaW5lIENDRENfQ1NDX0NPRUZGX1RBQkxFX1NJWkUJMTYKKy8qIHN0cnVjdHVyZSBmb3IgY29sb3Igc3BhY2UgY29udmVydGVyICovCitzdHJ1Y3QgY2NkY19jc2MgeworCXVuc2lnbmVkIGNoYXIgZW5hYmxlOworCS8qCisJICogUzhRNS4gVXNlIDIgZGVjaW1hbCBwcmVjaXNpb24sIHVzZXIgdmFsdWVzIHJhbmdlIGZyb20gLTMuMDAgdG8gMy45OS4KKwkgKiBleGFtcGxlIC0gdG8gdXNlIDEuMDMsIHNldCBpbnRlZ2VyIHBhcnQgYXMgMSwgYW5kIGRlY2ltYWwgcGFydCBhcyAzCisJICogdG8gdXNlIC0xLjAzLCBzZXQgaW50ZWdlciBwYXJ0IGFzIC0xIGFuZCBkZWNpbWFsIHBhcnQgYXMgMworCSAqLworCXN0cnVjdCBjY2RjX2Zsb2F0IGNvZWZmW0NDRENfQ1NDX0NPRUZGX1RBQkxFX1NJWkVdOworfTsKKworLyogU3RydWN0dXJlcyBmb3IgVmVydGljYWwgRGVmZWN0IENvcnJlY3Rpb24qLworZW51bSBjY2RjX3ZkZl9jc2wgeworCUNDRENfVkRGX05PUk1BTCwKKwlDQ0RDX1ZERl9IT1JaX0lOVEVSUE9MX1NBVCwKKwlDQ0RDX1ZERl9IT1JaX0lOVEVSUE9MCit9OworCitlbnVtIGNjZGNfdmRmX2N1ZGEgeworCUNDRENfVkRGX1dIT0xFX0xJTkVfQ09SUkVDVCwKKwlDQ0RDX1ZERl9VUFBFUl9ESVNBQkxFCit9OworCitlbnVtIGNjZGNfZGZjX213ciB7CisJQ0NEQ19ERkNfTVdSX1dSSVRFX0NPTVBMRVRFLAorCUNDRENfREZDX1dSSVRFX1JFRworfTsKKworZW51bSBjY2RjX2RmY19tcmQgeworCUNDRENfREZDX1JFQURfQ09NUExFVEUsCisJQ0NEQ19ERkNfUkVBRF9SRUcKK307CisKK2VudW0gY2NkY19kZmNfbWFfcnN0IHsKKwlDQ0RDX0RGQ19JTkNSX0FERFIsCisJQ0NEQ19ERkNfQ0xSX0FERFIKK307CisKK2VudW0gY2NkY19kZmNfbWNsciB7CisJQ0NEQ19ERkNfQ0xFQVJfQ09NUExFVEUsCisJQ0NEQ19ERkNfQ0xFQVIKK307CisKK3N0cnVjdCBjY2RjX2RmdF9jb3JyX2N0bCB7CisJZW51bSBjY2RjX3ZkZl9jc2wgdmRmY3NsOworCWVudW0gY2NkY192ZGZfY3VkYSB2ZGZjdWRhOworCXVuc2lnbmVkIGludCB2ZGZsc2Z0OworfTsKKworc3RydWN0IGNjZGNfZGZ0X2NvcnJfbWVtX2N0bCB7CisJZW51bSBjY2RjX2RmY19td3IgZGZjbXdyOworCWVudW0gY2NkY19kZmNfbXJkIGRmY21yZDsKKwllbnVtIGNjZGNfZGZjX21hX3JzdCBkZmNtYXJzdDsKKwllbnVtIGNjZGNfZGZjX21jbHIgZGZjbWNscjsKK307CisKKyNkZWZpbmUgQ0NEQ19ERlRfVEFCTEVfU0laRQkxNgorLyoKKyAqIE1haW4gU3RydWN0dXJlIGZvciB2ZXJ0aWNhbCBkZWZlY3QgY29ycmVjdGlvbi4gVmVydGljYWwgZGVmZWN0CisgKiBjb3JyZWN0aW9uIGNhbiBjb3JyZWN0IHVwdG8gMTYgZGVmZWN0cyBpZiBkZWZlY3RzIGxlc3MgdGhhbiAxNgorICogdGhlbiBwYWQgdGhlIHJlc3Qgd2l0aCAwCisgKi8KK3N0cnVjdCBjY2RjX3ZlcnRpY2FsX2RmdCB7CisJdW5zaWduZWQgY2hhciB2ZXJfZGZ0X2VuOworCXVuc2lnbmVkIGNoYXIgZ2VuX2RmdF9lbjsKKwl1bnNpZ25lZCBpbnQgc2F0dXJhdGlvbl9jdGw7CisJc3RydWN0IGNjZGNfZGZ0X2NvcnJfY3RsIGRmdF9jb3JyX2N0bDsKKwlzdHJ1Y3QgY2NkY19kZnRfY29ycl9tZW1fY3RsIGRmdF9jb3JyX21lbV9jdGw7CisJaW50IHRhYmxlX3NpemU7CisJdW5zaWduZWQgaW50IGRmdF9jb3JyX2hvcnpbQ0NEQ19ERlRfVEFCTEVfU0laRV07CisJdW5zaWduZWQgaW50IGRmdF9jb3JyX3ZlcnRbQ0NEQ19ERlRfVEFCTEVfU0laRV07CisJdW5zaWduZWQgaW50IGRmdF9jb3JyX3N1YjFbQ0NEQ19ERlRfVEFCTEVfU0laRV07CisJdW5zaWduZWQgaW50IGRmdF9jb3JyX3N1YjJbQ0NEQ19ERlRfVEFCTEVfU0laRV07CisJdW5zaWduZWQgaW50IGRmdF9jb3JyX3N1YjNbQ0NEQ19ERlRfVEFCTEVfU0laRV07Cit9OworCitzdHJ1Y3QgY2NkY19kYXRhX29mZnNldCB7CisJdW5zaWduZWQgY2hhciBob3J6X29mZnNldDsKKwl1bnNpZ25lZCBjaGFyIHZlcnRfb2Zmc2V0OworfTsKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgQ0NEQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHJhdyBjYXB0dXJlIG1vZGUgcGFzc2VkCisgKiBieSBhcHBsaWNhdGlvbgorICovCitzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyB7CisJLyogZGF0YSBzaGlmdCB0byBiZSBhcHBsaWVkIGJlZm9yZSBzdG9yaW5nICovCisJZW51bSBjY2RjX2RhdGFzZnQgZGF0YXNmdDsKKwkvKiBkYXRhIHNpemUgdmFsdWUgZnJvbSA4IHRvIDE2IGJpdHMgKi8KKwllbnVtIGNjZGNfZGF0YV9zaXplIGRhdGFfc3o7CisJLyogbWVkaWFuIGZpbHRlciBmb3Igc2RyYW0gKi8KKwllbnVtIGNjZGNfbWZpbHQxIG1maWx0MTsKKwllbnVtIGNjZGNfbWZpbHQyIG1maWx0MjsKKwkvKiBsb3cgcGFzcyBmaWx0ZXIgZW5hYmxlL2Rpc2FibGUgKi8KKwl1bnNpZ25lZCBjaGFyIGxwZl9lbmFibGU7CisJLyogVGhyZXNob2xkIG9mIG1lZGlhbiBmaWx0ZXIgKi8KKwlpbnQgbWVkX2ZpbHRfdGhyZXM7CisJLyoKKwkgKiBob3J6IGFuZCB2ZXJ0aWNhbCBkYXRhIG9mZnNldC4gQXBwbGlhYmxlIGZvciBkZWZlY3QgY29ycmVjdGlvbgorCSAqIGFuZCBsc2MKKwkgKi8KKwlzdHJ1Y3QgY2NkY19kYXRhX29mZnNldCBkYXRhX29mZnNldDsKKwkvKiBTdHJ1Y3R1cmUgZm9yIE9wdGlvbmFsIEEtTGF3ICovCisJc3RydWN0IGNjZGNfYV9sYXcgYWxhdzsKKwkvKiBTdHJ1Y3R1cmUgZm9yIE9wdGljYWwgQmxhY2sgQ2xhbXAgKi8KKwlzdHJ1Y3QgY2NkY19ibGFja19jbGFtcCBibGtfY2xhbXA7CisJLyogU3RydWN0dXJlIGZvciBCbGFjayBDb21wZW5zYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19ibGFja19jb21wZW5zYXRpb24gYmxrX2NvbXA7CisJLyogc3RydXR1cmUgZm9yIHZlcnRpY2FsIERlZmVjdCBDb3JyZWN0aW9uIE1vZHVsZSBDb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfdmVydGljYWxfZGZ0IHZlcnRpY2FsX2RmdDsKKwkvKiBzdHJ1Y3R1cmUgZm9yIGNvbG9yIHNwYWNlIGNvbnZlcnRlciBNb2R1bGUgQ29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX2NzYyBjc2M7CisJLyogY29sb3IgcGF0dGVycyBmb3IgYmF5ZXIgY2FwdHVyZSAqLworCXN0cnVjdCBjY2RjX2NvbF9wYXQgY29sX3BhdF9maWVsZDA7CisJc3RydWN0IGNjZGNfY29sX3BhdCBjb2xfcGF0X2ZpZWxkMTsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2RlZmluZSBDQ0RDX1dJTl9QQUwJezAsIDAsIDcyMCwgNTc2fQorI2RlZmluZSBDQ0RDX1dJTl9WR0EJezAsIDAsIDY0MCwgNDgwfQorCitzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgeworCS8qIHBpeGVsIGZvcm1hdCAqLworCWVudW0gY2NkY19waXhmbXQgcGl4X2ZtdDsKKwkvKiBwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2VkIGZyYW1lICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIHZpZGVvIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIGlkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGhvcml6b250YWwgc3luYyBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBlbmFibGUgQlQuNjU2IGVtYmVkZGVkIHN5bmMgbW9kZSAqLworCWludCBidDY1Nl9lbmFibGU7CisJLyogY2I6eTpjcjp5IG9yIHk6Y2I6eTpjciBpbiBtZW1vcnkgKi8KKwllbnVtIGNjZGNfcGl4b3JkZXIgcGl4X29yZGVyOworCS8qIGludGVybGVhdmVkIG9yIHNlcGFyYXRlZCBmaWVsZHMgICovCisJZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGU7Cit9OworCisvKiBHYWluIGFwcGxpZWQgdG8gUmF3IEJheWVyIGRhdGEgKi8KK3N0cnVjdCBjY2RjX2dhaW4geworCXVuc2lnbmVkIHNob3J0IHJfeWU7CisJdW5zaWduZWQgc2hvcnQgZ3JfY3k7CisJdW5zaWduZWQgc2hvcnQgZ2JfZzsKKwl1bnNpZ25lZCBzaG9ydCBiX21nOworfTsKKworLyogU3RydWN0dXJlIGZvciBDQ0RDIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgcmF3IGNhcHR1cmUgbW9kZSAqLworc3RydWN0IGNjZGNfcGFyYW1zX3JhdyB7CisJLyogcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIHByb2dyZXNzaXZlIG9yIGludGVybGFjZWQgZnJhbWUgKi8KKwllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQ7CisJLyogdmlkZW8gd2luZG93ICovCisJc3RydWN0IHY0bDJfcmVjdCB3aW47CisJLyogZmllbGQgaWQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBmaWRfcG9sOworCS8qIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCB2ZF9wb2w7CisJLyogaG9yaXpvbnRhbCBzeW5jIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgaGRfcG9sOworCS8qIGludGVybGVhdmVkIG9yIHNlcGFyYXRlZCBmaWVsZHMgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKKwkvKiBHYWluIHZhbHVlcyAqLworCXN0cnVjdCBjY2RjX2dhaW4gZ2FpbjsKKwkvKiBvZmZzZXQgKi8KKwl1bnNpZ25lZCBpbnQgY2NkY19vZmZzZXQ7CisJLyogaG9yaXpvbnRhbCBmbGlwIGVuYWJsZSAqLworCXVuc2lnbmVkIGNoYXIgaG9yel9mbGlwX2VuYWJsZTsKKwkvKgorCSAqIGVuYWJsZSB0byBzdG9yZSB0aGUgaW1hZ2UgaW4gaW52ZXJzZSBvcmRlciBpbiBtZW1vcnkKKwkgKiAoYm90dG9tIHRvIHRvcCkKKwkgKi8KKwl1bnNpZ25lZCBjaGFyIGltYWdlX2ludmVydF9lbmFibGU7CisJLyogQ29uZmlndXJhYmxlIHBhcnQgb2YgcmF3IGRhdGEgKi8KKwlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyBjb25maWdfcGFyYW1zOworfTsKKworI2VuZGlmCisjZW5kaWYJCQkJLyogRE0zNTVfQ0NEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG02NDR4X2NjZGMuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9kbTY0NHhfY2NkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTc4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG02NDR4X2NjZGMuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfRE02NDRYX0NDRENfSAorI2RlZmluZSBfRE02NDRYX0NDRENfSAorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvY2NkY190eXBlcy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBmZV90eXBlcy5oPgorCisvKiBlbnVtIGZvciBObyBvZiBwaXhlbCBwZXIgbGluZSB0byBiZSBhdmcuIGluIEJsYWNrIENsYW1waW5nKi8KK2VudW0gY2NkY19zYW1wbGVfbGVuZ3RoIHsKKwlDQ0RDX1NBTVBMRV8xUElYRUxTLAorCUNDRENfU0FNUExFXzJQSVhFTFMsCisJQ0NEQ19TQU1QTEVfNFBJWEVMUywKKwlDQ0RDX1NBTVBMRV84UElYRUxTLAorCUNDRENfU0FNUExFXzE2UElYRUxTCit9OworCisvKiBlbnVtIGZvciBObyBvZiBsaW5lcyBpbiBCbGFjayBDbGFtcGluZyAqLworZW51bSBjY2RjX3NhbXBsZV9saW5lIHsKKwlDQ0RDX1NBTVBMRV8xTElORVMsCisJQ0NEQ19TQU1QTEVfMkxJTkVTLAorCUNDRENfU0FNUExFXzRMSU5FUywKKwlDQ0RDX1NBTVBMRV84TElORVMsCisJQ0NEQ19TQU1QTEVfMTZMSU5FUworfTsKKworLyogZW51bSBmb3IgQWxhdyBnYW1hIHdpZHRoICovCitlbnVtIGNjZGNfZ2FtYV93aWR0aCB7CisJQ0NEQ19HQU1NQV9CSVRTXzE1XzYsCisJQ0NEQ19HQU1NQV9CSVRTXzE0XzUsCisJQ0NEQ19HQU1NQV9CSVRTXzEzXzQsCisJQ0NEQ19HQU1NQV9CSVRTXzEyXzMsCisJQ0NEQ19HQU1NQV9CSVRTXzExXzIsCisJQ0NEQ19HQU1NQV9CSVRTXzEwXzEsCisJQ0NEQ19HQU1NQV9CSVRTXzA5XzAKK307CisKK2VudW0gY2NkY19kYXRhX3NpemUgeworCUNDRENfREFUQV8xNkJJVFMsCisJQ0NEQ19EQVRBXzE1QklUUywKKwlDQ0RDX0RBVEFfMTRCSVRTLAorCUNDRENfREFUQV8xM0JJVFMsCisJQ0NEQ19EQVRBXzEyQklUUywKKwlDQ0RDX0RBVEFfMTFCSVRTLAorCUNDRENfREFUQV8xMEJJVFMsCisJQ0NEQ19EQVRBXzhCSVRTCit9OworCisvKiBzdHJ1Y3R1cmUgZm9yIEFMYXcgKi8KK3N0cnVjdCBjY2RjX2FfbGF3IHsKKwkvKiBFbmFibGUvZGlzYWJsZSBBLUxhdyAqLworCXVuc2lnbmVkIGNoYXIgZW5hYmxlOworCS8qIEdhbWEgV2lkdGggSW5wdXQgKi8KKwllbnVtIGNjZGNfZ2FtYV93aWR0aCBnYW1hX3dkOworfTsKKworLyogc3RydWN0dXJlIGZvciBCbGFjayBDbGFtcGluZyAqLworc3RydWN0IGNjZGNfYmxhY2tfY2xhbXAgeworCXVuc2lnbmVkIGNoYXIgZW5hYmxlOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwllbnVtIGNjZGNfc2FtcGxlX2xlbmd0aCBzYW1wbGVfcGl4ZWw7CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgVFJVRSAqLworCWVudW0gY2NkY19zYW1wbGVfbGluZSBzYW1wbGVfbG47CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgVFJVRSAqLworCXVuc2lnbmVkIHNob3J0IHN0YXJ0X3BpeGVsOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZ2FpbjsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBGQUxTRSAqLworCXVuc2lnbmVkIHNob3J0IGRjX3N1YjsKK307CisKKy8qIHN0cnVjdHVyZSBmb3IgQmxhY2sgTGV2ZWwgQ29tcGVuc2F0aW9uICovCitzdHJ1Y3QgY2NkY19ibGFja19jb21wZW5zYXRpb24geworCS8qIENvbnN0YW50IHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gUmVkIGNvbXBvbmVudCAqLworCWNoYXIgcjsKKwkvKiBDb25zdGFudCB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIEdyIGNvbXBvbmVudCAqLworCWNoYXIgZ3I7CisJLyogQ29uc3RhbnQgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBCbHVlIGNvbXBvbmVudCAqLworCWNoYXIgYjsKKwkvKiBDb25zdGFudCB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIEdiIGNvbXBvbmVudCAqLworCWNoYXIgZ2I7Cit9OworCisvKiBzdHJ1Y3R1cmUgZm9yIGZhdWx0IHBpeGVsIGNvcnJlY3Rpb24gKi8KK3N0cnVjdCBjY2RjX2ZhdWx0X3BpeGVsIHsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBmYXVsdCBwaXhlbCBjb3JyZWN0aW9uICovCisJdW5zaWduZWQgY2hhciBlbmFibGU7CisJLyogTnVtYmVyIG9mIGZhdWx0IHBpeGVsICovCisJdW5zaWduZWQgc2hvcnQgZnBfbnVtOworCS8qIEFkZHJlc3Mgb2YgZmF1bHQgcGl4ZWwgdGFibGUgKi8KKwl1bnNpZ25lZCBpbnQgZnBjX3RhYmxlX2FkZHI7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIENDREMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciByYXcgY2FwdHVyZSBtb2RlIHBhc3NlZAorICogYnkgYXBwbGljYXRpb24KKyAqLworc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgeworCS8qIGRhdGEgc2l6ZSB2YWx1ZSBmcm9tIDggdG8gMTYgYml0cyAqLworCWVudW0gY2NkY19kYXRhX3NpemUgZGF0YV9zejsKKwkvKiBTdHJ1Y3R1cmUgZm9yIE9wdGlvbmFsIEEtTGF3ICovCisJc3RydWN0IGNjZGNfYV9sYXcgYWxhdzsKKwkvKiBTdHJ1Y3R1cmUgZm9yIE9wdGljYWwgQmxhY2sgQ2xhbXAgKi8KKwlzdHJ1Y3QgY2NkY19ibGFja19jbGFtcCBibGtfY2xhbXA7CisJLyogU3RydWN0dXJlIGZvciBCbGFjayBDb21wZW5zYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19ibGFja19jb21wZW5zYXRpb24gYmxrX2NvbXA7CisJLyogU3RydWN0dXJlIGZvciBGYXVsdCBQaXhlbCBNb2R1bGUgQ29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX2ZhdWx0X3BpeGVsIGZhdWx0X3B4bDsKK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorLyogRGVmaW5lIHRvIGVuYWJsZS9kaXNhYmxlIHZpZGVvIHBvcnQgKi8KKyNkZWZpbmUgRlBfTlVNX0JZVEVTCQk0CisvKiBEZWZpbmUgZm9yIGV4dHJhIHBpeGVsL2xpbmUgYW5kIGV4dHJhIGxpbmVzL2ZyYW1lICovCisjZGVmaW5lIE5VTV9FWFRSQVBJWEVMUwkJOAorI2RlZmluZSBOVU1fRVhUUkFMSU5FUwkJOAorCisvKiBzZXR0aW5ncyBmb3IgY29tbW9ubHkgdXNlZCB2aWRlbyBmb3JtYXRzICovCisjZGVmaW5lIENDRENfV0lOX1BBTCAgICAgezAsIDAsIDcyMCwgNTc2fQorLyogbnRzYyBzcXVhcmUgcGl4ZWwgKi8KKyNkZWZpbmUgQ0NEQ19XSU5fVkdBCXswLCAwLCAoNjQwICsgTlVNX0VYVFJBUElYRUxTKSwgKDQ4MCArIE5VTV9FWFRSQUxJTkVTKX0KKworLyogU3RydWN0dXJlIGZvciBDQ0RDIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgcmF3IGNhcHR1cmUgbW9kZSAqLworc3RydWN0IGNjZGNfcGFyYW1zX3JhdyB7CisJLyogcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIHByb2dyZXNzaXZlIG9yIGludGVybGFjZWQgZnJhbWUgKi8KKwllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQ7CisJLyogdmlkZW8gd2luZG93ICovCisJc3RydWN0IHY0bDJfcmVjdCB3aW47CisJLyogZmllbGQgaWQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBmaWRfcG9sOworCS8qIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCB2ZF9wb2w7CisJLyogaG9yaXpvbnRhbCBzeW5jIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgaGRfcG9sOworCS8qIGludGVybGVhdmVkIG9yIHNlcGFyYXRlZCBmaWVsZHMgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKKwkvKgorCSAqIGVuYWJsZSB0byBzdG9yZSB0aGUgaW1hZ2UgaW4gaW52ZXJzZQorCSAqIG9yZGVyIGluIG1lbW9yeShib3R0b20gdG8gdG9wKQorCSAqLworCXVuc2lnbmVkIGNoYXIgaW1hZ2VfaW52ZXJ0X2VuYWJsZTsKKwkvKiBjb25maWd1cmFibGUgcGFyYW1hdGVycyAqLworCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3IGNvbmZpZ19wYXJhbXM7Cit9OworCitzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgeworCS8qIHBpeGVsIGZvcm1hdCAqLworCWVudW0gY2NkY19waXhmbXQgcGl4X2ZtdDsKKwkvKiBwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2VkIGZyYW1lICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIHZpZGVvIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIGlkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGhvcml6b250YWwgc3luYyBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBlbmFibGUgQlQuNjU2IGVtYmVkZGVkIHN5bmMgbW9kZSAqLworCWludCBidDY1Nl9lbmFibGU7CisJLyogY2I6eTpjcjp5IG9yIHk6Y2I6eTpjciBpbiBtZW1vcnkgKi8KKwllbnVtIGNjZGNfcGl4b3JkZXIgcGl4X29yZGVyOworCS8qIGludGVybGVhdmVkIG9yIHNlcGFyYXRlZCBmaWVsZHMgICovCisJZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGU7Cit9OworI2VuZGlmCisjZW5kaWYJCQkJLyogX0RNNjQ0WF9DQ0RDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGZlX2NhcHR1cmUuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGZlX2NhcHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWQ4OTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5oCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX1ZQRkVfQ0FQVFVSRV9ICisjZGVmaW5lIF9WUEZFX0NBUFRVUkVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBIZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfdHlwZXMuaD4KKworI2RlZmluZSBWUEZFX0NBUFRVUkVfTlVNX0RFQ09ERVJTICAgICAgICA1CisKKy8qIE1hY3JvcyAqLworI2RlZmluZSBWUEZFX01BSk9SX1JFTEVBU0UgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVlBGRV9NSU5PUl9SRUxFQVNFICAgICAgICAgICAgICAwCisjZGVmaW5lIFZQRkVfQlVJTEQgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBWUEZFX0NBUFRVUkVfVkVSU0lPTl9DT0RFICAgICAgICgoVlBGRV9NQUpPUl9SRUxFQVNFIDw8IDE2KSB8IFwKKwkJCQkJKFZQRkVfTUlOT1JfUkVMRUFTRSA8PCA4KSAgfCBcCisJCQkJCVZQRkVfQlVJTEQpCisKKyNkZWZpbmUgQ0FQVFVSRV9EUlZfTkFNRQkJInZwZmUtY2FwdHVyZSIKKworc3RydWN0IHZwZmVfcGl4ZWxfZm9ybWF0IHsKKwlzdHJ1Y3QgdjRsMl9mbXRkZXNjIGZtdGRlc2M7CisJLyogYnl0ZXMgcGVyIHBpeGVsICovCisJaW50IGJwcDsKK307CisKK3N0cnVjdCB2cGZlX3N0ZF9pbmZvIHsKKwlpbnQgYWN0aXZlX3BpeGVsczsKKwlpbnQgYWN0aXZlX2xpbmVzOworCS8qIGN1cnJlbnQgZnJhbWUgZm9ybWF0ICovCisJaW50IGZyYW1lX2Zvcm1hdDsKK307CisKK3N0cnVjdCB2cGZlX3JvdXRlIHsKKwl1MzIgaW5wdXQ7CisJdTMyIG91dHB1dDsKK307CisKK3N0cnVjdCB2cGZlX3N1YmRldl9pbmZvIHsKKwkvKiBTdWIgZGV2aWNlIG5hbWUgKi8KKwljaGFyIG5hbWVbMzJdOworCS8qIFN1YiBkZXZpY2UgZ3JvdXAgaWQgKi8KKwlpbnQgZ3JwX2lkOworCS8qIE51bWJlciBvZiBpbnB1dHMgc3VwcG9ydGVkICovCisJaW50IG51bV9pbnB1dHM7CisJLyogaW5wdXRzIGF2YWlsYWJsZSBhdCB0aGUgc3ViIGRldmljZSAqLworCXN0cnVjdCB2NGwyX2lucHV0ICppbnB1dHM7CisJLyogU3ViIGRldiByb3V0aW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIGlucHV0ICovCisJc3RydWN0IHZwZmVfcm91dGUgKnJvdXRlczsKKwkvKiBjaGVjayBpZiBzdWIgZGV2IHN1cHBvcnRzIHJvdXRpbmcgKi8KKwlpbnQgY2FuX3JvdXRlOworCS8qIGNjZGMgYnVzL2ludGVyZmFjZSBjb25maWd1cmF0aW9uICovCisJc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gY2NkY19pZl9wYXJhbXM7CisJLyogaTJjIHN1YmRldmljZSBib2FyZCBpbmZvICovCisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGJvYXJkX2luZm87Cit9OworCitzdHJ1Y3QgdnBmZV9jb25maWcgeworCS8qIE51bWJlciBvZiBzdWIgZGV2aWNlcyBjb25uZWN0ZWQgdG8gdnBmZSAqLworCWludCBudW1fc3ViZGV2czsKKwkvKiBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHN1YmRldiAqLworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzdWJfZGV2czsKKwkvKiBldm0gY2FyZCBpbmZvICovCisJY2hhciAqY2FyZF9uYW1lOworCS8qIGNjZGMgbmFtZSAqLworCWNoYXIgKmNjZGM7CisJLyogdnBmZSBjbG9jayAqLworCXN0cnVjdCBjbGsgKnZwc3NjbGs7CisJc3RydWN0IGNsayAqc2xhdmVjbGs7Cit9OworCitzdHJ1Y3QgdnBmZV9kZXZpY2UgeworCS8qIFY0bDIgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCS8qIElkZW50aWZpZXMgdmlkZW8gZGV2aWNlIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CisJLyogc3ViIGRldmljZXMgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKipzZDsKKwkvKiB2cGZlIGNmZyAqLworCXN0cnVjdCB2cGZlX2NvbmZpZyAqY2ZnOworCS8qIFY0bDIgZGV2aWNlICovCisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCS8qIHBhcmVudCBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICpwZGV2OworCS8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBzdGF0ZSBvZiB0aGUgcHJpb3JpdHkgKi8KKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisJLyogbnVtYmVyIG9mIG9wZW4gaW5zdGFuY2VzIG9mIHRoZSBjaGFubmVsICovCisJdTMyIHVzcnM7CisJLyogSW5kaWNhdGVzIGlkIG9mIHRoZSBmaWVsZCB3aGljaCBpcyBiZWluZyBkaXNwbGF5ZWQgKi8KKwl1MzIgZmllbGRfaWQ7CisJLyogZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGRlY29kZXIgaXMgaW5pdGlhbGl6ZWQgKi8KKwl1OCBpbml0aWFsaXplZDsKKwkvKiBjdXJyZW50IGludGVyZmFjZSB0eXBlICovCisJc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gdnBmZV9pZl9wYXJhbXM7CisJLyogcHRyIHRvIGN1cnJlbnRseSBzZWxlY3RlZCBzdWIgZGV2aWNlICovCisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKmN1cnJlbnRfc3ViZGV2OworCS8qIGN1cnJlbnQgaW5wdXQgYXQgdGhlIHN1YiBkZXZpY2UgKi8KKwlpbnQgY3VycmVudF9pbnB1dDsKKwkvKiBLZWVwcyB0cmFjayBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YW5kYXJkICovCisJc3RydWN0IHZwZmVfc3RkX2luZm8gc3RkX2luZm87CisJLyogc3RkIGluZGV4IGludG8gc3RkIHRhYmxlICovCisJaW50IHN0ZF9pbmRleDsKKwkvKiBDQ0RDIElSUXMgdXNlZCB3aGVuIENDREMvSVNJRiBvdXRwdXQgdG8gU0RSQU0gKi8KKwl1bnNpZ25lZCBpbnQgY2NkY19pcnEwOworCXVuc2lnbmVkIGludCBjY2RjX2lycTE7CisJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gZmJ1ZmZlcnMgKi8KKwl1MzIgbnVtYnVmZmVyczsKKwkvKiBMaXN0IG9mIGJ1ZmZlciBwb2ludGVycyBmb3Igc3RvcmluZyBmcmFtZXMgKi8KKwl1OCAqZmJ1ZmZlcnNbVklERU9fTUFYX0ZSQU1FXTsKKwkvKiBQb2ludGVyIHBvaW50aW5nIHRvIGN1cnJlbnQgdjRsMl9idWZmZXIgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpjdXJfZnJtOworCS8qIFBvaW50ZXIgcG9pbnRpbmcgdG8gbmV4dCB2NGwyX2J1ZmZlciAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKm5leHRfZnJtOworCS8qCisJICogVGhpcyBmaWVsZCBrZWVwcyB0cmFjayBvZiB0eXBlIG9mIGJ1ZmZlciBleGNoYW5nZSBtZWNoYW5pc20KKwkgKiB1c2VyIGhhcyBzZWxlY3RlZAorCSAqLworCWVudW0gdjRsMl9tZW1vcnkgbWVtb3J5OworCS8qIFVzZWQgdG8gc3RvcmUgcGl4ZWwgZm9ybWF0ICovCisJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKKwkvKgorCSAqIHVzZWQgd2hlbiBJTVAgaXMgY2hhaW5lZCB0byBzdG9yZSB0aGUgY3JvcCB3aW5kb3cgd2hpY2gKKwkgKiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaW1hZ2Ugd2luZG93CisJICovCisJc3RydWN0IHY0bDJfcmVjdCBjcm9wOworCS8qIEJ1ZmZlciBxdWV1ZSB1c2VkIGluIHZpZGVvLWJ1ZiAqLworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBidWZmZXJfcXVldWU7CisJLyogUXVldWUgb2YgZmlsbGVkIGZyYW1lcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZG1hX3F1ZXVlOworCS8qIFVzZWQgaW4gdmlkZW8tYnVmICovCisJc3BpbmxvY2tfdCBpcnFsb2NrOworCS8qIElSUSBsb2NrIGZvciBETUEgcXVldWUgKi8KKwlzcGlubG9ja190IGRtYV9xdWV1ZV9sb2NrOworCS8qIGxvY2sgdXNlZCB0byBhY2Nlc3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwkvKiBudW1iZXIgb2YgdXNlcnMgcGVyZm9ybWluZyBJTyAqLworCXUzMiBpb191c3JzOworCS8qIEluZGljYXRlcyB3aGV0aGVyIHN0cmVhbWluZyBzdGFydGVkICovCisJdTggc3RhcnRlZDsKKwkvKgorCSAqIG9mZnNldCB3aGVyZSBzZWNvbmQgZmllbGQgc3RhcnRzIGZyb20gdGhlIHN0YXJ0aW5nIG9mIHRoZQorCSAqIGJ1ZmZlciBmb3IgZmllbGQgc2VwZXJhdGVkIFlDYkNyIGZvcm1hdHMKKwkgKi8KKwl1MzIgZmllbGRfb2ZmOworfTsKKworLyogRmlsZSBoYW5kbGUgc3RydWN0dXJlICovCitzdHJ1Y3QgdnBmZV9maCB7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldjsKKwkvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGZpbGUgaGFuZGxlIGlzIGRvaW5nIElPICovCisJdTggaW9fYWxsb3dlZDsKKwkvKiBVc2VkIHRvIGtlZXAgdHJhY2sgcHJpb3JpdHkgb2YgdGhpcyBpbnN0YW5jZSAqLworCWVudW0gdjRsMl9wcmlvcml0eSBwcmlvOworfTsKKworc3RydWN0IHZwZmVfY29uZmlnX3BhcmFtcyB7CisJdTggbWluX251bWJ1ZmZlcnM7CisJdTggbnVtYnVmZmVyczsKKwl1MzIgbWluX2J1ZnNpemU7CisJdTMyIGRldmljZV9idWZzaXplOworfTsKKworI2VuZGlmCQkJCS8qIEVuZCBvZiBfX0tFUk5FTF9fICovCisvKioKKyAqIFZQRkVfQ01EX1NfQ0NEQ19SQVdfUEFSQU1TIC0gRVhQRVJJTUVOVEFMIElPQ1RMIHRvIHNldCByYXcgY2FwdHVyZSBwYXJhbXMKKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIG1vZHVsZXMgc3VjaCBhcyBkZWZlY3QgcGl4ZWwgY29ycmVjdGlvbiwKKyAqIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24sIGN1bGxpbmcgZXRjLiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBpb2N0bCB0aGF0CisgKiB3aWxsIGNoYW5nZSBpbiBmdXR1cmUga2VybmVscy4gU28gdXNlIHRoaXMgaW9jdGwgd2l0aCBjYXJlICEKKyAqIFRPRE86IFRoaXMgaXMgdG8gYmUgc3BsaXQgaW50byBtdWx0aXBsZSBpb2N0bHMgYW5kIGFsc28gZXhwbG9yZSB0aGUKKyAqIHBvc3NpYmlsaXR5IG9mIGV4dGVuZGluZyB0aGUgdjRsMiBhcGkgdG8gaW5jbHVkZSB0aGlzCisgKiovCisjZGVmaW5lIFZQRkVfQ01EX1NfQ0NEQ19SQVdfUEFSQU1TIF9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMSwgXAorCQkJCQl2b2lkICopCisjZW5kaWYJCQkJLyogX0RBVklOQ0lfVlBGRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBmZV90eXBlcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwZmVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmZiNzRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwZmVfdHlwZXMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKWFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX1ZQRkVfVFlQRVNfSAorI2RlZmluZSBfVlBGRV9UWVBFU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2VudW0gdnBmZV9waW5fcG9sIHsKKwlWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwlWUEZFX1BJTlBPTF9ORUdBVElWRQorfTsKKworZW51bSB2cGZlX2h3X2lmX3R5cGUgeworCS8qIEJUNjU2IC0gOCBiaXQgKi8KKwlWUEZFX0JUNjU2LAorCS8qIEJUMTEyMCAtIDE2IGJpdCAqLworCVZQRkVfQlQxMTIwLAorCS8qIFJhdyBCYXllciAqLworCVZQRkVfUkFXX0JBWUVSLAorCS8qIFlDYkNyIC0gOCBiaXQgd2l0aCBleHRlcm5hbCBzeW5jICovCisJVlBGRV9ZQ0JDUl9TWU5DXzgsCisJLyogWUNiQ3IgLSAxNiBiaXQgd2l0aCBleHRlcm5hbCBzeW5jICovCisJVlBGRV9ZQ0JDUl9TWU5DXzE2LAorCS8qIEJUNjU2IC0gMTAgYml0ICovCisJVlBGRV9CVDY1Nl8xMEJJVAorfTsKKworLyogaW50ZXJmYWNlIGRlc2NyaXB0aW9uICovCitzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSB7CisJZW51bSB2cGZlX2h3X2lmX3R5cGUgaWZfdHlwZTsKKwllbnVtIHZwZmVfcGluX3BvbCBoZHBvbDsKKwllbnVtIHZwZmVfcGluX3BvbCB2ZHBvbDsKK307CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2RmZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiB2cHNzIC0gdmlkZW8gcHJvY2Vzc2luZyBzdWJzeXN0ZW0gbW9kdWxlIGhlYWRlciBmaWxlLgorICoKKyAqIEluY2x1ZGUgdGhpcyBoZWFkZXIgZmlsZSBpZiBhIGRyaXZlciBuZWVkcyB0byBjb25maWd1cmUgdnBzcyBzeXN0ZW0KKyAqIG1vZHVsZS4gSXQgZXhwb3J0cyBhIHNldCBvZiBsaWJyYXJ5IGZ1bmN0aW9ucyAgZm9yIHZpZGVvIGRyaXZlcnMgdG8KKyAqIGNvbmZpZ3VyZSB2cHNzIHN5c3RlbSBtb2R1bGUgZnVuY3Rpb25zIHN1Y2ggYXMgY2xvY2sgZW5hYmxlL2Rpc2FibGUsCisgKiB2cHNzIGludGVycnVwdCBtdXggdG8gYXJtLCBhbmQgb3RoZXIgY29tbW9uIHZwc3Mgc3lzdGVtIG1vZHVsZQorICogZnVuY3Rpb25zLgorICovCisjaWZuZGVmIF9WUFNTX0gKKyNkZWZpbmUgX1ZQU1NfSAorCisvKiBzZWxlY3RvciBmb3IgY2NkYyBpbnB1dCBzZWxlY3Rpb24gb24gRE0zNTUgKi8KK2VudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgeworCVZQU1NfQ0NEQ0lOLAorCVZQU1NfSFNTSUlOCit9OworCisvKiBVc2VkIGZvciBlbmFibGUvZGlhYmxlIFZQU1MgQ2xvY2sgKi8KK2VudW0gdnBzc19jbG9ja19zZWwgeworCS8qIERNMzU1L0RNMzY1ICovCisJVlBTU19DQ0RDX0NMT0NLLAorCVZQU1NfSVBJUEVfQ0xPQ0ssCisJVlBTU19IM0FfQ0xPQ0ssCisJVlBTU19DRkFMRF9DTE9DSywKKwkvKgorCSAqIFdoZW4gdXNpbmcgVlBTU19WRU5DX0NMT0NLX1NFTCBpbiB2cHNzX2VuYWJsZV9jbG9jaygpIGFwaQorCSAqIGZvbGxvd2luZyBhcHBsaWVzOi0KKwkgKiBlbiA9IDAgc2VsZWN0cyBFTkNfQ0xLCisJICogZW4gPSAxIHNlbGVjdHMgRU5DX0NMSy8yCisJICovCisJVlBTU19WRU5DX0NMT0NLX1NFTCwKKwlWUFNTX1ZQQkVfQ0xPQ0ssCit9OworCisvKiBzZWxlY3QgaW5wdXQgdG8gY2NkYyBvbiBkbTM1NSAqLworaW50IHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCk7CisvKiBlbmFibGUvZGlzYWJsZSBhIHZwc3MgY2xvY2ssIDAgLSBzdWNjZXNzLCAtMSAtIGZhaWx1cmUgKi8KK2ludCB2cHNzX2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKTsKKworLyogd2JsIHJlc2V0IGZvciBkbTY0NHggKi8KK2VudW0gdnBzc193Ymxfc2VsIHsKKwlWUFNTX1BDUl9BRVdfV0JMXzAgPSAxNiwKKwlWUFNTX1BDUl9BRl9XQkxfMCwKKwlWUFNTX1BDUl9SU1o0X1dCTF8wLAorCVZQU1NfUENSX1JTWjNfV0JMXzAsCisJVlBTU19QQ1JfUlNaMl9XQkxfMCwKKwlWUFNTX1BDUl9SU1oxX1dCTF8wLAorCVZQU1NfUENSX1BSRVZfV0JMXzAsCisJVlBTU19QQ1JfQ0NEQ19XQkxfTywKK307CitpbnQgdnBzc19jbGVhcl93Ymxfb3ZlcmZsb3coZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggMjNlY2VhZC4uM2Q3NGU2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTE2LDI0ICsxNiwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAKIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBkZXZpY2UgZGV2OwotCXN0cnVjdCBkZXZpY2UgKmNvbnRyb2w7Ci0JdW5zaWduZWQgc2hvcnQgd2lkdGg7CQkvKiBDdXJyZW50IHdpbmRvdyAqLwotCXVuc2lnbmVkIHNob3J0IGhlaWdodDsJCS8qIHNpemVzICovCi0JdW5zaWduZWQgc2hvcnQgeF9taW47CQkvKiBDYW1lcmEgY2FwYWJpbGl0aWVzICovCi0JdW5zaWduZWQgc2hvcnQgeV9taW47Ci0JdW5zaWduZWQgc2hvcnQgeF9jdXJyZW50OwkvKiBDdXJyZW50IHdpbmRvdyBsb2NhdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0IHlfY3VycmVudDsKKwlzdHJ1Y3QgZGV2aWNlICpwZGV2OwkJLyogUGxhdGZvcm0gZGV2aWNlICovCisJczMyIHVzZXJfd2lkdGg7CisJczMyIHVzZXJfaGVpZ2h0OwogCXVuc2lnbmVkIHNob3J0IHdpZHRoX21pbjsKLQl1bnNpZ25lZCBzaG9ydCB3aWR0aF9tYXg7CiAJdW5zaWduZWQgc2hvcnQgaGVpZ2h0X21pbjsKLQl1bnNpZ25lZCBzaG9ydCBoZWlnaHRfbWF4OwogCXVuc2lnbmVkIHNob3J0IHlfc2tpcF90b3A7CS8qIExpbmVzIHRvIHNraXAgYXQgdGhlIHRvcCAqLwotCXVuc2lnbmVkIHNob3J0IGdhaW47Ci0JdW5zaWduZWQgc2hvcnQgZXhwb3N1cmU7CiAJdW5zaWduZWQgY2hhciBpZmFjZTsJCS8qIEhvc3QgbnVtYmVyICovCiAJdW5zaWduZWQgY2hhciBkZXZudW07CQkvKiBEZXZpY2UgbnVtYmVyIHBlciBob3N0ICovCiAJdW5zaWduZWQgY2hhciBidXN3aWR0aDsJCS8qIFNlZSBjb21tZW50IGluIC5jICovCkBAIC00Niw3ICszOSw2IEBACiAJc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp1c2VyX2Zvcm1hdHM7CiAJaW50IG51bV91c2VyX2Zvcm1hdHM7CiAJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwkJLyogUHJlc2VydmUgZmllbGQgb3ZlciBjbG9zZSgpICovCi0Jc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdm9pZCAqaG9zdF9wcml2OwkJLyogUGVyLWRldmljZSBob3N0IHByaXZhdGUgZGF0YSAqLwogCS8qIHNvY19jYW1lcmEuYyBwcml2YXRlIGNvdW50LiBPbmx5IGFjY2Vzc2VkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwogCWludCB1c2VfY291bnQ7CkBAIC01OSw4ICs1MSw4IEBACiB9OwogCiBzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0IHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBjaGFyIG5yOwkJCQkvKiBIb3N0IG51bWJlciAqLwogCXZvaWQgKnByaXY7CiAJY29uc3QgY2hhciAqZHJ2X25hbWU7CkBAIC03Myw5ICs2NSwxOCBAQAogCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90KTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKKwkvKgorCSAqIC5nZXRfZm9ybWF0cygpIGlzIGNhbGxlZCBmb3IgZWFjaCBjbGllbnQgZGV2aWNlIGZvcm1hdCwgYnV0CisJICogLnB1dF9mb3JtYXRzKCkgaXMgb25seSBjYWxsZWQgb25jZS4gRnVydGhlciwgaWYgYW55IG9mIHRoZSBjYWxscyB0bworCSAqIC5nZXRfZm9ybWF0cygpIGZhaWwsIC5wdXRfZm9ybWF0cygpIHdpbGwgbm90IGJlIGNhbGxlZCBhdCBhbGwsIHRoZQorCSAqIGZhaWxpbmcgLmdldF9mb3JtYXRzKCkgbXVzdCB0aGVuIGNsZWFuIHVwIGludGVybmFsbHkuCisJICovCiAJaW50ICgqZ2V0X2Zvcm1hdHMpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBpbnQsCiAJCQkgICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKik7Ci0JaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9yZWN0ICopOworCXZvaWQgKCpwdXRfZm9ybWF0cykoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOworCWludCAoKmNyb3BjYXApKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICopOworCWludCAoKmdldF9jcm9wKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY3JvcCAqKTsKKwlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Nyb3AgKik7CiAJaW50ICgqc2V0X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAlpbnQgKCp0cnlfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwogCXZvaWQgKCppbml0X3ZpZGVvYnVmKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKiwKQEAgLTgzLDcgKzg0LDExIEBACiAJaW50ICgqcmVxYnVmcykoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqLCBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqKTsKIAlpbnQgKCpxdWVyeWNhcCkoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqLCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICopOwogCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMik7CisJaW50ICgqZ2V0X2N0cmwpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOworCWludCAoKnNldF9jdHJsKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKIAl1bnNpZ25lZCBpbnQgKCpwb2xsKShzdHJ1Y3QgZmlsZSAqLCBwb2xsX3RhYmxlICopOworCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY29udHJvbHM7CisJaW50IG51bV9jb250cm9sczsKIH07CiAKICNkZWZpbmUgU09DQU1fU0VOU09SX0lOVkVSVF9QQ0xLCSgxIDw8IDApCkBAIC0xMDIsNiArMTA3LDEyIEBACiAJaW50IGkyY19hZGFwdGVyX2lkOwogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqYm9hcmRfaW5mbzsKIAljb25zdCBjaGFyICptb2R1bGVfbmFtZTsKKwkvKgorCSAqIEZvciBub24tSTJDIGRldmljZXMgcGxhdGZvcm0gcGxhdGZvcm0gaGFzIHRvIHByb3ZpZGUgbWV0aG9kcyB0bworCSAqIGFkZCBhIGRldmljZSB0byB0aGUgc3lzdGVtIGFuZCB0byByZW1vdmUKKwkgKi8KKwlpbnQgKCphZGRfZGV2aWNlKShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICosIHN0cnVjdCBkZXZpY2UgKik7CisJdm9pZCAoKmRlbF9kZXZpY2UpKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKik7CiAJLyogT3B0aW9uYWwgY2FsbGJhY2tzIHRvIHBvd2VyIG9uIG9yIG9mZiBhbmQgcmVzZXQgdGhlIHNlbnNvciAqLwogCWludCAoKnBvd2VyKShzdHJ1Y3QgZGV2aWNlICosIGludCk7CiAJaW50ICgqcmVzZXQpKHN0cnVjdCBkZXZpY2UgKik7CkBAIC0xMTUsMjcgKzEyNiw0NSBAQAogCXZvaWQgKCpmcmVlX2J1cykoc3RydWN0IHNvY19jYW1lcmFfbGluayAqKTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICp0b19zb2NfY2FtZXJhX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqdG9fc29jX2NhbWVyYV9kZXYoCisJY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UsIGRldik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqdG9fc29jX2NhbWVyYV9ob3N0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqdG9fc29jX2NhbWVyYV9ob3N0KAorCWNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNvY19jYW1lcmFfaG9zdCwgdjRsMl9kZXYpOwogfQogCi1leHRlcm4gaW50IHNvY19jYW1lcmFfaG9zdF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kpOwotZXh0ZXJuIHZvaWQgc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpKTsKLWV4dGVybiBpbnQgc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOwotZXh0ZXJuIHZvaWQgc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKnRvX3NvY19jYW1lcmFfbGluaygKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlyZXR1cm4gaWNkLT5kZXYucGxhdGZvcm1fZGF0YTsKK30KIAotZXh0ZXJuIGludCBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKLWV4dGVybiB2b2lkIHNvY19jYW1lcmFfdmlkZW9fc3RvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnRvX3NvY19jYW1lcmFfY29udHJvbCgKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZpY2QtPmRldik7Cit9CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqc29jX2NhbWVyYV9mb3JtYXRfYnlfZm91cmNjKAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNvY19jYW1lcmFfdG9fc3ViZGV2KAorCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBkZXZpY2UgKmNvbnRyb2wgPSB0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKTsKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGNvbnRyb2wpOworfQorCitpbnQgc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSk7Cit2b2lkIHNvY19jYW1lcmFfaG9zdF91bnJlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSk7CisKK2NvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpzb2NfY2FtZXJhX2Zvcm1hdF9ieV9mb3VyY2MoCiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGludCBmb3VyY2MpOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoCitjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1bnNpZ25lZCBpbnQgZm91cmNjKTsKIAogc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgewpAQCAtMTYzLDMwICsxOTIsMTEgQEAKIH07CiAKIHN0cnVjdCBzb2NfY2FtZXJhX29wcyB7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JaW50ICgqcHJvYmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLQl2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci0JaW50ICgqaW5pdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKnJlbGVhc2UpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLQlpbnQgKCpzdGFydF9jYXB0dXJlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci0JaW50ICgqc3RvcF9jYXB0dXJlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7Ci0JaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9yZWN0ICopOwotCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKik7Ci0JaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAl1bnNpZ25lZCBsb25nICgqcXVlcnlfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc2V0X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwotCWludCAoKmdldF9jaGlwX2lkKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwKLQkJCSAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICopOwotCWludCAoKnNldF9zdGQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCB2NGwyX3N0ZF9pZCAqKTsKIAlpbnQgKCplbnVtX2lucHV0KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfaW5wdXQgKik7Ci0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCWludCAoKmdldF9yZWdpc3Rlcikoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqKTsKLQlpbnQgKCpzZXRfcmVnaXN0ZXIpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKik7Ci0jZW5kaWYKLQlpbnQgKCpnZXRfY29udHJvbCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7Ci0JaW50ICgqc2V0X2NvbnRyb2wpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwogCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY29udHJvbHM7CiAJaW50IG51bV9jb250cm9sczsKIH07CkBAIC0yNjgsNiArMjc4LDIxIEBACiAJCWNvbW1vbl9mbGFnczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNvY19jYW1lcmFfbGltaXRfc2lkZSh1bnNpZ25lZCBpbnQgKnN0YXJ0LAorCQl1bnNpZ25lZCBpbnQgKmxlbmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0X21pbiwKKwkJdW5zaWduZWQgaW50IGxlbmd0aF9taW4sIHVuc2lnbmVkIGludCBsZW5ndGhfbWF4KQoreworCWlmICgqbGVuZ3RoIDwgbGVuZ3RoX21pbikKKwkJKmxlbmd0aCA9IGxlbmd0aF9taW47CisJZWxzZSBpZiAoKmxlbmd0aCA+IGxlbmd0aF9tYXgpCisJCSpsZW5ndGggPSBsZW5ndGhfbWF4OworCisJaWYgKCpzdGFydCA8IHN0YXJ0X21pbikKKwkJKnN0YXJ0ID0gc3RhcnRfbWluOworCWVsc2UgaWYgKCpzdGFydCA+IHN0YXJ0X21pbiArIGxlbmd0aF9tYXggLSAqbGVuZ3RoKQorCQkqc3RhcnQgPSBzdGFydF9taW4gKyBsZW5ndGhfbWF4IC0gKmxlbmd0aDsKK30KKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3Moc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAogCQkJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKaW5kZXggMWQwOTJiNC4uYmI3MDQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKQEAgLTEyLDE1ICsxMiwxOCBAQAogI2RlZmluZSBfX1NPQ19DQU1FUkFfSF9fCiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisKK3N0cnVjdCBkZXZpY2U7CiAKIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gewotCWludCBpZmFjZTsKLQljaGFyICpmb3JtYXRfbmFtZTsKKwljb25zdCBjaGFyICpmb3JtYXRfbmFtZTsKIAl1bnNpZ25lZCBsb25nIGZvcm1hdF9kZXB0aDsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZvcm1hdDsKIAl1bnNpZ25lZCBsb25nIGJ1c19wYXJhbTsKLQl2b2lkICgqcG93ZXIpKGludCk7CisJc3RydWN0IGRldmljZSAqZGV2OwogCWludCAoKnNldF9jYXB0dXJlKShzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICppbmZvLCBpbnQgZW5hYmxlKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGxpbms7CiB9OwogCiAjZW5kaWYgLyogX19TT0NfQ0FNRVJBX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCmluZGV4IGMxNDZmMmYuLjRkNWI1M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTEyNyw2ICsxMjcsOCBAQAogI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1LNQkJNzkKICNkZWZpbmUgVFVORVJfUEhJTElQU19GUTEyMTZMTUVfTUszCTgwCS8qIEFjdGl2ZSBsb29wdGhyb3VnaCwgbm8gRk0gKi8KICNkZWZpbmUgVFVORVJfUEFSVFNOSUNfUFRJXzVORjA1CTgxCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfQ1UxMjE2TCAgICAgICAgICAgODIKKyNkZWZpbmUgVFVORVJfTlhQX1REQTE4MjcxCQk4MwogCiAvKiB0diBjYXJkIHNwZWNpZmljICovCiAjZGVmaW5lIFREQTk4ODdfUFJFU0VOVCAJCSgxPDwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dnA1MTR4LmggYi9pbmNsdWRlL21lZGlhL3R2cDUxNHguaAppbmRleCA1ZTdlZTk2Li43NDM4N2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R2cDUxNHguaAorKysgYi9pbmNsdWRlL21lZGlhL3R2cDUxNHguaApAQCAtMTA0LDEwICsxMDQsNiBAQAogICogQCB2c19wb2xhcml0eTogVlNZTkMgUG9sYXJpdHkgY29uZmlndXJhdGlvbiBmb3IgY3VycmVudCBpbnRlcmZhY2UuCiAgKi8KIHN0cnVjdCB0dnA1MTR4X3BsYXRmb3JtX2RhdGEgewotCWNoYXIgKm1hc3RlcjsKLQlpbnQgKCpwb3dlcl9zZXQpIChlbnVtIHY0bDJfcG93ZXIgb24pOwotCWludCAoKmlmcGFybSkgKHN0cnVjdCB2NGwyX2lmcGFybSAqcCk7Ci0JaW50ICgqcHJpdl9kYXRhX3NldCkgKHZvaWQgKik7CiAJLyogSW50ZXJmYWNlIGNvbnRyb2wgcGFyYW1zICovCiAJYm9vbCBjbGtfcG9sYXJpdHk7CiAJYm9vbCBoc19wb2xhcml0eTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCmluZGV4IDk0ZTkwOGMuLmNmMTY2ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaApAQCAtMTM1LDYgKzEzNSw5IEBACiAJLyogbW9kdWxlIGFkdjcxNzU6IGp1c3QgaWRlbnQgNzE3NSAqLwogCVY0TDJfSURFTlRfQURWNzE3NSA9IDcxNzUsCiAKKwkvKiBtb2R1bGUgYWR2NzE4MDoganVzdCBpZGVudCA3MTgwICovCisJVjRMMl9JREVOVF9BRFY3MTgwID0gNzE4MCwKKwogCS8qIG1vZHVsZSBzYWE3MTg1OiBqdXN0IGlkZW50IDcxODUgKi8KIAlWNEwyX0lERU5UX1NBQTcxODUgPSA3MTg1LAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKaW5kZXggMzNhMTg0Mi4uMWMyNWIxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaApAQCAtMTM5LDMwICsxMzksMjQgQEAKIC8qIExvYWQgYW4gaTJjIG1vZHVsZSBhbmQgcmV0dXJuIGFuIGluaXRpYWxpemVkIHY0bDJfc3ViZGV2IHN0cnVjdC4KICAgIE9ubHkgY2FsbCByZXF1ZXN0X21vZHVsZSBpZiBtb2R1bGVfbmFtZSAhPSBOVUxMLgogICAgVGhlIGNsaWVudF90eXBlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBjaGlwIHRoYXQncyBvbiB0aGUgYWRhcHRlci4gKi8KLXN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAotCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCBjaGFyICpjbGllbnRfdHlwZSwgdTggYWRkcik7Ci0vKiBQcm9iZSBhbmQgbG9hZCBhbiBpMmMgbW9kdWxlIGFuZCByZXR1cm4gYW4gaW5pdGlhbGl6ZWQgdjRsMl9zdWJkZXYgc3RydWN0LgotICAgT25seSBjYWxsIHJlcXVlc3RfbW9kdWxlIGlmIG1vZHVsZV9uYW1lICE9IE5VTEwuCi0gICBUaGUgY2xpZW50X3R5cGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGNoaXAgdGhhdCdzIG9uIHRoZSBhZGFwdGVyLiAqLwotc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAotCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCBjaGFyICpjbGllbnRfdHlwZSwKLQkJY29uc3QgdW5zaWduZWQgc2hvcnQgKmFkZHJzKTsKLS8qIExpa2UgdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYsIGV4Y2VwdCBwcm9iZSBmb3IgYSBzaW5nbGUgYWRkcmVzcy4gKi8KLXN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXZfYWRkcihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAotCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCBjaGFyICpjbGllbnRfdHlwZSwgdTggYWRkcik7Ci0KLS8qIExvYWQgYW4gaTJjIG1vZHVsZSBhbmQgcmV0dXJuIGFuIGluaXRpYWxpemVkIHY0bDJfc3ViZGV2IHN0cnVjdC4KLSAgIE9ubHkgY2FsbCByZXF1ZXN0X21vZHVsZSBpZiBtb2R1bGVfbmFtZSAhPSBOVUxMLgotICAgVGhlIGNsaWVudF90eXBlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBjaGlwIHRoYXQncyBvbiB0aGUgYWRhcHRlci4gKi8KIHN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3N1YmRldl9jZmcoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKIAkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAogCQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsCiAJCWludCBpcnEsIHZvaWQgKnBsYXRmb3JtX2RhdGEsCiAJCXU4IGFkZHIsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwcm9iZV9hZGRycyk7CiAKKy8qIExvYWQgYW4gaTJjIG1vZHVsZSBhbmQgcmV0dXJuIGFuIGluaXRpYWxpemVkIHY0bDJfc3ViZGV2IHN0cnVjdC4KKyAgIE9ubHkgY2FsbCByZXF1ZXN0X21vZHVsZSBpZiBtb2R1bGVfbmFtZSAhPSBOVUxMLgorICAgVGhlIGNsaWVudF90eXBlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBjaGlwIHRoYXQncyBvbiB0aGUgYWRhcHRlci4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCisJCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IGNoYXIgKmNsaWVudF90eXBlLAorCQl1OCBhZGRyLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHJvYmVfYWRkcnMpCit7CisJcmV0dXJuIHY0bDJfaTJjX25ld19zdWJkZXZfY2ZnKHY0bDJfZGV2LCBhZGFwdGVyLCBtb2R1bGVfbmFtZSwKKwkJCQljbGllbnRfdHlwZSwgMCwgTlVMTCwgYWRkciwgcHJvYmVfYWRkcnMpOworfQorCiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CiAKIHN0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IDIwNThkZDQuLjczYzk4NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTEwMCw4ICsxMDAsMTAgQEAKIAogICAgQWxzbyBub3RlIHRoYXQgdmRldi0+bWlub3IgaXMgc2V0IHRvIC0xIGlmIHRoZSByZWdpc3RyYXRpb24gZmFpbGVkLiAqLwogaW50IF9fbXVzdF9jaGVjayB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IHR5cGUsIGludCBucik7Ci1pbnQgX19tdXN0X2NoZWNrIHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LAotCQkJCQkJaW50IHR5cGUsIGludCBuciwgaW50IGluZGV4KTsKKworLyogU2FtZSBhcyB2aWRlb19yZWdpc3Rlcl9kZXZpY2UsIGJ1dCBubyB3YXJuaW5nIGlzIGlzc3VlZCBpZiB0aGUgZGVzaXJlZAorICAgZGV2aWNlIG5vZGUgbnVtYmVyIHdhcyBhbHJlYWR5IGluIHVzZS4gKi8KK2ludCBfX211c3RfY2hlY2sgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX25vX3dhcm4oc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IHR5cGUsIGludCBucik7CiAKIC8qIFVucmVnaXN0ZXIgdmlkZW8gZGV2aWNlcy4gV2lsbCBkbyBub3RoaW5nIGlmIHZkZXYgPT0gTlVMTCBvcgogICAgdmRldi0+bWlub3IgPCAwLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2NtLmggYi9pbmNsdWRlL3JkbWEvaWJfY20uaAppbmRleCA5Mzg4NTgzLi5jOGY5NGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfY20uaApAQCAtNDgyLDcgKzQ4Miw3IEBACiAgKiAgIG1lc3NhZ2UuCiAgKiBAY21faWQ6IENvbm5lY3Rpb24gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gbWVzc2FnZS4KICAqIEBzZXJ2aWNlX3RpbWVvdXQ6IFRoZSBsb3dlciA1LWJpdHMgc3BlY2lmeSB0aGUgbWF4aW11bSB0aW1lIHJlcXVpcmVkIGZvcgotICogICB0aGUgc2VuZGVyIHRvIHJlcGx5IHRvIHRvIHRoZSBjb25uZWN0aW9uIG1lc3NhZ2UuICBUaGUgdXBwZXIgMy1iaXRzCisgKiAgIHRoZSBzZW5kZXIgdG8gcmVwbHkgdG8gdGhlIGNvbm5lY3Rpb24gbWVzc2FnZS4gIFRoZSB1cHBlciAzLWJpdHMKICAqICAgc3BlY2lmeSBhZGRpdGlvbmFsIGNvbnRyb2wgZmxhZ3MuCiAgKiBAcHJpdmF0ZV9kYXRhOiBPcHRpb25hbCB1c2VyLWRlZmluZWQgcHJpdmF0ZSBkYXRhIHNlbnQgd2l0aCB0aGUKICAqICAgbWVzc2FnZSByZWNlaXB0IGFja25vd2xlZGdlbWVudC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mYy9mY19mYzIuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mYzIuaAppbmRleCBjZmY4YThjLi5mODc3NzdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmMvZmNfZmMyLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjL2ZjX2ZjMi5oCkBAIC05Miw4ICs5Miw3IEBACiAJX191OAlfZXNiX3Jlc3ZkWzRdOwogCV9fdTgJZXNiX3NlcnZpY2VfcGFyYW1zWzExMl07IC8qIFRCRCAqLwogCV9fdTgJZXNiX3NlcV9zdGF0dXNbOF07CS8qIHNlcXVlbmNlIHN0YXR1c2VzLCA4IGJ5dGVzIGVhY2ggKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7OwotCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKgogICogRGVmaW5lIGV4cGVjdGVkIHNpemUgZm9yIEFTU0VSVHMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmgKaW5kZXggMTQ5M2M1NC4uZWFmNDZiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMva21lbS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2ttZW0uaApAQCAtMjI1LDYgKzIyNSwxNjkgQEAKIAogCVRQX3ByaW50aygiY2FsbF9zaXRlPSVseCBwdHI9JXAiLCBfX2VudHJ5LT5jYWxsX3NpdGUsIF9fZW50cnktPnB0cikKICk7CisKK1RSQUNFX0VWRU5UKG1tX3BhZ2VfZnJlZV9kaXJlY3QsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKSwKKworCVRQX0FSR1MocGFnZSwgb3JkZXIpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCW9yZGVyCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wYWdlCQk9IHBhZ2U7CisJCV9fZW50cnktPm9yZGVyCQk9IG9yZGVyOworCSksCisKKwlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCIsCisJCQlfX2VudHJ5LT5wYWdlLAorCQkJcGFnZV90b19wZm4oX19lbnRyeS0+cGFnZSksCisJCQlfX2VudHJ5LT5vcmRlcikKKyk7CisKK1RSQUNFX0VWRU5UKG1tX3BhZ2V2ZWNfZnJlZSwKKworCVRQX1BST1RPKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgY29sZCksCisKKwlUUF9BUkdTKHBhZ2UsIGNvbGQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAlpbnQsCQljb2xkCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wYWdlCQk9IHBhZ2U7CisJCV9fZW50cnktPmNvbGQJCT0gY29sZDsKKwkpLAorCisJVFBfcHJpbnRrKCJwYWdlPSVwIHBmbj0lbHUgb3JkZXI9MCBjb2xkPSVkIiwKKwkJCV9fZW50cnktPnBhZ2UsCisJCQlwYWdlX3RvX3BmbihfX2VudHJ5LT5wYWdlKSwKKwkJCV9fZW50cnktPmNvbGQpCispOworCitUUkFDRV9FVkVOVChtbV9wYWdlX2FsbG9jLAorCisJVFBfUFJPVE8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKKwkJCWdmcF90IGdmcF9mbGFncywgaW50IG1pZ3JhdGV0eXBlKSwKKworCVRQX0FSR1MocGFnZSwgb3JkZXIsIGdmcF9mbGFncywgbWlncmF0ZXR5cGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCW9yZGVyCQkpCisJCV9fZmllbGQoCWdmcF90LAkJZ2ZwX2ZsYWdzCSkKKwkJX19maWVsZCgJaW50LAkJbWlncmF0ZXR5cGUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cGFnZQkJPSBwYWdlOworCQlfX2VudHJ5LT5vcmRlcgkJPSBvcmRlcjsKKwkJX19lbnRyeS0+Z2ZwX2ZsYWdzCT0gZ2ZwX2ZsYWdzOworCQlfX2VudHJ5LT5taWdyYXRldHlwZQk9IG1pZ3JhdGV0eXBlOworCSksCisKKwlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCBtaWdyYXRldHlwZT0lZCBnZnBfZmxhZ3M9JXMiLAorCQlfX2VudHJ5LT5wYWdlLAorCQlwYWdlX3RvX3BmbihfX2VudHJ5LT5wYWdlKSwKKwkJX19lbnRyeS0+b3JkZXIsCisJCV9fZW50cnktPm1pZ3JhdGV0eXBlLAorCQlzaG93X2dmcF9mbGFncyhfX2VudHJ5LT5nZnBfZmxhZ3MpKQorKTsKKworVFJBQ0VfRVZFTlQobW1fcGFnZV9hbGxvY196b25lX2xvY2tlZCwKKworCVRQX1BST1RPKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSksCisKKwlUUF9BUkdTKHBhZ2UsIG9yZGVyLCBtaWdyYXRldHlwZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlzdHJ1Y3QgcGFnZSAqLAlwYWdlCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJb3JkZXIJCSkKKwkJX19maWVsZCgJaW50LAkJbWlncmF0ZXR5cGUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cGFnZQkJPSBwYWdlOworCQlfX2VudHJ5LT5vcmRlcgkJPSBvcmRlcjsKKwkJX19lbnRyeS0+bWlncmF0ZXR5cGUJPSBtaWdyYXRldHlwZTsKKwkpLAorCisJVFBfcHJpbnRrKCJwYWdlPSVwIHBmbj0lbHUgb3JkZXI9JXUgbWlncmF0ZXR5cGU9JWQgcGVyY3B1X3JlZmlsbD0lZCIsCisJCV9fZW50cnktPnBhZ2UsCisJCXBhZ2VfdG9fcGZuKF9fZW50cnktPnBhZ2UpLAorCQlfX2VudHJ5LT5vcmRlciwKKwkJX19lbnRyeS0+bWlncmF0ZXR5cGUsCisJCV9fZW50cnktPm9yZGVyID09IDApCispOworCitUUkFDRV9FVkVOVChtbV9wYWdlX3BjcHVfZHJhaW4sCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpLAorCisJVFBfQVJHUyhwYWdlLCBvcmRlciwgbWlncmF0ZXR5cGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQorCQlfX2ZpZWxkKAlpbnQsCQlvcmRlcgkJKQorCQlfX2ZpZWxkKAlpbnQsCQltaWdyYXRldHlwZQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wYWdlCQk9IHBhZ2U7CisJCV9fZW50cnktPm9yZGVyCQk9IG9yZGVyOworCQlfX2VudHJ5LT5taWdyYXRldHlwZQk9IG1pZ3JhdGV0eXBlOworCSksCisKKwlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCBtaWdyYXRldHlwZT0lZCIsCisJCV9fZW50cnktPnBhZ2UsCisJCXBhZ2VfdG9fcGZuKF9fZW50cnktPnBhZ2UpLAorCQlfX2VudHJ5LT5vcmRlciwKKwkJX19lbnRyeS0+bWlncmF0ZXR5cGUpCispOworCitUUkFDRV9FVkVOVChtbV9wYWdlX2FsbG9jX2V4dGZyYWcsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCWludCBhbGxvY19vcmRlciwgaW50IGZhbGxiYWNrX29yZGVyLAorCQkJaW50IGFsbG9jX21pZ3JhdGV0eXBlLCBpbnQgZmFsbGJhY2tfbWlncmF0ZXR5cGUpLAorCisJVFBfQVJHUyhwYWdlLAorCQlhbGxvY19vcmRlciwgZmFsbGJhY2tfb3JkZXIsCisJCWFsbG9jX21pZ3JhdGV0eXBlLCBmYWxsYmFja19taWdyYXRldHlwZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlzdHJ1Y3QgcGFnZSAqLAlwYWdlCQkJKQorCQlfX2ZpZWxkKAlpbnQsCQlhbGxvY19vcmRlcgkJKQorCQlfX2ZpZWxkKAlpbnQsCQlmYWxsYmFja19vcmRlcgkJKQorCQlfX2ZpZWxkKAlpbnQsCQlhbGxvY19taWdyYXRldHlwZQkpCisJCV9fZmllbGQoCWludCwJCWZhbGxiYWNrX21pZ3JhdGV0eXBlCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnBhZ2UJCQk9IHBhZ2U7CisJCV9fZW50cnktPmFsbG9jX29yZGVyCQk9IGFsbG9jX29yZGVyOworCQlfX2VudHJ5LT5mYWxsYmFja19vcmRlcgkJPSBmYWxsYmFja19vcmRlcjsKKwkJX19lbnRyeS0+YWxsb2NfbWlncmF0ZXR5cGUJPSBhbGxvY19taWdyYXRldHlwZTsKKwkJX19lbnRyeS0+ZmFsbGJhY2tfbWlncmF0ZXR5cGUJPSBmYWxsYmFja19taWdyYXRldHlwZTsKKwkpLAorCisJVFBfcHJpbnRrKCJwYWdlPSVwIHBmbj0lbHUgYWxsb2Nfb3JkZXI9JWQgZmFsbGJhY2tfb3JkZXI9JWQgcGFnZWJsb2NrX29yZGVyPSVkIGFsbG9jX21pZ3JhdGV0eXBlPSVkIGZhbGxiYWNrX21pZ3JhdGV0eXBlPSVkIGZyYWdtZW50aW5nPSVkIGNoYW5nZV9vd25lcnNoaXA9JWQiLAorCQlfX2VudHJ5LT5wYWdlLAorCQlwYWdlX3RvX3BmbihfX2VudHJ5LT5wYWdlKSwKKwkJX19lbnRyeS0+YWxsb2Nfb3JkZXIsCisJCV9fZW50cnktPmZhbGxiYWNrX29yZGVyLAorCQlwYWdlYmxvY2tfb3JkZXIsCisJCV9fZW50cnktPmFsbG9jX21pZ3JhdGV0eXBlLAorCQlfX2VudHJ5LT5mYWxsYmFja19taWdyYXRldHlwZSwKKwkJX19lbnRyeS0+ZmFsbGJhY2tfb3JkZXIgPCBwYWdlYmxvY2tfb3JkZXIsCisJCV9fZW50cnktPmFsbG9jX21pZ3JhdGV0eXBlID09IF9fZW50cnktPmZhbGxiYWNrX21pZ3JhdGV0eXBlKQorKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9LTUVNX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9wb3dlci5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZkNTc5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaApAQCAtMCwwICsxLDgxIEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBwb3dlcgorCisjaWYgIWRlZmluZWQoX1RSQUNFX1BPV0VSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9QT1dFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI2lmbmRlZiBfVFJBQ0VfUE9XRVJfRU5VTV8KKyNkZWZpbmUgX1RSQUNFX1BPV0VSX0VOVU1fCitlbnVtIHsKKwlQT1dFUl9OT05FID0gMCwKKwlQT1dFUl9DU1RBVEUgPSAxLAorCVBPV0VSX1BTVEFURSA9IDIsCit9OworI2VuZGlmCisKKworCitUUkFDRV9FVkVOVChwb3dlcl9zdGFydCwKKworCVRQX1BST1RPKHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3RhdGUpLAorCisJVFBfQVJHUyh0eXBlLCBzdGF0ZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1NjQsCQl0eXBlCQkpCisJCV9fZmllbGQoCXU2NCwJCXN0YXRlCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT50eXBlID0gdHlwZTsKKwkJX19lbnRyeS0+c3RhdGUgPSBzdGF0ZTsKKwkpLAorCisJVFBfcHJpbnRrKCJ0eXBlPSVsdSBzdGF0ZT0lbHUiLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT50eXBlLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT5zdGF0ZSkKKyk7CisKK1RSQUNFX0VWRU5UKHBvd2VyX2VuZCwKKworCVRQX1BST1RPKGludCBkdW1teSksCisKKwlUUF9BUkdTKGR1bW15KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXU2NCwJCWR1bW15CQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kdW1teSA9IDB4ZmZmZjsKKwkpLAorCisJVFBfcHJpbnRrKCJkdW1teT0lbHUiLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT5kdW1teSkKKworKTsKKworCitUUkFDRV9FVkVOVChwb3dlcl9mcmVxdWVuY3ksCisKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN0YXRlKSwKKworCVRQX0FSR1ModHlwZSwgc3RhdGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdTY0LAkJdHlwZQkJKQorCQlfX2ZpZWxkKAl1NjQsCQlzdGF0ZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dHlwZSA9IHR5cGU7CisJCV9fZW50cnktPnN0YXRlID0gc3RhdGU7CisJKSwKKworCVRQX3ByaW50aygidHlwZT0lbHUgc3RhdGU9JWx1IiwgKHVuc2lnbmVkIGxvbmcpX19lbnRyeS0+dHlwZSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPnN0YXRlKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9QT1dFUl9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKaW5kZXggYjQ4ZjFhZC4uNDA2OWM0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCkBAIC0zODAsNiArMzgwLDM5IEBACiApOwogCiAvKgorICogVHJhY2Vwb2ludCBmb3IgYWNjb3VudGluZyBydW50aW1lICh0aW1lIHRoZSB0YXNrIGlzIGV4ZWN1dGluZworICogb24gYSBDUFUpLgorICovCitUUkFDRV9FVkVOVChzY2hlZF9zdGF0X3J1bnRpbWUsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IHJ1bnRpbWUsIHU2NCB2cnVudGltZSksCisKKwlUUF9BUkdTKHRzaywgcnVudGltZSwgdnJ1bnRpbWUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSggY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoIHBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoIHU2NCwJcnVudGltZQkJCSkKKwkJX19maWVsZCggdTY0LAl2cnVudGltZQkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCB0c2stPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gdHNrLT5waWQ7CisJCV9fZW50cnktPnJ1bnRpbWUJPSBydW50aW1lOworCQlfX2VudHJ5LT52cnVudGltZQk9IHZydW50aW1lOworCSkKKwlUUF9wZXJmX2Fzc2lnbigKKwkJX19wZXJmX2NvdW50KHJ1bnRpbWUpOworCSksCisKKwlUUF9wcmludGsoInRhc2s6ICVzOiVkIHJ1bnRpbWU6ICVMdSBbbnNdLCB2cnVudGltZTogJUx1IFtuc10iLAorCQkJX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5ydW50aW1lLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT52cnVudGltZSkKKyk7CisKKy8qCiAgKiBUcmFjZXBvaW50IGZvciBhY2NvdW50aW5nIHNsZWVwIHRpbWUgKHRpbWUgdGhlIHRhc2sgaXMgbm90IHJ1bm5hYmxlLAogICogaW5jbHVkaW5nIGlvd2FpdCwgc2VlIGJlbG93KS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0NGM0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKQEAgLTAsMCArMSwzNDIgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRpbWVyCisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfVElNRVJfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX1RJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworLyoqCisgKiB0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIGluaXRpYWxpemVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKKyAqLworVFJBQ0VfRVZFTlQodGltZXJfaW5pdCwKKworCVRQX1BST1RPKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciksCisKKwlUUF9BUkdTKHRpbWVyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoIHZvaWQgKiwJdGltZXIJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKKwkpLAorCisJVFBfcHJpbnRrKCJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiB0aW1lcl9zdGFydCAtIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBpcyBzdGFydGVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKKyAqIEBleHBpcmVzOgl0aGUgdGltZXJzIGV4cGlyeSB0aW1lCisgKi8KK1RSQUNFX0VWRU5UKHRpbWVyX3N0YXJ0LAorCisJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpLAorCisJVFBfQVJHUyh0aW1lciwgZXhwaXJlcyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCQkpCisJCV9fZmllbGQoIHZvaWQgKiwJZnVuY3Rpb24JKQorCQlfX2ZpZWxkKCB1bnNpZ25lZCBsb25nLAlleHBpcmVzCQkpCisJCV9fZmllbGQoIHVuc2lnbmVkIGxvbmcsCW5vdwkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJCT0gdGltZXI7CisJCV9fZW50cnktPmZ1bmN0aW9uCT0gdGltZXItPmZ1bmN0aW9uOworCQlfX2VudHJ5LT5leHBpcmVzCT0gZXhwaXJlczsKKwkJX19lbnRyeS0+bm93CQk9IGppZmZpZXM7CisJKSwKKworCVRQX3ByaW50aygidGltZXIgJXA6IGZ1bmMgJXBmLCBleHBpcmVzICVsdSwgdGltZW91dCAlbGQiLAorCQkgIF9fZW50cnktPnRpbWVyLCBfX2VudHJ5LT5mdW5jdGlvbiwgX19lbnRyeS0+ZXhwaXJlcywKKwkJICAobG9uZylfX2VudHJ5LT5leHBpcmVzIC0gX19lbnRyeS0+bm93KQorKTsKKworLyoqCisgKiB0aW1lcl9leHBpcmVfZW50cnkgLSBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0aW1lciBjYWxsYmFjaworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCB0aW1lcl9saXN0CisgKgorICogQWxsb3dzIHRvIGRldGVybWluZSB0aGUgdGltZXIgbGF0ZW5jeS4KKyAqLworVFJBQ0VfRVZFTlQodGltZXJfZXhwaXJlX2VudHJ5LAorCisJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKSwKKworCVRQX0FSR1ModGltZXIpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggdm9pZCAqLAl0aW1lcgkpCisJCV9fZmllbGQoIHVuc2lnbmVkIGxvbmcsCW5vdwkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT50aW1lcgkJPSB0aW1lcjsKKwkJX19lbnRyeS0+bm93CQk9IGppZmZpZXM7CisJKSwKKworCVRQX3ByaW50aygidGltZXIgJXA6IG5vdyAlbHUiLCBfX2VudHJ5LT50aW1lciwgX19lbnRyeS0+bm93KQorKTsKKworLyoqCisgKiB0aW1lcl9leHBpcmVfZXhpdCAtIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGltZXIgY2FsbGJhY2sgcmV0dXJucworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCB0aW1lcl9saXN0CisgKgorICogV2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHRpbWVyX2V4cGlyZV9lbnRyeSB0cmFjZXBvaW50IHdlIGNhbgorICogZGV0ZXJtaW5lIHRoZSBydW50aW1lIG9mIHRoZSB0aW1lciBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBOT1RFOiBEbyBOT1QgZGVyZWZlcm5jZSB0aW1lciBpbiBUUF9mYXN0X2Fzc2lnbi4gVGhlIHBvaW50ZXIgbWlnaHQKKyAqIGJlIGludmFsaWQuIFdlIHNvbGVseSB0cmFjayB0aGUgcG9pbnRlci4KKyAqLworVFJBQ0VfRVZFTlQodGltZXJfZXhwaXJlX2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHZvaWQgKiwJdGltZXIJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKKwkpLAorCisJVFBfcHJpbnRrKCJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiB0aW1lcl9jYW5jZWwgLSBjYWxsZWQgd2hlbiB0aGUgdGltZXIgaXMgY2FuY2VsZWQKKyAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgdGltZXJfbGlzdAorICovCitUUkFDRV9FVkVOVCh0aW1lcl9jYW5jZWwsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJKSwKKworCVRQX3ByaW50aygidGltZXIgJXAiLCBfX2VudHJ5LT50aW1lcikKKyk7CisKKy8qKgorICogaHJ0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIGhydGltZXIgaXMgaW5pdGlhbGl6ZWQKKyAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgaHJ0aW1lcgorICogQGNsb2NraWQ6CXRoZSBocnRpbWVycyBjbG9jaworICogQG1vZGU6CXRoZSBocnRpbWVycyBtb2RlCisgKi8KK1RSQUNFX0VWRU5UKGhydGltZXJfaW5pdCwKKworCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICp0aW1lciwgY2xvY2tpZF90IGNsb2NraWQsCisJCSBlbnVtIGhydGltZXJfbW9kZSBtb2RlKSwKKworCVRQX0FSR1ModGltZXIsIGNsb2NraWQsIG1vZGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggdm9pZCAqLAkJdGltZXIJCSkKKwkJX19maWVsZCggY2xvY2tpZF90LAkJY2xvY2tpZAkJKQorCQlfX2ZpZWxkKCBlbnVtIGhydGltZXJfbW9kZSwJbW9kZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJCT0gdGltZXI7CisJCV9fZW50cnktPmNsb2NraWQJPSBjbG9ja2lkOworCQlfX2VudHJ5LT5tb2RlCQk9IG1vZGU7CisJKSwKKworCVRQX3ByaW50aygiaHJ0aW1lciAlcCwgY2xvY2tpZCAlcywgbW9kZSAlcyIsIF9fZW50cnktPnRpbWVyLAorCQkgIF9fZW50cnktPmNsb2NraWQgPT0gQ0xPQ0tfUkVBTFRJTUUgPworCQkJIkNMT0NLX1JFQUxUSU1FIiA6ICJDTE9DS19NT05PVE9OSUMiLAorCQkgIF9fZW50cnktPm1vZGUgPT0gSFJUSU1FUl9NT0RFX0FCUyA/CisJCQkiSFJUSU1FUl9NT0RFX0FCUyIgOiAiSFJUSU1FUl9NT0RFX1JFTCIpCispOworCisvKioKKyAqIGhydGltZXJfc3RhcnQgLSBjYWxsZWQgd2hlbiB0aGUgaHJ0aW1lciBpcyBzdGFydGVkCisgKiBAdGltZXI6IHBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqLworVFJBQ0VfRVZFTlQoaHJ0aW1lcl9zdGFydCwKKworCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICp0aW1lciksCisKKwlUUF9BUkdTKHRpbWVyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoIHZvaWQgKiwJdGltZXIJCSkKKwkJX19maWVsZCggdm9pZCAqLAlmdW5jdGlvbgkpCisJCV9fZmllbGQoIHM2NCwJCWV4cGlyZXMJCSkKKwkJX19maWVsZCggczY0LAkJc29mdGV4cGlyZXMJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGltZXIJCT0gdGltZXI7CisJCV9fZW50cnktPmZ1bmN0aW9uCT0gdGltZXItPmZ1bmN0aW9uOworCQlfX2VudHJ5LT5leHBpcmVzCT0gaHJ0aW1lcl9nZXRfZXhwaXJlcyh0aW1lcikudHY2NDsKKwkJX19lbnRyeS0+c29mdGV4cGlyZXMJPSBocnRpbWVyX2dldF9zb2Z0ZXhwaXJlcyh0aW1lcikudHY2NDsKKwkpLAorCisJVFBfcHJpbnRrKCJocnRpbWVyICVwLCBmdW5jICVwZiwgZXhwaXJlcyAlbGx1LCBzb2Z0ZXhwaXJlcyAlbGx1IiwKKwkJICBfX2VudHJ5LT50aW1lciwgX19lbnRyeS0+ZnVuY3Rpb24sCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucygoa3RpbWVfdCkgeworCQkJCSAgLnR2NjQgPSBfX2VudHJ5LT5leHBpcmVzIH0pLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoKGt0aW1lX3QpIHsKKwkJCQkgIC50djY0ID0gX19lbnRyeS0+c29mdGV4cGlyZXMgfSkpCispOworCisvKioKKyAqIGh0aW1tZXJfZXhwaXJlX2VudHJ5IC0gY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgaHJ0aW1lciBjYWxsYmFjaworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCBocnRpbWVyCisgKiBAbm93Oglwb2ludGVyIHRvIHZhcmlhYmxlIHdoaWNoIGNvbnRhaW5zIGN1cnJlbnQgdGltZSBvZiB0aGUKKyAqCQl0aW1lcnMgYmFzZS4KKyAqCisgKiBBbGxvd3MgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lciBsYXRlbmN5LgorICovCitUUkFDRV9FVkVOVChocnRpbWVyX2V4cGlyZV9lbnRyeSwKKworCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICp0aW1lciwga3RpbWVfdCAqbm93KSwKKworCVRQX0FSR1ModGltZXIsIG5vdyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkJX19maWVsZCggczY0LAkJbm93CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJCV9fZW50cnktPm5vdwk9IG5vdy0+dHY2NDsKKwkpLAorCisJVFBfcHJpbnRrKCJocnRpbWVyICVwLCBub3cgJWxsdSIsIF9fZW50cnktPnRpbWVyLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoKGt0aW1lX3QpIHsKKwkJCQkgIC50djY0ID0gX19lbnRyeS0+bm93IH0pKQorICk7CisKKy8qKgorICogaHJ0aW1lcl9leHBpcmVfZXhpdCAtIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgaHJ0aW1lciBjYWxsYmFjayByZXR1cm5zCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqCisgKiBXaGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgaHJ0aW1lcl9leHBpcmVfZW50cnkgdHJhY2Vwb2ludCB3ZSBjYW4KKyAqIGRldGVybWluZSB0aGUgcnVudGltZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKi8KK1RSQUNFX0VWRU5UKGhydGltZXJfZXhwaXJlX2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJKSwKKworCVRQX3ByaW50aygiaHJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiBocnRpbWVyX2NhbmNlbCAtIGNhbGxlZCB3aGVuIHRoZSBocnRpbWVyIGlzIGNhbmNlbGVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqLworVFJBQ0VfRVZFTlQoaHJ0aW1lcl9jYW5jZWwsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpLAorCisJVFBfQVJHUyh0aW1lciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJKSwKKworCVRQX3ByaW50aygiaHJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorKTsKKworLyoqCisgKiBpdGltZXJfc3RhdGUgLSBjYWxsZWQgd2hlbiBpdGltZXIgaXMgc3RhcnRlZCBvciBjYW5jZWxlZAorICogQHdoaWNoOgluYW1lIG9mIHRoZSBpbnRlcnZhbCB0aW1lcgorICogQHZhbHVlOgl0aGUgaXRpbWVycyB2YWx1ZSwgaXRpbWVyIGlzIGNhbmNlbGVkIGlmIHZhbHVlLT5pdF92YWx1ZSBpcworICoJCXplcm8sIG90aGVyd2lzZSBpdCBpcyBzdGFydGVkCisgKiBAZXhwaXJlczoJdGhlIGl0aW1lcnMgZXhwaXJ5IHRpbWUKKyAqLworVFJBQ0VfRVZFTlQoaXRpbWVyX3N0YXRlLAorCisJVFBfUFJPVE8oaW50IHdoaWNoLCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpjb25zdCB2YWx1ZSwKKwkJIGNwdXRpbWVfdCBleHBpcmVzKSwKKworCVRQX0FSR1Mod2hpY2gsIHZhbHVlLCBleHBpcmVzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJCXdoaWNoCQkpCisJCV9fZmllbGQoCWNwdXRpbWVfdCwJZXhwaXJlcwkJKQorCQlfX2ZpZWxkKAlsb25nLAkJdmFsdWVfc2VjCSkKKwkJX19maWVsZCgJbG9uZywJCXZhbHVlX3VzZWMJKQorCQlfX2ZpZWxkKAlsb25nLAkJaW50ZXJ2YWxfc2VjCSkKKwkJX19maWVsZCgJbG9uZywJCWludGVydmFsX3VzZWMJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+d2hpY2gJCT0gd2hpY2g7CisJCV9fZW50cnktPmV4cGlyZXMJPSBleHBpcmVzOworCQlfX2VudHJ5LT52YWx1ZV9zZWMJPSB2YWx1ZS0+aXRfdmFsdWUudHZfc2VjOworCQlfX2VudHJ5LT52YWx1ZV91c2VjCT0gdmFsdWUtPml0X3ZhbHVlLnR2X3VzZWM7CisJCV9fZW50cnktPmludGVydmFsX3NlYwk9IHZhbHVlLT5pdF9pbnRlcnZhbC50dl9zZWM7CisJCV9fZW50cnktPmludGVydmFsX3VzZWMJPSB2YWx1ZS0+aXRfaW50ZXJ2YWwudHZfdXNlYzsKKwkpLAorCisJVFBfcHJpbnRrKCJ3aGljaCAlZCwgZXhwaXJlcyAlbHUsIGl0X3ZhbHVlICVsdS4lbHUsIGl0X2ludGVydmFsICVsdS4lbHUiLAorCQkgIF9fZW50cnktPndoaWNoLCBfX2VudHJ5LT5leHBpcmVzLAorCQkgIF9fZW50cnktPnZhbHVlX3NlYywgX19lbnRyeS0+dmFsdWVfdXNlYywKKwkJICBfX2VudHJ5LT5pbnRlcnZhbF9zZWMsIF9fZW50cnktPmludGVydmFsX3VzZWMpCispOworCisvKioKKyAqIGl0aW1lcl9leHBpcmUgLSBjYWxsZWQgd2hlbiBpdGltZXIgZXhwaXJlcworICogQHdoaWNoOgl0eXBlIG9mIHRoZSBpbnRlcnZhbCB0aW1lcgorICogQHBpZDoJcGlkIG9mIHRoZSBwcm9jZXNzIHdoaWNoIG93bnMgdGhlIHRpbWVyCisgKiBAbm93OgljdXJyZW50IHRpbWUsIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBsYXRlbmN5IG9mIGl0aW1lcgorICovCitUUkFDRV9FVkVOVChpdGltZXJfZXhwaXJlLAorCisJVFBfUFJPVE8oaW50IHdoaWNoLCBzdHJ1Y3QgcGlkICpwaWQsIGNwdXRpbWVfdCBub3cpLAorCisJVFBfQVJHUyh3aGljaCwgcGlkLCBub3cpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggaW50ICwJCXdoaWNoCSkKKwkJX19maWVsZCggcGlkX3QsCQlwaWQJKQorCQlfX2ZpZWxkKCBjcHV0aW1lX3QsCW5vdwkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT53aGljaAk9IHdoaWNoOworCQlfX2VudHJ5LT5ub3cJPSBub3c7CisJCV9fZW50cnktPnBpZAk9IHBpZF9ucihwaWQpOworCSksCisKKwkgICAgVFBfcHJpbnRrKCJ3aGljaCAlZCwgcGlkICVkLCBub3cgJWx1IiwgX19lbnRyeS0+d2hpY2gsCisJCSAgICAgIChpbnQpIF9fZW50cnktPnBpZCwgX19lbnRyeS0+bm93KQorKTsKKworI2VuZGlmIC8qICBfVFJBQ0VfVElNRVJfSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCmluZGV4IDcyYTNiNDMuLmNjMGQ5NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaApAQCAtMzc4LDI0ICszNzgsMTggQEAKICNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQogCiAvKgotICogR2VuZXJhdGUgdGhlIGZ1bmN0aW9ucyBuZWVkZWQgZm9yIHRyYWNlcG9pbnQgcGVyZl9jb3VudGVyIHN1cHBvcnQuCisgKiBHZW5lcmF0ZSB0aGUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgdHJhY2Vwb2ludCBwZXJmX2V2ZW50IHN1cHBvcnQuCiAgKgogICogTk9URTogVGhlIGluc2VydGlvbiBwcm9maWxlIGNhbGxiYWNrIChmdHJhY2VfcHJvZmlsZV88Y2FsbD4pIGlzIGRlZmluZWQgbGF0ZXIKICAqCi0gKiBzdGF0aWMgaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV88Y2FsbD4oc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKQorICogc3RhdGljIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGVfPGNhbGw+KHZvaWQpCiAgKiB7Ci0gKiAJaW50IHJldCA9IDA7Ci0gKgotICogCWlmICghYXRvbWljX2luY19yZXR1cm4oJmV2ZW50X2NhbGwtPnByb2ZpbGVfY291bnQpKQotICogCQlyZXQgPSByZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX3Byb2ZpbGVfPGNhbGw+KTsKLSAqCi0gKiAJcmV0dXJuIHJldDsKKyAqIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9wcm9maWxlXzxjYWxsPik7CiAgKiB9CiAgKgotICogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV88Y2FsbD4oc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKQorICogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV88Y2FsbD4odm9pZCkKICAqIHsKLSAqIAlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmV2ZW50LT5jYWxsLT5wcm9maWxlX2NvdW50KSkKLSAqIAkJdW5yZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX3Byb2ZpbGVfPGNhbGw+KTsKKyAqIAl1bnJlZ2lzdGVyX3RyYWNlXzxjYWxsPihmdHJhY2VfcHJvZmlsZV88Y2FsbD4pOwogICogfQogICoKICAqLwpAQCAtNDA1LDIwICszOTksMTQgQEAKIAkJCQkJCQkJCVwKIHN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90byk7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpIFwKK3N0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCh2b2lkKQkJCQlcCiB7CQkJCQkJCQkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKCFhdG9taWNfaW5jX3JldHVybigmZXZlbnRfY2FsbC0+cHJvZmlsZV9jb3VudCkpCQlcCi0JCXJldCA9IHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcHJvZmlsZV8jI2NhbGwpOwlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAorCXJldHVybiByZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpXAorc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI2NhbGwodm9pZCkJCQkJXAogewkJCQkJCQkJCVwKLQlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmV2ZW50X2NhbGwtPnByb2ZpbGVfY291bnQpKQlcCi0JCXVucmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9wcm9maWxlXyMjY2FsbCk7CQlcCisJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJCQlcCiB9CiAKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQpAQCAtNjU2LDE1ICs2NDQsMTYgQEAKICAqIHsKICAqCXN0cnVjdCBmdHJhY2VfZGF0YV9vZmZzZXRzXzxjYWxsPiBfX21heWJlX3VudXNlZCBfX2RhdGFfb2Zmc2V0czsKICAqCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCA9ICZldmVudF88Y2FsbD47Ci0gKglleHRlcm4gdm9pZCBwZXJmX3RwY291bnRlcl9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CisgKglleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCwgdTY0LCB1NjQsIHZvaWQgKiwgaW50KTsKICAqCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CiAgKgl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CiAgKgl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKyAqCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwogICoJaW50IF9fZW50cnlfc2l6ZTsKICAqCWludCBfX2RhdGFfc2l6ZTsKKyAqCWludCBfX2NwdQogICoJaW50IHBjOwogICoKLSAqCWxvY2FsX3NhdmVfZmxhZ3MoaXJxX2ZsYWdzKTsKICAqCXBjID0gcHJlZW1wdF9jb3VudCgpOwogICoKICAqCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXzxjYWxsPigmX19kYXRhX29mZnNldHMsIGFyZ3MpOwpAQCAtNjc1LDI1ICs2NjQsMzQgQEAKICAqCQkJICAgICBzaXplb2YodTY0KSk7CiAgKglfX2VudHJ5X3NpemUgLT0gc2l6ZW9mKHUzMik7CiAgKgotICoJZG8gewotICoJCWNoYXIgcmF3X2RhdGFbX19lbnRyeV9zaXplXTsgPC0gYWxsb2NhdGUgb3VyIHNhbXBsZSBpbiB0aGUgc3RhY2sKLSAqCQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKKyAqCS8vIFByb3RlY3QgdGhlIG5vbiBubWkgYnVmZmVyCisgKgkvLyBUaGlzIGFsc28gcHJvdGVjdHMgdGhlIHJjdSByZWFkIHNpZGUKKyAqCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisgKglfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKICAqCi0gKgkJemVybyBkZWFkIGJ5dGVzIGZyb20gYWxpZ25tZW50IHRvIGF2b2lkIHN0YWNrIGxlYWsgdG8gdXNlcnNwYWNlOgorICoJaWYgKGluX25taSgpKQorICoJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CisgKgllbHNlCisgKgkJcmF3X2RhdGEgPSByY3VfZGVyZWZlcmVuY2UodHJhY2VfcHJvZmlsZV9idWYpOwogICoKLSAqCQkqKHU2NCAqKSgmcmF3X2RhdGFbX19lbnRyeV9zaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7Ci0gKgkJZW50cnkgPSAoc3RydWN0IGZ0cmFjZV9yYXdfPGNhbGw+ICopcmF3X2RhdGE7Ci0gKgkJZW50ID0gJmVudHJ5LT5lbnQ7Ci0gKgkJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwotICoJCWVudC0+dHlwZSA9IGV2ZW50X2NhbGwtPmlkOworICoJaWYgKCFyYXdfZGF0YSkKKyAqCQlnb3RvIGVuZDsKICAqCi0gKgkJPHRzdHJ1Y3Q+IDwtIGRvIHNvbWUgam9icyB3aXRoIGR5bmFtaWMgYXJyYXlzCisgKglyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHJhd19kYXRhLCBfX2NwdSk7CiAgKgotICoJCTxhc3NpZ24+ICA8LSBhZmZlY3Qgb3VyIHZhbHVlcworICoJLy96ZXJvIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbm1lbnQgdG8gYXZvaWQgc3RhY2sgbGVhayB0byB1c2Vyc3BhY2U6CisgKgkqKHU2NCAqKSgmcmF3X2RhdGFbX19lbnRyeV9zaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisgKgllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4gKilyYXdfZGF0YTsKKyAqCWVudCA9ICZlbnRyeS0+ZW50OworICoJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOworICoJZW50LT50eXBlID0gZXZlbnRfY2FsbC0+aWQ7CiAgKgotICoJCXBlcmZfdHBjb3VudGVyX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAotICoJCQkgICAgIF9fZW50cnlfc2l6ZSk7ICA8LSBzdWJtaXQgdGhlbSB0byBwZXJmIGNvdW50ZXIKLSAqCX0gd2hpbGUgKDApOworICoJPHRzdHJ1Y3Q+IDwtIGRvIHNvbWUgam9icyB3aXRoIGR5bmFtaWMgYXJyYXlzCisgKgorICoJPGFzc2lnbj4gIDwtIGFmZmVjdCBvdXIgdmFsdWVzCisgKgorICoJcGVyZl90cF9ldmVudChldmVudF9jYWxsLT5pZCwgX19hZGRyLCBfX2NvdW50LCBlbnRyeSwKKyAqCQkgICAgIF9fZW50cnlfc2l6ZSk7ICA8LSBzdWJtaXQgdGhlbSB0byBwZXJmIGNvdW50ZXIKICAqCiAgKiB9CiAgKi8KQEAgLTcxMiwxNSArNzEwLDE3IEBACiB7CQkJCQkJCQkJXAogCXN0cnVjdCBmdHJhY2VfZGF0YV9vZmZzZXRzXyMjY2FsbCBfX21heWJlX3VudXNlZCBfX2RhdGFfb2Zmc2V0cztcCiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsID0gJmV2ZW50XyMjY2FsbDsJCVwKLQlleHRlcm4gdm9pZCBwZXJmX3RwY291bnRlcl9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CVwKKwlleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCwgdTY0LCB1NjQsIHZvaWQgKiwgaW50KTsJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKIAl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CQkJCQlcCisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCQlcCiAJaW50IF9fZW50cnlfc2l6ZTsJCQkJCQlcCiAJaW50IF9fZGF0YV9zaXplOwkJCQkJCVwKKwljaGFyICpyYXdfZGF0YTsJCQkJCQkJXAorCWludCBfX2NwdTsJCQkJCQkJXAogCWludCBwYzsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CQkJCQlcCiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7CQkJCQkJXAogCQkJCQkJCQkJXAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCkBAIC03MjgsMjMgKzcyOCwzOCBAQAogCQkJICAgICBzaXplb2YodTY0KSk7CQkJCVwKIAlfX2VudHJ5X3NpemUgLT0gc2l6ZW9mKHUzMik7CQkJCQlcCiAJCQkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQljaGFyIHJhd19kYXRhW19fZW50cnlfc2l6ZV07CQkJCVwKLQkJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCVwKKwlpZiAoV0FSTl9PTkNFKF9fZW50cnlfc2l6ZSA+IEZUUkFDRV9NQVhfUFJPRklMRV9TSVpFLAkJXAorCQkgICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQkJXAorCQlyZXR1cm47CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQkJKih1NjQgKikoJnJhd19kYXRhW19fZW50cnlfc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwlcCi0JCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKXJhd19kYXRhOwkJXAotCQllbnQgPSAmZW50cnktPmVudDsJCQkJCVwKLQkJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwlcCi0JCWVudC0+dHlwZSA9IGV2ZW50X2NhbGwtPmlkOwkJCQlcCisJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsJCQkJCVwKKwlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsJCQkJCVwKIAkJCQkJCQkJCVwKLQkJdHN0cnVjdAkJCQkJCQlcCisJaWYgKGluX25taSgpKQkJCQkJCQlcCisJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zik7CQlcCiAJCQkJCQkJCQlcCi0JCXsgYXNzaWduOyB9CQkJCQkJXAorCWlmICghcmF3X2RhdGEpCQkJCQkJCVwKKwkJZ290byBlbmQ7CQkJCQkJXAogCQkJCQkJCQkJXAotCQlwZXJmX3RwY291bnRlcl9ldmVudChldmVudF9jYWxsLT5pZCwgX19hZGRyLCBfX2NvdW50LCBlbnRyeSxcCisJcmF3X2RhdGEgPSBwZXJfY3B1X3B0cihyYXdfZGF0YSwgX19jcHUpOwkJCVwKKwkJCQkJCQkJCVwKKwkqKHU2NCAqKSgmcmF3X2RhdGFbX19lbnRyeV9zaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CQlcCisJZW50cnkgPSAoc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsICopcmF3X2RhdGE7CQkJXAorCWVudCA9ICZlbnRyeS0+ZW50OwkJCQkJCVwKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgaXJxX2ZsYWdzLCBwYyk7CQlcCisJZW50LT50eXBlID0gZXZlbnRfY2FsbC0+aWQ7CQkJCQlcCisJCQkJCQkJCQlcCisJdHN0cnVjdAkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXsgYXNzaWduOyB9CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlwZXJmX3RwX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAkJXAogCQkJICAgICBfX2VudHJ5X3NpemUpOwkJCQlcCi0JfSB3aGlsZSAoMCk7CQkJCQkJCVwKKwkJCQkJCQkJCVwKK2VuZDoJCQkJCQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsJCQkJCVwKIAkJCQkJCQkJCVwKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9kYTh4eC1mYi5oIGIvaW5jbHVkZS92aWRlby9kYTh4eC1mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTFhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL2RhOHh4LWZiLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgVEkgREE4WFggTENEIGNvbnRyb2xsZXIgcGxhdGZvcm0gZGF0YS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBEQThYWF9GQl9ICisjZGVmaW5lIERBOFhYX0ZCX0gKKworZW51bSBwYW5lbF90eXBlIHsKKwlRVkdBID0gMAorfTsKKworZW51bSBwYW5lbF9zaGFkZSB7CisJTU9OT0NIUk9NRSA9IDAsCisJQ09MT1JfQUNUSVZFLAorCUNPTE9SX1BBU1NJVkUsCit9OworCitlbnVtIHJhc3Rlcl9sb2FkX21vZGUgeworCUxPQURfREFUQSA9IDEsCisJTE9BRF9QQUxFVFRFLAorfTsKKworc3RydWN0IGRpc3BsYXlfcGFuZWwgeworCWVudW0gcGFuZWxfdHlwZSBwYW5lbF90eXBlOyAvKiBRVkdBICovCisJaW50IG1heF9icHA7CisJaW50IG1pbl9icHA7CisJZW51bSBwYW5lbF9zaGFkZSBwYW5lbF9zaGFkZTsKK307CisKK3N0cnVjdCBkYTh4eF9sY2RjX3BsYXRmb3JtX2RhdGEgeworCWNvbnN0IGNoYXIgbWFudV9uYW1lWzEwXTsKKwl2b2lkICpjb250cm9sbGVyX2RhdGE7CisJY29uc3QgY2hhciB0eXBlWzI1XTsKK307CisKK3N0cnVjdCBsY2RfY3RybF9jb25maWcgeworCWNvbnN0IHN0cnVjdCBkaXNwbGF5X3BhbmVsICpwX2Rpc3BfcGFuZWw7CisKKwkvKiBBQyBCaWFzIFBpbiBGcmVxdWVuY3kgKi8KKwlpbnQgYWNfYmlhczsKKworCS8qIEFDIEJpYXMgUGluIFRyYW5zaXRpb25zIHBlciBJbnRlcnJ1cHQgKi8KKwlpbnQgYWNfYmlhc19pbnRycHQ7CisKKwkvKiBETUEgYnVyc3Qgc2l6ZSAqLworCWludCBkbWFfYnVyc3Rfc3o7CisKKwkvKiBCaXRzIHBlciBwaXhlbCAqLworCWludCBicHA7CisKKwkvKiBGSUZPIERNQSBSZXF1ZXN0IERlbGF5ICovCisJaW50IGZkZDsKKworCS8qIFRGVCBBbHRlcm5hdGl2ZSBTaWduYWwgTWFwcGluZyAoT25seSBmb3IgYWN0aXZlKSAqLworCXVuc2lnbmVkIGNoYXIgdGZ0X2FsdF9tb2RlOworCisJLyogMTIgQml0IFBlciBQaXhlbCAoNS02LTUpIE1vZGUgKE9ubHkgZm9yIHBhc3NpdmUpICovCisJdW5zaWduZWQgY2hhciBzdG5fNTY1X21vZGU7CisKKwkvKiBNb25vIDgtYml0IE1vZGU6IDE9RDAtRDcgb3IgMD1EMC1EMyAqLworCXVuc2lnbmVkIGNoYXIgbW9ub184Yml0X21vZGU7CisKKwkvKiBJbnZlcnQgbGluZSBjbG9jayAqLworCXVuc2lnbmVkIGNoYXIgaW52ZXJ0X2xpbmVfY2xvY2s7CisKKwkvKiBJbnZlcnQgZnJhbWUgY2xvY2sgICovCisJdW5zaWduZWQgY2hhciBpbnZlcnRfZnJtX2Nsb2NrOworCisJLyogSG9yaXpvbnRhbCBhbmQgVmVydGljYWwgU3luYyBFZGdlOiAwPXJpc2luZyAxPWZhbGxpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIHN5bmNfZWRnZTsKKworCS8qIEhvcml6b250YWwgYW5kIFZlcnRpY2FsIFN5bmM6IENvbnRyb2w6IDA9aWdub3JlICovCisJdW5zaWduZWQgY2hhciBzeW5jX2N0cmw7CisKKwkvKiBSYXN0ZXIgRGF0YSBPcmRlciBTZWxlY3Q6IDE9TW9zdC10by1sZWFzdCAwPUxlYXN0LXRvLW1vc3QgKi8KKwl1bnNpZ25lZCBjaGFyIHJhc3Rlcl9vcmRlcjsKK307CisKK3N0cnVjdCBsY2Rfc3luY19hcmcgeworCWludCBiYWNrX3BvcmNoOworCWludCBmcm9udF9wb3JjaDsKKwlpbnQgcHVsc2Vfd2lkdGg7Cit9OworCisvKiBpb2N0bHMgKi8KKyNkZWZpbmUgRkJJT0dFVF9DT05UUkFTVAlfSU9SKCdGJywgMSwgaW50KQorI2RlZmluZSBGQklPUFVUX0NPTlRSQVNUCV9JT1coJ0YnLCAyLCBpbnQpCisjZGVmaW5lIEZCSUdFVF9CUklHSFRORVNTCV9JT1IoJ0YnLCAzLCBpbnQpCisjZGVmaW5lIEZCSVBVVF9CUklHSFRORVNTCV9JT1coJ0YnLCAzLCBpbnQpCisjZGVmaW5lIEZCSUdFVF9DT0xPUgkJX0lPUignRicsIDUsIGludCkKKyNkZWZpbmUgRkJJUFVUX0NPTE9SCQlfSU9XKCdGJywgNiwgaW50KQorI2RlZmluZSBGQklQVVRfSFNZTkMJCV9JT1coJ0YnLCA5LCBpbnQpCisjZGVmaW5lIEZCSVBVVF9WU1lOQwkJX0lPVygnRicsIDEwLCBpbnQpCisKKyNlbmRpZiAgLyogaWZuZGVmIERBOFhYX0ZCX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDhlOGI3NmQuLjBhYTY1NzkgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTMzMSw3ICszMzEsOCBAQAogCSAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgUkNVIGltcGxlbWVudGF0aW9uIHRoYXQgaXMKIAkgIGRlc2lnbmVkIGZvciB2ZXJ5IGxhcmdlIFNNUCBzeXN0ZW1zIHdpdGggaHVuZHJlZHMgb3IKIAkgIHRob3VzYW5kcyBvZiBDUFVzLCBidXQgZm9yIHdoaWNoIHJlYWwtdGltZSByZXNwb25zZQotCSAgaXMgYWxzbyByZXF1aXJlZC4KKwkgIGlzIGFsc28gcmVxdWlyZWQuICBJdCBhbHNvIHNjYWxlcyBkb3duIG5pY2VseSB0bworCSAgc21hbGxlciBzeXN0ZW1zLgogCiBlbmRjaG9pY2UKIApAQCAtOTE1LDMxICs5MTYsMzYgQEAKICAgICAgICAgICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmcKICAgICAgICAgICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay4KIAotY29uZmlnIEhBVkVfUEVSRl9DT1VOVEVSUworY29uZmlnIEhBVkVfUEVSRl9FVkVOVFMKIAlib29sCiAJaGVscAogCSAgU2VlIHRvb2xzL3BlcmYvZGVzaWduLnR4dCBmb3IgZGV0YWlscy4KIAotbWVudSAiUGVyZm9ybWFuY2UgQ291bnRlcnMiCittZW51ICJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycyIKIAotY29uZmlnIFBFUkZfQ09VTlRFUlMKLQlib29sICJLZXJuZWwgUGVyZm9ybWFuY2UgQ291bnRlcnMiCi0JZGVmYXVsdCB5IGlmIFBST0ZJTElORwotCWRlcGVuZHMgb24gSEFWRV9QRVJGX0NPVU5URVJTCitjb25maWcgUEVSRl9FVkVOVFMKKwlib29sICJLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVycyIKKwlkZWZhdWx0IHkgaWYgKFBST0ZJTElORyB8fCBQRVJGX0NPVU5URVJTKQorCWRlcGVuZHMgb24gSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBBTk9OX0lOT0RFUwogCWhlbHAKLQkgIEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgcGVyZm9ybWFuY2UgY291bnRlciBoYXJkd2FyZS4KKwkgIEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdmFyaW91cyBwZXJmb3JtYW5jZSBldmVudHMgcHJvdmlkZWQKKwkgIGJ5IHNvZnR3YXJlIGFuZCBoYXJkd2FyZS4KIAotCSAgUGVyZm9ybWFuY2UgY291bnRlcnMgYXJlIHNwZWNpYWwgaGFyZHdhcmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQotCSAgb24gbW9zdCBtb2Rlcm4gQ1BVcy4gVGhlc2UgcmVnaXN0ZXJzIGNvdW50IHRoZSBudW1iZXIgb2YgY2VydGFpbgorCSAgU29mdHdhcmUgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgZWl0aGVyIGJ1aWxkLWluIG9yIHZpYSB0aGUKKwkgIHVzZSBvZiBnZW5lcmljIHRyYWNlcG9pbnRzLgorCisJICBNb3N0IG1vZGVybiBDUFVzIHN1cHBvcnQgcGVyZm9ybWFuY2UgZXZlbnRzIHZpYSBwZXJmb3JtYW5jZQorCSAgY291bnRlciByZWdpc3RlcnMuIFRoZXNlIHJlZ2lzdGVycyBjb3VudCB0aGUgbnVtYmVyIG9mIGNlcnRhaW4KIAkgIHR5cGVzIG9mIGh3IGV2ZW50czogc3VjaCBhcyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQsIGNhY2hlbWlzc2VzCiAJICBzdWZmZXJlZCwgb3IgYnJhbmNoZXMgbWlzLXByZWRpY3RlZCAtIHdpdGhvdXQgc2xvd2luZyBkb3duIHRoZQogCSAga2VybmVsIG9yIGFwcGxpY2F0aW9ucy4gVGhlc2UgcmVnaXN0ZXJzIGNhbiBhbHNvIHRyaWdnZXIgaW50ZXJydXB0cwogCSAgd2hlbiBhIHRocmVzaG9sZCBudW1iZXIgb2YgZXZlbnRzIGhhdmUgcGFzc2VkIC0gYW5kIGNhbiB0aHVzIGJlCiAJICB1c2VkIHRvIHByb2ZpbGUgdGhlIGNvZGUgdGhhdCBydW5zIG9uIHRoYXQgQ1BVLgogCi0JICBUaGUgTGludXggUGVyZm9ybWFuY2UgQ291bnRlciBzdWJzeXN0ZW0gcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb2YKLQkgIHRoZXNlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhIHN5c3RlbSBjYWxsLiBJdAorCSAgVGhlIExpbnV4IFBlcmZvcm1hbmNlIEV2ZW50IHN1YnN5c3RlbSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvZgorCSAgdGhlc2Ugc29mdHdhcmUgYW5kIGhhcmR3YXJlIGNldmVudCBhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhCisJICBzeXN0ZW0gY2FsbCBhbmQgdXNlZCBieSB0aGUgInBlcmYiIHV0aWxpdHkgaW4gdG9vbHMvcGVyZi8uIEl0CiAJICBwcm92aWRlcyBwZXIgdGFzayBhbmQgcGVyIENQVSBjb3VudGVycywgYW5kIGl0IHByb3ZpZGVzIGV2ZW50CiAJICBjYXBhYmlsaXRpZXMgb24gdG9wIG9mIHRob3NlLgogCkBAIC05NDcsMTcgKzk1MywyOSBAQAogCiBjb25maWcgRVZFTlRfUFJPRklMRQogCWJvb2wgIlRyYWNlcG9pbnQgcHJvZmlsaW5nIHNvdXJjZXMiCi0JZGVwZW5kcyBvbiBQRVJGX0NPVU5URVJTICYmIEVWRU5UX1RSQUNJTkcKKwlkZXBlbmRzIG9uIFBFUkZfRVZFTlRTICYmIEVWRU5UX1RSQUNJTkcKIAlkZWZhdWx0IHkKIAloZWxwCi0JIEFsbG93IHRoZSB1c2Ugb2YgdHJhY2Vwb2ludHMgYXMgc29mdHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMuCisJIEFsbG93IHRoZSB1c2Ugb2YgdHJhY2Vwb2ludHMgYXMgc29mdHdhcmUgcGVyZm9ybWFuY2UgZXZlbnRzLgogCi0JIFdoZW4gdGhpcyBpcyBlbmFibGVkLCB5b3UgY2FuIGNyZWF0ZSBwZXJmIGNvdW50ZXJzIGJhc2VkIG9uCisJIFdoZW4gdGhpcyBpcyBlbmFibGVkLCB5b3UgY2FuIGNyZWF0ZSBwZXJmIGV2ZW50cyBiYXNlZCBvbgogCSB0cmFjZXBvaW50cyB1c2luZyBQRVJGX1RZUEVfVFJBQ0VQT0lOVCBhbmQgdGhlIHRyYWNlcG9pbnQgSUQKIAkgZm91bmQgaW4gZGVidWdmczovL3RyYWNpbmcvZXZlbnRzLyovKi9pZC4gKFRoZSAtZS8tLWV2ZW50cwogCSBvcHRpb24gdG8gdGhlIHBlcmYgdG9vbCBjYW4gcGFyc2UgYW5kIGludGVycHJldCBzeW1ib2xpYwogCSB0cmFjZXBvaW50cywgaW4gdGhlIHN1YnN5c3RlbTp0cmFjZXBvaW50X25hbWUgZm9ybWF0LikKIAorY29uZmlnIFBFUkZfQ09VTlRFUlMKKwlib29sICJLZXJuZWwgcGVyZm9ybWFuY2UgY291bnRlcnMgKG9sZCBjb25maWcgb3B0aW9uKSIKKwlkZXBlbmRzIG9uIEhBVkVfUEVSRl9FVkVOVFMKKwloZWxwCisJICBUaGlzIGNvbmZpZyBoYXMgYmVlbiBvYnNvbGV0ZWQgYnkgdGhlIFBFUkZfRVZFTlRTCisJICBjb25maWcgb3B0aW9uIC0gcGxlYXNlIHNlZSB0aGF0IG9uZSBmb3IgZGV0YWlscy4KKworCSAgSXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUga2VybmVsIHdoZXRoZXIgeW91IGVuYWJsZQorCSAgaXQgb3Igbm90LCBpdCBpcyBhIGNvbXBhdGliaWxpdHkgcGxhY2Vob2xkZXIuCisKKwkgIFNheSBOIGlmIHVuc3VyZS4KKwogZW5kbWVudQogCiBjb25maWcgVk1fRVZFTlRfQ09VTlRFUlMKQEAgLTEwNTQsMTMgKzEwNzIsNiBAQAogY29uZmlnIFRSQUNFUE9JTlRTCiAJYm9vbAogCi1jb25maWcgTUFSS0VSUwotCWJvb2wgIkFjdGl2YXRlIG1hcmtlcnMiCi0Jc2VsZWN0IFRSQUNFUE9JTlRTCi0JaGVscAotCSAgUGxhY2UgYW4gZW1wdHkgZnVuY3Rpb24gY2FsbCBhdCBlYWNoIG1hcmtlciBzaXRlLiBDYW4gYmUKLQkgIGR5bmFtaWNhbGx5IGNoYW5nZWQgZm9yIGEgcHJvYmUgZnVuY3Rpb24uCi0KIHNvdXJjZSAiYXJjaC9LY29uZmlnIgogCiBjb25maWcgU0xPV19XT1JLCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDM0OTcxYmUuLjYxMDcyMjMgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgogI2luY2x1ZGUgPHRyYWNlL2Jvb3QuaD4KIApAQCAtNjY4LDEyICs2NjksMTIgQEAKICNlbmRpZgogCXRocmVhZF9pbmZvX2NhY2hlX2luaXQoKTsKIAljcmVkX2luaXQoKTsKLQlmb3JrX2luaXQobnVtX3BoeXNwYWdlcyk7CisJZm9ya19pbml0KHRvdGFscmFtX3BhZ2VzKTsKIAlwcm9jX2NhY2hlc19pbml0KCk7CiAJYnVmZmVyX2luaXQoKTsKIAlrZXlfaW5pdCgpOwogCXNlY3VyaXR5X2luaXQoKTsKLQl2ZnNfY2FjaGVzX2luaXQobnVtX3BoeXNwYWdlcyk7CisJdmZzX2NhY2hlc19pbml0KHRvdGFscmFtX3BhZ2VzKTsKIAlyYWRpeF90cmVlX2luaXQoKTsKIAlzaWduYWxzX2luaXQoKTsKIAkvKiByb290ZnMgcG9wdWxhdGluZyBtaWdodCBuZWVkIHBhZ2Utd3JpdGViYWNrICovCkBAIC02ODksNiArNjkwLDcgQEAKIAljaGVja19idWdzKCk7CiAKIAlhY3BpX2Vhcmx5X2luaXQoKTsgLyogYmVmb3JlIExBUElDIGFuZCBTTVAgaW5pdCAqLworCXNmaV9pbml0X2xhdGUoKTsKIAogCWZ0cmFjZV9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBjNWU2OGFkLi5lZTlkNjk3IDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtcXVldWVfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtcXVldWVfZmlsZV9vcGVyYXRpb25zOwotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1xdWV1ZV9zdXBlcl9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbXF1ZXVlX3N1cGVyX29wczsKIHN0YXRpYyB2b2lkIHJlbW92ZV9ub3RpZmljYXRpb24oc3RydWN0IG1xdWV1ZV9pbm9kZV9pbmZvICppbmZvKTsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcXVldWVfaW5vZGVfY2FjaGVwOwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAkucmVhZCA9IG1xdWV1ZV9yZWFkX2ZpbGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbXF1ZXVlX3N1cGVyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtcXVldWVfc3VwZXJfb3BzID0gewogCS5hbGxvY19pbm9kZSA9IG1xdWV1ZV9hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZSA9IG1xdWV1ZV9kZXN0cm95X2lub2RlLAogCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLApkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDMwMTYyYTUuLjllYjE0ODggMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCQlpZiAoc2htZmxnICYgU0hNX05PUkVTRVJWRSkKIAkJCWFjY3RmbGFnID0gVk1fTk9SRVNFUlZFOwogCQlmaWxlID0gaHVnZXRsYl9maWxlX3NldHVwKG5hbWUsIHNpemUsIGFjY3RmbGFnLAotCQkJCQkJCSZzaHAtPm1sb2NrX3VzZXIpOworCQkJCQkmc2hwLT5tbG9ja191c2VyLCBIVUdFVExCX1NITUZTX0lOT0RFKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBEbyBub3QgYWxsb3cgbm8gYWNjb3VudGluZyBmb3IgT1ZFUkNPTU1JVF9ORVZFUiwgZXZlbgpkaWZmIC0tZ2l0IGEvaXBjL3V0aWwuYyBiL2lwYy91dGlsLmMKaW5kZXggYjhlNGJhOS4uNzljZTg0ZSAxMDA2NDQKLS0tIGEvaXBjL3V0aWwuYworKysgYi9pcGMvdXRpbC5jCkBAIC05NDIsNyArOTQyLDcgQEAKIAlyZXR1cm4gaWZhY2UtPnNob3cocywgaXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN5c3ZpcGNfcHJvY19zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN5c3ZpcGNfcHJvY19zZXFvcHMgPSB7CiAJLnN0YXJ0ID0gc3lzdmlwY19wcm9jX3N0YXJ0LAogCS5zdG9wICA9IHN5c3ZpcGNfcHJvY19zdG9wLAogCS5uZXh0ICA9IHN5c3ZpcGNfcHJvY19uZXh0LApkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDNkOWM3ZTIuLjE4N2M4OWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTg3LDcgKzg3LDYgQEAKIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHV0c25hbWVfc3lzY3RsLm8KIG9iai0kKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpICs9IGRlbGF5YWNjdC5vCiBvYmotJChDT05GSUdfVEFTS1NUQVRTKSArPSB0YXNrc3RhdHMubyB0c2FjY3Qubwotb2JqLSQoQ09ORklHX01BUktFUlMpICs9IG1hcmtlci5vCiBvYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IHRyYWNlcG9pbnQubwogb2JqLSQoQ09ORklHX0xBVEVOQ1lUT1ApICs9IGxhdGVuY3l0b3Aubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikgKz0gdHJhY2UvCkBAIC05Niw3ICs5NSw3IEBACiBvYmotJChDT05GSUdfUklOR19CVUZGRVIpICs9IHRyYWNlLwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc2NoZWRfY3B1cHJpLm8KIG9iai0kKENPTkZJR19TTE9XX1dPUkspICs9IHNsb3ctd29yay5vCi1vYmotJChDT05GSUdfUEVSRl9DT1VOVEVSUykgKz0gcGVyZl9jb3VudGVyLm8KK29iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCiAKIGlmbmVxICgkKENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCiAjIEFjY29yZGluZyB0byBBbGFuIE1vZHJhIDxhbGFuQGxpbnV4Y2FyZS5jb20uYXU+LCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBjN2VjZThmLi5jZDgzZDk5IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC01OTYsNyArNTk2LDcgQEAKIHN0YXRpYyBpbnQgY2dyb3VwX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKIHN0YXRpYyBpbnQgY2dyb3VwX3JtZGlyKHN0cnVjdCBpbm9kZSAqdW51c2VkX2Rpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIHN0YXRpYyBpbnQgY2dyb3VwX3BvcHVsYXRlX2RpcihzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2dyb3VwX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBzdGF0c19vcGVyYXRpb25zOwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gY2dyb3VwX2JhY2tpbmdfZGV2X2luZm8gPSB7CkBAIC05NjEsNyArOTYxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2dyb3VwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjZ3JvdXBfb3BzID0gewogCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlID0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCiAJLnNob3dfb3B0aW9ucyA9IGNncm91cF9zaG93X29wdGlvbnMsCkBAIC0xNzExLDcgKzE3MTEsNyBAQAogCS5yZWxlYXNlID0gY2dyb3VwX2ZpbGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2dyb3VwX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewogCS5sb29rdXAgPSBzaW1wbGVfbG9va3VwLAogCS5ta2RpciA9IGNncm91cF9ta2RpciwKIAkucm1kaXIgPSBjZ3JvdXBfcm1kaXIsCkBAIC0yMzE0LDcgKzIzMTQsNyBAQAogCXJldHVybiBzZXFfcHJpbnRmKHMsICIlZFxuIiwgKihpbnQgKil2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjZ3JvdXBfdGFza3Nfc2VxX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNncm91cF90YXNrc19zZXFfb3BlcmF0aW9ucyA9IHsKIAkuc3RhcnQgPSBjZ3JvdXBfdGFza3Nfc3RhcnQsCiAJLnN0b3AgPSBjZ3JvdXBfdGFza3Nfc3RvcCwKIAkubmV4dCA9IGNncm91cF90YXNrc19uZXh0LApkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggYWU1ZDg2Ni4uNjBkNmZkYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTE1NCw4ICsxNTQsOCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHRhc2tfc3RydWN0LCByY3UpOwogCi0jaWZkZWYgQ09ORklHX1BFUkZfQ09VTlRFUlMKLQlXQVJOX09OX09OQ0UodHNrLT5wZXJmX2NvdW50ZXJfY3R4cCk7CisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJV0FSTl9PTl9PTkNFKHRzay0+cGVyZl9ldmVudF9jdHhwKTsKICNlbmRpZgogCXRyYWNlX3NjaGVkX3Byb2Nlc3NfZnJlZSh0c2spOwogCXB1dF90YXNrX3N0cnVjdCh0c2spOwpAQCAtMzU5LDggKzM1OSwxMCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAotCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKQorCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKSB7CiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9TSUQsIHBpZCk7CisJCXByb2Nfc2lkX2Nvbm5lY3RvcihjdXJyKTsKKwl9CiAKIAlpZiAodGFza19wZ3JwKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1BHSUQsIHBpZCk7CkBAIC05NDUsNiArOTQ3LDggQEAKIAlpZiAoZ3JvdXBfZGVhZCkgewogCQlocnRpbWVyX2NhbmNlbCgmdHNrLT5zaWduYWwtPnJlYWxfdGltZXIpOwogCQlleGl0X2l0aW1lcnModHNrLT5zaWduYWwpOworCQlpZiAodHNrLT5tbSkKKwkJCXNldG1heF9tbV9oaXdhdGVyX3JzcygmdHNrLT5zaWduYWwtPm1heHJzcywgdHNrLT5tbSk7CiAJfQogCWFjY3RfY29sbGVjdChjb2RlLCBncm91cF9kZWFkKTsKIAlpZiAoZ3JvdXBfZGVhZCkKQEAgLTk4MSw3ICs5ODUsNyBAQAogCSAqIEZsdXNoIGluaGVyaXRlZCBjb3VudGVycyB0byB0aGUgcGFyZW50IC0gYmVmb3JlIHRoZSBwYXJlbnQKIAkgKiBnZXRzIHdva2VuIHVwIGJ5IGNoaWxkLWV4aXQgbm90aWZpY2F0aW9ucy4KIAkgKi8KLQlwZXJmX2NvdW50ZXJfZXhpdF90YXNrKHRzayk7CisJcGVyZl9ldmVudF9leGl0X3Rhc2sodHNrKTsKIAogCWV4aXRfbm90aWZ5KHRzaywgZ3JvdXBfZGVhZCk7CiAjaWZkZWYgQ09ORklHX05VTUEKQEAgLTEyMDgsNiArMTIxMiw3IEBACiAJaWYgKGxpa2VseSghdHJhY2VkKSAmJiBsaWtlbHkoIXRhc2tfZGV0YWNoZWQocCkpKSB7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpwc2lnOwogCQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCQl1bnNpZ25lZCBsb25nIG1heHJzczsKIAogCQkvKgogCQkgKiBUaGUgcmVzb3VyY2UgY291bnRlcnMgZm9yIHRoZSBncm91cCBsZWFkZXIgYXJlIGluIGl0cwpAQCAtMTI1Niw2ICsxMjYxLDkgQEAKIAkJcHNpZy0+Y291YmxvY2sgKz0KIAkJCXRhc2tfaW9fZ2V0X291YmxvY2socCkgKwogCQkJc2lnLT5vdWJsb2NrICsgc2lnLT5jb3VibG9jazsKKwkJbWF4cnNzID0gbWF4KHNpZy0+bWF4cnNzLCBzaWctPmNtYXhyc3MpOworCQlpZiAocHNpZy0+Y21heHJzcyA8IG1heHJzcykKKwkJCXBzaWctPmNtYXhyc3MgPSBtYXhyc3M7CiAJCXRhc2tfaW9fYWNjb3VudGluZ19hZGQoJnBzaWctPmlvYWMsICZwLT5pb2FjKTsKIAkJdGFza19pb19hY2NvdW50aW5nX2FkZCgmcHNpZy0+aW9hYywgJnNpZy0+aW9hYyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmcC0+cmVhbF9wYXJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggYmZlZTkzMS4uNTFhZDBiMCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9rc20uaD4KICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CkBAIC02MSw3ICs2Miw4IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CkBAIC0xMzYsOSArMTM4LDE3IEBACiAvKiBTTEFCIGNhY2hlIGZvciBtbV9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLT5tbSkgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbW1fY2FjaGVwOwogCitzdGF0aWMgdm9pZCBhY2NvdW50X2tlcm5lbF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpLCBpbnQgYWNjb3VudCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZSh2aXJ0X3RvX3BhZ2UodGkpKTsKKworCW1vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfS0VSTkVMX1NUQUNLLCBhY2NvdW50KTsKK30KKwogdm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJcHJvcF9sb2NhbF9kZXN0cm95X3NpbmdsZSgmdHNrLT5kaXJ0aWVzKTsKKwlhY2NvdW50X2tlcm5lbF9zdGFjayh0c2stPnN0YWNrLCAtMSk7CiAJZnJlZV90aHJlYWRfaW5mbyh0c2stPnN0YWNrKTsKIAlydF9tdXRleF9kZWJ1Z190YXNrX2ZyZWUodHNrKTsKIAlmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHRzayk7CkBAIC0yNTMsNiArMjYzLDkgQEAKIAl0c2stPmJ0cmFjZV9zZXEgPSAwOwogI2VuZGlmCiAJdHNrLT5zcGxpY2VfcGlwZSA9IE5VTEw7CisKKwlhY2NvdW50X2tlcm5lbF9zdGFjayh0aSwgMSk7CisKIAlyZXR1cm4gdHNrOwogCiBvdXQ6CkBAIC0yODgsNiArMzAxLDkgQEAKIAlyYl9saW5rID0gJm1tLT5tbV9yYi5yYl9ub2RlOwogCXJiX3BhcmVudCA9IE5VTEw7CiAJcHByZXYgPSAmbW0tPm1tYXA7CisJcmV0dmFsID0ga3NtX2ZvcmsobW0sIG9sZG1tKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKIAogCWZvciAobXBudCA9IG9sZG1tLT5tbWFwOyBtcG50OyBtcG50ID0gbXBudC0+dm1fbmV4dCkgewogCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKQEAgLTQyNCw3ICs0NDAsOCBAQAogCWF0b21pY19zZXQoJm1tLT5tbV9jb3VudCwgMSk7CiAJaW5pdF9yd3NlbSgmbW0tPm1tYXBfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmbW0tPm1tbGlzdCk7Ci0JbW0tPmZsYWdzID0gKGN1cnJlbnQtPm1tKSA/IGN1cnJlbnQtPm1tLT5mbGFncyA6IGRlZmF1bHRfZHVtcF9maWx0ZXI7CisJbW0tPmZsYWdzID0gKGN1cnJlbnQtPm1tKSA/CisJCShjdXJyZW50LT5tbS0+ZmxhZ3MgJiBNTUZfSU5JVF9NQVNLKSA6IGRlZmF1bHRfZHVtcF9maWx0ZXI7CiAJbW0tPmNvcmVfc3RhdGUgPSBOVUxMOwogCW1tLT5ucl9wdGVzID0gMDsKIAlzZXRfbW1fY291bnRlcihtbSwgZmlsZV9yc3MsIDApOwpAQCAtNDg1LDYgKzUwMiw3IEBACiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbW0tPm1tX3VzZXJzKSkgewogCQlleGl0X2FpbyhtbSk7CisJCWtzbV9leGl0KG1tKTsKIAkJZXhpdF9tbWFwKG1tKTsKIAkJc2V0X21tX2V4ZV9maWxlKG1tLCBOVUxMKTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZtbS0+bW1saXN0KSkgewpAQCAtNzg4LDEwICs4MDYsMTAgQEAKIAl0aHJlYWRfZ3JvdXBfY3B1dGltZV9pbml0KHNpZyk7CiAKIAkvKiBFeHBpcmF0aW9uIHRpbWVzIGFuZCBpbmNyZW1lbnRzLiAqLwotCXNpZy0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXNpZy0+aXRfdmlydF9pbmNyID0gY3B1dGltZV96ZXJvOwotCXNpZy0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXNpZy0+aXRfcHJvZl9pbmNyID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRbQ1BVQ0xPQ0tfUFJPRl0uZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKKwlzaWctPml0W0NQVUNMT0NLX1BST0ZdLmluY3IgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdFtDUFVDTE9DS19WSVJUXS5leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRbQ1BVQ0xPQ0tfVklSVF0uaW5jciA9IGNwdXRpbWVfemVybzsKIAogCS8qIENhY2hlZCBleHBpcmF0aW9uIHRpbWVzLiAqLwogCXNpZy0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gY3B1dGltZV96ZXJvOwpAQCAtODQ5LDYgKzg2Nyw3IEBACiAJc2lnLT5udmNzdyA9IHNpZy0+bml2Y3N3ID0gc2lnLT5jbnZjc3cgPSBzaWctPmNuaXZjc3cgPSAwOwogCXNpZy0+bWluX2ZsdCA9IHNpZy0+bWFqX2ZsdCA9IHNpZy0+Y21pbl9mbHQgPSBzaWctPmNtYWpfZmx0ID0gMDsKIAlzaWctPmluYmxvY2sgPSBzaWctPm91YmxvY2sgPSBzaWctPmNpbmJsb2NrID0gc2lnLT5jb3VibG9jayA9IDA7CisJc2lnLT5tYXhyc3MgPSBzaWctPmNtYXhyc3MgPSAwOwogCXRhc2tfaW9fYWNjb3VudGluZ19pbml0KCZzaWctPmlvYWMpOwogCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgPSAwOwogCXRhc2tzdGF0c190Z2lkX2luaXQoc2lnKTsKQEAgLTg2Myw2ICs4ODIsOCBAQAogCiAJdHR5X2F1ZGl0X2Zvcmsoc2lnKTsKIAorCXNpZy0+b29tX2FkaiA9IGN1cnJlbnQtPnNpZ25hbC0+b29tX2FkajsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDc1LDEwICsxMDk2LDEyIEBACiAKIAlwLT5idHMgPSBOVUxMOwogCisJcC0+c3RhY2tfc3RhcnQgPSBzdGFja19zdGFydDsKKwogCS8qIFBlcmZvcm0gc2NoZWR1bGVyIHJlbGF0ZWQgc2V0dXAuIEFzc2lnbiB0aGlzIHRhc2sgdG8gYSBDUFUuICovCiAJc2NoZWRfZm9yayhwLCBjbG9uZV9mbGFncyk7CiAKLQlyZXR2YWwgPSBwZXJmX2NvdW50ZXJfaW5pdF90YXNrKHApOworCXJldHZhbCA9IHBlcmZfZXZlbnRfaW5pdF90YXNrKHApOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9wb2xpY3k7CiAKQEAgLTEyNTMsNyArMTI3Niw3IEBACiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJcHJvY19mb3JrX2Nvbm5lY3RvcihwKTsKIAljZ3JvdXBfcG9zdF9mb3JrKHApOwotCXBlcmZfY291bnRlcl9mb3JrKHApOworCXBlcmZfZXZlbnRfZm9yayhwKTsKIAlyZXR1cm4gcDsKIAogYmFkX2ZvcmtfZnJlZV9waWQ6CkBAIC0xMjgwLDcgKzEzMDMsNyBAQAogYmFkX2ZvcmtfY2xlYW51cF9hdWRpdDoKIAlhdWRpdF9mcmVlKHApOwogYmFkX2ZvcmtfY2xlYW51cF9wb2xpY3k6Ci0JcGVyZl9jb3VudGVyX2ZyZWVfdGFzayhwKTsKKwlwZXJmX2V2ZW50X2ZyZWVfdGFzayhwKTsKICNpZmRlZiBDT05GSUdfTlVNQQogCW1wb2xfcHV0KHAtPm1lbXBvbGljeSk7CiBiYWRfZm9ya19jbGVhbnVwX2Nncm91cDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGMwM2YyMjEuLmU1ZDk4Y2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNDgsNiArNDgsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy90aW1lci5oPgorCiAvKgogICogVGhlIHRpbWVyIGJhc2VzOgogICoKQEAgLTQ0Miw2ICs0NDQsMjYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19ocnRpbWVyX2RlYWN0aXZhdGUoc3RydWN0IGhydGltZXIgKnRpbWVyKSB7IH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHZvaWQKK2RlYnVnX2luaXQoc3RydWN0IGhydGltZXIgKnRpbWVyLCBjbG9ja2lkX3QgY2xvY2tpZCwKKwkgICBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQoreworCWRlYnVnX2hydGltZXJfaW5pdCh0aW1lcik7CisJdHJhY2VfaHJ0aW1lcl9pbml0KHRpbWVyLCBjbG9ja2lkLCBtb2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2FjdGl2YXRlKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlkZWJ1Z19ocnRpbWVyX2FjdGl2YXRlKHRpbWVyKTsKKwl0cmFjZV9ocnRpbWVyX3N0YXJ0KHRpbWVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RlYWN0aXZhdGUoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJdHJhY2VfaHJ0aW1lcl9jYW5jZWwodGltZXIpOworfQorCiAvKiBIaWdoIHJlc29sdXRpb24gdGltZXIgcmVsYXRlZCBmdW5jdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiAKQEAgLTc5OCw3ICs4MjAsNyBAQAogCXN0cnVjdCBocnRpbWVyICplbnRyeTsKIAlpbnQgbGVmdG1vc3QgPSAxOwogCi0JZGVidWdfaHJ0aW1lcl9hY3RpdmF0ZSh0aW1lcik7CisJZGVidWdfYWN0aXZhdGUodGltZXIpOwogCiAJLyoKIAkgKiBGaW5kIHRoZSByaWdodCBwbGFjZSBpbiB0aGUgcmJ0cmVlOgpAQCAtODg0LDcgKzkwNiw3IEBACiAJCSAqIHJlcHJvZ3JhbW1pbmcgaGFwcGVucyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMgaXMgYQogCQkgKiByYXJlIGNhc2UgYW5kIGxlc3MgZXhwZW5zaXZlIHRoYW4gYSBzbXAgY2FsbC4KIAkJICovCi0JCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJCWRlYnVnX2RlYWN0aXZhdGUodGltZXIpOwogCQl0aW1lcl9zdGF0c19ocnRpbWVyX2NsZWFyX3N0YXJ0X2luZm8odGltZXIpOwogCQlyZXByb2dyYW0gPSBiYXNlLT5jcHVfYmFzZSA9PSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKIAkJX19yZW1vdmVfaHJ0aW1lcih0aW1lciwgYmFzZSwgSFJUSU1FUl9TVEFURV9JTkFDVElWRSwKQEAgLTExMTcsNyArMTEzOSw3IEBACiB2b2lkIGhydGltZXJfaW5pdChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGNsb2NraWRfdCBjbG9ja19pZCwKIAkJICBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQogewotCWRlYnVnX2hydGltZXJfaW5pdCh0aW1lcik7CisJZGVidWdfaW5pdCh0aW1lciwgY2xvY2tfaWQsIG1vZGUpOwogCV9faHJ0aW1lcl9pbml0KHRpbWVyLCBjbG9ja19pZCwgbW9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2luaXQpOwpAQCAtMTE0MSw3ICsxMTYzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfZ2V0X3Jlcyk7CiAKLXN0YXRpYyB2b2lkIF9fcnVuX2hydGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKQorc3RhdGljIHZvaWQgX19ydW5faHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgKm5vdykKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gdGltZXItPmJhc2U7CiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlID0gYmFzZS0+Y3B1X2Jhc2U7CkBAIC0xMTUwLDcgKzExNzIsNyBAQAogCiAJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJZGVidWdfZGVhY3RpdmF0ZSh0aW1lcik7CiAJX19yZW1vdmVfaHJ0aW1lcih0aW1lciwgYmFzZSwgSFJUSU1FUl9TVEFURV9DQUxMQkFDSywgMCk7CiAJdGltZXJfc3RhdHNfYWNjb3VudF9ocnRpbWVyKHRpbWVyKTsKIAlmbiA9IHRpbWVyLT5mdW5jdGlvbjsKQEAgLTExNjEsNyArMTE4Myw5IEBACiAJICogdGhlIHRpbWVyIGJhc2UuCiAJICovCiAJc3Bpbl91bmxvY2soJmNwdV9iYXNlLT5sb2NrKTsKKwl0cmFjZV9ocnRpbWVyX2V4cGlyZV9lbnRyeSh0aW1lciwgbm93KTsKIAlyZXN0YXJ0ID0gZm4odGltZXIpOworCXRyYWNlX2hydGltZXJfZXhwaXJlX2V4aXQodGltZXIpOwogCXNwaW5fbG9jaygmY3B1X2Jhc2UtPmxvY2spOwogCiAJLyoKQEAgLTEyNzIsNyArMTI5Niw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCV9fcnVuX2hydGltZXIodGltZXIpOworCQkJX19ydW5faHJ0aW1lcih0aW1lciwgJmJhc2Vub3cpOwogCQl9CiAJCWJhc2UrKzsKIAl9CkBAIC0xMzk0LDcgKzE0MTgsNyBAQAogCQkJCQlocnRpbWVyX2dldF9leHBpcmVzX3R2NjQodGltZXIpKQogCQkJCWJyZWFrOwogCi0JCQlfX3J1bl9ocnRpbWVyKHRpbWVyKTsKKwkJCV9fcnVuX2hydGltZXIodGltZXIsICZiYXNlLT5zb2Z0aXJxX3RpbWUpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZjcHVfYmFzZS0+bG9jayk7CiAJfQpAQCAtMTU3MSw3ICsxNTk1LDcgQEAKIAl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmb2xkX2Jhc2UtPmFjdGl2ZSkpKSB7CiAJCXRpbWVyID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhydGltZXIsIG5vZGUpOwogCQlCVUdfT04oaHJ0aW1lcl9jYWxsYmFja19ydW5uaW5nKHRpbWVyKSk7Ci0JCWRlYnVnX2hydGltZXJfZGVhY3RpdmF0ZSh0aW1lcik7CisJCWRlYnVnX2RlYWN0aXZhdGUodGltZXIpOwogCiAJCS8qCiAJCSAqIE1hcmsgaXQgYXMgU1RBVEVfTUlHUkFURSBub3QgSU5BQ1RJVkUgb3RoZXJ3aXNlIHRoZQpkaWZmIC0tZ2l0IGEva2VybmVsL2l0aW1lci5jIGIva2VybmVsL2l0aW1lci5jCmluZGV4IDU4NzYyZjcuLmIwMzQ1MWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pdGltZXIuYworKysgYi9rZXJuZWwvaXRpbWVyLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy90aW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNDEsMTAgKzQyLDQzIEBACiAJcmV0dXJuIGt0aW1lX3RvX3RpbWV2YWwocmVtKTsKIH0KIAorc3RhdGljIHZvaWQgZ2V0X2NwdV9pdGltZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCBjbG9ja19pZCwKKwkJCSAgIHN0cnVjdCBpdGltZXJ2YWwgKmNvbnN0IHZhbHVlKQoreworCWNwdXRpbWVfdCBjdmFsLCBjaW50ZXJ2YWw7CisJc3RydWN0IGNwdV9pdGltZXIgKml0ID0gJnRzay0+c2lnbmFsLT5pdFtjbG9ja19pZF07CisKKwlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJY3ZhbCA9IGl0LT5leHBpcmVzOworCWNpbnRlcnZhbCA9IGl0LT5pbmNyOworCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwkJY3B1dGltZV90IHQ7CisKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWVyKHRzaywgJmNwdXRpbWUpOworCQlpZiAoY2xvY2tfaWQgPT0gQ1BVQ0xPQ0tfUFJPRikKKwkJCXQgPSBjcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwkJZWxzZQorCQkJLyogQ1BVQ0xPQ0tfVklSVCAqLworCQkJdCA9IGNwdXRpbWUudXRpbWU7CisKKwkJaWYgKGNwdXRpbWVfbGUoY3ZhbCwgdCkpCisJCQkvKiBhYm91dCB0byBmaXJlICovCisJCQljdmFsID0gY3B1dGltZV9vbmVfamlmZnk7CisJCWVsc2UKKwkJCWN2YWwgPSBjcHV0aW1lX3N1YihjdmFsLCB0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJnZhbHVlLT5pdF92YWx1ZSk7CisJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJnZhbHVlLT5pdF9pbnRlcnZhbCk7Cit9CisKIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JY3B1dGltZV90IGNpbnRlcnZhbCwgY3ZhbDsKIAogCXN3aXRjaCAod2hpY2gpIHsKIAljYXNlIElUSU1FUl9SRUFMOgpAQCAtNTUsNDQgKzg5LDEwIEBACiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfVklSVFVBTDoKLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXM7Ci0JCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2luY3I7Ci0JCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pKSB7Ci0JCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7Ci0JCQljcHV0aW1lX3QgdXRpbWU7Ci0KLQkJCXRocmVhZF9ncm91cF9jcHV0aW1lcih0c2ssICZjcHV0aW1lKTsKLQkJCXV0aW1lID0gY3B1dGltZS51dGltZTsKLQkJCWlmIChjcHV0aW1lX2xlKGN2YWwsIHV0aW1lKSkgeyAvKiBhYm91dCB0byBmaXJlICovCi0JCQkJY3ZhbCA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY3ZhbCA9IGNwdXRpbWVfc3ViKGN2YWwsIHV0aW1lKTsKLQkJCX0KLQkJfQotCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmdmFsdWUtPml0X3ZhbHVlKTsKLQkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJnZhbHVlLT5pdF9pbnRlcnZhbCk7CisJCWdldF9jcHVfaXRpbWVyKHRzaywgQ1BVQ0xPQ0tfVklSVCwgdmFsdWUpOwogCQlicmVhazsKIAljYXNlIElUSU1FUl9QUk9GOgotCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlczsKLQkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfaW5jcjsKLQkJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykpIHsKLQkJCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGltZXM7Ci0JCQljcHV0aW1lX3QgcHRpbWU7Ci0KLQkJCXRocmVhZF9ncm91cF9jcHV0aW1lcih0c2ssICZ0aW1lcyk7Ci0JCQlwdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLnV0aW1lLCB0aW1lcy5zdGltZSk7Ci0JCQlpZiAoY3B1dGltZV9sZShjdmFsLCBwdGltZSkpIHsgLyogYWJvdXQgdG8gZmlyZSAqLwotCQkJCWN2YWwgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7Ci0JCQl9IGVsc2UgewotCQkJCWN2YWwgPSBjcHV0aW1lX3N1YihjdmFsLCBwdGltZSk7Ci0JCQl9Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJnZhbHVlLT5pdF92YWx1ZSk7Ci0JCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOworCQlnZXRfY3B1X2l0aW1lcih0c2ssIENQVUNMT0NLX1BST0YsIHZhbHVlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuKC1FSU5WQUwpOwpAQCAtMTIzLDExICsxMjMsNjIgQEAKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0KIAkJY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCwgcmVhbF90aW1lcik7CiAKKwl0cmFjZV9pdGltZXJfZXhwaXJlKElUSU1FUl9SRUFMLCBzaWctPmxlYWRlcl9waWQsIDApOwogCWtpbGxfcGlkX2luZm8oU0lHQUxSTSwgU0VORF9TSUdfUFJJViwgc2lnLT5sZWFkZXJfcGlkKTsKIAogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgY3B1dGltZV9zdWJfbnMoY3B1dGltZV90IGN0LCBzNjQgcmVhbF9ucykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJczY0IGNwdV9uczsKKworCWNwdXRpbWVfdG9fdGltZXNwZWMoY3QsICZ0cyk7CisJY3B1X25zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKKworCXJldHVybiAoY3B1X25zIDw9IHJlYWxfbnMpID8gMCA6IGNwdV9ucyAtIHJlYWxfbnM7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jcHVfaXRpbWVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBpbnQgY2xvY2tfaWQsCisJCQkgICBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpjb25zdCB2YWx1ZSwKKwkJCSAgIHN0cnVjdCBpdGltZXJ2YWwgKmNvbnN0IG92YWx1ZSkKK3sKKwljcHV0aW1lX3QgY3ZhbCwgbnZhbCwgY2ludGVydmFsLCBuaW50ZXJ2YWw7CisJczY0IG5zX25pbnRlcnZhbCwgbnNfbnZhbDsKKwlzdHJ1Y3QgY3B1X2l0aW1lciAqaXQgPSAmdHNrLT5zaWduYWwtPml0W2Nsb2NrX2lkXTsKKworCW52YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF92YWx1ZSk7CisJbnNfbnZhbCA9IHRpbWV2YWxfdG9fbnMoJnZhbHVlLT5pdF92YWx1ZSk7CisJbmludGVydmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOworCW5zX25pbnRlcnZhbCA9IHRpbWV2YWxfdG9fbnMoJnZhbHVlLT5pdF9pbnRlcnZhbCk7CisKKwlpdC0+aW5jcl9lcnJvciA9IGNwdXRpbWVfc3ViX25zKG5pbnRlcnZhbCwgbnNfbmludGVydmFsKTsKKwlpdC0+ZXJyb3IgPSBjcHV0aW1lX3N1Yl9ucyhudmFsLCBuc19udmFsKTsKKworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwljdmFsID0gaXQtPmV4cGlyZXM7CisJY2ludGVydmFsID0gaXQtPmluY3I7CisJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykgfHwKKwkgICAgIWNwdXRpbWVfZXEobnZhbCwgY3B1dGltZV96ZXJvKSkgeworCQlpZiAoY3B1dGltZV9ndChudmFsLCBjcHV0aW1lX3plcm8pKQorCQkJbnZhbCA9IGNwdXRpbWVfYWRkKG52YWwsIGNwdXRpbWVfb25lX2ppZmZ5KTsKKwkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKHRzaywgY2xvY2tfaWQsICZudmFsLCAmY3ZhbCk7CisJfQorCWl0LT5leHBpcmVzID0gbnZhbDsKKwlpdC0+aW5jciA9IG5pbnRlcnZhbDsKKwl0cmFjZV9pdGltZXJfc3RhdGUoY2xvY2tfaWQgPT0gQ1BVQ0xPQ0tfVklSVCA/CisJCQkgICBJVElNRVJfVklSVFVBTCA6IElUSU1FUl9QUk9GLCB2YWx1ZSwgbnZhbCk7CisKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwlpZiAob3ZhbHVlKSB7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmb3ZhbHVlLT5pdF92YWx1ZSk7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZvdmFsdWUtPml0X2ludGVydmFsKTsKKwl9Cit9CisKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRpbWV2YWwgaXMgaW4gY2Fub25pY2FsIGZvcm0KICAqLwpAQCAtMTM5LDcgKzE5MCw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKIAlrdGltZV90IGV4cGlyZXM7Ci0JY3B1dGltZV90IGN2YWwsIGNpbnRlcnZhbCwgbnZhbCwgbmludGVydmFsOwogCiAJLyoKIAkgKiBWYWxpZGF0ZSB0aGUgdGltZXZhbHMgaW4gdmFsdWUuCkBAIC0xNzEsNTEgKzIyMSwxNCBAQAogCQl9IGVsc2UKIAkJCXRzay0+c2lnbmFsLT5pdF9yZWFsX2luY3IudHY2NCA9IDA7CiAKKwkJdHJhY2VfaXRpbWVyX3N0YXRlKElUSU1FUl9SRUFMLCB2YWx1ZSwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfVklSVFVBTDoKLQkJbnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X3ZhbHVlKTsKLQkJbmludGVydmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOwotCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlczsKLQkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jcjsKLQkJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykgfHwKLQkJICAgICFjcHV0aW1lX2VxKG52YWwsIGNwdXRpbWVfemVybykpIHsKLQkJCWlmIChjcHV0aW1lX2d0KG52YWwsIGNwdXRpbWVfemVybykpCi0JCQkJbnZhbCA9IGNwdXRpbWVfYWRkKG52YWwsCi0JCQkJCQkgICBqaWZmaWVzX3RvX2NwdXRpbWUoMSkpOwotCQkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKHRzaywgQ1BVQ0xPQ0tfVklSVCwKLQkJCQkJICAgICAgJm52YWwsICZjdmFsKTsKLQkJfQotCQl0c2stPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzID0gbnZhbDsKLQkJdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jciA9IG5pbnRlcnZhbDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlpZiAob3ZhbHVlKSB7Ci0JCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJm92YWx1ZS0+aXRfdmFsdWUpOwotCQkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJm92YWx1ZS0+aXRfaW50ZXJ2YWwpOwotCQl9CisJCXNldF9jcHVfaXRpbWVyKHRzaywgQ1BVQ0xPQ0tfVklSVCwgdmFsdWUsIG92YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgSVRJTUVSX1BST0Y6Ci0JCW52YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF92YWx1ZSk7Ci0JCW5pbnRlcnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X2ludGVydmFsKTsKLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXM7Ci0JCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3I7Ci0JCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pIHx8Ci0JCSAgICAhY3B1dGltZV9lcShudmFsLCBjcHV0aW1lX3plcm8pKSB7Ci0JCQlpZiAoY3B1dGltZV9ndChudmFsLCBjcHV0aW1lX3plcm8pKQotCQkJCW52YWwgPSBjcHV0aW1lX2FkZChudmFsLAotCQkJCQkJICAgamlmZmllc190b19jcHV0aW1lKDEpKTsKLQkJCXNldF9wcm9jZXNzX2NwdV90aW1lcih0c2ssIENQVUNMT0NLX1BST0YsCi0JCQkJCSAgICAgICZudmFsLCAmY3ZhbCk7Ci0JCX0KLQkJdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcyA9IG52YWw7Ci0JCXRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3IgPSBuaW50ZXJ2YWw7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJaWYgKG92YWx1ZSkgewotCQkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZvdmFsdWUtPml0X3ZhbHVlKTsKLQkJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZvdmFsdWUtPml0X2ludGVydmFsKTsKLQkJfQorCQlzZXRfY3B1X2l0aW1lcih0c2ssIENQVUNMT0NLX1BST0YsIHZhbHVlLCBvdmFsdWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rYWxsc3ltcy5jIGIva2VybmVsL2thbGxzeW1zLmMKaW5kZXggM2EyOWRiZS4uOGI2YjhiNiAxMDA2NDQKLS0tIGEva2VybmVsL2thbGxzeW1zLmMKKysrIGIva2VybmVsL2thbGxzeW1zLmMKQEAgLTU5LDcgKzU5LDggQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBhZGRyKQogewotCWlmIChhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zdGV4dCAmJiBhZGRyIDw9ICh1bnNpZ25lZCBsb25nKV9ldGV4dCkKKwlpZiAoKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICYmIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpX2V0ZXh0KSB8fAorCSAgICBhcmNoX2lzX2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gaW5fZ2F0ZV9hcmVhX25vX3Rhc2soYWRkcik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwva2ZpZm8uYyBiL2tlcm5lbC9rZmlmby5jCmluZGV4IDI2NTM5ZTMuLjM3NjVmZjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZmlmby5jCisrKyBiL2tlcm5lbC9rZmlmby5jCkBAIC0xMTcsNyArMTE3LDcgQEAKICAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgogICovCiB1bnNpZ25lZCBpbnQgX19rZmlmb19wdXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgbDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2ttb2QuYyBiL2tlcm5lbC9rbW9kLmMKaW5kZXggOWZjYjUzYS4uNjg5ZDIwZiAxMDA2NDQKLS0tIGEva2VybmVsL2ttb2QuYworKysgYi9rZXJuZWwva21vZC5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIHN0YXRpYyBpbnQgX19fX2NhbGxfdXNlcm1vZGVoZWxwZXIodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICpzdWJfaW5mbyA9IGRhdGE7CisJZW51bSB1bWhfd2FpdCB3YWl0ID0gc3ViX2luZm8tPndhaXQ7CiAJaW50IHJldHZhbDsKIAogCUJVR19PTihhdG9taWNfcmVhZCgmc3ViX2luZm8tPmNyZWQtPnVzYWdlKSAhPSAxKTsKQEAgLTE4NCwxMCArMTg1LDE0IEBACiAJICovCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAwKTsKIAorCWlmICh3YWl0ID09IFVNSF9XQUlUX0VYRUMpCisJCWNvbXBsZXRlKHN1Yl9pbmZvLT5jb21wbGV0ZSk7CisKIAlyZXR2YWwgPSBrZXJuZWxfZXhlY3ZlKHN1Yl9pbmZvLT5wYXRoLCBzdWJfaW5mby0+YXJndiwgc3ViX2luZm8tPmVudnApOwogCiAJLyogRXhlYyBmYWlsZWQ/ICovCi0Jc3ViX2luZm8tPnJldHZhbCA9IHJldHZhbDsKKwlpZiAod2FpdCAhPSBVTUhfV0FJVF9FWEVDKQorCQlzdWJfaW5mby0+cmV0dmFsID0gcmV0dmFsOwogCWRvX2V4aXQoMCk7CiB9CiAKQEAgLTI2NiwxNiArMjcxLDE0IEBACiAKIAlzd2l0Y2ggKHdhaXQpIHsKIAljYXNlIFVNSF9OT19XQUlUOgorCWNhc2UgVU1IX1dBSVRfRVhFQzoKIAkJYnJlYWs7CiAKIAljYXNlIFVNSF9XQUlUX1BST0M6CiAJCWlmIChwaWQgPiAwKQogCQkJYnJlYWs7CiAJCXN1Yl9pbmZvLT5yZXR2YWwgPSBwaWQ7Ci0JCS8qIEZBTExUSFJPVUdIICovCi0KLQljYXNlIFVNSF9XQUlUX0VYRUM6Ci0JCWNvbXBsZXRlKHN1Yl9pbmZvLT5jb21wbGV0ZSk7CisJCWJyZWFrOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZWYxNzdkNi4uY2ZhZGMxMiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGtwcm9iZXNfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMga3Byb2Jlc19zZXFfb3BzID0gewogCS5zdGFydCA9IGtwcm9iZV9zZXFfc3RhcnQsCiAJLm5leHQgID0ga3Byb2JlX3NlcV9uZXh0LAogCS5zdG9wICA9IGtwcm9iZV9zZXFfc3RvcCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IGY3NGQyZDcuLjM4MTVhYzFkIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTU3OCw2ICs1NzgsOSBAQAogCWlmICgoYWRkciA+PSBzdGFydCkgJiYgKGFkZHIgPCBlbmQpKQogCQlyZXR1cm4gMTsKIAorCWlmIChhcmNoX2lzX2tlcm5lbF9kYXRhKGFkZHIpKQorCQlyZXR1cm4gMTsKKwogI2lmZGVmIENPTkZJR19TTVAKIAkvKgogCSAqIHBlcmNwdSB2YXI/CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcF9wcm9jLmMgYi9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKaW5kZXggZDRiM2RiYy4uZDRhYmE0ZiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXBfcHJvYy5jCisrKyBiL2tlcm5lbC9sb2NrZGVwX3Byb2MuYwpAQCAtNTk0LDcgKzU5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbG9ja3N0YXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsb2Nrc3RhdF9vcHMgPSB7CiAJLnN0YXJ0CT0gbHNfc3RhcnQsCiAJLm5leHQJPSBsc19uZXh0LAogCS5zdG9wCT0gbHNfc3RvcCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9tYXJrZXIuYyBiL2tlcm5lbC9tYXJrZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1NGYyNi4uMDAwMDAwMAotLS0gYS9rZXJuZWwvbWFya2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBNYXRoaWV1IERlc25veWVycwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvamhhc2guaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgbWFya2VyIF9fc3RhcnRfX19tYXJrZXJzW107Ci1leHRlcm4gc3RydWN0IG1hcmtlciBfX3N0b3BfX19tYXJrZXJzW107Ci0KLS8qIFNldCB0byAxIHRvIGVuYWJsZSBtYXJrZXIgZGVidWcgb3V0cHV0ICovCi1zdGF0aWMgY29uc3QgaW50IG1hcmtlcl9kZWJ1ZzsKLQotLyoKLSAqIG1hcmtlcnNfbXV0ZXggbmVzdHMgaW5zaWRlIG1vZHVsZV9tdXRleC4gTWFya2VycyBtdXRleCBwcm90ZWN0cyB0aGUgYnVpbHRpbgotICogYW5kIG1vZHVsZSBtYXJrZXJzIGFuZCB0aGUgaGFzaCB0YWJsZS4KLSAqLwotc3RhdGljIERFRklORV9NVVRFWChtYXJrZXJzX211dGV4KTsKLQotLyoKLSAqIE1hcmtlciBoYXNoIHRhYmxlLCBjb250YWluaW5nIHRoZSBhY3RpdmUgbWFya2Vycy4KLSAqIFByb3RlY3RlZCBieSBtb2R1bGVfbXV0ZXguCi0gKi8KLSNkZWZpbmUgTUFSS0VSX0hBU0hfQklUUyA2Ci0jZGVmaW5lIE1BUktFUl9UQUJMRV9TSVpFICgxIDw8IE1BUktFUl9IQVNIX0JJVFMpCi1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbWFya2VyX3RhYmxlW01BUktFUl9UQUJMRV9TSVpFXTsKLQotLyoKLSAqIE5vdGUgYWJvdXQgUkNVIDoKLSAqIEl0IGlzIHVzZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5IGhhbmRsZXIgaGFzIGZpbmlzaGVkIHVzaW5nIGl0cyBwcml2YXRlIGRhdGEKLSAqIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIG9wZXJhdGlvbiAoYWRkIG9yIHJlbW92ZSkgb24gYSBnaXZlbiBtYXJrZXIuICBJdCBpcwotICogYWxzbyB1c2VkIHRvIGRlbGF5IHRoZSBmcmVlIG9mIG11bHRpcGxlIHByb2JlcyBhcnJheSB1bnRpbCBhIHF1aWVzY2VudCBzdGF0ZQotICogaXMgcmVhY2hlZC4KLSAqIG1hcmtlciBlbnRyaWVzIG1vZGlmaWNhdGlvbnMgYXJlIHByb3RlY3RlZCBieSB0aGUgbWFya2Vyc19tdXRleC4KLSAqLwotc3RydWN0IG1hcmtlcl9lbnRyeSB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7Ci0JY2hhciAqZm9ybWF0OwotCQkJLyogUHJvYmUgd3JhcHBlciAqLwotCXZvaWQgKCpjYWxsKShjb25zdCBzdHJ1Y3QgbWFya2VyICptZGF0YSwgdm9pZCAqY2FsbF9wcml2YXRlLCAuLi4pOwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSBzaW5nbGU7Ci0Jc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICptdWx0aTsKLQlpbnQgcmVmY291bnQ7CS8qIE51bWJlciBvZiB0aW1lcyBhcm1lZC4gMCBpZiBkaXNhcm1lZC4gKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwotCXZvaWQgKm9sZHB0cjsKLQlpbnQgcmN1X3BlbmRpbmc7Ci0JdW5zaWduZWQgY2hhciBwdHlwZToxOwotCXVuc2lnbmVkIGNoYXIgZm9ybWF0X2FsbG9jYXRlZDoxOwotCWNoYXIgbmFtZVswXTsJLyogQ29udGFpbnMgbmFtZSdcMCdmb3JtYXQnXDAnICovCi19OwotCi0vKioKLSAqIF9fbWFya19lbXB0eV9mdW5jdGlvbiAtIEVtcHR5IHByb2JlIGNhbGxiYWNrCi0gKiBAcHJvYmVfcHJpdmF0ZTogcHJvYmUgcHJpdmF0ZSBkYXRhCi0gKiBAY2FsbF9wcml2YXRlOiBjYWxsIHNpdGUgcHJpdmF0ZSBkYXRhCi0gKiBAZm10OiBmb3JtYXQgc3RyaW5nCi0gKiBALi4uOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0Ci0gKgotICogRW1wdHkgY2FsbGJhY2sgcHJvdmlkZWQgYXMgYSBwcm9iZSB0byB0aGUgbWFya2Vycy4gQnkgcHJvdmlkaW5nIHRoaXMgdG8gYQotICogZGlzYWJsZWQgbWFya2VyLCB3ZSBtYWtlIHN1cmUgdGhlICBleGVjdXRpb24gZmxvdyBpcyBhbHdheXMgdmFsaWQgZXZlbgotICogdGhvdWdoIHRoZSBmdW5jdGlvbiBwb2ludGVyIGNoYW5nZSBhbmQgdGhlIG1hcmtlciBlbmFibGluZyBhcmUgdHdvIGRpc3RpbmN0Ci0gKiBvcGVyYXRpb25zIHRoYXQgbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHByZWVtcHRpYmxlIGNvZGUuCi0gKi8KLW5vdHJhY2Ugdm9pZCBfX21hcmtfZW1wdHlfZnVuY3Rpb24odm9pZCAqcHJvYmVfcHJpdmF0ZSwgdm9pZCAqY2FsbF9wcml2YXRlLAotCWNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCAqYXJncykKLXsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fbWFya19lbXB0eV9mdW5jdGlvbik7Ci0KLS8qCi0gKiBtYXJrZXJfcHJvYmVfY2IgQ2FsbGJhY2sgdGhhdCBwcmVwYXJlcyB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmb3IgcHJvYmVzLgotICogQG1kYXRhOiBwb2ludGVyIG9mIHR5cGUgc3RydWN0IG1hcmtlcgotICogQGNhbGxfcHJpdmF0ZTogY2FsbGVyIHNpdGUgcHJpdmF0ZSBkYXRhCi0gKiBALi4uOiAgVmFyaWFibGUgYXJndW1lbnQgbGlzdC4KLSAqCi0gKiBTaW5jZSB3ZSBkbyBub3QgdXNlICJ0eXBpY2FsIiBwb2ludGVyIGJhc2VkIFJDVSBpbiB0aGUgMSBhcmd1bWVudCBjYXNlLCB3ZQotICogbmVlZCB0byBwdXQgYSBmdWxsIHNtcF9ybWIoKSBpbiB0aGlzIGJyYW5jaC4gVGhpcyBpcyB3aHkgd2UgZG8gbm90IHVzZQotICogcmN1X2RlcmVmZXJlbmNlKCkgZm9yIHRoZSBwb2ludGVyIHJlYWQuCi0gKi8KLW5vdHJhY2Ugdm9pZCBtYXJrZXJfcHJvYmVfY2IoY29uc3Qgc3RydWN0IG1hcmtlciAqbWRhdGEsCi0JCXZvaWQgKmNhbGxfcHJpdmF0ZSwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQljaGFyIHB0eXBlOwotCi0JLyoKLQkgKiByY3VfcmVhZF9sb2NrX3NjaGVkIGRvZXMgdHdvIHRoaW5ncyA6IGRpc2FibGluZyBwcmVlbXB0aW9uIHRvIG1ha2UKLQkgKiBzdXJlIHRoZSB0ZWFyZG93biBvZiB0aGUgY2FsbGJhY2tzIGNhbiBiZSBkb25lIGNvcnJlY3RseSB3aGVuIHRoZXkKLQkgKiBhcmUgaW4gbW9kdWxlcyBhbmQgdGhleSBpbnN1cmUgUkNVIHJlYWQgY29oZXJlbmN5LgotCSAqLwotCXJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZSgpOwotCXB0eXBlID0gbWRhdGEtPnB0eXBlOwotCWlmIChsaWtlbHkoIXB0eXBlKSkgewotCQltYXJrZXJfcHJvYmVfZnVuYyAqZnVuYzsKLQkJLyogTXVzdCByZWFkIHRoZSBwdHlwZSBiZWZvcmUgcHRyLiBUaGV5IGFyZSBub3QgZGF0YSBkZXBlbmRhbnQsCi0JCSAqIHNvIHdlIHB1dCBhbiBleHBsaWNpdCBzbXBfcm1iKCkgaGVyZS4gKi8KLQkJc21wX3JtYigpOwotCQlmdW5jID0gbWRhdGEtPnNpbmdsZS5mdW5jOwotCQkvKiBNdXN0IHJlYWQgdGhlIHB0ciBiZWZvcmUgcHJpdmF0ZSBkYXRhLiBUaGV5IGFyZSBub3QgZGF0YQotCQkgKiBkZXBlbmRhbnQsIHNvIHdlIHB1dCBhbiBleHBsaWNpdCBzbXBfcm1iKCkgaGVyZS4gKi8KLQkJc21wX3JtYigpOwotCQl2YV9zdGFydChhcmdzLCBjYWxsX3ByaXZhdGUpOwotCQlmdW5jKG1kYXRhLT5zaW5nbGUucHJvYmVfcHJpdmF0ZSwgY2FsbF9wcml2YXRlLCBtZGF0YS0+Zm9ybWF0LAotCQkJJmFyZ3MpOwotCQl2YV9lbmQoYXJncyk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICptdWx0aTsKLQkJaW50IGk7Ci0JCS8qCi0JCSAqIFJlYWQgbWRhdGEtPnB0eXBlIGJlZm9yZSBtZGF0YS0+bXVsdGkuCi0JCSAqLwotCQlzbXBfcm1iKCk7Ci0JCW11bHRpID0gbWRhdGEtPm11bHRpOwotCQkvKgotCQkgKiBtdWx0aSBwb2ludHMgdG8gYW4gYXJyYXksIHRoZXJlZm9yZSBhY2Nlc3NpbmcgdGhlIGFycmF5Ci0JCSAqIGRlcGVuZHMgb24gcmVhZGluZyBtdWx0aS4gSG93ZXZlciwgZXZlbiBpbiB0aGlzIGNhc2UsCi0JCSAqIHdlIG11c3QgaW5zdXJlIHRoYXQgdGhlIHBvaW50ZXIgaXMgcmVhZCBfYmVmb3JlXyB0aGUgYXJyYXkKLQkJICogZGF0YS4gU2FtZSBhcyByY3VfZGVyZWZlcmVuY2UsIGJ1dCB3ZSBuZWVkIGEgZnVsbCBzbXBfcm1iKCkKLQkJICogaW4gdGhlIGZhc3QgcGF0aCwgc28gcHV0IHRoZSBleHBsaWNpdCBiYXJyaWVyIGhlcmUuCi0JCSAqLwotCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKLQkJZm9yIChpID0gMDsgbXVsdGlbaV0uZnVuYzsgaSsrKSB7Ci0JCQl2YV9zdGFydChhcmdzLCBjYWxsX3ByaXZhdGUpOwotCQkJbXVsdGlbaV0uZnVuYyhtdWx0aVtpXS5wcm9iZV9wcml2YXRlLCBjYWxsX3ByaXZhdGUsCi0JCQkJbWRhdGEtPmZvcm1hdCwgJmFyZ3MpOwotCQkJdmFfZW5kKGFyZ3MpOwotCQl9Ci0JfQotCXJjdV9yZWFkX3VubG9ja19zY2hlZF9ub3RyYWNlKCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfcHJvYmVfY2IpOwotCi0vKgotICogbWFya2VyX3Byb2JlX2NiIENhbGxiYWNrIHRoYXQgZG9lcyBub3QgcHJlcGFyZSB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KLSAqIEBtZGF0YTogcG9pbnRlciBvZiB0eXBlIHN0cnVjdCBtYXJrZXIKLSAqIEBjYWxsX3ByaXZhdGU6IGNhbGxlciBzaXRlIHByaXZhdGUgZGF0YQotICogQC4uLjogIFZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuCi0gKgotICogU2hvdWxkIGJlIGNvbm5lY3RlZCB0byBtYXJrZXJzICJNQVJLX05PQVJHUyIuCi0gKi8KLXN0YXRpYyBub3RyYWNlIHZvaWQgbWFya2VyX3Byb2JlX2NiX25vYXJnKGNvbnN0IHN0cnVjdCBtYXJrZXIgKm1kYXRhLAotCQl2b2lkICpjYWxsX3ByaXZhdGUsIC4uLikKLXsKLQl2YV9saXN0IGFyZ3M7CS8qIG5vdCBpbml0aWFsaXplZCAqLwotCWNoYXIgcHR5cGU7Ci0KLQlyY3VfcmVhZF9sb2NrX3NjaGVkX25vdHJhY2UoKTsKLQlwdHlwZSA9IG1kYXRhLT5wdHlwZTsKLQlpZiAobGlrZWx5KCFwdHlwZSkpIHsKLQkJbWFya2VyX3Byb2JlX2Z1bmMgKmZ1bmM7Ci0JCS8qIE11c3QgcmVhZCB0aGUgcHR5cGUgYmVmb3JlIHB0ci4gVGhleSBhcmUgbm90IGRhdGEgZGVwZW5kYW50LAotCQkgKiBzbyB3ZSBwdXQgYW4gZXhwbGljaXQgc21wX3JtYigpIGhlcmUuICovCi0JCXNtcF9ybWIoKTsKLQkJZnVuYyA9IG1kYXRhLT5zaW5nbGUuZnVuYzsKLQkJLyogTXVzdCByZWFkIHRoZSBwdHIgYmVmb3JlIHByaXZhdGUgZGF0YS4gVGhleSBhcmUgbm90IGRhdGEKLQkJICogZGVwZW5kYW50LCBzbyB3ZSBwdXQgYW4gZXhwbGljaXQgc21wX3JtYigpIGhlcmUuICovCi0JCXNtcF9ybWIoKTsKLQkJZnVuYyhtZGF0YS0+c2luZ2xlLnByb2JlX3ByaXZhdGUsIGNhbGxfcHJpdmF0ZSwgbWRhdGEtPmZvcm1hdCwKLQkJCSZhcmdzKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgbWFya2VyX3Byb2JlX2Nsb3N1cmUgKm11bHRpOwotCQlpbnQgaTsKLQkJLyoKLQkJICogUmVhZCBtZGF0YS0+cHR5cGUgYmVmb3JlIG1kYXRhLT5tdWx0aS4KLQkJICovCi0JCXNtcF9ybWIoKTsKLQkJbXVsdGkgPSBtZGF0YS0+bXVsdGk7Ci0JCS8qCi0JCSAqIG11bHRpIHBvaW50cyB0byBhbiBhcnJheSwgdGhlcmVmb3JlIGFjY2Vzc2luZyB0aGUgYXJyYXkKLQkJICogZGVwZW5kcyBvbiByZWFkaW5nIG11bHRpLiBIb3dldmVyLCBldmVuIGluIHRoaXMgY2FzZSwKLQkJICogd2UgbXVzdCBpbnN1cmUgdGhhdCB0aGUgcG9pbnRlciBpcyByZWFkIF9iZWZvcmVfIHRoZSBhcnJheQotCQkgKiBkYXRhLiBTYW1lIGFzIHJjdV9kZXJlZmVyZW5jZSwgYnV0IHdlIG5lZWQgYSBmdWxsIHNtcF9ybWIoKQotCQkgKiBpbiB0aGUgZmFzdCBwYXRoLCBzbyBwdXQgdGhlIGV4cGxpY2l0IGJhcnJpZXIgaGVyZS4KLQkJICovCi0JCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOwotCQlmb3IgKGkgPSAwOyBtdWx0aVtpXS5mdW5jOyBpKyspCi0JCQltdWx0aVtpXS5mdW5jKG11bHRpW2ldLnByb2JlX3ByaXZhdGUsIGNhbGxfcHJpdmF0ZSwKLQkJCQltZGF0YS0+Zm9ybWF0LCAmYXJncyk7Ci0JfQotCXJjdV9yZWFkX3VubG9ja19zY2hlZF9ub3RyYWNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfb2xkX2Nsb3N1cmUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGhlYWQsCi0JCXN0cnVjdCBtYXJrZXJfZW50cnksIHJjdSk7Ci0Ja2ZyZWUoZW50cnktPm9sZHB0cik7Ci0JLyogTWFrZSBzdXJlIHdlIGZyZWUgdGhlIGRhdGEgYmVmb3JlIHNldHRpbmcgdGhlIHBlbmRpbmcgZmxhZyB0byAwICovCi0Jc21wX3dtYigpOwotCWVudHJ5LT5yY3VfcGVuZGluZyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlYnVnX3ByaW50X3Byb2JlcyhzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeSkKLXsKLQlpbnQgaTsKLQotCWlmICghbWFya2VyX2RlYnVnKQotCQlyZXR1cm47Ci0KLQlpZiAoIWVudHJ5LT5wdHlwZSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiU2luZ2xlIHByb2JlIDogJXAgJXBcbiIsCi0JCQllbnRyeS0+c2luZ2xlLmZ1bmMsCi0JCQllbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUpOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGVudHJ5LT5tdWx0aVtpXS5mdW5jOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTXVsdGkgcHJvYmUgJWQgOiAlcCAlcFxuIiwgaSwKLQkJCQllbnRyeS0+bXVsdGlbaV0uZnVuYywKLQkJCQllbnRyeS0+bXVsdGlbaV0ucHJvYmVfcHJpdmF0ZSk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICoKLW1hcmtlcl9lbnRyeV9hZGRfcHJvYmUoc3RydWN0IG1hcmtlcl9lbnRyeSAqZW50cnksCi0JCW1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwgdm9pZCAqcHJvYmVfcHJpdmF0ZSkKLXsKLQlpbnQgbnJfcHJvYmVzID0gMDsKLQlzdHJ1Y3QgbWFya2VyX3Byb2JlX2Nsb3N1cmUgKm9sZCwgKm5ldzsKLQotCVdBUk5fT04oIXByb2JlKTsKLQotCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0Jb2xkID0gZW50cnktPm11bHRpOwotCWlmICghZW50cnktPnB0eXBlKSB7Ci0JCWlmIChlbnRyeS0+c2luZ2xlLmZ1bmMgPT0gcHJvYmUgJiYKLQkJCQllbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUgPT0gcHJvYmVfcHJpdmF0ZSkKLQkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7Ci0JCWlmIChlbnRyeS0+c2luZ2xlLmZ1bmMgPT0gX19tYXJrX2VtcHR5X2Z1bmN0aW9uKSB7Ci0JCQkvKiAwIC0+IDEgcHJvYmVzICovCi0JCQllbnRyeS0+c2luZ2xlLmZ1bmMgPSBwcm9iZTsKLQkJCWVudHJ5LT5zaW5nbGUucHJvYmVfcHJpdmF0ZSA9IHByb2JlX3ByaXZhdGU7Ci0JCQllbnRyeS0+cmVmY291bnQgPSAxOwotCQkJZW50cnktPnB0eXBlID0gMDsKLQkJCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCS8qIDEgLT4gMiBwcm9iZXMgKi8KLQkJCW5yX3Byb2JlcyA9IDE7Ci0JCQlvbGQgPSBOVUxMOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogKE4gLT4gTisxKSwgKE4gIT0gMCwgMSkgcHJvYmVzICovCi0JCWZvciAobnJfcHJvYmVzID0gMDsgb2xkW25yX3Byb2Jlc10uZnVuYzsgbnJfcHJvYmVzKyspCi0JCQlpZiAob2xkW25yX3Byb2Jlc10uZnVuYyA9PSBwcm9iZQotCQkJCQkmJiBvbGRbbnJfcHJvYmVzXS5wcm9iZV9wcml2YXRlCi0JCQkJCQk9PSBwcm9iZV9wcml2YXRlKQotCQkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7Ci0JfQotCS8qICsgMiA6IG9uZSBmb3IgbmV3IHByb2JlLCBvbmUgZm9yIE5VTEwgZnVuYyAqLwotCW5ldyA9IGt6YWxsb2MoKG5yX3Byb2JlcyArIDIpICogc2l6ZW9mKHN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAobmV3ID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCWlmICghb2xkKQotCQluZXdbMF0gPSBlbnRyeS0+c2luZ2xlOwotCWVsc2UKLQkJbWVtY3B5KG5ldywgb2xkLAotCQkJbnJfcHJvYmVzICogc2l6ZW9mKHN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSkpOwotCW5ld1tucl9wcm9iZXNdLmZ1bmMgPSBwcm9iZTsKLQluZXdbbnJfcHJvYmVzXS5wcm9iZV9wcml2YXRlID0gcHJvYmVfcHJpdmF0ZTsKLQllbnRyeS0+cmVmY291bnQgPSBucl9wcm9iZXMgKyAxOwotCWVudHJ5LT5tdWx0aSA9IG5ldzsKLQllbnRyeS0+cHR5cGUgPSAxOwotCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0JcmV0dXJuIG9sZDsKLX0KLQotc3RhdGljIHN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqCi1tYXJrZXJfZW50cnlfcmVtb3ZlX3Byb2JlKHN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5LAotCQltYXJrZXJfcHJvYmVfZnVuYyAqcHJvYmUsIHZvaWQgKnByb2JlX3ByaXZhdGUpCi17Ci0JaW50IG5yX3Byb2JlcyA9IDAsIG5yX2RlbCA9IDAsIGk7Ci0Jc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlICpvbGQsICpuZXc7Ci0KLQlvbGQgPSBlbnRyeS0+bXVsdGk7Ci0KLQlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOwotCWlmICghZW50cnktPnB0eXBlKSB7Ci0JCS8qIDAgLT4gTiBpcyBhbiBlcnJvciAqLwotCQlXQVJOX09OKGVudHJ5LT5zaW5nbGUuZnVuYyA9PSBfX21hcmtfZW1wdHlfZnVuY3Rpb24pOwotCQkvKiAxIC0+IDAgcHJvYmVzICovCi0JCVdBUk5fT04ocHJvYmUgJiYgZW50cnktPnNpbmdsZS5mdW5jICE9IHByb2JlKTsKLQkJV0FSTl9PTihlbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUgIT0gcHJvYmVfcHJpdmF0ZSk7Ci0JCWVudHJ5LT5zaW5nbGUuZnVuYyA9IF9fbWFya19lbXB0eV9mdW5jdGlvbjsKLQkJZW50cnktPnJlZmNvdW50ID0gMDsKLQkJZW50cnktPnB0eXBlID0gMDsKLQkJZGVidWdfcHJpbnRfcHJvYmVzKGVudHJ5KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyogKE4gLT4gTSksIChOID4gMSwgTSA+PSAwKSBwcm9iZXMgKi8KLQkJZm9yIChucl9wcm9iZXMgPSAwOyBvbGRbbnJfcHJvYmVzXS5mdW5jOyBucl9wcm9iZXMrKykgewotCQkJaWYgKCghcHJvYmUgfHwgb2xkW25yX3Byb2Jlc10uZnVuYyA9PSBwcm9iZSkKLQkJCQkJJiYgb2xkW25yX3Byb2Jlc10ucHJvYmVfcHJpdmF0ZQotCQkJCQkJPT0gcHJvYmVfcHJpdmF0ZSkKLQkJCQlucl9kZWwrKzsKLQkJfQotCX0KLQotCWlmIChucl9wcm9iZXMgLSBucl9kZWwgPT0gMCkgewotCQkvKiBOIC0+IDAsIChOID4gMSkgKi8KLQkJZW50cnktPnNpbmdsZS5mdW5jID0gX19tYXJrX2VtcHR5X2Z1bmN0aW9uOwotCQllbnRyeS0+cmVmY291bnQgPSAwOwotCQllbnRyeS0+cHR5cGUgPSAwOwotCX0gZWxzZSBpZiAobnJfcHJvYmVzIC0gbnJfZGVsID09IDEpIHsKLQkJLyogTiAtPiAxLCAoTiA+IDEpICovCi0JCWZvciAoaSA9IDA7IG9sZFtpXS5mdW5jOyBpKyspCi0JCQlpZiAoKHByb2JlICYmIG9sZFtpXS5mdW5jICE9IHByb2JlKSB8fAotCQkJCQlvbGRbaV0ucHJvYmVfcHJpdmF0ZSAhPSBwcm9iZV9wcml2YXRlKQotCQkJCWVudHJ5LT5zaW5nbGUgPSBvbGRbaV07Ci0JCWVudHJ5LT5yZWZjb3VudCA9IDE7Ci0JCWVudHJ5LT5wdHlwZSA9IDA7Ci0JfSBlbHNlIHsKLQkJaW50IGogPSAwOwotCQkvKiBOIC0+IE0sIChOID4gMSwgTSA+IDEpICovCi0JCS8qICsgMSBmb3IgTlVMTCAqLwotCQluZXcgPSBremFsbG9jKChucl9wcm9iZXMgLSBucl9kZWwgKyAxKQotCQkJKiBzaXplb2Yoc3RydWN0IG1hcmtlcl9wcm9iZV9jbG9zdXJlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChuZXcgPT0gTlVMTCkKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCQlmb3IgKGkgPSAwOyBvbGRbaV0uZnVuYzsgaSsrKQotCQkJaWYgKChwcm9iZSAmJiBvbGRbaV0uZnVuYyAhPSBwcm9iZSkgfHwKLQkJCQkJb2xkW2ldLnByb2JlX3ByaXZhdGUgIT0gcHJvYmVfcHJpdmF0ZSkKLQkJCQluZXdbaisrXSA9IG9sZFtpXTsKLQkJZW50cnktPnJlZmNvdW50ID0gbnJfcHJvYmVzIC0gbnJfZGVsOwotCQllbnRyeS0+cHR5cGUgPSAxOwotCQllbnRyeS0+bXVsdGkgPSBuZXc7Ci0JfQotCWRlYnVnX3ByaW50X3Byb2JlcyhlbnRyeSk7Ci0JcmV0dXJuIG9sZDsKLX0KLQotLyoKLSAqIEdldCBtYXJrZXIgaWYgdGhlIG1hcmtlciBpcyBwcmVzZW50IGluIHRoZSBtYXJrZXIgaGFzaCB0YWJsZS4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggbWFya2Vyc19tdXRleCBoZWxkLgotICogUmV0dXJucyBOVUxMIGlmIG5vdCBwcmVzZW50LgotICovCi1zdGF0aWMgc3RydWN0IG1hcmtlcl9lbnRyeSAqZ2V0X21hcmtlcihjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmU7Ci0JdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBzdHJsZW4obmFtZSksIDApOwotCi0JaGVhZCA9ICZtYXJrZXJfdGFibGVbaGFzaCAmICgoMSA8PCBNQVJLRVJfSEFTSF9CSVRTKS0xKV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpCi0JCQlyZXR1cm4gZTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBBZGQgdGhlIG1hcmtlciB0byB0aGUgbWFya2VyIGhhc2ggdGFibGUuIE11c3QgYmUgY2FsbGVkIHdpdGggbWFya2Vyc19tdXRleAotICogaGVsZC4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXJrZXJfZW50cnkgKmFkZF9tYXJrZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0KQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmU7Ci0Jc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpICsgMTsKLQlzaXplX3QgZm9ybWF0X2xlbiA9IDA7Ci0JdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBuYW1lX2xlbi0xLCAwKTsKLQotCWlmIChmb3JtYXQpCi0JCWZvcm1hdF9sZW4gPSBzdHJsZW4oZm9ybWF0KSArIDE7Ci0JaGVhZCA9ICZtYXJrZXJfdGFibGVbaGFzaCAmICgoMSA8PCBNQVJLRVJfSEFTSF9CSVRTKS0xKV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRQotCQkJCSJNYXJrZXIgJXMgYnVzeVxuIiwgbmFtZSk7Ci0JCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOwkvKiBBbHJlYWR5IHRoZXJlICovCi0JCX0KLQl9Ci0JLyoKLQkgKiBVc2luZyBrbWFsbG9jIGhlcmUgdG8gYWxsb2NhdGUgYSB2YXJpYWJsZSBsZW5ndGggZWxlbWVudC4gQ291bGQKLQkgKiBjYXVzZSBzb21lIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlmIG92ZXJ1c2VkLgotCSAqLwotCWUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFya2VyX2VudHJ5KSArIG5hbWVfbGVuICsgZm9ybWF0X2xlbiwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JbWVtY3B5KCZlLT5uYW1lWzBdLCBuYW1lLCBuYW1lX2xlbik7Ci0JaWYgKGZvcm1hdCkgewotCQllLT5mb3JtYXQgPSAmZS0+bmFtZVtuYW1lX2xlbl07Ci0JCW1lbWNweShlLT5mb3JtYXQsIGZvcm1hdCwgZm9ybWF0X2xlbik7Ci0JCWlmIChzdHJjbXAoZS0+Zm9ybWF0LCBNQVJLX05PQVJHUykgPT0gMCkKLQkJCWUtPmNhbGwgPSBtYXJrZXJfcHJvYmVfY2Jfbm9hcmc7Ci0JCWVsc2UKLQkJCWUtPmNhbGwgPSBtYXJrZXJfcHJvYmVfY2I7Ci0JCXRyYWNlX21hcmsoY29yZV9tYXJrZXJfZm9ybWF0LCAibmFtZSAlcyBmb3JtYXQgJXMiLAotCQkJCWUtPm5hbWUsIGUtPmZvcm1hdCk7Ci0JfSBlbHNlIHsKLQkJZS0+Zm9ybWF0ID0gTlVMTDsKLQkJZS0+Y2FsbCA9IG1hcmtlcl9wcm9iZV9jYjsKLQl9Ci0JZS0+c2luZ2xlLmZ1bmMgPSBfX21hcmtfZW1wdHlfZnVuY3Rpb247Ci0JZS0+c2luZ2xlLnByb2JlX3ByaXZhdGUgPSBOVUxMOwotCWUtPm11bHRpID0gTlVMTDsKLQllLT5wdHlwZSA9IDA7Ci0JZS0+Zm9ybWF0X2FsbG9jYXRlZCA9IDA7Ci0JZS0+cmVmY291bnQgPSAwOwotCWUtPnJjdV9wZW5kaW5nID0gMDsKLQlobGlzdF9hZGRfaGVhZCgmZS0+aGxpc3QsIGhlYWQpOwotCXJldHVybiBlOwotfQotCi0vKgotICogUmVtb3ZlIHRoZSBtYXJrZXIgZnJvbSB0aGUgbWFya2VyIGhhc2ggdGFibGUuIE11c3QgYmUgY2FsbGVkIHdpdGggbXV0ZXhfbG9jawotICogaGVsZC4KLSAqLwotc3RhdGljIGludCByZW1vdmVfbWFya2VyKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IG1hcmtlcl9lbnRyeSAqZTsKLQlpbnQgZm91bmQgPSAwOwotCXNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwotCXUzMiBoYXNoID0gamhhc2gobmFtZSwgbGVuLTEsIDApOwotCi0JaGVhZCA9ICZtYXJrZXJfdGFibGVbaGFzaCAmICgoMSA8PCBNQVJLRVJfSEFTSF9CSVRTKS0xKV07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghZm91bmQpCi0JCXJldHVybiAtRU5PRU5UOwotCWlmIChlLT5zaW5nbGUuZnVuYyAhPSBfX21hcmtfZW1wdHlfZnVuY3Rpb24pCi0JCXJldHVybiAtRUJVU1k7Ci0JaGxpc3RfZGVsKCZlLT5obGlzdCk7Ci0JaWYgKGUtPmZvcm1hdF9hbGxvY2F0ZWQpCi0JCWtmcmVlKGUtPmZvcm1hdCk7Ci0JLyogTWFrZSBzdXJlIHRoZSBjYWxsX3JjdSBoYXMgYmVlbiBleGVjdXRlZCAqLwotCWlmIChlLT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQlrZnJlZShlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldCB0aGUgbWFya19lbnRyeSBmb3JtYXQgdG8gdGhlIGZvcm1hdCBmb3VuZCBpbiB0aGUgZWxlbWVudC4KLSAqLwotc3RhdGljIGludCBtYXJrZXJfc2V0X2Zvcm1hdChzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeSwgY29uc3QgY2hhciAqZm9ybWF0KQotewotCWVudHJ5LT5mb3JtYXQgPSBrc3RyZHVwKGZvcm1hdCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlbnRyeS0+Zm9ybWF0KQotCQlyZXR1cm4gLUVOT01FTTsKLQllbnRyeS0+Zm9ybWF0X2FsbG9jYXRlZCA9IDE7Ci0KLQl0cmFjZV9tYXJrKGNvcmVfbWFya2VyX2Zvcm1hdCwgIm5hbWUgJXMgZm9ybWF0ICVzIiwKLQkJCWVudHJ5LT5uYW1lLCBlbnRyeS0+Zm9ybWF0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHMgdGhlIHByb2JlIGNhbGxiYWNrIGNvcnJlc3BvbmRpbmcgdG8gb25lIG1hcmtlci4KLSAqLwotc3RhdGljIGludCBzZXRfbWFya2VyKHN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgbWFya2VyICplbGVtLAotCQlpbnQgYWN0aXZlKQotewotCWludCByZXQgPSAwOwotCVdBUk5fT04oc3RyY21wKGVudHJ5LT5uYW1lLCBlbGVtLT5uYW1lKSAhPSAwKTsKLQotCWlmIChlbnRyeS0+Zm9ybWF0KSB7Ci0JCWlmIChzdHJjbXAoZW50cnktPmZvcm1hdCwgZWxlbS0+Zm9ybWF0KSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCQkiRm9ybWF0IG1pc21hdGNoIGZvciBwcm9iZSAlcyAiCi0JCQkJIiglcyksIG1hcmtlciAoJXMpXG4iLAotCQkJCWVudHJ5LT5uYW1lLAotCQkJCWVudHJ5LT5mb3JtYXQsCi0JCQkJZWxlbS0+Zm9ybWF0KTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0KLQl9IGVsc2UgewotCQlyZXQgPSBtYXJrZXJfc2V0X2Zvcm1hdChlbnRyeSwgZWxlbS0+Zm9ybWF0KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyoKLQkgKiBwcm9iZV9jYiBzZXR1cCAoc3RhdGljYWxseSBrbm93bikgaXMgZG9uZSBoZXJlLiBJdCBpcwotCSAqIGFzeW5jaHJvbm91cyB3aXRoIHRoZSByZXN0IG9mIGV4ZWN1dGlvbiwgdGhlcmVmb3JlIHdlIG9ubHkKLQkgKiBwYXNzIGZyb20gYSAic2FmZSIgY2FsbGJhY2sgKHdpdGggYXJndW1lbnQpIHRvIGFuICJ1bnNhZmUiCi0JICogY2FsbGJhY2sgKGRvZXMgbm90IHNldCBhcmd1bWVudHMpLgotCSAqLwotCWVsZW0tPmNhbGwgPSBlbnRyeS0+Y2FsbDsKLQkvKgotCSAqIFNhbml0eSBjaGVjayA6Ci0JICogV2Ugb25seSB1cGRhdGUgdGhlIHNpbmdsZSBwcm9iZSBwcml2YXRlIGRhdGEgd2hlbiB0aGUgcHRyIGlzCi0JICogc2V0IHRvIGEgX25vbl8gc2luZ2xlIHByb2JlISAoMCAtPiAxIGFuZCBOIC0+IDEsIE4gIT0gMSkKLQkgKi8KLQlXQVJOX09OKGVsZW0tPnNpbmdsZS5mdW5jICE9IF9fbWFya19lbXB0eV9mdW5jdGlvbgotCQkmJiBlbGVtLT5zaW5nbGUucHJvYmVfcHJpdmF0ZSAhPSBlbnRyeS0+c2luZ2xlLnByb2JlX3ByaXZhdGUKLQkJJiYgIWVsZW0tPnB0eXBlKTsKLQllbGVtLT5zaW5nbGUucHJvYmVfcHJpdmF0ZSA9IGVudHJ5LT5zaW5nbGUucHJvYmVfcHJpdmF0ZTsKLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgcHJpdmF0ZSBkYXRhIGlzIHZhbGlkIHdoZW4gd2UgdXBkYXRlIHRoZQotCSAqIHNpbmdsZSBwcm9iZSBwdHIuCi0JICovCi0Jc21wX3dtYigpOwotCWVsZW0tPnNpbmdsZS5mdW5jID0gZW50cnktPnNpbmdsZS5mdW5jOwotCS8qCi0JICogV2UgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHByb2JlIGNhbGxiYWNrcyBhcnJheSBpcyBjb25zaXN0ZW50Ci0JICogYmVmb3JlIHNldHRpbmcgYSBwb2ludGVyIHRvIGl0LgotCSAqLwotCXJjdV9hc3NpZ25fcG9pbnRlcihlbGVtLT5tdWx0aSwgZW50cnktPm11bHRpKTsKLQkvKgotCSAqIFVwZGF0ZSB0aGUgZnVuY3Rpb24gb3IgbXVsdGkgcHJvYmUgYXJyYXkgcG9pbnRlciBiZWZvcmUgc2V0dGluZyB0aGUKLQkgKiBwdHlwZS4KLQkgKi8KLQlzbXBfd21iKCk7Ci0JZWxlbS0+cHR5cGUgPSBlbnRyeS0+cHR5cGU7Ci0KLQlpZiAoZWxlbS0+dHBfbmFtZSAmJiAoYWN0aXZlIF4gZWxlbS0+c3RhdGUpKSB7Ci0JCVdBUk5fT04oIWVsZW0tPnRwX2NiKTsKLQkJLyoKLQkJICogSXQgaXMgb2sgdG8gZGlyZWN0bHkgY2FsbCB0aGUgcHJvYmUgcmVnaXN0cmF0aW9uIGJlY2F1c2UgdHlwZQotCQkgKiBjaGVja2luZyBoYXMgYmVlbiBkb25lIGluIHRoZSBfX3RyYWNlX21hcmtfdHAoKSBtYWNyby4KLQkJICovCi0KLQkJaWYgKGFjdGl2ZSkgewotCQkJLyoKLQkJCSAqIHRyeV9tb2R1bGVfZ2V0IHNob3VsZCBhbHdheXMgc3VjY2VlZCBiZWNhdXNlIHdlIGhvbGQKLQkJCSAqIGxvY2tfbW9kdWxlKCkgdG8gZ2V0IHRoZSB0cF9jYiBhZGRyZXNzLgotCQkJICovCi0JCQlyZXQgPSB0cnlfbW9kdWxlX2dldChfX21vZHVsZV90ZXh0X2FkZHJlc3MoCi0JCQkJKHVuc2lnbmVkIGxvbmcpZWxlbS0+dHBfY2IpKTsKLQkJCUJVR19PTighcmV0KTsKLQkJCXJldCA9IHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXJfbm91cGRhdGUoCi0JCQkJZWxlbS0+dHBfbmFtZSwKLQkJCQllbGVtLT50cF9jYik7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSB0cmFjZXBvaW50X3Byb2JlX3VucmVnaXN0ZXJfbm91cGRhdGUoCi0JCQkJZWxlbS0+dHBfbmFtZSwKLQkJCQllbGVtLT50cF9jYik7Ci0JCQkvKgotCQkJICogdHJhY2Vwb2ludF9wcm9iZV91cGRhdGVfYWxsKCkgbXVzdCBiZSBjYWxsZWQKLQkJCSAqIGJlZm9yZSB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdHBfY2IgaXMgdW5sb2FkZWQuCi0JCQkgKi8KLQkJCW1vZHVsZV9wdXQoX19tb2R1bGVfdGV4dF9hZGRyZXNzKAotCQkJCSh1bnNpZ25lZCBsb25nKWVsZW0tPnRwX2NiKSk7Ci0JCX0KLQl9Ci0JZWxlbS0+c3RhdGUgPSBhY3RpdmU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogRGlzYWJsZSBhIG1hcmtlciBhbmQgaXRzIHByb2JlIGNhbGxiYWNrLgotICogTm90ZTogb25seSB3YWl0aW5nIGFuIFJDVSBwZXJpb2QgYWZ0ZXIgc2V0dGluZyBlbGVtLT5jYWxsIHRvIHRoZSBlbXB0eQotICogZnVuY3Rpb24gaW5zdXJlcyB0aGF0IHRoZSBvcmlnaW5hbCBjYWxsYmFjayBpcyBub3QgdXNlZCBhbnltb3JlLiBUaGlzIGluc3VyZWQKLSAqIGJ5IHJjdV9yZWFkX2xvY2tfc2NoZWQgYXJvdW5kIHRoZSBjYWxsIHNpdGUuCi0gKi8KLXN0YXRpYyB2b2lkIGRpc2FibGVfbWFya2VyKHN0cnVjdCBtYXJrZXIgKmVsZW0pCi17Ci0JaW50IHJldDsKLQotCS8qIGxlYXZlICJjYWxsIiBhcyBpcy4gSXQgaXMga25vd24gc3RhdGljYWxseS4gKi8KLQlpZiAoZWxlbS0+dHBfbmFtZSAmJiBlbGVtLT5zdGF0ZSkgewotCQlXQVJOX09OKCFlbGVtLT50cF9jYik7Ci0JCS8qCi0JCSAqIEl0IGlzIG9rIHRvIGRpcmVjdGx5IGNhbGwgdGhlIHByb2JlIHJlZ2lzdHJhdGlvbiBiZWNhdXNlIHR5cGUKLQkJICogY2hlY2tpbmcgaGFzIGJlZW4gZG9uZSBpbiB0aGUgX190cmFjZV9tYXJrX3RwKCkgbWFjcm8uCi0JCSAqLwotCQlyZXQgPSB0cmFjZXBvaW50X3Byb2JlX3VucmVnaXN0ZXJfbm91cGRhdGUoZWxlbS0+dHBfbmFtZSwKLQkJCWVsZW0tPnRwX2NiKTsKLQkJV0FSTl9PTihyZXQpOwotCQkvKgotCQkgKiB0cmFjZXBvaW50X3Byb2JlX3VwZGF0ZV9hbGwoKSBtdXN0IGJlIGNhbGxlZAotCQkgKiBiZWZvcmUgdGhlIG1vZHVsZSBjb250YWluaW5nIHRwX2NiIGlzIHVubG9hZGVkLgotCQkgKi8KLQkJbW9kdWxlX3B1dChfX21vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpZWxlbS0+dHBfY2IpKTsKLQl9Ci0JZWxlbS0+c3RhdGUgPSAwOwotCWVsZW0tPnNpbmdsZS5mdW5jID0gX19tYXJrX2VtcHR5X2Z1bmN0aW9uOwotCS8qIFVwZGF0ZSB0aGUgZnVuY3Rpb24gYmVmb3JlIHNldHRpbmcgdGhlIHB0eXBlICovCi0Jc21wX3dtYigpOwotCWVsZW0tPnB0eXBlID0gMDsJLyogc2luZ2xlIHByb2JlICovCi0JLyoKLQkgKiBMZWF2ZSB0aGUgcHJpdmF0ZSBkYXRhIGFuZCBpZCB0aGVyZSwgYmVjYXVzZSByZW1vdmFsIGlzIHJhY3kgYW5kCi0JICogc2hvdWxkIGJlIGRvbmUgb25seSBhZnRlciBhbiBSQ1UgcGVyaW9kLiBUaGVzZSBhcmUgbmV2ZXIgdXNlZCB1bnRpbAotCSAqIHRoZSBuZXh0IGluaXRpYWxpemF0aW9uIGFueXdheS4KLQkgKi8KLX0KLQotLyoqCi0gKiBtYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlIC0gVXBkYXRlIGEgcHJvYmUgcmFuZ2UKLSAqIEBiZWdpbjogYmVnaW5uaW5nIG9mIHRoZSByYW5nZQotICogQGVuZDogZW5kIG9mIHRoZSByYW5nZQotICoKLSAqIFVwZGF0ZXMgdGhlIHByb2JlIGNhbGxiYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSByYW5nZSBvZiBtYXJrZXJzLgotICovCi12b2lkIG1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IG1hcmtlciAqYmVnaW4sCi0Jc3RydWN0IG1hcmtlciAqZW5kKQotewotCXN0cnVjdCBtYXJrZXIgKml0ZXI7Ci0Jc3RydWN0IG1hcmtlcl9lbnRyeSAqbWFya19lbnRyeTsKLQotCW11dGV4X2xvY2soJm1hcmtlcnNfbXV0ZXgpOwotCWZvciAoaXRlciA9IGJlZ2luOyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKLQkJbWFya19lbnRyeSA9IGdldF9tYXJrZXIoaXRlci0+bmFtZSk7Ci0JCWlmIChtYXJrX2VudHJ5KSB7Ci0JCQlzZXRfbWFya2VyKG1hcmtfZW50cnksIGl0ZXIsICEhbWFya19lbnRyeS0+cmVmY291bnQpOwotCQkJLyoKLQkJCSAqIGlnbm9yZSBlcnJvciwgY29udGludWUKLQkJCSAqLwotCQl9IGVsc2UgewotCQkJZGlzYWJsZV9tYXJrZXIoaXRlcik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLX0KLQotLyoKLSAqIFVwZGF0ZSBwcm9iZXMsIHJlbW92aW5nIHRoZSBmYXVsdHkgcHJvYmVzLgotICoKLSAqIEludGVybmFsIGNhbGxiYWNrIG9ubHkgY2hhbmdlZCBiZWZvcmUgdGhlIGZpcnN0IHByb2JlIGlzIGNvbm5lY3RlZCB0byBpdC4KLSAqIFNpbmdsZSBwcm9iZSBwcml2YXRlIGRhdGEgY2FuIG9ubHkgYmUgY2hhbmdlZCBvbiAwIC0+IDEgYW5kIDIgLT4gMQotICogdHJhbnNpdGlvbnMuICBBbGwgb3RoZXIgdHJhbnNpdGlvbnMgd2lsbCBsZWF2ZSB0aGUgb2xkIHByaXZhdGUgZGF0YSB2YWxpZC4KLSAqIFRoaXMgbWFrZXMgdGhlIG5vbi1hdG9taWNpdHkgb2YgdGhlIGNhbGxiYWNrL3ByaXZhdGUgZGF0YSB1cGRhdGVzIHZhbGlkLgotICoKLSAqICJzcGVjaWFsIGNhc2UiIHVwZGF0ZXMgOgotICogMCAtPiAxIGNhbGxiYWNrCi0gKiAxIC0+IDAgY2FsbGJhY2sKLSAqIDEgLT4gMiBjYWxsYmFja3MKLSAqIDIgLT4gMSBjYWxsYmFja3MKLSAqIE90aGVyIHVwZGF0ZXMgYWxsIGJlaGF2ZSB0aGUgc2FtZSwganVzdCBsaWtlIHRoZSAyIC0+IDMgb3IgMyAtPiAyIHVwZGF0ZXMuCi0gKiBTaXRlIGVmZmVjdCA6IG1hcmtlcl9zZXRfZm9ybWF0IG1heSBkZWxldGUgdGhlIG1hcmtlciBlbnRyeSAoY3JlYXRpbmcgYQotICogcmVwbGFjZW1lbnQpLgotICovCi1zdGF0aWMgdm9pZCBtYXJrZXJfdXBkYXRlX3Byb2Jlcyh2b2lkKQotewotCS8qIENvcmUga2VybmVsIG1hcmtlcnMgKi8KLQltYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlKF9fc3RhcnRfX19tYXJrZXJzLCBfX3N0b3BfX19tYXJrZXJzKTsKLQkvKiBNYXJrZXJzIGluIG1vZHVsZXMuICovCi0JbW9kdWxlX3VwZGF0ZV9tYXJrZXJzKCk7Ci0JdHJhY2Vwb2ludF9wcm9iZV91cGRhdGVfYWxsKCk7Ci19Ci0KLS8qKgotICogbWFya2VyX3Byb2JlX3JlZ2lzdGVyIC0gIENvbm5lY3QgYSBwcm9iZSB0byBhIG1hcmtlcgotICogQG5hbWU6IG1hcmtlciBuYW1lCi0gKiBAZm9ybWF0OiBmb3JtYXQgc3RyaW5nCi0gKiBAcHJvYmU6IHByb2JlIGhhbmRsZXIKLSAqIEBwcm9iZV9wcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKLSAqCi0gKiBwcml2YXRlIGRhdGEgbXVzdCBiZSBhIHZhbGlkIGFsbG9jYXRlZCBtZW1vcnkgYWRkcmVzcywgb3IgTlVMTC4KLSAqIFJldHVybnMgMCBpZiBvaywgZXJyb3IgdmFsdWUgb24gZXJyb3IuCi0gKiBUaGUgcHJvYmUgYWRkcmVzcyBtdXN0IGF0IGxlYXN0IGJlIGFsaWduZWQgb24gdGhlIGFyY2hpdGVjdHVyZSBwb2ludGVyIHNpemUuCi0gKi8KLWludCBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LAotCQkJbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLCB2b2lkICpwcm9iZV9wcml2YXRlKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OwotCWludCByZXQgPSAwOwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqb2xkOwotCi0JbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7Ci0JZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwotCWlmICghZW50cnkpIHsKLQkJZW50cnkgPSBhZGRfbWFya2VyKG5hbWUsIGZvcm1hdCk7Ci0JCWlmIChJU19FUlIoZW50cnkpKQotCQkJcmV0ID0gUFRSX0VSUihlbnRyeSk7Ci0JfSBlbHNlIGlmIChmb3JtYXQpIHsKLQkJaWYgKCFlbnRyeS0+Zm9ybWF0KQotCQkJcmV0ID0gbWFya2VyX3NldF9mb3JtYXQoZW50cnksIGZvcm1hdCk7Ci0JCWVsc2UgaWYgKHN0cmNtcChlbnRyeS0+Zm9ybWF0LCBmb3JtYXQpKQotCQkJcmV0ID0gLUVQRVJNOwotCX0KLQlpZiAocmV0KQotCQlnb3RvIGVuZDsKLQotCS8qCi0JICogSWYgd2UgZGV0ZWN0IHRoYXQgYSBjYWxsX3JjdSBpcyBwZW5kaW5nIGZvciB0aGlzIG1hcmtlciwKLQkgKiBtYWtlIHN1cmUgaXQncyBleGVjdXRlZCBub3cuCi0JICovCi0JaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQlvbGQgPSBtYXJrZXJfZW50cnlfYWRkX3Byb2JlKGVudHJ5LCBwcm9iZSwgcHJvYmVfcHJpdmF0ZSk7Ci0JaWYgKElTX0VSUihvbGQpKSB7Ci0JCXJldCA9IFBUUl9FUlIob2xkKTsKLQkJZ290byBlbmQ7Ci0JfQotCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7Ci0JbWFya2VyX3VwZGF0ZV9wcm9iZXMoKTsKLQltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKLQllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7Ci0JaWYgKCFlbnRyeSkKLQkJZ290byBlbmQ7Ci0JaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQllbnRyeS0+b2xkcHRyID0gb2xkOwotCWVudHJ5LT5yY3VfcGVuZGluZyA9IDE7Ci0JLyogd3JpdGUgcmN1X3BlbmRpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIFJDVSBjYWxsYmFjayAqLwotCXNtcF93bWIoKTsKLQljYWxsX3JjdV9zY2hlZCgmZW50cnktPnJjdSwgZnJlZV9vbGRfY2xvc3VyZSk7Ci1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX3JlZ2lzdGVyKTsKLQotLyoqCi0gKiBtYXJrZXJfcHJvYmVfdW5yZWdpc3RlciAtICBEaXNjb25uZWN0IGEgcHJvYmUgZnJvbSBhIG1hcmtlcgotICogQG5hbWU6IG1hcmtlciBuYW1lCi0gKiBAcHJvYmU6IHByb2JlIGZ1bmN0aW9uIHBvaW50ZXIKLSAqIEBwcm9iZV9wcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKLSAqCi0gKiBSZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgZ2l2ZW4gdG8gbWFya2VyX3Byb2JlX3JlZ2lzdGVyLCBvciBhbiBFUlJfUFRSKCkuCi0gKiBXZSBkbyBub3QgbmVlZCB0byBjYWxsIGEgc3luY2hyb25pemVfc2NoZWQgdG8gbWFrZSBzdXJlIHRoZSBwcm9iZXMgaGF2ZQotICogZmluaXNoZWQgcnVubmluZyBiZWZvcmUgZG9pbmcgYSBtb2R1bGUgdW5sb2FkLCBiZWNhdXNlIHRoZSBtb2R1bGUgdW5sb2FkCi0gKiBpdHNlbGYgdXNlcyBzdG9wX21hY2hpbmUoKSwgd2hpY2ggaW5zdXJlcyB0aGF0IGV2ZXJ5IHByZWVtcHQgZGlzYWJsZWQgc2VjdGlvbgotICogaGF2ZSBmaW5pc2hlZC4KLSAqLwotaW50IG1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCi0JbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLCB2b2lkICpwcm9iZV9wcml2YXRlKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqb2xkOwotCWludCByZXQgPSAtRU5PRU5UOwotCi0JbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7Ci0JZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwotCWlmICghZW50cnkpCi0JCWdvdG8gZW5kOwotCWlmIChlbnRyeS0+cmN1X3BlbmRpbmcpCi0JCXJjdV9iYXJyaWVyX3NjaGVkKCk7Ci0Jb2xkID0gbWFya2VyX2VudHJ5X3JlbW92ZV9wcm9iZShlbnRyeSwgcHJvYmUsIHByb2JlX3ByaXZhdGUpOwotCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7Ci0JbWFya2VyX3VwZGF0ZV9wcm9iZXMoKTsKLQltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKLQllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7Ci0JaWYgKCFlbnRyeSkKLQkJZ290byBlbmQ7Ci0JaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKLQkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKLQllbnRyeS0+b2xkcHRyID0gb2xkOwotCWVudHJ5LT5yY3VfcGVuZGluZyA9IDE7Ci0JLyogd3JpdGUgcmN1X3BlbmRpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIFJDVSBjYWxsYmFjayAqLwotCXNtcF93bWIoKTsKLQljYWxsX3JjdV9zY2hlZCgmZW50cnktPnJjdSwgZnJlZV9vbGRfY2xvc3VyZSk7Ci0JcmVtb3ZlX21hcmtlcihuYW1lKTsJLyogSWdub3JlIGJ1c3kgZXJyb3IgbWVzc2FnZSAqLwotCXJldCA9IDA7Ci1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX3VucmVnaXN0ZXIpOwotCi1zdGF0aWMgc3RydWN0IG1hcmtlcl9lbnRyeSAqCi1nZXRfbWFya2VyX2Zyb21fcHJpdmF0ZV9kYXRhKG1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwgdm9pZCAqcHJvYmVfcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVJLRVJfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhlYWQgPSAmbWFya2VyX3RhYmxlW2ldOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKLQkJCWlmICghZW50cnktPnB0eXBlKSB7Ci0JCQkJaWYgKGVudHJ5LT5zaW5nbGUuZnVuYyA9PSBwcm9iZQotCQkJCQkJJiYgZW50cnktPnNpbmdsZS5wcm9iZV9wcml2YXRlCi0JCQkJCQk9PSBwcm9iZV9wcml2YXRlKQotCQkJCQlyZXR1cm4gZW50cnk7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqY2xvc3VyZTsKLQkJCQljbG9zdXJlID0gZW50cnktPm11bHRpOwotCQkJCWZvciAoaSA9IDA7IGNsb3N1cmVbaV0uZnVuYzsgaSsrKSB7Ci0JCQkJCWlmIChjbG9zdXJlW2ldLmZ1bmMgPT0gcHJvYmUgJiYKLQkJCQkJCQljbG9zdXJlW2ldLnByb2JlX3ByaXZhdGUKLQkJCQkJCQk9PSBwcm9iZV9wcml2YXRlKQotCQkJCQkJcmV0dXJuIGVudHJ5OwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBtYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcl9wcml2YXRlX2RhdGEgLSAgRGlzY29ubmVjdCBhIHByb2JlIGZyb20gYSBtYXJrZXIKLSAqIEBwcm9iZTogcHJvYmUgZnVuY3Rpb24KLSAqIEBwcm9iZV9wcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKLSAqCi0gKiBVbnJlZ2lzdGVyIGEgcHJvYmUgYnkgcHJvdmlkaW5nIHRoZSByZWdpc3RlcmVkIHByaXZhdGUgZGF0YS4KLSAqIE9ubHkgcmVtb3ZlcyB0aGUgZmlyc3QgbWFya2VyIGZvdW5kIGluIGhhc2ggdGFibGUuCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlLgotICogV2UgZG8gbm90IG5lZWQgdG8gY2FsbCBhIHN5bmNocm9uaXplX3NjaGVkIHRvIG1ha2Ugc3VyZSB0aGUgcHJvYmVzIGhhdmUKLSAqIGZpbmlzaGVkIHJ1bm5pbmcgYmVmb3JlIGRvaW5nIGEgbW9kdWxlIHVubG9hZCwgYmVjYXVzZSB0aGUgbW9kdWxlIHVubG9hZAotICogaXRzZWxmIHVzZXMgc3RvcF9tYWNoaW5lKCksIHdoaWNoIGluc3VyZXMgdGhhdCBldmVyeSBwcmVlbXB0IGRpc2FibGVkIHNlY3Rpb24KLSAqIGhhdmUgZmluaXNoZWQuCi0gKi8KLWludCBtYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcl9wcml2YXRlX2RhdGEobWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLAotCQl2b2lkICpwcm9iZV9wcml2YXRlKQotewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OwotCWludCByZXQgPSAwOwotCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqb2xkOwotCi0JbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7Ci0JZW50cnkgPSBnZXRfbWFya2VyX2Zyb21fcHJpdmF0ZV9kYXRhKHByb2JlLCBwcm9iZV9wcml2YXRlKTsKLQlpZiAoIWVudHJ5KSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZW5kOwotCX0KLQlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQotCQlyY3VfYmFycmllcl9zY2hlZCgpOwotCW9sZCA9IG1hcmtlcl9lbnRyeV9yZW1vdmVfcHJvYmUoZW50cnksIE5VTEwsIHByb2JlX3ByaXZhdGUpOwotCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7Ci0JbWFya2VyX3VwZGF0ZV9wcm9iZXMoKTsKLQltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKLQllbnRyeSA9IGdldF9tYXJrZXJfZnJvbV9wcml2YXRlX2RhdGEocHJvYmUsIHByb2JlX3ByaXZhdGUpOwotCWlmICghZW50cnkpCi0JCWdvdG8gZW5kOwotCWlmIChlbnRyeS0+cmN1X3BlbmRpbmcpCi0JCXJjdV9iYXJyaWVyX3NjaGVkKCk7Ci0JZW50cnktPm9sZHB0ciA9IG9sZDsKLQllbnRyeS0+cmN1X3BlbmRpbmcgPSAxOwotCS8qIHdyaXRlIHJjdV9wZW5kaW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBSQ1UgY2FsbGJhY2sgKi8KLQlzbXBfd21iKCk7Ci0JY2FsbF9yY3Vfc2NoZWQoJmVudHJ5LT5yY3UsIGZyZWVfb2xkX2Nsb3N1cmUpOwotCXJlbW92ZV9tYXJrZXIoZW50cnktPm5hbWUpOwkvKiBJZ25vcmUgYnVzeSBlcnJvciBtZXNzYWdlICovCi1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX3VucmVnaXN0ZXJfcHJpdmF0ZV9kYXRhKTsKLQotLyoqCi0gKiBtYXJrZXJfZ2V0X3ByaXZhdGVfZGF0YSAtIEdldCBhIG1hcmtlcidzIHByb2JlIHByaXZhdGUgZGF0YQotICogQG5hbWU6IG1hcmtlciBuYW1lCi0gKiBAcHJvYmU6IHByb2JlIHRvIG1hdGNoCi0gKiBAbnVtOiBnZXQgdGhlIG50aCBtYXRjaGluZyBwcm9iZSdzIHByaXZhdGUgZGF0YQotICoKLSAqIFJldHVybnMgdGhlIG50aCBwcml2YXRlIGRhdGEgcG9pbnRlciAoc3RhcnRpbmcgZnJvbSAwKSBtYXRjaGluZywgb3IgYW4KLSAqIEVSUl9QVFIuCi0gKiBSZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciwgb3IgYW4gRVJSX1BUUi4KLSAqIFRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzaG91bGQgX29ubHlfIGJlIGRlcmVmZXJlbmNlZCBpZiB0aGUgY2FsbGVyIGlzIHRoZQotICogb3duZXIgb2YgdGhlIGRhdGEsIG9yIGl0cyBjb250ZW50IGNvdWxkIHZhbmlzaC4gVGhpcyBpcyBtb3N0bHkgdXNlZCB0bwotICogY29uZmlybSB0aGF0IGEgY2FsbGVyIGlzIHRoZSBvd25lciBvZiBhIHJlZ2lzdGVyZWQgcHJvYmUuCi0gKi8KLXZvaWQgKm1hcmtlcl9nZXRfcHJpdmF0ZV9kYXRhKGNvbnN0IGNoYXIgKm5hbWUsIG1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwKLQkJaW50IG51bSkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplOwotCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBuYW1lX2xlbi0xLCAwKTsKLQlpbnQgaTsKLQotCWhlYWQgPSAmbWFya2VyX3RhYmxlW2hhc2ggJiAoKDEgPDwgTUFSS0VSX0hBU0hfQklUUyktMSldOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsIGhlYWQsIGhsaXN0KSB7Ci0JCWlmICghc3RyY21wKG5hbWUsIGUtPm5hbWUpKSB7Ci0JCQlpZiAoIWUtPnB0eXBlKSB7Ci0JCQkJaWYgKG51bSA9PSAwICYmIGUtPnNpbmdsZS5mdW5jID09IHByb2JlKQotCQkJCQlyZXR1cm4gZS0+c2luZ2xlLnByb2JlX3ByaXZhdGU7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqY2xvc3VyZTsKLQkJCQlpbnQgbWF0Y2ggPSAwOwotCQkJCWNsb3N1cmUgPSBlLT5tdWx0aTsKLQkJCQlmb3IgKGkgPSAwOyBjbG9zdXJlW2ldLmZ1bmM7IGkrKykgewotCQkJCQlpZiAoY2xvc3VyZVtpXS5mdW5jICE9IHByb2JlKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWlmIChtYXRjaCsrID09IG51bSkKLQkJCQkJCXJldHVybiBjbG9zdXJlW2ldLnByb2JlX3ByaXZhdGU7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfZ2V0X3ByaXZhdGVfZGF0YSk7Ci0KLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCi1pbnQgbWFya2VyX21vZHVsZV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAotCQkJIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGRhdGE7Ci0KLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgTU9EVUxFX1NUQVRFX0NPTUlORzoKLQkJbWFya2VyX3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPm1hcmtlcnMsCi0JCQltb2QtPm1hcmtlcnMgKyBtb2QtPm51bV9tYXJrZXJzKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RVTEVfU1RBVEVfR09JTkc6Ci0JCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAotCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2Vycyk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1hcmtlcl9tb2R1bGVfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBtYXJrZXJfbW9kdWxlX25vdGlmeSwKLQkucHJpb3JpdHkgPSAwLAotfTsKLQotc3RhdGljIGludCBpbml0X21hcmtlcnModm9pZCkKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKCZtYXJrZXJfbW9kdWxlX25iKTsKLX0KLV9faW5pdGNhbGwoaW5pdF9tYXJrZXJzKTsKLQotI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMDVjZTQ5Yy4uZTZiYzRiMiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGljZW5zZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KQEAgLTE1MzUsNiArMTUzNiwxMCBAQAogCiAJLyogRmluYWxseSwgZnJlZSB0aGUgY29yZSAoY29udGFpbmluZyB0aGUgbW9kdWxlIHN0cnVjdHVyZSkgKi8KIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCisjaWZkZWYgQ09ORklHX01QVQorCXVwZGF0ZV9wcm90ZWN0aW9ucyhjdXJyZW50LT5tbSk7CisjZW5kaWYKIH0KIAogdm9pZCAqX19zeW1ib2xfZ2V0KGNvbnN0IGNoYXIgKnN5bWJvbCkKQEAgLTIyMzcsMTAgKzIyNDIsNiBAQAogCQkJCSAgc2l6ZW9mKCptb2QtPmN0b3JzKSwgJm1vZC0+bnVtX2N0b3JzKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BUktFUlMKLQltb2QtPm1hcmtlcnMgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19tYXJrZXJzIiwKLQkJCQkgICAgc2l6ZW9mKCptb2QtPm1hcmtlcnMpLCAmbW9kLT5udW1fbWFya2Vycyk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKIAltb2QtPnRyYWNlcG9pbnRzID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKIAkJCQkJIl9fdHJhY2Vwb2ludHMiLApAQCAtMjk1OCwyMCArMjk1OSw2IEBACiBFWFBPUlRfU1lNQk9MKG1vZHVsZV9sYXlvdXQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTUFSS0VSUwotdm9pZCBtb2R1bGVfdXBkYXRlX21hcmtlcnModm9pZCkKLXsKLQlzdHJ1Y3QgbW9kdWxlICptb2Q7Ci0KLQltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkKLQkJaWYgKCFtb2QtPnRhaW50cykKLQkJCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAotCQkJCW1vZC0+bWFya2VycyArIG1vZC0+bnVtX21hcmtlcnMpOwotCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiB2b2lkIG1vZHVsZV91cGRhdGVfdHJhY2Vwb2ludHModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggNTEyYWI3My4uYmNkZWYyNiAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICogICdXJyAtIFRhaW50IG9uIHdhcm5pbmcuCiAgKiAgJ0MnIC0gbW9kdWxlcyBmcm9tIGRyaXZlcnMvc3RhZ2luZyBhcmUgbG9hZGVkLgogICoKLSAqCVRoZSBzdHJpbmcgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgY2FsbCB0byBwcmludF90YWludCgpLgorICoJVGhlIHN0cmluZyBpcyBvdmVyd3JpdHRlbiBieSB0aGUgbmV4dCBjYWxsIHRvIHByaW50X3RhaW50ZWQoKS4KICAqLwogY29uc3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfY291bnRlci5jIGIva2VybmVsL3BlcmZfY291bnRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2I5NGE1Li4wMDAwMDAwCi0tLSBhL2tlcm5lbC9wZXJmX2NvdW50ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5NjMgKzAsMCBAQAotLyoKLSAqIFBlcmZvcm1hbmNlIGNvdW50ZXIgY29yZSBjb2RlCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgotICogIENvcHlyaWdodCAgqSAgMjAwOSBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnAuIDxwYXVsdXNAYXUxLmlibS5jb20+Ci0gKgotICogIEZvciBsaWNlbnNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgotCi0jaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+Ci0KLS8qCi0gKiBFYWNoIENQVSBoYXMgYSBsaXN0IG9mIHBlciBDUFUgY291bnRlcnM6Ci0gKi8KLURFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0LCBwZXJmX2NwdV9jb250ZXh0KTsKLQotaW50IHBlcmZfbWF4X2NvdW50ZXJzIF9fcmVhZF9tb3N0bHkgPSAxOwotc3RhdGljIGludCBwZXJmX3Jlc2VydmVkX3BlcmNwdSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGludCBwZXJmX292ZXJjb21taXQgX19yZWFkX21vc3RseSA9IDE7Ci0KLXN0YXRpYyBhdG9taWNfdCBucl9jb3VudGVycyBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGF0b21pY190IG5yX21tYXBfY291bnRlcnMgX19yZWFkX21vc3RseTsKLXN0YXRpYyBhdG9taWNfdCBucl9jb21tX2NvdW50ZXJzIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgYXRvbWljX3QgbnJfdGFza19jb3VudGVycyBfX3JlYWRfbW9zdGx5OwotCi0vKgotICogcGVyZiBjb3VudGVyIHBhcmFub2lhIGxldmVsOgotICogIC0xIC0gbm90IHBhcmFub2lkIGF0IGFsbAotICogICAwIC0gZGlzYWxsb3cgcmF3IHRyYWNlcG9pbnQgYWNjZXNzIGZvciB1bnByaXYKLSAqICAgMSAtIGRpc2FsbG93IGNwdSBjb3VudGVycyBmb3IgdW5wcml2Ci0gKiAgIDIgLSBkaXNhbGxvdyBrZXJuZWwgcHJvZmlsaW5nIGZvciB1bnByaXYKLSAqLwotaW50IHN5c2N0bF9wZXJmX2NvdW50ZXJfcGFyYW5vaWQgX19yZWFkX21vc3RseSA9IDE7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJmX3BhcmFub2lkX3RyYWNlcG9pbnRfcmF3KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2N0bF9wZXJmX2NvdW50ZXJfcGFyYW5vaWQgPiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHBlcmZfcGFyYW5vaWRfY3B1KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2N0bF9wZXJmX2NvdW50ZXJfcGFyYW5vaWQgPiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF9rZXJuZWwodm9pZCkKLXsKLQlyZXR1cm4gc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCA+IDE7Ci19Ci0KLWludCBzeXNjdGxfcGVyZl9jb3VudGVyX21sb2NrIF9fcmVhZF9tb3N0bHkgPSA1MTI7IC8qICdmcmVlJyBrYiBwZXIgdXNlciAqLwotCi0vKgotICogbWF4IHBlcmYgY291bnRlciBzYW1wbGUgcmF0ZQotICovCi1pbnQgc3lzY3RsX3BlcmZfY291bnRlcl9zYW1wbGVfcmF0ZSBfX3JlYWRfbW9zdGx5ID0gMTAwMDAwOwotCi1zdGF0aWMgYXRvbWljNjRfdCBwZXJmX2NvdW50ZXJfaWQ7Ci0KLS8qCi0gKiBMb2NrIGZvciAoc3lzYWRtaW4tY29uZmlndXJhYmxlKSBjb3VudGVyIHJlc2VydmF0aW9uczoKLSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhwZXJmX3Jlc291cmNlX2xvY2spOwotCi0vKgotICogQXJjaGl0ZWN0dXJlIHByb3ZpZGVkIEFQSXMgLSB3ZWFrIGFsaWFzZXM6Ci0gKi8KLWV4dGVybiBfX3dlYWsgY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBfX3dlYWsgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCQl7IGJhcnJpZXIoKTsgfQotdm9pZCBfX3dlYWsgaHdfcGVyZl9lbmFibGUodm9pZCkJCXsgYmFycmllcigpOyB9Ci0KLXZvaWQgX193ZWFrIGh3X3BlcmZfY291bnRlcl9zZXR1cChpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQotdm9pZCBfX3dlYWsgaHdfcGVyZl9jb3VudGVyX3NldHVwX29ubGluZShpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQotCi1pbnQgX193ZWFrCi1od19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwX2xlYWRlciwKLQkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsIGludCBjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX193ZWFrIHBlcmZfY291bnRlcl9wcmludF9kZWJ1Zyh2b2lkKQl7IH0KLQotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcGVyZl9kaXNhYmxlX2NvdW50KTsKLQotdm9pZCBfX3BlcmZfZGlzYWJsZSh2b2lkKQotewotCV9fZ2V0X2NwdV92YXIocGVyZl9kaXNhYmxlX2NvdW50KSsrOwotfQotCi1ib29sIF9fcGVyZl9lbmFibGUodm9pZCkKLXsKLQlyZXR1cm4gIS0tX19nZXRfY3B1X3ZhcihwZXJmX2Rpc2FibGVfY291bnQpOwotfQotCi12b2lkIHBlcmZfZGlzYWJsZSh2b2lkKQotewotCV9fcGVyZl9kaXNhYmxlKCk7Ci0JaHdfcGVyZl9kaXNhYmxlKCk7Ci19Ci0KLXZvaWQgcGVyZl9lbmFibGUodm9pZCkKLXsKLQlpZiAoX19wZXJmX2VuYWJsZSgpKQotCQlod19wZXJmX2VuYWJsZSgpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCVdBUk5fT04oIWF0b21pY19pbmNfbm90X3plcm8oJmN0eC0+cmVmY291bnQpKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9jdHgoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4OwotCi0JY3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCwgcmN1X2hlYWQpOwotCWtmcmVlKGN0eCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dF9jdHgoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmY291bnQpKSB7Ci0JCWlmIChjdHgtPnBhcmVudF9jdHgpCi0JCQlwdXRfY3R4KGN0eC0+cGFyZW50X2N0eCk7Ci0JCWlmIChjdHgtPnRhc2spCi0JCQlwdXRfdGFza19zdHJ1Y3QoY3R4LT50YXNrKTsKLQkJY2FsbF9yY3UoJmN0eC0+cmN1X2hlYWQsIGZyZWVfY3R4KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHVuY2xvbmVfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCWlmIChjdHgtPnBhcmVudF9jdHgpIHsKLQkJcHV0X2N0eChjdHgtPnBhcmVudF9jdHgpOwotCQljdHgtPnBhcmVudF9jdHggPSBOVUxMOwotCX0KLX0KLQotLyoKLSAqIElmIHdlIGluaGVyaXQgY291bnRlcnMgd2Ugd2FudCB0byByZXR1cm4gdGhlIHBhcmVudCBjb3VudGVyIGlkCi0gKiB0byB1c2Vyc3BhY2UuCi0gKi8KLXN0YXRpYyB1NjQgcHJpbWFyeV9jb3VudGVyX2lkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JdTY0IGlkID0gY291bnRlci0+aWQ7Ci0KLQlpZiAoY291bnRlci0+cGFyZW50KQotCQlpZCA9IGNvdW50ZXItPnBhcmVudC0+aWQ7Ci0KLQlyZXR1cm4gaWQ7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIHBlcmZfY291bnRlcl9jb250ZXh0IGZvciBhIHRhc2sgYW5kIGxvY2sgaXQuCi0gKiBUaGlzIGhhcyB0byBjb3BlIHdpdGggd2l0aCB0aGUgZmFjdCB0aGF0IHVudGlsIGl0IGlzIGxvY2tlZCwKLSAqIHRoZSBjb250ZXh0IGNvdWxkIGdldCBtb3ZlZCB0byBhbm90aGVyIHRhc2suCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKgotcGVyZl9sb2NrX3Rhc2tfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4OwotCi0JcmN1X3JlYWRfbG9jaygpOwotIHJldHJ5OgotCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5wZXJmX2NvdW50ZXJfY3R4cCk7Ci0JaWYgKGN0eCkgewotCQkvKgotCQkgKiBJZiB0aGlzIGNvbnRleHQgaXMgYSBjbG9uZSBvZiBhbm90aGVyLCBpdCBtaWdodAotCQkgKiBnZXQgc3dhcHBlZCBmb3IgYW5vdGhlciB1bmRlcm5lYXRoIHVzIGJ5Ci0JCSAqIHBlcmZfY291bnRlcl90YXNrX3NjaGVkX291dCwgdGhvdWdoIHRoZQotCQkgKiByY3VfcmVhZF9sb2NrKCkgcHJvdGVjdHMgdXMgZnJvbSBhbnkgY29udGV4dAotCQkgKiBnZXR0aW5nIGZyZWVkLiAgTG9jayB0aGUgY29udGV4dCBhbmQgY2hlY2sgaWYgaXQKLQkJICogZ290IHN3YXBwZWQgYmVmb3JlIHdlIGNvdWxkIGdldCB0aGUgbG9jaywgYW5kIHJldHJ5Ci0JCSAqIGlmIHNvLiAgSWYgd2UgbG9ja2VkIHRoZSByaWdodCBjb250ZXh0LCB0aGVuIGl0Ci0JCSAqIGNhbid0IGdldCBzd2FwcGVkIG9uIHVzIGFueSBtb3JlLgotCQkgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgKmZsYWdzKTsKLQkJaWYgKGN0eCAhPSByY3VfZGVyZWZlcmVuY2UodGFzay0+cGVyZl9jb3VudGVyX2N0eHApKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssICpmbGFncyk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0KLQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdHgtPnJlZmNvdW50KSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOwotCQkJY3R4ID0gTlVMTDsKLQkJfQotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gY3R4OwotfQotCi0vKgotICogR2V0IHRoZSBjb250ZXh0IGZvciBhIHRhc2sgYW5kIGluY3JlbWVudCBpdHMgcGluX2NvdW50IHNvIGl0Ci0gKiBjYW4ndCBnZXQgc3dhcHBlZCB0byBhbm90aGVyIHRhc2suICBUaGlzIGFsc28gaW5jcmVtZW50cyBpdHMKLSAqIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IHRoZSBjb250ZXh0IGNhbid0IGdldCBmcmVlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqcGVyZl9waW5fdGFza19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JY3R4ID0gcGVyZl9sb2NrX3Rhc2tfY29udGV4dCh0YXNrLCAmZmxhZ3MpOwotCWlmIChjdHgpIHsKLQkJKytjdHgtPnBpbl9jb3VudDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiBjdHg7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfdW5waW5fY29udGV4dChzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOwotCS0tY3R4LT5waW5fY291bnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7Ci0JcHV0X2N0eChjdHgpOwotfQotCi0vKgotICogQWRkIGEgY291bnRlciBmcm9tIHRoZSBsaXN0cyBmb3IgaXRzIGNvbnRleHQuCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGN0eC0+bXV0ZXggYW5kIGN0eC0+bG9jayBoZWxkLgotICovCi1zdGF0aWMgdm9pZAotbGlzdF9hZGRfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cF9sZWFkZXIgPSBjb3VudGVyLT5ncm91cF9sZWFkZXI7Ci0KLQkvKgotCSAqIERlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGEgc3RhbmRhbG9uZSBvciBzaWJsaW5nIGNvdW50ZXIsCi0JICogYWRkIGl0IHN0cmFpZ2h0IHRvIHRoZSBjb250ZXh0J3MgY291bnRlciBsaXN0LCBvciB0byB0aGUgZ3JvdXAKLQkgKiBsZWFkZXIncyBzaWJsaW5nIGxpc3Q6Ci0JICovCi0JaWYgKGdyb3VwX2xlYWRlciA9PSBjb3VudGVyKQotCQlsaXN0X2FkZF90YWlsKCZjb3VudGVyLT5saXN0X2VudHJ5LCAmY3R4LT5jb3VudGVyX2xpc3QpOwotCWVsc2UgewotCQlsaXN0X2FkZF90YWlsKCZjb3VudGVyLT5saXN0X2VudHJ5LCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QpOwotCQlncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzKys7Ci0JfQotCi0JbGlzdF9hZGRfcmN1KCZjb3VudGVyLT5ldmVudF9lbnRyeSwgJmN0eC0+ZXZlbnRfbGlzdCk7Ci0JY3R4LT5ucl9jb3VudGVycysrOwotCWlmIChjb3VudGVyLT5hdHRyLmluaGVyaXRfc3RhdCkKLQkJY3R4LT5ucl9zdGF0Kys7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSBjb3VudGVyIGZyb20gdGhlIGxpc3RzIGZvciBpdHMgY29udGV4dC4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBhbmQgY3R4LT5sb2NrIGhlbGQuCi0gKi8KLXN0YXRpYyB2b2lkCi1saXN0X2RlbF9jb3VudGVyKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKnNpYmxpbmcsICp0bXA7Ci0KLQlpZiAobGlzdF9lbXB0eSgmY291bnRlci0+bGlzdF9lbnRyeSkpCi0JCXJldHVybjsKLQljdHgtPm5yX2NvdW50ZXJzLS07Ci0JaWYgKGNvdW50ZXItPmF0dHIuaW5oZXJpdF9zdGF0KQotCQljdHgtPm5yX3N0YXQtLTsKLQotCWxpc3RfZGVsX2luaXQoJmNvdW50ZXItPmxpc3RfZW50cnkpOwotCWxpc3RfZGVsX3JjdSgmY291bnRlci0+ZXZlbnRfZW50cnkpOwotCi0JaWYgKGNvdW50ZXItPmdyb3VwX2xlYWRlciAhPSBjb3VudGVyKQotCQljb3VudGVyLT5ncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzLS07Ci0KLQkvKgotCSAqIElmIHRoaXMgd2FzIGEgZ3JvdXAgY291bnRlciB3aXRoIHNpYmxpbmcgY291bnRlcnMgdGhlbgotCSAqIHVwZ3JhZGUgdGhlIHNpYmxpbmdzIHRvIHNpbmdsZXRvbiBjb3VudGVycyBieSBhZGRpbmcgdGhlbQotCSAqIHRvIHRoZSBjb250ZXh0IGxpc3QgZGlyZWN0bHk6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIHRtcCwKLQkJCQkgJmNvdW50ZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkgewotCi0JCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5saXN0X2VudHJ5LCAmY3R4LT5jb3VudGVyX2xpc3QpOwotCQlzaWJsaW5nLT5ncm91cF9sZWFkZXIgPSBzaWJsaW5nOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWNvdW50ZXJfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCSAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJICBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQlpZiAoY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRSkKLQkJcmV0dXJuOwotCi0JY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkU7Ci0JaWYgKGNvdW50ZXItPnBlbmRpbmdfZGlzYWJsZSkgewotCQljb3VudGVyLT5wZW5kaW5nX2Rpc2FibGUgPSAwOwotCQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9PRkY7Ci0JfQotCWNvdW50ZXItPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOwotCWNvdW50ZXItPnBtdS0+ZGlzYWJsZShjb3VudGVyKTsKLQljb3VudGVyLT5vbmNwdSA9IC0xOwotCi0JaWYgKCFpc19zb2Z0d2FyZV9jb3VudGVyKGNvdW50ZXIpKQotCQljcHVjdHgtPmFjdGl2ZV9vbmNwdS0tOwotCWN0eC0+bnJfYWN0aXZlLS07Ci0JaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVzaXZlIHx8ICFjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKLQkJY3B1Y3R4LT5leGNsdXNpdmUgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3JvdXBfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwX2NvdW50ZXIsCi0JCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQlpZiAoZ3JvdXBfY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRSkKLQkJcmV0dXJuOwotCi0JY291bnRlcl9zY2hlZF9vdXQoZ3JvdXBfY291bnRlciwgY3B1Y3R4LCBjdHgpOwotCi0JLyoKLQkgKiBTY2hlZHVsZSBvdXQgc2libGluZ3MgKGlmIGFueSk6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZ3JvdXBfY291bnRlci0+c2libGluZ19saXN0LCBsaXN0X2VudHJ5KQotCQljb3VudGVyX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0KLQlpZiAoZ3JvdXBfY291bnRlci0+YXR0ci5leGNsdXNpdmUpCi0JCWNwdWN0eC0+ZXhjbHVzaXZlID0gMDsKLX0KLQotLyoKLSAqIENyb3NzIENQVSBjYWxsIHRvIHJlbW92ZSBhIHBlcmZvcm1hbmNlIGNvdW50ZXIKLSAqCi0gKiBXZSBkaXNhYmxlIHRoZSBjb3VudGVyIG9uIHRoZSBoYXJkd2FyZSBsZXZlbCBmaXJzdC4gQWZ0ZXIgdGhhdCB3ZQotICogcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfcmVtb3ZlX2Zyb21fY29udGV4dCh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gaW5mbzsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHRhc2sgY29udGV4dCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzCi0JICogdGhlIGN1cnJlbnQgdGFzayBjb250ZXh0IG9mIHRoaXMgY3B1LiBJZiBub3QgaXQgaGFzIGJlZW4KLQkgKiBzY2hlZHVsZWQgb3V0IGJlZm9yZSB0aGUgc21wIGNhbGwgYXJyaXZlZC4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBQcm90ZWN0IHRoZSBsaXN0IG9wZXJhdGlvbiBhZ2FpbnN0IE5NSSBieSBkaXNhYmxpbmcgdGhlCi0JICogY291bnRlcnMgb24gYSBnbG9iYWwgbGV2ZWwuCi0JICovCi0JcGVyZl9kaXNhYmxlKCk7Ci0KLQljb3VudGVyX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0KLQlsaXN0X2RlbF9jb3VudGVyKGNvdW50ZXIsIGN0eCk7Ci0KLQlpZiAoIWN0eC0+dGFzaykgewotCQkvKgotCQkgKiBBbGxvdyBtb3JlIHBlciB0YXNrIGNvdW50ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUKLQkJICogcmVzZXJ2YXRpb246Ci0JCSAqLwotCQljcHVjdHgtPm1heF9wZXJ0YXNrID0KLQkJCW1pbihwZXJmX21heF9jb3VudGVycyAtIGN0eC0+bnJfY291bnRlcnMsCi0JCQkgICAgcGVyZl9tYXhfY291bnRlcnMgLSBwZXJmX3Jlc2VydmVkX3BlcmNwdSk7Ci0JfQotCi0JcGVyZl9lbmFibGUoKTsKLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLX0KLQotCi0vKgotICogUmVtb3ZlIHRoZSBjb3VudGVyIGZyb20gYSB0YXNrJ3MgKG9yIGEgQ1BVJ3MpIGxpc3Qgb2YgY291bnRlcnMuCi0gKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGhlbGQuCi0gKgotICogQ1BVIGNvdW50ZXJzIGFyZSByZW1vdmVkIHdpdGggYSBzbXAgY2FsbC4gRm9yIHRhc2sgY291bnRlcnMgd2Ugb25seQotICogY2FsbCB3aGVuIHRoZSB0YXNrIGlzIG9uIGEgQ1BVLgotICoKLSAqIElmIGNvdW50ZXItPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKLSAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgY291bnRlci0+Y3R4LT50YXNrIGNvdWxkIHBvc3NpYmx5IHBvaW50IHRvCi0gKiByZW1haW5zIHZhbGlkLiAgVGhpcyBpcyBPSyB3aGVuIGNhbGxlZCBmcm9tIHBlcmZfcmVsZWFzZSBzaW5jZQotICogdGhhdCBvbmx5IGNhbGxzIHVzIG9uIHRoZSB0b3AtbGV2ZWwgY29udGV4dCwgd2hpY2ggY2FuJ3QgYmUgYSBjbG9uZS4KLSAqIFdoZW4gY2FsbGVkIGZyb20gcGVyZl9jb3VudGVyX2V4aXRfdGFzaywgaXQncyBPSyBiZWNhdXNlIHRoZQotICogY29udGV4dCBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIGl0cyB0YXNrLgotICovCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfcmVtb3ZlX2Zyb21fY29udGV4dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gY291bnRlci0+Y3R4OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN0eC0+dGFzazsKLQotCWlmICghdGFzaykgewotCQkvKgotCQkgKiBQZXIgY3B1IGNvdW50ZXJzIGFyZSByZW1vdmVkIHZpYSBhbiBzbXAgY2FsbCBhbmQKLQkJICogdGhlIHJlbW92YWwgaXMgYWx3YXlzIHN1Y2Vzc2Z1bC4KLQkJICovCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjb3VudGVyLT5jcHUsCi0JCQkJCSBfX3BlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0LAotCQkJCQkgY291bnRlciwgMSk7Ci0JCXJldHVybjsKLQl9Ci0KLXJldHJ5OgotCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0LAotCQkJCSBjb3VudGVyKTsKLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBJZiB0aGUgY29udGV4dCBpcyBhY3RpdmUgd2UgbmVlZCB0byByZXRyeSB0aGUgc21wIGNhbGwuCi0JICovCi0JaWYgKGN0eC0+bnJfYWN0aXZlICYmICFsaXN0X2VtcHR5KCZjb3VudGVyLT5saXN0X2VudHJ5KSkgewotCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCi0JLyoKLQkgKiBUaGUgbG9jayBwcmV2ZW50cyB0aGF0IHRoaXMgY29udGV4dCBpcyBzY2hlZHVsZWQgaW4gc28gd2UKLQkgKiBjYW4gcmVtb3ZlIHRoZSBjb3VudGVyIHNhZmVseSwgaWYgdGhlIGNhbGwgYWJvdmUgZGlkIG5vdAotCSAqIHN1Y2NlZWQuCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZjb3VudGVyLT5saXN0X2VudHJ5KSkgewotCQlsaXN0X2RlbF9jb3VudGVyKGNvdW50ZXIsIGN0eCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgcGVyZl9jbG9jayh2b2lkKQotewotCXJldHVybiBjcHVfY2xvY2soc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLX0KLQotLyoKLSAqIFVwZGF0ZSB0aGUgcmVjb3JkIG9mIHRoZSBjdXJyZW50IHRpbWUgaW4gYSBjb250ZXh0LgotICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfY29udGV4dF90aW1lKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7Ci0KLQljdHgtPnRpbWUgKz0gbm93IC0gY3R4LT50aW1lc3RhbXA7Ci0JY3R4LT50aW1lc3RhbXAgPSBub3c7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgdGhlIHRvdGFsX3RpbWVfZW5hYmxlZCBhbmQgdG90YWxfdGltZV9ydW5uaW5nIGZpZWxkcyBmb3IgYSBjb3VudGVyLgotICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfY291bnRlcl90aW1lcyhzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gY291bnRlci0+Y3R4OwotCXU2NCBydW5fZW5kOwotCi0JaWYgKGNvdW50ZXItPnN0YXRlIDwgUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFIHx8Ci0JICAgIGNvdW50ZXItPmdyb3VwX2xlYWRlci0+c3RhdGUgPCBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpCi0JCXJldHVybjsKLQotCWNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCA9IGN0eC0+dGltZSAtIGNvdW50ZXItPnRzdGFtcF9lbmFibGVkOwotCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKLQkJcnVuX2VuZCA9IGNvdW50ZXItPnRzdGFtcF9zdG9wcGVkOwotCWVsc2UKLQkJcnVuX2VuZCA9IGN0eC0+dGltZTsKLQotCWNvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZyA9IHJ1bl9lbmQgLSBjb3VudGVyLT50c3RhbXBfcnVubmluZzsKLX0KLQotLyoKLSAqIFVwZGF0ZSB0b3RhbF90aW1lX2VuYWJsZWQgYW5kIHRvdGFsX3RpbWVfcnVubmluZyBmb3IgYWxsIGNvdW50ZXJzIGluIGEgZ3JvdXAuCi0gKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF90aW1lcyhzdHJ1Y3QgcGVyZl9jb3VudGVyICpsZWFkZXIpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQotCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGxlYWRlcik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpCi0JCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNvdW50ZXIpOwotfQotCi0vKgotICogQ3Jvc3MgQ1BVIGNhbGwgdG8gZGlzYWJsZSBhIHBlcmZvcm1hbmNlIGNvdW50ZXIKLSAqLwotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfZGlzYWJsZSh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBpbmZvOwotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGNvdW50ZXIsIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzCi0JICogY291bnRlcidzIHRhc2sgaXMgdGhlIGN1cnJlbnQgdGFzayBvbiB0aGlzIGNwdS4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0KLQkvKgotCSAqIElmIHRoZSBjb3VudGVyIGlzIG9uLCB0dXJuIGl0IG9mZi4KLQkgKiBJZiBpdCBpcyBpbiBlcnJvciBzdGF0ZSwgbGVhdmUgaXQgaW4gZXJyb3Igc3RhdGUuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkgewotCQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7Ci0JCXVwZGF0ZV9ncm91cF90aW1lcyhjb3VudGVyKTsKLQkJaWYgKGNvdW50ZXIgPT0gY291bnRlci0+Z3JvdXBfbGVhZGVyKQotCQkJZ3JvdXBfc2NoZWRfb3V0KGNvdW50ZXIsIGNwdWN0eCwgY3R4KTsKLQkJZWxzZQotCQkJY291bnRlcl9zY2hlZF9vdXQoY291bnRlciwgY3B1Y3R4LCBjdHgpOwotCQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9PRkY7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBEaXNhYmxlIGEgY291bnRlci4KLSAqCi0gKiBJZiBjb3VudGVyLT5jdHggaXMgYSBjbG9uZWQgY29udGV4dCwgY2FsbGVycyBtdXN0IG1ha2Ugc3VyZSB0aGF0Ci0gKiBldmVyeSB0YXNrIHN0cnVjdCB0aGF0IGNvdW50ZXItPmN0eC0+dGFzayBjb3VsZCBwb3NzaWJseSBwb2ludCB0bwotICogcmVtYWlucyB2YWxpZC4gIFRoaXMgY29uZGl0aW9uIGlzIHNhdGlzaWZlZCB3aGVuIGNhbGxlZCB0aHJvdWdoCi0gKiBwZXJmX2NvdW50ZXJfZm9yX2VhY2hfY2hpbGQgb3IgcGVyZl9jb3VudGVyX2Zvcl9lYWNoIGJlY2F1c2UgdGhleQotICogaG9sZCB0aGUgdG9wLWxldmVsIGNvdW50ZXIncyBjaGlsZF9tdXRleCwgc28gYW55IGRlc2NlbmRhbnQgdGhhdAotICogZ29lcyB0byBleGl0IHdpbGwgYmxvY2sgaW4gc3luY19jaGlsZF9jb3VudGVyLgotICogV2hlbiBjYWxsZWQgZnJvbSBwZXJmX3BlbmRpbmdfY291bnRlciBpdCdzIE9LIGJlY2F1c2UgY291bnRlci0+Y3R4Ci0gKiBpcyB0aGUgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgQ1BVIGFuZCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLAotICogaGVuY2Ugd2UgY2FuJ3QgZ2V0IGludG8gcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0IGZvciB0aGlzIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSBjb3VudGVyLT5jdHg7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3R4LT50YXNrOwotCi0JaWYgKCF0YXNrKSB7Ci0JCS8qCi0JCSAqIERpc2FibGUgdGhlIGNvdW50ZXIgb24gdGhlIGNwdSB0aGF0IGl0J3Mgb24KLQkJICovCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjb3VudGVyLT5jcHUsIF9fcGVyZl9jb3VudGVyX2Rpc2FibGUsCi0JCQkJCSBjb3VudGVyLCAxKTsKLQkJcmV0dXJuOwotCX0KLQotIHJldHJ5OgotCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY291bnRlcl9kaXNhYmxlLCBjb3VudGVyKTsKLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBJZiB0aGUgY291bnRlciBpcyBzdGlsbCBhY3RpdmUsIHdlIG5lZWQgdG8gcmV0cnkgdGhlIGNyb3NzLWNhbGwuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkUpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotCQlnb3RvIHJldHJ5OwotCX0KLQotCS8qCi0JICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCi0JICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKSB7Ci0JCXVwZGF0ZV9ncm91cF90aW1lcyhjb3VudGVyKTsKLQkJY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKLX0KLQotc3RhdGljIGludAotY291bnRlcl9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkgaW50IGNwdSkKLXsKLQlpZiAoY291bnRlci0+c3RhdGUgPD0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikKLQkJcmV0dXJuIDA7Ci0KLQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkU7Ci0JY291bnRlci0+b25jcHUgPSBjcHU7CS8qIFRPRE86IHB1dCAnY3B1JyBpbnRvIGNwdWN0eC0+Y3B1ICovCi0JLyoKLQkgKiBUaGUgbmV3IHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdHVybiBpdCBvbiBpbiB0aGUgaGFyZHdhcmU6Ci0JICovCi0Jc21wX3dtYigpOwotCi0JaWYgKGNvdW50ZXItPnBtdS0+ZW5hYmxlKGNvdW50ZXIpKSB7Ci0JCWNvdW50ZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFOwotCQljb3VudGVyLT5vbmNwdSA9IC0xOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQljb3VudGVyLT50c3RhbXBfcnVubmluZyArPSBjdHgtPnRpbWUgLSBjb3VudGVyLT50c3RhbXBfc3RvcHBlZDsKLQotCWlmICghaXNfc29mdHdhcmVfY291bnRlcihjb3VudGVyKSkKLQkJY3B1Y3R4LT5hY3RpdmVfb25jcHUrKzsKLQljdHgtPm5yX2FjdGl2ZSsrOwotCi0JaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVzaXZlKQotCQljcHVjdHgtPmV4Y2x1c2l2ZSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfY291bnRlciAqZ3JvdXBfY291bnRlciwKLQkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JICAgICAgIGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgKnBhcnRpYWxfZ3JvdXA7Ci0JaW50IHJldDsKLQotCWlmIChncm91cF9jb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oZ3JvdXBfY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwotCi0JaWYgKGNvdW50ZXJfc2NoZWRfaW4oZ3JvdXBfY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSkpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JLyoKLQkgKiBTY2hlZHVsZSBpbiBzaWJsaW5ncyBhcyBvbmUgZ3JvdXAgKGlmIGFueSk6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZ3JvdXBfY291bnRlci0+c2libGluZ19saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCWlmIChjb3VudGVyX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpKSB7Ci0JCQlwYXJ0aWFsX2dyb3VwID0gY291bnRlcjsKLQkJCWdvdG8gZ3JvdXBfZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotZ3JvdXBfZXJyb3I6Ci0JLyoKLQkgKiBHcm91cHMgY2FuIGJlIHNjaGVkdWxlZCBpbiBhcyBvbmUgdW5pdCBvbmx5LCBzbyB1bmRvIGFueQotCSAqIHBhcnRpYWwgZ3JvdXAgYmVmb3JlIHJldHVybmluZzoKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZncm91cF9jb3VudGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpIHsKLQkJaWYgKGNvdW50ZXIgPT0gcGFydGlhbF9ncm91cCkKLQkJCWJyZWFrOwotCQljb3VudGVyX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0JfQotCWNvdW50ZXJfc2NoZWRfb3V0KGdyb3VwX2NvdW50ZXIsIGNwdWN0eCwgY3R4KTsKLQotCXJldHVybiAtRUFHQUlOOwotfQotCi0vKgotICogUmV0dXJuIDEgZm9yIGEgZ3JvdXAgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBjb3VudGVycywKLSAqIDAgaWYgdGhlIGdyb3VwIGNvbnRhaW5zIGFueSBoYXJkd2FyZSBjb3VudGVycy4KLSAqLwotc3RhdGljIGludCBpc19zb2Z0d2FyZV9vbmx5X2dyb3VwKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmxlYWRlcikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JaWYgKCFpc19zb2Z0d2FyZV9jb3VudGVyKGxlYWRlcikpCi0JCXJldHVybiAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpCi0JCWlmICghaXNfc29mdHdhcmVfY291bnRlcihjb3VudGVyKSkKLQkJCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBXb3JrIG91dCB3aGV0aGVyIHdlIGNhbiBwdXQgdGhpcyBjb3VudGVyIGdyb3VwIG9uIHRoZSBDUFUgbm93LgotICovCi1zdGF0aWMgaW50IGdyb3VwX2Nhbl9nb19vbihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJCSAgIGludCBjYW5fYWRkX2h3KQotewotCS8qCi0JICogR3JvdXBzIGNvbnNpc3RpbmcgZW50aXJlbHkgb2Ygc29mdHdhcmUgY291bnRlcnMgY2FuIGFsd2F5cyBnbyBvbi4KLQkgKi8KLQlpZiAoaXNfc29mdHdhcmVfb25seV9ncm91cChjb3VudGVyKSkKLQkJcmV0dXJuIDE7Ci0JLyoKLQkgKiBJZiBhbiBleGNsdXNpdmUgZ3JvdXAgaXMgYWxyZWFkeSBvbiwgbm8gb3RoZXIgaGFyZHdhcmUKLQkgKiBjb3VudGVycyBjYW4gZ28gb24uCi0JICovCi0JaWYgKGNwdWN0eC0+ZXhjbHVzaXZlKQotCQlyZXR1cm4gMDsKLQkvKgotCSAqIElmIHRoaXMgZ3JvdXAgaXMgZXhjbHVzaXZlIGFuZCB0aGVyZSBhcmUgYWxyZWFkeQotCSAqIGNvdW50ZXJzIG9uIHRoZSBDUFUsIGl0IGNhbid0IGdvIG9uLgotCSAqLwotCWlmIChjb3VudGVyLT5hdHRyLmV4Y2x1c2l2ZSAmJiBjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBPdGhlcndpc2UsIHRyeSB0byBhZGQgaXQgaWYgYWxsIHByZXZpb3VzIGdyb3VwcyB3ZXJlIGFibGUKLQkgKiB0byBnbyBvbi4KLQkgKi8KLQlyZXR1cm4gY2FuX2FkZF9odzsKLX0KLQotc3RhdGljIHZvaWQgYWRkX2NvdW50ZXJfdG9fY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgpCi17Ci0JbGlzdF9hZGRfY291bnRlcihjb3VudGVyLCBjdHgpOwotCWNvdW50ZXItPnRzdGFtcF9lbmFibGVkID0gY3R4LT50aW1lOwotCWNvdW50ZXItPnRzdGFtcF9ydW5uaW5nID0gY3R4LT50aW1lOwotCWNvdW50ZXItPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOwotfQotCi0vKgotICogQ3Jvc3MgQ1BVIGNhbGwgdG8gaW5zdGFsbCBhbmQgZW5hYmxlIGEgcGVyZm9ybWFuY2UgY291bnRlcgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBoZWxkCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGluZm87Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSBjb3VudGVyLT5jdHg7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqbGVhZGVyID0gY291bnRlci0+Z3JvdXBfbGVhZGVyOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaW50IGVycjsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHRhc2sgY29udGV4dCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzCi0JICogdGhlIGN1cnJlbnQgdGFzayBjb250ZXh0IG9mIHRoaXMgY3B1LiBJZiBub3QgaXQgaGFzIGJlZW4KLQkgKiBzY2hlZHVsZWQgb3V0IGJlZm9yZSB0aGUgc21wIGNhbGwgYXJyaXZlZC4KLQkgKiBPciBwb3NzaWJseSB0aGlzIGlzIHRoZSByaWdodCBjb250ZXh0IGJ1dCBpdCBpc24ndAotCSAqIG9uIHRoaXMgY3B1IGJlY2F1c2UgaXQgaGFkIG5vIGNvdW50ZXJzLgotCSAqLwotCWlmIChjdHgtPnRhc2sgJiYgY3B1Y3R4LT50YXNrX2N0eCAhPSBjdHgpIHsKLQkJaWYgKGNwdWN0eC0+dGFza19jdHggfHwgY3R4LT50YXNrICE9IGN1cnJlbnQpCi0JCQlyZXR1cm47Ci0JCWNwdWN0eC0+dGFza19jdHggPSBjdHg7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWN0eC0+aXNfYWN0aXZlID0gMTsKLQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7Ci0KLQkvKgotCSAqIFByb3RlY3QgdGhlIGxpc3Qgb3BlcmF0aW9uIGFnYWluc3QgTk1JIGJ5IGRpc2FibGluZyB0aGUKLQkgKiBjb3VudGVycyBvbiBhIGdsb2JhbCBsZXZlbC4gTk9QIGZvciBub24gTk1JIGJhc2VkIGNvdW50ZXJzLgotCSAqLwotCXBlcmZfZGlzYWJsZSgpOwotCi0JYWRkX2NvdW50ZXJfdG9fY3R4KGNvdW50ZXIsIGN0eCk7Ci0KLQkvKgotCSAqIERvbid0IHB1dCB0aGUgY291bnRlciBvbiBpZiBpdCBpcyBkaXNhYmxlZCBvciBpZgotCSAqIGl0IGlzIGluIGEgZ3JvdXAgYW5kIHRoZSBncm91cCBpc24ndCBvbi4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFIHx8Ci0JICAgIChsZWFkZXIgIT0gY291bnRlciAmJiBsZWFkZXItPnN0YXRlICE9IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkUpKQotCQlnb3RvIHVubG9jazsKLQotCS8qCi0JICogQW4gZXhjbHVzaXZlIGNvdW50ZXIgY2FuJ3QgZ28gb24gaWYgdGhlcmUgYXJlIGFscmVhZHkgYWN0aXZlCi0JICogaGFyZHdhcmUgY291bnRlcnMsIGFuZCBubyBoYXJkd2FyZSBjb3VudGVyIGNhbiBnbyBvbiBpZiB0aGVyZQotCSAqIGlzIGFscmVhZHkgYW4gZXhjbHVzaXZlIGNvdW50ZXIgb24uCi0JICovCi0JaWYgKCFncm91cF9jYW5fZ29fb24oY291bnRlciwgY3B1Y3R4LCAxKSkKLQkJZXJyID0gLUVFWElTVDsKLQllbHNlCi0JCWVyciA9IGNvdW50ZXJfc2NoZWRfaW4oY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0KLQlpZiAoZXJyKSB7Ci0JCS8qCi0JCSAqIFRoaXMgY291bnRlciBjb3VsZG4ndCBnbyBvbi4gIElmIGl0IGlzIGluIGEgZ3JvdXAKLQkJICogdGhlbiB3ZSBoYXZlIHRvIHB1bGwgdGhlIHdob2xlIGdyb3VwIG9mZi4KLQkJICogSWYgdGhlIGNvdW50ZXIgZ3JvdXAgaXMgcGlubmVkIHRoZW4gcHV0IGl0IGluIGVycm9yIHN0YXRlLgotCQkgKi8KLQkJaWYgKGxlYWRlciAhPSBjb3VudGVyKQotCQkJZ3JvdXBfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4LCBjdHgpOwotCQlpZiAobGVhZGVyLT5hdHRyLnBpbm5lZCkgewotCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGxlYWRlcik7Ci0JCQlsZWFkZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX0VSUk9SOwotCQl9Ci0JfQotCi0JaWYgKCFlcnIgJiYgIWN0eC0+dGFzayAmJiBjcHVjdHgtPm1heF9wZXJ0YXNrKQotCQljcHVjdHgtPm1heF9wZXJ0YXNrLS07Ci0KLSB1bmxvY2s6Ci0JcGVyZl9lbmFibGUoKTsKLQotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotfQotCi0vKgotICogQXR0YWNoIGEgcGVyZm9ybWFuY2UgY291bnRlciB0byBhIGNvbnRleHQKLSAqCi0gKiBGaXJzdCB3ZSBhZGQgdGhlIGNvdW50ZXIgdG8gdGhlIGxpc3Qgd2l0aCB0aGUgaGFyZHdhcmUgZW5hYmxlIGJpdAotICogaW4gY291bnRlci0+aHdfY29uZmlnIGNsZWFyZWQuCi0gKgotICogSWYgdGhlIGNvdW50ZXIgaXMgYXR0YWNoZWQgdG8gYSB0YXNrIHdoaWNoIGlzIG9uIGEgQ1BVIHdlIHVzZSBhIHNtcAotICogY2FsbCB0byBlbmFibGUgaXQgaW4gdGhlIHRhc2sgY29udGV4dC4gVGhlIHRhc2sgbWlnaHQgaGF2ZSBiZWVuCi0gKiBzY2hlZHVsZWQgYXdheSwgYnV0IHdlIGNoZWNrIHRoaXMgaW4gdGhlIHNtcCBjYWxsIGFnYWluLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBoZWxkLgotICovCi1zdGF0aWMgdm9pZAotcGVyZl9pbnN0YWxsX2luX2NvbnRleHQoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JCQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJaW50IGNwdSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7Ci0KLQlpZiAoIXRhc2spIHsKLQkJLyoKLQkJICogUGVyIGNwdSBjb3VudGVycyBhcmUgaW5zdGFsbGVkIHZpYSBhbiBzbXAgY2FsbCBhbmQKLQkJICogdGhlIGluc3RhbGwgaXMgYWx3YXlzIHN1Y2Vzc2Z1bC4KLQkJICovCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQsCi0JCQkJCSBjb3VudGVyLCAxKTsKLQkJcmV0dXJuOwotCX0KLQotcmV0cnk6Ci0JdGFza19vbmNwdV9mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQsCi0JCQkJIGNvdW50ZXIpOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKLQkvKgotCSAqIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHNtcCBjYWxsLgotCSAqLwotCWlmIChjdHgtPmlzX2FjdGl2ZSAmJiBsaXN0X2VtcHR5KCZjb3VudGVyLT5saXN0X2VudHJ5KSkgewotCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCi0JLyoKLQkgKiBUaGUgbG9jayBwcmV2ZW50cyB0aGF0IHRoaXMgY29udGV4dCBpcyBzY2hlZHVsZWQgaW4gc28gd2UKLQkgKiBjYW4gYWRkIHRoZSBjb3VudGVyIHNhZmVseSwgaWYgaXQgdGhlIGNhbGwgYWJvdmUgZGlkIG5vdAotCSAqIHN1Y2NlZWQuCi0JICovCi0JaWYgKGxpc3RfZW1wdHkoJmNvdW50ZXItPmxpc3RfZW50cnkpKQotCQlhZGRfY291bnRlcl90b19jdHgoY291bnRlciwgY3R4KTsKLQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBQdXQgYSBjb3VudGVyIGludG8gaW5hY3RpdmUgc3RhdGUgYW5kIHVwZGF0ZSB0aW1lIGZpZWxkcy4KLSAqIEVuYWJsaW5nIHRoZSBsZWFkZXIgb2YgYSBncm91cCBlZmZlY3RpdmVseSBlbmFibGVzIGFsbAotICogdGhlIGdyb3VwIG1lbWJlcnMgdGhhdCBhcmVuJ3QgZXhwbGljaXRseSBkaXNhYmxlZCwgc28gd2UKLSAqIGhhdmUgdG8gdXBkYXRlIHRoZWlyIC0+dHN0YW1wX2VuYWJsZWQgYWxzby4KLSAqIE5vdGU6IHRoaXMgd29ya3MgZm9yIGdyb3VwIG1lbWJlcnMgYXMgd2VsbCBhcyBncm91cCBsZWFkZXJzCi0gKiBzaW5jZSB0aGUgbm9uLWxlYWRlciBtZW1iZXJzJyBzaWJsaW5nX2xpc3RzIHdpbGwgYmUgZW1wdHkuCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9jb3VudGVyX21hcmtfZW5hYmxlZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpzdWI7Ci0KLQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRTsKLQljb3VudGVyLT50c3RhbXBfZW5hYmxlZCA9IGN0eC0+dGltZSAtIGNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmNvdW50ZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkKLQkJaWYgKHN1Yi0+c3RhdGUgPj0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKQotCQkJc3ViLT50c3RhbXBfZW5hYmxlZCA9Ci0JCQkJY3R4LT50aW1lIC0gc3ViLT50b3RhbF90aW1lX2VuYWJsZWQ7Ci19Ci0KLS8qCi0gKiBDcm9zcyBDUFUgY2FsbCB0byBlbmFibGUgYSBwZXJmb3JtYW5jZSBjb3VudGVyCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9jb3VudGVyX2VuYWJsZSh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBpbmZvOwotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpsZWFkZXIgPSBjb3VudGVyLT5ncm91cF9sZWFkZXI7Ci0JaW50IGVycjsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGNvdW50ZXIsIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzCi0JICogY291bnRlcidzIHRhc2sgaXMgdGhlIGN1cnJlbnQgdGFzayBvbiB0aGlzIGNwdS4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KSB7Ci0JCWlmIChjcHVjdHgtPnRhc2tfY3R4IHx8IGN0eC0+dGFzayAhPSBjdXJyZW50KQotCQkJcmV0dXJuOwotCQljcHVjdHgtPnRhc2tfY3R4ID0gY3R4OwotCX0KLQotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQljdHgtPmlzX2FjdGl2ZSA9IDE7Ci0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwotCi0JaWYgKGNvdW50ZXItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKLQkJZ290byB1bmxvY2s7Ci0JX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7Ci0KLQkvKgotCSAqIElmIHRoZSBjb3VudGVyIGlzIGluIGEgZ3JvdXAgYW5kIGlzbid0IHRoZSBncm91cCBsZWFkZXIsCi0JICogdGhlbiBkb24ndCBwdXQgaXQgb24gdW5sZXNzIHRoZSBncm91cCBpcyBvbi4KLQkgKi8KLQlpZiAobGVhZGVyICE9IGNvdW50ZXIgJiYgbGVhZGVyLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQlnb3RvIHVubG9jazsKLQotCWlmICghZ3JvdXBfY2FuX2dvX29uKGNvdW50ZXIsIGNwdWN0eCwgMSkpIHsKLQkJZXJyID0gLUVFWElTVDsKLQl9IGVsc2UgewotCQlwZXJmX2Rpc2FibGUoKTsKLQkJaWYgKGNvdW50ZXIgPT0gbGVhZGVyKQotCQkJZXJyID0gZ3JvdXBfc2NoZWRfaW4oY291bnRlciwgY3B1Y3R4LCBjdHgsCi0JCQkJCSAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJZWxzZQotCQkJZXJyID0gY291bnRlcl9zY2hlZF9pbihjb3VudGVyLCBjcHVjdHgsIGN0eCwKLQkJCQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCXBlcmZfZW5hYmxlKCk7Ci0JfQotCi0JaWYgKGVycikgewotCQkvKgotCQkgKiBJZiB0aGlzIGNvdW50ZXIgY2FuJ3QgZ28gb24gYW5kIGl0J3MgcGFydCBvZiBhCi0JCSAqIGdyb3VwLCB0aGVuIHRoZSB3aG9sZSBncm91cCBoYXMgdG8gY29tZSBvZmYuCi0JCSAqLwotCQlpZiAobGVhZGVyICE9IGNvdW50ZXIpCi0JCQlncm91cF9zY2hlZF9vdXQobGVhZGVyLCBjcHVjdHgsIGN0eCk7Ci0JCWlmIChsZWFkZXItPmF0dHIucGlubmVkKSB7Ci0JCQl1cGRhdGVfZ3JvdXBfdGltZXMobGVhZGVyKTsKLQkJCWxlYWRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfRVJST1I7Ci0JCX0KLQl9Ci0KLSB1bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBFbmFibGUgYSBjb3VudGVyLgotICoKLSAqIElmIGNvdW50ZXItPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKLSAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgY291bnRlci0+Y3R4LT50YXNrIGNvdWxkIHBvc3NpYmx5IHBvaW50IHRvCi0gKiByZW1haW5zIHZhbGlkLiAgVGhpcyBjb25kaXRpb24gaXMgc2F0aXNmaWVkIHdoZW4gY2FsbGVkIHRocm91Z2gKLSAqIHBlcmZfY291bnRlcl9mb3JfZWFjaF9jaGlsZCBvciBwZXJmX2NvdW50ZXJfZm9yX2VhY2ggYXMgZGVzY3JpYmVkCi0gKiBmb3IgcGVyZl9jb3VudGVyX2Rpc2FibGUuCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7Ci0KLQlpZiAoIXRhc2spIHsKLQkJLyoKLQkJICogRW5hYmxlIHRoZSBjb3VudGVyIG9uIHRoZSBjcHUgdGhhdCBpdCdzIG9uCi0JCSAqLwotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY291bnRlci0+Y3B1LCBfX3BlcmZfY291bnRlcl9lbmFibGUsCi0JCQkJCSBjb3VudGVyLCAxKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JaWYgKGNvdW50ZXItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIElmIHRoZSBjb3VudGVyIGlzIGluIGVycm9yIHN0YXRlLCBjbGVhciB0aGF0IGZpcnN0LgotCSAqIFRoYXQgd2F5LCBpZiB3ZSBzZWUgdGhlIGNvdW50ZXIgaW4gZXJyb3Igc3RhdGUgYmVsb3csIHdlCi0JICoga25vdyB0aGF0IGl0IGhhcyBnb25lIGJhY2sgaW50byBlcnJvciBzdGF0ZSwgYXMgZGlzdGluY3QKLQkgKiBmcm9tIHRoZSB0YXNrIGhhdmluZyBiZWVuIHNjaGVkdWxlZCBhd2F5IGJlZm9yZSB0aGUKLQkgKiBjcm9zcy1jYWxsIGFycml2ZWQuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9FUlJPUikKLQkJY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGOwotCi0gcmV0cnk6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY291bnRlcl9lbmFibGUsIGNvdW50ZXIpOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKLQotCS8qCi0JICogSWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlIGFuZCB0aGUgY291bnRlciBpcyBzdGlsbCBvZmYsCi0JICogd2UgbmVlZCB0byByZXRyeSB0aGUgY3Jvc3MtY2FsbC4KLQkgKi8KLQlpZiAoY3R4LT5pc19hY3RpdmUgJiYgY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikKLQkJZ290byByZXRyeTsKLQotCS8qCi0JICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCi0JICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikKLQkJX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7Ci0KLSBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWZyZXNoKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCByZWZyZXNoKQotewotCS8qCi0JICogbm90IHN1cHBvcnRlZCBvbiBpbmhlcml0ZWQgY291bnRlcnMKLQkgKi8KLQlpZiAoY291bnRlci0+YXR0ci5pbmhlcml0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWF0b21pY19hZGQocmVmcmVzaCwgJmNvdW50ZXItPmV2ZW50X2xpbWl0KTsKLQlwZXJmX2NvdW50ZXJfZW5hYmxlKGNvdW50ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19wZXJmX2NvdW50ZXJfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWN0eC0+aXNfYWN0aXZlID0gMDsKLQlpZiAobGlrZWx5KCFjdHgtPm5yX2NvdW50ZXJzKSkKLQkJZ290byBvdXQ7Ci0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwotCi0JcGVyZl9kaXNhYmxlKCk7Ci0JaWYgKGN0eC0+bnJfYWN0aXZlKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCQlpZiAoY291bnRlciAhPSBjb3VudGVyLT5ncm91cF9sZWFkZXIpCi0JCQkJY291bnRlcl9zY2hlZF9vdXQoY291bnRlciwgY3B1Y3R4LCBjdHgpOwotCQkJZWxzZQotCQkJCWdyb3VwX3NjaGVkX291dChjb3VudGVyLCBjcHVjdHgsIGN0eCk7Ci0JCX0KLQl9Ci0JcGVyZl9lbmFibGUoKTsKLSBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci19Ci0KLS8qCi0gKiBUZXN0IHdoZXRoZXIgdHdvIGNvbnRleHRzIGFyZSBlcXVpdmFsZW50LCBpLmUuIHdoZXRoZXIgdGhleQotICogaGF2ZSBib3RoIGJlZW4gY2xvbmVkIGZyb20gdGhlIHNhbWUgdmVyc2lvbiBvZiB0aGUgc2FtZSBjb250ZXh0Ci0gKiBhbmQgdGhleSBib3RoIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVuYWJsZWQgY291bnRlcnMuCi0gKiBJZiB0aGUgbnVtYmVyIG9mIGVuYWJsZWQgY291bnRlcnMgaXMgdGhlIHNhbWUsIHRoZW4gdGhlIHNldAotICogb2YgZW5hYmxlZCBjb3VudGVycyBzaG91bGQgYmUgdGhlIHNhbWUsIGJlY2F1c2UgdGhlc2UgYXJlIGJvdGgKLSAqIGluaGVyaXRlZCBjb250ZXh0cywgdGhlcmVmb3JlIHdlIGNhbid0IGFjY2VzcyBpbmRpdmlkdWFsIGNvdW50ZXJzCi0gKiBpbiB0aGVtIGRpcmVjdGx5IHdpdGggYW4gZmQ7IHdlIGNhbiBvbmx5IGVuYWJsZS9kaXNhYmxlIGFsbAotICogY291bnRlcnMgdmlhIHByY3RsLCBvciBlbmFibGUvZGlzYWJsZSBhbGwgY291bnRlcnMgaW4gYSBmYW1pbHkKLSAqIHZpYSBpb2N0bCwgd2hpY2ggd2lsbCBoYXZlIHRoZSBzYW1lIGVmZmVjdCBvbiBib3RoIGNvbnRleHRzLgotICovCi1zdGF0aWMgaW50IGNvbnRleHRfZXF1aXYoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgxLAotCQkJIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4MikKLXsKLQlyZXR1cm4gY3R4MS0+cGFyZW50X2N0eCAmJiBjdHgxLT5wYXJlbnRfY3R4ID09IGN0eDItPnBhcmVudF9jdHgKLQkJJiYgY3R4MS0+cGFyZW50X2dlbiA9PSBjdHgyLT5wYXJlbnRfZ2VuCi0JCSYmICFjdHgxLT5waW5fY291bnQgJiYgIWN0eDItPnBpbl9jb3VudDsKLX0KLQotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfcmVhZCh2b2lkICpjb3VudGVyKTsKLQotc3RhdGljIHZvaWQgX19wZXJmX2NvdW50ZXJfc3luY19zdGF0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkJICAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyICpuZXh0X2NvdW50ZXIpCi17Ci0JdTY0IHZhbHVlOwotCi0JaWYgKCFjb3VudGVyLT5hdHRyLmluaGVyaXRfc3RhdCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBVcGRhdGUgdGhlIGNvdW50ZXIgdmFsdWUsIHdlIGNhbm5vdCB1c2UgcGVyZl9jb3VudGVyX3JlYWQoKQotCSAqIGJlY2F1c2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbnRleHQgc3dpdGNoIGFuZCBoYXZlIElSUXMKLQkgKiBkaXNhYmxlZCwgd2hpY2ggdXBzZXRzIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpLCBob3dldmVyCi0JICogd2Uga25vdyB0aGUgY291bnRlciBtdXN0IGJlIG9uIHRoZSBjdXJyZW50IENQVSwgdGhlcmVmb3JlIHdlCi0JICogZG9uJ3QgbmVlZCB0byB1c2UgaXQuCi0JICovCi0Jc3dpdGNoIChjb3VudGVyLT5zdGF0ZSkgewotCWNhc2UgUEVSRl9DT1VOVEVSX1NUQVRFX0FDVElWRToKLQkJX19wZXJmX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRToKLQkJdXBkYXRlX2NvdW50ZXJfdGltZXMoY291bnRlcik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBJbiBvcmRlciB0byBrZWVwIHBlci10YXNrIHN0YXRzIHJlbGlhYmxlIHdlIG5lZWQgdG8gZmxpcCB0aGUgY291bnRlcgotCSAqIHZhbHVlcyB3aGVuIHdlIGZsaXAgdGhlIGNvbnRleHRzLgotCSAqLwotCXZhbHVlID0gYXRvbWljNjRfcmVhZCgmbmV4dF9jb3VudGVyLT5jb3VudCk7Ci0JdmFsdWUgPSBhdG9taWM2NF94Y2hnKCZjb3VudGVyLT5jb3VudCwgdmFsdWUpOwotCWF0b21pYzY0X3NldCgmbmV4dF9jb3VudGVyLT5jb3VudCwgdmFsdWUpOwotCi0Jc3dhcChjb3VudGVyLT50b3RhbF90aW1lX2VuYWJsZWQsIG5leHRfY291bnRlci0+dG90YWxfdGltZV9lbmFibGVkKTsKLQlzd2FwKGNvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZywgbmV4dF9jb3VudGVyLT50b3RhbF90aW1lX3J1bm5pbmcpOwotCi0JLyoKLQkgKiBTaW5jZSB3ZSBzd2l6emxlZCB0aGUgdmFsdWVzLCB1cGRhdGUgdGhlIHVzZXIgdmlzaWJsZSBkYXRhIHRvby4KLQkgKi8KLQlwZXJmX2NvdW50ZXJfdXBkYXRlX3VzZXJwYWdlKGNvdW50ZXIpOwotCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UobmV4dF9jb3VudGVyKTsKLX0KLQotI2RlZmluZSBsaXN0X25leHRfZW50cnkocG9zLCBtZW1iZXIpIFwKLQlsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKQotCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfc3luY19zdGF0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJCSAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqbmV4dF9jdHgpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgKm5leHRfY291bnRlcjsKLQotCWlmICghY3R4LT5ucl9zdGF0KQotCQlyZXR1cm47Ci0KLQljb3VudGVyID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT5ldmVudF9saXN0LAotCQkJCSAgIHN0cnVjdCBwZXJmX2NvdW50ZXIsIGV2ZW50X2VudHJ5KTsKLQotCW5leHRfY291bnRlciA9IGxpc3RfZmlyc3RfZW50cnkoJm5leHRfY3R4LT5ldmVudF9saXN0LAotCQkJCQlzdHJ1Y3QgcGVyZl9jb3VudGVyLCBldmVudF9lbnRyeSk7Ci0KLQl3aGlsZSAoJmNvdW50ZXItPmV2ZW50X2VudHJ5ICE9ICZjdHgtPmV2ZW50X2xpc3QgJiYKLQkgICAgICAgJm5leHRfY291bnRlci0+ZXZlbnRfZW50cnkgIT0gJm5leHRfY3R4LT5ldmVudF9saXN0KSB7Ci0KLQkJX19wZXJmX2NvdW50ZXJfc3luY19zdGF0KGNvdW50ZXIsIG5leHRfY291bnRlcik7Ci0KLQkJY291bnRlciA9IGxpc3RfbmV4dF9lbnRyeShjb3VudGVyLCBldmVudF9lbnRyeSk7Ci0JCW5leHRfY291bnRlciA9IGxpc3RfbmV4dF9lbnRyeShuZXh0X2NvdW50ZXIsIGV2ZW50X2VudHJ5KTsKLQl9Ci19Ci0KLS8qCi0gKiBDYWxsZWQgZnJvbSBzY2hlZHVsZXIgdG8gcmVtb3ZlIHRoZSBjb3VudGVycyBvZiB0aGUgY3VycmVudCB0YXNrLAotICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICoKLSAqIFdlIHN0b3AgZWFjaCBjb3VudGVyIGFuZCB1cGRhdGUgdGhlIGNvdW50ZXIgdmFsdWUgaW4gY291bnRlci0+Y291bnQuCi0gKgotICogVGhpcyBkb2VzIG5vdCBwcm90ZWN0IHVzIGFnYWluc3QgTk1JLCBidXQgZGlzYWJsZSgpCi0gKiBzZXRzIHRoZSBkaXNhYmxlZCBiaXQgaW4gdGhlIGNvbnRyb2wgZmllbGQgb2YgY291bnRlciBfYmVmb3JlXwotICogYWNjZXNzaW5nIHRoZSBjb3VudGVyIGNvbnRyb2wgcmVnaXN0ZXIuIElmIGEgTk1JIGhpdHMsIHRoZW4gaXQgd2lsbAotICogbm90IHJlc3RhcnQgdGhlIGNvdW50ZXIuCi0gKi8KLXZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOwotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9jb3VudGVyX2N0eHA7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpuZXh0X2N0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKnBhcmVudDsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQlpbnQgZG9fc3dpdGNoID0gMTsKLQotCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0JcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTLCAxLCAxLCByZWdzLCAwKTsKLQotCWlmIChsaWtlbHkoIWN0eCB8fCAhY3B1Y3R4LT50YXNrX2N0eCkpCi0JCXJldHVybjsKLQotCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlwYXJlbnQgPSByY3VfZGVyZWZlcmVuY2UoY3R4LT5wYXJlbnRfY3R4KTsKLQluZXh0X2N0eCA9IG5leHQtPnBlcmZfY291bnRlcl9jdHhwOwotCWlmIChwYXJlbnQgJiYgbmV4dF9jdHggJiYKLQkgICAgcmN1X2RlcmVmZXJlbmNlKG5leHRfY3R4LT5wYXJlbnRfY3R4KSA9PSBwYXJlbnQpIHsKLQkJLyoKLQkJICogTG9va3MgbGlrZSB0aGUgdHdvIGNvbnRleHRzIGFyZSBjbG9uZXMsIHNvIHdlIG1pZ2h0IGJlCi0JCSAqIGFibGUgdG8gb3B0aW1pemUgdGhlIGNvbnRleHQgc3dpdGNoLiAgV2UgbG9jayBib3RoCi0JCSAqIGNvbnRleHRzIGFuZCBjaGVjayB0aGF0IHRoZXkgYXJlIGNsb25lcyB1bmRlciB0aGUKLQkJICogbG9jayAoaW5jbHVkaW5nIHJlLWNoZWNraW5nIHRoYXQgbmVpdGhlciBoYXMgYmVlbgotCQkgKiB1bmNsb25lZCBpbiB0aGUgbWVhbnRpbWUpLiAgSXQgZG9lc24ndCBtYXR0ZXIgd2hpY2gKLQkJICogb3JkZXIgd2UgdGFrZSB0aGUgbG9ja3MgYmVjYXVzZSBubyBvdGhlciBjcHUgY291bGQKLQkJICogYmUgdHJ5aW5nIHRvIGxvY2sgYm90aCBvZiB0aGVzZSB0YXNrcy4KLQkJICovCi0JCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQkJc3Bpbl9sb2NrX25lc3RlZCgmbmV4dF9jdHgtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKLQkJaWYgKGNvbnRleHRfZXF1aXYoY3R4LCBuZXh0X2N0eCkpIHsKLQkJCS8qCi0JCQkgKiBYWFggZG8gd2UgbmVlZCBhIG1lbW9yeSBiYXJyaWVyIG9mIHNvcnRzCi0JCQkgKiB3cnQgdG8gcmN1X2RlcmVmZXJlbmNlKCkgb2YgcGVyZl9jb3VudGVyX2N0eHAKLQkJCSAqLwotCQkJdGFzay0+cGVyZl9jb3VudGVyX2N0eHAgPSBuZXh0X2N0eDsKLQkJCW5leHQtPnBlcmZfY291bnRlcl9jdHhwID0gY3R4OwotCQkJY3R4LT50YXNrID0gbmV4dDsKLQkJCW5leHRfY3R4LT50YXNrID0gdGFzazsKLQkJCWRvX3N3aXRjaCA9IDA7Ci0KLQkJCXBlcmZfY291bnRlcl9zeW5jX3N0YXQoY3R4LCBuZXh0X2N0eCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJm5leHRfY3R4LT5sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JaWYgKGRvX3N3aXRjaCkgewotCQlfX3BlcmZfY291bnRlcl9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOwotCQljcHVjdHgtPnRhc2tfY3R4ID0gTlVMTDsKLQl9Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCWlmICghY3B1Y3R4LT50YXNrX2N0eCkKLQkJcmV0dXJuOwotCi0JaWYgKFdBUk5fT05fT05DRShjdHggIT0gY3B1Y3R4LT50YXNrX2N0eCkpCi0JCXJldHVybjsKLQotCV9fcGVyZl9jb3VudGVyX3NjaGVkX291dChjdHgsIGNwdWN0eCk7Ci0JY3B1Y3R4LT50YXNrX2N0eCA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jcHVfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCi17Ci0JX19wZXJmX2NvdW50ZXJfc2NoZWRfb3V0KCZjcHVjdHgtPmN0eCwgY3B1Y3R4KTsKLX0KLQotc3RhdGljIHZvaWQKLV9fcGVyZl9jb3VudGVyX3NjaGVkX2luKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCWludCBjYW5fYWRkX2h3ID0gMTsKLQotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQljdHgtPmlzX2FjdGl2ZSA9IDE7Ci0JaWYgKGxpa2VseSghY3R4LT5ucl9jb3VudGVycykpCi0JCWdvdG8gb3V0OwotCi0JY3R4LT50aW1lc3RhbXAgPSBwZXJmX2Nsb2NrKCk7Ci0KLQlwZXJmX2Rpc2FibGUoKTsKLQotCS8qCi0JICogRmlyc3QgZ28gdGhyb3VnaCB0aGUgbGlzdCBhbmQgcHV0IG9uIGFueSBwaW5uZWQgZ3JvdXBzCi0JICogaW4gb3JkZXIgdG8gZ2l2ZSB0aGVtIHRoZSBiZXN0IGNoYW5jZSBvZiBnb2luZyBvbi4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZjdHgtPmNvdW50ZXJfbGlzdCwgbGlzdF9lbnRyeSkgewotCQlpZiAoY291bnRlci0+c3RhdGUgPD0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRiB8fAotCQkgICAgIWNvdW50ZXItPmF0dHIucGlubmVkKQotCQkJY29udGludWU7Ci0JCWlmIChjb3VudGVyLT5jcHUgIT0gLTEgJiYgY291bnRlci0+Y3B1ICE9IGNwdSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjb3VudGVyICE9IGNvdW50ZXItPmdyb3VwX2xlYWRlcikKLQkJCWNvdW50ZXJfc2NoZWRfaW4oY291bnRlciwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCWVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihjb3VudGVyLCBjcHVjdHgsIDEpKQotCQkJCWdyb3VwX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpOwotCQl9Ci0KLQkJLyoKLQkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAotCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCi0JCSAqLwotCQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKSB7Ci0JCQl1cGRhdGVfZ3JvdXBfdGltZXMoY291bnRlcik7Ci0JCQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9FUlJPUjsKLQkJfQotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCS8qCi0JCSAqIElnbm9yZSBjb3VudGVycyBpbiBPRkYgb3IgRVJST1Igc3RhdGUsIGFuZAotCQkgKiBpZ25vcmUgcGlubmVkIGNvdW50ZXJzIHNpbmNlIHdlIGRpZCB0aGVtIGFscmVhZHkuCi0JCSAqLwotCQlpZiAoY291bnRlci0+c3RhdGUgPD0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRiB8fAotCQkgICAgY291bnRlci0+YXR0ci5waW5uZWQpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBMaXN0ZW4gdG8gdGhlICdjcHUnIHNjaGVkdWxpbmcgZmlsdGVyIGNvbnN0cmFpbnQKLQkJICogb2YgY291bnRlcnM6Ci0JCSAqLwotCQlpZiAoY291bnRlci0+Y3B1ICE9IC0xICYmIGNvdW50ZXItPmNwdSAhPSBjcHUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoY291bnRlciAhPSBjb3VudGVyLT5ncm91cF9sZWFkZXIpIHsKLQkJCWlmIChjb3VudGVyX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpKQotCQkJCWNhbl9hZGRfaHcgPSAwOwotCQl9IGVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihjb3VudGVyLCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7Ci0JCQkJaWYgKGdyb3VwX3NjaGVkX2luKGNvdW50ZXIsIGNwdWN0eCwgY3R4LCBjcHUpKQotCQkJCQljYW5fYWRkX2h3ID0gMDsKLQkJCX0KLQkJfQotCX0KLQlwZXJmX2VuYWJsZSgpOwotIG91dDoKLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLX0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHNjaGVkdWxlciB0byBhZGQgdGhlIGNvdW50ZXJzIG9mIHRoZSBjdXJyZW50IHRhc2sKLSAqIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLSAqCi0gKiBXZSByZXN0b3JlIHRoZSBjb3VudGVyIHZhbHVlIGFuZCB0aGVuIGVuYWJsZSBpdC4KLSAqCi0gKiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdXMgYWdhaW5zdCBOTUksIGJ1dCBlbmFibGUoKQotICogc2V0cyB0aGUgZW5hYmxlZCBiaXQgaW4gdGhlIGNvbnRyb2wgZmllbGQgb2YgY291bnRlciBfYmVmb3JlXwotICogYWNjZXNzaW5nIHRoZSBjb3VudGVyIGNvbnRyb2wgcmVnaXN0ZXIuIElmIGEgTk1JIGhpdHMsIHRoZW4gaXQgd2lsbAotICoga2VlcCB0aGUgY291bnRlciBydW5uaW5nLgotICovCi12b2lkIHBlcmZfY291bnRlcl90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfY291bnRlcl9jdHhwOwotCi0JaWYgKGxpa2VseSghY3R4KSkKLQkJcmV0dXJuOwotCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKLQkJcmV0dXJuOwotCV9fcGVyZl9jb3VudGVyX3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBjcHUpOwotCWNwdWN0eC0+dGFza19jdHggPSBjdHg7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jcHVfc2NoZWRfaW4oc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKLQotCV9fcGVyZl9jb3VudGVyX3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBjcHUpOwotfQotCi0jZGVmaW5lIE1BWF9JTlRFUlJVUFRTICh+MFVMTCkKLQotc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IGVuYWJsZSk7Ci0KLXN0YXRpYyB2b2lkIHBlcmZfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCB1NjQgZXZlbnRzKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQl1NjQgcGVyaW9kLCBzYW1wbGVfcGVyaW9kOwotCXM2NCBkZWx0YTsKLQotCWV2ZW50cyAqPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JcGVyaW9kID0gZGl2NjRfdTY0KGV2ZW50cywgY291bnRlci0+YXR0ci5zYW1wbGVfZnJlcSk7Ci0KLQlkZWx0YSA9IChzNjQpKHBlcmlvZCAtIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JZGVsdGEgPSAoZGVsdGEgKyA3KSAvIDg7IC8qIGxvdyBwYXNzIGZpbHRlciAqLwotCi0Jc2FtcGxlX3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZCArIGRlbHRhOwotCi0JaWYgKCFzYW1wbGVfcGVyaW9kKQotCQlzYW1wbGVfcGVyaW9kID0gMTsKLQotCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IHNhbXBsZV9wZXJpb2Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY3R4X2FkanVzdF9mcmVxKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOwotCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOwotCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCWlmIChjb3VudGVyLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQkJY29udGludWU7Ci0KLQkJaHdjID0gJmNvdW50ZXItPmh3OwotCi0JCWludGVycnVwdHMgPSBod2MtPmludGVycnVwdHM7Ci0JCWh3Yy0+aW50ZXJydXB0cyA9IDA7Ci0KLQkJLyoKLQkJICogdW50aHJvdHRsZSBjb3VudGVycyBvbiB0aGUgdGljawotCQkgKi8KLQkJaWYgKGludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpIHsKLQkJCXBlcmZfbG9nX3Rocm90dGxlKGNvdW50ZXIsIDEpOwotCQkJY291bnRlci0+cG11LT51bnRocm90dGxlKGNvdW50ZXIpOwotCQkJaW50ZXJydXB0cyA9IDIqc3lzY3RsX3BlcmZfY291bnRlcl9zYW1wbGVfcmF0ZS9IWjsKLQkJfQotCi0JCWlmICghY291bnRlci0+YXR0ci5mcmVxIHx8ICFjb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogaWYgdGhlIHNwZWNpZmllZCBmcmVxIDwgSFogdGhlbiB3ZSBuZWVkIHRvIHNraXAgdGlja3MKLQkJICovCi0JCWlmIChjb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxIDwgSFopIHsKLQkJCWZyZXEgPSBjb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxOwotCi0JCQlod2MtPmZyZXFfY291bnQgKz0gZnJlcTsKLQkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzICs9IGludGVycnVwdHM7Ci0KLQkJCWlmIChod2MtPmZyZXFfY291bnQgPCBIWikKLQkJCQljb250aW51ZTsKLQotCQkJaW50ZXJydXB0cyA9IGh3Yy0+ZnJlcV9pbnRlcnJ1cHRzOwotCQkJaHdjLT5mcmVxX2ludGVycnVwdHMgPSAwOwotCQkJaHdjLT5mcmVxX2NvdW50IC09IEhaOwotCQl9IGVsc2UKLQkJCWZyZXEgPSBIWjsKLQotCQlwZXJmX2FkanVzdF9wZXJpb2QoY291bnRlciwgZnJlcSAqIGludGVycnVwdHMpOwotCi0JCS8qCi0JCSAqIEluIG9yZGVyIHRvIGF2b2lkIGJlaW5nIHN0YWxsZWQgYnkgYW4gKGFjY2lkZW50YWwpIGh1Z2UKLQkJICogc2FtcGxlIHBlcmlvZCwgZm9yY2UgcmVzZXQgdGhlIHNhbXBsZSBwZXJpb2QgaWYgd2UgZGlkbid0Ci0JCSAqIGdldCBhbnkgZXZlbnRzIGluIHRoaXMgZnJlcSBwZXJpb2QuCi0JCSAqLwotCQlpZiAoIWludGVycnVwdHMpIHsKLQkJCXBlcmZfZGlzYWJsZSgpOwotCQkJY291bnRlci0+cG11LT5kaXNhYmxlKGNvdW50ZXIpOwotCQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKLQkJCWNvdW50ZXItPnBtdS0+ZW5hYmxlKGNvdW50ZXIpOwotCQkJcGVyZl9lbmFibGUoKTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKLX0KLQotLyoKLSAqIFJvdW5kLXJvYmluIGEgY29udGV4dCdzIGNvdW50ZXJzOgotICovCi1zdGF0aWMgdm9pZCByb3RhdGVfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQlpZiAoIWN0eC0+bnJfY291bnRlcnMpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQkvKgotCSAqIFJvdGF0ZSB0aGUgZmlyc3QgZW50cnkgbGFzdCAod29ya3MganVzdCBmaW5lIGZvciBncm91cCBjb3VudGVycyB0b28pOgotCSAqLwotCXBlcmZfZGlzYWJsZSgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZjb3VudGVyLT5saXN0X2VudHJ5LCAmY3R4LT5jb3VudGVyX2xpc3QpOwotCQlicmVhazsKLQl9Ci0JcGVyZl9lbmFibGUoKTsKLQotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotfQotCi12b2lkIHBlcmZfY291bnRlcl90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgY3B1KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHg7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZucl9jb3VudGVycykpCi0JCXJldHVybjsKLQotCWNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7Ci0JY3R4ID0gY3Vyci0+cGVyZl9jb3VudGVyX2N0eHA7Ci0KLQlwZXJmX2N0eF9hZGp1c3RfZnJlcSgmY3B1Y3R4LT5jdHgpOwotCWlmIChjdHgpCi0JCXBlcmZfY3R4X2FkanVzdF9mcmVxKGN0eCk7Ci0KLQlwZXJmX2NvdW50ZXJfY3B1X3NjaGVkX291dChjcHVjdHgpOwotCWlmIChjdHgpCi0JCV9fcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KGN0eCk7Ci0KLQlyb3RhdGVfY3R4KCZjcHVjdHgtPmN0eCk7Ci0JaWYgKGN0eCkKLQkJcm90YXRlX2N0eChjdHgpOwotCi0JcGVyZl9jb3VudGVyX2NwdV9zY2hlZF9pbihjcHVjdHgsIGNwdSk7Ci0JaWYgKGN0eCkKLQkJcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfaW4oY3VyciwgY3B1KTsKLX0KLQotLyoKLSAqIEVuYWJsZSBhbGwgb2YgYSB0YXNrJ3MgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGVuYWJsZS1vbi1leGVjLgotICogVGhpcyBleHBlY3RzIHRhc2sgPT0gY3VycmVudC4KLSAqLwotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX2VuYWJsZV9vbl9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVuYWJsZWQgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0eCA9IHRhc2stPnBlcmZfY291bnRlcl9jdHhwOwotCWlmICghY3R4IHx8ICFjdHgtPm5yX2NvdW50ZXJzKQotCQlnb3RvIG91dDsKLQotCV9fcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfb3V0KGN0eCk7Ci0KLQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZjdHgtPmNvdW50ZXJfbGlzdCwgbGlzdF9lbnRyeSkgewotCQlpZiAoIWNvdW50ZXItPmF0dHIuZW5hYmxlX29uX2V4ZWMpCi0JCQljb250aW51ZTsKLQkJY291bnRlci0+YXR0ci5lbmFibGVfb25fZXhlYyA9IDA7Ci0JCWlmIChjb3VudGVyLT5zdGF0ZSA+PSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpCi0JCQljb250aW51ZTsKLQkJX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7Ci0JCWVuYWJsZWQgPSAxOwotCX0KLQotCS8qCi0JICogVW5jbG9uZSB0aGlzIGNvbnRleHQgaWYgd2UgZW5hYmxlZCBhbnkgY291bnRlci4KLQkgKi8KLQlpZiAoZW5hYmxlZCkKLQkJdW5jbG9uZV9jdHgoY3R4KTsKLQotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotCi0JcGVyZl9jb3VudGVyX3Rhc2tfc2NoZWRfaW4odGFzaywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLSBvdXQ6Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogQ3Jvc3MgQ1BVIGNhbGwgdG8gcmVhZCB0aGUgaGFyZHdhcmUgY291bnRlcgotICovCi1zdGF0aWMgdm9pZCBfX3BlcmZfY291bnRlcl9yZWFkKHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBpbmZvOwotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gY291bnRlci0+Y3R4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIElmIHRoaXMgaXMgYSB0YXNrIGNvbnRleHQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcwotCSAqIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dCBvZiB0aGlzIGNwdS4gIElmIG5vdCBpdCBoYXMgYmVlbgotCSAqIHNjaGVkdWxlZCBvdXQgYmVmb3JlIHRoZSBzbXAgY2FsbCBhcnJpdmVkLiAgSW4gdGhhdCBjYXNlCi0JICogY291bnRlci0+Y291bnQgd291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYSByZWNlbnQgc2FtcGxlCi0JICogd2hlbiB0aGUgY291bnRlciB3YXMgc2NoZWR1bGVkIG91dC4KLQkgKi8KLQlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKGN0eC0+aXNfYWN0aXZlKQotCQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7Ci0JY291bnRlci0+cG11LT5yZWFkKGNvdW50ZXIpOwotCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNvdW50ZXIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHU2NCBwZXJmX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCS8qCi0JICogSWYgY291bnRlciBpcyBlbmFibGVkIGFuZCBjdXJyZW50bHkgYWN0aXZlIG9uIGEgQ1BVLCB1cGRhdGUgdGhlCi0JICogdmFsdWUgaW4gdGhlIGNvdW50ZXIgc3RydWN0dXJlOgotCSAqLwotCWlmIChjb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKSB7Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjb3VudGVyLT5vbmNwdSwKLQkJCQkJIF9fcGVyZl9jb3VudGVyX3JlYWQsIGNvdW50ZXIsIDEpOwotCX0gZWxzZSBpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKSB7Ci0JCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNvdW50ZXIpOwotCX0KLQotCXJldHVybiBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jb3VudCk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBwZXJmX2NvdW50ZXIgY29udGV4dCBpbiBhIHRhc2tfc3RydWN0OgotICovCi1zdGF0aWMgdm9pZAotX19wZXJmX2NvdW50ZXJfaW5pdF9jb250ZXh0KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwotCXNwaW5fbG9ja19pbml0KCZjdHgtPmxvY2spOwotCW11dGV4X2luaXQoJmN0eC0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjdHgtPmNvdW50ZXJfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmN0eC0+ZXZlbnRfbGlzdCk7Ci0JYXRvbWljX3NldCgmY3R4LT5yZWZjb3VudCwgMSk7Ci0JY3R4LT50YXNrID0gdGFzazsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqZmluZF9nZXRfY29udGV4dChwaWRfdCBwaWQsIGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHg7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBJZiBjcHUgaXMgbm90IGEgd2lsZGNhcmQgdGhlbiB0aGlzIGlzIGEgcGVyY3B1IGNvdW50ZXI6Ci0JICovCi0JaWYgKGNwdSAhPSAtMSkgewotCQkvKiBNdXN0IGJlIHJvb3QgdG8gb3BlcmF0ZSBvbiBhIENQVSBjb3VudGVyOiAqLwotCQlpZiAocGVyZl9wYXJhbm9pZF9jcHUoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwotCi0JCWlmIChjcHUgPCAwIHx8IGNwdSA+IG51bV9wb3NzaWJsZV9jcHVzKCkpCi0JCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCQkvKgotCQkgKiBXZSBjb3VsZCBiZSBjbGV2ZXIgYW5kIGFsbG93IHRvIGF0dGFjaCBhIGNvdW50ZXIgdG8gYW4KLQkJICogb2ZmbGluZSBDUFUgYW5kIGFjdGl2YXRlIGl0IHdoZW4gdGhlIENQVSBjb21lcyB1cCwgYnV0Ci0JCSAqIHRoYXQncyBmb3IgbGF0ZXIuCi0JCSAqLwotCQlpZiAoIWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwotCi0JCWNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7Ci0JCWN0eCA9ICZjcHVjdHgtPmN0eDsKLQkJZ2V0X2N0eChjdHgpOwotCi0JCXJldHVybiBjdHg7Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmICghcGlkKQotCQl0YXNrID0gY3VycmVudDsKLQllbHNlCi0JCXRhc2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwotCWlmICh0YXNrKQotCQlnZXRfdGFza19zdHJ1Y3QodGFzayk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlpZiAoIXRhc2spCi0JCXJldHVybiBFUlJfUFRSKC1FU1JDSCk7Ci0KLQkvKgotCSAqIENhbid0IGF0dGFjaCBjb3VudGVycyB0byBhIGR5aW5nIHRhc2suCi0JICovCi0JZXJyID0gLUVTUkNIOwotCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCi0JCWdvdG8gZXJyb3V0OwotCi0JLyogUmV1c2UgcHRyYWNlIHBlcm1pc3Npb24gY2hlY2tzIGZvciBub3cuICovCi0JZXJyID0gLUVBQ0NFUzsKLQlpZiAoIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQotCQlnb3RvIGVycm91dDsKLQotIHJldHJ5OgotCWN0eCA9IHBlcmZfbG9ja190YXNrX2NvbnRleHQodGFzaywgJmZsYWdzKTsKLQlpZiAoY3R4KSB7Ci0JCXVuY2xvbmVfY3R4KGN0eCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOwotCX0KLQotCWlmICghY3R4KSB7Ci0JCWN0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCksIEdGUF9LRVJORUwpOwotCQllcnIgPSAtRU5PTUVNOwotCQlpZiAoIWN0eCkKLQkJCWdvdG8gZXJyb3V0OwotCQlfX3BlcmZfY291bnRlcl9pbml0X2NvbnRleHQoY3R4LCB0YXNrKTsKLQkJZ2V0X2N0eChjdHgpOwotCQlpZiAoY21weGNoZygmdGFzay0+cGVyZl9jb3VudGVyX2N0eHAsIE5VTEwsIGN0eCkpIHsKLQkJCS8qCi0JCQkgKiBXZSByYWNlZCB3aXRoIHNvbWUgb3RoZXIgdGFzazsgdXNlCi0JCQkgKiB0aGUgY29udGV4dCB0aGV5IHNldC4KLQkJCSAqLwotCQkJa2ZyZWUoY3R4KTsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQkJZ2V0X3Rhc2tfc3RydWN0KHRhc2spOwotCX0KLQotCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKLQlyZXR1cm4gY3R4OwotCi0gZXJyb3V0OgotCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2NvdW50ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JY291bnRlciA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcGVyZl9jb3VudGVyLCByY3VfaGVhZCk7Ci0JaWYgKGNvdW50ZXItPm5zKQotCQlwdXRfcGlkX25zKGNvdW50ZXItPm5zKTsKLQlrZnJlZShjb3VudGVyKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9wZW5kaW5nX3N5bmMoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcik7Ci0KLXN0YXRpYyB2b2lkIGZyZWVfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXBlcmZfcGVuZGluZ19zeW5jKGNvdW50ZXIpOwotCi0JaWYgKCFjb3VudGVyLT5wYXJlbnQpIHsKLQkJYXRvbWljX2RlYygmbnJfY291bnRlcnMpOwotCQlpZiAoY291bnRlci0+YXR0ci5tbWFwKQotCQkJYXRvbWljX2RlYygmbnJfbW1hcF9jb3VudGVycyk7Ci0JCWlmIChjb3VudGVyLT5hdHRyLmNvbW0pCi0JCQlhdG9taWNfZGVjKCZucl9jb21tX2NvdW50ZXJzKTsKLQkJaWYgKGNvdW50ZXItPmF0dHIudGFzaykKLQkJCWF0b21pY19kZWMoJm5yX3Rhc2tfY291bnRlcnMpOwotCX0KLQotCWlmIChjb3VudGVyLT5vdXRwdXQpIHsKLQkJZnB1dChjb3VudGVyLT5vdXRwdXQtPmZpbHApOwotCQljb3VudGVyLT5vdXRwdXQgPSBOVUxMOwotCX0KLQotCWlmIChjb3VudGVyLT5kZXN0cm95KQotCQljb3VudGVyLT5kZXN0cm95KGNvdW50ZXIpOwotCi0JcHV0X2N0eChjb3VudGVyLT5jdHgpOwotCWNhbGxfcmN1KCZjb3VudGVyLT5yY3VfaGVhZCwgZnJlZV9jb3VudGVyX3JjdSk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGZpbGUgaXMgZ29uZS4KLSAqLwotc3RhdGljIGludCBwZXJmX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0KLQlXQVJOX09OX09OQ0UoY3R4LT5wYXJlbnRfY3R4KTsKLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKLQlwZXJmX2NvdW50ZXJfcmVtb3ZlX2Zyb21fY29udGV4dChjb3VudGVyKTsKLQltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOwotCi0JbXV0ZXhfbG9jaygmY291bnRlci0+b3duZXItPnBlcmZfY291bnRlcl9tdXRleCk7Ci0JbGlzdF9kZWxfaW5pdCgmY291bnRlci0+b3duZXJfZW50cnkpOwotCW11dGV4X3VubG9jaygmY291bnRlci0+b3duZXItPnBlcmZfY291bnRlcl9tdXRleCk7Ci0JcHV0X3Rhc2tfc3RydWN0KGNvdW50ZXItPm93bmVyKTsKLQotCWZyZWVfY291bnRlcihjb3VudGVyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWFkX3NpemUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlpbnQgZW50cnkgPSBzaXplb2YodTY0KTsgLyogdmFsdWUgKi8KLQlpbnQgc2l6ZSA9IDA7Ci0JaW50IG5yID0gMTsKLQotCWlmIChjb3VudGVyLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEKQotCQlzaXplICs9IHNpemVvZih1NjQpOwotCi0JaWYgKGNvdW50ZXItPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpCi0JCXNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoY291bnRlci0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQotCQllbnRyeSArPSBzaXplb2YodTY0KTsKLQotCWlmIChjb3VudGVyLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApIHsKLQkJbnIgKz0gY291bnRlci0+Z3JvdXBfbGVhZGVyLT5ucl9zaWJsaW5nczsKLQkJc2l6ZSArPSBzaXplb2YodTY0KTsKLQl9Ci0KLQlzaXplICs9IGVudHJ5ICogbnI7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIHU2NCBwZXJmX2NvdW50ZXJfcmVhZF92YWx1ZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNoaWxkOwotCXU2NCB0b3RhbCA9IDA7Ci0KLQl0b3RhbCArPSBwZXJmX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmY291bnRlci0+Y2hpbGRfbGlzdCwgY2hpbGRfbGlzdCkKLQkJdG90YWwgKz0gcGVyZl9jb3VudGVyX3JlYWQoY2hpbGQpOwotCi0JcmV0dXJuIHRvdGFsOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWFkX2VudHJ5KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkJICAgdTY0IHJlYWRfZm9ybWF0LCBjaGFyIF9fdXNlciAqYnVmKQotewotCWludCBuID0gMCwgY291bnQgPSAwOwotCXU2NCB2YWx1ZXNbMl07Ci0KLQl2YWx1ZXNbbisrXSA9IHBlcmZfY291bnRlcl9yZWFkX3ZhbHVlKGNvdW50ZXIpOwotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQotCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfY291bnRlcl9pZChjb3VudGVyKTsKLQotCWNvdW50ID0gbiAqIHNpemVvZih1NjQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvdW50ZXJfcmVhZF9ncm91cChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSAgIHU2NCByZWFkX2Zvcm1hdCwgY2hhciBfX3VzZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpsZWFkZXIgPSBjb3VudGVyLT5ncm91cF9sZWFkZXIsICpzdWI7Ci0JaW50IG4gPSAwLCBzaXplID0gMCwgZXJyID0gLUVGQVVMVDsKLQl1NjQgdmFsdWVzWzNdOwotCi0JdmFsdWVzW24rK10gPSAxICsgbGVhZGVyLT5ucl9zaWJsaW5nczsKLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpIHsKLQkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfZW5hYmxlZCArCi0JCQlhdG9taWM2NF9yZWFkKCZsZWFkZXItPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7Ci0JfQotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykgewotCQl2YWx1ZXNbbisrXSA9IGxlYWRlci0+dG90YWxfdGltZV9ydW5uaW5nICsKLQkJCWF0b21pYzY0X3JlYWQoJmxlYWRlci0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKLQl9Ci0KLQlzaXplID0gbiAqIHNpemVvZih1NjQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyID0gcGVyZl9jb3VudGVyX3JlYWRfZW50cnkobGVhZGVyLCByZWFkX2Zvcm1hdCwgYnVmICsgc2l6ZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlzaXplICs9IGVycjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpIHsKLQkJZXJyID0gcGVyZl9jb3VudGVyX3JlYWRfZW50cnkoc3ViLCByZWFkX2Zvcm1hdCwKLQkJCQlidWYgKyBzaXplKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCi0JCXNpemUgKz0gZXJyOwotCX0KLQotCXJldHVybiBzaXplOwotfQotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9yZWFkX29uZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSB1NjQgcmVhZF9mb3JtYXQsIGNoYXIgX191c2VyICpidWYpCi17Ci0JdTY0IHZhbHVlc1s0XTsKLQlpbnQgbiA9IDA7Ci0KLQl2YWx1ZXNbbisrXSA9IHBlcmZfY291bnRlcl9yZWFkX3ZhbHVlKGNvdW50ZXIpOwotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgewotCQl2YWx1ZXNbbisrXSA9IGNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCArCi0JCQlhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOwotCX0KLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKLQkJdmFsdWVzW24rK10gPSBjb3VudGVyLT50b3RhbF90aW1lX3J1bm5pbmcgKwotCQkJYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKLQl9Ci0JaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCi0JCXZhbHVlc1tuKytdID0gcHJpbWFyeV9jb3VudGVyX2lkKGNvdW50ZXIpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgbiAqIHNpemVvZih1NjQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gbiAqIHNpemVvZih1NjQpOwotfQotCi0vKgotICogUmVhZCB0aGUgcGVyZm9ybWFuY2UgY291bnRlciAtIHNpbXBsZSBub24gYmxvY2tpbmcgdmVyc2lvbiBmb3Igbm93Ci0gKi8KLXN0YXRpYyBzc2l6ZV90Ci1wZXJmX3JlYWRfaHcoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXU2NCByZWFkX2Zvcm1hdCA9IGNvdW50ZXItPmF0dHIucmVhZF9mb3JtYXQ7Ci0JaW50IHJldDsKLQotCS8qCi0JICogUmV0dXJuIGVuZC1vZi1maWxlIGZvciBhIHJlYWQgb24gYSBjb3VudGVyIHRoYXQgaXMgaW4KLQkgKiBlcnJvciBzdGF0ZSAoaS5lLiBiZWNhdXNlIGl0IHdhcyBwaW5uZWQgYnV0IGl0IGNvdWxkbid0IGJlCi0JICogc2NoZWR1bGVkIG9uIHRvIHRoZSBDUFUgYXQgc29tZSBwb2ludCkuCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9FUlJPUikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY291bnQgPCBwZXJmX2NvdW50ZXJfcmVhZF9zaXplKGNvdW50ZXIpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCVdBUk5fT05fT05DRShjb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJmNvdW50ZXItPmNoaWxkX211dGV4KTsKLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkKLQkJcmV0ID0gcGVyZl9jb3VudGVyX3JlYWRfZ3JvdXAoY291bnRlciwgcmVhZF9mb3JtYXQsIGJ1Zik7Ci0JZWxzZQotCQlyZXQgPSBwZXJmX2NvdW50ZXJfcmVhZF9vbmUoY291bnRlciwgcmVhZF9mb3JtYXQsIGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZjb3VudGVyLT5jaGlsZF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdAotcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHBlcmZfcmVhZF9odyhjb3VudGVyLCBidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwZXJmX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgaW50IGV2ZW50cyA9IFBPTExfSFVQOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoY291bnRlci0+ZGF0YSk7Ci0JaWYgKGRhdGEpCi0JCWV2ZW50cyA9IGF0b21pY194Y2hnKCZkYXRhLT5wb2xsLCAwKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXBvbGxfd2FpdChmaWxlLCAmY291bnRlci0+d2FpdHEsIHdhaXQpOwotCi0JcmV0dXJuIGV2ZW50czsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX3Jlc2V0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JKHZvaWQpcGVyZl9jb3VudGVyX3JlYWQoY291bnRlcik7Ci0JYXRvbWljNjRfc2V0KCZjb3VudGVyLT5jb3VudCwgMCk7Ci0JcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKLX0KLQotLyoKLSAqIEhvbGRpbmcgdGhlIHRvcC1sZXZlbCBjb3VudGVyJ3MgY2hpbGRfbXV0ZXggbWVhbnMgdGhhdCBhbnkKLSAqIGRlc2NlbmRhbnQgcHJvY2VzcyB0aGF0IGhhcyBpbmhlcml0ZWQgdGhpcyBjb3VudGVyIHdpbGwgYmxvY2sKLSAqIGluIHN5bmNfY2hpbGRfY291bnRlciBpZiBpdCBnb2VzIHRvIGV4aXQsIHRodXMgc2F0aXNmeWluZyB0aGUKLSAqIHRhc2sgZXhpc3RlbmNlIHJlcXVpcmVtZW50cyBvZiBwZXJmX2NvdW50ZXJfZW5hYmxlL2Rpc2FibGUuCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9mb3JfZWFjaF9jaGlsZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCQl2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfY291bnRlciAqKSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjaGlsZDsKLQotCVdBUk5fT05fT05DRShjb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJmNvdW50ZXItPmNoaWxkX211dGV4KTsKLQlmdW5jKGNvdW50ZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZjb3VudGVyLT5jaGlsZF9saXN0LCBjaGlsZF9saXN0KQotCQlmdW5jKGNoaWxkKTsKLQltdXRleF91bmxvY2soJmNvdW50ZXItPmNoaWxkX211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX2Zvcl9lYWNoKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkJICB2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfY291bnRlciAqKSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9IGNvdW50ZXItPmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpzaWJsaW5nOwotCi0JV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7Ci0JbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7Ci0JY291bnRlciA9IGNvdW50ZXItPmdyb3VwX2xlYWRlcjsKLQotCXBlcmZfY291bnRlcl9mb3JfZWFjaF9jaGlsZChjb3VudGVyLCBmdW5jKTsKLQlmdW5jKGNvdW50ZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJmNvdW50ZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkKLQkJcGVyZl9jb3VudGVyX2Zvcl9lYWNoX2NoaWxkKGNvdW50ZXIsIGZ1bmMpOwotCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9jb3VudGVyX3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCB1NjQgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSBjb3VudGVyLT5jdHg7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWludCByZXQgPSAwOwotCXU2NCB2YWx1ZTsKLQotCWlmICghY291bnRlci0+YXR0ci5zYW1wbGVfcGVyaW9kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNpemUgPSBjb3B5X2Zyb21fdXNlcigmdmFsdWUsIGFyZywgc2l6ZW9mKHZhbHVlKSk7Ci0JaWYgKHNpemUgIT0gc2l6ZW9mKHZhbHVlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIXZhbHVlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7Ci0JaWYgKGNvdW50ZXItPmF0dHIuZnJlcSkgewotCQlpZiAodmFsdWUgPiBzeXNjdGxfcGVyZl9jb3VudGVyX3NhbXBsZV9yYXRlKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byB1bmxvY2s7Ci0JCX0KLQotCQljb3VudGVyLT5hdHRyLnNhbXBsZV9mcmVxID0gdmFsdWU7Ci0JfSBlbHNlIHsKLQkJY291bnRlci0+YXR0ci5zYW1wbGVfcGVyaW9kID0gdmFsdWU7Ci0JCWNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QgPSB2YWx1ZTsKLQl9Ci11bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHBlcmZfY291bnRlcl9zZXRfb3V0cHV0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBvdXRwdXRfZmQpOwotCi1zdGF0aWMgbG9uZyBwZXJmX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9jb3VudGVyICopOwotCXUzMiBmbGFncyA9IGFyZzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBQRVJGX0NPVU5URVJfSU9DX0VOQUJMRToKLQkJZnVuYyA9IHBlcmZfY291bnRlcl9lbmFibGU7Ci0JCWJyZWFrOwotCWNhc2UgUEVSRl9DT1VOVEVSX0lPQ19ESVNBQkxFOgotCQlmdW5jID0gcGVyZl9jb3VudGVyX2Rpc2FibGU7Ci0JCWJyZWFrOwotCWNhc2UgUEVSRl9DT1VOVEVSX0lPQ19SRVNFVDoKLQkJZnVuYyA9IHBlcmZfY291bnRlcl9yZXNldDsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9JT0NfUkVGUkVTSDoKLQkJcmV0dXJuIHBlcmZfY291bnRlcl9yZWZyZXNoKGNvdW50ZXIsIGFyZyk7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9JT0NfUEVSSU9EOgotCQlyZXR1cm4gcGVyZl9jb3VudGVyX3BlcmlvZChjb3VudGVyLCAodTY0IF9fdXNlciAqKWFyZyk7Ci0KLQljYXNlIFBFUkZfQ09VTlRFUl9JT0NfU0VUX09VVFBVVDoKLQkJcmV0dXJuIHBlcmZfY291bnRlcl9zZXRfb3V0cHV0KGNvdW50ZXIsIGFyZyk7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RUWTsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBQRVJGX0lPQ19GTEFHX0dST1VQKQotCQlwZXJmX2NvdW50ZXJfZm9yX2VhY2goY291bnRlciwgZnVuYyk7Ci0JZWxzZQotCQlwZXJmX2NvdW50ZXJfZm9yX2VhY2hfY2hpbGQoY291bnRlciwgZnVuYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBlcmZfY291bnRlcl90YXNrX2VuYWJsZSh2b2lkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQltdXRleF9sb2NrKCZjdXJyZW50LT5wZXJmX2NvdW50ZXJfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN1cnJlbnQtPnBlcmZfY291bnRlcl9saXN0LCBvd25lcl9lbnRyeSkKLQkJcGVyZl9jb3VudGVyX2Zvcl9lYWNoX2NoaWxkKGNvdW50ZXIsIHBlcmZfY291bnRlcl9lbmFibGUpOwotCW11dGV4X3VubG9jaygmY3VycmVudC0+cGVyZl9jb3VudGVyX211dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgcGVyZl9jb3VudGVyX3Rhc2tfZGlzYWJsZSh2b2lkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXI7Ci0KLQltdXRleF9sb2NrKCZjdXJyZW50LT5wZXJmX2NvdW50ZXJfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmN1cnJlbnQtPnBlcmZfY291bnRlcl9saXN0LCBvd25lcl9lbnRyeSkKLQkJcGVyZl9jb3VudGVyX2Zvcl9lYWNoX2NoaWxkKGNvdW50ZXIsIHBlcmZfY291bnRlcl9kaXNhYmxlKTsKLQltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfY291bnRlcl9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmbmRlZiBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUCi0jIGRlZmluZSBQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUIDAKLSNlbmRpZgotCi1zdGF0aWMgaW50IHBlcmZfY291bnRlcl9pbmRleChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCWlmIChjb3VudGVyLT5zdGF0ZSAhPSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBjb3VudGVyLT5ody5pZHggKyAxIC0gUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVDsKLX0KLQotLyoKLSAqIENhbGxlcnMgbmVlZCB0byBlbnN1cmUgdGhlcmUgY2FuIGJlIG5vIG5lc3Rpbmcgb2YgdGhpcyBmdW5jdGlvbiwgb3RoZXJ3aXNlCi0gKiB0aGUgc2VxbG9jayBsb2dpYyBnb2VzIGJhZC4gV2UgY2FuIG5vdCBzZXJpYWxpemUgdGhpcyBiZWNhdXNlIHRoZSBhcmNoCi0gKiBjb2RlIGNhbGxzIHRoaXMgZnJvbSBOTUkgY29udGV4dC4KLSAqLwotdm9pZCBwZXJmX2NvdW50ZXJfdXBkYXRlX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9tbWFwX3BhZ2UgKnVzZXJwZzsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5kYXRhKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gdW5sb2NrOwotCi0JdXNlcnBnID0gZGF0YS0+dXNlcl9wYWdlOwotCi0JLyoKLQkgKiBEaXNhYmxlIHByZWVtcHRpb24gc28gYXMgdG8gbm90IGxldCB0aGUgY29ycmVzcG9uZGluZyB1c2VyLXNwYWNlCi0JICogc3BpbiB0b28gbG9uZyBpZiB3ZSBnZXQgcHJlZW1wdGVkLgotCSAqLwotCXByZWVtcHRfZGlzYWJsZSgpOwotCSsrdXNlcnBnLT5sb2NrOwotCWJhcnJpZXIoKTsKLQl1c2VycGctPmluZGV4ID0gcGVyZl9jb3VudGVyX2luZGV4KGNvdW50ZXIpOwotCXVzZXJwZy0+b2Zmc2V0ID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y291bnQpOwotCWlmIChjb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfQUNUSVZFKQotCQl1c2VycGctPm9mZnNldCAtPSBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5ody5wcmV2X2NvdW50KTsKLQotCXVzZXJwZy0+dGltZV9lbmFibGVkID0gY291bnRlci0+dG90YWxfdGltZV9lbmFibGVkICsKLQkJCWF0b21pYzY0X3JlYWQoJmNvdW50ZXItPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7Ci0KLQl1c2VycGctPnRpbWVfcnVubmluZyA9IGNvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZyArCi0JCQlhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOwotCi0JYmFycmllcigpOwotCSsrdXNlcnBnLT5sb2NrOwotCXByZWVtcHRfZW5hYmxlKCk7Ci11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwotCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7Ci0KLQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgewotCQlpZiAodm1mLT5wZ29mZiA9PSAwKQotCQkJcmV0ID0gMDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5kYXRhKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKHZtZi0+cGdvZmYgPT0gMCkgewotCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+dXNlcl9wYWdlKTsKLQl9IGVsc2UgewotCQlpbnQgbnIgPSB2bWYtPnBnb2ZmIC0gMTsKLQotCQlpZiAoKHVuc2lnbmVkKW5yID4gZGF0YS0+bnJfcGFnZXMpCi0JCQlnb3RvIHVubG9jazsKLQotCQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpCi0JCQlnb3RvIHVubG9jazsKLQotCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+ZGF0YV9wYWdlc1tucl0pOwotCX0KLQotCWdldF9wYWdlKHZtZi0+cGFnZSk7Ci0Jdm1mLT5wYWdlLT5tYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7Ci0Jdm1mLT5wYWdlLT5pbmRleCAgID0gdm1mLT5wZ29mZjsKLQotCXJldCA9IDA7Ci11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBucl9wYWdlcykKLXsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWludCBpOwotCi0JV0FSTl9PTihhdG9taWNfcmVhZCgmY291bnRlci0+bW1hcF9jb3VudCkpOwotCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEpOwotCXNpemUgKz0gbnJfcGFnZXMgKiBzaXplb2Yodm9pZCAqKTsKLQotCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJZ290byBmYWlsOwotCi0JZGF0YS0+dXNlcl9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhLT51c2VyX3BhZ2UpCi0JCWdvdG8gZmFpbF91c2VyX3BhZ2U7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQlkYXRhLT5kYXRhX3BhZ2VzW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghZGF0YS0+ZGF0YV9wYWdlc1tpXSkKLQkJCWdvdG8gZmFpbF9kYXRhX3BhZ2VzOwotCX0KLQotCWRhdGEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7Ci0JYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOwotCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGNvdW50ZXItPmRhdGEsIGRhdGEpOwotCi0JcmV0dXJuIDA7Ci0KLWZhaWxfZGF0YV9wYWdlczoKLQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT51c2VyX3BhZ2UpOwotCi1mYWlsX3VzZXJfcGFnZToKLQlrZnJlZShkYXRhKTsKLQotZmFpbDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2ZyZWVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKTsKLQotCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwotCV9fZnJlZV9wYWdlKHBhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBfX3BlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKLXsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEsIHJjdV9oZWFkKTsKLQotCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+dXNlcl9wYWdlKTsKLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnJfcGFnZXM7IGkrKykKLQkJcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKLQotCWtmcmVlKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gY291bnRlci0+ZGF0YTsKLQotCVdBUk5fT04oYXRvbWljX3JlYWQoJmNvdW50ZXItPm1tYXBfY291bnQpKTsKLQotCXJjdV9hc3NpZ25fcG9pbnRlcihjb3VudGVyLT5kYXRhLCBOVUxMKTsKLQljYWxsX3JjdSgmZGF0YS0+cmN1X2hlYWQsIF9fcGVyZl9tbWFwX2RhdGFfZnJlZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWF0b21pY19pbmMoJmNvdW50ZXItPm1tYXBfY291bnQpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JV0FSTl9PTl9PTkNFKGNvdW50ZXItPmN0eC0+cGFyZW50X2N0eCk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmNvdW50ZXItPm1tYXBfY291bnQsICZjb3VudGVyLT5tbWFwX211dGV4KSkgewotCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKLQotCQlhdG9taWNfbG9uZ19zdWIoY291bnRlci0+ZGF0YS0+bnJfcGFnZXMgKyAxLCAmdXNlci0+bG9ja2VkX3ZtKTsKLQkJdm1hLT52bV9tbS0+bG9ja2VkX3ZtIC09IGNvdW50ZXItPmRhdGEtPm5yX2xvY2tlZDsKLQkJcGVyZl9tbWFwX2RhdGFfZnJlZShjb3VudGVyKTsKLQkJbXV0ZXhfdW5sb2NrKCZjb3VudGVyLT5tbWFwX211dGV4KTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGVyZl9tbWFwX3Ztb3BzID0gewotCS5vcGVuCQk9IHBlcmZfbW1hcF9vcGVuLAotCS5jbG9zZQkJPSBwZXJmX21tYXBfY2xvc2UsCi0JLmZhdWx0CQk9IHBlcmZfbW1hcF9mYXVsdCwKLQkucGFnZV9ta3dyaXRlCT0gcGVyZl9tbWFwX2ZhdWx0LAotfTsKLQotc3RhdGljIGludCBwZXJmX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyB1c2VyX2xvY2tlZCwgdXNlcl9sb2NrX2xpbWl0OwotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGN1cnJlbnRfdXNlcigpOwotCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OwotCXVuc2lnbmVkIGxvbmcgdm1hX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBucl9wYWdlczsKLQlsb25nIHVzZXJfZXh0cmEsIGV4dHJhOwotCWludCByZXQgPSAwOwotCi0JaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jdm1hX3NpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JbnJfcGFnZXMgPSAodm1hX3NpemUgLyBQQUdFX1NJWkUpIC0gMTsKLQotCS8qCi0JICogSWYgd2UgaGF2ZSBkYXRhIHBhZ2VzIGVuc3VyZSB0aGV5J3JlIGEgcG93ZXItb2YtdHdvIG51bWJlciwgc28gd2UKLQkgKiBjYW4gZG8gYml0bWFza3MgaW5zdGVhZCBvZiBtb2R1bG8uCi0JICovCi0JaWYgKG5yX3BhZ2VzICE9IDAgJiYgIWlzX3Bvd2VyX29mXzIobnJfcGFnZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh2bWFfc2l6ZSAhPSBQQUdFX1NJWkUgKiAoMSArIG5yX3BhZ2VzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodm1hLT52bV9wZ29mZiAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCVdBUk5fT05fT05DRShjb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJmNvdW50ZXItPm1tYXBfbXV0ZXgpOwotCWlmIChjb3VudGVyLT5vdXRwdXQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JaWYgKGF0b21pY19pbmNfbm90X3plcm8oJmNvdW50ZXItPm1tYXBfY291bnQpKSB7Ci0JCWlmIChucl9wYWdlcyAhPSBjb3VudGVyLT5kYXRhLT5ucl9wYWdlcykKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXVzZXJfZXh0cmEgPSBucl9wYWdlcyArIDE7Ci0JdXNlcl9sb2NrX2xpbWl0ID0gc3lzY3RsX3BlcmZfY291bnRlcl9tbG9jayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKLQotCS8qCi0JICogSW5jcmVhc2UgdGhlIGxpbWl0IGxpbmVhcmx5IHdpdGggbW9yZSBDUFVzOgotCSAqLwotCXVzZXJfbG9ja19saW1pdCAqPSBudW1fb25saW5lX2NwdXMoKTsKLQotCXVzZXJfbG9ja2VkID0gYXRvbWljX2xvbmdfcmVhZCgmdXNlci0+bG9ja2VkX3ZtKSArIHVzZXJfZXh0cmE7Ci0KLQlleHRyYSA9IDA7Ci0JaWYgKHVzZXJfbG9ja2VkID4gdXNlcl9sb2NrX2xpbWl0KQotCQlleHRyYSA9IHVzZXJfbG9ja2VkIC0gdXNlcl9sb2NrX2xpbWl0OwotCi0JbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXI7Ci0JbG9ja19saW1pdCA+Pj0gUEFHRV9TSElGVDsKLQlsb2NrZWQgPSB2bWEtPnZtX21tLT5sb2NrZWRfdm0gKyBleHRyYTsKLQotCWlmICgobG9ja2VkID4gbG9ja19saW1pdCkgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkgewotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCVdBUk5fT04oY291bnRlci0+ZGF0YSk7Ci0JcmV0ID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoY291bnRlciwgbnJfcGFnZXMpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwotCi0JYXRvbWljX3NldCgmY291bnRlci0+bW1hcF9jb3VudCwgMSk7Ci0JYXRvbWljX2xvbmdfYWRkKHVzZXJfZXh0cmEsICZ1c2VyLT5sb2NrZWRfdm0pOwotCXZtYS0+dm1fbW0tPmxvY2tlZF92bSArPSBleHRyYTsKLQljb3VudGVyLT5kYXRhLT5ucl9sb2NrZWQgPSBleHRyYTsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQotCQljb3VudGVyLT5kYXRhLT53cml0YWJsZSA9IDE7Ci0KLXVubG9jazoKLQltdXRleF91bmxvY2soJmNvdW50ZXItPm1tYXBfbXV0ZXgpOwotCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKLQl2bWEtPnZtX29wcyA9ICZwZXJmX21tYXBfdm1vcHM7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBlcmZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCByZXR2YWw7Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZjb3VudGVyLT5mYXN5bmMpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGVyZl9mb3BzID0gewotCS5yZWxlYXNlCQk9IHBlcmZfcmVsZWFzZSwKLQkucmVhZAkJCT0gcGVyZl9yZWFkLAotCS5wb2xsCQkJPSBwZXJmX3BvbGwsCi0JLnVubG9ja2VkX2lvY3RsCQk9IHBlcmZfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bAkJPSBwZXJmX2lvY3RsLAotCS5tbWFwCQkJPSBwZXJmX21tYXAsCi0JLmZhc3luYwkJCT0gcGVyZl9mYXN5bmMsCi19OwotCi0vKgotICogUGVyZiBjb3VudGVyIHdha2V1cAotICoKLSAqIElmIHRoZXJlJ3MgZGF0YSwgZW5zdXJlIHdlIHNldCB0aGUgcG9sbCgpIHN0YXRlIGFuZCBwdWJsaXNoIGV2ZXJ5dGhpbmcKLSAqIHRvIHVzZXItc3BhY2UgYmVmb3JlIHdha2luZyBldmVyeWJvZHkgdXAuCi0gKi8KLQotdm9pZCBwZXJmX2NvdW50ZXJfd2FrZXVwKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0Jd2FrZV91cF9hbGwoJmNvdW50ZXItPndhaXRxKTsKLQotCWlmIChjb3VudGVyLT5wZW5kaW5nX2tpbGwpIHsKLQkJa2lsbF9mYXN5bmMoJmNvdW50ZXItPmZhc3luYywgU0lHSU8sIGNvdW50ZXItPnBlbmRpbmdfa2lsbCk7Ci0JCWNvdW50ZXItPnBlbmRpbmdfa2lsbCA9IDA7Ci0JfQotfQotCi0vKgotICogUGVuZGluZyB3YWtldXBzCi0gKgotICogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gd2FrZXVwIHVwIGZyb20gTk1JIChvciBycS0+bG9jaykgY29udGV4dC4KLSAqCi0gKiBUaGUgTk1JIGJpdCBtZWFucyB3ZSBjYW5ub3QgcG9zc2libHkgdGFrZSBsb2Nrcy4gVGhlcmVmb3JlLCBtYWludGFpbiBhCi0gKiBzaW5nbGUgbGlua2VkIGxpc3QgYW5kIHVzZSBjbXB4Y2hnKCkgdG8gYWRkIGVudHJpZXMgbG9ja2xlc3MuCi0gKi8KLQotc3RhdGljIHZvaWQgcGVyZl9wZW5kaW5nX2NvdW50ZXIoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqZW50cnkpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciA9IGNvbnRhaW5lcl9vZihlbnRyeSwKLQkJCXN0cnVjdCBwZXJmX2NvdW50ZXIsIHBlbmRpbmcpOwotCi0JaWYgKGNvdW50ZXItPnBlbmRpbmdfZGlzYWJsZSkgewotCQljb3VudGVyLT5wZW5kaW5nX2Rpc2FibGUgPSAwOwotCQlfX3BlcmZfY291bnRlcl9kaXNhYmxlKGNvdW50ZXIpOwotCX0KLQotCWlmIChjb3VudGVyLT5wZW5kaW5nX3dha2V1cCkgewotCQljb3VudGVyLT5wZW5kaW5nX3dha2V1cCA9IDA7Ci0JCXBlcmZfY291bnRlcl93YWtldXAoY291bnRlcik7Ci0JfQotfQotCi0jZGVmaW5lIFBFTkRJTkdfVEFJTCAoKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKiktMVVMKQotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqLCBwZXJmX3BlbmRpbmdfaGVhZCkgPSB7Ci0JUEVORElOR19UQUlMLAotfTsKLQotc3RhdGljIHZvaWQgcGVyZl9wZW5kaW5nX3F1ZXVlKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKmVudHJ5LAotCQkJICAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopKQotewotCXN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKipoZWFkOwotCi0JaWYgKGNtcHhjaGcoJmVudHJ5LT5uZXh0LCBOVUxMLCBQRU5ESU5HX1RBSUwpICE9IE5VTEwpCi0JCXJldHVybjsKLQotCWVudHJ5LT5mdW5jID0gZnVuYzsKLQotCWhlYWQgPSAmZ2V0X2NwdV92YXIocGVyZl9wZW5kaW5nX2hlYWQpOwotCi0JZG8gewotCQllbnRyeS0+bmV4dCA9ICpoZWFkOwotCX0gd2hpbGUgKGNtcHhjaGcoaGVhZCwgZW50cnktPm5leHQsIGVudHJ5KSAhPSBlbnRyeS0+bmV4dCk7Ci0KLQlzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcoKTsKLQotCXB1dF9jcHVfdmFyKHBlcmZfcGVuZGluZ19oZWFkKTsKLX0KLQotc3RhdGljIGludCBfX3BlcmZfcGVuZGluZ19ydW4odm9pZCkKLXsKLQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICpsaXN0OwotCWludCBuciA9IDA7Ci0KLQlsaXN0ID0geGNoZygmX19nZXRfY3B1X3ZhcihwZXJmX3BlbmRpbmdfaGVhZCksIFBFTkRJTkdfVEFJTCk7Ci0Jd2hpbGUgKGxpc3QgIT0gUEVORElOR19UQUlMKSB7Ci0JCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopOwotCQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICplbnRyeSA9IGxpc3Q7Ci0KLQkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0KLQkJZnVuYyA9IGVudHJ5LT5mdW5jOwotCQllbnRyeS0+bmV4dCA9IE5VTEw7Ci0JCS8qCi0JCSAqIEVuc3VyZSB3ZSBvYnNlcnZlIHRoZSB1bnF1ZXVlIGJlZm9yZSB3ZSBpc3N1ZSB0aGUgd2FrZXVwLAotCQkgKiBzbyB0aGF0IHdlIHdvbid0IGJlIHdhaXRpbmcgZm9yZXZlci4KLQkJICogLS0gc2VlIHBlcmZfbm90X3BlbmRpbmcoKS4KLQkJICovCi0JCXNtcF93bWIoKTsKLQotCQlmdW5jKGVudHJ5KTsKLQkJbnIrKzsKLQl9Ci0KLQlyZXR1cm4gbnI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBlcmZfbm90X3BlbmRpbmcoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQkvKgotCSAqIElmIHdlIGZsdXNoIG9uIHdoYXRldmVyIGNwdSB3ZSBydW4sIHRoZXJlIGlzIGEgY2hhbmNlIHdlIGRvbid0Ci0JICogbmVlZCB0byB3YWl0LgotCSAqLwotCWdldF9jcHUoKTsKLQlfX3BlcmZfcGVuZGluZ19ydW4oKTsKLQlwdXRfY3B1KCk7Ci0KLQkvKgotCSAqIEVuc3VyZSB3ZSBzZWUgdGhlIHByb3BlciBxdWV1ZSBzdGF0ZSBiZWZvcmUgZ29pbmcgdG8gc2xlZXAKLQkgKiBzbyB0aGF0IHdlIGRvIG5vdCBtaXNzIHRoZSB3YWtldXAuIC0tIHNlZSBwZXJmX3BlbmRpbmdfaGFuZGxlKCkKLQkgKi8KLQlzbXBfcm1iKCk7Ci0JcmV0dXJuIGNvdW50ZXItPnBlbmRpbmcubmV4dCA9PSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXdhaXRfZXZlbnQoY291bnRlci0+d2FpdHEsIHBlcmZfbm90X3BlbmRpbmcoY291bnRlcikpOwotfQotCi12b2lkIHBlcmZfY291bnRlcl9kb19wZW5kaW5nKHZvaWQpCi17Ci0JX19wZXJmX3BlbmRpbmdfcnVuKCk7Ci19Ci0KLS8qCi0gKiBDYWxsY2hhaW4gc3VwcG9ydCAtLSBhcmNoIHNwZWNpZmljCi0gKi8KLQotX193ZWFrIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqcGVyZl9jYWxsY2hhaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBPdXRwdXQKLSAqLwotCi1zdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyCSpjb3VudGVyOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YQkqZGF0YTsKLQl1bnNpZ25lZCBsb25nCQloZWFkOwotCXVuc2lnbmVkIGxvbmcJCW9mZnNldDsKLQlpbnQJCQlubWk7Ci0JaW50CQkJc2FtcGxlOwotCWludAkJCWxvY2tlZDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLX07Ci0KLXN0YXRpYyBib29sIHBlcmZfb3V0cHV0X3NwYWNlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBoZWFkKQotewotCXVuc2lnbmVkIGxvbmcgdGFpbDsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQlpZiAoIWRhdGEtPndyaXRhYmxlKQotCQlyZXR1cm4gdHJ1ZTsKLQotCW1hc2sgPSAoZGF0YS0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCkgLSAxOwotCS8qCi0JICogVXNlcnNwYWNlIGNvdWxkIGNob29zZSB0byBpc3N1ZSBhIG1iKCkgYmVmb3JlIHVwZGF0aW5nIHRoZSB0YWlsCi0JICogcG9pbnRlci4gU28gdGhhdCBhbGwgcmVhZHMgd2lsbCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSB3cml0ZSBpcwotCSAqIGlzc3VlZC4KLQkgKi8KLQl0YWlsID0gQUNDRVNTX09OQ0UoZGF0YS0+dXNlcl9wYWdlLT5kYXRhX3RhaWwpOwotCXNtcF9ybWIoKTsKLQotCW9mZnNldCA9IChvZmZzZXQgLSB0YWlsKSAmIG1hc2s7Ci0JaGVhZCAgID0gKGhlYWQgICAtIHRhaWwpICYgbWFzazsKLQotCWlmICgoaW50KShoZWFkIC0gb2Zmc2V0KSA8IDApCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX291dHB1dF93YWtldXAoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQotewotCWF0b21pY19zZXQoJmhhbmRsZS0+ZGF0YS0+cG9sbCwgUE9MTF9JTik7Ci0KLQlpZiAoaGFuZGxlLT5ubWkpIHsKLQkJaGFuZGxlLT5jb3VudGVyLT5wZW5kaW5nX3dha2V1cCA9IDE7Ci0JCXBlcmZfcGVuZGluZ19xdWV1ZSgmaGFuZGxlLT5jb3VudGVyLT5wZW5kaW5nLAotCQkJCSAgIHBlcmZfcGVuZGluZ19jb3VudGVyKTsKLQl9IGVsc2UKLQkJcGVyZl9jb3VudGVyX3dha2V1cChoYW5kbGUtPmNvdW50ZXIpOwotfQotCi0vKgotICogQ3VyaW91cyBsb2NraW5nIGNvbnN0cnVjdC4KLSAqCi0gKiBXZSBuZWVkIHRvIGVuc3VyZSBhIGxhdGVyIGV2ZW50IGRvZXNuJ3QgcHVibGlzaCBhIGhlYWQgd2hlbiBhIGZvcm1lcgotICogZXZlbnQgaXNuJ3QgZG9uZSB3cml0aW5nLiBIb3dldmVyIHNpbmNlIHdlIG5lZWQgdG8gZGVhbCB3aXRoIE5NSXMgd2UKLSAqIGNhbm5vdCBmdWxseSBzZXJpYWxpemUgdGhpbmdzLgotICoKLSAqIFdoYXQgd2UgZG8gaXMgc2VyaWFsaXplIGJldHdlZW4gQ1BVcyBzbyB3ZSBvbmx5IGhhdmUgdG8gZGVhbCB3aXRoIE5NSQotICogbmVzdGluZyBvbiBhIHNpbmdsZSBDUFUuCi0gKgotICogV2Ugb25seSBwdWJsaXNoIHRoZSBoZWFkIChhbmQgZ2VuZXJhdGUgYSB3YWtldXApIHdoZW4gdGhlIG91dGVyLW1vc3QKLSAqIGV2ZW50IGNvbXBsZXRlcy4KLSAqLwotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfbG9jayhzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCi17Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gaGFuZGxlLT5kYXRhOwotCWludCBjcHU7Ci0KLQloYW5kbGUtPmxvY2tlZCA9IDA7Ci0KLQlsb2NhbF9pcnFfc2F2ZShoYW5kbGUtPmZsYWdzKTsKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoaW5fbm1pKCkgJiYgYXRvbWljX3JlYWQoJmRhdGEtPmxvY2spID09IGNwdSkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZkYXRhLT5sb2NrLCAtMSwgY3B1KSAhPSAtMSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQloYW5kbGUtPmxvY2tlZCA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfb3V0cHV0X3VubG9jayhzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCi17Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gaGFuZGxlLT5kYXRhOwotCXVuc2lnbmVkIGxvbmcgaGVhZDsKLQlpbnQgY3B1OwotCi0JZGF0YS0+ZG9uZV9oZWFkID0gZGF0YS0+aGVhZDsKLQotCWlmICghaGFuZGxlLT5sb2NrZWQpCi0JCWdvdG8gb3V0OwotCi1hZ2FpbjoKLQkvKgotCSAqIFRoZSB4Y2hnIGltcGxpZXMgYSBmdWxsIGJhcnJpZXIgdGhhdCBlbnN1cmVzIGFsbCB3cml0ZXMgYXJlIGRvbmUKLQkgKiBiZWZvcmUgd2UgcHVibGlzaCB0aGUgbmV3IGhlYWQsIG1hdGNoZWQgYnkgYSBybWIoKSBpbiB1c2Vyc3BhY2Ugd2hlbgotCSAqIHJlYWRpbmcgdGhpcyBwb3NpdGlvbi4KLQkgKi8KLQl3aGlsZSAoKGhlYWQgPSBhdG9taWNfbG9uZ194Y2hnKCZkYXRhLT5kb25lX2hlYWQsIDApKSkKLQkJZGF0YS0+dXNlcl9wYWdlLT5kYXRhX2hlYWQgPSBoZWFkOwotCi0JLyoKLQkgKiBOTUkgY2FuIGhhcHBlbiBoZXJlLCB3aGljaCBtZWFucyB3ZSBjYW4gbWlzcyBhIGRvbmVfaGVhZCB1cGRhdGUuCi0JICovCi0KLQljcHUgPSBhdG9taWNfeGNoZygmZGF0YS0+bG9jaywgLTEpOwotCVdBUk5fT05fT05DRShjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCS8qCi0JICogVGhlcmVmb3JlIHdlIGhhdmUgdG8gdmFsaWRhdGUgd2UgZGlkIG5vdCBpbmRlZWQgZG8gc28uCi0JICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19sb25nX3JlYWQoJmRhdGEtPmRvbmVfaGVhZCkpKSB7Ci0JCS8qCi0JCSAqIFNpbmNlIHdlIGhhZCBpdCBsb2NrZWQsIHdlIGNhbiBsb2NrIGl0IGFnYWluLgotCQkgKi8KLQkJd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZkYXRhLT5sb2NrLCAtMSwgY3B1KSAhPSAtMSkKLQkJCWNwdV9yZWxheCgpOwotCi0JCWdvdG8gYWdhaW47Ci0JfQotCi0JaWYgKGF0b21pY194Y2hnKCZkYXRhLT53YWtldXAsIDApKQotCQlwZXJmX291dHB1dF93YWtldXAoaGFuZGxlKTsKLW91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShoYW5kbGUtPmZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfY29weShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBpbnQgcGFnZXNfbWFzazsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXVuc2lnbmVkIGludCBzaXplOwotCXZvaWQgKipwYWdlczsKLQotCW9mZnNldAkJPSBoYW5kbGUtPm9mZnNldDsKLQlwYWdlc19tYXNrCT0gaGFuZGxlLT5kYXRhLT5ucl9wYWdlcyAtIDE7Ci0JcGFnZXMJCT0gaGFuZGxlLT5kYXRhLT5kYXRhX3BhZ2VzOwotCi0JZG8gewotCQl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQ7Ci0JCWludCBucjsKLQotCQlucgkgICAgPSAob2Zmc2V0ID4+IFBBR0VfU0hJRlQpICYgcGFnZXNfbWFzazsKLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCXNpemUJICAgID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUgLSBwYWdlX29mZnNldCwgbGVuKTsKLQotCQltZW1jcHkocGFnZXNbbnJdICsgcGFnZV9vZmZzZXQsIGJ1Ziwgc2l6ZSk7Ci0KLQkJbGVuCSAgICAtPSBzaXplOwotCQlidWYJICAgICs9IHNpemU7Ci0JCW9mZnNldAkgICAgKz0gc2l6ZTsKLQl9IHdoaWxlIChsZW4pOwotCi0JaGFuZGxlLT5vZmZzZXQgPSBvZmZzZXQ7Ci0KLQkvKgotCSAqIENoZWNrIHdlIGRpZG4ndCBjb3B5IHBhc3Qgb3VyIHJlc2VydmF0aW9uIHdpbmRvdywgdGFraW5nIHRoZQotCSAqIHBvc3NpYmxlIHVuc2lnbmVkIGludCB3cmFwIGludG8gYWNjb3VudC4KLQkgKi8KLQlXQVJOX09OX09OQ0UoKChsb25nKShoYW5kbGUtPmhlYWQgLSBoYW5kbGUtPm9mZnNldCkpIDwgMCk7Ci19Ci0KLSNkZWZpbmUgcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgeCkgXAotCXBlcmZfb3V0cHV0X2NvcHkoKGhhbmRsZSksICYoeCksIHNpemVvZih4KSkKLQotc3RhdGljIGludCBwZXJmX291dHB1dF9iZWdpbihzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGludCBzaXplLAotCQkJICAgICBpbnQgbm1pLCBpbnQgc2FtcGxlKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKm91dHB1dF9jb3VudGVyOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBoZWFkOwotCWludCBoYXZlX2xvc3Q7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKLQkJdTY0CQkJIGlkOwotCQl1NjQJCQkgbG9zdDsKLQl9IGxvc3RfZXZlbnQ7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JLyoKLQkgKiBGb3IgaW5oZXJpdGVkIGNvdW50ZXJzIHdlIHNlbmQgYWxsIHRoZSBvdXRwdXQgdG93YXJkcyB0aGUgcGFyZW50LgotCSAqLwotCWlmIChjb3VudGVyLT5wYXJlbnQpCi0JCWNvdW50ZXIgPSBjb3VudGVyLT5wYXJlbnQ7Ci0KLQlvdXRwdXRfY291bnRlciA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5vdXRwdXQpOwotCWlmIChvdXRwdXRfY291bnRlcikKLQkJY291bnRlciA9IG91dHB1dF9jb3VudGVyOwotCi0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5kYXRhKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gb3V0OwotCi0JaGFuZGxlLT5kYXRhCT0gZGF0YTsKLQloYW5kbGUtPmNvdW50ZXIJPSBjb3VudGVyOwotCWhhbmRsZS0+bm1pCT0gbm1pOwotCWhhbmRsZS0+c2FtcGxlCT0gc2FtcGxlOwotCi0JaWYgKCFkYXRhLT5ucl9wYWdlcykKLQkJZ290byBmYWlsOwotCi0JaGF2ZV9sb3N0ID0gYXRvbWljX3JlYWQoJmRhdGEtPmxvc3QpOwotCWlmIChoYXZlX2xvc3QpCi0JCXNpemUgKz0gc2l6ZW9mKGxvc3RfZXZlbnQpOwotCi0JcGVyZl9vdXRwdXRfbG9jayhoYW5kbGUpOwotCi0JZG8gewotCQlvZmZzZXQgPSBoZWFkID0gYXRvbWljX2xvbmdfcmVhZCgmZGF0YS0+aGVhZCk7Ci0JCWhlYWQgKz0gc2l6ZTsKLQkJaWYgKHVubGlrZWx5KCFwZXJmX291dHB1dF9zcGFjZShkYXRhLCBvZmZzZXQsIGhlYWQpKSkKLQkJCWdvdG8gZmFpbDsKLQl9IHdoaWxlIChhdG9taWNfbG9uZ19jbXB4Y2hnKCZkYXRhLT5oZWFkLCBvZmZzZXQsIGhlYWQpICE9IG9mZnNldCk7Ci0KLQloYW5kbGUtPm9mZnNldAk9IG9mZnNldDsKLQloYW5kbGUtPmhlYWQJPSBoZWFkOwotCi0JaWYgKChvZmZzZXQgPj4gUEFHRV9TSElGVCkgIT0gKGhlYWQgPj4gUEFHRV9TSElGVCkpCi0JCWF0b21pY19zZXQoJmRhdGEtPndha2V1cCwgMSk7Ci0KLQlpZiAoaGF2ZV9sb3N0KSB7Ci0JCWxvc3RfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX0VWRU5UX0xPU1Q7Ci0JCWxvc3RfZXZlbnQuaGVhZGVyLm1pc2MgPSAwOwotCQlsb3N0X2V2ZW50LmhlYWRlci5zaXplID0gc2l6ZW9mKGxvc3RfZXZlbnQpOwotCQlsb3N0X2V2ZW50LmlkICAgICAgICAgID0gY291bnRlci0+aWQ7Ci0JCWxvc3RfZXZlbnQubG9zdCAgICAgICAgPSBhdG9taWNfeGNoZygmZGF0YS0+bG9zdCwgMCk7Ci0KLQkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgbG9zdF9ldmVudCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWZhaWw6Ci0JYXRvbWljX2luYygmZGF0YS0+bG9zdCk7Ci0JcGVyZl9vdXRwdXRfdW5sb2NrKGhhbmRsZSk7Ci1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfZW5kKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gaGFuZGxlLT5jb3VudGVyOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKLQotCWludCB3YWtldXBfZXZlbnRzID0gY291bnRlci0+YXR0ci53YWtldXBfZXZlbnRzOwotCi0JaWYgKGhhbmRsZS0+c2FtcGxlICYmIHdha2V1cF9ldmVudHMpIHsKLQkJaW50IGV2ZW50cyA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5ldmVudHMpOwotCQlpZiAoZXZlbnRzID49IHdha2V1cF9ldmVudHMpIHsKLQkJCWF0b21pY19zdWIod2FrZXVwX2V2ZW50cywgJmRhdGEtPmV2ZW50cyk7Ci0JCQlhdG9taWNfc2V0KCZkYXRhLT53YWtldXAsIDEpOwotCQl9Ci0JfQotCi0JcGVyZl9vdXRwdXRfdW5sb2NrKGhhbmRsZSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB1MzIgcGVyZl9jb3VudGVyX3BpZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JLyoKLQkgKiBvbmx5IHRvcCBsZXZlbCBjb3VudGVycyBoYXZlIHRoZSBwaWQgbmFtZXNwYWNlIHRoZXkgd2VyZSBjcmVhdGVkIGluCi0JICovCi0JaWYgKGNvdW50ZXItPnBhcmVudCkKLQkJY291bnRlciA9IGNvdW50ZXItPnBhcmVudDsKLQotCXJldHVybiB0YXNrX3RnaWRfbnJfbnMocCwgY291bnRlci0+bnMpOwotfQotCi1zdGF0aWMgdTMyIHBlcmZfY291bnRlcl90aWQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCS8qCi0JICogb25seSB0b3AgbGV2ZWwgY291bnRlcnMgaGF2ZSB0aGUgcGlkIG5hbWVzcGFjZSB0aGV5IHdlcmUgY3JlYXRlZCBpbgotCSAqLwotCWlmIChjb3VudGVyLT5wYXJlbnQpCi0JCWNvdW50ZXIgPSBjb3VudGVyLT5wYXJlbnQ7Ci0KLQlyZXR1cm4gdGFza19waWRfbnJfbnMocCwgY291bnRlci0+bnMpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX291dHB1dF9yZWFkX29uZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkJIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JdTY0IHJlYWRfZm9ybWF0ID0gY291bnRlci0+YXR0ci5yZWFkX2Zvcm1hdDsKLQl1NjQgdmFsdWVzWzRdOwotCWludCBuID0gMDsKLQotCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y291bnQpOwotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgewotCQl2YWx1ZXNbbisrXSA9IGNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCArCi0JCQlhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOwotCX0KLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKLQkJdmFsdWVzW24rK10gPSBjb3VudGVyLT50b3RhbF90aW1lX3J1bm5pbmcgKwotCQkJYXRvbWljNjRfcmVhZCgmY291bnRlci0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKLQl9Ci0JaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCi0JCXZhbHVlc1tuKytdID0gcHJpbWFyeV9jb3VudGVyX2lkKGNvdW50ZXIpOwotCi0JcGVyZl9vdXRwdXRfY29weShoYW5kbGUsIHZhbHVlcywgbiAqIHNpemVvZih1NjQpKTsKLX0KLQotLyoKLSAqIFhYWCBQRVJGX0ZPUk1BVF9HUk9VUCB2cyBpbmhlcml0ZWQgY291bnRlcnMgc2VlbXMgZGlmZmljdWx0LgotICovCi1zdGF0aWMgdm9pZCBwZXJmX291dHB1dF9yZWFkX2dyb3VwKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKLQkJCSAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmxlYWRlciA9IGNvdW50ZXItPmdyb3VwX2xlYWRlciwgKnN1YjsKLQl1NjQgcmVhZF9mb3JtYXQgPSBjb3VudGVyLT5hdHRyLnJlYWRfZm9ybWF0OwotCXU2NCB2YWx1ZXNbNV07Ci0JaW50IG4gPSAwOwotCi0JdmFsdWVzW24rK10gPSAxICsgbGVhZGVyLT5ucl9zaWJsaW5nczsKLQotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkKLQkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfZW5hYmxlZDsKLQotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykKLQkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfcnVubmluZzsKLQotCWlmIChsZWFkZXIgIT0gY291bnRlcikKLQkJbGVhZGVyLT5wbXUtPnJlYWQobGVhZGVyKTsKLQotCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmbGVhZGVyLT5jb3VudCk7Ci0JaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCi0JCXZhbHVlc1tuKytdID0gcHJpbWFyeV9jb3VudGVyX2lkKGxlYWRlcik7Ci0KLQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgbGlzdF9lbnRyeSkgewotCQluID0gMDsKLQotCQlpZiAoc3ViICE9IGNvdW50ZXIpCi0JCQlzdWItPnBtdS0+cmVhZChzdWIpOwotCi0JCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmc3ViLT5jb3VudCk7Ci0JCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQotCQkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2NvdW50ZXJfaWQoc3ViKTsKLQotCQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfcmVhZChzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCi0JCQkgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKGNvdW50ZXItPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkKLQkJcGVyZl9vdXRwdXRfcmVhZF9ncm91cChoYW5kbGUsIGNvdW50ZXIpOwotCWVsc2UKLQkJcGVyZl9vdXRwdXRfcmVhZF9vbmUoaGFuZGxlLCBjb3VudGVyKTsKLX0KLQotdm9pZCBwZXJmX2NvdW50ZXJfb3V0cHV0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIGludCBubWksCi0JCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCi17Ci0JaW50IHJldDsKLQl1NjQgc2FtcGxlX3R5cGUgPSBjb3VudGVyLT5hdHRyLnNhbXBsZV90eXBlOwotCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOwotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTY0IGlwOwotCXN0cnVjdCB7Ci0JCXUzMiBwaWQsIHRpZDsKLQl9IHRpZF9lbnRyeTsKLQlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmNhbGxjaGFpbiA9IE5VTEw7Ci0JaW50IGNhbGxjaGFpbl9zaXplID0gMDsKLQl1NjQgdGltZTsKLQlzdHJ1Y3QgewotCQl1MzIgY3B1LCByZXNlcnZlZDsKLQl9IGNwdV9lbnRyeTsKLQotCWhlYWRlci50eXBlID0gUEVSRl9FVkVOVF9TQU1QTEU7Ci0JaGVhZGVyLnNpemUgPSBzaXplb2YoaGVhZGVyKTsKLQotCWhlYWRlci5taXNjID0gMDsKLQloZWFkZXIubWlzYyB8PSBwZXJmX21pc2NfZmxhZ3MoZGF0YS0+cmVncyk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JUCkgewotCQlpcCA9IHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihkYXRhLT5yZWdzKTsKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKGlwKTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpIHsKLQkJLyogbmFtZXNwYWNlIGlzc3VlcyAqLwotCQl0aWRfZW50cnkucGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCBjdXJyZW50KTsKLQkJdGlkX2VudHJ5LnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgY3VycmVudCk7Ci0KLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHRpZF9lbnRyeSk7Ci0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgewotCQkvKgotCQkgKiBNYXliZSBkbyBiZXR0ZXIgb24geDg2IGFuZCBwcm92aWRlIGNwdV9jbG9ja19ubWkoKQotCQkgKi8KLQkJdGltZSA9IHNjaGVkX2Nsb2NrKCk7Ci0KLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQUREUikKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9TVFJFQU1fSUQpCi0JCWhlYWRlci5zaXplICs9IHNpemVvZih1NjQpOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKSB7Ci0JCWhlYWRlci5zaXplICs9IHNpemVvZihjcHVfZW50cnkpOwotCi0JCWNwdV9lbnRyeS5jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQljcHVfZW50cnkucmVzZXJ2ZWQgPSAwOwotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUFEKQotCQloZWFkZXIuc2l6ZSArPSBwZXJmX2NvdW50ZXJfcmVhZF9zaXplKGNvdW50ZXIpOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSB7Ci0JCWNhbGxjaGFpbiA9IHBlcmZfY2FsbGNoYWluKGRhdGEtPnJlZ3MpOwotCi0JCWlmIChjYWxsY2hhaW4pIHsKLQkJCWNhbGxjaGFpbl9zaXplID0gKDEgKyBjYWxsY2hhaW4tPm5yKSAqIHNpemVvZih1NjQpOwotCQkJaGVhZGVyLnNpemUgKz0gY2FsbGNoYWluX3NpemU7Ci0JCX0gZWxzZQotCQkJaGVhZGVyLnNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7Ci0JCWludCBzaXplID0gc2l6ZW9mKHUzMik7Ci0KLQkJaWYgKGRhdGEtPnJhdykKLQkJCXNpemUgKz0gZGF0YS0+cmF3LT5zaXplOwotCQllbHNlCi0JCQlzaXplICs9IHNpemVvZih1MzIpOwotCi0JCVdBUk5fT05fT05DRShzaXplICYgKHNpemVvZih1NjQpLTEpKTsKLQkJaGVhZGVyLnNpemUgKz0gc2l6ZTsKLQl9Ci0KLQlyZXQgPSBwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBjb3VudGVyLCBoZWFkZXIuc2l6ZSwgbm1pLCAxKTsKLQlpZiAocmV0KQotCQlyZXR1cm47Ci0KLQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgaGVhZGVyKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKQotCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgaXApOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElEKQotCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgdGlkX2VudHJ5KTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpCi0JCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCB0aW1lKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCi0JCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBkYXRhLT5hZGRyKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lEKSB7Ci0JCXU2NCBpZCA9IHByaW1hcnlfY291bnRlcl9pZChjb3VudGVyKTsKLQotCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgaWQpOwotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKLQkJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIGNvdW50ZXItPmlkKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkKLQkJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIGNwdV9lbnRyeSk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpCi0JCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBkYXRhLT5wZXJpb2QpOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVBRCkKLQkJcGVyZl9vdXRwdXRfcmVhZCgmaGFuZGxlLCBjb3VudGVyKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgewotCQlpZiAoY2FsbGNoYWluKQotCQkJcGVyZl9vdXRwdXRfY29weSgmaGFuZGxlLCBjYWxsY2hhaW4sIGNhbGxjaGFpbl9zaXplKTsKLQkJZWxzZSB7Ci0JCQl1NjQgbnIgPSAwOwotCQkJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIG5yKTsKLQkJfQotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgewotCQlpZiAoZGF0YS0+cmF3KSB7Ci0JCQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgZGF0YS0+cmF3LT5zaXplKTsKLQkJCXBlcmZfb3V0cHV0X2NvcHkoJmhhbmRsZSwgZGF0YS0+cmF3LT5kYXRhLCBkYXRhLT5yYXctPnNpemUpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHsKLQkJCQl1MzIJc2l6ZTsKLQkJCQl1MzIJZGF0YTsKLQkJCX0gcmF3ID0gewotCQkJCS5zaXplID0gc2l6ZW9mKHUzMiksCi0JCQkJLmRhdGEgPSAwLAotCQkJfTsKLQkJCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCByYXcpOwotCQl9Ci0JfQotCi0JcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOwotfQotCi0vKgotICogcmVhZCBldmVudAotICovCi0KLXN0cnVjdCBwZXJmX3JlYWRfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0KLQl1MzIJCQkJcGlkOwotCXUzMgkJCQl0aWQ7Ci19OwotCi1zdGF0aWMgdm9pZAotcGVyZl9jb3VudGVyX3JlYWRfZXZlbnQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlzdHJ1Y3QgcGVyZl9yZWFkX2V2ZW50IGV2ZW50ID0gewotCQkuaGVhZGVyID0gewotCQkJLnR5cGUgPSBQRVJGX0VWRU5UX1JFQUQsCi0JCQkubWlzYyA9IDAsCi0JCQkuc2l6ZSA9IHNpemVvZihldmVudCkgKyBwZXJmX2NvdW50ZXJfcmVhZF9zaXplKGNvdW50ZXIpLAotCQl9LAotCQkucGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCB0YXNrKSwKLQkJLnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgdGFzayksCi0JfTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgY291bnRlciwgZXZlbnQuaGVhZGVyLnNpemUsIDAsIDApOwotCWlmIChyZXQpCi0JCXJldHVybjsKLQotCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBldmVudCk7Ci0JcGVyZl9vdXRwdXRfcmVhZCgmaGFuZGxlLCBjb3VudGVyKTsKLQotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLX0KLQotLyoKLSAqIHRhc2sgdHJhY2tpbmcgLS0gZm9yay9leGl0Ci0gKgotICogZW5hYmxlZCBieTogYXR0ci5jb21tIHwgYXR0ci5tbWFwIHwgYXR0ci50YXNrCi0gKi8KLQotc3RydWN0IHBlcmZfdGFza19ldmVudCB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CQkqdGFzazsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQJKnRhc2tfY3R4OwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQotCQl1MzIJCQkJcGlkOwotCQl1MzIJCQkJcHBpZDsKLQkJdTMyCQkJCXRpZDsKLQkJdTMyCQkJCXB0aWQ7Ci0JfSBldmVudDsKLX07Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl90YXNrX291dHB1dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSAgICAgc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlpbnQgc2l6ZSA9IHRhc2tfZXZlbnQtPmV2ZW50LmhlYWRlci5zaXplOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IHRhc2tfZXZlbnQtPnRhc2s7Ci0JaW50IHJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGNvdW50ZXIsIHNpemUsIDAsIDApOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuOwotCi0JdGFza19ldmVudC0+ZXZlbnQucGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCB0YXNrKTsKLQl0YXNrX2V2ZW50LT5ldmVudC5wcGlkID0gcGVyZl9jb3VudGVyX3BpZChjb3VudGVyLCBjdXJyZW50KTsKLQotCXRhc2tfZXZlbnQtPmV2ZW50LnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgdGFzayk7Ci0JdGFza19ldmVudC0+ZXZlbnQucHRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgY3VycmVudCk7Ci0KLQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgdGFza19ldmVudC0+ZXZlbnQpOwotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvdW50ZXJfdGFza19tYXRjaChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCWlmIChjb3VudGVyLT5hdHRyLmNvbW0gfHwgY291bnRlci0+YXR0ci5tbWFwIHx8IGNvdW50ZXItPmF0dHIudGFzaykKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfY3R4KHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4LAotCQkJCSAgc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY291bnRlciwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKLQkJaWYgKHBlcmZfY291bnRlcl90YXNrX21hdGNoKGNvdW50ZXIpKQotCQkJcGVyZl9jb3VudGVyX3Rhc2tfb3V0cHV0KGNvdW50ZXIsIHRhc2tfZXZlbnQpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX3Rhc2tfZXZlbnQoc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gdGFza19ldmVudC0+dGFza19jdHg7Ci0KLQljcHVjdHggPSAmZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0JcGVyZl9jb3VudGVyX3Rhc2tfY3R4KCZjcHVjdHgtPmN0eCwgdGFza19ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKCFjdHgpCi0JCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrX2V2ZW50LT50YXNrLT5wZXJmX2NvdW50ZXJfY3R4cCk7Ci0JaWYgKGN0eCkKLQkJcGVyZl9jb3VudGVyX3Rhc2tfY3R4KGN0eCwgdGFza19ldmVudCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCSAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqdGFza19jdHgsCi0JCQkgICAgICBpbnQgbmV3KQotewotCXN0cnVjdCBwZXJmX3Rhc2tfZXZlbnQgdGFza19ldmVudDsKLQotCWlmICghYXRvbWljX3JlYWQoJm5yX2NvbW1fY291bnRlcnMpICYmCi0JICAgICFhdG9taWNfcmVhZCgmbnJfbW1hcF9jb3VudGVycykgJiYKLQkgICAgIWF0b21pY19yZWFkKCZucl90YXNrX2NvdW50ZXJzKSkKLQkJcmV0dXJuOwotCi0JdGFza19ldmVudCA9IChzdHJ1Y3QgcGVyZl90YXNrX2V2ZW50KXsKLQkJLnRhc2sJICA9IHRhc2ssCi0JCS50YXNrX2N0eCA9IHRhc2tfY3R4LAotCQkuZXZlbnQgICAgPSB7Ci0JCQkuaGVhZGVyID0gewotCQkJCS50eXBlID0gbmV3ID8gUEVSRl9FVkVOVF9GT1JLIDogUEVSRl9FVkVOVF9FWElULAotCQkJCS5taXNjID0gMCwKLQkJCQkuc2l6ZSA9IHNpemVvZih0YXNrX2V2ZW50LmV2ZW50KSwKLQkJCX0sCi0JCQkvKiAucGlkICAqLwotCQkJLyogLnBwaWQgKi8KLQkJCS8qIC50aWQgICovCi0JCQkvKiAucHRpZCAqLwotCQl9LAotCX07Ci0KLQlwZXJmX2NvdW50ZXJfdGFza19ldmVudCgmdGFza19ldmVudCk7Ci19Ci0KLXZvaWQgcGVyZl9jb3VudGVyX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotCXBlcmZfY291bnRlcl90YXNrKHRhc2ssIE5VTEwsIDEpOwotfQotCi0vKgotICogY29tbSB0cmFja2luZwotICovCi0KLXN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgewotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKLQljaGFyCQkJKmNvbW07Ci0JaW50CQkJY29tbV9zaXplOwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQotCQl1MzIJCQkJcGlkOwotCQl1MzIJCQkJdGlkOwotCX0gZXZlbnQ7Ci19OwotCi1zdGF0aWMgdm9pZCBwZXJmX2NvdW50ZXJfY29tbV9vdXRwdXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkgICAgIHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7Ci0JaW50IHNpemUgPSBjb21tX2V2ZW50LT5ldmVudC5oZWFkZXIuc2l6ZTsKLQlpbnQgcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgY291bnRlciwgc2l6ZSwgMCwgMCk7Ci0KLQlpZiAocmV0KQotCQlyZXR1cm47Ci0KLQljb21tX2V2ZW50LT5ldmVudC5waWQgPSBwZXJmX2NvdW50ZXJfcGlkKGNvdW50ZXIsIGNvbW1fZXZlbnQtPnRhc2spOwotCWNvbW1fZXZlbnQtPmV2ZW50LnRpZCA9IHBlcmZfY291bnRlcl90aWQoY291bnRlciwgY29tbV9ldmVudC0+dGFzayk7Ci0KLQlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgY29tbV9ldmVudC0+ZXZlbnQpOwotCXBlcmZfb3V0cHV0X2NvcHkoJmhhbmRsZSwgY29tbV9ldmVudC0+Y29tbSwKLQkJCQkgICBjb21tX2V2ZW50LT5jb21tX3NpemUpOwotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvdW50ZXJfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCWlmIChjb3VudGVyLT5hdHRyLmNvbW0pCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jb21tX2N0eChzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCwKLQkJCQkgIHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKLQkJcmV0dXJuOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNvdW50ZXIsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChwZXJmX2NvdW50ZXJfY29tbV9tYXRjaChjb3VudGVyKSkKLQkJCXBlcmZfY291bnRlcl9jb21tX291dHB1dChjb3VudGVyLCBjb21tX2V2ZW50KTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9jb21tX2V2ZW50KHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07Ci0KLQltZW1zZXQoY29tbSwgMCwgc2l6ZW9mKGNvbW0pKTsKLQlzdHJuY3B5KGNvbW0sIGNvbW1fZXZlbnQtPnRhc2stPmNvbW0sIHNpemVvZihjb21tKSk7Ci0Jc2l6ZSA9IEFMSUdOKHN0cmxlbihjb21tKSsxLCBzaXplb2YodTY0KSk7Ci0KLQljb21tX2V2ZW50LT5jb21tID0gY29tbTsKLQljb21tX2V2ZW50LT5jb21tX3NpemUgPSBzaXplOwotCi0JY29tbV9ldmVudC0+ZXZlbnQuaGVhZGVyLnNpemUgPSBzaXplb2YoY29tbV9ldmVudC0+ZXZlbnQpICsgc2l6ZTsKLQotCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlwZXJmX2NvdW50ZXJfY29tbV9jdHgoJmNwdWN0eC0+Y3R4LCBjb21tX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQkvKgotCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCi0JICogZXZlbnRzIGVuZHMgdXAgaW4uCi0JICovCi0JY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfY291bnRlcl9jdHhwKTsKLQlpZiAoY3R4KQotCQlwZXJmX2NvdW50ZXJfY29tbV9jdHgoY3R4LCBjb21tX2V2ZW50KTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotdm9pZCBwZXJmX2NvdW50ZXJfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0Jc3RydWN0IHBlcmZfY29tbV9ldmVudCBjb21tX2V2ZW50OwotCi0JaWYgKHRhc2stPnBlcmZfY291bnRlcl9jdHhwKQotCQlwZXJmX2NvdW50ZXJfZW5hYmxlX29uX2V4ZWModGFzayk7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZucl9jb21tX2NvdW50ZXJzKSkKLQkJcmV0dXJuOwotCi0JY29tbV9ldmVudCA9IChzdHJ1Y3QgcGVyZl9jb21tX2V2ZW50KXsKLQkJLnRhc2sJPSB0YXNrLAotCQkvKiAuY29tbSAgICAgICovCi0JCS8qIC5jb21tX3NpemUgKi8KLQkJLmV2ZW50ICA9IHsKLQkJCS5oZWFkZXIgPSB7Ci0JCQkJLnR5cGUgPSBQRVJGX0VWRU5UX0NPTU0sCi0JCQkJLm1pc2MgPSAwLAotCQkJCS8qIC5zaXplICovCi0JCQl9LAotCQkJLyogLnBpZCAqLwotCQkJLyogLnRpZCAqLwotCQl9LAotCX07Ci0KLQlwZXJmX2NvdW50ZXJfY29tbV9ldmVudCgmY29tbV9ldmVudCk7Ci19Ci0KLS8qCi0gKiBtbWFwIHRyYWNraW5nCi0gKi8KLQotc3RydWN0IHBlcmZfbW1hcF9ldmVudCB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0CSp2bWE7Ci0KLQljb25zdCBjaGFyCQkqZmlsZV9uYW1lOwotCWludAkJCWZpbGVfc2l6ZTsKLQotCXN0cnVjdCB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0KLQkJdTMyCQkJCXBpZDsKLQkJdTMyCQkJCXRpZDsKLQkJdTY0CQkJCXN0YXJ0OwotCQl1NjQJCQkJbGVuOwotCQl1NjQJCQkJcGdvZmY7Ci0JfSBldmVudDsKLX07Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9tbWFwX291dHB1dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAotCQkJCSAgICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlpbnQgc2l6ZSA9IG1tYXBfZXZlbnQtPmV2ZW50LmhlYWRlci5zaXplOwotCWludCByZXQgPSBwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBjb3VudGVyLCBzaXplLCAwLCAwKTsKLQotCWlmIChyZXQpCi0JCXJldHVybjsKLQotCW1tYXBfZXZlbnQtPmV2ZW50LnBpZCA9IHBlcmZfY291bnRlcl9waWQoY291bnRlciwgY3VycmVudCk7Ci0JbW1hcF9ldmVudC0+ZXZlbnQudGlkID0gcGVyZl9jb3VudGVyX3RpZChjb3VudGVyLCBjdXJyZW50KTsKLQotCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBtbWFwX2V2ZW50LT5ldmVudCk7Ci0JcGVyZl9vdXRwdXRfY29weSgmaGFuZGxlLCBtbWFwX2V2ZW50LT5maWxlX25hbWUsCi0JCQkJICAgbW1hcF9ldmVudC0+ZmlsZV9zaXplKTsKLQlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9jb3VudGVyX21tYXBfbWF0Y2goc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkgICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50KQotewotCWlmIChjb3VudGVyLT5hdHRyLm1tYXApCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9tbWFwX2N0eChzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCwKLQkJCQkgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKLQkJcmV0dXJuOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNvdW50ZXIsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChwZXJmX2NvdW50ZXJfbW1hcF9tYXRjaChjb3VudGVyLCBtbWFwX2V2ZW50KSkKLQkJCXBlcmZfY291bnRlcl9tbWFwX291dHB1dChjb3VudGVyLCBtbWFwX2V2ZW50KTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfY291bnRlcl9tbWFwX2V2ZW50KHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1tYXBfZXZlbnQtPnZtYTsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQljaGFyIHRtcFsxNl07Ci0JY2hhciAqYnVmID0gTlVMTDsKLQljb25zdCBjaGFyICpuYW1lOwotCi0JbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCi0JaWYgKGZpbGUpIHsKLQkJLyoKLQkJICogZF9wYXRoIHdvcmtzIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGJhY2t3YXJkcywgc28gd2UKLQkJICogbmVlZCB0byBhZGQgZW5vdWdoIHplcm8gYnl0ZXMgYWZ0ZXIgdGhlIHN0cmluZyB0byBoYW5kbGUKLQkJICogdGhlIDY0Yml0IGFsaWdubWVudCB3ZSBkbyBsYXRlci4KLQkJICovCi0JCWJ1ZiA9IGt6YWxsb2MoUEFUSF9NQVggKyBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghYnVmKSB7Ci0JCQluYW1lID0gc3RybmNweSh0bXAsICIvL2Vub21lbSIsIHNpemVvZih0bXApKTsKLQkJCWdvdG8gZ290X25hbWU7Ci0JCX0KLQkJbmFtZSA9IGRfcGF0aCgmZmlsZS0+Zl9wYXRoLCBidWYsIFBBVEhfTUFYKTsKLQkJaWYgKElTX0VSUihuYW1lKSkgewotCQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiLy90b29sb25nIiwgc2l6ZW9mKHRtcCkpOwotCQkJZ290byBnb3RfbmFtZTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChhcmNoX3ZtYV9uYW1lKG1tYXBfZXZlbnQtPnZtYSkpIHsKLQkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgYXJjaF92bWFfbmFtZShtbWFwX2V2ZW50LT52bWEpLAotCQkJCSAgICAgICBzaXplb2YodG1wKSk7Ci0JCQlnb3RvIGdvdF9uYW1lOwotCQl9Ci0KLQkJaWYgKCF2bWEtPnZtX21tKSB7Ci0JCQluYW1lID0gc3RybmNweSh0bXAsICJbdmRzb10iLCBzaXplb2YodG1wKSk7Ci0JCQlnb3RvIGdvdF9uYW1lOwotCQl9Ci0KLQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiLy9hbm9uIiwgc2l6ZW9mKHRtcCkpOwotCQlnb3RvIGdvdF9uYW1lOwotCX0KLQotZ290X25hbWU6Ci0Jc2l6ZSA9IEFMSUdOKHN0cmxlbihuYW1lKSsxLCBzaXplb2YodTY0KSk7Ci0KLQltbWFwX2V2ZW50LT5maWxlX25hbWUgPSBuYW1lOwotCW1tYXBfZXZlbnQtPmZpbGVfc2l6ZSA9IHNpemU7Ci0KLQltbWFwX2V2ZW50LT5ldmVudC5oZWFkZXIuc2l6ZSA9IHNpemVvZihtbWFwX2V2ZW50LT5ldmVudCkgKyBzaXplOwotCi0JY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCXBlcmZfY291bnRlcl9tbWFwX2N0eCgmY3B1Y3R4LT5jdHgsIG1tYXBfZXZlbnQpOwotCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCS8qCi0JICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKLQkgKiBldmVudHMgZW5kcyB1cCBpbi4KLQkgKi8KLQljdHggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cGVyZl9jb3VudGVyX2N0eHApOwotCWlmIChjdHgpCi0JCXBlcmZfY291bnRlcl9tbWFwX2N0eChjdHgsIG1tYXBfZXZlbnQpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0Ja2ZyZWUoYnVmKTsKLX0KLQotdm9pZCBfX3BlcmZfY291bnRlcl9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBwZXJmX21tYXBfZXZlbnQgbW1hcF9ldmVudDsKLQotCWlmICghYXRvbWljX3JlYWQoJm5yX21tYXBfY291bnRlcnMpKQotCQlyZXR1cm47Ci0KLQltbWFwX2V2ZW50ID0gKHN0cnVjdCBwZXJmX21tYXBfZXZlbnQpewotCQkudm1hCT0gdm1hLAotCQkvKiAuZmlsZV9uYW1lICovCi0JCS8qIC5maWxlX3NpemUgKi8KLQkJLmV2ZW50ICA9IHsKLQkJCS5oZWFkZXIgPSB7Ci0JCQkJLnR5cGUgPSBQRVJGX0VWRU5UX01NQVAsCi0JCQkJLm1pc2MgPSAwLAotCQkJCS8qIC5zaXplICovCi0JCQl9LAotCQkJLyogLnBpZCAqLwotCQkJLyogLnRpZCAqLwotCQkJLnN0YXJ0ICA9IHZtYS0+dm1fc3RhcnQsCi0JCQkubGVuICAgID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJLnBnb2ZmICA9IHZtYS0+dm1fcGdvZmYsCi0JCX0sCi0JfTsKLQotCXBlcmZfY291bnRlcl9tbWFwX2V2ZW50KCZtbWFwX2V2ZW50KTsKLX0KLQotLyoKLSAqIElSUSB0aHJvdHRsZSBsb2dnaW5nCi0gKi8KLQotc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkJdTY0CQkJCXRpbWU7Ci0JCXU2NAkJCQlpZDsKLQkJdTY0CQkJCXN0cmVhbV9pZDsKLQl9IHRocm90dGxlX2V2ZW50ID0gewotCQkuaGVhZGVyID0gewotCQkJLnR5cGUgPSBQRVJGX0VWRU5UX1RIUk9UVExFLAotCQkJLm1pc2MgPSAwLAotCQkJLnNpemUgPSBzaXplb2YodGhyb3R0bGVfZXZlbnQpLAotCQl9LAotCQkudGltZQkJPSBzY2hlZF9jbG9jaygpLAotCQkuaWQJCT0gcHJpbWFyeV9jb3VudGVyX2lkKGNvdW50ZXIpLAotCQkuc3RyZWFtX2lkCT0gY291bnRlci0+aWQsCi0JfTsKLQotCWlmIChlbmFibGUpCi0JCXRocm90dGxlX2V2ZW50LmhlYWRlci50eXBlID0gUEVSRl9FVkVOVF9VTlRIUk9UVExFOwotCi0JcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgY291bnRlciwgc2l6ZW9mKHRocm90dGxlX2V2ZW50KSwgMSwgMCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuOwotCi0JcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIHRocm90dGxlX2V2ZW50KTsKLQlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Ci19Ci0KLS8qCi0gKiBHZW5lcmljIGNvdW50ZXIgb3ZlcmZsb3cgaGFuZGxpbmcsIHNhbXBsaW5nLgotICovCi0KLWludCBwZXJmX2NvdW50ZXJfb3ZlcmZsb3coc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IG5taSwKLQkJCSAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCi17Ci0JaW50IGV2ZW50cyA9IGF0b21pY19yZWFkKCZjb3VudGVyLT5ldmVudF9saW1pdCk7Ci0JaW50IHRocm90dGxlID0gY291bnRlci0+cG11LT51bnRocm90dGxlICE9IE5VTEw7Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCWludCByZXQgPSAwOwotCi0JaWYgKCF0aHJvdHRsZSkgewotCQlod2MtPmludGVycnVwdHMrKzsKLQl9IGVsc2UgewotCQlpZiAoaHdjLT5pbnRlcnJ1cHRzICE9IE1BWF9JTlRFUlJVUFRTKSB7Ci0JCQlod2MtPmludGVycnVwdHMrKzsKLQkJCWlmIChIWiAqIGh3Yy0+aW50ZXJydXB0cyA+Ci0JCQkJCSh1NjQpc3lzY3RsX3BlcmZfY291bnRlcl9zYW1wbGVfcmF0ZSkgewotCQkJCWh3Yy0+aW50ZXJydXB0cyA9IE1BWF9JTlRFUlJVUFRTOwotCQkJCXBlcmZfbG9nX3Rocm90dGxlKGNvdW50ZXIsIDApOwotCQkJCXJldCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogS2VlcCByZS1kaXNhYmxpbmcgY291bnRlcnMgZXZlbiB0aG91Z2ggb24gdGhlIHByZXZpb3VzCi0JCQkgKiBwYXNzIHdlIGRpc2FibGVkIGl0IC0ganVzdCBpbiBjYXNlIHdlIHJhY2VkIHdpdGggYQotCQkJICogc2NoZWQtaW4gYW5kIHRoZSBjb3VudGVyIGdvdCBlbmFibGVkIGFnYWluOgotCQkJICovCi0JCQlyZXQgPSAxOwotCQl9Ci0JfQotCi0JaWYgKGNvdW50ZXItPmF0dHIuZnJlcSkgewotCQl1NjQgbm93ID0gc2NoZWRfY2xvY2soKTsKLQkJczY0IGRlbHRhID0gbm93IC0gaHdjLT5mcmVxX3N0YW1wOwotCi0JCWh3Yy0+ZnJlcV9zdGFtcCA9IG5vdzsKLQotCQlpZiAoZGVsdGEgPiAwICYmIGRlbHRhIDwgVElDS19OU0VDKQotCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGNvdW50ZXIsIE5TRUNfUEVSX1NFQyAvIChpbnQpZGVsdGEpOwotCX0KLQotCS8qCi0JICogWFhYIGV2ZW50X2xpbWl0IG1pZ2h0IG5vdCBxdWl0ZSB3b3JrIGFzIGV4cGVjdGVkIG9uIGluaGVyaXRlZAotCSAqIGNvdW50ZXJzCi0JICovCi0KLQljb3VudGVyLT5wZW5kaW5nX2tpbGwgPSBQT0xMX0lOOwotCWlmIChldmVudHMgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmY291bnRlci0+ZXZlbnRfbGltaXQpKSB7Ci0JCXJldCA9IDE7Ci0JCWNvdW50ZXItPnBlbmRpbmdfa2lsbCA9IFBPTExfSFVQOwotCQlpZiAobm1pKSB7Ci0JCQljb3VudGVyLT5wZW5kaW5nX2Rpc2FibGUgPSAxOwotCQkJcGVyZl9wZW5kaW5nX3F1ZXVlKCZjb3VudGVyLT5wZW5kaW5nLAotCQkJCQkgICBwZXJmX3BlbmRpbmdfY291bnRlcik7Ci0JCX0gZWxzZQotCQkJcGVyZl9jb3VudGVyX2Rpc2FibGUoY291bnRlcik7Ci0JfQotCi0JcGVyZl9jb3VudGVyX291dHB1dChjb3VudGVyLCBubWksIGRhdGEpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBHZW5lcmljIHNvZnR3YXJlIGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUKLSAqLwotCi0vKgotICogV2UgZGlyZWN0bHkgaW5jcmVtZW50IGNvdW50ZXItPmNvdW50IGFuZCBrZWVwIGEgc2Vjb25kIHZhbHVlIGluCi0gKiBjb3VudGVyLT5ody5wZXJpb2RfbGVmdCB0byBjb3VudCBpbnRlcnZhbHMuIFRoaXMgcGVyaW9kIGNvdW50ZXIKLSAqIGlzIGtlcHQgaW4gdGhlIHJhbmdlIFstc2FtcGxlX3BlcmlvZCwgMF0gc28gdGhhdCB3ZSBjYW4gdXNlIHRoZQotICogc2lnbiBhcyB0cmlnZ2VyLgotICovCi0KLXN0YXRpYyB1NjQgcGVyZl9zd2NvdW50ZXJfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQl1NjQgcGVyaW9kID0gaHdjLT5sYXN0X3BlcmlvZDsKLQl1NjQgbnIsIG9mZnNldDsKLQlzNjQgb2xkLCB2YWw7Ci0KLQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwotCi1hZ2FpbjoKLQlvbGQgPSB2YWwgPSBhdG9taWM2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKLQlpZiAodmFsIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQluciA9IGRpdjY0X3U2NChwZXJpb2QgKyB2YWwsIHBlcmlvZCk7Ci0Jb2Zmc2V0ID0gbnIgKiBwZXJpb2Q7Ci0JdmFsIC09IG9mZnNldDsKLQlpZiAoYXRvbWljNjRfY21weGNoZygmaHdjLT5wZXJpb2RfbGVmdCwgb2xkLCB2YWwpICE9IG9sZCkKLQkJZ290byBhZ2FpbjsKLQotCXJldHVybiBucjsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9zd2NvdW50ZXJfb3ZlcmZsb3coc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQkgICAgaW50IG5taSwgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjID0gJmNvdW50ZXItPmh3OwotCXU2NCBvdmVyZmxvdzsKLQotCWRhdGEtPnBlcmlvZCA9IGNvdW50ZXItPmh3Lmxhc3RfcGVyaW9kOwotCW92ZXJmbG93ID0gcGVyZl9zd2NvdW50ZXJfc2V0X3BlcmlvZChjb3VudGVyKTsKLQotCWlmIChod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpCi0JCXJldHVybjsKLQotCWZvciAoOyBvdmVyZmxvdzsgb3ZlcmZsb3ctLSkgewotCQlpZiAocGVyZl9jb3VudGVyX292ZXJmbG93KGNvdW50ZXIsIG5taSwgZGF0YSkpIHsKLQkJCS8qCi0JCQkgKiBXZSBpbmhpYml0IHRoZSBvdmVyZmxvdyBmcm9tIGhhcHBlbmluZyB3aGVuCi0JCQkgKiBod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMuCi0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3N3Y291bnRlcl91bnRocm90dGxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JLyoKLQkgKiBOb3RoaW5nIHRvIGRvLCB3ZSBhbHJlYWR5IHJlc2V0IGh3Yy0+aW50ZXJydXB0cy4KLQkgKi8KLX0KLQotc3RhdGljIHZvaWQgcGVyZl9zd2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHU2NCBuciwKLQkJCSAgICAgICBpbnQgbm1pLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0KLQlhdG9taWM2NF9hZGQobnIsICZjb3VudGVyLT5jb3VudCk7Ci0KLQlpZiAoIWh3Yy0+c2FtcGxlX3BlcmlvZCkKLQkJcmV0dXJuOwotCi0JaWYgKCFkYXRhLT5yZWdzKQotCQlyZXR1cm47Ci0KLQlpZiAoIWF0b21pYzY0X2FkZF9uZWdhdGl2ZShuciwgJmh3Yy0+cGVyaW9kX2xlZnQpKQotCQlwZXJmX3N3Y291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCBubWksIGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHBlcmZfc3djb3VudGVyX2lzX2NvdW50aW5nKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JLyoKLQkgKiBUaGUgY291bnRlciBpcyBhY3RpdmUsIHdlJ3JlIGdvb2QhCi0JICovCi0JaWYgKGNvdW50ZXItPnN0YXRlID09IFBFUkZfQ09VTlRFUl9TVEFURV9BQ1RJVkUpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBUaGUgY291bnRlciBpcyBvZmYvZXJyb3IsIG5vdCBjb3VudGluZy4KLQkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgIT0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIGNvdW50ZXIgaXMgaW5hY3RpdmUsIGlmIHRoZSBjb250ZXh0IGlzIGFjdGl2ZQotCSAqIHdlJ3JlIHBhcnQgb2YgYSBncm91cCB0aGF0IGRpZG4ndCBtYWtlIGl0IG9uIHRoZSAncG11JywKLQkgKiBub3QgY291bnRpbmcuCi0JICovCi0JaWYgKGNvdW50ZXItPmN0eC0+aXNfYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogV2UncmUgaW5hY3RpdmUgYW5kIHRoZSBjb250ZXh0IGlzIHRvbywgdGhpcyBtZWFucyB0aGUKLQkgKiB0YXNrIGlzIHNjaGVkdWxlZCBvdXQsIHdlJ3JlIGNvdW50aW5nIGV2ZW50cyB0aGF0IGhhcHBlbgotCSAqIHRvIHVzLCBsaWtlIG1pZ3JhdGlvbiBldmVudHMuCi0JICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcGVyZl9zd2NvdW50ZXJfbWF0Y2goc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKLQkJCQllbnVtIHBlcmZfdHlwZV9pZCB0eXBlLAotCQkJCXUzMiBldmVudCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaWYgKCFwZXJmX3N3Y291bnRlcl9pc19jb3VudGluZyhjb3VudGVyKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY291bnRlci0+YXR0ci50eXBlICE9IHR5cGUpCi0JCXJldHVybiAwOwotCWlmIChjb3VudGVyLT5hdHRyLmNvbmZpZyAhPSBldmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocmVncykgewotCQlpZiAoY291bnRlci0+YXR0ci5leGNsdWRlX3VzZXIgJiYgdXNlcl9tb2RlKHJlZ3MpKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKGNvdW50ZXItPmF0dHIuZXhjbHVkZV9rZXJuZWwgJiYgIXVzZXJfbW9kZShyZWdzKSkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3N3Y291bnRlcl9jdHhfZXZlbnQoc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JCQkJICAgICBlbnVtIHBlcmZfdHlwZV9pZCB0eXBlLAotCQkJCSAgICAgdTMyIGV2ZW50LCB1NjQgbnIsIGludCBubWksCi0JCQkJICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY291bnRlciwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKLQkJaWYgKHBlcmZfc3djb3VudGVyX21hdGNoKGNvdW50ZXIsIHR5cGUsIGV2ZW50LCBkYXRhLT5yZWdzKSkKLQkJCXBlcmZfc3djb3VudGVyX2FkZChjb3VudGVyLCBuciwgbm1pLCBkYXRhKTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyBpbnQgKnBlcmZfc3djb3VudGVyX3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCi17Ci0JaWYgKGluX25taSgpKQotCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzNdOwotCi0JaWYgKGluX2lycSgpKQotCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzJdOwotCi0JaWYgKGluX3NvZnRpcnEoKSkKLQkJcmV0dXJuICZjcHVjdHgtPnJlY3Vyc2lvblsxXTsKLQotCXJldHVybiAmY3B1Y3R4LT5yZWN1cnNpb25bMF07Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3BlcmZfc3djb3VudGVyX2V2ZW50KGVudW0gcGVyZl90eXBlX2lkIHR5cGUsIHUzMiBldmVudCwKLQkJCQkgICAgdTY0IG5yLCBpbnQgbm1pLAotCQkJCSAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwotCWludCAqcmVjdXJzaW9uID0gcGVyZl9zd2NvdW50ZXJfcmVjdXJzaW9uX2NvbnRleHQoY3B1Y3R4KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQotCWlmICgqcmVjdXJzaW9uKQotCQlnb3RvIG91dDsKLQotCSgqcmVjdXJzaW9uKSsrOwotCWJhcnJpZXIoKTsKLQotCXBlcmZfc3djb3VudGVyX2N0eF9ldmVudCgmY3B1Y3R4LT5jdHgsIHR5cGUsIGV2ZW50LAotCQkJCSBuciwgbm1pLCBkYXRhKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JLyoKLQkgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggb2YgdGhlIGNoaWxkIGNvbnRleHRzIHRoZQotCSAqIGV2ZW50cyBlbmRzIHVwIGluLgotCSAqLwotCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2NvdW50ZXJfY3R4cCk7Ci0JaWYgKGN0eCkKLQkJcGVyZl9zd2NvdW50ZXJfY3R4X2V2ZW50KGN0eCwgdHlwZSwgZXZlbnQsIG5yLCBubWksIGRhdGEpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JYmFycmllcigpOwotCSgqcmVjdXJzaW9uKS0tOwotCi1vdXQ6Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci19Ci0KLXZvaWQgX19wZXJmX3N3Y291bnRlcl9ldmVudCh1MzIgZXZlbnQsIHU2NCBuciwgaW50IG5taSwKLQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IGFkZHIpCi17Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YSA9IHsKLQkJLnJlZ3MgPSByZWdzLAotCQkuYWRkciA9IGFkZHIsCi0JfTsKLQotCWRvX3BlcmZfc3djb3VudGVyX2V2ZW50KFBFUkZfVFlQRV9TT0ZUV0FSRSwgZXZlbnQsIG5yLCBubWksICZkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgcGVyZl9zd2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotfQotCi1zdGF0aWMgaW50IHBlcmZfc3djb3VudGVyX2VuYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQkJcGVyZl9zd2NvdW50ZXJfc2V0X3BlcmlvZChjb3VudGVyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBlcmZfc3djb3VudGVyX2Rpc2FibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcGVyZl9vcHNfZ2VuZXJpYyA9IHsKLQkuZW5hYmxlCQk9IHBlcmZfc3djb3VudGVyX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHBlcmZfc3djb3VudGVyX2Rpc2FibGUsCi0JLnJlYWQJCT0gcGVyZl9zd2NvdW50ZXJfcmVhZCwKLQkudW50aHJvdHRsZQk9IHBlcmZfc3djb3VudGVyX3VudGhyb3R0bGUsCi19OwotCi0vKgotICogaHJ0aW1lciBiYXNlZCBzd2NvdW50ZXIgY2FsbGJhY2sKLSAqLwotCi1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2NvdW50ZXJfaHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKLXsKLQllbnVtIGhydGltZXJfcmVzdGFydCByZXQgPSBIUlRJTUVSX1JFU1RBUlQ7Ci0Jc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXU2NCBwZXJpb2Q7Ci0KLQljb3VudGVyCT0gY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBwZXJmX2NvdW50ZXIsIGh3LmhydGltZXIpOwotCWNvdW50ZXItPnBtdS0+cmVhZChjb3VudGVyKTsKLQotCWRhdGEuYWRkciA9IDA7Ci0JZGF0YS5yZWdzID0gZ2V0X2lycV9yZWdzKCk7Ci0JLyoKLQkgKiBJbiBjYXNlIHdlIGV4Y2x1ZGUga2VybmVsIElQcyBvciBhcmUgc29tZWhvdyBub3QgaW4gaW50ZXJydXB0Ci0JICogY29udGV4dCwgcHJvdmlkZSB0aGUgbmV4dCBiZXN0IHRoaW5nLCB0aGUgdXNlciBJUC4KLQkgKi8KLQlpZiAoKGNvdW50ZXItPmF0dHIuZXhjbHVkZV9rZXJuZWwgfHwgIWRhdGEucmVncykgJiYKLQkJCSFjb3VudGVyLT5hdHRyLmV4Y2x1ZGVfdXNlcikKLQkJZGF0YS5yZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwotCi0JaWYgKGRhdGEucmVncykgewotCQlpZiAocGVyZl9jb3VudGVyX292ZXJmbG93KGNvdW50ZXIsIDAsICZkYXRhKSkKLQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOwotCX0KLQotCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpOwotCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUocGVyaW9kKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogU29mdHdhcmUgY291bnRlcjogY3B1IHdhbGwgdGltZSBjbG9jawotICovCi0KLXN0YXRpYyB2b2lkIGNwdV9jbG9ja19wZXJmX2NvdW50ZXJfdXBkYXRlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JczY0IHByZXY7Ci0JdTY0IG5vdzsKLQotCW5vdyA9IGNwdV9jbG9jayhjcHUpOwotCXByZXYgPSBhdG9taWM2NF9yZWFkKCZjb3VudGVyLT5ody5wcmV2X2NvdW50KTsKLQlhdG9taWM2NF9zZXQoJmNvdW50ZXItPmh3LnByZXZfY291bnQsIG5vdyk7Ci0JYXRvbWljNjRfYWRkKG5vdyAtIHByZXYsICZjb3VudGVyLT5jb3VudCk7Ci19Ci0KLXN0YXRpYyBpbnQgY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7Ci0JaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3djb3VudGVyX2hydGltZXI7Ci0JaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgewotCQl1NjQgcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKLQkJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZod2MtPmhydGltZXIsCi0JCQkJbnNfdG9fa3RpbWUocGVyaW9kKSwgMCwKLQkJCQlIUlRJTUVSX01PREVfUkVMLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZjb3VudGVyLT5ody5ocnRpbWVyKTsKLQljcHVfY2xvY2tfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyKTsKLX0KLQotc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9yZWFkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JY3B1X2Nsb2NrX3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlcik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBlcmZfb3BzX2NwdV9jbG9jayA9IHsKLQkuZW5hYmxlCQk9IGNwdV9jbG9ja19wZXJmX2NvdW50ZXJfZW5hYmxlLAotCS5kaXNhYmxlCT0gY3B1X2Nsb2NrX3BlcmZfY291bnRlcl9kaXNhYmxlLAotCS5yZWFkCQk9IGNwdV9jbG9ja19wZXJmX2NvdW50ZXJfcmVhZCwKLX07Ci0KLS8qCi0gKiBTb2Z0d2FyZSBjb3VudGVyOiB0YXNrIHRpbWUgY2xvY2sKLSAqLwotCi1zdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl91cGRhdGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgdTY0IG5vdykKLXsKLQl1NjQgcHJldjsKLQlzNjQgZGVsdGE7Ci0KLQlwcmV2ID0gYXRvbWljNjRfeGNoZygmY291bnRlci0+aHcucHJldl9jb3VudCwgbm93KTsKLQlkZWx0YSA9IG5vdyAtIHByZXY7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmY291bnRlci0+Y291bnQpOwotfQotCi1zdGF0aWMgaW50IHRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX2VuYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKLQl1NjQgbm93OwotCi0Jbm93ID0gY291bnRlci0+Y3R4LT50aW1lOwotCi0JYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsIG5vdyk7Ci0JaHJ0aW1lcl9pbml0KCZod2MtPmhydGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JaHdjLT5ocnRpbWVyLmZ1bmN0aW9uID0gcGVyZl9zd2NvdW50ZXJfaHJ0aW1lcjsKLQlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7Ci0JCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOwotCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKLQkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAotCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl9kaXNhYmxlKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JaWYgKGNvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZjb3VudGVyLT5ody5ocnRpbWVyKTsKLQl0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl91cGRhdGUoY291bnRlciwgY291bnRlci0+Y3R4LT50aW1lKTsKLQotfQotCi1zdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfY291bnRlcl9yZWFkKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JdTY0IHRpbWU7Ci0KLQlpZiAoIWluX25taSgpKSB7Ci0JCXVwZGF0ZV9jb250ZXh0X3RpbWUoY291bnRlci0+Y3R4KTsKLQkJdGltZSA9IGNvdW50ZXItPmN0eC0+dGltZTsKLQl9IGVsc2UgewotCQl1NjQgbm93ID0gcGVyZl9jbG9jaygpOwotCQl1NjQgZGVsdGEgPSBub3cgLSBjb3VudGVyLT5jdHgtPnRpbWVzdGFtcDsKLQkJdGltZSA9IGNvdW50ZXItPmN0eC0+dGltZSArIGRlbHRhOwotCX0KLQotCXRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCB0aW1lKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcGVyZl9vcHNfdGFza19jbG9jayA9IHsKLQkuZW5hYmxlCQk9IHRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHRhc2tfY2xvY2tfcGVyZl9jb3VudGVyX2Rpc2FibGUsCi0JLnJlYWQJCT0gdGFza19jbG9ja19wZXJmX2NvdW50ZXJfcmVhZCwKLX07Ci0KLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQotdm9pZCBwZXJmX3RwY291bnRlcl9ldmVudChpbnQgZXZlbnRfaWQsIHU2NCBhZGRyLCB1NjQgY291bnQsIHZvaWQgKnJlY29yZCwKLQkJCSAgaW50IGVudHJ5X3NpemUpCi17Ci0Jc3RydWN0IHBlcmZfcmF3X3JlY29yZCByYXcgPSB7Ci0JCS5zaXplID0gZW50cnlfc2l6ZSwKLQkJLmRhdGEgPSByZWNvcmQsCi0JfTsKLQotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGEgPSB7Ci0JCS5yZWdzID0gZ2V0X2lycV9yZWdzKCksCi0JCS5hZGRyID0gYWRkciwKLQkJLnJhdyA9ICZyYXcsCi0JfTsKLQotCWlmICghZGF0YS5yZWdzKQotCQlkYXRhLnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7Ci0KLQlkb19wZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX1RZUEVfVFJBQ0VQT0lOVCwgZXZlbnRfaWQsIGNvdW50LCAxLCAmZGF0YSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwZXJmX3RwY291bnRlcl9ldmVudCk7Ci0KLWV4dGVybiBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlKGludCk7Ci1leHRlcm4gdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlKGludCk7Ci0KLXN0YXRpYyB2b2lkIHRwX3BlcmZfY291bnRlcl9kZXN0cm95KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZShjb3VudGVyLT5hdHRyLmNvbmZpZyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11ICp0cF9wZXJmX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQotewotCS8qCi0JICogUmF3IHRyYWNlcG9pbnQgZGF0YSBpcyBhIHNldmVyZSBkYXRhIGxlYWssIG9ubHkgYWxsb3cgcm9vdCB0bwotCSAqIGhhdmUgdGhlc2UuCi0JICovCi0JaWYgKChjb3VudGVyLT5hdHRyLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSAmJgotCQkJcGVyZl9wYXJhbm9pZF90cmFjZXBvaW50X3JhdygpICYmCi0JCQkhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKLQotCWlmIChmdHJhY2VfcHJvZmlsZV9lbmFibGUoY291bnRlci0+YXR0ci5jb25maWcpKQotCQlyZXR1cm4gTlVMTDsKLQotCWNvdW50ZXItPmRlc3Ryb3kgPSB0cF9wZXJmX2NvdW50ZXJfZGVzdHJveTsKLQotCXJldHVybiAmcGVyZl9vcHNfZ2VuZXJpYzsKLX0KLSNlbHNlCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBtdSAqdHBfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZgotCi1hdG9taWNfdCBwZXJmX3N3Y291bnRlcl9lbmFibGVkW1BFUkZfQ09VTlRfU1dfTUFYXTsKLQotc3RhdGljIHZvaWQgc3dfcGVyZl9jb3VudGVyX2Rlc3Ryb3koc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKLXsKLQl1NjQgZXZlbnQgPSBjb3VudGVyLT5hdHRyLmNvbmZpZzsKLQotCVdBUk5fT04oY291bnRlci0+cGFyZW50KTsKLQotCWF0b21pY19kZWMoJnBlcmZfc3djb3VudGVyX2VuYWJsZWRbZXZlbnRdKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgKnN3X3BlcmZfY291bnRlcl9pbml0KHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIpCi17Ci0JY29uc3Qgc3RydWN0IHBtdSAqcG11ID0gTlVMTDsKLQl1NjQgZXZlbnQgPSBjb3VudGVyLT5hdHRyLmNvbmZpZzsKLQotCS8qCi0JICogU29mdHdhcmUgY291bnRlcnMgKGN1cnJlbnRseSkgY2FuJ3QgaW4gZ2VuZXJhbCBkaXN0aW5ndWlzaAotCSAqIGJldHdlZW4gdXNlciwga2VybmVsIGFuZCBoeXBlcnZpc29yIGV2ZW50cy4KLQkgKiBIb3dldmVyLCBjb250ZXh0IHN3aXRjaGVzIGFuZCBjcHUgbWlncmF0aW9ucyBhcmUgY29uc2lkZXJlZAotCSAqIHRvIGJlIGtlcm5lbCBldmVudHMsIGFuZCBwYWdlIGZhdWx0cyBhcmUgbmV2ZXIgaHlwZXJ2aXNvcgotCSAqIGV2ZW50cy4KLQkgKi8KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBQRVJGX0NPVU5UX1NXX0NQVV9DTE9DSzoKLQkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKLQotCQlicmVhazsKLQljYXNlIFBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSzoKLQkJLyoKLQkJICogSWYgdGhlIHVzZXIgaW5zdGFudGlhdGVzIHRoaXMgYXMgYSBwZXItY3B1IGNvdW50ZXIsCi0JCSAqIHVzZSB0aGUgY3B1X2Nsb2NrIGNvdW50ZXIgaW5zdGVhZC4KLQkJICovCi0JCWlmIChjb3VudGVyLT5jdHgtPnRhc2spCi0JCQlwbXUgPSAmcGVyZl9vcHNfdGFza19jbG9jazsKLQkJZWxzZQotCQkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKLQotCQlicmVhazsKLQljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFM6Ci0JY2FzZSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTjoKLQljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKOgotCWNhc2UgUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTOgotCWNhc2UgUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUzoKLQkJaWYgKCFjb3VudGVyLT5wYXJlbnQpIHsKLQkJCWF0b21pY19pbmMoJnBlcmZfc3djb3VudGVyX2VuYWJsZWRbZXZlbnRdKTsKLQkJCWNvdW50ZXItPmRlc3Ryb3kgPSBzd19wZXJmX2NvdW50ZXJfZGVzdHJveTsKLQkJfQotCQlwbXUgPSAmcGVyZl9vcHNfZ2VuZXJpYzsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHBtdTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgY291bnRlciBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXIgKgotcGVyZl9jb3VudGVyX2FsbG9jKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0ciwKLQkJICAgaW50IGNwdSwKLQkJICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgsCi0JCSAgIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmdyb3VwX2xlYWRlciwKLQkJICAgc3RydWN0IHBlcmZfY291bnRlciAqcGFyZW50X2NvdW50ZXIsCi0JCSAgIGdmcF90IGdmcGZsYWdzKQotewotCWNvbnN0IHN0cnVjdCBwbXUgKnBtdTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyOwotCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YzsKLQlsb25nIGVycjsKLQotCWNvdW50ZXIgPSBremFsbG9jKHNpemVvZigqY291bnRlciksIGdmcGZsYWdzKTsKLQlpZiAoIWNvdW50ZXIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JLyoKLQkgKiBTaW5nbGUgY291bnRlcnMgYXJlIHRoZWlyIG93biBncm91cCBsZWFkZXJzLCB3aXRoIGFuCi0JICogZW1wdHkgc2libGluZyBsaXN0OgotCSAqLwotCWlmICghZ3JvdXBfbGVhZGVyKQotCQlncm91cF9sZWFkZXIgPSBjb3VudGVyOwotCi0JbXV0ZXhfaW5pdCgmY291bnRlci0+Y2hpbGRfbXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb3VudGVyLT5jaGlsZF9saXN0KTsKLQotCUlOSVRfTElTVF9IRUFEKCZjb3VudGVyLT5saXN0X2VudHJ5KTsKLQlJTklUX0xJU1RfSEVBRCgmY291bnRlci0+ZXZlbnRfZW50cnkpOwotCUlOSVRfTElTVF9IRUFEKCZjb3VudGVyLT5zaWJsaW5nX2xpc3QpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvdW50ZXItPndhaXRxKTsKLQotCW11dGV4X2luaXQoJmNvdW50ZXItPm1tYXBfbXV0ZXgpOwotCi0JY291bnRlci0+Y3B1CQk9IGNwdTsKLQljb3VudGVyLT5hdHRyCQk9ICphdHRyOwotCWNvdW50ZXItPmdyb3VwX2xlYWRlcgk9IGdyb3VwX2xlYWRlcjsKLQljb3VudGVyLT5wbXUJCT0gTlVMTDsKLQljb3VudGVyLT5jdHgJCT0gY3R4OwotCWNvdW50ZXItPm9uY3B1CQk9IC0xOwotCi0JY291bnRlci0+cGFyZW50CQk9IHBhcmVudF9jb3VudGVyOwotCi0JY291bnRlci0+bnMJCT0gZ2V0X3BpZF9ucyhjdXJyZW50LT5uc3Byb3h5LT5waWRfbnMpOwotCWNvdW50ZXItPmlkCQk9IGF0b21pYzY0X2luY19yZXR1cm4oJnBlcmZfY291bnRlcl9pZCk7Ci0KLQljb3VudGVyLT5zdGF0ZQkJPSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkU7Ci0KLQlpZiAoYXR0ci0+ZGlzYWJsZWQpCi0JCWNvdW50ZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRjsKLQotCXBtdSA9IE5VTEw7Ci0KLQlod2MgPSAmY291bnRlci0+aHc7Ci0JaHdjLT5zYW1wbGVfcGVyaW9kID0gYXR0ci0+c2FtcGxlX3BlcmlvZDsKLQlpZiAoYXR0ci0+ZnJlcSAmJiBhdHRyLT5zYW1wbGVfZnJlcSkKLQkJaHdjLT5zYW1wbGVfcGVyaW9kID0gMTsKLQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwotCi0JYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOwotCi0JLyoKLQkgKiB3ZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgUEVSRl9GT1JNQVRfR1JPVVAgb24gaW5oZXJpdGVkIGNvdW50ZXJzCi0JICovCi0JaWYgKGF0dHItPmluaGVyaXQgJiYgKGF0dHItPnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApKQotCQlnb3RvIGRvbmU7Ci0KLQlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKLQljYXNlIFBFUkZfVFlQRV9SQVc6Ci0JY2FzZSBQRVJGX1RZUEVfSEFSRFdBUkU6Ci0JY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6Ci0JCXBtdSA9IGh3X3BlcmZfY291bnRlcl9pbml0KGNvdW50ZXIpOwotCQlicmVhazsKLQotCWNhc2UgUEVSRl9UWVBFX1NPRlRXQVJFOgotCQlwbXUgPSBzd19wZXJmX2NvdW50ZXJfaW5pdChjb3VudGVyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZfVFlQRV9UUkFDRVBPSU5UOgotCQlwbXUgPSB0cF9wZXJmX2NvdW50ZXJfaW5pdChjb3VudGVyKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci1kb25lOgotCWVyciA9IDA7Ci0JaWYgKCFwbXUpCi0JCWVyciA9IC1FSU5WQUw7Ci0JZWxzZSBpZiAoSVNfRVJSKHBtdSkpCi0JCWVyciA9IFBUUl9FUlIocG11KTsKLQotCWlmIChlcnIpIHsKLQkJaWYgKGNvdW50ZXItPm5zKQotCQkJcHV0X3BpZF9ucyhjb3VudGVyLT5ucyk7Ci0JCWtmcmVlKGNvdW50ZXIpOwotCQlyZXR1cm4gRVJSX1BUUihlcnIpOwotCX0KLQotCWNvdW50ZXItPnBtdSA9IHBtdTsKLQotCWlmICghY291bnRlci0+cGFyZW50KSB7Ci0JCWF0b21pY19pbmMoJm5yX2NvdW50ZXJzKTsKLQkJaWYgKGNvdW50ZXItPmF0dHIubW1hcCkKLQkJCWF0b21pY19pbmMoJm5yX21tYXBfY291bnRlcnMpOwotCQlpZiAoY291bnRlci0+YXR0ci5jb21tKQotCQkJYXRvbWljX2luYygmbnJfY29tbV9jb3VudGVycyk7Ci0JCWlmIChjb3VudGVyLT5hdHRyLnRhc2spCi0JCQlhdG9taWNfaW5jKCZucl90YXNrX2NvdW50ZXJzKTsKLQl9Ci0KLQlyZXR1cm4gY291bnRlcjsKLX0KLQotc3RhdGljIGludCBwZXJmX2NvcHlfYXR0cihzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgX191c2VyICp1YXR0ciwKLQkJCSAgc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQotewotCWludCByZXQ7Ci0JdTMyIHNpemU7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhdHRyLCBQRVJGX0FUVFJfU0laRV9WRVIwKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSAqIHplcm8gdGhlIGZ1bGwgc3RydWN0dXJlLCBzbyB0aGF0IGEgc2hvcnQgY29weSB3aWxsIGJlIG5pY2UuCi0JICovCi0JbWVtc2V0KGF0dHIsIDAsIHNpemVvZigqYXR0cikpOwotCi0JcmV0ID0gZ2V0X3VzZXIoc2l6ZSwgJnVhdHRyLT5zaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHNpemUgPiBQQUdFX1NJWkUpCS8qIHNpbGx5IGxhcmdlICovCi0JCWdvdG8gZXJyX3NpemU7Ci0KLQlpZiAoIXNpemUpCQkvKiBhYmkgY29tcGF0ICovCi0JCXNpemUgPSBQRVJGX0FUVFJfU0laRV9WRVIwOwotCi0JaWYgKHNpemUgPCBQRVJGX0FUVFJfU0laRV9WRVIwKQotCQlnb3RvIGVycl9zaXplOwotCi0JLyoKLQkgKiBJZiB3ZSdyZSBoYW5kZWQgYSBiaWdnZXIgc3RydWN0IHRoYW4gd2Uga25vdyBvZiwKLQkgKiBlbnN1cmUgYWxsIHRoZSB1bmtub3duIGJpdHMgYXJlIDAuCi0JICovCi0JaWYgKHNpemUgPiBzaXplb2YoKmF0dHIpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdmFsOwotCQl1bnNpZ25lZCBsb25nIF9fdXNlciAqYWRkcjsKLQkJdW5zaWduZWQgbG9uZyBfX3VzZXIgKmVuZDsKLQotCQlhZGRyID0gUFRSX0FMSUdOKCh2b2lkIF9fdXNlciAqKXVhdHRyICsgc2l6ZW9mKCphdHRyKSwKLQkJCQlzaXplb2YodW5zaWduZWQgbG9uZykpOwotCQllbmQgID0gUFRSX0FMSUdOKCh2b2lkIF9fdXNlciAqKXVhdHRyICsgc2l6ZSwKLQkJCQlzaXplb2YodW5zaWduZWQgbG9uZykpOwotCi0JCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyICs9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgewotCQkJcmV0ID0gZ2V0X3VzZXIodmFsLCBhZGRyKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWlmICh2YWwpCi0JCQkJZ290byBlcnJfc2l6ZTsKLQkJfQotCQlzaXplID0gc2l6ZW9mKCphdHRyKTsKLQl9Ci0KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihhdHRyLCB1YXR0ciwgc2l6ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSAqIElmIHRoZSB0eXBlIGV4aXN0cywgdGhlIGNvcnJlc3BvbmRpbmcgY3JlYXRpb24gd2lsbCB2ZXJpZnkKLQkgKiB0aGUgYXR0ci0+Y29uZmlnLgotCSAqLwotCWlmIChhdHRyLT50eXBlID49IFBFUkZfVFlQRV9NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGF0dHItPl9fcmVzZXJ2ZWRfMSB8fCBhdHRyLT5fX3Jlc2VydmVkXzIgfHwgYXR0ci0+X19yZXNlcnZlZF8zKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhdHRyLT5zYW1wbGVfdHlwZSAmIH4oUEVSRl9TQU1QTEVfTUFYLTEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhdHRyLT5yZWFkX2Zvcm1hdCAmIH4oUEVSRl9GT1JNQVRfTUFYLTEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotb3V0OgotCXJldHVybiByZXQ7Ci0KLWVycl9zaXplOgotCXB1dF91c2VyKHNpemVvZigqYXR0ciksICZ1YXR0ci0+c2l6ZSk7Ci0JcmV0ID0gLUUyQklHOwotCWdvdG8gb3V0OwotfQotCi1pbnQgcGVyZl9jb3VudGVyX3NldF9vdXRwdXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IG91dHB1dF9mZCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpvdXRwdXRfY291bnRlciA9IE5VTEw7Ci0Jc3RydWN0IGZpbGUgKm91dHB1dF9maWxlID0gTlVMTDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpvbGRfb3V0cHV0OwotCWludCBmcHV0X25lZWRlZCA9IDA7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIW91dHB1dF9mZCkKLQkJZ290byBzZXQ7Ci0KLQlvdXRwdXRfZmlsZSA9IGZnZXRfbGlnaHQob3V0cHV0X2ZkLCAmZnB1dF9uZWVkZWQpOwotCWlmICghb3V0cHV0X2ZpbGUpCi0JCXJldHVybiAtRUJBREY7Ci0KLQlpZiAob3V0cHV0X2ZpbGUtPmZfb3AgIT0gJnBlcmZfZm9wcykKLQkJZ290byBvdXQ7Ci0KLQlvdXRwdXRfY291bnRlciA9IG91dHB1dF9maWxlLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBEb24ndCBjaGFpbiBvdXRwdXQgZmRzICovCi0JaWYgKG91dHB1dF9jb3VudGVyLT5vdXRwdXQpCi0JCWdvdG8gb3V0OwotCi0JLyogRG9uJ3Qgc2V0IGFuIG91dHB1dCBmZCB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhbiBvdXRwdXQgY2hhbm5lbCAqLwotCWlmIChjb3VudGVyLT5kYXRhKQotCQlnb3RvIG91dDsKLQotCWF0b21pY19sb25nX2luYygmb3V0cHV0X2ZpbGUtPmZfY291bnQpOwotCi1zZXQ6Ci0JbXV0ZXhfbG9jaygmY291bnRlci0+bW1hcF9tdXRleCk7Ci0Jb2xkX291dHB1dCA9IGNvdW50ZXItPm91dHB1dDsKLQlyY3VfYXNzaWduX3BvaW50ZXIoY291bnRlci0+b3V0cHV0LCBvdXRwdXRfY291bnRlcik7Ci0JbXV0ZXhfdW5sb2NrKCZjb3VudGVyLT5tbWFwX211dGV4KTsKLQotCWlmIChvbGRfb3V0cHV0KSB7Ci0JCS8qCi0JCSAqIHdlIG5lZWQgdG8gbWFrZSBzdXJlIG5vIGV4aXN0aW5nIHBlcmZfb3V0cHV0XyooKQotCQkgKiBpcyBzdGlsbCByZWZlcmVuY2luZyB0aGlzIGNvdW50ZXIuCi0JCSAqLwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJZnB1dChvbGRfb3V0cHV0LT5maWxwKTsKLQl9Ci0KLQlyZXQgPSAwOwotb3V0OgotCWZwdXRfbGlnaHQob3V0cHV0X2ZpbGUsIGZwdXRfbmVlZGVkKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHN5c19wZXJmX2NvdW50ZXJfb3BlbiAtIG9wZW4gYSBwZXJmb3JtYW5jZSBjb3VudGVyLCBhc3NvY2lhdGUgaXQgdG8gYSB0YXNrL2NwdQotICoKLSAqIEBhdHRyX3VwdHI6CWV2ZW50IHR5cGUgYXR0cmlidXRlcyBmb3IgbW9uaXRvcmluZy9zYW1wbGluZwotICogQHBpZDoJCXRhcmdldCBwaWQKLSAqIEBjcHU6CQl0YXJnZXQgY3B1Ci0gKiBAZ3JvdXBfZmQ6CQlncm91cCBsZWFkZXIgY291bnRlciBmZAotICovCi1TWVNDQUxMX0RFRklORTUocGVyZl9jb3VudGVyX29wZW4sCi0JCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciBfX3VzZXIgKiwgYXR0cl91cHRyLAotCQlwaWRfdCwgcGlkLCBpbnQsIGNwdSwgaW50LCBncm91cF9mZCwgdW5zaWduZWQgbG9uZywgZmxhZ3MpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgKmdyb3VwX2xlYWRlcjsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgYXR0cjsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eDsKLQlzdHJ1Y3QgZmlsZSAqY291bnRlcl9maWxlID0gTlVMTDsKLQlzdHJ1Y3QgZmlsZSAqZ3JvdXBfZmlsZSA9IE5VTEw7Ci0JaW50IGZwdXRfbmVlZGVkID0gMDsKLQlpbnQgZnB1dF9uZWVkZWQyID0gMDsKLQlpbnQgZXJyOwotCi0JLyogZm9yIGZ1dHVyZSBleHBhbmRhYmlsaXR5Li4uICovCi0JaWYgKGZsYWdzICYgfihQRVJGX0ZMQUdfRkRfTk9fR1JPVVAgfCBQRVJGX0ZMQUdfRkRfT1VUUFVUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllcnIgPSBwZXJmX2NvcHlfYXR0cihhdHRyX3VwdHIsICZhdHRyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFhdHRyLmV4Y2x1ZGVfa2VybmVsKSB7Ci0JCWlmIChwZXJmX3BhcmFub2lkX2tlcm5lbCgpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0JfQotCi0JaWYgKGF0dHIuZnJlcSkgewotCQlpZiAoYXR0ci5zYW1wbGVfZnJlcSA+IHN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIEdldCB0aGUgdGFyZ2V0IGNvbnRleHQgKHRhc2sgb3IgcGVyY3B1KToKLQkgKi8KLQljdHggPSBmaW5kX2dldF9jb250ZXh0KHBpZCwgY3B1KTsKLQlpZiAoSVNfRVJSKGN0eCkpCi0JCXJldHVybiBQVFJfRVJSKGN0eCk7Ci0KLQkvKgotCSAqIExvb2sgdXAgdGhlIGdyb3VwIGxlYWRlciAod2Ugd2lsbCBhdHRhY2ggdGhpcyBjb3VudGVyIHRvIGl0KToKLQkgKi8KLQlncm91cF9sZWFkZXIgPSBOVUxMOwotCWlmIChncm91cF9mZCAhPSAtMSAmJiAhKGZsYWdzICYgUEVSRl9GTEFHX0ZEX05PX0dST1VQKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlncm91cF9maWxlID0gZmdldF9saWdodChncm91cF9mZCwgJmZwdXRfbmVlZGVkKTsKLQkJaWYgKCFncm91cF9maWxlKQotCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7Ci0JCWlmIChncm91cF9maWxlLT5mX29wICE9ICZwZXJmX2ZvcHMpCi0JCQlnb3RvIGVycl9wdXRfY29udGV4dDsKLQotCQlncm91cF9sZWFkZXIgPSBncm91cF9maWxlLT5wcml2YXRlX2RhdGE7Ci0JCS8qCi0JCSAqIERvIG5vdCBhbGxvdyBhIHJlY3Vyc2l2ZSBoaWVyYXJjaHkgKHRoaXMgbmV3IHNpYmxpbmcKLQkJICogYmVjb21pbmcgcGFydCBvZiBhbm90aGVyIGdyb3VwLXNpYmxpbmcpOgotCQkgKi8KLQkJaWYgKGdyb3VwX2xlYWRlci0+Z3JvdXBfbGVhZGVyICE9IGdyb3VwX2xlYWRlcikKLQkJCWdvdG8gZXJyX3B1dF9jb250ZXh0OwotCQkvKgotCQkgKiBEbyBub3QgYWxsb3cgdG8gYXR0YWNoIHRvIGEgZ3JvdXAgaW4gYSBkaWZmZXJlbnQKLQkJICogdGFzayBvciBDUFUgY29udGV4dDoKLQkJICovCi0JCWlmIChncm91cF9sZWFkZXItPmN0eCAhPSBjdHgpCi0JCQlnb3RvIGVycl9wdXRfY29udGV4dDsKLQkJLyoKLQkJICogT25seSBhIGdyb3VwIGxlYWRlciBjYW4gYmUgZXhjbHVzaXZlIG9yIHBpbm5lZAotCQkgKi8KLQkJaWYgKGF0dHIuZXhjbHVzaXZlIHx8IGF0dHIucGlubmVkKQotCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7Ci0JfQotCi0JY291bnRlciA9IHBlcmZfY291bnRlcl9hbGxvYygmYXR0ciwgY3B1LCBjdHgsIGdyb3VwX2xlYWRlciwKLQkJCQkgICAgIE5VTEwsIEdGUF9LRVJORUwpOwotCWVyciA9IFBUUl9FUlIoY291bnRlcik7Ci0JaWYgKElTX0VSUihjb3VudGVyKSkKLQkJZ290byBlcnJfcHV0X2NvbnRleHQ7Ci0KLQllcnIgPSBhbm9uX2lub2RlX2dldGZkKCJbcGVyZl9jb3VudGVyXSIsICZwZXJmX2ZvcHMsIGNvdW50ZXIsIDApOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycl9mcmVlX3B1dF9jb250ZXh0OwotCi0JY291bnRlcl9maWxlID0gZmdldF9saWdodChlcnIsICZmcHV0X25lZWRlZDIpOwotCWlmICghY291bnRlcl9maWxlKQotCQlnb3RvIGVycl9mcmVlX3B1dF9jb250ZXh0OwotCi0JaWYgKGZsYWdzICYgUEVSRl9GTEFHX0ZEX09VVFBVVCkgewotCQllcnIgPSBwZXJmX2NvdW50ZXJfc2V0X291dHB1dChjb3VudGVyLCBncm91cF9mZCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9mcHV0X2ZyZWVfcHV0X2NvbnRleHQ7Ci0JfQotCi0JY291bnRlci0+ZmlscCA9IGNvdW50ZXJfZmlsZTsKLQlXQVJOX09OX09OQ0UoY3R4LT5wYXJlbnRfY3R4KTsKLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKLQlwZXJmX2luc3RhbGxfaW5fY29udGV4dChjdHgsIGNvdW50ZXIsIGNwdSk7Ci0JKytjdHgtPmdlbmVyYXRpb247Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKLQotCWNvdW50ZXItPm93bmVyID0gY3VycmVudDsKLQlnZXRfdGFza19zdHJ1Y3QoY3VycmVudCk7Ci0JbXV0ZXhfbG9jaygmY3VycmVudC0+cGVyZl9jb3VudGVyX211dGV4KTsKLQlsaXN0X2FkZF90YWlsKCZjb3VudGVyLT5vd25lcl9lbnRyeSwgJmN1cnJlbnQtPnBlcmZfY291bnRlcl9saXN0KTsKLQltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfY291bnRlcl9tdXRleCk7Ci0KLWVycl9mcHV0X2ZyZWVfcHV0X2NvbnRleHQ6Ci0JZnB1dF9saWdodChjb3VudGVyX2ZpbGUsIGZwdXRfbmVlZGVkMik7Ci0KLWVycl9mcmVlX3B1dF9jb250ZXh0OgotCWlmIChlcnIgPCAwKQotCQlrZnJlZShjb3VudGVyKTsKLQotZXJyX3B1dF9jb250ZXh0OgotCWlmIChlcnIgPCAwKQotCQlwdXRfY3R4KGN0eCk7Ci0KLQlmcHV0X2xpZ2h0KGdyb3VwX2ZpbGUsIGZwdXRfbmVlZGVkKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBpbmhlcml0IGEgY291bnRlciBmcm9tIHBhcmVudCB0YXNrIHRvIGNoaWxkIHRhc2s6Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGVyZl9jb3VudGVyICoKLWluaGVyaXRfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpwYXJlbnRfY291bnRlciwKLQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKLQkgICAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKnBhcmVudF9jdHgsCi0JICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKLQkgICAgICBzdHJ1Y3QgcGVyZl9jb3VudGVyICpncm91cF9sZWFkZXIsCi0JICAgICAgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjaGlsZF9jdHgpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY2hpbGRfY291bnRlcjsKLQotCS8qCi0JICogSW5zdGVhZCBvZiBjcmVhdGluZyByZWN1cnNpdmUgaGllcmFyY2hpZXMgb2YgY291bnRlcnMsCi0JICogd2UgbGluayBpbmhlcml0ZWQgY291bnRlcnMgYmFjayB0byB0aGUgb3JpZ2luYWwgcGFyZW50LAotCSAqIHdoaWNoIGhhcyBhIGZpbHAgZm9yIHN1cmUsIHdoaWNoIHdlIHVzZSBhcyB0aGUgcmVmZXJlbmNlCi0JICogY291bnQ6Ci0JICovCi0JaWYgKHBhcmVudF9jb3VudGVyLT5wYXJlbnQpCi0JCXBhcmVudF9jb3VudGVyID0gcGFyZW50X2NvdW50ZXItPnBhcmVudDsKLQotCWNoaWxkX2NvdW50ZXIgPSBwZXJmX2NvdW50ZXJfYWxsb2MoJnBhcmVudF9jb3VudGVyLT5hdHRyLAotCQkJCQkgICBwYXJlbnRfY291bnRlci0+Y3B1LCBjaGlsZF9jdHgsCi0JCQkJCSAgIGdyb3VwX2xlYWRlciwgcGFyZW50X2NvdW50ZXIsCi0JCQkJCSAgIEdGUF9LRVJORUwpOwotCWlmIChJU19FUlIoY2hpbGRfY291bnRlcikpCi0JCXJldHVybiBjaGlsZF9jb3VudGVyOwotCWdldF9jdHgoY2hpbGRfY3R4KTsKLQotCS8qCi0JICogTWFrZSB0aGUgY2hpbGQgc3RhdGUgZm9sbG93IHRoZSBzdGF0ZSBvZiB0aGUgcGFyZW50IGNvdW50ZXIsCi0JICogbm90IGl0cyBhdHRyLmRpc2FibGVkIGJpdC4gIFdlIGhvbGQgdGhlIHBhcmVudCdzIG11dGV4LAotCSAqIHNvIHdlIHdvbid0IHJhY2Ugd2l0aCBwZXJmX2NvdW50ZXJfe2VuLCBkaXN9YWJsZV9mYW1pbHkuCi0JICovCi0JaWYgKHBhcmVudF9jb3VudGVyLT5zdGF0ZSA+PSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpCi0JCWNoaWxkX2NvdW50ZXItPnN0YXRlID0gUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFOwotCWVsc2UKLQkJY2hpbGRfY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGOwotCi0JaWYgKHBhcmVudF9jb3VudGVyLT5hdHRyLmZyZXEpCi0JCWNoaWxkX2NvdW50ZXItPmh3LnNhbXBsZV9wZXJpb2QgPSBwYXJlbnRfY291bnRlci0+aHcuc2FtcGxlX3BlcmlvZDsKLQotCS8qCi0JICogTGluayBpdCB1cCBpbiB0aGUgY2hpbGQncyBjb250ZXh0OgotCSAqLwotCWFkZF9jb3VudGVyX3RvX2N0eChjaGlsZF9jb3VudGVyLCBjaGlsZF9jdHgpOwotCi0JLyoKLQkgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmaWxwIC0gd2Ugd2lsbCBmcHV0IGl0Ci0JICogd2hlbiB0aGUgY2hpbGQgY291bnRlciBleGl0cy4gVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UKLQkgKiB3ZSBhcmUgaW4gdGhlIHBhcmVudCBhbmQgd2Uga25vdyB0aGF0IHRoZSBmaWxwIHN0aWxsCi0JICogZXhpc3RzIGFuZCBoYXMgYSBub256ZXJvIGNvdW50OgotCSAqLwotCWF0b21pY19sb25nX2luYygmcGFyZW50X2NvdW50ZXItPmZpbHAtPmZfY291bnQpOwotCi0JLyoKLQkgKiBMaW5rIHRoaXMgaW50byB0aGUgcGFyZW50IGNvdW50ZXIncyBjaGlsZCBsaXN0Ci0JICovCi0JV0FSTl9PTl9PTkNFKHBhcmVudF9jb3VudGVyLT5jdHgtPnBhcmVudF9jdHgpOwotCW11dGV4X2xvY2soJnBhcmVudF9jb3VudGVyLT5jaGlsZF9tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmY2hpbGRfY291bnRlci0+Y2hpbGRfbGlzdCwgJnBhcmVudF9jb3VudGVyLT5jaGlsZF9saXN0KTsKLQltdXRleF91bmxvY2soJnBhcmVudF9jb3VudGVyLT5jaGlsZF9tdXRleCk7Ci0KLQlyZXR1cm4gY2hpbGRfY291bnRlcjsKLX0KLQotc3RhdGljIGludCBpbmhlcml0X2dyb3VwKHN0cnVjdCBwZXJmX2NvdW50ZXIgKnBhcmVudF9jb3VudGVyLAotCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LAotCSAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqcGFyZW50X2N0eCwKLQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAotCSAgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY2hpbGRfY3R4KQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmxlYWRlcjsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpzdWI7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY2hpbGRfY3RyOwotCi0JbGVhZGVyID0gaW5oZXJpdF9jb3VudGVyKHBhcmVudF9jb3VudGVyLCBwYXJlbnQsIHBhcmVudF9jdHgsCi0JCQkJIGNoaWxkLCBOVUxMLCBjaGlsZF9jdHgpOwotCWlmIChJU19FUlIobGVhZGVyKSkKLQkJcmV0dXJuIFBUUl9FUlIobGVhZGVyKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJnBhcmVudF9jb3VudGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpIHsKLQkJY2hpbGRfY3RyID0gaW5oZXJpdF9jb3VudGVyKHN1YiwgcGFyZW50LCBwYXJlbnRfY3R4LAotCQkJCQkgICAgY2hpbGQsIGxlYWRlciwgY2hpbGRfY3R4KTsKLQkJaWYgKElTX0VSUihjaGlsZF9jdHIpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGRfY3RyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bmNfY2hpbGRfY291bnRlcihzdHJ1Y3QgcGVyZl9jb3VudGVyICpjaGlsZF9jb3VudGVyLAotCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqcGFyZW50X2NvdW50ZXIgPSBjaGlsZF9jb3VudGVyLT5wYXJlbnQ7Ci0JdTY0IGNoaWxkX3ZhbDsKLQotCWlmIChjaGlsZF9jb3VudGVyLT5hdHRyLmluaGVyaXRfc3RhdCkKLQkJcGVyZl9jb3VudGVyX3JlYWRfZXZlbnQoY2hpbGRfY291bnRlciwgY2hpbGQpOwotCi0JY2hpbGRfdmFsID0gYXRvbWljNjRfcmVhZCgmY2hpbGRfY291bnRlci0+Y291bnQpOwotCi0JLyoKLQkgKiBBZGQgYmFjayB0aGUgY2hpbGQncyBjb3VudCB0byB0aGUgcGFyZW50J3MgY291bnQ6Ci0JICovCi0JYXRvbWljNjRfYWRkKGNoaWxkX3ZhbCwgJnBhcmVudF9jb3VudGVyLT5jb3VudCk7Ci0JYXRvbWljNjRfYWRkKGNoaWxkX2NvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZCwKLQkJICAgICAmcGFyZW50X2NvdW50ZXItPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7Ci0JYXRvbWljNjRfYWRkKGNoaWxkX2NvdW50ZXItPnRvdGFsX3RpbWVfcnVubmluZywKLQkJICAgICAmcGFyZW50X2NvdW50ZXItPmNoaWxkX3RvdGFsX3RpbWVfcnVubmluZyk7Ci0KLQkvKgotCSAqIFJlbW92ZSB0aGlzIGNvdW50ZXIgZnJvbSB0aGUgcGFyZW50J3MgbGlzdAotCSAqLwotCVdBUk5fT05fT05DRShwYXJlbnRfY291bnRlci0+Y3R4LT5wYXJlbnRfY3R4KTsKLQltdXRleF9sb2NrKCZwYXJlbnRfY291bnRlci0+Y2hpbGRfbXV0ZXgpOwotCWxpc3RfZGVsX2luaXQoJmNoaWxkX2NvdW50ZXItPmNoaWxkX2xpc3QpOwotCW11dGV4X3VubG9jaygmcGFyZW50X2NvdW50ZXItPmNoaWxkX211dGV4KTsKLQotCS8qCi0JICogUmVsZWFzZSB0aGUgcGFyZW50IGNvdW50ZXIsIGlmIHRoaXMgd2FzIHRoZSBsYXN0Ci0JICogcmVmZXJlbmNlIHRvIGl0LgotCSAqLwotCWZwdXQocGFyZW50X2NvdW50ZXItPmZpbHApOwotfQotCi1zdGF0aWMgdm9pZAotX19wZXJmX2NvdW50ZXJfZXhpdF90YXNrKHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNoaWxkX2NvdW50ZXIsCi0JCQkgc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjaGlsZF9jdHgsCi0JCQkgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKLXsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpwYXJlbnRfY291bnRlcjsKLQotCXVwZGF0ZV9jb3VudGVyX3RpbWVzKGNoaWxkX2NvdW50ZXIpOwotCXBlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0KGNoaWxkX2NvdW50ZXIpOwotCi0JcGFyZW50X2NvdW50ZXIgPSBjaGlsZF9jb3VudGVyLT5wYXJlbnQ7Ci0JLyoKLQkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgcGFyZW50IGV4aXRzIGZpcnN0LCBhbmQgaGFzIGNvdW50ZXJzCi0JICogdGhhdCBhcmUgc3RpbGwgYXJvdW5kIGR1ZSB0byB0aGUgY2hpbGQgcmVmZXJlbmNlLiBUaGVzZQotCSAqIGNvdW50ZXJzIG5lZWQgdG8gYmUgemFwcGVkIC0gYnV0IG90aGVyd2lzZSBsaW5nZXIuCi0JICovCi0JaWYgKHBhcmVudF9jb3VudGVyKSB7Ci0JCXN5bmNfY2hpbGRfY291bnRlcihjaGlsZF9jb3VudGVyLCBjaGlsZCk7Ci0JCWZyZWVfY291bnRlcihjaGlsZF9jb3VudGVyKTsKLQl9Ci19Ci0KLS8qCi0gKiBXaGVuIGEgY2hpbGQgdGFzayBleGl0cywgZmVlZCBiYWNrIGNvdW50ZXIgdmFsdWVzIHRvIHBhcmVudCBjb3VudGVycy4KLSAqLwotdm9pZCBwZXJmX2NvdW50ZXJfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY2hpbGRfY291bnRlciwgKnRtcDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmNoaWxkX2N0eDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGxpa2VseSghY2hpbGQtPnBlcmZfY291bnRlcl9jdHhwKSkgewotCQlwZXJmX2NvdW50ZXJfdGFzayhjaGlsZCwgTlVMTCwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JLyoKLQkgKiBXZSBjYW4ndCByZXNjaGVkdWxlIGhlcmUgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKLQkgKiBhbmQgZWl0aGVyIGNoaWxkIGlzIGN1cnJlbnQgb3IgaXQgaXMgYSB0YXNrIHRoYXQgY2FuJ3QgYmUKLQkgKiBzY2hlZHVsZWQsIHNvIHdlIGFyZSBub3cgc2FmZSBmcm9tIHJlc2NoZWR1bGluZyBjaGFuZ2luZwotCSAqIG91ciBjb250ZXh0LgotCSAqLwotCWNoaWxkX2N0eCA9IGNoaWxkLT5wZXJmX2NvdW50ZXJfY3R4cDsKLQlfX3BlcmZfY291bnRlcl90YXNrX3NjaGVkX291dChjaGlsZF9jdHgpOwotCi0JLyoKLQkgKiBUYWtlIHRoZSBjb250ZXh0IGxvY2sgaGVyZSBzbyB0aGF0IGlmIGZpbmRfZ2V0X2NvbnRleHQgaXMKLQkgKiByZWFkaW5nIGNoaWxkLT5wZXJmX2NvdW50ZXJfY3R4cCwgd2Ugd2FpdCB1bnRpbCBpdCBoYXMKLQkgKiBpbmNyZW1lbnRlZCB0aGUgY29udGV4dCdzIHJlZmNvdW50IGJlZm9yZSB3ZSBkbyBwdXRfY3R4IGJlbG93LgotCSAqLwotCXNwaW5fbG9jaygmY2hpbGRfY3R4LT5sb2NrKTsKLQljaGlsZC0+cGVyZl9jb3VudGVyX2N0eHAgPSBOVUxMOwotCS8qCi0JICogSWYgdGhpcyBjb250ZXh0IGlzIGEgY2xvbmU7IHVuY2xvbmUgaXQgc28gaXQgY2FuJ3QgZ2V0Ci0JICogc3dhcHBlZCB0byBhbm90aGVyIHByb2Nlc3Mgd2hpbGUgd2UncmUgcmVtb3ZpbmcgYWxsCi0JICogdGhlIGNvdW50ZXJzIGZyb20gaXQuCi0JICovCi0JdW5jbG9uZV9jdHgoY2hpbGRfY3R4KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlsZF9jdHgtPmxvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUmVwb3J0IHRoZSB0YXNrIGRlYWQgYWZ0ZXIgdW5zY2hlZHVsaW5nIHRoZSBjb3VudGVycyBzbyB0aGF0IHdlCi0JICogd29uJ3QgZ2V0IGFueSBzYW1wbGVzIGFmdGVyIFBFUkZfRVZFTlRfRVhJVC4gV2UgY2FuIGhvd2V2ZXIgc3RpbGwKLQkgKiBnZXQgYSBmZXcgUEVSRl9FVkVOVF9SRUFEIGV2ZW50cy4KLQkgKi8KLQlwZXJmX2NvdW50ZXJfdGFzayhjaGlsZCwgY2hpbGRfY3R4LCAwKTsKLQotCS8qCi0JICogV2UgY2FuIHJlY3Vyc2Ugb24gdGhlIHNhbWUgbG9jayB0eXBlIHRocm91Z2g6Ci0JICoKLQkgKiAgIF9fcGVyZl9jb3VudGVyX2V4aXRfdGFzaygpCi0JICogICAgIHN5bmNfY2hpbGRfY291bnRlcigpCi0JICogICAgICAgZnB1dChwYXJlbnRfY291bnRlci0+ZmlscCkKLQkgKiAgICAgICAgIHBlcmZfcmVsZWFzZSgpCi0JICogICAgICAgICAgIG11dGV4X2xvY2soJmN0eC0+bXV0ZXgpCi0JICoKLQkgKiBCdXQgc2luY2UgaXRzIHRoZSBwYXJlbnQgY29udGV4dCBpdCB3b24ndCBiZSB0aGUgc2FtZSBpbnN0YW5jZS4KLQkgKi8KLQltdXRleF9sb2NrX25lc3RlZCgmY2hpbGRfY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwotCi1hZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfY291bnRlciwgdG1wLCAmY2hpbGRfY3R4LT5jb3VudGVyX2xpc3QsCi0JCQkJIGxpc3RfZW50cnkpCi0JCV9fcGVyZl9jb3VudGVyX2V4aXRfdGFzayhjaGlsZF9jb3VudGVyLCBjaGlsZF9jdHgsIGNoaWxkKTsKLQotCS8qCi0JICogSWYgdGhlIGxhc3QgY291bnRlciB3YXMgYSBncm91cCBjb3VudGVyLCBpdCB3aWxsIGhhdmUgYXBwZW5kZWQgYWxsCi0JICogaXRzIHNpYmxpbmdzIHRvIHRoZSBsaXN0LCBidXQgd2Ugb2J0YWluZWQgJ3RtcCcgYmVmb3JlIHRoYXQgd2hpY2gKLQkgKiB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBsaXN0IGhlYWQgdGVybWluYXRpbmcgdGhlIGl0ZXJhdGlvbi4KLQkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmNoaWxkX2N0eC0+Y291bnRlcl9saXN0KSkKLQkJZ290byBhZ2FpbjsKLQotCW11dGV4X3VubG9jaygmY2hpbGRfY3R4LT5tdXRleCk7Ci0KLQlwdXRfY3R4KGNoaWxkX2N0eCk7Ci19Ci0KLS8qCi0gKiBmcmVlIGFuIHVuZXhwb3NlZCwgdW51c2VkIGNvbnRleHQgYXMgY3JlYXRlZCBieSBpbmhlcml0YW5jZSBieQotICogaW5pdF90YXNrIGJlbG93LCB1c2VkIGJ5IGZvcmsoKSBpbiBjYXNlIG9mIGZhaWwuCi0gKi8KLXZvaWQgcGVyZl9jb3VudGVyX2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSB0YXNrLT5wZXJmX2NvdW50ZXJfY3R4cDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCAqdG1wOwotCi0JaWYgKCFjdHgpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOwotYWdhaW46Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvdW50ZXIsIHRtcCwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KSB7Ci0JCXN0cnVjdCBwZXJmX2NvdW50ZXIgKnBhcmVudCA9IGNvdW50ZXItPnBhcmVudDsKLQotCQlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQotCQkJY29udGludWU7Ci0KLQkJbXV0ZXhfbG9jaygmcGFyZW50LT5jaGlsZF9tdXRleCk7Ci0JCWxpc3RfZGVsX2luaXQoJmNvdW50ZXItPmNoaWxkX2xpc3QpOwotCQltdXRleF91bmxvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOwotCi0JCWZwdXQocGFyZW50LT5maWxwKTsKLQotCQlsaXN0X2RlbF9jb3VudGVyKGNvdW50ZXIsIGN0eCk7Ci0JCWZyZWVfY291bnRlcihjb3VudGVyKTsKLQl9Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+Y291bnRlcl9saXN0KSkKLQkJZ290byBhZ2FpbjsKLQotCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7Ci0KLQlwdXRfY3R4KGN0eCk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBwZXJmX2NvdW50ZXIgY29udGV4dCBpbiB0YXNrX3N0cnVjdAotICovCi1pbnQgcGVyZl9jb3VudGVyX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQotewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY2hpbGRfY3R4LCAqcGFyZW50X2N0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmNsb25lZF9jdHg7Ci0Jc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCA9IGN1cnJlbnQ7Ci0JaW50IGluaGVyaXRlZF9hbGwgPSAxOwotCWludCByZXQgPSAwOwotCi0JY2hpbGQtPnBlcmZfY291bnRlcl9jdHhwID0gTlVMTDsKLQotCW11dGV4X2luaXQoJmNoaWxkLT5wZXJmX2NvdW50ZXJfbXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjaGlsZC0+cGVyZl9jb3VudGVyX2xpc3QpOwotCi0JaWYgKGxpa2VseSghcGFyZW50LT5wZXJmX2NvdW50ZXJfY3R4cCkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGlzIGlzIGV4ZWN1dGVkIGZyb20gdGhlIHBhcmVudCB0YXNrIGNvbnRleHQsIHNvIGluaGVyaXQKLQkgKiBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZm9yIGNsb25pbmcuCi0JICogRmlyc3QgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBjb250ZXh0IGZvciB0aGUgY2hpbGQuCi0JICovCi0KLQljaGlsZF9jdHggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNoaWxkX2N0eCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlfX3BlcmZfY291bnRlcl9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7Ci0JY2hpbGQtPnBlcmZfY291bnRlcl9jdHhwID0gY2hpbGRfY3R4OwotCWdldF90YXNrX3N0cnVjdChjaGlsZCk7Ci0KLQkvKgotCSAqIElmIHRoZSBwYXJlbnQncyBjb250ZXh0IGlzIGEgY2xvbmUsIHBpbiBpdCBzbyBpdCB3b24ndCBnZXQKLQkgKiBzd2FwcGVkIHVuZGVyIHVzLgotCSAqLwotCXBhcmVudF9jdHggPSBwZXJmX3Bpbl90YXNrX2NvbnRleHQocGFyZW50KTsKLQotCS8qCi0JICogTm8gbmVlZCB0byBjaGVjayBpZiBwYXJlbnRfY3R4ICE9IE5VTEwgaGVyZTsgc2luY2Ugd2Ugc2F3Ci0JICogaXQgbm9uLU5VTEwgZWFybGllciwgdGhlIG9ubHkgcmVhc29uIGZvciBpdCB0byBiZWNvbWUgTlVMTAotCSAqIGlzIGlmIHdlIGV4aXQsIGFuZCBzaW5jZSB3ZSdyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZgotCSAqIGEgZm9yayB3ZSBjYW4ndCBiZSBleGl0aW5nIGF0IHRoZSBzYW1lIHRpbWUuCi0JICovCi0KLQkvKgotCSAqIExvY2sgdGhlIHBhcmVudCBsaXN0LiBObyBuZWVkIHRvIGxvY2sgdGhlIGNoaWxkIC0gbm90IFBJRAotCSAqIGhhc2hlZCB5ZXQgYW5kIG5vdCBydW5uaW5nLCBzbyBub2JvZHkgY2FuIGFjY2VzcyBpdC4KLQkgKi8KLQltdXRleF9sb2NrKCZwYXJlbnRfY3R4LT5tdXRleCk7Ci0KLQkvKgotCSAqIFdlIGRvbnQgaGF2ZSB0byBkaXNhYmxlIE5NSXMgLSB3ZSBhcmUgb25seSBsb29raW5nIGF0Ci0JICogdGhlIGxpc3QsIG5vdCBtYW5pcHVsYXRpbmcgaXQ6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY291bnRlciwgJnBhcmVudF9jdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChjb3VudGVyICE9IGNvdW50ZXItPmdyb3VwX2xlYWRlcikKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghY291bnRlci0+YXR0ci5pbmhlcml0KSB7Ci0JCQlpbmhlcml0ZWRfYWxsID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmV0ID0gaW5oZXJpdF9ncm91cChjb3VudGVyLCBwYXJlbnQsIHBhcmVudF9jdHgsCi0JCQkJCSAgICAgY2hpbGQsIGNoaWxkX2N0eCk7Ci0JCWlmIChyZXQpIHsKLQkJCWluaGVyaXRlZF9hbGwgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoaW5oZXJpdGVkX2FsbCkgewotCQkvKgotCQkgKiBNYXJrIHRoZSBjaGlsZCBjb250ZXh0IGFzIGEgY2xvbmUgb2YgdGhlIHBhcmVudAotCQkgKiBjb250ZXh0LCBvciBvZiB3aGF0ZXZlciB0aGUgcGFyZW50IGlzIGEgY2xvbmUgb2YuCi0JCSAqIE5vdGUgdGhhdCBpZiB0aGUgcGFyZW50IGlzIGEgY2xvbmUsIGl0IGNvdWxkIGdldAotCQkgKiB1bmNsb25lZCBhdCBhbnkgcG9pbnQsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyCi0JCSAqIGJlY2F1c2UgdGhlIGxpc3Qgb2YgY291bnRlcnMgYW5kIHRoZSBnZW5lcmF0aW9uCi0JCSAqIGNvdW50IGNhbid0IGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSB0b29rIHRoZSBtdXRleC4KLQkJICovCi0JCWNsb25lZF9jdHggPSByY3VfZGVyZWZlcmVuY2UocGFyZW50X2N0eC0+cGFyZW50X2N0eCk7Ci0JCWlmIChjbG9uZWRfY3R4KSB7Ci0JCQljaGlsZF9jdHgtPnBhcmVudF9jdHggPSBjbG9uZWRfY3R4OwotCQkJY2hpbGRfY3R4LT5wYXJlbnRfZ2VuID0gcGFyZW50X2N0eC0+cGFyZW50X2dlbjsKLQkJfSBlbHNlIHsKLQkJCWNoaWxkX2N0eC0+cGFyZW50X2N0eCA9IHBhcmVudF9jdHg7Ci0JCQljaGlsZF9jdHgtPnBhcmVudF9nZW4gPSBwYXJlbnRfY3R4LT5nZW5lcmF0aW9uOwotCQl9Ci0JCWdldF9jdHgoY2hpbGRfY3R4LT5wYXJlbnRfY3R4KTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnBhcmVudF9jdHgtPm11dGV4KTsKLQotCXBlcmZfdW5waW5fY29udGV4dChwYXJlbnRfY3R4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBwZXJmX2NvdW50ZXJfaW5pdF9jcHUoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwotCi0JY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKLQlfX3BlcmZfY291bnRlcl9pbml0X2NvbnRleHQoJmNwdWN0eC0+Y3R4LCBOVUxMKTsKLQotCXNwaW5fbG9jaygmcGVyZl9yZXNvdXJjZV9sb2NrKTsKLQljcHVjdHgtPm1heF9wZXJ0YXNrID0gcGVyZl9tYXhfY291bnRlcnMgLSBwZXJmX3Jlc2VydmVkX3BlcmNwdTsKLQlzcGluX3VubG9jaygmcGVyZl9yZXNvdXJjZV9sb2NrKTsKLQotCWh3X3BlcmZfY291bnRlcl9zZXR1cChjcHUpOwotfQotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgdm9pZCBfX3BlcmZfY291bnRlcl9leGl0X2NwdSh2b2lkICppbmZvKQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvdW50ZXIsIHRtcCwgJmN0eC0+Y291bnRlcl9saXN0LCBsaXN0X2VudHJ5KQotCQlfX3BlcmZfY291bnRlcl9yZW1vdmVfZnJvbV9jb250ZXh0KGNvdW50ZXIpOwotfQotc3RhdGljIHZvaWQgcGVyZl9jb3VudGVyX2V4aXRfY3B1KGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHggPSAmY3B1Y3R4LT5jdHg7Ci0KLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKLQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3BlcmZfY291bnRlcl9leGl0X2NwdSwgTlVMTCwgMSk7Ci0JbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jb3VudGVyX2V4aXRfY3B1KGludCBjcHUpIHsgfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19jcHVpbml0Ci1wZXJmX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKLXsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gKGxvbmcpaGNwdTsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0KLQljYXNlIENQVV9VUF9QUkVQQVJFOgotCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgotCQlwZXJmX2NvdW50ZXJfaW5pdF9jcHUoY3B1KTsKLQkJYnJlYWs7Ci0KLQljYXNlIENQVV9PTkxJTkU6Ci0JY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJaHdfcGVyZl9jb3VudGVyX3NldHVwX29ubGluZShjcHUpOwotCQlicmVhazsKLQotCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKLQljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgotCQlwZXJmX2NvdW50ZXJfZXhpdF9jcHUoY3B1KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gTk9USUZZX09LOwotfQotCi0vKgotICogVGhpcyBoYXMgdG8gaGF2ZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIG1pZ3JhdGlvbl9ub3RpZmllciBpbiBzY2hlZC5jLgotICovCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgcGVyZl9jcHVfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJCT0gcGVyZl9jcHVfbm90aWZ5LAotCS5wcmlvcml0eQkJPSAyMCwKLX07Ci0KLXZvaWQgX19pbml0IHBlcmZfY291bnRlcl9pbml0KHZvaWQpCi17Ci0JcGVyZl9jcHVfbm90aWZ5KCZwZXJmX2NwdV9uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCi0JCQkodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcGVyZl9jcHVfbm90aWZ5KCZwZXJmX2NwdV9uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX09OTElORSwKLQkJCSh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnBlcmZfY3B1X25iKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcGVyZl9zaG93X3Jlc2VydmVfcGVyY3B1KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1KTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXBlcmZfc2V0X3Jlc2VydmVfcGVyY3B1KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAotCQkJY29uc3QgY2hhciAqYnVmLAotCQkJc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IGVyciwgY3B1LCBtcHQ7Ci0KLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWlmICh2YWwgPiBwZXJmX21heF9jb3VudGVycykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7Ci0JcGVyZl9yZXNlcnZlZF9wZXJjcHUgPSB2YWw7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKLQkJc3Bpbl9sb2NrX2lycSgmY3B1Y3R4LT5jdHgubG9jayk7Ci0JCW1wdCA9IG1pbihwZXJmX21heF9jb3VudGVycyAtIGNwdWN0eC0+Y3R4Lm5yX2NvdW50ZXJzLAotCQkJICBwZXJmX21heF9jb3VudGVycyAtIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1KTsKLQkJY3B1Y3R4LT5tYXhfcGVydGFzayA9IG1wdDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjcHVjdHgtPmN0eC5sb2NrKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBlcmZfc2hvd19vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBlcmZfb3ZlcmNvbW1pdCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1wZXJmX3NldF9vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlpZiAodmFsID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7Ci0JcGVyZl9vdmVyY29tbWl0ID0gdmFsOwotCXNwaW5fdW5sb2NrKCZwZXJmX3Jlc291cmNlX2xvY2spOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoCi0JCQkJcmVzZXJ2ZV9wZXJjcHUsCi0JCQkJMDY0NCwKLQkJCQlwZXJmX3Nob3dfcmVzZXJ2ZV9wZXJjcHUsCi0JCQkJcGVyZl9zZXRfcmVzZXJ2ZV9wZXJjcHUKLQkJCSk7Ci0KLXN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUigKLQkJCQlvdmVyY29tbWl0LAotCQkJCTA2NDQsCi0JCQkJcGVyZl9zaG93X292ZXJjb21taXQsCi0JCQkJcGVyZl9zZXRfb3ZlcmNvbW1pdAotCQkJKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBlcmZjbGFzc19hdHRyc1tdID0gewotCSZhdHRyX3Jlc2VydmVfcGVyY3B1LmF0dHIsCi0JJmF0dHJfb3ZlcmNvbW1pdC5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBlcmZjbGFzc19hdHRyX2dyb3VwID0gewotCS5hdHRycwkJCT0gcGVyZmNsYXNzX2F0dHJzLAotCS5uYW1lCQkJPSAicGVyZl9jb3VudGVycyIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwZXJmX2NvdW50ZXJfc3lzZnNfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmNwdV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAotCQkJCSAgJnBlcmZjbGFzc19hdHRyX2dyb3VwKTsKLX0KLWRldmljZV9pbml0Y2FsbChwZXJmX2NvdW50ZXJfc3lzZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmFjNGRiCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMCwwICsxLDUwMDAgQEAKKy8qCisgKiBQZXJmb3JtYW5jZSBldmVudHMgY29yZSBjb2RlOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgIKkgIDIwMDkgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3JwLiA8cGF1bHVzQGF1MS5pYm0uY29tPgorICoKKyAqIEZvciBsaWNlbnNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORworICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKworI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorCisvKgorICogRWFjaCBDUFUgaGFzIGEgbGlzdCBvZiBwZXIgQ1BVIGV2ZW50czoKKyAqLworREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY3B1X2NvbnRleHQsIHBlcmZfY3B1X2NvbnRleHQpOworCitpbnQgcGVyZl9tYXhfZXZlbnRzIF9fcmVhZF9tb3N0bHkgPSAxOworc3RhdGljIGludCBwZXJmX3Jlc2VydmVkX3BlcmNwdSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGludCBwZXJmX292ZXJjb21taXQgX19yZWFkX21vc3RseSA9IDE7CisKK3N0YXRpYyBhdG9taWNfdCBucl9ldmVudHMgX19yZWFkX21vc3RseTsKK3N0YXRpYyBhdG9taWNfdCBucl9tbWFwX2V2ZW50cyBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGF0b21pY190IG5yX2NvbW1fZXZlbnRzIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgYXRvbWljX3QgbnJfdGFza19ldmVudHMgX19yZWFkX21vc3RseTsKKworLyoKKyAqIHBlcmYgZXZlbnQgcGFyYW5vaWEgbGV2ZWw6CisgKiAgLTEgLSBub3QgcGFyYW5vaWQgYXQgYWxsCisgKiAgIDAgLSBkaXNhbGxvdyByYXcgdHJhY2Vwb2ludCBhY2Nlc3MgZm9yIHVucHJpdgorICogICAxIC0gZGlzYWxsb3cgY3B1IGV2ZW50cyBmb3IgdW5wcml2CisgKiAgIDIgLSBkaXNhbGxvdyBrZXJuZWwgcHJvZmlsaW5nIGZvciB1bnByaXYKKyAqLworaW50IHN5c2N0bF9wZXJmX2V2ZW50X3BhcmFub2lkIF9fcmVhZF9tb3N0bHkgPSAxOworCitzdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF90cmFjZXBvaW50X3Jhdyh2b2lkKQoreworCXJldHVybiBzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCA+IC0xOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF9jcHUodm9pZCkKK3sKKwlyZXR1cm4gc3lzY3RsX3BlcmZfZXZlbnRfcGFyYW5vaWQgPiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF9rZXJuZWwodm9pZCkKK3sKKwlyZXR1cm4gc3lzY3RsX3BlcmZfZXZlbnRfcGFyYW5vaWQgPiAxOworfQorCitpbnQgc3lzY3RsX3BlcmZfZXZlbnRfbWxvY2sgX19yZWFkX21vc3RseSA9IDUxMjsgLyogJ2ZyZWUnIGtiIHBlciB1c2VyICovCisKKy8qCisgKiBtYXggcGVyZiBldmVudCBzYW1wbGUgcmF0ZQorICovCitpbnQgc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUgX19yZWFkX21vc3RseSA9IDEwMDAwMDsKKworc3RhdGljIGF0b21pYzY0X3QgcGVyZl9ldmVudF9pZDsKKworLyoKKyAqIExvY2sgZm9yIChzeXNhZG1pbi1jb25maWd1cmFibGUpIGV2ZW50IHJlc2VydmF0aW9uczoKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhwZXJmX3Jlc291cmNlX2xvY2spOworCisvKgorICogQXJjaGl0ZWN0dXJlIHByb3ZpZGVkIEFQSXMgLSB3ZWFrIGFsaWFzZXM6CisgKi8KK2V4dGVybiBfX3dlYWsgY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3dlYWsgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCQl7IGJhcnJpZXIoKTsgfQordm9pZCBfX3dlYWsgaHdfcGVyZl9lbmFibGUodm9pZCkJCXsgYmFycmllcigpOyB9CisKK3ZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXAoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KK3ZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCXsgYmFycmllcigpOyB9CisKK2ludCBfX3dlYWsKK2h3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKKwkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KQoreworCXJldHVybiAwOworfQorCit2b2lkIF9fd2VhayBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpCXsgfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwZXJmX2Rpc2FibGVfY291bnQpOworCit2b2lkIF9fcGVyZl9kaXNhYmxlKHZvaWQpCit7CisJX19nZXRfY3B1X3ZhcihwZXJmX2Rpc2FibGVfY291bnQpKys7Cit9CisKK2Jvb2wgX19wZXJmX2VuYWJsZSh2b2lkKQoreworCXJldHVybiAhLS1fX2dldF9jcHVfdmFyKHBlcmZfZGlzYWJsZV9jb3VudCk7Cit9CisKK3ZvaWQgcGVyZl9kaXNhYmxlKHZvaWQpCit7CisJX19wZXJmX2Rpc2FibGUoKTsKKwlod19wZXJmX2Rpc2FibGUoKTsKK30KKwordm9pZCBwZXJmX2VuYWJsZSh2b2lkKQoreworCWlmIChfX3BlcmZfZW5hYmxlKCkpCisJCWh3X3BlcmZfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9jdHgoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCVdBUk5fT04oIWF0b21pY19pbmNfbm90X3plcm8oJmN0eC0+cmVmY291bnQpKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jdHgoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKworCWN0eCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0LCByY3VfaGVhZCk7CisJa2ZyZWUoY3R4KTsKK30KKworc3RhdGljIHZvaWQgcHV0X2N0eChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmY291bnQpKSB7CisJCWlmIChjdHgtPnBhcmVudF9jdHgpCisJCQlwdXRfY3R4KGN0eC0+cGFyZW50X2N0eCk7CisJCWlmIChjdHgtPnRhc2spCisJCQlwdXRfdGFza19zdHJ1Y3QoY3R4LT50YXNrKTsKKwkJY2FsbF9yY3UoJmN0eC0+cmN1X2hlYWQsIGZyZWVfY3R4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVuY2xvbmVfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoY3R4LT5wYXJlbnRfY3R4KSB7CisJCXB1dF9jdHgoY3R4LT5wYXJlbnRfY3R4KTsKKwkJY3R4LT5wYXJlbnRfY3R4ID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBJZiB3ZSBpbmhlcml0IGV2ZW50cyB3ZSB3YW50IHRvIHJldHVybiB0aGUgcGFyZW50IGV2ZW50IGlkCisgKiB0byB1c2Vyc3BhY2UuCisgKi8KK3N0YXRpYyB1NjQgcHJpbWFyeV9ldmVudF9pZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJdTY0IGlkID0gZXZlbnQtPmlkOworCisJaWYgKGV2ZW50LT5wYXJlbnQpCisJCWlkID0gZXZlbnQtPnBhcmVudC0+aWQ7CisKKwlyZXR1cm4gaWQ7Cit9CisKKy8qCisgKiBHZXQgdGhlIHBlcmZfZXZlbnRfY29udGV4dCBmb3IgYSB0YXNrIGFuZCBsb2NrIGl0LgorICogVGhpcyBoYXMgdG8gY29wZSB3aXRoIHdpdGggdGhlIGZhY3QgdGhhdCB1bnRpbCBpdCBpcyBsb2NrZWQsCisgKiB0aGUgY29udGV4dCBjb3VsZCBnZXQgbW92ZWQgdG8gYW5vdGhlciB0YXNrLgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqCitwZXJmX2xvY2tfdGFza19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCisJcmN1X3JlYWRfbG9jaygpOworIHJldHJ5OgorCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBjb250ZXh0IGlzIGEgY2xvbmUgb2YgYW5vdGhlciwgaXQgbWlnaHQKKwkJICogZ2V0IHN3YXBwZWQgZm9yIGFub3RoZXIgdW5kZXJuZWF0aCB1cyBieQorCQkgKiBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0LCB0aG91Z2ggdGhlCisJCSAqIHJjdV9yZWFkX2xvY2soKSBwcm90ZWN0cyB1cyBmcm9tIGFueSBjb250ZXh0CisJCSAqIGdldHRpbmcgZnJlZWQuICBMb2NrIHRoZSBjb250ZXh0IGFuZCBjaGVjayBpZiBpdAorCQkgKiBnb3Qgc3dhcHBlZCBiZWZvcmUgd2UgY291bGQgZ2V0IHRoZSBsb2NrLCBhbmQgcmV0cnkKKwkJICogaWYgc28uICBJZiB3ZSBsb2NrZWQgdGhlIHJpZ2h0IGNvbnRleHQsIHRoZW4gaXQKKwkJICogY2FuJ3QgZ2V0IHN3YXBwZWQgb24gdXMgYW55IG1vcmUuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOworCQlpZiAoY3R4ICE9IHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5wZXJmX2V2ZW50X2N0eHApKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssICpmbGFncyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisKKwkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdHgtPnJlZmNvdW50KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOworCQkJY3R4ID0gTlVMTDsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY3R4OworfQorCisvKgorICogR2V0IHRoZSBjb250ZXh0IGZvciBhIHRhc2sgYW5kIGluY3JlbWVudCBpdHMgcGluX2NvdW50IHNvIGl0CisgKiBjYW4ndCBnZXQgc3dhcHBlZCB0byBhbm90aGVyIHRhc2suICBUaGlzIGFsc28gaW5jcmVtZW50cyBpdHMKKyAqIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IHRoZSBjb250ZXh0IGNhbid0IGdldCBmcmVlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnBlcmZfcGluX3Rhc2tfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljdHggPSBwZXJmX2xvY2tfdGFza19jb250ZXh0KHRhc2ssICZmbGFncyk7CisJaWYgKGN0eCkgeworCQkrK2N0eC0+cGluX2NvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIGN0eDsKK30KKworc3RhdGljIHZvaWQgcGVyZl91bnBpbl9jb250ZXh0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCS0tY3R4LT5waW5fY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7CisJcHV0X2N0eChjdHgpOworfQorCisvKgorICogQWRkIGEgZXZlbnQgZnJvbSB0aGUgbGlzdHMgZm9yIGl0cyBjb250ZXh0LgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGFuZCBjdHgtPmxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQKK2xpc3RfYWRkX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyOworCisJLyoKKwkgKiBEZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcyBhIHN0YW5kYWxvbmUgb3Igc2libGluZyBldmVudCwKKwkgKiBhZGQgaXQgc3RyYWlnaHQgdG8gdGhlIGNvbnRleHQncyBldmVudCBsaXN0LCBvciB0byB0aGUgZ3JvdXAKKwkgKiBsZWFkZXIncyBzaWJsaW5nIGxpc3Q6CisJICovCisJaWYgKGdyb3VwX2xlYWRlciA9PSBldmVudCkKKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCAmY3R4LT5ncm91cF9saXN0KTsKKwllbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QpOworCQlncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzKys7CisJfQorCisJbGlzdF9hZGRfcmN1KCZldmVudC0+ZXZlbnRfZW50cnksICZjdHgtPmV2ZW50X2xpc3QpOworCWN0eC0+bnJfZXZlbnRzKys7CisJaWYgKGV2ZW50LT5hdHRyLmluaGVyaXRfc3RhdCkKKwkJY3R4LT5ucl9zdGF0Kys7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBldmVudCBmcm9tIHRoZSBsaXN0cyBmb3IgaXRzIGNvbnRleHQuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGN0eC0+bXV0ZXggYW5kIGN0eC0+bG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZAorbGlzdF9kZWxfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnNpYmxpbmcsICp0bXA7CisKKwlpZiAobGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkKKwkJcmV0dXJuOworCWN0eC0+bnJfZXZlbnRzLS07CisJaWYgKGV2ZW50LT5hdHRyLmluaGVyaXRfc3RhdCkKKwkJY3R4LT5ucl9zdGF0LS07CisKKwlsaXN0X2RlbF9pbml0KCZldmVudC0+Z3JvdXBfZW50cnkpOworCWxpc3RfZGVsX3JjdSgmZXZlbnQtPmV2ZW50X2VudHJ5KTsKKworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KQorCQlldmVudC0+Z3JvdXBfbGVhZGVyLT5ucl9zaWJsaW5ncy0tOworCisJLyoKKwkgKiBJZiB0aGlzIHdhcyBhIGdyb3VwIGV2ZW50IHdpdGggc2libGluZyBldmVudHMgdGhlbgorCSAqIHVwZ3JhZGUgdGhlIHNpYmxpbmdzIHRvIHNpbmdsZXRvbiBldmVudHMgYnkgYWRkaW5nIHRoZW0KKwkgKiB0byB0aGUgY29udGV4dCBsaXN0IGRpcmVjdGx5OgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCB0bXAsICZldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCisJCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7CisJCXNpYmxpbmctPmdyb3VwX2xlYWRlciA9IHNpYmxpbmc7CisJfQorfQorCitzdGF0aWMgdm9pZAorZXZlbnRfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47CisKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCWlmIChldmVudC0+cGVuZGluZ19kaXNhYmxlKSB7CisJCWV2ZW50LT5wZW5kaW5nX2Rpc2FibGUgPSAwOworCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKKwl9CisJZXZlbnQtPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOworCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOworCWV2ZW50LT5vbmNwdSA9IC0xOworCisJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCWNwdWN0eC0+YWN0aXZlX29uY3B1LS07CisJY3R4LT5ucl9hY3RpdmUtLTsKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVzaXZlIHx8ICFjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKKwkJY3B1Y3R4LT5leGNsdXNpdmUgPSAwOworfQorCitzdGF0aWMgdm9pZAorZ3JvdXBfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9ldmVudCwKKwkJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWlmIChncm91cF9ldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCisJCXJldHVybjsKKworCWV2ZW50X3NjaGVkX291dChncm91cF9ldmVudCwgY3B1Y3R4LCBjdHgpOworCisJLyoKKwkgKiBTY2hlZHVsZSBvdXQgc2libGluZ3MgKGlmIGFueSk6CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmdyb3VwX2V2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KQorCQlldmVudF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworCWlmIChncm91cF9ldmVudC0+YXR0ci5leGNsdXNpdmUpCisJCWNwdWN0eC0+ZXhjbHVzaXZlID0gMDsKK30KKworLyoKKyAqIENyb3NzIENQVSBjYWxsIHRvIHJlbW92ZSBhIHBlcmZvcm1hbmNlIGV2ZW50CisgKgorICogV2UgZGlzYWJsZSB0aGUgZXZlbnQgb24gdGhlIGhhcmR3YXJlIGxldmVsIGZpcnN0LiBBZnRlciB0aGF0IHdlCisgKiByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCBsaXN0LgorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dCh2b2lkICppbmZvKQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSB0YXNrIGNvbnRleHQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcworCSAqIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dCBvZiB0aGlzIGNwdS4gSWYgbm90IGl0IGhhcyBiZWVuCisJICogc2NoZWR1bGVkIG91dCBiZWZvcmUgdGhlIHNtcCBjYWxsIGFycml2ZWQuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCS8qCisJICogUHJvdGVjdCB0aGUgbGlzdCBvcGVyYXRpb24gYWdhaW5zdCBOTUkgYnkgZGlzYWJsaW5nIHRoZQorCSAqIGV2ZW50cyBvbiBhIGdsb2JhbCBsZXZlbC4KKwkgKi8KKwlwZXJmX2Rpc2FibGUoKTsKKworCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCisJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7CisKKwlpZiAoIWN0eC0+dGFzaykgeworCQkvKgorCQkgKiBBbGxvdyBtb3JlIHBlciB0YXNrIGV2ZW50cyB3aXRoIHJlc3BlY3QgdG8gdGhlCisJCSAqIHJlc2VydmF0aW9uOgorCQkgKi8KKwkJY3B1Y3R4LT5tYXhfcGVydGFzayA9CisJCQltaW4ocGVyZl9tYXhfZXZlbnRzIC0gY3R4LT5ucl9ldmVudHMsCisJCQkgICAgcGVyZl9tYXhfZXZlbnRzIC0gcGVyZl9yZXNlcnZlZF9wZXJjcHUpOworCX0KKworCXBlcmZfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKKworLyoKKyAqIFJlbW92ZSB0aGUgZXZlbnQgZnJvbSBhIHRhc2sncyAob3IgYSBDUFUncykgbGlzdCBvZiBldmVudHMuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGhlbGQuCisgKgorICogQ1BVIGV2ZW50cyBhcmUgcmVtb3ZlZCB3aXRoIGEgc21wIGNhbGwuIEZvciB0YXNrIGV2ZW50cyB3ZSBvbmx5CisgKiBjYWxsIHdoZW4gdGhlIHRhc2sgaXMgb24gYSBDUFUuCisgKgorICogSWYgZXZlbnQtPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKKyAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgZXZlbnQtPmN0eC0+dGFzayBjb3VsZCBwb3NzaWJseSBwb2ludCB0bworICogcmVtYWlucyB2YWxpZC4gIFRoaXMgaXMgT0sgd2hlbiBjYWxsZWQgZnJvbSBwZXJmX3JlbGVhc2Ugc2luY2UKKyAqIHRoYXQgb25seSBjYWxscyB1cyBvbiB0aGUgdG9wLWxldmVsIGNvbnRleHQsIHdoaWNoIGNhbid0IGJlIGEgY2xvbmUuCisgKiBXaGVuIGNhbGxlZCBmcm9tIHBlcmZfZXZlbnRfZXhpdF90YXNrLCBpdCdzIE9LIGJlY2F1c2UgdGhlCisgKiBjb250ZXh0IGhhcyBiZWVuIGRldGFjaGVkIGZyb20gaXRzIHRhc2suCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7CisKKwlpZiAoIXRhc2spIHsKKwkJLyoKKwkJICogUGVyIGNwdSBldmVudHMgYXJlIHJlbW92ZWQgdmlhIGFuIHNtcCBjYWxsIGFuZAorCQkgKiB0aGUgcmVtb3ZhbCBpcyBhbHdheXMgc3VjZXNzZnVsLgorCQkgKi8KKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGV2ZW50LT5jcHUsCisJCQkJCSBfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dCwKKwkJCQkJIGV2ZW50LCAxKTsKKwkJcmV0dXJuOworCX0KKworcmV0cnk6CisJdGFza19vbmNwdV9mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0LAorCQkJCSBldmVudCk7CisKKwlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCS8qCisJICogSWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHNtcCBjYWxsLgorCSAqLworCWlmIChjdHgtPm5yX2FjdGl2ZSAmJiAhbGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkgeworCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CisJCWdvdG8gcmV0cnk7CisJfQorCisJLyoKKwkgKiBUaGUgbG9jayBwcmV2ZW50cyB0aGF0IHRoaXMgY29udGV4dCBpcyBzY2hlZHVsZWQgaW4gc28gd2UKKwkgKiBjYW4gcmVtb3ZlIHRoZSBldmVudCBzYWZlbHksIGlmIHRoZSBjYWxsIGFib3ZlIGRpZCBub3QKKwkgKiBzdWNjZWVkLgorCSAqLworCWlmICghbGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkgeworCQlsaXN0X2RlbF9ldmVudChldmVudCwgY3R4KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCisvKgorICogVXBkYXRlIHRoZSByZWNvcmQgb2YgdGhlIGN1cnJlbnQgdGltZSBpbiBhIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9jb250ZXh0X3RpbWUoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7CisKKwljdHgtPnRpbWUgKz0gbm93IC0gY3R4LT50aW1lc3RhbXA7CisJY3R4LT50aW1lc3RhbXAgPSBub3c7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHRvdGFsX3RpbWVfZW5hYmxlZCBhbmQgdG90YWxfdGltZV9ydW5uaW5nIGZpZWxkcyBmb3IgYSBldmVudC4KKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX2V2ZW50X3RpbWVzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OworCXU2NCBydW5fZW5kOworCisJaWYgKGV2ZW50LT5zdGF0ZSA8IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUgfHwKKwkgICAgZXZlbnQtPmdyb3VwX2xlYWRlci0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQlyZXR1cm47CisKKwlldmVudC0+dG90YWxfdGltZV9lbmFibGVkID0gY3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9lbmFibGVkOworCisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQlydW5fZW5kID0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOworCWVsc2UKKwkJcnVuX2VuZCA9IGN0eC0+dGltZTsKKworCWV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcgPSBydW5fZW5kIC0gZXZlbnQtPnRzdGFtcF9ydW5uaW5nOworfQorCisvKgorICogVXBkYXRlIHRvdGFsX3RpbWVfZW5hYmxlZCBhbmQgdG90YWxfdGltZV9ydW5uaW5nIGZvciBhbGwgZXZlbnRzIGluIGEgZ3JvdXAuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF90aW1lcyhzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCXVwZGF0ZV9ldmVudF90aW1lcyhsZWFkZXIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpCisJCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7Cit9CisKKy8qCisgKiBDcm9zcyBDUFUgY2FsbCB0byBkaXNhYmxlIGEgcGVyZm9ybWFuY2UgZXZlbnQKKyAqLworc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X2Rpc2FibGUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgcGVyLXRhc2sgZXZlbnQsIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzCisJICogZXZlbnQncyB0YXNrIGlzIHRoZSBjdXJyZW50IHRhc2sgb24gdGhpcyBjcHUuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCisJLyoKKwkgKiBJZiB0aGUgZXZlbnQgaXMgb24sIHR1cm4gaXQgb2ZmLgorCSAqIElmIGl0IGlzIGluIGVycm9yIHN0YXRlLCBsZWF2ZSBpdCBpbiBlcnJvciBzdGF0ZS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOworCQl1cGRhdGVfZ3JvdXBfdGltZXMoZXZlbnQpOworCQlpZiAoZXZlbnQgPT0gZXZlbnQtPmdyb3VwX2xlYWRlcikKKwkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCQllbHNlCisJCQlldmVudF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKwkJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CisJfQorCisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIGEgZXZlbnQuCisgKgorICogSWYgZXZlbnQtPmN0eCBpcyBhIGNsb25lZCBjb250ZXh0LCBjYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRoYXQKKyAqIGV2ZXJ5IHRhc2sgc3RydWN0IHRoYXQgZXZlbnQtPmN0eC0+dGFzayBjb3VsZCBwb3NzaWJseSBwb2ludCB0bworICogcmVtYWlucyB2YWxpZC4gIFRoaXMgY29uZGl0aW9uIGlzIHNhdGlzaWZlZCB3aGVuIGNhbGxlZCB0aHJvdWdoCisgKiBwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkIG9yIHBlcmZfZXZlbnRfZm9yX2VhY2ggYmVjYXVzZSB0aGV5CisgKiBob2xkIHRoZSB0b3AtbGV2ZWwgZXZlbnQncyBjaGlsZF9tdXRleCwgc28gYW55IGRlc2NlbmRhbnQgdGhhdAorICogZ29lcyB0byBleGl0IHdpbGwgYmxvY2sgaW4gc3luY19jaGlsZF9ldmVudC4KKyAqIFdoZW4gY2FsbGVkIGZyb20gcGVyZl9wZW5kaW5nX2V2ZW50IGl0J3MgT0sgYmVjYXVzZSBldmVudC0+Y3R4CisgKiBpcyB0aGUgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgQ1BVIGFuZCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLAorICogaGVuY2Ugd2UgY2FuJ3QgZ2V0IGludG8gcGVyZl9ldmVudF90YXNrX3NjaGVkX291dCBmb3IgdGhpcyBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3R4LT50YXNrOworCisJaWYgKCF0YXNrKSB7CisJCS8qCisJCSAqIERpc2FibGUgdGhlIGV2ZW50IG9uIHRoZSBjcHUgdGhhdCBpdCdzIG9uCisJCSAqLworCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoZXZlbnQtPmNwdSwgX19wZXJmX2V2ZW50X2Rpc2FibGUsCisJCQkJCSBldmVudCwgMSk7CisJCXJldHVybjsKKwl9CisKKyByZXRyeToKKwl0YXNrX29uY3B1X2Z1bmN0aW9uX2NhbGwodGFzaywgX19wZXJmX2V2ZW50X2Rpc2FibGUsIGV2ZW50KTsKKworCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CisJLyoKKwkgKiBJZiB0aGUgZXZlbnQgaXMgc3RpbGwgYWN0aXZlLCB3ZSBuZWVkIHRvIHJldHJ5IHRoZSBjcm9zcy1jYWxsLgorCSAqLworCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworCQlnb3RvIHJldHJ5OworCX0KKworCS8qCisJICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCisJICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJdXBkYXRlX2dyb3VwX3RpbWVzKGV2ZW50KTsKKwkJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworfQorCitzdGF0aWMgaW50CitldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCSBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkgaW50IGNwdSkKK3sKKwlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQlyZXR1cm4gMDsKKworCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOworCWV2ZW50LT5vbmNwdSA9IGNwdTsJLyogVE9ETzogcHV0ICdjcHUnIGludG8gY3B1Y3R4LT5jcHUgKi8KKwkvKgorCSAqIFRoZSBuZXcgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0dXJuIGl0IG9uIGluIHRoZSBoYXJkd2FyZToKKwkgKi8KKwlzbXBfd21iKCk7CisKKwlpZiAoZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KSkgeworCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCQlldmVudC0+b25jcHUgPSAtMTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKKworCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQljcHVjdHgtPmFjdGl2ZV9vbmNwdSsrOworCWN0eC0+bnJfYWN0aXZlKys7CisKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVzaXZlKQorCQljcHVjdHgtPmV4Y2x1c2l2ZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2V2ZW50LAorCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJICAgICAgIGludCBjcHUpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqcGFydGlhbF9ncm91cDsKKwlpbnQgcmV0OworCisJaWYgKGdyb3VwX2V2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBod19wZXJmX2dyb3VwX3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisKKwlpZiAoZXZlbnRfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCS8qCisJICogU2NoZWR1bGUgaW4gc2libGluZ3MgYXMgb25lIGdyb3VwIChpZiBhbnkpOgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZncm91cF9ldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKSB7CisJCQlwYXJ0aWFsX2dyb3VwID0gZXZlbnQ7CisJCQlnb3RvIGdyb3VwX2Vycm9yOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2dyb3VwX2Vycm9yOgorCS8qCisJICogR3JvdXBzIGNhbiBiZSBzY2hlZHVsZWQgaW4gYXMgb25lIHVuaXQgb25seSwgc28gdW5kbyBhbnkKKwkgKiBwYXJ0aWFsIGdyb3VwIGJlZm9yZSByZXR1cm5pbmc6CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmdyb3VwX2V2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChldmVudCA9PSBwYXJ0aWFsX2dyb3VwKQorCQkJYnJlYWs7CisJCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCX0KKwlldmVudF9zY2hlZF9vdXQoZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworCXJldHVybiAtRUFHQUlOOworfQorCisvKgorICogUmV0dXJuIDEgZm9yIGEgZ3JvdXAgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBldmVudHMsCisgKiAwIGlmIHRoZSBncm91cCBjb250YWlucyBhbnkgaGFyZHdhcmUgZXZlbnRzLgorICovCitzdGF0aWMgaW50IGlzX3NvZnR3YXJlX29ubHlfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlcikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGxlYWRlcikpCisJCXJldHVybiAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKKwkJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogV29yayBvdXQgd2hldGhlciB3ZSBjYW4gcHV0IHRoaXMgZXZlbnQgZ3JvdXAgb24gdGhlIENQVSBub3cuCisgKi8KK3N0YXRpYyBpbnQgZ3JvdXBfY2FuX2dvX29uKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJCQkgICBpbnQgY2FuX2FkZF9odykKK3sKKwkvKgorCSAqIEdyb3VwcyBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHNvZnR3YXJlIGV2ZW50cyBjYW4gYWx3YXlzIGdvIG9uLgorCSAqLworCWlmIChpc19zb2Z0d2FyZV9vbmx5X2dyb3VwKGV2ZW50KSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBJZiBhbiBleGNsdXNpdmUgZ3JvdXAgaXMgYWxyZWFkeSBvbiwgbm8gb3RoZXIgaGFyZHdhcmUKKwkgKiBldmVudHMgY2FuIGdvIG9uLgorCSAqLworCWlmIChjcHVjdHgtPmV4Y2x1c2l2ZSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBJZiB0aGlzIGdyb3VwIGlzIGV4Y2x1c2l2ZSBhbmQgdGhlcmUgYXJlIGFscmVhZHkKKwkgKiBldmVudHMgb24gdGhlIENQVSwgaXQgY2FuJ3QgZ28gb24uCisJICovCisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1c2l2ZSAmJiBjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBPdGhlcndpc2UsIHRyeSB0byBhZGQgaXQgaWYgYWxsIHByZXZpb3VzIGdyb3VwcyB3ZXJlIGFibGUKKwkgKiB0byBnbyBvbi4KKwkgKi8KKwlyZXR1cm4gY2FuX2FkZF9odzsKK30KKworc3RhdGljIHZvaWQgYWRkX2V2ZW50X3RvX2N0eChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCWxpc3RfYWRkX2V2ZW50KGV2ZW50LCBjdHgpOworCWV2ZW50LT50c3RhbXBfZW5hYmxlZCA9IGN0eC0+dGltZTsKKwlldmVudC0+dHN0YW1wX3J1bm5pbmcgPSBjdHgtPnRpbWU7CisJZXZlbnQtPnRzdGFtcF9zdG9wcGVkID0gY3R4LT50aW1lOworfQorCisvKgorICogQ3Jvc3MgQ1BVIGNhbGwgdG8gaW5zdGFsbCBhbmQgZW5hYmxlIGEgcGVyZm9ybWFuY2UgZXZlbnQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGN0eC0+bXV0ZXggaGVsZAorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfaW5zdGFsbF9pbl9jb250ZXh0KHZvaWQgKmluZm8pCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGluZm87CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBlcnI7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSB0YXNrIGNvbnRleHQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcworCSAqIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dCBvZiB0aGlzIGNwdS4gSWYgbm90IGl0IGhhcyBiZWVuCisJICogc2NoZWR1bGVkIG91dCBiZWZvcmUgdGhlIHNtcCBjYWxsIGFycml2ZWQuCisJICogT3IgcG9zc2libHkgdGhpcyBpcyB0aGUgcmlnaHQgY29udGV4dCBidXQgaXQgaXNuJ3QKKwkgKiBvbiB0aGlzIGNwdSBiZWNhdXNlIGl0IGhhZCBubyBldmVudHMuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkgeworCQlpZiAoY3B1Y3R4LT50YXNrX2N0eCB8fCBjdHgtPnRhc2sgIT0gY3VycmVudCkKKwkJCXJldHVybjsKKwkJY3B1Y3R4LT50YXNrX2N0eCA9IGN0eDsKKwl9CisKKwlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJY3R4LT5pc19hY3RpdmUgPSAxOworCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKKworCS8qCisJICogUHJvdGVjdCB0aGUgbGlzdCBvcGVyYXRpb24gYWdhaW5zdCBOTUkgYnkgZGlzYWJsaW5nIHRoZQorCSAqIGV2ZW50cyBvbiBhIGdsb2JhbCBsZXZlbC4gTk9QIGZvciBub24gTk1JIGJhc2VkIGV2ZW50cy4KKwkgKi8KKwlwZXJmX2Rpc2FibGUoKTsKKworCWFkZF9ldmVudF90b19jdHgoZXZlbnQsIGN0eCk7CisKKwkvKgorCSAqIERvbid0IHB1dCB0aGUgZXZlbnQgb24gaWYgaXQgaXMgZGlzYWJsZWQgb3IgaWYKKwkgKiBpdCBpcyBpbiBhIGdyb3VwIGFuZCB0aGUgZ3JvdXAgaXNuJ3Qgb24uCisJICovCisJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFIHx8CisJICAgIChsZWFkZXIgIT0gZXZlbnQgJiYgbGVhZGVyLT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkpCisJCWdvdG8gdW5sb2NrOworCisJLyoKKwkgKiBBbiBleGNsdXNpdmUgZXZlbnQgY2FuJ3QgZ28gb24gaWYgdGhlcmUgYXJlIGFscmVhZHkgYWN0aXZlCisJICogaGFyZHdhcmUgZXZlbnRzLCBhbmQgbm8gaGFyZHdhcmUgZXZlbnQgY2FuIGdvIG9uIGlmIHRoZXJlCisJICogaXMgYWxyZWFkeSBhbiBleGNsdXNpdmUgZXZlbnQgb24uCisJICovCisJaWYgKCFncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCisJCWVyciA9IC1FRVhJU1Q7CisJZWxzZQorCQllcnIgPSBldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7CisKKwlpZiAoZXJyKSB7CisJCS8qCisJCSAqIFRoaXMgZXZlbnQgY291bGRuJ3QgZ28gb24uICBJZiBpdCBpcyBpbiBhIGdyb3VwCisJCSAqIHRoZW4gd2UgaGF2ZSB0byBwdWxsIHRoZSB3aG9sZSBncm91cCBvZmYuCisJCSAqIElmIHRoZSBldmVudCBncm91cCBpcyBwaW5uZWQgdGhlbiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCisJCSAqLworCQlpZiAobGVhZGVyICE9IGV2ZW50KQorCQkJZ3JvdXBfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4LCBjdHgpOworCQlpZiAobGVhZGVyLT5hdHRyLnBpbm5lZCkgeworCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGxlYWRlcik7CisJCQlsZWFkZXItPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9FUlJPUjsKKwkJfQorCX0KKworCWlmICghZXJyICYmICFjdHgtPnRhc2sgJiYgY3B1Y3R4LT5tYXhfcGVydGFzaykKKwkJY3B1Y3R4LT5tYXhfcGVydGFzay0tOworCisgdW5sb2NrOgorCXBlcmZfZW5hYmxlKCk7CisKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKK30KKworLyoKKyAqIEF0dGFjaCBhIHBlcmZvcm1hbmNlIGV2ZW50IHRvIGEgY29udGV4dAorICoKKyAqIEZpcnN0IHdlIGFkZCB0aGUgZXZlbnQgdG8gdGhlIGxpc3Qgd2l0aCB0aGUgaGFyZHdhcmUgZW5hYmxlIGJpdAorICogaW4gZXZlbnQtPmh3X2NvbmZpZyBjbGVhcmVkLgorICoKKyAqIElmIHRoZSBldmVudCBpcyBhdHRhY2hlZCB0byBhIHRhc2sgd2hpY2ggaXMgb24gYSBDUFUgd2UgdXNlIGEgc21wCisgKiBjYWxsIHRvIGVuYWJsZSBpdCBpbiB0aGUgdGFzayBjb250ZXh0LiBUaGUgdGFzayBtaWdodCBoYXZlIGJlZW4KKyAqIHNjaGVkdWxlZCBhd2F5LCBidXQgd2UgY2hlY2sgdGhpcyBpbiB0aGUgc21wIGNhbGwgYWdhaW4uCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkCitwZXJmX2luc3RhbGxfaW5fY29udGV4dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQlpbnQgY3B1KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN0eC0+dGFzazsKKworCWlmICghdGFzaykgeworCQkvKgorCQkgKiBQZXIgY3B1IGV2ZW50cyBhcmUgaW5zdGFsbGVkIHZpYSBhbiBzbXAgY2FsbCBhbmQKKwkJICogdGhlIGluc3RhbGwgaXMgYWx3YXlzIHN1Y2Vzc2Z1bC4KKwkJICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQsCisJCQkJCSBldmVudCwgMSk7CisJCXJldHVybjsKKwl9CisKK3JldHJ5OgorCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfaW5zdGFsbF9pbl9jb250ZXh0LAorCQkJCSBldmVudCk7CisKKwlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCS8qCisJICogd2UgbmVlZCB0byByZXRyeSB0aGUgc21wIGNhbGwuCisJICovCisJaWYgKGN0eC0+aXNfYWN0aXZlICYmIGxpc3RfZW1wdHkoJmV2ZW50LT5ncm91cF9lbnRyeSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworCQlnb3RvIHJldHJ5OworCX0KKworCS8qCisJICogVGhlIGxvY2sgcHJldmVudHMgdGhhdCB0aGlzIGNvbnRleHQgaXMgc2NoZWR1bGVkIGluIHNvIHdlCisJICogY2FuIGFkZCB0aGUgZXZlbnQgc2FmZWx5LCBpZiBpdCB0aGUgY2FsbCBhYm92ZSBkaWQgbm90CisJICogc3VjY2VlZC4KKwkgKi8KKwlpZiAobGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkKKwkJYWRkX2V2ZW50X3RvX2N0eChldmVudCwgY3R4KTsKKwlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7Cit9CisKKy8qCisgKiBQdXQgYSBldmVudCBpbnRvIGluYWN0aXZlIHN0YXRlIGFuZCB1cGRhdGUgdGltZSBmaWVsZHMuCisgKiBFbmFibGluZyB0aGUgbGVhZGVyIG9mIGEgZ3JvdXAgZWZmZWN0aXZlbHkgZW5hYmxlcyBhbGwKKyAqIHRoZSBncm91cCBtZW1iZXJzIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkgZGlzYWJsZWQsIHNvIHdlCisgKiBoYXZlIHRvIHVwZGF0ZSB0aGVpciAtPnRzdGFtcF9lbmFibGVkIGFsc28uCisgKiBOb3RlOiB0aGlzIHdvcmtzIGZvciBncm91cCBtZW1iZXJzIGFzIHdlbGwgYXMgZ3JvdXAgbGVhZGVycworICogc2luY2UgdGhlIG5vbi1sZWFkZXIgbWVtYmVycycgc2libGluZ19saXN0cyB3aWxsIGJlIGVtcHR5LgorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzdWI7CisKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCWV2ZW50LT50c3RhbXBfZW5hYmxlZCA9IGN0eC0+dGltZSAtIGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKKwkJaWYgKHN1Yi0+c3RhdGUgPj0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJCXN1Yi0+dHN0YW1wX2VuYWJsZWQgPQorCQkJCWN0eC0+dGltZSAtIHN1Yi0+dG90YWxfdGltZV9lbmFibGVkOworfQorCisvKgorICogQ3Jvc3MgQ1BVIGNhbGwgdG8gZW5hYmxlIGEgcGVyZm9ybWFuY2UgZXZlbnQKKyAqLworc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X2VuYWJsZSh2b2lkICppbmZvKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGluZm87CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CisJaW50IGVycjsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHBlci10YXNrIGV2ZW50LCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhpcworCSAqIGV2ZW50J3MgdGFzayBpcyB0aGUgY3VycmVudCB0YXNrIG9uIHRoaXMgY3B1LgorCSAqLworCWlmIChjdHgtPnRhc2sgJiYgY3B1Y3R4LT50YXNrX2N0eCAhPSBjdHgpIHsKKwkJaWYgKGNwdWN0eC0+dGFza19jdHggfHwgY3R4LT50YXNrICE9IGN1cnJlbnQpCisJCQlyZXR1cm47CisJCWNwdWN0eC0+dGFza19jdHggPSBjdHg7CisJfQorCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCWN0eC0+aXNfYWN0aXZlID0gMTsKKwl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CisKKwlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCisJCWdvdG8gdW5sb2NrOworCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7CisKKwkvKgorCSAqIElmIHRoZSBldmVudCBpcyBpbiBhIGdyb3VwIGFuZCBpc24ndCB0aGUgZ3JvdXAgbGVhZGVyLAorCSAqIHRoZW4gZG9uJ3QgcHV0IGl0IG9uIHVubGVzcyB0aGUgZ3JvdXAgaXMgb24uCisJICovCisJaWYgKGxlYWRlciAhPSBldmVudCAmJiBsZWFkZXItPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlnb3RvIHVubG9jazsKKworCWlmICghZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKSB7CisJCWVyciA9IC1FRVhJU1Q7CisJfSBlbHNlIHsKKwkJcGVyZl9kaXNhYmxlKCk7CisJCWlmIChldmVudCA9PSBsZWFkZXIpCisJCQllcnIgPSBncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsCisJCQkJCSAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJZWxzZQorCQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LAorCQkJCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJcGVyZl9lbmFibGUoKTsKKwl9CisKKwlpZiAoZXJyKSB7CisJCS8qCisJCSAqIElmIHRoaXMgZXZlbnQgY2FuJ3QgZ28gb24gYW5kIGl0J3MgcGFydCBvZiBhCisJCSAqIGdyb3VwLCB0aGVuIHRoZSB3aG9sZSBncm91cCBoYXMgdG8gY29tZSBvZmYuCisJCSAqLworCQlpZiAobGVhZGVyICE9IGV2ZW50KQorCQkJZ3JvdXBfc2NoZWRfb3V0KGxlYWRlciwgY3B1Y3R4LCBjdHgpOworCQlpZiAobGVhZGVyLT5hdHRyLnBpbm5lZCkgeworCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGxlYWRlcik7CisJCQlsZWFkZXItPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9FUlJPUjsKKwkJfQorCX0KKworIHVubG9jazoKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKK30KKworLyoKKyAqIEVuYWJsZSBhIGV2ZW50LgorICoKKyAqIElmIGV2ZW50LT5jdHggaXMgYSBjbG9uZWQgY29udGV4dCwgY2FsbGVycyBtdXN0IG1ha2Ugc3VyZSB0aGF0CisgKiBldmVyeSB0YXNrIHN0cnVjdCB0aGF0IGV2ZW50LT5jdHgtPnRhc2sgY291bGQgcG9zc2libHkgcG9pbnQgdG8KKyAqIHJlbWFpbnMgdmFsaWQuICBUaGlzIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQgd2hlbiBjYWxsZWQgdGhyb3VnaAorICogcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZCBvciBwZXJmX2V2ZW50X2Zvcl9lYWNoIGFzIGRlc2NyaWJlZAorICogZm9yIHBlcmZfZXZlbnRfZGlzYWJsZS4KKyAqLworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3R4LT50YXNrOworCisJaWYgKCF0YXNrKSB7CisJCS8qCisJCSAqIEVuYWJsZSB0aGUgZXZlbnQgb24gdGhlIGNwdSB0aGF0IGl0J3Mgb24KKwkJICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShldmVudC0+Y3B1LCBfX3BlcmZfZXZlbnRfZW5hYmxlLAorCQkJCQkgZXZlbnQsIDEpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJZiB0aGUgZXZlbnQgaXMgaW4gZXJyb3Igc3RhdGUsIGNsZWFyIHRoYXQgZmlyc3QuCisJICogVGhhdCB3YXksIGlmIHdlIHNlZSB0aGUgZXZlbnQgaW4gZXJyb3Igc3RhdGUgYmVsb3csIHdlCisJICoga25vdyB0aGF0IGl0IGhhcyBnb25lIGJhY2sgaW50byBlcnJvciBzdGF0ZSwgYXMgZGlzdGluY3QKKwkgKiBmcm9tIHRoZSB0YXNrIGhhdmluZyBiZWVuIHNjaGVkdWxlZCBhd2F5IGJlZm9yZSB0aGUKKwkgKiBjcm9zcy1jYWxsIGFycml2ZWQuCisJICovCisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SKQorCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKKworIHJldHJ5OgorCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwl0YXNrX29uY3B1X2Z1bmN0aW9uX2NhbGwodGFzaywgX19wZXJmX2V2ZW50X2VuYWJsZSwgZXZlbnQpOworCisJc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKKworCS8qCisJICogSWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlIGFuZCB0aGUgZXZlbnQgaXMgc3RpbGwgb2ZmLAorCSAqIHdlIG5lZWQgdG8gcmV0cnkgdGhlIGNyb3NzLWNhbGwuCisJICovCisJaWYgKGN0eC0+aXNfYWN0aXZlICYmIGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJZ290byByZXRyeTsKKworCS8qCisJICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCisJICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQlfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKGV2ZW50LCBjdHgpOworCisgb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3JlZnJlc2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgcmVmcmVzaCkKK3sKKwkvKgorCSAqIG5vdCBzdXBwb3J0ZWQgb24gaW5oZXJpdGVkIGV2ZW50cworCSAqLworCWlmIChldmVudC0+YXR0ci5pbmhlcml0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF0b21pY19hZGQocmVmcmVzaCwgJmV2ZW50LT5ldmVudF9saW1pdCk7CisJcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19wZXJmX2V2ZW50X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwljdHgtPmlzX2FjdGl2ZSA9IDA7CisJaWYgKGxpa2VseSghY3R4LT5ucl9ldmVudHMpKQorCQlnb3RvIG91dDsKKwl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CisKKwlwZXJmX2Rpc2FibGUoKTsKKwlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQorCQkJCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCQkJZWxzZQorCQkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCQl9CisJfQorCXBlcmZfZW5hYmxlKCk7Cisgb3V0OgorCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworfQorCisvKgorICogVGVzdCB3aGV0aGVyIHR3byBjb250ZXh0cyBhcmUgZXF1aXZhbGVudCwgaS5lLiB3aGV0aGVyIHRoZXkKKyAqIGhhdmUgYm90aCBiZWVuIGNsb25lZCBmcm9tIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIHNhbWUgY29udGV4dAorICogYW5kIHRoZXkgYm90aCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbmFibGVkIGV2ZW50cy4KKyAqIElmIHRoZSBudW1iZXIgb2YgZW5hYmxlZCBldmVudHMgaXMgdGhlIHNhbWUsIHRoZW4gdGhlIHNldAorICogb2YgZW5hYmxlZCBldmVudHMgc2hvdWxkIGJlIHRoZSBzYW1lLCBiZWNhdXNlIHRoZXNlIGFyZSBib3RoCisgKiBpbmhlcml0ZWQgY29udGV4dHMsIHRoZXJlZm9yZSB3ZSBjYW4ndCBhY2Nlc3MgaW5kaXZpZHVhbCBldmVudHMKKyAqIGluIHRoZW0gZGlyZWN0bHkgd2l0aCBhbiBmZDsgd2UgY2FuIG9ubHkgZW5hYmxlL2Rpc2FibGUgYWxsCisgKiBldmVudHMgdmlhIHByY3RsLCBvciBlbmFibGUvZGlzYWJsZSBhbGwgZXZlbnRzIGluIGEgZmFtaWx5CisgKiB2aWEgaW9jdGwsIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3Qgb24gYm90aCBjb250ZXh0cy4KKyAqLworc3RhdGljIGludCBjb250ZXh0X2VxdWl2KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDEsCisJCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4MikKK3sKKwlyZXR1cm4gY3R4MS0+cGFyZW50X2N0eCAmJiBjdHgxLT5wYXJlbnRfY3R4ID09IGN0eDItPnBhcmVudF9jdHgKKwkJJiYgY3R4MS0+cGFyZW50X2dlbiA9PSBjdHgyLT5wYXJlbnRfZ2VuCisJCSYmICFjdHgxLT5waW5fY291bnQgJiYgIWN0eDItPnBpbl9jb3VudDsKK30KKworc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X3JlYWQodm9pZCAqZXZlbnQpOworCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfc3luY19zdGF0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpuZXh0X2V2ZW50KQoreworCXU2NCB2YWx1ZTsKKworCWlmICghZXZlbnQtPmF0dHIuaW5oZXJpdF9zdGF0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgZXZlbnQgdmFsdWUsIHdlIGNhbm5vdCB1c2UgcGVyZl9ldmVudF9yZWFkKCkKKwkgKiBiZWNhdXNlIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBjb250ZXh0IHN3aXRjaCBhbmQgaGF2ZSBJUlFzCisJICogZGlzYWJsZWQsIHdoaWNoIHVwc2V0cyBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKSwgaG93ZXZlcgorCSAqIHdlIGtub3cgdGhlIGV2ZW50IG11c3QgYmUgb24gdGhlIGN1cnJlbnQgQ1BVLCB0aGVyZWZvcmUgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHVzZSBpdC4KKwkgKi8KKwlzd2l0Y2ggKGV2ZW50LT5zdGF0ZSkgeworCWNhc2UgUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU6CisJCV9fcGVyZl9ldmVudF9yZWFkKGV2ZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkU6CisJCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBJbiBvcmRlciB0byBrZWVwIHBlci10YXNrIHN0YXRzIHJlbGlhYmxlIHdlIG5lZWQgdG8gZmxpcCB0aGUgZXZlbnQKKwkgKiB2YWx1ZXMgd2hlbiB3ZSBmbGlwIHRoZSBjb250ZXh0cy4KKwkgKi8KKwl2YWx1ZSA9IGF0b21pYzY0X3JlYWQoJm5leHRfZXZlbnQtPmNvdW50KTsKKwl2YWx1ZSA9IGF0b21pYzY0X3hjaGcoJmV2ZW50LT5jb3VudCwgdmFsdWUpOworCWF0b21pYzY0X3NldCgmbmV4dF9ldmVudC0+Y291bnQsIHZhbHVlKTsKKworCXN3YXAoZXZlbnQtPnRvdGFsX3RpbWVfZW5hYmxlZCwgbmV4dF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkKTsKKwlzd2FwKGV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsIG5leHRfZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyk7CisKKwkvKgorCSAqIFNpbmNlIHdlIHN3aXp6bGVkIHRoZSB2YWx1ZXMsIHVwZGF0ZSB0aGUgdXNlciB2aXNpYmxlIGRhdGEgdG9vLgorCSAqLworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShuZXh0X2V2ZW50KTsKK30KKworI2RlZmluZSBsaXN0X25leHRfZW50cnkocG9zLCBtZW1iZXIpIFwKKwlsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N5bmNfc3RhdChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqbmV4dF9jdHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqbmV4dF9ldmVudDsKKworCWlmICghY3R4LT5ucl9zdGF0KQorCQlyZXR1cm47CisKKwlldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoJmN0eC0+ZXZlbnRfbGlzdCwKKwkJCQkgICBzdHJ1Y3QgcGVyZl9ldmVudCwgZXZlbnRfZW50cnkpOworCisJbmV4dF9ldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoJm5leHRfY3R4LT5ldmVudF9saXN0LAorCQkJCQlzdHJ1Y3QgcGVyZl9ldmVudCwgZXZlbnRfZW50cnkpOworCisJd2hpbGUgKCZldmVudC0+ZXZlbnRfZW50cnkgIT0gJmN0eC0+ZXZlbnRfbGlzdCAmJgorCSAgICAgICAmbmV4dF9ldmVudC0+ZXZlbnRfZW50cnkgIT0gJm5leHRfY3R4LT5ldmVudF9saXN0KSB7CisKKwkJX19wZXJmX2V2ZW50X3N5bmNfc3RhdChldmVudCwgbmV4dF9ldmVudCk7CisKKwkJZXZlbnQgPSBsaXN0X25leHRfZW50cnkoZXZlbnQsIGV2ZW50X2VudHJ5KTsKKwkJbmV4dF9ldmVudCA9IGxpc3RfbmV4dF9lbnRyeShuZXh0X2V2ZW50LCBldmVudF9lbnRyeSk7CisJfQorfQorCisvKgorICogQ2FsbGVkIGZyb20gc2NoZWR1bGVyIHRvIHJlbW92ZSB0aGUgZXZlbnRzIG9mIHRoZSBjdXJyZW50IHRhc2ssCisgKiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICogV2Ugc3RvcCBlYWNoIGV2ZW50IGFuZCB1cGRhdGUgdGhlIGV2ZW50IHZhbHVlIGluIGV2ZW50LT5jb3VudC4KKyAqCisgKiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdXMgYWdhaW5zdCBOTUksIGJ1dCBkaXNhYmxlKCkKKyAqIHNldHMgdGhlIGRpc2FibGVkIGJpdCBpbiB0aGUgY29udHJvbCBmaWVsZCBvZiBldmVudCBfYmVmb3JlXworICogYWNjZXNzaW5nIHRoZSBldmVudCBjb250cm9sIHJlZ2lzdGVyLiBJZiBhIE5NSSBoaXRzLCB0aGVuIGl0IHdpbGwKKyAqIG5vdCByZXN0YXJ0IHRoZSBldmVudC4KKyAqLwordm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpuZXh0X2N0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnQ7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJaW50IGRvX3N3aXRjaCA9IDE7CisKKwlyZWdzID0gdGFza19wdF9yZWdzKHRhc2spOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTLCAxLCAxLCByZWdzLCAwKTsKKworCWlmIChsaWtlbHkoIWN0eCB8fCAhY3B1Y3R4LT50YXNrX2N0eCkpCisJCXJldHVybjsKKworCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwYXJlbnQgPSByY3VfZGVyZWZlcmVuY2UoY3R4LT5wYXJlbnRfY3R4KTsKKwluZXh0X2N0eCA9IG5leHQtPnBlcmZfZXZlbnRfY3R4cDsKKwlpZiAocGFyZW50ICYmIG5leHRfY3R4ICYmCisJICAgIHJjdV9kZXJlZmVyZW5jZShuZXh0X2N0eC0+cGFyZW50X2N0eCkgPT0gcGFyZW50KSB7CisJCS8qCisJCSAqIExvb2tzIGxpa2UgdGhlIHR3byBjb250ZXh0cyBhcmUgY2xvbmVzLCBzbyB3ZSBtaWdodCBiZQorCQkgKiBhYmxlIHRvIG9wdGltaXplIHRoZSBjb250ZXh0IHN3aXRjaC4gIFdlIGxvY2sgYm90aAorCQkgKiBjb250ZXh0cyBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSBjbG9uZXMgdW5kZXIgdGhlCisJCSAqIGxvY2sgKGluY2x1ZGluZyByZS1jaGVja2luZyB0aGF0IG5laXRoZXIgaGFzIGJlZW4KKwkJICogdW5jbG9uZWQgaW4gdGhlIG1lYW50aW1lKS4gIEl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoCisJCSAqIG9yZGVyIHdlIHRha2UgdGhlIGxvY2tzIGJlY2F1c2Ugbm8gb3RoZXIgY3B1IGNvdWxkCisJCSAqIGJlIHRyeWluZyB0byBsb2NrIGJvdGggb2YgdGhlc2UgdGFza3MuCisJCSAqLworCQlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJCXNwaW5fbG9ja19uZXN0ZWQoJm5leHRfY3R4LT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCWlmIChjb250ZXh0X2VxdWl2KGN0eCwgbmV4dF9jdHgpKSB7CisJCQkvKgorCQkJICogWFhYIGRvIHdlIG5lZWQgYSBtZW1vcnkgYmFycmllciBvZiBzb3J0cworCQkJICogd3J0IHRvIHJjdV9kZXJlZmVyZW5jZSgpIG9mIHBlcmZfZXZlbnRfY3R4cAorCQkJICovCisJCQl0YXNrLT5wZXJmX2V2ZW50X2N0eHAgPSBuZXh0X2N0eDsKKwkJCW5leHQtPnBlcmZfZXZlbnRfY3R4cCA9IGN0eDsKKwkJCWN0eC0+dGFzayA9IG5leHQ7CisJCQluZXh0X2N0eC0+dGFzayA9IHRhc2s7CisJCQlkb19zd2l0Y2ggPSAwOworCisJCQlwZXJmX2V2ZW50X3N5bmNfc3RhdChjdHgsIG5leHRfY3R4KTsKKwkJfQorCQlzcGluX3VubG9jaygmbmV4dF9jdHgtPmxvY2spOworCQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAoZG9fc3dpdGNoKSB7CisJCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOworCQljcHVjdHgtPnRhc2tfY3R4ID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCisJaWYgKCFjcHVjdHgtPnRhc2tfY3R4KQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTl9PTkNFKGN0eCAhPSBjcHVjdHgtPnRhc2tfY3R4KSkKKwkJcmV0dXJuOworCisJX19wZXJmX2V2ZW50X3NjaGVkX291dChjdHgsIGNwdWN0eCk7CisJY3B1Y3R4LT50YXNrX2N0eCA9IE5VTEw7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3B1X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQoreworCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoJmNwdWN0eC0+Y3R4LCBjcHVjdHgpOworfQorCitzdGF0aWMgdm9pZAorX19wZXJmX2V2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsIGludCBjcHUpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCWludCBjYW5fYWRkX2h3ID0gMTsKKworCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwljdHgtPmlzX2FjdGl2ZSA9IDE7CisJaWYgKGxpa2VseSghY3R4LT5ucl9ldmVudHMpKQorCQlnb3RvIG91dDsKKworCWN0eC0+dGltZXN0YW1wID0gcGVyZl9jbG9jaygpOworCisJcGVyZl9kaXNhYmxlKCk7CisKKwkvKgorCSAqIEZpcnN0IGdvIHRocm91Z2ggdGhlIGxpc3QgYW5kIHB1dCBvbiBhbnkgcGlubmVkIGdyb3VwcworCSAqIGluIG9yZGVyIHRvIGdpdmUgdGhlbSB0aGUgYmVzdCBjaGFuY2Ugb2YgZ29pbmcgb24uCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAorCQkgICAgIWV2ZW50LT5hdHRyLnBpbm5lZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IGNwdSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQorCQkJZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCQllbHNlIHsKKwkJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCisJCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAorCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCisJCSAqLworCQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJCXVwZGF0ZV9ncm91cF90aW1lcyhldmVudCk7CisJCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SOworCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJLyoKKwkJICogSWdub3JlIGV2ZW50cyBpbiBPRkYgb3IgRVJST1Igc3RhdGUsIGFuZAorCQkgKiBpZ25vcmUgcGlubmVkIGV2ZW50cyBzaW5jZSB3ZSBkaWQgdGhlbSBhbHJlYWR5LgorCQkgKi8KKwkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAorCQkgICAgZXZlbnQtPmF0dHIucGlubmVkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTGlzdGVuIHRvIHRoZSAnY3B1JyBzY2hlZHVsaW5nIGZpbHRlciBjb25zdHJhaW50CisJCSAqIG9mIGV2ZW50czoKKwkJICovCisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQorCQkJY29udGludWU7CisKKwkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpIHsKKwkJCWlmIChldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCisJCQkJY2FuX2FkZF9odyA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7CisJCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKKwkJCQkJY2FuX2FkZF9odyA9IDA7CisJCQl9CisJCX0KKwl9CisJcGVyZl9lbmFibGUoKTsKKyBvdXQ6CisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBzY2hlZHVsZXIgdG8gYWRkIHRoZSBldmVudHMgb2YgdGhlIGN1cnJlbnQgdGFzaworICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqIFdlIHJlc3RvcmUgdGhlIGV2ZW50IHZhbHVlIGFuZCB0aGVuIGVuYWJsZSBpdC4KKyAqCisgKiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdXMgYWdhaW5zdCBOTUksIGJ1dCBlbmFibGUoKQorICogc2V0cyB0aGUgZW5hYmxlZCBiaXQgaW4gdGhlIGNvbnRyb2wgZmllbGQgb2YgZXZlbnQgX2JlZm9yZV8KKyAqIGFjY2Vzc2luZyB0aGUgZXZlbnQgY29udHJvbCByZWdpc3Rlci4gSWYgYSBOTUkgaGl0cywgdGhlbiBpdCB3aWxsCisgKiBrZWVwIHRoZSBldmVudCBydW5uaW5nLgorICovCit2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOworCisJaWYgKGxpa2VseSghY3R4KSkKKwkJcmV0dXJuOworCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKKwkJcmV0dXJuOworCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKKwljcHVjdHgtPnRhc2tfY3R4ID0gY3R4OworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKKworCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKK30KKworI2RlZmluZSBNQVhfSU5URVJSVVBUUyAofjBVTEwpCisKK3N0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSk7CisKK3N0YXRpYyB2b2lkIHBlcmZfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBldmVudHMpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IHBlcmlvZCwgc2FtcGxlX3BlcmlvZDsKKwlzNjQgZGVsdGE7CisKKwlldmVudHMgKj0gaHdjLT5zYW1wbGVfcGVyaW9kOworCXBlcmlvZCA9IGRpdjY0X3U2NChldmVudHMsIGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxKTsKKworCWRlbHRhID0gKHM2NCkocGVyaW9kIC0gaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwlkZWx0YSA9IChkZWx0YSArIDcpIC8gODsgLyogbG93IHBhc3MgZmlsdGVyICovCisKKwlzYW1wbGVfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kICsgZGVsdGE7CisKKwlpZiAoIXNhbXBsZV9wZXJpb2QpCisJCXNhbXBsZV9wZXJpb2QgPSAxOworCisJaHdjLT5zYW1wbGVfcGVyaW9kID0gc2FtcGxlX3BlcmlvZDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9jdHhfYWRqdXN0X2ZyZXEoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOworCisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCisJCWludGVycnVwdHMgPSBod2MtPmludGVycnVwdHM7CisJCWh3Yy0+aW50ZXJydXB0cyA9IDA7CisKKwkJLyoKKwkJICogdW50aHJvdHRsZSBldmVudHMgb24gdGhlIHRpY2sKKwkJICovCisJCWlmIChpbnRlcnJ1cHRzID09IE1BWF9JTlRFUlJVUFRTKSB7CisJCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMSk7CisJCQlldmVudC0+cG11LT51bnRocm90dGxlKGV2ZW50KTsKKwkJCWludGVycnVwdHMgPSAyKnN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlL0haOworCQl9CisKKwkJaWYgKCFldmVudC0+YXR0ci5mcmVxIHx8ICFldmVudC0+YXR0ci5zYW1wbGVfZnJlcSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIGlmIHRoZSBzcGVjaWZpZWQgZnJlcSA8IEhaIHRoZW4gd2UgbmVlZCB0byBza2lwIHRpY2tzCisJCSAqLworCQlpZiAoZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXEgPCBIWikgeworCQkJZnJlcSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOworCisJCQlod2MtPmZyZXFfY291bnQgKz0gZnJlcTsKKwkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzICs9IGludGVycnVwdHM7CisKKwkJCWlmIChod2MtPmZyZXFfY291bnQgPCBIWikKKwkJCQljb250aW51ZTsKKworCQkJaW50ZXJydXB0cyA9IGh3Yy0+ZnJlcV9pbnRlcnJ1cHRzOworCQkJaHdjLT5mcmVxX2ludGVycnVwdHMgPSAwOworCQkJaHdjLT5mcmVxX2NvdW50IC09IEhaOworCQl9IGVsc2UKKwkJCWZyZXEgPSBIWjsKKworCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIGZyZXEgKiBpbnRlcnJ1cHRzKTsKKworCQkvKgorCQkgKiBJbiBvcmRlciB0byBhdm9pZCBiZWluZyBzdGFsbGVkIGJ5IGFuIChhY2NpZGVudGFsKSBodWdlCisJCSAqIHNhbXBsZSBwZXJpb2QsIGZvcmNlIHJlc2V0IHRoZSBzYW1wbGUgcGVyaW9kIGlmIHdlIGRpZG4ndAorCQkgKiBnZXQgYW55IGV2ZW50cyBpbiB0aGlzIGZyZXEgcGVyaW9kLgorCQkgKi8KKwkJaWYgKCFpbnRlcnJ1cHRzKSB7CisJCQlwZXJmX2Rpc2FibGUoKTsKKwkJCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOworCQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKKwkJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CisJCQlwZXJmX2VuYWJsZSgpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworfQorCisvKgorICogUm91bmQtcm9iaW4gYSBjb250ZXh0J3MgZXZlbnRzOgorICovCitzdGF0aWMgdm9pZCByb3RhdGVfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWN0eC0+bnJfZXZlbnRzKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJLyoKKwkgKiBSb3RhdGUgdGhlIGZpcnN0IGVudHJ5IGxhc3QgKHdvcmtzIGp1c3QgZmluZSBmb3IgZ3JvdXAgZXZlbnRzIHRvbyk6CisJICovCisJcGVyZl9kaXNhYmxlKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7CisJCWJyZWFrOworCX0KKwlwZXJmX2VuYWJsZSgpOworCisJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cit9CisKK3ZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCisJaWYgKCFhdG9taWNfcmVhZCgmbnJfZXZlbnRzKSkKKwkJcmV0dXJuOworCisJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwljdHggPSBjdXJyLT5wZXJmX2V2ZW50X2N0eHA7CisKKwlwZXJmX2N0eF9hZGp1c3RfZnJlcSgmY3B1Y3R4LT5jdHgpOworCWlmIChjdHgpCisJCXBlcmZfY3R4X2FkanVzdF9mcmVxKGN0eCk7CisKKwlwZXJmX2V2ZW50X2NwdV9zY2hlZF9vdXQoY3B1Y3R4KTsKKwlpZiAoY3R4KQorCQlfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoY3R4KTsKKworCXJvdGF0ZV9jdHgoJmNwdWN0eC0+Y3R4KTsKKwlpZiAoY3R4KQorCQlyb3RhdGVfY3R4KGN0eCk7CisKKwlwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihjcHVjdHgsIGNwdSk7CisJaWYgKGN0eCkKKwkJcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKGN1cnIsIGNwdSk7Cit9CisKKy8qCisgKiBFbmFibGUgYWxsIG9mIGEgdGFzaydzIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZW5hYmxlLW9uLWV4ZWMuCisgKiBUaGlzIGV4cGVjdHMgdGFzayA9PSBjdXJyZW50LgorICovCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2VuYWJsZV9vbl9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVuYWJsZWQgPSAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKKwlpZiAoIWN0eCB8fCAhY3R4LT5ucl9ldmVudHMpCisJCWdvdG8gb3V0OworCisJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KGN0eCk7CisKKwlzcGluX2xvY2soJmN0eC0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjKQorCQkJY29udGludWU7CisJCWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjID0gMDsKKwkJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQkJY29udGludWU7CisJCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7CisJCWVuYWJsZWQgPSAxOworCX0KKworCS8qCisJICogVW5jbG9uZSB0aGlzIGNvbnRleHQgaWYgd2UgZW5hYmxlZCBhbnkgZXZlbnQuCisJICovCisJaWYgKGVuYWJsZWQpCisJCXVuY2xvbmVfY3R4KGN0eCk7CisKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKworCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbih0YXNrLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworIG91dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBDcm9zcyBDUFUgY2FsbCB0byByZWFkIHRoZSBoYXJkd2FyZSBldmVudAorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfcmVhZCh2b2lkICppbmZvKQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHRhc2sgY29udGV4dCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzCisJICogdGhlIGN1cnJlbnQgdGFzayBjb250ZXh0IG9mIHRoaXMgY3B1LiAgSWYgbm90IGl0IGhhcyBiZWVuCisJICogc2NoZWR1bGVkIG91dCBiZWZvcmUgdGhlIHNtcCBjYWxsIGFycml2ZWQuICBJbiB0aGF0IGNhc2UKKwkgKiBldmVudC0+Y291bnQgd291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYSByZWNlbnQgc2FtcGxlCisJICogd2hlbiB0aGUgZXZlbnQgd2FzIHNjaGVkdWxlZCBvdXQuCisJICovCisJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChjdHgtPmlzX2FjdGl2ZSkKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOworCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOworCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdTY0IHBlcmZfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJLyoKKwkgKiBJZiBldmVudCBpcyBlbmFibGVkIGFuZCBjdXJyZW50bHkgYWN0aXZlIG9uIGEgQ1BVLCB1cGRhdGUgdGhlCisJICogdmFsdWUgaW4gdGhlIGV2ZW50IHN0cnVjdHVyZToKKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKSB7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShldmVudC0+b25jcHUsCisJCQkJCSBfX3BlcmZfZXZlbnRfcmVhZCwgZXZlbnQsIDEpOworCX0gZWxzZSBpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJdXBkYXRlX2V2ZW50X3RpbWVzKGV2ZW50KTsKKwl9CisKKwlyZXR1cm4gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHBlcmZfZXZlbnQgY29udGV4dCBpbiBhIHRhc2tfc3RydWN0OgorICovCitzdGF0aWMgdm9pZAorX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7CisJc3Bpbl9sb2NrX2luaXQoJmN0eC0+bG9jayk7CisJbXV0ZXhfaW5pdCgmY3R4LT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmN0eC0+Z3JvdXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmN0eC0+ZXZlbnRfbGlzdCk7CisJYXRvbWljX3NldCgmY3R4LT5yZWZjb3VudCwgMSk7CisJY3R4LT50YXNrID0gdGFzazsKK30KKworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmZpbmRfZ2V0X2NvbnRleHQocGlkX3QgcGlkLCBpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwkvKgorCSAqIElmIGNwdSBpcyBub3QgYSB3aWxkY2FyZCB0aGVuIHRoaXMgaXMgYSBwZXJjcHUgZXZlbnQ6CisJICovCisJaWYgKGNwdSAhPSAtMSkgeworCQkvKiBNdXN0IGJlIHJvb3QgdG8gb3BlcmF0ZSBvbiBhIENQVSBldmVudDogKi8KKwkJaWYgKHBlcmZfcGFyYW5vaWRfY3B1KCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKKworCQlpZiAoY3B1IDwgMCB8fCBjcHUgPiBudW1fcG9zc2libGVfY3B1cygpKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkJLyoKKwkJICogV2UgY291bGQgYmUgY2xldmVyIGFuZCBhbGxvdyB0byBhdHRhY2ggYSBldmVudCB0byBhbgorCQkgKiBvZmZsaW5lIENQVSBhbmQgYWN0aXZhdGUgaXQgd2hlbiB0aGUgQ1BVIGNvbWVzIHVwLCBidXQKKwkJICogdGhhdCdzIGZvciBsYXRlci4KKwkJICovCisJCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1X29ubGluZV9tYXApKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwkJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwkJY3R4ID0gJmNwdWN0eC0+Y3R4OworCQlnZXRfY3R4KGN0eCk7CisKKwkJcmV0dXJuIGN0eDsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKCFwaWQpCisJCXRhc2sgPSBjdXJyZW50OworCWVsc2UKKwkJdGFzayA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CisJaWYgKHRhc2spCisJCWdldF90YXNrX3N0cnVjdCh0YXNrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmICghdGFzaykKKwkJcmV0dXJuIEVSUl9QVFIoLUVTUkNIKTsKKworCS8qCisJICogQ2FuJ3QgYXR0YWNoIGV2ZW50cyB0byBhIGR5aW5nIHRhc2suCisJICovCisJZXJyID0gLUVTUkNIOworCWlmICh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCWdvdG8gZXJyb3V0OworCisJLyogUmV1c2UgcHRyYWNlIHBlcm1pc3Npb24gY2hlY2tzIGZvciBub3cuICovCisJZXJyID0gLUVBQ0NFUzsKKwlpZiAoIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQorCQlnb3RvIGVycm91dDsKKworIHJldHJ5OgorCWN0eCA9IHBlcmZfbG9ja190YXNrX2NvbnRleHQodGFzaywgJmZsYWdzKTsKKwlpZiAoY3R4KSB7CisJCXVuY2xvbmVfY3R4KGN0eCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCX0KKworCWlmICghY3R4KSB7CisJCWN0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJaWYgKCFjdHgpCisJCQlnb3RvIGVycm91dDsKKwkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChjdHgsIHRhc2spOworCQlnZXRfY3R4KGN0eCk7CisJCWlmIChjbXB4Y2hnKCZ0YXNrLT5wZXJmX2V2ZW50X2N0eHAsIE5VTEwsIGN0eCkpIHsKKwkJCS8qCisJCQkgKiBXZSByYWNlZCB3aXRoIHNvbWUgb3RoZXIgdGFzazsgdXNlCisJCQkgKiB0aGUgY29udGV4dCB0aGV5IHNldC4KKwkJCSAqLworCQkJa2ZyZWUoY3R4KTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJZ2V0X3Rhc2tfc3RydWN0KHRhc2spOworCX0KKworCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwlyZXR1cm4gY3R4OworCisgZXJyb3V0OgorCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2V2ZW50X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBlcmZfZXZlbnQsIHJjdV9oZWFkKTsKKwlpZiAoZXZlbnQtPm5zKQorCQlwdXRfcGlkX25zKGV2ZW50LT5ucyk7CisJa2ZyZWUoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCitzdGF0aWMgdm9pZCBmcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlwZXJmX3BlbmRpbmdfc3luYyhldmVudCk7CisKKwlpZiAoIWV2ZW50LT5wYXJlbnQpIHsKKwkJYXRvbWljX2RlYygmbnJfZXZlbnRzKTsKKwkJaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJCQlhdG9taWNfZGVjKCZucl9tbWFwX2V2ZW50cyk7CisJCWlmIChldmVudC0+YXR0ci5jb21tKQorCQkJYXRvbWljX2RlYygmbnJfY29tbV9ldmVudHMpOworCQlpZiAoZXZlbnQtPmF0dHIudGFzaykKKwkJCWF0b21pY19kZWMoJm5yX3Rhc2tfZXZlbnRzKTsKKwl9CisKKwlpZiAoZXZlbnQtPm91dHB1dCkgeworCQlmcHV0KGV2ZW50LT5vdXRwdXQtPmZpbHApOworCQlldmVudC0+b3V0cHV0ID0gTlVMTDsKKwl9CisKKwlpZiAoZXZlbnQtPmRlc3Ryb3kpCisJCWV2ZW50LT5kZXN0cm95KGV2ZW50KTsKKworCXB1dF9jdHgoZXZlbnQtPmN0eCk7CisJY2FsbF9yY3UoJmV2ZW50LT5yY3VfaGVhZCwgZnJlZV9ldmVudF9yY3UpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBmaWxlIGlzIGdvbmUuCisgKi8KK3N0YXRpYyBpbnQgcGVyZl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCVdBUk5fT05fT05DRShjdHgtPnBhcmVudF9jdHgpOworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCXBlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKKworCW11dGV4X2xvY2soJmV2ZW50LT5vd25lci0+cGVyZl9ldmVudF9tdXRleCk7CisJbGlzdF9kZWxfaW5pdCgmZXZlbnQtPm93bmVyX2VudHJ5KTsKKwltdXRleF91bmxvY2soJmV2ZW50LT5vd25lci0+cGVyZl9ldmVudF9tdXRleCk7CisJcHV0X3Rhc2tfc3RydWN0KGV2ZW50LT5vd25lcik7CisKKwlmcmVlX2V2ZW50KGV2ZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfcmVhZF9zaXplKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZW50cnkgPSBzaXplb2YodTY0KTsgLyogdmFsdWUgKi8KKwlpbnQgc2l6ZSA9IDA7CisJaW50IG5yID0gMTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkKKwkJc2l6ZSArPSBzaXplb2YodTY0KTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykKKwkJc2l6ZSArPSBzaXplb2YodTY0KTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQorCQllbnRyeSArPSBzaXplb2YodTY0KTsKKworCWlmIChldmVudC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0dST1VQKSB7CisJCW5yICs9IGV2ZW50LT5ncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzOworCQlzaXplICs9IHNpemVvZih1NjQpOworCX0KKworCXNpemUgKz0gZW50cnkgKiBucjsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdTY0IHBlcmZfZXZlbnRfcmVhZF92YWx1ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmNoaWxkOworCXU2NCB0b3RhbCA9IDA7CisKKwl0b3RhbCArPSBwZXJmX2V2ZW50X3JlYWQoZXZlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZldmVudC0+Y2hpbGRfbGlzdCwgY2hpbGRfbGlzdCkKKwkJdG90YWwgKz0gcGVyZl9ldmVudF9yZWFkKGNoaWxkKTsKKworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3JlYWRfZW50cnkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSAgIHU2NCByZWFkX2Zvcm1hdCwgY2hhciBfX3VzZXIgKmJ1ZikKK3sKKwlpbnQgbiA9IDAsIGNvdW50ID0gMDsKKwl1NjQgdmFsdWVzWzJdOworCisJdmFsdWVzW24rK10gPSBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoZXZlbnQpOworCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQorCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpOworCisJY291bnQgPSBuICogc2l6ZW9mKHU2NCk7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgdmFsdWVzLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfcmVhZF9ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgdTY0IHJlYWRfZm9ybWF0LCBjaGFyIF9fdXNlciAqYnVmKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyLCAqc3ViOworCWludCBuID0gMCwgc2l6ZSA9IDAsIGVyciA9IC1FRkFVTFQ7CisJdTY0IHZhbHVlc1szXTsKKworCXZhbHVlc1tuKytdID0gMSArIGxlYWRlci0+bnJfc2libGluZ3M7CisJaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEKSB7CisJCXZhbHVlc1tuKytdID0gbGVhZGVyLT50b3RhbF90aW1lX2VuYWJsZWQgKworCQkJYXRvbWljNjRfcmVhZCgmbGVhZGVyLT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOworCX0KKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKKwkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfcnVubmluZyArCisJCQlhdG9taWM2NF9yZWFkKCZsZWFkZXItPmNoaWxkX3RvdGFsX3RpbWVfcnVubmluZyk7CisJfQorCisJc2l6ZSA9IG4gKiBzaXplb2YodTY0KTsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCB2YWx1ZXMsIHNpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IHBlcmZfZXZlbnRfcmVhZF9lbnRyeShsZWFkZXIsIHJlYWRfZm9ybWF0LCBidWYgKyBzaXplKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNpemUgKz0gZXJyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJZXJyID0gcGVyZl9ldmVudF9yZWFkX2VudHJ5KHN1YiwgcmVhZF9mb3JtYXQsCisJCQkJYnVmICsgc2l6ZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQlzaXplICs9IGVycjsKKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3JlYWRfb25lKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgdTY0IHJlYWRfZm9ybWF0LCBjaGFyIF9fdXNlciAqYnVmKQoreworCXU2NCB2YWx1ZXNbNF07CisJaW50IG4gPSAwOworCisJdmFsdWVzW24rK10gPSBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoZXZlbnQpOworCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgeworCQl2YWx1ZXNbbisrXSA9IGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQgKworCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CisJfQorCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykgeworCQl2YWx1ZXNbbisrXSA9IGV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcgKworCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfcnVubmluZyk7CisJfQorCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQorCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHZhbHVlcywgbiAqIHNpemVvZih1NjQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gbiAqIHNpemVvZih1NjQpOworfQorCisvKgorICogUmVhZCB0aGUgcGVyZm9ybWFuY2UgZXZlbnQgLSBzaW1wbGUgbm9uIGJsb2NraW5nIHZlcnNpb24gZm9yIG5vdworICovCitzdGF0aWMgc3NpemVfdAorcGVyZl9yZWFkX2h3KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXU2NCByZWFkX2Zvcm1hdCA9IGV2ZW50LT5hdHRyLnJlYWRfZm9ybWF0OworCWludCByZXQ7CisKKwkvKgorCSAqIFJldHVybiBlbmQtb2YtZmlsZSBmb3IgYSByZWFkIG9uIGEgZXZlbnQgdGhhdCBpcyBpbgorCSAqIGVycm9yIHN0YXRlIChpLmUuIGJlY2F1c2UgaXQgd2FzIHBpbm5lZCBidXQgaXQgY291bGRuJ3QgYmUKKwkgKiBzY2hlZHVsZWQgb24gdG8gdGhlIENQVSBhdCBzb21lIHBvaW50KS4KKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfRVJST1IpCisJCXJldHVybiAwOworCisJaWYgKGNvdW50IDwgcGVyZl9ldmVudF9yZWFkX3NpemUoZXZlbnQpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKKwltdXRleF9sb2NrKCZldmVudC0+Y2hpbGRfbXV0ZXgpOworCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0dST1VQKQorCQlyZXQgPSBwZXJmX2V2ZW50X3JlYWRfZ3JvdXAoZXZlbnQsIHJlYWRfZm9ybWF0LCBidWYpOworCWVsc2UKKwkJcmV0ID0gcGVyZl9ldmVudF9yZWFkX29uZShldmVudCwgcmVhZF9mb3JtYXQsIGJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZldmVudC0+Y2hpbGRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK3BlcmZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHBlcmZfcmVhZF9odyhldmVudCwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVyZl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgaW50IGV2ZW50cyA9IFBPTExfSFVQOworCisJcmN1X3JlYWRfbG9jaygpOworCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmRhdGEpOworCWlmIChkYXRhKQorCQlldmVudHMgPSBhdG9taWNfeGNoZygmZGF0YS0+cG9sbCwgMCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmV2ZW50LT53YWl0cSwgd2FpdCk7CisKKwlyZXR1cm4gZXZlbnRzOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3Jlc2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwkodm9pZClwZXJmX2V2ZW50X3JlYWQoZXZlbnQpOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmNvdW50LCAwKTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKKy8qCisgKiBIb2xkaW5nIHRoZSB0b3AtbGV2ZWwgZXZlbnQncyBjaGlsZF9tdXRleCBtZWFucyB0aGF0IGFueQorICogZGVzY2VuZGFudCBwcm9jZXNzIHRoYXQgaGFzIGluaGVyaXRlZCB0aGlzIGV2ZW50IHdpbGwgYmxvY2sKKyAqIGluIHN5bmNfY2hpbGRfZXZlbnQgaWYgaXQgZ29lcyB0byBleGl0LCB0aHVzIHNhdGlzZnlpbmcgdGhlCisgKiB0YXNrIGV4aXN0ZW5jZSByZXF1aXJlbWVudHMgb2YgcGVyZl9ldmVudF9lbmFibGUvZGlzYWJsZS4KKyAqLworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9ldmVudCAqKSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGQ7CisKKwlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmZXZlbnQtPmNoaWxkX211dGV4KTsKKwlmdW5jKGV2ZW50KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZXZlbnQtPmNoaWxkX2xpc3QsIGNoaWxkX2xpc3QpCisJCWZ1bmMoY2hpbGQpOworCW11dGV4X3VubG9jaygmZXZlbnQtPmNoaWxkX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9mb3JfZWFjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICB2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfZXZlbnQgKikpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZzsKKworCVdBUk5fT05fT05DRShjdHgtPnBhcmVudF9jdHgpOworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCWV2ZW50ID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKworCXBlcmZfZXZlbnRfZm9yX2VhY2hfY2hpbGQoZXZlbnQsIGZ1bmMpOworCWZ1bmMoZXZlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJmV2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KQorCQlwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkKGV2ZW50LCBmdW5jKTsKKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZXQgPSAwOworCXU2NCB2YWx1ZTsKKworCWlmICghZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaXplID0gY29weV9mcm9tX3VzZXIoJnZhbHVlLCBhcmcsIHNpemVvZih2YWx1ZSkpOworCWlmIChzaXplICE9IHNpemVvZih2YWx1ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCWlmIChldmVudC0+YXR0ci5mcmVxKSB7CisJCWlmICh2YWx1ZSA+IHN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQlldmVudC0+YXR0ci5zYW1wbGVfZnJlcSA9IHZhbHVlOworCX0gZWxzZSB7CisJCWV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2QgPSB2YWx1ZTsKKwkJZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QgPSB2YWx1ZTsKKwl9Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHBlcmZfZXZlbnRfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBvdXRwdXRfZmQpOworCitzdGF0aWMgbG9uZyBwZXJmX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCBwZXJmX2V2ZW50ICopOworCXUzMiBmbGFncyA9IGFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBQRVJGX0VWRU5UX0lPQ19FTkFCTEU6CisJCWZ1bmMgPSBwZXJmX2V2ZW50X2VuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFOgorCQlmdW5jID0gcGVyZl9ldmVudF9kaXNhYmxlOworCQlicmVhazsKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1JFU0VUOgorCQlmdW5jID0gcGVyZl9ldmVudF9yZXNldDsKKwkJYnJlYWs7CisKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1JFRlJFU0g6CisJCXJldHVybiBwZXJmX2V2ZW50X3JlZnJlc2goZXZlbnQsIGFyZyk7CisKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1BFUklPRDoKKwkJcmV0dXJuIHBlcmZfZXZlbnRfcGVyaW9kKGV2ZW50LCAodTY0IF9fdXNlciAqKWFyZyk7CisKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQ6CisJCXJldHVybiBwZXJmX2V2ZW50X3NldF9vdXRwdXQoZXZlbnQsIGFyZyk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBQRVJGX0lPQ19GTEFHX0dST1VQKQorCQlwZXJmX2V2ZW50X2Zvcl9lYWNoKGV2ZW50LCBmdW5jKTsKKwllbHNlCisJCXBlcmZfZXZlbnRfZm9yX2VhY2hfY2hpbGQoZXZlbnQsIGZ1bmMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwZXJmX2V2ZW50X3Rhc2tfZW5hYmxlKHZvaWQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCisJbXV0ZXhfbG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN1cnJlbnQtPnBlcmZfZXZlbnRfbGlzdCwgb3duZXJfZW50cnkpCisJCXBlcmZfZXZlbnRfZm9yX2VhY2hfY2hpbGQoZXZlbnQsIHBlcmZfZXZlbnRfZW5hYmxlKTsKKwltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwZXJmX2V2ZW50X3Rhc2tfZGlzYWJsZSh2b2lkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCW11dGV4X2xvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdXJyZW50LT5wZXJmX2V2ZW50X2xpc3QsIG93bmVyX2VudHJ5KQorCQlwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkKGV2ZW50LCBwZXJmX2V2ZW50X2Rpc2FibGUpOworCW11dGV4X3VubG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmbmRlZiBQRVJGX0VWRU5UX0lOREVYX09GRlNFVAorIyBkZWZpbmUgUEVSRl9FVkVOVF9JTkRFWF9PRkZTRVQgMAorI2VuZGlmCisKK3N0YXRpYyBpbnQgcGVyZl9ldmVudF9pbmRleChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZXZlbnQtPmh3LmlkeCArIDEgLSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVDsKK30KKworLyoKKyAqIENhbGxlcnMgbmVlZCB0byBlbnN1cmUgdGhlcmUgY2FuIGJlIG5vIG5lc3Rpbmcgb2YgdGhpcyBmdW5jdGlvbiwgb3RoZXJ3aXNlCisgKiB0aGUgc2VxbG9jayBsb2dpYyBnb2VzIGJhZC4gV2UgY2FuIG5vdCBzZXJpYWxpemUgdGhpcyBiZWNhdXNlIHRoZSBhcmNoCisgKiBjb2RlIGNhbGxzIHRoaXMgZnJvbSBOTUkgY29udGV4dC4KKyAqLwordm9pZCBwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICp1c2VycGc7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCisJcmN1X3JlYWRfbG9jaygpOworCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmRhdGEpOworCWlmICghZGF0YSkKKwkJZ290byB1bmxvY2s7CisKKwl1c2VycGcgPSBkYXRhLT51c2VyX3BhZ2U7CisKKwkvKgorCSAqIERpc2FibGUgcHJlZW1wdGlvbiBzbyBhcyB0byBub3QgbGV0IHRoZSBjb3JyZXNwb25kaW5nIHVzZXItc3BhY2UKKwkgKiBzcGluIHRvbyBsb25nIGlmIHdlIGdldCBwcmVlbXB0ZWQuCisJICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJKyt1c2VycGctPmxvY2s7CisJYmFycmllcigpOworCXVzZXJwZy0+aW5kZXggPSBwZXJmX2V2ZW50X2luZGV4KGV2ZW50KTsKKwl1c2VycGctPm9mZnNldCA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5jb3VudCk7CisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwkJdXNlcnBnLT5vZmZzZXQgLT0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOworCisJdXNlcnBnLT50aW1lX2VuYWJsZWQgPSBldmVudC0+dG90YWxfdGltZV9lbmFibGVkICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOworCisJdXNlcnBnLT50aW1lX3J1bm5pbmcgPSBldmVudC0+dG90YWxfdGltZV9ydW5uaW5nICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOworCisJYmFycmllcigpOworCSsrdXNlcnBnLT5sb2NrOworCXByZWVtcHRfZW5hYmxlKCk7Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJaW50IHJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKKworCWlmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19NS1dSSVRFKSB7CisJCWlmICh2bWYtPnBnb2ZmID09IDApCisJCQlyZXQgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKKwlpZiAoIWRhdGEpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKHZtZi0+cGdvZmYgPT0gMCkgeworCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+dXNlcl9wYWdlKTsKKwl9IGVsc2UgeworCQlpbnQgbnIgPSB2bWYtPnBnb2ZmIC0gMTsKKworCQlpZiAoKHVuc2lnbmVkKW5yID4gZGF0YS0+bnJfcGFnZXMpCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpCisJCQlnb3RvIHVubG9jazsKKworCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+ZGF0YV9wYWdlc1tucl0pOworCX0KKworCWdldF9wYWdlKHZtZi0+cGFnZSk7CisJdm1mLT5wYWdlLT5tYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CisJdm1mLT5wYWdlLT5pbmRleCAgID0gdm1mLT5wZ29mZjsKKworCXJldCA9IDA7Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5yX3BhZ2VzKQoreworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGk7CisKKwlXQVJOX09OKGF0b21pY19yZWFkKCZldmVudC0+bW1hcF9jb3VudCkpOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEpOworCXNpemUgKz0gbnJfcGFnZXMgKiBzaXplb2Yodm9pZCAqKTsKKworCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJZ290byBmYWlsOworCisJZGF0YS0+dXNlcl9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhLT51c2VyX3BhZ2UpCisJCWdvdG8gZmFpbF91c2VyX3BhZ2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlkYXRhLT5kYXRhX3BhZ2VzW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghZGF0YS0+ZGF0YV9wYWdlc1tpXSkKKwkJCWdvdG8gZmFpbF9kYXRhX3BhZ2VzOworCX0KKworCWRhdGEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CisJYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOworCisJaWYgKGV2ZW50LT5hdHRyLndhdGVybWFyaykgeworCQlkYXRhLT53YXRlcm1hcmsgPSBtaW5fdChsb25nLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKKwkJCQkgICAgICBldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrKTsKKwl9CisJaWYgKCFkYXRhLT53YXRlcm1hcmspCisJCWRhdGEtPndhdGVybWFyayA9IG1heChQQUdFX1NJWkUsIFBBR0VfU0laRSAqIG5yX3BhZ2VzIC8gNCk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIGRhdGEpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZGF0YV9wYWdlczoKKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKKworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT51c2VyX3BhZ2UpOworCitmYWlsX3VzZXJfcGFnZToKKwlrZnJlZShkYXRhKTsKKworZmFpbDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX2ZyZWVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKTsKKworCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOworCV9fZnJlZV9wYWdlKHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBfX3BlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJaW50IGk7CisKKwlkYXRhID0gY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEsIHJjdV9oZWFkKTsKKworCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+dXNlcl9wYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnJfcGFnZXM7IGkrKykKKwkJcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKKworCWtmcmVlKGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBldmVudC0+ZGF0YTsKKworCVdBUk5fT04oYXRvbWljX3JlYWQoJmV2ZW50LT5tbWFwX2NvdW50KSk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIE5VTEwpOworCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgX19wZXJmX21tYXBfZGF0YV9mcmVlKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisKKwlhdG9taWNfaW5jKCZldmVudC0+bW1hcF9jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKworCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKKwlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmZXZlbnQtPm1tYXBfY291bnQsICZldmVudC0+bW1hcF9tdXRleCkpIHsKKwkJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gY3VycmVudF91c2VyKCk7CisKKwkJYXRvbWljX2xvbmdfc3ViKGV2ZW50LT5kYXRhLT5ucl9wYWdlcyArIDEsICZ1c2VyLT5sb2NrZWRfdm0pOworCQl2bWEtPnZtX21tLT5sb2NrZWRfdm0gLT0gZXZlbnQtPmRhdGEtPm5yX2xvY2tlZDsKKwkJcGVyZl9tbWFwX2RhdGFfZnJlZShldmVudCk7CisJCW11dGV4X3VubG9jaygmZXZlbnQtPm1tYXBfbXV0ZXgpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwZXJmX21tYXBfdm1vcHMgPSB7CisJLm9wZW4JCT0gcGVyZl9tbWFwX29wZW4sCisJLmNsb3NlCQk9IHBlcmZfbW1hcF9jbG9zZSwKKwkuZmF1bHQJCT0gcGVyZl9tbWFwX2ZhdWx0LAorCS5wYWdlX21rd3JpdGUJPSBwZXJmX21tYXBfZmF1bHQsCit9OworCitzdGF0aWMgaW50IHBlcmZfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdXNlcl9sb2NrZWQsIHVzZXJfbG9ja19saW1pdDsKKwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKKwl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKKwl1bnNpZ25lZCBsb25nIHZtYV9zaXplOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CisJbG9uZyB1c2VyX2V4dHJhLCBleHRyYTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZtYV9zaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCW5yX3BhZ2VzID0gKHZtYV9zaXplIC8gUEFHRV9TSVpFKSAtIDE7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgZGF0YSBwYWdlcyBlbnN1cmUgdGhleSdyZSBhIHBvd2VyLW9mLXR3byBudW1iZXIsIHNvIHdlCisJICogY2FuIGRvIGJpdG1hc2tzIGluc3RlYWQgb2YgbW9kdWxvLgorCSAqLworCWlmIChucl9wYWdlcyAhPSAwICYmICFpc19wb3dlcl9vZl8yKG5yX3BhZ2VzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodm1hX3NpemUgIT0gUEFHRV9TSVpFICogKDEgKyBucl9wYWdlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZtYS0+dm1fcGdvZmYgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmZXZlbnQtPm1tYXBfbXV0ZXgpOworCWlmIChldmVudC0+b3V0cHV0KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZldmVudC0+bW1hcF9jb3VudCkpIHsKKwkJaWYgKG5yX3BhZ2VzICE9IGV2ZW50LT5kYXRhLT5ucl9wYWdlcykKKwkJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXVzZXJfZXh0cmEgPSBucl9wYWdlcyArIDE7CisJdXNlcl9sb2NrX2xpbWl0ID0gc3lzY3RsX3BlcmZfZXZlbnRfbWxvY2sgPj4gKFBBR0VfU0hJRlQgLSAxMCk7CisKKwkvKgorCSAqIEluY3JlYXNlIHRoZSBsaW1pdCBsaW5lYXJseSB3aXRoIG1vcmUgQ1BVczoKKwkgKi8KKwl1c2VyX2xvY2tfbGltaXQgKj0gbnVtX29ubGluZV9jcHVzKCk7CisKKwl1c2VyX2xvY2tlZCA9IGF0b21pY19sb25nX3JlYWQoJnVzZXItPmxvY2tlZF92bSkgKyB1c2VyX2V4dHJhOworCisJZXh0cmEgPSAwOworCWlmICh1c2VyX2xvY2tlZCA+IHVzZXJfbG9ja19saW1pdCkKKwkJZXh0cmEgPSB1c2VyX2xvY2tlZCAtIHVzZXJfbG9ja19saW1pdDsKKworCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOworCWxvY2tfbGltaXQgPj49IFBBR0VfU0hJRlQ7CisJbG9ja2VkID0gdm1hLT52bV9tbS0+bG9ja2VkX3ZtICsgZXh0cmE7CisKKwlpZiAoKGxvY2tlZCA+IGxvY2tfbGltaXQpICYmIHBlcmZfcGFyYW5vaWRfdHJhY2Vwb2ludF9yYXcoKSAmJgorCQkhY2FwYWJsZShDQVBfSVBDX0xPQ0spKSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJV0FSTl9PTihldmVudC0+ZGF0YSk7CisJcmV0ID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKKwlpZiAocmV0KQorCQlnb3RvIHVubG9jazsKKworCWF0b21pY19zZXQoJmV2ZW50LT5tbWFwX2NvdW50LCAxKTsKKwlhdG9taWNfbG9uZ19hZGQodXNlcl9leHRyYSwgJnVzZXItPmxvY2tlZF92bSk7CisJdm1hLT52bV9tbS0+bG9ja2VkX3ZtICs9IGV4dHJhOworCWV2ZW50LT5kYXRhLT5ucl9sb2NrZWQgPSBleHRyYTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQorCQlldmVudC0+ZGF0YS0+d3JpdGFibGUgPSAxOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7CisKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCXZtYS0+dm1fb3BzID0gJnBlcmZfbW1hcF92bW9wczsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0dmFsOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmZXZlbnQtPmZhc3luYyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwZXJmX2ZvcHMgPSB7CisJLnJlbGVhc2UJCT0gcGVyZl9yZWxlYXNlLAorCS5yZWFkCQkJPSBwZXJmX3JlYWQsCisJLnBvbGwJCQk9IHBlcmZfcG9sbCwKKwkudW5sb2NrZWRfaW9jdGwJCT0gcGVyZl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCQk9IHBlcmZfaW9jdGwsCisJLm1tYXAJCQk9IHBlcmZfbW1hcCwKKwkuZmFzeW5jCQkJPSBwZXJmX2Zhc3luYywKK307CisKKy8qCisgKiBQZXJmIGV2ZW50IHdha2V1cAorICoKKyAqIElmIHRoZXJlJ3MgZGF0YSwgZW5zdXJlIHdlIHNldCB0aGUgcG9sbCgpIHN0YXRlIGFuZCBwdWJsaXNoIGV2ZXJ5dGhpbmcKKyAqIHRvIHVzZXItc3BhY2UgYmVmb3JlIHdha2luZyBldmVyeWJvZHkgdXAuCisgKi8KKwordm9pZCBwZXJmX2V2ZW50X3dha2V1cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJd2FrZV91cF9hbGwoJmV2ZW50LT53YWl0cSk7CisKKwlpZiAoZXZlbnQtPnBlbmRpbmdfa2lsbCkgeworCQlraWxsX2Zhc3luYygmZXZlbnQtPmZhc3luYywgU0lHSU8sIGV2ZW50LT5wZW5kaW5nX2tpbGwpOworCQlldmVudC0+cGVuZGluZ19raWxsID0gMDsKKwl9Cit9CisKKy8qCisgKiBQZW5kaW5nIHdha2V1cHMKKyAqCisgKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCB0byB3YWtldXAgdXAgZnJvbSBOTUkgKG9yIHJxLT5sb2NrKSBjb250ZXh0LgorICoKKyAqIFRoZSBOTUkgYml0IG1lYW5zIHdlIGNhbm5vdCBwb3NzaWJseSB0YWtlIGxvY2tzLiBUaGVyZWZvcmUsIG1haW50YWluIGEKKyAqIHNpbmdsZSBsaW5rZWQgbGlzdCBhbmQgdXNlIGNtcHhjaGcoKSB0byBhZGQgZW50cmllcyBsb2NrbGVzcy4KKyAqLworCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfZXZlbnQoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY29udGFpbmVyX29mKGVudHJ5LAorCQkJc3RydWN0IHBlcmZfZXZlbnQsIHBlbmRpbmcpOworCisJaWYgKGV2ZW50LT5wZW5kaW5nX2Rpc2FibGUpIHsKKwkJZXZlbnQtPnBlbmRpbmdfZGlzYWJsZSA9IDA7CisJCV9fcGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTsKKwl9CisKKwlpZiAoZXZlbnQtPnBlbmRpbmdfd2FrZXVwKSB7CisJCWV2ZW50LT5wZW5kaW5nX3dha2V1cCA9IDA7CisJCXBlcmZfZXZlbnRfd2FrZXVwKGV2ZW50KTsKKwl9Cit9CisKKyNkZWZpbmUgUEVORElOR19UQUlMICgoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqKS0xVUwpCisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICosIHBlcmZfcGVuZGluZ19oZWFkKSA9IHsKKwlQRU5ESU5HX1RBSUwsCit9OworCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfcXVldWUoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqZW50cnksCisJCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCBwZXJmX3BlbmRpbmdfZW50cnkgKikpCit7CisJc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqKmhlYWQ7CisKKwlpZiAoY21weGNoZygmZW50cnktPm5leHQsIE5VTEwsIFBFTkRJTkdfVEFJTCkgIT0gTlVMTCkKKwkJcmV0dXJuOworCisJZW50cnktPmZ1bmMgPSBmdW5jOworCisJaGVhZCA9ICZnZXRfY3B1X3ZhcihwZXJmX3BlbmRpbmdfaGVhZCk7CisKKwlkbyB7CisJCWVudHJ5LT5uZXh0ID0gKmhlYWQ7CisJfSB3aGlsZSAoY21weGNoZyhoZWFkLCBlbnRyeS0+bmV4dCwgZW50cnkpICE9IGVudHJ5LT5uZXh0KTsKKworCXNldF9wZXJmX2V2ZW50X3BlbmRpbmcoKTsKKworCXB1dF9jcHVfdmFyKHBlcmZfcGVuZGluZ19oZWFkKTsKK30KKworc3RhdGljIGludCBfX3BlcmZfcGVuZGluZ19ydW4odm9pZCkKK3sKKwlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICpsaXN0OworCWludCBuciA9IDA7CisKKwlsaXN0ID0geGNoZygmX19nZXRfY3B1X3ZhcihwZXJmX3BlbmRpbmdfaGVhZCksIFBFTkRJTkdfVEFJTCk7CisJd2hpbGUgKGxpc3QgIT0gUEVORElOR19UQUlMKSB7CisJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopOworCQlzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICplbnRyeSA9IGxpc3Q7CisKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisKKwkJZnVuYyA9IGVudHJ5LT5mdW5jOworCQllbnRyeS0+bmV4dCA9IE5VTEw7CisJCS8qCisJCSAqIEVuc3VyZSB3ZSBvYnNlcnZlIHRoZSB1bnF1ZXVlIGJlZm9yZSB3ZSBpc3N1ZSB0aGUgd2FrZXVwLAorCQkgKiBzbyB0aGF0IHdlIHdvbid0IGJlIHdhaXRpbmcgZm9yZXZlci4KKwkJICogLS0gc2VlIHBlcmZfbm90X3BlbmRpbmcoKS4KKwkJICovCisJCXNtcF93bWIoKTsKKworCQlmdW5jKGVudHJ5KTsKKwkJbnIrKzsKKwl9CisKKwlyZXR1cm4gbnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfbm90X3BlbmRpbmcoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCS8qCisJICogSWYgd2UgZmx1c2ggb24gd2hhdGV2ZXIgY3B1IHdlIHJ1biwgdGhlcmUgaXMgYSBjaGFuY2Ugd2UgZG9uJ3QKKwkgKiBuZWVkIHRvIHdhaXQuCisJICovCisJZ2V0X2NwdSgpOworCV9fcGVyZl9wZW5kaW5nX3J1bigpOworCXB1dF9jcHUoKTsKKworCS8qCisJICogRW5zdXJlIHdlIHNlZSB0aGUgcHJvcGVyIHF1ZXVlIHN0YXRlIGJlZm9yZSBnb2luZyB0byBzbGVlcAorCSAqIHNvIHRoYXQgd2UgZG8gbm90IG1pc3MgdGhlIHdha2V1cC4gLS0gc2VlIHBlcmZfcGVuZGluZ19oYW5kbGUoKQorCSAqLworCXNtcF9ybWIoKTsKKwlyZXR1cm4gZXZlbnQtPnBlbmRpbmcubmV4dCA9PSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJd2FpdF9ldmVudChldmVudC0+d2FpdHEsIHBlcmZfbm90X3BlbmRpbmcoZXZlbnQpKTsKK30KKwordm9pZCBwZXJmX2V2ZW50X2RvX3BlbmRpbmcodm9pZCkKK3sKKwlfX3BlcmZfcGVuZGluZ19ydW4oKTsKK30KKworLyoKKyAqIENhbGxjaGFpbiBzdXBwb3J0IC0tIGFyY2ggc3BlY2lmaWMKKyAqLworCitfX3dlYWsgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICpwZXJmX2NhbGxjaGFpbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIE91dHB1dAorICovCitzdGF0aWMgYm9vbCBwZXJmX291dHB1dF9zcGFjZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgdGFpbCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaWYgKCFkYXRhLT53cml0YWJsZSkKKwkJcmV0dXJuIHRydWU7CisKKwltYXNrID0gKGRhdGEtPm5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC0gMTsKKworCW9mZnNldCA9IChvZmZzZXQgLSB0YWlsKSAmIG1hc2s7CisJaGVhZCAgID0gKGhlYWQgICAtIHRhaWwpICYgbWFzazsKKworCWlmICgoaW50KShoZWFkIC0gb2Zmc2V0KSA8IDApCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBwZXJmX291dHB1dF93YWtldXAoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQoreworCWF0b21pY19zZXQoJmhhbmRsZS0+ZGF0YS0+cG9sbCwgUE9MTF9JTik7CisKKwlpZiAoaGFuZGxlLT5ubWkpIHsKKwkJaGFuZGxlLT5ldmVudC0+cGVuZGluZ193YWtldXAgPSAxOworCQlwZXJmX3BlbmRpbmdfcXVldWUoJmhhbmRsZS0+ZXZlbnQtPnBlbmRpbmcsCisJCQkJICAgcGVyZl9wZW5kaW5nX2V2ZW50KTsKKwl9IGVsc2UKKwkJcGVyZl9ldmVudF93YWtldXAoaGFuZGxlLT5ldmVudCk7Cit9CisKKy8qCisgKiBDdXJpb3VzIGxvY2tpbmcgY29uc3RydWN0LgorICoKKyAqIFdlIG5lZWQgdG8gZW5zdXJlIGEgbGF0ZXIgZXZlbnRfaWQgZG9lc24ndCBwdWJsaXNoIGEgaGVhZCB3aGVuIGEgZm9ybWVyCisgKiBldmVudF9pZCBpc24ndCBkb25lIHdyaXRpbmcuIEhvd2V2ZXIgc2luY2Ugd2UgbmVlZCB0byBkZWFsIHdpdGggTk1JcyB3ZQorICogY2Fubm90IGZ1bGx5IHNlcmlhbGl6ZSB0aGluZ3MuCisgKgorICogV2hhdCB3ZSBkbyBpcyBzZXJpYWxpemUgYmV0d2VlbiBDUFVzIHNvIHdlIG9ubHkgaGF2ZSB0byBkZWFsIHdpdGggTk1JCisgKiBuZXN0aW5nIG9uIGEgc2luZ2xlIENQVS4KKyAqCisgKiBXZSBvbmx5IHB1Ymxpc2ggdGhlIGhlYWQgKGFuZCBnZW5lcmF0ZSBhIHdha2V1cCkgd2hlbiB0aGUgb3V0ZXItbW9zdAorICogZXZlbnRfaWQgY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCBwZXJmX291dHB1dF9sb2NrKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisJaW50IGNwdTsKKworCWhhbmRsZS0+bG9ja2VkID0gMDsKKworCWxvY2FsX2lycV9zYXZlKGhhbmRsZS0+ZmxhZ3MpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChpbl9ubWkoKSAmJiBhdG9taWNfcmVhZCgmZGF0YS0+bG9jaykgPT0gY3B1KQorCQlyZXR1cm47CisKKwl3aGlsZSAoYXRvbWljX2NtcHhjaGcoJmRhdGEtPmxvY2ssIC0xLCBjcHUpICE9IC0xKQorCQljcHVfcmVsYXgoKTsKKworCWhhbmRsZS0+bG9ja2VkID0gMTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfdW5sb2NrKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisJdW5zaWduZWQgbG9uZyBoZWFkOworCWludCBjcHU7CisKKwlkYXRhLT5kb25lX2hlYWQgPSBkYXRhLT5oZWFkOworCisJaWYgKCFoYW5kbGUtPmxvY2tlZCkKKwkJZ290byBvdXQ7CisKK2FnYWluOgorCS8qCisJICogVGhlIHhjaGcgaW1wbGllcyBhIGZ1bGwgYmFycmllciB0aGF0IGVuc3VyZXMgYWxsIHdyaXRlcyBhcmUgZG9uZQorCSAqIGJlZm9yZSB3ZSBwdWJsaXNoIHRoZSBuZXcgaGVhZCwgbWF0Y2hlZCBieSBhIHJtYigpIGluIHVzZXJzcGFjZSB3aGVuCisJICogcmVhZGluZyB0aGlzIHBvc2l0aW9uLgorCSAqLworCXdoaWxlICgoaGVhZCA9IGF0b21pY19sb25nX3hjaGcoJmRhdGEtPmRvbmVfaGVhZCwgMCkpKQorCQlkYXRhLT51c2VyX3BhZ2UtPmRhdGFfaGVhZCA9IGhlYWQ7CisKKwkvKgorCSAqIE5NSSBjYW4gaGFwcGVuIGhlcmUsIHdoaWNoIG1lYW5zIHdlIGNhbiBtaXNzIGEgZG9uZV9oZWFkIHVwZGF0ZS4KKwkgKi8KKworCWNwdSA9IGF0b21pY194Y2hnKCZkYXRhLT5sb2NrLCAtMSk7CisJV0FSTl9PTl9PTkNFKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJLyoKKwkgKiBUaGVyZWZvcmUgd2UgaGF2ZSB0byB2YWxpZGF0ZSB3ZSBkaWQgbm90IGluZGVlZCBkbyBzby4KKwkgKi8KKwlpZiAodW5saWtlbHkoYXRvbWljX2xvbmdfcmVhZCgmZGF0YS0+ZG9uZV9oZWFkKSkpIHsKKwkJLyoKKwkJICogU2luY2Ugd2UgaGFkIGl0IGxvY2tlZCwgd2UgY2FuIGxvY2sgaXQgYWdhaW4uCisJCSAqLworCQl3aGlsZSAoYXRvbWljX2NtcHhjaGcoJmRhdGEtPmxvY2ssIC0xLCBjcHUpICE9IC0xKQorCQkJY3B1X3JlbGF4KCk7CisKKwkJZ290byBhZ2FpbjsKKwl9CisKKwlpZiAoYXRvbWljX3hjaGcoJmRhdGEtPndha2V1cCwgMCkpCisJCXBlcmZfb3V0cHV0X3dha2V1cChoYW5kbGUpOworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGhhbmRsZS0+ZmxhZ3MpOworfQorCit2b2lkIHBlcmZfb3V0cHV0X2NvcHkoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkgICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHBhZ2VzX21hc2s7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl2b2lkICoqcGFnZXM7CisKKwlvZmZzZXQJCT0gaGFuZGxlLT5vZmZzZXQ7CisJcGFnZXNfbWFzawk9IGhhbmRsZS0+ZGF0YS0+bnJfcGFnZXMgLSAxOworCXBhZ2VzCQk9IGhhbmRsZS0+ZGF0YS0+ZGF0YV9wYWdlczsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OworCQlpbnQgbnI7CisKKwkJbnIJICAgID0gKG9mZnNldCA+PiBQQUdFX1NISUZUKSAmIHBhZ2VzX21hc2s7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpOworCQlzaXplCSAgICA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQsIGxlbik7CisKKwkJbWVtY3B5KHBhZ2VzW25yXSArIHBhZ2Vfb2Zmc2V0LCBidWYsIHNpemUpOworCisJCWxlbgkgICAgLT0gc2l6ZTsKKwkJYnVmCSAgICArPSBzaXplOworCQlvZmZzZXQJICAgICs9IHNpemU7CisJfSB3aGlsZSAobGVuKTsKKworCWhhbmRsZS0+b2Zmc2V0ID0gb2Zmc2V0OworCisJLyoKKwkgKiBDaGVjayB3ZSBkaWRuJ3QgY29weSBwYXN0IG91ciByZXNlcnZhdGlvbiB3aW5kb3csIHRha2luZyB0aGUKKwkgKiBwb3NzaWJsZSB1bnNpZ25lZCBpbnQgd3JhcCBpbnRvIGFjY291bnQuCisJICovCisJV0FSTl9PTl9PTkNFKCgobG9uZykoaGFuZGxlLT5oZWFkIC0gaGFuZGxlLT5vZmZzZXQpKSA8IDApOworfQorCitpbnQgcGVyZl9vdXRwdXRfYmVnaW4oc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHVuc2lnbmVkIGludCBzaXplLAorCQkgICAgICBpbnQgbm1pLCBpbnQgc2FtcGxlKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpvdXRwdXRfZXZlbnQ7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgdGFpbCwgb2Zmc2V0LCBoZWFkOworCWludCBoYXZlX2xvc3Q7CisJc3RydWN0IHsKKwkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwkJdTY0CQkJIGlkOworCQl1NjQJCQkgbG9zdDsKKwl9IGxvc3RfZXZlbnQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJLyoKKwkgKiBGb3IgaW5oZXJpdGVkIGV2ZW50cyB3ZSBzZW5kIGFsbCB0aGUgb3V0cHV0IHRvd2FyZHMgdGhlIHBhcmVudC4KKwkgKi8KKwlpZiAoZXZlbnQtPnBhcmVudCkKKwkJZXZlbnQgPSBldmVudC0+cGFyZW50OworCisJb3V0cHV0X2V2ZW50ID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5vdXRwdXQpOworCWlmIChvdXRwdXRfZXZlbnQpCisJCWV2ZW50ID0gb3V0cHV0X2V2ZW50OworCisJZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7CisJaWYgKCFkYXRhKQorCQlnb3RvIG91dDsKKworCWhhbmRsZS0+ZGF0YQk9IGRhdGE7CisJaGFuZGxlLT5ldmVudAk9IGV2ZW50OworCWhhbmRsZS0+bm1pCT0gbm1pOworCWhhbmRsZS0+c2FtcGxlCT0gc2FtcGxlOworCisJaWYgKCFkYXRhLT5ucl9wYWdlcykKKwkJZ290byBmYWlsOworCisJaGF2ZV9sb3N0ID0gYXRvbWljX3JlYWQoJmRhdGEtPmxvc3QpOworCWlmIChoYXZlX2xvc3QpCisJCXNpemUgKz0gc2l6ZW9mKGxvc3RfZXZlbnQpOworCisJcGVyZl9vdXRwdXRfbG9jayhoYW5kbGUpOworCisJZG8geworCQkvKgorCQkgKiBVc2Vyc3BhY2UgY291bGQgY2hvb3NlIHRvIGlzc3VlIGEgbWIoKSBiZWZvcmUgdXBkYXRpbmcgdGhlCisJCSAqIHRhaWwgcG9pbnRlci4gU28gdGhhdCBhbGwgcmVhZHMgd2lsbCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZQorCQkgKiB3cml0ZSBpcyBpc3N1ZWQuCisJCSAqLworCQl0YWlsID0gQUNDRVNTX09OQ0UoZGF0YS0+dXNlcl9wYWdlLT5kYXRhX3RhaWwpOworCQlzbXBfcm1iKCk7CisJCW9mZnNldCA9IGhlYWQgPSBhdG9taWNfbG9uZ19yZWFkKCZkYXRhLT5oZWFkKTsKKwkJaGVhZCArPSBzaXplOworCQlpZiAodW5saWtlbHkoIXBlcmZfb3V0cHV0X3NwYWNlKGRhdGEsIHRhaWwsIG9mZnNldCwgaGVhZCkpKQorCQkJZ290byBmYWlsOworCX0gd2hpbGUgKGF0b21pY19sb25nX2NtcHhjaGcoJmRhdGEtPmhlYWQsIG9mZnNldCwgaGVhZCkgIT0gb2Zmc2V0KTsKKworCWhhbmRsZS0+b2Zmc2V0CT0gb2Zmc2V0OworCWhhbmRsZS0+aGVhZAk9IGhlYWQ7CisKKwlpZiAoaGVhZCAtIHRhaWwgPiBkYXRhLT53YXRlcm1hcmspCisJCWF0b21pY19zZXQoJmRhdGEtPndha2V1cCwgMSk7CisKKwlpZiAoaGF2ZV9sb3N0KSB7CisJCWxvc3RfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9MT1NUOworCQlsb3N0X2V2ZW50LmhlYWRlci5taXNjID0gMDsKKwkJbG9zdF9ldmVudC5oZWFkZXIuc2l6ZSA9IHNpemVvZihsb3N0X2V2ZW50KTsKKwkJbG9zdF9ldmVudC5pZCAgICAgICAgICA9IGV2ZW50LT5pZDsKKwkJbG9zdF9ldmVudC5sb3N0ICAgICAgICA9IGF0b21pY194Y2hnKCZkYXRhLT5sb3N0LCAwKTsKKworCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBsb3N0X2V2ZW50KTsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlhdG9taWNfaW5jKCZkYXRhLT5sb3N0KTsKKwlwZXJmX291dHB1dF91bmxvY2soaGFuZGxlKTsKK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiAtRU5PU1BDOworfQorCit2b2lkIHBlcmZfb3V0cHV0X2VuZChzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gaGFuZGxlLT5ldmVudDsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisKKwlpbnQgd2FrZXVwX2V2ZW50cyA9IGV2ZW50LT5hdHRyLndha2V1cF9ldmVudHM7CisKKwlpZiAoaGFuZGxlLT5zYW1wbGUgJiYgd2FrZXVwX2V2ZW50cykgeworCQlpbnQgZXZlbnRzID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmV2ZW50cyk7CisJCWlmIChldmVudHMgPj0gd2FrZXVwX2V2ZW50cykgeworCQkJYXRvbWljX3N1Yih3YWtldXBfZXZlbnRzLCAmZGF0YS0+ZXZlbnRzKTsKKwkJCWF0b21pY19zZXQoJmRhdGEtPndha2V1cCwgMSk7CisJCX0KKwl9CisKKwlwZXJmX291dHB1dF91bmxvY2soaGFuZGxlKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHUzMiBwZXJmX2V2ZW50X3BpZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwkvKgorCSAqIG9ubHkgdG9wIGxldmVsIGV2ZW50cyBoYXZlIHRoZSBwaWQgbmFtZXNwYWNlIHRoZXkgd2VyZSBjcmVhdGVkIGluCisJICovCisJaWYgKGV2ZW50LT5wYXJlbnQpCisJCWV2ZW50ID0gZXZlbnQtPnBhcmVudDsKKworCXJldHVybiB0YXNrX3RnaWRfbnJfbnMocCwgZXZlbnQtPm5zKTsKK30KKworc3RhdGljIHUzMiBwZXJmX2V2ZW50X3RpZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwkvKgorCSAqIG9ubHkgdG9wIGxldmVsIGV2ZW50cyBoYXZlIHRoZSBwaWQgbmFtZXNwYWNlIHRoZXkgd2VyZSBjcmVhdGVkIGluCisJICovCisJaWYgKGV2ZW50LT5wYXJlbnQpCisJCWV2ZW50ID0gZXZlbnQtPnBhcmVudDsKKworCXJldHVybiB0YXNrX3BpZF9ucl9ucyhwLCBldmVudC0+bnMpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX291dHB1dF9yZWFkX29uZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQkJIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1NjQgcmVhZF9mb3JtYXQgPSBldmVudC0+YXR0ci5yZWFkX2Zvcm1hdDsKKwl1NjQgdmFsdWVzWzRdOworCWludCBuID0gMDsKKworCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpIHsKKwkJdmFsdWVzW24rK10gPSBldmVudC0+dG90YWxfdGltZV9lbmFibGVkICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOworCX0KKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKKwkJdmFsdWVzW24rK10gPSBldmVudC0+dG90YWxfdGltZV9ydW5uaW5nICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOworCX0KKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkKKwkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2V2ZW50X2lkKGV2ZW50KTsKKworCXBlcmZfb3V0cHV0X2NvcHkoaGFuZGxlLCB2YWx1ZXMsIG4gKiBzaXplb2YodTY0KSk7Cit9CisKKy8qCisgKiBYWFggUEVSRl9GT1JNQVRfR1JPVVAgdnMgaW5oZXJpdGVkIGV2ZW50cyBzZWVtcyBkaWZmaWN1bHQuCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfb3V0cHV0X3JlYWRfZ3JvdXAoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlciwgKnN1YjsKKwl1NjQgcmVhZF9mb3JtYXQgPSBldmVudC0+YXR0ci5yZWFkX2Zvcm1hdDsKKwl1NjQgdmFsdWVzWzVdOworCWludCBuID0gMDsKKworCXZhbHVlc1tuKytdID0gMSArIGxlYWRlci0+bnJfc2libGluZ3M7CisKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpCisJCXZhbHVlc1tuKytdID0gbGVhZGVyLT50b3RhbF90aW1lX2VuYWJsZWQ7CisKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpCisJCXZhbHVlc1tuKytdID0gbGVhZGVyLT50b3RhbF90aW1lX3J1bm5pbmc7CisKKwlpZiAobGVhZGVyICE9IGV2ZW50KQorCQlsZWFkZXItPnBtdS0+cmVhZChsZWFkZXIpOworCisJdmFsdWVzW24rK10gPSBhdG9taWM2NF9yZWFkKCZsZWFkZXItPmNvdW50KTsKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkKKwkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2V2ZW50X2lkKGxlYWRlcik7CisKKwlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJbiA9IDA7CisKKwkJaWYgKHN1YiAhPSBldmVudCkKKwkJCXN1Yi0+cG11LT5yZWFkKHN1Yik7CisKKwkJdmFsdWVzW24rK10gPSBhdG9taWM2NF9yZWFkKCZzdWItPmNvdW50KTsKKwkJaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCisJCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoc3ViKTsKKworCQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgdmFsdWVzLCBuICogc2l6ZW9mKHU2NCkpOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfcmVhZChzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQkgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoZXZlbnQtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkKKwkJcGVyZl9vdXRwdXRfcmVhZF9ncm91cChoYW5kbGUsIGV2ZW50KTsKKwllbHNlCisJCXBlcmZfb3V0cHV0X3JlYWRfb25lKGhhbmRsZSwgZXZlbnQpOworfQorCit2b2lkIHBlcmZfb3V0cHV0X3NhbXBsZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCisJCQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhlYWRlciwKKwkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXU2NCBzYW1wbGVfdHlwZSA9IGRhdGEtPnR5cGU7CisKKwlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCAqaGVhZGVyKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKQorCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT5pcCk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpCisJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPnRpZF9lbnRyeSk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQorCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT50aW1lKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCisJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPmFkZHIpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSUQpCisJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPmlkKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+c3RyZWFtX2lkKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+Y3B1X2VudHJ5KTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+cGVyaW9kKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFQUQpCisJCXBlcmZfb3V0cHV0X3JlYWQoaGFuZGxlLCBldmVudCk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pIHsKKwkJaWYgKGRhdGEtPmNhbGxjaGFpbikgeworCQkJaW50IHNpemUgPSAxOworCisJCQlpZiAoZGF0YS0+Y2FsbGNoYWluKQorCQkJCXNpemUgKz0gZGF0YS0+Y2FsbGNoYWluLT5ucjsKKworCQkJc2l6ZSAqPSBzaXplb2YodTY0KTsKKworCQkJcGVyZl9vdXRwdXRfY29weShoYW5kbGUsIGRhdGEtPmNhbGxjaGFpbiwgc2l6ZSk7CisJCX0gZWxzZSB7CisJCQl1NjQgbnIgPSAwOworCQkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgbnIpOworCQl9CisJfQorCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CisJCWlmIChkYXRhLT5yYXcpIHsKKwkJCXBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIGRhdGEtPnJhdy0+c2l6ZSk7CisJCQlwZXJmX291dHB1dF9jb3B5KGhhbmRsZSwgZGF0YS0+cmF3LT5kYXRhLAorCQkJCQkgZGF0YS0+cmF3LT5zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCB7CisJCQkJdTMyCXNpemU7CisJCQkJdTMyCWRhdGE7CisJCQl9IHJhdyA9IHsKKwkJCQkuc2l6ZSA9IHNpemVvZih1MzIpLAorCQkJCS5kYXRhID0gMCwKKwkJCX07CisJCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCByYXcpOworCQl9CisJfQorfQorCit2b2lkIHBlcmZfcHJlcGFyZV9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZWFkZXIsCisJCQkgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCisJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXU2NCBzYW1wbGVfdHlwZSA9IGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlOworCisJZGF0YS0+dHlwZSA9IHNhbXBsZV90eXBlOworCisJaGVhZGVyLT50eXBlID0gUEVSRl9SRUNPUkRfU0FNUExFOworCWhlYWRlci0+c2l6ZSA9IHNpemVvZigqaGVhZGVyKTsKKworCWhlYWRlci0+bWlzYyA9IDA7CisJaGVhZGVyLT5taXNjIHw9IHBlcmZfbWlzY19mbGFncyhyZWdzKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKSB7CisJCWRhdGEtPmlwID0gcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+aXApOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkgeworCQkvKiBuYW1lc3BhY2UgaXNzdWVzICovCisJCWRhdGEtPnRpZF9lbnRyeS5waWQgPSBwZXJmX2V2ZW50X3BpZChldmVudCwgY3VycmVudCk7CisJCWRhdGEtPnRpZF9lbnRyeS50aWQgPSBwZXJmX2V2ZW50X3RpZChldmVudCwgY3VycmVudCk7CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT50aWRfZW50cnkpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpIHsKKwkJZGF0YS0+dGltZSA9IHBlcmZfY2xvY2soKTsKKworCQloZWFkZXItPnNpemUgKz0gc2l6ZW9mKGRhdGEtPnRpbWUpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCisJCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+YWRkcik7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkgeworCQlkYXRhLT5pZCA9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpOworCisJCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+aWQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkgeworCQlkYXRhLT5zdHJlYW1faWQgPSBldmVudC0+aWQ7CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT5zdHJlYW1faWQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkgeworCQlkYXRhLT5jcHVfZW50cnkuY3B1CQk9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJCWRhdGEtPmNwdV9lbnRyeS5yZXNlcnZlZAk9IDA7CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT5jcHVfZW50cnkpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkKKwkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT5wZXJpb2QpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVBRCkKKwkJaGVhZGVyLT5zaXplICs9IHBlcmZfZXZlbnRfcmVhZF9zaXplKGV2ZW50KTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgeworCQlpbnQgc2l6ZSA9IDE7CisKKwkJZGF0YS0+Y2FsbGNoYWluID0gcGVyZl9jYWxsY2hhaW4ocmVncyk7CisKKwkJaWYgKGRhdGEtPmNhbGxjaGFpbikKKwkJCXNpemUgKz0gZGF0YS0+Y2FsbGNoYWluLT5ucjsKKworCQloZWFkZXItPnNpemUgKz0gc2l6ZSAqIHNpemVvZih1NjQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgeworCQlpbnQgc2l6ZSA9IHNpemVvZih1MzIpOworCisJCWlmIChkYXRhLT5yYXcpCisJCQlzaXplICs9IGRhdGEtPnJhdy0+c2l6ZTsKKwkJZWxzZQorCQkJc2l6ZSArPSBzaXplb2YodTMyKTsKKworCQlXQVJOX09OX09OQ0Uoc2l6ZSAmIChzaXplb2YodTY0KS0xKSk7CisJCWhlYWRlci0+c2l6ZSArPSBzaXplOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9vdXRwdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbm1pLAorCQkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisKKwlwZXJmX3ByZXBhcmVfc2FtcGxlKCZoZWFkZXIsIGRhdGEsIGV2ZW50LCByZWdzKTsKKworCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwgaGVhZGVyLnNpemUsIG5taSwgMSkpCisJCXJldHVybjsKKworCXBlcmZfb3V0cHV0X3NhbXBsZSgmaGFuZGxlLCAmaGVhZGVyLCBkYXRhLCBldmVudCk7CisKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Cit9CisKKy8qCisgKiByZWFkIGV2ZW50X2lkCisgKi8KKworc3RydWN0IHBlcmZfcmVhZF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKworCXUzMgkJCQlwaWQ7CisJdTMyCQkJCXRpZDsKK307CisKK3N0YXRpYyB2b2lkCitwZXJmX2V2ZW50X3JlYWRfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX3JlYWRfZXZlbnQgcmVhZF9ldmVudCA9IHsKKwkJLmhlYWRlciA9IHsKKwkJCS50eXBlID0gUEVSRl9SRUNPUkRfUkVBRCwKKwkJCS5taXNjID0gMCwKKwkJCS5zaXplID0gc2l6ZW9mKHJlYWRfZXZlbnQpICsgcGVyZl9ldmVudF9yZWFkX3NpemUoZXZlbnQpLAorCQl9LAorCQkucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIHRhc2spLAorCQkudGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIHRhc2spLAorCX07CisJaW50IHJldDsKKworCXJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCByZWFkX2V2ZW50LmhlYWRlci5zaXplLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgcmVhZF9ldmVudCk7CisJcGVyZl9vdXRwdXRfcmVhZCgmaGFuZGxlLCBldmVudCk7CisKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Cit9CisKKy8qCisgKiB0YXNrIHRyYWNraW5nIC0tIGZvcmsvZXhpdAorICoKKyAqIGVuYWJsZWQgYnk6IGF0dHIuY29tbSB8IGF0dHIubW1hcCB8IGF0dHIudGFzaworICovCisKK3N0cnVjdCBwZXJmX3Rhc2tfZXZlbnQgeworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRhc2s7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dAkqdGFza19jdHg7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCisJCXUzMgkJCQlwaWQ7CisJCXUzMgkJCQlwcGlkOworCQl1MzIJCQkJdGlkOworCQl1MzIJCQkJcHRpZDsKKwkJdTY0CQkJCXRpbWU7CisJfSBldmVudF9pZDsKK307CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfdGFza19vdXRwdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSAgICAgc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSB0YXNrX2V2ZW50LT50YXNrOworCWludCByZXQ7CisKKwlzaXplICA9IHRhc2tfZXZlbnQtPmV2ZW50X2lkLmhlYWRlci5zaXplOworCXJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCBzaXplLCAwLCAwKTsKKworCWlmIChyZXQpCisJCXJldHVybjsKKworCXRhc2tfZXZlbnQtPmV2ZW50X2lkLnBpZCA9IHBlcmZfZXZlbnRfcGlkKGV2ZW50LCB0YXNrKTsKKwl0YXNrX2V2ZW50LT5ldmVudF9pZC5wcGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIGN1cnJlbnQpOworCisJdGFza19ldmVudC0+ZXZlbnRfaWQudGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIHRhc2spOworCXRhc2tfZXZlbnQtPmV2ZW50X2lkLnB0aWQgPSBwZXJmX2V2ZW50X3RpZChldmVudCwgY3VycmVudCk7CisKKwl0YXNrX2V2ZW50LT5ldmVudF9pZC50aW1lID0gcGVyZl9jbG9jaygpOworCisJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIHRhc2tfZXZlbnQtPmV2ZW50X2lkKTsKKworCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKK30KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3Rhc2tfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmIChldmVudC0+YXR0ci5jb21tIHx8IGV2ZW50LT5hdHRyLm1tYXAgfHwgZXZlbnQtPmF0dHIudGFzaykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF90YXNrX2N0eChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkJICBzdHJ1Y3QgcGVyZl90YXNrX2V2ZW50ICp0YXNrX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgeworCQlpZiAocGVyZl9ldmVudF90YXNrX21hdGNoKGV2ZW50KSkKKwkJCXBlcmZfZXZlbnRfdGFza19vdXRwdXQoZXZlbnQsIHRhc2tfZXZlbnQpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF90YXNrX2V2ZW50KHN0cnVjdCBwZXJmX3Rhc2tfZXZlbnQgKnRhc2tfZXZlbnQpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSB0YXNrX2V2ZW50LT50YXNrX2N0eDsKKworCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlwZXJmX2V2ZW50X3Rhc2tfY3R4KCZjcHVjdHgtPmN0eCwgdGFza19ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKCFjdHgpCisJCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrX2V2ZW50LT50YXNrLT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpCisJCXBlcmZfZXZlbnRfdGFza19jdHgoY3R4LCB0YXNrX2V2ZW50KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnRhc2tfY3R4LAorCQkJICAgICAgaW50IG5ldykKK3sKKwlzdHJ1Y3QgcGVyZl90YXNrX2V2ZW50IHRhc2tfZXZlbnQ7CisKKwlpZiAoIWF0b21pY19yZWFkKCZucl9jb21tX2V2ZW50cykgJiYKKwkgICAgIWF0b21pY19yZWFkKCZucl9tbWFwX2V2ZW50cykgJiYKKwkgICAgIWF0b21pY19yZWFkKCZucl90YXNrX2V2ZW50cykpCisJCXJldHVybjsKKworCXRhc2tfZXZlbnQgPSAoc3RydWN0IHBlcmZfdGFza19ldmVudCl7CisJCS50YXNrCSAgPSB0YXNrLAorCQkudGFza19jdHggPSB0YXNrX2N0eCwKKwkJLmV2ZW50X2lkICAgID0geworCQkJLmhlYWRlciA9IHsKKwkJCQkudHlwZSA9IG5ldyA/IFBFUkZfUkVDT1JEX0ZPUksgOiBQRVJGX1JFQ09SRF9FWElULAorCQkJCS5taXNjID0gMCwKKwkJCQkuc2l6ZSA9IHNpemVvZih0YXNrX2V2ZW50LmV2ZW50X2lkKSwKKwkJCX0sCisJCQkvKiAucGlkICAqLworCQkJLyogLnBwaWQgKi8KKwkJCS8qIC50aWQgICovCisJCQkvKiAucHRpZCAqLworCQl9LAorCX07CisKKwlwZXJmX2V2ZW50X3Rhc2tfZXZlbnQoJnRhc2tfZXZlbnQpOworfQorCit2b2lkIHBlcmZfZXZlbnRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcGVyZl9ldmVudF90YXNrKHRhc2ssIE5VTEwsIDEpOworfQorCisvKgorICogY29tbSB0cmFja2luZworICovCisKK3N0cnVjdCBwZXJmX2NvbW1fZXZlbnQgeworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKKwljaGFyCQkJKmNvbW07CisJaW50CQkJY29tbV9zaXplOworCisJc3RydWN0IHsKKwkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKworCQl1MzIJCQkJcGlkOworCQl1MzIJCQkJdGlkOworCX0gZXZlbnRfaWQ7Cit9OworCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NvbW1fb3V0cHV0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgICAgIHN0cnVjdCBwZXJmX2NvbW1fZXZlbnQgKmNvbW1fZXZlbnQpCit7CisJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJaW50IHNpemUgPSBjb21tX2V2ZW50LT5ldmVudF9pZC5oZWFkZXIuc2l6ZTsKKwlpbnQgcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsIHNpemUsIDAsIDApOworCisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJY29tbV9ldmVudC0+ZXZlbnRfaWQucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIGNvbW1fZXZlbnQtPnRhc2spOworCWNvbW1fZXZlbnQtPmV2ZW50X2lkLnRpZCA9IHBlcmZfZXZlbnRfdGlkKGV2ZW50LCBjb21tX2V2ZW50LT50YXNrKTsKKworCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBjb21tX2V2ZW50LT5ldmVudF9pZCk7CisJcGVyZl9vdXRwdXRfY29weSgmaGFuZGxlLCBjb21tX2V2ZW50LT5jb21tLAorCQkJCSAgIGNvbW1fZXZlbnQtPmNvbW1fc2l6ZSk7CisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT5hdHRyLmNvbW0pCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY29tbV9jdHgoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkJCSAgc3RydWN0IHBlcmZfY29tbV9ldmVudCAqY29tbV9ldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9SVU5OSU5HIHx8IGxpc3RfZW1wdHkoJmN0eC0+ZXZlbnRfbGlzdCkpCisJCXJldHVybjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKKwkJaWYgKHBlcmZfZXZlbnRfY29tbV9tYXRjaChldmVudCkpCisJCQlwZXJmX2V2ZW50X2NvbW1fb3V0cHV0KGV2ZW50LCBjb21tX2V2ZW50KTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY29tbV9ldmVudChzdHJ1Y3QgcGVyZl9jb21tX2V2ZW50ICpjb21tX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCXVuc2lnbmVkIGludCBzaXplOworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKworCW1lbXNldChjb21tLCAwLCBzaXplb2YoY29tbSkpOworCXN0cm5jcHkoY29tbSwgY29tbV9ldmVudC0+dGFzay0+Y29tbSwgc2l6ZW9mKGNvbW0pKTsKKwlzaXplID0gQUxJR04oc3RybGVuKGNvbW0pKzEsIHNpemVvZih1NjQpKTsKKworCWNvbW1fZXZlbnQtPmNvbW0gPSBjb21tOworCWNvbW1fZXZlbnQtPmNvbW1fc2l6ZSA9IHNpemU7CisKKwljb21tX2V2ZW50LT5ldmVudF9pZC5oZWFkZXIuc2l6ZSA9IHNpemVvZihjb21tX2V2ZW50LT5ldmVudF9pZCkgKyBzaXplOworCisJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXBlcmZfZXZlbnRfY29tbV9jdHgoJmNwdWN0eC0+Y3R4LCBjb21tX2V2ZW50KTsKKwlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwkvKgorCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCisJICogZXZlbnRzIGVuZHMgdXAgaW4uCisJICovCisJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CisJaWYgKGN0eCkKKwkJcGVyZl9ldmVudF9jb21tX2N0eChjdHgsIGNvbW1fZXZlbnQpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCit2b2lkIHBlcmZfZXZlbnRfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHBlcmZfY29tbV9ldmVudCBjb21tX2V2ZW50OworCisJaWYgKHRhc2stPnBlcmZfZXZlbnRfY3R4cCkKKwkJcGVyZl9ldmVudF9lbmFibGVfb25fZXhlYyh0YXNrKTsKKworCWlmICghYXRvbWljX3JlYWQoJm5yX2NvbW1fZXZlbnRzKSkKKwkJcmV0dXJuOworCisJY29tbV9ldmVudCA9IChzdHJ1Y3QgcGVyZl9jb21tX2V2ZW50KXsKKwkJLnRhc2sJPSB0YXNrLAorCQkvKiAuY29tbSAgICAgICovCisJCS8qIC5jb21tX3NpemUgKi8KKwkJLmV2ZW50X2lkICA9IHsKKwkJCS5oZWFkZXIgPSB7CisJCQkJLnR5cGUgPSBQRVJGX1JFQ09SRF9DT01NLAorCQkJCS5taXNjID0gMCwKKwkJCQkvKiAuc2l6ZSAqLworCQkJfSwKKwkJCS8qIC5waWQgKi8KKwkJCS8qIC50aWQgKi8KKwkJfSwKKwl9OworCisJcGVyZl9ldmVudF9jb21tX2V2ZW50KCZjb21tX2V2ZW50KTsKK30KKworLyoKKyAqIG1tYXAgdHJhY2tpbmcKKyAqLworCitzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50IHsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKnZtYTsKKworCWNvbnN0IGNoYXIJCSpmaWxlX25hbWU7CisJaW50CQkJZmlsZV9zaXplOworCisJc3RydWN0IHsKKwkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKKworCQl1MzIJCQkJcGlkOworCQl1MzIJCQkJdGlkOworCQl1NjQJCQkJc3RhcnQ7CisJCXU2NAkJCQlsZW47CisJCXU2NAkJCQlwZ29mZjsKKwl9IGV2ZW50X2lkOworfTsKKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9tbWFwX291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCWludCBzaXplID0gbW1hcF9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemU7CisJaW50IHJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCBzaXplLCAwLCAwKTsKKworCWlmIChyZXQpCisJCXJldHVybjsKKworCW1tYXBfZXZlbnQtPmV2ZW50X2lkLnBpZCA9IHBlcmZfZXZlbnRfcGlkKGV2ZW50LCBjdXJyZW50KTsKKwltbWFwX2V2ZW50LT5ldmVudF9pZC50aWQgPSBwZXJmX2V2ZW50X3RpZChldmVudCwgY3VycmVudCk7CisKKwlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgbW1hcF9ldmVudC0+ZXZlbnRfaWQpOworCXBlcmZfb3V0cHV0X2NvcHkoJmhhbmRsZSwgbW1hcF9ldmVudC0+ZmlsZV9uYW1lLAorCQkJCSAgIG1tYXBfZXZlbnQtPmZpbGVfc2l6ZSk7CisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfbW1hcF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKK3sKKwlpZiAoZXZlbnQtPmF0dHIubW1hcCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9tbWFwX2N0eChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkJICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgeworCQlpZiAocGVyZl9ldmVudF9tbWFwX21hdGNoKGV2ZW50LCBtbWFwX2V2ZW50KSkKKwkJCXBlcmZfZXZlbnRfbW1hcF9vdXRwdXQoZXZlbnQsIG1tYXBfZXZlbnQpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9tbWFwX2V2ZW50KHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtbWFwX2V2ZW50LT52bWE7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJdW5zaWduZWQgaW50IHNpemU7CisJY2hhciB0bXBbMTZdOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisJY29uc3QgY2hhciAqbmFtZTsKKworCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKKworCWlmIChmaWxlKSB7CisJCS8qCisJCSAqIGRfcGF0aCB3b3JrcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBiYWNrd2FyZHMsIHNvIHdlCisJCSAqIG5lZWQgdG8gYWRkIGVub3VnaCB6ZXJvIGJ5dGVzIGFmdGVyIHRoZSBzdHJpbmcgdG8gaGFuZGxlCisJCSAqIHRoZSA2NGJpdCBhbGlnbm1lbnQgd2UgZG8gbGF0ZXIuCisJCSAqLworCQlidWYgPSBremFsbG9jKFBBVEhfTUFYICsgc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikgeworCQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiLy9lbm9tZW0iLCBzaXplb2YodG1wKSk7CisJCQlnb3RvIGdvdF9uYW1lOworCQl9CisJCW5hbWUgPSBkX3BhdGgoJmZpbGUtPmZfcGF0aCwgYnVmLCBQQVRIX01BWCk7CisJCWlmIChJU19FUlIobmFtZSkpIHsKKwkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIi8vdG9vbG9uZyIsIHNpemVvZih0bXApKTsKKwkJCWdvdG8gZ290X25hbWU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYXJjaF92bWFfbmFtZShtbWFwX2V2ZW50LT52bWEpKSB7CisJCQluYW1lID0gc3RybmNweSh0bXAsIGFyY2hfdm1hX25hbWUobW1hcF9ldmVudC0+dm1hKSwKKwkJCQkgICAgICAgc2l6ZW9mKHRtcCkpOworCQkJZ290byBnb3RfbmFtZTsKKwkJfQorCisJCWlmICghdm1hLT52bV9tbSkgeworCQkJbmFtZSA9IHN0cm5jcHkodG1wLCAiW3Zkc29dIiwgc2l6ZW9mKHRtcCkpOworCQkJZ290byBnb3RfbmFtZTsKKwkJfQorCisJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIi8vYW5vbiIsIHNpemVvZih0bXApKTsKKwkJZ290byBnb3RfbmFtZTsKKwl9CisKK2dvdF9uYW1lOgorCXNpemUgPSBBTElHTihzdHJsZW4obmFtZSkrMSwgc2l6ZW9mKHU2NCkpOworCisJbW1hcF9ldmVudC0+ZmlsZV9uYW1lID0gbmFtZTsKKwltbWFwX2V2ZW50LT5maWxlX3NpemUgPSBzaXplOworCisJbW1hcF9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemUgPSBzaXplb2YobW1hcF9ldmVudC0+ZXZlbnRfaWQpICsgc2l6ZTsKKworCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwlwZXJmX2V2ZW50X21tYXBfY3R4KCZjcHVjdHgtPmN0eCwgbW1hcF9ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJLyoKKwkgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggb2YgdGhlIGNoaWxkIGNvbnRleHRzIHRoZQorCSAqIGV2ZW50cyBlbmRzIHVwIGluLgorCSAqLworCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpCisJCXBlcmZfZXZlbnRfbW1hcF9jdHgoY3R4LCBtbWFwX2V2ZW50KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWtmcmVlKGJ1Zik7Cit9CisKK3ZvaWQgX19wZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHBlcmZfbW1hcF9ldmVudCBtbWFwX2V2ZW50OworCisJaWYgKCFhdG9taWNfcmVhZCgmbnJfbW1hcF9ldmVudHMpKQorCQlyZXR1cm47CisKKwltbWFwX2V2ZW50ID0gKHN0cnVjdCBwZXJmX21tYXBfZXZlbnQpeworCQkudm1hCT0gdm1hLAorCQkvKiAuZmlsZV9uYW1lICovCisJCS8qIC5maWxlX3NpemUgKi8KKwkJLmV2ZW50X2lkICA9IHsKKwkJCS5oZWFkZXIgPSB7CisJCQkJLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQLAorCQkJCS5taXNjID0gMCwKKwkJCQkvKiAuc2l6ZSAqLworCQkJfSwKKwkJCS8qIC5waWQgKi8KKwkJCS8qIC50aWQgKi8KKwkJCS5zdGFydCAgPSB2bWEtPnZtX3N0YXJ0LAorCQkJLmxlbiAgICA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCS5wZ29mZiAgPSB2bWEtPnZtX3Bnb2ZmLAorCQl9LAorCX07CisKKwlwZXJmX2V2ZW50X21tYXBfZXZlbnQoJm1tYXBfZXZlbnQpOworfQorCisvKgorICogSVJRIHRocm90dGxlIGxvZ2dpbmcKKyAqLworCitzdGF0aWMgdm9pZCBwZXJmX2xvZ190aHJvdHRsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBlbmFibGUpCit7CisJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJaW50IHJldDsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJCXU2NAkJCQl0aW1lOworCQl1NjQJCQkJaWQ7CisJCXU2NAkJCQlzdHJlYW1faWQ7CisJfSB0aHJvdHRsZV9ldmVudCA9IHsKKwkJLmhlYWRlciA9IHsKKwkJCS50eXBlID0gUEVSRl9SRUNPUkRfVEhST1RUTEUsCisJCQkubWlzYyA9IDAsCisJCQkuc2l6ZSA9IHNpemVvZih0aHJvdHRsZV9ldmVudCksCisJCX0sCisJCS50aW1lCQk9IHBlcmZfY2xvY2soKSwKKwkJLmlkCQk9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpLAorCQkuc3RyZWFtX2lkCT0gZXZlbnQtPmlkLAorCX07CisKKwlpZiAoZW5hYmxlKQorCQl0aHJvdHRsZV9ldmVudC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX1VOVEhST1RUTEU7CisKKwlyZXQgPSBwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwgc2l6ZW9mKHRocm90dGxlX2V2ZW50KSwgMSwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIHRocm90dGxlX2V2ZW50KTsKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Cit9CisKKy8qCisgKiBHZW5lcmljIGV2ZW50IG92ZXJmbG93IGhhbmRsaW5nLCBzYW1wbGluZy4KKyAqLworCitzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBubWksCisJCQkJICAgaW50IHRocm90dGxlLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKKwkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgZXZlbnRzID0gYXRvbWljX3JlYWQoJmV2ZW50LT5ldmVudF9saW1pdCk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IHJldCA9IDA7CisKKwl0aHJvdHRsZSA9ICh0aHJvdHRsZSAmJiBldmVudC0+cG11LT51bnRocm90dGxlICE9IE5VTEwpOworCisJaWYgKCF0aHJvdHRsZSkgeworCQlod2MtPmludGVycnVwdHMrKzsKKwl9IGVsc2UgeworCQlpZiAoaHdjLT5pbnRlcnJ1cHRzICE9IE1BWF9JTlRFUlJVUFRTKSB7CisJCQlod2MtPmludGVycnVwdHMrKzsKKwkJCWlmIChIWiAqIGh3Yy0+aW50ZXJydXB0cyA+CisJCQkJCSh1NjQpc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUpIHsKKwkJCQlod2MtPmludGVycnVwdHMgPSBNQVhfSU5URVJSVVBUUzsKKwkJCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMCk7CisJCQkJcmV0ID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBLZWVwIHJlLWRpc2FibGluZyBldmVudHMgZXZlbiB0aG91Z2ggb24gdGhlIHByZXZpb3VzCisJCQkgKiBwYXNzIHdlIGRpc2FibGVkIGl0IC0ganVzdCBpbiBjYXNlIHdlIHJhY2VkIHdpdGggYQorCQkJICogc2NoZWQtaW4gYW5kIHRoZSBldmVudCBnb3QgZW5hYmxlZCBhZ2FpbjoKKwkJCSAqLworCQkJcmV0ID0gMTsKKwkJfQorCX0KKworCWlmIChldmVudC0+YXR0ci5mcmVxKSB7CisJCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7CisJCXM2NCBkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV9zdGFtcDsKKworCQlod2MtPmZyZXFfc3RhbXAgPSBub3c7CisKKwkJaWYgKGRlbHRhID4gMCAmJiBkZWx0YSA8IFRJQ0tfTlNFQykKKwkJCXBlcmZfYWRqdXN0X3BlcmlvZChldmVudCwgTlNFQ19QRVJfU0VDIC8gKGludClkZWx0YSk7CisJfQorCisJLyoKKwkgKiBYWFggZXZlbnRfbGltaXQgbWlnaHQgbm90IHF1aXRlIHdvcmsgYXMgZXhwZWN0ZWQgb24gaW5oZXJpdGVkCisJICogZXZlbnRzCisJICovCisKKwlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKKwlpZiAoZXZlbnRzICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJmV2ZW50LT5ldmVudF9saW1pdCkpIHsKKwkJcmV0ID0gMTsKKwkJZXZlbnQtPnBlbmRpbmdfa2lsbCA9IFBPTExfSFVQOworCQlpZiAobm1pKSB7CisJCQlldmVudC0+cGVuZGluZ19kaXNhYmxlID0gMTsKKwkJCXBlcmZfcGVuZGluZ19xdWV1ZSgmZXZlbnQtPnBlbmRpbmcsCisJCQkJCSAgIHBlcmZfcGVuZGluZ19ldmVudCk7CisJCX0gZWxzZQorCQkJcGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTsKKwl9CisKKwlwZXJmX2V2ZW50X291dHB1dChldmVudCwgbm1pLCBkYXRhLCByZWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBubWksCisJCQkgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCBubWksIDEsIGRhdGEsIHJlZ3MpOworfQorCisvKgorICogR2VuZXJpYyBzb2Z0d2FyZSBldmVudCBpbmZyYXN0cnVjdHVyZQorICovCisKKy8qCisgKiBXZSBkaXJlY3RseSBpbmNyZW1lbnQgZXZlbnQtPmNvdW50IGFuZCBrZWVwIGEgc2Vjb25kIHZhbHVlIGluCisgKiBldmVudC0+aHcucGVyaW9kX2xlZnQgdG8gY291bnQgaW50ZXJ2YWxzLiBUaGlzIHBlcmlvZCBldmVudAorICogaXMga2VwdCBpbiB0aGUgcmFuZ2UgWy1zYW1wbGVfcGVyaW9kLCAwXSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlCisgKiBzaWduIGFzIHRyaWdnZXIuCisgKi8KKworc3RhdGljIHU2NCBwZXJmX3N3ZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IHBlcmlvZCA9IGh3Yy0+bGFzdF9wZXJpb2Q7CisJdTY0IG5yLCBvZmZzZXQ7CisJczY0IG9sZCwgdmFsOworCisJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKworYWdhaW46CisJb2xkID0gdmFsID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiAwOworCisJbnIgPSBkaXY2NF91NjQocGVyaW9kICsgdmFsLCBwZXJpb2QpOworCW9mZnNldCA9IG5yICogcGVyaW9kOworCXZhbCAtPSBvZmZzZXQ7CisJaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cGVyaW9kX2xlZnQsIG9sZCwgdmFsKSAhPSBvbGQpCisJCWdvdG8gYWdhaW47CisKKwlyZXR1cm4gbnI7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgIGludCBubWksIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgdGhyb3R0bGUgPSAwOworCXU2NCBvdmVyZmxvdzsKKworCWRhdGEtPnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKKwlvdmVyZmxvdyA9IHBlcmZfc3dldmVudF9zZXRfcGVyaW9kKGV2ZW50KTsKKworCWlmIChod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpCisJCXJldHVybjsKKworCWZvciAoOyBvdmVyZmxvdzsgb3ZlcmZsb3ctLSkgeworCQlpZiAoX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCBubWksIHRocm90dGxlLAorCQkJCQkgICAgZGF0YSwgcmVncykpIHsKKwkJCS8qCisJCQkgKiBXZSBpbmhpYml0IHRoZSBvdmVyZmxvdyBmcm9tIGhhcHBlbmluZyB3aGVuCisJCQkgKiBod2MtPmludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCXRocm90dGxlID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfc3dldmVudF91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwkvKgorCSAqIE5vdGhpbmcgdG8gZG8sIHdlIGFscmVhZHkgcmVzZXQgaHdjLT5pbnRlcnJ1cHRzLgorCSAqLworfQorCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5yLAorCQkJICAgICAgIGludCBubWksIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJYXRvbWljNjRfYWRkKG5yLCAmZXZlbnQtPmNvdW50KTsKKworCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKQorCQlyZXR1cm47CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKworCWlmICghYXRvbWljNjRfYWRkX25lZ2F0aXZlKG5yLCAmaHdjLT5wZXJpb2RfbGVmdCkpCisJCXBlcmZfc3dldmVudF9vdmVyZmxvdyhldmVudCwgbm1pLCBkYXRhLCByZWdzKTsKK30KKworc3RhdGljIGludCBwZXJmX3N3ZXZlbnRfaXNfY291bnRpbmcoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCS8qCisJICogVGhlIGV2ZW50IGlzIGFjdGl2ZSwgd2UncmUgZ29vZCEKKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogVGhlIGV2ZW50IGlzIG9mZi9lcnJvciwgbm90IGNvdW50aW5nLgorCSAqLworCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoZSBldmVudCBpcyBpbmFjdGl2ZSwgaWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlCisJICogd2UncmUgcGFydCBvZiBhIGdyb3VwIHRoYXQgZGlkbid0IG1ha2UgaXQgb24gdGhlICdwbXUnLAorCSAqIG5vdCBjb3VudGluZy4KKwkgKi8KKwlpZiAoZXZlbnQtPmN0eC0+aXNfYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2UncmUgaW5hY3RpdmUgYW5kIHRoZSBjb250ZXh0IGlzIHRvbywgdGhpcyBtZWFucyB0aGUKKwkgKiB0YXNrIGlzIHNjaGVkdWxlZCBvdXQsIHdlJ3JlIGNvdW50aW5nIGV2ZW50cyB0aGF0IGhhcHBlbgorCSAqIHRvIHVzLCBsaWtlIG1pZ3JhdGlvbiBldmVudHMuCisJICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9zd2V2ZW50X21hdGNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQllbnVtIHBlcmZfdHlwZV9pZCB0eXBlLAorCQkJCXUzMiBldmVudF9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKCFwZXJmX3N3ZXZlbnRfaXNfY291bnRpbmcoZXZlbnQpKQorCQlyZXR1cm4gMDsKKworCWlmIChldmVudC0+YXR0ci50eXBlICE9IHR5cGUpCisJCXJldHVybiAwOworCWlmIChldmVudC0+YXR0ci5jb25maWcgIT0gZXZlbnRfaWQpCisJCXJldHVybiAwOworCisJaWYgKHJlZ3MpIHsKKwkJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlciAmJiB1c2VyX21vZGUocmVncykpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgJiYgIXVzZXJfbW9kZShyZWdzKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfY3R4X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJCQkgICAgIGVudW0gcGVyZl90eXBlX2lkIHR5cGUsCisJCQkJICAgICB1MzIgZXZlbnRfaWQsIHU2NCBuciwgaW50IG5taSwKKwkJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCisJaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQorCQlyZXR1cm47CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CisJCWlmIChwZXJmX3N3ZXZlbnRfbWF0Y2goZXZlbnQsIHR5cGUsIGV2ZW50X2lkLCByZWdzKSkKKwkJCXBlcmZfc3dldmVudF9hZGQoZXZlbnQsIG5yLCBubWksIGRhdGEsIHJlZ3MpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIGludCAqcGVyZl9zd2V2ZW50X3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCit7CisJaWYgKGluX25taSgpKQorCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzNdOworCisJaWYgKGluX2lycSgpKQorCQlyZXR1cm4gJmNwdWN0eC0+cmVjdXJzaW9uWzJdOworCisJaWYgKGluX3NvZnRpcnEoKSkKKwkJcmV0dXJuICZjcHVjdHgtPnJlY3Vyc2lvblsxXTsKKworCXJldHVybiAmY3B1Y3R4LT5yZWN1cnNpb25bMF07Cit9CisKK3N0YXRpYyB2b2lkIGRvX3BlcmZfc3dfZXZlbnQoZW51bSBwZXJmX3R5cGVfaWQgdHlwZSwgdTMyIGV2ZW50X2lkLAorCQkJCSAgICB1NjQgbnIsIGludCBubWksCisJCQkJICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCWludCAqcmVjdXJzaW9uID0gcGVyZl9zd2V2ZW50X3JlY3Vyc2lvbl9jb250ZXh0KGNwdWN0eCk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCisJaWYgKCpyZWN1cnNpb24pCisJCWdvdG8gb3V0OworCisJKCpyZWN1cnNpb24pKys7CisJYmFycmllcigpOworCisJcGVyZl9zd2V2ZW50X2N0eF9ldmVudCgmY3B1Y3R4LT5jdHgsIHR5cGUsIGV2ZW50X2lkLAorCQkJCSBuciwgbm1pLCBkYXRhLCByZWdzKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJLyoKKwkgKiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggb2YgdGhlIGNoaWxkIGNvbnRleHRzIHRoZQorCSAqIGV2ZW50cyBlbmRzIHVwIGluLgorCSAqLworCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2V2ZW50X2N0eHApOworCWlmIChjdHgpCisJCXBlcmZfc3dldmVudF9jdHhfZXZlbnQoY3R4LCB0eXBlLCBldmVudF9pZCwgbnIsIG5taSwgZGF0YSwgcmVncyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwliYXJyaWVyKCk7CisJKCpyZWN1cnNpb24pLS07CisKK291dDoKKwlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKK30KKwordm9pZCBfX3BlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCisJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGEgPSB7CisJCS5hZGRyID0gYWRkciwKKwl9OworCisJZG9fcGVyZl9zd19ldmVudChQRVJGX1RZUEVfU09GVFdBUkUsIGV2ZW50X2lkLCBuciwgbm1pLAorCQkJCSZkYXRhLCByZWdzKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworfQorCitzdGF0aWMgaW50IHBlcmZfc3dldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgeworCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOworCQlwZXJmX3N3ZXZlbnRfc2V0X3BlcmlvZChldmVudCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBlcmZfb3BzX2dlbmVyaWMgPSB7CisJLmVuYWJsZQkJPSBwZXJmX3N3ZXZlbnRfZW5hYmxlLAorCS5kaXNhYmxlCT0gcGVyZl9zd2V2ZW50X2Rpc2FibGUsCisJLnJlYWQJCT0gcGVyZl9zd2V2ZW50X3JlYWQsCisJLnVudGhyb3R0bGUJPSBwZXJmX3N3ZXZlbnRfdW50aHJvdHRsZSwKK307CisKKy8qCisgKiBocnRpbWVyIGJhc2VkIHN3ZXZlbnQgY2FsbGJhY2sKKyAqLworCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2V2ZW50X2hydGltZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpCit7CisJZW51bSBocnRpbWVyX3Jlc3RhcnQgcmV0ID0gSFJUSU1FUl9SRVNUQVJUOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXU2NCBwZXJpb2Q7CisKKwlldmVudAk9IGNvbnRhaW5lcl9vZihocnRpbWVyLCBzdHJ1Y3QgcGVyZl9ldmVudCwgaHcuaHJ0aW1lcik7CisJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CisKKwlkYXRhLmFkZHIgPSAwOworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKwkvKgorCSAqIEluIGNhc2Ugd2UgZXhjbHVkZSBrZXJuZWwgSVBzIG9yIGFyZSBzb21laG93IG5vdCBpbiBpbnRlcnJ1cHQKKwkgKiBjb250ZXh0LCBwcm92aWRlIHRoZSBuZXh0IGJlc3QgdGhpbmcsIHRoZSB1c2VyIElQLgorCSAqLworCWlmICgoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgfHwgIXJlZ3MpICYmCisJCQkhZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyKQorCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCisJaWYgKHJlZ3MpIHsKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOworCX0KKworCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKTsKKwlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKHBlcmlvZCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNvZnR3YXJlIGV2ZW50OiBjcHUgd2FsbCB0aW1lIGNsb2NrCisgKi8KKworc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlzNjQgcHJldjsKKwl1NjQgbm93OworCisJbm93ID0gY3B1X2Nsb2NrKGNwdSk7CisJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBub3cpOworCWF0b21pYzY0X2FkZChub3cgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKK30KKworc3RhdGljIGludCBjcHVfY2xvY2tfcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsIGNwdV9jbG9jayhjcHUpKTsKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcHVfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCisJCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJY3B1X2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJY3B1X2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcGVyZl9vcHNfY3B1X2Nsb2NrID0geworCS5lbmFibGUJCT0gY3B1X2Nsb2NrX3BlcmZfZXZlbnRfZW5hYmxlLAorCS5kaXNhYmxlCT0gY3B1X2Nsb2NrX3BlcmZfZXZlbnRfZGlzYWJsZSwKKwkucmVhZAkJPSBjcHVfY2xvY2tfcGVyZl9ldmVudF9yZWFkLAorfTsKKworLyoKKyAqIFNvZnR3YXJlIGV2ZW50OiB0YXNrIHRpbWUgY2xvY2sKKyAqLworCitzdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5vdykKK3sKKwl1NjQgcHJldjsKKwlzNjQgZGVsdGE7CisKKwlwcmV2ID0gYXRvbWljNjRfeGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIG5vdyk7CisJZGVsdGEgPSBub3cgLSBwcmV2OworCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgdGFza19jbG9ja19wZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJdTY0IG5vdzsKKworCW5vdyA9IGV2ZW50LT5jdHgtPnRpbWU7CisKKwlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgbm93KTsKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKQorCQlocnRpbWVyX2NhbmNlbCgmZXZlbnQtPmh3LmhydGltZXIpOworCXRhc2tfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGV2ZW50LT5jdHgtPnRpbWUpOworCit9CisKK3N0YXRpYyB2b2lkIHRhc2tfY2xvY2tfcGVyZl9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1NjQgdGltZTsKKworCWlmICghaW5fbm1pKCkpIHsKKwkJdXBkYXRlX2NvbnRleHRfdGltZShldmVudC0+Y3R4KTsKKwkJdGltZSA9IGV2ZW50LT5jdHgtPnRpbWU7CisJfSBlbHNlIHsKKwkJdTY0IG5vdyA9IHBlcmZfY2xvY2soKTsKKwkJdTY0IGRlbHRhID0gbm93IC0gZXZlbnQtPmN0eC0+dGltZXN0YW1wOworCQl0aW1lID0gZXZlbnQtPmN0eC0+dGltZSArIGRlbHRhOworCX0KKworCXRhc2tfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIHRpbWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSBwZXJmX29wc190YXNrX2Nsb2NrID0geworCS5lbmFibGUJCT0gdGFza19jbG9ja19wZXJmX2V2ZW50X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlLAorCS5yZWFkCQk9IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9yZWFkLAorfTsKKworI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCit2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsCisJCQkgIGludCBlbnRyeV9zaXplKQoreworCXN0cnVjdCBwZXJmX3Jhd19yZWNvcmQgcmF3ID0geworCQkuc2l6ZSA9IGVudHJ5X3NpemUsCisJCS5kYXRhID0gcmVjb3JkLAorCX07CisKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhID0geworCQkuYWRkciA9IGFkZHIsCisJCS5yYXcgPSAmcmF3LAorCX07CisKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOworCisJaWYgKCFyZWdzKQorCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCisJZG9fcGVyZl9zd19ldmVudChQRVJGX1RZUEVfVFJBQ0VQT0lOVCwgZXZlbnRfaWQsIGNvdW50LCAxLAorCQkJCSZkYXRhLCByZWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHBfZXZlbnQpOworCitleHRlcm4gaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZShpbnQpOworCitzdGF0aWMgdm9pZCB0cF9wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgKnRwX3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJLyoKKwkgKiBSYXcgdHJhY2Vwb2ludCBkYXRhIGlzIGEgc2V2ZXJlIGRhdGEgbGVhaywgb25seSBhbGxvdyByb290IHRvCisJICogaGF2ZSB0aGVzZS4KKwkgKi8KKwlpZiAoKGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSAmJgorCQkJcGVyZl9wYXJhbm9pZF90cmFjZXBvaW50X3JhdygpICYmCisJCQkhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKKworCWlmIChmdHJhY2VfcHJvZmlsZV9lbmFibGUoZXZlbnQtPmF0dHIuY29uZmlnKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlldmVudC0+ZGVzdHJveSA9IHRwX3BlcmZfZXZlbnRfZGVzdHJveTsKKworCXJldHVybiAmcGVyZl9vcHNfZ2VuZXJpYzsKK30KKyNlbHNlCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSAqdHBfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCithdG9taWNfdCBwZXJmX3N3ZXZlbnRfZW5hYmxlZFtQRVJGX0NPVU5UX1NXX01BWF07CisKK3N0YXRpYyB2b2lkIHN3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJdTY0IGV2ZW50X2lkID0gZXZlbnQtPmF0dHIuY29uZmlnOworCisJV0FSTl9PTihldmVudC0+cGFyZW50KTsKKworCWF0b21pY19kZWMoJnBlcmZfc3dldmVudF9lbmFibGVkW2V2ZW50X2lkXSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11ICpzd19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCBwbXUgKnBtdSA9IE5VTEw7CisJdTY0IGV2ZW50X2lkID0gZXZlbnQtPmF0dHIuY29uZmlnOworCisJLyoKKwkgKiBTb2Z0d2FyZSBldmVudHMgKGN1cnJlbnRseSkgY2FuJ3QgaW4gZ2VuZXJhbCBkaXN0aW5ndWlzaAorCSAqIGJldHdlZW4gdXNlciwga2VybmVsIGFuZCBoeXBlcnZpc29yIGV2ZW50cy4KKwkgKiBIb3dldmVyLCBjb250ZXh0IHN3aXRjaGVzIGFuZCBjcHUgbWlncmF0aW9ucyBhcmUgY29uc2lkZXJlZAorCSAqIHRvIGJlIGtlcm5lbCBldmVudHMsIGFuZCBwYWdlIGZhdWx0cyBhcmUgbmV2ZXIgaHlwZXJ2aXNvcgorCSAqIGV2ZW50cy4KKwkgKi8KKwlzd2l0Y2ggKGV2ZW50X2lkKSB7CisJY2FzZSBQRVJGX0NPVU5UX1NXX0NQVV9DTE9DSzoKKwkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKKworCQlicmVhazsKKwljYXNlIFBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSzoKKwkJLyoKKwkJICogSWYgdGhlIHVzZXIgaW5zdGFudGlhdGVzIHRoaXMgYXMgYSBwZXItY3B1IGV2ZW50LAorCQkgKiB1c2UgdGhlIGNwdV9jbG9jayBldmVudCBpbnN0ZWFkLgorCQkgKi8KKwkJaWYgKGV2ZW50LT5jdHgtPnRhc2spCisJCQlwbXUgPSAmcGVyZl9vcHNfdGFza19jbG9jazsKKwkJZWxzZQorCQkJcG11ID0gJnBlcmZfb3BzX2NwdV9jbG9jazsKKworCQlicmVhazsKKwljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFM6CisJY2FzZSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTjoKKwljYXNlIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKOgorCWNhc2UgUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTOgorCWNhc2UgUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUzoKKwkJaWYgKCFldmVudC0+cGFyZW50KSB7CisJCQlhdG9taWNfaW5jKCZwZXJmX3N3ZXZlbnRfZW5hYmxlZFtldmVudF9pZF0pOworCQkJZXZlbnQtPmRlc3Ryb3kgPSBzd19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisJCX0KKwkJcG11ID0gJnBlcmZfb3BzX2dlbmVyaWM7CisJCWJyZWFrOworCX0KKworCXJldHVybiBwbXU7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGV2ZW50IHN0cnVjdHVyZQorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKgorcGVyZl9ldmVudF9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkgICBpbnQgY3B1LAorCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCSAgIHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCisJCSAgIHN0cnVjdCBwZXJmX2V2ZW50ICpwYXJlbnRfZXZlbnQsCisJCSAgIGdmcF90IGdmcGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBwbXUgKnBtdTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKwlsb25nIGVycjsKKworCWV2ZW50ID0ga3phbGxvYyhzaXplb2YoKmV2ZW50KSwgZ2ZwZmxhZ3MpOworCWlmICghZXZlbnQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyoKKwkgKiBTaW5nbGUgZXZlbnRzIGFyZSB0aGVpciBvd24gZ3JvdXAgbGVhZGVycywgd2l0aCBhbgorCSAqIGVtcHR5IHNpYmxpbmcgbGlzdDoKKwkgKi8KKwlpZiAoIWdyb3VwX2xlYWRlcikKKwkJZ3JvdXBfbGVhZGVyID0gZXZlbnQ7CisKKwltdXRleF9pbml0KCZldmVudC0+Y2hpbGRfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZldmVudC0+Y2hpbGRfbGlzdCk7CisKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPmdyb3VwX2VudHJ5KTsKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPmV2ZW50X2VudHJ5KTsKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPnNpYmxpbmdfbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZlbnQtPndhaXRxKTsKKworCW11dGV4X2luaXQoJmV2ZW50LT5tbWFwX211dGV4KTsKKworCWV2ZW50LT5jcHUJCT0gY3B1OworCWV2ZW50LT5hdHRyCQk9ICphdHRyOworCWV2ZW50LT5ncm91cF9sZWFkZXIJPSBncm91cF9sZWFkZXI7CisJZXZlbnQtPnBtdQkJPSBOVUxMOworCWV2ZW50LT5jdHgJCT0gY3R4OworCWV2ZW50LT5vbmNwdQkJPSAtMTsKKworCWV2ZW50LT5wYXJlbnQJCT0gcGFyZW50X2V2ZW50OworCisJZXZlbnQtPm5zCQk9IGdldF9waWRfbnMoY3VycmVudC0+bnNwcm94eS0+cGlkX25zKTsKKwlldmVudC0+aWQJCT0gYXRvbWljNjRfaW5jX3JldHVybigmcGVyZl9ldmVudF9pZCk7CisKKwlldmVudC0+c3RhdGUJCT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRTsKKworCWlmIChhdHRyLT5kaXNhYmxlZCkKKwkJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CisKKwlwbXUgPSBOVUxMOworCisJaHdjID0gJmV2ZW50LT5odzsKKwlod2MtPnNhbXBsZV9wZXJpb2QgPSBhdHRyLT5zYW1wbGVfcGVyaW9kOworCWlmIChhdHRyLT5mcmVxICYmIGF0dHItPnNhbXBsZV9mcmVxKQorCQlod2MtPnNhbXBsZV9wZXJpb2QgPSAxOworCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisKKwlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisKKwkvKgorCSAqIHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBQRVJGX0ZPUk1BVF9HUk9VUCBvbiBpbmhlcml0ZWQgZXZlbnRzCisJICovCisJaWYgKGF0dHItPmluaGVyaXQgJiYgKGF0dHItPnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApKQorCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKKwljYXNlIFBFUkZfVFlQRV9SQVc6CisJY2FzZSBQRVJGX1RZUEVfSEFSRFdBUkU6CisJY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6CisJCXBtdSA9IGh3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBQRVJGX1RZUEVfU09GVFdBUkU6CisJCXBtdSA9IHN3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDoKKwkJcG11ID0gdHBfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Citkb25lOgorCWVyciA9IDA7CisJaWYgKCFwbXUpCisJCWVyciA9IC1FSU5WQUw7CisJZWxzZSBpZiAoSVNfRVJSKHBtdSkpCisJCWVyciA9IFBUUl9FUlIocG11KTsKKworCWlmIChlcnIpIHsKKwkJaWYgKGV2ZW50LT5ucykKKwkJCXB1dF9waWRfbnMoZXZlbnQtPm5zKTsKKwkJa2ZyZWUoZXZlbnQpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCWV2ZW50LT5wbXUgPSBwbXU7CisKKwlpZiAoIWV2ZW50LT5wYXJlbnQpIHsKKwkJYXRvbWljX2luYygmbnJfZXZlbnRzKTsKKwkJaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJCQlhdG9taWNfaW5jKCZucl9tbWFwX2V2ZW50cyk7CisJCWlmIChldmVudC0+YXR0ci5jb21tKQorCQkJYXRvbWljX2luYygmbnJfY29tbV9ldmVudHMpOworCQlpZiAoZXZlbnQtPmF0dHIudGFzaykKKwkJCWF0b21pY19pbmMoJm5yX3Rhc2tfZXZlbnRzKTsKKwl9CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9jb3B5X2F0dHIoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBfX3VzZXIgKnVhdHRyLAorCQkJICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQoreworCXUzMiBzaXplOworCWludCByZXQ7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhdHRyLCBQRVJGX0FUVFJfU0laRV9WRVIwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKgorCSAqIHplcm8gdGhlIGZ1bGwgc3RydWN0dXJlLCBzbyB0aGF0IGEgc2hvcnQgY29weSB3aWxsIGJlIG5pY2UuCisJICovCisJbWVtc2V0KGF0dHIsIDAsIHNpemVvZigqYXR0cikpOworCisJcmV0ID0gZ2V0X3VzZXIoc2l6ZSwgJnVhdHRyLT5zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNpemUgPiBQQUdFX1NJWkUpCS8qIHNpbGx5IGxhcmdlICovCisJCWdvdG8gZXJyX3NpemU7CisKKwlpZiAoIXNpemUpCQkvKiBhYmkgY29tcGF0ICovCisJCXNpemUgPSBQRVJGX0FUVFJfU0laRV9WRVIwOworCisJaWYgKHNpemUgPCBQRVJGX0FUVFJfU0laRV9WRVIwKQorCQlnb3RvIGVycl9zaXplOworCisJLyoKKwkgKiBJZiB3ZSdyZSBoYW5kZWQgYSBiaWdnZXIgc3RydWN0IHRoYW4gd2Uga25vdyBvZiwKKwkgKiBlbnN1cmUgYWxsIHRoZSB1bmtub3duIGJpdHMgYXJlIDAgLSBpLmUuIG5ldworCSAqIHVzZXItc3BhY2UgZG9lcyBub3QgcmVseSBvbiBhbnkga2VybmVsIGZlYXR1cmUKKwkgKiBleHRlbnNpb25zIHdlIGRvbnQga25vdyBhYm91dCB5ZXQuCisJICovCisJaWYgKHNpemUgPiBzaXplb2YoKmF0dHIpKSB7CisJCXVuc2lnbmVkIGNoYXIgX191c2VyICphZGRyOworCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqZW5kOworCQl1bnNpZ25lZCBjaGFyIHZhbDsKKworCQlhZGRyID0gKHZvaWQgX191c2VyICopdWF0dHIgKyBzaXplb2YoKmF0dHIpOworCQllbmQgID0gKHZvaWQgX191c2VyICopdWF0dHIgKyBzaXplOworCisJCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyKyspIHsKKwkJCXJldCA9IGdldF91c2VyKHZhbCwgYWRkcik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlpZiAodmFsKQorCQkJCWdvdG8gZXJyX3NpemU7CisJCX0KKwkJc2l6ZSA9IHNpemVvZigqYXR0cik7CisJfQorCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYXR0ciwgdWF0dHIsIHNpemUpOworCWlmIChyZXQpCisJCXJldHVybiAtRUZBVUxUOworCisJLyoKKwkgKiBJZiB0aGUgdHlwZSBleGlzdHMsIHRoZSBjb3JyZXNwb25kaW5nIGNyZWF0aW9uIHdpbGwgdmVyaWZ5CisJICogdGhlIGF0dHItPmNvbmZpZy4KKwkgKi8KKwlpZiAoYXR0ci0+dHlwZSA+PSBQRVJGX1RZUEVfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdHRyLT5fX3Jlc2VydmVkXzEgfHwgYXR0ci0+X19yZXNlcnZlZF8yIHx8IGF0dHItPl9fcmVzZXJ2ZWRfMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXR0ci0+c2FtcGxlX3R5cGUgJiB+KFBFUkZfU0FNUExFX01BWC0xKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXR0ci0+cmVhZF9mb3JtYXQgJiB+KFBFUkZfRk9STUFUX01BWC0xKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKK291dDoKKwlyZXR1cm4gcmV0OworCitlcnJfc2l6ZToKKwlwdXRfdXNlcihzaXplb2YoKmF0dHIpLCAmdWF0dHItPnNpemUpOworCXJldCA9IC1FMkJJRzsKKwlnb3RvIG91dDsKK30KKworaW50IHBlcmZfZXZlbnRfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBvdXRwdXRfZmQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKm91dHB1dF9ldmVudCA9IE5VTEw7CisJc3RydWN0IGZpbGUgKm91dHB1dF9maWxlID0gTlVMTDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqb2xkX291dHB1dDsKKwlpbnQgZnB1dF9uZWVkZWQgPSAwOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFvdXRwdXRfZmQpCisJCWdvdG8gc2V0OworCisJb3V0cHV0X2ZpbGUgPSBmZ2V0X2xpZ2h0KG91dHB1dF9mZCwgJmZwdXRfbmVlZGVkKTsKKwlpZiAoIW91dHB1dF9maWxlKQorCQlyZXR1cm4gLUVCQURGOworCisJaWYgKG91dHB1dF9maWxlLT5mX29wICE9ICZwZXJmX2ZvcHMpCisJCWdvdG8gb3V0OworCisJb3V0cHV0X2V2ZW50ID0gb3V0cHV0X2ZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIERvbid0IGNoYWluIG91dHB1dCBmZHMgKi8KKwlpZiAob3V0cHV0X2V2ZW50LT5vdXRwdXQpCisJCWdvdG8gb3V0OworCisJLyogRG9uJ3Qgc2V0IGFuIG91dHB1dCBmZCB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhbiBvdXRwdXQgY2hhbm5lbCAqLworCWlmIChldmVudC0+ZGF0YSkKKwkJZ290byBvdXQ7CisKKwlhdG9taWNfbG9uZ19pbmMoJm91dHB1dF9maWxlLT5mX2NvdW50KTsKKworc2V0OgorCW11dGV4X2xvY2soJmV2ZW50LT5tbWFwX211dGV4KTsKKwlvbGRfb3V0cHV0ID0gZXZlbnQtPm91dHB1dDsKKwlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPm91dHB1dCwgb3V0cHV0X2V2ZW50KTsKKwltdXRleF91bmxvY2soJmV2ZW50LT5tbWFwX211dGV4KTsKKworCWlmIChvbGRfb3V0cHV0KSB7CisJCS8qCisJCSAqIHdlIG5lZWQgdG8gbWFrZSBzdXJlIG5vIGV4aXN0aW5nIHBlcmZfb3V0cHV0XyooKQorCQkgKiBpcyBzdGlsbCByZWZlcmVuY2luZyB0aGlzIGV2ZW50LgorCQkgKi8KKwkJc3luY2hyb25pemVfcmN1KCk7CisJCWZwdXQob2xkX291dHB1dC0+ZmlscCk7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlmcHV0X2xpZ2h0KG91dHB1dF9maWxlLCBmcHV0X25lZWRlZCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzeXNfcGVyZl9ldmVudF9vcGVuIC0gb3BlbiBhIHBlcmZvcm1hbmNlIGV2ZW50LCBhc3NvY2lhdGUgaXQgdG8gYSB0YXNrL2NwdQorICoKKyAqIEBhdHRyX3VwdHI6CWV2ZW50X2lkIHR5cGUgYXR0cmlidXRlcyBmb3IgbW9uaXRvcmluZy9zYW1wbGluZworICogQHBpZDoJCXRhcmdldCBwaWQKKyAqIEBjcHU6CQl0YXJnZXQgY3B1CisgKiBAZ3JvdXBfZmQ6CQlncm91cCBsZWFkZXIgZXZlbnQgZmQKKyAqLworU1lTQ0FMTF9ERUZJTkU1KHBlcmZfZXZlbnRfb3BlbiwKKwkJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBfX3VzZXIgKiwgYXR0cl91cHRyLAorCQlwaWRfdCwgcGlkLCBpbnQsIGNwdSwgaW50LCBncm91cF9mZCwgdW5zaWduZWQgbG9uZywgZmxhZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqZ3JvdXBfbGVhZGVyOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisJc3RydWN0IGZpbGUgKmV2ZW50X2ZpbGUgPSBOVUxMOworCXN0cnVjdCBmaWxlICpncm91cF9maWxlID0gTlVMTDsKKwlpbnQgZnB1dF9uZWVkZWQgPSAwOworCWludCBmcHV0X25lZWRlZDIgPSAwOworCWludCBlcnI7CisKKwkvKiBmb3IgZnV0dXJlIGV4cGFuZGFiaWxpdHkuLi4gKi8KKwlpZiAoZmxhZ3MgJiB+KFBFUkZfRkxBR19GRF9OT19HUk9VUCB8IFBFUkZfRkxBR19GRF9PVVRQVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHBlcmZfY29weV9hdHRyKGF0dHJfdXB0ciwgJmF0dHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoIWF0dHIuZXhjbHVkZV9rZXJuZWwpIHsKKwkJaWYgKHBlcmZfcGFyYW5vaWRfa2VybmVsKCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlpZiAoYXR0ci5mcmVxKSB7CisJCWlmIChhdHRyLnNhbXBsZV9mcmVxID4gc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEdldCB0aGUgdGFyZ2V0IGNvbnRleHQgKHRhc2sgb3IgcGVyY3B1KToKKwkgKi8KKwljdHggPSBmaW5kX2dldF9jb250ZXh0KHBpZCwgY3B1KTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIGdyb3VwIGxlYWRlciAod2Ugd2lsbCBhdHRhY2ggdGhpcyBldmVudCB0byBpdCk6CisJICovCisJZ3JvdXBfbGVhZGVyID0gTlVMTDsKKwlpZiAoZ3JvdXBfZmQgIT0gLTEgJiYgIShmbGFncyAmIFBFUkZfRkxBR19GRF9OT19HUk9VUCkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ3JvdXBfZmlsZSA9IGZnZXRfbGlnaHQoZ3JvdXBfZmQsICZmcHV0X25lZWRlZCk7CisJCWlmICghZ3JvdXBfZmlsZSkKKwkJCWdvdG8gZXJyX3B1dF9jb250ZXh0OworCQlpZiAoZ3JvdXBfZmlsZS0+Zl9vcCAhPSAmcGVyZl9mb3BzKQorCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7CisKKwkJZ3JvdXBfbGVhZGVyID0gZ3JvdXBfZmlsZS0+cHJpdmF0ZV9kYXRhOworCQkvKgorCQkgKiBEbyBub3QgYWxsb3cgYSByZWN1cnNpdmUgaGllcmFyY2h5ICh0aGlzIG5ldyBzaWJsaW5nCisJCSAqIGJlY29taW5nIHBhcnQgb2YgYW5vdGhlciBncm91cC1zaWJsaW5nKToKKwkJICovCisJCWlmIChncm91cF9sZWFkZXItPmdyb3VwX2xlYWRlciAhPSBncm91cF9sZWFkZXIpCisJCQlnb3RvIGVycl9wdXRfY29udGV4dDsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRvIGF0dGFjaCB0byBhIGdyb3VwIGluIGEgZGlmZmVyZW50CisJCSAqIHRhc2sgb3IgQ1BVIGNvbnRleHQ6CisJCSAqLworCQlpZiAoZ3JvdXBfbGVhZGVyLT5jdHggIT0gY3R4KQorCQkJZ290byBlcnJfcHV0X2NvbnRleHQ7CisJCS8qCisJCSAqIE9ubHkgYSBncm91cCBsZWFkZXIgY2FuIGJlIGV4Y2x1c2l2ZSBvciBwaW5uZWQKKwkJICovCisJCWlmIChhdHRyLmV4Y2x1c2l2ZSB8fCBhdHRyLnBpbm5lZCkKKwkJCWdvdG8gZXJyX3B1dF9jb250ZXh0OworCX0KKworCWV2ZW50ID0gcGVyZl9ldmVudF9hbGxvYygmYXR0ciwgY3B1LCBjdHgsIGdyb3VwX2xlYWRlciwKKwkJCQkgICAgIE5VTEwsIEdGUF9LRVJORUwpOworCWVyciA9IFBUUl9FUlIoZXZlbnQpOworCWlmIChJU19FUlIoZXZlbnQpKQorCQlnb3RvIGVycl9wdXRfY29udGV4dDsKKworCWVyciA9IGFub25faW5vZGVfZ2V0ZmQoIltwZXJmX2V2ZW50XSIsICZwZXJmX2ZvcHMsIGV2ZW50LCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZV9wdXRfY29udGV4dDsKKworCWV2ZW50X2ZpbGUgPSBmZ2V0X2xpZ2h0KGVyciwgJmZwdXRfbmVlZGVkMik7CisJaWYgKCFldmVudF9maWxlKQorCQlnb3RvIGVycl9mcmVlX3B1dF9jb250ZXh0OworCisJaWYgKGZsYWdzICYgUEVSRl9GTEFHX0ZEX09VVFBVVCkgeworCQllcnIgPSBwZXJmX2V2ZW50X3NldF9vdXRwdXQoZXZlbnQsIGdyb3VwX2ZkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2ZwdXRfZnJlZV9wdXRfY29udGV4dDsKKwl9CisKKwlldmVudC0+ZmlscCA9IGV2ZW50X2ZpbGU7CisJV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CisJcGVyZl9pbnN0YWxsX2luX2NvbnRleHQoY3R4LCBldmVudCwgY3B1KTsKKwkrK2N0eC0+Z2VuZXJhdGlvbjsKKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworCisJZXZlbnQtPm93bmVyID0gY3VycmVudDsKKwlnZXRfdGFza19zdHJ1Y3QoY3VycmVudCk7CisJbXV0ZXhfbG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm93bmVyX2VudHJ5LCAmY3VycmVudC0+cGVyZl9ldmVudF9saXN0KTsKKwltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCitlcnJfZnB1dF9mcmVlX3B1dF9jb250ZXh0OgorCWZwdXRfbGlnaHQoZXZlbnRfZmlsZSwgZnB1dF9uZWVkZWQyKTsKKworZXJyX2ZyZWVfcHV0X2NvbnRleHQ6CisJaWYgKGVyciA8IDApCisJCWtmcmVlKGV2ZW50KTsKKworZXJyX3B1dF9jb250ZXh0OgorCWlmIChlcnIgPCAwKQorCQlwdXRfY3R4KGN0eCk7CisKKwlmcHV0X2xpZ2h0KGdyb3VwX2ZpbGUsIGZwdXRfbmVlZGVkKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBpbmhlcml0IGEgZXZlbnQgZnJvbSBwYXJlbnQgdGFzayB0byBjaGlsZCB0YXNrOgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKgoraW5oZXJpdF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50X2V2ZW50LAorCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LAorCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnBhcmVudF9jdHgsCisJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAorCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfZXZlbnQ7CisKKwkvKgorCSAqIEluc3RlYWQgb2YgY3JlYXRpbmcgcmVjdXJzaXZlIGhpZXJhcmNoaWVzIG9mIGV2ZW50cywKKwkgKiB3ZSBsaW5rIGluaGVyaXRlZCBldmVudHMgYmFjayB0byB0aGUgb3JpZ2luYWwgcGFyZW50LAorCSAqIHdoaWNoIGhhcyBhIGZpbHAgZm9yIHN1cmUsIHdoaWNoIHdlIHVzZSBhcyB0aGUgcmVmZXJlbmNlCisJICogY291bnQ6CisJICovCisJaWYgKHBhcmVudF9ldmVudC0+cGFyZW50KQorCQlwYXJlbnRfZXZlbnQgPSBwYXJlbnRfZXZlbnQtPnBhcmVudDsKKworCWNoaWxkX2V2ZW50ID0gcGVyZl9ldmVudF9hbGxvYygmcGFyZW50X2V2ZW50LT5hdHRyLAorCQkJCQkgICBwYXJlbnRfZXZlbnQtPmNwdSwgY2hpbGRfY3R4LAorCQkJCQkgICBncm91cF9sZWFkZXIsIHBhcmVudF9ldmVudCwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjaGlsZF9ldmVudCkpCisJCXJldHVybiBjaGlsZF9ldmVudDsKKwlnZXRfY3R4KGNoaWxkX2N0eCk7CisKKwkvKgorCSAqIE1ha2UgdGhlIGNoaWxkIHN0YXRlIGZvbGxvdyB0aGUgc3RhdGUgb2YgdGhlIHBhcmVudCBldmVudCwKKwkgKiBub3QgaXRzIGF0dHIuZGlzYWJsZWQgYml0LiAgV2UgaG9sZCB0aGUgcGFyZW50J3MgbXV0ZXgsCisJICogc28gd2Ugd29uJ3QgcmFjZSB3aXRoIHBlcmZfZXZlbnRfe2VuLCBkaXN9YWJsZV9mYW1pbHkuCisJICovCisJaWYgKHBhcmVudF9ldmVudC0+c3RhdGUgPj0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJY2hpbGRfZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRTsKKwllbHNlCisJCWNoaWxkX2V2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGOworCisJaWYgKHBhcmVudF9ldmVudC0+YXR0ci5mcmVxKQorCQljaGlsZF9ldmVudC0+aHcuc2FtcGxlX3BlcmlvZCA9IHBhcmVudF9ldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKKworCS8qCisJICogTGluayBpdCB1cCBpbiB0aGUgY2hpbGQncyBjb250ZXh0OgorCSAqLworCWFkZF9ldmVudF90b19jdHgoY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCk7CisKKwkvKgorCSAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGZpbHAgLSB3ZSB3aWxsIGZwdXQgaXQKKwkgKiB3aGVuIHRoZSBjaGlsZCBldmVudCBleGl0cy4gVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UKKwkgKiB3ZSBhcmUgaW4gdGhlIHBhcmVudCBhbmQgd2Uga25vdyB0aGF0IHRoZSBmaWxwIHN0aWxsCisJICogZXhpc3RzIGFuZCBoYXMgYSBub256ZXJvIGNvdW50OgorCSAqLworCWF0b21pY19sb25nX2luYygmcGFyZW50X2V2ZW50LT5maWxwLT5mX2NvdW50KTsKKworCS8qCisJICogTGluayB0aGlzIGludG8gdGhlIHBhcmVudCBldmVudCdzIGNoaWxkIGxpc3QKKwkgKi8KKwlXQVJOX09OX09OQ0UocGFyZW50X2V2ZW50LT5jdHgtPnBhcmVudF9jdHgpOworCW11dGV4X2xvY2soJnBhcmVudF9ldmVudC0+Y2hpbGRfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJmNoaWxkX2V2ZW50LT5jaGlsZF9saXN0LCAmcGFyZW50X2V2ZW50LT5jaGlsZF9saXN0KTsKKwltdXRleF91bmxvY2soJnBhcmVudF9ldmVudC0+Y2hpbGRfbXV0ZXgpOworCisJcmV0dXJuIGNoaWxkX2V2ZW50OworfQorCitzdGF0aWMgaW50IGluaGVyaXRfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudF9ldmVudCwKKwkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKKwkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnRfY3R4LAorCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXI7CisJc3RydWN0IHBlcmZfZXZlbnQgKnN1YjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfY3RyOworCisJbGVhZGVyID0gaW5oZXJpdF9ldmVudChwYXJlbnRfZXZlbnQsIHBhcmVudCwgcGFyZW50X2N0eCwKKwkJCQkgY2hpbGQsIE5VTEwsIGNoaWxkX2N0eCk7CisJaWYgKElTX0VSUihsZWFkZXIpKQorCQlyZXR1cm4gUFRSX0VSUihsZWFkZXIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmcGFyZW50X2V2ZW50LT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWNoaWxkX2N0ciA9IGluaGVyaXRfZXZlbnQoc3ViLCBwYXJlbnQsIHBhcmVudF9jdHgsCisJCQkJCSAgICBjaGlsZCwgbGVhZGVyLCBjaGlsZF9jdHgpOworCQlpZiAoSVNfRVJSKGNoaWxkX2N0cikpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZF9jdHIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3luY19jaGlsZF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfZXZlbnQsCisJCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50X2V2ZW50ID0gY2hpbGRfZXZlbnQtPnBhcmVudDsKKwl1NjQgY2hpbGRfdmFsOworCisJaWYgKGNoaWxkX2V2ZW50LT5hdHRyLmluaGVyaXRfc3RhdCkKKwkJcGVyZl9ldmVudF9yZWFkX2V2ZW50KGNoaWxkX2V2ZW50LCBjaGlsZCk7CisKKwljaGlsZF92YWwgPSBhdG9taWM2NF9yZWFkKCZjaGlsZF9ldmVudC0+Y291bnQpOworCisJLyoKKwkgKiBBZGQgYmFjayB0aGUgY2hpbGQncyBjb3VudCB0byB0aGUgcGFyZW50J3MgY291bnQ6CisJICovCisJYXRvbWljNjRfYWRkKGNoaWxkX3ZhbCwgJnBhcmVudF9ldmVudC0+Y291bnQpOworCWF0b21pYzY0X2FkZChjaGlsZF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkLAorCQkgICAgICZwYXJlbnRfZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CisJYXRvbWljNjRfYWRkKGNoaWxkX2V2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsCisJCSAgICAgJnBhcmVudF9ldmVudC0+Y2hpbGRfdG90YWxfdGltZV9ydW5uaW5nKTsKKworCS8qCisJICogUmVtb3ZlIHRoaXMgZXZlbnQgZnJvbSB0aGUgcGFyZW50J3MgbGlzdAorCSAqLworCVdBUk5fT05fT05DRShwYXJlbnRfZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CisJbXV0ZXhfbG9jaygmcGFyZW50X2V2ZW50LT5jaGlsZF9tdXRleCk7CisJbGlzdF9kZWxfaW5pdCgmY2hpbGRfZXZlbnQtPmNoaWxkX2xpc3QpOworCW11dGV4X3VubG9jaygmcGFyZW50X2V2ZW50LT5jaGlsZF9tdXRleCk7CisKKwkvKgorCSAqIFJlbGVhc2UgdGhlIHBhcmVudCBldmVudCwgaWYgdGhpcyB3YXMgdGhlIGxhc3QKKwkgKiByZWZlcmVuY2UgdG8gaXQuCisJICovCisJZnB1dChwYXJlbnRfZXZlbnQtPmZpbHApOworfQorCitzdGF0aWMgdm9pZAorX19wZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGRfZXZlbnQsCisJCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LAorCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudF9ldmVudDsKKworCXVwZGF0ZV9ldmVudF90aW1lcyhjaGlsZF9ldmVudCk7CisJcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0KGNoaWxkX2V2ZW50KTsKKworCXBhcmVudF9ldmVudCA9IGNoaWxkX2V2ZW50LT5wYXJlbnQ7CisJLyoKKwkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgcGFyZW50IGV4aXRzIGZpcnN0LCBhbmQgaGFzIGV2ZW50cworCSAqIHRoYXQgYXJlIHN0aWxsIGFyb3VuZCBkdWUgdG8gdGhlIGNoaWxkIHJlZmVyZW5jZS4gVGhlc2UKKwkgKiBldmVudHMgbmVlZCB0byBiZSB6YXBwZWQgLSBidXQgb3RoZXJ3aXNlIGxpbmdlci4KKwkgKi8KKwlpZiAocGFyZW50X2V2ZW50KSB7CisJCXN5bmNfY2hpbGRfZXZlbnQoY2hpbGRfZXZlbnQsIGNoaWxkKTsKKwkJZnJlZV9ldmVudChjaGlsZF9ldmVudCk7CisJfQorfQorCisvKgorICogV2hlbiBhIGNoaWxkIHRhc2sgZXhpdHMsIGZlZWQgYmFjayBldmVudCB2YWx1ZXMgdG8gcGFyZW50IGV2ZW50cy4KKyAqLwordm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpjaGlsZF9ldmVudCwgKnRtcDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjaGlsZF9jdHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChsaWtlbHkoIWNoaWxkLT5wZXJmX2V2ZW50X2N0eHApKSB7CisJCXBlcmZfZXZlbnRfdGFzayhjaGlsZCwgTlVMTCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJLyoKKwkgKiBXZSBjYW4ndCByZXNjaGVkdWxlIGhlcmUgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKKwkgKiBhbmQgZWl0aGVyIGNoaWxkIGlzIGN1cnJlbnQgb3IgaXQgaXMgYSB0YXNrIHRoYXQgY2FuJ3QgYmUKKwkgKiBzY2hlZHVsZWQsIHNvIHdlIGFyZSBub3cgc2FmZSBmcm9tIHJlc2NoZWR1bGluZyBjaGFuZ2luZworCSAqIG91ciBjb250ZXh0LgorCSAqLworCWNoaWxkX2N0eCA9IGNoaWxkLT5wZXJmX2V2ZW50X2N0eHA7CisJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KGNoaWxkX2N0eCk7CisKKwkvKgorCSAqIFRha2UgdGhlIGNvbnRleHQgbG9jayBoZXJlIHNvIHRoYXQgaWYgZmluZF9nZXRfY29udGV4dCBpcworCSAqIHJlYWRpbmcgY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCwgd2Ugd2FpdCB1bnRpbCBpdCBoYXMKKwkgKiBpbmNyZW1lbnRlZCB0aGUgY29udGV4dCdzIHJlZmNvdW50IGJlZm9yZSB3ZSBkbyBwdXRfY3R4IGJlbG93LgorCSAqLworCXNwaW5fbG9jaygmY2hpbGRfY3R4LT5sb2NrKTsKKwljaGlsZC0+cGVyZl9ldmVudF9jdHhwID0gTlVMTDsKKwkvKgorCSAqIElmIHRoaXMgY29udGV4dCBpcyBhIGNsb25lOyB1bmNsb25lIGl0IHNvIGl0IGNhbid0IGdldAorCSAqIHN3YXBwZWQgdG8gYW5vdGhlciBwcm9jZXNzIHdoaWxlIHdlJ3JlIHJlbW92aW5nIGFsbAorCSAqIHRoZSBldmVudHMgZnJvbSBpdC4KKwkgKi8KKwl1bmNsb25lX2N0eChjaGlsZF9jdHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaWxkX2N0eC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBSZXBvcnQgdGhlIHRhc2sgZGVhZCBhZnRlciB1bnNjaGVkdWxpbmcgdGhlIGV2ZW50cyBzbyB0aGF0IHdlCisJICogd29uJ3QgZ2V0IGFueSBzYW1wbGVzIGFmdGVyIFBFUkZfUkVDT1JEX0VYSVQuIFdlIGNhbiBob3dldmVyIHN0aWxsCisJICogZ2V0IGEgZmV3IFBFUkZfUkVDT1JEX1JFQUQgZXZlbnRzLgorCSAqLworCXBlcmZfZXZlbnRfdGFzayhjaGlsZCwgY2hpbGRfY3R4LCAwKTsKKworCS8qCisJICogV2UgY2FuIHJlY3Vyc2Ugb24gdGhlIHNhbWUgbG9jayB0eXBlIHRocm91Z2g6CisJICoKKwkgKiAgIF9fcGVyZl9ldmVudF9leGl0X3Rhc2soKQorCSAqICAgICBzeW5jX2NoaWxkX2V2ZW50KCkKKwkgKiAgICAgICBmcHV0KHBhcmVudF9ldmVudC0+ZmlscCkKKwkgKiAgICAgICAgIHBlcmZfcmVsZWFzZSgpCisJICogICAgICAgICAgIG11dGV4X2xvY2soJmN0eC0+bXV0ZXgpCisJICoKKwkgKiBCdXQgc2luY2UgaXRzIHRoZSBwYXJlbnQgY29udGV4dCBpdCB3b24ndCBiZSB0aGUgc2FtZSBpbnN0YW5jZS4KKwkgKi8KKwltdXRleF9sb2NrX25lc3RlZCgmY2hpbGRfY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCithZ2FpbjoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+Z3JvdXBfbGlzdCwKKwkJCQkgZ3JvdXBfZW50cnkpCisJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOworCisJLyoKKwkgKiBJZiB0aGUgbGFzdCBldmVudCB3YXMgYSBncm91cCBldmVudCwgaXQgd2lsbCBoYXZlIGFwcGVuZGVkIGFsbAorCSAqIGl0cyBzaWJsaW5ncyB0byB0aGUgbGlzdCwgYnV0IHdlIG9idGFpbmVkICd0bXAnIGJlZm9yZSB0aGF0IHdoaWNoCisJICogd2lsbCBzdGlsbCBwb2ludCB0byB0aGUgbGlzdCBoZWFkIHRlcm1pbmF0aW5nIHRoZSBpdGVyYXRpb24uCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPmdyb3VwX2xpc3QpKQorCQlnb3RvIGFnYWluOworCisJbXV0ZXhfdW5sb2NrKCZjaGlsZF9jdHgtPm11dGV4KTsKKworCXB1dF9jdHgoY2hpbGRfY3R4KTsKK30KKworLyoKKyAqIGZyZWUgYW4gdW5leHBvc2VkLCB1bnVzZWQgY29udGV4dCBhcyBjcmVhdGVkIGJ5IGluaGVyaXRhbmNlIGJ5CisgKiBpbml0X3Rhc2sgYmVsb3csIHVzZWQgYnkgZm9yaygpIGluIGNhc2Ugb2YgZmFpbC4KKyAqLwordm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnRtcDsKKworCWlmICghY3R4KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKK2FnYWluOgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50ID0gZXZlbnQtPnBhcmVudDsKKworCQlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQorCQkJY29udGludWU7CisKKwkJbXV0ZXhfbG9jaygmcGFyZW50LT5jaGlsZF9tdXRleCk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5jaGlsZF9saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKworCQlmcHV0KHBhcmVudC0+ZmlscCk7CisKKwkJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7CisJCWZyZWVfZXZlbnQoZXZlbnQpOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ncm91cF9saXN0KSkKKwkJZ290byBhZ2FpbjsKKworCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7CisKKwlwdXRfY3R4KGN0eCk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBwZXJmX2V2ZW50IGNvbnRleHQgaW4gdGFza19zdHJ1Y3QKKyAqLworaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LCAqcGFyZW50X2N0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjbG9uZWRfY3R4OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCA9IGN1cnJlbnQ7CisJaW50IGluaGVyaXRlZF9hbGwgPSAxOworCWludCByZXQgPSAwOworCisJY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCA9IE5VTEw7CisKKwltdXRleF9pbml0KCZjaGlsZC0+cGVyZl9ldmVudF9tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5wZXJmX2V2ZW50X2xpc3QpOworCisJaWYgKGxpa2VseSghcGFyZW50LT5wZXJmX2V2ZW50X2N0eHApKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbyBpbmhlcml0CisJICogZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBmb3IgY2xvbmluZy4KKwkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZSBjaGlsZC4KKwkgKi8KKworCWNoaWxkX2N0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoaWxkX2N0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KGNoaWxkX2N0eCwgY2hpbGQpOworCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7CisJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKKworCS8qCisJICogSWYgdGhlIHBhcmVudCdzIGNvbnRleHQgaXMgYSBjbG9uZSwgcGluIGl0IHNvIGl0IHdvbid0IGdldAorCSAqIHN3YXBwZWQgdW5kZXIgdXMuCisJICovCisJcGFyZW50X2N0eCA9IHBlcmZfcGluX3Rhc2tfY29udGV4dChwYXJlbnQpOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGNoZWNrIGlmIHBhcmVudF9jdHggIT0gTlVMTCBoZXJlOyBzaW5jZSB3ZSBzYXcKKwkgKiBpdCBub24tTlVMTCBlYXJsaWVyLCB0aGUgb25seSByZWFzb24gZm9yIGl0IHRvIGJlY29tZSBOVUxMCisJICogaXMgaWYgd2UgZXhpdCwgYW5kIHNpbmNlIHdlJ3JlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mCisJICogYSBmb3JrIHdlIGNhbid0IGJlIGV4aXRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKwkgKi8KKworCS8qCisJICogTG9jayB0aGUgcGFyZW50IGxpc3QuIE5vIG5lZWQgdG8gbG9jayB0aGUgY2hpbGQgLSBub3QgUElECisJICogaGFzaGVkIHlldCBhbmQgbm90IHJ1bm5pbmcsIHNvIG5vYm9keSBjYW4gYWNjZXNzIGl0LgorCSAqLworCW11dGV4X2xvY2soJnBhcmVudF9jdHgtPm11dGV4KTsKKworCS8qCisJICogV2UgZG9udCBoYXZlIHRvIGRpc2FibGUgTk1JcyAtIHdlIGFyZSBvbmx5IGxvb2tpbmcgYXQKKwkgKiB0aGUgbGlzdCwgbm90IG1hbmlwdWxhdGluZyBpdDoKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJnBhcmVudF9jdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CisJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7CisJCQlpbmhlcml0ZWRfYWxsID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0ID0gaW5oZXJpdF9ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LAorCQkJCQkgICAgIGNoaWxkLCBjaGlsZF9jdHgpOworCQlpZiAocmV0KSB7CisJCQlpbmhlcml0ZWRfYWxsID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGluaGVyaXRlZF9hbGwpIHsKKwkJLyoKKwkJICogTWFyayB0aGUgY2hpbGQgY29udGV4dCBhcyBhIGNsb25lIG9mIHRoZSBwYXJlbnQKKwkJICogY29udGV4dCwgb3Igb2Ygd2hhdGV2ZXIgdGhlIHBhcmVudCBpcyBhIGNsb25lIG9mLgorCQkgKiBOb3RlIHRoYXQgaWYgdGhlIHBhcmVudCBpcyBhIGNsb25lLCBpdCBjb3VsZCBnZXQKKwkJICogdW5jbG9uZWQgYXQgYW55IHBvaW50LCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlcgorCQkgKiBiZWNhdXNlIHRoZSBsaXN0IG9mIGV2ZW50cyBhbmQgdGhlIGdlbmVyYXRpb24KKwkJICogY291bnQgY2FuJ3QgaGF2ZSBjaGFuZ2VkIHNpbmNlIHdlIHRvb2sgdGhlIG11dGV4LgorCQkgKi8KKwkJY2xvbmVkX2N0eCA9IHJjdV9kZXJlZmVyZW5jZShwYXJlbnRfY3R4LT5wYXJlbnRfY3R4KTsKKwkJaWYgKGNsb25lZF9jdHgpIHsKKwkJCWNoaWxkX2N0eC0+cGFyZW50X2N0eCA9IGNsb25lZF9jdHg7CisJCQljaGlsZF9jdHgtPnBhcmVudF9nZW4gPSBwYXJlbnRfY3R4LT5wYXJlbnRfZ2VuOworCQl9IGVsc2UgeworCQkJY2hpbGRfY3R4LT5wYXJlbnRfY3R4ID0gcGFyZW50X2N0eDsKKwkJCWNoaWxkX2N0eC0+cGFyZW50X2dlbiA9IHBhcmVudF9jdHgtPmdlbmVyYXRpb247CisJCX0KKwkJZ2V0X2N0eChjaGlsZF9jdHgtPnBhcmVudF9jdHgpOworCX0KKworCW11dGV4X3VubG9jaygmcGFyZW50X2N0eC0+bXV0ZXgpOworCisJcGVyZl91bnBpbl9jb250ZXh0KHBhcmVudF9jdHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19jcHVpbml0IHBlcmZfZXZlbnRfaW5pdF9jcHUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OworCisJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KCZjcHVjdHgtPmN0eCwgTlVMTCk7CisKKwlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisJY3B1Y3R4LT5tYXhfcGVydGFzayA9IHBlcmZfbWF4X2V2ZW50cyAtIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1OworCXNwaW5fdW5sb2NrKCZwZXJmX3Jlc291cmNlX2xvY2spOworCisJaHdfcGVyZl9ldmVudF9zZXR1cChjcHUpOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfZXhpdF9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gJmNwdWN0eC0+Y3R4OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkKKwkJX19wZXJmX2V2ZW50X3JlbW92ZV9mcm9tX2NvbnRleHQoZXZlbnQpOworfQorc3RhdGljIHZvaWQgcGVyZl9ldmVudF9leGl0X2NwdShpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKKworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcGVyZl9ldmVudF9leGl0X2NwdSwgTlVMTCwgMSk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X2NwdShpbnQgY3B1KSB7IH0KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fY3B1aW5pdAorcGVyZl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IChsb25nKWhjcHU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKKwkJcGVyZl9ldmVudF9pbml0X2NwdShjcHUpOworCQlicmVhazsKKworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgorCQlod19wZXJmX2V2ZW50X3NldHVwX29ubGluZShjcHUpOworCQlicmVhazsKKworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgorCQlwZXJmX2V2ZW50X2V4aXRfY3B1KGNwdSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworLyoKKyAqIFRoaXMgaGFzIHRvIGhhdmUgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBtaWdyYXRpb25fbm90aWZpZXIgaW4gc2NoZWQuYy4KKyAqLworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHBlcmZfY3B1X25iID0geworCS5ub3RpZmllcl9jYWxsCQk9IHBlcmZfY3B1X25vdGlmeSwKKwkucHJpb3JpdHkJCT0gMjAsCit9OworCit2b2lkIF9faW5pdCBwZXJmX2V2ZW50X2luaXQodm9pZCkKK3sKKwlwZXJmX2NwdV9ub3RpZnkoJnBlcmZfY3B1X25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwKKwkJCSh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwZXJmX2NwdV9ub3RpZnkoJnBlcmZfY3B1X25iLCAodW5zaWduZWQgbG9uZylDUFVfT05MSU5FLAorCQkJKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcGVyZl9jcHVfbmIpOworfQorCitzdGF0aWMgc3NpemVfdCBwZXJmX3Nob3dfcmVzZXJ2ZV9wZXJjcHUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcGVyZl9yZXNlcnZlZF9wZXJjcHUpOworfQorCitzdGF0aWMgc3NpemVfdAorcGVyZl9zZXRfcmVzZXJ2ZV9wZXJjcHUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQljb25zdCBjaGFyICpidWYsCisJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyLCBjcHUsIG1wdDsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKHZhbCA+IHBlcmZfbWF4X2V2ZW50cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisJcGVyZl9yZXNlcnZlZF9wZXJjcHUgPSB2YWw7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwkJc3Bpbl9sb2NrX2lycSgmY3B1Y3R4LT5jdHgubG9jayk7CisJCW1wdCA9IG1pbihwZXJmX21heF9ldmVudHMgLSBjcHVjdHgtPmN0eC5ucl9ldmVudHMsCisJCQkgIHBlcmZfbWF4X2V2ZW50cyAtIHBlcmZfcmVzZXJ2ZWRfcGVyY3B1KTsKKwkJY3B1Y3R4LT5tYXhfcGVydGFzayA9IG1wdDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjcHVjdHgtPmN0eC5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBlcmZfc2hvd19vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBlcmZfb3ZlcmNvbW1pdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitwZXJmX3NldF9vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyOworCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CisJcGVyZl9vdmVyY29tbWl0ID0gdmFsOworCXNwaW5fdW5sb2NrKCZwZXJmX3Jlc291cmNlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoCisJCQkJcmVzZXJ2ZV9wZXJjcHUsCisJCQkJMDY0NCwKKwkJCQlwZXJmX3Nob3dfcmVzZXJ2ZV9wZXJjcHUsCisJCQkJcGVyZl9zZXRfcmVzZXJ2ZV9wZXJjcHUKKwkJCSk7CisKK3N0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUigKKwkJCQlvdmVyY29tbWl0LAorCQkJCTA2NDQsCisJCQkJcGVyZl9zaG93X292ZXJjb21taXQsCisJCQkJcGVyZl9zZXRfb3ZlcmNvbW1pdAorCQkJKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBlcmZjbGFzc19hdHRyc1tdID0geworCSZhdHRyX3Jlc2VydmVfcGVyY3B1LmF0dHIsCisJJmF0dHJfb3ZlcmNvbW1pdC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBlcmZjbGFzc19hdHRyX2dyb3VwID0geworCS5hdHRycwkJCT0gcGVyZmNsYXNzX2F0dHJzLAorCS5uYW1lCQkJPSAicGVyZl9ldmVudHMiLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGVyZl9ldmVudF9zeXNmc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmY3B1X3N5c2Rldl9jbGFzcy5rc2V0LmtvYmosCisJCQkJICAmcGVyZmNsYXNzX2F0dHJfZ3JvdXApOworfQorZGV2aWNlX2luaXRjYWxsKHBlcmZfZXZlbnRfc3lzZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkLmMgYi9rZXJuZWwvcGlkLmMKaW5kZXggMzEzMTBiNS4uZDNmNzIyZCAxMDA2NDQKLS0tIGEva2VybmVsL3BpZC5jCisrKyBiL2tlcm5lbC9waWQuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBwaWRfaGFzaGZuKG5yLCBucykJXAogCWhhc2hfbG9uZygodW5zaWduZWQgbG9uZyluciArICh1bnNpZ25lZCBsb25nKW5zLCBwaWRoYXNoX3NoaWZ0KQogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpwaWRfaGFzaDsKLXN0YXRpYyBpbnQgcGlkaGFzaF9zaGlmdDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGlkaGFzaF9zaGlmdCA9IDQ7CiBzdHJ1Y3QgcGlkIGluaXRfc3RydWN0X3BpZCA9IElOSVRfU1RSVUNUX1BJRDsKIAogaW50IHBpZF9tYXggPSBQSURfTUFYX0RFRkFVTFQ7CkBAIC00OTksMTkgKzQ5OSwxMiBAQAogdm9pZCBfX2luaXQgcGlkaGFzaF9pbml0KHZvaWQpCiB7CiAJaW50IGksIHBpZGhhc2hfc2l6ZTsKLQl1bnNpZ25lZCBsb25nIG1lZ2FieXRlcyA9IG5yX2tlcm5lbF9wYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKTsKIAotCXBpZGhhc2hfc2hpZnQgPSBtYXgoNCwgZmxzKG1lZ2FieXRlcyAqIDQpKTsKLQlwaWRoYXNoX3NoaWZ0ID0gbWluKDEyLCBwaWRoYXNoX3NoaWZ0KTsKKwlwaWRfaGFzaCA9IGFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJQSUQiLCBzaXplb2YoKnBpZF9oYXNoKSwgMCwgMTgsCisJCQkJCSAgIEhBU0hfRUFSTFkgfCBIQVNIX1NNQUxMLAorCQkJCQkgICAmcGlkaGFzaF9zaGlmdCwgTlVMTCwgNDA5Nik7CiAJcGlkaGFzaF9zaXplID0gMSA8PCBwaWRoYXNoX3NoaWZ0OwogCi0JcHJpbnRrKCJQSUQgaGFzaCB0YWJsZSBlbnRyaWVzOiAlZCAob3JkZXI6ICVkLCAlWmQgYnl0ZXMpXG4iLAotCQlwaWRoYXNoX3NpemUsIHBpZGhhc2hfc2hpZnQsCi0JCXBpZGhhc2hfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOwotCi0JcGlkX2hhc2ggPSBhbGxvY19ib290bWVtKHBpZGhhc2hfc2l6ZSAqCXNpemVvZigqKHBpZF9oYXNoKSkpOwotCWlmICghcGlkX2hhc2gpCi0JCXBhbmljKCJDb3VsZCBub3QgYWxsb2MgcGlkaGFzaCFcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBwaWRoYXNoX3NpemU7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZwaWRfaGFzaFtpXSk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCBlMzNhMjFjLi41YzlkYzIyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTgsMTcgKzgsMTggQEAKICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3RpbWVyLmg+CiAKIC8qCiAgKiBDYWxsZWQgYWZ0ZXIgdXBkYXRpbmcgUkxJTUlUX0NQVSB0byBzZXQgdGltZXIgZXhwaXJhdGlvbiBpZiBuZWNlc3NhcnkuCiAgKi8KIHZvaWQgdXBkYXRlX3JsaW1pdF9jcHUodW5zaWduZWQgbG9uZyBybGltX25ldykKIHsKLQljcHV0aW1lX3QgY3B1dGltZTsKKwljcHV0aW1lX3QgY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShybGltX25ldyk7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKmNvbnN0IHNpZyA9IGN1cnJlbnQtPnNpZ25hbDsKIAotCWNwdXRpbWUgPSBzZWNzX3RvX2NwdXRpbWUocmxpbV9uZXcpOwotCWlmIChjcHV0aW1lX2VxKGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JICAgIGNwdXRpbWVfZ3QoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWUpKSB7CisJaWYgKGNwdXRpbWVfZXEoc2lnLT5pdFtDUFVDTE9DS19QUk9GXS5leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CisJICAgIGNwdXRpbWVfZ3Qoc2lnLT5pdFtDUFVDTE9DS19QUk9GXS5leHBpcmVzLCBjcHV0aW1lKSkgewogCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKGN1cnJlbnQsIENQVUNMT0NLX1BST0YsICZjcHV0aW1lLCBOVUxMKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTU0Miw2ICs1NDMsMTcgQEAKIAkJCQkJICAgICBub3cpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBleHBpcmVzX2d0KGNwdXRpbWVfdCBleHBpcmVzLCBjcHV0aW1lX3QgbmV3X2V4cCkKK3sKKwlyZXR1cm4gY3B1dGltZV9lcShleHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CisJICAgICAgIGNwdXRpbWVfZ3QoZXhwaXJlcywgbmV3X2V4cCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4cGlyZXNfbGUoY3B1dGltZV90IGV4cGlyZXMsIGNwdXRpbWVfdCBuZXdfZXhwKQoreworCXJldHVybiAhY3B1dGltZV9lcShleHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCisJICAgICAgIGNwdXRpbWVfbGUoZXhwaXJlcywgbmV3X2V4cCk7Cit9CiAvKgogICogSW5zZXJ0IHRoZSB0aW1lciBvbiB0aGUgYXBwcm9wcmlhdGUgbGlzdCBiZWZvcmUgYW55IHRpbWVycyB0aGF0CiAgKiBleHBpcmUgbGF0ZXIuICBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHRhc2tsaXN0X2xvY2sgaGVsZApAQCAtNTg2LDM0ICs1OTgsMzIgQEAKIAkJICovCiAKIAkJaWYgKENQVUNMT0NLX1BFUlRIUkVBRCh0aW1lci0+aXRfY2xvY2spKSB7CisJCQl1bmlvbiBjcHVfdGltZV9jb3VudCAqZXhwID0gJm50LT5leHBpcmVzOworCiAJCQlzd2l0Y2ggKENQVUNMT0NLX1dISUNIKHRpbWVyLT5pdF9jbG9jaykpIHsKIAkJCWRlZmF1bHQ6CiAJCQkJQlVHKCk7CiAJCQljYXNlIENQVUNMT0NLX1BST0Y6Ci0JCQkJaWYgKGNwdXRpbWVfZXEocC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLAotCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fAotCQkJCSAgICBjcHV0aW1lX2d0KHAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCwKLQkJCQkJICAgICAgIG50LT5leHBpcmVzLmNwdSkpCi0JCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9Ci0JCQkJCQludC0+ZXhwaXJlcy5jcHU7CisJCQkJaWYgKGV4cGlyZXNfZ3QocC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLAorCQkJCQkgICAgICAgZXhwLT5jcHUpKQorCQkJCQlwLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBleHAtPmNwdTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKLQkJCQlpZiAoY3B1dGltZV9lcShwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsCi0JCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QocC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwLAotCQkJCQkgICAgICAgbnQtPmV4cGlyZXMuY3B1KSkKLQkJCQkJcC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0KLQkJCQkJCW50LT5leHBpcmVzLmNwdTsKKwkJCQlpZiAoZXhwaXJlc19ndChwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsCisJCQkJCSAgICAgICBleHAtPmNwdSkpCisJCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IGV4cC0+Y3B1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19TQ0hFRDoKIAkJCQlpZiAocC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9PSAwIHx8Ci0JCQkJICAgIHAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPgotCQkJCQkJCW50LT5leHBpcmVzLnNjaGVkKQorCQkJCSAgICBwLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID4gZXhwLT5zY2hlZCkKIAkJCQkJcC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9Ci0JCQkJCQludC0+ZXhwaXJlcy5zY2hlZDsKKwkJCQkJCQkJZXhwLT5zY2hlZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpjb25zdCBzaWcgPSBwLT5zaWduYWw7CisJCQl1bmlvbiBjcHVfdGltZV9jb3VudCAqZXhwID0gJnRpbWVyLT5pdC5jcHUuZXhwaXJlczsKKwogCQkJLyoKIAkJCSAqIEZvciBhIHByb2Nlc3MgdGltZXIsIHNldCB0aGUgY2FjaGVkIGV4cGlyYXRpb24gdGltZS4KIAkJCSAqLwpAQCAtNjIxLDMwICs2MzEsMjMgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJQlVHKCk7CiAJCQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCQkJaWYgKCFjcHV0aW1lX2VxKHAtPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzLAotCQkJCQkJY3B1dGltZV96ZXJvKSAmJgotCQkJCSAgICBjcHV0aW1lX2x0KHAtPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzLAotCQkJCQkgICAgICAgdGltZXItPml0LmNwdS5leHBpcmVzLmNwdSkpCisJCQkJaWYgKGV4cGlyZXNfbGUoc2lnLT5pdFtDUFVDTE9DS19WSVJUXS5leHBpcmVzLAorCQkJCQkgICAgICAgZXhwLT5jcHUpKQogCQkJCQlicmVhazsKLQkJCQlwLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9Ci0JCQkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHU7CisJCQkJc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBleHAtPmNwdTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKLQkJCQlpZiAoIWNwdXRpbWVfZXEocC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsCi0JCQkJCQljcHV0aW1lX3plcm8pICYmCi0JCQkJICAgIGNwdXRpbWVfbHQocC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsCi0JCQkJCSAgICAgICB0aW1lci0+aXQuY3B1LmV4cGlyZXMuY3B1KSkKKwkJCQlpZiAoZXhwaXJlc19sZShzaWctPml0W0NQVUNMT0NLX1BST0ZdLmV4cGlyZXMsCisJCQkJCSAgICAgICBleHAtPmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCWkgPSBwLT5zaWduYWwtPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXI7CisJCQkJaSA9IHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cjsKIAkJCQlpZiAoaSAhPSBSTElNX0lORklOSVRZICYmCi0JCQkJICAgIGkgPD0gY3B1dGltZV90b19zZWNzKHRpbWVyLT5pdC5jcHUuZXhwaXJlcy5jcHUpKQorCQkJCSAgICBpIDw9IGNwdXRpbWVfdG9fc2VjcyhleHAtPmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0KLQkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLmNwdTsKKwkJCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IGV4cC0+Y3B1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJCQlwLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPQotCQkJCQl0aW1lci0+aXQuY3B1LmV4cGlyZXMuc2NoZWQ7CisJCQkJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gZXhwLT5zY2hlZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTA3MSw2ICsxMDc0LDQwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1dGltZXItPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHUzMiBvbmVjcHV0aWNrOworCitzdGF0aWMgdm9pZCBjaGVja19jcHVfaXRpbWVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgY3B1X2l0aW1lciAqaXQsCisJCQkgICAgIGNwdXRpbWVfdCAqZXhwaXJlcywgY3B1dGltZV90IGN1cl90aW1lLCBpbnQgc2lnbm8pCit7CisJaWYgKGNwdXRpbWVfZXEoaXQtPmV4cGlyZXMsIGNwdXRpbWVfemVybykpCisJCXJldHVybjsKKworCWlmIChjcHV0aW1lX2dlKGN1cl90aW1lLCBpdC0+ZXhwaXJlcykpIHsKKwkJaWYgKCFjcHV0aW1lX2VxKGl0LT5pbmNyLCBjcHV0aW1lX3plcm8pKSB7CisJCQlpdC0+ZXhwaXJlcyA9IGNwdXRpbWVfYWRkKGl0LT5leHBpcmVzLCBpdC0+aW5jcik7CisJCQlpdC0+ZXJyb3IgKz0gaXQtPmluY3JfZXJyb3I7CisJCQlpZiAoaXQtPmVycm9yID49IG9uZWNwdXRpY2spIHsKKwkJCQlpdC0+ZXhwaXJlcyA9IGNwdXRpbWVfc3ViKGl0LT5leHBpcmVzLAorCQkJCQkJCSAgY3B1dGltZV9vbmVfamlmZnkpOworCQkJCWl0LT5lcnJvciAtPSBvbmVjcHV0aWNrOworCQkJfQorCQl9IGVsc2UgeworCQkJaXQtPmV4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJCX0KKworCQl0cmFjZV9pdGltZXJfZXhwaXJlKHNpZ25vID09IFNJR1BST0YgPworCQkJCSAgICBJVElNRVJfUFJPRiA6IElUSU1FUl9WSVJUVUFMLAorCQkJCSAgICB0c2stPnNpZ25hbC0+bGVhZGVyX3BpZCwgY3VyX3RpbWUpOworCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oc2lnbm8sIFNFTkRfU0lHX1BSSVYsIHRzayk7CisJfQorCisJaWYgKCFjcHV0aW1lX2VxKGl0LT5leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCisJICAgIChjcHV0aW1lX2VxKCpleHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CisJICAgICBjcHV0aW1lX2x0KGl0LT5leHBpcmVzLCAqZXhwaXJlcykpKSB7CisJCSpleHBpcmVzID0gaXQtPmV4cGlyZXM7CisJfQorfQorCiAvKgogICogQ2hlY2sgZm9yIGFueSBwZXItdGhyZWFkIENQVSB0aW1lcnMgdGhhdCBoYXZlIGZpcmVkIGFuZCBtb3ZlIHRoZW0KICAqIG9mZiB0aGUgdHNrLT4qX3RpbWVycyBsaXN0IG9udG8gdGhlIGZpcmluZyBsaXN0LiAgUGVyLXRocmVhZCB0aW1lcnMKQEAgLTEwOTAsMTAgKzExMjcsMTAgQEAKIAkgKiBEb24ndCBzYW1wbGUgdGhlIGN1cnJlbnQgcHJvY2VzcyBDUFUgY2xvY2tzIGlmIHRoZXJlIGFyZSBubyB0aW1lcnMuCiAJICovCiAJaWYgKGxpc3RfZW1wdHkoJnRpbWVyc1tDUFVDTE9DS19QUk9GXSkgJiYKLQkgICAgY3B1dGltZV9lcShzaWctPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgorCSAgICBjcHV0aW1lX2VxKHNpZy0+aXRbQ1BVQ0xPQ0tfUFJPRl0uZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgogCSAgICBzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSAmJgogCSAgICBsaXN0X2VtcHR5KCZ0aW1lcnNbQ1BVQ0xPQ0tfVklSVF0pICYmCi0JICAgIGNwdXRpbWVfZXEoc2lnLT5pdF92aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKKwkgICAgY3B1dGltZV9lcShzaWctPml0W0NQVUNMT0NLX1ZJUlRdLmV4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKIAkgICAgbGlzdF9lbXB0eSgmdGltZXJzW0NQVUNMT0NLX1NDSEVEXSkpIHsKIAkJc3RvcF9wcm9jZXNzX3RpbWVycyh0c2spOwogCQlyZXR1cm47CkBAIC0xMTUzLDM4ICsxMTkwLDExIEBACiAJLyoKIAkgKiBDaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSBwcm9jZXNzIHRpbWVycy4KIAkgKi8KLQlpZiAoIWNwdXRpbWVfZXEoc2lnLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykpIHsKLQkJaWYgKGNwdXRpbWVfZ2UocHRpbWUsIHNpZy0+aXRfcHJvZl9leHBpcmVzKSkgewotCQkJLyogSVRJTUVSX1BST0YgZmlyZXMgYW5kIHJlbG9hZHMuICAqLwotCQkJc2lnLT5pdF9wcm9mX2V4cGlyZXMgPSBzaWctPml0X3Byb2ZfaW5jcjsKLQkJCWlmICghY3B1dGltZV9lcShzaWctPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSkgewotCQkJCXNpZy0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV9hZGQoCi0JCQkJCXNpZy0+aXRfcHJvZl9leHBpcmVzLCBwdGltZSk7Ci0JCQl9Ci0JCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oU0lHUFJPRiwgU0VORF9TSUdfUFJJViwgdHNrKTsKLQkJfQotCQlpZiAoIWNwdXRpbWVfZXEoc2lnLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKLQkJICAgIChjcHV0aW1lX2VxKHByb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCQkgICAgIGNwdXRpbWVfbHQoc2lnLT5pdF9wcm9mX2V4cGlyZXMsIHByb2ZfZXhwaXJlcykpKSB7Ci0JCQlwcm9mX2V4cGlyZXMgPSBzaWctPml0X3Byb2ZfZXhwaXJlczsKLQkJfQotCX0KLQlpZiAoIWNwdXRpbWVfZXEoc2lnLT5pdF92aXJ0X2V4cGlyZXMsIGNwdXRpbWVfemVybykpIHsKLQkJaWYgKGNwdXRpbWVfZ2UodXRpbWUsIHNpZy0+aXRfdmlydF9leHBpcmVzKSkgewotCQkJLyogSVRJTUVSX1ZJUlRVQUwgZmlyZXMgYW5kIHJlbG9hZHMuICAqLwotCQkJc2lnLT5pdF92aXJ0X2V4cGlyZXMgPSBzaWctPml0X3ZpcnRfaW5jcjsKLQkJCWlmICghY3B1dGltZV9lcShzaWctPml0X3ZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSkgewotCQkJCXNpZy0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV9hZGQoCi0JCQkJCXNpZy0+aXRfdmlydF9leHBpcmVzLCB1dGltZSk7Ci0JCQl9Ci0JCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oU0lHVlRBTFJNLCBTRU5EX1NJR19QUklWLCB0c2spOwotCQl9Ci0JCWlmICghY3B1dGltZV9lcShzaWctPml0X3ZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgotCQkgICAgKGNwdXRpbWVfZXEodmlydF9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JCSAgICAgY3B1dGltZV9sdChzaWctPml0X3ZpcnRfZXhwaXJlcywgdmlydF9leHBpcmVzKSkpIHsKLQkJCXZpcnRfZXhwaXJlcyA9IHNpZy0+aXRfdmlydF9leHBpcmVzOwotCQl9Ci0JfQorCWNoZWNrX2NwdV9pdGltZXIodHNrLCAmc2lnLT5pdFtDUFVDTE9DS19QUk9GXSwgJnByb2ZfZXhwaXJlcywgcHRpbWUsCisJCQkgU0lHUFJPRik7CisJY2hlY2tfY3B1X2l0aW1lcih0c2ssICZzaWctPml0W0NQVUNMT0NLX1ZJUlRdLCAmdmlydF9leHBpcmVzLCB1dGltZSwKKwkJCSBTSUdWVEFMUk0pOworCiAJaWYgKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSB7CiAJCXVuc2lnbmVkIGxvbmcgcHNlY3MgPSBjcHV0aW1lX3RvX3NlY3MocHRpbWUpOwogCQljcHV0aW1lX3QgeDsKQEAgLTE0NTcsNyArMTQ2Nyw3IEBACiAJCWlmICghY3B1dGltZV9lcSgqb2xkdmFsLCBjcHV0aW1lX3plcm8pKSB7CiAJCQlpZiAoY3B1dGltZV9sZSgqb2xkdmFsLCBub3cuY3B1KSkgewogCQkJCS8qIEp1c3QgYWJvdXQgdG8gZmlyZS4gKi8KLQkJCQkqb2xkdmFsID0gamlmZmllc190b19jcHV0aW1lKDEpOworCQkJCSpvbGR2YWwgPSBjcHV0aW1lX29uZV9qaWZmeTsKIAkJCX0gZWxzZSB7CiAJCQkJKm9sZHZhbCA9IGNwdXRpbWVfc3ViKCpvbGR2YWwsIG5vdy5jcHUpOwogCQkJfQpAQCAtMTcwMywxMCArMTcxMywxNSBAQAogCQkubnNsZWVwID0gdGhyZWFkX2NwdV9uc2xlZXAsCiAJCS5uc2xlZXBfcmVzdGFydCA9IHRocmVhZF9jcHVfbnNsZWVwX3Jlc3RhcnQsCiAJfTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsICZwcm9jZXNzKTsKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19USFJFQURfQ1BVVElNRV9JRCwgJnRocmVhZCk7CiAKKwljcHV0aW1lX3RvX3RpbWVzcGVjKGNwdXRpbWVfb25lX2ppZmZ5LCAmdHMpOworCW9uZWNwdXRpY2sgPSB0cy50dl9uc2VjOworCVdBUk5fT04odHMudHZfc2VjICE9IDApOworCiAJcmV0dXJuIDA7CiB9CiBfX2luaXRjYWxsKGluaXRfcG9zaXhfY3B1X3RpbWVycyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvY29uc29sZS5jIGIva2VybmVsL3Bvd2VyL2NvbnNvbGUuYwppbmRleCBhMzk2MWIyMC4uNTE4NzEzNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2NvbnNvbGUuYworKysgYi9rZXJuZWwvcG93ZXIvY29uc29sZS5jCkBAIC0xNCw1NiArMTQsMTMgQEAKICNkZWZpbmUgU1VTUEVORF9DT05TT0xFCShNQVhfTlJfQ09OU09MRVMtMSkKIAogc3RhdGljIGludCBvcmlnX2ZnY29uc29sZSwgb3JpZ19rbXNnOwotc3RhdGljIGludCBkaXNhYmxlX3Z0X3N3aXRjaDsKLQotLyoKLSAqIE5vcm1hbGx5IGR1cmluZyBhIHN1c3BlbmQsIHdlIGFsbG9jYXRlIGEgbmV3IGNvbnNvbGUgYW5kIHN3aXRjaCB0byBpdC4KLSAqIFdoZW4gd2UgcmVzdW1lLCB3ZSBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwgY29uc29sZS4gIFRoaXMgc3dpdGNoCi0gKiBjYW4gYmUgc2xvdywgc28gb24gc3lzdGVtcyB3aGVyZSB0aGUgZnJhbWVidWZmZXIgY2FuIGhhbmRsZSByZXN0b3JhdGlvbgotICogb2YgdmlkZW8gcmVnaXN0ZXJzIGFueXdheXMsIHRoZXJlJ3MgbGl0dGxlIHBvaW50IGluIGRvaW5nIHRoZSBjb25zb2xlCi0gKiBzd2l0Y2guICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nIGl0ICcwJy4KLSAqLwotdm9pZCBwbV9zZXRfdnRfc3dpdGNoKGludCBkb19zd2l0Y2gpCi17Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCWRpc2FibGVfdnRfc3dpdGNoID0gIWRvX3N3aXRjaDsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBtX3NldF92dF9zd2l0Y2gpOwogCiBpbnQgcG1fcHJlcGFyZV9jb25zb2xlKHZvaWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCi0JaWYgKGRpc2FibGVfdnRfc3dpdGNoKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jb3JpZ19mZ2NvbnNvbGUgPSBmZ19jb25zb2xlOwotCi0JaWYgKHZjX2FsbG9jYXRlKFNVU1BFTkRfQ09OU09MRSkpIHsKLQkgIC8qIHdlIGNhbid0IGhhdmUgYSBmcmVlIFZDIGZvciBub3cuIFRvbyBiYWQsCi0JICAgKiB3ZSBkb24ndCB3YW50IHRvIG1lc3MgdGhlIHNjcmVlbiBmb3Igbm93LiAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJb3JpZ19mZ2NvbnNvbGUgPSB2dF9tb3ZlX3RvX2NvbnNvbGUoU1VTUEVORF9DT05TT0xFLCAxKTsKKwlpZiAob3JpZ19mZ2NvbnNvbGUgPCAwKQogCQlyZXR1cm4gMTsKLQl9CiAKLQlpZiAoc2V0X2NvbnNvbGUoU1VTUEVORF9DT05TT0xFKSkgewotCQkvKgotCQkgKiBXZSdyZSB1bmFibGUgdG8gc3dpdGNoIHRvIHRoZSBTVVNQRU5EX0NPTlNPTEUuCi0JCSAqIExldCB0aGUgY2FsbGluZyBmdW5jdGlvbiBrbm93IHNvIGl0IGNhbiBkZWNpZGUKLQkJICogd2hhdCB0byBkby4KLQkJICovCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQotCWlmICh2dF93YWl0YWN0aXZlKFNVU1BFTkRfQ09OU09MRSkpIHsKLQkJcHJfZGVidWcoIlN1c3BlbmQ6IENhbid0IHN3aXRjaCBWQ3MuIik7Ci0JCXJldHVybiAxOwotCX0KIAlvcmlnX2ttc2cgPSBrbXNnX3JlZGlyZWN0OwogCWttc2dfcmVkaXJlY3QgPSBTVVNQRU5EX0NPTlNPTEU7CiAJcmV0dXJuIDA7CkBAIC03MSwxOSArMjgsOSBAQAogCiB2b2lkIHBtX3Jlc3RvcmVfY29uc29sZSh2b2lkKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQlpZiAoZGlzYWJsZV92dF9zd2l0Y2gpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQlyZXR1cm47CisJaWYgKG9yaWdfZmdjb25zb2xlID49IDApIHsKKwkJdnRfbW92ZV90b19jb25zb2xlKG9yaWdfZmdjb25zb2xlLCAwKTsKKwkJa21zZ19yZWRpcmVjdCA9IG9yaWdfa21zZzsKIAl9Ci0Jc2V0X2NvbnNvbGUob3JpZ19mZ2NvbnNvbGUpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQotCWlmICh2dF93YWl0YWN0aXZlKG9yaWdfZmdjb25zb2xlKSkgewotCQlwcl9kZWJ1ZygiUmVzdW1lOiBDYW4ndCBzd2l0Y2ggVkNzLiIpOwotCQlyZXR1cm47Ci0JfQotCi0Ja21zZ19yZWRpcmVjdCA9IG9yaWdfa21zZzsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggZGEyMDcyZC4uY2MyZTU1MyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYworKysgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCkBAIC05LDYgKzksNyBAQAogI3VuZGVmIERFQlVHCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vb20uaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggOTc5NTViMC4uMzZjYjE2OCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTYxOSw3ICs2MTksNyBAQAogCQlCVUdfT04oIXJlZ2lvbik7CiAJfSBlbHNlCiAJCS8qIFRoaXMgYWxsb2NhdGlvbiBjYW5ub3QgZmFpbCAqLwotCQlyZWdpb24gPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2Yoc3RydWN0IG5vc2F2ZV9yZWdpb24pKTsKKwkJcmVnaW9uID0gYWxsb2NfYm9vdG1lbShzaXplb2Yoc3RydWN0IG5vc2F2ZV9yZWdpb24pKTsKIAlyZWdpb24tPnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKIAlyZWdpb24tPmVuZF9wZm4gPSBlbmRfcGZuOwogCWxpc3RfYWRkX3RhaWwoJnJlZ2lvbi0+bGlzdCwgJm5vc2F2ZV9yZWdpb25zKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCA2MDIwMzNhLi5mMzhiMDdmIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0yMDYsMTIgKzIwNiwxMSBAQAogI2lmZGVmIENPTkZJR19CT09UX1BSSU5US19ERUxBWQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGJvb3RfZGVsYXk7IC8qIG1zZWNzIGRlbGF5IGFmdGVyIGVhY2ggcHJpbnRrIGR1cmluZyBib290dXAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcHJpbnRrX2RlbGF5X21zZWM7IC8qIHBlciBtc2VjLCBiYXNlZCBvbiBib290X2RlbGF5ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGxvb3BzX3Blcl9tc2VjOwkvKiBiYXNlZCBvbiBib290X2RlbGF5ICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGJvb3RfZGVsYXlfc2V0dXAoY2hhciAqc3RyKQogewogCXVuc2lnbmVkIGxvbmcgbHBqOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBsb29wc19wZXJfbXNlYzsKIAogCWxwaiA9IHByZXNldF9scGogPyBwcmVzZXRfbHBqIDogMTAwMDAwMDsJLyogc29tZSBndWVzcyAqLwogCWxvb3BzX3Blcl9tc2VjID0gKHVuc2lnbmVkIGxvbmcgbG9uZylscGogLyAxMDAwICogSFo7CkBAIC0yMjAsMTAgKzIxOSw5IEBACiAJaWYgKGJvb3RfZGVsYXkgPiAxMCAqIDEwMDApCiAJCWJvb3RfZGVsYXkgPSAwOwogCi0JcHJpbnRrX2RlbGF5X21zZWMgPSBsb29wc19wZXJfbXNlYzsKLQlwcmludGsoS0VSTl9ERUJVRyAiYm9vdF9kZWxheTogJXUsIHByZXNldF9scGo6ICVsZCwgbHBqOiAlbHUsICIKLQkJIkhaOiAlZCwgcHJpbnRrX2RlbGF5X21zZWM6ICVsbHVcbiIsCi0JCWJvb3RfZGVsYXksIHByZXNldF9scGosIGxwaiwgSFosIHByaW50a19kZWxheV9tc2VjKTsKKwlwcl9kZWJ1ZygiYm9vdF9kZWxheTogJXUsIHByZXNldF9scGo6ICVsZCwgbHBqOiAlbHUsICIKKwkJIkhaOiAlZCwgbG9vcHNfcGVyX21zZWM6ICVsbHVcbiIsCisJCWJvb3RfZGVsYXksIHByZXNldF9scGosIGxwaiwgSFosIGxvb3BzX3Blcl9tc2VjKTsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImJvb3RfZGVsYXk9IiwgYm9vdF9kZWxheV9zZXR1cCk7CkBAIC0yMzYsNyArMjM0LDcgQEAKIAlpZiAoYm9vdF9kZWxheSA9PSAwIHx8IHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fQk9PVElORykKIAkJcmV0dXJuOwogCi0JayA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcHJpbnRrX2RlbGF5X21zZWMgKiBib290X2RlbGF5OworCWsgPSAodW5zaWduZWQgbG9uZyBsb25nKWxvb3BzX3Blcl9tc2VjICogYm9vdF9kZWxheTsKIAogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhib290X2RlbGF5KTsKIAl3aGlsZSAoaykgewpAQCAtNjU1LDYgKzY1MywyMCBAQAogc3RhdGljIGludCBuZXdfdGV4dF9saW5lID0gMTsKIHN0YXRpYyBjaGFyIHByaW50a19idWZbMTAyNF07CiAKK2ludCBwcmludGtfZGVsYXlfbXNlYyBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2RlbGF5KHZvaWQpCit7CisJaWYgKHVubGlrZWx5KHByaW50a19kZWxheV9tc2VjKSkgeworCQlpbnQgbSA9IHByaW50a19kZWxheV9tc2VjOworCisJCXdoaWxlIChtLS0pIHsKKwkJCW1kZWxheSgxKTsKKwkJCXRvdWNoX25taV93YXRjaGRvZygpOworCQl9CisJfQorfQorCiBhc21saW5rYWdlIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCWludCBwcmludGVkX2xlbiA9IDA7CkBAIC02NjQsNiArNjc2LDcgQEAKIAljaGFyICpwOwogCiAJYm9vdF9kZWxheV9tc2VjKCk7CisJcHJpbnRrX2RlbGF5KCk7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAkvKiBUaGlzIHN0b3BzIHRoZSBob2xkZXIgb2YgY29uc29sZV9zZW0ganVzdCB3aGVyZSB3ZSB3YW50IGhpbSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3Byb2ZpbGUuYyBiL2tlcm5lbC9wcm9maWxlLmMKaW5kZXggNDE5MjUwZS4uYTU1ZDNhMyAxMDA2NDQKLS0tIGEva2VybmVsL3Byb2ZpbGUuYworKysgYi9rZXJuZWwvcHJvZmlsZS5jCkBAIC00NDIsNDggKzQ0Miw1MSBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgaW50IHByb2ZfY3B1X21hc2tfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcHJvZl9jcHVfbWFza19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSBjcHVtYXNrX3NjbnByaW50ZihwYWdlLCBjb3VudCwgZGF0YSk7Ci0JaWYgKGNvdW50IC0gbGVuIDwgMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JcmV0dXJuIGxlbjsKKwlzZXFfY3B1bWFzayhtLCBwcm9mX2NwdV9tYXNrKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9mX2NwdV9tYXNrX3dyaXRlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsCi0JY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHByb2ZfY3B1X21hc2tfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBjcHVtYXNrICptYXNrID0gZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZ1bGxfY291bnQgPSBjb3VudCwgZXJyOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9mX2NwdV9tYXNrX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByb2ZfY3B1X21hc2tfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQorewogCWNwdW1hc2tfdmFyX3QgbmV3X3ZhbHVlOworCWludCBlcnI7CiAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZuZXdfdmFsdWUsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWVyciA9IGNwdW1hc2tfcGFyc2VfdXNlcihidWZmZXIsIGNvdW50LCBuZXdfdmFsdWUpOwogCWlmICghZXJyKSB7Ci0JCWNwdW1hc2tfY29weShtYXNrLCBuZXdfdmFsdWUpOwotCQllcnIgPSBmdWxsX2NvdW50OworCQljcHVtYXNrX2NvcHkocHJvZl9jcHVfbWFzaywgbmV3X3ZhbHVlKTsKKwkJZXJyID0gY291bnQ7CiAJfQogCWZyZWVfY3B1bWFza192YXIobmV3X3ZhbHVlKTsKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9mX2NwdV9tYXNrX3Byb2NfZm9wcyA9IHsKKwkub3BlbgkJPSBwcm9mX2NwdV9tYXNrX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBwcm9mX2NwdV9tYXNrX3Byb2Nfd3JpdGUsCit9OworCiB2b2lkIGNyZWF0ZV9wcm9mX2NwdV9tYXNrKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdF9pcnFfZGlyKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7Ci0KIAkvKiBjcmVhdGUgL3Byb2MvaXJxL3Byb2ZfY3B1X21hc2sgKi8KLQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwcm9mX2NwdV9tYXNrIiwgMDYwMCwgcm9vdF9pcnFfZGlyKTsKLQlpZiAoIWVudHJ5KQotCQlyZXR1cm47Ci0JZW50cnktPmRhdGEgPSBwcm9mX2NwdV9tYXNrOwotCWVudHJ5LT5yZWFkX3Byb2MgPSBwcm9mX2NwdV9tYXNrX3JlYWRfcHJvYzsKLQllbnRyeS0+d3JpdGVfcHJvYyA9IHByb2ZfY3B1X21hc2tfd3JpdGVfcHJvYzsKKwlwcm9jX2NyZWF0ZSgicHJvZl9jcHVfbWFzayIsIDA2MDAsIHJvb3RfaXJxX2RpciwgJnByb2ZfY3B1X21hc2tfcHJvY19mb3BzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggYmQ1ZDVjOC4uMzdhYzQ1NCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKiBBdXRob3JzOiBEaXBhbmthciBTYXJtYSA8ZGlwYW5rYXJAaW4uaWJtLmNvbT4KICAqCSAgICBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgotICogCisgKgogICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIHdvcmsgYnkgUGF1bCBNY0tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgogICogYW5kIGlucHV0cyBmcm9tIFJ1c3R5IFJ1c3NlbGwsIEFuZHJlYSBBcmNhbmdlbGkgYW5kIEFuZGkgS2xlZW4uCiAgKiBQYXBlcnM6CkBAIC0yNyw3ICsyNyw3IEBACiAgKiBodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMuc2MucGRmIChPTFMyMDAxKQogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKKyAqCQlodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjdXBkYXRlLmh0bWwKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNzQsNiArNzQsOCBAQAogCWNvbXBsZXRlKCZyY3UtPmNvbXBsZXRpb24pOwogfQogCisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKwogLyoqCiAgKiBzeW5jaHJvbml6ZV9yY3UgLSB3YWl0IHVudGlsIGEgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgogICoKQEAgLTg3LDcgKzg5LDcgQEAKIHsKIAlzdHJ1Y3QgcmN1X3N5bmNocm9uaXplIHJjdTsKIAotCWlmIChyY3VfYmxvY2tpbmdfaXNfZ3AoKSkKKwlpZiAoIXJjdV9zY2hlZHVsZXJfYWN0aXZlKQogCQlyZXR1cm47CiAKIAlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKQEAgLTk4LDYgKzEwMCw0NiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTsKIAorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworCisvKioKKyAqIHN5bmNocm9uaXplX3NjaGVkIC0gd2FpdCB1bnRpbCBhbiByY3Utc2NoZWQgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorICoKKyAqIENvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIHJjdS1zY2hlZAorICogZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLCBpbiBvdGhlciB3b3JkcyBhZnRlciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZworICogcmN1LXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gICBUaGVzZSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9ja19zY2hlZCgpIGFuZAorICogcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCksIGFuZCBtYXkgYmUgbmVzdGVkLiAgTm90ZSB0aGF0IHByZWVtcHRfZGlzYWJsZSgpLAorICogbG9jYWxfaXJxX2Rpc2FibGUoKSwgYW5kIHNvIG9uIG1heSBiZSB1c2VkIGluIHBsYWNlIG9mCisgKiByY3VfcmVhZF9sb2NrX3NjaGVkKCkuCisgKgorICogVGhpcyBtZWFucyB0aGF0IGFsbCBwcmVlbXB0X2Rpc2FibGUgY29kZSBzZXF1ZW5jZXMsIGluY2x1ZGluZyBOTUkgYW5kCisgKiBoYXJkd2FyZS1pbnRlcnJ1cHQgaGFuZGxlcnMsIGluIHByb2dyZXNzIG9uIGVudHJ5IHdpbGwgaGF2ZSBjb21wbGV0ZWQKKyAqIGJlZm9yZSB0aGlzIHByaW1pdGl2ZSByZXR1cm5zLiAgSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdAorICogc29mdGlycSBoYW5kbGVycyB3aWxsIGhhdmUgY29tcGxldGVkLCBzaW5jZSBpbiBzb21lIGtlcm5lbHMsIHRoZXNlCisgKiBoYW5kbGVycyBjYW4gcnVuIGluIHByb2Nlc3MgY29udGV4dCwgYW5kIGNhbiBibG9jay4KKyAqCisgKiBUaGlzIHByaW1pdGl2ZSBwcm92aWRlcyB0aGUgZ3VhcmFudGVlcyBtYWRlIGJ5IHRoZSAobm93IHJlbW92ZWQpCisgKiBzeW5jaHJvbml6ZV9rZXJuZWwoKSBBUEkuICBJbiBjb250cmFzdCwgc3luY2hyb25pemVfcmN1KCkgb25seQorICogZ3VhcmFudGVlcyB0aGF0IHJjdV9yZWFkX2xvY2soKSBzZWN0aW9ucyB3aWxsIGhhdmUgY29tcGxldGVkLgorICogSW4gImNsYXNzaWMgUkNVIiwgdGhlc2UgdHdvIGd1YXJhbnRlZXMgaGFwcGVuIHRvIGJlIG9uZSBhbmQKKyAqIHRoZSBzYW1lLCBidXQgY2FuIGRpZmZlciBpbiByZWFsdGltZSBSQ1UgaW1wbGVtZW50YXRpb25zLgorICovCit2b2lkIHN5bmNocm9uaXplX3NjaGVkKHZvaWQpCit7CisJc3RydWN0IHJjdV9zeW5jaHJvbml6ZSByY3U7CisKKwlpZiAocmN1X2Jsb2NraW5nX2lzX2dwKCkpCisJCXJldHVybjsKKworCWluaXRfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOworCS8qIFdpbGwgd2FrZSBtZSBhZnRlciBSQ1UgZmluaXNoZWQuICovCisJY2FsbF9yY3Vfc2NoZWQoJnJjdS5oZWFkLCB3YWtlbWVfYWZ0ZXJfcmN1KTsKKwkvKiBXYWl0IGZvciBpdC4gKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zY2hlZCk7CisKIC8qKgogICogc3luY2hyb25pemVfcmN1X2JoIC0gd2FpdCB1bnRpbCBhbiByY3VfYmggZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IGIzM2RiNTMuLjIzMzc2OGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtMTgsNyArMTgsNyBAQAogICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDYKICAqCiAgKiBBdXRob3JzOiBQYXVsIEUuIE1jS2VubmV5IDxwYXVsbWNrQHVzLmlibS5jb20+Ci0gKiAgICAgICAgICBKb3NoIFRyaXBsZXR0IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4KKyAqCSAgSm9zaCBUcmlwbGV0dCA8am9zaEBmcmVlZGVza3RvcC5vcmc+CiAgKgogICogU2VlIGFsc286ICBEb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAogICovCkBAIC01MCw3ICs1MCw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4gYW5kICIKLSAgICAgICAgICAgICAgIkpvc2ggVHJpcGxldHQgPGpvc2hAZnJlZWRlc2t0b3Aub3JnPiIpOworCSAgICAgICJKb3NoIFRyaXBsZXR0IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4iKTsKIAogc3RhdGljIGludCBucmVhZGVycyA9IC0xOwkvKiAjIHJlYWRlciB0aHJlYWRzLCBkZWZhdWx0cyB0byAyKm5jcHVzICovCiBzdGF0aWMgaW50IG5mYWtld3JpdGVycyA9IDQ7CS8qICMgZmFrZSB3cml0ZXIgdGhyZWFkcyAqLwpAQCAtMTEwLDggKzExMCw4IEBACiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKHJjdV90b3J0dXJlX2ZyZWVsaXN0KTsKLXN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmUgKnJjdV90b3J0dXJlX2N1cnJlbnQgPSBOVUxMOwotc3RhdGljIGxvbmcgcmN1X3RvcnR1cmVfY3VycmVudF92ZXJzaW9uID0gMDsKK3N0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmUgKnJjdV90b3J0dXJlX2N1cnJlbnQ7CitzdGF0aWMgbG9uZyByY3VfdG9ydHVyZV9jdXJyZW50X3ZlcnNpb247CiBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlIHJjdV90b3J0dXJlc1sxMCAqIFJDVV9UT1JUVVJFX1BJUEVfTEVOXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmN1X3RvcnR1cmVfbG9jayk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUobG9uZyBbUkNVX1RPUlRVUkVfUElQRV9MRU4gKyAxXSwgcmN1X3RvcnR1cmVfY291bnQpID0KQEAgLTEyNCwxMSArMTI0LDExIEBACiBzdGF0aWMgYXRvbWljX3Qgbl9yY3VfdG9ydHVyZV9mcmVlOwogc3RhdGljIGF0b21pY190IG5fcmN1X3RvcnR1cmVfbWJlcnJvcjsKIHN0YXRpYyBhdG9taWNfdCBuX3JjdV90b3J0dXJlX2Vycm9yOwotc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV90aW1lcnMgPSAwOworc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV90aW1lcnM7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCByY3VfdG9ydHVyZV9yZW1vdmVkOwogc3RhdGljIGNwdW1hc2tfdmFyX3Qgc2h1ZmZsZV90bXBfbWFzazsKIAotc3RhdGljIGludCBzdHV0dGVyX3BhdXNlX3Rlc3QgPSAwOworc3RhdGljIGludCBzdHV0dGVyX3BhdXNlX3Rlc3Q7CiAKICNpZiBkZWZpbmVkKE1PRFVMRSkgfHwgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVF9SVU5OQUJMRSkKICNkZWZpbmUgUkNVVE9SVFVSRV9SVU5OQUJMRV9JTklUIDEKQEAgLTI2Nyw3ICsyNjcsOCBAQAogCWludCBpcnFfY2FwYWJsZTsKIAljaGFyICpuYW1lOwogfTsKLXN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzICpjdXJfb3BzID0gTlVMTDsKKworc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHM7CiAKIC8qCiAgKiBEZWZpbml0aW9ucyBmb3IgcmN1IHRvcnR1cmUgdGVzdGluZy4KQEAgLTI4MSwxNCArMjgyLDE3IEBACiAKIHN0YXRpYyB2b2lkIHJjdV9yZWFkX2RlbGF5KHN0cnVjdCByY3VfcmFuZG9tX3N0YXRlICpycnNwKQogewotCWxvbmcgZGVsYXk7Ci0JY29uc3QgbG9uZyBsb25nZGVsYXkgPSAyMDA7CisJY29uc3QgdW5zaWduZWQgbG9uZyBzaG9ydGRlbGF5X3VzID0gMjAwOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZ2RlbGF5X21zID0gNTA7CiAKLQkvKiBXZSB3YW50IHRoZXJlIHRvIGJlIGxvbmctcnVubmluZyByZWFkZXJzLCBidXQgbm90IGFsbCB0aGUgdGltZS4gKi8KKwkvKiBXZSB3YW50IGEgc2hvcnQgZGVsYXkgc29tZXRpbWVzIHRvIG1ha2UgYSByZWFkZXIgZGVsYXkgdGhlIGdyYWNlCisJICogcGVyaW9kLCBhbmQgd2Ugd2FudCBhIGxvbmcgZGVsYXkgb2NjYXNpb25hbGx5IHRvIHRyaWdnZXIKKwkgKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUuICovCiAKLQlkZWxheSA9IHJjdV9yYW5kb20ocnJzcCkgJSAobnJlYWxyZWFkZXJzICogMiAqIGxvbmdkZWxheSk7Ci0JaWYgKCFkZWxheSkKLQkJdWRlbGF5KGxvbmdkZWxheSk7CisJaWYgKCEocmN1X3JhbmRvbShycnNwKSAlIChucmVhbHJlYWRlcnMgKiAyMDAwICogbG9uZ2RlbGF5X21zKSkpCisJCW1kZWxheShsb25nZGVsYXlfbXMpOworCWlmICghKHJjdV9yYW5kb20ocnJzcCkgJSAobnJlYWxyZWFkZXJzICogMiAqIHNob3J0ZGVsYXlfdXMpKSkKKwkJdWRlbGF5KHNob3J0ZGVsYXlfdXMpOwogfQogCiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9yZWFkX3VubG9jayhpbnQgaWR4KSBfX3JlbGVhc2VzKFJDVSkKQEAgLTMzOSw4ICszNDMsOCBAQAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdSwKIAkuY2JfYmFycmllcgk9IHJjdV9iYXJyaWVyLAogCS5zdGF0cwkJPSBOVUxMLAotCS5pcnFfY2FwYWJsZSAJPSAxLAotCS5uYW1lIAkJPSAicmN1IgorCS5pcnFfY2FwYWJsZQk9IDEsCisJLm5hbWUJCT0gInJjdSIKIH07CiAKIHN0YXRpYyB2b2lkIHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgcmN1X3RvcnR1cmUgKnApCkBAIC02MzgsNyArNjQyLDggQEAKIAogCWRvIHsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0JCWlmICgocnAgPSByY3VfdG9ydHVyZV9hbGxvYygpKSA9PSBOVUxMKQorCQlycCA9IHJjdV90b3J0dXJlX2FsbG9jKCk7CisJCWlmIChycCA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCXJwLT5ydG9ydF9waXBlX2NvdW50ID0gMDsKIAkJdWRlbGF5KHJjdV9yYW5kb20oJnJhbmQpICYgMHgzZmYpOwpAQCAtMTExMCw3ICsxMTE1LDcgQEAKIAkJcHJpbnRrKEtFUk5fQUxFUlQgInJjdXRvcnR1cmU6IGludmFsaWQgdG9ydHVyZSB0eXBlOiBcIiVzXCJcbiIsCiAJCSAgICAgICB0b3J0dXJlX3R5cGUpOwogCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKLQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjdXJfb3BzLT5pbml0KQogCQljdXJfb3BzLT5pbml0KCk7IC8qIG5vICJnb3RvIHVud2luZCIgcHJpb3IgdG8gdGhpcyBwb2ludCEhISAqLwpAQCAtMTE2MSw3ICsxMTY2LDcgQEAKIAkJZ290byB1bndpbmQ7CiAJfQogCWZha2V3cml0ZXJfdGFza3MgPSBremFsbG9jKG5mYWtld3JpdGVycyAqIHNpemVvZihmYWtld3JpdGVyX3Rhc2tzWzBdKSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKKwkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoZmFrZXdyaXRlcl90YXNrcyA9PSBOVUxMKSB7CiAJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygib3V0IG9mIG1lbW9yeSIpOwogCQlmaXJzdGVyciA9IC1FTk9NRU07CkBAIC0xMTcwLDcgKzExNzUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBuZmFrZXdyaXRlcnM7IGkrKykgewogCQlWRVJCT1NFX1BSSU5US19TVFJJTkcoIkNyZWF0aW5nIHJjdV90b3J0dXJlX2Zha2V3cml0ZXIgdGFzayIpOwogCQlmYWtld3JpdGVyX3Rhc2tzW2ldID0ga3RocmVhZF9ydW4ocmN1X3RvcnR1cmVfZmFrZXdyaXRlciwgTlVMTCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyY3VfdG9ydHVyZV9mYWtld3JpdGVyIik7CisJCQkJCQkgICJyY3VfdG9ydHVyZV9mYWtld3JpdGVyIik7CiAJCWlmIChJU19FUlIoZmFrZXdyaXRlcl90YXNrc1tpXSkpIHsKIAkJCWZpcnN0ZXJyID0gUFRSX0VSUihmYWtld3JpdGVyX3Rhc2tzW2ldKTsKIAkJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygiRmFpbGVkIHRvIGNyZWF0ZSBmYWtld3JpdGVyIik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCA2YjExYjA3Li41MmIwNmY2IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCURvY3VtZW50YXRpb24vUkNVCisgKglEb2N1bWVudGF0aW9uL1JDVQogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEwNywyNyArMTA3LDIzIEBACiAgKi8KIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyZHAgPSAmcGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKLQlyY3VfcHJlZW1wdF9xcyhjcHUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwliYXJyaWVyKCk7CisJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKKwlyY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CiB9CiAKIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyZHAgPSAmcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJYmFycmllcigpOworCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDE7CiB9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKQEAgLTYwNSw4ICs2MDEsNiBAQAogewogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1cjsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9lbmQ7CiAKIAlpZiAoIWNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKQEAgLTYxNSw2ICs2MDksNyBAQAogCiAJLyogQWR2YW5jZSB0byBhIG5ldyBncmFjZSBwZXJpb2QgYW5kIGluaXRpYWxpemUgc3RhdGUuICovCiAJcnNwLT5ncG51bSsrOworCVdBUk5fT05fT05DRShyc3AtPnNpZ25hbGVkID09IFJDVV9HUF9JTklUKTsKIAlyc3AtPnNpZ25hbGVkID0gUkNVX0dQX0lOSVQ7IC8qIEhvbGQgb2ZmIGZvcmNlX3F1aWVzY2VudF9zdGF0ZS4gKi8KIAlyc3AtPmppZmZpZXNfZm9yY2VfcXMgPSBqaWZmaWVzICsgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUzsKIAlyZWNvcmRfZ3Bfc3RhbGxfY2hlY2tfdGltZShyc3ApOwpAQCAtNjMxLDcgKzYyNiw5IEBACiAKIAkvKiBTcGVjaWFsLWNhc2UgdGhlIGNvbW1vbiBzaW5nbGUtbGV2ZWwgY2FzZS4gKi8KIAlpZiAoTlVNX1JDVV9OT0RFUyA9PSAxKSB7CisJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CisJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOwogCQlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgT0suICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CkBAIC02NDQsNDIgKzY0MSwyOCBAQAogCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCiAJLyoKLQkgKiBTZXQgdGhlIHF1aWVzY2VudC1zdGF0ZS1uZWVkZWQgYml0cyBpbiBhbGwgdGhlIG5vbi1sZWFmIFJDVQotCSAqIG5vZGVzIGZvciBhbGwgY3VycmVudGx5IG9ubGluZSBDUFVzLiAgVGhpcyBvcGVyYXRpb24gcmVsaWVzCi0JICogb24gdGhlIGxheW91dCBvZiB0aGUgaGllcmFyY2h5IHdpdGhpbiB0aGUgcnNwLT5ub2RlW10gYXJyYXkuCi0JICogTm90ZSB0aGF0IG90aGVyIENQVXMgd2lsbCBhY2Nlc3Mgb25seSB0aGUgbGVhdmVzIG9mIHRoZQotCSAqIGhpZXJhcmNoeSwgd2hpY2ggc3RpbGwgaW5kaWNhdGUgdGhhdCBubyBncmFjZSBwZXJpb2QgaXMgaW4KLQkgKiBwcm9ncmVzcy4gIEluIGFkZGl0aW9uLCB3ZSBoYXZlIGV4Y2x1ZGVkIENQVS1ob3RwbHVnIG9wZXJhdGlvbnMuCi0JICoKLQkgKiBXZSB0aGVyZWZvcmUgZG8gbm90IG5lZWQgdG8gaG9sZCBhbnkgbG9ja3MuICBBbnkgcmVxdWlyZWQKLQkgKiBtZW1vcnkgYmFycmllcnMgd2lsbCBiZSBzdXBwbGllZCBieSB0aGUgbG9ja3MgZ3VhcmRpbmcgdGhlCi0JICogbGVhZiByY3Vfbm9kZXMgaW4gdGhlIGhpZXJhcmNoeS4KLQkgKi8KLQotCXJucF9lbmQgPSByc3AtPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOwotCWZvciAocm5wX2N1ciA9ICZyc3AtPm5vZGVbMF07IHJucF9jdXIgPCBybnBfZW5kOyBybnBfY3VyKyspCi0JCXJucF9jdXItPnFzbWFzayA9IHJucF9jdXItPnFzbWFza2luaXQ7Ci0KLQkvKgotCSAqIE5vdyBzZXQgdXAgdGhlIGxlYWYgbm9kZXMuICBIZXJlIHdlIG11c3QgYmUgY2FyZWZ1bC4gIEZpcnN0LAotCSAqIHdlIG5lZWQgdG8gaG9sZCB0aGUgbG9jayBpbiBvcmRlciB0byBleGNsdWRlIG90aGVyIENQVXMsIHdoaWNoCi0JICogbWlnaHQgYmUgY29udGVuZGluZyBmb3IgdGhlIGxlYWYgbm9kZXMnIGxvY2tzLiAgU2Vjb25kLCBhcwotCSAqIHNvb24gYXMgd2UgaW5pdGlhbGl6ZSBhIGdpdmVuIGxlYWYgbm9kZSwgaXRzIENQVXMgbWlnaHQgcnVuCi0JICogdXAgdGhlIHJlc3Qgb2YgdGhlIGhpZXJhcmNoeS4gIFdlIG11c3QgdGhlcmVmb3JlIGFjcXVpcmUgbG9ja3MKLQkgKiBmb3IgZWFjaCBub2RlIHRoYXQgd2UgdG91Y2ggZHVyaW5nIHRoaXMgc3RhZ2UuICAoQnV0IHdlIHN0aWxsCi0JICogYXJlIGV4Y2x1ZGluZyBDUFUtaG90cGx1ZyBvcGVyYXRpb25zLikKKwkgKiBTZXQgdGhlIHF1aWVzY2VudC1zdGF0ZS1uZWVkZWQgYml0cyBpbiBhbGwgdGhlIHJjdV9ub2RlCisJICogc3RydWN0dXJlcyBmb3IgYWxsIGN1cnJlbnRseSBvbmxpbmUgQ1BVcyBpbiBicmVhZHRoLWZpcnN0CisJICogb3JkZXIsIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3QgcmN1X25vZGUgc3RydWN0dXJlLiAgVGhpcworCSAqIG9wZXJhdGlvbiByZWxpZXMgb24gdGhlIGxheW91dCBvZiB0aGUgaGllcmFyY2h5IHdpdGhpbiB0aGUKKwkgKiByc3AtPm5vZGVbXSBhcnJheS4gIE5vdGUgdGhhdCBvdGhlciBDUFVzIHdpbGwgYWNjZXNzIG9ubHkKKwkgKiB0aGUgbGVhdmVzIG9mIHRoZSBoaWVyYXJjaHksIHdoaWNoIHN0aWxsIGluZGljYXRlIHRoYXQgbm8KKwkgKiBncmFjZSBwZXJpb2QgaXMgaW4gcHJvZ3Jlc3MsIGF0IGxlYXN0IHVudGlsIHRoZSBjb3JyZXNwb25kaW5nCisJICogbGVhZiBub2RlIGhhcyBiZWVuIGluaXRpYWxpemVkLiAgSW4gYWRkaXRpb24sIHdlIGhhdmUgZXhjbHVkZWQKKwkgKiBDUFUtaG90cGx1ZyBvcGVyYXRpb25zLgogCSAqCiAJICogTm90ZSB0aGF0IHRoZSBncmFjZSBwZXJpb2QgY2Fubm90IGNvbXBsZXRlIHVudGlsIHdlIGZpbmlzaAogCSAqIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBhcyB0aGVyZSB3aWxsIGJlIGF0IGxlYXN0IG9uZQogCSAqIHFzbWFzayBiaXQgc2V0IGluIHRoZSByb290IG5vZGUgdW50aWwgdGhhdCB0aW1lLCBuYW1lbHkgdGhlCi0JICogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDUFUuCisJICogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDUFUsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGhhdmUKKwkgKiBpcnFzIGRpc2FibGVkLgogCSAqLwotCXJucF9lbmQgPSAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOwotCXJucF9jdXIgPSByc3AtPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOwotCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7Ci0JCXNwaW5fbG9jaygmcm5wX2N1ci0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KLQkJcm5wX2N1ci0+cXNtYXNrID0gcm5wX2N1ci0+cXNtYXNraW5pdDsKLQkJc3Bpbl91bmxvY2soJnJucF9jdXItPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJZm9yIChybnAgPSAmcnNwLT5ub2RlWzBdOyBybnAgPCAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOyBybnArKykgeworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhybnApOworCQlybnAtPnFzbWFzayA9IHJucC0+cXNtYXNraW5pdDsKKwkJcm5wLT5ncG51bSA9IHJzcC0+Z3BudW07CisJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJfQogCiAJcnNwLT5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVDsgLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlIG5vdyBPSy4gKi8KQEAgLTcyMiw2ICs3MDUsNyBAQAogc3RhdGljIHZvaWQgY3B1X3F1aWV0X21za19maW5pc2goc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCV9fcmVsZWFzZXMocm5wLT5sb2NrKQogeworCVdBUk5fT05fT05DRShyc3AtPmNvbXBsZXRlZCA9PSByc3AtPmdwbnVtKTsKIAlyc3AtPmNvbXBsZXRlZCA9IHJzcC0+Z3BudW07CiAJcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CiAJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgcm9vdCBub2RlJ3Mgcm5wLT5sb2NrLiAqLwpAQCAtNzM5LDYgKzcyMyw4IEBACiAJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIAlfX3JlbGVhc2VzKHJucC0+bG9jaykKIHsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucF9jOworCiAJLyogV2FsayB1cCB0aGUgcmN1X25vZGUgaGllcmFyY2h5LiAqLwogCWZvciAoOzspIHsKIAkJaWYgKCEocm5wLT5xc21hc2sgJiBtYXNrKSkgewpAQCAtNzYyLDggKzc0OCwxMCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJucF9jID0gcm5wOwogCQlybnAgPSBybnAtPnBhcmVudDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlXQVJOX09OX09OQ0Uocm5wX2MtPnFzbWFzayk7CiAJfQogCiAJLyoKQEAgLTc3NiwxMCArNzY0LDEwIEBACiAKIC8qCiAgKiBSZWNvcmQgYSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVLCB3aGljaCBtdXN0IGVpdGhlciBiZQotICogdGhlIGN1cnJlbnQgQ1BVIG9yIGFuIG9mZmxpbmUgQ1BVLiAgVGhlIGxhc3Rjb21wIGFyZ3VtZW50IGlzIHVzZWQgdG8KLSAqIG1ha2Ugc3VyZSB3ZSBhcmUgc3RpbGwgaW4gdGhlIGdyYWNlIHBlcmlvZCBvZiBpbnRlcmVzdC4gIFdlIGRvbid0IHdhbnQKLSAqIHRvIGVuZCB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgYmFzZWQgb24gcXVpZXNjZW50IHN0YXRlcyBkZXRlY3RlZCBpbgotICogYW4gZWFybGllciBncmFjZSBwZXJpb2QhCisgKiB0aGUgY3VycmVudCBDUFUuICBUaGUgbGFzdGNvbXAgYXJndW1lbnQgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgYXJlCisgKiBzdGlsbCBpbiB0aGUgZ3JhY2UgcGVyaW9kIG9mIGludGVyZXN0LiAgV2UgZG9uJ3Qgd2FudCB0byBlbmQgdGhlIGN1cnJlbnQKKyAqIGdyYWNlIHBlcmlvZCBiYXNlZCBvbiBxdWllc2NlbnQgc3RhdGVzIGRldGVjdGVkIGluIGFuIGVhcmxpZXIgZ3JhY2UKKyAqIHBlcmlvZCEKICAqLwogc3RhdGljIHZvaWQKIGNwdV9xdWlldChpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwLCBsb25nIGxhc3Rjb21wKQpAQCAtODE0LDcgKzgwMiw2IEBACiAJCSAqIFRoaXMgR1AgY2FuJ3QgZW5kIHVudGlsIGNwdSBjaGVja3MgaW4sIHNvIGFsbCBvZiBvdXIKIAkJICogY2FsbGJhY2tzIGNhbiBiZSBwcm9jZXNzZWQgZHVyaW5nIHRoZSBuZXh0IEdQLgogCQkgKi8KLQkJcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAkJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwogCiAJCWNwdV9xdWlldF9tc2sobWFzaywgcnNwLCBybnAsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrICovCkBAIC04NzIsNyArODU5LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAogCS8qIFJlbW92ZSB0aGUgb3V0Z29pbmcgQ1BVIGZyb20gdGhlIG1hc2tzIGluIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkuICovCi0Jcm5wID0gcmRwLT5teW5vZGU7CisJcm5wID0gcmRwLT5teW5vZGU7CS8qIHRoaXMgaXMgdGhlIG91dGdvaW5nIENQVSdzIHJucC4gKi8KIAltYXNrID0gcmRwLT5ncnBtYXNrOwkvKiBybnAtPmdycGxvIGlzIGNvbnN0YW50LiAqLwogCWRvIHsKIAkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwpAQCAtODgxLDcgKzg2OCw3IEBACiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQotCQlyY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wKTsKKwkJcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhyc3AsIHJucCwgcmRwKTsKIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKQEAgLTg5MCw5ICs4NzcsNiBAQAogCiAJc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCi0JLyogQmVpbmcgb2ZmbGluZSBpcyBhIHF1aWVzY2VudCBzdGF0ZSwgc28gZ28gcmVjb3JkIGl0LiAqLwotCWNwdV9xdWlldChjcHUsIHJzcCwgcmRwLCBsYXN0Y29tcCk7Ci0KIAkvKgogCSAqIE1vdmUgY2FsbGJhY2tzIGZyb20gdGhlIG91dGdvaW5nIENQVSB0byB0aGUgcnVubmluZyBDUFUuCiAJICogTm90ZSB0aGF0IHRoZSBvdXRnb2luZyBDUFUgaXMgbm93IHF1aXNjZW50LCBzbyBpdCBpcyBub3cKQEAgLTE0NTcsMjAgKzE0NDEsNyBAQAogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCAmJiAhKHJucC0+cXNtYXNraW5pdCAmIG1hc2spKTsKIAotCXNwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KLQotCS8qCi0JICogQSBuZXcgZ3JhY2UgcGVyaW9kIG1pZ2h0IHN0YXJ0IGhlcmUuICBJZiBzbywgd2Ugd2lsbCBiZSBwYXJ0IG9mCi0JICogaXQsIGFuZCBpdHMgZ3BudW0gd2lsbCBiZSBncmVhdGVyIHRoYW4gb3Vycywgc28gd2Ugd2lsbAotCSAqIHBhcnRpY2lwYXRlLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSBmb3IgdGhlIGdwbnVtIHRvIGhhdmUgYmVlbgotCSAqIGluY3JlbWVudGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQsIGFuZCB0aGUgYml0bWFza3MKLQkgKiB0byBub3QgYmUgZmlsbGVkIG91dCB1bnRpbCBub3csIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBhbHNvCi0JICogcGFydGljaXBhdGUgZHVlIHRvIG91ciBncG51bSBiZWluZyBiZWhpbmQuCi0JICovCi0KLQkvKiBTaW5jZSBpdCBpcyBjb21pbmcgb25saW5lLCB0aGUgQ1BVIGlzIGluIGEgcXVpZXNjZW50IHN0YXRlLiAqLwotCWNwdV9xdWlldChjcHUsIHJzcCwgcmRwLCBsYXN0Y29tcCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2NwdShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuaCBiL2tlcm5lbC9yY3V0cmVlLmgKaW5kZXggYmY4YTZmOS4uOGU4Mjg3YSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuaAorKysgYi9rZXJuZWwvcmN1dHJlZS5oCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKm54dGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkICoqbnh0dGFpbFtSQ1VfTkVYVF9TSVpFXTsKLQlsb25nCQlxbGVuOyAJIAkvKiAjIG9mIHF1ZXVlZCBjYWxsYmFja3MgKi8KKwlsb25nCQlxbGVuOwkJLyogIyBvZiBxdWV1ZWQgY2FsbGJhY2tzICovCiAJbG9uZwkJYmxpbWl0OwkJLyogVXBwZXIgbGltaXQgb24gYSBwcm9jZXNzZWQgYmF0Y2ggKi8KIAogI2lmZGVmIENPTkZJR19OT19IWgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCA0Nzc4OTM2Li4xY2VlMDRmIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtNjQsMjIgKzY0LDMxIEBACiAgKiBub3QgaW4gYSBxdWllc2NlbnQgc3RhdGUuICBUaGVyZSBtaWdodCBiZSBhbnkgbnVtYmVyIG9mIHRhc2tzIGJsb2NrZWQKICAqIHdoaWxlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcXNfcmVjb3JkKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9xcyhpbnQgY3B1KQogewogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKKwliYXJyaWVyKCk7CisJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKIH0KIAogLyoKLSAqIFdlIGhhdmUgZW50ZXJlZCB0aGUgc2NoZWR1bGVyIG9yIGFyZSBiZXR3ZWVuIHNvZnRpcnFzIGluIGtzb2Z0aXJxZC4KLSAqIElmIHdlIGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHdlIG5lZWQgdG8gcmVmbGVjdAotICogdGhhdCBpbiB0aGUgc3RhdGUgb2YgdGhlIHJjdV9ub2RlIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgQ1BVLgotICogQ2FsbGVyIG11c3QgZGlzYWJsZSBoYXJkaXJxcy4KKyAqIFdlIGhhdmUgZW50ZXJlZCB0aGUgc2NoZWR1bGVyLCBhbmQgdGhlIGN1cnJlbnQgdGFzayBtaWdodCBzb29uIGJlCisgKiBjb250ZXh0LXN3aXRjaGVkIGF3YXkgZnJvbS4gIElmIHRoaXMgdGFzayBpcyBpbiBhbiBSQ1UgcmVhZC1zaWRlCisgKiBjcml0aWNhbCBzZWN0aW9uLCB3ZSB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHJlbHkgb24gdGhlIENQVSB0bworICogcmVjb3JkIHRoYXQgZmFjdCwgc28gd2UgZW5xdWV1ZSB0aGUgdGFzayBvbiB0aGUgYXBwcm9wcmlhdGUgZW50cnkKKyAqIG9mIHRoZSBibG9ja2VkX3Rhc2tzW10gYXJyYXkuICBUaGUgdGFzayB3aWxsIGRlcXVldWUgaXRzZWxmIHdoZW4KKyAqIGl0IGV4aXRzIHRoZSBvdXRlcm1vc3QgZW5jbG9zaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqIFRoZXJlZm9yZSwgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIGNhbm5vdCBiZSBwZXJtaXR0ZWQgdG8gY29tcGxldGUKKyAqIHVudGlsIHRoZSBibG9ja2VkX3Rhc2tzW10gZW50cnkgaW5kZXhlZCBieSB0aGUgbG93LW9yZGVyIGJpdCBvZgorICogcm5wLT5ncG51bSBlbXB0aWVzLgorICoKKyAqIENhbGxlciBtdXN0IGRpc2FibGUgcHJlZW1wdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcXMoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBjdXJyZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBoYXNlOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwpAQCAtOTAsNyArOTksNyBAQAogCQkvKiBQb3NzaWJseSBibG9ja2luZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICovCiAJCXJkcCA9IHJjdV9wcmVlbXB0X3N0YXRlLnJkYVtjcHVdOwogCQlybnAgPSByZHAtPm15bm9kZTsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19CTE9DS0VEOwogCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wOwogCkBAIC0xMDMsMTEgKzExMiwxNSBAQAogCQkgKiBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kKSwgdGhlbiBhcyBsb25nCiAJCSAqIGFzIHRoYXQgdGFzayByZW1haW5zIHF1ZXVlZCwgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCiAJCSAqIGNhbm5vdCBlbmQuCisJCSAqCisJCSAqIEJ1dCBmaXJzdCwgbm90ZSB0aGF0IHRoZSBjdXJyZW50IENQVSBtdXN0IHN0aWxsIGJlCisJCSAqIG9uIGxpbmUhCiAJCSAqLwotCQlwaGFzZSA9ICEocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spIF4gKHJucC0+Z3BudW0gJiAweDEpOworCQlXQVJOX09OX09OQ0UoKHJkcC0+Z3JwbWFzayAmIHJucC0+cXNtYXNraW5pdCkgPT0gMCk7CisJCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmdC0+cmN1X25vZGVfZW50cnkpKTsKKwkJcGhhc2UgPSAocm5wLT5ncG51bSArICEocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spKSAmIDB4MTsKIAkJbGlzdF9hZGQoJnQtPnJjdV9ub2RlX2VudHJ5LCAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXSk7Ci0JCXNtcF9tYigpOyAgLyogRW5zdXJlIGxhdGVyIGN0eHQgc3d0Y2ggc2VlbiBhZnRlciBhYm92ZS4gKi8KLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIAogCS8qCkBAIC0xMTksOSArMTMyLDEwIEBACiAJICogZ3JhY2UgcGVyaW9kLCB0aGVuIHRoZSBmYWN0IHRoYXQgdGhlIHRhc2sgaGFzIGJlZW4gZW5xdWV1ZWQKIAkgKiBtZWFucyB0aGF0IHdlIGNvbnRpbnVlIHRvIGJsb2NrIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZC4KIAkgKi8KLQlyY3VfcHJlZW1wdF9xc19yZWNvcmQoY3B1KTsKLQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmPSB+KFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTIHwKLQkJCQkJUkNVX1JFQURfVU5MT0NLX0dPVF9RUyk7CisJcmN1X3ByZWVtcHRfcXMoY3B1KTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0gflJDVV9SRUFEX1VOTE9DS19ORUVEX1FTOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogLyoKQEAgLTE1Nyw3ICsxNzEsNyBAQAogCXNwZWNpYWwgPSB0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbDsKIAlpZiAoc3BlY2lhbCAmIFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTKSB7CiAJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9IH5SQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUzsKLQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgfD0gUkNVX1JFQURfVU5MT0NLX0dPVF9RUzsKKwkJcmN1X3ByZWVtcHRfcXMoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl9CiAKIAkvKiBIYXJkd2FyZSBJUlEgaGFuZGxlcnMgY2Fubm90IGJsb2NrLiAqLwpAQCAtMTc3LDEwICsxOTEsMTAgQEAKIAkJICovCiAJCWZvciAoOzspIHsKIAkJCXJucCA9IHQtPnJjdV9ibG9ja2VkX25vZGU7Ci0JCQlzcGluX2xvY2soJnJucC0+bG9jayk7CisJCQlzcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCQlpZiAocm5wID09IHQtPnJjdV9ibG9ja2VkX25vZGUpCiAJCQkJYnJlYWs7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KIAkJZW1wdHkgPSBsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOwogCQlsaXN0X2RlbF9pbml0KCZ0LT5yY3Vfbm9kZV9lbnRyeSk7CkBAIC0xOTQsOSArMjA4LDggQEAKIAkJICovCiAJCWlmICghZW1wdHkgJiYgcm5wLT5xc21hc2sgPT0gMCAmJgogCQkgICAgbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKSkgewotCQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0KLQkJCQl+KFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTIHwKLQkJCQkgIFJDVV9SRUFEX1VOTE9DS19HT1RfUVMpOworCQkJc3RydWN0IHJjdV9ub2RlICpybnBfcDsKKwogCQkJaWYgKHJucC0+cGFyZW50ID09IE5VTEwpIHsKIAkJCQkvKiBPbmx5IG9uZSByY3Vfbm9kZSBpbiB0aGUgdHJlZS4gKi8KIAkJCQljcHVfcXVpZXRfbXNrX2ZpbmlzaCgmcmN1X3ByZWVtcHRfc3RhdGUsIGZsYWdzKTsKQEAgLTIwNSw5ICsyMTgsMTAgQEAKIAkJCS8qIFJlcG9ydCB1cCB0aGUgcmVzdCBvZiB0aGUgaGllcmFyY2h5LiAqLwogCQkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQkJcm5wID0gcm5wLT5wYXJlbnQ7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCQljcHVfcXVpZXRfbXNrKG1hc2ssICZyY3VfcHJlZW1wdF9zdGF0ZSwgcm5wLCBmbGFncyk7CisJCQlybnBfcCA9IHJucC0+cGFyZW50OworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9wLT5sb2NrLCBmbGFncyk7CisJCQlXQVJOX09OX09OQ0Uocm5wLT5xc21hc2spOworCQkJY3B1X3F1aWV0X21zayhtYXNrLCAmcmN1X3ByZWVtcHRfc3RhdGUsIHJucF9wLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CkBAIC0yNTksNiArMjczLDE5IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCiAKIC8qCisgKiBDaGVjayB0aGF0IHRoZSBsaXN0IG9mIGJsb2NrZWQgdGFza3MgZm9yIHRoZSBuZXdseSBjb21wbGV0ZWQgZ3JhY2UKKyAqIHBlcmlvZCBpcyBpbiBmYWN0IGVtcHR5LiAgSXQgaXMgYSBzZXJpb3VzIGJ1ZyB0byBjb21wbGV0ZSBhIGdyYWNlCisgKiBwZXJpb2QgdGhhdCBzdGlsbCBoYXMgUkNVIHJlYWRlcnMgYmxvY2tlZCEgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZQorICogaW52b2tlZCAtYmVmb3JlLSB1cGRhdGluZyB0aGlzIHJucCdzIC0+Z3BudW0sIGFuZCB0aGUgcm5wJ3MgLT5sb2NrCisgKiBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSkpOworCVdBUk5fT05fT05DRShybnAtPnFzbWFzayk7Cit9CisKKy8qCiAgKiBDaGVjayBmb3IgcHJlZW1wdGVkIFJDVSByZWFkZXJzIGZvciB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KICAqIElmIHRoZSBjYWxsZXIgbmVlZHMgYSByZWxpYWJsZSBhbnN3ZXIsIGl0IG11c3QgaG9sZCB0aGUgcmN1X25vZGUncwogICogPmxvY2suCkBAIC0yODAsNyArMzA3LDggQEAKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGlycXMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wKQorCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCWludCBpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwpAQCAtMjkyLDYgKzMyMCw5IEBACiAJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKIAkJcmV0dXJuOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCiAJfQorCVdBUk5fT05fT05DRShybnAgIT0gcmRwLT5teW5vZGUgJiYKKwkJICAgICAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1swXSkgfHwKKwkJICAgICAgIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1sxXSkpKTsKIAogCS8qCiAJICogTW92ZSB0YXNrcyB1cCB0byByb290IHJjdV9ub2RlLiAgUmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZQpAQCAtMzM1LDIwICszNjYsMTIgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBjdXJyZW50OwogCiAJaWYgKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA9PSAwKSB7Ci0JCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9Ci0JCQl+KFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTIHwgUkNVX1JFQURfVU5MT0NLX0dPVF9RUyk7Ci0JCXJjdV9wcmVlbXB0X3FzX3JlY29yZChjcHUpOworCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmPSB+UkNVX1JFQURfVU5MT0NLX05FRURfUVM7CisJCXJjdV9wcmVlbXB0X3FzKGNwdSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5xc19wZW5kaW5nKSB7Ci0JCWlmICh0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmIFJDVV9SRUFEX1VOTE9DS19HT1RfUVMpIHsKLQkJCXJjdV9wcmVlbXB0X3FzX3JlY29yZChjcHUpOwotCQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0gflJDVV9SRUFEX1VOTE9DS19HT1RfUVM7Ci0JCX0gZWxzZSBpZiAoISh0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmCi0JCQkgICAgIFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTKSkgewotCQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgfD0gUkNVX1JFQURfVU5MT0NLX05FRURfUVM7Ci0JCX0KLQl9CisJaWYgKHBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5xc19wZW5kaW5nKQorCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCB8PSBSQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUzsKIH0KIAogLyoKQEAgLTQzNCw3ICs0NTcsNyBAQAogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCiAgKiBDUFVzIGJlaW5nIGluIHF1aWVzY2VudCBzdGF0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3FzKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCiB7CiB9CiAKQEAgLTQ1MSw2ICs0NzQsMTYgQEAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIAogLyoKKyAqIEJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGFibGUgUkNVLCB0aGVyZSBjYW4gYmUgbm8gcmVhZGVycyBibG9ja2VkLAorICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgYmxvY2tlZCB0YXNrcy4gIFNvIGNoZWNrIG9ubHkgZm9yCisgKiBib2d1cyBxc21hc2sgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCVdBUk5fT05fT05DRShybnAtPnFzbWFzayk7Cit9CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKICAqIFJDVSByZWFkZXJzLgogICovCkBAIC00NjYsNyArNDk5LDggQEAKICAqIHRhc2tzIHRoYXQgd2VyZSBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCkKKwkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggMGVhMWJmZi4uYzg5ZjVlOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQYXBlcnM6ICBodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL1JDVQogICoKICAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlEb2N1bWVudGF0aW9uL1JDVQorICoJCURvY3VtZW50YXRpb24vUkNVCiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggNzhiMDg3Mi4uZmIxMWE1OCAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTIyMywxMyArMjIzLDEzIEBACiAKIEVYUE9SVF9TWU1CT0wocmVsZWFzZV9yZXNvdXJjZSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykgJiYgIWRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZKQorI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWSkKIC8qCiAgKiBGaW5kcyB0aGUgbG93ZXN0IG1lbW9yeSByZW9zdXJjZSBleGlzdHMgd2l0aGluIFtyZXMtPnN0YXJ0LnJlcy0+ZW5kKQotICogdGhlIGNhbGxlciBtdXN0IHNwZWNpZnkgcmVzLT5zdGFydCwgcmVzLT5lbmQsIHJlcy0+ZmxhZ3MuCisgKiB0aGUgY2FsbGVyIG11c3Qgc3BlY2lmeSByZXMtPnN0YXJ0LCByZXMtPmVuZCwgcmVzLT5mbGFncyBhbmQgIm5hbWUiLgogICogSWYgZm91bmQsIHJldHVybnMgMCwgcmVzIGlzIG92ZXJ3cml0dGVuLCBpZiBub3QgZm91bmQsIHJldHVybnMgLTEuCiAgKi8KLXN0YXRpYyBpbnQgZmluZF9uZXh0X3N5c3RlbV9yYW0oc3RydWN0IHJlc291cmNlICpyZXMpCitzdGF0aWMgaW50IGZpbmRfbmV4dF9zeXN0ZW1fcmFtKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBjaGFyICpuYW1lKQogewogCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOwogCXN0cnVjdCByZXNvdXJjZSAqcDsKQEAgLTI0NSw2ICsyNDUsOCBAQAogCQkvKiBzeXN0ZW0gcmFtIGlzIGp1c3QgbWFya2VkIGFzIElPUkVTT1VSQ0VfTUVNICovCiAJCWlmIChwLT5mbGFncyAhPSByZXMtPmZsYWdzKQogCQkJY29udGludWU7CisJCWlmIChuYW1lICYmIHN0cmNtcChwLT5uYW1lLCBuYW1lKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAocC0+c3RhcnQgPiBlbmQpIHsKIAkJCXAgPSBOVUxMOwogCQkJYnJlYWs7CkBAIC0yNjIsMTkgKzI2NCwyNiBAQAogCQlyZXMtPmVuZCA9IHAtPmVuZDsKIAlyZXR1cm4gMDsKIH0KLWludAotd2Fsa19tZW1vcnlfcmVzb3VyY2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZywKLQkJCWludCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKikpCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGNhbGxiYWNrIGFnYWluc3QgYWxsIG1lbW9yeSByYW5nZSBvZiAiU3lzdGVtIFJBTSIKKyAqIHdoaWNoIGFyZSBtYXJrZWQgYXMgSU9SRVNPVVJDRV9NRU0gYW5kIElPUkVTT1VDRV9CVVNZLgorICogTm93LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZm9yICJTeXN0ZW0gUkFNIi4KKyAqLworaW50IHdhbGtfc3lzdGVtX3JhbV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJdm9pZCAqYXJnLCBpbnQgKCpmdW5jKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB2b2lkICopKQogewogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGxlbjsKIAl1NjQgb3JpZ19lbmQ7CiAJaW50IHJldCA9IC0xOworCiAJcmVzLnN0YXJ0ID0gKHU2NCkgc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJcmVzLmVuZCA9ICgodTY0KShzdGFydF9wZm4gKyBucl9wYWdlcykgPDwgUEFHRV9TSElGVCkgLSAxOwogCXJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwogCW9yaWdfZW5kID0gcmVzLmVuZDsKLQl3aGlsZSAoKHJlcy5zdGFydCA8IHJlcy5lbmQpICYmIChmaW5kX25leHRfc3lzdGVtX3JhbSgmcmVzKSA+PSAwKSkgeworCXdoaWxlICgocmVzLnN0YXJ0IDwgcmVzLmVuZCkgJiYKKwkJKGZpbmRfbmV4dF9zeXN0ZW1fcmFtKCZyZXMsICJTeXN0ZW0gUkFNIikgPj0gMCkpIHsKIAkJcGZuID0gKHVuc2lnbmVkIGxvbmcpKHJlcy5zdGFydCA+PiBQQUdFX1NISUZUKTsKIAkJbGVuID0gKHVuc2lnbmVkIGxvbmcpKChyZXMuZW5kICsgMSAtIHJlcy5zdGFydCkgPj4gUEFHRV9TSElGVCk7CiAJCXJldCA9ICgqZnVuYykocGZuLCBsZW4sIGFyZyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGZhZjRkNDYuLjJmNzZlMDZiIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CkBAIC02ODEsMTUgKzY4MSw5IEBACiAgKiBUaGlzIGludGVyZmFjZSBhbGxvd3MgcHJpbnRrIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBydW5xdWV1ZSBsb2NrCiAgKiBoZWxkIGFuZCBrbm93IHdoZXRoZXIgb3Igbm90IGl0IGlzIE9LIHRvIHdha2UgdXAgdGhlIGtsb2dkLgogICovCi1pbnQgcnVucXVldWVfaXNfbG9ja2VkKHZvaWQpCitpbnQgcnVucXVldWVfaXNfbG9ja2VkKGludCBjcHUpCiB7Ci0JaW50IGNwdSA9IGdldF9jcHUoKTsKLQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JaW50IHJldDsKLQotCXJldCA9IHNwaW5faXNfbG9ja2VkKCZycS0+bG9jayk7Ci0JcHV0X2NwdSgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHNwaW5faXNfbG9ja2VkKCZjcHVfcnEoY3B1KS0+bG9jayk7CiB9CiAKIC8qCkBAIC0yMDU5LDcgKzIwNTMsNyBAQAogCQlpZiAodGFza19ob3QocCwgb2xkX3JxLT5jbG9jaywgTlVMTCkpCiAJCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZDJfbWlncmF0aW9ucyk7CiAjZW5kaWYKLQkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUywKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TLAogCQkJCSAgICAgMSwgMSwgTlVMTCwgMCk7CiAJfQogCXAtPnNlLnZydW50aW1lIC09IG9sZF9jZnNycS0+bWluX3ZydW50aW1lIC0KQEAgLTI3MjQsNyArMjcxOCw3IEBACiAJICovCiAJcHJldl9zdGF0ZSA9IHByZXYtPnN0YXRlOwogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKLQlwZXJmX2NvdW50ZXJfdGFza19zY2hlZF9pbihjdXJyZW50LCBjcHVfb2YocnEpKTsKKwlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VycmVudCwgY3B1X29mKHJxKSk7CiAJZmluaXNoX2xvY2tfc3dpdGNoKHJxLCBwcmV2KTsKIAogCWZpcmVfc2NoZWRfaW5fcHJlZW1wdF9ub3RpZmllcnMoY3VycmVudCk7CkBAIC0yOTEwLDYgKzI5MDQsMTkgQEAKIAlyZXR1cm4gc3VtOwogfQogCit1bnNpZ25lZCBsb25nIG5yX2lvd2FpdF9jcHUodm9pZCkKK3sKKwlzdHJ1Y3QgcnEgKnRoaXMgPSB0aGlzX3JxKCk7CisJcmV0dXJuIGF0b21pY19yZWFkKCZ0aGlzLT5ucl9pb3dhaXQpOworfQorCit1bnNpZ25lZCBsb25nIHRoaXNfY3B1X2xvYWQodm9pZCkKK3sKKwlzdHJ1Y3QgcnEgKnRoaXMgPSB0aGlzX3JxKCk7CisJcmV0dXJuIHRoaXMtPmNwdV9sb2FkWzBdOworfQorCisKIC8qIFZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGZvciBjYWxjX2xvYWQgKi8KIHN0YXRpYyBhdG9taWNfbG9uZ190IGNhbGNfbG9hZF90YXNrczsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfbG9hZF91cGRhdGU7CkBAIC01MDg1LDE3ICs1MDkyLDE2IEBACiAgKi8KIHZvaWQgYWNjb3VudF9wcm9jZXNzX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgdXNlcl90aWNrKQogewotCWNwdXRpbWVfdCBvbmVfamlmZnkgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7Ci0JY3B1dGltZV90IG9uZV9qaWZmeV9zY2FsZWQgPSBjcHV0aW1lX3RvX3NjYWxlZChvbmVfamlmZnkpOworCWNwdXRpbWVfdCBvbmVfamlmZnlfc2NhbGVkID0gY3B1dGltZV90b19zY2FsZWQoY3B1dGltZV9vbmVfamlmZnkpOwogCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CiAKIAlpZiAodXNlcl90aWNrKQotCQlhY2NvdW50X3VzZXJfdGltZShwLCBvbmVfamlmZnksIG9uZV9qaWZmeV9zY2FsZWQpOworCQlhY2NvdW50X3VzZXJfdGltZShwLCBjcHV0aW1lX29uZV9qaWZmeSwgb25lX2ppZmZ5X3NjYWxlZCk7CiAJZWxzZSBpZiAoKHAgIT0gcnEtPmlkbGUpIHx8IChpcnFfY291bnQoKSAhPSBIQVJESVJRX09GRlNFVCkpCi0JCWFjY291bnRfc3lzdGVtX3RpbWUocCwgSEFSRElSUV9PRkZTRVQsIG9uZV9qaWZmeSwKKwkJYWNjb3VudF9zeXN0ZW1fdGltZShwLCBIQVJESVJRX09GRlNFVCwgY3B1dGltZV9vbmVfamlmZnksCiAJCQkJICAgIG9uZV9qaWZmeV9zY2FsZWQpOwogCWVsc2UKLQkJYWNjb3VudF9pZGxlX3RpbWUob25lX2ppZmZ5KTsKKwkJYWNjb3VudF9pZGxlX3RpbWUoY3B1dGltZV9vbmVfamlmZnkpOwogfQogCiAvKgpAQCAtNTE5OSw3ICs1MjA1LDcgQEAKIAljdXJyLT5zY2hlZF9jbGFzcy0+dGFza190aWNrKHJxLCBjdXJyLCAwKTsKIAlzcGluX3VubG9jaygmcnEtPmxvY2spOwogCi0JcGVyZl9jb3VudGVyX3Rhc2tfdGljayhjdXJyLCBjcHUpOworCXBlcmZfZXZlbnRfdGFza190aWNrKGN1cnIsIGNwdSk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJcnEtPmlkbGVfYXRfdGljayA9IGlkbGVfY3B1KGNwdSk7CkBAIC01NDE1LDcgKzU0MjEsNyBAQAogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CiAJCXNjaGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOwotCQlwZXJmX2NvdW50ZXJfdGFza19zY2hlZF9vdXQocHJldiwgbmV4dCwgY3B1KTsKKwkJcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChwcmV2LCBuZXh0LCBjcHUpOwogCiAJCXJxLT5ucl9zd2l0Y2hlcysrOwogCQlycS0+Y3VyciA9IG5leHQ7CkBAIC02ODI1LDIzICs2ODMxLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQkvKgotCSAqIFRpbWUgc2xpY2UgaXMgMCBmb3IgU0NIRURfRklGTyB0YXNrcyBhbmQgZm9yIFNDSEVEX09USEVSCi0JICogdGFza3MgdGhhdCBhcmUgb24gYW4gb3RoZXJ3aXNlIGlkbGUgcnVucXVldWU6Ci0JICovCi0JdGltZV9zbGljZSA9IDA7Ci0JaWYgKHAtPnBvbGljeSA9PSBTQ0hFRF9SUikgewotCQl0aW1lX3NsaWNlID0gREVGX1RJTUVTTElDRTsKLQl9IGVsc2UgaWYgKHAtPnBvbGljeSAhPSBTQ0hFRF9GSUZPKSB7Ci0JCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzdHJ1Y3QgcnEgKnJxOworCXRpbWVfc2xpY2UgPSBwLT5zY2hlZF9jbGFzcy0+Z2V0X3JyX2ludGVydmFsKHApOwogCi0JCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7Ci0JCWlmIChycS0+Y2ZzLmxvYWQud2VpZ2h0KQotCQkJdGltZV9zbGljZSA9IE5TX1RPX0pJRkZJRVMoc2NoZWRfc2xpY2UoJnJxLT5jZnMsIHNlKSk7Ci0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwotCX0KIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJamlmZmllc190b190aW1lc3BlYyh0aW1lX3NsaWNlLCAmdCk7CiAJcmV0dmFsID0gY29weV90b191c2VyKGludGVydmFsLCAmdCwgc2l6ZW9mKHQpKSA/IC1FRkFVTFQgOiAwOwpAQCAtNzY5Miw3ICs3NjgzLDcgQEAKIC8qCiAgKiBSZWdpc3RlciBhdCBoaWdoIHByaW9yaXR5IHNvIHRoYXQgdGFzayBtaWdyYXRpb24gKG1pZ3JhdGVfYWxsX3Rhc2tzKQogICogaGFwcGVucyBiZWZvcmUgZXZlcnl0aGluZyBlbHNlLiAgVGhpcyBoYXMgdG8gYmUgbG93ZXIgcHJpb3JpdHkgdGhhbgotICogdGhlIG5vdGlmaWVyIGluIHRoZSBwZXJmX2NvdW50ZXIgc3Vic3lzdGVtLCB0aG91Z2guCisgKiB0aGUgbm90aWZpZXIgaW4gdGhlIHBlcmZfZXZlbnQgc3Vic3lzdGVtLCB0aG91Z2guCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBtaWdyYXRpb25fbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBtaWdyYXRpb25fY2FsbCwKQEAgLTkxNzEsNiArOTE2Miw3IEBACiAJY3B1bWFza192YXJfdCBub25faXNvbGF0ZWRfY3B1czsKIAogCWFsbG9jX2NwdW1hc2tfdmFyKCZub25faXNvbGF0ZWRfY3B1cywgR0ZQX0tFUk5FTCk7CisJYWxsb2NfY3B1bWFza192YXIoJmZhbGxiYWNrX2RvbXMsIEdGUF9LRVJORUwpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkKIAlzY2hlZF9ncm91cF9ub2Rlc19ieWNwdSA9IGt6YWxsb2MobnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKSwKQEAgLTkyMDIsNyArOTE5NCw2IEBACiAJc2NoZWRfaW5pdF9ncmFudWxhcml0eSgpOwogCWZyZWVfY3B1bWFza192YXIobm9uX2lzb2xhdGVkX2NwdXMpOwogCi0JYWxsb2NfY3B1bWFza192YXIoJmZhbGxiYWNrX2RvbXMsIEdGUF9LRVJORUwpOwogCWluaXRfc2NoZWRfcnRfY2xhc3MoKTsKIH0KICNlbHNlCkBAIC05NTQ5LDcgKzk1NDAsNyBAQAogCWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwLCBHRlBfTk9XQUlUKTsKICNlbmRpZiAvKiBTTVAgKi8KIAotCXBlcmZfY291bnRlcl9pbml0KCk7CisJcGVyZl9ldmVudF9pbml0KCk7CiAKIAlzY2hlZHVsZXJfcnVubmluZyA9IDE7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IGUxZDE2YzkuLmFjMmUxZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC00OCwxMyArNDgsNiBAQAogX19yZWFkX21vc3RseSBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOwogCiBzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSB7Ci0JLyoKLQkgKiBSYXcgc3BpbmxvY2sgLSB0aGlzIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGlzIG1pZ2h0IGJlIGNhbGxlZAotCSAqIGZyb20gd2l0aGluIGluc3RydW1lbnRhdGlvbiBjb2RlIHNvIHdlIGRvbnQgd2FudCB0byBkbyBhbnkKLQkgKiBpbnN0cnVtZW50YXRpb24gb3Vyc2VsdmVzLgotCSAqLwotCXJhd19zcGlubG9ja190CQlsb2NrOwotCiAJdTY0CQkJdGlja19yYXc7CiAJdTY0CQkJdGlja19ndG9kOwogCXU2NAkJCWNsb2NrOwpAQCAtODAsNyArNzMsNiBAQAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZCA9IGNwdV9zZGMoY3B1KTsKIAotCQlzY2QtPmxvY2sgPSAocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOwogCQlzY2QtPnRpY2tfcmF3ID0gMDsKIAkJc2NkLT50aWNrX2d0b2QgPSBrdGltZV9ub3c7CiAJCXNjZC0+Y2xvY2sgPSBrdGltZV9ub3c7CkBAIC0xMDksMTQgKzEwMSwxOSBAQAogICogIC0gZmlsdGVyIG91dCBiYWNrd2FyZCBtb3Rpb24KICAqICAtIHVzZSB0aGUgR1RPRCB0aWNrIHZhbHVlIHRvIGNyZWF0ZSBhIHdpbmRvdyB0byBmaWx0ZXIgY3JhenkgVFNDIHZhbHVlcwogICovCi1zdGF0aWMgdTY0IF9fdXBkYXRlX3NjaGVkX2Nsb2NrKHN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2QsIHU2NCBub3cpCitzdGF0aWMgdTY0IHNjaGVkX2Nsb2NrX2xvY2FsKHN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2QpCiB7Ci0JczY0IGRlbHRhID0gbm93IC0gc2NkLT50aWNrX3JhdzsKLQl1NjQgY2xvY2ssIG1pbl9jbG9jaywgbWF4X2Nsb2NrOworCXU2NCBub3csIGNsb2NrLCBvbGRfY2xvY2ssIG1pbl9jbG9jaywgbWF4X2Nsb2NrOworCXM2NCBkZWx0YTsKIAorYWdhaW46CisJbm93ID0gc2NoZWRfY2xvY2soKTsKKwlkZWx0YSA9IG5vdyAtIHNjZC0+dGlja19yYXc7CiAJaWYgKHVubGlrZWx5KGRlbHRhIDwgMCkpCiAJCWRlbHRhID0gMDsKIAorCW9sZF9jbG9jayA9IHNjZC0+Y2xvY2s7CisKIAkvKgogCSAqIHNjZC0+Y2xvY2sgPSBjbGFtcChzY2QtPnRpY2tfZ3RvZCArIGRlbHRhLAogCSAqCQkgICAgICBtYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spLApAQCAtMTI0LDg0ICsxMjEsNzMgQEAKIAkgKi8KIAogCWNsb2NrID0gc2NkLT50aWNrX2d0b2QgKyBkZWx0YTsKLQltaW5fY2xvY2sgPSB3cmFwX21heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayk7Ci0JbWF4X2Nsb2NrID0gd3JhcF9tYXgoc2NkLT5jbG9jaywgc2NkLT50aWNrX2d0b2QgKyBUSUNLX05TRUMpOworCW1pbl9jbG9jayA9IHdyYXBfbWF4KHNjZC0+dGlja19ndG9kLCBvbGRfY2xvY2spOworCW1heF9jbG9jayA9IHdyYXBfbWF4KG9sZF9jbG9jaywgc2NkLT50aWNrX2d0b2QgKyBUSUNLX05TRUMpOwogCiAJY2xvY2sgPSB3cmFwX21heChjbG9jaywgbWluX2Nsb2NrKTsKIAljbG9jayA9IHdyYXBfbWluKGNsb2NrLCBtYXhfY2xvY2spOwogCi0Jc2NkLT5jbG9jayA9IGNsb2NrOworCWlmIChjbXB4Y2hnKCZzY2QtPmNsb2NrLCBvbGRfY2xvY2ssIGNsb2NrKSAhPSBvbGRfY2xvY2spCisJCWdvdG8gYWdhaW47CiAKLQlyZXR1cm4gc2NkLT5jbG9jazsKKwlyZXR1cm4gY2xvY2s7CiB9CiAKLXN0YXRpYyB2b2lkIGxvY2tfZG91YmxlX2Nsb2NrKHN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpkYXRhMSwKLQkJCQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqZGF0YTIpCitzdGF0aWMgdTY0IHNjaGVkX2Nsb2NrX3JlbW90ZShzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkKQogewotCWlmIChkYXRhMSA8IGRhdGEyKSB7Ci0JCV9fcmF3X3NwaW5fbG9jaygmZGF0YTEtPmxvY2spOwotCQlfX3Jhd19zcGluX2xvY2soJmRhdGEyLT5sb2NrKTsKKwlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqbXlfc2NkID0gdGhpc19zY2QoKTsKKwl1NjQgdGhpc19jbG9jaywgcmVtb3RlX2Nsb2NrOworCXU2NCAqcHRyLCBvbGRfdmFsLCB2YWw7CisKKwlzY2hlZF9jbG9ja19sb2NhbChteV9zY2QpOworYWdhaW46CisJdGhpc19jbG9jayA9IG15X3NjZC0+Y2xvY2s7CisJcmVtb3RlX2Nsb2NrID0gc2NkLT5jbG9jazsKKworCS8qCisJICogVXNlIHRoZSBvcHBvcnR1bml0eSB0aGF0IHdlIGhhdmUgYm90aCBsb2NrcworCSAqIHRha2VuIHRvIGNvdXBsZSB0aGUgdHdvIGNsb2Nrczogd2UgdGFrZSB0aGUKKwkgKiBsYXJnZXIgdGltZSBhcyB0aGUgbGF0ZXN0IHRpbWUgZm9yIGJvdGgKKwkgKiBydW5xdWV1ZXMuICh0aGlzIGNyZWF0ZXMgbW9ub3RvbmljIG1vdmVtZW50KQorCSAqLworCWlmIChsaWtlbHkoKHM2NCkocmVtb3RlX2Nsb2NrIC0gdGhpc19jbG9jaykgPCAwKSkgeworCQlwdHIgPSAmc2NkLT5jbG9jazsKKwkJb2xkX3ZhbCA9IHJlbW90ZV9jbG9jazsKKwkJdmFsID0gdGhpc19jbG9jazsKIAl9IGVsc2UgewotCQlfX3Jhd19zcGluX2xvY2soJmRhdGEyLT5sb2NrKTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZkYXRhMS0+bG9jayk7CisJCS8qCisJCSAqIFNob3VsZCBiZSByYXJlLCBidXQgcG9zc2libGU6CisJCSAqLworCQlwdHIgPSAmbXlfc2NkLT5jbG9jazsKKwkJb2xkX3ZhbCA9IHRoaXNfY2xvY2s7CisJCXZhbCA9IHJlbW90ZV9jbG9jazsKIAl9CisKKwlpZiAoY21weGNoZyhwdHIsIG9sZF92YWwsIHZhbCkgIT0gb2xkX3ZhbCkKKwkJZ290byBhZ2FpbjsKKworCXJldHVybiB2YWw7CiB9CiAKIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSkKIHsKLQl1NjQgbm93LCBjbG9jaywgdGhpc19jbG9jaywgcmVtb3RlX2Nsb2NrOwogCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2Q7CisJdTY0IGNsb2NrOworCisJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJaWYgKHNjaGVkX2Nsb2NrX3N0YWJsZSkKIAkJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiAKLQlzY2QgPSBjcHVfc2RjKGNwdSk7Ci0KLQkvKgotCSAqIE5vcm1hbGx5IHRoaXMgaXMgbm90IGNhbGxlZCBpbiBOTUkgY29udGV4dCAtIGJ1dCBpZiBpdCBpcywKLQkgKiB0cnlpbmcgdG8gZG8gYW55IGxvY2tpbmcgaGVyZSBpcyB0b3RhbGx5IGxldGhhbC4KLQkgKi8KLQlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQotCQlyZXR1cm4gc2NkLT5jbG9jazsKLQogCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCiAJCXJldHVybiAwdWxsOwogCi0JV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwotCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CisJc2NkID0gY3B1X3NkYyhjcHUpOwogCi0JaWYgKGNwdSAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSB7Ci0JCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpteV9zY2QgPSB0aGlzX3NjZCgpOwotCi0JCWxvY2tfZG91YmxlX2Nsb2NrKHNjZCwgbXlfc2NkKTsKLQotCQl0aGlzX2Nsb2NrID0gX191cGRhdGVfc2NoZWRfY2xvY2sobXlfc2NkLCBub3cpOwotCQlyZW1vdGVfY2xvY2sgPSBzY2QtPmNsb2NrOwotCi0JCS8qCi0JCSAqIFVzZSB0aGUgb3Bwb3J0dW5pdHkgdGhhdCB3ZSBoYXZlIGJvdGggbG9ja3MKLQkJICogdGFrZW4gdG8gY291cGxlIHRoZSB0d28gY2xvY2tzOiB3ZSB0YWtlIHRoZQotCQkgKiBsYXJnZXIgdGltZSBhcyB0aGUgbGF0ZXN0IHRpbWUgZm9yIGJvdGgKLQkJICogcnVucXVldWVzLiAodGhpcyBjcmVhdGVzIG1vbm90b25pYyBtb3ZlbWVudCkKLQkJICovCi0JCWlmIChsaWtlbHkoKHM2NCkocmVtb3RlX2Nsb2NrIC0gdGhpc19jbG9jaykgPCAwKSkgewotCQkJY2xvY2sgPSB0aGlzX2Nsb2NrOwotCQkJc2NkLT5jbG9jayA9IGNsb2NrOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFNob3VsZCBiZSByYXJlLCBidXQgcG9zc2libGU6Ci0JCQkgKi8KLQkJCWNsb2NrID0gcmVtb3RlX2Nsb2NrOwotCQkJbXlfc2NkLT5jbG9jayA9IHJlbW90ZV9jbG9jazsKLQkJfQotCi0JCV9fcmF3X3NwaW5fdW5sb2NrKCZteV9zY2QtPmxvY2spOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3NwaW5fbG9jaygmc2NkLT5sb2NrKTsKLQkJY2xvY2sgPSBfX3VwZGF0ZV9zY2hlZF9jbG9jayhzY2QsIG5vdyk7Ci0JfQotCi0JX19yYXdfc3Bpbl91bmxvY2soJnNjZC0+bG9jayk7CisJaWYgKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCWNsb2NrID0gc2NoZWRfY2xvY2tfcmVtb3RlKHNjZCk7CisJZWxzZQorCQljbG9jayA9IHNjaGVkX2Nsb2NrX2xvY2FsKHNjZCk7CiAKIAlyZXR1cm4gY2xvY2s7CiB9CkBAIC0yMjMsMTEgKzIwOSw5IEBACiAJbm93X2d0b2QgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CiAJbm93ID0gc2NoZWRfY2xvY2soKTsKIAotCV9fcmF3X3NwaW5fbG9jaygmc2NkLT5sb2NrKTsKIAlzY2QtPnRpY2tfcmF3ID0gbm93OwogCXNjZC0+dGlja19ndG9kID0gbm93X2d0b2Q7Ci0JX191cGRhdGVfc2NoZWRfY2xvY2soc2NkLCBub3cpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZzY2QtPmxvY2spOworCXNjaGVkX2Nsb2NrX2xvY2FsKHNjZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCAxMGQyMThhLi5lY2M2MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTUxMyw2ICs1MTMsNyBAQAogCWlmIChlbnRpdHlfaXNfdGFzayhjdXJyKSkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnRhc2sgPSB0YXNrX29mKGN1cnIpOwogCisJCXRyYWNlX3NjaGVkX3N0YXRfcnVudGltZShjdXJ0YXNrLCBkZWx0YV9leGVjLCBjdXJyLT52cnVudGltZSk7CiAJCWNwdWFjY3RfY2hhcmdlKGN1cnRhc2ssIGRlbHRhX2V4ZWMpOwogCQlhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZShjdXJ0YXNrLCBkZWx0YV9leGVjKTsKIAl9CkBAIC03MDksMzEgKzcxMCwyOCBAQAogCWlmIChpbml0aWFsICYmIHNjaGVkX2ZlYXQoU1RBUlRfREVCSVQpKQogCQl2cnVudGltZSArPSBzY2hlZF92c2xpY2UoY2ZzX3JxLCBzZSk7CiAKLQlpZiAoIWluaXRpYWwpIHsKLQkJLyogc2xlZXBzIHVwdG8gYSBzaW5nbGUgbGF0ZW5jeSBkb24ndCBjb3VudC4gKi8KLQkJaWYgKHNjaGVkX2ZlYXQoRkFJUl9TTEVFUEVSUykpIHsKLQkJCXVuc2lnbmVkIGxvbmcgdGhyZXNoID0gc3lzY3RsX3NjaGVkX2xhdGVuY3k7CisJLyogc2xlZXBzIHVwIHRvIGEgc2luZ2xlIGxhdGVuY3kgZG9uJ3QgY291bnQuICovCisJaWYgKCFpbml0aWFsICYmIHNjaGVkX2ZlYXQoRkFJUl9TTEVFUEVSUykpIHsKKwkJdW5zaWduZWQgbG9uZyB0aHJlc2ggPSBzeXNjdGxfc2NoZWRfbGF0ZW5jeTsKIAotCQkJLyoKLQkJCSAqIENvbnZlcnQgdGhlIHNsZWVwZXIgdGhyZXNob2xkIGludG8gdmlydHVhbCB0aW1lLgotCQkJICogU0NIRURfSURMRSBpcyBhIHNwZWNpYWwgc3ViLWNsYXNzLiAgV2UgY2FyZSBhYm91dAotCQkJICogZmFpcm5lc3Mgb25seSByZWxhdGl2ZSB0byBvdGhlciBTQ0hFRF9JRExFIHRhc2tzLAotCQkJICogYWxsIG9mIHdoaWNoIGhhdmUgdGhlIHNhbWUgd2VpZ2h0LgotCQkJICovCi0JCQlpZiAoc2NoZWRfZmVhdChOT1JNQUxJWkVEX1NMRUVQRVIpICYmCi0JCQkJCSghZW50aXR5X2lzX3Rhc2soc2UpIHx8Ci0JCQkJCSB0YXNrX29mKHNlKS0+cG9saWN5ICE9IFNDSEVEX0lETEUpKQotCQkJCXRocmVzaCA9IGNhbGNfZGVsdGFfZmFpcih0aHJlc2gsIHNlKTsKKwkJLyoKKwkJICogQ29udmVydCB0aGUgc2xlZXBlciB0aHJlc2hvbGQgaW50byB2aXJ0dWFsIHRpbWUuCisJCSAqIFNDSEVEX0lETEUgaXMgYSBzcGVjaWFsIHN1Yi1jbGFzcy4gIFdlIGNhcmUgYWJvdXQKKwkJICogZmFpcm5lc3Mgb25seSByZWxhdGl2ZSB0byBvdGhlciBTQ0hFRF9JRExFIHRhc2tzLAorCQkgKiBhbGwgb2Ygd2hpY2ggaGF2ZSB0aGUgc2FtZSB3ZWlnaHQuCisJCSAqLworCQlpZiAoc2NoZWRfZmVhdChOT1JNQUxJWkVEX1NMRUVQRVIpICYmICghZW50aXR5X2lzX3Rhc2soc2UpIHx8CisJCQkJIHRhc2tfb2Yoc2UpLT5wb2xpY3kgIT0gU0NIRURfSURMRSkpCisJCQl0aHJlc2ggPSBjYWxjX2RlbHRhX2ZhaXIodGhyZXNoLCBzZSk7CiAKLQkJCS8qCi0JCQkgKiBIYWx2ZSB0aGVpciBzbGVlcCB0aW1lJ3MgZWZmZWN0LCB0byBhbGxvdwotCQkJICogZm9yIGEgZ2VudGxlciBlZmZlY3Qgb2Ygc2xlZXBlcnM6Ci0JCQkgKi8KLQkJCWlmIChzY2hlZF9mZWF0KEdFTlRMRV9GQUlSX1NMRUVQRVJTKSkKLQkJCQl0aHJlc2ggPj49IDE7CisJCS8qCisJCSAqIEhhbHZlIHRoZWlyIHNsZWVwIHRpbWUncyBlZmZlY3QsIHRvIGFsbG93CisJCSAqIGZvciBhIGdlbnRsZXIgZWZmZWN0IG9mIHNsZWVwZXJzOgorCQkgKi8KKwkJaWYgKHNjaGVkX2ZlYXQoR0VOVExFX0ZBSVJfU0xFRVBFUlMpKQorCQkJdGhyZXNoID4+PSAxOwogCi0JCQl2cnVudGltZSAtPSB0aHJlc2g7Ci0JCX0KKwkJdnJ1bnRpbWUgLT0gdGhyZXNoOwogCX0KIAogCS8qIGVuc3VyZSB3ZSBuZXZlciBnYWluIHRpbWUgYnkgYmVpbmcgcGxhY2VkIGJhY2t3YXJkcy4gKi8KQEAgLTEzNDIsNyArMTM0MCw4IEBACiAJaW50IHN5bmMgPSB3YWtlX2ZsYWdzICYgV0ZfU1lOQzsKIAogCWlmIChzZF9mbGFnICYgU0RfQkFMQU5DRV9XQUtFKSB7Ci0JCWlmIChzY2hlZF9mZWF0KEFGRklORV9XQUtFVVBTKSkKKwkJaWYgKHNjaGVkX2ZlYXQoQUZGSU5FX1dBS0VVUFMpICYmCisJCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJnAtPmNwdXNfYWxsb3dlZCkpCiAJCQl3YW50X2FmZmluZSA9IDE7CiAJCW5ld19jcHUgPSBwcmV2X2NwdTsKIAl9CkBAIC0xOTQwLDYgKzE5MzksMjUgQEAKIH0KICNlbmRpZgogCit1bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnRhc2stPnNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJxICpycTsKKwl1bnNpZ25lZCBpbnQgcnJfaW50ZXJ2YWwgPSAwOworCisJLyoKKwkgKiBUaW1lIHNsaWNlIGlzIDAgZm9yIFNDSEVEX09USEVSIHRhc2tzIHRoYXQgYXJlIG9uIGFuIG90aGVyd2lzZQorCSAqIGlkbGUgcnVucXVldWU6CisJICovCisJcnEgPSB0YXNrX3JxX2xvY2sodGFzaywgJmZsYWdzKTsKKwlpZiAocnEtPmNmcy5sb2FkLndlaWdodCkKKwkJcnJfaW50ZXJ2YWwgPSBOU19UT19KSUZGSUVTKHNjaGVkX3NsaWNlKCZycS0+Y2ZzLCBzZSkpOworCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCisJcmV0dXJuIHJyX2ludGVydmFsOworfQorCiAvKgogICogQWxsIHRoZSBzY2hlZHVsaW5nIGNsYXNzIG1ldGhvZHM6CiAgKi8KQEAgLTE5NjgsNiArMTk4Niw4IEBACiAJLnByaW9fY2hhbmdlZAkJPSBwcmlvX2NoYW5nZWRfZmFpciwKIAkuc3dpdGNoZWRfdG8JCT0gc3dpdGNoZWRfdG9fZmFpciwKIAorCS5nZXRfcnJfaW50ZXJ2YWwJPSBnZXRfcnJfaW50ZXJ2YWxfZmFpciwKKwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJLm1vdmVkX2dyb3VwCQk9IG1vdmVkX2dyb3VwX2ZhaXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKaW5kZXggYThiNDQ4YS4uYjEzM2EyOCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKKysrIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKQEAgLTk3LDYgKzk3LDExIEBACiAJCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgMCk7CiB9CiAKK3Vuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBTaW1wbGUsIHNwZWNpYWwgc2NoZWR1bGluZyBjbGFzcyBmb3IgdGhlIHBlci1DUFUgaWRsZSB0YXNrczoKICAqLwpAQCAtMTIyLDYgKzEyNyw4IEBACiAJLnNldF9jdXJyX3Rhc2sgICAgICAgICAgPSBzZXRfY3Vycl90YXNrX2lkbGUsCiAJLnRhc2tfdGljawkJPSB0YXNrX3RpY2tfaWRsZSwKIAorCS5nZXRfcnJfaW50ZXJ2YWwJPSBnZXRfcnJfaW50ZXJ2YWxfaWRsZSwKKwogCS5wcmlvX2NoYW5nZWQJCT0gcHJpb19jaGFuZ2VkX2lkbGUsCiAJLnN3aXRjaGVkX3RvCQk9IHN3aXRjaGVkX3RvX2lkbGUsCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggMTNkZTcxMi4uYTRkNzkwYyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTE3MzQsNiArMTczNCwxNyBAQAogCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKK3Vuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCS8qCisJICogVGltZSBzbGljZSBpcyAwIGZvciBTQ0hFRF9GSUZPIHRhc2tzCisJICovCisJaWYgKHRhc2stPnBvbGljeSA9PSBTQ0hFRF9SUikKKwkJcmV0dXJuIERFRl9USU1FU0xJQ0U7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBydF9zY2hlZF9jbGFzcyA9IHsKIAkubmV4dAkJCT0gJmZhaXJfc2NoZWRfY2xhc3MsCiAJLmVucXVldWVfdGFzawkJPSBlbnF1ZXVlX3Rhc2tfcnQsCkBAIC0xNzYyLDYgKzE3NzMsOCBAQAogCS5zZXRfY3Vycl90YXNrICAgICAgICAgID0gc2V0X2N1cnJfdGFza19ydCwKIAkudGFza190aWNrCQk9IHRhc2tfdGlja19ydCwKIAorCS5nZXRfcnJfaW50ZXJ2YWwJPSBnZXRfcnJfaW50ZXJ2YWxfcnQsCisKIAkucHJpb19jaGFuZ2VkCQk9IHByaW9fY2hhbmdlZF9ydCwKIAkuc3dpdGNoZWRfdG8JCT0gc3dpdGNoZWRfdG9fcnQsCiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL3NtcC5jIGIva2VybmVsL3NtcC5jCmluZGV4IDhlMjE4NTAuLmZkNDdhMjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXAuYworKysgYi9rZXJuZWwvc21wLmMKQEAgLTI5LDggKzI5LDcgQEAKIAogc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSB7CiAJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEJY3NkOwotCXNwaW5sb2NrX3QJCWxvY2s7Ci0JdW5zaWduZWQgaW50CQlyZWZzOworCWF0b21pY190CQlyZWZzOwogCWNwdW1hc2tfdmFyX3QJCWNwdW1hc2s7CiB9OwogCkBAIC0zOSw5ICszOCw3IEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSkgPSB7Ci0JLmxvY2sJCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNmZF9kYXRhLmxvY2spLAotfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSk7CiAKIHN0YXRpYyBpbnQKIGhvdHBsdWdfY2ZkKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKQEAgLTE5NiwyNSArMTkzLDE4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGF0YSwgJmNhbGxfZnVuY3Rpb24ucXVldWUsIGNzZC5saXN0KSB7CiAJCWludCByZWZzOwogCi0JCXNwaW5fbG9jaygmZGF0YS0+bG9jayk7Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGRhdGEtPmNwdW1hc2spKSB7Ci0JCQlzcGluX3VubG9jaygmZGF0YS0+bG9jayk7CisJCWlmICghY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCBkYXRhLT5jcHVtYXNrKSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgZGF0YS0+Y3B1bWFzayk7Ci0JCXNwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAogCQlkYXRhLT5jc2QuZnVuYyhkYXRhLT5jc2QuaW5mbyk7CiAKLQkJc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQkJV0FSTl9PTihkYXRhLT5yZWZzID09IDApOwotCQlyZWZzID0gLS1kYXRhLT5yZWZzOworCQlyZWZzID0gYXRvbWljX2RlY19yZXR1cm4oJmRhdGEtPnJlZnMpOworCQlXQVJOX09OKHJlZnMgPCAwKTsKIAkJaWYgKCFyZWZzKSB7CiAJCQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CiAJCQlsaXN0X2RlbF9yY3UoJmRhdGEtPmNzZC5saXN0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAogCQlpZiAocmVmcykKIAkJCWNvbnRpbnVlOwpAQCAtNDE5LDIzICs0MDksMjAgQEAKIAlkYXRhID0gJl9fZ2V0X2NwdV92YXIoY2ZkX2RhdGEpOwogCWNzZF9sb2NrKCZkYXRhLT5jc2QpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKIAlkYXRhLT5jc2QuZnVuYyA9IGZ1bmM7CiAJZGF0YS0+Y3NkLmluZm8gPSBpbmZvOwogCWNwdW1hc2tfYW5kKGRhdGEtPmNwdW1hc2ssIG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CiAJY3B1bWFza19jbGVhcl9jcHUodGhpc19jcHUsIGRhdGEtPmNwdW1hc2spOwotCWRhdGEtPnJlZnMgPSBjcHVtYXNrX3dlaWdodChkYXRhLT5jcHVtYXNrKTsKKwlhdG9taWNfc2V0KCZkYXRhLT5yZWZzLCBjcHVtYXNrX3dlaWdodChkYXRhLT5jcHVtYXNrKSk7CiAKLQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbGxfZnVuY3Rpb24ubG9jaywgZmxhZ3MpOwogCS8qCiAJICogUGxhY2UgZW50cnkgYXQgdGhlIF9IRUFEXyBvZiB0aGUgbGlzdCwgc28gdGhhdCBhbnkgY3B1IHN0aWxsCiAJICogb2JzZXJ2aW5nIHRoZSBlbnRyeSBpbiBnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpCiAJICogd2lsbCBub3QgbWlzcyBhbnkgb3RoZXIgbGlzdCBlbnRyaWVzOgogCSAqLwogCWxpc3RfYWRkX3JjdSgmZGF0YS0+Y3NkLmxpc3QsICZjYWxsX2Z1bmN0aW9uLnF1ZXVlKTsKLQlzcGluX3VubG9jaygmY2FsbF9mdW5jdGlvbi5sb2NrKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWxsX2Z1bmN0aW9uLmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogTWFrZSB0aGUgbGlzdCBhZGRpdGlvbiB2aXNpYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBpcGkuCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYjNmMTA5Ny4uZWJjYjE1NiAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KQEAgLTEzMzgsNiArMTMzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljcHV0aW1lX3QgdXRpbWUsIHN0aW1lOwogCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwl1bnNpZ25lZCBsb25nIG1heHJzcyA9IDA7CiAKIAltZW1zZXQoKGNoYXIgKikgciwgMCwgc2l6ZW9mICpyKTsKIAl1dGltZSA9IHN0aW1lID0gY3B1dGltZV96ZXJvOwpAQCAtMTM0Niw2ICsxMzQ3LDcgQEAKIAkJdXRpbWUgPSB0YXNrX3V0aW1lKGN1cnJlbnQpOwogCQlzdGltZSA9IHRhc2tfc3RpbWUoY3VycmVudCk7CiAJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShwLCByKTsKKwkJbWF4cnNzID0gcC0+c2lnbmFsLT5tYXhyc3M7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTM2Myw2ICsxMzY1LDcgQEAKIAkJCXItPnJ1X21hamZsdCA9IHAtPnNpZ25hbC0+Y21hal9mbHQ7CiAJCQlyLT5ydV9pbmJsb2NrID0gcC0+c2lnbmFsLT5jaW5ibG9jazsKIAkJCXItPnJ1X291YmxvY2sgPSBwLT5zaWduYWwtPmNvdWJsb2NrOworCQkJbWF4cnNzID0gcC0+c2lnbmFsLT5jbWF4cnNzOwogCiAJCQlpZiAod2hvID09IFJVU0FHRV9DSElMRFJFTikKIAkJCQlicmVhazsKQEAgLTEzNzcsNiArMTM4MCw4IEBACiAJCQlyLT5ydV9tYWpmbHQgKz0gcC0+c2lnbmFsLT5tYWpfZmx0OwogCQkJci0+cnVfaW5ibG9jayArPSBwLT5zaWduYWwtPmluYmxvY2s7CiAJCQlyLT5ydV9vdWJsb2NrICs9IHAtPnNpZ25hbC0+b3VibG9jazsKKwkJCWlmIChtYXhyc3MgPCBwLT5zaWduYWwtPm1heHJzcykKKwkJCQltYXhyc3MgPSBwLT5zaWduYWwtPm1heHJzczsKIAkJCXQgPSBwOwogCQkJZG8gewogCQkJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZSh0LCByKTsKQEAgLTEzOTIsNiArMTM5NywxNSBAQAogb3V0OgogCWNwdXRpbWVfdG9fdGltZXZhbCh1dGltZSwgJnItPnJ1X3V0aW1lKTsKIAljcHV0aW1lX3RvX3RpbWV2YWwoc3RpbWUsICZyLT5ydV9zdGltZSk7CisKKwlpZiAod2hvICE9IFJVU0FHRV9DSElMRFJFTikgeworCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGdldF90YXNrX21tKHApOworCQlpZiAobW0pIHsKKwkJCXNldG1heF9tbV9oaXdhdGVyX3JzcygmbWF4cnNzLCBtbSk7CisJCQltbXB1dChtbSk7CisJCX0KKwl9CisJci0+cnVfbWF4cnNzID0gbWF4cnNzICogKFBBR0VfU0laRSAvIDEwMjQpOyAvKiBjb252ZXJ0IHBhZ2VzIHRvIEtCcyAqLwogfQogCiBpbnQgZ2V0cnVzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdobywgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKnJ1KQpAQCAtMTUxMSwxMSArMTUyNSwxMSBAQAogCQljYXNlIFBSX1NFVF9UU0M6CiAJCQllcnJvciA9IFNFVF9UU0NfQ1RMKGFyZzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgUFJfVEFTS19QRVJGX0NPVU5URVJTX0RJU0FCTEU6Ci0JCQllcnJvciA9IHBlcmZfY291bnRlcl90YXNrX2Rpc2FibGUoKTsKKwkJY2FzZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEU6CisJCQllcnJvciA9IHBlcmZfZXZlbnRfdGFza19kaXNhYmxlKCk7CiAJCQlicmVhazsKLQkJY2FzZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRU5BQkxFOgotCQkJZXJyb3IgPSBwZXJmX2NvdW50ZXJfdGFza19lbmFibGUoKTsKKwkJY2FzZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRToKKwkJCWVycm9yID0gcGVyZl9ldmVudF90YXNrX2VuYWJsZSgpOwogCQkJYnJlYWs7CiAJCWNhc2UgUFJfR0VUX1RJTUVSU0xBQ0s6CiAJCQllcnJvciA9IGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c19uaS5jIGIva2VybmVsL3N5c19uaS5jCmluZGV4IDY4MzIwZjYuLjUxNWJjMjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNfbmkuYworKysgYi9rZXJuZWwvc3lzX25pLmMKQEAgLTE3Nyw0ICsxNzcsNCBAQAogY29uZF9zeXNjYWxsKHN5c19ldmVudGZkMik7CiAKIC8qIHBlcmZvcm1hbmNlIGNvdW50ZXJzOiAqLwotY29uZF9zeXNjYWxsKHN5c19wZXJmX2NvdW50ZXJfb3Blbik7Citjb25kX3N5c2NhbGwoc3lzX3BlcmZfZXZlbnRfb3Blbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggMWE2MzFiYS4uMGRmYWE0NyAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMTA2LDYgKzEwNiw5IEBACiBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHR3byA9IDI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvbmVfdWwgPSAxOwogc3RhdGljIGludCBvbmVfaHVuZHJlZCA9IDEwMDsKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitzdGF0aWMgaW50IHRlbl90aG91c2FuZCA9IDEwMDAwOworI2VuZGlmCiAKIC8qIHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgcHJvY19kb3Vsb25ndmVjX21pbm1heCBvZiB2bV9kaXJ0eV9ieXRlcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZGlydHlfYnl0ZXNfbWluID0gMiAqIFBBR0VfU0laRTsKQEAgLTcyMiw2ICs3MjUsMTcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInByaW50a19kZWxheSIsCisJCS5kYXRhCQk9ICZwcmludGtfZGVsYXlfbXNlYywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnRlbl90aG91c2FuZCwKKwl9LAogI2VuZGlmCiAJewogCQkuY3RsX25hbWUJPSBLRVJOX05HUk9VUFNfTUFYLApAQCAtOTY0LDI4ICs5NzgsMjggQEAKIAkJLmNoaWxkCQk9IHNsb3dfd29ya19zeXNjdGxzLAogCX0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZQk9ICJwZXJmX2NvdW50ZXJfcGFyYW5vaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCwKLQkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCksCisJCS5wcm9jbmFtZQk9ICJwZXJmX2V2ZW50X3BhcmFub2lkIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9wZXJmX2V2ZW50X3BhcmFub2lkLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZQk9ICJwZXJmX2NvdW50ZXJfbWxvY2tfa2IiLAotCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfY291bnRlcl9tbG9jaywKLQkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX3BlcmZfY291bnRlcl9tbG9jayksCisJCS5wcm9jbmFtZQk9ICJwZXJmX2V2ZW50X21sb2NrX2tiIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9wZXJmX2V2ZW50X21sb2NrLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfcGVyZl9ldmVudF9tbG9jayksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZQk9ICJwZXJmX2NvdW50ZXJfbWF4X3NhbXBsZV9yYXRlIiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGUsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGUpLAorCQkucHJvY25hbWUJPSAicGVyZl9ldmVudF9tYXhfc2FtcGxlX3JhdGUiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlKSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGJiYjUxMDcuLjVkYjVhOGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00Niw2ICs0Niw5IEBACiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy90aW1lci5oPgorCiB1NjQgamlmZmllc182NCBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IElOSVRJQUxfSklGRklFUzsKIAogRVhQT1JUX1NZTUJPTChqaWZmaWVzXzY0KTsKQEAgLTUyMSw2ICs1MjQsMjUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z190aW1lcl9kZWFjdGl2YXRlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikgeyB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2luaXQoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCWRlYnVnX3RpbWVyX2luaXQodGltZXIpOworCXRyYWNlX3RpbWVyX2luaXQodGltZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RlYnVnX2FjdGl2YXRlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQoreworCWRlYnVnX3RpbWVyX2FjdGl2YXRlKHRpbWVyKTsKKwl0cmFjZV90aW1lcl9zdGFydCh0aW1lciwgZXhwaXJlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kZWFjdGl2YXRlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3sKKwlkZWJ1Z190aW1lcl9kZWFjdGl2YXRlKHRpbWVyKTsKKwl0cmFjZV90aW1lcl9jYW5jZWwodGltZXIpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAogCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCkBAIC01NDksNyArNTcxLDcgQEAKIAkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKLQlkZWJ1Z190aW1lcl9pbml0KHRpbWVyKTsKKwlkZWJ1Z19pbml0KHRpbWVyKTsKIAlfX2luaXRfdGltZXIodGltZXIsIG5hbWUsIGtleSk7CiB9CiBFWFBPUlRfU1lNQk9MKGluaXRfdGltZXJfa2V5KTsKQEAgLTU2OCw3ICs1OTAsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gJnRpbWVyLT5lbnRyeTsKIAotCWRlYnVnX3RpbWVyX2RlYWN0aXZhdGUodGltZXIpOworCWRlYnVnX2RlYWN0aXZhdGUodGltZXIpOwogCiAJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwogCWlmIChjbGVhcl9wZW5kaW5nKQpAQCAtNjMyLDcgKzY1NCw3IEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JZGVidWdfdGltZXJfYWN0aXZhdGUodGltZXIpOworCWRlYnVnX2FjdGl2YXRlKHRpbWVyLCBleHBpcmVzKTsKIAogCW5ld19iYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKIApAQCAtNzg3LDcgKzgwOSw3IEBACiAJQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpIHx8ICF0aW1lci0+ZnVuY3Rpb24pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCBmbGFncyk7CiAJdGltZXJfc2V0X2Jhc2UodGltZXIsIGJhc2UpOwotCWRlYnVnX3RpbWVyX2FjdGl2YXRlKHRpbWVyKTsKKwlkZWJ1Z19hY3RpdmF0ZSh0aW1lciwgdGltZXItPmV4cGlyZXMpOwogCWlmICh0aW1lX2JlZm9yZSh0aW1lci0+ZXhwaXJlcywgYmFzZS0+bmV4dF90aW1lcikgJiYKIAkgICAgIXRiYXNlX2dldF9kZWZlcnJhYmxlKHRpbWVyLT5iYXNlKSkKIAkJYmFzZS0+bmV4dF90aW1lciA9IHRpbWVyLT5leHBpcmVzOwpAQCAtMTAwMCw3ICsxMDIyLDkgQEAKIAkJCQkgKi8KIAkJCQlsb2NrX21hcF9hY3F1aXJlKCZsb2NrZGVwX21hcCk7CiAKKwkJCQl0cmFjZV90aW1lcl9leHBpcmVfZW50cnkodGltZXIpOwogCQkJCWZuKGRhdGEpOworCQkJCXRyYWNlX3RpbWVyX2V4cGlyZV9leGl0KHRpbWVyKTsKIAogCQkJCWxvY2tfbWFwX3JlbGVhc2UoJmxvY2tkZXBfbWFwKTsKIApAQCAtMTE4Nyw3ICsxMjExLDcgQEAKIHsKIAlzdHJ1Y3QgdHZlY19iYXNlICpiYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKIAotCXBlcmZfY291bnRlcl9kb19wZW5kaW5nKCk7CisJcGVyZl9ldmVudF9kb19wZW5kaW5nKCk7CiAKIAlocnRpbWVyX3J1bl9wZW5kaW5nKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggZTcxNjM0Ni4uYjQxNjUxMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTgzLDcgKzgzLDcgQEAKICMgVGhpcyBhbGxvd3MgdGhvc2Ugb3B0aW9ucyB0byBhcHBlYXIgd2hlbiBubyBvdGhlciB0cmFjZXIgaXMgc2VsZWN0ZWQuIEJ1dCB0aGUKICMgb3B0aW9ucyBkbyBub3QgYXBwZWFyIHdoZW4gc29tZXRoaW5nIGVsc2Ugc2VsZWN0cyBpdC4gV2UgbmVlZCB0aGUgdHdvIG9wdGlvbnMKICMgR0VORVJJQ19UUkFDRVIgYW5kIFRSQUNJTkcgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHRvIGFjY29tcGxpc2ggdGhlCi0jIGhpZGRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zIG9wdGlvbnMuCisjIGhpZGRpbmcgb2YgdGhlIGF1dG9tYXRpYyBvcHRpb25zLgogCiBjb25maWcgVFJBQ0lORwogCWJvb2wKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZSBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQppbmRleCA4NDQxNjRkLi4yNmYwM2FjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKKysrIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCkBAIC00Miw3ICs0Miw2IEBACiBvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSB0cmFjZV9mdW5jdGlvbnNfZ3JhcGgubwogb2JqLSQoQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcpICs9IHRyYWNlX2JyYW5jaC5vCiBvYmotJChDT05GSUdfSFdfQlJBTkNIX1RSQUNFUikgKz0gdHJhY2VfaHdfYnJhbmNoZXMubwotb2JqLSQoQ09ORklHX1BPV0VSX1RSQUNFUikgKz0gdHJhY2VfcG93ZXIubwogb2JqLSQoQ09ORklHX0tNRU1UUkFDRSkgKz0ga21lbXRyYWNlLm8KIG9iai0kKENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSKSArPSB0cmFjZV93b3JrcXVldWUubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICs9IGJsa3RyYWNlLm8KQEAgLTU0LDUgKzUzLDYgQEAKIG9iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpICs9IHRyYWNlX3N5c2NhbGxzLm8KIG9iai0kKENPTkZJR19FVkVOVF9QUk9GSUxFKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHNfZmlsdGVyLm8KK29iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSBwb3dlci10cmFjZXMubwogCiBsaWJmdHJhY2UteSA6PSBmdHJhY2UubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IGNjNjE1ZjguLjIzZGY3NzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTE1MjAsNyArMTUyMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19mdHJhY2Vfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19mdHJhY2Vfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSB0X3N0YXJ0LAogCS5uZXh0ID0gdF9uZXh0LAogCS5zdG9wID0gdF9zdG9wLApAQCAtMjQxNCwxMSArMjQxNCw5IEBACiBzdGF0aWMgdm9pZCAqCiBfX2dfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCXVuc2lnbmVkIGxvbmcgKmFycmF5ID0gbS0+cHJpdmF0ZTsKLQogCWlmICgqcG9zID49IGZ0cmFjZV9ncmFwaF9jb3VudCkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICZhcnJheVsqcG9zXTsKKwlyZXR1cm4gJmZ0cmFjZV9ncmFwaF9mdW5jc1sqcG9zXTsKIH0KIAogc3RhdGljIHZvaWQgKgpAQCAtMjQ2MSw3ICsyNDU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmdHJhY2VfZ3JhcGhfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZnRyYWNlX2dyYXBoX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gZ19zdGFydCwKIAkubmV4dCA9IGdfbmV4dCwKIAkuc3RvcCA9IGdfc3RvcCwKQEAgLTI0ODIsMTcgKzI0ODAsMTEgQEAKIAkJZnRyYWNlX2dyYXBoX2NvdW50ID0gMDsKIAkJbWVtc2V0KGZ0cmFjZV9ncmFwaF9mdW5jcywgMCwgc2l6ZW9mKGZ0cmFjZV9ncmFwaF9mdW5jcykpOwogCX0KLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCXJldCA9IHNlcV9vcGVuKGZpbGUsICZmdHJhY2VfZ3JhcGhfc2VxX29wcyk7Ci0JCWlmICghcmV0KSB7Ci0JCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCQltLT5wcml2YXRlID0gZnRyYWNlX2dyYXBoX2Z1bmNzOwotCQl9Ci0JfSBlbHNlCi0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZ0cmFjZV9ncmFwaF9mdW5jczsKIAltdXRleF91bmxvY2soJmdyYXBoX2xvY2spOwogCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCXJldCA9IHNlcV9vcGVuKGZpbGUsICZmdHJhY2VfZ3JhcGhfc2VxX29wcyk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNTYwLDcgKzI1NTIsNiBAQAogCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRyYWNlX3BhcnNlciBwYXJzZXI7Ci0JdW5zaWduZWQgbG9uZyAqYXJyYXk7CiAJc2l6ZV90IHJlYWQgPSAwOwogCXNzaXplX3QgcmV0OwogCkBAIC0yNTc0LDEyICsyNTY1LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlhcnJheSA9IG0tPnByaXZhdGU7Ci0JfSBlbHNlCi0JCWFycmF5ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCiAJaWYgKHRyYWNlX3BhcnNlcl9nZXRfaW5pdCgmcGFyc2VyLCBGVFJBQ0VfQlVGRl9NQVgpKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjU5MSw3ICsyNTc2LDcgQEAKIAkJcGFyc2VyLmJ1ZmZlcltwYXJzZXIuaWR4XSA9IDA7CiAKIAkJLyogd2UgYWxsb3cgb25seSBvbmUgZXhwcmVzc2lvbiBhdCBhIHRpbWUgKi8KLQkJcmV0ID0gZnRyYWNlX3NldF9mdW5jKGFycmF5LCAmZnRyYWNlX2dyYXBoX2NvdW50LAorCQlyZXQgPSBmdHJhY2Vfc2V0X2Z1bmMoZnRyYWNlX2dyYXBoX2Z1bmNzLCAmZnRyYWNlX2dyYXBoX2NvdW50LAogCQkJCQlwYXJzZXIuYnVmZmVyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jIGIva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNmM2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvcG93ZXItdHJhY2VzLmMKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIFBvd2VyIHRyYWNlIHBvaW50cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgorCitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHBvd2VyX3N0YXJ0KTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwocG93ZXJfZW5kKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwocG93ZXJfZnJlcXVlbmN5KTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCA2ZWVmMzg5Li5kNGZmMDE5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtMjAxLDggKzIwMSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjaW5nX2lzX29uKTsKIAotI2luY2x1ZGUgInRyYWNlLmgiCi0KICNkZWZpbmUgUkJfRVZOVF9IRFJfU0laRSAob2Zmc2V0b2Yoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50LCBhcnJheSkpCiAjZGVmaW5lIFJCX0FMSUdOTUVOVAkJNFUKICNkZWZpbmUgUkJfTUFYX1NNQUxMX0RBVEEJKFJCX0FMSUdOTUVOVCAqIFJJTkdCVUZfVFlQRV9EQVRBX1RZUEVfTEVOX01BWCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggZmQ1MmExOS4uNmMwZjZhOCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAKIHN0YXRpYyBpbnQgdHJhY2luZ19zZXRfdHJhY2VyKGNvbnN0IGNoYXIgKmJ1Zik7CiAKLSNkZWZpbmUgQk9PVFVQX1RSQUNFUl9TSVpFCQkxMDAKLXN0YXRpYyBjaGFyIGJvb3R1cF90cmFjZXJfYnVmW0JPT1RVUF9UUkFDRVJfU0laRV0gX19pbml0ZGF0YTsKKyNkZWZpbmUgTUFYX1RSQUNFUl9TSVpFCQkxMDAKK3N0YXRpYyBjaGFyIGJvb3R1cF90cmFjZXJfYnVmW01BWF9UUkFDRVJfU0laRV0gX19pbml0ZGF0YTsKIHN0YXRpYyBjaGFyICpkZWZhdWx0X2Jvb3R1cF90cmFjZXI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldF9mdHJhY2UoY2hhciAqc3RyKQogewotCXN0cm5jcHkoYm9vdHVwX3RyYWNlcl9idWYsIHN0ciwgQk9PVFVQX1RSQUNFUl9TSVpFKTsKKwlzdHJuY3B5KGJvb3R1cF90cmFjZXJfYnVmLCBzdHIsIE1BWF9UUkFDRVJfU0laRSk7CiAJZGVmYXVsdF9ib290dXBfdHJhY2VyID0gYm9vdHVwX3RyYWNlcl9idWY7CiAJLyogV2UgYXJlIHVzaW5nIGZ0cmFjZSBlYXJseSwgZXhwYW5kIGl0ICovCiAJcmluZ19idWZmZXJfZXhwYW5kZWQgPSAxOwpAQCAtMjQyLDEzICsyNDIsNiBAQAogc3RhdGljIHN0cnVjdCB0cmFjZXIJCSpjdXJyZW50X3RyYWNlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCi0gKiBtYXhfdHJhY2VyX3R5cGVfbGVuIGlzIHVzZWQgdG8gc2ltcGxpZnkgdGhlIGFsbG9jYXRpbmcgb2YKLSAqIGJ1ZmZlcnMgdG8gcmVhZCB1c2Vyc3BhY2UgdHJhY2VyIG5hbWVzLiBXZSBrZWVwIHRyYWNrIG9mCi0gKiB0aGUgbG9uZ2VzdCB0cmFjZXIgbmFtZSByZWdpc3RlcmVkLgotICovCi1zdGF0aWMgaW50CQkJbWF4X3RyYWNlcl90eXBlX2xlbjsKLQotLyoKICAqIHRyYWNlX3R5cGVzX2xvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSB0cmFjZV90eXBlcyBsaXN0LgogICogVGhpcyBsb2NrIGlzIGFsc28gdXNlZCB0byBrZWVwIHVzZXIgYWNjZXNzIHNlcmlhbGl6ZWQuCiAgKiBBY2Nlc3NlcyBmcm9tIHVzZXJzcGFjZSB3aWxsIGdyYWIgdGhpcyBsb2NrIHdoaWxlIHVzZXJzcGFjZQpAQCAtMjc1LDEyICsyNjgsMTggQEAKICAqLwogdm9pZCB0cmFjZV93YWtlX3VwKHZvaWQpCiB7CisJaW50IGNwdTsKKworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQkxPQ0spCisJCXJldHVybjsKIAkvKgogCSAqIFRoZSBydW5xdWV1ZV9pc19sb2NrZWQoKSBjYW4gZmFpbCwgYnV0IHRoaXMgaXMgdGhlIGJlc3Qgd2UKIAkgKiBoYXZlIGZvciBub3c6CiAJICovCi0JaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0JMT0NLKSAmJiAhcnVucXVldWVfaXNfbG9ja2VkKCkpCisJY3B1ID0gZ2V0X2NwdSgpOworCWlmICghcnVucXVldWVfaXNfbG9ja2VkKGNwdSkpCiAJCXdha2VfdXAoJnRyYWNlX3dhaXQpOworCXB1dF9jcHUoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2V0X2J1Zl9zaXplKGNoYXIgKnN0cikKQEAgLTYxOSw3ICs2MTgsNiBAQAogX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3QgdHJhY2VyICp0OwotCWludCBsZW47CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXR5cGUtPm5hbWUpIHsKQEAgLTYyNyw2ICs2MjUsMTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmIChzdHJsZW4odHlwZS0+bmFtZSkgPiBNQVhfVFJBQ0VSX1NJWkUpIHsKKwkJcHJfaW5mbygiVHJhY2VyIGhhcyBhIG5hbWUgbG9uZ2VyIHRoYW4gJWRcbiIsIE1BWF9UUkFDRVJfU0laRSk7CisJCXJldHVybiAtMTsKKwl9CisKIAkvKgogCSAqIFdoZW4gdGhpcyBnZXRzIGNhbGxlZCB3ZSBob2xkIHRoZSBCS0wgd2hpY2ggbWVhbnMgdGhhdAogCSAqIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFZhcmlvdXMgdHJhY2Ugc2VsZnRlc3RzIGhvd2V2ZXIKQEAgLTY0MSw3ICs2NDQsNyBAQAogCWZvciAodCA9IHRyYWNlX3R5cGVzOyB0OyB0ID0gdC0+bmV4dCkgewogCQlpZiAoc3RyY21wKHR5cGUtPm5hbWUsIHQtPm5hbWUpID09IDApIHsKIAkJCS8qIGFscmVhZHkgZm91bmQgKi8KLQkJCXByX2luZm8oIlRyYWNlICVzIGFscmVhZHkgcmVnaXN0ZXJlZFxuIiwKKwkJCXByX2luZm8oIlRyYWNlciAlcyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCiAJCQkJdHlwZS0+bmFtZSk7CiAJCQlyZXQgPSAtMTsKIAkJCWdvdG8gb3V0OwpAQCAtNjkyLDkgKzY5NSw2IEBACiAKIAl0eXBlLT5uZXh0ID0gdHJhY2VfdHlwZXM7CiAJdHJhY2VfdHlwZXMgPSB0eXBlOwotCWxlbiA9IHN0cmxlbih0eXBlLT5uYW1lKTsKLQlpZiAobGVuID4gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJbWF4X3RyYWNlcl90eXBlX2xlbiA9IGxlbjsKIAogIG91dDoKIAl0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcgPSBmYWxzZTsKQEAgLTcwMyw3ICs3MDMsNyBAQAogCWlmIChyZXQgfHwgIWRlZmF1bHRfYm9vdHVwX3RyYWNlcikKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKHN0cm5jbXAoZGVmYXVsdF9ib290dXBfdHJhY2VyLCB0eXBlLT5uYW1lLCBCT09UVVBfVFJBQ0VSX1NJWkUpKQorCWlmIChzdHJuY21wKGRlZmF1bHRfYm9vdHVwX3RyYWNlciwgdHlwZS0+bmFtZSwgTUFYX1RSQUNFUl9TSVpFKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU3RhcnRpbmcgdHJhY2VyICclcydcbiIsIHR5cGUtPm5hbWUpOwpAQCAtNzI1LDE0ICs3MjUsMTMgQEAKIHZvaWQgdW5yZWdpc3Rlcl90cmFjZXIoc3RydWN0IHRyYWNlciAqdHlwZSkKIHsKIAlzdHJ1Y3QgdHJhY2VyICoqdDsKLQlpbnQgbGVuOwogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJZm9yICh0ID0gJnRyYWNlX3R5cGVzOyAqdDsgdCA9ICYoKnQpLT5uZXh0KSB7CiAJCWlmICgqdCA9PSB0eXBlKQogCQkJZ290byBmb3VuZDsKIAl9Ci0JcHJfaW5mbygiVHJhY2UgJXMgbm90IHJlZ2lzdGVyZWRcbiIsIHR5cGUtPm5hbWUpOworCXByX2luZm8oIlRyYWNlciAlcyBub3QgcmVnaXN0ZXJlZFxuIiwgdHlwZS0+bmFtZSk7CiAJZ290byBvdXQ7CiAKICBmb3VuZDoKQEAgLTc0NSwxNyArNzQ0LDcgQEAKIAkJCWN1cnJlbnRfdHJhY2UtPnN0b3AoJmdsb2JhbF90cmFjZSk7CiAJCWN1cnJlbnRfdHJhY2UgPSAmbm9wX3RyYWNlOwogCX0KLQotCWlmIChzdHJsZW4odHlwZS0+bmFtZSkgIT0gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJZ290byBvdXQ7Ci0KLQltYXhfdHJhY2VyX3R5cGVfbGVuID0gMDsKLQlmb3IgKHQgPSAmdHJhY2VfdHlwZXM7ICp0OyB0ID0gJigqdCktPm5leHQpIHsKLQkJbGVuID0gc3RybGVuKCgqdCktPm5hbWUpOwotCQlpZiAobGVuID4gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJCW1heF90cmFjZXJfdHlwZV9sZW4gPSBsZW47Ci0JfQotIG91dDoKK291dDoKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogfQogCkBAIC0xOTYwLDcgKzE5NDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRyYWNlcl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB0cmFjZXJfc2VxX29wcyA9IHsKIAkuc3RhcnQJCT0gc19zdGFydCwKIAkubmV4dAkJPSBzX25leHQsCiAJLnN0b3AJCT0gc19zdG9wLApAQCAtMjE3NCw3ICsyMTYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzaG93X3RyYWNlc19zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzaG93X3RyYWNlc19zZXFfb3BzID0gewogCS5zdGFydAkJPSB0X3N0YXJ0LAogCS5uZXh0CQk9IHRfbmV4dCwKIAkuc3RvcAkJPSB0X3N0b3AsCkBAIC0yNjA0LDcgKzI1OTMsNyBAQAogdHJhY2luZ19zZXRfdHJhY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbbWF4X3RyYWNlcl90eXBlX2xlbisyXTsKKwljaGFyIGJ1ZltNQVhfVFJBQ0VSX1NJWkUrMl07CiAJaW50IHI7CiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKQEAgLTI3NTQsMTUgKzI3NDMsMTUgQEAKIHRyYWNpbmdfc2V0X3RyYWNlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKLQljaGFyIGJ1ZlttYXhfdHJhY2VyX3R5cGVfbGVuKzFdOworCWNoYXIgYnVmW01BWF9UUkFDRVJfU0laRSsxXTsKIAlpbnQgaTsKIAlzaXplX3QgcmV0OwogCWludCBlcnI7CiAKIAlyZXQgPSBjbnQ7CiAKLQlpZiAoY250ID4gbWF4X3RyYWNlcl90eXBlX2xlbikKLQkJY250ID0gbWF4X3RyYWNlcl90eXBlX2xlbjsKKwlpZiAoY250ID4gTUFYX1RSQUNFUl9TSVpFKQorCQljbnQgPSBNQVhfVFJBQ0VSX1NJWkU7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDg2YmNmZjkuLjQwNWNiODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8dHJhY2UvYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW10cmFjZS5oPgotI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CiAKICNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2VfZXZlbnQuaD4KQEAgLTM3LDcgKzM2LDYgQEAKIAlUUkFDRV9IV19CUkFOQ0hFUywKIAlUUkFDRV9LTUVNX0FMTE9DLAogCVRSQUNFX0tNRU1fRlJFRSwKLQlUUkFDRV9QT1dFUiwKIAlUUkFDRV9CTEssCiAKIAlfX1RSQUNFX0xBU1RfVFlQRSwKQEAgLTIwNyw3ICsyMDUsNiBAQAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5LAlcCiAJCQkgIFRSQUNFX0dSQVBIX1JFVCk7CQlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGh3X2JyYW5jaF9lbnRyeSwgVFJBQ0VfSFdfQlJBTkNIRVMpO1wKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfcG93ZXIsIFRSQUNFX1BPV0VSKTsgXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnksCVwKIAkJCSAgVFJBQ0VfS01FTV9BTExPQyk7CVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnksCVwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmggYi9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCmluZGV4IGE0MzE3NDguLmVhZDNkNzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaApAQCAtMzMwLDIzICszMzAsNiBAQAogCUZfcHJpbnRrKCJmcm9tOiAlbGx4IHRvOiAlbGx4IiwgX19lbnRyeS0+ZnJvbSwgX19lbnRyeS0+dG8pCiApOwogCi1GVFJBQ0VfRU5UUlkocG93ZXIsIHRyYWNlX3Bvd2VyLAotCi0JVFJBQ0VfUE9XRVIsCi0KLQlGX1NUUlVDVCgKLQkJX19maWVsZF9zdHJ1Y3QoCXN0cnVjdCBwb3dlcl90cmFjZSwJc3RhdGVfZGF0YQkpCi0JCV9fZmllbGRfZGVzYygJczY0LAlzdGF0ZV9kYXRhLAlzdGFtcAkJKQotCQlfX2ZpZWxkX2Rlc2MoCXM2NCwJc3RhdGVfZGF0YSwJZW5kCQkpCi0JCV9fZmllbGRfZGVzYygJaW50LAlzdGF0ZV9kYXRhLAl0eXBlCQkpCi0JCV9fZmllbGRfZGVzYygJaW50LAlzdGF0ZV9kYXRhLAlzdGF0ZQkJKQotCSksCi0KLQlGX3ByaW50aygiJWxseC0+JWxseCB0eXBlOiV1IHN0YXRlOiV1IiwKLQkJIF9fZW50cnktPnN0YW1wLCBfX2VudHJ5LT5lbmQsCi0JCSBfX2VudHJ5LT50eXBlLCBfX2VudHJ5LT5zdGF0ZSkKLSk7Ci0KIEZUUkFDRV9FTlRSWShrbWVtX2FsbG9jLCBrbWVtdHJhY2VfYWxsb2NfZW50cnksCiAKIAlUUkFDRV9LTUVNX0FMTE9DLApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKaW5kZXggNTVhMjVjOS4uZGQ0NGI4NyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC04LDYgKzgsNTcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlICJ0cmFjZS5oIgogCisvKgorICogV2UgY2FuJ3QgdXNlIGEgc2l6ZSBidXQgYSB0eXBlIGluIGFsbG9jX3BlcmNwdSgpCisgKiBTbyBsZXQncyBjcmVhdGUgYSBkdW1teSB0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgZGVzaXJlZCBzaXplCisgKi8KK3R5cGVkZWYgc3RydWN0IHtjaGFyIGJ1ZltGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRV07fSBwcm9maWxlX2J1Zl90OworCitjaGFyCQkqdHJhY2VfcHJvZmlsZV9idWY7CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9wcm9maWxlX2J1Zik7CisKK2NoYXIJCSp0cmFjZV9wcm9maWxlX2J1Zl9ubWk7CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCisvKiBDb3VudCB0aGUgZXZlbnRzIGluIHVzZSAocGVyIGV2ZW50IGlkLCBub3QgcGVyIGluc3RhbmNlKSAqLworc3RhdGljIGludAl0b3RhbF9wcm9maWxlX2NvdW50OworCitzdGF0aWMgaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV9ldmVudChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50KQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmZXZlbnQtPnByb2ZpbGVfY291bnQpKQorCQlyZXR1cm4gMDsKKworCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCsrKSB7CisJCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOworCQlpZiAoIWJ1ZikKKwkJCWdvdG8gZmFpbF9idWY7CisKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHRyYWNlX3Byb2ZpbGVfYnVmLCBidWYpOworCisJCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOworCQlpZiAoIWJ1ZikKKwkJCWdvdG8gZmFpbF9idWZfbm1pOworCisJCXJjdV9hc3NpZ25fcG9pbnRlcih0cmFjZV9wcm9maWxlX2J1Zl9ubWksIGJ1Zik7CisJfQorCisJcmV0ID0gZXZlbnQtPnByb2ZpbGVfZW5hYmxlKCk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJa2ZyZWUodHJhY2VfcHJvZmlsZV9idWZfbm1pKTsKK2ZhaWxfYnVmX25taToKKwlrZnJlZSh0cmFjZV9wcm9maWxlX2J1Zik7CitmYWlsX2J1ZjoKKwl0b3RhbF9wcm9maWxlX2NvdW50LS07CisJYXRvbWljX2RlYygmZXZlbnQtPnByb2ZpbGVfY291bnQpOworCisJcmV0dXJuIHJldDsKK30KKwogaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZShpbnQgZXZlbnRfaWQpCiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudDsKQEAgLTE3LDcgKzY4LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCQlpZiAoZXZlbnQtPmlkID09IGV2ZW50X2lkICYmIGV2ZW50LT5wcm9maWxlX2VuYWJsZSAmJgogCQkgICAgdHJ5X21vZHVsZV9nZXQoZXZlbnQtPm1vZCkpIHsKLQkJCXJldCA9IGV2ZW50LT5wcm9maWxlX2VuYWJsZShldmVudCk7CisJCQlyZXQgPSBmdHJhY2VfcHJvZmlsZV9lbmFibGVfZXZlbnQoZXZlbnQpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yNiw2ICs3NywzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfZXZlbnQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudCkKK3sKKwljaGFyICpidWYsICpubWlfYnVmOworCisJaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCAmZXZlbnQtPnByb2ZpbGVfY291bnQpKQorCQlyZXR1cm47CisKKwlldmVudC0+cHJvZmlsZV9kaXNhYmxlKCk7CisKKwlpZiAoIS0tdG90YWxfcHJvZmlsZV9jb3VudCkgeworCQlidWYgPSB0cmFjZV9wcm9maWxlX2J1ZjsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHRyYWNlX3Byb2ZpbGVfYnVmLCBOVUxMKTsKKworCQlubWlfYnVmID0gdHJhY2VfcHJvZmlsZV9idWZfbm1pOworCQlyY3VfYXNzaWduX3BvaW50ZXIodHJhY2VfcHJvZmlsZV9idWZfbm1pLCBOVUxMKTsKKworCQkvKgorCQkgKiBFbnN1cmUgZXZlcnkgZXZlbnRzIGluIHByb2ZpbGluZyBoYXZlIGZpbmlzaGVkIGJlZm9yZQorCQkgKiByZWxlYXNpbmcgdGhlIGJ1ZmZlcnMKKwkJICovCisJCXN5bmNocm9uaXplX3NjaGVkKCk7CisKKwkJZnJlZV9wZXJjcHUoYnVmKTsKKwkJZnJlZV9wZXJjcHUobm1pX2J1Zik7CisJfQorfQorCiB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoaW50IGV2ZW50X2lkKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnQ7CkBAIC0zMyw3ICsxMTEsNyBAQAogCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCQlpZiAoZXZlbnQtPmlkID09IGV2ZW50X2lkKSB7Ci0JCQlldmVudC0+cHJvZmlsZV9kaXNhYmxlKGV2ZW50KTsKKwkJCWZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfZXZlbnQoZXZlbnQpOwogCQkJbW9kdWxlX3B1dChldmVudC0+bW9kKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggNTZjMjYwYi4uNmYwM2M4YSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMjcxLDQyICsyNzEsMzIgQEAKIHN0YXRpYyB2b2lkICoKIHRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSB2OwogCiAJKCpwb3MpKys7CiAKLQlmb3IgKDs7KSB7Ci0JCWlmIChsaXN0ID09ICZmdHJhY2VfZXZlbnRzKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJY2FsbCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsLCBsaXN0KTsKLQorCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoY2FsbCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKIAkJLyoKIAkJICogVGhlIGZ0cmFjZSBzdWJzeXN0ZW0gaXMgZm9yIHNob3dpbmcgZm9ybWF0cyBvbmx5LgogCQkgKiBUaGV5IGNhbiBub3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCB2aWEgdGhlIGV2ZW50IGZpbGVzLgogCQkgKi8KIAkJaWYgKGNhbGwtPnJlZ2Z1bmMpCi0JCQlicmVhazsKLQotCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJCXJldHVybiBjYWxsOwogCX0KIAotCW0tPnByaXZhdGUgPSBsaXN0LT5uZXh0OwotCi0JcmV0dXJuIGNhbGw7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICp0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gTlVMTDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGw7CiAJbG9mZl90IGw7CiAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAKLQltLT5wcml2YXRlID0gZnRyYWNlX2V2ZW50cy5uZXh0OworCWNhbGwgPSBsaXN0X2VudHJ5KCZmdHJhY2VfZXZlbnRzLCBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwsIGxpc3QpOwogCWZvciAobCA9IDA7IGwgPD0gKnBvczsgKSB7Ci0JCWNhbGwgPSB0X25leHQobSwgTlVMTCwgJmwpOworCQljYWxsID0gdF9uZXh0KG0sIGNhbGwsICZsKTsKIAkJaWYgKCFjYWxsKQogCQkJYnJlYWs7CiAJfQpAQCAtMzE2LDM3ICszMDYsMjggQEAKIHN0YXRpYyB2b2lkICoKIHNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSB2OwogCiAJKCpwb3MpKys7CiAKLSByZXRyeToKLQlpZiAobGlzdCA9PSAmZnRyYWNlX2V2ZW50cykKLQkJcmV0dXJuIE5VTEw7Ci0KLQljYWxsID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwsIGxpc3QpOwotCi0JaWYgKCFjYWxsLT5lbmFibGVkKSB7Ci0JCWxpc3QgPSBsaXN0LT5uZXh0OwotCQlnb3RvIHJldHJ5OworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoY2FsbCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKKwkJaWYgKGNhbGwtPmVuYWJsZWQpCisJCQlyZXR1cm4gY2FsbDsKIAl9CiAKLQltLT5wcml2YXRlID0gbGlzdC0+bmV4dDsKLQotCXJldHVybiBjYWxsOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCAqc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IE5VTEw7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOwogCWxvZmZfdCBsOwogCiAJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOwogCi0JbS0+cHJpdmF0ZSA9IGZ0cmFjZV9ldmVudHMubmV4dDsKKwljYWxsID0gbGlzdF9lbnRyeSgmZnRyYWNlX2V2ZW50cywgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsLCBsaXN0KTsKIAlmb3IgKGwgPSAwOyBsIDw9ICpwb3M7ICkgewotCQljYWxsID0gc19uZXh0KG0sIE5VTEwsICZsKTsKKwkJY2FsbCA9IHNfbmV4dChtLCBjYWxsLCAmbCk7CiAJCWlmICghY2FsbCkKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKaW5kZXggY2E3ZDdjNC4uMjNiNjM4NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCQkgICAgc2VxX3ByaW50X2lwX3N5bShzZXEsIGl0LT5mcm9tLCBzeW1mbGFncykgJiYKIAkJICAgIHRyYWNlX3NlcV9wcmludGYoc2VxLCAiXG4iKSkKIAkJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTs7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CiAJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3Bvd2VyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxYTAwZi4uMDAwMDAwMAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKgotICogcmluZyBidWZmZXIgYmFzZWQgQy1zdGF0ZSB0cmFjZXIKLSAqCi0gKiBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBNdWNoIGlzIGJvcnJvd2VkIGZyb20gdHJhY2VfYm9vdC5jIHdoaWNoIGlzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpwb3dlcl90cmFjZTsKLXN0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0cmFjZV9wb3dlcl9lbmFibGVkOwotCi1zdGF0aWMgdm9pZCBwcm9iZV9wb3dlcl9zdGFydChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0JaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQotCQlyZXR1cm47Ci0KLQltZW1zZXQoaXQsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfdHJhY2UpKTsKLQlpdC0+c3RhdGUgPSBsZXZlbDsKLQlpdC0+dHlwZSA9IHR5cGU7Ci0JaXQtPnN0YW1wID0ga3RpbWVfZ2V0KCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHJvYmVfcG93ZXJfZW5kKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3Bvd2VyOwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKLQotCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JYnVmZmVyID0gdHItPmJ1ZmZlcjsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWl0LT5lbmQgPSBrdGltZV9nZXQoKTsKLQlkYXRhID0gdHItPmRhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX1BPV0VSLAotCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCWVudHJ5LT5zdGF0ZV9kYXRhID0gKml0OwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCAwKTsKLSBvdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvYmVfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3Bvd2VyOwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKLQotCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JYnVmZmVyID0gdHItPmJ1ZmZlcjsKLQotCW1lbXNldChpdCwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl90cmFjZSkpOwotCWl0LT5zdGF0ZSA9IGxldmVsOwotCWl0LT50eXBlID0gdHlwZTsKLQlpdC0+c3RhbXAgPSBrdGltZV9nZXQoKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpdC0+ZW5kID0gaXQtPnN0YW1wOwotCWRhdGEgPSB0ci0+ZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldOwotCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfUE9XRVIsCi0JCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OwotCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JZW50cnktPnN0YXRlX2RhdGEgPSAqaXQ7Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCi0JCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwotIG91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW50IHRyYWNpbmdfcG93ZXJfcmVnaXN0ZXIodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfcG93ZXJfc3RhcnQocHJvYmVfcG93ZXJfc3RhcnQpOwotCWlmIChyZXQpIHsKLQkJcHJfaW5mbygicG93ZXIgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCi0JCQkiIHByb2JlIHRvIHRyYWNlX3Bvd2VyX3N0YXJ0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfcG93ZXJfZW5kKHByb2JlX3Bvd2VyX2VuZCk7Ci0JaWYgKHJldCkgewotCQlwcl9pbmZvKCJwb3dlciB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKLQkJCSIgcHJvYmUgdG8gdHJhY2VfcG93ZXJfZW5kXG4iKTsKLQkJZ290byBmYWlsX3N0YXJ0OwotCX0KLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9wb3dlcl9tYXJrKHByb2JlX3Bvd2VyX21hcmspOwotCWlmIChyZXQpIHsKLQkJcHJfaW5mbygicG93ZXIgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCi0JCQkiIHByb2JlIHRvIHRyYWNlX3Bvd2VyX21hcmtcbiIpOwotCQlnb3RvIGZhaWxfZW5kOwotCX0KLQlyZXR1cm4gcmV0OwotZmFpbF9lbmQ6Ci0JdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9lbmQocHJvYmVfcG93ZXJfZW5kKTsKLWZhaWxfc3RhcnQ6Ci0JdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9zdGFydChwcm9iZV9wb3dlcl9zdGFydCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRfcG93ZXJfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl0cmFjZV9wb3dlcl9lbmFibGVkID0gMTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcF9wb3dlcl90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXRyYWNlX3Bvd2VyX2VuYWJsZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBwb3dlcl90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXRyYWNlX3Bvd2VyX2VuYWJsZWQgPSAwOwotCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfc3RhcnQocHJvYmVfcG93ZXJfc3RhcnQpOwotCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfZW5kKHByb2JlX3Bvd2VyX2VuZCk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9tYXJrKHByb2JlX3Bvd2VyX21hcmspOwotfQotCi0KLXN0YXRpYyBpbnQgcG93ZXJfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXBvd2VyX3RyYWNlID0gdHI7Ci0KLQl0cmFjZV9wb3dlcl9lbmFibGVkID0gMTsKLQl0cmFjaW5nX3Bvd2VyX3JlZ2lzdGVyKCk7Ci0KLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHBvd2VyX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICpmaWVsZCA7Ci0Jc3RydWN0IHBvd2VyX3RyYWNlICppdDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3QgdGltZXNwZWMgc3RhbXA7Ci0Jc3RydWN0IHRpbWVzcGVjIGR1cmF0aW9uOwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQlpdCA9ICZmaWVsZC0+c3RhdGVfZGF0YTsKLQlzdGFtcCA9IGt0aW1lX3RvX3RpbWVzcGVjKGl0LT5zdGFtcCk7Ci0JZHVyYXRpb24gPSBrdGltZV90b190aW1lc3BlYyhrdGltZV9zdWIoaXQtPmVuZCwgaXQtPnN0YW1wKSk7Ci0KLQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfUE9XRVIpIHsKLQkJaWYgKGl0LT50eXBlID09IFBPV0VSX0NTVEFURSkKLQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlslNWxkLiUwOWxkXSBDU1RBVEU6IEdvaW5nIHRvIEMlaSBvbiBjcHUgJWkgZm9yICVsZC4lMDlsZFxuIiwKLQkJCQkJICBzdGFtcC50dl9zZWMsCi0JCQkJCSAgc3RhbXAudHZfbnNlYywKLQkJCQkJICBpdC0+c3RhdGUsIGl0ZXItPmNwdSwKLQkJCQkJICBkdXJhdGlvbi50dl9zZWMsCi0JCQkJCSAgZHVyYXRpb24udHZfbnNlYyk7Ci0JCWlmIChpdC0+dHlwZSA9PSBQT1dFUl9QU1RBVEUpCi0JCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJTVsZC4lMDlsZF0gUFNUQVRFOiBHb2luZyB0byBQJWkgb24gY3B1ICVpXG4iLAotCQkJCQkgIHN0YW1wLnR2X3NlYywKLQkJCQkJICBzdGFtcC50dl9uc2VjLAotCQkJCQkgIGl0LT5zdGF0ZSwgaXRlci0+Y3B1KTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0JfQotCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgcG93ZXJfcHJpbnRfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqcykKLXsKLQlzZXFfcHV0cyhzLCAiIyAgIFRJTUVTVEFNUCAgICAgIFNUQVRFICBFVkVOVFxuIik7Ci0Jc2VxX3B1dHMocywgIiMgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8XG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCB0cmFjZXIgcG93ZXJfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQotewotCS5uYW1lCQk9ICJwb3dlciIsCi0JLmluaXQJCT0gcG93ZXJfdHJhY2VfaW5pdCwKLQkuc3RhcnQJCT0gc3RhcnRfcG93ZXJfdHJhY2UsCi0JLnN0b3AJCT0gc3RvcF9wb3dlcl90cmFjZSwKLQkucmVzZXQJCT0gcG93ZXJfdHJhY2VfcmVzZXQsCi0JLnByaW50X2xpbmUJPSBwb3dlcl9wcmludF9saW5lLAotCS5wcmludF9oZWFkZXIJPSBwb3dlcl9wcmludF9oZWFkZXIsCi19OwotCi1zdGF0aWMgaW50IGluaXRfcG93ZXJfdHJhY2Uodm9pZCkKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZwb3dlcl90cmFjZXIpOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfcG93ZXJfdHJhY2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCmluZGV4IDY4NzY5OWQuLjI1NDdkODggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA4NzEyY2UzLi45ZmJjZTZjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJmX2NvdW50ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgpAQCAtMzg0LDEwICszODQsMTMgQEAKIAogc3RhdGljIHZvaWQgcHJvZl9zeXNjYWxsX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGlkKQogewotCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICpyZWM7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c19kYXRhOworCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICpyZWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICpyYXdfZGF0YTsKIAlpbnQgc3lzY2FsbF9ucjsKIAlpbnQgc2l6ZTsKKwlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzKSkKQEAgLTQwMiwyMCArNDA1LDM4IEBACiAJc2l6ZSA9IEFMSUdOKHNpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOwogCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAKLQlkbyB7Ci0JCWNoYXIgcmF3X2RhdGFbc2l6ZV07CisJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCisJCSAgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCisJCXJldHVybjsKIAotCQkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwotCQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOworCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCQlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKikgcmF3X2RhdGE7Ci0JCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKLQkJcmVjLT5lbnQudHlwZSA9IHN5c19kYXRhLT5lbnRlcl9pZDsKLQkJcmVjLT5uciA9IHN5c2NhbGxfbnI7Ci0JCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmcmVjLT5hcmdzKTsKLQkJcGVyZl90cGNvdW50ZXJfZXZlbnQoc3lzX2RhdGEtPmVudGVyX2lkLCAwLCAxLCByZWMsIHNpemUpOwotCX0gd2hpbGUoMCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGluX25taSgpKQorCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCWVsc2UKKwkJcmF3X2RhdGEgPSByY3VfZGVyZWZlcmVuY2UodHJhY2VfcHJvZmlsZV9idWYpOworCisJaWYgKCFyYXdfZGF0YSkKKwkJZ290byBlbmQ7CisKKwlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHJhd19kYXRhLCBjcHUpOworCisJLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KKwkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOworCisJcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICopIHJhd19kYXRhOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKKwlyZWMtPmVudC50eXBlID0gc3lzX2RhdGEtPmVudGVyX2lkOworCXJlYy0+bnIgPSBzeXNjYWxsX25yOworCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyAqKSZyZWMtPmFyZ3MpOworCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmVudGVyX2lkLCAwLCAxLCByZWMsIHNpemUpOworCitlbmQ6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBpbnQgcmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKQpAQCAtNDYwLDggKzQ4MSwxMiBAQAogc3RhdGljIHZvaWQgcHJvZl9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgcmV0KQogewogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKLQlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHJlYzsKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICpyZWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3lzY2FsbF9ucjsKKwljaGFyICpyYXdfZGF0YTsKKwlpbnQgc2l6ZTsKKwlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMpKQpAQCAtNDcxLDEyICs0OTYsNDYgQEAKIAlpZiAoIXN5c19kYXRhKQogCQlyZXR1cm47CiAKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZyZWMuZW50LCAwLCAwKTsKLQlyZWMuZW50LnR5cGUgPSBzeXNfZGF0YS0+ZXhpdF9pZDsKLQlyZWMubnIgPSBzeXNjYWxsX25yOwotCXJlYy5yZXQgPSBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncyk7CisJLyogV2UgY2FuIHByb2JhYmx5IGRvIHRoYXQgYXQgYnVpbGQgdGltZSAqLworCXNpemUgPSBBTElHTihzaXplb2YoKnJlYykgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOworCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAKLQlwZXJmX3RwY291bnRlcl9ldmVudChzeXNfZGF0YS0+ZXhpdF9pZCwgMCwgMSwgJnJlYywgc2l6ZW9mKHJlYykpOworCS8qCisJICogSW1wb3NzaWJsZSwgYnV0IGJlIHBhcmFub2lkIHdpdGggdGhlIGZ1dHVyZQorCSAqIEhvdyB0byBwdXQgdGhpcyBjaGVjayBvdXRzaWRlIHJ1bnRpbWU/CisJICovCisJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCisJCSJleGl0IGV2ZW50IGhhcyBncm93biBhYm92ZSBwcm9maWxlIGJ1ZmZlciBzaXplIikpCisJCXJldHVybjsKKworCS8qIFByb3RlY3QgdGhlIHBlciBjcHUgYnVmZmVyLCBiZWdpbiB0aGUgcmN1IHJlYWQgc2lkZSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoaW5fbm1pKCkpCisJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CisJZWxzZQorCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zik7CisKKwlpZiAoIXJhd19kYXRhKQorCQlnb3RvIGVuZDsKKworCXJhd19kYXRhID0gcGVyX2NwdV9wdHIocmF3X2RhdGEsIGNwdSk7CisKKwkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLworCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisKKwlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqKXJhd19kYXRhOworCisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmcmVjLT5lbnQsIDAsIDApOworCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZXhpdF9pZDsKKwlyZWMtPm5yID0gc3lzY2FsbF9ucjsKKwlyZWMtPnJldCA9IHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzKTsKKworCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmV4aXRfaWQsIDAsIDEsIHJlYywgc2l6ZSk7CisKK2VuZDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIGludCByZWdfcHJvZl9zeXNjYWxsX2V4aXQoY2hhciAqbmFtZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IDk0ODlhMGEuLmNjODliZTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtNDgsNyArNDgsNyBAQAogCiAvKgogICogTm90ZSBhYm91dCBSQ1UgOgotICogSXQgaXMgdXNlZCB0byB0byBkZWxheSB0aGUgZnJlZSBvZiBtdWx0aXBsZSBwcm9iZXMgYXJyYXkgdW50aWwgYSBxdWllc2NlbnQKKyAqIEl0IGlzIHVzZWQgdG8gZGVsYXkgdGhlIGZyZWUgb2YgbXVsdGlwbGUgcHJvYmVzIGFycmF5IHVudGlsIGEgcXVpZXNjZW50CiAgKiBzdGF0ZSBpcyByZWFjaGVkLgogICogVHJhY2Vwb2ludCBlbnRyaWVzIG1vZGlmaWNhdGlvbnMgYXJlIHByb3RlY3RlZCBieSB0aGUgdHJhY2Vwb2ludHNfbXV0ZXguCiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmttZW1jaGVjayBiL2xpYi9LY29uZmlnLmttZW1jaGVjawppbmRleCA2MDNjODFiLi44NDZlMDM5IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5rbWVtY2hlY2sKKysrIGIvbGliL0tjb25maWcua21lbWNoZWNrCkBAIC0xLDYgKzEsOCBAQAogY29uZmlnIEhBVkVfQVJDSF9LTUVNQ0hFQ0sKIAlib29sCiAKK2lmIEhBVkVfQVJDSF9LTUVNQ0hFQ0sKKwogbWVudWNvbmZpZyBLTUVNQ0hFQ0sKIAlib29sICJrbWVtY2hlY2s6IHRyYXAgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC04OSwzICs5MSw0IEBACiAJICBhY2Nlc3NlcyB3aGVyZSBub3QgYWxsIHRoZSBiaXRzIGFyZSBpbml0aWFsaXplZCBhdCB0aGUgc2FtZSB0aW1lLgogCSAgVGhpcyBtYXkgYWxzbyBoaWRlIHNvbWUgcmVhbCBidWdzLgogCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2ZsZXhfYXJyYXkuYyBiL2xpYi9mbGV4X2FycmF5LmMKaW5kZXggN2JhZWQyZi4uNjZlZWYyZSAxMDA2NDQKLS0tIGEvbGliL2ZsZXhfYXJyYXkuYworKysgYi9saWIvZmxleF9hcnJheS5jCkBAIC0yOCwyMyArMjgsNiBAQAogCWNoYXIgZWxlbWVudHNbRkxFWF9BUlJBWV9QQVJUX1NJWkVdOwogfTsKIAotc3RhdGljIGlubGluZSBpbnQgX19lbGVtZW50c19wZXJfcGFydChpbnQgZWxlbWVudF9zaXplKQotewotCXJldHVybiBGTEVYX0FSUkFZX1BBUlRfU0laRSAvIGVsZW1lbnRfc2l6ZTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYnl0ZXNfbGVmdF9pbl9iYXNlKHZvaWQpCi17Ci0JaW50IGVsZW1lbnRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGZsZXhfYXJyYXksIHBhcnRzKTsKLQlpbnQgYnl0ZXNfbGVmdCA9IEZMRVhfQVJSQVlfQkFTRV9TSVpFIC0gZWxlbWVudF9vZmZzZXQ7Ci0JcmV0dXJuIGJ5dGVzX2xlZnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5yX2Jhc2VfcGFydF9wdHJzKHZvaWQpCi17Ci0JcmV0dXJuIGJ5dGVzX2xlZnRfaW5fYmFzZSgpIC8gc2l6ZW9mKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKik7Ci19Ci0KIC8qCiAgKiBJZiBhIHVzZXIgcmVxdWVzdHMgYW4gYWxsb2NhdGlvbiB3aGljaCBpcyBzbWFsbAogICogZW5vdWdoLCB3ZSBtYXkgc2ltcGx5IHVzZSB0aGUgc3BhY2UgaW4gdGhlCkBAIC01NCw3ICszNyw3IEBACiBzdGF0aWMgaW5saW5lIGludCBlbGVtZW50c19maXRfaW5fYmFzZShzdHJ1Y3QgZmxleF9hcnJheSAqZmEpCiB7CiAJaW50IGRhdGFfc2l6ZSA9IGZhLT5lbGVtZW50X3NpemUgKiBmYS0+dG90YWxfbnJfZWxlbWVudHM7Ci0JaWYgKGRhdGFfc2l6ZSA8PSBieXRlc19sZWZ0X2luX2Jhc2UoKSkKKwlpZiAoZGF0YV9zaXplIDw9IEZMRVhfQVJSQVlfQkFTRV9CWVRFU19MRUZUKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYzLDYgKzQ2LDcgQEAKICAqIGZsZXhfYXJyYXlfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyBmbGV4aWJsZSBhcnJheQogICogQGVsZW1lbnRfc2l6ZToJdGhlIHNpemUgb2YgaW5kaXZpZHVhbCBlbGVtZW50cyBpbiB0aGUgYXJyYXkKICAqIEB0b3RhbDoJCXRvdGFsIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHRoaXMgc2hvdWxkIGhvbGQKKyAqIEBmbGFnczoJCXBhZ2UgYWxsb2NhdGlvbiBmbGFncyB0byB1c2UgZm9yIGJhc2UgYXJyYXkKICAqCiAgKiBOb3RlOiBhbGwgbG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCiAgKgpAQCAtMTAzLDcgKzg3LDggQEAKIAkJCQkJZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IGZsZXhfYXJyYXkgKnJldDsKLQlpbnQgbWF4X3NpemUgPSBucl9iYXNlX3BhcnRfcHRycygpICogX19lbGVtZW50c19wZXJfcGFydChlbGVtZW50X3NpemUpOworCWludCBtYXhfc2l6ZSA9IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTICoKKwkJCQlGTEVYX0FSUkFZX0VMRU1FTlRTX1BFUl9QQVJUKGVsZW1lbnRfc2l6ZSk7CiAKIAkvKiBtYXhfc2l6ZSB3aWxsIGVuZCB1cCAwIGlmIGVsZW1lbnRfc2l6ZSA+IFBBR0VfU0laRSAqLwogCWlmICh0b3RhbCA+IG1heF9zaXplKQpAQCAtMTEzLDE3ICs5OCwyMSBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXQtPmVsZW1lbnRfc2l6ZSA9IGVsZW1lbnRfc2l6ZTsKIAlyZXQtPnRvdGFsX25yX2VsZW1lbnRzID0gdG90YWw7CisJaWYgKGVsZW1lbnRzX2ZpdF9pbl9iYXNlKHJldCkgJiYgIShmbGFncyAmIF9fR0ZQX1pFUk8pKQorCQltZW1zZXQocmV0LT5wYXJ0c1swXSwgRkxFWF9BUlJBWV9GUkVFLAorCQkJCQkJRkxFWF9BUlJBWV9CQVNFX0JZVEVTX0xFRlQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZmFfZWxlbWVudF90b19wYXJ0X25yKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwKIAkJCQkJdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpCiB7Ci0JcmV0dXJuIGVsZW1lbnRfbnIgLyBfX2VsZW1lbnRzX3Blcl9wYXJ0KGZhLT5lbGVtZW50X3NpemUpOworCXJldHVybiBlbGVtZW50X25yIC8gRkxFWF9BUlJBWV9FTEVNRU5UU19QRVJfUEFSVChmYS0+ZWxlbWVudF9zaXplKTsKIH0KIAogLyoqCiAgKiBmbGV4X2FycmF5X2ZyZWVfcGFydHMgLSBqdXN0IGZyZWUgdGhlIHNlY29uZC1sZXZlbCBwYWdlcworICogQGZhOgkJdGhlIGZsZXggYXJyYXkgZnJvbSB3aGljaCB0byBmcmVlIHBhcnRzCiAgKgogICogVGhpcyBpcyB0byBiZSB1c2VkIGluIGNhc2VzIHdoZXJlIHRoZSBiYXNlICdzdHJ1Y3QgZmxleF9hcnJheScKICAqIGhhcyBiZWVuIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgbm90IGJlIGZyZWUuCkBAIC0xMzEsMTEgKzEyMCwxMCBAQAogdm9pZCBmbGV4X2FycmF5X2ZyZWVfcGFydHMoc3RydWN0IGZsZXhfYXJyYXkgKmZhKQogewogCWludCBwYXJ0X25yOwotCWludCBtYXhfcGFydCA9IG5yX2Jhc2VfcGFydF9wdHJzKCk7CiAKIAlpZiAoZWxlbWVudHNfZml0X2luX2Jhc2UoZmEpKQogCQlyZXR1cm47Ci0JZm9yIChwYXJ0X25yID0gMDsgcGFydF9uciA8IG1heF9wYXJ0OyBwYXJ0X25yKyspCisJZm9yIChwYXJ0X25yID0gMDsgcGFydF9uciA8IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTOyBwYXJ0X25yKyspCiAJCWtmcmVlKGZhLT5wYXJ0c1twYXJ0X25yXSk7CiB9CiAKQEAgLTE1MCw3ICsxMzgsOCBAQAogewogCXVuc2lnbmVkIGludCBwYXJ0X29mZnNldDsKIAotCXBhcnRfb2Zmc2V0ID0gZWxlbWVudF9uciAlIF9fZWxlbWVudHNfcGVyX3BhcnQoZmEtPmVsZW1lbnRfc2l6ZSk7CisJcGFydF9vZmZzZXQgPSBlbGVtZW50X25yICUKKwkJCQlGTEVYX0FSUkFZX0VMRU1FTlRTX1BFUl9QQVJUKGZhLT5lbGVtZW50X3NpemUpOwogCXJldHVybiBwYXJ0X29mZnNldCAqIGZhLT5lbGVtZW50X3NpemU7CiB9CiAKQEAgLTE1OSwxNSArMTQ4LDEyIEBACiB7CiAJc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqcGFydCA9IGZhLT5wYXJ0c1twYXJ0X25yXTsKIAlpZiAoIXBhcnQpIHsKLQkJLyoKLQkJICogVGhpcyBsZWF2ZXMgdGhlIHBhcnQgcGFnZXMgdW5pbml0aWFsaXplZAotCQkgKiBhbmQgd2l0aCBwb3RlbnRpYWxseSByYW5kb20gZGF0YSwganVzdAotCQkgKiBhcyBpZiB0aGUgdXNlciBoYWQga21hbGxvYygpJ2QgdGhlIHdob2xlLgotCQkgKiBfX0dGUF9aRVJPIGNhbiBiZSB1c2VkIHRvIHplcm8gaXQuCi0JCSAqLwotCQlwYXJ0ID0ga21hbGxvYyhGTEVYX0FSUkFZX1BBUlRfU0laRSwgZmxhZ3MpOworCQlwYXJ0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZsZXhfYXJyYXlfcGFydCksIGZsYWdzKTsKIAkJaWYgKCFwYXJ0KQogCQkJcmV0dXJuIE5VTEw7CisJCWlmICghKGZsYWdzICYgX19HRlBfWkVSTykpCisJCQltZW1zZXQocGFydCwgRkxFWF9BUlJBWV9GUkVFLAorCQkJCXNpemVvZihzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0KSk7CiAJCWZhLT5wYXJ0c1twYXJ0X25yXSA9IHBhcnQ7CiAJfQogCXJldHVybiBwYXJ0OwpAQCAtMTc1LDkgKzE2MSwxMiBAQAogCiAvKioKICAqIGZsZXhfYXJyYXlfcHV0IC0gY29weSBkYXRhIGludG8gdGhlIGFycmF5IGF0IEBlbGVtZW50X25yCi0gKiBAc3JjOglhZGRyZXNzIG9mIGRhdGEgdG8gY29weSBpbnRvIHRoZSBhcnJheQorICogQGZhOgkJdGhlIGZsZXggYXJyYXkgdG8gY29weSBkYXRhIGludG8KICAqIEBlbGVtZW50X25yOglpbmRleCBvZiB0aGUgcG9zaXRpb24gaW4gd2hpY2ggdG8gaW5zZXJ0CiAgKiAJCXRoZSBuZXcgZWxlbWVudC4KKyAqIEBzcmM6CWFkZHJlc3Mgb2YgZGF0YSB0byBjb3B5IGludG8gdGhlIGFycmF5CisgKiBAZmxhZ3M6CXBhZ2UgYWxsb2NhdGlvbiBmbGFncyB0byB1c2UgZm9yIGFycmF5IGV4cGFuc2lvbgorICoKICAqCiAgKiBOb3RlIHRoYXQgdGhpcyAqY29waWVzKiB0aGUgY29udGVudHMgb2YgQHNyYyBpbnRvCiAgKiB0aGUgYXJyYXkuICBJZiB5b3UgYXJlIHRyeWluZyB0byBzdG9yZSBhbiBhcnJheSBvZgpAQCAtMjA3LDkgKzE5NiwzOCBAQAogfQogCiAvKioKKyAqIGZsZXhfYXJyYXlfY2xlYXIgLSBjbGVhciBlbGVtZW50IGluIGFycmF5IGF0IEBlbGVtZW50X25yCisgKiBAZmE6CQl0aGUgZmxleCBhcnJheSBvZiB0aGUgZWxlbWVudC4KKyAqIEBlbGVtZW50X25yOglpbmRleCBvZiB0aGUgcG9zaXRpb24gdG8gY2xlYXIuCisgKgorICogTG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK2ludCBmbGV4X2FycmF5X2NsZWFyKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpCit7CisJaW50IHBhcnRfbnIgPSBmYV9lbGVtZW50X3RvX3BhcnRfbnIoZmEsIGVsZW1lbnRfbnIpOworCXN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKnBhcnQ7CisJdm9pZCAqZHN0OworCisJaWYgKGVsZW1lbnRfbnIgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCQlyZXR1cm4gLUVOT1NQQzsKKwlpZiAoZWxlbWVudHNfZml0X2luX2Jhc2UoZmEpKQorCQlwYXJ0ID0gKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKikmZmEtPnBhcnRzWzBdOworCWVsc2UgeworCQlwYXJ0ID0gZmEtPnBhcnRzW3BhcnRfbnJdOworCQlpZiAoIXBhcnQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHN0ID0gJnBhcnQtPmVsZW1lbnRzW2luZGV4X2luc2lkZV9wYXJ0KGZhLCBlbGVtZW50X25yKV07CisJbWVtc2V0KGRzdCwgRkxFWF9BUlJBWV9GUkVFLCBmYS0+ZWxlbWVudF9zaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBmbGV4X2FycmF5X3ByZWFsbG9jIC0gZ3VhcmFudGVlIHRoYXQgYXJyYXkgc3BhY2UgZXhpc3RzCisgKiBAZmE6CQl0aGUgZmxleCBhcnJheSBmb3Igd2hpY2ggdG8gcHJlYWxsb2NhdGUgcGFydHMKICAqIEBzdGFydDoJaW5kZXggb2YgZmlyc3QgYXJyYXkgZWxlbWVudCBmb3Igd2hpY2ggc3BhY2UgaXMgYWxsb2NhdGVkCiAgKiBAZW5kOglpbmRleCBvZiBsYXN0IChpbmNsdXNpdmUpIGVsZW1lbnQgZm9yIHdoaWNoIHNwYWNlIGlzIGFsbG9jYXRlZAorICogQGZsYWdzOglwYWdlIGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoYXQgbm8gZnV0dXJlIGNhbGxzIHRvIGZsZXhfYXJyYXlfcHV0KCkKICAqIHdpbGwgYWxsb2NhdGUgbWVtb3J5LiAgSXQgY2FuIGJlIHVzZWQgaWYgeW91IGFyZSBleHBlY3RpbmcgdG8KQEAgLTI0Miw2ICsyNjAsNyBAQAogCiAvKioKICAqIGZsZXhfYXJyYXlfZ2V0IC0gcHVsbCBkYXRhIGJhY2sgb3V0IG9mIHRoZSBhcnJheQorICogQGZhOgkJdGhlIGZsZXggYXJyYXkgZnJvbSB3aGljaCB0byBleHRyYWN0IGRhdGEKICAqIEBlbGVtZW50X25yOglpbmRleCBvZiB0aGUgZWxlbWVudCB0byBmZXRjaCBmcm9tIHRoZSBhcnJheQogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGF0IGluZGV4IEBlbGVtZW50X25yLiAgTm90ZQpAQCAtMjY2LDMgKzI4NSw0MyBAQAogCX0KIAlyZXR1cm4gJnBhcnQtPmVsZW1lbnRzW2luZGV4X2luc2lkZV9wYXJ0KGZhLCBlbGVtZW50X25yKV07CiB9CisKK3N0YXRpYyBpbnQgcGFydF9pc19mcmVlKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQgKnBhcnQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBmbGV4X2FycmF5X3BhcnQpOyBpKyspCisJCWlmIChwYXJ0LT5lbGVtZW50c1tpXSAhPSBGTEVYX0FSUkFZX0ZSRUUpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBmbGV4X2FycmF5X3NocmluayAtIGZyZWUgdW51c2VkIHNlY29uZC1sZXZlbCBwYWdlcworICogQGZhOgkJdGhlIGZsZXggYXJyYXkgdG8gc2hyaW5rCisgKgorICogRnJlZXMgYWxsIHNlY29uZC1sZXZlbCBwYWdlcyB0aGF0IGNvbnNpc3Qgc29sZWx5IG9mIHVudXNlZAorICogZWxlbWVudHMuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgZnJlZWQuCisgKgorICogTG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK2ludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqZmEpCit7CisJc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqcGFydDsKKwlpbnQgcGFydF9ucjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChlbGVtZW50c19maXRfaW5fYmFzZShmYSkpCisJCXJldHVybiByZXQ7CisJZm9yIChwYXJ0X25yID0gMDsgcGFydF9uciA8IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTOyBwYXJ0X25yKyspIHsKKwkJcGFydCA9IGZhLT5wYXJ0c1twYXJ0X25yXTsKKwkJaWYgKCFwYXJ0KQorCQkJY29udGludWU7CisJCWlmIChwYXJ0X2lzX2ZyZWUocGFydCkpIHsKKwkJCWZhLT5wYXJ0c1twYXJ0X25yXSA9IE5VTEw7CisJCQlrZnJlZShwYXJ0KTsKKwkJCXJldCsrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGQzMjBjMTguLjczYTE0YjggMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0xMDkyLDEzICsxMDkyLDggQEAKIAogCS8qIFJlamVjdCBvdXQtb2YtcmFuZ2UgdmFsdWVzIGVhcmx5LiAgTGFyZ2UgcG9zaXRpdmUgc2l6ZXMgYXJlCiAJICAgdXNlZCBmb3IgdW5rbm93biBidWZmZXIgc2l6ZXMuICovCi0JaWYgKHVubGlrZWx5KChpbnQpIHNpemUgPCAwKSkgewotCQkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUuLiAqLwotCQlzdGF0aWMgY2hhciB3YXJuID0gMTsKLQkJV0FSTl9PTih3YXJuKTsKLQkJd2FybiA9IDA7CisJaWYgKFdBUk5fT05fT05DRSgoaW50KSBzaXplIDwgMCkpCiAJCXJldHVybiAwOwotCX0KIAogCXN0ciA9IGJ1ZjsKIAllbmQgPSBidWYgKyBzaXplOwpAQCAtMTU0NCwxMyArMTUzOSw4IEBACiAKIAlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYyA9IHswfTsKIAotCWlmICh1bmxpa2VseSgoaW50KSBzaXplIDwgMCkpIHsKLQkJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lLi4gKi8KLQkJc3RhdGljIGNoYXIgd2FybiA9IDE7Ci0JCVdBUk5fT04od2Fybik7Ci0JCXdhcm4gPSAwOworCWlmIChXQVJOX09OX09OQ0UoKGludCkgc2l6ZSA8IDApKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlzdHIgPSBidWY7CiAJZW5kID0gYnVmICsgc2l6ZTsKZGlmZiAtLWdpdCBhL2xpYi96bGliX2RlZmxhdGUvZGVmbGF0ZS5jIGIvbGliL3psaWJfZGVmbGF0ZS9kZWZsYXRlLmMKaW5kZXggYzNlNGEyYmEuLjQ2YTMxZTUgMTAwNjQ0Ci0tLSBhL2xpYi96bGliX2RlZmxhdGUvZGVmbGF0ZS5jCisrKyBiL2xpYi96bGliX2RlZmxhdGUvZGVmbGF0ZS5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBVcGRhdGUgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGdpdmVuIGlucHV0IGJ5dGUKLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCisgKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gVVBEQVRFX0hBU0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQogICogICAgaW5wdXQgY2hhcmFjdGVycywgc28gdGhhdCBhIHJ1bm5pbmcgaGFzaCBrZXkgY2FuIGJlIGNvbXB1dGVkIGZyb20gdGhlCiAgKiAgICBwcmV2aW91cyBrZXkgaW5zdGVhZCBvZiBjb21wbGV0ZSByZWNhbGN1bGF0aW9uIGVhY2ggdGltZS4KICAqLwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgKiBJbnNlcnQgc3RyaW5nIHN0ciBpbiB0aGUgZGljdGlvbmFyeSBhbmQgc2V0IG1hdGNoX2hlYWQgdG8gdGhlIHByZXZpb3VzIGhlYWQKICAqIG9mIHRoZSBoYXNoIGNoYWluICh0aGUgbW9zdCByZWNlbnQgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGtleSkuIFJldHVybgogICogdGhlIHByZXZpb3VzIGxlbmd0aCBvZiB0aGUgaGFzaCBjaGFpbi4KLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMgYW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZAogICogICAgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgogICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAzYWE1MTlmLi43MWViMGI0IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTIxNCw2ICsyMTQsMTggQEAKIGNvbmZpZyBNTVVfTk9USUZJRVIKIAlib29sCiAKK2NvbmZpZyBLU00KKwlib29sICJFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmciCisJZGVwZW5kcyBvbiBNTVUKKwloZWxwCisJICBFbmFibGUgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmc6IEtTTSBwZXJpb2RpY2FsbHkgc2NhbnMgdGhvc2UgYXJlYXMKKwkgIG9mIGFuIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZSB0aGF0IGFuIGFwcCBoYXMgYWR2aXNlZCBtYXkgYmUKKwkgIG1lcmdlYWJsZS4gIFdoZW4gaXQgZmluZHMgcGFnZXMgb2YgaWRlbnRpY2FsIGNvbnRlbnQsIGl0IHJlcGxhY2VzCisJICB0aGUgbWFueSBpbnN0YW5jZXMgYnkgYSBzaW5nbGUgcmVzaWRlbnQgcGFnZSB3aXRoIHRoYXQgY29udGVudCwgc28KKwkgIHNhdmluZyBtZW1vcnkgdW50aWwgb25lIG9yIGFub3RoZXIgYXBwIG5lZWRzIHRvIG1vZGlmeSB0aGUgY29udGVudC4KKwkgIFJlY29tbWVuZGVkIGZvciB1c2Ugd2l0aCBLVk0sIG9yIHdpdGggb3RoZXIgZHVwbGljYXRpdmUgYXBwbGljYXRpb25zLgorCSAgU2VlIERvY3VtZW50YXRpb24vdm0va3NtLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwogY29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUgogICAgICAgICBpbnQgIkxvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb24iCiAgICAgICAgIGRlZmF1bHQgNDA5NgpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWcKaW5kZXggYWE5OWZkMS4uYWY3Y2ZiNCAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZy5kZWJ1ZworKysgYi9tbS9LY29uZmlnLmRlYnVnCkBAIC02LDcgKzYsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFVubWFwIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyBhZnRlciBmcmVlX3BhZ2VzKCkuCiAJICBUaGlzIHJlc3VsdHMgaW4gYSBsYXJnZSBzbG93ZG93biwgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcwotCSAgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLgorCSAgb2YgbWVtb3J5IGNvcnJ1cHRpb24uCiAKIGNvbmZpZyBXQU5UX1BBR0VfREVCVUdfRkxBR1MKIAlib29sCkBAIC0xNywxMSArMTcsMTEgQEAKIAlkZXBlbmRzIG9uICFISUJFUk5BVElPTgogCXNlbGVjdCBERUJVR19QQUdFQUxMT0MKIAlzZWxlY3QgV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCi0JaGVscAorCS0tLWhlbHAtLS0KIAkgICBGaWxsIHRoZSBwYWdlcyB3aXRoIHBvaXNvbiBwYXR0ZXJucyBhZnRlciBmcmVlX3BhZ2VzKCkgYW5kIHZlcmlmeQogCSAgIHRoZSBwYXR0ZXJucyBiZWZvcmUgYWxsb2NfcGFnZXMoKS4gVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sCi0JICAgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCisJICAgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbi4KIAotCSAgIFRoaXMgb3B0aW9uIGNhbm5vdCBlbmFsYmUgd2l0aCBoaWJlcm5hdGlvbi4gT3RoZXJ3aXNlLCBpdCB3aWxsIGdldAotCSAgIHdyb25nIG1lc3NhZ2VzIGZvciBtZW1vcnkgY29ycnVwdGlvbiBiZWNhdXNlIHRoZSBmcmVlIHBhZ2VzIGFyZSBub3QKLQkgICBzYXZlZCB0byB0aGUgc3VzcGVuZCBpbWFnZS4KKwkgICBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgZW5hYmxlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGhpYmVybmF0aW9uIGFzCisJICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHdhcm5pbmdzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFmdGVyCisJICAgYSByZXN1bWUgYmVjYXVzZSBmcmVlIHBhZ2VzIGFyZSBub3Qgc2F2ZWQgdG8gdGhlIHN1c3BlbmQgaW1hZ2UuCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGVhNGIxOGIuLjg4MTkzZDcgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0xMSwxMCArMTEsMTAgQEAKIAkJCSAgIG1hY2Nlc3MubyBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2subyBcCiAJCQkgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaG1lbS5vIFwKIAkJCSAgIHByaW9fdHJlZS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFwKLQkJCSAgIHBhZ2VfaXNvbGF0aW9uLm8gbW1faW5pdC5vICQobW11LXkpCisJCQkgICBwYWdlX2lzb2xhdGlvbi5vIG1tX2luaXQubyBtbXVfY29udGV4dC5vIFwKKwkJCSAgIHBhZ2V3YWxrLm8gJChtbXUteSkKIG9iai15ICs9IGluaXQtbW0ubwogCi1vYmotJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpICs9IHBhZ2V3YWxrLm8KIG9iai0kKENPTkZJR19CT1VOQ0UpCSs9IGJvdW5jZS5vCiBvYmotJChDT05GSUdfU1dBUCkJKz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vIHRocmFzaC5vCiBvYmotJChDT05GSUdfSEFTX0RNQSkJKz0gZG1hcG9vbC5vCkBAIC0yNSw2ICsyNSw3IEBACiBvYmotJChDT05GSUdfVE1QRlNfUE9TSVhfQUNMKSArPSBzaG1lbV9hY2wubwogb2JqLSQoQ09ORklHX1NMT0IpICs9IHNsb2Iubwogb2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm8KK29iai0kKENPTkZJR19LU00pICs9IGtzbS5vCiBvYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICs9IGRlYnVnLXBhZ2VhbGxvYy5vCiBvYmotJChDT05GSUdfU0xBQikgKz0gc2xhYi5vCiBvYmotJChDT05GSUdfU0xVQikgKz0gc2x1Yi5vCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggZGQ1MWM2OGUuLmJjYzczNzIgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTExOSw2ICsxMTksOCBAQAogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwogCW1hcHBpbmctPm5ycGFnZXMtLTsKIAlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9QQUdFUyk7CisJaWYgKFBhZ2VTd2FwQmFja2VkKHBhZ2UpKQorCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0hNRU0pOwogCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAKIAkvKgpAQCAtNDMxLDYgKzQzMyw4IEBACiAJCWlmIChsaWtlbHkoIWVycm9yKSkgewogCQkJbWFwcGluZy0+bnJwYWdlcysrOwogCQkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOworCQkJaWYgKFBhZ2VTd2FwQmFja2VkKHBhZ2UpKQorCQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9TSE1FTSk7CiAJCQlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJCX0gZWxzZSB7CiAJCQlwYWdlLT5tYXBwaW5nID0gTlVMTDsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBiMTZkNjM2Li44MTVkYmQ0IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC00NTYsMjQgKzQ1Niw2IEBACiAJaC0+ZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXSsrOwogfQogCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmRlcXVldWVfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpCi17Ci0JaW50IG5pZDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7Ci0KLQlmb3IgKG5pZCA9IDA7IG5pZCA8IE1BWF9OVU1OT0RFUzsgKytuaWQpIHsKLQkJaWYgKCFsaXN0X2VtcHR5KCZoLT5odWdlcGFnZV9mcmVlbGlzdHNbbmlkXSkpIHsKLQkJCXBhZ2UgPSBsaXN0X2VudHJ5KGgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tuaWRdLm5leHQsCi0JCQkJCSAgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJCWgtPmZyZWVfaHVnZV9wYWdlcy0tOwotCQkJaC0+ZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXS0tOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHBhZ2U7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGVxdWV1ZV9odWdlX3BhZ2Vfdm1hKHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgYXZvaWRfcmVzZXJ2ZSkKQEAgLTY0MSw3ICs2MjMsNyBAQAogCiAvKgogICogVXNlIGEgaGVscGVyIHZhcmlhYmxlIHRvIGZpbmQgdGhlIG5leHQgbm9kZSBhbmQgdGhlbgotICogY29weSBpdCBiYWNrIHRvIGh1Z2V0bGJfbmV4dF9uaWQgYWZ0ZXJ3YXJkczoKKyAqIGNvcHkgaXQgYmFjayB0byBuZXh0X25pZF90b19hbGxvYyBhZnRlcndhcmRzOgogICogb3RoZXJ3aXNlIHRoZXJlJ3MgYSB3aW5kb3cgaW4gd2hpY2ggYSByYWNlciBtaWdodAogICogcGFzcyBpbnZhbGlkIG5pZCBNQVhfTlVNTk9ERVMgdG8gYWxsb2NfcGFnZXNfZXhhY3Rfbm9kZS4KICAqIEJ1dCB3ZSBkb24ndCBuZWVkIHRvIHVzZSBhIHNwaW5fbG9jayBoZXJlOiBpdCByZWFsbHkKQEAgLTY1MCwxMyArNjMyLDEzIEBACiAgKiBpZiB3ZSBqdXN0IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYSBodWdlcGFnZSBzbyB0aGF0CiAgKiB0aGUgbmV4dCBjYWxsZXIgZ2V0cyBodWdlcGFnZXMgb24gdGhlIG5leHQgbm9kZS4KICAqLwotc3RhdGljIGludCBoc3RhdGVfbmV4dF9ub2RlKHN0cnVjdCBoc3RhdGUgKmgpCitzdGF0aWMgaW50IGhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2Moc3RydWN0IGhzdGF0ZSAqaCkKIHsKIAlpbnQgbmV4dF9uaWQ7Ci0JbmV4dF9uaWQgPSBuZXh0X25vZGUoaC0+aHVnZXRsYl9uZXh0X25pZCwgbm9kZV9vbmxpbmVfbWFwKTsKKwluZXh0X25pZCA9IG5leHRfbm9kZShoLT5uZXh0X25pZF90b19hbGxvYywgbm9kZV9vbmxpbmVfbWFwKTsKIAlpZiAobmV4dF9uaWQgPT0gTUFYX05VTU5PREVTKQogCQluZXh0X25pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLQloLT5odWdldGxiX25leHRfbmlkID0gbmV4dF9uaWQ7CisJaC0+bmV4dF9uaWRfdG9fYWxsb2MgPSBuZXh0X25pZDsKIAlyZXR1cm4gbmV4dF9uaWQ7CiB9CiAKQEAgLTY2NywxNCArNjQ5LDE1IEBACiAJaW50IG5leHRfbmlkOwogCWludCByZXQgPSAwOwogCi0Jc3RhcnRfbmlkID0gaC0+aHVnZXRsYl9uZXh0X25pZDsKKwlzdGFydF9uaWQgPSBoLT5uZXh0X25pZF90b19hbGxvYzsKKwluZXh0X25pZCA9IHN0YXJ0X25pZDsKIAogCWRvIHsKLQkJcGFnZSA9IGFsbG9jX2ZyZXNoX2h1Z2VfcGFnZV9ub2RlKGgsIGgtPmh1Z2V0bGJfbmV4dF9uaWQpOworCQlwYWdlID0gYWxsb2NfZnJlc2hfaHVnZV9wYWdlX25vZGUoaCwgbmV4dF9uaWQpOwogCQlpZiAocGFnZSkKIAkJCXJldCA9IDE7Ci0JCW5leHRfbmlkID0gaHN0YXRlX25leHRfbm9kZShoKTsKLQl9IHdoaWxlICghcGFnZSAmJiBoLT5odWdldGxiX25leHRfbmlkICE9IHN0YXJ0X25pZCk7CisJCW5leHRfbmlkID0gaHN0YXRlX25leHRfbm9kZV90b19hbGxvYyhoKTsKKwl9IHdoaWxlICghcGFnZSAmJiBuZXh0X25pZCAhPSBzdGFydF9uaWQpOwogCiAJaWYgKHJldCkKIAkJY291bnRfdm1fZXZlbnQoSFRMQl9CVUREWV9QR0FMTE9DKTsKQEAgLTY4NCw2ICs2NjcsNjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogaGVscGVyIGZvciBmcmVlX3Bvb2xfaHVnZV9wYWdlKCkgLSBmaW5kIG5leHQgbm9kZQorICogZnJvbSB3aGljaCB0byBmcmVlIGEgaHVnZSBwYWdlCisgKi8KK3N0YXRpYyBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgpCit7CisJaW50IG5leHRfbmlkOworCW5leHRfbmlkID0gbmV4dF9ub2RlKGgtPm5leHRfbmlkX3RvX2ZyZWUsIG5vZGVfb25saW5lX21hcCk7CisJaWYgKG5leHRfbmlkID09IE1BWF9OVU1OT0RFUykKKwkJbmV4dF9uaWQgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CisJaC0+bmV4dF9uaWRfdG9fZnJlZSA9IG5leHRfbmlkOworCXJldHVybiBuZXh0X25pZDsKK30KKworLyoKKyAqIEZyZWUgaHVnZSBwYWdlIGZyb20gcG9vbCBmcm9tIG5leHQgbm9kZSB0byBmcmVlLgorICogQXR0ZW1wdCB0byBrZWVwIHBlcnNpc3RlbnQgaHVnZSBwYWdlcyBtb3JlIG9yIGxlc3MKKyAqIGJhbGFuY2VkIG92ZXIgYWxsb3dlZCBub2Rlcy4KKyAqIENhbGxlZCB3aXRoIGh1Z2V0bGJfbG9jayBsb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQgZnJlZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLCBib29sIGFjY3Rfc3VycGx1cykKK3sKKwlpbnQgc3RhcnRfbmlkOworCWludCBuZXh0X25pZDsKKwlpbnQgcmV0ID0gMDsKKworCXN0YXJ0X25pZCA9IGgtPm5leHRfbmlkX3RvX2ZyZWU7CisJbmV4dF9uaWQgPSBzdGFydF9uaWQ7CisKKwlkbyB7CisJCS8qCisJCSAqIElmIHdlJ3JlIHJldHVybmluZyB1bnVzZWQgc3VycGx1cyBwYWdlcywgb25seSBleGFtaW5lCisJCSAqIG5vZGVzIHdpdGggc3VycGx1cyBwYWdlcy4KKwkJICovCisJCWlmICgoIWFjY3Rfc3VycGx1cyB8fCBoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXh0X25pZF0pICYmCisJCSAgICAhbGlzdF9lbXB0eSgmaC0+aHVnZXBhZ2VfZnJlZWxpc3RzW25leHRfbmlkXSkpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0KKwkJCQlsaXN0X2VudHJ5KGgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tuZXh0X25pZF0ubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcGFnZSwgbHJ1KTsKKwkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCQkJaC0+ZnJlZV9odWdlX3BhZ2VzLS07CisJCQloLT5mcmVlX2h1Z2VfcGFnZXNfbm9kZVtuZXh0X25pZF0tLTsKKwkJCWlmIChhY2N0X3N1cnBsdXMpIHsKKwkJCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXMtLTsKKwkJCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXh0X25pZF0tLTsKKwkJCX0KKwkJCXVwZGF0ZV9hbmRfZnJlZV9wYWdlKGgsIHBhZ2UpOworCQkJcmV0ID0gMTsKKwkJfQorCQluZXh0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShoKTsKKwl9IHdoaWxlICghcmV0ICYmIG5leHRfbmlkICE9IHN0YXJ0X25pZCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2J1ZGR5X2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLAogCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTg1NSwyMiArODkzLDEzIEBACiAgKiBXaGVuIHJlbGVhc2luZyBhIGh1Z2V0bGIgcG9vbCByZXNlcnZhdGlvbiwgYW55IHN1cnBsdXMgcGFnZXMgdGhhdCB3ZXJlCiAgKiBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGUgcmVzZXJ2YXRpb24gbXVzdCBiZSBleHBsaWNpdGx5IGZyZWVkIGlmIHRoZXkgd2VyZQogICogbmV2ZXIgdXNlZC4KKyAqIENhbGxlZCB3aXRoIGh1Z2V0bGJfbG9jayBoZWxkLgogICovCiBzdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwKIAkJCQkJdW5zaWduZWQgbG9uZyB1bnVzZWRfcmVzdl9wYWdlcykKIHsKLQlzdGF0aWMgaW50IG5pZCA9IC0xOwotCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAKLQkvKgotCSAqIFdlIHdhbnQgdG8gcmVsZWFzZSBhcyBtYW55IHN1cnBsdXMgcGFnZXMgYXMgcG9zc2libGUsIHNwcmVhZAotCSAqIGV2ZW5seSBhY3Jvc3MgYWxsIG5vZGVzLiBJdGVyYXRlIGFjcm9zcyBhbGwgbm9kZXMgdW50aWwgd2UKLQkgKiBjYW4gbm8gbG9uZ2VyIGZyZWUgdW5yZXNlcnZlZCBzdXJwbHVzIHBhZ2VzLiBUaGlzIG9jY3VycyB3aGVuCi0JICogdGhlIG5vZGVzIHdpdGggc3VycGx1cyBwYWdlcyBoYXZlIG5vIGZyZWUgcGFnZXMuCi0JICovCi0JdW5zaWduZWQgbG9uZyByZW1haW5pbmdfaXRlcmF0aW9ucyA9IG5yX29ubGluZV9ub2RlczsKLQogCS8qIFVuY29tbWl0IHRoZSByZXNlcnZhdGlvbiAqLwogCWgtPnJlc3ZfaHVnZV9wYWdlcyAtPSB1bnVzZWRfcmVzdl9wYWdlczsKIApAQCAtODgwLDI2ICs5MDksMTcgQEAKIAogCW5yX3BhZ2VzID0gbWluKHVudXNlZF9yZXN2X3BhZ2VzLCBoLT5zdXJwbHVzX2h1Z2VfcGFnZXMpOwogCi0Jd2hpbGUgKHJlbWFpbmluZ19pdGVyYXRpb25zLS0gJiYgbnJfcGFnZXMpIHsKLQkJbmlkID0gbmV4dF9ub2RlKG5pZCwgbm9kZV9vbmxpbmVfbWFwKTsKLQkJaWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMpCi0JCQluaWQgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7Ci0KLQkJaWYgKCFoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZoLT5odWdlcGFnZV9mcmVlbGlzdHNbbmlkXSkpIHsKLQkJCXBhZ2UgPSBsaXN0X2VudHJ5KGgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tuaWRdLm5leHQsCi0JCQkJCSAgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJCXVwZGF0ZV9hbmRfZnJlZV9wYWdlKGgsIHBhZ2UpOwotCQkJaC0+ZnJlZV9odWdlX3BhZ2VzLS07Ci0JCQloLT5mcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdLS07Ci0JCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXMtLTsKLQkJCWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0tLTsKLQkJCW5yX3BhZ2VzLS07Ci0JCQlyZW1haW5pbmdfaXRlcmF0aW9ucyA9IG5yX29ubGluZV9ub2RlczsKLQkJfQorCS8qCisJICogV2Ugd2FudCB0byByZWxlYXNlIGFzIG1hbnkgc3VycGx1cyBwYWdlcyBhcyBwb3NzaWJsZSwgc3ByZWFkCisJICogZXZlbmx5IGFjcm9zcyBhbGwgbm9kZXMuIEl0ZXJhdGUgYWNyb3NzIGFsbCBub2RlcyB1bnRpbCB3ZQorCSAqIGNhbiBubyBsb25nZXIgZnJlZSB1bnJlc2VydmVkIHN1cnBsdXMgcGFnZXMuIFRoaXMgb2NjdXJzIHdoZW4KKwkgKiB0aGUgbm9kZXMgd2l0aCBzdXJwbHVzIHBhZ2VzIGhhdmUgbm8gZnJlZSBwYWdlcy4KKwkgKiBmcmVlX3Bvb2xfaHVnZV9wYWdlKCkgd2lsbCBiYWxhbmNlIHRoZSB0aGUgZnJlZXMgYWNyb3NzIHRoZQorCSAqIG9uLWxpbmUgbm9kZXMgZm9yIHVzIGFuZCB3aWxsIGhhbmRsZSB0aGUgaHN0YXRlIGFjY291bnRpbmcuCisJICovCisJd2hpbGUgKG5yX3BhZ2VzLS0pIHsKKwkJaWYgKCFmcmVlX3Bvb2xfaHVnZV9wYWdlKGgsIDEpKQorCQkJYnJlYWs7CiAJfQogfQogCkBAIC0xMDA4LDkgKzEwMjgsMTAgQEAKIAkJdm9pZCAqYWRkcjsKIAogCQlhZGRyID0gX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYygKLQkJCQlOT0RFX0RBVEEoaC0+aHVnZXRsYl9uZXh0X25pZCksCisJCQkJTk9ERV9EQVRBKGgtPm5leHRfbmlkX3RvX2FsbG9jKSwKIAkJCQlodWdlX3BhZ2Vfc2l6ZShoKSwgaHVnZV9wYWdlX3NpemUoaCksIDApOwogCisJCWhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2MoaCk7CiAJCWlmIChhZGRyKSB7CiAJCQkvKgogCQkJICogVXNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGh1Z2UgcGFnZSB0byBzdG9yZSB0aGUKQEAgLTEwMjAsNyArMTA0MSw2IEBACiAJCQltID0gYWRkcjsKIAkJCWdvdG8gZm91bmQ7CiAJCX0KLQkJaHN0YXRlX25leHRfbm9kZShoKTsKIAkJbnJfbm9kZXMtLTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMTQxLDMxICsxMTYxLDQzIEBACiAgKi8KIHN0YXRpYyBpbnQgYWRqdXN0X3Bvb2xfc3VycGx1cyhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgZGVsdGEpCiB7Ci0Jc3RhdGljIGludCBwcmV2X25pZDsKLQlpbnQgbmlkID0gcHJldl9uaWQ7CisJaW50IHN0YXJ0X25pZCwgbmV4dF9uaWQ7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9CVUdfT04oZGVsdGEgIT0gLTEgJiYgZGVsdGEgIT0gMSk7Ci0JZG8gewotCQluaWQgPSBuZXh0X25vZGUobmlkLCBub2RlX29ubGluZV9tYXApOwotCQlpZiAobmlkID09IE1BWF9OVU1OT0RFUykKLQkJCW5pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKIAotCQkvKiBUbyBzaHJpbmsgb24gdGhpcyBub2RlLCB0aGVyZSBtdXN0IGJlIGEgc3VycGx1cyBwYWdlICovCi0JCWlmIChkZWx0YSA8IDAgJiYgIWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0pCi0JCQljb250aW51ZTsKLQkJLyogU3VycGx1cyBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgKi8KLQkJaWYgKGRlbHRhID4gMCAmJiBoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuaWRdID49CisJaWYgKGRlbHRhIDwgMCkKKwkJc3RhcnRfbmlkID0gaC0+bmV4dF9uaWRfdG9fYWxsb2M7CisJZWxzZQorCQlzdGFydF9uaWQgPSBoLT5uZXh0X25pZF90b19mcmVlOworCW5leHRfbmlkID0gc3RhcnRfbmlkOworCisJZG8geworCQlpbnQgbmlkID0gbmV4dF9uaWQ7CisJCWlmIChkZWx0YSA8IDApICB7CisJCQluZXh0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2MoaCk7CisJCQkvKgorCQkJICogVG8gc2hyaW5rIG9uIHRoaXMgbm9kZSwgdGhlcmUgbXVzdCBiZSBhIHN1cnBsdXMgcGFnZQorCQkJICovCisJCQlpZiAoIWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0pCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKGRlbHRhID4gMCkgeworCQkJbmV4dF9uaWQgPSBoc3RhdGVfbmV4dF9ub2RlX3RvX2ZyZWUoaCk7CisJCQkvKgorCQkJICogU3VycGx1cyBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMKKwkJCSAqLworCQkJaWYgKGgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0gPj0KIAkJCQkJCWgtPm5yX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKQotCQkJY29udGludWU7CisJCQkJY29udGludWU7CisJCX0KIAogCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXMgKz0gZGVsdGE7CiAJCWgtPnN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0gKz0gZGVsdGE7CiAJCXJldCA9IDE7CiAJCWJyZWFrOwotCX0gd2hpbGUgKG5pZCAhPSBwcmV2X25pZCk7CisJfSB3aGlsZSAobmV4dF9uaWQgIT0gc3RhcnRfbmlkKTsKIAotCXByZXZfbmlkID0gbmlkOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMjcsMTAgKzEyNTksOCBAQAogCW1pbl9jb3VudCA9IG1heChjb3VudCwgbWluX2NvdW50KTsKIAl0cnlfdG9fZnJlZV9sb3coaCwgbWluX2NvdW50KTsKIAl3aGlsZSAobWluX2NvdW50IDwgcGVyc2lzdGVudF9odWdlX3BhZ2VzKGgpKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gZGVxdWV1ZV9odWdlX3BhZ2UoaCk7Ci0JCWlmICghcGFnZSkKKwkJaWYgKCFmcmVlX3Bvb2xfaHVnZV9wYWdlKGgsIDApKQogCQkJYnJlYWs7Ci0JCXVwZGF0ZV9hbmRfZnJlZV9wYWdlKGgsIHBhZ2UpOwogCX0KIAl3aGlsZSAoY291bnQgPCBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHsKIAkJaWYgKCFhZGp1c3RfcG9vbF9zdXJwbHVzKGgsIDEpKQpAQCAtMTQ0Miw3ICsxNDcyLDggQEAKIAloLT5mcmVlX2h1Z2VfcGFnZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7ICsraSkKIAkJSU5JVF9MSVNUX0hFQUQoJmgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tpXSk7Ci0JaC0+aHVnZXRsYl9uZXh0X25pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKwloLT5uZXh0X25pZF90b19hbGxvYyA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKwloLT5uZXh0X25pZF90b19mcmVlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwogCXNucHJpbnRmKGgtPm5hbWUsIEhTVEFURV9OQU1FX0xFTiwgImh1Z2VwYWdlcy0lbHVrQiIsCiAJCQkJCWh1Z2VfcGFnZV9zaXplKGgpLzEwMjQpOwogCkBAIC0xOTg1LDYgKzIwMTYsMjYgQEAKIAlyZXR1cm4gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgaWR4KTsKIH0KIAorLyoKKyAqIFJldHVybiB3aGV0aGVyIHRoZXJlIGlzIGEgcGFnZWNhY2hlIHBhZ2UgdG8gYmFjayBnaXZlbiBhZGRyZXNzIHdpdGhpbiBWTUEuCisgKiBDYWxsZXIgZm9sbG93X2h1Z2V0bGJfcGFnZSgpIGhvbGRzIHBhZ2VfdGFibGVfbG9jayBzbyB3ZSBjYW5ub3QgbG9ja19wYWdlLgorICovCitzdGF0aWMgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJcGdvZmZfdCBpZHg7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CisJaWR4ID0gdm1hX2h1Z2VjYWNoZV9vZmZzZXQoaCwgdm1hLCBhZGRyZXNzKTsKKworCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7CisJaWYgKHBhZ2UpCisJCXB1dF9wYWdlKHBhZ2UpOworCXJldHVybiBwYWdlICE9IE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTIxODAsNTQgKzIyMzEsNTUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBodWdlX3plcm9wYWdlX29rKHB0ZV90ICpwdGVwLCBpbnQgd3JpdGUsIGludCBzaGFyZWQpCi17Ci0JaWYgKCFwdGVwIHx8IHdyaXRlIHx8IHNoYXJlZCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZXApKTsKLX0KLQogaW50IGZvbGxvd19odWdldGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcywKIAkJCXVuc2lnbmVkIGxvbmcgKnBvc2l0aW9uLCBpbnQgKmxlbmd0aCwgaW50IGksCi0JCQlpbnQgd3JpdGUpCisJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm5fb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAqcG9zaXRpb247CiAJaW50IHJlbWFpbmRlciA9ICpsZW5ndGg7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKLQlpbnQgemVyb3BhZ2Vfb2sgPSAwOwotCWludCBzaGFyZWQgPSB2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEOwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAl3aGlsZSAodmFkZHIgPCB2bWEtPnZtX2VuZCAmJiByZW1haW5kZXIpIHsKIAkJcHRlX3QgKnB0ZTsKKwkJaW50IGFic2VudDsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAkJLyoKIAkJICogU29tZSBhcmNocyAoc3BhcmM2NCwgc2gqKSBoYXZlIG11bHRpcGxlIHB0ZV90cyB0bwotCQkgKiBlYWNoIGh1Z2VwYWdlLiAgV2UgaGF2ZSB0byBtYWtlICogc3VyZSB3ZSBnZXQgdGhlCisJCSAqIGVhY2ggaHVnZXBhZ2UuICBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlCiAJCSAqIGZpcnN0LCBmb3IgdGhlIHBhZ2UgaW5kZXhpbmcgYmVsb3cgdG8gd29yay4KIAkJICovCiAJCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgdmFkZHIgJiBodWdlX3BhZ2VfbWFzayhoKSk7Ci0JCWlmIChodWdlX3plcm9wYWdlX29rKHB0ZSwgd3JpdGUsIHNoYXJlZCkpCi0JCQl6ZXJvcGFnZV9vayA9IDE7CisJCWFic2VudCA9ICFwdGUgfHwgaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpOwogCi0JCWlmICghcHRlIHx8Ci0JCSAgICAoaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpICYmICF6ZXJvcGFnZV9vaykgfHwKLQkJICAgICh3cml0ZSAmJiAhcHRlX3dyaXRlKGh1Z2VfcHRlcF9nZXQocHRlKSkpKSB7CisJCS8qCisJCSAqIFdoZW4gY29yZWR1bXBpbmcsIGl0IHN1aXRzIGdldF9kdW1wX3BhZ2UgaWYgd2UganVzdCByZXR1cm4KKwkJICogYW4gZXJyb3Igd2hlcmUgdGhlcmUncyBhbiBlbXB0eSBzbG90IHdpdGggbm8gaHVnZSBwYWdlY2FjaGUKKwkJICogdG8gYmFjayBpdC4gIFRoaXMgd2F5LCB3ZSBhdm9pZCBhbGxvY2F0aW5nIGEgaHVnZXBhZ2UsIGFuZAorCQkgKiB0aGUgc3BhcnNlIGR1bXBmaWxlIGF2b2lkcyBhbGxvY2F0aW5nIGRpc2sgYmxvY2tzLCBidXQgaXRzCisJCSAqIGh1Z2UgaG9sZXMgc3RpbGwgc2hvdyB1cCB3aXRoIHplcm9lcyB3aGVyZSB0aGV5IG5lZWQgdG8gYmUuCisJCSAqLworCQlpZiAoYWJzZW50ICYmIChmbGFncyAmIEZPTExfRFVNUCkgJiYKKwkJICAgICFodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoaCwgdm1hLCB2YWRkcikpIHsKKwkJCXJlbWFpbmRlciA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChhYnNlbnQgfHwKKwkJICAgICgoZmxhZ3MgJiBGT0xMX1dSSVRFKSAmJiAhcHRlX3dyaXRlKGh1Z2VfcHRlcF9nZXQocHRlKSkpKSB7CiAJCQlpbnQgcmV0OwogCiAJCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JCQlyZXQgPSBodWdldGxiX2ZhdWx0KG1tLCB2bWEsIHZhZGRyLCB3cml0ZSk7CisJCQlyZXQgPSBodWdldGxiX2ZhdWx0KG1tLCB2bWEsIHZhZGRyLAorCQkJCShmbGFncyAmIEZPTExfV1JJVEUpID8gRkFVTFRfRkxBR19XUklURSA6IDApOwogCQkJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAkJCWlmICghKHJldCAmIFZNX0ZBVUxUX0VSUk9SKSkKIAkJCQljb250aW51ZTsKIAogCQkJcmVtYWluZGVyID0gMDsKLQkJCWlmICghaSkKLQkJCQlpID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIyMzUsMTAgKzIyODcsNyBAQAogCQlwYWdlID0gcHRlX3BhZ2UoaHVnZV9wdGVwX2dldChwdGUpKTsKIHNhbWVfcGFnZToKIAkJaWYgKHBhZ2VzKSB7Ci0JCQlpZiAoemVyb3BhZ2Vfb2spCi0JCQkJcGFnZXNbaV0gPSBaRVJPX1BBR0UoMCk7Ci0JCQllbHNlCi0JCQkJcGFnZXNbaV0gPSBtZW1fbWFwX29mZnNldChwYWdlLCBwZm5fb2Zmc2V0KTsKKwkJCXBhZ2VzW2ldID0gbWVtX21hcF9vZmZzZXQocGFnZSwgcGZuX29mZnNldCk7CiAJCQlnZXRfcGFnZShwYWdlc1tpXSk7CiAJCX0KIApAQCAtMjI2Miw3ICsyMzExLDcgQEAKIAkqbGVuZ3RoID0gcmVtYWluZGVyOwogCSpwb3NpdGlvbiA9IHZhZGRyOwogCi0JcmV0dXJuIGk7CisJcmV0dXJuIGkgPyBpIDogLUVGQVVMVDsKIH0KIAogdm9pZCBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggZjI5MGM0ZC4uMjJlYzhkMiAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAorKysgYi9tbS9pbnRlcm5hbC5oCkBAIC0zNyw2ICszNyw4IEBACiAJYXRvbWljX2RlYygmcGFnZS0+X2NvdW50KTsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9tZW1tYXBfcGZuOworCiAvKgogICogaW4gbW0vdm1zY2FuLmM6CiAgKi8KQEAgLTQ2LDcgKzQ4LDYgQEAKIC8qCiAgKiBpbiBtbS9wYWdlX2FsbG9jLmMKICAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9tZW1tYXBfcGZuOwogZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzX2Jvb3RtZW0oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb3JkZXIpOwogCkBAIC0yNTAsMTMgKzI1MSw4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqLwogCi0jZGVmaW5lIEdVUF9GTEFHU19XUklURSAgICAgICAgICAgICAgICAgIDB4MQotI2RlZmluZSBHVVBfRkxBR1NfRk9SQ0UgICAgICAgICAgICAgICAgICAweDIKLSNkZWZpbmUgR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMgMHg0Ci0jZGVmaW5lIEdVUF9GTEFHU19JR05PUkVfU0lHS0lMTCAgICAgICAgIDB4OAotCiBpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIHVuc2lnbmVkIGludCBmb2xsX2ZsYWdzLAogCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpOwogCiAjZGVmaW5lIFpPTkVfUkVDTEFJTV9OT1NDQU4JLTIKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjYzM3MwotLS0gL2Rldi9udWxsCisrKyBiL21tL2tzbS5jCkBAIC0wLDAgKzEsMTcwMyBAQAorLyoKKyAqIE1lbW9yeSBtZXJnaW5nIHN1cHBvcnQuCisgKgorICogVGhpcyBjb2RlIGVuYWJsZXMgZHluYW1pYyBzaGFyaW5nIG9mIGlkZW50aWNhbCBwYWdlcyBmb3VuZCBpbiBkaWZmZXJlbnQKKyAqIG1lbW9yeSBhcmVhcywgZXZlbiBpZiB0aGV5IGFyZSBub3Qgc2hhcmVkIGJ5IGZvcmsoKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4KKyAqIEF1dGhvcnM6CisgKglJemlrIEVpZHVzCisgKglBbmRyZWEgQXJjYW5nZWxpCisgKglDaHJpcyBXcmlnaHQKKyAqCUh1Z2ggRGlja2lucworICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcm1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgorCisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKy8qCisgKiBBIGZldyBub3RlcyBhYm91dCB0aGUgS1NNIHNjYW5uaW5nIHByb2Nlc3MsCisgKiB0byBtYWtlIGl0IGVhc2llciB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVsb3c6CisgKgorICogSW4gb3JkZXIgdG8gcmVkdWNlIGV4Y2Vzc2l2ZSBzY2FubmluZywgS1NNIHNvcnRzIHRoZSBtZW1vcnkgcGFnZXMgYnkgdGhlaXIKKyAqIGNvbnRlbnRzIGludG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHBvaW50ZXJzIHRvIHRoZSBwYWdlcycgbG9jYXRpb25zLgorICoKKyAqIFNpbmNlIHRoZSBjb250ZW50cyBvZiB0aGUgcGFnZXMgbWF5IGNoYW5nZSBhdCBhbnkgbW9tZW50LCBLU00gY2Fubm90IGp1c3QKKyAqIGluc2VydCB0aGUgcGFnZXMgaW50byBhIG5vcm1hbCBzb3J0ZWQgdHJlZSBhbmQgZXhwZWN0IGl0IHRvIGZpbmQgYW55dGhpbmcuCisgKiBUaGVyZWZvcmUgS1NNIHVzZXMgdHdvIGRhdGEgc3RydWN0dXJlcyAtIHRoZSBzdGFibGUgYW5kIHRoZSB1bnN0YWJsZSB0cmVlLgorICoKKyAqIFRoZSBzdGFibGUgdHJlZSBob2xkcyBwb2ludGVycyB0byBhbGwgdGhlIG1lcmdlZCBwYWdlcyAoa3NtIHBhZ2VzKSwgc29ydGVkCisgKiBieSB0aGVpciBjb250ZW50cy4gIEJlY2F1c2UgZWFjaCBzdWNoIHBhZ2UgaXMgd3JpdGUtcHJvdGVjdGVkLCBzZWFyY2hpbmcgb24KKyAqIHRoaXMgdHJlZSBpcyBmdWxseSBhc3N1cmVkIHRvIGJlIHdvcmtpbmcgKGV4Y2VwdCB3aGVuIHBhZ2VzIGFyZSB1bm1hcHBlZCksCisgKiBhbmQgdGhlcmVmb3JlIHRoaXMgdHJlZSBpcyBjYWxsZWQgdGhlIHN0YWJsZSB0cmVlLgorICoKKyAqIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFibGUgdHJlZSwgS1NNIHVzZXMgYSBzZWNvbmQgZGF0YSBzdHJ1Y3R1cmUgY2FsbGVkIHRoZQorICogdW5zdGFibGUgdHJlZTogdGhpcyB0cmVlIGhvbGRzIHBvaW50ZXJzIHRvIHBhZ2VzIHdoaWNoIGhhdmUgYmVlbiBmb3VuZCB0bworICogYmUgInVuY2hhbmdlZCBmb3IgYSBwZXJpb2Qgb2YgdGltZSIuICBUaGUgdW5zdGFibGUgdHJlZSBzb3J0cyB0aGVzZSBwYWdlcworICogYnkgdGhlaXIgY29udGVudHMsIGJ1dCBzaW5jZSB0aGV5IGFyZSBub3Qgd3JpdGUtcHJvdGVjdGVkLCBLU00gY2Fubm90IHJlbHkKKyAqIHVwb24gdGhlIHVuc3RhYmxlIHRyZWUgdG8gd29yayBjb3JyZWN0bHkgLSB0aGUgdW5zdGFibGUgdHJlZSBpcyBsaWFibGUgdG8KKyAqIGJlIGNvcnJ1cHRlZCBhcyBpdHMgY29udGVudHMgYXJlIG1vZGlmaWVkLCBhbmQgc28gaXQgaXMgY2FsbGVkIHVuc3RhYmxlLgorICoKKyAqIEtTTSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGJ5IHNldmVyYWwgdGVjaG5pcXVlczoKKyAqCisgKiAxKSBUaGUgdW5zdGFibGUgdHJlZSBpcyBmbHVzaGVkIGV2ZXJ5IHRpbWUgS1NNIGNvbXBsZXRlcyBzY2FubmluZyBhbGwKKyAqICAgIG1lbW9yeSBhcmVhcywgYW5kIHRoZW4gdGhlIHRyZWUgaXMgcmVidWlsdCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcuCisgKiAyKSBLU00gd2lsbCBvbmx5IGluc2VydCBpbnRvIHRoZSB1bnN0YWJsZSB0cmVlLCBwYWdlcyB3aG9zZSBoYXNoIHZhbHVlCisgKiAgICBoYXMgbm90IGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHNjYW4gb2YgYWxsIG1lbW9yeSBhcmVhcy4KKyAqIDMpIFRoZSB1bnN0YWJsZSB0cmVlIGlzIGEgUmVkQmxhY2sgVHJlZSAtIHNvIGl0cyBiYWxhbmNpbmcgaXMgYmFzZWQgb24gdGhlCisgKiAgICBjb2xvcnMgb2YgdGhlIG5vZGVzIGFuZCBub3Qgb24gdGhlaXIgY29udGVudHMsIGFzc3VyaW5nIHRoYXQgZXZlbiB3aGVuCisgKiAgICB0aGUgdHJlZSBnZXRzICJjb3JydXB0ZWQiIGl0IHdvbid0IGdldCBvdXQgb2YgYmFsYW5jZSwgc28gc2Nhbm5pbmcgdGltZQorICogICAgcmVtYWlucyB0aGUgc2FtZSAoYWxzbywgc2VhcmNoaW5nIGFuZCBpbnNlcnRpbmcgbm9kZXMgaW4gYW4gcmJ0cmVlIHVzZXMKKyAqICAgIHRoZSBzYW1lIGFsZ29yaXRobSwgc28gd2UgaGF2ZSBubyBvdmVyaGVhZCB3aGVuIHdlIGZsdXNoIGFuZCByZWJ1aWxkKS4KKyAqIDQpIEtTTSBuZXZlciBmbHVzaGVzIHRoZSBzdGFibGUgdHJlZSwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGlmIGl0IHdlcmUgdG8KKyAqICAgIHRha2UgMTAgYXR0ZW1wdHMgdG8gZmluZCBhIHBhZ2UgaW4gdGhlIHVuc3RhYmxlIHRyZWUsIG9uY2UgaXQgaXMgZm91bmQsCisgKiAgICBpdCBpcyBzZWN1cmVkIGluIHRoZSBzdGFibGUgdHJlZS4gIChXaGVuIHdlIHNjYW4gYSBuZXcgcGFnZSwgd2UgZmlyc3QKKyAqICAgIGNvbXBhcmUgaXQgYWdhaW5zdCB0aGUgc3RhYmxlIHRyZWUsIGFuZCB0aGVuIGFnYWluc3QgdGhlIHVuc3RhYmxlIHRyZWUuKQorICovCisKKy8qKgorICogc3RydWN0IG1tX3Nsb3QgLSBrc20gaW5mb3JtYXRpb24gcGVyIG1tIHRoYXQgaXMgYmVpbmcgc2Nhbm5lZAorICogQGxpbms6IGxpbmsgdG8gdGhlIG1tX3Nsb3RzIGhhc2ggbGlzdAorICogQG1tX2xpc3Q6IGxpbmsgaW50byB0aGUgbW1fc2xvdHMgbGlzdCwgcm9vdGVkIGluIGtzbV9tbV9oZWFkCisgKiBAcm1hcF9saXN0OiBoZWFkIGZvciB0aGlzIG1tX3Nsb3QncyBsaXN0IG9mIHJtYXBfaXRlbXMKKyAqIEBtbTogdGhlIG1tIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcyB2YWxpZCBmb3IKKyAqLworc3RydWN0IG1tX3Nsb3QgeworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7CisJc3RydWN0IGxpc3RfaGVhZCBtbV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcm1hcF9saXN0OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3NtX3NjYW4gLSBjdXJzb3IgZm9yIHNjYW5uaW5nCisgKiBAbW1fc2xvdDogdGhlIGN1cnJlbnQgbW1fc2xvdCB3ZSBhcmUgc2Nhbm5pbmcKKyAqIEBhZGRyZXNzOiB0aGUgbmV4dCBhZGRyZXNzIGluc2lkZSB0aGF0IHRvIGJlIHNjYW5uZWQKKyAqIEBybWFwX2l0ZW06IHRoZSBjdXJyZW50IHJtYXAgdGhhdCB3ZSBhcmUgc2Nhbm5pbmcgaW5zaWRlIHRoZSBybWFwX2xpc3QKKyAqIEBzZXFucjogY291bnQgb2YgY29tcGxldGVkIGZ1bGwgc2NhbnMgKG5lZWRlZCB3aGVuIHJlbW92aW5nIHVuc3RhYmxlIG5vZGUpCisgKgorICogVGhlcmUgaXMgb25seSB0aGUgb25lIGtzbV9zY2FuIGluc3RhbmNlIG9mIHRoaXMgY3Vyc29yIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGtzbV9zY2FuIHsKKwlzdHJ1Y3QgbW1fc2xvdCAqbW1fc2xvdDsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtOworCXVuc2lnbmVkIGxvbmcgc2VxbnI7Cit9OworCisvKioKKyAqIHN0cnVjdCBybWFwX2l0ZW0gLSByZXZlcnNlIG1hcHBpbmcgaXRlbSBmb3IgdmlydHVhbCBhZGRyZXNzZXMKKyAqIEBsaW5rOiBsaW5rIGludG8gbW1fc2xvdCdzIHJtYXBfbGlzdCAocm1hcF9saXN0IGlzIHBlciBtbSkKKyAqIEBtbTogdGhlIG1lbW9yeSBzdHJ1Y3R1cmUgdGhpcyBybWFwX2l0ZW0gaXMgcG9pbnRpbmcgaW50bworICogQGFkZHJlc3M6IHRoZSB2aXJ0dWFsIGFkZHJlc3MgdGhpcyBybWFwX2l0ZW0gdHJhY2tzICgrIGZsYWdzIGluIGxvdyBiaXRzKQorICogQG9sZGNoZWNrc3VtOiBwcmV2aW91cyBjaGVja3N1bSBvZiB0aGUgcGFnZSBhdCB0aGF0IHZpcnR1YWwgYWRkcmVzcworICogQG5vZGU6IHJiX25vZGUgb2YgdGhpcyBybWFwX2l0ZW0gaW4gZWl0aGVyIHVuc3RhYmxlIG9yIHN0YWJsZSB0cmVlCisgKiBAbmV4dDogbmV4dCBybWFwX2l0ZW0gaGFuZ2luZyBvZmYgdGhlIHNhbWUgbm9kZSBvZiB0aGUgc3RhYmxlIHRyZWUKKyAqIEBwcmV2OiBwcmV2aW91cyBybWFwX2l0ZW0gaGFuZ2luZyBvZmYgdGhlIHNhbWUgbm9kZSBvZiB0aGUgc3RhYmxlIHRyZWUKKyAqLworc3RydWN0IHJtYXBfaXRlbSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsJCS8qICsgbG93IGJpdHMgdXNlZCBmb3IgZmxhZ3MgYmVsb3cgKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIGludCBvbGRjaGVja3N1bTsJCS8qIHdoZW4gdW5zdGFibGUgKi8KKwkJc3RydWN0IHJtYXBfaXRlbSAqbmV4dDsJCQkvKiB3aGVuIHN0YWJsZSAqLworCX07CisJdW5pb24geworCQlzdHJ1Y3QgcmJfbm9kZSBub2RlOwkJCS8qIHdoZW4gdHJlZSBub2RlICovCisJCXN0cnVjdCBybWFwX2l0ZW0gKnByZXY7CQkJLyogaW4gc3RhYmxlIGxpc3QgKi8KKwl9OworfTsKKworI2RlZmluZSBTRVFOUl9NQVNLCTB4MGZmCS8qIGxvdyBiaXRzIG9mIHVuc3RhYmxlIHRyZWUgc2VxbnIgKi8KKyNkZWZpbmUgTk9ERV9GTEFHCTB4MTAwCS8qIGlzIGEgbm9kZSBvZiB1bnN0YWJsZSBvciBzdGFibGUgdHJlZSAqLworI2RlZmluZSBTVEFCTEVfRkxBRwkweDIwMAkvKiBpcyBhIG5vZGUgb3IgbGlzdCBpdGVtIG9mIHN0YWJsZSB0cmVlICovCisKKy8qIFRoZSBzdGFibGUgYW5kIHVuc3RhYmxlIHRyZWUgaGVhZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByb290X3N0YWJsZV90cmVlID0gUkJfUk9PVDsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCByb290X3Vuc3RhYmxlX3RyZWUgPSBSQl9ST09UOworCisjZGVmaW5lIE1NX1NMT1RTX0hBU0hfSEVBRFMgMTAyNAorc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICptbV9zbG90c19oYXNoOworCitzdGF0aWMgc3RydWN0IG1tX3Nsb3Qga3NtX21tX2hlYWQgPSB7CisJLm1tX2xpc3QgPSBMSVNUX0hFQURfSU5JVChrc21fbW1faGVhZC5tbV9saXN0KSwKK307CitzdGF0aWMgc3RydWN0IGtzbV9zY2FuIGtzbV9zY2FuID0geworCS5tbV9zbG90ID0gJmtzbV9tbV9oZWFkLAorfTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpybWFwX2l0ZW1fY2FjaGU7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tX3Nsb3RfY2FjaGU7CisKKy8qIFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIHN0YWJsZSB0cmVlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrc21fcGFnZXNfc2hhcmVkOworCisvKiBUaGUgbnVtYmVyIG9mIHBhZ2Ugc2xvdHMgYWRkaXRpb25hbGx5IHNoYXJpbmcgdGhvc2Ugbm9kZXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtzbV9wYWdlc19zaGFyaW5nOworCisvKiBUaGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSB1bnN0YWJsZSB0cmVlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrc21fcGFnZXNfdW5zaGFyZWQ7CisKKy8qIFRoZSBudW1iZXIgb2Ygcm1hcF9pdGVtcyBpbiB1c2U6IHRvIGNhbGN1bGF0ZSBwYWdlc192b2xhdGlsZSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga3NtX3JtYXBfaXRlbXM7CisKKy8qIExpbWl0IG9uIHRoZSBudW1iZXIgb2YgdW5zd2FwcGFibGUgcGFnZXMgdXNlZCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga3NtX21heF9rZXJuZWxfcGFnZXMgPSAyMDAwOworCisvKiBOdW1iZXIgb2YgcGFnZXMga3NtZCBzaG91bGQgc2NhbiBpbiBvbmUgYmF0Y2ggKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQga3NtX3RocmVhZF9wYWdlc190b19zY2FuID0gMjAwOworCisvKiBNaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmV0d2VlbiBiYXRjaGVzICovCitzdGF0aWMgdW5zaWduZWQgaW50IGtzbV90aHJlYWRfc2xlZXBfbWlsbGlzZWNzID0gMjA7CisKKyNkZWZpbmUgS1NNX1JVTl9TVE9QCTAKKyNkZWZpbmUgS1NNX1JVTl9NRVJHRQkxCisjZGVmaW5lIEtTTV9SVU5fVU5NRVJHRQkyCitzdGF0aWMgdW5zaWduZWQgaW50IGtzbV9ydW4gPSBLU01fUlVOX01FUkdFOworCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa3NtX3RocmVhZF93YWl0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoa3NtX3RocmVhZF9tdXRleCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGtzbV9tbWxpc3RfbG9jayk7CisKKyNkZWZpbmUgS1NNX0tNRU1fQ0FDSEUoX19zdHJ1Y3QsIF9fZmxhZ3MpIGttZW1fY2FjaGVfY3JlYXRlKCJrc21fIiNfX3N0cnVjdCxcCisJCXNpemVvZihzdHJ1Y3QgX19zdHJ1Y3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgX19zdHJ1Y3QpLFwKKwkJKF9fZmxhZ3MpLCBOVUxMKQorCitzdGF0aWMgaW50IF9faW5pdCBrc21fc2xhYl9pbml0KHZvaWQpCit7CisJcm1hcF9pdGVtX2NhY2hlID0gS1NNX0tNRU1fQ0FDSEUocm1hcF9pdGVtLCAwKTsKKwlpZiAoIXJtYXBfaXRlbV9jYWNoZSkKKwkJZ290byBvdXQ7CisKKwltbV9zbG90X2NhY2hlID0gS1NNX0tNRU1fQ0FDSEUobW1fc2xvdCwgMCk7CisJaWYgKCFtbV9zbG90X2NhY2hlKQorCQlnb3RvIG91dF9mcmVlOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlOgorCWttZW1fY2FjaGVfZGVzdHJveShybWFwX2l0ZW1fY2FjaGUpOworb3V0OgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQga3NtX3NsYWJfZnJlZSh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShtbV9zbG90X2NhY2hlKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocm1hcF9pdGVtX2NhY2hlKTsKKwltbV9zbG90X2NhY2hlID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgcm1hcF9pdGVtICphbGxvY19ybWFwX2l0ZW0odm9pZCkKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwlybWFwX2l0ZW0gPSBrbWVtX2NhY2hlX3phbGxvYyhybWFwX2l0ZW1fY2FjaGUsIEdGUF9LRVJORUwpOworCWlmIChybWFwX2l0ZW0pCisJCWtzbV9ybWFwX2l0ZW1zKys7CisJcmV0dXJuIHJtYXBfaXRlbTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcm1hcF9pdGVtKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlrc21fcm1hcF9pdGVtcy0tOworCXJtYXBfaXRlbS0+bW0gPSBOVUxMOwkvKiBkZWJ1ZyBzYWZldHkgKi8KKwlrbWVtX2NhY2hlX2ZyZWUocm1hcF9pdGVtX2NhY2hlLCBybWFwX2l0ZW0pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbV9zbG90ICphbGxvY19tbV9zbG90KHZvaWQpCit7CisJaWYgKCFtbV9zbG90X2NhY2hlKQkvKiBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGttZW1fY2FjaGVfemFsbG9jKG1tX3Nsb3RfY2FjaGUsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9tbV9zbG90KHN0cnVjdCBtbV9zbG90ICptbV9zbG90KQoreworCWttZW1fY2FjaGVfZnJlZShtbV9zbG90X2NhY2hlLCBtbV9zbG90KTsKK30KKworc3RhdGljIGludCBfX2luaXQgbW1fc2xvdHNfaGFzaF9pbml0KHZvaWQpCit7CisJbW1fc2xvdHNfaGFzaCA9IGt6YWxsb2MoTU1fU0xPVFNfSEFTSF9IRUFEUyAqIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtbV9zbG90c19oYXNoKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1tX3Nsb3RzX2hhc2hfZnJlZSh2b2lkKQoreworCWtmcmVlKG1tX3Nsb3RzX2hhc2gpOworfQorCitzdGF0aWMgc3RydWN0IG1tX3Nsb3QgKmdldF9tbV9zbG90KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlidWNrZXQgPSAmbW1fc2xvdHNfaGFzaFsoKHVuc2lnbmVkIGxvbmcpbW0gLyBzaXplb2Yoc3RydWN0IG1tX3N0cnVjdCkpCisJCQkJJSBNTV9TTE9UU19IQVNIX0hFQURTXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShtbV9zbG90LCBub2RlLCBidWNrZXQsIGxpbmspIHsKKwkJaWYgKG1tID09IG1tX3Nsb3QtPm1tKQorCQkJcmV0dXJuIG1tX3Nsb3Q7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfdG9fbW1fc2xvdHNfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgc3RydWN0IG1tX3Nsb3QgKm1tX3Nsb3QpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKworCWJ1Y2tldCA9ICZtbV9zbG90c19oYXNoWygodW5zaWduZWQgbG9uZyltbSAvIHNpemVvZihzdHJ1Y3QgbW1fc3RydWN0KSkKKwkJCQklIE1NX1NMT1RTX0hBU0hfSEVBRFNdOworCW1tX3Nsb3QtPm1tID0gbW07CisJSU5JVF9MSVNUX0hFQUQoJm1tX3Nsb3QtPnJtYXBfbGlzdCk7CisJaGxpc3RfYWRkX2hlYWQoJm1tX3Nsb3QtPmxpbmssIGJ1Y2tldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluX3N0YWJsZV90cmVlKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlyZXR1cm4gcm1hcF9pdGVtLT5hZGRyZXNzICYgU1RBQkxFX0ZMQUc7Cit9CisKKy8qCisgKiBrc21kLCBhbmQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKCksIG11c3Qgbm90IHRvdWNoIGFuIG1tJ3MKKyAqIHBhZ2UgdGFibGVzIGFmdGVyIGl0IGhhcyBwYXNzZWQgdGhyb3VnaCBrc21fZXhpdCgpIC0gd2hpY2gsIGlmIG5lY2Vzc2FyeSwKKyAqIHRha2VzIG1tYXBfc2VtIGJyaWVmbHkgdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlbS4gIGtzbV9leGl0KCkgZG9lcyBub3Qgc2V0CisgKiBhIHNwZWNpYWwgZmxhZzogdGhleSBjYW4ganVzdCBiYWNrIG91dCBhcyBzb29uIGFzIG1tX3VzZXJzIGdvZXMgdG8gemVyby4KKyAqIGtzbV90ZXN0X2V4aXQoKSBpcyB1c2VkIHRocm91Z2hvdXQgdG8gbWFrZSB0aGlzIHRlc3QgZm9yIGV4aXQ6IGluIHNvbWUKKyAqIHBsYWNlcyBmb3IgY29ycmVjdG5lc3MsIGluIHNvbWUgcGxhY2VzIGp1c3QgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd29yay4KKyAqLworc3RhdGljIGlubGluZSBib29sIGtzbV90ZXN0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDA7Cit9CisKKy8qCisgKiBXZSB1c2UgYnJlYWtfa3NtIHRvIGJyZWFrIENPVyBvbiBhIGtzbSBwYWdlOiBpdCdzIGEgc3RyaXBwZWQgZG93bgorICoKKyAqCWlmIChnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgYWRkciwgMSwgMSwgMSwgJnBhZ2UsIE5VTEwpID09IDEpCisgKgkJcHV0X3BhZ2UocGFnZSk7CisgKgorICogYnV0IHRha2luZyBncmVhdCBjYXJlIG9ubHkgdG8gdG91Y2ggYSBrc20gcGFnZSwgaW4gYSBWTV9NRVJHRUFCTEUgdm1hLAorICogaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gaGFzIHVubWFwcGVkIGFuZCByZW1hcHBlZCBtbSxhZGRyIG1lYW53aGlsZS4KKyAqIENvdWxkIGEga3NtIHBhZ2UgYXBwZWFyIGFueXdoZXJlIGVsc2U/ICBBY3R1YWxseSB5ZXMsIGluIGEgVk1fUEZOTUFQCisgKiBtbWFwIG9mIC9kZXYvbWVtIG9yIC9kZXYva21lbSwgd2hlcmUgd2Ugd291bGQgbm90IHdhbnQgdG8gdG91Y2ggaXQuCisgKi8KK3N0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldCA9IDA7CisKKwlkbyB7CisJCWNvbmRfcmVzY2hlZCgpOworCQlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBhZGRyLCBGT0xMX0dFVCk7CisJCWlmICghcGFnZSkKKwkJCWJyZWFrOworCQlpZiAoUGFnZUtzbShwYWdlKSkKKwkJCXJldCA9IGhhbmRsZV9tbV9mYXVsdCh2bWEtPnZtX21tLCB2bWEsIGFkZHIsCisJCQkJCQkJRkFVTFRfRkxBR19XUklURSk7CisJCWVsc2UKKwkJCXJldCA9IFZNX0ZBVUxUX1dSSVRFOworCQlwdXRfcGFnZShwYWdlKTsKKwl9IHdoaWxlICghKHJldCAmIChWTV9GQVVMVF9XUklURSB8IFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX09PTSkpKTsKKwkvKgorCSAqIFdlIG11c3QgbG9vcCBiZWNhdXNlIGhhbmRsZV9tbV9mYXVsdCgpIG1heSBiYWNrIG91dCBpZiB0aGVyZSdzCisJICogYW55IGRpZmZpY3VsdHkgZS5nLiBpZiBwdGUgYWNjZXNzZWQgYml0IGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHkuCisJICoKKwkgKiBWTV9GQVVMVF9XUklURSBpcyB3aGF0IHdlIGhhdmUgYmVlbiBob3BpbmcgZm9yOiBpdCBpbmRpY2F0ZXMgdGhhdAorCSAqIENPVyBoYXMgYmVlbiBicm9rZW4sIGV2ZW4gaWYgdGhlIHZtYSBkb2VzIG5vdCBwZXJtaXQgVk1fV1JJVEU7CisJICogYnV0IG5vdGUgdGhhdCBhIGNvbmN1cnJlbnQgZmF1bHQgbWlnaHQgYnJlYWsgUGFnZUtzbSBmb3IgdXMuCisJICoKKwkgKiBWTV9GQVVMVF9TSUdCVVMgY291bGQgb2NjdXIgaWYgd2UgcmFjZSB3aXRoIHRydW5jYXRpb24gb2YgdGhlCisJICogYmFja2luZyBmaWxlLCB3aGljaCBhbHNvIGludmFsaWRhdGVzIGFub255bW91cyBwYWdlczogdGhhdCdzCisJICogb2theSwgdGhhdCB0cnVuY2F0aW9uIHdpbGwgaGF2ZSB1bm1hcHBlZCB0aGUgUGFnZUtzbSBmb3IgdXMuCisJICoKKwkgKiBWTV9GQVVMVF9PT006IGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgKGxhdGUgSnVseSAyMDA5KSwgc2V0dGluZworCSAqIGFzaWRlIG1lbV9jZ3JvdXAgbGltaXRzLCBWTV9GQVVMVF9PT00gd291bGQgb25seSBiZSBzZXQgaWYgdGhlCisJICogY3VycmVudCB0YXNrIGhhcyBUSUZfTUVNRElFIHNldCwgYW5kIHdpbGwgYmUgT09NIGtpbGxlZCBvbiByZXR1cm4KKwkgKiB0byB1c2VyOyBhbmQga3NtZCwgaGF2aW5nIG5vIG1tLCB3b3VsZCBuZXZlciBiZSBjaG9zZW4gZm9yIHRoYXQuCisJICoKKwkgKiBCdXQgaWYgdGhlIG1tIGlzIGluIGEgbGltaXRlZCBtZW1fY2dyb3VwLCB0aGVuIHRoZSBmYXVsdCBtYXkgZmFpbAorCSAqIHdpdGggVk1fRkFVTFRfT09NIGV2ZW4gaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBub3QgVElGX01FTURJRTsgYW5kCisJICogZXZlbiBrc21kIGNhbiBmYWlsIGluIHRoaXMgd2F5IC0gdGhvdWdoIGl0J3MgdXN1YWxseSBicmVha2luZyBrc20KKwkgKiBqdXN0IHRvIHVuZG8gYSBtZXJnZSBpdCBtYWRlIGEgbW9tZW50IGJlZm9yZSwgc28gdW5saWtlbHkgdG8gb29tLgorCSAqCisJICogVGhhdCdzIGEgcGl0eTogd2UgbWlnaHQgdGhlcmVmb3JlIGhhdmUgbW9yZSBrZXJuZWwgcGFnZXMgYWxsb2NhdGVkCisJICogdGhhbiB3ZSdyZSBjb3VudGluZyBhcyBub2RlcyBpbiB0aGUgc3RhYmxlIHRyZWU7IGJ1dCBrc21fZG9fc2NhbgorCSAqIHdpbGwgcmV0cnkgdG8gYnJlYWtfY293IG9uIGVhY2ggcGFzcywgc28gc2hvdWxkIHJlY292ZXIgdGhlIHBhZ2UKKwkgKiBpbiBkdWUgY291cnNlLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyB0byBub3QgbGV0IFZNX01FUkdFQUJMRQorCSAqIGJlIGNsZWFyZWQgd2hpbGUgYW55IHN1Y2ggcGFnZXMgbWlnaHQgcmVtYWluIGluIHRoZSBhcmVhLgorCSAqLworCXJldHVybiAocmV0ICYgVk1fRkFVTFRfT09NKSA/IC1FTk9NRU0gOiAwOworfQorCitzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCisJCWdvdG8gb3V0OworCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcikKKwkJZ290byBvdXQ7CisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX01FUkdFQUJMRSkgfHwgIXZtYS0+YW5vbl92bWEpCisJCWdvdG8gb3V0OworCWJyZWFrX2tzbSh2bWEsIGFkZHIpOworb3V0OgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJtYXBfaXRlbS0+bW07CisJdW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLT5hZGRyZXNzOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChrc21fdGVzdF9leGl0KG1tKSkKKwkJZ290byBvdXQ7CisJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOworCWlmICghdm1hIHx8IHZtYS0+dm1fc3RhcnQgPiBhZGRyKQorCQlnb3RvIG91dDsKKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLT5hbm9uX3ZtYSkKKwkJZ290byBvdXQ7CisKKwlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBhZGRyLCBGT0xMX0dFVCk7CisJaWYgKCFwYWdlKQorCQlnb3RvIG91dDsKKwlpZiAoUGFnZUFub24ocGFnZSkpIHsKKwkJZmx1c2hfYW5vbl9wYWdlKHZtYSwgcGFnZSwgYWRkcik7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKHBhZ2UpOworb3V0OgkJcGFnZSA9IE5VTEw7CisJfQorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHBhZ2U7Cit9CisKKy8qCisgKiBnZXRfa3NtX3BhZ2U6IGNoZWNrcyBpZiB0aGUgcGFnZSBhdCB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHJtYXBfaXRlbQorICogaXMgc3RpbGwgUGFnZUtzbSwgaW4gd2hpY2ggY2FzZSB3ZSBjYW4gdHJ1c3QgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2UsCisgKiBhbmQgaXQgcmV0dXJucyB0aGUgZ290dGVuIHBhZ2U7IGJ1dCBOVUxMIGlmIHRoZSBwYWdlIGhhcyBiZWVuIHphcHBlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfa3NtX3BhZ2Uoc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9IGdldF9tZXJnZWFibGVfcGFnZShybWFwX2l0ZW0pOworCWlmIChwYWdlICYmICFQYWdlS3NtKHBhZ2UpKSB7CisJCXB1dF9wYWdlKHBhZ2UpOworCQlwYWdlID0gTlVMTDsKKwl9CisJcmV0dXJuIHBhZ2U7Cit9CisKKy8qCisgKiBSZW1vdmluZyBybWFwX2l0ZW0gZnJvbSBzdGFibGUgb3IgdW5zdGFibGUgdHJlZS4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhbiB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhYmxlL3Vuc3RhYmxlIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlpZiAoaW5fc3RhYmxlX3RyZWUocm1hcF9pdGVtKSkgeworCQlzdHJ1Y3Qgcm1hcF9pdGVtICpuZXh0X2l0ZW0gPSBybWFwX2l0ZW0tPm5leHQ7CisKKwkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyAmIE5PREVfRkxBRykgeworCQkJaWYgKG5leHRfaXRlbSkgeworCQkJCXJiX3JlcGxhY2Vfbm9kZSgmcm1hcF9pdGVtLT5ub2RlLAorCQkJCQkJJm5leHRfaXRlbS0+bm9kZSwKKwkJCQkJCSZyb290X3N0YWJsZV90cmVlKTsKKwkJCQluZXh0X2l0ZW0tPmFkZHJlc3MgfD0gTk9ERV9GTEFHOworCQkJCWtzbV9wYWdlc19zaGFyaW5nLS07CisJCQl9IGVsc2UgeworCQkJCXJiX2VyYXNlKCZybWFwX2l0ZW0tPm5vZGUsICZyb290X3N0YWJsZV90cmVlKTsKKwkJCQlrc21fcGFnZXNfc2hhcmVkLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgcm1hcF9pdGVtICpwcmV2X2l0ZW0gPSBybWFwX2l0ZW0tPnByZXY7CisKKwkJCUJVR19PTihwcmV2X2l0ZW0tPm5leHQgIT0gcm1hcF9pdGVtKTsKKwkJCXByZXZfaXRlbS0+bmV4dCA9IG5leHRfaXRlbTsKKwkJCWlmIChuZXh0X2l0ZW0pIHsKKwkJCQlCVUdfT04obmV4dF9pdGVtLT5wcmV2ICE9IHJtYXBfaXRlbSk7CisJCQkJbmV4dF9pdGVtLT5wcmV2ID0gcm1hcF9pdGVtLT5wcmV2OworCQkJfQorCQkJa3NtX3BhZ2VzX3NoYXJpbmctLTsKKwkJfQorCisJCXJtYXBfaXRlbS0+bmV4dCA9IE5VTEw7CisKKwl9IGVsc2UgaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyAmIE5PREVfRkxBRykgeworCQl1bnNpZ25lZCBjaGFyIGFnZTsKKwkJLyoKKwkJICogVXN1YWxseSBrc21kIGNhbiBhbmQgbXVzdCBza2lwIHRoZSByYl9lcmFzZSwgYmVjYXVzZQorCQkgKiByb290X3Vuc3RhYmxlX3RyZWUgd2FzIGFscmVhZHkgcmVzZXQgdG8gUkJfUk9PVC4KKwkJICogQnV0IGJlIGNhcmVmdWwgd2hlbiBhbiBtbSBpcyBleGl0aW5nOiBkbyB0aGUgcmJfZXJhc2UKKwkJICogaWYgdGhpcyBybWFwX2l0ZW0gd2FzIGluc2VydGVkIGJ5IHRoaXMgc2NhbiwgcmF0aGVyCisJCSAqIHRoYW4gbGVmdCBvdmVyIGZyb20gYmVmb3JlLgorCQkgKi8KKwkJYWdlID0gKHVuc2lnbmVkIGNoYXIpKGtzbV9zY2FuLnNlcW5yIC0gcm1hcF9pdGVtLT5hZGRyZXNzKTsKKwkJQlVHX09OKGFnZSA+IDEpOworCQlpZiAoIWFnZSkKKwkJCXJiX2VyYXNlKCZybWFwX2l0ZW0tPm5vZGUsICZyb290X3Vuc3RhYmxlX3RyZWUpOworCQlrc21fcGFnZXNfdW5zaGFyZWQtLTsKKwl9CisKKwlybWFwX2l0ZW0tPmFkZHJlc3MgJj0gUEFHRV9NQVNLOworCisJY29uZF9yZXNjaGVkKCk7CQkvKiB3ZSdyZSBjYWxsZWQgZnJvbSBtYW55IGxvbmcgbG9vcHMgKi8KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RyYWlsaW5nX3JtYXBfaXRlbXMoc3RydWN0IG1tX3Nsb3QgKm1tX3Nsb3QsCisJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmN1cikKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwl3aGlsZSAoY3VyICE9ICZtbV9zbG90LT5ybWFwX2xpc3QpIHsKKwkJcm1hcF9pdGVtID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOworCQljdXIgPSBjdXItPm5leHQ7CisJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7CisJCWxpc3RfZGVsKCZybWFwX2l0ZW0tPmxpbmspOworCQlmcmVlX3JtYXBfaXRlbShybWFwX2l0ZW0pOworCX0KK30KKworLyoKKyAqIFRob3VnaCBpdCdzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pcyByYXRoZXIKKyAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2Vzbid0IHF1aXRlIHdvcmsgZm9yCisgKiB0aGF0IC0gYW4gcm1hcF9pdGVtIGlzIGFzc2lnbmVkIHRvIHRoZSBzdGFibGUgdHJlZSBhZnRlciBpbnNlcnRpbmcga3NtCisgKiBwYWdlIGFuZCB1cHBpbmcgbW1hcF9zZW0uICBOb3IgZG9lcyBpdCBmaXQgd2l0aCB0aGUgd2F5IHdlIHNraXAgZHVwJ2luZworICogcm1hcF9pdGVtcyBmcm9tIHBhcmVudCB0byBjaGlsZCBhdCBmb3JrIHRpbWUgKHNvIGFzIG5vdCB0byB3YXN0ZSB0aW1lCisgKiBpZiBleGl0IGNvbWVzIGJlZm9yZSB0aGUgbmV4dCBzY2FuIHJlYWNoZXMgaXQpLgorICoKKyAqIFNpbWlsYXJseSwgYWx0aG91Z2ggd2UnZCBsaWtlIHRvIHJlbW92ZSBybWFwX2l0ZW1zIChzbyB1cGRhdGluZyBjb3VudHMKKyAqIGFuZCBmcmVlaW5nIG1lbW9yeSkgd2hlbiB1bm1lcmdpbmcgYW4gYXJlYSwgaXQncyBlYXNpZXIgdG8gbGVhdmUgdGhhdAorICogdG8gdGhlIG5leHQgcGFzcyBvZiBrc21kIC0gY29uc2lkZXIsIGZvciBleGFtcGxlLCBob3cga3NtZCBtaWdodCBiZQorICogaW4gY21wX2FuZF9tZXJnZV9wYWdlIG9uIG9uZSBvZiB0aGUgcm1hcF9pdGVtcyB3ZSB3b3VsZCBiZSByZW1vdmluZy4KKyAqLworc3RhdGljIGludCB1bm1lcmdlX2tzbV9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBlcnIgPSAwOworCisJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQgJiYgIWVycjsgYWRkciArPSBQQUdFX1NJWkUpIHsKKwkJaWYgKGtzbV90ZXN0X2V4aXQodm1hLT52bV9tbSkpCisJCQlicmVhazsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJZXJyID0gLUVSRVNUQVJUU1lTOworCQllbHNlCisJCQllcnIgPSBicmVha19rc20odm1hLCBhZGRyKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19TWVNGUworLyoKKyAqIE9ubHkgY2FsbGVkIHRocm91Z2ggdGhlIHN5c2ZzIGNvbnRyb2wgaW50ZXJmYWNlOgorICovCitzdGF0aWMgaW50IHVubWVyZ2VfYW5kX3JlbW92ZV9hbGxfcm1hcF9pdGVtcyh2b2lkKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWludCBlcnIgPSAwOworCisJc3Bpbl9sb2NrKCZrc21fbW1saXN0X2xvY2spOworCWtzbV9zY2FuLm1tX3Nsb3QgPSBsaXN0X2VudHJ5KGtzbV9tbV9oZWFkLm1tX2xpc3QubmV4dCwKKwkJCQkJCXN0cnVjdCBtbV9zbG90LCBtbV9saXN0KTsKKwlzcGluX3VubG9jaygma3NtX21tbGlzdF9sb2NrKTsKKworCWZvciAobW1fc2xvdCA9IGtzbV9zY2FuLm1tX3Nsb3Q7CisJCQltbV9zbG90ICE9ICZrc21fbW1faGVhZDsgbW1fc2xvdCA9IGtzbV9zY2FuLm1tX3Nsb3QpIHsKKwkJbW0gPSBtbV9zbG90LT5tbTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQkJaWYgKGtzbV90ZXN0X2V4aXQobW0pKQorCQkJCWJyZWFrOworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX01FUkdFQUJMRSkgfHwgIXZtYS0+YW5vbl92bWEpCisJCQkJY29udGludWU7CisJCQllcnIgPSB1bm1lcmdlX2tzbV9wYWdlcyh2bWEsCisJCQkJCQl2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlyZW1vdmVfdHJhaWxpbmdfcm1hcF9pdGVtcyhtbV9zbG90LCBtbV9zbG90LT5ybWFwX2xpc3QubmV4dCk7CisKKwkJc3Bpbl9sb2NrKCZrc21fbW1saXN0X2xvY2spOworCQlrc21fc2Nhbi5tbV9zbG90ID0gbGlzdF9lbnRyeShtbV9zbG90LT5tbV9saXN0Lm5leHQsCisJCQkJCQlzdHJ1Y3QgbW1fc2xvdCwgbW1fbGlzdCk7CisJCWlmIChrc21fdGVzdF9leGl0KG1tKSkgeworCQkJaGxpc3RfZGVsKCZtbV9zbG90LT5saW5rKTsKKwkJCWxpc3RfZGVsKCZtbV9zbG90LT5tbV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworCisJCQlmcmVlX21tX3Nsb3QobW1fc2xvdCk7CisJCQljbGVhcl9iaXQoTU1GX1ZNX01FUkdFQUJMRSwgJm1tLT5mbGFncyk7CisJCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkJbW1kcm9wKG1tKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJfQorCX0KKworCWtzbV9zY2FuLnNlcW5yID0gMDsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJa3NtX3NjYW4ubW1fc2xvdCA9ICZrc21fbW1faGVhZDsKKwlzcGluX3VubG9jaygma3NtX21tbGlzdF9sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLworCitzdGF0aWMgdTMyIGNhbGNfY2hlY2tzdW0oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdTMyIGNoZWNrc3VtOworCXZvaWQgKmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJY2hlY2tzdW0gPSBqaGFzaDIoYWRkciwgUEFHRV9TSVpFIC8gNCwgMTcpOworCWt1bm1hcF9hdG9taWMoYWRkciwgS01fVVNFUjApOworCXJldHVybiBjaGVja3N1bTsKK30KKworc3RhdGljIGludCBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpCit7CisJY2hhciAqYWRkcjEsICphZGRyMjsKKwlpbnQgcmV0OworCisJYWRkcjEgPSBrbWFwX2F0b21pYyhwYWdlMSwgS01fVVNFUjApOworCWFkZHIyID0ga21hcF9hdG9taWMocGFnZTIsIEtNX1VTRVIxKTsKKwlyZXQgPSBtZW1jbXAoYWRkcjEsIGFkZHIyLCBQQUdFX1NJWkUpOworCWt1bm1hcF9hdG9taWMoYWRkcjIsIEtNX1VTRVIxKTsKKwlrdW5tYXBfYXRvbWljKGFkZHIxLCBLTV9VU0VSMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFnZXNfaWRlbnRpY2FsKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKQoreworCXJldHVybiAhbWVtY21wX3BhZ2VzKHBhZ2UxLCBwYWdlMik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcHJvdGVjdF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgIHB0ZV90ICpvcmlnX3B0ZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXB0ZV90ICpwdGVwOworCXNwaW5sb2NrX3QgKnB0bDsKKwlpbnQgc3dhcHBlZDsKKwlpbnQgZXJyID0gLUVGQVVMVDsKKworCWFkZHIgPSBwYWdlX2FkZHJlc3NfaW5fdm1hKHBhZ2UsIHZtYSk7CisJaWYgKGFkZHIgPT0gLUVGQVVMVCkKKwkJZ290byBvdXQ7CisKKwlwdGVwID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIG1tLCBhZGRyLCAmcHRsLCAwKTsKKwlpZiAoIXB0ZXApCisJCWdvdG8gb3V0OworCisJaWYgKHB0ZV93cml0ZSgqcHRlcCkpIHsKKwkJcHRlX3QgZW50cnk7CisKKwkJc3dhcHBlZCA9IFBhZ2VTd2FwQ2FjaGUocGFnZSk7CisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJCS8qCisJCSAqIE9rIHRoaXMgaXMgdHJpY2t5LCB3aGVuIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBydW4gaXQgZG9lc250CisJCSAqIHRha2UgYW55IGxvY2ssIHRoZXJlZm9yZSB0aGUgY2hlY2sgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gbWFrZQorCQkgKiB3aXRoIHRoZSBwYWdlY291bnQgYWdhaW5zdCB0aGUgbWFwY291bnQgaXMgcmFjZXkgYW5kCisJCSAqIE9fRElSRUNUIGNhbiBoYXBwZW4gcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLgorCQkgKiBTbyB3ZSBjbGVhciB0aGUgcHRlIGFuZCBmbHVzaCB0aGUgdGxiIGJlZm9yZSB0aGUgY2hlY2sKKwkJICogdGhpcyBhc3N1cmUgdXMgdGhhdCBubyBPX0RJUkVDVCBjYW4gaGFwcGVuIGFmdGVyIHRoZSBjaGVjaworCQkgKiBvciBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjaGVjay4KKwkJICovCisJCWVudHJ5ID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHIsIHB0ZXApOworCQkvKgorCQkgKiBDaGVjayB0aGF0IG5vIE9fRElSRUNUIG9yIHNpbWlsYXIgSS9PIGlzIGluIHByb2dyZXNzIG9uIHRoZQorCQkgKiBwYWdlCisJCSAqLworCQlpZiAoKHBhZ2VfbWFwY291bnQocGFnZSkgKyAyICsgc3dhcHBlZCkgIT0gcGFnZV9jb3VudChwYWdlKSkgeworCQkJc2V0X3B0ZV9hdF9ub3RpZnkobW0sIGFkZHIsIHB0ZXAsIGVudHJ5KTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCQllbnRyeSA9IHB0ZV93cnByb3RlY3QoZW50cnkpOworCQlzZXRfcHRlX2F0X25vdGlmeShtbSwgYWRkciwgcHRlcCwgZW50cnkpOworCX0KKwkqb3JpZ19wdGUgPSAqcHRlcDsKKwllcnIgPSAwOworCitvdXRfdW5sb2NrOgorCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHJlcGxhY2VfcGFnZSAtIHJlcGxhY2UgcGFnZSBpbiB2bWEgYnkgbmV3IGtzbSBwYWdlCisgKiBAdm1hOiAgICAgIHZtYSB0aGF0IGhvbGRzIHRoZSBwdGUgcG9pbnRpbmcgdG8gb2xkcGFnZQorICogQG9sZHBhZ2U6ICB0aGUgcGFnZSB3ZSBhcmUgcmVwbGFjaW5nIGJ5IG5ld3BhZ2UKKyAqIEBuZXdwYWdlOiAgdGhlIGtzbSBwYWdlIHdlIHJlcGxhY2Ugb2xkcGFnZSBieQorICogQG9yaWdfcHRlOiB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIHB0ZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUZBVUxUIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcmVwbGFjZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqb2xkcGFnZSwKKwkJCXN0cnVjdCBwYWdlICpuZXdwYWdlLCBwdGVfdCBvcmlnX3B0ZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZXA7CisJc3BpbmxvY2tfdCAqcHRsOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlwZ3Byb3RfdCBwcm90OworCWludCBlcnIgPSAtRUZBVUxUOworCisJcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyAmIH5WTV9XUklURSk7CisKKwlhZGRyID0gcGFnZV9hZGRyZXNzX2luX3ZtYShvbGRwYWdlLCB2bWEpOworCWlmIChhZGRyID09IC1FRkFVTFQpCisJCWdvdG8gb3V0OworCisJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CisJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKKwkJZ290byBvdXQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKKwkJZ290byBvdXQ7CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkKKwkJZ290byBvdXQ7CisKKwlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlpZiAoIXB0ZV9zYW1lKCpwdGVwLCBvcmlnX3B0ZSkpIHsKKwkJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOworCQlnb3RvIG91dDsKKwl9CisKKwlnZXRfcGFnZShuZXdwYWdlKTsKKwlwYWdlX2FkZF9rc21fcm1hcChuZXdwYWdlKTsKKworCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKCpwdGVwKSk7CisJcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHIsIHB0ZXApOworCXNldF9wdGVfYXRfbm90aWZ5KG1tLCBhZGRyLCBwdGVwLCBta19wdGUobmV3cGFnZSwgcHJvdCkpOworCisJcGFnZV9yZW1vdmVfcm1hcChvbGRwYWdlKTsKKwlwdXRfcGFnZShvbGRwYWdlKTsKKworCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2UgLSB0YWtlIHR3byBwYWdlcyBhbmQgbWVyZ2UgdGhlbSBpbnRvIG9uZQorICogQHZtYTogdGhlIHZtYSB0aGF0IGhvbGQgdGhlIHB0ZSBwb2ludGluZyBpbnRvIG9sZHBhZ2UKKyAqIEBvbGRwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIHdhbnQgdG8gcmVwbGFjZSB3aXRoIG5ld3BhZ2UKKyAqIEBuZXdwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIHdhbnQgdG8gbWFwIGluc3RlYWQgb2Ygb2xkcGFnZQorICoKKyAqIE5vdGU6CisgKiBvbGRwYWdlIHNob3VsZCBiZSBhIFBhZ2VBbm9uIHBhZ2UsIHdoaWxlIG5ld3BhZ2Ugc2hvdWxkIGJlIGEgUGFnZUtzbSBwYWdlLAorICogb3IgYSBuZXdseSBhbGxvY2F0ZWQga2VybmVsIHBhZ2Ugd2hpY2ggcGFnZV9hZGRfa3NtX3JtYXAgd2lsbCBtYWtlIFBhZ2VLc20uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIHBhZ2VzIHdlcmUgbWVyZ2VkLCAtRUZBVUxUIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJIHN0cnVjdCBwYWdlICpvbGRwYWdlLAorCQkJCSBzdHJ1Y3QgcGFnZSAqbmV3cGFnZSkKK3sKKwlwdGVfdCBvcmlnX3B0ZSA9IF9fcHRlKDApOworCWludCBlcnIgPSAtRUZBVUxUOworCisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX01FUkdFQUJMRSkpCisJCWdvdG8gb3V0OworCisJaWYgKCFQYWdlQW5vbihvbGRwYWdlKSkKKwkJZ290byBvdXQ7CisKKwlnZXRfcGFnZShuZXdwYWdlKTsKKwlnZXRfcGFnZShvbGRwYWdlKTsKKworCS8qCisJICogV2UgbmVlZCB0aGUgcGFnZSBsb2NrIHRvIHJlYWQgYSBzdGFibGUgUGFnZVN3YXBDYWNoZSBpbgorCSAqIHdyaXRlX3Byb3RlY3RfcGFnZSgpLiAgV2UgdXNlIHRyeWxvY2tfcGFnZSgpIGluc3RlYWQgb2YKKwkgKiBsb2NrX3BhZ2UoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBoZXJlIC0gd2UKKwkgKiBwcmVmZXIgdG8gY29udGludWUgc2Nhbm5pbmcgYW5kIG1lcmdpbmcgZGlmZmVyZW50IHBhZ2VzLAorCSAqIHRoZW4gY29tZSBiYWNrIHRvIHRoaXMgcGFnZSB3aGVuIGl0IGlzIHVubG9ja2VkLgorCSAqLworCWlmICghdHJ5bG9ja19wYWdlKG9sZHBhZ2UpKQorCQlnb3RvIG91dF9wdXRwYWdlOworCS8qCisJICogSWYgdGhpcyBhbm9ueW1vdXMgcGFnZSBpcyBtYXBwZWQgb25seSBoZXJlLCBpdHMgcHRlIG1heSBuZWVkCisJICogdG8gYmUgd3JpdGUtcHJvdGVjdGVkLiAgSWYgaXQncyBtYXBwZWQgZWxzZXdoZXJlLCBhbGwgb2YgaXRzCisJICogcHRlcyBhcmUgbmVjZXNzYXJpbHkgYWxyZWFkeSB3cml0ZS1wcm90ZWN0ZWQuICBCdXQgaW4gZWl0aGVyCisJICogY2FzZSwgd2UgbmVlZCB0byBsb2NrIGFuZCBjaGVjayBwYWdlX2NvdW50IGlzIG5vdCByYWlzZWQuCisJICovCisJaWYgKHdyaXRlX3Byb3RlY3RfcGFnZSh2bWEsIG9sZHBhZ2UsICZvcmlnX3B0ZSkpIHsKKwkJdW5sb2NrX3BhZ2Uob2xkcGFnZSk7CisJCWdvdG8gb3V0X3B1dHBhZ2U7CisJfQorCXVubG9ja19wYWdlKG9sZHBhZ2UpOworCisJaWYgKHBhZ2VzX2lkZW50aWNhbChvbGRwYWdlLCBuZXdwYWdlKSkKKwkJZXJyID0gcmVwbGFjZV9wYWdlKHZtYSwgb2xkcGFnZSwgbmV3cGFnZSwgb3JpZ19wdGUpOworCitvdXRfcHV0cGFnZToKKwlwdXRfcGFnZShvbGRwYWdlKTsKKwlwdXRfcGFnZShuZXdwYWdlKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UgLSBsaWtlIHRyeV90b19tZXJnZV90d29fcGFnZXMsCisgKiBidXQgbm8gbmV3IGtlcm5lbCBwYWdlIGlzIGFsbG9jYXRlZDoga3BhZ2UgbXVzdCBhbHJlYWR5IGJlIGEga3NtIHBhZ2UuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0xLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjEsCisJCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UxLAorCQkJCSAgICAgIHN0cnVjdCBwYWdlICprcGFnZSkKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlpbnQgZXJyID0gLUVGQVVMVDsKKworCWRvd25fcmVhZCgmbW0xLT5tbWFwX3NlbSk7CisJaWYgKGtzbV90ZXN0X2V4aXQobW0xKSkKKwkJZ290byBvdXQ7CisKKwl2bWEgPSBmaW5kX3ZtYShtbTEsIGFkZHIxKTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcjEpCisJCWdvdG8gb3V0OworCisJZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZTEsIGtwYWdlKTsKK291dDoKKwl1cF9yZWFkKCZtbTEtPm1tYXBfc2VtKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdHJ5X3RvX21lcmdlX3R3b19wYWdlcyAtIHRha2UgdHdvIGlkZW50aWNhbCBwYWdlcyBhbmQgcHJlcGFyZSB0aGVtCisgKiB0byBiZSBtZXJnZWQgaW50byBvbmUgcGFnZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB3ZSBzdWNjZXNzZnVsbHkgbWFwcGVkIHR3byBpZGVudGljYWwgcGFnZXMKKyAqIGludG8gb25lIHBhZ2UsIC1FRkFVTFQgb3RoZXJ3aXNlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBrZXJuZWwgcGFnZTogaWYgb25lIG9mIHRoZSBwYWdlcworICogaXMgYWxyZWFkeSBhIGtzbSBwYWdlLCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSBzaG91bGQgYmUgdXNlZC4KKyAqLworc3RhdGljIGludCB0cnlfdG9fbWVyZ2VfdHdvX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tMSwgdW5zaWduZWQgbG9uZyBhZGRyMSwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IG1tX3N0cnVjdCAqbW0yLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyMiwgc3RydWN0IHBhZ2UgKnBhZ2UyKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBwYWdlICprcGFnZTsKKwlpbnQgZXJyID0gLUVGQVVMVDsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgc3RhYmxlIHRyZWUKKwkgKiBpcyB0aGUgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0aGF0IHdlIGhvbGQuCisJICovCisJaWYgKGtzbV9tYXhfa2VybmVsX3BhZ2VzICYmCisJICAgIGtzbV9tYXhfa2VybmVsX3BhZ2VzIDw9IGtzbV9wYWdlc19zaGFyZWQpCisJCXJldHVybiBlcnI7CisKKwlrcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTsKKwlpZiAoIWtwYWdlKQorCQlyZXR1cm4gZXJyOworCisJZG93bl9yZWFkKCZtbTEtPm1tYXBfc2VtKTsKKwlpZiAoa3NtX3Rlc3RfZXhpdChtbTEpKSB7CisJCXVwX3JlYWQoJm1tMS0+bW1hcF9zZW0pOworCQlnb3RvIG91dDsKKwl9CisJdm1hID0gZmluZF92bWEobW0xLCBhZGRyMSk7CisJaWYgKCF2bWEgfHwgdm1hLT52bV9zdGFydCA+IGFkZHIxKSB7CisJCXVwX3JlYWQoJm1tMS0+bW1hcF9zZW0pOworCQlnb3RvIG91dDsKKwl9CisKKwljb3B5X3VzZXJfaGlnaHBhZ2Uoa3BhZ2UsIHBhZ2UxLCBhZGRyMSwgdm1hKTsKKwllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlMSwga3BhZ2UpOworCXVwX3JlYWQoJm1tMS0+bW1hcF9zZW0pOworCisJaWYgKCFlcnIpIHsKKwkJZXJyID0gdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UobW0yLCBhZGRyMiwgcGFnZTIsIGtwYWdlKTsKKwkJLyoKKwkJICogSWYgdGhhdCBmYWlscywgd2UgaGF2ZSBhIGtzbSBwYWdlIHdpdGggb25seSBvbmUgcHRlCisJCSAqIHBvaW50aW5nIHRvIGl0OiBzbyBicmVhayBpdC4KKwkJICovCisJCWlmIChlcnIpCisJCQlicmVha19jb3cobW0xLCBhZGRyMSk7CisJfQorb3V0OgorCXB1dF9wYWdlKGtwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogc3RhYmxlX3RyZWVfc2VhcmNoIC0gc2VhcmNoIHBhZ2UgaW5zaWRlIHRoZSBzdGFibGUgdHJlZQorICogQHBhZ2U6IHRoZSBwYWdlIHRoYXQgd2UgYXJlIHNlYXJjaGluZyBpZGVudGljYWwgcGFnZXMgdG8uCisgKiBAcGFnZTI6IHBvaW50ZXIgaW50byBpZGVudGljYWwgcGFnZSB0aGF0IHdlIGFyZSBob2xkaW5nIGluc2lkZSB0aGUgc3RhYmxlCisgKgkgICB0cmVlIHRoYXQgd2UgaGF2ZSBmb3VuZC4KKyAqIEBybWFwX2l0ZW06IHRoZSByZXZlcnNlIG1hcHBpbmcgaXRlbQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZXJlIGlzIGEgcGFnZSBpbnNpZGUgdGhlIHN0YWJsZSB0cmVlCisgKiB3aXRoIGlkZW50aWNhbCBjb250ZW50IHRvIHRoZSBwYWdlIHRoYXQgd2UgYXJlIHNjYW5uaW5nIHJpZ2h0IG5vdy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybiBybWFwX2l0ZW0gcG9pbnRlciB0byB0aGUgaWRlbnRpY2FsIGl0ZW0gaWYgZm91bmQsCisgKiBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnN0YWJsZV90cmVlX3NlYXJjaChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZTIsCisJCQkJCSAgICBzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0pCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290X3N0YWJsZV90cmVlLnJiX25vZGU7CisKKwl3aGlsZSAobm9kZSkgeworCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSwgKm5leHRfcm1hcF9pdGVtOworCQlpbnQgcmV0OworCisJCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7CisJCXdoaWxlICh0cmVlX3JtYXBfaXRlbSkgeworCQkJQlVHX09OKCFpbl9zdGFibGVfdHJlZSh0cmVlX3JtYXBfaXRlbSkpOworCQkJY29uZF9yZXNjaGVkKCk7CisJCQlwYWdlMlswXSA9IGdldF9rc21fcGFnZSh0cmVlX3JtYXBfaXRlbSk7CisJCQlpZiAocGFnZTJbMF0pCisJCQkJYnJlYWs7CisJCQluZXh0X3JtYXBfaXRlbSA9IHRyZWVfcm1hcF9pdGVtLT5uZXh0OworCQkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUodHJlZV9ybWFwX2l0ZW0pOworCQkJdHJlZV9ybWFwX2l0ZW0gPSBuZXh0X3JtYXBfaXRlbTsKKwkJfQorCQlpZiAoIXRyZWVfcm1hcF9pdGVtKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJcmV0ID0gbWVtY21wX3BhZ2VzKHBhZ2UsIHBhZ2UyWzBdKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJcHV0X3BhZ2UocGFnZTJbMF0pOworCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAocmV0ID4gMCkgeworCQkJcHV0X3BhZ2UocGFnZTJbMF0pOworCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OworCQl9IGVsc2UgeworCQkJcmV0dXJuIHRyZWVfcm1hcF9pdGVtOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBzdGFibGVfdHJlZV9pbnNlcnQgLSBpbnNlcnQgcm1hcF9pdGVtIHBvaW50aW5nIHRvIG5ldyBrc20gcGFnZQorICogaW50byB0aGUgc3RhYmxlIHRyZWUuCisgKgorICogQHBhZ2U6IHRoZSBwYWdlIHRoYXQgd2UgYXJlIHNlYXJjaGluZyBpZGVudGljYWwgcGFnZSB0byBpbnNpZGUgdGhlIHN0YWJsZQorICoJICB0cmVlLgorICogQHJtYXBfaXRlbTogcG9pbnRlciB0byB0aGUgcmV2ZXJzZSBtYXBwaW5nIGl0ZW0uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJtYXBfaXRlbSBpZiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnN0YWJsZV90cmVlX2luc2VydChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgIHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZyb290X3N0YWJsZV90cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisKKwl3aGlsZSAoKm5ldykgeworCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSwgKm5leHRfcm1hcF9pdGVtOworCQlzdHJ1Y3QgcGFnZSAqdHJlZV9wYWdlOworCQlpbnQgcmV0OworCisJCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkoKm5ldywgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7CisJCXdoaWxlICh0cmVlX3JtYXBfaXRlbSkgeworCQkJQlVHX09OKCFpbl9zdGFibGVfdHJlZSh0cmVlX3JtYXBfaXRlbSkpOworCQkJY29uZF9yZXNjaGVkKCk7CisJCQl0cmVlX3BhZ2UgPSBnZXRfa3NtX3BhZ2UodHJlZV9ybWFwX2l0ZW0pOworCQkJaWYgKHRyZWVfcGFnZSkKKwkJCQlicmVhazsKKwkJCW5leHRfcm1hcF9pdGVtID0gdHJlZV9ybWFwX2l0ZW0tPm5leHQ7CisJCQlyZW1vdmVfcm1hcF9pdGVtX2Zyb21fdHJlZSh0cmVlX3JtYXBfaXRlbSk7CisJCQl0cmVlX3JtYXBfaXRlbSA9IG5leHRfcm1hcF9pdGVtOworCQl9CisJCWlmICghdHJlZV9ybWFwX2l0ZW0pCisJCQlyZXR1cm4gTlVMTDsKKworCQlyZXQgPSBtZW1jbXBfcGFnZXMocGFnZSwgdHJlZV9wYWdlKTsKKwkJcHV0X3BhZ2UodHJlZV9wYWdlKTsKKworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocmV0IDwgMCkKKwkJCW5ldyA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJldCA+IDApCisJCQluZXcgPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogSXQgaXMgbm90IGEgYnVnIHRoYXQgc3RhYmxlX3RyZWVfc2VhcmNoKCkgZGlkbid0CisJCQkgKiBmaW5kIHRoaXMgbm9kZTogYmVjYXVzZSBhdCB0aGF0IHRpbWUgb3VyIHBhZ2Ugd2FzCisJCQkgKiBub3QgeWV0IHdyaXRlLXByb3RlY3RlZCwgc28gbWF5IGhhdmUgY2hhbmdlZCBzaW5jZS4KKwkJCSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlybWFwX2l0ZW0tPmFkZHJlc3MgfD0gTk9ERV9GTEFHIHwgU1RBQkxFX0ZMQUc7CisJcm1hcF9pdGVtLT5uZXh0ID0gTlVMTDsKKwlyYl9saW5rX25vZGUoJnJtYXBfaXRlbS0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmcm1hcF9pdGVtLT5ub2RlLCAmcm9vdF9zdGFibGVfdHJlZSk7CisKKwlrc21fcGFnZXNfc2hhcmVkKys7CisJcmV0dXJuIHJtYXBfaXRlbTsKK30KKworLyoKKyAqIHVuc3RhYmxlX3RyZWVfc2VhcmNoX2luc2VydCAtIHNlYXJjaCBhbmQgaW5zZXJ0IGl0ZW1zIGludG8gdGhlIHVuc3RhYmxlIHRyZWUuCisgKgorICogQHBhZ2U6IHRoZSBwYWdlIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHNlYXJjaCBmb3IgaWRlbnRpY2FsIHBhZ2Ugb3IgdG8gaW5zZXJ0CisgKgkgIGludG8gdGhlIHVuc3RhYmxlIHRyZWUKKyAqIEBwYWdlMjogcG9pbnRlciBpbnRvIGlkZW50aWNhbCBwYWdlIHRoYXQgd2FzIGZvdW5kIGluc2lkZSB0aGUgdW5zdGFibGUgdHJlZQorICogQHJtYXBfaXRlbTogdGhlIHJldmVyc2UgbWFwcGluZyBpdGVtIG9mIHBhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhIHBhZ2UgaW4gdGhlIHVuc3RhYmxlIHRyZWUgaWRlbnRpY2FsIHRvIHRoZQorICogcGFnZSBjdXJyZW50bHkgYmVpbmcgc2Nhbm5lZDsgYW5kIGlmIG5vIGlkZW50aWNhbCBwYWdlIGlzIGZvdW5kIGluIHRoZQorICogdHJlZSwgd2UgaW5zZXJ0IHJtYXBfaXRlbSBhcyBhIG5ldyBvYmplY3QgaW50byB0aGUgdW5zdGFibGUgdHJlZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcG9pbnRlciB0byBybWFwX2l0ZW0gZm91bmQgdG8gYmUgaWRlbnRpY2FsCisgKiB0byB0aGUgY3VycmVudGx5IHNjYW5uZWQgcGFnZSwgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIGJvdGggc2VhcmNoaW5nIGFuZCBpbnNlcnRpbmcsIGJlY2F1c2UgdGhleSBzaGFyZQorICogdGhlIHNhbWUgd2Fsa2luZyBhbGdvcml0aG0gaW4gYW4gcmJ0cmVlLgorICovCitzdGF0aWMgc3RydWN0IHJtYXBfaXRlbSAqdW5zdGFibGVfdHJlZV9zZWFyY2hfaW5zZXJ0KHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkJc3RydWN0IHBhZ2UgKipwYWdlMiwKKwkJCQkJCXN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZyb290X3Vuc3RhYmxlX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKworCXdoaWxlICgqbmV3KSB7CisJCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOworCQlpbnQgcmV0OworCisJCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkoKm5ldywgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7CisJCXBhZ2UyWzBdID0gZ2V0X21lcmdlYWJsZV9wYWdlKHRyZWVfcm1hcF9pdGVtKTsKKwkJaWYgKCFwYWdlMlswXSkKKwkJCXJldHVybiBOVUxMOworCisJCS8qCisJCSAqIERvbid0IHN1YnN0aXR1dGUgYW4gdW5zd2FwcGFibGUga3NtIHBhZ2UKKwkJICoganVzdCBmb3Igb25lIGdvb2Qgc3dhcHBhYmxlIGZvcmtlZCBwYWdlLgorCQkgKi8KKwkJaWYgKHBhZ2UgPT0gcGFnZTJbMF0pIHsKKwkJCXB1dF9wYWdlKHBhZ2UyWzBdKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJcmV0ID0gbWVtY21wX3BhZ2VzKHBhZ2UsIHBhZ2UyWzBdKTsKKworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocmV0IDwgMCkgeworCQkJcHV0X3BhZ2UocGFnZTJbMF0pOworCQkJbmV3ID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJfSBlbHNlIGlmIChyZXQgPiAwKSB7CisJCQlwdXRfcGFnZShwYWdlMlswXSk7CisJCQluZXcgPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiB0cmVlX3JtYXBfaXRlbTsKKwkJfQorCX0KKworCXJtYXBfaXRlbS0+YWRkcmVzcyB8PSBOT0RFX0ZMQUc7CisJcm1hcF9pdGVtLT5hZGRyZXNzIHw9IChrc21fc2Nhbi5zZXFuciAmIFNFUU5SX01BU0spOworCXJiX2xpbmtfbm9kZSgmcm1hcF9pdGVtLT5ub2RlLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZybWFwX2l0ZW0tPm5vZGUsICZyb290X3Vuc3RhYmxlX3RyZWUpOworCisJa3NtX3BhZ2VzX3Vuc2hhcmVkKys7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBzdGFibGVfdHJlZV9hcHBlbmQgLSBhZGQgYW5vdGhlciBybWFwX2l0ZW0gdG8gdGhlIGxpbmtlZCBsaXN0IG9mCisgKiBybWFwX2l0ZW1zIGhhbmdpbmcgb2ZmIGEgZ2l2ZW4gbm9kZSBvZiB0aGUgc3RhYmxlIHRyZWUsIGFsbCBzaGFyaW5nCisgKiB0aGUgc2FtZSBrc20gcGFnZS4KKyAqLworc3RhdGljIHZvaWQgc3RhYmxlX3RyZWVfYXBwZW5kKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSwKKwkJCSAgICAgICBzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSkKK3sKKwlybWFwX2l0ZW0tPm5leHQgPSB0cmVlX3JtYXBfaXRlbS0+bmV4dDsKKwlybWFwX2l0ZW0tPnByZXYgPSB0cmVlX3JtYXBfaXRlbTsKKworCWlmICh0cmVlX3JtYXBfaXRlbS0+bmV4dCkKKwkJdHJlZV9ybWFwX2l0ZW0tPm5leHQtPnByZXYgPSBybWFwX2l0ZW07CisKKwl0cmVlX3JtYXBfaXRlbS0+bmV4dCA9IHJtYXBfaXRlbTsKKwlybWFwX2l0ZW0tPmFkZHJlc3MgfD0gU1RBQkxFX0ZMQUc7CisKKwlrc21fcGFnZXNfc2hhcmluZysrOworfQorCisvKgorICogY21wX2FuZF9tZXJnZV9wYWdlIC0gZmlyc3Qgc2VlIGlmIHBhZ2UgY2FuIGJlIG1lcmdlZCBpbnRvIHRoZSBzdGFibGUgdHJlZTsKKyAqIGlmIG5vdCwgY29tcGFyZSBjaGVja3N1bSB0byBwcmV2aW91cyBhbmQgaWYgaXQncyB0aGUgc2FtZSwgc2VlIGlmIHBhZ2UgY2FuCisgKiBiZSBpbnNlcnRlZCBpbnRvIHRoZSB1bnN0YWJsZSB0cmVlLCBvciBtZXJnZWQgd2l0aCBhIHBhZ2UgYWxyZWFkeSB0aGVyZSBhbmQKKyAqIGJvdGggdHJhbnNmZXJyZWQgdG8gdGhlIHN0YWJsZSB0cmVlLgorICoKKyAqIEBwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIGFyZSBzZWFyY2hpbmcgaWRlbnRpY2FsIHBhZ2UgdG8uCisgKiBAcm1hcF9pdGVtOiB0aGUgcmV2ZXJzZSBtYXBwaW5nIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGlzIHBhZ2UKKyAqLworc3RhdGljIHZvaWQgY21wX2FuZF9tZXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0pCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UyWzFdOworCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOworCXVuc2lnbmVkIGludCBjaGVja3N1bTsKKwlpbnQgZXJyOworCisJaWYgKGluX3N0YWJsZV90cmVlKHJtYXBfaXRlbSkpCisJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7CisKKwkvKiBXZSBmaXJzdCBzdGFydCB3aXRoIHNlYXJjaGluZyB0aGUgcGFnZSBpbnNpZGUgdGhlIHN0YWJsZSB0cmVlICovCisJdHJlZV9ybWFwX2l0ZW0gPSBzdGFibGVfdHJlZV9zZWFyY2gocGFnZSwgcGFnZTIsIHJtYXBfaXRlbSk7CisJaWYgKHRyZWVfcm1hcF9pdGVtKSB7CisJCWlmIChwYWdlID09IHBhZ2UyWzBdKQkJCS8qIGZvcmtlZCAqLworCQkJZXJyID0gMDsKKwkJZWxzZQorCQkJZXJyID0gdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uocm1hcF9pdGVtLT5tbSwKKwkJCQkJCQkgcm1hcF9pdGVtLT5hZGRyZXNzLAorCQkJCQkJCSBwYWdlLCBwYWdlMlswXSk7CisJCXB1dF9wYWdlKHBhZ2UyWzBdKTsKKworCQlpZiAoIWVycikgeworCQkJLyoKKwkJCSAqIFRoZSBwYWdlIHdhcyBzdWNjZXNzZnVsbHkgbWVyZ2VkOgorCQkJICogYWRkIGl0cyBybWFwX2l0ZW0gdG8gdGhlIHN0YWJsZSB0cmVlLgorCQkJICovCisJCQlzdGFibGVfdHJlZV9hcHBlbmQocm1hcF9pdGVtLCB0cmVlX3JtYXBfaXRlbSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogQSBrc20gcGFnZSBtaWdodCBoYXZlIGdvdCBoZXJlIGJ5IGZvcmssIGJ1dCBpdHMgb3RoZXIKKwkgKiByZWZlcmVuY2VzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3RhYmxlIHRyZWUuCisJICogT3IgaXQgbWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gYSBicmVha19rc20gd2hpY2ggZmFpbGVkCisJICogd2hlbiB0aGUgbWVtX2Nncm91cCBoYWQgcmVhY2hlZCBpdHMgbGltaXQ6IHRyeSBhZ2FpbiBub3cuCisJICovCisJaWYgKFBhZ2VLc20ocGFnZSkpCisJCWJyZWFrX2NvdyhybWFwX2l0ZW0tPm1tLCBybWFwX2l0ZW0tPmFkZHJlc3MpOworCisJLyoKKwkgKiBJbiBjYXNlIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBwYWdlIHdhcyBjaGFuZ2VkIGZyb20gdGhlIGxhc3QgdGltZSB3ZQorCSAqIGhhdmUgY2FsY3VsYXRlZCBpdCwgdGhpcyBwYWdlIHRvIGJlIGNoYW5nZWQgZnJlcXVlbHksIHRoZXJlZm9yZSB3ZQorCSAqIGRvbid0IHdhbnQgdG8gaW5zZXJ0IGl0IHRvIHRoZSB1bnN0YWJsZSB0cmVlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0bworCSAqIHdhc3RlIG91ciB0aW1lIHRvIHNlYXJjaCBpZiB0aGVyZSBpcyBzb21ldGhpbmcgaWRlbnRpY2FsIHRvIGl0IHRoZXJlLgorCSAqLworCWNoZWNrc3VtID0gY2FsY19jaGVja3N1bShwYWdlKTsKKwlpZiAocm1hcF9pdGVtLT5vbGRjaGVja3N1bSAhPSBjaGVja3N1bSkgeworCQlybWFwX2l0ZW0tPm9sZGNoZWNrc3VtID0gY2hlY2tzdW07CisJCXJldHVybjsKKwl9CisKKwl0cmVlX3JtYXBfaXRlbSA9IHVuc3RhYmxlX3RyZWVfc2VhcmNoX2luc2VydChwYWdlLCBwYWdlMiwgcm1hcF9pdGVtKTsKKwlpZiAodHJlZV9ybWFwX2l0ZW0pIHsKKwkJZXJyID0gdHJ5X3RvX21lcmdlX3R3b19wYWdlcyhybWFwX2l0ZW0tPm1tLAorCQkJCQkgICAgIHJtYXBfaXRlbS0+YWRkcmVzcywgcGFnZSwKKwkJCQkJICAgICB0cmVlX3JtYXBfaXRlbS0+bW0sCisJCQkJCSAgICAgdHJlZV9ybWFwX2l0ZW0tPmFkZHJlc3MsIHBhZ2UyWzBdKTsKKwkJLyoKKwkJICogQXMgc29vbiBhcyB3ZSBtZXJnZSB0aGlzIHBhZ2UsIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZQorCQkgKiBybWFwX2l0ZW0gb2YgdGhlIHBhZ2Ugd2UgaGF2ZSBtZXJnZWQgd2l0aCBmcm9tIHRoZSB1bnN0YWJsZQorCQkgKiB0cmVlLCBhbmQgaW5zZXJ0IGl0IGluc3RlYWQgYXMgbmV3IG5vZGUgaW4gdGhlIHN0YWJsZSB0cmVlLgorCQkgKi8KKwkJaWYgKCFlcnIpIHsKKwkJCXJiX2VyYXNlKCZ0cmVlX3JtYXBfaXRlbS0+bm9kZSwgJnJvb3RfdW5zdGFibGVfdHJlZSk7CisJCQl0cmVlX3JtYXBfaXRlbS0+YWRkcmVzcyAmPSB+Tk9ERV9GTEFHOworCQkJa3NtX3BhZ2VzX3Vuc2hhcmVkLS07CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBmYWlsIHRvIGluc2VydCB0aGUgcGFnZSBpbnRvIHRoZSBzdGFibGUgdHJlZSwKKwkJCSAqIHdlIHdpbGwgaGF2ZSAyIHZpcnR1YWwgYWRkcmVzc2VzIHRoYXQgYXJlIHBvaW50aW5nCisJCQkgKiB0byBhIGtzbSBwYWdlIGxlZnQgb3V0c2lkZSB0aGUgc3RhYmxlIHRyZWUsCisJCQkgKiBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYnJlYWtfY293IG9uIGJvdGguCisJCQkgKi8KKwkJCWlmIChzdGFibGVfdHJlZV9pbnNlcnQocGFnZTJbMF0sIHRyZWVfcm1hcF9pdGVtKSkKKwkJCQlzdGFibGVfdHJlZV9hcHBlbmQocm1hcF9pdGVtLCB0cmVlX3JtYXBfaXRlbSk7CisJCQllbHNlIHsKKwkJCQlicmVha19jb3codHJlZV9ybWFwX2l0ZW0tPm1tLAorCQkJCQkJdHJlZV9ybWFwX2l0ZW0tPmFkZHJlc3MpOworCQkJCWJyZWFrX2NvdyhybWFwX2l0ZW0tPm1tLCBybWFwX2l0ZW0tPmFkZHJlc3MpOworCQkJfQorCQl9CisKKwkJcHV0X3BhZ2UocGFnZTJbMF0pOworCX0KK30KKworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKmdldF9uZXh0X3JtYXBfaXRlbShzdHJ1Y3QgbW1fc2xvdCAqbW1fc2xvdCwKKwkJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmN1ciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwl3aGlsZSAoY3VyICE9ICZtbV9zbG90LT5ybWFwX2xpc3QpIHsKKwkJcm1hcF9pdGVtID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOworCQlpZiAoKHJtYXBfaXRlbS0+YWRkcmVzcyAmIFBBR0VfTUFTSykgPT0gYWRkcikgeworCQkJaWYgKCFpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pKQorCQkJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7CisJCQlyZXR1cm4gcm1hcF9pdGVtOworCQl9CisJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPiBhZGRyKQorCQkJYnJlYWs7CisJCWN1ciA9IGN1ci0+bmV4dDsKKwkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUocm1hcF9pdGVtKTsKKwkJbGlzdF9kZWwoJnJtYXBfaXRlbS0+bGluayk7CisJCWZyZWVfcm1hcF9pdGVtKHJtYXBfaXRlbSk7CisJfQorCisJcm1hcF9pdGVtID0gYWxsb2Nfcm1hcF9pdGVtKCk7CisJaWYgKHJtYXBfaXRlbSkgeworCQkvKiBJdCBoYXMgYWxyZWFkeSBiZWVuIHplcm9lZCAqLworCQlybWFwX2l0ZW0tPm1tID0gbW1fc2xvdC0+bW07CisJCXJtYXBfaXRlbS0+YWRkcmVzcyA9IGFkZHI7CisJCWxpc3RfYWRkX3RhaWwoJnJtYXBfaXRlbS0+bGluaywgY3VyKTsKKwl9CisJcmV0dXJuIHJtYXBfaXRlbTsKK30KKworc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnNjYW5fZ2V0X25leHRfcm1hcF9pdGVtKHN0cnVjdCBwYWdlICoqcGFnZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbW1fc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisKKwlpZiAobGlzdF9lbXB0eSgma3NtX21tX2hlYWQubW1fbGlzdCkpCisJCXJldHVybiBOVUxMOworCisJc2xvdCA9IGtzbV9zY2FuLm1tX3Nsb3Q7CisJaWYgKHNsb3QgPT0gJmtzbV9tbV9oZWFkKSB7CisJCXJvb3RfdW5zdGFibGVfdHJlZSA9IFJCX1JPT1Q7CisKKwkJc3Bpbl9sb2NrKCZrc21fbW1saXN0X2xvY2spOworCQlzbG90ID0gbGlzdF9lbnRyeShzbG90LT5tbV9saXN0Lm5leHQsIHN0cnVjdCBtbV9zbG90LCBtbV9saXN0KTsKKwkJa3NtX3NjYW4ubW1fc2xvdCA9IHNsb3Q7CisJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworbmV4dF9tbToKKwkJa3NtX3NjYW4uYWRkcmVzcyA9IDA7CisJCWtzbV9zY2FuLnJtYXBfaXRlbSA9IGxpc3RfZW50cnkoJnNsb3QtPnJtYXBfbGlzdCwKKwkJCQkJCXN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOworCX0KKworCW1tID0gc2xvdC0+bW07CisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChrc21fdGVzdF9leGl0KG1tKSkKKwkJdm1hID0gTlVMTDsKKwllbHNlCisJCXZtYSA9IGZpbmRfdm1hKG1tLCBrc21fc2Nhbi5hZGRyZXNzKTsKKworCWZvciAoOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgeworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTUVSR0VBQkxFKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoa3NtX3NjYW4uYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQpCisJCQlrc21fc2Nhbi5hZGRyZXNzID0gdm1hLT52bV9zdGFydDsKKwkJaWYgKCF2bWEtPmFub25fdm1hKQorCQkJa3NtX3NjYW4uYWRkcmVzcyA9IHZtYS0+dm1fZW5kOworCisJCXdoaWxlIChrc21fc2Nhbi5hZGRyZXNzIDwgdm1hLT52bV9lbmQpIHsKKwkJCWlmIChrc21fdGVzdF9leGl0KG1tKSkKKwkJCQlicmVhazsKKwkJCSpwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBrc21fc2Nhbi5hZGRyZXNzLCBGT0xMX0dFVCk7CisJCQlpZiAoKnBhZ2UgJiYgUGFnZUFub24oKnBhZ2UpKSB7CisJCQkJZmx1c2hfYW5vbl9wYWdlKHZtYSwgKnBhZ2UsIGtzbV9zY2FuLmFkZHJlc3MpOworCQkJCWZsdXNoX2RjYWNoZV9wYWdlKCpwYWdlKTsKKwkJCQlybWFwX2l0ZW0gPSBnZXRfbmV4dF9ybWFwX2l0ZW0oc2xvdCwKKwkJCQkJa3NtX3NjYW4ucm1hcF9pdGVtLT5saW5rLm5leHQsCisJCQkJCWtzbV9zY2FuLmFkZHJlc3MpOworCQkJCWlmIChybWFwX2l0ZW0pIHsKKwkJCQkJa3NtX3NjYW4ucm1hcF9pdGVtID0gcm1hcF9pdGVtOworCQkJCQlrc21fc2Nhbi5hZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJCQl9IGVsc2UKKwkJCQkJcHV0X3BhZ2UoKnBhZ2UpOworCQkJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCQkJcmV0dXJuIHJtYXBfaXRlbTsKKwkJCX0KKwkJCWlmICgqcGFnZSkKKwkJCQlwdXRfcGFnZSgqcGFnZSk7CisJCQlrc21fc2Nhbi5hZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJCWNvbmRfcmVzY2hlZCgpOworCQl9CisJfQorCisJaWYgKGtzbV90ZXN0X2V4aXQobW0pKSB7CisJCWtzbV9zY2FuLmFkZHJlc3MgPSAwOworCQlrc21fc2Nhbi5ybWFwX2l0ZW0gPSBsaXN0X2VudHJ5KCZzbG90LT5ybWFwX2xpc3QsCisJCQkJCQlzdHJ1Y3Qgcm1hcF9pdGVtLCBsaW5rKTsKKwl9CisJLyoKKwkgKiBOdWtlIGFsbCB0aGUgcm1hcF9pdGVtcyB0aGF0IGFyZSBhYm92ZSB0aGlzIGN1cnJlbnQgcm1hcDoKKwkgKiBiZWNhdXNlIHRoZXJlIHdlcmUgbm8gVk1fTUVSR0VBQkxFIHZtYXMgd2l0aCBzdWNoIGFkZHJlc3Nlcy4KKwkgKi8KKwlyZW1vdmVfdHJhaWxpbmdfcm1hcF9pdGVtcyhzbG90LCBrc21fc2Nhbi5ybWFwX2l0ZW0tPmxpbmsubmV4dCk7CisKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJa3NtX3NjYW4ubW1fc2xvdCA9IGxpc3RfZW50cnkoc2xvdC0+bW1fbGlzdC5uZXh0LAorCQkJCQkJc3RydWN0IG1tX3Nsb3QsIG1tX2xpc3QpOworCWlmIChrc21fc2Nhbi5hZGRyZXNzID09IDApIHsKKwkJLyoKKwkJICogV2UndmUgY29tcGxldGVkIGEgZnVsbCBzY2FuIG9mIGFsbCB2bWFzLCBob2xkaW5nIG1tYXBfc2VtCisJCSAqIHRocm91Z2hvdXQsIGFuZCBmb3VuZCBubyBWTV9NRVJHRUFCTEU6IHNvIGRvIHRoZSBzYW1lIGFzCisJCSAqIF9fa3NtX2V4aXQgZG9lcyB0byByZW1vdmUgdGhpcyBtbSBmcm9tIGFsbCBvdXIgbGlzdHMgbm93LgorCQkgKiBUaGlzIGFwcGxpZXMgZWl0aGVyIHdoZW4gY2xlYW5pbmcgdXAgYWZ0ZXIgX19rc21fZXhpdAorCQkgKiAoYnV0IGJld2FyZTogd2UgY2FuIHJlYWNoIGhlcmUgZXZlbiBiZWZvcmUgX19rc21fZXhpdCksCisJCSAqIG9yIHdoZW4gYWxsIFZNX01FUkdFQUJMRSBhcmVhcyBoYXZlIGJlZW4gdW5tYXBwZWQgKGFuZAorCQkgKiBtbWFwX3NlbSB0aGVuIHByb3RlY3RzIGFnYWluc3QgcmFjZSB3aXRoIE1BRFZfTUVSR0VBQkxFKS4KKwkJICovCisJCWhsaXN0X2RlbCgmc2xvdC0+bGluayk7CisJCWxpc3RfZGVsKCZzbG90LT5tbV9saXN0KTsKKwkJc3Bpbl91bmxvY2soJmtzbV9tbWxpc3RfbG9jayk7CisKKwkJZnJlZV9tbV9zbG90KHNsb3QpOworCQljbGVhcl9iaXQoTU1GX1ZNX01FUkdFQUJMRSwgJm1tLT5mbGFncyk7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCW1tZHJvcChtbSk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJfQorCisJLyogUmVwZWF0IHVudGlsIHdlJ3ZlIGNvbXBsZXRlZCBzY2FubmluZyB0aGUgd2hvbGUgbGlzdCAqLworCXNsb3QgPSBrc21fc2Nhbi5tbV9zbG90OworCWlmIChzbG90ICE9ICZrc21fbW1faGVhZCkKKwkJZ290byBuZXh0X21tOworCisJa3NtX3NjYW4uc2VxbnIrKzsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBrc21fZG9fc2NhbiAgLSB0aGUga3NtIHNjYW5uZXIgbWFpbiB3b3JrZXIgZnVuY3Rpb24uCisgKiBAc2Nhbl9ucGFnZXMgLSBudW1iZXIgb2YgcGFnZXMgd2Ugd2FudCB0byBzY2FuIGJlZm9yZSB3ZSByZXR1cm4uCisgKi8KK3N0YXRpYyB2b2lkIGtzbV9kb19zY2FuKHVuc2lnbmVkIGludCBzY2FuX25wYWdlcykKK3sKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwl3aGlsZSAoc2Nhbl9ucGFnZXMtLSkgeworCQljb25kX3Jlc2NoZWQoKTsKKwkJcm1hcF9pdGVtID0gc2Nhbl9nZXRfbmV4dF9ybWFwX2l0ZW0oJnBhZ2UpOworCQlpZiAoIXJtYXBfaXRlbSkKKwkJCXJldHVybjsKKwkJaWYgKCFQYWdlS3NtKHBhZ2UpIHx8ICFpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pKQorCQkJY21wX2FuZF9tZXJnZV9wYWdlKHBhZ2UsIHJtYXBfaXRlbSk7CisJCWVsc2UgaWYgKHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkgeworCQkJLyoKKwkJCSAqIFJlcGxhY2Ugbm93LXVuc2hhcmVkIGtzbSBwYWdlIGJ5IG9yZGluYXJ5IHBhZ2UuCisJCQkgKi8KKwkJCWJyZWFrX2NvdyhybWFwX2l0ZW0tPm1tLCBybWFwX2l0ZW0tPmFkZHJlc3MpOworCQkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUocm1hcF9pdGVtKTsKKwkJCXJtYXBfaXRlbS0+b2xkY2hlY2tzdW0gPSBjYWxjX2NoZWNrc3VtKHBhZ2UpOworCQl9CisJCXB1dF9wYWdlKHBhZ2UpOworCX0KK30KKworc3RhdGljIGludCBrc21kX3Nob3VsZF9ydW4odm9pZCkKK3sKKwlyZXR1cm4gKGtzbV9ydW4gJiBLU01fUlVOX01FUkdFKSAmJiAhbGlzdF9lbXB0eSgma3NtX21tX2hlYWQubW1fbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQga3NtX3NjYW5fdGhyZWFkKHZvaWQgKm5vdGhpbmcpCit7CisJc2V0X3VzZXJfbmljZShjdXJyZW50LCA1KTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCW11dGV4X2xvY2soJmtzbV90aHJlYWRfbXV0ZXgpOworCQlpZiAoa3NtZF9zaG91bGRfcnVuKCkpCisJCQlrc21fZG9fc2Nhbihrc21fdGhyZWFkX3BhZ2VzX3RvX3NjYW4pOworCQltdXRleF91bmxvY2soJmtzbV90aHJlYWRfbXV0ZXgpOworCisJCWlmIChrc21kX3Nob3VsZF9ydW4oKSkgeworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoa3NtX3RocmVhZF9zbGVlcF9taWxsaXNlY3MpKTsKKwkJfSBlbHNlIHsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShrc21fdGhyZWFkX3dhaXQsCisJCQkJa3NtZF9zaG91bGRfcnVuKCkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCWludCBlcnI7CisKKwlzd2l0Y2ggKGFkdmljZSkgeworCWNhc2UgTUFEVl9NRVJHRUFCTEU6CisJCS8qCisJCSAqIEJlIHNvbWV3aGF0IG92ZXItcHJvdGVjdGl2ZSBmb3Igbm93IQorCQkgKi8KKwkJaWYgKCp2bV9mbGFncyAmIChWTV9NRVJHRUFCTEUgfCBWTV9TSEFSRUQgIHwgVk1fTUFZU0hBUkUgICB8CisJCQkJIFZNX1BGTk1BUCAgICB8IFZNX0lPICAgICAgfCBWTV9ET05URVhQQU5EIHwKKwkJCQkgVk1fUkVTRVJWRUQgIHwgVk1fSFVHRVRMQiB8IFZNX0lOU0VSVFBBR0UgfAorCQkJCSBWTV9NSVhFRE1BUCAgfCBWTV9TQU8pKQorCQkJcmV0dXJuIDA7CQkvKiBqdXN0IGlnbm9yZSB0aGUgYWR2aWNlICovCisKKwkJaWYgKCF0ZXN0X2JpdChNTUZfVk1fTUVSR0VBQkxFLCAmbW0tPmZsYWdzKSkgeworCQkJZXJyID0gX19rc21fZW50ZXIobW0pOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJKnZtX2ZsYWdzIHw9IFZNX01FUkdFQUJMRTsKKwkJYnJlYWs7CisKKwljYXNlIE1BRFZfVU5NRVJHRUFCTEU6CisJCWlmICghKCp2bV9mbGFncyAmIFZNX01FUkdFQUJMRSkpCisJCQlyZXR1cm4gMDsJCS8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi8KKworCQlpZiAodm1hLT5hbm9uX3ZtYSkgeworCQkJZXJyID0gdW5tZXJnZV9rc21fcGFnZXModm1hLCBzdGFydCwgZW5kKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCSp2bV9mbGFncyAmPSB+Vk1fTUVSR0VBQkxFOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9fa3NtX2VudGVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCWludCBuZWVkc193YWtldXA7CisKKwltbV9zbG90ID0gYWxsb2NfbW1fc2xvdCgpOworCWlmICghbW1fc2xvdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBDaGVjayBrc21fcnVuIHRvbz8gIFdvdWxkIG5lZWQgdGlnaHRlciBsb2NraW5nICovCisJbmVlZHNfd2FrZXVwID0gbGlzdF9lbXB0eSgma3NtX21tX2hlYWQubW1fbGlzdCk7CisKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJaW5zZXJ0X3RvX21tX3Nsb3RzX2hhc2gobW0sIG1tX3Nsb3QpOworCS8qCisJICogSW5zZXJ0IGp1c3QgYmVoaW5kIHRoZSBzY2FubmluZyBjdXJzb3IsIHRvIGxldCB0aGUgYXJlYSBzZXR0bGUKKwkgKiBkb3duIGEgbGl0dGxlOyB3aGVuIGZvcmsgaXMgZm9sbG93ZWQgYnkgaW1tZWRpYXRlIGV4ZWMsIHdlIGRvbid0CisJICogd2FudCBrc21kIHRvIHdhc3RlIHRpbWUgc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIGFuIHJtYXBfbGlzdC4KKwkgKi8KKwlsaXN0X2FkZF90YWlsKCZtbV9zbG90LT5tbV9saXN0LCAma3NtX3NjYW4ubW1fc2xvdC0+bW1fbGlzdCk7CisJc3Bpbl91bmxvY2soJmtzbV9tbWxpc3RfbG9jayk7CisKKwlzZXRfYml0KE1NRl9WTV9NRVJHRUFCTEUsICZtbS0+ZmxhZ3MpOworCWF0b21pY19pbmMoJm1tLT5tbV9jb3VudCk7CisKKwlpZiAobmVlZHNfd2FrZXVwKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmtzbV90aHJlYWRfd2FpdCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2tzbV9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OworCWludCBlYXN5X3RvX2ZyZWUgPSAwOworCisJLyoKKwkgKiBUaGlzIHByb2Nlc3MgaXMgZXhpdGluZzogaWYgaXQncyBzdHJhaWdodGZvcndhcmQgKGFzIGlzIHRoZQorCSAqIGNhc2Ugd2hlbiBrc21kIHdhcyBuZXZlciBydW5uaW5nKSwgZnJlZSBtbV9zbG90IGltbWVkaWF0ZWx5LgorCSAqIEJ1dCBpZiBpdCdzIGF0IHRoZSBjdXJzb3Igb3IgaGFzIHJtYXBfaXRlbXMgbGlua2VkIHRvIGl0LCB1c2UKKwkgKiBtbWFwX3NlbSB0byBzeW5jaHJvbml6ZSB3aXRoIGFueSBicmVha19jb3dzIGJlZm9yZSBwYWdldGFibGVzCisJICogYXJlIGZyZWVkLCBhbmQgbGVhdmUgdGhlIG1tX3Nsb3Qgb24gdGhlIGxpc3QgZm9yIGtzbWQgdG8gZnJlZS4KKwkgKiBCZXdhcmU6IGtzbSBtYXkgYWxyZWFkeSBoYXZlIG5vdGljZWQgaXQgZXhpdGluZyBhbmQgZnJlZWQgdGhlIHNsb3QuCisJICovCisKKwlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJbW1fc2xvdCA9IGdldF9tbV9zbG90KG1tKTsKKwlpZiAobW1fc2xvdCAmJiBrc21fc2Nhbi5tbV9zbG90ICE9IG1tX3Nsb3QpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJm1tX3Nsb3QtPnJtYXBfbGlzdCkpIHsKKwkJCWhsaXN0X2RlbCgmbW1fc2xvdC0+bGluayk7CisJCQlsaXN0X2RlbCgmbW1fc2xvdC0+bW1fbGlzdCk7CisJCQllYXN5X3RvX2ZyZWUgPSAxOworCQl9IGVsc2UgeworCQkJbGlzdF9tb3ZlKCZtbV9zbG90LT5tbV9saXN0LAorCQkJCSAgJmtzbV9zY2FuLm1tX3Nsb3QtPm1tX2xpc3QpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOworCisJaWYgKGVhc3lfdG9fZnJlZSkgeworCQlmcmVlX21tX3Nsb3QobW1fc2xvdCk7CisJCWNsZWFyX2JpdChNTUZfVk1fTUVSR0VBQkxFLCAmbW0tPmZsYWdzKTsKKwkJbW1kcm9wKG1tKTsKKwl9IGVsc2UgaWYgKG1tX3Nsb3QpIHsKKwkJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NZU0ZTCisvKgorICogVGhpcyBhbGwgY29tcGlsZXMgd2l0aG91dCBDT05GSUdfU1lTRlMsIGJ1dCBpcyBhIHdhc3RlIG9mIHNwYWNlLgorICovCisKKyNkZWZpbmUgS1NNX0FUVFJfUk8oX25hbWUpIFwKKwlzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIF9uYW1lIyNfYXR0ciA9IF9fQVRUUl9STyhfbmFtZSkKKyNkZWZpbmUgS1NNX0FUVFIoX25hbWUpIFwKKwlzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIF9uYW1lIyNfYXR0ciA9IFwKKwkJX19BVFRSKF9uYW1lLCAwNjQ0LCBfbmFtZSMjX3Nob3csIF9uYW1lIyNfc3RvcmUpCisKK3N0YXRpYyBzc2l6ZV90IHNsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwga3NtX3RocmVhZF9zbGVlcF9taWxsaXNlY3MpOworfQorCitzdGF0aWMgc3NpemVfdCBzbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG1zZWNzOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbXNlY3MpOworCWlmIChlcnIgfHwgbXNlY3MgPiBVSU5UX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrc21fdGhyZWFkX3NsZWVwX21pbGxpc2VjcyA9IG1zZWNzOworCisJcmV0dXJuIGNvdW50OworfQorS1NNX0FUVFIoc2xlZXBfbWlsbGlzZWNzKTsKKworc3RhdGljIHNzaXplX3QgcGFnZXNfdG9fc2Nhbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGtzbV90aHJlYWRfcGFnZXNfdG9fc2Nhbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZucl9wYWdlcyk7CisJaWYgKGVyciB8fCBucl9wYWdlcyA+IFVJTlRfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtzbV90aHJlYWRfcGFnZXNfdG9fc2NhbiA9IG5yX3BhZ2VzOworCisJcmV0dXJuIGNvdW50OworfQorS1NNX0FUVFIocGFnZXNfdG9fc2Nhbik7CisKK3N0YXRpYyBzc2l6ZV90IHJ1bl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGtzbV9ydW4pOworfQorCitzdGF0aWMgc3NpemVfdCBydW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZmxhZ3MpOworCWlmIChlcnIgfHwgZmxhZ3MgPiBVSU5UX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZsYWdzID4gS1NNX1JVTl9VTk1FUkdFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogS1NNX1JVTl9NRVJHRSBzZXRzIGtzbWQgcnVubmluZywgYW5kIDAgc3RvcHMgaXQgcnVubmluZy4KKwkgKiBLU01fUlVOX1VOTUVSR0Ugc3RvcHMgaXQgcnVubmluZyBhbmQgdW5tZXJnZXMgYWxsIHJtYXBfaXRlbXMsCisJICogYnJlYWtpbmcgQ09XIHRvIGZyZWUgdGhlIHVuc3dhcHBhYmxlIHBhZ2VzX3NoYXJlZCAoYnV0IGxlYXZlcworCSAqIG1tX3Nsb3RzIG9uIHRoZSBsaXN0IGZvciB3aGVuIGtzbWQgbWF5IGJlIHNldCBydW5uaW5nIGFnYWluKS4KKwkgKi8KKworCW11dGV4X2xvY2soJmtzbV90aHJlYWRfbXV0ZXgpOworCWlmIChrc21fcnVuICE9IGZsYWdzKSB7CisJCWtzbV9ydW4gPSBmbGFnczsKKwkJaWYgKGZsYWdzICYgS1NNX1JVTl9VTk1FUkdFKSB7CisJCQljdXJyZW50LT5mbGFncyB8PSBQRl9PT01fT1JJR0lOOworCQkJZXJyID0gdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKCk7CisJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfT09NX09SSUdJTjsKKwkJCWlmIChlcnIpIHsKKwkJCQlrc21fcnVuID0gS1NNX1JVTl9TVE9QOworCQkJCWNvdW50ID0gZXJyOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygma3NtX3RocmVhZF9tdXRleCk7CisKKwlpZiAoZmxhZ3MgJiBLU01fUlVOX01FUkdFKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmtzbV90aHJlYWRfd2FpdCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitLU01fQVRUUihydW4pOworCitzdGF0aWMgc3NpemVfdCBtYXhfa2VybmVsX3BhZ2VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbnJfcGFnZXMpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJa3NtX21heF9rZXJuZWxfcGFnZXMgPSBucl9wYWdlczsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgbWF4X2tlcm5lbF9wYWdlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBrc21fbWF4X2tlcm5lbF9wYWdlcyk7Cit9CitLU01fQVRUUihtYXhfa2VybmVsX3BhZ2VzKTsKKworc3RhdGljIHNzaXplX3QgcGFnZXNfc2hhcmVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwga3NtX3BhZ2VzX3NoYXJlZCk7Cit9CitLU01fQVRUUl9STyhwYWdlc19zaGFyZWQpOworCitzdGF0aWMgc3NpemVfdCBwYWdlc19zaGFyaW5nX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGtzbV9wYWdlc19zaGFyaW5nKTsKK30KK0tTTV9BVFRSX1JPKHBhZ2VzX3NoYXJpbmcpOworCitzdGF0aWMgc3NpemVfdCBwYWdlc191bnNoYXJlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwga3NtX3BhZ2VzX3Vuc2hhcmVkKTsKK30KK0tTTV9BVFRSX1JPKHBhZ2VzX3Vuc2hhcmVkKTsKKworc3RhdGljIHNzaXplX3QgcGFnZXNfdm9sYXRpbGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlsb25nIGtzbV9wYWdlc192b2xhdGlsZTsKKworCWtzbV9wYWdlc192b2xhdGlsZSA9IGtzbV9ybWFwX2l0ZW1zIC0ga3NtX3BhZ2VzX3NoYXJlZAorCQkJCS0ga3NtX3BhZ2VzX3NoYXJpbmcgLSBrc21fcGFnZXNfdW5zaGFyZWQ7CisJLyoKKwkgKiBJdCB3YXMgbm90IHdvcnRoIGFueSBsb2NraW5nIHRvIGNhbGN1bGF0ZSB0aGF0IHN0YXRpc3RpYywKKwkgKiBidXQgaXQgbWlnaHQgdGhlcmVmb3JlIHNvbWV0aW1lcyBiZSBuZWdhdGl2ZTogY29uY2VhbCB0aGF0LgorCSAqLworCWlmIChrc21fcGFnZXNfdm9sYXRpbGUgPCAwKQorCQlrc21fcGFnZXNfdm9sYXRpbGUgPSAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwga3NtX3BhZ2VzX3ZvbGF0aWxlKTsKK30KK0tTTV9BVFRSX1JPKHBhZ2VzX3ZvbGF0aWxlKTsKKworc3RhdGljIHNzaXplX3QgZnVsbF9zY2Fuc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwga3NtX3NjYW4uc2VxbnIpOworfQorS1NNX0FUVFJfUk8oZnVsbF9zY2Fucyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICprc21fYXR0cnNbXSA9IHsKKwkmc2xlZXBfbWlsbGlzZWNzX2F0dHIuYXR0ciwKKwkmcGFnZXNfdG9fc2Nhbl9hdHRyLmF0dHIsCisJJnJ1bl9hdHRyLmF0dHIsCisJJm1heF9rZXJuZWxfcGFnZXNfYXR0ci5hdHRyLAorCSZwYWdlc19zaGFyZWRfYXR0ci5hdHRyLAorCSZwYWdlc19zaGFyaW5nX2F0dHIuYXR0ciwKKwkmcGFnZXNfdW5zaGFyZWRfYXR0ci5hdHRyLAorCSZwYWdlc192b2xhdGlsZV9hdHRyLmF0dHIsCisJJmZ1bGxfc2NhbnNfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBrc21fYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBrc21fYXR0cnMsCisJLm5hbWUgPSAia3NtIiwKK307CisjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCisKK3N0YXRpYyBpbnQgX19pbml0IGtzbV9pbml0KHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICprc21fdGhyZWFkOworCWludCBlcnI7CisKKwllcnIgPSBrc21fc2xhYl9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtbV9zbG90c19oYXNoX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlMTsKKworCWtzbV90aHJlYWQgPSBrdGhyZWFkX3J1bihrc21fc2Nhbl90aHJlYWQsIE5VTEwsICJrc21kIik7CisJaWYgKElTX0VSUihrc21fdGhyZWFkKSkgeworCQlwcmludGsoS0VSTl9FUlIgImtzbTogY3JlYXRpbmcga3RocmVhZCBmYWlsZWRcbiIpOworCQllcnIgPSBQVFJfRVJSKGtzbV90aHJlYWQpOworCQlnb3RvIG91dF9mcmVlMjsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1lTRlMKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAobW1fa29iaiwgJmtzbV9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAia3NtOiByZWdpc3RlciBzeXNmcyBmYWlsZWRcbiIpOworCQlrdGhyZWFkX3N0b3Aoa3NtX3RocmVhZCk7CisJCWdvdG8gb3V0X2ZyZWUyOworCX0KKyNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KKworCXJldHVybiAwOworCitvdXRfZnJlZTI6CisJbW1fc2xvdHNfaGFzaF9mcmVlKCk7CitvdXRfZnJlZTE6CisJa3NtX3NsYWJfZnJlZSgpOworb3V0OgorCXJldHVybiBlcnI7Cit9Cittb2R1bGVfaW5pdChrc21faW5pdCkKZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuYwppbmRleCA3NmViNDE5Li5kOWFlMjA2IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKKysrIGIvbW0vbWFkdmlzZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAKIC8qCiAgKiBBbnkgYmVoYXZpb3VyIHdoaWNoIHJlc3VsdHMgaW4gY2hhbmdlcyB0byB0aGUgdm1hLT52bV9mbGFncyBuZWVkcyB0bwpAQCAtNDEsNyArNDIsNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IHZtYS0+dm1fbW07CiAJaW50IGVycm9yID0gMDsKIAlwZ29mZl90IHBnb2ZmOwotCWludCBuZXdfZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzID0gdm1hLT52bV9mbGFnczsKIAogCXN3aXRjaCAoYmVoYXZpb3IpIHsKIAljYXNlIE1BRFZfTk9STUFMOgpAQCAtNTcsOCArNTgsMTggQEAKIAkJbmV3X2ZsYWdzIHw9IFZNX0RPTlRDT1BZOwogCQlicmVhazsKIAljYXNlIE1BRFZfRE9GT1JLOgorCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0lPKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQogCQluZXdfZmxhZ3MgJj0gflZNX0RPTlRDT1BZOwogCQlicmVhazsKKwljYXNlIE1BRFZfTUVSR0VBQkxFOgorCWNhc2UgTUFEVl9VTk1FUkdFQUJMRToKKwkJZXJyb3IgPSBrc21fbWFkdmlzZSh2bWEsIHN0YXJ0LCBlbmQsIGJlaGF2aW9yLCAmbmV3X2ZsYWdzKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOwogCX0KIAogCWlmIChuZXdfZmxhZ3MgPT0gdm1hLT52bV9mbGFncykgewpAQCAtMjExLDM3ICsyMjIsMTYgQEAKIG1hZHZpc2Vfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGJlaGF2aW9yKQogewotCWxvbmcgZXJyb3I7Ci0KIAlzd2l0Y2ggKGJlaGF2aW9yKSB7Ci0JY2FzZSBNQURWX0RPRk9SSzoKLQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9JTykgewotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIE1BRFZfRE9OVEZPUks6Ci0JY2FzZSBNQURWX05PUk1BTDoKLQljYXNlIE1BRFZfU0VRVUVOVElBTDoKLQljYXNlIE1BRFZfUkFORE9NOgotCQllcnJvciA9IG1hZHZpc2VfYmVoYXZpb3Iodm1hLCBwcmV2LCBzdGFydCwgZW5kLCBiZWhhdmlvcik7Ci0JCWJyZWFrOwogCWNhc2UgTUFEVl9SRU1PVkU6Ci0JCWVycm9yID0gbWFkdmlzZV9yZW1vdmUodm1hLCBwcmV2LCBzdGFydCwgZW5kKTsKLQkJYnJlYWs7Ci0KKwkJcmV0dXJuIG1hZHZpc2VfcmVtb3ZlKHZtYSwgcHJldiwgc3RhcnQsIGVuZCk7CiAJY2FzZSBNQURWX1dJTExORUVEOgotCQllcnJvciA9IG1hZHZpc2Vfd2lsbG5lZWQodm1hLCBwcmV2LCBzdGFydCwgZW5kKTsKLQkJYnJlYWs7Ci0KKwkJcmV0dXJuIG1hZHZpc2Vfd2lsbG5lZWQodm1hLCBwcmV2LCBzdGFydCwgZW5kKTsKIAljYXNlIE1BRFZfRE9OVE5FRUQ6Ci0JCWVycm9yID0gbWFkdmlzZV9kb250bmVlZCh2bWEsIHByZXYsIHN0YXJ0LCBlbmQpOwotCQlicmVhazsKLQorCQlyZXR1cm4gbWFkdmlzZV9kb250bmVlZCh2bWEsIHByZXYsIHN0YXJ0LCBlbmQpOwogCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlicmVhazsKKwkJcmV0dXJuIG1hZHZpc2VfYmVoYXZpb3Iodm1hLCBwcmV2LCBzdGFydCwgZW5kLCBiZWhhdmlvcik7CiAJfQotCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludApAQCAtMjU2LDEyICsyNDYsMTcgQEAKIAljYXNlIE1BRFZfUkVNT1ZFOgogCWNhc2UgTUFEVl9XSUxMTkVFRDoKIAljYXNlIE1BRFZfRE9OVE5FRUQ6CisjaWZkZWYgQ09ORklHX0tTTQorCWNhc2UgTUFEVl9NRVJHRUFCTEU6CisJY2FzZSBNQURWX1VOTUVSR0VBQkxFOgorI2VuZGlmCiAJCXJldHVybiAxOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQogfQorCiAvKgogICogVGhlIG1hZHZpc2UoMikgc3lzdGVtIGNhbGwuCiAgKgpAQCAtMjg2LDYgKzI4MSwxMiBAQAogICoJCXNvIHRoZSBrZXJuZWwgY2FuIGZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAqICBNQURWX1JFTU9WRSAtIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBmcmVlIHVwIHRoZSBnaXZlbiByYW5nZSBvZgogICoJCXBhZ2VzIGFuZCBhc3NvY2lhdGVkIGJhY2tpbmcgc3RvcmUuCisgKiAgTUFEVl9ET05URk9SSyAtIG9taXQgdGhpcyBhcmVhIGZyb20gY2hpbGQncyBhZGRyZXNzIHNwYWNlIHdoZW4gZm9ya2luZzoKKyAqCQl0eXBpY2FsbHksIHRvIGF2b2lkIENPV2luZyBwYWdlcyBwaW5uZWQgYnkgZ2V0X3VzZXJfcGFnZXMoKS4KKyAqICBNQURWX0RPRk9SSyAtIGNhbmNlbCBNQURWX0RPTlRGT1JLOiBubyBsb25nZXIgb21pdCB0aGlzIGFyZWEgd2hlbiBmb3JraW5nLgorICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluCisgKgkJdGhpcyBhcmVhIHdpdGggcGFnZXMgb2YgaWRlbnRpY2FsIGNvbnRlbnQgZnJvbSBvdGhlciBzdWNoIGFyZWFzLgorICogIE1BRFZfVU5NRVJHRUFCTEUtIGNhbmNlbCBNQURWX01FUkdFQUJMRTogbm8gbG9uZ2VyIG1lcmdlIHBhZ2VzIHdpdGggb3RoZXJzLgogICoKICAqIHJldHVybiB2YWx1ZXM6CiAgKiAgemVybyAgICAtIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBmZDQ1MjlkLi45YjEwZDg3IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAlpbnQgbmlkID0gei0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKIAlpbnQgemlkID0gem9uZV9pZHgoeik7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwotCWludCBscnUgPSBMUlVfRklMRSAqICEhZmlsZSArICEhYWN0aXZlOworCWludCBscnUgPSBMUlVfRklMRSAqIGZpbGUgKyBhY3RpdmU7CiAJaW50IHJldDsKIAogCUJVR19PTighbWVtX2NvbnQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBlOGY2M2Q5Li5iMTQ0M2FjMDcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgpAQCAtMTA3LDYgKzEwOCwxOCBAQAogfQogX19zZXR1cCgibm9yYW5kbWFwcyIsIGRpc2FibGVfcmFuZG1hcHMpOwogCit1bnNpZ25lZCBsb25nIHplcm9fcGZuIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5OworCisvKgorICogQ09ORklHX01NVSBhcmNoaXRlY3R1cmVzIHNldCB1cCBaRVJPX1BBR0UgaW4gdGhlaXIgcGFnaW5nX2luaXQoKQorICovCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3plcm9fcGZuKHZvaWQpCit7CisJemVyb19wZm4gPSBwYWdlX3RvX3BmbihaRVJPX1BBR0UoMCkpOworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChpbml0X3plcm9fcGZuKTsKIAogLyoKICAqIElmIGEgcD9kX2JhZCBlbnRyeSBpcyBmb3VuZCB3aGlsZSB3YWxraW5nIHBhZ2UgdGFibGVzLCByZXBvcnQKQEAgLTQ0Myw2ICs0NTYsMjAgQEAKIAlyZXR1cm4gKGZsYWdzICYgKFZNX1NIQVJFRCB8IFZNX01BWVdSSVRFKSkgPT0gVk1fTUFZV1JJVEU7CiB9CiAKKyNpZm5kZWYgaXNfemVyb19wZm4KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3plcm9fcGZuKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXJldHVybiBwZm4gPT0gemVyb19wZm47Cit9CisjZW5kaWYKKworI2lmbmRlZiBteV96ZXJvX3Bmbgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG15X3plcm9fcGZuKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gemVyb19wZm47Cit9CisjZW5kaWYKKwogLyoKICAqIHZtX25vcm1hbF9wYWdlIC0tIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgInN0cnVjdCBwYWdlIiBhc3NvY2lhdGVkIHdpdGggYSBwdGUuCiAgKgpAQCAtNDk4LDcgKzUyNSw5IEBACiAJaWYgKEhBVkVfUFRFX1NQRUNJQUwpIHsKIAkJaWYgKGxpa2VseSghcHRlX3NwZWNpYWwocHRlKSkpCiAJCQlnb3RvIGNoZWNrX3BmbjsKLQkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9QRk5NQVAgfCBWTV9NSVhFRE1BUCkpKQorCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9QRk5NQVAgfCBWTV9NSVhFRE1BUCkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFpc196ZXJvX3BmbihwZm4pKQogCQkJcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgTlVMTCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTUyMCw2ICs1NDksOCBAQAogCQl9CiAJfQogCisJaWYgKGlzX3plcm9fcGZuKHBmbikpCisJCXJldHVybiBOVUxMOwogY2hlY2tfcGZuOgogCWlmICh1bmxpa2VseShwZm4gPiBoaWdoZXN0X21lbW1hcF9wZm4pKSB7CiAJCXByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIE5VTEwpOwpAQCAtNTk3LDggKzYyOCw4IEBACiAJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlKTsKIAlpZiAocGFnZSkgewogCQlnZXRfcGFnZShwYWdlKTsKLQkJcGFnZV9kdXBfcm1hcChwYWdlLCB2bWEsIGFkZHIpOwotCQlyc3NbISFQYWdlQW5vbihwYWdlKV0rKzsKKwkJcGFnZV9kdXBfcm1hcChwYWdlKTsKKwkJcnNzW1BhZ2VBbm9uKHBhZ2UpXSsrOwogCX0KIAogb3V0X3NldF9wdGU6CkBAIC0xMTQzLDkgKzExNzQsMTQgQEAKIAkJZ290byBub19wYWdlOwogCWlmICgoZmxhZ3MgJiBGT0xMX1dSSVRFKSAmJiAhcHRlX3dyaXRlKHB0ZSkpCiAJCWdvdG8gdW5sb2NrOworCiAJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkcmVzcywgcHRlKTsKLQlpZiAodW5saWtlbHkoIXBhZ2UpKQotCQlnb3RvIGJhZF9wYWdlOworCWlmICh1bmxpa2VseSghcGFnZSkpIHsKKwkJaWYgKChmbGFncyAmIEZPTExfRFVNUCkgfHwKKwkJICAgICFpc196ZXJvX3BmbihwdGVfcGZuKHB0ZSkpKQorCQkJZ290byBiYWRfcGFnZTsKKwkJcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7CisJfQogCiAJaWYgKGZsYWdzICYgRk9MTF9HRVQpCiAJCWdldF9wYWdlKHBhZ2UpOwpAQCAtMTE3Myw2NSArMTIwOSw0NiBAQAogCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKIAlpZiAoIXB0ZV9ub25lKHB0ZSkpCiAJCXJldHVybiBwYWdlOwotCS8qIEZhbGwgdGhyb3VnaCB0byBaRVJPX1BBR0UgaGFuZGxpbmcgKi8KKwogbm9fcGFnZV90YWJsZToKIAkvKgogCSAqIFdoZW4gY29yZSBkdW1waW5nIGFuIGVub3Jtb3VzIGFub255bW91cyBhcmVhIHRoYXQgbm9ib2R5Ci0JICogaGFzIHRvdWNoZWQgc28gZmFyLCB3ZSBkb24ndCB3YW50IHRvIGFsbG9jYXRlIHBhZ2UgdGFibGVzLgorCSAqIGhhcyB0b3VjaGVkIHNvIGZhciwgd2UgZG9uJ3Qgd2FudCB0byBhbGxvY2F0ZSB1bm5lY2Vzc2FyeSBwYWdlcyBvcgorCSAqIHBhZ2UgdGFibGVzLiAgUmV0dXJuIGVycm9yIGluc3RlYWQgb2YgTlVMTCB0byBza2lwIGhhbmRsZV9tbV9mYXVsdCwKKwkgKiB0aGVuIGdldF9kdW1wX3BhZ2UoKSB3aWxsIHJldHVybiBOVUxMIHRvIGxlYXZlIGEgaG9sZSBpbiB0aGUgZHVtcC4KKwkgKiBCdXQgd2UgY2FuIG9ubHkgbWFrZSB0aGlzIG9wdGltaXphdGlvbiB3aGVyZSBhIGhvbGUgd291bGQgc3VyZWx5CisJICogYmUgemVyby1maWxsZWQgaWYgaGFuZGxlX21tX2ZhdWx0KCkgYWN0dWFsbHkgZGlkIGhhbmRsZSBpdC4KIAkgKi8KLQlpZiAoZmxhZ3MgJiBGT0xMX0FOT04pIHsKLQkJcGFnZSA9IFpFUk9fUEFHRSgwKTsKLQkJaWYgKGZsYWdzICYgRk9MTF9HRVQpCi0JCQlnZXRfcGFnZShwYWdlKTsKLQkJQlVHX09OKGZsYWdzICYgRk9MTF9XUklURSk7Ci0JfQorCWlmICgoZmxhZ3MgJiBGT0xMX0RVTVApICYmCisJICAgICghdm1hLT52bV9vcHMgfHwgIXZtYS0+dm1fb3BzLT5mYXVsdCkpCisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCXJldHVybiBwYWdlOwogfQogCi0vKiBDYW4gd2UgZG8gdGhlIEZPTExfQU5PTiBvcHRpbWl6YXRpb24/ICovCi1zdGF0aWMgaW5saW5lIGludCB1c2VfemVyb19wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byBvcHRpbWl6ZSBGT0xMX0FOT04gZm9yIG1ha2VfcGFnZXNfcHJlc2VudCgpCi0JICogd2hlbiBpdCB0cmllcyB0byBwYWdlIGluIGEgVk1fTE9DS0VEIHJlZ2lvbi4gQXMgdG8gVk1fU0hBUkVELAotCSAqIHdlIHdhbnQgdG8gZ2V0IHRoZSBwYWdlIGZyb20gdGhlIHBhZ2UgdGFibGVzIHRvIG1ha2Ugc3VyZQotCSAqIHRoYXQgd2Ugc2VyaWFsaXplIGFuZCB1cGRhdGUgd2l0aCBhbnkgb3RoZXIgdXNlciBvZiB0aGF0Ci0JICogbWFwcGluZy4KLQkgKi8KLQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9MT0NLRUQgfCBWTV9TSEFSRUQpKQotCQlyZXR1cm4gMDsKLQkvKgotCSAqIEFuZCBpZiB3ZSBoYXZlIGEgZmF1bHQgcm91dGluZSwgaXQncyBub3QgYW4gYW5vbnltb3VzIHJlZ2lvbi4KLQkgKi8KLQlyZXR1cm4gIXZtYS0+dm1fb3BzIHx8ICF2bWEtPnZtX29wcy0+ZmF1bHQ7Ci19Ci0KLQotCiBpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2VzLCBpbnQgZmxhZ3MsCisJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLAogCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IHZtX2ZsYWdzID0gMDsKLQlpbnQgd3JpdGUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19XUklURSk7Ci0JaW50IGZvcmNlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfRk9SQ0UpOwotCWludCBpZ25vcmUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TKTsKLQlpbnQgaWdub3JlX3NpZ2tpbGwgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfU0lHS0lMTCk7CisJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAogCWlmIChucl9wYWdlcyA8PSAwKQogCQlyZXR1cm4gMDsKKworCVZNX0JVR19PTighIXBhZ2VzICE9ICEhKGd1cF9mbGFncyAmIEZPTExfR0VUKSk7CisKIAkvKiAKIAkgKiBSZXF1aXJlIHJlYWQgb3Igd3JpdGUgcGVybWlzc2lvbnMuCi0JICogSWYgJ2ZvcmNlJyBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCisJICogSWYgRk9MTF9GT1JDRSBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCiAJICovCi0Jdm1fZmxhZ3MgID0gd3JpdGUgPyAoVk1fV1JJVEUgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX01BWVJFQUQpOwotCXZtX2ZsYWdzICY9IGZvcmNlID8gKFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX1dSSVRFKTsKKwl2bV9mbGFncyAgPSAoZ3VwX2ZsYWdzICYgRk9MTF9XUklURSkgPworCQkJKFZNX1dSSVRFIHwgVk1fTUFZV1JJVEUpIDogKFZNX1JFQUQgfCBWTV9NQVlSRUFEKTsKKwl2bV9mbGFncyAmPSAoZ3VwX2ZsYWdzICYgRk9MTF9GT1JDRSkgPworCQkJKFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX1dSSVRFKTsKIAlpID0gMDsKIAogCWRvIHsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JCXVuc2lnbmVkIGludCBmb2xsX2ZsYWdzOwogCiAJCXZtYSA9IGZpbmRfZXh0ZW5kX3ZtYShtbSwgc3RhcnQpOwogCQlpZiAoIXZtYSAmJiBpbl9nYXRlX2FyZWEodHNrLCBzdGFydCkpIHsKQEAgLTEyNDMsNyArMTI2MCw3IEBACiAJCQlwdGVfdCAqcHRlOwogCiAJCQkvKiB1c2VyIGdhdGUgcGFnZXMgYXJlIHJlYWQtb25seSAqLwotCQkJaWYgKCFpZ25vcmUgJiYgd3JpdGUpCisJCQlpZiAoZ3VwX2ZsYWdzICYgRk9MTF9XUklURSkKIAkJCQlyZXR1cm4gaSA/IDogLUVGQVVMVDsKIAkJCWlmIChwZyA+IFRBU0tfU0laRSkKIAkJCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2socGcpOwpAQCAtMTI3NywzOCArMTI5NCwyNiBAQAogCiAJCWlmICghdm1hIHx8CiAJCSAgICAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpIHx8Ci0JCSAgICAoIWlnbm9yZSAmJiAhKHZtX2ZsYWdzICYgdm1hLT52bV9mbGFncykpKQorCQkgICAgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKQogCQkJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiAKIAkJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7CiAJCQlpID0gZm9sbG93X2h1Z2V0bGJfcGFnZShtbSwgdm1hLCBwYWdlcywgdm1hcywKLQkJCQkJCSZzdGFydCwgJm5yX3BhZ2VzLCBpLCB3cml0ZSk7CisJCQkJCSZzdGFydCwgJm5yX3BhZ2VzLCBpLCBndXBfZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlmb2xsX2ZsYWdzID0gRk9MTF9UT1VDSDsKLQkJaWYgKHBhZ2VzKQotCQkJZm9sbF9mbGFncyB8PSBGT0xMX0dFVDsKLQkJaWYgKCF3cml0ZSAmJiB1c2VfemVyb19wYWdlKHZtYSkpCi0JCQlmb2xsX2ZsYWdzIHw9IEZPTExfQU5PTjsKLQogCQlkbyB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJCXVuc2lnbmVkIGludCBmb2xsX2ZsYWdzID0gZ3VwX2ZsYWdzOwogCiAJCQkvKgogCQkJICogSWYgd2UgaGF2ZSBhIHBlbmRpbmcgU0lHS0lMTCwgZG9uJ3Qga2VlcCBmYXVsdGluZwotCQkJICogcGFnZXMgYW5kIHBvdGVudGlhbGx5IGFsbG9jYXRpbmcgbWVtb3J5LCB1bmxlc3MKLQkJCSAqIGN1cnJlbnQgaXMgaGFuZGxpbmcgbXVubG9jay0tZS5nLiwgb24gZXhpdC4gSW4KLQkJCSAqIHRoYXQgY2FzZSwgd2UgYXJlIG5vdCBhbGxvY2F0aW5nIG1lbW9yeS4gIFJhdGhlciwKLQkJCSAqIHdlJ3JlIG9ubHkgdW5sb2NraW5nIGFscmVhZHkgcmVzaWRlbnQvbWFwcGVkIHBhZ2VzLgorCQkJICogcGFnZXMgYW5kIHBvdGVudGlhbGx5IGFsbG9jYXRpbmcgbWVtb3J5LgogCQkJICovCi0JCQlpZiAodW5saWtlbHkoIWlnbm9yZV9zaWdraWxsICYmCi0JCQkJCWZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSkKKwkJCWlmICh1bmxpa2VseShmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkpCiAJCQkJcmV0dXJuIGkgPyBpIDogLUVSRVNUQVJUU1lTOwogCi0JCQlpZiAod3JpdGUpCi0JCQkJZm9sbF9mbGFncyB8PSBGT0xMX1dSSVRFOwotCiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCXdoaWxlICghKHBhZ2UgPSBmb2xsb3dfcGFnZSh2bWEsIHN0YXJ0LCBmb2xsX2ZsYWdzKSkpIHsKIAkJCQlpbnQgcmV0OwpAQCAtMTQxOSwxOCArMTQyNCw0NyBAQAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIGludCB3cml0ZSwgaW50IGZvcmNlLAogCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQogewotCWludCBmbGFncyA9IDA7CisJaW50IGZsYWdzID0gRk9MTF9UT1VDSDsKIAorCWlmIChwYWdlcykKKwkJZmxhZ3MgfD0gRk9MTF9HRVQ7CiAJaWYgKHdyaXRlKQotCQlmbGFncyB8PSBHVVBfRkxBR1NfV1JJVEU7CisJCWZsYWdzIHw9IEZPTExfV1JJVEU7CiAJaWYgKGZvcmNlKQotCQlmbGFncyB8PSBHVVBfRkxBR1NfRk9SQ0U7CisJCWZsYWdzIHw9IEZPTExfRk9SQ0U7CiAKIAlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyh0c2ssIG1tLCBzdGFydCwgbnJfcGFnZXMsIGZsYWdzLCBwYWdlcywgdm1hcyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZ2V0X3VzZXJfcGFnZXMpOwogCisvKioKKyAqIGdldF9kdW1wX3BhZ2UoKSAtIHBpbiB1c2VyIHBhZ2UgaW4gbWVtb3J5IHdoaWxlIHdyaXRpbmcgaXQgdG8gY29yZSBkdW1wCisgKiBAYWRkcjogdXNlciBhZGRyZXNzCisgKgorICogUmV0dXJucyBzdHJ1Y3QgcGFnZSBwb2ludGVyIG9mIHVzZXIgcGFnZSBwaW5uZWQgZm9yIGR1bXAsCisgKiB0byBiZSBmcmVlZCBhZnRlcndhcmRzIGJ5IHBhZ2VfY2FjaGVfcmVsZWFzZSgpIG9yIHB1dF9wYWdlKCkuCisgKgorICogUmV0dXJucyBOVUxMIG9uIGFueSBraW5kIG9mIGZhaWx1cmUgLSBhIGhvbGUgbXVzdCB0aGVuIGJlIGluc2VydGVkIGludG8KKyAqIHRoZSBjb3JlZmlsZSwgdG8gcHJlc2VydmUgYWxpZ25tZW50IHdpdGggaXRzIGhlYWRlcnM7IGFuZCBhbHNvIHJldHVybnMKKyAqIE5VTEwgd2hlcmV2ZXIgdGhlIFpFUk9fUEFHRSwgb3IgYW4gYW5vbnltb3VzIHB0ZV9ub25lLCBoYXMgYmVlbiBmb3VuZCAtCisgKiBhbGxvd2luZyBhIGhvbGUgdG8gYmUgbGVmdCBpbiB0aGUgY29yZWZpbGUgdG8gc2F2ZSBkaXNrc3BhY2UuCisgKgorICogQ2FsbGVkIHdpdGhvdXQgbW1hcF9zZW0sIGJ1dCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkcyBoYXZlIGJlZW4ga2lsbGVkLgorICovCisjaWZkZWYgQ09ORklHX0VMRl9DT1JFCitzdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAoX19nZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgMSwKKwkJCUZPTExfRk9SQ0UgfCBGT0xMX0RVTVAgfCBGT0xMX0dFVCwgJnBhZ2UsICZ2bWEpIDwgMSkKKwkJcmV0dXJuIE5VTEw7CisJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwlyZXR1cm4gcGFnZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRUxGX0NPUkUgKi8KKwogcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlzcGlubG9ja190ICoqcHRsKQogewpAQCAtMTYwOCw3ICsxNjQyLDggQEAKIAkgKiBJZiB3ZSBkb24ndCBoYXZlIHB0ZSBzcGVjaWFsLCB0aGVuIHdlIGhhdmUgdG8gdXNlIHRoZSBwZm5fdmFsaWQoKQogCSAqIGJhc2VkIFZNX01JWEVETUFQIHNjaGVtZSAoc2VlIHZtX25vcm1hbF9wYWdlKSwgYW5kIHRodXMgd2UgKm11c3QqCiAJICogcmVmY291bnQgdGhlIHBhZ2UgaWYgcGZuX3ZhbGlkIGlzIHRydWUgKGhlbmNlIGluc2VydF9wYWdlIHJhdGhlcgotCSAqIHRoYW4gaW5zZXJ0X3BmbikuCisJICogdGhhbiBpbnNlcnRfcGZuKS4gIElmIGEgemVyb19wZm4gd2VyZSBpbnNlcnRlZCBpbnRvIGEgVk1fTUlYRURNQVAKKwkgKiB3aXRob3V0IHB0ZSBzcGVjaWFsLCBpdCB3b3VsZCB0aGVyZSBiZSByZWZjb3VudGVkIGFzIGEgbm9ybWFsIHBhZ2UuCiAJICovCiAJaWYgKCFIQVZFX1BURV9TUEVDSUFMICYmIHBmbl92YWxpZChwZm4pKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMTk3NCw3ICsyMDA5LDcgQEAKIAkgKiBUYWtlIG91dCBhbm9ueW1vdXMgcGFnZXMgZmlyc3QsIGFub255bW91cyBzaGFyZWQgdm1hcyBhcmUKIAkgKiBub3QgZGlydHkgYWNjb3VudGFibGUuCiAJICovCi0JaWYgKFBhZ2VBbm9uKG9sZF9wYWdlKSkgeworCWlmIChQYWdlQW5vbihvbGRfcGFnZSkgJiYgIVBhZ2VLc20ob2xkX3BhZ2UpKSB7CiAJCWlmICghdHJ5bG9ja19wYWdlKG9sZF9wYWdlKSkgewogCQkJcGFnZV9jYWNoZV9nZXQob2xkX3BhZ2UpOwogCQkJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwpAQCAtMjA3NSwxMCArMjExMCwxOSBAQAogCiAJaWYgKHVubGlrZWx5KGFub25fdm1hX3ByZXBhcmUodm1hKSkpCiAJCWdvdG8gb29tOwotCVZNX0JVR19PTihvbGRfcGFnZSA9PSBaRVJPX1BBR0UoMCkpOwotCW5ld19wYWdlID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsIHZtYSwgYWRkcmVzcyk7Ci0JaWYgKCFuZXdfcGFnZSkKLQkJZ290byBvb207CisKKwlpZiAoaXNfemVyb19wZm4ocHRlX3BmbihvcmlnX3B0ZSkpKSB7CisJCW5ld19wYWdlID0gYWxsb2NfemVyb2VkX3VzZXJfaGlnaHBhZ2VfbW92YWJsZSh2bWEsIGFkZHJlc3MpOworCQlpZiAoIW5ld19wYWdlKQorCQkJZ290byBvb207CisJfSBlbHNlIHsKKwkJbmV3X3BhZ2UgPSBhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVJfTU9WQUJMRSwgdm1hLCBhZGRyZXNzKTsKKwkJaWYgKCFuZXdfcGFnZSkKKwkJCWdvdG8gb29tOworCQljb3dfdXNlcl9wYWdlKG5ld19wYWdlLCBvbGRfcGFnZSwgYWRkcmVzcywgdm1hKTsKKwl9CisJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOworCiAJLyoKIAkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKIAkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCkBAIC0yMDg4LDggKzIxMzIsNiBAQAogCQljbGVhcl9wYWdlX21sb2NrKG9sZF9wYWdlKTsKIAkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwogCX0KLQljb3dfdXNlcl9wYWdlKG5ld19wYWdlLCBvbGRfcGFnZSwgYWRkcmVzcywgdm1hKTsKLQlfX1NldFBhZ2VVcHRvZGF0ZShuZXdfcGFnZSk7CiAKIAlpZiAobWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShuZXdfcGFnZSwgbW0sIEdGUF9LRVJORUwpKQogCQlnb3RvIG9vbV9mcmVlX25ldzsKQEAgLTIxMTUsOSArMjE1NywxNCBAQAogCQkgKiBzZWVuIGluIHRoZSBwcmVzZW5jZSBvZiBvbmUgdGhyZWFkIGRvaW5nIFNNQyBhbmQgYW5vdGhlcgogCQkgKiB0aHJlYWQgZG9pbmcgQ09XLgogCQkgKi8KLQkJcHRlcF9jbGVhcl9mbHVzaF9ub3RpZnkodm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlKTsKKwkJcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwogCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKG5ld19wYWdlLCB2bWEsIGFkZHJlc3MpOwotCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CisJCS8qCisJCSAqIFdlIGNhbGwgdGhlIG5vdGlmeSBtYWNybyBoZXJlIGJlY2F1c2UsIHdoZW4gdXNpbmcgc2Vjb25kYXJ5CisJCSAqIG1tdSBwYWdlIHRhYmxlcyAoc3VjaCBhcyBrdm0gc2hhZG93IHBhZ2UgdGFibGVzKSwgd2Ugd2FudCB0aGUKKwkJICogbmV3IHBhZ2UgdG8gYmUgbWFwcGVkIGRpcmVjdGx5IGludG8gdGhlIHNlY29uZGFyeSBwYWdlIHRhYmxlLgorCQkgKi8KKwkJc2V0X3B0ZV9hdF9ub3RpZnkobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAkJaWYgKG9sZF9wYWdlKSB7CiAJCQkvKgpAQCAtMjYyNSw2ICsyNjcyLDE2IEBACiAJc3BpbmxvY2tfdCAqcHRsOwogCXB0ZV90IGVudHJ5OwogCisJaWYgKCEoZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkgeworCQllbnRyeSA9IHB0ZV9ta3NwZWNpYWwocGZuX3B0ZShteV96ZXJvX3BmbihhZGRyZXNzKSwKKwkJCQkJCXZtYS0+dm1fcGFnZV9wcm90KSk7CisJCXB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWQpOworCQlzcGluX2xvY2socHRsKTsKKwkJaWYgKCFwdGVfbm9uZSgqcGFnZV90YWJsZSkpCisJCQlnb3RvIHVubG9jazsKKwkJZ290byBzZXRwdGU7CisJfQorCiAJLyogQWxsb2NhdGUgb3VyIG93biBwcml2YXRlIHBhZ2UuICovCiAJcHRlX3VubWFwKHBhZ2VfdGFibGUpOwogCkBAIC0yNjM5LDEzICsyNjk2LDE2IEBACiAJCWdvdG8gb29tX2ZyZWVfcGFnZTsKIAogCWVudHJ5ID0gbWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KTsKLQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCisJCWVudHJ5ID0gcHRlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpKTsKIAogCXBhZ2VfdGFibGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOwogCWlmICghcHRlX25vbmUoKnBhZ2VfdGFibGUpKQogCQlnb3RvIHJlbGVhc2U7CisKIAlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOwogCXBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKK3NldHB0ZToKIAlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAKIAkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCBlNDQxMmE2Li44MjFkZWU1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTMzOSw4ICszMzksMTEgQEAKIAogdm9pZCBvbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCiAJdG90YWxyYW1fcGFnZXMrKzsKLQludW1fcGh5c3BhZ2VzKys7CisJaWYgKHBmbiA+PSBudW1fcGh5c3BhZ2VzKQorCQludW1fcGh5c3BhZ2VzID0gcGZuICsgMTsKIAogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQpAQCAtNDEwLDcgKzQxMyw3IEBACiAJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJbmVlZF96b25lbGlzdHNfcmVidWlsZCA9IDE7CiAKLQlyZXQgPSB3YWxrX21lbW9yeV9yZXNvdXJjZShwZm4sIG5yX3BhZ2VzLCAmb25saW5lZF9wYWdlcywKKwlyZXQgPSB3YWxrX3N5c3RlbV9yYW1fcmFuZ2UocGZuLCBucl9wYWdlcywgJm9ubGluZWRfcGFnZXMsCiAJCW9ubGluZV9wYWdlc19yYW5nZSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAib25saW5lX3BhZ2VzICVseCBhdCAlbHggZmFpbGVkXG4iLApAQCAtNDIyLDYgKzQyNSw3IEBACiAJem9uZS0+cHJlc2VudF9wYWdlcyArPSBvbmxpbmVkX3BhZ2VzOwogCXpvbmUtPnpvbmVfcGdkYXQtPm5vZGVfcHJlc2VudF9wYWdlcyArPSBvbmxpbmVkX3BhZ2VzOwogCisJem9uZV9wY3BfdXBkYXRlKHpvbmUpOwogCXNldHVwX3Blcl96b25lX3dtYXJrcygpOwogCWNhbGN1bGF0ZV96b25lX2luYWN0aXZlX3JhdGlvKHpvbmUpOwogCWlmIChvbmxpbmVkX3BhZ2VzKSB7CkBAIC03MDEsNyArNzA1LDcgQEAKIHN0YXRpYyB2b2lkCiBvZmZsaW5lX2lzb2xhdGVkX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiB7Ci0Jd2Fsa19tZW1vcnlfcmVzb3VyY2Uoc3RhcnRfcGZuLCBlbmRfcGZuIC0gc3RhcnRfcGZuLCBOVUxMLAorCXdhbGtfc3lzdGVtX3JhbV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4gLSBzdGFydF9wZm4sIE5VTEwsCiAJCQkJb2ZmbGluZV9pc29sYXRlZF9wYWdlc19jYik7CiB9CiAKQEAgLTcyNyw3ICs3MzEsNyBAQAogCWxvbmcgb2ZmbGluZWQgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSB3YWxrX21lbW9yeV9yZXNvdXJjZShzdGFydF9wZm4sIGVuZF9wZm4gLSBzdGFydF9wZm4sICZvZmZsaW5lZCwKKwlyZXQgPSB3YWxrX3N5c3RlbV9yYW1fcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuIC0gc3RhcnRfcGZuLCAmb2ZmbGluZWQsCiAJCQljaGVja19wYWdlc19pc29sYXRlZF9jYik7CiAJaWYgKHJldCA8IDApCiAJCW9mZmxpbmVkID0gKGxvbmcpcmV0OwpAQCAtODMxLDcgKzgzNSw2IEBACiAJem9uZS0+cHJlc2VudF9wYWdlcyAtPSBvZmZsaW5lZF9wYWdlczsKIAl6b25lLT56b25lX3BnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgLT0gb2ZmbGluZWRfcGFnZXM7CiAJdG90YWxyYW1fcGFnZXMgLT0gb2ZmbGluZWRfcGFnZXM7Ci0JbnVtX3BoeXNwYWdlcyAtPSBvZmZsaW5lZF9wYWdlczsKIAogCXNldHVwX3Blcl96b25lX3dtYXJrcygpOwogCWNhbGN1bGF0ZV96b25lX2luYWN0aXZlX3JhdGlvKHpvbmUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jCmluZGV4IDMyZTc1ZDQuLjFhM2JjM2QgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYworKysgYi9tbS9tZW1wb29sLmMKQEAgLTMwOCwxMyArMzA4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9rbWFsbG9jKTsKIAotdm9pZCAqbWVtcG9vbF9remFsbG9jKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpCi17Ci0Jc2l6ZV90IHNpemUgPSAoc2l6ZV90KXBvb2xfZGF0YTsKLQlyZXR1cm4ga3phbGxvYyhzaXplLCBnZnBfbWFzayk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbXBvb2xfa3phbGxvYyk7Ci0KIHZvaWQgbWVtcG9vbF9rZnJlZSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpCiB7CiAJa2ZyZWUoZWxlbWVudCk7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggOTM5ODg4Zi4uMTYwNTJlOCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNjcsNiArNjcsOCBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHBhZ2UyLCBsLCBscnUpIHsKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCisJCQkJcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAkJY291bnQrKzsKIAl9CkBAIC0xNDcsNyArMTQ5LDcgQEAKIHN0YXRpYyB2b2lkIHJlbW92ZV9maWxlX21pZ3JhdGlvbl9wdGVzKHN0cnVjdCBwYWdlICpvbGQsIHN0cnVjdCBwYWdlICpuZXcpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcobmV3KTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG5ldy0+bWFwcGluZzsKIAlzdHJ1Y3QgcHJpb190cmVlX2l0ZXIgaXRlcjsKIAlwZ29mZl90IHBnb2ZmID0gbmV3LT5pbmRleCA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIFBBR0VfU0hJRlQpOwogCkBAIC0yNzAsNyArMjcyLDcgQEAKIAlwc2xvdCA9IHJhZGl4X3RyZWVfbG9va3VwX3Nsb3QoJm1hcHBpbmctPnBhZ2VfdHJlZSwKICAJCQkJCXBhZ2VfaW5kZXgocGFnZSkpOwogCi0JZXhwZWN0ZWRfY291bnQgPSAyICsgISFwYWdlX2hhc19wcml2YXRlKHBhZ2UpOworCWV4cGVjdGVkX2NvdW50ID0gMiArIHBhZ2VfaGFzX3ByaXZhdGUocGFnZSk7CiAJaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gZXhwZWN0ZWRfY291bnQgfHwKIAkJCShzdHJ1Y3QgcGFnZSAqKXJhZGl4X3RyZWVfZGVyZWZfc2xvdChwc2xvdCkgIT0gcGFnZSkgewogCQlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CkBAIC0zMTIsNyArMzE0LDEwIEBACiAJICovCiAJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOwogCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShuZXdwYWdlLCBOUl9GSUxFX1BBR0VTKTsKLQorCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkgeworCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0hNRU0pOworCQlfX2luY196b25lX3BhZ2Vfc3RhdGUobmV3cGFnZSwgTlJfU0hNRU0pOworCX0KIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTY2NCwxMyArNjY5LDE1IEBACiAJCQkgKiAgICBuZWVkcyB0byBiZSBlZmZlY3RpdmUuCiAJCQkgKi8KIAkJCXRyeV90b19mcmVlX2J1ZmZlcnMocGFnZSk7CisJCQlnb3RvIHJjdV91bmxvY2s7CiAJCX0KLQkJZ290byByY3VfdW5sb2NrOworCQlnb3RvIHNraXBfdW5tYXA7CiAJfQogCiAJLyogRXN0YWJsaXNoIG1pZ3JhdGlvbiBwdGVzIG9yIHJlbW92ZSBwdGVzICovCiAJdHJ5X3RvX3VubWFwKHBhZ2UsIDEpOwogCitza2lwX3VubWFwOgogCWlmICghcGFnZV9tYXBwZWQocGFnZSkpCiAJCXJjID0gbW92ZV90b19uZXdfcGFnZShuZXdwYWdlLCBwYWdlKTsKIApAQCAtNjkzLDYgKzcwMCw4IEBACiAgCQkgKiByZXN0b3JlZC4KICAJCSAqLwogIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCisJCQkJcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKQEAgLTczNyw2ICs3NDYsMTMgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTI7CiAJaW50IHN3YXB3cml0ZSA9IGN1cnJlbnQtPmZsYWdzICYgUEZfU1dBUFdSSVRFOwogCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgZnJvbSwgbHJ1KQorCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCisJCQkJcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAoIXN3YXB3cml0ZSkKIAkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfU1dBUFdSSVRFOwpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggNDVlYjY1MC4uYmQ2ZjBlNCAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC0xMzksNDkgKzEzOSwzNiBAQAogfQogCiAvKioKLSAqIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSAgbWxvY2svbXVubG9jayBhIHJhbmdlIG9mIHBhZ2VzIGluIHRoZSB2bWEuCisgKiBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIC0gIG1sb2NrIGEgcmFuZ2Ugb2YgcGFnZXMgaW4gdGhlIHZtYS4KICAqIEB2bWE6ICAgdGFyZ2V0IHZtYQogICogQHN0YXJ0OiBzdGFydCBhZGRyZXNzCiAgKiBAZW5kOiAgIGVuZCBhZGRyZXNzCi0gKiBAbWxvY2s6IDAgaW5kaWNhdGUgbXVubG9jaywgb3RoZXJ3aXNlIG1sb2NrLgogICoKLSAqIElmIEBtbG9jayA9PSAwLCB1bmxvY2sgYW4gbWxvY2tlZCByYW5nZTsKLSAqIGVsc2UgbWxvY2sgdGhlIHJhbmdlIG9mIHBhZ2VzLiAgVGhpcyB0YWtlcyBjYXJlIG9mIG1ha2luZyB0aGUgcGFnZXMgcHJlc2VudCAsCi0gKiB0b28uCisgKiBUaGlzIHRha2VzIGNhcmUgb2YgbWFraW5nIHRoZSBwYWdlcyBwcmVzZW50IHRvby4KICAqCiAgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLgogICoKICAqIHZtYS0+dm1fbW0tPm1tYXBfc2VtIG11c3QgYmUgaGVsZCBmb3IgYXQgbGVhc3QgcmVhZC4KICAqLwogc3RhdGljIGxvbmcgX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJICAgaW50IG1sb2NrKQorCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsgLyogMTYgZ2l2ZXMgYSByZWFzb25hYmxlIGJhdGNoICovCiAJaW50IG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSAvIFBBR0VfU0laRTsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgZ3VwX2ZsYWdzID0gMDsKKwlpbnQgZ3VwX2ZsYWdzOwogCiAJVk1fQlVHX09OKHN0YXJ0ICYgflBBR0VfTUFTSyk7CiAJVk1fQlVHX09OKGVuZCAgICYgflBBR0VfTUFTSyk7CiAJVk1fQlVHX09OKHN0YXJ0IDwgdm1hLT52bV9zdGFydCk7CiAJVk1fQlVHX09OKGVuZCAgID4gdm1hLT52bV9lbmQpOwotCVZNX0JVR19PTigoIXJ3c2VtX2lzX2xvY2tlZCgmbW0tPm1tYXBfc2VtKSkgJiYKLQkJICAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgIT0gMCkpOworCVZNX0JVR19PTighcndzZW1faXNfbG9ja2VkKCZtbS0+bW1hcF9zZW0pKTsKIAotCS8qCi0JICogbWxvY2s6ICAgZG9uJ3QgcGFnZSBwb3B1bGF0ZSBpZiB2bWEgaGFzIFBST1RfTk9ORSBwZXJtaXNzaW9uLgotCSAqIG11bmxvY2s6IGFsd2F5cyBkbyBtdW5sb2NrIGFsdGhvdWdoIHRoZSB2bWEgaGFzIFBST1RfTk9ORQotCSAqICAgICAgICAgIHBlcm1pc3Npb24sIG9yIFNJR0tJTEwgaXMgcGVuZGluZy4KLQkgKi8KLQlpZiAoIW1sb2NrKQotCQlndXBfZmxhZ3MgfD0gR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMgfAotCQkJICAgICBHVVBfRkxBR1NfSUdOT1JFX1NJR0tJTEw7Ci0KKwlndXBfZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9HRVQ7CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKLQkJZ3VwX2ZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKwkJZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiAKIAl3aGlsZSAobnJfcGFnZXMgPiAwKSB7CiAJCWludCBpOwpAQCAtMjAxLDUxICsxODgsNDUgQEAKIAkJICogVGhpcyBjYW4gaGFwcGVuIGZvciwgZS5nLiwgVk1fTk9OTElORUFSIHJlZ2lvbnMgYmVmb3JlCiAJCSAqIGEgcGFnZSBoYXMgYmVlbiBhbGxvY2F0ZWQgYW5kIG1hcHBlZCBhdCBhIGdpdmVuIG9mZnNldCwKIAkJICogb3IgZm9yIGFkZHJlc3NlcyB0aGF0IG1hcCBiZXlvbmQgZW5kIG9mIGEgZmlsZS4KLQkJICogV2UnbGwgbWxvY2sgdGhlIHRoZSBwYWdlcyBpZi93aGVuIHRoZXkgZ2V0IGZhdWx0ZWQgaW4uCisJCSAqIFdlJ2xsIG1sb2NrIHRoZSBwYWdlcyBpZi93aGVuIHRoZXkgZ2V0IGZhdWx0ZWQgaW4uCiAJCSAqLwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwotCQlpZiAocmV0ID09IDApIHsKLQkJCS8qCi0JCQkgKiBXZSBrbm93IHRoZSB2bWEgaXMgdGhlcmUsIHNvIHRoZSBvbmx5IHRpbWUKLQkJCSAqIHdlIGNhbm5vdCBnZXQgYSBzaW5nbGUgcGFnZSBzaG91bGQgYmUgYW4KLQkJCSAqIGVycm9yIChyZXQgPCAwKSBjYXNlLgotCQkJICovCi0JCQlXQVJOX09OKDEpOwotCQkJYnJlYWs7Ci0JCX0KIAogCQlscnVfYWRkX2RyYWluKCk7CS8qIHB1c2ggY2FjaGVkIHBhZ2VzIHRvIExSVSAqLwogCiAJCWZvciAoaSA9IDA7IGkgPCByZXQ7IGkrKykgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKIAotCQkJbG9ja19wYWdlKHBhZ2UpOwotCQkJLyoKLQkJCSAqIEJlY2F1c2Ugd2UgbG9jayBwYWdlIGhlcmUgYW5kIG1pZ3JhdGlvbiBpcyBibG9ja2VkCi0JCQkgKiBieSB0aGUgZWxldmF0ZWQgcmVmZXJlbmNlLCB3ZSBuZWVkIG9ubHkgY2hlY2sgZm9yCi0JCQkgKiBwYWdlIHRydW5jYXRpb24gKGZpbGUtY2FjaGUgb25seSkuCi0JCQkgKi8KIAkJCWlmIChwYWdlLT5tYXBwaW5nKSB7Ci0JCQkJaWYgKG1sb2NrKQorCQkJCS8qCisJCQkJICogVGhhdCBwcmVsaW1pbmFyeSBjaGVjayBpcyBtYWlubHkgdG8gYXZvaWQKKwkJCQkgKiB0aGUgcG9pbnRsZXNzIG92ZXJoZWFkIG9mIGxvY2tfcGFnZSBvbiB0aGUKKwkJCQkgKiBaRVJPX1BBR0U6IHdoaWNoIG1pZ2h0IGJvdW5jZSB2ZXJ5IGJhZGx5IGlmCisJCQkJICogdGhlcmUgaXMgY29udGVudGlvbi4gIEhvd2V2ZXIsIHdlJ3JlIHN0aWxsCisJCQkJICogZGlydHlpbmcgaXRzIGNhY2hlbGluZSB3aXRoIGdldC9wdXRfcGFnZToKKwkJCQkgKiB3ZSdsbCBhZGQgYW5vdGhlciBfX2dldF91c2VyX3BhZ2VzIGZsYWcgdG8KKwkJCQkgKiBhdm9pZCBpdCBpZiB0aGF0IGNhc2UgdHVybnMgb3V0IHRvIG1hdHRlci4KKwkJCQkgKi8KKwkJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQkJLyoKKwkJCQkgKiBCZWNhdXNlIHdlIGxvY2sgcGFnZSBoZXJlIGFuZCBtaWdyYXRpb24gaXMKKwkJCQkgKiBibG9ja2VkIGJ5IHRoZSBlbGV2YXRlZCByZWZlcmVuY2UsIHdlIG5lZWQKKwkJCQkgKiBvbmx5IGNoZWNrIGZvciBmaWxlLWNhY2hlIHBhZ2UgdHJ1bmNhdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAocGFnZS0+bWFwcGluZykKIAkJCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7Ci0JCQkJZWxzZQotCQkJCQltdW5sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJfQotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlwdXRfcGFnZShwYWdlKTsJCS8qIHJlZiBmcm9tIGdldF91c2VyX3BhZ2VzKCkgKi8KLQotCQkJLyoKLQkJCSAqIGhlcmUgd2UgYXNzdW1lIHRoYXQgZ2V0X3VzZXJfcGFnZXMoKSBoYXMgZ2l2ZW4gdXMKLQkJCSAqIGEgbGlzdCBvZiB2aXJ0dWFsbHkgY29udGlndW91cyBwYWdlcy4KLQkJCSAqLwotCQkJYWRkciArPSBQQUdFX1NJWkU7CS8qIGZvciBuZXh0IGdldF91c2VyX3BhZ2VzKCkgKi8KLQkJCW5yX3BhZ2VzLS07CisJCQlwdXRfcGFnZShwYWdlKTsJLyogcmVmIGZyb20gZ2V0X3VzZXJfcGFnZXMoKSAqLwogCQl9CisKKwkJYWRkciArPSByZXQgKiBQQUdFX1NJWkU7CisJCW5yX3BhZ2VzIC09IHJldDsKIAkJcmV0ID0gMDsKIAl9CiAKLQlyZXR1cm4gcmV0OwkvKiBjb3VudCBlbnRpcmUgdm1hIGFzIGxvY2tlZF92bSAqLworCXJldHVybiByZXQ7CS8qIDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSAqLwogfQogCiAvKgpAQCAtMjg5LDcgKzI3MCw3IEBACiAJCQlpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fAogCQkJdm1hID09IGdldF9nYXRlX3ZtYShjdXJyZW50KSkpIHsKIAotCQlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOworCQlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwogCiAJCS8qIEhpZGUgZXJyb3JzIGZyb20gbW1hcCgpIGFuZCBvdGhlciBjYWxsZXJzICovCiAJCXJldHVybiAwOwpAQCAtMzEwLDcgKzI5MSw2IEBACiAJcmV0dXJuIG5yX3BhZ2VzOwkJLyogZXJyb3Igb3IgcGFnZXMgTk9UIG1sb2NrZWQgKi8KIH0KIAotCiAvKgogICogbXVubG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtIG11bmxvY2sgYWxsIHBhZ2VzIGluIHRoZSB2bWEgcmFuZ2UuJwogICogQHZtYSAtIHZtYSBjb250YWluaW5nIHJhbmdlIHRvIGJlIG11bmxvY2soKWVkLgpAQCAtMzMwLDEwICszMTAsMzggQEAKICAqIGZyZWUgdGhlbS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gZnJlZWluZyBtbG9ja2VkIHBhZ2VzLgogICovCiB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWxydV9hZGRfZHJhaW4oKTsKIAl2bWEtPnZtX2ZsYWdzICY9IH5WTV9MT0NLRUQ7Ci0JX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAwKTsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJLyoKKwkJICogQWx0aG91Z2ggRk9MTF9EVU1QIGlzIGludGVuZGVkIGZvciBnZXRfZHVtcF9wYWdlKCksCisJCSAqIGl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGl0cyBzcGVjaWFsIHRyZWF0bWVudCBvZiB0aGUKKwkJICogWkVST19QQUdFIChyZXR1cm5pbmcgYW4gZXJyb3IgaW5zdGVhZCBvZiBkb2luZyBnZXRfcGFnZSkKKwkJICogc3VpdHMgbXVubG9jayB2ZXJ5IHdlbGwgKGFuZCBpZiBzb21laG93IGFuIGFibm9ybWFsIHBhZ2UKKwkJICogaGFzIHNuZWFrZWQgaW50byB0aGUgcmFuZ2UsIHdlIHdvbid0IG9vcHMgaGVyZTogZ3JlYXQpLgorCQkgKi8KKwkJcGFnZSA9IGZvbGxvd19wYWdlKHZtYSwgYWRkciwgRk9MTF9HRVQgfCBGT0xMX0RVTVApOworCQlpZiAocGFnZSAmJiAhSVNfRVJSKHBhZ2UpKSB7CisJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQkvKgorCQkJICogTGlrZSBpbiBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpLAorCQkJICogYmVjYXVzZSB3ZSBsb2NrIHBhZ2UgaGVyZSBhbmQgbWlncmF0aW9uIGlzCisJCQkgKiBibG9ja2VkIGJ5IHRoZSBlbGV2YXRlZCByZWZlcmVuY2UsIHdlIG5lZWQKKwkJCSAqIG9ubHkgY2hlY2sgZm9yIGZpbGUtY2FjaGUgcGFnZSB0cnVuY2F0aW9uLgorCQkJICovCisJCQlpZiAocGFnZS0+bWFwcGluZykKKwkJCQltdW5sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlwdXRfcGFnZShwYWdlKTsKKwkJfQorCQljb25kX3Jlc2NoZWQoKTsKKwl9CiB9CiAKIC8qCkBAIC00MDAsMTggKzQwOCwxNCBAQAogCSAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZQogCSAqIHNldCBWTV9MT0NLRUQsIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay4KIAkgKi8KLQl2bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7CiAKIAlpZiAobG9jaykgewotCQlyZXQgPSBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOwotCi0JCWlmIChyZXQgPiAwKSB7Ci0JCQltbS0+bG9ja2VkX3ZtIC09IHJldDsKLQkJCXJldCA9IDA7Ci0JCX0gZWxzZQotCQkJcmV0ID0gX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4ocmV0KTsgLyogdHJhbnNsYXRlIGlmIG5lZWRlZCAqLworCQl2bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7CisJCXJldCA9IF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0ID0gX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4ocmV0KTsKIAl9IGVsc2UgewotCQlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDApOworCQltdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDI2ODkyZTMuLjIxZDQwMjkgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbW11X25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtNTcwLDkgKzU3MCw5IEBACiAKIAkvKgogCSAqIFdoZW4gY2hhbmdpbmcgb25seSB2bWEtPnZtX2VuZCwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQKLQkgKiBhbm9uX3ZtYSBsb2NrOiBidXQgaXMgdGhhdCBjYXNlIHdvcnRoIG9wdGltaXppbmcgb3V0PworCSAqIGFub25fdm1hIGxvY2suCiAJICovCi0JaWYgKHZtYS0+YW5vbl92bWEpCisJaWYgKHZtYS0+YW5vbl92bWEgJiYgKGluc2VydCB8fCBpbXBvcnRlciB8fCBzdGFydCAhPSB2bWEtPnZtX3N0YXJ0KSkKIAkJYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwogCWlmIChhbm9uX3ZtYSkgewogCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKQEAgLTY1Niw5ICs2NTYsNiBAQAogCXZhbGlkYXRlX21tKG1tKTsKIH0KIAotLyogRmxhZ3MgdGhhdCBjYW4gYmUgaW5oZXJpdGVkIGZyb20gYW4gZXhpc3RpbmcgbWFwcGluZyB3aGVuIG1lcmdpbmcgKi8KLSNkZWZpbmUgVk1fTUVSR0VBQkxFX0ZMQUdTIChWTV9DQU5fTk9OTElORUFSKQotCiAvKgogICogSWYgdGhlIHZtYSBoYXMgYSAtPmNsb3NlIG9wZXJhdGlvbiB0aGVuIHRoZSBkcml2ZXIgcHJvYmFibHkgbmVlZHMgdG8gcmVsZWFzZQogICogcGVyLXZtYSByZXNvdXJjZXMsIHNvIHdlIGRvbid0IGF0dGVtcHQgdG8gbWVyZ2UgdGhvc2UuCkBAIC02NjYsNyArNjYzLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lcmdlYWJsZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyB2bV9mbGFncykKIHsKLQlpZiAoKHZtYS0+dm1fZmxhZ3MgXiB2bV9mbGFncykgJiB+Vk1fTUVSR0VBQkxFX0ZMQUdTKQorCS8qIFZNX0NBTl9OT05MSU5FQVIgbWF5IGdldCBzZXQgbGF0ZXIgYnkgZl9vcC0+bW1hcCgpICovCisJaWYgKCh2bWEtPnZtX2ZsYWdzIF4gdm1fZmxhZ3MpICYgflZNX0NBTl9OT05MSU5FQVIpCiAJCXJldHVybiAwOwogCWlmICh2bWEtPnZtX2ZpbGUgIT0gZmlsZSkKIAkJcmV0dXJuIDA7CkBAIC05NTEsNiArOTQ5LDI0IEBACiAJaWYgKG1tLT5tYXBfY291bnQgPiBzeXNjdGxfbWF4X21hcF9jb3VudCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoZmxhZ3MgJiBNQVBfSFVHRVRMQikgeworCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBOVUxMOworCQlpZiAoZmlsZSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qCisJCSAqIFZNX05PUkVTRVJWRSBpcyB1c2VkIGJlY2F1c2UgdGhlIHJlc2VydmF0aW9ucyB3aWxsIGJlCisJCSAqIHRha2VuIHdoZW4gdm1fb3BzLT5tbWFwKCkgaXMgY2FsbGVkCisJCSAqIEEgZHVtbXkgdXNlciB2YWx1ZSBpcyB1c2VkIGJlY2F1c2Ugd2UgYXJlIG5vdCBsb2NraW5nCisJCSAqIG1lbW9yeSBzbyBubyBhY2NvdW50aW5nIGlzIG5lY2Vzc2FyeQorCQkgKi8KKwkJbGVuID0gQUxJR04obGVuLCBodWdlX3BhZ2Vfc2l6ZSgmZGVmYXVsdF9oc3RhdGUpKTsKKwkJZmlsZSA9IGh1Z2V0bGJfZmlsZV9zZXR1cChIVUdFVExCX0FOT05fRklMRSwgbGVuLCBWTV9OT1JFU0VSVkUsCisJCQkJCQkmdXNlciwgSFVHRVRMQl9BTk9OSFVHRV9JTk9ERSk7CisJCWlmIChJU19FUlIoZmlsZSkpCisJCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKKwl9CisKIAkvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZQogCSAqIHRoYXQgaXQgcmVwcmVzZW50cyBhIHZhbGlkIHNlY3Rpb24gb2YgdGhlIGFkZHJlc3Mgc3BhY2UuCiAJICovCkBAIC05NjUsMTEgKzk4MSw5IEBACiAJdm1fZmxhZ3MgPSBjYWxjX3ZtX3Byb3RfYml0cyhwcm90KSB8IGNhbGNfdm1fZmxhZ19iaXRzKGZsYWdzKSB8CiAJCQltbS0+ZGVmX2ZsYWdzIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQzsKIAotCWlmIChmbGFncyAmIE1BUF9MT0NLRUQpIHsKKwlpZiAoZmxhZ3MgJiBNQVBfTE9DS0VEKQogCQlpZiAoIWNhbl9kb19tbG9jaygpKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJdm1fZmxhZ3MgfD0gVk1fTE9DS0VEOwotCX0KIAogCS8qIG1sb2NrIE1DTF9GVVRVUkU/ICovCiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CkBAIC0xMTk1LDIxICsxMjA5LDIxIEBACiAJCQlnb3RvIHVubWFwX2FuZF9mcmVlX3ZtYTsKIAkJaWYgKHZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKIAkJCWFkZGVkX2V4ZV9maWxlX3ZtYShtbSk7CisKKwkJLyogQ2FuIGFkZHIgaGF2ZSBjaGFuZ2VkPz8KKwkJICoKKwkJICogQW5zd2VyOiBZZXMsIHNldmVyYWwgZGV2aWNlIGRyaXZlcnMgY2FuIGRvIGl0IGluIHRoZWlyCisJCSAqICAgICAgICAgZl9vcC0+bW1hcCBtZXRob2QuIC1EYXZlTQorCQkgKi8KKwkJYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJCXBnb2ZmID0gdm1hLT52bV9wZ29mZjsKKwkJdm1fZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwogCX0gZWxzZSBpZiAodm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHsKIAkJZXJyb3IgPSBzaG1lbV96ZXJvX3NldHVwKHZtYSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZnJlZV92bWE7CiAJfQogCi0JLyogQ2FuIGFkZHIgaGF2ZSBjaGFuZ2VkPz8KLQkgKgotCSAqIEFuc3dlcjogWWVzLCBzZXZlcmFsIGRldmljZSBkcml2ZXJzIGNhbiBkbyBpdCBpbiB0aGVpcgotCSAqICAgICAgICAgZl9vcC0+bW1hcCBtZXRob2QuIC1EYXZlTQotCSAqLwotCWFkZHIgPSB2bWEtPnZtX3N0YXJ0OwotCXBnb2ZmID0gdm1hLT52bV9wZ29mZjsKLQl2bV9mbGFncyA9IHZtYS0+dm1fZmxhZ3M7Ci0KIAlpZiAodm1hX3dhbnRzX3dyaXRlbm90aWZ5KHZtYSkpCiAJCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncyAmIH5WTV9TSEFSRUQpOwogCkBAIC0xMjIwLDcgKzEyMzQsNyBAQAogCWlmIChjb3JyZWN0X3djb3VudCkKIAkJYXRvbWljX2luYygmaW5vZGUtPmlfd3JpdGVjb3VudCk7CiBvdXQ6Ci0JcGVyZl9jb3VudGVyX21tYXAodm1hKTsKKwlwZXJmX2V2ZW50X21tYXAodm1hKTsKIAogCW1tLT50b3RhbF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAl2bV9zdGF0X2FjY291bnQobW0sIHZtX2ZsYWdzLCBmaWxlLCBsZW4gPj4gUEFHRV9TSElGVCk7CkBAIC0yMTExLDYgKzIxMjUsNyBAQAogCS8qIFVzZSAtMSBoZXJlIHRvIGVuc3VyZSBhbGwgVk1BcyBpbiB0aGUgbW0gYXJlIHVubWFwcGVkICovCiAJZW5kID0gdW5tYXBfdm1hcygmdGxiLCB2bWEsIDAsIC0xLCAmbnJfYWNjb3VudGVkLCBOVUxMKTsKIAl2bV91bmFjY3RfbWVtb3J5KG5yX2FjY291bnRlZCk7CisKIAlmcmVlX3BndGFibGVzKHRsYiwgdm1hLCBGSVJTVF9VU0VSX0FERFJFU1MsIDApOwogCXRsYl9maW5pc2hfbW11KHRsYiwgMCwgZW5kKTsKIApAQCAtMjMwOCw3ICsyMzIzLDcgQEAKIAogCW1tLT50b3RhbF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAotCXBlcmZfY291bnRlcl9tbWFwKHZtYSk7CisJcGVyZl9ldmVudF9tbWFwKHZtYSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL21tdV9jb250ZXh0LmMgYi9tbS9tbXVfY29udGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDkwODEKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9tbXVfY29udGV4dC5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKgorICogU2VlIC4uL0NPUFlJTkcgZm9yIGxpY2Vuc2luZyB0ZXJtcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworLyoKKyAqIHVzZV9tbQorICoJTWFrZXMgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZCB0YWtlIG9uIHRoZSBzcGVjaWZpZWQKKyAqCW1tIGNvbnRleHQuCisgKglDYWxsZWQgYnkgdGhlIHJldHJ5IHRocmVhZCBleGVjdXRlIHJldHJpZXMgd2l0aGluIHRoZQorICoJaW9jYiBpc3N1ZXIncyBtbSBjb250ZXh0LCBzbyB0aGF0IGNvcHlfZnJvbS90b191c2VyCisgKglvcGVyYXRpb25zIHdvcmsgc2VhbWxlc3NseSBmb3IgYWlvLgorICoJKE5vdGU6IHRoaXMgcm91dGluZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seQorICoJZnJvbSBhIGtlcm5lbCB0aHJlYWQgY29udGV4dCkKKyAqLwordm9pZCB1c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXRhc2tfbG9jayh0c2spOworCWFjdGl2ZV9tbSA9IHRzay0+YWN0aXZlX21tOworCWlmIChhY3RpdmVfbW0gIT0gbW0pIHsKKwkJYXRvbWljX2luYygmbW0tPm1tX2NvdW50KTsKKwkJdHNrLT5hY3RpdmVfbW0gPSBtbTsKKwl9CisJdHNrLT5tbSA9IG1tOworCXN3aXRjaF9tbShhY3RpdmVfbW0sIG1tLCB0c2spOworCXRhc2tfdW5sb2NrKHRzayk7CisKKwlpZiAoYWN0aXZlX21tICE9IG1tKQorCQltbWRyb3AoYWN0aXZlX21tKTsKK30KKworLyoKKyAqIHVudXNlX21tCisgKglSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzZV9tbSwgaS5lLiByZWxlYXNlcyB0aGUKKyAqCXNwZWNpZmllZCBtbSBjb250ZXh0IHdoaWNoIHdhcyBlYXJsaWVyIHRha2VuIG9uCisgKglieSB0aGUgY2FsbGluZyBrZXJuZWwgdGhyZWFkCisgKgkoTm90ZTogdGhpcyByb3V0aW5lIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbmx5CisgKglmcm9tIGEga2VybmVsIHRocmVhZCBjb250ZXh0KQorICovCit2b2lkIHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXRhc2tfbG9jayh0c2spOworCXRzay0+bW0gPSBOVUxMOworCS8qIGFjdGl2ZV9tbSBpcyBzdGlsbCAnbW0nICovCisJZW50ZXJfbGF6eV90bGIobW0sIHRzayk7CisJdGFza191bmxvY2sodHNrKTsKK30KZGlmZiAtLWdpdCBhL21tL21tdV9ub3RpZmllci5jIGIvbW0vbW11X25vdGlmaWVyLmMKaW5kZXggNWY0ZWYwMi4uN2UzM2YyYyAxMDA2NDQKLS0tIGEvbW0vbW11X25vdGlmaWVyLmMKKysrIGIvbW0vbW11X25vdGlmaWVyLmMKQEAgLTk5LDYgKzk5LDI2IEBACiAJcmV0dXJuIHlvdW5nOwogfQogCit2b2lkIF9fbW11X25vdGlmaWVyX2NoYW5nZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgICBwdGVfdCBwdGUpCit7CisJc3RydWN0IG1tdV9ub3RpZmllciAqbW47CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1uLCBuLCAmbW0tPm1tdV9ub3RpZmllcl9tbS0+bGlzdCwgaGxpc3QpIHsKKwkJaWYgKG1uLT5vcHMtPmNoYW5nZV9wdGUpCisJCQltbi0+b3BzLT5jaGFuZ2VfcHRlKG1uLCBtbSwgYWRkcmVzcywgcHRlKTsKKwkJLyoKKwkJICogU29tZSBkcml2ZXJzIGRvbid0IGhhdmUgY2hhbmdlX3B0ZSwKKwkJICogc28gd2UgbXVzdCBjYWxsIGludmFsaWRhdGVfcGFnZSBpbiB0aGF0IGNhc2UuCisJCSAqLworCQllbHNlIGlmIChtbi0+b3BzLT5pbnZhbGlkYXRlX3BhZ2UpCisJCQltbi0+b3BzLT5pbnZhbGlkYXRlX3BhZ2UobW4sIG1tLCBhZGRyZXNzKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKIHZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jCmluZGV4IGQ4MDMxMWIuLjhiYzk2OWQgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKKysrIGIvbW0vbXByb3RlY3QuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtMzAwLDcgKzMwMCw3IEBACiAJCWVycm9yID0gbXByb3RlY3RfZml4dXAodm1hLCAmcHJldiwgbnN0YXJ0LCB0bXAsIG5ld2ZsYWdzKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7Ci0JCXBlcmZfY291bnRlcl9tbWFwKHZtYSk7CisJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOwogCQluc3RhcnQgPSB0bXA7CiAKIAkJaWYgKG5zdGFydCA8IHByZXYtPnZtX2VuZCkKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggYTM5YjdiOS4uMjBhMDdkYiAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgpAQCAtMTc0LDYgKzE3NSw3IEBACiAJdW5zaWduZWQgbG9uZyBleGNlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl92bTsKIAlpbnQgc3BsaXQgPSAwOworCWludCBlcnI7CiAKIAkvKgogCSAqIFdlJ2QgcHJlZmVyIHRvIGF2b2lkIGZhaWx1cmUgbGF0ZXIgb24gaW4gZG9fbXVubWFwOgpAQCAtMTgyLDYgKzE4NCwxOCBAQAogCWlmIChtbS0+bWFwX2NvdW50ID49IHN5c2N0bF9tYXhfbWFwX2NvdW50IC0gMykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKgorCSAqIEFkdmlzZSBLU00gdG8gYnJlYWsgYW55IEtTTSBwYWdlcyBpbiB0aGUgYXJlYSB0byBiZSBtb3ZlZDoKKwkgKiBpdCB3b3VsZCBiZSBjb25mdXNpbmcgaWYgdGhleSB3ZXJlIHRvIHR1cm4gdXAgYXQgdGhlIG5ldworCSAqIGxvY2F0aW9uLCB3aGVyZSB0aGV5IGhhcHBlbiB0byBjb2luY2lkZSB3aXRoIGRpZmZlcmVudCBLU00KKwkgKiBwYWdlcyByZWNlbnRseSB1bm1hcHBlZC4gIEJ1dCBsZWF2ZSB2bWEtPnZtX2ZsYWdzIGFzIGl0IHdhcywKKwkgKiBzbyBLU00gY2FuIGNvbWUgYXJvdW5kIHRvIG1lcmdlIG9uIHZtYSBhbmQgbmV3X3ZtYSBhZnRlcndhcmRzLgorCSAqLworCWVyciA9IGtzbV9tYWR2aXNlKHZtYSwgb2xkX2FkZHIsIG9sZF9hZGRyICsgb2xkX2xlbiwKKwkJCQkJCU1BRFZfVU5NRVJHRUFCTEUsICZ2bV9mbGFncyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCW5ld19wZ29mZiA9IHZtYS0+dm1fcGdvZmYgKyAoKG9sZF9hZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCk7CiAJbmV3X3ZtYSA9IGNvcHlfdm1hKCZ2bWEsIG5ld19hZGRyLCBuZXdfbGVuLCBuZXdfcGdvZmYpOwogCWlmICghbmV3X3ZtYSkKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDY2ZTgxZTcuLjhkNDg0MjQgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKQpAQCAtNTYsMTIgKzU3LDExIEBACiAJbm9fcHJpbnRrKEtFUk5fREVCVUcgRk1UIlxuIiwgIyNfX1ZBX0FSR1NfXykKICNlbmRpZgogCi0jaW5jbHVkZSAiaW50ZXJuYWwuaCIKLQogdm9pZCAqaGlnaF9tZW1vcnk7CiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOwogdW5zaWduZWQgbG9uZyBudW1fcGh5c3BhZ2VzOwordW5zaWduZWQgbG9uZyBoaWdoZXN0X21lbW1hcF9wZm47CiBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgdm1fY29tbWl0dGVkX2FzOwogaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSA9IE9WRVJDT01NSVRfR1VFU1M7IC8qIGhldXJpc3RpYyBvdmVyY29tbWl0ICovCiBpbnQgc3lzY3RsX292ZXJjb21taXRfcmF0aW8gPSA1MDsgLyogZGVmYXVsdCBpcyA1MCUgKi8KQEAgLTE3MCwyMSArMTcwLDIwIEBACiB9CiAKIGludCBfX2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIGludCBmbGFncywKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIHVuc2lnbmVkIGludCBmb2xsX2ZsYWdzLAogCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAlpbnQgaTsKLQlpbnQgd3JpdGUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19XUklURSk7Ci0JaW50IGZvcmNlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfRk9SQ0UpOwotCWludCBpZ25vcmUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TKTsKIAogCS8qIGNhbGN1bGF0ZSByZXF1aXJlZCByZWFkIG9yIHdyaXRlIHBlcm1pc3Npb25zLgotCSAqIC0gaWYgJ2ZvcmNlJyBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCisJICogSWYgRk9MTF9GT1JDRSBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCiAJICovCi0Jdm1fZmxhZ3MgID0gd3JpdGUgPyAoVk1fV1JJVEUgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX01BWVJFQUQpOwotCXZtX2ZsYWdzICY9IGZvcmNlID8gKFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX1dSSVRFKTsKKwl2bV9mbGFncyAgPSAoZm9sbF9mbGFncyAmIEZPTExfV1JJVEUpID8KKwkJCShWTV9XUklURSB8IFZNX01BWVdSSVRFKSA6IChWTV9SRUFEIHwgVk1fTUFZUkVBRCk7CisJdm1fZmxhZ3MgJj0gKGZvbGxfZmxhZ3MgJiBGT0xMX0ZPUkNFKSA/CisJCQkoVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFKSA6IChWTV9SRUFEIHwgVk1fV1JJVEUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKQEAgLTE5Miw4ICsxOTEsOCBAQAogCQkJZ290byBmaW5pc2hfb3JfZmF1bHQ7CiAKIAkJLyogcHJvdGVjdCB3aGF0IHdlIGNhbiwgaW5jbHVkaW5nIGNoYXJkZXZzICovCi0JCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSB8fAotCQkgICAgKCFpZ25vcmUgJiYgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKSkKKwkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSkgfHwKKwkJICAgICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkKIAkJCWdvdG8gZmluaXNoX29yX2ZhdWx0OwogCiAJCWlmIChwYWdlcykgewpAQCAtMjEyLDcgKzIxMSw2IEBACiAJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiB9CiAKLQogLyoKICAqIGdldCBhIGxpc3Qgb2YgcGFnZXMgaW4gYW4gYWRkcmVzcyByYW5nZSBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmllZCBwcm9jZXNzCiAgKiBhbmQgaW5kaWNhdGUgdGhlIFZNQSB0aGF0IGNvdmVycyBlYWNoIHBhZ2UKQEAgLTIyNyw5ICsyMjUsOSBAQAogCWludCBmbGFncyA9IDA7CiAKIAlpZiAod3JpdGUpCi0JCWZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKwkJZmxhZ3MgfD0gRk9MTF9XUklURTsKIAlpZiAoZm9yY2UpCi0JCWZsYWdzIHw9IEdVUF9GTEFHU19GT1JDRTsKKwkJZmxhZ3MgfD0gRk9MTF9GT1JDRTsKIAogCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIHN0YXJ0LCBucl9wYWdlcywgZmxhZ3MsIHBhZ2VzLCB2bWFzKTsKIH0KQEAgLTYyNyw2ICs2MjUsMjIgQEAKIH0KIAogLyoKKyAqIHVwZGF0ZSBwcm90ZWN0aW9uIG9uIGEgdm1hCisgKi8KK3N0YXRpYyB2b2lkIHByb3RlY3Rfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworI2lmZGVmIENPTkZJR19NUFUKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQgJiBQQUdFX01BU0s7CisJd2hpbGUgKHN0YXJ0IDwgdm1hLT52bV9lbmQpIHsKKwkJcHJvdGVjdF9wYWdlKG1tLCBzdGFydCwgZmxhZ3MpOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorCXVwZGF0ZV9wcm90ZWN0aW9ucyhtbSk7CisjZW5kaWYKK30KKworLyoKICAqIGFkZCBhIFZNQSBpbnRvIGEgcHJvY2VzcydzIG1tX3N0cnVjdCBpbiB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGxpc3QKICAqIGFuZCB0cmVlIGFuZCBhZGQgdG8gdGhlIGFkZHJlc3Mgc3BhY2UncyBwYWdlIHRyZWUgYWxzbyBpZiBub3QgYW4gYW5vbnltb3VzCiAgKiBwYWdlCkBAIC02NDUsNiArNjU5LDggQEAKIAltbS0+bWFwX2NvdW50Kys7CiAJdm1hLT52bV9tbSA9IG1tOwogCisJcHJvdGVjdF92bWEodm1hLCB2bWEtPnZtX2ZsYWdzKTsKKwogCS8qIGFkZCB0aGUgVk1BIHRvIHRoZSBtYXBwaW5nICovCiAJaWYgKHZtYS0+dm1fZmlsZSkgewogCQltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CkBAIC03MDcsNiArNzIzLDggQEAKIAogCWtlbnRlcigiJXAiLCB2bWEpOwogCisJcHJvdGVjdF92bWEodm1hLCAwKTsKKwogCW1tLT5tYXBfY291bnQtLTsKIAlpZiAobW0tPm1tYXBfY2FjaGUgPT0gdm1hKQogCQltbS0+bW1hcF9jYWNoZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCBhN2IyNDYwLi5lYTIxNDdkIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTM0LDYgKzM0LDIzIEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpvbmVfc2Nhbl9sb2NrKTsKIC8qICNkZWZpbmUgREVCVUcgKi8KIAorLyoKKyAqIElzIGFsbCB0aHJlYWRzIG9mIHRoZSB0YXJnZXQgcHJvY2VzcyBub2RlcyBvdmVybGFwIG91cnM/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2ludGVyc2VjdHNfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCXQgPSB0c2s7CisJZG8geworCQlpZiAoY3B1c2V0X21lbXNfYWxsb3dlZF9pbnRlcnNlY3RzKGN1cnJlbnQsIHQpKQorCQkJcmV0dXJuIDE7CisJCXQgPSBuZXh0X3RocmVhZCh0KTsKKwl9IHdoaWxlICh0ICE9IHRzayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBiYWRuZXNzIC0gY2FsY3VsYXRlIGEgbnVtZXJpYyB2YWx1ZSBmb3IgaG93IGJhZCB0aGlzIHRhc2sgaGFzIGJlZW4KICAqIEBwOiB0YXNrIHN0cnVjdCBvZiB3aGljaCB0YXNrIHdlIHNob3VsZCBjYWxjdWxhdGUKQEAgLTU4LDYgKzc1LDEzIEBACiAJdW5zaWduZWQgbG9uZyBwb2ludHMsIGNwdV90aW1lLCBydW5fdGltZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOworCWludCBvb21fYWRqID0gcC0+c2lnbmFsLT5vb21fYWRqOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGFza190aW1lOworCXVuc2lnbmVkIGxvbmcgdXRpbWU7CisJdW5zaWduZWQgbG9uZyBzdGltZTsKKworCWlmIChvb21fYWRqID09IE9PTV9ESVNBQkxFKQorCQlyZXR1cm4gMDsKIAogCXRhc2tfbG9jayhwKTsKIAltbSA9IHAtPm1tOwpAQCAtNzksNyArMTAzLDcgQEAKIAkvKgogCSAqIHN3YXBvZmYgY2FuIGVhc2lseSB1c2UgdXAgYWxsIG1lbW9yeSwgc28ga2lsbCB0aG9zZSBmaXJzdC4KIAkgKi8KLQlpZiAocC0+ZmxhZ3MgJiBQRl9TV0FQT0ZGKQorCWlmIChwLT5mbGFncyAmIFBGX09PTV9PUklHSU4pCiAJCXJldHVybiBVTE9OR19NQVg7CiAKIAkvKgpAQCAtMTAyLDggKzEyNiwxMSBAQAogICAgICAgICAgKiBvZiBzZWNvbmRzLiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBvdGhlciB0aGFuCiAgICAgICAgICAqIHRoYXQgaXQgdHVybmVkIG91dCB0byB3b3JrIHZlcnkgd2VsbCBpbiBwcmFjdGljZS4KIAkgKi8KLQljcHVfdGltZSA9IChjcHV0aW1lX3RvX2ppZmZpZXMocC0+dXRpbWUpICsgY3B1dGltZV90b19qaWZmaWVzKHAtPnN0aW1lKSkKLQkJPj4gKFNISUZUX0haICsgMyk7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJnRhc2tfdGltZSk7CisJdXRpbWUgPSBjcHV0aW1lX3RvX2ppZmZpZXModGFza190aW1lLnV0aW1lKTsKKwlzdGltZSA9IGNwdXRpbWVfdG9famlmZmllcyh0YXNrX3RpbWUuc3RpbWUpOworCWNwdV90aW1lID0gKHV0aW1lICsgc3RpbWUpID4+IChTSElGVF9IWiArIDMpOworCiAKIAlpZiAodXB0aW1lID49IHAtPnN0YXJ0X3RpbWUudHZfc2VjKQogCQlydW5fdGltZSA9ICh1cHRpbWUgLSBwLT5zdGFydF90aW1lLnR2X3NlYykgPj4gMTA7CkBAIC0xNDQsMTkgKzE3MSwxOSBAQAogCSAqIGJlY2F1c2UgcCBtYXkgaGF2ZSBhbGxvY2F0ZWQgb3Igb3RoZXJ3aXNlIG1hcHBlZCBtZW1vcnkgb24KIAkgKiB0aGlzIG5vZGUgYmVmb3JlLiBIb3dldmVyIGl0IHdpbGwgYmUgbGVzcyBsaWtlbHkuCiAJICovCi0JaWYgKCFjcHVzZXRfbWVtc19hbGxvd2VkX2ludGVyc2VjdHMoY3VycmVudCwgcCkpCisJaWYgKCFoYXNfaW50ZXJzZWN0c19tZW1zX2FsbG93ZWQocCkpCiAJCXBvaW50cyAvPSA4OwogCiAJLyoKLQkgKiBBZGp1c3QgdGhlIHNjb3JlIGJ5IG9vbWtpbGxhZGouCisJICogQWRqdXN0IHRoZSBzY29yZSBieSBvb21fYWRqLgogCSAqLwotCWlmIChwLT5vb21raWxsYWRqKSB7Ci0JCWlmIChwLT5vb21raWxsYWRqID4gMCkgeworCWlmIChvb21fYWRqKSB7CisJCWlmIChvb21fYWRqID4gMCkgewogCQkJaWYgKCFwb2ludHMpCiAJCQkJcG9pbnRzID0gMTsKLQkJCXBvaW50cyA8PD0gcC0+b29ta2lsbGFkajsKKwkJCXBvaW50cyA8PD0gb29tX2FkajsKIAkJfSBlbHNlCi0JCQlwb2ludHMgPj49IC0ocC0+b29ta2lsbGFkaik7CisJCQlwb2ludHMgPj49IC0ob29tX2Fkaik7CiAJfQogCiAjaWZkZWYgREVCVUcKQEAgLTIwMCwxMyArMjI3LDEzIEBACiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzZWxlY3RfYmFkX3Byb2Nlc3ModW5zaWduZWQgbG9uZyAqcHBvaW50cywKIAkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjaG9zZW4gPSBOVUxMOwogCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CiAJKnBwb2ludHMgPSAwOwogCiAJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7Ci0JZG9fZWFjaF90aHJlYWQoZywgcCkgeworCWZvcl9lYWNoX3Byb2Nlc3MocCkgewogCQl1bnNpZ25lZCBsb25nIHBvaW50czsKIAogCQkvKgpAQCAtMjUxLDcgKzI3OCw3IEBACiAJCQkqcHBvaW50cyA9IFVMT05HX01BWDsKIAkJfQogCi0JCWlmIChwLT5vb21raWxsYWRqID09IE9PTV9ESVNBQkxFKQorCQlpZiAocC0+c2lnbmFsLT5vb21fYWRqID09IE9PTV9ESVNBQkxFKQogCQkJY29udGludWU7CiAKIAkJcG9pbnRzID0gYmFkbmVzcyhwLCB1cHRpbWUudHZfc2VjKTsKQEAgLTI1OSw3ICsyODYsNyBAQAogCQkJY2hvc2VuID0gcDsKIAkJCSpwcG9pbnRzID0gcG9pbnRzOwogCQl9Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKKwl9CiAKIAlyZXR1cm4gY2hvc2VuOwogfQpAQCAtMzA0LDcgKzMzMSw3IEBACiAJCX0KIAkJcHJpbnRrKEtFUk5fSU5GTyAiWyU1ZF0gJTVkICU1ZCAlOGx1ICU4bHUgJTNkICAgICAlM2QgJXNcbiIsCiAJCSAgICAgICBwLT5waWQsIF9fdGFza19jcmVkKHApLT51aWQsIHAtPnRnaWQsIG1tLT50b3RhbF92bSwKLQkJICAgICAgIGdldF9tbV9yc3MobW0pLCAoaW50KXRhc2tfY3B1KHApLCBwLT5vb21raWxsYWRqLAorCQkgICAgICAgZ2V0X21tX3JzcyhtbSksIChpbnQpdGFza19jcHUocCksIHAtPnNpZ25hbC0+b29tX2FkaiwKIAkJICAgICAgIHAtPmNvbW0pOwogCQl0YXNrX3VubG9jayhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwpAQCAtMzQ2LDExICszNzMsNiBAQAogCiBzdGF0aWMgaW50IG9vbV9raWxsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnE7Ci0KLQltbSA9IHAtPm1tOwotCiAJLyogV0FSTklORzogbW0gbWF5IG5vdCBiZSBkZXJlZmVyZW5jZWQgc2luY2Ugd2UgZGlkIG5vdCBvYnRhaW4gaXRzCiAJICogdmFsdWUgZnJvbSBnZXRfdGFza19tbShwKS4gIFRoaXMgaXMgT0sgc2luY2UgYWxsIHdlIG5lZWQgdG8gZG8gaXMKIAkgKiBjb21wYXJlIG1tIHRvIHEtPm1tIGJlbG93LgpAQCAtMzU5LDMwICszODEsMTEgQEAKIAkgKiBjaGFuZ2UgdG8gTlVMTCBhdCBhbnkgdGltZSBzaW5jZSB3ZSBkbyBub3QgaG9sZCB0YXNrX2xvY2socCkuCiAJICogSG93ZXZlciwgdGhpcyBpcyBvZiBubyBjb25jZXJuIHRvIHVzLgogCSAqLwotCi0JaWYgKG1tID09IE5VTEwpCisJaWYgKCFwLT5tbSB8fCBwLT5zaWduYWwtPm9vbV9hZGogPT0gT09NX0RJU0FCTEUpCiAJCXJldHVybiAxOwogCi0JLyoKLQkgKiBEb24ndCBraWxsIHRoZSBwcm9jZXNzIGlmIGFueSB0aHJlYWRzIGFyZSBzZXQgdG8gT09NX0RJU0FCTEUKLQkgKi8KLQlkb19lYWNoX3RocmVhZChnLCBxKSB7Ci0JCWlmIChxLT5tbSA9PSBtbSAmJiBxLT5vb21raWxsYWRqID09IE9PTV9ESVNBQkxFKQotCQkJcmV0dXJuIDE7Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCBxKTsKLQogCV9fb29tX2tpbGxfdGFzayhwLCAxKTsKIAotCS8qCi0JICoga2lsbCBhbGwgcHJvY2Vzc2VzIHRoYXQgc2hhcmUgdGhlIC0+bW0gKGkuZS4gYWxsIHRocmVhZHMpLAotCSAqIGJ1dCBhcmUgaW4gYSBkaWZmZXJlbnQgdGhyZWFkIGdyb3VwLiBEb24ndCBsZXQgdGhlbSBoYXZlIGFjY2VzcwotCSAqIHRvIG1lbW9yeSByZXNlcnZlcyB0aG91Z2gsIG90aGVyd2lzZSB3ZSBtaWdodCBkZXBsZXRlIGFsbCBtZW1vcnkuCi0JICovCi0JZG9fZWFjaF90aHJlYWQoZywgcSkgewotCQlpZiAocS0+bW0gPT0gbW0gJiYgIXNhbWVfdGhyZWFkX2dyb3VwKHEsIHApKQotCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIHEpOwotCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk0LDggKzM5Nyw5IEBACiAKIAlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGludm9rZWQgb29tLWtpbGxlcjogIgotCQkJImdmcF9tYXNrPTB4JXgsIG9yZGVyPSVkLCBvb21raWxsYWRqPSVkXG4iLAotCQkJY3VycmVudC0+Y29tbSwgZ2ZwX21hc2ssIG9yZGVyLCBjdXJyZW50LT5vb21raWxsYWRqKTsKKwkJCSJnZnBfbWFzaz0weCV4LCBvcmRlcj0lZCwgb29tX2Fkaj0lZFxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sIGdmcF9tYXNrLCBvcmRlciwKKwkJCWN1cnJlbnQtPnNpZ25hbC0+b29tX2Fkaik7CiAJCXRhc2tfbG9jayhjdXJyZW50KTsKIAkJY3B1c2V0X3ByaW50X3Rhc2tfbWVtc19hbGxvd2VkKGN1cnJlbnQpOwogCQl0YXNrX3VubG9jayhjdXJyZW50KTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDFlZWE0ZmEuLjVmMzc4ZGQ1IDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTM4MCw3ICszODAsOCBAQAogCQlzdHJ1Y3Qgem9uZSAqeiA9CiAJCQkmTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzW1pPTkVfSElHSE1FTV07CiAKLQkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKyB6b25lX2xydV9wYWdlcyh6KTsKKwkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKworCQkgICAgIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoeik7CiAJfQogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgdGhlIG51bWJlciBvZiBoaWdobWVtIHBhZ2VzIGlzIG5ldmVyIGxhcmdlcgpAQCAtNDA0LDcgKzQwNSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB4OwogCi0JeCA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICsgZ2xvYmFsX2xydV9wYWdlcygpOworCXggPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSArIGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpOwogCiAJaWYgKCF2bV9oaWdobWVtX2lzX2RpcnR5YWJsZSkKIAkJeCAtPSBoaWdobWVtX2RpcnR5YWJsZV9tZW1vcnkoeCk7CkBAIC00ODUsNiArNDg2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGJkaV90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBwYWdlc193cml0dGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIHdyaXRlX2NodW5rID0gc3luY193cml0ZWJhY2tfcGFnZXMoKTsKKwl1bnNpZ25lZCBsb25nIHBhdXNlID0gMTsKIAogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCkBAIC01NjEsNyArNTYzLDE1IEBACiAJCWlmIChwYWdlc193cml0dGVuID49IHdyaXRlX2NodW5rKQogCQkJYnJlYWs7CQkvKiBXZSd2ZSBkb25lIG91ciBkdXR5ICovCiAKLQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHBhdXNlKTsKKworCQkvKgorCQkgKiBJbmNyZWFzZSB0aGUgZGVsYXkgZm9yIGVhY2ggbG9vcCwgdXAgdG8gb3VyIHByZXZpb3VzCisJCSAqIGRlZmF1bHQgb2YgdGFraW5nIGEgMTAwbXMgbmFwLgorCQkgKi8KKwkJcGF1c2UgPDw9IDE7CisJCWlmIChwYXVzZSA+IEhaIC8gMTApCisJCQlwYXVzZSA9IEhaIC8gMTA7CiAJfQogCiAJaWYgKGJkaV9ucl9yZWNsYWltYWJsZSArIGJkaV9ucl93cml0ZWJhY2sgPCBiZGlfdGhyZXNoICYmCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYTBkZTE1Zi4uNTcxN2YyNyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva21lbS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC03MSw3ICs3Miw2IEBACiAKIHVuc2lnbmVkIGxvbmcgdG90YWxyYW1fcGFnZXMgX19yZWFkX21vc3RseTsKIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzIF9fcmVhZF9tb3N0bHk7Ci11bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5OwogaW50IHBlcmNwdV9wYWdlbGlzdF9mcmFjdGlvbjsKIGdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7CiAKQEAgLTEyMyw4ICsxMjMsOCBAQAogCiBpbnQgbWluX2ZyZWVfa2J5dGVzID0gMTAyNDsKIAotdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIG5yX2tlcm5lbF9wYWdlczsKLXVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBucl9hbGxfcGFnZXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIG5yX2tlcm5lbF9wYWdlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgbnJfYWxsX3BhZ2VzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBkbWFfcmVzZXJ2ZTsKIAogI2lmZGVmIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUApAQCAtNTEwLDcgKzUxMCw3IEBACiB9CiAKIC8qCi0gKiBGcmVlcyBhIGxpc3Qgb2YgcGFnZXMuIAorICogRnJlZXMgYSBudW1iZXIgb2YgcGFnZXMgZnJvbSB0aGUgUENQIGxpc3RzCiAgKiBBc3N1bWVzIGFsbCBwYWdlcyBvbiBsaXN0IGFyZSBpbiBzYW1lIHpvbmUsIGFuZCBvZiBzYW1lIG9yZGVyLgogICogY291bnQgaXMgdGhlIG51bWJlciBvZiBwYWdlcyB0byBmcmVlLgogICoKQEAgLTUyMCwyMiArNTIwLDQyIEBACiAgKiBBbmQgY2xlYXIgdGhlIHpvbmUncyBwYWdlc19zY2FubmVkIGNvdW50ZXIsIHRvIGhvbGQgb2ZmIHRoZSAiYWxsIHBhZ2VzIGFyZQogICogcGlubmVkIiBkZXRlY3Rpb24gbG9naWMuCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IGNvdW50LAotCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgb3JkZXIpCitzdGF0aWMgdm9pZCBmcmVlX3BjcHBhZ2VzX2J1bGsoc3RydWN0IHpvbmUgKnpvbmUsIGludCBjb3VudCwKKwkJCQkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCkKIHsKKwlpbnQgbWlncmF0ZXR5cGUgPSAwOworCWludCBiYXRjaF9mcmVlID0gMDsKKwogCXNwaW5fbG9jaygmem9uZS0+bG9jayk7CiAJem9uZV9jbGVhcl9mbGFnKHpvbmUsIFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUpOwogCXpvbmUtPnBhZ2VzX3NjYW5uZWQgPSAwOwogCi0JX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMsIGNvdW50IDw8IG9yZGVyKTsKLQl3aGlsZSAoY291bnQtLSkgeworCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTLCBjb3VudCk7CisJd2hpbGUgKGNvdW50KSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlOworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JCVZNX0JVR19PTihsaXN0X2VtcHR5KGxpc3QpKTsKLQkJcGFnZSA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCS8qIGhhdmUgdG8gZGVsZXRlIGl0IGFzIF9fZnJlZV9vbmVfcGFnZSBsaXN0IG1hbmlwdWxhdGVzICovCi0JCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQlfX2ZyZWVfb25lX3BhZ2UocGFnZSwgem9uZSwgb3JkZXIsIHBhZ2VfcHJpdmF0ZShwYWdlKSk7CisJCS8qCisJCSAqIFJlbW92ZSBwYWdlcyBmcm9tIGxpc3RzIGluIGEgcm91bmQtcm9iaW4gZmFzaGlvbi4gQQorCQkgKiBiYXRjaF9mcmVlIGNvdW50IGlzIG1haW50YWluZWQgdGhhdCBpcyBpbmNyZW1lbnRlZCB3aGVuIGFuCisJCSAqIGVtcHR5IGxpc3QgaXMgZW5jb3VudGVyZWQuICBUaGlzIGlzIHNvIG1vcmUgcGFnZXMgYXJlIGZyZWVkCisJCSAqIG9mZiBmdWxsZXIgbGlzdHMgaW5zdGVhZCBvZiBzcGlubmluZyBleGNlc3NpdmVseSBhcm91bmQgZW1wdHkKKwkJICogbGlzdHMKKwkJICovCisJCWRvIHsKKwkJCWJhdGNoX2ZyZWUrKzsKKwkJCWlmICgrK21pZ3JhdGV0eXBlID09IE1JR1JBVEVfUENQVFlQRVMpCisJCQkJbWlncmF0ZXR5cGUgPSAwOworCQkJbGlzdCA9ICZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXTsKKwkJfSB3aGlsZSAobGlzdF9lbXB0eShsaXN0KSk7CisKKwkJZG8geworCQkJcGFnZSA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSk7CisJCQkvKiBtdXN0IGRlbGV0ZSBhcyBfX2ZyZWVfb25lX3BhZ2UgbGlzdCBtYW5pcHVsYXRlcyAqLworCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJCQlfX2ZyZWVfb25lX3BhZ2UocGFnZSwgem9uZSwgMCwgbWlncmF0ZXR5cGUpOworCQkJdHJhY2VfbW1fcGFnZV9wY3B1X2RyYWluKHBhZ2UsIDAsIG1pZ3JhdGV0eXBlKTsKKwkJfSB3aGlsZSAoLS1jb3VudCAmJiAtLWJhdGNoX2ZyZWUgJiYgIWxpc3RfZW1wdHkobGlzdCkpOwogCX0KIAlzcGluX3VubG9jaygmem9uZS0+bG9jayk7CiB9CkBAIC01NTcsNyArNTc3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCWludCBiYWQgPSAwOwotCWludCB3YXNNbG9ja2VkID0gVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSk7CisJaW50IHdhc01sb2NrZWQgPSBfX1Rlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpOwogCiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIG9yZGVyKTsKIApAQCAtNzgzLDYgKzgwMywxNyBAQAogCXJldHVybiBtb3ZlX2ZyZWVwYWdlcyh6b25lLCBzdGFydF9wYWdlLCBlbmRfcGFnZSwgbWlncmF0ZXR5cGUpOwogfQogCitzdGF0aWMgdm9pZCBjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGFnZSwKKwkJCQkJaW50IHN0YXJ0X29yZGVyLCBpbnQgbWlncmF0ZXR5cGUpCit7CisJaW50IG5yX3BhZ2VibG9ja3MgPSAxIDw8IChzdGFydF9vcmRlciAtIHBhZ2VibG9ja19vcmRlcik7CisKKwl3aGlsZSAobnJfcGFnZWJsb2Nrcy0tKSB7CisJCXNldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZWJsb2NrX3BhZ2UsIG1pZ3JhdGV0eXBlKTsKKwkJcGFnZWJsb2NrX3BhZ2UgKz0gcGFnZWJsb2NrX25yX3BhZ2VzOworCX0KK30KKwogLyogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yIGZyb20gdGhlIGZhbGxiYWNrIGxpc3QgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogX19ybXF1ZXVlX2ZhbGxiYWNrKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIGludCBzdGFydF9taWdyYXRldHlwZSkKQEAgLTgzNiwxMSArODY3LDE2IEBACiAJCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAkJCXJtdl9wYWdlX29yZGVyKHBhZ2UpOwogCi0JCQlpZiAoY3VycmVudF9vcmRlciA9PSBwYWdlYmxvY2tfb3JkZXIpCi0JCQkJc2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLAorCQkJLyogVGFrZSBvd25lcnNoaXAgZm9yIG9yZGVycyA+PSBwYWdlYmxvY2tfb3JkZXIgKi8KKwkJCWlmIChjdXJyZW50X29yZGVyID49IHBhZ2VibG9ja19vcmRlcikKKwkJCQljaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIGN1cnJlbnRfb3JkZXIsCiAJCQkJCQkJc3RhcnRfbWlncmF0ZXR5cGUpOwogCiAJCQlleHBhbmQoem9uZSwgcGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsIGFyZWEsIG1pZ3JhdGV0eXBlKTsKKworCQkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIG9yZGVyLCBjdXJyZW50X29yZGVyLAorCQkJCXN0YXJ0X21pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7CisKIAkJCXJldHVybiBwYWdlOwogCQl9CiAJfQpAQCAtODc0LDYgKzkxMCw3IEBACiAJCX0KIAl9CiAKKwl0cmFjZV9tbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkKHBhZ2UsIG9yZGVyLCBtaWdyYXRldHlwZSk7CiAJcmV0dXJuIHBhZ2U7CiB9CiAKQEAgLTkzNCw3ICs5NzEsNyBAQAogCQl0b19kcmFpbiA9IHBjcC0+YmF0Y2g7CiAJZWxzZQogCQl0b19kcmFpbiA9IHBjcC0+Y291bnQ7Ci0JZnJlZV9wYWdlc19idWxrKHpvbmUsIHRvX2RyYWluLCAmcGNwLT5saXN0LCAwKTsKKwlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgdG9fZHJhaW4sIHBjcCk7CiAJcGNwLT5jb3VudCAtPSB0b19kcmFpbjsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC05NjAsNyArOTk3LDcgQEAKIAogCQlwY3AgPSAmcHNldC0+cGNwOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWZyZWVfcGFnZXNfYnVsayh6b25lLCBwY3AtPmNvdW50LCAmcGNwLT5saXN0LCAwKTsKKwkJZnJlZV9wY3BwYWdlc19idWxrKHpvbmUsIHBjcC0+Y291bnQsIHBjcCk7CiAJCXBjcC0+Y291bnQgPSAwOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQpAQCAtMTAyNiw3ICsxMDYzLDggQEAKIAlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHdhc01sb2NrZWQgPSBUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKTsKKwlpbnQgbWlncmF0ZXR5cGU7CisJaW50IHdhc01sb2NrZWQgPSBfX1Rlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpOwogCiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIDApOwogCkBAIC0xMDQzLDM1ICsxMDgxLDQ5IEBACiAJa2VybmVsX21hcF9wYWdlcyhwYWdlLCAxLCAwKTsKIAogCXBjcCA9ICZ6b25lX3BjcCh6b25lLCBnZXRfY3B1KCkpLT5wY3A7Ci0Jc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpKTsKKwltaWdyYXRldHlwZSA9IGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSk7CisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBtaWdyYXRldHlwZSk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmICh1bmxpa2VseSh3YXNNbG9ja2VkKSkKIAkJZnJlZV9wYWdlX21sb2NrKHBhZ2UpOwogCV9fY291bnRfdm1fZXZlbnQoUEdGUkVFKTsKIAorCS8qCisJICogV2Ugb25seSB0cmFjayB1bm1vdmFibGUsIHJlY2xhaW1hYmxlIGFuZCBtb3ZhYmxlIG9uIHBjcCBsaXN0cy4KKwkgKiBGcmVlIElTT0xBVEUgcGFnZXMgYmFjayB0byB0aGUgYWxsb2NhdG9yIGJlY2F1c2UgdGhleSBhcmUgYmVpbmcKKwkgKiBvZmZsaW5lZCBidXQgdHJlYXQgUkVTRVJWRSBhcyBtb3ZhYmxlIHBhZ2VzIHNvIHdlIGNhbiBnZXQgdGhvc2UKKwkgKiBhcmVhcyBiYWNrIGlmIG5lY2Vzc2FyeS4gT3RoZXJ3aXNlLCB3ZSBtYXkgaGF2ZSB0byBmcmVlCisJICogZXhjZXNzaXZlbHkgaW50byB0aGUgcGFnZSBhbGxvY2F0b3IKKwkgKi8KKwlpZiAobWlncmF0ZXR5cGUgPj0gTUlHUkFURV9QQ1BUWVBFUykgeworCQlpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9JU09MQVRFKSkgeworCQkJZnJlZV9vbmVfcGFnZSh6b25lLCBwYWdlLCAwLCBtaWdyYXRldHlwZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQltaWdyYXRldHlwZSA9IE1JR1JBVEVfTU9WQUJMRTsKKwl9CisKIAlpZiAoY29sZCkKLQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcGNwLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcGNwLT5saXN0c1ttaWdyYXRldHlwZV0pOwogCWVsc2UKLQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnBjcC0+bGlzdCk7CisJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXSk7CiAJcGNwLT5jb3VudCsrOwogCWlmIChwY3AtPmNvdW50ID49IHBjcC0+aGlnaCkgewotCQlmcmVlX3BhZ2VzX2J1bGsoem9uZSwgcGNwLT5iYXRjaCwgJnBjcC0+bGlzdCwgMCk7CisJCWZyZWVfcGNwcGFnZXNfYnVsayh6b25lLCBwY3AtPmJhdGNoLCBwY3ApOwogCQlwY3AtPmNvdW50IC09IHBjcC0+YmF0Y2g7CiAJfQorCitvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXB1dF9jcHUoKTsKIH0KIAogdm9pZCBmcmVlX2hvdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogeworCXRyYWNlX21tX3BhZ2VfZnJlZV9kaXJlY3QocGFnZSwgMCk7CiAJZnJlZV9ob3RfY29sZF9wYWdlKHBhZ2UsIDApOwogfQogCQotdm9pZCBmcmVlX2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlmcmVlX2hvdF9jb2xkX3BhZ2UocGFnZSwgMSk7Ci19Ci0KIC8qCiAgKiBzcGxpdF9wYWdlIHRha2VzIGEgbm9uLWNvbXBvdW5kIGhpZ2hlci1vcmRlciBwYWdlLCBhbmQgc3BsaXRzIGl0IGludG8KICAqIG4gKDE8PG9yZGVyKSBzdWItcGFnZXM6IHBhZ2VbMC4ubl0KQEAgLTExMTksMzUgKzExNzEsMjMgQEAKIAljcHUgID0gZ2V0X2NwdSgpOwogCWlmIChsaWtlbHkob3JkZXIgPT0gMCkpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAogCQlwY3AgPSAmem9uZV9wY3Aoem9uZSwgY3B1KS0+cGNwOworCQlsaXN0ID0gJnBjcC0+bGlzdHNbbWlncmF0ZXR5cGVdOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWlmICghcGNwLT5jb3VudCkgewotCQkJcGNwLT5jb3VudCA9IHJtcXVldWVfYnVsayh6b25lLCAwLAotCQkJCQlwY3AtPmJhdGNoLCAmcGNwLT5saXN0LAorCQlpZiAobGlzdF9lbXB0eShsaXN0KSkgeworCQkJcGNwLT5jb3VudCArPSBybXF1ZXVlX2J1bGsoem9uZSwgMCwKKwkJCQkJcGNwLT5iYXRjaCwgbGlzdCwKIAkJCQkJbWlncmF0ZXR5cGUsIGNvbGQpOwotCQkJaWYgKHVubGlrZWx5KCFwY3AtPmNvdW50KSkKKwkJCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KGxpc3QpKSkKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQogCi0JCS8qIEZpbmQgYSBwYWdlIG9mIHRoZSBhcHByb3ByaWF0ZSBtaWdyYXRlIHR5cGUgKi8KLQkJaWYgKGNvbGQpIHsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShwYWdlLCAmcGNwLT5saXN0LCBscnUpCi0JCQkJaWYgKHBhZ2VfcHJpdmF0ZShwYWdlKSA9PSBtaWdyYXRldHlwZSkKLQkJCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZwY3AtPmxpc3QsIGxydSkKLQkJCQlpZiAocGFnZV9wcml2YXRlKHBhZ2UpID09IG1pZ3JhdGV0eXBlKQotCQkJCQlicmVhazsKLQkJfQotCi0JCS8qIEFsbG9jYXRlIG1vcmUgdG8gdGhlIHBjcCBsaXN0IGlmIG5lY2Vzc2FyeSAqLwotCQlpZiAodW5saWtlbHkoJnBhZ2UtPmxydSA9PSAmcGNwLT5saXN0KSkgewotCQkJcGNwLT5jb3VudCArPSBybXF1ZXVlX2J1bGsoem9uZSwgMCwKLQkJCQkJcGNwLT5iYXRjaCwgJnBjcC0+bGlzdCwKLQkJCQkJbWlncmF0ZXR5cGUsIGNvbGQpOwotCQkJcGFnZSA9IGxpc3RfZW50cnkocGNwLT5saXN0Lm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCQl9CisJCWlmIChjb2xkKQorCQkJcGFnZSA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSk7CisJCWVsc2UKKwkJCXBhZ2UgPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwogCiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCQlwY3AtPmNvdW50LS07CkBAIC0xNjI3LDEwICsxNjY3LDYgQEAKIAogCS8qIFdlIG5vdyBnbyBpbnRvIHN5bmNocm9ub3VzIHJlY2xhaW0gKi8KIAljcHVzZXRfbWVtb3J5X3ByZXNzdXJlX2J1bXAoKTsKLQotCS8qCi0JICogVGhlIHRhc2sncyBjcHVzZXQgbWlnaHQgaGF2ZSBleHBhbmRlZCBpdHMgc2V0IG9mIGFsbG93YWJsZSBub2RlcwotCSAqLwogCXAtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCWxvY2tkZXBfc2V0X2N1cnJlbnRfcmVjbGFpbV9zdGF0ZShnZnBfbWFzayk7CiAJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CkBAIC0xNzY1LDYgKzE4MDEsNyBAQAogCiAJd2FrZV9hbGxfa3N3YXBkKG9yZGVyLCB6b25lbGlzdCwgaGlnaF96b25laWR4KTsKIAorcmVzdGFydDoKIAkvKgogCSAqIE9LLCB3ZSdyZSBiZWxvdyB0aGUga3N3YXBkIHdhdGVybWFyayBhbmQgaGF2ZSBraWNrZWQgYmFja2dyb3VuZAogCSAqIHJlY2xhaW0uIE5vdyB0aGluZ3MgZ2V0IG1vcmUgY29tcGxleCwgc28gc2V0IHVwIGFsbG9jX2ZsYWdzIGFjY29yZGluZwpAQCAtMTc3Miw3ICsxODA5LDYgQEAKIAkgKi8KIAlhbGxvY19mbGFncyA9IGdmcF90b19hbGxvY19mbGFncyhnZnBfbWFzayk7CiAKLXJlc3RhcnQ6CiAJLyogVGhpcyBpcyB0aGUgbGFzdCBjaGFuY2UsIGluIGdlbmVyYWwsIGJlZm9yZSB0aGUgZ290byBub3BhZ2UuICovCiAJcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG5vZGVtYXNrLCBvcmRlciwgem9uZWxpc3QsCiAJCQloaWdoX3pvbmVpZHgsIGFsbG9jX2ZsYWdzICYgfkFMTE9DX05PX1dBVEVSTUFSS1MsCkBAIC0xOTA3LDYgKzE5NDMsNyBAQAogCQkJCXpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIG5vZGVtYXNrLAogCQkJCXByZWZlcnJlZF96b25lLCBtaWdyYXRldHlwZSk7CiAKKwl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBnZnBfbWFzaywgbWlncmF0ZXR5cGUpOwogCXJldHVybiBwYWdlOwogfQogRVhQT1JUX1NZTUJPTChfX2FsbG9jX3BhZ2VzX25vZGVtYXNrKTsKQEAgLTE5MTYsNDQgKzE5NTMsNDEgQEAKICAqLwogdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IHBhZ2UgKiBwYWdlOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJLyoKKwkgKiBfX2dldF9mcmVlX3BhZ2VzKCkgcmV0dXJucyBhIDMyLWJpdCBhZGRyZXNzLCB3aGljaCBjYW5ub3QgcmVwcmVzZW50CisJICogYSBoaWdobWVtIHBhZ2UKKwkgKi8KKwlWTV9CVUdfT04oKGdmcF9tYXNrICYgX19HRlBfSElHSE1FTSkgIT0gMCk7CisKIAlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAwOwogCXJldHVybiAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOwogfQotCiBFWFBPUlRfU1lNQk9MKF9fZ2V0X2ZyZWVfcGFnZXMpOwogCiB1bnNpZ25lZCBsb25nIGdldF96ZXJvZWRfcGFnZShnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3QgcGFnZSAqIHBhZ2U7Ci0KLQkvKgotCSAqIGdldF96ZXJvZWRfcGFnZSgpIHJldHVybnMgYSAzMi1iaXQgYWRkcmVzcywgd2hpY2ggY2Fubm90IHJlcHJlc2VudAotCSAqIGEgaGlnaG1lbSBwYWdlCi0JICovCi0JVk1fQlVHX09OKChnZnBfbWFzayAmIF9fR0ZQX0hJR0hNRU0pICE9IDApOwotCi0JcGFnZSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrIHwgX19HRlBfWkVSTywgMCk7Ci0JaWYgKHBhZ2UpCi0JCXJldHVybiAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOwotCXJldHVybiAwOworCXJldHVybiBfX2dldF9mcmVlX3BhZ2VzKGdmcF9tYXNrIHwgX19HRlBfWkVSTywgMCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZ2V0X3plcm9lZF9wYWdlKTsKIAogdm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKIHsKIAlpbnQgaSA9IHBhZ2V2ZWNfY291bnQocHZlYyk7CiAKLQl3aGlsZSAoLS1pID49IDApCisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXRyYWNlX21tX3BhZ2V2ZWNfZnJlZShwdmVjLT5wYWdlc1tpXSwgcHZlYy0+Y29sZCk7CiAJCWZyZWVfaG90X2NvbGRfcGFnZShwdmVjLT5wYWdlc1tpXSwgcHZlYy0+Y29sZCk7CisJfQogfQogCiB2b2lkIF9fZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQogewogCWlmIChwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkgeworCQl0cmFjZV9tbV9wYWdlX2ZyZWVfZGlyZWN0KHBhZ2UsIG9yZGVyKTsKIAkJaWYgKG9yZGVyID09IDApCiAJCQlmcmVlX2hvdF9wYWdlKHBhZ2UpOwogCQllbHNlCkBAIC0yMTI4LDIzICsyMTYyLDI4IEBACiAJCX0KIAl9CiAKLQlwcmludGsoIkFjdGl2ZV9hbm9uOiVsdSBhY3RpdmVfZmlsZTolbHUgaW5hY3RpdmVfYW5vbjolbHVcbiIKLQkJIiBpbmFjdGl2ZV9maWxlOiVsdSIKKwlwcmludGsoImFjdGl2ZV9hbm9uOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdSBpc29sYXRlZF9hbm9uOiVsdVxuIgorCQkiIGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9maWxlOiVsdSBpc29sYXRlZF9maWxlOiVsdVxuIgogCQkiIHVuZXZpY3RhYmxlOiVsdSIKLQkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKLQkJIiBmcmVlOiVsdSBzbGFiOiVsdSBtYXBwZWQ6JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCisJCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1IGJ1ZmZlcjolbHVcbiIKKwkJIiBmcmVlOiVsdSBzbGFiX3JlY2xhaW1hYmxlOiVsdSBzbGFiX3VucmVjbGFpbWFibGU6JWx1XG4iCisJCSIgbWFwcGVkOiVsdSBzaG1lbTolbHUgcGFnZXRhYmxlczolbHUgYm91bmNlOiVsdVxuIiwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLAotCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JU09MQVRFRF9BTk9OKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSVNPTEFURURfRklMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VORVZJQ1RBQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyksCisJCW5yX2Jsb2NrZGV2X3BhZ2VzKCksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpLAotCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSArCi0JCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9NQVBQRUQpLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TSE1FTSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1BBR0VUQUJMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0JPVU5DRSkpOwogCkBAIC0yMTYyLDcgKzIyMDEsMjEgQEAKIAkJCSIgYWN0aXZlX2ZpbGU6JWx1a0IiCiAJCQkiIGluYWN0aXZlX2ZpbGU6JWx1a0IiCiAJCQkiIHVuZXZpY3RhYmxlOiVsdWtCIgorCQkJIiBpc29sYXRlZChhbm9uKTolbHVrQiIKKwkJCSIgaXNvbGF0ZWQoZmlsZSk6JWx1a0IiCiAJCQkiIHByZXNlbnQ6JWx1a0IiCisJCQkiIG1sb2NrZWQ6JWx1a0IiCisJCQkiIGRpcnR5OiVsdWtCIgorCQkJIiB3cml0ZWJhY2s6JWx1a0IiCisJCQkiIG1hcHBlZDolbHVrQiIKKwkJCSIgc2htZW06JWx1a0IiCisJCQkiIHNsYWJfcmVjbGFpbWFibGU6JWx1a0IiCisJCQkiIHNsYWJfdW5yZWNsYWltYWJsZTolbHVrQiIKKwkJCSIga2VybmVsX3N0YWNrOiVsdWtCIgorCQkJIiBwYWdldGFibGVzOiVsdWtCIgorCQkJIiB1bnN0YWJsZTolbHVrQiIKKwkJCSIgYm91bmNlOiVsdWtCIgorCQkJIiB3cml0ZWJhY2tfdG1wOiVsdWtCIgogCQkJIiBwYWdlc19zY2FubmVkOiVsdSIKIAkJCSIgYWxsX3VucmVjbGFpbWFibGU/ICVzIgogCQkJIlxuIiwKQEAgLTIxNzYsNyArMjIyOSwyMiBAQAogCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUpKSwKIAkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpKSwKIAkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9GSUxFKSksCiAJCQlLKHpvbmUtPnByZXNlbnRfcGFnZXMpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTUxPQ0spKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZJTEVfRElSVFkpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1dSSVRFQkFDSykpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRklMRV9NQVBQRUQpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1NITUVNKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1JFQ0xBSU1BQkxFKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEUpKSwKKwkJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9LRVJORUxfU1RBQ0spICoKKwkJCQlUSFJFQURfU0laRSAvIDEwMjQsCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9QQUdFVEFCTEUpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VOU1RBQkxFX05GUykpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQk9VTkNFKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9XUklURUJBQ0tfVEVNUCkpLAogCQkJem9uZS0+cGFnZXNfc2Nhbm5lZCwKIAkJCSh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpID8gInllcyIgOiAibm8iKQogCQkJKTsKQEAgLTI3ODMsNyArMjg1MSw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHBmbiwgZW5kX3BmbjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIHJlc2VydmUsIGJsb2NrX21pZ3JhdGV0eXBlOworCXVuc2lnbmVkIGxvbmcgYmxvY2tfbWlncmF0ZXR5cGU7CisJaW50IHJlc2VydmU7CiAKIAkvKiBHZXQgdGhlIHN0YXJ0IHBmbiwgZW5kIHBmbiBhbmQgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gcmVzZXJ2ZSAqLwogCXN0YXJ0X3BmbiA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuOwpAQCAtMjc5MSw2ICsyODYwLDE1IEBACiAJcmVzZXJ2ZSA9IHJvdW5kdXAobWluX3dtYXJrX3BhZ2VzKHpvbmUpLCBwYWdlYmxvY2tfbnJfcGFnZXMpID4+CiAJCQkJCQkJcGFnZWJsb2NrX29yZGVyOwogCisJLyoKKwkgKiBSZXNlcnZlIGJsb2NrcyBhcmUgZ2VuZXJhbGx5IGluIHBsYWNlIHRvIGhlbHAgaGlnaC1vcmRlciBhdG9taWMKKwkgKiBhbGxvY2F0aW9ucyB0aGF0IGFyZSBzaG9ydC1saXZlZC4gQSBtaW5fZnJlZV9rYnl0ZXMgdmFsdWUgdGhhdAorCSAqIHdvdWxkIHJlc3VsdCBpbiBtb3JlIHRoYW4gMiByZXNlcnZlIGJsb2NrcyBmb3IgYXRvbWljIGFsbG9jYXRpb25zCisJICogaXMgYXNzdW1lZCB0byBiZSBpbiBwbGFjZSB0byBoZWxwIGFudGktZnJhZ21lbnRhdGlvbiBmb3IgdGhlCisJICogZnV0dXJlIGFsbG9jYXRpb24gb2YgaHVnZXBhZ2VzIGF0IHJ1bnRpbWUuCisJICovCisJcmVzZXJ2ZSA9IG1pbigyLCByZXNlcnZlKTsKKwogCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBlbmRfcGZuOyBwZm4gKz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7CiAJCWlmICghcGZuX3ZhbGlkKHBmbikpCiAJCQljb250aW51ZTsKQEAgLTI5NjEsNiArMzAzOSw3IEBACiBzdGF0aWMgdm9pZCBzZXR1cF9wYWdlc2V0KHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnAsIHVuc2lnbmVkIGxvbmcgYmF0Y2gpCiB7CiAJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKKwlpbnQgbWlncmF0ZXR5cGU7CiAKIAltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CiAKQEAgLTI5NjgsNyArMzA0Nyw4IEBACiAJcGNwLT5jb3VudCA9IDA7CiAJcGNwLT5oaWdoID0gNiAqIGJhdGNoOwogCXBjcC0+YmF0Y2ggPSBtYXgoMVVMLCAxICogYmF0Y2gpOwotCUlOSVRfTElTVF9IRUFEKCZwY3AtPmxpc3QpOworCWZvciAobWlncmF0ZXR5cGUgPSAwOyBtaWdyYXRldHlwZSA8IE1JR1JBVEVfUENQVFlQRVM7IG1pZ3JhdGV0eXBlKyspCisJCUlOSVRfTElTVF9IRUFEKCZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXSk7CiB9CiAKIC8qCkBAIC0zMTQ2LDYgKzMyMjYsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX3pvbmVfcGNwX3VwZGF0ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCB6b25lICp6b25lID0gZGF0YTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgYmF0Y2ggPSB6b25lX2JhdGNoc2l6ZSh6b25lKSwgZmxhZ3M7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7CisJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7CisJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CisKKwkJcHNldCA9IHpvbmVfcGNwKHpvbmUsIGNwdSk7CisJCXBjcCA9ICZwc2V0LT5wY3A7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKKwkJc2V0dXBfcGFnZXNldChwc2V0LCBiYXRjaCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgem9uZV9wY3BfdXBkYXRlKHN0cnVjdCB6b25lICp6b25lKQoreworCXN0b3BfbWFjaGluZShfX3pvbmVfcGNwX3VwZGF0ZSwgem9uZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBfX21lbWluaXQgdm9pZCB6b25lX3BjcF9pbml0KHN0cnVjdCB6b25lICp6b25lKQogewogCWludCBjcHU7CkBAIC0zNzIwLDcgKzM4MjYsNyBAQAogCQl6b25lX3BjcF9pbml0KHpvbmUpOwogCQlmb3JfZWFjaF9scnUobCkgewogCQkJSU5JVF9MSVNUX0hFQUQoJnpvbmUtPmxydVtsXS5saXN0KTsKLQkJCXpvbmUtPmxydVtsXS5ucl9zYXZlZF9zY2FuID0gMDsKKwkJCXpvbmUtPnJlY2xhaW1fc3RhdC5ucl9zYXZlZF9zY2FuW2xdID0gMDsKIAkJfQogCQl6b25lLT5yZWNsYWltX3N0YXQucmVjZW50X3JvdGF0ZWRbMF0gPSAwOwogCQl6b25lLT5yZWNsYWltX3N0YXQucmVjZW50X3JvdGF0ZWRbMV0gPSAwOwpAQCAtNDUwOSw3ICs0NjE1LDcgQEAKIAljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKLS8qKgorLyoKICAqIFRoZSBpbmFjdGl2ZSBhbm9uIGxpc3Qgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBWTSBuZXZlciBoYXMgdG8KICAqIGRvIHRvbyBtdWNoIHdvcmssIGJ1dCBsYXJnZSBlbm91Z2ggdGhhdCBlYWNoIGluYWN0aXZlIHBhZ2UgaGFzIGEgY2hhbmNlCiAgKiB0byBiZSByZWZlcmVuY2VkIGFnYWluIGJlZm9yZSBpdCBpcyBzd2FwcGVkIG91dC4KQEAgLTQ3MzIsNyArNDgzOCwxNCBAQAogCQkJbnVtZW50cmllcyA8PD0gKFBBR0VfU0hJRlQgLSBzY2FsZSk7CiAKIAkJLyogTWFrZSBzdXJlIHdlJ3ZlIGdvdCBhdCBsZWFzdCBhIDAtb3JkZXIgYWxsb2NhdGlvbi4uICovCi0JCWlmICh1bmxpa2VseSgobnVtZW50cmllcyAqIGJ1Y2tldHNpemUpIDwgUEFHRV9TSVpFKSkKKwkJaWYgKHVubGlrZWx5KGZsYWdzICYgSEFTSF9TTUFMTCkpIHsKKwkJCS8qIE1ha2VzIG5vIHNlbnNlIHdpdGhvdXQgSEFTSF9FQVJMWSAqLworCQkJV0FSTl9PTighKGZsYWdzICYgSEFTSF9FQVJMWSkpOworCQkJaWYgKCEobnVtZW50cmllcyA+PiAqX2hhc2hfc2hpZnQpKSB7CisJCQkJbnVtZW50cmllcyA9IDFVTCA8PCAqX2hhc2hfc2hpZnQ7CisJCQkJQlVHX09OKCFudW1lbnRyaWVzKTsKKwkJCX0KKwkJfSBlbHNlIGlmICh1bmxpa2VseSgobnVtZW50cmllcyAqIGJ1Y2tldHNpemUpIDwgUEFHRV9TSVpFKSkKIAkJCW51bWVudHJpZXMgPSBQQUdFX1NJWkUgLyBidWNrZXRzaXplOwogCX0KIAludW1lbnRyaWVzID0gcm91bmR1cF9wb3dfb2ZfdHdvKG51bWVudHJpZXMpOwpAQCAtNDg3NCwxMyArNDk4NywxNiBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FQlVTWTsKKwlpbnQgem9uZV9pZHg7CiAKIAl6b25lID0gcGFnZV96b25lKHBhZ2UpOworCXpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAkvKgogCSAqIEluIGZ1dHVyZSwgbW9yZSBtaWdyYXRlIHR5cGVzIHdpbGwgYmUgYWJsZSB0byBiZSBpc29sYXRpb24gdGFyZ2V0LgogCSAqLwotCWlmIChnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpICE9IE1JR1JBVEVfTU9WQUJMRSkKKwlpZiAoZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKSAhPSBNSUdSQVRFX01PVkFCTEUgJiYKKwkgICAgem9uZV9pZHggIT0gWk9ORV9NT1ZBQkxFKQogCQlnb3RvIG91dDsKIAlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CiAJbW92ZV9mcmVlcGFnZXNfYmxvY2soem9uZSwgcGFnZSwgTUlHUkFURV9JU09MQVRFKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY2dyb3VwLmMgYi9tbS9wYWdlX2Nncm91cC5jCmluZGV4IGYyMmI0ZWIuLjNkNTM1ZDUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY2dyb3VwLmMKKysrIGIvbW0vcGFnZV9jZ3JvdXAuYwpAQCAtMTE2LDEwICsxMTYsMTYgQEAKIAkJbmlkID0gcGFnZV90b19uaWQocGZuX3RvX3BhZ2UocGZuKSk7CiAJCXRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2VfY2dyb3VwKSAqIFBBR0VTX1BFUl9TRUNUSU9OOwogCQlWTV9CVUdfT04oIXNsYWJfaXNfYXZhaWxhYmxlKCkpOwotCQliYXNlID0ga21hbGxvY19ub2RlKHRhYmxlX3NpemUsCisJCWlmIChub2RlX3N0YXRlKG5pZCwgTl9ISUdIX01FTU9SWSkpIHsKKwkJCWJhc2UgPSBrbWFsbG9jX25vZGUodGFibGVfc2l6ZSwKIAkJCQlHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLCBuaWQpOwotCQlpZiAoIWJhc2UpCi0JCQliYXNlID0gdm1hbGxvY19ub2RlKHRhYmxlX3NpemUsIG5pZCk7CisJCQlpZiAoIWJhc2UpCisJCQkJYmFzZSA9IHZtYWxsb2Nfbm9kZSh0YWJsZV9zaXplLCBuaWQpOworCQl9IGVsc2UgeworCQkJYmFzZSA9IGttYWxsb2ModGFibGVfc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CisJCQlpZiAoIWJhc2UpCisJCQkJYmFzZSA9IHZtYWxsb2ModGFibGVfc2l6ZSk7CisJCX0KIAl9IGVsc2UgewogCQkvKgogIAkJICogV2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBwYWdlX2Nncm91cCBhZ2FpbiwgYnV0CmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMDg5NWI1Yy4uNzIwZmMwMyAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtNzEwLDI3ICs3MTAsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19ERUJVR19WTQotLyoqCi0gKiBwYWdlX2R1cF9ybWFwIC0gZHVwbGljYXRlIHB0ZSBtYXBwaW5nIHRvIGEgcGFnZQotICogQHBhZ2U6CXRoZSBwYWdlIHRvIGFkZCB0aGUgbWFwcGluZyB0bwotICogQHZtYToJdGhlIHZtIGFyZWEgYmVpbmcgZHVwbGljYXRlZAotICogQGFkZHJlc3M6CXRoZSB1c2VyIHZpcnR1YWwgYWRkcmVzcyBtYXBwZWQKLSAqCi0gKiBGb3IgY29weV9wYWdlX3JhbmdlIG9ubHk6IG1pbmltYWwgZXh0cmFjdCBmcm9tIHBhZ2VfYWRkX2ZpbGVfcm1hcCAvCi0gKiBwYWdlX2FkZF9hbm9uX3JtYXAsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHRlc3RzIChhbHJlYWR5IGNoZWNrZWQpIHNvIGl0J3MKLSAqIHF1aWNrZXIuCi0gKgotICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwdGUgbG9jay4KLSAqLwotdm9pZCBwYWdlX2R1cF9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJX19wYWdlX2NoZWNrX2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOwotCWF0b21pY19pbmMoJnBhZ2UtPl9tYXBjb3VudCk7Ci19Ci0jZW5kaWYKLQogLyoqCiAgKiBwYWdlX3JlbW92ZV9ybWFwIC0gdGFrZSBkb3duIHB0ZSBtYXBwaW5nIGZyb20gYSBwYWdlCiAgKiBAcGFnZTogcGFnZSB0byByZW1vdmUgbWFwcGluZyBmcm9tCkBAIC03MzksMzQgKzcxOCwzNyBAQAogICovCiB2b2lkIHBhZ2VfcmVtb3ZlX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JaWYgKGF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZwYWdlLT5fbWFwY291bnQpKSB7Ci0JCS8qCi0JCSAqIE5vdyB0aGF0IHRoZSBsYXN0IHB0ZSBoYXMgZ29uZSwgczM5MCBtdXN0IHRyYW5zZmVyIGRpcnR5Ci0JCSAqIGZsYWcgZnJvbSBzdG9yYWdlIGtleSB0byBzdHJ1Y3QgcGFnZS4gIFdlIGNhbiB1c3VhbGx5IHNraXAKLQkJICogdGhpcyBpZiB0aGUgcGFnZSBpcyBhbm9uLCBzbyBhYm91dCB0byBiZSBmcmVlZDsgYnV0IHBlcmhhcHMKLQkJICogbm90IGlmIGl0J3MgaW4gc3dhcGNhY2hlIC0gdGhlcmUgbWlnaHQgYmUgYW5vdGhlciBwdGUgc2xvdAotCQkgKiBjb250YWluaW5nIHRoZSBzd2FwIGVudHJ5LCBidXQgcGFnZSBub3QgeWV0IHdyaXR0ZW4gdG8gc3dhcC4KLQkJICovCi0JCWlmICgoIVBhZ2VBbm9uKHBhZ2UpIHx8IFBhZ2VTd2FwQ2FjaGUocGFnZSkpICYmCi0JCSAgICBwYWdlX3Rlc3RfZGlydHkocGFnZSkpIHsKLQkJCXBhZ2VfY2xlYXJfZGlydHkocGFnZSk7Ci0JCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJfQotCQlpZiAoUGFnZUFub24ocGFnZSkpCi0JCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7Ci0JCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLAotCQkJUGFnZUFub24ocGFnZSkgPyBOUl9BTk9OX1BBR0VTIDogTlJfRklMRV9NQVBQRUQpOwotCQltZW1fY2dyb3VwX3VwZGF0ZV9tYXBwZWRfZmlsZV9zdGF0KHBhZ2UsIC0xKTsKLQkJLyoKLQkJICogSXQgd291bGQgYmUgdGlkeSB0byByZXNldCB0aGUgUGFnZUFub24gbWFwcGluZyBoZXJlLAotCQkgKiBidXQgdGhhdCBtaWdodCBvdmVyd3JpdGUgYSByYWNpbmcgcGFnZV9hZGRfYW5vbl9ybWFwCi0JCSAqIHdoaWNoIGluY3JlbWVudHMgbWFwY291bnQgYWZ0ZXIgdXMgYnV0IHNldHMgbWFwcGluZwotCQkgKiBiZWZvcmUgdXM6IHNvIGxlYXZlIHRoZSByZXNldCB0byBmcmVlX2hvdF9jb2xkX3BhZ2UsCi0JCSAqIGFuZCByZW1lbWJlciB0aGF0IGl0J3Mgb25seSByZWxpYWJsZSB3aGlsZSBtYXBwZWQuCi0JCSAqIExlYXZpbmcgaXQgc2V0IGFsc28gaGVscHMgc3dhcG9mZiB0byByZWluc3RhdGUgcHRlcwotCQkgKiBmYXN0ZXIgZm9yIHRob3NlIHBhZ2VzIHN0aWxsIGluIHN3YXBjYWNoZS4KLQkJICovCisJLyogcGFnZSBzdGlsbCBtYXBwZWQgYnkgc29tZW9uZSBlbHNlPyAqLworCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJnBhZ2UtPl9tYXBjb3VudCkpCisJCXJldHVybjsKKworCS8qCisJICogTm93IHRoYXQgdGhlIGxhc3QgcHRlIGhhcyBnb25lLCBzMzkwIG11c3QgdHJhbnNmZXIgZGlydHkKKwkgKiBmbGFnIGZyb20gc3RvcmFnZSBrZXkgdG8gc3RydWN0IHBhZ2UuICBXZSBjYW4gdXN1YWxseSBza2lwCisJICogdGhpcyBpZiB0aGUgcGFnZSBpcyBhbm9uLCBzbyBhYm91dCB0byBiZSBmcmVlZDsgYnV0IHBlcmhhcHMKKwkgKiBub3QgaWYgaXQncyBpbiBzd2FwY2FjaGUgLSB0aGVyZSBtaWdodCBiZSBhbm90aGVyIHB0ZSBzbG90CisJICogY29udGFpbmluZyB0aGUgc3dhcCBlbnRyeSwgYnV0IHBhZ2Ugbm90IHlldCB3cml0dGVuIHRvIHN3YXAuCisJICovCisJaWYgKCghUGFnZUFub24ocGFnZSkgfHwgUGFnZVN3YXBDYWNoZShwYWdlKSkgJiYgcGFnZV90ZXN0X2RpcnR5KHBhZ2UpKSB7CisJCXBhZ2VfY2xlYXJfZGlydHkocGFnZSk7CisJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCX0KKwlpZiAoUGFnZUFub24ocGFnZSkpIHsKKwkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOworCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfQU5PTl9QQUdFUyk7CisJfSBlbHNlIHsKKwkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfTUFQUEVEKTsKKwl9CisJbWVtX2Nncm91cF91cGRhdGVfbWFwcGVkX2ZpbGVfc3RhdChwYWdlLCAtMSk7CisJLyoKKwkgKiBJdCB3b3VsZCBiZSB0aWR5IHRvIHJlc2V0IHRoZSBQYWdlQW5vbiBtYXBwaW5nIGhlcmUsCisJICogYnV0IHRoYXQgbWlnaHQgb3ZlcndyaXRlIGEgcmFjaW5nIHBhZ2VfYWRkX2Fub25fcm1hcAorCSAqIHdoaWNoIGluY3JlbWVudHMgbWFwY291bnQgYWZ0ZXIgdXMgYnV0IHNldHMgbWFwcGluZworCSAqIGJlZm9yZSB1czogc28gbGVhdmUgdGhlIHJlc2V0IHRvIGZyZWVfaG90X2NvbGRfcGFnZSwKKwkgKiBhbmQgcmVtZW1iZXIgdGhhdCBpdCdzIG9ubHkgcmVsaWFibGUgd2hpbGUgbWFwcGVkLgorCSAqIExlYXZpbmcgaXQgc2V0IGFsc28gaGVscHMgc3dhcG9mZiB0byByZWluc3RhdGUgcHRlcworCSAqIGZhc3RlciBmb3IgdGhvc2UgcGFnZXMgc3RpbGwgaW4gc3dhcGNhY2hlLgorCSAqLwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggYmQyMGY4Yi4uYjIwNmE3YSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgotI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgpAQCAtMTA5Nyw2ICsxMDk2LDEwIEBACiAJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKIHVubG9jazoKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJLyoKKwkgKiBhZGRfdG9fc3dhcF9jYWNoZSgpIGRvZXNuJ3QgcmV0dXJuIC1FRVhJU1QsIHNvIHdlIGNhbiBzYWZlbHkKKwkgKiBjbGVhciBTV0FQX0hBU19DQUNIRSBmbGFnLgorCSAqLwogCXN3YXBjYWNoZV9mcmVlKHN3YXAsIE5VTEwpOwogcmVkaXJ0eToKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKQEAgLTIzMDYsMTcgKzIzMDksMTQgQEAKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCS8qIFJvdW5kIHVwIHRvIEwxX0NBQ0hFX0JZVEVTIHRvIHJlc2lzdCBmYWxzZSBzaGFyaW5nICovCi0Jc2JpbmZvID0ga21hbGxvYyhtYXgoKGludClzaXplb2Yoc3RydWN0IHNobWVtX3NiX2luZm8pLAorCXNiaW5mbyA9IGt6YWxsb2MobWF4KChpbnQpc2l6ZW9mKHN0cnVjdCBzaG1lbV9zYl9pbmZvKSwKIAkJCQlMMV9DQUNIRV9CWVRFUyksIEdGUF9LRVJORUwpOwogCWlmICghc2JpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNiaW5mby0+bWF4X2Jsb2NrcyA9IDA7Ci0Jc2JpbmZvLT5tYXhfaW5vZGVzID0gMDsKIAlzYmluZm8tPm1vZGUgPSBTX0lSV1hVR08gfCBTX0lTVlRYOwogCXNiaW5mby0+dWlkID0gY3VycmVudF9mc3VpZCgpOwogCXNiaW5mby0+Z2lkID0gY3VycmVudF9mc2dpZCgpOwotCXNiaW5mby0+bXBvbCA9IE5VTEw7CiAJc2ItPnNfZnNfaW5mbyA9IHNiaW5mbzsKIAogI2lmZGVmIENPTkZJR19UTVBGUwpAQCAtMjU5MCw2ICsyNTkwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQoreworCXJldHVybiAwOworfQorCiAjZGVmaW5lIHNobWVtX3ZtX29wcwkJCQlnZW5lcmljX2ZpbGVfdm1fb3BzCiAjZGVmaW5lIHNobWVtX2ZpbGVfb3BlcmF0aW9ucwkJCXJhbWZzX2ZpbGVfb3BlcmF0aW9ucwogI2RlZmluZSBzaG1lbV9nZXRfaW5vZGUoc2IsIG1vZGUsIGRldiwgZmxhZ3MpCXJhbWZzX2dldF9pbm9kZShzYiwgbW9kZSwgZGV2KQpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDdiNWQ0ZGUuLjdkZmE0ODEgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTEzODQsNyArMTM4NCw3IEBACiAJICogRnJhZ21lbnRhdGlvbiByZXNpc3RhbmNlIG9uIGxvdyBtZW1vcnkgLSBvbmx5IHVzZSBiaWdnZXIKIAkgKiBwYWdlIG9yZGVycyBvbiBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiAzMk1CIG9mIG1lbW9yeS4KIAkgKi8KLQlpZiAobnVtX3BoeXNwYWdlcyA+ICgzMiA8PCAyMCkgPj4gUEFHRV9TSElGVCkKKwlpZiAodG90YWxyYW1fcGFnZXMgPiAoMzIgPDwgMjApID4+IFBBR0VfU0hJRlQpCiAJCXNsYWJfYnJlYWtfZ2ZwX29yZGVyID0gQlJFQUtfR0ZQX09SREVSX0hJOwogCiAJLyogQm9vdHN0cmFwIGlzIHRyaWNreSwgYmVjYXVzZSBzZXZlcmFsIG9iamVjdHMgYXJlIGFsbG9jYXRlZApkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDBhMjE2YWEuLjQ5OTZmYzcgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTMzNDUsNiArMzM0NSw5IEBACiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKKwlpZiAoV0FSTl9PTighbmFtZSkpCisJCXJldHVybiBOVUxMOworCiAJZG93bl93cml0ZSgmc2x1Yl9sb2NrKTsKIAlzID0gZmluZF9tZXJnZWFibGUoc2l6ZSwgYWxpZ24sIGZsYWdzLCBuYW1lLCBjdG9yKTsKIAlpZiAocykgewpkaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLXZtZW1tYXAuYyBiL21tL3NwYXJzZS12bWVtbWFwLmMKaW5kZXggYTEzZWE2NC4uZDk3MTRiZCAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuYworKysgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCkBAIC00OCw4ICs0OCwxNCBAQAogewogCS8qIElmIHRoZSBtYWluIGFsbG9jYXRvciBpcyB1cCB1c2UgdGhhdCwgZmFsbGJhY2sgdG8gYm9vdG1lbS4gKi8KIAlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkJaWYgKG5vZGVfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSkpCisJCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLAogCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBnZXRfb3JkZXIoc2l6ZSkpOworCQllbHNlCisJCQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sCisJCQkJZ2V0X29yZGVyKHNpemUpKTsKIAkJaWYgKHBhZ2UpCiAJCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggZGE0MzJkOS4uNmNlNGFhYiAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTYyLDkgKzYyLDEyIEBACiAJdW5zaWduZWQgbG9uZyBhcnJheV9zaXplID0gU0VDVElPTlNfUEVSX1JPT1QgKgogCQkJCSAgIHNpemVvZihzdHJ1Y3QgbWVtX3NlY3Rpb24pOwogCi0JaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpCi0JCXNlY3Rpb24gPSBrbWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwgR0ZQX0tFUk5FTCwgbmlkKTsKLQllbHNlCisJaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKKwkJaWYgKG5vZGVfc3RhdGUobmlkLCBOX0hJR0hfTUVNT1JZKSkKKwkJCXNlY3Rpb24gPSBrbWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwgR0ZQX0tFUk5FTCwgbmlkKTsKKwkJZWxzZQorCQkJc2VjdGlvbiA9IGttYWxsb2MoYXJyYXlfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJfSBlbHNlCiAJCXNlY3Rpb24gPSBhbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIGFycmF5X3NpemUpOwogCiAJaWYgKHNlY3Rpb24pCmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggY2IyOWFlNS4uMzA4ZTU3ZCAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQlzcGluX2xvY2soJnpvbmUtPmxydV9sb2NrKTsKIAkJfQogCQlpZiAoUGFnZUxSVShwYWdlKSAmJiAhUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSB7Ci0JCQlpbnQgbHJ1ID0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQkJaW50IGxydSA9IHBhZ2VfbHJ1X2Jhc2VfdHlwZShwYWdlKTsKIAkJCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbHJ1XS5saXN0KTsKIAkJCXBnbW92ZWQrKzsKIAkJfQpAQCAtMTgxLDcgKzE4MSw3IEBACiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKIAkJaW50IGZpbGUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7Ci0JCWludCBscnUgPSBMUlVfQkFTRSArIGZpbGU7CisJCWludCBscnUgPSBwYWdlX2xydV9iYXNlX3R5cGUocGFnZSk7CiAJCWRlbF9wYWdlX2Zyb21fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKIAogCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCWFkZF9wYWdlX3RvX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CiAJCV9fY291bnRfdm1fZXZlbnQoUEdBQ1RJVkFURSk7CiAKLQkJdXBkYXRlX3BhZ2VfcmVjbGFpbV9zdGF0KHpvbmUsIHBhZ2UsICEhZmlsZSwgMSk7CisJCXVwZGF0ZV9wYWdlX3JlY2xhaW1fc3RhdCh6b25lLCBwYWdlLCBmaWxlLCAxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiB9CkBAIC00OTYsNyArNDk2LDcgQEAKICAqLwogdm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbWVncyA9IG51bV9waHlzcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCk7CisJdW5zaWduZWQgbG9uZyBtZWdzID0gdG90YWxyYW1fcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCk7CiAKICNpZmRlZiBDT05GSUdfU1dBUAogCWJkaV9pbml0KHN3YXBwZXJfc3BhY2UuYmFja2luZ19kZXZfaW5mbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggNWFlNmI4Yi4uNmQxZGFlYiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCisrKyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtNjcsMTAgKzY3LDEwIEBACiB9CiAKIC8qCi0gKiBhZGRfdG9fc3dhcF9jYWNoZSByZXNlbWJsZXMgYWRkX3RvX3BhZ2VfY2FjaGVfbG9ja2VkIG9uIHN3YXBwZXJfc3BhY2UsCisgKiBfX2FkZF90b19zd2FwX2NhY2hlIHJlc2VtYmxlcyBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQgb24gc3dhcHBlcl9zcGFjZSwKICAqIGJ1dCBzZXRzIFN3YXBDYWNoZSBmbGFnIGFuZCBwcml2YXRlIGluc3RlYWQgb2YgbWFwcGluZyBhbmQgaW5kZXguCiAgKi8KLWludCBhZGRfdG9fc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGludCBfX2FkZF90b19zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnRyeSkKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTc4LDI4ICs3OCw0MyBAQAogCVZNX0JVR19PTihQYWdlU3dhcENhY2hlKHBhZ2UpKTsKIAlWTV9CVUdfT04oIVBhZ2VTd2FwQmFja2VkKHBhZ2UpKTsKIAorCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOworCVNldFBhZ2VTd2FwQ2FjaGUocGFnZSk7CisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBlbnRyeS52YWwpOworCisJc3Bpbl9sb2NrX2lycSgmc3dhcHBlcl9zcGFjZS50cmVlX2xvY2spOworCWVycm9yID0gcmFkaXhfdHJlZV9pbnNlcnQoJnN3YXBwZXJfc3BhY2UucGFnZV90cmVlLCBlbnRyeS52YWwsIHBhZ2UpOworCWlmIChsaWtlbHkoIWVycm9yKSkgeworCQl0b3RhbF9zd2FwY2FjaGVfcGFnZXMrKzsKKwkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOworCQlJTkNfQ0FDSEVfSU5GTyhhZGRfdG90YWwpOworCX0KKwlzcGluX3VubG9ja19pcnEoJnN3YXBwZXJfc3BhY2UudHJlZV9sb2NrKTsKKworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJLyoKKwkJICogT25seSB0aGUgY29udGV4dCB3aGljaCBoYXZlIHNldCBTV0FQX0hBU19DQUNIRSBmbGFnCisJCSAqIHdvdWxkIGNhbGwgYWRkX3RvX3N3YXBfY2FjaGUoKS4KKwkJICogU28gYWRkX3RvX3N3YXBfY2FjaGUoKSBkb2Vzbid0IHJldHVybnMgLUVFWElTVC4KKwkJICovCisJCVZNX0JVR19PTihlcnJvciA9PSAtRUVYSVNUKTsKKwkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwVUwpOworCQlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKworaW50IGFkZF90b19zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJaW50IGVycm9yOworCiAJZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOwogCWlmICghZXJyb3IpIHsKLQkJcGFnZV9jYWNoZV9nZXQocGFnZSk7Ci0JCVNldFBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0JCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgZW50cnkudmFsKTsKLQotCQlzcGluX2xvY2tfaXJxKCZzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayk7Ci0JCWVycm9yID0gcmFkaXhfdHJlZV9pbnNlcnQoJnN3YXBwZXJfc3BhY2UucGFnZV90cmVlLAotCQkJCQkJZW50cnkudmFsLCBwYWdlKTsKLQkJaWYgKGxpa2VseSghZXJyb3IpKSB7Ci0JCQl0b3RhbF9zd2FwY2FjaGVfcGFnZXMrKzsKLQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX1BBR0VTKTsKLQkJCUlOQ19DQUNIRV9JTkZPKGFkZF90b3RhbCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayk7CisJCWVycm9yID0gX19hZGRfdG9fc3dhcF9jYWNoZShwYWdlLCBlbnRyeSk7CiAJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKLQotCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDBVTCk7Ci0JCQlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCX0KIAl9CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTM3LDM4ICsxNTIsMzQgQEAKIAlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCVZNX0JVR19PTighUGFnZVVwdG9kYXRlKHBhZ2UpKTsKIAotCWZvciAoOzspIHsKLQkJZW50cnkgPSBnZXRfc3dhcF9wYWdlKCk7Ci0JCWlmICghZW50cnkudmFsKQotCQkJcmV0dXJuIDA7CisJZW50cnkgPSBnZXRfc3dhcF9wYWdlKCk7CisJaWYgKCFlbnRyeS52YWwpCisJCXJldHVybiAwOwogCi0JCS8qCi0JCSAqIFJhZGl4LXRyZWUgbm9kZSBhbGxvY2F0aW9ucyBmcm9tIFBGX01FTUFMTE9DIGNvbnRleHRzIGNvdWxkCi0JCSAqIGNvbXBsZXRlbHkgZXhoYXVzdCB0aGUgcGFnZSBhbGxvY2F0b3IuIF9fR0ZQX05PTUVNQUxMT0MKLQkJICogc3RvcHMgZW1lcmdlbmN5IHJlc2VydmVzIGZyb20gYmVpbmcgYWxsb2NhdGVkLgotCQkgKgotCQkgKiBUT0RPOiB0aGlzIGNvdWxkIGNhdXNlIGEgdGhlb3JldGljYWwgbWVtb3J5IHJlY2xhaW0KLQkJICogZGVhZGxvY2sgaW4gdGhlIHN3YXAgb3V0IHBhdGguCi0JCSAqLwotCQkvKgotCQkgKiBBZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYW5kIG1hcmsgaXQgZGlydHkKLQkJICovCi0JCWVyciA9IGFkZF90b19zd2FwX2NhY2hlKHBhZ2UsIGVudHJ5LAotCQkJCV9fR0ZQX0hJR0h8X19HRlBfTk9NRU1BTExPQ3xfX0dGUF9OT1dBUk4pOworCS8qCisJICogUmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb25zIGZyb20gUEZfTUVNQUxMT0MgY29udGV4dHMgY291bGQKKwkgKiBjb21wbGV0ZWx5IGV4aGF1c3QgdGhlIHBhZ2UgYWxsb2NhdG9yLiBfX0dGUF9OT01FTUFMTE9DCisJICogc3RvcHMgZW1lcmdlbmN5IHJlc2VydmVzIGZyb20gYmVpbmcgYWxsb2NhdGVkLgorCSAqCisJICogVE9ETzogdGhpcyBjb3VsZCBjYXVzZSBhIHRoZW9yZXRpY2FsIG1lbW9yeSByZWNsYWltCisJICogZGVhZGxvY2sgaW4gdGhlIHN3YXAgb3V0IHBhdGguCisJICovCisJLyoKKwkgKiBBZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYW5kIG1hcmsgaXQgZGlydHkKKwkgKi8KKwllcnIgPSBhZGRfdG9fc3dhcF9jYWNoZShwYWdlLCBlbnRyeSwKKwkJCV9fR0ZQX0hJR0h8X19HRlBfTk9NRU1BTExPQ3xfX0dGUF9OT1dBUk4pOwogCi0JCXN3aXRjaCAoZXJyKSB7Ci0JCWNhc2UgMDoJCQkJLyogU3VjY2VzcyAqLwotCQkJU2V0UGFnZURpcnR5KHBhZ2UpOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgLUVFWElTVDoKLQkJCS8qIFJhY2VkIHdpdGggInNwZWN1bGF0aXZlIiByZWFkX3N3YXBfY2FjaGVfYXN5bmMgKi8KLQkJCXN3YXBjYWNoZV9mcmVlKGVudHJ5LCBOVUxMKTsKLQkJCWNvbnRpbnVlOwotCQlkZWZhdWx0OgotCQkJLyogLUVOT01FTSByYWRpeC10cmVlIGFsbG9jYXRpb24gZmFpbHVyZSAqLwotCQkJc3dhcGNhY2hlX2ZyZWUoZW50cnksIE5VTEwpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlpZiAoIWVycikgewkvKiBTdWNjZXNzICovCisJCVNldFBhZ2VEaXJ0eShwYWdlKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsJLyogLUVOT01FTSByYWRpeC10cmVlIGFsbG9jYXRpb24gZmFpbHVyZSAqLworCQkvKgorCQkgKiBhZGRfdG9fc3dhcF9jYWNoZSgpIGRvZXNuJ3QgcmV0dXJuIC1FRVhJU1QsIHNvIHdlIGNhbiBzYWZlbHkKKwkJICogY2xlYXIgU1dBUF9IQVNfQ0FDSEUgZmxhZy4KKwkJICovCisJCXN3YXBjYWNoZV9mcmVlKGVudHJ5LCBOVUxMKTsKKwkJcmV0dXJuIDA7CiAJfQogfQogCkBAIC0yOTAsMjYgKzMwMSwzMSBAQAogCQl9CiAKIAkJLyoKLQkJICogU3dhcCBlbnRyeSBtYXkgaGF2ZSBiZWVuIGZyZWVkIHNpbmNlIG91ciBjYWxsZXIgb2JzZXJ2ZWQgaXQuCisJCSAqIGNhbGwgcmFkaXhfdHJlZV9wcmVsb2FkKCkgd2hpbGUgd2UgY2FuIHdhaXQuCiAJCSAqLwotCQllcnIgPSBzd2FwY2FjaGVfcHJlcGFyZShlbnRyeSk7Ci0JCWlmIChlcnIgPT0gLUVFWElTVCkgLyogc2VlbXMgcmFjeSAqLwotCQkJY29udGludWU7Ci0JCWlmIChlcnIpICAgICAgICAgICAvKiBzd3AgZW50cnkgaXMgb2Jzb2xldGUgPyAqLworCQllcnIgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2sgJiBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwogCiAJCS8qCi0JCSAqIEFzc29jaWF0ZSB0aGUgcGFnZSB3aXRoIHN3YXAgZW50cnkgaW4gdGhlIHN3YXAgY2FjaGUuCi0JCSAqIE1heSBmYWlsICgtRUVYSVNUKSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcGFnZSBhc3NvY2lhdGVkCi0JCSAqIHdpdGggdGhpcyBlbnRyeSBpbiB0aGUgc3dhcCBjYWNoZTogYWRkZWQgYnkgYSByYWNpbmcKLQkJICogcmVhZF9zd2FwX2NhY2hlX2FzeW5jLCBvciBhZGRfdG9fc3dhcCBvciBzaG1lbV93cml0ZXBhZ2UKLQkJICogcmUtdXNpbmcgdGhlIGp1c3QgZnJlZWQgc3dhcCBlbnRyeSBmb3IgYW4gZXhpc3RpbmcgcGFnZS4KLQkJICogTWF5IGZhaWwgKC1FTk9NRU0pIGlmIHJhZGl4LXRyZWUgbm9kZSBhbGxvY2F0aW9uIGZhaWxlZC4KKwkJICogU3dhcCBlbnRyeSBtYXkgaGF2ZSBiZWVuIGZyZWVkIHNpbmNlIG91ciBjYWxsZXIgb2JzZXJ2ZWQgaXQuCiAJCSAqLworCQllcnIgPSBzd2FwY2FjaGVfcHJlcGFyZShlbnRyeSk7CisJCWlmIChlcnIgPT0gLUVFWElTVCkgewkvKiBzZWVtcyByYWN5ICovCisJCQlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZXJyKSB7CQkvKiBzd3AgZW50cnkgaXMgb2Jzb2xldGUgPyAqLworCQkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBNYXkgZmFpbCAoLUVOT01FTSkgaWYgcmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb24gZmFpbGVkLiAqLwogCQlfX3NldF9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CiAJCVNldFBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKLQkJZXJyID0gYWRkX3RvX3N3YXBfY2FjaGUobmV3X3BhZ2UsIGVudHJ5LCBnZnBfbWFzayAmIEdGUF9LRVJORUwpOworCQllcnIgPSBfX2FkZF90b19zd2FwX2NhY2hlKG5ld19wYWdlLCBlbnRyeSk7CiAJCWlmIChsaWtlbHkoIWVycikpIHsKKwkJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKIAkJCS8qCiAJCQkgKiBJbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIHBhZ2UgYW5kIHJldHVybi4KIAkJCSAqLwpAQCAtMzE3LDggKzMzMywxMyBAQAogCQkJc3dhcF9yZWFkcGFnZShuZXdfcGFnZSk7CiAJCQlyZXR1cm4gbmV3X3BhZ2U7CiAJCX0KKwkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCQlDbGVhclBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKIAkJX19jbGVhcl9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CisJCS8qCisJCSAqIGFkZF90b19zd2FwX2NhY2hlKCkgZG9lc24ndCByZXR1cm4gLUVFWElTVCwgc28gd2UgY2FuIHNhZmVseQorCQkgKiBjbGVhciBTV0FQX0hBU19DQUNIRSBmbGFnLgorCQkgKi8KIAkJc3dhcGNhY2hlX2ZyZWUoZW50cnksIE5VTEwpOwogCX0gd2hpbGUgKGVyciAhPSAtRU5PTUVNKTsKIApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNzRmMTEwMi4uZjFiZjE5ZCAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNTc1LDkgKzE1NzUsOSBAQAogCXAtPmZsYWdzICY9IH5TV1BfV1JJVEVPSzsKIAlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NXQVBPRkY7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfT09NX09SSUdJTjsKIAllcnIgPSB0cnlfdG9fdW51c2UodHlwZSk7Ci0JY3VycmVudC0+ZmxhZ3MgJj0gflBGX1NXQVBPRkY7CisJY3VycmVudC0+ZmxhZ3MgJj0gflBGX09PTV9PUklHSU47CiAKIAlpZiAoZXJyKSB7CiAJCS8qIHJlLWluc2VydCBzd2FwIHNwYWNlIGJhY2sgaW50byBzd2FwX2xpc3QgKi8KZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAyMDRiODI0Li42OTUxMWU2IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgotCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMTY4LDExICsxNjgsOSBAQAogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWVyciA9IHZtYXBfcHVkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsICZucik7CiAJCWlmIChlcnIpCi0JCQlicmVhazsKKwkJCXJldHVybiBlcnI7CiAJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKLQlpZiAodW5saWtlbHkoZXJyKSkKLQkJcmV0dXJuIGVycjsKIAlyZXR1cm4gbnI7CiB9CiAKQEAgLTE4Niw3ICsxODQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCkKK2ludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCiB7CiAJLyoKIAkgKiBBUk0sIHg4Ni02NCBhbmQgc3BhcmM2NCBwdXQgbW9kdWxlcyBpbiBhIHNwZWNpYWwgcGxhY2UsCkBAIC0xMjcyLDE3ICsxMjcwLDIxIEBACiAJaWYgKHZhICYmIHZhLT5mbGFncyAmIFZNX1ZNX0FSRUEpIHsKIAkJc3RydWN0IHZtX3N0cnVjdCAqdm0gPSB2YS0+cHJpdmF0ZTsKIAkJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7Ci0KLQkJdm1hcF9kZWJ1Z19mcmVlX3JhbmdlKHZhLT52YV9zdGFydCwgdmEtPnZhX2VuZCk7Ci0JCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKLQkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOwotCisJCS8qCisJCSAqIHJlbW92ZSBmcm9tIGxpc3QgYW5kIGRpc2FsbG93IGFjY2VzcyB0byB0aGlzIHZtX3N0cnVjdAorCQkgKiBiZWZvcmUgdW5tYXAuIChhZGRyZXNzIHJhbmdlIGNvbmZsaWN0aW9uIGlzIG1haW50YWluZWQgYnkKKwkJICogdm1hcC4pCisJCSAqLwogCQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7CiAJCWZvciAocCA9ICZ2bWxpc3Q7ICh0bXAgPSAqcCkgIT0gdm07IHAgPSAmdG1wLT5uZXh0KQogCQkJOwogCQkqcCA9IHRtcC0+bmV4dDsKIAkJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CiAKKwkJdm1hcF9kZWJ1Z19mcmVlX3JhbmdlKHZhLT52YV9zdGFydCwgdmEtPnZhX2VuZCk7CisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOworCiAJCXJldHVybiB2bTsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0xMzg0LDcgKzEzODYsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWlmIChjb3VudCA+IG51bV9waHlzcGFnZXMpCisJaWYgKGNvdW50ID4gdG90YWxyYW1fcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCiAJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcigoY291bnQgPDwgUEFHRV9TSElGVCksIGZsYWdzLApAQCAtMTQ5MSw3ICsxNDkzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlYWxfc2l6ZSA9IHNpemU7CiAKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQlpZiAoIXNpemUgfHwgKHNpemUgPj4gUEFHRV9TSElGVCkgPiBudW1fcGh5c3BhZ2VzKQorCWlmICghc2l6ZSB8fCAoc2l6ZSA+PiBQQUdFX1NISUZUKSA+IHRvdGFscmFtX3BhZ2VzKQogCQlyZXR1cm4gTlVMTDsKIAogCWFyZWEgPSBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgVk1fQUxMT0MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELApAQCAtMTY0MSwxMCArMTY0MywxMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY18zMl91c2VyKTsKIAorLyoKKyAqIHNtYWxsIGhlbHBlciByb3V0aW5lICwgY29weSBjb250ZW50cyB0byBidWYgZnJvbSBhZGRyLgorICogSWYgdGhlIHBhZ2UgaXMgbm90IHByZXNlbnQsIGZpbGwgemVyby4KKyAqLworCitzdGF0aWMgaW50IGFsaWduZWRfdnJlYWQoY2hhciAqYnVmLCBjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXN0cnVjdCBwYWdlICpwOworCWludCBjb3BpZWQgPSAwOworCisJd2hpbGUgKGNvdW50KSB7CisJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsZW5ndGg7CisKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpYWRkciAmIH5QQUdFX01BU0s7CisJCWxlbmd0aCA9IFBBR0VfU0laRSAtIG9mZnNldDsKKwkJaWYgKGxlbmd0aCA+IGNvdW50KQorCQkJbGVuZ3RoID0gY291bnQ7CisJCXAgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisJCS8qCisJCSAqIFRvIGRvIHNhZmUgYWNjZXNzIHRvIHRoaXMgX21hcHBlZF8gYXJlYSwgd2UgbmVlZAorCQkgKiBsb2NrLiBCdXQgYWRkaW5nIGxvY2sgaGVyZSBtZWFucyB0aGF0IHdlIG5lZWQgdG8gYWRkCisJCSAqIG92ZXJoZWFkIG9mIHZtYWxsb2MoKS92ZnJlZSgpIGNhbGxlcyBmb3IgdGhpcyBfZGVidWdfCisJCSAqIGludGVyZmFjZSwgcmFyZWx5IHVzZWQuIEluc3RlYWQgb2YgdGhhdCwgd2UnbGwgdXNlCisJCSAqIGttYXAoKSBhbmQgZ2V0IHNtYWxsIG92ZXJoZWFkIGluIHRoaXMgYWNjZXNzIGZ1bmN0aW9uLgorCQkgKi8KKwkJaWYgKHApIHsKKwkJCS8qCisJCQkgKiB3ZSBjYW4gZXhwZWN0IFVTRVIwIGlzIG5vdCB1c2VkIChzZWUgdnJlYWQvdndyaXRlJ3MKKwkJCSAqIGZ1bmN0aW9uIGRlc2NyaXB0aW9uKQorCQkJICovCisJCQl2b2lkICptYXAgPSBrbWFwX2F0b21pYyhwLCBLTV9VU0VSMCk7CisJCQltZW1jcHkoYnVmLCBtYXAgKyBvZmZzZXQsIGxlbmd0aCk7CisJCQlrdW5tYXBfYXRvbWljKG1hcCwgS01fVVNFUjApOworCQl9IGVsc2UKKwkJCW1lbXNldChidWYsIDAsIGxlbmd0aCk7CisKKwkJYWRkciArPSBsZW5ndGg7CisJCWJ1ZiArPSBsZW5ndGg7CisJCWNvcGllZCArPSBsZW5ndGg7CisJCWNvdW50IC09IGxlbmd0aDsKKwl9CisJcmV0dXJuIGNvcGllZDsKK30KKworc3RhdGljIGludCBhbGlnbmVkX3Z3cml0ZShjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJc3RydWN0IHBhZ2UgKnA7CisJaW50IGNvcGllZCA9IDA7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxlbmd0aDsKKworCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylhZGRyICYgflBBR0VfTUFTSzsKKwkJbGVuZ3RoID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCQlpZiAobGVuZ3RoID4gY291bnQpCisJCQlsZW5ndGggPSBjb3VudDsKKwkJcCA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKwkJLyoKKwkJICogVG8gZG8gc2FmZSBhY2Nlc3MgdG8gdGhpcyBfbWFwcGVkXyBhcmVhLCB3ZSBuZWVkCisJCSAqIGxvY2suIEJ1dCBhZGRpbmcgbG9jayBoZXJlIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBhZGQKKwkJICogb3ZlcmhlYWQgb2Ygdm1hbGxvYygpL3ZmcmVlKCkgY2FsbGVzIGZvciB0aGlzIF9kZWJ1Z18KKwkJICogaW50ZXJmYWNlLCByYXJlbHkgdXNlZC4gSW5zdGVhZCBvZiB0aGF0LCB3ZSdsbCB1c2UKKwkJICoga21hcCgpIGFuZCBnZXQgc21hbGwgb3ZlcmhlYWQgaW4gdGhpcyBhY2Nlc3MgZnVuY3Rpb24uCisJCSAqLworCQlpZiAocCkgeworCQkJLyoKKwkJCSAqIHdlIGNhbiBleHBlY3QgVVNFUjAgaXMgbm90IHVzZWQgKHNlZSB2cmVhZC92d3JpdGUncworCQkJICogZnVuY3Rpb24gZGVzY3JpcHRpb24pCisJCQkgKi8KKwkJCXZvaWQgKm1hcCA9IGttYXBfYXRvbWljKHAsIEtNX1VTRVIwKTsKKwkJCW1lbWNweShtYXAgKyBvZmZzZXQsIGJ1ZiwgbGVuZ3RoKTsKKwkJCWt1bm1hcF9hdG9taWMobWFwLCBLTV9VU0VSMCk7CisJCX0KKwkJYWRkciArPSBsZW5ndGg7CisJCWJ1ZiArPSBsZW5ndGg7CisJCWNvcGllZCArPSBsZW5ndGg7CisJCWNvdW50IC09IGxlbmd0aDsKKwl9CisJcmV0dXJuIGNvcGllZDsKK30KKworLyoqCisgKgl2cmVhZCgpIC0gIHJlYWQgdm1hbGxvYyBhcmVhIGluIGEgc2FmZSB3YXkuCisgKglAYnVmOgkJYnVmZmVyIGZvciByZWFkaW5nIGRhdGEKKyAqCUBhZGRyOgkJdm0gYWRkcmVzcy4KKyAqCUBjb3VudDoJCW51bWJlciBvZiBieXRlcyB0byBiZSByZWFkLgorICoKKyAqCVJldHVybnMgIyBvZiBieXRlcyB3aGljaCBhZGRyIGFuZCBidWYgc2hvdWxkIGJlIGluY3JlYXNlZC4KKyAqCShzYW1lIG51bWJlciB0byBAY291bnQpLiBSZXR1cm5zIDAgaWYgW2FkZHIuLi5hZGRyK2NvdW50KSBkb2Vzbid0CisgKglpbmNsdWRlcyBhbnkgaW50ZXJzZWN0IHdpdGggYWxpdmUgdm1hbGxvYyBhcmVhLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgYWRkciBpcyBhIHZhbGlkIHZtYWxsb2MnZWQgYXJlYSwgYW5kCisgKgljb3B5IGRhdGEgZnJvbSB0aGF0IGFyZWEgdG8gYSBnaXZlbiBidWZmZXIuIElmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2UKKyAqCW9mIFthZGRyLi4uYWRkcitjb3VudCkgaW5jbHVkZXMgc29tZSB2YWxpZCBhZGRyZXNzLCBkYXRhIGlzIGNvcGllZCB0bworICoJcHJvcGVyIGFyZWEgb2YgQGJ1Zi4gSWYgdGhlcmUgYXJlIG1lbW9yeSBob2xlcywgdGhleSdsbCBiZSB6ZXJvLWZpbGxlZC4KKyAqCUlPUkVNQVAgYXJlYSBpcyB0cmVhdGVkIGFzIG1lbW9yeSBob2xlIGFuZCBubyBjb3B5IGlzIGRvbmUuCisgKgorICoJSWYgW2FkZHIuLi5hZGRyK2NvdW50KSBkb2Vzbid0IGluY2x1ZGVzIGFueSBpbnRlcnNlY3RzIHdpdGggYWxpdmUKKyAqCXZtX3N0cnVjdCBhcmVhLCByZXR1cm5zIDAuCisgKglAYnVmIHNob3VsZCBiZSBrZXJuZWwncyBidWZmZXIuIEJlY2F1c2UJdGhpcyBmdW5jdGlvbiB1c2VzIEtNX1VTRVIwLAorICoJdGhlIGNhbGxlciBzaG91bGQgZ3VhcmFudGVlIEtNX1VTRVIwIGlzIG5vdCB1c2VkLgorICoKKyAqCU5vdGU6IEluIHVzdWFsIG9wcywgdnJlYWQoKSBpcyBuZXZlciBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgY2FsbGVyCisgKglzaG91bGQga25vdyB2bWFsbG9jKCkgYXJlYSBpcyB2YWxpZCBhbmQgY2FuIHVzZSBtZW1jcHkoKS4KKyAqCVRoaXMgaXMgZm9yIHJvdXRpbmVzIHdoaWNoIGhhdmUgdG8gYWNjZXNzIHZtYWxsb2MgYXJlYSB3aXRob3V0CisgKglhbnkgaW5mb3JtYWlvbiwgYXMgL2Rldi9rbWVtLgorICoKKyAqLworCiBsb25nIHZyZWFkKGNoYXIgKmJ1ZiwgY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICp0bXA7CiAJY2hhciAqdmFkZHIsICpidWZfc3RhcnQgPSBidWY7CisJdW5zaWduZWQgbG9uZyBidWZsZW4gPSBjb3VudDsKIAl1bnNpZ25lZCBsb25nIG47CiAKIAkvKiBEb24ndCBhbGxvdyBvdmVyZmxvdyAqLwpAQCAtMTY1Miw3ICsxNzY0LDcgQEAKIAkJY291bnQgPSAtKHVuc2lnbmVkIGxvbmcpIGFkZHI7CiAKIAlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKKwlmb3IgKHRtcCA9IHZtbGlzdDsgY291bnQgJiYgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKIAkJdmFkZHIgPSAoY2hhciAqKSB0bXAtPmFkZHI7CiAJCWlmIChhZGRyID49IHZhZGRyICsgdG1wLT5zaXplIC0gUEFHRV9TSVpFKQogCQkJY29udGludWU7CkBAIC0xNjY1LDMyICsxNzc3LDcyIEBACiAJCQljb3VudC0tOwogCQl9CiAJCW4gPSB2YWRkciArIHRtcC0+c2l6ZSAtIFBBR0VfU0laRSAtIGFkZHI7Ci0JCWRvIHsKLQkJCWlmIChjb3VudCA9PSAwKQotCQkJCWdvdG8gZmluaXNoZWQ7Ci0JCQkqYnVmID0gKmFkZHI7Ci0JCQlidWYrKzsKLQkJCWFkZHIrKzsKLQkJCWNvdW50LS07Ci0JCX0gd2hpbGUgKC0tbiA+IDApOworCQlpZiAobiA+IGNvdW50KQorCQkJbiA9IGNvdW50OworCQlpZiAoISh0bXAtPmZsYWdzICYgVk1fSU9SRU1BUCkpCisJCQlhbGlnbmVkX3ZyZWFkKGJ1ZiwgYWRkciwgbik7CisJCWVsc2UgLyogSU9SRU1BUCBhcmVhIGlzIHRyZWF0ZWQgYXMgbWVtb3J5IGhvbGUgKi8KKwkJCW1lbXNldChidWYsIDAsIG4pOworCQlidWYgKz0gbjsKKwkJYWRkciArPSBuOworCQljb3VudCAtPSBuOwogCX0KIGZpbmlzaGVkOgogCXJlYWRfdW5sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JcmV0dXJuIGJ1ZiAtIGJ1Zl9zdGFydDsKKworCWlmIChidWYgPT0gYnVmX3N0YXJ0KQorCQlyZXR1cm4gMDsKKwkvKiB6ZXJvLWZpbGwgbWVtb3J5IGhvbGVzICovCisJaWYgKGJ1ZiAhPSBidWZfc3RhcnQgKyBidWZsZW4pCisJCW1lbXNldChidWYsIDAsIGJ1ZmxlbiAtIChidWYgLSBidWZfc3RhcnQpKTsKKworCXJldHVybiBidWZsZW47CiB9CiAKKy8qKgorICoJdndyaXRlKCkgLSAgd3JpdGUgdm1hbGxvYyBhcmVhIGluIGEgc2FmZSB3YXkuCisgKglAYnVmOgkJYnVmZmVyIGZvciBzb3VyY2UgZGF0YQorICoJQGFkZHI6CQl2bSBhZGRyZXNzLgorICoJQGNvdW50OgkJbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlYWQuCisgKgorICoJUmV0dXJucyAjIG9mIGJ5dGVzIHdoaWNoIGFkZHIgYW5kIGJ1ZiBzaG91bGQgYmUgaW5jcmVzZWQuCisgKgkoc2FtZSBudW1iZXIgdG8gQGNvdW50KS4KKyAqCUlmIFthZGRyLi4uYWRkcitjb3VudCkgZG9lc24ndCBpbmNsdWRlcyBhbnkgaW50ZXJzZWN0IHdpdGggdmFsaWQKKyAqCXZtYWxsb2MgYXJlYSwgcmV0dXJucyAwLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgYWRkciBpcyBhIHZhbGlkIHZtYWxsb2MnZWQgYXJlYSwgYW5kCisgKgljb3B5IGRhdGEgZnJvbSBhIGJ1ZmZlciB0byB0aGUgZ2l2ZW4gYWRkci4gSWYgc3BlY2lmaWVkIHJhbmdlIG9mCisgKglbYWRkci4uLmFkZHIrY291bnQpIGluY2x1ZGVzIHNvbWUgdmFsaWQgYWRkcmVzcywgZGF0YSBpcyBjb3BpZWQgZnJvbQorICoJcHJvcGVyIGFyZWEgb2YgQGJ1Zi4gSWYgdGhlcmUgYXJlIG1lbW9yeSBob2xlcywgbm8gY29weSB0byBob2xlLgorICoJSU9SRU1BUCBhcmVhIGlzIHRyZWF0ZWQgYXMgbWVtb3J5IGhvbGUgYW5kIG5vIGNvcHkgaXMgZG9uZS4KKyAqCisgKglJZiBbYWRkci4uLmFkZHIrY291bnQpIGRvZXNuJ3QgaW5jbHVkZXMgYW55IGludGVyc2VjdHMgd2l0aCBhbGl2ZQorICoJdm1fc3RydWN0IGFyZWEsIHJldHVybnMgMC4KKyAqCUBidWYgc2hvdWxkIGJlIGtlcm5lbCdzIGJ1ZmZlci4gQmVjYXVzZQl0aGlzIGZ1bmN0aW9uIHVzZXMgS01fVVNFUjAsCisgKgl0aGUgY2FsbGVyIHNob3VsZCBndWFyYW50ZWUgS01fVVNFUjAgaXMgbm90IHVzZWQuCisgKgorICoJTm90ZTogSW4gdXN1YWwgb3BzLCB2d3JpdGUoKSBpcyBuZXZlciBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgY2FsbGVyCisgKglzaG91bGQga25vdyB2bWFsbG9jKCkgYXJlYSBpcyB2YWxpZCBhbmQgY2FuIHVzZSBtZW1jcHkoKS4KKyAqCVRoaXMgaXMgZm9yIHJvdXRpbmVzIHdoaWNoIGhhdmUgdG8gYWNjZXNzIHZtYWxsb2MgYXJlYSB3aXRob3V0CisgKglhbnkgaW5mb3JtYWlvbiwgYXMgL2Rldi9rbWVtLgorICoKKyAqCVRoZSBjYWxsZXIgc2hvdWxkIGd1YXJhbnRlZSBLTV9VU0VSMSBpcyBub3QgdXNlZC4KKyAqLworCiBsb25nIHZ3cml0ZShjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqdG1wOwotCWNoYXIgKnZhZGRyLCAqYnVmX3N0YXJ0ID0gYnVmOwotCXVuc2lnbmVkIGxvbmcgbjsKKwljaGFyICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIG4sIGJ1ZmxlbjsKKwlpbnQgY29waWVkID0gMDsKIAogCS8qIERvbid0IGFsbG93IG92ZXJmbG93ICovCiAJaWYgKCh1bnNpZ25lZCBsb25nKSBhZGRyICsgY291bnQgPCBjb3VudCkKIAkJY291bnQgPSAtKHVuc2lnbmVkIGxvbmcpIGFkZHI7CisJYnVmbGVuID0gY291bnQ7CiAKIAlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKKwlmb3IgKHRtcCA9IHZtbGlzdDsgY291bnQgJiYgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKIAkJdmFkZHIgPSAoY2hhciAqKSB0bXAtPmFkZHI7CiAJCWlmIChhZGRyID49IHZhZGRyICsgdG1wLT5zaXplIC0gUEFHRV9TSVpFKQogCQkJY29udGludWU7CkBAIC0xNzAyLDE4ICsxODU0LDIxIEBACiAJCQljb3VudC0tOwogCQl9CiAJCW4gPSB2YWRkciArIHRtcC0+c2l6ZSAtIFBBR0VfU0laRSAtIGFkZHI7Ci0JCWRvIHsKLQkJCWlmIChjb3VudCA9PSAwKQotCQkJCWdvdG8gZmluaXNoZWQ7Ci0JCQkqYWRkciA9ICpidWY7Ci0JCQlidWYrKzsKLQkJCWFkZHIrKzsKLQkJCWNvdW50LS07Ci0JCX0gd2hpbGUgKC0tbiA+IDApOworCQlpZiAobiA+IGNvdW50KQorCQkJbiA9IGNvdW50OworCQlpZiAoISh0bXAtPmZsYWdzICYgVk1fSU9SRU1BUCkpIHsKKwkJCWFsaWduZWRfdndyaXRlKGJ1ZiwgYWRkciwgbik7CisJCQljb3BpZWQrKzsKKwkJfQorCQlidWYgKz0gbjsKKwkJYWRkciArPSBuOworCQljb3VudCAtPSBuOwogCX0KIGZpbmlzaGVkOgogCXJlYWRfdW5sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JcmV0dXJuIGJ1ZiAtIGJ1Zl9zdGFydDsKKwlpZiAoIWNvcGllZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGJ1ZmxlbjsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJhODIyOGUuLjYxM2U4OWYgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xNDgsOCArMTQ4LDggQEAKIAlyZXR1cm4gJnpvbmUtPnJlY2xhaW1fc3RhdDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgem9uZV9ucl9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCi0JCQkJICAgZW51bSBscnVfbGlzdCBscnUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyB6b25lX25yX2xydV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKKwkJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgZW51bSBscnVfbGlzdCBscnUpCiB7CiAJaWYgKCFzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkKIAkJcmV0dXJuIG1lbV9jZ3JvdXBfem9uZV9ucl9wYWdlcyhzYy0+bWVtX2Nncm91cCwgem9uZSwgbHJ1KTsKQEAgLTI4Niw3ICsyODYsMTIgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gcGFnZV9jb3VudChwYWdlKSAtICEhcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSA9PSAyOworCS8qCisJICogQSBmcmVlYWJsZSBwYWdlIGNhY2hlIHBhZ2UgaXMgcmVmZXJlbmNlZCBvbmx5IGJ5IHRoZSBjYWxsZXIKKwkgKiB0aGF0IGlzb2xhdGVkIHRoZSBwYWdlLCB0aGUgcGFnZSBjYWNoZSByYWRpeCB0cmVlIGFuZAorCSAqIG9wdGlvbmFsIGJ1ZmZlciBoZWFkcyBhdCBwYWdlLT5wcml2YXRlLgorCSAqLworCXJldHVybiBwYWdlX2NvdW50KHBhZ2UpIC0gcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSA9PSAyOwogfQogCiBzdGF0aWMgaW50IG1heV93cml0ZV90b19xdWV1ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQpAQCAtMzYxLDcgKzM2Niw2IEBACiAJICogYmxvY2ssIGZvciBzb21lIHRocm90dGxpbmcuIFRoaXMgaGFwcGVucyBieSBhY2NpZGVudCwgYmVjYXVzZQogCSAqIHN3YXBfYmFja2luZ19kZXZfaW5mbyBpcyBidXN0OiBpdCBkb2Vzbid0IHJlZmxlY3QgdGhlCiAJICogY29uZ2VzdGlvbiBzdGF0ZSBvZiB0aGUgc3dhcGRldnMuICBFYXN5IHRvIGZpeCwgaWYgbmVlZGVkLgotCSAqIFNlZSBzd2FwZmlsZS5jOnBhZ2VfcXVldWVfY29uZ2VzdGVkKCkuCiAJICovCiAJaWYgKCFpc19wYWdlX2NhY2hlX2ZyZWVhYmxlKHBhZ2UpKQogCQlyZXR1cm4gUEFHRV9LRUVQOwpAQCAtNTMxLDcgKzUzNSw3IEBACiAJCSAqIHVuZXZpY3RhYmxlIHBhZ2Ugb24gW2luXWFjdGl2ZSBsaXN0LgogCQkgKiBXZSBrbm93IGhvdyB0byBoYW5kbGUgdGhhdC4KIAkJICovCi0JCWxydSA9IGFjdGl2ZSArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJbHJ1ID0gYWN0aXZlICsgcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlscnVfY2FjaGVfYWRkX2xydShwYWdlLCBscnUpOwogCX0gZWxzZSB7CiAJCS8qCkBAIC04MjEsNyArODI1LDcgQEAKIAlpZiAobW9kZSAhPSBJU09MQVRFX0JPVEggJiYgKCFQYWdlQWN0aXZlKHBhZ2UpICE9ICFtb2RlKSkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChtb2RlICE9IElTT0xBVEVfQk9USCAmJiAoIXBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSAhPSAhZmlsZSkpCisJaWYgKG1vZGUgIT0gSVNPTEFURV9CT1RIICYmIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSAhPSBmaWxlKQogCQlyZXR1cm4gcmV0OwogCiAJLyoKQEAgLTkzNSw2ICs5MzksMTYgQEAKIAkJCS8qIENoZWNrIHRoYXQgd2UgaGF2ZSBub3QgY3Jvc3NlZCBhIHpvbmUgYm91bmRhcnkuICovCiAJCQlpZiAodW5saWtlbHkocGFnZV96b25lX2lkKGN1cnNvcl9wYWdlKSAhPSB6b25lX2lkKSkKIAkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGRvbid0IGhhdmUgZW5vdWdoIHN3YXAgc3BhY2UsIHJlY2xhaW1pbmcgb2YKKwkJCSAqIGFub24gcGFnZSB3aGljaCBkb24ndCBhbHJlYWR5IGhhdmUgYSBzd2FwIHNsb3QgaXMKKwkJCSAqIHBvaW50bGVzcy4KKwkJCSAqLworCQkJaWYgKG5yX3N3YXBfcGFnZXMgPD0gMCAmJiBQYWdlQW5vbihjdXJzb3JfcGFnZSkgJiYKKwkJCQkJIVBhZ2VTd2FwQ2FjaGUoY3Vyc29yX3BhZ2UpKQorCQkJCWNvbnRpbnVlOworCiAJCQlpZiAoX19pc29sYXRlX2xydV9wYWdlKGN1cnNvcl9wYWdlLCBtb2RlLCBmaWxlKSA9PSAwKSB7CiAJCQkJbGlzdF9tb3ZlKCZjdXJzb3JfcGFnZS0+bHJ1LCBkc3QpOwogCQkJCW1lbV9jZ3JvdXBfZGVsX2xydShjdXJzb3JfcGFnZSk7CkBAIC05NjEsNyArOTc1LDcgQEAKIAlpZiAoZmlsZSkKIAkJbHJ1ICs9IExSVV9GSUxFOwogCXJldHVybiBpc29sYXRlX2xydV9wYWdlcyhuciwgJnotPmxydVtscnVdLmxpc3QsIGRzdCwgc2Nhbm5lZCwgb3JkZXIsCi0JCQkJCQkJCW1vZGUsICEhZmlsZSk7CisJCQkJCQkJCW1vZGUsIGZpbGUpOwogfQogCiAvKgpAQCAtOTc2LDcgKzk5MCw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBhZ2VfbGlzdCwgbHJ1KSB7Ci0JCWxydSA9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJbHJ1ID0gcGFnZV9scnVfYmFzZV90eXBlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewogCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CiAJCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CkBAIC0xMDM0LDYgKzEwNDgsMzEgQEAKIH0KIAogLyoKKyAqIEFyZSB0aGVyZSB3YXkgdG9vIG1hbnkgcHJvY2Vzc2VzIGluIHRoZSBkaXJlY3QgcmVjbGFpbSBwYXRoIGFscmVhZHk/CisgKi8KK3N0YXRpYyBpbnQgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBmaWxlLAorCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKK3sKKwl1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDsKKworCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQlyZXR1cm4gMDsKKworCWlmICghc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpCisJCXJldHVybiAwOworCisJaWYgKGZpbGUpIHsKKwkJaW5hY3RpdmUgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSk7CisJCWlzb2xhdGVkID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0ZJTEUpOworCX0gZWxzZSB7CisJCWluYWN0aXZlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pOworCQlpc29sYXRlZCA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OKTsKKwl9CisKKwlyZXR1cm4gaXNvbGF0ZWQgPiBpbmFjdGl2ZTsKK30KKworLyoKICAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua196b25lKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXIKICAqIG9mIHJlY2xhaW1lZCBwYWdlcwogICovCkBAIC0xMDQ4LDYgKzEwODcsMTQgQEAKIAlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOwogCWludCBsdW1weV9yZWNsYWltID0gMDsKIAorCXdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZCh6b25lLCBmaWxlLCBzYykpKSB7CisJCWNvbmdlc3Rpb25fd2FpdChXUklURSwgSFovMTApOworCisJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KKwkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CisJfQorCiAJLyoKIAkgKiBJZiB3ZSBuZWVkIGEgbGFyZ2UgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnksIG9yIGhhdmUKIAkgKiB0cm91YmxlIGdldHRpbmcgYSBzbWFsbCBzZXQgb2YgY29udGlndW91cyBwYWdlcywgd2UKQEAgLTEwNzIsMTAgKzExMTksMjYgQEAKIAkJdW5zaWduZWQgbG9uZyBucl9hY3RpdmU7CiAJCXVuc2lnbmVkIGludCBjb3VudFtOUl9MUlVfTElTVFNdID0geyAwLCB9OwogCQlpbnQgbW9kZSA9IGx1bXB5X3JlY2xhaW0gPyBJU09MQVRFX0JPVEggOiBJU09MQVRFX0lOQUNUSVZFOworCQl1bnNpZ25lZCBsb25nIG5yX2Fub247CisJCXVuc2lnbmVkIGxvbmcgbnJfZmlsZTsKIAogCQlucl90YWtlbiA9IHNjLT5pc29sYXRlX3BhZ2VzKHNjLT5zd2FwX2NsdXN0ZXJfbWF4LAogCQkJICAgICAmcGFnZV9saXN0LCAmbnJfc2Nhbiwgc2MtPm9yZGVyLCBtb2RlLAogCQkJCXpvbmUsIHNjLT5tZW1fY2dyb3VwLCAwLCBmaWxlKTsKKworCQlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpIHsKKwkJCXpvbmUtPnBhZ2VzX3NjYW5uZWQgKz0gbnJfc2NhbjsKKwkJCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQkJCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdTQ0FOX0tTV0FQRCwgem9uZSwKKwkJCQkJCSAgICAgICBucl9zY2FuKTsKKwkJCWVsc2UKKwkJCQlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU0NBTl9ESVJFQ1QsIHpvbmUsCisJCQkJCQkgICAgICAgbnJfc2Nhbik7CisJCX0KKworCQlpZiAobnJfdGFrZW4gPT0gMCkKKwkJCWdvdG8gZG9uZTsKKwogCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCwgY291bnQpOwogCQlfX2NvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7CiAKQEAgLTEwODgsOCArMTE1MSwxMCBAQAogCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTiwKIAkJCQkJCS1jb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl0pOwogCi0JCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkKLQkJCXpvbmUtPnBhZ2VzX3NjYW5uZWQgKz0gbnJfc2NhbjsKKwkJbnJfYW5vbiA9IGNvdW50W0xSVV9BQ1RJVkVfQU5PTl0gKyBjb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl07CisJCW5yX2ZpbGUgPSBjb3VudFtMUlVfQUNUSVZFX0ZJTEVdICsgY291bnRbTFJVX0lOQUNUSVZFX0ZJTEVdOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSVNPTEFURURfQU5PTiwgbnJfYW5vbik7CisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9GSUxFLCBucl9maWxlKTsKIAogCQlyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzBdICs9IGNvdW50W0xSVV9JTkFDVElWRV9BTk9OXTsKIAkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFswXSArPSBjb3VudFtMUlVfQUNUSVZFX0FOT05dOwpAQCAtMTEyMywxOCArMTE4OCwxMiBAQAogCQl9CiAKIAkJbnJfcmVjbGFpbWVkICs9IG5yX2ZyZWVkOworCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7Ci0JCQlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU0NBTl9LU1dBUEQsIHpvbmUsIG5yX3NjYW4pOworCQlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkKIAkJCV9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9TVEVBTCwgbnJfZnJlZWQpOwotCQl9IGVsc2UgaWYgKHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQotCQkJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1NDQU5fRElSRUNULCB6b25lLCBucl9zY2FuKTsKLQogCQlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU1RFQUwsIHpvbmUsIG5yX2ZyZWVkKTsKIAotCQlpZiAobnJfdGFrZW4gPT0gMCkKLQkJCWdvdG8gZG9uZTsKLQogCQlzcGluX2xvY2soJnpvbmUtPmxydV9sb2NrKTsKIAkJLyoKIAkJICogUHV0IGJhY2sgYW55IHVuZnJlZWFibGUgcGFnZXMuCkBAIC0xMTUzLDggKzEyMTIsOCBAQAogCQkJU2V0UGFnZUxSVShwYWdlKTsKIAkJCWxydSA9IHBhZ2VfbHJ1KHBhZ2UpOwogCQkJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKLQkJCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCQkJaW50IGZpbGUgPSAhIXBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJCWlmIChpc19hY3RpdmVfbHJ1KGxydSkpIHsKKwkJCQlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CiAJCQkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfcm90YXRlZFtmaWxlXSsrOwogCQkJfQogCQkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKQEAgLTExNjMsMTAgKzEyMjIsMTMgQEAKIAkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCQl9CiAJCX0KKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0FOT04sIC1ucl9hbm9uKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0ZJTEUsIC1ucl9maWxlKTsKKwogICAJfSB3aGlsZSAobnJfc2Nhbm5lZCA8IG1heF9zY2FuKTsKLQlzcGluX3VubG9jaygmem9uZS0+bHJ1X2xvY2spOworCiBkb25lOgotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwogCXJldHVybiBucl9yZWNsYWltZWQ7CiB9CkBAIC0xMjE1LDE1ICsxMjc3LDEwIEBACiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKIAkJcGFnZSA9IGxydV90b19wYWdlKGxpc3QpOwotCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCBsaXN0LCBmbGFncyk7CiAKIAkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwogCQlTZXRQYWdlTFJVKHBhZ2UpOwogCi0JCVZNX0JVR19PTighUGFnZUFjdGl2ZShwYWdlKSk7Ci0JCWlmICghaXNfYWN0aXZlX2xydShscnUpKQotCQkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwkvKiB3ZSBhcmUgZGUtYWN0aXZhdGluZyAqLwotCiAJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xydV0ubGlzdCk7CiAJCW1lbV9jZ3JvdXBfYWRkX2xydV9saXN0KHBhZ2UsIGxydSk7CiAJCXBnbW92ZWQrKzsKQEAgLTEyNDQsNyArMTMwMSw3IEBACiBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHpvbmUgKnpvbmUsCiAJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHByaW9yaXR5LCBpbnQgZmlsZSkKIHsKLQl1bnNpZ25lZCBsb25nIHBnbW92ZWQ7CisJdW5zaWduZWQgbG9uZyBucl90YWtlbjsKIAl1bnNpZ25lZCBsb25nIHBnc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIHZtX2ZsYWdzOwogCUxJU1RfSEVBRChsX2hvbGQpOwkvKiBUaGUgcGFnZXMgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwpAQCAtMTI1MiwxMCArMTMwOSwxMSBAQAogCUxJU1RfSEVBRChsX2luYWN0aXZlKTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOworCXVuc2lnbmVkIGxvbmcgbnJfcm90YXRlZCA9IDA7CiAKIAlscnVfYWRkX2RyYWluKCk7CiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCXBnbW92ZWQgPSBzYy0+aXNvbGF0ZV9wYWdlcyhucl9wYWdlcywgJmxfaG9sZCwgJnBnc2Nhbm5lZCwgc2MtPm9yZGVyLAorCW5yX3Rha2VuID0gc2MtPmlzb2xhdGVfcGFnZXMobnJfcGFnZXMsICZsX2hvbGQsICZwZ3NjYW5uZWQsIHNjLT5vcmRlciwKIAkJCQkJSVNPTEFURV9BQ1RJVkUsIHpvbmUsCiAJCQkJCXNjLT5tZW1fY2dyb3VwLCAxLCBmaWxlKTsKIAkvKgpAQCAtMTI2NSwxNiArMTMyMywxNiBAQAogCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkgewogCQl6b25lLT5wYWdlc19zY2FubmVkICs9IHBnc2Nhbm5lZDsKIAl9Ci0JcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFshIWZpbGVdICs9IHBnbW92ZWQ7CisJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFtmaWxlXSArPSBucl90YWtlbjsKIAogCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdSRUZJTEwsIHpvbmUsIHBnc2Nhbm5lZCk7CiAJaWYgKGZpbGUpCi0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSwgLXBnbW92ZWQpOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUsIC1ucl90YWtlbik7CiAJZWxzZQotCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04sIC1wZ21vdmVkKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OLCAtbnJfdGFrZW4pOworCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgbnJfdGFrZW4pOwogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCi0JcGdtb3ZlZCA9IDA7ICAvKiBjb3VudCByZWZlcmVuY2VkIChtYXBwaW5nKSBtYXBwZWQgcGFnZXMgKi8KIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfaG9sZCkpIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9ob2xkKTsKQEAgLTEyODgsNyArMTM0Niw3IEBACiAJCS8qIHBhZ2VfcmVmZXJlbmNlZCBjbGVhcnMgUGFnZVJlZmVyZW5jZWQgKi8KIAkJaWYgKHBhZ2VfbWFwcGluZ19pbnVzZShwYWdlKSAmJgogCQkgICAgcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwLCAmdm1fZmxhZ3MpKSB7Ci0JCQlwZ21vdmVkKys7CisJCQlucl9yb3RhdGVkKys7CiAJCQkvKgogCQkJICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIHBhZ2VzIGFuZAogCQkJICogZ2l2ZSB0aGVtIG9uZSBtb3JlIHRyaXAgYXJvdW5kIHRoZSBhY3RpdmUgbGlzdC4gU28KQEAgLTEzMDQsNiArMTM2Miw3IEBACiAJCQl9CiAJCX0KIAorCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CS8qIHdlIGFyZSBkZS1hY3RpdmF0aW5nICovCiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2luYWN0aXZlKTsKIAl9CiAKQEAgLTEzMTcsMTMgKzEzNzYsMTMgQEAKIAkgKiBoZWxwcyBiYWxhbmNlIHNjYW4gcHJlc3N1cmUgYmV0d2VlbiBmaWxlIGFuZCBhbm9ueW1vdXMgcGFnZXMgaW4KIAkgKiBnZXRfc2Nhbl9yYXRpby4KIAkgKi8KLQlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkWyEhZmlsZV0gKz0gcGdtb3ZlZDsKKwlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkW2ZpbGVdICs9IG5yX3JvdGF0ZWQ7CiAKIAltb3ZlX2FjdGl2ZV9wYWdlc190b19scnUoem9uZSwgJmxfYWN0aXZlLAogCQkJCQkJTFJVX0FDVElWRSArIGZpbGUgKiBMUlVfRklMRSk7CiAJbW92ZV9hY3RpdmVfcGFnZXNfdG9fbHJ1KHpvbmUsICZsX2luYWN0aXZlLAogCQkJCQkJTFJVX0JBU0UgICArIGZpbGUgKiBMUlVfRklMRSk7Ci0KKwlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIC1ucl90YWtlbik7CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiB9CiAKQEAgLTE0MjksMTAgKzE0ODgsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGFwLCBmcDsKIAlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOwogCi0JYW5vbiAgPSB6b25lX25yX3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0FOT04pICsKLQkJem9uZV9ucl9wYWdlcyh6b25lLCBzYywgTFJVX0lOQUNUSVZFX0FOT04pOwotCWZpbGUgID0gem9uZV9ucl9wYWdlcyh6b25lLCBzYywgTFJVX0FDVElWRV9GSUxFKSArCi0JCXpvbmVfbnJfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9GSUxFKTsKKwlhbm9uICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0FOT04pICsKKwkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9BTk9OKTsKKwlmaWxlICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0ZJTEUpICsKKwkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9GSUxFKTsKIAogCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkgewogCQlmcmVlICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKQEAgLTE1MjYsNiArMTU4NSw3IEBACiAJZW51bSBscnVfbGlzdCBsOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gc2MtPm5yX3JlY2xhaW1lZDsKIAl1bnNpZ25lZCBsb25nIHN3YXBfY2x1c3Rlcl9tYXggPSBzYy0+c3dhcF9jbHVzdGVyX21heDsKKwlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOwogCWludCBub3N3YXAgPSAwOwogCiAJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gcGFnZXMuICovCkBAIC0xNTQwLDE3ICsxNjAwLDE0IEBACiAJCWludCBmaWxlID0gaXNfZmlsZV9scnUobCk7CiAJCXVuc2lnbmVkIGxvbmcgc2NhbjsKIAotCQlzY2FuID0gem9uZV9ucl9wYWdlcyh6b25lLCBzYywgbCk7CisJCXNjYW4gPSB6b25lX25yX2xydV9wYWdlcyh6b25lLCBzYywgbCk7CiAJCWlmIChwcmlvcml0eSB8fCBub3N3YXApIHsKIAkJCXNjYW4gPj49IHByaW9yaXR5OwogCQkJc2NhbiA9IChzY2FuICogcGVyY2VudFtmaWxlXSkgLyAxMDA7CiAJCX0KLQkJaWYgKHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQotCQkJbnJbbF0gPSBucl9zY2FuX3RyeV9iYXRjaChzY2FuLAotCQkJCQkJICAmem9uZS0+bHJ1W2xdLm5yX3NhdmVkX3NjYW4sCi0JCQkJCQkgIHN3YXBfY2x1c3Rlcl9tYXgpOwotCQllbHNlCi0JCQlucltsXSA9IHNjYW47CisJCW5yW2xdID0gbnJfc2Nhbl90cnlfYmF0Y2goc2NhbiwKKwkJCQkJICAmcmVjbGFpbV9zdGF0LT5ucl9zYXZlZF9zY2FuW2xdLAorCQkJCQkgIHN3YXBfY2x1c3Rlcl9tYXgpOwogCX0KIAogCXdoaWxlIChucltMUlVfSU5BQ1RJVkVfQU5PTl0gfHwgbnJbTFJVX0FDVElWRV9GSUxFXSB8fApAQCAtMTY4NSw3ICsxNzQyLDcgQEAKIAkJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCQljb250aW51ZTsKIAotCQkJbHJ1X3BhZ2VzICs9IHpvbmVfbHJ1X3BhZ2VzKHpvbmUpOworCQkJbHJ1X3BhZ2VzICs9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7CiAJCX0KIAl9CiAKQEAgLTE5MDIsNyArMTk1OSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPD0gZW5kX3pvbmU7IGkrKykgewogCQkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGk7CiAKLQkJCWxydV9wYWdlcyArPSB6b25lX2xydV9wYWdlcyh6b25lKTsKKwkJCWxydV9wYWdlcyArPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpOwogCQl9CiAKIAkJLyoKQEAgLTE5NDYsNyArMjAwMyw3IEBACiAJCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChucl9zbGFiID09IDAgJiYgem9uZS0+cGFnZXNfc2Nhbm5lZCA+PQotCQkJCQkJKHpvbmVfbHJ1X3BhZ2VzKHpvbmUpICogNikpCisJCQkJCSh6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpICogNikpCiAJCQkJCXpvbmVfc2V0X2ZsYWcoem9uZSwKIAkJCQkJCSAgICAgIFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUpOwogCQkJLyoKQEAgLTIxMTMsMTIgKzIxNzAsMzkgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBnZGF0LT5rc3dhcGRfd2FpdCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgZ2xvYmFsX2xydV9wYWdlcyh2b2lkKQorLyoKKyAqIFRoZSByZWNsYWltYWJsZSBjb3VudCB3b3VsZCBiZSBtb3N0bHkgYWNjdXJhdGUuCisgKiBUaGUgbGVzcyByZWNsYWltYWJsZSBwYWdlcyBtYXkgYmUKKyAqIC0gbWxvY2tlZCBwYWdlcywgd2hpY2ggd2lsbCBiZSBtb3ZlZCB0byB1bmV2aWN0YWJsZSBsaXN0IHdoZW4gZW5jb3VudGVyZWQKKyAqIC0gbWFwcGVkIHBhZ2VzLCB3aGljaCBtYXkgcmVxdWlyZSBzZXZlcmFsIHRyYXZlbHMgdG8gYmUgcmVjbGFpbWVkCisgKiAtIGRpcnR5IHBhZ2VzLCB3aGljaCBpcyBub3QgImluc3RhbnRseSIgcmVjbGFpbWFibGUKKyAqLwordW5zaWduZWQgbG9uZyBnbG9iYWxfcmVjbGFpbWFibGVfcGFnZXModm9pZCkKIHsKLQlyZXR1cm4gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pCi0JCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpCi0JCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfQU5PTikKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKTsKKwlpbnQgbnI7CisKKwluciA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9GSUxFKSArCisJICAgICBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKTsKKworCWlmIChucl9zd2FwX3BhZ2VzID4gMCkKKwkJbnIgKz0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pICsKKwkJICAgICAgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfQU5PTik7CisKKwlyZXR1cm4gbnI7Cit9CisKK3Vuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlpbnQgbnI7CisKKwluciA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkgKworCSAgICAgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpOworCisJaWYgKG5yX3N3YXBfcGFnZXMgPiAwKQorCQluciArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pICsKKwkJICAgICAgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pOworCisJcmV0dXJuIG5yOwogfQogCiAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCkBAIC0yMTMzLDYgKzIyMTcsNyBAQAogewogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKKwlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdDsKIAogCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJZW51bSBscnVfbGlzdCBsOwpAQCAtMjE0OSwxMSArMjIzNCwxNCBAQAogCQkJCQkJbCA9PSBMUlVfQUNUSVZFX0ZJTEUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQl6b25lLT5scnVbbF0ubnJfc2F2ZWRfc2NhbiArPSAobHJ1X3BhZ2VzID4+IHByaW8pICsgMTsKLQkJCWlmICh6b25lLT5scnVbbF0ubnJfc2F2ZWRfc2NhbiA+PSBucl9wYWdlcyB8fCBwYXNzID4gMykgeworCQkJcmVjbGFpbV9zdGF0ID0gZ2V0X3JlY2xhaW1fc3RhdCh6b25lLCBzYyk7CisJCQlyZWNsYWltX3N0YXQtPm5yX3NhdmVkX3NjYW5bbF0gKz0KKwkJCQkJCShscnVfcGFnZXMgPj4gcHJpbykgKyAxOworCQkJaWYgKHJlY2xhaW1fc3RhdC0+bnJfc2F2ZWRfc2NhbltsXQorCQkJCQkJPj0gbnJfcGFnZXMgfHwgcGFzcyA+IDMpIHsKIAkJCQl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47CiAKLQkJCQl6b25lLT5scnVbbF0ubnJfc2F2ZWRfc2NhbiA9IDA7CisJCQkJcmVjbGFpbV9zdGF0LT5ucl9zYXZlZF9zY2FuW2xdID0gMDsKIAkJCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLCBscnVfcGFnZXMpOwogCQkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLCB6b25lLAogCQkJCQkJCQlzYywgcHJpbyk7CkBAIC0yMTkwLDcgKzIyNzgsNyBAQAogCiAJY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwogCi0JbHJ1X3BhZ2VzID0gZ2xvYmFsX2xydV9wYWdlcygpOworCWxydV9wYWdlcyA9IGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpOwogCW5yX3NsYWIgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKTsKIAkvKiBJZiBzbGFiIGNhY2hlcyBhcmUgaHVnZSwgaXQncyBiZXR0ZXIgdG8gaGl0IHRoZW0gZmlyc3QgKi8KIAl3aGlsZSAobnJfc2xhYiA+PSBscnVfcGFnZXMpIHsKQEAgLTIyMzIsNyArMjMyMCw3IEBACiAKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCQkJc2hyaW5rX3NsYWIoc2MubnJfc2Nhbm5lZCwgc2MuZ2ZwX21hc2ssCi0JCQkJCWdsb2JhbF9scnVfcGFnZXMoKSk7CisJCQkJICAgIGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpKTsKIAkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwogCQkJaWYgKHNjLm5yX3JlY2xhaW1lZCA+PSBucl9wYWdlcykKIAkJCQlnb3RvIG91dDsKQEAgLTIyNDksNyArMjMzNyw4IEBACiAJaWYgKCFzYy5ucl9yZWNsYWltZWQpIHsKIAkJZG8gewogCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7Ci0JCQlzaHJpbmtfc2xhYihucl9wYWdlcywgc2MuZ2ZwX21hc2ssIGdsb2JhbF9scnVfcGFnZXMoKSk7CisJCQlzaHJpbmtfc2xhYihucl9wYWdlcywgc2MuZ2ZwX21hc2ssCisJCQkJICAgIGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpKTsKIAkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwogCQl9IHdoaWxlIChzYy5ucl9yZWNsYWltZWQgPCBucl9wYWdlcyAmJgogCQkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPiAwKTsKQEAgLTI1NjksNyArMjY1OCw3IEBACiByZXRyeToKIAlDbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKIAlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpIHsKLQkJZW51bSBscnVfbGlzdCBsID0gTFJVX0lOQUNUSVZFX0FOT04gKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCWVudW0gbHJ1X2xpc3QgbCA9IHBhZ2VfbHJ1X2Jhc2VfdHlwZShwYWdlKTsKIAogCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKTsKIAkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbF0ubGlzdCk7CmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDEzOGJlZDUuLmM4MTMyMWYgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC02MzksMTEgKzYzOSwxNCBAQAogCSJucl9zbGFiX3JlY2xhaW1hYmxlIiwKIAkibnJfc2xhYl91bnJlY2xhaW1hYmxlIiwKIAkibnJfcGFnZV90YWJsZV9wYWdlcyIsCisJIm5yX2tlcm5lbF9zdGFjayIsCiAJIm5yX3Vuc3RhYmxlIiwKIAkibnJfYm91bmNlIiwKIAkibnJfdm1zY2FuX3dyaXRlIiwKIAkibnJfd3JpdGViYWNrX3RlbXAiLAotCisJIm5yX2lzb2xhdGVkX2Fub24iLAorCSJucl9pc29sYXRlZF9maWxlIiwKKwkibnJfc2htZW0iLAogI2lmZGVmIENPTkZJR19OVU1BCiAJIm51bWFfaGl0IiwKIAkibnVtYV9taXNzIiwKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCA5YmYwYjczLi5iMmUwN2YwIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMKKysrIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb185cC5oPgogCiAjZGVmaW5lIFZJUlRRVUVVRV9OVU0JMTI4CkBAIC0yMDAsNyArMjAxLDcgQEAKIAogCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19TRU5UOwogCi0JaWYgKGNoYW4tPnZxLT52cV9vcHMtPmFkZF9idWYoY2hhbi0+dnEsIGNoYW4tPnNnLCBvdXQsIGluLCByZXEtPnRjKSkgeworCWlmIChjaGFuLT52cS0+dnFfb3BzLT5hZGRfYnVmKGNoYW4tPnZxLCBjaGFuLT5zZywgb3V0LCBpbiwgcmVxLT50YykgPCAwKSB7CiAJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsCiAJCQkiOXAgZGVidWc6IHZpcnRpbyBycGMgYWRkX2J1ZiByZXR1cm5lZCBmYWlsdXJlIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMzM0LDggKzMzNSw2IEBACiAJfQogfQogCi0jZGVmaW5lIFZJUlRJT19JRF85UCA5Ci0KIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVklSVElPX0lEXzlQLCBWSVJUSU9fREVWX0FOWV9JRCB9LAogCXsgMCB9LApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggMDliZWRlYi4uNDlkODQ5NSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC01NzcsMTEgKzU3Nyw2IEBACiAJfQogCiAJaWYgKHNlc3Npb24tPmhpZCkgewotCQlpZiAoc2Vzc2lvbi0+aGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCi0JCQloaWRpbnB1dF9kaXNjb25uZWN0KHNlc3Npb24tPmhpZCk7Ci0JCWlmIChzZXNzaW9uLT5oaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCi0JCQloaWRyYXdfZGlzY29ubmVjdChzZXNzaW9uLT5oaWQpOwotCiAJCWhpZF9kZXN0cm95X2RldmljZShzZXNzaW9uLT5oaWQpOwogCQlzZXNzaW9uLT5oaWQgPSBOVUxMOwogCX0KQEAgLTc0Nyw4ICs3NDIsNiBAQAogCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5pbnRyX3RyYW5zbWl0KTsKIAotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKLQkJaGlkaW5wdXRfZGlzY29ubmVjdChoaWQpOwogCWhpZC0+Y2xhaW1lZCA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCAzMGQ1NDQ2Li41MjQ3MTJhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC0xMjA2LDEyICsxMjA2LDEyIEBACiAKIHZvaWQgX19pbml0IHNrX2luaXQodm9pZCkKIHsKLQlpZiAobnVtX3BoeXNwYWdlcyA8PSA0MDk2KSB7CisJaWYgKHRvdGFscmFtX3BhZ2VzIDw9IDQwOTYpIHsKIAkJc3lzY3RsX3dtZW1fbWF4ID0gMzI3Njc7CiAJCXN5c2N0bF9ybWVtX21heCA9IDMyNzY3OwogCQlzeXNjdGxfd21lbV9kZWZhdWx0ID0gMzI3Njc7CiAJCXN5c2N0bF9ybWVtX2RlZmF1bHQgPSAzMjc2NzsKLQl9IGVsc2UgaWYgKG51bV9waHlzcGFnZXMgPj0gMTMxMDcyKSB7CisJfSBlbHNlIGlmICh0b3RhbHJhbV9wYWdlcyA+PSAxMzEwNzIpIHsKIAkJc3lzY3RsX3dtZW1fbWF4ID0gMTMxMDcxOwogCQlzeXNjdGxfcm1lbV9tYXggPSAxMzEwNzE7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggOTIzZGIwNi4uYmM0NDY3MCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0xMDQ5LDEwICsxMDQ5LDEwIEBACiAJICoKIAkgKiBUaGUgbWV0aG9kb2xvZ3kgaXMgc2ltaWxhciB0byB0aGF0IG9mIHRoZSBidWZmZXIgY2FjaGUuCiAJICovCi0JaWYgKG51bV9waHlzcGFnZXMgPj0gKDEyOCAqIDEwMjQpKQotCQlnb2FsID0gbnVtX3BoeXNwYWdlcyA+PiAoMjEgLSBQQUdFX1NISUZUKTsKKwlpZiAodG90YWxyYW1fcGFnZXMgPj0gKDEyOCAqIDEwMjQpKQorCQlnb2FsID0gdG90YWxyYW1fcGFnZXMgPj4gKDIxIC0gUEFHRV9TSElGVCk7CiAJZWxzZQotCQlnb2FsID0gbnVtX3BoeXNwYWdlcyA+PiAoMjMgLSBQQUdFX1NISUZUKTsKKwkJZ29hbCA9IHRvdGFscmFtX3BhZ2VzID4+ICgyMyAtIFBBR0VfU0hJRlQpOwogCiAJaWYgKHRoYXNoX2VudHJpZXMpCiAJCWdvYWwgPSAodGhhc2hfZW50cmllcyAqCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggOTM4M2QzZS4uNTc2NjJjYSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtMTc1MCw3ICsxNzUwLDcgQEAKIAlkbl9yb3V0ZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIGRlY25ldF9kc3RfZ2NfaW50ZXJ2YWwgKiBIWjsKIAlhZGRfdGltZXIoJmRuX3JvdXRlX3RpbWVyKTsKIAotCWdvYWwgPSBudW1fcGh5c3BhZ2VzID4+ICgyNiAtIFBBR0VfU0hJRlQpOworCWdvYWwgPSB0b3RhbHJhbV9wYWdlcyA+PiAoMjYgLSBQQUdFX1NISUZUKTsKIAogCWZvcihvcmRlciA9IDA7ICgxVUwgPDwgb3JkZXIpIDwgZ29hbDsgb3JkZXIrKykKIAkJLyogTk9USElORyAqLzsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDkxODY3ZDMuLmRmOTM0NzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMzQxNCw3ICszNDE0LDcgQEAKIAkJYWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goIklQIHJvdXRlIGNhY2hlIiwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBydF9oYXNoX2J1Y2tldCksCiAJCQkJCXJoYXNoX2VudHJpZXMsCi0JCQkJCShudW1fcGh5c3BhZ2VzID49IDEyOCAqIDEwMjQpID8KKwkJCQkJKHRvdGFscmFtX3BhZ2VzID49IDEyOCAqIDEwMjQpID8KIAkJCQkJMTUgOiAxNywKIAkJCQkJMCwKIAkJCQkJJnJ0X2hhc2hfbG9nLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxOWEwNjEyLi4yMTM4N2ViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMjg2Miw3ICsyODYyLDcgQEAKIAkJYWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goIlRDUCBlc3RhYmxpc2hlZCIsCiAJCQkJCXNpemVvZihzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQpLAogCQkJCQl0aGFzaF9lbnRyaWVzLAotCQkJCQkobnVtX3BoeXNwYWdlcyA+PSAxMjggKiAxMDI0KSA/CisJCQkJCSh0b3RhbHJhbV9wYWdlcyA+PSAxMjggKiAxMDI0KSA/CiAJCQkJCTEzIDogMTUsCiAJCQkJCTAsCiAJCQkJCSZ0Y3BfaGFzaGluZm8uZWhhc2hfc2l6ZSwKQEAgLTI4NzksNyArMjg3OSw3IEBACiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJUQ1AgYmluZCIsCiAJCQkJCXNpemVvZihzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQpLAogCQkJCQl0Y3BfaGFzaGluZm8uZWhhc2hfc2l6ZSwKLQkJCQkJKG51bV9waHlzcGFnZXMgPj0gMTI4ICogMTAyNCkgPworCQkJCQkodG90YWxyYW1fcGFnZXMgPj0gMTI4ICogMTAyNCkgPwogCQkJCQkxMyA6IDE1LAogCQkJCQkwLAogCQkJCQkmdGNwX2hhc2hpbmZvLmJoYXNoX3NpemUsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCAzOTA3NTEwLi4wOTA2NzVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCisrKyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwbXJfbWZjX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwbXJfbWZjX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gaXBtcl9tZmNfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IGlwbXJfbWZjX3NlcV9uZXh0LAogCS5zdG9wICA9IGlwbXJfbWZjX3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IGIzNzEwOTguLjdjOWVjM2QgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTEyNDUsOSArMTI0NSw5IEBACiAJICogbWFjaGluZSBoYXMgNTEyIGJ1Y2tldHMuID49IDFHQiBtYWNoaW5lcyBoYXZlIDE2Mzg0IGJ1Y2tldHMuICovCiAJaWYgKCFuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpIHsKIAkJbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplCi0JCQk9ICgoKG51bV9waHlzcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAxNjM4NCkKKwkJCT0gKCgodG90YWxyYW1fcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAxNjM4NCkKIAkJCSAgIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7Ci0JCWlmIChudW1fcGh5c3BhZ2VzID4gKDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkpCisJCWlmICh0b3RhbHJhbV9wYWdlcyA+ICgxMDI0ICogMTAyNCAqIDEwMjQgLyBQQUdFX1NJWkUpKQogCQkJbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplID0gMTYzODQ7CiAJCWlmIChuZl9jb25udHJhY2tfaHRhYmxlX3NpemUgPCAzMikKIAkJCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZSA9IDMyOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IGE2YWM4M2EuLmYwMTk1NWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTYxNyw3ICs2MTcsNyBAQAogCWludCBjcHU7CiAKIAkvKiBQZWRhbnRyeTogcHJldmVudCB0aGVtIGZyb20gaGl0dGluZyBCVUcoKSBpbiB2bWFsbG9jLmMgLS1SUiAqLwotCWlmICgoU01QX0FMSUdOKHNpemUpID4+IFBBR0VfU0hJRlQpICsgMiA+IG51bV9waHlzcGFnZXMpCisJaWYgKChTTVBfQUxJR04oc2l6ZSkgPj4gUEFHRV9TSElGVCkgKyAyID4gdG90YWxyYW1fcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCiAJbmV3aW5mbyA9IGt6YWxsb2MoWFRfVEFCTEVfSU5GT19TWiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwppbmRleCAyMTlkY2RiLi5kZDE2ZTQwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTE5NCw5ICsxOTQsOSBAQAogCWlmIChtaW5mby0+Y2ZnLnNpemUpCiAJCXNpemUgPSBtaW5mby0+Y2ZnLnNpemU7CiAJZWxzZSB7Ci0JCXNpemUgPSAoKG51bV9waHlzcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAxNjM4NCkgLworCQlzaXplID0gKCh0b3RhbHJhbV9wYWdlcyA8PCBQQUdFX1NISUZUKSAvIDE2Mzg0KSAvCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCk7Ci0JCWlmIChudW1fcGh5c3BhZ2VzID4gKDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkpCisJCWlmICh0b3RhbHJhbV9wYWdlcyA+ICgxMDI0ICogMTAyNCAqIDEwMjQgLyBQQUdFX1NJWkUpKQogCQkJc2l6ZSA9IDgxOTI7CiAJCWlmIChzaXplIDwgMTYpCiAJCQlzaXplID0gMTY7CkBAIC0yNjYsOSArMjY2LDkgQEAKIAlpZiAobWluZm8tPmNmZy5zaXplKSB7CiAJCXNpemUgPSBtaW5mby0+Y2ZnLnNpemU7CiAJfSBlbHNlIHsKLQkJc2l6ZSA9IChudW1fcGh5c3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC8gMTYzODQgLworCQlzaXplID0gKHRvdGFscmFtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC8gMTYzODQgLwogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpOwotCQlpZiAobnVtX3BoeXNwYWdlcyA+IDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkKKwkJaWYgKHRvdGFscmFtX3BhZ2VzID4gMTAyNCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKQogCQkJc2l6ZSA9IDgxOTI7CiAJCWlmIChzaXplIDwgMTYpCiAJCQlzaXplID0gMTY7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggYzVhYWI2YS4uNTUxODBiOSAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMjA5MSwxMCArMjA5MSwxMCBAQAogCWlmICghbmxfdGFibGUpCiAJCWdvdG8gcGFuaWM7CiAKLQlpZiAobnVtX3BoeXNwYWdlcyA+PSAoMTI4ICogMTAyNCkpCi0JCWxpbWl0ID0gbnVtX3BoeXNwYWdlcyA+PiAoMjEgLSBQQUdFX1NISUZUKTsKKwlpZiAodG90YWxyYW1fcGFnZXMgPj0gKDEyOCAqIDEwMjQpKQorCQlsaW1pdCA9IHRvdGFscmFtX3BhZ2VzID4+ICgyMSAtIFBBR0VfU0hJRlQpOwogCWVsc2UKLQkJbGltaXQgPSBudW1fcGh5c3BhZ2VzID4+ICgyMyAtIFBBR0VfU0hJRlQpOworCQlsaW1pdCA9IHRvdGFscmFtX3BhZ2VzID4+ICgyMyAtIFBBR0VfU0hJRlQpOwogCiAJb3JkZXIgPSBnZXRfYml0bWFza19vcmRlcihsaW1pdCkgLSAxICsgUEFHRV9TSElGVDsKIAlsaW1pdCA9ICgxVUwgPDwgb3JkZXIpIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1jYWxsLmMgYi9uZXQvcnhycGMvYXItY2FsbC5jCmluZGV4IGQ5MjMxMjQuLmJjMDAxOWYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1jYWxsLmMKKysrIGIvbmV0L3J4cnBjL2FyLWNhbGwuYwpAQCAtOTYsNyArOTYsNyBAQAogfQogCiAvKgotICogYWxsb2NhdGUgYSBuZXcgY2xpZW50IGNhbGwgYW5kIGF0dGVtcHQgdG8gdG8gZ2V0IGEgY29ubmVjdGlvbiBzbG90IGZvciBpdAorICogYWxsb2NhdGUgYSBuZXcgY2xpZW50IGNhbGwgYW5kIGF0dGVtcHQgdG8gZ2V0IGEgY29ubmVjdGlvbiBzbG90IGZvciBpdAogICovCiBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKAogCXN0cnVjdCByeHJwY19zb2NrICpyeCwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggMzc1ZDY0Yy4uMmM1Yzc2YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTc3LDcgKzc3LDcgQEAKICAqICAgVGhlIHNlcnZpY2UgY3VydmUgcGFyYW1ldGVycyBhcmUgY29udmVydGVkIHRvIHRoZSBpbnRlcm5hbAogICogICByZXByZXNlbnRhdGlvbi4gVGhlIHNsb3BlIHZhbHVlcyBhcmUgc2NhbGVkIHRvIGF2b2lkIG92ZXJmbG93LgogICogICB0aGUgaW52ZXJzZSBzbG9wZSB2YWx1ZXMgYXMgd2VsbCBhcyB0aGUgeS1wcm9qZWN0aW9uIG9mIHRoZSAxc3QKLSAqICAgc2VnbWVudCBhcmUga2VwdCBpbiBvcmRlciB0byB0byBhdm9pZCA2NC1iaXQgZGl2aWRlIG9wZXJhdGlvbnMKKyAqICAgc2VnbWVudCBhcmUga2VwdCBpbiBvcmRlciB0byBhdm9pZCA2NC1iaXQgZGl2aWRlIG9wZXJhdGlvbnMKICAqICAgdGhhdCBhcmUgZXhwZW5zaXZlIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLgogICovCiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGM1NTdmMWYuLjYxMmRjODcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMTE4NCwxMCArMTE4NCwxMCBAQAogCS8qIFNpemUgYW5kIGFsbG9jYXRlIHRoZSBhc3NvY2lhdGlvbiBoYXNoIHRhYmxlLgogCSAqIFRoZSBtZXRob2RvbG9neSBpcyBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHRjcCBoYXNoIHRhYmxlcy4KIAkgKi8KLQlpZiAobnVtX3BoeXNwYWdlcyA+PSAoMTI4ICogMTAyNCkpCi0JCWdvYWwgPSBudW1fcGh5c3BhZ2VzID4+ICgyMiAtIFBBR0VfU0hJRlQpOworCWlmICh0b3RhbHJhbV9wYWdlcyA+PSAoMTI4ICogMTAyNCkpCisJCWdvYWwgPSB0b3RhbHJhbV9wYWdlcyA+PiAoMjIgLSBQQUdFX1NISUZUKTsKIAllbHNlCi0JCWdvYWwgPSBudW1fcGh5c3BhZ2VzID4+ICgyNCAtIFBBR0VfU0hJRlQpOworCQlnb2FsID0gdG90YWxyYW1fcGFnZXMgPj4gKDI0IC0gUEFHRV9TSElGVCk7CiAKIAlmb3IgKG9yZGVyID0gMDsgKDFVTCA8PCBvcmRlcikgPCBnb2FsOyBvcmRlcisrKQogCQk7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggMmEwMjJjMC4uNDk5MTdhMSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtMjM1LDggKzIzNiw2IEBACiAJcmV0dXJuIF9fcHV0X3VzZXIoa2xlbiwgdWxlbik7CiB9CiAKLSNkZWZpbmUgU09DS0ZTX01BR0lDIDB4NTM0RjQzNEIKLQogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzb2NrX2lub2RlX2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgc3RydWN0IGlub2RlICpzb2NrX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0yODUsNyArMjg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNvY2tmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc29ja2ZzX29wcyA9IHsKIAkuYWxsb2NfaW5vZGUgPQlzb2NrX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID1zb2NrX2Rlc3Ryb3lfaW5vZGUsCiAJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGguYyBiL25ldC9zdW5ycGMvYXV0aC5jCmluZGV4IDBjNDMxYzIuLjU0YTRlMDQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aC5jCkBAIC0zODUsNyArMzg1LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJwY2F1dGhfaW5pdF9jcmVkKTsKIAogdm9pZAotcnBjYXV0aF9nZW5lcmljX2JpbmRfY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKK3JwY2F1dGhfZ2VuZXJpY19iaW5kX2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIGludCBsb29rdXBmbGFncykKIHsKIAl0YXNrLT50a19tc2cucnBjX2NyZWQgPSBnZXRfcnBjY3JlZChjcmVkKTsKIAlkcHJpbnRrKCJSUEM6ICU1dSBob2xkaW5nICVzIGNyZWQgJXBcbiIsIHRhc2stPnRrX3BpZCwKQEAgLTM5NCw3ICszOTQsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnBjYXV0aF9nZW5lcmljX2JpbmRfY3JlZCk7CiAKIHN0YXRpYyB2b2lkCi1ycGNhdXRoX2JpbmRfcm9vdF9jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3JwY2F1dGhfYmluZF9yb290X2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrLCBpbnQgbG9va3VwZmxhZ3MpCiB7CiAJc3RydWN0IHJwY19hdXRoICphdXRoID0gdGFzay0+dGtfY2xpZW50LT5jbF9hdXRoOwogCXN0cnVjdCBhdXRoX2NyZWQgYWNyZWQgPSB7CkBAIC00MDUsNyArNDA1LDcgQEAKIAogCWRwcmludGsoIlJQQzogJTV1IGxvb2tpbmcgdXAgJXMgY3JlZFxuIiwKIAkJdGFzay0+dGtfcGlkLCB0YXNrLT50a19jbGllbnQtPmNsX2F1dGgtPmF1X29wcy0+YXVfbmFtZSk7Ci0JcmV0ID0gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCAmYWNyZWQsIDApOworCXJldCA9IGF1dGgtPmF1X29wcy0+bG9va3VwX2NyZWQoYXV0aCwgJmFjcmVkLCBsb29rdXBmbGFncyk7CiAJaWYgKCFJU19FUlIocmV0KSkKIAkJdGFzay0+dGtfbXNnLnJwY19jcmVkID0gcmV0OwogCWVsc2UKQEAgLTQxMywxNCArNDEzLDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1ycGNhdXRoX2JpbmRfbmV3X2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrKQorcnBjYXV0aF9iaW5kX25ld19jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IGxvb2t1cGZsYWdzKQogewogCXN0cnVjdCBycGNfYXV0aCAqYXV0aCA9IHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aDsKIAlzdHJ1Y3QgcnBjX2NyZWQgKnJldDsKIAogCWRwcmludGsoIlJQQzogJTV1IGxvb2tpbmcgdXAgJXMgY3JlZFxuIiwKIAkJdGFzay0+dGtfcGlkLCBhdXRoLT5hdV9vcHMtPmF1X25hbWUpOwotCXJldCA9IHJwY2F1dGhfbG9va3VwY3JlZChhdXRoLCAwKTsKKwlyZXQgPSBycGNhdXRoX2xvb2t1cGNyZWQoYXV0aCwgbG9va3VwZmxhZ3MpOwogCWlmICghSVNfRVJSKHJldCkpCiAJCXRhc2stPnRrX21zZy5ycGNfY3JlZCA9IHJldDsKIAllbHNlCkBAIC00MzAsMTIgKzQzMCwxNiBAQAogdm9pZAogcnBjYXV0aF9iaW5kY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgaW50IGZsYWdzKQogeworCWludCBsb29rdXBmbGFncyA9IDA7CisKKwlpZiAoZmxhZ3MgJiBSUENfVEFTS19BU1lOQykKKwkJbG9va3VwZmxhZ3MgfD0gUlBDQVVUSF9MT09LVVBfTkVXOwogCWlmIChjcmVkICE9IE5VTEwpCi0JCWNyZWQtPmNyX29wcy0+Y3JiaW5kKHRhc2ssIGNyZWQpOworCQljcmVkLT5jcl9vcHMtPmNyYmluZCh0YXNrLCBjcmVkLCBsb29rdXBmbGFncyk7CiAJZWxzZSBpZiAoZmxhZ3MgJiBSUENfVEFTS19ST09UQ1JFRFMpCi0JCXJwY2F1dGhfYmluZF9yb290X2NyZWQodGFzayk7CisJCXJwY2F1dGhfYmluZF9yb290X2NyZWQodGFzaywgbG9va3VwZmxhZ3MpOwogCWVsc2UKLQkJcnBjYXV0aF9iaW5kX25ld19jcmVkKHRhc2spOworCQlycGNhdXRoX2JpbmRfbmV3X2NyZWQodGFzaywgbG9va3VwZmxhZ3MpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dlbmVyaWMuYwppbmRleCA0MDI4NTAyLi5iZjg4YmY4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMKQEAgLTU1LDEzICs1NSwxMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2xvb2t1cF9tYWNoaW5lX2NyZWQpOwogCiBzdGF0aWMgdm9pZAotZ2VuZXJpY19iaW5kX2NyZWQoc3RydWN0IHJwY190YXNrICp0YXNrLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCitnZW5lcmljX2JpbmRfY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgaW50IGxvb2t1cGZsYWdzKQogewogCXN0cnVjdCBycGNfYXV0aCAqYXV0aCA9IHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aDsKIAlzdHJ1Y3QgYXV0aF9jcmVkICphY3JlZCA9ICZjb250YWluZXJfb2YoY3JlZCwgc3RydWN0IGdlbmVyaWNfY3JlZCwgZ2NfYmFzZSktPmFjcmVkOwogCXN0cnVjdCBycGNfY3JlZCAqcmV0OwogCi0JcmV0ID0gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCBhY3JlZCwgMCk7CisJcmV0ID0gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCBhY3JlZCwgbG9va3VwZmxhZ3MpOwogCWlmICghSVNfRVJSKHJldCkpCiAJCXRhc2stPnRrX21zZy5ycGNfY3JlZCA9IHJldDsKIAllbHNlCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggMmU2YTE0OC4uZjZjNTFlNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtMTM3NCw4ICsxMzc0LDEwIEBACiAJCWlmIChzdGF0KQogCQkJZ290byBvdXRfZXJyOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb3RvIG91dF9lcnI7CisJLyoKKwkgKiBGb3IgYW55IG90aGVyIGdjX3N2YyB2YWx1ZSwgc3ZjYXV0aF9nc3NfYWNjZXB0KCkgYWxyZWFkeSBzZXQKKwkgKiB0aGUgYXV0aF9lcnJvciBhcHByb3ByaWF0ZWx5OyBqdXN0IGZhbGwgdGhyb3VnaDoKKwkgKi8KIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2FjaGUuYyBiL25ldC9zdW5ycGMvY2FjaGUuYwppbmRleCA0NWNkYWZmLi5kNmVlZTI5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NhY2hlLmMKKysrIGIvbmV0L3N1bnJwYy9jYWNoZS5jCkBAIC0xMDMsMjMgKzEwMywyMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3VucnBjX2NhY2hlX2xvb2t1cCk7CiAKIAotc3RhdGljIHZvaWQgcXVldWVfbG9vc2Uoc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqY2gpOworc3RhdGljIHZvaWQgY2FjaGVfZGVxdWV1ZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsIHN0cnVjdCBjYWNoZV9oZWFkICpjaCk7CiAKLXN0YXRpYyBpbnQgY2FjaGVfZnJlc2hfbG9ja2VkKHN0cnVjdCBjYWNoZV9oZWFkICpoZWFkLCB0aW1lX3QgZXhwaXJ5KQorc3RhdGljIHZvaWQgY2FjaGVfZnJlc2hfbG9ja2VkKHN0cnVjdCBjYWNoZV9oZWFkICpoZWFkLCB0aW1lX3QgZXhwaXJ5KQogewogCWhlYWQtPmV4cGlyeV90aW1lID0gZXhwaXJ5OwogCWhlYWQtPmxhc3RfcmVmcmVzaCA9IGdldF9zZWNvbmRzKCk7Ci0JcmV0dXJuICF0ZXN0X2FuZF9zZXRfYml0KENBQ0hFX1ZBTElELCAmaGVhZC0+ZmxhZ3MpOworCXNldF9iaXQoQ0FDSEVfVkFMSUQsICZoZWFkLT5mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX2ZyZXNoX3VubG9ja2VkKHN0cnVjdCBjYWNoZV9oZWFkICpoZWFkLAotCQkJc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLCBpbnQgbmV3KQorCQkJCSBzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwpCiB7Ci0JaWYgKG5ldykKLQkJY2FjaGVfcmV2aXNpdF9yZXF1ZXN0KGhlYWQpOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmhlYWQtPmZsYWdzKSkgewogCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaGVhZCk7Ci0JCXF1ZXVlX2xvb3NlKGRldGFpbCwgaGVhZCk7CisJCWNhY2hlX2RlcXVldWUoZGV0YWlsLCBoZWFkKTsKIAl9CiB9CiAKQEAgLTEzMiw3ICsxMzAsNiBAQAogCSAqLwogCXN0cnVjdCBjYWNoZV9oZWFkICoqaGVhZDsKIAlzdHJ1Y3QgY2FjaGVfaGVhZCAqdG1wOwotCWludCBpc19uZXc7CiAKIAlpZiAoIXRlc3RfYml0KENBQ0hFX1ZBTElELCAmb2xkLT5mbGFncykpIHsKIAkJd3JpdGVfbG9jaygmZGV0YWlsLT5oYXNoX2xvY2spOwpAQCAtMTQxLDkgKzEzOCw5IEBACiAJCQkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJm9sZC0+ZmxhZ3MpOwogCQkJZWxzZQogCQkJCWRldGFpbC0+dXBkYXRlKG9sZCwgbmV3KTsKLQkJCWlzX25ldyA9IGNhY2hlX2ZyZXNoX2xvY2tlZChvbGQsIG5ldy0+ZXhwaXJ5X3RpbWUpOworCQkJY2FjaGVfZnJlc2hfbG9ja2VkKG9sZCwgbmV3LT5leHBpcnlfdGltZSk7CiAJCQl3cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKLQkJCWNhY2hlX2ZyZXNoX3VubG9ja2VkKG9sZCwgZGV0YWlsLCBpc19uZXcpOworCQkJY2FjaGVfZnJlc2hfdW5sb2NrZWQob2xkLCBkZXRhaWwpOwogCQkJcmV0dXJuIG9sZDsKIAkJfQogCQl3cml0ZV91bmxvY2soJmRldGFpbC0+aGFzaF9sb2NrKTsKQEAgLTE2NywxMSArMTY0LDExIEBACiAJKmhlYWQgPSB0bXA7CiAJZGV0YWlsLT5lbnRyaWVzKys7CiAJY2FjaGVfZ2V0KHRtcCk7Ci0JaXNfbmV3ID0gY2FjaGVfZnJlc2hfbG9ja2VkKHRtcCwgbmV3LT5leHBpcnlfdGltZSk7CisJY2FjaGVfZnJlc2hfbG9ja2VkKHRtcCwgbmV3LT5leHBpcnlfdGltZSk7CiAJY2FjaGVfZnJlc2hfbG9ja2VkKG9sZCwgMCk7CiAJd3JpdGVfdW5sb2NrKCZkZXRhaWwtPmhhc2hfbG9jayk7Ci0JY2FjaGVfZnJlc2hfdW5sb2NrZWQodG1wLCBkZXRhaWwsIGlzX25ldyk7Ci0JY2FjaGVfZnJlc2hfdW5sb2NrZWQob2xkLCBkZXRhaWwsIDApOworCWNhY2hlX2ZyZXNoX3VubG9ja2VkKHRtcCwgZGV0YWlsKTsKKwljYWNoZV9mcmVzaF91bmxvY2tlZChvbGQsIGRldGFpbCk7CiAJY2FjaGVfcHV0KG9sZCwgZGV0YWlsKTsKIAlyZXR1cm4gdG1wOwogfQpAQCAtMTg0LDYgKzE4MSwyMiBAQAogCXJldHVybiBjZC0+Y2FjaGVfdXBjYWxsKGNkLCBoKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2FjaGVfaXNfdmFsaWQoc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaCkKK3sKKwlpZiAoIXRlc3RfYml0KENBQ0hFX1ZBTElELCAmaC0+ZmxhZ3MpIHx8CisJICAgIGgtPmV4cGlyeV90aW1lIDwgZ2V0X3NlY29uZHMoKSkKKwkJcmV0dXJuIC1FQUdBSU47CisJZWxzZSBpZiAoZGV0YWlsLT5mbHVzaF90aW1lID4gaC0+bGFzdF9yZWZyZXNoKQorCQlyZXR1cm4gLUVBR0FJTjsKKwllbHNlIHsKKwkJLyogZW50cnkgaXMgdmFsaWQgKi8KKwkJaWYgKHRlc3RfYml0KENBQ0hFX05FR0FUSVZFLCAmaC0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIGdlbmVyaWMgY2FjaGUgbWFuYWdlbWVudCByb3V0aW5lIGZvciBhbGwKICAqIHRoZSBhdXRoZW50aWNhdGlvbiBjYWNoZXMuCkBAIC0xOTIsOCArMjA1LDEwIEBACiAgKgogICoKICAqIFJldHVybnMgMCBpZiB0aGUgY2FjaGVfaGVhZCBjYW4gYmUgdXNlZCwgb3IgY2FjaGVfcHV0cyBpdCBhbmQgcmV0dXJucwotICogLUVBR0FJTiBpZiB1cGNhbGwgaXMgcGVuZGluZywKLSAqIC1FVElNRURPVVQgaWYgdXBjYWxsIGZhaWxlZCBhbmQgc2hvdWxkIGJlIHJldHJpZWQsCisgKiAtRUFHQUlOIGlmIHVwY2FsbCBpcyBwZW5kaW5nIGFuZCByZXF1ZXN0IGhhcyBiZWVuIHF1ZXVlZAorICogLUVUSU1FRE9VVCBpZiB1cGNhbGwgZmFpbGVkIG9yIHJlcXVlc3QgY291bGQgbm90IGJlIHF1ZXVlIG9yCisgKiAgICAgICAgICAgdXBjYWxsIGNvbXBsZXRlZCBidXQgaXRlbSBpcyBzdGlsbCBpbnZhbGlkIChpbXBseWluZyB0aGF0CisgKiAgICAgICAgICAgdGhlIGNhY2hlIGl0ZW0gaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIG5ld2VyIG9uZSkuCiAgKiAtRU5PRU5UIGlmIGNhY2hlIGVudHJ5IHdhcyBuZWdhdGl2ZQogICovCiBpbnQgY2FjaGVfY2hlY2soc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0YWlsLApAQCAtMjAzLDE3ICsyMTgsNyBAQAogCWxvbmcgcmVmcmVzaF9hZ2UsIGFnZTsKIAogCS8qIEZpcnN0IGRlY2lkZSByZXR1cm4gc3RhdHVzIGFzIGJlc3Qgd2UgY2FuICovCi0JaWYgKCF0ZXN0X2JpdChDQUNIRV9WQUxJRCwgJmgtPmZsYWdzKSB8fAotCSAgICBoLT5leHBpcnlfdGltZSA8IGdldF9zZWNvbmRzKCkpCi0JCXJ2ID0gLUVBR0FJTjsKLQllbHNlIGlmIChkZXRhaWwtPmZsdXNoX3RpbWUgPiBoLT5sYXN0X3JlZnJlc2gpCi0JCXJ2ID0gLUVBR0FJTjsKLQllbHNlIHsKLQkJLyogZW50cnkgaXMgdmFsaWQgKi8KLQkJaWYgKHRlc3RfYml0KENBQ0hFX05FR0FUSVZFLCAmaC0+ZmxhZ3MpKQotCQkJcnYgPSAtRU5PRU5UOwotCQllbHNlIHJ2ID0gMDsKLQl9CisJcnYgPSBjYWNoZV9pc192YWxpZChkZXRhaWwsIGgpOwogCiAJLyogbm93IHNlZSBpZiB3ZSB3YW50IHRvIHN0YXJ0IGFuIHVwY2FsbCAqLwogCXJlZnJlc2hfYWdlID0gKGgtPmV4cGlyeV90aW1lIC0gaC0+bGFzdF9yZWZyZXNoKTsKQEAgLTIyOSwxMCArMjM0LDExIEBACiAJCQlzd2l0Y2ggKGNhY2hlX21ha2VfdXBjYWxsKGRldGFpbCwgaCkpIHsKIAkJCWNhc2UgLUVJTlZBTDoKIAkJCQljbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmgtPmZsYWdzKTsKKwkJCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaCk7CiAJCQkJaWYgKHJ2ID09IC1FQUdBSU4pIHsKIAkJCQkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJmgtPmZsYWdzKTsKLQkJCQkJY2FjaGVfZnJlc2hfdW5sb2NrZWQoaCwgZGV0YWlsLAotCQkJCQkgICAgIGNhY2hlX2ZyZXNoX2xvY2tlZChoLCBnZXRfc2Vjb25kcygpK0NBQ0hFX05FV19FWFBJUlkpKTsKKwkJCQkJY2FjaGVfZnJlc2hfbG9ja2VkKGgsIGdldF9zZWNvbmRzKCkrQ0FDSEVfTkVXX0VYUElSWSk7CisJCQkJCWNhY2hlX2ZyZXNoX3VubG9ja2VkKGgsIGRldGFpbCk7CiAJCQkJCXJ2ID0gLUVOT0VOVDsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0yNDUsMTAgKzI1MSwxNCBAQAogCQl9CiAJfQogCi0JaWYgKHJ2ID09IC1FQUdBSU4pCi0JCWlmIChjYWNoZV9kZWZlcl9yZXEocnFzdHAsIGgpICE9IDApCi0JCQlydiA9IC1FVElNRURPVVQ7Ci0KKwlpZiAocnYgPT0gLUVBR0FJTikgeworCQlpZiAoY2FjaGVfZGVmZXJfcmVxKHJxc3RwLCBoKSA8IDApIHsKKwkJCS8qIFJlcXVlc3QgaXMgbm90IGRlZmVycmVkICovCisJCQlydiA9IGNhY2hlX2lzX3ZhbGlkKGRldGFpbCwgaCk7CisJCQlpZiAocnYgPT0gLUVBR0FJTikKKwkJCQlydiA9IC1FVElNRURPVVQ7CisJCX0KKwl9CiAJaWYgKHJ2KQogCQljYWNoZV9wdXQoaCwgZGV0YWlsKTsKIAlyZXR1cm4gcnY7CkBAIC0zOTYsNyArNDA2LDcgQEAKIAkJCQkpCiAJCQkJY29udGludWU7CiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENBQ0hFX1BFTkRJTkcsICZjaC0+ZmxhZ3MpKQotCQkJCXF1ZXVlX2xvb3NlKGN1cnJlbnRfZGV0YWlsLCBjaCk7CisJCQkJY2FjaGVfZGVxdWV1ZShjdXJyZW50X2RldGFpbCwgY2gpOwogCiAJCQlpZiAoYXRvbWljX3JlYWQoJmNoLT5yZWYucmVmY291bnQpID09IDEpCiAJCQkJYnJlYWs7CkBAIC00MTIsOCArNDIyLDEwIEBACiAJCWlmICghY2gpCiAJCQljdXJyZW50X2luZGV4ICsrOwogCQlzcGluX3VubG9jaygmY2FjaGVfbGlzdF9sb2NrKTsKLQkJaWYgKGNoKQorCQlpZiAoY2gpIHsKKwkJCWNhY2hlX3JldmlzaXRfcmVxdWVzdChjaCk7CiAJCQljYWNoZV9wdXQoY2gsIGQpOworCQl9CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrKCZjYWNoZV9saXN0X2xvY2spOwogCkBAIC00ODgsNyArNTAwLDcgQEAKIAogc3RhdGljIGludCBjYWNoZV9kZWZlcl9yZXEoc3RydWN0IGNhY2hlX3JlcSAqcmVxLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaXRlbSkKIHsKLQlzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxICpkcmVxOworCXN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEgKmRyZXEsICpkaXNjYXJkOwogCWludCBoYXNoID0gREZSX0hBU0goaXRlbSk7CiAKIAlpZiAoY2FjaGVfZGVmZXJfY250ID49IERGUl9NQVgpIHsKQEAgLTQ5NiwxMSArNTA4LDExIEBACiAJCSAqIG9yIGNvbnRpbnVlIGFuZCBkcm9wIHRoZSBvbGRlc3QgYmVsb3cKIAkJICovCiAJCWlmIChuZXRfcmFuZG9tKCkmMSkKLQkJCXJldHVybiAtRVRJTUVET1VUOworCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRyZXEgPSByZXEtPmRlZmVyKHJlcSk7CiAJaWYgKGRyZXEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZHJlcS0+aXRlbSA9IGl0ZW07CiAKQEAgLTUxMywyMyArNTI1LDI0IEBACiAJbGlzdF9hZGQoJmRyZXEtPmhhc2gsICZjYWNoZV9kZWZlcl9oYXNoW2hhc2hdKTsKIAogCS8qIGl0IGlzIGluLCBub3cgbWF5YmUgY2xlYW4gdXAgKi8KLQlkcmVxID0gTlVMTDsKKwlkaXNjYXJkID0gTlVMTDsKIAlpZiAoKytjYWNoZV9kZWZlcl9jbnQgPiBERlJfTUFYKSB7Ci0JCWRyZXEgPSBsaXN0X2VudHJ5KGNhY2hlX2RlZmVyX2xpc3QucHJldiwKLQkJCQkgIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEsIHJlY2VudCk7Ci0JCWxpc3RfZGVsKCZkcmVxLT5yZWNlbnQpOwotCQlsaXN0X2RlbCgmZHJlcS0+aGFzaCk7CisJCWRpc2NhcmQgPSBsaXN0X2VudHJ5KGNhY2hlX2RlZmVyX2xpc3QucHJldiwKKwkJCQkgICAgIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEsIHJlY2VudCk7CisJCWxpc3RfZGVsX2luaXQoJmRpc2NhcmQtPnJlY2VudCk7CisJCWxpc3RfZGVsX2luaXQoJmRpc2NhcmQtPmhhc2gpOwogCQljYWNoZV9kZWZlcl9jbnQtLTsKIAl9CiAJc3Bpbl91bmxvY2soJmNhY2hlX2RlZmVyX2xvY2spOwogCi0JaWYgKGRyZXEpIHsKKwlpZiAoZGlzY2FyZCkKIAkJLyogdGhlcmUgd2FzIG9uZSB0b28gbWFueSAqLwotCQlkcmVxLT5yZXZpc2l0KGRyZXEsIDEpOwotCX0KKwkJZGlzY2FyZC0+cmV2aXNpdChkaXNjYXJkLCAxKTsKKwogCWlmICghdGVzdF9iaXQoQ0FDSEVfUEVORElORywgJml0ZW0tPmZsYWdzKSkgewogCQkvKiBtdXN0IGhhdmUganVzdCBiZWVuIHZhbGlkYXRlZC4uLiAqLwogCQljYWNoZV9yZXZpc2l0X3JlcXVlc3QoaXRlbSk7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU1MSw3ICs1NjQsNyBAQAogCQkJZHJlcSA9IGxpc3RfZW50cnkobHAsIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEsIGhhc2gpOwogCQkJbHAgPSBscC0+bmV4dDsKIAkJCWlmIChkcmVxLT5pdGVtID09IGl0ZW0pIHsKLQkJCQlsaXN0X2RlbCgmZHJlcS0+aGFzaCk7CisJCQkJbGlzdF9kZWxfaW5pdCgmZHJlcS0+aGFzaCk7CiAJCQkJbGlzdF9tb3ZlKCZkcmVxLT5yZWNlbnQsICZwZW5kaW5nKTsKIAkJCQljYWNoZV9kZWZlcl9jbnQtLTsKIAkJCX0KQEAgLTU3Nyw3ICs1OTAsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRyZXEsIHRtcCwgJmNhY2hlX2RlZmVyX2xpc3QsIHJlY2VudCkgewogCQlpZiAoZHJlcS0+b3duZXIgPT0gb3duZXIpIHsKLQkJCWxpc3RfZGVsKCZkcmVxLT5oYXNoKTsKKwkJCWxpc3RfZGVsX2luaXQoJmRyZXEtPmhhc2gpOwogCQkJbGlzdF9tb3ZlKCZkcmVxLT5yZWNlbnQsICZwZW5kaW5nKTsKIAkJCWNhY2hlX2RlZmVyX2NudC0tOwogCQl9CkBAIC04ODcsNyArOTAwLDcgQEAKIAogCiAKLXN0YXRpYyB2b2lkIHF1ZXVlX2xvb3NlKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hlX2hlYWQgKmNoKQorc3RhdGljIHZvaWQgY2FjaGVfZGVxdWV1ZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsIHN0cnVjdCBjYWNoZV9oZWFkICpjaCkKIHsKIAlzdHJ1Y3QgY2FjaGVfcXVldWUgKmNxOwogCXNwaW5fbG9jaygmcXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IGZhYzBjYTkuLmE0MTdkNWEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAkJLnNyY2FkZHIgPSBhcmdzLT5zYWRkcmVzcywKIAkJLmRzdGFkZHIgPSBhcmdzLT5hZGRyZXNzLAogCQkuYWRkcmxlbiA9IGFyZ3MtPmFkZHJzaXplLAorCQkuYmNfeHBydCA9IGFyZ3MtPmJjX3hwcnQsCiAJfTsKIAljaGFyIHNlcnZlcm5hbWVbNDhdOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY19waXBlLmMgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKaW5kZXggN2Y2NzZiZC4uODU4YTQ0MyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtOTMwLDcgKzkzMCw3IEBACiAvKgogICogcG9wdWxhdGUgdGhlIGZpbGVzeXN0ZW0KICAqLwotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNfb3BzID0gewogCS5hbGxvY19pbm9kZQk9IHJwY19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IHJwY19kZXN0cm95X2lub2RlLAogCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCA4ZjQ1OWFiLi5jZWY3NGJhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogCisjaW5jbHVkZSAic3VucnBjLmgiCisKICNpZmRlZiBSUENfREVCVUcKICNkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCQlSUENEQkdfU0NIRUQKICNkZWZpbmUgUlBDX1RBU0tfTUFHSUNfSUQJMHhmMDBiYWEKQEAgLTcxMSwxMSArNzEzLDYgQEAKIAlfX3JwY19leGVjdXRlKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnBjX3Rhc2ssIHUudGtfd29yaykpOwogfQogCi1zdHJ1Y3QgcnBjX2J1ZmZlciB7Ci0Jc2l6ZV90CWxlbjsKLQljaGFyCWRhdGFbXTsKLX07Ci0KIC8qKgogICogcnBjX21hbGxvYyAtIGFsbG9jYXRlIGFuIFJQQyBidWZmZXIKICAqIEB0YXNrOiBSUEMgdGFzayB0aGF0IHdpbGwgdXNlIHRoaXMgYnVmZmVyCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N1bnJwYy5oIGIvbmV0L3N1bnJwYy9zdW5ycGMuaAppbmRleCA1ZDlkZDc0Li45MGMyOTJlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N1bnJwYy5oCisrKyBiL25ldC9zdW5ycGMvc3VucnBjLmgKQEAgLTI3LDExICsyNywyNSBAQAogI2lmbmRlZiBfTkVUX1NVTlJQQ19TVU5SUENfSAogI2RlZmluZSBfTkVUX1NVTlJQQ19TVU5SUENfSAogCisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisKKy8qCisgKiBIZWFkZXIgZm9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBycGMgYnVmZmVycy4KKyAqLworc3RydWN0IHJwY19idWZmZXIgeworCXNpemVfdAlsZW47CisJY2hhcglkYXRhW107Cit9OworCiBzdGF0aWMgaW5saW5lIGludCBycGNfcmVwbHlfZXhwZWN0ZWQoc3RydWN0IHJwY190YXNrICp0YXNrKQogewogCXJldHVybiAodGFzay0+dGtfbXNnLnJwY19wcm9jICE9IE5VTEwpICYmCiAJCSh0YXNrLT50a19tc2cucnBjX3Byb2MtPnBfZGVjb2RlICE9IE5VTEwpOwogfQogCitpbnQgc3ZjX3NlbmRfY29tbW9uKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCB4ZHJfYnVmICp4ZHIsCisJCSAgICBzdHJ1Y3QgcGFnZSAqaGVhZHBhZ2UsIHVuc2lnbmVkIGxvbmcgaGVhZG9mZnNldCwKKwkJICAgIHN0cnVjdCBwYWdlICp0YWlscGFnZSwgdW5zaWduZWQgbG9uZyB0YWlsb2Zmc2V0KTsKKwogI2VuZGlmIC8qIF9ORVRfU1VOUlBDX1NVTlJQQ19IICovCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwppbmRleCAyN2Q0NDMzLi5kZjEyNGY3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCkBAIC0xNjAsNiArMTYwLDcgQEAKIAltdXRleF9pbml0KCZ4cHJ0LT54cHRfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZ4cHJ0LT54cHRfbG9jayk7CiAJc2V0X2JpdChYUFRfQlVTWSwgJnhwcnQtPnhwdF9mbGFncyk7CisJcnBjX2luaXRfd2FpdF9xdWV1ZSgmeHBydC0+eHB0X2JjX3BlbmRpbmcsICJ4cHRfYmNfcGVuZGluZyIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3hwcnRfaW5pdCk7CiAKQEAgLTcxMCwxMCArNzExLDcgQEAKIAlzcGluX3VubG9ja19iaCgmcG9vbC0+c3BfbG9jayk7CiAKIAlsZW4gPSAwOwotCWlmICh0ZXN0X2JpdChYUFRfQ0xPU0UsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7Ci0JCWRwcmludGsoInN2Y19yZWN2OiBmb3VuZCBYUFRfQ0xPU0VcbiIpOwotCQlzdmNfZGVsZXRlX3hwcnQoeHBydCk7Ci0JfSBlbHNlIGlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgJnhwcnQtPnhwdF9mbGFncykpIHsKIAkJc3RydWN0IHN2Y194cHJ0ICpuZXd4cHQ7CiAJCW5ld3hwdCA9IHhwcnQtPnhwdF9vcHMtPnhwb19hY2NlcHQoeHBydCk7CiAJCWlmIChuZXd4cHQpIHsKQEAgLTczOSw3ICs3MzcsNyBAQAogCQkJc3ZjX3hwcnRfcmVjZWl2ZWQobmV3eHB0KTsKIAkJfQogCQlzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoIXRlc3RfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnhwdF9mbGFncykpIHsKIAkJZHByaW50aygic3ZjOiBzZXJ2ZXIgJXAsIHBvb2wgJXUsIHRyYW5zcG9ydCAlcCwgaW51c2U9JWRcbiIsCiAJCQlycXN0cCwgcG9vbC0+c3BfaWQsIHhwcnQsCiAJCQlhdG9taWNfcmVhZCgmeHBydC0+eHB0X3JlZi5yZWZjb3VudCkpOwpAQCAtNzUyLDYgKzc1MCwxMSBAQAogCQlkcHJpbnRrKCJzdmM6IGdvdCBsZW49JWRcbiIsIGxlbik7CiAJfQogCisJaWYgKHRlc3RfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnhwdF9mbGFncykpIHsKKwkJZHByaW50aygic3ZjX3JlY3Y6IGZvdW5kIFhQVF9DTE9TRVxuIik7CisJCXN2Y19kZWxldGVfeHBydCh4cHJ0KTsKKwl9CisKIAkvKiBObyBkYXRhLCBpbmNvbXBsZXRlIChUQ1ApIHJlYWQsIG9yIGFjY2VwdCgpICovCiAJaWYgKGxlbiA9PSAwIHx8IGxlbiA9PSAtRUFHQUlOKSB7CiAJCXJxc3RwLT5ycV9yZXMubGVuID0gMDsKQEAgLTgwOCw2ICs4MTEsNyBAQAogCWVsc2UKIAkJbGVuID0geHBydC0+eHB0X29wcy0+eHBvX3NlbmR0byhycXN0cCk7CiAJbXV0ZXhfdW5sb2NrKCZ4cHJ0LT54cHRfbXV0ZXgpOworCXJwY193YWtlX3VwKCZ4cHJ0LT54cHRfYmNfcGVuZGluZyk7CiAJc3ZjX3hwcnRfcmVsZWFzZShycXN0cCk7CiAKIAlpZiAobGVuID09IC1FQ09OTlJFRlVTRUQgfHwgbGVuID09IC1FTk9UQ09OTiB8fCBsZW4gPT0gLUVBR0FJTikKQEAgLTExNjYsMTEgKzExNzAsNiBAQAogCiAJZHByaW50aygic3ZjX3Bvb2xfc3RhdHNfc3RhcnQsICpwaWR4PSV1XG4iLCBwaWR4KTsKIAotCWxvY2tfa2VybmVsKCk7Ci0JLyogYnVtcCB1cCB0aGUgcHNldWRvIHJlZmNvdW50IHdoaWxlIHRyYXZlcnNpbmcgKi8KLQlzdmNfZ2V0KHNlcnYpOwotCXVubG9ja19rZXJuZWwoKTsKLQogCWlmICghcGlkeCkKIAkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKIAlyZXR1cm4gKHBpZHggPiBzZXJ2LT5zdl9ucnBvb2xzID8gTlVMTCA6ICZzZXJ2LT5zdl9wb29sc1twaWR4LTFdKTsKQEAgLTExOTgsMTIgKzExOTcsNiBAQAogCiBzdGF0aWMgdm9pZCBzdmNfcG9vbF9zdGF0c19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYgPSBtLT5wcml2YXRlOwotCi0JbG9ja19rZXJuZWwoKTsKLQkvKiB0aGlzIGZ1bmN0aW9uIHJlYWxseSwgcmVhbGx5IHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIHN2Y19wdXQoKSAqLwotCXN2Y19kZXN0cm95KHNlcnYpOwotCXVubG9ja19rZXJuZWwoKTsKIH0KIAogc3RhdGljIGludCBzdmNfcG9vbF9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMgYi9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCmluZGV4IDZjYWZmYTMuLjExN2Y2OGEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwpAQCAtNjY4LDYgKzY2OCw3IEBACiAJY2FzZSAwOgogCQkqZ2lwID0gdWctPmdpOwogCQlnZXRfZ3JvdXBfaW5mbygqZ2lwKTsKKwkJY2FjaGVfcHV0KCZ1Zy0+aCwgJnVuaXhfZ2lkX2NhY2hlKTsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDIzMTI4ZWUuLmNjYzVlODMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL21zZ19wcm90Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y3NvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3RhdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydC5oPgogCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfU1ZDWFBSVAogCkBAIC0xNTMsNDkgKzE1NCwyNyBAQAogfQogCiAvKgotICogR2VuZXJpYyBzZW5kdG8gcm91dGluZQorICogc2VuZCByb3V0aW5lIGludGVuZGVkIHRvIGJlIHNoYXJlZCBieSB0aGUgZm9yZS0gYW5kIGJhY2stY2hhbm5lbAogICovCi1zdGF0aWMgaW50IHN2Y19zZW5kdG8oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9idWYgKnhkcikKK2ludCBzdmNfc2VuZF9jb21tb24oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHhkcl9idWYgKnhkciwKKwkJICAgIHN0cnVjdCBwYWdlICpoZWFkcGFnZSwgdW5zaWduZWQgbG9uZyBoZWFkb2Zmc2V0LAorCQkgICAgc3RydWN0IHBhZ2UgKnRhaWxwYWdlLCB1bnNpZ25lZCBsb25nIHRhaWxvZmZzZXQpCiB7Ci0Jc3RydWN0IHN2Y19zb2NrCSpzdnNrID0KLQkJY29udGFpbmVyX29mKHJxc3RwLT5ycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOwotCXN0cnVjdCBzb2NrZXQJKnNvY2sgPSBzdnNrLT5za19zb2NrOwotCWludAkJc2xlbjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBjbXNnaGRyCWhkcjsKLQkJbG9uZwkJYWxsW1NWQ19QS1RJTkZPX1NQQUNFIC8gc2l6ZW9mKGxvbmcpXTsKLQl9IGJ1ZmZlcjsKLQlzdHJ1Y3QgY21zZ2hkciAqY21oID0gJmJ1ZmZlci5oZHI7Ci0JaW50CQlsZW4gPSAwOwogCWludAkJcmVzdWx0OwogCWludAkJc2l6ZTsKIAlzdHJ1Y3QgcGFnZQkqKnBwYWdlID0geGRyLT5wYWdlczsKIAlzaXplX3QJCWJhc2UgPSB4ZHItPnBhZ2VfYmFzZTsKIAl1bnNpZ25lZCBpbnQJcGdsZW4gPSB4ZHItPnBhZ2VfbGVuOwogCXVuc2lnbmVkIGludAlmbGFncyA9IE1TR19NT1JFOwotCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOworCWludAkJc2xlbjsKKwlpbnQJCWxlbiA9IDA7CiAKIAlzbGVuID0geGRyLT5sZW47CiAKLQlpZiAocnFzdHAtPnJxX3Byb3QgPT0gSVBQUk9UT19VRFApIHsKLQkJc3RydWN0IG1zZ2hkciBtc2cgPSB7Ci0JCQkubXNnX25hbWUJPSAmcnFzdHAtPnJxX2FkZHIsCi0JCQkubXNnX25hbWVsZW4JPSBycXN0cC0+cnFfYWRkcmxlbiwKLQkJCS5tc2dfY29udHJvbAk9IGNtaCwKLQkJCS5tc2dfY29udHJvbGxlbgk9IHNpemVvZihidWZmZXIpLAotCQkJLm1zZ19mbGFncwk9IE1TR19NT1JFLAotCQl9OwotCi0JCXN2Y19zZXRfY21zZ19kYXRhKHJxc3RwLCBjbWgpOwotCi0JCWlmIChzb2NrX3NlbmRtc2coc29jaywgJm1zZywgMCkgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQotCiAJLyogc2VuZCBoZWFkICovCiAJaWYgKHNsZW4gPT0geGRyLT5oZWFkWzBdLmlvdl9sZW4pCiAJCWZsYWdzID0gMDsKLQlsZW4gPSBrZXJuZWxfc2VuZHBhZ2Uoc29jaywgcnFzdHAtPnJxX3Jlc3BhZ2VzWzBdLCAwLAorCWxlbiA9IGtlcm5lbF9zZW5kcGFnZShzb2NrLCBoZWFkcGFnZSwgaGVhZG9mZnNldCwKIAkJCQkgIHhkci0+aGVhZFswXS5pb3ZfbGVuLCBmbGFncyk7CiAJaWYgKGxlbiAhPSB4ZHItPmhlYWRbMF0uaW92X2xlbikKIAkJZ290byBvdXQ7CkBAIC0yMTksMTYgKzE5OCw1OCBAQAogCQliYXNlID0gMDsKIAkJcHBhZ2UrKzsKIAl9CisKIAkvKiBzZW5kIHRhaWwgKi8KIAlpZiAoeGRyLT50YWlsWzBdLmlvdl9sZW4pIHsKLQkJcmVzdWx0ID0ga2VybmVsX3NlbmRwYWdlKHNvY2ssIHJxc3RwLT5ycV9yZXNwYWdlc1swXSwKLQkJCQkJICAgICAoKHVuc2lnbmVkIGxvbmcpeGRyLT50YWlsWzBdLmlvdl9iYXNlKQotCQkJCQkJJiAoUEFHRV9TSVpFLTEpLAotCQkJCQkgICAgIHhkci0+dGFpbFswXS5pb3ZfbGVuLCAwKTsKLQorCQlyZXN1bHQgPSBrZXJuZWxfc2VuZHBhZ2Uoc29jaywgdGFpbHBhZ2UsIHRhaWxvZmZzZXQsCisJCQkJICAgeGRyLT50YWlsWzBdLmlvdl9sZW4sIDApOwogCQlpZiAocmVzdWx0ID4gMCkKIAkJCWxlbiArPSByZXN1bHQ7CiAJfQorCitvdXQ6CisJcmV0dXJuIGxlbjsKK30KKworCisvKgorICogR2VuZXJpYyBzZW5kdG8gcm91dGluZQorICovCitzdGF0aWMgaW50IHN2Y19zZW5kdG8oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHhkcl9idWYgKnhkcikKK3sKKwlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2sgPQorCQljb250YWluZXJfb2YocnFzdHAtPnJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7CisJc3RydWN0IHNvY2tldAkqc29jayA9IHN2c2stPnNrX3NvY2s7CisJdW5pb24geworCQlzdHJ1Y3QgY21zZ2hkcgloZHI7CisJCWxvbmcJCWFsbFtTVkNfUEtUSU5GT19TUEFDRSAvIHNpemVvZihsb25nKV07CisJfSBidWZmZXI7CisJc3RydWN0IGNtc2doZHIgKmNtaCA9ICZidWZmZXIuaGRyOworCWludAkJbGVuID0gMDsKKwl1bnNpZ25lZCBsb25nIHRhaWxvZmY7CisJdW5zaWduZWQgbG9uZyBoZWFkb2ZmOworCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOworCisJaWYgKHJxc3RwLT5ycV9wcm90ID09IElQUFJPVE9fVURQKSB7CisJCXN0cnVjdCBtc2doZHIgbXNnID0geworCQkJLm1zZ19uYW1lCT0gJnJxc3RwLT5ycV9hZGRyLAorCQkJLm1zZ19uYW1lbGVuCT0gcnFzdHAtPnJxX2FkZHJsZW4sCisJCQkubXNnX2NvbnRyb2wJPSBjbWgsCisJCQkubXNnX2NvbnRyb2xsZW4JPSBzaXplb2YoYnVmZmVyKSwKKwkJCS5tc2dfZmxhZ3MJPSBNU0dfTU9SRSwKKwkJfTsKKworCQlzdmNfc2V0X2Ntc2dfZGF0YShycXN0cCwgY21oKTsKKworCQlpZiAoc29ja19zZW5kbXNnKHNvY2ssICZtc2csIDApIDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCXRhaWxvZmYgPSAoKHVuc2lnbmVkIGxvbmcpeGRyLT50YWlsWzBdLmlvdl9iYXNlKSAmIChQQUdFX1NJWkUtMSk7CisJaGVhZG9mZiA9IDA7CisJbGVuID0gc3ZjX3NlbmRfY29tbW9uKHNvY2ssIHhkciwgcnFzdHAtPnJxX3Jlc3BhZ2VzWzBdLCBoZWFkb2ZmLAorCQkJICAgICAgIHJxc3RwLT5ycV9yZXNwYWdlc1swXSwgdGFpbG9mZik7CisKIG91dDoKIAlkcHJpbnRrKCJzdmM6IHNvY2tldCAlcCBzZW5kdG8oWyVwICVadS4uLiBdLCAlZCkgPSAlZCAoYWRkciAlcylcbiIsCiAJCXN2c2ssIHhkci0+aGVhZFswXS5pb3ZfYmFzZSwgeGRyLT5oZWFkWzBdLmlvdl9sZW4sCkBAIC00MzIsMjkgKzQ1Myw0OSBAQAogfQogCiAvKgorICogU2VlIG5ldC9pcHY2L2lwX3NvY2tnbHVlLmMgOiBpcF9jbXNnX3JlY3ZfcGt0aW5mbworICovCitzdGF0aWMgaW50IHN2Y191ZHBfZ2V0X2Rlc3RfYWRkcmVzczQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJCQkgICAgIHN0cnVjdCBjbXNnaGRyICpjbWgpCit7CisJc3RydWN0IGluX3BrdGluZm8gKnBraSA9IENNU0dfREFUQShjbWgpOworCWlmIChjbWgtPmNtc2dfdHlwZSAhPSBJUF9QS1RJTkZPKQorCQlyZXR1cm4gMDsKKwlycXN0cC0+cnFfZGFkZHIuYWRkci5zX2FkZHIgPSBwa2ktPmlwaV9zcGVjX2RzdC5zX2FkZHI7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBTZWUgbmV0L2lwdjYvZGF0YWdyYW0uYyA6IGRhdGFncmFtX3JlY3ZfY3RsCisgKi8KK3N0YXRpYyBpbnQgc3ZjX3VkcF9nZXRfZGVzdF9hZGRyZXNzNihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICAgc3RydWN0IGNtc2doZHIgKmNtaCkKK3sKKwlzdHJ1Y3QgaW42X3BrdGluZm8gKnBraSA9IENNU0dfREFUQShjbWgpOworCWlmIChjbWgtPmNtc2dfdHlwZSAhPSBJUFY2X1BLVElORk8pCisJCXJldHVybiAwOworCWlwdjZfYWRkcl9jb3B5KCZycXN0cC0+cnFfZGFkZHIuYWRkcjYsICZwa2ktPmlwaTZfYWRkcik7CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBDb3B5IHRoZSBVRFAgZGF0YWdyYW0ncyBkZXN0aW5hdGlvbiBhZGRyZXNzIHRvIHRoZSBycXN0cCBzdHJ1Y3R1cmUuCiAgKiBUaGUgJ2Rlc3RpbmF0aW9uJyBhZGRyZXNzIGluIHRoaXMgY2FzZSBpcyB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUKICAqIHBlZXIgc2VudCB0aGUgZGF0YWdyYW0sIGkuZS4gb3VyIGxvY2FsIGFkZHJlc3MuIEZvciBtdWx0aWhvbWVkCiAgKiBob3N0cywgdGhpcyBjYW4gY2hhbmdlIGZyb20gbXNnIHRvIG1zZy4gTm90ZSB0aGF0IG9ubHkgdGhlIElQCiAgKiBhZGRyZXNzIGNoYW5nZXMsIHRoZSBwb3J0IG51bWJlciBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgogICovCi1zdGF0aWMgdm9pZCBzdmNfdWRwX2dldF9kZXN0X2FkZHJlc3Moc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJCQkgICAgIHN0cnVjdCBjbXNnaGRyICpjbWgpCitzdGF0aWMgaW50IHN2Y191ZHBfZ2V0X2Rlc3RfYWRkcmVzcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICBzdHJ1Y3QgY21zZ2hkciAqY21oKQogewotCXN0cnVjdCBzdmNfc29jayAqc3ZzayA9Ci0JCWNvbnRhaW5lcl9vZihycXN0cC0+cnFfeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KTsKLQlzd2l0Y2ggKHN2c2stPnNrX3NrLT5za19mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6IHsKLQkJc3RydWN0IGluX3BrdGluZm8gKnBraSA9IENNU0dfREFUQShjbWgpOwotCQlycXN0cC0+cnFfZGFkZHIuYWRkci5zX2FkZHIgPSBwa2ktPmlwaV9zcGVjX2RzdC5zX2FkZHI7Ci0JCWJyZWFrOwotCQl9Ci0JY2FzZSBBRl9JTkVUNjogewotCQlzdHJ1Y3QgaW42X3BrdGluZm8gKnBraSA9IENNU0dfREFUQShjbWgpOwotCQlpcHY2X2FkZHJfY29weSgmcnFzdHAtPnJxX2RhZGRyLmFkZHI2LCAmcGtpLT5pcGk2X2FkZHIpOwotCQlicmVhazsKLQkJfQorCXN3aXRjaCAoY21oLT5jbXNnX2xldmVsKSB7CisJY2FzZSBTT0xfSVA6CisJCXJldHVybiBzdmNfdWRwX2dldF9kZXN0X2FkZHJlc3M0KHJxc3RwLCBjbWgpOworCWNhc2UgU09MX0lQVjY6CisJCXJldHVybiBzdmNfdWRwX2dldF9kZXN0X2FkZHJlc3M2KHJxc3RwLCBjbWgpOwogCX0KKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTMxLDE2ICs1NzIsMTUgQEAKIAogCXJxc3RwLT5ycV9wcm90ID0gSVBQUk9UT19VRFA7CiAKLQlpZiAoY21oLT5jbXNnX2xldmVsICE9IElQUFJPVE9fSVAgfHwKLQkgICAgY21oLT5jbXNnX3R5cGUgIT0gSVBfUEtUSU5GTykgeworCWlmICghc3ZjX3VkcF9nZXRfZGVzdF9hZGRyZXNzKHJxc3RwLCBjbWgpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoInJwY3N2YzogcmVjZWl2ZWQgdW5rbm93biBjb250cm9sIG1lc3NhZ2U6IgotCQkJICAgICAgICIlZC8lZFxuIiwKLQkJCSAgICAgICBjbWgtPmNtc2dfbGV2ZWwsIGNtaC0+Y21zZ190eXBlKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkic3ZjOiByZWNlaXZlZCB1bmtub3duIGNvbnRyb2wgbWVzc2FnZSAlZC8lZDsgIgorCQkJCSJkcm9wcGluZyBSUEMgcmVwbHkgZGF0YWdyYW1cbiIsCisJCQkJCWNtaC0+Y21zZ19sZXZlbCwgY21oLT5jbXNnX3R5cGUpOwogCQlza2JfZnJlZV9kYXRhZ3JhbShzdnNrLT5za19zaywgc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQotCXN2Y191ZHBfZ2V0X2Rlc3RfYWRkcmVzcyhycXN0cCwgY21oKTsKIAogCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKIAkJLyogd2UgaGF2ZSB0byBjb3B5ICovCkBAIC02NTEsOCArNjkxLDcgQEAKIAogc3RhdGljIHZvaWQgc3ZjX3VkcF9pbml0KHN0cnVjdCBzdmNfc29jayAqc3Zzaywgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KQogewotCWludCBvbmUgPSAxOwotCW1tX3NlZ21lbnRfdCBvbGRmczsKKwlpbnQgZXJyLCBsZXZlbCwgb3B0bmFtZSwgb25lID0gMTsKIAogCXN2Y194cHJ0X2luaXQoJnN2Y191ZHBfY2xhc3MsICZzdnNrLT5za194cHJ0LCBzZXJ2KTsKIAljbGVhcl9iaXQoWFBUX0NBQ0hFX0FVVEgsICZzdnNrLT5za194cHJ0LnhwdF9mbGFncyk7CkBAIC02NzEsMTIgKzcxMCwyMiBAQAogCXNldF9iaXQoWFBUX0RBVEEsICZzdnNrLT5za194cHJ0LnhwdF9mbGFncyk7CiAJc2V0X2JpdChYUFRfQ0hOR0JVRiwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKTsKIAotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7CiAJLyogbWFrZSBzdXJlIHdlIGdldCBkZXN0aW5hdGlvbiBhZGRyZXNzIGluZm8gKi8KLQlzdnNrLT5za19zb2NrLT5vcHMtPnNldHNvY2tvcHQoc3Zzay0+c2tfc29jaywgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywKLQkJCQkgICAgICAgKGNoYXIgX191c2VyICopJm9uZSwgc2l6ZW9mKG9uZSkpOwotCXNldF9mcyhvbGRmcyk7CisJc3dpdGNoIChzdnNrLT5za19zay0+c2tfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlsZXZlbCA9IFNPTF9JUDsKKwkJb3B0bmFtZSA9IElQX1BLVElORk87CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWxldmVsID0gU09MX0lQVjY7CisJCW9wdG5hbWUgPSBJUFY2X1JFQ1ZQS1RJTkZPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJZXJyID0ga2VybmVsX3NldHNvY2tvcHQoc3Zzay0+c2tfc29jaywgbGV2ZWwsIG9wdG5hbWUsCisJCQkJCShjaGFyICopJm9uZSwgc2l6ZW9mKG9uZSkpOworCWRwcmludGsoInN2Yzoga2VybmVsX3NldHNvY2tvcHQgcmV0dXJuZWQgJWRcbiIsIGVycik7CiB9CiAKIC8qCkBAIC04MjYsMjEgKzg3NSwxNSBAQAogfQogCiAvKgotICogUmVjZWl2ZSBkYXRhIGZyb20gYSBUQ1Agc29ja2V0LgorICogUmVjZWl2ZSBkYXRhLgorICogSWYgd2UgaGF2ZW4ndCBnb3R0ZW4gdGhlIHJlY29yZCBsZW5ndGggeWV0LCBnZXQgdGhlIG5leHQgZm91ciBieXRlcy4KKyAqIE90aGVyd2lzZSB0cnkgdG8gZ29iYmxlIHVwIGFzIG11Y2ggYXMgcG9zc2libGUgdXAgdG8gdGhlIGNvbXBsZXRlCisgKiByZWNvcmQgbGVuZ3RoLgogICovCi1zdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKK3N0YXRpYyBpbnQgc3ZjX3RjcF9yZWN2X3JlY29yZChzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2ssIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7Ci0Jc3RydWN0IHN2Y19zb2NrCSpzdnNrID0KLQkJY29udGFpbmVyX29mKHJxc3RwLT5ycV94cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOwogCXN0cnVjdCBzdmNfc2Vydgkqc2VydiA9IHN2c2stPnNrX3hwcnQueHB0X3NlcnZlcjsKLQlpbnQJCWxlbjsKLQlzdHJ1Y3Qga3ZlYyAqdmVjOwotCWludCBwbnVtLCB2bGVuOwotCi0JZHByaW50aygic3ZjOiB0Y3BfcmVjdiAlcCBkYXRhICVkIGNvbm4gJWQgY2xvc2UgJWRcbiIsCi0JCXN2c2ssIHRlc3RfYml0KFhQVF9EQVRBLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpLAotCQl0ZXN0X2JpdChYUFRfQ09OTiwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKSwKLQkJdGVzdF9iaXQoWFBUX0NMT1NFLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpKTsKKwlpbnQgbGVuOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChYUFRfQ0hOR0JVRiwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKSkKIAkJLyogc25kYnVmIG5lZWRzIHRvIGhhdmUgcm9vbSBmb3Igb25lIHJlcXVlc3QKQEAgLTg2MSwxMCArOTA0LDYgQEAKIAogCWNsZWFyX2JpdChYUFRfREFUQSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKTsKIAotCS8qIFJlY2VpdmUgZGF0YS4gSWYgd2UgaGF2ZW4ndCBnb3QgdGhlIHJlY29yZCBsZW5ndGggeWV0LCBnZXQKLQkgKiB0aGUgbmV4dCBmb3VyIGJ5dGVzLiBPdGhlcndpc2UgdHJ5IHRvIGdvYmJsZSB1cCBhcyBtdWNoIGFzCi0JICogcG9zc2libGUgdXAgdG8gdGhlIGNvbXBsZXRlIHJlY29yZCBsZW5ndGguCi0JICovCiAJaWYgKHN2c2stPnNrX3RjcGxlbiA8IHNpemVvZihycGNfZnJhZ2hkcikpIHsKIAkJaW50CQl3YW50ID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAtIHN2c2stPnNrX3RjcGxlbjsKIAkJc3RydWN0IGt2ZWMJaW92OwpAQCAtODc5LDcgKzkxOCw3IEBACiAJCQlkcHJpbnRrKCJzdmM6IHNob3J0IHJlY3Zmcm9tIHdoaWxlIHJlYWRpbmcgcmVjb3JkICIKIAkJCQkibGVuZ3RoICglZCBvZiAlZClcbiIsIGxlbiwgd2FudCk7CiAJCQlzdmNfeHBydF9yZWNlaXZlZCgmc3Zzay0+c2tfeHBydCk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsgLyogcmVjb3JkIGhlYWRlciBub3QgY29tcGxldGUgKi8KKwkJCWdvdG8gZXJyX2FnYWluOyAvKiByZWNvcmQgaGVhZGVyIG5vdCBjb21wbGV0ZSAqLwogCQl9CiAKIAkJc3Zzay0+c2tfcmVjbGVuID0gbnRvaGwoc3Zzay0+c2tfcmVjbGVuKTsKQEAgLTg5NCw2ICs5MzMsNyBAQAogCQkJCQkicGVyIHJlY29yZCBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWdvdG8gZXJyX2RlbGV0ZTsKIAkJfQorCiAJCXN2c2stPnNrX3JlY2xlbiAmPSBSUENfRlJBR01FTlRfU0laRV9NQVNLOwogCQlkcHJpbnRrKCJzdmM6IFRDUCByZWNvcmQsICVkIGJ5dGVzXG4iLCBzdnNrLT5za19yZWNsZW4pOwogCQlpZiAoc3Zzay0+c2tfcmVjbGVuID4gc2Vydi0+c3ZfbWF4X21lc2cpIHsKQEAgLTkxNCwxNyArOTU0LDEyMSBAQAogCQlkcHJpbnRrKCJzdmM6IGluY29tcGxldGUgVENQIHJlY29yZCAoJWQgb2YgJWQpXG4iLAogCQkJbGVuLCBzdnNrLT5za19yZWNsZW4pOwogCQlzdmNfeHBydF9yZWNlaXZlZCgmc3Zzay0+c2tfeHBydCk7Ci0JCXJldHVybiAtRUFHQUlOOwkvKiByZWNvcmQgbm90IGNvbXBsZXRlICovCisJCWdvdG8gZXJyX2FnYWluOwkvKiByZWNvcmQgbm90IGNvbXBsZXRlICovCiAJfQogCWxlbiA9IHN2c2stPnNrX3JlY2xlbjsKIAlzZXRfYml0KFhQVF9EQVRBLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpOwogCisJcmV0dXJuIGxlbjsKKyBlcnJvcjoKKwlpZiAobGVuID09IC1FQUdBSU4pIHsKKwkJZHByaW50aygiUlBDOiBUQ1AgcmVjdl9yZWNvcmQgZ290IEVBR0FJTlxuIik7CisJCXN2Y194cHJ0X3JlY2VpdmVkKCZzdnNrLT5za194cHJ0KTsKKwl9CisJcmV0dXJuIGxlbjsKKyBlcnJfZGVsZXRlOgorCXNldF9iaXQoWFBUX0NMT1NFLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpOworIGVycl9hZ2FpbjoKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworc3RhdGljIGludCBzdmNfcHJvY2Vzc19jYWxsZGlyKHN0cnVjdCBzdmNfc29jayAqc3Zzaywgc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJCSAgICAgICBzdHJ1Y3QgcnBjX3Jxc3QgKipyZXFwcCwgc3RydWN0IGt2ZWMgKnZlYykKK3sKKwlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IE5VTEw7CisJdTMyICpwOworCXUzMiB4aWQ7CisJdTMyIGNhbGxkaXI7CisJaW50IGxlbjsKKworCWxlbiA9IHN2Y19yZWN2ZnJvbShycXN0cCwgdmVjLCAxLCA4KTsKKwlpZiAobGVuIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXAgPSAodTMyICopcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9iYXNlOworCXhpZCA9ICpwKys7CisJY2FsbGRpciA9ICpwOworCisJaWYgKGNhbGxkaXIgPT0gMCkgeworCQkvKiBSRVFVRVNUIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlICovCisJCXZlY1swXSA9IHJxc3RwLT5ycV9hcmcuaGVhZFswXTsKKwl9IGVsc2UgeworCQkvKiBSRVBMWSAqLworCQlpZiAoc3Zzay0+c2tfYmNfeHBydCkKKwkJCXJlcSA9IHhwcnRfbG9va3VwX3Jxc3Qoc3Zzay0+c2tfYmNfeHBydCwgeGlkKTsKKworCQlpZiAoIXJlcSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJIiVzOiBHb3QgdW5yZWNvZ25pemVkIHJlcGx5OiAiCisJCQkJImNhbGxkaXIgMHgleCBza19iY194cHJ0ICVwIHhpZCAlMDh4XG4iLAorCQkJCV9fZnVuY19fLCBudG9obChjYWxsZGlyKSwKKwkJCQlzdnNrLT5za19iY194cHJ0LCB4aWQpOworCQkJdmVjWzBdID0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdOworCQkJZ290byBvdXQ7CisJCX0KKworCQltZW1jcHkoJnJlcS0+cnFfcHJpdmF0ZV9idWYsICZyZXEtPnJxX3Jjdl9idWYsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHhkcl9idWYpKTsKKwkJLyogY29weSB0aGUgeGlkIGFuZCBjYWxsIGRpcmVjdGlvbiAqLworCQltZW1jcHkocmVxLT5ycV9wcml2YXRlX2J1Zi5oZWFkWzBdLmlvdl9iYXNlLAorCQkgICAgICAgcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9iYXNlLCA4KTsKKwkJdmVjWzBdID0gcmVxLT5ycV9wcml2YXRlX2J1Zi5oZWFkWzBdOworCX0KKyBvdXQ6CisJdmVjWzBdLmlvdl9iYXNlICs9IDg7CisJdmVjWzBdLmlvdl9sZW4gLT0gODsKKwlsZW4gPSBzdnNrLT5za19yZWNsZW4gLSA4OworIGVycm9yOgorCSpyZXFwcCA9IHJlcTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogUmVjZWl2ZSBkYXRhIGZyb20gYSBUQ1Agc29ja2V0LgorICovCitzdGF0aWMgaW50IHN2Y190Y3BfcmVjdmZyb20oc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKK3sKKwlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2sgPQorCQljb250YWluZXJfb2YocnFzdHAtPnJxX3hwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCk7CisJc3RydWN0IHN2Y19zZXJ2CSpzZXJ2ID0gc3Zzay0+c2tfeHBydC54cHRfc2VydmVyOworCWludAkJbGVuOworCXN0cnVjdCBrdmVjICp2ZWM7CisJaW50IHBudW0sIHZsZW47CisJc3RydWN0IHJwY19ycXN0ICpyZXEgPSBOVUxMOworCisJZHByaW50aygic3ZjOiB0Y3BfcmVjdiAlcCBkYXRhICVkIGNvbm4gJWQgY2xvc2UgJWRcbiIsCisJCXN2c2ssIHRlc3RfYml0KFhQVF9EQVRBLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpLAorCQl0ZXN0X2JpdChYUFRfQ09OTiwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKSwKKwkJdGVzdF9iaXQoWFBUX0NMT1NFLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpKTsKKworCWxlbiA9IHN2Y190Y3BfcmVjdl9yZWNvcmQoc3ZzaywgcnFzdHApOworCWlmIChsZW4gPCAwKQorCQlnb3RvIGVycm9yOworCiAJdmVjID0gcnFzdHAtPnJxX3ZlYzsKIAl2ZWNbMF0gPSBycXN0cC0+cnFfYXJnLmhlYWRbMF07CiAJdmxlbiA9IFBBR0VfU0laRTsKKworCS8qCisJICogV2UgaGF2ZSBlbm91Z2ggZGF0YSBmb3IgdGhlIHdob2xlIHRjcCByZWNvcmQuIExldCdzIHRyeSBhbmQgcmVhZCB0aGUKKwkgKiBmaXJzdCA4IGJ5dGVzIHRvIGdldCB0aGUgeGlkIGFuZCB0aGUgY2FsbCBkaXJlY3Rpb24uIFdlIGNhbiB1c2UgdGhpcworCSAqIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhIGNhbGwgb3IgYSByZXBseSB0byBhIGNhbGxiYWNrLiBJZgorCSAqIHNrX3JlY2xlbiBpcyA8IDggKHhpZCBhbmQgY2FsbGRpciksIHRoZW4gdGhpcyBpcyBhIG1hbGZvcm1lZCBwYWNrZXQuCisJICogSW4gdGhhdCBjYXNlLCBkb24ndCBib3RoZXIgd2l0aCB0aGUgY2FsbGRpciBhbmQganVzdCByZWFkIHRoZSBkYXRhLgorCSAqIEl0IHdpbGwgYmUgcmVqZWN0ZWQgaW4gc3ZjX3Byb2Nlc3MuCisJICovCisJaWYgKGxlbiA+PSA4KSB7CisJCWxlbiA9IHN2Y19wcm9jZXNzX2NhbGxkaXIoc3ZzaywgcnFzdHAsICZyZXEsIHZlYyk7CisJCWlmIChsZW4gPCAwKQorCQkJZ290byBlcnJfYWdhaW47CisJCXZsZW4gLT0gODsKKwl9CisKIAlwbnVtID0gMTsKIAl3aGlsZSAodmxlbiA8IGxlbikgewotCQl2ZWNbcG51bV0uaW92X2Jhc2UgPSBwYWdlX2FkZHJlc3MocnFzdHAtPnJxX3BhZ2VzW3BudW1dKTsKKwkJdmVjW3BudW1dLmlvdl9iYXNlID0gKHJlcSkgPworCQkJcGFnZV9hZGRyZXNzKHJlcS0+cnFfcHJpdmF0ZV9idWYucGFnZXNbcG51bSAtIDFdKSA6CisJCQlwYWdlX2FkZHJlc3MocnFzdHAtPnJxX3BhZ2VzW3BudW1dKTsKIAkJdmVjW3BudW1dLmlvdl9sZW4gPSBQQUdFX1NJWkU7CiAJCXBudW0rKzsKIAkJdmxlbiArPSBQQUdFX1NJWkU7CkBAIC05MzQsOCArMTA3OCwxOCBAQAogCS8qIE5vdyByZWNlaXZlIGRhdGEgKi8KIAlsZW4gPSBzdmNfcmVjdmZyb20ocnFzdHAsIHZlYywgcG51bSwgbGVuKTsKIAlpZiAobGVuIDwgMCkKLQkJZ290byBlcnJvcjsKKwkJZ290byBlcnJfYWdhaW47CiAKKwkvKgorCSAqIEFjY291bnQgZm9yIHRoZSA4IGJ5dGVzIHdlIHJlYWQgZWFybGllcgorCSAqLworCWxlbiArPSA4OworCisJaWYgKHJlcSkgeworCQl4cHJ0X2NvbXBsZXRlX3Jxc3QocmVxLT5ycV90YXNrLCBsZW4pOworCQlsZW4gPSAwOworCQlnb3RvIG91dDsKKwl9CiAJZHByaW50aygic3ZjOiBUQ1AgY29tcGxldGUgcmVjb3JkICglZCBieXRlcylcbiIsIGxlbik7CiAJcnFzdHAtPnJxX2FyZy5sZW4gPSBsZW47CiAJcnFzdHAtPnJxX2FyZy5wYWdlX2Jhc2UgPSAwOwpAQCAtOTQ5LDYgKzExMDMsNyBAQAogCXJxc3RwLT5ycV94cHJ0X2N0eHQgICA9IE5VTEw7CiAJcnFzdHAtPnJxX3Byb3QJICAgICAgPSBJUFBST1RPX1RDUDsKIAorb3V0OgogCS8qIFJlc2V0IFRDUCByZWFkIGluZm8gKi8KIAlzdnNrLT5za19yZWNsZW4gPSAwOwogCXN2c2stPnNrX3RjcGxlbiA9IDA7CkBAIC05NjAsMjEgKzExMTUsMTkgQEAKIAogCXJldHVybiBsZW47CiAKLSBlcnJfZGVsZXRlOgotCXNldF9iaXQoWFBUX0NMT1NFLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpOwotCXJldHVybiAtRUFHQUlOOwotCi0gZXJyb3I6CitlcnJfYWdhaW46CiAJaWYgKGxlbiA9PSAtRUFHQUlOKSB7CiAJCWRwcmludGsoIlJQQzogVENQIHJlY3Zmcm9tIGdvdCBFQUdBSU5cbiIpOwogCQlzdmNfeHBydF9yZWNlaXZlZCgmc3Zzay0+c2tfeHBydCk7Ci0JfSBlbHNlIHsKKwkJcmV0dXJuIGxlbjsKKwl9CitlcnJvcjoKKwlpZiAobGVuICE9IC1FQUdBSU4pIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogcmVjdmZyb20gcmV0dXJuZWQgZXJybm8gJWRcbiIsCiAJCSAgICAgICBzdnNrLT5za194cHJ0LnhwdF9zZXJ2ZXItPnN2X25hbWUsIC1sZW4pOwotCQlnb3RvIGVycl9kZWxldGU7CisJCXNldF9iaXQoWFBUX0NMT1NFLCAmc3Zzay0+c2tfeHBydC54cHRfZmxhZ3MpOwogCX0KLQotCXJldHVybiBsZW47CisJcmV0dXJuIC1FQUdBSU47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IGY0MTJhODUuLmZkNDZkNDIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC04MzIsNiArODMyLDExIEBACiAJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgeHBydF9oYXNfdGltZXIoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCXJldHVybiB4cHJ0LT5pZGxlX3RpbWVvdXQgIT0gMDsKK30KKwogLyoqCiAgKiB4cHJ0X3ByZXBhcmVfdHJhbnNtaXQgLSByZXNlcnZlIHRoZSB0cmFuc3BvcnQgYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0CiAgKiBAdGFzazogUlBDIHRhc2sgYWJvdXQgdG8gc2VuZCBhIHJlcXVlc3QKQEAgLTEwMTMsNyArMTAxOCw3IEBACiAJaWYgKCFsaXN0X2VtcHR5KCZyZXEtPnJxX2xpc3QpKQogCQlsaXN0X2RlbCgmcmVxLT5ycV9saXN0KTsKIAl4cHJ0LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwotCWlmIChsaXN0X2VtcHR5KCZ4cHJ0LT5yZWN2KSkKKwlpZiAobGlzdF9lbXB0eSgmeHBydC0+cmVjdikgJiYgeHBydF9oYXNfdGltZXIoeHBydCkpCiAJCW1vZF90aW1lcigmeHBydC0+dGltZXIsCiAJCQkJeHBydC0+bGFzdF91c2VkICsgeHBydC0+aWRsZV90aW1lb3V0KTsKIAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwpAQCAtMTA4Miw4ICsxMDg3LDExIEBACiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIAlJTklUX1dPUksoJnhwcnQtPnRhc2tfY2xlYW51cCwgeHBydF9hdXRvY2xvc2UpOwotCXNldHVwX3RpbWVyKCZ4cHJ0LT50aW1lciwgeHBydF9pbml0X2F1dG9kaXNjb25uZWN0LAotCQkJKHVuc2lnbmVkIGxvbmcpeHBydCk7CisJaWYgKHhwcnRfaGFzX3RpbWVyKHhwcnQpKQorCQlzZXR1cF90aW1lcigmeHBydC0+dGltZXIsIHhwcnRfaW5pdF9hdXRvZGlzY29ubmVjdCwKKwkJCSAgICAodW5zaWduZWQgbG9uZyl4cHJ0KTsKKwllbHNlCisJCWluaXRfdGltZXIoJnhwcnQtPnRpbWVyKTsKIAl4cHJ0LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCXhwcnQtPmN3bmQgPSBSUENfSU5JVENXTkQ7CiAJeHBydC0+YmluZF9pbmRleCA9IDA7CkBAIC0xMTAyLDcgKzExMTAsNiBAQAogCiAJZHByaW50aygiUlBDOiAgICAgICBjcmVhdGVkIHRyYW5zcG9ydCAlcCB3aXRoICV1IHNsb3RzXG4iLCB4cHJ0LAogCQkJeHBydC0+bWF4X3JlcXMpOwotCiAJcmV0dXJuIHhwcnQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCmluZGV4IDUxNTFmOWYuLjBjZjVlOGMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwpAQCAtNzMwLDEyICs3MzAsMTIgQEAKIAkJZ290byBlcnI7CiAKIAltciA9IGliX2FsbG9jX2Zhc3RfcmVnX21yKHhwcnQtPnNjX3BkLCBSUENTVkNfTUFYUEFHRVMpOwotCWlmICghbXIpCisJaWYgKElTX0VSUihtcikpCiAJCWdvdG8gZXJyX2ZyZWVfZnJtcjsKIAogCXBsID0gaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0KHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCiAJCQkJCSBSUENTVkNfTUFYUEFHRVMpOwotCWlmICghcGwpCisJaWYgKElTX0VSUihwbCkpCiAJCWdvdG8gZXJyX2ZyZWVfbXI7CiAKIAlmcm1yLT5tciA9IG1yOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDYyNDM4ZjMuLmJlZTQxNTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnRzb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2lmZGVmIENPTkZJR19ORlNfVjRfMQpAQCAtNDMsNiArNDQsNyBAQAogI2luY2x1ZGUgPG5ldC91ZHAuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKKyNpbmNsdWRlICJzdW5ycGMuaCIKIC8qCiAgKiB4cHJ0c29jayB0dW5hYmxlcwogICovCkBAIC0yMDk4LDYgKzIxMDAsMTM0IEBACiAJCQl4cHJ0LT5zdGF0LmJrbG9nX3UpOwogfQogCisvKgorICogQWxsb2NhdGUgYSBidW5jaCBvZiBwYWdlcyBmb3IgYSBzY3JhdGNoIGJ1ZmZlciBmb3IgdGhlIHJwYyBjb2RlLiBUaGUgcmVhc29uCisgKiB3ZSBhbGxvY2F0ZSBwYWdlcyBpbnN0ZWFkIGRvaW5nIGEga21hbGxvYyBsaWtlIHJwY19tYWxsb2MgaXMgYmVjYXVzZSB3ZSB3YW50CisgKiB0byB1c2UgdGhlIHNlcnZlciBzaWRlIHNlbmQgcm91dGluZXMuCisgKi8KK3ZvaWQgKmJjX21hbGxvYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBycGNfYnVmZmVyICpidWY7CisKKwlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3QgcnBjX2J1ZmZlcikpOworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKworCWJ1ZiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlidWYtPmxlbiA9IFBBR0VfU0laRTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBzcGFjZSBhbGxvY2F0ZWQgaW4gdGhlIGJjX2FsbG9jIHJvdXRpbmUKKyAqLwordm9pZCBiY19mcmVlKHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcnBjX2J1ZmZlciAqYnVmOworCisJaWYgKCFidWZmZXIpCisJCXJldHVybjsKKworCWJ1ZiA9IGNvbnRhaW5lcl9vZihidWZmZXIsIHN0cnVjdCBycGNfYnVmZmVyLCBkYXRhKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKK30KKworLyoKKyAqIFVzZSB0aGUgc3ZjX3NvY2sgdG8gc2VuZCB0aGUgY2FsbGJhY2suIE11c3QgYmUgY2FsbGVkIHdpdGggc3Zzay0+c2tfbXV0ZXgKKyAqIGhlbGQuIEJvcnJvd3MgaGVhdmlseSBmcm9tIHN2Y190Y3Bfc2VuZHRvIGFuZCB4c190Y3Bfc2VuZF9yZXF1ZXN0LgorICovCitzdGF0aWMgaW50IGJjX3NlbmR0byhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCB4ZHJfYnVmICp4YnVmcCA9ICZyZXEtPnJxX3NuZF9idWY7CisJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gcmVxLT5ycV94cHJ0OworCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCA9CisJCQkJY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CisJdW5zaWduZWQgbG9uZyBoZWFkb2ZmOworCXVuc2lnbmVkIGxvbmcgdGFpbG9mZjsKKworCS8qCisJICogU2V0IHVwIHRoZSBycGMgaGVhZGVyIGFuZCByZWNvcmQgbWFya2VyIHN0dWZmCisJICovCisJeHNfZW5jb2RlX3RjcF9yZWNvcmRfbWFya2VyKHhidWZwKTsKKworCXRhaWxvZmYgPSAodW5zaWduZWQgbG9uZyl4YnVmcC0+dGFpbFswXS5pb3ZfYmFzZSAmIH5QQUdFX01BU0s7CisJaGVhZG9mZiA9ICh1bnNpZ25lZCBsb25nKXhidWZwLT5oZWFkWzBdLmlvdl9iYXNlICYgflBBR0VfTUFTSzsKKwlsZW4gPSBzdmNfc2VuZF9jb21tb24oc29jaywgeGJ1ZnAsCisJCQkgICAgICB2aXJ0X3RvX3BhZ2UoeGJ1ZnAtPmhlYWRbMF0uaW92X2Jhc2UpLCBoZWFkb2ZmLAorCQkJICAgICAgeGJ1ZnAtPnRhaWxbMF0uaW92X2Jhc2UsIHRhaWxvZmYpOworCisJaWYgKGxlbiAhPSB4YnVmcC0+bGVuKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiRXJyb3Igc2VuZGluZyBlbnRpcmUgY2FsbGJhY2shXG4iKTsKKwkJbGVuID0gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogVGhlIHNlbmQgcm91dGluZS4gQm9ycm93cyBmcm9tIHN2Y19zZW5kCisgKi8KK3N0YXRpYyBpbnQgYmNfc2VuZF9yZXF1ZXN0KHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2stPnRrX3Jxc3RwOworCXN0cnVjdCBzdmNfeHBydAkqeHBydDsKKwlzdHJ1Y3Qgc3ZjX3NvY2sgICAgICAgICAqc3ZzazsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBsZW47CisKKwlkcHJpbnRrKCJzZW5kaW5nIHJlcXVlc3Qgd2l0aCB4aWQ6ICUwOHhcbiIsIG50b2hsKHJlcS0+cnFfeGlkKSk7CisJLyoKKwkgKiBHZXQgdGhlIHNlcnZlciBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FsbGJhY2sgeHBydAorCSAqLworCXhwcnQgPSByZXEtPnJxX3hwcnQtPmJjX3hwcnQ7CisJc3ZzayA9IGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOworCisJLyoKKwkgKiBHcmFiIHRoZSBtdXRleCB0byBzZXJpYWxpemUgZGF0YSBhcyB0aGUgY29ubmVjdGlvbiBpcyBzaGFyZWQKKwkgKiB3aXRoIHRoZSBmb3JlIGNoYW5uZWwKKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJnhwcnQtPnhwdF9tdXRleCkpIHsKKwkJcnBjX3NsZWVwX29uKCZ4cHJ0LT54cHRfYmNfcGVuZGluZywgdGFzaywgTlVMTCk7CisJCWlmICghbXV0ZXhfdHJ5bG9jaygmeHBydC0+eHB0X211dGV4KSkKKwkJCXJldHVybiAtRUFHQUlOOworCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzaygmeHBydC0+eHB0X2JjX3BlbmRpbmcsIHRhc2spOworCX0KKwlpZiAodGVzdF9iaXQoWFBUX0RFQUQsICZ4cHJ0LT54cHRfZmxhZ3MpKQorCQlsZW4gPSAtRU5PVENPTk47CisJZWxzZQorCQlsZW4gPSBiY19zZW5kdG8ocmVxKTsKKwltdXRleF91bmxvY2soJnhwcnQtPnhwdF9tdXRleCk7CisKKwlpZiAobGVuID4gMCkKKwkJbGVuID0gMDsKKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBUaGUgY2xvc2Ugcm91dGluZS4gU2luY2UgdGhpcyBpcyBjbGllbnQgaW5pdGlhdGVkLCB3ZSBkbyBub3RoaW5nCisgKi8KKworc3RhdGljIHZvaWQgYmNfY2xvc2Uoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCXJldHVybjsKK30KKworLyoKKyAqIFRoZSB4cHJ0IGRlc3Ryb3kgcm91dGluZS4gQWdhaW4sIGJlY2F1c2UgdGhpcyBjb25uZWN0aW9uIGlzIGNsaWVudAorICogaW5pdGlhdGVkLCB3ZSBkbyBub3RoaW5nCisgKi8KKworc3RhdGljIHZvaWQgYmNfZGVzdHJveShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJcmV0dXJuOworfQorCiBzdGF0aWMgc3RydWN0IHJwY194cHJ0X29wcyB4c191ZHBfb3BzID0gewogCS5zZXRfYnVmZmVyX3NpemUJPSB4c191ZHBfc2V0X2J1ZmZlcl9zaXplLAogCS5yZXNlcnZlX3hwcnQJCT0geHBydF9yZXNlcnZlX3hwcnRfY29uZywKQEAgLTIxMzQsNiArMjI2NCwyMiBAQAogCS5wcmludF9zdGF0cwkJPSB4c190Y3BfcHJpbnRfc3RhdHMsCiB9OwogCisvKgorICogVGhlIHJwY194cHJ0X29wcyBmb3IgdGhlIHNlcnZlciBiYWNrY2hhbm5lbAorICovCisKK3N0YXRpYyBzdHJ1Y3QgcnBjX3hwcnRfb3BzIGJjX3RjcF9vcHMgPSB7CisJLnJlc2VydmVfeHBydAkJPSB4cHJ0X3Jlc2VydmVfeHBydCwKKwkucmVsZWFzZV94cHJ0CQk9IHhwcnRfcmVsZWFzZV94cHJ0LAorCS5idWZfYWxsb2MJCT0gYmNfbWFsbG9jLAorCS5idWZfZnJlZQkJPSBiY19mcmVlLAorCS5zZW5kX3JlcXVlc3QJCT0gYmNfc2VuZF9yZXF1ZXN0LAorCS5zZXRfcmV0cmFuc190aW1lb3V0CT0geHBydF9zZXRfcmV0cmFuc190aW1lb3V0X2RlZiwKKwkuY2xvc2UJCQk9IGJjX2Nsb3NlLAorCS5kZXN0cm95CQk9IGJjX2Rlc3Ryb3ksCisJLnByaW50X3N0YXRzCQk9IHhzX3RjcF9wcmludF9zdGF0cywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcnBjX3hwcnQgKnhzX3NldHVwX3hwcnQoc3RydWN0IHhwcnRfY3JlYXRlICphcmdzLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBzbG90X3RhYmxlX3NpemUpCiB7CkBAIC0yMzIyLDExICsyNDY4LDkzIEBACiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKKy8qKgorICogeHNfc2V0dXBfYmNfdGNwIC0gU2V0IHVwIHRyYW5zcG9ydCB0byB1c2UgYSBUQ1AgYmFja2NoYW5uZWwgc29ja2V0CisgKiBAYXJnczogcnBjIHRyYW5zcG9ydCBjcmVhdGlvbiBhcmd1bWVudHMKKyAqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcnBjX3hwcnQgKnhzX3NldHVwX2JjX3RjcChzdHJ1Y3QgeHBydF9jcmVhdGUgKmFyZ3MpCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gYXJncy0+ZHN0YWRkcjsKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0OworCXN0cnVjdCBzdmNfc29jayAqYmNfc29jazsKKworCWlmICghYXJncy0+YmNfeHBydCkKKwkJRVJSX1BUUigtRUlOVkFMKTsKKworCXhwcnQgPSB4c19zZXR1cF94cHJ0KGFyZ3MsIHhwcnRfdGNwX3Nsb3RfdGFibGVfZW50cmllcyk7CisJaWYgKElTX0VSUih4cHJ0KSkKKwkJcmV0dXJuIHhwcnQ7CisJdHJhbnNwb3J0ID0gY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOworCisJeHBydC0+cHJvdCA9IElQUFJPVE9fVENQOworCXhwcnQtPnRzaF9zaXplID0gc2l6ZW9mKHJwY19mcmFnaGRyKSAvIHNpemVvZih1MzIpOworCXhwcnQtPm1heF9wYXlsb2FkID0gUlBDX01BWF9GUkFHTUVOVF9TSVpFOworCXhwcnQtPnRpbWVvdXQgPSAmeHNfdGNwX2RlZmF1bHRfdGltZW91dDsKKworCS8qIGJhY2tjaGFubmVsICovCisJeHBydF9zZXRfYm91bmQoeHBydCk7CisJeHBydC0+YmluZF90aW1lb3V0ID0gMDsKKwl4cHJ0LT5jb25uZWN0X3RpbWVvdXQgPSAwOworCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPSAwOworCXhwcnQtPmlkbGVfdGltZW91dCA9IDA7CisKKwkvKgorCSAqIFRoZSBiYWNrY2hhbm5lbCB1c2VzIHRoZSBzYW1lIHNvY2tldCBjb25uZWN0aW9uIGFzIHRoZQorCSAqIGZvcmVjaGFubmVsCisJICovCisJeHBydC0+YmNfeHBydCA9IGFyZ3MtPmJjX3hwcnQ7CisJYmNfc29jayA9IGNvbnRhaW5lcl9vZihhcmdzLT5iY194cHJ0LCBzdHJ1Y3Qgc3ZjX3NvY2ssIHNrX3hwcnQpOworCWJjX3NvY2stPnNrX2JjX3hwcnQgPSB4cHJ0OworCXRyYW5zcG9ydC0+c29jayA9IGJjX3NvY2stPnNrX3NvY2s7CisJdHJhbnNwb3J0LT5pbmV0ID0gYmNfc29jay0+c2tfc2s7CisKKwl4cHJ0LT5vcHMgPSAmYmNfdGNwX29wczsKKworCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQl4c19mb3JtYXRfcGVlcl9hZGRyZXNzZXMoeHBydCwgInRjcCIsCisJCQkJCSBSUENCSU5EX05FVElEX1RDUCk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXhzX2Zvcm1hdF9wZWVyX2FkZHJlc3Nlcyh4cHJ0LCAidGNwIiwKKwkJCQkgICBSUENCSU5EX05FVElEX1RDUDYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrZnJlZSh4cHJ0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBRk5PU1VQUE9SVCk7CisJfQorCisJaWYgKHhwcnRfYm91bmQoeHBydCkpCisJCWRwcmludGsoIlJQQzogICAgICAgc2V0IHVwIHhwcnQgdG8gJXMgKHBvcnQgJXMpIHZpYSAlc1xuIiwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0sCisJCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdLAorCQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QUk9UT10pOworCWVsc2UKKwkJZHByaW50aygiUlBDOiAgICAgICBzZXQgdXAgeHBydCB0byAlcyAoYXV0b2JpbmQpIHZpYSAlc1xuIiwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0sCisJCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BST1RPXSk7CisKKwkvKgorCSAqIFNpbmNlIHdlIGRvbid0IHdhbnQgY29ubmVjdGlvbnMgZm9yIHRoZSBiYWNrY2hhbm5lbCwgd2Ugc2V0CisJICogdGhlIHhwcnQgc3RhdHVzIHRvIGNvbm5lY3RlZAorCSAqLworCXhwcnRfc2V0X2Nvbm5lY3RlZCh4cHJ0KTsKKworCisJaWYgKHRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKKwkJcmV0dXJuIHhwcnQ7CisJa2ZyZWUoeHBydC0+c2xvdCk7CisJa2ZyZWUoeHBydCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgeHBydF9jbGFzcwl4c191ZHBfdHJhbnNwb3J0ID0gewogCS5saXN0CQk9IExJU1RfSEVBRF9JTklUKHhzX3VkcF90cmFuc3BvcnQubGlzdCksCiAJLm5hbWUJCT0gInVkcCIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5pZGVudAkJPSBJUFBST1RPX1VEUCwKKwkuaWRlbnQJCT0gWFBSVF9UUkFOU1BPUlRfVURQLAogCS5zZXR1cAkJPSB4c19zZXR1cF91ZHAsCiB9OwogCkBAIC0yMzM0LDEwICsyNTYyLDE4IEBACiAJLmxpc3QJCT0gTElTVF9IRUFEX0lOSVQoeHNfdGNwX3RyYW5zcG9ydC5saXN0KSwKIAkubmFtZQkJPSAidGNwIiwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmlkZW50CQk9IElQUFJPVE9fVENQLAorCS5pZGVudAkJPSBYUFJUX1RSQU5TUE9SVF9UQ1AsCiAJLnNldHVwCQk9IHhzX3NldHVwX3RjcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgeHBydF9jbGFzcwl4c19iY190Y3BfdHJhbnNwb3J0ID0geworCS5saXN0CQk9IExJU1RfSEVBRF9JTklUKHhzX2JjX3RjcF90cmFuc3BvcnQubGlzdCksCisJLm5hbWUJCT0gInRjcCBORlN2NC4xIGJhY2tjaGFubmVsIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlkZW50CQk9IFhQUlRfVFJBTlNQT1JUX0JDX1RDUCwKKwkuc2V0dXAJCT0geHNfc2V0dXBfYmNfdGNwLAorfTsKKwogLyoqCiAgKiBpbml0X3NvY2tldF94cHJ0IC0gc2V0IHVwIHhwcnRzb2NrJ3Mgc3lzY3RscywgcmVnaXN0ZXIgd2l0aCBSUEMgY2xpZW50CiAgKgpAQCAtMjM1MSw2ICsyNTg3LDcgQEAKIAogCXhwcnRfcmVnaXN0ZXJfdHJhbnNwb3J0KCZ4c191ZHBfdHJhbnNwb3J0KTsKIAl4cHJ0X3JlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfdGNwX3RyYW5zcG9ydCk7CisJeHBydF9yZWdpc3Rlcl90cmFuc3BvcnQoJnhzX2JjX3RjcF90cmFuc3BvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzcwLDYgKzI2MDcsNyBAQAogCiAJeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfdWRwX3RyYW5zcG9ydCk7CiAJeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfdGNwX3RyYW5zcG9ydCk7CisJeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmeHNfYmNfdGNwX3RyYW5zcG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQgcGFyYW1fc2V0X3VpbnRfbWlubWF4KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCmluZGV4IDQyOWRkMDYuLjU2MWE0NWMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC04MzQsNyArODM0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHJkZXYtPm9wcy0+c2V0X3R4X3Bvd2VyKHdkZXYtPndpcGh5LCB0eXBlLCBkYm0pOzsKKwlyZXR1cm4gcmRldi0+b3BzLT5zZXRfdHhfcG93ZXIod2Rldi0+d2lwaHksIHR5cGUsIGRibSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd3R4cG93ZXIpOwogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0tjb25maWcgYi9zYW1wbGVzL0tjb25maWcKaW5kZXggNDI4YjA2NS4uYjkyYmRlMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9LY29uZmlnCisrKyBiL3NhbXBsZXMvS2NvbmZpZwpAQCAtNywxMiArNyw2IEBACiAKIGlmIFNBTVBMRVMKIAotY29uZmlnIFNBTVBMRV9NQVJLRVJTCi0JdHJpc3RhdGUgIkJ1aWxkIG1hcmtlcnMgZXhhbXBsZXMgLS0gbG9hZGFibGUgbW9kdWxlcyBvbmx5IgotCWRlcGVuZHMgb24gTUFSS0VSUyAmJiBtCi0JaGVscAotCSAgVGhpcyBidWlsZCBtYXJrZXJzIGV4YW1wbGUgbW9kdWxlcy4KLQogY29uZmlnIFNBTVBMRV9UUkFDRVBPSU5UUwogCXRyaXN0YXRlICJCdWlsZCB0cmFjZXBvaW50cyBleGFtcGxlcyAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCiAJZGVwZW5kcyBvbiBUUkFDRVBPSU5UUyAmJiBtCmRpZmYgLS1naXQgYS9zYW1wbGVzL01ha2VmaWxlIGIvc2FtcGxlcy9NYWtlZmlsZQppbmRleCAxM2U0YjQ3Li40MzM0M2EwIDEwMDY0NAotLS0gYS9zYW1wbGVzL01ha2VmaWxlCisrKyBiL3NhbXBsZXMvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACiAjIE1ha2VmaWxlIGZvciBMaW51eCBzYW1wbGVzIGNvZGUKIAotb2JqLSQoQ09ORklHX1NBTVBMRVMpCSs9IG1hcmtlcnMvIGtvYmplY3QvIGtwcm9iZXMvIHRyYWNlcG9pbnRzLyB0cmFjZV9ldmVudHMvCitvYmotJChDT05GSUdfU0FNUExFUykJKz0ga29iamVjdC8ga3Byb2Jlcy8gdHJhY2Vwb2ludHMvIHRyYWNlX2V2ZW50cy8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbWFya2Vycy9NYWtlZmlsZSBiL3NhbXBsZXMvbWFya2Vycy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3MjMxMi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL21hcmtlcnMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgYnVpbGRzIHRoZSBrcHJvYmVzIGV4YW1wbGUga2VybmVsIG1vZHVsZXM7Ci0jIHRoZW4gdG8gdXNlIG9uZSAoYXMgcm9vdCk6ICBpbnNtb2QgPG1vZHVsZV9uYW1lLmtvPgotCi1vYmotJChDT05GSUdfU0FNUExFX01BUktFUlMpICs9IHByb2JlLWV4YW1wbGUubyBtYXJrZXItZXhhbXBsZS5vCmRpZmYgLS1naXQgYS9zYW1wbGVzL21hcmtlcnMvbWFya2VyLWV4YW1wbGUuYyBiL3NhbXBsZXMvbWFya2Vycy9tYXJrZXItZXhhbXBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWNkOWMwLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbWFya2Vycy9tYXJrZXItZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyogbWFya2VyLWV4YW1wbGUuYwotICoKLSAqIEV4ZWN1dGVzIGEgbWFya2VyIHdoZW4gL3Byb2MvbWFya2VyLWV4YW1wbGUgaXMgb3BlbmVkLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNyBNYXRoaWV1IERlc25veWVycyA8bWF0aGlldS5kZXNub3llcnNAcG9seW10bC5jYT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgotICogU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0KLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGVudHJ5X2V4YW1wbGU7Ci0KLXN0YXRpYyBpbnQgbXlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpbnQgaTsKLQotCXRyYWNlX21hcmsoc3Vic3lzdGVtX2V2ZW50LCAiaW50ZWdlciAlZCBzdHJpbmcgJXMiLCAxMjMsCi0JCSJleGFtcGxlIHN0cmluZyIpOwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQl0cmFjZV9tYXJrKHN1YnN5c3RlbV9ldmVudGIsIE1BUktfTk9BUkdTKTsKLQlyZXR1cm4gLUVQRVJNOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXJrX29wcyA9IHsKLQkub3BlbiA9IG15X29wZW4sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBleGFtcGxlX2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9BTEVSVCAiZXhhbXBsZSBpbml0XG4iKTsKLQlwZW50cnlfZXhhbXBsZSA9IHByb2NfY3JlYXRlKCJtYXJrZXItZXhhbXBsZSIsIDA0NDQsIE5VTEwsICZtYXJrX29wcyk7Ci0JaWYgKCFwZW50cnlfZXhhbXBsZSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4YW1wbGVfZXhpdCh2b2lkKQotewotCXByaW50ayhLRVJOX0FMRVJUICJleGFtcGxlIGV4aXRcbiIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJtYXJrZXItZXhhbXBsZSIsIE5VTEwpOwotfQotCi1tb2R1bGVfaW5pdChleGFtcGxlX2luaXQpCi1tb2R1bGVfZXhpdChleGFtcGxlX2V4aXQpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1hcmtlciBleGFtcGxlIik7CmRpZmYgLS1naXQgYS9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jIGIvc2FtcGxlcy9tYXJrZXJzL3Byb2JlLWV4YW1wbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRmYjNiMy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyogcHJvYmUtZXhhbXBsZS5jCi0gKgotICogQ29ubmVjdHMgdHdvIGZ1bmN0aW9ucyB0byBtYXJrZXIgY2FsbCBzaXRlcy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcgTWF0aGlldSBEZXNub3llcnMgPG1hdGhpZXUuZGVzbm95ZXJzQHBvbHltdGwuY2E+Ci0gKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KLSAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1zdHJ1Y3QgcHJvYmVfZGF0YSB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBjaGFyICpmb3JtYXQ7Ci0JbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlX2Z1bmM7Ci19OwotCi12b2lkIHByb2JlX3N1YnN5c3RlbV9ldmVudCh2b2lkICpwcm9iZV9kYXRhLCB2b2lkICpjYWxsX2RhdGEsCi0JY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0ICphcmdzKQotewotCS8qIERlY2xhcmUgYXJncyAqLwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQljb25zdCBjaGFyICpteXN0cjsKLQotCS8qIEFzc2lnbiBhcmdzICovCi0JdmFsdWUgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZih2YWx1ZSkpOwotCW15c3RyID0gdmFfYXJnKCphcmdzLCB0eXBlb2YobXlzdHIpKTsKLQotCS8qIENhbGwgcHJpbnRrICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiVmFsdWUgJXUsIHN0cmluZyAlc1xuIiwgdmFsdWUsIG15c3RyKTsKLQotCS8qIG9yIGNvdW50LCBjaGVjayByaWdodHMsIHNlcmlhbGl6ZSBkYXRhIGluIGEgYnVmZmVyICovCi19Ci0KLWF0b21pY190IGV2ZW50Yl9jb3VudCA9IEFUT01JQ19JTklUKDApOwotCi12b2lkIHByb2JlX3N1YnN5c3RlbV9ldmVudGIodm9pZCAqcHJvYmVfZGF0YSwgdm9pZCAqY2FsbF9kYXRhLAotCWNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCAqYXJncykKLXsKLQkvKiBJbmNyZW1lbnQgY291bnRlciAqLwotCWF0b21pY19pbmMoJmV2ZW50Yl9jb3VudCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHJvYmVfZGF0YSBwcm9iZV9hcnJheVtdID0KLXsKLQl7CS5uYW1lID0gInN1YnN5c3RlbV9ldmVudCIsCi0JCS5mb3JtYXQgPSAiaW50ZWdlciAlZCBzdHJpbmcgJXMiLAotCQkucHJvYmVfZnVuYyA9IHByb2JlX3N1YnN5c3RlbV9ldmVudCB9LAotCXsJLm5hbWUgPSAic3Vic3lzdGVtX2V2ZW50YiIsCi0JCS5mb3JtYXQgPSBNQVJLX05PQVJHUywKLQkJLnByb2JlX2Z1bmMgPSBwcm9iZV9zdWJzeXN0ZW1fZXZlbnRiIH0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwcm9iZV9pbml0KHZvaWQpCi17Ci0JaW50IHJlc3VsdDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2JlX2FycmF5KTsgaSsrKSB7Ci0JCXJlc3VsdCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcihwcm9iZV9hcnJheVtpXS5uYW1lLAotCQkJCXByb2JlX2FycmF5W2ldLmZvcm1hdCwKLQkJCQlwcm9iZV9hcnJheVtpXS5wcm9iZV9mdW5jLCAmcHJvYmVfYXJyYXlbaV0pOwotCQlpZiAocmVzdWx0KQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIHByb2JlICVzXG4iLAotCQkJCXByb2JlX2FycmF5W2ldLm5hbWUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHByb2JlX2Zpbmkodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2JlX2FycmF5KTsgaSsrKQotCQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcihwcm9iZV9hcnJheVtpXS5uYW1lLAotCQkJcHJvYmVfYXJyYXlbaV0ucHJvYmVfZnVuYywgJnByb2JlX2FycmF5W2ldKTsKLQlwcmludGsoS0VSTl9JTkZPICJOdW1iZXIgb2YgZXZlbnQgYiA6ICV1XG4iLAotCQkJYXRvbWljX3JlYWQoJmV2ZW50Yl9jb3VudCkpOwotCW1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7Ci19Ci0KLW1vZHVsZV9pbml0KHByb2JlX2luaXQpOwotbW9kdWxlX2V4aXQocHJvYmVfZmluaSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNVQlNZU1RFTSBQcm9iZSIpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0IGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CmluZGV4IGY0MDUzZGMuLjhmMTRjODEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAorKysgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKQEAgLTEzLDcgKzEzLDYgQEAKICMgMikgbW9kcG9zdCBpcyB0aGVuIHVzZWQgdG8KICMgMykgIGNyZWF0ZSBvbmUgPG1vZHVsZT4ubW9kLmMgZmlsZSBwci4gbW9kdWxlCiAjIDQpICBjcmVhdGUgb25lIE1vZHVsZS5zeW12ZXJzIGZpbGUgd2l0aCBDUkMgZm9yIGFsbCBleHBvcnRlZCBzeW1ib2xzCi0jIDRhKSBbQ09ORklHX01BUktFUlNdIGNyZWF0ZSBvbmUgTW9kdWxlLm1hcmtlcnMgZmlsZSBsaXN0aW5nIGRlZmluZWQgbWFya2VycwogIyA1KSBjb21waWxlIGFsbCA8bW9kdWxlPi5tb2QuYyBmaWxlcwogIyA2KSBmaW5hbCBsaW5rIG9mIHRoZSBtb2R1bGUgdG8gYSA8bW9kdWxlLmtvPiBmaWxlCiAKQEAgLTU5LDEwICs1OCw2IEBACiAKIGtlcm5lbHN5bWZpbGUgOj0gJChvYmp0cmVlKS9Nb2R1bGUuc3ltdmVycwogbW9kdWxlc3ltZmlsZSA6PSAkKGZpcnN0d29yZCAkKEtCVUlMRF9FWFRNT0QpKS9Nb2R1bGUuc3ltdmVycwota2VybmVsbWFya2Vyc2ZpbGUgOj0gJChvYmp0cmVlKS9Nb2R1bGUubWFya2VycwotbW9kdWxlbWFya2Vyc2ZpbGUgOj0gJChmaXJzdHdvcmQgJChLQlVJTERfRVhUTU9EKSkvTW9kdWxlLm1hcmtlcnMKLQotbWFya2Vyc2ZpbGUgPSAkKGlmICQoS0JVSUxEX0VYVE1PRCksJChtb2R1bGVtYXJrZXJzZmlsZSksJChrZXJuZWxtYXJrZXJzZmlsZSkpCiAKICMgU3RlcCAxKSwgZmluZCBhbGwgbW9kdWxlcyBsaXN0ZWQgaW4gJChNT0RWRVJESVIpLwogX19tb2R1bGVzIDo9ICQoc29ydCAkKHNoZWxsIGdyZXAgLWggJ1wua28nIC9kZXYvbnVsbCAkKHdpbGRjYXJkICQoTU9EVkVSRElSKS8qLm1vZCkpKQpAQCAtODUsOCArODAsNiBAQAogICQoaWYgJChLQlVJTERfRVhUUkFfU1lNQk9MUyksICQocGF0c3Vic3QgJSwgLWUgJSwkKEtCVUlMRF9FWFRSQV9TWU1CT0xTKSkpIFwKICAkKGlmICQoS0JVSUxEX0VYVE1PRCksLW8gJChtb2R1bGVzeW1maWxlKSkgICAgICBcCiAgJChpZiAkKENPTkZJR19ERUJVR19TRUNUSU9OX01JU01BVENIKSwsLVMpICAgICAgXAotICQoaWYgJChDT05GSUdfTUFSS0VSUyksLUsgJChrZXJuZWxtYXJrZXJzZmlsZSkpIFwKLSAkKGlmICQoQ09ORklHX01BUktFUlMpLC1NICQobWFya2Vyc2ZpbGUpKQkgXAogICQoaWYgJChLQlVJTERfRVhUTU9EKSQoS0JVSUxEX01PRFBPU1RfV0FSTiksLXcpIFwKICAkKGlmICQoY3Jvc3NfYnVpbGQpLC1jKQogCkBAIC0xMDEsMTcgKzk0LDEyIEBACiAgICAgICBjbWRfa2VybmVsLW1vZCA9ICQobW9kcG9zdCkgJEAKIAogdm1saW51eC5vOiBGT1JDRQotCUBybSAtZnIgJChrZXJuZWxtYXJrZXJzZmlsZSkKIAkkKGNhbGwgY21kLGtlcm5lbC1tb2QpCiAKICMgRGVjbGFyZSBnZW5lcmF0ZWQgZmlsZXMgYXMgdGFyZ2V0cyBmb3IgbW9kcG9zdAogJChzeW12ZXJmaWxlKTogICAgICAgICBfX21vZHBvc3QgOwogJChtb2R1bGVzOi5rbz0ubW9kLmMpOiBfX21vZHBvc3QgOwogCi1pZmRlZiBDT05GSUdfTUFSS0VSUwotJChtYXJrZXJzZmlsZSk6CSAgICAgICBfX21vZHBvc3QgOwotZW5kaWYKLQogCiAjIFN0ZXAgNSksIGNvbXBpbGUgYWxsICoubW9kLmMgZmlsZXMKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKaW5kZXggNzJjMTUyMC4uOGFiNDQ4NiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYworKysgYi9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCkBAIC0xNiw4ICsxNiw3IEBACiAgKiB0ZWxscyBtYWtlIHdoZW4gdG8gcmVtYWtlIGEgZmlsZS4KICAqCiAgKiBUbyB1c2UgdGhpcyBsaXN0IGFzLWlzIGhvd2V2ZXIgaGFzIHRoZSBkcmF3YmFjayB0aGF0IHZpcnR1YWxseQotICogZXZlcnkgZmlsZSBpbiB0aGUga2VybmVsIGluY2x1ZGVzIDxsaW51eC9jb25maWcuaD4gd2hpY2ggdGhlbiBhZ2FpbgotICogaW5jbHVkZXMgPGxpbnV4L2F1dG9jb25mLmg+CisgKiBldmVyeSBmaWxlIGluIHRoZSBrZXJuZWwgaW5jbHVkZXMgPGxpbnV4L2F1dG9jb25mLmg+LgogICoKICAqIElmIHRoZSB1c2VyIHJlLXJ1bnMgbWFrZSAqY29uZmlnLCBsaW51eC9hdXRvY29uZi5oIHdpbGwgYmUKICAqIHJlZ2VuZXJhdGVkLiAgbWFrZSBub3RpY2VzIHRoYXQgYW5kIHdpbGwgcmVidWlsZCBldmVyeSBmaWxlIHdoaWNoCkBAIC0xMjYsNyArMTI1LDYgQEAKIGNoYXIgKmNtZGxpbmU7CiAKIHZvaWQgdXNhZ2Uodm9pZCkKLQogewogCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGZpeGRlcCA8ZGVwZmlsZT4gPHRhcmdldD4gPGNtZGxpbmU+XG4iKTsKIAlleGl0KDEpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IDJkNWVjZTcuLjg3YmJiOGIgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTEwLDcgKzEwLDcgQEAKIG15ICRQID0gJDA7CiAkUCA9fiBzQC4qL0BAZzsKIAotbXkgJFYgPSAnMC4yOCc7CitteSAkViA9ICcwLjI5JzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMjgsNiArMjgsNDEgQEAKIG15ICRzdW1tYXJ5X2ZpbGUgPSAwOwogbXkgJHJvb3Q7CiBteSAlZGVidWc7CitteSAkaGVscCA9IDA7CisKK3N1YiBoZWxwIHsKKwlteSAoJGV4aXRjb2RlKSA9IEBfOworCisJcHJpbnQgPDwgIkVPTSI7CitVc2FnZTogJFAgW09QVElPTl0uLi4gW0ZJTEVdLi4uCitWZXJzaW9uOiAkVgorCitPcHRpb25zOgorICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICBxdWlldAorICAtLW5vLXRyZWUgICAgICAgICAgICAgICAgICBydW4gd2l0aG91dCBhIGtlcm5lbCB0cmVlCisgIC0tbm8tc2lnbm9mZiAgICAgICAgICAgICAgIGRvIG5vdCBjaGVjayBmb3IgJ1NpZ25lZC1vZmYtYnknIGxpbmUKKyAgLS1wYXRjaCAgICAgICAgICAgICAgICAgICAgdHJlYXQgRklMRSBhcyBwYXRjaGZpbGUgKGRlZmF1bHQpCisgIC0tZW1hY3MgICAgICAgICAgICAgICAgICAgIGVtYWNzIGNvbXBpbGUgd2luZG93IGZvcm1hdAorICAtLXRlcnNlICAgICAgICAgICAgICAgICAgICBvbmUgbGluZSBwZXIgcmVwb3J0CisgIC1mLCAtLWZpbGUgICAgICAgICAgICAgICAgIHRyZWF0IEZJTEUgYXMgcmVndWxhciBzb3VyY2UgZmlsZQorICAtLXN1YmplY3RpdmUsIC0tc3RyaWN0ICAgICBlbmFibGUgbW9yZSBzdWJqZWN0aXZlIHRlc3RzCisgIC0tcm9vdD1QQVRIICAgICAgICAgICAgICAgIFBBVEggdG8gdGhlIGtlcm5lbCB0cmVlIHJvb3QKKyAgLS1uby1zdW1tYXJ5ICAgICAgICAgICAgICAgc3VwcHJlc3MgdGhlIHBlci1maWxlIHN1bW1hcnkKKyAgLS1tYWlsYmFjayAgICAgICAgICAgICAgICAgb25seSBwcm9kdWNlIGEgcmVwb3J0IGluIGNhc2Ugb2Ygd2FybmluZ3MvZXJyb3JzCisgIC0tc3VtbWFyeS1maWxlICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGZpbGVuYW1lIGluIHN1bW1hcnkKKyAgLS1kZWJ1ZyBLRVk9WzB8MV0gICAgICAgICAgdHVybiBvbi9vZmYgZGVidWdnaW5nIG9mIEtFWSwgd2hlcmUgS0VZIGlzIG9uZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzJywgJ3Bvc3NpYmxlJywgJ3R5cGUnLCBhbmQgJ2F0dHInIChkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsbCBvZmYpCisgIC0tdGVzdC1vbmx5PVdPUkQgICAgICAgICAgIHJlcG9ydCBvbmx5IHdhcm5pbmdzL2Vycm9ycyBjb250YWluaW5nIFdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbGx5CisgIC1oLCAtLWhlbHAsIC0tdmVyc2lvbiAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisKK1doZW4gRklMRSBpcyAtIHJlYWQgc3RhbmRhcmQgaW5wdXQuCitFT00KKworCWV4aXQoJGV4aXRjb2RlKTsKK30KKwogR2V0T3B0aW9ucygKIAkncXxxdWlldCsnCT0+IFwkcXVpZXQsCiAJJ3RyZWUhJwkJPT4gXCR0cmVlLApAQCAtMzUsNyArNzAsNyBAQAogCSdwYXRjaCEnCT0+IFwkY2hrX3BhdGNoLAogCSdlbWFjcyEnCT0+IFwkZW1hY3MsCiAJJ3RlcnNlIScJPT4gXCR0ZXJzZSwKLQknZmlsZSEnCQk9PiBcJGZpbGUsCisJJ2Z8ZmlsZSEnCT0+IFwkZmlsZSwKIAknc3ViamVjdGl2ZSEnCT0+IFwkY2hlY2ssCiAJJ3N0cmljdCEnCT0+IFwkY2hlY2ssCiAJJ3Jvb3Q9cycJPT4gXCRyb290LApAQCAtNDUsMjIgKzgwLDE2IEBACiAKIAknZGVidWc9cycJPT4gXCVkZWJ1ZywKIAkndGVzdC1vbmx5PXMnCT0+IFwkdHN0X29ubHksCi0pIG9yIGV4aXQ7CisJJ2h8aGVscCcJPT4gXCRoZWxwLAorCSd2ZXJzaW9uJwk9PiBcJGhlbHAKKykgb3IgaGVscCgxKTsKKworaGVscCgwKSBpZiAoJGhlbHApOwogCiBteSAkZXhpdCA9IDA7CiAKIGlmICgkI0FSR1YgPCAwKSB7Ci0JcHJpbnQgInVzYWdlOiAkUCBbb3B0aW9uc10gcGF0Y2hmaWxlXG4iOwotCXByaW50ICJ2ZXJzaW9uOiAkVlxuIjsKLQlwcmludCAib3B0aW9uczogLXEgICAgICAgICAgICAgICA9PiBxdWlldFxuIjsKLQlwcmludCAiICAgICAgICAgLS1uby10cmVlICAgICAgICA9PiBydW4gd2l0aG91dCBhIGtlcm5lbCB0cmVlXG4iOwotCXByaW50ICIgICAgICAgICAtLXRlcnNlICAgICAgICAgID0+IG9uZSBsaW5lIHBlciByZXBvcnRcbiI7Ci0JcHJpbnQgIiAgICAgICAgIC0tZW1hY3MgICAgICAgICAgPT4gZW1hY3MgY29tcGlsZSB3aW5kb3cgZm9ybWF0XG4iOwotCXByaW50ICIgICAgICAgICAtLWZpbGUgICAgICAgICAgID0+IGNoZWNrIGEgc291cmNlIGZpbGVcbiI7Ci0JcHJpbnQgIiAgICAgICAgIC0tc3RyaWN0ICAgICAgICAgPT4gZW5hYmxlIG1vcmUgc3ViamVjdGl2ZSB0ZXN0c1xuIjsKLQlwcmludCAiICAgICAgICAgLS1yb290ICAgICAgICAgICA9PiBwYXRoIHRvIHRoZSBrZXJuZWwgdHJlZSByb290XG4iOwotCXByaW50ICIgICAgICAgICAtLW5vLXN1bW1hcnkgICAgID0+IHN1cHByZXNzIHRoZSBwZXItZmlsZSBzdW1tYXJ5XG4iOwotCXByaW50ICIgICAgICAgICAtLXN1bW1hcnktZmlsZSAgID0+IGluY2x1ZGUgdGhlIGZpbGVuYW1lIGluIHN1bW1hcnlcbiI7CisJcHJpbnQgIiRQOiBubyBpbnB1dCBmaWxlc1xuIjsKIAlleGl0KDEpOwogfQogCkBAIC0xNTMsNyArMTgyLDcgQEAKIH14OwogCiBvdXIgJHR5cGVUeXBlZGVmcyA9IHFyeyg/eDoKLQkoPzpfXyk/KD86dXxzfGJlfGxlKSg/OlxkfFxkXGQpfAorCSg/Ol9fKT8oPzp1fHN8YmV8bGUpKD86OHwxNnwzMnw2NCl8CiAJYXRvbWljX3QKICl9OwogCkBAIC0zNTYsNiArMzg1LDEzIEBACiAJCQkkb2ZmKys7CiAJCQluZXh0OwogCQl9CisJCWlmICgkc2FuaXRpc2VfcXVvdGUgZXEgJycgJiYgc3Vic3RyKCRsaW5lLCAkb2ZmLCAyKSBlcSAnLy8nKSB7CisJCQkkc2FuaXRpc2VfcXVvdGUgPSAnLy8nOworCisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMiwgJHNhbml0aXNlX3F1b3RlKTsKKwkJCSRvZmYrKzsKKwkJCW5leHQ7CisJCX0KIAogCQkjIEEgXCBpbiBhIHN0cmluZyBtZWFucyBpZ25vcmUgdGhlIG5leHQgY2hhcmFjdGVyLgogCQlpZiAoKCRzYW5pdGlzZV9xdW90ZSBlcSAiJyIgfHwgJHNhbml0aXNlX3F1b3RlIGVxICciJykgJiYKQEAgLTM3OSw2ICs0MTUsOCBAQAogCQkjcHJpbnQgImM8JGM+IFNRPCRzYW5pdGlzZV9xdW90ZT5cbiI7CiAJCWlmICgkb2ZmICE9IDAgJiYgJHNhbml0aXNlX3F1b3RlIGVxICcqLycgJiYgJGMgbmUgIlx0IikgewogCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICQ7KTsKKwkJfSBlbHNpZiAoJG9mZiAhPSAwICYmICRzYW5pdGlzZV9xdW90ZSBlcSAnLy8nICYmICRjIG5lICJcdCIpIHsKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAkOyk7CiAJCX0gZWxzaWYgKCRvZmYgIT0gMCAmJiAkc2FuaXRpc2VfcXVvdGUgJiYgJGMgbmUgIlx0IikgewogCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICdYJyk7CiAJCX0gZWxzZSB7CkBAIC0zODYsNiArNDI0LDEwIEBACiAJCX0KIAl9CiAKKwlpZiAoJHNhbml0aXNlX3F1b3RlIGVxICcvLycpIHsKKwkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJfQorCiAJIyBUaGUgcGF0aG5hbWUgb24gYSAjaW5jbHVkZSBtYXkgYmUgc3Vycm91bmRlZCBieSAnPCcgYW5kICc+Jy4KIAlpZiAoJHJlcyA9fiAvXi5ccypcI1xzKmluY2x1ZGVccytcPCguKilcPi8pIHsKIAkJbXkgJGNsZWFuID0gJ1gnIHggbGVuZ3RoKCQxKTsKQEAgLTEzMzYsNiArMTM3OCwxOCBAQAogCQkJV0FSTigiYWRkaW5nIGEgbGluZSB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKKyMgQmxhY2tmaW46IHVzZSBoaS9sbyBtYWNyb3MKKwkJaWYgKCRyZWFsZmlsZSA9fiBtQGFyY2gvYmxhY2tmaW4vLipcLlMkQCkgeworCQkJaWYgKCRsaW5lID1+IC9cLltsTF1bWzpzcGFjZTpdXSo9LiomW1s6c3BhY2U6XV0qMHhbZkZdW2ZGXVtmRl1bZkZdLykgeworCQkJCW15ICRoZXJldmV0ID0gIiRoZXJlXG4iIC4gY2F0X3ZldCgkbGluZSkgLiAiXG4iOworCQkJCUVSUk9SKCJ1c2UgdGhlIExPKCkgbWFjcm8sIG5vdCAoLi4uICYgMHhGRkZGKVxuIiAuICRoZXJldmV0KTsKKwkJCX0KKwkJCWlmICgkbGluZSA9fiAvXC5baEhdW1s6c3BhY2U6XV0qPS4qPj5bWzpzcGFjZTpdXSoxNi8pIHsKKwkJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuIjsKKwkJCQlFUlJPUigidXNlIHRoZSBISSgpIG1hY3JvLCBub3QgKC4uLiA+PiAxNilcbiIgLiAkaGVyZXZldCk7CisJCQl9CisJCX0KKwogIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBzb3VyY2UgZmlsZSBDIG9yIHBlcmwgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuawogCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xwbCkkLyk7CiAKQEAgLTEzNTUsNiArMTQwOSwxNiBAQAogCQkJV0FSTigiQ1ZTIHN0eWxlIGtleXdvcmQgbWFya2VycywgdGhlc2Ugd2lsbCBfbm90XyBiZSB1cGRhdGVkXG4iLiAkaGVyZWN1cnIpOwogCQl9CiAKKyMgQmxhY2tmaW46IGRvbid0IHVzZSBfX2J1aWx0aW5fYmZpbl9bY3Ndc3luYworCQlpZiAoJGxpbmUgPX4gL19fYnVpbHRpbl9iZmluX2NzeW5jLykgeworCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRsaW5lKSAuICJcbiI7CisJCQlFUlJPUigidXNlIHRoZSBDU1lOQygpIG1hY3JvIGluIGFzbS9ibGFja2Zpbi5oXG4iIC4gJGhlcmV2ZXQpOworCQl9CisJCWlmICgkbGluZSA9fiAvX19idWlsdGluX2JmaW5fc3N5bmMvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJ1c2UgdGhlIFNTWU5DKCkgbWFjcm8gaW4gYXNtL2JsYWNrZmluLmhcbiIgLiAkaGVyZXZldCk7CisJCX0KKwogIyBDaGVjayBmb3IgcG90ZW50aWFsICdiYXJlJyB0eXBlcwogCQlteSAoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCk7CiAJCWlmICgkcmVhbGNudCAmJiAkbGluZSA9fiAvLlxzKlxTLykgewpAQCAtMTM3Miw2ICsxNDM2LDggQEAKIAkJCSMgSWdub3JlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQKIAkJCX0gZWxzaWYgKCRzID1+IC9eLlxzKiRJZGVudFxzKlwoL3MpIHsKIAorCQkJfSBlbHNpZiAoJHMgPX4gL14uXHMqZWxzZVxiL3MpIHsKKwogCQkJIyBkZWNsYXJhdGlvbnMgYWx3YXlzIHN0YXJ0IHdpdGggdHlwZXMKIAkJCX0gZWxzaWYgKCRwcmV2X3ZhbHVlcyBlcSAnRScgJiYgJHMgPX4gL14uXHMqKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPyg/OmNvbnN0XHMrKT8oKD86XHMqJElkZW50KSs/KVxiKD86XHMrJFNwYXJzZSk/XHMqXCoqXHMqKD86JElkZW50fFwoXCpbXlwpXSpcKSkoPzpccyokTW9kaWZpZXIpP1xzKig/Ojt8PXwsfFwoKS9zKSB7CiAJCQkJbXkgJHR5cGUgPSAkMTsKQEAgLTE1MzIsOCArMTU5OCw5IEBACiAJCQkJICAgICRzID1+IC9eXHMqI1xzKj8vIHx8CiAJCQkJICAgICRzID1+IC9eXHMqJElkZW50XHMqOi8pIHsKIAkJCQkJJGNvbnRpbnVhdGlvbiA9ICgkcyA9fiAvXi4qP1xcXG4vKSA/IDEgOiAwOwotCQkJCQkkcyA9fiBzL14uKj9cbi8vOwotCQkJCQkkY29uZF9saW5lcysrOworCQkJCQlpZiAoJHMgPX4gcy9eLio/XG4vLykgeworCQkJCQkJJGNvbmRfbGluZXMrKzsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIApAQCAtMTg5MSw3ICsxOTU4LDcgQEAKIAkJCQkJCSMgQSB1bmFyeSAnKicgbWF5IGJlIGNvbnN0CiAKIAkJCQkJfSBlbHNpZiAoJGN0eCA9fiAvLnhXLykgewotCQkJCQkJRVJST1IoIkFzcGFjZSBwcm9oaWJpdGVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQkJRVJST1IoInNwYWNlIHByb2hpYml0ZWQgYWZ0ZXIgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CiAJCQkJCX0KIAogCQkJCSMgdW5hcnkgKysgYW5kIHVuYXJ5IC0tIGFyZSBhbGxvd2VkIG5vIHNwYWNlIG9uIG9uZSBzaWRlLgpAQCAtMjI0Myw3ICsyMzEwLDggQEAKIAkJCQlERUNMQVJFX1BFUl9DUFV8CiAJCQkJREVGSU5FX1BFUl9DUFV8CiAJCQkJX190eXBlb2ZfX1wofAotCQkJCVwuJElkZW50XHMqPVxzKgorCQkJCVwuJElkZW50XHMqPVxzKnwKKwkJCQleXCJ8XCIkCiAJCQl9eDsKIAkJCSNwcmludCAiUkVTVDwkcmVzdD4gZHN0YXQ8JGRzdGF0PlxuIjsKIAkJCWlmICgkcmVzdCBuZSAnJykgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb25tYWtlaGFzaC5jIGIvc2NyaXB0cy9jb25tYWtlaGFzaC5jCmluZGV4IGUwYzY4OTEuLjI2M2E0NGQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvY29ubWFrZWhhc2guYworKysgYi9zY3JpcHRzL2Nvbm1ha2VoYXNoLmMKQEAgLTI0LDE0ICsyNCwxNCBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVuaWNvZGU7CiAKLXZvaWQgdXNhZ2UoY2hhciAqYXJndjApCitzdGF0aWMgdm9pZCB1c2FnZShjaGFyICphcmd2MCkKIHsKICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogXG4iCiAgICAgICAgICAiICAgICAgICAlcyBjaGFydGFibGUgW2hhc2hzaXplXSBbaGFzaHN0ZXBdIFttYXhoYXNobGV2ZWxdXG4iLCBhcmd2MCk7CiAgIGV4aXQoRVhfVVNBR0UpOwogfQogCi1pbnQgZ2V0dW5pY29kZShjaGFyICoqcDApCitzdGF0aWMgaW50IGdldHVuaWNvZGUoY2hhciAqKnAwKQogewogICBjaGFyICpwID0gKnAwOwogCkBAIC00OSw3ICs0OSw3IEBACiAJCQkJLyogTWFzc2l2ZSBvdmVya2lsbCwgYnV0IHdobyBjYXJlcz8gKi8KIGludCB1bmljb3VudFtNQVhfRk9OVExFTl07CiAKLXZvaWQgYWRkcGFpcihpbnQgZnAsIGludCB1bikKK3N0YXRpYyB2b2lkIGFkZHBhaXIoaW50IGZwLCBpbnQgdW4pCiB7CiAgIGludCBpOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL2dlbmtzeW1zLmMgYi9zY3JpcHRzL2dlbmtzeW1zL2dlbmtzeW1zLmMKaW5kZXggM2E4Mjk3Yi4uYWY2YjgzNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9nZW5rc3ltcy5jCisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJCQlzdHJjbXAoZGVmbi0+c3RyaW5nLCAieyIpID09IDApOwogfQogCi1zdHJ1Y3Qgc3ltYm9sICpfX2FkZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwgZW51bSBzeW1ib2xfdHlwZSB0eXBlLAorc3RhdGljIHN0cnVjdCBzeW1ib2wgKl9fYWRkX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLCBlbnVtIHN5bWJvbF90eXBlIHR5cGUsCiAJCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpkZWZuLCBpbnQgaXNfZXh0ZXJuLAogCQkJICAgIGludCBpc19yZWZlcmVuY2UpCiB7CkBAIC0yNjUsNyArMjY1LDcgQEAKIAlyZXR1cm4gX19hZGRfc3ltYm9sKG5hbWUsIHR5cGUsIGRlZm4sIGlzX2V4dGVybiwgMCk7CiB9CiAKLXN0cnVjdCBzeW1ib2wgKmFkZF9yZWZlcmVuY2Vfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gc3ltYm9sX3R5cGUgdHlwZSwKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICphZGRfcmVmZXJlbmNlX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLCBlbnVtIHN5bWJvbF90eXBlIHR5cGUsCiAJCQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVmbiwgaW50IGlzX2V4dGVybikKIHsKIAlyZXR1cm4gX19hZGRfc3ltYm9sKG5hbWUsIHR5cGUsIGRlZm4sIGlzX2V4dGVybiwgMSk7CkBAIC0zMTMsNyArMzEzLDcgQEAKIAogI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkKIAotc3RydWN0IHN0cmluZ19saXN0ICpyZWFkX25vZGUoRklMRSAqZikKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlYWRfbm9kZShGSUxFICpmKQogewogCWNoYXIgYnVmZmVyWzI1Nl07CiAJc3RydWN0IHN0cmluZ19saXN0IG5vZGUgPSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAppbmRleCAyNzhhNDViLi5jZGI0NGI2IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCisrKyBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKQEAgLTEzLDcgKzEzLDcgQEAKIHVzZSBzdHJpY3Q7CiAKIG15ICRQID0gJDA7Ci1teSAkViA9ICcwLjE3JzsKK215ICRWID0gJzAuMjAnOwogCiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOwogCkBAIC0yOSw2ICsyOSw4IEBACiBteSAkZW1haWxfZ2l0X21heF9tYWludGFpbmVycyA9IDU7CiBteSAkZW1haWxfZ2l0X21pbl9wZXJjZW50ID0gNTsKIG15ICRlbWFpbF9naXRfc2luY2UgPSAiMS15ZWFyLWFnbyI7CitteSAkZW1haWxfZ2l0X2JsYW1lID0gMDsKK215ICRlbWFpbF9yZW1vdmVfZHVwbGljYXRlcyA9IDE7CiBteSAkb3V0cHV0X211bHRpbGluZSA9IDE7CiBteSAkb3V0cHV0X3NlcGFyYXRvciA9ICIsICI7CiBteSAkc2NtID0gMDsKQEAgLTM2LDYgKzM4LDcgQEAKIG15ICRzdWJzeXN0ZW0gPSAwOwogbXkgJHN0YXR1cyA9IDA7CiBteSAkZnJvbV9maWxlbmFtZSA9IDA7CitteSAkcGF0dGVybl9kZXB0aCA9IDA7CiBteSAkdmVyc2lvbiA9IDA7CiBteSAkaGVscCA9IDA7CiAKQEAgLTY4LDYgKzcxLDggQEAKIAkJJ2dpdC1tYXgtbWFpbnRhaW5lcnM9aScgPT4gXCRlbWFpbF9naXRfbWF4X21haW50YWluZXJzLAogCQknZ2l0LW1pbi1wZXJjZW50PWknID0+IFwkZW1haWxfZ2l0X21pbl9wZXJjZW50LAogCQknZ2l0LXNpbmNlPXMnID0+IFwkZW1haWxfZ2l0X3NpbmNlLAorCQknZ2l0LWJsYW1lIScgPT4gXCRlbWFpbF9naXRfYmxhbWUsCisJCSdyZW1vdmUtZHVwbGljYXRlcyEnID0+IFwkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMsCiAJCSdtIScgPT4gXCRlbWFpbF9tYWludGFpbmVyLAogCQknbiEnID0+IFwkZW1haWxfdXNlbmFtZSwKIAkJJ2whJyA9PiBcJGVtYWlsX2xpc3QsCkBAIC03OCw2ICs4Myw3IEBACiAJCSdzdGF0dXMhJyA9PiBcJHN0YXR1cywKIAkJJ3NjbSEnID0+IFwkc2NtLAogCQknd2ViIScgPT4gXCR3ZWIsCisJCSdwYXR0ZXJuLWRlcHRoPWknID0+IFwkcGF0dGVybl9kZXB0aCwKIAkJJ2Z8ZmlsZScgPT4gXCRmcm9tX2ZpbGVuYW1lLAogCQkndnx2ZXJzaW9uJyA9PiBcJHZlcnNpb24sCiAJCSdofGhlbHAnID0+IFwkaGVscCwKQEAgLTEwMSwxNCArMTA3LDE5IEBACiAgICAgZGllICIkUDogYXJndW1lbnQgbWlzc2luZzogcGF0Y2hmaWxlIG9yIC1mIGZpbGUgcGxlYXNlXG4iOwogfQogCitpZiAoJG91dHB1dF9zZXBhcmF0b3IgbmUgIiwgIikgeworICAgICRvdXRwdXRfbXVsdGlsaW5lID0gMDsKK30KKwogbXkgJHNlbGVjdGlvbnMgPSAkZW1haWwgKyAkc2NtICsgJHN0YXR1cyArICRzdWJzeXN0ZW0gKyAkd2ViOwogaWYgKCRzZWxlY3Rpb25zID09IDApIHsKICAgICB1c2FnZSgpOwogICAgIGRpZSAiJFA6ICBNaXNzaW5nIHJlcXVpcmVkIG9wdGlvbjogZW1haWwsIHNjbSwgc3RhdHVzLCBzdWJzeXN0ZW0gb3Igd2ViXG4iOwogfQogCi1pZiAoJGVtYWlsICYmICgkZW1haWxfbWFpbnRhaW5lciArICRlbWFpbF9saXN0ICsgJGVtYWlsX3N1YnNjcmliZXJfbGlzdAotCSAgICAgICArICRlbWFpbF9naXQgKyAkZW1haWxfZ2l0X3Blbmd1aW5fY2hpZWZzKSA9PSAwKSB7CitpZiAoJGVtYWlsICYmCisgICAgKCRlbWFpbF9tYWludGFpbmVyICsgJGVtYWlsX2xpc3QgKyAkZW1haWxfc3Vic2NyaWJlcl9saXN0ICsKKyAgICAgJGVtYWlsX2dpdCArICRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMgKyAkZW1haWxfZ2l0X2JsYW1lKSA9PSAwKSB7CiAgICAgdXNhZ2UoKTsKICAgICBkaWUgIiRQOiBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IDEgZW1haWwgb3B0aW9uXG4iOwogfQpAQCAtMTQ3LDkgKzE1OCwzNiBAQAogfQogY2xvc2UoTUFJTlQpOwogCitteSAlbWFpbG1hcDsKKworaWYgKCRlbWFpbF9yZW1vdmVfZHVwbGljYXRlcykgeworICAgIG9wZW4oTUFJTE1BUCwgIjwke2xrX3BhdGh9Lm1haWxtYXAiKSB8fCB3YXJuICIkUDogQ2FuJ3Qgb3BlbiAubWFpbG1hcFxuIjsKKyAgICB3aGlsZSAoPE1BSUxNQVA+KSB7CisJbXkgJGxpbmUgPSAkXzsKKworCW5leHQgaWYgKCRsaW5lID1+IG0vXlxzKiMvKTsKKwluZXh0IGlmICgkbGluZSA9fiBtL15ccyokLyk7CisKKwlteSAoJG5hbWUsICRhZGRyZXNzKSA9IHBhcnNlX2VtYWlsKCRsaW5lKTsKKwkkbGluZSA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MpOworCisJbmV4dCBpZiAoJGxpbmUgPX4gbS9eXHMqJC8pOworCisJaWYgKGV4aXN0cygkbWFpbG1hcHskbmFtZX0pKSB7CisJICAgIG15ICRvYmogPSAkbWFpbG1hcHskbmFtZX07CisJICAgIHB1c2goQCRvYmosICRhZGRyZXNzKTsKKwl9IGVsc2UgeworCSAgICBteSBAYXJyID0gKCRhZGRyZXNzKTsKKwkgICAgJG1haWxtYXB7JG5hbWV9ID0gXEBhcnI7CisJfQorICAgIH0KKyAgICBjbG9zZShNQUlMTUFQKTsKK30KKwogIyMgdXNlIHRoZSBmaWxlbmFtZXMgb24gdGhlIGNvbW1hbmQgbGluZSBvciBmaW5kIHRoZSBmaWxlbmFtZXMgaW4gdGhlIHBhdGNoZmlsZXMKIAogbXkgQGZpbGVzID0gKCk7CitteSBAcmFuZ2UgPSAoKTsKIAogZm9yZWFjaCBteSAkZmlsZSAoQEFSR1YpIHsKICAgICAjI2lmICRmaWxlIGlzIGEgZGlyZWN0b3J5IGFuZCBpdCBsYWNrcyBhIHRyYWlsaW5nIHNsYXNoLCBhZGQgb25lCkBAIC0xNjIsMTMgKzIwMCwxOSBAQAogCXB1c2goQGZpbGVzLCAkZmlsZSk7CiAgICAgfSBlbHNlIHsKIAlteSAkZmlsZV9jbnQgPSBAZmlsZXM7CisJbXkgJGxhc3RmaWxlOwogCW9wZW4oUEFUQ0gsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7CiAJd2hpbGUgKDxQQVRDSD4pIHsKIAkgICAgaWYgKG0vXlwrXCtcK1xzKyhcUyspLykgewogCQlteSAkZmlsZW5hbWUgPSAkMTsKIAkJJGZpbGVuYW1lID1+IHNAXlteL10qL0BAOwogCQkkZmlsZW5hbWUgPX4gc0BcbkBAOworCQkkbGFzdGZpbGUgPSAkZmlsZW5hbWU7CiAJCXB1c2goQGZpbGVzLCAkZmlsZW5hbWUpOworCSAgICB9IGVsc2lmIChtL15cQFxAIC0oXGQrKSwoXGQrKS8pIHsKKwkJaWYgKCRlbWFpbF9naXRfYmxhbWUpIHsKKwkJICAgIHB1c2goQHJhbmdlLCAiJGxhc3RmaWxlOiQxOiQyIik7CisJCX0KIAkgICAgfQogCX0KIAljbG9zZShQQVRDSCk7CkBAIC0yMDEsNiArMjQ1LDcgQEAKIAkgICAgaWYgKCR0eXBlIGVxICdYJykgewogCQlpZiAoZmlsZV9tYXRjaF9wYXR0ZXJuKCRmaWxlLCAkdmFsdWUpKSB7CiAJCSAgICAkZXhjbHVkZSA9IDE7CisJCSAgICBsYXN0OwogCQl9CiAJICAgIH0KIAl9CkBAIC0yMDgsMzUgKzI1Myw0NSBAQAogCiAgICAgaWYgKCEkZXhjbHVkZSkgewogCW15ICR0dmkgPSAwOworCW15ICVoYXNoOwogCWZvcmVhY2ggbXkgJGxpbmUgKEB0eXBldmFsdWUpIHsKIAkgICAgaWYgKCRsaW5lID1+IG0vXihcQyk6XHMqKC4qKS8pIHsKIAkJbXkgJHR5cGUgPSAkMTsKIAkJbXkgJHZhbHVlID0gJDI7CiAJCWlmICgkdHlwZSBlcSAnRicpIHsKIAkJICAgIGlmIChmaWxlX21hdGNoX3BhdHRlcm4oJGZpbGUsICR2YWx1ZSkpIHsKLQkJCWFkZF9jYXRlZ29yaWVzKCR0dmkpOworCQkJbXkgJHZhbHVlX3BkID0gKCR2YWx1ZSA9fiB0ckAvQEApOworCQkJbXkgJGZpbGVfcGQgPSAoJGZpbGUgID1+IHRyQC9AQCk7CisJCQkkdmFsdWVfcGQrKyBpZiAoc3Vic3RyKCR2YWx1ZSwtMSwxKSBuZSAiLyIpOworCQkJaWYgKCRwYXR0ZXJuX2RlcHRoID09IDAgfHwKKwkJCSAgICAoKCRmaWxlX3BkIC0gJHZhbHVlX3BkKSA8ICRwYXR0ZXJuX2RlcHRoKSkgeworCQkJICAgICRoYXNoeyR0dml9ID0gJHZhbHVlX3BkOworCQkJfQogCQkgICAgfQogCQl9CiAJICAgIH0KIAkgICAgJHR2aSsrOwogCX0KKwlmb3JlYWNoIG15ICRsaW5lIChzb3J0IHskaGFzaHskYn0gPD0+ICRoYXNoeyRhfX0ga2V5cyAlaGFzaCkgeworCSAgICBhZGRfY2F0ZWdvcmllcygkbGluZSk7CisJfQogICAgIH0KIAogICAgIGlmICgkZW1haWwgJiYgJGVtYWlsX2dpdCkgewogCXJlY2VudF9naXRfc2lnbm9mZnMoJGZpbGUpOwogICAgIH0KIAorICAgIGlmICgkZW1haWwgJiYgJGVtYWlsX2dpdF9ibGFtZSkgeworCWdpdF9hc3NpZ25fYmxhbWUoJGZpbGUpOworICAgIH0KIH0KIAogaWYgKCRlbWFpbCkgewogICAgIGZvcmVhY2ggbXkgJGNoaWVmIChAcGVuZ3Vpbl9jaGllZikgewogCWlmICgkY2hpZWYgPX4gbS9eKC4qKTooLiopLykgewogCSAgICBteSAkZW1haWxfYWRkcmVzczsKLQkgICAgaWYgKCRlbWFpbF91c2VuYW1lKSB7Ci0JCSRlbWFpbF9hZGRyZXNzID0gZm9ybWF0X2VtYWlsKCQxLCAkMik7Ci0JICAgIH0gZWxzZSB7Ci0JCSRlbWFpbF9hZGRyZXNzID0gJDI7Ci0JICAgIH0KKworCSAgICAkZW1haWxfYWRkcmVzcyA9IGZvcm1hdF9lbWFpbCgkMSwgJDIpOwogCSAgICBpZiAoJGVtYWlsX2dpdF9wZW5ndWluX2NoaWVmcykgewogCQlwdXNoKEBlbWFpbF90bywgJGVtYWlsX2FkZHJlc3MpOwogCSAgICB9IGVsc2UgewpAQCAtMjU4LDIyICszMTMsMjIgQEAKIH0KIAogaWYgKCRzY20pIHsKLSAgICBAc2NtID0gc29ydF9hbmRfdW5pcShAc2NtKTsKKyAgICBAc2NtID0gdW5pcShAc2NtKTsKICAgICBvdXRwdXQoQHNjbSk7CiB9CiAKIGlmICgkc3RhdHVzKSB7Ci0gICAgQHN0YXR1cyA9IHNvcnRfYW5kX3VuaXEoQHN0YXR1cyk7CisgICAgQHN0YXR1cyA9IHVuaXEoQHN0YXR1cyk7CiAgICAgb3V0cHV0KEBzdGF0dXMpOwogfQogCiBpZiAoJHN1YnN5c3RlbSkgewotICAgIEBzdWJzeXN0ZW0gPSBzb3J0X2FuZF91bmlxKEBzdWJzeXN0ZW0pOworICAgIEBzdWJzeXN0ZW0gPSB1bmlxKEBzdWJzeXN0ZW0pOwogICAgIG91dHB1dChAc3Vic3lzdGVtKTsKIH0KIAogaWYgKCR3ZWIpIHsKLSAgICBAd2ViID0gc29ydF9hbmRfdW5pcShAd2ViKTsKKyAgICBAd2ViID0gdW5pcShAd2ViKTsKICAgICBvdXRwdXQoQHdlYik7CiB9CiAKQEAgLTMxMSwxMCArMzY2LDEyIEBACiAgICAgLS1naXQtbWF4LW1haW50YWluZXJzID0+IG1heGltdW0gbWFpbnRhaW5lcnMgdG8gYWRkIChkZWZhdWx0OiA1KQogICAgIC0tZ2l0LW1pbi1wZXJjZW50ID0+IG1pbmltdW0gcGVyY2VudGFnZSBvZiBjb21taXRzIHJlcXVpcmVkIChkZWZhdWx0OiA1KQogICAgIC0tZ2l0LXNpbmNlID0+IGdpdCBoaXN0b3J5IHRvIHVzZSAoZGVmYXVsdDogMS15ZWFyLWFnbykKKyAgICAtLWdpdC1ibGFtZSA9PiB1c2UgZ2l0IGJsYW1lIHRvIGZpbmQgbW9kaWZpZWQgY29tbWl0cyBmb3IgcGF0Y2ggb3IgZmlsZQogICAgIC0tbSA9PiBpbmNsdWRlIG1haW50YWluZXIocykgaWYgYW55CiAgICAgLS1uID0+IGluY2x1ZGUgbmFtZSAnRnVsbCBOYW1lIDxhZGRyXEBkb21haW4udGxkPicKICAgICAtLWwgPT4gaW5jbHVkZSBsaXN0KHMpIGlmIGFueQogICAgIC0tcyA9PiBpbmNsdWRlIHN1YnNjcmliZXIgb25seSBsaXN0KHMpIGlmIGFueQorICAgIC0tcmVtb3ZlLWR1cGxpY2F0ZXMgPT4gbWluaW1pemUgZHVwbGljYXRlIGVtYWlsIG5hbWVzL2FkZHJlc3NlcwogICAtLXNjbSA9PiBwcmludCBTQ00gdHJlZShzKSBpZiBhbnkKICAgLS1zdGF0dXMgPT4gcHJpbnQgc3RhdHVzIGlmIGFueQogICAtLXN1YnN5c3RlbSA9PiBwcmludCBzdWJzeXN0ZW0gbmFtZSBpZiBhbnkKQEAgLTMyMiwyNCArMzc5LDI4IEBACiAKIE91dHB1dCB0eXBlIG9wdGlvbnM6CiAgIC0tc2VwYXJhdG9yIFssIF0gPT4gc2VwYXJhdG9yIGZvciBtdWx0aXBsZSBlbnRyaWVzIG9uIDEgbGluZQorICAgIHVzaW5nIC0tc2VwYXJhdG9yIGFsc28gc2V0cyAtLW5vbXVsdGlsaW5lIGlmIC0tc2VwYXJhdG9yIGlzIG5vdCBbLCBdCiAgIC0tbXVsdGlsaW5lID0+IHByaW50IDEgZW50cnkgcGVyIGxpbmUKIAotRGVmYXVsdCBvcHRpb25zOgotICBbLS1lbWFpbCAtLWdpdCAtLW0gLS1uIC0tbCAtLW11bHRpbGluZV0KLQogT3RoZXIgb3B0aW9uczoKKyAgLS1wYXR0ZXJuLWRlcHRoID0+IE51bWJlciBvZiBwYXR0ZXJuIGRpcmVjdG9yeSB0cmF2ZXJzYWxzIChkZWZhdWx0OiAwIChhbGwpKQogICAtLXZlcnNpb24gPT4gc2hvdyB2ZXJzaW9uCiAgIC0taGVscCA9PiBzaG93IHRoaXMgaGVscCBpbmZvcm1hdGlvbgogCitEZWZhdWx0IG9wdGlvbnM6CisgIFstLWVtYWlsIC0tZ2l0IC0tbSAtLW4gLS1sIC0tbXVsdGlsaW5lIC0tcGF0dGVybi1kZXB0aD0wIC0tcmVtb3ZlLWR1cGxpY2F0ZXNdCisKIE5vdGVzOgogICBVc2luZyAiLWYgZGlyZWN0b3J5IiBtYXkgZ2l2ZSB1bmV4cGVjdGVkIHJlc3VsdHM6Ci0KLSAgVXNlZCB3aXRoICItLWdpdCIsIGdpdCBzaWduYXRvcnMgZm9yIF9hbGxfIGZpbGVzIGluIGFuZCBiZWxvdwotICAgICBkaXJlY3RvcnkgYXJlIGV4YW1pbmVkIGFzIGdpdCByZWN1cnNlcyBkaXJlY3Rvcmllcy4KLSAgICAgQW55IHNwZWNpZmllZCBYOiAoZXhjbHVkZSkgcGF0dGVybiBtYXRjaGVzIGFyZSBfbm90XyBpZ25vcmVkLgotICBVc2VkIHdpdGggIi0tbm9naXQiLCBkaXJlY3RvcnkgaXMgdXNlZCBhcyBhIHBhdHRlcm4gbWF0Y2gsCi0gICAgIG5vIGluZGl2aWR1YWwgZmlsZSB3aXRoaW4gdGhlIGRpcmVjdG9yeSBvciBzdWJkaXJlY3RvcnkKLSAgICAgaXMgbWF0Y2hlZC4KKyAgICAgIFVzZWQgd2l0aCAiLS1naXQiLCBnaXQgc2lnbmF0b3JzIGZvciBfYWxsXyBmaWxlcyBpbiBhbmQgYmVsb3cKKyAgICAgICAgICBkaXJlY3RvcnkgYXJlIGV4YW1pbmVkIGFzIGdpdCByZWN1cnNlcyBkaXJlY3Rvcmllcy4KKyAgICAgICAgICBBbnkgc3BlY2lmaWVkIFg6IChleGNsdWRlKSBwYXR0ZXJuIG1hdGNoZXMgYXJlIF9ub3RfIGlnbm9yZWQuCisgICAgICBVc2VkIHdpdGggIi0tbm9naXQiLCBkaXJlY3RvcnkgaXMgdXNlZCBhcyBhIHBhdHRlcm4gbWF0Y2gsCisgICAgICAgICBubyBpbmRpdmlkdWFsIGZpbGUgd2l0aGluIHRoZSBkaXJlY3Rvcnkgb3Igc3ViZGlyZWN0b3J5CisgICAgICAgICBpcyBtYXRjaGVkLgorICAgICAgVXNlZCB3aXRoICItLWdpdC1ibGFtZSIsIGRvZXMgbm90IGl0ZXJhdGUgYWxsIGZpbGVzIGluIGRpcmVjdG9yeQorICBVc2luZyAiLS1naXQtYmxhbWUiIGlzIHNsb3cgYW5kIG1heSBhZGQgb2xkIGNvbW1pdHRlcnMgYW5kIGF1dGhvcnMKKyAgICAgIHRoYXQgYXJlIG5vIGxvbmdlciBhY3RpdmUgbWFpbnRhaW5lcnMgdG8gdGhlIG91dHB1dC4KIEVPVAogfQogCkBAIC0zNzAsMzAgKzQzMSwxMDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3ViIGZvcm1hdF9lbWFpbCB7Ci0gICAgbXkgKCRuYW1lLCAkZW1haWwpID0gQF87CitzdWIgcGFyc2VfZW1haWwgeworICAgIG15ICgkZm9ybWF0dGVkX2VtYWlsKSA9IEBfOworCisgICAgbXkgJG5hbWUgPSAiIjsKKyAgICBteSAkYWRkcmVzcyA9ICIiOworCisgICAgaWYgKCRmb3JtYXR0ZWRfZW1haWwgPX4gL14oW148XSspPCguK1xALiopPi4qJC8pIHsKKwkkbmFtZSA9ICQxOworCSRhZGRyZXNzID0gJDI7CisgICAgfSBlbHNpZiAoJGZvcm1hdHRlZF9lbWFpbCA9fiAvXlxzKjwoLitcQFxTKik+LiokLykgeworCSRhZGRyZXNzID0gJDE7CisgICAgfSBlbHNpZiAoJGZvcm1hdHRlZF9lbWFpbCA9fiAvXiguK1xAXFMqKS4qJC8pIHsKKwkkYWRkcmVzcyA9ICQxOworICAgIH0KIAogICAgICRuYW1lID1+IHMvXlxzK3xccyskLy9nOwogICAgICRuYW1lID1+IHMvXlwifFwiJC8vZzsKLSAgICAkZW1haWwgPX4gcy9eXHMrfFxzKyQvL2c7Ci0KLSAgICBteSAkZm9ybWF0dGVkX2VtYWlsID0gIiI7CisgICAgJGFkZHJlc3MgPX4gcy9eXHMrfFxzKyQvL2c7CiAKICAgICBpZiAoJG5hbWUgPX4gL1teYS16MC05IFwuXC1dL2kpIHsgICAgIyNoYXMgIm11c3QgcXVvdGUiIGNoYXJzCiAJJG5hbWUgPX4gcy8oPzwhXFwpIi9cXCIvZzsgICAgICAgIyNlc2NhcGUgcXVvdGVzCi0JJGZvcm1hdHRlZF9lbWFpbCA9ICJcIiR7bmFtZX1cIlwgXDwke2VtYWlsfVw+IjsKLSAgICB9IGVsc2UgewotCSRmb3JtYXR0ZWRfZW1haWwgPSAiJHtuYW1lfSBcPCR7ZW1haWx9XD4iOworCSRuYW1lID0gIlwiJG5hbWVcIiI7CiAgICAgfQorCisgICAgcmV0dXJuICgkbmFtZSwgJGFkZHJlc3MpOworfQorCitzdWIgZm9ybWF0X2VtYWlsIHsKKyAgICBteSAoJG5hbWUsICRhZGRyZXNzKSA9IEBfOworCisgICAgbXkgJGZvcm1hdHRlZF9lbWFpbDsKKworICAgICRuYW1lID1+IHMvXlxzK3xccyskLy9nOworICAgICRuYW1lID1+IHMvXlwifFwiJC8vZzsKKyAgICAkYWRkcmVzcyA9fiBzL15ccyt8XHMrJC8vZzsKKworICAgIGlmICgkbmFtZSA9fiAvW15hLXowLTkgXC5cLV0vaSkgeyAgICAjI2hhcyAibXVzdCBxdW90ZSIgY2hhcnMKKwkkbmFtZSA9fiBzLyg/PCFcXCkiL1xcIi9nOyAgICAgICAjI2VzY2FwZSBxdW90ZXMKKwkkbmFtZSA9ICJcIiRuYW1lXCIiOworICAgIH0KKworICAgIGlmICgkZW1haWxfdXNlbmFtZSkgeworCWlmICgiJG5hbWUiIGVxICIiKSB7CisJICAgICRmb3JtYXR0ZWRfZW1haWwgPSAiJGFkZHJlc3MiOworCX0gZWxzZSB7CisJICAgICRmb3JtYXR0ZWRfZW1haWwgPSAiJG5hbWUgPCR7YWRkcmVzc30+IjsKKwl9CisgICAgfSBlbHNlIHsKKwkkZm9ybWF0dGVkX2VtYWlsID0gJGFkZHJlc3M7CisgICAgfQorCiAgICAgcmV0dXJuICRmb3JtYXR0ZWRfZW1haWw7CiB9CiAKK3N1YiBmaW5kX3N0YXJ0aW5nX2luZGV4IHsKKworICAgIG15ICgkaW5kZXgpID0gQF87CisKKyAgICB3aGlsZSAoJGluZGV4ID4gMCkgeworCW15ICR0diA9ICR0eXBldmFsdWVbJGluZGV4XTsKKwlpZiAoISgkdHYgPX4gbS9eKFxDKTpccyooLiopLykpIHsKKwkgICAgbGFzdDsKKwl9CisJJGluZGV4LS07CisgICAgfQorCisgICAgcmV0dXJuICRpbmRleDsKK30KKworc3ViIGZpbmRfZW5kaW5nX2luZGV4IHsKKyAgICBteSAoJGluZGV4KSA9IEBfOworCisgICAgd2hpbGUgKCRpbmRleCA8IEB0eXBldmFsdWUpIHsKKwlteSAkdHYgPSAkdHlwZXZhbHVlWyRpbmRleF07CisJaWYgKCEoJHR2ID1+IG0vXihcQyk6XHMqKC4qKS8pKSB7CisJICAgIGxhc3Q7CisJfQorCSRpbmRleCsrOworICAgIH0KKworICAgIHJldHVybiAkaW5kZXg7Cit9CisKIHN1YiBhZGRfY2F0ZWdvcmllcyB7CiAgICAgbXkgKCRpbmRleCkgPSBAXzsKIAotICAgICRpbmRleCA9ICRpbmRleCAtIDE7Ci0gICAgd2hpbGUgKCRpbmRleCA+PSAwKSB7Ci0JbXkgJHR2ID0gJHR5cGV2YWx1ZVskaW5kZXhdOworICAgIG15ICRpOworICAgIG15ICRzdGFydCA9IGZpbmRfc3RhcnRpbmdfaW5kZXgoJGluZGV4KTsKKyAgICBteSAkZW5kID0gZmluZF9lbmRpbmdfaW5kZXgoJGluZGV4KTsKKworICAgIHB1c2goQHN1YnN5c3RlbSwgJHR5cGV2YWx1ZVskc3RhcnRdKTsKKworICAgIGZvciAoJGkgPSAkc3RhcnQgKyAxOyAkaSA8ICRlbmQ7ICRpKyspIHsKKwlteSAkdHYgPSAkdHlwZXZhbHVlWyRpXTsKIAlpZiAoJHR2ID1+IG0vXihcQyk6XHMqKC4qKS8pIHsKIAkgICAgbXkgJHB0eXBlID0gJDE7CiAJICAgIG15ICRwdmFsdWUgPSAkMjsKQEAgLTQxNCwxOSArNTQ1LDE5IEBACiAJCSAgICB9CiAJCX0KIAkgICAgfSBlbHNpZiAoJHB0eXBlIGVxICJNIikgewotCQlteSAkcF91c2VkID0gMDsKLQkJaWYgKCRpbmRleCA+PSAwKSB7Ci0JCSAgICBteSAkdHYgPSAkdHlwZXZhbHVlWyRpbmRleCAtIDFdOwotCQkgICAgaWYgKCR0diA9fiBtL14oXEMpOlxzKiguKikvKSB7Ci0JCQlpZiAoJDEgZXEgIlAiKSB7Ci0JCQkgICAgaWYgKCRlbWFpbF91c2VuYW1lKSB7Ci0JCQkJcHVzaF9lbWFpbF9hZGRyZXNzKGZvcm1hdF9lbWFpbCgkMiwgJHB2YWx1ZSkpOwotCQkJCSRwX3VzZWQgPSAxOworCQlteSAoJG5hbWUsICRhZGRyZXNzKSA9IHBhcnNlX2VtYWlsKCRwdmFsdWUpOworCQlpZiAoJG5hbWUgZXEgIiIpIHsKKwkJICAgIGlmICgkaSA+IDApIHsKKwkJCW15ICR0diA9ICR0eXBldmFsdWVbJGkgLSAxXTsKKwkJCWlmICgkdHYgPX4gbS9eKFxDKTpccyooLiopLykgeworCQkJICAgIGlmICgkMSBlcSAiUCIpIHsKKwkJCQkkbmFtZSA9ICQyOworCQkJCSRwdmFsdWUgPSBmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzKTsKIAkJCSAgICB9CiAJCQl9CiAJCSAgICB9CiAJCX0KLQkJaWYgKCEkcF91c2VkKSB7CisJCWlmICgkZW1haWxfbWFpbnRhaW5lcikgewogCQkgICAgcHVzaF9lbWFpbF9hZGRyZXNzZXMoJHB2YWx1ZSk7CiAJCX0KIAkgICAgfSBlbHNpZiAoJHB0eXBlIGVxICJUIikgewpAQCAtNDM2LDMxICs1NjcsNDEgQEAKIAkgICAgfSBlbHNpZiAoJHB0eXBlIGVxICJTIikgewogCQlwdXNoKEBzdGF0dXMsICRwdmFsdWUpOwogCSAgICB9Ci0KLQkgICAgJGluZGV4LS07Ci0JfSBlbHNlIHsKLQkgICAgcHVzaChAc3Vic3lzdGVtLCR0dik7Ci0JICAgICRpbmRleCA9IC0xOwogCX0KICAgICB9CiB9CiAKK215ICVlbWFpbF9oYXNoX25hbWU7CitteSAlZW1haWxfaGFzaF9hZGRyZXNzOworCitzdWIgZW1haWxfaW51c2UgeworICAgIG15ICgkbmFtZSwgJGFkZHJlc3MpID0gQF87CisKKyAgICByZXR1cm4gMSBpZiAoKCRuYW1lIGVxICIiKSAmJiAoJGFkZHJlc3MgZXEgIiIpKTsKKyAgICByZXR1cm4gMSBpZiAoKCRuYW1lIG5lICIiKSAmJiBleGlzdHMoJGVtYWlsX2hhc2hfbmFtZXskbmFtZX0pKTsKKyAgICByZXR1cm4gMSBpZiAoKCRhZGRyZXNzIG5lICIiKSAmJiBleGlzdHMoJGVtYWlsX2hhc2hfYWRkcmVzc3skYWRkcmVzc30pKTsKKworICAgIHJldHVybiAwOworfQorCiBzdWIgcHVzaF9lbWFpbF9hZGRyZXNzIHsKLSAgICBteSAoJGVtYWlsX2FkZHJlc3MpID0gQF87CisgICAgbXkgKCRsaW5lKSA9IEBfOwogCi0gICAgbXkgJGVtYWlsX25hbWUgPSAiIjsKLSAgICBpZiAoJGVtYWlsX2FkZHJlc3MgPX4gbS8oW148XSspPCguKlxALiopPiQvKSB7Ci0JJGVtYWlsX25hbWUgPSAkMTsKLQkkZW1haWxfYWRkcmVzcyA9ICQyOworICAgIG15ICgkbmFtZSwgJGFkZHJlc3MpID0gcGFyc2VfZW1haWwoJGxpbmUpOworCisgICAgaWYgKCRhZGRyZXNzIGVxICIiKSB7CisJcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCRlbWFpbF9tYWludGFpbmVyKSB7Ci0JaWYgKCRlbWFpbF91c2VuYW1lICYmICRlbWFpbF9uYW1lKSB7Ci0JICAgIHB1c2goQGVtYWlsX3RvLCBmb3JtYXRfZW1haWwoJGVtYWlsX25hbWUsICRlbWFpbF9hZGRyZXNzKSk7Ci0JfSBlbHNlIHsKLQkgICAgcHVzaChAZW1haWxfdG8sICRlbWFpbF9hZGRyZXNzKTsKLQl9CisgICAgaWYgKCEkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKKwlwdXNoKEBlbWFpbF90bywgZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcykpOworICAgIH0gZWxzaWYgKCFlbWFpbF9pbnVzZSgkbmFtZSwgJGFkZHJlc3MpKSB7CisJcHVzaChAZW1haWxfdG8sIGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MpKTsKKwkkZW1haWxfaGFzaF9uYW1leyRuYW1lfSsrOworCSRlbWFpbF9oYXNoX2FkZHJlc3N7JGFkZHJlc3N9Kys7CiAgICAgfQorCisgICAgcmV0dXJuIDE7CiB9CiAKIHN1YiBwdXNoX2VtYWlsX2FkZHJlc3NlcyB7CkBAIC00NzYsNyArNjE3LDkgQEAKIAkgICAgcHVzaF9lbWFpbF9hZGRyZXNzKCRlbnRyeSk7CiAJfQogICAgIH0gZWxzZSB7Ci0Jd2FybigiSW52YWxpZCBNQUlOVEFJTkVSUyBhZGRyZXNzOiAnIiAuICRhZGRyZXNzIC4gIidcbiIpOworCWlmICghcHVzaF9lbWFpbF9hZGRyZXNzKCRhZGRyZXNzKSkgeworCSAgICB3YXJuKCJJbnZhbGlkIE1BSU5UQUlORVJTIGFkZHJlc3M6ICciIC4gJGFkZHJlc3MgLiAiJ1xuIik7CisJfQogICAgIH0KIH0KIApAQCAtNDkyLDYgKzYzNSwzMiBAQAogICAgIHJldHVybiAiIjsKIH0KIAorc3ViIG1haWxtYXAgeworICAgIG15IEBsaW5lcyA9IEBfOworICAgIG15ICVoYXNoOworCisgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkbGluZSk7CisJaWYgKCFleGlzdHMoJGhhc2h7JG5hbWV9KSkgeworCSAgICAkaGFzaHskbmFtZX0gPSAkYWRkcmVzczsKKwl9IGVsc2lmICgkYWRkcmVzcyBuZSAkaGFzaHskbmFtZX0pIHsKKwkgICAgJGFkZHJlc3MgPSAkaGFzaHskbmFtZX07CisJICAgICRsaW5lID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcyk7CisJfQorCWlmIChleGlzdHMoJG1haWxtYXB7JG5hbWV9KSkgeworCSAgICBteSAkb2JqID0gJG1haWxtYXB7JG5hbWV9OworCSAgICBmb3JlYWNoIG15ICRtYXBfYWRkcmVzcyAoQCRvYmopIHsKKwkJaWYgKCgkbWFwX2FkZHJlc3MgZXEgJGFkZHJlc3MpICYmCisJCSAgICAoJG1hcF9hZGRyZXNzIG5lICRoYXNoeyRuYW1lfSkpIHsKKwkJICAgICRsaW5lID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkaGFzaHskbmFtZX0pOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuIEBsaW5lczsKK30KKwogc3ViIHJlY2VudF9naXRfc2lnbm9mZnMgewogICAgIG15ICgkZmlsZSkgPSBAXzsKIApAQCAtNTAwLDYgKzY2OSw3IEBACiAgICAgbXkgJG91dHB1dCA9ICIiOwogICAgIG15ICRjb3VudCA9IDA7CiAgICAgbXkgQGxpbmVzID0gKCk7CisgICAgbXkgJWhhc2g7CiAgICAgbXkgJHRvdGFsX3NpZ25fb2ZmczsKIAogICAgIGlmICh3aGljaCgiZ2l0IikgZXEgIiIpIHsKQEAgLTUxMyw1MiArNjgzLDExOSBAQAogICAgIH0KIAogICAgICRjbWQgPSAiZ2l0IGxvZyAtLXNpbmNlPSR7ZW1haWxfZ2l0X3NpbmNlfSAtLSAke2ZpbGV9IjsKLSAgICAkY21kIC49ICIgfCBncmVwIC1FaSBcIl5bLV8gCWEtel0rYnk6LipcXFxALipcJFwiIjsKLSAgICBpZiAoISRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMpIHsKLQkkY21kIC49ICIgfCBncmVwIC1FdiBcIiR7cGVuZ3Vpbl9jaGllZnN9XCIiOwotICAgIH0KLSAgICAkY21kIC49ICIgfCBjdXQgLWYyLSAtZFwiOlwiIjsKLSAgICAkY21kIC49ICIgfCBzb3J0IHwgdW5pcSAtYyB8IHNvcnQgLXJuIjsKIAogICAgICRvdXRwdXQgPSBgJHtjbWR9YDsKICAgICAkb3V0cHV0ID1+IHMvXlxzKi8vZ207CiAKICAgICBAbGluZXMgPSBzcGxpdCgiXG4iLCAkb3V0cHV0KTsKIAotICAgICR0b3RhbF9zaWduX29mZnMgPSAwOworICAgIEBsaW5lcyA9IGdyZXAoL15bLV8gCWEtel0rYnk6LipcQC4qJC9pLCBAbGluZXMpOworICAgIGlmICghJGVtYWlsX2dpdF9wZW5ndWluX2NoaWVmcykgeworCUBsaW5lcyA9IGdyZXAoIS8ke3Blbmd1aW5fY2hpZWZzfS9pLCBAbGluZXMpOworICAgIH0KKyAgICAjIGN1dCAtZjItIC1kIjoiCisgICAgcy8uKjpccyooLispXHMqLyQxLyBmb3IgKEBsaW5lcyk7CisKKyAgICAkdG90YWxfc2lnbl9vZmZzID0gQGxpbmVzOworCisgICAgaWYgKCRlbWFpbF9yZW1vdmVfZHVwbGljYXRlcykgeworCUBsaW5lcyA9IG1haWxtYXAoQGxpbmVzKTsKKyAgICB9CisKKyAgICBAbGluZXMgPSBzb3J0KEBsaW5lcyk7CisKKyAgICAjIHVuaXEgLWMKKyAgICAkaGFzaHskX30rKyBmb3IgQGxpbmVzOworCisgICAgIyBzb3J0IC1ybgorICAgIGZvcmVhY2ggbXkgJGxpbmUgKHNvcnQgeyRoYXNoeyRifSA8PT4gJGhhc2h7JGF9fSBrZXlzICVoYXNoKSB7CisJbXkgJHNpZ25fb2ZmcyA9ICRoYXNoeyRsaW5lfTsKKwkkY291bnQrKzsKKwlsYXN0IGlmICgkc2lnbl9vZmZzIDwgJGVtYWlsX2dpdF9taW5fc2lnbmF0dXJlcyB8fAorCQkgJGNvdW50ID4gJGVtYWlsX2dpdF9tYXhfbWFpbnRhaW5lcnMgfHwKKwkJICRzaWduX29mZnMgKiAxMDAgLyAkdG90YWxfc2lnbl9vZmZzIDwgJGVtYWlsX2dpdF9taW5fcGVyY2VudCk7CisJcHVzaF9lbWFpbF9hZGRyZXNzKCRsaW5lKTsKKyAgICB9Cit9CisKK3N1YiBzYXZlX2NvbW1pdHMgeworICAgIG15ICgkY21kLCBAY29tbWl0cykgPSBAXzsKKyAgICBteSAkb3V0cHV0OworICAgIG15IEBsaW5lcyA9ICgpOworCisgICAgJG91dHB1dCA9IGAke2NtZH1gOworCisgICAgQGxpbmVzID0gc3BsaXQoIlxuIiwgJG91dHB1dCk7CiAgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7Ci0JaWYgKCRsaW5lID1+IG0vKFswLTldKylccysoLiopLykgewotCSAgICAkdG90YWxfc2lnbl9vZmZzICs9ICQxOwotCX0gZWxzZSB7Ci0JICAgIGRpZSgiJFA6IFVuZXhwZWN0ZWQgZ2l0IG91dHB1dDogJHtsaW5lfVxuIik7CisJaWYgKCRsaW5lID1+IG0vXihcdyspIC8pIHsKKwkgICAgcHVzaCAoQGNvbW1pdHMsICQxKTsKKwl9CisgICAgfQorICAgIHJldHVybiBAY29tbWl0czsKK30KKworc3ViIGdpdF9hc3NpZ25fYmxhbWUgeworICAgIG15ICgkZmlsZSkgPSBAXzsKKworICAgIG15IEBsaW5lcyA9ICgpOworICAgIG15IEBjb21taXRzID0gKCk7CisgICAgbXkgJGNtZDsKKyAgICBteSAkb3V0cHV0OworICAgIG15ICVoYXNoOworICAgIG15ICR0b3RhbF9zaWduX29mZnM7CisgICAgbXkgJGNvdW50OworCisgICAgaWYgKEByYW5nZSkgeworCWZvcmVhY2ggbXkgJGZpbGVfcmFuZ2VfZGlmZiAoQHJhbmdlKSB7CisJICAgIG5leHQgaWYgKCEoJGZpbGVfcmFuZ2VfZGlmZiA9fiBtLyguKyk6KC4rKTooLispLykpOworCSAgICBteSAkZGlmZl9maWxlID0gJDE7CisJICAgIG15ICRkaWZmX3N0YXJ0ID0gJDI7CisJICAgIG15ICRkaWZmX2xlbmd0aCA9ICQzOworCSAgICBuZXh0IGlmICghKCIkZmlsZSIgZXEgIiRkaWZmX2ZpbGUiKSk7CisJICAgICRjbWQgPSAiZ2l0IGJsYW1lIC1sIC1MICRkaWZmX3N0YXJ0LCskZGlmZl9sZW5ndGggJGZpbGUiOworCSAgICBAY29tbWl0cyA9IHNhdmVfY29tbWl0cygkY21kLCBAY29tbWl0cyk7CisJfQorICAgIH0gZWxzZSB7CisJaWYgKC1mICRmaWxlKSB7CisJICAgICRjbWQgPSAiZ2l0IGJsYW1lIC1sICRmaWxlIjsKKwkgICAgQGNvbW1pdHMgPSBzYXZlX2NvbW1pdHMoJGNtZCwgQGNvbW1pdHMpOwogCX0KICAgICB9CiAKLSAgICBmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKLQlpZiAoJGxpbmUgPX4gbS8oWzAtOV0rKVxzKyguKikvKSB7Ci0JICAgIG15ICRzaWduX29mZnMgPSAkMTsKLQkgICAgJGxpbmUgPSAkMjsKLQkgICAgJGNvdW50Kys7Ci0JICAgIGlmICgkc2lnbl9vZmZzIDwgJGVtYWlsX2dpdF9taW5fc2lnbmF0dXJlcyB8fAotCSAgICAgICAgJGNvdW50ID4gJGVtYWlsX2dpdF9tYXhfbWFpbnRhaW5lcnMgfHwKLQkJJHNpZ25fb2ZmcyAqIDEwMCAvICR0b3RhbF9zaWduX29mZnMgPCAkZW1haWxfZ2l0X21pbl9wZXJjZW50KSB7Ci0JCWxhc3Q7Ci0JICAgIH0KKyAgICAkdG90YWxfc2lnbl9vZmZzID0gMDsKKyAgICBAY29tbWl0cyA9IHVuaXEoQGNvbW1pdHMpOworICAgIGZvcmVhY2ggbXkgJGNvbW1pdCAoQGNvbW1pdHMpIHsKKwkkY21kID0gImdpdCBsb2cgLTEgJHtjb21taXR9IjsKKworCSRvdXRwdXQgPSBgJHtjbWR9YDsKKwkkb3V0cHV0ID1+IHMvXlxzKi8vZ207CisJQGxpbmVzID0gc3BsaXQoIlxuIiwgJG91dHB1dCk7CisKKwlAbGluZXMgPSBncmVwKC9eWy1fIAlhLXpdK2J5Oi4qXEAuKiQvaSwgQGxpbmVzKTsKKwlpZiAoISRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMpIHsKKwkgICAgQGxpbmVzID0gZ3JlcCghLyR7cGVuZ3Vpbl9jaGllZnN9L2ksIEBsaW5lcyk7CiAJfQotCWlmICgkbGluZSA9fiBtLyguKyk8KC4rKT4vKSB7Ci0JICAgIG15ICRnaXRfbmFtZSA9ICQxOwotCSAgICBteSAkZ2l0X2FkZHIgPSAkMjsKLQkgICAgaWYgKCRlbWFpbF91c2VuYW1lKSB7Ci0JCXB1c2goQGVtYWlsX3RvLCBmb3JtYXRfZW1haWwoJGdpdF9uYW1lLCAkZ2l0X2FkZHIpKTsKLQkgICAgfSBlbHNlIHsKLQkJcHVzaChAZW1haWxfdG8sICRnaXRfYWRkcik7Ci0JICAgIH0KLQl9IGVsc2lmICgkbGluZSA9fiBtLzwoLispPi8pIHsKLQkgICAgbXkgJGdpdF9hZGRyID0gJDE7Ci0JICAgIHB1c2goQGVtYWlsX3RvLCAkZ2l0X2FkZHIpOwotCX0gZWxzZSB7Ci0JICAgIHB1c2goQGVtYWlsX3RvLCAkbGluZSk7CisKKwkjIGN1dCAtZjItIC1kIjoiCisJcy8uKjpccyooLispXHMqLyQxLyBmb3IgKEBsaW5lcyk7CisKKwkkdG90YWxfc2lnbl9vZmZzICs9IEBsaW5lczsKKworCWlmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKKwkgICAgQGxpbmVzID0gbWFpbG1hcChAbGluZXMpOwogCX0KKworCSRoYXNoeyRffSsrIGZvciBAbGluZXM7CisgICAgfQorCisgICAgJGNvdW50ID0gMDsKKyAgICBmb3JlYWNoIG15ICRsaW5lIChzb3J0IHskaGFzaHskYn0gPD0+ICRoYXNoeyRhfX0ga2V5cyAlaGFzaCkgeworCW15ICRzaWduX29mZnMgPSAkaGFzaHskbGluZX07CisJJGNvdW50Kys7CisJbGFzdCBpZiAoJHNpZ25fb2ZmcyA8ICRlbWFpbF9naXRfbWluX3NpZ25hdHVyZXMgfHwKKwkJICRjb3VudCA+ICRlbWFpbF9naXRfbWF4X21haW50YWluZXJzIHx8CisJCSAkc2lnbl9vZmZzICogMTAwIC8gJHRvdGFsX3NpZ25fb2ZmcyA8ICRlbWFpbF9naXRfbWluX3BlcmNlbnQpOworCXB1c2hfZW1haWxfYWRkcmVzcygkbGluZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2thbGxzeW1zLmMgYi9zY3JpcHRzL2thbGxzeW1zLmMKaW5kZXggNjQzNDNjYy4uODZjMzg5NiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rYWxsc3ltcy5jCisrKyBiL3NjcmlwdHMva2FsbHN5bXMuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiB7CiAJY29uc3QgY2hhciAqdGFpbCA9IHN0cjsKIAotCXdoaWxlICgqdGFpbCAhPSAnXycpCisJd2hpbGUgKCp0YWlsID09ICdfJykKIAkJdGFpbCsrOwogCiAJcmV0dXJuIHRhaWwgLSBzdHI7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggNDBlMDA0NS4uNjJhOTAyNSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCisrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwpAQCAtNjU3LDYgKzY1NywxNSBAQAogCXJldHVybiAxOwogfQogCisvKiBMb29rcyBsaWtlOiBzcGk6UyAqLworc3RhdGljIGludCBkb19zcGlfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBzcGlfZGV2aWNlX2lkICppZCwKKwkJCWNoYXIgKmFsaWFzKQoreworCXNwcmludGYoYWxpYXMsIFNQSV9NT0RVTEVfUFJFRklYICIlcyIsIGlkLT5uYW1lKTsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtaWZpZWxkIHsKIAljb25zdCBjaGFyICpwcmVmaXg7CiAJaW50IGZpZWxkOwpAQCAtODUzLDYgKzg2MiwxMCBAQAogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKIAkJCSBzaXplb2Yoc3RydWN0IGkyY19kZXZpY2VfaWQpLCAiaTJjIiwKIAkJCSBkb19pMmNfZW50cnksIG1vZCk7CisJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9zcGlfZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3Qgc3BpX2RldmljZV9pZCksICJzcGkiLAorCQkJIGRvX3NwaV9lbnRyeSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2RtaV9kZXZpY2VfdGFibGUiKSkKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBkbWlfc3lzdGVtX2lkKSwgImRtaSIsCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggNDUyMjk0OC4uODAxYTE2YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtNjkxLDcgKzY5MSw3IEBACiAgKiAgIFRoZSAkIHN5bnRheCBpcyBmb3Igc2VjdGlvbnMgd2hlcmUgbGQgYXBwZW5kIGEgZG90IG51bWJlcgogICogICB0byBtYWtlIHNlY3Rpb24gbmFtZSB1bmlxdWUuCiAgKi8KLWludCBtYXRjaChjb25zdCBjaGFyICpzeW0sIGNvbnN0IGNoYXIgKiBjb25zdCBwYXRbXSkKK3N0YXRpYyBpbnQgbWF0Y2goY29uc3QgY2hhciAqc3ltLCBjb25zdCBjaGFyICogY29uc3QgcGF0W10pCiB7CiAJY29uc3QgY2hhciAqcDsKIAl3aGlsZSAoKnBhdCkgewpAQCAtMTc0Niw3ICsxNzQ2LDcgQEAKIAlidWZfcHJpbnRmKGIsICJ9O1xuIik7CiB9CiAKLXZvaWQgYWRkX3N0YWdpbmdfZmxhZyhzdHJ1Y3QgYnVmZmVyICpiLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHZvaWQgYWRkX3N0YWdpbmdfZmxhZyhzdHJ1Y3QgYnVmZmVyICpiLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0YXRpYyBjb25zdCBjaGFyICpzdGFnaW5nX2RpciA9ICJkcml2ZXJzL3N0YWdpbmciOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9zdW12ZXJzaW9uLmMgYi9zY3JpcHRzL21vZC9zdW12ZXJzaW9uLmMKaW5kZXggYWFkYzUyMi4uZWNmOWM3ZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2Qvc3VtdmVyc2lvbi5jCisrKyBiL3NjcmlwdHMvbW9kL3N1bXZlcnNpb24uYwpAQCAtMzM0LDggKzMzNCw2IEBACiAJCWRlcHNfZHJpdmVycy9uZXQvZHVtbXkubyA6PSBcCiAJCSAgZHJpdmVycy9uZXQvZHVtbXkuYyBcCiAJCSAgICAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnL25ldC9mYXN0cm91dGUuaCkgXAotCQkgIGluY2x1ZGUvbGludXgvY29uZmlnLmggXAotCQkgICAgJCh3aWxkY2FyZCBpbmNsdWRlL2NvbmZpZy9oLmgpIFwKIAkJICBpbmNsdWRlL2xpbnV4L21vZHVsZS5oIFwKIAogCSAgIFN1bSBhbGwgZmlsZXMgaW4gdGhlIHNhbWUgZGlyIG9yIHN1YmRpcnMuCmRpZmYgLS1naXQgYS9zY3JpcHRzL3NlbGludXgvbWRwL21kcC5jIGIvc2NyaXB0cy9zZWxpbnV4L21kcC9tZHAuYwppbmRleCBjYTc1N2Q0Li5iNGNlZDg1IDEwMDY0NAotLS0gYS9zY3JpcHRzL3NlbGludXgvbWRwL21kcC5jCisrKyBiL3NjcmlwdHMvc2VsaW51eC9tZHAvbWRwLmMKQEAgLTMxLDEzICszMSwxMyBAQAogCiAjaW5jbHVkZSAiZmxhc2suaCIKIAotdm9pZCB1c2FnZShjaGFyICpuYW1lKQorc3RhdGljIHZvaWQgdXNhZ2UoY2hhciAqbmFtZSkKIHsKIAlwcmludGYoInVzYWdlOiAlcyBbLW1dIHBvbGljeV9maWxlIGNvbnRleHRfZmlsZVxuIiwgbmFtZSk7CiAJZXhpdCgxKTsKIH0KIAotdm9pZCBmaW5kX2NvbW1vbl9uYW1lKGNoYXIgKmNuYW1lLCBjaGFyICpkZXN0LCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZmluZF9jb21tb25fbmFtZShjaGFyICpjbmFtZSwgY2hhciAqZGVzdCwgaW50IGxlbikKIHsKIAljaGFyICpzdGFydCwgKmVuZDsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy90cmFjaW5nL3Bvd2VyLnBsIGIvc2NyaXB0cy90cmFjaW5nL3Bvd2VyLnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjcyOWIzLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvdHJhY2luZy9wb3dlci5wbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLQotIyBDb3B5cmlnaHQgMjAwOCwgSW50ZWwgQ29ycG9yYXRpb24KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbAotIwotIyBUaGlzIHByb2dyYW0gZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0jIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0gaW4gYSBmaWxlIG5hbWVkIENPUFlJTkc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotIwotIyBBdXRob3JzOgotIyAJQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW5AbGludXguaW50ZWwuY29tPgotCi0KLSMKLSMgVGhpcyBzY3JpcHQgdHVybnMgYSBjc3RhdGUgZnRyYWNlIG91dHB1dCBpbnRvIGEgU1ZHIGdyYXBoaWMgdGhhdCBzaG93cwotIyBoaXN0b3JpYyBDLXN0YXRlIGluZm9ybWF0aW9uCi0jCi0jCi0jIAljYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZSB8IHBlcmwgcG93ZXIucGwgPiBvdXQuc3ZnCi0jCi0KLW15IEBzdHlsZXM7Ci1teSAkYmFzZSA9IDA7Ci0KLW15IEBwc3RhdGVfbGFzdDsKLW15IEBwc3RhdGVfbGV2ZWw7Ci0KLSRzdHlsZXNbMF0gPSAiZmlsbDpyZ2IoMCwwLDI1NSk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ci0kc3R5bGVzWzFdID0gImZpbGw6cmdiKDAsMjU1LDApO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1syXSA9ICJmaWxsOnJnYigyNTUsMCwyMCk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ci0kc3R5bGVzWzNdID0gImZpbGw6cmdiKDI1NSwyNTUsMjApO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1s0XSA9ICJmaWxsOnJnYigyNTUsMCwyNTUpO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1s1XSA9ICJmaWxsOnJnYigwLDI1NSwyNTUpO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1s2XSA9ICJmaWxsOnJnYigwLDEyOCwyNTUpO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1s3XSA9ICJmaWxsOnJnYigwLDI1NSwxMjgpO2ZpbGwtb3BhY2l0eTowLjU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYigwLDAsMCkiOwotJHN0eWxlc1s4XSA9ICJmaWxsOnJnYigwLDI1LDIwKTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKLQotCi1wcmludCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJub1wiPz4gXG4iOwotcHJpbnQgIjxzdmcgd2lkdGg9XCIxMDAwMFwiIGhlaWdodD1cIjEwMCVcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIjsKLQotbXkgJHNjYWxlID0gMzAwMDAuMDsKLXdoaWxlICg8PikgewotCW15ICRsaW5lID0gJF87Ci0JaWYgKCRsaW5lID1+IC8oWzAtOVwuXSspXF0gQ1NUQVRFOiBHb2luZyB0byBDKFswLTldKSBvbiBjcHUgKFswLTldKykgZm9yIChbMC05XC5dKykvKSB7Ci0JCWlmICgkYmFzZSA9PSAwKSB7Ci0JCQkkYmFzZSA9ICQxOwotCQl9Ci0JCW15ICR0aW1lID0gJDEgLSAkYmFzZTsKLQkJJHRpbWUgPSAkdGltZSAqICRzY2FsZTsKLQkJbXkgJEMgPSAkMjsKLQkJbXkgJGNwdSA9ICQzOwotCQlteSAkeSA9IDQwMCAqICRjcHU7Ci0JCW15ICRkdXJhdGlvbiA9ICQ0ICogJHNjYWxlOwotCQlteSAkbXNlYyA9IGludCgkNCAqIDEwMDAwMCkvMTAwLjA7Ci0JCW15ICRoZWlnaHQgPSAkQyAqIDIwOwotCQkkc3R5bGUgPSAkc3R5bGVzWyRDXTsKLQotCQkkeSA9ICR5ICsgMTQwIC0gJGhlaWdodDsKLQotCQkkeDIgPSAkdGltZSArIDQ7Ci0JCSR5MiA9ICR5ICsgNDsKLQotCi0JCXByaW50ICI8cmVjdCB4PVwiJHRpbWVcIiB3aWR0aD1cIiRkdXJhdGlvblwiIHk9XCIkeVwiIGhlaWdodD1cIiRoZWlnaHRcIiBzdHlsZT1cIiRzdHlsZVwiLz5cbiI7Ci0JCXByaW50ICI8dGV4dCB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJHgyLCR5Mikgcm90YXRlKDkwKVwiPkMkQyAkbXNlYzwvdGV4dD5cbiI7Ci0JfQotCWlmICgkbGluZSA9fiAvKFswLTlcLl0rKVxdIFBTVEFURTogR29pbmcgdG8gUChbMC05XSkgb24gY3B1IChbMC05XSspLykgewotCQlteSAkdGltZSA9ICQxIC0gJGJhc2U7Ci0JCW15ICRzdGF0ZSA9ICQyOwotCQlteSAkY3B1ID0gJDM7Ci0KLQkJaWYgKGRlZmluZWQoJHBzdGF0ZV9sYXN0WyRjcHVdKSkgewotCQkJbXkgJGZyb20gPSAkcHN0YXRlX2xhc3RbJGNwdV07Ci0JCQlteSAkb2xkc3RhdGUgPSAkcHN0YXRlX3N0YXRlWyRjcHVdOwotCQkJbXkgJGR1cmF0aW9uID0gKCR0aW1lLSRmcm9tKSAqICRzY2FsZTsKLQotCQkJJGZyb20gPSAkZnJvbSAqICRzY2FsZTsKLQkJCW15ICR0byA9ICRmcm9tICsgJGR1cmF0aW9uOwotCQkJbXkgJGhlaWdodCA9IDE0MCAtICgkb2xkc3RhdGUgKiAoMTQwLzgpKTsKLQotCQkJbXkgJHkgPSA0MDAgKiAkY3B1ICsgMjAwICsgJGhlaWdodDsKLQkJCW15ICR5MiA9ICR5KzQ7Ci0JCQlteSAkc3R5bGUgPSAkc3R5bGVzWzhdOwotCi0JCQlwcmludCAiPHJlY3QgeD1cIiRmcm9tXCIgeT1cIiR5XCIgd2lkdGg9XCIkZHVyYXRpb25cIiBoZWlnaHQ9XCI1XCIgc3R5bGU9XCIkc3R5bGVcIi8+XG4iOwotCQkJcHJpbnQgIjx0ZXh0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgkZnJvbSwkeTIpXCI+UCRvbGRzdGF0ZSAoY3B1ICRjcHUpPC90ZXh0PlxuIjsKLQkJfTsKLQotCQkkcHN0YXRlX2xhc3RbJGNwdV0gPSAkdGltZTsKLQkJJHBzdGF0ZV9zdGF0ZVskY3B1XSA9ICRzdGF0ZTsKLQl9Ci19Ci0KLQotcHJpbnQgIjwvc3ZnPlxuIjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCmluZGV4IDZiZmM3ZWEuLjhlOTc3N2IgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW1hX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW1hX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSBpbWFfbWVhc3VyZW1lbnRzX3N0YXJ0LAogCS5uZXh0ID0gaW1hX21lYXN1cmVtZW50c19uZXh0LAogCS5zdG9wID0gaW1hX21lYXN1cmVtZW50c19zdG9wLApAQCAtMjIxLDcgKzIyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2Vxb3BzID0gewogCS5zdGFydCA9IGltYV9tZWFzdXJlbWVudHNfc3RhcnQsCiAJLm5leHQgPSBpbWFfbWVhc3VyZW1lbnRzX25leHQsCiAJLnN0b3AgPSBpbWFfbWVhc3VyZW1lbnRzX3N0b3AsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IGFjYWU3ZWY0Li5jMzNiNmJiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMzAsMTcgKzMwLDExIEBACiAjaW5jbHVkZSA8bmV0L25ldGxhYmVsLmg+CiAjaW5jbHVkZSA8bmV0L2NpcHNvX2lwdjQuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSAic21hY2suaCIKIAogI2RlZmluZSB0YXNrX3NlY3VyaXR5KHRhc2spCSh0YXNrX2NyZWRfeHh4KCh0YXNrKSwgc2VjdXJpdHkpKQogCi0vKgotICogSSBob3BlIHRoZXNlIGFyZSB0aGUgaG9rZXlpc3QgbGluZXMgb2YgY29kZSBpbiB0aGUgbW9kdWxlLiBDYXNleS4KLSAqLwotI2RlZmluZSBERVZQVFNfU1VQRVJfTUFHSUMJMHgxY2QxCi0jZGVmaW5lIFNPQ0tGU19NQUdJQwkJMHg1MzRGNDM0QgotI2RlZmluZSBUTVBGU19NQUdJQwkJMHgwMTAyMTk5NAotCiAvKioKICAqIHNta19mZXRjaCAtIEZldGNoIHRoZSBzbWFjayBsYWJlbCBmcm9tIGEgZmlsZS4KICAqIEBpcDogYSBwb2ludGVyIHRvIHRoZSBpbm9kZQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCmluZGV4IGY4M2E4MDkuLmFlZWFkNzUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCS8qIE5vLW9wICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbG9hZF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsb2FkX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gbG9hZF9zZXFfc3RhcnQsCiAJLm5leHQgID0gbG9hZF9zZXFfbmV4dCwKIAkuc2hvdyAgPSBsb2FkX3NlcV9zaG93LApAQCAtNTAzLDcgKzUwMyw3IEBACiAJLyogTm8tb3AgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjaXBzb19zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjaXBzb19zZXFfb3BzID0gewogCS5zdGFydCA9IGNpcHNvX3NlcV9zdGFydCwKIAkuc3RvcCAgPSBjaXBzb19zZXFfc3RvcCwKIAkubmV4dCAgPSBjaXBzb19zZXFfbmV4dCwKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCS8qIE5vLW9wICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmV0bGJsYWRkcl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZXRsYmxhZGRyX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gbmV0bGJsYWRkcl9zZXFfc3RhcnQsCiAJLnN0b3AgID0gbmV0bGJsYWRkcl9zZXFfc3RvcCwKIAkubmV4dCAgPSBuZXRsYmxhZGRyX3NlcV9uZXh0LApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCA1OWU1ZmJlLi41NjFkNmQ5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMTM4NywxMSArMTM4Nyw2IEBACiAJLnBvc3RfYWN0aW9uID0gc25kX3BjbV9wb3N0X2RyYWluX2luaXQKIH07CiAKLXN0cnVjdCBkcmFpbl9yZWMgewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCXdhaXRfcXVldWVfdCB3YWl0OwotfTsKLQogc3RhdGljIGludCBzbmRfcGNtX2Ryb3Aoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogCiAvKgpAQCAtMTQwNywxMCArMTQwMiw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOworCXdhaXRfcXVldWVfdCB3YWl0OwogCWludCByZXN1bHQgPSAwOwotCWludCBpLCBudW1fZHJlY3M7CiAJaW50IG5vbmJsb2NrID0gMDsKLQlzdHJ1Y3QgZHJhaW5fcmVjICpkcmVjLCBkcmVjX3RtcCwgKmQ7CiAKIAljYXJkID0gc3Vic3RyZWFtLT5wY20tPmNhcmQ7CiAJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKQEAgLTE0MzMsMzggKzE0MjcsMTAgQEAKIAl9IGVsc2UgaWYgKHN1YnN0cmVhbS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCW5vbmJsb2NrID0gMTsKIAotCWlmIChub25ibG9jaykKLQkJZ290byBsb2NrOyAvKiBubyBuZWVkIHRvIGFsbG9jYXRlIHdhaXRxdWV1ZXMgKi8KLQotCS8qIGFsbG9jYXRlIHRlbXBvcmFyeSByZWNvcmQgZm9yIGRyYWluIHN5bmMgKi8KIAlkb3duX3JlYWQoJnNuZF9wY21fbGlua19yd3NlbSk7Ci0JaWYgKHNuZF9wY21fc3RyZWFtX2xpbmtlZChzdWJzdHJlYW0pKSB7Ci0JCWRyZWMgPSBrbWFsbG9jKHN1YnN0cmVhbS0+Z3JvdXAtPmNvdW50ICogc2l6ZW9mKCpkcmVjKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghIGRyZWMpIHsKLQkJCXVwX3JlYWQoJnNuZF9wY21fbGlua19yd3NlbSk7Ci0JCQlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9IGVsc2UKLQkJZHJlYyA9ICZkcmVjX3RtcDsKLQotCS8qIGNvdW50IG9ubHkgcGxheWJhY2sgc3RyZWFtcyAqLwotCW51bV9kcmVjcyA9IDA7Ci0Jc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKLQkJcnVudGltZSA9IHMtPnJ1bnRpbWU7Ci0JCWlmIChzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJZCA9ICZkcmVjW251bV9kcmVjcysrXTsKLQkJCWQtPnN1YnN0cmVhbSA9IHM7Ci0JCQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmZC0+d2FpdCwgY3VycmVudCk7Ci0JCQlhZGRfd2FpdF9xdWV1ZSgmcnVudGltZS0+c2xlZXAsICZkLT53YWl0KTsKLQkJfQotCX0KLQl1cF9yZWFkKCZzbmRfcGNtX2xpbmtfcndzZW0pOwotCi0gbG9jazoKIAlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOwogCS8qIHJlc3VtZSBwYXVzZSAqLwotCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1BBVVNFRCkKKwlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfUEFVU0VEKQogCQlzbmRfcGNtX3BhdXNlKHN1YnN0cmVhbSwgMCk7CiAKIAkvKiBwcmUtc3RhcnQvc3RvcCAtIGFsbCBydW5uaW5nIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gRFJBSU5JTkcgc3RhdGUgKi8KQEAgLTE0NzksMjUgKzE0NDUsMzUgQEAKIAogCWZvciAoOzspIHsKIAkJbG9uZyB0b3V0OworCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICp0b19jaGVjazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlyZXN1bHQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQotCQkvKiBhbGwgZmluaXNoZWQ/ICovCi0JCWZvciAoaSA9IDA7IGkgPCBudW1fZHJlY3M7IGkrKykgewotCQkJcnVudGltZSA9IGRyZWNbaV0uc3Vic3RyZWFtLT5ydW50aW1lOwotCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX0RSQUlOSU5HKQorCQkvKiBmaW5kIGEgc3Vic3RyZWFtIHRvIGRyYWluICovCisJCXRvX2NoZWNrID0gTlVMTDsKKwkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKKwkJCWlmIChzLT5zdHJlYW0gIT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCQljb250aW51ZTsKKwkJCXJ1bnRpbWUgPSBzLT5ydW50aW1lOworCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX0RSQUlOSU5HKSB7CisJCQkJdG9fY2hlY2sgPSBydW50aW1lOwogCQkJCWJyZWFrOworCQkJfQogCQl9Ci0JCWlmIChpID09IG51bV9kcmVjcykKLQkJCWJyZWFrOyAvKiB5ZXMsIGFsbCBkcmFpbmVkICovCi0KKwkJaWYgKCF0b19jaGVjaykKKwkJCWJyZWFrOyAvKiBhbGwgZHJhaW5lZCAqLworCQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CisJCWFkZF93YWl0X3F1ZXVlKCZ0b19jaGVjay0+c2xlZXAsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOworCQl1cF9yZWFkKCZzbmRfcGNtX2xpbmtfcndzZW0pOwogCQlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwogCQl0b3V0ID0gc2NoZWR1bGVfdGltZW91dCgxMCAqIEhaKTsKIAkJc25kX3Bvd2VyX2xvY2soY2FyZCk7CisJCWRvd25fcmVhZCgmc25kX3BjbV9saW5rX3J3c2VtKTsKIAkJc25kX3BjbV9zdHJlYW1fbG9ja19pcnEoc3Vic3RyZWFtKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoJnRvX2NoZWNrLT5zbGVlcCwgJndhaXQpOwogCQlpZiAodG91dCA9PSAwKSB7CiAJCQlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpCiAJCQkJcmVzdWx0ID0gLUVTVFJQSVBFOwpAQCAtMTUxMiwxNiArMTQ4OCw3IEBACiAKICB1bmxvY2s6CiAJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCi0JaWYgKCFub25ibG9jaykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2RyZWNzOyBpKyspIHsKLQkJCWQgPSAmZHJlY1tpXTsKLQkJCXJ1bnRpbWUgPSBkLT5zdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcnVudGltZS0+c2xlZXAsICZkLT53YWl0KTsKLQkJfQotCQlpZiAoZHJlYyAhPSAmZHJlY190bXApCi0JCQlrZnJlZShkcmVjKTsKLQl9CisJdXBfcmVhZCgmc25kX3BjbV9saW5rX3J3c2VtKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCmluZGV4IDFlZGFiN2IuLjMxMzZjODggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKKysrIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwpAQCAtMTEwLDkgKzExMCw2IEBACiAvLyByYXRoZXIgdGhhbiA2NGsgYXMgc29tZSBvZiB0aGUgZ2FtZXMgd29yayBtb3JlIHJlc3BvbnNpdmVseS4KIC8vIGxvZyBiYXNlIDIoIGJ1ZmYgc3ogPSAzMmspLgogCi0vL3N0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmF1bHRvcmRlciA9IDM7Ci0vL01PRFVMRV9QQVJNKGRlZmF1bHRvcmRlciwgImkiKTsKLQogLy8KIC8vIFR1cm4gb24vb2ZmIGRlYnVnZ2luZyBjb21waWxhdGlvbiBieSBjb21tZW50aW5nIG91dCAiI2RlZmluZSBDU0RFQlVHIgogLy8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zeXNfdGltZXIuYyBiL3NvdW5kL29zcy9zeXNfdGltZXIuYwppbmRleCAxMDc1MzQ0Li44ZGI2YWVmIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3lzX3RpbWVyLmMKKysrIGIvc291bmQvb3NzL3N5c190aW1lci5jCkBAIC0xMDAsOSArMTAwLDYgQEAKIAljdXJyX3RlbXBvID0gNjA7CiAJY3Vycl90aW1lYmFzZSA9IDEwMDsKIAlvcGVuZWQgPSAxOwotCi0JOwotCiAJewogCQlkZWZfdG1yLmV4cGlyZXMgPSAoMSkgKyBqaWZmaWVzOwogCQlhZGRfdGltZXIoJmRlZl90bXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmggYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuaAppbmRleCAwMTJjMDEwLi41MWFmYzA0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuaAorKysgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuaApAQCAtODYsNyArODYsNiBAQAogCiAJLyogbWVzc2FnaW5nICovCiAJc3BpbmxvY2tfdAkJbXNnX2xvY2s7ICAgICAgICAgIC8qIG1lc3NhZ2Ugc3BpbmxvY2sgKi8KLQlhdG9taWNfdAkgICAgICAgIHNlbmRfbWVzc2FnZV9sb2NrZWQ7CiAJc3RydWN0IGx4X3JtaCAgICAgICAgICAgcm1oOwogCiAJLyogY29uZmlndXJhdGlvbiAqLwpAQCAtOTUsNyArOTQsNiBAQAogCXVpbnQgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3J1bm5pbmdbMl07CiAJdTMyICAgICAgICAgICAgICAgICAgICAgYm9hcmRfc2FtcGxlX3JhdGU7IC8qIHNhbXBsZSByYXRlIHJlYWQgZnJvbQogCQkJCQkJICAgICogYm9hcmQgKi8KLQl1MzIgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsJICAgLyogb3VyIHNhbXBsZSByYXRlICovCiAJdTE2ICAgICAgICAgICAgICAgICAgICAgcGNtX2dyYW51bGFyaXR5OyAgIC8qIGJvYXJkIGJsb2Nrc2l6ZSAqLwogCiAJLyogZG1hICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbHg2NDY0ZXMvbHhfY29yZS5jIGIvc291bmQvcGNpL2x4NjQ2NGVzL2x4X2NvcmUuYwppbmRleCA1ODEyNzgwLi4zMDg2Yjc1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbHg2NDY0ZXMvbHhfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9seDY0NjRlcy9seF9jb3JlLmMKQEAgLTMxNCw5OCArMzE0LDYgQEAKICNkZWZpbmUgWElMSU5YX1BPTExfTk9fU0xFRVAgICAgMTAwCiAjZGVmaW5lIFhJTElOWF9QT0xMX0lURVJBVElPTlMgIDE1MAogCi0jaWYgMCAvKiBub3QgdXNlZCBub3cgKi8KLXN0YXRpYyBpbnQgbHhfbWVzc2FnZV9zZW5kKHN0cnVjdCBseDY0NjRlcyAqY2hpcCwgc3RydWN0IGx4X3JtaCAqcm1oKQotewotCXUzMiByZWcgPSBFRF9EU1BfVElNRURfT1VUOwotCWludCBkd2xvb3A7Ci0JaW50IGFuc3dlcl9yZWNlaXZlZDsKLQotCWlmIChseF9kc3BfcmVnX3JlYWQoY2hpcCwgZVJlZ19DU00pICYgKFJlZ19DU01fTUMgfCBSZWdfQ1NNX01SKSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIExYUCAiUElPU2VuZE1lc3NhZ2UgZVJlZ19DU00gJXhcbiIsIHJlZyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogd3JpdGUgY29tbWFuZCAqLwotCWx4X2RzcF9yZWdfd3JpdGVidWYoY2hpcCwgZVJlZ19DUk0xLCBybWgtPmNtZCwgcm1oLT5jbWRfbGVuKTsKLQotCXNuZF9CVUdfT04oYXRvbWljX3JlYWQoJmNoaXAtPnNlbmRfbWVzc2FnZV9sb2NrZWQpICE9IDApOwotCWF0b21pY19zZXQoJmNoaXAtPnNlbmRfbWVzc2FnZV9sb2NrZWQsIDEpOwotCi0JLyogTWljb0JsYXplIGdvZ29nbyAqLwotCWx4X2RzcF9yZWdfd3JpdGUoY2hpcCwgZVJlZ19DU00sIFJlZ19DU01fTUMpOwotCi0JLyogd2FpdCBmb3IgaW50ZXJydXB0IHRvIGFuc3dlciAqLwotCWZvciAoZHdsb29wID0gMDsgZHdsb29wICE9IFhJTElOWF9USU1FT1VUX01TOyArK2R3bG9vcCkgewotCQlhbnN3ZXJfcmVjZWl2ZWQgPSBhdG9taWNfcmVhZCgmY2hpcC0+c2VuZF9tZXNzYWdlX2xvY2tlZCk7Ci0JCWlmIChhbnN3ZXJfcmVjZWl2ZWQgPT0gMCkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfQotCi0JaWYgKGFuc3dlcl9yZWNlaXZlZCA9PSAwKSB7Ci0JCS8qIGluIERlYnVnIG1vZGUgdmVyaWZ5IFJlZ19DU01fTVIgKi8KLQkJc25kX0JVR19PTighKGx4X2RzcF9yZWdfcmVhZChjaGlwLCBlUmVnX0NTTSkgJiBSZWdfQ1NNX01SKSk7Ci0KLQkJLyogY29tbWFuZCBmaW5pc2hlZCwgcmVhZCBzdGF0dXMgKi8KLQkJaWYgKHJtaC0+ZHNwX3N0YXQgPT0gMCkKLQkJCXJlZyA9IGx4X2RzcF9yZWdfcmVhZChjaGlwLCBlUmVnX0NSTTEpOwotCQllbHNlCi0JCQlyZWcgPSAwOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyBMWFAgIlRJTUVPVVQgbHhfbWVzc2FnZV9zZW5kISAiCi0JCQkgICAiSW50ZXJydXB0cyBkaXNhYmxlZD9cbiIpOwotCi0JCS8qIGF0dGVudGUgYml0IFJlZ19DU01fTVIgKi8KLQkJZm9yIChpID0gMDsgaSAhPSBYSUxJTlhfUE9MTF9JVEVSQVRJT05TOyBpKyspIHsKLQkJCWlmICgobHhfZHNwX3JlZ19yZWFkKGNoaXAsIGVSZWdfQ1NNKSAmIFJlZ19DU01fTVIpKSB7Ci0JCQkJaWYgKHJtaC0+ZHNwX3N0YXQgPT0gMCkKLQkJCQkJcmVnID0gbHhfZHNwX3JlZ19yZWFkKGNoaXAsIGVSZWdfQ1JNMSk7Ci0JCQkJZWxzZQotCQkJCQlyZWcgPSAwOwotCQkJCWdvdG8gcG9sbGluZ19zdWNjZXNzZnVsOwotCQkJfQotCi0JCQlpZiAoaSA+IFhJTElOWF9QT0xMX05PX1NMRUVQKQotCQkJCW1zbGVlcCgxKTsKLQkJfQotCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyBMWFAgIlRJTUVPVVQgbHhfbWVzc2FnZV9zZW5kISAiCi0JCQkgICAicG9sbGluZyBmYWlsZWRcbiIpOwotCi1wb2xsaW5nX3N1Y2Nlc3NmdWw6Ci0JCWF0b21pY19zZXQoJmNoaXAtPnNlbmRfbWVzc2FnZV9sb2NrZWQsIDApOwotCX0KLQotCWlmICgocmVnICYgRVJST1JfVkFMVUUpID09IDApIHsKLQkJLyogcmVhZCByZXNwb25zZSAqLwotCQlpZiAocm1oLT5zdGF0X2xlbikgewotCQkJc25kX0JVR19PTihybWgtPnN0YXRfbGVuID49IChSRUdfQ1JNX05VTUJFUi0xKSk7Ci0KLQkJCWx4X2RzcF9yZWdfcmVhZGJ1ZihjaGlwLCBlUmVnX0NSTTIsIHJtaC0+c3RhdCwKLQkJCQkJICAgcm1oLT5zdGF0X2xlbik7Ci0JCX0KLQl9IGVsc2UKLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgTFhQICJseF9tZXNzYWdlX3NlbmQ6IGVycm9yX3ZhbHVlICV4XG4iLAotCQkJICAgcmVnKTsKLQotCS8qIGNsZWFyIFJlZ19DU01fTVIgKi8KLQlseF9kc3BfcmVnX3dyaXRlKGNoaXAsIGVSZWdfQ1NNLCAwKTsKLQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBFRF9EU1BfVElNRURfT1VUOgotCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyBMWFAgImx4X21lc3NhZ2Vfc2VuZDogZHNwIHRpbWVvdXRcbiIpOwotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQotCWNhc2UgRURfRFNQX0NSQVNIRUQ6Ci0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HIExYUCAibHhfbWVzc2FnZV9zZW5kOiBkc3AgY3Jhc2hlZFxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWx4X21lc3NhZ2VfZHVtcChybWgpOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIG5vdCB1c2VkIG5vdyAqLwogCiBzdGF0aWMgaW50IGx4X21lc3NhZ2Vfc2VuZF9hdG9taWMoc3RydWN0IGx4NjQ2NGVzICpjaGlwLCBzdHJ1Y3QgbHhfcm1oICpybWgpCiB7CkBAIC00MjMsNyArMzMxLDcgQEAKIAkvKiBNaWNvQmxhemUgZ29nb2dvICovCiAJbHhfZHNwX3JlZ193cml0ZShjaGlwLCBlUmVnX0NTTSwgUmVnX0NTTV9NQyk7CiAKLQkvKiB3YWl0IGZvciBpbnRlcnJ1cHQgdG8gYW5zd2VyICovCisJLyogd2FpdCBmb3IgZGV2aWNlIHRvIGFuc3dlciAqLwogCWZvciAoZHdsb29wID0gMDsgZHdsb29wICE9IFhJTElOWF9USU1FT1VUX01TICogMTAwMDsgKytkd2xvb3ApIHsKIAkJaWYgKGx4X2RzcF9yZWdfcmVhZChjaGlwLCBlUmVnX0NTTSkgJiBSZWdfQ1NNX01SKSB7CiAJCQlpZiAocm1oLT5kc3Bfc3RhdCA9PSAwKQpAQCAtMTE3NSwxMCArMTA4Myw2IEBACiAJCSpyX2FzeW5jX2VzY21kID0gMTsKIAl9CiAKLQlpZiAoaXJxc3JjICYgTUFTS19TWVNfU1RBVFVTX0NNRF9ET05FKQotCQkvKiB4aWxpbnggY29tbWFuZCBub3RpZmljYXRpb24gKi8KLQkJYXRvbWljX3NldCgmY2hpcC0+c2VuZF9tZXNzYWdlX2xvY2tlZCwgMCk7Ci0KIAlpZiAoaXJxX2FzeW5jKSB7CiAJCS8qIHNuZF9wcmludGQoImludGVycnVwdDogYXN5bmMgZXZlbnQgcGVuZGluZ1xuIik7ICovCiAJCSpyX2FzeW5jX3BlbmRpbmcgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKaW5kZXggMjc1OGI5MC4uZTY5MzIyOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCkBAIC0yNzcsNyArMjc3LDExIEBACiAJaWYgKCFkYWktPmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfQkY1WFhfTVVMVElDSEFOX1NVUFBPUlQpCisJcmV0ID0gc3BvcnRfc2V0X211bHRpY2hhbm5lbChzcG9ydCwgMTYsIDB4M0ZGLCAxKTsKKyNlbHNlCiAJcmV0ID0gc3BvcnRfc2V0X211bHRpY2hhbm5lbChzcG9ydCwgMTYsIDB4MUYsIDEpOworI2VuZGlmCiAJaWYgKHJldCkgewogCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTMzNCw3ICszMzgsMTEgQEAKIAkJZ290byBzcG9ydF9lcnI7CiAJfQogCS8qU1BPUlQgd29ya3MgaW4gVERNIG1vZGUgdG8gc2ltdWxhdGUgQUM5NyB0cmFuc2ZlcnMqLworI2lmIGRlZmluZWQoQ09ORklHX1NORF9CRjVYWF9NVUxUSUNIQU5fU1VQUE9SVCkKKwlyZXQgPSBzcG9ydF9zZXRfbXVsdGljaGFubmVsKHNwb3J0X2hhbmRsZSwgMTYsIDB4M0ZGLCAxKTsKKyNlbHNlCiAJcmV0ID0gc3BvcnRfc2V0X211bHRpY2hhbm5lbChzcG9ydF9oYW5kbGUsIDE2LCAweDFGLCAxKTsKKyNlbmRpZgogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CiAJCXJldCA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmggYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5oCmluZGV4IDNmMmE5MTEuLmExZjk3ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmgKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9zb3VuZC9hcm0vYmY1eHgtYWM5Ny5oCisgKiBzb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5oCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKaW5kZXggODc2YWJhZC4uMWU5ZDE2MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwpAQCAtMjI3LDcgKzIyNyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJmNXh4X2kyc19yZW1vdmUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgdm9pZCBiZjV4eF9pMnNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKIAlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOwpAQCAtMjM2LDM2ICsyMzcsMzEgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYmY1eHhfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPQotCQkoc3RydWN0IHNwb3J0X2RldmljZSAqKWRhaS0+cHJpdmF0ZV9kYXRhOwogCiAJcHJfZGVidWcoIiVzIDogc3BvcnQgJWRcbiIsIF9fZnVuY19fLCBkYWktPmlkKTsKLQlpZiAoIWRhaS0+YWN0aXZlKQotCQlyZXR1cm4gMDsKKwogCWlmIChkYWktPmNhcHR1cmUuYWN0aXZlKQotCQlzcG9ydF9yeF9zdG9wKHNwb3J0KTsKKwkJc3BvcnRfcnhfc3RvcChzcG9ydF9oYW5kbGUpOwogCWlmIChkYWktPnBsYXliYWNrLmFjdGl2ZSkKLQkJc3BvcnRfdHhfc3RvcChzcG9ydCk7CisJCXNwb3J0X3R4X3N0b3Aoc3BvcnRfaGFuZGxlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBiZjV4eF9pMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCWludCByZXQ7Ci0Jc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPQotCQkoc3RydWN0IHNwb3J0X2RldmljZSAqKWRhaS0+cHJpdmF0ZV9kYXRhOwogCiAJcHJfZGVidWcoIiVzIDogc3BvcnQgJWRcbiIsIF9fZnVuY19fLCBkYWktPmlkKTsKLQlpZiAoIWRhaS0+YWN0aXZlKQotCQlyZXR1cm4gMDsKIAotCXJldCA9IHNwb3J0X2NvbmZpZ19yeChzcG9ydCwgUkZTUiB8IFJDS0ZFLCBSU0ZTRXwweDFmLCAwLCAwKTsKKwlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnRfaGFuZGxlLCBiZjV4eF9pMnMucmNyMSwKKwkJCQkgICAgICBiZjV4eF9pMnMucmNyMiwgMCwgMCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlyZXQgPSBzcG9ydF9jb25maWdfdHgoc3BvcnQsIFRGU1IgfCBUQ0tGRSwgVFNGU0V8MHgxZiwgMCwgMCk7CisJcmV0ID0gc3BvcnRfY29uZmlnX3R4KHNwb3J0X2hhbmRsZSwgYmY1eHhfaTJzLnRjcjEsCisJCQkJICAgICAgYmY1eHhfaTJzLnRjcjIsIDAsIDApOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmggYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmgKaW5kZXggNzEwN2QxYS4uMjY0ZWNkYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5oCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9zb3VuZC9hcm0vYmY1eHgtaTJzLmgKKyAqIHNvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuaAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYwppbmRleCA0NjljZTdmLi45OTA1MWZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYwpAQCAtMzI2LDcgKzMyNiw3IEBACiAKIGludCBzcG9ydF90eF9zdGFydChzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCkKIHsKLQl1bnNpZ25lZCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXByX2RlYnVnKCIlczogdHhfcnVuOiVkLCByeF9ydW46JWRcbiIsIF9fZnVuY19fLAogCQkJc3BvcnQtPnR4X3J1biwgc3BvcnQtPnJ4X3J1bik7CiAJaWYgKHNwb3J0LT50eF9ydW4pCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwppbmRleCAwMTM0M2RjLi5jNDg0ODVmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKQEAgLTI1MSw4ICsyNTEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWQxODM2X3NwaV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiYWQxODM2LXNwaSIsCi0JCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkubmFtZQk9ICJhZDE4MzYiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSBhZDE4MzZfc3BpX3Byb2JlLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKaW5kZXggOWEwNDlhMS4uMzRiMzBlZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5jCkBAIC00NTYsNyArNDU2LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZDE5Mzhfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJhZDE5MzgiLAotCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUJCT0gYWQxOTM4X3NwaV9wcm9iZSwKQEAgLTUxNSw2ICs1MTQsNyBAQAogCWNvZGVjLT5udW1fZGFpID0gMTsKIAljb2RlYy0+d3JpdGUgPSBhZDE5Mzhfd3JpdGVfcmVnOwogCWNvZGVjLT5yZWFkID0gYWQxOTM4X3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IGFkMTkzOF9zZXRfYmlhc19sZXZlbDsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKaW5kZXggZDgwZDQxNC4uNWFkNjc3YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCkBAIC01OTUsNiArNTk1LDcgQEAKIAogCS8qIE1vbm8gQ2FwdHVyZSBtaXhlci1tdXggKi8KIAl7IkNhcHR1cmUgUmlnaHQgTWl4ZXIiLCAiU3RlcmVvIiwgIkNhcHR1cmUgUmlnaHQgTXV4In0sCisJeyJDYXB0dXJlIExlZnQgTWl4ZXIiLCAiU3RlcmVvIiwgIkNhcHR1cmUgTGVmdCBNdXgifSwKIAl7IkNhcHR1cmUgTGVmdCBNaXhlciIsICJBbmFsb2d1ZSBNaXggTGVmdCIsICJDYXB0dXJlIExlZnQgTXV4In0sCiAJeyJDYXB0dXJlIExlZnQgTWl4ZXIiLCAiQW5hbG9ndWUgTWl4IExlZnQiLCAiQ2FwdHVyZSBSaWdodCBNdXgifSwKIAl7IkNhcHR1cmUgUmlnaHQgTWl4ZXIiLCAiQW5hbG9ndWUgTWl4IFJpZ2h0IiwgIkNhcHR1cmUgTGVmdCBNdXgifSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCmluZGV4IGM2NGU1NWEuLjY4NmU1YWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAkJICAgICAgIC0gd205MDgxLT5mcyk7CiAJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoY2xrX3N5c19yYXRlcyk7IGkrKykgewogCQljdXJfdmFsID0gYWJzKCh3bTkwODEtPnN5c2Nsa19yYXRlIC8KLQkJCSAgICAgICBjbGtfc3lzX3JhdGVzW2ldLnJhdGlvKSAtIHdtOTA4MS0+ZnMpOzsKKwkJCSAgICAgICBjbGtfc3lzX3JhdGVzW2ldLnJhdGlvKSAtIHdtOTA4MS0+ZnMpOwogCQlpZiAoY3VyX3ZhbCA8IGJlc3RfdmFsKSB7CiAJCQliZXN0ID0gaTsKIAkJCWJlc3RfdmFsID0gY3VyX3ZhbDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwppbmRleCBlY2EyMmQ3Li43YTA2YzBhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC01MTIsMzQgKzUxMiw0OSBAQAogCQkJCSAgICAgICBpbnQgY2hhbm5lbF9zaXplKQogewogCXUzMiBmbXQgPSAwOworCXUzMiBtYXNrLCByb3RhdGU7CiAKIAlzd2l0Y2ggKGNoYW5uZWxfc2l6ZSkgewogCWNhc2UgREFWSU5DSV9BVURJT19XT1JEXzg6CiAJCWZtdCA9IDB4MDM7CisJCXJvdGF0ZSA9IDY7CisJCW1hc2sgPSAweDAwMDAwMGZmOwogCQlicmVhazsKIAogCWNhc2UgREFWSU5DSV9BVURJT19XT1JEXzEyOgogCQlmbXQgPSAweDA1OworCQlyb3RhdGUgPSA1OworCQltYXNrID0gMHgwMDAwMGZmZjsKIAkJYnJlYWs7CiAKIAljYXNlIERBVklOQ0lfQVVESU9fV09SRF8xNjoKIAkJZm10ID0gMHgwNzsKKwkJcm90YXRlID0gNDsKKwkJbWFzayA9IDB4MDAwMGZmZmY7CiAJCWJyZWFrOwogCiAJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMjA6CiAJCWZtdCA9IDB4MDk7CisJCXJvdGF0ZSA9IDM7CisJCW1hc2sgPSAweDAwMGZmZmZmOwogCQlicmVhazsKIAogCWNhc2UgREFWSU5DSV9BVURJT19XT1JEXzI0OgogCQlmbXQgPSAweDBCOworCQlyb3RhdGUgPSAyOworCQltYXNrID0gMHgwMGZmZmZmZjsKIAkJYnJlYWs7CiAKIAljYXNlIERBVklOQ0lfQVVESU9fV09SRF8yODoKIAkJZm10ID0gMHgwRDsKKwkJcm90YXRlID0gMTsKKwkJbWFzayA9IDB4MGZmZmZmZmY7CiAJCWJyZWFrOwogCiAJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMzI6CiAJCWZtdCA9IDB4MEY7CisJCXJvdGF0ZSA9IDA7CisJCW1hc2sgPSAweGZmZmZmZmZmOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC01NTAsNiArNTY1LDEzIEBACiAJCQkJCVJYU1NaKGZtdCksIFJYU1NaKDB4MEYpKTsKIAltY2FzcF9tb2RfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1UX1JFRywKIAkJCQkJVFhTU1ooZm10KSwgVFhTU1ooMHgwRikpOworCW1jYXNwX21vZF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhGTVRfUkVHLCBUWFJPVChyb3RhdGUpLAorCQkJCQkJCVRYUk9UKDcpKTsKKwltY2FzcF9tb2RfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JYRk1UX1JFRywgUlhST1Qocm90YXRlKSwKKwkJCQkJCQlSWFJPVCg3KSk7CisJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYTUFTS19SRUcsIG1hc2spOworCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWE1BU0tfUkVHLCBtYXNrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02MzgsNyArNjYwLDYgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAicGxheWJhY2sgdGRtIHNsb3QgJWQgbm90IHN1cHBvcnRlZFxuIiwKIAkJCQlkZXYtPnRkbV9zbG90cyk7CiAKLQkJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYTUFTS19SRUcsIDB4RkZGRkZGRkYpOwogCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLCBGU1hEVVIpOwogCX0gZWxzZSB7CiAJCS8qIGJpdCBzdHJlYW0gaXMgTVNCIGZpcnN0IHdpdGggbm8gZGVsYXkgKi8KQEAgLTY1NSw3ICs2NzYsNiBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJjYXB0dXJlIHRkbSBzbG90ICVkIG5vdCBzdXBwb3J0ZWRcbiIsCiAJCQkJZGV2LT50ZG1fc2xvdHMpOwogCi0JCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWE1BU0tfUkVHLCAweEZGRkZGRkZGKTsKIAkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgRlNSRFVSKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYyBiL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jCmluZGV4IDViOWVkNjQuLmQxMWE2ZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJCWRvX2Rpdih0bXAsIGZyZXFfb3V0KTsKIAkJCXZhbCA9IHRtcDsKIAotCQkJdmFsID0gKHZhbCA8PCAxNikgfCA2NDs7CisJCQl2YWwgPSAodmFsIDw8IDE2KSB8IDY0OwogCQkJc3NwX3dyaXRlX3JlZyhzc3AsIFNTQUNERCwgdmFsKTsKIAogCQkJc3NhY2QgfD0gKDB4NiA8PCA0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggOGU3OWE0MS4uYzIxNWQzMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKQEAgLTY3LDcgKzY3LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKICNpZmRlZiBFTkZPUkNFX1JBVEVTCi0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTs7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKICNlbmRpZgogCiAJbXV0ZXhfbG9jaygmY2xrX2xvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfY29yZS5jIGIvc291bmQvc291bmRfY29yZS5jCmluZGV4IGJiNGI4OGUuLjQ5Yzk5ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvdW5kX2NvcmUuYworKysgYi9zb3VuZC9zb3VuZF9jb3JlLmMKQEAgLTI5LDcgKzI5LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkFsYW4gQ294Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBjaGFyICpzb3VuZF9ub2RlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgY2hhciAqc291bmRfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKIHsKIAlpZiAoTUFKT1IoZGV2LT5kZXZ0KSA9PSBTT1VORF9NQUpPUikKIAkJcmV0dXJuIE5VTEw7CkBAIC01MCw3ICs1MCw3IEBACiAJCXJldHVybiBQVFJfRVJSKHNvdW5kX2NsYXNzKTsKIAl9CiAKLQlzb3VuZF9jbGFzcy0+bm9kZW5hbWUgPSBzb3VuZF9ub2RlbmFtZTsKKwlzb3VuZF9jbGFzcy0+ZGV2bm9kZSA9IHNvdW5kX2Rldm5vZGU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjaGVkLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjaGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2U3OTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NoZWQudHh0CkBAIC0wLDAgKzEsNDEgQEAKK3BlcmYtc2NoZWQoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtc2NoZWQgLSBUb29sIHRvIHRyYWNlL21lYXN1cmUgc2NoZWR1bGVyIHByb3BlcnRpZXMgKGxhdGVuY2llcykKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBzY2hlZCcge3JlY29yZHxsYXRlbmN5fHJlcGxheXx0cmFjZX0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGVyZSdzIGZvdXIgdmFyaWFudHMgb2YgcGVyZiBzY2hlZDoKKworICAncGVyZiBzY2hlZCByZWNvcmQgPGNvbW1hbmQ+JyB0byByZWNvcmQgdGhlIHNjaGVkdWxpbmcgZXZlbnRzCisgIG9mIGFuIGFyYml0cmFyeSB3b3JrbG9hZC4KKworICAncGVyZiBzY2hlZCBsYXRlbmN5JyB0byByZXBvcnQgdGhlIHBlciB0YXNrIHNjaGVkdWxpbmcgbGF0ZW5jaWVzCisgIGFuZCBvdGhlciBzY2hlZHVsaW5nIHByb3BlcnRpZXMgb2YgdGhlIHdvcmtsb2FkLgorCisgICdwZXJmIHNjaGVkIHRyYWNlJyB0byBzZWUgYSBkZXRhaWxlZCB0cmFjZSBvZiB0aGUgd29ya2xvYWQgdGhhdAorICB3YXMgcmVjb3JkZWQuCisKKyAgJ3BlcmYgc2NoZWQgcmVwbGF5JyB0byBzaW11bGF0ZSB0aGUgd29ya2xvYWQgdGhhdCB3YXMgcmVjb3JkZWQKKyAgdmlhIHBlcmYgc2NoZWQgcmVjb3JkLiAodGhpcyBpcyBkb25lIGJ5IHN0YXJ0aW5nIHVwIG1vY2t1cCB0aHJlYWRzCisgIHRoYXQgbWltaWMgdGhlIHdvcmtsb2FkIGJhc2VkIG9uIHRoZSBldmVudHMgaW4gdGhlIHRyYWNlLiBUaGVzZQorICB0aHJlYWRzIGNhbiB0aGVuIHJlcGxheSB0aGUgdGltaW5ncyAoQ1BVIHJ1bnRpbWUgYW5kIHNsZWVwIHBhdHRlcm5zKQorICBvZiB0aGUgd29ya2xvYWQgYXMgaXQgb2NjdXJlZCB3aGVuIGl0IHdhcyByZWNvcmRlZCAtIGFuZCBjYW4gcmVwZWF0CisgIGl0IGEgbnVtYmVyIG9mIHRpbWVzLCBtZWFzdXJpbmcgaXRzIHBlcmZvcm1hbmNlLikKKworT1BUSU9OUworLS0tLS0tLQorLUQ6OgorLS1kdW1wLXJhdy10cmFjZT06OgorICAgICAgICBEaXNwbGF5IHZlcmJvc2UgZHVtcCBvZiB0aGUgc2NoZWQgZGF0YS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rcGVyZjpwZXJmLXJlY29yZFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyZWQzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKQEAgLTAsMCArMSwzOCBAQAorcGVyZi10aW1lY2hhcnQoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtdGltZWNoYXJ0IC0gVG9vbCB0byB2aXN1YWxpemUgdG90YWwgc3lzdGVtIGJlaGF2aW9yIGR1cmluZyBhIHdvcmtsb2FkCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgdGltZWNoYXJ0JyB7cmVjb3JkfQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0d28gdmFyaWFudHMgb2YgcGVyZiB0aW1lY2hhcnQ6CisKKyAgJ3BlcmYgdGltZWNoYXJ0IHJlY29yZCA8Y29tbWFuZD4nIHRvIHJlY29yZCB0aGUgc3lzdGVtIGxldmVsIGV2ZW50cworICBvZiBhbiBhcmJpdHJhcnkgd29ya2xvYWQuCisKKyAgJ3BlcmYgdGltZWNoYXJ0JyB0byB0dXJuIGEgdHJhY2UgaW50byBhIFNjYWxhYmxlIFZlY3RvciBHcmFwaGljcyBmaWxlLAorICB0aGF0IGNhbiBiZSB2aWV3ZWQgd2l0aCBwb3B1bGFyIFNWRyB2aWV3ZXJzIHN1Y2ggYXMgJ0lua3NjYXBlJy4KKworT1BUSU9OUworLS0tLS0tLQorLW86OgorLS1vdXRwdXQ9OjoKKyAgICAgICAgU2VsZWN0IHRoZSBvdXRwdXQgZmlsZSAoZGVmYXVsdDogb3V0cHV0LnN2ZykKKy1pOjoKKy0taW5wdXQ9OjoKKyAgICAgICAgU2VsZWN0IHRoZSBpbnB1dCBmaWxlIChkZWZhdWx0OiBwZXJmLmRhdGEpCistdzo6CistLXdpZHRoPTo6CisgICAgICAgIFNlbGVjdCB0aGUgd2lkdGggb2YgdGhlIFNWRyBmaWxlIChkZWZhdWx0OiAxMDAwKQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWVkNzUzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CkBAIC0wLDAgKzEsMjUgQEAKK3BlcmYtdHJhY2UoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtdHJhY2UgLSBSZWFkIHBlcmYuZGF0YSAoY3JlYXRlZCBieSBwZXJmIHJlY29yZCkgYW5kIGRpc3BsYXkgdHJhY2Ugb3V0cHV0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgdHJhY2UnIFstaSA8ZmlsZT4gfCAtLWlucHV0PWZpbGVdIHN5bWJvbF9uYW1lCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIHJlYWRzIHRoZSBpbnB1dCBmaWxlIGFuZCBkaXNwbGF5cyB0aGUgdHJhY2UgcmVjb3JkZWQuCisKK09QVElPTlMKKy0tLS0tLS0KKy1EOjoKKy0tZHVtcC1yYXctdHJhY2U9OjoKKyAgICAgICAgRGlzcGxheSB2ZXJib3NlIGR1bXAgb2YgdGhlIHRyYWNlIGRhdGEuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IDlmOGQyMDcuLmI1ZjE5NTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMzE4LDcgKzMxOCw3IEBACiAKIExJQl9GSUxFPWxpYnBlcmYuYQogCi1MSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCitMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9yYnRyZWUuaAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9saXN0LmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTM3MywxMyArMzczLDE2IEBACiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXBhcnNlLm8KIExJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcmVhZC5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LWluZm8ubworTElCX09CSlMgKz0gdXRpbC9zdmdoZWxwZXIubwogCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1hbm5vdGF0ZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1oZWxwLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLXNjaGVkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWxpc3QubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcmVjb3JkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlcG9ydC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1zdGF0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLXRpbWVjaGFydC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi10b3AubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdHJhY2UubwogCkBAIC03MTAsNiArNzEzLDEyIEBACiAJCSctRFBFUkZfTUFOX1BBVEg9IiQobWFuZGlyX1NRKSInIFwKIAkJJy1EUEVSRl9JTkZPX1BBVEg9IiQoaW5mb2Rpcl9TUSkiJyAkPAogCitidWlsdGluLXRpbWVjaGFydC5vOiBidWlsdGluLXRpbWVjaGFydC5jIGNvbW1vbi1jbWRzLmggUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vICQqLm8gLWMgJChBTExfQ0ZMQUdTKSBcCisJCSctRFBFUkZfSFRNTF9QQVRIPSIkKGh0bWxkaXJfU1EpIicgXAorCQknLURQRVJGX01BTl9QQVRIPSIkKG1hbmRpcl9TUSkiJyBcCisJCSctRFBFUkZfSU5GT19QQVRIPSIkKGluZm9kaXJfU1EpIicgJDwKKwogJChCVUlMVF9JTlMpOiBwZXJmJFgKIAkkKFFVSUVUX0JVSUxUX0lOKSQoUk0pICRAICYmIFwKIAlsbiBwZXJmJFggJEAgMj4vZGV2L251bGwgfHwgXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCAwNDNkODViLi4xZWM3NDE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9FVkVOVF9NSVNDX0tFUk5FTCkgeworCWlmIChldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkgewogCQlzaG93ID0gU0hPV19LRVJORUw7CiAJCWxldmVsID0gJ2snOwogCkBAIC01MTMsNyArNTEzLDcgQEAKIAogCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLCBkc28tPm5hbWUpOwogCi0JfSBlbHNlIGlmIChldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX0VWRU5UX01JU0NfVVNFUikgeworCX0gZWxzZSBpZiAoZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19VU0VSKSB7CiAKIAkJc2hvdyA9IFNIT1dfVVNFUjsKIAkJbGV2ZWwgPSAnLic7CkBAIC01NjUsNyArNTY1LDcgQEAKIAogCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPm1tYXAucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfTU1BUCAlZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX01NQVAgJWQ6IFslcCglcCkgQCAlcF06ICVzXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPm1tYXAucGlkLApAQCAtNTc1LDcgKzU3NSw3IEBACiAJCWV2ZW50LT5tbWFwLmZpbGVuYW1lKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fCBtYXAgPT0gTlVMTCkgewotCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTU5MSwxNCArNTkxLDE0IEBACiAJc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCiAJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfQ09NTTogJXM6JWRcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX0NPTU06ICVzOiVkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmNvbW0uY29tbSwgZXZlbnQtPmNvbW0ucGlkKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fAogCSAgICB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgZXZlbnQtPmNvbW0uY29tbSkpIHsKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfQ09NTSwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAl0b3RhbF9jb21tKys7CkBAIC02MTQsNyArNjE0LDcgQEAKIAogCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCXBhcmVudCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucHBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9GT1JLOiAlZDolZFxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfRk9SSzogJWQ6JWRcbiIsCiAJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAogCQlldmVudC0+Zm9yay5waWQsIGV2ZW50LT5mb3JrLnBwaWQpOwpAQCAtNjI3LDcgKzYyNyw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCF0aHJlYWQgfHwgIXBhcmVudCB8fCB0aHJlYWRfX2ZvcmsodGhyZWFkLCBwYXJlbnQpKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9GT1JLLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0ZPUkssIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJdG90YWxfZm9yaysrOwpAQCAtNjM5LDIzICs2MzksMjMgQEAKIHByb2Nlc3NfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCiB7CiAJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKLQljYXNlIFBFUkZfRVZFTlRfU0FNUExFOgorCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgogCQlyZXR1cm4gcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfTU1BUDoKKwljYXNlIFBFUkZfUkVDT1JEX01NQVA6CiAJCXJldHVybiBwcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfQ09NTToKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CiAJCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfRk9SSzoKKwljYXNlIFBFUkZfUkVDT1JEX0ZPUks6CiAJCXJldHVybiBwcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAJLyoKIAkgKiBXZSBkb250IHByb2Nlc3MgdGhlbSByaWdodCBub3cgYnV0IHRoZXkgYXJlIGZpbmU6CiAJICovCiAKLQljYXNlIFBFUkZfRVZFTlRfVEhST1RUTEU6Ci0JY2FzZSBQRVJGX0VWRU5UX1VOVEhST1RUTEU6CisJY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKKwljYXNlIFBFUkZfUkVDT1JEX1VOVEhST1RUTEU6CiAJCXJldHVybiAwOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCA5OWExMmZlLi5hNWEwNTBhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC00OCw2ICs0OCw4IEBACiBzdGF0aWMgaW50CQkJaW5oZXJpdF9zdGF0CQkJPSAwOwogc3RhdGljIGludAkJCW5vX3NhbXBsZXMJCQk9IDA7CiBzdGF0aWMgaW50CQkJc2FtcGxlX2FkZHJlc3MJCQk9IDA7CitzdGF0aWMgaW50CQkJbXVsdGlwbGV4CQkJPSAwOworc3RhdGljIGludAkJCW11bHRpcGxleF9mZAkJCT0gLTE7CiAKIHN0YXRpYyBsb25nCQkJc2FtcGxlczsKIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbAkJbGFzdF9yZWFkOwpAQCAtNzUsNyArNzcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtbWFwX3JlYWRfaGVhZChzdHJ1Y3QgbW1hcF9kYXRhICptZCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSAqcGMgPSBtZC0+YmFzZTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjID0gbWQtPmJhc2U7CiAJbG9uZyBoZWFkOwogCiAJaGVhZCA9IHBjLT5kYXRhX2hlYWQ7CkBAIC04Niw3ICs4OCw3IEBACiAKIHN0YXRpYyB2b2lkIG1tYXBfd3JpdGVfdGFpbChzdHJ1Y3QgbW1hcF9kYXRhICptZCwgdW5zaWduZWQgbG9uZyB0YWlsKQogewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfbW1hcF9wYWdlICpwYyA9IG1kLT5iYXNlOworCXN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSAqcGMgPSBtZC0+YmFzZTsKIAogCS8qCiAJICogZW5zdXJlIGFsbCByZWFkcyBhcmUgZG9uZSBiZWZvcmUgd2Ugd3JpdGUgdGhlIHRhaWwgb3V0LgpAQCAtMjMxLDcgKzIzMyw3IEBACiAJCX0KIAl9CiAKLQljb21tX2V2LmhlYWRlci50eXBlID0gUEVSRl9FVkVOVF9DT01NOworCWNvbW1fZXYuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9DT01NOwogCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7CiAJY29tbV9ldi5oZWFkZXIuc2l6ZSA9IHNpemVvZihjb21tX2V2KSAtIChzaXplb2YoY29tbV9ldi5jb21tKSAtIHNpemUpOwogCkBAIC0yODYsNyArMjg4LDcgQEAKIAl3aGlsZSAoMSkgewogCQljaGFyIGJmW0JVRlNJWl0sICpwYmYgPSBiZjsKIAkJc3RydWN0IG1tYXBfZXZlbnQgbW1hcF9ldiA9IHsKLQkJCS5oZWFkZXIgPSB7IC50eXBlID0gUEVSRl9FVkVOVF9NTUFQIH0sCisJCQkuaGVhZGVyID0geyAudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAgfSwKIAkJfTsKIAkJaW50IG47CiAJCXNpemVfdCBzaXplOwpAQCAtMzUzLDcgKzM1NSw3IEBACiAKIHN0YXRpYyBpbnQgZ3JvdXBfZmQ7CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqZ2V0X2hlYWRlcl9hdHRyKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYSwgaW50IG5yKQorc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpnZXRfaGVhZGVyX2F0dHIoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYSwgaW50IG5yKQogewogCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpoX2F0dHI7CiAKQEAgLTM2OSw3ICszNzEsNyBAQAogCiBzdGF0aWMgdm9pZCBjcmVhdGVfY291bnRlcihpbnQgY291bnRlciwgaW50IGNwdSwgcGlkX3QgcGlkKQogewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0ciA9IGF0dHJzICsgY291bnRlcjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gYXR0cnMgKyBjb3VudGVyOwogCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpoX2F0dHI7CiAJaW50IHRyYWNrID0gIWNvdW50ZXI7IC8qIG9ubHkgdGhlIGZpcnN0IGNvdW50ZXIgbmVlZHMgdGhlc2UgKi8KIAlzdHJ1Y3QgewpAQCAtNDE1LDcgKzQxNyw3IEBACiAJYXR0ci0+ZGlzYWJsZWQJCT0gMTsKIAogdHJ5X2FnYWluOgotCWZkW25yX2NwdV1bY291bnRlcl0gPSBzeXNfcGVyZl9jb3VudGVyX29wZW4oYXR0ciwgcGlkLCBjcHUsIGdyb3VwX2ZkLCAwKTsKKwlmZFtucl9jcHVdW2NvdW50ZXJdID0gc3lzX3BlcmZfZXZlbnRfb3BlbihhdHRyLCBwaWQsIGNwdSwgZ3JvdXBfZmQsIDApOwogCiAJaWYgKGZkW25yX2NwdV1bY291bnRlcl0gPCAwKSB7CiAJCWludCBlcnIgPSBlcnJubzsKQEAgLTQ0Miw3ICs0NDQsNyBAQAogCQlwcmludGYoIlxuIik7CiAJCWVycm9yKCJwZXJmY291bnRlciBzeXNjYWxsIHJldHVybmVkIHdpdGggJWQgKCVzKVxuIiwKIAkJCWZkW25yX2NwdV1bY291bnRlcl0sIHN0cmVycm9yKGVycikpOwotCQlkaWUoIk5vIENPTkZJR19QRVJGX0NPVU5URVJTPXkga2VybmVsIHN1cHBvcnQgY29uZmlndXJlZD9cbiIpOworCQlkaWUoIk5vIENPTkZJR19QRVJGX0VWRU5UUz15IGtlcm5lbCBzdXBwb3J0IGNvbmZpZ3VyZWQ/XG4iKTsKIAkJZXhpdCgtMSk7CiAJfQogCkBAIC00NzAsMjIgKzQ3MiwzMSBAQAogCSAqLwogCWlmIChncm91cCAmJiBncm91cF9mZCA9PSAtMSkKIAkJZ3JvdXBfZmQgPSBmZFtucl9jcHVdW2NvdW50ZXJdOworCWlmIChtdWx0aXBsZXggJiYgbXVsdGlwbGV4X2ZkID09IC0xKQorCQltdWx0aXBsZXhfZmQgPSBmZFtucl9jcHVdW2NvdW50ZXJdOwogCi0JZXZlbnRfYXJyYXlbbnJfcG9sbF0uZmQgPSBmZFtucl9jcHVdW2NvdW50ZXJdOwotCWV2ZW50X2FycmF5W25yX3BvbGxdLmV2ZW50cyA9IFBPTExJTjsKLQlucl9wb2xsKys7CisJaWYgKG11bHRpcGxleCAmJiBmZFtucl9jcHVdW2NvdW50ZXJdICE9IG11bHRpcGxleF9mZCkgeworCQlpbnQgcmV0OwogCi0JbW1hcF9hcnJheVtucl9jcHVdW2NvdW50ZXJdLmNvdW50ZXIgPSBjb3VudGVyOwotCW1tYXBfYXJyYXlbbnJfY3B1XVtjb3VudGVyXS5wcmV2ID0gMDsKLQltbWFwX2FycmF5W25yX2NwdV1bY291bnRlcl0ubWFzayA9IG1tYXBfcGFnZXMqcGFnZV9zaXplIC0gMTsKLQltbWFwX2FycmF5W25yX2NwdV1bY291bnRlcl0uYmFzZSA9IG1tYXAoTlVMTCwgKG1tYXBfcGFnZXMrMSkqcGFnZV9zaXplLAotCQkJUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkW25yX2NwdV1bY291bnRlcl0sIDApOwotCWlmIChtbWFwX2FycmF5W25yX2NwdV1bY291bnRlcl0uYmFzZSA9PSBNQVBfRkFJTEVEKSB7Ci0JCWVycm9yKCJmYWlsZWQgdG8gbW1hcCB3aXRoICVkICglcylcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwotCQlleGl0KC0xKTsKKwkJcmV0ID0gaW9jdGwoZmRbbnJfY3B1XVtjb3VudGVyXSwgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCwgbXVsdGlwbGV4X2ZkKTsKKwkJYXNzZXJ0KHJldCAhPSAtMSk7CisJfSBlbHNlIHsKKwkJZXZlbnRfYXJyYXlbbnJfcG9sbF0uZmQgPSBmZFtucl9jcHVdW2NvdW50ZXJdOworCQlldmVudF9hcnJheVtucl9wb2xsXS5ldmVudHMgPSBQT0xMSU47CisJCW5yX3BvbGwrKzsKKworCQltbWFwX2FycmF5W25yX2NwdV1bY291bnRlcl0uY291bnRlciA9IGNvdW50ZXI7CisJCW1tYXBfYXJyYXlbbnJfY3B1XVtjb3VudGVyXS5wcmV2ID0gMDsKKwkJbW1hcF9hcnJheVtucl9jcHVdW2NvdW50ZXJdLm1hc2sgPSBtbWFwX3BhZ2VzKnBhZ2Vfc2l6ZSAtIDE7CisJCW1tYXBfYXJyYXlbbnJfY3B1XVtjb3VudGVyXS5iYXNlID0gbW1hcChOVUxMLCAobW1hcF9wYWdlcysxKSpwYWdlX3NpemUsCisJCQkJUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkW25yX2NwdV1bY291bnRlcl0sIDApOworCQlpZiAobW1hcF9hcnJheVtucl9jcHVdW2NvdW50ZXJdLmJhc2UgPT0gTUFQX0ZBSUxFRCkgeworCQkJZXJyb3IoImZhaWxlZCB0byBtbWFwIHdpdGggJWQgKCVzKVxuIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJCQlleGl0KC0xKTsKKwkJfQogCX0KIAotCWlvY3RsKGZkW25yX2NwdV1bY291bnRlcl0sIFBFUkZfQ09VTlRFUl9JT0NfRU5BQkxFKTsKKwlpb2N0bChmZFtucl9jcHVdW2NvdW50ZXJdLCBQRVJGX0VWRU5UX0lPQ19FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZCBvcGVuX2NvdW50ZXJzKGludCBjcHUsIHBpZF90IHBpZCkKQEAgLTUxMyw2ICs1MjQsNyBAQAogCXBpZF90IHBpZCA9IDA7CiAJaW50IGZsYWdzOwogCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB3YWtpbmcgPSAwOwogCiAJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKIAlucl9jcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CkBAIC02MTQsMTcgKzYyNiwyOSBAQAogCQlpbnQgaGl0cyA9IHNhbXBsZXM7CiAKIAkJZm9yIChpID0gMDsgaSA8IG5yX2NwdTsgaSsrKSB7Ci0JCQlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKLQkJCQltbWFwX3JlYWQoJm1tYXBfYXJyYXlbaV1bY291bnRlcl0pOworCQkJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspIHsKKwkJCQlpZiAobW1hcF9hcnJheVtpXVtjb3VudGVyXS5iYXNlKQorCQkJCQltbWFwX3JlYWQoJm1tYXBfYXJyYXlbaV1bY291bnRlcl0pOworCQkJfQogCQl9CiAKIAkJaWYgKGhpdHMgPT0gc2FtcGxlcykgewogCQkJaWYgKGRvbmUpCiAJCQkJYnJlYWs7Ci0JCQlyZXQgPSBwb2xsKGV2ZW50X2FycmF5LCBucl9wb2xsLCAxMDApOworCQkJcmV0ID0gcG9sbChldmVudF9hcnJheSwgbnJfcG9sbCwgLTEpOworCQkJd2FraW5nKys7CisJCX0KKworCQlpZiAoZG9uZSkgeworCQkJZm9yIChpID0gMDsgaSA8IG5yX2NwdTsgaSsrKSB7CisJCQkJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCisJCQkJCWlvY3RsKGZkW2ldW2NvdW50ZXJdLCBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFKTsKKwkJCX0KIAkJfQogCX0KIAorCWZwcmludGYoc3RkZXJyLCAiWyBwZXJmIHJlY29yZDogV29rZW4gdXAgJWxkIHRpbWVzIHRvIHdyaXRlIGRhdGEgXVxuIiwgd2FraW5nKTsKKwogCS8qCiAJICogQXBwcm94aW1hdGUgUklQIGV2ZW50IHNpemU6IDI0IGJ5dGVzLgogCSAqLwpAQCAtNjgxLDYgKzcwNSw4IEBACiAJCSAgICAiU2FtcGxlIGFkZHJlc3NlcyIpLAogCU9QVF9CT09MRUFOKCduJywgIm5vLXNhbXBsZXMiLCAmbm9fc2FtcGxlcywKIAkJICAgICJkb24ndCBzYW1wbGUiKSwKKwlPUFRfQk9PTEVBTignTScsICJtdWx0aXBsZXgiLCAmbXVsdGlwbGV4LAorCQkgICAgIm11bHRpcGxleCBjb3VudGVyIG91dHB1dCBpbiBhIHNpbmdsZSBjaGFubmVsIiksCiAJT1BUX0VORCgpCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggY2RmOWE4ZC4uMTk2NjljMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMTEyMSw3ICsxMTIxLDcgQEAKIAkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOwogCX0KIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UX1NBTVBMRSAoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAorCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5oZWFkZXIubWlzYywKQEAgLTExNTgsOSArMTE1OCw5IEBACiAJaWYgKGNvbW1fbGlzdCAmJiAhc3RybGlzdF9faGFzX2VudHJ5KGNvbW1fbGlzdCwgdGhyZWFkLT5jb21tKSkKIAkJcmV0dXJuIDA7CiAKLQljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9FVkVOVF9NSVNDX0NQVU1PREVfTUFTSzsKKwljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKLQlpZiAoY3B1bW9kZSA9PSBQRVJGX0VWRU5UX01JU0NfS0VSTkVMKSB7CisJaWYgKGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKIAkJc2hvdyA9IFNIT1dfS0VSTkVMOwogCQlsZXZlbCA9ICdrJzsKIApAQCAtMTE2OCw3ICsxMTY4LDcgQEAKIAogCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLCBkc28tPm5hbWUpOwogCi0JfSBlbHNlIGlmIChjcHVtb2RlID09IFBFUkZfRVZFTlRfTUlTQ19VU0VSKSB7CisJfSBlbHNlIGlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUikgewogCiAJCXNob3cgPSBTSE9XX1VTRVI7CiAJCWxldmVsID0gJy4nOwpAQCAtMTIxMCw3ICsxMjEwLDcgQEAKIAogCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPm1tYXAucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfTU1BUCAlZC8lZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX01NQVAgJWQvJWQ6IFslcCglcCkgQCAlcF06ICVzXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPm1tYXAucGlkLApAQCAtMTIyMSw3ICsxMjIxLDcgQEAKIAkJZXZlbnQtPm1tYXAuZmlsZW5hbWUpOwogCiAJaWYgKHRocmVhZCA9PSBOVUxMIHx8IG1hcCA9PSBOVUxMKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX01NQVAsIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTIzOCwxNCArMTIzOCwxNCBAQAogCiAJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CiAKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9DT01NOiAlczolZFxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfQ09NTTogJXM6JWRcbiIsCiAJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAogCQlldmVudC0+Y29tbS5jb21tLCBldmVudC0+Y29tbS5waWQpOwogCiAJaWYgKHRocmVhZCA9PSBOVUxMIHx8CiAJICAgIHRocmVhZF9fc2V0X2NvbW1fYWRqdXN0KHRocmVhZCwgZXZlbnQtPmNvbW0uY29tbSkpIHsKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfQ09NTSwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAl0b3RhbF9jb21tKys7CkBAIC0xMjYyLDEwICsxMjYyLDEwIEBACiAJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CiAJcGFyZW50ID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5wcGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfJXM6ICglZDolZCk6KCVkOiVkKVxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfJXM6ICglZDolZCk6KCVkOiVkKVxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCWV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX0VWRU5UX0ZPUksgPyAiRk9SSyIgOiAiRVhJVCIsCisJCWV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9GT1JLID8gIkZPUksiIDogIkVYSVQiLAogCQlldmVudC0+Zm9yay5waWQsIGV2ZW50LT5mb3JrLnRpZCwKIAkJZXZlbnQtPmZvcmsucHBpZCwgZXZlbnQtPmZvcmsucHRpZCk7CiAKQEAgLTEyNzYsMTEgKzEyNzYsMTEgQEAKIAlpZiAodGhyZWFkID09IHBhcmVudCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZXZlbnQtPmhlYWRlci50eXBlID09IFBFUkZfRVZFTlRfRVhJVCkKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX0VYSVQpCiAJCXJldHVybiAwOwogCiAJaWYgKCF0aHJlYWQgfHwgIXBhcmVudCB8fCB0aHJlYWRfX2ZvcmsodGhyZWFkLCBwYXJlbnQpKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9GT1JLLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0ZPUkssIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJdG90YWxfZm9yaysrOwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIHN0YXRpYyBpbnQKIHByb2Nlc3NfbG9zdF9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKIHsKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9MT1NUOiBpZDolTGQ6IGxvc3Q6JUxkXG4iLAorCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9MT1NUOiBpZDolTGQ6IGxvc3Q6JUxkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmxvc3QuaWQsCkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogc3RhdGljIGludAogcHJvY2Vzc19yZWFkX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyOwogCiAJYXR0ciA9IHBlcmZfaGVhZGVyX19maW5kX2F0dHIoZXZlbnQtPnJlYWQuaWQsIGhlYWRlcik7CiAKQEAgLTEzMTksNyArMTMxOSw3IEBACiAJCQkJCSAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIAl9CiAKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9SRUFEOiAlZCAlZCAlcyAlTHVcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX1JFQUQ6ICVkICVkICVzICVMdVxuIiwKIAkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJCWV2ZW50LT5yZWFkLnBpZCwKQEAgLTEzMzcsMzEgKzEzMzcsMzEgQEAKIAl0cmFjZV9ldmVudChldmVudCk7CiAKIAlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewotCWNhc2UgUEVSRl9FVkVOVF9TQU1QTEU6CisJY2FzZSBQRVJGX1JFQ09SRF9TQU1QTEU6CiAJCXJldHVybiBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKIAotCWNhc2UgUEVSRl9FVkVOVF9NTUFQOgorCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKIAkJcmV0dXJuIHByb2Nlc3NfbW1hcF9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKIAotCWNhc2UgUEVSRl9FVkVOVF9DT01NOgorCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKIAkJcmV0dXJuIHByb2Nlc3NfY29tbV9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKIAotCWNhc2UgUEVSRl9FVkVOVF9GT1JLOgotCWNhc2UgUEVSRl9FVkVOVF9FWElUOgorCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKKwljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6CiAJCXJldHVybiBwcm9jZXNzX3Rhc2tfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfTE9TVDoKKwljYXNlIFBFUkZfUkVDT1JEX0xPU1Q6CiAJCXJldHVybiBwcm9jZXNzX2xvc3RfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfUkVBRDoKKwljYXNlIFBFUkZfUkVDT1JEX1JFQUQ6CiAJCXJldHVybiBwcm9jZXNzX3JlYWRfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKIAkvKgogCSAqIFdlIGRvbnQgcHJvY2VzcyB0aGVtIHJpZ2h0IG5vdyBidXQgdGhleSBhcmUgZmluZToKIAkgKi8KIAotCWNhc2UgUEVSRl9FVkVOVF9USFJPVFRMRToKLQljYXNlIFBFUkZfRVZFTlRfVU5USFJPVFRMRToKKwljYXNlIFBFUkZfUkVDT1JEX1RIUk9UVExFOgorCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKIAkJcmV0dXJuIDA7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTljMTVjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKQEAgLTAsMCArMSwyMDA0IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBlcmYuaCIKKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKworI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKKworI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorCisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworc3RhdGljIGNoYXIJCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOworc3RhdGljIGludAkJCWlucHV0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcJCXBhZ2Vfc2l6ZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQltbWFwX3dpbmRvdyA9IDMyOworCitzdGF0aWMgdW5zaWduZWQgbG9uZwkJdG90YWxfY29tbSA9IDA7CisKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdAkJdGhyZWFkczsKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkCQkqbGFzdF9tYXRjaDsKKworc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOworc3RhdGljIHU2NAkJCXNhbXBsZV90eXBlOworCitzdGF0aWMgY2hhcgkJCWRlZmF1bHRfc29ydF9vcmRlcltdID0gImF2ZywgbWF4LCBzd2l0Y2gsIHJ1bnRpbWUiOworc3RhdGljIGNoYXIJCQkqc29ydF9vcmRlciA9IGRlZmF1bHRfc29ydF9vcmRlcjsKKworI2RlZmluZSBQUl9TRVRfTkFNRQkJMTUgICAgICAgICAgICAgICAvKiBTZXQgcHJvY2VzcyBuYW1lICovCisjZGVmaW5lIE1BWF9DUFVTCQk0MDk2CisKKyNkZWZpbmUgQlVHX09OKHgpCQlhc3NlcnQoISh4KSkKKworc3RhdGljIHU2NAkJCXJ1bl9tZWFzdXJlbWVudF9vdmVyaGVhZDsKK3N0YXRpYyB1NjQJCQlzbGVlcF9tZWFzdXJlbWVudF9vdmVyaGVhZDsKKworI2RlZmluZSBDT01NX0xFTgkJMjAKKyNkZWZpbmUgU1lNX0xFTgkJCTEyOQorCisjZGVmaW5lIE1BWF9QSUQJCQk2NTUzNgorCitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfdGFza3M7CisKK3N0cnVjdCBzY2hlZF9hdG9tOworCitzdHJ1Y3QgdGFza19kZXNjIHsKKwl1bnNpZ25lZCBsb25nCQlucjsKKwl1bnNpZ25lZCBsb25nCQlwaWQ7CisJY2hhcgkJCWNvbW1bQ09NTV9MRU5dOworCisJdW5zaWduZWQgbG9uZwkJbnJfZXZlbnRzOworCXVuc2lnbmVkIGxvbmcJCWN1cnJfZXZlbnQ7CisJc3RydWN0IHNjaGVkX2F0b20JKiphdG9tczsKKworCXB0aHJlYWRfdAkJdGhyZWFkOworCXNlbV90CQkJc2xlZXBfc2VtOworCisJc2VtX3QJCQlyZWFkeV9mb3Jfd29yazsKKwlzZW1fdAkJCXdvcmtfZG9uZV9zZW07CisKKwl1NjQJCQljcHVfdXNhZ2U7Cit9OworCitlbnVtIHNjaGVkX2V2ZW50X3R5cGUgeworCVNDSEVEX0VWRU5UX1JVTiwKKwlTQ0hFRF9FVkVOVF9TTEVFUCwKKwlTQ0hFRF9FVkVOVF9XQUtFVVAsCit9OworCitzdHJ1Y3Qgc2NoZWRfYXRvbSB7CisJZW51bSBzY2hlZF9ldmVudF90eXBlCXR5cGU7CisJdTY0CQkJdGltZXN0YW1wOworCXU2NAkJCWR1cmF0aW9uOworCXVuc2lnbmVkIGxvbmcJCW5yOworCWludAkJCXNwZWNpZmljX3dhaXQ7CisJc2VtX3QJCQkqd2FpdF9zZW07CisJc3RydWN0IHRhc2tfZGVzYwkqd2FrZWU7Cit9OworCitzdGF0aWMgc3RydWN0IHRhc2tfZGVzYwkJKnBpZF90b190YXNrW01BWF9QSURdOworCitzdGF0aWMgc3RydWN0IHRhc2tfZGVzYwkJKip0YXNrczsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdAkJc3RhcnRfd29ya19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgdTY0CQkJc3RhcnRfdGltZTsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdAkJd29ya19kb25lX3dhaXRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfcnVuX2V2ZW50czsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9zbGVlcF9ldmVudHM7CitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfd2FrZXVwX2V2ZW50czsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3NsZWVwX2NvcnJlY3Rpb25zOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3J1bl9ldmVudHNfb3B0aW1pemVkOworCitzdGF0aWMgdW5zaWduZWQgbG9uZwkJdGFyZ2V0bGVzc193YWtldXBzOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW11bHRpdGFyZ2V0X3dha2V1cHM7CisKK3N0YXRpYyB1NjQJCQljcHVfdXNhZ2U7CitzdGF0aWMgdTY0CQkJcnVuYXZnX2NwdV91c2FnZTsKK3N0YXRpYyB1NjQJCQlwYXJlbnRfY3B1X3VzYWdlOworc3RhdGljIHU2NAkJCXJ1bmF2Z19wYXJlbnRfY3B1X3VzYWdlOworCitzdGF0aWMgdW5zaWduZWQgbG9uZwkJbnJfcnVuczsKK3N0YXRpYyB1NjQJCQlzdW1fcnVudGltZTsKK3N0YXRpYyB1NjQJCQlzdW1fZmx1Y3Q7CitzdGF0aWMgdTY0CQkJcnVuX2F2ZzsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcJCXJlcGxheV9yZXBlYXQgPSAxMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl90aW1lc3RhbXBzOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3Vub3JkZXJlZF90aW1lc3RhbXBzOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX3N0YXRlX21hY2hpbmVfYnVnczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9jb250ZXh0X3N3aXRjaF9idWdzOworc3RhdGljIHVuc2lnbmVkIGxvbmcJCW5yX2V2ZW50czsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9sb3N0X2NodW5rczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQlucl9sb3N0X2V2ZW50czsKKworI2RlZmluZSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSICJSU0RUdFpYIgorCitlbnVtIHRocmVhZF9zdGF0ZSB7CisJVEhSRUFEX1NMRUVQSU5HID0gMCwKKwlUSFJFQURfV0FJVF9DUFUsCisJVEhSRUFEX1NDSEVEX0lOLAorCVRIUkVBRF9JR05PUkUKK307CisKK3N0cnVjdCB3b3JrX2F0b20geworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwllbnVtIHRocmVhZF9zdGF0ZQlzdGF0ZTsKKwl1NjQJCQlzY2hlZF9vdXRfdGltZTsKKwl1NjQJCQl3YWtlX3VwX3RpbWU7CisJdTY0CQkJc2NoZWRfaW5fdGltZTsKKwl1NjQJCQlydW50aW1lOworfTsKKworc3RydWN0IHdvcmtfYXRvbXMgeworCXN0cnVjdCBsaXN0X2hlYWQJd29ya19saXN0OworCXN0cnVjdCB0aHJlYWQJCSp0aHJlYWQ7CisJc3RydWN0IHJiX25vZGUJCW5vZGU7CisJdTY0CQkJbWF4X2xhdDsKKwl1NjQJCQl0b3RhbF9sYXQ7CisJdTY0CQkJbmJfYXRvbXM7CisJdTY0CQkJdG90YWxfcnVudGltZTsKK307CisKK3R5cGVkZWYgaW50ICgqc29ydF9mbl90KShzdHJ1Y3Qgd29ya19hdG9tcyAqLCBzdHJ1Y3Qgd29ya19hdG9tcyAqKTsKKworc3RhdGljIHN0cnVjdCByYl9yb290CQlhdG9tX3Jvb3QsIHNvcnRlZF9hdG9tX3Jvb3Q7CisKK3N0YXRpYyB1NjQJCQlhbGxfcnVudGltZTsKK3N0YXRpYyB1NjQJCQlhbGxfY291bnQ7CisKKworc3RhdGljIHU2NCBnZXRfbnNlY3Modm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKTsKKworCXJldHVybiB0cy50dl9zZWMgKiAxMDAwMDAwMDAwVUxMICsgdHMudHZfbnNlYzsKK30KKworc3RhdGljIHZvaWQgYnVybl9uc2Vjcyh1NjQgbnNlY3MpCit7CisJdTY0IFQwID0gZ2V0X25zZWNzKCksIFQxOworCisJZG8geworCQlUMSA9IGdldF9uc2VjcygpOworCX0gd2hpbGUgKFQxICsgcnVuX21lYXN1cmVtZW50X292ZXJoZWFkIDwgVDAgKyBuc2Vjcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNsZWVwX25zZWNzKHU2NCBuc2VjcykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKwl0cy50dl9uc2VjID0gbnNlY3MgJSA5OTk5OTk5OTk7CisJdHMudHZfc2VjID0gbnNlY3MgLyA5OTk5OTk5OTk7CisKKwluYW5vc2xlZXAoJnRzLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY2FsaWJyYXRlX3J1bl9tZWFzdXJlbWVudF9vdmVyaGVhZCh2b2lkKQoreworCXU2NCBUMCwgVDEsIGRlbHRhLCBtaW5fZGVsdGEgPSAxMDAwMDAwMDAwVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJVDAgPSBnZXRfbnNlY3MoKTsKKwkJYnVybl9uc2VjcygwKTsKKwkJVDEgPSBnZXRfbnNlY3MoKTsKKwkJZGVsdGEgPSBUMS1UMDsKKwkJbWluX2RlbHRhID0gbWluKG1pbl9kZWx0YSwgZGVsdGEpOworCX0KKwlydW5fbWVhc3VyZW1lbnRfb3ZlcmhlYWQgPSBtaW5fZGVsdGE7CisKKwlwcmludGYoInJ1biBtZWFzdXJlbWVudCBvdmVyaGVhZDogJUxkIG5zZWNzXG4iLCBtaW5fZGVsdGEpOworfQorCitzdGF0aWMgdm9pZCBjYWxpYnJhdGVfc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQodm9pZCkKK3sKKwl1NjQgVDAsIFQxLCBkZWx0YSwgbWluX2RlbHRhID0gMTAwMDAwMDAwMFVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCVQwID0gZ2V0X25zZWNzKCk7CisJCXNsZWVwX25zZWNzKDEwMDAwKTsKKwkJVDEgPSBnZXRfbnNlY3MoKTsKKwkJZGVsdGEgPSBUMS1UMDsKKwkJbWluX2RlbHRhID0gbWluKG1pbl9kZWx0YSwgZGVsdGEpOworCX0KKwltaW5fZGVsdGEgLT0gMTAwMDA7CisJc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQgPSBtaW5fZGVsdGE7CisKKwlwcmludGYoInNsZWVwIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlTGQgbnNlY3NcbiIsIG1pbl9kZWx0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfYXRvbSAqCitnZXRfbmV3X2V2ZW50KHN0cnVjdCB0YXNrX2Rlc2MgKnRhc2ssIHU2NCB0aW1lc3RhbXApCit7CisJc3RydWN0IHNjaGVkX2F0b20gKmV2ZW50ID0gY2FsbG9jKDEsIHNpemVvZigqZXZlbnQpKTsKKwl1bnNpZ25lZCBsb25nIGlkeCA9IHRhc2stPm5yX2V2ZW50czsKKwlzaXplX3Qgc2l6ZTsKKworCWV2ZW50LT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJZXZlbnQtPm5yID0gaWR4OworCisJdGFzay0+bnJfZXZlbnRzKys7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2NoZWRfYXRvbSAqKSAqIHRhc2stPm5yX2V2ZW50czsKKwl0YXNrLT5hdG9tcyA9IHJlYWxsb2ModGFzay0+YXRvbXMsIHNpemUpOworCUJVR19PTighdGFzay0+YXRvbXMpOworCisJdGFzay0+YXRvbXNbaWR4XSA9IGV2ZW50OworCisJcmV0dXJuIGV2ZW50OworfQorCitzdGF0aWMgc3RydWN0IHNjaGVkX2F0b20gKmxhc3RfZXZlbnQoc3RydWN0IHRhc2tfZGVzYyAqdGFzaykKK3sKKwlpZiAoIXRhc2stPm5yX2V2ZW50cykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdGFzay0+YXRvbXNbdGFzay0+bnJfZXZlbnRzIC0gMV07Cit9CisKK3N0YXRpYyB2b2lkCithZGRfc2NoZWRfZXZlbnRfcnVuKHN0cnVjdCB0YXNrX2Rlc2MgKnRhc2ssIHU2NCB0aW1lc3RhbXAsIHU2NCBkdXJhdGlvbikKK3sKKwlzdHJ1Y3Qgc2NoZWRfYXRvbSAqZXZlbnQsICpjdXJyX2V2ZW50ID0gbGFzdF9ldmVudCh0YXNrKTsKKworCS8qCisJICogb3B0aW1pemUgYW4gZXhpc3RpbmcgUlVOIGV2ZW50IGJ5IG1lcmdpbmcgdGhpcyBvbmUKKwkgKiB0byBpdDoKKwkgKi8KKwlpZiAoY3Vycl9ldmVudCAmJiBjdXJyX2V2ZW50LT50eXBlID09IFNDSEVEX0VWRU5UX1JVTikgeworCQlucl9ydW5fZXZlbnRzX29wdGltaXplZCsrOworCQljdXJyX2V2ZW50LT5kdXJhdGlvbiArPSBkdXJhdGlvbjsKKwkJcmV0dXJuOworCX0KKworCWV2ZW50ID0gZ2V0X25ld19ldmVudCh0YXNrLCB0aW1lc3RhbXApOworCisJZXZlbnQtPnR5cGUgPSBTQ0hFRF9FVkVOVF9SVU47CisJZXZlbnQtPmR1cmF0aW9uID0gZHVyYXRpb247CisKKwlucl9ydW5fZXZlbnRzKys7Cit9CisKK3N0YXRpYyB2b2lkCithZGRfc2NoZWRfZXZlbnRfd2FrZXVwKHN0cnVjdCB0YXNrX2Rlc2MgKnRhc2ssIHU2NCB0aW1lc3RhbXAsCisJCSAgICAgICBzdHJ1Y3QgdGFza19kZXNjICp3YWtlZSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfYXRvbSAqZXZlbnQsICp3YWtlZV9ldmVudDsKKworCWV2ZW50ID0gZ2V0X25ld19ldmVudCh0YXNrLCB0aW1lc3RhbXApOworCWV2ZW50LT50eXBlID0gU0NIRURfRVZFTlRfV0FLRVVQOworCWV2ZW50LT53YWtlZSA9IHdha2VlOworCisJd2FrZWVfZXZlbnQgPSBsYXN0X2V2ZW50KHdha2VlKTsKKwlpZiAoIXdha2VlX2V2ZW50IHx8IHdha2VlX2V2ZW50LT50eXBlICE9IFNDSEVEX0VWRU5UX1NMRUVQKSB7CisJCXRhcmdldGxlc3Nfd2FrZXVwcysrOworCQlyZXR1cm47CisJfQorCWlmICh3YWtlZV9ldmVudC0+d2FpdF9zZW0pIHsKKwkJbXVsdGl0YXJnZXRfd2FrZXVwcysrOworCQlyZXR1cm47CisJfQorCisJd2FrZWVfZXZlbnQtPndhaXRfc2VtID0gY2FsbG9jKDEsIHNpemVvZigqd2FrZWVfZXZlbnQtPndhaXRfc2VtKSk7CisJc2VtX2luaXQod2FrZWVfZXZlbnQtPndhaXRfc2VtLCAwLCAwKTsKKwl3YWtlZV9ldmVudC0+c3BlY2lmaWNfd2FpdCA9IDE7CisJZXZlbnQtPndhaXRfc2VtID0gd2FrZWVfZXZlbnQtPndhaXRfc2VtOworCisJbnJfd2FrZXVwX2V2ZW50cysrOworfQorCitzdGF0aWMgdm9pZAorYWRkX3NjaGVkX2V2ZW50X3NsZWVwKHN0cnVjdCB0YXNrX2Rlc2MgKnRhc2ssIHU2NCB0aW1lc3RhbXAsCisJCSAgICAgIHU2NCB0YXNrX3N0YXRlIF9fdXNlZCkKK3sKKwlzdHJ1Y3Qgc2NoZWRfYXRvbSAqZXZlbnQgPSBnZXRfbmV3X2V2ZW50KHRhc2ssIHRpbWVzdGFtcCk7CisKKwlldmVudC0+dHlwZSA9IFNDSEVEX0VWRU5UX1NMRUVQOworCisJbnJfc2xlZXBfZXZlbnRzKys7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19kZXNjICpyZWdpc3Rlcl9waWQodW5zaWduZWQgbG9uZyBwaWQsIGNvbnN0IGNoYXIgKmNvbW0pCit7CisJc3RydWN0IHRhc2tfZGVzYyAqdGFzazsKKworCUJVR19PTihwaWQgPj0gTUFYX1BJRCk7CisKKwl0YXNrID0gcGlkX3RvX3Rhc2tbcGlkXTsKKworCWlmICh0YXNrKQorCQlyZXR1cm4gdGFzazsKKworCXRhc2sgPSBjYWxsb2MoMSwgc2l6ZW9mKCp0YXNrKSk7CisJdGFzay0+cGlkID0gcGlkOworCXRhc2stPm5yID0gbnJfdGFza3M7CisJc3RyY3B5KHRhc2stPmNvbW0sIGNvbW0pOworCS8qCisJICogZXZlcnkgdGFzayBzdGFydHMgaW4gc2xlZXBpbmcgc3RhdGUgLSB0aGlzIGdldHMgaWdub3JlZAorCSAqIGlmIHRoZXJlJ3Mgbm8gd2FrZXVwIHBvaW50aW5nIHRvIHRoaXMgc2xlZXAgc3RhdGU6CisJICovCisJYWRkX3NjaGVkX2V2ZW50X3NsZWVwKHRhc2ssIDAsIDApOworCisJcGlkX3RvX3Rhc2tbcGlkXSA9IHRhc2s7CisJbnJfdGFza3MrKzsKKwl0YXNrcyA9IHJlYWxsb2ModGFza3MsIG5yX3Rhc2tzKnNpemVvZihzdHJ1Y3QgdGFza190YXNrICopKTsKKwlCVUdfT04oIXRhc2tzKTsKKwl0YXNrc1t0YXNrLT5ucl0gPSB0YXNrOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ZigicmVnaXN0ZXJlZCB0YXNrICMlbGQsIFBJRCAlbGQgKCVzKVxuIiwgbnJfdGFza3MsIHBpZCwgY29tbSk7CisKKwlyZXR1cm4gdGFzazsKK30KKworCitzdGF0aWMgdm9pZCBwcmludF90YXNrX3RyYWNlcyh2b2lkKQoreworCXN0cnVjdCB0YXNrX2Rlc2MgKnRhc2s7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3Rhc2tzOyBpKyspIHsKKwkJdGFzayA9IHRhc2tzW2ldOworCQlwcmludGYoInRhc2sgJTZsZCAoJTIwczolMTBsZCksIG5yX2V2ZW50czogJWxkXG4iLAorCQkJdGFzay0+bnIsIHRhc2stPmNvbW0sIHRhc2stPnBpZCwgdGFzay0+bnJfZXZlbnRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9jcm9zc190YXNrX3dha2V1cHModm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19kZXNjICp0YXNrMSwgKnRhc2syOworCXVuc2lnbmVkIGxvbmcgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBucl90YXNrczsgaSsrKSB7CisJCXRhc2sxID0gdGFza3NbaV07CisJCWogPSBpICsgMTsKKwkJaWYgKGogPT0gbnJfdGFza3MpCisJCQlqID0gMDsKKwkJdGFzazIgPSB0YXNrc1tqXTsKKwkJYWRkX3NjaGVkX2V2ZW50X3dha2V1cCh0YXNrMSwgMCwgdGFzazIpOworCX0KK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nfc2NoZWRfZXZlbnQoc3RydWN0IHRhc2tfZGVzYyAqdGhpc190YXNrIF9fdXNlZCwgc3RydWN0IHNjaGVkX2F0b20gKmF0b20pCit7CisJaW50IHJldCA9IDA7CisJdTY0IG5vdzsKKwlsb25nIGxvbmcgZGVsdGE7CisKKwlub3cgPSBnZXRfbnNlY3MoKTsKKwlkZWx0YSA9IHN0YXJ0X3RpbWUgKyBhdG9tLT50aW1lc3RhbXAgLSBub3c7CisKKwlzd2l0Y2ggKGF0b20tPnR5cGUpIHsKKwkJY2FzZSBTQ0hFRF9FVkVOVF9SVU46CisJCQlidXJuX25zZWNzKGF0b20tPmR1cmF0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIFNDSEVEX0VWRU5UX1NMRUVQOgorCQkJaWYgKGF0b20tPndhaXRfc2VtKQorCQkJCXJldCA9IHNlbV93YWl0KGF0b20tPndhaXRfc2VtKTsKKwkJCUJVR19PTihyZXQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NIRURfRVZFTlRfV0FLRVVQOgorCQkJaWYgKGF0b20tPndhaXRfc2VtKQorCQkJCXJldCA9IHNlbV9wb3N0KGF0b20tPndhaXRfc2VtKTsKKwkJCUJVR19PTihyZXQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUdfT04oMSk7CisJfQorfQorCitzdGF0aWMgdTY0IGdldF9jcHVfdXNhZ2VfbnNlY19wYXJlbnQodm9pZCkKK3sKKwlzdHJ1Y3QgcnVzYWdlIHJ1OworCXU2NCBzdW07CisJaW50IGVycjsKKworCWVyciA9IGdldHJ1c2FnZShSVVNBR0VfU0VMRiwgJnJ1KTsKKwlCVUdfT04oZXJyKTsKKworCXN1bSA9ICBydS5ydV91dGltZS50dl9zZWMqMWU5ICsgcnUucnVfdXRpbWUudHZfdXNlYyoxZTM7CisJc3VtICs9IHJ1LnJ1X3N0aW1lLnR2X3NlYyoxZTkgKyBydS5ydV9zdGltZS50dl91c2VjKjFlMzsKKworCXJldHVybiBzdW07Cit9CisKK3N0YXRpYyB1NjQgZ2V0X2NwdV91c2FnZV9uc2VjX3NlbGYodm9pZCkKK3sKKwljaGFyIGZpbGVuYW1lIFtdID0gIi9wcm9jLzEyMzQ1Njc4OTAvc2NoZWQiOworCXVuc2lnbmVkIGxvbmcgbXNlY3MsIG5zZWNzOworCWNoYXIgKmxpbmUgPSBOVUxMOworCXU2NCB0b3RhbCA9IDA7CisJc2l6ZV90IGxlbiA9IDA7CisJc3NpemVfdCBjaGFyczsKKwlGSUxFICpmaWxlOworCWludCByZXQ7CisKKwlzcHJpbnRmKGZpbGVuYW1lLCAiL3Byb2MvJWQvc2NoZWQiLCBnZXRwaWQoKSk7CisJZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCUJVR19PTighZmlsZSk7CisKKwl3aGlsZSAoKGNoYXJzID0gZ2V0bGluZSgmbGluZSwgJmxlbiwgZmlsZSkpICE9IC0xKSB7CisJCXJldCA9IHNzY2FuZihsaW5lLCAic2Uuc3VtX2V4ZWNfcnVudGltZSA6ICVsZC4lMDZsZFxuIiwKKwkJCSZtc2VjcywgJm5zZWNzKTsKKwkJaWYgKHJldCA9PSAyKSB7CisJCQl0b3RhbCA9IG1zZWNzKjFlNiArIG5zZWNzOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7CisJZmNsb3NlKGZpbGUpOworCisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgdm9pZCAqdGhyZWFkX2Z1bmModm9pZCAqY3R4KQoreworCXN0cnVjdCB0YXNrX2Rlc2MgKnRoaXNfdGFzayA9IGN0eDsKKwl1NjQgY3B1X3VzYWdlXzAsIGNwdV91c2FnZV8xOworCXVuc2lnbmVkIGxvbmcgaSwgcmV0OworCWNoYXIgY29tbTJbMjJdOworCisJc3ByaW50Zihjb21tMiwgIjolcyIsIHRoaXNfdGFzay0+Y29tbSk7CisJcHJjdGwoUFJfU0VUX05BTUUsIGNvbW0yKTsKKworYWdhaW46CisJcmV0ID0gc2VtX3Bvc3QoJnRoaXNfdGFzay0+cmVhZHlfZm9yX3dvcmspOworCUJVR19PTihyZXQpOworCXJldCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmc3RhcnRfd29ya19tdXRleCk7CisJQlVHX09OKHJldCk7CisJcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJnN0YXJ0X3dvcmtfbXV0ZXgpOworCUJVR19PTihyZXQpOworCisJY3B1X3VzYWdlXzAgPSBnZXRfY3B1X3VzYWdlX25zZWNfc2VsZigpOworCisJZm9yIChpID0gMDsgaSA8IHRoaXNfdGFzay0+bnJfZXZlbnRzOyBpKyspIHsKKwkJdGhpc190YXNrLT5jdXJyX2V2ZW50ID0gaTsKKwkJcHJvY2Vzc19zY2hlZF9ldmVudCh0aGlzX3Rhc2ssIHRoaXNfdGFzay0+YXRvbXNbaV0pOworCX0KKworCWNwdV91c2FnZV8xID0gZ2V0X2NwdV91c2FnZV9uc2VjX3NlbGYoKTsKKwl0aGlzX3Rhc2stPmNwdV91c2FnZSA9IGNwdV91c2FnZV8xIC0gY3B1X3VzYWdlXzA7CisKKwlyZXQgPSBzZW1fcG9zdCgmdGhpc190YXNrLT53b3JrX2RvbmVfc2VtKTsKKwlCVUdfT04ocmV0KTsKKworCXJldCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmd29ya19kb25lX3dhaXRfbXV0ZXgpOworCUJVR19PTihyZXQpOworCXJldCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ3b3JrX2RvbmVfd2FpdF9tdXRleCk7CisJQlVHX09OKHJldCk7CisKKwlnb3RvIGFnYWluOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfdGFza3Modm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19kZXNjICp0YXNrOworCXB0aHJlYWRfYXR0cl90IGF0dHI7CisJdW5zaWduZWQgbG9uZyBpOworCWludCBlcnI7CisKKwllcnIgPSBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CisJQlVHX09OKGVycik7CisJZXJyID0gcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgKHNpemVfdCkoMTYqMTAyNCkpOworCUJVR19PTihlcnIpOworCWVyciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmc3RhcnRfd29ya19tdXRleCk7CisJQlVHX09OKGVycik7CisJZXJyID0gcHRocmVhZF9tdXRleF9sb2NrKCZ3b3JrX2RvbmVfd2FpdF9tdXRleCk7CisJQlVHX09OKGVycik7CisJZm9yIChpID0gMDsgaSA8IG5yX3Rhc2tzOyBpKyspIHsKKwkJdGFzayA9IHRhc2tzW2ldOworCQlzZW1faW5pdCgmdGFzay0+c2xlZXBfc2VtLCAwLCAwKTsKKwkJc2VtX2luaXQoJnRhc2stPnJlYWR5X2Zvcl93b3JrLCAwLCAwKTsKKwkJc2VtX2luaXQoJnRhc2stPndvcmtfZG9uZV9zZW0sIDAsIDApOworCQl0YXNrLT5jdXJyX2V2ZW50ID0gMDsKKwkJZXJyID0gcHRocmVhZF9jcmVhdGUoJnRhc2stPnRocmVhZCwgJmF0dHIsIHRocmVhZF9mdW5jLCB0YXNrKTsKKwkJQlVHX09OKGVycik7CisJfQorfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl90YXNrcyh2b2lkKQoreworCXU2NCBjcHVfdXNhZ2VfMCwgY3B1X3VzYWdlXzE7CisJc3RydWN0IHRhc2tfZGVzYyAqdGFzazsKKwl1bnNpZ25lZCBsb25nIGksIHJldDsKKworCXN0YXJ0X3RpbWUgPSBnZXRfbnNlY3MoKTsKKwljcHVfdXNhZ2UgPSAwOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ3b3JrX2RvbmVfd2FpdF9tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGFza3M7IGkrKykgeworCQl0YXNrID0gdGFza3NbaV07CisJCXJldCA9IHNlbV93YWl0KCZ0YXNrLT5yZWFkeV9mb3Jfd29yayk7CisJCUJVR19PTihyZXQpOworCQlzZW1faW5pdCgmdGFzay0+cmVhZHlfZm9yX3dvcmssIDAsIDApOworCX0KKwlyZXQgPSBwdGhyZWFkX211dGV4X2xvY2soJndvcmtfZG9uZV93YWl0X211dGV4KTsKKwlCVUdfT04ocmV0KTsKKworCWNwdV91c2FnZV8wID0gZ2V0X2NwdV91c2FnZV9uc2VjX3BhcmVudCgpOworCisJcHRocmVhZF9tdXRleF91bmxvY2soJnN0YXJ0X3dvcmtfbXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3Rhc2tzOyBpKyspIHsKKwkJdGFzayA9IHRhc2tzW2ldOworCQlyZXQgPSBzZW1fd2FpdCgmdGFzay0+d29ya19kb25lX3NlbSk7CisJCUJVR19PTihyZXQpOworCQlzZW1faW5pdCgmdGFzay0+d29ya19kb25lX3NlbSwgMCwgMCk7CisJCWNwdV91c2FnZSArPSB0YXNrLT5jcHVfdXNhZ2U7CisJCXRhc2stPmNwdV91c2FnZSA9IDA7CisJfQorCisJY3B1X3VzYWdlXzEgPSBnZXRfY3B1X3VzYWdlX25zZWNfcGFyZW50KCk7CisJaWYgKCFydW5hdmdfY3B1X3VzYWdlKQorCQlydW5hdmdfY3B1X3VzYWdlID0gY3B1X3VzYWdlOworCXJ1bmF2Z19jcHVfdXNhZ2UgPSAocnVuYXZnX2NwdV91c2FnZSo5ICsgY3B1X3VzYWdlKS8xMDsKKworCXBhcmVudF9jcHVfdXNhZ2UgPSBjcHVfdXNhZ2VfMSAtIGNwdV91c2FnZV8wOworCWlmICghcnVuYXZnX3BhcmVudF9jcHVfdXNhZ2UpCisJCXJ1bmF2Z19wYXJlbnRfY3B1X3VzYWdlID0gcGFyZW50X2NwdV91c2FnZTsKKwlydW5hdmdfcGFyZW50X2NwdV91c2FnZSA9IChydW5hdmdfcGFyZW50X2NwdV91c2FnZSo5ICsKKwkJCQkgICBwYXJlbnRfY3B1X3VzYWdlKS8xMDsKKworCXJldCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmc3RhcnRfd29ya19tdXRleCk7CisJQlVHX09OKHJldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGFza3M7IGkrKykgeworCQl0YXNrID0gdGFza3NbaV07CisJCXNlbV9pbml0KCZ0YXNrLT5zbGVlcF9zZW0sIDAsIDApOworCQl0YXNrLT5jdXJyX2V2ZW50ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9vbmVfdGVzdCh2b2lkKQoreworCXU2NCBUMCwgVDEsIGRlbHRhLCBhdmdfZGVsdGEsIGZsdWN0LCBzdGRfZGV2OworCisJVDAgPSBnZXRfbnNlY3MoKTsKKwl3YWl0X2Zvcl90YXNrcygpOworCVQxID0gZ2V0X25zZWNzKCk7CisKKwlkZWx0YSA9IFQxIC0gVDA7CisJc3VtX3J1bnRpbWUgKz0gZGVsdGE7CisJbnJfcnVucysrOworCisJYXZnX2RlbHRhID0gc3VtX3J1bnRpbWUgLyBucl9ydW5zOworCWlmIChkZWx0YSA8IGF2Z19kZWx0YSkKKwkJZmx1Y3QgPSBhdmdfZGVsdGEgLSBkZWx0YTsKKwllbHNlCisJCWZsdWN0ID0gZGVsdGEgLSBhdmdfZGVsdGE7CisJc3VtX2ZsdWN0ICs9IGZsdWN0OworCXN0ZF9kZXYgPSBzdW1fZmx1Y3QgLyBucl9ydW5zIC8gc3FydChucl9ydW5zKTsKKwlpZiAoIXJ1bl9hdmcpCisJCXJ1bl9hdmcgPSBkZWx0YTsKKwlydW5fYXZnID0gKHJ1bl9hdmcqOSArIGRlbHRhKS8xMDsKKworCXByaW50ZigiIyUtM2xkOiAlMC4zZiwgIiwKKwkJbnJfcnVucywgKGRvdWJsZSlkZWx0YS8xMDAwMDAwLjApOworCisJcHJpbnRmKCJyYXZnOiAlMC4yZiwgIiwKKwkJKGRvdWJsZSlydW5fYXZnLzFlNik7CisKKwlwcmludGYoImNwdTogJTAuMmYgLyAlMC4yZiIsCisJCShkb3VibGUpY3B1X3VzYWdlLzFlNiwgKGRvdWJsZSlydW5hdmdfY3B1X3VzYWdlLzFlNik7CisKKyNpZiAwCisJLyoKKwkgKiBydXNhZ2Ugc3RhdGlzdGljcyBkb25lIGJ5IHRoZSBwYXJlbnQsIHRoZXNlIGFyZSBsZXNzCisJICogYWNjdXJhdGUgdGhhbiB0aGUgc3VtX2V4ZWNfcnVudGltZSBiYXNlZCBzdGF0aXN0aWNzOgorCSAqLworCXByaW50ZigiIFslMC4yZiAvICUwLjJmXSIsCisJCShkb3VibGUpcGFyZW50X2NwdV91c2FnZS8xZTYsCisJCShkb3VibGUpcnVuYXZnX3BhcmVudF9jcHVfdXNhZ2UvMWU2KTsKKyNlbmRpZgorCisJcHJpbnRmKCJcbiIpOworCisJaWYgKG5yX3NsZWVwX2NvcnJlY3Rpb25zKQorCQlwcmludGYoIiAoJWxkIHNsZWVwIGNvcnJlY3Rpb25zKVxuIiwgbnJfc2xlZXBfY29ycmVjdGlvbnMpOworCW5yX3NsZWVwX2NvcnJlY3Rpb25zID0gMDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9jYWxpYnJhdGlvbnModm9pZCkKK3sKKwl1NjQgVDAsIFQxOworCisJVDAgPSBnZXRfbnNlY3MoKTsKKwlidXJuX25zZWNzKDFlNik7CisJVDEgPSBnZXRfbnNlY3MoKTsKKworCXByaW50ZigidGhlIHJ1biB0ZXN0IHRvb2sgJUxkIG5zZWNzXG4iLCBUMS1UMCk7CisKKwlUMCA9IGdldF9uc2VjcygpOworCXNsZWVwX25zZWNzKDFlNik7CisJVDEgPSBnZXRfbnNlY3MoKTsKKworCXByaW50ZigidGhlIHNsZWVwIHRlc3QgdG9vayAlTGQgbnNlY3NcbiIsIFQxLVQwKTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKworCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmNvbW0ucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCisJZHVtcF9wcmludGYoIiVwIFslcF06IHBlcmZfZXZlbnRfY29tbTogJXM6JWRcbiIsCisJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAorCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAorCQlldmVudC0+Y29tbS5jb21tLCBldmVudC0+Y29tbS5waWQpOworCisJaWYgKHRocmVhZCA9PSBOVUxMIHx8CisJICAgIHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCBldmVudC0+Y29tbS5jb21tKSkgeworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIHBlcmZfZXZlbnRfY29tbSwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwl0b3RhbF9jb21tKys7CisKKwlyZXR1cm4gMDsKK30KKworCitzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSB7CisJdTMyIHNpemU7CisJY2hhciBkYXRhWzBdOworfTsKKworI2RlZmluZSBGSUxMX0ZJRUxEKHB0ciwgZmllbGQsIGV2ZW50LCBkYXRhKQlcCisJcHRyLmZpZWxkID0gKHR5cGVvZihwdHIuZmllbGQpKSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICNmaWVsZCwgZGF0YSkKKworI2RlZmluZSBGSUxMX0FSUkFZKHB0ciwgYXJyYXksIGV2ZW50LCBkYXRhKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl2b2lkICpfX2FycmF5ID0gcmF3X2ZpZWxkX3B0cihldmVudCwgI2FycmF5LCBkYXRhKTsJXAorCW1lbWNweShwdHIuYXJyYXksIF9fYXJyYXksIHNpemVvZihwdHIuYXJyYXkpKTsJXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIEZJTExfQ09NTU9OX0ZJRUxEUyhwdHIsIGV2ZW50LCBkYXRhKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlGSUxMX0ZJRUxEKHB0ciwgY29tbW9uX3R5cGUsIGV2ZW50LCBkYXRhKTsJCVwKKwlGSUxMX0ZJRUxEKHB0ciwgY29tbW9uX2ZsYWdzLCBldmVudCwgZGF0YSk7CQlcCisJRklMTF9GSUVMRChwdHIsIGNvbW1vbl9wcmVlbXB0X2NvdW50LCBldmVudCwgZGF0YSk7CVwKKwlGSUxMX0ZJRUxEKHB0ciwgY29tbW9uX3BpZCwgZXZlbnQsIGRhdGEpOwkJXAorCUZJTExfRklFTEQocHRyLCBjb21tb25fdGdpZCwgZXZlbnQsIGRhdGEpOwkJXAorfSB3aGlsZSAoMCkKKworCisKK3N0cnVjdCB0cmFjZV9zd2l0Y2hfZXZlbnQgeworCXUzMiBzaXplOworCisJdTE2IGNvbW1vbl90eXBlOworCXU4IGNvbW1vbl9mbGFnczsKKwl1OCBjb21tb25fcHJlZW1wdF9jb3VudDsKKwl1MzIgY29tbW9uX3BpZDsKKwl1MzIgY29tbW9uX3RnaWQ7CisKKwljaGFyIHByZXZfY29tbVsxNl07CisJdTMyIHByZXZfcGlkOworCXUzMiBwcmV2X3ByaW87CisJdTY0IHByZXZfc3RhdGU7CisJY2hhciBuZXh0X2NvbW1bMTZdOworCXUzMiBuZXh0X3BpZDsKKwl1MzIgbmV4dF9wcmlvOworfTsKKworc3RydWN0IHRyYWNlX3J1bnRpbWVfZXZlbnQgeworCXUzMiBzaXplOworCisJdTE2IGNvbW1vbl90eXBlOworCXU4IGNvbW1vbl9mbGFnczsKKwl1OCBjb21tb25fcHJlZW1wdF9jb3VudDsKKwl1MzIgY29tbW9uX3BpZDsKKwl1MzIgY29tbW9uX3RnaWQ7CisKKwljaGFyIGNvbW1bMTZdOworCXUzMiBwaWQ7CisJdTY0IHJ1bnRpbWU7CisJdTY0IHZydW50aW1lOworfTsKKworc3RydWN0IHRyYWNlX3dha2V1cF9ldmVudCB7CisJdTMyIHNpemU7CisKKwl1MTYgY29tbW9uX3R5cGU7CisJdTggY29tbW9uX2ZsYWdzOworCXU4IGNvbW1vbl9wcmVlbXB0X2NvdW50OworCXUzMiBjb21tb25fcGlkOworCXUzMiBjb21tb25fdGdpZDsKKworCWNoYXIgY29tbVsxNl07CisJdTMyIHBpZDsKKworCXUzMiBwcmlvOworCXUzMiBzdWNjZXNzOworCXUzMiBjcHU7Cit9OworCitzdHJ1Y3QgdHJhY2VfZm9ya19ldmVudCB7CisJdTMyIHNpemU7CisKKwl1MTYgY29tbW9uX3R5cGU7CisJdTggY29tbW9uX2ZsYWdzOworCXU4IGNvbW1vbl9wcmVlbXB0X2NvdW50OworCXUzMiBjb21tb25fcGlkOworCXUzMiBjb21tb25fdGdpZDsKKworCWNoYXIgcGFyZW50X2NvbW1bMTZdOworCXUzMiBwYXJlbnRfcGlkOworCWNoYXIgY2hpbGRfY29tbVsxNl07CisJdTMyIGNoaWxkX3BpZDsKK307CisKK3N0cnVjdCB0cmFjZV9zY2hlZF9oYW5kbGVyIHsKKwl2b2lkICgqc3dpdGNoX2V2ZW50KShzdHJ1Y3QgdHJhY2Vfc3dpdGNoX2V2ZW50ICosCisJCQkgICAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgICBpbnQgY3B1LAorCQkJICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworCisJdm9pZCAoKnJ1bnRpbWVfZXZlbnQpKHN0cnVjdCB0cmFjZV9ydW50aW1lX2V2ZW50ICosCisJCQkgICAgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgICAgIGludCBjcHUsCisJCQkgICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCp3YWtldXBfZXZlbnQpKHN0cnVjdCB0cmFjZV93YWtldXBfZXZlbnQgKiwKKwkJCSAgICAgc3RydWN0IGV2ZW50ICosCisJCQkgICAgIGludCBjcHUsCisJCQkgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqZm9ya19ldmVudCkoc3RydWN0IHRyYWNlX2ZvcmtfZXZlbnQgKiwKKwkJCSAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgaW50IGNwdSwKKwkJCSAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworfTsKKworCitzdGF0aWMgdm9pZAorcmVwbGF5X3dha2V1cF9ldmVudChzdHJ1Y3QgdHJhY2Vfd2FrZXVwX2V2ZW50ICp3YWtldXBfZXZlbnQsCisJCSAgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkgICAgaW50IGNwdSBfX3VzZWQsCisJCSAgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRhc2tfZGVzYyAqd2FrZXIsICp3YWtlZTsKKworCWlmICh2ZXJib3NlKSB7CisJCXByaW50Zigic2NoZWRfd2FrZXVwIGV2ZW50ICVwXG4iLCBldmVudCk7CisKKwkJcHJpbnRmKCIgLi4uIHBpZCAlZCB3b2tlIHVwICVzLyVkXG4iLAorCQkJd2FrZXVwX2V2ZW50LT5jb21tb25fcGlkLAorCQkJd2FrZXVwX2V2ZW50LT5jb21tLAorCQkJd2FrZXVwX2V2ZW50LT5waWQpOworCX0KKworCXdha2VyID0gcmVnaXN0ZXJfcGlkKHdha2V1cF9ldmVudC0+Y29tbW9uX3BpZCwgIjx1bmtub3duPiIpOworCXdha2VlID0gcmVnaXN0ZXJfcGlkKHdha2V1cF9ldmVudC0+cGlkLCB3YWtldXBfZXZlbnQtPmNvbW0pOworCisJYWRkX3NjaGVkX2V2ZW50X3dha2V1cCh3YWtlciwgdGltZXN0YW1wLCB3YWtlZSk7Cit9CisKK3N0YXRpYyB1NjQgY3B1X2xhc3Rfc3dpdGNoZWRbTUFYX0NQVVNdOworCitzdGF0aWMgdm9pZAorcmVwbGF5X3N3aXRjaF9ldmVudChzdHJ1Y3QgdHJhY2Vfc3dpdGNoX2V2ZW50ICpzd2l0Y2hfZXZlbnQsCisJCSAgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkgICAgaW50IGNwdSwKKwkJICAgIHU2NCB0aW1lc3RhbXAsCisJCSAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB0YXNrX2Rlc2MgKnByZXYsICpuZXh0OworCXU2NCB0aW1lc3RhbXAwOworCXM2NCBkZWx0YTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGYoInNjaGVkX3N3aXRjaCBldmVudCAlcFxuIiwgZXZlbnQpOworCisJaWYgKGNwdSA+PSBNQVhfQ1BVUyB8fCBjcHUgPCAwKQorCQlyZXR1cm47CisKKwl0aW1lc3RhbXAwID0gY3B1X2xhc3Rfc3dpdGNoZWRbY3B1XTsKKwlpZiAodGltZXN0YW1wMCkKKwkJZGVsdGEgPSB0aW1lc3RhbXAgLSB0aW1lc3RhbXAwOworCWVsc2UKKwkJZGVsdGEgPSAwOworCisJaWYgKGRlbHRhIDwgMCkKKwkJZGllKCJobSwgZGVsdGE6ICVMZCA8IDAgP1xuIiwgZGVsdGEpOworCisJaWYgKHZlcmJvc2UpIHsKKwkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJUxkIG5zZWNzXVxuIiwKKwkJCXN3aXRjaF9ldmVudC0+cHJldl9jb21tLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkLAorCQkJc3dpdGNoX2V2ZW50LT5uZXh0X2NvbW0sIHN3aXRjaF9ldmVudC0+bmV4dF9waWQsCisJCQlkZWx0YSk7CisJfQorCisJcHJldiA9IHJlZ2lzdGVyX3BpZChzd2l0Y2hfZXZlbnQtPnByZXZfcGlkLCBzd2l0Y2hfZXZlbnQtPnByZXZfY29tbSk7CisJbmV4dCA9IHJlZ2lzdGVyX3BpZChzd2l0Y2hfZXZlbnQtPm5leHRfcGlkLCBzd2l0Y2hfZXZlbnQtPm5leHRfY29tbSk7CisKKwljcHVfbGFzdF9zd2l0Y2hlZFtjcHVdID0gdGltZXN0YW1wOworCisJYWRkX3NjaGVkX2V2ZW50X3J1bihwcmV2LCB0aW1lc3RhbXAsIGRlbHRhKTsKKwlhZGRfc2NoZWRfZXZlbnRfc2xlZXAocHJldiwgdGltZXN0YW1wLCBzd2l0Y2hfZXZlbnQtPnByZXZfc3RhdGUpOworfQorCisKK3N0YXRpYyB2b2lkCityZXBsYXlfZm9ya19ldmVudChzdHJ1Y3QgdHJhY2VfZm9ya19ldmVudCAqZm9ya19ldmVudCwKKwkJICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkgIGludCBjcHUgX191c2VkLAorCQkgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJaWYgKHZlcmJvc2UpIHsKKwkJcHJpbnRmKCJzY2hlZF9mb3JrIGV2ZW50ICVwXG4iLCBldmVudCk7CisJCXByaW50ZigiLi4uIHBhcmVudDogJXMvJWRcbiIsIGZvcmtfZXZlbnQtPnBhcmVudF9jb21tLCBmb3JrX2V2ZW50LT5wYXJlbnRfcGlkKTsKKwkJcHJpbnRmKCIuLi4gIGNoaWxkOiAlcy8lZFxuIiwgZm9ya19ldmVudC0+Y2hpbGRfY29tbSwgZm9ya19ldmVudC0+Y2hpbGRfcGlkKTsKKwl9CisJcmVnaXN0ZXJfcGlkKGZvcmtfZXZlbnQtPnBhcmVudF9waWQsIGZvcmtfZXZlbnQtPnBhcmVudF9jb21tKTsKKwlyZWdpc3Rlcl9waWQoZm9ya19ldmVudC0+Y2hpbGRfcGlkLCBmb3JrX2V2ZW50LT5jaGlsZF9jb21tKTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9zY2hlZF9oYW5kbGVyIHJlcGxheV9vcHMgID0geworCS53YWtldXBfZXZlbnQJCT0gcmVwbGF5X3dha2V1cF9ldmVudCwKKwkuc3dpdGNoX2V2ZW50CQk9IHJlcGxheV9zd2l0Y2hfZXZlbnQsCisJLmZvcmtfZXZlbnQJCT0gcmVwbGF5X2ZvcmtfZXZlbnQsCit9OworCitzdHJ1Y3Qgc29ydF9kaW1lbnNpb24geworCWNvbnN0IGNoYXIJCSpuYW1lOworCXNvcnRfZm5fdAkJY21wOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoY21wX3BpZCk7CisKK3N0YXRpYyBpbnQKK3RocmVhZF9sYXRfY21wKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCB3b3JrX2F0b21zICpsLCBzdHJ1Y3Qgd29ya19hdG9tcyAqcikKK3sKKwlzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gKnNvcnQ7CisJaW50IHJldCA9IDA7CisKKwlCVUdfT04obGlzdF9lbXB0eShsaXN0KSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNvcnQsIGxpc3QsIGxpc3QpIHsKKwkJcmV0ID0gc29ydC0+Y21wKGwsIHIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHdvcmtfYXRvbXMgKgordGhyZWFkX2F0b21zX3NlYXJjaChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnNvcnRfbGlzdCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHJvb3QtPnJiX25vZGU7CisJc3RydWN0IHdvcmtfYXRvbXMga2V5ID0geyAudGhyZWFkID0gdGhyZWFkIH07CisKKwl3aGlsZSAobm9kZSkgeworCQlzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXM7CisJCWludCBjbXA7CisKKwkJYXRvbXMgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHdvcmtfYXRvbXMsIG5vZGUpOworCisJCWNtcCA9IHRocmVhZF9sYXRfY21wKHNvcnRfbGlzdCwgJmtleSwgYXRvbXMpOworCQlpZiAoY21wID4gMCkKKwkJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPCAwKQorCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCUJVR19PTih0aHJlYWQgIT0gYXRvbXMtPnRocmVhZCk7CisJCQlyZXR1cm4gYXRvbXM7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitfX3RocmVhZF9sYXRlbmN5X2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IHdvcmtfYXRvbXMgKmRhdGEsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqc29ydF9saXN0KQoreworCXN0cnVjdCByYl9ub2RlICoqbmV3ID0gJihyb290LT5yYl9ub2RlKSwgKnBhcmVudCA9IE5VTEw7CisKKwl3aGlsZSAoKm5ldykgeworCQlzdHJ1Y3Qgd29ya19hdG9tcyAqdGhpczsKKwkJaW50IGNtcDsKKworCQl0aGlzID0gY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCB3b3JrX2F0b21zLCBub2RlKTsKKwkJcGFyZW50ID0gKm5ldzsKKworCQljbXAgPSB0aHJlYWRfbGF0X2NtcChzb3J0X2xpc3QsIGRhdGEsIHRoaXMpOworCisJCWlmIChjbXAgPiAwKQorCQkJbmV3ID0gJigoKm5ldyktPnJiX2xlZnQpOworCQllbHNlCisJCQluZXcgPSAmKCgqbmV3KS0+cmJfcmlnaHQpOworCX0KKworCXJiX2xpbmtfbm9kZSgmZGF0YS0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmZGF0YS0+bm9kZSwgcm9vdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRocmVhZF9hdG9tc19pbnNlcnQoc3RydWN0IHRocmVhZCAqdGhyZWFkKQoreworCXN0cnVjdCB3b3JrX2F0b21zICphdG9tczsKKworCWF0b21zID0gY2FsbG9jKHNpemVvZigqYXRvbXMpLCAxKTsKKwlpZiAoIWF0b21zKQorCQlkaWUoIk5vIG1lbW9yeSIpOworCisJYXRvbXMtPnRocmVhZCA9IHRocmVhZDsKKwlJTklUX0xJU1RfSEVBRCgmYXRvbXMtPndvcmtfbGlzdCk7CisJX190aHJlYWRfbGF0ZW5jeV9pbnNlcnQoJmF0b21fcm9vdCwgYXRvbXMsICZjbXBfcGlkKTsKK30KKworc3RhdGljIHZvaWQKK2xhdGVuY3lfZm9ya19ldmVudChzdHJ1Y3QgdHJhY2VfZm9ya19ldmVudCAqZm9ya19ldmVudCBfX3VzZWQsCisJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkgICBpbnQgY3B1IF9fdXNlZCwKKwkJICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJLyogc2hvdWxkIGluc2VydCB0aGUgbmV3Y29tZXIgKi8KK30KKworX191c2VkCitzdGF0aWMgY2hhciBzY2hlZF9vdXRfc3RhdGUoc3RydWN0IHRyYWNlX3N3aXRjaF9ldmVudCAqc3dpdGNoX2V2ZW50KQoreworCWNvbnN0IGNoYXIgKnN0ciA9IFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFI7CisKKwlyZXR1cm4gc3RyW3N3aXRjaF9ldmVudC0+cHJldl9zdGF0ZV07Cit9CisKK3N0YXRpYyB2b2lkCithZGRfc2NoZWRfb3V0X2V2ZW50KHN0cnVjdCB3b3JrX2F0b21zICphdG9tcywKKwkJICAgIGNoYXIgcnVuX3N0YXRlLAorCQkgICAgdTY0IHRpbWVzdGFtcCkKK3sKKwlzdHJ1Y3Qgd29ya19hdG9tICphdG9tOworCisJYXRvbSA9IGNhbGxvYyhzaXplb2YoKmF0b20pLCAxKTsKKwlpZiAoIWF0b20pCisJCWRpZSgiTm9uIG1lbW9yeSIpOworCisJYXRvbS0+c2NoZWRfb3V0X3RpbWUgPSB0aW1lc3RhbXA7CisKKwlpZiAocnVuX3N0YXRlID09ICdSJykgeworCQlhdG9tLT5zdGF0ZSA9IFRIUkVBRF9XQUlUX0NQVTsKKwkJYXRvbS0+d2FrZV91cF90aW1lID0gYXRvbS0+c2NoZWRfb3V0X3RpbWU7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmYXRvbS0+bGlzdCwgJmF0b21zLT53b3JrX2xpc3QpOworfQorCitzdGF0aWMgdm9pZAorYWRkX3J1bnRpbWVfZXZlbnQoc3RydWN0IHdvcmtfYXRvbXMgKmF0b21zLCB1NjQgZGVsdGEsIHU2NCB0aW1lc3RhbXAgX191c2VkKQoreworCXN0cnVjdCB3b3JrX2F0b20gKmF0b207CisKKwlCVUdfT04obGlzdF9lbXB0eSgmYXRvbXMtPndvcmtfbGlzdCkpOworCisJYXRvbSA9IGxpc3RfZW50cnkoYXRvbXMtPndvcmtfbGlzdC5wcmV2LCBzdHJ1Y3Qgd29ya19hdG9tLCBsaXN0KTsKKworCWF0b20tPnJ1bnRpbWUgKz0gZGVsdGE7CisJYXRvbXMtPnRvdGFsX3J1bnRpbWUgKz0gZGVsdGE7Cit9CisKK3N0YXRpYyB2b2lkCithZGRfc2NoZWRfaW5fZXZlbnQoc3RydWN0IHdvcmtfYXRvbXMgKmF0b21zLCB1NjQgdGltZXN0YW1wKQoreworCXN0cnVjdCB3b3JrX2F0b20gKmF0b207CisJdTY0IGRlbHRhOworCisJaWYgKGxpc3RfZW1wdHkoJmF0b21zLT53b3JrX2xpc3QpKQorCQlyZXR1cm47CisKKwlhdG9tID0gbGlzdF9lbnRyeShhdG9tcy0+d29ya19saXN0LnByZXYsIHN0cnVjdCB3b3JrX2F0b20sIGxpc3QpOworCisJaWYgKGF0b20tPnN0YXRlICE9IFRIUkVBRF9XQUlUX0NQVSkKKwkJcmV0dXJuOworCisJaWYgKHRpbWVzdGFtcCA8IGF0b20tPndha2VfdXBfdGltZSkgeworCQlhdG9tLT5zdGF0ZSA9IFRIUkVBRF9JR05PUkU7CisJCXJldHVybjsKKwl9CisKKwlhdG9tLT5zdGF0ZSA9IFRIUkVBRF9TQ0hFRF9JTjsKKwlhdG9tLT5zY2hlZF9pbl90aW1lID0gdGltZXN0YW1wOworCisJZGVsdGEgPSBhdG9tLT5zY2hlZF9pbl90aW1lIC0gYXRvbS0+d2FrZV91cF90aW1lOworCWF0b21zLT50b3RhbF9sYXQgKz0gZGVsdGE7CisJaWYgKGRlbHRhID4gYXRvbXMtPm1heF9sYXQpCisJCWF0b21zLT5tYXhfbGF0ID0gZGVsdGE7CisJYXRvbXMtPm5iX2F0b21zKys7Cit9CisKK3N0YXRpYyB2b2lkCitsYXRlbmN5X3N3aXRjaF9ldmVudChzdHJ1Y3QgdHJhY2Vfc3dpdGNoX2V2ZW50ICpzd2l0Y2hfZXZlbnQsCisJCSAgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCSAgICAgaW50IGNwdSwKKwkJICAgICB1NjQgdGltZXN0YW1wLAorCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHdvcmtfYXRvbXMgKm91dF9ldmVudHMsICppbl9ldmVudHM7CisJc3RydWN0IHRocmVhZCAqc2NoZWRfb3V0LCAqc2NoZWRfaW47CisJdTY0IHRpbWVzdGFtcDA7CisJczY0IGRlbHRhOworCisJQlVHX09OKGNwdSA+PSBNQVhfQ1BVUyB8fCBjcHUgPCAwKTsKKworCXRpbWVzdGFtcDAgPSBjcHVfbGFzdF9zd2l0Y2hlZFtjcHVdOworCWNwdV9sYXN0X3N3aXRjaGVkW2NwdV0gPSB0aW1lc3RhbXA7CisJaWYgKHRpbWVzdGFtcDApCisJCWRlbHRhID0gdGltZXN0YW1wIC0gdGltZXN0YW1wMDsKKwllbHNlCisJCWRlbHRhID0gMDsKKworCWlmIChkZWx0YSA8IDApCisJCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKworCisJc2NoZWRfb3V0ID0gdGhyZWFkc19fZmluZG5ldyhzd2l0Y2hfZXZlbnQtPnByZXZfcGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCXNjaGVkX2luID0gdGhyZWFkc19fZmluZG5ldyhzd2l0Y2hfZXZlbnQtPm5leHRfcGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCisJb3V0X2V2ZW50cyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgc2NoZWRfb3V0LCAmY21wX3BpZCk7CisJaWYgKCFvdXRfZXZlbnRzKSB7CisJCXRocmVhZF9hdG9tc19pbnNlcnQoc2NoZWRfb3V0KTsKKwkJb3V0X2V2ZW50cyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgc2NoZWRfb3V0LCAmY21wX3BpZCk7CisJCWlmICghb3V0X2V2ZW50cykKKwkJCWRpZSgib3V0LWV2ZW50OiBJbnRlcm5hbCB0cmVlIGVycm9yIik7CisJfQorCWFkZF9zY2hlZF9vdXRfZXZlbnQob3V0X2V2ZW50cywgc2NoZWRfb3V0X3N0YXRlKHN3aXRjaF9ldmVudCksIHRpbWVzdGFtcCk7CisKKwlpbl9ldmVudHMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHNjaGVkX2luLCAmY21wX3BpZCk7CisJaWYgKCFpbl9ldmVudHMpIHsKKwkJdGhyZWFkX2F0b21zX2luc2VydChzY2hlZF9pbik7CisJCWluX2V2ZW50cyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgc2NoZWRfaW4sICZjbXBfcGlkKTsKKwkJaWYgKCFpbl9ldmVudHMpCisJCQlkaWUoImluLWV2ZW50OiBJbnRlcm5hbCB0cmVlIGVycm9yIik7CisJCS8qCisJCSAqIFRha2UgY2FtZSBpbiB3ZSBoYXZlIG5vdCBoZWFyZCBhYm91dCB5ZXQsCisJCSAqIGFkZCBpbiBhbiBpbml0aWFsIGF0b20gaW4gcnVubmFibGUgc3RhdGU6CisJCSAqLworCQlhZGRfc2NoZWRfb3V0X2V2ZW50KGluX2V2ZW50cywgJ1InLCB0aW1lc3RhbXApOworCX0KKwlhZGRfc2NoZWRfaW5fZXZlbnQoaW5fZXZlbnRzLCB0aW1lc3RhbXApOworfQorCitzdGF0aWMgdm9pZAorbGF0ZW5jeV9ydW50aW1lX2V2ZW50KHN0cnVjdCB0cmFjZV9ydW50aW1lX2V2ZW50ICpydW50aW1lX2V2ZW50LAorCQkgICAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkgICAgIGludCBjcHUsCisJCSAgICAgdTY0IHRpbWVzdGFtcCwKKwkJICAgICBzdHJ1Y3QgdGhyZWFkICp0aGlzX3RocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHdvcmtfYXRvbXMgKmF0b21zOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKworCUJVR19PTihjcHUgPj0gTUFYX0NQVVMgfHwgY3B1IDwgMCk7CisKKwl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KHJ1bnRpbWVfZXZlbnQtPnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwlhdG9tcyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgdGhyZWFkLCAmY21wX3BpZCk7CisJaWYgKCFhdG9tcykgeworCQl0aHJlYWRfYXRvbXNfaW5zZXJ0KHRocmVhZCk7CisJCWF0b21zID0gdGhyZWFkX2F0b21zX3NlYXJjaCgmYXRvbV9yb290LCB0aHJlYWQsICZjbXBfcGlkKTsKKwkJaWYgKCFhdG9tcykKKwkJCWRpZSgiaW4tZXZlbnQ6IEludGVybmFsIHRyZWUgZXJyb3IiKTsKKwkJYWRkX3NjaGVkX291dF9ldmVudChhdG9tcywgJ1InLCB0aW1lc3RhbXApOworCX0KKworCWFkZF9ydW50aW1lX2V2ZW50KGF0b21zLCBydW50aW1lX2V2ZW50LT5ydW50aW1lLCB0aW1lc3RhbXApOworfQorCitzdGF0aWMgdm9pZAorbGF0ZW5jeV93YWtldXBfZXZlbnQoc3RydWN0IHRyYWNlX3dha2V1cF9ldmVudCAqd2FrZXVwX2V2ZW50LAorCQkgICAgIHN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCSAgICAgaW50IGNwdSBfX3VzZWQsCisJCSAgICAgdTY0IHRpbWVzdGFtcCwKKwkJICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB3b3JrX2F0b21zICphdG9tczsKKwlzdHJ1Y3Qgd29ya19hdG9tICphdG9tOworCXN0cnVjdCB0aHJlYWQgKndha2VlOworCisJLyogTm90ZSBmb3IgbGF0ZXIsIGl0IG1heSBiZSBpbnRlcmVzdGluZyB0byBvYnNlcnZlIHRoZSBmYWlsaW5nIGNhc2VzICovCisJaWYgKCF3YWtldXBfZXZlbnQtPnN1Y2Nlc3MpCisJCXJldHVybjsKKworCXdha2VlID0gdGhyZWFkc19fZmluZG5ldyh3YWtldXBfZXZlbnQtPnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwlhdG9tcyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgd2FrZWUsICZjbXBfcGlkKTsKKwlpZiAoIWF0b21zKSB7CisJCXRocmVhZF9hdG9tc19pbnNlcnQod2FrZWUpOworCQlhdG9tcyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgd2FrZWUsICZjbXBfcGlkKTsKKwkJaWYgKCFhdG9tcykKKwkJCWRpZSgid2FrZXVwLWV2ZW50OiBJbnRlcm5hbCB0cmVlIGVycm9yIik7CisJCWFkZF9zY2hlZF9vdXRfZXZlbnQoYXRvbXMsICdTJywgdGltZXN0YW1wKTsKKwl9CisKKwlCVUdfT04obGlzdF9lbXB0eSgmYXRvbXMtPndvcmtfbGlzdCkpOworCisJYXRvbSA9IGxpc3RfZW50cnkoYXRvbXMtPndvcmtfbGlzdC5wcmV2LCBzdHJ1Y3Qgd29ya19hdG9tLCBsaXN0KTsKKworCWlmIChhdG9tLT5zdGF0ZSAhPSBUSFJFQURfU0xFRVBJTkcpCisJCW5yX3N0YXRlX21hY2hpbmVfYnVncysrOworCisJbnJfdGltZXN0YW1wcysrOworCWlmIChhdG9tLT5zY2hlZF9vdXRfdGltZSA+IHRpbWVzdGFtcCkgeworCQlucl91bm9yZGVyZWRfdGltZXN0YW1wcysrOworCQlyZXR1cm47CisJfQorCisJYXRvbS0+c3RhdGUgPSBUSFJFQURfV0FJVF9DUFU7CisJYXRvbS0+d2FrZV91cF90aW1lID0gdGltZXN0YW1wOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX3NjaGVkX2hhbmRsZXIgbGF0X29wcyAgPSB7CisJLndha2V1cF9ldmVudAkJPSBsYXRlbmN5X3dha2V1cF9ldmVudCwKKwkuc3dpdGNoX2V2ZW50CQk9IGxhdGVuY3lfc3dpdGNoX2V2ZW50LAorCS5ydW50aW1lX2V2ZW50CQk9IGxhdGVuY3lfcnVudGltZV9ldmVudCwKKwkuZm9ya19ldmVudAkJPSBsYXRlbmN5X2ZvcmtfZXZlbnQsCit9OworCitzdGF0aWMgdm9pZCBvdXRwdXRfbGF0X3RocmVhZChzdHJ1Y3Qgd29ya19hdG9tcyAqd29ya19saXN0KQoreworCWludCBpOworCWludCByZXQ7CisJdTY0IGF2ZzsKKworCWlmICghd29ya19saXN0LT5uYl9hdG9tcykKKwkJcmV0dXJuOworCS8qCisJICogSWdub3JlIGlkbGUgdGhyZWFkczoKKwkgKi8KKwlpZiAoIXN0cmNtcCh3b3JrX2xpc3QtPnRocmVhZC0+Y29tbSwgInN3YXBwZXIiKSkKKwkJcmV0dXJuOworCisJYWxsX3J1bnRpbWUgKz0gd29ya19saXN0LT50b3RhbF9ydW50aW1lOworCWFsbF9jb3VudCArPSB3b3JrX2xpc3QtPm5iX2F0b21zOworCisJcmV0ID0gcHJpbnRmKCIgICVzOiVkICIsIHdvcmtfbGlzdC0+dGhyZWFkLT5jb21tLCB3b3JrX2xpc3QtPnRocmVhZC0+cGlkKTsKKworCWZvciAoaSA9IDA7IGkgPCAyNCAtIHJldDsgaSsrKQorCQlwcmludGYoIiAiKTsKKworCWF2ZyA9IHdvcmtfbGlzdC0+dG90YWxfbGF0IC8gd29ya19saXN0LT5uYl9hdG9tczsKKworCXByaW50ZigifCUxMS4zZiBtcyB8JTlsbHUgfCBhdmc6JTkuM2YgbXMgfCBtYXg6JTkuM2YgbXMgfFxuIiwKKwkgICAgICAoZG91YmxlKXdvcmtfbGlzdC0+dG90YWxfcnVudGltZSAvIDFlNiwKKwkJIHdvcmtfbGlzdC0+bmJfYXRvbXMsIChkb3VibGUpYXZnIC8gMWU2LAorCQkgKGRvdWJsZSl3b3JrX2xpc3QtPm1heF9sYXQgLyAxZTYpOworfQorCitzdGF0aWMgaW50IHBpZF9jbXAoc3RydWN0IHdvcmtfYXRvbXMgKmwsIHN0cnVjdCB3b3JrX2F0b21zICpyKQoreworCWlmIChsLT50aHJlYWQtPnBpZCA8IHItPnRocmVhZC0+cGlkKQorCQlyZXR1cm4gLTE7CisJaWYgKGwtPnRocmVhZC0+cGlkID4gci0+dGhyZWFkLT5waWQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gcGlkX3NvcnRfZGltZW5zaW9uID0geworCS5uYW1lCQkJPSAicGlkIiwKKwkuY21wCQkJPSBwaWRfY21wLAorfTsKKworc3RhdGljIGludCBhdmdfY21wKHN0cnVjdCB3b3JrX2F0b21zICpsLCBzdHJ1Y3Qgd29ya19hdG9tcyAqcikKK3sKKwl1NjQgYXZnbCwgYXZncjsKKworCWlmICghbC0+bmJfYXRvbXMpCisJCXJldHVybiAtMTsKKworCWlmICghci0+bmJfYXRvbXMpCisJCXJldHVybiAxOworCisJYXZnbCA9IGwtPnRvdGFsX2xhdCAvIGwtPm5iX2F0b21zOworCWF2Z3IgPSByLT50b3RhbF9sYXQgLyByLT5uYl9hdG9tczsKKworCWlmIChhdmdsIDwgYXZncikKKwkJcmV0dXJuIC0xOworCWlmIChhdmdsID4gYXZncikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzb3J0X2RpbWVuc2lvbiBhdmdfc29ydF9kaW1lbnNpb24gPSB7CisJLm5hbWUJCQk9ICJhdmciLAorCS5jbXAJCQk9IGF2Z19jbXAsCit9OworCitzdGF0aWMgaW50IG1heF9jbXAoc3RydWN0IHdvcmtfYXRvbXMgKmwsIHN0cnVjdCB3b3JrX2F0b21zICpyKQoreworCWlmIChsLT5tYXhfbGF0IDwgci0+bWF4X2xhdCkKKwkJcmV0dXJuIC0xOworCWlmIChsLT5tYXhfbGF0ID4gci0+bWF4X2xhdCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzb3J0X2RpbWVuc2lvbiBtYXhfc29ydF9kaW1lbnNpb24gPSB7CisJLm5hbWUJCQk9ICJtYXgiLAorCS5jbXAJCQk9IG1heF9jbXAsCit9OworCitzdGF0aWMgaW50IHN3aXRjaF9jbXAoc3RydWN0IHdvcmtfYXRvbXMgKmwsIHN0cnVjdCB3b3JrX2F0b21zICpyKQoreworCWlmIChsLT5uYl9hdG9tcyA8IHItPm5iX2F0b21zKQorCQlyZXR1cm4gLTE7CisJaWYgKGwtPm5iX2F0b21zID4gci0+bmJfYXRvbXMpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gc3dpdGNoX3NvcnRfZGltZW5zaW9uID0geworCS5uYW1lCQkJPSAic3dpdGNoIiwKKwkuY21wCQkJPSBzd2l0Y2hfY21wLAorfTsKKworc3RhdGljIGludCBydW50aW1lX2NtcChzdHJ1Y3Qgd29ya19hdG9tcyAqbCwgc3RydWN0IHdvcmtfYXRvbXMgKnIpCit7CisJaWYgKGwtPnRvdGFsX3J1bnRpbWUgPCByLT50b3RhbF9ydW50aW1lKQorCQlyZXR1cm4gLTE7CisJaWYgKGwtPnRvdGFsX3J1bnRpbWUgPiByLT50b3RhbF9ydW50aW1lKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uIHJ1bnRpbWVfc29ydF9kaW1lbnNpb24gPSB7CisJLm5hbWUJCQk9ICJydW50aW1lIiwKKwkuY21wCQkJPSBydW50aW1lX2NtcCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gKmF2YWlsYWJsZV9zb3J0c1tdID0geworCSZwaWRfc29ydF9kaW1lbnNpb24sCisJJmF2Z19zb3J0X2RpbWVuc2lvbiwKKwkmbWF4X3NvcnRfZGltZW5zaW9uLAorCSZzd2l0Y2hfc29ydF9kaW1lbnNpb24sCisJJnJ1bnRpbWVfc29ydF9kaW1lbnNpb24sCit9OworCisjZGVmaW5lIE5CX0FWQUlMQUJMRV9TT1JUUwkoaW50KShzaXplb2YoYXZhaWxhYmxlX3NvcnRzKSAvIHNpemVvZihzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gKikpCisKK3N0YXRpYyBMSVNUX0hFQUQoc29ydF9saXN0KTsKKworc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNoYXIgKnRvaywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOQl9BVkFJTEFCTEVfU09SVFM7IGkrKykgeworCQlpZiAoIXN0cmNtcChhdmFpbGFibGVfc29ydHNbaV0tPm5hbWUsIHRvaykpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmF2YWlsYWJsZV9zb3J0c1tpXS0+bGlzdCwgbGlzdCk7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9zb3J0aW5nKHZvaWQpOworCitzdGF0aWMgdm9pZCBzb3J0X2xhdCh2b2lkKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlOworCisJZm9yICg7OykgeworCQlzdHJ1Y3Qgd29ya19hdG9tcyAqZGF0YTsKKwkJbm9kZSA9IHJiX2ZpcnN0KCZhdG9tX3Jvb3QpOworCQlpZiAoIW5vZGUpCisJCQlicmVhazsKKworCQlyYl9lcmFzZShub2RlLCAmYXRvbV9yb290KTsKKwkJZGF0YSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCB3b3JrX2F0b21zLCBub2RlKTsKKwkJX190aHJlYWRfbGF0ZW5jeV9pbnNlcnQoJnNvcnRlZF9hdG9tX3Jvb3QsIGRhdGEsICZzb3J0X2xpc3QpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9zY2hlZF9oYW5kbGVyICp0cmFjZV9oYW5kbGVyOworCitzdGF0aWMgdm9pZAorcHJvY2Vzc19zY2hlZF93YWtldXBfZXZlbnQoc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdywKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQsCisJCQkgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2Vfd2FrZXVwX2V2ZW50IHdha2V1cF9ldmVudDsKKworCUZJTExfQ09NTU9OX0ZJRUxEUyh3YWtldXBfZXZlbnQsIGV2ZW50LCByYXctPmRhdGEpOworCisJRklMTF9BUlJBWSh3YWtldXBfZXZlbnQsIGNvbW0sIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQod2FrZXVwX2V2ZW50LCBwaWQsIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQod2FrZXVwX2V2ZW50LCBwcmlvLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKHdha2V1cF9ldmVudCwgc3VjY2VzcywgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRCh3YWtldXBfZXZlbnQsIGNwdSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+d2FrZXVwX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT53YWtldXBfZXZlbnQoJndha2V1cF9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCisvKgorICogVHJhY2sgdGhlIGN1cnJlbnQgdGFzayAtIHRoYXQgd2F5IHdlIGNhbiBrbm93IHdoZXRoZXIgdGhlcmUncyBhbnkKKyAqIHdlaXJkIGV2ZW50cywgc3VjaCBhcyBhIHRhc2sgYmVpbmcgc3dpdGNoZWQgYXdheSB0aGF0IGlzIG5vdCBjdXJyZW50LgorICovCitzdGF0aWMgaW50IG1heF9jcHU7CisKK3N0YXRpYyB1MzIgY3Vycl9waWRbTUFYX0NQVVNdID0geyBbMCAuLi4gTUFYX0NQVVMtMV0gPSAtMSB9OworCitzdGF0aWMgc3RydWN0IHRocmVhZCAqY3Vycl90aHJlYWRbTUFYX0NQVVNdOworCitzdGF0aWMgY2hhciBuZXh0X3Nob3J0bmFtZTEgPSAnQSc7CitzdGF0aWMgY2hhciBuZXh0X3Nob3J0bmFtZTIgPSAnMCc7CisKK3N0YXRpYyB2b2lkCittYXBfc3dpdGNoX2V2ZW50KHN0cnVjdCB0cmFjZV9zd2l0Y2hfZXZlbnQgKnN3aXRjaF9ldmVudCwKKwkJIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkgaW50IHRoaXNfY3B1LAorCQkgdTY0IHRpbWVzdGFtcCwKKwkJIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRocmVhZCAqc2NoZWRfb3V0LCAqc2NoZWRfaW47CisJaW50IG5ld19zaG9ydG5hbWU7CisJdTY0IHRpbWVzdGFtcDA7CisJczY0IGRlbHRhOworCWludCBjcHU7CisKKwlCVUdfT04odGhpc19jcHUgPj0gTUFYX0NQVVMgfHwgdGhpc19jcHUgPCAwKTsKKworCWlmICh0aGlzX2NwdSA+IG1heF9jcHUpCisJCW1heF9jcHUgPSB0aGlzX2NwdTsKKworCXRpbWVzdGFtcDAgPSBjcHVfbGFzdF9zd2l0Y2hlZFt0aGlzX2NwdV07CisJY3B1X2xhc3Rfc3dpdGNoZWRbdGhpc19jcHVdID0gdGltZXN0YW1wOworCWlmICh0aW1lc3RhbXAwKQorCQlkZWx0YSA9IHRpbWVzdGFtcCAtIHRpbWVzdGFtcDA7CisJZWxzZQorCQlkZWx0YSA9IDA7CisKKwlpZiAoZGVsdGEgPCAwKQorCQlkaWUoImhtLCBkZWx0YTogJUxkIDwgMCA/XG4iLCBkZWx0YSk7CisKKworCXNjaGVkX291dCA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5wcmV2X3BpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwlzY2hlZF9pbiA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKworCWN1cnJfdGhyZWFkW3RoaXNfY3B1XSA9IHNjaGVkX2luOworCisJcHJpbnRmKCIgICIpOworCisJbmV3X3Nob3J0bmFtZSA9IDA7CisJaWYgKCFzY2hlZF9pbi0+c2hvcnRuYW1lWzBdKSB7CisJCXNjaGVkX2luLT5zaG9ydG5hbWVbMF0gPSBuZXh0X3Nob3J0bmFtZTE7CisJCXNjaGVkX2luLT5zaG9ydG5hbWVbMV0gPSBuZXh0X3Nob3J0bmFtZTI7CisKKwkJaWYgKG5leHRfc2hvcnRuYW1lMSA8ICdaJykgeworCQkJbmV4dF9zaG9ydG5hbWUxKys7CisJCX0gZWxzZSB7CisJCQluZXh0X3Nob3J0bmFtZTE9J0EnOworCQkJaWYgKG5leHRfc2hvcnRuYW1lMiA8ICc5JykgeworCQkJCW5leHRfc2hvcnRuYW1lMisrOworCQkJfSBlbHNlIHsKKwkJCQluZXh0X3Nob3J0bmFtZTI9JzAnOworCQkJfQorCQl9CisJCW5ld19zaG9ydG5hbWUgPSAxOworCX0KKworCWZvciAoY3B1ID0gMDsgY3B1IDw9IG1heF9jcHU7IGNwdSsrKSB7CisJCWlmIChjcHUgIT0gdGhpc19jcHUpCisJCQlwcmludGYoIiAiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIqIik7CisKKwkJaWYgKGN1cnJfdGhyZWFkW2NwdV0pIHsKKwkJCWlmIChjdXJyX3RocmVhZFtjcHVdLT5waWQpCisJCQkJcHJpbnRmKCIlMnMgIiwgY3Vycl90aHJlYWRbY3B1XS0+c2hvcnRuYW1lKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIi4gICIpOworCQl9IGVsc2UKKwkJCXByaW50ZigiICAgIik7CisJfQorCisJcHJpbnRmKCIgICUxMi42ZiBzZWNzICIsIChkb3VibGUpdGltZXN0YW1wLzFlOSk7CisJaWYgKG5ld19zaG9ydG5hbWUpIHsKKwkJcHJpbnRmKCIlcyA9PiAlczolZFxuIiwKKwkJCXNjaGVkX2luLT5zaG9ydG5hbWUsIHNjaGVkX2luLT5jb21tLCBzY2hlZF9pbi0+cGlkKTsKKwl9IGVsc2UgeworCQlwcmludGYoIlxuIik7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX3NjaGVkX3N3aXRjaF9ldmVudChzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3LAorCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCSAgIGludCB0aGlzX2NwdSwKKwkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2Vfc3dpdGNoX2V2ZW50IHN3aXRjaF9ldmVudDsKKworCUZJTExfQ09NTU9OX0ZJRUxEUyhzd2l0Y2hfZXZlbnQsIGV2ZW50LCByYXctPmRhdGEpOworCisJRklMTF9BUlJBWShzd2l0Y2hfZXZlbnQsIHByZXZfY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIHByZXZfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKHN3aXRjaF9ldmVudCwgcHJldl9wcmlvLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKHN3aXRjaF9ldmVudCwgcHJldl9zdGF0ZSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9BUlJBWShzd2l0Y2hfZXZlbnQsIG5leHRfY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIG5leHRfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKHN3aXRjaF9ldmVudCwgbmV4dF9wcmlvLCBldmVudCwgcmF3LT5kYXRhKTsKKworCWlmIChjdXJyX3BpZFt0aGlzX2NwdV0gIT0gKHUzMiktMSkgeworCQkvKgorCQkgKiBBcmUgd2UgdHJ5aW5nIHRvIHN3aXRjaCBhd2F5IGEgUElEIHRoYXQgaXMKKwkJICogbm90IGN1cnJlbnQ/CisJCSAqLworCQlpZiAoY3Vycl9waWRbdGhpc19jcHVdICE9IHN3aXRjaF9ldmVudC5wcmV2X3BpZCkKKwkJCW5yX2NvbnRleHRfc3dpdGNoX2J1Z3MrKzsKKwl9CisJaWYgKHRyYWNlX2hhbmRsZXItPnN3aXRjaF9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+c3dpdGNoX2V2ZW50KCZzd2l0Y2hfZXZlbnQsIGV2ZW50LCB0aGlzX2NwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCisJY3Vycl9waWRbdGhpc19jcHVdID0gc3dpdGNoX2V2ZW50Lm5leHRfcGlkOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19zY2hlZF9ydW50aW1lX2V2ZW50KHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcsCisJCQkgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX3J1bnRpbWVfZXZlbnQgcnVudGltZV9ldmVudDsKKworCUZJTExfQVJSQVkocnVudGltZV9ldmVudCwgY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChydW50aW1lX2V2ZW50LCBwaWQsIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfRklFTEQocnVudGltZV9ldmVudCwgcnVudGltZSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChydW50aW1lX2V2ZW50LCB2cnVudGltZSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+cnVudGltZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+cnVudGltZV9ldmVudCgmcnVudGltZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19zY2hlZF9mb3JrX2V2ZW50KHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcsCisJCQkgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCSBpbnQgY3B1IF9fdXNlZCwKKwkJCSB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB0cmFjZV9mb3JrX2V2ZW50IGZvcmtfZXZlbnQ7CisKKwlGSUxMX0NPTU1PTl9GSUVMRFMoZm9ya19ldmVudCwgZXZlbnQsIHJhdy0+ZGF0YSk7CisKKwlGSUxMX0FSUkFZKGZvcmtfZXZlbnQsIHBhcmVudF9jb21tLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKGZvcmtfZXZlbnQsIHBhcmVudF9waWQsIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfQVJSQVkoZm9ya19ldmVudCwgY2hpbGRfY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChmb3JrX2V2ZW50LCBjaGlsZF9waWQsIGV2ZW50LCByYXctPmRhdGEpOworCisJaWYgKHRyYWNlX2hhbmRsZXItPmZvcmtfZXZlbnQpCisJCXRyYWNlX2hhbmRsZXItPmZvcmtfZXZlbnQoJmZvcmtfZXZlbnQsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nfc2NoZWRfZXhpdF9ldmVudChzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJIGludCBjcHUgX191c2VkLAorCQkJIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkJIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJaWYgKHZlcmJvc2UpCisJCXByaW50Zigic2NoZWRfZXhpdCBldmVudCAlcFxuIiwgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnRfdCAqcmF3X2V2ZW50IF9fdXNlZCwgdm9pZCAqbW9yZV9kYXRhLAorCQkgIGludCBjcHUsIHU2NCB0aW1lc3RhbXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3ID0gbW9yZV9kYXRhOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CisJaW50IHR5cGU7CisKKwl0eXBlID0gdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUocmF3LT5kYXRhKTsKKwlldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgInNjaGVkX3N3aXRjaCIpKQorCQlwcm9jZXNzX3NjaGVkX3N3aXRjaF9ldmVudChyYXcsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgInNjaGVkX3N0YXRfcnVudGltZSIpKQorCQlwcm9jZXNzX3NjaGVkX3J1bnRpbWVfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF93YWtldXAiKSkKKwkJcHJvY2Vzc19zY2hlZF93YWtldXBfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF93YWtldXBfbmV3IikpCisJCXByb2Nlc3Nfc2NoZWRfd2FrZXVwX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAic2NoZWRfcHJvY2Vzc19mb3JrIikpCisJCXByb2Nlc3Nfc2NoZWRfZm9ya19ldmVudChyYXcsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgInNjaGVkX3Byb2Nlc3NfZXhpdCIpKQorCQlwcm9jZXNzX3NjaGVkX2V4aXRfZXZlbnQoZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3sKKwljaGFyIGxldmVsOworCWludCBzaG93ID0gMDsKKwlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwl1NjQgaXAgPSBldmVudC0+aXAuaXA7CisJdTY0IHRpbWVzdGFtcCA9IC0xOworCXUzMiBjcHUgPSAtMTsKKwl1NjQgcGVyaW9kID0gMTsKKwl2b2lkICptb3JlX2RhdGEgPSBldmVudC0+aXAuX19tb3JlX2RhdGE7CisJaW50IGNwdW1vZGU7CisKKwl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5pcC5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSB7CisJCXRpbWVzdGFtcCA9ICoodTY0ICopbW9yZV9kYXRhOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7CisJfQorCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKSB7CisJCWNwdSA9ICoodTMyICopbW9yZV9kYXRhOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHUzMik7CisJCW1vcmVfZGF0YSArPSBzaXplb2YodTMyKTsgLyogcmVzZXJ2ZWQgKi8KKwl9CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpIHsKKwkJcGVyaW9kID0gKih1NjQgKiltb3JlX2RhdGE7CisJCW1vcmVfZGF0YSArPSBzaXplb2YodTY0KTsKKwl9CisKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfU0FNUExFIChJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCisJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAorCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAorCQlldmVudC0+aGVhZGVyLm1pc2MsCisJCWV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC50aWQsCisJCSh2b2lkICopKGxvbmcpaXAsCisJCShsb25nIGxvbmcpcGVyaW9kKTsKKworCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOworCisJaWYgKHRocmVhZCA9PSBOVUxMKSB7CisJCWVwcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNwdW1vZGUgPSBldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKKworCWlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKSB7CisJCXNob3cgPSBTSE9XX0tFUk5FTDsKKwkJbGV2ZWwgPSAnayc7CisKKwkJZHNvID0ga2VybmVsX2RzbzsKKworCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLCBkc28tPm5hbWUpOworCisJfSBlbHNlIGlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUikgeworCisJCXNob3cgPSBTSE9XX1VTRVI7CisJCWxldmVsID0gJy4nOworCisJfSBlbHNlIHsKKwkJc2hvdyA9IFNIT1dfSFY7CisJCWxldmVsID0gJ0gnOworCisJCWRzbyA9IGh5cGVydmlzb3JfZHNvOworCisJCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogW2h5cGVydmlzb3JdXG4iKTsKKwl9CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpCisJCXByb2Nlc3NfcmF3X2V2ZW50KGV2ZW50LCBtb3JlX2RhdGEsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCit7CisJdHJhY2VfZXZlbnQoZXZlbnQpOworCisJbnJfZXZlbnRzKys7CisJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKKwljYXNlIFBFUkZfUkVDT1JEX01NQVA6CisJCXJldHVybiAwOworCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKKwkJbnJfbG9zdF9jaHVua3MrKzsKKwkJbnJfbG9zdF9ldmVudHMgKz0gZXZlbnQtPmxvc3QubG9zdDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CisJCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CisKKwljYXNlIFBFUkZfUkVDT1JEX0VYSVQgLi4uIFBFUkZfUkVDT1JEX1JFQUQ6CisJCXJldHVybiAwOworCisJY2FzZSBQRVJGX1JFQ09SRF9TQU1QTEU6CisJCXJldHVybiBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKKworCWNhc2UgUEVSRl9SRUNPUkRfTUFYOgorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2V2ZW50cyh2b2lkKQoreworCWludCByZXQsIHJjID0gRVhJVF9GQUlMVVJFOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGhlYWQgPSAwOworCXN0cnVjdCBzdGF0IHBlcmZfc3RhdDsKKwlldmVudF90ICpldmVudDsKKwl1aW50MzJfdCBzaXplOworCWNoYXIgKmJ1ZjsKKworCXRyYWNlX3JlcG9ydCgpOworCXJlZ2lzdGVyX2lkbGVfdGhyZWFkKCZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisKKwlpbnB1dCA9IG9wZW4oaW5wdXRfbmFtZSwgT19SRE9OTFkpOworCWlmIChpbnB1dCA8IDApIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gb3BlbiBmaWxlIik7CisJCWV4aXQoLTEpOworCX0KKworCXJldCA9IGZzdGF0KGlucHV0LCAmcGVyZl9zdGF0KTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoImZhaWxlZCB0byBzdGF0IGZpbGUiKTsKKwkJZXhpdCgtMSk7CisJfQorCisJaWYgKCFwZXJmX3N0YXQuc3Rfc2l6ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgInplcm8tc2l6ZWQgZmlsZSwgbm90aGluZyB0byBkbyFcbiIpOworCQlleGl0KDApOworCX0KKwloZWFkZXIgPSBwZXJmX2hlYWRlcl9fcmVhZChpbnB1dCk7CisJaGVhZCA9IGhlYWRlci0+ZGF0YV9vZmZzZXQ7CisJc2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoaGVhZGVyKTsKKworCWlmICghKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkKKwkJZGllKCJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKKwkJICAgICJ3aXRob3V0IC1SPyIpOworCisJaWYgKGxvYWRfa2VybmVsKCkgPCAwKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIGxvYWQga2VybmVsIHN5bWJvbHMiKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKK3JlbWFwOgorCWJ1ZiA9IChjaGFyICopbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAorCQkJICAgTUFQX1NIQVJFRCwgaW5wdXQsIG9mZnNldCk7CisJaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIG1tYXAgZmlsZSIpOworCQlleGl0KC0xKTsKKwl9CisKK21vcmU6CisJZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKKworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisJaWYgKCFzaXplKQorCQlzaXplID0gODsKKworCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KSB7CisJCXVuc2lnbmVkIGxvbmcgc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CisJCWludCByZXM7CisKKwkJcmVzID0gbXVubWFwKGJ1ZiwgcGFnZV9zaXplICogbW1hcF93aW5kb3cpOworCQlhc3NlcnQocmVzID09IDApOworCisJCW9mZnNldCArPSBzaGlmdDsKKwkJaGVhZCAtPSBzaGlmdDsKKwkJZ290byByZW1hcDsKKwl9CisKKwlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOworCisKKwlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKSA8IDApIHsKKworCQkvKgorCQkgKiBhc3N1bWUgd2UgbG9zdCB0cmFjayBvZiB0aGUgc3RyZWFtLCBjaGVjayBhbGlnbm1lbnQsIGFuZAorCQkgKiBpbmNyZW1lbnQgYSBzaW5nbGUgdTY0IGluIHRoZSBob3BlIHRvIGNhdGNoIG9uIGFnYWluICdzb29uJy4KKwkJICovCisKKwkJaWYgKHVubGlrZWx5KGhlYWQgJiA3KSkKKwkJCWhlYWQgJj0gfjdVTEw7CisKKwkJc2l6ZSA9IDg7CisJfQorCisJaGVhZCArPSBzaXplOworCisJaWYgKG9mZnNldCArIGhlYWQgPCAodW5zaWduZWQgbG9uZylwZXJmX3N0YXQuc3Rfc2l6ZSkKKwkJZ290byBtb3JlOworCisJcmMgPSBFWElUX1NVQ0NFU1M7CisJY2xvc2UoaW5wdXQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBwcmludF9iYWRfZXZlbnRzKHZvaWQpCit7CisJaWYgKG5yX3Vub3JkZXJlZF90aW1lc3RhbXBzICYmIG5yX3RpbWVzdGFtcHMpIHsKKwkJcHJpbnRmKCIgIElORk86ICUuM2YlJSB1bm9yZGVyZWQgdGltZXN0YW1wcyAoJWxkIG91dCBvZiAlbGQpXG4iLAorCQkJKGRvdWJsZSlucl91bm9yZGVyZWRfdGltZXN0YW1wcy8oZG91YmxlKW5yX3RpbWVzdGFtcHMqMTAwLjAsCisJCQlucl91bm9yZGVyZWRfdGltZXN0YW1wcywgbnJfdGltZXN0YW1wcyk7CisJfQorCWlmIChucl9sb3N0X2V2ZW50cyAmJiBucl9ldmVudHMpIHsKKwkJcHJpbnRmKCIgIElORk86ICUuM2YlJSBsb3N0IGV2ZW50cyAoJWxkIG91dCBvZiAlbGQsIGluICVsZCBjaHVua3MpXG4iLAorCQkJKGRvdWJsZSlucl9sb3N0X2V2ZW50cy8oZG91YmxlKW5yX2V2ZW50cyoxMDAuMCwKKwkJCW5yX2xvc3RfZXZlbnRzLCBucl9ldmVudHMsIG5yX2xvc3RfY2h1bmtzKTsKKwl9CisJaWYgKG5yX3N0YXRlX21hY2hpbmVfYnVncyAmJiBucl90aW1lc3RhbXBzKSB7CisJCXByaW50ZigiICBJTkZPOiAlLjNmJSUgc3RhdGUgbWFjaGluZSBidWdzICglbGQgb3V0IG9mICVsZCkiLAorCQkJKGRvdWJsZSlucl9zdGF0ZV9tYWNoaW5lX2J1Z3MvKGRvdWJsZSlucl90aW1lc3RhbXBzKjEwMC4wLAorCQkJbnJfc3RhdGVfbWFjaGluZV9idWdzLCBucl90aW1lc3RhbXBzKTsKKwkJaWYgKG5yX2xvc3RfZXZlbnRzKQorCQkJcHJpbnRmKCIgKGR1ZSB0byBsb3N0IGV2ZW50cz8pIik7CisJCXByaW50ZigiXG4iKTsKKwl9CisJaWYgKG5yX2NvbnRleHRfc3dpdGNoX2J1Z3MgJiYgbnJfdGltZXN0YW1wcykgeworCQlwcmludGYoIiAgSU5GTzogJS4zZiUlIGNvbnRleHQgc3dpdGNoIGJ1Z3MgKCVsZCBvdXQgb2YgJWxkKSIsCisJCQkoZG91YmxlKW5yX2NvbnRleHRfc3dpdGNoX2J1Z3MvKGRvdWJsZSlucl90aW1lc3RhbXBzKjEwMC4wLAorCQkJbnJfY29udGV4dF9zd2l0Y2hfYnVncywgbnJfdGltZXN0YW1wcyk7CisJCWlmIChucl9sb3N0X2V2ZW50cykKKwkJCXByaW50ZigiIChkdWUgdG8gbG9zdCBldmVudHM/KSIpOworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2NtZF9sYXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKKworCXNldHVwX3BhZ2VyKCk7CisJcmVhZF9ldmVudHMoKTsKKwlzb3J0X2xhdCgpOworCisJcHJpbnRmKCJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRmKCIgIFRhc2sgICAgICAgICAgICAgICAgICB8ICAgUnVudGltZSBtcyAgfCBTd2l0Y2hlcyB8IEF2ZXJhZ2UgZGVsYXkgbXMgfCBNYXhpbXVtIGRlbGF5IG1zIHxcbiIpOworCXByaW50ZigiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCW5leHQgPSByYl9maXJzdCgmc29ydGVkX2F0b21fcm9vdCk7CisKKwl3aGlsZSAobmV4dCkgeworCQlzdHJ1Y3Qgd29ya19hdG9tcyAqd29ya19saXN0OworCisJCXdvcmtfbGlzdCA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCB3b3JrX2F0b21zLCBub2RlKTsKKwkJb3V0cHV0X2xhdF90aHJlYWQod29ya19saXN0KTsKKwkJbmV4dCA9IHJiX25leHQobmV4dCk7CisJfQorCisJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTlMZCB8XG4iLAorCQkoZG91YmxlKWFsbF9ydW50aW1lLzFlNiwgYWxsX2NvdW50KTsKKworCXByaW50ZigiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlwcmludF9iYWRfZXZlbnRzKCk7CisJcHJpbnRmKCJcbiIpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfc2NoZWRfaGFuZGxlciBtYXBfb3BzICA9IHsKKwkud2FrZXVwX2V2ZW50CQk9IE5VTEwsCisJLnN3aXRjaF9ldmVudAkJPSBtYXBfc3dpdGNoX2V2ZW50LAorCS5ydW50aW1lX2V2ZW50CQk9IE5VTEwsCisJLmZvcmtfZXZlbnQJCT0gTlVMTCwKK307CisKK3N0YXRpYyB2b2lkIF9fY21kX21hcCh2b2lkKQoreworCW1heF9jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19DT05GKTsKKworCXNldHVwX3BhZ2VyKCk7CisJcmVhZF9ldmVudHMoKTsKKwlwcmludF9iYWRfZXZlbnRzKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fY21kX3JlcGxheSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWNhbGlicmF0ZV9ydW5fbWVhc3VyZW1lbnRfb3ZlcmhlYWQoKTsKKwljYWxpYnJhdGVfc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQoKTsKKworCXRlc3RfY2FsaWJyYXRpb25zKCk7CisKKwlyZWFkX2V2ZW50cygpOworCisJcHJpbnRmKCJucl9ydW5fZXZlbnRzOiAgICAgICAgJWxkXG4iLCBucl9ydW5fZXZlbnRzKTsKKwlwcmludGYoIm5yX3NsZWVwX2V2ZW50czogICAgICAlbGRcbiIsIG5yX3NsZWVwX2V2ZW50cyk7CisJcHJpbnRmKCJucl93YWtldXBfZXZlbnRzOiAgICAgJWxkXG4iLCBucl93YWtldXBfZXZlbnRzKTsKKworCWlmICh0YXJnZXRsZXNzX3dha2V1cHMpCisJCXByaW50ZigidGFyZ2V0LWxlc3Mgd2FrZXVwczogICVsZFxuIiwgdGFyZ2V0bGVzc193YWtldXBzKTsKKwlpZiAobXVsdGl0YXJnZXRfd2FrZXVwcykKKwkJcHJpbnRmKCJtdWx0aS10YXJnZXQgd2FrZXVwczogJWxkXG4iLCBtdWx0aXRhcmdldF93YWtldXBzKTsKKwlpZiAobnJfcnVuX2V2ZW50c19vcHRpbWl6ZWQpCisJCXByaW50ZigicnVuIGF0b21zIG9wdGltaXplZDogJWxkXG4iLAorCQkJbnJfcnVuX2V2ZW50c19vcHRpbWl6ZWQpOworCisJcHJpbnRfdGFza190cmFjZXMoKTsKKwlhZGRfY3Jvc3NfdGFza193YWtldXBzKCk7CisKKwljcmVhdGVfdGFza3MoKTsKKwlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJZm9yIChpID0gMDsgaSA8IHJlcGxheV9yZXBlYXQ7IGkrKykKKwkJcnVuX29uZV90ZXN0KCk7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzY2hlZF91c2FnZVtdID0geworCSJwZXJmIHNjaGVkIFs8b3B0aW9ucz5dIHtyZWNvcmR8bGF0ZW5jeXxtYXB8cmVwbGF5fHRyYWNlfSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gc2NoZWRfb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAorCQkgICAgImlucHV0IGZpbGUgbmFtZSIpLAorCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKKwkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKKwlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLAorCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxhdGVuY3lfdXNhZ2VbXSA9IHsKKwkicGVyZiBzY2hlZCBsYXRlbmN5IFs8b3B0aW9ucz5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsYXRlbmN5X29wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdzJywgInNvcnQiLCAmc29ydF9vcmRlciwgImtleVssa2V5Mi4uLl0iLAorCQkgICAic29ydCBieSBrZXkocyk6IHJ1bnRpbWUsIHN3aXRjaCwgYXZnLCBtYXgiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCisJCSAgICAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCisJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwKKwkJICAgICJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSSIpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXBsYXlfdXNhZ2VbXSA9IHsKKwkicGVyZiBzY2hlZCByZXBsYXkgWzxvcHRpb25zPl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIHJlcGxheV9vcHRpb25zW10gPSB7CisJT1BUX0lOVEVHRVIoJ3InLCAicmVwZWF0IiwgJnJlcGxheV9yZXBlYXQsCisJCSAgICAicmVwZWF0IHRoZSB3b3JrbG9hZCByZXBsYXkgTiB0aW1lcyAoLTE6IGluZmluaXRlKSIpLAorCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKKwkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKKwlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLAorCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgdm9pZCBzZXR1cF9zb3J0aW5nKHZvaWQpCit7CisJY2hhciAqdG1wLCAqdG9rLCAqc3RyID0gc3RyZHVwKHNvcnRfb3JkZXIpOworCisJZm9yICh0b2sgPSBzdHJ0b2tfcihzdHIsICIsICIsICZ0bXApOworCQkJdG9rOyB0b2sgPSBzdHJ0b2tfcihOVUxMLCAiLCAiLCAmdG1wKSkgeworCQlpZiAoc29ydF9kaW1lbnNpb25fX2FkZCh0b2ssICZzb3J0X2xpc3QpIDwgMCkgeworCQkJZXJyb3IoIlVua25vd24gLS1zb3J0IGtleTogYCVzJyIsIHRvayk7CisJCQl1c2FnZV93aXRoX29wdGlvbnMobGF0ZW5jeV91c2FnZSwgbGF0ZW5jeV9vcHRpb25zKTsKKwkJfQorCX0KKworCWZyZWUoc3RyKTsKKworCXNvcnRfZGltZW5zaW9uX19hZGQoKGNoYXIgKikicGlkIiwgJmNtcF9waWQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKKwkicmVjb3JkIiwKKwkiLWEiLAorCSItUiIsCisJIi1NIiwKKwkiLWYiLAorCSItbSIsICIxMDI0IiwKKwkiLWMiLCAiMSIsCisJIi1lIiwgInNjaGVkOnNjaGVkX3N3aXRjaDpyIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfc3RhdF93YWl0OnIiLAorCSItZSIsICJzY2hlZDpzY2hlZF9zdGF0X3NsZWVwOnIiLAorCSItZSIsICJzY2hlZDpzY2hlZF9zdGF0X2lvd2FpdDpyIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lOnIiLAorCSItZSIsICJzY2hlZDpzY2hlZF9wcm9jZXNzX2V4aXQ6ciIsCisJIi1lIiwgInNjaGVkOnNjaGVkX3Byb2Nlc3NfZm9yazpyIiwKKwkiLWUiLCAic2NoZWQ6c2NoZWRfd2FrZXVwOnIiLAorCSItZSIsICJzY2hlZDpzY2hlZF9taWdyYXRlX3Rhc2s6ciIsCit9OworCitzdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IHJlY19hcmdjLCBpLCBqOworCWNvbnN0IGNoYXIgKipyZWNfYXJndjsKKworCXJlY19hcmdjID0gQVJSQVlfU0laRShyZWNvcmRfYXJncykgKyBhcmdjIC0gMTsKKwlyZWNfYXJndiA9IGNhbGxvYyhyZWNfYXJnYyArIDEsIHNpemVvZihjaGFyICopKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKTsgaSsrKQorCQlyZWNfYXJndltpXSA9IHN0cmR1cChyZWNvcmRfYXJnc1tpXSk7CisKKwlmb3IgKGogPSAxOyBqIDwgKHVuc2lnbmVkIGludClhcmdjOyBqKyssIGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBhcmd2W2pdOworCisJQlVHX09OKGkgIT0gcmVjX2FyZ2MpOworCisJcmV0dXJuIGNtZF9yZWNvcmQoaSwgcmVjX2FyZ3YsIE5VTEwpOworfQorCitpbnQgY21kX3NjaGVkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlzeW1ib2xfX2luaXQoKTsKKwlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgc2NoZWRfb3B0aW9ucywgc2NoZWRfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmICghYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNjaGVkX3VzYWdlLCBzY2hlZF9vcHRpb25zKTsKKworCWlmICghc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpIHsKKwkJcmV0dXJuIF9fY21kX3JlY29yZChhcmdjLCBhcmd2KTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbMF0sICJsYXQiLCAzKSkgeworCQl0cmFjZV9oYW5kbGVyID0gJmxhdF9vcHM7CisJCWlmIChhcmdjID4gMSkgeworCQkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgbGF0ZW5jeV9vcHRpb25zLCBsYXRlbmN5X3VzYWdlLCAwKTsKKwkJCWlmIChhcmdjKQorCQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhsYXRlbmN5X3VzYWdlLCBsYXRlbmN5X29wdGlvbnMpOworCQl9CisJCXNldHVwX3NvcnRpbmcoKTsKKwkJX19jbWRfbGF0KCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJtYXAiKSkgeworCQl0cmFjZV9oYW5kbGVyID0gJm1hcF9vcHM7CisJCXNldHVwX3NvcnRpbmcoKTsKKwkJX19jbWRfbWFwKCk7CisJfSBlbHNlIGlmICghc3RybmNtcChhcmd2WzBdLCAicmVwIiwgMykpIHsKKwkJdHJhY2VfaGFuZGxlciA9ICZyZXBsYXlfb3BzOworCQlpZiAoYXJnYykgeworCQkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcmVwbGF5X29wdGlvbnMsIHJlcGxheV91c2FnZSwgMCk7CisJCQlpZiAoYXJnYykKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMocmVwbGF5X3VzYWdlLCByZXBsYXlfb3B0aW9ucyk7CisJCX0KKwkJX19jbWRfcmVwbGF5KCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ0cmFjZSIpKSB7CisJCS8qCisJCSAqIEFsaWFzZWQgdG8gJ3BlcmYgdHJhY2UnIGZvciBub3c6CisJCSAqLworCQlyZXR1cm4gY21kX3RyYWNlKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJfSBlbHNlIHsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNjaGVkX3VzYWdlLCBzY2hlZF9vcHRpb25zKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IDYxYjgyODIuLjE2YWYyZDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgogI2luY2x1ZGUgPG1hdGguaD4KIAotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciBkZWZhdWx0X2F0dHJzW10gPSB7CitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBkZWZhdWx0X2F0dHJzW10gPSB7CiAKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwl9LAogICB7IC50eXBlID0gUEVSRl9UWVBFX1NPRlRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTfSwKQEAgLTEzMCwxMSArMTMwLDExIEBACiAJIGF0dHJzW2NvdW50ZXJdLmNvbmZpZyA9PSBQRVJGX0NPVU5UXyMjYykKIAogI2RlZmluZSBFUlJfUEVSRl9PUEVOIFwKLSJFcnJvcjogY291bnRlciAlZCwgc3lzX3BlcmZfY291bnRlcl9vcGVuKCkgc3lzY2FsbCByZXR1cm5lZCB3aXRoICVkICglcylcbiIKKyJFcnJvcjogY291bnRlciAlZCwgc3lzX3BlcmZfZXZlbnRfb3BlbigpIHN5c2NhbGwgcmV0dXJuZWQgd2l0aCAlZCAoJXMpXG4iCiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9wZXJmX3N0YXRfY291bnRlcihpbnQgY291bnRlciwgaW50IHBpZCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIgPSBhdHRycyArIGNvdW50ZXI7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9IGF0dHJzICsgY291bnRlcjsKIAogCWlmIChzY2FsZSkKIAkJYXR0ci0+cmVhZF9mb3JtYXQgPSBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgfApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCXVuc2lnbmVkIGludCBjcHU7CiAKIAkJZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVzOyBjcHUrKykgewotCQkJZmRbY3B1XVtjb3VudGVyXSA9IHN5c19wZXJmX2NvdW50ZXJfb3BlbihhdHRyLCAtMSwgY3B1LCAtMSwgMCk7CisJCQlmZFtjcHVdW2NvdW50ZXJdID0gc3lzX3BlcmZfZXZlbnRfb3BlbihhdHRyLCAtMSwgY3B1LCAtMSwgMCk7CiAJCQlpZiAoZmRbY3B1XVtjb3VudGVyXSA8IDAgJiYgdmVyYm9zZSkKIAkJCQlmcHJpbnRmKHN0ZGVyciwgRVJSX1BFUkZfT1BFTiwgY291bnRlciwKIAkJCQkJZmRbY3B1XVtjb3VudGVyXSwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlhdHRyLT5kaXNhYmxlZAkgICAgID0gMTsKIAkJYXR0ci0+ZW5hYmxlX29uX2V4ZWMgPSAxOwogCi0JCWZkWzBdW2NvdW50ZXJdID0gc3lzX3BlcmZfY291bnRlcl9vcGVuKGF0dHIsIHBpZCwgLTEsIC0xLCAwKTsKKwkJZmRbMF1bY291bnRlcl0gPSBzeXNfcGVyZl9ldmVudF9vcGVuKGF0dHIsIHBpZCwgLTEsIC0xLCAwKTsKIAkJaWYgKGZkWzBdW2NvdW50ZXJdIDwgMCAmJiB2ZXJib3NlKQogCQkJZnByaW50ZihzdGRlcnIsIEVSUl9QRVJGX09QRU4sIGNvdW50ZXIsCiAJCQkJZmRbMF1bY291bnRlcl0sIHN0cmVycm9yKGVycm5vKSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwNTY4MQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwpAQCAtMCwwICsxLDExNTggQEAKKy8qCisgKiBidWlsdGluLXRpbWVjaGFydC5jIC0gbWFrZSBhbiBzdmcgdGltZWNoYXJ0IG9mIHN5c3RlbSBhY3Rpdml0eQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW5AbGludXguaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCisjaW5jbHVkZSAidXRpbC91dGlsLmgiCisKKyNpbmNsdWRlICJ1dGlsL2NvbG9yLmgiCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwvc3RyaW5nLmgiCisjaW5jbHVkZSAidXRpbC9jYWxsY2hhaW4uaCIKKyNpbmNsdWRlICJ1dGlsL3N0cmxpc3QuaCIKKworI2luY2x1ZGUgInBlcmYuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCisjaW5jbHVkZSAidXRpbC9zdmdoZWxwZXIuaCIKKworc3RhdGljIGNoYXIJCWNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CitzdGF0aWMgY2hhcgkJY29uc3QgKm91dHB1dF9uYW1lID0gIm91dHB1dC5zdmciOworCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCXBhZ2Vfc2l6ZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCW1tYXBfd2luZG93ID0gMzI7CitzdGF0aWMgdTY0CQlzYW1wbGVfdHlwZTsKKworc3RhdGljIHVuc2lnbmVkIGludAludW1jcHVzOworc3RhdGljIHU2NAkJbWluX2ZyZXE7CS8qIExvd2VzdCBDUFUgZnJlcXVlbmN5IHNlZW4gKi8KK3N0YXRpYyB1NjQJCW1heF9mcmVxOwkvKiBIaWdoZXN0IENQVSBmcmVxdWVuY3kgc2VlbiAqLworc3RhdGljIHU2NAkJdHVyYm9fZnJlcXVlbmN5OworCitzdGF0aWMgdTY0CQlmaXJzdF90aW1lLCBsYXN0X3RpbWU7CisKKworc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOworCitzdHJ1Y3QgcGVyX3BpZDsKK3N0cnVjdCBwZXJfcGlkY29tbTsKKworc3RydWN0IGNwdV9zYW1wbGU7CitzdHJ1Y3QgcG93ZXJfZXZlbnQ7CitzdHJ1Y3Qgd2FrZV9ldmVudDsKKworc3RydWN0IHNhbXBsZV93cmFwcGVyOworCisvKgorICogRGF0YXN0cnVjdHVyZSBsYXlvdXQ6CisgKiBXZSBrZWVwIGFuIGxpc3Qgb2YgInBpZCJzLCBtYXRjaGluZyB0aGUga2VybmVscyBub3Rpb24gb2YgYSB0YXNrIHN0cnVjdC4KKyAqIEVhY2ggInBpZCIgZW50cnksIGhhcyBhIGxpc3Qgb2YgImNvbW0icy4KKyAqCXRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIHRyYWNrIGRpZmZlcmVudCBwcm9ncmFtcyBkaWZmZXJlbnQsIHdoaWxlCisgKglleGVjIHdpbGwgcmV1c2UgdGhlIG9yaWdpbmFsIHBpZCAoYnkgZGVzaWduKS4KKyAqIEVhY2ggY29tbSBoYXMgYSBsaXN0IG9mIHNhbXBsZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZHJhdworICogZmluYWwgZ3JhcGguCisgKi8KKworc3RydWN0IHBlcl9waWQgeworCXN0cnVjdCBwZXJfcGlkICpuZXh0OworCisJaW50CQlwaWQ7CisJaW50CQlwcGlkOworCisJdTY0CQlzdGFydF90aW1lOworCXU2NAkJZW5kX3RpbWU7CisJdTY0CQl0b3RhbF90aW1lOworCWludAkJZGlzcGxheTsKKworCXN0cnVjdCBwZXJfcGlkY29tbSAqYWxsOworCXN0cnVjdCBwZXJfcGlkY29tbSAqY3VycmVudDsKKworCWludCBwYWludGVkOworfTsKKworCitzdHJ1Y3QgcGVyX3BpZGNvbW0geworCXN0cnVjdCBwZXJfcGlkY29tbSAqbmV4dDsKKworCXU2NAkJc3RhcnRfdGltZTsKKwl1NjQJCWVuZF90aW1lOworCXU2NAkJdG90YWxfdGltZTsKKworCWludAkJWTsKKwlpbnQJCWRpc3BsYXk7CisKKwlsb25nCQlzdGF0ZTsKKwl1NjQJCXN0YXRlX3NpbmNlOworCisJY2hhcgkJKmNvbW07CisKKwlzdHJ1Y3QgY3B1X3NhbXBsZSAqc2FtcGxlczsKK307CisKK3N0cnVjdCBzYW1wbGVfd3JhcHBlciB7CisJc3RydWN0IHNhbXBsZV93cmFwcGVyICpuZXh0OworCisJdTY0CQl0aW1lc3RhbXA7CisJdW5zaWduZWQgY2hhcglkYXRhWzBdOworfTsKKworI2RlZmluZSBUWVBFX05PTkUJMAorI2RlZmluZSBUWVBFX1JVTk5JTkcJMQorI2RlZmluZSBUWVBFX1dBSVRJTkcJMgorI2RlZmluZSBUWVBFX0JMT0NLRUQJMworCitzdHJ1Y3QgY3B1X3NhbXBsZSB7CisJc3RydWN0IGNwdV9zYW1wbGUgKm5leHQ7CisKKwl1NjQgc3RhcnRfdGltZTsKKwl1NjQgZW5kX3RpbWU7CisJaW50IHR5cGU7CisJaW50IGNwdTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGVyX3BpZCAqYWxsX2RhdGE7CisKKyNkZWZpbmUgQ1NUQVRFIDEKKyNkZWZpbmUgUFNUQVRFIDIKKworc3RydWN0IHBvd2VyX2V2ZW50IHsKKwlzdHJ1Y3QgcG93ZXJfZXZlbnQgKm5leHQ7CisJaW50IHR5cGU7CisJaW50IHN0YXRlOworCXU2NCBzdGFydF90aW1lOworCXU2NCBlbmRfdGltZTsKKwlpbnQgY3B1OworfTsKKworc3RydWN0IHdha2VfZXZlbnQgeworCXN0cnVjdCB3YWtlX2V2ZW50ICpuZXh0OworCWludCB3YWtlcjsKKwlpbnQgd2FrZWU7CisJdTY0IHRpbWU7Cit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyX2V2ZW50ICAgICpwb3dlcl9ldmVudHM7CitzdGF0aWMgc3RydWN0IHdha2VfZXZlbnQgICAgICp3YWtlX2V2ZW50czsKKworc3RydWN0IHNhbXBsZV93cmFwcGVyICphbGxfc2FtcGxlczsKKworc3RhdGljIHN0cnVjdCBwZXJfcGlkICpmaW5kX2NyZWF0ZV9waWQoaW50IHBpZCkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqY3Vyc29yID0gYWxsX2RhdGE7CisKKwl3aGlsZSAoY3Vyc29yKSB7CisJCWlmIChjdXJzb3ItPnBpZCA9PSBwaWQpCisJCQlyZXR1cm4gY3Vyc29yOworCQljdXJzb3IgPSBjdXJzb3ItPm5leHQ7CisJfQorCWN1cnNvciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlcl9waWQpKTsKKwlhc3NlcnQoY3Vyc29yICE9IE5VTEwpOworCW1lbXNldChjdXJzb3IsIDAsIHNpemVvZihzdHJ1Y3QgcGVyX3BpZCkpOworCWN1cnNvci0+cGlkID0gcGlkOworCWN1cnNvci0+bmV4dCA9IGFsbF9kYXRhOworCWFsbF9kYXRhID0gY3Vyc29yOworCXJldHVybiBjdXJzb3I7Cit9CisKK3N0YXRpYyB2b2lkIHBpZF9zZXRfY29tbShpbnQgcGlkLCBjaGFyICpjb21tKQoreworCXN0cnVjdCBwZXJfcGlkICpwOworCXN0cnVjdCBwZXJfcGlkY29tbSAqYzsKKwlwID0gZmluZF9jcmVhdGVfcGlkKHBpZCk7CisJYyA9IHAtPmFsbDsKKwl3aGlsZSAoYykgeworCQlpZiAoYy0+Y29tbSAmJiBzdHJjbXAoYy0+Y29tbSwgY29tbSkgPT0gMCkgeworCQkJcC0+Y3VycmVudCA9IGM7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCFjLT5jb21tKSB7CisJCQljLT5jb21tID0gc3RyZHVwKGNvbW0pOworCQkJcC0+Y3VycmVudCA9IGM7CisJCQlyZXR1cm47CisJCX0KKwkJYyA9IGMtPm5leHQ7CisJfQorCWMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJfcGlkY29tbSkpOworCWFzc2VydChjICE9IE5VTEwpOworCW1lbXNldChjLCAwLCBzaXplb2Yoc3RydWN0IHBlcl9waWRjb21tKSk7CisJYy0+Y29tbSA9IHN0cmR1cChjb21tKTsKKwlwLT5jdXJyZW50ID0gYzsKKwljLT5uZXh0ID0gcC0+YWxsOworCXAtPmFsbCA9IGM7Cit9CisKK3N0YXRpYyB2b2lkIHBpZF9mb3JrKGludCBwaWQsIGludCBwcGlkLCB1NjQgdGltZXN0YW1wKQoreworCXN0cnVjdCBwZXJfcGlkICpwLCAqcHA7CisJcCA9IGZpbmRfY3JlYXRlX3BpZChwaWQpOworCXBwID0gZmluZF9jcmVhdGVfcGlkKHBwaWQpOworCXAtPnBwaWQgPSBwcGlkOworCWlmIChwcC0+Y3VycmVudCAmJiBwcC0+Y3VycmVudC0+Y29tbSAmJiAhcC0+Y3VycmVudCkKKwkJcGlkX3NldF9jb21tKHBpZCwgcHAtPmN1cnJlbnQtPmNvbW0pOworCisJcC0+c3RhcnRfdGltZSA9IHRpbWVzdGFtcDsKKwlpZiAocC0+Y3VycmVudCkgeworCQlwLT5jdXJyZW50LT5zdGFydF90aW1lID0gdGltZXN0YW1wOworCQlwLT5jdXJyZW50LT5zdGF0ZV9zaW5jZSA9IHRpbWVzdGFtcDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBpZF9leGl0KGludCBwaWQsIHU2NCB0aW1lc3RhbXApCit7CisJc3RydWN0IHBlcl9waWQgKnA7CisJcCA9IGZpbmRfY3JlYXRlX3BpZChwaWQpOworCXAtPmVuZF90aW1lID0gdGltZXN0YW1wOworCWlmIChwLT5jdXJyZW50KQorCQlwLT5jdXJyZW50LT5lbmRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworc3RhdGljIHZvaWQKK3BpZF9wdXRfc2FtcGxlKGludCBwaWQsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJc3RydWN0IHBlcl9waWQgKnA7CisJc3RydWN0IHBlcl9waWRjb21tICpjOworCXN0cnVjdCBjcHVfc2FtcGxlICpzYW1wbGU7CisKKwlwID0gZmluZF9jcmVhdGVfcGlkKHBpZCk7CisJYyA9IHAtPmN1cnJlbnQ7CisJaWYgKCFjKSB7CisJCWMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJfcGlkY29tbSkpOworCQlhc3NlcnQoYyAhPSBOVUxMKTsKKwkJbWVtc2V0KGMsIDAsIHNpemVvZihzdHJ1Y3QgcGVyX3BpZGNvbW0pKTsKKwkJcC0+Y3VycmVudCA9IGM7CisJCWMtPm5leHQgPSBwLT5hbGw7CisJCXAtPmFsbCA9IGM7CisJfQorCisJc2FtcGxlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1X3NhbXBsZSkpOworCWFzc2VydChzYW1wbGUgIT0gTlVMTCk7CisJbWVtc2V0KHNhbXBsZSwgMCwgc2l6ZW9mKHN0cnVjdCBjcHVfc2FtcGxlKSk7CisJc2FtcGxlLT5zdGFydF90aW1lID0gc3RhcnQ7CisJc2FtcGxlLT5lbmRfdGltZSA9IGVuZDsKKwlzYW1wbGUtPnR5cGUgPSB0eXBlOworCXNhbXBsZS0+bmV4dCA9IGMtPnNhbXBsZXM7CisJc2FtcGxlLT5jcHUgPSBjcHU7CisJYy0+c2FtcGxlcyA9IHNhbXBsZTsKKworCWlmIChzYW1wbGUtPnR5cGUgPT0gVFlQRV9SVU5OSU5HICYmIGVuZCA+IHN0YXJ0ICYmIHN0YXJ0ID4gMCkgeworCQljLT50b3RhbF90aW1lICs9IChlbmQtc3RhcnQpOworCQlwLT50b3RhbF90aW1lICs9IChlbmQtc3RhcnQpOworCX0KKworCWlmIChjLT5zdGFydF90aW1lID09IDAgfHwgYy0+c3RhcnRfdGltZSA+IHN0YXJ0KQorCQljLT5zdGFydF90aW1lID0gc3RhcnQ7CisJaWYgKHAtPnN0YXJ0X3RpbWUgPT0gMCB8fCBwLT5zdGFydF90aW1lID4gc3RhcnQpCisJCXAtPnN0YXJ0X3RpbWUgPSBzdGFydDsKKworCWlmIChjcHUgPiBudW1jcHVzKQorCQludW1jcHVzID0gY3B1OworfQorCisjZGVmaW5lIE1BWF9DUFVTIDQwOTYKKworc3RhdGljIHU2NCBjcHVzX2NzdGF0ZV9zdGFydF90aW1lc1tNQVhfQ1BVU107CitzdGF0aWMgaW50IGNwdXNfY3N0YXRlX3N0YXRlW01BWF9DUFVTXTsKK3N0YXRpYyB1NjQgY3B1c19wc3RhdGVfc3RhcnRfdGltZXNbTUFYX0NQVVNdOworc3RhdGljIHU2NCBjcHVzX3BzdGF0ZV9zdGF0ZVtNQVhfQ1BVU107CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NfY29tbV9ldmVudChldmVudF90ICpldmVudCkKK3sKKwlwaWRfc2V0X2NvbW0oZXZlbnQtPmNvbW0ucGlkLCBldmVudC0+Y29tbS5jb21tKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQKK3Byb2Nlc3NfZm9ya19ldmVudChldmVudF90ICpldmVudCkKK3sKKwlwaWRfZm9yayhldmVudC0+Zm9yay5waWQsIGV2ZW50LT5mb3JrLnBwaWQsIGV2ZW50LT5mb3JrLnRpbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJcGlkX2V4aXQoZXZlbnQtPmZvcmsucGlkLCBldmVudC0+Zm9yay50aW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRyYWNlX2VudHJ5IHsKKwl1MzIJCQlzaXplOworCXVuc2lnbmVkIHNob3J0CQl0eXBlOworCXVuc2lnbmVkIGNoYXIJCWZsYWdzOworCXVuc2lnbmVkIGNoYXIJCXByZWVtcHRfY291bnQ7CisJaW50CQkJcGlkOworCWludAkJCXRnaWQ7Cit9OworCitzdHJ1Y3QgcG93ZXJfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeSB0ZTsKKwlzNjQJdHlwZTsKKwlzNjQJdmFsdWU7Cit9OworCisjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTYKK3N0cnVjdCB3YWtldXBfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeSB0ZTsKKwljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07CisJaW50ICAgcGlkOworCWludCAgIHByaW87CisJaW50ICAgc3VjY2VzczsKK307CisKKy8qCisgKiB0cmFjZV9mbGFnX3R5cGUgaXMgYW4gZW51bWVyYXRpb24gdGhhdCBob2xkcyBkaWZmZXJlbnQKKyAqIHN0YXRlcyB3aGVuIGEgdHJhY2Ugb2NjdXJzLiBUaGVzZSBhcmU6CisgKiAgSVJRU19PRkYgICAgICAgICAgICAtIGludGVycnVwdHMgd2VyZSBkaXNhYmxlZAorICogIElSUVNfTk9TVVBQT1JUICAgICAgLSBhcmNoIGRvZXMgbm90IHN1cHBvcnQgaXJxc19kaXNhYmxlZF9mbGFncworICogIE5FRURfUkVTQ0VEICAgICAgICAgLSByZXNjaGVkdWxlIGlzIHJlcXVlc3RlZAorICogIEhBUkRJUlEgICAgICAgICAgICAgLSBpbnNpZGUgYW4gaW50ZXJydXB0IGhhbmRsZXIKKyAqICBTT0ZUSVJRICAgICAgICAgICAgIC0gaW5zaWRlIGEgc29mdGlycSBoYW5kbGVyCisgKi8KK2VudW0gdHJhY2VfZmxhZ190eXBlIHsKKwlUUkFDRV9GTEFHX0lSUVNfT0ZGCQk9IDB4MDEsCisJVFJBQ0VfRkxBR19JUlFTX05PU1VQUE9SVAk9IDB4MDIsCisJVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQJCT0gMHgwNCwKKwlUUkFDRV9GTEFHX0hBUkRJUlEJCT0gMHgwOCwKKwlUUkFDRV9GTEFHX1NPRlRJUlEJCT0gMHgxMCwKK307CisKKworCitzdHJ1Y3Qgc2NoZWRfc3dpdGNoIHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgdGU7CisJY2hhciBwcmV2X2NvbW1bVEFTS19DT01NX0xFTl07CisJaW50ICBwcmV2X3BpZDsKKwlpbnQgIHByZXZfcHJpbzsKKwlsb25nIHByZXZfc3RhdGU7IC8qIEFyamFuIHdlZXBzLiAqLworCWNoYXIgbmV4dF9jb21tW1RBU0tfQ09NTV9MRU5dOworCWludCAgbmV4dF9waWQ7CisJaW50ICBuZXh0X3ByaW87Cit9OworCitzdGF0aWMgdm9pZCBjX3N0YXRlX3N0YXJ0KGludCBjcHUsIHU2NCB0aW1lc3RhbXAsIGludCBzdGF0ZSkKK3sKKwljcHVzX2NzdGF0ZV9zdGFydF90aW1lc1tjcHVdID0gdGltZXN0YW1wOworCWNwdXNfY3N0YXRlX3N0YXRlW2NwdV0gPSBzdGF0ZTsKK30KKworc3RhdGljIHZvaWQgY19zdGF0ZV9lbmQoaW50IGNwdSwgdTY0IHRpbWVzdGFtcCkKK3sKKwlzdHJ1Y3QgcG93ZXJfZXZlbnQgKnB3cjsKKwlwd3IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwb3dlcl9ldmVudCkpOworCWlmICghcHdyKQorCQlyZXR1cm47CisJbWVtc2V0KHB3ciwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl9ldmVudCkpOworCisJcHdyLT5zdGF0ZSA9IGNwdXNfY3N0YXRlX3N0YXRlW2NwdV07CisJcHdyLT5zdGFydF90aW1lID0gY3B1c19jc3RhdGVfc3RhcnRfdGltZXNbY3B1XTsKKwlwd3ItPmVuZF90aW1lID0gdGltZXN0YW1wOworCXB3ci0+Y3B1ID0gY3B1OworCXB3ci0+dHlwZSA9IENTVEFURTsKKwlwd3ItPm5leHQgPSBwb3dlcl9ldmVudHM7CisKKwlwb3dlcl9ldmVudHMgPSBwd3I7Cit9CisKK3N0YXRpYyB2b2lkIHBfc3RhdGVfY2hhbmdlKGludCBjcHUsIHU2NCB0aW1lc3RhbXAsIHU2NCBuZXdfZnJlcSkKK3sKKwlzdHJ1Y3QgcG93ZXJfZXZlbnQgKnB3cjsKKwlwd3IgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwb3dlcl9ldmVudCkpOworCisJaWYgKG5ld19mcmVxID4gODAwMDAwMCkgLyogZGV0ZWN0IGludmFsaWQgZGF0YSAqLworCQlyZXR1cm47CisKKwlpZiAoIXB3cikKKwkJcmV0dXJuOworCW1lbXNldChwd3IsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfZXZlbnQpKTsKKworCXB3ci0+c3RhdGUgPSBjcHVzX3BzdGF0ZV9zdGF0ZVtjcHVdOworCXB3ci0+c3RhcnRfdGltZSA9IGNwdXNfcHN0YXRlX3N0YXJ0X3RpbWVzW2NwdV07CisJcHdyLT5lbmRfdGltZSA9IHRpbWVzdGFtcDsKKwlwd3ItPmNwdSA9IGNwdTsKKwlwd3ItPnR5cGUgPSBQU1RBVEU7CisJcHdyLT5uZXh0ID0gcG93ZXJfZXZlbnRzOworCisJaWYgKCFwd3ItPnN0YXJ0X3RpbWUpCisJCXB3ci0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CisKKwlwb3dlcl9ldmVudHMgPSBwd3I7CisKKwljcHVzX3BzdGF0ZV9zdGF0ZVtjcHVdID0gbmV3X2ZyZXE7CisJY3B1c19wc3RhdGVfc3RhcnRfdGltZXNbY3B1XSA9IHRpbWVzdGFtcDsKKworCWlmICgodTY0KW5ld19mcmVxID4gbWF4X2ZyZXEpCisJCW1heF9mcmVxID0gbmV3X2ZyZXE7CisKKwlpZiAobmV3X2ZyZXEgPCBtaW5fZnJlcSB8fCBtaW5fZnJlcSA9PSAwKQorCQltaW5fZnJlcSA9IG5ld19mcmVxOworCisJaWYgKG5ld19mcmVxID09IG1heF9mcmVxIC0gMTAwMCkKKwkJCXR1cmJvX2ZyZXF1ZW5jeSA9IG1heF9mcmVxOworfQorCitzdGF0aWMgdm9pZAorc2NoZWRfd2FrZXVwKGludCBjcHUsIHU2NCB0aW1lc3RhbXAsIGludCBwaWQsIHN0cnVjdCB0cmFjZV9lbnRyeSAqdGUpCit7CisJc3RydWN0IHdha2VfZXZlbnQgKndlOworCXN0cnVjdCBwZXJfcGlkICpwOworCXN0cnVjdCB3YWtldXBfZW50cnkgKndha2UgPSAodm9pZCAqKXRlOworCisJd2UgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWtlX2V2ZW50KSk7CisJaWYgKCF3ZSkKKwkJcmV0dXJuOworCisJbWVtc2V0KHdlLCAwLCBzaXplb2Yoc3RydWN0IHdha2VfZXZlbnQpKTsKKwl3ZS0+dGltZSA9IHRpbWVzdGFtcDsKKwl3ZS0+d2FrZXIgPSBwaWQ7CisKKwlpZiAoKHRlLT5mbGFncyAmIFRSQUNFX0ZMQUdfSEFSRElSUSkgfHwgKHRlLT5mbGFncyAmIFRSQUNFX0ZMQUdfU09GVElSUSkpCisJCXdlLT53YWtlciA9IC0xOworCisJd2UtPndha2VlID0gd2FrZS0+cGlkOworCXdlLT5uZXh0ID0gd2FrZV9ldmVudHM7CisJd2FrZV9ldmVudHMgPSB3ZTsKKwlwID0gZmluZF9jcmVhdGVfcGlkKHdlLT53YWtlZSk7CisKKwlpZiAocCAmJiBwLT5jdXJyZW50ICYmIHAtPmN1cnJlbnQtPnN0YXRlID09IFRZUEVfTk9ORSkgeworCQlwLT5jdXJyZW50LT5zdGF0ZV9zaW5jZSA9IHRpbWVzdGFtcDsKKwkJcC0+Y3VycmVudC0+c3RhdGUgPSBUWVBFX1dBSVRJTkc7CisJfQorCWlmIChwICYmIHAtPmN1cnJlbnQgJiYgcC0+Y3VycmVudC0+c3RhdGUgPT0gVFlQRV9CTE9DS0VEKSB7CisJCXBpZF9wdXRfc2FtcGxlKHAtPnBpZCwgcC0+Y3VycmVudC0+c3RhdGUsIGNwdSwgcC0+Y3VycmVudC0+c3RhdGVfc2luY2UsIHRpbWVzdGFtcCk7CisJCXAtPmN1cnJlbnQtPnN0YXRlX3NpbmNlID0gdGltZXN0YW1wOworCQlwLT5jdXJyZW50LT5zdGF0ZSA9IFRZUEVfV0FJVElORzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNjaGVkX3N3aXRjaChpbnQgY3B1LCB1NjQgdGltZXN0YW1wLCBzdHJ1Y3QgdHJhY2VfZW50cnkgKnRlKQoreworCXN0cnVjdCBwZXJfcGlkICpwID0gTlVMTCwgKnByZXZfcDsKKwlzdHJ1Y3Qgc2NoZWRfc3dpdGNoICpzdyA9ICh2b2lkICopdGU7CisKKworCXByZXZfcCA9IGZpbmRfY3JlYXRlX3BpZChzdy0+cHJldl9waWQpOworCisJcCA9IGZpbmRfY3JlYXRlX3BpZChzdy0+bmV4dF9waWQpOworCisJaWYgKHByZXZfcC0+Y3VycmVudCAmJiBwcmV2X3AtPmN1cnJlbnQtPnN0YXRlICE9IFRZUEVfTk9ORSkKKwkJcGlkX3B1dF9zYW1wbGUoc3ctPnByZXZfcGlkLCBUWVBFX1JVTk5JTkcsIGNwdSwgcHJldl9wLT5jdXJyZW50LT5zdGF0ZV9zaW5jZSwgdGltZXN0YW1wKTsKKwlpZiAocCAmJiBwLT5jdXJyZW50KSB7CisJCWlmIChwLT5jdXJyZW50LT5zdGF0ZSAhPSBUWVBFX05PTkUpCisJCQlwaWRfcHV0X3NhbXBsZShzdy0+bmV4dF9waWQsIHAtPmN1cnJlbnQtPnN0YXRlLCBjcHUsIHAtPmN1cnJlbnQtPnN0YXRlX3NpbmNlLCB0aW1lc3RhbXApOworCisJCQlwLT5jdXJyZW50LT5zdGF0ZV9zaW5jZSA9IHRpbWVzdGFtcDsKKwkJCXAtPmN1cnJlbnQtPnN0YXRlID0gVFlQRV9SVU5OSU5HOworCX0KKworCWlmIChwcmV2X3AtPmN1cnJlbnQpIHsKKwkJcHJldl9wLT5jdXJyZW50LT5zdGF0ZSA9IFRZUEVfTk9ORTsKKwkJcHJldl9wLT5jdXJyZW50LT5zdGF0ZV9zaW5jZSA9IHRpbWVzdGFtcDsKKwkJaWYgKHN3LT5wcmV2X3N0YXRlICYgMikKKwkJCXByZXZfcC0+Y3VycmVudC0+c3RhdGUgPSBUWVBFX0JMT0NLRUQ7CisJCWlmIChzdy0+cHJldl9zdGF0ZSA9PSAwKQorCQkJcHJldl9wLT5jdXJyZW50LT5zdGF0ZSA9IFRZUEVfV0FJVElORzsKKwl9Cit9CisKKworc3RhdGljIGludAorcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJaW50IGN1cnNvciA9IDA7CisJdTY0IGFkZHIgPSAwOworCXU2NCBzdGFtcCA9IDA7CisJdTMyIGNwdSA9IDA7CisJdTMyIHBpZCA9IDA7CisJc3RydWN0IHRyYWNlX2VudHJ5ICp0ZTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKQorCQljdXJzb3IrKzsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkgeworCQlwaWQgPSBldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcl0+PjMyOworCQljdXJzb3IrKzsKKwl9CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgeworCQlzdGFtcCA9IGV2ZW50LT5zYW1wbGUuYXJyYXlbY3Vyc29yKytdOworCisJCWlmICghZmlyc3RfdGltZSB8fCBmaXJzdF90aW1lID4gc3RhbXApCisJCQlmaXJzdF90aW1lID0gc3RhbXA7CisJCWlmIChsYXN0X3RpbWUgPCBzdGFtcCkKKwkJCWxhc3RfdGltZSA9IHN0YW1wOworCisJfQorCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCisJCWFkZHIgPSBldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcisrXTsKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkKKwkJY3Vyc29yKys7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfU1RSRUFNX0lEKQorCQljdXJzb3IrKzsKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpCisJCWNwdSA9IGV2ZW50LT5zYW1wbGUuYXJyYXlbY3Vyc29yKytdICYgMHhGRkZGRkZGRjsKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpCisJCWN1cnNvcisrOworCisJdGUgPSAodm9pZCAqKSZldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcl07CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcgJiYgdGUtPnNpemUgPiAwKSB7CisJCWNoYXIgKmV2ZW50X3N0cjsKKwkJc3RydWN0IHBvd2VyX2VudHJ5ICpwZTsKKworCQlwZSA9ICh2b2lkICopdGU7CisKKwkJZXZlbnRfc3RyID0gcGVyZl9oZWFkZXJfX2ZpbmRfZXZlbnQodGUtPnR5cGUpOworCisJCWlmICghZXZlbnRfc3RyKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpwb3dlcl9zdGFydCIpID09IDApCisJCQljX3N0YXRlX3N0YXJ0KGNwdSwgc3RhbXAsIHBlLT52YWx1ZSk7CisKKwkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpwb3dlcl9lbmQiKSA9PSAwKQorCQkJY19zdGF0ZV9lbmQoY3B1LCBzdGFtcCk7CisKKwkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpwb3dlcl9mcmVxdWVuY3kiKSA9PSAwKQorCQkJcF9zdGF0ZV9jaGFuZ2UoY3B1LCBzdGFtcCwgcGUtPnZhbHVlKTsKKworCQlpZiAoc3RyY21wKGV2ZW50X3N0ciwgInNjaGVkOnNjaGVkX3dha2V1cCIpID09IDApCisJCQlzY2hlZF93YWtldXAoY3B1LCBzdGFtcCwgcGlkLCB0ZSk7CisKKwkJaWYgKHN0cmNtcChldmVudF9zdHIsICJzY2hlZDpzY2hlZF9zd2l0Y2giKSA9PSAwKQorCQkJc2NoZWRfc3dpdGNoKGNwdSwgc3RhbXAsIHRlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZnRlciB0aGUgbGFzdCBzYW1wbGUgd2UgbmVlZCB0byB3cmFwIHVwIHRoZSBjdXJyZW50IEMvUCBzdGF0ZQorICogYW5kIGNsb3NlIG91dCBlYWNoIENQVSBmb3IgdGhlc2UuCisgKi8KK3N0YXRpYyB2b2lkIGVuZF9zYW1wbGVfcHJvY2Vzc2luZyh2b2lkKQoreworCXU2NCBjcHU7CisJc3RydWN0IHBvd2VyX2V2ZW50ICpwd3I7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IG51bWNwdXM7IGNwdSsrKSB7CisJCXB3ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CisJCWlmICghcHdyKQorCQkJcmV0dXJuOworCQltZW1zZXQocHdyLCAwLCBzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CisKKwkJLyogQyBzdGF0ZSAqLworI2lmIDAKKwkJcHdyLT5zdGF0ZSA9IGNwdXNfY3N0YXRlX3N0YXRlW2NwdV07CisJCXB3ci0+c3RhcnRfdGltZSA9IGNwdXNfY3N0YXRlX3N0YXJ0X3RpbWVzW2NwdV07CisJCXB3ci0+ZW5kX3RpbWUgPSBsYXN0X3RpbWU7CisJCXB3ci0+Y3B1ID0gY3B1OworCQlwd3ItPnR5cGUgPSBDU1RBVEU7CisJCXB3ci0+bmV4dCA9IHBvd2VyX2V2ZW50czsKKworCQlwb3dlcl9ldmVudHMgPSBwd3I7CisjZW5kaWYKKwkJLyogUCBzdGF0ZSAqLworCisJCXB3ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CisJCWlmICghcHdyKQorCQkJcmV0dXJuOworCQltZW1zZXQocHdyLCAwLCBzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CisKKwkJcHdyLT5zdGF0ZSA9IGNwdXNfcHN0YXRlX3N0YXRlW2NwdV07CisJCXB3ci0+c3RhcnRfdGltZSA9IGNwdXNfcHN0YXRlX3N0YXJ0X3RpbWVzW2NwdV07CisJCXB3ci0+ZW5kX3RpbWUgPSBsYXN0X3RpbWU7CisJCXB3ci0+Y3B1ID0gY3B1OworCQlwd3ItPnR5cGUgPSBQU1RBVEU7CisJCXB3ci0+bmV4dCA9IHBvd2VyX2V2ZW50czsKKworCQlpZiAoIXB3ci0+c3RhcnRfdGltZSkKKwkJCXB3ci0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CisJCWlmICghcHdyLT5zdGF0ZSkKKwkJCXB3ci0+c3RhdGUgPSBtaW5fZnJlcTsKKwkJcG93ZXJfZXZlbnRzID0gcHdyOworCX0KK30KKworc3RhdGljIHU2NCBzYW1wbGVfdGltZShldmVudF90ICpldmVudCkKK3sKKwlpbnQgY3Vyc29yOworCisJY3Vyc29yID0gMDsKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JUCkKKwkJY3Vyc29yKys7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElEKQorCQljdXJzb3IrKzsKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQorCQlyZXR1cm4gZXZlbnQtPnNhbXBsZS5hcnJheVtjdXJzb3JdOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBXZSBmaXJzdCBxdWV1ZSBhbGwgZXZlbnRzLCBzb3J0ZWQgYmFja3dhcmRzIGJ5IGluc2VydGlvbi4KKyAqIFRoZSBvcmRlciB3aWxsIGdldCBmbGlwcGVkIGxhdGVyLgorICovCitzdGF0aWMgaW50CitxdWV1ZV9zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJc3RydWN0IHNhbXBsZV93cmFwcGVyICpjb3B5LCAqcHJldjsKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBldmVudC0+c2FtcGxlLmhlYWRlci5zaXplICsgc2l6ZW9mKHN0cnVjdCBzYW1wbGVfd3JhcHBlcikgKyA4OworCisJY29weSA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIWNvcHkpCisJCXJldHVybiAxOworCisJbWVtc2V0KGNvcHksIDAsIHNpemUpOworCisJY29weS0+bmV4dCA9IE5VTEw7CisJY29weS0+dGltZXN0YW1wID0gc2FtcGxlX3RpbWUoZXZlbnQpOworCisJbWVtY3B5KCZjb3B5LT5kYXRhLCBldmVudCwgZXZlbnQtPnNhbXBsZS5oZWFkZXIuc2l6ZSk7CisKKwkvKiBpbnNlcnQgaW4gdGhlIHJpZ2h0IHBsYWNlIGluIHRoZSBsaXN0ICovCisKKwlpZiAoIWFsbF9zYW1wbGVzKSB7CisJCS8qIGZpcnN0IHNhbXBsZSBldmVyICovCisJCWFsbF9zYW1wbGVzID0gY29weTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFsbF9zYW1wbGVzLT50aW1lc3RhbXAgPCBjb3B5LT50aW1lc3RhbXApIHsKKwkJLyogaW5zZXJ0IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0ICovCisJCWNvcHktPm5leHQgPSBhbGxfc2FtcGxlczsKKwkJYWxsX3NhbXBsZXMgPSBjb3B5OworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmV2ID0gYWxsX3NhbXBsZXM7CisJd2hpbGUgKHByZXYtPm5leHQpIHsKKwkJaWYgKHByZXYtPm5leHQtPnRpbWVzdGFtcCA8IGNvcHktPnRpbWVzdGFtcCkgeworCQkJY29weS0+bmV4dCA9IHByZXYtPm5leHQ7CisJCQlwcmV2LT5uZXh0ID0gY29weTsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXYgPSBwcmV2LT5uZXh0OworCX0KKwkvKiBpbnNlcnQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAqLworCXByZXYtPm5leHQgPSBjb3B5OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRfcXVldWVkX3NhbXBsZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc2FtcGxlX3dyYXBwZXIgKmN1cnNvciwgKm5leHQ7CisKKwljdXJzb3IgPSBhbGxfc2FtcGxlczsKKwlhbGxfc2FtcGxlcyA9IE5VTEw7CisKKwl3aGlsZSAoY3Vyc29yKSB7CisJCW5leHQgPSBjdXJzb3ItPm5leHQ7CisJCWN1cnNvci0+bmV4dCA9IGFsbF9zYW1wbGVzOworCQlhbGxfc2FtcGxlcyA9IGN1cnNvcjsKKwkJY3Vyc29yID0gbmV4dDsKKwl9Cit9CisKKy8qCisgKiBTb3J0IHRoZSBwaWQgZGF0YXN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBzb3J0X3BpZHModm9pZCkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqbmV3X2xpc3QsICpwLCAqY3Vyc29yLCAqcHJldjsKKwkvKiBzb3J0IGJ5IHBwaWQgZmlyc3QsIHRoZW4gYnkgcGlkLCBsb3dlc3QgdG8gaGlnaGVzdCAqLworCisJbmV3X2xpc3QgPSBOVUxMOworCisJd2hpbGUgKGFsbF9kYXRhKSB7CisJCXAgPSBhbGxfZGF0YTsKKwkJYWxsX2RhdGEgPSBwLT5uZXh0OworCQlwLT5uZXh0ID0gTlVMTDsKKworCQlpZiAobmV3X2xpc3QgPT0gTlVMTCkgeworCQkJbmV3X2xpc3QgPSBwOworCQkJcC0+bmV4dCA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmV2ID0gTlVMTDsKKwkJY3Vyc29yID0gbmV3X2xpc3Q7CisJCXdoaWxlIChjdXJzb3IpIHsKKwkJCWlmIChjdXJzb3ItPnBwaWQgPiBwLT5wcGlkIHx8CisJCQkJKGN1cnNvci0+cHBpZCA9PSBwLT5wcGlkICYmIGN1cnNvci0+cGlkID4gcC0+cGlkKSkgeworCQkJCS8qIG11c3QgaW5zZXJ0IGJlZm9yZSAqLworCQkJCWlmIChwcmV2KSB7CisJCQkJCXAtPm5leHQgPSBwcmV2LT5uZXh0OworCQkJCQlwcmV2LT5uZXh0ID0gcDsKKwkJCQkJY3Vyc29yID0gTlVMTDsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcC0+bmV4dCA9IG5ld19saXN0OworCQkJCQluZXdfbGlzdCA9IHA7CisJCQkJCWN1cnNvciA9IE5VTEw7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKworCQkJcHJldiA9IGN1cnNvcjsKKwkJCWN1cnNvciA9IGN1cnNvci0+bmV4dDsKKwkJCWlmICghY3Vyc29yKQorCQkJCXByZXYtPm5leHQgPSBwOworCQl9CisJfQorCWFsbF9kYXRhID0gbmV3X2xpc3Q7Cit9CisKKworc3RhdGljIHZvaWQgZHJhd19jX3Bfc3RhdGVzKHZvaWQpCit7CisJc3RydWN0IHBvd2VyX2V2ZW50ICpwd3I7CisJcHdyID0gcG93ZXJfZXZlbnRzOworCisJLyoKKwkgKiB0d28gcGFzcyBkcmF3aW5nIHNvIHRoYXQgdGhlIFAgc3RhdGUgYmFycyBhcmUgb24gdG9wIG9mIHRoZSBDIHN0YXRlIGJsb2NrcworCSAqLworCXdoaWxlIChwd3IpIHsKKwkJaWYgKHB3ci0+dHlwZSA9PSBDU1RBVEUpCisJCQlzdmdfY3N0YXRlKHB3ci0+Y3B1LCBwd3ItPnN0YXJ0X3RpbWUsIHB3ci0+ZW5kX3RpbWUsIHB3ci0+c3RhdGUpOworCQlwd3IgPSBwd3ItPm5leHQ7CisJfQorCisJcHdyID0gcG93ZXJfZXZlbnRzOworCXdoaWxlIChwd3IpIHsKKwkJaWYgKHB3ci0+dHlwZSA9PSBQU1RBVEUpIHsKKwkJCWlmICghcHdyLT5zdGF0ZSkKKwkJCQlwd3ItPnN0YXRlID0gbWluX2ZyZXE7CisJCQlzdmdfcHN0YXRlKHB3ci0+Y3B1LCBwd3ItPnN0YXJ0X3RpbWUsIHB3ci0+ZW5kX3RpbWUsIHB3ci0+c3RhdGUpOworCQl9CisJCXB3ciA9IHB3ci0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdfd2FrZXVwcyh2b2lkKQoreworCXN0cnVjdCB3YWtlX2V2ZW50ICp3ZTsKKwlzdHJ1Y3QgcGVyX3BpZCAqcDsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmM7CisKKwl3ZSA9IHdha2VfZXZlbnRzOworCXdoaWxlICh3ZSkgeworCQlpbnQgZnJvbSA9IDAsIHRvID0gMDsKKwkJY2hhciAqdGFza19mcm9tID0gTlVMTCwgKnRhc2tfdG8gPSBOVUxMOworCisJCS8qIGxvY2F0ZSB0aGUgY29sdW1uIG9mIHRoZSB3YWtlciBhbmQgd2FrZWUgKi8KKwkJcCA9IGFsbF9kYXRhOworCQl3aGlsZSAocCkgeworCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIgfHwgcC0+cGlkID09IHdlLT53YWtlZSkgeworCQkJCWMgPSBwLT5hbGw7CisJCQkJd2hpbGUgKGMpIHsKKwkJCQkJaWYgKGMtPlkgJiYgYy0+c3RhcnRfdGltZSA8PSB3ZS0+dGltZSAmJiBjLT5lbmRfdGltZSA+PSB3ZS0+dGltZSkgeworCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIpIHsKKwkJCQkJCQlmcm9tID0gYy0+WTsKKwkJCQkJCQl0YXNrX2Zyb20gPSBjLT5jb21tOworCQkJCQkJfQorCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZWUpIHsKKwkJCQkJCQl0byA9IGMtPlk7CisJCQkJCQkJdGFza190byA9IGMtPmNvbW07CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYyA9IGMtPm5leHQ7CisJCQkJfQorCQkJfQorCQkJcCA9IHAtPm5leHQ7CisJCX0KKworCQlpZiAod2UtPndha2VyID09IC0xKQorCQkJc3ZnX2ludGVycnVwdCh3ZS0+dGltZSwgdG8pOworCQllbHNlIGlmIChmcm9tICYmIHRvICYmIGFicyhmcm9tIC0gdG8pID09IDEpCisJCQlzdmdfd2FrZWxpbmUod2UtPnRpbWUsIGZyb20sIHRvKTsKKwkJZWxzZQorCQkJc3ZnX3BhcnRpYWxfd2FrZWxpbmUod2UtPnRpbWUsIGZyb20sIHRhc2tfZnJvbSwgdG8sIHRhc2tfdG8pOworCQl3ZSA9IHdlLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgZHJhd19jcHVfdXNhZ2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqcDsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmM7CisJc3RydWN0IGNwdV9zYW1wbGUgKnNhbXBsZTsKKwlwID0gYWxsX2RhdGE7CisJd2hpbGUgKHApIHsKKwkJYyA9IHAtPmFsbDsKKwkJd2hpbGUgKGMpIHsKKwkJCXNhbXBsZSA9IGMtPnNhbXBsZXM7CisJCQl3aGlsZSAoc2FtcGxlKSB7CisJCQkJaWYgKHNhbXBsZS0+dHlwZSA9PSBUWVBFX1JVTk5JTkcpCisJCQkJCXN2Z19wcm9jZXNzKHNhbXBsZS0+Y3B1LCBzYW1wbGUtPnN0YXJ0X3RpbWUsIHNhbXBsZS0+ZW5kX3RpbWUsICJzYW1wbGUiLCBjLT5jb21tKTsKKworCQkJCXNhbXBsZSA9IHNhbXBsZS0+bmV4dDsKKwkJCX0KKwkJCWMgPSBjLT5uZXh0OworCQl9CisJCXAgPSBwLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgZHJhd19wcm9jZXNzX2JhcnModm9pZCkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqcDsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmM7CisJc3RydWN0IGNwdV9zYW1wbGUgKnNhbXBsZTsKKwlpbnQgWSA9IDA7CisKKwlZID0gMiAqIG51bWNwdXMgKyAyOworCisJcCA9IGFsbF9kYXRhOworCXdoaWxlIChwKSB7CisJCWMgPSBwLT5hbGw7CisJCXdoaWxlIChjKSB7CisJCQlpZiAoIWMtPmRpc3BsYXkpIHsKKwkJCQljLT5ZID0gMDsKKwkJCQljID0gYy0+bmV4dDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3ZnX2JveChZLCBjLT5zdGFydF90aW1lLCBjLT5lbmRfdGltZSwgInByb2Nlc3MiKTsKKwkJCXNhbXBsZSA9IGMtPnNhbXBsZXM7CisJCQl3aGlsZSAoc2FtcGxlKSB7CisJCQkJaWYgKHNhbXBsZS0+dHlwZSA9PSBUWVBFX1JVTk5JTkcpCisJCQkJCXN2Z19zYW1wbGUoWSwgc2FtcGxlLT5jcHUsIHNhbXBsZS0+c3RhcnRfdGltZSwgc2FtcGxlLT5lbmRfdGltZSk7CisJCQkJaWYgKHNhbXBsZS0+dHlwZSA9PSBUWVBFX0JMT0NLRUQpCisJCQkJCXN2Z19ib3goWSwgc2FtcGxlLT5zdGFydF90aW1lLCBzYW1wbGUtPmVuZF90aW1lLCAiYmxvY2tlZCIpOworCQkJCWlmIChzYW1wbGUtPnR5cGUgPT0gVFlQRV9XQUlUSU5HKQorCQkJCQlzdmdfd2FpdGluZyhZLCBzYW1wbGUtPnN0YXJ0X3RpbWUsIHNhbXBsZS0+ZW5kX3RpbWUpOworCQkJCXNhbXBsZSA9IHNhbXBsZS0+bmV4dDsKKwkJCX0KKworCQkJaWYgKGMtPmNvbW0pIHsKKwkJCQljaGFyIGNvbW1bMjU2XTsKKwkJCQlpZiAoYy0+dG90YWxfdGltZSA+IDUwMDAwMDAwMDApIC8qIDUgc2Vjb25kcyAqLworCQkJCQlzcHJpbnRmKGNvbW0sICIlczolaSAoJTIuMmZzKSIsIGMtPmNvbW0sIHAtPnBpZCwgYy0+dG90YWxfdGltZSAvIDEwMDAwMDAwMDAuMCk7CisJCQkJZWxzZQorCQkJCQlzcHJpbnRmKGNvbW0sICIlczolaSAoJTMuMWZtcykiLCBjLT5jb21tLCBwLT5waWQsIGMtPnRvdGFsX3RpbWUgLyAxMDAwMDAwLjApOworCisJCQkJc3ZnX3RleHQoWSwgYy0+c3RhcnRfdGltZSwgY29tbSk7CisJCQl9CisJCQljLT5ZID0gWTsKKwkJCVkrKzsKKwkJCWMgPSBjLT5uZXh0OworCQl9CisJCXAgPSBwLT5uZXh0OworCX0KK30KKworc3RhdGljIGludCBkZXRlcm1pbmVfZGlzcGxheV90YXNrcyh1NjQgdGhyZXNob2xkKQoreworCXN0cnVjdCBwZXJfcGlkICpwOworCXN0cnVjdCBwZXJfcGlkY29tbSAqYzsKKwlpbnQgY291bnQgPSAwOworCisJcCA9IGFsbF9kYXRhOworCXdoaWxlIChwKSB7CisJCXAtPmRpc3BsYXkgPSAwOworCQlpZiAocC0+c3RhcnRfdGltZSA9PSAxKQorCQkJcC0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CisKKwkJLyogbm8gZXhpdCBtYXJrZXIsIHRhc2sga2VwdCBydW5uaW5nIHRvIHRoZSBlbmQgKi8KKwkJaWYgKHAtPmVuZF90aW1lID09IDApCisJCQlwLT5lbmRfdGltZSA9IGxhc3RfdGltZTsKKwkJaWYgKHAtPnRvdGFsX3RpbWUgPj0gdGhyZXNob2xkKQorCQkJcC0+ZGlzcGxheSA9IDE7CisKKwkJYyA9IHAtPmFsbDsKKworCQl3aGlsZSAoYykgeworCQkJYy0+ZGlzcGxheSA9IDA7CisKKwkJCWlmIChjLT5zdGFydF90aW1lID09IDEpCisJCQkJYy0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CisKKwkJCWlmIChjLT50b3RhbF90aW1lID49IHRocmVzaG9sZCkgeworCQkJCWMtPmRpc3BsYXkgPSAxOworCQkJCWNvdW50Kys7CisJCQl9CisKKwkJCWlmIChjLT5lbmRfdGltZSA9PSAwKQorCQkJCWMtPmVuZF90aW1lID0gbGFzdF90aW1lOworCisJCQljID0gYy0+bmV4dDsKKwkJfQorCQlwID0gcC0+bmV4dDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCisKKworI2RlZmluZSBUSU1FX1RIUkVTSCAxMDAwMDAwMAorCitzdGF0aWMgdm9pZCB3cml0ZV9zdmdfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwl1NjQgaTsKKwlpbnQgY291bnQ7CisKKwludW1jcHVzKys7CisKKworCWNvdW50ID0gZGV0ZXJtaW5lX2Rpc3BsYXlfdGFza3MoVElNRV9USFJFU0gpOworCisJLyogV2UnZCBsaWtlIHRvIHNob3cgYXQgbGVhc3QgMTUgdGFza3M7IGJlIGxlc3MgcGlja3kgaWYgd2UgaGF2ZSBmZXdlciAqLworCWlmIChjb3VudCA8IDE1KQorCQljb3VudCA9IGRldGVybWluZV9kaXNwbGF5X3Rhc2tzKFRJTUVfVEhSRVNIIC8gMTApOworCisJb3Blbl9zdmcoZmlsZW5hbWUsIG51bWNwdXMsIGNvdW50LCBmaXJzdF90aW1lLCBsYXN0X3RpbWUpOworCisJc3ZnX3RpbWVfZ3JpZCgpOworCXN2Z19sZWdlbmRhKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtY3B1czsgaSsrKQorCQlzdmdfY3B1X2JveChpLCBtYXhfZnJlcSwgdHVyYm9fZnJlcXVlbmN5KTsKKworCWRyYXdfY3B1X3VzYWdlKCk7CisJZHJhd19wcm9jZXNzX2JhcnMoKTsKKwlkcmF3X2NfcF9zdGF0ZXMoKTsKKwlkcmF3X3dha2V1cHMoKTsKKworCXN2Z19jbG9zZSgpOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQoreworCisJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKKworCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKKwkJcmV0dXJuIHByb2Nlc3NfY29tbV9ldmVudChldmVudCk7CisJY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgorCQlyZXR1cm4gcHJvY2Vzc19mb3JrX2V2ZW50KGV2ZW50KTsKKwljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6CisJCXJldHVybiBwcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnQpOworCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgorCQlyZXR1cm4gcXVldWVfc2FtcGxlX2V2ZW50KGV2ZW50KTsKKworCS8qCisJICogV2UgZG9udCBwcm9jZXNzIHRoZW0gcmlnaHQgbm93IGJ1dCB0aGV5IGFyZSBmaW5lOgorCSAqLworCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKKwljYXNlIFBFUkZfUkVDT1JEX1RIUk9UVExFOgorCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc2FtcGxlcyh2b2lkKQoreworCXN0cnVjdCBzYW1wbGVfd3JhcHBlciAqY3Vyc29yOworCWV2ZW50X3QgKmV2ZW50OworCisJc29ydF9xdWV1ZWRfc2FtcGxlcygpOworCisJY3Vyc29yID0gYWxsX3NhbXBsZXM7CisJd2hpbGUgKGN1cnNvcikgeworCQlldmVudCA9ICh2b2lkICopJmN1cnNvci0+ZGF0YTsKKwkJY3Vyc29yID0gY3Vyc29yLT5uZXh0OworCQlwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgX19jbWRfdGltZWNoYXJ0KHZvaWQpCit7CisJaW50IHJldCwgcmMgPSBFWElUX0ZBSUxVUkU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgaGVhZCwgc2hpZnQ7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwlldmVudF90ICpldmVudDsKKwl1aW50MzJfdCBzaXplOworCWNoYXIgKmJ1ZjsKKwlpbnQgaW5wdXQ7CisKKwlpbnB1dCA9IG9wZW4oaW5wdXRfbmFtZSwgT19SRE9OTFkpOworCWlmIChpbnB1dCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIgZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMiLCBpbnB1dF9uYW1lKTsKKwkJaWYgKCFzdHJjbXAoaW5wdXRfbmFtZSwgInBlcmYuZGF0YSIpKQorCQkJZnByaW50ZihzdGRlcnIsICIgICh0cnkgJ3BlcmYgcmVjb3JkJyBmaXJzdCkiKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQlleGl0KC0xKTsKKwl9CisKKwlyZXQgPSBmc3RhdChpbnB1dCwgJnN0YXRidWYpOworCWlmIChyZXQgPCAwKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIHN0YXQgZmlsZSIpOworCQlleGl0KC0xKTsKKwl9CisKKwlpZiAoIXN0YXRidWYuc3Rfc2l6ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgInplcm8tc2l6ZWQgZmlsZSwgbm90aGluZyB0byBkbyFcbiIpOworCQlleGl0KDApOworCX0KKworCWhlYWRlciA9IHBlcmZfaGVhZGVyX19yZWFkKGlucHV0KTsKKwloZWFkID0gaGVhZGVyLT5kYXRhX29mZnNldDsKKworCXNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKGhlYWRlcik7CisKKwlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKwlvZmZzZXQgKz0gc2hpZnQ7CisJaGVhZCAtPSBzaGlmdDsKKworcmVtYXA6CisJYnVmID0gKGNoYXIgKiltbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93LCBQUk9UX1JFQUQsCisJCQkgICBNQVBfU0hBUkVELCBpbnB1dCwgb2Zmc2V0KTsKKwlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gbW1hcCBmaWxlIik7CisJCWV4aXQoLTEpOworCX0KKworbW9yZToKKwlldmVudCA9IChldmVudF90ICopKGJ1ZiArIGhlYWQpOworCisJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKKwlpZiAoIXNpemUpCisJCXNpemUgPSA4OworCisJaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogbW1hcF93aW5kb3cpIHsKKwkJaW50IHJldDI7CisKKwkJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CisKKwkJcmV0MiA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KTsKKwkJYXNzZXJ0KHJldDIgPT0gMCk7CisKKwkJb2Zmc2V0ICs9IHNoaWZ0OworCQloZWFkIC09IHNoaWZ0OworCQlnb3RvIHJlbWFwOworCX0KKworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisKKwlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCkgPCAwKSB7CisKKwkJcHJpbnRmKCIlcCBbJXBdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKKwkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAorCQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKKwkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CisKKwkJLyoKKwkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKKwkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCisJCSAqLworCisJCWlmICh1bmxpa2VseShoZWFkICYgNykpCisJCQloZWFkICY9IH43VUxMOworCisJCXNpemUgPSA4OworCX0KKworCWhlYWQgKz0gc2l6ZTsKKworCWlmIChvZmZzZXQgKyBoZWFkID49IGhlYWRlci0+ZGF0YV9vZmZzZXQgKyBoZWFkZXItPmRhdGFfc2l6ZSkKKwkJZ290byBkb25lOworCisJaWYgKG9mZnNldCArIGhlYWQgPCAodW5zaWduZWQgbG9uZylzdGF0YnVmLnN0X3NpemUpCisJCWdvdG8gbW9yZTsKKworZG9uZToKKwlyYyA9IEVYSVRfU1VDQ0VTUzsKKwljbG9zZShpbnB1dCk7CisKKworCXByb2Nlc3Nfc2FtcGxlcygpOworCisJZW5kX3NhbXBsZV9wcm9jZXNzaW5nKCk7CisKKwlzb3J0X3BpZHMoKTsKKworCXdyaXRlX3N2Z19maWxlKG91dHB1dF9uYW1lKTsKKworCXByaW50ZigiV3JpdHRlbiAlMi4xZiBzZWNvbmRzIG9mIHRyYWNlIHRvICVzLlxuIiwgKGxhc3RfdGltZSAtIGZpcnN0X3RpbWUpIC8gMTAwMDAwMDAwMC4wLCBvdXRwdXRfbmFtZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGltZWNoYXJ0X3VzYWdlW10gPSB7CisJInBlcmYgdGltZWNoYXJ0IFs8b3B0aW9ucz5dIHtyZWNvcmR9IiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKKwkicmVjb3JkIiwKKwkiLWEiLAorCSItUiIsCisJIi1NIiwKKwkiLWYiLAorCSItYyIsICIxIiwKKwkiLWUiLCAicG93ZXI6cG93ZXJfc3RhcnQiLAorCSItZSIsICJwb3dlcjpwb3dlcl9lbmQiLAorCSItZSIsICJwb3dlcjpwb3dlcl9mcmVxdWVuY3kiLAorCSItZSIsICJzY2hlZDpzY2hlZF93YWtldXAiLAorCSItZSIsICJzY2hlZDpzY2hlZF9zd2l0Y2giLAorfTsKKworc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCByZWNfYXJnYywgaSwgajsKKwljb25zdCBjaGFyICoqcmVjX2FyZ3Y7CisKKwlyZWNfYXJnYyA9IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpICsgYXJnYyAtIDE7CisJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBzdHJkdXAocmVjb3JkX2FyZ3NbaV0pOworCisJZm9yIChqID0gMTsgaiA8ICh1bnNpZ25lZCBpbnQpYXJnYzsgaisrLCBpKyspCisJCXJlY19hcmd2W2ldID0gYXJndltqXTsKKworCXJldHVybiBjbWRfcmVjb3JkKGksIHJlY19hcmd2LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAorCQkgICAgImlucHV0IGZpbGUgbmFtZSIpLAorCU9QVF9TVFJJTkcoJ28nLCAib3V0cHV0IiwgJm91dHB1dF9uYW1lLCAiZmlsZSIsCisJCSAgICAib3V0cHV0IGZpbGUgbmFtZSIpLAorCU9QVF9JTlRFR0VSKCd3JywgIndpZHRoIiwgJnN2Z19wYWdlX3dpZHRoLAorCQkgICAgInBhZ2Ugd2lkdGgiKSwKKwlPUFRfRU5EKCkKK307CisKKworaW50IGNtZF90aW1lY2hhcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCXN5bWJvbF9faW5pdCgpOworCisJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHRpbWVjaGFydF91c2FnZSwKKwkJCVBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCisJaWYgKGFyZ2MgJiYgIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKQorCQlyZXR1cm4gX19jbWRfcmVjb3JkKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh0aW1lY2hhcnRfdXNhZ2UsIG9wdGlvbnMpOworCisJc2V0dXBfcGFnZXIoKTsKKworCXJldHVybiBfX2NtZF90aW1lY2hhcnQoKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCA0MDAyY2NiLi4xY2E4ODg5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC05MDEsNyArOTAxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBtbWFwX3JlYWRfaGVhZChzdHJ1Y3QgbW1hcF9kYXRhICptZCkKIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSAqcGMgPSBtZC0+YmFzZTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjID0gbWQtPmJhc2U7CiAJaW50IGhlYWQ7CiAKIAloZWFkID0gcGMtPmRhdGFfaGVhZDsKQEAgLTk3Nyw5ICs5NzcsOSBAQAogCiAJCW9sZCArPSBzaXplOwogCi0JCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9FVkVOVF9TQU1QTEUpIHsKKwkJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9TQU1QTEUpIHsKIAkJCWludCB1c2VyID0KLQkoZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9FVkVOVF9NSVNDX0NQVU1PREVfTUFTSykgPT0gUEVSRl9FVkVOVF9NSVNDX1VTRVI7CisJKGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLKSA9PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVI7CiAJCQlwcm9jZXNzX2V2ZW50KGV2ZW50LT5pcC5pcCwgbWQtPmNvdW50ZXIsIHVzZXIpOwogCQl9CiAJfQpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAogc3RhdGljIHZvaWQgc3RhcnRfY291bnRlcihpbnQgaSwgaW50IGNvdW50ZXIpCiB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7CiAJaW50IGNwdTsKIAogCWNwdSA9IHByb2ZpbGVfY3B1OwpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIAlhdHRyLT5pbmhlcml0CQk9IChjcHUgPCAwKSAmJiBpbmhlcml0OwogCiB0cnlfYWdhaW46Ci0JZmRbaV1bY291bnRlcl0gPSBzeXNfcGVyZl9jb3VudGVyX29wZW4oYXR0ciwgdGFyZ2V0X3BpZCwgY3B1LCBncm91cF9mZCwgMCk7CisJZmRbaV1bY291bnRlcl0gPSBzeXNfcGVyZl9ldmVudF9vcGVuKGF0dHIsIHRhcmdldF9waWQsIGNwdSwgZ3JvdXBfZmQsIDApOwogCiAJaWYgKGZkW2ldW2NvdW50ZXJdIDwgMCkgewogCQlpbnQgZXJyID0gZXJybm87CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogCQlwcmludGYoIlxuIik7CiAJCWVycm9yKCJwZXJmY291bnRlciBzeXNjYWxsIHJldHVybmVkIHdpdGggJWQgKCVzKVxuIiwKIAkJCWZkW2ldW2NvdW50ZXJdLCBzdHJlcnJvcihlcnIpKTsKLQkJZGllKCJObyBDT05GSUdfUEVSRl9DT1VOVEVSUz15IGtlcm5lbCBzdXBwb3J0IGNvbmZpZ3VyZWQ/XG4iKTsKKwkJZGllKCJObyBDT05GSUdfUEVSRl9FVkVOVFM9eSBrZXJuZWwgc3VwcG9ydCBjb25maWd1cmVkP1xuIik7CiAJCWV4aXQoLTEpOwogCX0KIAlhc3NlcnQoZmRbaV1bY291bnRlcl0gPj0gMCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCmluZGV4IDkxNGFiMzYuLmU5ZDI1NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCkBAIC0zNSwxNCArMzUsMTQgQEAKIAogCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmNvbW0ucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfQ09NTTogJXM6JWRcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX0NPTU06ICVzOiVkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmNvbW0uY29tbSwgZXZlbnQtPmNvbW0ucGlkKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fAogCSAgICB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgZXZlbnQtPmNvbW0uY29tbSkpIHsKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfQ09NTSwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAl0b3RhbF9jb21tKys7CkBAIC04Miw3ICs4Miw3IEBACiAJCW1vcmVfZGF0YSArPSBzaXplb2YodTY0KTsKIAl9CiAKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfU0FNUExFIChJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCiAJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAogCQlldmVudC0+aGVhZGVyLm1pc2MsCkBAIC05OCw5ICs5OCw5IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9FVkVOVF9NSVNDX0NQVU1PREVfTUFTSzsKKwljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKLQlpZiAoY3B1bW9kZSA9PSBQRVJGX0VWRU5UX01JU0NfS0VSTkVMKSB7CisJaWYgKGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKIAkJc2hvdyA9IFNIT1dfS0VSTkVMOwogCQlsZXZlbCA9ICdrJzsKIApAQCAtMTA4LDcgKzEwOCw3IEBACiAKIAkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvLT5uYW1lKTsKIAotCX0gZWxzZSBpZiAoY3B1bW9kZSA9PSBQRVJGX0VWRU5UX01JU0NfVVNFUikgeworCX0gZWxzZSBpZiAoY3B1bW9kZSA9PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpIHsKIAogCQlzaG93ID0gU0hPV19VU0VSOwogCQlsZXZlbCA9ICcuJzsKQEAgLTE0NiwxOSArMTQ2LDE5IEBACiAJdHJhY2VfZXZlbnQoZXZlbnQpOwogCiAJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKLQljYXNlIFBFUkZfRVZFTlRfTU1BUCAuLi4gUEVSRl9FVkVOVF9MT1NUOgorCWNhc2UgUEVSRl9SRUNPUkRfTU1BUCAuLi4gUEVSRl9SRUNPUkRfTE9TVDoKIAkJcmV0dXJuIDA7CiAKLQljYXNlIFBFUkZfRVZFTlRfQ09NTToKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CiAJCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfRVhJVCAuLi4gUEVSRl9FVkVOVF9SRUFEOgorCWNhc2UgUEVSRl9SRUNPUkRfRVhJVCAuLi4gUEVSRl9SRUNPUkRfUkVBRDoKIAkJcmV0dXJuIDA7CiAKLQljYXNlIFBFUkZfRVZFTlRfU0FNUExFOgorCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgogCQlyZXR1cm4gcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CiAKLQljYXNlIFBFUkZfRVZFTlRfTUFYOgorCWNhc2UgUEVSRl9SRUNPUkRfTUFYOgogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4uaCBiL3Rvb2xzL3BlcmYvYnVpbHRpbi5oCmluZGV4IDNhNjNlNDEuLmUxMWQ4ZDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi5oCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi5oCkBAIC0xNiwxMiArMTYsMTQgQEAKIAogZXh0ZXJuIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9zY2hlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9yZXBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfc3RhdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF90aW1lY2hhcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdG9wKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKLWV4dGVybiBpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwotZXh0ZXJuIGludCBjbWRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF90cmFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKaW5kZXggZWViY2UzMC4uMDAzMjZlMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CisrKyBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dApAQCAtNCw3ICs0LDEwIEBACiAjCiBwZXJmLWFubm90YXRlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtbGlzdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCitwZXJmLXNjaGVkCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtcmVjb3JkCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtcmVwb3J0CQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtc3RhdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCitwZXJmLXRpbWVjaGFydAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXRvcAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCitwZXJmLXRyYWNlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dCBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAppbmRleCBmNzFlMGQyLi5mMTk0NmQxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2Rlc2lnbi50eHQKKysrIGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CkBAIC0xOCwxMCArMTgsMTAgQEAKIFBlcmZvcm1hbmNlIGNvdW50ZXJzIGFyZSBhY2Nlc3NlZCB2aWEgc3BlY2lhbCBmaWxlIGRlc2NyaXB0b3JzLgogVGhlcmUncyBvbmUgZmlsZSBkZXNjcmlwdG9yIHBlciB2aXJ0dWFsIGNvdW50ZXIgdXNlZC4KIAotVGhlIHNwZWNpYWwgZmlsZSBkZXNjcmlwdG9yIGlzIG9wZW5lZCB2aWEgdGhlIHBlcmZfY291bnRlcl9vcGVuKCkKK1RoZSBzcGVjaWFsIGZpbGUgZGVzY3JpcHRvciBpcyBvcGVuZWQgdmlhIHRoZSBwZXJmX2V2ZW50X29wZW4oKQogc3lzdGVtIGNhbGw6CiAKLSAgIGludCBzeXNfcGVyZl9jb3VudGVyX29wZW4oc3RydWN0IHBlcmZfY291bnRlcl9od19ldmVudCAqaHdfZXZlbnRfdXB0ciwKKyAgIGludCBzeXNfcGVyZl9ldmVudF9vcGVuKHN0cnVjdCBwZXJmX2V2ZW50X2h3X2V2ZW50ICpod19ldmVudF91cHRyLAogCQkJICAgICBwaWRfdCBwaWQsIGludCBjcHUsIGludCBncm91cF9mZCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKQEAgLTMyLDkgKzMyLDkgQEAKIE11bHRpcGxlIGNvdW50ZXJzIGNhbiBiZSBrZXB0IG9wZW4gYXQgYSB0aW1lLCBhbmQgdGhlIGNvdW50ZXJzCiBjYW4gYmUgcG9sbCgpZWQuCiAKLVdoZW4gY3JlYXRpbmcgYSBuZXcgY291bnRlciBmZCwgJ3BlcmZfY291bnRlcl9od19ldmVudCcgaXM6CitXaGVuIGNyZWF0aW5nIGEgbmV3IGNvdW50ZXIgZmQsICdwZXJmX2V2ZW50X2h3X2V2ZW50JyBpczoKIAotc3RydWN0IHBlcmZfY291bnRlcl9od19ldmVudCB7CitzdHJ1Y3QgcGVyZl9ldmVudF9od19ldmVudCB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZSBNU0Igb2YgdGhlIGNvbmZpZyB3b3JkIHNpZ25pZmllcyBpZiB0aGUgcmVzdCBjb250YWlucyBjcHUKICAgICAgICAgICogc3BlY2lmaWMgKHJhdykgY291bnRlciBjb25maWd1cmF0aW9uIGRhdGEsIGlmIHVuc2V0LCB0aGUgbmV4dApAQCAtOTMsNyArOTMsNyBAQAogCiAvKgogICogR2VuZXJhbGl6ZWQgcGVyZm9ybWFuY2UgY291bnRlciBldmVudCB0eXBlcywgdXNlZCBieSB0aGUgaHdfZXZlbnQuZXZlbnRfaWQKLSAqIHBhcmFtZXRlciBvZiB0aGUgc3lzX3BlcmZfY291bnRlcl9vcGVuKCkgc3lzY2FsbDoKKyAqIHBhcmFtZXRlciBvZiB0aGUgc3lzX3BlcmZfZXZlbnRfb3BlbigpIHN5c2NhbGw6CiAgKi8KIGVudW0gaHdfZXZlbnRfaWRzIHsKIAkvKgpAQCAtMTU5LDcgKzE1OSw3IEBACiAgKiByZWFkcyBvbiB0aGUgY291bnRlciBzaG91bGQgcmV0dXJuIHRoZSBpbmRpY2F0ZWQgcXVhbnRpdGllcywKICAqIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgYml0IHZhbHVlLCBhZnRlciB0aGUgY291bnRlciB2YWx1ZS4KICAqLwotZW51bSBwZXJmX2NvdW50ZXJfcmVhZF9mb3JtYXQgeworZW51bSBwZXJmX2V2ZW50X3JlYWRfZm9ybWF0IHsKICAgICAgICAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEICA9ICAxLAogICAgICAgICBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcgID0gIDIsCiB9OwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgKiBCaXRzIHRoYXQgY2FuIGJlIHNldCBpbiBod19ldmVudC5yZWNvcmRfdHlwZSB0byByZXF1ZXN0IGluZm9ybWF0aW9uCiAgKiBpbiB0aGUgb3ZlcmZsb3cgcGFja2V0cy4KICAqLwotZW51bSBwZXJmX2NvdW50ZXJfcmVjb3JkX2Zvcm1hdCB7CitlbnVtIHBlcmZfZXZlbnRfcmVjb3JkX2Zvcm1hdCB7CiAgICAgICAgIFBFUkZfUkVDT1JEX0lQICAgICAgICAgID0gMVUgPDwgMCwKICAgICAgICAgUEVSRl9SRUNPUkRfVElEICAgICAgICAgPSAxVSA8PCAxLAogICAgICAgICBQRVJGX1JFQ09SRF9USU1FICAgICAgICA9IDFVIDw8IDIsCkBAIC0yMjgsNyArMjI4LDcgQEAKIFRoZSAnY29tbScgYml0IGFsbG93cyB0cmFja2luZyBvZiBwcm9jZXNzIGNvbW0gZGF0YSBvbiBwcm9jZXNzIGNyZWF0aW9uLgogVGhpcyB0b28gaXMgcmVjb3JkZWQgaW4gdGhlIHJpbmctYnVmZmVyIChzZWUgYmVsb3cpLgogCi1UaGUgJ3BpZCcgcGFyYW1ldGVyIHRvIHRoZSBwZXJmX2NvdW50ZXJfb3BlbigpIHN5c3RlbSBjYWxsIGFsbG93cyB0aGUKK1RoZSAncGlkJyBwYXJhbWV0ZXIgdG8gdGhlIHBlcmZfZXZlbnRfb3BlbigpIHN5c3RlbSBjYWxsIGFsbG93cyB0aGUKIGNvdW50ZXIgdG8gYmUgc3BlY2lmaWMgdG8gYSB0YXNrOgogCiAgcGlkID09IDA6IGlmIHRoZSBwaWQgcGFyYW1ldGVyIGlzIHplcm8sIHRoZSBjb3VudGVyIGlzIGF0dGFjaGVkIHRvIHRoZQpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIFRoZSAnZ3JvdXBfZmQnIHBhcmFtZXRlciBhbGxvd3MgY291bnRlciAiZ3JvdXBzIiB0byBiZSBzZXQgdXAuICBBCiBjb3VudGVyIGdyb3VwIGhhcyBvbmUgY291bnRlciB3aGljaCBpcyB0aGUgZ3JvdXAgImxlYWRlciIuICBUaGUgbGVhZGVyCi1pcyBjcmVhdGVkIGZpcnN0LCB3aXRoIGdyb3VwX2ZkID0gLTEgaW4gdGhlIHBlcmZfY291bnRlcl9vcGVuIGNhbGwKK2lzIGNyZWF0ZWQgZmlyc3QsIHdpdGggZ3JvdXBfZmQgPSAtMSBpbiB0aGUgcGVyZl9ldmVudF9vcGVuIGNhbGwKIHRoYXQgY3JlYXRlcyBpdC4gIFRoZSByZXN0IG9mIHRoZSBncm91cCBtZW1iZXJzIGFyZSBjcmVhdGVkCiBzdWJzZXF1ZW50bHksIHdpdGggZ3JvdXBfZmQgZ2l2aW5nIHRoZSBmZCBvZiB0aGUgZ3JvdXAgbGVhZGVyLgogKEEgc2luZ2xlIGNvdW50ZXIgb24gaXRzIG93biBpcyBjcmVhdGVkIHdpdGggZ3JvdXBfZmQgPSAtMSBhbmQgaXMKQEAgLTI3NywxMyArMjc3LDEzIEBACiBhY2Nlc3NlZCB0aHJvdWdoIG1tYXAoKS4KIAogVGhlIG1tYXAgc2l6ZSBzaG91bGQgYmUgMSsyXm4gcGFnZXMsIHdoZXJlIHRoZSBmaXJzdCBwYWdlIGlzIGEgbWV0YS1kYXRhIHBhZ2UKLShzdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSkgdGhhdCBjb250YWlucyB2YXJpb3VzIGJpdHMgb2YgaW5mb3JtYXRpb24gc3VjaAorKHN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSkgdGhhdCBjb250YWlucyB2YXJpb3VzIGJpdHMgb2YgaW5mb3JtYXRpb24gc3VjaAogYXMgd2hlcmUgdGhlIHJpbmctYnVmZmVyIGhlYWQgaXMuCiAKIC8qCiAgKiBTdHJ1Y3R1cmUgb2YgdGhlIHBhZ2UgdGhhdCBjYW4gYmUgbWFwcGVkIHZpYSBtbWFwCiAgKi8KLXN0cnVjdCBwZXJmX2NvdW50ZXJfbW1hcF9wYWdlIHsKK3N0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSB7CiAgICAgICAgIF9fdTMyICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyogdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KICAgICAgICAgX191MzIgICBjb21wYXRfdmVyc2lvbjsgICAgICAgICAvKiBsb3dlc3QgdmVyc2lvbiB0aGlzIGlzIGNvbXBhdCB3aXRoICovCiAKQEAgLTMxNyw3ICszMTcsNyBAQAogICAgICAgICAgKiBDb250cm9sIGRhdGEgZm9yIHRoZSBtbWFwKCkgZGF0YSBidWZmZXIuCiAgICAgICAgICAqCiAgICAgICAgICAqIFVzZXItc3BhY2UgcmVhZGluZyB0aGlzIHZhbHVlIHNob3VsZCBpc3N1ZSBhbiBybWIoKSwgb24gU01QIGNhcGFibGUKLSAgICAgICAgICogcGxhdGZvcm1zLCBhZnRlciByZWFkaW5nIHRoaXMgdmFsdWUgLS0gc2VlIHBlcmZfY291bnRlcl93YWtldXAoKS4KKyAgICAgICAgICogcGxhdGZvcm1zLCBhZnRlciByZWFkaW5nIHRoaXMgdmFsdWUgLS0gc2VlIHBlcmZfZXZlbnRfd2FrZXVwKCkuCiAgICAgICAgICAqLwogICAgICAgICBfX3UzMiAgIGRhdGFfaGVhZDsgICAgICAgICAgICAgIC8qIGhlYWQgaW4gdGhlIGRhdGEgc2VjdGlvbiAqLwogfTsKQEAgLTMyNyw5ICszMjcsOSBAQAogCiBUaGUgZm9sbG93aW5nIDJebiBwYWdlcyBhcmUgdGhlIHJpbmctYnVmZmVyIHdoaWNoIGNvbnRhaW5zIGV2ZW50cyBvZiB0aGUgZm9ybToKIAotI2RlZmluZSBQRVJGX0VWRU5UX01JU0NfS0VSTkVMICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19VU0VSICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX09WRVJGTE9XICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX09WRVJGTE9XICAgICAgICAoMSA8PCAyKQogCiBzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgewogICAgICAgICBfX3UzMiAgIHR5cGU7CkBAIC0zNTMsOCArMzUzLDggQEAKICAgICAgICAgICogICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lW107CiAgICAgICAgICAqIH07CiAgICAgICAgICAqLwotICAgICAgICBQRVJGX0VWRU5UX01NQVAgICAgICAgICAgICAgICAgID0gMSwKLSAgICAgICAgUEVSRl9FVkVOVF9NVU5NQVAgICAgICAgICAgICAgICA9IDIsCisgICAgICAgIFBFUkZfUkVDT1JEX01NQVAgICAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgUEVSRl9SRUNPUkRfTVVOTUFQICAgICAgICAgICAgICAgPSAyLAogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHN0cnVjdCB7CkBAIC0zNjQsMTAgKzM2NCwxMCBAQAogICAgICAgICAgKiAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbVtdOwogICAgICAgICAgKiB9OwogICAgICAgICAgKi8KLSAgICAgICAgUEVSRl9FVkVOVF9DT01NICAgICAgICAgICAgICAgICA9IDMsCisgICAgICAgIFBFUkZfUkVDT1JEX0NPTU0gICAgICAgICAgICAgICAgID0gMywKIAogICAgICAgICAvKgotICAgICAgICAgKiBXaGVuIGhlYWRlci5taXNjICYgUEVSRl9FVkVOVF9NSVNDX09WRVJGTE9XIHRoZSBldmVudF90eXBlIGZpZWxkCisgICAgICAgICAqIFdoZW4gaGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX09WRVJGTE9XIHRoZSBldmVudF90eXBlIGZpZWxkCiAgICAgICAgICAqIHdpbGwgYmUgUEVSRl9SRUNPUkRfKgogICAgICAgICAgKgogICAgICAgICAgKiBzdHJ1Y3QgewpAQCAtMzk3LDcgKzM5Nyw3IEBACiBmY250bCgpIG1hbmFnaW5nIHNpZ25hbHMuCiAKIE5vcm1hbGx5IGEgbm90aWZpY2F0aW9uIGlzIGdlbmVyYXRlZCBmb3IgZXZlcnkgcGFnZSBmaWxsZWQsIGhvd2V2ZXIgb25lIGNhbgotYWRkaXRpb25hbGx5IHNldCBwZXJmX2NvdW50ZXJfaHdfZXZlbnQud2FrZXVwX2V2ZW50cyB0byBnZW5lcmF0ZSBvbmUgZXZlcnkKK2FkZGl0aW9uYWxseSBzZXQgcGVyZl9ldmVudF9od19ldmVudC53YWtldXBfZXZlbnRzIHRvIGdlbmVyYXRlIG9uZSBldmVyeQogc28gbWFueSBjb3VudGVyIG92ZXJmbG93IGV2ZW50cy4KIAogRnV0dXJlIHdvcmsgd2lsbCBpbmNsdWRlIGEgc3BsaWNlKCkgaW50ZXJmYWNlIHRvIHRoZSByaW5nLWJ1ZmZlci4KQEAgLTQwOSwxMSArNDA5LDExIEBACiAKIEFuIGluZGl2aWR1YWwgY291bnRlciBvciBjb3VudGVyIGdyb3VwIGNhbiBiZSBlbmFibGVkIHdpdGgKIAotCWlvY3RsKGZkLCBQRVJGX0NPVU5URVJfSU9DX0VOQUJMRSk7CisJaW9jdGwoZmQsIFBFUkZfRVZFTlRfSU9DX0VOQUJMRSk7CiAKIG9yIGRpc2FibGVkIHdpdGgKIAotCWlvY3RsKGZkLCBQRVJGX0NPVU5URVJfSU9DX0RJU0FCTEUpOworCWlvY3RsKGZkLCBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFKTsKIAogRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBsZWFkZXIgb2YgYSBncm91cCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZQogd2hvbGUgZ3JvdXA7IHRoYXQgaXMsIHdoaWxlIHRoZSBncm91cCBsZWFkZXIgaXMgZGlzYWJsZWQsIG5vbmUgb2YgdGhlCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogCiBBZGRpdGlvbmFsbHksIG5vbi1pbmhlcml0ZWQgb3ZlcmZsb3cgY291bnRlcnMgY2FuIHVzZQogCi0JaW9jdGwoZmQsIFBFUkZfQ09VTlRFUl9JT0NfUkVGUkVTSCwgbnIpOworCWlvY3RsKGZkLCBQRVJGX0VWRU5UX0lPQ19SRUZSRVNILCBucik7CiAKIHRvIGVuYWJsZSBhIGNvdW50ZXIgZm9yICducicgZXZlbnRzLCBhZnRlciB3aGljaCBpdCBnZXRzIGRpc2FibGVkIGFnYWluLgogCiBBIHByb2Nlc3MgY2FuIGVuYWJsZSBvciBkaXNhYmxlIGFsbCB0aGUgY291bnRlciBncm91cHMgdGhhdCBhcmUKIGF0dGFjaGVkIHRvIGl0LCB1c2luZyBwcmN0bDoKIAotCXByY3RsKFBSX1RBU0tfUEVSRl9DT1VOVEVSU19FTkFCTEUpOworCXByY3RsKFBSX1RBU0tfUEVSRl9FVkVOVFNfRU5BQkxFKTsKIAotCXByY3RsKFBSX1RBU0tfUEVSRl9DT1VOVEVSU19ESVNBQkxFKTsKKwlwcmN0bChQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUpOwogCiBUaGlzIGFwcGxpZXMgdG8gYWxsIGNvdW50ZXJzIG9uIHRoZSBjdXJyZW50IHByb2Nlc3MsIHdoZXRoZXIgY3JlYXRlZAogYnkgdGhpcyBwcm9jZXNzIG9yIGJ5IGFub3RoZXIsIGFuZCBkb2Vzbid0IGFmZmVjdCBhbnkgY291bnRlcnMgdGhhdApAQCAtNDQ3LDExICs0NDcsMTEgQEAKIElmIHlvdXIgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGhhdmUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgbWV0cmljcywgeW91IGNhbgogc3RpbGwgdXNlIHRoZSBnZW5lcmljIHNvZnR3YXJlIGNvdW50ZXJzIGJhc2VkIG9uIGhydGltZXJzIGZvciBzYW1wbGluZy4KIAotU28gdG8gc3RhcnQgd2l0aCwgaW4gb3JkZXIgdG8gYWRkIEhBVkVfUEVSRl9DT1VOVEVSUyB0byB5b3VyIEtjb25maWcsIHlvdQorU28gdG8gc3RhcnQgd2l0aCwgaW4gb3JkZXIgdG8gYWRkIEhBVkVfUEVSRl9FVkVOVFMgdG8geW91ciBLY29uZmlnLCB5b3UKIHdpbGwgbmVlZCBhdCBsZWFzdCB0aGlzOgotCS0gYXNtL3BlcmZfY291bnRlci5oIC0gYSBiYXNpYyBzdHViIHdpbGwgc3VmZmljZSBhdCBmaXJzdAorCS0gYXNtL3BlcmZfZXZlbnQuaCAtIGEgYmFzaWMgc3R1YiB3aWxsIHN1ZmZpY2UgYXQgZmlyc3QKIAktIHN1cHBvcnQgZm9yIGF0b21pYzY0IHR5cGVzIChhbmQgYXNzb2NpYXRlZCBoZWxwZXIgZnVuY3Rpb25zKQotCS0gc2V0X3BlcmZfY291bnRlcl9wZW5kaW5nKCkgaW1wbGVtZW50ZWQKKwktIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcoKSBpbXBsZW1lbnRlZAogCiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzIGhhdmUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB5b3UgY2FuIG92ZXJyaWRlIHRoZQotd2VhayBzdHViIGh3X3BlcmZfY291bnRlcl9pbml0KCkgdG8gcmVnaXN0ZXIgaGFyZHdhcmUgY291bnRlcnMuCit3ZWFrIHN0dWIgaHdfcGVyZl9ldmVudF9pbml0KCkgdG8gcmVnaXN0ZXIgaGFyZHdhcmUgY291bnRlcnMuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYuYyBiL3Rvb2xzL3BlcmYvcGVyZi5jCmluZGV4IGZlNDU4OWQuLjE5ZmM3ZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi5jCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi5jCkBAIC0yODksMTAgKzI4OSwxMiBAQAogCQl7ICJyZWNvcmQiLCBjbWRfcmVjb3JkLCAwIH0sCiAJCXsgInJlcG9ydCIsIGNtZF9yZXBvcnQsIDAgfSwKIAkJeyAic3RhdCIsIGNtZF9zdGF0LCAwIH0sCisJCXsgInRpbWVjaGFydCIsIGNtZF90aW1lY2hhcnQsIDAgfSwKIAkJeyAidG9wIiwgY21kX3RvcCwgMCB9LAogCQl7ICJhbm5vdGF0ZSIsIGNtZF9hbm5vdGF0ZSwgMCB9LAogCQl7ICJ2ZXJzaW9uIiwgY21kX3ZlcnNpb24sIDAgfSwKIAkJeyAidHJhY2UiLCBjbWRfdHJhY2UsIDAgfSwKKwkJeyAic2NoZWQiLCBjbWRfc2NoZWQsIDAgfSwKIAl9OwogCXVuc2lnbmVkIGludCBpOwogCXN0YXRpYyBjb25zdCBjaGFyIGV4dFtdID0gU1RSSVBfRVhURU5TSU9OOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmggYi90b29scy9wZXJmL3BlcmYuaAppbmRleCAyYWJlYjIwLi44Y2M0NjIzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuaAorKysgYi90b29scy9wZXJmL3BlcmYuaApAQCAtNTIsMTUgKzUyLDE1IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KIAotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgiCiAjaW5jbHVkZSAidXRpbC90eXBlcy5oIgogCiAvKgotICogcHJjdGwoUFJfVEFTS19QRVJGX0NPVU5URVJTX0RJU0FCTEUpIHdpbGwgKGNoZWFwbHkpIGRpc2FibGUgYWxsCisgKiBwcmN0bChQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUpIHdpbGwgKGNoZWFwbHkpIGRpc2FibGUgYWxsCiAgKiBjb3VudGVycyBpbiB0aGUgY3VycmVudCB0YXNrLgogICovCi0jZGVmaW5lIFBSX1RBU0tfUEVSRl9DT1VOVEVSU19ESVNBQkxFICAgMzEKLSNkZWZpbmUgUFJfVEFTS19QRVJGX0NPVU5URVJTX0VOQUJMRSAgICAzMgorI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUgICAzMQorI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRSAgICAzMgogCiAjaWZuZGVmIE5TRUNfUEVSX1NFQwogIyBkZWZpbmUgTlNFQ19QRVJfU0VDCQkJMTAwMDAwMDAwMFVMTApAQCAtOTAsMTIgKzkwLDEyIEBACiAJX21pbjEgPCBfbWluMiA/IF9taW4xIDogX21pbjI7IH0pCiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1zeXNfcGVyZl9jb3VudGVyX29wZW4oc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyLAorc3lzX3BlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAogCQkgICAgICBwaWRfdCBwaWQsIGludCBjcHUsIGludCBncm91cF9mZCwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlhdHRyLT5zaXplID0gc2l6ZW9mKCphdHRyKTsKLQlyZXR1cm4gc3lzY2FsbChfX05SX3BlcmZfY291bnRlcl9vcGVuLCBhdHRyLCBwaWQsIGNwdSwKKwlyZXR1cm4gc3lzY2FsbChfX05SX3BlcmZfZXZlbnRfb3BlbiwgYXR0ciwgcGlkLCBjcHUsCiAJCSAgICAgICBncm91cF9mZCwgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCmluZGV4IGZhMmQ0ZTkuLjJjOWMyNmQ2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19QRVJGX0VWRU5UX0gKLSNkZWZpbmUgX19QRVJGX0VWRU5UX0gKKyNpZm5kZWYgX19QRVJGX1JFQ09SRF9ICisjZGVmaW5lIF9fUEVSRl9SRUNPUkRfSAogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMzksNiArMzksNyBAQAogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CiAJdTMyIHBpZCwgcHBpZDsKIAl1MzIgdGlkLCBwdGlkOworCXU2NCB0aW1lOwogfTsKIAogc3RydWN0IGxvc3RfZXZlbnQgewpAQCAtNTIsMTMgKzUzLDE5IEBACiAgKi8KIHN0cnVjdCByZWFkX2V2ZW50IHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCXUzMiBwaWQsdGlkOworCXUzMiBwaWQsIHRpZDsKIAl1NjQgdmFsdWU7CiAJdTY0IHRpbWVfZW5hYmxlZDsKIAl1NjQgdGltZV9ydW5uaW5nOwogCXU2NCBpZDsKIH07CiAKK3N0cnVjdCBzYW1wbGVfZXZlbnR7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICAgICAgICBoZWFkZXI7CisJdTY0IGFycmF5W107Cit9OworCisKIHR5cGVkZWYgdW5pb24gZXZlbnRfdW5pb24gewogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CiAJc3RydWN0IGlwX2V2ZW50CQkJaXA7CkBAIC02Nyw2ICs3NCw3IEBACiAJc3RydWN0IGZvcmtfZXZlbnQJCWZvcms7CiAJc3RydWN0IGxvc3RfZXZlbnQJCWxvc3Q7CiAJc3RydWN0IHJlYWRfZXZlbnQJCXJlYWQ7CisJc3RydWN0IHNhbXBsZV9ldmVudAkJc2FtcGxlOwogfSBldmVudF90OwogCiBzdHJ1Y3QgbWFwIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCBlYzRkNGMyLi5lMzA2ODU3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC03LDEwICs3LDkgQEAKICNpbmNsdWRlICJoZWFkZXIuaCIKIAogLyoKLSAqCisgKiBDcmVhdGUgbmV3IHBlcmYuZGF0YSBoZWFkZXIgYXR0cmlidXRlOgogICovCi0KLXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpwZXJmX2hlYWRlcl9hdHRyX19uZXcoc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQorc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnBlcmZfaGVhZGVyX2F0dHJfX25ldyhzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwogCkBAIC00Myw5ICs0Miw4IEBACiB9CiAKIC8qCi0gKgorICogQ3JlYXRlIG5ldyBwZXJmLmRhdGEgaGVhZGVyOgogICovCi0KIHN0cnVjdCBwZXJmX2hlYWRlciAqcGVyZl9oZWFkZXJfX25ldyh2b2lkKQogewogCXN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKQEAgLTg2LDYgKzg0LDQ2IEBACiAJc2VsZi0+YXR0cltwb3NdID0gYXR0cjsKIH0KIAorI2RlZmluZSBNQVhfRVZFTlRfTkFNRSA2NAorCitzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlIHsKKwl1NjQJZXZlbnRfaWQ7CisJY2hhcgluYW1lW01BWF9FVkVOVF9OQU1FXTsKK307CisKK3N0YXRpYyBpbnQgZXZlbnRfY291bnQ7CitzdGF0aWMgc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSAqZXZlbnRzOworCit2b2lkIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoc3RybGVuKG5hbWUpID4gTUFYX0VWRU5UX05BTUUpCisJCXByaW50ZigiRXZlbnQgJXMgd2lsbCBiZSB0cnVuY2F0ZWRcbiIsIG5hbWUpOworCisJaWYgKCFldmVudHMpIHsKKwkJZXZlbnRzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlKSk7CisJCWlmICghZXZlbnRzKQorCQkJZGllKCJub21lbSIpOworCX0gZWxzZSB7CisJCWV2ZW50cyA9IHJlYWxsb2MoZXZlbnRzLCAoZXZlbnRfY291bnQgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlKSk7CisJCWlmICghZXZlbnRzKQorCQkJZGllKCJub21lbSIpOworCX0KKwltZW1zZXQoJmV2ZW50c1tldmVudF9jb3VudF0sIDAsIHNpemVvZihzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlKSk7CisJZXZlbnRzW2V2ZW50X2NvdW50XS5ldmVudF9pZCA9IGlkOworCXN0cm5jcHkoZXZlbnRzW2V2ZW50X2NvdW50XS5uYW1lLCBuYW1lLCBNQVhfRVZFTlRfTkFNRSAtIDEpOworCWV2ZW50X2NvdW50Kys7Cit9CisKK2NoYXIgKnBlcmZfaGVhZGVyX19maW5kX2V2ZW50KHU2NCBpZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwIDsgaSA8IGV2ZW50X2NvdW50OyBpKyspIHsKKwkJaWYgKGV2ZW50c1tpXS5ldmVudF9pZCA9PSBpZCkKKwkJCXJldHVybiBldmVudHNbaV0ubmFtZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpfX3BlcmZfbWFnaWMgPSAiUEVSRkZJTEUiOwogCiAjZGVmaW5lIFBFUkZfTUFHSUMJKCoodTY0ICopX19wZXJmX21hZ2ljKQpAQCAtOTYsNyArMTM0LDcgQEAKIH07CiAKIHN0cnVjdCBwZXJmX2ZpbGVfYXR0ciB7Ci0Jc3RydWN0IHBlcmZfY291bnRlcl9hdHRyCWF0dHI7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0cglhdHRyOwogCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglpZHM7CiB9OwogCkBAIC0xMDYsNiArMTQ0LDcgQEAKIAl1NjQJCQkJYXR0cl9zaXplOwogCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglhdHRyczsKIAlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24JZGF0YTsKKwlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24JZXZlbnRfdHlwZXM7CiB9OwogCiBzdGF0aWMgdm9pZCBkb193cml0ZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCkBAIC0xNTQsNiArMTkzLDExIEBACiAJCWRvX3dyaXRlKGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSk7CiAJfQogCisJc2VsZi0+ZXZlbnRfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKwlzZWxmLT5ldmVudF9zaXplID0gZXZlbnRfY291bnQgKiBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSk7CisJaWYgKGV2ZW50cykKKwkJZG9fd3JpdGUoZmQsIGV2ZW50cywgc2VsZi0+ZXZlbnRfc2l6ZSk7CisKIAogCXNlbGYtPmRhdGFfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKIApAQCAtMTY5LDYgKzIxMywxMCBAQAogCQkJLm9mZnNldCA9IHNlbGYtPmRhdGFfb2Zmc2V0LAogCQkJLnNpemUJPSBzZWxmLT5kYXRhX3NpemUsCiAJCX0sCisJCS5ldmVudF90eXBlcyA9IHsKKwkJCS5vZmZzZXQgPSBzZWxmLT5ldmVudF9vZmZzZXQsCisJCQkuc2l6ZQk9IHNlbGYtPmV2ZW50X3NpemUsCisJCX0sCiAJfTsKIAogCWxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7CkBAIC0yMzQsNiArMjgyLDE3IEBACiAJCWxzZWVrKGZkLCB0bXAsIFNFRUtfU0VUKTsKIAl9CiAKKwlpZiAoZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSkgeworCQlsc2VlayhmZCwgZl9oZWFkZXIuZXZlbnRfdHlwZXMub2Zmc2V0LCBTRUVLX1NFVCk7CisJCWV2ZW50cyA9IG1hbGxvYyhmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKTsKKwkJaWYgKCFldmVudHMpCisJCQlkaWUoIm5vbWVtIik7CisJCWRvX3JlYWQoZmQsIGV2ZW50cywgZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSk7CisJCWV2ZW50X2NvdW50ID0gIGZfaGVhZGVyLmV2ZW50X3R5cGVzLnNpemUgLyBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSk7CisJfQorCXNlbGYtPmV2ZW50X29mZnNldCA9IGZfaGVhZGVyLmV2ZW50X3R5cGVzLm9mZnNldDsKKwlzZWxmLT5ldmVudF9zaXplICAgPSBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplOworCiAJc2VsZi0+ZGF0YV9vZmZzZXQgPSBmX2hlYWRlci5kYXRhLm9mZnNldDsKIAlzZWxmLT5kYXRhX3NpemUgICA9IGZfaGVhZGVyLmRhdGEuc2l6ZTsKIApAQCAtMjYxLDcgKzMyMCw3IEBACiAJcmV0dXJuIHR5cGU7CiB9CiAKLXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqCitzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICoKIHBlcmZfaGVhZGVyX19maW5kX2F0dHIodTY0IGlkLCBzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlcikKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAppbmRleCA1ZDBhNzJlLi5hMDc2MWJjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCkBAIC0xLDEyICsxLDEyIEBACiAjaWZuZGVmIF9QRVJGX0hFQURFUl9ICiAjZGVmaW5lIF9QRVJGX0hFQURFUl9ICiAKLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgInR5cGVzLmgiCiAKIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyIHsKLQlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CiAJaW50IGlkcywgc2l6ZTsKIAl1NjQgKmlkOwogCW9mZl90IGlkX29mZnNldDsKQEAgLTE5LDYgKzE5LDggQEAKIAlzNjQgYXR0cl9vZmZzZXQ7CiAJdTY0IGRhdGFfb2Zmc2V0OwogCXU2NCBkYXRhX3NpemU7CisJdTY0IGV2ZW50X29mZnNldDsKKwl1NjQgZXZlbnRfc2l6ZTsKIH07CiAKIHN0cnVjdCBwZXJmX2hlYWRlciAqcGVyZl9oZWFkZXJfX3JlYWQoaW50IGZkKTsKQEAgLTI3LDEyICsyOSwxNiBAQAogdm9pZCBwZXJmX2hlYWRlcl9fYWRkX2F0dHIoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLAogCQkJICAgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIpOwogCit2b2lkIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpwZXJmX2hlYWRlcl9fZmluZF9ldmVudCh1NjQgaWQpOworCisKIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICoKLXBlcmZfaGVhZGVyX2F0dHJfX25ldyhzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIpOworcGVyZl9oZWFkZXJfYXR0cl9fbmV3KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpOwogdm9pZCBwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYsIHU2NCBpZCk7CiAKIHU2NCBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpOwotc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICoKK3N0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKgogcGVyZl9oZWFkZXJfX2ZpbmRfYXR0cih1NjQgaWQsIHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKTsKIAogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKaW5kZXggYTU4N2Q0MS4uMTNhYjRiOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwpAQCAtNiwxMCArNiwxMSBAQAogI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJoZWFkZXIuaCIKIAogaW50CQkJCQlucl9jb3VudGVyczsKIAotc3RydWN0IHBlcmZfY291bnRlcl9hdHRyCQlhdHRyc1tNQVhfQ09VTlRFUlNdOworc3RydWN0IHBlcmZfZXZlbnRfYXR0cgkJYXR0cnNbTUFYX0NPVU5URVJTXTsKIAogc3RydWN0IGV2ZW50X3N5bWJvbCB7CiAJdTgJCXR5cGU7CkBAIC0xOCw2ICsxOSwxMiBAQAogCWNvbnN0IGNoYXIJKmFsaWFzOwogfTsKIAorZW51bSBldmVudF9yZXN1bHQgeworCUVWVF9GQUlMRUQsCisJRVZUX0hBTkRMRUQsCisJRVZUX0hBTkRMRURfQUxMCit9OworCiBjaGFyIGRlYnVnZnNfcGF0aFtNQVhQQVRITEVOXTsKIAogI2RlZmluZSBDSFcoeCkgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXXyMjeApAQCAtNDEsMTMgKzQ4LDEzIEBACiAgIHsgQ1NXKENQVV9NSUdSQVRJT05TKSwJImNwdS1taWdyYXRpb25zIiwJIm1pZ3JhdGlvbnMiCX0sCiB9OwogCi0jZGVmaW5lIF9fUEVSRl9DT1VOVEVSX0ZJRUxEKGNvbmZpZywgbmFtZSkgXAotCSgoY29uZmlnICYgUEVSRl9DT1VOVEVSXyMjbmFtZSMjX01BU0spID4+IFBFUkZfQ09VTlRFUl8jI25hbWUjI19TSElGVCkKKyNkZWZpbmUgX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgbmFtZSkgXAorCSgoY29uZmlnICYgUEVSRl9FVkVOVF8jI25hbWUjI19NQVNLKSA+PiBQRVJGX0VWRU5UXyMjbmFtZSMjX1NISUZUKQogCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9SQVcoY29uZmlnKQlfX1BFUkZfQ09VTlRFUl9GSUVMRChjb25maWcsIFJBVykKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0NPTkZJRyhjb25maWcpCV9fUEVSRl9DT1VOVEVSX0ZJRUxEKGNvbmZpZywgQ09ORklHKQotI2RlZmluZSBQRVJGX0NPVU5URVJfVFlQRShjb25maWcpCV9fUEVSRl9DT1VOVEVSX0ZJRUxEKGNvbmZpZywgVFlQRSkKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lEKGNvbmZpZykJCV9fUEVSRl9DT1VOVEVSX0ZJRUxEKGNvbmZpZywgRVZFTlQpCisjZGVmaW5lIFBFUkZfRVZFTlRfUkFXKGNvbmZpZykJX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgUkFXKQorI2RlZmluZSBQRVJGX0VWRU5UX0NPTkZJRyhjb25maWcpCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIENPTkZJRykKKyNkZWZpbmUgUEVSRl9FVkVOVF9UWVBFKGNvbmZpZykJX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgVFlQRSkKKyNkZWZpbmUgUEVSRl9FVkVOVF9JRChjb25maWcpCQlfX1BFUkZfRVZFTlRfRklFTEQoY29uZmlnLCBFVkVOVCkKIAogc3RhdGljIGNvbnN0IGNoYXIgKmh3X2V2ZW50X25hbWVzW10gPSB7CiAJImN5Y2xlcyIsCkBAIC0xMzksNyArMTQ2LDcgQEAKIAkgICAoc3RyY21wKGV2dF9kaXJlbnQuZF9uYW1lLCAiLi4iKSkgJiYJCQkJICAgICAgIFwKIAkgICAoIXRwX2V2ZW50X2hhc19pZCgmc3lzX2RpcmVudCwgJmV2dF9kaXJlbnQpKSkKIAotI2RlZmluZSBNQVhfRVZFTlRfTEVOR1RIIDMwCisjZGVmaW5lIE1BWF9FVkVOVF9MRU5HVEggNTEyCiAKIGludCB2YWxpZF9kZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKmRlYnVnZnMpCiB7CkBAIC0zNDQsOCArMzUxLDggQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQKLXBhcnNlX2dlbmVyaWNfaHdfZXZlbnQoY29uc3QgY2hhciAqKnN0ciwgc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQorc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0CitwYXJzZV9nZW5lcmljX2h3X2V2ZW50KGNvbnN0IGNoYXIgKipzdHIsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJY29uc3QgY2hhciAqcyA9ICpzdHI7CiAJaW50IGNhY2hlX3R5cGUgPSAtMSwgY2FjaGVfb3AgPSAtMSwgY2FjaGVfcmVzdWx0ID0gLTE7CkBAIC0zNTYsNyArMzYzLDcgQEAKIAkgKiB0aGVuIGJhaWwgb3V0OgogCSAqLwogCWlmIChjYWNoZV90eXBlID09IC0xKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIEVWVF9GQUlMRUQ7CiAKIAl3aGlsZSAoKGNhY2hlX29wID09IC0xIHx8IGNhY2hlX3Jlc3VsdCA9PSAtMSkgJiYgKnMgPT0gJy0nKSB7CiAJCSsrczsKQEAgLTQwMiwyNyArNDA5LDExNSBAQAogCWF0dHItPnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEU7CiAKIAkqc3RyID0gczsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gRVZUX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfdHJhY2Vwb2ludF9ldmVudChjb25zdCBjaGFyICoqc3RycCwKLQkJCQkgICAgc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQorc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0CitwYXJzZV9zaW5nbGVfdHJhY2Vwb2ludF9ldmVudChjaGFyICpzeXNfbmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmV2dF9uYW1lLAorCQkJICAgICAgdW5zaWduZWQgaW50IGV2dF9sZW5ndGgsCisJCQkgICAgICBjaGFyICpmbGFncywKKwkJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICoqc3RycCkKK3sKKwljaGFyIGV2dF9wYXRoW01BWFBBVEhMRU5dOworCWNoYXIgaWRfYnVmWzRdOworCXU2NCBpZDsKKwlpbnQgZmQ7CisKKwlpZiAoZmxhZ3MpIHsKKwkJaWYgKCFzdHJuY21wKGZsYWdzLCAicmVjb3JkIiwgc3RybGVuKGZsYWdzKSkpIHsKKwkJCWF0dHItPnNhbXBsZV90eXBlIHw9IFBFUkZfU0FNUExFX1JBVzsKKwkJCWF0dHItPnNhbXBsZV90eXBlIHw9IFBFUkZfU0FNUExFX1RJTUU7CisJCQlhdHRyLT5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9DUFU7CisJCX0KKwl9CisKKwlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzLyVzL2lkIiwgZGVidWdmc19wYXRoLAorCQkgc3lzX25hbWUsIGV2dF9uYW1lKTsKKworCWZkID0gb3BlbihldnRfcGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiBFVlRfRkFJTEVEOworCisJaWYgKHJlYWQoZmQsIGlkX2J1Ziwgc2l6ZW9mKGlkX2J1ZikpIDwgMCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiBFVlRfRkFJTEVEOworCX0KKworCWNsb3NlKGZkKTsKKwlpZCA9IGF0b2xsKGlkX2J1Zik7CisJYXR0ci0+Y29uZmlnID0gaWQ7CisJYXR0ci0+dHlwZSA9IFBFUkZfVFlQRV9UUkFDRVBPSU5UOworCSpzdHJwID0gZXZ0X25hbWUgKyBldnRfbGVuZ3RoOworCisJcmV0dXJuIEVWVF9IQU5ETEVEOworfQorCisvKiBzeXMgKyAnOicgKyBldmVudCArICc6JyArIGZsYWdzKi8KKyNkZWZpbmUgTUFYX0VWT1BUX0xFTgkoTUFYX0VWRU5UX0xFTkdUSCAqIDIgKyAyICsgMTI4KQorc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0CitwYXJzZV9zdWJzeXN0ZW1fdHJhY2Vwb2ludF9ldmVudChjaGFyICpzeXNfbmFtZSwgY2hhciAqZmxhZ3MpCit7CisJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKKwlzdHJ1Y3QgZGlyZW50ICpldnRfZW50OworCURJUiAqZXZ0X2RpcjsKKworCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvJXMiLCBkZWJ1Z2ZzX3BhdGgsIHN5c19uYW1lKTsKKwlldnRfZGlyID0gb3BlbmRpcihldnRfcGF0aCk7CisKKwlpZiAoIWV2dF9kaXIpIHsKKwkJcGVycm9yKCJDYW4ndCBvcGVuIGV2ZW50IGRpciIpOworCQlyZXR1cm4gRVZUX0ZBSUxFRDsKKwl9CisKKwl3aGlsZSAoKGV2dF9lbnQgPSByZWFkZGlyKGV2dF9kaXIpKSkgeworCQljaGFyIGV2ZW50X29wdFtNQVhfRVZPUFRfTEVOICsgMV07CisJCWludCBsZW47CisJCXVuc2lnbmVkIGludCByZW0gPSBNQVhfRVZPUFRfTEVOOworCisJCWlmICghc3RyY21wKGV2dF9lbnQtPmRfbmFtZSwgIi4iKQorCQkgICAgfHwgIXN0cmNtcChldnRfZW50LT5kX25hbWUsICIuLiIpCisJCSAgICB8fCAhc3RyY21wKGV2dF9lbnQtPmRfbmFtZSwgImVuYWJsZSIpCisJCSAgICB8fCAhc3RyY21wKGV2dF9lbnQtPmRfbmFtZSwgImZpbHRlciIpKQorCQkJY29udGludWU7CisKKwkJbGVuID0gc25wcmludGYoZXZlbnRfb3B0LCBNQVhfRVZPUFRfTEVOLCAiJXM6JXMiLCBzeXNfbmFtZSwKKwkJCSAgICAgICBldnRfZW50LT5kX25hbWUpOworCQlpZiAobGVuIDwgMCkKKwkJCXJldHVybiBFVlRfRkFJTEVEOworCisJCXJlbSAtPSBsZW47CisJCWlmIChmbGFncykgeworCQkJaWYgKHJlbSA8IHN0cmxlbihmbGFncykgKyAxKQorCQkJCXJldHVybiBFVlRfRkFJTEVEOworCisJCQlzdHJjYXQoZXZlbnRfb3B0LCAiOiIpOworCQkJc3RyY2F0KGV2ZW50X29wdCwgZmxhZ3MpOworCQl9CisKKwkJaWYgKHBhcnNlX2V2ZW50cyhOVUxMLCBldmVudF9vcHQsIDApKQorCQkJcmV0dXJuIEVWVF9GQUlMRUQ7CisJfQorCisJcmV0dXJuIEVWVF9IQU5ETEVEX0FMTDsKK30KKworCitzdGF0aWMgZW51bSBldmVudF9yZXN1bHQgcGFyc2VfdHJhY2Vwb2ludF9ldmVudChjb25zdCBjaGFyICoqc3RycCwKKwkJCQkgICAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKIAljb25zdCBjaGFyICpldnRfbmFtZTsKIAljaGFyICpmbGFnczsKIAljaGFyIHN5c19uYW1lW01BWF9FVkVOVF9MRU5HVEhdOwotCWNoYXIgaWRfYnVmWzRdOwotCWludCBmZDsKIAl1bnNpZ25lZCBpbnQgc3lzX2xlbmd0aCwgZXZ0X2xlbmd0aDsKLQl1NjQgaWQ7Ci0JY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKIAogCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCiAJCXJldHVybiAwOwogCiAJZXZ0X25hbWUgPSBzdHJjaHIoKnN0cnAsICc6Jyk7CiAJaWYgKCFldnRfbmFtZSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBFVlRfRkFJTEVEOwogCiAJc3lzX2xlbmd0aCA9IGV2dF9uYW1lIC0gKnN0cnA7CiAJaWYgKHN5c19sZW5ndGggPj0gTUFYX0VWRU5UX0xFTkdUSCkKQEAgLTQzNCwzMiArNTI5LDIyIEBACiAKIAlmbGFncyA9IHN0cmNocihldnRfbmFtZSwgJzonKTsKIAlpZiAoZmxhZ3MpIHsKLQkJKmZsYWdzID0gJ1wwJzsKKwkJLyogc3BsaXQgaXQgb3V0OiAqLworCQlldnRfbmFtZSA9IHN0cm5kdXAoZXZ0X25hbWUsIGZsYWdzIC0gZXZ0X25hbWUpOwogCQlmbGFncysrOwotCQlpZiAoIXN0cm5jbXAoZmxhZ3MsICJyZWNvcmQiLCBzdHJsZW4oZmxhZ3MpKSkKLQkJCWF0dHItPnNhbXBsZV90eXBlIHw9IFBFUkZfU0FNUExFX1JBVzsKIAl9CiAKIAlldnRfbGVuZ3RoID0gc3RybGVuKGV2dF9uYW1lKTsKIAlpZiAoZXZ0X2xlbmd0aCA+PSBNQVhfRVZFTlRfTEVOR1RIKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIEVWVF9GQUlMRUQ7CiAKLQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzLyVzL2lkIiwgZGVidWdmc19wYXRoLAotCQkgc3lzX25hbWUsIGV2dF9uYW1lKTsKLQlmZCA9IG9wZW4oZXZ0X3BhdGgsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChyZWFkKGZkLCBpZF9idWYsIHNpemVvZihpZF9idWYpKSA8IDApIHsKLQkJY2xvc2UoZmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2xvc2UoZmQpOwotCWlkID0gYXRvbGwoaWRfYnVmKTsKLQlhdHRyLT5jb25maWcgPSBpZDsKLQlhdHRyLT50eXBlID0gUEVSRl9UWVBFX1RSQUNFUE9JTlQ7Ci0JKnN0cnAgPSBldnRfbmFtZSArIGV2dF9sZW5ndGg7Ci0JcmV0dXJuIDE7CisJaWYgKCFzdHJjbXAoZXZ0X25hbWUsICIqIikpIHsKKwkJKnN0cnAgPSBldnRfbmFtZSArIGV2dF9sZW5ndGg7CisJCXJldHVybiBwYXJzZV9zdWJzeXN0ZW1fdHJhY2Vwb2ludF9ldmVudChzeXNfbmFtZSwgZmxhZ3MpOworCX0gZWxzZQorCQlyZXR1cm4gcGFyc2Vfc2luZ2xlX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGV2dF9uYW1lLAorCQkJCQkJICAgICBldnRfbGVuZ3RoLCBmbGFncywKKwkJCQkJCSAgICAgYXR0ciwgc3RycCk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfZXZlbnRzKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGkpCkBAIC00NzcsOCArNTYyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcGFyc2Vfc3ltYm9saWNfZXZlbnQoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cikKK3N0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAorcGFyc2Vfc3ltYm9saWNfZXZlbnQoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJY29uc3QgY2hhciAqc3RyID0gKnN0cnA7CiAJdW5zaWduZWQgaW50IGk7CkBAIC00OTAsMzIgKzU3NSwzMyBAQAogCQkJYXR0ci0+dHlwZSA9IGV2ZW50X3N5bWJvbHNbaV0udHlwZTsKIAkJCWF0dHItPmNvbmZpZyA9IGV2ZW50X3N5bWJvbHNbaV0uY29uZmlnOwogCQkJKnN0cnAgPSBzdHIgKyBuOwotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gRVZUX0hBTkRMRUQ7CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIEVWVF9GQUlMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfcmF3X2V2ZW50KGNvbnN0IGNoYXIgKipzdHJwLCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIpCitzdGF0aWMgZW51bSBldmVudF9yZXN1bHQKK3BhcnNlX3Jhd19ldmVudChjb25zdCBjaGFyICoqc3RycCwgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKIAljb25zdCBjaGFyICpzdHIgPSAqc3RycDsKIAl1NjQgY29uZmlnOwogCWludCBuOwogCiAJaWYgKCpzdHIgIT0gJ3InKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIEVWVF9GQUlMRUQ7CiAJbiA9IGhleDJ1NjQoc3RyICsgMSwgJmNvbmZpZyk7CiAJaWYgKG4gPiAwKSB7CiAJCSpzdHJwID0gc3RyICsgbiArIDE7CiAJCWF0dHItPnR5cGUgPSBQRVJGX1RZUEVfUkFXOwogCQlhdHRyLT5jb25maWcgPSBjb25maWc7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gRVZUX0hBTkRMRUQ7CiAJfQotCXJldHVybiAwOworCXJldHVybiBFVlRfRkFJTEVEOwogfQogCi1zdGF0aWMgaW50Ci1wYXJzZV9udW1lcmljX2V2ZW50KGNvbnN0IGNoYXIgKipzdHJwLCBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIpCitzdGF0aWMgZW51bSBldmVudF9yZXN1bHQKK3BhcnNlX251bWVyaWNfZXZlbnQoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJY29uc3QgY2hhciAqc3RyID0gKnN0cnA7CiAJY2hhciAqZW5kcDsKQEAgLTUzMCwxNCArNjE2LDE0IEBACiAJCQlhdHRyLT50eXBlID0gdHlwZTsKIAkJCWF0dHItPmNvbmZpZyA9IGNvbmZpZzsKIAkJCSpzdHJwID0gZW5kcDsKLQkJCXJldHVybiAxOworCQkJcmV0dXJuIEVWVF9IQU5ETEVEOwogCQl9CiAJfQotCXJldHVybiAwOworCXJldHVybiBFVlRfRkFJTEVEOwogfQogCi1zdGF0aWMgaW50Ci1wYXJzZV9ldmVudF9tb2RpZmllcihjb25zdCBjaGFyICoqc3RycCwgc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICphdHRyKQorc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0CitwYXJzZV9ldmVudF9tb2RpZmllcihjb25zdCBjaGFyICoqc3RycCwgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKIAljb25zdCBjaGFyICpzdHIgPSAqc3RycDsKIAlpbnQgZXUgPSAxLCBlayA9IDEsIGVoID0gMTsKQEAgLTU2OSwzNyArNjU1LDg0IEBACiAgKiBFYWNoIGV2ZW50IGNhbiBoYXZlIG11bHRpcGxlIHN5bWJvbGljIG5hbWVzLgogICogU3ltYm9saWMgbmFtZXMgYXJlIChhbG1vc3QpIGV4YWN0bHkgbWF0Y2hlZC4KICAqLwotc3RhdGljIGludCBwYXJzZV9ldmVudF9zeW1ib2xzKGNvbnN0IGNoYXIgKipzdHIsIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cikKK3N0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAorcGFyc2VfZXZlbnRfc3ltYm9scyhjb25zdCBjaGFyICoqc3RyLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewotCWlmICghKHBhcnNlX3RyYWNlcG9pbnRfZXZlbnQoc3RyLCBhdHRyKSB8fAotCSAgICAgIHBhcnNlX3Jhd19ldmVudChzdHIsIGF0dHIpIHx8Ci0JICAgICAgcGFyc2VfbnVtZXJpY19ldmVudChzdHIsIGF0dHIpIHx8Ci0JICAgICAgcGFyc2Vfc3ltYm9saWNfZXZlbnQoc3RyLCBhdHRyKSB8fAotCSAgICAgIHBhcnNlX2dlbmVyaWNfaHdfZXZlbnQoc3RyLCBhdHRyKSkpCi0JCXJldHVybiAwOworCWVudW0gZXZlbnRfcmVzdWx0IHJldDsKIAorCXJldCA9IHBhcnNlX3RyYWNlcG9pbnRfZXZlbnQoc3RyLCBhdHRyKTsKKwlpZiAocmV0ICE9IEVWVF9GQUlMRUQpCisJCWdvdG8gbW9kaWZpZXI7CisKKwlyZXQgPSBwYXJzZV9yYXdfZXZlbnQoc3RyLCBhdHRyKTsKKwlpZiAocmV0ICE9IEVWVF9GQUlMRUQpCisJCWdvdG8gbW9kaWZpZXI7CisKKwlyZXQgPSBwYXJzZV9udW1lcmljX2V2ZW50KHN0ciwgYXR0cik7CisJaWYgKHJldCAhPSBFVlRfRkFJTEVEKQorCQlnb3RvIG1vZGlmaWVyOworCisJcmV0ID0gcGFyc2Vfc3ltYm9saWNfZXZlbnQoc3RyLCBhdHRyKTsKKwlpZiAocmV0ICE9IEVWVF9GQUlMRUQpCisJCWdvdG8gbW9kaWZpZXI7CisKKwlyZXQgPSBwYXJzZV9nZW5lcmljX2h3X2V2ZW50KHN0ciwgYXR0cik7CisJaWYgKHJldCAhPSBFVlRfRkFJTEVEKQorCQlnb3RvIG1vZGlmaWVyOworCisJcmV0dXJuIEVWVF9GQUlMRUQ7CisKK21vZGlmaWVyOgogCXBhcnNlX2V2ZW50X21vZGlmaWVyKHN0ciwgYXR0cik7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBzdG9yZV9ldmVudF90eXBlKGNvbnN0IGNoYXIgKm9yZ25hbWUpCit7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF0sICpjOworCUZJTEUgKmZpbGU7CisJaW50IGlkOworCisJc3ByaW50ZihmaWxlbmFtZSwgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyVzL2lkIiwgb3JnbmFtZSk7CisJYyA9IHN0cmNocihmaWxlbmFtZSwgJzonKTsKKwlpZiAoYykKKwkJKmMgPSAnLyc7CisKKwlmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKCFmaWxlKQorCQlyZXR1cm47CisJaWYgKGZzY2FuZihmaWxlLCAiJWkiLCAmaWQpIDwgMSkKKwkJZGllKCJjYW5ub3Qgc3RvcmUgZXZlbnQgSUQiKTsKKwlmY2xvc2UoZmlsZSk7CisJcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQoaWQsIG9yZ25hbWUpOworfQorCisKIGludCBwYXJzZV9ldmVudHMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQogewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciBhdHRyOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKwllbnVtIGV2ZW50X3Jlc3VsdCByZXQ7CisKKwlpZiAoc3RyY2hyKHN0ciwgJzonKSkKKwkJc3RvcmVfZXZlbnRfdHlwZShzdHIpOwogCiAJZm9yICg7OykgewogCQlpZiAobnJfY291bnRlcnMgPT0gTUFYX0NPVU5URVJTKQogCQkJcmV0dXJuIC0xOwogCiAJCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKLQkJaWYgKCFwYXJzZV9ldmVudF9zeW1ib2xzKCZzdHIsICZhdHRyKSkKKwkJcmV0ID0gcGFyc2VfZXZlbnRfc3ltYm9scygmc3RyLCAmYXR0cik7CisJCWlmIChyZXQgPT0gRVZUX0ZBSUxFRCkKIAkJCXJldHVybiAtMTsKIAogCQlpZiAoISgqc3RyID09IDAgfHwgKnN0ciA9PSAnLCcgfHwgaXNzcGFjZSgqc3RyKSkpCiAJCQlyZXR1cm4gLTE7CiAKLQkJYXR0cnNbbnJfY291bnRlcnNdID0gYXR0cjsKLQkJbnJfY291bnRlcnMrKzsKKwkJaWYgKHJldCAhPSBFVlRfSEFORExFRF9BTEwpIHsKKwkJCWF0dHJzW25yX2NvdW50ZXJzXSA9IGF0dHI7CisJCQlucl9jb3VudGVycysrOworCQl9CiAKIAkJaWYgKCpzdHIgPT0gMCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCmluZGV4IDYwNzA0YzEuLjMwYzYwODEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogZXh0ZXJuIGludAkJCW5yX2NvdW50ZXJzOwogCi1leHRlcm4gc3RydWN0IHBlcmZfY291bnRlcl9hdHRyIGF0dHJzW01BWF9DT1VOVEVSU107CitleHRlcm4gc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyc1tNQVhfQ09VTlRFUlNdOwogCiBleHRlcm4gY29uc3QgY2hhciAqZXZlbnRfbmFtZShpbnQgY3RyKTsKIGV4dGVybiBjb25zdCBjaGFyICpfX2V2ZW50X25hbWUoaW50IHR5cGUsIHU2NCBjb25maWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmgKaW5kZXggOGFhMzQ2NC4uMmVlMjQ4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oCkBAIC0xMDQsNiArMTA0LDggQEAKIAl7IC50eXBlID0gT1BUSU9OX0NBTExCQUNLLCAuc2hvcnRfbmFtZSA9IChzKSwgLmxvbmdfbmFtZSA9IChsKSwgLnZhbHVlID0gKHYpLCAuYXJnaCA9ICJ0aW1lIiwgLmhlbHAgPSAoaCksIC5jYWxsYmFjayA9IHBhcnNlX29wdF9hcHByb3hpZGF0ZV9jYiB9CiAjZGVmaW5lIE9QVF9DQUxMQkFDSyhzLCBsLCB2LCBhLCBoLCBmKSBcCiAJeyAudHlwZSA9IE9QVElPTl9DQUxMQkFDSywgLnNob3J0X25hbWUgPSAocyksIC5sb25nX25hbWUgPSAobCksIC52YWx1ZSA9ICh2KSwgKGEpLCAuaGVscCA9IChoKSwgLmNhbGxiYWNrID0gKGYpIH0KKyNkZWZpbmUgT1BUX0NBTExCQUNLX05PT1BUKHMsIGwsIHYsIGEsIGgsIGYpIFwKKwl7IC50eXBlID0gT1BUSU9OX0NBTExCQUNLLCAuc2hvcnRfbmFtZSA9IChzKSwgLmxvbmdfbmFtZSA9IChsKSwgLnZhbHVlID0gKHYpLCAoYSksIC5oZWxwID0gKGgpLCAuY2FsbGJhY2sgPSAoZiksIC5mbGFncyA9IFBBUlNFX09QVF9OT0FSRyB9CiAjZGVmaW5lIE9QVF9DQUxMQkFDS19ERUZBVUxUKHMsIGwsIHYsIGEsIGgsIGYsIGQpIFwKIAl7IC50eXBlID0gT1BUSU9OX0NBTExCQUNLLCAuc2hvcnRfbmFtZSA9IChzKSwgLmxvbmdfbmFtZSA9IChsKSwgLnZhbHVlID0gKHYpLCAoYSksIC5oZWxwID0gKGgpLCAuY2FsbGJhY2sgPSAoZiksIC5kZWZ2YWwgPSAoaW50cHRyX3QpZCwgLmZsYWdzID0gUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzc4ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCkBAIC0wLDAgKzEsNDg4IEBACisvKgorICogc3ZnaGVscGVyLmMgLSBoZWxwZXIgZnVuY3Rpb25zIGZvciBvdXRwdXR0aW5nIHN2ZworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW5AbGludXguaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInN2Z2hlbHBlci5oIgorCitzdGF0aWMgdTY0IGZpcnN0X3RpbWUsIGxhc3RfdGltZTsKK3N0YXRpYyB1NjQgdHVyYm9fZnJlcXVlbmN5LCBtYXhfZnJlcTsKKworCisjZGVmaW5lIFNMT1RfTVVMVCAzMC4wCisjZGVmaW5lIFNMT1RfSEVJR0hUIDI1LjAKKworaW50IHN2Z19wYWdlX3dpZHRoID0gMTAwMDsKKworI2RlZmluZSBNSU5fVEVYVF9TSVpFIDAuMDAxCisKK3N0YXRpYyB1NjQgdG90YWxfaGVpZ2h0Oworc3RhdGljIEZJTEUgKnN2Z2ZpbGU7CisKK3N0YXRpYyBkb3VibGUgY3B1MnNsb3QoaW50IGNwdSkKK3sKKwlyZXR1cm4gMiAqIGNwdSArIDE7Cit9CisKK3N0YXRpYyBkb3VibGUgY3B1MnkoaW50IGNwdSkKK3sKKwlyZXR1cm4gY3B1MnNsb3QoY3B1KSAqIFNMT1RfTVVMVDsKK30KKworc3RhdGljIGRvdWJsZSB0aW1lMnBpeGVscyh1NjQgdGltZSkKK3sKKwlkb3VibGUgWDsKKworCVggPSAxLjAgKiBzdmdfcGFnZV93aWR0aCAqICh0aW1lIC0gZmlyc3RfdGltZSkgLyAobGFzdF90aW1lIC0gZmlyc3RfdGltZSk7CisJcmV0dXJuIFg7Cit9CisKKy8qCisgKiBSb3VuZCB0ZXh0IHNpemVzIHNvIHRoYXQgdGhlIHN2ZyB2aWV3ZXIgb25seSBuZWVkcyBhIGRpc2NyZXRlCisgKiBudW1iZXIgb2YgcmVuZGVyaW5ncyBvZiB0aGUgZm9udAorICovCitzdGF0aWMgZG91YmxlIHJvdW5kX3RleHRfc2l6ZShkb3VibGUgc2l6ZSkKK3sKKwlpbnQgbG9vcCA9IDEwMDsKKwlkb3VibGUgdGFyZ2V0ID0gMTAuMDsKKworCWlmIChzaXplID49IDEwLjApCisJCXJldHVybiBzaXplOworCXdoaWxlIChsb29wLS0pIHsKKwkJaWYgKHNpemUgPj0gdGFyZ2V0KQorCQkJcmV0dXJuIHRhcmdldDsKKwkJdGFyZ2V0ID0gdGFyZ2V0IC8gMi4wOworCX0KKwlyZXR1cm4gc2l6ZTsKK30KKwordm9pZCBvcGVuX3N2Zyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGNwdXMsIGludCByb3dzLCB1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJaW50IG5ld193aWR0aDsKKworCXN2Z2ZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKwlpZiAoIXN2Z2ZpbGUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb3BlbiAlcyBmb3Igb3V0cHV0XG4iLCBmaWxlbmFtZSk7CisJCXJldHVybjsKKwl9CisJZmlyc3RfdGltZSA9IHN0YXJ0OworCWZpcnN0X3RpbWUgPSBmaXJzdF90aW1lIC8gMTAwMDAwMDAwICogMTAwMDAwMDAwOworCWxhc3RfdGltZSA9IGVuZDsKKworCS8qCisJICogaWYgdGhlIHJlY29yZGluZyBpcyBzaG9ydCwgd2UgZGVmYXVsdCB0byBhIHdpZHRoIG9mIDEwMDAsIGJ1dAorCSAqIGZvciBsb25nZXIgcmVjb3JkaW5ncyB3ZSB3YW50IGF0IGxlYXN0IDIwMCB1bml0cyBvZiB3aWR0aCBwZXIgc2Vjb25kCisJICovCisJbmV3X3dpZHRoID0gKGxhc3RfdGltZSAtIGZpcnN0X3RpbWUpIC8gNTAwMDAwMDsKKworCWlmIChuZXdfd2lkdGggPiBzdmdfcGFnZV93aWR0aCkKKwkJc3ZnX3BhZ2Vfd2lkdGggPSBuZXdfd2lkdGg7CisKKwl0b3RhbF9oZWlnaHQgPSAoMSArIHJvd3MgKyBjcHUyc2xvdChjcHVzKSkgKiBTTE9UX01VTFQ7CisJZnByaW50ZihzdmdmaWxlLCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJub1wiPz4gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8c3ZnIHdpZHRoPVwiJWlcIiBoZWlnaHQ9XCIlbGx1XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiIsIHN2Z19wYWdlX3dpZHRoLCB0b3RhbF9oZWlnaHQpOworCisJZnByaW50ZihzdmdmaWxlLCAiPGRlZnM+XG4gIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICA8IVtDREFUQVtcbiIpOworCisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdCAgICAgICAgICB7IHN0cm9rZS13aWR0aDogMTsgfVxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wcm9jZXNzICB7IGZpbGw6cmdiKDE4MCwxODAsMTgwKTsgZmlsbC1vcGFjaXR5OjAuOTsgc3Ryb2tlLXdpZHRoOjE7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnByb2Nlc3MyIHsgZmlsbDpyZ2IoMTgwLDE4MCwxODApOyBmaWxsLW9wYWNpdHk6MC45OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3Quc2FtcGxlICAgeyBmaWxsOnJnYiggIDAsICAwLDI1NSk7IGZpbGwtb3BhY2l0eTowLjg7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5ibG9ja2VkICB7IGZpbGw6cmdiKDI1NSwgIDAsICAwKTsgZmlsbC1vcGFjaXR5OjAuNTsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LndhaXRpbmcgIHsgZmlsbDpyZ2IoMjE0LDIxNCwgIDApOyBmaWxsLW9wYWNpdHk6MC4zOyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuV0FJVElORyAgeyBmaWxsOnJnYigyNTUsMjE0LCA0OCk7IGZpbGwtb3BhY2l0eTowLjY7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jcHUgICAgICB7IGZpbGw6cmdiKDE5MiwxOTIsMTkyKTsgZmlsbC1vcGFjaXR5OjAuMjsgc3Ryb2tlLXdpZHRoOjAuNTsgc3Ryb2tlOnJnYigxMjgsMTI4LDEyOCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnBzdGF0ZSAgIHsgZmlsbDpyZ2IoMTI4LDEyOCwxMjgpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYzEgICAgICAgeyBmaWxsOnJnYigyNTUsMjE0LDIxNCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jMiAgICAgICB7IGZpbGw6cmdiKDI1NSwxNzIsMTcyKTsgZmlsbC1vcGFjaXR5OjAuNTsgc3Ryb2tlLXdpZHRoOjA7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LmMzICAgICAgIHsgZmlsbDpyZ2IoMjU1LDEzMCwxMzApOyBmaWxsLW9wYWNpdHk6MC41OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYzQgICAgICAgeyBmaWxsOnJnYigyNTUsIDg4LCA4OCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyB9IFxuIik7CisJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jNSAgICAgICB7IGZpbGw6cmdiKDI1NSwgNDQsIDQ0KTsgZmlsbC1vcGFjaXR5OjAuNTsgc3Ryb2tlLXdpZHRoOjA7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LmM2ICAgICAgIHsgZmlsbDpyZ2IoMjU1LCAgMCwgIDApOyBmaWxsLW9wYWNpdHk6MC41OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOworCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIGxpbmUucHN0YXRlICAgeyBzdHJva2U6cmdiKDI1NSwyNTUsICAwKTsgc3Ryb2tlLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MjsgfSBcbiIpOworCisJZnByaW50ZihzdmdmaWxlLCAiICAgIF1dPlxuICAgPC9zdHlsZT5cbjwvZGVmcz5cbiIpOworfQorCit2b2lkIHN2Z19ib3goaW50IFlzbG90LCB1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUpCit7CisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8cmVjdCB4PVwiJTQuOGZcIiB3aWR0aD1cIiU0LjhmXCIgeT1cIiU0LjFmXCIgaGVpZ2h0PVwiJTQuMWZcIiBjbGFzcz1cIiVzXCIvPlxuIiwKKwkJdGltZTJwaXhlbHMoc3RhcnQpLCB0aW1lMnBpeGVscyhlbmQpLXRpbWUycGl4ZWxzKHN0YXJ0KSwgWXNsb3QgKiBTTE9UX01VTFQsIFNMT1RfSEVJR0hULCB0eXBlKTsKK30KKwordm9pZCBzdmdfc2FtcGxlKGludCBZc2xvdCwgaW50IGNwdSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWRvdWJsZSB0ZXh0X3NpemU7CisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8cmVjdCB4PVwiJTQuOGZcIiB3aWR0aD1cIiU0LjhmXCIgeT1cIiU0LjFmXCIgaGVpZ2h0PVwiJTQuMWZcIiBjbGFzcz1cInNhbXBsZVwiLz5cbiIsCisJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgdGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCksIFlzbG90ICogU0xPVF9NVUxULCBTTE9UX0hFSUdIVCk7CisKKwl0ZXh0X3NpemUgPSAodGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCkpOworCWlmIChjcHUgPiA5KQorCQl0ZXh0X3NpemUgPSB0ZXh0X3NpemUvMjsKKwlpZiAodGV4dF9zaXplID4gMS4yNSkKKwkJdGV4dF9zaXplID0gMS4yNTsKKwl0ZXh0X3NpemUgPSByb3VuZF90ZXh0X3NpemUodGV4dF9zaXplKTsKKworCWlmICh0ZXh0X3NpemUgPiBNSU5fVEVYVF9TSVpFKQorCQlmcHJpbnRmKHN2Z2ZpbGUsICI8dGV4dCB4PVwiJTEuOGZcIiB5PVwiJTEuOGZcIiBmb250LXNpemU9XCIlMS44ZnB0XCI+JWk8L3RleHQ+XG4iLAorCQkJdGltZTJwaXhlbHMoc3RhcnQpLCBZc2xvdCAqICBTTE9UX01VTFQgKyBTTE9UX0hFSUdIVCAtIDEsIHRleHRfc2l6ZSwgIGNwdSArIDEpOworCit9CisKK3N0YXRpYyBjaGFyICp0aW1lX3RvX3N0cmluZyh1NjQgZHVyYXRpb24pCit7CisJc3RhdGljIGNoYXIgdGV4dFs4MF07CisKKwl0ZXh0WzBdID0gMDsKKworCWlmIChkdXJhdGlvbiA8IDEwMDApIC8qIGxlc3MgdGhhbiAxIHVzZWMgKi8KKwkJcmV0dXJuIHRleHQ7CisKKwlpZiAoZHVyYXRpb24gPCAxMDAwICogMTAwMCkgeyAvKiBsZXNzIHRoYW4gMSBtc2VjICovCisJCXNwcmludGYodGV4dCwgIiU0LjFmIHVzIiwgZHVyYXRpb24gLyAxMDAwLjApOworCQlyZXR1cm4gdGV4dDsKKwl9CisJc3ByaW50Zih0ZXh0LCAiJTQuMWYgbXMiLCBkdXJhdGlvbiAvIDEwMDAuMCAvIDEwMDApOworCisJcmV0dXJuIHRleHQ7Cit9CisKK3ZvaWQgc3ZnX3dhaXRpbmcoaW50IFlzbG90LCB1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJY2hhciAqdGV4dDsKKwljb25zdCBjaGFyICpzdHlsZTsKKwlkb3VibGUgZm9udF9zaXplOworCisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwlzdHlsZSA9ICJ3YWl0aW5nIjsKKworCWlmIChlbmQtc3RhcnQgPiAxMCAqIDEwMDAwMDApIC8qIDEwIG1zZWMgKi8KKwkJc3R5bGUgPSAiV0FJVElORyI7CisKKwl0ZXh0ID0gdGltZV90b19zdHJpbmcoZW5kLXN0YXJ0KTsKKworCWZvbnRfc2l6ZSA9IDEuMCAqICh0aW1lMnBpeGVscyhlbmQpLXRpbWUycGl4ZWxzKHN0YXJ0KSk7CisKKwlpZiAoZm9udF9zaXplID4gMykKKwkJZm9udF9zaXplID0gMzsKKworCWZvbnRfc2l6ZSA9IHJvdW5kX3RleHRfc2l6ZShmb250X3NpemUpOworCisJZnByaW50ZihzdmdmaWxlLCAiPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCU0LjhmLCU0LjhmKVwiPlxuIiwgdGltZTJwaXhlbHMoc3RhcnQpLCBZc2xvdCAqIFNMT1RfTVVMVCk7CisJZnByaW50ZihzdmdmaWxlLCAiPHJlY3QgeD1cIjBcIiB3aWR0aD1cIiU0LjhmXCIgeT1cIjBcIiBoZWlnaHQ9XCIlNC4xZlwiIGNsYXNzPVwiJXNcIi8+XG4iLAorCQl0aW1lMnBpeGVscyhlbmQpLXRpbWUycGl4ZWxzKHN0YXJ0KSwgU0xPVF9IRUlHSFQsIHN0eWxlKTsKKwlpZiAoZm9udF9zaXplID4gTUlOX1RFWFRfU0laRSkKKwkJZnByaW50ZihzdmdmaWxlLCAiPHRleHQgdHJhbnNmb3JtPVwicm90YXRlKDkwKVwiIGZvbnQtc2l6ZT1cIiUxLjhmcHRcIj4gJXM8L3RleHQ+XG4iLAorCQkJZm9udF9zaXplLCB0ZXh0KTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8L2c+XG4iKTsKK30KKworc3RhdGljIGNoYXIgKmNwdV9tb2RlbCh2b2lkKQoreworCXN0YXRpYyBjaGFyIGNwdV9tWzI1NV07CisJY2hhciBidWZbMjU2XTsKKwlGSUxFICpmaWxlOworCisJY3B1X21bMF0gPSAwOworCS8qIENQVSB0eXBlICovCisJZmlsZSA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwgInIiKTsKKwlpZiAoZmlsZSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCAyNTUsIGZpbGUpKSB7CisJCQlpZiAoc3Ryc3RyKGJ1ZiwgIm1vZGVsIG5hbWUiKSkgeworCQkJCXN0cm5jcHkoY3B1X20sICZidWZbMTNdLCAyNTUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWZjbG9zZShmaWxlKTsKKwl9CisJcmV0dXJuIGNwdV9tOworfQorCit2b2lkIHN2Z19jcHVfYm94KGludCBjcHUsIHU2NCBfX21heF9mcmVxLCB1NjQgX190dXJib19mcmVxKQoreworCWNoYXIgY3B1X3N0cmluZ1s4MF07CisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwltYXhfZnJlcSA9IF9fbWF4X2ZyZXE7CisJdHVyYm9fZnJlcXVlbmN5ID0gX190dXJib19mcmVxOworCisJZnByaW50ZihzdmdmaWxlLCAiPHJlY3QgeD1cIiU0LjhmXCIgd2lkdGg9XCIlNC44ZlwiIHk9XCIlNC4xZlwiIGhlaWdodD1cIiU0LjFmXCIgY2xhc3M9XCJjcHVcIi8+XG4iLAorCQl0aW1lMnBpeGVscyhmaXJzdF90aW1lKSwKKwkJdGltZTJwaXhlbHMobGFzdF90aW1lKS10aW1lMnBpeGVscyhmaXJzdF90aW1lKSwKKwkJY3B1MnkoY3B1KSwgU0xPVF9NVUxUK1NMT1RfSEVJR0hUKTsKKworCXNwcmludGYoY3B1X3N0cmluZywgIkNQVSAlaSIsIChpbnQpY3B1KzEpOworCWZwcmludGYoc3ZnZmlsZSwgIjx0ZXh0IHg9XCIlNC44ZlwiIHk9XCIlNC44ZlwiPiVzPC90ZXh0PlxuIiwKKwkJMTArdGltZTJwaXhlbHMoZmlyc3RfdGltZSksIGNwdTJ5KGNwdSkgKyBTTE9UX0hFSUdIVC8yLCBjcHVfc3RyaW5nKTsKKworCWZwcmludGYoc3ZnZmlsZSwgIjx0ZXh0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSglNC44ZiwlNC44ZilcIiBmb250LXNpemU9XCIxLjI1cHRcIj4lczwvdGV4dD5cbiIsCisJCTEwK3RpbWUycGl4ZWxzKGZpcnN0X3RpbWUpLCBjcHUyeShjcHUpICsgU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQgLSA0LCBjcHVfbW9kZWwoKSk7Cit9CisKK3ZvaWQgc3ZnX3Byb2Nlc3MoaW50IGNwdSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWRvdWJsZSB3aWR0aDsKKworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJTQuOGYsJTQuOGYpXCI+XG4iLCB0aW1lMnBpeGVscyhzdGFydCksIGNwdTJ5KGNwdSkpOworCWZwcmludGYoc3ZnZmlsZSwgIjxyZWN0IHg9XCIwXCIgd2lkdGg9XCIlNC44ZlwiIHk9XCIwXCIgaGVpZ2h0PVwiJTQuMWZcIiBjbGFzcz1cIiVzXCIvPlxuIiwKKwkJdGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCksIFNMT1RfTVVMVCtTTE9UX0hFSUdIVCwgdHlwZSk7CisJd2lkdGggPSB0aW1lMnBpeGVscyhlbmQpLXRpbWUycGl4ZWxzKHN0YXJ0KTsKKwlpZiAod2lkdGggPiA2KQorCQl3aWR0aCA9IDY7CisKKwl3aWR0aCA9IHJvdW5kX3RleHRfc2l6ZSh3aWR0aCk7CisKKwlpZiAod2lkdGggPiBNSU5fVEVYVF9TSVpFKQorCQlmcHJpbnRmKHN2Z2ZpbGUsICI8dGV4dCB0cmFuc2Zvcm09XCJyb3RhdGUoOTApXCIgZm9udC1zaXplPVwiJTMuOGZwdFwiPiVzPC90ZXh0PlxuIiwKKwkJCXdpZHRoLCBuYW1lKTsKKworCWZwcmludGYoc3ZnZmlsZSwgIjwvZz5cbiIpOworfQorCit2b2lkIHN2Z19jc3RhdGUoaW50IGNwdSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBpbnQgdHlwZSkKK3sKKwlkb3VibGUgd2lkdGg7CisJY2hhciBzdHlsZVsxMjhdOworCisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKworCWlmICh0eXBlID4gNikKKwkJdHlwZSA9IDY7CisJc3ByaW50ZihzdHlsZSwgImMlaSIsIHR5cGUpOworCisJZnByaW50ZihzdmdmaWxlLCAiPHJlY3QgY2xhc3M9XCIlc1wiIHg9XCIlNC44ZlwiIHdpZHRoPVwiJTQuOGZcIiB5PVwiJTQuMWZcIiBoZWlnaHQ9XCIlNC4xZlwiLz5cbiIsCisJCXN0eWxlLAorCQl0aW1lMnBpeGVscyhzdGFydCksIHRpbWUycGl4ZWxzKGVuZCktdGltZTJwaXhlbHMoc3RhcnQpLAorCQljcHUyeShjcHUpLCBTTE9UX01VTFQrU0xPVF9IRUlHSFQpOworCisJd2lkdGggPSAodGltZTJwaXhlbHMoZW5kKS10aW1lMnBpeGVscyhzdGFydCkpLzIuMDsKKwlpZiAod2lkdGggPiA2KQorCQl3aWR0aCA9IDY7CisKKwl3aWR0aCA9IHJvdW5kX3RleHRfc2l6ZSh3aWR0aCk7CisKKwlpZiAod2lkdGggPiBNSU5fVEVYVF9TSVpFKQorCQlmcHJpbnRmKHN2Z2ZpbGUsICI8dGV4dCB4PVwiJTQuOGZcIiB5PVwiJTQuOGZcIiBmb250LXNpemU9XCIlMy44ZnB0XCI+QyVpPC90ZXh0PlxuIiwKKwkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgY3B1MnkoY3B1KSt3aWR0aCwgd2lkdGgsIHR5cGUpOworfQorCitzdGF0aWMgY2hhciAqSHpUb0h1bWFuKHVuc2lnbmVkIGxvbmcgaHopCit7CisJc3RhdGljIGNoYXIgYnVmZmVyWzEwMjRdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBIejsKKworCW1lbXNldChidWZmZXIsIDAsIDEwMjQpOworCisJSHogPSBoejsKKworCS8qIGRlZmF1bHQ6IGp1c3QgcHV0IHRoZSBOdW1iZXIgaW4gKi8KKwlzcHJpbnRmKGJ1ZmZlciwgIiU5bGxpIiwgSHopOworCisJaWYgKEh6ID4gMTAwMCkKKwkJc3ByaW50ZihidWZmZXIsICIgJTZsbGkgTWh6IiwgKEh6KzUwMCkvMTAwMCk7CisKKwlpZiAoSHogPiAxNTAwMDAwKQorCQlzcHJpbnRmKGJ1ZmZlciwgIiAlNi4yZiBHaHoiLCAoSHorNTAwMC4wKS8xMDAwMDAwKTsKKworCWlmIChIeiA9PSB0dXJib19mcmVxdWVuY3kpCisJCXNwcmludGYoYnVmZmVyLCAiVHVyYm8iKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQgc3ZnX3BzdGF0ZShpbnQgY3B1LCB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBmcmVxKQoreworCWRvdWJsZSBoZWlnaHQgPSAwOworCisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwlpZiAobWF4X2ZyZXEpCisJCWhlaWdodCA9IGZyZXEgKiAxLjAgLyBtYXhfZnJlcSAqIChTTE9UX0hFSUdIVCArIFNMT1RfTVVMVCk7CisJaGVpZ2h0ID0gMSArIGNwdTJ5KGNwdSkgKyBTTE9UX01VTFQgKyBTTE9UX0hFSUdIVCAtIGhlaWdodDsKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeDI9XCIlNC44ZlwiIHkxPVwiJTQuMWZcIiB5Mj1cIiU0LjFmXCIgY2xhc3M9XCJwc3RhdGVcIi8+XG4iLAorCQl0aW1lMnBpeGVscyhzdGFydCksIHRpbWUycGl4ZWxzKGVuZCksIGhlaWdodCwgaGVpZ2h0KTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8dGV4dCB4PVwiJTQuOGZcIiB5PVwiJTQuOGZcIiBmb250LXNpemU9XCIwLjI1cHRcIj4lczwvdGV4dD5cbiIsCisJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgaGVpZ2h0KzAuOSwgSHpUb0h1bWFuKGZyZXEpKTsKKworfQorCisKK3ZvaWQgc3ZnX3BhcnRpYWxfd2FrZWxpbmUodTY0IHN0YXJ0LCBpbnQgcm93MSwgY2hhciAqZGVzYzEsIGludCByb3cyLCBjaGFyICpkZXNjMikKK3sKKwlkb3VibGUgaGVpZ2h0OworCisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKworCWlmIChyb3cxIDwgcm93MikgeworCQlpZiAocm93MSkgeworCQkJZnByaW50ZihzdmdmaWxlLCAiPGxpbmUgeDE9XCIlNC44ZlwiIHkxPVwiJTQuMmZcIiB4Mj1cIiU0LjhmXCIgeTI9XCIlNC4yZlwiIHN0eWxlPVwic3Ryb2tlOnJnYigzMiwyNTUsMzIpO3N0cm9rZS13aWR0aDowLjAwOVwiLz5cbiIsCisJCQkJdGltZTJwaXhlbHMoc3RhcnQpLCByb3cxICogU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQsICB0aW1lMnBpeGVscyhzdGFydCksIHJvdzEgKiBTTE9UX01VTFQgKyBTTE9UX0hFSUdIVCArIFNMT1RfTVVMVC8zMik7CisJCQlpZiAoZGVzYzIpCisJCQkJZnByaW50ZihzdmdmaWxlLCAiPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCU0LjhmLCU0LjhmKVwiPjx0ZXh0IHRyYW5zZm9ybT1cInJvdGF0ZSg5MClcIiBmb250LXNpemU9XCIwLjAycHRcIj4lcyAmZ3Q7PC90ZXh0PjwvZz5cbiIsCisJCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MSAqIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hUICsgU0xPVF9IRUlHSFQvNDgsIGRlc2MyKTsKKwkJfQorCQlpZiAocm93MikgeworCQkJZnByaW50ZihzdmdmaWxlLCAiPGxpbmUgeDE9XCIlNC44ZlwiIHkxPVwiJTQuMmZcIiB4Mj1cIiU0LjhmXCIgeTI9XCIlNC4yZlwiIHN0eWxlPVwic3Ryb2tlOnJnYigzMiwyNTUsMzIpO3N0cm9rZS13aWR0aDowLjAwOVwiLz5cbiIsCisJCQkJdGltZTJwaXhlbHMoc3RhcnQpLCByb3cyICogU0xPVF9NVUxUIC0gU0xPVF9NVUxULzMyLCAgdGltZTJwaXhlbHMoc3RhcnQpLCByb3cyICogU0xPVF9NVUxUKTsKKwkJCWlmIChkZXNjMSkKKwkJCQlmcHJpbnRmKHN2Z2ZpbGUsICI8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJTQuOGYsJTQuOGYpXCI+PHRleHQgdHJhbnNmb3JtPVwicm90YXRlKDkwKVwiIGZvbnQtc2l6ZT1cIjAuMDJwdFwiPiVzICZndDs8L3RleHQ+PC9nPlxuIiwKKwkJCQkJdGltZTJwaXhlbHMoc3RhcnQpLCByb3cyICogU0xPVF9NVUxUIC0gU0xPVF9NVUxULzMyLCBkZXNjMSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocm93MikgeworCQkJZnByaW50ZihzdmdmaWxlLCAiPGxpbmUgeDE9XCIlNC44ZlwiIHkxPVwiJTQuMmZcIiB4Mj1cIiU0LjhmXCIgeTI9XCIlNC4yZlwiIHN0eWxlPVwic3Ryb2tlOnJnYigzMiwyNTUsMzIpO3N0cm9rZS13aWR0aDowLjAwOVwiLz5cbiIsCisJCQkJdGltZTJwaXhlbHMoc3RhcnQpLCByb3cyICogU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQsICB0aW1lMnBpeGVscyhzdGFydCksIHJvdzIgKiBTTE9UX01VTFQgKyBTTE9UX0hFSUdIVCArIFNMT1RfTVVMVC8zMik7CisJCQlpZiAoZGVzYzEpCisJCQkJZnByaW50ZihzdmdmaWxlLCAiPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCU0LjhmLCU0LjhmKVwiPjx0ZXh0IHRyYW5zZm9ybT1cInJvdGF0ZSg5MClcIiBmb250LXNpemU9XCIwLjAycHRcIj4lcyAmbHQ7PC90ZXh0PjwvZz5cbiIsCisJCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MiAqIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hUICsgU0xPVF9NVUxULzQ4LCBkZXNjMSk7CisJCX0KKwkJaWYgKHJvdzEpIHsKKwkJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJTQuMmZcIiBzdHlsZT1cInN0cm9rZTpyZ2IoMzIsMjU1LDMyKTtzdHJva2Utd2lkdGg6MC4wMDlcIi8+XG4iLAorCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MSAqIFNMT1RfTVVMVCAtIFNMT1RfTVVMVC8zMiwgIHRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MSAqIFNMT1RfTVVMVCk7CisJCQlpZiAoZGVzYzIpCisJCQkJZnByaW50ZihzdmdmaWxlLCAiPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCU0LjhmLCU0LjhmKVwiPjx0ZXh0IHRyYW5zZm9ybT1cInJvdGF0ZSg5MClcIiBmb250LXNpemU9XCIwLjAycHRcIj4lcyAmbHQ7PC90ZXh0PjwvZz5cbiIsCisJCQkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MSAqIFNMT1RfTVVMVCAtIFNMT1RfSEVJR0hULzMyLCBkZXNjMik7CisJCX0KKwl9CisJaGVpZ2h0ID0gcm93MSAqIFNMT1RfTVVMVDsKKwlpZiAocm93MiA+IHJvdzEpCisJCWhlaWdodCArPSBTTE9UX0hFSUdIVDsKKwlpZiAocm93MSkKKwkJZnByaW50ZihzdmdmaWxlLCAiPGNpcmNsZSAgY3g9XCIlNC44ZlwiIGN5PVwiJTQuMmZcIiByID0gXCIwLjAxXCIgIHN0eWxlPVwiZmlsbDpyZ2IoMzIsMjU1LDMyKVwiLz5cbiIsCisJCQl0aW1lMnBpeGVscyhzdGFydCksIGhlaWdodCk7Cit9CisKK3ZvaWQgc3ZnX3dha2VsaW5lKHU2NCBzdGFydCwgaW50IHJvdzEsIGludCByb3cyKQoreworCWRvdWJsZSBoZWlnaHQ7CisKKwlpZiAoIXN2Z2ZpbGUpCisJCXJldHVybjsKKworCisJaWYgKHJvdzEgPCByb3cyKQorCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiU0LjJmXCIgc3R5bGU9XCJzdHJva2U6cmdiKDMyLDI1NSwzMik7c3Ryb2tlLXdpZHRoOjAuMDA5XCIvPlxuIiwKKwkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93MSAqIFNMT1RfTVVMVCArIFNMT1RfSEVJR0hULCAgdGltZTJwaXhlbHMoc3RhcnQpLCByb3cyICogU0xPVF9NVUxUKTsKKwllbHNlCisJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJTQuMmZcIiBzdHlsZT1cInN0cm9rZTpyZ2IoMzIsMjU1LDMyKTtzdHJva2Utd2lkdGg6MC4wMDlcIi8+XG4iLAorCQkJdGltZTJwaXhlbHMoc3RhcnQpLCByb3cyICogU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQsICB0aW1lMnBpeGVscyhzdGFydCksIHJvdzEgKiBTTE9UX01VTFQpOworCisJaGVpZ2h0ID0gcm93MSAqIFNMT1RfTVVMVDsKKwlpZiAocm93MiA+IHJvdzEpCisJCWhlaWdodCArPSBTTE9UX0hFSUdIVDsKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8Y2lyY2xlICBjeD1cIiU0LjhmXCIgY3k9XCIlNC4yZlwiIHIgPSBcIjAuMDFcIiAgc3R5bGU9XCJmaWxsOnJnYigzMiwyNTUsMzIpXCIvPlxuIiwKKwkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgaGVpZ2h0KTsKK30KKwordm9pZCBzdmdfaW50ZXJydXB0KHU2NCBzdGFydCwgaW50IHJvdykKK3sKKwlpZiAoIXN2Z2ZpbGUpCisJCXJldHVybjsKKworCWZwcmludGYoc3ZnZmlsZSwgIjxjaXJjbGUgIGN4PVwiJTQuOGZcIiBjeT1cIiU0LjJmXCIgciA9IFwiMC4wMVwiICBzdHlsZT1cImZpbGw6cmdiKDI1NSwxMjgsMTI4KVwiLz5cbiIsCisJCQl0aW1lMnBpeGVscyhzdGFydCksIHJvdyAqIFNMT1RfTVVMVCk7CisJZnByaW50ZihzdmdmaWxlLCAiPGNpcmNsZSAgY3g9XCIlNC44ZlwiIGN5PVwiJTQuMmZcIiByID0gXCIwLjAxXCIgIHN0eWxlPVwiZmlsbDpyZ2IoMjU1LDEyOCwxMjgpXCIvPlxuIiwKKwkJCXRpbWUycGl4ZWxzKHN0YXJ0KSwgcm93ICogU0xPVF9NVUxUICsgU0xPVF9IRUlHSFQpOworfQorCit2b2lkIHN2Z190ZXh0KGludCBZc2xvdCwgdTY0IHN0YXJ0LCBjb25zdCBjaGFyICp0ZXh0KQoreworCWlmICghc3ZnZmlsZSkKKwkJcmV0dXJuOworCisJZnByaW50ZihzdmdmaWxlLCAiPHRleHQgeD1cIiU0LjhmXCIgeT1cIiU0LjhmXCI+JXM8L3RleHQ+XG4iLAorCQl0aW1lMnBpeGVscyhzdGFydCksIFlzbG90ICogU0xPVF9NVUxUK1NMT1RfSEVJR0hULzIsIHRleHQpOworfQorCitzdGF0aWMgdm9pZCBzdmdfbGVnZW5kYV9ib3goaW50IFgsIGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IGNoYXIgKnN0eWxlKQoreworCWRvdWJsZSBib3hzaXplOworCWJveHNpemUgPSBTTE9UX0hFSUdIVCAvIDI7CisKKwlmcHJpbnRmKHN2Z2ZpbGUsICI8cmVjdCB4PVwiJWlcIiB3aWR0aD1cIiU0LjhmXCIgeT1cIjBcIiBoZWlnaHQ9XCIlNC4xZlwiIGNsYXNzPVwiJXNcIi8+XG4iLAorCQlYLCBib3hzaXplLCBib3hzaXplLCBzdHlsZSk7CisJZnByaW50ZihzdmdmaWxlLCAiPHRleHQgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCU0LjhmLCAlNC44ZilcIiBmb250LXNpemU9XCIlNC44ZnB0XCI+JXM8L3RleHQ+XG4iLAorCQlYICsgYm94c2l6ZSArIDUsIGJveHNpemUsIDAuOCAqIGJveHNpemUsIHRleHQpOworfQorCit2b2lkIHN2Z19sZWdlbmRhKHZvaWQpCit7CisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwlzdmdfbGVnZW5kYV9ib3goMCwJIlJ1bm5pbmciLCAic2FtcGxlIik7CisJc3ZnX2xlZ2VuZGFfYm94KDEwMCwJIklkbGUiLCJyZWN0LmMxIik7CisJc3ZnX2xlZ2VuZGFfYm94KDIwMCwJIkRlZXBlciBJZGxlIiwgInJlY3QuYzMiKTsKKwlzdmdfbGVnZW5kYV9ib3goMzUwLAkiRGVlcGVzdCBJZGxlIiwgInJlY3QuYzYiKTsKKwlzdmdfbGVnZW5kYV9ib3goNTUwLAkiU2xlZXBpbmciLCAicHJvY2VzczIiKTsKKwlzdmdfbGVnZW5kYV9ib3goNjUwLAkiV2FpdGluZyBmb3IgY3B1IiwgIndhaXRpbmciKTsKKwlzdmdfbGVnZW5kYV9ib3goODAwLAkiQmxvY2tlZCBvbiBJTyIsICJibG9ja2VkIik7Cit9CisKK3ZvaWQgc3ZnX3RpbWVfZ3JpZCh2b2lkKQoreworCXU2NCBpOworCisJaWYgKCFzdmdmaWxlKQorCQlyZXR1cm47CisKKwlpID0gZmlyc3RfdGltZTsKKwl3aGlsZSAoaSA8IGxhc3RfdGltZSkgeworCQlpbnQgY29sb3IgPSAyMjA7CisJCWRvdWJsZSB0aGlja25lc3MgPSAwLjA3NTsKKwkJaWYgKChpICUgMTAwMDAwMDAwKSA9PSAwKSB7CisJCQl0aGlja25lc3MgPSAwLjU7CisJCQljb2xvciA9IDE5MjsKKwkJfQorCQlpZiAoKGkgJSAxMDAwMDAwMDAwKSA9PSAwKSB7CisJCQl0aGlja25lc3MgPSAyLjA7CisJCQljb2xvciA9IDEyODsKKwkJfQorCisJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJWxsdVwiIHN0eWxlPVwic3Ryb2tlOnJnYiglaSwlaSwlaSk7c3Ryb2tlLXdpZHRoOiUxLjNmXCIvPlxuIiwKKwkJCXRpbWUycGl4ZWxzKGkpLCBTTE9UX01VTFQvMiwgdGltZTJwaXhlbHMoaSksIHRvdGFsX2hlaWdodCwgY29sb3IsIGNvbG9yLCBjb2xvciwgdGhpY2tuZXNzKTsKKworCQlpICs9IDEwMDAwMDAwOworCX0KK30KKwordm9pZCBzdmdfY2xvc2Uodm9pZCkKK3sKKwlpZiAoc3ZnZmlsZSkgeworCQlmcHJpbnRmKHN2Z2ZpbGUsICI8L3N2Zz5cbiIpOworCQlmY2xvc2Uoc3ZnZmlsZSk7CisJCXN2Z2ZpbGUgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkzMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX0lOQ0xVREVfR1VBUkRfU1ZHX0hFTFBFUl8KKyNkZWZpbmUgX0lOQ0xVREVfR1VBUkRfU1ZHX0hFTFBFUl8KKworI2luY2x1ZGUgInR5cGVzLmgiCisKK2V4dGVybiB2b2lkIG9wZW5fc3ZnKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgY3B1cywgaW50IHJvd3MsIHU2NCBzdGFydCwgdTY0IGVuZCk7CitleHRlcm4gdm9pZCBzdmdfYm94KGludCBZc2xvdCwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKTsKK2V4dGVybiB2b2lkIHN2Z19zYW1wbGUoaW50IFlzbG90LCBpbnQgY3B1LCB1NjQgc3RhcnQsIHU2NCBlbmQpOworZXh0ZXJuIHZvaWQgc3ZnX3dhaXRpbmcoaW50IFlzbG90LCB1NjQgc3RhcnQsIHU2NCBlbmQpOworZXh0ZXJuIHZvaWQgc3ZnX2NwdV9ib3goaW50IGNwdSwgdTY0IG1heF9mcmVxdWVuY3ksIHU2NCB0dXJib19mcmVxdWVuY3kpOworCisKK2V4dGVybiB2b2lkIHN2Z19wcm9jZXNzKGludCBjcHUsIHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBzdmdfY3N0YXRlKGludCBjcHUsIHU2NCBzdGFydCwgdTY0IGVuZCwgaW50IHR5cGUpOworZXh0ZXJuIHZvaWQgc3ZnX3BzdGF0ZShpbnQgY3B1LCB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBmcmVxKTsKKworCitleHRlcm4gdm9pZCBzdmdfdGltZV9ncmlkKHZvaWQpOworZXh0ZXJuIHZvaWQgc3ZnX2xlZ2VuZGEodm9pZCk7CitleHRlcm4gdm9pZCBzdmdfd2FrZWxpbmUodTY0IHN0YXJ0LCBpbnQgcm93MSwgaW50IHJvdzIpOworZXh0ZXJuIHZvaWQgc3ZnX3BhcnRpYWxfd2FrZWxpbmUodTY0IHN0YXJ0LCBpbnQgcm93MSwgY2hhciAqZGVzYzEsIGludCByb3cyLCBjaGFyICpkZXNjMik7CitleHRlcm4gdm9pZCBzdmdfaW50ZXJydXB0KHU2NCBzdGFydCwgaW50IHJvdyk7CitleHRlcm4gdm9pZCBzdmdfdGV4dChpbnQgWXNsb3QsIHU2NCBzdGFydCwgY29uc3QgY2hhciAqdGV4dCk7CitleHRlcm4gdm9pZCBzdmdfY2xvc2Uodm9pZCk7CisKK2V4dGVybiBpbnQgc3ZnX3BhZ2Vfd2lkdGg7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCmluZGV4IDc2MzU5MjguLjQ1ZWZiNWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTgsNyArOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGhyZWFkICp0aHJlYWRfX25ldyhwaWRfdCBwaWQpCiB7Ci0Jc3RydWN0IHRocmVhZCAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKKwlzdHJ1Y3QgdGhyZWFkICpzZWxmID0gY2FsbG9jKDEsIHNpemVvZigqc2VsZikpOwogCiAJaWYgKHNlbGYgIT0gTlVMTCkgewogCQlzZWxmLT5waWQgPSBwaWQ7CkBAIC04NSw3ICs4NSw3IEBACiB7CiAJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldygwLCB0aHJlYWRzLCBsYXN0X21hdGNoKTsKIAotCWlmICghdGhyZWFkIHx8IHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCAiW2luaXRdIikpIHsKKwlpZiAoIXRocmVhZCB8fCB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgInN3YXBwZXIiKSkgewogCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gaW5zZXJ0aW5nIGlkbGUgdGFzay5cbiIpOwogCQlleGl0KC0xKTsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKaW5kZXggNjM0ZjI4MC4uMzJhZWEzYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtNCwxMCArNCwxMSBAQAogI2luY2x1ZGUgInN5bWJvbC5oIgogCiBzdHJ1Y3QgdGhyZWFkIHsKLQlzdHJ1Y3QgcmJfbm9kZQkgcmJfbm9kZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG1hcHM7Ci0JcGlkX3QJCSBwaWQ7Ci0JY2hhcgkJICpjb21tOworCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOworCXN0cnVjdCBsaXN0X2hlYWQJbWFwczsKKwlwaWRfdAkJCXBpZDsKKwljaGFyCQkJc2hvcnRuYW1lWzNdOworCWNoYXIJCQkqY29tbTsKIH07CiAKIGludCB0aHJlYWRfX3NldF9jb21tKHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbW0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKaW5kZXggNmM5MzAyYS4uYWY0YjA1NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCkBAIC00NTgsNyArNDU4LDcgQEAKIHN0YXRpYyB2b2lkIHJlYWRfZnRyYWNlX3ByaW50ayh2b2lkKQogewogCXVuc2lnbmVkIGludCBzaXplLCBjaGVja19zaXplOwotCWNvbnN0IGNoYXIgKnBhdGg7CisJY2hhciAqcGF0aDsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlpbnQgcmV0OwogCkBAIC00NjgsMjMgKzQ2OCwyNCBAQAogCQkvKiBub3QgZm91bmQgKi8KIAkJc2l6ZSA9IDA7CiAJCXdyaXRlX29yX2RpZSgmc2l6ZSwgNCk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCXNpemUgPSBnZXRfc2l6ZShwYXRoKTsKIAl3cml0ZV9vcl9kaWUoJnNpemUsIDQpOwogCWNoZWNrX3NpemUgPSBjb3B5X2ZpbGUocGF0aCk7CiAJaWYgKHNpemUgIT0gY2hlY2tfc2l6ZSkKIAkJZGllKCJlcnJvciBpbiBzaXplIG9mIGZpbGUgJyVzJyIsIHBhdGgpOwotCitvdXQ6CisJcHV0X3RyYWNpbmdfZmlsZShwYXRoKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKgotZ2V0X3RyYWNlcG9pbnRzX3BhdGgoc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICpwYXR0cnMsIGludCBuYl9jb3VudGVycykKK2dldF90cmFjZXBvaW50c19wYXRoKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywgaW50IG5iX2V2ZW50cykKIHsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoIHBhdGgsICpwcGF0aCA9ICZwYXRoOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG5iX2NvdW50ZXJzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmJfZXZlbnRzOyBpKyspIHsKIAkJaWYgKHBhdHRyc1tpXS50eXBlICE9IFBFUkZfVFlQRV9UUkFDRVBPSU5UKQogCQkJY29udGludWU7CiAJCXBwYXRoLT5uZXh0ID0gdHJhY2Vwb2ludF9pZF90b19wYXRoKHBhdHRyc1tpXS5jb25maWcpOwpAQCAtNDk1LDcgKzQ5Niw3IEBACiAKIAlyZXR1cm4gcGF0aC5uZXh0OwogfQotdm9pZCByZWFkX3RyYWNpbmdfZGF0YShzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKnBhdHRycywgaW50IG5iX2NvdW50ZXJzKQordm9pZCByZWFkX3RyYWNpbmdfZGF0YShzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpwYXR0cnMsIGludCBuYl9ldmVudHMpCiB7CiAJY2hhciBidWZbQlVGU0laXTsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHM7CkBAIC01MjksNyArNTMwLDcgQEAKIAlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwogCXdyaXRlX29yX2RpZSgmcGFnZV9zaXplLCA0KTsKIAotCXRwcyA9IGdldF90cmFjZXBvaW50c19wYXRoKHBhdHRycywgbmJfY291bnRlcnMpOworCXRwcyA9IGdldF90cmFjZXBvaW50c19wYXRoKHBhdHRycywgbmJfZXZlbnRzKTsKIAogCXJlYWRfaGVhZGVyX2ZpbGVzKCk7CiAJcmVhZF9mdHJhY2VfZmlsZXModHBzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKaW5kZXggNjI5ZTYwMi4uZjZhODQzNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKQEAgLTE3NzYsNiArMTc3NiwyOSBAQAogCX0KIH0KIAordW5zaWduZWQgbG9uZyBsb25nCityYXdfZmllbGRfdmFsdWUoc3RydWN0IGV2ZW50ICpldmVudCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKKworCWZpZWxkID0gZmluZF9hbnlfZmllbGQoZXZlbnQsIG5hbWUpOworCWlmICghZmllbGQpCisJCXJldHVybiAwVUxMOworCisJcmV0dXJuIHJlYWRfc2l6ZShkYXRhICsgZmllbGQtPm9mZnNldCwgZmllbGQtPnNpemUpOworfQorCit2b2lkICpyYXdfZmllbGRfcHRyKHN0cnVjdCBldmVudCAqZXZlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CisKKwlmaWVsZCA9IGZpbmRfYW55X2ZpZWxkKGV2ZW50LCBuYW1lKTsKKwlpZiAoIWZpZWxkKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBkYXRhICsgZmllbGQtPm9mZnNldDsKK30KKwogc3RhdGljIGludCBnZXRfY29tbW9uX2luZm8oY29uc3QgY2hhciAqdHlwZSwgaW50ICpvZmZzZXQsIGludCAqc2l6ZSkKIHsKIAlzdHJ1Y3QgZXZlbnQgKmV2ZW50OwpAQCAtMTc5OSw3ICsxODIyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYXJzZV9jb21tb25fdHlwZSh2b2lkICpkYXRhKQoraW50IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGludCB0eXBlX29mZnNldDsKIAlzdGF0aWMgaW50IHR5cGVfc2l6ZTsKQEAgLTE4MzIsNyArMTg1NSw3IEBACiAJcmV0dXJuIHJlYWRfc2l6ZShkYXRhICsgcGlkX29mZnNldCwgcGlkX3NpemUpOwogfQogCi1zdGF0aWMgc3RydWN0IGV2ZW50ICpmaW5kX2V2ZW50KGludCBpZCkKK3N0cnVjdCBldmVudCAqdHJhY2VfZmluZF9ldmVudChpbnQgaWQpCiB7CiAJc3RydWN0IGV2ZW50ICpldmVudDsKIApAQCAtMjQyMCw4ICsyNDQzLDggQEAKIAlpbnQgdHlwZTsKIAlpbnQgcGlkOwogCi0JdHlwZSA9IHBhcnNlX2NvbW1vbl90eXBlKG5leHQtPmRhdGEpOwotCWV2ZW50ID0gZmluZF9ldmVudCh0eXBlKTsKKwl0eXBlID0gdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUobmV4dC0+ZGF0YSk7CisJZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOwogCWlmICghZXZlbnQpCiAJCXJldHVybiBOVUxMOwogCkBAIC0yNTAyLDggKzI1MjUsOCBAQAogCWludCB0eXBlOwogCWludCBpOwogCi0JdHlwZSA9IHBhcnNlX2NvbW1vbl90eXBlKHJldF9yZWMtPmRhdGEpOwotCXJldF9ldmVudCA9IGZpbmRfZXZlbnQodHlwZSk7CisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKHJldF9yZWMtPmRhdGEpOworCXJldF9ldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CiAKIAlmaWVsZCA9IGZpbmRfZmllbGQocmV0X2V2ZW50LCAicmV0dGltZSIpOwogCWlmICghZmllbGQpCkBAIC0yNjk2LDExICsyNzE5LDEzIEBACiAJbnNlY3MgLT0gc2VjcyAqIE5TRUNTX1BFUl9TRUM7CiAJdXNlY3MgPSBuc2VjcyAvIE5TRUNTX1BFUl9VU0VDOwogCi0JdHlwZSA9IHBhcnNlX2NvbW1vbl90eXBlKGRhdGEpOworCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShkYXRhKTsKIAotCWV2ZW50ID0gZmluZF9ldmVudCh0eXBlKTsKLQlpZiAoIWV2ZW50KQotCQlkaWUoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlZCIsIHR5cGUpOworCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKKwlpZiAoIWV2ZW50KSB7CisJCXByaW50ZigidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICVkXG4iLCB0eXBlKTsKKwkJcmV0dXJuOworCX0KIAogCXBpZCA9IHBhcnNlX2NvbW1vbl9waWQoZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCmluZGV4IGExMjE3YTEuLjFiNWM4NDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYwpAQCAtNDU4LDEyICs0NTgsMTMgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotdm9pZCB0cmFjZV9yZXBvcnQgKHZvaWQpCit2b2lkIHRyYWNlX3JlcG9ydCh2b2lkKQogewogCWNvbnN0IGNoYXIgKmlucHV0X2ZpbGUgPSAidHJhY2UuaW5mbyI7CiAJY2hhciBidWZbQlVGU0laXTsKIAljaGFyIHRlc3RbXSA9IHsgMjMsIDgsIDY4IH07CiAJY2hhciAqdmVyc2lvbjsKKwlpbnQgc2hvd192ZXJzaW9uID0gMDsKIAlpbnQgc2hvd19mdW5jcyA9IDA7CiAJaW50IHNob3dfcHJpbnRrID0gMDsKIApAQCAtNDgwLDcgKzQ4MSw4IEBACiAJCWRpZSgibm90IGEgdHJhY2UgZmlsZSAobWlzc2luZyB0cmFjaW5nKSIpOwogCiAJdmVyc2lvbiA9IHJlYWRfc3RyaW5nKCk7Ci0JcHJpbnRmKCJ2ZXJzaW9uID0gJXNcbiIsIHZlcnNpb24pOworCWlmIChzaG93X3ZlcnNpb24pCisJCXByaW50ZigidmVyc2lvbiA9ICVzXG4iLCB2ZXJzaW9uKTsKIAlmcmVlKHZlcnNpb24pOwogCiAJcmVhZF9vcl9kaWUoYnVmLCAxKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmgKaW5kZXggNDIwMjk0YS4uNjkzZjgxNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmgKQEAgLTIzNCw3ICsyMzQsMTIgQEAKIGV4dGVybiBpbnQgaGVhZGVyX3BhZ2VfZGF0YV9zaXplOwogCiBpbnQgcGFyc2VfaGVhZGVyX3BhZ2UoY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworaW50IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKHZvaWQgKmRhdGEpOworc3RydWN0IGV2ZW50ICp0cmFjZV9maW5kX2V2ZW50KGludCBpZCk7Cit1bnNpZ25lZCBsb25nIGxvbmcKK3Jhd19maWVsZF92YWx1ZShzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKTsKK3ZvaWQgKnJhd19maWVsZF9wdHIoc3RydWN0IGV2ZW50ICpldmVudCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSk7CiAKLXZvaWQgcmVhZF90cmFjaW5nX2RhdGEoc3RydWN0IHBlcmZfY291bnRlcl9hdHRyICpwYXR0cnMsIGludCBuYl9jb3VudGVycyk7Cit2b2lkIHJlYWRfdHJhY2luZ19kYXRhKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywgaW50IG5iX2V2ZW50cyk7CiAKICNlbmRpZiAvKiBfVFJBQ0VfRVZFTlRTX0ggKi8KZGlmZiAtLWdpdCBhL3Vzci9nZW5faW5pdF9jcGlvLmMgYi91c3IvZ2VuX2luaXRfY3Bpby5jCmluZGV4IGYxZDNmZTMuLjgzYjNkZGUgMTAwNjQ0Ci0tLSBhL3Vzci9nZW5faW5pdF9jcGlvLmMKKysrIGIvdXNyL2dlbl9pbml0X2NwaW8uYwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJcmV0dXJuIHJjOwogfQogCi12b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKQogewogCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XG4iCiAJCSJcdCVzIDxjcGlvX2xpc3Q+XG4iCg==